From 0fd70e1ed0836dd7282e3ddc3949bfe18d14e7be Mon Sep 17 00:00:00 2001 From: fgrond Date: Fri, 2 Jun 2017 15:04:22 -0400 Subject: [PATCH 01/30] added HOAUgens --- source/HOAUGens/HOABeamDirac2Hoa1.cpp | 1118 +++++ source/HOAUGens/HOABeamDirac2Hoa2.cpp | 1167 ++++++ source/HOAUGens/HOABeamDirac2Hoa3.cpp | 1225 ++++++ source/HOAUGens/HOABeamDirac2Hoa4.cpp | 1277 ++++++ source/HOAUGens/HOABeamDirac2Hoa5.cpp | 1356 ++++++ source/HOAUGens/HOABeamHCardioid2Hoa1.cpp | 1164 ++++++ source/HOAUGens/HOABeamHCardioid2Hoa2.cpp | 1258 ++++++ source/HOAUGens/HOABeamHCardioid2Hoa3.cpp | 1404 +++++++ source/HOAUGens/HOAConverter1.cpp | 1069 +++++ source/HOAUGens/HOAConverter2.cpp | 1222 ++++++ source/HOAUGens/HOAConverter3.cpp | 1433 +++++++ source/HOAUGens/HOAConverter4.cpp | 1698 ++++++++ source/HOAUGens/HOAConverter5.cpp | 2021 +++++++++ source/HOAUGens/HOADecLebedev061.cpp | 1255 ++++++ source/HOAUGens/HOADecLebedev261.cpp | 1557 +++++++ source/HOAUGens/HOADecLebedev262.cpp | 1736 ++++++++ source/HOAUGens/HOADecLebedev263.cpp | 2037 +++++++++ source/HOAUGens/HOADecLebedev501.cpp | 1916 +++++++++ source/HOAUGens/HOADecLebedev502.cpp | 2140 ++++++++++ source/HOAUGens/HOADecLebedev503.cpp | 2500 +++++++++++ source/HOAUGens/HOADecLebedev504.cpp | 2988 +++++++++++++ source/HOAUGens/HOADecLebedev505.cpp | 3688 +++++++++++++++++ source/HOAUGens/HOAEncoder1.cpp | 1058 +++++ source/HOAUGens/HOAEncoder2.cpp | 1197 ++++++ source/HOAUGens/HOAEncoder3.cpp | 1372 ++++++ source/HOAUGens/HOAEncoder4.cpp | 1594 +++++++ source/HOAUGens/HOAEncoder5.cpp | 1875 +++++++++ source/HOAUGens/HOAMicLebedev061.cpp | 1180 ++++++ source/HOAUGens/HOAMicLebedev261.cpp | 1446 +++++++ source/HOAUGens/HOAMicLebedev262.cpp | 1521 +++++++ source/HOAUGens/HOAMicLebedev263.cpp | 1631 ++++++++ source/HOAUGens/HOAMicLebedev501.cpp | 1157 ++++++ source/HOAUGens/HOAMicLebedev502.cpp | 1187 ++++++ source/HOAUGens/HOAMicLebedev503.cpp | 1236 ++++++ source/HOAUGens/HOAMicLebedev504.cpp | 1281 ++++++ source/HOAUGens/HOAMicLebedev505.cpp | 1313 ++++++ source/HOAUGens/HOAMirror1.cpp | 1045 +++++ source/HOAUGens/HOAMirror2.cpp | 1075 +++++ source/HOAUGens/HOAMirror3.cpp | 1117 +++++ source/HOAUGens/HOAMirror4.cpp | 1171 ++++++ source/HOAUGens/HOAMirror5.cpp | 1237 ++++++ source/HOAUGens/HOAPanLebedev061.cpp | 1300 ++++++ source/HOAUGens/HOAPanLebedev261.cpp | 1640 ++++++++ source/HOAUGens/HOAPanLebedev262.cpp | 1811 ++++++++ source/HOAUGens/HOAPanLebedev263.cpp | 2049 +++++++++ source/HOAUGens/HOAPanLebedev501.cpp | 2058 +++++++++ source/HOAUGens/HOAPanLebedev502.cpp | 2277 ++++++++++ source/HOAUGens/HOAPanLebedev503.cpp | 2611 ++++++++++++ source/HOAUGens/HOAPanLebedev504.cpp | 2913 +++++++++++++ source/HOAUGens/HOAPanLebedev505.cpp | 3266 +++++++++++++++ source/HOAUGens/HOARotatorAz1.cpp | 1037 +++++ source/HOAUGens/HOARotatorAz2.cpp | 1062 +++++ source/HOAUGens/HOARotatorAz3.cpp | 1095 +++++ source/HOAUGens/HOARotatorAz4.cpp | 1136 +++++ source/HOAUGens/HOARotatorAz5.cpp | 1185 ++++++ .../HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc | 30 + .../HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc | 30 + .../HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc | 30 + .../HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc | 30 + .../HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc | 30 + .../sc/Classes/HOABeamHCardioid2Hoa1.sc | 30 + .../sc/Classes/HOABeamHCardioid2Hoa2.sc | 30 + .../sc/Classes/HOABeamHCardioid2Hoa3.sc | 30 + source/HOAUGens/sc/Classes/HOAConverter1.sc | 30 + source/HOAUGens/sc/Classes/HOAConverter2.sc | 30 + source/HOAUGens/sc/Classes/HOAConverter3.sc | 30 + source/HOAUGens/sc/Classes/HOAConverter4.sc | 30 + source/HOAUGens/sc/Classes/HOAConverter5.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev061.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev261.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev262.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev263.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev501.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev502.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev503.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev504.sc | 30 + .../HOAUGens/sc/Classes/HOADecLebedev505.sc | 30 + source/HOAUGens/sc/Classes/HOAEncoder1.sc | 30 + source/HOAUGens/sc/Classes/HOAEncoder2.sc | 30 + source/HOAUGens/sc/Classes/HOAEncoder3.sc | 30 + source/HOAUGens/sc/Classes/HOAEncoder4.sc | 30 + source/HOAUGens/sc/Classes/HOAEncoder5.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev061.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev261.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev262.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev263.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev501.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev502.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev503.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev504.sc | 30 + .../HOAUGens/sc/Classes/HOAMicLebedev505.sc | 30 + source/HOAUGens/sc/Classes/HOAMirror1.sc | 30 + source/HOAUGens/sc/Classes/HOAMirror2.sc | 30 + source/HOAUGens/sc/Classes/HOAMirror3.sc | 30 + source/HOAUGens/sc/Classes/HOAMirror4.sc | 30 + source/HOAUGens/sc/Classes/HOAMirror5.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev061.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev261.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev262.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev263.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev501.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev502.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev503.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev504.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev505.sc | 30 + source/HOAUGens/sc/Classes/HOARotatorAz1.sc | 30 + source/HOAUGens/sc/Classes/HOARotatorAz2.sc | 30 + source/HOAUGens/sc/Classes/HOARotatorAz3.sc | 30 + source/HOAUGens/sc/Classes/HOARotatorAz4.sc | 30 + source/HOAUGens/sc/Classes/HOARotatorAz5.sc | 30 + 110 files changed, 89012 insertions(+) create mode 100644 source/HOAUGens/HOABeamDirac2Hoa1.cpp create mode 100644 source/HOAUGens/HOABeamDirac2Hoa2.cpp create mode 100644 source/HOAUGens/HOABeamDirac2Hoa3.cpp create mode 100644 source/HOAUGens/HOABeamDirac2Hoa4.cpp create mode 100644 source/HOAUGens/HOABeamDirac2Hoa5.cpp create mode 100644 source/HOAUGens/HOABeamHCardioid2Hoa1.cpp create mode 100644 source/HOAUGens/HOABeamHCardioid2Hoa2.cpp create mode 100644 source/HOAUGens/HOABeamHCardioid2Hoa3.cpp create mode 100644 source/HOAUGens/HOAConverter1.cpp create mode 100644 source/HOAUGens/HOAConverter2.cpp create mode 100644 source/HOAUGens/HOAConverter3.cpp create mode 100644 source/HOAUGens/HOAConverter4.cpp create mode 100644 source/HOAUGens/HOAConverter5.cpp create mode 100644 source/HOAUGens/HOADecLebedev061.cpp create mode 100644 source/HOAUGens/HOADecLebedev261.cpp create mode 100644 source/HOAUGens/HOADecLebedev262.cpp create mode 100644 source/HOAUGens/HOADecLebedev263.cpp create mode 100644 source/HOAUGens/HOADecLebedev501.cpp create mode 100644 source/HOAUGens/HOADecLebedev502.cpp create mode 100644 source/HOAUGens/HOADecLebedev503.cpp create mode 100644 source/HOAUGens/HOADecLebedev504.cpp create mode 100644 source/HOAUGens/HOADecLebedev505.cpp create mode 100644 source/HOAUGens/HOAEncoder1.cpp create mode 100644 source/HOAUGens/HOAEncoder2.cpp create mode 100644 source/HOAUGens/HOAEncoder3.cpp create mode 100644 source/HOAUGens/HOAEncoder4.cpp create mode 100644 source/HOAUGens/HOAEncoder5.cpp create mode 100644 source/HOAUGens/HOAMicLebedev061.cpp create mode 100644 source/HOAUGens/HOAMicLebedev261.cpp create mode 100644 source/HOAUGens/HOAMicLebedev262.cpp create mode 100644 source/HOAUGens/HOAMicLebedev263.cpp create mode 100644 source/HOAUGens/HOAMicLebedev501.cpp create mode 100644 source/HOAUGens/HOAMicLebedev502.cpp create mode 100644 source/HOAUGens/HOAMicLebedev503.cpp create mode 100644 source/HOAUGens/HOAMicLebedev504.cpp create mode 100644 source/HOAUGens/HOAMicLebedev505.cpp create mode 100644 source/HOAUGens/HOAMirror1.cpp create mode 100644 source/HOAUGens/HOAMirror2.cpp create mode 100644 source/HOAUGens/HOAMirror3.cpp create mode 100644 source/HOAUGens/HOAMirror4.cpp create mode 100644 source/HOAUGens/HOAMirror5.cpp create mode 100644 source/HOAUGens/HOAPanLebedev061.cpp create mode 100644 source/HOAUGens/HOAPanLebedev261.cpp create mode 100644 source/HOAUGens/HOAPanLebedev262.cpp create mode 100644 source/HOAUGens/HOAPanLebedev263.cpp create mode 100644 source/HOAUGens/HOAPanLebedev501.cpp create mode 100644 source/HOAUGens/HOAPanLebedev502.cpp create mode 100644 source/HOAUGens/HOAPanLebedev503.cpp create mode 100644 source/HOAUGens/HOAPanLebedev504.cpp create mode 100644 source/HOAUGens/HOAPanLebedev505.cpp create mode 100644 source/HOAUGens/HOARotatorAz1.cpp create mode 100644 source/HOAUGens/HOARotatorAz2.cpp create mode 100644 source/HOAUGens/HOARotatorAz3.cpp create mode 100644 source/HOAUGens/HOARotatorAz4.cpp create mode 100644 source/HOAUGens/HOARotatorAz5.cpp create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa1.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa2.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa3.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverter1.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverter2.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverter3.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverter4.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverter5.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev061.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev261.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev262.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev263.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev501.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev502.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev503.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev504.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecLebedev505.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncoder1.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncoder2.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncoder3.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncoder4.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncoder5.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev061.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev261.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev262.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev263.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev501.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev502.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev503.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev504.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMicLebedev505.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror1.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror2.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror3.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror4.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror5.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev061.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev261.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev262.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev263.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev501.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev502.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev503.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev504.sc create mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev505.sc create mode 100644 source/HOAUGens/sc/Classes/HOARotatorAz1.sc create mode 100644 source/HOAUGens/sc/Classes/HOARotatorAz2.sc create mode 100644 source/HOAUGens/sc/Classes/HOARotatorAz3.sc create mode 100644 source/HOAUGens/sc/Classes/HOARotatorAz4.sc create mode 100644 source/HOAUGens/sc/Classes/HOARotatorAz5.sc diff --git a/source/HOAUGens/HOABeamDirac2Hoa1.cpp b/source/HOAUGens/HOABeamDirac2Hoa1.cpp new file mode 100644 index 0000000000..ded2e7a108 --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2Hoa1.cpp @@ -0,0 +1,1118 @@ +//---------------------------------------------------------- +// name: "HOABeamDirac2Hoa1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fcheckbox0; + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fslider0; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOABeamDirac2Hoa1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 4; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fentry0 = 1.0; + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "3", ""); + ui_interface->declare(&fentry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); + ui_interface->declare(&fslider0, "4", ""); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider0, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = int(((1 - fSlow0) > 0)); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = int((fSlow0 > 0)); + double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow8 = double(fslider1); + double fSlow9 = sin(fSlow8); + double fSlow10 = cos(fSlow8); + double fSlow11 = double(fslider2); + double fSlow12 = cos(fSlow11); + double fSlow13 = sin(fSlow11); + double fSlow14 = (0.13783222385544802 * (fSlow10 * fSlow13)); + double fSlow15 = (0.13783222385544802 * fSlow9); + double fSlow16 = (0.13783222385544802 * (fSlow10 * fSlow12)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOABeamDirac2Hoa2.cpp b/source/HOAUGens/HOABeamDirac2Hoa2.cpp new file mode 100644 index 0000000000..b4641f24e5 --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2Hoa2.cpp @@ -0,0 +1,1167 @@ +//---------------------------------------------------------- +// name: "HOABeamDirac2Hoa2" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fcheckbox0; + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + FAUSTFLOAT fslider2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOABeamDirac2Hoa2"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 9; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fentry0 = 1.0; + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "3", ""); + ui_interface->declare(&fentry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); + ui_interface->declare(&fslider1, "4", ""); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = int(((1 - fSlow0) > 0)); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = int((fSlow0 > 0)); + double fSlow7 = double(fslider0); + double fSlow8 = sin(fSlow7); + double fSlow9 = ((3 * faustpower<2>(fSlow8)) + -1); + double fSlow10 = (1.118033988749895 * fSlow9); + double fSlow11 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow12 = cos(fSlow7); + double fSlow13 = double(fslider2); + double fSlow14 = cos(fSlow13); + double fSlow15 = sin(fSlow13); + double fSlow16 = sin((2 * fSlow7)); + double fSlow17 = faustpower<2>(fSlow12); + double fSlow18 = (2 * fSlow13); + double fSlow19 = sin(fSlow18); + double fSlow20 = cos(fSlow18); + double fSlow21 = (0.13783222385544802 * (fSlow12 * fSlow15)); + double fSlow22 = (0.13783222385544802 * fSlow8); + double fSlow23 = (0.13783222385544802 * (fSlow12 * fSlow14)); + double fSlow24 = (0.15410111101537496 * (fSlow17 * fSlow19)); + double fSlow25 = (0.15410111101537496 * (fSlow16 * fSlow15)); + double fSlow26 = (0.08897031792714714 * fSlow9); + double fSlow27 = (0.15410111101537496 * (fSlow16 * fSlow14)); + double fSlow28 = (0.15410111101537496 * (fSlow17 * fSlow20)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOABeamDirac2Hoa3.cpp b/source/HOAUGens/HOABeamDirac2Hoa3.cpp new file mode 100644 index 0000000000..35acdc4e81 --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2Hoa3.cpp @@ -0,0 +1,1225 @@ +//---------------------------------------------------------- +// name: "HOABeamDirac2Hoa3" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fcheckbox0; + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fslider0; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOABeamDirac2Hoa3"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 16; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fentry0 = 1.0; + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "3", ""); + ui_interface->declare(&fentry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); + ui_interface->declare(&fslider0, "4", ""); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider0, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = int(((1 - fSlow0) > 0)); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = int((fSlow0 > 0)); + double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow8 = double(fslider1); + double fSlow9 = sin(fSlow8); + double fSlow10 = cos(fSlow8); + double fSlow11 = double(fslider2); + double fSlow12 = sin(fSlow11); + double fSlow13 = cos(fSlow11); + double fSlow14 = faustpower<2>(fSlow9); + double fSlow15 = ((3 * fSlow14) + -1); + double fSlow16 = (1.118033988749895 * fSlow15); + double fSlow17 = sin((2 * fSlow8)); + double fSlow18 = faustpower<2>(fSlow10); + double fSlow19 = (2 * fSlow11); + double fSlow20 = sin(fSlow19); + double fSlow21 = cos(fSlow19); + double fSlow22 = (5 * fSlow14); + double fSlow23 = (fSlow22 + -3); + double fSlow24 = (1.3228756555322954 * fSlow23); + double fSlow25 = (fSlow21 * fSlow18); + double fSlow26 = (5.123475382979799 * fSlow25); + double fSlow27 = (fSlow22 + -1); + double fSlow28 = (1.620185174601965 * fSlow27); + double fSlow29 = (3 * fSlow11); + double fSlow30 = sin(fSlow29); + double fSlow31 = (2.091650066335189 * (fSlow30 * fSlow10)); + double fSlow32 = (5.123475382979799 * (fSlow20 * fSlow9)); + double fSlow33 = cos(fSlow29); + double fSlow34 = (2.091650066335189 * (fSlow33 * fSlow10)); + double fSlow35 = (0.13783222385544802 * (fSlow12 * fSlow10)); + double fSlow36 = (0.13783222385544802 * fSlow9); + double fSlow37 = (0.13783222385544802 * (fSlow13 * fSlow10)); + double fSlow38 = (fSlow20 * fSlow18); + double fSlow39 = (0.15410111101537496 * fSlow38); + double fSlow40 = (0.15410111101537496 * (fSlow12 * fSlow17)); + double fSlow41 = (0.08897031792714714 * fSlow15); + double fSlow42 = (0.15410111101537496 * (fSlow13 * fSlow17)); + double fSlow43 = (0.15410111101537496 * fSlow25); + double fSlow44 = faustpower<3>(fSlow10); + double fSlow45 = (0.16644822363786807 * (fSlow30 * fSlow44)); + double fSlow46 = (0.4077132165054383 * (fSlow38 * fSlow9)); + double fSlow47 = (0.12893023963105413 * ((fSlow12 * fSlow27) * fSlow10)); + double fSlow48 = (0.10527109983694811 * (fSlow23 * fSlow9)); + double fSlow49 = (0.12893023963105413 * ((fSlow13 * fSlow27) * fSlow10)); + double fSlow50 = (0.4077132165054383 * (fSlow25 * fSlow9)); + double fSlow51 = (0.16644822363786807 * (fSlow33 * fSlow44)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOABeamDirac2Hoa4.cpp b/source/HOAUGens/HOABeamDirac2Hoa4.cpp new file mode 100644 index 0000000000..dcc22cc65b --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2Hoa4.cpp @@ -0,0 +1,1277 @@ +//---------------------------------------------------------- +// name: "HOABeamDirac2Hoa4" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fcheckbox0; + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec0[2]; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fslider2; + double fRec3[2]; + double fRec4[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOABeamDirac2Hoa4"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 25; } + virtual int getNumOutputs() { return 25; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "3", ""); + ui_interface->declare(&fentry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); + ui_interface->declare(&fslider1, "4", ""); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fslider0); + double fSlow1 = sin(fSlow0); + double fSlow2 = faustpower<2>(fSlow1); + double fSlow3 = ((((35 * fSlow2) + -30) * fSlow2) + 3); + double fSlow4 = (0.375 * fSlow3); + double fSlow5 = double(fcheckbox0); + int iSlow6 = int(fSlow5); + double fSlow7 = double(fentry0); + double fSlow8 = (fConst1 / fSlow7); + double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + int iSlow10 = int(((1 - fSlow5) > 0)); + double fSlow11 = (fConst0 * fSlow7); + int iSlow12 = int((fSlow5 > 0)); + double fSlow13 = (7 * fSlow2); + double fSlow14 = sin((2 * fSlow0)); + double fSlow15 = ((fSlow13 + -3) * fSlow14); + double fSlow16 = (1.1858541225631423 * fSlow15); + double fSlow17 = double(fslider2); + double fSlow18 = cos(fSlow17); + double fSlow19 = sin(fSlow17); + double fSlow20 = cos(fSlow0); + double fSlow21 = (5 * fSlow2); + double fSlow22 = (fSlow21 + -1); + double fSlow23 = (1.620185174601965 * fSlow22); + double fSlow24 = (2 * fSlow17); + double fSlow25 = cos(fSlow24); + double fSlow26 = (fSlow13 + -1); + double fSlow27 = (1.6770509831248424 * (fSlow25 * fSlow26)); + double fSlow28 = (3 * fSlow17); + double fSlow29 = sin(fSlow28); + double fSlow30 = (fSlow20 * fSlow29); + double fSlow31 = (2.091650066335189 * fSlow30); + double fSlow32 = sin(fSlow24); + double fSlow33 = (5.123475382979799 * (fSlow1 * fSlow32)); + double fSlow34 = cos(fSlow28); + double fSlow35 = (2.091650066335189 * (fSlow20 * fSlow34)); + double fSlow36 = faustpower<2>(fSlow20); + double fSlow37 = (4 * fSlow17); + double fSlow38 = sin(fSlow37); + double fSlow39 = (2.218529918662356 * (fSlow36 * fSlow38)); + double fSlow40 = (1.6770509831248424 * (fSlow32 * fSlow26)); + double fSlow41 = (6.274950199005566 * ((fSlow20 * fSlow1) * fSlow34)); + double fSlow42 = cos(fSlow37); + double fSlow43 = (2.218529918662356 * (fSlow36 * fSlow42)); + double fSlow44 = ((3 * fSlow2) + -1); + double fSlow45 = (1.118033988749895 * fSlow44); + double fSlow46 = (fSlow21 + -3); + double fSlow47 = (1.3228756555322954 * fSlow46); + double fSlow48 = (5.123475382979799 * fSlow25); + double fSlow49 = (6.274950199005566 * fSlow30); + double fSlow50 = (fSlow20 * fSlow19); + double fSlow51 = (0.13783222385544802 * fSlow50); + double fSlow52 = (0.13783222385544802 * fSlow1); + double fSlow53 = (fSlow20 * fSlow18); + double fSlow54 = (0.13783222385544802 * fSlow53); + double fSlow55 = (fSlow36 * fSlow32); + double fSlow56 = (0.15410111101537496 * fSlow55); + double fSlow57 = (0.15410111101537496 * (fSlow14 * fSlow19)); + double fSlow58 = (0.08897031792714714 * fSlow44); + double fSlow59 = (0.15410111101537496 * (fSlow14 * fSlow18)); + double fSlow60 = (fSlow36 * fSlow25); + double fSlow61 = (0.15410111101537496 * fSlow60); + double fSlow62 = faustpower<3>(fSlow20); + double fSlow63 = (0.16644822363786807 * (fSlow62 * fSlow29)); + double fSlow64 = (fSlow36 * fSlow1); + double fSlow65 = (0.4077132165054383 * (fSlow64 * fSlow32)); + double fSlow66 = (0.12893023963105413 * (fSlow50 * fSlow22)); + double fSlow67 = (0.10527109983694811 * (fSlow1 * fSlow46)); + double fSlow68 = (0.12893023963105413 * (fSlow53 * fSlow22)); + double fSlow69 = (0.4077132165054383 * (fSlow64 * fSlow25)); + double fSlow70 = (0.16644822363786807 * (fSlow62 * fSlow34)); + double fSlow71 = faustpower<4>(fSlow20); + double fSlow72 = (0.17654500147618726 * (fSlow71 * fSlow38)); + double fSlow73 = (fSlow62 * fSlow1); + double fSlow74 = (0.4993446709136041 * (fSlow73 * fSlow29)); + double fSlow75 = (0.1334554768907207 * (fSlow55 * fSlow26)); + double fSlow76 = (0.0943672726959132 * (fSlow15 * fSlow19)); + double fSlow77 = (0.029841551829730376 * fSlow3); + double fSlow78 = (0.0943672726959132 * (fSlow15 * fSlow18)); + double fSlow79 = (0.1334554768907207 * (fSlow60 * fSlow26)); + double fSlow80 = (0.4993446709136041 * (fSlow73 * fSlow34)); + double fSlow81 = (0.17654500147618726 * (fSlow71 * fSlow42)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOABeamDirac2Hoa5.cpp b/source/HOAUGens/HOABeamDirac2Hoa5.cpp new file mode 100644 index 0000000000..52d1fda7bf --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2Hoa5.cpp @@ -0,0 +1,1356 @@ +//---------------------------------------------------------- +// name: "HOABeamDirac2Hoa5" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fcheckbox0; + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec0[2]; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fslider2; + double fRec3[2]; + double fRec4[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOABeamDirac2Hoa5"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 36; } + virtual int getNumOutputs() { return 36; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "3", ""); + ui_interface->declare(&fentry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); + ui_interface->declare(&fslider1, "4", ""); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fslider0); + double fSlow1 = sin(fSlow0); + double fSlow2 = faustpower<2>(fSlow1); + double fSlow3 = ((3 * fSlow2) + -1); + double fSlow4 = double(fcheckbox0); + int iSlow5 = int(fSlow4); + double fSlow6 = double(fentry0); + double fSlow7 = (fConst1 / fSlow6); + double fSlow8 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + int iSlow9 = int(((1 - fSlow4) > 0)); + double fSlow10 = (fConst0 * fSlow6); + int iSlow11 = int((fSlow4 > 0)); + double fSlow12 = cos(fSlow0); + double fSlow13 = faustpower<2>(fSlow12); + double fSlow14 = (fSlow13 * fSlow1); + double fSlow15 = (8.496322733983215 * fSlow14); + double fSlow16 = double(fslider2); + double fSlow17 = (2 * fSlow16); + double fSlow18 = cos(fSlow17); + double fSlow19 = sin(fSlow17); + double fSlow20 = (5 * fSlow2); + double fSlow21 = (fSlow20 + -1); + double fSlow22 = (1.620185174601965 * fSlow21); + double fSlow23 = sin(fSlow16); + double fSlow24 = cos(fSlow16); + double fSlow25 = ((fSlow2 * ((21 * fSlow2) + -14)) + 1); + double fSlow26 = (1.6056540723331412 * fSlow25); + double fSlow27 = (3 * fSlow16); + double fSlow28 = sin(fSlow27); + double fSlow29 = (fSlow12 * fSlow28); + double fSlow30 = (2.091650066335189 * fSlow29); + double fSlow31 = (5.123475382979799 * (fSlow1 * fSlow19)); + double fSlow32 = cos(fSlow27); + double fSlow33 = (fSlow12 * fSlow32); + double fSlow34 = (2.091650066335189 * fSlow33); + double fSlow35 = (4 * fSlow16); + double fSlow36 = sin(fSlow35); + double fSlow37 = (fSlow13 * fSlow36); + double fSlow38 = (2.218529918662356 * fSlow37); + double fSlow39 = (7 * fSlow2); + double fSlow40 = (fSlow39 + -1); + double fSlow41 = (1.6770509831248424 * (fSlow19 * fSlow40)); + double fSlow42 = (1.6770509831248424 * (fSlow18 * fSlow40)); + double fSlow43 = cos(fSlow35); + double fSlow44 = (2.218529918662356 * (fSlow13 * fSlow43)); + double fSlow45 = faustpower<3>(fSlow12); + double fSlow46 = (5 * fSlow16); + double fSlow47 = sin(fSlow46); + double fSlow48 = (2.3268138086232857 * (fSlow45 * fSlow47)); + double fSlow49 = ((9 * fSlow2) + -1); + double fSlow50 = (1.734304615688951 * (fSlow29 * fSlow49)); + double fSlow51 = (1.734304615688951 * (fSlow33 * fSlow49)); + double fSlow52 = (7.358031326380718 * (fSlow14 * fSlow43)); + double fSlow53 = cos(fSlow46); + double fSlow54 = (2.3268138086232857 * (fSlow45 * fSlow53)); + double fSlow55 = sin((2 * fSlow0)); + double fSlow56 = ((fSlow2 * ((35 * fSlow2) + -30)) + 3); + double fSlow57 = (0.375 * fSlow56); + double fSlow58 = (fSlow39 + -3); + double fSlow59 = (1.1858541225631423 * (fSlow55 * fSlow58)); + double fSlow60 = (fSlow20 + -3); + double fSlow61 = (1.3228756555322954 * fSlow60); + double fSlow62 = (6.274950199005566 * fSlow29); + double fSlow63 = (5.123475382979799 * fSlow18); + double fSlow64 = (6.274950199005566 * fSlow33); + double fSlow65 = (7.358031326380718 * fSlow37); + double fSlow66 = ((fSlow2 * ((63 * fSlow2) + -70)) + 15); + double fSlow67 = (0.414578098794425 * fSlow66); + double fSlow68 = (fSlow12 * fSlow23); + double fSlow69 = (0.13783222385544802 * fSlow68); + double fSlow70 = (0.13783222385544802 * fSlow1); + double fSlow71 = (fSlow12 * fSlow24); + double fSlow72 = (0.13783222385544802 * fSlow71); + double fSlow73 = (fSlow13 * fSlow19); + double fSlow74 = (0.15410111101537496 * fSlow73); + double fSlow75 = (fSlow55 * fSlow23); + double fSlow76 = (0.15410111101537496 * fSlow75); + double fSlow77 = (0.08897031792714714 * fSlow3); + double fSlow78 = (fSlow55 * fSlow24); + double fSlow79 = (0.15410111101537496 * fSlow78); + double fSlow80 = (fSlow13 * fSlow18); + double fSlow81 = (0.15410111101537496 * fSlow80); + double fSlow82 = (fSlow45 * fSlow28); + double fSlow83 = (0.16644822363786807 * fSlow82); + double fSlow84 = (fSlow14 * fSlow19); + double fSlow85 = (0.4077132165054383 * fSlow84); + double fSlow86 = (0.12893023963105413 * (fSlow68 * fSlow21)); + double fSlow87 = (0.10527109983694811 * (fSlow1 * fSlow60)); + double fSlow88 = (0.12893023963105413 * (fSlow71 * fSlow21)); + double fSlow89 = (fSlow14 * fSlow18); + double fSlow90 = (0.4077132165054383 * fSlow89); + double fSlow91 = (fSlow45 * fSlow32); + double fSlow92 = (0.16644822363786807 * fSlow91); + double fSlow93 = faustpower<4>(fSlow12); + double fSlow94 = (0.17654500147618726 * (fSlow93 * fSlow36)); + double fSlow95 = (fSlow45 * fSlow1); + double fSlow96 = (0.4993446709136041 * (fSlow95 * fSlow28)); + double fSlow97 = (0.1334554768907207 * (fSlow73 * fSlow40)); + double fSlow98 = (0.0943672726959132 * (fSlow75 * fSlow58)); + double fSlow99 = (0.029841551829730376 * fSlow56); + double fSlow100 = (0.0943672726959132 * (fSlow78 * fSlow58)); + double fSlow101 = (0.1334554768907207 * (fSlow80 * fSlow40)); + double fSlow102 = (0.4993446709136041 * (fSlow95 * fSlow32)); + double fSlow103 = (0.17654500147618726 * (fSlow93 * fSlow43)); + double fSlow104 = faustpower<5>(fSlow12); + double fSlow105 = (0.18516195964843765 * (fSlow104 * fSlow47)); + double fSlow106 = (fSlow93 * fSlow1); + double fSlow107 = (0.5855335285092532 * (fSlow106 * fSlow36)); + double fSlow108 = (0.13801157620699323 * (fSlow82 * fSlow49)); + double fSlow109 = (0.6761158806087376 * (fSlow84 * fSlow3)); + double fSlow110 = (0.12777389125372554 * (fSlow68 * fSlow25)); + double fSlow111 = (0.03299107686038644 * (fSlow1 * fSlow66)); + double fSlow112 = (0.12777389125372554 * (fSlow71 * fSlow25)); + double fSlow113 = (0.6761158806087376 * (fSlow89 * fSlow3)); + double fSlow114 = (0.13801157620699323 * (fSlow91 * fSlow49)); + double fSlow115 = (0.5855335285092532 * (fSlow106 * fSlow43)); + double fSlow116 = (0.18516195964843765 * (fSlow104 * fSlow53)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOABeamHCardioid2Hoa1.cpp b/source/HOAUGens/HOABeamHCardioid2Hoa1.cpp new file mode 100644 index 0000000000..00307edd3d --- /dev/null +++ b/source/HOAUGens/HOABeamHCardioid2Hoa1.cpp @@ -0,0 +1,1164 @@ +//---------------------------------------------------------- +// name: "HOABeamHCardioid2Hoa1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("route.lib/name", "Faust Signal Routing Library"); + m->declare("route.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("name", "HOABeamHCardioid2Hoa1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/name", "Cijk matrix"); + m->declare("lib/cijk.lib/version", "10"); + m->declare("lib/cijk.lib/author", "Pierre Lecomte"); + m->declare("lib/cijk.lib/license", "GPL"); + m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 16; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "3", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = int(double(fslider0)); + int iSlow1 = int((iSlow0 >= 2)); + double fSlow2 = double(fslider1); + double fSlow3 = sin(fSlow2); + double fSlow4 = cos(fSlow2); + double fSlow5 = double(fslider2); + double fSlow6 = sin(fSlow5); + double fSlow7 = cos(fSlow5); + int iSlow8 = int((iSlow0 >= 1)); + double fSlow9 = faustpower<2>(fSlow4); + double fSlow10 = (2 * fSlow5); + double fSlow11 = cos(fSlow10); + double fSlow12 = (fSlow9 * fSlow11); + double fSlow13 = (0.16666405622891672 * fSlow12); + double fSlow14 = ((3 * faustpower<2>(fSlow3)) + -1); + double fSlow15 = (0.055554711936 * fSlow14); + double fSlow16 = (0.11112 - (fSlow13 + fSlow15)); + double fSlow17 = (0.19245000000000004 * fSlow4); + double fSlow18 = sin((2 * fSlow2)); + double fSlow19 = (0.16666405622891672 * fSlow18); + double fSlow20 = sin(fSlow10); + double fSlow21 = (fSlow9 * fSlow20); + double fSlow22 = (0.16666405622891672 * fSlow21); + double fSlow23 = (fSlow4 * fSlow6); + double fSlow24 = (0.43301700000000004 * fSlow23); + double fSlow25 = (0.19245000000000004 * fSlow3); + double fSlow26 = ((0.111109299648 * fSlow14) + 0.11112); + double fSlow27 = (0.43301700000000004 * fSlow3); + double fSlow28 = (fSlow4 * fSlow20); + double fSlow29 = (0.16666405622891672 * fSlow28); + double fSlow30 = (0.19245000000000004 * fSlow7); + double fSlow31 = (fSlow18 * fSlow7); + double fSlow32 = (0.16666405622891672 * fSlow31); + double fSlow33 = (fSlow13 + (0.11112 - fSlow15)); + double fSlow34 = (fSlow4 * fSlow7); + double fSlow35 = (0.43301700000000004 * fSlow34); + double fSlow36 = (0.2151622795194362 * fSlow28); + double fSlow37 = (0.335413669149 * fSlow4); + double fSlow38 = (0.14907119265000002 * fSlow3); + double fSlow39 = (0.14907119265000002 * fSlow4); + double fSlow40 = (0.2151622795194362 * fSlow18); + double fSlow41 = (0 - (0.08606633430000002 * fSlow23)); + double fSlow42 = (0.124224 * fSlow14); + double fSlow43 = (0.17213247615000002 * fSlow3); + double fSlow44 = (0 - (0.08606633430000002 * fSlow34)); + double fSlow45 = (0 - (0.193651264638 * fSlow23)); + double fSlow46 = (0.387302096259 * fSlow3); + double fSlow47 = (0 - (0.193651264638 * fSlow34)); + double fSlow48 = (0 - (0.14907119265000002 * fSlow23)); + double fSlow49 = (0.14907119265000002 * fSlow7); + double fSlow50 = (0.2151622795194362 * (fSlow4 * fSlow11)); + double fSlow51 = (0 - (0.335413669149 * fSlow23)); + double fSlow52 = (0.335413669149 * fSlow34); + double fSlow53 = (0.17251367312221164 * fSlow9); + double fSlow54 = (0.08908562668799999 * fSlow14); + double fSlow55 = (0.044542895106113686 * fSlow12); + double fSlow56 = (fSlow54 + fSlow55); + double fSlow57 = (fSlow18 * fSlow6); + double fSlow58 = (0.1781713652621752 * fSlow57); + double fSlow59 = (0 - (0.044542895106113686 * fSlow21)); + double fSlow60 = (0 - (0.10910728580834947 * fSlow57)); + double fSlow61 = (0.10910718143999999 * fSlow14); + double fSlow62 = (0 - (0.10910728580834947 * fSlow31)); + double fSlow63 = (0.1781713652621752 * fSlow31); + double fSlow64 = (fSlow54 - fSlow55); + double fSlow65 = (0 - (0.14085684693651698 * fSlow57)); + double fSlow66 = (0 - (0.17251367312221164 * fSlow21)); + double fSlow67 = (0.17251367312221164 * fSlow12); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOABeamHCardioid2Hoa2.cpp b/source/HOAUGens/HOABeamHCardioid2Hoa2.cpp new file mode 100644 index 0000000000..0247914d05 --- /dev/null +++ b/source/HOAUGens/HOABeamHCardioid2Hoa2.cpp @@ -0,0 +1,1258 @@ +//---------------------------------------------------------- +// name: "HOABeamHCardioid2Hoa2" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("route.lib/name", "Faust Signal Routing Library"); + m->declare("route.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/name", "Cijk matrix"); + m->declare("lib/cijk.lib/version", "10"); + m->declare("lib/cijk.lib/author", "Pierre Lecomte"); + m->declare("lib/cijk.lib/license", "GPL"); + m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("name", "HOABeamHCardioid2Hoa2"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + } + + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 25; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "3", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = int(double(fslider0)); + int iSlow1 = int((iSlow0 >= 2)); + double fSlow2 = double(fslider1); + double fSlow3 = sin(fSlow2); + double fSlow4 = cos(fSlow2); + double fSlow5 = double(fslider2); + double fSlow6 = sin(fSlow5); + double fSlow7 = cos(fSlow5); + double fSlow8 = ((3 * faustpower<2>(fSlow3)) + -1); + double fSlow9 = (0.124224 * fSlow8); + double fSlow10 = sin((2 * fSlow2)); + double fSlow11 = faustpower<2>(fSlow4); + double fSlow12 = (2 * fSlow5); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + int iSlow15 = int((iSlow0 >= 1)); + double fSlow16 = (0.16666405622891672 * fSlow10); + double fSlow17 = (0.19245000000000004 * fSlow4); + double fSlow18 = (0.055554711936 * fSlow8); + double fSlow19 = (fSlow11 * fSlow13); + double fSlow20 = (0.16666405622891672 * fSlow19); + double fSlow21 = (0.11112 - (fSlow18 + fSlow20)); + double fSlow22 = (0.14907119265000002 * fSlow3); + double fSlow23 = (0.14907119265000002 * fSlow7); + double fSlow24 = (fSlow4 * fSlow14); + double fSlow25 = (0.16666405622891672 * fSlow24); + double fSlow26 = (fSlow4 * fSlow6); + double fSlow27 = (0 - (0.08606633430000002 * fSlow26)); + double fSlow28 = (0 - (0.14907119265000002 * fSlow26)); + double fSlow29 = (0.43301700000000004 * fSlow6); + double fSlow30 = (0.335413669149 * fSlow7); + double fSlow31 = (0.335413669149 * fSlow3); + double fSlow32 = (0 - (0.193651264638 * fSlow26)); + double fSlow33 = (0 - (0.335413669149 * fSlow26)); + double fSlow34 = ((0.111109299648 * fSlow8) + 0.11112); + double fSlow35 = (0.14907119265000002 * fSlow4); + double fSlow36 = (0.335413669149 * fSlow4); + double fSlow37 = (0.19245000000000004 * fSlow7); + double fSlow38 = (0.14907119265000002 * fSlow6); + double fSlow39 = (fSlow4 * fSlow7); + double fSlow40 = (0 - (0.08606633430000002 * fSlow39)); + double fSlow41 = (fSlow20 + (0.11112 - fSlow18)); + double fSlow42 = (0 - (0.193651264638 * fSlow39)); + double fSlow43 = (0.335413669149 * fSlow6); + double fSlow44 = (0.2151622795194362 * fSlow24); + double fSlow45 = (0.11904563149935221 * fSlow10); + double fSlow46 = (0.079363856448 * fSlow8); + double fSlow47 = (0.11112 - fSlow46); + double fSlow48 = (fSlow11 * fSlow14); + double fSlow49 = (0 - (0.13746223165253885 * fSlow48)); + double fSlow50 = (0.2151622795194362 * fSlow10); + double fSlow51 = (0.039681866111999996 * fSlow8); + double fSlow52 = (0.11904563149935221 * fSlow19); + double fSlow53 = (fSlow51 + (0.11112 - fSlow52)); + double fSlow54 = (0.11904563149935221 * fSlow48); + double fSlow55 = (0.11904563149935221 * fSlow7); + double fSlow56 = (0.06873100824512966 * fSlow6); + double fSlow57 = (fSlow10 * fSlow6); + double fSlow58 = (0 - (0.11904563149935221 * fSlow57)); + double fSlow59 = (0.17213247615000002 * fSlow3); + double fSlow60 = (fSlow46 + 0.11112); + double fSlow61 = (0.06873100824512966 * fSlow10); + double fSlow62 = (0 - (0.13746223165253885 * fSlow19)); + double fSlow63 = (0.387302096259 * fSlow3); + double fSlow64 = ((fSlow51 + fSlow52) + 0.11112); + double fSlow65 = (fSlow4 * fSlow13); + double fSlow66 = (0.2151622795194362 * fSlow65); + double fSlow67 = (fSlow10 * fSlow7); + double fSlow68 = (0.11904563149935221 * fSlow67); + double fSlow69 = (0.335413669149 * fSlow39); + double fSlow70 = (0.17251367312221164 * fSlow4); + double fSlow71 = (0.347186102328 * fSlow4); + double fSlow72 = (0 - (0.03984099900000001 * fSlow39)); + double fSlow73 = (0 - (0.044542895106113686 * fSlow48)); + double fSlow74 = (0.044542895106113686 * fSlow19); + double fSlow75 = (0.08908562668799999 * fSlow8); + double fSlow76 = (fSlow74 + fSlow75); + double fSlow77 = (0.15936380355000002 * fSlow3); + double fSlow78 = (0.1781713652621752 * fSlow10); + double fSlow79 = (0 - (0.08964317934 * fSlow39)); + double fSlow80 = (0.35857228434300004 * fSlow3); + double fSlow81 = (0 - (0.09759004785000003 * fSlow26)); + double fSlow82 = (0 - (0.10910728580834947 * fSlow67)); + double fSlow83 = (0.10910718143999999 * fSlow8); + double fSlow84 = (0 - (0.10910728580834947 * fSlow57)); + double fSlow85 = (0.16903075950000004 * fSlow3); + double fSlow86 = (0 - (0.09759004785000003 * fSlow39)); + double fSlow87 = (0.38032316127 * fSlow3); + double fSlow88 = (0 - (0.219579889581 * fSlow26)); + double fSlow89 = (0 - (0.219579889581 * fSlow39)); + double fSlow90 = (0.13801301565000001 * fSlow4); + double fSlow91 = (0 - (0.03984099900000001 * fSlow26)); + double fSlow92 = (fSlow75 - fSlow74); + double fSlow93 = (0.31053251232900003 * fSlow39); + double fSlow94 = (0 - (0.08964317934 * fSlow26)); + double fSlow95 = (0 - (0.1259881623 * fSlow26)); + double fSlow96 = (0 - (0.14085684693651698 * fSlow57)); + double fSlow97 = (0 - (0.28347631111800004 * fSlow26)); + double fSlow98 = (0 - (0.17251367312221164 * fSlow48)); + double fSlow99 = (0 - (0.15430333080000003 * fSlow26)); + double fSlow100 = (0.15430333080000003 * fSlow7); + double fSlow101 = (0.17251367312221164 * fSlow65); + double fSlow102 = (0 - (0.347186102328 * fSlow26)); + double fSlow103 = (0.347186102328 * fSlow39); + double fSlow104 = (0.18184526118496958 * fSlow11); + double fSlow105 = (0.068731027392 * fSlow8); + double fSlow106 = (0.13746223165253885 * fSlow10); + double fSlow107 = (0 - (0.048600210211011685 * fSlow67)); + double fSlow108 = (0.097200435264 * fSlow8); + double fSlow109 = (0.048600210211011685 * fSlow19); + double fSlow110 = (fSlow108 + fSlow109); + double fSlow111 = (0 - (0.048600210211011685 * fSlow48)); + double fSlow112 = (0.030737437765308104 * fSlow11); + double fSlow113 = (0 - (0.12294996622351191 * fSlow67)); + double fSlow114 = (0 - (0.12294996622351191 * fSlow57)); + double fSlow115 = (0.10647773203199999 * fSlow8); + double fSlow116 = (fSlow108 - fSlow109); + double fSlow117 = (0 - (0.048600210211011685 * fSlow57)); + double fSlow118 = (0.16835609239505758 * fSlow67); + double fSlow119 = (0 - (0.13746223165253885 * fSlow57)); + double fSlow120 = (0.13746223165253885 * fSlow67); + double fSlow121 = (0 - (0.12858399051272834 * fSlow57)); + double fSlow122 = (0 - (0.12858399051272834 * fSlow48)); + double fSlow123 = (0 - (0.18184526118496958 * fSlow48)); + double fSlow124 = (0.18184526118496958 * fSlow19); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOABeamHCardioid2Hoa3.cpp b/source/HOAUGens/HOABeamHCardioid2Hoa3.cpp new file mode 100644 index 0000000000..84bb576c9d --- /dev/null +++ b/source/HOAUGens/HOABeamHCardioid2Hoa3.cpp @@ -0,0 +1,1404 @@ +//---------------------------------------------------------- +// name: "HOABeamHCardioid2Hoa3" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("route.lib/name", "Faust Signal Routing Library"); + m->declare("route.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("name", "HOABeamHCardioid2Hoa3"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/name", "Cijk matrix"); + m->declare("lib/cijk.lib/version", "10"); + m->declare("lib/cijk.lib/author", "Pierre Lecomte"); + m->declare("lib/cijk.lib/license", "GPL"); + m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 36; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "3", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = int(double(fslider0)); + int iSlow1 = int((iSlow0 >= 2)); + double fSlow2 = double(fslider1); + double fSlow3 = sin(fSlow2); + double fSlow4 = cos(fSlow2); + double fSlow5 = double(fslider2); + double fSlow6 = cos(fSlow5); + double fSlow7 = sin(fSlow5); + double fSlow8 = ((3 * faustpower<2>(fSlow3)) + -1); + double fSlow9 = (0.124224 * fSlow8); + double fSlow10 = sin((2 * fSlow2)); + double fSlow11 = faustpower<2>(fSlow4); + double fSlow12 = (2 * fSlow5); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + int iSlow15 = int((iSlow0 >= 1)); + double fSlow16 = (0.14907119265000002 * fSlow6); + double fSlow17 = (0.17251367312221164 * fSlow13); + double fSlow18 = (0.16666405622891672 * fSlow14); + double fSlow19 = (fSlow11 * fSlow14); + double fSlow20 = (0 - (0.17251367312221164 * fSlow19)); + double fSlow21 = (fSlow10 * fSlow7); + double fSlow22 = (0 - (0.14085684693651698 * fSlow21)); + double fSlow23 = (0 - (0.044542895106113686 * fSlow19)); + double fSlow24 = (0 - (0.10910728580834947 * fSlow21)); + double fSlow25 = (0.08908562668799999 * fSlow8); + double fSlow26 = (fSlow11 * fSlow13); + double fSlow27 = (0.044542895106113686 * fSlow26); + double fSlow28 = (fSlow25 + fSlow27); + double fSlow29 = (fSlow4 * fSlow7); + double fSlow30 = (0 - (0.14907119265000002 * fSlow29)); + double fSlow31 = (0.19245000000000004 * fSlow4); + double fSlow32 = (0.16666405622891672 * fSlow10); + double fSlow33 = (0.055554711936 * fSlow8); + double fSlow34 = (0.16666405622891672 * fSlow26); + double fSlow35 = (0.11112 - (fSlow33 + fSlow34)); + double fSlow36 = (0.14907119265000002 * fSlow3); + double fSlow37 = (0 - (0.08606633430000002 * fSlow29)); + double fSlow38 = (fSlow10 * fSlow6); + double fSlow39 = (0.14085684693651698 * fSlow38); + double fSlow40 = (0.43301700000000004 * fSlow7); + double fSlow41 = (0.335413669149 * fSlow6); + double fSlow42 = (0.335413669149 * fSlow3); + double fSlow43 = (0 - (0.193651264638 * fSlow29)); + double fSlow44 = (0 - (0.335413669149 * fSlow29)); + double fSlow45 = (0.14085684693651698 * fSlow4); + double fSlow46 = ((0.111109299648 * fSlow8) + 0.11112); + double fSlow47 = (0.10910718143999999 * fSlow8); + double fSlow48 = (0.335413669149 * fSlow4); + double fSlow49 = (0.19245000000000004 * fSlow6); + double fSlow50 = (0.14907119265000002 * fSlow7); + double fSlow51 = (0.14085684693651698 * fSlow10); + double fSlow52 = (fSlow25 - fSlow27); + double fSlow53 = (0 - (0.10910728580834947 * fSlow38)); + double fSlow54 = (0.14907119265000002 * fSlow4); + double fSlow55 = (fSlow4 * fSlow6); + double fSlow56 = (0 - (0.08606633430000002 * fSlow55)); + double fSlow57 = (fSlow34 + (0.11112 - fSlow33)); + double fSlow58 = (0 - (0.193651264638 * fSlow55)); + double fSlow59 = (0.335413669149 * fSlow7); + double fSlow60 = (fSlow4 * fSlow14); + double fSlow61 = (0.2151622795194362 * fSlow60); + double fSlow62 = (0.15430333080000003 * fSlow6); + double fSlow63 = (0 - (0.15430333080000003 * fSlow29)); + double fSlow64 = (0 - (0.03984099900000001 * fSlow29)); + double fSlow65 = (0.11904563149935221 * fSlow10); + double fSlow66 = (0 - (0.13746223165253885 * fSlow19)); + double fSlow67 = (0.079363856448 * fSlow8); + double fSlow68 = (0.11112 - fSlow67); + double fSlow69 = (0.1259881623 * fSlow3); + double fSlow70 = (0 - (0.03984099900000001 * fSlow55)); + double fSlow71 = (0.347186102328 * fSlow6); + double fSlow72 = (0.28347631111800004 * fSlow3); + double fSlow73 = (0 - (0.08964317934 * fSlow55)); + double fSlow74 = (0 - (0.08964317934 * fSlow29)); + double fSlow75 = (0 - (0.347186102328 * fSlow29)); + double fSlow76 = (0 - (0.11904563149935221 * fSlow21)); + double fSlow77 = (0.11904563149935221 * fSlow6); + double fSlow78 = (0.06873100824512966 * fSlow7); + double fSlow79 = (0.2151622795194362 * fSlow10); + double fSlow80 = (0.039681866111999996 * fSlow8); + double fSlow81 = (0.11904563149935221 * fSlow26); + double fSlow82 = (fSlow80 + (0.11112 - fSlow81)); + double fSlow83 = (0.11904563149935221 * fSlow60); + double fSlow84 = (0.1259881623 * fSlow6); + double fSlow85 = (0 - (0.09759004785000003 * fSlow29)); + double fSlow86 = (0 - (0.1259881623 * fSlow29)); + double fSlow87 = (0.28347631111800004 * fSlow55); + double fSlow88 = (0.35857228434300004 * fSlow3); + double fSlow89 = (0 - (0.219579889581 * fSlow29)); + double fSlow90 = (0 - (0.28347631111800004 * fSlow29)); + double fSlow91 = (0.06873100824512966 * fSlow10); + double fSlow92 = (0 - (0.13746223165253885 * fSlow26)); + double fSlow93 = (fSlow67 + 0.11112); + double fSlow94 = (0.13801301565000001 * fSlow4); + double fSlow95 = (0.31053251232900003 * fSlow4); + double fSlow96 = (0.1259881623 * fSlow4); + double fSlow97 = ((fSlow80 + fSlow81) + 0.11112); + double fSlow98 = (0 - (0.09759004785000003 * fSlow55)); + double fSlow99 = (0.28347631111800004 * fSlow4); + double fSlow100 = (0 - (0.219579889581 * fSlow55)); + double fSlow101 = (fSlow4 * fSlow13); + double fSlow102 = (0.2151622795194362 * fSlow101); + double fSlow103 = (0.15430333080000003 * fSlow4); + double fSlow104 = (0.17251367312221164 * fSlow4); + double fSlow105 = (0.11340041877160077 * fSlow10); + double fSlow106 = (0 - (0.07172068811905223 * fSlow19)); + double fSlow107 = (0.11112 - (0.09259110374400001 * fSlow8)); + double fSlow108 = (0 - (0.07172068811905223 * fSlow26)); + double fSlow109 = (0.347186102328 * fSlow4); + double fSlow110 = (0 - (0.14344159140038398 * fSlow19)); + double fSlow111 = (0.0878395702892508 * fSlow7); + double fSlow112 = (0 - (0.11340041877160077 * fSlow21)); + double fSlow113 = (0.1781713652621752 * fSlow10); + double fSlow114 = (0.15936380355000002 * fSlow3); + double fSlow115 = (0.11110937081927783 * fSlow26); + double fSlow116 = (fSlow33 + (0.11112 - fSlow115)); + double fSlow117 = (0 - (0.0878395702892508 * fSlow21)); + double fSlow118 = (0.0878395702892508 * fSlow6); + double fSlow119 = (0.04536029660600802 * fSlow7); + double fSlow120 = (0.16903075950000004 * fSlow3); + double fSlow121 = ((0.07407290784 * fSlow8) + 0.11112); + double fSlow122 = (0.04536029660600802 * fSlow10); + double fSlow123 = (0 - (0.14344159140038398 * fSlow26)); + double fSlow124 = (0.38032316127 * fSlow3); + double fSlow125 = (0.11110937081927783 * fSlow19); + double fSlow126 = (0.04536029660600802 * fSlow6); + double fSlow127 = ((fSlow33 + fSlow115) + 0.11112); + double fSlow128 = (0.31053251232900003 * fSlow55); + double fSlow129 = (0.11340041877160077 * fSlow7); + double fSlow130 = (0.07172068811905223 * fSlow14); + double fSlow131 = (0.11340041877160077 * fSlow38); + double fSlow132 = (0.347186102328 * fSlow55); + double fSlow133 = (0.18184526118496958 * fSlow4); + double fSlow134 = (0.353557081449 * fSlow4); + double fSlow135 = (0.11111100750000003 * fSlow3); + double fSlow136 = (0.13608274215000005 * fSlow4); + double fSlow137 = (0.25000236495 * fSlow3); + double fSlow138 = (0.30618935181900003 * fSlow4); + double fSlow139 = (0.02969561235 * fSlow7); + double fSlow140 = (0.13746223165253885 * fSlow10); + double fSlow141 = (0.14547853605000002 * fSlow3); + double fSlow142 = (0.068731027392 * fSlow8); + double fSlow143 = (0 - (0.02969561235 * fSlow55)); + double fSlow144 = (0 - (0.066815822151 * fSlow55)); + double fSlow145 = (0.327330107793 * fSlow3); + double fSlow146 = (0.066815822151 * fSlow7); + double fSlow147 = (0.16264988730000002 * fSlow3); + double fSlow148 = (0 - (0.048600210211011685 * fSlow38)); + double fSlow149 = (0.097200435264 * fSlow8); + double fSlow150 = (0.048600210211011685 * fSlow26); + double fSlow151 = (fSlow149 + fSlow150); + double fSlow152 = (0 - (0.048600210211011685 * fSlow19)); + double fSlow153 = (0 - (0.05143437945000002 * fSlow55)); + double fSlow154 = (0.365966049618 * fSlow3); + double fSlow155 = (0 - (0.11572855643700003 * fSlow55)); + double fSlow156 = (0 - (0.10286875890000004 * fSlow29)); + double fSlow157 = (0.030737437765308104 * fSlow11); + double fSlow158 = (0 - (0.12294996622351191 * fSlow38)); + double fSlow159 = (0 - (0.12294996622351191 * fSlow21)); + double fSlow160 = (0.10647773203199999 * fSlow8); + double fSlow161 = (0.16798421640000002 * fSlow3); + double fSlow162 = (0 - (0.10286875890000004 * fSlow55)); + double fSlow163 = (0 - (0.23145711287400006 * fSlow29)); + double fSlow164 = (0.377968414824 * fSlow3); + double fSlow165 = (0 - (0.23145711287400006 * fSlow55)); + double fSlow166 = (0 - (0.05143437945000002 * fSlow29)); + double fSlow167 = (fSlow149 - fSlow150); + double fSlow168 = (0 - (0.048600210211011685 * fSlow21)); + double fSlow169 = (0.1328032017 * fSlow4); + double fSlow170 = (0.16835609239505758 * fSlow10); + double fSlow171 = (0.29881030912199996 * fSlow55); + double fSlow172 = (0 - (0.11572855643700003 * fSlow29)); + double fSlow173 = (0 - (0.11501081430000001 * fSlow29)); + double fSlow174 = (0 - (0.02969561235 * fSlow29)); + double fSlow175 = (0 - (0.13746223165253885 * fSlow21)); + double fSlow176 = (0.11501081430000001 * fSlow4); + double fSlow177 = (0 - (0.25877702143799997 * fSlow29)); + double fSlow178 = (0 - (0.066815822151 * fSlow29)); + double fSlow179 = (0.25877702143799997 * fSlow55); + double fSlow180 = (0 - (0.13608274215000005 * fSlow29)); + double fSlow181 = (0 - (0.12858399051272834 * fSlow19)); + double fSlow182 = (0 - (0.12858399051272834 * fSlow21)); + double fSlow183 = (0.13608274215000005 * fSlow55); + double fSlow184 = (0 - (0.30618935181900003 * fSlow29)); + double fSlow185 = (0.30618935181900003 * fSlow55); + double fSlow186 = (0.18184526118496958 * fSlow101); + double fSlow187 = (0.15713484765000002 * fSlow6); + double fSlow188 = (0 - (0.18184526118496958 * fSlow19)); + double fSlow189 = (0 - (0.15713484765000002 * fSlow29)); + double fSlow190 = (0 - (0.353557081449 * fSlow29)); + double fSlow191 = (0.353557081449 * fSlow55); + double fSlow192 = (0.18727466614636304 * fSlow11); + double fSlow193 = (0.14506240885200392 * fSlow11); + double fSlow194 = (0.11844296195441828 * fSlow10); + double fSlow195 = (0.055834588607999995 * fSlow8); + double fSlow196 = (0.1367661816782935 * fSlow10); + double fSlow197 = (0.10812313354182758 * fSlow11); + double fSlow198 = (0 - (0.034191437838433605 * fSlow38)); + double fSlow199 = (0.0837518208 * fSlow8); + double fSlow200 = (0.10812313354182758 * fSlow19); + double fSlow201 = (0.034191437838433605 * fSlow7); + double fSlow202 = (0 - (0.012923184413636137 * fSlow19)); + double fSlow203 = (0.012923184413636137 * fSlow26); + double fSlow204 = (0 - (0.0633104249371965 * fSlow38)); + double fSlow205 = (0.100102556352 * fSlow8); + double fSlow206 = (0.05005126462409077 * fSlow26); + double fSlow207 = (fSlow205 + fSlow206); + double fSlow208 = (0 - (0.05005126462409077 * fSlow19)); + double fSlow209 = (0.04086663239824459 * fSlow11); + double fSlow210 = (0 - (0.12923184413636135 * fSlow38)); + double fSlow211 = (0 - (0.12923184413636135 * fSlow21)); + double fSlow212 = (0.10551735628799999 * fSlow8); + double fSlow213 = (fSlow205 - fSlow206); + double fSlow214 = (0 - (0.0633104249371965 * fSlow21)); + double fSlow215 = (0.1634667447552579 * fSlow38); + double fSlow216 = (0.012923184413636137 * fSlow11); + double fSlow217 = (0.10812313354182758 * fSlow26); + double fSlow218 = (0 - (0.13242313106619366 * fSlow21)); + double fSlow219 = (0 - (0.034191437838433605 * fSlow21)); + double fSlow220 = (0.13242313106619366 * fSlow38); + double fSlow221 = (0 - fSlow200); + double fSlow222 = (0 - (0.1367661816782935 * fSlow21)); + double fSlow223 = (0.1367661816782935 * fSlow38); + double fSlow224 = (0 - (0.14506240885200392 * fSlow19)); + double fSlow225 = (0 - (0.11844296195441828 * fSlow21)); + double fSlow226 = (0.11844296195441828 * fSlow38); + double fSlow227 = (0.14506240885200392 * fSlow26); + double fSlow228 = (0 - (0.18727466614636304 * fSlow19)); + double fSlow229 = (0.18727466614636304 * fSlow26); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAConverter1.cpp b/source/HOAUGens/HOAConverter1.cpp new file mode 100644 index 0000000000..26421eb571 --- /dev/null +++ b/source/HOAUGens/HOAConverter1.cpp @@ -0,0 +1,1069 @@ +//---------------------------------------------------------- +// name: "HOAConverter1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec0[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec2[2]; + FAUSTFLOAT fbargraph5; + double fRec6[2]; + FAUSTFLOAT fbargraph6; + double fRec7[2]; + FAUSTFLOAT fbargraph7; + public: + static void metadata(Meta* m) { + m->declare("name", "HOAConverter1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("route.lib/name", "Faust Signal Routing Library"); + m->declare("route.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 4; } + virtual int getInputRate (int i) {int rate[]={1,1,1,1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fslider0 = 1.0; + fslider1 = 1.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openVerticalBox("0x00"); + interface->declare(&fslider0, "0", ""); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + interface->declare(&fslider1, "0", ""); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + interface->declare(0, "1", ""); + interface->openHorizontalBox("Inputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7f8fad3ec1f0", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7f8fad3eff20", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7f8fad3f16f0", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7f8fad3f31b0", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "2", ""); + interface->openHorizontalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7f8fad3ee1e0", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7f8fad3f4fe0", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7f8fad3f70a0", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7f8fad3f8e30", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow1 = int((iSlow0 >= 5)); + int iSlow2 = int((iSlow0 >= 7)); + int iSlow3 = int((iSlow0 >= 8)); + double fTemp0; + double fTemp1; + double fTemp2; + int iSlow4 = int((iSlow0 >= 6)); + double fTemp3; + int iSlow5 = int((iSlow0 >= 3)); + int iSlow6 = int((iSlow0 >= 2)); + double fTemp4; + double fTemp5; + double fTemp6; + double fTemp7; + double fTemp8; + double fTemp9; + double fTemp10; + double fTemp11; + int iSlow7 = int((iSlow0 >= 4)); + double fTemp12; + double fTemp13; + int iSlow8 = int((iSlow0 >= 1)); + double fTemp14; + double fTemp15; + double fTemp16; + double fTemp17; + double fTemp18; + double fTemp19; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAConverter2.cpp b/source/HOAUGens/HOAConverter2.cpp new file mode 100644 index 0000000000..a88f2e96ef --- /dev/null +++ b/source/HOAUGens/HOAConverter2.cpp @@ -0,0 +1,1222 @@ +//---------------------------------------------------------- +// name: "HOAConverter2" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec0[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec2[2]; + FAUSTFLOAT fbargraph5; + double fRec6[2]; + FAUSTFLOAT fbargraph6; + double fRec7[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + double fRec11[2]; + FAUSTFLOAT fbargraph10; + double fRec8[2]; + FAUSTFLOAT fbargraph11; + double fRec13[2]; + FAUSTFLOAT fbargraph12; + double fRec14[2]; + FAUSTFLOAT fbargraph13; + double fRec12[2]; + FAUSTFLOAT fbargraph14; + double fRec15[2]; + FAUSTFLOAT fbargraph15; + double fRec16[2]; + FAUSTFLOAT fbargraph16; + double fRec17[2]; + FAUSTFLOAT fbargraph17; + public: + static void metadata(Meta* m) { + m->declare("name", "HOAConverter2"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("route.lib/name", "Faust Signal Routing Library"); + m->declare("route.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 9; } + virtual int getInputRate (int i) {int rate[]={1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fslider0 = 1.0; + fslider1 = 1.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openVerticalBox("0x00"); + interface->declare(&fslider0, "0", ""); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + interface->declare(&fslider1, "0", ""); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + interface->declare(0, "1", ""); + interface->openHorizontalBox("Inputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6536ce0", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce653aa10", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce653c1e0", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce653dca0", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph8, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6545790", &fbargraph8, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph12, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce654c630", &fbargraph12, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph10, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6548bb0", &fbargraph10, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph13, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce654e250", &fbargraph13, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph9, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6546f90", &fbargraph9, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "2", ""); + interface->openHorizontalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6538cd0", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce653fad0", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6541b90", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6543920", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph11, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce654a820", &fbargraph11, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph14, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6550320", &fbargraph14, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph15, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6552540", &fbargraph15, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph16, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6554620", &fbargraph16, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph17, "unit", "dB"); + interface->addVerticalBargraph("0x7fbce6556bf0", &fbargraph17, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow1 = int((iSlow0 >= 5)); + int iSlow2 = int((iSlow0 >= 7)); + int iSlow3 = int((iSlow0 >= 8)); + double fTemp0; + double fTemp1; + double fTemp2; + int iSlow4 = int((iSlow0 >= 6)); + double fTemp3; + int iSlow5 = int((iSlow0 >= 3)); + int iSlow6 = int((iSlow0 >= 2)); + double fTemp4; + double fTemp5; + double fTemp6; + double fTemp7; + double fTemp8; + double fTemp9; + double fTemp10; + double fTemp11; + int iSlow7 = int((iSlow0 >= 4)); + double fTemp12; + double fTemp13; + int iSlow8 = int((iSlow0 >= 1)); + double fTemp14; + double fTemp15; + double fTemp16; + double fTemp17; + double fTemp18; + double fTemp19; + double fTemp20; + double fTemp21; + double fTemp22; + double fTemp23; + double fTemp24; + double fTemp25; + double fTemp26; + double fTemp27; + double fTemp28; + double fTemp29; + double fTemp30; + double fTemp31; + double fTemp32; + double fTemp33; + double fTemp34; + double fTemp35; + double fTemp36; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAConverter3.cpp b/source/HOAUGens/HOAConverter3.cpp new file mode 100644 index 0000000000..b8826c6a3b --- /dev/null +++ b/source/HOAUGens/HOAConverter3.cpp @@ -0,0 +1,1433 @@ +//---------------------------------------------------------- +// name: "HOAConverter3" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec0[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec2[2]; + FAUSTFLOAT fbargraph5; + double fRec6[2]; + FAUSTFLOAT fbargraph6; + double fRec7[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + double fRec11[2]; + FAUSTFLOAT fbargraph10; + double fRec8[2]; + FAUSTFLOAT fbargraph11; + double fRec13[2]; + FAUSTFLOAT fbargraph12; + double fRec14[2]; + FAUSTFLOAT fbargraph13; + double fRec12[2]; + FAUSTFLOAT fbargraph14; + double fRec15[2]; + FAUSTFLOAT fbargraph15; + double fRec16[2]; + FAUSTFLOAT fbargraph16; + double fRec17[2]; + FAUSTFLOAT fbargraph17; + double fRec19[2]; + FAUSTFLOAT fbargraph18; + double fRec20[2]; + FAUSTFLOAT fbargraph19; + double fRec21[2]; + FAUSTFLOAT fbargraph20; + double fRec18[2]; + FAUSTFLOAT fbargraph21; + double fRec23[2]; + FAUSTFLOAT fbargraph22; + double fRec24[2]; + FAUSTFLOAT fbargraph23; + double fRec22[2]; + FAUSTFLOAT fbargraph24; + double fRec26[2]; + FAUSTFLOAT fbargraph25; + double fRec25[2]; + FAUSTFLOAT fbargraph26; + double fRec28[2]; + FAUSTFLOAT fbargraph27; + double fRec27[2]; + FAUSTFLOAT fbargraph28; + double fRec29[2]; + FAUSTFLOAT fbargraph29; + double fRec30[2]; + FAUSTFLOAT fbargraph30; + double fRec31[2]; + FAUSTFLOAT fbargraph31; + public: + static void metadata(Meta* m) { + m->declare("name", "HOAConverter3"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("route.lib/name", "Faust Signal Routing Library"); + m->declare("route.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 16; } + virtual int getInputRate (int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fslider0 = 1.0; + fslider1 = 1.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openVerticalBox("0x00"); + interface->declare(&fslider0, "0", ""); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + interface->declare(&fslider1, "0", ""); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + interface->declare(0, "1", ""); + interface->openHorizontalBox("Inputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7f92645646c0", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7f92645682b0", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264569990", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7f926456b3b0", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph8, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264572bd0", &fbargraph8, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph12, "unit", "dB"); + interface->addVerticalBargraph("0x7f92645798c0", &fbargraph12, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph10, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264575f60", &fbargraph10, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph13, "unit", "dB"); + interface->addVerticalBargraph("0x7f926457b420", &fbargraph13, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph9, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264574400", &fbargraph9, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph18, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264585ab0", &fbargraph18, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph22, "unit", "dB"); + interface->addVerticalBargraph("0x7f926458c950", &fbargraph22, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph25, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264592190", &fbargraph25, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph20, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264588f20", &fbargraph20, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph23, "unit", "dB"); + interface->addVerticalBargraph("0x7f926458e200", &fbargraph23, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph27, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264596270", &fbargraph27, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph19, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264587360", &fbargraph19, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "2", ""); + interface->openHorizontalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264566620", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7f926456d580", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7f926456f150", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264570f10", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph11, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264577c30", &fbargraph11, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph14, "unit", "dB"); + interface->addVerticalBargraph("0x7f926457d320", &fbargraph14, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph15, "unit", "dB"); + interface->addVerticalBargraph("0x7f926457f280", &fbargraph15, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph16, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264581590", &fbargraph16, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph17, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264583ad0", &fbargraph17, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph21, "unit", "dB"); + interface->addVerticalBargraph("0x7f926458ac50", &fbargraph21, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph24, "unit", "dB"); + interface->addVerticalBargraph("0x7f92645905a0", &fbargraph24, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph26, "unit", "dB"); + interface->addVerticalBargraph("0x7f9264594470", &fbargraph26, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph28, "unit", "dB"); + interface->addVerticalBargraph("0x7f92645981f0", &fbargraph28, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph29, "unit", "dB"); + interface->addVerticalBargraph("0x7f926459a6c0", &fbargraph29, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph30, "unit", "dB"); + interface->addVerticalBargraph("0x7f926459cdf0", &fbargraph30, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph31, "unit", "dB"); + interface->addVerticalBargraph("0x7f926459f2d0", &fbargraph31, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow1 = int((iSlow0 >= 5)); + int iSlow2 = int((iSlow0 >= 7)); + int iSlow3 = int((iSlow0 >= 8)); + double fTemp0; + double fTemp1; + double fTemp2; + int iSlow4 = int((iSlow0 >= 6)); + double fTemp3; + int iSlow5 = int((iSlow0 >= 3)); + int iSlow6 = int((iSlow0 >= 2)); + double fTemp4; + double fTemp5; + double fTemp6; + double fTemp7; + double fTemp8; + double fTemp9; + double fTemp10; + double fTemp11; + int iSlow7 = int((iSlow0 >= 4)); + double fTemp12; + double fTemp13; + int iSlow8 = int((iSlow0 >= 1)); + double fTemp14; + double fTemp15; + double fTemp16; + double fTemp17; + double fTemp18; + double fTemp19; + double fTemp20; + double fTemp21; + double fTemp22; + double fTemp23; + double fTemp24; + double fTemp25; + double fTemp26; + double fTemp27; + double fTemp28; + double fTemp29; + double fTemp30; + double fTemp31; + double fTemp32; + double fTemp33; + double fTemp34; + double fTemp35; + double fTemp36; + double fTemp37; + double fTemp38; + double fTemp39; + double fTemp40; + double fTemp41; + double fTemp42; + double fTemp43; + double fTemp44; + double fTemp45; + double fTemp46; + double fTemp47; + double fTemp48; + double fTemp49; + double fTemp50; + double fTemp51; + double fTemp52; + double fTemp53; + double fTemp54; + double fTemp55; + double fTemp56; + double fTemp57; + double fTemp58; + double fTemp59; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAConverter4.cpp b/source/HOAUGens/HOAConverter4.cpp new file mode 100644 index 0000000000..d40d6f9844 --- /dev/null +++ b/source/HOAUGens/HOAConverter4.cpp @@ -0,0 +1,1698 @@ +//---------------------------------------------------------- +// name: "HOAConverter4" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec0[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec2[2]; + FAUSTFLOAT fbargraph5; + double fRec6[2]; + FAUSTFLOAT fbargraph6; + double fRec7[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + double fRec11[2]; + FAUSTFLOAT fbargraph10; + double fRec8[2]; + FAUSTFLOAT fbargraph11; + double fRec13[2]; + FAUSTFLOAT fbargraph12; + double fRec14[2]; + FAUSTFLOAT fbargraph13; + double fRec12[2]; + FAUSTFLOAT fbargraph14; + double fRec15[2]; + FAUSTFLOAT fbargraph15; + double fRec16[2]; + FAUSTFLOAT fbargraph16; + double fRec17[2]; + FAUSTFLOAT fbargraph17; + double fRec19[2]; + FAUSTFLOAT fbargraph18; + double fRec20[2]; + FAUSTFLOAT fbargraph19; + double fRec21[2]; + FAUSTFLOAT fbargraph20; + double fRec18[2]; + FAUSTFLOAT fbargraph21; + double fRec23[2]; + FAUSTFLOAT fbargraph22; + double fRec24[2]; + FAUSTFLOAT fbargraph23; + double fRec22[2]; + FAUSTFLOAT fbargraph24; + double fRec26[2]; + FAUSTFLOAT fbargraph25; + double fRec25[2]; + FAUSTFLOAT fbargraph26; + double fRec28[2]; + FAUSTFLOAT fbargraph27; + double fRec27[2]; + FAUSTFLOAT fbargraph28; + double fRec29[2]; + FAUSTFLOAT fbargraph29; + double fRec30[2]; + FAUSTFLOAT fbargraph30; + double fRec31[2]; + FAUSTFLOAT fbargraph31; + double fRec33[2]; + FAUSTFLOAT fbargraph32; + double fRec32[2]; + FAUSTFLOAT fbargraph33; + double fRec35[2]; + FAUSTFLOAT fbargraph34; + double fRec34[2]; + FAUSTFLOAT fbargraph35; + double fRec37[2]; + FAUSTFLOAT fbargraph36; + double fRec36[2]; + FAUSTFLOAT fbargraph37; + double fRec39[2]; + FAUSTFLOAT fbargraph38; + double fRec38[2]; + FAUSTFLOAT fbargraph39; + double fRec41[2]; + FAUSTFLOAT fbargraph40; + double fRec40[2]; + FAUSTFLOAT fbargraph41; + double fRec43[2]; + FAUSTFLOAT fbargraph42; + double fRec42[2]; + FAUSTFLOAT fbargraph43; + double fRec45[2]; + FAUSTFLOAT fbargraph44; + double fRec44[2]; + FAUSTFLOAT fbargraph45; + double fRec47[2]; + FAUSTFLOAT fbargraph46; + double fRec46[2]; + FAUSTFLOAT fbargraph47; + double fRec49[2]; + FAUSTFLOAT fbargraph48; + double fRec48[2]; + FAUSTFLOAT fbargraph49; + public: + static void metadata(Meta* m) { + m->declare("name", "HOAConverter4"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("route.lib/name", "Faust Signal Routing Library"); + m->declare("route.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 25; } + virtual int getNumOutputs() { return 25; } + virtual int getInputRate (int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fslider0 = 1.0; + fslider1 = 1.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openVerticalBox("0x00"); + interface->declare(&fslider0, "0", ""); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + interface->declare(&fslider1, "0", ""); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + interface->declare(0, "1", ""); + interface->openHorizontalBox("Inputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea222c50", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea226980", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea228150", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea229c10", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph8, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea231700", &fbargraph8, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph12, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea2385a0", &fbargraph12, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph10, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea234b20", &fbargraph10, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph13, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea23a1c0", &fbargraph13, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph9, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea232f00", &fbargraph9, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph18, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea244bb0", &fbargraph18, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph22, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea24bd40", &fbargraph22, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph25, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea251810", &fbargraph25, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph20, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea2481d0", &fbargraph20, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph23, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea24d6d0", &fbargraph23, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph27, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea255a50", &fbargraph27, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph19, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea246540", &fbargraph19, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("4"); + interface->openVerticalBox("16"); + interface->declare(&fbargraph32, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea260e70", &fbargraph32, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("17"); + interface->declare(&fbargraph34, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea264950", &fbargraph34, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("18"); + interface->declare(&fbargraph36, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea268290", &fbargraph36, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("19"); + interface->declare(&fbargraph38, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea26bcb0", &fbargraph38, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("20"); + interface->declare(&fbargraph40, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea26f7b0", &fbargraph40, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("21"); + interface->declare(&fbargraph42, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea273390", &fbargraph42, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("22"); + interface->declare(&fbargraph44, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea277050", &fbargraph44, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("23"); + interface->declare(&fbargraph46, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea27adf0", &fbargraph46, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("24"); + interface->declare(&fbargraph48, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea27ec70", &fbargraph48, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "2", ""); + interface->openHorizontalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea224c40", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea22ba40", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea22db00", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea22f890", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph11, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea236790", &fbargraph11, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph14, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea23c290", &fbargraph14, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph15, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea23e4b0", &fbargraph15, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph16, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea240590", &fbargraph16, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph17, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea242b60", &fbargraph17, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph21, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea24a250", &fbargraph21, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph24, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea24fb10", &fbargraph24, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph26, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea253cc0", &fbargraph26, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph28, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea257c10", &fbargraph28, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph29, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea259fe0", &fbargraph29, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph30, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea25c290", &fbargraph30, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph31, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea25eec0", &fbargraph31, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("4"); + interface->openVerticalBox("16"); + interface->declare(&fbargraph33, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea262ab0", &fbargraph33, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("17"); + interface->declare(&fbargraph35, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea266370", &fbargraph35, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("18"); + interface->declare(&fbargraph37, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea269d20", &fbargraph37, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("19"); + interface->declare(&fbargraph39, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea26d7b0", &fbargraph39, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("20"); + interface->declare(&fbargraph41, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea271320", &fbargraph41, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("21"); + interface->declare(&fbargraph43, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea274f70", &fbargraph43, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("22"); + interface->declare(&fbargraph45, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea278ca0", &fbargraph45, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("23"); + interface->declare(&fbargraph47, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea27cab0", &fbargraph47, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("24"); + interface->declare(&fbargraph49, "unit", "dB"); + interface->addVerticalBargraph("0x7fafea2809a0", &fbargraph49, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow1 = int((iSlow0 >= 5)); + int iSlow2 = int((iSlow0 >= 7)); + int iSlow3 = int((iSlow0 >= 8)); + double fTemp0; + double fTemp1; + double fTemp2; + int iSlow4 = int((iSlow0 >= 6)); + double fTemp3; + int iSlow5 = int((iSlow0 >= 3)); + int iSlow6 = int((iSlow0 >= 2)); + double fTemp4; + double fTemp5; + double fTemp6; + double fTemp7; + double fTemp8; + double fTemp9; + double fTemp10; + double fTemp11; + int iSlow7 = int((iSlow0 >= 4)); + double fTemp12; + double fTemp13; + int iSlow8 = int((iSlow0 >= 1)); + double fTemp14; + double fTemp15; + double fTemp16; + double fTemp17; + double fTemp18; + double fTemp19; + double fTemp20; + double fTemp21; + double fTemp22; + double fTemp23; + double fTemp24; + double fTemp25; + double fTemp26; + double fTemp27; + double fTemp28; + double fTemp29; + double fTemp30; + double fTemp31; + double fTemp32; + double fTemp33; + double fTemp34; + double fTemp35; + double fTemp36; + double fTemp37; + double fTemp38; + double fTemp39; + double fTemp40; + double fTemp41; + double fTemp42; + double fTemp43; + double fTemp44; + double fTemp45; + double fTemp46; + double fTemp47; + double fTemp48; + double fTemp49; + double fTemp50; + double fTemp51; + double fTemp52; + double fTemp53; + double fTemp54; + double fTemp55; + double fTemp56; + double fTemp57; + double fTemp58; + double fTemp59; + double fTemp60; + double fTemp61; + double fTemp62; + double fTemp63; + double fTemp64; + double fTemp65; + double fTemp66; + double fTemp67; + double fTemp68; + double fTemp69; + double fTemp70; + double fTemp71; + double fTemp72; + double fTemp73; + double fTemp74; + double fTemp75; + double fTemp76; + double fTemp77; + double fTemp78; + double fTemp79; + double fTemp80; + double fTemp81; + double fTemp82; + double fTemp83; + double fTemp84; + double fTemp85; + double fTemp86; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAConverter5.cpp b/source/HOAUGens/HOAConverter5.cpp new file mode 100644 index 0000000000..c12339dd0d --- /dev/null +++ b/source/HOAUGens/HOAConverter5.cpp @@ -0,0 +1,2021 @@ +//---------------------------------------------------------- +// name: "HOAConverter5" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec0[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec2[2]; + FAUSTFLOAT fbargraph5; + double fRec6[2]; + FAUSTFLOAT fbargraph6; + double fRec7[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + double fRec11[2]; + FAUSTFLOAT fbargraph10; + double fRec8[2]; + FAUSTFLOAT fbargraph11; + double fRec13[2]; + FAUSTFLOAT fbargraph12; + double fRec14[2]; + FAUSTFLOAT fbargraph13; + double fRec12[2]; + FAUSTFLOAT fbargraph14; + double fRec15[2]; + FAUSTFLOAT fbargraph15; + double fRec16[2]; + FAUSTFLOAT fbargraph16; + double fRec17[2]; + FAUSTFLOAT fbargraph17; + double fRec19[2]; + FAUSTFLOAT fbargraph18; + double fRec20[2]; + FAUSTFLOAT fbargraph19; + double fRec21[2]; + FAUSTFLOAT fbargraph20; + double fRec18[2]; + FAUSTFLOAT fbargraph21; + double fRec23[2]; + FAUSTFLOAT fbargraph22; + double fRec24[2]; + FAUSTFLOAT fbargraph23; + double fRec22[2]; + FAUSTFLOAT fbargraph24; + double fRec26[2]; + FAUSTFLOAT fbargraph25; + double fRec25[2]; + FAUSTFLOAT fbargraph26; + double fRec28[2]; + FAUSTFLOAT fbargraph27; + double fRec27[2]; + FAUSTFLOAT fbargraph28; + double fRec29[2]; + FAUSTFLOAT fbargraph29; + double fRec30[2]; + FAUSTFLOAT fbargraph30; + double fRec31[2]; + FAUSTFLOAT fbargraph31; + double fRec33[2]; + FAUSTFLOAT fbargraph32; + double fRec32[2]; + FAUSTFLOAT fbargraph33; + double fRec35[2]; + FAUSTFLOAT fbargraph34; + double fRec34[2]; + FAUSTFLOAT fbargraph35; + double fRec37[2]; + FAUSTFLOAT fbargraph36; + double fRec36[2]; + FAUSTFLOAT fbargraph37; + double fRec39[2]; + FAUSTFLOAT fbargraph38; + double fRec38[2]; + FAUSTFLOAT fbargraph39; + double fRec41[2]; + FAUSTFLOAT fbargraph40; + double fRec40[2]; + FAUSTFLOAT fbargraph41; + double fRec43[2]; + FAUSTFLOAT fbargraph42; + double fRec42[2]; + FAUSTFLOAT fbargraph43; + double fRec45[2]; + FAUSTFLOAT fbargraph44; + double fRec44[2]; + FAUSTFLOAT fbargraph45; + double fRec47[2]; + FAUSTFLOAT fbargraph46; + double fRec46[2]; + FAUSTFLOAT fbargraph47; + double fRec49[2]; + FAUSTFLOAT fbargraph48; + double fRec48[2]; + FAUSTFLOAT fbargraph49; + double fRec51[2]; + FAUSTFLOAT fbargraph50; + double fRec50[2]; + FAUSTFLOAT fbargraph51; + double fRec53[2]; + FAUSTFLOAT fbargraph52; + double fRec52[2]; + FAUSTFLOAT fbargraph53; + double fRec55[2]; + FAUSTFLOAT fbargraph54; + double fRec54[2]; + FAUSTFLOAT fbargraph55; + double fRec57[2]; + FAUSTFLOAT fbargraph56; + double fRec56[2]; + FAUSTFLOAT fbargraph57; + double fRec59[2]; + FAUSTFLOAT fbargraph58; + double fRec58[2]; + FAUSTFLOAT fbargraph59; + double fRec61[2]; + FAUSTFLOAT fbargraph60; + double fRec60[2]; + FAUSTFLOAT fbargraph61; + double fRec63[2]; + FAUSTFLOAT fbargraph62; + double fRec62[2]; + FAUSTFLOAT fbargraph63; + double fRec65[2]; + FAUSTFLOAT fbargraph64; + double fRec64[2]; + FAUSTFLOAT fbargraph65; + double fRec67[2]; + FAUSTFLOAT fbargraph66; + double fRec66[2]; + FAUSTFLOAT fbargraph67; + double fRec69[2]; + FAUSTFLOAT fbargraph68; + double fRec68[2]; + FAUSTFLOAT fbargraph69; + double fRec71[2]; + FAUSTFLOAT fbargraph70; + double fRec70[2]; + FAUSTFLOAT fbargraph71; + public: + static void metadata(Meta* m) { + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("name", "HOAConverter5"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("route.lib/name", "Faust Signal Routing Library"); + m->declare("route.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 36; } + virtual int getNumOutputs() { return 36; } + virtual int getInputRate (int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fslider0 = 1.0; + fslider1 = 1.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openVerticalBox("0x00"); + interface->declare(&fslider0, "0", ""); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + interface->declare(&fslider1, "0", ""); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + interface->declare(0, "1", ""); + interface->openHorizontalBox("Inputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49309060", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4930cd90", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4930e560", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49310020", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph8, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49317b10", &fbargraph8, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph12, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4931e9b0", &fbargraph12, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph10, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4931af30", &fbargraph10, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph13, "unit", "dB"); + interface->addVerticalBargraph("0x7fce493205d0", &fbargraph13, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph9, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49319310", &fbargraph9, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph18, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4932afc0", &fbargraph18, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph22, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49332150", &fbargraph22, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph25, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49337c20", &fbargraph25, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph20, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4932e5e0", &fbargraph20, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph23, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49333ae0", &fbargraph23, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph27, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4933be60", &fbargraph27, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph19, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4932c950", &fbargraph19, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("4"); + interface->openVerticalBox("16"); + interface->declare(&fbargraph32, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49347280", &fbargraph32, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("17"); + interface->declare(&fbargraph34, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4934ad60", &fbargraph34, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("18"); + interface->declare(&fbargraph36, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4934e6a0", &fbargraph36, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("19"); + interface->declare(&fbargraph38, "unit", "dB"); + interface->addVerticalBargraph("0x7fce493520c0", &fbargraph38, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("20"); + interface->declare(&fbargraph40, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49355bc0", &fbargraph40, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("21"); + interface->declare(&fbargraph42, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fb7ec0", &fbargraph42, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("22"); + interface->declare(&fbargraph44, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fbb940", &fbargraph44, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("23"); + interface->declare(&fbargraph46, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fbf480", &fbargraph46, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("24"); + interface->declare(&fbargraph48, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fc3080", &fbargraph48, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("5"); + interface->openVerticalBox("25"); + interface->declare(&fbargraph50, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fc6d40", &fbargraph50, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("26"); + interface->declare(&fbargraph52, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fca6b0", &fbargraph52, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("27"); + interface->declare(&fbargraph54, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fcdf00", &fbargraph54, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("28"); + interface->declare(&fbargraph56, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fd1810", &fbargraph56, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("29"); + interface->declare(&fbargraph58, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fd51e0", &fbargraph58, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("30"); + interface->declare(&fbargraph60, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fd8cd0", &fbargraph60, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("31"); + interface->declare(&fbargraph62, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fdc890", &fbargraph62, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("32"); + interface->declare(&fbargraph64, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fe0500", &fbargraph64, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("33"); + interface->declare(&fbargraph66, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fe4240", &fbargraph66, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("34"); + interface->declare(&fbargraph68, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fe8030", &fbargraph68, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("35"); + interface->declare(&fbargraph70, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46febef0", &fbargraph70, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "2", ""); + interface->openHorizontalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4930b050", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49311e50", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49313f10", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49315ca0", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph11, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4931cba0", &fbargraph11, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph14, "unit", "dB"); + interface->addVerticalBargraph("0x7fce493226a0", &fbargraph14, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph15, "unit", "dB"); + interface->addVerticalBargraph("0x7fce493248c0", &fbargraph15, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph16, "unit", "dB"); + interface->addVerticalBargraph("0x7fce493269a0", &fbargraph16, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph17, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49328f70", &fbargraph17, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph21, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49330660", &fbargraph21, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph24, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49335f20", &fbargraph24, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph26, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4933a0d0", &fbargraph26, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph28, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4933e020", &fbargraph28, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph29, "unit", "dB"); + interface->addVerticalBargraph("0x7fce493403f0", &fbargraph29, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph30, "unit", "dB"); + interface->addVerticalBargraph("0x7fce493426a0", &fbargraph30, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph31, "unit", "dB"); + interface->addVerticalBargraph("0x7fce493452d0", &fbargraph31, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("4"); + interface->openVerticalBox("16"); + interface->declare(&fbargraph33, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49348ec0", &fbargraph33, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("17"); + interface->declare(&fbargraph35, "unit", "dB"); + interface->addVerticalBargraph("0x7fce4934c780", &fbargraph35, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("18"); + interface->declare(&fbargraph37, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49350130", &fbargraph37, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("19"); + interface->declare(&fbargraph39, "unit", "dB"); + interface->addVerticalBargraph("0x7fce49353bc0", &fbargraph39, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("20"); + interface->declare(&fbargraph41, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fb6010", &fbargraph41, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("21"); + interface->declare(&fbargraph43, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fb9a60", &fbargraph43, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("22"); + interface->declare(&fbargraph45, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fbd540", &fbargraph45, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("23"); + interface->declare(&fbargraph47, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fc10e0", &fbargraph47, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("24"); + interface->declare(&fbargraph49, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fc4d40", &fbargraph49, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("5"); + interface->openVerticalBox("25"); + interface->declare(&fbargraph51, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fc8870", &fbargraph51, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("26"); + interface->declare(&fbargraph53, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fcc080", &fbargraph53, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("27"); + interface->declare(&fbargraph55, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fcf930", &fbargraph55, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("28"); + interface->declare(&fbargraph57, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fd32a0", &fbargraph57, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("29"); + interface->declare(&fbargraph59, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fd6d40", &fbargraph59, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("30"); + interface->declare(&fbargraph61, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fda890", &fbargraph61, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("31"); + interface->declare(&fbargraph63, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fde4b0", &fbargraph63, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("32"); + interface->declare(&fbargraph65, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fe2180", &fbargraph65, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("33"); + interface->declare(&fbargraph67, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fe5f20", &fbargraph67, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("34"); + interface->declare(&fbargraph69, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fe9d70", &fbargraph69, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("35"); + interface->declare(&fbargraph71, "unit", "dB"); + interface->addVerticalBargraph("0x7fce46fedc90", &fbargraph71, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow1 = int((iSlow0 >= 5)); + int iSlow2 = int((iSlow0 >= 7)); + int iSlow3 = int((iSlow0 >= 8)); + double fTemp0; + double fTemp1; + double fTemp2; + int iSlow4 = int((iSlow0 >= 6)); + double fTemp3; + int iSlow5 = int((iSlow0 >= 3)); + int iSlow6 = int((iSlow0 >= 2)); + double fTemp4; + double fTemp5; + double fTemp6; + double fTemp7; + double fTemp8; + double fTemp9; + double fTemp10; + double fTemp11; + int iSlow7 = int((iSlow0 >= 4)); + double fTemp12; + double fTemp13; + int iSlow8 = int((iSlow0 >= 1)); + double fTemp14; + double fTemp15; + double fTemp16; + double fTemp17; + double fTemp18; + double fTemp19; + double fTemp20; + double fTemp21; + double fTemp22; + double fTemp23; + double fTemp24; + double fTemp25; + double fTemp26; + double fTemp27; + double fTemp28; + double fTemp29; + double fTemp30; + double fTemp31; + double fTemp32; + double fTemp33; + double fTemp34; + double fTemp35; + double fTemp36; + double fTemp37; + double fTemp38; + double fTemp39; + double fTemp40; + double fTemp41; + double fTemp42; + double fTemp43; + double fTemp44; + double fTemp45; + double fTemp46; + double fTemp47; + double fTemp48; + double fTemp49; + double fTemp50; + double fTemp51; + double fTemp52; + double fTemp53; + double fTemp54; + double fTemp55; + double fTemp56; + double fTemp57; + double fTemp58; + double fTemp59; + double fTemp60; + double fTemp61; + double fTemp62; + double fTemp63; + double fTemp64; + double fTemp65; + double fTemp66; + double fTemp67; + double fTemp68; + double fTemp69; + double fTemp70; + double fTemp71; + double fTemp72; + double fTemp73; + double fTemp74; + double fTemp75; + double fTemp76; + double fTemp77; + double fTemp78; + double fTemp79; + double fTemp80; + double fTemp81; + double fTemp82; + double fTemp83; + double fTemp84; + double fTemp85; + double fTemp86; + double fTemp87; + double fTemp88; + double fTemp89; + double fTemp90; + double fTemp91; + double fTemp92; + double fTemp93; + double fTemp94; + double fTemp95; + double fTemp96; + double fTemp97; + double fTemp98; + double fTemp99; + double fTemp100; + double fTemp101; + double fTemp102; + double fTemp103; + double fTemp104; + double fTemp105; + double fTemp106; + double fTemp107; + double fTemp108; + double fTemp109; + double fTemp110; + double fTemp111; + double fTemp112; + double fTemp113; + double fTemp114; + double fTemp115; + double fTemp116; + double fTemp117; + double fTemp118; + double fTemp119; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev061.cpp b/source/HOAUGens/HOADecLebedev061.cpp new file mode 100644 index 0000000000..f0efb533dc --- /dev/null +++ b/source/HOAUGens/HOADecLebedev061.cpp @@ -0,0 +1,1255 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev061" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fentry0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fbargraph2; + double fRec0[2]; + FAUSTFLOAT fbargraph3; + double fRec10[2]; + FAUSTFLOAT fbargraph4; + double fRec14[2]; + double fRec13[2]; + double fRec12[2]; + FAUSTFLOAT fbargraph5; + double fRec11[2]; + FAUSTFLOAT fbargraph6; + double fRec15[2]; + FAUSTFLOAT fbargraph7; + double fRec16[2]; + FAUSTFLOAT fbargraph8; + double fRec17[2]; + FAUSTFLOAT fbargraph9; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("name", "HOADecLebedev061"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 6; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (3.4e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fentry0 = 1.07; + fcheckbox0 = 0.0; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe360710", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe36b4e0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe363960", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe3661b0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-6"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph3, "osc", "/output1"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe3677a0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph4, "osc", "/output2"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe368c90", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph6, "osc", "/output3"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe36c9c0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph7, "osc", "/output4"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe36e210", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph8, "osc", "/output5"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe36fba0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph9, "osc", "/output6"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7facfe371420", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = double(fentry0); + double fSlow2 = double(fcheckbox0); + double fSlow3 = (1 - ((1 - fSlow1) * fSlow2)); + double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow5 = (1.0 / ((fConst2 / fSlow1) + 1)); + double fSlow6 = (fSlow2 * fSlow1); + double fSlow7 = (fConst3 / fSlow1); + double fSlow8 = (1 - fSlow2); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev261.cpp b/source/HOAUGens/HOADecLebedev261.cpp new file mode 100644 index 0000000000..4a73b5e770 --- /dev/null +++ b/source/HOAUGens/HOADecLebedev261.cpp @@ -0,0 +1,1557 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev261" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fbargraph2; + double fRec0[2]; + FAUSTFLOAT fbargraph3; + double fRec10[2]; + FAUSTFLOAT fbargraph4; + double fRec14[2]; + double fRec13[2]; + double fRec12[2]; + FAUSTFLOAT fbargraph5; + double fRec11[2]; + FAUSTFLOAT fbargraph6; + double fRec15[2]; + FAUSTFLOAT fbargraph7; + double fRec16[2]; + FAUSTFLOAT fbargraph8; + double fRec17[2]; + FAUSTFLOAT fbargraph9; + double fRec18[2]; + FAUSTFLOAT fbargraph10; + double fRec19[2]; + FAUSTFLOAT fbargraph11; + double fRec20[2]; + FAUSTFLOAT fbargraph12; + double fRec21[2]; + FAUSTFLOAT fbargraph13; + double fRec22[2]; + FAUSTFLOAT fbargraph14; + double fRec23[2]; + FAUSTFLOAT fbargraph15; + double fRec24[2]; + FAUSTFLOAT fbargraph16; + double fRec25[2]; + FAUSTFLOAT fbargraph17; + double fRec26[2]; + FAUSTFLOAT fbargraph18; + double fRec27[2]; + FAUSTFLOAT fbargraph19; + double fRec28[2]; + FAUSTFLOAT fbargraph20; + double fRec29[2]; + FAUSTFLOAT fbargraph21; + double fRec30[2]; + FAUSTFLOAT fbargraph22; + double fRec31[2]; + FAUSTFLOAT fbargraph23; + double fRec32[2]; + FAUSTFLOAT fbargraph24; + double fRec33[2]; + FAUSTFLOAT fbargraph25; + double fRec34[2]; + FAUSTFLOAT fbargraph26; + double fRec35[2]; + FAUSTFLOAT fbargraph27; + double fRec36[2]; + FAUSTFLOAT fbargraph28; + double fRec37[2]; + FAUSTFLOAT fbargraph29; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecLebedev261"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 26; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (3.4e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f636a0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f6ca00", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f66940", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f691d0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-outs/2"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph3, "osc", "/output1"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f6a7c0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph4, "osc", "/output2"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f6bc60", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph6, "osc", "/output3"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f6de10", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph7, "osc", "/output4"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f6f870", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph8, "osc", "/output5"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f712f0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph9, "osc", "/output6"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f72a80", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph10, "osc", "/output7"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f74900", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph11, "osc", "/output8"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176f75f20", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph12, "osc", "/output9"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8176a05830", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph13, "osc", "/output10"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768c2e50", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph14, "osc", "/output11"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768c45c0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph15, "osc", "/output12"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768c62f0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph16, "osc", "/output13"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768c7e00", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 14-26"); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph17, "osc", "/output14"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768c9970", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph18, "osc", "/output15"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768cb080", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph19, "osc", "/output16"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768cc790", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph20, "osc", "/output17"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768cdf10", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph21, "osc", "/output18"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768cf820", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph22, "osc", "/output19"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768d1700", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph23, "osc", "/output20"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768d3220", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph24, "osc", "/output21"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768d4c80", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph25, "osc", "/output22"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768d6750", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph26, "osc", "/output23"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768d83f0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph27, "osc", "/output24"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768d9e80", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph28, "osc", "/output25"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768dbcd0", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph29, "osc", "/output26"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f81768dd920", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = double(fcheckbox0); + double fSlow2 = double(fentry0); + double fSlow3 = ((fSlow1 * (fSlow2 + -1)) + 1); + double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow5 = (1.0 / ((fConst2 / fSlow2) + 1)); + double fSlow6 = (fSlow1 * fSlow2); + double fSlow7 = (fConst3 / fSlow2); + double fSlow8 = (1 - fSlow1); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev262.cpp b/source/HOAUGens/HOADecLebedev262.cpp new file mode 100644 index 0000000000..f81044fd3e --- /dev/null +++ b/source/HOAUGens/HOADecLebedev262.cpp @@ -0,0 +1,1736 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev262" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fConst4; + double fRec6[2]; + double fRec7[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fRec10[2]; + double fRec11[2]; + double fRec9[2]; + double fRec8[2]; + FAUSTFLOAT fbargraph2; + double fConst5; + double fRec14[2]; + double fRec13[2]; + double fRec12[2]; + FAUSTFLOAT fbargraph3; + double fRec17[2]; + double fRec18[2]; + double fRec16[2]; + double fRec15[2]; + FAUSTFLOAT fbargraph4; + double fRec21[2]; + double fRec20[2]; + double fRec19[2]; + FAUSTFLOAT fbargraph5; + double fRec0[2]; + FAUSTFLOAT fbargraph6; + double fRec22[2]; + FAUSTFLOAT fbargraph7; + double fRec26[2]; + double fRec27[2]; + double fRec25[2]; + double fRec24[2]; + FAUSTFLOAT fbargraph8; + double fRec30[2]; + double fRec29[2]; + double fRec28[2]; + FAUSTFLOAT fbargraph9; + double fRec23[2]; + FAUSTFLOAT fbargraph10; + double fRec31[2]; + FAUSTFLOAT fbargraph11; + double fRec32[2]; + FAUSTFLOAT fbargraph12; + double fRec33[2]; + FAUSTFLOAT fbargraph13; + double fRec34[2]; + FAUSTFLOAT fbargraph14; + double fRec38[2]; + double fRec39[2]; + double fRec37[2]; + double fRec36[2]; + FAUSTFLOAT fbargraph15; + double fRec35[2]; + FAUSTFLOAT fbargraph16; + double fRec40[2]; + FAUSTFLOAT fbargraph17; + double fRec41[2]; + FAUSTFLOAT fbargraph18; + double fRec42[2]; + FAUSTFLOAT fbargraph19; + double fRec43[2]; + FAUSTFLOAT fbargraph20; + double fRec44[2]; + FAUSTFLOAT fbargraph21; + double fRec45[2]; + FAUSTFLOAT fbargraph22; + double fRec46[2]; + FAUSTFLOAT fbargraph23; + double fRec47[2]; + FAUSTFLOAT fbargraph24; + double fRec48[2]; + FAUSTFLOAT fbargraph25; + double fRec49[2]; + FAUSTFLOAT fbargraph26; + double fRec50[2]; + FAUSTFLOAT fbargraph27; + double fRec51[2]; + FAUSTFLOAT fbargraph28; + double fRec52[2]; + FAUSTFLOAT fbargraph29; + double fRec53[2]; + FAUSTFLOAT fbargraph30; + double fRec54[2]; + FAUSTFLOAT fbargraph31; + double fRec55[2]; + FAUSTFLOAT fbargraph32; + double fRec56[2]; + FAUSTFLOAT fbargraph33; + double fRec57[2]; + FAUSTFLOAT fbargraph34; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecLebedev262"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + } + + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 26; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (5.1e+02 / fConst0); + fConst4 = (1.02e+03 / fConst0); + fConst5 = (3.4e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22b3890", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22cbe80", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22c3290", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22bd8e0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22c96f0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22d8230", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22bab80", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22b7c80", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22c0970", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-outs/2"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph6, "osc", "/output1"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22c4bd0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph7, "osc", "/output2"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22c6420", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph10, "osc", "/output3"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22cd620", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph11, "osc", "/output4"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22cf250", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph12, "osc", "/output5"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22d1160", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph13, "osc", "/output6"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22d2a70", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph14, "osc", "/output7"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22d4fe0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph16, "osc", "/output8"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd22da2d0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph17, "osc", "/output9"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2540ce0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph18, "osc", "/output10"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2543110", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph19, "osc", "/output11"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2545010", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph20, "osc", "/output12"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2547280", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph21, "osc", "/output13"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd25490e0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 14-26"); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph22, "osc", "/output14"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd254b1d0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph23, "osc", "/output15"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd254cbe0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph24, "osc", "/output16"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd254e6b0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph25, "osc", "/output17"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd25503e0", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph26, "osc", "/output18"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2552060", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph27, "osc", "/output19"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2554e80", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph28, "osc", "/output20"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2557070", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph29, "osc", "/output21"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2559150", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph30, "osc", "/output22"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd255b270", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph31, "osc", "/output23"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd255d220", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph32, "osc", "/output24"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd255f030", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph33, "osc", "/output25"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd2560ea0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph34, "osc", "/output26"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fd25632c0", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = double(fcheckbox0); + double fSlow2 = double(fentry0); + double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); + double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow5 = (fConst2 / fSlow2); + double fSlow6 = faustpower<2>(fSlow5); + double fSlow7 = (1.0 / (((3 * fSlow6) + (fConst3 / fSlow2)) + 1)); + double fSlow8 = (12 * fSlow6); + double fSlow9 = (fSlow8 + (fConst4 / fSlow2)); + double fSlow10 = (fSlow1 * fSlow2); + double fSlow11 = (1 - fSlow1); + double fSlow12 = (1.0 / (fSlow5 + 1)); + double fSlow13 = (fConst5 / fSlow2); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev263.cpp b/source/HOAUGens/HOADecLebedev263.cpp new file mode 100644 index 0000000000..b7ebd91b2e --- /dev/null +++ b/source/HOAUGens/HOADecLebedev263.cpp @@ -0,0 +1,2037 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev263" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fRec7[2]; + double fRec8[2]; + double fRec6[2]; + double fConst6; + double fRec9[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fRec13[2]; + double fRec14[2]; + double fRec12[2]; + double fRec15[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fbargraph2; + double fRec19[2]; + double fRec20[2]; + double fRec18[2]; + double fRec21[2]; + double fRec17[2]; + double fRec16[2]; + FAUSTFLOAT fbargraph3; + double fRec25[2]; + double fRec26[2]; + double fRec24[2]; + double fRec27[2]; + double fRec23[2]; + double fRec22[2]; + FAUSTFLOAT fbargraph4; + double fConst7; + double fConst8; + double fRec30[2]; + double fRec31[2]; + double fRec29[2]; + double fRec28[2]; + FAUSTFLOAT fbargraph5; + double fRec34[2]; + double fRec35[2]; + double fRec33[2]; + double fRec32[2]; + FAUSTFLOAT fbargraph6; + double fRec38[2]; + double fRec39[2]; + double fRec37[2]; + double fRec36[2]; + FAUSTFLOAT fbargraph7; + double fConst9; + double fRec42[2]; + double fRec41[2]; + double fRec40[2]; + FAUSTFLOAT fbargraph8; + double fRec45[2]; + double fRec44[2]; + double fRec43[2]; + FAUSTFLOAT fbargraph9; + double fRec0[2]; + FAUSTFLOAT fbargraph10; + double fRec46[2]; + FAUSTFLOAT fbargraph11; + double fRec50[2]; + double fRec51[2]; + double fRec49[2]; + double fRec48[2]; + FAUSTFLOAT fbargraph12; + double fRec54[2]; + double fRec53[2]; + double fRec52[2]; + FAUSTFLOAT fbargraph13; + double fRec58[2]; + double fRec59[2]; + double fRec57[2]; + double fRec60[2]; + double fRec56[2]; + double fRec55[2]; + FAUSTFLOAT fbargraph14; + double fRec64[2]; + double fRec65[2]; + double fRec63[2]; + double fRec66[2]; + double fRec62[2]; + double fRec61[2]; + FAUSTFLOAT fbargraph15; + double fRec47[2]; + FAUSTFLOAT fbargraph16; + double fRec67[2]; + FAUSTFLOAT fbargraph17; + double fRec68[2]; + FAUSTFLOAT fbargraph18; + double fRec69[2]; + FAUSTFLOAT fbargraph19; + double fRec70[2]; + FAUSTFLOAT fbargraph20; + double fRec74[2]; + double fRec75[2]; + double fRec73[2]; + double fRec72[2]; + FAUSTFLOAT fbargraph21; + double fRec79[2]; + double fRec80[2]; + double fRec78[2]; + double fRec81[2]; + double fRec77[2]; + double fRec76[2]; + FAUSTFLOAT fbargraph22; + double fRec71[2]; + FAUSTFLOAT fbargraph23; + double fRec82[2]; + FAUSTFLOAT fbargraph24; + double fRec83[2]; + FAUSTFLOAT fbargraph25; + double fRec84[2]; + FAUSTFLOAT fbargraph26; + double fRec85[2]; + FAUSTFLOAT fbargraph27; + double fRec86[2]; + FAUSTFLOAT fbargraph28; + double fRec87[2]; + FAUSTFLOAT fbargraph29; + double fRec88[2]; + FAUSTFLOAT fbargraph30; + double fRec89[2]; + FAUSTFLOAT fbargraph31; + double fRec90[2]; + FAUSTFLOAT fbargraph32; + double fRec91[2]; + FAUSTFLOAT fbargraph33; + double fRec92[2]; + FAUSTFLOAT fbargraph34; + double fRec93[2]; + FAUSTFLOAT fbargraph35; + double fRec94[2]; + FAUSTFLOAT fbargraph36; + double fRec95[2]; + FAUSTFLOAT fbargraph37; + double fRec96[2]; + FAUSTFLOAT fbargraph38; + double fRec97[2]; + FAUSTFLOAT fbargraph39; + double fRec98[2]; + FAUSTFLOAT fbargraph40; + double fRec99[2]; + FAUSTFLOAT fbargraph41; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecLebedev263"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 26; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (394.7715102864353 / fConst0); + fConst3 = (625.2284897135664 / fConst0); + fConst4 = (1.7e+02 / fConst0); + fConst5 = (1250.4569794271329 / fConst0); + fConst6 = (789.5430205728705 / fConst0); + fConst7 = (5.1e+02 / fConst0); + fConst8 = (1.02e+03 / fConst0); + fConst9 = (3.4e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec81[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec82[i] = 0; + for (int i=0; i<2; i++) fRec83[i] = 0; + for (int i=0; i<2; i++) fRec84[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; + for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec87[i] = 0; + for (int i=0; i<2; i++) fRec88[i] = 0; + for (int i=0; i<2; i++) fRec89[i] = 0; + for (int i=0; i<2; i++) fRec90[i] = 0; + for (int i=0; i<2; i++) fRec91[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec93[i] = 0; + for (int i=0; i<2; i++) fRec94[i] = 0; + for (int i=0; i<2; i++) fRec95[i] = 0; + for (int i=0; i<2; i++) fRec96[i] = 0; + for (int i=0; i<2; i++) fRec97[i] = 0; + for (int i=0; i<2; i++) fRec98[i] = 0; + for (int i=0; i<2; i++) fRec99[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422810a0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422aa2a0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd54229e2a0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422a0b60", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422a7a90", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422c1550", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd54229b5b0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422986b0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd542295670", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422b1b10", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422c52e0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422adfc0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd542291980", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd54228dfa0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd54228a4c0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd542286940", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-outs/2"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph10, "osc", "/output1"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422a2a30", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph11, "osc", "/output2"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422a4ab0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph16, "osc", "/output3"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422b3760", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph17, "osc", "/output4"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422b5d80", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph18, "osc", "/output5"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422b8580", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph19, "osc", "/output6"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422ba240", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph20, "osc", "/output7"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422bd3b0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph23, "osc", "/output8"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422c7150", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph24, "osc", "/output9"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422ca000", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph25, "osc", "/output10"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422cd090", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph26, "osc", "/output11"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422cffe0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph27, "osc", "/output12"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422d2820", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph28, "osc", "/output13"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422d4d70", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 14-26"); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph29, "osc", "/output14"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422d7400", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph30, "osc", "/output15"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422d9160", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph31, "osc", "/output16"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422db6b0", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph32, "osc", "/output17"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422dd940", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph33, "osc", "/output18"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422dfd50", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph34, "osc", "/output19"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422e4030", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph35, "osc", "/output20"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422e7680", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph36, "osc", "/output21"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422ea5c0", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph37, "osc", "/output22"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422ed4b0", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph38, "osc", "/output23"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422efd90", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph39, "osc", "/output24"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422f23f0", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph40, "osc", "/output25"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422f4c70", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph41, "osc", "/output26"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd5422f7960", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = double(fcheckbox0); + double fSlow2 = double(fentry0); + double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); + double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow5 = (1.0 / ((fConst2 / fSlow2) + 1)); + double fSlow6 = (fConst4 / fSlow2); + double fSlow7 = faustpower<2>(fSlow6); + double fSlow8 = (1.0 / (((fConst3 / fSlow2) + (6.45943269348338 * fSlow7)) + 1)); + double fSlow9 = (25.83773077393352 * fSlow7); + double fSlow10 = (fSlow9 + (fConst5 / fSlow2)); + double fSlow11 = (fSlow1 * fSlow2); + double fSlow12 = (fConst6 / fSlow2); + double fSlow13 = (1 - fSlow1); + double fSlow14 = (1.0 / (((3 * fSlow7) + (fConst7 / fSlow2)) + 1)); + double fSlow15 = (12 * fSlow7); + double fSlow16 = (fSlow15 + (fConst8 / fSlow2)); + double fSlow17 = (1.0 / (fSlow6 + 1)); + double fSlow18 = (fConst9 / fSlow2); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev501.cpp b/source/HOAUGens/HOADecLebedev501.cpp new file mode 100644 index 0000000000..5950cc2708 --- /dev/null +++ b/source/HOAUGens/HOADecLebedev501.cpp @@ -0,0 +1,1916 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev501" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fbargraph2; + double fRec0[2]; + FAUSTFLOAT fbargraph3; + double fRec10[2]; + FAUSTFLOAT fbargraph4; + double fRec14[2]; + double fRec13[2]; + double fRec12[2]; + FAUSTFLOAT fbargraph5; + double fRec11[2]; + FAUSTFLOAT fbargraph6; + double fRec15[2]; + FAUSTFLOAT fbargraph7; + double fRec16[2]; + FAUSTFLOAT fbargraph8; + double fRec17[2]; + FAUSTFLOAT fbargraph9; + double fRec18[2]; + FAUSTFLOAT fbargraph10; + double fRec19[2]; + FAUSTFLOAT fbargraph11; + double fRec20[2]; + FAUSTFLOAT fbargraph12; + double fRec21[2]; + FAUSTFLOAT fbargraph13; + double fRec22[2]; + FAUSTFLOAT fbargraph14; + double fRec23[2]; + FAUSTFLOAT fbargraph15; + double fRec24[2]; + FAUSTFLOAT fbargraph16; + double fRec25[2]; + FAUSTFLOAT fbargraph17; + double fRec26[2]; + FAUSTFLOAT fbargraph18; + double fRec27[2]; + FAUSTFLOAT fbargraph19; + double fRec28[2]; + FAUSTFLOAT fbargraph20; + double fRec29[2]; + FAUSTFLOAT fbargraph21; + double fRec30[2]; + FAUSTFLOAT fbargraph22; + double fRec31[2]; + FAUSTFLOAT fbargraph23; + double fRec32[2]; + FAUSTFLOAT fbargraph24; + double fRec33[2]; + FAUSTFLOAT fbargraph25; + double fRec34[2]; + FAUSTFLOAT fbargraph26; + double fRec35[2]; + FAUSTFLOAT fbargraph27; + double fRec36[2]; + FAUSTFLOAT fbargraph28; + double fRec37[2]; + FAUSTFLOAT fbargraph29; + double fRec38[2]; + FAUSTFLOAT fbargraph30; + double fRec39[2]; + FAUSTFLOAT fbargraph31; + double fRec40[2]; + FAUSTFLOAT fbargraph32; + double fRec41[2]; + FAUSTFLOAT fbargraph33; + double fRec42[2]; + FAUSTFLOAT fbargraph34; + double fRec43[2]; + FAUSTFLOAT fbargraph35; + double fRec44[2]; + FAUSTFLOAT fbargraph36; + double fRec45[2]; + FAUSTFLOAT fbargraph37; + double fRec46[2]; + FAUSTFLOAT fbargraph38; + double fRec47[2]; + FAUSTFLOAT fbargraph39; + double fRec48[2]; + FAUSTFLOAT fbargraph40; + double fRec49[2]; + FAUSTFLOAT fbargraph41; + double fRec50[2]; + FAUSTFLOAT fbargraph42; + double fRec51[2]; + FAUSTFLOAT fbargraph43; + double fRec52[2]; + FAUSTFLOAT fbargraph44; + double fRec53[2]; + FAUSTFLOAT fbargraph45; + double fRec54[2]; + FAUSTFLOAT fbargraph46; + double fRec55[2]; + FAUSTFLOAT fbargraph47; + double fRec56[2]; + FAUSTFLOAT fbargraph48; + double fRec57[2]; + FAUSTFLOAT fbargraph49; + double fRec58[2]; + FAUSTFLOAT fbargraph50; + double fRec59[2]; + FAUSTFLOAT fbargraph51; + double fRec60[2]; + FAUSTFLOAT fbargraph52; + double fRec61[2]; + FAUSTFLOAT fbargraph53; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecLebedev501"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (3.4e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348beb40", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348c94b0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348c1d80", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348c45e0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph3, "osc", "/output1"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348c5c50", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph4, "osc", "/output2"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348c6c90", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph6, "osc", "/output3"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348ca980", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph7, "osc", "/output4"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348cc2f0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph8, "osc", "/output5"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348cdb70", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph9, "osc", "/output6"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348cf3f0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph10, "osc", "/output7"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348d1260", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph11, "osc", "/output8"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348d2ea0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph12, "osc", "/output9"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348d4aa0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph13, "osc", "/output10"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348d6760", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph14, "osc", "/output11"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348d8230", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph15, "osc", "/output12"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348d9e40", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph16, "osc", "/output13"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348db7f0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph17, "osc", "/output14"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348dd370", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph18, "osc", "/output15"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348def50", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph19, "osc", "/output16"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348e0c90", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph20, "osc", "/output17"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348e2950", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph21, "osc", "/output18"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348e4770", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph22, "osc", "/output19"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348e6b80", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph23, "osc", "/output20"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348e8c10", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph24, "osc", "/output21"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348eacb0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph25, "osc", "/output22"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348ecc70", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph26, "osc", "/output23"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348eec90", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph27, "osc", "/output24"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348f0c70", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph28, "osc", "/output25"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348f3010", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph29, "osc", "/output26"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348f52b0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph30, "osc", "/output27"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348f6f90", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph31, "osc", "/output28"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348f8890", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph32, "osc", "/output29"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348fa2f0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph33, "osc", "/output30"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa5348fbe80", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph34, "osc", "/output31"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a01c80", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph35, "osc", "/output32"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a03930", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph36, "osc", "/output33"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a05580", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph37, "osc", "/output34"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a071b0", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph38, "osc", "/output35"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a08eb0", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph39, "osc", "/output36"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a0ab10", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph40, "osc", "/output37"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a0c8d0", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph41, "osc", "/output38"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a0e960", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph42, "osc", "/output39"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a105a0", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph43, "osc", "/output40"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a122e0", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph44, "osc", "/output41"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa534a140e0", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph45, "osc", "/output42"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa531caef60", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph46, "osc", "/output43"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa531cb0d00", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph47, "osc", "/output44"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa531cb2c00", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph48, "osc", "/output45"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa531cb4a80", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph49, "osc", "/output46"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa531cb6ab0", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph50, "osc", "/output47"); + ui_interface->declare(&fbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa533dda8a0", &fbargraph50, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph51, "osc", "/output48"); + ui_interface->declare(&fbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa533ddc7c0", &fbargraph51, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph52, "osc", "/output49"); + ui_interface->declare(&fbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa533dde8f0", &fbargraph52, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph53, "osc", "/output50"); + ui_interface->declare(&fbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa533de0ae0", &fbargraph53, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = double(fcheckbox0); + double fSlow2 = double(fentry0); + double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); + double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow5 = (1 - fSlow1); + double fSlow6 = (1.0 / ((fConst2 / fSlow2) + 1)); + double fSlow7 = (fSlow1 * fSlow2); + double fSlow8 = (fConst3 / fSlow2); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev502.cpp b/source/HOAUGens/HOADecLebedev502.cpp new file mode 100644 index 0000000000..09045f08b7 --- /dev/null +++ b/source/HOAUGens/HOADecLebedev502.cpp @@ -0,0 +1,2140 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev502" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fslider0; + double fRec2[2]; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + FAUSTFLOAT fbargraph1; + double fConst4; + double fConst5; + double fRec8[2]; + double fRec9[2]; + double fRec7[2]; + double fRec6[2]; + FAUSTFLOAT fbargraph2; + double fRec12[2]; + double fRec13[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fbargraph3; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fbargraph4; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fbargraph5; + FAUSTFLOAT fslider1; + double fRec21[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph6; + double fRec22[2]; + FAUSTFLOAT fbargraph7; + double fRec26[2]; + double fRec25[2]; + double fRec24[2]; + FAUSTFLOAT fbargraph8; + double fRec29[2]; + double fRec30[2]; + double fRec28[2]; + double fRec27[2]; + FAUSTFLOAT fbargraph9; + double fRec23[2]; + FAUSTFLOAT fbargraph10; + double fRec31[2]; + FAUSTFLOAT fbargraph11; + double fRec32[2]; + FAUSTFLOAT fbargraph12; + double fRec33[2]; + FAUSTFLOAT fbargraph13; + double fRec34[2]; + FAUSTFLOAT fbargraph14; + double fRec38[2]; + double fRec39[2]; + double fRec37[2]; + double fRec36[2]; + FAUSTFLOAT fbargraph15; + double fRec35[2]; + FAUSTFLOAT fbargraph16; + double fRec40[2]; + FAUSTFLOAT fbargraph17; + double fRec41[2]; + FAUSTFLOAT fbargraph18; + double fRec42[2]; + FAUSTFLOAT fbargraph19; + double fRec43[2]; + FAUSTFLOAT fbargraph20; + double fRec44[2]; + FAUSTFLOAT fbargraph21; + double fRec45[2]; + FAUSTFLOAT fbargraph22; + double fRec46[2]; + FAUSTFLOAT fbargraph23; + double fRec47[2]; + FAUSTFLOAT fbargraph24; + double fRec48[2]; + FAUSTFLOAT fbargraph25; + double fRec49[2]; + FAUSTFLOAT fbargraph26; + double fRec50[2]; + FAUSTFLOAT fbargraph27; + double fRec51[2]; + FAUSTFLOAT fbargraph28; + double fRec52[2]; + FAUSTFLOAT fbargraph29; + double fRec53[2]; + FAUSTFLOAT fbargraph30; + double fRec54[2]; + FAUSTFLOAT fbargraph31; + double fRec55[2]; + FAUSTFLOAT fbargraph32; + double fRec56[2]; + FAUSTFLOAT fbargraph33; + double fRec57[2]; + FAUSTFLOAT fbargraph34; + double fRec58[2]; + FAUSTFLOAT fbargraph35; + double fRec59[2]; + FAUSTFLOAT fbargraph36; + double fRec60[2]; + FAUSTFLOAT fbargraph37; + double fRec61[2]; + FAUSTFLOAT fbargraph38; + double fRec62[2]; + FAUSTFLOAT fbargraph39; + double fRec63[2]; + FAUSTFLOAT fbargraph40; + double fRec64[2]; + FAUSTFLOAT fbargraph41; + double fRec65[2]; + FAUSTFLOAT fbargraph42; + double fRec66[2]; + FAUSTFLOAT fbargraph43; + double fRec67[2]; + FAUSTFLOAT fbargraph44; + double fRec68[2]; + FAUSTFLOAT fbargraph45; + double fRec69[2]; + FAUSTFLOAT fbargraph46; + double fRec70[2]; + FAUSTFLOAT fbargraph47; + double fRec71[2]; + FAUSTFLOAT fbargraph48; + double fRec72[2]; + FAUSTFLOAT fbargraph49; + double fRec73[2]; + FAUSTFLOAT fbargraph50; + double fRec74[2]; + FAUSTFLOAT fbargraph51; + double fRec75[2]; + FAUSTFLOAT fbargraph52; + double fRec76[2]; + FAUSTFLOAT fbargraph53; + double fRec77[2]; + FAUSTFLOAT fbargraph54; + double fRec78[2]; + FAUSTFLOAT fbargraph55; + double fRec79[2]; + FAUSTFLOAT fbargraph56; + double fRec80[2]; + FAUSTFLOAT fbargraph57; + double fRec81[2]; + FAUSTFLOAT fbargraph58; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecLebedev502"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (3.4e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + } + virtual void instanceResetUserInterface() { + fentry0 = 1.07; + fcheckbox0 = 0.0; + fslider0 = 0.0; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec81[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab771c720", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7732c50", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab772c620", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab771fa50", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7735bc0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7742940", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab77238b0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7726a10", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7729bb0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider1, "2", ""); + ui_interface->declare(&fslider1, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph6, "osc", "/output1"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab772e9d0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph7, "osc", "/output2"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7730420", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph10, "osc", "/output3"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7737270", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph11, "osc", "/output4"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7738ef0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph12, "osc", "/output5"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab773ae30", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph13, "osc", "/output6"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab773c4f0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph14, "osc", "/output7"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab773eab0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph16, "osc", "/output8"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7743ed0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph17, "osc", "/output9"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7746350", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph18, "osc", "/output10"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7748470", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph19, "osc", "/output11"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab774a800", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph20, "osc", "/output12"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab774c880", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph21, "osc", "/output13"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab774e7f0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph22, "osc", "/output14"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7750850", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph23, "osc", "/output15"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51b99b0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph24, "osc", "/output16"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51bb800", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph25, "osc", "/output17"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51bdae0", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph26, "osc", "/output18"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51bfca0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph27, "osc", "/output19"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51c2da0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph28, "osc", "/output20"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51c5770", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph29, "osc", "/output21"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51c7b00", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph30, "osc", "/output22"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51ca1a0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph31, "osc", "/output23"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51cc900", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph32, "osc", "/output24"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51cef00", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph33, "osc", "/output25"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51d12b0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph34, "osc", "/output26"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51d3b70", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph35, "osc", "/output27"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51d6590", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph36, "osc", "/output28"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51d85e0", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph37, "osc", "/output29"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51da9f0", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph38, "osc", "/output30"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51dce20", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph39, "osc", "/output31"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51dfb30", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph40, "osc", "/output32"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51e2430", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph41, "osc", "/output33"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51e4a00", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph42, "osc", "/output34"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51e7020", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph43, "osc", "/output35"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51e9730", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph44, "osc", "/output36"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51ebdc0", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph45, "osc", "/output37"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51ee670", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph46, "osc", "/output38"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51f1240", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph47, "osc", "/output39"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51f31d0", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph48, "osc", "/output40"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51f5150", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph49, "osc", "/output41"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51f7650", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph50, "osc", "/output42"); + ui_interface->declare(&fbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51f9a40", &fbargraph50, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph51, "osc", "/output43"); + ui_interface->declare(&fbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab51fbbd0", &fbargraph51, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph52, "osc", "/output44"); + ui_interface->declare(&fbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7801d20", &fbargraph52, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph53, "osc", "/output45"); + ui_interface->declare(&fbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7804060", &fbargraph53, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph54, "osc", "/output46"); + ui_interface->declare(&fbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7806550", &fbargraph54, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph55, "osc", "/output47"); + ui_interface->declare(&fbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab7808740", &fbargraph55, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph56, "osc", "/output48"); + ui_interface->declare(&fbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab780ac40", &fbargraph56, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph57, "osc", "/output49"); + ui_interface->declare(&fbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab780d1b0", &fbargraph57, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph58, "osc", "/output50"); + ui_interface->declare(&fbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ab780f340", &fbargraph58, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fentry0); + double fSlow1 = double(fcheckbox0); + double fSlow2 = (1 - ((1 - fSlow0) * fSlow1)); + double fSlow3 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow4 = (fConst2 / fSlow0); + double fSlow5 = (1.0 / (fSlow4 + 1)); + double fSlow6 = (fSlow1 * fSlow0); + double fSlow7 = (fConst3 / fSlow0); + double fSlow8 = (1 - fSlow1); + double fSlow9 = faustpower<2>(fSlow4); + double fSlow10 = (1.0 / (((3 * fSlow9) + (fConst4 / fSlow0)) + 1)); + double fSlow11 = (12 * fSlow9); + double fSlow12 = (fSlow11 + (fConst5 / fSlow0)); + double fSlow13 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev503.cpp b/source/HOAUGens/HOADecLebedev503.cpp new file mode 100644 index 0000000000..6a3eb2290e --- /dev/null +++ b/source/HOAUGens/HOADecLebedev503.cpp @@ -0,0 +1,2500 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev503" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fRec7[2]; + double fRec8[2]; + double fRec6[2]; + double fConst6; + double fRec9[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fRec13[2]; + double fRec14[2]; + double fRec12[2]; + double fRec15[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fbargraph2; + double fRec19[2]; + double fRec20[2]; + double fRec18[2]; + double fRec21[2]; + double fRec17[2]; + double fRec16[2]; + FAUSTFLOAT fbargraph3; + double fRec25[2]; + double fRec26[2]; + double fRec24[2]; + double fRec27[2]; + double fRec23[2]; + double fRec22[2]; + FAUSTFLOAT fbargraph4; + double fConst7; + double fConst8; + double fRec30[2]; + double fRec31[2]; + double fRec29[2]; + double fRec28[2]; + FAUSTFLOAT fbargraph5; + double fRec34[2]; + double fRec35[2]; + double fRec33[2]; + double fRec32[2]; + FAUSTFLOAT fbargraph6; + double fRec38[2]; + double fRec39[2]; + double fRec37[2]; + double fRec36[2]; + FAUSTFLOAT fbargraph7; + double fConst9; + double fRec42[2]; + double fRec41[2]; + double fRec40[2]; + FAUSTFLOAT fbargraph8; + double fRec45[2]; + double fRec44[2]; + double fRec43[2]; + FAUSTFLOAT fbargraph9; + double fRec0[2]; + FAUSTFLOAT fbargraph10; + double fRec46[2]; + FAUSTFLOAT fbargraph11; + double fRec50[2]; + double fRec51[2]; + double fRec49[2]; + double fRec48[2]; + FAUSTFLOAT fbargraph12; + double fRec54[2]; + double fRec53[2]; + double fRec52[2]; + FAUSTFLOAT fbargraph13; + double fRec58[2]; + double fRec59[2]; + double fRec57[2]; + double fRec60[2]; + double fRec56[2]; + double fRec55[2]; + FAUSTFLOAT fbargraph14; + double fRec64[2]; + double fRec65[2]; + double fRec63[2]; + double fRec66[2]; + double fRec62[2]; + double fRec61[2]; + FAUSTFLOAT fbargraph15; + double fRec47[2]; + FAUSTFLOAT fbargraph16; + double fRec67[2]; + FAUSTFLOAT fbargraph17; + double fRec68[2]; + FAUSTFLOAT fbargraph18; + double fRec69[2]; + FAUSTFLOAT fbargraph19; + double fRec70[2]; + FAUSTFLOAT fbargraph20; + double fRec75[2]; + double fRec76[2]; + double fRec74[2]; + double fRec77[2]; + double fRec73[2]; + double fRec72[2]; + FAUSTFLOAT fbargraph21; + double fRec80[2]; + double fRec81[2]; + double fRec79[2]; + double fRec78[2]; + FAUSTFLOAT fbargraph22; + double fRec71[2]; + FAUSTFLOAT fbargraph23; + double fRec82[2]; + FAUSTFLOAT fbargraph24; + double fRec83[2]; + FAUSTFLOAT fbargraph25; + double fRec84[2]; + FAUSTFLOAT fbargraph26; + double fRec85[2]; + FAUSTFLOAT fbargraph27; + double fRec86[2]; + FAUSTFLOAT fbargraph28; + double fRec87[2]; + FAUSTFLOAT fbargraph29; + double fRec88[2]; + FAUSTFLOAT fbargraph30; + double fRec89[2]; + FAUSTFLOAT fbargraph31; + double fRec90[2]; + FAUSTFLOAT fbargraph32; + double fRec91[2]; + FAUSTFLOAT fbargraph33; + double fRec92[2]; + FAUSTFLOAT fbargraph34; + double fRec93[2]; + FAUSTFLOAT fbargraph35; + double fRec94[2]; + FAUSTFLOAT fbargraph36; + double fRec95[2]; + FAUSTFLOAT fbargraph37; + double fRec96[2]; + FAUSTFLOAT fbargraph38; + double fRec97[2]; + FAUSTFLOAT fbargraph39; + double fRec98[2]; + FAUSTFLOAT fbargraph40; + double fRec99[2]; + FAUSTFLOAT fbargraph41; + double fRec100[2]; + FAUSTFLOAT fbargraph42; + double fRec101[2]; + FAUSTFLOAT fbargraph43; + double fRec102[2]; + FAUSTFLOAT fbargraph44; + double fRec103[2]; + FAUSTFLOAT fbargraph45; + double fRec104[2]; + FAUSTFLOAT fbargraph46; + double fRec105[2]; + FAUSTFLOAT fbargraph47; + double fRec106[2]; + FAUSTFLOAT fbargraph48; + double fRec107[2]; + FAUSTFLOAT fbargraph49; + double fRec108[2]; + FAUSTFLOAT fbargraph50; + double fRec109[2]; + FAUSTFLOAT fbargraph51; + double fRec110[2]; + FAUSTFLOAT fbargraph52; + double fRec111[2]; + FAUSTFLOAT fbargraph53; + double fRec112[2]; + FAUSTFLOAT fbargraph54; + double fRec113[2]; + FAUSTFLOAT fbargraph55; + double fRec114[2]; + FAUSTFLOAT fbargraph56; + double fRec115[2]; + FAUSTFLOAT fbargraph57; + double fRec116[2]; + FAUSTFLOAT fbargraph58; + double fRec117[2]; + FAUSTFLOAT fbargraph59; + double fRec118[2]; + FAUSTFLOAT fbargraph60; + double fRec119[2]; + FAUSTFLOAT fbargraph61; + double fRec120[2]; + FAUSTFLOAT fbargraph62; + double fRec121[2]; + FAUSTFLOAT fbargraph63; + double fRec122[2]; + FAUSTFLOAT fbargraph64; + double fRec123[2]; + FAUSTFLOAT fbargraph65; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("name", "HOADecLebedev503"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (394.7715102864353 / fConst0); + fConst3 = (625.2284897135664 / fConst0); + fConst4 = (1.7e+02 / fConst0); + fConst5 = (1250.4569794271329 / fConst0); + fConst6 = (789.5430205728705 / fConst0); + fConst7 = (5.1e+02 / fConst0); + fConst8 = (1.02e+03 / fConst0); + fConst9 = (3.4e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec81[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec82[i] = 0; + for (int i=0; i<2; i++) fRec83[i] = 0; + for (int i=0; i<2; i++) fRec84[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; + for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec87[i] = 0; + for (int i=0; i<2; i++) fRec88[i] = 0; + for (int i=0; i<2; i++) fRec89[i] = 0; + for (int i=0; i<2; i++) fRec90[i] = 0; + for (int i=0; i<2; i++) fRec91[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec93[i] = 0; + for (int i=0; i<2; i++) fRec94[i] = 0; + for (int i=0; i<2; i++) fRec95[i] = 0; + for (int i=0; i<2; i++) fRec96[i] = 0; + for (int i=0; i<2; i++) fRec97[i] = 0; + for (int i=0; i<2; i++) fRec98[i] = 0; + for (int i=0; i<2; i++) fRec99[i] = 0; + for (int i=0; i<2; i++) fRec100[i] = 0; + for (int i=0; i<2; i++) fRec101[i] = 0; + for (int i=0; i<2; i++) fRec102[i] = 0; + for (int i=0; i<2; i++) fRec103[i] = 0; + for (int i=0; i<2; i++) fRec104[i] = 0; + for (int i=0; i<2; i++) fRec105[i] = 0; + for (int i=0; i<2; i++) fRec106[i] = 0; + for (int i=0; i<2; i++) fRec107[i] = 0; + for (int i=0; i<2; i++) fRec108[i] = 0; + for (int i=0; i<2; i++) fRec109[i] = 0; + for (int i=0; i<2; i++) fRec110[i] = 0; + for (int i=0; i<2; i++) fRec111[i] = 0; + for (int i=0; i<2; i++) fRec112[i] = 0; + for (int i=0; i<2; i++) fRec113[i] = 0; + for (int i=0; i<2; i++) fRec114[i] = 0; + for (int i=0; i<2; i++) fRec115[i] = 0; + for (int i=0; i<2; i++) fRec116[i] = 0; + for (int i=0; i<2; i++) fRec117[i] = 0; + for (int i=0; i<2; i++) fRec118[i] = 0; + for (int i=0; i<2; i++) fRec119[i] = 0; + for (int i=0; i<2; i++) fRec120[i] = 0; + for (int i=0; i<2; i++) fRec121[i] = 0; + for (int i=0; i<2; i++) fRec122[i] = 0; + for (int i=0; i<2; i++) fRec123[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee3b5c0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee646d0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee587b0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee5b070", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee61ea0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee7e610", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee55ab0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee52bb0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee4fb20", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee6bf40", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee7b5f0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee683f0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee4be80", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee484a0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee449c0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee40e30", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph10, "osc", "/output1"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee5ceb0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph11, "osc", "/output2"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee5eeb0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph16, "osc", "/output3"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee6de20", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph17, "osc", "/output4"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee701e0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph18, "osc", "/output5"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee729a0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph19, "osc", "/output6"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee74660", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph20, "osc", "/output7"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee77800", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph23, "osc", "/output8"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee816e0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph24, "osc", "/output9"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee84420", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph25, "osc", "/output10"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee87610", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph26, "osc", "/output11"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee8a130", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph27, "osc", "/output12"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee8cad0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph28, "osc", "/output13"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee8f180", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph29, "osc", "/output14"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee91830", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph30, "osc", "/output15"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee93880", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph31, "osc", "/output16"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee964d0", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph32, "osc", "/output17"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee98d30", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph33, "osc", "/output18"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ee9b7e0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph34, "osc", "/output19"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eea0080", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph35, "osc", "/output20"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eea3650", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph36, "osc", "/output21"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eea6b30", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph37, "osc", "/output22"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eea9c30", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph38, "osc", "/output23"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eeacb10", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph39, "osc", "/output24"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eeaf7d0", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph40, "osc", "/output25"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eeb2590", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph41, "osc", "/output26"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eeb5310", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph42, "osc", "/output27"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eeb9290", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph43, "osc", "/output28"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eebbbd0", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph44, "osc", "/output29"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eebed80", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph45, "osc", "/output30"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eec2240", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph46, "osc", "/output31"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eec6470", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph47, "osc", "/output32"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eec9f80", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph48, "osc", "/output33"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eecd700", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph49, "osc", "/output34"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eed0b80", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph50, "osc", "/output35"); + ui_interface->declare(&fbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eed4220", &fbargraph50, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph51, "osc", "/output36"); + ui_interface->declare(&fbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec4d980", &fbargraph51, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph52, "osc", "/output37"); + ui_interface->declare(&fbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec512c0", &fbargraph52, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph53, "osc", "/output38"); + ui_interface->declare(&fbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec54f30", &fbargraph53, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph54, "osc", "/output39"); + ui_interface->declare(&fbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec57a90", &fbargraph54, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph55, "osc", "/output40"); + ui_interface->declare(&fbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec5a380", &fbargraph55, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph56, "osc", "/output41"); + ui_interface->declare(&fbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec5cc40", &fbargraph56, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph57, "osc", "/output42"); + ui_interface->declare(&fbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec5f780", &fbargraph57, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph58, "osc", "/output43"); + ui_interface->declare(&fbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec62100", &fbargraph58, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph59, "osc", "/output44"); + ui_interface->declare(&fbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec64e10", &fbargraph59, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph60, "osc", "/output45"); + ui_interface->declare(&fbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec67930", &fbargraph60, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph61, "osc", "/output46"); + ui_interface->declare(&fbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec6a4d0", &fbargraph61, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph62, "osc", "/output47"); + ui_interface->declare(&fbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec6cf00", &fbargraph62, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph63, "osc", "/output48"); + ui_interface->declare(&fbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec6fa70", &fbargraph63, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph64, "osc", "/output49"); + ui_interface->declare(&fbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56ec729d0", &fbargraph64, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph65, "osc", "/output50"); + ui_interface->declare(&fbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff56eed7470", &fbargraph65, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = double(fcheckbox0); + double fSlow2 = double(fentry0); + double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); + double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow5 = (1.0 / ((fConst2 / fSlow2) + 1)); + double fSlow6 = (fConst4 / fSlow2); + double fSlow7 = faustpower<2>(fSlow6); + double fSlow8 = (1.0 / (((fConst3 / fSlow2) + (6.45943269348338 * fSlow7)) + 1)); + double fSlow9 = (25.83773077393352 * fSlow7); + double fSlow10 = (fSlow9 + (fConst5 / fSlow2)); + double fSlow11 = (fSlow1 * fSlow2); + double fSlow12 = (fConst6 / fSlow2); + double fSlow13 = (1 - fSlow1); + double fSlow14 = (1.0 / (((3 * fSlow7) + (fConst7 / fSlow2)) + 1)); + double fSlow15 = (12 * fSlow7); + double fSlow16 = (fSlow15 + (fConst8 / fSlow2)); + double fSlow17 = (1.0 / (fSlow6 + 1)); + double fSlow18 = (fConst9 / fSlow2); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev504.cpp b/source/HOAUGens/HOADecLebedev504.cpp new file mode 100644 index 0000000000..94f48ef485 --- /dev/null +++ b/source/HOAUGens/HOADecLebedev504.cpp @@ -0,0 +1,2988 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev504" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fConst4; + double fRec6[2]; + double fRec7[2]; + double fConst5; + double fConst6; + double fRec9[2]; + double fRec10[2]; + double fRec8[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fRec13[2]; + double fRec14[2]; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec12[2]; + double fRec11[2]; + FAUSTFLOAT fbargraph2; + double fRec20[2]; + double fRec21[2]; + double fRec23[2]; + double fRec24[2]; + double fRec22[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fbargraph3; + double fRec27[2]; + double fRec28[2]; + double fRec30[2]; + double fRec31[2]; + double fRec29[2]; + double fRec26[2]; + double fRec25[2]; + FAUSTFLOAT fbargraph4; + double fRec35[2]; + double fRec36[2]; + double fRec34[2]; + double fRec37[2]; + double fRec38[2]; + double fRec33[2]; + double fRec32[2]; + FAUSTFLOAT fbargraph5; + double fConst7; + double fConst8; + double fConst9; + double fRec42[2]; + double fRec43[2]; + double fRec41[2]; + double fConst10; + double fRec44[2]; + double fRec40[2]; + double fRec39[2]; + FAUSTFLOAT fbargraph6; + double fRec48[2]; + double fRec49[2]; + double fRec47[2]; + double fRec50[2]; + double fRec46[2]; + double fRec45[2]; + FAUSTFLOAT fbargraph7; + double fRec54[2]; + double fRec55[2]; + double fRec53[2]; + double fRec56[2]; + double fRec52[2]; + double fRec51[2]; + FAUSTFLOAT fbargraph8; + double fRec60[2]; + double fRec61[2]; + double fRec59[2]; + double fRec62[2]; + double fRec58[2]; + double fRec57[2]; + FAUSTFLOAT fbargraph9; + double fConst11; + double fConst12; + double fRec65[2]; + double fRec66[2]; + double fRec64[2]; + double fRec63[2]; + FAUSTFLOAT fbargraph10; + double fRec69[2]; + double fRec70[2]; + double fRec68[2]; + double fRec67[2]; + FAUSTFLOAT fbargraph11; + double fRec73[2]; + double fRec74[2]; + double fRec72[2]; + double fRec71[2]; + FAUSTFLOAT fbargraph12; + double fConst13; + double fRec77[2]; + double fRec76[2]; + double fRec75[2]; + FAUSTFLOAT fbargraph13; + double fRec80[2]; + double fRec79[2]; + double fRec78[2]; + FAUSTFLOAT fbargraph14; + double fRec0[2]; + FAUSTFLOAT fbargraph15; + double fRec81[2]; + FAUSTFLOAT fbargraph16; + double fRec85[2]; + double fRec86[2]; + double fRec84[2]; + double fRec83[2]; + FAUSTFLOAT fbargraph17; + double fRec89[2]; + double fRec88[2]; + double fRec87[2]; + FAUSTFLOAT fbargraph18; + double fRec92[2]; + double fRec93[2]; + double fRec95[2]; + double fRec96[2]; + double fRec94[2]; + double fRec91[2]; + double fRec90[2]; + FAUSTFLOAT fbargraph19; + double fRec100[2]; + double fRec101[2]; + double fRec99[2]; + double fRec102[2]; + double fRec98[2]; + double fRec97[2]; + FAUSTFLOAT fbargraph20; + double fRec106[2]; + double fRec107[2]; + double fRec105[2]; + double fRec108[2]; + double fRec104[2]; + double fRec103[2]; + FAUSTFLOAT fbargraph21; + double fRec111[2]; + double fRec112[2]; + double fRec114[2]; + double fRec115[2]; + double fRec113[2]; + double fRec110[2]; + double fRec109[2]; + FAUSTFLOAT fbargraph22; + double fRec82[2]; + FAUSTFLOAT fbargraph23; + double fRec116[2]; + FAUSTFLOAT fbargraph24; + double fRec117[2]; + FAUSTFLOAT fbargraph25; + double fRec118[2]; + FAUSTFLOAT fbargraph26; + double fRec119[2]; + FAUSTFLOAT fbargraph27; + double fRec123[2]; + double fRec124[2]; + double fRec122[2]; + double fRec121[2]; + FAUSTFLOAT fbargraph28; + double fRec128[2]; + double fRec129[2]; + double fRec127[2]; + double fRec130[2]; + double fRec126[2]; + double fRec125[2]; + FAUSTFLOAT fbargraph29; + double fRec133[2]; + double fRec134[2]; + double fRec136[2]; + double fRec137[2]; + double fRec135[2]; + double fRec132[2]; + double fRec131[2]; + FAUSTFLOAT fbargraph30; + double fRec140[2]; + double fRec141[2]; + double fRec143[2]; + double fRec144[2]; + double fRec142[2]; + double fRec139[2]; + double fRec138[2]; + FAUSTFLOAT fbargraph31; + double fRec120[2]; + FAUSTFLOAT fbargraph32; + double fRec145[2]; + FAUSTFLOAT fbargraph33; + double fRec146[2]; + FAUSTFLOAT fbargraph34; + double fRec147[2]; + FAUSTFLOAT fbargraph35; + double fRec148[2]; + FAUSTFLOAT fbargraph36; + double fRec149[2]; + FAUSTFLOAT fbargraph37; + double fRec150[2]; + FAUSTFLOAT fbargraph38; + double fRec151[2]; + FAUSTFLOAT fbargraph39; + double fRec152[2]; + FAUSTFLOAT fbargraph40; + double fRec153[2]; + FAUSTFLOAT fbargraph41; + double fRec154[2]; + FAUSTFLOAT fbargraph42; + double fRec155[2]; + FAUSTFLOAT fbargraph43; + double fRec156[2]; + FAUSTFLOAT fbargraph44; + double fRec157[2]; + FAUSTFLOAT fbargraph45; + double fRec158[2]; + FAUSTFLOAT fbargraph46; + double fRec159[2]; + FAUSTFLOAT fbargraph47; + double fRec160[2]; + FAUSTFLOAT fbargraph48; + double fRec161[2]; + FAUSTFLOAT fbargraph49; + double fRec162[2]; + FAUSTFLOAT fbargraph50; + double fRec163[2]; + FAUSTFLOAT fbargraph51; + double fRec164[2]; + FAUSTFLOAT fbargraph52; + double fRec165[2]; + FAUSTFLOAT fbargraph53; + double fRec166[2]; + FAUSTFLOAT fbargraph54; + double fRec167[2]; + FAUSTFLOAT fbargraph55; + double fRec168[2]; + FAUSTFLOAT fbargraph56; + double fRec169[2]; + FAUSTFLOAT fbargraph57; + double fRec170[2]; + FAUSTFLOAT fbargraph58; + double fRec171[2]; + FAUSTFLOAT fbargraph59; + double fRec172[2]; + FAUSTFLOAT fbargraph60; + double fRec173[2]; + FAUSTFLOAT fbargraph61; + double fRec174[2]; + FAUSTFLOAT fbargraph62; + double fRec175[2]; + FAUSTFLOAT fbargraph63; + double fRec176[2]; + FAUSTFLOAT fbargraph64; + double fRec177[2]; + FAUSTFLOAT fbargraph65; + double fRec178[2]; + FAUSTFLOAT fbargraph66; + double fRec179[2]; + FAUSTFLOAT fbargraph67; + double fRec180[2]; + FAUSTFLOAT fbargraph68; + double fRec181[2]; + FAUSTFLOAT fbargraph69; + double fRec182[2]; + FAUSTFLOAT fbargraph70; + double fRec183[2]; + FAUSTFLOAT fbargraph71; + double fRec184[2]; + FAUSTFLOAT fbargraph72; + double fRec185[2]; + FAUSTFLOAT fbargraph73; + double fRec186[2]; + FAUSTFLOAT fbargraph74; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecLebedev504"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 25; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (984.7116049589241 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (1969.4232099178482 / fConst0); + fConst5 = (715.2883950410759 / fConst0); + fConst6 = (1430.5767900821518 / fConst0); + fConst7 = (394.7715102864353 / fConst0); + fConst8 = (625.2284897135664 / fConst0); + fConst9 = (1250.4569794271329 / fConst0); + fConst10 = (789.5430205728705 / fConst0); + fConst11 = (5.1e+02 / fConst0); + fConst12 = (1.02e+03 / fConst0); + fConst13 = (3.4e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec81[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; + for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec84[i] = 0; + for (int i=0; i<2; i++) fRec83[i] = 0; + for (int i=0; i<2; i++) fRec89[i] = 0; + for (int i=0; i<2; i++) fRec88[i] = 0; + for (int i=0; i<2; i++) fRec87[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec93[i] = 0; + for (int i=0; i<2; i++) fRec95[i] = 0; + for (int i=0; i<2; i++) fRec96[i] = 0; + for (int i=0; i<2; i++) fRec94[i] = 0; + for (int i=0; i<2; i++) fRec91[i] = 0; + for (int i=0; i<2; i++) fRec90[i] = 0; + for (int i=0; i<2; i++) fRec100[i] = 0; + for (int i=0; i<2; i++) fRec101[i] = 0; + for (int i=0; i<2; i++) fRec99[i] = 0; + for (int i=0; i<2; i++) fRec102[i] = 0; + for (int i=0; i<2; i++) fRec98[i] = 0; + for (int i=0; i<2; i++) fRec97[i] = 0; + for (int i=0; i<2; i++) fRec106[i] = 0; + for (int i=0; i<2; i++) fRec107[i] = 0; + for (int i=0; i<2; i++) fRec105[i] = 0; + for (int i=0; i<2; i++) fRec108[i] = 0; + for (int i=0; i<2; i++) fRec104[i] = 0; + for (int i=0; i<2; i++) fRec103[i] = 0; + for (int i=0; i<2; i++) fRec111[i] = 0; + for (int i=0; i<2; i++) fRec112[i] = 0; + for (int i=0; i<2; i++) fRec114[i] = 0; + for (int i=0; i<2; i++) fRec115[i] = 0; + for (int i=0; i<2; i++) fRec113[i] = 0; + for (int i=0; i<2; i++) fRec110[i] = 0; + for (int i=0; i<2; i++) fRec109[i] = 0; + for (int i=0; i<2; i++) fRec82[i] = 0; + for (int i=0; i<2; i++) fRec116[i] = 0; + for (int i=0; i<2; i++) fRec117[i] = 0; + for (int i=0; i<2; i++) fRec118[i] = 0; + for (int i=0; i<2; i++) fRec119[i] = 0; + for (int i=0; i<2; i++) fRec123[i] = 0; + for (int i=0; i<2; i++) fRec124[i] = 0; + for (int i=0; i<2; i++) fRec122[i] = 0; + for (int i=0; i<2; i++) fRec121[i] = 0; + for (int i=0; i<2; i++) fRec128[i] = 0; + for (int i=0; i<2; i++) fRec129[i] = 0; + for (int i=0; i<2; i++) fRec127[i] = 0; + for (int i=0; i<2; i++) fRec130[i] = 0; + for (int i=0; i<2; i++) fRec126[i] = 0; + for (int i=0; i<2; i++) fRec125[i] = 0; + for (int i=0; i<2; i++) fRec133[i] = 0; + for (int i=0; i<2; i++) fRec134[i] = 0; + for (int i=0; i<2; i++) fRec136[i] = 0; + for (int i=0; i<2; i++) fRec137[i] = 0; + for (int i=0; i<2; i++) fRec135[i] = 0; + for (int i=0; i<2; i++) fRec132[i] = 0; + for (int i=0; i<2; i++) fRec131[i] = 0; + for (int i=0; i<2; i++) fRec140[i] = 0; + for (int i=0; i<2; i++) fRec141[i] = 0; + for (int i=0; i<2; i++) fRec143[i] = 0; + for (int i=0; i<2; i++) fRec144[i] = 0; + for (int i=0; i<2; i++) fRec142[i] = 0; + for (int i=0; i<2; i++) fRec139[i] = 0; + for (int i=0; i<2; i++) fRec138[i] = 0; + for (int i=0; i<2; i++) fRec120[i] = 0; + for (int i=0; i<2; i++) fRec145[i] = 0; + for (int i=0; i<2; i++) fRec146[i] = 0; + for (int i=0; i<2; i++) fRec147[i] = 0; + for (int i=0; i<2; i++) fRec148[i] = 0; + for (int i=0; i<2; i++) fRec149[i] = 0; + for (int i=0; i<2; i++) fRec150[i] = 0; + for (int i=0; i<2; i++) fRec151[i] = 0; + for (int i=0; i<2; i++) fRec152[i] = 0; + for (int i=0; i<2; i++) fRec153[i] = 0; + for (int i=0; i<2; i++) fRec154[i] = 0; + for (int i=0; i<2; i++) fRec155[i] = 0; + for (int i=0; i<2; i++) fRec156[i] = 0; + for (int i=0; i<2; i++) fRec157[i] = 0; + for (int i=0; i<2; i++) fRec158[i] = 0; + for (int i=0; i<2; i++) fRec159[i] = 0; + for (int i=0; i<2; i++) fRec160[i] = 0; + for (int i=0; i<2; i++) fRec161[i] = 0; + for (int i=0; i<2; i++) fRec162[i] = 0; + for (int i=0; i<2; i++) fRec163[i] = 0; + for (int i=0; i<2; i++) fRec164[i] = 0; + for (int i=0; i<2; i++) fRec165[i] = 0; + for (int i=0; i<2; i++) fRec166[i] = 0; + for (int i=0; i<2; i++) fRec167[i] = 0; + for (int i=0; i<2; i++) fRec168[i] = 0; + for (int i=0; i<2; i++) fRec169[i] = 0; + for (int i=0; i<2; i++) fRec170[i] = 0; + for (int i=0; i<2; i++) fRec171[i] = 0; + for (int i=0; i<2; i++) fRec172[i] = 0; + for (int i=0; i<2; i++) fRec173[i] = 0; + for (int i=0; i<2; i++) fRec174[i] = 0; + for (int i=0; i<2; i++) fRec175[i] = 0; + for (int i=0; i<2; i++) fRec176[i] = 0; + for (int i=0; i<2; i++) fRec177[i] = 0; + for (int i=0; i<2; i++) fRec178[i] = 0; + for (int i=0; i<2; i++) fRec179[i] = 0; + for (int i=0; i<2; i++) fRec180[i] = 0; + for (int i=0; i<2; i++) fRec181[i] = 0; + for (int i=0; i<2; i++) fRec182[i] = 0; + for (int i=0; i<2; i++) fRec183[i] = 0; + for (int i=0; i<2; i++) fRec184[i] = 0; + for (int i=0; i<2; i++) fRec185[i] = 0; + for (int i=0; i<2; i++) fRec186[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc403b0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc80ea0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc73cd0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc76590", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc7e2d0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bca4160", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc70fc0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc6e130", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc6b130", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc89740", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bca7f70", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc8d4b0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc674a0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc63ac0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc5ffa0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc5c420", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc85a00", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcb1980", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc91a90", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcac4d0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc57320", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc532a0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc4eff0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc4ad70", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc46a40", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph15, "osc", "/output1"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc78ac0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph16, "osc", "/output2"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc7b2f0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph23, "osc", "/output3"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc93280", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph24, "osc", "/output4"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc95ed0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph25, "osc", "/output5"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc993e0", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph26, "osc", "/output6"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc9b7c0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph27, "osc", "/output7"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bc9f5c0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph32, "osc", "/output8"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcb3040", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph33, "osc", "/output9"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcb7140", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph34, "osc", "/output10"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcbb5b0", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph35, "osc", "/output11"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcbef40", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph36, "osc", "/output12"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcc1e60", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph37, "osc", "/output13"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcc5330", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph38, "osc", "/output14"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcc8910", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph39, "osc", "/output15"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bccb020", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph40, "osc", "/output16"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcce350", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph41, "osc", "/output17"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcd1670", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph42, "osc", "/output18"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcd4d80", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph43, "osc", "/output19"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcdaf00", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph44, "osc", "/output20"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcdf960", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph45, "osc", "/output21"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bce43b0", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph46, "osc", "/output22"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bce8500", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph47, "osc", "/output23"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcebdf0", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph48, "osc", "/output24"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcef420", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph49, "osc", "/output25"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcf32d0", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph50, "osc", "/output26"); + ui_interface->declare(&fbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bcf6b60", &fbargraph50, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph51, "osc", "/output27"); + ui_interface->declare(&fbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd00420", &fbargraph51, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph52, "osc", "/output28"); + ui_interface->declare(&fbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd03f70", &fbargraph52, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph53, "osc", "/output29"); + ui_interface->declare(&fbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd08790", &fbargraph53, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph54, "osc", "/output30"); + ui_interface->declare(&fbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd0d060", &fbargraph54, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph55, "osc", "/output31"); + ui_interface->declare(&fbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd12f10", &fbargraph55, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph56, "osc", "/output32"); + ui_interface->declare(&fbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd18560", &fbargraph56, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph57, "osc", "/output33"); + ui_interface->declare(&fbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd1d590", &fbargraph57, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph58, "osc", "/output34"); + ui_interface->declare(&fbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd21950", &fbargraph58, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph59, "osc", "/output35"); + ui_interface->declare(&fbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd264c0", &fbargraph59, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph60, "osc", "/output36"); + ui_interface->declare(&fbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd2b710", &fbargraph60, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph61, "osc", "/output37"); + ui_interface->declare(&fbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd30c80", &fbargraph61, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph62, "osc", "/output38"); + ui_interface->declare(&fbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd36120", &fbargraph62, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph63, "osc", "/output39"); + ui_interface->declare(&fbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd39590", &fbargraph63, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph64, "osc", "/output40"); + ui_interface->declare(&fbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd3c560", &fbargraph64, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph65, "osc", "/output41"); + ui_interface->declare(&fbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd3ff70", &fbargraph65, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph66, "osc", "/output42"); + ui_interface->declare(&fbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd43ac0", &fbargraph66, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph67, "osc", "/output43"); + ui_interface->declare(&fbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd470b0", &fbargraph67, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph68, "osc", "/output44"); + ui_interface->declare(&fbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd4a7a0", &fbargraph68, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph69, "osc", "/output45"); + ui_interface->declare(&fbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd4df30", &fbargraph69, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph70, "osc", "/output46"); + ui_interface->declare(&fbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd514a0", &fbargraph70, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph71, "osc", "/output47"); + ui_interface->declare(&fbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd54ec0", &fbargraph71, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph72, "osc", "/output48"); + ui_interface->declare(&fbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd585d0", &fbargraph72, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph73, "osc", "/output49"); + ui_interface->declare(&fbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd5c0d0", &fbargraph73, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph74, "osc", "/output50"); + ui_interface->declare(&fbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe82bd5fb90", &fbargraph74, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = double(fcheckbox0); + double fSlow2 = double(fentry0); + double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); + double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow5 = (fConst3 / fSlow2); + double fSlow6 = faustpower<2>(fSlow5); + double fSlow7 = (1.0 / (((fConst2 / fSlow2) + (9.1401308902779 * fSlow6)) + 1)); + double fSlow8 = (36.5605235611116 * fSlow6); + double fSlow9 = (fSlow8 + (fConst4 / fSlow2)); + double fSlow10 = (1.0 / (((fConst5 / fSlow2) + (11.4878004768713 * fSlow6)) + 1)); + double fSlow11 = (45.9512019074852 * fSlow6); + double fSlow12 = (fSlow11 + (fConst6 / fSlow2)); + double fSlow13 = (fSlow1 * fSlow2); + double fSlow14 = (1 - fSlow1); + double fSlow15 = (1.0 / ((fConst7 / fSlow2) + 1)); + double fSlow16 = (1.0 / (((fConst8 / fSlow2) + (6.45943269348338 * fSlow6)) + 1)); + double fSlow17 = (25.83773077393352 * fSlow6); + double fSlow18 = (fSlow17 + (fConst9 / fSlow2)); + double fSlow19 = (fConst10 / fSlow2); + double fSlow20 = (1.0 / (((3 * fSlow6) + (fConst11 / fSlow2)) + 1)); + double fSlow21 = (12 * fSlow6); + double fSlow22 = (fSlow21 + (fConst12 / fSlow2)); + double fSlow23 = (1.0 / (fSlow5 + 1)); + double fSlow24 = (fConst13 / fSlow2); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOADecLebedev505.cpp b/source/HOAUGens/HOADecLebedev505.cpp new file mode 100644 index 0000000000..a8f028a9f2 --- /dev/null +++ b/source/HOAUGens/HOADecLebedev505.cpp @@ -0,0 +1,3688 @@ +//---------------------------------------------------------- +// name: "HOADecLebedev505" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider0; + double fRec2[2]; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fConst2; + double fConst3; + double fConst4; + double fRec5[2]; + double fRec6[2]; + double fConst5; + double fConst6; + double fRec8[2]; + double fRec9[2]; + double fRec7[2]; + double fRec4[2]; + double fRec3[2]; + FAUSTFLOAT fbargraph1; + double fRec12[2]; + double fRec13[2]; + double fRec15[2]; + double fRec16[2]; + double fRec14[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fbargraph2; + double fRec19[2]; + double fRec20[2]; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec18[2]; + double fRec17[2]; + FAUSTFLOAT fbargraph3; + double fRec27[2]; + double fRec28[2]; + double fRec26[2]; + double fRec29[2]; + double fRec30[2]; + double fRec25[2]; + double fRec24[2]; + FAUSTFLOAT fbargraph4; + double fConst7; + double fConst8; + double fConst9; + double fRec34[2]; + double fRec35[2]; + double fRec33[2]; + double fConst10; + double fRec36[2]; + double fRec32[2]; + double fRec31[2]; + FAUSTFLOAT fbargraph5; + double fRec40[2]; + double fRec41[2]; + double fRec39[2]; + double fRec42[2]; + double fRec38[2]; + double fRec37[2]; + FAUSTFLOAT fbargraph6; + double fRec46[2]; + double fRec47[2]; + double fRec45[2]; + double fRec48[2]; + double fRec44[2]; + double fRec43[2]; + FAUSTFLOAT fbargraph7; + double fRec52[2]; + double fRec53[2]; + double fRec51[2]; + double fRec54[2]; + double fRec50[2]; + double fRec49[2]; + FAUSTFLOAT fbargraph8; + double fConst11; + double fConst12; + double fRec57[2]; + double fRec58[2]; + double fRec56[2]; + double fRec55[2]; + FAUSTFLOAT fbargraph9; + double fRec61[2]; + double fRec62[2]; + double fRec60[2]; + double fRec59[2]; + FAUSTFLOAT fbargraph10; + double fRec65[2]; + double fRec66[2]; + double fRec64[2]; + double fRec63[2]; + FAUSTFLOAT fbargraph11; + double fConst13; + double fRec69[2]; + double fRec68[2]; + double fRec67[2]; + FAUSTFLOAT fbargraph12; + double fRec72[2]; + double fRec71[2]; + double fRec70[2]; + FAUSTFLOAT fbargraph13; + double fRec75[2]; + double fRec76[2]; + double fRec78[2]; + double fRec79[2]; + double fRec77[2]; + double fRec74[2]; + double fRec73[2]; + FAUSTFLOAT fbargraph14; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fRec84[2]; + double fRec85[2]; + double fRec83[2]; + double fConst18; + double fRec86[2]; + double fRec87[2]; + double fRec82[2]; + double fConst19; + double fRec88[2]; + double fRec81[2]; + double fRec80[2]; + FAUSTFLOAT fbargraph15; + double fRec92[2]; + double fRec93[2]; + double fRec95[2]; + double fRec96[2]; + double fRec94[2]; + double fRec91[2]; + double fRec97[2]; + double fRec90[2]; + double fRec89[2]; + FAUSTFLOAT fbargraph16; + double fRec101[2]; + double fRec102[2]; + double fRec104[2]; + double fRec105[2]; + double fRec103[2]; + double fRec100[2]; + double fRec106[2]; + double fRec99[2]; + double fRec98[2]; + FAUSTFLOAT fbargraph17; + double fRec110[2]; + double fRec111[2]; + double fRec113[2]; + double fRec114[2]; + double fRec112[2]; + double fRec109[2]; + double fRec115[2]; + double fRec108[2]; + double fRec107[2]; + FAUSTFLOAT fbargraph18; + double fRec119[2]; + double fRec120[2]; + double fRec122[2]; + double fRec123[2]; + double fRec121[2]; + double fRec118[2]; + double fRec124[2]; + double fRec117[2]; + double fRec116[2]; + FAUSTFLOAT fbargraph19; + double fRec128[2]; + double fRec129[2]; + double fRec131[2]; + double fRec132[2]; + double fRec130[2]; + double fRec127[2]; + double fRec133[2]; + double fRec126[2]; + double fRec125[2]; + FAUSTFLOAT fbargraph20; + FAUSTFLOAT fslider1; + double fRec134[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph21; + double fRec135[2]; + FAUSTFLOAT fbargraph22; + double fRec140[2]; + double fRec141[2]; + double fRec143[2]; + double fRec144[2]; + double fRec142[2]; + double fRec139[2]; + double fRec145[2]; + double fRec138[2]; + double fRec137[2]; + FAUSTFLOAT fbargraph23; + double fRec148[2]; + double fRec147[2]; + double fRec146[2]; + FAUSTFLOAT fbargraph24; + double fRec151[2]; + double fRec152[2]; + double fRec150[2]; + double fRec149[2]; + FAUSTFLOAT fbargraph25; + double fRec156[2]; + double fRec157[2]; + double fRec159[2]; + double fRec160[2]; + double fRec158[2]; + double fRec155[2]; + double fRec161[2]; + double fRec154[2]; + double fRec153[2]; + FAUSTFLOAT fbargraph26; + double fRec165[2]; + double fRec166[2]; + double fRec168[2]; + double fRec169[2]; + double fRec167[2]; + double fRec164[2]; + double fRec170[2]; + double fRec163[2]; + double fRec162[2]; + FAUSTFLOAT fbargraph27; + double fRec173[2]; + double fRec174[2]; + double fRec176[2]; + double fRec177[2]; + double fRec175[2]; + double fRec172[2]; + double fRec171[2]; + FAUSTFLOAT fbargraph28; + double fRec181[2]; + double fRec182[2]; + double fRec180[2]; + double fRec183[2]; + double fRec179[2]; + double fRec178[2]; + FAUSTFLOAT fbargraph29; + double fRec187[2]; + double fRec188[2]; + double fRec186[2]; + double fRec189[2]; + double fRec185[2]; + double fRec184[2]; + FAUSTFLOAT fbargraph30; + double fRec192[2]; + double fRec193[2]; + double fRec195[2]; + double fRec196[2]; + double fRec194[2]; + double fRec191[2]; + double fRec190[2]; + FAUSTFLOAT fbargraph31; + double fRec136[2]; + FAUSTFLOAT fbargraph32; + double fRec197[2]; + FAUSTFLOAT fbargraph33; + double fRec198[2]; + FAUSTFLOAT fbargraph34; + double fRec199[2]; + FAUSTFLOAT fbargraph35; + double fRec200[2]; + FAUSTFLOAT fbargraph36; + double fRec204[2]; + double fRec205[2]; + double fRec207[2]; + double fRec208[2]; + double fRec206[2]; + double fRec203[2]; + double fRec202[2]; + FAUSTFLOAT fbargraph37; + double fRec212[2]; + double fRec213[2]; + double fRec215[2]; + double fRec216[2]; + double fRec214[2]; + double fRec211[2]; + double fRec217[2]; + double fRec210[2]; + double fRec209[2]; + FAUSTFLOAT fbargraph38; + double fRec221[2]; + double fRec222[2]; + double fRec220[2]; + double fRec223[2]; + double fRec219[2]; + double fRec218[2]; + FAUSTFLOAT fbargraph39; + double fRec226[2]; + double fRec227[2]; + double fRec225[2]; + double fRec224[2]; + FAUSTFLOAT fbargraph40; + double fRec230[2]; + double fRec231[2]; + double fRec233[2]; + double fRec234[2]; + double fRec232[2]; + double fRec229[2]; + double fRec228[2]; + FAUSTFLOAT fbargraph41; + double fRec238[2]; + double fRec239[2]; + double fRec241[2]; + double fRec242[2]; + double fRec240[2]; + double fRec237[2]; + double fRec243[2]; + double fRec236[2]; + double fRec235[2]; + FAUSTFLOAT fbargraph42; + double fRec201[2]; + FAUSTFLOAT fbargraph43; + double fRec244[2]; + FAUSTFLOAT fbargraph44; + double fRec245[2]; + FAUSTFLOAT fbargraph45; + double fRec246[2]; + FAUSTFLOAT fbargraph46; + double fRec247[2]; + FAUSTFLOAT fbargraph47; + double fRec248[2]; + FAUSTFLOAT fbargraph48; + double fRec249[2]; + FAUSTFLOAT fbargraph49; + double fRec250[2]; + FAUSTFLOAT fbargraph50; + double fRec251[2]; + FAUSTFLOAT fbargraph51; + double fRec252[2]; + FAUSTFLOAT fbargraph52; + double fRec253[2]; + FAUSTFLOAT fbargraph53; + double fRec254[2]; + FAUSTFLOAT fbargraph54; + double fRec255[2]; + FAUSTFLOAT fbargraph55; + double fRec256[2]; + FAUSTFLOAT fbargraph56; + double fRec257[2]; + FAUSTFLOAT fbargraph57; + double fRec258[2]; + FAUSTFLOAT fbargraph58; + double fRec259[2]; + FAUSTFLOAT fbargraph59; + double fRec260[2]; + FAUSTFLOAT fbargraph60; + double fRec261[2]; + FAUSTFLOAT fbargraph61; + double fRec262[2]; + FAUSTFLOAT fbargraph62; + double fRec263[2]; + FAUSTFLOAT fbargraph63; + double fRec264[2]; + FAUSTFLOAT fbargraph64; + double fRec265[2]; + FAUSTFLOAT fbargraph65; + double fRec266[2]; + FAUSTFLOAT fbargraph66; + double fRec267[2]; + FAUSTFLOAT fbargraph67; + double fRec268[2]; + FAUSTFLOAT fbargraph68; + double fRec269[2]; + FAUSTFLOAT fbargraph69; + double fRec270[2]; + FAUSTFLOAT fbargraph70; + double fRec271[2]; + FAUSTFLOAT fbargraph71; + double fRec272[2]; + FAUSTFLOAT fbargraph72; + double fRec273[2]; + FAUSTFLOAT fbargraph73; + double fRec274[2]; + FAUSTFLOAT fbargraph74; + double fRec275[2]; + FAUSTFLOAT fbargraph75; + double fRec276[2]; + FAUSTFLOAT fbargraph76; + double fRec277[2]; + FAUSTFLOAT fbargraph77; + double fRec278[2]; + FAUSTFLOAT fbargraph78; + double fRec279[2]; + FAUSTFLOAT fbargraph79; + double fRec280[2]; + FAUSTFLOAT fbargraph80; + double fRec281[2]; + FAUSTFLOAT fbargraph81; + double fRec282[2]; + FAUSTFLOAT fbargraph82; + double fRec283[2]; + FAUSTFLOAT fbargraph83; + double fRec284[2]; + FAUSTFLOAT fbargraph84; + double fRec285[2]; + FAUSTFLOAT fbargraph85; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecLebedev505"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 36; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (984.7116049589241 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (1969.4232099178482 / fConst0); + fConst5 = (715.2883950410759 / fConst0); + fConst6 = (1430.5767900821518 / fConst0); + fConst7 = (394.7715102864353 / fConst0); + fConst8 = (625.2284897135664 / fConst0); + fConst9 = (1250.4569794271329 / fConst0); + fConst10 = (789.5430205728705 / fConst0); + fConst11 = (5.1e+02 / fConst0); + fConst12 = (1.02e+03 / fConst0); + fConst13 = (3.4e+02 / fConst0); + fConst14 = (619.9455612060303 / fConst0); + fConst15 = (1139.6651757122002 / fConst0); + fConst16 = (790.3892630817644 / fConst0); + fConst17 = (1580.7785261635288 / fConst0); + fConst18 = (2279.3303514244003 / fConst0); + fConst19 = (1239.8911224120607 / fConst0); + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider0 = 0.0; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec84[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; + for (int i=0; i<2; i++) fRec83[i] = 0; + for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec87[i] = 0; + for (int i=0; i<2; i++) fRec82[i] = 0; + for (int i=0; i<2; i++) fRec88[i] = 0; + for (int i=0; i<2; i++) fRec81[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec93[i] = 0; + for (int i=0; i<2; i++) fRec95[i] = 0; + for (int i=0; i<2; i++) fRec96[i] = 0; + for (int i=0; i<2; i++) fRec94[i] = 0; + for (int i=0; i<2; i++) fRec91[i] = 0; + for (int i=0; i<2; i++) fRec97[i] = 0; + for (int i=0; i<2; i++) fRec90[i] = 0; + for (int i=0; i<2; i++) fRec89[i] = 0; + for (int i=0; i<2; i++) fRec101[i] = 0; + for (int i=0; i<2; i++) fRec102[i] = 0; + for (int i=0; i<2; i++) fRec104[i] = 0; + for (int i=0; i<2; i++) fRec105[i] = 0; + for (int i=0; i<2; i++) fRec103[i] = 0; + for (int i=0; i<2; i++) fRec100[i] = 0; + for (int i=0; i<2; i++) fRec106[i] = 0; + for (int i=0; i<2; i++) fRec99[i] = 0; + for (int i=0; i<2; i++) fRec98[i] = 0; + for (int i=0; i<2; i++) fRec110[i] = 0; + for (int i=0; i<2; i++) fRec111[i] = 0; + for (int i=0; i<2; i++) fRec113[i] = 0; + for (int i=0; i<2; i++) fRec114[i] = 0; + for (int i=0; i<2; i++) fRec112[i] = 0; + for (int i=0; i<2; i++) fRec109[i] = 0; + for (int i=0; i<2; i++) fRec115[i] = 0; + for (int i=0; i<2; i++) fRec108[i] = 0; + for (int i=0; i<2; i++) fRec107[i] = 0; + for (int i=0; i<2; i++) fRec119[i] = 0; + for (int i=0; i<2; i++) fRec120[i] = 0; + for (int i=0; i<2; i++) fRec122[i] = 0; + for (int i=0; i<2; i++) fRec123[i] = 0; + for (int i=0; i<2; i++) fRec121[i] = 0; + for (int i=0; i<2; i++) fRec118[i] = 0; + for (int i=0; i<2; i++) fRec124[i] = 0; + for (int i=0; i<2; i++) fRec117[i] = 0; + for (int i=0; i<2; i++) fRec116[i] = 0; + for (int i=0; i<2; i++) fRec128[i] = 0; + for (int i=0; i<2; i++) fRec129[i] = 0; + for (int i=0; i<2; i++) fRec131[i] = 0; + for (int i=0; i<2; i++) fRec132[i] = 0; + for (int i=0; i<2; i++) fRec130[i] = 0; + for (int i=0; i<2; i++) fRec127[i] = 0; + for (int i=0; i<2; i++) fRec133[i] = 0; + for (int i=0; i<2; i++) fRec126[i] = 0; + for (int i=0; i<2; i++) fRec125[i] = 0; + for (int i=0; i<2; i++) fRec134[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec135[i] = 0; + for (int i=0; i<2; i++) fRec140[i] = 0; + for (int i=0; i<2; i++) fRec141[i] = 0; + for (int i=0; i<2; i++) fRec143[i] = 0; + for (int i=0; i<2; i++) fRec144[i] = 0; + for (int i=0; i<2; i++) fRec142[i] = 0; + for (int i=0; i<2; i++) fRec139[i] = 0; + for (int i=0; i<2; i++) fRec145[i] = 0; + for (int i=0; i<2; i++) fRec138[i] = 0; + for (int i=0; i<2; i++) fRec137[i] = 0; + for (int i=0; i<2; i++) fRec148[i] = 0; + for (int i=0; i<2; i++) fRec147[i] = 0; + for (int i=0; i<2; i++) fRec146[i] = 0; + for (int i=0; i<2; i++) fRec151[i] = 0; + for (int i=0; i<2; i++) fRec152[i] = 0; + for (int i=0; i<2; i++) fRec150[i] = 0; + for (int i=0; i<2; i++) fRec149[i] = 0; + for (int i=0; i<2; i++) fRec156[i] = 0; + for (int i=0; i<2; i++) fRec157[i] = 0; + for (int i=0; i<2; i++) fRec159[i] = 0; + for (int i=0; i<2; i++) fRec160[i] = 0; + for (int i=0; i<2; i++) fRec158[i] = 0; + for (int i=0; i<2; i++) fRec155[i] = 0; + for (int i=0; i<2; i++) fRec161[i] = 0; + for (int i=0; i<2; i++) fRec154[i] = 0; + for (int i=0; i<2; i++) fRec153[i] = 0; + for (int i=0; i<2; i++) fRec165[i] = 0; + for (int i=0; i<2; i++) fRec166[i] = 0; + for (int i=0; i<2; i++) fRec168[i] = 0; + for (int i=0; i<2; i++) fRec169[i] = 0; + for (int i=0; i<2; i++) fRec167[i] = 0; + for (int i=0; i<2; i++) fRec164[i] = 0; + for (int i=0; i<2; i++) fRec170[i] = 0; + for (int i=0; i<2; i++) fRec163[i] = 0; + for (int i=0; i<2; i++) fRec162[i] = 0; + for (int i=0; i<2; i++) fRec173[i] = 0; + for (int i=0; i<2; i++) fRec174[i] = 0; + for (int i=0; i<2; i++) fRec176[i] = 0; + for (int i=0; i<2; i++) fRec177[i] = 0; + for (int i=0; i<2; i++) fRec175[i] = 0; + for (int i=0; i<2; i++) fRec172[i] = 0; + for (int i=0; i<2; i++) fRec171[i] = 0; + for (int i=0; i<2; i++) fRec181[i] = 0; + for (int i=0; i<2; i++) fRec182[i] = 0; + for (int i=0; i<2; i++) fRec180[i] = 0; + for (int i=0; i<2; i++) fRec183[i] = 0; + for (int i=0; i<2; i++) fRec179[i] = 0; + for (int i=0; i<2; i++) fRec178[i] = 0; + for (int i=0; i<2; i++) fRec187[i] = 0; + for (int i=0; i<2; i++) fRec188[i] = 0; + for (int i=0; i<2; i++) fRec186[i] = 0; + for (int i=0; i<2; i++) fRec189[i] = 0; + for (int i=0; i<2; i++) fRec185[i] = 0; + for (int i=0; i<2; i++) fRec184[i] = 0; + for (int i=0; i<2; i++) fRec192[i] = 0; + for (int i=0; i<2; i++) fRec193[i] = 0; + for (int i=0; i<2; i++) fRec195[i] = 0; + for (int i=0; i<2; i++) fRec196[i] = 0; + for (int i=0; i<2; i++) fRec194[i] = 0; + for (int i=0; i<2; i++) fRec191[i] = 0; + for (int i=0; i<2; i++) fRec190[i] = 0; + for (int i=0; i<2; i++) fRec136[i] = 0; + for (int i=0; i<2; i++) fRec197[i] = 0; + for (int i=0; i<2; i++) fRec198[i] = 0; + for (int i=0; i<2; i++) fRec199[i] = 0; + for (int i=0; i<2; i++) fRec200[i] = 0; + for (int i=0; i<2; i++) fRec204[i] = 0; + for (int i=0; i<2; i++) fRec205[i] = 0; + for (int i=0; i<2; i++) fRec207[i] = 0; + for (int i=0; i<2; i++) fRec208[i] = 0; + for (int i=0; i<2; i++) fRec206[i] = 0; + for (int i=0; i<2; i++) fRec203[i] = 0; + for (int i=0; i<2; i++) fRec202[i] = 0; + for (int i=0; i<2; i++) fRec212[i] = 0; + for (int i=0; i<2; i++) fRec213[i] = 0; + for (int i=0; i<2; i++) fRec215[i] = 0; + for (int i=0; i<2; i++) fRec216[i] = 0; + for (int i=0; i<2; i++) fRec214[i] = 0; + for (int i=0; i<2; i++) fRec211[i] = 0; + for (int i=0; i<2; i++) fRec217[i] = 0; + for (int i=0; i<2; i++) fRec210[i] = 0; + for (int i=0; i<2; i++) fRec209[i] = 0; + for (int i=0; i<2; i++) fRec221[i] = 0; + for (int i=0; i<2; i++) fRec222[i] = 0; + for (int i=0; i<2; i++) fRec220[i] = 0; + for (int i=0; i<2; i++) fRec223[i] = 0; + for (int i=0; i<2; i++) fRec219[i] = 0; + for (int i=0; i<2; i++) fRec218[i] = 0; + for (int i=0; i<2; i++) fRec226[i] = 0; + for (int i=0; i<2; i++) fRec227[i] = 0; + for (int i=0; i<2; i++) fRec225[i] = 0; + for (int i=0; i<2; i++) fRec224[i] = 0; + for (int i=0; i<2; i++) fRec230[i] = 0; + for (int i=0; i<2; i++) fRec231[i] = 0; + for (int i=0; i<2; i++) fRec233[i] = 0; + for (int i=0; i<2; i++) fRec234[i] = 0; + for (int i=0; i<2; i++) fRec232[i] = 0; + for (int i=0; i<2; i++) fRec229[i] = 0; + for (int i=0; i<2; i++) fRec228[i] = 0; + for (int i=0; i<2; i++) fRec238[i] = 0; + for (int i=0; i<2; i++) fRec239[i] = 0; + for (int i=0; i<2; i++) fRec241[i] = 0; + for (int i=0; i<2; i++) fRec242[i] = 0; + for (int i=0; i<2; i++) fRec240[i] = 0; + for (int i=0; i<2; i++) fRec237[i] = 0; + for (int i=0; i<2; i++) fRec243[i] = 0; + for (int i=0; i<2; i++) fRec236[i] = 0; + for (int i=0; i<2; i++) fRec235[i] = 0; + for (int i=0; i<2; i++) fRec201[i] = 0; + for (int i=0; i<2; i++) fRec244[i] = 0; + for (int i=0; i<2; i++) fRec245[i] = 0; + for (int i=0; i<2; i++) fRec246[i] = 0; + for (int i=0; i<2; i++) fRec247[i] = 0; + for (int i=0; i<2; i++) fRec248[i] = 0; + for (int i=0; i<2; i++) fRec249[i] = 0; + for (int i=0; i<2; i++) fRec250[i] = 0; + for (int i=0; i<2; i++) fRec251[i] = 0; + for (int i=0; i<2; i++) fRec252[i] = 0; + for (int i=0; i<2; i++) fRec253[i] = 0; + for (int i=0; i<2; i++) fRec254[i] = 0; + for (int i=0; i<2; i++) fRec255[i] = 0; + for (int i=0; i<2; i++) fRec256[i] = 0; + for (int i=0; i<2; i++) fRec257[i] = 0; + for (int i=0; i<2; i++) fRec258[i] = 0; + for (int i=0; i<2; i++) fRec259[i] = 0; + for (int i=0; i<2; i++) fRec260[i] = 0; + for (int i=0; i<2; i++) fRec261[i] = 0; + for (int i=0; i<2; i++) fRec262[i] = 0; + for (int i=0; i<2; i++) fRec263[i] = 0; + for (int i=0; i<2; i++) fRec264[i] = 0; + for (int i=0; i<2; i++) fRec265[i] = 0; + for (int i=0; i<2; i++) fRec266[i] = 0; + for (int i=0; i<2; i++) fRec267[i] = 0; + for (int i=0; i<2; i++) fRec268[i] = 0; + for (int i=0; i<2; i++) fRec269[i] = 0; + for (int i=0; i<2; i++) fRec270[i] = 0; + for (int i=0; i<2; i++) fRec271[i] = 0; + for (int i=0; i<2; i++) fRec272[i] = 0; + for (int i=0; i<2; i++) fRec273[i] = 0; + for (int i=0; i<2; i++) fRec274[i] = 0; + for (int i=0; i<2; i++) fRec275[i] = 0; + for (int i=0; i<2; i++) fRec276[i] = 0; + for (int i=0; i<2; i++) fRec277[i] = 0; + for (int i=0; i<2; i++) fRec278[i] = 0; + for (int i=0; i<2; i++) fRec279[i] = 0; + for (int i=0; i<2; i++) fRec280[i] = 0; + for (int i=0; i<2; i++) fRec281[i] = 0; + for (int i=0; i<2; i++) fRec282[i] = 0; + for (int i=0; i<2; i++) fRec283[i] = 0; + for (int i=0; i<2; i++) fRec284[i] = 0; + for (int i=0; i<2; i++) fRec285[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f02a120", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f08f6b0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f059600", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f05bec0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0925c0", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0d02d0", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f056900", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f053a40", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f050a40", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0a98e0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0cd280", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0a5ca0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f04cdb0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0493d0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0458b0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f041d30", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0add30", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0d6de0", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0a20b0", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0c4260", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f03cc30", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f038bd0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f034920", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f030640", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f061220", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f097590", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0dbf20", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f08cdf0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0c9460", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f09c5f0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f068610", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f06d7a0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f072a50", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f077d80", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f07d170", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f082540", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "osc", "/levelin -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider1, "2", ""); + ui_interface->declare(&fslider1, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph21, "osc", "/output1"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f084c70", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph22, "osc", "/output2"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f087f30", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph32, "osc", "/output3"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0afe90", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph33, "osc", "/output4"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0b3e00", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph34, "osc", "/output5"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0b7ac0", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph35, "osc", "/output6"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0ba8d0", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph36, "osc", "/output7"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0bfd70", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph43, "osc", "/output8"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0df100", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph44, "osc", "/output9"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0e4ce0", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph45, "osc", "/output10"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0eacc0", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph46, "osc", "/output11"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0efd40", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph47, "osc", "/output12"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0f4170", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph48, "osc", "/output13"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f0f83d0", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph49, "osc", "/output14"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f100600", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph50, "osc", "/output15"); + ui_interface->declare(&fbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1032e0", &fbargraph50, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph51, "osc", "/output16"); + ui_interface->declare(&fbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f107830", &fbargraph51, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph52, "osc", "/output17"); + ui_interface->declare(&fbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f10bcd0", &fbargraph52, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph53, "osc", "/output18"); + ui_interface->declare(&fbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1102a0", &fbargraph53, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph54, "osc", "/output19"); + ui_interface->declare(&fbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f118b80", &fbargraph54, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph55, "osc", "/output20"); + ui_interface->declare(&fbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f11f090", &fbargraph55, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph56, "osc", "/output21"); + ui_interface->declare(&fbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f125b80", &fbargraph56, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph57, "osc", "/output22"); + ui_interface->declare(&fbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f12b9c0", &fbargraph57, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph58, "osc", "/output23"); + ui_interface->declare(&fbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f12ffe0", &fbargraph58, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph59, "osc", "/output24"); + ui_interface->declare(&fbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1349a0", &fbargraph59, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph60, "osc", "/output25"); + ui_interface->declare(&fbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1394a0", &fbargraph60, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph61, "osc", "/output26"); + ui_interface->declare(&fbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f13dd50", &fbargraph61, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph62, "osc", "/output27"); + ui_interface->declare(&fbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f145ce0", &fbargraph62, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph63, "osc", "/output28"); + ui_interface->declare(&fbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f14ad00", &fbargraph63, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph64, "osc", "/output29"); + ui_interface->declare(&fbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f151790", &fbargraph64, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph65, "osc", "/output30"); + ui_interface->declare(&fbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1576e0", &fbargraph65, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph66, "osc", "/output31"); + ui_interface->declare(&fbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f15fc80", &fbargraph66, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph67, "osc", "/output32"); + ui_interface->declare(&fbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f167150", &fbargraph67, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph68, "osc", "/output33"); + ui_interface->declare(&fbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f16e5f0", &fbargraph68, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph69, "osc", "/output34"); + ui_interface->declare(&fbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f174760", &fbargraph69, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph70, "osc", "/output35"); + ui_interface->declare(&fbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f17b470", &fbargraph70, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph71, "osc", "/output36"); + ui_interface->declare(&fbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f182160", &fbargraph71, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph72, "osc", "/output37"); + ui_interface->declare(&fbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f189420", &fbargraph72, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph73, "osc", "/output38"); + ui_interface->declare(&fbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f190e70", &fbargraph73, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph74, "osc", "/output39"); + ui_interface->declare(&fbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1955d0", &fbargraph74, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph75, "osc", "/output40"); + ui_interface->declare(&fbargraph75, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f199ed0", &fbargraph75, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph76, "osc", "/output41"); + ui_interface->declare(&fbargraph76, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f19e780", &fbargraph76, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph77, "osc", "/output42"); + ui_interface->declare(&fbargraph77, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1a2eb0", &fbargraph77, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph78, "osc", "/output43"); + ui_interface->declare(&fbargraph78, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1a7500", &fbargraph78, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph79, "osc", "/output44"); + ui_interface->declare(&fbargraph79, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1abf10", &fbargraph79, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph80, "osc", "/output45"); + ui_interface->declare(&fbargraph80, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1b05f0", &fbargraph80, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph81, "osc", "/output46"); + ui_interface->declare(&fbargraph81, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1b4cb0", &fbargraph81, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph82, "osc", "/output47"); + ui_interface->declare(&fbargraph82, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1b99e0", &fbargraph82, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph83, "osc", "/output48"); + ui_interface->declare(&fbargraph83, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1bdf40", &fbargraph83, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph84, "osc", "/output49"); + ui_interface->declare(&fbargraph84, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1c2800", &fbargraph84, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph85, "osc", "/output50"); + ui_interface->declare(&fbargraph85, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb66f1c7970", &fbargraph85, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + double fSlow1 = double(fentry0); + double fSlow2 = (1 - (fSlow0 * (1 - fSlow1))); + double fSlow3 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow4 = (fConst3 / fSlow1); + double fSlow5 = faustpower<2>(fSlow4); + double fSlow6 = (1.0 / (((fConst2 / fSlow1) + (9.1401308902779 * fSlow5)) + 1)); + double fSlow7 = (36.5605235611116 * fSlow5); + double fSlow8 = (fSlow7 + (fConst4 / fSlow1)); + double fSlow9 = (1.0 / (((fConst5 / fSlow1) + (11.4878004768713 * fSlow5)) + 1)); + double fSlow10 = (45.9512019074852 * fSlow5); + double fSlow11 = (fSlow10 + (fConst6 / fSlow1)); + double fSlow12 = (fSlow0 * fSlow1); + double fSlow13 = (1 - fSlow0); + double fSlow14 = (1.0 / ((fConst7 / fSlow1) + 1)); + double fSlow15 = (1.0 / (((fConst8 / fSlow1) + (6.45943269348338 * fSlow5)) + 1)); + double fSlow16 = (25.83773077393352 * fSlow5); + double fSlow17 = (fSlow16 + (fConst9 / fSlow1)); + double fSlow18 = (fConst10 / fSlow1); + double fSlow19 = (1.0 / (((3 * fSlow5) + (fConst11 / fSlow1)) + 1)); + double fSlow20 = (12 * fSlow5); + double fSlow21 = (fSlow20 + (fConst12 / fSlow1)); + double fSlow22 = (1.0 / (fSlow4 + 1)); + double fSlow23 = (fConst13 / fSlow1); + double fSlow24 = (1.0 / ((fConst14 / fSlow1) + 1)); + double fSlow25 = (1.0 / (((fConst15 / fSlow1) + (14.2724805132801 * fSlow5)) + 1)); + double fSlow26 = (1.0 / (((fConst16 / fSlow1) + (18.1563153134523 * fSlow5)) + 1)); + double fSlow27 = (72.6252612538092 * fSlow5); + double fSlow28 = (fSlow27 + (fConst17 / fSlow1)); + double fSlow29 = (57.0899220531204 * fSlow5); + double fSlow30 = (fSlow29 + (fConst18 / fSlow1)); + double fSlow31 = (fConst19 / fSlow1); + double fSlow32 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAEncoder1.cpp b/source/HOAUGens/HOAEncoder1.cpp new file mode 100644 index 0000000000..9ce296e241 --- /dev/null +++ b/source/HOAUGens/HOAEncoder1.cpp @@ -0,0 +1,1058 @@ +//---------------------------------------------------------- +// name: "HOAEncoder1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + int iConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec6[2]; + FAUSTFLOAT fbargraph2; + double fRec7[2]; + FAUSTFLOAT fbargraph3; + public: + static void metadata(Meta* m) { + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("name", "HOAEncoder1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 4; } + virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = (8e+01 / double(iConst0)); + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider0 = 2.0; + fslider1 = 0.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + fslider2 = 0.0; + fslider3 = 0.0; + fConst2 = (3.4e+02 / double(iConst0)); + fConst3 = (1.7e+02 / double(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openHorizontalBox("0x00"); + interface->openVerticalBox("Parameters"); + interface->openHorizontalBox("Source 0"); + interface->declare(&fslider1, "0+1", ""); + interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + interface->declare(&fslider0, "0+2", ""); + interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + interface->declare(&fslider3, "0+3", ""); + interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + interface->declare(&fslider3, "style", "knob"); + interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(&fslider2, "0+4", ""); + interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + interface->declare(&fslider2, "style", "knob"); + interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(0, "0+5", ""); + interface->openHorizontalBox("Spherical Wave"); + interface->addCheckButton("Yes", &fcheckbox0); + interface->closeBox(); + interface->declare(&fentry0, "~", ""); + interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "~", ""); + interface->openVerticalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7f96c7f697d0", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7f96c7f6eb00", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7f96c7f704c0", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7f96c7f72120", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + double fSlow1 = (1 - fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fTemp0; + double fTemp1; + double fSlow7 = double(fslider2); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fslider3); + double fSlow10 = (1.7320508075688772 * (fSlow8 * sin(fSlow9))); + double fSlow11 = (1 + (fConst3 / fSlow4)); + double fSlow12 = (fConst2 / (fSlow4 * fSlow11)); + double fSlow13 = (1.0 / (1 + (fConst3 / fSlow2))); + double fSlow14 = ((fSlow3 * fSlow11) / fSlow4); + double fSlow15 = (fConst2 / fSlow2); + double fTemp2; + double fTemp3; + double fSlow16 = (1.7320508075688772 * sin(fSlow7)); + double fTemp4; + double fSlow17 = (1.7320508075688772 * (fSlow8 * cos(fSlow9))); + double fTemp5; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAEncoder2.cpp b/source/HOAUGens/HOAEncoder2.cpp new file mode 100644 index 0000000000..d6a33e6250 --- /dev/null +++ b/source/HOAUGens/HOAEncoder2.cpp @@ -0,0 +1,1197 @@ +//---------------------------------------------------------- +// name: "HOAEncoder2" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline float faustpower(float x) { return powf(x,N); } +template inline double faustpower(double x) { return pow(x,N); } +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + int iConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec6[2]; + FAUSTFLOAT fbargraph2; + double fRec7[2]; + FAUSTFLOAT fbargraph3; + double fConst4; + double fConst5; + double fRec11[2]; + double fRec12[2]; + double fRec10[2]; + double fRec9[2]; + double fVec0[2]; + double fRec13[2]; + double fRec8[2]; + FAUSTFLOAT fbargraph4; + double fRec14[2]; + FAUSTFLOAT fbargraph5; + double fRec15[2]; + FAUSTFLOAT fbargraph6; + double fRec16[2]; + FAUSTFLOAT fbargraph7; + double fRec17[2]; + FAUSTFLOAT fbargraph8; + public: + static void metadata(Meta* m) { + m->declare("name", "HOAEncoder2"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 9; } + virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = (8e+01 / double(iConst0)); + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider0 = 2.0; + fslider1 = 0.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + fslider2 = 0.0; + fslider3 = 0.0; + fConst2 = (3.4e+02 / double(iConst0)); + fConst3 = (1.7e+02 / double(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + fConst4 = (5.1e+02 / double(iConst0)); + fConst5 = (1.02e+03 / double(iConst0)); + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openHorizontalBox("0x00"); + interface->openVerticalBox("Parameters"); + interface->openHorizontalBox("Source 0"); + interface->declare(&fslider1, "0+1", ""); + interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + interface->declare(&fslider0, "0+2", ""); + interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + interface->declare(&fslider3, "0+3", ""); + interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + interface->declare(&fslider3, "style", "knob"); + interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(&fslider2, "0+4", ""); + interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + interface->declare(&fslider2, "style", "knob"); + interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(0, "0+5", ""); + interface->openHorizontalBox("Spherical Wave"); + interface->addCheckButton("Yes", &fcheckbox0); + interface->closeBox(); + interface->declare(&fentry0, "~", ""); + interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "~", ""); + interface->openVerticalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7f9614162bc0", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7f9614168100", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7f9614169b50", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7f961416b7b0", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7f9614171730", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7f96141733f0", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7f96141751a0", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7f9614176dc0", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph8, "unit", "dB"); + interface->addVerticalBargraph("0x7f9614178b90", &fbargraph8, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + double fSlow1 = (1 - fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fTemp0; + double fTemp1; + double fSlow7 = double(fslider2); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fslider3); + double fSlow10 = sin(fSlow9); + double fSlow11 = (1.7320508075688772 * (fSlow8 * fSlow10)); + double fSlow12 = (fConst3 / fSlow4); + double fSlow13 = (1 + fSlow12); + double fSlow14 = (fConst2 / (fSlow4 * fSlow13)); + double fSlow15 = (fConst3 / fSlow2); + double fSlow16 = (1.0 / (1 + fSlow15)); + double fSlow17 = ((fSlow3 * fSlow13) / fSlow4); + double fSlow18 = (fConst2 / fSlow2); + double fTemp2; + double fTemp3; + double fTemp4; + double fSlow19 = sin(fSlow7); + double fSlow20 = (1.7320508075688772 * fSlow19); + double fTemp5; + double fSlow21 = cos(fSlow9); + double fSlow22 = (1.7320508075688772 * (fSlow8 * fSlow21)); + double fTemp6; + double fSlow23 = faustpower<2>(fSlow8); + double fSlow24 = (2 * fSlow9); + double fSlow25 = (1.9364916731037085 * (fSlow23 * sin(fSlow24))); + double fSlow26 = faustpower<2>(fSlow12); + double fSlow27 = (1 + ((fConst4 / fSlow4) + (3 * fSlow26))); + double fSlow28 = (1.0 / fSlow27); + double fSlow29 = (12 * fSlow26); + double fSlow30 = (fSlow29 + (fConst5 / fSlow4)); + double fSlow31 = faustpower<2>(fSlow15); + double fSlow32 = (1.0 / (1 + ((fConst4 / fSlow2) + (3 * fSlow31)))); + double fSlow33 = ((fSlow3 * fSlow27) / fSlow4); + double fSlow34 = (12 * fSlow31); + double fSlow35 = (fSlow34 + (fConst5 / fSlow2)); + double fTemp7; + double fTemp8; + double fTemp9; + double fSlow36 = sin((2 * fSlow7)); + double fSlow37 = (1.9364916731037085 * (fSlow36 * fSlow10)); + double fTemp10; + double fSlow38 = (1.118033988749895 * ((3 * faustpower<2>(fSlow19)) - 1)); + double fTemp11; + double fSlow39 = (1.9364916731037085 * (fSlow36 * fSlow21)); + double fTemp12; + double fSlow40 = (1.9364916731037085 * (fSlow23 * cos(fSlow24))); + double fTemp13; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAEncoder3.cpp b/source/HOAUGens/HOAEncoder3.cpp new file mode 100644 index 0000000000..d0f6249ce1 --- /dev/null +++ b/source/HOAUGens/HOAEncoder3.cpp @@ -0,0 +1,1372 @@ +//---------------------------------------------------------- +// name: "HOAEncoder3" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline float faustpower(float x) { return powf(x,N); } +template inline double faustpower(double x) { return pow(x,N); } +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + int iConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec6[2]; + FAUSTFLOAT fbargraph2; + double fRec7[2]; + FAUSTFLOAT fbargraph3; + double fConst4; + double fConst5; + double fRec11[2]; + double fRec12[2]; + double fRec10[2]; + double fRec9[2]; + double fVec0[2]; + double fRec13[2]; + double fRec8[2]; + FAUSTFLOAT fbargraph4; + double fRec14[2]; + FAUSTFLOAT fbargraph5; + double fRec15[2]; + FAUSTFLOAT fbargraph6; + double fRec16[2]; + FAUSTFLOAT fbargraph7; + double fRec17[2]; + FAUSTFLOAT fbargraph8; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fbargraph9; + double fRec27[2]; + FAUSTFLOAT fbargraph10; + double fRec28[2]; + FAUSTFLOAT fbargraph11; + double fRec29[2]; + FAUSTFLOAT fbargraph12; + double fRec30[2]; + FAUSTFLOAT fbargraph13; + double fRec31[2]; + FAUSTFLOAT fbargraph14; + double fRec32[2]; + FAUSTFLOAT fbargraph15; + public: + static void metadata(Meta* m) { + m->declare("name", "HOAEncoder3"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 16; } + virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = (8e+01 / double(iConst0)); + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider0 = 2.0; + fslider1 = 0.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + fslider2 = 0.0; + fslider3 = 0.0; + fConst2 = (3.4e+02 / double(iConst0)); + fConst3 = (1.7e+02 / double(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + fConst4 = (5.1e+02 / double(iConst0)); + fConst5 = (1.02e+03 / double(iConst0)); + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + fConst6 = (789.5430205728705 / double(iConst0)); + fConst7 = (394.7715102864353 / double(iConst0)); + fConst8 = (625.2284897135664 / double(iConst0)); + fConst9 = (1250.4569794271329 / double(iConst0)); + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openHorizontalBox("0x00"); + interface->openVerticalBox("Parameters"); + interface->openHorizontalBox("Source 0"); + interface->declare(&fslider1, "0+1", ""); + interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + interface->declare(&fslider0, "0+2", ""); + interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + interface->declare(&fslider2, "0+3", ""); + interface->declare(&fslider2, "osc", "/azimuth_0 0 360"); + interface->declare(&fslider2, "style", "knob"); + interface->addHorizontalSlider("Azimuth 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(&fslider3, "0+4", ""); + interface->declare(&fslider3, "osc", "/elevation_0 -90 90"); + interface->declare(&fslider3, "style", "knob"); + interface->addHorizontalSlider("Elevation 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(0, "0+5", ""); + interface->openHorizontalBox("Spherical Wave"); + interface->addCheckButton("Yes", &fcheckbox0); + interface->closeBox(); + interface->declare(&fentry0, "~", ""); + interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "~", ""); + interface->openVerticalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269858d0", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7fb92698afd0", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7fb92698ca20", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7fb92698e710", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269947d0", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7fb926996480", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7fb926998250", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7fb926999e80", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph8, "unit", "dB"); + interface->addVerticalBargraph("0x7fb92699bcf0", &fbargraph8, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph9, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269a3dc0", &fbargraph9, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph10, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269a5940", &fbargraph10, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph11, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269a7800", &fbargraph11, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph12, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269a9620", &fbargraph12, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph13, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269ab330", &fbargraph13, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph14, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269ad0b0", &fbargraph14, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph15, "unit", "dB"); + interface->addVerticalBargraph("0x7fb9269aefd0", &fbargraph15, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + double fSlow1 = double(fentry0); + double fSlow2 = double(fslider0); + double fSlow3 = (1 - fSlow0); + double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); + double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fTemp0; + double fTemp1; + double fSlow6 = double(fslider2); + double fSlow7 = sin(fSlow6); + double fSlow8 = double(fslider3); + double fSlow9 = cos(fSlow8); + double fSlow10 = (fSlow7 * fSlow9); + double fSlow11 = (1.7320508075688772 * fSlow10); + double fSlow12 = (fConst3 / fSlow2); + double fSlow13 = (1 + fSlow12); + double fSlow14 = (fConst2 / (fSlow13 * fSlow2)); + double fSlow15 = (fConst3 / fSlow1); + double fSlow16 = (1.0 / (1 + fSlow15)); + double fSlow17 = (((fSlow13 * fSlow0) * fSlow1) / fSlow2); + double fSlow18 = (fConst2 / fSlow1); + double fTemp2; + double fTemp3; + double fTemp4; + double fSlow19 = sin(fSlow8); + double fSlow20 = (1.7320508075688772 * fSlow19); + double fTemp5; + double fSlow21 = cos(fSlow6); + double fSlow22 = (fSlow21 * fSlow9); + double fSlow23 = (1.7320508075688772 * fSlow22); + double fTemp6; + double fSlow24 = (2 * fSlow6); + double fSlow25 = faustpower<2>(fSlow9); + double fSlow26 = (sin(fSlow24) * fSlow25); + double fSlow27 = (1.9364916731037085 * fSlow26); + double fSlow28 = faustpower<2>(fSlow12); + double fSlow29 = (1 + ((fConst4 / fSlow2) + (3 * fSlow28))); + double fSlow30 = (1.0 / fSlow29); + double fSlow31 = (12 * fSlow28); + double fSlow32 = (fSlow31 + (fConst5 / fSlow2)); + double fSlow33 = faustpower<2>(fSlow15); + double fSlow34 = (1.0 / (1 + ((fConst4 / fSlow1) + (3 * fSlow33)))); + double fSlow35 = (((fSlow29 * fSlow0) * fSlow1) / fSlow2); + double fSlow36 = (12 * fSlow33); + double fSlow37 = (fSlow36 + (fConst5 / fSlow1)); + double fTemp7; + double fTemp8; + double fTemp9; + double fSlow38 = sin((2 * fSlow8)); + double fSlow39 = (1.9364916731037085 * (fSlow7 * fSlow38)); + double fTemp10; + double fSlow40 = faustpower<2>(fSlow19); + double fSlow41 = (1.118033988749895 * ((3 * fSlow40) - 1)); + double fTemp11; + double fSlow42 = (1.9364916731037085 * (fSlow21 * fSlow38)); + double fTemp12; + double fSlow43 = (cos(fSlow24) * fSlow25); + double fSlow44 = (1.9364916731037085 * fSlow43); + double fTemp13; + double fSlow45 = (3 * fSlow6); + double fSlow46 = faustpower<3>(fSlow9); + double fSlow47 = (2.091650066335189 * (sin(fSlow45) * fSlow46)); + double fSlow48 = (1 + (fConst7 / fSlow2)); + double fSlow49 = (fConst6 / (fSlow48 * fSlow2)); + double fSlow50 = (1.0 / (1 + (fConst7 / fSlow1))); + double fSlow51 = (1.0 / (1 + ((fConst8 / fSlow1) + (6.45943269348338 * fSlow33)))); + double fSlow52 = (1 + ((fConst8 / fSlow2) + (6.45943269348338 * fSlow28))); + double fSlow53 = (((fSlow52 * fSlow0) * fSlow1) / fSlow2); + double fSlow54 = (25.83773077393352 * fSlow33); + double fSlow55 = (fSlow54 + (fConst9 / fSlow1)); + double fSlow56 = (1.0 / fSlow52); + double fSlow57 = (25.83773077393352 * fSlow28); + double fSlow58 = (fSlow57 + (fConst9 / fSlow2)); + double fTemp14; + double fSlow59 = (fConst6 / fSlow1); + double fTemp15; + double fTemp16; + double fSlow60 = (5.123475382979799 * (fSlow26 * fSlow19)); + double fTemp17; + double fSlow61 = (5 * fSlow40); + double fSlow62 = (fSlow61 - 1); + double fSlow63 = (1.620185174601965 * (fSlow10 * fSlow62)); + double fTemp18; + double fSlow64 = (1.3228756555322954 * (fSlow19 * (fSlow61 - 3))); + double fTemp19; + double fSlow65 = (1.620185174601965 * (fSlow22 * fSlow62)); + double fTemp20; + double fSlow66 = (5.123475382979799 * (fSlow43 * fSlow19)); + double fTemp21; + double fSlow67 = (2.091650066335189 * (cos(fSlow45) * fSlow46)); + double fTemp22; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAEncoder4.cpp b/source/HOAUGens/HOAEncoder4.cpp new file mode 100644 index 0000000000..03e77cd3bc --- /dev/null +++ b/source/HOAUGens/HOAEncoder4.cpp @@ -0,0 +1,1594 @@ +//---------------------------------------------------------- +// name: "HOAEncoder4" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline float faustpower(float x) { return powf(x,N); } +template inline double faustpower(double x) { return pow(x,N); } +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + int iConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec6[2]; + FAUSTFLOAT fbargraph2; + double fRec7[2]; + FAUSTFLOAT fbargraph3; + double fConst4; + double fConst5; + double fRec11[2]; + double fRec12[2]; + double fRec10[2]; + double fRec9[2]; + double fVec0[2]; + double fRec13[2]; + double fRec8[2]; + FAUSTFLOAT fbargraph4; + double fRec14[2]; + FAUSTFLOAT fbargraph5; + double fRec15[2]; + FAUSTFLOAT fbargraph6; + double fRec16[2]; + FAUSTFLOAT fbargraph7; + double fRec17[2]; + FAUSTFLOAT fbargraph8; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fbargraph9; + double fRec27[2]; + FAUSTFLOAT fbargraph10; + double fRec28[2]; + FAUSTFLOAT fbargraph11; + double fRec29[2]; + FAUSTFLOAT fbargraph12; + double fRec30[2]; + FAUSTFLOAT fbargraph13; + double fRec31[2]; + FAUSTFLOAT fbargraph14; + double fRec32[2]; + FAUSTFLOAT fbargraph15; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fVec2[2]; + double fRec40[2]; + double fRec41[2]; + double fRec42[2]; + double fRec35[2]; + double fRec34[2]; + double fVec3[2]; + double fRec43[2]; + double fRec33[2]; + FAUSTFLOAT fbargraph16; + double fRec44[2]; + FAUSTFLOAT fbargraph17; + double fRec45[2]; + FAUSTFLOAT fbargraph18; + double fRec46[2]; + FAUSTFLOAT fbargraph19; + double fRec47[2]; + FAUSTFLOAT fbargraph20; + double fRec48[2]; + FAUSTFLOAT fbargraph21; + double fRec49[2]; + FAUSTFLOAT fbargraph22; + double fRec50[2]; + FAUSTFLOAT fbargraph23; + double fRec51[2]; + FAUSTFLOAT fbargraph24; + public: + static void metadata(Meta* m) { + m->declare("name", "HOAEncoder4"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 25; } + virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = (8e+01 / double(iConst0)); + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider0 = 2.0; + fslider1 = 0.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + fslider2 = 0.0; + fslider3 = 0.0; + fConst2 = (3.4e+02 / double(iConst0)); + fConst3 = (1.7e+02 / double(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + fConst4 = (5.1e+02 / double(iConst0)); + fConst5 = (1.02e+03 / double(iConst0)); + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + fConst6 = (789.5430205728705 / double(iConst0)); + fConst7 = (394.7715102864353 / double(iConst0)); + fConst8 = (625.2284897135664 / double(iConst0)); + fConst9 = (1250.4569794271329 / double(iConst0)); + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + fConst10 = (984.7116049589241 / double(iConst0)); + fConst11 = (1969.4232099178482 / double(iConst0)); + fConst12 = (715.2883950410759 / double(iConst0)); + fConst13 = (1430.5767900821518 / double(iConst0)); + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openHorizontalBox("0x00"); + interface->openVerticalBox("Parameters"); + interface->openHorizontalBox("Source 0"); + interface->declare(&fslider1, "0+1", ""); + interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + interface->declare(&fslider0, "0+2", ""); + interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + interface->declare(&fslider3, "0+3", ""); + interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + interface->declare(&fslider3, "style", "knob"); + interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(&fslider2, "0+4", ""); + interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + interface->declare(&fslider2, "style", "knob"); + interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(0, "0+5", ""); + interface->openHorizontalBox("Spherical Wave"); + interface->addCheckButton("Yes", &fcheckbox0); + interface->closeBox(); + interface->declare(&fentry0, "~", ""); + interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "~", ""); + interface->openVerticalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec6ae40", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec70380", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec71dd0", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec73a30", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec79a20", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec7b6c0", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec7d490", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec7f0c0", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph8, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec80f20", &fbargraph8, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph9, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec88f50", &fbargraph9, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph10, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec8ac60", &fbargraph10, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph11, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec8cc10", &fbargraph11, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph12, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec8e9c0", &fbargraph12, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph13, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec906d0", &fbargraph13, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph14, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec92450", &fbargraph14, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph15, "unit", "dB"); + interface->addVerticalBargraph("0x7f980ec94400", &fbargraph15, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("4"); + interface->openVerticalBox("16"); + interface->declare(&fbargraph16, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e93c860", &fbargraph16, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("17"); + interface->declare(&fbargraph17, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e93e5b0", &fbargraph17, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("18"); + interface->declare(&fbargraph18, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e940760", &fbargraph18, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("19"); + interface->declare(&fbargraph19, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e942720", &fbargraph19, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("20"); + interface->declare(&fbargraph20, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e9448f0", &fbargraph20, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("21"); + interface->declare(&fbargraph21, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e946690", &fbargraph21, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("22"); + interface->declare(&fbargraph22, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e9484f0", &fbargraph22, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("23"); + interface->declare(&fbargraph23, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e94a3c0", &fbargraph23, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("24"); + interface->declare(&fbargraph24, "unit", "dB"); + interface->addVerticalBargraph("0x7f980e94c430", &fbargraph24, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + double fSlow1 = (1 - fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fTemp0; + double fTemp1; + double fSlow7 = double(fslider2); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fslider3); + double fSlow10 = sin(fSlow9); + double fSlow11 = (1.7320508075688772 * (fSlow8 * fSlow10)); + double fSlow12 = (fConst3 / fSlow4); + double fSlow13 = (1 + fSlow12); + double fSlow14 = (fConst2 / (fSlow4 * fSlow13)); + double fSlow15 = (fConst3 / fSlow2); + double fSlow16 = (1.0 / (1 + fSlow15)); + double fSlow17 = ((fSlow3 * fSlow13) / fSlow4); + double fSlow18 = (fConst2 / fSlow2); + double fTemp2; + double fTemp3; + double fTemp4; + double fSlow19 = sin(fSlow7); + double fSlow20 = (1.7320508075688772 * fSlow19); + double fTemp5; + double fSlow21 = cos(fSlow9); + double fSlow22 = (1.7320508075688772 * (fSlow8 * fSlow21)); + double fTemp6; + double fSlow23 = faustpower<2>(fSlow8); + double fSlow24 = (2 * fSlow9); + double fSlow25 = sin(fSlow24); + double fSlow26 = (1.9364916731037085 * (fSlow23 * fSlow25)); + double fSlow27 = faustpower<2>(fSlow12); + double fSlow28 = (1 + ((fConst4 / fSlow4) + (3 * fSlow27))); + double fSlow29 = (1.0 / fSlow28); + double fSlow30 = (12 * fSlow27); + double fSlow31 = (fSlow30 + (fConst5 / fSlow4)); + double fSlow32 = faustpower<2>(fSlow15); + double fSlow33 = (1.0 / (1 + ((fConst4 / fSlow2) + (3 * fSlow32)))); + double fSlow34 = ((fSlow3 * fSlow28) / fSlow4); + double fSlow35 = (12 * fSlow32); + double fSlow36 = (fSlow35 + (fConst5 / fSlow2)); + double fTemp7; + double fTemp8; + double fTemp9; + double fSlow37 = sin((2 * fSlow7)); + double fSlow38 = (1.9364916731037085 * (fSlow37 * fSlow10)); + double fTemp10; + double fSlow39 = faustpower<2>(fSlow19); + double fSlow40 = (1.118033988749895 * ((3 * fSlow39) - 1)); + double fTemp11; + double fSlow41 = (1.9364916731037085 * (fSlow37 * fSlow21)); + double fTemp12; + double fSlow42 = cos(fSlow24); + double fSlow43 = (1.9364916731037085 * (fSlow23 * fSlow42)); + double fTemp13; + double fSlow44 = faustpower<3>(fSlow8); + double fSlow45 = (3 * fSlow9); + double fSlow46 = sin(fSlow45); + double fSlow47 = (2.091650066335189 * (fSlow44 * fSlow46)); + double fSlow48 = (1 + (fConst7 / fSlow4)); + double fSlow49 = (fConst6 / (fSlow4 * fSlow48)); + double fSlow50 = (1.0 / (1 + (fConst7 / fSlow2))); + double fSlow51 = (1.0 / (1 + ((fConst8 / fSlow2) + (6.45943269348338 * fSlow32)))); + double fSlow52 = (1 + ((fConst8 / fSlow4) + (6.45943269348338 * fSlow27))); + double fSlow53 = ((fSlow3 * fSlow52) / fSlow4); + double fSlow54 = (25.83773077393352 * fSlow32); + double fSlow55 = (fSlow54 + (fConst9 / fSlow2)); + double fSlow56 = (1.0 / fSlow52); + double fSlow57 = (25.83773077393352 * fSlow27); + double fSlow58 = (fSlow57 + (fConst9 / fSlow4)); + double fTemp14; + double fSlow59 = (fConst6 / fSlow2); + double fTemp15; + double fTemp16; + double fSlow60 = (fSlow23 * fSlow19); + double fSlow61 = (5.123475382979799 * (fSlow60 * fSlow25)); + double fTemp17; + double fSlow62 = (5 * fSlow39); + double fSlow63 = (fSlow8 * (fSlow62 - 1)); + double fSlow64 = (1.620185174601965 * (fSlow63 * fSlow10)); + double fTemp18; + double fSlow65 = (1.3228756555322954 * (fSlow19 * (fSlow62 - 3))); + double fTemp19; + double fSlow66 = (1.620185174601965 * (fSlow63 * fSlow21)); + double fTemp20; + double fSlow67 = (5.123475382979799 * (fSlow60 * fSlow42)); + double fTemp21; + double fSlow68 = cos(fSlow45); + double fSlow69 = (2.091650066335189 * (fSlow44 * fSlow68)); + double fTemp22; + double fSlow70 = faustpower<4>(fSlow8); + double fSlow71 = (4 * fSlow9); + double fSlow72 = (2.218529918662356 * (fSlow70 * sin(fSlow71))); + double fSlow73 = (1 + ((fConst10 / fSlow4) + (9.1401308902779 * fSlow27))); + double fSlow74 = (1.0 / fSlow73); + double fSlow75 = (36.5605235611116 * fSlow27); + double fSlow76 = ((fConst11 / fSlow4) + fSlow75); + double fSlow77 = (1.0 / (1 + ((9.1401308902779 * fSlow32) + (fConst10 / fSlow2)))); + double fSlow78 = (1.0 / (1 + ((fConst12 / fSlow2) + (11.4878004768713 * fSlow32)))); + double fSlow79 = (1 + ((fConst12 / fSlow4) + (11.4878004768713 * fSlow27))); + double fSlow80 = ((fSlow3 * fSlow79) / fSlow4); + double fSlow81 = (45.9512019074852 * fSlow32); + double fSlow82 = (fSlow81 + (fConst13 / fSlow2)); + double fSlow83 = (1.0 / fSlow79); + double fSlow84 = (45.9512019074852 * fSlow27); + double fSlow85 = (fSlow84 + (fConst13 / fSlow4)); + double fTemp23; + double fSlow86 = (36.5605235611116 * fSlow32); + double fSlow87 = (fSlow86 + (fConst11 / fSlow2)); + double fTemp24; + double fTemp25; + double fTemp26; + double fSlow88 = (fSlow44 * fSlow19); + double fSlow89 = (6.274950199005566 * (fSlow88 * fSlow46)); + double fTemp27; + double fSlow90 = (7 * fSlow39); + double fSlow91 = (fSlow23 * (fSlow90 - 1)); + double fSlow92 = (1.6770509831248424 * (fSlow91 * fSlow25)); + double fTemp28; + double fSlow93 = (fSlow37 * (fSlow90 - 3)); + double fSlow94 = (1.1858541225631423 * (fSlow93 * fSlow10)); + double fTemp29; + double fSlow95 = (0.375 * (3 + (fSlow39 * ((35 * fSlow39) - 30)))); + double fTemp30; + double fSlow96 = (1.1858541225631423 * (fSlow93 * fSlow21)); + double fTemp31; + double fSlow97 = (1.6770509831248424 * (fSlow91 * fSlow42)); + double fTemp32; + double fSlow98 = (6.274950199005566 * (fSlow88 * fSlow68)); + double fTemp33; + double fSlow99 = (2.218529918662356 * (fSlow70 * cos(fSlow71))); + double fTemp34; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAEncoder5.cpp b/source/HOAUGens/HOAEncoder5.cpp new file mode 100644 index 0000000000..952b6ce16c --- /dev/null +++ b/source/HOAUGens/HOAEncoder5.cpp @@ -0,0 +1,1875 @@ +//---------------------------------------------------------- +// name: "HOAEncoder5" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline float faustpower(float x) { return powf(x,N); } +template inline double faustpower(double x) { return pow(x,N); } +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + + protected: + + int fSamplingFreq; + + public: + + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* ui_interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void instanceInit(int samplingRate) = 0; + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +//---------------------------------------------------------------- +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +//---------------------------------------------------------------- + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2(int x) { int r=0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT /* NOP */ +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + int iConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec6[2]; + FAUSTFLOAT fbargraph2; + double fRec7[2]; + FAUSTFLOAT fbargraph3; + double fConst4; + double fConst5; + double fRec12[2]; + double fRec13[2]; + double fRec11[2]; + double fRec10[2]; + double fVec0[2]; + double fRec9[2]; + double fRec8[2]; + FAUSTFLOAT fbargraph4; + double fRec14[2]; + FAUSTFLOAT fbargraph5; + double fRec15[2]; + FAUSTFLOAT fbargraph6; + double fRec16[2]; + FAUSTFLOAT fbargraph7; + double fRec17[2]; + FAUSTFLOAT fbargraph8; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fRec23[2]; + double fRec24[2]; + double fRec22[2]; + double fRec21[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fbargraph9; + double fRec27[2]; + FAUSTFLOAT fbargraph10; + double fRec28[2]; + FAUSTFLOAT fbargraph11; + double fRec29[2]; + FAUSTFLOAT fbargraph12; + double fRec30[2]; + FAUSTFLOAT fbargraph13; + double fRec31[2]; + FAUSTFLOAT fbargraph14; + double fRec32[2]; + FAUSTFLOAT fbargraph15; + double fConst10; + double fConst11; + double fConst12; + double fRec38[2]; + double fRec39[2]; + double fRec37[2]; + double fRec40[2]; + double fVec2[2]; + double fRec41[2]; + double fConst13; + double fRec42[2]; + double fRec43[2]; + double fRec36[2]; + double fRec35[2]; + double fVec3[2]; + double fRec34[2]; + double fRec33[2]; + FAUSTFLOAT fbargraph16; + double fRec44[2]; + FAUSTFLOAT fbargraph17; + double fRec45[2]; + FAUSTFLOAT fbargraph18; + double fRec46[2]; + FAUSTFLOAT fbargraph19; + double fRec47[2]; + FAUSTFLOAT fbargraph20; + double fRec48[2]; + FAUSTFLOAT fbargraph21; + double fRec49[2]; + FAUSTFLOAT fbargraph22; + double fRec50[2]; + FAUSTFLOAT fbargraph23; + double fRec51[2]; + FAUSTFLOAT fbargraph24; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fRec57[2]; + double fRec58[2]; + double fRec56[2]; + double fRec59[2]; + double fVec4[2]; + double fRec60[2]; + double fConst19; + double fRec61[2]; + double fRec62[2]; + double fRec55[2]; + double fRec63[2]; + double fVec5[2]; + double fRec64[2]; + double fRec65[2]; + double fRec54[2]; + double fRec53[2]; + double fRec52[2]; + FAUSTFLOAT fbargraph25; + double fRec66[2]; + FAUSTFLOAT fbargraph26; + double fRec67[2]; + FAUSTFLOAT fbargraph27; + double fRec68[2]; + FAUSTFLOAT fbargraph28; + double fRec69[2]; + FAUSTFLOAT fbargraph29; + double fRec70[2]; + FAUSTFLOAT fbargraph30; + double fRec71[2]; + FAUSTFLOAT fbargraph31; + double fRec72[2]; + FAUSTFLOAT fbargraph32; + double fRec73[2]; + FAUSTFLOAT fbargraph33; + double fRec74[2]; + FAUSTFLOAT fbargraph34; + double fRec75[2]; + FAUSTFLOAT fbargraph35; + public: + static void metadata(Meta* m) { + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("math.lib/name", "Math Library"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/version", "1.0"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("name", "HOAEncoder5"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + } + + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 36; } + virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } + virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = (8e+01 / double(iConst0)); + fcheckbox0 = 0.0; + fentry0 = 1.07; + fslider0 = 2.0; + fslider1 = 0.0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + fslider2 = 0.0; + fslider3 = 0.0; + fConst2 = (3.4e+02 / double(iConst0)); + fConst3 = (1.7e+02 / double(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + fConst4 = (5.1e+02 / double(iConst0)); + fConst5 = (1.02e+03 / double(iConst0)); + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + fConst6 = (789.5430205728705 / double(iConst0)); + fConst7 = (394.7715102864353 / double(iConst0)); + fConst8 = (625.2284897135664 / double(iConst0)); + fConst9 = (1250.4569794271329 / double(iConst0)); + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + fConst10 = (984.7116049589241 / double(iConst0)); + fConst11 = (715.2883950410759 / double(iConst0)); + fConst12 = (1430.5767900821518 / double(iConst0)); + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + fConst13 = (1969.4232099178482 / double(iConst0)); + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + fConst14 = (1239.8911224120607 / double(iConst0)); + fConst15 = (619.9455612060303 / double(iConst0)); + fConst16 = (1139.6651757122002 / double(iConst0)); + fConst17 = (790.3892630817644 / double(iConst0)); + fConst18 = (1580.7785261635288 / double(iConst0)); + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fVec4[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + fConst19 = (2279.3303514244003 / double(iConst0)); + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fVec5[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openHorizontalBox("0x00"); + interface->openVerticalBox("Parameters"); + interface->openHorizontalBox("Source 0"); + interface->declare(&fslider1, "0+1", ""); + interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + interface->declare(&fslider1, "style", "knob"); + interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + interface->declare(&fslider0, "0+2", ""); + interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + interface->declare(&fslider0, "style", "knob"); + interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + interface->declare(&fslider3, "0+3", ""); + interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + interface->declare(&fslider3, "style", "knob"); + interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(&fslider2, "0+4", ""); + interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + interface->declare(&fslider2, "style", "knob"); + interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + interface->declare(0, "0+5", ""); + interface->openHorizontalBox("Spherical Wave"); + interface->addCheckButton("Yes", &fcheckbox0); + interface->closeBox(); + interface->declare(&fentry0, "~", ""); + interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + interface->closeBox(); + interface->closeBox(); + interface->declare(0, "~", ""); + interface->openVerticalBox("Outputs"); + interface->openHorizontalBox("0"); + interface->openVerticalBox("0"); + interface->declare(&fbargraph0, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af50d40", &fbargraph0, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("1"); + interface->openVerticalBox("1"); + interface->declare(&fbargraph1, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af563c0", &fbargraph1, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("2"); + interface->declare(&fbargraph2, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af57e00", &fbargraph2, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("3"); + interface->declare(&fbargraph3, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af59b50", &fbargraph3, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("2"); + interface->openVerticalBox("4"); + interface->declare(&fbargraph4, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af5fd70", &fbargraph4, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("5"); + interface->declare(&fbargraph5, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af61a60", &fbargraph5, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("6"); + interface->declare(&fbargraph6, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af62f50", &fbargraph6, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("7"); + interface->declare(&fbargraph7, "unit", "dB"); + interface->addVerticalBargraph("0x7fc119601550", &fbargraph7, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("8"); + interface->declare(&fbargraph8, "unit", "dB"); + interface->addVerticalBargraph("0x7fc119602db0", &fbargraph8, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("3"); + interface->openVerticalBox("9"); + interface->declare(&fbargraph9, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af67b20", &fbargraph9, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("10"); + interface->declare(&fbargraph10, "unit", "dB"); + interface->addVerticalBargraph("0x7fc119608860", &fbargraph10, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("11"); + interface->declare(&fbargraph11, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af6a2c0", &fbargraph11, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("12"); + interface->declare(&fbargraph12, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11ab85d90", &fbargraph12, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("13"); + interface->declare(&fbargraph13, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af6caa0", &fbargraph13, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("14"); + interface->declare(&fbargraph14, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11ae007d0", &fbargraph14, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("15"); + interface->declare(&fbargraph15, "unit", "dB"); + interface->addVerticalBargraph("0x7fc1196099a0", &fbargraph15, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("4"); + interface->openVerticalBox("16"); + interface->declare(&fbargraph16, "unit", "dB"); + interface->addVerticalBargraph("0x7fc1195a6d10", &fbargraph16, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("17"); + interface->declare(&fbargraph17, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af72b50", &fbargraph17, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("18"); + interface->declare(&fbargraph18, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af743b0", &fbargraph18, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("19"); + interface->declare(&fbargraph19, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af76280", &fbargraph19, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("20"); + interface->declare(&fbargraph20, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af78490", &fbargraph20, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("21"); + interface->declare(&fbargraph21, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af7a230", &fbargraph21, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("22"); + interface->declare(&fbargraph22, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af7c090", &fbargraph22, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("23"); + interface->declare(&fbargraph23, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af7df60", &fbargraph23, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("24"); + interface->declare(&fbargraph24, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af80070", &fbargraph24, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->openHorizontalBox("5"); + interface->openVerticalBox("25"); + interface->declare(&fbargraph25, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af89290", &fbargraph25, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("26"); + interface->declare(&fbargraph26, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af8b060", &fbargraph26, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("27"); + interface->declare(&fbargraph27, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af8cf70", &fbargraph27, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("28"); + interface->declare(&fbargraph28, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af8ed40", &fbargraph28, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("29"); + interface->declare(&fbargraph29, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af91150", &fbargraph29, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("30"); + interface->declare(&fbargraph30, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af93620", &fbargraph30, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("31"); + interface->declare(&fbargraph31, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af95440", &fbargraph31, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("32"); + interface->declare(&fbargraph32, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af97380", &fbargraph32, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("33"); + interface->declare(&fbargraph33, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af99330", &fbargraph33, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("34"); + interface->declare(&fbargraph34, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af9b350", &fbargraph34, -7e+01, 6.0); + interface->closeBox(); + interface->openVerticalBox("35"); + interface->declare(&fbargraph35, "unit", "dB"); + interface->addVerticalBargraph("0x7fc11af9d4d0", &fbargraph35, -7e+01, 6.0); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fcheckbox0); + double fSlow1 = double(fentry0); + double fSlow2 = double(fslider0); + double fSlow3 = (1 - fSlow0); + double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); + double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fTemp0; + double fTemp1; + double fSlow6 = double(fslider2); + double fSlow7 = cos(fSlow6); + double fSlow8 = double(fslider3); + double fSlow9 = sin(fSlow8); + double fSlow10 = (fSlow7 * fSlow9); + double fSlow11 = (1.7320508075688772 * fSlow10); + double fTemp2; + double fSlow12 = (fConst3 / fSlow2); + double fSlow13 = (1 + fSlow12); + double fSlow14 = (fConst2 / (fSlow13 * fSlow2)); + double fSlow15 = (fConst3 / fSlow1); + double fSlow16 = (1.0 / (1 + fSlow15)); + double fSlow17 = (((fSlow13 * fSlow0) * fSlow1) / fSlow2); + double fSlow18 = (fConst2 / fSlow1); + double fTemp3; + double fTemp4; + double fSlow19 = sin(fSlow6); + double fSlow20 = (1.7320508075688772 * fSlow19); + double fTemp5; + double fSlow21 = cos(fSlow8); + double fSlow22 = (fSlow7 * fSlow21); + double fSlow23 = (1.7320508075688772 * fSlow22); + double fTemp6; + double fSlow24 = faustpower<2>(fSlow7); + double fSlow25 = (2 * fSlow8); + double fSlow26 = sin(fSlow25); + double fSlow27 = (fSlow24 * fSlow26); + double fSlow28 = (1.9364916731037085 * fSlow27); + double fSlow29 = faustpower<2>(fSlow12); + double fSlow30 = (1 + ((fConst4 / fSlow2) + (3 * fSlow29))); + double fSlow31 = (1.0 / fSlow30); + double fSlow32 = (12 * fSlow29); + double fSlow33 = faustpower<2>(fSlow15); + double fSlow34 = (1.0 / (1 + ((fConst4 / fSlow1) + (3 * fSlow33)))); + double fSlow35 = (((fSlow30 * fSlow0) * fSlow1) / fSlow2); + double fSlow36 = (12 * fSlow33); + double fSlow37 = (fSlow36 + (fConst5 / fSlow1)); + double fTemp7; + double fSlow38 = ((fConst5 / fSlow2) + fSlow32); + double fTemp8; + double fTemp9; + double fSlow39 = sin((2 * fSlow6)); + double fSlow40 = (fSlow9 * fSlow39); + double fSlow41 = (1.9364916731037085 * fSlow40); + double fTemp10; + double fSlow42 = faustpower<2>(fSlow19); + double fSlow43 = ((3 * fSlow42) - 1); + double fSlow44 = (1.118033988749895 * fSlow43); + double fTemp11; + double fSlow45 = (fSlow21 * fSlow39); + double fSlow46 = (1.9364916731037085 * fSlow45); + double fTemp12; + double fSlow47 = cos(fSlow25); + double fSlow48 = (fSlow24 * fSlow47); + double fSlow49 = (1.9364916731037085 * fSlow48); + double fTemp13; + double fSlow50 = faustpower<3>(fSlow7); + double fSlow51 = (3 * fSlow8); + double fSlow52 = sin(fSlow51); + double fSlow53 = (fSlow50 * fSlow52); + double fSlow54 = (2.091650066335189 * fSlow53); + double fSlow55 = (1 + (fConst7 / fSlow2)); + double fSlow56 = (fConst6 / (fSlow55 * fSlow2)); + double fSlow57 = (1.0 / (1 + (fConst7 / fSlow1))); + double fSlow58 = (1 + ((fConst8 / fSlow2) + (6.45943269348338 * fSlow29))); + double fSlow59 = (1.0 / fSlow58); + double fSlow60 = (25.83773077393352 * fSlow29); + double fSlow61 = ((fConst9 / fSlow2) + fSlow60); + double fSlow62 = (1.0 / (1 + ((fConst8 / fSlow1) + (6.45943269348338 * fSlow33)))); + double fSlow63 = (((fSlow58 * fSlow0) * fSlow1) / fSlow2); + double fSlow64 = (25.83773077393352 * fSlow33); + double fSlow65 = (fSlow64 + (fConst9 / fSlow1)); + double fTemp14; + double fSlow66 = (fConst6 / fSlow1); + double fTemp15; + double fTemp16; + double fSlow67 = (fSlow24 * fSlow19); + double fSlow68 = (fSlow67 * fSlow26); + double fSlow69 = (5.123475382979799 * fSlow68); + double fTemp17; + double fSlow70 = (5 * fSlow42); + double fSlow71 = (fSlow70 - 1); + double fSlow72 = (1.620185174601965 * (fSlow10 * fSlow71)); + double fTemp18; + double fSlow73 = (1.3228756555322954 * (fSlow19 * (fSlow70 - 3))); + double fTemp19; + double fSlow74 = (1.620185174601965 * (fSlow22 * fSlow71)); + double fTemp20; + double fSlow75 = (fSlow67 * fSlow47); + double fSlow76 = (5.123475382979799 * fSlow75); + double fTemp21; + double fSlow77 = cos(fSlow51); + double fSlow78 = (fSlow50 * fSlow77); + double fSlow79 = (2.091650066335189 * fSlow78); + double fTemp22; + double fSlow80 = faustpower<4>(fSlow7); + double fSlow81 = (4 * fSlow8); + double fSlow82 = sin(fSlow81); + double fSlow83 = (2.218529918662356 * (fSlow80 * fSlow82)); + double fSlow84 = (1 + ((fConst10 / fSlow2) + (9.1401308902779 * fSlow29))); + double fSlow85 = (1.0 / fSlow84); + double fSlow86 = (36.5605235611116 * fSlow29); + double fSlow87 = (1.0 / (1 + ((9.1401308902779 * fSlow33) + (fConst10 / fSlow1)))); + double fSlow88 = (1.0 / (1 + ((fConst11 / fSlow1) + (11.4878004768713 * fSlow33)))); + double fSlow89 = (1 + ((fConst11 / fSlow2) + (11.4878004768713 * fSlow29))); + double fSlow90 = (((fSlow89 * fSlow0) * fSlow1) / fSlow2); + double fSlow91 = (45.9512019074852 * fSlow33); + double fSlow92 = (fSlow91 + (fConst12 / fSlow1)); + double fSlow93 = (1.0 / fSlow89); + double fSlow94 = (45.9512019074852 * fSlow29); + double fSlow95 = (fSlow94 + (fConst12 / fSlow2)); + double fTemp23; + double fSlow96 = (36.5605235611116 * fSlow33); + double fSlow97 = (fSlow96 + (fConst13 / fSlow1)); + double fTemp24; + double fSlow98 = ((fConst13 / fSlow2) + fSlow86); + double fTemp25; + double fTemp26; + double fSlow99 = (fSlow50 * fSlow19); + double fSlow100 = (6.274950199005566 * (fSlow99 * fSlow52)); + double fTemp27; + double fSlow101 = (7 * fSlow42); + double fSlow102 = (fSlow101 - 1); + double fSlow103 = (1.6770509831248424 * (fSlow27 * fSlow102)); + double fTemp28; + double fSlow104 = (fSlow101 - 3); + double fSlow105 = (1.1858541225631423 * (fSlow40 * fSlow104)); + double fTemp29; + double fSlow106 = (0.375 * (3 + (fSlow42 * ((35 * fSlow42) - 30)))); + double fTemp30; + double fSlow107 = (1.1858541225631423 * (fSlow45 * fSlow104)); + double fTemp31; + double fSlow108 = (1.6770509831248424 * (fSlow48 * fSlow102)); + double fTemp32; + double fSlow109 = (6.274950199005566 * (fSlow99 * fSlow77)); + double fTemp33; + double fSlow110 = cos(fSlow81); + double fSlow111 = (2.218529918662356 * (fSlow80 * fSlow110)); + double fTemp34; + double fSlow112 = faustpower<5>(fSlow7); + double fSlow113 = (5 * fSlow8); + double fSlow114 = (2.3268138086232857 * (fSlow112 * sin(fSlow113))); + double fSlow115 = (1 + (fConst15 / fSlow2)); + double fSlow116 = (fConst14 / (fSlow115 * fSlow2)); + double fSlow117 = (1.0 / (1 + (fConst15 / fSlow1))); + double fSlow118 = (1.0 / (1 + ((14.2724805132801 * fSlow33) + (fConst16 / fSlow1)))); + double fSlow119 = (1 + ((fConst16 / fSlow2) + (14.2724805132801 * fSlow29))); + double fSlow120 = (1.0 / (1 + ((fConst17 / fSlow1) + (18.1563153134523 * fSlow33)))); + double fSlow121 = (1 + ((fConst17 / fSlow2) + (18.1563153134523 * fSlow29))); + double fSlow122 = (((fSlow121 * fSlow0) * fSlow1) / fSlow2); + double fSlow123 = (72.6252612538092 * fSlow33); + double fSlow124 = (fSlow123 + (fConst18 / fSlow1)); + double fSlow125 = (1.0 / fSlow121); + double fSlow126 = (72.6252612538092 * fSlow29); + double fSlow127 = (fSlow126 + (fConst18 / fSlow2)); + double fTemp35; + double fSlow128 = (57.0899220531204 * fSlow33); + double fSlow129 = (fSlow128 + (fConst19 / fSlow1)); + double fSlow130 = (1.0 / fSlow119); + double fSlow131 = (57.0899220531204 * fSlow29); + double fSlow132 = ((fConst19 / fSlow2) + fSlow131); + double fTemp36; + double fSlow133 = (fConst14 / fSlow1); + double fTemp37; + double fTemp38; + double fSlow134 = (fSlow80 * fSlow19); + double fSlow135 = (7.358031326380718 * (fSlow134 * fSlow82)); + double fTemp39; + double fSlow136 = ((9 * fSlow42) - 1); + double fSlow137 = (1.734304615688951 * (fSlow53 * fSlow136)); + double fTemp40; + double fSlow138 = (8.496322733983215 * (fSlow68 * fSlow43)); + double fTemp41; + double fSlow139 = (1 + (fSlow42 * ((21 * fSlow42) - 14))); + double fSlow140 = (1.6056540723331412 * (fSlow10 * fSlow139)); + double fTemp42; + double fSlow141 = (0.414578098794425 * (fSlow19 * (15 + (fSlow42 * ((63 * fSlow42) - 70))))); + double fTemp43; + double fSlow142 = (1.6056540723331412 * (fSlow22 * fSlow139)); + double fTemp44; + double fSlow143 = (8.496322733983215 * (fSlow75 * fSlow43)); + double fTemp45; + double fSlow144 = (1.734304615688951 * (fSlow78 * fSlow136)); + double fTemp46; + double fSlow145 = (7.358031326380718 * (fSlow134 * fSlow110)); + double fTemp47; + double fSlow146 = (2.3268138086232857 * (fSlow112 * cos(fSlow113))); + double fTemp48; + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + for (int i=0; iclassInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP.getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // init dsp + unit->mDSP.instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP.buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP.getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) + && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } +#if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); +#endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + FAUSTCLASS::metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev061.cpp b/source/HOAUGens/HOAMicLebedev061.cpp new file mode 100644 index 0000000000..1f90aa8a32 --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev061.cpp @@ -0,0 +1,1180 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev061" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec6[2]; + FAUSTFLOAT fbargraph5; + FAUSTFLOAT fslider0; + double fRec7[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph6; + double fRec8[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev061"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 6; } + virtual int getNumOutputs() { return 4; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d464a940", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d464bd10", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d464d1d0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d464e7a0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d464fda0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d4651460", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d4653b10", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d46555f0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d4656db0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa1d4658ae0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev261.cpp b/source/HOAUGens/HOAMicLebedev261.cpp new file mode 100644 index 0000000000..d239b15f83 --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev261.cpp @@ -0,0 +1,1446 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev261" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec6[2]; + FAUSTFLOAT fbargraph5; + double fRec7[2]; + FAUSTFLOAT fbargraph6; + double fRec8[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + double fRec11[2]; + FAUSTFLOAT fbargraph10; + double fRec12[2]; + FAUSTFLOAT fbargraph11; + double fRec13[2]; + FAUSTFLOAT fbargraph12; + double fRec14[2]; + FAUSTFLOAT fbargraph13; + double fRec15[2]; + FAUSTFLOAT fbargraph14; + double fRec16[2]; + FAUSTFLOAT fbargraph15; + double fRec17[2]; + FAUSTFLOAT fbargraph16; + double fRec18[2]; + FAUSTFLOAT fbargraph17; + double fRec19[2]; + FAUSTFLOAT fbargraph18; + double fRec20[2]; + FAUSTFLOAT fbargraph19; + double fRec21[2]; + FAUSTFLOAT fbargraph20; + double fRec22[2]; + FAUSTFLOAT fbargraph21; + double fRec23[2]; + FAUSTFLOAT fbargraph22; + double fRec24[2]; + FAUSTFLOAT fbargraph23; + double fRec25[2]; + FAUSTFLOAT fbargraph24; + double fRec26[2]; + FAUSTFLOAT fbargraph25; + FAUSTFLOAT fslider0; + double fRec27[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph26; + double fRec28[2]; + FAUSTFLOAT fbargraph27; + double fRec29[2]; + FAUSTFLOAT fbargraph28; + double fRec30[2]; + FAUSTFLOAT fbargraph29; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev261"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 26; } + virtual int getNumOutputs() { return 4; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f426e30", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f428200", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f429670", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f42ac20", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f42c220", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f42d8e0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f42f1d0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f430860", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f432010", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f433890", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1c09e0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1c2260", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1c3c50", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1c5690", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1c71b0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1c8cb0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1ca860", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1cc4f0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1ce5a0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1d0140", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1d1e60", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1d3c40", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1d5a80", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1d78f0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1d9820", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1db7a0", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1de9a0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1e2120", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1e47c0", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbd9f1e7c30", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev262.cpp b/source/HOAUGens/HOAMicLebedev262.cpp new file mode 100644 index 0000000000..bccad22c33 --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev262.cpp @@ -0,0 +1,1521 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev262" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec6[2]; + FAUSTFLOAT fbargraph5; + double fRec7[2]; + FAUSTFLOAT fbargraph6; + double fRec8[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + double fRec11[2]; + FAUSTFLOAT fbargraph10; + double fRec12[2]; + FAUSTFLOAT fbargraph11; + double fRec13[2]; + FAUSTFLOAT fbargraph12; + double fRec14[2]; + FAUSTFLOAT fbargraph13; + double fRec15[2]; + FAUSTFLOAT fbargraph14; + double fRec16[2]; + FAUSTFLOAT fbargraph15; + double fRec17[2]; + FAUSTFLOAT fbargraph16; + double fRec18[2]; + FAUSTFLOAT fbargraph17; + double fRec19[2]; + FAUSTFLOAT fbargraph18; + double fRec20[2]; + FAUSTFLOAT fbargraph19; + double fRec21[2]; + FAUSTFLOAT fbargraph20; + double fRec22[2]; + FAUSTFLOAT fbargraph21; + double fRec23[2]; + FAUSTFLOAT fbargraph22; + double fRec24[2]; + FAUSTFLOAT fbargraph23; + double fRec25[2]; + FAUSTFLOAT fbargraph24; + double fRec26[2]; + FAUSTFLOAT fbargraph25; + FAUSTFLOAT fslider0; + double fRec27[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph26; + double fRec28[2]; + FAUSTFLOAT fbargraph27; + double fRec29[2]; + FAUSTFLOAT fbargraph28; + double fRec30[2]; + FAUSTFLOAT fbargraph29; + double fRec31[2]; + FAUSTFLOAT fbargraph30; + double fRec32[2]; + FAUSTFLOAT fbargraph31; + double fRec33[2]; + FAUSTFLOAT fbargraph32; + double fRec34[2]; + FAUSTFLOAT fbargraph33; + double fRec35[2]; + FAUSTFLOAT fbargraph34; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev262"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 26; } + virtual int getNumOutputs() { return 9; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81a1b50", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81a2f20", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81a4390", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81a5940", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81a6f40", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81a8600", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81a9ef0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81ab580", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81acd30", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81ae5b0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81afeb0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81b17e0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81b31d0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81b4c10", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81b6730", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81b8230", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81b9de0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81bba70", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81bdab0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81bf660", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81c1380", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81c3160", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81c4fa0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81c6e10", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81c8d40", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81cacc0", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81cde00", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81d1600", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81d3a50", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81d7560", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81da9e0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81dd5d0", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81e05b0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81e2d10", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8fb81e68f0", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev263.cpp b/source/HOAUGens/HOAMicLebedev263.cpp new file mode 100644 index 0000000000..b1bd910a8b --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev263.cpp @@ -0,0 +1,1631 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev263" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec6[2]; + FAUSTFLOAT fbargraph5; + double fRec7[2]; + FAUSTFLOAT fbargraph6; + double fRec8[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + double fRec11[2]; + FAUSTFLOAT fbargraph10; + double fRec12[2]; + FAUSTFLOAT fbargraph11; + double fRec13[2]; + FAUSTFLOAT fbargraph12; + double fRec14[2]; + FAUSTFLOAT fbargraph13; + double fRec15[2]; + FAUSTFLOAT fbargraph14; + double fRec16[2]; + FAUSTFLOAT fbargraph15; + double fRec17[2]; + FAUSTFLOAT fbargraph16; + double fRec18[2]; + FAUSTFLOAT fbargraph17; + double fRec19[2]; + FAUSTFLOAT fbargraph18; + double fRec20[2]; + FAUSTFLOAT fbargraph19; + double fRec21[2]; + FAUSTFLOAT fbargraph20; + double fRec22[2]; + FAUSTFLOAT fbargraph21; + double fRec23[2]; + FAUSTFLOAT fbargraph22; + double fRec24[2]; + FAUSTFLOAT fbargraph23; + double fRec25[2]; + FAUSTFLOAT fbargraph24; + double fRec26[2]; + FAUSTFLOAT fbargraph25; + FAUSTFLOAT fslider0; + double fRec27[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph26; + double fRec28[2]; + FAUSTFLOAT fbargraph27; + double fRec29[2]; + FAUSTFLOAT fbargraph28; + double fRec30[2]; + FAUSTFLOAT fbargraph29; + double fRec31[2]; + FAUSTFLOAT fbargraph30; + double fRec32[2]; + FAUSTFLOAT fbargraph31; + double fRec33[2]; + FAUSTFLOAT fbargraph32; + double fRec34[2]; + FAUSTFLOAT fbargraph33; + double fRec35[2]; + FAUSTFLOAT fbargraph34; + double fRec36[2]; + FAUSTFLOAT fbargraph35; + double fRec37[2]; + FAUSTFLOAT fbargraph36; + double fRec38[2]; + FAUSTFLOAT fbargraph37; + double fRec39[2]; + FAUSTFLOAT fbargraph38; + double fRec40[2]; + FAUSTFLOAT fbargraph39; + double fRec41[2]; + FAUSTFLOAT fbargraph40; + double fRec42[2]; + FAUSTFLOAT fbargraph41; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev263"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 26; } + virtual int getNumOutputs() { return 16; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb263a0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb27770", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb28be0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb2a180", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb2b780", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb2ce40", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb2e730", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb2fdc0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb31570", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb32df0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb346f0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb36020", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb37a10", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb39450", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb3af70", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb3ca70", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb3e620", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb402b0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb422f0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb43ea0", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb45bc0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb479a0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb497e0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb4b650", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb4d580", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb4f500", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb52640", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb56060", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb58370", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb5bef0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb5f580", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb61e00", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb64dc0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb676e0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb6b4e0", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb6f430", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb71740", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadeb74870", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadaf93340", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadaf96e50", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadaf99ea0", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffadaf9dd40", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev501.cpp b/source/HOAUGens/HOAMicLebedev501.cpp new file mode 100644 index 0000000000..dcb027cb8e --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev501.cpp @@ -0,0 +1,1157 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev501" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + double fRec0[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev501"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 50; } + virtual int getNumOutputs() { return 4; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* input36 = input[36]; + FAUSTFLOAT* input37 = input[37]; + FAUSTFLOAT* input38 = input[38]; + FAUSTFLOAT* input39 = input[39]; + FAUSTFLOAT* input40 = input[40]; + FAUSTFLOAT* input41 = input[41]; + FAUSTFLOAT* input42 = input[42]; + FAUSTFLOAT* input43 = input[43]; + FAUSTFLOAT* input44 = input[44]; + FAUSTFLOAT* input45 = input[45]; + FAUSTFLOAT* input46 = input[46]; + FAUSTFLOAT* input47 = input[47]; + FAUSTFLOAT* input48 = input[48]; + FAUSTFLOAT* input49 = input[49]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev502.cpp b/source/HOAUGens/HOAMicLebedev502.cpp new file mode 100644 index 0000000000..b115472acd --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev502.cpp @@ -0,0 +1,1187 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev502" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + double fRec0[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev502"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 50; } + virtual int getNumOutputs() { return 9; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* input36 = input[36]; + FAUSTFLOAT* input37 = input[37]; + FAUSTFLOAT* input38 = input[38]; + FAUSTFLOAT* input39 = input[39]; + FAUSTFLOAT* input40 = input[40]; + FAUSTFLOAT* input41 = input[41]; + FAUSTFLOAT* input42 = input[42]; + FAUSTFLOAT* input43 = input[43]; + FAUSTFLOAT* input44 = input[44]; + FAUSTFLOAT* input45 = input[45]; + FAUSTFLOAT* input46 = input[46]; + FAUSTFLOAT* input47 = input[47]; + FAUSTFLOAT* input48 = input[48]; + FAUSTFLOAT* input49 = input[49]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev503.cpp b/source/HOAUGens/HOAMicLebedev503.cpp new file mode 100644 index 0000000000..013e46a5df --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev503.cpp @@ -0,0 +1,1236 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev503" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + double fRec0[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev503"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 50; } + virtual int getNumOutputs() { return 16; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* input36 = input[36]; + FAUSTFLOAT* input37 = input[37]; + FAUSTFLOAT* input38 = input[38]; + FAUSTFLOAT* input39 = input[39]; + FAUSTFLOAT* input40 = input[40]; + FAUSTFLOAT* input41 = input[41]; + FAUSTFLOAT* input42 = input[42]; + FAUSTFLOAT* input43 = input[43]; + FAUSTFLOAT* input44 = input[44]; + FAUSTFLOAT* input45 = input[45]; + FAUSTFLOAT* input46 = input[46]; + FAUSTFLOAT* input47 = input[47]; + FAUSTFLOAT* input48 = input[48]; + FAUSTFLOAT* input49 = input[49]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev504.cpp b/source/HOAUGens/HOAMicLebedev504.cpp new file mode 100644 index 0000000000..97b2828b8d --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev504.cpp @@ -0,0 +1,1281 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev504" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + double fRec0[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev504"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 50; } + virtual int getNumOutputs() { return 25; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* input36 = input[36]; + FAUSTFLOAT* input37 = input[37]; + FAUSTFLOAT* input38 = input[38]; + FAUSTFLOAT* input39 = input[39]; + FAUSTFLOAT* input40 = input[40]; + FAUSTFLOAT* input41 = input[41]; + FAUSTFLOAT* input42 = input[42]; + FAUSTFLOAT* input43 = input[43]; + FAUSTFLOAT* input44 = input[44]; + FAUSTFLOAT* input45 = input[45]; + FAUSTFLOAT* input46 = input[46]; + FAUSTFLOAT* input47 = input[47]; + FAUSTFLOAT* input48 = input[48]; + FAUSTFLOAT* input49 = input[49]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev505.cpp b/source/HOAUGens/HOAMicLebedev505.cpp new file mode 100644 index 0000000000..32160ef8af --- /dev/null +++ b/source/HOAUGens/HOAMicLebedev505.cpp @@ -0,0 +1,1313 @@ +//---------------------------------------------------------- +// name: "HOAMicLebedev505" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + double fRec0[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMicLebedev505"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 50; } + virtual int getNumOutputs() { return 36; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* input36 = input[36]; + FAUSTFLOAT* input37 = input[37]; + FAUSTFLOAT* input38 = input[38]; + FAUSTFLOAT* input39 = input[39]; + FAUSTFLOAT* input40 = input[40]; + FAUSTFLOAT* input41 = input[41]; + FAUSTFLOAT* input42 = input[42]; + FAUSTFLOAT* input43 = input[43]; + FAUSTFLOAT* input44 = input[44]; + FAUSTFLOAT* input45 = input[45]; + FAUSTFLOAT* input46 = input[46]; + FAUSTFLOAT* input47 = input[47]; + FAUSTFLOAT* input48 = input[48]; + FAUSTFLOAT* input49 = input[49]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMirror1.cpp b/source/HOAUGens/HOAMirror1.cpp new file mode 100644 index 0000000000..cdae978376 --- /dev/null +++ b/source/HOAUGens/HOAMirror1.cpp @@ -0,0 +1,1045 @@ +//---------------------------------------------------------- +// name: "HOAMirror1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fcheckbox2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMirror1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 4; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fcheckbox2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fcheckbox0); + ui_interface->addCheckButton("left-right", &fcheckbox1); + ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = (double(fcheckbox0) == 1); + int iSlow1 = int((iSlow0 & 0)); + int iSlow2 = (double(fcheckbox1) == 1); + int iSlow3 = int((iSlow2 & 0)); + int iSlow4 = (double(fcheckbox2) == 1); + int iSlow5 = int((iSlow4 & 0)); + int iSlow6 = int((iSlow2 & 1)); + int iSlow7 = int((iSlow4 & 1)); + int iSlow8 = int((iSlow0 & 1)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMirror2.cpp b/source/HOAUGens/HOAMirror2.cpp new file mode 100644 index 0000000000..8a12da57ce --- /dev/null +++ b/source/HOAUGens/HOAMirror2.cpp @@ -0,0 +1,1075 @@ +//---------------------------------------------------------- +// name: "HOAMirror2" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fcheckbox2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMirror2"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 9; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fcheckbox2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fcheckbox0); + ui_interface->addCheckButton("left-right", &fcheckbox1); + ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = (double(fcheckbox0) == 1); + int iSlow1 = int((iSlow0 & 0)); + int iSlow2 = (double(fcheckbox1) == 1); + int iSlow3 = int((iSlow2 & 0)); + int iSlow4 = (double(fcheckbox2) == 1); + int iSlow5 = int((iSlow4 & 0)); + int iSlow6 = int((iSlow2 & 1)); + int iSlow7 = int((iSlow4 & 1)); + int iSlow8 = int((iSlow0 & 1)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMirror3.cpp b/source/HOAUGens/HOAMirror3.cpp new file mode 100644 index 0000000000..ecb7119c72 --- /dev/null +++ b/source/HOAUGens/HOAMirror3.cpp @@ -0,0 +1,1117 @@ +//---------------------------------------------------------- +// name: "HOAMirror3" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fcheckbox2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMirror3"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 16; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fcheckbox2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fcheckbox0); + ui_interface->addCheckButton("left-right", &fcheckbox1); + ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = (double(fcheckbox0) == 1); + int iSlow1 = int((iSlow0 & 0)); + int iSlow2 = (double(fcheckbox1) == 1); + int iSlow3 = int((iSlow2 & 0)); + int iSlow4 = (double(fcheckbox2) == 1); + int iSlow5 = int((iSlow4 & 0)); + int iSlow6 = int((iSlow2 & 1)); + int iSlow7 = int((iSlow4 & 1)); + int iSlow8 = int((iSlow0 & 1)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMirror4.cpp b/source/HOAUGens/HOAMirror4.cpp new file mode 100644 index 0000000000..7ee7414007 --- /dev/null +++ b/source/HOAUGens/HOAMirror4.cpp @@ -0,0 +1,1171 @@ +//---------------------------------------------------------- +// name: "HOAMirror4" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fcheckbox2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMirror4"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 25; } + virtual int getNumOutputs() { return 25; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fcheckbox2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fcheckbox0); + ui_interface->addCheckButton("left-right", &fcheckbox1); + ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = (double(fcheckbox0) == 1); + int iSlow1 = int((iSlow0 & 0)); + int iSlow2 = (double(fcheckbox1) == 1); + int iSlow3 = int((iSlow2 & 0)); + int iSlow4 = (double(fcheckbox2) == 1); + int iSlow5 = int((iSlow4 & 0)); + int iSlow6 = int((iSlow2 & 1)); + int iSlow7 = int((iSlow4 & 1)); + int iSlow8 = int((iSlow0 & 1)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMirror5.cpp b/source/HOAUGens/HOAMirror5.cpp new file mode 100644 index 0000000000..c3bfde2eae --- /dev/null +++ b/source/HOAUGens/HOAMirror5.cpp @@ -0,0 +1,1237 @@ +//---------------------------------------------------------- +// name: "HOAMirror5" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fcheckbox2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAMirror5"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 36; } + virtual int getNumOutputs() { return 36; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fcheckbox2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fcheckbox0); + ui_interface->addCheckButton("left-right", &fcheckbox1); + ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + int iSlow0 = (double(fcheckbox0) == 1); + int iSlow1 = int((iSlow0 & 0)); + int iSlow2 = (double(fcheckbox1) == 1); + int iSlow3 = int((iSlow2 & 0)); + int iSlow4 = (double(fcheckbox2) == 1); + int iSlow5 = int((iSlow4 & 0)); + int iSlow6 = int((iSlow2 & 1)); + int iSlow7 = int((iSlow4 & 1)); + int iSlow8 = int((iSlow0 & 1)); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev061.cpp b/source/HOAUGens/HOAPanLebedev061.cpp new file mode 100644 index 0000000000..545d9b6163 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev061.cpp @@ -0,0 +1,1300 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev061" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fRec2[2]; + FAUSTFLOAT fcheckbox3; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec7[2]; + double fRec6[2]; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + double fRec10[2]; + double fRec9[2]; + double fRec8[2]; + double fRec12[2]; + double fRec11[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec13[2]; + FAUSTFLOAT fbargraph1; + double fRec14[2]; + FAUSTFLOAT fbargraph2; + double fRec15[2]; + FAUSTFLOAT fbargraph3; + double fRec16[2]; + FAUSTFLOAT fbargraph4; + double fRec17[2]; + FAUSTFLOAT fbargraph5; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("name", "HOAPanLebedev061"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 6; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fentry0 = 1.07; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fslider0 = 2.0; + fslider1 = 0.0; + fcheckbox2 = 0.0; + fslider2 = 2.0; + fslider3 = 0.0; + fcheckbox3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fslider6 = 0.0; + fslider7 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "0+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "0+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(&fslider3, "1+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "1+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider7, "1+3", ""); + ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider6, "1+4", ""); + ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox0); + ui_interface->addCheckButton("1", &fcheckbox3); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f93ccf3b3d0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f93ccf3ccc0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f93ccf3ecd0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f93ccf40d30", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f93ccf42e60", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f93ccf44bf0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fentry0); + double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); + double fSlow2 = double(fcheckbox1); + double fSlow3 = double(fslider0); + double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); + double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow6 = double(fcheckbox2); + double fSlow7 = double(fslider2); + double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); + double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow10 = (3 * (1 - double(fcheckbox3))); + double fSlow11 = double(fslider4); + double fSlow12 = sin(fSlow11); + double fSlow13 = cos(fSlow11); + double fSlow14 = double(fslider5); + double fSlow15 = (fSlow13 * cos(fSlow14)); + double fSlow16 = (6.123233995736766e-17 * fSlow15); + double fSlow17 = (fSlow12 + fSlow16); + double fSlow18 = ((fConst3 / fSlow3) + 1); + double fSlow19 = (fConst2 / (fSlow3 * fSlow18)); + double fSlow20 = (1.0 / ((fConst3 / fSlow0) + 1)); + double fSlow21 = (((fSlow2 * fSlow0) * fSlow18) / fSlow3); + double fSlow22 = (fConst2 / fSlow0); + double fSlow23 = ((1 - fSlow2) * fSlow0); + double fSlow24 = double(fslider6); + double fSlow25 = sin(fSlow24); + double fSlow26 = cos(fSlow24); + double fSlow27 = double(fslider7); + double fSlow28 = (fSlow26 * cos(fSlow27)); + double fSlow29 = (6.123233995736766e-17 * fSlow28); + double fSlow30 = (fSlow25 + fSlow29); + double fSlow31 = ((fConst3 / fSlow7) + 1); + double fSlow32 = (fConst2 / (fSlow7 * fSlow31)); + double fSlow33 = (((fSlow0 * fSlow6) * fSlow31) / fSlow7); + double fSlow34 = (fSlow0 * (1 - fSlow6)); + double fSlow35 = (fSlow26 * cos((fSlow27 + -1.5707963267948966))); + double fSlow36 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); + double fSlow37 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); + double fSlow38 = (fSlow26 * cos((fSlow27 + -3.141592653589793))); + double fSlow39 = (fSlow26 * cos((fSlow27 + -4.71238898038469))); + double fSlow40 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); + double fSlow41 = (fSlow29 - fSlow25); + double fSlow42 = (fSlow16 - fSlow12); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev261.cpp b/source/HOAUGens/HOAPanLebedev261.cpp new file mode 100644 index 0000000000..28cca45f97 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev261.cpp @@ -0,0 +1,1640 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev261" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fRec2[2]; + FAUSTFLOAT fcheckbox3; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec7[2]; + double fRec6[2]; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + double fRec10[2]; + double fRec9[2]; + double fRec8[2]; + double fRec12[2]; + double fRec11[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec13[2]; + FAUSTFLOAT fbargraph1; + double fRec14[2]; + FAUSTFLOAT fbargraph2; + double fRec15[2]; + FAUSTFLOAT fbargraph3; + double fRec16[2]; + FAUSTFLOAT fbargraph4; + double fRec17[2]; + FAUSTFLOAT fbargraph5; + double fRec18[2]; + FAUSTFLOAT fbargraph6; + double fRec19[2]; + FAUSTFLOAT fbargraph7; + double fRec20[2]; + FAUSTFLOAT fbargraph8; + double fRec21[2]; + FAUSTFLOAT fbargraph9; + double fRec22[2]; + FAUSTFLOAT fbargraph10; + double fRec23[2]; + FAUSTFLOAT fbargraph11; + double fRec24[2]; + FAUSTFLOAT fbargraph12; + double fRec25[2]; + FAUSTFLOAT fbargraph13; + double fRec26[2]; + FAUSTFLOAT fbargraph14; + double fRec27[2]; + FAUSTFLOAT fbargraph15; + double fRec28[2]; + FAUSTFLOAT fbargraph16; + double fRec29[2]; + FAUSTFLOAT fbargraph17; + double fRec30[2]; + FAUSTFLOAT fbargraph18; + double fRec31[2]; + FAUSTFLOAT fbargraph19; + double fRec32[2]; + FAUSTFLOAT fbargraph20; + double fRec33[2]; + FAUSTFLOAT fbargraph21; + double fRec34[2]; + FAUSTFLOAT fbargraph22; + double fRec35[2]; + FAUSTFLOAT fbargraph23; + double fRec36[2]; + FAUSTFLOAT fbargraph24; + double fRec37[2]; + FAUSTFLOAT fbargraph25; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAPanLebedev261"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 26; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fentry0 = 1.07; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fslider0 = 2.0; + fslider1 = 0.0; + fcheckbox2 = 0.0; + fslider2 = 2.0; + fslider3 = 0.0; + fcheckbox3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fslider6 = 0.0; + fslider7 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "0+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "0+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(&fslider3, "1+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "1+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider7, "1+3", ""); + ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider6, "1+4", ""); + ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox0); + ui_interface->addCheckButton("1", &fcheckbox3); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a41c20", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a43510", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a45520", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a47580", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a496b0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a4b440", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "osc", "/output7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a4d990", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "osc", "/output8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a4fa30", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "osc", "/output9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20a51b70", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "osc", "/output10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe20b2bae0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "osc", "/output11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d47b160", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "osc", "/output12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d47d760", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "osc", "/output13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d47fc20", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "osc", "/output14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d482130", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "osc", "/output15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d484270", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "osc", "/output16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d486420", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "osc", "/output17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d488640", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "osc", "/output18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d48a8d0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "osc", "/output19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d48d070", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "osc", "/output20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d48f940", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "osc", "/output21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d491fc0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "osc", "/output22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d4946b0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "osc", "/output23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d496b60", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "osc", "/output24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d499090", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "osc", "/output25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d49b630", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "osc", "/output26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe1d49dc40", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fentry0); + double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); + double fSlow2 = double(fcheckbox1); + double fSlow3 = double(fslider0); + double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); + double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow6 = double(fcheckbox2); + double fSlow7 = double(fslider2); + double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); + double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow10 = (3 * (1 - double(fcheckbox3))); + double fSlow11 = double(fslider4); + double fSlow12 = sin(fSlow11); + double fSlow13 = cos(fSlow11); + double fSlow14 = double(fslider5); + double fSlow15 = (fSlow13 * cos(fSlow14)); + double fSlow16 = (6.123233995736766e-17 * fSlow15); + double fSlow17 = (fSlow12 + fSlow16); + double fSlow18 = ((fConst3 / fSlow3) + 1); + double fSlow19 = (fConst2 / (fSlow3 * fSlow18)); + double fSlow20 = (1.0 / ((fConst3 / fSlow0) + 1)); + double fSlow21 = (((fSlow2 * fSlow0) * fSlow18) / fSlow3); + double fSlow22 = (fConst2 / fSlow0); + double fSlow23 = ((1 - fSlow2) * fSlow0); + double fSlow24 = double(fslider6); + double fSlow25 = sin(fSlow24); + double fSlow26 = cos(fSlow24); + double fSlow27 = double(fslider7); + double fSlow28 = (fSlow26 * cos(fSlow27)); + double fSlow29 = (6.123233995736766e-17 * fSlow28); + double fSlow30 = (fSlow25 + fSlow29); + double fSlow31 = ((fConst3 / fSlow7) + 1); + double fSlow32 = (fConst2 / (fSlow7 * fSlow31)); + double fSlow33 = (((fSlow0 * fSlow6) * fSlow31) / fSlow7); + double fSlow34 = (fSlow0 * (1 - fSlow6)); + double fSlow35 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); + double fSlow36 = (fSlow26 * cos((fSlow27 + -1.5707963267948966))); + double fSlow37 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); + double fSlow38 = (fSlow26 * cos((fSlow27 + -3.141592653589793))); + double fSlow39 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); + double fSlow40 = (fSlow26 * cos((fSlow27 + -4.71238898038469))); + double fSlow41 = (fSlow16 - fSlow12); + double fSlow42 = (fSlow29 - fSlow25); + double fSlow43 = (0.7071067811865476 * fSlow15); + double fSlow44 = (0.7071067811865475 * fSlow12); + double fSlow45 = (fSlow43 + fSlow44); + double fSlow46 = (0.7071067811865476 * fSlow28); + double fSlow47 = (0.7071067811865475 * fSlow25); + double fSlow48 = (fSlow46 + fSlow47); + double fSlow49 = (0.7071067811865476 * fSlow35); + double fSlow50 = (fSlow44 + fSlow49); + double fSlow51 = (0.7071067811865476 * fSlow36); + double fSlow52 = (fSlow47 + fSlow51); + double fSlow53 = (0.7071067811865476 * fSlow37); + double fSlow54 = (fSlow44 + fSlow53); + double fSlow55 = (0.7071067811865476 * fSlow38); + double fSlow56 = (fSlow47 + fSlow55); + double fSlow57 = (0.7071067811865476 * fSlow39); + double fSlow58 = (fSlow44 + fSlow57); + double fSlow59 = (0.7071067811865476 * fSlow40); + double fSlow60 = (fSlow47 + fSlow59); + double fSlow61 = (fSlow13 * cos((fSlow14 + -0.7853981633974483))); + double fSlow62 = (fSlow26 * cos((fSlow27 + -0.7853981633974483))); + double fSlow63 = (fSlow13 * cos((fSlow14 + -2.356194490192345))); + double fSlow64 = (fSlow26 * cos((fSlow27 + -2.356194490192345))); + double fSlow65 = (fSlow13 * cos((fSlow14 + -3.9269908169872414))); + double fSlow66 = (fSlow26 * cos((fSlow27 + -3.9269908169872414))); + double fSlow67 = (fSlow13 * cos((fSlow14 + -5.497787143782138))); + double fSlow68 = (fSlow26 * cos((fSlow27 + -5.497787143782138))); + double fSlow69 = (fSlow43 - fSlow44); + double fSlow70 = (fSlow46 - fSlow47); + double fSlow71 = (fSlow49 - fSlow44); + double fSlow72 = (fSlow51 - fSlow47); + double fSlow73 = (fSlow55 - fSlow47); + double fSlow74 = (fSlow53 - fSlow44); + double fSlow75 = (fSlow57 - fSlow44); + double fSlow76 = (fSlow59 - fSlow47); + double fSlow77 = (0.8164965809277259 * fSlow62); + double fSlow78 = (0.5773502691896258 * fSlow25); + double fSlow79 = (fSlow77 + fSlow78); + double fSlow80 = (0.8164965809277259 * fSlow61); + double fSlow81 = (0.5773502691896258 * fSlow12); + double fSlow82 = (fSlow80 + fSlow81); + double fSlow83 = (0.8164965809277259 * fSlow63); + double fSlow84 = (fSlow81 + fSlow83); + double fSlow85 = (0.8164965809277259 * fSlow64); + double fSlow86 = (fSlow78 + fSlow85); + double fSlow87 = (0.8164965809277259 * fSlow65); + double fSlow88 = (fSlow81 + fSlow87); + double fSlow89 = (0.8164965809277259 * fSlow66); + double fSlow90 = (fSlow78 + fSlow89); + double fSlow91 = (0.8164965809277259 * fSlow67); + double fSlow92 = (fSlow81 + fSlow91); + double fSlow93 = (0.8164965809277259 * fSlow68); + double fSlow94 = (fSlow78 + fSlow93); + double fSlow95 = (fSlow77 - fSlow78); + double fSlow96 = (fSlow80 - fSlow81); + double fSlow97 = (fSlow83 - fSlow81); + double fSlow98 = (fSlow85 - fSlow78); + double fSlow99 = (fSlow87 - fSlow81); + double fSlow100 = (fSlow89 - fSlow78); + double fSlow101 = (fSlow91 - fSlow81); + double fSlow102 = (fSlow93 - fSlow78); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev262.cpp b/source/HOAUGens/HOAPanLebedev262.cpp new file mode 100644 index 0000000000..a41cf34f8b --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev262.cpp @@ -0,0 +1,1811 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev262" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fRec2[2]; + FAUSTFLOAT fcheckbox3; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec7[2]; + double fRec6[2]; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + double fRec10[2]; + double fRec9[2]; + double fRec8[2]; + double fRec12[2]; + double fRec11[2]; + FAUSTFLOAT fcheckbox4; + double fConst4; + double fConst5; + double fRec14[2]; + double fRec15[2]; + double fRec13[2]; + double fRec16[2]; + double fVec0[2]; + double fRec17[2]; + double fRec19[2]; + double fRec20[2]; + double fRec18[2]; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec27[2]; + double fRec28[2]; + double fRec26[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec29[2]; + FAUSTFLOAT fbargraph1; + double fRec30[2]; + FAUSTFLOAT fbargraph2; + double fRec31[2]; + FAUSTFLOAT fbargraph3; + double fRec32[2]; + FAUSTFLOAT fbargraph4; + double fRec33[2]; + FAUSTFLOAT fbargraph5; + double fRec34[2]; + FAUSTFLOAT fbargraph6; + double fRec35[2]; + FAUSTFLOAT fbargraph7; + double fRec36[2]; + FAUSTFLOAT fbargraph8; + double fRec37[2]; + FAUSTFLOAT fbargraph9; + double fRec38[2]; + FAUSTFLOAT fbargraph10; + double fRec39[2]; + FAUSTFLOAT fbargraph11; + double fRec40[2]; + FAUSTFLOAT fbargraph12; + double fRec41[2]; + FAUSTFLOAT fbargraph13; + double fRec42[2]; + FAUSTFLOAT fbargraph14; + double fRec43[2]; + FAUSTFLOAT fbargraph15; + double fRec44[2]; + FAUSTFLOAT fbargraph16; + double fRec45[2]; + FAUSTFLOAT fbargraph17; + double fRec46[2]; + FAUSTFLOAT fbargraph18; + double fRec47[2]; + FAUSTFLOAT fbargraph19; + double fRec48[2]; + FAUSTFLOAT fbargraph20; + double fRec49[2]; + FAUSTFLOAT fbargraph21; + double fRec50[2]; + FAUSTFLOAT fbargraph22; + double fRec51[2]; + FAUSTFLOAT fbargraph23; + double fRec52[2]; + FAUSTFLOAT fbargraph24; + double fRec53[2]; + FAUSTFLOAT fbargraph25; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAPanLebedev262"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 26; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + } + virtual void instanceResetUserInterface() { + fentry0 = 1.07; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fslider0 = 2.0; + fslider1 = 0.0; + fcheckbox2 = 0.0; + fslider2 = 2.0; + fslider3 = 0.0; + fcheckbox3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fslider6 = 0.0; + fslider7 = 0.0; + fcheckbox4 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "0+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "0+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(&fslider3, "1+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "1+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider7, "1+3", ""); + ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider6, "1+4", ""); + ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox0); + ui_interface->addCheckButton("1", &fcheckbox3); + ui_interface->addCheckButton("2", &fcheckbox4); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7806b0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d782a20", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7854c0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d787fb0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d78ab00", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d78d260", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "osc", "/output7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d790130", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "osc", "/output8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d792c10", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "osc", "/output9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d795740", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "osc", "/output10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7982f0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "osc", "/output11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d79b0c0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "osc", "/output12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d79df10", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "osc", "/output13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7a0e20", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "osc", "/output14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7a3dd0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "osc", "/output15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7a6970", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "osc", "/output16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7a95b0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "osc", "/output17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7ac270", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "osc", "/output18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7aefb0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "osc", "/output19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7b24b0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "osc", "/output20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7b5580", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "osc", "/output21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7b86b0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "osc", "/output22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7bb850", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "osc", "/output23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7be7b0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "osc", "/output24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7c1760", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "osc", "/output25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7c4790", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "osc", "/output26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd38d7c7810", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fentry0); + double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); + double fSlow2 = double(fcheckbox1); + double fSlow3 = double(fslider0); + double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); + double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow6 = double(fcheckbox2); + double fSlow7 = double(fslider2); + double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); + double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow10 = (3 * (1 - double(fcheckbox3))); + double fSlow11 = double(fslider4); + double fSlow12 = sin(fSlow11); + double fSlow13 = cos(fSlow11); + double fSlow14 = double(fslider5); + double fSlow15 = (fSlow13 * cos(fSlow14)); + double fSlow16 = (6.123233995736766e-17 * fSlow15); + double fSlow17 = (fSlow12 + fSlow16); + double fSlow18 = (fConst3 / fSlow3); + double fSlow19 = (fSlow18 + 1); + double fSlow20 = (fConst2 / (fSlow3 * fSlow19)); + double fSlow21 = (fConst3 / fSlow0); + double fSlow22 = (1.0 / (fSlow21 + 1)); + double fSlow23 = (fSlow2 * fSlow0); + double fSlow24 = ((fSlow23 * fSlow19) / fSlow3); + double fSlow25 = (fConst2 / fSlow0); + double fSlow26 = ((1 - fSlow2) * fSlow0); + double fSlow27 = double(fslider6); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + double fSlow30 = double(fslider7); + double fSlow31 = (fSlow29 * cos(fSlow30)); + double fSlow32 = (6.123233995736766e-17 * fSlow31); + double fSlow33 = (fSlow28 + fSlow32); + double fSlow34 = (fConst3 / fSlow7); + double fSlow35 = (fSlow34 + 1); + double fSlow36 = (fConst2 / (fSlow7 * fSlow35)); + double fSlow37 = (fSlow0 * fSlow6); + double fSlow38 = ((fSlow37 * fSlow35) / fSlow7); + double fSlow39 = (fSlow0 * (1 - fSlow6)); + double fSlow40 = (2.5 * (1 - double(fcheckbox4))); + double fSlow41 = ((3 * faustpower<2>(fSlow33)) + -1); + double fSlow42 = faustpower<2>(fSlow21); + double fSlow43 = (1.0 / (((fConst4 / fSlow0) + (3 * fSlow42)) + 1)); + double fSlow44 = (12 * fSlow42); + double fSlow45 = (fSlow44 + (fConst5 / fSlow0)); + double fSlow46 = faustpower<2>(fSlow34); + double fSlow47 = (((fConst4 / fSlow7) + (3 * fSlow46)) + 1); + double fSlow48 = ((fSlow37 * fSlow47) / fSlow7); + double fSlow49 = (1.0 / fSlow47); + double fSlow50 = (12 * fSlow46); + double fSlow51 = ((fConst5 / fSlow7) + fSlow50); + double fSlow52 = ((3 * faustpower<2>(fSlow17)) + -1); + double fSlow53 = faustpower<2>(fSlow18); + double fSlow54 = (((fConst4 / fSlow3) + (3 * fSlow53)) + 1); + double fSlow55 = ((fSlow23 * fSlow54) / fSlow3); + double fSlow56 = (1.0 / fSlow54); + double fSlow57 = (12 * fSlow53); + double fSlow58 = ((fConst5 / fSlow3) + fSlow57); + double fSlow59 = ((3 * faustpower<2>(fSlow31)) + -1); + double fSlow60 = ((3 * faustpower<2>(fSlow15)) + -1); + double fSlow61 = (fSlow29 * cos((fSlow30 + -1.5707963267948966))); + double fSlow62 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); + double fSlow63 = ((3 * faustpower<2>(fSlow61)) + -1); + double fSlow64 = ((3 * faustpower<2>(fSlow62)) + -1); + double fSlow65 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); + double fSlow66 = ((3 * faustpower<2>(fSlow65)) + -1); + double fSlow67 = (fSlow29 * cos((fSlow30 + -3.141592653589793))); + double fSlow68 = ((3 * faustpower<2>(fSlow67)) + -1); + double fSlow69 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); + double fSlow70 = ((3 * faustpower<2>(fSlow69)) + -1); + double fSlow71 = (fSlow29 * cos((fSlow30 + -4.71238898038469))); + double fSlow72 = ((3 * faustpower<2>(fSlow71)) + -1); + double fSlow73 = (fSlow16 - fSlow12); + double fSlow74 = (fSlow32 - fSlow28); + double fSlow75 = ((3 * faustpower<2>(fSlow73)) + -1); + double fSlow76 = ((3 * faustpower<2>(fSlow74)) + -1); + double fSlow77 = (0.7071067811865476 * fSlow15); + double fSlow78 = (0.7071067811865475 * fSlow12); + double fSlow79 = (fSlow77 + fSlow78); + double fSlow80 = (0.7071067811865476 * fSlow31); + double fSlow81 = (0.7071067811865475 * fSlow28); + double fSlow82 = (fSlow80 + fSlow81); + double fSlow83 = ((3 * faustpower<2>(fSlow79)) + -1); + double fSlow84 = ((3 * faustpower<2>(fSlow82)) + -1); + double fSlow85 = (0.7071067811865476 * fSlow61); + double fSlow86 = (fSlow81 + fSlow85); + double fSlow87 = ((3 * faustpower<2>(fSlow86)) + -1); + double fSlow88 = (0.7071067811865476 * fSlow62); + double fSlow89 = (fSlow78 + fSlow88); + double fSlow90 = ((3 * faustpower<2>(fSlow89)) + -1); + double fSlow91 = (0.7071067811865476 * fSlow65); + double fSlow92 = (fSlow78 + fSlow91); + double fSlow93 = (0.7071067811865476 * fSlow67); + double fSlow94 = (fSlow81 + fSlow93); + double fSlow95 = ((3 * faustpower<2>(fSlow92)) + -1); + double fSlow96 = ((3 * faustpower<2>(fSlow94)) + -1); + double fSlow97 = (0.7071067811865476 * fSlow71); + double fSlow98 = (fSlow81 + fSlow97); + double fSlow99 = (0.7071067811865476 * fSlow69); + double fSlow100 = (fSlow78 + fSlow99); + double fSlow101 = ((3 * faustpower<2>(fSlow98)) + -1); + double fSlow102 = ((3 * faustpower<2>(fSlow100)) + -1); + double fSlow103 = (fSlow13 * cos((fSlow14 + -0.7853981633974483))); + double fSlow104 = ((3 * faustpower<2>(fSlow103)) + -1); + double fSlow105 = (fSlow29 * cos((fSlow30 + -0.7853981633974483))); + double fSlow106 = ((3 * faustpower<2>(fSlow105)) + -1); + double fSlow107 = (fSlow29 * cos((fSlow30 + -2.356194490192345))); + double fSlow108 = ((3 * faustpower<2>(fSlow107)) + -1); + double fSlow109 = (fSlow13 * cos((fSlow14 + -2.356194490192345))); + double fSlow110 = ((3 * faustpower<2>(fSlow109)) + -1); + double fSlow111 = (fSlow13 * cos((fSlow14 + -3.9269908169872414))); + double fSlow112 = ((3 * faustpower<2>(fSlow111)) + -1); + double fSlow113 = (fSlow29 * cos((fSlow30 + -3.9269908169872414))); + double fSlow114 = ((3 * faustpower<2>(fSlow113)) + -1); + double fSlow115 = (fSlow13 * cos((fSlow14 + -5.497787143782138))); + double fSlow116 = ((3 * faustpower<2>(fSlow115)) + -1); + double fSlow117 = (fSlow29 * cos((fSlow30 + -5.497787143782138))); + double fSlow118 = ((3 * faustpower<2>(fSlow117)) + -1); + double fSlow119 = (fSlow77 - fSlow78); + double fSlow120 = (fSlow80 - fSlow81); + double fSlow121 = ((3 * faustpower<2>(fSlow119)) + -1); + double fSlow122 = ((3 * faustpower<2>(fSlow120)) + -1); + double fSlow123 = (fSlow85 - fSlow81); + double fSlow124 = ((3 * faustpower<2>(fSlow123)) + -1); + double fSlow125 = (fSlow88 - fSlow78); + double fSlow126 = ((3 * faustpower<2>(fSlow125)) + -1); + double fSlow127 = (fSlow91 - fSlow78); + double fSlow128 = (fSlow93 - fSlow81); + double fSlow129 = ((3 * faustpower<2>(fSlow128)) + -1); + double fSlow130 = ((3 * faustpower<2>(fSlow127)) + -1); + double fSlow131 = (fSlow97 - fSlow81); + double fSlow132 = (fSlow99 - fSlow78); + double fSlow133 = ((3 * faustpower<2>(fSlow132)) + -1); + double fSlow134 = ((3 * faustpower<2>(fSlow131)) + -1); + double fSlow135 = (0.8164965809277259 * fSlow103); + double fSlow136 = (0.5773502691896258 * fSlow12); + double fSlow137 = (fSlow135 + fSlow136); + double fSlow138 = ((3 * faustpower<2>(fSlow137)) + -1); + double fSlow139 = (0.8164965809277259 * fSlow105); + double fSlow140 = (0.5773502691896258 * fSlow28); + double fSlow141 = (fSlow139 + fSlow140); + double fSlow142 = ((3 * faustpower<2>(fSlow141)) + -1); + double fSlow143 = (0.8164965809277259 * fSlow109); + double fSlow144 = (fSlow136 + fSlow143); + double fSlow145 = ((3 * faustpower<2>(fSlow144)) + -1); + double fSlow146 = (0.8164965809277259 * fSlow107); + double fSlow147 = (fSlow140 + fSlow146); + double fSlow148 = ((3 * faustpower<2>(fSlow147)) + -1); + double fSlow149 = (0.8164965809277259 * fSlow113); + double fSlow150 = (fSlow140 + fSlow149); + double fSlow151 = (0.8164965809277259 * fSlow111); + double fSlow152 = (fSlow136 + fSlow151); + double fSlow153 = ((3 * faustpower<2>(fSlow152)) + -1); + double fSlow154 = ((3 * faustpower<2>(fSlow150)) + -1); + double fSlow155 = (0.8164965809277259 * fSlow117); + double fSlow156 = (fSlow140 + fSlow155); + double fSlow157 = ((3 * faustpower<2>(fSlow156)) + -1); + double fSlow158 = (0.8164965809277259 * fSlow115); + double fSlow159 = (fSlow136 + fSlow158); + double fSlow160 = ((3 * faustpower<2>(fSlow159)) + -1); + double fSlow161 = (fSlow135 - fSlow136); + double fSlow162 = (fSlow139 - fSlow140); + double fSlow163 = ((3 * faustpower<2>(fSlow162)) + -1); + double fSlow164 = ((3 * faustpower<2>(fSlow161)) + -1); + double fSlow165 = (fSlow146 - fSlow140); + double fSlow166 = (fSlow143 - fSlow136); + double fSlow167 = ((3 * faustpower<2>(fSlow166)) + -1); + double fSlow168 = ((3 * faustpower<2>(fSlow165)) + -1); + double fSlow169 = (fSlow151 - fSlow136); + double fSlow170 = ((3 * faustpower<2>(fSlow169)) + -1); + double fSlow171 = (fSlow149 - fSlow140); + double fSlow172 = ((3 * faustpower<2>(fSlow171)) + -1); + double fSlow173 = (fSlow158 - fSlow136); + double fSlow174 = ((3 * faustpower<2>(fSlow173)) + -1); + double fSlow175 = (fSlow155 - fSlow140); + double fSlow176 = ((3 * faustpower<2>(fSlow175)) + -1); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev263.cpp b/source/HOAUGens/HOAPanLebedev263.cpp new file mode 100644 index 0000000000..dc3c42a56c --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev263.cpp @@ -0,0 +1,2049 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev263" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fRec2[2]; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + FAUSTFLOAT fcheckbox3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec7[2]; + double fRec6[2]; + FAUSTFLOAT fcheckbox4; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fRec11[2]; + double fRec12[2]; + double fRec10[2]; + double fRec13[2]; + double fVec0[2]; + double fRec14[2]; + double fRec15[2]; + double fRec9[2]; + double fRec8[2]; + double fRec18[2]; + double fRec19[2]; + double fRec17[2]; + double fRec20[2]; + double fRec16[2]; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + double fRec23[2]; + double fRec22[2]; + double fRec21[2]; + double fRec25[2]; + double fRec24[2]; + double fRec29[2]; + double fRec30[2]; + double fRec28[2]; + double fRec31[2]; + double fVec1[2]; + double fRec32[2]; + double fRec33[2]; + double fRec27[2]; + double fRec26[2]; + double fRec36[2]; + double fRec37[2]; + double fRec35[2]; + double fRec38[2]; + double fRec34[2]; + FAUSTFLOAT fcheckbox5; + double fConst8; + double fConst9; + double fRec40[2]; + double fRec41[2]; + double fRec39[2]; + double fRec42[2]; + double fVec2[2]; + double fRec43[2]; + double fRec45[2]; + double fRec46[2]; + double fRec44[2]; + double fRec48[2]; + double fRec49[2]; + double fRec47[2]; + double fRec50[2]; + double fVec3[2]; + double fRec51[2]; + double fRec53[2]; + double fRec54[2]; + double fRec52[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec55[2]; + FAUSTFLOAT fbargraph1; + double fRec56[2]; + FAUSTFLOAT fbargraph2; + double fRec57[2]; + FAUSTFLOAT fbargraph3; + double fRec58[2]; + FAUSTFLOAT fbargraph4; + double fRec59[2]; + FAUSTFLOAT fbargraph5; + double fRec60[2]; + FAUSTFLOAT fbargraph6; + double fRec61[2]; + FAUSTFLOAT fbargraph7; + double fRec62[2]; + FAUSTFLOAT fbargraph8; + double fRec63[2]; + FAUSTFLOAT fbargraph9; + double fRec64[2]; + FAUSTFLOAT fbargraph10; + double fRec65[2]; + FAUSTFLOAT fbargraph11; + double fRec66[2]; + FAUSTFLOAT fbargraph12; + double fRec67[2]; + FAUSTFLOAT fbargraph13; + double fRec68[2]; + FAUSTFLOAT fbargraph14; + double fRec69[2]; + FAUSTFLOAT fbargraph15; + double fRec70[2]; + FAUSTFLOAT fbargraph16; + double fRec71[2]; + FAUSTFLOAT fbargraph17; + double fRec72[2]; + FAUSTFLOAT fbargraph18; + double fRec73[2]; + FAUSTFLOAT fbargraph19; + double fRec74[2]; + FAUSTFLOAT fbargraph20; + double fRec75[2]; + FAUSTFLOAT fbargraph21; + double fRec76[2]; + FAUSTFLOAT fbargraph22; + double fRec77[2]; + FAUSTFLOAT fbargraph23; + double fRec78[2]; + FAUSTFLOAT fbargraph24; + double fRec79[2]; + FAUSTFLOAT fbargraph25; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAPanLebedev263"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 26; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (789.5430205728705 / fConst0); + fConst5 = (394.7715102864353 / fConst0); + fConst6 = (625.2284897135664 / fConst0); + fConst7 = (1250.4569794271329 / fConst0); + fConst8 = (5.1e+02 / fConst0); + fConst9 = (1.02e+03 / fConst0); + } + virtual void instanceResetUserInterface() { + fentry0 = 1.07; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fslider0 = 2.0; + fslider1 = 0.0; + fcheckbox2 = 0.0; + fslider2 = 2.0; + fslider3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fcheckbox3 = 0.0; + fcheckbox4 = 0.0; + fslider6 = 0.0; + fslider7 = 0.0; + fcheckbox5 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider3, "0+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "0+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "0+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "0+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider1, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "1+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider7, "1+3", ""); + ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider6, "1+4", ""); + ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox0); + ui_interface->addCheckButton("1", &fcheckbox3); + ui_interface->addCheckButton("2", &fcheckbox5); + ui_interface->addCheckButton("3", &fcheckbox4); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf2474bc0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf2477cc0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf247b3a0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf247ea90", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf2482010", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24854f0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "osc", "/output7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf2488ee0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "osc", "/output8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf248c1a0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "osc", "/output9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf248f790", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "osc", "/output10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24930a0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "osc", "/output11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf2496840", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "osc", "/output12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf249a590", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "osc", "/output13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf249e050", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "osc", "/output14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24a1b70", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "osc", "/output15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24a5110", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "osc", "/output16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24a84a0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "osc", "/output17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24abb30", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "osc", "/output18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24af560", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "osc", "/output19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24b33e0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "osc", "/output20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf24b6d00", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "osc", "/output21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf1c50e70", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "osc", "/output22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf1c54ad0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "osc", "/output23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf1c584f0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "osc", "/output24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf1c5bfa0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "osc", "/output25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf1c5fac0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "osc", "/output26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9bf1c63650", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fentry0); + double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); + double fSlow2 = double(fcheckbox1); + double fSlow3 = double(fslider0); + double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); + double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow6 = double(fcheckbox2); + double fSlow7 = double(fslider2); + double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); + double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow10 = double(fslider4); + double fSlow11 = sin(fSlow10); + double fSlow12 = cos(fSlow10); + double fSlow13 = double(fslider5); + double fSlow14 = (fSlow12 * cos(fSlow13)); + double fSlow15 = (6.123233995736766e-17 * fSlow14); + double fSlow16 = (fSlow11 + fSlow15); + double fSlow17 = (3 * (1 - double(fcheckbox3))); + double fSlow18 = (fConst3 / fSlow7); + double fSlow19 = (fSlow18 + 1); + double fSlow20 = (fConst2 / (fSlow7 * fSlow19)); + double fSlow21 = (fConst3 / fSlow0); + double fSlow22 = (1.0 / (fSlow21 + 1)); + double fSlow23 = (fSlow6 * fSlow0); + double fSlow24 = ((fSlow23 * fSlow19) / fSlow7); + double fSlow25 = (fConst2 / fSlow0); + double fSlow26 = ((1 - fSlow6) * fSlow0); + double fSlow27 = (1 - double(fcheckbox4)); + double fSlow28 = faustpower<2>(fSlow16); + double fSlow29 = (3.5 * (fSlow27 * ((5 * fSlow28) + -3))); + double fSlow30 = ((fConst5 / fSlow7) + 1); + double fSlow31 = (fConst4 / (fSlow7 * fSlow30)); + double fSlow32 = (1.0 / ((fConst5 / fSlow0) + 1)); + double fSlow33 = faustpower<2>(fSlow21); + double fSlow34 = (1.0 / (((fConst6 / fSlow0) + (6.45943269348338 * fSlow33)) + 1)); + double fSlow35 = faustpower<2>(fSlow18); + double fSlow36 = (((fConst6 / fSlow7) + (6.45943269348338 * fSlow35)) + 1); + double fSlow37 = ((fSlow23 * fSlow36) / fSlow7); + double fSlow38 = (25.83773077393352 * fSlow33); + double fSlow39 = (fSlow38 + (fConst7 / fSlow0)); + double fSlow40 = (1.0 / fSlow36); + double fSlow41 = (25.83773077393352 * fSlow35); + double fSlow42 = ((fConst7 / fSlow7) + fSlow41); + double fSlow43 = (fConst4 / fSlow0); + double fSlow44 = double(fslider6); + double fSlow45 = sin(fSlow44); + double fSlow46 = cos(fSlow44); + double fSlow47 = double(fslider7); + double fSlow48 = (fSlow46 * cos(fSlow47)); + double fSlow49 = (6.123233995736766e-17 * fSlow48); + double fSlow50 = (fSlow45 + fSlow49); + double fSlow51 = (fConst3 / fSlow3); + double fSlow52 = (fSlow51 + 1); + double fSlow53 = (fConst2 / (fSlow3 * fSlow52)); + double fSlow54 = (fSlow0 * fSlow2); + double fSlow55 = ((fSlow54 * fSlow52) / fSlow3); + double fSlow56 = (fSlow0 * (1 - fSlow2)); + double fSlow57 = faustpower<2>(fSlow50); + double fSlow58 = (3.5 * (fSlow27 * ((5 * fSlow57) + -3))); + double fSlow59 = ((fConst5 / fSlow3) + 1); + double fSlow60 = (fConst4 / (fSlow3 * fSlow59)); + double fSlow61 = faustpower<2>(fSlow51); + double fSlow62 = (((fConst6 / fSlow3) + (6.45943269348338 * fSlow61)) + 1); + double fSlow63 = ((fSlow54 * fSlow62) / fSlow3); + double fSlow64 = (1.0 / fSlow62); + double fSlow65 = (25.83773077393352 * fSlow61); + double fSlow66 = ((fConst7 / fSlow3) + fSlow65); + double fSlow67 = (2.5 * (1 - double(fcheckbox5))); + double fSlow68 = ((3 * fSlow57) + -1); + double fSlow69 = (1.0 / (((fConst8 / fSlow0) + (3 * fSlow33)) + 1)); + double fSlow70 = (12 * fSlow33); + double fSlow71 = (fSlow70 + (fConst9 / fSlow0)); + double fSlow72 = (((fConst8 / fSlow3) + (3 * fSlow61)) + 1); + double fSlow73 = ((fSlow54 * fSlow72) / fSlow3); + double fSlow74 = (1.0 / fSlow72); + double fSlow75 = (12 * fSlow61); + double fSlow76 = ((fConst9 / fSlow3) + fSlow75); + double fSlow77 = ((3 * fSlow28) + -1); + double fSlow78 = (((fConst8 / fSlow7) + (3 * fSlow35)) + 1); + double fSlow79 = ((fSlow23 * fSlow78) / fSlow7); + double fSlow80 = (1.0 / fSlow78); + double fSlow81 = (12 * fSlow35); + double fSlow82 = ((fConst9 / fSlow7) + fSlow81); + double fSlow83 = ((3 * faustpower<2>(fSlow48)) + -1); + double fSlow84 = ((3 * faustpower<2>(fSlow14)) + -1); + double fSlow85 = (3.5 * fSlow27); + double fSlow86 = ((5 * faustpower<3>(fSlow14)) - (3 * fSlow14)); + double fSlow87 = ((5 * faustpower<3>(fSlow48)) - (3 * fSlow48)); + double fSlow88 = (fSlow46 * cos((fSlow47 + -1.5707963267948966))); + double fSlow89 = (fSlow12 * cos((fSlow13 + -1.5707963267948966))); + double fSlow90 = ((3 * faustpower<2>(fSlow89)) + -1); + double fSlow91 = ((3 * faustpower<2>(fSlow88)) + -1); + double fSlow92 = ((5 * faustpower<3>(fSlow89)) - (3 * fSlow89)); + double fSlow93 = ((5 * faustpower<3>(fSlow88)) - (3 * fSlow88)); + double fSlow94 = (fSlow46 * cos((fSlow47 + -3.141592653589793))); + double fSlow95 = ((3 * faustpower<2>(fSlow94)) + -1); + double fSlow96 = (fSlow12 * cos((fSlow13 + -3.141592653589793))); + double fSlow97 = ((3 * faustpower<2>(fSlow96)) + -1); + double fSlow98 = ((5 * faustpower<3>(fSlow96)) - (3 * fSlow96)); + double fSlow99 = ((5 * faustpower<3>(fSlow94)) - (3 * fSlow94)); + double fSlow100 = (fSlow46 * cos((fSlow47 + -4.71238898038469))); + double fSlow101 = ((3 * faustpower<2>(fSlow100)) + -1); + double fSlow102 = (fSlow12 * cos((fSlow13 + -4.71238898038469))); + double fSlow103 = ((3 * faustpower<2>(fSlow102)) + -1); + double fSlow104 = ((5 * faustpower<3>(fSlow102)) - (3 * fSlow102)); + double fSlow105 = ((5 * faustpower<3>(fSlow100)) - (3 * fSlow100)); + double fSlow106 = (fSlow49 - fSlow45); + double fSlow107 = faustpower<2>(fSlow106); + double fSlow108 = ((3 * fSlow107) + -1); + double fSlow109 = (fSlow15 - fSlow11); + double fSlow110 = faustpower<2>(fSlow109); + double fSlow111 = ((3 * fSlow110) + -1); + double fSlow112 = (3.5 * (fSlow27 * ((5 * fSlow107) + -3))); + double fSlow113 = (3.5 * (fSlow27 * ((5 * fSlow110) + -3))); + double fSlow114 = (0.7071067811865476 * fSlow14); + double fSlow115 = (0.7071067811865475 * fSlow11); + double fSlow116 = (fSlow114 + fSlow115); + double fSlow117 = faustpower<2>(fSlow116); + double fSlow118 = (3.5 * (fSlow27 * ((5 * fSlow117) + -3))); + double fSlow119 = (0.7071067811865475 * fSlow45); + double fSlow120 = (0.7071067811865476 * fSlow48); + double fSlow121 = (fSlow119 + fSlow120); + double fSlow122 = faustpower<2>(fSlow121); + double fSlow123 = (3.5 * (fSlow27 * ((5 * fSlow122) + -3))); + double fSlow124 = ((3 * fSlow122) + -1); + double fSlow125 = ((3 * fSlow117) + -1); + double fSlow126 = (0.7071067811865476 * fSlow88); + double fSlow127 = (fSlow119 + fSlow126); + double fSlow128 = faustpower<2>(fSlow127); + double fSlow129 = (3.5 * (fSlow27 * ((5 * fSlow128) + -3))); + double fSlow130 = (0.7071067811865476 * fSlow89); + double fSlow131 = (fSlow115 + fSlow130); + double fSlow132 = faustpower<2>(fSlow131); + double fSlow133 = (3.5 * (fSlow27 * ((5 * fSlow132) + -3))); + double fSlow134 = ((3 * fSlow128) + -1); + double fSlow135 = ((3 * fSlow132) + -1); + double fSlow136 = (0.7071067811865476 * fSlow94); + double fSlow137 = (fSlow119 + fSlow136); + double fSlow138 = faustpower<2>(fSlow137); + double fSlow139 = (3.5 * (fSlow27 * ((5 * fSlow138) + -3))); + double fSlow140 = (0.7071067811865476 * fSlow96); + double fSlow141 = (fSlow115 + fSlow140); + double fSlow142 = faustpower<2>(fSlow141); + double fSlow143 = (3.5 * (fSlow27 * ((5 * fSlow142) + -3))); + double fSlow144 = ((3 * fSlow138) + -1); + double fSlow145 = ((3 * fSlow142) + -1); + double fSlow146 = (0.7071067811865476 * fSlow102); + double fSlow147 = (fSlow115 + fSlow146); + double fSlow148 = faustpower<2>(fSlow147); + double fSlow149 = ((3 * fSlow148) + -1); + double fSlow150 = (0.7071067811865476 * fSlow100); + double fSlow151 = (fSlow119 + fSlow150); + double fSlow152 = faustpower<2>(fSlow151); + double fSlow153 = ((3 * fSlow152) + -1); + double fSlow154 = (3.5 * (fSlow27 * ((5 * fSlow152) + -3))); + double fSlow155 = (3.5 * (fSlow27 * ((5 * fSlow148) + -3))); + double fSlow156 = (fSlow46 * cos((fSlow47 + -0.7853981633974483))); + double fSlow157 = ((3 * faustpower<2>(fSlow156)) + -1); + double fSlow158 = (fSlow12 * cos((fSlow13 + -0.7853981633974483))); + double fSlow159 = ((3 * faustpower<2>(fSlow158)) + -1); + double fSlow160 = ((5 * faustpower<3>(fSlow158)) - (3 * fSlow158)); + double fSlow161 = ((5 * faustpower<3>(fSlow156)) - (3 * fSlow156)); + double fSlow162 = (fSlow46 * cos((fSlow47 + -2.356194490192345))); + double fSlow163 = (fSlow12 * cos((fSlow13 + -2.356194490192345))); + double fSlow164 = ((3 * faustpower<2>(fSlow163)) + -1); + double fSlow165 = ((3 * faustpower<2>(fSlow162)) + -1); + double fSlow166 = ((5 * faustpower<3>(fSlow163)) - (3 * fSlow163)); + double fSlow167 = ((5 * faustpower<3>(fSlow162)) - (3 * fSlow162)); + double fSlow168 = (fSlow46 * cos((fSlow47 + -3.9269908169872414))); + double fSlow169 = ((5 * faustpower<3>(fSlow168)) - (3 * fSlow168)); + double fSlow170 = (fSlow12 * cos((fSlow13 + -3.9269908169872414))); + double fSlow171 = ((5 * faustpower<3>(fSlow170)) - (3 * fSlow170)); + double fSlow172 = ((3 * faustpower<2>(fSlow168)) + -1); + double fSlow173 = ((3 * faustpower<2>(fSlow170)) + -1); + double fSlow174 = (fSlow12 * cos((fSlow13 + -5.497787143782138))); + double fSlow175 = ((3 * faustpower<2>(fSlow174)) + -1); + double fSlow176 = (fSlow46 * cos((fSlow47 + -5.497787143782138))); + double fSlow177 = ((3 * faustpower<2>(fSlow176)) + -1); + double fSlow178 = ((5 * faustpower<3>(fSlow174)) - (3 * fSlow174)); + double fSlow179 = ((5 * faustpower<3>(fSlow176)) - (3 * fSlow176)); + double fSlow180 = (fSlow120 - fSlow119); + double fSlow181 = faustpower<2>(fSlow180); + double fSlow182 = ((3 * fSlow181) + -1); + double fSlow183 = (fSlow114 - fSlow115); + double fSlow184 = faustpower<2>(fSlow183); + double fSlow185 = ((3 * fSlow184) + -1); + double fSlow186 = (3.5 * (fSlow27 * ((5 * fSlow184) + -3))); + double fSlow187 = (3.5 * (fSlow27 * ((5 * fSlow181) + -3))); + double fSlow188 = (fSlow126 - fSlow119); + double fSlow189 = faustpower<2>(fSlow188); + double fSlow190 = (3.5 * (fSlow27 * ((5 * fSlow189) + -3))); + double fSlow191 = (fSlow130 - fSlow115); + double fSlow192 = faustpower<2>(fSlow191); + double fSlow193 = (3.5 * (fSlow27 * ((5 * fSlow192) + -3))); + double fSlow194 = ((3 * fSlow189) + -1); + double fSlow195 = ((3 * fSlow192) + -1); + double fSlow196 = (fSlow136 - fSlow119); + double fSlow197 = faustpower<2>(fSlow196); + double fSlow198 = (3.5 * (fSlow27 * ((5 * fSlow197) + -3))); + double fSlow199 = (fSlow140 - fSlow115); + double fSlow200 = faustpower<2>(fSlow199); + double fSlow201 = (3.5 * (fSlow27 * ((5 * fSlow200) + -3))); + double fSlow202 = ((3 * fSlow197) + -1); + double fSlow203 = ((3 * fSlow200) + -1); + double fSlow204 = (fSlow150 - fSlow119); + double fSlow205 = faustpower<2>(fSlow204); + double fSlow206 = ((3 * fSlow205) + -1); + double fSlow207 = (fSlow146 - fSlow115); + double fSlow208 = faustpower<2>(fSlow207); + double fSlow209 = ((3 * fSlow208) + -1); + double fSlow210 = (3.5 * (fSlow27 * ((5 * fSlow208) + -3))); + double fSlow211 = (3.5 * (fSlow27 * ((5 * fSlow205) + -3))); + double fSlow212 = (0.5773502691896258 * fSlow45); + double fSlow213 = (0.8164965809277259 * fSlow156); + double fSlow214 = (fSlow212 + fSlow213); + double fSlow215 = faustpower<2>(fSlow214); + double fSlow216 = ((3 * fSlow215) + -1); + double fSlow217 = (0.8164965809277259 * fSlow158); + double fSlow218 = (0.5773502691896258 * fSlow11); + double fSlow219 = (fSlow217 + fSlow218); + double fSlow220 = faustpower<2>(fSlow219); + double fSlow221 = ((3 * fSlow220) + -1); + double fSlow222 = (3.5 * (fSlow27 * ((5 * fSlow215) + -3))); + double fSlow223 = (3.5 * (fSlow27 * ((5 * fSlow220) + -3))); + double fSlow224 = (0.8164965809277259 * fSlow162); + double fSlow225 = (fSlow212 + fSlow224); + double fSlow226 = faustpower<2>(fSlow225); + double fSlow227 = (3.5 * (fSlow27 * ((5 * fSlow226) + -3))); + double fSlow228 = (0.8164965809277259 * fSlow163); + double fSlow229 = (fSlow218 + fSlow228); + double fSlow230 = faustpower<2>(fSlow229); + double fSlow231 = (3.5 * (fSlow27 * ((5 * fSlow230) + -3))); + double fSlow232 = ((3 * fSlow226) + -1); + double fSlow233 = ((3 * fSlow230) + -1); + double fSlow234 = (0.8164965809277259 * fSlow168); + double fSlow235 = (fSlow212 + fSlow234); + double fSlow236 = faustpower<2>(fSlow235); + double fSlow237 = (3.5 * (fSlow27 * ((5 * fSlow236) + -3))); + double fSlow238 = ((3 * fSlow236) + -1); + double fSlow239 = (0.8164965809277259 * fSlow170); + double fSlow240 = (fSlow218 + fSlow239); + double fSlow241 = faustpower<2>(fSlow240); + double fSlow242 = ((3 * fSlow241) + -1); + double fSlow243 = (3.5 * (fSlow27 * ((5 * fSlow241) + -3))); + double fSlow244 = (0.8164965809277259 * fSlow174); + double fSlow245 = (fSlow218 + fSlow244); + double fSlow246 = faustpower<2>(fSlow245); + double fSlow247 = (3.5 * (fSlow27 * ((5 * fSlow246) + -3))); + double fSlow248 = (0.8164965809277259 * fSlow176); + double fSlow249 = (fSlow212 + fSlow248); + double fSlow250 = faustpower<2>(fSlow249); + double fSlow251 = (3.5 * (fSlow27 * ((5 * fSlow250) + -3))); + double fSlow252 = ((3 * fSlow246) + -1); + double fSlow253 = ((3 * fSlow250) + -1); + double fSlow254 = (fSlow217 - fSlow218); + double fSlow255 = faustpower<2>(fSlow254); + double fSlow256 = ((3 * fSlow255) + -1); + double fSlow257 = (fSlow213 - fSlow212); + double fSlow258 = faustpower<2>(fSlow257); + double fSlow259 = ((3 * fSlow258) + -1); + double fSlow260 = (3.5 * (fSlow27 * ((5 * fSlow255) + -3))); + double fSlow261 = (3.5 * (fSlow27 * ((5 * fSlow258) + -3))); + double fSlow262 = (fSlow228 - fSlow218); + double fSlow263 = faustpower<2>(fSlow262); + double fSlow264 = ((3 * fSlow263) + -1); + double fSlow265 = (fSlow224 - fSlow212); + double fSlow266 = faustpower<2>(fSlow265); + double fSlow267 = ((3 * fSlow266) + -1); + double fSlow268 = (3.5 * (fSlow27 * ((5 * fSlow263) + -3))); + double fSlow269 = (3.5 * (fSlow27 * ((5 * fSlow266) + -3))); + double fSlow270 = (fSlow239 - fSlow218); + double fSlow271 = faustpower<2>(fSlow270); + double fSlow272 = ((3 * fSlow271) + -1); + double fSlow273 = (fSlow234 - fSlow212); + double fSlow274 = faustpower<2>(fSlow273); + double fSlow275 = ((3 * fSlow274) + -1); + double fSlow276 = (3.5 * (fSlow27 * ((5 * fSlow271) + -3))); + double fSlow277 = (3.5 * (fSlow27 * ((5 * fSlow274) + -3))); + double fSlow278 = (fSlow244 - fSlow218); + double fSlow279 = faustpower<2>(fSlow278); + double fSlow280 = ((3 * fSlow279) + -1); + double fSlow281 = (fSlow248 - fSlow212); + double fSlow282 = faustpower<2>(fSlow281); + double fSlow283 = ((3 * fSlow282) + -1); + double fSlow284 = (3.5 * (fSlow27 * ((5 * fSlow279) + -3))); + double fSlow285 = (3.5 * (fSlow27 * ((5 * fSlow282) + -3))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev501.cpp b/source/HOAUGens/HOAPanLebedev501.cpp new file mode 100644 index 0000000000..f787410765 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev501.cpp @@ -0,0 +1,2058 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev501" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fslider2; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider3; + double fRec2[2]; + FAUSTFLOAT fcheckbox3; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec7[2]; + double fRec6[2]; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + double fRec10[2]; + double fRec9[2]; + double fRec8[2]; + double fRec12[2]; + double fRec11[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec13[2]; + FAUSTFLOAT fbargraph1; + double fRec14[2]; + FAUSTFLOAT fbargraph2; + double fRec15[2]; + FAUSTFLOAT fbargraph3; + double fRec16[2]; + FAUSTFLOAT fbargraph4; + double fRec17[2]; + FAUSTFLOAT fbargraph5; + double fRec18[2]; + FAUSTFLOAT fbargraph6; + double fRec19[2]; + FAUSTFLOAT fbargraph7; + double fRec20[2]; + FAUSTFLOAT fbargraph8; + double fRec21[2]; + FAUSTFLOAT fbargraph9; + double fRec22[2]; + FAUSTFLOAT fbargraph10; + double fRec23[2]; + FAUSTFLOAT fbargraph11; + double fRec24[2]; + FAUSTFLOAT fbargraph12; + double fRec25[2]; + FAUSTFLOAT fbargraph13; + double fRec26[2]; + FAUSTFLOAT fbargraph14; + double fRec27[2]; + FAUSTFLOAT fbargraph15; + double fRec28[2]; + FAUSTFLOAT fbargraph16; + double fRec29[2]; + FAUSTFLOAT fbargraph17; + double fRec30[2]; + FAUSTFLOAT fbargraph18; + double fRec31[2]; + FAUSTFLOAT fbargraph19; + double fRec32[2]; + FAUSTFLOAT fbargraph20; + double fRec33[2]; + FAUSTFLOAT fbargraph21; + double fRec34[2]; + FAUSTFLOAT fbargraph22; + double fRec35[2]; + FAUSTFLOAT fbargraph23; + double fRec36[2]; + FAUSTFLOAT fbargraph24; + double fRec37[2]; + FAUSTFLOAT fbargraph25; + double fRec38[2]; + FAUSTFLOAT fbargraph26; + double fRec39[2]; + FAUSTFLOAT fbargraph27; + double fRec40[2]; + FAUSTFLOAT fbargraph28; + double fRec41[2]; + FAUSTFLOAT fbargraph29; + double fRec42[2]; + FAUSTFLOAT fbargraph30; + double fRec43[2]; + FAUSTFLOAT fbargraph31; + double fRec44[2]; + FAUSTFLOAT fbargraph32; + double fRec45[2]; + FAUSTFLOAT fbargraph33; + double fRec46[2]; + FAUSTFLOAT fbargraph34; + double fRec47[2]; + FAUSTFLOAT fbargraph35; + double fRec48[2]; + FAUSTFLOAT fbargraph36; + double fRec49[2]; + FAUSTFLOAT fbargraph37; + double fRec50[2]; + FAUSTFLOAT fbargraph38; + double fRec51[2]; + FAUSTFLOAT fbargraph39; + double fRec52[2]; + FAUSTFLOAT fbargraph40; + double fRec53[2]; + FAUSTFLOAT fbargraph41; + double fRec54[2]; + FAUSTFLOAT fbargraph42; + double fRec55[2]; + FAUSTFLOAT fbargraph43; + double fRec56[2]; + FAUSTFLOAT fbargraph44; + double fRec57[2]; + FAUSTFLOAT fbargraph45; + double fRec58[2]; + FAUSTFLOAT fbargraph46; + double fRec59[2]; + FAUSTFLOAT fbargraph47; + double fRec60[2]; + FAUSTFLOAT fbargraph48; + double fRec61[2]; + FAUSTFLOAT fbargraph49; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAPanLebedev501"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fentry0 = 1.07; + fcheckbox0 = 0.0; + fslider0 = 2.0; + fcheckbox1 = 0.0; + fslider1 = 0.0; + fslider2 = 2.0; + fcheckbox2 = 0.0; + fslider3 = 0.0; + fcheckbox3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fslider6 = 0.0; + fslider7 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider3, "0+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "0+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "0+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "0+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider1, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "1+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider7, "1+3", ""); + ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider6, "1+4", ""); + ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox0); + ui_interface->addCheckButton("1", &fcheckbox3); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1129180", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac112ac50", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac112ce20", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac112f090", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1131380", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac11332d0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "osc", "/output7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1135990", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "osc", "/output8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1137c40", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "osc", "/output9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1139f40", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "osc", "/output10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac113c2b0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "osc", "/output11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac113e840", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "osc", "/output12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1140e30", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "osc", "/output13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac11434b0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "osc", "/output14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1145b80", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "osc", "/output15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1147e80", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "osc", "/output16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac114a1f0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "osc", "/output17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac114c5d0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "osc", "/output18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac114ea20", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "osc", "/output19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1151630", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "osc", "/output20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1153db0", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "osc", "/output21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac11565f0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "osc", "/output22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1158ea0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "osc", "/output23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac115b510", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "osc", "/output24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac115dc00", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "osc", "/output25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac11603d0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "osc", "/output26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1162b20", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph26, "osc", "/output27"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1165790", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph27, "osc", "/output28"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1167820", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph28, "osc", "/output29"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1169960", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph29, "osc", "/output30"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac116bb10", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph30, "osc", "/output31"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac116e7a0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph31, "osc", "/output32"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1171060", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph32, "osc", "/output33"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1173990", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph33, "osc", "/output34"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1176330", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph34, "osc", "/output35"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1178d40", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph35, "osc", "/output36"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac117b7c0", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph36, "osc", "/output37"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac117e250", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph37, "osc", "/output38"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1180d90", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph38, "osc", "/output39"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac11830a0", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph39, "osc", "/output40"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1185410", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph40, "osc", "/output41"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac11877f0", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph41, "osc", "/output42"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1189c40", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph42, "osc", "/output43"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac118c100", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph43, "osc", "/output44"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac118e630", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph44, "osc", "/output45"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1190bd0", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph45, "osc", "/output46"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac11931e0", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph46, "osc", "/output47"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1195860", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph47, "osc", "/output48"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac1197f50", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph48, "osc", "/output49"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac119a6b0", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph49, "osc", "/output50"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcac119ce80", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fentry0); + double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); + double fSlow2 = double(fslider0); + double fSlow3 = double(fcheckbox1); + double fSlow4 = (1 - ((1 - (1.0 / fSlow2)) * fSlow3)); + double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow6 = double(fslider2); + double fSlow7 = double(fcheckbox2); + double fSlow8 = (1 - ((1 - (1.0 / fSlow6)) * fSlow7)); + double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow10 = (3 * (1 - double(fcheckbox3))); + double fSlow11 = double(fslider4); + double fSlow12 = sin(fSlow11); + double fSlow13 = cos(fSlow11); + double fSlow14 = double(fslider5); + double fSlow15 = (fSlow13 * cos(fSlow14)); + double fSlow16 = (6.123233995736766e-17 * fSlow15); + double fSlow17 = (fSlow12 + fSlow16); + double fSlow18 = ((fConst3 / fSlow6) + 1); + double fSlow19 = (fConst2 / (fSlow6 * fSlow18)); + double fSlow20 = (1.0 / ((fConst3 / fSlow0) + 1)); + double fSlow21 = (((fSlow7 * fSlow0) * fSlow18) / fSlow6); + double fSlow22 = (fConst2 / fSlow0); + double fSlow23 = ((1 - fSlow7) * fSlow0); + double fSlow24 = double(fslider6); + double fSlow25 = sin(fSlow24); + double fSlow26 = cos(fSlow24); + double fSlow27 = double(fslider7); + double fSlow28 = (fSlow26 * cos(fSlow27)); + double fSlow29 = (6.123233995736766e-17 * fSlow28); + double fSlow30 = (fSlow25 + fSlow29); + double fSlow31 = ((fConst3 / fSlow2) + 1); + double fSlow32 = (fConst2 / (fSlow2 * fSlow31)); + double fSlow33 = (((fSlow0 * fSlow3) * fSlow31) / fSlow2); + double fSlow34 = (fSlow0 * (1 - fSlow3)); + double fSlow35 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); + double fSlow36 = (fSlow26 * cos((fSlow27 + -1.5707963267948966))); + double fSlow37 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); + double fSlow38 = (fSlow26 * cos((fSlow27 + -3.141592653589793))); + double fSlow39 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); + double fSlow40 = (fSlow26 * cos((fSlow27 + -4.71238898038469))); + double fSlow41 = (fSlow16 - fSlow12); + double fSlow42 = (fSlow29 - fSlow25); + double fSlow43 = (0.7071067811865476 * fSlow28); + double fSlow44 = (0.7071067811865475 * fSlow25); + double fSlow45 = (fSlow43 + fSlow44); + double fSlow46 = (0.7071067811865476 * fSlow15); + double fSlow47 = (0.7071067811865475 * fSlow12); + double fSlow48 = (fSlow46 + fSlow47); + double fSlow49 = (0.7071067811865476 * fSlow36); + double fSlow50 = (fSlow44 + fSlow49); + double fSlow51 = (0.7071067811865476 * fSlow35); + double fSlow52 = (fSlow47 + fSlow51); + double fSlow53 = (0.7071067811865476 * fSlow37); + double fSlow54 = (fSlow47 + fSlow53); + double fSlow55 = (0.7071067811865476 * fSlow38); + double fSlow56 = (fSlow44 + fSlow55); + double fSlow57 = (0.7071067811865476 * fSlow39); + double fSlow58 = (fSlow47 + fSlow57); + double fSlow59 = (0.7071067811865476 * fSlow40); + double fSlow60 = (fSlow44 + fSlow59); + double fSlow61 = (fSlow13 * cos((fSlow14 + -0.7853981633974483))); + double fSlow62 = (fSlow26 * cos((fSlow27 + -0.7853981633974483))); + double fSlow63 = (fSlow13 * cos((fSlow14 + -2.356194490192345))); + double fSlow64 = (fSlow26 * cos((fSlow27 + -2.356194490192345))); + double fSlow65 = (fSlow13 * cos((fSlow14 + -3.9269908169872414))); + double fSlow66 = (fSlow26 * cos((fSlow27 + -3.9269908169872414))); + double fSlow67 = (fSlow13 * cos((fSlow14 + -5.497787143782138))); + double fSlow68 = (fSlow26 * cos((fSlow27 + -5.497787143782138))); + double fSlow69 = (fSlow46 - fSlow47); + double fSlow70 = (fSlow43 - fSlow44); + double fSlow71 = (fSlow51 - fSlow47); + double fSlow72 = (fSlow49 - fSlow44); + double fSlow73 = (fSlow53 - fSlow47); + double fSlow74 = (fSlow55 - fSlow44); + double fSlow75 = (fSlow59 - fSlow44); + double fSlow76 = (fSlow57 - fSlow47); + double fSlow77 = (0.8164965809277259 * fSlow61); + double fSlow78 = (0.5773502691896258 * fSlow12); + double fSlow79 = (fSlow77 + fSlow78); + double fSlow80 = (0.8164965809277259 * fSlow62); + double fSlow81 = (0.5773502691896258 * fSlow25); + double fSlow82 = (fSlow80 + fSlow81); + double fSlow83 = (0.8164965809277259 * fSlow63); + double fSlow84 = (fSlow78 + fSlow83); + double fSlow85 = (0.8164965809277259 * fSlow64); + double fSlow86 = (fSlow81 + fSlow85); + double fSlow87 = (0.8164965809277259 * fSlow65); + double fSlow88 = (fSlow78 + fSlow87); + double fSlow89 = (0.8164965809277259 * fSlow66); + double fSlow90 = (fSlow81 + fSlow89); + double fSlow91 = (0.8164965809277259 * fSlow67); + double fSlow92 = (fSlow78 + fSlow91); + double fSlow93 = (0.8164965809277259 * fSlow68); + double fSlow94 = (fSlow81 + fSlow93); + double fSlow95 = (fSlow80 - fSlow81); + double fSlow96 = (fSlow77 - fSlow78); + double fSlow97 = (fSlow85 - fSlow81); + double fSlow98 = (fSlow83 - fSlow78); + double fSlow99 = (fSlow89 - fSlow81); + double fSlow100 = (fSlow87 - fSlow78); + double fSlow101 = (fSlow93 - fSlow81); + double fSlow102 = (fSlow91 - fSlow78); + double fSlow103 = (0.4264014327112203 * (fSlow13 * cos((fSlow14 + -0.7853981633974484)))); + double fSlow104 = (0.9045340337332911 * fSlow12); + double fSlow105 = (fSlow103 + fSlow104); + double fSlow106 = (0.4264014327112203 * (fSlow26 * cos((fSlow27 + -0.7853981633974484)))); + double fSlow107 = (0.9045340337332911 * fSlow25); + double fSlow108 = (fSlow106 + fSlow107); + double fSlow109 = (0.4264014327112203 * fSlow64); + double fSlow110 = (fSlow107 + fSlow109); + double fSlow111 = (0.4264014327112203 * fSlow63); + double fSlow112 = (fSlow104 + fSlow111); + double fSlow113 = (0.4264014327112203 * fSlow66); + double fSlow114 = (fSlow107 + fSlow113); + double fSlow115 = (0.4264014327112203 * fSlow65); + double fSlow116 = (fSlow104 + fSlow115); + double fSlow117 = (0.4264014327112203 * fSlow68); + double fSlow118 = (fSlow107 + fSlow117); + double fSlow119 = (0.4264014327112203 * fSlow67); + double fSlow120 = (fSlow104 + fSlow119); + double fSlow121 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -0.32175055439664263)))); + double fSlow122 = (0.3015113445777635 * fSlow12); + double fSlow123 = (fSlow121 + fSlow122); + double fSlow124 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -0.32175055439664263)))); + double fSlow125 = (0.3015113445777635 * fSlow25); + double fSlow126 = (fSlow124 + fSlow125); + double fSlow127 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -1.2490457723982544)))); + double fSlow128 = (fSlow122 + fSlow127); + double fSlow129 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -1.2490457723982544)))); + double fSlow130 = (fSlow125 + fSlow129); + double fSlow131 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -1.8925468811915387)))); + double fSlow132 = (fSlow122 + fSlow131); + double fSlow133 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -1.8925468811915387)))); + double fSlow134 = (fSlow125 + fSlow133); + double fSlow135 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -2.8198420991931505)))); + double fSlow136 = (fSlow122 + fSlow135); + double fSlow137 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -2.8198420991931505)))); + double fSlow138 = (fSlow125 + fSlow137); + double fSlow139 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -3.4633432079864357)))); + double fSlow140 = (fSlow122 + fSlow139); + double fSlow141 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -3.4633432079864357)))); + double fSlow142 = (fSlow125 + fSlow141); + double fSlow143 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -4.3906384259880475)))); + double fSlow144 = (fSlow122 + fSlow143); + double fSlow145 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -4.3906384259880475)))); + double fSlow146 = (fSlow125 + fSlow145); + double fSlow147 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -5.034139534781332)))); + double fSlow148 = (fSlow122 + fSlow147); + double fSlow149 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -5.034139534781332)))); + double fSlow150 = (fSlow125 + fSlow149); + double fSlow151 = (0.9534625892455924 * (cos((fSlow14 + -5.961434752782943)) * fSlow13)); + double fSlow152 = (fSlow151 + fSlow122); + double fSlow153 = (0.9534625892455924 * (cos((fSlow27 + -5.961434752782943)) * fSlow26)); + double fSlow154 = (fSlow153 + fSlow125); + double fSlow155 = (fSlow124 - fSlow125); + double fSlow156 = (fSlow121 - fSlow122); + double fSlow157 = (fSlow129 - fSlow125); + double fSlow158 = (fSlow127 - fSlow122); + double fSlow159 = (fSlow133 - fSlow125); + double fSlow160 = (fSlow131 - fSlow122); + double fSlow161 = (fSlow137 - fSlow125); + double fSlow162 = (fSlow135 - fSlow122); + double fSlow163 = (fSlow141 - fSlow125); + double fSlow164 = (fSlow139 - fSlow122); + double fSlow165 = (fSlow145 - fSlow125); + double fSlow166 = (fSlow143 - fSlow122); + double fSlow167 = (fSlow149 - fSlow125); + double fSlow168 = (fSlow147 - fSlow122); + double fSlow169 = (fSlow153 - fSlow125); + double fSlow170 = (fSlow151 - fSlow122); + double fSlow171 = (fSlow106 - fSlow107); + double fSlow172 = (fSlow103 - fSlow104); + double fSlow173 = (fSlow109 - fSlow107); + double fSlow174 = (fSlow111 - fSlow104); + double fSlow175 = (fSlow113 - fSlow107); + double fSlow176 = (fSlow115 - fSlow104); + double fSlow177 = (fSlow117 - fSlow107); + double fSlow178 = (fSlow119 - fSlow104); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev502.cpp b/source/HOAUGens/HOAPanLebedev502.cpp new file mode 100644 index 0000000000..00c602bc7c --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev502.cpp @@ -0,0 +1,2277 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev502" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fentry0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec1[2]; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fRec2[2]; + FAUSTFLOAT fcheckbox3; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec7[2]; + double fRec6[2]; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + double fRec10[2]; + double fRec9[2]; + double fRec8[2]; + double fRec12[2]; + double fRec11[2]; + FAUSTFLOAT fcheckbox4; + double fConst4; + double fConst5; + double fRec14[2]; + double fRec15[2]; + double fRec13[2]; + double fRec16[2]; + double fVec0[2]; + double fRec17[2]; + double fRec19[2]; + double fRec20[2]; + double fRec18[2]; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec27[2]; + double fRec28[2]; + double fRec26[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec29[2]; + FAUSTFLOAT fbargraph1; + double fRec30[2]; + FAUSTFLOAT fbargraph2; + double fRec31[2]; + FAUSTFLOAT fbargraph3; + double fRec32[2]; + FAUSTFLOAT fbargraph4; + double fRec33[2]; + FAUSTFLOAT fbargraph5; + double fRec34[2]; + FAUSTFLOAT fbargraph6; + double fRec35[2]; + FAUSTFLOAT fbargraph7; + double fRec36[2]; + FAUSTFLOAT fbargraph8; + double fRec37[2]; + FAUSTFLOAT fbargraph9; + double fRec38[2]; + FAUSTFLOAT fbargraph10; + double fRec39[2]; + FAUSTFLOAT fbargraph11; + double fRec40[2]; + FAUSTFLOAT fbargraph12; + double fRec41[2]; + FAUSTFLOAT fbargraph13; + double fRec42[2]; + FAUSTFLOAT fbargraph14; + double fRec43[2]; + FAUSTFLOAT fbargraph15; + double fRec44[2]; + FAUSTFLOAT fbargraph16; + double fRec45[2]; + FAUSTFLOAT fbargraph17; + double fRec46[2]; + FAUSTFLOAT fbargraph18; + double fRec47[2]; + FAUSTFLOAT fbargraph19; + double fRec48[2]; + FAUSTFLOAT fbargraph20; + double fRec49[2]; + FAUSTFLOAT fbargraph21; + double fRec50[2]; + FAUSTFLOAT fbargraph22; + double fRec51[2]; + FAUSTFLOAT fbargraph23; + double fRec52[2]; + FAUSTFLOAT fbargraph24; + double fRec53[2]; + FAUSTFLOAT fbargraph25; + double fRec54[2]; + FAUSTFLOAT fbargraph26; + double fRec55[2]; + FAUSTFLOAT fbargraph27; + double fRec56[2]; + FAUSTFLOAT fbargraph28; + double fRec57[2]; + FAUSTFLOAT fbargraph29; + double fRec58[2]; + FAUSTFLOAT fbargraph30; + double fRec59[2]; + FAUSTFLOAT fbargraph31; + double fRec60[2]; + FAUSTFLOAT fbargraph32; + double fRec61[2]; + FAUSTFLOAT fbargraph33; + double fRec62[2]; + FAUSTFLOAT fbargraph34; + double fRec63[2]; + FAUSTFLOAT fbargraph35; + double fRec64[2]; + FAUSTFLOAT fbargraph36; + double fRec65[2]; + FAUSTFLOAT fbargraph37; + double fRec66[2]; + FAUSTFLOAT fbargraph38; + double fRec67[2]; + FAUSTFLOAT fbargraph39; + double fRec68[2]; + FAUSTFLOAT fbargraph40; + double fRec69[2]; + FAUSTFLOAT fbargraph41; + double fRec70[2]; + FAUSTFLOAT fbargraph42; + double fRec71[2]; + FAUSTFLOAT fbargraph43; + double fRec72[2]; + FAUSTFLOAT fbargraph44; + double fRec73[2]; + FAUSTFLOAT fbargraph45; + double fRec74[2]; + FAUSTFLOAT fbargraph46; + double fRec75[2]; + FAUSTFLOAT fbargraph47; + double fRec76[2]; + FAUSTFLOAT fbargraph48; + double fRec77[2]; + FAUSTFLOAT fbargraph49; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAPanLebedev502"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + } + virtual void instanceResetUserInterface() { + fentry0 = 1.07; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fslider0 = 2.0; + fslider1 = 0.0; + fcheckbox2 = 0.0; + fslider2 = 2.0; + fslider3 = 0.0; + fcheckbox3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fslider6 = 0.0; + fslider7 = 0.0; + fcheckbox4 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "0+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "0+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(&fslider3, "1+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "1+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider7, "1+3", ""); + ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider6, "1+4", ""); + ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox0); + ui_interface->addCheckButton("1", &fcheckbox3); + ui_interface->addCheckButton("2", &fcheckbox4); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41601220", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41603770", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41606390", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41609000", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4160bcd0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4160e5b0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "osc", "/output7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41611600", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "osc", "/output8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41614260", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "osc", "/output9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41616f90", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "osc", "/output10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41619d60", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "osc", "/output11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4161cd80", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "osc", "/output12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4161fe10", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "osc", "/output13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41622ef0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "osc", "/output14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41626060", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "osc", "/output15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41628dc0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "osc", "/output16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4162bbc0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "osc", "/output17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4162ea10", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "osc", "/output18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a416318e0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "osc", "/output19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41634c80", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "osc", "/output20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41637ed0", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "osc", "/output21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4163b180", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "osc", "/output22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4163e4b0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "osc", "/output23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a416415b0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "osc", "/output24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41644710", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "osc", "/output25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a416478f0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "osc", "/output26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4164ab40", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph26, "osc", "/output27"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4164e490", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph27, "osc", "/output28"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41650ff0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph28, "osc", "/output29"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41653bb0", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph29, "osc", "/output30"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a416567e0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph30, "osc", "/output31"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41659ee0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph31, "osc", "/output32"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4165d220", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph32, "osc", "/output33"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a416605d0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph33, "osc", "/output34"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a416639f0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph34, "osc", "/output35"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41666e80", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph35, "osc", "/output36"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4166a380", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph36, "osc", "/output37"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4166d860", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph37, "osc", "/output38"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41670e20", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph38, "osc", "/output39"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41673be0", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph39, "osc", "/output40"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41676a00", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph40, "osc", "/output41"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41679890", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph41, "osc", "/output42"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4167c790", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph42, "osc", "/output43"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4167f700", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph43, "osc", "/output44"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a416826e0", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph44, "osc", "/output45"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41685730", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph45, "osc", "/output46"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a416887f0", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph46, "osc", "/output47"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4168b920", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph47, "osc", "/output48"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a4168eac0", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph48, "osc", "/output49"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41691cd0", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph49, "osc", "/output50"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8a41694f50", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fentry0); + double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); + double fSlow2 = double(fcheckbox1); + double fSlow3 = double(fslider0); + double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); + double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow6 = double(fcheckbox2); + double fSlow7 = double(fslider2); + double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); + double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow10 = (3 * (1 - double(fcheckbox3))); + double fSlow11 = double(fslider4); + double fSlow12 = sin(fSlow11); + double fSlow13 = cos(fSlow11); + double fSlow14 = double(fslider5); + double fSlow15 = (fSlow13 * cos(fSlow14)); + double fSlow16 = (6.123233995736766e-17 * fSlow15); + double fSlow17 = (fSlow12 + fSlow16); + double fSlow18 = (fConst3 / fSlow3); + double fSlow19 = (fSlow18 + 1); + double fSlow20 = (fConst2 / (fSlow3 * fSlow19)); + double fSlow21 = (fConst3 / fSlow0); + double fSlow22 = (1.0 / (fSlow21 + 1)); + double fSlow23 = (fSlow2 * fSlow0); + double fSlow24 = ((fSlow23 * fSlow19) / fSlow3); + double fSlow25 = (fConst2 / fSlow0); + double fSlow26 = ((1 - fSlow2) * fSlow0); + double fSlow27 = double(fslider6); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + double fSlow30 = double(fslider7); + double fSlow31 = (fSlow29 * cos(fSlow30)); + double fSlow32 = (6.123233995736766e-17 * fSlow31); + double fSlow33 = (fSlow28 + fSlow32); + double fSlow34 = (fConst3 / fSlow7); + double fSlow35 = (fSlow34 + 1); + double fSlow36 = (fConst2 / (fSlow7 * fSlow35)); + double fSlow37 = (fSlow0 * fSlow6); + double fSlow38 = ((fSlow37 * fSlow35) / fSlow7); + double fSlow39 = (fSlow0 * (1 - fSlow6)); + double fSlow40 = (2.5 * (1 - double(fcheckbox4))); + double fSlow41 = ((3 * faustpower<2>(fSlow33)) + -1); + double fSlow42 = faustpower<2>(fSlow21); + double fSlow43 = (1.0 / (((fConst4 / fSlow0) + (3 * fSlow42)) + 1)); + double fSlow44 = (12 * fSlow42); + double fSlow45 = (fSlow44 + (fConst5 / fSlow0)); + double fSlow46 = faustpower<2>(fSlow34); + double fSlow47 = (((fConst4 / fSlow7) + (3 * fSlow46)) + 1); + double fSlow48 = ((fSlow37 * fSlow47) / fSlow7); + double fSlow49 = (1.0 / fSlow47); + double fSlow50 = (12 * fSlow46); + double fSlow51 = ((fConst5 / fSlow7) + fSlow50); + double fSlow52 = ((3 * faustpower<2>(fSlow17)) + -1); + double fSlow53 = faustpower<2>(fSlow18); + double fSlow54 = (((fConst4 / fSlow3) + (3 * fSlow53)) + 1); + double fSlow55 = ((fSlow23 * fSlow54) / fSlow3); + double fSlow56 = (1.0 / fSlow54); + double fSlow57 = (12 * fSlow53); + double fSlow58 = ((fConst5 / fSlow3) + fSlow57); + double fSlow59 = ((3 * faustpower<2>(fSlow31)) + -1); + double fSlow60 = ((3 * faustpower<2>(fSlow15)) + -1); + double fSlow61 = (fSlow29 * cos((fSlow30 + -1.5707963267948966))); + double fSlow62 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); + double fSlow63 = ((3 * faustpower<2>(fSlow61)) + -1); + double fSlow64 = ((3 * faustpower<2>(fSlow62)) + -1); + double fSlow65 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); + double fSlow66 = ((3 * faustpower<2>(fSlow65)) + -1); + double fSlow67 = (fSlow29 * cos((fSlow30 + -3.141592653589793))); + double fSlow68 = ((3 * faustpower<2>(fSlow67)) + -1); + double fSlow69 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); + double fSlow70 = ((3 * faustpower<2>(fSlow69)) + -1); + double fSlow71 = (fSlow29 * cos((fSlow30 + -4.71238898038469))); + double fSlow72 = ((3 * faustpower<2>(fSlow71)) + -1); + double fSlow73 = (fSlow16 - fSlow12); + double fSlow74 = (fSlow32 - fSlow28); + double fSlow75 = ((3 * faustpower<2>(fSlow73)) + -1); + double fSlow76 = ((3 * faustpower<2>(fSlow74)) + -1); + double fSlow77 = (0.7071067811865476 * fSlow15); + double fSlow78 = (0.7071067811865475 * fSlow12); + double fSlow79 = (fSlow77 + fSlow78); + double fSlow80 = (0.7071067811865476 * fSlow31); + double fSlow81 = (0.7071067811865475 * fSlow28); + double fSlow82 = (fSlow80 + fSlow81); + double fSlow83 = ((3 * faustpower<2>(fSlow79)) + -1); + double fSlow84 = ((3 * faustpower<2>(fSlow82)) + -1); + double fSlow85 = (0.7071067811865476 * fSlow61); + double fSlow86 = (fSlow81 + fSlow85); + double fSlow87 = ((3 * faustpower<2>(fSlow86)) + -1); + double fSlow88 = (0.7071067811865476 * fSlow62); + double fSlow89 = (fSlow78 + fSlow88); + double fSlow90 = ((3 * faustpower<2>(fSlow89)) + -1); + double fSlow91 = (0.7071067811865476 * fSlow65); + double fSlow92 = (fSlow78 + fSlow91); + double fSlow93 = (0.7071067811865476 * fSlow67); + double fSlow94 = (fSlow81 + fSlow93); + double fSlow95 = ((3 * faustpower<2>(fSlow92)) + -1); + double fSlow96 = ((3 * faustpower<2>(fSlow94)) + -1); + double fSlow97 = (0.7071067811865476 * fSlow71); + double fSlow98 = (fSlow81 + fSlow97); + double fSlow99 = (0.7071067811865476 * fSlow69); + double fSlow100 = (fSlow78 + fSlow99); + double fSlow101 = ((3 * faustpower<2>(fSlow98)) + -1); + double fSlow102 = ((3 * faustpower<2>(fSlow100)) + -1); + double fSlow103 = (fSlow13 * cos((fSlow14 + -0.7853981633974483))); + double fSlow104 = ((3 * faustpower<2>(fSlow103)) + -1); + double fSlow105 = (fSlow29 * cos((fSlow30 + -0.7853981633974483))); + double fSlow106 = ((3 * faustpower<2>(fSlow105)) + -1); + double fSlow107 = (fSlow29 * cos((fSlow30 + -2.356194490192345))); + double fSlow108 = ((3 * faustpower<2>(fSlow107)) + -1); + double fSlow109 = (fSlow13 * cos((fSlow14 + -2.356194490192345))); + double fSlow110 = ((3 * faustpower<2>(fSlow109)) + -1); + double fSlow111 = (fSlow13 * cos((fSlow14 + -3.9269908169872414))); + double fSlow112 = ((3 * faustpower<2>(fSlow111)) + -1); + double fSlow113 = (fSlow29 * cos((fSlow30 + -3.9269908169872414))); + double fSlow114 = ((3 * faustpower<2>(fSlow113)) + -1); + double fSlow115 = (fSlow13 * cos((fSlow14 + -5.497787143782138))); + double fSlow116 = ((3 * faustpower<2>(fSlow115)) + -1); + double fSlow117 = (fSlow29 * cos((fSlow30 + -5.497787143782138))); + double fSlow118 = ((3 * faustpower<2>(fSlow117)) + -1); + double fSlow119 = (fSlow77 - fSlow78); + double fSlow120 = (fSlow80 - fSlow81); + double fSlow121 = ((3 * faustpower<2>(fSlow119)) + -1); + double fSlow122 = ((3 * faustpower<2>(fSlow120)) + -1); + double fSlow123 = (fSlow85 - fSlow81); + double fSlow124 = ((3 * faustpower<2>(fSlow123)) + -1); + double fSlow125 = (fSlow88 - fSlow78); + double fSlow126 = ((3 * faustpower<2>(fSlow125)) + -1); + double fSlow127 = (fSlow91 - fSlow78); + double fSlow128 = ((3 * faustpower<2>(fSlow127)) + -1); + double fSlow129 = (fSlow93 - fSlow81); + double fSlow130 = ((3 * faustpower<2>(fSlow129)) + -1); + double fSlow131 = (fSlow99 - fSlow78); + double fSlow132 = ((3 * faustpower<2>(fSlow131)) + -1); + double fSlow133 = (fSlow97 - fSlow81); + double fSlow134 = ((3 * faustpower<2>(fSlow133)) + -1); + double fSlow135 = (0.8164965809277259 * fSlow105); + double fSlow136 = (0.5773502691896258 * fSlow28); + double fSlow137 = (fSlow135 + fSlow136); + double fSlow138 = ((3 * faustpower<2>(fSlow137)) + -1); + double fSlow139 = (0.8164965809277259 * fSlow103); + double fSlow140 = (0.5773502691896258 * fSlow12); + double fSlow141 = (fSlow139 + fSlow140); + double fSlow142 = ((3 * faustpower<2>(fSlow141)) + -1); + double fSlow143 = (0.8164965809277259 * fSlow109); + double fSlow144 = (fSlow140 + fSlow143); + double fSlow145 = ((3 * faustpower<2>(fSlow144)) + -1); + double fSlow146 = (0.8164965809277259 * fSlow107); + double fSlow147 = (fSlow136 + fSlow146); + double fSlow148 = ((3 * faustpower<2>(fSlow147)) + -1); + double fSlow149 = (0.8164965809277259 * fSlow113); + double fSlow150 = (fSlow136 + fSlow149); + double fSlow151 = (0.8164965809277259 * fSlow111); + double fSlow152 = (fSlow140 + fSlow151); + double fSlow153 = ((3 * faustpower<2>(fSlow150)) + -1); + double fSlow154 = ((3 * faustpower<2>(fSlow152)) + -1); + double fSlow155 = (0.8164965809277259 * fSlow115); + double fSlow156 = (fSlow140 + fSlow155); + double fSlow157 = (0.8164965809277259 * fSlow117); + double fSlow158 = (fSlow136 + fSlow157); + double fSlow159 = ((3 * faustpower<2>(fSlow156)) + -1); + double fSlow160 = ((3 * faustpower<2>(fSlow158)) + -1); + double fSlow161 = (fSlow135 - fSlow136); + double fSlow162 = ((3 * faustpower<2>(fSlow161)) + -1); + double fSlow163 = (fSlow139 - fSlow140); + double fSlow164 = ((3 * faustpower<2>(fSlow163)) + -1); + double fSlow165 = (fSlow143 - fSlow140); + double fSlow166 = ((3 * faustpower<2>(fSlow165)) + -1); + double fSlow167 = (fSlow146 - fSlow136); + double fSlow168 = ((3 * faustpower<2>(fSlow167)) + -1); + double fSlow169 = (fSlow151 - fSlow140); + double fSlow170 = ((3 * faustpower<2>(fSlow169)) + -1); + double fSlow171 = (fSlow149 - fSlow136); + double fSlow172 = ((3 * faustpower<2>(fSlow171)) + -1); + double fSlow173 = (fSlow155 - fSlow140); + double fSlow174 = ((3 * faustpower<2>(fSlow173)) + -1); + double fSlow175 = (fSlow157 - fSlow136); + double fSlow176 = ((3 * faustpower<2>(fSlow175)) + -1); + double fSlow177 = (0.4264014327112203 * (fSlow13 * cos((fSlow14 + -0.7853981633974484)))); + double fSlow178 = (0.9045340337332911 * fSlow12); + double fSlow179 = (fSlow177 + fSlow178); + double fSlow180 = (0.4264014327112203 * (fSlow29 * cos((fSlow30 + -0.7853981633974484)))); + double fSlow181 = (0.9045340337332911 * fSlow28); + double fSlow182 = (fSlow180 + fSlow181); + double fSlow183 = ((3 * faustpower<2>(fSlow182)) + -1); + double fSlow184 = ((3 * faustpower<2>(fSlow179)) + -1); + double fSlow185 = (0.4264014327112203 * fSlow107); + double fSlow186 = (fSlow181 + fSlow185); + double fSlow187 = ((3 * faustpower<2>(fSlow186)) + -1); + double fSlow188 = (0.4264014327112203 * fSlow109); + double fSlow189 = (fSlow178 + fSlow188); + double fSlow190 = ((3 * faustpower<2>(fSlow189)) + -1); + double fSlow191 = (0.4264014327112203 * fSlow113); + double fSlow192 = (fSlow181 + fSlow191); + double fSlow193 = ((3 * faustpower<2>(fSlow192)) + -1); + double fSlow194 = (0.4264014327112203 * fSlow111); + double fSlow195 = (fSlow178 + fSlow194); + double fSlow196 = ((3 * faustpower<2>(fSlow195)) + -1); + double fSlow197 = (0.4264014327112203 * fSlow115); + double fSlow198 = (fSlow178 + fSlow197); + double fSlow199 = ((3 * faustpower<2>(fSlow198)) + -1); + double fSlow200 = (0.4264014327112203 * fSlow117); + double fSlow201 = (fSlow181 + fSlow200); + double fSlow202 = ((3 * faustpower<2>(fSlow201)) + -1); + double fSlow203 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -0.32175055439664263)))); + double fSlow204 = (0.3015113445777635 * fSlow28); + double fSlow205 = (fSlow203 + fSlow204); + double fSlow206 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -0.32175055439664263)))); + double fSlow207 = (0.3015113445777635 * fSlow12); + double fSlow208 = (fSlow206 + fSlow207); + double fSlow209 = ((3 * faustpower<2>(fSlow205)) + -1); + double fSlow210 = ((3 * faustpower<2>(fSlow208)) + -1); + double fSlow211 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -1.2490457723982544)))); + double fSlow212 = (fSlow204 + fSlow211); + double fSlow213 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -1.2490457723982544)))); + double fSlow214 = (fSlow207 + fSlow213); + double fSlow215 = ((3 * faustpower<2>(fSlow212)) + -1); + double fSlow216 = ((3 * faustpower<2>(fSlow214)) + -1); + double fSlow217 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -1.8925468811915387)))); + double fSlow218 = (fSlow204 + fSlow217); + double fSlow219 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -1.8925468811915387)))); + double fSlow220 = (fSlow207 + fSlow219); + double fSlow221 = ((3 * faustpower<2>(fSlow218)) + -1); + double fSlow222 = ((3 * faustpower<2>(fSlow220)) + -1); + double fSlow223 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -2.8198420991931505)))); + double fSlow224 = (fSlow204 + fSlow223); + double fSlow225 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -2.8198420991931505)))); + double fSlow226 = (fSlow207 + fSlow225); + double fSlow227 = ((3 * faustpower<2>(fSlow224)) + -1); + double fSlow228 = ((3 * faustpower<2>(fSlow226)) + -1); + double fSlow229 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -3.4633432079864357)))); + double fSlow230 = (fSlow204 + fSlow229); + double fSlow231 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -3.4633432079864357)))); + double fSlow232 = (fSlow207 + fSlow231); + double fSlow233 = ((3 * faustpower<2>(fSlow230)) + -1); + double fSlow234 = ((3 * faustpower<2>(fSlow232)) + -1); + double fSlow235 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -4.3906384259880475)))); + double fSlow236 = (fSlow204 + fSlow235); + double fSlow237 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -4.3906384259880475)))); + double fSlow238 = (fSlow207 + fSlow237); + double fSlow239 = ((3 * faustpower<2>(fSlow236)) + -1); + double fSlow240 = ((3 * faustpower<2>(fSlow238)) + -1); + double fSlow241 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -5.034139534781332)))); + double fSlow242 = (fSlow204 + fSlow241); + double fSlow243 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -5.034139534781332)))); + double fSlow244 = (fSlow207 + fSlow243); + double fSlow245 = ((3 * faustpower<2>(fSlow242)) + -1); + double fSlow246 = ((3 * faustpower<2>(fSlow244)) + -1); + double fSlow247 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -5.961434752782943)))); + double fSlow248 = (fSlow204 + fSlow247); + double fSlow249 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -5.961434752782943)))); + double fSlow250 = (fSlow207 + fSlow249); + double fSlow251 = ((3 * faustpower<2>(fSlow248)) + -1); + double fSlow252 = ((3 * faustpower<2>(fSlow250)) + -1); + double fSlow253 = (fSlow206 - fSlow207); + double fSlow254 = ((3 * faustpower<2>(fSlow253)) + -1); + double fSlow255 = (fSlow203 - fSlow204); + double fSlow256 = ((3 * faustpower<2>(fSlow255)) + -1); + double fSlow257 = (fSlow213 - fSlow207); + double fSlow258 = ((3 * faustpower<2>(fSlow257)) + -1); + double fSlow259 = (fSlow211 - fSlow204); + double fSlow260 = ((3 * faustpower<2>(fSlow259)) + -1); + double fSlow261 = (fSlow219 - fSlow207); + double fSlow262 = (fSlow217 - fSlow204); + double fSlow263 = ((3 * faustpower<2>(fSlow262)) + -1); + double fSlow264 = ((3 * faustpower<2>(fSlow261)) + -1); + double fSlow265 = (fSlow225 - fSlow207); + double fSlow266 = ((3 * faustpower<2>(fSlow265)) + -1); + double fSlow267 = (fSlow223 - fSlow204); + double fSlow268 = ((3 * faustpower<2>(fSlow267)) + -1); + double fSlow269 = (fSlow231 - fSlow207); + double fSlow270 = ((3 * faustpower<2>(fSlow269)) + -1); + double fSlow271 = (fSlow229 - fSlow204); + double fSlow272 = ((3 * faustpower<2>(fSlow271)) + -1); + double fSlow273 = (fSlow237 - fSlow207); + double fSlow274 = ((3 * faustpower<2>(fSlow273)) + -1); + double fSlow275 = (fSlow235 - fSlow204); + double fSlow276 = ((3 * faustpower<2>(fSlow275)) + -1); + double fSlow277 = (fSlow243 - fSlow207); + double fSlow278 = ((3 * faustpower<2>(fSlow277)) + -1); + double fSlow279 = (fSlow241 - fSlow204); + double fSlow280 = ((3 * faustpower<2>(fSlow279)) + -1); + double fSlow281 = (fSlow249 - fSlow207); + double fSlow282 = ((3 * faustpower<2>(fSlow281)) + -1); + double fSlow283 = (fSlow247 - fSlow204); + double fSlow284 = ((3 * faustpower<2>(fSlow283)) + -1); + double fSlow285 = (fSlow177 - fSlow178); + double fSlow286 = ((3 * faustpower<2>(fSlow285)) + -1); + double fSlow287 = (fSlow180 - fSlow181); + double fSlow288 = ((3 * faustpower<2>(fSlow287)) + -1); + double fSlow289 = (fSlow188 - fSlow178); + double fSlow290 = ((3 * faustpower<2>(fSlow289)) + -1); + double fSlow291 = (fSlow185 - fSlow181); + double fSlow292 = ((3 * faustpower<2>(fSlow291)) + -1); + double fSlow293 = (fSlow194 - fSlow178); + double fSlow294 = ((3 * faustpower<2>(fSlow293)) + -1); + double fSlow295 = (fSlow191 - fSlow181); + double fSlow296 = ((3 * faustpower<2>(fSlow295)) + -1); + double fSlow297 = (fSlow197 - fSlow178); + double fSlow298 = ((3 * faustpower<2>(fSlow297)) + -1); + double fSlow299 = (fSlow200 - fSlow181); + double fSlow300 = ((3 * faustpower<2>(fSlow299)) + -1); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev503.cpp b/source/HOAUGens/HOAPanLebedev503.cpp new file mode 100644 index 0000000000..72cce2de23 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev503.cpp @@ -0,0 +1,2611 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev503" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fConst2; + FAUSTFLOAT fentry0; + double fConst3; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + double fRec2[2]; + double fConst4; + double fRec3[2]; + double fRec4[2]; + double fRec1[2]; + double fRec5[2]; + double fVec0[2]; + double fRec6[2]; + double fRec8[2]; + double fRec9[2]; + double fRec7[2]; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + double fRec11[2]; + double fRec12[2]; + double fRec13[2]; + double fRec10[2]; + double fRec14[2]; + double fVec1[2]; + double fRec15[2]; + double fRec17[2]; + double fRec18[2]; + double fRec16[2]; + FAUSTFLOAT fcheckbox3; + double fConst5; + double fConst6; + double fConst7; + double fRec23[2]; + double fRec22[2]; + double fConst8; + double fRec21[2]; + double fRec24[2]; + double fVec2[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec30[2]; + double fRec29[2]; + double fRec28[2]; + double fRec31[2]; + double fRec27[2]; + FAUSTFLOAT fcheckbox4; + double fConst9; + double fRec34[2]; + double fRec33[2]; + double fRec32[2]; + double fRec36[2]; + double fRec35[2]; + double fRec39[2]; + double fRec38[2]; + double fRec37[2]; + double fRec41[2]; + double fRec40[2]; + double fRec46[2]; + double fRec45[2]; + double fRec44[2]; + double fRec47[2]; + double fVec3[2]; + double fRec48[2]; + double fRec49[2]; + double fRec43[2]; + double fRec42[2]; + double fRec53[2]; + double fRec52[2]; + double fRec51[2]; + double fRec54[2]; + double fRec50[2]; + FAUSTFLOAT fcheckbox5; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec55[2]; + FAUSTFLOAT fbargraph1; + double fRec56[2]; + FAUSTFLOAT fbargraph2; + double fRec57[2]; + FAUSTFLOAT fbargraph3; + double fRec58[2]; + FAUSTFLOAT fbargraph4; + double fRec59[2]; + FAUSTFLOAT fbargraph5; + double fRec60[2]; + FAUSTFLOAT fbargraph6; + double fRec61[2]; + FAUSTFLOAT fbargraph7; + double fRec62[2]; + FAUSTFLOAT fbargraph8; + double fRec63[2]; + FAUSTFLOAT fbargraph9; + double fRec64[2]; + FAUSTFLOAT fbargraph10; + double fRec65[2]; + FAUSTFLOAT fbargraph11; + double fRec66[2]; + FAUSTFLOAT fbargraph12; + double fRec67[2]; + FAUSTFLOAT fbargraph13; + double fRec68[2]; + FAUSTFLOAT fbargraph14; + double fRec69[2]; + FAUSTFLOAT fbargraph15; + double fRec70[2]; + FAUSTFLOAT fbargraph16; + double fRec71[2]; + FAUSTFLOAT fbargraph17; + double fRec72[2]; + FAUSTFLOAT fbargraph18; + double fRec73[2]; + FAUSTFLOAT fbargraph19; + double fRec74[2]; + FAUSTFLOAT fbargraph20; + double fRec75[2]; + FAUSTFLOAT fbargraph21; + double fRec76[2]; + FAUSTFLOAT fbargraph22; + double fRec77[2]; + FAUSTFLOAT fbargraph23; + double fRec78[2]; + FAUSTFLOAT fbargraph24; + double fRec79[2]; + FAUSTFLOAT fbargraph25; + double fRec80[2]; + FAUSTFLOAT fbargraph26; + double fRec81[2]; + FAUSTFLOAT fbargraph27; + double fRec82[2]; + FAUSTFLOAT fbargraph28; + double fRec83[2]; + FAUSTFLOAT fbargraph29; + double fRec84[2]; + FAUSTFLOAT fbargraph30; + double fRec85[2]; + FAUSTFLOAT fbargraph31; + double fRec86[2]; + FAUSTFLOAT fbargraph32; + double fRec87[2]; + FAUSTFLOAT fbargraph33; + double fRec88[2]; + FAUSTFLOAT fbargraph34; + double fRec89[2]; + FAUSTFLOAT fbargraph35; + double fRec90[2]; + FAUSTFLOAT fbargraph36; + double fRec91[2]; + FAUSTFLOAT fbargraph37; + double fRec92[2]; + FAUSTFLOAT fbargraph38; + double fRec93[2]; + FAUSTFLOAT fbargraph39; + double fRec94[2]; + FAUSTFLOAT fbargraph40; + double fRec95[2]; + FAUSTFLOAT fbargraph41; + double fRec96[2]; + FAUSTFLOAT fbargraph42; + double fRec97[2]; + FAUSTFLOAT fbargraph43; + double fRec98[2]; + FAUSTFLOAT fbargraph44; + double fRec99[2]; + FAUSTFLOAT fbargraph45; + double fRec100[2]; + FAUSTFLOAT fbargraph46; + double fRec101[2]; + FAUSTFLOAT fbargraph47; + double fRec102[2]; + FAUSTFLOAT fbargraph48; + double fRec103[2]; + FAUSTFLOAT fbargraph49; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAPanLebedev503"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (5.1e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (1.02e+03 / fConst0); + fConst5 = (789.5430205728705 / fConst0); + fConst6 = (394.7715102864353 / fConst0); + fConst7 = (625.2284897135664 / fConst0); + fConst8 = (1250.4569794271329 / fConst0); + fConst9 = (3.4e+02 / fConst0); + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fslider0 = 0.0; + fslider1 = 0.0; + fentry0 = 1.07; + fcheckbox1 = 0.0; + fslider2 = 2.0; + fslider3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fcheckbox2 = 0.0; + fslider6 = 2.0; + fslider7 = 0.0; + fcheckbox3 = 0.0; + fcheckbox4 = 0.0; + fcheckbox5 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec81[i] = 0; + for (int i=0; i<2; i++) fRec82[i] = 0; + for (int i=0; i<2; i++) fRec83[i] = 0; + for (int i=0; i<2; i++) fRec84[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; + for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec87[i] = 0; + for (int i=0; i<2; i++) fRec88[i] = 0; + for (int i=0; i<2; i++) fRec89[i] = 0; + for (int i=0; i<2; i++) fRec90[i] = 0; + for (int i=0; i<2; i++) fRec91[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec93[i] = 0; + for (int i=0; i<2; i++) fRec94[i] = 0; + for (int i=0; i<2; i++) fRec95[i] = 0; + for (int i=0; i<2; i++) fRec96[i] = 0; + for (int i=0; i<2; i++) fRec97[i] = 0; + for (int i=0; i<2; i++) fRec98[i] = 0; + for (int i=0; i<2; i++) fRec99[i] = 0; + for (int i=0; i<2; i++) fRec100[i] = 0; + for (int i=0; i<2; i++) fRec101[i] = 0; + for (int i=0; i<2; i++) fRec102[i] = 0; + for (int i=0; i<2; i++) fRec103[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider7, "0+1", ""); + ui_interface->declare(&fslider7, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider7, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider6, "0+2", ""); + ui_interface->declare(&fslider6, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider6, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "0+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "0+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(&fslider3, "1+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "1+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider1, "1+3", ""); + ui_interface->declare(&fslider1, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "1+4", ""); + ui_interface->declare(&fslider0, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox5); + ui_interface->addCheckButton("1", &fcheckbox4); + ui_interface->addCheckButton("2", &fcheckbox0); + ui_interface->addCheckButton("3", &fcheckbox3); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6637360", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d663a5f0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d663de10", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6641690", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6645010", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66483d0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "osc", "/output7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d664bf60", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "osc", "/output8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d664f670", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "osc", "/output9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6652e10", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "osc", "/output10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6656640", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "osc", "/output11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d665a250", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "osc", "/output12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d665de10", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "osc", "/output13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6661c50", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "osc", "/output14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66659c0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "osc", "/output15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6669300", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "osc", "/output16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d666cbf0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "osc", "/output17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6670550", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "osc", "/output18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6673f20", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "osc", "/output19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66780c0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "osc", "/output20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d667bdd0", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "osc", "/output21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d667fb90", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "osc", "/output22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66839a0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "osc", "/output23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6687590", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "osc", "/output24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d668b200", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "osc", "/output25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d668eed0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "osc", "/output26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6692c10", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph26, "osc", "/output27"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d6696d20", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph27, "osc", "/output28"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d669a3a0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph28, "osc", "/output29"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d669da00", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph29, "osc", "/output30"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66a1170", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph30, "osc", "/output31"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66a5340", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph31, "osc", "/output32"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66a90d0", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph32, "osc", "/output33"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66acf60", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph33, "osc", "/output34"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66b0ec0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph34, "osc", "/output35"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66b4e30", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph35, "osc", "/output36"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66b8e00", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph36, "osc", "/output37"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66bce20", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph37, "osc", "/output38"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66c0eb0", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph38, "osc", "/output39"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66c4780", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph39, "osc", "/output40"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66c8060", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph40, "osc", "/output41"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66cb980", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph41, "osc", "/output42"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66cf340", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph42, "osc", "/output43"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66d2da0", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph43, "osc", "/output44"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66d6810", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph44, "osc", "/output45"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66da350", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph45, "osc", "/output46"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66dded0", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph46, "osc", "/output47"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66e1ac0", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph47, "osc", "/output48"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66e5740", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph48, "osc", "/output49"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66e9430", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph49, "osc", "/output50"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f83d66ed190", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (2.5 * (1 - double(fcheckbox0))); + double fSlow1 = double(fslider0); + double fSlow2 = sin(fSlow1); + double fSlow3 = cos(fSlow1); + double fSlow4 = double(fslider1); + double fSlow5 = (fSlow3 * cos(fSlow4)); + double fSlow6 = (6.123233995736766e-17 * fSlow5); + double fSlow7 = (fSlow2 + fSlow6); + double fSlow8 = faustpower<2>(fSlow7); + double fSlow9 = ((3 * fSlow8) + -1); + double fSlow10 = double(fentry0); + double fSlow11 = (fConst3 / fSlow10); + double fSlow12 = faustpower<2>(fSlow11); + double fSlow13 = (1.0 / (((fConst2 / fSlow10) + (3 * fSlow12)) + 1)); + double fSlow14 = double(fcheckbox1); + double fSlow15 = (fSlow10 * fSlow14); + double fSlow16 = double(fslider2); + double fSlow17 = (fConst3 / fSlow16); + double fSlow18 = faustpower<2>(fSlow17); + double fSlow19 = (((fConst2 / fSlow16) + (3 * fSlow18)) + 1); + double fSlow20 = ((fSlow15 * fSlow19) / fSlow16); + double fSlow21 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow22 = (12 * fSlow12); + double fSlow23 = (fSlow22 + (fConst4 / fSlow10)); + double fSlow24 = (1.0 / fSlow19); + double fSlow25 = (12 * fSlow18); + double fSlow26 = ((fConst4 / fSlow16) + fSlow25); + double fSlow27 = (fSlow10 * (1 - fSlow14)); + double fSlow28 = double(fslider4); + double fSlow29 = sin(fSlow28); + double fSlow30 = cos(fSlow28); + double fSlow31 = double(fslider5); + double fSlow32 = (fSlow30 * cos(fSlow31)); + double fSlow33 = (6.123233995736766e-17 * fSlow32); + double fSlow34 = (fSlow29 + fSlow33); + double fSlow35 = faustpower<2>(fSlow34); + double fSlow36 = ((3 * fSlow35) + -1); + double fSlow37 = double(fcheckbox2); + double fSlow38 = (fSlow37 * fSlow10); + double fSlow39 = double(fslider6); + double fSlow40 = (fConst3 / fSlow39); + double fSlow41 = faustpower<2>(fSlow40); + double fSlow42 = (((fConst2 / fSlow39) + (3 * fSlow41)) + 1); + double fSlow43 = ((fSlow38 * fSlow42) / fSlow39); + double fSlow44 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider7)))); + double fSlow45 = (1.0 / fSlow42); + double fSlow46 = (12 * fSlow41); + double fSlow47 = ((fConst4 / fSlow39) + fSlow46); + double fSlow48 = ((1 - fSlow37) * fSlow10); + double fSlow49 = (1 - double(fcheckbox3)); + double fSlow50 = (3.5 * (fSlow49 * ((5 * fSlow35) + -3))); + double fSlow51 = ((fConst6 / fSlow39) + 1); + double fSlow52 = (fConst5 / (fSlow39 * fSlow51)); + double fSlow53 = (1.0 / ((fConst6 / fSlow10) + 1)); + double fSlow54 = (1.0 / (((6.45943269348338 * fSlow12) + (fConst7 / fSlow10)) + 1)); + double fSlow55 = (((fConst7 / fSlow39) + (6.45943269348338 * fSlow41)) + 1); + double fSlow56 = ((fSlow38 * fSlow55) / fSlow39); + double fSlow57 = (25.83773077393352 * fSlow12); + double fSlow58 = (fSlow57 + (fConst8 / fSlow10)); + double fSlow59 = (1.0 / fSlow55); + double fSlow60 = (25.83773077393352 * fSlow41); + double fSlow61 = (fSlow60 + (fConst8 / fSlow39)); + double fSlow62 = (fConst5 / fSlow10); + double fSlow63 = (3 * (1 - double(fcheckbox4))); + double fSlow64 = (fSlow40 + 1); + double fSlow65 = (fConst9 / (fSlow39 * fSlow64)); + double fSlow66 = (1.0 / (fSlow11 + 1)); + double fSlow67 = ((fSlow38 * fSlow64) / fSlow39); + double fSlow68 = (fConst9 / fSlow10); + double fSlow69 = (fSlow17 + 1); + double fSlow70 = (fConst9 / (fSlow16 * fSlow69)); + double fSlow71 = ((fSlow15 * fSlow69) / fSlow16); + double fSlow72 = (3.5 * (fSlow49 * ((5 * fSlow8) + -3))); + double fSlow73 = ((fConst6 / fSlow16) + 1); + double fSlow74 = (fConst5 / (fSlow16 * fSlow73)); + double fSlow75 = (((fConst7 / fSlow16) + (6.45943269348338 * fSlow18)) + 1); + double fSlow76 = ((fSlow15 * fSlow75) / fSlow16); + double fSlow77 = (1.0 / fSlow75); + double fSlow78 = (25.83773077393352 * fSlow18); + double fSlow79 = ((fConst8 / fSlow16) + fSlow78); + double fSlow80 = (fSlow10 * (1 - double(fcheckbox5))); + double fSlow81 = (1 - (fSlow37 * (1 - (1.0 / fSlow39)))); + double fSlow82 = (1 - (fSlow14 * (1 - (1.0 / fSlow16)))); + double fSlow83 = (3.5 * fSlow49); + double fSlow84 = ((5 * faustpower<3>(fSlow5)) - (3 * fSlow5)); + double fSlow85 = ((5 * faustpower<3>(fSlow32)) - (3 * fSlow32)); + double fSlow86 = ((3 * faustpower<2>(fSlow5)) + -1); + double fSlow87 = ((3 * faustpower<2>(fSlow32)) + -1); + double fSlow88 = (fSlow3 * cos((fSlow4 + -1.5707963267948966))); + double fSlow89 = ((5 * faustpower<3>(fSlow88)) - (3 * fSlow88)); + double fSlow90 = (fSlow30 * cos((fSlow31 + -1.5707963267948966))); + double fSlow91 = ((5 * faustpower<3>(fSlow90)) - (3 * fSlow90)); + double fSlow92 = ((3 * faustpower<2>(fSlow90)) + -1); + double fSlow93 = ((3 * faustpower<2>(fSlow88)) + -1); + double fSlow94 = (fSlow3 * cos((fSlow4 + -3.141592653589793))); + double fSlow95 = ((5 * faustpower<3>(fSlow94)) - (3 * fSlow94)); + double fSlow96 = (fSlow30 * cos((fSlow31 + -3.141592653589793))); + double fSlow97 = ((5 * faustpower<3>(fSlow96)) - (3 * fSlow96)); + double fSlow98 = ((3 * faustpower<2>(fSlow96)) + -1); + double fSlow99 = ((3 * faustpower<2>(fSlow94)) + -1); + double fSlow100 = (fSlow3 * cos((fSlow4 + -4.71238898038469))); + double fSlow101 = ((5 * faustpower<3>(fSlow100)) - (3 * fSlow100)); + double fSlow102 = (fSlow30 * cos((fSlow31 + -4.71238898038469))); + double fSlow103 = ((5 * faustpower<3>(fSlow102)) - (3 * fSlow102)); + double fSlow104 = ((3 * faustpower<2>(fSlow102)) + -1); + double fSlow105 = ((3 * faustpower<2>(fSlow100)) + -1); + double fSlow106 = (fSlow6 - fSlow2); + double fSlow107 = faustpower<2>(fSlow106); + double fSlow108 = ((3 * fSlow107) + -1); + double fSlow109 = (fSlow33 - fSlow29); + double fSlow110 = faustpower<2>(fSlow109); + double fSlow111 = ((3 * fSlow110) + -1); + double fSlow112 = (3.5 * (fSlow49 * ((5 * fSlow107) + -3))); + double fSlow113 = (3.5 * (fSlow49 * ((5 * fSlow110) + -3))); + double fSlow114 = (0.7071067811865476 * fSlow5); + double fSlow115 = (0.7071067811865475 * fSlow2); + double fSlow116 = (fSlow114 + fSlow115); + double fSlow117 = faustpower<2>(fSlow116); + double fSlow118 = (3.5 * (fSlow49 * ((5 * fSlow117) + -3))); + double fSlow119 = (0.7071067811865476 * fSlow32); + double fSlow120 = (0.7071067811865475 * fSlow29); + double fSlow121 = (fSlow119 + fSlow120); + double fSlow122 = faustpower<2>(fSlow121); + double fSlow123 = (3.5 * (fSlow49 * ((5 * fSlow122) + -3))); + double fSlow124 = ((3 * fSlow122) + -1); + double fSlow125 = ((3 * fSlow117) + -1); + double fSlow126 = (0.7071067811865476 * fSlow88); + double fSlow127 = (fSlow115 + fSlow126); + double fSlow128 = faustpower<2>(fSlow127); + double fSlow129 = (3.5 * (fSlow49 * ((5 * fSlow128) + -3))); + double fSlow130 = (0.7071067811865476 * fSlow90); + double fSlow131 = (fSlow120 + fSlow130); + double fSlow132 = faustpower<2>(fSlow131); + double fSlow133 = (3.5 * (fSlow49 * ((5 * fSlow132) + -3))); + double fSlow134 = ((3 * fSlow132) + -1); + double fSlow135 = ((3 * fSlow128) + -1); + double fSlow136 = (0.7071067811865476 * fSlow94); + double fSlow137 = (fSlow115 + fSlow136); + double fSlow138 = faustpower<2>(fSlow137); + double fSlow139 = (3.5 * (fSlow49 * ((5 * fSlow138) + -3))); + double fSlow140 = (0.7071067811865476 * fSlow96); + double fSlow141 = (fSlow120 + fSlow140); + double fSlow142 = faustpower<2>(fSlow141); + double fSlow143 = (3.5 * (fSlow49 * ((5 * fSlow142) + -3))); + double fSlow144 = ((3 * fSlow142) + -1); + double fSlow145 = ((3 * fSlow138) + -1); + double fSlow146 = (0.7071067811865476 * fSlow102); + double fSlow147 = (fSlow120 + fSlow146); + double fSlow148 = faustpower<2>(fSlow147); + double fSlow149 = (3.5 * (fSlow49 * ((5 * fSlow148) + -3))); + double fSlow150 = (0.7071067811865476 * fSlow100); + double fSlow151 = (fSlow115 + fSlow150); + double fSlow152 = faustpower<2>(fSlow151); + double fSlow153 = (3.5 * (fSlow49 * ((5 * fSlow152) + -3))); + double fSlow154 = ((3 * fSlow152) + -1); + double fSlow155 = ((3 * fSlow148) + -1); + double fSlow156 = (fSlow3 * cos((fSlow4 + -0.7853981633974483))); + double fSlow157 = ((3 * faustpower<2>(fSlow156)) + -1); + double fSlow158 = (fSlow30 * cos((fSlow31 + -0.7853981633974483))); + double fSlow159 = ((3 * faustpower<2>(fSlow158)) + -1); + double fSlow160 = ((5 * faustpower<3>(fSlow156)) - (3 * fSlow156)); + double fSlow161 = ((5 * faustpower<3>(fSlow158)) - (3 * fSlow158)); + double fSlow162 = (fSlow30 * cos((fSlow31 + -2.356194490192345))); + double fSlow163 = ((5 * faustpower<3>(fSlow162)) - (3 * fSlow162)); + double fSlow164 = (fSlow3 * cos((fSlow4 + -2.356194490192345))); + double fSlow165 = ((5 * faustpower<3>(fSlow164)) - (3 * fSlow164)); + double fSlow166 = ((3 * faustpower<2>(fSlow162)) + -1); + double fSlow167 = ((3 * faustpower<2>(fSlow164)) + -1); + double fSlow168 = (fSlow30 * cos((fSlow31 + -3.9269908169872414))); + double fSlow169 = ((3 * faustpower<2>(fSlow168)) + -1); + double fSlow170 = (fSlow3 * cos((fSlow4 + -3.9269908169872414))); + double fSlow171 = ((3 * faustpower<2>(fSlow170)) + -1); + double fSlow172 = ((5 * faustpower<3>(fSlow170)) - (3 * fSlow170)); + double fSlow173 = ((5 * faustpower<3>(fSlow168)) - (3 * fSlow168)); + double fSlow174 = (fSlow30 * cos((fSlow31 + -5.497787143782138))); + double fSlow175 = ((5 * faustpower<3>(fSlow174)) - (3 * fSlow174)); + double fSlow176 = (fSlow3 * cos((fSlow4 + -5.497787143782138))); + double fSlow177 = ((5 * faustpower<3>(fSlow176)) - (3 * fSlow176)); + double fSlow178 = ((3 * faustpower<2>(fSlow174)) + -1); + double fSlow179 = ((3 * faustpower<2>(fSlow176)) + -1); + double fSlow180 = (fSlow119 - fSlow120); + double fSlow181 = faustpower<2>(fSlow180); + double fSlow182 = ((3 * fSlow181) + -1); + double fSlow183 = (fSlow114 - fSlow115); + double fSlow184 = faustpower<2>(fSlow183); + double fSlow185 = ((3 * fSlow184) + -1); + double fSlow186 = (3.5 * (fSlow49 * ((5 * fSlow181) + -3))); + double fSlow187 = (3.5 * (fSlow49 * ((5 * fSlow184) + -3))); + double fSlow188 = (fSlow130 - fSlow120); + double fSlow189 = faustpower<2>(fSlow188); + double fSlow190 = ((3 * fSlow189) + -1); + double fSlow191 = (fSlow126 - fSlow115); + double fSlow192 = faustpower<2>(fSlow191); + double fSlow193 = ((3 * fSlow192) + -1); + double fSlow194 = (3.5 * (fSlow49 * ((5 * fSlow189) + -3))); + double fSlow195 = (3.5 * (fSlow49 * ((5 * fSlow192) + -3))); + double fSlow196 = (fSlow140 - fSlow120); + double fSlow197 = faustpower<2>(fSlow196); + double fSlow198 = ((3 * fSlow197) + -1); + double fSlow199 = (fSlow136 - fSlow115); + double fSlow200 = faustpower<2>(fSlow199); + double fSlow201 = ((3 * fSlow200) + -1); + double fSlow202 = (3.5 * (fSlow49 * ((5 * fSlow197) + -3))); + double fSlow203 = (3.5 * (fSlow49 * ((5 * fSlow200) + -3))); + double fSlow204 = (fSlow146 - fSlow120); + double fSlow205 = faustpower<2>(fSlow204); + double fSlow206 = ((3 * fSlow205) + -1); + double fSlow207 = (fSlow150 - fSlow115); + double fSlow208 = faustpower<2>(fSlow207); + double fSlow209 = ((3 * fSlow208) + -1); + double fSlow210 = (3.5 * (fSlow49 * ((5 * fSlow205) + -3))); + double fSlow211 = (3.5 * (fSlow49 * ((5 * fSlow208) + -3))); + double fSlow212 = (0.5773502691896258 * fSlow2); + double fSlow213 = (0.8164965809277259 * fSlow156); + double fSlow214 = (fSlow212 + fSlow213); + double fSlow215 = faustpower<2>(fSlow214); + double fSlow216 = ((3 * fSlow215) + -1); + double fSlow217 = (0.8164965809277259 * fSlow158); + double fSlow218 = (0.5773502691896258 * fSlow29); + double fSlow219 = (fSlow217 + fSlow218); + double fSlow220 = faustpower<2>(fSlow219); + double fSlow221 = ((3 * fSlow220) + -1); + double fSlow222 = (3.5 * (fSlow49 * ((5 * fSlow220) + -3))); + double fSlow223 = (3.5 * (fSlow49 * ((5 * fSlow215) + -3))); + double fSlow224 = (0.8164965809277259 * fSlow162); + double fSlow225 = (fSlow218 + fSlow224); + double fSlow226 = faustpower<2>(fSlow225); + double fSlow227 = (3.5 * (fSlow49 * ((5 * fSlow226) + -3))); + double fSlow228 = (0.8164965809277259 * fSlow164); + double fSlow229 = (fSlow228 + fSlow212); + double fSlow230 = faustpower<2>(fSlow229); + double fSlow231 = (3.5 * (fSlow49 * ((5 * fSlow230) + -3))); + double fSlow232 = ((3 * fSlow226) + -1); + double fSlow233 = ((3 * fSlow230) + -1); + double fSlow234 = (0.8164965809277259 * fSlow168); + double fSlow235 = (fSlow234 + fSlow218); + double fSlow236 = faustpower<2>(fSlow235); + double fSlow237 = ((3 * fSlow236) + -1); + double fSlow238 = (0.8164965809277259 * fSlow170); + double fSlow239 = (fSlow238 + fSlow212); + double fSlow240 = faustpower<2>(fSlow239); + double fSlow241 = ((3 * fSlow240) + -1); + double fSlow242 = (3.5 * (fSlow49 * ((5 * fSlow236) + -3))); + double fSlow243 = (3.5 * (fSlow49 * ((5 * fSlow240) + -3))); + double fSlow244 = (0.8164965809277259 * fSlow174); + double fSlow245 = (fSlow244 + fSlow218); + double fSlow246 = faustpower<2>(fSlow245); + double fSlow247 = (3.5 * (fSlow49 * ((5 * fSlow246) + -3))); + double fSlow248 = (0.8164965809277259 * fSlow176); + double fSlow249 = (fSlow248 + fSlow212); + double fSlow250 = faustpower<2>(fSlow249); + double fSlow251 = (3.5 * (fSlow49 * ((5 * fSlow250) + -3))); + double fSlow252 = ((3 * fSlow246) + -1); + double fSlow253 = ((3 * fSlow250) + -1); + double fSlow254 = (fSlow217 - fSlow218); + double fSlow255 = faustpower<2>(fSlow254); + double fSlow256 = ((3 * fSlow255) + -1); + double fSlow257 = (fSlow213 - fSlow212); + double fSlow258 = faustpower<2>(fSlow257); + double fSlow259 = ((3 * fSlow258) + -1); + double fSlow260 = (3.5 * (fSlow49 * ((5 * fSlow255) + -3))); + double fSlow261 = (3.5 * (fSlow49 * ((5 * fSlow258) + -3))); + double fSlow262 = (fSlow224 - fSlow218); + double fSlow263 = faustpower<2>(fSlow262); + double fSlow264 = (3.5 * (fSlow49 * ((5 * fSlow263) + -3))); + double fSlow265 = (fSlow228 - fSlow212); + double fSlow266 = faustpower<2>(fSlow265); + double fSlow267 = (3.5 * (fSlow49 * ((5 * fSlow266) + -3))); + double fSlow268 = ((3 * fSlow263) + -1); + double fSlow269 = ((3 * fSlow266) + -1); + double fSlow270 = (fSlow234 - fSlow218); + double fSlow271 = faustpower<2>(fSlow270); + double fSlow272 = (3.5 * (fSlow49 * ((5 * fSlow271) + -3))); + double fSlow273 = (fSlow238 - fSlow212); + double fSlow274 = faustpower<2>(fSlow273); + double fSlow275 = (3.5 * (fSlow49 * ((5 * fSlow274) + -3))); + double fSlow276 = ((3 * fSlow271) + -1); + double fSlow277 = ((3 * fSlow274) + -1); + double fSlow278 = (fSlow244 - fSlow218); + double fSlow279 = faustpower<2>(fSlow278); + double fSlow280 = (3.5 * (fSlow49 * ((5 * fSlow279) + -3))); + double fSlow281 = (fSlow248 - fSlow212); + double fSlow282 = faustpower<2>(fSlow281); + double fSlow283 = (3.5 * (fSlow49 * ((5 * fSlow282) + -3))); + double fSlow284 = ((3 * fSlow279) + -1); + double fSlow285 = ((3 * fSlow282) + -1); + double fSlow286 = (0.4264014327112203 * (fSlow30 * cos((fSlow31 + -0.7853981633974484)))); + double fSlow287 = (0.9045340337332911 * fSlow29); + double fSlow288 = (fSlow286 + fSlow287); + double fSlow289 = faustpower<2>(fSlow288); + double fSlow290 = (3.5 * (fSlow49 * ((5 * fSlow289) + -3))); + double fSlow291 = (0.4264014327112203 * (fSlow3 * cos((fSlow4 + -0.7853981633974484)))); + double fSlow292 = (0.9045340337332911 * fSlow2); + double fSlow293 = (fSlow291 + fSlow292); + double fSlow294 = faustpower<2>(fSlow293); + double fSlow295 = (3.5 * (fSlow49 * ((5 * fSlow294) + -3))); + double fSlow296 = ((3 * fSlow289) + -1); + double fSlow297 = ((3 * fSlow294) + -1); + double fSlow298 = (0.4264014327112203 * fSlow162); + double fSlow299 = (fSlow287 + fSlow298); + double fSlow300 = faustpower<2>(fSlow299); + double fSlow301 = ((3 * fSlow300) + -1); + double fSlow302 = (0.4264014327112203 * fSlow164); + double fSlow303 = (fSlow292 + fSlow302); + double fSlow304 = faustpower<2>(fSlow303); + double fSlow305 = ((3 * fSlow304) + -1); + double fSlow306 = (3.5 * (fSlow49 * ((5 * fSlow300) + -3))); + double fSlow307 = (3.5 * (fSlow49 * ((5 * fSlow304) + -3))); + double fSlow308 = (0.4264014327112203 * fSlow168); + double fSlow309 = (fSlow287 + fSlow308); + double fSlow310 = faustpower<2>(fSlow309); + double fSlow311 = (3.5 * (fSlow49 * ((5 * fSlow310) + -3))); + double fSlow312 = (0.4264014327112203 * fSlow170); + double fSlow313 = (fSlow292 + fSlow312); + double fSlow314 = faustpower<2>(fSlow313); + double fSlow315 = (3.5 * (fSlow49 * ((5 * fSlow314) + -3))); + double fSlow316 = ((3 * fSlow314) + -1); + double fSlow317 = ((3 * fSlow310) + -1); + double fSlow318 = (0.4264014327112203 * fSlow174); + double fSlow319 = (fSlow287 + fSlow318); + double fSlow320 = faustpower<2>(fSlow319); + double fSlow321 = ((3 * fSlow320) + -1); + double fSlow322 = (0.4264014327112203 * fSlow176); + double fSlow323 = (fSlow292 + fSlow322); + double fSlow324 = faustpower<2>(fSlow323); + double fSlow325 = ((3 * fSlow324) + -1); + double fSlow326 = (3.5 * (fSlow49 * ((5 * fSlow320) + -3))); + double fSlow327 = (3.5 * (fSlow49 * ((5 * fSlow324) + -3))); + double fSlow328 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -0.32175055439664263)))); + double fSlow329 = (0.3015113445777635 * fSlow2); + double fSlow330 = (fSlow328 + fSlow329); + double fSlow331 = faustpower<2>(fSlow330); + double fSlow332 = ((3 * fSlow331) + -1); + double fSlow333 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -0.32175055439664263)))); + double fSlow334 = (0.3015113445777635 * fSlow29); + double fSlow335 = (fSlow333 + fSlow334); + double fSlow336 = faustpower<2>(fSlow335); + double fSlow337 = ((3 * fSlow336) + -1); + double fSlow338 = (3.5 * (fSlow49 * ((5 * fSlow336) + -3))); + double fSlow339 = (3.5 * (fSlow49 * ((5 * fSlow331) + -3))); + double fSlow340 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -1.2490457723982544)))); + double fSlow341 = (fSlow334 + fSlow340); + double fSlow342 = faustpower<2>(fSlow341); + double fSlow343 = (3.5 * (fSlow49 * ((5 * fSlow342) + -3))); + double fSlow344 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.2490457723982544)))); + double fSlow345 = (fSlow329 + fSlow344); + double fSlow346 = faustpower<2>(fSlow345); + double fSlow347 = (3.5 * (fSlow49 * ((5 * fSlow346) + -3))); + double fSlow348 = ((3 * fSlow342) + -1); + double fSlow349 = ((3 * fSlow346) + -1); + double fSlow350 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -1.8925468811915387)))); + double fSlow351 = (fSlow334 + fSlow350); + double fSlow352 = faustpower<2>(fSlow351); + double fSlow353 = (3.5 * (fSlow49 * ((5 * fSlow352) + -3))); + double fSlow354 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.8925468811915387)))); + double fSlow355 = (fSlow329 + fSlow354); + double fSlow356 = faustpower<2>(fSlow355); + double fSlow357 = (3.5 * (fSlow49 * ((5 * fSlow356) + -3))); + double fSlow358 = ((3 * fSlow352) + -1); + double fSlow359 = ((3 * fSlow356) + -1); + double fSlow360 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -2.8198420991931505)))); + double fSlow361 = (fSlow334 + fSlow360); + double fSlow362 = faustpower<2>(fSlow361); + double fSlow363 = ((3 * fSlow362) + -1); + double fSlow364 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -2.8198420991931505)))); + double fSlow365 = (fSlow329 + fSlow364); + double fSlow366 = faustpower<2>(fSlow365); + double fSlow367 = ((3 * fSlow366) + -1); + double fSlow368 = (3.5 * (fSlow49 * ((5 * fSlow362) + -3))); + double fSlow369 = (3.5 * (fSlow49 * ((5 * fSlow366) + -3))); + double fSlow370 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -3.4633432079864357)))); + double fSlow371 = (fSlow334 + fSlow370); + double fSlow372 = faustpower<2>(fSlow371); + double fSlow373 = ((3 * fSlow372) + -1); + double fSlow374 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -3.4633432079864357)))); + double fSlow375 = (fSlow329 + fSlow374); + double fSlow376 = faustpower<2>(fSlow375); + double fSlow377 = ((3 * fSlow376) + -1); + double fSlow378 = (3.5 * (fSlow49 * ((5 * fSlow372) + -3))); + double fSlow379 = (3.5 * (fSlow49 * ((5 * fSlow376) + -3))); + double fSlow380 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -4.3906384259880475)))); + double fSlow381 = (fSlow329 + fSlow380); + double fSlow382 = faustpower<2>(fSlow381); + double fSlow383 = ((3 * fSlow382) + -1); + double fSlow384 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -4.3906384259880475)))); + double fSlow385 = (fSlow334 + fSlow384); + double fSlow386 = faustpower<2>(fSlow385); + double fSlow387 = ((3 * fSlow386) + -1); + double fSlow388 = (3.5 * (fSlow49 * ((5 * fSlow386) + -3))); + double fSlow389 = (3.5 * (fSlow49 * ((5 * fSlow382) + -3))); + double fSlow390 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -5.034139534781332)))); + double fSlow391 = (fSlow334 + fSlow390); + double fSlow392 = faustpower<2>(fSlow391); + double fSlow393 = ((3 * fSlow392) + -1); + double fSlow394 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.034139534781332)))); + double fSlow395 = (fSlow329 + fSlow394); + double fSlow396 = faustpower<2>(fSlow395); + double fSlow397 = ((3 * fSlow396) + -1); + double fSlow398 = (3.5 * (fSlow49 * ((5 * fSlow392) + -3))); + double fSlow399 = (3.5 * (fSlow49 * ((5 * fSlow396) + -3))); + double fSlow400 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -5.961434752782943)))); + double fSlow401 = (fSlow334 + fSlow400); + double fSlow402 = faustpower<2>(fSlow401); + double fSlow403 = (3.5 * (fSlow49 * ((5 * fSlow402) + -3))); + double fSlow404 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.961434752782943)))); + double fSlow405 = (fSlow329 + fSlow404); + double fSlow406 = faustpower<2>(fSlow405); + double fSlow407 = (3.5 * (fSlow49 * ((5 * fSlow406) + -3))); + double fSlow408 = ((3 * fSlow406) + -1); + double fSlow409 = ((3 * fSlow402) + -1); + double fSlow410 = (fSlow328 - fSlow329); + double fSlow411 = faustpower<2>(fSlow410); + double fSlow412 = ((3 * fSlow411) + -1); + double fSlow413 = (fSlow333 - fSlow334); + double fSlow414 = faustpower<2>(fSlow413); + double fSlow415 = ((3 * fSlow414) + -1); + double fSlow416 = (3.5 * (fSlow49 * ((5 * fSlow414) + -3))); + double fSlow417 = (3.5 * (fSlow49 * ((5 * fSlow411) + -3))); + double fSlow418 = (fSlow344 - fSlow329); + double fSlow419 = faustpower<2>(fSlow418); + double fSlow420 = ((3 * fSlow419) + -1); + double fSlow421 = (fSlow340 - fSlow334); + double fSlow422 = faustpower<2>(fSlow421); + double fSlow423 = ((3 * fSlow422) + -1); + double fSlow424 = (3.5 * (fSlow49 * ((5 * fSlow422) + -3))); + double fSlow425 = (3.5 * (fSlow49 * ((5 * fSlow419) + -3))); + double fSlow426 = (fSlow350 - fSlow334); + double fSlow427 = faustpower<2>(fSlow426); + double fSlow428 = (3.5 * (fSlow49 * ((5 * fSlow427) + -3))); + double fSlow429 = (fSlow354 - fSlow329); + double fSlow430 = faustpower<2>(fSlow429); + double fSlow431 = (3.5 * (fSlow49 * ((5 * fSlow430) + -3))); + double fSlow432 = ((3 * fSlow427) + -1); + double fSlow433 = ((3 * fSlow430) + -1); + double fSlow434 = (fSlow360 - fSlow334); + double fSlow435 = faustpower<2>(fSlow434); + double fSlow436 = (3.5 * (fSlow49 * ((5 * fSlow435) + -3))); + double fSlow437 = (fSlow364 - fSlow329); + double fSlow438 = faustpower<2>(fSlow437); + double fSlow439 = (3.5 * (fSlow49 * ((5 * fSlow438) + -3))); + double fSlow440 = ((3 * fSlow435) + -1); + double fSlow441 = ((3 * fSlow438) + -1); + double fSlow442 = (fSlow370 - fSlow334); + double fSlow443 = faustpower<2>(fSlow442); + double fSlow444 = ((3 * fSlow443) + -1); + double fSlow445 = (fSlow374 - fSlow329); + double fSlow446 = faustpower<2>(fSlow445); + double fSlow447 = ((3 * fSlow446) + -1); + double fSlow448 = (3.5 * (fSlow49 * ((5 * fSlow443) + -3))); + double fSlow449 = (3.5 * (fSlow49 * ((5 * fSlow446) + -3))); + double fSlow450 = (fSlow384 - fSlow334); + double fSlow451 = faustpower<2>(fSlow450); + double fSlow452 = (3.5 * (fSlow49 * ((5 * fSlow451) + -3))); + double fSlow453 = (fSlow380 - fSlow329); + double fSlow454 = faustpower<2>(fSlow453); + double fSlow455 = (3.5 * (fSlow49 * ((5 * fSlow454) + -3))); + double fSlow456 = ((3 * fSlow454) + -1); + double fSlow457 = ((3 * fSlow451) + -1); + double fSlow458 = (fSlow394 - fSlow329); + double fSlow459 = faustpower<2>(fSlow458); + double fSlow460 = ((3 * fSlow459) + -1); + double fSlow461 = (fSlow390 - fSlow334); + double fSlow462 = faustpower<2>(fSlow461); + double fSlow463 = ((3 * fSlow462) + -1); + double fSlow464 = (3.5 * (fSlow49 * ((5 * fSlow462) + -3))); + double fSlow465 = (3.5 * (fSlow49 * ((5 * fSlow459) + -3))); + double fSlow466 = (fSlow404 - fSlow329); + double fSlow467 = faustpower<2>(fSlow466); + double fSlow468 = ((3 * fSlow467) + -1); + double fSlow469 = (fSlow400 - fSlow334); + double fSlow470 = faustpower<2>(fSlow469); + double fSlow471 = ((3 * fSlow470) + -1); + double fSlow472 = (3.5 * (fSlow49 * ((5 * fSlow470) + -3))); + double fSlow473 = (3.5 * (fSlow49 * ((5 * fSlow467) + -3))); + double fSlow474 = (fSlow286 - fSlow287); + double fSlow475 = faustpower<2>(fSlow474); + double fSlow476 = ((3 * fSlow475) + -1); + double fSlow477 = (fSlow291 - fSlow292); + double fSlow478 = faustpower<2>(fSlow477); + double fSlow479 = ((3 * fSlow478) + -1); + double fSlow480 = (3.5 * (fSlow49 * ((5 * fSlow475) + -3))); + double fSlow481 = (3.5 * (fSlow49 * ((5 * fSlow478) + -3))); + double fSlow482 = (fSlow298 - fSlow287); + double fSlow483 = faustpower<2>(fSlow482); + double fSlow484 = ((3 * fSlow483) + -1); + double fSlow485 = (fSlow302 - fSlow292); + double fSlow486 = faustpower<2>(fSlow485); + double fSlow487 = ((3 * fSlow486) + -1); + double fSlow488 = (3.5 * (fSlow49 * ((5 * fSlow483) + -3))); + double fSlow489 = (3.5 * (fSlow49 * ((5 * fSlow486) + -3))); + double fSlow490 = (fSlow312 - fSlow292); + double fSlow491 = faustpower<2>(fSlow490); + double fSlow492 = ((3 * fSlow491) + -1); + double fSlow493 = (fSlow308 - fSlow287); + double fSlow494 = faustpower<2>(fSlow493); + double fSlow495 = ((3 * fSlow494) + -1); + double fSlow496 = (3.5 * (fSlow49 * ((5 * fSlow494) + -3))); + double fSlow497 = (3.5 * (fSlow49 * ((5 * fSlow491) + -3))); + double fSlow498 = (fSlow318 - fSlow287); + double fSlow499 = faustpower<2>(fSlow498); + double fSlow500 = (3.5 * (fSlow49 * ((5 * fSlow499) + -3))); + double fSlow501 = (fSlow322 - fSlow292); + double fSlow502 = faustpower<2>(fSlow501); + double fSlow503 = (3.5 * (fSlow49 * ((5 * fSlow502) + -3))); + double fSlow504 = ((3 * fSlow502) + -1); + double fSlow505 = ((3 * fSlow499) + -1); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev504.cpp b/source/HOAUGens/HOAPanLebedev504.cpp new file mode 100644 index 0000000000..bf9a59e2c9 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev504.cpp @@ -0,0 +1,2913 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev504" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fConst2; + FAUSTFLOAT fentry0; + double fConst3; + FAUSTFLOAT fslider2; + double fConst4; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider3; + double fRec3[2]; + double fConst5; + double fRec4[2]; + double fRec5[2]; + double fRec2[2]; + double fRec6[2]; + double fVec0[2]; + double fRec7[2]; + double fConst6; + double fRec8[2]; + double fRec9[2]; + double fRec1[2]; + double fRec10[2]; + double fVec1[2]; + double fRec11[2]; + double fRec13[2]; + double fRec14[2]; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec12[2]; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + double fRec19[2]; + double fRec20[2]; + FAUSTFLOAT fslider6; + double fRec22[2]; + double fRec23[2]; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider7; + double fRec24[2]; + double fRec21[2]; + double fRec25[2]; + double fVec2[2]; + double fRec26[2]; + double fRec18[2]; + double fRec27[2]; + double fVec3[2]; + double fRec28[2]; + double fRec30[2]; + double fRec31[2]; + double fRec33[2]; + double fRec34[2]; + double fRec32[2]; + double fRec29[2]; + FAUSTFLOAT fcheckbox3; + double fConst7; + double fConst8; + double fRec36[2]; + double fRec37[2]; + double fRec35[2]; + double fRec38[2]; + double fVec4[2]; + double fRec39[2]; + double fRec41[2]; + double fRec42[2]; + double fRec40[2]; + double fRec44[2]; + double fRec45[2]; + double fRec43[2]; + double fRec46[2]; + double fVec5[2]; + double fRec47[2]; + double fRec49[2]; + double fRec50[2]; + double fRec48[2]; + FAUSTFLOAT fcheckbox4; + FAUSTFLOAT fcheckbox5; + double fConst9; + double fRec53[2]; + double fRec52[2]; + double fRec51[2]; + double fRec55[2]; + double fRec54[2]; + FAUSTFLOAT fcheckbox6; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fRec59[2]; + double fRec60[2]; + double fRec58[2]; + double fRec61[2]; + double fVec6[2]; + double fRec62[2]; + double fRec63[2]; + double fRec57[2]; + double fRec56[2]; + double fRec66[2]; + double fRec67[2]; + double fRec65[2]; + double fRec68[2]; + double fRec64[2]; + double fRec71[2]; + double fRec70[2]; + double fRec69[2]; + double fRec73[2]; + double fRec72[2]; + double fRec77[2]; + double fRec78[2]; + double fRec76[2]; + double fRec79[2]; + double fVec7[2]; + double fRec80[2]; + double fRec81[2]; + double fRec75[2]; + double fRec74[2]; + double fRec84[2]; + double fRec85[2]; + double fRec83[2]; + double fRec86[2]; + double fRec82[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec87[2]; + FAUSTFLOAT fbargraph1; + double fRec88[2]; + FAUSTFLOAT fbargraph2; + double fRec89[2]; + FAUSTFLOAT fbargraph3; + double fRec90[2]; + FAUSTFLOAT fbargraph4; + double fRec91[2]; + FAUSTFLOAT fbargraph5; + double fRec92[2]; + FAUSTFLOAT fbargraph6; + double fRec93[2]; + FAUSTFLOAT fbargraph7; + double fRec94[2]; + FAUSTFLOAT fbargraph8; + double fRec95[2]; + FAUSTFLOAT fbargraph9; + double fRec96[2]; + FAUSTFLOAT fbargraph10; + double fRec97[2]; + FAUSTFLOAT fbargraph11; + double fRec98[2]; + FAUSTFLOAT fbargraph12; + double fRec99[2]; + FAUSTFLOAT fbargraph13; + double fRec100[2]; + FAUSTFLOAT fbargraph14; + double fRec101[2]; + FAUSTFLOAT fbargraph15; + double fRec102[2]; + FAUSTFLOAT fbargraph16; + double fRec103[2]; + FAUSTFLOAT fbargraph17; + double fRec104[2]; + FAUSTFLOAT fbargraph18; + double fRec105[2]; + FAUSTFLOAT fbargraph19; + double fRec106[2]; + FAUSTFLOAT fbargraph20; + double fRec107[2]; + FAUSTFLOAT fbargraph21; + double fRec108[2]; + FAUSTFLOAT fbargraph22; + double fRec109[2]; + FAUSTFLOAT fbargraph23; + double fRec110[2]; + FAUSTFLOAT fbargraph24; + double fRec111[2]; + FAUSTFLOAT fbargraph25; + double fRec112[2]; + FAUSTFLOAT fbargraph26; + double fRec113[2]; + FAUSTFLOAT fbargraph27; + double fRec114[2]; + FAUSTFLOAT fbargraph28; + double fRec115[2]; + FAUSTFLOAT fbargraph29; + double fRec116[2]; + FAUSTFLOAT fbargraph30; + double fRec117[2]; + FAUSTFLOAT fbargraph31; + double fRec118[2]; + FAUSTFLOAT fbargraph32; + double fRec119[2]; + FAUSTFLOAT fbargraph33; + double fRec120[2]; + FAUSTFLOAT fbargraph34; + double fRec121[2]; + FAUSTFLOAT fbargraph35; + double fRec122[2]; + FAUSTFLOAT fbargraph36; + double fRec123[2]; + FAUSTFLOAT fbargraph37; + double fRec124[2]; + FAUSTFLOAT fbargraph38; + double fRec125[2]; + FAUSTFLOAT fbargraph39; + double fRec126[2]; + FAUSTFLOAT fbargraph40; + double fRec127[2]; + FAUSTFLOAT fbargraph41; + double fRec128[2]; + FAUSTFLOAT fbargraph42; + double fRec129[2]; + FAUSTFLOAT fbargraph43; + double fRec130[2]; + FAUSTFLOAT fbargraph44; + double fRec131[2]; + FAUSTFLOAT fbargraph45; + double fRec132[2]; + FAUSTFLOAT fbargraph46; + double fRec133[2]; + FAUSTFLOAT fbargraph47; + double fRec134[2]; + FAUSTFLOAT fbargraph48; + double fRec135[2]; + FAUSTFLOAT fbargraph49; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAPanLebedev504"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (984.7116049589241 / fConst0); + fConst4 = (715.2883950410759 / fConst0); + fConst5 = (1430.5767900821518 / fConst0); + fConst6 = (1969.4232099178482 / fConst0); + fConst7 = (5.1e+02 / fConst0); + fConst8 = (1.02e+03 / fConst0); + fConst9 = (3.4e+02 / fConst0); + fConst10 = (789.5430205728705 / fConst0); + fConst11 = (394.7715102864353 / fConst0); + fConst12 = (625.2284897135664 / fConst0); + fConst13 = (1250.4569794271329 / fConst0); + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fslider0 = 0.0; + fslider1 = 0.0; + fentry0 = 1.07; + fslider2 = 2.0; + fcheckbox1 = 0.0; + fslider3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fslider6 = 2.0; + fcheckbox2 = 0.0; + fslider7 = 0.0; + fcheckbox3 = 0.0; + fcheckbox4 = 0.0; + fcheckbox5 = 0.0; + fcheckbox6 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fVec4[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fVec5[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fVec6[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fVec7[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec81[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec84[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; + for (int i=0; i<2; i++) fRec83[i] = 0; + for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec82[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec87[i] = 0; + for (int i=0; i<2; i++) fRec88[i] = 0; + for (int i=0; i<2; i++) fRec89[i] = 0; + for (int i=0; i<2; i++) fRec90[i] = 0; + for (int i=0; i<2; i++) fRec91[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec93[i] = 0; + for (int i=0; i<2; i++) fRec94[i] = 0; + for (int i=0; i<2; i++) fRec95[i] = 0; + for (int i=0; i<2; i++) fRec96[i] = 0; + for (int i=0; i<2; i++) fRec97[i] = 0; + for (int i=0; i<2; i++) fRec98[i] = 0; + for (int i=0; i<2; i++) fRec99[i] = 0; + for (int i=0; i<2; i++) fRec100[i] = 0; + for (int i=0; i<2; i++) fRec101[i] = 0; + for (int i=0; i<2; i++) fRec102[i] = 0; + for (int i=0; i<2; i++) fRec103[i] = 0; + for (int i=0; i<2; i++) fRec104[i] = 0; + for (int i=0; i<2; i++) fRec105[i] = 0; + for (int i=0; i<2; i++) fRec106[i] = 0; + for (int i=0; i<2; i++) fRec107[i] = 0; + for (int i=0; i<2; i++) fRec108[i] = 0; + for (int i=0; i<2; i++) fRec109[i] = 0; + for (int i=0; i<2; i++) fRec110[i] = 0; + for (int i=0; i<2; i++) fRec111[i] = 0; + for (int i=0; i<2; i++) fRec112[i] = 0; + for (int i=0; i<2; i++) fRec113[i] = 0; + for (int i=0; i<2; i++) fRec114[i] = 0; + for (int i=0; i<2; i++) fRec115[i] = 0; + for (int i=0; i<2; i++) fRec116[i] = 0; + for (int i=0; i<2; i++) fRec117[i] = 0; + for (int i=0; i<2; i++) fRec118[i] = 0; + for (int i=0; i<2; i++) fRec119[i] = 0; + for (int i=0; i<2; i++) fRec120[i] = 0; + for (int i=0; i<2; i++) fRec121[i] = 0; + for (int i=0; i<2; i++) fRec122[i] = 0; + for (int i=0; i<2; i++) fRec123[i] = 0; + for (int i=0; i<2; i++) fRec124[i] = 0; + for (int i=0; i<2; i++) fRec125[i] = 0; + for (int i=0; i<2; i++) fRec126[i] = 0; + for (int i=0; i<2; i++) fRec127[i] = 0; + for (int i=0; i<2; i++) fRec128[i] = 0; + for (int i=0; i<2; i++) fRec129[i] = 0; + for (int i=0; i<2; i++) fRec130[i] = 0; + for (int i=0; i<2; i++) fRec131[i] = 0; + for (int i=0; i<2; i++) fRec132[i] = 0; + for (int i=0; i<2; i++) fRec133[i] = 0; + for (int i=0; i<2; i++) fRec134[i] = 0; + for (int i=0; i<2; i++) fRec135[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider3, "0+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "0+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider1, "0+3", ""); + ui_interface->declare(&fslider1, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "0+4", ""); + ui_interface->declare(&fslider0, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(&fslider7, "1+1", ""); + ui_interface->declare(&fslider7, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider7, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider6, "1+2", ""); + ui_interface->declare(&fslider6, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider6, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "1+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "1+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox4); + ui_interface->addCheckButton("1", &fcheckbox5); + ui_interface->addCheckButton("2", &fcheckbox3); + ui_interface->addCheckButton("3", &fcheckbox6); + ui_interface->addCheckButton("4", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ab00060", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ab040b0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b009a0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b050f0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b097e0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b0d8b0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "osc", "/output7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b120f0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "osc", "/output8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b16390", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "osc", "/output9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b1a9b0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "osc", "/output10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b1eec0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "osc", "/output11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9059b23790", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "osc", "/output12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a79c5b0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "osc", "/output13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7a0dd0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "osc", "/output14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7a5820", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "osc", "/output15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7a9dc0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "osc", "/output16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7ae080", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "osc", "/output17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7b2570", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "osc", "/output18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7b6ac0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "osc", "/output19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7bb990", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "osc", "/output20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7c0250", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "osc", "/output21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7c4b50", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "osc", "/output22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7c9580", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "osc", "/output23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7cddd0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "osc", "/output24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7d26c0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "osc", "/output25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7d6fe0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "osc", "/output26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7db930", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph26, "osc", "/output27"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7e06b0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph27, "osc", "/output28"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7e47e0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph28, "osc", "/output29"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7e8c40", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph29, "osc", "/output30"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7ecf60", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph30, "osc", "/output31"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7f1de0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph31, "osc", "/output32"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7f6840", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph32, "osc", "/output33"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905a7fb2f0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph33, "osc", "/output34"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac03de0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph34, "osc", "/output35"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac08980", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph35, "osc", "/output36"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac0d5c0", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph36, "osc", "/output37"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac12070", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph37, "osc", "/output38"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac16f10", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph38, "osc", "/output39"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac1b240", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph39, "osc", "/output40"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac1f950", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph40, "osc", "/output41"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac23ef0", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph41, "osc", "/output42"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac284e0", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph42, "osc", "/output43"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac2cb60", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph43, "osc", "/output44"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac31250", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph44, "osc", "/output45"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac359b0", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph45, "osc", "/output46"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac39fc0", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph46, "osc", "/output47"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac3e9f0", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph47, "osc", "/output48"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac432a0", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph48, "osc", "/output49"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac47bc0", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph49, "osc", "/output50"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f905ac4c550", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (1.125 * (1 - double(fcheckbox0))); + double fSlow1 = double(fslider0); + double fSlow2 = sin(fSlow1); + double fSlow3 = cos(fSlow1); + double fSlow4 = double(fslider1); + double fSlow5 = (fSlow3 * cos(fSlow4)); + double fSlow6 = (6.123233995736766e-17 * fSlow5); + double fSlow7 = (fSlow2 + fSlow6); + double fSlow8 = faustpower<2>(fSlow7); + double fSlow9 = ((fSlow8 * ((35 * fSlow8) + -30)) + 3); + double fSlow10 = double(fentry0); + double fSlow11 = (fConst2 / fSlow10); + double fSlow12 = faustpower<2>(fSlow11); + double fSlow13 = (1.0 / (((9.1401308902779 * fSlow12) + (fConst3 / fSlow10)) + 1)); + double fSlow14 = double(fslider2); + double fSlow15 = (fConst2 / fSlow14); + double fSlow16 = faustpower<2>(fSlow15); + double fSlow17 = (((fConst3 / fSlow14) + (9.1401308902779 * fSlow16)) + 1); + double fSlow18 = (1.0 / (((fConst4 / fSlow10) + (11.4878004768713 * fSlow12)) + 1)); + double fSlow19 = double(fcheckbox1); + double fSlow20 = (fSlow19 * fSlow10); + double fSlow21 = (((fConst4 / fSlow14) + (11.4878004768713 * fSlow16)) + 1); + double fSlow22 = ((fSlow20 * fSlow21) / fSlow14); + double fSlow23 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow24 = (45.9512019074852 * fSlow12); + double fSlow25 = (fSlow24 + (fConst5 / fSlow10)); + double fSlow26 = (1.0 / fSlow21); + double fSlow27 = (45.9512019074852 * fSlow16); + double fSlow28 = ((fConst5 / fSlow14) + fSlow27); + double fSlow29 = (36.5605235611116 * fSlow12); + double fSlow30 = (fSlow29 + (fConst6 / fSlow10)); + double fSlow31 = (1.0 / fSlow17); + double fSlow32 = (36.5605235611116 * fSlow16); + double fSlow33 = ((fConst6 / fSlow14) + fSlow32); + double fSlow34 = ((1 - fSlow19) * fSlow10); + double fSlow35 = double(fslider4); + double fSlow36 = sin(fSlow35); + double fSlow37 = cos(fSlow35); + double fSlow38 = double(fslider5); + double fSlow39 = (fSlow37 * cos(fSlow38)); + double fSlow40 = (6.123233995736766e-17 * fSlow39); + double fSlow41 = (fSlow36 + fSlow40); + double fSlow42 = faustpower<2>(fSlow41); + double fSlow43 = ((fSlow42 * ((35 * fSlow42) + -30)) + 3); + double fSlow44 = double(fslider6); + double fSlow45 = (fConst2 / fSlow44); + double fSlow46 = faustpower<2>(fSlow45); + double fSlow47 = (((fConst3 / fSlow44) + (9.1401308902779 * fSlow46)) + 1); + double fSlow48 = double(fcheckbox2); + double fSlow49 = (fSlow10 * fSlow48); + double fSlow50 = (((fConst4 / fSlow44) + (11.4878004768713 * fSlow46)) + 1); + double fSlow51 = ((fSlow49 * fSlow50) / fSlow44); + double fSlow52 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider7)))); + double fSlow53 = (1.0 / fSlow50); + double fSlow54 = (45.9512019074852 * fSlow46); + double fSlow55 = ((fConst5 / fSlow44) + fSlow54); + double fSlow56 = (1.0 / fSlow47); + double fSlow57 = (36.5605235611116 * fSlow46); + double fSlow58 = ((fConst6 / fSlow44) + fSlow57); + double fSlow59 = (fSlow10 * (1 - fSlow48)); + double fSlow60 = (2.5 * (1 - double(fcheckbox3))); + double fSlow61 = ((3 * fSlow8) + -1); + double fSlow62 = (1.0 / (((fConst7 / fSlow10) + (3 * fSlow12)) + 1)); + double fSlow63 = (((fConst7 / fSlow14) + (3 * fSlow16)) + 1); + double fSlow64 = ((fSlow20 * fSlow63) / fSlow14); + double fSlow65 = (12 * fSlow12); + double fSlow66 = (fSlow65 + (fConst8 / fSlow10)); + double fSlow67 = (1.0 / fSlow63); + double fSlow68 = (12 * fSlow16); + double fSlow69 = ((fConst8 / fSlow14) + fSlow68); + double fSlow70 = ((3 * fSlow42) + -1); + double fSlow71 = (((fConst7 / fSlow44) + (3 * fSlow46)) + 1); + double fSlow72 = ((fSlow49 * fSlow71) / fSlow44); + double fSlow73 = (1.0 / fSlow71); + double fSlow74 = (12 * fSlow46); + double fSlow75 = ((fConst8 / fSlow44) + fSlow74); + double fSlow76 = (fSlow10 * (1 - double(fcheckbox4))); + double fSlow77 = (1 - (fSlow19 * (1 - (1.0 / fSlow14)))); + double fSlow78 = (1 - (fSlow48 * (1 - (1.0 / fSlow44)))); + double fSlow79 = (3 * (1 - double(fcheckbox5))); + double fSlow80 = (fSlow15 + 1); + double fSlow81 = (fConst9 / (fSlow14 * fSlow80)); + double fSlow82 = (1.0 / (fSlow11 + 1)); + double fSlow83 = ((fSlow20 * fSlow80) / fSlow14); + double fSlow84 = (fConst9 / fSlow10); + double fSlow85 = (1 - double(fcheckbox6)); + double fSlow86 = (3.5 * (fSlow85 * ((5 * fSlow8) + -3))); + double fSlow87 = ((fConst11 / fSlow14) + 1); + double fSlow88 = (fConst10 / (fSlow14 * fSlow87)); + double fSlow89 = (1.0 / ((fConst11 / fSlow10) + 1)); + double fSlow90 = (1.0 / (((fConst12 / fSlow10) + (6.45943269348338 * fSlow12)) + 1)); + double fSlow91 = (((fConst12 / fSlow14) + (6.45943269348338 * fSlow16)) + 1); + double fSlow92 = ((fSlow20 * fSlow91) / fSlow14); + double fSlow93 = (25.83773077393352 * fSlow12); + double fSlow94 = (fSlow93 + (fConst13 / fSlow10)); + double fSlow95 = (1.0 / fSlow91); + double fSlow96 = (25.83773077393352 * fSlow16); + double fSlow97 = ((fConst13 / fSlow14) + fSlow96); + double fSlow98 = (fConst10 / fSlow10); + double fSlow99 = (fSlow45 + 1); + double fSlow100 = (fConst9 / (fSlow44 * fSlow99)); + double fSlow101 = ((fSlow49 * fSlow99) / fSlow44); + double fSlow102 = (3.5 * (fSlow85 * ((5 * fSlow42) + -3))); + double fSlow103 = ((fConst11 / fSlow44) + 1); + double fSlow104 = (fConst10 / (fSlow44 * fSlow103)); + double fSlow105 = (((fConst12 / fSlow44) + (6.45943269348338 * fSlow46)) + 1); + double fSlow106 = ((fSlow49 * fSlow105) / fSlow44); + double fSlow107 = (1.0 / fSlow105); + double fSlow108 = (25.83773077393352 * fSlow46); + double fSlow109 = ((fConst13 / fSlow44) + fSlow108); + double fSlow110 = faustpower<2>(fSlow39); + double fSlow111 = ((3 * fSlow110) + -1); + double fSlow112 = faustpower<2>(fSlow5); + double fSlow113 = ((3 * fSlow112) + -1); + double fSlow114 = ((fSlow112 * ((35 * fSlow112) + -30)) + 3); + double fSlow115 = ((fSlow110 * ((35 * fSlow110) + -30)) + 3); + double fSlow116 = (3.5 * fSlow85); + double fSlow117 = ((5 * faustpower<3>(fSlow5)) - (3 * fSlow5)); + double fSlow118 = ((5 * faustpower<3>(fSlow39)) - (3 * fSlow39)); + double fSlow119 = (fSlow37 * cos((fSlow38 + -1.5707963267948966))); + double fSlow120 = faustpower<2>(fSlow119); + double fSlow121 = ((3 * fSlow120) + -1); + double fSlow122 = (fSlow3 * cos((fSlow4 + -1.5707963267948966))); + double fSlow123 = faustpower<2>(fSlow122); + double fSlow124 = ((3 * fSlow123) + -1); + double fSlow125 = ((5 * faustpower<3>(fSlow119)) - (3 * fSlow119)); + double fSlow126 = ((5 * faustpower<3>(fSlow122)) - (3 * fSlow122)); + double fSlow127 = ((fSlow123 * ((35 * fSlow123) + -30)) + 3); + double fSlow128 = ((fSlow120 * ((35 * fSlow120) + -30)) + 3); + double fSlow129 = (fSlow37 * cos((fSlow38 + -3.141592653589793))); + double fSlow130 = ((5 * faustpower<3>(fSlow129)) - (3 * fSlow129)); + double fSlow131 = (fSlow3 * cos((fSlow4 + -3.141592653589793))); + double fSlow132 = ((5 * faustpower<3>(fSlow131)) - (3 * fSlow131)); + double fSlow133 = faustpower<2>(fSlow131); + double fSlow134 = ((fSlow133 * ((35 * fSlow133) + -30)) + 3); + double fSlow135 = faustpower<2>(fSlow129); + double fSlow136 = ((fSlow135 * ((35 * fSlow135) + -30)) + 3); + double fSlow137 = ((3 * fSlow133) + -1); + double fSlow138 = ((3 * fSlow135) + -1); + double fSlow139 = (fSlow3 * cos((fSlow4 + -4.71238898038469))); + double fSlow140 = ((5 * faustpower<3>(fSlow139)) - (3 * fSlow139)); + double fSlow141 = (fSlow37 * cos((fSlow38 + -4.71238898038469))); + double fSlow142 = ((5 * faustpower<3>(fSlow141)) - (3 * fSlow141)); + double fSlow143 = faustpower<2>(fSlow141); + double fSlow144 = ((3 * fSlow143) + -1); + double fSlow145 = faustpower<2>(fSlow139); + double fSlow146 = ((3 * fSlow145) + -1); + double fSlow147 = ((fSlow143 * ((35 * fSlow143) + -30)) + 3); + double fSlow148 = ((fSlow145 * ((35 * fSlow145) + -30)) + 3); + double fSlow149 = (fSlow40 - fSlow36); + double fSlow150 = faustpower<2>(fSlow149); + double fSlow151 = (3.5 * (fSlow85 * ((5 * fSlow150) + -3))); + double fSlow152 = (fSlow6 - fSlow2); + double fSlow153 = faustpower<2>(fSlow152); + double fSlow154 = (3.5 * (fSlow85 * ((5 * fSlow153) + -3))); + double fSlow155 = ((fSlow153 * ((35 * fSlow153) + -30)) + 3); + double fSlow156 = ((fSlow150 * ((35 * fSlow150) + -30)) + 3); + double fSlow157 = ((3 * fSlow153) + -1); + double fSlow158 = ((3 * fSlow150) + -1); + double fSlow159 = (0.7071067811865476 * fSlow39); + double fSlow160 = (0.7071067811865475 * fSlow36); + double fSlow161 = (fSlow159 + fSlow160); + double fSlow162 = faustpower<2>(fSlow161); + double fSlow163 = (3.5 * (fSlow85 * ((5 * fSlow162) + -3))); + double fSlow164 = (0.7071067811865476 * fSlow5); + double fSlow165 = (0.7071067811865475 * fSlow2); + double fSlow166 = (fSlow164 + fSlow165); + double fSlow167 = faustpower<2>(fSlow166); + double fSlow168 = (3.5 * (fSlow85 * ((5 * fSlow167) + -3))); + double fSlow169 = ((fSlow167 * ((35 * fSlow167) + -30)) + 3); + double fSlow170 = ((fSlow162 * ((35 * fSlow162) + -30)) + 3); + double fSlow171 = ((3 * fSlow167) + -1); + double fSlow172 = ((3 * fSlow162) + -1); + double fSlow173 = (0.7071067811865476 * fSlow122); + double fSlow174 = (fSlow165 + fSlow173); + double fSlow175 = faustpower<2>(fSlow174); + double fSlow176 = ((3 * fSlow175) + -1); + double fSlow177 = (0.7071067811865476 * fSlow119); + double fSlow178 = (fSlow160 + fSlow177); + double fSlow179 = faustpower<2>(fSlow178); + double fSlow180 = ((3 * fSlow179) + -1); + double fSlow181 = ((fSlow175 * ((35 * fSlow175) + -30)) + 3); + double fSlow182 = ((fSlow179 * ((35 * fSlow179) + -30)) + 3); + double fSlow183 = (3.5 * (fSlow85 * ((5 * fSlow179) + -3))); + double fSlow184 = (3.5 * (fSlow85 * ((5 * fSlow175) + -3))); + double fSlow185 = (0.7071067811865476 * fSlow131); + double fSlow186 = (fSlow165 + fSlow185); + double fSlow187 = faustpower<2>(fSlow186); + double fSlow188 = ((3 * fSlow187) + -1); + double fSlow189 = (0.7071067811865476 * fSlow129); + double fSlow190 = (fSlow160 + fSlow189); + double fSlow191 = faustpower<2>(fSlow190); + double fSlow192 = ((3 * fSlow191) + -1); + double fSlow193 = (3.5 * (fSlow85 * ((5 * fSlow187) + -3))); + double fSlow194 = (3.5 * (((5 * fSlow191) + -3) * fSlow85)); + double fSlow195 = ((fSlow187 * ((35 * fSlow187) + -30)) + 3); + double fSlow196 = ((fSlow191 * ((35 * fSlow191) + -30)) + 3); + double fSlow197 = (0.7071067811865476 * fSlow139); + double fSlow198 = (fSlow197 + fSlow165); + double fSlow199 = faustpower<2>(fSlow198); + double fSlow200 = ((3 * fSlow199) + -1); + double fSlow201 = (0.7071067811865476 * fSlow141); + double fSlow202 = (fSlow160 + fSlow201); + double fSlow203 = faustpower<2>(fSlow202); + double fSlow204 = ((3 * fSlow203) + -1); + double fSlow205 = (3.5 * (fSlow85 * ((5 * fSlow203) + -3))); + double fSlow206 = (3.5 * (fSlow85 * ((5 * fSlow199) + -3))); + double fSlow207 = ((fSlow203 * ((35 * fSlow203) + -30)) + 3); + double fSlow208 = ((fSlow199 * ((35 * fSlow199) + -30)) + 3); + double fSlow209 = (fSlow3 * cos((fSlow4 + -0.7853981633974483))); + double fSlow210 = (fSlow37 * cos((fSlow38 + -0.7853981633974483))); + double fSlow211 = faustpower<2>(fSlow209); + double fSlow212 = ((fSlow211 * ((35 * fSlow211) + -30)) + 3); + double fSlow213 = faustpower<2>(fSlow210); + double fSlow214 = ((fSlow213 * ((35 * fSlow213) + -30)) + 3); + double fSlow215 = ((5 * faustpower<3>(fSlow210)) - (3 * fSlow210)); + double fSlow216 = ((5 * faustpower<3>(fSlow209)) - (3 * fSlow209)); + double fSlow217 = ((3 * fSlow211) + -1); + double fSlow218 = ((3 * fSlow213) + -1); + double fSlow219 = (fSlow3 * cos((fSlow4 + -2.356194490192345))); + double fSlow220 = (fSlow37 * cos((fSlow38 + -2.356194490192345))); + double fSlow221 = faustpower<2>(fSlow219); + double fSlow222 = ((fSlow221 * ((35 * fSlow221) + -30)) + 3); + double fSlow223 = faustpower<2>(fSlow220); + double fSlow224 = ((fSlow223 * ((35 * fSlow223) + -30)) + 3); + double fSlow225 = ((5 * faustpower<3>(fSlow220)) - (3 * fSlow220)); + double fSlow226 = ((5 * faustpower<3>(fSlow219)) - (3 * fSlow219)); + double fSlow227 = ((3 * fSlow221) + -1); + double fSlow228 = ((3 * fSlow223) + -1); + double fSlow229 = (fSlow37 * cos((fSlow38 + -3.9269908169872414))); + double fSlow230 = faustpower<2>(fSlow229); + double fSlow231 = ((3 * fSlow230) + -1); + double fSlow232 = (fSlow3 * cos((fSlow4 + -3.9269908169872414))); + double fSlow233 = faustpower<2>(fSlow232); + double fSlow234 = ((3 * fSlow233) + -1); + double fSlow235 = ((5 * faustpower<3>(fSlow229)) - (3 * fSlow229)); + double fSlow236 = ((5 * faustpower<3>(fSlow232)) - (3 * fSlow232)); + double fSlow237 = ((fSlow233 * ((35 * fSlow233) + -30)) + 3); + double fSlow238 = ((fSlow230 * ((35 * fSlow230) + -30)) + 3); + double fSlow239 = (fSlow3 * cos((fSlow4 + -5.497787143782138))); + double fSlow240 = faustpower<2>(fSlow239); + double fSlow241 = ((fSlow240 * ((35 * fSlow240) + -30)) + 3); + double fSlow242 = (fSlow37 * cos((fSlow38 + -5.497787143782138))); + double fSlow243 = faustpower<2>(fSlow242); + double fSlow244 = ((fSlow243 * ((35 * fSlow243) + -30)) + 3); + double fSlow245 = ((5 * faustpower<3>(fSlow239)) - (3 * fSlow239)); + double fSlow246 = ((5 * faustpower<3>(fSlow242)) - (3 * fSlow242)); + double fSlow247 = ((3 * fSlow240) + -1); + double fSlow248 = ((3 * fSlow243) + -1); + double fSlow249 = (fSlow164 - fSlow165); + double fSlow250 = faustpower<2>(fSlow249); + double fSlow251 = ((3 * fSlow250) + -1); + double fSlow252 = (fSlow159 - fSlow160); + double fSlow253 = faustpower<2>(fSlow252); + double fSlow254 = ((3 * fSlow253) + -1); + double fSlow255 = ((fSlow250 * ((35 * fSlow250) + -30)) + 3); + double fSlow256 = ((fSlow253 * ((35 * fSlow253) + -30)) + 3); + double fSlow257 = (3.5 * (fSlow85 * ((5 * fSlow253) + -3))); + double fSlow258 = (3.5 * (fSlow85 * ((5 * fSlow250) + -3))); + double fSlow259 = (fSlow177 - fSlow160); + double fSlow260 = faustpower<2>(fSlow259); + double fSlow261 = ((fSlow260 * ((35 * fSlow260) + -30)) + 3); + double fSlow262 = (fSlow173 - fSlow165); + double fSlow263 = faustpower<2>(fSlow262); + double fSlow264 = ((fSlow263 * ((35 * fSlow263) + -30)) + 3); + double fSlow265 = (3.5 * (fSlow85 * ((5 * fSlow260) + -3))); + double fSlow266 = (3.5 * (fSlow85 * ((5 * fSlow263) + -3))); + double fSlow267 = ((3 * fSlow260) + -1); + double fSlow268 = ((3 * fSlow263) + -1); + double fSlow269 = (fSlow189 - fSlow160); + double fSlow270 = faustpower<2>(fSlow269); + double fSlow271 = ((fSlow270 * ((35 * fSlow270) + -30)) + 3); + double fSlow272 = (fSlow185 - fSlow165); + double fSlow273 = faustpower<2>(fSlow272); + double fSlow274 = ((fSlow273 * ((35 * fSlow273) + -30)) + 3); + double fSlow275 = (3.5 * (fSlow85 * ((5 * fSlow270) + -3))); + double fSlow276 = (3.5 * (fSlow85 * ((5 * fSlow273) + -3))); + double fSlow277 = ((3 * fSlow270) + -1); + double fSlow278 = ((3 * fSlow273) + -1); + double fSlow279 = (fSlow197 - fSlow165); + double fSlow280 = faustpower<2>(fSlow279); + double fSlow281 = ((fSlow280 * ((35 * fSlow280) + -30)) + 3); + double fSlow282 = (fSlow201 - fSlow160); + double fSlow283 = faustpower<2>(fSlow282); + double fSlow284 = ((fSlow283 * ((35 * fSlow283) + -30)) + 3); + double fSlow285 = (3.5 * (fSlow85 * ((5 * fSlow283) + -3))); + double fSlow286 = (3.5 * (fSlow85 * ((5 * fSlow280) + -3))); + double fSlow287 = ((3 * fSlow283) + -1); + double fSlow288 = ((3 * fSlow280) + -1); + double fSlow289 = (0.8164965809277259 * fSlow209); + double fSlow290 = (0.5773502691896258 * fSlow2); + double fSlow291 = (fSlow289 + fSlow290); + double fSlow292 = faustpower<2>(fSlow291); + double fSlow293 = ((fSlow292 * ((35 * fSlow292) + -30)) + 3); + double fSlow294 = (0.8164965809277259 * fSlow210); + double fSlow295 = (0.5773502691896258 * fSlow36); + double fSlow296 = (fSlow294 + fSlow295); + double fSlow297 = faustpower<2>(fSlow296); + double fSlow298 = ((fSlow297 * ((35 * fSlow297) + -30)) + 3); + double fSlow299 = ((3 * fSlow297) + -1); + double fSlow300 = ((3 * fSlow292) + -1); + double fSlow301 = (3.5 * (fSlow85 * ((5 * fSlow297) + -3))); + double fSlow302 = (3.5 * (fSlow85 * ((5 * fSlow292) + -3))); + double fSlow303 = (0.8164965809277259 * fSlow220); + double fSlow304 = (fSlow295 + fSlow303); + double fSlow305 = faustpower<2>(fSlow304); + double fSlow306 = ((3 * fSlow305) + -1); + double fSlow307 = (0.8164965809277259 * fSlow219); + double fSlow308 = (fSlow290 + fSlow307); + double fSlow309 = faustpower<2>(fSlow308); + double fSlow310 = ((3 * fSlow309) + -1); + double fSlow311 = ((fSlow305 * ((35 * fSlow305) + -30)) + 3); + double fSlow312 = ((fSlow309 * ((35 * fSlow309) + -30)) + 3); + double fSlow313 = (3.5 * (fSlow85 * ((5 * fSlow305) + -3))); + double fSlow314 = (3.5 * (fSlow85 * ((5 * fSlow309) + -3))); + double fSlow315 = (0.8164965809277259 * fSlow229); + double fSlow316 = (fSlow295 + fSlow315); + double fSlow317 = faustpower<2>(fSlow316); + double fSlow318 = ((3 * fSlow317) + -1); + double fSlow319 = (0.8164965809277259 * fSlow232); + double fSlow320 = (fSlow290 + fSlow319); + double fSlow321 = faustpower<2>(fSlow320); + double fSlow322 = ((3 * fSlow321) + -1); + double fSlow323 = (3.5 * (fSlow85 * ((5 * fSlow317) + -3))); + double fSlow324 = (3.5 * (fSlow85 * ((5 * fSlow321) + -3))); + double fSlow325 = ((fSlow317 * ((35 * fSlow317) + -30)) + 3); + double fSlow326 = ((fSlow321 * ((35 * fSlow321) + -30)) + 3); + double fSlow327 = (0.8164965809277259 * fSlow242); + double fSlow328 = (fSlow295 + fSlow327); + double fSlow329 = faustpower<2>(fSlow328); + double fSlow330 = (3.5 * (fSlow85 * ((5 * fSlow329) + -3))); + double fSlow331 = (0.8164965809277259 * fSlow239); + double fSlow332 = (fSlow290 + fSlow331); + double fSlow333 = faustpower<2>(fSlow332); + double fSlow334 = (3.5 * (fSlow85 * ((5 * fSlow333) + -3))); + double fSlow335 = ((3 * fSlow333) + -1); + double fSlow336 = ((3 * fSlow329) + -1); + double fSlow337 = ((fSlow329 * ((35 * fSlow329) + -30)) + 3); + double fSlow338 = ((fSlow333 * ((35 * fSlow333) + -30)) + 3); + double fSlow339 = (fSlow294 - fSlow295); + double fSlow340 = faustpower<2>(fSlow339); + double fSlow341 = (3.5 * (fSlow85 * ((5 * fSlow340) + -3))); + double fSlow342 = (fSlow289 - fSlow290); + double fSlow343 = faustpower<2>(fSlow342); + double fSlow344 = (3.5 * (fSlow85 * ((5 * fSlow343) + -3))); + double fSlow345 = ((3 * fSlow343) + -1); + double fSlow346 = ((3 * fSlow340) + -1); + double fSlow347 = ((fSlow343 * ((35 * fSlow343) + -30)) + 3); + double fSlow348 = ((fSlow340 * ((35 * fSlow340) + -30)) + 3); + double fSlow349 = (fSlow307 - fSlow290); + double fSlow350 = faustpower<2>(fSlow349); + double fSlow351 = ((3 * fSlow350) + -1); + double fSlow352 = (fSlow303 - fSlow295); + double fSlow353 = faustpower<2>(fSlow352); + double fSlow354 = ((3 * fSlow353) + -1); + double fSlow355 = ((fSlow350 * ((35 * fSlow350) + -30)) + 3); + double fSlow356 = ((fSlow353 * ((35 * fSlow353) + -30)) + 3); + double fSlow357 = (3.5 * (fSlow85 * ((5 * fSlow353) + -3))); + double fSlow358 = (3.5 * (fSlow85 * ((5 * fSlow350) + -3))); + double fSlow359 = (fSlow315 - fSlow295); + double fSlow360 = faustpower<2>(fSlow359); + double fSlow361 = ((fSlow360 * ((35 * fSlow360) + -30)) + 3); + double fSlow362 = (fSlow319 - fSlow290); + double fSlow363 = faustpower<2>(fSlow362); + double fSlow364 = ((fSlow363 * ((35 * fSlow363) + -30)) + 3); + double fSlow365 = ((3 * fSlow360) + -1); + double fSlow366 = ((3 * fSlow363) + -1); + double fSlow367 = (3.5 * (fSlow85 * ((5 * fSlow360) + -3))); + double fSlow368 = (3.5 * (fSlow85 * ((5 * fSlow363) + -3))); + double fSlow369 = (fSlow327 - fSlow295); + double fSlow370 = faustpower<2>(fSlow369); + double fSlow371 = (3.5 * (fSlow85 * ((5 * fSlow370) + -3))); + double fSlow372 = (fSlow331 - fSlow290); + double fSlow373 = faustpower<2>(fSlow372); + double fSlow374 = (3.5 * (fSlow85 * ((5 * fSlow373) + -3))); + double fSlow375 = ((3 * fSlow373) + -1); + double fSlow376 = ((3 * fSlow370) + -1); + double fSlow377 = ((fSlow373 * ((35 * fSlow373) + -30)) + 3); + double fSlow378 = ((fSlow370 * ((35 * fSlow370) + -30)) + 3); + double fSlow379 = (0.4264014327112203 * (fSlow37 * cos((fSlow38 + -0.7853981633974484)))); + double fSlow380 = (0.9045340337332911 * fSlow36); + double fSlow381 = (fSlow379 + fSlow380); + double fSlow382 = faustpower<2>(fSlow381); + double fSlow383 = (3.5 * (fSlow85 * ((5 * fSlow382) + -3))); + double fSlow384 = (0.4264014327112203 * (fSlow3 * cos((fSlow4 + -0.7853981633974484)))); + double fSlow385 = (0.9045340337332911 * fSlow2); + double fSlow386 = (fSlow384 + fSlow385); + double fSlow387 = faustpower<2>(fSlow386); + double fSlow388 = (3.5 * (fSlow85 * ((5 * fSlow387) + -3))); + double fSlow389 = ((fSlow387 * ((35 * fSlow387) + -30)) + 3); + double fSlow390 = ((fSlow382 * ((35 * fSlow382) + -30)) + 3); + double fSlow391 = ((3 * fSlow382) + -1); + double fSlow392 = ((3 * fSlow387) + -1); + double fSlow393 = (0.4264014327112203 * fSlow219); + double fSlow394 = (fSlow385 + fSlow393); + double fSlow395 = faustpower<2>(fSlow394); + double fSlow396 = ((fSlow395 * ((35 * fSlow395) + -30)) + 3); + double fSlow397 = (0.4264014327112203 * fSlow220); + double fSlow398 = (fSlow380 + fSlow397); + double fSlow399 = faustpower<2>(fSlow398); + double fSlow400 = ((fSlow399 * ((35 * fSlow399) + -30)) + 3); + double fSlow401 = (3.5 * (fSlow85 * ((5 * fSlow399) + -3))); + double fSlow402 = (3.5 * (fSlow85 * ((5 * fSlow395) + -3))); + double fSlow403 = ((3 * fSlow399) + -1); + double fSlow404 = ((3 * fSlow395) + -1); + double fSlow405 = (0.4264014327112203 * fSlow229); + double fSlow406 = (fSlow380 + fSlow405); + double fSlow407 = faustpower<2>(fSlow406); + double fSlow408 = (3.5 * (fSlow85 * ((5 * fSlow407) + -3))); + double fSlow409 = (0.4264014327112203 * fSlow232); + double fSlow410 = (fSlow385 + fSlow409); + double fSlow411 = faustpower<2>(fSlow410); + double fSlow412 = (3.5 * (fSlow85 * ((5 * fSlow411) + -3))); + double fSlow413 = ((3 * fSlow411) + -1); + double fSlow414 = ((3 * fSlow407) + -1); + double fSlow415 = ((fSlow411 * ((35 * fSlow411) + -30)) + 3); + double fSlow416 = ((fSlow407 * ((35 * fSlow407) + -30)) + 3); + double fSlow417 = (0.4264014327112203 * fSlow242); + double fSlow418 = (fSlow380 + fSlow417); + double fSlow419 = faustpower<2>(fSlow418); + double fSlow420 = (3.5 * (fSlow85 * ((5 * fSlow419) + -3))); + double fSlow421 = (0.4264014327112203 * fSlow239); + double fSlow422 = (fSlow385 + fSlow421); + double fSlow423 = faustpower<2>(fSlow422); + double fSlow424 = (3.5 * (fSlow85 * ((5 * fSlow423) + -3))); + double fSlow425 = ((3 * fSlow423) + -1); + double fSlow426 = ((3 * fSlow419) + -1); + double fSlow427 = ((fSlow419 * ((35 * fSlow419) + -30)) + 3); + double fSlow428 = ((fSlow423 * ((35 * fSlow423) + -30)) + 3); + double fSlow429 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -0.32175055439664263)))); + double fSlow430 = (0.3015113445777635 * fSlow36); + double fSlow431 = (fSlow429 + fSlow430); + double fSlow432 = faustpower<2>(fSlow431); + double fSlow433 = ((fSlow432 * ((35 * fSlow432) + -30)) + 3); + double fSlow434 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -0.32175055439664263)))); + double fSlow435 = (0.3015113445777635 * fSlow2); + double fSlow436 = (fSlow434 + fSlow435); + double fSlow437 = faustpower<2>(fSlow436); + double fSlow438 = ((fSlow437 * ((35 * fSlow437) + -30)) + 3); + double fSlow439 = ((3 * fSlow432) + -1); + double fSlow440 = ((3 * fSlow437) + -1); + double fSlow441 = (3.5 * (fSlow85 * ((5 * fSlow432) + -3))); + double fSlow442 = (3.5 * (fSlow85 * ((5 * fSlow437) + -3))); + double fSlow443 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -1.2490457723982544)))); + double fSlow444 = (fSlow430 + fSlow443); + double fSlow445 = faustpower<2>(fSlow444); + double fSlow446 = (3.5 * (fSlow85 * ((5 * fSlow445) + -3))); + double fSlow447 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.2490457723982544)))); + double fSlow448 = (fSlow435 + fSlow447); + double fSlow449 = faustpower<2>(fSlow448); + double fSlow450 = (3.5 * (fSlow85 * ((5 * fSlow449) + -3))); + double fSlow451 = ((fSlow449 * ((35 * fSlow449) + -30)) + 3); + double fSlow452 = ((fSlow445 * ((35 * fSlow445) + -30)) + 3); + double fSlow453 = ((3 * fSlow445) + -1); + double fSlow454 = ((3 * fSlow449) + -1); + double fSlow455 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -1.8925468811915387)))); + double fSlow456 = (fSlow430 + fSlow455); + double fSlow457 = faustpower<2>(fSlow456); + double fSlow458 = (3.5 * (fSlow85 * ((5 * fSlow457) + -3))); + double fSlow459 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.8925468811915387)))); + double fSlow460 = (fSlow435 + fSlow459); + double fSlow461 = faustpower<2>(fSlow460); + double fSlow462 = (3.5 * (fSlow85 * ((5 * fSlow461) + -3))); + double fSlow463 = ((3 * fSlow461) + -1); + double fSlow464 = ((3 * fSlow457) + -1); + double fSlow465 = ((fSlow457 * ((35 * fSlow457) + -30)) + 3); + double fSlow466 = ((fSlow461 * ((35 * fSlow461) + -30)) + 3); + double fSlow467 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -2.8198420991931505)))); + double fSlow468 = (fSlow435 + fSlow467); + double fSlow469 = faustpower<2>(fSlow468); + double fSlow470 = ((3 * fSlow469) + -1); + double fSlow471 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -2.8198420991931505)))); + double fSlow472 = (fSlow430 + fSlow471); + double fSlow473 = faustpower<2>(fSlow472); + double fSlow474 = ((3 * fSlow473) + -1); + double fSlow475 = ((fSlow469 * ((35 * fSlow469) + -30)) + 3); + double fSlow476 = ((fSlow473 * ((35 * fSlow473) + -30)) + 3); + double fSlow477 = (3.5 * (fSlow85 * ((5 * fSlow473) + -3))); + double fSlow478 = (3.5 * (fSlow85 * ((5 * fSlow469) + -3))); + double fSlow479 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -3.4633432079864357)))); + double fSlow480 = (fSlow479 + fSlow430); + double fSlow481 = faustpower<2>(fSlow480); + double fSlow482 = (3.5 * (fSlow85 * ((5 * fSlow481) + -3))); + double fSlow483 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -3.4633432079864357)))); + double fSlow484 = (fSlow435 + fSlow483); + double fSlow485 = faustpower<2>(fSlow484); + double fSlow486 = (3.5 * (fSlow85 * ((5 * fSlow485) + -3))); + double fSlow487 = ((3 * fSlow481) + -1); + double fSlow488 = ((3 * fSlow485) + -1); + double fSlow489 = ((((35 * fSlow485) + -30) * fSlow485) + 3); + double fSlow490 = ((fSlow481 * ((35 * fSlow481) + -30)) + 3); + double fSlow491 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -4.3906384259880475)))); + double fSlow492 = (fSlow491 + fSlow430); + double fSlow493 = faustpower<2>(fSlow492); + double fSlow494 = ((3 * fSlow493) + -1); + double fSlow495 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -4.3906384259880475)))); + double fSlow496 = (fSlow495 + fSlow435); + double fSlow497 = faustpower<2>(fSlow496); + double fSlow498 = ((3 * fSlow497) + -1); + double fSlow499 = (3.5 * (fSlow85 * ((5 * fSlow493) + -3))); + double fSlow500 = (3.5 * (fSlow85 * ((5 * fSlow497) + -3))); + double fSlow501 = ((fSlow493 * ((35 * fSlow493) + -30)) + 3); + double fSlow502 = ((fSlow497 * ((35 * fSlow497) + -30)) + 3); + double fSlow503 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.034139534781332)))); + double fSlow504 = (fSlow503 + fSlow435); + double fSlow505 = faustpower<2>(fSlow504); + double fSlow506 = ((fSlow505 * ((35 * fSlow505) + -30)) + 3); + double fSlow507 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -5.034139534781332)))); + double fSlow508 = (fSlow507 + fSlow430); + double fSlow509 = faustpower<2>(fSlow508); + double fSlow510 = ((fSlow509 * ((35 * fSlow509) + -30)) + 3); + double fSlow511 = (3.5 * (fSlow85 * ((5 * fSlow509) + -3))); + double fSlow512 = (3.5 * (fSlow85 * ((5 * fSlow505) + -3))); + double fSlow513 = ((3 * fSlow509) + -1); + double fSlow514 = ((3 * fSlow505) + -1); + double fSlow515 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -5.961434752782943)))); + double fSlow516 = (fSlow515 + fSlow430); + double fSlow517 = faustpower<2>(fSlow516); + double fSlow518 = (3.5 * (fSlow85 * ((5 * fSlow517) + -3))); + double fSlow519 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.961434752782943)))); + double fSlow520 = (fSlow519 + fSlow435); + double fSlow521 = faustpower<2>(fSlow520); + double fSlow522 = (3.5 * (fSlow85 * ((5 * fSlow521) + -3))); + double fSlow523 = ((3 * fSlow521) + -1); + double fSlow524 = ((3 * fSlow517) + -1); + double fSlow525 = ((fSlow517 * ((35 * fSlow517) + -30)) + 3); + double fSlow526 = ((fSlow521 * ((35 * fSlow521) + -30)) + 3); + double fSlow527 = (fSlow429 - fSlow430); + double fSlow528 = faustpower<2>(fSlow527); + double fSlow529 = ((fSlow528 * ((35 * fSlow528) + -30)) + 3); + double fSlow530 = (fSlow434 - fSlow435); + double fSlow531 = faustpower<2>(fSlow530); + double fSlow532 = ((fSlow531 * ((35 * fSlow531) + -30)) + 3); + double fSlow533 = (3.5 * (((5 * fSlow528) + -3) * fSlow85)); + double fSlow534 = (3.5 * (fSlow85 * ((5 * fSlow531) + -3))); + double fSlow535 = ((3 * fSlow528) + -1); + double fSlow536 = ((3 * fSlow531) + -1); + double fSlow537 = (fSlow447 - fSlow435); + double fSlow538 = faustpower<2>(fSlow537); + double fSlow539 = ((3 * fSlow538) + -1); + double fSlow540 = (fSlow443 - fSlow430); + double fSlow541 = faustpower<2>(fSlow540); + double fSlow542 = ((3 * fSlow541) + -1); + double fSlow543 = (3.5 * (fSlow85 * ((5 * fSlow541) + -3))); + double fSlow544 = (3.5 * (fSlow85 * ((5 * fSlow538) + -3))); + double fSlow545 = ((fSlow538 * ((35 * fSlow538) + -30)) + 3); + double fSlow546 = ((fSlow541 * ((35 * fSlow541) + -30)) + 3); + double fSlow547 = (fSlow459 - fSlow435); + double fSlow548 = faustpower<2>(fSlow547); + double fSlow549 = ((3 * fSlow548) + -1); + double fSlow550 = (fSlow455 - fSlow430); + double fSlow551 = faustpower<2>(fSlow550); + double fSlow552 = ((3 * fSlow551) + -1); + double fSlow553 = (3.5 * (fSlow85 * ((5 * fSlow551) + -3))); + double fSlow554 = (3.5 * (fSlow85 * ((5 * fSlow548) + -3))); + double fSlow555 = ((fSlow548 * ((35 * fSlow548) + -30)) + 3); + double fSlow556 = ((fSlow551 * ((35 * fSlow551) + -30)) + 3); + double fSlow557 = (fSlow471 - fSlow430); + double fSlow558 = faustpower<2>(fSlow557); + double fSlow559 = (3.5 * (fSlow85 * ((5 * fSlow558) + -3))); + double fSlow560 = (fSlow467 - fSlow435); + double fSlow561 = faustpower<2>(fSlow560); + double fSlow562 = (3.5 * (fSlow85 * ((5 * fSlow561) + -3))); + double fSlow563 = ((3 * fSlow558) + -1); + double fSlow564 = ((3 * fSlow561) + -1); + double fSlow565 = ((fSlow561 * ((35 * fSlow561) + -30)) + 3); + double fSlow566 = ((fSlow558 * ((35 * fSlow558) + -30)) + 3); + double fSlow567 = (fSlow479 - fSlow430); + double fSlow568 = faustpower<2>(fSlow567); + double fSlow569 = (3.5 * (fSlow85 * ((5 * fSlow568) + -3))); + double fSlow570 = (fSlow483 - fSlow435); + double fSlow571 = faustpower<2>(fSlow570); + double fSlow572 = (3.5 * (fSlow85 * ((5 * fSlow571) + -3))); + double fSlow573 = ((3 * fSlow571) + -1); + double fSlow574 = ((3 * fSlow568) + -1); + double fSlow575 = ((fSlow568 * ((35 * fSlow568) + -30)) + 3); + double fSlow576 = ((fSlow571 * ((35 * fSlow571) + -30)) + 3); + double fSlow577 = (fSlow491 - fSlow430); + double fSlow578 = faustpower<2>(fSlow577); + double fSlow579 = (3.5 * (fSlow85 * ((5 * fSlow578) + -3))); + double fSlow580 = (fSlow495 - fSlow435); + double fSlow581 = faustpower<2>(fSlow580); + double fSlow582 = (3.5 * (fSlow85 * ((5 * fSlow581) + -3))); + double fSlow583 = ((3 * fSlow578) + -1); + double fSlow584 = ((3 * fSlow581) + -1); + double fSlow585 = ((fSlow581 * ((35 * fSlow581) + -30)) + 3); + double fSlow586 = ((fSlow578 * ((35 * fSlow578) + -30)) + 3); + double fSlow587 = (fSlow507 - fSlow430); + double fSlow588 = faustpower<2>(fSlow587); + double fSlow589 = (3.5 * (fSlow85 * ((5 * fSlow588) + -3))); + double fSlow590 = (fSlow503 - fSlow435); + double fSlow591 = faustpower<2>(fSlow590); + double fSlow592 = (3.5 * (fSlow85 * ((5 * fSlow591) + -3))); + double fSlow593 = ((3 * fSlow591) + -1); + double fSlow594 = ((3 * fSlow588) + -1); + double fSlow595 = ((fSlow588 * ((35 * fSlow588) + -30)) + 3); + double fSlow596 = ((fSlow591 * ((35 * fSlow591) + -30)) + 3); + double fSlow597 = (fSlow519 - fSlow435); + double fSlow598 = faustpower<2>(fSlow597); + double fSlow599 = ((((35 * fSlow598) + -30) * fSlow598) + 3); + double fSlow600 = (fSlow515 - fSlow430); + double fSlow601 = faustpower<2>(fSlow600); + double fSlow602 = ((fSlow601 * ((35 * fSlow601) + -30)) + 3); + double fSlow603 = (3.5 * (((5 * fSlow601) + -3) * fSlow85)); + double fSlow604 = (3.5 * (((5 * fSlow598) + -3) * fSlow85)); + double fSlow605 = ((3 * fSlow601) + -1); + double fSlow606 = ((3 * fSlow598) + -1); + double fSlow607 = (fSlow379 - fSlow380); + double fSlow608 = faustpower<2>(fSlow607); + double fSlow609 = (3.5 * (((5 * fSlow608) + -3) * fSlow85)); + double fSlow610 = (fSlow384 - fSlow385); + double fSlow611 = faustpower<2>(fSlow610); + double fSlow612 = (3.5 * (((5 * fSlow611) + -3) * fSlow85)); + double fSlow613 = ((fSlow611 * ((35 * fSlow611) + -30)) + 3); + double fSlow614 = ((fSlow608 * ((35 * fSlow608) + -30)) + 3); + double fSlow615 = ((3 * fSlow611) + -1); + double fSlow616 = ((3 * fSlow608) + -1); + double fSlow617 = (fSlow397 - fSlow380); + double fSlow618 = faustpower<2>(fSlow617); + double fSlow619 = (3.5 * (((5 * fSlow618) + -3) * fSlow85)); + double fSlow620 = (fSlow393 - fSlow385); + double fSlow621 = faustpower<2>(fSlow620); + double fSlow622 = (3.5 * (((5 * fSlow621) + -3) * fSlow85)); + double fSlow623 = ((fSlow621 * ((35 * fSlow621) + -30)) + 3); + double fSlow624 = ((fSlow618 * ((35 * fSlow618) + -30)) + 3); + double fSlow625 = ((3 * fSlow621) + -1); + double fSlow626 = ((3 * fSlow618) + -1); + double fSlow627 = (fSlow405 - fSlow380); + double fSlow628 = faustpower<2>(fSlow627); + double fSlow629 = (3.5 * (((5 * fSlow628) + -3) * fSlow85)); + double fSlow630 = (fSlow409 - fSlow385); + double fSlow631 = faustpower<2>(fSlow630); + double fSlow632 = (3.5 * (((5 * fSlow631) + -3) * fSlow85)); + double fSlow633 = ((fSlow631 * ((35 * fSlow631) + -30)) + 3); + double fSlow634 = ((fSlow628 * ((35 * fSlow628) + -30)) + 3); + double fSlow635 = ((3 * fSlow631) + -1); + double fSlow636 = ((3 * fSlow628) + -1); + double fSlow637 = (fSlow417 - fSlow380); + double fSlow638 = faustpower<2>(fSlow637); + double fSlow639 = (3.5 * (((5 * fSlow638) + -3) * fSlow85)); + double fSlow640 = (fSlow421 - fSlow385); + double fSlow641 = faustpower<2>(fSlow640); + double fSlow642 = (3.5 * (((5 * fSlow641) + -3) * fSlow85)); + double fSlow643 = ((fSlow641 * ((35 * fSlow641) + -30)) + 3); + double fSlow644 = ((fSlow638 * ((35 * fSlow638) + -30)) + 3); + double fSlow645 = ((3 * fSlow641) + -1); + double fSlow646 = ((3 * fSlow638) + -1); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev505.cpp b/source/HOAUGens/HOAPanLebedev505.cpp new file mode 100644 index 0000000000..e2ece9167a --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev505.cpp @@ -0,0 +1,3266 @@ +//---------------------------------------------------------- +// name: "HOAPanLebedev505" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fConst1; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fConst2; + FAUSTFLOAT fentry0; + double fConst3; + FAUSTFLOAT fslider2; + double fConst4; + FAUSTFLOAT fcheckbox1; + FAUSTFLOAT fslider3; + double fRec3[2]; + double fConst5; + double fRec4[2]; + double fRec5[2]; + double fRec2[2]; + double fRec6[2]; + double fVec0[2]; + double fRec7[2]; + double fConst6; + double fRec8[2]; + double fRec9[2]; + double fRec1[2]; + double fRec10[2]; + double fVec1[2]; + double fRec11[2]; + double fRec13[2]; + double fRec14[2]; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec12[2]; + FAUSTFLOAT fslider4; + FAUSTFLOAT fslider5; + double fRec19[2]; + double fRec20[2]; + FAUSTFLOAT fslider6; + double fRec22[2]; + double fRec23[2]; + FAUSTFLOAT fcheckbox2; + FAUSTFLOAT fslider7; + double fRec24[2]; + double fRec21[2]; + double fRec25[2]; + double fVec2[2]; + double fRec26[2]; + double fRec18[2]; + double fRec27[2]; + double fVec3[2]; + double fRec28[2]; + double fRec30[2]; + double fRec31[2]; + double fRec33[2]; + double fRec34[2]; + double fRec32[2]; + double fRec29[2]; + FAUSTFLOAT fcheckbox3; + double fConst7; + double fConst8; + double fRec36[2]; + double fRec37[2]; + double fRec35[2]; + double fRec38[2]; + double fVec4[2]; + double fRec39[2]; + double fRec41[2]; + double fRec42[2]; + double fRec40[2]; + double fRec44[2]; + double fRec45[2]; + double fRec43[2]; + double fRec46[2]; + double fVec5[2]; + double fRec47[2]; + double fRec49[2]; + double fRec50[2]; + double fRec48[2]; + FAUSTFLOAT fcheckbox4; + FAUSTFLOAT fcheckbox5; + double fConst9; + double fRec53[2]; + double fRec52[2]; + double fRec51[2]; + double fRec55[2]; + double fRec54[2]; + FAUSTFLOAT fcheckbox6; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fRec59[2]; + double fRec60[2]; + double fRec58[2]; + double fRec61[2]; + double fVec6[2]; + double fRec62[2]; + double fRec63[2]; + double fRec57[2]; + double fRec56[2]; + double fRec66[2]; + double fRec67[2]; + double fRec65[2]; + double fRec68[2]; + double fRec64[2]; + FAUSTFLOAT fcheckbox7; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fRec73[2]; + double fRec74[2]; + double fRec72[2]; + double fRec75[2]; + double fVec7[2]; + double fRec76[2]; + double fConst19; + double fRec77[2]; + double fRec78[2]; + double fRec71[2]; + double fRec79[2]; + double fVec8[2]; + double fRec80[2]; + double fRec81[2]; + double fRec70[2]; + double fRec69[2]; + double fRec84[2]; + double fRec85[2]; + double fRec87[2]; + double fRec88[2]; + double fRec86[2]; + double fRec83[2]; + double fRec89[2]; + double fRec82[2]; + double fRec92[2]; + double fRec91[2]; + double fRec90[2]; + double fRec94[2]; + double fRec93[2]; + double fRec98[2]; + double fRec99[2]; + double fRec97[2]; + double fRec100[2]; + double fVec9[2]; + double fRec101[2]; + double fRec102[2]; + double fRec96[2]; + double fRec95[2]; + double fRec105[2]; + double fRec106[2]; + double fRec104[2]; + double fRec107[2]; + double fRec103[2]; + double fRec111[2]; + double fRec112[2]; + double fRec114[2]; + double fRec115[2]; + double fRec113[2]; + double fRec116[2]; + double fVec10[2]; + double fRec117[2]; + double fRec110[2]; + double fRec118[2]; + double fVec11[2]; + double fRec119[2]; + double fRec120[2]; + double fRec109[2]; + double fRec108[2]; + double fRec123[2]; + double fRec124[2]; + double fRec126[2]; + double fRec127[2]; + double fRec125[2]; + double fRec122[2]; + double fRec128[2]; + double fRec121[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph0; + double fRec129[2]; + FAUSTFLOAT fbargraph1; + double fRec130[2]; + FAUSTFLOAT fbargraph2; + double fRec131[2]; + FAUSTFLOAT fbargraph3; + double fRec132[2]; + FAUSTFLOAT fbargraph4; + double fRec133[2]; + FAUSTFLOAT fbargraph5; + double fRec134[2]; + FAUSTFLOAT fbargraph6; + double fRec135[2]; + FAUSTFLOAT fbargraph7; + double fRec136[2]; + FAUSTFLOAT fbargraph8; + double fRec137[2]; + FAUSTFLOAT fbargraph9; + double fRec138[2]; + FAUSTFLOAT fbargraph10; + double fRec139[2]; + FAUSTFLOAT fbargraph11; + double fRec140[2]; + FAUSTFLOAT fbargraph12; + double fRec141[2]; + FAUSTFLOAT fbargraph13; + double fRec142[2]; + FAUSTFLOAT fbargraph14; + double fRec143[2]; + FAUSTFLOAT fbargraph15; + double fRec144[2]; + FAUSTFLOAT fbargraph16; + double fRec145[2]; + FAUSTFLOAT fbargraph17; + double fRec146[2]; + FAUSTFLOAT fbargraph18; + double fRec147[2]; + FAUSTFLOAT fbargraph19; + double fRec148[2]; + FAUSTFLOAT fbargraph20; + double fRec149[2]; + FAUSTFLOAT fbargraph21; + double fRec150[2]; + FAUSTFLOAT fbargraph22; + double fRec151[2]; + FAUSTFLOAT fbargraph23; + double fRec152[2]; + FAUSTFLOAT fbargraph24; + double fRec153[2]; + FAUSTFLOAT fbargraph25; + double fRec154[2]; + FAUSTFLOAT fbargraph26; + double fRec155[2]; + FAUSTFLOAT fbargraph27; + double fRec156[2]; + FAUSTFLOAT fbargraph28; + double fRec157[2]; + FAUSTFLOAT fbargraph29; + double fRec158[2]; + FAUSTFLOAT fbargraph30; + double fRec159[2]; + FAUSTFLOAT fbargraph31; + double fRec160[2]; + FAUSTFLOAT fbargraph32; + double fRec161[2]; + FAUSTFLOAT fbargraph33; + double fRec162[2]; + FAUSTFLOAT fbargraph34; + double fRec163[2]; + FAUSTFLOAT fbargraph35; + double fRec164[2]; + FAUSTFLOAT fbargraph36; + double fRec165[2]; + FAUSTFLOAT fbargraph37; + double fRec166[2]; + FAUSTFLOAT fbargraph38; + double fRec167[2]; + FAUSTFLOAT fbargraph39; + double fRec168[2]; + FAUSTFLOAT fbargraph40; + double fRec169[2]; + FAUSTFLOAT fbargraph41; + double fRec170[2]; + FAUSTFLOAT fbargraph42; + double fRec171[2]; + FAUSTFLOAT fbargraph43; + double fRec172[2]; + FAUSTFLOAT fbargraph44; + double fRec173[2]; + FAUSTFLOAT fbargraph45; + double fRec174[2]; + FAUSTFLOAT fbargraph46; + double fRec175[2]; + FAUSTFLOAT fbargraph47; + double fRec176[2]; + FAUSTFLOAT fbargraph48; + double fRec177[2]; + FAUSTFLOAT fbargraph49; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAPanLebedev505"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signal.lib/name", "Faust Signal Routing Library"); + m->declare("signal.lib/version", "0.0"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 50; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (984.7116049589241 / fConst0); + fConst4 = (715.2883950410759 / fConst0); + fConst5 = (1430.5767900821518 / fConst0); + fConst6 = (1969.4232099178482 / fConst0); + fConst7 = (5.1e+02 / fConst0); + fConst8 = (1.02e+03 / fConst0); + fConst9 = (3.4e+02 / fConst0); + fConst10 = (789.5430205728705 / fConst0); + fConst11 = (394.7715102864353 / fConst0); + fConst12 = (625.2284897135664 / fConst0); + fConst13 = (1250.4569794271329 / fConst0); + fConst14 = (1239.8911224120607 / fConst0); + fConst15 = (619.9455612060303 / fConst0); + fConst16 = (1139.6651757122002 / fConst0); + fConst17 = (790.3892630817644 / fConst0); + fConst18 = (1580.7785261635288 / fConst0); + fConst19 = (2279.3303514244003 / fConst0); + } + virtual void instanceResetUserInterface() { + fcheckbox0 = 0.0; + fslider0 = 0.0; + fslider1 = 0.0; + fentry0 = 1.07; + fslider2 = 2.0; + fcheckbox1 = 0.0; + fslider3 = 0.0; + fslider4 = 0.0; + fslider5 = 0.0; + fslider6 = 2.0; + fcheckbox2 = 0.0; + fslider7 = 0.0; + fcheckbox3 = 0.0; + fcheckbox4 = 0.0; + fcheckbox5 = 0.0; + fcheckbox6 = 0.0; + fcheckbox7 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fVec4[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fVec5[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fVec6[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fVec7[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fVec8[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec81[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec84[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; + for (int i=0; i<2; i++) fRec87[i] = 0; + for (int i=0; i<2; i++) fRec88[i] = 0; + for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec83[i] = 0; + for (int i=0; i<2; i++) fRec89[i] = 0; + for (int i=0; i<2; i++) fRec82[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec91[i] = 0; + for (int i=0; i<2; i++) fRec90[i] = 0; + for (int i=0; i<2; i++) fRec94[i] = 0; + for (int i=0; i<2; i++) fRec93[i] = 0; + for (int i=0; i<2; i++) fRec98[i] = 0; + for (int i=0; i<2; i++) fRec99[i] = 0; + for (int i=0; i<2; i++) fRec97[i] = 0; + for (int i=0; i<2; i++) fRec100[i] = 0; + for (int i=0; i<2; i++) fVec9[i] = 0; + for (int i=0; i<2; i++) fRec101[i] = 0; + for (int i=0; i<2; i++) fRec102[i] = 0; + for (int i=0; i<2; i++) fRec96[i] = 0; + for (int i=0; i<2; i++) fRec95[i] = 0; + for (int i=0; i<2; i++) fRec105[i] = 0; + for (int i=0; i<2; i++) fRec106[i] = 0; + for (int i=0; i<2; i++) fRec104[i] = 0; + for (int i=0; i<2; i++) fRec107[i] = 0; + for (int i=0; i<2; i++) fRec103[i] = 0; + for (int i=0; i<2; i++) fRec111[i] = 0; + for (int i=0; i<2; i++) fRec112[i] = 0; + for (int i=0; i<2; i++) fRec114[i] = 0; + for (int i=0; i<2; i++) fRec115[i] = 0; + for (int i=0; i<2; i++) fRec113[i] = 0; + for (int i=0; i<2; i++) fRec116[i] = 0; + for (int i=0; i<2; i++) fVec10[i] = 0; + for (int i=0; i<2; i++) fRec117[i] = 0; + for (int i=0; i<2; i++) fRec110[i] = 0; + for (int i=0; i<2; i++) fRec118[i] = 0; + for (int i=0; i<2; i++) fVec11[i] = 0; + for (int i=0; i<2; i++) fRec119[i] = 0; + for (int i=0; i<2; i++) fRec120[i] = 0; + for (int i=0; i<2; i++) fRec109[i] = 0; + for (int i=0; i<2; i++) fRec108[i] = 0; + for (int i=0; i<2; i++) fRec123[i] = 0; + for (int i=0; i<2; i++) fRec124[i] = 0; + for (int i=0; i<2; i++) fRec126[i] = 0; + for (int i=0; i<2; i++) fRec127[i] = 0; + for (int i=0; i<2; i++) fRec125[i] = 0; + for (int i=0; i<2; i++) fRec122[i] = 0; + for (int i=0; i<2; i++) fRec128[i] = 0; + for (int i=0; i<2; i++) fRec121[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec129[i] = 0; + for (int i=0; i<2; i++) fRec130[i] = 0; + for (int i=0; i<2; i++) fRec131[i] = 0; + for (int i=0; i<2; i++) fRec132[i] = 0; + for (int i=0; i<2; i++) fRec133[i] = 0; + for (int i=0; i<2; i++) fRec134[i] = 0; + for (int i=0; i<2; i++) fRec135[i] = 0; + for (int i=0; i<2; i++) fRec136[i] = 0; + for (int i=0; i<2; i++) fRec137[i] = 0; + for (int i=0; i<2; i++) fRec138[i] = 0; + for (int i=0; i<2; i++) fRec139[i] = 0; + for (int i=0; i<2; i++) fRec140[i] = 0; + for (int i=0; i<2; i++) fRec141[i] = 0; + for (int i=0; i<2; i++) fRec142[i] = 0; + for (int i=0; i<2; i++) fRec143[i] = 0; + for (int i=0; i<2; i++) fRec144[i] = 0; + for (int i=0; i<2; i++) fRec145[i] = 0; + for (int i=0; i<2; i++) fRec146[i] = 0; + for (int i=0; i<2; i++) fRec147[i] = 0; + for (int i=0; i<2; i++) fRec148[i] = 0; + for (int i=0; i<2; i++) fRec149[i] = 0; + for (int i=0; i<2; i++) fRec150[i] = 0; + for (int i=0; i<2; i++) fRec151[i] = 0; + for (int i=0; i<2; i++) fRec152[i] = 0; + for (int i=0; i<2; i++) fRec153[i] = 0; + for (int i=0; i<2; i++) fRec154[i] = 0; + for (int i=0; i<2; i++) fRec155[i] = 0; + for (int i=0; i<2; i++) fRec156[i] = 0; + for (int i=0; i<2; i++) fRec157[i] = 0; + for (int i=0; i<2; i++) fRec158[i] = 0; + for (int i=0; i<2; i++) fRec159[i] = 0; + for (int i=0; i<2; i++) fRec160[i] = 0; + for (int i=0; i<2; i++) fRec161[i] = 0; + for (int i=0; i<2; i++) fRec162[i] = 0; + for (int i=0; i<2; i++) fRec163[i] = 0; + for (int i=0; i<2; i++) fRec164[i] = 0; + for (int i=0; i<2; i++) fRec165[i] = 0; + for (int i=0; i<2; i++) fRec166[i] = 0; + for (int i=0; i<2; i++) fRec167[i] = 0; + for (int i=0; i<2; i++) fRec168[i] = 0; + for (int i=0; i<2; i++) fRec169[i] = 0; + for (int i=0; i<2; i++) fRec170[i] = 0; + for (int i=0; i<2; i++) fRec171[i] = 0; + for (int i=0; i<2; i++) fRec172[i] = 0; + for (int i=0; i<2; i++) fRec173[i] = 0; + for (int i=0; i<2; i++) fRec174[i] = 0; + for (int i=0; i<2; i++) fRec175[i] = 0; + for (int i=0; i<2; i++) fRec176[i] = 0; + for (int i=0; i<2; i++) fRec177[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fslider3, "0+1", ""); + ui_interface->declare(&fslider3, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider3, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider2, "0+2", ""); + ui_interface->declare(&fslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider2, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider1, "0+3", ""); + ui_interface->declare(&fslider1, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider0, "0+4", ""); + ui_interface->declare(&fslider0, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox1); + ui_interface->closeBox(); + ui_interface->declare(&fslider7, "1+1", ""); + ui_interface->declare(&fslider7, "osc", "/gain_1 -20 20"); + ui_interface->declare(&fslider7, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 1", &fslider7, 0.0, -3e+01, 2e+01, 0.1); + ui_interface->declare(&fslider6, "1+2", ""); + ui_interface->declare(&fslider6, "osc", "/radius_1 0.5 50"); + ui_interface->declare(&fslider6, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 1", &fslider6, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider5, "1+3", ""); + ui_interface->declare(&fslider5, "osc", "/azimuth_1 0 360"); + ui_interface->declare(&fslider5, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 1", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider4, "1+4", ""); + ui_interface->declare(&fslider4, "osc", "/elevation_1 -90 90"); + ui_interface->declare(&fslider4, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 1", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "1+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox2); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fcheckbox4); + ui_interface->addCheckButton("1", &fcheckbox5); + ui_interface->addCheckButton("2", &fcheckbox3); + ui_interface->addCheckButton("3", &fcheckbox6); + ui_interface->addCheckButton("4", &fcheckbox0); + ui_interface->addCheckButton("5", &fcheckbox7); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph0, "osc", "/output1"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e4152b0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "osc", "/output2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e41a390", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph2, "osc", "/output3"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e41f700", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph3, "osc", "/output4"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e424e70", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph4, "osc", "/output5"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e42a480", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph5, "osc", "/output6"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e42f510", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph6, "osc", "/output7"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e434dc0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "osc", "/output8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e43a200", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph8, "osc", "/output9"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e43f670", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph9, "osc", "/output10"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e444b40", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph10, "osc", "/output11"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e44a360", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph11, "osc", "/output12"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e44fc00", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph12, "osc", "/output13"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e455510", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph13, "osc", "/output14"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e45ae70", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph14, "osc", "/output15"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e460270", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph15, "osc", "/output16"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e4656c0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph16, "osc", "/output17"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e46aba0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph17, "osc", "/output18"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e4700e0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph18, "osc", "/output19"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e475e00", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph19, "osc", "/output20"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e47b6c0", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph20, "osc", "/output21"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e480fb0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph21, "osc", "/output22"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e1511a0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph22, "osc", "/output23"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e1568d0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph23, "osc", "/output24"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e15c0a0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph24, "osc", "/output25"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e1618f0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph25, "osc", "/output26"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e2d6f80", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph26, "osc", "/output27"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e2f6eb0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph27, "osc", "/output28"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e2fbf50", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph28, "osc", "/output29"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e505580", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph29, "osc", "/output30"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e50a9b0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph30, "osc", "/output31"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e510870", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph31, "osc", "/output32"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e516370", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph32, "osc", "/output33"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e51bea0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph33, "osc", "/output34"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e521a30", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph34, "osc", "/output35"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e527620", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fbargraph35, "osc", "/output36"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e52d270", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fbargraph36, "osc", "/output37"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e532ef0", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fbargraph37, "osc", "/output38"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e538bd0", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fbargraph38, "osc", "/output39"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e53e090", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fbargraph39, "osc", "/output40"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e5435b0", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fbargraph40, "osc", "/output41"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e548b30", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fbargraph41, "osc", "/output42"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e54e110", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fbargraph42, "osc", "/output43"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e5535b0", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fbargraph43, "osc", "/output44"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e558e50", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fbargraph44, "osc", "/output45"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e55e540", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fbargraph45, "osc", "/output46"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e563d00", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fbargraph46, "osc", "/output47"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e5694d0", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fbargraph47, "osc", "/output48"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e56ed10", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fbargraph48, "osc", "/output49"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e574620", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fbargraph49, "osc", "/output50"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9b6e579f40", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (1.125 * (1 - double(fcheckbox0))); + double fSlow1 = double(fslider0); + double fSlow2 = sin(fSlow1); + double fSlow3 = cos(fSlow1); + double fSlow4 = double(fslider1); + double fSlow5 = (fSlow3 * cos(fSlow4)); + double fSlow6 = (6.123233995736766e-17 * fSlow5); + double fSlow7 = (fSlow2 + fSlow6); + double fSlow8 = faustpower<2>(fSlow7); + double fSlow9 = ((fSlow8 * ((35 * fSlow8) + -30)) + 3); + double fSlow10 = double(fentry0); + double fSlow11 = (fConst2 / fSlow10); + double fSlow12 = faustpower<2>(fSlow11); + double fSlow13 = (1.0 / (((9.1401308902779 * fSlow12) + (fConst3 / fSlow10)) + 1)); + double fSlow14 = double(fslider2); + double fSlow15 = (fConst2 / fSlow14); + double fSlow16 = faustpower<2>(fSlow15); + double fSlow17 = (((fConst3 / fSlow14) + (9.1401308902779 * fSlow16)) + 1); + double fSlow18 = (1.0 / (((fConst4 / fSlow10) + (11.4878004768713 * fSlow12)) + 1)); + double fSlow19 = double(fcheckbox1); + double fSlow20 = (fSlow19 * fSlow10); + double fSlow21 = (((11.4878004768713 * fSlow16) + (fConst4 / fSlow14)) + 1); + double fSlow22 = ((fSlow20 * fSlow21) / fSlow14); + double fSlow23 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); + double fSlow24 = (45.9512019074852 * fSlow12); + double fSlow25 = (fSlow24 + (fConst5 / fSlow10)); + double fSlow26 = (1.0 / fSlow21); + double fSlow27 = (45.9512019074852 * fSlow16); + double fSlow28 = (fSlow27 + (fConst5 / fSlow14)); + double fSlow29 = (36.5605235611116 * fSlow12); + double fSlow30 = (fSlow29 + (fConst6 / fSlow10)); + double fSlow31 = (1.0 / fSlow17); + double fSlow32 = (36.5605235611116 * fSlow16); + double fSlow33 = ((fConst6 / fSlow14) + fSlow32); + double fSlow34 = ((1 - fSlow19) * fSlow10); + double fSlow35 = double(fslider4); + double fSlow36 = sin(fSlow35); + double fSlow37 = cos(fSlow35); + double fSlow38 = double(fslider5); + double fSlow39 = (fSlow37 * cos(fSlow38)); + double fSlow40 = (6.123233995736766e-17 * fSlow39); + double fSlow41 = (fSlow36 + fSlow40); + double fSlow42 = faustpower<2>(fSlow41); + double fSlow43 = ((fSlow42 * ((35 * fSlow42) + -30)) + 3); + double fSlow44 = double(fslider6); + double fSlow45 = (fConst2 / fSlow44); + double fSlow46 = faustpower<2>(fSlow45); + double fSlow47 = (((fConst3 / fSlow44) + (9.1401308902779 * fSlow46)) + 1); + double fSlow48 = double(fcheckbox2); + double fSlow49 = (fSlow10 * fSlow48); + double fSlow50 = (((11.4878004768713 * fSlow46) + (fConst4 / fSlow44)) + 1); + double fSlow51 = ((fSlow49 * fSlow50) / fSlow44); + double fSlow52 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider7)))); + double fSlow53 = (1.0 / fSlow50); + double fSlow54 = (45.9512019074852 * fSlow46); + double fSlow55 = ((fConst5 / fSlow44) + fSlow54); + double fSlow56 = (1.0 / fSlow47); + double fSlow57 = (36.5605235611116 * fSlow46); + double fSlow58 = ((fConst6 / fSlow44) + fSlow57); + double fSlow59 = (fSlow10 * (1 - fSlow48)); + double fSlow60 = (2.5 * (1 - double(fcheckbox3))); + double fSlow61 = ((3 * fSlow42) + -1); + double fSlow62 = (1.0 / (((fConst7 / fSlow10) + (3 * fSlow12)) + 1)); + double fSlow63 = (12 * fSlow12); + double fSlow64 = (fSlow63 + (fConst8 / fSlow10)); + double fSlow65 = (((fConst7 / fSlow44) + (3 * fSlow46)) + 1); + double fSlow66 = ((fSlow49 * fSlow65) / fSlow44); + double fSlow67 = (1.0 / fSlow65); + double fSlow68 = (12 * fSlow46); + double fSlow69 = ((fConst8 / fSlow44) + fSlow68); + double fSlow70 = ((3 * fSlow8) + -1); + double fSlow71 = (((fConst7 / fSlow14) + (3 * fSlow16)) + 1); + double fSlow72 = ((fSlow20 * fSlow71) / fSlow14); + double fSlow73 = (1.0 / fSlow71); + double fSlow74 = (12 * fSlow16); + double fSlow75 = ((fConst8 / fSlow14) + fSlow74); + double fSlow76 = (fSlow10 * (1 - double(fcheckbox4))); + double fSlow77 = (1 - (fSlow19 * (1 - (1.0 / fSlow14)))); + double fSlow78 = (1 - (fSlow48 * (1 - (1.0 / fSlow44)))); + double fSlow79 = (3 * (1 - double(fcheckbox5))); + double fSlow80 = (fSlow15 + 1); + double fSlow81 = (fConst9 / (fSlow14 * fSlow80)); + double fSlow82 = (1.0 / (fSlow11 + 1)); + double fSlow83 = ((fSlow20 * fSlow80) / fSlow14); + double fSlow84 = (fConst9 / fSlow10); + double fSlow85 = (1 - double(fcheckbox6)); + double fSlow86 = (3.5 * (fSlow85 * ((5 * fSlow8) + -3))); + double fSlow87 = ((fConst11 / fSlow14) + 1); + double fSlow88 = (fConst10 / (fSlow14 * fSlow87)); + double fSlow89 = (1.0 / ((fConst11 / fSlow10) + 1)); + double fSlow90 = (1.0 / (((fConst12 / fSlow10) + (6.45943269348338 * fSlow12)) + 1)); + double fSlow91 = (((fConst12 / fSlow14) + (6.45943269348338 * fSlow16)) + 1); + double fSlow92 = ((fSlow20 * fSlow91) / fSlow14); + double fSlow93 = (25.83773077393352 * fSlow12); + double fSlow94 = (fSlow93 + (fConst13 / fSlow10)); + double fSlow95 = (1.0 / fSlow91); + double fSlow96 = (25.83773077393352 * fSlow16); + double fSlow97 = ((fConst13 / fSlow14) + fSlow96); + double fSlow98 = (fConst10 / fSlow10); + double fSlow99 = (1 - double(fcheckbox7)); + double fSlow100 = (1.375 * (fSlow99 * ((fSlow8 * ((63 * fSlow8) + -70)) + 15))); + double fSlow101 = ((fConst15 / fSlow14) + 1); + double fSlow102 = (fConst14 / (fSlow14 * fSlow101)); + double fSlow103 = (1.0 / ((fConst15 / fSlow10) + 1)); + double fSlow104 = (1.0 / (((14.2724805132801 * fSlow12) + (fConst16 / fSlow10)) + 1)); + double fSlow105 = (((fConst16 / fSlow14) + (14.2724805132801 * fSlow16)) + 1); + double fSlow106 = (1.0 / (((fConst17 / fSlow10) + (18.1563153134523 * fSlow12)) + 1)); + double fSlow107 = (((fConst17 / fSlow14) + (18.1563153134523 * fSlow16)) + 1); + double fSlow108 = ((fSlow20 * fSlow107) / fSlow14); + double fSlow109 = (72.6252612538092 * fSlow12); + double fSlow110 = (fSlow109 + (fConst18 / fSlow10)); + double fSlow111 = (1.0 / fSlow107); + double fSlow112 = (72.6252612538092 * fSlow16); + double fSlow113 = (fSlow112 + (fConst18 / fSlow14)); + double fSlow114 = (57.0899220531204 * fSlow12); + double fSlow115 = (fSlow114 + (fConst19 / fSlow10)); + double fSlow116 = (1.0 / fSlow105); + double fSlow117 = (57.0899220531204 * fSlow16); + double fSlow118 = ((fConst19 / fSlow14) + fSlow117); + double fSlow119 = (fConst14 / fSlow10); + double fSlow120 = (fSlow45 + 1); + double fSlow121 = (fConst9 / (fSlow44 * fSlow120)); + double fSlow122 = ((fSlow49 * fSlow120) / fSlow44); + double fSlow123 = (3.5 * (fSlow85 * ((5 * fSlow42) + -3))); + double fSlow124 = ((fConst11 / fSlow44) + 1); + double fSlow125 = (fConst10 / (fSlow44 * fSlow124)); + double fSlow126 = (((fConst12 / fSlow44) + (6.45943269348338 * fSlow46)) + 1); + double fSlow127 = ((fSlow49 * fSlow126) / fSlow44); + double fSlow128 = (1.0 / fSlow126); + double fSlow129 = (25.83773077393352 * fSlow46); + double fSlow130 = ((fConst13 / fSlow44) + fSlow129); + double fSlow131 = (1.375 * (fSlow99 * ((fSlow42 * ((63 * fSlow42) + -70)) + 15))); + double fSlow132 = ((fConst15 / fSlow44) + 1); + double fSlow133 = (fConst14 / (fSlow44 * fSlow132)); + double fSlow134 = (((fConst16 / fSlow44) + (14.2724805132801 * fSlow46)) + 1); + double fSlow135 = (((fConst17 / fSlow44) + (18.1563153134523 * fSlow46)) + 1); + double fSlow136 = ((fSlow49 * fSlow135) / fSlow44); + double fSlow137 = (1.0 / fSlow135); + double fSlow138 = (72.6252612538092 * fSlow46); + double fSlow139 = ((fConst18 / fSlow44) + fSlow138); + double fSlow140 = (1.0 / fSlow134); + double fSlow141 = (57.0899220531204 * fSlow46); + double fSlow142 = ((fConst19 / fSlow44) + fSlow141); + double fSlow143 = (3.5 * fSlow85); + double fSlow144 = faustpower<3>(fSlow5); + double fSlow145 = ((5 * fSlow144) - (3 * fSlow5)); + double fSlow146 = faustpower<3>(fSlow39); + double fSlow147 = ((5 * fSlow146) - (3 * fSlow39)); + double fSlow148 = (1.375 * fSlow99); + double fSlow149 = faustpower<2>(fSlow5); + double fSlow150 = ((15 * fSlow5) + (fSlow144 * ((63 * fSlow149) + -70))); + double fSlow151 = faustpower<2>(fSlow39); + double fSlow152 = ((15 * fSlow39) + (fSlow146 * ((63 * fSlow151) + -70))); + double fSlow153 = ((3 * fSlow149) + -1); + double fSlow154 = ((3 * fSlow151) + -1); + double fSlow155 = ((fSlow149 * ((35 * fSlow149) + -30)) + 3); + double fSlow156 = ((fSlow151 * ((35 * fSlow151) + -30)) + 3); + double fSlow157 = (fSlow37 * cos((fSlow38 + -1.5707963267948966))); + double fSlow158 = faustpower<2>(fSlow157); + double fSlow159 = ((fSlow158 * ((35 * fSlow158) + -30)) + 3); + double fSlow160 = (fSlow3 * cos((fSlow4 + -1.5707963267948966))); + double fSlow161 = faustpower<2>(fSlow160); + double fSlow162 = ((fSlow161 * ((35 * fSlow161) + -30)) + 3); + double fSlow163 = faustpower<3>(fSlow160); + double fSlow164 = ((15 * fSlow160) + (fSlow163 * ((63 * fSlow161) + -70))); + double fSlow165 = faustpower<3>(fSlow157); + double fSlow166 = ((15 * fSlow157) + (fSlow165 * ((63 * fSlow158) + -70))); + double fSlow167 = ((5 * fSlow165) - (3 * fSlow157)); + double fSlow168 = ((5 * fSlow163) - (3 * fSlow160)); + double fSlow169 = ((3 * fSlow158) + -1); + double fSlow170 = ((3 * fSlow161) + -1); + double fSlow171 = (fSlow3 * cos((fSlow4 + -3.141592653589793))); + double fSlow172 = faustpower<2>(fSlow171); + double fSlow173 = ((3 * fSlow172) + -1); + double fSlow174 = (fSlow37 * cos((fSlow38 + -3.141592653589793))); + double fSlow175 = faustpower<2>(fSlow174); + double fSlow176 = ((3 * fSlow175) + -1); + double fSlow177 = faustpower<3>(fSlow174); + double fSlow178 = ((5 * fSlow177) - (3 * fSlow174)); + double fSlow179 = faustpower<3>(fSlow171); + double fSlow180 = ((5 * fSlow179) - (3 * fSlow171)); + double fSlow181 = ((15 * fSlow171) + (fSlow179 * ((63 * fSlow172) + -70))); + double fSlow182 = ((15 * fSlow174) + (fSlow177 * ((63 * fSlow175) + -70))); + double fSlow183 = ((fSlow175 * ((35 * fSlow175) + -30)) + 3); + double fSlow184 = ((fSlow172 * ((35 * fSlow172) + -30)) + 3); + double fSlow185 = (fSlow3 * cos((fSlow4 + -4.71238898038469))); + double fSlow186 = faustpower<2>(fSlow185); + double fSlow187 = ((3 * fSlow186) + -1); + double fSlow188 = (fSlow37 * cos((fSlow38 + -4.71238898038469))); + double fSlow189 = faustpower<2>(fSlow188); + double fSlow190 = ((3 * fSlow189) + -1); + double fSlow191 = faustpower<3>(fSlow188); + double fSlow192 = ((5 * fSlow191) - (3 * fSlow188)); + double fSlow193 = faustpower<3>(fSlow185); + double fSlow194 = ((5 * fSlow193) - (3 * fSlow185)); + double fSlow195 = ((15 * fSlow185) + (fSlow193 * ((63 * fSlow186) + -70))); + double fSlow196 = ((15 * fSlow188) + (fSlow191 * ((63 * fSlow189) + -70))); + double fSlow197 = ((fSlow189 * ((35 * fSlow189) + -30)) + 3); + double fSlow198 = ((fSlow186 * ((35 * fSlow186) + -30)) + 3); + double fSlow199 = (fSlow6 - fSlow2); + double fSlow200 = faustpower<2>(fSlow199); + double fSlow201 = ((fSlow200 * ((35 * fSlow200) + -30)) + 3); + double fSlow202 = (fSlow40 - fSlow36); + double fSlow203 = faustpower<2>(fSlow202); + double fSlow204 = ((fSlow203 * ((35 * fSlow203) + -30)) + 3); + double fSlow205 = (1.375 * (fSlow99 * ((fSlow203 * ((63 * fSlow203) + -70)) + 15))); + double fSlow206 = (3.5 * (fSlow85 * ((5 * fSlow203) + -3))); + double fSlow207 = (3.5 * (fSlow85 * ((5 * fSlow200) + -3))); + double fSlow208 = (1.375 * (fSlow99 * ((fSlow200 * ((63 * fSlow200) + -70)) + 15))); + double fSlow209 = ((3 * fSlow203) + -1); + double fSlow210 = ((3 * fSlow200) + -1); + double fSlow211 = (0.7071067811865476 * fSlow39); + double fSlow212 = (0.7071067811865475 * fSlow36); + double fSlow213 = (fSlow211 + fSlow212); + double fSlow214 = faustpower<2>(fSlow213); + double fSlow215 = (3.5 * (fSlow85 * ((5 * fSlow214) + -3))); + double fSlow216 = (1.375 * (fSlow99 * ((fSlow214 * ((63 * fSlow214) + -70)) + 15))); + double fSlow217 = (0.7071067811865476 * fSlow5); + double fSlow218 = (0.7071067811865475 * fSlow2); + double fSlow219 = (fSlow217 + fSlow218); + double fSlow220 = faustpower<2>(fSlow219); + double fSlow221 = (3.5 * (fSlow85 * ((5 * fSlow220) + -3))); + double fSlow222 = (1.375 * (fSlow99 * ((fSlow220 * ((63 * fSlow220) + -70)) + 15))); + double fSlow223 = ((3 * fSlow220) + -1); + double fSlow224 = ((3 * fSlow214) + -1); + double fSlow225 = ((fSlow214 * ((35 * fSlow214) + -30)) + 3); + double fSlow226 = ((fSlow220 * ((35 * fSlow220) + -30)) + 3); + double fSlow227 = (0.7071067811865476 * fSlow160); + double fSlow228 = (fSlow218 + fSlow227); + double fSlow229 = faustpower<2>(fSlow228); + double fSlow230 = ((fSlow229 * ((35 * fSlow229) + -30)) + 3); + double fSlow231 = (0.7071067811865476 * fSlow157); + double fSlow232 = (fSlow212 + fSlow231); + double fSlow233 = faustpower<2>(fSlow232); + double fSlow234 = ((fSlow233 * ((35 * fSlow233) + -30)) + 3); + double fSlow235 = ((3 * fSlow229) + -1); + double fSlow236 = ((3 * fSlow233) + -1); + double fSlow237 = (1.375 * (fSlow99 * ((fSlow233 * ((63 * fSlow233) + -70)) + 15))); + double fSlow238 = (3.5 * (fSlow85 * ((5 * fSlow233) + -3))); + double fSlow239 = (3.5 * (fSlow85 * ((5 * fSlow229) + -3))); + double fSlow240 = (1.375 * (fSlow99 * ((fSlow229 * ((63 * fSlow229) + -70)) + 15))); + double fSlow241 = (0.7071067811865476 * fSlow171); + double fSlow242 = (fSlow218 + fSlow241); + double fSlow243 = faustpower<2>(fSlow242); + double fSlow244 = ((fSlow243 * ((35 * fSlow243) + -30)) + 3); + double fSlow245 = (0.7071067811865476 * fSlow174); + double fSlow246 = (fSlow212 + fSlow245); + double fSlow247 = faustpower<2>(fSlow246); + double fSlow248 = ((fSlow247 * ((35 * fSlow247) + -30)) + 3); + double fSlow249 = ((3 * fSlow243) + -1); + double fSlow250 = ((3 * fSlow247) + -1); + double fSlow251 = (1.375 * (fSlow99 * ((fSlow247 * ((63 * fSlow247) + -70)) + 15))); + double fSlow252 = (3.5 * (fSlow85 * ((5 * fSlow247) + -3))); + double fSlow253 = (3.5 * (fSlow85 * ((5 * fSlow243) + -3))); + double fSlow254 = (1.375 * (fSlow99 * ((fSlow243 * ((63 * fSlow243) + -70)) + 15))); + double fSlow255 = (0.7071067811865476 * fSlow185); + double fSlow256 = (fSlow218 + fSlow255); + double fSlow257 = faustpower<2>(fSlow256); + double fSlow258 = ((fSlow257 * ((35 * fSlow257) + -30)) + 3); + double fSlow259 = (0.7071067811865476 * fSlow188); + double fSlow260 = (fSlow212 + fSlow259); + double fSlow261 = faustpower<2>(fSlow260); + double fSlow262 = ((fSlow261 * ((35 * fSlow261) + -30)) + 3); + double fSlow263 = ((3 * fSlow257) + -1); + double fSlow264 = ((3 * fSlow261) + -1); + double fSlow265 = (1.375 * (fSlow99 * ((fSlow261 * ((63 * fSlow261) + -70)) + 15))); + double fSlow266 = (3.5 * (fSlow85 * ((5 * fSlow261) + -3))); + double fSlow267 = (3.5 * (fSlow85 * ((5 * fSlow257) + -3))); + double fSlow268 = (1.375 * (fSlow99 * ((fSlow257 * ((63 * fSlow257) + -70)) + 15))); + double fSlow269 = (fSlow3 * cos((fSlow4 + -0.7853981633974483))); + double fSlow270 = faustpower<2>(fSlow269); + double fSlow271 = ((3 * fSlow270) + -1); + double fSlow272 = (fSlow37 * cos((fSlow38 + -0.7853981633974483))); + double fSlow273 = faustpower<2>(fSlow272); + double fSlow274 = ((3 * fSlow273) + -1); + double fSlow275 = faustpower<3>(fSlow272); + double fSlow276 = ((5 * fSlow275) - (3 * fSlow272)); + double fSlow277 = faustpower<3>(fSlow269); + double fSlow278 = ((5 * fSlow277) - (3 * fSlow269)); + double fSlow279 = ((15 * fSlow269) + (fSlow277 * ((63 * fSlow270) + -70))); + double fSlow280 = ((15 * fSlow272) + (fSlow275 * ((63 * fSlow273) + -70))); + double fSlow281 = ((fSlow273 * ((35 * fSlow273) + -30)) + 3); + double fSlow282 = ((fSlow270 * ((35 * fSlow270) + -30)) + 3); + double fSlow283 = (fSlow3 * cos((fSlow4 + -2.356194490192345))); + double fSlow284 = faustpower<2>(fSlow283); + double fSlow285 = ((3 * fSlow284) + -1); + double fSlow286 = (fSlow37 * cos((fSlow38 + -2.356194490192345))); + double fSlow287 = faustpower<2>(fSlow286); + double fSlow288 = ((3 * fSlow287) + -1); + double fSlow289 = faustpower<3>(fSlow286); + double fSlow290 = ((5 * fSlow289) - (3 * fSlow286)); + double fSlow291 = faustpower<3>(fSlow283); + double fSlow292 = ((5 * fSlow291) - (3 * fSlow283)); + double fSlow293 = ((15 * fSlow283) + (fSlow291 * ((63 * fSlow284) + -70))); + double fSlow294 = ((15 * fSlow286) + (fSlow289 * ((63 * fSlow287) + -70))); + double fSlow295 = ((fSlow287 * ((35 * fSlow287) + -30)) + 3); + double fSlow296 = ((fSlow284 * ((35 * fSlow284) + -30)) + 3); + double fSlow297 = (fSlow3 * cos((fSlow4 + -3.9269908169872414))); + double fSlow298 = faustpower<2>(fSlow297); + double fSlow299 = ((3 * fSlow298) + -1); + double fSlow300 = (fSlow37 * cos((fSlow38 + -3.9269908169872414))); + double fSlow301 = faustpower<2>(fSlow300); + double fSlow302 = ((3 * fSlow301) + -1); + double fSlow303 = faustpower<3>(fSlow300); + double fSlow304 = ((5 * fSlow303) - (3 * fSlow300)); + double fSlow305 = faustpower<3>(fSlow297); + double fSlow306 = ((5 * fSlow305) - (3 * fSlow297)); + double fSlow307 = ((15 * fSlow297) + (fSlow305 * ((63 * fSlow298) + -70))); + double fSlow308 = ((15 * fSlow300) + (fSlow303 * ((63 * fSlow301) + -70))); + double fSlow309 = ((fSlow301 * ((35 * fSlow301) + -30)) + 3); + double fSlow310 = ((fSlow298 * ((35 * fSlow298) + -30)) + 3); + double fSlow311 = (fSlow3 * cos((fSlow4 + -5.497787143782138))); + double fSlow312 = faustpower<2>(fSlow311); + double fSlow313 = ((3 * fSlow312) + -1); + double fSlow314 = (fSlow37 * cos((fSlow38 + -5.497787143782138))); + double fSlow315 = faustpower<2>(fSlow314); + double fSlow316 = ((3 * fSlow315) + -1); + double fSlow317 = faustpower<3>(fSlow314); + double fSlow318 = ((5 * fSlow317) - (3 * fSlow314)); + double fSlow319 = faustpower<3>(fSlow311); + double fSlow320 = ((5 * fSlow319) - (3 * fSlow311)); + double fSlow321 = ((15 * fSlow311) + (fSlow319 * ((63 * fSlow312) + -70))); + double fSlow322 = ((15 * fSlow314) + (fSlow317 * ((63 * fSlow315) + -70))); + double fSlow323 = ((fSlow315 * ((35 * fSlow315) + -30)) + 3); + double fSlow324 = ((fSlow312 * ((35 * fSlow312) + -30)) + 3); + double fSlow325 = (fSlow211 - fSlow212); + double fSlow326 = faustpower<2>(fSlow325); + double fSlow327 = (3.5 * (fSlow85 * ((5 * fSlow326) + -3))); + double fSlow328 = (1.375 * (fSlow99 * ((fSlow326 * ((63 * fSlow326) + -70)) + 15))); + double fSlow329 = (fSlow217 - fSlow218); + double fSlow330 = faustpower<2>(fSlow329); + double fSlow331 = (1.375 * (fSlow99 * ((fSlow330 * ((63 * fSlow330) + -70)) + 15))); + double fSlow332 = (3.5 * (fSlow85 * ((5 * fSlow330) + -3))); + double fSlow333 = ((3 * fSlow330) + -1); + double fSlow334 = ((3 * fSlow326) + -1); + double fSlow335 = ((fSlow326 * ((35 * fSlow326) + -30)) + 3); + double fSlow336 = ((fSlow330 * ((35 * fSlow330) + -30)) + 3); + double fSlow337 = (fSlow227 - fSlow218); + double fSlow338 = faustpower<2>(fSlow337); + double fSlow339 = ((fSlow338 * ((35 * fSlow338) + -30)) + 3); + double fSlow340 = (fSlow231 - fSlow212); + double fSlow341 = faustpower<2>(fSlow340); + double fSlow342 = ((fSlow341 * ((35 * fSlow341) + -30)) + 3); + double fSlow343 = (1.375 * (fSlow99 * ((fSlow341 * ((63 * fSlow341) + -70)) + 15))); + double fSlow344 = (3.5 * (fSlow85 * ((5 * fSlow341) + -3))); + double fSlow345 = (3.5 * (fSlow85 * ((5 * fSlow338) + -3))); + double fSlow346 = (1.375 * (fSlow99 * ((fSlow338 * ((63 * fSlow338) + -70)) + 15))); + double fSlow347 = ((3 * fSlow341) + -1); + double fSlow348 = ((3 * fSlow338) + -1); + double fSlow349 = (fSlow241 - fSlow218); + double fSlow350 = faustpower<2>(fSlow349); + double fSlow351 = ((fSlow350 * ((35 * fSlow350) + -30)) + 3); + double fSlow352 = (fSlow245 - fSlow212); + double fSlow353 = faustpower<2>(fSlow352); + double fSlow354 = ((fSlow353 * ((35 * fSlow353) + -30)) + 3); + double fSlow355 = (1.375 * (fSlow99 * ((fSlow353 * ((63 * fSlow353) + -70)) + 15))); + double fSlow356 = (3.5 * (fSlow85 * ((5 * fSlow353) + -3))); + double fSlow357 = (3.5 * (fSlow85 * ((5 * fSlow350) + -3))); + double fSlow358 = (1.375 * (fSlow99 * ((fSlow350 * ((63 * fSlow350) + -70)) + 15))); + double fSlow359 = ((3 * fSlow353) + -1); + double fSlow360 = ((3 * fSlow350) + -1); + double fSlow361 = (fSlow255 - fSlow218); + double fSlow362 = faustpower<2>(fSlow361); + double fSlow363 = ((fSlow362 * ((35 * fSlow362) + -30)) + 3); + double fSlow364 = (fSlow259 - fSlow212); + double fSlow365 = faustpower<2>(fSlow364); + double fSlow366 = ((fSlow365 * ((35 * fSlow365) + -30)) + 3); + double fSlow367 = (1.375 * (fSlow99 * ((fSlow365 * ((63 * fSlow365) + -70)) + 15))); + double fSlow368 = (3.5 * (fSlow85 * ((5 * fSlow365) + -3))); + double fSlow369 = (3.5 * (fSlow85 * ((5 * fSlow362) + -3))); + double fSlow370 = (1.375 * (fSlow99 * ((fSlow362 * ((63 * fSlow362) + -70)) + 15))); + double fSlow371 = ((3 * fSlow365) + -1); + double fSlow372 = ((3 * fSlow362) + -1); + double fSlow373 = (0.8164965809277259 * fSlow272); + double fSlow374 = (0.5773502691896258 * fSlow36); + double fSlow375 = (fSlow373 + fSlow374); + double fSlow376 = faustpower<2>(fSlow375); + double fSlow377 = (3.5 * (fSlow85 * ((5 * fSlow376) + -3))); + double fSlow378 = (1.375 * (fSlow99 * ((fSlow376 * ((63 * fSlow376) + -70)) + 15))); + double fSlow379 = (0.8164965809277259 * fSlow269); + double fSlow380 = (0.5773502691896258 * fSlow2); + double fSlow381 = (fSlow379 + fSlow380); + double fSlow382 = faustpower<2>(fSlow381); + double fSlow383 = (3.5 * (fSlow85 * ((5 * fSlow382) + -3))); + double fSlow384 = (1.375 * (fSlow99 * ((fSlow382 * ((63 * fSlow382) + -70)) + 15))); + double fSlow385 = ((3 * fSlow382) + -1); + double fSlow386 = ((3 * fSlow376) + -1); + double fSlow387 = ((fSlow376 * ((35 * fSlow376) + -30)) + 3); + double fSlow388 = ((fSlow382 * ((35 * fSlow382) + -30)) + 3); + double fSlow389 = (0.8164965809277259 * fSlow283); + double fSlow390 = (fSlow380 + fSlow389); + double fSlow391 = faustpower<2>(fSlow390); + double fSlow392 = ((fSlow391 * ((35 * fSlow391) + -30)) + 3); + double fSlow393 = (0.8164965809277259 * fSlow286); + double fSlow394 = (fSlow374 + fSlow393); + double fSlow395 = faustpower<2>(fSlow394); + double fSlow396 = ((fSlow395 * ((35 * fSlow395) + -30)) + 3); + double fSlow397 = ((3 * fSlow391) + -1); + double fSlow398 = ((3 * fSlow395) + -1); + double fSlow399 = (1.375 * (fSlow99 * ((fSlow395 * ((63 * fSlow395) + -70)) + 15))); + double fSlow400 = (3.5 * (fSlow85 * ((5 * fSlow395) + -3))); + double fSlow401 = (3.5 * (fSlow85 * ((5 * fSlow391) + -3))); + double fSlow402 = (1.375 * (fSlow99 * ((fSlow391 * ((63 * fSlow391) + -70)) + 15))); + double fSlow403 = (0.8164965809277259 * fSlow297); + double fSlow404 = (fSlow380 + fSlow403); + double fSlow405 = faustpower<2>(fSlow404); + double fSlow406 = ((fSlow405 * ((35 * fSlow405) + -30)) + 3); + double fSlow407 = (0.8164965809277259 * fSlow300); + double fSlow408 = (fSlow374 + fSlow407); + double fSlow409 = faustpower<2>(fSlow408); + double fSlow410 = ((fSlow409 * ((35 * fSlow409) + -30)) + 3); + double fSlow411 = ((3 * fSlow405) + -1); + double fSlow412 = ((3 * fSlow409) + -1); + double fSlow413 = (1.375 * (fSlow99 * ((fSlow409 * ((63 * fSlow409) + -70)) + 15))); + double fSlow414 = (3.5 * (fSlow85 * ((5 * fSlow409) + -3))); + double fSlow415 = (3.5 * (fSlow85 * ((5 * fSlow405) + -3))); + double fSlow416 = (1.375 * (fSlow99 * ((fSlow405 * ((63 * fSlow405) + -70)) + 15))); + double fSlow417 = (0.8164965809277259 * fSlow314); + double fSlow418 = (fSlow417 + fSlow374); + double fSlow419 = faustpower<2>(fSlow418); + double fSlow420 = ((fSlow419 * ((35 * fSlow419) + -30)) + 3); + double fSlow421 = (0.8164965809277259 * fSlow311); + double fSlow422 = (fSlow380 + fSlow421); + double fSlow423 = faustpower<2>(fSlow422); + double fSlow424 = ((((35 * fSlow423) + -30) * fSlow423) + 3); + double fSlow425 = (3.5 * (fSlow85 * ((5 * fSlow419) + -3))); + double fSlow426 = (1.375 * (fSlow99 * ((fSlow419 * ((63 * fSlow419) + -70)) + 15))); + double fSlow427 = (3.5 * (fSlow85 * ((5 * fSlow423) + -3))); + double fSlow428 = (1.375 * (fSlow99 * ((fSlow423 * ((63 * fSlow423) + -70)) + 15))); + double fSlow429 = ((3 * fSlow419) + -1); + double fSlow430 = ((3 * fSlow423) + -1); + double fSlow431 = (fSlow373 - fSlow374); + double fSlow432 = faustpower<2>(fSlow431); + double fSlow433 = ((3 * fSlow432) + -1); + double fSlow434 = (fSlow379 - fSlow380); + double fSlow435 = faustpower<2>(fSlow434); + double fSlow436 = ((3 * fSlow435) + -1); + double fSlow437 = ((fSlow435 * ((35 * fSlow435) + -30)) + 3); + double fSlow438 = ((fSlow432 * ((35 * fSlow432) + -30)) + 3); + double fSlow439 = (3.5 * (fSlow85 * ((5 * fSlow435) + -3))); + double fSlow440 = (1.375 * (fSlow99 * ((fSlow435 * ((63 * fSlow435) + -70)) + 15))); + double fSlow441 = (3.5 * (fSlow85 * ((5 * fSlow432) + -3))); + double fSlow442 = (1.375 * (fSlow99 * ((fSlow432 * ((63 * fSlow432) + -70)) + 15))); + double fSlow443 = (fSlow389 - fSlow380); + double fSlow444 = faustpower<2>(fSlow443); + double fSlow445 = ((3 * fSlow444) + -1); + double fSlow446 = (fSlow393 - fSlow374); + double fSlow447 = faustpower<2>(fSlow446); + double fSlow448 = ((3 * fSlow447) + -1); + double fSlow449 = ((fSlow444 * ((35 * fSlow444) + -30)) + 3); + double fSlow450 = ((fSlow447 * ((35 * fSlow447) + -30)) + 3); + double fSlow451 = (3.5 * (fSlow85 * ((5 * fSlow444) + -3))); + double fSlow452 = (1.375 * (fSlow99 * ((fSlow444 * ((63 * fSlow444) + -70)) + 15))); + double fSlow453 = (3.5 * (fSlow85 * ((5 * fSlow447) + -3))); + double fSlow454 = (1.375 * (fSlow99 * ((fSlow447 * ((63 * fSlow447) + -70)) + 15))); + double fSlow455 = (fSlow403 - fSlow380); + double fSlow456 = faustpower<2>(fSlow455); + double fSlow457 = ((3 * fSlow456) + -1); + double fSlow458 = (fSlow407 - fSlow374); + double fSlow459 = faustpower<2>(fSlow458); + double fSlow460 = ((3 * fSlow459) + -1); + double fSlow461 = ((fSlow456 * ((35 * fSlow456) + -30)) + 3); + double fSlow462 = ((fSlow459 * ((35 * fSlow459) + -30)) + 3); + double fSlow463 = (1.375 * (fSlow99 * ((fSlow456 * ((63 * fSlow456) + -70)) + 15))); + double fSlow464 = (3.5 * (fSlow85 * ((5 * fSlow456) + -3))); + double fSlow465 = (3.5 * (fSlow85 * ((5 * fSlow459) + -3))); + double fSlow466 = (1.375 * (fSlow99 * ((fSlow459 * ((63 * fSlow459) + -70)) + 15))); + double fSlow467 = (fSlow421 - fSlow380); + double fSlow468 = faustpower<2>(fSlow467); + double fSlow469 = ((3 * fSlow468) + -1); + double fSlow470 = (fSlow417 - fSlow374); + double fSlow471 = faustpower<2>(fSlow470); + double fSlow472 = ((3 * fSlow471) + -1); + double fSlow473 = ((fSlow468 * ((35 * fSlow468) + -30)) + 3); + double fSlow474 = ((fSlow471 * ((35 * fSlow471) + -30)) + 3); + double fSlow475 = (1.375 * (fSlow99 * ((fSlow468 * ((63 * fSlow468) + -70)) + 15))); + double fSlow476 = (3.5 * (fSlow85 * ((5 * fSlow468) + -3))); + double fSlow477 = (3.5 * (fSlow85 * ((5 * fSlow471) + -3))); + double fSlow478 = (1.375 * (fSlow99 * ((fSlow471 * ((63 * fSlow471) + -70)) + 15))); + double fSlow479 = (0.4264014327112203 * (fSlow3 * cos((fSlow4 + -0.7853981633974484)))); + double fSlow480 = (0.9045340337332911 * fSlow2); + double fSlow481 = (fSlow479 + fSlow480); + double fSlow482 = faustpower<2>(fSlow481); + double fSlow483 = ((fSlow482 * ((35 * fSlow482) + -30)) + 3); + double fSlow484 = (0.4264014327112203 * (fSlow37 * cos((fSlow38 + -0.7853981633974484)))); + double fSlow485 = (0.9045340337332911 * fSlow36); + double fSlow486 = (fSlow484 + fSlow485); + double fSlow487 = faustpower<2>(fSlow486); + double fSlow488 = ((fSlow487 * ((35 * fSlow487) + -30)) + 3); + double fSlow489 = (3.5 * (fSlow85 * ((5 * fSlow482) + -3))); + double fSlow490 = (1.375 * (fSlow99 * ((fSlow482 * ((63 * fSlow482) + -70)) + 15))); + double fSlow491 = (3.5 * (fSlow85 * ((5 * fSlow487) + -3))); + double fSlow492 = (1.375 * (fSlow99 * ((fSlow487 * ((63 * fSlow487) + -70)) + 15))); + double fSlow493 = ((3 * fSlow482) + -1); + double fSlow494 = ((3 * fSlow487) + -1); + double fSlow495 = (0.4264014327112203 * fSlow283); + double fSlow496 = (fSlow480 + fSlow495); + double fSlow497 = faustpower<2>(fSlow496); + double fSlow498 = (3.5 * (fSlow85 * ((5 * fSlow497) + -3))); + double fSlow499 = (1.375 * (fSlow99 * ((fSlow497 * ((63 * fSlow497) + -70)) + 15))); + double fSlow500 = (0.4264014327112203 * fSlow286); + double fSlow501 = (fSlow485 + fSlow500); + double fSlow502 = faustpower<2>(fSlow501); + double fSlow503 = (1.375 * (fSlow99 * ((fSlow502 * ((63 * fSlow502) + -70)) + 15))); + double fSlow504 = (3.5 * (fSlow85 * ((5 * fSlow502) + -3))); + double fSlow505 = ((fSlow497 * ((35 * fSlow497) + -30)) + 3); + double fSlow506 = ((((35 * fSlow502) + -30) * fSlow502) + 3); + double fSlow507 = ((3 * fSlow497) + -1); + double fSlow508 = ((3 * fSlow502) + -1); + double fSlow509 = (0.4264014327112203 * fSlow300); + double fSlow510 = (fSlow485 + fSlow509); + double fSlow511 = faustpower<2>(fSlow510); + double fSlow512 = ((3 * fSlow511) + -1); + double fSlow513 = (0.4264014327112203 * fSlow297); + double fSlow514 = (fSlow480 + fSlow513); + double fSlow515 = faustpower<2>(fSlow514); + double fSlow516 = ((3 * fSlow515) + -1); + double fSlow517 = (3.5 * (fSlow85 * ((5 * fSlow515) + -3))); + double fSlow518 = (1.375 * (fSlow99 * ((((63 * fSlow515) + -70) * fSlow515) + 15))); + double fSlow519 = (3.5 * (fSlow85 * ((5 * fSlow511) + -3))); + double fSlow520 = (1.375 * (fSlow99 * ((((63 * fSlow511) + -70) * fSlow511) + 15))); + double fSlow521 = ((fSlow511 * ((35 * fSlow511) + -30)) + 3); + double fSlow522 = ((fSlow515 * ((35 * fSlow515) + -30)) + 3); + double fSlow523 = (0.4264014327112203 * fSlow311); + double fSlow524 = (fSlow480 + fSlow523); + double fSlow525 = faustpower<2>(fSlow524); + double fSlow526 = ((3 * fSlow525) + -1); + double fSlow527 = (0.4264014327112203 * fSlow314); + double fSlow528 = (fSlow485 + fSlow527); + double fSlow529 = faustpower<2>(fSlow528); + double fSlow530 = ((3 * fSlow529) + -1); + double fSlow531 = ((fSlow525 * ((35 * fSlow525) + -30)) + 3); + double fSlow532 = ((fSlow529 * ((35 * fSlow529) + -30)) + 3); + double fSlow533 = (3.5 * (fSlow85 * ((5 * fSlow525) + -3))); + double fSlow534 = (1.375 * (fSlow99 * ((((63 * fSlow525) + -70) * fSlow525) + 15))); + double fSlow535 = (3.5 * (fSlow85 * ((5 * fSlow529) + -3))); + double fSlow536 = (1.375 * (fSlow99 * ((((63 * fSlow529) + -70) * fSlow529) + 15))); + double fSlow537 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -0.32175055439664263)))); + double fSlow538 = (0.3015113445777635 * fSlow2); + double fSlow539 = (fSlow537 + fSlow538); + double fSlow540 = faustpower<2>(fSlow539); + double fSlow541 = ((fSlow540 * ((35 * fSlow540) + -30)) + 3); + double fSlow542 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -0.32175055439664263)))); + double fSlow543 = (0.3015113445777635 * fSlow36); + double fSlow544 = (fSlow542 + fSlow543); + double fSlow545 = faustpower<2>(fSlow544); + double fSlow546 = ((fSlow545 * ((35 * fSlow545) + -30)) + 3); + double fSlow547 = (3.5 * (fSlow85 * ((5 * fSlow540) + -3))); + double fSlow548 = (1.375 * (fSlow99 * ((((63 * fSlow540) + -70) * fSlow540) + 15))); + double fSlow549 = (3.5 * (fSlow85 * ((5 * fSlow545) + -3))); + double fSlow550 = (1.375 * (fSlow99 * ((((63 * fSlow545) + -70) * fSlow545) + 15))); + double fSlow551 = ((3 * fSlow540) + -1); + double fSlow552 = ((3 * fSlow545) + -1); + double fSlow553 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.2490457723982544)))); + double fSlow554 = (fSlow538 + fSlow553); + double fSlow555 = faustpower<2>(fSlow554); + double fSlow556 = ((3 * fSlow555) + -1); + double fSlow557 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -1.2490457723982544)))); + double fSlow558 = (fSlow543 + fSlow557); + double fSlow559 = faustpower<2>(fSlow558); + double fSlow560 = ((3 * fSlow559) + -1); + double fSlow561 = ((fSlow555 * ((35 * fSlow555) + -30)) + 3); + double fSlow562 = ((fSlow559 * ((35 * fSlow559) + -30)) + 3); + double fSlow563 = (3.5 * (fSlow85 * ((5 * fSlow555) + -3))); + double fSlow564 = (1.375 * (fSlow99 * ((((63 * fSlow555) + -70) * fSlow555) + 15))); + double fSlow565 = (3.5 * (fSlow85 * ((5 * fSlow559) + -3))); + double fSlow566 = (1.375 * (fSlow99 * ((((63 * fSlow559) + -70) * fSlow559) + 15))); + double fSlow567 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.8925468811915387)))); + double fSlow568 = (fSlow538 + fSlow567); + double fSlow569 = faustpower<2>(fSlow568); + double fSlow570 = ((3 * fSlow569) + -1); + double fSlow571 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -1.8925468811915387)))); + double fSlow572 = (fSlow543 + fSlow571); + double fSlow573 = faustpower<2>(fSlow572); + double fSlow574 = ((3 * fSlow573) + -1); + double fSlow575 = ((fSlow569 * ((35 * fSlow569) + -30)) + 3); + double fSlow576 = ((fSlow573 * ((35 * fSlow573) + -30)) + 3); + double fSlow577 = (3.5 * (fSlow85 * ((5 * fSlow569) + -3))); + double fSlow578 = (1.375 * (fSlow99 * ((((63 * fSlow569) + -70) * fSlow569) + 15))); + double fSlow579 = (3.5 * (fSlow85 * ((5 * fSlow573) + -3))); + double fSlow580 = (1.375 * (fSlow99 * ((((63 * fSlow573) + -70) * fSlow573) + 15))); + double fSlow581 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -2.8198420991931505)))); + double fSlow582 = (fSlow538 + fSlow581); + double fSlow583 = faustpower<2>(fSlow582); + double fSlow584 = ((3 * fSlow583) + -1); + double fSlow585 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -2.8198420991931505)))); + double fSlow586 = (fSlow543 + fSlow585); + double fSlow587 = faustpower<2>(fSlow586); + double fSlow588 = ((3 * fSlow587) + -1); + double fSlow589 = ((fSlow583 * ((35 * fSlow583) + -30)) + 3); + double fSlow590 = ((fSlow587 * ((35 * fSlow587) + -30)) + 3); + double fSlow591 = (3.5 * (fSlow85 * ((5 * fSlow583) + -3))); + double fSlow592 = (1.375 * (fSlow99 * ((((63 * fSlow583) + -70) * fSlow583) + 15))); + double fSlow593 = (3.5 * (fSlow85 * ((5 * fSlow587) + -3))); + double fSlow594 = (1.375 * (fSlow99 * ((((63 * fSlow587) + -70) * fSlow587) + 15))); + double fSlow595 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -3.4633432079864357)))); + double fSlow596 = (fSlow538 + fSlow595); + double fSlow597 = faustpower<2>(fSlow596); + double fSlow598 = ((3 * fSlow597) + -1); + double fSlow599 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -3.4633432079864357)))); + double fSlow600 = (fSlow543 + fSlow599); + double fSlow601 = faustpower<2>(fSlow600); + double fSlow602 = ((3 * fSlow601) + -1); + double fSlow603 = ((fSlow597 * ((35 * fSlow597) + -30)) + 3); + double fSlow604 = ((fSlow601 * ((35 * fSlow601) + -30)) + 3); + double fSlow605 = (3.5 * (fSlow85 * ((5 * fSlow597) + -3))); + double fSlow606 = (1.375 * (fSlow99 * ((((63 * fSlow597) + -70) * fSlow597) + 15))); + double fSlow607 = (3.5 * (fSlow85 * ((5 * fSlow601) + -3))); + double fSlow608 = (1.375 * (fSlow99 * ((((63 * fSlow601) + -70) * fSlow601) + 15))); + double fSlow609 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -4.3906384259880475)))); + double fSlow610 = (fSlow538 + fSlow609); + double fSlow611 = faustpower<2>(fSlow610); + double fSlow612 = ((3 * fSlow611) + -1); + double fSlow613 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -4.3906384259880475)))); + double fSlow614 = (fSlow543 + fSlow613); + double fSlow615 = faustpower<2>(fSlow614); + double fSlow616 = ((3 * fSlow615) + -1); + double fSlow617 = ((fSlow611 * ((35 * fSlow611) + -30)) + 3); + double fSlow618 = ((fSlow615 * ((35 * fSlow615) + -30)) + 3); + double fSlow619 = (3.5 * (fSlow85 * ((5 * fSlow611) + -3))); + double fSlow620 = (1.375 * (fSlow99 * ((((63 * fSlow611) + -70) * fSlow611) + 15))); + double fSlow621 = (3.5 * (fSlow85 * ((5 * fSlow615) + -3))); + double fSlow622 = (1.375 * (fSlow99 * ((((63 * fSlow615) + -70) * fSlow615) + 15))); + double fSlow623 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.034139534781332)))); + double fSlow624 = (fSlow538 + fSlow623); + double fSlow625 = faustpower<2>(fSlow624); + double fSlow626 = ((3 * fSlow625) + -1); + double fSlow627 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -5.034139534781332)))); + double fSlow628 = (fSlow543 + fSlow627); + double fSlow629 = faustpower<2>(fSlow628); + double fSlow630 = ((3 * fSlow629) + -1); + double fSlow631 = ((fSlow625 * ((35 * fSlow625) + -30)) + 3); + double fSlow632 = ((fSlow629 * ((35 * fSlow629) + -30)) + 3); + double fSlow633 = (3.5 * (fSlow85 * ((5 * fSlow625) + -3))); + double fSlow634 = (1.375 * (fSlow99 * ((((63 * fSlow625) + -70) * fSlow625) + 15))); + double fSlow635 = (3.5 * (fSlow85 * ((5 * fSlow629) + -3))); + double fSlow636 = (1.375 * (fSlow99 * ((((63 * fSlow629) + -70) * fSlow629) + 15))); + double fSlow637 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.961434752782943)))); + double fSlow638 = (fSlow538 + fSlow637); + double fSlow639 = faustpower<2>(fSlow638); + double fSlow640 = ((3 * fSlow639) + -1); + double fSlow641 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -5.961434752782943)))); + double fSlow642 = (fSlow543 + fSlow641); + double fSlow643 = faustpower<2>(fSlow642); + double fSlow644 = ((3 * fSlow643) + -1); + double fSlow645 = ((fSlow639 * ((35 * fSlow639) + -30)) + 3); + double fSlow646 = ((fSlow643 * ((35 * fSlow643) + -30)) + 3); + double fSlow647 = (3.5 * (fSlow85 * ((5 * fSlow639) + -3))); + double fSlow648 = (1.375 * (fSlow99 * ((((63 * fSlow639) + -70) * fSlow639) + 15))); + double fSlow649 = (3.5 * (fSlow85 * ((5 * fSlow643) + -3))); + double fSlow650 = (1.375 * (fSlow99 * ((((63 * fSlow643) + -70) * fSlow643) + 15))); + double fSlow651 = (fSlow537 - fSlow538); + double fSlow652 = faustpower<2>(fSlow651); + double fSlow653 = ((3 * fSlow652) + -1); + double fSlow654 = (fSlow542 - fSlow543); + double fSlow655 = faustpower<2>(fSlow654); + double fSlow656 = ((3 * fSlow655) + -1); + double fSlow657 = ((fSlow652 * ((35 * fSlow652) + -30)) + 3); + double fSlow658 = ((fSlow655 * ((35 * fSlow655) + -30)) + 3); + double fSlow659 = (1.375 * (fSlow99 * ((((63 * fSlow652) + -70) * fSlow652) + 15))); + double fSlow660 = (3.5 * (fSlow85 * ((5 * fSlow652) + -3))); + double fSlow661 = (3.5 * (fSlow85 * ((5 * fSlow655) + -3))); + double fSlow662 = (1.375 * (fSlow99 * ((((63 * fSlow655) + -70) * fSlow655) + 15))); + double fSlow663 = (fSlow553 - fSlow538); + double fSlow664 = faustpower<2>(fSlow663); + double fSlow665 = ((3 * fSlow664) + -1); + double fSlow666 = (fSlow557 - fSlow543); + double fSlow667 = faustpower<2>(fSlow666); + double fSlow668 = ((3 * fSlow667) + -1); + double fSlow669 = ((fSlow664 * ((35 * fSlow664) + -30)) + 3); + double fSlow670 = ((fSlow667 * ((35 * fSlow667) + -30)) + 3); + double fSlow671 = (1.375 * (fSlow99 * ((((63 * fSlow664) + -70) * fSlow664) + 15))); + double fSlow672 = (3.5 * (fSlow85 * ((5 * fSlow664) + -3))); + double fSlow673 = (3.5 * (fSlow85 * ((5 * fSlow667) + -3))); + double fSlow674 = (1.375 * (fSlow99 * ((((63 * fSlow667) + -70) * fSlow667) + 15))); + double fSlow675 = (fSlow567 - fSlow538); + double fSlow676 = faustpower<2>(fSlow675); + double fSlow677 = ((3 * fSlow676) + -1); + double fSlow678 = (fSlow571 - fSlow543); + double fSlow679 = faustpower<2>(fSlow678); + double fSlow680 = ((3 * fSlow679) + -1); + double fSlow681 = ((fSlow676 * ((35 * fSlow676) + -30)) + 3); + double fSlow682 = ((fSlow679 * ((35 * fSlow679) + -30)) + 3); + double fSlow683 = (1.375 * (fSlow99 * ((((63 * fSlow676) + -70) * fSlow676) + 15))); + double fSlow684 = (3.5 * (fSlow85 * ((5 * fSlow676) + -3))); + double fSlow685 = (3.5 * (fSlow85 * ((5 * fSlow679) + -3))); + double fSlow686 = (1.375 * (fSlow99 * ((((63 * fSlow679) + -70) * fSlow679) + 15))); + double fSlow687 = (fSlow581 - fSlow538); + double fSlow688 = faustpower<2>(fSlow687); + double fSlow689 = ((3 * fSlow688) + -1); + double fSlow690 = (fSlow585 - fSlow543); + double fSlow691 = faustpower<2>(fSlow690); + double fSlow692 = ((3 * fSlow691) + -1); + double fSlow693 = ((fSlow688 * ((35 * fSlow688) + -30)) + 3); + double fSlow694 = ((fSlow691 * ((35 * fSlow691) + -30)) + 3); + double fSlow695 = (1.375 * (fSlow99 * ((((63 * fSlow688) + -70) * fSlow688) + 15))); + double fSlow696 = (3.5 * (fSlow85 * ((5 * fSlow688) + -3))); + double fSlow697 = (3.5 * (fSlow85 * ((5 * fSlow691) + -3))); + double fSlow698 = (1.375 * (fSlow99 * ((((63 * fSlow691) + -70) * fSlow691) + 15))); + double fSlow699 = (fSlow595 - fSlow538); + double fSlow700 = faustpower<2>(fSlow699); + double fSlow701 = ((3 * fSlow700) + -1); + double fSlow702 = (fSlow599 - fSlow543); + double fSlow703 = faustpower<2>(fSlow702); + double fSlow704 = ((3 * fSlow703) + -1); + double fSlow705 = ((fSlow700 * ((35 * fSlow700) + -30)) + 3); + double fSlow706 = ((fSlow703 * ((35 * fSlow703) + -30)) + 3); + double fSlow707 = (1.375 * (fSlow99 * ((((63 * fSlow700) + -70) * fSlow700) + 15))); + double fSlow708 = (3.5 * (fSlow85 * ((5 * fSlow700) + -3))); + double fSlow709 = (3.5 * (fSlow85 * ((5 * fSlow703) + -3))); + double fSlow710 = (1.375 * (fSlow99 * ((((63 * fSlow703) + -70) * fSlow703) + 15))); + double fSlow711 = (fSlow613 - fSlow543); + double fSlow712 = faustpower<2>(fSlow711); + double fSlow713 = (3.5 * (fSlow85 * ((5 * fSlow712) + -3))); + double fSlow714 = (1.375 * (fSlow99 * ((fSlow712 * ((63 * fSlow712) + -70)) + 15))); + double fSlow715 = (fSlow609 - fSlow538); + double fSlow716 = faustpower<2>(fSlow715); + double fSlow717 = (3.5 * (fSlow85 * ((5 * fSlow716) + -3))); + double fSlow718 = (1.375 * (fSlow99 * ((fSlow716 * ((63 * fSlow716) + -70)) + 15))); + double fSlow719 = ((3 * fSlow712) + -1); + double fSlow720 = ((3 * fSlow716) + -1); + double fSlow721 = ((fSlow716 * ((35 * fSlow716) + -30)) + 3); + double fSlow722 = ((fSlow712 * ((35 * fSlow712) + -30)) + 3); + double fSlow723 = (fSlow627 - fSlow543); + double fSlow724 = faustpower<2>(fSlow723); + double fSlow725 = (3.5 * (fSlow85 * ((5 * fSlow724) + -3))); + double fSlow726 = (1.375 * (fSlow99 * ((fSlow724 * ((63 * fSlow724) + -70)) + 15))); + double fSlow727 = (fSlow623 - fSlow538); + double fSlow728 = faustpower<2>(fSlow727); + double fSlow729 = (1.375 * (fSlow99 * ((fSlow728 * ((63 * fSlow728) + -70)) + 15))); + double fSlow730 = (3.5 * (fSlow85 * ((5 * fSlow728) + -3))); + double fSlow731 = ((3 * fSlow724) + -1); + double fSlow732 = ((3 * fSlow728) + -1); + double fSlow733 = ((fSlow724 * ((35 * fSlow724) + -30)) + 3); + double fSlow734 = ((fSlow728 * ((35 * fSlow728) + -30)) + 3); + double fSlow735 = (fSlow641 - fSlow543); + double fSlow736 = faustpower<2>(fSlow735); + double fSlow737 = ((3 * fSlow736) + -1); + double fSlow738 = (fSlow637 - fSlow538); + double fSlow739 = faustpower<2>(fSlow738); + double fSlow740 = ((3 * fSlow739) + -1); + double fSlow741 = (3.5 * (fSlow85 * ((5 * fSlow736) + -3))); + double fSlow742 = (1.375 * (fSlow99 * ((fSlow736 * ((63 * fSlow736) + -70)) + 15))); + double fSlow743 = (3.5 * (fSlow85 * ((5 * fSlow739) + -3))); + double fSlow744 = (1.375 * (fSlow99 * ((fSlow739 * ((63 * fSlow739) + -70)) + 15))); + double fSlow745 = ((fSlow739 * ((35 * fSlow739) + -30)) + 3); + double fSlow746 = ((fSlow736 * ((35 * fSlow736) + -30)) + 3); + double fSlow747 = (fSlow484 - fSlow485); + double fSlow748 = faustpower<2>(fSlow747); + double fSlow749 = ((3 * fSlow748) + -1); + double fSlow750 = (fSlow479 - fSlow480); + double fSlow751 = faustpower<2>(fSlow750); + double fSlow752 = ((3 * fSlow751) + -1); + double fSlow753 = (3.5 * (fSlow85 * ((5 * fSlow748) + -3))); + double fSlow754 = (1.375 * (fSlow99 * ((fSlow748 * ((63 * fSlow748) + -70)) + 15))); + double fSlow755 = (3.5 * (fSlow85 * ((5 * fSlow751) + -3))); + double fSlow756 = (1.375 * (fSlow99 * ((fSlow751 * ((63 * fSlow751) + -70)) + 15))); + double fSlow757 = ((fSlow748 * ((35 * fSlow748) + -30)) + 3); + double fSlow758 = ((fSlow751 * ((35 * fSlow751) + -30)) + 3); + double fSlow759 = (fSlow500 - fSlow485); + double fSlow760 = faustpower<2>(fSlow759); + double fSlow761 = (3.5 * (fSlow85 * ((5 * fSlow760) + -3))); + double fSlow762 = (1.375 * (fSlow99 * ((fSlow760 * ((63 * fSlow760) + -70)) + 15))); + double fSlow763 = (fSlow495 - fSlow480); + double fSlow764 = faustpower<2>(fSlow763); + double fSlow765 = (1.375 * (fSlow99 * ((fSlow764 * ((63 * fSlow764) + -70)) + 15))); + double fSlow766 = (3.5 * (fSlow85 * ((5 * fSlow764) + -3))); + double fSlow767 = ((3 * fSlow760) + -1); + double fSlow768 = ((3 * fSlow764) + -1); + double fSlow769 = ((fSlow760 * ((35 * fSlow760) + -30)) + 3); + double fSlow770 = ((fSlow764 * ((35 * fSlow764) + -30)) + 3); + double fSlow771 = (fSlow509 - fSlow485); + double fSlow772 = faustpower<2>(fSlow771); + double fSlow773 = ((3 * fSlow772) + -1); + double fSlow774 = (fSlow513 - fSlow480); + double fSlow775 = faustpower<2>(fSlow774); + double fSlow776 = ((3 * fSlow775) + -1); + double fSlow777 = (3.5 * (fSlow85 * ((5 * fSlow772) + -3))); + double fSlow778 = (1.375 * (fSlow99 * ((fSlow772 * ((63 * fSlow772) + -70)) + 15))); + double fSlow779 = (3.5 * (fSlow85 * ((5 * fSlow775) + -3))); + double fSlow780 = (1.375 * (fSlow99 * ((fSlow775 * ((63 * fSlow775) + -70)) + 15))); + double fSlow781 = ((fSlow775 * ((35 * fSlow775) + -30)) + 3); + double fSlow782 = ((fSlow772 * ((35 * fSlow772) + -30)) + 3); + double fSlow783 = (fSlow527 - fSlow485); + double fSlow784 = faustpower<2>(fSlow783); + double fSlow785 = ((3 * fSlow784) + -1); + double fSlow786 = (fSlow523 - fSlow480); + double fSlow787 = faustpower<2>(fSlow786); + double fSlow788 = ((3 * fSlow787) + -1); + double fSlow789 = (3.5 * (fSlow85 * ((5 * fSlow784) + -3))); + double fSlow790 = (1.375 * (fSlow99 * ((fSlow784 * ((63 * fSlow784) + -70)) + 15))); + double fSlow791 = (3.5 * (fSlow85 * ((5 * fSlow787) + -3))); + double fSlow792 = (1.375 * (fSlow99 * ((fSlow787 * ((63 * fSlow787) + -70)) + 15))); + double fSlow793 = ((fSlow784 * ((35 * fSlow784) + -30)) + 3); + double fSlow794 = ((fSlow787 * ((35 * fSlow787) + -30)) + 3); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + FAUSTFLOAT* output36 = output[36]; + FAUSTFLOAT* output37 = output[37]; + FAUSTFLOAT* output38 = output[38]; + FAUSTFLOAT* output39 = output[39]; + FAUSTFLOAT* output40 = output[40]; + FAUSTFLOAT* output41 = output[41]; + FAUSTFLOAT* output42 = output[42]; + FAUSTFLOAT* output43 = output[43]; + FAUSTFLOAT* output44 = output[44]; + FAUSTFLOAT* output45 = output[45]; + FAUSTFLOAT* output46 = output[46]; + FAUSTFLOAT* output47 = output[47]; + FAUSTFLOAT* output48 = output[48]; + FAUSTFLOAT* output49 = output[49]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOARotatorAz1.cpp b/source/HOAUGens/HOARotatorAz1.cpp new file mode 100644 index 0000000000..646a6dfe37 --- /dev/null +++ b/source/HOAUGens/HOARotatorAz1.cpp @@ -0,0 +1,1037 @@ +//---------------------------------------------------------- +// name: "HOARotatorAz1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOARotatorAz1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 4; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOARotatorAz2.cpp b/source/HOAUGens/HOARotatorAz2.cpp new file mode 100644 index 0000000000..9d55cc7f1c --- /dev/null +++ b/source/HOAUGens/HOARotatorAz2.cpp @@ -0,0 +1,1062 @@ +//---------------------------------------------------------- +// name: "HOARotatorAz2" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOARotatorAz2"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 9; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOARotatorAz3.cpp b/source/HOAUGens/HOARotatorAz3.cpp new file mode 100644 index 0000000000..9aac91778b --- /dev/null +++ b/source/HOAUGens/HOARotatorAz3.cpp @@ -0,0 +1,1095 @@ +//---------------------------------------------------------- +// name: "HOARotatorAz3" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOARotatorAz3"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 16; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOARotatorAz4.cpp b/source/HOAUGens/HOARotatorAz4.cpp new file mode 100644 index 0000000000..e4ac5ed009 --- /dev/null +++ b/source/HOAUGens/HOARotatorAz4.cpp @@ -0,0 +1,1136 @@ +//---------------------------------------------------------- +// name: "HOARotatorAz4" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOARotatorAz4"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 25; } + virtual int getNumOutputs() { return 25; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOARotatorAz5.cpp b/source/HOAUGens/HOARotatorAz5.cpp new file mode 100644 index 0000000000..39a6f9b7f1 --- /dev/null +++ b/source/HOAUGens/HOARotatorAz5.cpp @@ -0,0 +1,1185 @@ +//---------------------------------------------------------- +// name: "HOARotatorAz5" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.95 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + ************************************************************************ + ************************************************************************/ + +/****************************************************************************** +******************************************************************************* + + FAUST DSP + +******************************************************************************* +*******************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation : alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust User Interface + * This abstract class contains only the method that the faust compiler can + * generate to describe a DSP interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +//---------------------------------------------------------------- +// Generic decorator +//---------------------------------------------------------------- + +class DecoratorUI : public UI +{ + protected: + + UI* fUI; + + public: + + DecoratorUI(UI* ui = 0):fUI(ui) + {} + + virtual ~DecoratorUI() { delete fUI; } + + // -- widget's layouts + virtual void openTabBox(const char* label) { fUI->openTabBox(label); } + virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } + virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } + virtual void closeBox() { fUI->closeBox(); } + + // -- active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addVerticalSlider(label, zone, init, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addHorizontalSlider(label, zone, init, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { fUI->addNumEntry(label, zone, init, min, max, step); } + + // -- passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addHorizontalBargraph(label, zone, min, max); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { fUI->addVerticalBargraph(label, zone, min, max); } + + virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } + +}; + +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + ************************************************************************ + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 +# define FAUST_EXPORT __attribute__((visibility("default"))) +#else +# define FAUST_EXPORT SC_API_EXPORT +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOARotatorAz5"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basic.lib/name", "Faust Basic Element Library"); + m->declare("basic.lib/version", "0.0"); + m->declare("math.lib/name", "Faust Math Library"); + m->declare("math.lib/version", "2.0"); + m->declare("math.lib/author", "GRAME"); + m->declare("math.lib/copyright", "GRAME"); + m->declare("math.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 36; } + virtual int getNumOutputs() { return 36; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("0x00"); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + double fSlow24 = (5 * fSlow0); + double fSlow25 = cos(fSlow24); + double fSlow26 = sin(fSlow24); + double fSlow27 = (0 - fSlow24); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = strdup(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable *ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + int api_version(void); +#endif + void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + int numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i=0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i=0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp tmp_dsp; + tmp_dsp.metadata(&meta); + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc new file mode 100644 index 0000000000..069addb07e --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc @@ -0,0 +1,30 @@ +HOABeamDirac2Hoa1 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, on, crossfade, gain, azimuth, elevation) + } + + *kr { | in1, in2, in3, in4, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, on, crossfade, gain, azimuth, elevation) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"HOABeamDirac2Hoa1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc new file mode 100644 index 0000000000..e03b62e2aa --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc @@ -0,0 +1,30 @@ +HOABeamDirac2Hoa2 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, on, crossfade, gain, azimuth, elevation) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, on, crossfade, gain, azimuth, elevation) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"HOABeamDirac2Hoa2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc new file mode 100644 index 0000000000..e34e960187 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc @@ -0,0 +1,30 @@ +HOABeamDirac2Hoa3 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on, crossfade, gain, azimuth, elevation) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on, crossfade, gain, azimuth, elevation) + } + + checkInputs { + if (rate == 'audio', { + 16.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"HOABeamDirac2Hoa3" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc new file mode 100644 index 0000000000..3770964aa9 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc @@ -0,0 +1,30 @@ +HOABeamDirac2Hoa4 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on, crossfade, gain, azimuth, elevation) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on, crossfade, gain, azimuth, elevation) + } + + checkInputs { + if (rate == 'audio', { + 25.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"HOABeamDirac2Hoa4" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc new file mode 100644 index 0000000000..e20858ffd6 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc @@ -0,0 +1,30 @@ +HOABeamDirac2Hoa5 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on, crossfade, gain, azimuth, elevation) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on, crossfade, gain, azimuth, elevation) + } + + checkInputs { + if (rate == 'audio', { + 36.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(36, rate) + } + + name { ^"HOABeamDirac2Hoa5" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa1.sc b/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa1.sc new file mode 100644 index 0000000000..5782417b5d --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa1.sc @@ -0,0 +1,30 @@ +HOABeamHCardioid2Hoa1 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, azimuth(0.0), elevation(0.0), order(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, azimuth, elevation, order) + } + + *kr { | in1, in2, in3, in4, azimuth(0.0), elevation(0.0), order(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, azimuth, elevation, order) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"HOABeamHCardioid2Hoa1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa2.sc b/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa2.sc new file mode 100644 index 0000000000..71d26fc58d --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa2.sc @@ -0,0 +1,30 @@ +HOABeamHCardioid2Hoa2 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0), elevation(0.0), order(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth, elevation, order) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0), elevation(0.0), order(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth, elevation, order) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"HOABeamHCardioid2Hoa2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa3.sc b/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa3.sc new file mode 100644 index 0000000000..2b5fceb802 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa3.sc @@ -0,0 +1,30 @@ +HOABeamHCardioid2Hoa3 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0), elevation(0.0), order(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth, elevation, order) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0), elevation(0.0), order(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth, elevation, order) + } + + checkInputs { + if (rate == 'audio', { + 16.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(36, rate) + } + + name { ^"HOABeamHCardioid2Hoa3" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAConverter1.sc b/source/HOAUGens/sc/Classes/HOAConverter1.sc new file mode 100644 index 0000000000..f7f35a1deb --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAConverter1.sc @@ -0,0 +1,30 @@ +HOAConverter1 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, input(1.0), output(1.0) | + ^this.multiNew('audio', in1, in2, in3, in4, input, output) + } + + *kr { | in1, in2, in3, in4, input(1.0), output(1.0) | + ^this.multiNew('control', in1, in2, in3, in4, input, output) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"HOAConverter1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAConverter2.sc b/source/HOAUGens/sc/Classes/HOAConverter2.sc new file mode 100644 index 0000000000..4195b45a34 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAConverter2.sc @@ -0,0 +1,30 @@ +HOAConverter2 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, input(1.0), output(1.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, input, output) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, input(1.0), output(1.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, input, output) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"HOAConverter2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAConverter3.sc b/source/HOAUGens/sc/Classes/HOAConverter3.sc new file mode 100644 index 0000000000..19975540b1 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAConverter3.sc @@ -0,0 +1,30 @@ +HOAConverter3 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, input(1.0), output(1.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, input, output) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, input(1.0), output(1.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, input, output) + } + + checkInputs { + if (rate == 'audio', { + 16.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"HOAConverter3" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAConverter4.sc b/source/HOAUGens/sc/Classes/HOAConverter4.sc new file mode 100644 index 0000000000..642dd988b2 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAConverter4.sc @@ -0,0 +1,30 @@ +HOAConverter4 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, input(1.0), output(1.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, input, output) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, input(1.0), output(1.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, input, output) + } + + checkInputs { + if (rate == 'audio', { + 25.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"HOAConverter4" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAConverter5.sc b/source/HOAUGens/sc/Classes/HOAConverter5.sc new file mode 100644 index 0000000000..b0fc51586b --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAConverter5.sc @@ -0,0 +1,30 @@ +HOAConverter5 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, input(1.0), output(1.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, input, output) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, input(1.0), output(1.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, input, output) + } + + checkInputs { + if (rate == 'audio', { + 36.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(36, rate) + } + + name { ^"HOAConverter5" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev061.sc b/source/HOAUGens/sc/Classes/HOADecLebedev061.sc new file mode 100644 index 0000000000..28216f376c --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev061.sc @@ -0,0 +1,30 @@ +HOADecLebedev061 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(6, rate) + } + + name { ^"HOADecLebedev061" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev261.sc b/source/HOAUGens/sc/Classes/HOADecLebedev261.sc new file mode 100644 index 0000000000..5f85e5d270 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev261.sc @@ -0,0 +1,30 @@ +HOADecLebedev261 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(26, rate) + } + + name { ^"HOADecLebedev261" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev262.sc b/source/HOAUGens/sc/Classes/HOADecLebedev262.sc new file mode 100644 index 0000000000..f454267173 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev262.sc @@ -0,0 +1,30 @@ +HOADecLebedev262 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(26, rate) + } + + name { ^"HOADecLebedev262" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev263.sc b/source/HOAUGens/sc/Classes/HOADecLebedev263.sc new file mode 100644 index 0000000000..98a64cd17b --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev263.sc @@ -0,0 +1,30 @@ +HOADecLebedev263 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 16.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(26, rate) + } + + name { ^"HOADecLebedev263" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev501.sc b/source/HOAUGens/sc/Classes/HOADecLebedev501.sc new file mode 100644 index 0000000000..1bcaae8021 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev501.sc @@ -0,0 +1,30 @@ +HOADecLebedev501 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOADecLebedev501" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev502.sc b/source/HOAUGens/sc/Classes/HOADecLebedev502.sc new file mode 100644 index 0000000000..40886504de --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev502.sc @@ -0,0 +1,30 @@ +HOADecLebedev502 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOADecLebedev502" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev503.sc b/source/HOAUGens/sc/Classes/HOADecLebedev503.sc new file mode 100644 index 0000000000..0d2dd2ea9e --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev503.sc @@ -0,0 +1,30 @@ +HOADecLebedev503 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 16.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOADecLebedev503" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev504.sc b/source/HOAUGens/sc/Classes/HOADecLebedev504.sc new file mode 100644 index 0000000000..737b08da7f --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev504.sc @@ -0,0 +1,30 @@ +HOADecLebedev504 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 25.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOADecLebedev504" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev505.sc b/source/HOAUGens/sc/Classes/HOADecLebedev505.sc new file mode 100644 index 0000000000..4d5e2103df --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecLebedev505.sc @@ -0,0 +1,30 @@ +HOADecLebedev505 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, inputs_gain, outputs_gain, yes, speakers_radius) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, inputs_gain, outputs_gain, yes, speakers_radius) + } + + checkInputs { + if (rate == 'audio', { + 36.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOADecLebedev505" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAEncoder1.sc b/source/HOAUGens/sc/Classes/HOAEncoder1.sc new file mode 100644 index 0000000000..4373d67d9d --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncoder1.sc @@ -0,0 +1,30 @@ +HOAEncoder1 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"HOAEncoder1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAEncoder2.sc b/source/HOAUGens/sc/Classes/HOAEncoder2.sc new file mode 100644 index 0000000000..4abf2aa850 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncoder2.sc @@ -0,0 +1,30 @@ +HOAEncoder2 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"HOAEncoder2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAEncoder3.sc b/source/HOAUGens/sc/Classes/HOAEncoder3.sc new file mode 100644 index 0000000000..bf8d369f73 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncoder3.sc @@ -0,0 +1,30 @@ +HOAEncoder3 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"HOAEncoder3" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4.sc b/source/HOAUGens/sc/Classes/HOAEncoder4.sc new file mode 100644 index 0000000000..fcc3c02c49 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncoder4.sc @@ -0,0 +1,30 @@ +HOAEncoder4 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"HOAEncoder4" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAEncoder5.sc b/source/HOAUGens/sc/Classes/HOAEncoder5.sc new file mode 100644 index 0000000000..699cebdacf --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncoder5.sc @@ -0,0 +1,30 @@ +HOAEncoder5 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(36, rate) + } + + name { ^"HOAEncoder5" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev061.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev061.sc new file mode 100644 index 0000000000..cea25acdae --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev061.sc @@ -0,0 +1,30 @@ +HOAMicLebedev061 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, gain) + } + + checkInputs { + if (rate == 'audio', { + 6.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"HOAMicLebedev061" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev261.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev261.sc new file mode 100644 index 0000000000..dafafeaba8 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev261.sc @@ -0,0 +1,30 @@ +HOAMicLebedev261 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) + } + + checkInputs { + if (rate == 'audio', { + 26.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"HOAMicLebedev261" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev262.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev262.sc new file mode 100644 index 0000000000..7be28cd026 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev262.sc @@ -0,0 +1,30 @@ +HOAMicLebedev262 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) + } + + checkInputs { + if (rate == 'audio', { + 26.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"HOAMicLebedev262" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev263.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev263.sc new file mode 100644 index 0000000000..b75665e32d --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev263.sc @@ -0,0 +1,30 @@ +HOAMicLebedev263 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) + } + + checkInputs { + if (rate == 'audio', { + 26.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"HOAMicLebedev263" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev501.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev501.sc new file mode 100644 index 0000000000..3a5c0350a6 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev501.sc @@ -0,0 +1,30 @@ +HOAMicLebedev501 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + checkInputs { + if (rate == 'audio', { + 50.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"HOAMicLebedev501" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev502.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev502.sc new file mode 100644 index 0000000000..4c4e34e424 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev502.sc @@ -0,0 +1,30 @@ +HOAMicLebedev502 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + checkInputs { + if (rate == 'audio', { + 50.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"HOAMicLebedev502" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev503.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev503.sc new file mode 100644 index 0000000000..f575b85842 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev503.sc @@ -0,0 +1,30 @@ +HOAMicLebedev503 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + checkInputs { + if (rate == 'audio', { + 50.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"HOAMicLebedev503" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev504.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev504.sc new file mode 100644 index 0000000000..4ef8dda4ce --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev504.sc @@ -0,0 +1,30 @@ +HOAMicLebedev504 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + checkInputs { + if (rate == 'audio', { + 50.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"HOAMicLebedev504" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev505.sc b/source/HOAUGens/sc/Classes/HOAMicLebedev505.sc new file mode 100644 index 0000000000..789190a8df --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMicLebedev505.sc @@ -0,0 +1,30 @@ +HOAMicLebedev505 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) + } + + checkInputs { + if (rate == 'audio', { + 50.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(36, rate) + } + + name { ^"HOAMicLebedev505" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMirror1.sc b/source/HOAUGens/sc/Classes/HOAMirror1.sc new file mode 100644 index 0000000000..07dbc43673 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMirror1.sc @@ -0,0 +1,30 @@ +HOAMirror1 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, front_back, left_right, up_down) + } + + *kr { | in1, in2, in3, in4, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, front_back, left_right, up_down) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"HOAMirror1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMirror2.sc b/source/HOAUGens/sc/Classes/HOAMirror2.sc new file mode 100644 index 0000000000..7920730d23 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMirror2.sc @@ -0,0 +1,30 @@ +HOAMirror2 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, front_back, left_right, up_down) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, front_back, left_right, up_down) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"HOAMirror2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMirror3.sc b/source/HOAUGens/sc/Classes/HOAMirror3.sc new file mode 100644 index 0000000000..23d490d756 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMirror3.sc @@ -0,0 +1,30 @@ +HOAMirror3 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, front_back, left_right, up_down) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, front_back, left_right, up_down) + } + + checkInputs { + if (rate == 'audio', { + 16.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"HOAMirror3" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMirror4.sc b/source/HOAUGens/sc/Classes/HOAMirror4.sc new file mode 100644 index 0000000000..b9d41e19e0 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMirror4.sc @@ -0,0 +1,30 @@ +HOAMirror4 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, front_back, left_right, up_down) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, front_back, left_right, up_down) + } + + checkInputs { + if (rate == 'audio', { + 25.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"HOAMirror4" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMirror5.sc b/source/HOAUGens/sc/Classes/HOAMirror5.sc new file mode 100644 index 0000000000..54896003bb --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAMirror5.sc @@ -0,0 +1,30 @@ +HOAMirror5 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, front_back, left_right, up_down) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, front_back(0.0), left_right(0.0), up_down(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, front_back, left_right, up_down) + } + + checkInputs { + if (rate == 'audio', { + 36.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(36, rate) + } + + name { ^"HOAMirror5" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc new file mode 100644 index 0000000000..eabb233696 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc @@ -0,0 +1,30 @@ +HOAPanLebedev061 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(6, rate) + } + + name { ^"HOAPanLebedev061" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc new file mode 100644 index 0000000000..3996afb7d9 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc @@ -0,0 +1,30 @@ +HOAPanLebedev261 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(26, rate) + } + + name { ^"HOAPanLebedev261" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev262.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev262.sc new file mode 100644 index 0000000000..b30ad64a58 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev262.sc @@ -0,0 +1,30 @@ +HOAPanLebedev262 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(26, rate) + } + + name { ^"HOAPanLebedev262" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev263.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev263.sc new file mode 100644 index 0000000000..701cc5dcc9 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev263.sc @@ -0,0 +1,30 @@ +HOAPanLebedev263 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(26, rate) + } + + name { ^"HOAPanLebedev263" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc new file mode 100644 index 0000000000..37bc821c35 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc @@ -0,0 +1,30 @@ +HOAPanLebedev501 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOAPanLebedev501" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc new file mode 100644 index 0000000000..f706e48c07 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc @@ -0,0 +1,30 @@ +HOAPanLebedev502 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOAPanLebedev502" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc new file mode 100644 index 0000000000..b35bdf1cdb --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc @@ -0,0 +1,30 @@ +HOAPanLebedev503 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOAPanLebedev503" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev504.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev504.sc new file mode 100644 index 0000000000..d3c3b2d6ec --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev504.sc @@ -0,0 +1,30 @@ +HOAPanLebedev504 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), checkbox_4_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, checkbox_4_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), checkbox_4_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, checkbox_4_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOAPanLebedev504" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev505.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev505.sc new file mode 100644 index 0000000000..340dbf76e4 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev505.sc @@ -0,0 +1,30 @@ +HOAPanLebedev505 : MultiOutUGen +{ + *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), checkbox_4_1(0.0), checkbox_5_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, checkbox_4_1, checkbox_5_1, speaker_radius_1) + } + + *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), checkbox_4_1(0.0), checkbox_5_1(0.0), speaker_radius_1(1.07) | + ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, checkbox_4_1, checkbox_5_1, speaker_radius_1) + } + + checkInputs { + if (rate == 'audio', { + 2.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"HOAPanLebedev505" } +} + diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz1.sc b/source/HOAUGens/sc/Classes/HOARotatorAz1.sc new file mode 100644 index 0000000000..adf6bfe6f9 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOARotatorAz1.sc @@ -0,0 +1,30 @@ +HOARotatorAz1 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, azimuth) + } + + *kr { | in1, in2, in3, in4, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, azimuth) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"HOARotatorAz1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz2.sc b/source/HOAUGens/sc/Classes/HOARotatorAz2.sc new file mode 100644 index 0000000000..9eeada5618 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOARotatorAz2.sc @@ -0,0 +1,30 @@ +HOARotatorAz2 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"HOARotatorAz2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz3.sc b/source/HOAUGens/sc/Classes/HOARotatorAz3.sc new file mode 100644 index 0000000000..da8e8c641e --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOARotatorAz3.sc @@ -0,0 +1,30 @@ +HOARotatorAz3 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth) + } + + checkInputs { + if (rate == 'audio', { + 16.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"HOARotatorAz3" } +} + diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz4.sc b/source/HOAUGens/sc/Classes/HOARotatorAz4.sc new file mode 100644 index 0000000000..f9e72fe53a --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOARotatorAz4.sc @@ -0,0 +1,30 @@ +HOARotatorAz4 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth) + } + + checkInputs { + if (rate == 'audio', { + 25.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"HOARotatorAz4" } +} + diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz5.sc b/source/HOAUGens/sc/Classes/HOARotatorAz5.sc new file mode 100644 index 0000000000..87a4c48928 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOARotatorAz5.sc @@ -0,0 +1,30 @@ +HOARotatorAz5 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth) + } + + checkInputs { + if (rate == 'audio', { + 36.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(36, rate) + } + + name { ^"HOARotatorAz5" } +} + From 2aea8816e19015b40e6e289908ebaf68bf01e827 Mon Sep 17 00:00:00 2001 From: fgrond Date: Fri, 2 Jun 2017 15:38:46 -0400 Subject: [PATCH 02/30] added Readme --- source/HOAUGens/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 source/HOAUGens/README.md diff --git a/source/HOAUGens/README.md b/source/HOAUGens/README.md new file mode 100644 index 0000000000..4f760706e8 --- /dev/null +++ b/source/HOAUGens/README.md @@ -0,0 +1,5 @@ +# HOAUGens + +This is a collection of higher order Ambisonics (up to the 5th order) UGens based on the HOA FAUST implementation Ambitools of Pierre Lecomte: +https://github.com/sekisushai/ambitools + From c49ebfcca290328aacad7c81f0531985dd7ee43e Mon Sep 17 00:00:00 2001 From: fgrond Date: Mon, 5 Jun 2017 11:19:37 -0400 Subject: [PATCH 03/30] compiled HOAUgens with most recent Faust also added them to the CMakeLists.txt where I also added: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=512") since the Faust autogenerated code creates deep bracket nestings for higher orders --- source/CMakeLists.txt | 3 + ...ARotatorAz1.cpp => HOAAzimuthRotator1.cpp} | 318 +- ...ARotatorAz2.cpp => HOAAzimuthRotator2.cpp} | 318 +- ...ARotatorAz3.cpp => HOAAzimuthRotator3.cpp} | 318 +- ...ARotatorAz4.cpp => HOAAzimuthRotator4.cpp} | 318 +- ...ARotatorAz5.cpp => HOAAzimuthRotator5.cpp} | 318 +- source/HOAUGens/HOABeamDirac2Hoa1.cpp | 352 +- source/HOAUGens/HOABeamDirac2Hoa2.cpp | 426 +- source/HOAUGens/HOABeamDirac2Hoa3.cpp | 510 ++- source/HOAUGens/HOABeamDirac2Hoa4.cpp | 641 ++- source/HOAUGens/HOABeamDirac2Hoa5.cpp | 771 ++-- source/HOAUGens/HOABeamHCardioid2Hoa1.cpp | 1164 ------ source/HOAUGens/HOABeamHCardioid2Hoa2.cpp | 1258 ------ source/HOAUGens/HOABeamHCardioid2Hoa3.cpp | 1404 ------- source/HOAUGens/HOAConverter1.cpp | 759 ++-- source/HOAUGens/HOAConverter2.cpp | 898 ++--- source/HOAUGens/HOAConverter3.cpp | 1087 +++--- source/HOAUGens/HOAConverter4.cpp | 1320 ++++--- source/HOAUGens/HOAConverter5.cpp | 1603 ++++---- source/HOAUGens/HOADecLebedev061.cpp | 423 +- source/HOAUGens/HOADecLebedev261.cpp | 589 ++- source/HOAUGens/HOADecLebedev262.cpp | 853 ++-- source/HOAUGens/HOADecLebedev263.cpp | 1218 +++--- source/HOAUGens/HOADecLebedev501.cpp | 847 ++-- source/HOAUGens/HOADecLebedev502.cpp | 1101 +++--- source/HOAUGens/HOADecLebedev503.cpp | 1626 ++++---- source/HOAUGens/HOADecLebedev504.cpp | 2375 ++++++----- source/HOAUGens/HOADecLebedev505.cpp | 3455 ++++++++--------- source/HOAUGens/HOAEncEigenMike1.cpp | 1472 +++++++ ...PanLebedev261.cpp => HOAEncEigenMike2.cpp} | 1215 +++--- source/HOAUGens/HOAEncEigenMike3.cpp | 1663 ++++++++ source/HOAUGens/HOAEncEigenMike4.cpp | 1789 +++++++++ ...MicLebedev061.cpp => HOAEncLebedev061.cpp} | 414 +- ...MicLebedev261.cpp => HOAEncLebedev261.cpp} | 698 ++-- ...MicLebedev262.cpp => HOAEncLebedev262.cpp} | 764 ++-- ...MicLebedev263.cpp => HOAEncLebedev263.cpp} | 842 ++-- ...MicLebedev501.cpp => HOAEncLebedev501.cpp} | 336 +- ...MicLebedev502.cpp => HOAEncLebedev502.cpp} | 416 +- ...MicLebedev503.cpp => HOAEncLebedev503.cpp} | 476 +-- source/HOAUGens/HOAEncLebedev504.cpp | 1236 ++++++ source/HOAUGens/HOAEncLebedev505.cpp | 1269 ++++++ source/HOAUGens/HOAEncoder1.cpp | 723 ++-- source/HOAUGens/HOAEncoder2.cpp | 847 ++-- source/HOAUGens/HOAEncoder3.cpp | 1086 +++--- source/HOAUGens/HOAEncoder4.cpp | 1202 +++--- source/HOAUGens/HOAEncoder5.cpp | 1647 ++++---- source/HOAUGens/HOAMicLebedev504.cpp | 1281 ------ source/HOAUGens/HOAMicLebedev505.cpp | 1313 ------- source/HOAUGens/HOAMirror1.cpp | 300 +- source/HOAUGens/HOAMirror2.cpp | 300 +- source/HOAUGens/HOAMirror3.cpp | 300 +- source/HOAUGens/HOAMirror4.cpp | 300 +- source/HOAUGens/HOAMirror5.cpp | 300 +- source/HOAUGens/HOAPanLebedev061.cpp | 1300 ------- source/HOAUGens/HOAPanLebedev262.cpp | 1811 --------- source/HOAUGens/HOAPanLebedev263.cpp | 2049 ---------- source/HOAUGens/HOAPanLebedev501.cpp | 2058 ---------- source/HOAUGens/HOAPanLebedev502.cpp | 2277 ----------- source/HOAUGens/HOAPanLebedev503.cpp | 2611 ------------- source/HOAUGens/HOAPanLebedev504.cpp | 2913 -------------- source/HOAUGens/HOAPanLebedev505.cpp | 3266 ---------------- source/HOAUGens/HOARotator1.cpp | 1008 +++++ ...HOARotatorAz1.sc => HOAAzimuthRotator1.sc} | 4 +- ...HOARotatorAz2.sc => HOAAzimuthRotator2.sc} | 4 +- ...HOARotatorAz3.sc => HOAAzimuthRotator3.sc} | 4 +- ...HOARotatorAz4.sc => HOAAzimuthRotator4.sc} | 4 +- ...HOARotatorAz5.sc => HOAAzimuthRotator5.sc} | 4 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc | 4 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc | 4 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc | 4 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc | 4 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc | 4 +- .../sc/Classes/HOABeamHCardioid2Hoa1.sc | 30 - source/HOAUGens/sc/Classes/HOAConverter1.sc | 4 +- source/HOAUGens/sc/Classes/HOAConverter2.sc | 4 +- source/HOAUGens/sc/Classes/HOAConverter3.sc | 4 +- source/HOAUGens/sc/Classes/HOAConverter4.sc | 4 +- source/HOAUGens/sc/Classes/HOAConverter5.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev061.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev261.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev262.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev263.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev501.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev502.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev503.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev504.sc | 4 +- .../HOAUGens/sc/Classes/HOADecLebedev505.sc | 4 +- .../HOAUGens/sc/Classes/HOAEncEigenMike1.sc | 30 + .../HOAUGens/sc/Classes/HOAEncEigenMike2.sc | 30 + .../HOAUGens/sc/Classes/HOAEncEigenMike3.sc | 30 + .../HOAUGens/sc/Classes/HOAEncEigenMike4.sc | 30 + ...OAMicLebedev061.sc => HOAEncLebedev061.sc} | 4 +- ...OAMicLebedev261.sc => HOAEncLebedev261.sc} | 4 +- ...OAMicLebedev262.sc => HOAEncLebedev262.sc} | 4 +- ...OAMicLebedev263.sc => HOAEncLebedev263.sc} | 4 +- ...OAMicLebedev501.sc => HOAEncLebedev501.sc} | 4 +- ...OAMicLebedev502.sc => HOAEncLebedev502.sc} | 4 +- ...OAMicLebedev503.sc => HOAEncLebedev503.sc} | 4 +- ...OAMicLebedev504.sc => HOAEncLebedev504.sc} | 4 +- ...OAMicLebedev505.sc => HOAEncLebedev505.sc} | 4 +- source/HOAUGens/sc/Classes/HOAEncoder1.sc | 4 +- source/HOAUGens/sc/Classes/HOAEncoder2.sc | 4 +- source/HOAUGens/sc/Classes/HOAEncoder3.sc | 4 +- source/HOAUGens/sc/Classes/HOAEncoder4.sc | 4 +- source/HOAUGens/sc/Classes/HOAEncoder5.sc | 4 +- source/HOAUGens/sc/Classes/HOAMirror1.sc | 4 +- source/HOAUGens/sc/Classes/HOAMirror2.sc | 4 +- source/HOAUGens/sc/Classes/HOAMirror3.sc | 4 +- source/HOAUGens/sc/Classes/HOAMirror4.sc | 4 +- source/HOAUGens/sc/Classes/HOAMirror5.sc | 4 +- .../HOAUGens/sc/Classes/HOAPanLebedev061.sc | 30 - .../HOAUGens/sc/Classes/HOAPanLebedev261.sc | 30 - .../HOAUGens/sc/Classes/HOAPanLebedev262.sc | 30 - .../HOAUGens/sc/Classes/HOAPanLebedev263.sc | 30 - .../HOAUGens/sc/Classes/HOAPanLebedev501.sc | 30 - .../HOAUGens/sc/Classes/HOAPanLebedev502.sc | 30 - .../HOAUGens/sc/Classes/HOAPanLebedev503.sc | 30 - .../HOAUGens/sc/Classes/HOAPanLebedev504.sc | 30 - .../HOAUGens/sc/Classes/HOAPanLebedev505.sc | 30 - source/HOAUGens/sc/Classes/HOARotator1.sc | 30 + .../sc/Classes/HOA_Azimuth_Rotator1.sc | 30 + ...rdioid2Hoa2.sc => HOA_Azimuth_Rotator2.sc} | 14 +- ...rdioid2Hoa3.sc => HOA_Azimuth_Rotator3.sc} | 14 +- .../sc/Classes/HOA_Azimuth_Rotator4.sc | 30 + .../sc/Classes/HOA_Azimuth_Rotator5.sc | 30 + 125 files changed, 25396 insertions(+), 43099 deletions(-) rename source/HOAUGens/{HOARotatorAz1.cpp => HOAAzimuthRotator1.cpp} (74%) rename source/HOAUGens/{HOARotatorAz2.cpp => HOAAzimuthRotator2.cpp} (75%) rename source/HOAUGens/{HOARotatorAz3.cpp => HOAAzimuthRotator3.cpp} (76%) rename source/HOAUGens/{HOARotatorAz4.cpp => HOAAzimuthRotator4.cpp} (77%) rename source/HOAUGens/{HOARotatorAz5.cpp => HOAAzimuthRotator5.cpp} (78%) delete mode 100644 source/HOAUGens/HOABeamHCardioid2Hoa1.cpp delete mode 100644 source/HOAUGens/HOABeamHCardioid2Hoa2.cpp delete mode 100644 source/HOAUGens/HOABeamHCardioid2Hoa3.cpp create mode 100644 source/HOAUGens/HOAEncEigenMike1.cpp rename source/HOAUGens/{HOAPanLebedev261.cpp => HOAEncEigenMike2.cpp} (53%) create mode 100644 source/HOAUGens/HOAEncEigenMike3.cpp create mode 100644 source/HOAUGens/HOAEncEigenMike4.cpp rename source/HOAUGens/{HOAMicLebedev061.cpp => HOAEncLebedev061.cpp} (74%) rename source/HOAUGens/{HOAMicLebedev261.cpp => HOAEncLebedev261.cpp} (70%) rename source/HOAUGens/{HOAMicLebedev262.cpp => HOAEncLebedev262.cpp} (68%) rename source/HOAUGens/{HOAMicLebedev263.cpp => HOAEncLebedev263.cpp} (65%) rename source/HOAUGens/{HOAMicLebedev501.cpp => HOAEncLebedev501.cpp} (71%) rename source/HOAUGens/{HOAMicLebedev502.cpp => HOAEncLebedev502.cpp} (64%) rename source/HOAUGens/{HOAMicLebedev503.cpp => HOAEncLebedev503.cpp} (58%) create mode 100644 source/HOAUGens/HOAEncLebedev504.cpp create mode 100644 source/HOAUGens/HOAEncLebedev505.cpp delete mode 100644 source/HOAUGens/HOAMicLebedev504.cpp delete mode 100644 source/HOAUGens/HOAMicLebedev505.cpp delete mode 100644 source/HOAUGens/HOAPanLebedev061.cpp delete mode 100644 source/HOAUGens/HOAPanLebedev262.cpp delete mode 100644 source/HOAUGens/HOAPanLebedev263.cpp delete mode 100644 source/HOAUGens/HOAPanLebedev501.cpp delete mode 100644 source/HOAUGens/HOAPanLebedev502.cpp delete mode 100644 source/HOAUGens/HOAPanLebedev503.cpp delete mode 100644 source/HOAUGens/HOAPanLebedev504.cpp delete mode 100644 source/HOAUGens/HOAPanLebedev505.cpp create mode 100644 source/HOAUGens/HOARotator1.cpp rename source/HOAUGens/sc/Classes/{HOARotatorAz1.sc => HOAAzimuthRotator1.sc} (88%) rename source/HOAUGens/sc/Classes/{HOARotatorAz2.sc => HOAAzimuthRotator2.sc} (89%) rename source/HOAUGens/sc/Classes/{HOARotatorAz3.sc => HOAAzimuthRotator3.sc} (91%) rename source/HOAUGens/sc/Classes/{HOARotatorAz4.sc => HOAAzimuthRotator4.sc} (93%) rename source/HOAUGens/sc/Classes/{HOARotatorAz5.sc => HOAAzimuthRotator5.sc} (94%) delete mode 100644 source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa1.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncEigenMike1.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncEigenMike2.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncEigenMike3.sc create mode 100644 source/HOAUGens/sc/Classes/HOAEncEigenMike4.sc rename source/HOAUGens/sc/Classes/{HOAMicLebedev061.sc => HOAEncLebedev061.sc} (89%) rename source/HOAUGens/sc/Classes/{HOAMicLebedev261.sc => HOAEncLebedev261.sc} (93%) rename source/HOAUGens/sc/Classes/{HOAMicLebedev262.sc => HOAEncLebedev262.sc} (93%) rename source/HOAUGens/sc/Classes/{HOAMicLebedev263.sc => HOAEncLebedev263.sc} (93%) rename source/HOAUGens/sc/Classes/{HOAMicLebedev501.sc => HOAEncLebedev501.sc} (95%) rename source/HOAUGens/sc/Classes/{HOAMicLebedev502.sc => HOAEncLebedev502.sc} (95%) rename source/HOAUGens/sc/Classes/{HOAMicLebedev503.sc => HOAEncLebedev503.sc} (95%) rename source/HOAUGens/sc/Classes/{HOAMicLebedev504.sc => HOAEncLebedev504.sc} (95%) rename source/HOAUGens/sc/Classes/{HOAMicLebedev505.sc => HOAEncLebedev505.sc} (95%) delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev061.sc delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev261.sc delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev262.sc delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev263.sc delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev501.sc delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev502.sc delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev503.sc delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev504.sc delete mode 100644 source/HOAUGens/sc/Classes/HOAPanLebedev505.sc create mode 100644 source/HOAUGens/sc/Classes/HOARotator1.sc create mode 100644 source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator1.sc rename source/HOAUGens/sc/Classes/{HOABeamHCardioid2Hoa2.sc => HOA_Azimuth_Rotator2.sc} (69%) rename source/HOAUGens/sc/Classes/{HOABeamHCardioid2Hoa3.sc => HOA_Azimuth_Rotator3.sc} (58%) create mode 100644 source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator4.sc create mode 100644 source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator5.sc diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index cd90ecb145..7d89183e39 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -78,6 +78,8 @@ macro(BUILD_PLUGIN PLUGIN_NAME PLUGIN_SOURCES PLUGIN_LIBS PLUGIN_DIR) endmacro() +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=512") + #----------------------- # plugins without extras #----------------------- @@ -94,6 +96,7 @@ set(PLUGIN_DIRS DistortionUGens DWGUGens GlitchUGens + HOAUGens JoshUGens LoopBufUGens MCLDUGens diff --git a/source/HOAUGens/HOARotatorAz1.cpp b/source/HOAUGens/HOAAzimuthRotator1.cpp similarity index 74% rename from source/HOAUGens/HOARotatorAz1.cpp rename to source/HOAUGens/HOAAzimuthRotator1.cpp index 646a6dfe37..b250e45dca 100644 --- a/source/HOAUGens/HOARotatorAz1.cpp +++ b/source/HOAUGens/HOAAzimuthRotator1.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOARotatorAz1" +// name: "HOAAzimuthRotator1" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -627,7 +574,14 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOARotatorAz1"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("name", "HOAAzimuthRotator1"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -637,13 +591,6 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 4; } @@ -674,9 +621,9 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAAzimuthRotator1"); ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { @@ -748,7 +695,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -780,7 +727,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -803,9 +750,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -831,9 +778,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -929,7 +876,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -989,19 +936,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1012,10 +960,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOARotatorAz2.cpp b/source/HOAUGens/HOAAzimuthRotator2.cpp similarity index 75% rename from source/HOAUGens/HOARotatorAz2.cpp rename to source/HOAUGens/HOAAzimuthRotator2.cpp index 9d55cc7f1c..aee8f3f5b8 100644 --- a/source/HOAUGens/HOARotatorAz2.cpp +++ b/source/HOAUGens/HOAAzimuthRotator2.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOARotatorAz2" +// name: "HOAAzimuthRotator2" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -627,7 +574,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOARotatorAz2"); + m->declare("name", "HOAAzimuthRotator2"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -637,13 +584,13 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 9; } @@ -674,9 +621,9 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAAzimuthRotator2"); ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { @@ -773,7 +720,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -805,7 +752,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -828,9 +775,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -856,9 +803,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -954,7 +901,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1014,19 +961,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1037,10 +985,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOARotatorAz3.cpp b/source/HOAUGens/HOAAzimuthRotator3.cpp similarity index 76% rename from source/HOAUGens/HOARotatorAz3.cpp rename to source/HOAUGens/HOAAzimuthRotator3.cpp index 9aac91778b..af30e2e20e 100644 --- a/source/HOAUGens/HOARotatorAz3.cpp +++ b/source/HOAUGens/HOAAzimuthRotator3.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOARotatorAz3" +// name: "HOAAzimuthRotator3" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -627,7 +574,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOARotatorAz3"); + m->declare("name", "HOAAzimuthRotator3"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -637,13 +584,13 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 16; } @@ -674,9 +621,9 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAAzimuthRotator3"); ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { @@ -806,7 +753,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -838,7 +785,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -861,9 +808,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -889,9 +836,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -987,7 +934,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1047,19 +994,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1070,10 +1018,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOARotatorAz4.cpp b/source/HOAUGens/HOAAzimuthRotator4.cpp similarity index 77% rename from source/HOAUGens/HOARotatorAz4.cpp rename to source/HOAUGens/HOAAzimuthRotator4.cpp index e4ac5ed009..7b4986cfbc 100644 --- a/source/HOAUGens/HOARotatorAz4.cpp +++ b/source/HOAUGens/HOAAzimuthRotator4.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOARotatorAz4" +// name: "HOAAzimuthRotator4" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -627,7 +574,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOARotatorAz4"); + m->declare("name", "HOAAzimuthRotator4"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -637,13 +584,13 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 25; } @@ -674,9 +621,9 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAAzimuthRotator4"); ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { @@ -847,7 +794,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -879,7 +826,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -902,9 +849,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -930,9 +877,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1028,7 +975,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1088,19 +1035,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1111,10 +1059,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOARotatorAz5.cpp b/source/HOAUGens/HOAAzimuthRotator5.cpp similarity index 78% rename from source/HOAUGens/HOARotatorAz5.cpp rename to source/HOAUGens/HOAAzimuthRotator5.cpp index 39a6f9b7f1..42c2a288cb 100644 --- a/source/HOAUGens/HOARotatorAz5.cpp +++ b/source/HOAUGens/HOAAzimuthRotator5.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOARotatorAz5" +// name: "HOAAzimuthRotator5" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -627,7 +574,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOARotatorAz5"); + m->declare("name", "HOAAzimuthRotator5"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -637,13 +584,13 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } virtual int getNumInputs() { return 36; } @@ -674,9 +621,9 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAAzimuthRotator5"); ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.01); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { @@ -896,7 +843,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -928,7 +875,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -951,9 +898,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -979,9 +926,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1077,7 +1024,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1137,19 +1084,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1160,10 +1108,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOABeamDirac2Hoa1.cpp b/source/HOAUGens/HOABeamDirac2Hoa1.cpp index ded2e7a108..73b5eb97e8 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa1.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa1.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOABeamDirac2Hoa1" +// name: "HOABeamDirac2HOA1" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -639,7 +586,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOABeamDirac2Hoa1"); + m->declare("name", "HOABeamDirac2HOA1"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -664,15 +611,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 4; } @@ -681,7 +628,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (1.0 / fConst0); } virtual void instanceResetUserInterface() { @@ -726,7 +673,7 @@ class mydsp : public dsp { ui_interface->declare(&fslider0, "unit", "dB"); ui_interface->addVerticalSlider("Gain", &fslider0, 0.0, -2e+01, 2e+01, 0.1); ui_interface->declare(&fslider2, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.1); ui_interface->declare(&fslider1, "6", ""); ui_interface->addVerticalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); ui_interface->closeBox(); @@ -741,14 +688,14 @@ class mydsp : public dsp { int iSlow6 = int((fSlow0 > 0)); double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); double fSlow8 = double(fslider1); - double fSlow9 = sin(fSlow8); - double fSlow10 = cos(fSlow8); - double fSlow11 = double(fslider2); - double fSlow12 = cos(fSlow11); - double fSlow13 = sin(fSlow11); - double fSlow14 = (0.13783222385544802 * (fSlow10 * fSlow13)); - double fSlow15 = (0.13783222385544802 * fSlow9); - double fSlow16 = (0.13783222385544802 * (fSlow10 * fSlow12)); + double fSlow9 = cos(fSlow8); + double fSlow10 = double(fslider2); + double fSlow11 = (fSlow9 * sin(fSlow10)); + double fSlow12 = sin(fSlow8); + double fSlow13 = (fSlow9 * cos(fSlow10)); + double fSlow14 = (0.13783222385544802 * fSlow11); + double fSlow15 = (0.13783222385544802 * fSlow12); + double fSlow16 = (0.13783222385544802 * fSlow13); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -765,17 +712,17 @@ class mydsp : public dsp { double fTemp1 = (fTemp0 * fRec2[0]); fRec3[0] = ((iSlow4)?0:min(fSlow5, (fRec3[1] + 1))); fRec4[0] = ((iSlow6)?fSlow5:max((double)0, (fRec4[1] + -1))); - double fTemp2 = (double)input2[i]; + double fTemp2 = (double)input1[i]; double fTemp3 = (fTemp2 * fRec2[0]); - double fTemp4 = (double)input3[i]; + double fTemp4 = (double)input2[i]; double fTemp5 = (fTemp4 * fRec2[0]); - double fTemp6 = (double)input1[i]; + double fTemp6 = (double)input3[i]; double fTemp7 = (fTemp6 * fRec2[0]); - double fTemp8 = (((iSlow1)?(fSlow3 * (fTemp1 * fRec3[0])):(fSlow3 * (fTemp1 * fRec4[0]))) + (1.7320508075688772 * ((fSlow9 * ((iSlow1)?(fSlow3 * (fTemp3 * fRec3[0])):(fSlow3 * (fTemp3 * fRec4[0])))) + (fSlow10 * ((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp5 * fRec3[0])):(fSlow3 * (fTemp5 * fRec4[0])))) + (fSlow13 * ((iSlow1)?(fSlow3 * (fTemp7 * fRec3[0])):(fSlow3 * (fTemp7 * fRec4[0]))))))))); + double fTemp8 = (((iSlow1)?(fSlow3 * (fTemp1 * fRec3[0])):(fSlow3 * (fTemp1 * fRec4[0]))) + (1.7320508075688772 * (((fSlow11 * ((iSlow1)?(fSlow3 * (fTemp3 * fRec3[0])):(fSlow3 * (fTemp3 * fRec4[0])))) + (fSlow12 * ((iSlow1)?(fSlow3 * (fTemp5 * fRec3[0])):(fSlow3 * (fTemp5 * fRec4[0]))))) + (fSlow13 * ((iSlow1)?(fSlow3 * (fTemp7 * fRec3[0])):(fSlow3 * (fTemp7 * fRec4[0]))))))); output0[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp0 * fRec0[0])):(fSlow3 * (fTemp0 * fRec1[0]))) + (0.07957747154594767 * fTemp8)); - output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp6 * fRec0[0])):(fSlow3 * (fTemp6 * fRec1[0]))) + (fSlow14 * fTemp8)); - output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp2 * fRec0[0])):(fSlow3 * (fTemp2 * fRec1[0]))) + (fSlow15 * fTemp8)); - output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp4 * fRec0[0])):(fSlow3 * (fTemp4 * fRec1[0]))) + (fSlow16 * fTemp8)); + output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp2 * fRec0[0])):(fSlow3 * (fTemp2 * fRec1[0]))) + (fSlow14 * fTemp8)); + output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp4 * fRec0[0])):(fSlow3 * (fTemp4 * fRec1[0]))) + (fSlow15 * fTemp8)); + output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp6 * fRec0[0])):(fSlow3 * (fTemp6 * fRec1[0]))) + (fSlow16 * fTemp8)); // post processing fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; @@ -829,7 +776,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -861,7 +808,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -884,9 +831,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -912,9 +859,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1010,7 +957,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1070,19 +1017,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1093,10 +1041,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOABeamDirac2Hoa2.cpp b/source/HOAUGens/HOABeamDirac2Hoa2.cpp index b4641f24e5..107d866351 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa2.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa2.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOABeamDirac2Hoa2" +// name: "HOABeamDirac2HOA2" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -642,16 +589,30 @@ class mydsp : public dsp { double fRec0[2]; double fRec1[2]; FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; double fRec2[2]; double fRec3[2]; double fRec4[2]; + FAUSTFLOAT fslider1; FAUSTFLOAT fslider2; int fSamplingFreq; public: virtual void metadata(Meta* m) { - m->declare("name", "HOABeamDirac2Hoa2"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("name", "HOABeamDirac2HOA2"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -671,20 +632,6 @@ class mydsp : public dsp { m->declare("lib/nfc.lib/author", "Pierre Lecomte"); m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); } virtual int getNumInputs() { return 9; } @@ -693,7 +640,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (1.0 / fConst0); } virtual void instanceResetUserInterface() { @@ -734,13 +681,13 @@ class mydsp : public dsp { ui_interface->declare(&fentry0, "3", ""); ui_interface->declare(&fentry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider1, "4", ""); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "4", ""); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider0, 0.0, -2e+01, 2e+01, 0.1); ui_interface->declare(&fslider2, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.1); + ui_interface->declare(&fslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { @@ -751,28 +698,32 @@ class mydsp : public dsp { int iSlow4 = int(((1 - fSlow0) > 0)); double fSlow5 = (fConst0 * fSlow2); int iSlow6 = int((fSlow0 > 0)); - double fSlow7 = double(fslider0); - double fSlow8 = sin(fSlow7); - double fSlow9 = ((3 * faustpower<2>(fSlow8)) + -1); - double fSlow10 = (1.118033988749895 * fSlow9); - double fSlow11 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow12 = cos(fSlow7); - double fSlow13 = double(fslider2); - double fSlow14 = cos(fSlow13); - double fSlow15 = sin(fSlow13); - double fSlow16 = sin((2 * fSlow7)); - double fSlow17 = faustpower<2>(fSlow12); - double fSlow18 = (2 * fSlow13); - double fSlow19 = sin(fSlow18); - double fSlow20 = cos(fSlow18); - double fSlow21 = (0.13783222385544802 * (fSlow12 * fSlow15)); - double fSlow22 = (0.13783222385544802 * fSlow8); - double fSlow23 = (0.13783222385544802 * (fSlow12 * fSlow14)); - double fSlow24 = (0.15410111101537496 * (fSlow17 * fSlow19)); - double fSlow25 = (0.15410111101537496 * (fSlow16 * fSlow15)); - double fSlow26 = (0.08897031792714714 * fSlow9); - double fSlow27 = (0.15410111101537496 * (fSlow16 * fSlow14)); - double fSlow28 = (0.15410111101537496 * (fSlow17 * fSlow20)); + double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow8 = double(fslider1); + double fSlow9 = cos(fSlow8); + double fSlow10 = double(fslider2); + double fSlow11 = sin(fSlow10); + double fSlow12 = (fSlow9 * fSlow11); + double fSlow13 = sin(fSlow8); + double fSlow14 = cos(fSlow10); + double fSlow15 = (fSlow9 * fSlow14); + double fSlow16 = ((3 * faustpower<2>(fSlow13)) + -1); + double fSlow17 = (1.118033988749895 * fSlow16); + double fSlow18 = faustpower<2>(fSlow9); + double fSlow19 = (2 * fSlow10); + double fSlow20 = (fSlow18 * sin(fSlow19)); + double fSlow21 = sin((2 * fSlow8)); + double fSlow22 = (fSlow21 * fSlow11); + double fSlow23 = (fSlow21 * fSlow14); + double fSlow24 = (fSlow18 * cos(fSlow19)); + double fSlow25 = (0.13783222385544802 * fSlow12); + double fSlow26 = (0.13783222385544802 * fSlow13); + double fSlow27 = (0.13783222385544802 * fSlow15); + double fSlow28 = (0.15410111101537496 * fSlow20); + double fSlow29 = (0.15410111101537496 * fSlow22); + double fSlow30 = (0.08897031792714714 * fSlow16); + double fSlow31 = (0.15410111101537496 * fSlow23); + double fSlow32 = (0.15410111101537496 * fSlow24); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -795,36 +746,36 @@ class mydsp : public dsp { double fTemp0 = (double)input0[i]; fRec0[0] = ((iSlow4)?fSlow5:max((double)0, (fRec0[1] + -1))); fRec1[0] = ((iSlow6)?0:min(fSlow5, (fRec1[1] + 1))); - double fTemp1 = (double)input6[i]; - fRec2[0] = (fSlow11 + (0.999 * fRec2[1])); - double fTemp2 = (fTemp1 * fRec2[0]); + fRec2[0] = (fSlow7 + (0.999 * fRec2[1])); + double fTemp1 = (fTemp0 * fRec2[0]); fRec3[0] = ((iSlow4)?0:min(fSlow5, (fRec3[1] + 1))); fRec4[0] = ((iSlow6)?fSlow5:max((double)0, (fRec4[1] + -1))); - double fTemp3 = (fTemp0 * fRec2[0]); + double fTemp2 = (double)input1[i]; + double fTemp3 = (fTemp2 * fRec2[0]); double fTemp4 = (double)input2[i]; double fTemp5 = (fTemp4 * fRec2[0]); double fTemp6 = (double)input3[i]; double fTemp7 = (fTemp6 * fRec2[0]); - double fTemp8 = (double)input1[i]; + double fTemp8 = (double)input6[i]; double fTemp9 = (fTemp8 * fRec2[0]); - double fTemp10 = (double)input5[i]; + double fTemp10 = (double)input4[i]; double fTemp11 = (fTemp10 * fRec2[0]); - double fTemp12 = (double)input7[i]; + double fTemp12 = (double)input5[i]; double fTemp13 = (fTemp12 * fRec2[0]); - double fTemp14 = (double)input4[i]; + double fTemp14 = (double)input7[i]; double fTemp15 = (fTemp14 * fRec2[0]); double fTemp16 = (double)input8[i]; double fTemp17 = (fTemp16 * fRec2[0]); - double fTemp18 = (((fSlow10 * ((iSlow1)?(fSlow3 * (fTemp2 * fRec3[0])):(fSlow3 * (fTemp2 * fRec4[0])))) + (((iSlow1)?(fSlow3 * (fTemp3 * fRec3[0])):(fSlow3 * (fTemp3 * fRec4[0]))) + (1.7320508075688772 * ((fSlow8 * ((iSlow1)?(fSlow3 * (fTemp5 * fRec3[0])):(fSlow3 * (fTemp5 * fRec4[0])))) + (fSlow12 * ((fSlow14 * ((iSlow1)?(fSlow3 * (fTemp7 * fRec3[0])):(fSlow3 * (fTemp7 * fRec4[0])))) + (fSlow15 * ((iSlow1)?(fSlow3 * (fTemp9 * fRec3[0])):(fSlow3 * (fTemp9 * fRec4[0])))))))))) + (1.9364916731037085 * ((fSlow16 * ((fSlow15 * ((iSlow1)?(fSlow3 * (fTemp11 * fRec3[0])):(fSlow3 * (fTemp11 * fRec4[0])))) + (fSlow14 * ((iSlow1)?(fSlow3 * (fTemp13 * fRec3[0])):(fSlow3 * (fTemp13 * fRec4[0])))))) + (fSlow17 * ((fSlow19 * ((iSlow1)?(fSlow3 * (fTemp15 * fRec3[0])):(fSlow3 * (fTemp15 * fRec4[0])))) + (fSlow20 * ((iSlow1)?(fSlow3 * (fTemp17 * fRec3[0])):(fSlow3 * (fTemp17 * fRec4[0]))))))))); + double fTemp18 = (((((iSlow1)?(fSlow3 * (fTemp1 * fRec3[0])):(fSlow3 * (fTemp1 * fRec4[0]))) + (1.7320508075688772 * (((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp3 * fRec3[0])):(fSlow3 * (fTemp3 * fRec4[0])))) + (fSlow13 * ((iSlow1)?(fSlow3 * (fTemp5 * fRec3[0])):(fSlow3 * (fTemp5 * fRec4[0]))))) + (fSlow15 * ((iSlow1)?(fSlow3 * (fTemp7 * fRec3[0])):(fSlow3 * (fTemp7 * fRec4[0]))))))) + (fSlow17 * ((iSlow1)?(fSlow3 * (fTemp9 * fRec3[0])):(fSlow3 * (fTemp9 * fRec4[0]))))) + (1.9364916731037085 * ((((fSlow20 * ((iSlow1)?(fSlow3 * (fTemp11 * fRec3[0])):(fSlow3 * (fTemp11 * fRec4[0])))) + (fSlow22 * ((iSlow1)?(fSlow3 * (fTemp13 * fRec3[0])):(fSlow3 * (fTemp13 * fRec4[0]))))) + (fSlow23 * ((iSlow1)?(fSlow3 * (fTemp15 * fRec3[0])):(fSlow3 * (fTemp15 * fRec4[0]))))) + (fSlow24 * ((iSlow1)?(fSlow3 * (fTemp17 * fRec3[0])):(fSlow3 * (fTemp17 * fRec4[0]))))))); output0[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp0 * fRec0[0])):(fSlow3 * (fTemp0 * fRec1[0]))) + (0.07957747154594767 * fTemp18)); - output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp8 * fRec0[0])):(fSlow3 * (fTemp8 * fRec1[0]))) + (fSlow21 * fTemp18)); - output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp4 * fRec0[0])):(fSlow3 * (fTemp4 * fRec1[0]))) + (fSlow22 * fTemp18)); - output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp6 * fRec0[0])):(fSlow3 * (fTemp6 * fRec1[0]))) + (fSlow23 * fTemp18)); - output4[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp14 * fRec0[0])):(fSlow3 * (fTemp14 * fRec1[0]))) + (fSlow24 * fTemp18)); - output5[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp10 * fRec0[0])):(fSlow3 * (fTemp10 * fRec1[0]))) + (fSlow25 * fTemp18)); - output6[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp1 * fRec0[0])):(fSlow3 * (fTemp1 * fRec1[0]))) + (fSlow26 * fTemp18)); - output7[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp12 * fRec0[0])):(fSlow3 * (fTemp12 * fRec1[0]))) + (fSlow27 * fTemp18)); - output8[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp16 * fRec0[0])):(fSlow3 * (fTemp16 * fRec1[0]))) + (fSlow28 * fTemp18)); + output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp2 * fRec0[0])):(fSlow3 * (fTemp2 * fRec1[0]))) + (fSlow25 * fTemp18)); + output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp4 * fRec0[0])):(fSlow3 * (fTemp4 * fRec1[0]))) + (fSlow26 * fTemp18)); + output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp6 * fRec0[0])):(fSlow3 * (fTemp6 * fRec1[0]))) + (fSlow27 * fTemp18)); + output4[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp10 * fRec0[0])):(fSlow3 * (fTemp10 * fRec1[0]))) + (fSlow28 * fTemp18)); + output5[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp12 * fRec0[0])):(fSlow3 * (fTemp12 * fRec1[0]))) + (fSlow29 * fTemp18)); + output6[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp8 * fRec0[0])):(fSlow3 * (fTemp8 * fRec1[0]))) + (fSlow30 * fTemp18)); + output7[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp14 * fRec0[0])):(fSlow3 * (fTemp14 * fRec1[0]))) + (fSlow31 * fTemp18)); + output8[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp16 * fRec0[0])):(fSlow3 * (fTemp16 * fRec1[0]))) + (fSlow32 * fTemp18)); // post processing fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; @@ -878,7 +829,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -910,7 +861,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -933,9 +884,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -961,9 +912,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1059,7 +1010,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1119,19 +1070,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1142,10 +1094,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOABeamDirac2Hoa3.cpp b/source/HOAUGens/HOABeamDirac2Hoa3.cpp index 35acdc4e81..639de2dbf9 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa3.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa3.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOABeamDirac2Hoa3" +// name: "HOABeamDirac2HOA3" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -642,16 +589,16 @@ class mydsp : public dsp { double fRec0[2]; double fRec1[2]; FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; double fRec2[2]; double fRec3[2]; double fRec4[2]; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; int fSamplingFreq; public: virtual void metadata(Meta* m) { - m->declare("name", "HOABeamDirac2Hoa3"); + m->declare("name", "HOABeamDirac2HOA3"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -676,15 +623,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 16; } @@ -693,7 +640,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (1.0 / fConst0); } virtual void instanceResetUserInterface() { @@ -734,13 +681,13 @@ class mydsp : public dsp { ui_interface->declare(&fentry0, "3", ""); ui_interface->declare(&fentry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider0, "4", ""); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider0, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider1, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider2, "4", ""); + ui_interface->declare(&fslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider2, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.1); + ui_interface->declare(&fslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { @@ -751,51 +698,57 @@ class mydsp : public dsp { int iSlow4 = int(((1 - fSlow0) > 0)); double fSlow5 = (fConst0 * fSlow2); int iSlow6 = int((fSlow0 > 0)); - double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow8 = double(fslider1); - double fSlow9 = sin(fSlow8); - double fSlow10 = cos(fSlow8); - double fSlow11 = double(fslider2); - double fSlow12 = sin(fSlow11); - double fSlow13 = cos(fSlow11); - double fSlow14 = faustpower<2>(fSlow9); - double fSlow15 = ((3 * fSlow14) + -1); - double fSlow16 = (1.118033988749895 * fSlow15); - double fSlow17 = sin((2 * fSlow8)); - double fSlow18 = faustpower<2>(fSlow10); - double fSlow19 = (2 * fSlow11); - double fSlow20 = sin(fSlow19); - double fSlow21 = cos(fSlow19); - double fSlow22 = (5 * fSlow14); - double fSlow23 = (fSlow22 + -3); - double fSlow24 = (1.3228756555322954 * fSlow23); - double fSlow25 = (fSlow21 * fSlow18); - double fSlow26 = (5.123475382979799 * fSlow25); - double fSlow27 = (fSlow22 + -1); - double fSlow28 = (1.620185174601965 * fSlow27); - double fSlow29 = (3 * fSlow11); - double fSlow30 = sin(fSlow29); - double fSlow31 = (2.091650066335189 * (fSlow30 * fSlow10)); - double fSlow32 = (5.123475382979799 * (fSlow20 * fSlow9)); - double fSlow33 = cos(fSlow29); - double fSlow34 = (2.091650066335189 * (fSlow33 * fSlow10)); - double fSlow35 = (0.13783222385544802 * (fSlow12 * fSlow10)); - double fSlow36 = (0.13783222385544802 * fSlow9); - double fSlow37 = (0.13783222385544802 * (fSlow13 * fSlow10)); - double fSlow38 = (fSlow20 * fSlow18); - double fSlow39 = (0.15410111101537496 * fSlow38); - double fSlow40 = (0.15410111101537496 * (fSlow12 * fSlow17)); - double fSlow41 = (0.08897031792714714 * fSlow15); - double fSlow42 = (0.15410111101537496 * (fSlow13 * fSlow17)); - double fSlow43 = (0.15410111101537496 * fSlow25); - double fSlow44 = faustpower<3>(fSlow10); - double fSlow45 = (0.16644822363786807 * (fSlow30 * fSlow44)); - double fSlow46 = (0.4077132165054383 * (fSlow38 * fSlow9)); - double fSlow47 = (0.12893023963105413 * ((fSlow12 * fSlow27) * fSlow10)); - double fSlow48 = (0.10527109983694811 * (fSlow23 * fSlow9)); - double fSlow49 = (0.12893023963105413 * ((fSlow13 * fSlow27) * fSlow10)); - double fSlow50 = (0.4077132165054383 * (fSlow25 * fSlow9)); - double fSlow51 = (0.16644822363786807 * (fSlow33 * fSlow44)); + double fSlow7 = double(fslider0); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fslider1); + double fSlow10 = (3 * fSlow9); + double fSlow11 = sin(fSlow10); + double fSlow12 = (2.091650066335189 * (fSlow8 * fSlow11)); + double fSlow13 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider2)))); + double fSlow14 = sin(fSlow7); + double fSlow15 = (2 * fSlow9); + double fSlow16 = sin(fSlow15); + double fSlow17 = (5.123475382979799 * (fSlow14 * fSlow16)); + double fSlow18 = sin(fSlow9); + double fSlow19 = faustpower<2>(fSlow14); + double fSlow20 = (5 * fSlow19); + double fSlow21 = (fSlow20 + -1); + double fSlow22 = (1.620185174601965 * (fSlow18 * fSlow21)); + double fSlow23 = cos(fSlow9); + double fSlow24 = (1.620185174601965 * (fSlow23 * fSlow21)); + double fSlow25 = faustpower<2>(fSlow8); + double fSlow26 = cos(fSlow10); + double fSlow27 = (2.091650066335189 * (fSlow25 * fSlow26)); + double fSlow28 = (fSlow8 * fSlow18); + double fSlow29 = (fSlow8 * fSlow23); + double fSlow30 = ((3 * fSlow19) + -1); + double fSlow31 = (1.118033988749895 * fSlow30); + double fSlow32 = (fSlow25 * fSlow16); + double fSlow33 = sin((2 * fSlow7)); + double fSlow34 = (fSlow33 * fSlow18); + double fSlow35 = (fSlow33 * fSlow23); + double fSlow36 = cos(fSlow15); + double fSlow37 = (fSlow25 * fSlow36); + double fSlow38 = (fSlow20 + -3); + double fSlow39 = (1.3228756555322954 * fSlow38); + double fSlow40 = (5.123475382979799 * fSlow37); + double fSlow41 = (0.13783222385544802 * fSlow28); + double fSlow42 = (0.13783222385544802 * fSlow14); + double fSlow43 = (0.13783222385544802 * fSlow29); + double fSlow44 = (0.15410111101537496 * fSlow32); + double fSlow45 = (0.15410111101537496 * fSlow34); + double fSlow46 = (0.08897031792714714 * fSlow30); + double fSlow47 = (0.15410111101537496 * fSlow35); + double fSlow48 = (0.15410111101537496 * fSlow37); + double fSlow49 = faustpower<3>(fSlow8); + double fSlow50 = (0.16644822363786807 * (fSlow49 * fSlow11)); + double fSlow51 = (fSlow25 * fSlow14); + double fSlow52 = (0.4077132165054383 * (fSlow51 * fSlow16)); + double fSlow53 = (0.12893023963105413 * (fSlow28 * fSlow21)); + double fSlow54 = (0.10527109983694811 * (fSlow14 * fSlow38)); + double fSlow55 = (0.12893023963105413 * (fSlow29 * fSlow21)); + double fSlow56 = (0.4077132165054383 * (fSlow51 * fSlow36)); + double fSlow57 = (0.16644822363786807 * (fSlow49 * fSlow26)); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -832,57 +785,57 @@ class mydsp : public dsp { double fTemp0 = (double)input0[i]; fRec0[0] = ((iSlow4)?fSlow5:max((double)0, (fRec0[1] + -1))); fRec1[0] = ((iSlow6)?0:min(fSlow5, (fRec1[1] + 1))); - fRec2[0] = (fSlow7 + (0.999 * fRec2[1])); - double fTemp1 = (fTemp0 * fRec2[0]); + double fTemp1 = (double)input9[i]; + fRec2[0] = (fSlow13 + (0.999 * fRec2[1])); + double fTemp2 = (fTemp1 * fRec2[0]); fRec3[0] = ((iSlow4)?0:min(fSlow5, (fRec3[1] + 1))); fRec4[0] = ((iSlow6)?fSlow5:max((double)0, (fRec4[1] + -1))); - double fTemp2 = (double)input2[i]; - double fTemp3 = (fTemp2 * fRec2[0]); - double fTemp4 = (double)input1[i]; - double fTemp5 = (fTemp4 * fRec2[0]); - double fTemp6 = (double)input3[i]; - double fTemp7 = (fTemp6 * fRec2[0]); - double fTemp8 = (double)input6[i]; - double fTemp9 = (fTemp8 * fRec2[0]); - double fTemp10 = (double)input7[i]; - double fTemp11 = (fTemp10 * fRec2[0]); - double fTemp12 = (double)input5[i]; + double fTemp3 = (double)input10[i]; + double fTemp4 = (fTemp3 * fRec2[0]); + double fTemp5 = (double)input11[i]; + double fTemp6 = (fTemp5 * fRec2[0]); + double fTemp7 = (double)input13[i]; + double fTemp8 = (fTemp7 * fRec2[0]); + double fTemp9 = (double)input15[i]; + double fTemp10 = (fTemp9 * fRec2[0]); + double fTemp11 = (fTemp0 * fRec2[0]); + double fTemp12 = (double)input1[i]; double fTemp13 = (fTemp12 * fRec2[0]); - double fTemp14 = (double)input4[i]; + double fTemp14 = (double)input2[i]; double fTemp15 = (fTemp14 * fRec2[0]); - double fTemp16 = (double)input8[i]; + double fTemp16 = (double)input3[i]; double fTemp17 = (fTemp16 * fRec2[0]); - double fTemp18 = (double)input12[i]; + double fTemp18 = (double)input6[i]; double fTemp19 = (fTemp18 * fRec2[0]); - double fTemp20 = (double)input14[i]; + double fTemp20 = (double)input4[i]; double fTemp21 = (fTemp20 * fRec2[0]); - double fTemp22 = (double)input11[i]; + double fTemp22 = (double)input5[i]; double fTemp23 = (fTemp22 * fRec2[0]); - double fTemp24 = (double)input13[i]; + double fTemp24 = (double)input7[i]; double fTemp25 = (fTemp24 * fRec2[0]); - double fTemp26 = (double)input9[i]; + double fTemp26 = (double)input8[i]; double fTemp27 = (fTemp26 * fRec2[0]); - double fTemp28 = (double)input10[i]; + double fTemp28 = (double)input12[i]; double fTemp29 = (fTemp28 * fRec2[0]); - double fTemp30 = (double)input15[i]; + double fTemp30 = (double)input14[i]; double fTemp31 = (fTemp30 * fRec2[0]); - double fTemp32 = (((((((iSlow1)?(fSlow3 * (fTemp1 * fRec3[0])):(fSlow3 * (fTemp1 * fRec4[0]))) + (1.7320508075688772 * ((fSlow9 * ((iSlow1)?(fSlow3 * (fTemp3 * fRec3[0])):(fSlow3 * (fTemp3 * fRec4[0])))) + (fSlow10 * ((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp5 * fRec3[0])):(fSlow3 * (fTemp5 * fRec4[0])))) + (fSlow13 * ((iSlow1)?(fSlow3 * (fTemp7 * fRec3[0])):(fSlow3 * (fTemp7 * fRec4[0]))))))))) + (fSlow16 * ((iSlow1)?(fSlow3 * (fTemp9 * fRec3[0])):(fSlow3 * (fTemp9 * fRec4[0]))))) + (1.9364916731037085 * ((fSlow17 * ((fSlow13 * ((iSlow1)?(fSlow3 * (fTemp11 * fRec3[0])):(fSlow3 * (fTemp11 * fRec4[0])))) + (fSlow12 * ((iSlow1)?(fSlow3 * (fTemp13 * fRec3[0])):(fSlow3 * (fTemp13 * fRec4[0])))))) + (fSlow18 * ((fSlow20 * ((iSlow1)?(fSlow3 * (fTemp15 * fRec3[0])):(fSlow3 * (fTemp15 * fRec4[0])))) + (fSlow21 * ((iSlow1)?(fSlow3 * (fTemp17 * fRec3[0])):(fSlow3 * (fTemp17 * fRec4[0]))))))))) + (fSlow9 * ((fSlow24 * ((iSlow1)?(fSlow3 * (fTemp19 * fRec3[0])):(fSlow3 * (fTemp19 * fRec4[0])))) + (fSlow26 * ((iSlow1)?(fSlow3 * (fTemp21 * fRec3[0])):(fSlow3 * (fTemp21 * fRec4[0]))))))) + (fSlow10 * ((fSlow28 * ((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp23 * fRec3[0])):(fSlow3 * (fTemp23 * fRec4[0])))) + (fSlow13 * ((iSlow1)?(fSlow3 * (fTemp25 * fRec3[0])):(fSlow3 * (fTemp25 * fRec4[0])))))) + (fSlow10 * (((fSlow31 * ((iSlow1)?(fSlow3 * (fTemp27 * fRec3[0])):(fSlow3 * (fTemp27 * fRec4[0])))) + (fSlow32 * ((iSlow1)?(fSlow3 * (fTemp29 * fRec3[0])):(fSlow3 * (fTemp29 * fRec4[0]))))) + (fSlow34 * ((iSlow1)?(fSlow3 * (fTemp31 * fRec3[0])):(fSlow3 * (fTemp31 * fRec4[0]))))))))); + double fTemp32 = ((fSlow8 * ((((fSlow8 * ((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp2 * fRec3[0])):(fSlow3 * (fTemp2 * fRec4[0])))) + (fSlow17 * ((iSlow1)?(fSlow3 * (fTemp4 * fRec3[0])):(fSlow3 * (fTemp4 * fRec4[0])))))) + (fSlow22 * ((iSlow1)?(fSlow3 * (fTemp6 * fRec3[0])):(fSlow3 * (fTemp6 * fRec4[0]))))) + (fSlow24 * ((iSlow1)?(fSlow3 * (fTemp8 * fRec3[0])):(fSlow3 * (fTemp8 * fRec4[0]))))) + (fSlow27 * ((iSlow1)?(fSlow3 * (fTemp10 * fRec3[0])):(fSlow3 * (fTemp10 * fRec4[0])))))) + ((((((iSlow1)?(fSlow3 * (fTemp11 * fRec3[0])):(fSlow3 * (fTemp11 * fRec4[0]))) + (1.7320508075688772 * (((fSlow28 * ((iSlow1)?(fSlow3 * (fTemp13 * fRec3[0])):(fSlow3 * (fTemp13 * fRec4[0])))) + (fSlow14 * ((iSlow1)?(fSlow3 * (fTemp15 * fRec3[0])):(fSlow3 * (fTemp15 * fRec4[0]))))) + (fSlow29 * ((iSlow1)?(fSlow3 * (fTemp17 * fRec3[0])):(fSlow3 * (fTemp17 * fRec4[0]))))))) + (fSlow31 * ((iSlow1)?(fSlow3 * (fTemp19 * fRec3[0])):(fSlow3 * (fTemp19 * fRec4[0]))))) + (1.9364916731037085 * ((((fSlow32 * ((iSlow1)?(fSlow3 * (fTemp21 * fRec3[0])):(fSlow3 * (fTemp21 * fRec4[0])))) + (fSlow34 * ((iSlow1)?(fSlow3 * (fTemp23 * fRec3[0])):(fSlow3 * (fTemp23 * fRec4[0]))))) + (fSlow35 * ((iSlow1)?(fSlow3 * (fTemp25 * fRec3[0])):(fSlow3 * (fTemp25 * fRec4[0]))))) + (fSlow37 * ((iSlow1)?(fSlow3 * (fTemp27 * fRec3[0])):(fSlow3 * (fTemp27 * fRec4[0]))))))) + (fSlow14 * ((fSlow39 * ((iSlow1)?(fSlow3 * (fTemp29 * fRec3[0])):(fSlow3 * (fTemp29 * fRec4[0])))) + (fSlow40 * ((iSlow1)?(fSlow3 * (fTemp31 * fRec3[0])):(fSlow3 * (fTemp31 * fRec4[0])))))))); output0[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp0 * fRec0[0])):(fSlow3 * (fTemp0 * fRec1[0]))) + (0.07957747154594767 * fTemp32)); - output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp4 * fRec0[0])):(fSlow3 * (fTemp4 * fRec1[0]))) + (fSlow35 * fTemp32)); - output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp2 * fRec0[0])):(fSlow3 * (fTemp2 * fRec1[0]))) + (fSlow36 * fTemp32)); - output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp6 * fRec0[0])):(fSlow3 * (fTemp6 * fRec1[0]))) + (fSlow37 * fTemp32)); - output4[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp14 * fRec0[0])):(fSlow3 * (fTemp14 * fRec1[0]))) + (fSlow39 * fTemp32)); - output5[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp12 * fRec0[0])):(fSlow3 * (fTemp12 * fRec1[0]))) + (fSlow40 * fTemp32)); - output6[i] = (FAUSTFLOAT)((fSlow41 * fTemp32) + ((iSlow1)?(fSlow3 * (fTemp8 * fRec0[0])):(fSlow3 * (fTemp8 * fRec1[0])))); - output7[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp10 * fRec0[0])):(fSlow3 * (fTemp10 * fRec1[0]))) + (fSlow42 * fTemp32)); - output8[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp16 * fRec0[0])):(fSlow3 * (fTemp16 * fRec1[0]))) + (fSlow43 * fTemp32)); - output9[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp26 * fRec0[0])):(fSlow3 * (fTemp26 * fRec1[0]))) + (fSlow45 * fTemp32)); - output10[i] = (FAUSTFLOAT)((fSlow46 * fTemp32) + ((iSlow1)?(fSlow3 * (fTemp28 * fRec0[0])):(fSlow3 * (fTemp28 * fRec1[0])))); - output11[i] = (FAUSTFLOAT)((fSlow47 * fTemp32) + ((iSlow1)?(fSlow3 * (fTemp22 * fRec0[0])):(fSlow3 * (fTemp22 * fRec1[0])))); - output12[i] = (FAUSTFLOAT)((fSlow48 * fTemp32) + ((iSlow1)?(fSlow3 * (fTemp18 * fRec0[0])):(fSlow3 * (fTemp18 * fRec1[0])))); - output13[i] = (FAUSTFLOAT)((fSlow49 * fTemp32) + ((iSlow1)?(fSlow3 * (fTemp24 * fRec0[0])):(fSlow3 * (fTemp24 * fRec1[0])))); - output14[i] = (FAUSTFLOAT)((fSlow50 * fTemp32) + ((iSlow1)?(fSlow3 * (fTemp20 * fRec0[0])):(fSlow3 * (fTemp20 * fRec1[0])))); - output15[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp30 * fRec0[0])):(fSlow3 * (fTemp30 * fRec1[0]))) + (fSlow51 * fTemp32)); + output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp12 * fRec0[0])):(fSlow3 * (fTemp12 * fRec1[0]))) + (fSlow41 * fTemp32)); + output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp14 * fRec0[0])):(fSlow3 * (fTemp14 * fRec1[0]))) + (fSlow42 * fTemp32)); + output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp16 * fRec0[0])):(fSlow3 * (fTemp16 * fRec1[0]))) + (fSlow43 * fTemp32)); + output4[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp20 * fRec0[0])):(fSlow3 * (fTemp20 * fRec1[0]))) + (fSlow44 * fTemp32)); + output5[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp22 * fRec0[0])):(fSlow3 * (fTemp22 * fRec1[0]))) + (fSlow45 * fTemp32)); + output6[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp18 * fRec0[0])):(fSlow3 * (fTemp18 * fRec1[0]))) + (fSlow46 * fTemp32)); + output7[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp24 * fRec0[0])):(fSlow3 * (fTemp24 * fRec1[0]))) + (fSlow47 * fTemp32)); + output8[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp26 * fRec0[0])):(fSlow3 * (fTemp26 * fRec1[0]))) + (fSlow48 * fTemp32)); + output9[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp1 * fRec0[0])):(fSlow3 * (fTemp1 * fRec1[0]))) + (fSlow50 * fTemp32)); + output10[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp3 * fRec0[0])):(fSlow3 * (fTemp3 * fRec1[0]))) + (fSlow52 * fTemp32)); + output11[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp5 * fRec0[0])):(fSlow3 * (fTemp5 * fRec1[0]))) + (fSlow53 * fTemp32)); + output12[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp28 * fRec0[0])):(fSlow3 * (fTemp28 * fRec1[0]))) + (fSlow54 * fTemp32)); + output13[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp7 * fRec0[0])):(fSlow3 * (fTemp7 * fRec1[0]))) + (fSlow55 * fTemp32)); + output14[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp30 * fRec0[0])):(fSlow3 * (fTemp30 * fRec1[0]))) + (fSlow56 * fTemp32)); + output15[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp9 * fRec0[0])):(fSlow3 * (fTemp9 * fRec1[0]))) + (fSlow57 * fTemp32)); // post processing fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; @@ -936,7 +889,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -968,7 +921,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -991,9 +944,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1019,9 +972,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1117,7 +1070,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1177,19 +1130,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1200,10 +1154,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOABeamDirac2Hoa4.cpp b/source/HOAUGens/HOABeamDirac2Hoa4.cpp index dcc22cc65b..83c79bb220 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa4.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa4.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOABeamDirac2Hoa4" +// name: "HOABeamDirac2HOA4" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -635,23 +582,23 @@ class ControlAllocator : public UI class mydsp : public dsp { private: - FAUSTFLOAT fslider0; FAUSTFLOAT fcheckbox0; double fConst0; double fConst1; FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; double fRec0[2]; double fRec1[2]; - double fRec2[2]; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; FAUSTFLOAT fslider2; + double fRec2[2]; double fRec3[2]; double fRec4[2]; int fSamplingFreq; public: virtual void metadata(Meta* m) { - m->declare("name", "HOABeamDirac2Hoa4"); + m->declare("name", "HOABeamDirac2HOA4"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -676,15 +623,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 25; } @@ -693,13 +640,13 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (1.0 / fConst0); } virtual void instanceResetUserInterface() { - fslider0 = 0.0; fcheckbox0 = 0.0; fentry0 = 1.0; + fslider0 = 0.0; fslider1 = 0.0; fslider2 = 0.0; } @@ -734,98 +681,102 @@ class mydsp : public dsp { ui_interface->declare(&fentry0, "3", ""); ui_interface->declare(&fentry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider1, "4", ""); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider2, "4", ""); + ui_interface->declare(&fslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider2, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.1); ui_interface->declare(&fslider0, "6", ""); ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fslider0); - double fSlow1 = sin(fSlow0); - double fSlow2 = faustpower<2>(fSlow1); - double fSlow3 = ((((35 * fSlow2) + -30) * fSlow2) + 3); - double fSlow4 = (0.375 * fSlow3); - double fSlow5 = double(fcheckbox0); - int iSlow6 = int(fSlow5); - double fSlow7 = double(fentry0); - double fSlow8 = (fConst1 / fSlow7); - double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - int iSlow10 = int(((1 - fSlow5) > 0)); - double fSlow11 = (fConst0 * fSlow7); - int iSlow12 = int((fSlow5 > 0)); - double fSlow13 = (7 * fSlow2); - double fSlow14 = sin((2 * fSlow0)); - double fSlow15 = ((fSlow13 + -3) * fSlow14); - double fSlow16 = (1.1858541225631423 * fSlow15); - double fSlow17 = double(fslider2); - double fSlow18 = cos(fSlow17); - double fSlow19 = sin(fSlow17); - double fSlow20 = cos(fSlow0); - double fSlow21 = (5 * fSlow2); - double fSlow22 = (fSlow21 + -1); - double fSlow23 = (1.620185174601965 * fSlow22); - double fSlow24 = (2 * fSlow17); - double fSlow25 = cos(fSlow24); - double fSlow26 = (fSlow13 + -1); - double fSlow27 = (1.6770509831248424 * (fSlow25 * fSlow26)); - double fSlow28 = (3 * fSlow17); - double fSlow29 = sin(fSlow28); - double fSlow30 = (fSlow20 * fSlow29); - double fSlow31 = (2.091650066335189 * fSlow30); - double fSlow32 = sin(fSlow24); - double fSlow33 = (5.123475382979799 * (fSlow1 * fSlow32)); - double fSlow34 = cos(fSlow28); - double fSlow35 = (2.091650066335189 * (fSlow20 * fSlow34)); - double fSlow36 = faustpower<2>(fSlow20); - double fSlow37 = (4 * fSlow17); - double fSlow38 = sin(fSlow37); - double fSlow39 = (2.218529918662356 * (fSlow36 * fSlow38)); - double fSlow40 = (1.6770509831248424 * (fSlow32 * fSlow26)); - double fSlow41 = (6.274950199005566 * ((fSlow20 * fSlow1) * fSlow34)); - double fSlow42 = cos(fSlow37); - double fSlow43 = (2.218529918662356 * (fSlow36 * fSlow42)); - double fSlow44 = ((3 * fSlow2) + -1); - double fSlow45 = (1.118033988749895 * fSlow44); - double fSlow46 = (fSlow21 + -3); - double fSlow47 = (1.3228756555322954 * fSlow46); - double fSlow48 = (5.123475382979799 * fSlow25); - double fSlow49 = (6.274950199005566 * fSlow30); - double fSlow50 = (fSlow20 * fSlow19); - double fSlow51 = (0.13783222385544802 * fSlow50); - double fSlow52 = (0.13783222385544802 * fSlow1); - double fSlow53 = (fSlow20 * fSlow18); - double fSlow54 = (0.13783222385544802 * fSlow53); - double fSlow55 = (fSlow36 * fSlow32); - double fSlow56 = (0.15410111101537496 * fSlow55); - double fSlow57 = (0.15410111101537496 * (fSlow14 * fSlow19)); - double fSlow58 = (0.08897031792714714 * fSlow44); - double fSlow59 = (0.15410111101537496 * (fSlow14 * fSlow18)); - double fSlow60 = (fSlow36 * fSlow25); - double fSlow61 = (0.15410111101537496 * fSlow60); - double fSlow62 = faustpower<3>(fSlow20); - double fSlow63 = (0.16644822363786807 * (fSlow62 * fSlow29)); - double fSlow64 = (fSlow36 * fSlow1); - double fSlow65 = (0.4077132165054383 * (fSlow64 * fSlow32)); - double fSlow66 = (0.12893023963105413 * (fSlow50 * fSlow22)); - double fSlow67 = (0.10527109983694811 * (fSlow1 * fSlow46)); - double fSlow68 = (0.12893023963105413 * (fSlow53 * fSlow22)); - double fSlow69 = (0.4077132165054383 * (fSlow64 * fSlow25)); - double fSlow70 = (0.16644822363786807 * (fSlow62 * fSlow34)); - double fSlow71 = faustpower<4>(fSlow20); - double fSlow72 = (0.17654500147618726 * (fSlow71 * fSlow38)); - double fSlow73 = (fSlow62 * fSlow1); - double fSlow74 = (0.4993446709136041 * (fSlow73 * fSlow29)); - double fSlow75 = (0.1334554768907207 * (fSlow55 * fSlow26)); - double fSlow76 = (0.0943672726959132 * (fSlow15 * fSlow19)); - double fSlow77 = (0.029841551829730376 * fSlow3); - double fSlow78 = (0.0943672726959132 * (fSlow15 * fSlow18)); - double fSlow79 = (0.1334554768907207 * (fSlow60 * fSlow26)); - double fSlow80 = (0.4993446709136041 * (fSlow73 * fSlow34)); - double fSlow81 = (0.17654500147618726 * (fSlow71 * fSlow42)); + double fSlow0 = double(fcheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = int(((1 - fSlow0) > 0)); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = int((fSlow0 > 0)); + double fSlow7 = double(fslider0); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fslider1); + double fSlow10 = (3 * fSlow9); + double fSlow11 = sin(fSlow10); + double fSlow12 = (2.091650066335189 * (fSlow8 * fSlow11)); + double fSlow13 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider2)))); + double fSlow14 = sin(fSlow7); + double fSlow15 = (2 * fSlow9); + double fSlow16 = sin(fSlow15); + double fSlow17 = (5.123475382979799 * (fSlow14 * fSlow16)); + double fSlow18 = sin(fSlow9); + double fSlow19 = faustpower<2>(fSlow14); + double fSlow20 = (5 * fSlow19); + double fSlow21 = (fSlow20 + -1); + double fSlow22 = (1.620185174601965 * (fSlow18 * fSlow21)); + double fSlow23 = cos(fSlow9); + double fSlow24 = (1.620185174601965 * (fSlow23 * fSlow21)); + double fSlow25 = faustpower<2>(fSlow8); + double fSlow26 = cos(fSlow10); + double fSlow27 = (2.091650066335189 * (fSlow25 * fSlow26)); + double fSlow28 = faustpower<3>(fSlow8); + double fSlow29 = (4 * fSlow9); + double fSlow30 = sin(fSlow29); + double fSlow31 = (2.218529918662356 * (fSlow28 * fSlow30)); + double fSlow32 = (7 * fSlow19); + double fSlow33 = (fSlow32 + -1); + double fSlow34 = (1.6770509831248424 * ((fSlow8 * fSlow16) * fSlow33)); + double fSlow35 = cos(fSlow15); + double fSlow36 = (1.6770509831248424 * ((fSlow8 * fSlow35) * fSlow33)); + double fSlow37 = cos(fSlow29); + double fSlow38 = (2.218529918662356 * (fSlow28 * fSlow37)); + double fSlow39 = (fSlow20 + -3); + double fSlow40 = (1.3228756555322954 * fSlow39); + double fSlow41 = (fSlow25 * fSlow35); + double fSlow42 = (5.123475382979799 * fSlow41); + double fSlow43 = (fSlow28 * fSlow11); + double fSlow44 = (6.274950199005566 * fSlow43); + double fSlow45 = (fSlow28 * fSlow26); + double fSlow46 = (6.274950199005566 * fSlow45); + double fSlow47 = sin((2 * fSlow7)); + double fSlow48 = (fSlow32 + -3); + double fSlow49 = (1.1858541225631423 * (fSlow47 * fSlow48)); + double fSlow50 = (fSlow8 * fSlow18); + double fSlow51 = (fSlow8 * fSlow23); + double fSlow52 = ((3 * fSlow19) + -1); + double fSlow53 = (1.118033988749895 * fSlow52); + double fSlow54 = (fSlow25 * fSlow16); + double fSlow55 = (fSlow47 * fSlow18); + double fSlow56 = (fSlow47 * fSlow23); + double fSlow57 = ((fSlow19 * ((35 * fSlow19) + -30)) + 3); + double fSlow58 = (0.375 * fSlow57); + double fSlow59 = (0.13783222385544802 * fSlow50); + double fSlow60 = (0.13783222385544802 * fSlow14); + double fSlow61 = (0.13783222385544802 * fSlow51); + double fSlow62 = (0.15410111101537496 * fSlow54); + double fSlow63 = (0.15410111101537496 * fSlow55); + double fSlow64 = (0.08897031792714714 * fSlow52); + double fSlow65 = (0.15410111101537496 * fSlow56); + double fSlow66 = (0.15410111101537496 * fSlow41); + double fSlow67 = (0.16644822363786807 * fSlow43); + double fSlow68 = (fSlow25 * fSlow14); + double fSlow69 = (0.4077132165054383 * (fSlow68 * fSlow16)); + double fSlow70 = (0.12893023963105413 * (fSlow50 * fSlow21)); + double fSlow71 = (0.10527109983694811 * (fSlow14 * fSlow39)); + double fSlow72 = (0.12893023963105413 * (fSlow51 * fSlow21)); + double fSlow73 = (0.4077132165054383 * (fSlow68 * fSlow35)); + double fSlow74 = (0.16644822363786807 * fSlow45); + double fSlow75 = faustpower<4>(fSlow8); + double fSlow76 = (0.17654500147618726 * (fSlow75 * fSlow30)); + double fSlow77 = (fSlow28 * fSlow14); + double fSlow78 = (0.4993446709136041 * (fSlow77 * fSlow11)); + double fSlow79 = (0.1334554768907207 * (fSlow54 * fSlow33)); + double fSlow80 = (0.0943672726959132 * (fSlow55 * fSlow48)); + double fSlow81 = (0.029841551829730376 * fSlow57); + double fSlow82 = (0.0943672726959132 * (fSlow56 * fSlow48)); + double fSlow83 = (0.1334554768907207 * (fSlow41 * fSlow33)); + double fSlow84 = (0.4993446709136041 * (fSlow77 * fSlow26)); + double fSlow85 = (0.17654500147618726 * (fSlow75 * fSlow37)); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -877,64 +828,87 @@ class mydsp : public dsp { FAUSTFLOAT* output23 = output[23]; FAUSTFLOAT* output24 = output[24]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1169,7 +1143,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1229,19 +1203,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1252,10 +1227,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOABeamDirac2Hoa5.cpp b/source/HOAUGens/HOABeamDirac2Hoa5.cpp index 52d1fda7bf..8ef247234b 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa5.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa5.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOABeamDirac2Hoa5" +// name: "HOABeamDirac2HOA5" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -635,23 +582,28 @@ class ControlAllocator : public UI class mydsp : public dsp { private: - FAUSTFLOAT fslider0; FAUSTFLOAT fcheckbox0; double fConst0; double fConst1; FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; double fRec0[2]; double fRec1[2]; - double fRec2[2]; + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; FAUSTFLOAT fslider2; + double fRec2[2]; double fRec3[2]; double fRec4[2]; int fSamplingFreq; public: virtual void metadata(Meta* m) { - m->declare("name", "HOABeamDirac2Hoa5"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("name", "HOABeamDirac2HOA5"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -666,25 +618,20 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); m->declare("lib/gui.lib/name", "GUI Library"); m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 36; } @@ -693,13 +640,13 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (1.0 / fConst0); } virtual void instanceResetUserInterface() { - fslider0 = 0.0; fcheckbox0 = 0.0; fentry0 = 1.0; + fslider0 = 0.0; fslider1 = 0.0; fslider2 = 0.0; } @@ -734,133 +681,136 @@ class mydsp : public dsp { ui_interface->declare(&fentry0, "3", ""); ui_interface->declare(&fentry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider1, "4", ""); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fslider2, "4", ""); + ui_interface->declare(&fslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fslider2, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.1); ui_interface->declare(&fslider0, "6", ""); ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fslider0); - double fSlow1 = sin(fSlow0); - double fSlow2 = faustpower<2>(fSlow1); - double fSlow3 = ((3 * fSlow2) + -1); - double fSlow4 = double(fcheckbox0); - int iSlow5 = int(fSlow4); - double fSlow6 = double(fentry0); - double fSlow7 = (fConst1 / fSlow6); - double fSlow8 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - int iSlow9 = int(((1 - fSlow4) > 0)); - double fSlow10 = (fConst0 * fSlow6); - int iSlow11 = int((fSlow4 > 0)); - double fSlow12 = cos(fSlow0); - double fSlow13 = faustpower<2>(fSlow12); - double fSlow14 = (fSlow13 * fSlow1); - double fSlow15 = (8.496322733983215 * fSlow14); - double fSlow16 = double(fslider2); - double fSlow17 = (2 * fSlow16); - double fSlow18 = cos(fSlow17); - double fSlow19 = sin(fSlow17); - double fSlow20 = (5 * fSlow2); + double fSlow0 = double(fcheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = int(((1 - fSlow0) > 0)); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = int((fSlow0 > 0)); + double fSlow7 = double(fslider0); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fslider1); + double fSlow10 = (3 * fSlow9); + double fSlow11 = sin(fSlow10); + double fSlow12 = (2.091650066335189 * (fSlow8 * fSlow11)); + double fSlow13 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider2)))); + double fSlow14 = sin(fSlow7); + double fSlow15 = (2 * fSlow9); + double fSlow16 = sin(fSlow15); + double fSlow17 = (5.123475382979799 * (fSlow14 * fSlow16)); + double fSlow18 = sin(fSlow9); + double fSlow19 = faustpower<2>(fSlow14); + double fSlow20 = (5 * fSlow19); double fSlow21 = (fSlow20 + -1); - double fSlow22 = (1.620185174601965 * fSlow21); - double fSlow23 = sin(fSlow16); - double fSlow24 = cos(fSlow16); - double fSlow25 = ((fSlow2 * ((21 * fSlow2) + -14)) + 1); - double fSlow26 = (1.6056540723331412 * fSlow25); - double fSlow27 = (3 * fSlow16); - double fSlow28 = sin(fSlow27); - double fSlow29 = (fSlow12 * fSlow28); - double fSlow30 = (2.091650066335189 * fSlow29); - double fSlow31 = (5.123475382979799 * (fSlow1 * fSlow19)); - double fSlow32 = cos(fSlow27); - double fSlow33 = (fSlow12 * fSlow32); - double fSlow34 = (2.091650066335189 * fSlow33); - double fSlow35 = (4 * fSlow16); - double fSlow36 = sin(fSlow35); - double fSlow37 = (fSlow13 * fSlow36); - double fSlow38 = (2.218529918662356 * fSlow37); - double fSlow39 = (7 * fSlow2); - double fSlow40 = (fSlow39 + -1); - double fSlow41 = (1.6770509831248424 * (fSlow19 * fSlow40)); - double fSlow42 = (1.6770509831248424 * (fSlow18 * fSlow40)); - double fSlow43 = cos(fSlow35); - double fSlow44 = (2.218529918662356 * (fSlow13 * fSlow43)); - double fSlow45 = faustpower<3>(fSlow12); - double fSlow46 = (5 * fSlow16); - double fSlow47 = sin(fSlow46); - double fSlow48 = (2.3268138086232857 * (fSlow45 * fSlow47)); - double fSlow49 = ((9 * fSlow2) + -1); - double fSlow50 = (1.734304615688951 * (fSlow29 * fSlow49)); - double fSlow51 = (1.734304615688951 * (fSlow33 * fSlow49)); - double fSlow52 = (7.358031326380718 * (fSlow14 * fSlow43)); - double fSlow53 = cos(fSlow46); - double fSlow54 = (2.3268138086232857 * (fSlow45 * fSlow53)); - double fSlow55 = sin((2 * fSlow0)); - double fSlow56 = ((fSlow2 * ((35 * fSlow2) + -30)) + 3); - double fSlow57 = (0.375 * fSlow56); - double fSlow58 = (fSlow39 + -3); - double fSlow59 = (1.1858541225631423 * (fSlow55 * fSlow58)); - double fSlow60 = (fSlow20 + -3); - double fSlow61 = (1.3228756555322954 * fSlow60); - double fSlow62 = (6.274950199005566 * fSlow29); - double fSlow63 = (5.123475382979799 * fSlow18); - double fSlow64 = (6.274950199005566 * fSlow33); - double fSlow65 = (7.358031326380718 * fSlow37); - double fSlow66 = ((fSlow2 * ((63 * fSlow2) + -70)) + 15); - double fSlow67 = (0.414578098794425 * fSlow66); - double fSlow68 = (fSlow12 * fSlow23); - double fSlow69 = (0.13783222385544802 * fSlow68); - double fSlow70 = (0.13783222385544802 * fSlow1); - double fSlow71 = (fSlow12 * fSlow24); - double fSlow72 = (0.13783222385544802 * fSlow71); - double fSlow73 = (fSlow13 * fSlow19); - double fSlow74 = (0.15410111101537496 * fSlow73); - double fSlow75 = (fSlow55 * fSlow23); - double fSlow76 = (0.15410111101537496 * fSlow75); - double fSlow77 = (0.08897031792714714 * fSlow3); - double fSlow78 = (fSlow55 * fSlow24); - double fSlow79 = (0.15410111101537496 * fSlow78); - double fSlow80 = (fSlow13 * fSlow18); - double fSlow81 = (0.15410111101537496 * fSlow80); - double fSlow82 = (fSlow45 * fSlow28); - double fSlow83 = (0.16644822363786807 * fSlow82); - double fSlow84 = (fSlow14 * fSlow19); - double fSlow85 = (0.4077132165054383 * fSlow84); - double fSlow86 = (0.12893023963105413 * (fSlow68 * fSlow21)); - double fSlow87 = (0.10527109983694811 * (fSlow1 * fSlow60)); - double fSlow88 = (0.12893023963105413 * (fSlow71 * fSlow21)); - double fSlow89 = (fSlow14 * fSlow18); - double fSlow90 = (0.4077132165054383 * fSlow89); - double fSlow91 = (fSlow45 * fSlow32); - double fSlow92 = (0.16644822363786807 * fSlow91); - double fSlow93 = faustpower<4>(fSlow12); - double fSlow94 = (0.17654500147618726 * (fSlow93 * fSlow36)); - double fSlow95 = (fSlow45 * fSlow1); - double fSlow96 = (0.4993446709136041 * (fSlow95 * fSlow28)); - double fSlow97 = (0.1334554768907207 * (fSlow73 * fSlow40)); - double fSlow98 = (0.0943672726959132 * (fSlow75 * fSlow58)); - double fSlow99 = (0.029841551829730376 * fSlow56); - double fSlow100 = (0.0943672726959132 * (fSlow78 * fSlow58)); - double fSlow101 = (0.1334554768907207 * (fSlow80 * fSlow40)); - double fSlow102 = (0.4993446709136041 * (fSlow95 * fSlow32)); - double fSlow103 = (0.17654500147618726 * (fSlow93 * fSlow43)); - double fSlow104 = faustpower<5>(fSlow12); - double fSlow105 = (0.18516195964843765 * (fSlow104 * fSlow47)); - double fSlow106 = (fSlow93 * fSlow1); - double fSlow107 = (0.5855335285092532 * (fSlow106 * fSlow36)); - double fSlow108 = (0.13801157620699323 * (fSlow82 * fSlow49)); - double fSlow109 = (0.6761158806087376 * (fSlow84 * fSlow3)); - double fSlow110 = (0.12777389125372554 * (fSlow68 * fSlow25)); - double fSlow111 = (0.03299107686038644 * (fSlow1 * fSlow66)); - double fSlow112 = (0.12777389125372554 * (fSlow71 * fSlow25)); - double fSlow113 = (0.6761158806087376 * (fSlow89 * fSlow3)); - double fSlow114 = (0.13801157620699323 * (fSlow91 * fSlow49)); - double fSlow115 = (0.5855335285092532 * (fSlow106 * fSlow43)); - double fSlow116 = (0.18516195964843765 * (fSlow104 * fSlow53)); + double fSlow22 = (1.620185174601965 * (fSlow18 * fSlow21)); + double fSlow23 = cos(fSlow9); + double fSlow24 = (1.620185174601965 * (fSlow23 * fSlow21)); + double fSlow25 = faustpower<2>(fSlow8); + double fSlow26 = cos(fSlow10); + double fSlow27 = (fSlow25 * fSlow26); + double fSlow28 = (2.091650066335189 * fSlow27); + double fSlow29 = faustpower<3>(fSlow8); + double fSlow30 = (4 * fSlow9); + double fSlow31 = sin(fSlow30); + double fSlow32 = (2.218529918662356 * (fSlow29 * fSlow31)); + double fSlow33 = (7 * fSlow19); + double fSlow34 = (fSlow33 + -1); + double fSlow35 = (1.6770509831248424 * ((fSlow8 * fSlow16) * fSlow34)); + double fSlow36 = cos(fSlow15); + double fSlow37 = (1.6770509831248424 * ((fSlow8 * fSlow36) * fSlow34)); + double fSlow38 = cos(fSlow30); + double fSlow39 = (2.218529918662356 * (fSlow29 * fSlow38)); + double fSlow40 = faustpower<4>(fSlow8); + double fSlow41 = (5 * fSlow9); + double fSlow42 = sin(fSlow41); + double fSlow43 = (2.3268138086232857 * (fSlow40 * fSlow42)); + double fSlow44 = ((9 * fSlow19) + -1); + double fSlow45 = (1.734304615688951 * ((fSlow25 * fSlow11) * fSlow44)); + double fSlow46 = ((fSlow19 * ((21 * fSlow19) + -14)) + 1); + double fSlow47 = (1.6056540723331412 * (fSlow18 * fSlow46)); + double fSlow48 = (1.6056540723331412 * (fSlow23 * fSlow46)); + double fSlow49 = (1.734304615688951 * (fSlow27 * fSlow44)); + double fSlow50 = cos(fSlow41); + double fSlow51 = (2.3268138086232857 * (fSlow40 * fSlow50)); + double fSlow52 = sin((2 * fSlow7)); + double fSlow53 = (fSlow33 + -3); + double fSlow54 = (1.1858541225631423 * (fSlow52 * fSlow53)); + double fSlow55 = ((fSlow19 * ((35 * fSlow19) + -30)) + 3); + double fSlow56 = (0.375 * fSlow55); + double fSlow57 = (fSlow8 * fSlow18); + double fSlow58 = (fSlow8 * fSlow23); + double fSlow59 = (fSlow25 * fSlow16); + double fSlow60 = (fSlow52 * fSlow18); + double fSlow61 = (fSlow52 * fSlow23); + double fSlow62 = (fSlow25 * fSlow36); + double fSlow63 = ((3 * fSlow19) + -1); + double fSlow64 = (fSlow25 * fSlow14); + double fSlow65 = (fSlow64 * fSlow16); + double fSlow66 = (8.496322733983215 * fSlow65); + double fSlow67 = (fSlow64 * fSlow36); + double fSlow68 = (8.496322733983215 * fSlow67); + double fSlow69 = (fSlow20 + -3); + double fSlow70 = (1.3228756555322954 * fSlow69); + double fSlow71 = (5.123475382979799 * fSlow62); + double fSlow72 = (fSlow29 * fSlow11); + double fSlow73 = (6.274950199005566 * fSlow72); + double fSlow74 = (fSlow29 * fSlow26); + double fSlow75 = (6.274950199005566 * fSlow74); + double fSlow76 = (fSlow40 * fSlow31); + double fSlow77 = (7.358031326380718 * fSlow76); + double fSlow78 = ((fSlow19 * ((63 * fSlow19) + -70)) + 15); + double fSlow79 = (0.414578098794425 * fSlow78); + double fSlow80 = (fSlow40 * fSlow38); + double fSlow81 = (7.358031326380718 * fSlow80); + double fSlow82 = (0.13783222385544802 * fSlow57); + double fSlow83 = (0.13783222385544802 * fSlow14); + double fSlow84 = (0.13783222385544802 * fSlow58); + double fSlow85 = (0.15410111101537496 * fSlow59); + double fSlow86 = (0.15410111101537496 * fSlow60); + double fSlow87 = (0.08897031792714714 * fSlow63); + double fSlow88 = (0.15410111101537496 * fSlow61); + double fSlow89 = (0.15410111101537496 * fSlow62); + double fSlow90 = (0.16644822363786807 * fSlow72); + double fSlow91 = (0.4077132165054383 * fSlow65); + double fSlow92 = (0.12893023963105413 * (fSlow57 * fSlow21)); + double fSlow93 = (0.10527109983694811 * (fSlow14 * fSlow69)); + double fSlow94 = (0.12893023963105413 * (fSlow58 * fSlow21)); + double fSlow95 = (0.4077132165054383 * fSlow67); + double fSlow96 = (0.16644822363786807 * fSlow74); + double fSlow97 = (0.17654500147618726 * fSlow76); + double fSlow98 = (fSlow29 * fSlow14); + double fSlow99 = (0.4993446709136041 * (fSlow98 * fSlow11)); + double fSlow100 = (0.1334554768907207 * (fSlow59 * fSlow34)); + double fSlow101 = (0.0943672726959132 * (fSlow60 * fSlow53)); + double fSlow102 = (0.029841551829730376 * fSlow55); + double fSlow103 = (0.0943672726959132 * (fSlow61 * fSlow53)); + double fSlow104 = (0.1334554768907207 * (fSlow62 * fSlow34)); + double fSlow105 = (0.4993446709136041 * (fSlow98 * fSlow26)); + double fSlow106 = (0.17654500147618726 * fSlow80); + double fSlow107 = faustpower<5>(fSlow8); + double fSlow108 = (0.18516195964843765 * (fSlow107 * fSlow42)); + double fSlow109 = (fSlow40 * fSlow14); + double fSlow110 = (0.5855335285092532 * (fSlow109 * fSlow31)); + double fSlow111 = (0.13801157620699323 * (fSlow72 * fSlow44)); + double fSlow112 = (0.6761158806087376 * (fSlow65 * fSlow63)); + double fSlow113 = (0.12777389125372554 * (fSlow57 * fSlow46)); + double fSlow114 = (0.03299107686038644 * (fSlow14 * fSlow78)); + double fSlow115 = (0.12777389125372554 * (fSlow58 * fSlow46)); + double fSlow116 = (0.6761158806087376 * (fSlow67 * fSlow63)); + double fSlow117 = (0.13801157620699323 * (fSlow74 * fSlow44)); + double fSlow118 = (0.5855335285092532 * (fSlow109 * fSlow38)); + double fSlow119 = (0.18516195964843765 * (fSlow107 * fSlow50)); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -934,86 +884,120 @@ class mydsp : public dsp { FAUSTFLOAT* output34 = output[34]; FAUSTFLOAT* output35 = output[35]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1248,7 +1232,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1308,19 +1292,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1331,10 +1316,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOABeamHCardioid2Hoa1.cpp b/source/HOAUGens/HOABeamHCardioid2Hoa1.cpp deleted file mode 100644 index 00307edd3d..0000000000 --- a/source/HOAUGens/HOABeamHCardioid2Hoa1.cpp +++ /dev/null @@ -1,1164 +0,0 @@ -//---------------------------------------------------------- -// name: "HOABeamHCardioid2Hoa1" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("route.lib/name", "Faust Signal Routing Library"); - m->declare("route.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("name", "HOABeamHCardioid2Hoa1"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/name", "Cijk matrix"); - m->declare("lib/cijk.lib/version", "10"); - m->declare("lib/cijk.lib/author", "Pierre Lecomte"); - m->declare("lib/cijk.lib/license", "GPL"); - m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 16; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - } - virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; - } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->declare(0, "3", ""); - ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Order", &fslider0, 0.0, 0.0, 2.0, 1.0); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int(double(fslider0)); - int iSlow1 = int((iSlow0 >= 2)); - double fSlow2 = double(fslider1); - double fSlow3 = sin(fSlow2); - double fSlow4 = cos(fSlow2); - double fSlow5 = double(fslider2); - double fSlow6 = sin(fSlow5); - double fSlow7 = cos(fSlow5); - int iSlow8 = int((iSlow0 >= 1)); - double fSlow9 = faustpower<2>(fSlow4); - double fSlow10 = (2 * fSlow5); - double fSlow11 = cos(fSlow10); - double fSlow12 = (fSlow9 * fSlow11); - double fSlow13 = (0.16666405622891672 * fSlow12); - double fSlow14 = ((3 * faustpower<2>(fSlow3)) + -1); - double fSlow15 = (0.055554711936 * fSlow14); - double fSlow16 = (0.11112 - (fSlow13 + fSlow15)); - double fSlow17 = (0.19245000000000004 * fSlow4); - double fSlow18 = sin((2 * fSlow2)); - double fSlow19 = (0.16666405622891672 * fSlow18); - double fSlow20 = sin(fSlow10); - double fSlow21 = (fSlow9 * fSlow20); - double fSlow22 = (0.16666405622891672 * fSlow21); - double fSlow23 = (fSlow4 * fSlow6); - double fSlow24 = (0.43301700000000004 * fSlow23); - double fSlow25 = (0.19245000000000004 * fSlow3); - double fSlow26 = ((0.111109299648 * fSlow14) + 0.11112); - double fSlow27 = (0.43301700000000004 * fSlow3); - double fSlow28 = (fSlow4 * fSlow20); - double fSlow29 = (0.16666405622891672 * fSlow28); - double fSlow30 = (0.19245000000000004 * fSlow7); - double fSlow31 = (fSlow18 * fSlow7); - double fSlow32 = (0.16666405622891672 * fSlow31); - double fSlow33 = (fSlow13 + (0.11112 - fSlow15)); - double fSlow34 = (fSlow4 * fSlow7); - double fSlow35 = (0.43301700000000004 * fSlow34); - double fSlow36 = (0.2151622795194362 * fSlow28); - double fSlow37 = (0.335413669149 * fSlow4); - double fSlow38 = (0.14907119265000002 * fSlow3); - double fSlow39 = (0.14907119265000002 * fSlow4); - double fSlow40 = (0.2151622795194362 * fSlow18); - double fSlow41 = (0 - (0.08606633430000002 * fSlow23)); - double fSlow42 = (0.124224 * fSlow14); - double fSlow43 = (0.17213247615000002 * fSlow3); - double fSlow44 = (0 - (0.08606633430000002 * fSlow34)); - double fSlow45 = (0 - (0.193651264638 * fSlow23)); - double fSlow46 = (0.387302096259 * fSlow3); - double fSlow47 = (0 - (0.193651264638 * fSlow34)); - double fSlow48 = (0 - (0.14907119265000002 * fSlow23)); - double fSlow49 = (0.14907119265000002 * fSlow7); - double fSlow50 = (0.2151622795194362 * (fSlow4 * fSlow11)); - double fSlow51 = (0 - (0.335413669149 * fSlow23)); - double fSlow52 = (0.335413669149 * fSlow34); - double fSlow53 = (0.17251367312221164 * fSlow9); - double fSlow54 = (0.08908562668799999 * fSlow14); - double fSlow55 = (0.044542895106113686 * fSlow12); - double fSlow56 = (fSlow54 + fSlow55); - double fSlow57 = (fSlow18 * fSlow6); - double fSlow58 = (0.1781713652621752 * fSlow57); - double fSlow59 = (0 - (0.044542895106113686 * fSlow21)); - double fSlow60 = (0 - (0.10910728580834947 * fSlow57)); - double fSlow61 = (0.10910718143999999 * fSlow14); - double fSlow62 = (0 - (0.10910728580834947 * fSlow31)); - double fSlow63 = (0.1781713652621752 * fSlow31); - double fSlow64 = (fSlow54 - fSlow55); - double fSlow65 = (0 - (0.14085684693651698 * fSlow57)); - double fSlow66 = (0 - (0.17251367312221164 * fSlow21)); - double fSlow67 = (0.17251367312221164 * fSlow12); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOABeamHCardioid2Hoa2.cpp b/source/HOAUGens/HOABeamHCardioid2Hoa2.cpp deleted file mode 100644 index 0247914d05..0000000000 --- a/source/HOAUGens/HOABeamHCardioid2Hoa2.cpp +++ /dev/null @@ -1,1258 +0,0 @@ -//---------------------------------------------------------- -// name: "HOABeamHCardioid2Hoa2" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("route.lib/name", "Faust Signal Routing Library"); - m->declare("route.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/name", "Cijk matrix"); - m->declare("lib/cijk.lib/version", "10"); - m->declare("lib/cijk.lib/author", "Pierre Lecomte"); - m->declare("lib/cijk.lib/license", "GPL"); - m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("name", "HOABeamHCardioid2Hoa2"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - } - - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 25; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - } - virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; - } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->declare(0, "3", ""); - ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Order", &fslider0, 0.0, 0.0, 2.0, 1.0); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int(double(fslider0)); - int iSlow1 = int((iSlow0 >= 2)); - double fSlow2 = double(fslider1); - double fSlow3 = sin(fSlow2); - double fSlow4 = cos(fSlow2); - double fSlow5 = double(fslider2); - double fSlow6 = sin(fSlow5); - double fSlow7 = cos(fSlow5); - double fSlow8 = ((3 * faustpower<2>(fSlow3)) + -1); - double fSlow9 = (0.124224 * fSlow8); - double fSlow10 = sin((2 * fSlow2)); - double fSlow11 = faustpower<2>(fSlow4); - double fSlow12 = (2 * fSlow5); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - int iSlow15 = int((iSlow0 >= 1)); - double fSlow16 = (0.16666405622891672 * fSlow10); - double fSlow17 = (0.19245000000000004 * fSlow4); - double fSlow18 = (0.055554711936 * fSlow8); - double fSlow19 = (fSlow11 * fSlow13); - double fSlow20 = (0.16666405622891672 * fSlow19); - double fSlow21 = (0.11112 - (fSlow18 + fSlow20)); - double fSlow22 = (0.14907119265000002 * fSlow3); - double fSlow23 = (0.14907119265000002 * fSlow7); - double fSlow24 = (fSlow4 * fSlow14); - double fSlow25 = (0.16666405622891672 * fSlow24); - double fSlow26 = (fSlow4 * fSlow6); - double fSlow27 = (0 - (0.08606633430000002 * fSlow26)); - double fSlow28 = (0 - (0.14907119265000002 * fSlow26)); - double fSlow29 = (0.43301700000000004 * fSlow6); - double fSlow30 = (0.335413669149 * fSlow7); - double fSlow31 = (0.335413669149 * fSlow3); - double fSlow32 = (0 - (0.193651264638 * fSlow26)); - double fSlow33 = (0 - (0.335413669149 * fSlow26)); - double fSlow34 = ((0.111109299648 * fSlow8) + 0.11112); - double fSlow35 = (0.14907119265000002 * fSlow4); - double fSlow36 = (0.335413669149 * fSlow4); - double fSlow37 = (0.19245000000000004 * fSlow7); - double fSlow38 = (0.14907119265000002 * fSlow6); - double fSlow39 = (fSlow4 * fSlow7); - double fSlow40 = (0 - (0.08606633430000002 * fSlow39)); - double fSlow41 = (fSlow20 + (0.11112 - fSlow18)); - double fSlow42 = (0 - (0.193651264638 * fSlow39)); - double fSlow43 = (0.335413669149 * fSlow6); - double fSlow44 = (0.2151622795194362 * fSlow24); - double fSlow45 = (0.11904563149935221 * fSlow10); - double fSlow46 = (0.079363856448 * fSlow8); - double fSlow47 = (0.11112 - fSlow46); - double fSlow48 = (fSlow11 * fSlow14); - double fSlow49 = (0 - (0.13746223165253885 * fSlow48)); - double fSlow50 = (0.2151622795194362 * fSlow10); - double fSlow51 = (0.039681866111999996 * fSlow8); - double fSlow52 = (0.11904563149935221 * fSlow19); - double fSlow53 = (fSlow51 + (0.11112 - fSlow52)); - double fSlow54 = (0.11904563149935221 * fSlow48); - double fSlow55 = (0.11904563149935221 * fSlow7); - double fSlow56 = (0.06873100824512966 * fSlow6); - double fSlow57 = (fSlow10 * fSlow6); - double fSlow58 = (0 - (0.11904563149935221 * fSlow57)); - double fSlow59 = (0.17213247615000002 * fSlow3); - double fSlow60 = (fSlow46 + 0.11112); - double fSlow61 = (0.06873100824512966 * fSlow10); - double fSlow62 = (0 - (0.13746223165253885 * fSlow19)); - double fSlow63 = (0.387302096259 * fSlow3); - double fSlow64 = ((fSlow51 + fSlow52) + 0.11112); - double fSlow65 = (fSlow4 * fSlow13); - double fSlow66 = (0.2151622795194362 * fSlow65); - double fSlow67 = (fSlow10 * fSlow7); - double fSlow68 = (0.11904563149935221 * fSlow67); - double fSlow69 = (0.335413669149 * fSlow39); - double fSlow70 = (0.17251367312221164 * fSlow4); - double fSlow71 = (0.347186102328 * fSlow4); - double fSlow72 = (0 - (0.03984099900000001 * fSlow39)); - double fSlow73 = (0 - (0.044542895106113686 * fSlow48)); - double fSlow74 = (0.044542895106113686 * fSlow19); - double fSlow75 = (0.08908562668799999 * fSlow8); - double fSlow76 = (fSlow74 + fSlow75); - double fSlow77 = (0.15936380355000002 * fSlow3); - double fSlow78 = (0.1781713652621752 * fSlow10); - double fSlow79 = (0 - (0.08964317934 * fSlow39)); - double fSlow80 = (0.35857228434300004 * fSlow3); - double fSlow81 = (0 - (0.09759004785000003 * fSlow26)); - double fSlow82 = (0 - (0.10910728580834947 * fSlow67)); - double fSlow83 = (0.10910718143999999 * fSlow8); - double fSlow84 = (0 - (0.10910728580834947 * fSlow57)); - double fSlow85 = (0.16903075950000004 * fSlow3); - double fSlow86 = (0 - (0.09759004785000003 * fSlow39)); - double fSlow87 = (0.38032316127 * fSlow3); - double fSlow88 = (0 - (0.219579889581 * fSlow26)); - double fSlow89 = (0 - (0.219579889581 * fSlow39)); - double fSlow90 = (0.13801301565000001 * fSlow4); - double fSlow91 = (0 - (0.03984099900000001 * fSlow26)); - double fSlow92 = (fSlow75 - fSlow74); - double fSlow93 = (0.31053251232900003 * fSlow39); - double fSlow94 = (0 - (0.08964317934 * fSlow26)); - double fSlow95 = (0 - (0.1259881623 * fSlow26)); - double fSlow96 = (0 - (0.14085684693651698 * fSlow57)); - double fSlow97 = (0 - (0.28347631111800004 * fSlow26)); - double fSlow98 = (0 - (0.17251367312221164 * fSlow48)); - double fSlow99 = (0 - (0.15430333080000003 * fSlow26)); - double fSlow100 = (0.15430333080000003 * fSlow7); - double fSlow101 = (0.17251367312221164 * fSlow65); - double fSlow102 = (0 - (0.347186102328 * fSlow26)); - double fSlow103 = (0.347186102328 * fSlow39); - double fSlow104 = (0.18184526118496958 * fSlow11); - double fSlow105 = (0.068731027392 * fSlow8); - double fSlow106 = (0.13746223165253885 * fSlow10); - double fSlow107 = (0 - (0.048600210211011685 * fSlow67)); - double fSlow108 = (0.097200435264 * fSlow8); - double fSlow109 = (0.048600210211011685 * fSlow19); - double fSlow110 = (fSlow108 + fSlow109); - double fSlow111 = (0 - (0.048600210211011685 * fSlow48)); - double fSlow112 = (0.030737437765308104 * fSlow11); - double fSlow113 = (0 - (0.12294996622351191 * fSlow67)); - double fSlow114 = (0 - (0.12294996622351191 * fSlow57)); - double fSlow115 = (0.10647773203199999 * fSlow8); - double fSlow116 = (fSlow108 - fSlow109); - double fSlow117 = (0 - (0.048600210211011685 * fSlow57)); - double fSlow118 = (0.16835609239505758 * fSlow67); - double fSlow119 = (0 - (0.13746223165253885 * fSlow57)); - double fSlow120 = (0.13746223165253885 * fSlow67); - double fSlow121 = (0 - (0.12858399051272834 * fSlow57)); - double fSlow122 = (0 - (0.12858399051272834 * fSlow48)); - double fSlow123 = (0 - (0.18184526118496958 * fSlow48)); - double fSlow124 = (0.18184526118496958 * fSlow19); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOABeamHCardioid2Hoa3.cpp b/source/HOAUGens/HOABeamHCardioid2Hoa3.cpp deleted file mode 100644 index 84bb576c9d..0000000000 --- a/source/HOAUGens/HOABeamHCardioid2Hoa3.cpp +++ /dev/null @@ -1,1404 +0,0 @@ -//---------------------------------------------------------- -// name: "HOABeamHCardioid2Hoa3" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("route.lib/name", "Faust Signal Routing Library"); - m->declare("route.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("name", "HOABeamHCardioid2Hoa3"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/name", "Cijk matrix"); - m->declare("lib/cijk.lib/version", "10"); - m->declare("lib/cijk.lib/author", "Pierre Lecomte"); - m->declare("lib/cijk.lib/license", "GPL"); - m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - } - - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 36; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - } - virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; - } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->declare(0, "3", ""); - ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Order", &fslider0, 0.0, 0.0, 2.0, 1.0); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int(double(fslider0)); - int iSlow1 = int((iSlow0 >= 2)); - double fSlow2 = double(fslider1); - double fSlow3 = sin(fSlow2); - double fSlow4 = cos(fSlow2); - double fSlow5 = double(fslider2); - double fSlow6 = cos(fSlow5); - double fSlow7 = sin(fSlow5); - double fSlow8 = ((3 * faustpower<2>(fSlow3)) + -1); - double fSlow9 = (0.124224 * fSlow8); - double fSlow10 = sin((2 * fSlow2)); - double fSlow11 = faustpower<2>(fSlow4); - double fSlow12 = (2 * fSlow5); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - int iSlow15 = int((iSlow0 >= 1)); - double fSlow16 = (0.14907119265000002 * fSlow6); - double fSlow17 = (0.17251367312221164 * fSlow13); - double fSlow18 = (0.16666405622891672 * fSlow14); - double fSlow19 = (fSlow11 * fSlow14); - double fSlow20 = (0 - (0.17251367312221164 * fSlow19)); - double fSlow21 = (fSlow10 * fSlow7); - double fSlow22 = (0 - (0.14085684693651698 * fSlow21)); - double fSlow23 = (0 - (0.044542895106113686 * fSlow19)); - double fSlow24 = (0 - (0.10910728580834947 * fSlow21)); - double fSlow25 = (0.08908562668799999 * fSlow8); - double fSlow26 = (fSlow11 * fSlow13); - double fSlow27 = (0.044542895106113686 * fSlow26); - double fSlow28 = (fSlow25 + fSlow27); - double fSlow29 = (fSlow4 * fSlow7); - double fSlow30 = (0 - (0.14907119265000002 * fSlow29)); - double fSlow31 = (0.19245000000000004 * fSlow4); - double fSlow32 = (0.16666405622891672 * fSlow10); - double fSlow33 = (0.055554711936 * fSlow8); - double fSlow34 = (0.16666405622891672 * fSlow26); - double fSlow35 = (0.11112 - (fSlow33 + fSlow34)); - double fSlow36 = (0.14907119265000002 * fSlow3); - double fSlow37 = (0 - (0.08606633430000002 * fSlow29)); - double fSlow38 = (fSlow10 * fSlow6); - double fSlow39 = (0.14085684693651698 * fSlow38); - double fSlow40 = (0.43301700000000004 * fSlow7); - double fSlow41 = (0.335413669149 * fSlow6); - double fSlow42 = (0.335413669149 * fSlow3); - double fSlow43 = (0 - (0.193651264638 * fSlow29)); - double fSlow44 = (0 - (0.335413669149 * fSlow29)); - double fSlow45 = (0.14085684693651698 * fSlow4); - double fSlow46 = ((0.111109299648 * fSlow8) + 0.11112); - double fSlow47 = (0.10910718143999999 * fSlow8); - double fSlow48 = (0.335413669149 * fSlow4); - double fSlow49 = (0.19245000000000004 * fSlow6); - double fSlow50 = (0.14907119265000002 * fSlow7); - double fSlow51 = (0.14085684693651698 * fSlow10); - double fSlow52 = (fSlow25 - fSlow27); - double fSlow53 = (0 - (0.10910728580834947 * fSlow38)); - double fSlow54 = (0.14907119265000002 * fSlow4); - double fSlow55 = (fSlow4 * fSlow6); - double fSlow56 = (0 - (0.08606633430000002 * fSlow55)); - double fSlow57 = (fSlow34 + (0.11112 - fSlow33)); - double fSlow58 = (0 - (0.193651264638 * fSlow55)); - double fSlow59 = (0.335413669149 * fSlow7); - double fSlow60 = (fSlow4 * fSlow14); - double fSlow61 = (0.2151622795194362 * fSlow60); - double fSlow62 = (0.15430333080000003 * fSlow6); - double fSlow63 = (0 - (0.15430333080000003 * fSlow29)); - double fSlow64 = (0 - (0.03984099900000001 * fSlow29)); - double fSlow65 = (0.11904563149935221 * fSlow10); - double fSlow66 = (0 - (0.13746223165253885 * fSlow19)); - double fSlow67 = (0.079363856448 * fSlow8); - double fSlow68 = (0.11112 - fSlow67); - double fSlow69 = (0.1259881623 * fSlow3); - double fSlow70 = (0 - (0.03984099900000001 * fSlow55)); - double fSlow71 = (0.347186102328 * fSlow6); - double fSlow72 = (0.28347631111800004 * fSlow3); - double fSlow73 = (0 - (0.08964317934 * fSlow55)); - double fSlow74 = (0 - (0.08964317934 * fSlow29)); - double fSlow75 = (0 - (0.347186102328 * fSlow29)); - double fSlow76 = (0 - (0.11904563149935221 * fSlow21)); - double fSlow77 = (0.11904563149935221 * fSlow6); - double fSlow78 = (0.06873100824512966 * fSlow7); - double fSlow79 = (0.2151622795194362 * fSlow10); - double fSlow80 = (0.039681866111999996 * fSlow8); - double fSlow81 = (0.11904563149935221 * fSlow26); - double fSlow82 = (fSlow80 + (0.11112 - fSlow81)); - double fSlow83 = (0.11904563149935221 * fSlow60); - double fSlow84 = (0.1259881623 * fSlow6); - double fSlow85 = (0 - (0.09759004785000003 * fSlow29)); - double fSlow86 = (0 - (0.1259881623 * fSlow29)); - double fSlow87 = (0.28347631111800004 * fSlow55); - double fSlow88 = (0.35857228434300004 * fSlow3); - double fSlow89 = (0 - (0.219579889581 * fSlow29)); - double fSlow90 = (0 - (0.28347631111800004 * fSlow29)); - double fSlow91 = (0.06873100824512966 * fSlow10); - double fSlow92 = (0 - (0.13746223165253885 * fSlow26)); - double fSlow93 = (fSlow67 + 0.11112); - double fSlow94 = (0.13801301565000001 * fSlow4); - double fSlow95 = (0.31053251232900003 * fSlow4); - double fSlow96 = (0.1259881623 * fSlow4); - double fSlow97 = ((fSlow80 + fSlow81) + 0.11112); - double fSlow98 = (0 - (0.09759004785000003 * fSlow55)); - double fSlow99 = (0.28347631111800004 * fSlow4); - double fSlow100 = (0 - (0.219579889581 * fSlow55)); - double fSlow101 = (fSlow4 * fSlow13); - double fSlow102 = (0.2151622795194362 * fSlow101); - double fSlow103 = (0.15430333080000003 * fSlow4); - double fSlow104 = (0.17251367312221164 * fSlow4); - double fSlow105 = (0.11340041877160077 * fSlow10); - double fSlow106 = (0 - (0.07172068811905223 * fSlow19)); - double fSlow107 = (0.11112 - (0.09259110374400001 * fSlow8)); - double fSlow108 = (0 - (0.07172068811905223 * fSlow26)); - double fSlow109 = (0.347186102328 * fSlow4); - double fSlow110 = (0 - (0.14344159140038398 * fSlow19)); - double fSlow111 = (0.0878395702892508 * fSlow7); - double fSlow112 = (0 - (0.11340041877160077 * fSlow21)); - double fSlow113 = (0.1781713652621752 * fSlow10); - double fSlow114 = (0.15936380355000002 * fSlow3); - double fSlow115 = (0.11110937081927783 * fSlow26); - double fSlow116 = (fSlow33 + (0.11112 - fSlow115)); - double fSlow117 = (0 - (0.0878395702892508 * fSlow21)); - double fSlow118 = (0.0878395702892508 * fSlow6); - double fSlow119 = (0.04536029660600802 * fSlow7); - double fSlow120 = (0.16903075950000004 * fSlow3); - double fSlow121 = ((0.07407290784 * fSlow8) + 0.11112); - double fSlow122 = (0.04536029660600802 * fSlow10); - double fSlow123 = (0 - (0.14344159140038398 * fSlow26)); - double fSlow124 = (0.38032316127 * fSlow3); - double fSlow125 = (0.11110937081927783 * fSlow19); - double fSlow126 = (0.04536029660600802 * fSlow6); - double fSlow127 = ((fSlow33 + fSlow115) + 0.11112); - double fSlow128 = (0.31053251232900003 * fSlow55); - double fSlow129 = (0.11340041877160077 * fSlow7); - double fSlow130 = (0.07172068811905223 * fSlow14); - double fSlow131 = (0.11340041877160077 * fSlow38); - double fSlow132 = (0.347186102328 * fSlow55); - double fSlow133 = (0.18184526118496958 * fSlow4); - double fSlow134 = (0.353557081449 * fSlow4); - double fSlow135 = (0.11111100750000003 * fSlow3); - double fSlow136 = (0.13608274215000005 * fSlow4); - double fSlow137 = (0.25000236495 * fSlow3); - double fSlow138 = (0.30618935181900003 * fSlow4); - double fSlow139 = (0.02969561235 * fSlow7); - double fSlow140 = (0.13746223165253885 * fSlow10); - double fSlow141 = (0.14547853605000002 * fSlow3); - double fSlow142 = (0.068731027392 * fSlow8); - double fSlow143 = (0 - (0.02969561235 * fSlow55)); - double fSlow144 = (0 - (0.066815822151 * fSlow55)); - double fSlow145 = (0.327330107793 * fSlow3); - double fSlow146 = (0.066815822151 * fSlow7); - double fSlow147 = (0.16264988730000002 * fSlow3); - double fSlow148 = (0 - (0.048600210211011685 * fSlow38)); - double fSlow149 = (0.097200435264 * fSlow8); - double fSlow150 = (0.048600210211011685 * fSlow26); - double fSlow151 = (fSlow149 + fSlow150); - double fSlow152 = (0 - (0.048600210211011685 * fSlow19)); - double fSlow153 = (0 - (0.05143437945000002 * fSlow55)); - double fSlow154 = (0.365966049618 * fSlow3); - double fSlow155 = (0 - (0.11572855643700003 * fSlow55)); - double fSlow156 = (0 - (0.10286875890000004 * fSlow29)); - double fSlow157 = (0.030737437765308104 * fSlow11); - double fSlow158 = (0 - (0.12294996622351191 * fSlow38)); - double fSlow159 = (0 - (0.12294996622351191 * fSlow21)); - double fSlow160 = (0.10647773203199999 * fSlow8); - double fSlow161 = (0.16798421640000002 * fSlow3); - double fSlow162 = (0 - (0.10286875890000004 * fSlow55)); - double fSlow163 = (0 - (0.23145711287400006 * fSlow29)); - double fSlow164 = (0.377968414824 * fSlow3); - double fSlow165 = (0 - (0.23145711287400006 * fSlow55)); - double fSlow166 = (0 - (0.05143437945000002 * fSlow29)); - double fSlow167 = (fSlow149 - fSlow150); - double fSlow168 = (0 - (0.048600210211011685 * fSlow21)); - double fSlow169 = (0.1328032017 * fSlow4); - double fSlow170 = (0.16835609239505758 * fSlow10); - double fSlow171 = (0.29881030912199996 * fSlow55); - double fSlow172 = (0 - (0.11572855643700003 * fSlow29)); - double fSlow173 = (0 - (0.11501081430000001 * fSlow29)); - double fSlow174 = (0 - (0.02969561235 * fSlow29)); - double fSlow175 = (0 - (0.13746223165253885 * fSlow21)); - double fSlow176 = (0.11501081430000001 * fSlow4); - double fSlow177 = (0 - (0.25877702143799997 * fSlow29)); - double fSlow178 = (0 - (0.066815822151 * fSlow29)); - double fSlow179 = (0.25877702143799997 * fSlow55); - double fSlow180 = (0 - (0.13608274215000005 * fSlow29)); - double fSlow181 = (0 - (0.12858399051272834 * fSlow19)); - double fSlow182 = (0 - (0.12858399051272834 * fSlow21)); - double fSlow183 = (0.13608274215000005 * fSlow55); - double fSlow184 = (0 - (0.30618935181900003 * fSlow29)); - double fSlow185 = (0.30618935181900003 * fSlow55); - double fSlow186 = (0.18184526118496958 * fSlow101); - double fSlow187 = (0.15713484765000002 * fSlow6); - double fSlow188 = (0 - (0.18184526118496958 * fSlow19)); - double fSlow189 = (0 - (0.15713484765000002 * fSlow29)); - double fSlow190 = (0 - (0.353557081449 * fSlow29)); - double fSlow191 = (0.353557081449 * fSlow55); - double fSlow192 = (0.18727466614636304 * fSlow11); - double fSlow193 = (0.14506240885200392 * fSlow11); - double fSlow194 = (0.11844296195441828 * fSlow10); - double fSlow195 = (0.055834588607999995 * fSlow8); - double fSlow196 = (0.1367661816782935 * fSlow10); - double fSlow197 = (0.10812313354182758 * fSlow11); - double fSlow198 = (0 - (0.034191437838433605 * fSlow38)); - double fSlow199 = (0.0837518208 * fSlow8); - double fSlow200 = (0.10812313354182758 * fSlow19); - double fSlow201 = (0.034191437838433605 * fSlow7); - double fSlow202 = (0 - (0.012923184413636137 * fSlow19)); - double fSlow203 = (0.012923184413636137 * fSlow26); - double fSlow204 = (0 - (0.0633104249371965 * fSlow38)); - double fSlow205 = (0.100102556352 * fSlow8); - double fSlow206 = (0.05005126462409077 * fSlow26); - double fSlow207 = (fSlow205 + fSlow206); - double fSlow208 = (0 - (0.05005126462409077 * fSlow19)); - double fSlow209 = (0.04086663239824459 * fSlow11); - double fSlow210 = (0 - (0.12923184413636135 * fSlow38)); - double fSlow211 = (0 - (0.12923184413636135 * fSlow21)); - double fSlow212 = (0.10551735628799999 * fSlow8); - double fSlow213 = (fSlow205 - fSlow206); - double fSlow214 = (0 - (0.0633104249371965 * fSlow21)); - double fSlow215 = (0.1634667447552579 * fSlow38); - double fSlow216 = (0.012923184413636137 * fSlow11); - double fSlow217 = (0.10812313354182758 * fSlow26); - double fSlow218 = (0 - (0.13242313106619366 * fSlow21)); - double fSlow219 = (0 - (0.034191437838433605 * fSlow21)); - double fSlow220 = (0.13242313106619366 * fSlow38); - double fSlow221 = (0 - fSlow200); - double fSlow222 = (0 - (0.1367661816782935 * fSlow21)); - double fSlow223 = (0.1367661816782935 * fSlow38); - double fSlow224 = (0 - (0.14506240885200392 * fSlow19)); - double fSlow225 = (0 - (0.11844296195441828 * fSlow21)); - double fSlow226 = (0.11844296195441828 * fSlow38); - double fSlow227 = (0.14506240885200392 * fSlow26); - double fSlow228 = (0 - (0.18727466614636304 * fSlow19)); - double fSlow229 = (0.18727466614636304 * fSlow26); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAConverter1.cpp b/source/HOAUGens/HOAConverter1.cpp index 26421eb571..d1c22cd6d3 100644 --- a/source/HOAUGens/HOAConverter1.cpp +++ b/source/HOAUGens/HOAConverter1.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -90,35 +71,102 @@ #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -134,17 +182,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -159,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -192,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -231,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -305,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -350,23 +364,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT /* NOP */ + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -568,8 +589,10 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph6; double fRec7[2]; FAUSTFLOAT fbargraph7; + int fSamplingFreq; + public: - static void metadata(Meta* m) { + virtual void metadata(Meta* m) { m->declare("name", "HOAConverter1"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -580,30 +603,32 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("route.lib/name", "Faust Signal Routing Library"); - m->declare("route.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 4; } - virtual int getInputRate (int i) {int rate[]={1,1,1,1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 4; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { fslider0 = 1.0; fslider1 = 1.0; + } + virtual void instanceClear() { for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; @@ -617,92 +642,83 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openVerticalBox("0x00"); - interface->declare(&fslider0, "0", ""); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - interface->declare(&fslider1, "0", ""); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); - interface->declare(0, "1", ""); - interface->openHorizontalBox("Inputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7f8fad3ec1f0", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7f8fad3eff20", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7f8fad3f16f0", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7f8fad3f31b0", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "2", ""); - interface->openHorizontalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7f8fad3ee1e0", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7f8fad3f4fe0", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7f8fad3f70a0", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7f8fad3f8e30", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverter1"); + ui_interface->declare(&fslider0, "0", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fslider1, "0", ""); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffa3e53e960", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffa3e5424b0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffa3e543c20", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffa3e545660", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffa3e540990", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffa3e547700", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffa3e5495a0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffa3e54b300", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); int iSlow1 = int((iSlow0 >= 5)); int iSlow2 = int((iSlow0 >= 7)); int iSlow3 = int((iSlow0 >= 8)); - double fTemp0; - double fTemp1; - double fTemp2; int iSlow4 = int((iSlow0 >= 6)); - double fTemp3; int iSlow5 = int((iSlow0 >= 3)); int iSlow6 = int((iSlow0 >= 2)); - double fTemp4; - double fTemp5; - double fTemp6; - double fTemp7; - double fTemp8; - double fTemp9; - double fTemp10; - double fTemp11; int iSlow7 = int((iSlow0 >= 4)); - double fTemp12; - double fTemp13; int iSlow8 = int((iSlow0 >= 1)); - double fTemp14; - double fTemp15; - double fTemp16; - double fTemp17; - double fTemp18; - double fTemp19; FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -712,43 +728,43 @@ class mydsp : public dsp { FAUSTFLOAT* output2 = output[2]; FAUSTFLOAT* output3 = output[3]; for (int i=0; igetNumInputs(); } }; // Global state @@ -808,7 +824,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -840,7 +856,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -863,9 +879,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -891,9 +907,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -905,7 +921,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -926,7 +942,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -936,68 +952,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1011,6 +1050,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1022,18 +1065,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1044,10 +1089,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAConverter2.cpp b/source/HOAUGens/HOAConverter2.cpp index a88f2e96ef..7f549cae0f 100644 --- a/source/HOAUGens/HOAConverter2.cpp +++ b/source/HOAUGens/HOAConverter2.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -90,35 +71,102 @@ #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -134,17 +182,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -159,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -192,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -231,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -305,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -350,23 +364,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT /* NOP */ + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -588,8 +609,10 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph16; double fRec17[2]; FAUSTFLOAT fbargraph17; + int fSamplingFreq; + public: - static void metadata(Meta* m) { + virtual void metadata(Meta* m) { m->declare("name", "HOAConverter2"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -600,30 +623,32 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("route.lib/name", "Faust Signal Routing Library"); - m->declare("route.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 9; } - virtual int getInputRate (int i) {int rate[]={1,1,1,1,1,1,1,1,1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 9; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { fslider0 = 1.0; fslider1 = 1.0; + } + virtual void instanceClear() { for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; @@ -647,153 +672,127 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openVerticalBox("0x00"); - interface->declare(&fslider0, "0", ""); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - interface->declare(&fslider1, "0", ""); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); - interface->declare(0, "1", ""); - interface->openHorizontalBox("Inputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6536ce0", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce653aa10", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce653c1e0", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce653dca0", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph8, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6545790", &fbargraph8, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph12, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce654c630", &fbargraph12, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph10, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6548bb0", &fbargraph10, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph13, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce654e250", &fbargraph13, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph9, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6546f90", &fbargraph9, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "2", ""); - interface->openHorizontalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6538cd0", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce653fad0", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6541b90", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6543920", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph11, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce654a820", &fbargraph11, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph14, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6550320", &fbargraph14, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph15, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6552540", &fbargraph15, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph16, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6554620", &fbargraph16, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph17, "unit", "dB"); - interface->addVerticalBargraph("0x7fbce6556bf0", &fbargraph17, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverter2"); + ui_interface->declare(&fslider0, "0", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fslider1, "0", ""); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa4118719c0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411875580", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411876d50", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411878790", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411880090", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411886e70", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411883540", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411888a80", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411881990", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411873a30", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa41187a830", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa41187c6d0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa41187e430", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa4118852b0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa41188a8f0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa41188c9e0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa41188ef00", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa411891470", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); int iSlow1 = int((iSlow0 >= 5)); int iSlow2 = int((iSlow0 >= 7)); int iSlow3 = int((iSlow0 >= 8)); - double fTemp0; - double fTemp1; - double fTemp2; int iSlow4 = int((iSlow0 >= 6)); - double fTemp3; int iSlow5 = int((iSlow0 >= 3)); int iSlow6 = int((iSlow0 >= 2)); - double fTemp4; - double fTemp5; - double fTemp6; - double fTemp7; - double fTemp8; - double fTemp9; - double fTemp10; - double fTemp11; int iSlow7 = int((iSlow0 >= 4)); - double fTemp12; - double fTemp13; int iSlow8 = int((iSlow0 >= 1)); - double fTemp14; - double fTemp15; - double fTemp16; - double fTemp17; - double fTemp18; - double fTemp19; - double fTemp20; - double fTemp21; - double fTemp22; - double fTemp23; - double fTemp24; - double fTemp25; - double fTemp26; - double fTemp27; - double fTemp28; - double fTemp29; - double fTemp30; - double fTemp31; - double fTemp32; - double fTemp33; - double fTemp34; - double fTemp35; - double fTemp36; FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -813,85 +812,85 @@ class mydsp : public dsp { FAUSTFLOAT* output7 = output[7]; FAUSTFLOAT* output8 = output[8]; for (int i=0; igetNumInputs(); } }; // Global state @@ -961,7 +960,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -993,7 +992,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -1016,9 +1015,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1044,9 +1043,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1058,7 +1057,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -1079,7 +1078,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -1089,68 +1088,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1164,6 +1186,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1175,18 +1201,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1197,10 +1225,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAConverter3.cpp b/source/HOAUGens/HOAConverter3.cpp index b8826c6a3b..2cb369a53d 100644 --- a/source/HOAUGens/HOAConverter3.cpp +++ b/source/HOAUGens/HOAConverter3.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -90,35 +71,102 @@ #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -134,17 +182,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -159,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -192,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -231,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -305,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -350,23 +364,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT /* NOP */ + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -616,8 +637,10 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph30; double fRec31[2]; FAUSTFLOAT fbargraph31; + int fSamplingFreq; + public: - static void metadata(Meta* m) { + virtual void metadata(Meta* m) { m->declare("name", "HOAConverter3"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -628,30 +651,32 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("route.lib/name", "Faust Signal Routing Library"); - m->declare("route.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 16; } - virtual int getInputRate (int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 16; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { fslider0 = 1.0; fslider1 = 1.0; + } + virtual void instanceClear() { for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; @@ -689,236 +714,187 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openVerticalBox("0x00"); - interface->declare(&fslider0, "0", ""); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - interface->declare(&fslider1, "0", ""); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); - interface->declare(0, "1", ""); - interface->openHorizontalBox("Inputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7f92645646c0", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7f92645682b0", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264569990", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7f926456b3b0", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph8, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264572bd0", &fbargraph8, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph12, "unit", "dB"); - interface->addVerticalBargraph("0x7f92645798c0", &fbargraph12, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph10, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264575f60", &fbargraph10, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph13, "unit", "dB"); - interface->addVerticalBargraph("0x7f926457b420", &fbargraph13, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph9, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264574400", &fbargraph9, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph18, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264585ab0", &fbargraph18, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph22, "unit", "dB"); - interface->addVerticalBargraph("0x7f926458c950", &fbargraph22, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph25, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264592190", &fbargraph25, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph20, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264588f20", &fbargraph20, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph23, "unit", "dB"); - interface->addVerticalBargraph("0x7f926458e200", &fbargraph23, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph27, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264596270", &fbargraph27, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph19, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264587360", &fbargraph19, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "2", ""); - interface->openHorizontalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264566620", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7f926456d580", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7f926456f150", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264570f10", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph11, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264577c30", &fbargraph11, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph14, "unit", "dB"); - interface->addVerticalBargraph("0x7f926457d320", &fbargraph14, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph15, "unit", "dB"); - interface->addVerticalBargraph("0x7f926457f280", &fbargraph15, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph16, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264581590", &fbargraph16, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph17, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264583ad0", &fbargraph17, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph21, "unit", "dB"); - interface->addVerticalBargraph("0x7f926458ac50", &fbargraph21, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph24, "unit", "dB"); - interface->addVerticalBargraph("0x7f92645905a0", &fbargraph24, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph26, "unit", "dB"); - interface->addVerticalBargraph("0x7f9264594470", &fbargraph26, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph28, "unit", "dB"); - interface->addVerticalBargraph("0x7f92645981f0", &fbargraph28, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph29, "unit", "dB"); - interface->addVerticalBargraph("0x7f926459a6c0", &fbargraph29, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph30, "unit", "dB"); - interface->addVerticalBargraph("0x7f926459cdf0", &fbargraph30, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph31, "unit", "dB"); - interface->addVerticalBargraph("0x7f926459f2d0", &fbargraph31, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverter3"); + ui_interface->declare(&fslider0, "0", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fslider1, "0", ""); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f268f920", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26934e0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f2694cb0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26966f0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f269dff0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26a4dd0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26a14a0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26a69e0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f269f8f0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26b11b0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26b8190", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26bdb40", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26b4760", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26b9b20", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26c1cb0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26b2b40", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f2691990", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f2698790", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f269a630", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f269c390", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26a3210", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26a8850", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26aa940", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26ace60", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26af3d0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26b6580", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26bbdb0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26bfd00", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26c3b80", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26c6130", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26c8860", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb3f26cb000", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); int iSlow1 = int((iSlow0 >= 5)); int iSlow2 = int((iSlow0 >= 7)); int iSlow3 = int((iSlow0 >= 8)); - double fTemp0; - double fTemp1; - double fTemp2; int iSlow4 = int((iSlow0 >= 6)); - double fTemp3; int iSlow5 = int((iSlow0 >= 3)); int iSlow6 = int((iSlow0 >= 2)); - double fTemp4; - double fTemp5; - double fTemp6; - double fTemp7; - double fTemp8; - double fTemp9; - double fTemp10; - double fTemp11; int iSlow7 = int((iSlow0 >= 4)); - double fTemp12; - double fTemp13; int iSlow8 = int((iSlow0 >= 1)); - double fTemp14; - double fTemp15; - double fTemp16; - double fTemp17; - double fTemp18; - double fTemp19; - double fTemp20; - double fTemp21; - double fTemp22; - double fTemp23; - double fTemp24; - double fTemp25; - double fTemp26; - double fTemp27; - double fTemp28; - double fTemp29; - double fTemp30; - double fTemp31; - double fTemp32; - double fTemp33; - double fTemp34; - double fTemp35; - double fTemp36; - double fTemp37; - double fTemp38; - double fTemp39; - double fTemp40; - double fTemp41; - double fTemp42; - double fTemp43; - double fTemp44; - double fTemp45; - double fTemp46; - double fTemp47; - double fTemp48; - double fTemp49; - double fTemp50; - double fTemp51; - double fTemp52; - double fTemp53; - double fTemp54; - double fTemp55; - double fTemp56; - double fTemp57; - double fTemp58; - double fTemp59; FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -952,143 +928,143 @@ class mydsp : public dsp { FAUSTFLOAT* output14 = output[14]; FAUSTFLOAT* output15 = output[15]; for (int i=0; igetNumInputs(); } }; // Global state @@ -1172,7 +1148,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1204,7 +1180,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -1227,9 +1203,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1255,9 +1231,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1269,7 +1245,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -1290,7 +1266,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -1300,68 +1276,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1375,6 +1374,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1386,18 +1389,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1408,10 +1413,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAConverter4.cpp b/source/HOAUGens/HOAConverter4.cpp index d40d6f9844..46bcbc03d1 100644 --- a/source/HOAUGens/HOAConverter4.cpp +++ b/source/HOAUGens/HOAConverter4.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -90,35 +71,102 @@ #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -134,17 +182,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -159,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -192,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -231,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -305,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -350,23 +364,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT /* NOP */ + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -652,8 +673,10 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph48; double fRec48[2]; FAUSTFLOAT fbargraph49; + int fSamplingFreq; + public: - static void metadata(Meta* m) { + virtual void metadata(Meta* m) { m->declare("name", "HOAConverter4"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -664,30 +687,32 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("route.lib/name", "Faust Signal Routing Library"); - m->declare("route.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } - virtual int getNumInputs() { return 25; } - virtual int getNumOutputs() { return 25; } - virtual int getInputRate (int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 25; } + virtual int getNumOutputs() { return 25; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { fslider0 = 1.0; fslider1 = 1.0; + } + virtual void instanceClear() { for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; @@ -743,339 +768,263 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openVerticalBox("0x00"); - interface->declare(&fslider0, "0", ""); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - interface->declare(&fslider1, "0", ""); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); - interface->declare(0, "1", ""); - interface->openHorizontalBox("Inputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea222c50", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea226980", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea228150", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea229c10", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph8, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea231700", &fbargraph8, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph12, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea2385a0", &fbargraph12, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph10, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea234b20", &fbargraph10, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph13, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea23a1c0", &fbargraph13, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph9, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea232f00", &fbargraph9, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph18, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea244bb0", &fbargraph18, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph22, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea24bd40", &fbargraph22, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph25, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea251810", &fbargraph25, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph20, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea2481d0", &fbargraph20, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph23, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea24d6d0", &fbargraph23, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph27, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea255a50", &fbargraph27, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph19, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea246540", &fbargraph19, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("4"); - interface->openVerticalBox("16"); - interface->declare(&fbargraph32, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea260e70", &fbargraph32, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("17"); - interface->declare(&fbargraph34, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea264950", &fbargraph34, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("18"); - interface->declare(&fbargraph36, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea268290", &fbargraph36, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("19"); - interface->declare(&fbargraph38, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea26bcb0", &fbargraph38, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("20"); - interface->declare(&fbargraph40, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea26f7b0", &fbargraph40, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("21"); - interface->declare(&fbargraph42, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea273390", &fbargraph42, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("22"); - interface->declare(&fbargraph44, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea277050", &fbargraph44, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("23"); - interface->declare(&fbargraph46, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea27adf0", &fbargraph46, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("24"); - interface->declare(&fbargraph48, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea27ec70", &fbargraph48, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "2", ""); - interface->openHorizontalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea224c40", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea22ba40", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea22db00", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea22f890", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph11, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea236790", &fbargraph11, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph14, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea23c290", &fbargraph14, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph15, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea23e4b0", &fbargraph15, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph16, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea240590", &fbargraph16, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph17, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea242b60", &fbargraph17, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph21, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea24a250", &fbargraph21, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph24, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea24fb10", &fbargraph24, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph26, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea253cc0", &fbargraph26, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph28, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea257c10", &fbargraph28, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph29, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea259fe0", &fbargraph29, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph30, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea25c290", &fbargraph30, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph31, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea25eec0", &fbargraph31, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("4"); - interface->openVerticalBox("16"); - interface->declare(&fbargraph33, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea262ab0", &fbargraph33, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("17"); - interface->declare(&fbargraph35, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea266370", &fbargraph35, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("18"); - interface->declare(&fbargraph37, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea269d20", &fbargraph37, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("19"); - interface->declare(&fbargraph39, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea26d7b0", &fbargraph39, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("20"); - interface->declare(&fbargraph41, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea271320", &fbargraph41, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("21"); - interface->declare(&fbargraph43, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea274f70", &fbargraph43, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("22"); - interface->declare(&fbargraph45, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea278ca0", &fbargraph45, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("23"); - interface->declare(&fbargraph47, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea27cab0", &fbargraph47, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("24"); - interface->declare(&fbargraph49, "unit", "dB"); - interface->addVerticalBargraph("0x7fafea2809a0", &fbargraph49, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverter4"); + ui_interface->declare(&fslider0, "0", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fslider1, "0", ""); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f423f8f0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f42434b0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f4244c80", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f42466c0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f424dfc0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f4254da0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f4251470", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f42569b0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f424f8c0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f153c0f0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1542d70", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1548460", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f153f470", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f15445b0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f154c3f0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f153d930", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1557130", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f155aa10", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f155e290", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1561bf0", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1565630", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1569150", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f156cd50", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1570a30", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f15747f0", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f4241960", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f4248760", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f424a600", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f424c360", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f42531e0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f152d420", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f152acc0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1527670", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f153a430", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f15411d0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1546760", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f154a4f0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f154e090", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f15506b0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1552ca0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1555340", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1558d70", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f155c570", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f155fe60", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1563830", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f15672e0", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f156ae70", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f156eae0", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1572830", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa6f1576660", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); int iSlow1 = int((iSlow0 >= 5)); int iSlow2 = int((iSlow0 >= 7)); int iSlow3 = int((iSlow0 >= 8)); - double fTemp0; - double fTemp1; - double fTemp2; int iSlow4 = int((iSlow0 >= 6)); - double fTemp3; int iSlow5 = int((iSlow0 >= 3)); int iSlow6 = int((iSlow0 >= 2)); - double fTemp4; - double fTemp5; - double fTemp6; - double fTemp7; - double fTemp8; - double fTemp9; - double fTemp10; - double fTemp11; int iSlow7 = int((iSlow0 >= 4)); - double fTemp12; - double fTemp13; int iSlow8 = int((iSlow0 >= 1)); - double fTemp14; - double fTemp15; - double fTemp16; - double fTemp17; - double fTemp18; - double fTemp19; - double fTemp20; - double fTemp21; - double fTemp22; - double fTemp23; - double fTemp24; - double fTemp25; - double fTemp26; - double fTemp27; - double fTemp28; - double fTemp29; - double fTemp30; - double fTemp31; - double fTemp32; - double fTemp33; - double fTemp34; - double fTemp35; - double fTemp36; - double fTemp37; - double fTemp38; - double fTemp39; - double fTemp40; - double fTemp41; - double fTemp42; - double fTemp43; - double fTemp44; - double fTemp45; - double fTemp46; - double fTemp47; - double fTemp48; - double fTemp49; - double fTemp50; - double fTemp51; - double fTemp52; - double fTemp53; - double fTemp54; - double fTemp55; - double fTemp56; - double fTemp57; - double fTemp58; - double fTemp59; - double fTemp60; - double fTemp61; - double fTemp62; - double fTemp63; - double fTemp64; - double fTemp65; - double fTemp66; - double fTemp67; - double fTemp68; - double fTemp69; - double fTemp70; - double fTemp71; - double fTemp72; - double fTemp73; - double fTemp74; - double fTemp75; - double fTemp76; - double fTemp77; - double fTemp78; - double fTemp79; - double fTemp80; - double fTemp81; - double fTemp82; - double fTemp83; - double fTemp84; - double fTemp85; - double fTemp86; FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1127,215 +1076,215 @@ class mydsp : public dsp { FAUSTFLOAT* output23 = output[23]; FAUSTFLOAT* output24 = output[24]; for (int i=0; igetNumInputs(); } }; // Global state @@ -1437,7 +1386,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1469,7 +1418,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -1492,9 +1441,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1520,9 +1469,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1534,7 +1483,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -1555,7 +1504,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -1565,68 +1514,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1640,6 +1612,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1651,18 +1627,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1673,10 +1651,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAConverter5.cpp b/source/HOAUGens/HOAConverter5.cpp index c12339dd0d..3cf604b8a3 100644 --- a/source/HOAUGens/HOAConverter5.cpp +++ b/source/HOAUGens/HOAConverter5.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2016" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -90,35 +71,102 @@ #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -134,17 +182,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -159,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -192,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -231,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -305,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -350,23 +364,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT /* NOP */ + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -696,13 +717,15 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph70; double fRec70[2]; FAUSTFLOAT fbargraph71; + int fSamplingFreq; + public: - static void metadata(Meta* m) { - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + virtual void metadata(Meta* m) { + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); m->declare("name", "HOAConverter5"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -713,25 +736,27 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("route.lib/name", "Faust Signal Routing Library"); - m->declare("route.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } - virtual int getNumInputs() { return 36; } - virtual int getNumOutputs() { return 36; } - virtual int getInputRate (int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 36; } + virtual int getNumOutputs() { return 36; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / double(min(192000, max(1, fSamplingFreq)))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { fslider0 = 1.0; fslider1 = 1.0; + } + virtual void instanceClear() { for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; @@ -809,464 +834,355 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openVerticalBox("0x00"); - interface->declare(&fslider0, "0", ""); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - interface->declare(&fslider1, "0", ""); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); - interface->declare(0, "1", ""); - interface->openHorizontalBox("Inputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49309060", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4930cd90", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4930e560", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49310020", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph8, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49317b10", &fbargraph8, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph12, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4931e9b0", &fbargraph12, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph10, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4931af30", &fbargraph10, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph13, "unit", "dB"); - interface->addVerticalBargraph("0x7fce493205d0", &fbargraph13, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph9, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49319310", &fbargraph9, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph18, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4932afc0", &fbargraph18, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph22, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49332150", &fbargraph22, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph25, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49337c20", &fbargraph25, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph20, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4932e5e0", &fbargraph20, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph23, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49333ae0", &fbargraph23, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph27, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4933be60", &fbargraph27, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph19, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4932c950", &fbargraph19, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("4"); - interface->openVerticalBox("16"); - interface->declare(&fbargraph32, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49347280", &fbargraph32, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("17"); - interface->declare(&fbargraph34, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4934ad60", &fbargraph34, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("18"); - interface->declare(&fbargraph36, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4934e6a0", &fbargraph36, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("19"); - interface->declare(&fbargraph38, "unit", "dB"); - interface->addVerticalBargraph("0x7fce493520c0", &fbargraph38, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("20"); - interface->declare(&fbargraph40, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49355bc0", &fbargraph40, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("21"); - interface->declare(&fbargraph42, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fb7ec0", &fbargraph42, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("22"); - interface->declare(&fbargraph44, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fbb940", &fbargraph44, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("23"); - interface->declare(&fbargraph46, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fbf480", &fbargraph46, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("24"); - interface->declare(&fbargraph48, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fc3080", &fbargraph48, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("5"); - interface->openVerticalBox("25"); - interface->declare(&fbargraph50, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fc6d40", &fbargraph50, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("26"); - interface->declare(&fbargraph52, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fca6b0", &fbargraph52, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("27"); - interface->declare(&fbargraph54, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fcdf00", &fbargraph54, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("28"); - interface->declare(&fbargraph56, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fd1810", &fbargraph56, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("29"); - interface->declare(&fbargraph58, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fd51e0", &fbargraph58, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("30"); - interface->declare(&fbargraph60, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fd8cd0", &fbargraph60, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("31"); - interface->declare(&fbargraph62, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fdc890", &fbargraph62, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("32"); - interface->declare(&fbargraph64, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fe0500", &fbargraph64, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("33"); - interface->declare(&fbargraph66, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fe4240", &fbargraph66, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("34"); - interface->declare(&fbargraph68, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fe8030", &fbargraph68, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("35"); - interface->declare(&fbargraph70, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46febef0", &fbargraph70, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "2", ""); - interface->openHorizontalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4930b050", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49311e50", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49313f10", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49315ca0", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph11, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4931cba0", &fbargraph11, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph14, "unit", "dB"); - interface->addVerticalBargraph("0x7fce493226a0", &fbargraph14, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph15, "unit", "dB"); - interface->addVerticalBargraph("0x7fce493248c0", &fbargraph15, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph16, "unit", "dB"); - interface->addVerticalBargraph("0x7fce493269a0", &fbargraph16, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph17, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49328f70", &fbargraph17, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph21, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49330660", &fbargraph21, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph24, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49335f20", &fbargraph24, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph26, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4933a0d0", &fbargraph26, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph28, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4933e020", &fbargraph28, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph29, "unit", "dB"); - interface->addVerticalBargraph("0x7fce493403f0", &fbargraph29, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph30, "unit", "dB"); - interface->addVerticalBargraph("0x7fce493426a0", &fbargraph30, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph31, "unit", "dB"); - interface->addVerticalBargraph("0x7fce493452d0", &fbargraph31, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("4"); - interface->openVerticalBox("16"); - interface->declare(&fbargraph33, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49348ec0", &fbargraph33, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("17"); - interface->declare(&fbargraph35, "unit", "dB"); - interface->addVerticalBargraph("0x7fce4934c780", &fbargraph35, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("18"); - interface->declare(&fbargraph37, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49350130", &fbargraph37, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("19"); - interface->declare(&fbargraph39, "unit", "dB"); - interface->addVerticalBargraph("0x7fce49353bc0", &fbargraph39, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("20"); - interface->declare(&fbargraph41, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fb6010", &fbargraph41, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("21"); - interface->declare(&fbargraph43, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fb9a60", &fbargraph43, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("22"); - interface->declare(&fbargraph45, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fbd540", &fbargraph45, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("23"); - interface->declare(&fbargraph47, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fc10e0", &fbargraph47, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("24"); - interface->declare(&fbargraph49, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fc4d40", &fbargraph49, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("5"); - interface->openVerticalBox("25"); - interface->declare(&fbargraph51, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fc8870", &fbargraph51, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("26"); - interface->declare(&fbargraph53, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fcc080", &fbargraph53, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("27"); - interface->declare(&fbargraph55, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fcf930", &fbargraph55, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("28"); - interface->declare(&fbargraph57, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fd32a0", &fbargraph57, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("29"); - interface->declare(&fbargraph59, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fd6d40", &fbargraph59, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("30"); - interface->declare(&fbargraph61, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fda890", &fbargraph61, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("31"); - interface->declare(&fbargraph63, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fde4b0", &fbargraph63, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("32"); - interface->declare(&fbargraph65, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fe2180", &fbargraph65, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("33"); - interface->declare(&fbargraph67, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fe5f20", &fbargraph67, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("34"); - interface->declare(&fbargraph69, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fe9d70", &fbargraph69, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("35"); - interface->declare(&fbargraph71, "unit", "dB"); - interface->addVerticalBargraph("0x7fce46fedc90", &fbargraph71, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverter5"); + ui_interface->declare(&fslider0, "0", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fslider1, "0", ""); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa513690", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa517250", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa518a20", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa51a460", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa521d60", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa528b40", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa525210", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa52a750", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa523660", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa534f20", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa53bf00", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa5418b0", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa5384d0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa53d890", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa545a20", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa5368b0", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa550c80", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa5546a0", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa557f20", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa55b880", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa55f2c0", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa562de0", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa5669e0", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa56a6c0", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa56e480", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa207fc0", &fbargraph50, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa20b5d0", &fbargraph52, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa20ed70", &fbargraph54, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa2125d0", &fbargraph56, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2bee34ce0", &fbargraph58, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1ae260", &fbargraph60, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1a9490", &fbargraph62, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1b3050", &fbargraph64, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1b6cf0", &fbargraph66, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1baa50", &fbargraph68, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1be870", &fbargraph70, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa515700", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa51c500", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa51e3a0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa520100", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa526f80", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa52c5c0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa52e6b0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa530bd0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa533140", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa53a2f0", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa53fb20", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa543a70", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa5478f0", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa549ea0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa54c5d0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa54ed70", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa5529f0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa556200", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa559af0", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa55d4c0", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa560f70", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa564b00", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa568770", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa56c4c0", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa5702f0", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa2098f0", &fbargraph51, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa20d090", &fbargraph53, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa210890", &fbargraph55, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa214150", &fbargraph57, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1afec0", &fbargraph59, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1ab620", &fbargraph61, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1b11e0", &fbargraph63, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1b4d90", &fbargraph65, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1b8a90", &fbargraph67, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1bc850", &fbargraph69, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff2aa1c06d0", &fbargraph71, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) - 4)); + int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); int iSlow1 = int((iSlow0 >= 5)); int iSlow2 = int((iSlow0 >= 7)); int iSlow3 = int((iSlow0 >= 8)); - double fTemp0; - double fTemp1; - double fTemp2; int iSlow4 = int((iSlow0 >= 6)); - double fTemp3; int iSlow5 = int((iSlow0 >= 3)); int iSlow6 = int((iSlow0 >= 2)); - double fTemp4; - double fTemp5; - double fTemp6; - double fTemp7; - double fTemp8; - double fTemp9; - double fTemp10; - double fTemp11; int iSlow7 = int((iSlow0 >= 4)); - double fTemp12; - double fTemp13; int iSlow8 = int((iSlow0 >= 1)); - double fTemp14; - double fTemp15; - double fTemp16; - double fTemp17; - double fTemp18; - double fTemp19; - double fTemp20; - double fTemp21; - double fTemp22; - double fTemp23; - double fTemp24; - double fTemp25; - double fTemp26; - double fTemp27; - double fTemp28; - double fTemp29; - double fTemp30; - double fTemp31; - double fTemp32; - double fTemp33; - double fTemp34; - double fTemp35; - double fTemp36; - double fTemp37; - double fTemp38; - double fTemp39; - double fTemp40; - double fTemp41; - double fTemp42; - double fTemp43; - double fTemp44; - double fTemp45; - double fTemp46; - double fTemp47; - double fTemp48; - double fTemp49; - double fTemp50; - double fTemp51; - double fTemp52; - double fTemp53; - double fTemp54; - double fTemp55; - double fTemp56; - double fTemp57; - double fTemp58; - double fTemp59; - double fTemp60; - double fTemp61; - double fTemp62; - double fTemp63; - double fTemp64; - double fTemp65; - double fTemp66; - double fTemp67; - double fTemp68; - double fTemp69; - double fTemp70; - double fTemp71; - double fTemp72; - double fTemp73; - double fTemp74; - double fTemp75; - double fTemp76; - double fTemp77; - double fTemp78; - double fTemp79; - double fTemp80; - double fTemp81; - double fTemp82; - double fTemp83; - double fTemp84; - double fTemp85; - double fTemp86; - double fTemp87; - double fTemp88; - double fTemp89; - double fTemp90; - double fTemp91; - double fTemp92; - double fTemp93; - double fTemp94; - double fTemp95; - double fTemp96; - double fTemp97; - double fTemp98; - double fTemp99; - double fTemp100; - double fTemp101; - double fTemp102; - double fTemp103; - double fTemp104; - double fTemp105; - double fTemp106; - double fTemp107; - double fTemp108; - double fTemp109; - double fTemp110; - double fTemp111; - double fTemp112; - double fTemp113; - double fTemp114; - double fTemp115; - double fTemp116; - double fTemp117; - double fTemp118; - double fTemp119; FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1340,303 +1256,303 @@ class mydsp : public dsp { FAUSTFLOAT* output34 = output[34]; FAUSTFLOAT* output35 = output[35]; for (int i=0; igetNumInputs(); } }; // Global state @@ -1760,7 +1676,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1792,7 +1708,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -1815,9 +1731,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1843,9 +1759,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1857,7 +1773,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -1878,7 +1794,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -1888,68 +1804,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1963,6 +1902,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1974,18 +1917,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1996,10 +1941,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev061.cpp b/source/HOAUGens/HOADecLebedev061.cpp index f0efb533dc..b4252f760b 100644 --- a/source/HOAUGens/HOADecLebedev061.cpp +++ b/source/HOAUGens/HOADecLebedev061.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -627,8 +574,8 @@ class mydsp : public dsp { double fConst1; FAUSTFLOAT fslider0; double fRec1[2]; - FAUSTFLOAT fentry0; FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; FAUSTFLOAT fslider1; double fRec3[2]; double fRec2[2]; @@ -668,35 +615,35 @@ class mydsp : public dsp { m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); m->declare("name", "HOADecLebedev061"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); m->declare("lib/ymn.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); m->declare("lib/nfc.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 4; } @@ -705,15 +652,15 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); fConst2 = (1.7e+02 / fConst0); fConst3 = (3.4e+02 / fConst0); } virtual void instanceResetUserInterface() { fslider0 = 0.0; - fentry0 = 1.07; fcheckbox0 = 0.0; + fentry0 = 1.07; fslider1 = 0.0; } virtual void instanceClear() { @@ -752,27 +699,27 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev061"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe360710", &fbargraph0, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1cf120", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe36b4e0", &fbargraph5, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1d9d40", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe363960", &fbargraph1, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1d21f0", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe3661b0", &fbargraph2, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1d4a60", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -795,46 +742,46 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph3, "osc", "/output1"); ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe3677a0", &fbargraph3, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1d6030", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph4, "osc", "/output2"); ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe368c90", &fbargraph4, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1d7500", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph6, "osc", "/output3"); ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe36c9c0", &fbargraph6, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1db1f0", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph7, "osc", "/output4"); ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe36e210", &fbargraph7, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1dcbf0", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph8, "osc", "/output5"); ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe36fba0", &fbargraph8, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1de550", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph9, "osc", "/output6"); ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7facfe371420", &fbargraph9, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f888a1dfc60", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fentry0); - double fSlow2 = double(fcheckbox0); - double fSlow3 = (1 - ((1 - fSlow1) * fSlow2)); - double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow5 = (1.0 / ((fConst2 / fSlow1) + 1)); - double fSlow6 = (fSlow2 * fSlow1); - double fSlow7 = (fConst3 / fSlow1); - double fSlow8 = (1 - fSlow2); + double fSlow1 = double(fcheckbox0); + double fSlow2 = (1 - fSlow1); + double fSlow3 = double(fentry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (fSlow2 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = (1.0 / ((fConst2 / fSlow3) + 1)); + double fSlow8 = (fConst3 / fSlow3); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -847,22 +794,22 @@ class mydsp : public dsp { FAUSTFLOAT* output5 = output[5]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1147,7 +1095,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1207,19 +1155,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1230,10 +1179,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev261.cpp b/source/HOAUGens/HOADecLebedev261.cpp index 4a73b5e770..136ebca380 100644 --- a/source/HOAUGens/HOADecLebedev261.cpp +++ b/source/HOAUGens/HOADecLebedev261.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -714,20 +661,6 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); m->declare("lib/nfc.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); m->declare("lib/nfc.lib/license", "GPL"); @@ -737,6 +670,20 @@ class mydsp : public dsp { m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } virtual int getNumInputs() { return 4; } @@ -745,7 +692,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); fConst2 = (1.7e+02 / fConst0); fConst3 = (3.4e+02 / fConst0); @@ -812,27 +759,27 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev261"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f636a0", &fbargraph0, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe77202aac0", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f6ca00", &fbargraph5, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec160a0", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f66940", &fbargraph1, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec0e310", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f691d0", &fbargraph2, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec10cd0", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -855,134 +802,134 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph3, "osc", "/output1"); ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f6a7c0", &fbargraph3, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec122f0", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph4, "osc", "/output2"); ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f6bc60", &fbargraph4, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec13860", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph6, "osc", "/output3"); ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f6de10", &fbargraph6, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec17550", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph7, "osc", "/output4"); ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f6f870", &fbargraph7, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec18f50", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph8, "osc", "/output5"); ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f712f0", &fbargraph8, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec1a8b0", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph9, "osc", "/output6"); ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f72a80", &fbargraph9, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec1bfc0", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph10, "osc", "/output7"); ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f74900", &fbargraph10, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec1de00", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph11, "osc", "/output8"); ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176f75f20", &fbargraph11, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec1f980", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph12, "osc", "/output9"); ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8176a05830", &fbargraph12, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec21490", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph13, "osc", "/output10"); ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768c2e50", &fbargraph13, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec23010", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph14, "osc", "/output11"); ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768c45c0", &fbargraph14, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec24ba0", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph15, "osc", "/output12"); ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768c62f0", &fbargraph15, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec26730", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph16, "osc", "/output13"); ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768c7e00", &fbargraph16, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec28240", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph17, "osc", "/output14"); ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768c9970", &fbargraph17, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec29db0", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph18, "osc", "/output15"); ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768cb080", &fbargraph18, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec2b3f0", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph19, "osc", "/output16"); ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768cc790", &fbargraph19, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec2cbe0", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph20, "osc", "/output17"); ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768cdf10", &fbargraph20, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec2e290", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph21, "osc", "/output18"); ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768cf820", &fbargraph21, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec2fd10", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph22, "osc", "/output19"); ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768d1700", &fbargraph22, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec31c20", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fbargraph23, "osc", "/output20"); ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768d3220", &fbargraph23, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec33700", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fbargraph24, "osc", "/output21"); ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768d4c80", &fbargraph24, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec35010", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fbargraph25, "osc", "/output22"); ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768d6750", &fbargraph25, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec36e30", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fbargraph26, "osc", "/output23"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768d83f0", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec389d0", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph27, "osc", "/output24"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768d9e80", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe76ec3a450", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fbargraph28, "osc", "/output25"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768dbcd0", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe77202e9b0", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fbargraph29, "osc", "/output26"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f81768dd920", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe7720303f0", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -990,13 +937,13 @@ class mydsp : public dsp { virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); double fSlow1 = double(fcheckbox0); - double fSlow2 = double(fentry0); - double fSlow3 = ((fSlow1 * (fSlow2 + -1)) + 1); - double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow5 = (1.0 / ((fConst2 / fSlow2) + 1)); - double fSlow6 = (fSlow1 * fSlow2); - double fSlow7 = (fConst3 / fSlow2); - double fSlow8 = (1 - fSlow1); + double fSlow2 = (1 - fSlow1); + double fSlow3 = double(fentry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (fSlow2 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = (1.0 / ((fConst2 / fSlow3) + 1)); + double fSlow8 = (fConst3 / fSlow3); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1029,24 +976,24 @@ class mydsp : public dsp { FAUSTFLOAT* output25 = output[25]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1449,7 +1399,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1509,19 +1459,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1532,10 +1483,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev262.cpp b/source/HOAUGens/HOADecLebedev262.cpp index f81044fd3e..f85b40d0c9 100644 --- a/source/HOAUGens/HOADecLebedev262.cpp +++ b/source/HOAUGens/HOADecLebedev262.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -647,43 +594,43 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph0; double fConst2; double fConst3; - double fConst4; double fRec6[2]; - double fRec7[2]; double fRec5[2]; double fRec4[2]; FAUSTFLOAT fbargraph1; - double fRec10[2]; - double fRec11[2]; double fRec9[2]; double fRec8[2]; + double fRec7[2]; FAUSTFLOAT fbargraph2; - double fConst5; - double fRec14[2]; + double fConst4; double fRec13[2]; double fRec12[2]; + double fConst5; + double fRec11[2]; + double fRec10[2]; FAUSTFLOAT fbargraph3; double fRec17[2]; - double fRec18[2]; double fRec16[2]; double fRec15[2]; + double fRec14[2]; FAUSTFLOAT fbargraph4; double fRec21[2]; double fRec20[2]; double fRec19[2]; + double fRec18[2]; FAUSTFLOAT fbargraph5; double fRec0[2]; FAUSTFLOAT fbargraph6; double fRec22[2]; FAUSTFLOAT fbargraph7; double fRec26[2]; - double fRec27[2]; double fRec25[2]; double fRec24[2]; FAUSTFLOAT fbargraph8; double fRec30[2]; double fRec29[2]; double fRec28[2]; + double fRec27[2]; FAUSTFLOAT fbargraph9; double fRec23[2]; FAUSTFLOAT fbargraph10; @@ -695,8 +642,8 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph13; double fRec34[2]; FAUSTFLOAT fbargraph14; - double fRec38[2]; double fRec39[2]; + double fRec38[2]; double fRec37[2]; double fRec36[2]; FAUSTFLOAT fbargraph15; @@ -746,25 +693,6 @@ class mydsp : public dsp { m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); m->declare("copyright", "(c) Pierre Lecomte 2014"); m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); m->declare("lib/ymn.lib/version", "1.0"); @@ -776,6 +704,25 @@ class mydsp : public dsp { m->declare("lib/nfc.lib/author", "Pierre Lecomte"); m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 9; } @@ -784,12 +731,12 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); fConst2 = (1.7e+02 / fConst0); - fConst3 = (5.1e+02 / fConst0); - fConst4 = (1.02e+03 / fConst0); - fConst5 = (3.4e+02 / fConst0); + fConst3 = (3.4e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); } virtual void instanceResetUserInterface() { fslider0 = 0.0; @@ -802,39 +749,39 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec3[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2; i++) fRec9[i] = 0; for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; for (int i=0; i<2; i++) fRec16[i] = 0; for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec21[i] = 0; for (int i=0; i<2; i++) fRec20[i] = 0; for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; for (int i=0; i<2; i++) fRec25[i] = 0; for (int i=0; i<2; i++) fRec24[i] = 0; for (int i=0; i<2; i++) fRec30[i] = 0; for (int i=0; i<2; i++) fRec29[i] = 0; for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; for (int i=0; i<2; i++) fRec23[i] = 0; for (int i=0; i<2; i++) fRec31[i] = 0; for (int i=0; i<2; i++) fRec32[i] = 0; for (int i=0; i<2; i++) fRec33[i] = 0; for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; for (int i=0; i<2; i++) fRec37[i] = 0; for (int i=0; i<2; i++) fRec36[i] = 0; for (int i=0; i<2; i++) fRec35[i] = 0; @@ -873,49 +820,49 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev262"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22b3890", &fbargraph0, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b332f0", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22cbe80", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fdc99b486d0", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22c3290", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fdc99b36480", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22bd8e0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fdc99b38d30", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22c96f0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fdc99b4b6c0", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22d8230", &fbargraph15, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b576e0", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22bab80", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fdc99b3cc80", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22b7c80", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fdc99b3fcc0", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22c0970", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fdc99b42d80", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -938,134 +885,134 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph6, "osc", "/output1"); ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22c4bd0", &fbargraph6, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b444b0", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph7, "osc", "/output2"); ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22c6420", &fbargraph7, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b45dd0", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph10, "osc", "/output3"); ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22cd620", &fbargraph10, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b4ccb0", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph11, "osc", "/output4"); ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22cf250", &fbargraph11, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b4e920", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph12, "osc", "/output5"); ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22d1160", &fbargraph12, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b508b0", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph13, "osc", "/output6"); ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22d2a70", &fbargraph13, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b520b0", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph14, "osc", "/output7"); ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22d4fe0", &fbargraph14, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b54670", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph16, "osc", "/output8"); ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd22da2d0", &fbargraph16, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b59820", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph17, "osc", "/output9"); ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2540ce0", &fbargraph17, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b5ba30", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph18, "osc", "/output10"); ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2543110", &fbargraph18, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b5de50", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph19, "osc", "/output11"); ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2545010", &fbargraph19, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b5ffb0", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph20, "osc", "/output12"); ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2547280", &fbargraph20, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b61ed0", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph21, "osc", "/output13"); ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd25490e0", &fbargraph21, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b63e70", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph22, "osc", "/output14"); ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd254b1d0", &fbargraph22, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b66030", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph23, "osc", "/output15"); ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd254cbe0", &fbargraph23, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b67920", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph24, "osc", "/output16"); ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd254e6b0", &fbargraph24, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b69420", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph25, "osc", "/output17"); ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd25503e0", &fbargraph25, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b6b2b0", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph26, "osc", "/output18"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2552060", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b6cf30", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph27, "osc", "/output19"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2554e80", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b6fc00", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fbargraph28, "osc", "/output20"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2557070", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b71ff0", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fbargraph29, "osc", "/output21"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2559150", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b73e40", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fbargraph30, "osc", "/output22"); ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd255b270", &fbargraph30, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b76310", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fbargraph31, "osc", "/output23"); ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd255d220", &fbargraph31, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b78130", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph32, "osc", "/output24"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd255f030", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b7a1f0", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fbargraph33, "osc", "/output25"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd2560ea0", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b7c310", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fbargraph34, "osc", "/output26"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fd25632c0", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fdc99b7e1a0", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1073,18 +1020,18 @@ class mydsp : public dsp { virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); double fSlow1 = double(fcheckbox0); - double fSlow2 = double(fentry0); - double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); - double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow5 = (fConst2 / fSlow2); - double fSlow6 = faustpower<2>(fSlow5); - double fSlow7 = (1.0 / (((3 * fSlow6) + (fConst3 / fSlow2)) + 1)); - double fSlow8 = (12 * fSlow6); - double fSlow9 = (fSlow8 + (fConst4 / fSlow2)); - double fSlow10 = (fSlow1 * fSlow2); - double fSlow11 = (1 - fSlow1); - double fSlow12 = (1.0 / (fSlow5 + 1)); - double fSlow13 = (fConst5 / fSlow2); + double fSlow2 = (1 - fSlow1); + double fSlow3 = double(fentry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (fSlow2 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = (fConst2 / fSlow3); + double fSlow8 = (1.0 / (fSlow7 + 1)); + double fSlow9 = (fConst3 / fSlow3); + double fSlow10 = faustpower<2>(fSlow7); + double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); + double fSlow12 = (12 * fSlow10); + double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1122,225 +1069,232 @@ class mydsp : public dsp { FAUSTFLOAT* output25 = output[25]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1628,7 +1582,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1688,19 +1642,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1711,10 +1666,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev263.cpp b/source/HOAUGens/HOADecLebedev263.cpp index b7ebd91b2e..45e6ec37a6 100644 --- a/source/HOAUGens/HOADecLebedev263.cpp +++ b/source/HOAUGens/HOADecLebedev263.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -647,85 +594,85 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph0; double fConst2; double fConst3; - double fConst4; - double fConst5; - double fRec7[2]; - double fRec8[2]; double fRec6[2]; - double fConst6; - double fRec9[2]; double fRec5[2]; double fRec4[2]; FAUSTFLOAT fbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fbargraph2; + double fConst4; double fRec13[2]; - double fRec14[2]; double fRec12[2]; - double fRec15[2]; + double fConst5; double fRec11[2]; double fRec10[2]; - FAUSTFLOAT fbargraph2; - double fRec19[2]; - double fRec20[2]; - double fRec18[2]; - double fRec21[2]; + FAUSTFLOAT fbargraph3; double fRec17[2]; double fRec16[2]; - FAUSTFLOAT fbargraph3; - double fRec25[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fbargraph4; + double fRec21[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fbargraph5; + double fConst6; + double fConst7; double fRec26[2]; + double fRec25[2]; + double fConst8; double fRec24[2]; + double fConst9; double fRec27[2]; double fRec23[2]; double fRec22[2]; - FAUSTFLOAT fbargraph4; - double fConst7; - double fConst8; - double fRec30[2]; + FAUSTFLOAT fbargraph6; + double fRec32[2]; double fRec31[2]; + double fRec30[2]; + double fRec33[2]; double fRec29[2]; double fRec28[2]; - FAUSTFLOAT fbargraph5; - double fRec34[2]; - double fRec35[2]; - double fRec33[2]; - double fRec32[2]; - FAUSTFLOAT fbargraph6; + FAUSTFLOAT fbargraph7; double fRec38[2]; - double fRec39[2]; double fRec37[2]; double fRec36[2]; - FAUSTFLOAT fbargraph7; - double fConst9; - double fRec42[2]; - double fRec41[2]; - double fRec40[2]; + double fRec39[2]; + double fRec35[2]; + double fRec34[2]; FAUSTFLOAT fbargraph8; - double fRec45[2]; double fRec44[2]; double fRec43[2]; + double fRec42[2]; + double fRec45[2]; + double fRec41[2]; + double fRec40[2]; FAUSTFLOAT fbargraph9; double fRec0[2]; FAUSTFLOAT fbargraph10; double fRec46[2]; FAUSTFLOAT fbargraph11; double fRec50[2]; - double fRec51[2]; double fRec49[2]; double fRec48[2]; FAUSTFLOAT fbargraph12; double fRec54[2]; double fRec53[2]; double fRec52[2]; + double fRec51[2]; FAUSTFLOAT fbargraph13; - double fRec58[2]; double fRec59[2]; + double fRec58[2]; double fRec57[2]; double fRec60[2]; double fRec56[2]; double fRec55[2]; FAUSTFLOAT fbargraph14; - double fRec64[2]; double fRec65[2]; + double fRec64[2]; double fRec63[2]; double fRec66[2]; double fRec62[2]; @@ -741,13 +688,13 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph19; double fRec70[2]; FAUSTFLOAT fbargraph20; - double fRec74[2]; double fRec75[2]; + double fRec74[2]; double fRec73[2]; double fRec72[2]; FAUSTFLOAT fbargraph21; - double fRec79[2]; double fRec80[2]; + double fRec79[2]; double fRec78[2]; double fRec81[2]; double fRec77[2]; @@ -795,6 +742,15 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); m->declare("name", "HOADecLebedev263"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -820,15 +776,6 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 16; } @@ -837,16 +784,16 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); - fConst2 = (394.7715102864353 / fConst0); - fConst3 = (625.2284897135664 / fConst0); - fConst4 = (1.7e+02 / fConst0); - fConst5 = (1250.4569794271329 / fConst0); - fConst6 = (789.5430205728705 / fConst0); - fConst7 = (5.1e+02 / fConst0); - fConst8 = (1.02e+03 / fConst0); - fConst9 = (3.4e+02 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (3.4e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + fConst6 = (394.7715102864353 / fConst0); + fConst7 = (625.2284897135664 / fConst0); + fConst8 = (1250.4569794271329 / fConst0); + fConst9 = (789.5430205728705 / fConst0); } virtual void instanceResetUserInterface() { fslider0 = 0.0; @@ -858,65 +805,65 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; for (int i=0; i<2; i++) fRec17[i] = 0; for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; for (int i=0; i<2; i++) fRec24[i] = 0; for (int i=0; i<2; i++) fRec27[i] = 0; for (int i=0; i<2; i++) fRec23[i] = 0; for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; for (int i=0; i<2; i++) fRec29[i] = 0; for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; for (int i=0; i<2; i++) fRec37[i] = 0; for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; for (int i=0; i<2; i++) fRec41[i] = 0; for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec46[i] = 0; for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; for (int i=0; i<2; i++) fRec49[i] = 0; for (int i=0; i<2; i++) fRec48[i] = 0; for (int i=0; i<2; i++) fRec54[i] = 0; for (int i=0; i<2; i++) fRec53[i] = 0; for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; for (int i=0; i<2; i++) fRec57[i] = 0; for (int i=0; i<2; i++) fRec60[i] = 0; for (int i=0; i<2; i++) fRec56[i] = 0; for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; for (int i=0; i<2; i++) fRec63[i] = 0; for (int i=0; i<2; i++) fRec66[i] = 0; for (int i=0; i<2; i++) fRec62[i] = 0; @@ -926,12 +873,12 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec68[i] = 0; for (int i=0; i<2; i++) fRec69[i] = 0; for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; for (int i=0; i<2; i++) fRec73[i] = 0; for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; for (int i=0; i<2; i++) fRec78[i] = 0; for (int i=0; i<2; i++) fRec81[i] = 0; for (int i=0; i<2; i++) fRec77[i] = 0; @@ -972,79 +919,79 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev263"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422810a0", &fbargraph0, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e261e0", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422aa2a0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e4c3c0", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd54229e2a0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e29370", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422a0b60", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e2bc20", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422a7a90", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e4f3b0", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422c1550", &fbargraph21, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e650b0", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd54229b5b0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e2fb70", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422986b0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e32bb0", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd542295670", &fbargraph5, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e35c70", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422b1b10", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e52e70", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422c52e0", &fbargraph22, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e68b70", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422adfc0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e56880", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd542291980", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e3aed0", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd54228dfa0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e3ea60", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd54228a4c0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e426c0", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd542286940", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe482e463e0", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1067,134 +1014,134 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph10, "osc", "/output1"); ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422a2a30", &fbargraph10, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e47be0", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph11, "osc", "/output2"); ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422a4ab0", &fbargraph11, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e49ae0", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph16, "osc", "/output3"); ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422b3760", &fbargraph16, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e58700", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph17, "osc", "/output4"); ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422b5d80", &fbargraph17, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e5ab30", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph18, "osc", "/output5"); ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422b8580", &fbargraph18, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e5d220", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph19, "osc", "/output6"); ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422ba240", &fbargraph19, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e5ee60", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph20, "osc", "/output7"); ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422bd3b0", &fbargraph20, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e61f90", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph23, "osc", "/output8"); ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422c7150", &fbargraph23, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e6ba60", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph24, "osc", "/output9"); ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422ca000", &fbargraph24, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e6e9b0", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph25, "osc", "/output10"); ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422cd090", &fbargraph25, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e71810", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph26, "osc", "/output11"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422cffe0", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e745e0", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph27, "osc", "/output12"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422d2820", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e76e20", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph28, "osc", "/output13"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422d4d70", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e79520", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph29, "osc", "/output14"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422d7400", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e7baa0", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph30, "osc", "/output15"); ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422d9160", &fbargraph30, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e7d670", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph31, "osc", "/output16"); ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422db6b0", &fbargraph31, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e7f960", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph32, "osc", "/output17"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422dd940", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e81f10", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph33, "osc", "/output18"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422dfd50", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e843e0", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph34, "osc", "/output19"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422e4030", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e88550", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fbargraph35, "osc", "/output20"); ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422e7680", &fbargraph35, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e8bae0", &fbargraph35, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fbargraph36, "osc", "/output21"); ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422ea5c0", &fbargraph36, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e8ea30", &fbargraph36, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fbargraph37, "osc", "/output22"); ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422ed4b0", &fbargraph37, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e918a0", &fbargraph37, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fbargraph38, "osc", "/output23"); ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422efd90", &fbargraph38, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e93eb0", &fbargraph38, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph39, "osc", "/output24"); ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422f23f0", &fbargraph39, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e96810", &fbargraph39, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fbargraph40, "osc", "/output25"); ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422f4c70", &fbargraph40, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e990b0", &fbargraph40, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fbargraph41, "osc", "/output26"); ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd5422f7960", &fbargraph41, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe482e9b820", &fbargraph41, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1202,23 +1149,23 @@ class mydsp : public dsp { virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); double fSlow1 = double(fcheckbox0); - double fSlow2 = double(fentry0); - double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); - double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow5 = (1.0 / ((fConst2 / fSlow2) + 1)); - double fSlow6 = (fConst4 / fSlow2); - double fSlow7 = faustpower<2>(fSlow6); - double fSlow8 = (1.0 / (((fConst3 / fSlow2) + (6.45943269348338 * fSlow7)) + 1)); - double fSlow9 = (25.83773077393352 * fSlow7); - double fSlow10 = (fSlow9 + (fConst5 / fSlow2)); - double fSlow11 = (fSlow1 * fSlow2); - double fSlow12 = (fConst6 / fSlow2); - double fSlow13 = (1 - fSlow1); - double fSlow14 = (1.0 / (((3 * fSlow7) + (fConst7 / fSlow2)) + 1)); - double fSlow15 = (12 * fSlow7); - double fSlow16 = (fSlow15 + (fConst8 / fSlow2)); - double fSlow17 = (1.0 / (fSlow6 + 1)); - double fSlow18 = (fConst9 / fSlow2); + double fSlow2 = (1 - fSlow1); + double fSlow3 = double(fentry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (fSlow2 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = (fConst2 / fSlow3); + double fSlow8 = (1.0 / (fSlow7 + 1)); + double fSlow9 = (fConst3 / fSlow3); + double fSlow10 = faustpower<2>(fSlow7); + double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); + double fSlow12 = (12 * fSlow10); + double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); + double fSlow14 = (1.0 / ((fConst6 / fSlow3) + 1)); + double fSlow15 = (1.0 / (((fConst7 / fSlow3) + (6.45943269348338 * fSlow10)) + 1)); + double fSlow16 = (25.83773077393352 * fSlow10); + double fSlow17 = (fSlow16 + (fConst8 / fSlow3)); + double fSlow18 = (fConst9 / fSlow3); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1263,343 +1210,349 @@ class mydsp : public dsp { FAUSTFLOAT* output25 = output[25]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1929,7 +1882,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1989,19 +1942,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -2012,10 +1966,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev501.cpp b/source/HOAUGens/HOADecLebedev501.cpp index 5950cc2708..30519fc618 100644 --- a/source/HOAUGens/HOADecLebedev501.cpp +++ b/source/HOAUGens/HOADecLebedev501.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -751,6 +698,11 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); m->declare("name", "HOADecLebedev501"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -761,11 +713,6 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); @@ -776,15 +723,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 4; } @@ -793,7 +740,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); fConst2 = (1.7e+02 / fConst0); fConst3 = (3.4e+02 / fConst0); @@ -884,27 +831,27 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev501"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348beb40", &fbargraph0, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443a3bb0", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348c94b0", &fbargraph5, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443ae870", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348c1d80", &fbargraph1, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443a6ce0", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348c45e0", &fbargraph2, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443a95a0", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -927,254 +874,254 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph3, "osc", "/output1"); ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348c5c50", &fbargraph3, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443aab50", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph4, "osc", "/output2"); ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348c6c90", &fbargraph4, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443ac040", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph6, "osc", "/output3"); ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348ca980", &fbargraph6, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443afd20", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph7, "osc", "/output4"); ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348cc2f0", &fbargraph7, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443b1720", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph8, "osc", "/output5"); ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348cdb70", &fbargraph8, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443b3080", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph9, "osc", "/output6"); ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348cf3f0", &fbargraph9, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443b4790", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph10, "osc", "/output7"); ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348d1260", &fbargraph10, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443b6550", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph11, "osc", "/output8"); ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348d2ea0", &fbargraph11, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443b8150", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph12, "osc", "/output9"); ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348d4aa0", &fbargraph12, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443b9c60", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph13, "osc", "/output10"); ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348d6760", &fbargraph13, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443bb7e0", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph14, "osc", "/output11"); ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348d8230", &fbargraph14, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443bd320", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph15, "osc", "/output12"); ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348d9e40", &fbargraph15, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443bed50", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph16, "osc", "/output13"); ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348db7f0", &fbargraph16, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443c0a00", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph17, "osc", "/output14"); ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348dd370", &fbargraph17, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443c2570", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph18, "osc", "/output15"); ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348def50", &fbargraph18, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443c4080", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph19, "osc", "/output16"); ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348e0c90", &fbargraph19, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443c5db0", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph20, "osc", "/output17"); ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348e2950", &fbargraph20, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443c79a0", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph21, "osc", "/output18"); ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348e4770", &fbargraph21, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443c9960", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph22, "osc", "/output19"); ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348e6b80", &fbargraph22, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443cbda0", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fbargraph23, "osc", "/output20"); ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348e8c10", &fbargraph23, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443cddc0", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fbargraph24, "osc", "/output21"); ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348eacb0", &fbargraph24, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443cfe10", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fbargraph25, "osc", "/output22"); ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348ecc70", &fbargraph25, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443d1d10", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fbargraph26, "osc", "/output23"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348eec90", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443d3fc0", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph27, "osc", "/output24"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348f0c70", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443d5fd0", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fbargraph28, "osc", "/output25"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348f3010", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443d81d0", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); ui_interface->declare(&fbargraph29, "osc", "/output26"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348f52b0", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443da3b0", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fbargraph30, "osc", "/output27"); ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348f6f90", &fbargraph30, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443dc160", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fbargraph31, "osc", "/output28"); ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348f8890", &fbargraph31, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443dd940", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fbargraph32, "osc", "/output29"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348fa2f0", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443df3b0", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fbargraph33, "osc", "/output30"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa5348fbe80", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443e0dd0", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fbargraph34, "osc", "/output31"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a01c80", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443e2ce0", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fbargraph35, "osc", "/output32"); ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a03930", &fbargraph35, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443e4890", &fbargraph35, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fbargraph36, "osc", "/output33"); ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a05580", &fbargraph36, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443e6380", &fbargraph36, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fbargraph37, "osc", "/output34"); ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a071b0", &fbargraph37, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443e7f10", &fbargraph37, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fbargraph38, "osc", "/output35"); ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a08eb0", &fbargraph38, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443e9b00", &fbargraph38, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); ui_interface->declare(&fbargraph39, "osc", "/output36"); ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a0ab10", &fbargraph39, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443eb760", &fbargraph39, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); ui_interface->declare(&fbargraph40, "osc", "/output37"); ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a0c8d0", &fbargraph40, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443ed430", &fbargraph40, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); ui_interface->declare(&fbargraph41, "osc", "/output38"); ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a0e960", &fbargraph41, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443ef0f0", &fbargraph41, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); ui_interface->declare(&fbargraph42, "osc", "/output39"); ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a105a0", &fbargraph42, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443f1000", &fbargraph42, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); ui_interface->declare(&fbargraph43, "osc", "/output40"); ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a122e0", &fbargraph43, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443f2d40", &fbargraph43, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); ui_interface->declare(&fbargraph44, "osc", "/output41"); ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa534a140e0", &fbargraph44, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443f4930", &fbargraph44, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); ui_interface->declare(&fbargraph45, "osc", "/output42"); ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa531caef60", &fbargraph45, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443f6700", &fbargraph45, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); ui_interface->declare(&fbargraph46, "osc", "/output43"); ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa531cb0d00", &fbargraph46, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443f84b0", &fbargraph46, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); ui_interface->declare(&fbargraph47, "osc", "/output44"); ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa531cb2c00", &fbargraph47, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc1443fa5f0", &fbargraph47, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); ui_interface->declare(&fbargraph48, "osc", "/output45"); ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa531cb4a80", &fbargraph48, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc145c004b0", &fbargraph48, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); ui_interface->declare(&fbargraph49, "osc", "/output46"); ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa531cb6ab0", &fbargraph49, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc145c022e0", &fbargraph49, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); ui_interface->declare(&fbargraph50, "osc", "/output47"); ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa533dda8a0", &fbargraph50, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc145c043f0", &fbargraph50, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); ui_interface->declare(&fbargraph51, "osc", "/output48"); ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa533ddc7c0", &fbargraph51, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc145c063c0", &fbargraph51, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); ui_interface->declare(&fbargraph52, "osc", "/output49"); ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa533dde8f0", &fbargraph52, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc145c084e0", &fbargraph52, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); ui_interface->declare(&fbargraph53, "osc", "/output50"); ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa533de0ae0", &fbargraph53, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fc145c0a4c0", &fbargraph53, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1182,13 +1129,13 @@ class mydsp : public dsp { virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); double fSlow1 = double(fcheckbox0); - double fSlow2 = double(fentry0); - double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); - double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow5 = (1 - fSlow1); - double fSlow6 = (1.0 / ((fConst2 / fSlow2) + 1)); - double fSlow7 = (fSlow1 * fSlow2); - double fSlow8 = (fConst3 / fSlow2); + double fSlow2 = (1 - fSlow1); + double fSlow3 = double(fentry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (fSlow2 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = (1.0 / ((fConst2 / fSlow3) + 1)); + double fSlow8 = (fConst3 / fSlow3); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1245,278 +1192,281 @@ class mydsp : public dsp { FAUSTFLOAT* output49 = output[49]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1808,7 +1758,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1868,19 +1818,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1891,10 +1842,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev502.cpp b/source/HOAUGens/HOADecLebedev502.cpp index 09045f08b7..42f3b67a69 100644 --- a/source/HOAUGens/HOADecLebedev502.cpp +++ b/source/HOAUGens/HOADecLebedev502.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -637,41 +584,41 @@ class mydsp : public dsp { private: double fConst0; double fConst1; - FAUSTFLOAT fentry0; - FAUSTFLOAT fcheckbox0; FAUSTFLOAT fslider0; - double fRec2[2]; double fRec1[2]; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fentry0; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fRec2[2]; FAUSTFLOAT fbargraph0; double fConst2; double fConst3; + double fRec6[2]; double fRec5[2]; double fRec4[2]; - double fRec3[2]; FAUSTFLOAT fbargraph1; - double fConst4; - double fConst5; - double fRec8[2]; double fRec9[2]; + double fRec8[2]; double fRec7[2]; - double fRec6[2]; FAUSTFLOAT fbargraph2; - double fRec12[2]; + double fConst4; double fRec13[2]; + double fRec12[2]; + double fConst5; double fRec11[2]; double fRec10[2]; FAUSTFLOAT fbargraph3; - double fRec16[2]; double fRec17[2]; + double fRec16[2]; double fRec15[2]; double fRec14[2]; FAUSTFLOAT fbargraph4; + double fRec21[2]; double fRec20[2]; double fRec19[2]; double fRec18[2]; FAUSTFLOAT fbargraph5; - FAUSTFLOAT fslider1; - double fRec21[2]; double fRec0[2]; FAUSTFLOAT fbargraph6; double fRec22[2]; @@ -680,8 +627,8 @@ class mydsp : public dsp { double fRec25[2]; double fRec24[2]; FAUSTFLOAT fbargraph8; - double fRec29[2]; double fRec30[2]; + double fRec29[2]; double fRec28[2]; double fRec27[2]; FAUSTFLOAT fbargraph9; @@ -695,8 +642,8 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph13; double fRec34[2]; FAUSTFLOAT fbargraph14; - double fRec38[2]; double fRec39[2]; + double fRec38[2]; double fRec37[2]; double fRec36[2]; FAUSTFLOAT fbargraph15; @@ -815,15 +762,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 9; } @@ -832,7 +779,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); fConst2 = (1.7e+02 / fConst0); fConst3 = (3.4e+02 / fConst0); @@ -840,40 +787,40 @@ class mydsp : public dsp { fConst5 = (1.02e+03 / fConst0); } virtual void instanceResetUserInterface() { - fentry0 = 1.07; - fcheckbox0 = 0.0; fslider0 = 0.0; + fcheckbox0 = 0.0; + fentry0 = 1.07; fslider1 = 0.0; } virtual void instanceClear() { - for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; for (int i=0; i<2; i++) fRec15[i] = 0; for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; for (int i=0; i<2; i++) fRec20[i] = 0; for (int i=0; i<2; i++) fRec19[i] = 0; for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; for (int i=0; i<2; i++) fRec25[i] = 0; for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; for (int i=0; i<2; i++) fRec28[i] = 0; for (int i=0; i<2; i++) fRec27[i] = 0; for (int i=0; i<2; i++) fRec23[i] = 0; @@ -881,8 +828,8 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec32[i] = 0; for (int i=0; i<2; i++) fRec33[i] = 0; for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; for (int i=0; i<2; i++) fRec37[i] = 0; for (int i=0; i<2; i++) fRec36[i] = 0; for (int i=0; i<2; i++) fRec35[i] = 0; @@ -945,60 +892,60 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev502"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab771c720", &fbargraph0, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61690b0", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7732c50", &fbargraph8, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae617e460", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab772c620", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcae616c200", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab771fa50", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcae616eab0", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7735bc0", &fbargraph9, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae6181290", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7742940", &fbargraph15, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae618dc00", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab77238b0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcae6172a00", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7726a10", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcae6175a50", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7729bb0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcae6178b10", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider1, "2", ""); - ui_interface->declare(&fslider1, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); ui_interface->addCheckButton("Yes", &fcheckbox0); @@ -1010,273 +957,273 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph6, "osc", "/output1"); ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab772e9d0", &fbargraph6, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae617a240", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph7, "osc", "/output2"); ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7730420", &fbargraph7, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae617bc60", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph10, "osc", "/output3"); ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7737270", &fbargraph10, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61829a0", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph11, "osc", "/output4"); ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7738ef0", &fbargraph11, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61847c0", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph12, "osc", "/output5"); ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab773ae30", &fbargraph12, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61864f0", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph13, "osc", "/output6"); ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab773c4f0", &fbargraph13, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae6187fa0", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph14, "osc", "/output7"); ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab773eab0", &fbargraph14, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae618a4e0", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph16, "osc", "/output8"); ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7743ed0", &fbargraph16, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae618f7e0", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph17, "osc", "/output9"); ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7746350", &fbargraph17, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae6191cf0", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph18, "osc", "/output10"); ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7748470", &fbargraph18, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61941c0", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph19, "osc", "/output11"); ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab774a800", &fbargraph19, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61963e0", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph20, "osc", "/output12"); ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab774c880", &fbargraph20, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae6198380", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph21, "osc", "/output13"); ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab774e7f0", &fbargraph21, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae619a2f0", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph22, "osc", "/output14"); ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7750850", &fbargraph22, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae619c310", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph23, "osc", "/output15"); ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51b99b0", &fbargraph23, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae619df90", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph24, "osc", "/output16"); ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51bb800", &fbargraph24, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61a0230", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph25, "osc", "/output17"); ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51bdae0", &fbargraph25, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61a2320", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph26, "osc", "/output18"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51bfca0", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61a45f0", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph27, "osc", "/output19"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51c2da0", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61a79a0", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fbargraph28, "osc", "/output20"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51c5770", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61aa2f0", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fbargraph29, "osc", "/output21"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51c7b00", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61ac860", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fbargraph30, "osc", "/output22"); ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51ca1a0", &fbargraph30, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61af020", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fbargraph31, "osc", "/output23"); ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51cc900", &fbargraph31, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61b1540", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph32, "osc", "/output24"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51cef00", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61b36e0", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fbargraph33, "osc", "/output25"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51d12b0", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61b5ce0", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); ui_interface->declare(&fbargraph34, "osc", "/output26"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51d3b70", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61b8480", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fbargraph35, "osc", "/output27"); ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51d6590", &fbargraph35, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61bac00", &fbargraph35, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fbargraph36, "osc", "/output28"); ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51d85e0", &fbargraph36, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61bce00", &fbargraph36, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fbargraph37, "osc", "/output29"); ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51da9f0", &fbargraph37, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61befd0", &fbargraph37, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fbargraph38, "osc", "/output30"); ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51dce20", &fbargraph38, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61c1320", &fbargraph38, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fbargraph39, "osc", "/output31"); ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51dfb30", &fbargraph39, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61c40c0", &fbargraph39, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fbargraph40, "osc", "/output32"); ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51e2430", &fbargraph40, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61c6970", &fbargraph40, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fbargraph41, "osc", "/output33"); ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51e4a00", &fbargraph41, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61c8f70", &fbargraph41, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fbargraph42, "osc", "/output34"); ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51e7020", &fbargraph42, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61cb300", &fbargraph42, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fbargraph43, "osc", "/output35"); ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51e9730", &fbargraph43, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61cdd10", &fbargraph43, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); ui_interface->declare(&fbargraph44, "osc", "/output36"); ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51ebdc0", &fbargraph44, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61d0490", &fbargraph44, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); ui_interface->declare(&fbargraph45, "osc", "/output37"); ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51ee670", &fbargraph45, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61d2d20", &fbargraph45, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); ui_interface->declare(&fbargraph46, "osc", "/output38"); ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51f1240", &fbargraph46, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61d5850", &fbargraph46, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); ui_interface->declare(&fbargraph47, "osc", "/output39"); ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51f31d0", &fbargraph47, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae61d7900", &fbargraph47, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); ui_interface->declare(&fbargraph48, "osc", "/output40"); ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51f5150", &fbargraph48, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae7d47fe0", &fbargraph48, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); ui_interface->declare(&fbargraph49, "osc", "/output41"); ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51f7650", &fbargraph49, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae7d4a2e0", &fbargraph49, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); ui_interface->declare(&fbargraph50, "osc", "/output42"); ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51f9a40", &fbargraph50, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae7d4c460", &fbargraph50, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); ui_interface->declare(&fbargraph51, "osc", "/output43"); ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab51fbbd0", &fbargraph51, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae7d4e7f0", &fbargraph51, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); ui_interface->declare(&fbargraph52, "osc", "/output44"); ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7801d20", &fbargraph52, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae7d50bd0", &fbargraph52, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); ui_interface->declare(&fbargraph53, "osc", "/output45"); ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7804060", &fbargraph53, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae7d530e0", &fbargraph53, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); ui_interface->declare(&fbargraph54, "osc", "/output46"); ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7806550", &fbargraph54, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae779d430", &fbargraph54, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); ui_interface->declare(&fbargraph55, "osc", "/output47"); ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab7808740", &fbargraph55, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae779f590", &fbargraph55, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); ui_interface->declare(&fbargraph56, "osc", "/output48"); ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab780ac40", &fbargraph56, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae77a1ba0", &fbargraph56, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); ui_interface->declare(&fbargraph57, "osc", "/output49"); ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab780d1b0", &fbargraph57, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae77a41b0", &fbargraph57, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); ui_interface->declare(&fbargraph58, "osc", "/output50"); ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ab780f340", &fbargraph58, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcae77a6780", &fbargraph58, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fentry0); + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - ((1 - fSlow0) * fSlow1)); - double fSlow3 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow4 = (fConst2 / fSlow0); - double fSlow5 = (1.0 / (fSlow4 + 1)); - double fSlow6 = (fSlow1 * fSlow0); - double fSlow7 = (fConst3 / fSlow0); - double fSlow8 = (1 - fSlow1); - double fSlow9 = faustpower<2>(fSlow4); - double fSlow10 = (1.0 / (((3 * fSlow9) + (fConst4 / fSlow0)) + 1)); - double fSlow11 = (12 * fSlow9); - double fSlow12 = (fSlow11 + (fConst5 / fSlow0)); - double fSlow13 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow2 = (1 - fSlow1); + double fSlow3 = double(fentry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (fSlow2 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = (fConst2 / fSlow3); + double fSlow8 = (1.0 / (fSlow7 + 1)); + double fSlow9 = (fConst3 / fSlow3); + double fSlow10 = faustpower<2>(fSlow7); + double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); + double fSlow12 = (12 * fSlow10); + double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1337,390 +1284,389 @@ class mydsp : public dsp { FAUSTFLOAT* output48 = output[48]; FAUSTFLOAT* output49 = output[49]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -2032,7 +1978,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -2092,19 +2038,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -2115,10 +2062,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev503.cpp b/source/HOAUGens/HOADecLebedev503.cpp index 6a3eb2290e..c7265679c6 100644 --- a/source/HOAUGens/HOADecLebedev503.cpp +++ b/source/HOAUGens/HOADecLebedev503.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -637,95 +584,95 @@ class mydsp : public dsp { private: double fConst0; double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; double fConst2; + FAUSTFLOAT fentry0; double fConst3; double fConst4; - double fConst5; - double fRec7[2]; - double fRec8[2]; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fslider0; + double fRec4[2]; double fRec6[2]; - double fConst6; - double fRec9[2]; double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec13[2]; - double fRec14[2]; + double fConst5; + double fRec3[2]; + double fConst6; + double fRec7[2]; + double fRec2[2]; + double fRec1[2]; + FAUSTFLOAT fbargraph0; double fRec12[2]; - double fRec15[2]; double fRec11[2]; double fRec10[2]; - FAUSTFLOAT fbargraph2; - double fRec19[2]; - double fRec20[2]; + double fRec13[2]; + double fRec9[2]; + double fRec8[2]; + FAUSTFLOAT fbargraph1; double fRec18[2]; - double fRec21[2]; double fRec17[2]; double fRec16[2]; + double fRec19[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fbargraph2; + double fRec20[2]; FAUSTFLOAT fbargraph3; - double fRec25[2]; - double fRec26[2]; - double fRec24[2]; - double fRec27[2]; + double fConst7; double fRec23[2]; double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fbargraph4; - double fConst7; + double fRec26[2]; + double fRec25[2]; + double fRec24[2]; + FAUSTFLOAT fbargraph5; double fConst8; double fRec30[2]; - double fRec31[2]; double fRec29[2]; + double fConst9; double fRec28[2]; - FAUSTFLOAT fbargraph5; + double fRec27[2]; + FAUSTFLOAT fbargraph6; double fRec34[2]; - double fRec35[2]; double fRec33[2]; double fRec32[2]; - FAUSTFLOAT fbargraph6; + double fRec31[2]; + FAUSTFLOAT fbargraph7; double fRec38[2]; - double fRec39[2]; double fRec37[2]; double fRec36[2]; - FAUSTFLOAT fbargraph7; - double fConst9; + double fRec35[2]; + FAUSTFLOAT fbargraph8; + double fRec43[2]; double fRec42[2]; double fRec41[2]; - double fRec40[2]; - FAUSTFLOAT fbargraph8; - double fRec45[2]; double fRec44[2]; - double fRec43[2]; + double fRec40[2]; + double fRec39[2]; FAUSTFLOAT fbargraph9; + FAUSTFLOAT fslider1; + double fRec45[2]; double fRec0[2]; FAUSTFLOAT fbargraph10; double fRec46[2]; FAUSTFLOAT fbargraph11; double fRec50[2]; - double fRec51[2]; double fRec49[2]; double fRec48[2]; FAUSTFLOAT fbargraph12; double fRec54[2]; double fRec53[2]; double fRec52[2]; + double fRec51[2]; FAUSTFLOAT fbargraph13; - double fRec58[2]; double fRec59[2]; + double fRec58[2]; double fRec57[2]; double fRec60[2]; double fRec56[2]; double fRec55[2]; FAUSTFLOAT fbargraph14; - double fRec64[2]; double fRec65[2]; + double fRec64[2]; double fRec63[2]; double fRec66[2]; double fRec62[2]; @@ -741,15 +688,15 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph19; double fRec70[2]; FAUSTFLOAT fbargraph20; - double fRec75[2]; double fRec76[2]; + double fRec75[2]; double fRec74[2]; double fRec77[2]; double fRec73[2]; double fRec72[2]; FAUSTFLOAT fbargraph21; - double fRec80[2]; double fRec81[2]; + double fRec80[2]; double fRec79[2]; double fRec78[2]; FAUSTFLOAT fbargraph22; @@ -843,11 +790,6 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); m->declare("name", "HOADecLebedev503"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -873,10 +815,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 16; } @@ -885,86 +832,86 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); fConst2 = (394.7715102864353 / fConst0); fConst3 = (625.2284897135664 / fConst0); fConst4 = (1.7e+02 / fConst0); fConst5 = (1250.4569794271329 / fConst0); fConst6 = (789.5430205728705 / fConst0); - fConst7 = (5.1e+02 / fConst0); - fConst8 = (1.02e+03 / fConst0); - fConst9 = (3.4e+02 / fConst0); + fConst7 = (3.4e+02 / fConst0); + fConst8 = (5.1e+02 / fConst0); + fConst9 = (1.02e+03 / fConst0); } virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; fentry0 = 1.07; + fcheckbox0 = 0.0; + fslider0 = 0.0; fslider1 = 0.0; } virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; for (int i=0; i<2; i++) fRec17[i] = 0; for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; for (int i=0; i<2; i++) fRec23[i] = 0; for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; for (int i=0; i<2; i++) fRec29[i] = 0; for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; for (int i=0; i<2; i++) fRec33[i] = 0; for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; for (int i=0; i<2; i++) fRec37[i] = 0; for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; for (int i=0; i<2; i++) fRec42[i] = 0; for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec46[i] = 0; for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; for (int i=0; i<2; i++) fRec49[i] = 0; for (int i=0; i<2; i++) fRec48[i] = 0; for (int i=0; i<2; i++) fRec54[i] = 0; for (int i=0; i<2; i++) fRec53[i] = 0; for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; for (int i=0; i<2; i++) fRec59[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; for (int i=0; i<2; i++) fRec57[i] = 0; for (int i=0; i<2; i++) fRec60[i] = 0; for (int i=0; i<2; i++) fRec56[i] = 0; for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec64[i] = 0; for (int i=0; i<2; i++) fRec63[i] = 0; for (int i=0; i<2; i++) fRec66[i] = 0; for (int i=0; i<2; i++) fRec62[i] = 0; @@ -974,14 +921,14 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec68[i] = 0; for (int i=0; i<2; i++) fRec69[i] = 0; for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; for (int i=0; i<2; i++) fRec74[i] = 0; for (int i=0; i<2; i++) fRec77[i] = 0; for (int i=0; i<2; i++) fRec73[i] = 0; for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; for (int i=0; i<2; i++) fRec81[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; for (int i=0; i<2; i++) fRec79[i] = 0; for (int i=0; i<2; i++) fRec78[i] = 0; for (int i=0; i<2; i++) fRec71[i] = 0; @@ -1044,90 +991,90 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev503"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee3b5c0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc5761c20", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee646d0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc577bcd0", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee587b0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc5764a80", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee5b070", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc5767450", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee61ea0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc577ea70", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee7e610", &fbargraph22, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57990b0", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee55ab0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc576b200", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee52bb0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc576e270", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee4fb20", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc5771350", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee6bf40", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc5782740", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee7b5f0", &fbargraph21, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57960f0", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee683f0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc5786150", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee4be80", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc5774fd0", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee484a0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc5758a70", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee449c0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc575c400", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee40e30", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f7fc575fe60", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "osc", "/levelin -10 60"); ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->addVerticalSlider("Inputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider1, "2", ""); + ui_interface->declare(&fslider1, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); ui_interface->addCheckButton("Yes", &fcheckbox0); @@ -1139,278 +1086,278 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph10, "osc", "/output1"); ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee5ceb0", &fbargraph10, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc5777490", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph11, "osc", "/output2"); ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee5eeb0", &fbargraph11, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57793b0", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph16, "osc", "/output3"); ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee6de20", &fbargraph16, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc5787fc0", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph17, "osc", "/output4"); ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee701e0", &fbargraph17, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc578a490", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph18, "osc", "/output5"); ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee729a0", &fbargraph18, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc578cc00", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph19, "osc", "/output6"); ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee74660", &fbargraph19, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc578ea40", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph20, "osc", "/output7"); ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee77800", &fbargraph20, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc5791b10", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph23, "osc", "/output8"); ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee816e0", &fbargraph23, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc579b660", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph24, "osc", "/output9"); ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee84420", &fbargraph24, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc579e750", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph25, "osc", "/output10"); ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee87610", &fbargraph25, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57a18f0", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph26, "osc", "/output11"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee8a130", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57a42b0", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph27, "osc", "/output12"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee8cad0", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57a6ce0", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph28, "osc", "/output13"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee8f180", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57a9370", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph29, "osc", "/output14"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee91830", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57aba50", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph30, "osc", "/output15"); ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee93880", &fbargraph30, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57adaf0", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph31, "osc", "/output16"); ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee964d0", &fbargraph31, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57b04d0", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph32, "osc", "/output17"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee98d30", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57b2bd0", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph33, "osc", "/output18"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ee9b7e0", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57b5880", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph34, "osc", "/output19"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eea0080", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57b9e70", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fbargraph35, "osc", "/output20"); ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eea3650", &fbargraph35, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57bd8a0", &fbargraph35, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fbargraph36, "osc", "/output21"); ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eea6b30", &fbargraph36, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57c0df0", &fbargraph36, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fbargraph37, "osc", "/output22"); ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eea9c30", &fbargraph37, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57c42e0", &fbargraph37, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fbargraph38, "osc", "/output23"); ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eeacb10", &fbargraph38, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57c7110", &fbargraph38, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph39, "osc", "/output24"); ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eeaf7d0", &fbargraph39, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57c9dc0", &fbargraph39, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fbargraph40, "osc", "/output25"); ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eeb2590", &fbargraph40, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57ccbb0", &fbargraph40, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); ui_interface->declare(&fbargraph41, "osc", "/output26"); ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eeb5310", &fbargraph41, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57cfa40", &fbargraph41, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fbargraph42, "osc", "/output27"); ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eeb9290", &fbargraph42, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57d36c0", &fbargraph42, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fbargraph43, "osc", "/output28"); ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eebbbd0", &fbargraph43, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57d62c0", &fbargraph43, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fbargraph44, "osc", "/output29"); ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eebed80", &fbargraph44, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57d9ac0", &fbargraph44, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fbargraph45, "osc", "/output30"); ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eec2240", &fbargraph45, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57dca80", &fbargraph45, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fbargraph46, "osc", "/output31"); ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eec6470", &fbargraph46, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57e0eb0", &fbargraph46, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fbargraph47, "osc", "/output32"); ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eec9f80", &fbargraph47, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57e4810", &fbargraph47, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fbargraph48, "osc", "/output33"); ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eecd700", &fbargraph48, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57e7fa0", &fbargraph48, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fbargraph49, "osc", "/output34"); ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eed0b80", &fbargraph49, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57eb3d0", &fbargraph49, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fbargraph50, "osc", "/output35"); ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eed4220", &fbargraph50, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57eeb80", &fbargraph50, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); ui_interface->declare(&fbargraph51, "osc", "/output36"); ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec4d980", &fbargraph51, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57f2470", &fbargraph51, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); ui_interface->declare(&fbargraph52, "osc", "/output37"); ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec512c0", &fbargraph52, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57f5e60", &fbargraph52, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); ui_interface->declare(&fbargraph53, "osc", "/output38"); ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec54f30", &fbargraph53, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc57f9d50", &fbargraph53, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); ui_interface->declare(&fbargraph54, "osc", "/output39"); ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec57a90", &fbargraph54, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc60008b0", &fbargraph54, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); ui_interface->declare(&fbargraph55, "osc", "/output40"); ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec5a380", &fbargraph55, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc60032c0", &fbargraph55, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); ui_interface->declare(&fbargraph56, "osc", "/output41"); ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec5cc40", &fbargraph56, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc6005e60", &fbargraph56, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); ui_interface->declare(&fbargraph57, "osc", "/output42"); ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec5f780", &fbargraph57, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc6008960", &fbargraph57, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); ui_interface->declare(&fbargraph58, "osc", "/output43"); ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec62100", &fbargraph58, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc600b4f0", &fbargraph58, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); ui_interface->declare(&fbargraph59, "osc", "/output44"); ui_interface->declare(&fbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec64e10", &fbargraph59, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc600e130", &fbargraph59, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); ui_interface->declare(&fbargraph60, "osc", "/output45"); ui_interface->declare(&fbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec67930", &fbargraph60, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc6010d90", &fbargraph60, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); ui_interface->declare(&fbargraph61, "osc", "/output46"); ui_interface->declare(&fbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec6a4d0", &fbargraph61, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc60138b0", &fbargraph61, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); ui_interface->declare(&fbargraph62, "osc", "/output47"); ui_interface->declare(&fbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec6cf00", &fbargraph62, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc21024e0", &fbargraph62, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); ui_interface->declare(&fbargraph63, "osc", "/output48"); ui_interface->declare(&fbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec6fa70", &fbargraph63, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc6017a30", &fbargraph63, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); ui_interface->declare(&fbargraph64, "osc", "/output49"); ui_interface->declare(&fbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56ec729d0", &fbargraph64, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc601a800", &fbargraph64, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); ui_interface->declare(&fbargraph65, "osc", "/output50"); ui_interface->declare(&fbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff56eed7470", &fbargraph65, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f7fc601d6b0", &fbargraph65, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = double(fentry0); - double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); - double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow5 = (1.0 / ((fConst2 / fSlow2) + 1)); - double fSlow6 = (fConst4 / fSlow2); - double fSlow7 = faustpower<2>(fSlow6); - double fSlow8 = (1.0 / (((fConst3 / fSlow2) + (6.45943269348338 * fSlow7)) + 1)); - double fSlow9 = (25.83773077393352 * fSlow7); - double fSlow10 = (fSlow9 + (fConst5 / fSlow2)); - double fSlow11 = (fSlow1 * fSlow2); - double fSlow12 = (fConst6 / fSlow2); - double fSlow13 = (1 - fSlow1); - double fSlow14 = (1.0 / (((3 * fSlow7) + (fConst7 / fSlow2)) + 1)); - double fSlow15 = (12 * fSlow7); - double fSlow16 = (fSlow15 + (fConst8 / fSlow2)); - double fSlow17 = (1.0 / (fSlow6 + 1)); - double fSlow18 = (fConst9 / fSlow2); + double fSlow0 = double(fentry0); + double fSlow1 = (1.0 / ((fConst2 / fSlow0) + 1)); + double fSlow2 = (fConst4 / fSlow0); + double fSlow3 = faustpower<2>(fSlow2); + double fSlow4 = (1.0 / (((fConst3 / fSlow0) + (6.45943269348338 * fSlow3)) + 1)); + double fSlow5 = double(fcheckbox0); + double fSlow6 = (fSlow5 * fSlow0); + double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow8 = (25.83773077393352 * fSlow3); + double fSlow9 = (fSlow8 + (fConst5 / fSlow0)); + double fSlow10 = (fConst6 / fSlow0); + double fSlow11 = (1 - fSlow5); + double fSlow12 = (fSlow11 + fSlow6); + double fSlow13 = (1.0 / (fSlow2 + 1)); + double fSlow14 = (fConst7 / fSlow0); + double fSlow15 = (1.0 / (((fConst8 / fSlow0) + (3 * fSlow3)) + 1)); + double fSlow16 = (12 * fSlow3); + double fSlow17 = (fSlow16 + (fConst9 / fSlow0)); + double fSlow18 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1478,567 +1425,561 @@ class mydsp : public dsp { FAUSTFLOAT* output48 = output[48]; FAUSTFLOAT* output49 = output[49]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -2392,7 +2333,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -2452,19 +2393,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -2475,10 +2417,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev504.cpp b/source/HOAUGens/HOADecLebedev504.cpp index 94f48ef485..33f7886392 100644 --- a/source/HOAUGens/HOADecLebedev504.cpp +++ b/source/HOAUGens/HOADecLebedev504.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -647,113 +594,113 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph0; double fConst2; double fConst3; - double fConst4; double fRec6[2]; - double fRec7[2]; - double fConst5; - double fConst6; - double fRec9[2]; - double fRec10[2]; - double fRec8[2]; double fRec5[2]; double fRec4[2]; FAUSTFLOAT fbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fbargraph2; + double fConst4; double fRec13[2]; - double fRec14[2]; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; double fRec12[2]; + double fConst5; double fRec11[2]; - FAUSTFLOAT fbargraph2; - double fRec20[2]; + double fRec10[2]; + FAUSTFLOAT fbargraph3; + double fRec17[2]; + double fRec16[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fbargraph4; double fRec21[2]; - double fRec23[2]; - double fRec24[2]; - double fRec22[2]; + double fRec20[2]; double fRec19[2]; double fRec18[2]; - FAUSTFLOAT fbargraph3; + FAUSTFLOAT fbargraph5; + double fConst6; + double fConst7; + double fRec26[2]; + double fRec25[2]; + double fConst8; + double fRec24[2]; + double fConst9; double fRec27[2]; - double fRec28[2]; - double fRec30[2]; + double fRec23[2]; + double fRec22[2]; + FAUSTFLOAT fbargraph6; + double fRec32[2]; double fRec31[2]; + double fRec30[2]; + double fRec33[2]; double fRec29[2]; - double fRec26[2]; - double fRec25[2]; - FAUSTFLOAT fbargraph4; - double fRec35[2]; + double fRec28[2]; + FAUSTFLOAT fbargraph7; + double fRec38[2]; + double fRec37[2]; double fRec36[2]; + double fRec39[2]; + double fRec35[2]; double fRec34[2]; - double fRec37[2]; - double fRec38[2]; - double fRec33[2]; - double fRec32[2]; - FAUSTFLOAT fbargraph5; - double fConst7; - double fConst8; - double fConst9; - double fRec42[2]; + FAUSTFLOAT fbargraph8; + double fRec44[2]; double fRec43[2]; + double fRec42[2]; + double fRec45[2]; double fRec41[2]; - double fConst10; - double fRec44[2]; double fRec40[2]; - double fRec39[2]; - FAUSTFLOAT fbargraph6; - double fRec48[2]; + FAUSTFLOAT fbargraph9; + double fConst10; + double fConst11; + double fRec50[2]; double fRec49[2]; + double fConst12; + double fRec48[2]; + double fRec52[2]; + double fRec51[2]; + double fConst13; double fRec47[2]; - double fRec50[2]; double fRec46[2]; - double fRec45[2]; - FAUSTFLOAT fbargraph7; - double fRec54[2]; - double fRec55[2]; - double fRec53[2]; + FAUSTFLOAT fbargraph10; + double fRec57[2]; double fRec56[2]; - double fRec52[2]; - double fRec51[2]; - FAUSTFLOAT fbargraph8; - double fRec60[2]; - double fRec61[2]; + double fRec55[2]; double fRec59[2]; - double fRec62[2]; double fRec58[2]; - double fRec57[2]; - FAUSTFLOAT fbargraph9; - double fConst11; - double fConst12; - double fRec65[2]; - double fRec66[2]; + double fRec54[2]; + double fRec53[2]; + FAUSTFLOAT fbargraph11; double fRec64[2]; double fRec63[2]; - FAUSTFLOAT fbargraph10; - double fRec69[2]; + double fRec62[2]; + double fRec66[2]; + double fRec65[2]; + double fRec61[2]; + double fRec60[2]; + FAUSTFLOAT fbargraph12; + double fRec71[2]; double fRec70[2]; - double fRec68[2]; - double fRec67[2]; - FAUSTFLOAT fbargraph11; + double fRec69[2]; double fRec73[2]; - double fRec74[2]; double fRec72[2]; - double fRec71[2]; - FAUSTFLOAT fbargraph12; - double fConst13; + double fRec68[2]; + double fRec67[2]; + FAUSTFLOAT fbargraph13; + double fRec78[2]; double fRec77[2]; double fRec76[2]; - double fRec75[2]; - FAUSTFLOAT fbargraph13; double fRec80[2]; double fRec79[2]; - double fRec78[2]; + double fRec75[2]; + double fRec74[2]; FAUSTFLOAT fbargraph14; double fRec0[2]; FAUSTFLOAT fbargraph15; double fRec81[2]; FAUSTFLOAT fbargraph16; - double fRec85[2]; double fRec86[2]; + double fRec85[2]; double fRec84[2]; double fRec83[2]; FAUSTFLOAT fbargraph17; @@ -761,33 +708,33 @@ class mydsp : public dsp { double fRec88[2]; double fRec87[2]; FAUSTFLOAT fbargraph18; - double fRec92[2]; + double fRec94[2]; double fRec93[2]; - double fRec95[2]; + double fRec92[2]; double fRec96[2]; - double fRec94[2]; + double fRec95[2]; double fRec91[2]; double fRec90[2]; FAUSTFLOAT fbargraph19; - double fRec100[2]; double fRec101[2]; + double fRec100[2]; double fRec99[2]; double fRec102[2]; double fRec98[2]; double fRec97[2]; FAUSTFLOAT fbargraph20; - double fRec106[2]; double fRec107[2]; + double fRec106[2]; double fRec105[2]; double fRec108[2]; double fRec104[2]; double fRec103[2]; FAUSTFLOAT fbargraph21; - double fRec111[2]; + double fRec113[2]; double fRec112[2]; - double fRec114[2]; + double fRec111[2]; double fRec115[2]; - double fRec113[2]; + double fRec114[2]; double fRec110[2]; double fRec109[2]; FAUSTFLOAT fbargraph22; @@ -801,31 +748,31 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph26; double fRec119[2]; FAUSTFLOAT fbargraph27; - double fRec123[2]; double fRec124[2]; + double fRec123[2]; double fRec122[2]; double fRec121[2]; FAUSTFLOAT fbargraph28; - double fRec128[2]; double fRec129[2]; + double fRec128[2]; double fRec127[2]; double fRec130[2]; double fRec126[2]; double fRec125[2]; FAUSTFLOAT fbargraph29; - double fRec133[2]; + double fRec135[2]; double fRec134[2]; - double fRec136[2]; + double fRec133[2]; double fRec137[2]; - double fRec135[2]; + double fRec136[2]; double fRec132[2]; double fRec131[2]; FAUSTFLOAT fbargraph30; - double fRec140[2]; + double fRec142[2]; double fRec141[2]; - double fRec143[2]; + double fRec140[2]; double fRec144[2]; - double fRec142[2]; + double fRec143[2]; double fRec139[2]; double fRec138[2]; FAUSTFLOAT fbargraph31; @@ -944,15 +891,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 25; } @@ -961,20 +908,20 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); - fConst2 = (984.7116049589241 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (1969.4232099178482 / fConst0); - fConst5 = (715.2883950410759 / fConst0); - fConst6 = (1430.5767900821518 / fConst0); - fConst7 = (394.7715102864353 / fConst0); - fConst8 = (625.2284897135664 / fConst0); - fConst9 = (1250.4569794271329 / fConst0); - fConst10 = (789.5430205728705 / fConst0); - fConst11 = (5.1e+02 / fConst0); - fConst12 = (1.02e+03 / fConst0); - fConst13 = (3.4e+02 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (3.4e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + fConst6 = (394.7715102864353 / fConst0); + fConst7 = (625.2284897135664 / fConst0); + fConst8 = (1250.4569794271329 / fConst0); + fConst9 = (789.5430205728705 / fConst0); + fConst10 = (984.7116049589241 / fConst0); + fConst11 = (715.2883950410759 / fConst0); + fConst12 = (1430.5767900821518 / fConst0); + fConst13 = (1969.4232099178482 / fConst0); } virtual void instanceResetUserInterface() { fslider0 = 0.0; @@ -987,115 +934,115 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec3[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; for (int i=0; i<2; i++) fRec19[i] = 0; for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; for (int i=0; i<2; i++) fRec64[i] = 0; for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec69[i] = 0; for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec68[i] = 0; + for (int i=0; i<2; i++) fRec67[i] = 0; + for (int i=0; i<2; i++) fRec78[i] = 0; for (int i=0; i<2; i++) fRec77[i] = 0; for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; for (int i=0; i<2; i++) fRec80[i] = 0; for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; + for (int i=0; i<2; i++) fRec74[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; for (int i=0; i<2; i++) fRec84[i] = 0; for (int i=0; i<2; i++) fRec83[i] = 0; for (int i=0; i<2; i++) fRec89[i] = 0; for (int i=0; i<2; i++) fRec88[i] = 0; for (int i=0; i<2; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec94[i] = 0; for (int i=0; i<2; i++) fRec93[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<2; i++) fRec94[i] = 0; + for (int i=0; i<2; i++) fRec95[i] = 0; for (int i=0; i<2; i++) fRec91[i] = 0; for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; for (int i=0; i<2; i++) fRec101[i] = 0; + for (int i=0; i<2; i++) fRec100[i] = 0; for (int i=0; i<2; i++) fRec99[i] = 0; for (int i=0; i<2; i++) fRec102[i] = 0; for (int i=0; i<2; i++) fRec98[i] = 0; for (int i=0; i<2; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec106[i] = 0; for (int i=0; i<2; i++) fRec107[i] = 0; + for (int i=0; i<2; i++) fRec106[i] = 0; for (int i=0; i<2; i++) fRec105[i] = 0; for (int i=0; i<2; i++) fRec108[i] = 0; for (int i=0; i<2; i++) fRec104[i] = 0; for (int i=0; i<2; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; + for (int i=0; i<2; i++) fRec113[i] = 0; for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; + for (int i=0; i<2; i++) fRec111[i] = 0; for (int i=0; i<2; i++) fRec115[i] = 0; - for (int i=0; i<2; i++) fRec113[i] = 0; + for (int i=0; i<2; i++) fRec114[i] = 0; for (int i=0; i<2; i++) fRec110[i] = 0; for (int i=0; i<2; i++) fRec109[i] = 0; for (int i=0; i<2; i++) fRec82[i] = 0; @@ -1103,28 +1050,28 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec117[i] = 0; for (int i=0; i<2; i++) fRec118[i] = 0; for (int i=0; i<2; i++) fRec119[i] = 0; - for (int i=0; i<2; i++) fRec123[i] = 0; for (int i=0; i<2; i++) fRec124[i] = 0; + for (int i=0; i<2; i++) fRec123[i] = 0; for (int i=0; i<2; i++) fRec122[i] = 0; for (int i=0; i<2; i++) fRec121[i] = 0; - for (int i=0; i<2; i++) fRec128[i] = 0; for (int i=0; i<2; i++) fRec129[i] = 0; + for (int i=0; i<2; i++) fRec128[i] = 0; for (int i=0; i<2; i++) fRec127[i] = 0; for (int i=0; i<2; i++) fRec130[i] = 0; for (int i=0; i<2; i++) fRec126[i] = 0; for (int i=0; i<2; i++) fRec125[i] = 0; - for (int i=0; i<2; i++) fRec133[i] = 0; + for (int i=0; i<2; i++) fRec135[i] = 0; for (int i=0; i<2; i++) fRec134[i] = 0; - for (int i=0; i<2; i++) fRec136[i] = 0; + for (int i=0; i<2; i++) fRec133[i] = 0; for (int i=0; i<2; i++) fRec137[i] = 0; - for (int i=0; i<2; i++) fRec135[i] = 0; + for (int i=0; i<2; i++) fRec136[i] = 0; for (int i=0; i<2; i++) fRec132[i] = 0; for (int i=0; i<2; i++) fRec131[i] = 0; - for (int i=0; i<2; i++) fRec140[i] = 0; + for (int i=0; i<2; i++) fRec142[i] = 0; for (int i=0; i<2; i++) fRec141[i] = 0; - for (int i=0; i<2; i++) fRec143[i] = 0; + for (int i=0; i<2; i++) fRec140[i] = 0; for (int i=0; i<2; i++) fRec144[i] = 0; - for (int i=0; i<2; i++) fRec142[i] = 0; + for (int i=0; i<2; i++) fRec143[i] = 0; for (int i=0; i<2; i++) fRec139[i] = 0; for (int i=0; i<2; i++) fRec138[i] = 0; for (int i=0; i<2; i++) fRec120[i] = 0; @@ -1187,117 +1134,117 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev504"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc403b0", &fbargraph0, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75ce9b50", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc80ea0", &fbargraph18, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7588ed40", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc73cd0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75ceccf0", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc76590", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75cef5a0", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc7e2d0", &fbargraph17, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7588c650", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bca4160", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7488de20", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc70fc0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75cf34f0", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc6e130", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75cf6540", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc6b130", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75cf9600", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc89740", &fbargraph20, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75896d10", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bca7f70", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe74891900", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc8d4b0", &fbargraph21, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7589a760", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc674a0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75d027e0", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc63ac0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75d06370", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc5ffa0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75d09fd0", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc5c420", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75d0dcf0", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc85a00", &fbargraph19, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe758932a0", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcb1980", &fbargraph31, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7489bd40", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc91a90", &fbargraph22, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7487d100", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcac4d0", &fbargraph30, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe74895e00", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc57320", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75d13c60", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc532a0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75d17ec0", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc4eff0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75d1c270", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc4ad70", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe75d20680", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc46a40", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffe74876e50", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1320,254 +1267,254 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph15, "osc", "/output1"); ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc78ac0", &fbargraph15, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe74878d40", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph16, "osc", "/output2"); ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc7b2f0", &fbargraph16, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75889700", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph23, "osc", "/output3"); ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc93280", &fbargraph23, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7487ec20", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph24, "osc", "/output4"); ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc95ed0", &fbargraph24, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe74881a10", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph25, "osc", "/output5"); ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc993e0", &fbargraph25, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe74884a50", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph26, "osc", "/output6"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc9b7c0", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe74886d20", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph27, "osc", "/output7"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bc9f5c0", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7488ad20", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph32, "osc", "/output8"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcb3040", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe7489de80", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph33, "osc", "/output9"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcb7140", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe748a1fc0", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph34, "osc", "/output10"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcbb5b0", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe748a6120", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph35, "osc", "/output11"); ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcbef40", &fbargraph35, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe748a9ae0", &fbargraph35, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph36, "osc", "/output12"); ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcc1e60", &fbargraph36, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe748acf40", &fbargraph36, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph37, "osc", "/output13"); ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcc5330", &fbargraph37, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75ad4680", &fbargraph37, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph38, "osc", "/output14"); ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcc8910", &fbargraph38, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75ad75d0", &fbargraph38, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph39, "osc", "/output15"); ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bccb020", &fbargraph39, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75ad9b60", &fbargraph39, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph40, "osc", "/output16"); ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcce350", &fbargraph40, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75adce20", &fbargraph40, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph41, "osc", "/output17"); ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcd1670", &fbargraph41, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75ae00d0", &fbargraph41, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph42, "osc", "/output18"); ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcd4d80", &fbargraph42, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75ae32f0", &fbargraph42, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph43, "osc", "/output19"); ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcdaf00", &fbargraph43, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75ae9420", &fbargraph43, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fbargraph44, "osc", "/output20"); ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcdf960", &fbargraph44, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75aedd70", &fbargraph44, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fbargraph45, "osc", "/output21"); ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bce43b0", &fbargraph45, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75af2080", &fbargraph45, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fbargraph46, "osc", "/output22"); ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bce8500", &fbargraph46, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75af6d00", &fbargraph46, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fbargraph47, "osc", "/output23"); ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcebdf0", &fbargraph47, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75afa360", &fbargraph47, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph48, "osc", "/output24"); ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcef420", &fbargraph48, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e018a0", &fbargraph48, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fbargraph49, "osc", "/output25"); ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcf32d0", &fbargraph49, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e051c0", &fbargraph49, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); ui_interface->declare(&fbargraph50, "osc", "/output26"); ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bcf6b60", &fbargraph50, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e08db0", &fbargraph50, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fbargraph51, "osc", "/output27"); ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd00420", &fbargraph51, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e0e400", &fbargraph51, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fbargraph52, "osc", "/output28"); ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd03f70", &fbargraph52, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e12630", &fbargraph52, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fbargraph53, "osc", "/output29"); ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd08790", &fbargraph53, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e16ed0", &fbargraph53, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fbargraph54, "osc", "/output30"); ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd0d060", &fbargraph54, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e1b280", &fbargraph54, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fbargraph55, "osc", "/output31"); ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd12f10", &fbargraph55, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e20cc0", &fbargraph55, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fbargraph56, "osc", "/output32"); ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd18560", &fbargraph56, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e262a0", &fbargraph56, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fbargraph57, "osc", "/output33"); ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd1d590", &fbargraph57, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e2b220", &fbargraph57, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fbargraph58, "osc", "/output34"); ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd21950", &fbargraph58, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e2fbe0", &fbargraph58, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fbargraph59, "osc", "/output35"); ui_interface->declare(&fbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd264c0", &fbargraph59, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e34870", &fbargraph59, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); ui_interface->declare(&fbargraph60, "osc", "/output36"); ui_interface->declare(&fbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd2b710", &fbargraph60, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e39420", &fbargraph60, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); ui_interface->declare(&fbargraph61, "osc", "/output37"); ui_interface->declare(&fbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd30c80", &fbargraph61, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e3e040", &fbargraph61, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); ui_interface->declare(&fbargraph62, "osc", "/output38"); ui_interface->declare(&fbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd36120", &fbargraph62, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e43ce0", &fbargraph62, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); ui_interface->declare(&fbargraph63, "osc", "/output39"); ui_interface->declare(&fbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd39590", &fbargraph63, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e46f40", &fbargraph63, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); ui_interface->declare(&fbargraph64, "osc", "/output40"); ui_interface->declare(&fbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd3c560", &fbargraph64, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e4a6f0", &fbargraph64, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); ui_interface->declare(&fbargraph65, "osc", "/output41"); ui_interface->declare(&fbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd3ff70", &fbargraph65, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e4de10", &fbargraph65, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); ui_interface->declare(&fbargraph66, "osc", "/output42"); ui_interface->declare(&fbargraph66, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd43ac0", &fbargraph66, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e515c0", &fbargraph66, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); ui_interface->declare(&fbargraph67, "osc", "/output43"); ui_interface->declare(&fbargraph67, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd470b0", &fbargraph67, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e54b00", &fbargraph67, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); ui_interface->declare(&fbargraph68, "osc", "/output44"); ui_interface->declare(&fbargraph68, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd4a7a0", &fbargraph68, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e58040", &fbargraph68, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); ui_interface->declare(&fbargraph69, "osc", "/output45"); ui_interface->declare(&fbargraph69, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd4df30", &fbargraph69, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e5ba00", &fbargraph69, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); ui_interface->declare(&fbargraph70, "osc", "/output46"); ui_interface->declare(&fbargraph70, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd514a0", &fbargraph70, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e5f2b0", &fbargraph70, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); ui_interface->declare(&fbargraph71, "osc", "/output47"); ui_interface->declare(&fbargraph71, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd54ec0", &fbargraph71, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e62750", &fbargraph71, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); ui_interface->declare(&fbargraph72, "osc", "/output48"); ui_interface->declare(&fbargraph72, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd585d0", &fbargraph72, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e65e60", &fbargraph72, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); ui_interface->declare(&fbargraph73, "osc", "/output49"); ui_interface->declare(&fbargraph73, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd5c0d0", &fbargraph73, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e69880", &fbargraph73, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); ui_interface->declare(&fbargraph74, "osc", "/output50"); ui_interface->declare(&fbargraph74, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe82bd5fb90", &fbargraph74, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7ffe75e6ce70", &fbargraph74, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1575,29 +1522,29 @@ class mydsp : public dsp { virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); double fSlow1 = double(fcheckbox0); - double fSlow2 = double(fentry0); - double fSlow3 = (1 - (fSlow1 * (1 - fSlow2))); - double fSlow4 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow5 = (fConst3 / fSlow2); - double fSlow6 = faustpower<2>(fSlow5); - double fSlow7 = (1.0 / (((fConst2 / fSlow2) + (9.1401308902779 * fSlow6)) + 1)); - double fSlow8 = (36.5605235611116 * fSlow6); - double fSlow9 = (fSlow8 + (fConst4 / fSlow2)); - double fSlow10 = (1.0 / (((fConst5 / fSlow2) + (11.4878004768713 * fSlow6)) + 1)); - double fSlow11 = (45.9512019074852 * fSlow6); - double fSlow12 = (fSlow11 + (fConst6 / fSlow2)); - double fSlow13 = (fSlow1 * fSlow2); - double fSlow14 = (1 - fSlow1); - double fSlow15 = (1.0 / ((fConst7 / fSlow2) + 1)); - double fSlow16 = (1.0 / (((fConst8 / fSlow2) + (6.45943269348338 * fSlow6)) + 1)); - double fSlow17 = (25.83773077393352 * fSlow6); - double fSlow18 = (fSlow17 + (fConst9 / fSlow2)); - double fSlow19 = (fConst10 / fSlow2); - double fSlow20 = (1.0 / (((3 * fSlow6) + (fConst11 / fSlow2)) + 1)); - double fSlow21 = (12 * fSlow6); - double fSlow22 = (fSlow21 + (fConst12 / fSlow2)); - double fSlow23 = (1.0 / (fSlow5 + 1)); - double fSlow24 = (fConst13 / fSlow2); + double fSlow2 = (1 - fSlow1); + double fSlow3 = double(fentry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (fSlow2 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = (fConst2 / fSlow3); + double fSlow8 = (1.0 / (fSlow7 + 1)); + double fSlow9 = (fConst3 / fSlow3); + double fSlow10 = faustpower<2>(fSlow7); + double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); + double fSlow12 = (12 * fSlow10); + double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); + double fSlow14 = (1.0 / ((fConst6 / fSlow3) + 1)); + double fSlow15 = (1.0 / (((fConst7 / fSlow3) + (6.45943269348338 * fSlow10)) + 1)); + double fSlow16 = (25.83773077393352 * fSlow10); + double fSlow17 = (fSlow16 + (fConst8 / fSlow3)); + double fSlow18 = (fConst9 / fSlow3); + double fSlow19 = (1.0 / (((fConst10 / fSlow3) + (9.1401308902779 * fSlow10)) + 1)); + double fSlow20 = (1.0 / (((fConst11 / fSlow3) + (11.4878004768713 * fSlow10)) + 1)); + double fSlow21 = (45.9512019074852 * fSlow10); + double fSlow22 = (fSlow21 + (fConst12 / fSlow3)); + double fSlow23 = (36.5605235611116 * fSlow10); + double fSlow24 = (fSlow23 + (fConst13 / fSlow3)); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1675,795 +1622,800 @@ class mydsp : public dsp { FAUSTFLOAT* output49 = output[49]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -2880,7 +2832,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -2940,19 +2892,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -2963,10 +2916,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOADecLebedev505.cpp b/source/HOAUGens/HOADecLebedev505.cpp index a8f028a9f2..6574f4bb4c 100644 --- a/source/HOAUGens/HOADecLebedev505.cpp +++ b/source/HOAUGens/HOADecLebedev505.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -53,46 +53,27 @@ template <> inline double faustpower<2>(double x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -132,9 +113,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -142,13 +123,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -176,19 +157,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -221,6 +202,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -244,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -277,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -316,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -390,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -465,9 +406,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -637,253 +584,253 @@ class mydsp : public dsp { private: double fConst0; double fConst1; + FAUSTFLOAT fslider0; + double fRec1[2]; FAUSTFLOAT fcheckbox0; FAUSTFLOAT fentry0; - FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + double fRec3[2]; double fRec2[2]; - double fRec1[2]; FAUSTFLOAT fbargraph0; double fConst2; double fConst3; - double fConst4; - double fRec5[2]; double fRec6[2]; - double fConst5; - double fConst6; - double fRec8[2]; - double fRec9[2]; - double fRec7[2]; + double fRec5[2]; double fRec4[2]; - double fRec3[2]; FAUSTFLOAT fbargraph1; - double fRec12[2]; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fbargraph2; + double fConst4; double fRec13[2]; - double fRec15[2]; - double fRec16[2]; - double fRec14[2]; + double fRec12[2]; + double fConst5; double fRec11[2]; double fRec10[2]; - FAUSTFLOAT fbargraph2; - double fRec19[2]; - double fRec20[2]; - double fRec22[2]; - double fRec23[2]; + FAUSTFLOAT fbargraph3; + double fRec17[2]; + double fRec16[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fbargraph4; double fRec21[2]; + double fRec20[2]; + double fRec19[2]; double fRec18[2]; - double fRec17[2]; - FAUSTFLOAT fbargraph3; - double fRec27[2]; - double fRec28[2]; + FAUSTFLOAT fbargraph5; + double fConst6; + double fConst7; double fRec26[2]; - double fRec29[2]; - double fRec30[2]; double fRec25[2]; - double fRec24[2]; - FAUSTFLOAT fbargraph4; - double fConst7; double fConst8; + double fRec24[2]; double fConst9; - double fRec34[2]; - double fRec35[2]; - double fRec33[2]; - double fConst10; - double fRec36[2]; + double fRec27[2]; + double fRec23[2]; + double fRec22[2]; + FAUSTFLOAT fbargraph6; double fRec32[2]; double fRec31[2]; - FAUSTFLOAT fbargraph5; - double fRec40[2]; - double fRec41[2]; - double fRec39[2]; - double fRec42[2]; + double fRec30[2]; + double fRec33[2]; + double fRec29[2]; + double fRec28[2]; + FAUSTFLOAT fbargraph7; double fRec38[2]; double fRec37[2]; - FAUSTFLOAT fbargraph6; - double fRec46[2]; - double fRec47[2]; - double fRec45[2]; - double fRec48[2]; + double fRec36[2]; + double fRec39[2]; + double fRec35[2]; + double fRec34[2]; + FAUSTFLOAT fbargraph8; double fRec44[2]; double fRec43[2]; - FAUSTFLOAT fbargraph7; - double fRec52[2]; - double fRec53[2]; - double fRec51[2]; - double fRec54[2]; + double fRec42[2]; + double fRec45[2]; + double fRec41[2]; + double fRec40[2]; + FAUSTFLOAT fbargraph9; + double fConst10; + double fConst11; double fRec50[2]; double fRec49[2]; - FAUSTFLOAT fbargraph8; - double fConst11; double fConst12; + double fRec48[2]; + double fRec52[2]; + double fRec51[2]; + double fConst13; + double fRec47[2]; + double fRec46[2]; + FAUSTFLOAT fbargraph10; double fRec57[2]; - double fRec58[2]; double fRec56[2]; double fRec55[2]; - FAUSTFLOAT fbargraph9; - double fRec61[2]; - double fRec62[2]; - double fRec60[2]; double fRec59[2]; - FAUSTFLOAT fbargraph10; - double fRec65[2]; - double fRec66[2]; + double fRec58[2]; + double fRec54[2]; + double fRec53[2]; + FAUSTFLOAT fbargraph11; double fRec64[2]; double fRec63[2]; - FAUSTFLOAT fbargraph11; - double fConst13; - double fRec69[2]; - double fRec68[2]; - double fRec67[2]; + double fRec62[2]; + double fRec66[2]; + double fRec65[2]; + double fRec61[2]; + double fRec60[2]; FAUSTFLOAT fbargraph12; - double fRec72[2]; double fRec71[2]; double fRec70[2]; + double fRec69[2]; + double fRec73[2]; + double fRec72[2]; + double fRec68[2]; + double fRec67[2]; FAUSTFLOAT fbargraph13; - double fRec75[2]; - double fRec76[2]; double fRec78[2]; - double fRec79[2]; double fRec77[2]; + double fRec76[2]; + double fRec80[2]; + double fRec79[2]; + double fRec75[2]; double fRec74[2]; - double fRec73[2]; FAUSTFLOAT fbargraph14; double fConst14; double fConst15; double fConst16; + double fRec86[2]; + double fRec85[2]; double fConst17; double fRec84[2]; - double fRec85[2]; - double fRec83[2]; - double fConst18; - double fRec86[2]; + double fRec88[2]; double fRec87[2]; - double fRec82[2]; + double fConst18; + double fRec83[2]; double fConst19; - double fRec88[2]; + double fRec89[2]; + double fRec82[2]; double fRec81[2]; - double fRec80[2]; FAUSTFLOAT fbargraph15; - double fRec92[2]; - double fRec93[2]; double fRec95[2]; - double fRec96[2]; double fRec94[2]; - double fRec91[2]; + double fRec93[2]; double fRec97[2]; + double fRec96[2]; + double fRec92[2]; + double fRec98[2]; + double fRec91[2]; double fRec90[2]; - double fRec89[2]; FAUSTFLOAT fbargraph16; - double fRec101[2]; - double fRec102[2]; double fRec104[2]; - double fRec105[2]; double fRec103[2]; - double fRec100[2]; + double fRec102[2]; double fRec106[2]; + double fRec105[2]; + double fRec101[2]; + double fRec107[2]; + double fRec100[2]; double fRec99[2]; - double fRec98[2]; FAUSTFLOAT fbargraph17; - double fRec110[2]; - double fRec111[2]; double fRec113[2]; - double fRec114[2]; double fRec112[2]; - double fRec109[2]; + double fRec111[2]; double fRec115[2]; + double fRec114[2]; + double fRec110[2]; + double fRec116[2]; + double fRec109[2]; double fRec108[2]; - double fRec107[2]; FAUSTFLOAT fbargraph18; - double fRec119[2]; - double fRec120[2]; double fRec122[2]; - double fRec123[2]; double fRec121[2]; - double fRec118[2]; + double fRec120[2]; double fRec124[2]; + double fRec123[2]; + double fRec119[2]; + double fRec125[2]; + double fRec118[2]; double fRec117[2]; - double fRec116[2]; FAUSTFLOAT fbargraph19; - double fRec128[2]; - double fRec129[2]; double fRec131[2]; - double fRec132[2]; double fRec130[2]; - double fRec127[2]; + double fRec129[2]; double fRec133[2]; + double fRec132[2]; + double fRec128[2]; + double fRec134[2]; + double fRec127[2]; double fRec126[2]; - double fRec125[2]; FAUSTFLOAT fbargraph20; - FAUSTFLOAT fslider1; - double fRec134[2]; double fRec0[2]; FAUSTFLOAT fbargraph21; double fRec135[2]; FAUSTFLOAT fbargraph22; - double fRec140[2]; + double fRec142[2]; double fRec141[2]; - double fRec143[2]; + double fRec140[2]; double fRec144[2]; - double fRec142[2]; + double fRec143[2]; double fRec139[2]; double fRec145[2]; double fRec138[2]; double fRec137[2]; FAUSTFLOAT fbargraph23; + double fRec151[2]; + double fRec150[2]; + double fRec149[2]; + double fRec153[2]; + double fRec152[2]; double fRec148[2]; + double fRec154[2]; double fRec147[2]; double fRec146[2]; FAUSTFLOAT fbargraph24; - double fRec151[2]; - double fRec152[2]; - double fRec150[2]; - double fRec149[2]; - FAUSTFLOAT fbargraph25; - double fRec156[2]; - double fRec157[2]; - double fRec159[2]; - double fRec160[2]; double fRec158[2]; + double fRec157[2]; + double fRec156[2]; double fRec155[2]; + FAUSTFLOAT fbargraph25; double fRec161[2]; - double fRec154[2]; - double fRec153[2]; + double fRec160[2]; + double fRec159[2]; FAUSTFLOAT fbargraph26; - double fRec165[2]; + double fRec167[2]; double fRec166[2]; - double fRec168[2]; + double fRec165[2]; double fRec169[2]; - double fRec167[2]; + double fRec168[2]; double fRec164[2]; double fRec170[2]; double fRec163[2]; double fRec162[2]; FAUSTFLOAT fbargraph27; - double fRec173[2]; + double fRec175[2]; double fRec174[2]; - double fRec176[2]; + double fRec173[2]; double fRec177[2]; - double fRec175[2]; + double fRec176[2]; double fRec172[2]; double fRec171[2]; FAUSTFLOAT fbargraph28; - double fRec181[2]; double fRec182[2]; + double fRec181[2]; double fRec180[2]; double fRec183[2]; double fRec179[2]; double fRec178[2]; FAUSTFLOAT fbargraph29; - double fRec187[2]; double fRec188[2]; + double fRec187[2]; double fRec186[2]; double fRec189[2]; double fRec185[2]; double fRec184[2]; FAUSTFLOAT fbargraph30; - double fRec192[2]; + double fRec194[2]; double fRec193[2]; - double fRec195[2]; + double fRec192[2]; double fRec196[2]; - double fRec194[2]; + double fRec195[2]; double fRec191[2]; double fRec190[2]; FAUSTFLOAT fbargraph31; @@ -897,53 +844,53 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph35; double fRec200[2]; FAUSTFLOAT fbargraph36; - double fRec204[2]; double fRec205[2]; - double fRec207[2]; - double fRec208[2]; - double fRec206[2]; + double fRec204[2]; double fRec203[2]; double fRec202[2]; FAUSTFLOAT fbargraph37; - double fRec212[2]; - double fRec213[2]; - double fRec215[2]; - double fRec216[2]; - double fRec214[2]; - double fRec211[2]; - double fRec217[2]; double fRec210[2]; double fRec209[2]; + double fRec208[2]; + double fRec211[2]; + double fRec207[2]; + double fRec206[2]; FAUSTFLOAT fbargraph38; - double fRec221[2]; - double fRec222[2]; - double fRec220[2]; - double fRec223[2]; + double fRec217[2]; + double fRec216[2]; + double fRec215[2]; double fRec219[2]; double fRec218[2]; + double fRec214[2]; + double fRec220[2]; + double fRec213[2]; + double fRec212[2]; FAUSTFLOAT fbargraph39; - double fRec226[2]; - double fRec227[2]; double fRec225[2]; double fRec224[2]; + double fRec223[2]; + double fRec227[2]; + double fRec226[2]; + double fRec222[2]; + double fRec221[2]; FAUSTFLOAT fbargraph40; - double fRec230[2]; - double fRec231[2]; double fRec233[2]; - double fRec234[2]; double fRec232[2]; + double fRec231[2]; + double fRec235[2]; + double fRec234[2]; + double fRec230[2]; + double fRec236[2]; double fRec229[2]; double fRec228[2]; FAUSTFLOAT fbargraph41; - double fRec238[2]; - double fRec239[2]; double fRec241[2]; - double fRec242[2]; double fRec240[2]; - double fRec237[2]; + double fRec239[2]; double fRec243[2]; - double fRec236[2]; - double fRec235[2]; + double fRec242[2]; + double fRec238[2]; + double fRec237[2]; FAUSTFLOAT fbargraph42; double fRec201[2]; FAUSTFLOAT fbargraph43; @@ -1060,15 +1007,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } virtual int getNumInputs() { return 36; } @@ -1077,20 +1024,20 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); fConst1 = (8e+01 / fConst0); - fConst2 = (984.7116049589241 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (1969.4232099178482 / fConst0); - fConst5 = (715.2883950410759 / fConst0); - fConst6 = (1430.5767900821518 / fConst0); - fConst7 = (394.7715102864353 / fConst0); - fConst8 = (625.2284897135664 / fConst0); - fConst9 = (1250.4569794271329 / fConst0); - fConst10 = (789.5430205728705 / fConst0); - fConst11 = (5.1e+02 / fConst0); - fConst12 = (1.02e+03 / fConst0); - fConst13 = (3.4e+02 / fConst0); + fConst2 = (1.7e+02 / fConst0); + fConst3 = (3.4e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + fConst6 = (394.7715102864353 / fConst0); + fConst7 = (625.2284897135664 / fConst0); + fConst8 = (1250.4569794271329 / fConst0); + fConst9 = (789.5430205728705 / fConst0); + fConst10 = (984.7116049589241 / fConst0); + fConst11 = (715.2883950410759 / fConst0); + fConst12 = (1430.5767900821518 / fConst0); + fConst13 = (1969.4232099178482 / fConst0); fConst14 = (619.9455612060303 / fConst0); fConst15 = (1139.6651757122002 / fConst0); fConst16 = (790.3892630817644 / fConst0); @@ -1099,206 +1046,206 @@ class mydsp : public dsp { fConst19 = (1239.8911224120607 / fConst0); } virtual void instanceResetUserInterface() { + fslider0 = 0.0; fcheckbox0 = 0.0; fentry0 = 1.07; - fslider0 = 0.0; fslider1 = 0.0; } virtual void instanceClear() { - for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; for (int i=0; i<2; i++) fRec25[i] = 0; for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec32[i] = 0; for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; for (int i=0; i<2; i++) fRec38[i] = 0; for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; for (int i=0; i<2; i++) fRec44[i] = 0; for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; for (int i=0; i<2; i++) fRec50[i] = 0; for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; for (int i=0; i<2; i++) fRec56[i] = 0; for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; for (int i=0; i<2; i++) fRec64[i] = 0; for (int i=0; i<2; i++) fRec63[i] = 0; + for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec66[i] = 0; + for (int i=0; i<2; i++) fRec65[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fRec60[i] = 0; + for (int i=0; i<2; i++) fRec71[i] = 0; + for (int i=0; i<2; i++) fRec70[i] = 0; for (int i=0; i<2; i++) fRec69[i] = 0; + for (int i=0; i<2; i++) fRec73[i] = 0; + for (int i=0; i<2; i++) fRec72[i] = 0; for (int i=0; i<2; i++) fRec68[i] = 0; for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; for (int i=0; i<2; i++) fRec77[i] = 0; + for (int i=0; i<2; i++) fRec76[i] = 0; + for (int i=0; i<2; i++) fRec80[i] = 0; + for (int i=0; i<2; i++) fRec79[i] = 0; + for (int i=0; i<2; i++) fRec75[i] = 0; for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; for (int i=0; i<2; i++) fRec86[i] = 0; + for (int i=0; i<2; i++) fRec85[i] = 0; + for (int i=0; i<2; i++) fRec84[i] = 0; + for (int i=0; i<2; i++) fRec88[i] = 0; for (int i=0; i<2; i++) fRec87[i] = 0; + for (int i=0; i<2; i++) fRec83[i] = 0; + for (int i=0; i<2; i++) fRec89[i] = 0; for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec88[i] = 0; for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<2; i++) fRec93[i] = 0; for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; for (int i=0; i<2; i++) fRec94[i] = 0; - for (int i=0; i<2; i++) fRec91[i] = 0; + for (int i=0; i<2; i++) fRec93[i] = 0; for (int i=0; i<2; i++) fRec97[i] = 0; + for (int i=0; i<2; i++) fRec96[i] = 0; + for (int i=0; i<2; i++) fRec92[i] = 0; + for (int i=0; i<2; i++) fRec98[i] = 0; + for (int i=0; i<2; i++) fRec91[i] = 0; for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; for (int i=0; i<2; i++) fRec104[i] = 0; - for (int i=0; i<2; i++) fRec105[i] = 0; for (int i=0; i<2; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; + for (int i=0; i<2; i++) fRec102[i] = 0; for (int i=0; i<2; i++) fRec106[i] = 0; + for (int i=0; i<2; i++) fRec105[i] = 0; + for (int i=0; i<2; i++) fRec101[i] = 0; + for (int i=0; i<2; i++) fRec107[i] = 0; + for (int i=0; i<2; i++) fRec100[i] = 0; for (int i=0; i<2; i++) fRec99[i] = 0; - for (int i=0; i<2; i++) fRec98[i] = 0; - for (int i=0; i<2; i++) fRec110[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; for (int i=0; i<2; i++) fRec113[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec109[i] = 0; + for (int i=0; i<2; i++) fRec111[i] = 0; for (int i=0; i<2; i++) fRec115[i] = 0; + for (int i=0; i<2; i++) fRec114[i] = 0; + for (int i=0; i<2; i++) fRec110[i] = 0; + for (int i=0; i<2; i++) fRec116[i] = 0; + for (int i=0; i<2; i++) fRec109[i] = 0; for (int i=0; i<2; i++) fRec108[i] = 0; - for (int i=0; i<2; i++) fRec107[i] = 0; - for (int i=0; i<2; i++) fRec119[i] = 0; - for (int i=0; i<2; i++) fRec120[i] = 0; for (int i=0; i<2; i++) fRec122[i] = 0; - for (int i=0; i<2; i++) fRec123[i] = 0; for (int i=0; i<2; i++) fRec121[i] = 0; - for (int i=0; i<2; i++) fRec118[i] = 0; + for (int i=0; i<2; i++) fRec120[i] = 0; for (int i=0; i<2; i++) fRec124[i] = 0; + for (int i=0; i<2; i++) fRec123[i] = 0; + for (int i=0; i<2; i++) fRec119[i] = 0; + for (int i=0; i<2; i++) fRec125[i] = 0; + for (int i=0; i<2; i++) fRec118[i] = 0; for (int i=0; i<2; i++) fRec117[i] = 0; - for (int i=0; i<2; i++) fRec116[i] = 0; - for (int i=0; i<2; i++) fRec128[i] = 0; - for (int i=0; i<2; i++) fRec129[i] = 0; for (int i=0; i<2; i++) fRec131[i] = 0; - for (int i=0; i<2; i++) fRec132[i] = 0; for (int i=0; i<2; i++) fRec130[i] = 0; - for (int i=0; i<2; i++) fRec127[i] = 0; + for (int i=0; i<2; i++) fRec129[i] = 0; for (int i=0; i<2; i++) fRec133[i] = 0; - for (int i=0; i<2; i++) fRec126[i] = 0; - for (int i=0; i<2; i++) fRec125[i] = 0; + for (int i=0; i<2; i++) fRec132[i] = 0; + for (int i=0; i<2; i++) fRec128[i] = 0; for (int i=0; i<2; i++) fRec134[i] = 0; + for (int i=0; i<2; i++) fRec127[i] = 0; + for (int i=0; i<2; i++) fRec126[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec135[i] = 0; - for (int i=0; i<2; i++) fRec140[i] = 0; + for (int i=0; i<2; i++) fRec142[i] = 0; for (int i=0; i<2; i++) fRec141[i] = 0; - for (int i=0; i<2; i++) fRec143[i] = 0; + for (int i=0; i<2; i++) fRec140[i] = 0; for (int i=0; i<2; i++) fRec144[i] = 0; - for (int i=0; i<2; i++) fRec142[i] = 0; + for (int i=0; i<2; i++) fRec143[i] = 0; for (int i=0; i<2; i++) fRec139[i] = 0; for (int i=0; i<2; i++) fRec145[i] = 0; for (int i=0; i<2; i++) fRec138[i] = 0; for (int i=0; i<2; i++) fRec137[i] = 0; - for (int i=0; i<2; i++) fRec148[i] = 0; - for (int i=0; i<2; i++) fRec147[i] = 0; - for (int i=0; i<2; i++) fRec146[i] = 0; for (int i=0; i<2; i++) fRec151[i] = 0; - for (int i=0; i<2; i++) fRec152[i] = 0; for (int i=0; i<2; i++) fRec150[i] = 0; for (int i=0; i<2; i++) fRec149[i] = 0; - for (int i=0; i<2; i++) fRec156[i] = 0; - for (int i=0; i<2; i++) fRec157[i] = 0; - for (int i=0; i<2; i++) fRec159[i] = 0; - for (int i=0; i<2; i++) fRec160[i] = 0; + for (int i=0; i<2; i++) fRec153[i] = 0; + for (int i=0; i<2; i++) fRec152[i] = 0; + for (int i=0; i<2; i++) fRec148[i] = 0; + for (int i=0; i<2; i++) fRec154[i] = 0; + for (int i=0; i<2; i++) fRec147[i] = 0; + for (int i=0; i<2; i++) fRec146[i] = 0; for (int i=0; i<2; i++) fRec158[i] = 0; + for (int i=0; i<2; i++) fRec157[i] = 0; + for (int i=0; i<2; i++) fRec156[i] = 0; for (int i=0; i<2; i++) fRec155[i] = 0; for (int i=0; i<2; i++) fRec161[i] = 0; - for (int i=0; i<2; i++) fRec154[i] = 0; - for (int i=0; i<2; i++) fRec153[i] = 0; - for (int i=0; i<2; i++) fRec165[i] = 0; + for (int i=0; i<2; i++) fRec160[i] = 0; + for (int i=0; i<2; i++) fRec159[i] = 0; + for (int i=0; i<2; i++) fRec167[i] = 0; for (int i=0; i<2; i++) fRec166[i] = 0; - for (int i=0; i<2; i++) fRec168[i] = 0; + for (int i=0; i<2; i++) fRec165[i] = 0; for (int i=0; i<2; i++) fRec169[i] = 0; - for (int i=0; i<2; i++) fRec167[i] = 0; + for (int i=0; i<2; i++) fRec168[i] = 0; for (int i=0; i<2; i++) fRec164[i] = 0; for (int i=0; i<2; i++) fRec170[i] = 0; for (int i=0; i<2; i++) fRec163[i] = 0; for (int i=0; i<2; i++) fRec162[i] = 0; - for (int i=0; i<2; i++) fRec173[i] = 0; + for (int i=0; i<2; i++) fRec175[i] = 0; for (int i=0; i<2; i++) fRec174[i] = 0; - for (int i=0; i<2; i++) fRec176[i] = 0; + for (int i=0; i<2; i++) fRec173[i] = 0; for (int i=0; i<2; i++) fRec177[i] = 0; - for (int i=0; i<2; i++) fRec175[i] = 0; + for (int i=0; i<2; i++) fRec176[i] = 0; for (int i=0; i<2; i++) fRec172[i] = 0; for (int i=0; i<2; i++) fRec171[i] = 0; - for (int i=0; i<2; i++) fRec181[i] = 0; for (int i=0; i<2; i++) fRec182[i] = 0; + for (int i=0; i<2; i++) fRec181[i] = 0; for (int i=0; i<2; i++) fRec180[i] = 0; for (int i=0; i<2; i++) fRec183[i] = 0; for (int i=0; i<2; i++) fRec179[i] = 0; for (int i=0; i<2; i++) fRec178[i] = 0; - for (int i=0; i<2; i++) fRec187[i] = 0; for (int i=0; i<2; i++) fRec188[i] = 0; + for (int i=0; i<2; i++) fRec187[i] = 0; for (int i=0; i<2; i++) fRec186[i] = 0; for (int i=0; i<2; i++) fRec189[i] = 0; for (int i=0; i<2; i++) fRec185[i] = 0; for (int i=0; i<2; i++) fRec184[i] = 0; - for (int i=0; i<2; i++) fRec192[i] = 0; + for (int i=0; i<2; i++) fRec194[i] = 0; for (int i=0; i<2; i++) fRec193[i] = 0; - for (int i=0; i<2; i++) fRec195[i] = 0; + for (int i=0; i<2; i++) fRec192[i] = 0; for (int i=0; i<2; i++) fRec196[i] = 0; - for (int i=0; i<2; i++) fRec194[i] = 0; + for (int i=0; i<2; i++) fRec195[i] = 0; for (int i=0; i<2; i++) fRec191[i] = 0; for (int i=0; i<2; i++) fRec190[i] = 0; for (int i=0; i<2; i++) fRec136[i] = 0; @@ -1306,48 +1253,48 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec198[i] = 0; for (int i=0; i<2; i++) fRec199[i] = 0; for (int i=0; i<2; i++) fRec200[i] = 0; - for (int i=0; i<2; i++) fRec204[i] = 0; for (int i=0; i<2; i++) fRec205[i] = 0; - for (int i=0; i<2; i++) fRec207[i] = 0; - for (int i=0; i<2; i++) fRec208[i] = 0; - for (int i=0; i<2; i++) fRec206[i] = 0; + for (int i=0; i<2; i++) fRec204[i] = 0; for (int i=0; i<2; i++) fRec203[i] = 0; for (int i=0; i<2; i++) fRec202[i] = 0; - for (int i=0; i<2; i++) fRec212[i] = 0; - for (int i=0; i<2; i++) fRec213[i] = 0; - for (int i=0; i<2; i++) fRec215[i] = 0; - for (int i=0; i<2; i++) fRec216[i] = 0; - for (int i=0; i<2; i++) fRec214[i] = 0; - for (int i=0; i<2; i++) fRec211[i] = 0; - for (int i=0; i<2; i++) fRec217[i] = 0; for (int i=0; i<2; i++) fRec210[i] = 0; for (int i=0; i<2; i++) fRec209[i] = 0; - for (int i=0; i<2; i++) fRec221[i] = 0; - for (int i=0; i<2; i++) fRec222[i] = 0; - for (int i=0; i<2; i++) fRec220[i] = 0; - for (int i=0; i<2; i++) fRec223[i] = 0; + for (int i=0; i<2; i++) fRec208[i] = 0; + for (int i=0; i<2; i++) fRec211[i] = 0; + for (int i=0; i<2; i++) fRec207[i] = 0; + for (int i=0; i<2; i++) fRec206[i] = 0; + for (int i=0; i<2; i++) fRec217[i] = 0; + for (int i=0; i<2; i++) fRec216[i] = 0; + for (int i=0; i<2; i++) fRec215[i] = 0; for (int i=0; i<2; i++) fRec219[i] = 0; for (int i=0; i<2; i++) fRec218[i] = 0; - for (int i=0; i<2; i++) fRec226[i] = 0; - for (int i=0; i<2; i++) fRec227[i] = 0; + for (int i=0; i<2; i++) fRec214[i] = 0; + for (int i=0; i<2; i++) fRec220[i] = 0; + for (int i=0; i<2; i++) fRec213[i] = 0; + for (int i=0; i<2; i++) fRec212[i] = 0; for (int i=0; i<2; i++) fRec225[i] = 0; for (int i=0; i<2; i++) fRec224[i] = 0; - for (int i=0; i<2; i++) fRec230[i] = 0; - for (int i=0; i<2; i++) fRec231[i] = 0; + for (int i=0; i<2; i++) fRec223[i] = 0; + for (int i=0; i<2; i++) fRec227[i] = 0; + for (int i=0; i<2; i++) fRec226[i] = 0; + for (int i=0; i<2; i++) fRec222[i] = 0; + for (int i=0; i<2; i++) fRec221[i] = 0; for (int i=0; i<2; i++) fRec233[i] = 0; - for (int i=0; i<2; i++) fRec234[i] = 0; for (int i=0; i<2; i++) fRec232[i] = 0; + for (int i=0; i<2; i++) fRec231[i] = 0; + for (int i=0; i<2; i++) fRec235[i] = 0; + for (int i=0; i<2; i++) fRec234[i] = 0; + for (int i=0; i<2; i++) fRec230[i] = 0; + for (int i=0; i<2; i++) fRec236[i] = 0; for (int i=0; i<2; i++) fRec229[i] = 0; for (int i=0; i<2; i++) fRec228[i] = 0; - for (int i=0; i<2; i++) fRec238[i] = 0; - for (int i=0; i<2; i++) fRec239[i] = 0; for (int i=0; i<2; i++) fRec241[i] = 0; - for (int i=0; i<2; i++) fRec242[i] = 0; for (int i=0; i<2; i++) fRec240[i] = 0; - for (int i=0; i<2; i++) fRec237[i] = 0; + for (int i=0; i<2; i++) fRec239[i] = 0; for (int i=0; i<2; i++) fRec243[i] = 0; - for (int i=0; i<2; i++) fRec236[i] = 0; - for (int i=0; i<2; i++) fRec235[i] = 0; + for (int i=0; i<2; i++) fRec242[i] = 0; + for (int i=0; i<2; i++) fRec238[i] = 0; + for (int i=0; i<2; i++) fRec237[i] = 0; for (int i=0; i<2; i++) fRec201[i] = 0; for (int i=0; i<2; i++) fRec244[i] = 0; for (int i=0; i<2; i++) fRec245[i] = 0; @@ -1408,174 +1355,174 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOADecLebedev505"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f02a120", &fbargraph0, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128063a0", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f08f6b0", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12871bc0", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f059600", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12809540", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f05bec0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc1280bdf0", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0925c0", &fbargraph25, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1286f3e0", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0d02d0", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc1289c920", &fbargraph37, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f056900", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc1280fd40", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f053a40", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12812d90", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f050a40", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12815e50", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0a98e0", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc1287fb80", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0cd280", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128a0510", &fbargraph38, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0a5ca0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12883690", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f04cdb0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc1281b0b0", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0493d0", &fbargraph7, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1281ec40", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0458b0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128228a0", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f041d30", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128265c0", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0add30", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc1287c050", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0d6de0", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128b5250", &fbargraph42, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0a20b0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128880e0", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0c4260", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128a9af0", &fbargraph40, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f03cc30", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc1282c530", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f038bd0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12830790", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f034920", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12834b40", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f030640", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12838f50", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f061220", &fbargraph14, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1283d500", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f097590", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc1286c3b0", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0dbf20", &fbargraph42, -7e+01, 6.0); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128b0f90", &fbargraph41, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f08cdf0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc12876810", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0c9460", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128a57b0", &fbargraph39, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f09c5f0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fcc128675a0", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f068610", &fbargraph15, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128448d0", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f06d7a0", &fbargraph16, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12849700", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f072a50", &fbargraph17, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1284e7d0", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f077d80", &fbargraph18, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128538f0", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f07d170", &fbargraph19, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12858a90", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f082540", &fbargraph20, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1285dcc0", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider1, "2", ""); - ui_interface->declare(&fslider1, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); ui_interface->addCheckButton("Yes", &fcheckbox0); @@ -1587,292 +1534,292 @@ class mydsp : public dsp { ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph21, "osc", "/output1"); ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f084c70", &fbargraph21, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1285f6b0", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph22, "osc", "/output2"); ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f087f30", &fbargraph22, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12862820", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph32, "osc", "/output3"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0afe90", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12889c50", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph33, "osc", "/output4"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0b3e00", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1288d9b0", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph34, "osc", "/output5"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0b7ac0", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128919c0", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph35, "osc", "/output6"); ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0ba8d0", &fbargraph35, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128943f0", &fbargraph35, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph36, "osc", "/output7"); ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0bfd70", &fbargraph36, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12899820", &fbargraph36, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph43, "osc", "/output8"); ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0df100", &fbargraph43, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128b8310", &fbargraph43, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph44, "osc", "/output9"); ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0e4ce0", &fbargraph44, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128bdd20", &fbargraph44, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph45, "osc", "/output10"); ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0eacc0", &fbargraph45, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128c3410", &fbargraph45, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph46, "osc", "/output11"); ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0efd40", &fbargraph46, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128c8870", &fbargraph46, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph47, "osc", "/output12"); ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0f4170", &fbargraph47, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128cce50", &fbargraph47, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph48, "osc", "/output13"); ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f0f83d0", &fbargraph48, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128d1040", &fbargraph48, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph49, "osc", "/output14"); ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f100600", &fbargraph49, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128d4f10", &fbargraph49, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph50, "osc", "/output15"); ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1032e0", &fbargraph50, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128d7c90", &fbargraph50, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fbargraph51, "osc", "/output16"); ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f107830", &fbargraph51, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128dc1e0", &fbargraph51, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fbargraph52, "osc", "/output17"); ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f10bcd0", &fbargraph52, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128e07f0", &fbargraph52, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fbargraph53, "osc", "/output18"); ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1102a0", &fbargraph53, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128e4650", &fbargraph53, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fbargraph54, "osc", "/output19"); ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f118b80", &fbargraph54, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128ed2e0", &fbargraph54, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fbargraph55, "osc", "/output20"); ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f11f090", &fbargraph55, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128f3c10", &fbargraph55, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fbargraph56, "osc", "/output21"); ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f125b80", &fbargraph56, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc128fa340", &fbargraph56, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fbargraph57, "osc", "/output22"); ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f12b9c0", &fbargraph57, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc129043e0", &fbargraph57, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fbargraph58, "osc", "/output23"); ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f12ffe0", &fbargraph58, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12908910", &fbargraph58, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fbargraph59, "osc", "/output24"); ui_interface->declare(&fbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1349a0", &fbargraph59, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1290d240", &fbargraph59, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fbargraph60, "osc", "/output25"); ui_interface->declare(&fbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1394a0", &fbargraph60, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12911c60", &fbargraph60, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); ui_interface->declare(&fbargraph61, "osc", "/output26"); ui_interface->declare(&fbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f13dd50", &fbargraph61, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12916310", &fbargraph61, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fbargraph62, "osc", "/output27"); ui_interface->declare(&fbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f145ce0", &fbargraph62, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1291e010", &fbargraph62, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fbargraph63, "osc", "/output28"); ui_interface->declare(&fbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f14ad00", &fbargraph63, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12923460", &fbargraph63, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fbargraph64, "osc", "/output29"); ui_interface->declare(&fbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f151790", &fbargraph64, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12929a30", &fbargraph64, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fbargraph65, "osc", "/output30"); ui_interface->declare(&fbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1576e0", &fbargraph65, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1292fa10", &fbargraph65, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fbargraph66, "osc", "/output31"); ui_interface->declare(&fbargraph66, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f15fc80", &fbargraph66, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12937bc0", &fbargraph66, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fbargraph67, "osc", "/output32"); ui_interface->declare(&fbargraph67, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f167150", &fbargraph67, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1293ea10", &fbargraph67, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fbargraph68, "osc", "/output33"); ui_interface->declare(&fbargraph68, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f16e5f0", &fbargraph68, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12946040", &fbargraph68, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fbargraph69, "osc", "/output34"); ui_interface->declare(&fbargraph69, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f174760", &fbargraph69, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1294c170", &fbargraph69, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fbargraph70, "osc", "/output35"); ui_interface->declare(&fbargraph70, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f17b470", &fbargraph70, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12952b20", &fbargraph70, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); ui_interface->declare(&fbargraph71, "osc", "/output36"); ui_interface->declare(&fbargraph71, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f182160", &fbargraph71, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12959660", &fbargraph71, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); ui_interface->declare(&fbargraph72, "osc", "/output37"); ui_interface->declare(&fbargraph72, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f189420", &fbargraph72, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc129606f0", &fbargraph72, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); ui_interface->declare(&fbargraph73, "osc", "/output38"); ui_interface->declare(&fbargraph73, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f190e70", &fbargraph73, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc129681b0", &fbargraph73, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); ui_interface->declare(&fbargraph74, "osc", "/output39"); ui_interface->declare(&fbargraph74, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1955d0", &fbargraph74, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1296c730", &fbargraph74, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); ui_interface->declare(&fbargraph75, "osc", "/output40"); ui_interface->declare(&fbargraph75, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f199ed0", &fbargraph75, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12970db0", &fbargraph75, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); ui_interface->declare(&fbargraph76, "osc", "/output41"); ui_interface->declare(&fbargraph76, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f19e780", &fbargraph76, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc129759e0", &fbargraph76, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); ui_interface->declare(&fbargraph77, "osc", "/output42"); ui_interface->declare(&fbargraph77, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1a2eb0", &fbargraph77, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1297a170", &fbargraph77, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); ui_interface->declare(&fbargraph78, "osc", "/output43"); ui_interface->declare(&fbargraph78, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1a7500", &fbargraph78, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1297e7d0", &fbargraph78, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); ui_interface->declare(&fbargraph79, "osc", "/output44"); ui_interface->declare(&fbargraph79, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1abf10", &fbargraph79, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12983260", &fbargraph79, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); ui_interface->declare(&fbargraph80, "osc", "/output45"); ui_interface->declare(&fbargraph80, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1b05f0", &fbargraph80, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12987c80", &fbargraph80, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); ui_interface->declare(&fbargraph81, "osc", "/output46"); ui_interface->declare(&fbargraph81, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1b4cb0", &fbargraph81, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1298c380", &fbargraph81, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); ui_interface->declare(&fbargraph82, "osc", "/output47"); ui_interface->declare(&fbargraph82, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1b99e0", &fbargraph82, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12990c40", &fbargraph82, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); ui_interface->declare(&fbargraph83, "osc", "/output48"); ui_interface->declare(&fbargraph83, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1bdf40", &fbargraph83, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12994a90", &fbargraph83, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); ui_interface->declare(&fbargraph84, "osc", "/output49"); ui_interface->declare(&fbargraph84, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1c2800", &fbargraph84, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc12999a50", &fbargraph84, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); ui_interface->declare(&fbargraph85, "osc", "/output50"); ui_interface->declare(&fbargraph85, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb66f1c7970", &fbargraph85, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fcc1299e860", &fbargraph85, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - double fSlow1 = double(fentry0); - double fSlow2 = (1 - (fSlow0 * (1 - fSlow1))); - double fSlow3 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow4 = (fConst3 / fSlow1); - double fSlow5 = faustpower<2>(fSlow4); - double fSlow6 = (1.0 / (((fConst2 / fSlow1) + (9.1401308902779 * fSlow5)) + 1)); - double fSlow7 = (36.5605235611116 * fSlow5); - double fSlow8 = (fSlow7 + (fConst4 / fSlow1)); - double fSlow9 = (1.0 / (((fConst5 / fSlow1) + (11.4878004768713 * fSlow5)) + 1)); - double fSlow10 = (45.9512019074852 * fSlow5); - double fSlow11 = (fSlow10 + (fConst6 / fSlow1)); - double fSlow12 = (fSlow0 * fSlow1); - double fSlow13 = (1 - fSlow0); - double fSlow14 = (1.0 / ((fConst7 / fSlow1) + 1)); - double fSlow15 = (1.0 / (((fConst8 / fSlow1) + (6.45943269348338 * fSlow5)) + 1)); - double fSlow16 = (25.83773077393352 * fSlow5); - double fSlow17 = (fSlow16 + (fConst9 / fSlow1)); - double fSlow18 = (fConst10 / fSlow1); - double fSlow19 = (1.0 / (((3 * fSlow5) + (fConst11 / fSlow1)) + 1)); - double fSlow20 = (12 * fSlow5); - double fSlow21 = (fSlow20 + (fConst12 / fSlow1)); - double fSlow22 = (1.0 / (fSlow4 + 1)); - double fSlow23 = (fConst13 / fSlow1); - double fSlow24 = (1.0 / ((fConst14 / fSlow1) + 1)); - double fSlow25 = (1.0 / (((fConst15 / fSlow1) + (14.2724805132801 * fSlow5)) + 1)); - double fSlow26 = (1.0 / (((fConst16 / fSlow1) + (18.1563153134523 * fSlow5)) + 1)); - double fSlow27 = (72.6252612538092 * fSlow5); - double fSlow28 = (fSlow27 + (fConst17 / fSlow1)); - double fSlow29 = (57.0899220531204 * fSlow5); - double fSlow30 = (fSlow29 + (fConst18 / fSlow1)); - double fSlow31 = (fConst19 / fSlow1); - double fSlow32 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = double(fcheckbox0); + double fSlow2 = (1 - fSlow1); + double fSlow3 = double(fentry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (fSlow2 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = (fConst2 / fSlow3); + double fSlow8 = (1.0 / (fSlow7 + 1)); + double fSlow9 = (fConst3 / fSlow3); + double fSlow10 = faustpower<2>(fSlow7); + double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); + double fSlow12 = (12 * fSlow10); + double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); + double fSlow14 = (1.0 / ((fConst6 / fSlow3) + 1)); + double fSlow15 = (1.0 / (((fConst7 / fSlow3) + (6.45943269348338 * fSlow10)) + 1)); + double fSlow16 = (25.83773077393352 * fSlow10); + double fSlow17 = (fSlow16 + (fConst8 / fSlow3)); + double fSlow18 = (fConst9 / fSlow3); + double fSlow19 = (1.0 / (((fConst10 / fSlow3) + (9.1401308902779 * fSlow10)) + 1)); + double fSlow20 = (1.0 / (((fConst11 / fSlow3) + (11.4878004768713 * fSlow10)) + 1)); + double fSlow21 = (45.9512019074852 * fSlow10); + double fSlow22 = (fSlow21 + (fConst12 / fSlow3)); + double fSlow23 = (36.5605235611116 * fSlow10); + double fSlow24 = (fSlow23 + (fConst13 / fSlow3)); + double fSlow25 = (1.0 / ((fConst14 / fSlow3) + 1)); + double fSlow26 = (1.0 / (((fConst15 / fSlow3) + (14.2724805132801 * fSlow10)) + 1)); + double fSlow27 = (1.0 / (((fConst16 / fSlow3) + (18.1563153134523 * fSlow10)) + 1)); + double fSlow28 = (72.6252612538092 * fSlow10); + double fSlow29 = (fSlow28 + (fConst17 / fSlow3)); + double fSlow30 = (57.0899220531204 * fSlow10); + double fSlow31 = (fSlow30 + (fConst18 / fSlow3)); + double fSlow32 = (fConst19 / fSlow3); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; FAUSTFLOAT* input2 = input[2]; @@ -1960,1111 +1907,1118 @@ class mydsp : public dsp { FAUSTFLOAT* output48 = output[48]; FAUSTFLOAT* output49 = output[49]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -3580,7 +3534,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -3640,19 +3594,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -3663,10 +3618,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAEncEigenMike1.cpp b/source/HOAUGens/HOAEncEigenMike1.cpp new file mode 100644 index 0000000000..0f4f4f789d --- /dev/null +++ b/source/HOAUGens/HOAEncEigenMike1.cpp @@ -0,0 +1,1472 @@ +//---------------------------------------------------------- +// name: "HOAEncEigenMike1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.100 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + double fRec1[2]; + FAUSTFLOAT fbargraph0; + double fRec2[2]; + FAUSTFLOAT fbargraph1; + double fRec3[2]; + FAUSTFLOAT fbargraph2; + double fRec4[2]; + FAUSTFLOAT fbargraph3; + double fRec5[2]; + FAUSTFLOAT fbargraph4; + double fRec6[2]; + FAUSTFLOAT fbargraph5; + double fRec7[2]; + FAUSTFLOAT fbargraph6; + double fRec8[2]; + FAUSTFLOAT fbargraph7; + double fRec9[2]; + FAUSTFLOAT fbargraph8; + double fRec10[2]; + FAUSTFLOAT fbargraph9; + double fRec11[2]; + FAUSTFLOAT fbargraph10; + double fRec12[2]; + FAUSTFLOAT fbargraph11; + double fRec13[2]; + FAUSTFLOAT fbargraph12; + double fRec14[2]; + FAUSTFLOAT fbargraph13; + double fRec15[2]; + FAUSTFLOAT fbargraph14; + double fRec16[2]; + FAUSTFLOAT fbargraph15; + double fRec17[2]; + FAUSTFLOAT fbargraph16; + double fRec18[2]; + FAUSTFLOAT fbargraph17; + double fRec19[2]; + FAUSTFLOAT fbargraph18; + double fRec20[2]; + FAUSTFLOAT fbargraph19; + double fRec21[2]; + FAUSTFLOAT fbargraph20; + double fRec22[2]; + FAUSTFLOAT fbargraph21; + double fRec23[2]; + FAUSTFLOAT fbargraph22; + double fRec24[2]; + FAUSTFLOAT fbargraph23; + double fRec25[2]; + FAUSTFLOAT fbargraph24; + double fRec26[2]; + FAUSTFLOAT fbargraph25; + double fRec27[2]; + FAUSTFLOAT fbargraph26; + double fRec28[2]; + FAUSTFLOAT fbargraph27; + double fRec29[2]; + FAUSTFLOAT fbargraph28; + double fRec30[2]; + FAUSTFLOAT fbargraph29; + double fRec31[2]; + FAUSTFLOAT fbargraph30; + double fRec32[2]; + FAUSTFLOAT fbargraph31; + FAUSTFLOAT fslider0; + double fRec33[2]; + double fRec0[2]; + FAUSTFLOAT fbargraph32; + double fRec34[2]; + FAUSTFLOAT fbargraph33; + double fRec35[2]; + FAUSTFLOAT fbargraph34; + double fRec36[2]; + FAUSTFLOAT fbargraph35; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAEncEigenMike1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("lib/eigenmike32.lib/version", "1.0"); + m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); + m->declare("lib/eigenmike32.lib/license", "GPL"); + m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 32; } + virtual int getNumOutputs() { return 4; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAEncEigenMike1"); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aa8380", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aa96f0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aaab60", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aac0e0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aad710", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aaedc0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ab04f0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ab1c90", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ab34e0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ab4db0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ab6700", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ab80b0", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ab9af0", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5abb5b0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5abd0f0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5abec90", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ac08c0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ac2570", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ac42a0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ac6030", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ac7e50", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ac9cf0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5acbc10", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5acdb90", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5acfba0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ad1c30", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ad3d40", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ad5eb0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ad80b0", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aa7010", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aa5c00", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ada770", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5adda00", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ae2e80", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5ae6590", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fb9f5aebd60", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAPanLebedev261.cpp b/source/HOAUGens/HOAEncEigenMike2.cpp similarity index 53% rename from source/HOAUGens/HOAPanLebedev261.cpp rename to source/HOAUGens/HOAEncEigenMike2.cpp index 28cca45f97..e5d10a0fd4 100644 --- a/source/HOAUGens/HOAPanLebedev261.cpp +++ b/source/HOAUGens/HOAEncEigenMike2.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOAPanLebedev261" +// name: "HOAEncEigenMike2" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" +// copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -624,166 +571,149 @@ class ControlAllocator : public UI class mydsp : public dsp { private: double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; double fRec1[2]; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; double fRec2[2]; - FAUSTFLOAT fcheckbox3; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; + FAUSTFLOAT fbargraph0; double fRec3[2]; - double fRec7[2]; + FAUSTFLOAT fbargraph1; + double fRec4[2]; + FAUSTFLOAT fbargraph2; + double fRec5[2]; + FAUSTFLOAT fbargraph3; double fRec6[2]; - FAUSTFLOAT fslider6; - FAUSTFLOAT fslider7; - double fRec10[2]; - double fRec9[2]; + FAUSTFLOAT fbargraph4; + double fRec7[2]; + FAUSTFLOAT fbargraph5; double fRec8[2]; - double fRec12[2]; + FAUSTFLOAT fbargraph6; + double fRec9[2]; + FAUSTFLOAT fbargraph7; + double fRec10[2]; + FAUSTFLOAT fbargraph8; double fRec11[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; + FAUSTFLOAT fbargraph9; + double fRec12[2]; + FAUSTFLOAT fbargraph10; double fRec13[2]; - FAUSTFLOAT fbargraph1; + FAUSTFLOAT fbargraph11; double fRec14[2]; - FAUSTFLOAT fbargraph2; + FAUSTFLOAT fbargraph12; double fRec15[2]; - FAUSTFLOAT fbargraph3; + FAUSTFLOAT fbargraph13; double fRec16[2]; - FAUSTFLOAT fbargraph4; + FAUSTFLOAT fbargraph14; double fRec17[2]; - FAUSTFLOAT fbargraph5; + FAUSTFLOAT fbargraph15; double fRec18[2]; - FAUSTFLOAT fbargraph6; + FAUSTFLOAT fbargraph16; double fRec19[2]; - FAUSTFLOAT fbargraph7; + FAUSTFLOAT fbargraph17; double fRec20[2]; - FAUSTFLOAT fbargraph8; + FAUSTFLOAT fbargraph18; double fRec21[2]; - FAUSTFLOAT fbargraph9; + FAUSTFLOAT fbargraph19; double fRec22[2]; - FAUSTFLOAT fbargraph10; + FAUSTFLOAT fbargraph20; double fRec23[2]; - FAUSTFLOAT fbargraph11; + FAUSTFLOAT fbargraph21; double fRec24[2]; - FAUSTFLOAT fbargraph12; + FAUSTFLOAT fbargraph22; double fRec25[2]; - FAUSTFLOAT fbargraph13; + FAUSTFLOAT fbargraph23; double fRec26[2]; - FAUSTFLOAT fbargraph14; + FAUSTFLOAT fbargraph24; double fRec27[2]; - FAUSTFLOAT fbargraph15; + FAUSTFLOAT fbargraph25; double fRec28[2]; - FAUSTFLOAT fbargraph16; + FAUSTFLOAT fbargraph26; double fRec29[2]; - FAUSTFLOAT fbargraph17; + FAUSTFLOAT fbargraph27; double fRec30[2]; - FAUSTFLOAT fbargraph18; + FAUSTFLOAT fbargraph28; double fRec31[2]; - FAUSTFLOAT fbargraph19; + FAUSTFLOAT fbargraph29; double fRec32[2]; - FAUSTFLOAT fbargraph20; + FAUSTFLOAT fbargraph30; double fRec33[2]; - FAUSTFLOAT fbargraph21; + FAUSTFLOAT fbargraph31; + double fRec0[2]; + FAUSTFLOAT fbargraph32; double fRec34[2]; - FAUSTFLOAT fbargraph22; + FAUSTFLOAT fbargraph33; double fRec35[2]; - FAUSTFLOAT fbargraph23; + FAUSTFLOAT fbargraph34; double fRec36[2]; - FAUSTFLOAT fbargraph24; + FAUSTFLOAT fbargraph35; double fRec37[2]; - FAUSTFLOAT fbargraph25; + FAUSTFLOAT fbargraph36; + double fRec38[2]; + FAUSTFLOAT fbargraph37; + double fRec39[2]; + FAUSTFLOAT fbargraph38; + double fRec40[2]; + FAUSTFLOAT fbargraph39; + double fRec41[2]; + FAUSTFLOAT fbargraph40; int fSamplingFreq; public: virtual void metadata(Meta* m) { - m->declare("name", "HOAPanLebedev261"); + m->declare("name", "HOAEncEigenMike2"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("lib/eigenmike32.lib/version", "1.0"); + m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); + m->declare("lib/eigenmike32.lib/license", "GPL"); + m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); m->declare("lib/ymn.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); m->declare("lib/gui.lib/name", "GUI Library"); m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 26; } + virtual int getNumInputs() { return 32; } + virtual int getNumOutputs() { return 9; } static void classInit(int samplingFreq) { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); } virtual void instanceResetUserInterface() { - fentry0 = 1.07; - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fslider0 = 2.0; - fslider1 = 0.0; - fcheckbox2 = 0.0; - fslider2 = 2.0; - fslider3 = 0.0; - fcheckbox3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fslider6 = 0.0; - fslider7 = 0.0; + fslider0 = 0.0; } virtual void instanceClear() { for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec15[i] = 0; @@ -805,10 +735,15 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec31[i] = 0; for (int i=0; i<2; i++) fRec32[i] = 0; for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec34[i] = 0; for (int i=0; i<2; i++) fRec35[i] = 0; for (int i=0; i<2; i++) fRec36[i] = 0; for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; } virtual void init(int samplingFreq) { classInit(samplingFreq); @@ -826,297 +761,223 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "0+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "0+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(&fslider3, "1+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "1+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider7, "1+3", ""); - ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider6, "1+4", ""); - ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox0); - ui_interface->addCheckButton("1", &fcheckbox3); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("HOAEncEigenMike2"); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a41c20", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92b4ec0", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a43510", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92b62e0", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a45520", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92b3aa0", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a47580", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92b2680", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a496b0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92b1260", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a4b440", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92afe40", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "osc", "/output7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a4d990", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92aea20", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "osc", "/output8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a4fa30", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92ad600", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "osc", "/output9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20a51b70", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92ac1e0", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "osc", "/output10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe20b2bae0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92aadc0", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "osc", "/output11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d47b160", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92a99a0", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "osc", "/output12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d47d760", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92a8580", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "osc", "/output13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d47fc20", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92a7160", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "osc", "/output14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d482130", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92a5d40", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "osc", "/output15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d484270", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92a4920", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "osc", "/output16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d486420", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92a3500", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "osc", "/output17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d488640", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92a20e0", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "osc", "/output18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d48a8d0", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92a0cc0", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "osc", "/output19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d48d070", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b929f8a0", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "osc", "/output20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d48f940", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b929e480", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "osc", "/output21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d491fc0", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b929d060", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "osc", "/output22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d4946b0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b929bc40", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "osc", "/output23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d496b60", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b929a820", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "osc", "/output24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d499090", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b9299400", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "osc", "/output25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d49b630", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b9298000", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "osc", "/output26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe1d49dc40", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b9296c10", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b9295820", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b9294440", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92930d0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b9291d60", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92909f0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b928f5e0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92ba660", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92bf930", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92c2f30", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92c8940", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92cd2f0", &fbargraph36, -7e+01, 6.0); ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92d0900", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92d4420", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92d7d50", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd2b92dc8b0", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); ui_interface->closeBox(); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fentry0); - double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); - double fSlow2 = double(fcheckbox1); - double fSlow3 = double(fslider0); - double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); - double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow6 = double(fcheckbox2); - double fSlow7 = double(fslider2); - double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); - double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow10 = (3 * (1 - double(fcheckbox3))); - double fSlow11 = double(fslider4); - double fSlow12 = sin(fSlow11); - double fSlow13 = cos(fSlow11); - double fSlow14 = double(fslider5); - double fSlow15 = (fSlow13 * cos(fSlow14)); - double fSlow16 = (6.123233995736766e-17 * fSlow15); - double fSlow17 = (fSlow12 + fSlow16); - double fSlow18 = ((fConst3 / fSlow3) + 1); - double fSlow19 = (fConst2 / (fSlow3 * fSlow18)); - double fSlow20 = (1.0 / ((fConst3 / fSlow0) + 1)); - double fSlow21 = (((fSlow2 * fSlow0) * fSlow18) / fSlow3); - double fSlow22 = (fConst2 / fSlow0); - double fSlow23 = ((1 - fSlow2) * fSlow0); - double fSlow24 = double(fslider6); - double fSlow25 = sin(fSlow24); - double fSlow26 = cos(fSlow24); - double fSlow27 = double(fslider7); - double fSlow28 = (fSlow26 * cos(fSlow27)); - double fSlow29 = (6.123233995736766e-17 * fSlow28); - double fSlow30 = (fSlow25 + fSlow29); - double fSlow31 = ((fConst3 / fSlow7) + 1); - double fSlow32 = (fConst2 / (fSlow7 * fSlow31)); - double fSlow33 = (((fSlow0 * fSlow6) * fSlow31) / fSlow7); - double fSlow34 = (fSlow0 * (1 - fSlow6)); - double fSlow35 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); - double fSlow36 = (fSlow26 * cos((fSlow27 + -1.5707963267948966))); - double fSlow37 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); - double fSlow38 = (fSlow26 * cos((fSlow27 + -3.141592653589793))); - double fSlow39 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); - double fSlow40 = (fSlow26 * cos((fSlow27 + -4.71238898038469))); - double fSlow41 = (fSlow16 - fSlow12); - double fSlow42 = (fSlow29 - fSlow25); - double fSlow43 = (0.7071067811865476 * fSlow15); - double fSlow44 = (0.7071067811865475 * fSlow12); - double fSlow45 = (fSlow43 + fSlow44); - double fSlow46 = (0.7071067811865476 * fSlow28); - double fSlow47 = (0.7071067811865475 * fSlow25); - double fSlow48 = (fSlow46 + fSlow47); - double fSlow49 = (0.7071067811865476 * fSlow35); - double fSlow50 = (fSlow44 + fSlow49); - double fSlow51 = (0.7071067811865476 * fSlow36); - double fSlow52 = (fSlow47 + fSlow51); - double fSlow53 = (0.7071067811865476 * fSlow37); - double fSlow54 = (fSlow44 + fSlow53); - double fSlow55 = (0.7071067811865476 * fSlow38); - double fSlow56 = (fSlow47 + fSlow55); - double fSlow57 = (0.7071067811865476 * fSlow39); - double fSlow58 = (fSlow44 + fSlow57); - double fSlow59 = (0.7071067811865476 * fSlow40); - double fSlow60 = (fSlow47 + fSlow59); - double fSlow61 = (fSlow13 * cos((fSlow14 + -0.7853981633974483))); - double fSlow62 = (fSlow26 * cos((fSlow27 + -0.7853981633974483))); - double fSlow63 = (fSlow13 * cos((fSlow14 + -2.356194490192345))); - double fSlow64 = (fSlow26 * cos((fSlow27 + -2.356194490192345))); - double fSlow65 = (fSlow13 * cos((fSlow14 + -3.9269908169872414))); - double fSlow66 = (fSlow26 * cos((fSlow27 + -3.9269908169872414))); - double fSlow67 = (fSlow13 * cos((fSlow14 + -5.497787143782138))); - double fSlow68 = (fSlow26 * cos((fSlow27 + -5.497787143782138))); - double fSlow69 = (fSlow43 - fSlow44); - double fSlow70 = (fSlow46 - fSlow47); - double fSlow71 = (fSlow49 - fSlow44); - double fSlow72 = (fSlow51 - fSlow47); - double fSlow73 = (fSlow55 - fSlow47); - double fSlow74 = (fSlow53 - fSlow44); - double fSlow75 = (fSlow57 - fSlow44); - double fSlow76 = (fSlow59 - fSlow47); - double fSlow77 = (0.8164965809277259 * fSlow62); - double fSlow78 = (0.5773502691896258 * fSlow25); - double fSlow79 = (fSlow77 + fSlow78); - double fSlow80 = (0.8164965809277259 * fSlow61); - double fSlow81 = (0.5773502691896258 * fSlow12); - double fSlow82 = (fSlow80 + fSlow81); - double fSlow83 = (0.8164965809277259 * fSlow63); - double fSlow84 = (fSlow81 + fSlow83); - double fSlow85 = (0.8164965809277259 * fSlow64); - double fSlow86 = (fSlow78 + fSlow85); - double fSlow87 = (0.8164965809277259 * fSlow65); - double fSlow88 = (fSlow81 + fSlow87); - double fSlow89 = (0.8164965809277259 * fSlow66); - double fSlow90 = (fSlow78 + fSlow89); - double fSlow91 = (0.8164965809277259 * fSlow67); - double fSlow92 = (fSlow81 + fSlow91); - double fSlow93 = (0.8164965809277259 * fSlow68); - double fSlow94 = (fSlow78 + fSlow93); - double fSlow95 = (fSlow77 - fSlow78); - double fSlow96 = (fSlow80 - fSlow81); - double fSlow97 = (fSlow83 - fSlow81); - double fSlow98 = (fSlow85 - fSlow78); - double fSlow99 = (fSlow87 - fSlow81); - double fSlow100 = (fSlow89 - fSlow78); - double fSlow101 = (fSlow91 - fSlow81); - double fSlow102 = (fSlow93 - fSlow78); + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; FAUSTFLOAT* output0 = output[0]; FAUSTFLOAT* output1 = output[1]; FAUSTFLOAT* output2 = output[2]; @@ -1126,150 +987,206 @@ class mydsp : public dsp { FAUSTFLOAT* output6 = output[6]; FAUSTFLOAT* output7 = output[7]; FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1532,7 +1448,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1592,19 +1508,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1615,10 +1532,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAEncEigenMike3.cpp b/source/HOAUGens/HOAEncEigenMike3.cpp new file mode 100644 index 0000000000..e3c53749e3 --- /dev/null +++ b/source/HOAUGens/HOAEncEigenMike3.cpp @@ -0,0 +1,1663 @@ +//---------------------------------------------------------- +// name: "HOAEncEigenMike3" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.100 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fRec3[2]; + FAUSTFLOAT fbargraph1; + double fRec4[2]; + FAUSTFLOAT fbargraph2; + double fRec5[2]; + FAUSTFLOAT fbargraph3; + double fRec6[2]; + FAUSTFLOAT fbargraph4; + double fRec7[2]; + FAUSTFLOAT fbargraph5; + double fRec8[2]; + FAUSTFLOAT fbargraph6; + double fRec9[2]; + FAUSTFLOAT fbargraph7; + double fRec10[2]; + FAUSTFLOAT fbargraph8; + double fRec11[2]; + FAUSTFLOAT fbargraph9; + double fRec12[2]; + FAUSTFLOAT fbargraph10; + double fRec13[2]; + FAUSTFLOAT fbargraph11; + double fRec14[2]; + FAUSTFLOAT fbargraph12; + double fRec15[2]; + FAUSTFLOAT fbargraph13; + double fRec16[2]; + FAUSTFLOAT fbargraph14; + double fRec17[2]; + FAUSTFLOAT fbargraph15; + double fRec18[2]; + FAUSTFLOAT fbargraph16; + double fRec19[2]; + FAUSTFLOAT fbargraph17; + double fRec20[2]; + FAUSTFLOAT fbargraph18; + double fRec21[2]; + FAUSTFLOAT fbargraph19; + double fRec22[2]; + FAUSTFLOAT fbargraph20; + double fRec23[2]; + FAUSTFLOAT fbargraph21; + double fRec24[2]; + FAUSTFLOAT fbargraph22; + double fRec25[2]; + FAUSTFLOAT fbargraph23; + double fRec26[2]; + FAUSTFLOAT fbargraph24; + double fRec27[2]; + FAUSTFLOAT fbargraph25; + double fRec28[2]; + FAUSTFLOAT fbargraph26; + double fRec29[2]; + FAUSTFLOAT fbargraph27; + double fRec30[2]; + FAUSTFLOAT fbargraph28; + double fRec31[2]; + FAUSTFLOAT fbargraph29; + double fRec32[2]; + FAUSTFLOAT fbargraph30; + double fRec33[2]; + FAUSTFLOAT fbargraph31; + double fRec0[2]; + FAUSTFLOAT fbargraph32; + double fRec34[2]; + FAUSTFLOAT fbargraph33; + double fRec35[2]; + FAUSTFLOAT fbargraph34; + double fRec36[2]; + FAUSTFLOAT fbargraph35; + double fRec37[2]; + FAUSTFLOAT fbargraph36; + double fRec38[2]; + FAUSTFLOAT fbargraph37; + double fRec39[2]; + FAUSTFLOAT fbargraph38; + double fRec40[2]; + FAUSTFLOAT fbargraph39; + double fRec41[2]; + FAUSTFLOAT fbargraph40; + double fRec42[2]; + FAUSTFLOAT fbargraph41; + double fRec43[2]; + FAUSTFLOAT fbargraph42; + double fRec44[2]; + FAUSTFLOAT fbargraph43; + double fRec45[2]; + FAUSTFLOAT fbargraph44; + double fRec46[2]; + FAUSTFLOAT fbargraph45; + double fRec47[2]; + FAUSTFLOAT fbargraph46; + double fRec48[2]; + FAUSTFLOAT fbargraph47; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAEncEigenMike3"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("lib/eigenmike32.lib/version", "1.0"); + m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); + m->declare("lib/eigenmike32.lib/license", "GPL"); + m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 32; } + virtual int getNumOutputs() { return 16; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAEncEigenMike3"); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150028ea0", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150027a80", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150026660", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150025240", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150023e20", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150022a00", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500215e0", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500201c0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15001eda0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15001d980", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15001c560", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15001b140", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150019d20", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150018900", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500174e0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500160c0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150014ca0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150013880", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150012460", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150011040", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15000fc20", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15000e800", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15000d3e0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15000bfc0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15000abc0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500097d0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500083e0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150006fd0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150005be0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500047f0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150003430", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150002020", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15002d1b0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500324c0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150035a50", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15003b080", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15003fc00", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150043130", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150046d50", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15004a830", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15004f050", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff1500538a0", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150056570", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15005b670", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff15005d880", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150062c90", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff150065b50", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ff14fad5280", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAEncEigenMike4.cpp b/source/HOAUGens/HOAEncEigenMike4.cpp new file mode 100644 index 0000000000..f163458b0c --- /dev/null +++ b/source/HOAUGens/HOAEncEigenMike4.cpp @@ -0,0 +1,1789 @@ +//---------------------------------------------------------- +// name: "HOAEncEigenMike4" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.9.100 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fRec3[2]; + FAUSTFLOAT fbargraph1; + double fRec4[2]; + FAUSTFLOAT fbargraph2; + double fRec5[2]; + FAUSTFLOAT fbargraph3; + double fRec6[2]; + FAUSTFLOAT fbargraph4; + double fRec7[2]; + FAUSTFLOAT fbargraph5; + double fRec8[2]; + FAUSTFLOAT fbargraph6; + double fRec9[2]; + FAUSTFLOAT fbargraph7; + double fRec10[2]; + FAUSTFLOAT fbargraph8; + double fRec11[2]; + FAUSTFLOAT fbargraph9; + double fRec12[2]; + FAUSTFLOAT fbargraph10; + double fRec13[2]; + FAUSTFLOAT fbargraph11; + double fRec14[2]; + FAUSTFLOAT fbargraph12; + double fRec15[2]; + FAUSTFLOAT fbargraph13; + double fRec16[2]; + FAUSTFLOAT fbargraph14; + double fRec17[2]; + FAUSTFLOAT fbargraph15; + double fRec18[2]; + FAUSTFLOAT fbargraph16; + double fRec19[2]; + FAUSTFLOAT fbargraph17; + double fRec20[2]; + FAUSTFLOAT fbargraph18; + double fRec21[2]; + FAUSTFLOAT fbargraph19; + double fRec22[2]; + FAUSTFLOAT fbargraph20; + double fRec23[2]; + FAUSTFLOAT fbargraph21; + double fRec24[2]; + FAUSTFLOAT fbargraph22; + double fRec25[2]; + FAUSTFLOAT fbargraph23; + double fRec26[2]; + FAUSTFLOAT fbargraph24; + double fRec27[2]; + FAUSTFLOAT fbargraph25; + double fRec28[2]; + FAUSTFLOAT fbargraph26; + double fRec29[2]; + FAUSTFLOAT fbargraph27; + double fRec30[2]; + FAUSTFLOAT fbargraph28; + double fRec31[2]; + FAUSTFLOAT fbargraph29; + double fRec32[2]; + FAUSTFLOAT fbargraph30; + double fRec33[2]; + FAUSTFLOAT fbargraph31; + double fRec0[2]; + FAUSTFLOAT fbargraph32; + double fRec34[2]; + FAUSTFLOAT fbargraph33; + double fRec35[2]; + FAUSTFLOAT fbargraph34; + double fRec36[2]; + FAUSTFLOAT fbargraph35; + double fRec37[2]; + FAUSTFLOAT fbargraph36; + double fRec38[2]; + FAUSTFLOAT fbargraph37; + double fRec39[2]; + FAUSTFLOAT fbargraph38; + double fRec40[2]; + FAUSTFLOAT fbargraph39; + double fRec41[2]; + FAUSTFLOAT fbargraph40; + double fRec42[2]; + FAUSTFLOAT fbargraph41; + double fRec43[2]; + FAUSTFLOAT fbargraph42; + double fRec44[2]; + FAUSTFLOAT fbargraph43; + double fRec45[2]; + FAUSTFLOAT fbargraph44; + double fRec46[2]; + FAUSTFLOAT fbargraph45; + double fRec47[2]; + FAUSTFLOAT fbargraph46; + double fRec48[2]; + FAUSTFLOAT fbargraph47; + double fRec49[2]; + FAUSTFLOAT fbargraph48; + double fRec50[2]; + FAUSTFLOAT fbargraph49; + double fRec51[2]; + FAUSTFLOAT fbargraph50; + double fRec52[2]; + FAUSTFLOAT fbargraph51; + double fRec53[2]; + FAUSTFLOAT fbargraph52; + double fRec54[2]; + FAUSTFLOAT fbargraph53; + double fRec55[2]; + FAUSTFLOAT fbargraph54; + double fRec56[2]; + FAUSTFLOAT fbargraph55; + double fRec57[2]; + FAUSTFLOAT fbargraph56; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAEncEigenMike4"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("lib/eigenmike32.lib/version", "1.0"); + m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); + m->declare("lib/eigenmike32.lib/license", "GPL"); + m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 32; } + virtual int getNumOutputs() { return 25; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<2; i++) fRec27[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<2; i++) fRec29[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<2; i++) fRec31[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2; i++) fRec48[i] = 0; + for (int i=0; i<2; i++) fRec49[i] = 0; + for (int i=0; i<2; i++) fRec50[i] = 0; + for (int i=0; i<2; i++) fRec51[i] = 0; + for (int i=0; i<2; i++) fRec52[i] = 0; + for (int i=0; i<2; i++) fRec53[i] = 0; + for (int i=0; i<2; i++) fRec54[i] = 0; + for (int i=0; i<2; i++) fRec55[i] = 0; + for (int i=0; i<2; i++) fRec56[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAEncEigenMike4"); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b62820", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b63c40", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b61400", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b5ffe0", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b5ebc0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b5d7a0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b5c380", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b5af60", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b59b40", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b58720", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b57300", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b55ee0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b54ac0", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b536a0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b52280", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b50e60", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b4fa40", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b4e620", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b4d200", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b4bde0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b4a9c0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b495a0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b48180", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b46d60", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b45960", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b44570", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b43180", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b41d70", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b40980", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b3f590", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b3e1a0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b3cd20", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b67fc0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b6d1e0", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b708a0", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b75ea0", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b7a8a0", &fbargraph36, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b7e030", &fbargraph37, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b81760", &fbargraph38, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b85030", &fbargraph39, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b89a20", &fbargraph40, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b8e760", &fbargraph41, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b91670", &fbargraph42, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b95cc0", &fbargraph43, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b98520", &fbargraph44, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690b9d7b0", &fbargraph45, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690ba04c0", &fbargraph46, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690ba53f0", &fbargraph47, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690baab90", &fbargraph48, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690bad9c0", &fbargraph49, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690bb1f60", &fbargraph50, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690bb4c20", &fbargraph51, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690bb7350", &fbargraph52, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690bbaab0", &fbargraph53, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690bbf6b0", &fbargraph54, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690bc2d30", &fbargraph55, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9690bc6d50", &fbargraph56, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAMicLebedev061.cpp b/source/HOAUGens/HOAEncLebedev061.cpp similarity index 74% rename from source/HOAUGens/HOAMicLebedev061.cpp rename to source/HOAUGens/HOAEncLebedev061.cpp index 1f90aa8a32..22b133cec5 100644 --- a/source/HOAUGens/HOAMicLebedev061.cpp +++ b/source/HOAUGens/HOAEncLebedev061.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOAMicLebedev061" +// name: "HOAEncLebedev061" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -624,20 +571,20 @@ class ControlAllocator : public UI class mydsp : public dsp { private: double fConst0; + FAUSTFLOAT fslider0; double fRec1[2]; - FAUSTFLOAT fbargraph0; double fRec2[2]; - FAUSTFLOAT fbargraph1; + FAUSTFLOAT fbargraph0; double fRec3[2]; - FAUSTFLOAT fbargraph2; + FAUSTFLOAT fbargraph1; double fRec4[2]; - FAUSTFLOAT fbargraph3; + FAUSTFLOAT fbargraph2; double fRec5[2]; - FAUSTFLOAT fbargraph4; + FAUSTFLOAT fbargraph3; double fRec6[2]; - FAUSTFLOAT fbargraph5; - FAUSTFLOAT fslider0; + FAUSTFLOAT fbargraph4; double fRec7[2]; + FAUSTFLOAT fbargraph5; double fRec0[2]; FAUSTFLOAT fbargraph6; double fRec8[2]; @@ -650,7 +597,12 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev061"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("name", "HOAEncLebedev061"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -670,15 +622,10 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 6; } @@ -687,7 +634,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); } virtual void instanceResetUserInterface() { fslider0 = 0.0; @@ -721,32 +668,32 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAEncLebedev061"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d464a940", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe0c7fef860", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d464bd10", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe0c7ff0c70", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d464d1d0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe0c7fee470", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d464e7a0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe0c7fed080", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d464fda0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe0c7febc90", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d4651460", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe0c7fea890", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); @@ -754,21 +701,21 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d4653b10", &fbargraph6, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe0c7ff2330", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d46555f0", &fbargraph7, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe0c7ff3cd0", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d4656db0", &fbargraph8, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe0c7ff5490", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa1d4658ae0", &fbargraph9, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe0c7ff75d0", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fslider0, "1", ""); @@ -791,44 +738,44 @@ class mydsp : public dsp { FAUSTFLOAT* output2 = output[2]; FAUSTFLOAT* output3 = output[3]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1072,7 +1019,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1132,19 +1079,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1155,10 +1103,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMicLebedev261.cpp b/source/HOAUGens/HOAEncLebedev261.cpp similarity index 70% rename from source/HOAUGens/HOAMicLebedev261.cpp rename to source/HOAUGens/HOAEncLebedev261.cpp index d239b15f83..d5a3a0d59e 100644 --- a/source/HOAUGens/HOAMicLebedev261.cpp +++ b/source/HOAUGens/HOAEncLebedev261.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOAMicLebedev261" +// name: "HOAEncLebedev261" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -624,60 +571,60 @@ class ControlAllocator : public UI class mydsp : public dsp { private: double fConst0; + FAUSTFLOAT fslider0; double fRec1[2]; - FAUSTFLOAT fbargraph0; double fRec2[2]; - FAUSTFLOAT fbargraph1; + FAUSTFLOAT fbargraph0; double fRec3[2]; - FAUSTFLOAT fbargraph2; + FAUSTFLOAT fbargraph1; double fRec4[2]; - FAUSTFLOAT fbargraph3; + FAUSTFLOAT fbargraph2; double fRec5[2]; - FAUSTFLOAT fbargraph4; + FAUSTFLOAT fbargraph3; double fRec6[2]; - FAUSTFLOAT fbargraph5; + FAUSTFLOAT fbargraph4; double fRec7[2]; - FAUSTFLOAT fbargraph6; + FAUSTFLOAT fbargraph5; double fRec8[2]; - FAUSTFLOAT fbargraph7; + FAUSTFLOAT fbargraph6; double fRec9[2]; - FAUSTFLOAT fbargraph8; + FAUSTFLOAT fbargraph7; double fRec10[2]; - FAUSTFLOAT fbargraph9; + FAUSTFLOAT fbargraph8; double fRec11[2]; - FAUSTFLOAT fbargraph10; + FAUSTFLOAT fbargraph9; double fRec12[2]; - FAUSTFLOAT fbargraph11; + FAUSTFLOAT fbargraph10; double fRec13[2]; - FAUSTFLOAT fbargraph12; + FAUSTFLOAT fbargraph11; double fRec14[2]; - FAUSTFLOAT fbargraph13; + FAUSTFLOAT fbargraph12; double fRec15[2]; - FAUSTFLOAT fbargraph14; + FAUSTFLOAT fbargraph13; double fRec16[2]; - FAUSTFLOAT fbargraph15; + FAUSTFLOAT fbargraph14; double fRec17[2]; - FAUSTFLOAT fbargraph16; + FAUSTFLOAT fbargraph15; double fRec18[2]; - FAUSTFLOAT fbargraph17; + FAUSTFLOAT fbargraph16; double fRec19[2]; - FAUSTFLOAT fbargraph18; + FAUSTFLOAT fbargraph17; double fRec20[2]; - FAUSTFLOAT fbargraph19; + FAUSTFLOAT fbargraph18; double fRec21[2]; - FAUSTFLOAT fbargraph20; + FAUSTFLOAT fbargraph19; double fRec22[2]; - FAUSTFLOAT fbargraph21; + FAUSTFLOAT fbargraph20; double fRec23[2]; - FAUSTFLOAT fbargraph22; + FAUSTFLOAT fbargraph21; double fRec24[2]; - FAUSTFLOAT fbargraph23; + FAUSTFLOAT fbargraph22; double fRec25[2]; - FAUSTFLOAT fbargraph24; + FAUSTFLOAT fbargraph23; double fRec26[2]; - FAUSTFLOAT fbargraph25; - FAUSTFLOAT fslider0; + FAUSTFLOAT fbargraph24; double fRec27[2]; + FAUSTFLOAT fbargraph25; double fRec0[2]; FAUSTFLOAT fbargraph26; double fRec28[2]; @@ -690,7 +637,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev261"); + m->declare("name", "HOAEncLebedev261"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -705,20 +652,20 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); m->declare("lib/gui.lib/name", "GUI Library"); m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 26; } @@ -727,7 +674,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); } virtual void instanceResetUserInterface() { fslider0 = 0.0; @@ -781,112 +728,112 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAEncLebedev261"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f426e30", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb21ef10", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f428200", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb6011f0", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f429670", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb49a4d0", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f42ac20", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb499160", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f42c220", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb497db0", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f42d8e0", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb600500", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f42f1d0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb15fd10", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f430860", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb1613d0", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f432010", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb15e650", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f433890", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb15cf90", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1c09e0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb15b8d0", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1c2260", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb15a210", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1c3c50", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb158b50", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1c5690", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb157490", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1c71b0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb155dd0", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1c8cb0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb154710", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1ca860", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb153070", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1cc4f0", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb151990", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1ce5a0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb16e170", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1d0140", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb16fd70", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1d1e60", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb16c570", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1d3c40", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb16a970", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1d5a80", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb168d70", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1d78f0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb167170", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1d9820", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb165570", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1db7a0", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe8fb163970", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); @@ -894,21 +841,21 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1de9a0", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe8fb171ff0", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1e2120", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe8fb175a10", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1e47c0", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe8fb177db0", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbd9f1e7c30", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fe8fb17baf0", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fslider0, "1", ""); @@ -951,133 +898,129 @@ class mydsp : public dsp { FAUSTFLOAT* output2 = output[2]; FAUSTFLOAT* output3 = output[3]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1338,7 +1281,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1398,19 +1341,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1421,10 +1365,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMicLebedev262.cpp b/source/HOAUGens/HOAEncLebedev262.cpp similarity index 68% rename from source/HOAUGens/HOAMicLebedev262.cpp rename to source/HOAUGens/HOAEncLebedev262.cpp index bccad22c33..bca91ac710 100644 --- a/source/HOAUGens/HOAMicLebedev262.cpp +++ b/source/HOAUGens/HOAEncLebedev262.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOAMicLebedev262" +// name: "HOAEncLebedev262" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -624,60 +571,60 @@ class ControlAllocator : public UI class mydsp : public dsp { private: double fConst0; + FAUSTFLOAT fslider0; double fRec1[2]; - FAUSTFLOAT fbargraph0; double fRec2[2]; - FAUSTFLOAT fbargraph1; + FAUSTFLOAT fbargraph0; double fRec3[2]; - FAUSTFLOAT fbargraph2; + FAUSTFLOAT fbargraph1; double fRec4[2]; - FAUSTFLOAT fbargraph3; + FAUSTFLOAT fbargraph2; double fRec5[2]; - FAUSTFLOAT fbargraph4; + FAUSTFLOAT fbargraph3; double fRec6[2]; - FAUSTFLOAT fbargraph5; + FAUSTFLOAT fbargraph4; double fRec7[2]; - FAUSTFLOAT fbargraph6; + FAUSTFLOAT fbargraph5; double fRec8[2]; - FAUSTFLOAT fbargraph7; + FAUSTFLOAT fbargraph6; double fRec9[2]; - FAUSTFLOAT fbargraph8; + FAUSTFLOAT fbargraph7; double fRec10[2]; - FAUSTFLOAT fbargraph9; + FAUSTFLOAT fbargraph8; double fRec11[2]; - FAUSTFLOAT fbargraph10; + FAUSTFLOAT fbargraph9; double fRec12[2]; - FAUSTFLOAT fbargraph11; + FAUSTFLOAT fbargraph10; double fRec13[2]; - FAUSTFLOAT fbargraph12; + FAUSTFLOAT fbargraph11; double fRec14[2]; - FAUSTFLOAT fbargraph13; + FAUSTFLOAT fbargraph12; double fRec15[2]; - FAUSTFLOAT fbargraph14; + FAUSTFLOAT fbargraph13; double fRec16[2]; - FAUSTFLOAT fbargraph15; + FAUSTFLOAT fbargraph14; double fRec17[2]; - FAUSTFLOAT fbargraph16; + FAUSTFLOAT fbargraph15; double fRec18[2]; - FAUSTFLOAT fbargraph17; + FAUSTFLOAT fbargraph16; double fRec19[2]; - FAUSTFLOAT fbargraph18; + FAUSTFLOAT fbargraph17; double fRec20[2]; - FAUSTFLOAT fbargraph19; + FAUSTFLOAT fbargraph18; double fRec21[2]; - FAUSTFLOAT fbargraph20; + FAUSTFLOAT fbargraph19; double fRec22[2]; - FAUSTFLOAT fbargraph21; + FAUSTFLOAT fbargraph20; double fRec23[2]; - FAUSTFLOAT fbargraph22; + FAUSTFLOAT fbargraph21; double fRec24[2]; - FAUSTFLOAT fbargraph23; + FAUSTFLOAT fbargraph22; double fRec25[2]; - FAUSTFLOAT fbargraph24; + FAUSTFLOAT fbargraph23; double fRec26[2]; - FAUSTFLOAT fbargraph25; - FAUSTFLOAT fslider0; + FAUSTFLOAT fbargraph24; double fRec27[2]; + FAUSTFLOAT fbargraph25; double fRec0[2]; FAUSTFLOAT fbargraph26; double fRec28[2]; @@ -700,7 +647,17 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev262"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("name", "HOAEncLebedev262"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -715,20 +672,10 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 26; } @@ -737,7 +684,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); } virtual void instanceResetUserInterface() { fslider0 = 0.0; @@ -796,112 +743,112 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAEncLebedev262"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81a1b50", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21e2950", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81a2f20", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21e3d60", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81a4390", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21e1560", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81a5940", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21e0170", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81a6f40", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21dee10", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81a8600", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21dda00", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81a9ef0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21f3b50", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81ab580", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21f5210", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81acd30", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21f2490", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81ae5b0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21f0dd0", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81afeb0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21ef710", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81b17e0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21ee050", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81b31d0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21ec990", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81b4c10", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21eb2d0", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81b6730", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21e9c10", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81b8230", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21e8550", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81b9de0", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21e6eb0", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81bba70", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21e5820", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81bdab0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae2205ed0", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81bf660", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae2207ad0", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81c1380", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae22042d0", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81c3160", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae22026d0", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81c4fa0", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae2200ad0", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81c6e10", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21faf50", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81c8d40", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21f9350", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81cacc0", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f8ae21f7750", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); @@ -909,43 +856,43 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81cde00", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae2209ca0", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81d1600", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae220d4b0", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81d3a50", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae220fa20", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81d7560", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae22134a0", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81da9e0", &fbargraph30, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae2216fc0", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81dd5d0", &fbargraph31, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae22196f0", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81e05b0", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae221c700", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81e2d10", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae221ef60", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8fb81e68f0", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7f8ae2223070", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fslider0, "1", ""); @@ -993,161 +940,165 @@ class mydsp : public dsp { FAUSTFLOAT* output7 = output[7]; FAUSTFLOAT* output8 = output[8]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1413,7 +1364,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1473,19 +1424,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1496,10 +1448,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMicLebedev263.cpp b/source/HOAUGens/HOAEncLebedev263.cpp similarity index 65% rename from source/HOAUGens/HOAMicLebedev263.cpp rename to source/HOAUGens/HOAEncLebedev263.cpp index b1bd910a8b..e12055546e 100644 --- a/source/HOAUGens/HOAMicLebedev263.cpp +++ b/source/HOAUGens/HOAEncLebedev263.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOAMicLebedev263" +// name: "HOAEncLebedev263" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -120,9 +101,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -130,13 +111,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -164,19 +145,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -209,6 +190,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -232,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -265,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -304,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -378,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -453,9 +394,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT SC_API_EXPORT + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -624,60 +571,60 @@ class ControlAllocator : public UI class mydsp : public dsp { private: double fConst0; + FAUSTFLOAT fslider0; double fRec1[2]; - FAUSTFLOAT fbargraph0; double fRec2[2]; - FAUSTFLOAT fbargraph1; + FAUSTFLOAT fbargraph0; double fRec3[2]; - FAUSTFLOAT fbargraph2; + FAUSTFLOAT fbargraph1; double fRec4[2]; - FAUSTFLOAT fbargraph3; + FAUSTFLOAT fbargraph2; double fRec5[2]; - FAUSTFLOAT fbargraph4; + FAUSTFLOAT fbargraph3; double fRec6[2]; - FAUSTFLOAT fbargraph5; + FAUSTFLOAT fbargraph4; double fRec7[2]; - FAUSTFLOAT fbargraph6; + FAUSTFLOAT fbargraph5; double fRec8[2]; - FAUSTFLOAT fbargraph7; + FAUSTFLOAT fbargraph6; double fRec9[2]; - FAUSTFLOAT fbargraph8; + FAUSTFLOAT fbargraph7; double fRec10[2]; - FAUSTFLOAT fbargraph9; + FAUSTFLOAT fbargraph8; double fRec11[2]; - FAUSTFLOAT fbargraph10; + FAUSTFLOAT fbargraph9; double fRec12[2]; - FAUSTFLOAT fbargraph11; + FAUSTFLOAT fbargraph10; double fRec13[2]; - FAUSTFLOAT fbargraph12; + FAUSTFLOAT fbargraph11; double fRec14[2]; - FAUSTFLOAT fbargraph13; + FAUSTFLOAT fbargraph12; double fRec15[2]; - FAUSTFLOAT fbargraph14; + FAUSTFLOAT fbargraph13; double fRec16[2]; - FAUSTFLOAT fbargraph15; + FAUSTFLOAT fbargraph14; double fRec17[2]; - FAUSTFLOAT fbargraph16; + FAUSTFLOAT fbargraph15; double fRec18[2]; - FAUSTFLOAT fbargraph17; + FAUSTFLOAT fbargraph16; double fRec19[2]; - FAUSTFLOAT fbargraph18; + FAUSTFLOAT fbargraph17; double fRec20[2]; - FAUSTFLOAT fbargraph19; + FAUSTFLOAT fbargraph18; double fRec21[2]; - FAUSTFLOAT fbargraph20; + FAUSTFLOAT fbargraph19; double fRec22[2]; - FAUSTFLOAT fbargraph21; + FAUSTFLOAT fbargraph20; double fRec23[2]; - FAUSTFLOAT fbargraph22; + FAUSTFLOAT fbargraph21; double fRec24[2]; - FAUSTFLOAT fbargraph23; + FAUSTFLOAT fbargraph22; double fRec25[2]; - FAUSTFLOAT fbargraph24; + FAUSTFLOAT fbargraph23; double fRec26[2]; - FAUSTFLOAT fbargraph25; - FAUSTFLOAT fslider0; + FAUSTFLOAT fbargraph24; double fRec27[2]; + FAUSTFLOAT fbargraph25; double fRec0[2]; FAUSTFLOAT fbargraph26; double fRec28[2]; @@ -714,7 +661,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev263"); + m->declare("name", "HOAEncLebedev263"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -734,15 +681,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 26; } @@ -751,7 +698,7 @@ class mydsp : public dsp { } virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); } virtual void instanceResetUserInterface() { fslider0 = 0.0; @@ -817,112 +764,112 @@ class mydsp : public dsp { return fSamplingFreq; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); + ui_interface->openVerticalBox("HOAEncLebedev263"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb263a0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9bcf90", &fbargraph4, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb27770", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9be3a0", &fbargraph5, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb28be0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9bbba0", &fbargraph3, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb2a180", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9ba7b0", &fbargraph2, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb2b780", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9b9450", &fbargraph1, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb2ce40", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9b8040", &fbargraph0, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb2e730", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9ce190", &fbargraph16, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb2fdc0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9cf850", &fbargraph17, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb31570", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9ccad0", &fbargraph15, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb32df0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9cb410", &fbargraph14, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb346f0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9c9d50", &fbargraph13, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb36020", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9c8690", &fbargraph12, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb37a10", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9c6fd0", &fbargraph11, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb39450", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9c5910", &fbargraph10, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb3af70", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9c4250", &fbargraph9, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb3ca70", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9c2b90", &fbargraph8, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb3e620", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9c14f0", &fbargraph7, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb402b0", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9bfe60", &fbargraph6, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb422f0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9dc590", &fbargraph24, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb43ea0", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9de190", &fbargraph25, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb45bc0", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9da990", &fbargraph23, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb479a0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9d8d90", &fbargraph22, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb497e0", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9d7190", &fbargraph21, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb4b650", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9d5590", &fbargraph20, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb4d580", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9d3990", &fbargraph19, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb4f500", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fff3b9d1d90", &fbargraph18, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); @@ -930,73 +877,73 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb52640", &fbargraph26, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9e0360", &fbargraph26, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb56060", &fbargraph27, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9e39b0", &fbargraph27, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb58370", &fbargraph28, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9e6050", &fbargraph28, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb5bef0", &fbargraph29, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9e9da0", &fbargraph29, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb5f580", &fbargraph30, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9ed760", &fbargraph30, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb61e00", &fbargraph31, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9efc20", &fbargraph31, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb64dc0", &fbargraph32, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9f2c50", &fbargraph32, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb676e0", &fbargraph33, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9f52f0", &fbargraph33, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb6b4e0", &fbargraph34, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3b9f91f0", &fbargraph34, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb6f430", &fbargraph35, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3ba01280", &fbargraph35, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb71740", &fbargraph36, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3ba03710", &fbargraph36, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadeb74870", &fbargraph37, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3ba068e0", &fbargraph37, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadaf93340", &fbargraph38, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3ba08750", &fbargraph38, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadaf96e50", &fbargraph39, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3ba0c020", &fbargraph39, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadaf99ea0", &fbargraph40, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3ba0f080", &fbargraph40, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffadaf9dd40", &fbargraph41, -7e+01, 6.0); + ui_interface->addVerticalBargraph("0x7fff3ba12ff0", &fbargraph41, -7e+01, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fslider0, "1", ""); @@ -1051,206 +998,208 @@ class mydsp : public dsp { FAUSTFLOAT* output14 = output[14]; FAUSTFLOAT* output15 = output[15]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1523,7 +1472,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1583,19 +1532,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1606,10 +1556,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMicLebedev501.cpp b/source/HOAUGens/HOAEncLebedev501.cpp similarity index 71% rename from source/HOAUGens/HOAMicLebedev501.cpp rename to source/HOAUGens/HOAEncLebedev501.cpp index dcb027cb8e..258f62d14d 100644 --- a/source/HOAUGens/HOAMicLebedev501.cpp +++ b/source/HOAUGens/HOAEncLebedev501.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOAMicLebedev501" +// name: "HOAEncLebedev501" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -628,7 +575,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev501"); + m->declare("name", "HOAEncLebedev501"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -648,15 +595,15 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 50; } @@ -753,6 +700,7 @@ class mydsp : public dsp { FAUSTFLOAT* output2 = output[2]; FAUSTFLOAT* output3 = output[3]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1049,7 +990,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1109,19 +1050,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1132,10 +1074,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMicLebedev502.cpp b/source/HOAUGens/HOAEncLebedev502.cpp similarity index 64% rename from source/HOAUGens/HOAMicLebedev502.cpp rename to source/HOAUGens/HOAEncLebedev502.cpp index b115472acd..9c4e6d8d66 100644 --- a/source/HOAUGens/HOAMicLebedev502.cpp +++ b/source/HOAUGens/HOAEncLebedev502.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOAMicLebedev502" +// name: "HOAEncLebedev502" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -628,7 +575,7 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev502"); + m->declare("name", "HOAEncLebedev502"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -643,20 +590,20 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); m->declare("lib/gui.lib/name", "GUI Library"); m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 50; } @@ -758,25 +705,25 @@ class mydsp : public dsp { FAUSTFLOAT* output7 = output[7]; FAUSTFLOAT* output8 = output[8]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1079,7 +1032,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1139,19 +1092,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1162,10 +1116,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMicLebedev503.cpp b/source/HOAUGens/HOAEncLebedev503.cpp similarity index 58% rename from source/HOAUGens/HOAMicLebedev503.cpp rename to source/HOAUGens/HOAEncLebedev503.cpp index 013e46a5df..ebd6742f58 100644 --- a/source/HOAUGens/HOAMicLebedev503.cpp +++ b/source/HOAUGens/HOAEncLebedev503.cpp @@ -1,11 +1,11 @@ //---------------------------------------------------------- -// name: "HOAMicLebedev503" +// name: "HOAEncLebedev503" // version: "1.0" // author: "Pierre Lecomte" // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -628,7 +575,12 @@ class mydsp : public dsp { public: virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev503"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("name", "HOAEncLebedev503"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); @@ -638,11 +590,6 @@ class mydsp : public dsp { m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); m->declare("lib/ymn.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); @@ -653,10 +600,10 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 50; } @@ -765,6 +712,7 @@ class mydsp : public dsp { FAUSTFLOAT* output14 = output[14]; FAUSTFLOAT* output15 = output[15]; for (int i=0; imControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1128,7 +1081,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1188,19 +1141,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1211,10 +1165,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAEncLebedev504.cpp b/source/HOAUGens/HOAEncLebedev504.cpp new file mode 100644 index 0000000000..de4e155d0a --- /dev/null +++ b/source/HOAUGens/HOAEncLebedev504.cpp @@ -0,0 +1,1236 @@ +//---------------------------------------------------------- +// name: "HOAEncLebedev504" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.100 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + double fRec0[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAEncLebedev504"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 50; } + virtual int getNumOutputs() { return 25; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* input36 = input[36]; + FAUSTFLOAT* input37 = input[37]; + FAUSTFLOAT* input38 = input[38]; + FAUSTFLOAT* input39 = input[39]; + FAUSTFLOAT* input40 = input[40]; + FAUSTFLOAT* input41 = input[41]; + FAUSTFLOAT* input42 = input[42]; + FAUSTFLOAT* input43 = input[43]; + FAUSTFLOAT* input44 = input[44]; + FAUSTFLOAT* input45 = input[45]; + FAUSTFLOAT* input46 = input[46]; + FAUSTFLOAT* input47 = input[47]; + FAUSTFLOAT* input48 = input[48]; + FAUSTFLOAT* input49 = input[49]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAEncLebedev505.cpp b/source/HOAUGens/HOAEncLebedev505.cpp new file mode 100644 index 0000000000..9a17901017 --- /dev/null +++ b/source/HOAUGens/HOAEncLebedev505.cpp @@ -0,0 +1,1269 @@ +//---------------------------------------------------------- +// name: "HOAEncLebedev505" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2014" +// +// Code generated with Faust 0.9.100 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + double fRec0[2]; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAEncLebedev505"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + } + + virtual int getNumInputs() { return 50; } + virtual int getNumOutputs() { return 36; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->declare(&fslider0, "1", ""); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* input36 = input[36]; + FAUSTFLOAT* input37 = input[37]; + FAUSTFLOAT* input38 = input[38]; + FAUSTFLOAT* input39 = input[39]; + FAUSTFLOAT* input40 = input[40]; + FAUSTFLOAT* input41 = input[41]; + FAUSTFLOAT* input42 = input[42]; + FAUSTFLOAT* input43 = input[43]; + FAUSTFLOAT* input44 = input[44]; + FAUSTFLOAT* input45 = input[45]; + FAUSTFLOAT* input46 = input[46]; + FAUSTFLOAT* input47 = input[47]; + FAUSTFLOAT* input48 = input[48]; + FAUSTFLOAT* input49 = input[49]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/HOAEncoder1.cpp b/source/HOAUGens/HOAEncoder1.cpp index 9ce296e241..d04e84eec6 100644 --- a/source/HOAUGens/HOAEncoder1.cpp +++ b/source/HOAUGens/HOAEncoder1.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -41,46 +41,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -90,35 +71,102 @@ #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -134,17 +182,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -159,31 +214,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -192,9 +244,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -231,69 +284,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -305,26 +317,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -350,23 +364,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT /* NOP */ + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -549,7 +570,7 @@ class ControlAllocator : public UI class mydsp : public dsp { private: - int iConst0; + double fConst0; double fConst1; FAUSTFLOAT fcheckbox0; FAUSTFLOAT fentry0; @@ -571,8 +592,10 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph2; double fRec7[2]; FAUSTFLOAT fbargraph3; + int fSamplingFreq; + public: - static void metadata(Meta* m) { + virtual void metadata(Meta* m) { m->declare("lib/gui.lib/name", "GUI Library"); m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); @@ -593,37 +616,39 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 4; } - virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 4; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - iConst0 = min(192000, max(1, fSamplingFreq)); - fConst1 = (8e+01 / double(iConst0)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + } + virtual void instanceResetUserInterface() { fcheckbox0 = 0.0; fentry0 = 1.07; fslider0 = 2.0; fslider1 = 0.0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; fslider2 = 0.0; fslider3 = 0.0; - fConst2 = (3.4e+02 / double(iConst0)); - fConst3 = (1.7e+02 / double(iConst0)); + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; @@ -635,58 +660,69 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openHorizontalBox("0x00"); - interface->openVerticalBox("Parameters"); - interface->openHorizontalBox("Source 0"); - interface->declare(&fslider1, "0+1", ""); - interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - interface->declare(&fslider0, "0+2", ""); - interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - interface->declare(&fslider3, "0+3", ""); - interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - interface->declare(&fslider3, "style", "knob"); - interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(&fslider2, "0+4", ""); - interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - interface->declare(&fslider2, "style", "knob"); - interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(0, "0+5", ""); - interface->openHorizontalBox("Spherical Wave"); - interface->addCheckButton("Yes", &fcheckbox0); - interface->closeBox(); - interface->declare(&fentry0, "~", ""); - interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "~", ""); - interface->openVerticalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7f96c7f697d0", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7f96c7f6eb00", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7f96c7f704c0", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7f96c7f72120", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("HOAEncoder1"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider3, "0+3", ""); + ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); + ui_interface->declare(&fslider2, "0+4", ""); + ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa62242fba0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa622434df0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa622436820", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa622438410", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = double(fcheckbox0); @@ -696,48 +732,42 @@ class mydsp : public dsp { double fSlow4 = double(fslider0); double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fTemp0; - double fTemp1; double fSlow7 = double(fslider2); double fSlow8 = cos(fSlow7); double fSlow9 = double(fslider3); double fSlow10 = (1.7320508075688772 * (fSlow8 * sin(fSlow9))); - double fSlow11 = (1 + (fConst3 / fSlow4)); + double fSlow11 = ((fConst3 / fSlow4) + 1); double fSlow12 = (fConst2 / (fSlow4 * fSlow11)); - double fSlow13 = (1.0 / (1 + (fConst3 / fSlow2))); + double fSlow13 = (1.0 / ((fConst3 / fSlow2) + 1)); double fSlow14 = ((fSlow3 * fSlow11) / fSlow4); double fSlow15 = (fConst2 / fSlow2); - double fTemp2; - double fTemp3; double fSlow16 = (1.7320508075688772 * sin(fSlow7)); - double fTemp4; double fSlow17 = (1.7320508075688772 * (fSlow8 * cos(fSlow9))); - double fTemp5; FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* output0 = output[0]; FAUSTFLOAT* output1 = output[1]; FAUSTFLOAT* output2 = output[2]; FAUSTFLOAT* output3 = output[3]; for (int i=0; igetNumInputs(); } }; // Global state @@ -797,7 +827,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -829,7 +859,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -852,9 +882,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -880,9 +910,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -894,7 +924,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -915,7 +945,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -925,68 +955,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1000,6 +1053,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1011,18 +1068,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1033,10 +1092,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAEncoder2.cpp b/source/HOAUGens/HOAEncoder2.cpp index d6a33e6250..8edbe278d3 100644 --- a/source/HOAUGens/HOAEncoder2.cpp +++ b/source/HOAUGens/HOAEncoder2.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -13,12 +13,14 @@ #ifndef FAUSTPOWER #define FAUSTPOWER #include -template inline float faustpower(float x) { return powf(x,N); } -template inline double faustpower(double x) { return pow(x,N); } template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } template <> inline int faustpower<0>(int x) { return 1; } template <> inline int faustpower<1>(int x) { return x; } template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } #endif // If other than 'faust2sc --prefix Faust' is used, sed this as well: #if !defined(SC_FAUST_PREFIX) @@ -51,46 +53,27 @@ template <> inline int faustpower<2>(int x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -100,35 +83,102 @@ template <> inline int faustpower<2>(int x) { return x*x; } #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -144,17 +194,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -169,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -202,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -241,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -315,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -360,23 +376,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT /* NOP */ + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -559,7 +582,7 @@ class ControlAllocator : public UI class mydsp : public dsp { private: - int iConst0; + double fConst0; double fConst1; FAUSTFLOAT fcheckbox0; FAUSTFLOAT fentry0; @@ -582,13 +605,13 @@ class mydsp : public dsp { double fRec7[2]; FAUSTFLOAT fbargraph3; double fConst4; - double fConst5; double fRec11[2]; - double fRec12[2]; double fRec10[2]; + double fConst5; double fRec9[2]; - double fVec0[2]; double fRec13[2]; + double fVec0[2]; + double fRec12[2]; double fRec8[2]; FAUSTFLOAT fbargraph4; double fRec14[2]; @@ -599,8 +622,10 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph7; double fRec17[2]; FAUSTFLOAT fbargraph8; + int fSamplingFreq; + public: - static void metadata(Meta* m) { + virtual void metadata(Meta* m) { m->declare("name", "HOAEncoder2"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -621,51 +646,53 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 9; } - virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 9; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - iConst0 = min(192000, max(1, fSamplingFreq)); - fConst1 = (8e+01 / double(iConst0)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + } + virtual void instanceResetUserInterface() { fcheckbox0 = 0.0; fentry0 = 1.07; fslider0 = 2.0; fslider1 = 0.0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; fslider2 = 0.0; fslider3 = 0.0; - fConst2 = (3.4e+02 / double(iConst0)); - fConst3 = (1.7e+02 / double(iConst0)); + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; for (int i=0; i<2; i++) fRec7[i] = 0; - fConst4 = (5.1e+02 / double(iConst0)); - fConst5 = (1.02e+03 / double(iConst0)); for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec15[i] = 0; @@ -676,80 +703,91 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openHorizontalBox("0x00"); - interface->openVerticalBox("Parameters"); - interface->openHorizontalBox("Source 0"); - interface->declare(&fslider1, "0+1", ""); - interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - interface->declare(&fslider0, "0+2", ""); - interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - interface->declare(&fslider3, "0+3", ""); - interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - interface->declare(&fslider3, "style", "knob"); - interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(&fslider2, "0+4", ""); - interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - interface->declare(&fslider2, "style", "knob"); - interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(0, "0+5", ""); - interface->openHorizontalBox("Spherical Wave"); - interface->addCheckButton("Yes", &fcheckbox0); - interface->closeBox(); - interface->declare(&fentry0, "~", ""); - interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "~", ""); - interface->openVerticalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7f9614162bc0", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7f9614168100", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7f9614169b50", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7f961416b7b0", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7f9614171730", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7f96141733f0", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7f96141751a0", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7f9614176dc0", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph8, "unit", "dB"); - interface->addVerticalBargraph("0x7f9614178b90", &fbargraph8, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("HOAEncoder2"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider3, "0+3", ""); + ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); + ui_interface->declare(&fslider2, "0+4", ""); + ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a17f80", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a1d3a0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a1ee10", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a20a20", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a26880", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a28530", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a2a3a0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a2bf70", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9296a2dcf0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = double(fcheckbox0); @@ -759,54 +797,40 @@ class mydsp : public dsp { double fSlow4 = double(fslider0); double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fTemp0; - double fTemp1; double fSlow7 = double(fslider2); double fSlow8 = cos(fSlow7); double fSlow9 = double(fslider3); double fSlow10 = sin(fSlow9); double fSlow11 = (1.7320508075688772 * (fSlow8 * fSlow10)); double fSlow12 = (fConst3 / fSlow4); - double fSlow13 = (1 + fSlow12); + double fSlow13 = (fSlow12 + 1); double fSlow14 = (fConst2 / (fSlow4 * fSlow13)); double fSlow15 = (fConst3 / fSlow2); - double fSlow16 = (1.0 / (1 + fSlow15)); + double fSlow16 = (1.0 / (fSlow15 + 1)); double fSlow17 = ((fSlow3 * fSlow13) / fSlow4); double fSlow18 = (fConst2 / fSlow2); - double fTemp2; - double fTemp3; - double fTemp4; double fSlow19 = sin(fSlow7); double fSlow20 = (1.7320508075688772 * fSlow19); - double fTemp5; double fSlow21 = cos(fSlow9); double fSlow22 = (1.7320508075688772 * (fSlow8 * fSlow21)); - double fTemp6; double fSlow23 = faustpower<2>(fSlow8); double fSlow24 = (2 * fSlow9); double fSlow25 = (1.9364916731037085 * (fSlow23 * sin(fSlow24))); - double fSlow26 = faustpower<2>(fSlow12); - double fSlow27 = (1 + ((fConst4 / fSlow4) + (3 * fSlow26))); - double fSlow28 = (1.0 / fSlow27); - double fSlow29 = (12 * fSlow26); - double fSlow30 = (fSlow29 + (fConst5 / fSlow4)); - double fSlow31 = faustpower<2>(fSlow15); - double fSlow32 = (1.0 / (1 + ((fConst4 / fSlow2) + (3 * fSlow31)))); - double fSlow33 = ((fSlow3 * fSlow27) / fSlow4); - double fSlow34 = (12 * fSlow31); - double fSlow35 = (fSlow34 + (fConst5 / fSlow2)); - double fTemp7; - double fTemp8; - double fTemp9; + double fSlow26 = faustpower<2>(fSlow15); + double fSlow27 = (1.0 / (((fConst4 / fSlow2) + (3 * fSlow26)) + 1)); + double fSlow28 = faustpower<2>(fSlow12); + double fSlow29 = (((fConst4 / fSlow4) + (3 * fSlow28)) + 1); + double fSlow30 = ((fSlow3 * fSlow29) / fSlow4); + double fSlow31 = (12 * fSlow26); + double fSlow32 = (fSlow31 + (fConst5 / fSlow2)); + double fSlow33 = (1.0 / fSlow29); + double fSlow34 = (12 * fSlow28); + double fSlow35 = ((fConst5 / fSlow4) + fSlow34); double fSlow36 = sin((2 * fSlow7)); double fSlow37 = (1.9364916731037085 * (fSlow36 * fSlow10)); - double fTemp10; - double fSlow38 = (1.118033988749895 * ((3 * faustpower<2>(fSlow19)) - 1)); - double fTemp11; + double fSlow38 = (1.118033988749895 * ((3 * faustpower<2>(fSlow19)) + -1)); double fSlow39 = (1.9364916731037085 * (fSlow36 * fSlow21)); - double fTemp12; double fSlow40 = (1.9364916731037085 * (fSlow23 * cos(fSlow24))); - double fTemp13; FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* output0 = output[0]; FAUSTFLOAT* output1 = output[1]; @@ -818,54 +842,54 @@ class mydsp : public dsp { FAUSTFLOAT* output7 = output[7]; FAUSTFLOAT* output8 = output[8]; for (int i=0; igetNumInputs(); } }; // Global state @@ -936,7 +960,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -968,7 +992,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -991,9 +1015,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1019,9 +1043,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1033,7 +1057,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -1054,7 +1078,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -1064,68 +1088,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1139,6 +1186,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1150,18 +1201,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1172,10 +1225,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAEncoder3.cpp b/source/HOAUGens/HOAEncoder3.cpp index d0f6249ce1..360041b5f1 100644 --- a/source/HOAUGens/HOAEncoder3.cpp +++ b/source/HOAUGens/HOAEncoder3.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -13,12 +13,14 @@ #ifndef FAUSTPOWER #define FAUSTPOWER #include -template inline float faustpower(float x) { return powf(x,N); } -template inline double faustpower(double x) { return pow(x,N); } template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } template <> inline int faustpower<0>(int x) { return 1; } template <> inline int faustpower<1>(int x) { return x; } template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } #endif // If other than 'faust2sc --prefix Faust' is used, sed this as well: #if !defined(SC_FAUST_PREFIX) @@ -51,46 +53,27 @@ template <> inline int faustpower<2>(int x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -100,35 +83,102 @@ template <> inline int faustpower<2>(int x) { return x*x; } #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -144,17 +194,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -169,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -202,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -241,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -315,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -360,23 +376,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT /* NOP */ + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -559,7 +582,7 @@ class ControlAllocator : public UI class mydsp : public dsp { private: - int iConst0; + double fConst0; double fConst1; FAUSTFLOAT fcheckbox0; FAUSTFLOAT fentry0; @@ -582,13 +605,13 @@ class mydsp : public dsp { double fRec7[2]; FAUSTFLOAT fbargraph3; double fConst4; - double fConst5; double fRec11[2]; - double fRec12[2]; double fRec10[2]; + double fConst5; double fRec9[2]; - double fVec0[2]; double fRec13[2]; + double fVec0[2]; + double fRec12[2]; double fRec8[2]; FAUSTFLOAT fbargraph4; double fRec14[2]; @@ -602,13 +625,13 @@ class mydsp : public dsp { double fConst6; double fConst7; double fConst8; - double fConst9; - double fRec22[2]; double fRec23[2]; + double fRec22[2]; + double fConst9; double fRec21[2]; - double fRec24[2]; - double fVec1[2]; double fRec25[2]; + double fVec1[2]; + double fRec24[2]; double fRec26[2]; double fRec20[2]; double fRec19[2]; @@ -626,8 +649,15 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph14; double fRec32[2]; FAUSTFLOAT fbargraph15; + int fSamplingFreq; + public: - static void metadata(Meta* m) { + virtual void metadata(Meta* m) { + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); m->declare("name", "HOAEncoder3"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -648,66 +678,63 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 16; } - virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 16; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - iConst0 = min(192000, max(1, fSamplingFreq)); - fConst1 = (8e+01 / double(iConst0)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + fConst6 = (789.5430205728705 / fConst0); + fConst7 = (394.7715102864353 / fConst0); + fConst8 = (625.2284897135664 / fConst0); + fConst9 = (1250.4569794271329 / fConst0); + } + virtual void instanceResetUserInterface() { fcheckbox0 = 0.0; fentry0 = 1.07; fslider0 = 2.0; fslider1 = 0.0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; fslider2 = 0.0; fslider3 = 0.0; - fConst2 = (3.4e+02 / double(iConst0)); - fConst3 = (1.7e+02 / double(iConst0)); + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; for (int i=0; i<2; i++) fRec7[i] = 0; - fConst4 = (5.1e+02 / double(iConst0)); - fConst5 = (1.02e+03 / double(iConst0)); for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec15[i] = 0; for (int i=0; i<2; i++) fRec16[i] = 0; for (int i=0; i<2; i++) fRec17[i] = 0; - fConst6 = (789.5430205728705 / double(iConst0)); - fConst7 = (394.7715102864353 / double(iConst0)); - fConst8 = (625.2284897135664 / double(iConst0)); - fConst9 = (1250.4569794271329 / double(iConst0)); - for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; for (int i=0; i<2; i++) fRec20[i] = 0; for (int i=0; i<2; i++) fRec19[i] = 0; @@ -723,203 +750,193 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openHorizontalBox("0x00"); - interface->openVerticalBox("Parameters"); - interface->openHorizontalBox("Source 0"); - interface->declare(&fslider1, "0+1", ""); - interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - interface->declare(&fslider0, "0+2", ""); - interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - interface->declare(&fslider2, "0+3", ""); - interface->declare(&fslider2, "osc", "/azimuth_0 0 360"); - interface->declare(&fslider2, "style", "knob"); - interface->addHorizontalSlider("Azimuth 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(&fslider3, "0+4", ""); - interface->declare(&fslider3, "osc", "/elevation_0 -90 90"); - interface->declare(&fslider3, "style", "knob"); - interface->addHorizontalSlider("Elevation 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(0, "0+5", ""); - interface->openHorizontalBox("Spherical Wave"); - interface->addCheckButton("Yes", &fcheckbox0); - interface->closeBox(); - interface->declare(&fentry0, "~", ""); - interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "~", ""); - interface->openVerticalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269858d0", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7fb92698afd0", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7fb92698ca20", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7fb92698e710", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269947d0", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7fb926996480", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7fb926998250", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7fb926999e80", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph8, "unit", "dB"); - interface->addVerticalBargraph("0x7fb92699bcf0", &fbargraph8, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph9, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269a3dc0", &fbargraph9, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph10, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269a5940", &fbargraph10, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph11, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269a7800", &fbargraph11, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph12, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269a9620", &fbargraph12, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph13, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269ab330", &fbargraph13, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph14, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269ad0b0", &fbargraph14, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph15, "unit", "dB"); - interface->addVerticalBargraph("0x7fb9269aefd0", &fbargraph15, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("HOAEncoder3"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider3, "0+3", ""); + ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); + ui_interface->declare(&fslider2, "0+4", ""); + ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158d62a0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158db750", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158dd1c0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158dee60", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158e4d10", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158e69c0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158e8850", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158ea430", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158ec1e0", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158f3fc0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158f5c90", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158f7c60", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158f9aa0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd1158fb770", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd115c01420", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fd115c032f0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = double(fcheckbox0); - double fSlow1 = double(fentry0); - double fSlow2 = double(fslider0); - double fSlow3 = (1 - fSlow0); - double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); - double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fTemp0; - double fTemp1; - double fSlow6 = double(fslider2); - double fSlow7 = sin(fSlow6); - double fSlow8 = double(fslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (fSlow7 * fSlow9); - double fSlow11 = (1.7320508075688772 * fSlow10); - double fSlow12 = (fConst3 / fSlow2); - double fSlow13 = (1 + fSlow12); - double fSlow14 = (fConst2 / (fSlow13 * fSlow2)); - double fSlow15 = (fConst3 / fSlow1); - double fSlow16 = (1.0 / (1 + fSlow15)); - double fSlow17 = (((fSlow13 * fSlow0) * fSlow1) / fSlow2); - double fSlow18 = (fConst2 / fSlow1); - double fTemp2; - double fTemp3; - double fTemp4; - double fSlow19 = sin(fSlow8); - double fSlow20 = (1.7320508075688772 * fSlow19); - double fTemp5; - double fSlow21 = cos(fSlow6); - double fSlow22 = (fSlow21 * fSlow9); - double fSlow23 = (1.7320508075688772 * fSlow22); - double fTemp6; - double fSlow24 = (2 * fSlow6); - double fSlow25 = faustpower<2>(fSlow9); - double fSlow26 = (sin(fSlow24) * fSlow25); - double fSlow27 = (1.9364916731037085 * fSlow26); - double fSlow28 = faustpower<2>(fSlow12); - double fSlow29 = (1 + ((fConst4 / fSlow2) + (3 * fSlow28))); - double fSlow30 = (1.0 / fSlow29); - double fSlow31 = (12 * fSlow28); - double fSlow32 = (fSlow31 + (fConst5 / fSlow2)); - double fSlow33 = faustpower<2>(fSlow15); - double fSlow34 = (1.0 / (1 + ((fConst4 / fSlow1) + (3 * fSlow33)))); - double fSlow35 = (((fSlow29 * fSlow0) * fSlow1) / fSlow2); - double fSlow36 = (12 * fSlow33); - double fSlow37 = (fSlow36 + (fConst5 / fSlow1)); - double fTemp7; - double fTemp8; - double fTemp9; - double fSlow38 = sin((2 * fSlow8)); - double fSlow39 = (1.9364916731037085 * (fSlow7 * fSlow38)); - double fTemp10; - double fSlow40 = faustpower<2>(fSlow19); - double fSlow41 = (1.118033988749895 * ((3 * fSlow40) - 1)); - double fTemp11; - double fSlow42 = (1.9364916731037085 * (fSlow21 * fSlow38)); - double fTemp12; - double fSlow43 = (cos(fSlow24) * fSlow25); - double fSlow44 = (1.9364916731037085 * fSlow43); - double fTemp13; - double fSlow45 = (3 * fSlow6); - double fSlow46 = faustpower<3>(fSlow9); - double fSlow47 = (2.091650066335189 * (sin(fSlow45) * fSlow46)); - double fSlow48 = (1 + (fConst7 / fSlow2)); - double fSlow49 = (fConst6 / (fSlow48 * fSlow2)); - double fSlow50 = (1.0 / (1 + (fConst7 / fSlow1))); - double fSlow51 = (1.0 / (1 + ((fConst8 / fSlow1) + (6.45943269348338 * fSlow33)))); - double fSlow52 = (1 + ((fConst8 / fSlow2) + (6.45943269348338 * fSlow28))); - double fSlow53 = (((fSlow52 * fSlow0) * fSlow1) / fSlow2); - double fSlow54 = (25.83773077393352 * fSlow33); - double fSlow55 = (fSlow54 + (fConst9 / fSlow1)); - double fSlow56 = (1.0 / fSlow52); - double fSlow57 = (25.83773077393352 * fSlow28); - double fSlow58 = (fSlow57 + (fConst9 / fSlow2)); - double fTemp14; - double fSlow59 = (fConst6 / fSlow1); - double fTemp15; - double fTemp16; - double fSlow60 = (5.123475382979799 * (fSlow26 * fSlow19)); - double fTemp17; - double fSlow61 = (5 * fSlow40); - double fSlow62 = (fSlow61 - 1); - double fSlow63 = (1.620185174601965 * (fSlow10 * fSlow62)); - double fTemp18; - double fSlow64 = (1.3228756555322954 * (fSlow19 * (fSlow61 - 3))); - double fTemp19; - double fSlow65 = (1.620185174601965 * (fSlow22 * fSlow62)); - double fTemp20; - double fSlow66 = (5.123475382979799 * (fSlow43 * fSlow19)); - double fTemp21; - double fSlow67 = (2.091650066335189 * (cos(fSlow45) * fSlow46)); - double fTemp22; + double fSlow1 = (1 - fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = double(fslider2); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fslider3); + double fSlow10 = sin(fSlow9); + double fSlow11 = (fSlow8 * fSlow10); + double fSlow12 = (1.7320508075688772 * fSlow11); + double fSlow13 = (fConst3 / fSlow4); + double fSlow14 = (fSlow13 + 1); + double fSlow15 = (fConst2 / (fSlow4 * fSlow14)); + double fSlow16 = (fConst3 / fSlow2); + double fSlow17 = (1.0 / (fSlow16 + 1)); + double fSlow18 = ((fSlow3 * fSlow14) / fSlow4); + double fSlow19 = (fConst2 / fSlow2); + double fSlow20 = sin(fSlow7); + double fSlow21 = (1.7320508075688772 * fSlow20); + double fSlow22 = cos(fSlow9); + double fSlow23 = (fSlow8 * fSlow22); + double fSlow24 = (1.7320508075688772 * fSlow23); + double fSlow25 = faustpower<2>(fSlow8); + double fSlow26 = (2 * fSlow9); + double fSlow27 = sin(fSlow26); + double fSlow28 = (1.9364916731037085 * (fSlow25 * fSlow27)); + double fSlow29 = faustpower<2>(fSlow16); + double fSlow30 = (1.0 / (((fConst4 / fSlow2) + (3 * fSlow29)) + 1)); + double fSlow31 = faustpower<2>(fSlow13); + double fSlow32 = (((fConst4 / fSlow4) + (3 * fSlow31)) + 1); + double fSlow33 = ((fSlow3 * fSlow32) / fSlow4); + double fSlow34 = (12 * fSlow29); + double fSlow35 = (fSlow34 + (fConst5 / fSlow2)); + double fSlow36 = (1.0 / fSlow32); + double fSlow37 = (12 * fSlow31); + double fSlow38 = ((fConst5 / fSlow4) + fSlow37); + double fSlow39 = sin((2 * fSlow7)); + double fSlow40 = (1.9364916731037085 * (fSlow39 * fSlow10)); + double fSlow41 = faustpower<2>(fSlow20); + double fSlow42 = (1.118033988749895 * ((3 * fSlow41) + -1)); + double fSlow43 = (1.9364916731037085 * (fSlow39 * fSlow22)); + double fSlow44 = cos(fSlow26); + double fSlow45 = (1.9364916731037085 * (fSlow25 * fSlow44)); + double fSlow46 = faustpower<3>(fSlow8); + double fSlow47 = (3 * fSlow9); + double fSlow48 = (2.091650066335189 * (fSlow46 * sin(fSlow47))); + double fSlow49 = ((fConst7 / fSlow4) + 1); + double fSlow50 = (fConst6 / (fSlow4 * fSlow49)); + double fSlow51 = (1.0 / ((fConst7 / fSlow2) + 1)); + double fSlow52 = (1.0 / (((fConst8 / fSlow2) + (6.45943269348338 * fSlow29)) + 1)); + double fSlow53 = (((fConst8 / fSlow4) + (6.45943269348338 * fSlow31)) + 1); + double fSlow54 = ((fSlow3 * fSlow53) / fSlow4); + double fSlow55 = (25.83773077393352 * fSlow29); + double fSlow56 = (fSlow55 + (fConst9 / fSlow2)); + double fSlow57 = (1.0 / fSlow53); + double fSlow58 = (25.83773077393352 * fSlow31); + double fSlow59 = ((fConst9 / fSlow4) + fSlow58); + double fSlow60 = (fConst6 / fSlow2); + double fSlow61 = (fSlow25 * fSlow20); + double fSlow62 = (5.123475382979799 * (fSlow61 * fSlow27)); + double fSlow63 = (5 * fSlow41); + double fSlow64 = (fSlow63 + -1); + double fSlow65 = (1.620185174601965 * (fSlow11 * fSlow64)); + double fSlow66 = (1.3228756555322954 * (fSlow20 * (fSlow63 + -3))); + double fSlow67 = (1.620185174601965 * (fSlow23 * fSlow64)); + double fSlow68 = (5.123475382979799 * (fSlow61 * fSlow44)); + double fSlow69 = (2.091650066335189 * (fSlow46 * cos(fSlow47))); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* output0 = output[0]; FAUSTFLOAT* output1 = output[1]; @@ -938,93 +955,93 @@ class mydsp : public dsp { FAUSTFLOAT* output14 = output[14]; FAUSTFLOAT* output15 = output[15]; for (int i=0; igetNumInputs(); } }; // Global state @@ -1111,7 +1128,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1143,7 +1160,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -1166,9 +1183,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1194,9 +1211,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1208,7 +1225,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -1229,7 +1246,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -1239,68 +1256,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1314,6 +1354,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1325,18 +1369,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1347,10 +1393,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAEncoder4.cpp b/source/HOAUGens/HOAEncoder4.cpp index 03e77cd3bc..14b9b1f4de 100644 --- a/source/HOAUGens/HOAEncoder4.cpp +++ b/source/HOAUGens/HOAEncoder4.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -13,12 +13,14 @@ #ifndef FAUSTPOWER #define FAUSTPOWER #include -template inline float faustpower(float x) { return powf(x,N); } -template inline double faustpower(double x) { return pow(x,N); } template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } template <> inline int faustpower<0>(int x) { return 1; } template <> inline int faustpower<1>(int x) { return x; } template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } #endif // If other than 'faust2sc --prefix Faust' is used, sed this as well: #if !defined(SC_FAUST_PREFIX) @@ -51,46 +53,27 @@ template <> inline int faustpower<2>(int x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -100,35 +83,102 @@ template <> inline int faustpower<2>(int x) { return x*x; } #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -144,17 +194,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -169,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -202,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -241,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -315,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -360,23 +376,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT /* NOP */ + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -559,7 +582,7 @@ class ControlAllocator : public UI class mydsp : public dsp { private: - int iConst0; + double fConst0; double fConst1; FAUSTFLOAT fcheckbox0; FAUSTFLOAT fentry0; @@ -582,13 +605,13 @@ class mydsp : public dsp { double fRec7[2]; FAUSTFLOAT fbargraph3; double fConst4; - double fConst5; double fRec11[2]; - double fRec12[2]; double fRec10[2]; + double fConst5; double fRec9[2]; - double fVec0[2]; double fRec13[2]; + double fVec0[2]; + double fRec12[2]; double fRec8[2]; FAUSTFLOAT fbargraph4; double fRec14[2]; @@ -602,13 +625,13 @@ class mydsp : public dsp { double fConst6; double fConst7; double fConst8; - double fConst9; - double fRec22[2]; double fRec23[2]; + double fRec22[2]; + double fConst9; double fRec21[2]; - double fRec24[2]; - double fVec1[2]; double fRec25[2]; + double fVec1[2]; + double fRec24[2]; double fRec26[2]; double fRec20[2]; double fRec19[2]; @@ -628,20 +651,20 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph15; double fConst10; double fConst11; - double fConst12; - double fConst13; double fRec37[2]; - double fRec38[2]; double fRec36[2]; + double fConst12; + double fRec35[2]; double fRec39[2]; double fVec2[2]; - double fRec40[2]; + double fRec38[2]; double fRec41[2]; - double fRec42[2]; - double fRec35[2]; + double fRec40[2]; + double fConst13; double fRec34[2]; - double fVec3[2]; double fRec43[2]; + double fVec3[2]; + double fRec42[2]; double fRec33[2]; FAUSTFLOAT fbargraph16; double fRec44[2]; @@ -660,8 +683,17 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph23; double fRec51[2]; FAUSTFLOAT fbargraph24; + int fSamplingFreq; + public: - static void metadata(Meta* m) { + virtual void metadata(Meta* m) { + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); m->declare("name", "HOAEncoder4"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -672,11 +704,6 @@ class mydsp : public dsp { m->declare("lib/nfc.lib/author", "Pierre Lecomte"); m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); m->declare("lib/ymn.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); @@ -687,61 +714,65 @@ class mydsp : public dsp { m->declare("lib/gui.lib/author", "Pierre Lecomte"); m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 25; } - virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 25; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - iConst0 = min(192000, max(1, fSamplingFreq)); - fConst1 = (8e+01 / double(iConst0)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + fConst6 = (789.5430205728705 / fConst0); + fConst7 = (394.7715102864353 / fConst0); + fConst8 = (625.2284897135664 / fConst0); + fConst9 = (1250.4569794271329 / fConst0); + fConst10 = (984.7116049589241 / fConst0); + fConst11 = (715.2883950410759 / fConst0); + fConst12 = (1430.5767900821518 / fConst0); + fConst13 = (1969.4232099178482 / fConst0); + } + virtual void instanceResetUserInterface() { fcheckbox0 = 0.0; fentry0 = 1.07; fslider0 = 2.0; fslider1 = 0.0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; fslider2 = 0.0; fslider3 = 0.0; - fConst2 = (3.4e+02 / double(iConst0)); - fConst3 = (1.7e+02 / double(iConst0)); + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; for (int i=0; i<2; i++) fRec7[i] = 0; - fConst4 = (5.1e+02 / double(iConst0)); - fConst5 = (1.02e+03 / double(iConst0)); for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec15[i] = 0; for (int i=0; i<2; i++) fRec16[i] = 0; for (int i=0; i<2; i++) fRec17[i] = 0; - fConst6 = (789.5430205728705 / double(iConst0)); - fConst7 = (394.7715102864353 / double(iConst0)); - fConst8 = (625.2284897135664 / double(iConst0)); - fConst9 = (1250.4569794271329 / double(iConst0)); - for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; for (int i=0; i<2; i++) fRec20[i] = 0; for (int i=0; i<2; i++) fRec19[i] = 0; @@ -752,22 +783,18 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec30[i] = 0; for (int i=0; i<2; i++) fRec31[i] = 0; for (int i=0; i<2; i++) fRec32[i] = 0; - fConst10 = (984.7116049589241 / double(iConst0)); - fConst11 = (1969.4232099178482 / double(iConst0)); - fConst12 = (715.2883950410759 / double(iConst0)); - fConst13 = (1430.5767900821518 / double(iConst0)); for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; for (int i=0; i<2; i++) fRec39[i] = 0; for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; for (int i=0; i<2; i++) fRec33[i] = 0; for (int i=0; i<2; i++) fRec44[i] = 0; for (int i=0; i<2; i++) fRec45[i] = 0; @@ -782,148 +809,159 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openHorizontalBox("0x00"); - interface->openVerticalBox("Parameters"); - interface->openHorizontalBox("Source 0"); - interface->declare(&fslider1, "0+1", ""); - interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - interface->declare(&fslider0, "0+2", ""); - interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - interface->declare(&fslider3, "0+3", ""); - interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - interface->declare(&fslider3, "style", "knob"); - interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(&fslider2, "0+4", ""); - interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - interface->declare(&fslider2, "style", "knob"); - interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(0, "0+5", ""); - interface->openHorizontalBox("Spherical Wave"); - interface->addCheckButton("Yes", &fcheckbox0); - interface->closeBox(); - interface->declare(&fentry0, "~", ""); - interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "~", ""); - interface->openVerticalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec6ae40", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec70380", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec71dd0", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec73a30", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec79a20", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec7b6c0", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec7d490", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec7f0c0", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph8, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec80f20", &fbargraph8, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph9, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec88f50", &fbargraph9, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph10, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec8ac60", &fbargraph10, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph11, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec8cc10", &fbargraph11, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph12, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec8e9c0", &fbargraph12, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph13, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec906d0", &fbargraph13, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph14, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec92450", &fbargraph14, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph15, "unit", "dB"); - interface->addVerticalBargraph("0x7f980ec94400", &fbargraph15, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("4"); - interface->openVerticalBox("16"); - interface->declare(&fbargraph16, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e93c860", &fbargraph16, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("17"); - interface->declare(&fbargraph17, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e93e5b0", &fbargraph17, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("18"); - interface->declare(&fbargraph18, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e940760", &fbargraph18, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("19"); - interface->declare(&fbargraph19, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e942720", &fbargraph19, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("20"); - interface->declare(&fbargraph20, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e9448f0", &fbargraph20, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("21"); - interface->declare(&fbargraph21, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e946690", &fbargraph21, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("22"); - interface->declare(&fbargraph22, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e9484f0", &fbargraph22, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("23"); - interface->declare(&fbargraph23, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e94a3c0", &fbargraph23, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("24"); - interface->declare(&fbargraph24, "unit", "dB"); - interface->addVerticalBargraph("0x7f980e94c430", &fbargraph24, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("HOAEncoder4"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider3, "0+3", ""); + ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); + ui_interface->declare(&fslider2, "0+4", ""); + ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6bd850", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6c2c70", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6c46e0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6c62f0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6cc1a0", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6cde50", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6cfce0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6d18c0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6d3670", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6db4c0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6dd160", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6df1a0", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6e1030", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6e2d00", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6e4a30", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6e6930", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6f0380", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6f2030", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6f40c0", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6f6060", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6f8230", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6f9f90", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacb6fbda0", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacdc01ba0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7ffacdc03bc0", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = double(fcheckbox0); @@ -933,134 +971,99 @@ class mydsp : public dsp { double fSlow4 = double(fslider0); double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fTemp0; - double fTemp1; double fSlow7 = double(fslider2); double fSlow8 = cos(fSlow7); double fSlow9 = double(fslider3); double fSlow10 = sin(fSlow9); double fSlow11 = (1.7320508075688772 * (fSlow8 * fSlow10)); double fSlow12 = (fConst3 / fSlow4); - double fSlow13 = (1 + fSlow12); + double fSlow13 = (fSlow12 + 1); double fSlow14 = (fConst2 / (fSlow4 * fSlow13)); double fSlow15 = (fConst3 / fSlow2); - double fSlow16 = (1.0 / (1 + fSlow15)); + double fSlow16 = (1.0 / (fSlow15 + 1)); double fSlow17 = ((fSlow3 * fSlow13) / fSlow4); double fSlow18 = (fConst2 / fSlow2); - double fTemp2; - double fTemp3; - double fTemp4; double fSlow19 = sin(fSlow7); double fSlow20 = (1.7320508075688772 * fSlow19); - double fTemp5; double fSlow21 = cos(fSlow9); double fSlow22 = (1.7320508075688772 * (fSlow8 * fSlow21)); - double fTemp6; double fSlow23 = faustpower<2>(fSlow8); double fSlow24 = (2 * fSlow9); double fSlow25 = sin(fSlow24); double fSlow26 = (1.9364916731037085 * (fSlow23 * fSlow25)); - double fSlow27 = faustpower<2>(fSlow12); - double fSlow28 = (1 + ((fConst4 / fSlow4) + (3 * fSlow27))); - double fSlow29 = (1.0 / fSlow28); - double fSlow30 = (12 * fSlow27); - double fSlow31 = (fSlow30 + (fConst5 / fSlow4)); - double fSlow32 = faustpower<2>(fSlow15); - double fSlow33 = (1.0 / (1 + ((fConst4 / fSlow2) + (3 * fSlow32)))); - double fSlow34 = ((fSlow3 * fSlow28) / fSlow4); - double fSlow35 = (12 * fSlow32); - double fSlow36 = (fSlow35 + (fConst5 / fSlow2)); - double fTemp7; - double fTemp8; - double fTemp9; + double fSlow27 = faustpower<2>(fSlow15); + double fSlow28 = (1.0 / (((fConst4 / fSlow2) + (3 * fSlow27)) + 1)); + double fSlow29 = faustpower<2>(fSlow12); + double fSlow30 = (((fConst4 / fSlow4) + (3 * fSlow29)) + 1); + double fSlow31 = ((fSlow3 * fSlow30) / fSlow4); + double fSlow32 = (12 * fSlow27); + double fSlow33 = (fSlow32 + (fConst5 / fSlow2)); + double fSlow34 = (1.0 / fSlow30); + double fSlow35 = (12 * fSlow29); + double fSlow36 = ((fConst5 / fSlow4) + fSlow35); double fSlow37 = sin((2 * fSlow7)); double fSlow38 = (1.9364916731037085 * (fSlow37 * fSlow10)); - double fTemp10; double fSlow39 = faustpower<2>(fSlow19); - double fSlow40 = (1.118033988749895 * ((3 * fSlow39) - 1)); - double fTemp11; + double fSlow40 = (1.118033988749895 * ((3 * fSlow39) + -1)); double fSlow41 = (1.9364916731037085 * (fSlow37 * fSlow21)); - double fTemp12; double fSlow42 = cos(fSlow24); double fSlow43 = (1.9364916731037085 * (fSlow23 * fSlow42)); - double fTemp13; double fSlow44 = faustpower<3>(fSlow8); double fSlow45 = (3 * fSlow9); double fSlow46 = sin(fSlow45); double fSlow47 = (2.091650066335189 * (fSlow44 * fSlow46)); - double fSlow48 = (1 + (fConst7 / fSlow4)); + double fSlow48 = ((fConst7 / fSlow4) + 1); double fSlow49 = (fConst6 / (fSlow4 * fSlow48)); - double fSlow50 = (1.0 / (1 + (fConst7 / fSlow2))); - double fSlow51 = (1.0 / (1 + ((fConst8 / fSlow2) + (6.45943269348338 * fSlow32)))); - double fSlow52 = (1 + ((fConst8 / fSlow4) + (6.45943269348338 * fSlow27))); + double fSlow50 = (1.0 / ((fConst7 / fSlow2) + 1)); + double fSlow51 = (1.0 / (((fConst8 / fSlow2) + (6.45943269348338 * fSlow27)) + 1)); + double fSlow52 = (((fConst8 / fSlow4) + (6.45943269348338 * fSlow29)) + 1); double fSlow53 = ((fSlow3 * fSlow52) / fSlow4); - double fSlow54 = (25.83773077393352 * fSlow32); + double fSlow54 = (25.83773077393352 * fSlow27); double fSlow55 = (fSlow54 + (fConst9 / fSlow2)); double fSlow56 = (1.0 / fSlow52); - double fSlow57 = (25.83773077393352 * fSlow27); - double fSlow58 = (fSlow57 + (fConst9 / fSlow4)); - double fTemp14; + double fSlow57 = (25.83773077393352 * fSlow29); + double fSlow58 = ((fConst9 / fSlow4) + fSlow57); double fSlow59 = (fConst6 / fSlow2); - double fTemp15; - double fTemp16; double fSlow60 = (fSlow23 * fSlow19); double fSlow61 = (5.123475382979799 * (fSlow60 * fSlow25)); - double fTemp17; double fSlow62 = (5 * fSlow39); - double fSlow63 = (fSlow8 * (fSlow62 - 1)); + double fSlow63 = ((fSlow62 + -1) * fSlow8); double fSlow64 = (1.620185174601965 * (fSlow63 * fSlow10)); - double fTemp18; - double fSlow65 = (1.3228756555322954 * (fSlow19 * (fSlow62 - 3))); - double fTemp19; + double fSlow65 = (1.3228756555322954 * ((fSlow62 + -3) * fSlow19)); double fSlow66 = (1.620185174601965 * (fSlow63 * fSlow21)); - double fTemp20; double fSlow67 = (5.123475382979799 * (fSlow60 * fSlow42)); - double fTemp21; double fSlow68 = cos(fSlow45); double fSlow69 = (2.091650066335189 * (fSlow44 * fSlow68)); - double fTemp22; double fSlow70 = faustpower<4>(fSlow8); double fSlow71 = (4 * fSlow9); double fSlow72 = (2.218529918662356 * (fSlow70 * sin(fSlow71))); - double fSlow73 = (1 + ((fConst10 / fSlow4) + (9.1401308902779 * fSlow27))); - double fSlow74 = (1.0 / fSlow73); - double fSlow75 = (36.5605235611116 * fSlow27); - double fSlow76 = ((fConst11 / fSlow4) + fSlow75); - double fSlow77 = (1.0 / (1 + ((9.1401308902779 * fSlow32) + (fConst10 / fSlow2)))); - double fSlow78 = (1.0 / (1 + ((fConst12 / fSlow2) + (11.4878004768713 * fSlow32)))); - double fSlow79 = (1 + ((fConst12 / fSlow4) + (11.4878004768713 * fSlow27))); - double fSlow80 = ((fSlow3 * fSlow79) / fSlow4); - double fSlow81 = (45.9512019074852 * fSlow32); - double fSlow82 = (fSlow81 + (fConst13 / fSlow2)); - double fSlow83 = (1.0 / fSlow79); - double fSlow84 = (45.9512019074852 * fSlow27); - double fSlow85 = (fSlow84 + (fConst13 / fSlow4)); - double fTemp23; - double fSlow86 = (36.5605235611116 * fSlow32); - double fSlow87 = (fSlow86 + (fConst11 / fSlow2)); - double fTemp24; - double fTemp25; - double fTemp26; + double fSlow73 = (1.0 / (((fConst10 / fSlow2) + (9.1401308902779 * fSlow27)) + 1)); + double fSlow74 = (((9.1401308902779 * fSlow29) + (fConst10 / fSlow4)) + 1); + double fSlow75 = (1.0 / (((fConst11 / fSlow2) + (11.4878004768713 * fSlow27)) + 1)); + double fSlow76 = (((fConst11 / fSlow4) + (11.4878004768713 * fSlow29)) + 1); + double fSlow77 = ((fSlow3 * fSlow76) / fSlow4); + double fSlow78 = (45.9512019074852 * fSlow27); + double fSlow79 = (fSlow78 + (fConst12 / fSlow2)); + double fSlow80 = (1.0 / fSlow76); + double fSlow81 = (45.9512019074852 * fSlow29); + double fSlow82 = ((fConst12 / fSlow4) + fSlow81); + double fSlow83 = (36.5605235611116 * fSlow27); + double fSlow84 = (fSlow83 + (fConst13 / fSlow2)); + double fSlow85 = (1.0 / fSlow74); + double fSlow86 = (36.5605235611116 * fSlow29); + double fSlow87 = ((fConst13 / fSlow4) + fSlow86); double fSlow88 = (fSlow44 * fSlow19); double fSlow89 = (6.274950199005566 * (fSlow88 * fSlow46)); - double fTemp27; double fSlow90 = (7 * fSlow39); - double fSlow91 = (fSlow23 * (fSlow90 - 1)); + double fSlow91 = ((fSlow90 + -1) * fSlow23); double fSlow92 = (1.6770509831248424 * (fSlow91 * fSlow25)); - double fTemp28; - double fSlow93 = (fSlow37 * (fSlow90 - 3)); + double fSlow93 = ((fSlow90 + -3) * fSlow37); double fSlow94 = (1.1858541225631423 * (fSlow93 * fSlow10)); - double fTemp29; - double fSlow95 = (0.375 * (3 + (fSlow39 * ((35 * fSlow39) - 30)))); - double fTemp30; + double fSlow95 = (0.375 * ((((35 * fSlow39) + -30) * fSlow39) + 3)); double fSlow96 = (1.1858541225631423 * (fSlow93 * fSlow21)); - double fTemp31; double fSlow97 = (1.6770509831248424 * (fSlow91 * fSlow42)); - double fTemp32; double fSlow98 = (6.274950199005566 * (fSlow88 * fSlow68)); - double fTemp33; double fSlow99 = (2.218529918662356 * (fSlow70 * cos(fSlow71))); - double fTemp34; FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* output0 = output[0]; FAUSTFLOAT* output1 = output[1]; @@ -1088,144 +1091,144 @@ class mydsp : public dsp { FAUSTFLOAT* output23 = output[23]; FAUSTFLOAT* output24 = output[24]; for (int i=0; igetNumInputs(); } }; // Global state @@ -1333,7 +1336,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1365,7 +1368,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -1388,9 +1391,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1416,9 +1419,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1430,7 +1433,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -1451,7 +1454,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -1461,68 +1464,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1536,6 +1562,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1547,18 +1577,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1569,10 +1601,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAEncoder5.cpp b/source/HOAUGens/HOAEncoder5.cpp index 952b6ce16c..6681628db2 100644 --- a/source/HOAUGens/HOAEncoder5.cpp +++ b/source/HOAUGens/HOAEncoder5.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2014" // -// Code generated with Faust 0.9.73-mr2 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -13,12 +13,14 @@ #ifndef FAUSTPOWER #define FAUSTPOWER #include -template inline float faustpower(float x) { return powf(x,N); } -template inline double faustpower(double x) { return pow(x,N); } template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } template <> inline int faustpower<0>(int x) { return 1; } template <> inline int faustpower<1>(int x) { return x; } template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } #endif // If other than 'faust2sc --prefix Faust' is used, sed this as well: #if !defined(SC_FAUST_PREFIX) @@ -51,46 +53,27 @@ template <> inline int faustpower<2>(int x) { return x*x; } #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -100,35 +83,102 @@ template <> inline int faustpower<2>(int x) { return x*x; } #endif class UI; +struct Meta; -//---------------------------------------------------------------- -// Signal processor definition -//---------------------------------------------------------------- +/** +* Signal processor definition. +*/ class dsp { - protected: - - int fSamplingFreq; - public: dsp() {} virtual ~dsp() {} + /* Return instance number of audio inputs */ virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- +/** + * Generic DSP decorator. + */ class decorator_dsp : public dsp { @@ -144,17 +194,24 @@ class decorator_dsp : public dsp { virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } virtual void init(int samplingRate) { fDSP->init(samplingRate); } virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } }; -//---------------------------------------------------------------- -// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) -// flags to avoid costly denormals -//---------------------------------------------------------------- +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ #ifdef __SSE__ #include @@ -169,31 +226,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -202,9 +256,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -241,69 +296,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -315,26 +329,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -360,23 +376,24 @@ struct MY_Meta : Meta, std::map }; inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r=0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup #else -# define FAUST_EXPORT /* NOP */ + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -559,7 +582,7 @@ class ControlAllocator : public UI class mydsp : public dsp { private: - int iConst0; + double fConst0; double fConst1; FAUSTFLOAT fcheckbox0; FAUSTFLOAT fentry0; @@ -582,13 +605,13 @@ class mydsp : public dsp { double fRec7[2]; FAUSTFLOAT fbargraph3; double fConst4; - double fConst5; - double fRec12[2]; - double fRec13[2]; double fRec11[2]; double fRec10[2]; - double fVec0[2]; + double fConst5; double fRec9[2]; + double fRec13[2]; + double fVec0[2]; + double fRec12[2]; double fRec8[2]; FAUSTFLOAT fbargraph4; double fRec14[2]; @@ -602,13 +625,13 @@ class mydsp : public dsp { double fConst6; double fConst7; double fConst8; - double fConst9; double fRec23[2]; - double fRec24[2]; double fRec22[2]; + double fConst9; double fRec21[2]; - double fVec1[2]; double fRec25[2]; + double fVec1[2]; + double fRec24[2]; double fRec26[2]; double fRec20[2]; double fRec19[2]; @@ -628,20 +651,20 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph15; double fConst10; double fConst11; + double fRec37[2]; + double fRec36[2]; double fConst12; - double fRec38[2]; + double fRec35[2]; double fRec39[2]; - double fRec37[2]; - double fRec40[2]; double fVec2[2]; + double fRec38[2]; double fRec41[2]; + double fRec40[2]; double fConst13; - double fRec42[2]; + double fRec34[2]; double fRec43[2]; - double fRec36[2]; - double fRec35[2]; double fVec3[2]; - double fRec34[2]; + double fRec42[2]; double fRec33[2]; FAUSTFLOAT fbargraph16; double fRec44[2]; @@ -664,20 +687,20 @@ class mydsp : public dsp { double fConst15; double fConst16; double fConst17; - double fConst18; - double fRec57[2]; double fRec58[2]; + double fRec57[2]; + double fConst18; double fRec56[2]; - double fRec59[2]; - double fVec4[2]; double fRec60[2]; - double fConst19; - double fRec61[2]; + double fVec4[2]; + double fRec59[2]; double fRec62[2]; + double fRec61[2]; + double fConst19; double fRec55[2]; - double fRec63[2]; - double fVec5[2]; double fRec64[2]; + double fVec5[2]; + double fRec63[2]; double fRec65[2]; double fRec54[2]; double fRec53[2]; @@ -703,22 +726,10 @@ class mydsp : public dsp { FAUSTFLOAT fbargraph34; double fRec75[2]; FAUSTFLOAT fbargraph35; + int fSamplingFreq; + public: - static void metadata(Meta* m) { - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("math.lib/name", "Math Library"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/version", "1.0"); - m->declare("math.lib/license", "LGPL with exception"); + virtual void metadata(Meta* m) { m->declare("name", "HOAEncoder5"); m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); @@ -734,57 +745,83 @@ class mydsp : public dsp { m->declare("lib/ymn.lib/author", "Pierre Lecomte"); m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 36; } - virtual int getInputRate (int i) {int rate[]={1}; return rate[i]; } - virtual int getOutputRate(int i) {int rate[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; return rate[i]; } + virtual int getNumInputs() { return 1; } + virtual int getNumOutputs() { return 36; } static void classInit(int samplingFreq) { } - virtual void instanceInit(int samplingFreq) { + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - iConst0 = min(192000, max(1, fSamplingFreq)); - fConst1 = (8e+01 / double(iConst0)); + fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst1 = (8e+01 / fConst0); + fConst2 = (3.4e+02 / fConst0); + fConst3 = (1.7e+02 / fConst0); + fConst4 = (5.1e+02 / fConst0); + fConst5 = (1.02e+03 / fConst0); + fConst6 = (789.5430205728705 / fConst0); + fConst7 = (394.7715102864353 / fConst0); + fConst8 = (625.2284897135664 / fConst0); + fConst9 = (1250.4569794271329 / fConst0); + fConst10 = (984.7116049589241 / fConst0); + fConst11 = (715.2883950410759 / fConst0); + fConst12 = (1430.5767900821518 / fConst0); + fConst13 = (1969.4232099178482 / fConst0); + fConst14 = (1239.8911224120607 / fConst0); + fConst15 = (619.9455612060303 / fConst0); + fConst16 = (1139.6651757122002 / fConst0); + fConst17 = (790.3892630817644 / fConst0); + fConst18 = (1580.7785261635288 / fConst0); + fConst19 = (2279.3303514244003 / fConst0); + } + virtual void instanceResetUserInterface() { fcheckbox0 = 0.0; fentry0 = 1.07; fslider0 = 2.0; fslider1 = 0.0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; fslider2 = 0.0; fslider3 = 0.0; - fConst2 = (3.4e+02 / double(iConst0)); - fConst3 = (1.7e+02 / double(iConst0)); + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<2; i++) fRec3[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; for (int i=0; i<2; i++) fRec7[i] = 0; - fConst4 = (5.1e+02 / double(iConst0)); - fConst5 = (1.02e+03 / double(iConst0)); - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec15[i] = 0; for (int i=0; i<2; i++) fRec16[i] = 0; for (int i=0; i<2; i++) fRec17[i] = 0; - fConst6 = (789.5430205728705 / double(iConst0)); - fConst7 = (394.7715102864353 / double(iConst0)); - fConst8 = (625.2284897135664 / double(iConst0)); - fConst9 = (1250.4569794271329 / double(iConst0)); for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; for (int i=0; i<2; i++) fRec20[i] = 0; for (int i=0; i<2; i++) fRec19[i] = 0; @@ -795,22 +832,18 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec30[i] = 0; for (int i=0; i<2; i++) fRec31[i] = 0; for (int i=0; i<2; i++) fRec32[i] = 0; - fConst10 = (984.7116049589241 / double(iConst0)); - fConst11 = (715.2883950410759 / double(iConst0)); - fConst12 = (1430.5767900821518 / double(iConst0)); - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; for (int i=0; i<2; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; for (int i=0; i<2; i++) fRec41[i] = 0; - fConst13 = (1969.4232099178482 / double(iConst0)); - for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; for (int i=0; i<2; i++) fRec33[i] = 0; for (int i=0; i<2; i++) fRec44[i] = 0; for (int i=0; i<2; i++) fRec45[i] = 0; @@ -820,24 +853,18 @@ class mydsp : public dsp { for (int i=0; i<2; i++) fRec49[i] = 0; for (int i=0; i<2; i++) fRec50[i] = 0; for (int i=0; i<2; i++) fRec51[i] = 0; - fConst14 = (1239.8911224120607 / double(iConst0)); - fConst15 = (619.9455612060303 / double(iConst0)); - fConst16 = (1139.6651757122002 / double(iConst0)); - fConst17 = (790.3892630817644 / double(iConst0)); - fConst18 = (1580.7785261635288 / double(iConst0)); - for (int i=0; i<2; i++) fRec57[i] = 0; for (int i=0; i<2; i++) fRec58[i] = 0; + for (int i=0; i<2; i++) fRec57[i] = 0; for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fVec4[i] = 0; for (int i=0; i<2; i++) fRec60[i] = 0; - fConst19 = (2279.3303514244003 / double(iConst0)); - for (int i=0; i<2; i++) fRec61[i] = 0; + for (int i=0; i<2; i++) fVec4[i] = 0; + for (int i=0; i<2; i++) fRec59[i] = 0; for (int i=0; i<2; i++) fRec62[i] = 0; + for (int i=0; i<2; i++) fRec61[i] = 0; for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fVec5[i] = 0; for (int i=0; i<2; i++) fRec64[i] = 0; + for (int i=0; i<2; i++) fVec5[i] = 0; + for (int i=0; i<2; i++) fRec63[i] = 0; for (int i=0; i<2; i++) fRec65[i] = 0; for (int i=0; i<2; i++) fRec54[i] = 0; for (int i=0; i<2; i++) fRec53[i] = 0; @@ -857,392 +884,355 @@ class mydsp : public dsp { classInit(samplingFreq); instanceInit(samplingFreq); } - virtual void buildUserInterface(UI* interface) { - interface->openHorizontalBox("0x00"); - interface->openVerticalBox("Parameters"); - interface->openHorizontalBox("Source 0"); - interface->declare(&fslider1, "0+1", ""); - interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - interface->declare(&fslider1, "style", "knob"); - interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - interface->declare(&fslider0, "0+2", ""); - interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - interface->declare(&fslider0, "style", "knob"); - interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - interface->declare(&fslider3, "0+3", ""); - interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - interface->declare(&fslider3, "style", "knob"); - interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(&fslider2, "0+4", ""); - interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - interface->declare(&fslider2, "style", "knob"); - interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - interface->declare(0, "0+5", ""); - interface->openHorizontalBox("Spherical Wave"); - interface->addCheckButton("Yes", &fcheckbox0); - interface->closeBox(); - interface->declare(&fentry0, "~", ""); - interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); - interface->closeBox(); - interface->closeBox(); - interface->declare(0, "~", ""); - interface->openVerticalBox("Outputs"); - interface->openHorizontalBox("0"); - interface->openVerticalBox("0"); - interface->declare(&fbargraph0, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af50d40", &fbargraph0, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("1"); - interface->openVerticalBox("1"); - interface->declare(&fbargraph1, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af563c0", &fbargraph1, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("2"); - interface->declare(&fbargraph2, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af57e00", &fbargraph2, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("3"); - interface->declare(&fbargraph3, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af59b50", &fbargraph3, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("2"); - interface->openVerticalBox("4"); - interface->declare(&fbargraph4, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af5fd70", &fbargraph4, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("5"); - interface->declare(&fbargraph5, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af61a60", &fbargraph5, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("6"); - interface->declare(&fbargraph6, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af62f50", &fbargraph6, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("7"); - interface->declare(&fbargraph7, "unit", "dB"); - interface->addVerticalBargraph("0x7fc119601550", &fbargraph7, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("8"); - interface->declare(&fbargraph8, "unit", "dB"); - interface->addVerticalBargraph("0x7fc119602db0", &fbargraph8, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("3"); - interface->openVerticalBox("9"); - interface->declare(&fbargraph9, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af67b20", &fbargraph9, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("10"); - interface->declare(&fbargraph10, "unit", "dB"); - interface->addVerticalBargraph("0x7fc119608860", &fbargraph10, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("11"); - interface->declare(&fbargraph11, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af6a2c0", &fbargraph11, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("12"); - interface->declare(&fbargraph12, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11ab85d90", &fbargraph12, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("13"); - interface->declare(&fbargraph13, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af6caa0", &fbargraph13, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("14"); - interface->declare(&fbargraph14, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11ae007d0", &fbargraph14, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("15"); - interface->declare(&fbargraph15, "unit", "dB"); - interface->addVerticalBargraph("0x7fc1196099a0", &fbargraph15, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("4"); - interface->openVerticalBox("16"); - interface->declare(&fbargraph16, "unit", "dB"); - interface->addVerticalBargraph("0x7fc1195a6d10", &fbargraph16, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("17"); - interface->declare(&fbargraph17, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af72b50", &fbargraph17, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("18"); - interface->declare(&fbargraph18, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af743b0", &fbargraph18, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("19"); - interface->declare(&fbargraph19, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af76280", &fbargraph19, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("20"); - interface->declare(&fbargraph20, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af78490", &fbargraph20, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("21"); - interface->declare(&fbargraph21, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af7a230", &fbargraph21, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("22"); - interface->declare(&fbargraph22, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af7c090", &fbargraph22, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("23"); - interface->declare(&fbargraph23, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af7df60", &fbargraph23, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("24"); - interface->declare(&fbargraph24, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af80070", &fbargraph24, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->openHorizontalBox("5"); - interface->openVerticalBox("25"); - interface->declare(&fbargraph25, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af89290", &fbargraph25, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("26"); - interface->declare(&fbargraph26, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af8b060", &fbargraph26, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("27"); - interface->declare(&fbargraph27, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af8cf70", &fbargraph27, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("28"); - interface->declare(&fbargraph28, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af8ed40", &fbargraph28, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("29"); - interface->declare(&fbargraph29, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af91150", &fbargraph29, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("30"); - interface->declare(&fbargraph30, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af93620", &fbargraph30, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("31"); - interface->declare(&fbargraph31, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af95440", &fbargraph31, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("32"); - interface->declare(&fbargraph32, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af97380", &fbargraph32, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("33"); - interface->declare(&fbargraph33, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af99330", &fbargraph33, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("34"); - interface->declare(&fbargraph34, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af9b350", &fbargraph34, -7e+01, 6.0); - interface->closeBox(); - interface->openVerticalBox("35"); - interface->declare(&fbargraph35, "unit", "dB"); - interface->addVerticalBargraph("0x7fc11af9d4d0", &fbargraph35, -7e+01, 6.0); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); - interface->closeBox(); + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("HOAEncoder5"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fslider1, "0+1", ""); + ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); + ui_interface->declare(&fslider0, "0+2", ""); + ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); + ui_interface->declare(&fslider3, "0+3", ""); + ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); + ui_interface->declare(&fslider2, "0+4", ""); + ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fentry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d906a360", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d906f810", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d9071280", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d9072f20", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d9078e60", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d907aba0", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d907cb10", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d907e720", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d9080570", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d9088470", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d908a1f0", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d908c160", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d908dfa0", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d908fc70", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d9091a80", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90939f0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d909d4b0", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d909f160", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90a1140", &fbargraph18, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90a2fe0", &fbargraph19, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90a51b0", &fbargraph20, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90a6f10", &fbargraph21, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90a8d20", &fbargraph22, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90aaba0", &fbargraph23, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90acc00", &fbargraph24, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90b8890", &fbargraph25, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90ba5f0", &fbargraph26, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90bc4f0", &fbargraph27, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90be2a0", &fbargraph28, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90c05d0", &fbargraph29, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90c2a90", &fbargraph30, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90c48b0", &fbargraph31, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90c67a0", &fbargraph32, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90c8700", &fbargraph33, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90ca6d0", &fbargraph34, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fe6d90cc840", &fbargraph35, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { double fSlow0 = double(fcheckbox0); - double fSlow1 = double(fentry0); - double fSlow2 = double(fslider0); - double fSlow3 = (1 - fSlow0); - double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); - double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fTemp0; - double fTemp1; - double fSlow6 = double(fslider2); - double fSlow7 = cos(fSlow6); - double fSlow8 = double(fslider3); - double fSlow9 = sin(fSlow8); - double fSlow10 = (fSlow7 * fSlow9); - double fSlow11 = (1.7320508075688772 * fSlow10); - double fTemp2; - double fSlow12 = (fConst3 / fSlow2); - double fSlow13 = (1 + fSlow12); - double fSlow14 = (fConst2 / (fSlow13 * fSlow2)); - double fSlow15 = (fConst3 / fSlow1); - double fSlow16 = (1.0 / (1 + fSlow15)); - double fSlow17 = (((fSlow13 * fSlow0) * fSlow1) / fSlow2); - double fSlow18 = (fConst2 / fSlow1); - double fTemp3; - double fTemp4; - double fSlow19 = sin(fSlow6); - double fSlow20 = (1.7320508075688772 * fSlow19); - double fTemp5; - double fSlow21 = cos(fSlow8); - double fSlow22 = (fSlow7 * fSlow21); - double fSlow23 = (1.7320508075688772 * fSlow22); - double fTemp6; - double fSlow24 = faustpower<2>(fSlow7); - double fSlow25 = (2 * fSlow8); - double fSlow26 = sin(fSlow25); - double fSlow27 = (fSlow24 * fSlow26); - double fSlow28 = (1.9364916731037085 * fSlow27); - double fSlow29 = faustpower<2>(fSlow12); - double fSlow30 = (1 + ((fConst4 / fSlow2) + (3 * fSlow29))); - double fSlow31 = (1.0 / fSlow30); - double fSlow32 = (12 * fSlow29); - double fSlow33 = faustpower<2>(fSlow15); - double fSlow34 = (1.0 / (1 + ((fConst4 / fSlow1) + (3 * fSlow33)))); - double fSlow35 = (((fSlow30 * fSlow0) * fSlow1) / fSlow2); - double fSlow36 = (12 * fSlow33); - double fSlow37 = (fSlow36 + (fConst5 / fSlow1)); - double fTemp7; - double fSlow38 = ((fConst5 / fSlow2) + fSlow32); - double fTemp8; - double fTemp9; - double fSlow39 = sin((2 * fSlow6)); - double fSlow40 = (fSlow9 * fSlow39); - double fSlow41 = (1.9364916731037085 * fSlow40); - double fTemp10; - double fSlow42 = faustpower<2>(fSlow19); - double fSlow43 = ((3 * fSlow42) - 1); - double fSlow44 = (1.118033988749895 * fSlow43); - double fTemp11; - double fSlow45 = (fSlow21 * fSlow39); - double fSlow46 = (1.9364916731037085 * fSlow45); - double fTemp12; - double fSlow47 = cos(fSlow25); - double fSlow48 = (fSlow24 * fSlow47); - double fSlow49 = (1.9364916731037085 * fSlow48); - double fTemp13; - double fSlow50 = faustpower<3>(fSlow7); - double fSlow51 = (3 * fSlow8); - double fSlow52 = sin(fSlow51); - double fSlow53 = (fSlow50 * fSlow52); - double fSlow54 = (2.091650066335189 * fSlow53); - double fSlow55 = (1 + (fConst7 / fSlow2)); - double fSlow56 = (fConst6 / (fSlow55 * fSlow2)); - double fSlow57 = (1.0 / (1 + (fConst7 / fSlow1))); - double fSlow58 = (1 + ((fConst8 / fSlow2) + (6.45943269348338 * fSlow29))); - double fSlow59 = (1.0 / fSlow58); - double fSlow60 = (25.83773077393352 * fSlow29); - double fSlow61 = ((fConst9 / fSlow2) + fSlow60); - double fSlow62 = (1.0 / (1 + ((fConst8 / fSlow1) + (6.45943269348338 * fSlow33)))); - double fSlow63 = (((fSlow58 * fSlow0) * fSlow1) / fSlow2); - double fSlow64 = (25.83773077393352 * fSlow33); - double fSlow65 = (fSlow64 + (fConst9 / fSlow1)); - double fTemp14; - double fSlow66 = (fConst6 / fSlow1); - double fTemp15; - double fTemp16; - double fSlow67 = (fSlow24 * fSlow19); - double fSlow68 = (fSlow67 * fSlow26); - double fSlow69 = (5.123475382979799 * fSlow68); - double fTemp17; - double fSlow70 = (5 * fSlow42); - double fSlow71 = (fSlow70 - 1); - double fSlow72 = (1.620185174601965 * (fSlow10 * fSlow71)); - double fTemp18; - double fSlow73 = (1.3228756555322954 * (fSlow19 * (fSlow70 - 3))); - double fTemp19; - double fSlow74 = (1.620185174601965 * (fSlow22 * fSlow71)); - double fTemp20; - double fSlow75 = (fSlow67 * fSlow47); - double fSlow76 = (5.123475382979799 * fSlow75); - double fTemp21; - double fSlow77 = cos(fSlow51); - double fSlow78 = (fSlow50 * fSlow77); - double fSlow79 = (2.091650066335189 * fSlow78); - double fTemp22; - double fSlow80 = faustpower<4>(fSlow7); - double fSlow81 = (4 * fSlow8); - double fSlow82 = sin(fSlow81); - double fSlow83 = (2.218529918662356 * (fSlow80 * fSlow82)); - double fSlow84 = (1 + ((fConst10 / fSlow2) + (9.1401308902779 * fSlow29))); - double fSlow85 = (1.0 / fSlow84); - double fSlow86 = (36.5605235611116 * fSlow29); - double fSlow87 = (1.0 / (1 + ((9.1401308902779 * fSlow33) + (fConst10 / fSlow1)))); - double fSlow88 = (1.0 / (1 + ((fConst11 / fSlow1) + (11.4878004768713 * fSlow33)))); - double fSlow89 = (1 + ((fConst11 / fSlow2) + (11.4878004768713 * fSlow29))); - double fSlow90 = (((fSlow89 * fSlow0) * fSlow1) / fSlow2); - double fSlow91 = (45.9512019074852 * fSlow33); - double fSlow92 = (fSlow91 + (fConst12 / fSlow1)); - double fSlow93 = (1.0 / fSlow89); - double fSlow94 = (45.9512019074852 * fSlow29); - double fSlow95 = (fSlow94 + (fConst12 / fSlow2)); - double fTemp23; - double fSlow96 = (36.5605235611116 * fSlow33); - double fSlow97 = (fSlow96 + (fConst13 / fSlow1)); - double fTemp24; - double fSlow98 = ((fConst13 / fSlow2) + fSlow86); - double fTemp25; - double fTemp26; - double fSlow99 = (fSlow50 * fSlow19); - double fSlow100 = (6.274950199005566 * (fSlow99 * fSlow52)); - double fTemp27; - double fSlow101 = (7 * fSlow42); - double fSlow102 = (fSlow101 - 1); - double fSlow103 = (1.6770509831248424 * (fSlow27 * fSlow102)); - double fTemp28; - double fSlow104 = (fSlow101 - 3); - double fSlow105 = (1.1858541225631423 * (fSlow40 * fSlow104)); - double fTemp29; - double fSlow106 = (0.375 * (3 + (fSlow42 * ((35 * fSlow42) - 30)))); - double fTemp30; - double fSlow107 = (1.1858541225631423 * (fSlow45 * fSlow104)); - double fTemp31; - double fSlow108 = (1.6770509831248424 * (fSlow48 * fSlow102)); - double fTemp32; - double fSlow109 = (6.274950199005566 * (fSlow99 * fSlow77)); - double fTemp33; - double fSlow110 = cos(fSlow81); - double fSlow111 = (2.218529918662356 * (fSlow80 * fSlow110)); - double fTemp34; - double fSlow112 = faustpower<5>(fSlow7); - double fSlow113 = (5 * fSlow8); - double fSlow114 = (2.3268138086232857 * (fSlow112 * sin(fSlow113))); - double fSlow115 = (1 + (fConst15 / fSlow2)); - double fSlow116 = (fConst14 / (fSlow115 * fSlow2)); - double fSlow117 = (1.0 / (1 + (fConst15 / fSlow1))); - double fSlow118 = (1.0 / (1 + ((14.2724805132801 * fSlow33) + (fConst16 / fSlow1)))); - double fSlow119 = (1 + ((fConst16 / fSlow2) + (14.2724805132801 * fSlow29))); - double fSlow120 = (1.0 / (1 + ((fConst17 / fSlow1) + (18.1563153134523 * fSlow33)))); - double fSlow121 = (1 + ((fConst17 / fSlow2) + (18.1563153134523 * fSlow29))); - double fSlow122 = (((fSlow121 * fSlow0) * fSlow1) / fSlow2); - double fSlow123 = (72.6252612538092 * fSlow33); - double fSlow124 = (fSlow123 + (fConst18 / fSlow1)); - double fSlow125 = (1.0 / fSlow121); - double fSlow126 = (72.6252612538092 * fSlow29); - double fSlow127 = (fSlow126 + (fConst18 / fSlow2)); - double fTemp35; - double fSlow128 = (57.0899220531204 * fSlow33); - double fSlow129 = (fSlow128 + (fConst19 / fSlow1)); - double fSlow130 = (1.0 / fSlow119); - double fSlow131 = (57.0899220531204 * fSlow29); - double fSlow132 = ((fConst19 / fSlow2) + fSlow131); - double fTemp36; - double fSlow133 = (fConst14 / fSlow1); - double fTemp37; - double fTemp38; - double fSlow134 = (fSlow80 * fSlow19); - double fSlow135 = (7.358031326380718 * (fSlow134 * fSlow82)); - double fTemp39; - double fSlow136 = ((9 * fSlow42) - 1); - double fSlow137 = (1.734304615688951 * (fSlow53 * fSlow136)); - double fTemp40; - double fSlow138 = (8.496322733983215 * (fSlow68 * fSlow43)); - double fTemp41; - double fSlow139 = (1 + (fSlow42 * ((21 * fSlow42) - 14))); - double fSlow140 = (1.6056540723331412 * (fSlow10 * fSlow139)); - double fTemp42; - double fSlow141 = (0.414578098794425 * (fSlow19 * (15 + (fSlow42 * ((63 * fSlow42) - 70))))); - double fTemp43; - double fSlow142 = (1.6056540723331412 * (fSlow22 * fSlow139)); - double fTemp44; - double fSlow143 = (8.496322733983215 * (fSlow75 * fSlow43)); - double fTemp45; - double fSlow144 = (1.734304615688951 * (fSlow78 * fSlow136)); - double fTemp46; - double fSlow145 = (7.358031326380718 * (fSlow134 * fSlow110)); - double fTemp47; - double fSlow146 = (2.3268138086232857 * (fSlow112 * cos(fSlow113))); - double fTemp48; + double fSlow1 = (1 - fSlow0); + double fSlow2 = double(fentry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + double fSlow7 = double(fslider2); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fslider3); + double fSlow10 = sin(fSlow9); + double fSlow11 = (fSlow8 * fSlow10); + double fSlow12 = (1.7320508075688772 * fSlow11); + double fSlow13 = (fConst3 / fSlow4); + double fSlow14 = (fSlow13 + 1); + double fSlow15 = (fConst2 / (fSlow4 * fSlow14)); + double fSlow16 = (fConst3 / fSlow2); + double fSlow17 = (1.0 / (fSlow16 + 1)); + double fSlow18 = ((fSlow3 * fSlow14) / fSlow4); + double fSlow19 = (fConst2 / fSlow2); + double fSlow20 = sin(fSlow7); + double fSlow21 = (1.7320508075688772 * fSlow20); + double fSlow22 = cos(fSlow9); + double fSlow23 = (fSlow8 * fSlow22); + double fSlow24 = (1.7320508075688772 * fSlow23); + double fSlow25 = faustpower<2>(fSlow8); + double fSlow26 = (2 * fSlow9); + double fSlow27 = sin(fSlow26); + double fSlow28 = (fSlow25 * fSlow27); + double fSlow29 = (1.9364916731037085 * fSlow28); + double fSlow30 = faustpower<2>(fSlow16); + double fSlow31 = (1.0 / (((fConst4 / fSlow2) + (3 * fSlow30)) + 1)); + double fSlow32 = faustpower<2>(fSlow13); + double fSlow33 = (((fConst4 / fSlow4) + (3 * fSlow32)) + 1); + double fSlow34 = ((fSlow3 * fSlow33) / fSlow4); + double fSlow35 = (12 * fSlow30); + double fSlow36 = (fSlow35 + (fConst5 / fSlow2)); + double fSlow37 = (1.0 / fSlow33); + double fSlow38 = (12 * fSlow32); + double fSlow39 = ((fConst5 / fSlow4) + fSlow38); + double fSlow40 = sin((2 * fSlow7)); + double fSlow41 = (fSlow40 * fSlow10); + double fSlow42 = (1.9364916731037085 * fSlow41); + double fSlow43 = faustpower<2>(fSlow20); + double fSlow44 = ((3 * fSlow43) + -1); + double fSlow45 = (1.118033988749895 * fSlow44); + double fSlow46 = (fSlow40 * fSlow22); + double fSlow47 = (1.9364916731037085 * fSlow46); + double fSlow48 = cos(fSlow26); + double fSlow49 = (fSlow25 * fSlow48); + double fSlow50 = (1.9364916731037085 * fSlow49); + double fSlow51 = faustpower<3>(fSlow8); + double fSlow52 = (3 * fSlow9); + double fSlow53 = sin(fSlow52); + double fSlow54 = (fSlow51 * fSlow53); + double fSlow55 = (2.091650066335189 * fSlow54); + double fSlow56 = ((fConst7 / fSlow4) + 1); + double fSlow57 = (fConst6 / (fSlow4 * fSlow56)); + double fSlow58 = (1.0 / ((fConst7 / fSlow2) + 1)); + double fSlow59 = (1.0 / (((fConst8 / fSlow2) + (6.45943269348338 * fSlow30)) + 1)); + double fSlow60 = (((fConst8 / fSlow4) + (6.45943269348338 * fSlow32)) + 1); + double fSlow61 = ((fSlow3 * fSlow60) / fSlow4); + double fSlow62 = (25.83773077393352 * fSlow30); + double fSlow63 = (fSlow62 + (fConst9 / fSlow2)); + double fSlow64 = (1.0 / fSlow60); + double fSlow65 = (25.83773077393352 * fSlow32); + double fSlow66 = ((fConst9 / fSlow4) + fSlow65); + double fSlow67 = (fConst6 / fSlow2); + double fSlow68 = (fSlow25 * fSlow20); + double fSlow69 = (fSlow68 * fSlow27); + double fSlow70 = (5.123475382979799 * fSlow69); + double fSlow71 = (5 * fSlow43); + double fSlow72 = (fSlow71 + -1); + double fSlow73 = (1.620185174601965 * (fSlow11 * fSlow72)); + double fSlow74 = (1.3228756555322954 * (fSlow20 * (fSlow71 + -3))); + double fSlow75 = (1.620185174601965 * (fSlow23 * fSlow72)); + double fSlow76 = (fSlow68 * fSlow48); + double fSlow77 = (5.123475382979799 * fSlow76); + double fSlow78 = cos(fSlow52); + double fSlow79 = (fSlow51 * fSlow78); + double fSlow80 = (2.091650066335189 * fSlow79); + double fSlow81 = faustpower<4>(fSlow8); + double fSlow82 = (4 * fSlow9); + double fSlow83 = sin(fSlow82); + double fSlow84 = (2.218529918662356 * (fSlow81 * fSlow83)); + double fSlow85 = (1.0 / (((fConst10 / fSlow2) + (9.1401308902779 * fSlow30)) + 1)); + double fSlow86 = (((9.1401308902779 * fSlow32) + (fConst10 / fSlow4)) + 1); + double fSlow87 = (1.0 / (((fConst11 / fSlow2) + (11.4878004768713 * fSlow30)) + 1)); + double fSlow88 = (((fConst11 / fSlow4) + (11.4878004768713 * fSlow32)) + 1); + double fSlow89 = ((fSlow3 * fSlow88) / fSlow4); + double fSlow90 = (45.9512019074852 * fSlow30); + double fSlow91 = (fSlow90 + (fConst12 / fSlow2)); + double fSlow92 = (1.0 / fSlow88); + double fSlow93 = (45.9512019074852 * fSlow32); + double fSlow94 = ((fConst12 / fSlow4) + fSlow93); + double fSlow95 = (36.5605235611116 * fSlow30); + double fSlow96 = (fSlow95 + (fConst13 / fSlow2)); + double fSlow97 = (1.0 / fSlow86); + double fSlow98 = (36.5605235611116 * fSlow32); + double fSlow99 = ((fConst13 / fSlow4) + fSlow98); + double fSlow100 = (fSlow51 * fSlow20); + double fSlow101 = (6.274950199005566 * (fSlow100 * fSlow53)); + double fSlow102 = (7 * fSlow43); + double fSlow103 = (fSlow102 + -1); + double fSlow104 = (1.6770509831248424 * (fSlow28 * fSlow103)); + double fSlow105 = (fSlow102 + -3); + double fSlow106 = (1.1858541225631423 * (fSlow41 * fSlow105)); + double fSlow107 = (0.375 * ((fSlow43 * ((35 * fSlow43) + -30)) + 3)); + double fSlow108 = (1.1858541225631423 * (fSlow46 * fSlow105)); + double fSlow109 = (1.6770509831248424 * (fSlow49 * fSlow103)); + double fSlow110 = (6.274950199005566 * (fSlow100 * fSlow78)); + double fSlow111 = cos(fSlow82); + double fSlow112 = (2.218529918662356 * (fSlow81 * fSlow111)); + double fSlow113 = faustpower<5>(fSlow8); + double fSlow114 = (5 * fSlow9); + double fSlow115 = (2.3268138086232857 * (fSlow113 * sin(fSlow114))); + double fSlow116 = ((fConst15 / fSlow4) + 1); + double fSlow117 = (fConst14 / (fSlow4 * fSlow116)); + double fSlow118 = (1.0 / ((fConst15 / fSlow2) + 1)); + double fSlow119 = (1.0 / (((fConst16 / fSlow2) + (14.2724805132801 * fSlow30)) + 1)); + double fSlow120 = (((14.2724805132801 * fSlow32) + (fConst16 / fSlow4)) + 1); + double fSlow121 = (1.0 / (((fConst17 / fSlow2) + (18.1563153134523 * fSlow30)) + 1)); + double fSlow122 = (((fConst17 / fSlow4) + (18.1563153134523 * fSlow32)) + 1); + double fSlow123 = ((fSlow3 * fSlow122) / fSlow4); + double fSlow124 = (72.6252612538092 * fSlow30); + double fSlow125 = (fSlow124 + (fConst18 / fSlow2)); + double fSlow126 = (1.0 / fSlow122); + double fSlow127 = (72.6252612538092 * fSlow32); + double fSlow128 = ((fConst18 / fSlow4) + fSlow127); + double fSlow129 = (57.0899220531204 * fSlow30); + double fSlow130 = (fSlow129 + (fConst19 / fSlow2)); + double fSlow131 = (1.0 / fSlow120); + double fSlow132 = (57.0899220531204 * fSlow32); + double fSlow133 = ((fConst19 / fSlow4) + fSlow132); + double fSlow134 = (fConst14 / fSlow2); + double fSlow135 = (fSlow81 * fSlow20); + double fSlow136 = (7.358031326380718 * (fSlow135 * fSlow83)); + double fSlow137 = ((9 * fSlow43) + -1); + double fSlow138 = (1.734304615688951 * (fSlow54 * fSlow137)); + double fSlow139 = (8.496322733983215 * (fSlow69 * fSlow44)); + double fSlow140 = ((fSlow43 * ((21 * fSlow43) + -14)) + 1); + double fSlow141 = (1.6056540723331412 * (fSlow11 * fSlow140)); + double fSlow142 = (0.414578098794425 * (fSlow20 * ((fSlow43 * ((63 * fSlow43) + -70)) + 15))); + double fSlow143 = (1.6056540723331412 * (fSlow23 * fSlow140)); + double fSlow144 = (8.496322733983215 * (fSlow76 * fSlow44)); + double fSlow145 = (1.734304615688951 * (fSlow79 * fSlow137)); + double fSlow146 = (7.358031326380718 * (fSlow135 * fSlow111)); + double fSlow147 = (2.3268138086232857 * (fSlow113 * cos(fSlow114))); FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* output0 = output[0]; FAUSTFLOAT* output1 = output[1]; @@ -1281,206 +1271,206 @@ class mydsp : public dsp { FAUSTFLOAT* output34 = output[34]; FAUSTFLOAT* output35 = output[35]; for (int i=0; igetNumInputs(); } }; // Global state @@ -1614,7 +1604,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -1646,7 +1636,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -1669,9 +1659,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1697,9 +1687,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP.getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1711,7 +1701,7 @@ void Faust_next(Faust* unit, int inNumSamples) // update controls Faust_updateControls(unit); // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBuf, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); } void Faust_next_copy(Faust* unit, int inNumSamples) @@ -1732,7 +1722,7 @@ void Faust_next_copy(Faust* unit, int inNumSamples) } } // dsp computation - unit->mDSP.compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); } void Faust_next_clear(Faust* unit, int inNumSamples) @@ -1742,68 +1732,91 @@ void Faust_next_clear(Faust* unit, int inNumSamples) void Faust_Ctor(Faust* unit) // module constructor { - // init dsp - unit->mDSP.instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP.buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP.getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP.getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) - && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); } - SETCALC(Faust_next_copy); + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); } -#if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); -#endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); } void Faust_Dtor(Faust* unit) // module destructor @@ -1817,6 +1830,10 @@ void Faust_Dtor(Faust* unit) // module destructor } RTFree(unit->mWorld, unit->mInBufCopy); } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); } #ifdef SC_API_EXPORT @@ -1828,18 +1845,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - FAUSTCLASS::metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1850,10 +1869,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0){ - name = SC_FAUST_PREFIX + name; + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMicLebedev504.cpp b/source/HOAUGens/HOAMicLebedev504.cpp deleted file mode 100644 index 97b2828b8d..0000000000 --- a/source/HOAUGens/HOAMicLebedev504.cpp +++ /dev/null @@ -1,1281 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAMicLebedev504" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fRec0[2]; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev504"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - } - - virtual int getNumInputs() { return 50; } - virtual int getNumOutputs() { return 25; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - } - virtual void instanceResetUserInterface() { - fslider0 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Outputs"); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* input36 = input[36]; - FAUSTFLOAT* input37 = input[37]; - FAUSTFLOAT* input38 = input[38]; - FAUSTFLOAT* input39 = input[39]; - FAUSTFLOAT* input40 = input[40]; - FAUSTFLOAT* input41 = input[41]; - FAUSTFLOAT* input42 = input[42]; - FAUSTFLOAT* input43 = input[43]; - FAUSTFLOAT* input44 = input[44]; - FAUSTFLOAT* input45 = input[45]; - FAUSTFLOAT* input46 = input[46]; - FAUSTFLOAT* input47 = input[47]; - FAUSTFLOAT* input48 = input[48]; - FAUSTFLOAT* input49 = input[49]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAMicLebedev505.cpp b/source/HOAUGens/HOAMicLebedev505.cpp deleted file mode 100644 index 32160ef8af..0000000000 --- a/source/HOAUGens/HOAMicLebedev505.cpp +++ /dev/null @@ -1,1313 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAMicLebedev505" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fRec0[2]; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAMicLebedev505"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - } - - virtual int getNumInputs() { return 50; } - virtual int getNumOutputs() { return 36; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - } - virtual void instanceResetUserInterface() { - fslider0 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Outputs"); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* input36 = input[36]; - FAUSTFLOAT* input37 = input[37]; - FAUSTFLOAT* input38 = input[38]; - FAUSTFLOAT* input39 = input[39]; - FAUSTFLOAT* input40 = input[40]; - FAUSTFLOAT* input41 = input[41]; - FAUSTFLOAT* input42 = input[42]; - FAUSTFLOAT* input43 = input[43]; - FAUSTFLOAT* input44 = input[44]; - FAUSTFLOAT* input45 = input[45]; - FAUSTFLOAT* input46 = input[46]; - FAUSTFLOAT* input47 = input[47]; - FAUSTFLOAT* input48 = input[48]; - FAUSTFLOAT* input49 = input[49]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAMirror1.cpp b/source/HOAUGens/HOAMirror1.cpp index cdae978376..ec7b37d376 100644 --- a/source/HOAUGens/HOAMirror1.cpp +++ b/source/HOAUGens/HOAMirror1.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -634,8 +581,8 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } virtual int getNumInputs() { return 4; } @@ -756,7 +703,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -788,7 +735,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -811,9 +758,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -839,9 +786,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -937,7 +884,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -997,19 +944,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1020,10 +968,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMirror2.cpp b/source/HOAUGens/HOAMirror2.cpp index 8a12da57ce..8adaffdb51 100644 --- a/source/HOAUGens/HOAMirror2.cpp +++ b/source/HOAUGens/HOAMirror2.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -634,8 +581,8 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } virtual int getNumInputs() { return 9; } @@ -786,7 +733,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -818,7 +765,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -841,9 +788,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -869,9 +816,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -967,7 +914,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1027,19 +974,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1050,10 +998,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMirror3.cpp b/source/HOAUGens/HOAMirror3.cpp index ecb7119c72..9387efad75 100644 --- a/source/HOAUGens/HOAMirror3.cpp +++ b/source/HOAUGens/HOAMirror3.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -634,8 +581,8 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } virtual int getNumInputs() { return 16; } @@ -828,7 +775,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -860,7 +807,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -883,9 +830,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -911,9 +858,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1009,7 +956,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1069,19 +1016,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1092,10 +1040,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMirror4.cpp b/source/HOAUGens/HOAMirror4.cpp index 7ee7414007..971ceed94e 100644 --- a/source/HOAUGens/HOAMirror4.cpp +++ b/source/HOAUGens/HOAMirror4.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -634,8 +581,8 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } virtual int getNumInputs() { return 25; } @@ -882,7 +829,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -914,7 +861,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -937,9 +884,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -965,9 +912,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1063,7 +1010,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1123,19 +1070,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1146,10 +1094,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAMirror5.cpp b/source/HOAUGens/HOAMirror5.cpp index c3bfde2eae..a2ecd0d14e 100644 --- a/source/HOAUGens/HOAMirror5.cpp +++ b/source/HOAUGens/HOAMirror5.cpp @@ -5,7 +5,7 @@ // license: "GPL" // copyright: "(c) Pierre Lecomte 2015" // -// Code generated with Faust 0.9.95 (http://faust.grame.fr) +// Code generated with Faust 0.9.100 (http://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -40,46 +40,27 @@ #include /************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ #ifndef __dsp__ #define __dsp__ @@ -119,9 +100,9 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ @@ -129,13 +110,13 @@ class dsp { /** Init instance state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; /** Init instance constant state * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void instanceConstants(int samplingRate) = 0; @@ -163,19 +144,19 @@ class dsp { * DSP instance computation, to be called with sucessive in/out audio buffers. * * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; /** - * DSP instance computation : alternative method to be used by subclasses. + * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * */ virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -208,6 +189,7 @@ class decorator_dsp : public dsp { virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -231,31 +213,28 @@ class decorator_dsp : public dsp { #endif /************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef FAUST_UI_H #define FAUST_UI_H @@ -264,9 +243,10 @@ class decorator_dsp : public dsp { #endif /******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. ******************************************************************************/ class UI @@ -303,69 +283,28 @@ class UI virtual void declare(FAUSTFLOAT*, const char*, const char*) {} }; -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - #endif /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. ************************************************************************/ #ifndef __misc__ @@ -377,26 +316,28 @@ class DecoratorUI : public UI #include /************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + #ifndef __meta__ #define __meta__ @@ -452,9 +393,15 @@ inline const char* lopts(char* argv[], const char* name, const char* def) using namespace std; #if defined(__GNUC__) && __GNUC__ >= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) + #define FAUST_EXPORT __attribute__((visibility("default"))) #else -# define FAUST_EXPORT SC_API_EXPORT + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup #endif //---------------------------------------------------------------------------- @@ -634,8 +581,8 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } virtual int getNumInputs() { return 36; } @@ -948,7 +895,7 @@ static std::string normalizeClassName(const std::string& name); void initState(const std::string& name, int sampleRate) { - g_unitName = strdup(name.c_str()); + g_unitName = STRDUP(name.c_str()); mydsp* dsp = new FAUSTCLASS; ControlCounter* cc = new ControlCounter; @@ -980,7 +927,7 @@ std::string fileNameToUnitName(const std::string& fileName) // Globals -static InterfaceTable *ft; +static InterfaceTable* ft; // The SuperCollider UGen class name generated here must match // that generated by faust2sc: @@ -1003,9 +950,9 @@ static std::string normalizeClassName(const std::string& name) extern "C" { #ifdef SC_API_EXPORT - int api_version(void); + FAUST_EXPORT int api_version(void); #endif - void load(InterfaceTable*); + FAUST_EXPORT void load(InterfaceTable*); void Faust_next(Faust*, int); void Faust_next_copy(Faust*, int); void Faust_next_clear(Faust*, int); @@ -1031,9 +978,9 @@ inline static void copyBuffer(float* dst, int n, float* src) inline static void Faust_updateControls(Faust* unit) { Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { float value = IN0(curControl); (controls++)->update(value); curControl++; @@ -1129,7 +1076,7 @@ void Faust_Ctor(Faust* unit) // module constructor Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); goto end; } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { // Initialize interpolator. unit->mInBufValue[i] = IN0(i); // Aquire buffer memory. @@ -1189,19 +1136,20 @@ FAUST_EXPORT void load(InterfaceTable* inTable) ft = inTable; MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + std::string name = meta["name"]; if (name.empty()) { name = fileNameToUnitName(__FILE__); } - + name = normalizeClassName(name); #if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif if (name.empty()) { @@ -1212,10 +1160,10 @@ FAUST_EXPORT void load(InterfaceTable* inTable) return; } - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { name = SC_FAUST_PREFIX + name; } - + // Initialize global data // TODO: Use correct sample rate initState(name, 48000); diff --git a/source/HOAUGens/HOAPanLebedev061.cpp b/source/HOAUGens/HOAPanLebedev061.cpp deleted file mode 100644 index 545d9b6163..0000000000 --- a/source/HOAUGens/HOAPanLebedev061.cpp +++ /dev/null @@ -1,1300 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAPanLebedev061" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fRec2[2]; - FAUSTFLOAT fcheckbox3; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec7[2]; - double fRec6[2]; - FAUSTFLOAT fslider6; - FAUSTFLOAT fslider7; - double fRec10[2]; - double fRec9[2]; - double fRec8[2]; - double fRec12[2]; - double fRec11[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - double fRec13[2]; - FAUSTFLOAT fbargraph1; - double fRec14[2]; - FAUSTFLOAT fbargraph2; - double fRec15[2]; - FAUSTFLOAT fbargraph3; - double fRec16[2]; - FAUSTFLOAT fbargraph4; - double fRec17[2]; - FAUSTFLOAT fbargraph5; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("name", "HOAPanLebedev061"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - } - - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 6; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - } - virtual void instanceResetUserInterface() { - fentry0 = 1.07; - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fslider0 = 2.0; - fslider1 = 0.0; - fcheckbox2 = 0.0; - fslider2 = 2.0; - fslider3 = 0.0; - fcheckbox3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fslider6 = 0.0; - fslider7 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "0+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "0+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(&fslider3, "1+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "1+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider7, "1+3", ""); - ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider6, "1+4", ""); - ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox0); - ui_interface->addCheckButton("1", &fcheckbox3); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f93ccf3b3d0", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f93ccf3ccc0", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f93ccf3ecd0", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f93ccf40d30", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f93ccf42e60", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f93ccf44bf0", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fentry0); - double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); - double fSlow2 = double(fcheckbox1); - double fSlow3 = double(fslider0); - double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); - double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow6 = double(fcheckbox2); - double fSlow7 = double(fslider2); - double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); - double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow10 = (3 * (1 - double(fcheckbox3))); - double fSlow11 = double(fslider4); - double fSlow12 = sin(fSlow11); - double fSlow13 = cos(fSlow11); - double fSlow14 = double(fslider5); - double fSlow15 = (fSlow13 * cos(fSlow14)); - double fSlow16 = (6.123233995736766e-17 * fSlow15); - double fSlow17 = (fSlow12 + fSlow16); - double fSlow18 = ((fConst3 / fSlow3) + 1); - double fSlow19 = (fConst2 / (fSlow3 * fSlow18)); - double fSlow20 = (1.0 / ((fConst3 / fSlow0) + 1)); - double fSlow21 = (((fSlow2 * fSlow0) * fSlow18) / fSlow3); - double fSlow22 = (fConst2 / fSlow0); - double fSlow23 = ((1 - fSlow2) * fSlow0); - double fSlow24 = double(fslider6); - double fSlow25 = sin(fSlow24); - double fSlow26 = cos(fSlow24); - double fSlow27 = double(fslider7); - double fSlow28 = (fSlow26 * cos(fSlow27)); - double fSlow29 = (6.123233995736766e-17 * fSlow28); - double fSlow30 = (fSlow25 + fSlow29); - double fSlow31 = ((fConst3 / fSlow7) + 1); - double fSlow32 = (fConst2 / (fSlow7 * fSlow31)); - double fSlow33 = (((fSlow0 * fSlow6) * fSlow31) / fSlow7); - double fSlow34 = (fSlow0 * (1 - fSlow6)); - double fSlow35 = (fSlow26 * cos((fSlow27 + -1.5707963267948966))); - double fSlow36 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); - double fSlow37 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); - double fSlow38 = (fSlow26 * cos((fSlow27 + -3.141592653589793))); - double fSlow39 = (fSlow26 * cos((fSlow27 + -4.71238898038469))); - double fSlow40 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); - double fSlow41 = (fSlow29 - fSlow25); - double fSlow42 = (fSlow16 - fSlow12); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAPanLebedev262.cpp b/source/HOAUGens/HOAPanLebedev262.cpp deleted file mode 100644 index a41cf34f8b..0000000000 --- a/source/HOAUGens/HOAPanLebedev262.cpp +++ /dev/null @@ -1,1811 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAPanLebedev262" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fRec2[2]; - FAUSTFLOAT fcheckbox3; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec7[2]; - double fRec6[2]; - FAUSTFLOAT fslider6; - FAUSTFLOAT fslider7; - double fRec10[2]; - double fRec9[2]; - double fRec8[2]; - double fRec12[2]; - double fRec11[2]; - FAUSTFLOAT fcheckbox4; - double fConst4; - double fConst5; - double fRec14[2]; - double fRec15[2]; - double fRec13[2]; - double fRec16[2]; - double fVec0[2]; - double fRec17[2]; - double fRec19[2]; - double fRec20[2]; - double fRec18[2]; - double fRec22[2]; - double fRec23[2]; - double fRec21[2]; - double fRec24[2]; - double fVec1[2]; - double fRec25[2]; - double fRec27[2]; - double fRec28[2]; - double fRec26[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - double fRec29[2]; - FAUSTFLOAT fbargraph1; - double fRec30[2]; - FAUSTFLOAT fbargraph2; - double fRec31[2]; - FAUSTFLOAT fbargraph3; - double fRec32[2]; - FAUSTFLOAT fbargraph4; - double fRec33[2]; - FAUSTFLOAT fbargraph5; - double fRec34[2]; - FAUSTFLOAT fbargraph6; - double fRec35[2]; - FAUSTFLOAT fbargraph7; - double fRec36[2]; - FAUSTFLOAT fbargraph8; - double fRec37[2]; - FAUSTFLOAT fbargraph9; - double fRec38[2]; - FAUSTFLOAT fbargraph10; - double fRec39[2]; - FAUSTFLOAT fbargraph11; - double fRec40[2]; - FAUSTFLOAT fbargraph12; - double fRec41[2]; - FAUSTFLOAT fbargraph13; - double fRec42[2]; - FAUSTFLOAT fbargraph14; - double fRec43[2]; - FAUSTFLOAT fbargraph15; - double fRec44[2]; - FAUSTFLOAT fbargraph16; - double fRec45[2]; - FAUSTFLOAT fbargraph17; - double fRec46[2]; - FAUSTFLOAT fbargraph18; - double fRec47[2]; - FAUSTFLOAT fbargraph19; - double fRec48[2]; - FAUSTFLOAT fbargraph20; - double fRec49[2]; - FAUSTFLOAT fbargraph21; - double fRec50[2]; - FAUSTFLOAT fbargraph22; - double fRec51[2]; - FAUSTFLOAT fbargraph23; - double fRec52[2]; - FAUSTFLOAT fbargraph24; - double fRec53[2]; - FAUSTFLOAT fbargraph25; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAPanLebedev262"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 26; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); - } - virtual void instanceResetUserInterface() { - fentry0 = 1.07; - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fslider0 = 2.0; - fslider1 = 0.0; - fcheckbox2 = 0.0; - fslider2 = 2.0; - fslider3 = 0.0; - fcheckbox3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fslider6 = 0.0; - fslider7 = 0.0; - fcheckbox4 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "0+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "0+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(&fslider3, "1+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "1+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider7, "1+3", ""); - ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider6, "1+4", ""); - ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox0); - ui_interface->addCheckButton("1", &fcheckbox3); - ui_interface->addCheckButton("2", &fcheckbox4); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7806b0", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d782a20", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7854c0", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d787fb0", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d78ab00", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d78d260", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "osc", "/output7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d790130", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "osc", "/output8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d792c10", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "osc", "/output9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d795740", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "osc", "/output10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7982f0", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "osc", "/output11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d79b0c0", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "osc", "/output12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d79df10", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "osc", "/output13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7a0e20", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "osc", "/output14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7a3dd0", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "osc", "/output15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7a6970", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "osc", "/output16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7a95b0", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "osc", "/output17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7ac270", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "osc", "/output18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7aefb0", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "osc", "/output19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7b24b0", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "osc", "/output20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7b5580", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "osc", "/output21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7b86b0", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "osc", "/output22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7bb850", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "osc", "/output23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7be7b0", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "osc", "/output24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7c1760", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "osc", "/output25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7c4790", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "osc", "/output26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd38d7c7810", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fentry0); - double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); - double fSlow2 = double(fcheckbox1); - double fSlow3 = double(fslider0); - double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); - double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow6 = double(fcheckbox2); - double fSlow7 = double(fslider2); - double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); - double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow10 = (3 * (1 - double(fcheckbox3))); - double fSlow11 = double(fslider4); - double fSlow12 = sin(fSlow11); - double fSlow13 = cos(fSlow11); - double fSlow14 = double(fslider5); - double fSlow15 = (fSlow13 * cos(fSlow14)); - double fSlow16 = (6.123233995736766e-17 * fSlow15); - double fSlow17 = (fSlow12 + fSlow16); - double fSlow18 = (fConst3 / fSlow3); - double fSlow19 = (fSlow18 + 1); - double fSlow20 = (fConst2 / (fSlow3 * fSlow19)); - double fSlow21 = (fConst3 / fSlow0); - double fSlow22 = (1.0 / (fSlow21 + 1)); - double fSlow23 = (fSlow2 * fSlow0); - double fSlow24 = ((fSlow23 * fSlow19) / fSlow3); - double fSlow25 = (fConst2 / fSlow0); - double fSlow26 = ((1 - fSlow2) * fSlow0); - double fSlow27 = double(fslider6); - double fSlow28 = sin(fSlow27); - double fSlow29 = cos(fSlow27); - double fSlow30 = double(fslider7); - double fSlow31 = (fSlow29 * cos(fSlow30)); - double fSlow32 = (6.123233995736766e-17 * fSlow31); - double fSlow33 = (fSlow28 + fSlow32); - double fSlow34 = (fConst3 / fSlow7); - double fSlow35 = (fSlow34 + 1); - double fSlow36 = (fConst2 / (fSlow7 * fSlow35)); - double fSlow37 = (fSlow0 * fSlow6); - double fSlow38 = ((fSlow37 * fSlow35) / fSlow7); - double fSlow39 = (fSlow0 * (1 - fSlow6)); - double fSlow40 = (2.5 * (1 - double(fcheckbox4))); - double fSlow41 = ((3 * faustpower<2>(fSlow33)) + -1); - double fSlow42 = faustpower<2>(fSlow21); - double fSlow43 = (1.0 / (((fConst4 / fSlow0) + (3 * fSlow42)) + 1)); - double fSlow44 = (12 * fSlow42); - double fSlow45 = (fSlow44 + (fConst5 / fSlow0)); - double fSlow46 = faustpower<2>(fSlow34); - double fSlow47 = (((fConst4 / fSlow7) + (3 * fSlow46)) + 1); - double fSlow48 = ((fSlow37 * fSlow47) / fSlow7); - double fSlow49 = (1.0 / fSlow47); - double fSlow50 = (12 * fSlow46); - double fSlow51 = ((fConst5 / fSlow7) + fSlow50); - double fSlow52 = ((3 * faustpower<2>(fSlow17)) + -1); - double fSlow53 = faustpower<2>(fSlow18); - double fSlow54 = (((fConst4 / fSlow3) + (3 * fSlow53)) + 1); - double fSlow55 = ((fSlow23 * fSlow54) / fSlow3); - double fSlow56 = (1.0 / fSlow54); - double fSlow57 = (12 * fSlow53); - double fSlow58 = ((fConst5 / fSlow3) + fSlow57); - double fSlow59 = ((3 * faustpower<2>(fSlow31)) + -1); - double fSlow60 = ((3 * faustpower<2>(fSlow15)) + -1); - double fSlow61 = (fSlow29 * cos((fSlow30 + -1.5707963267948966))); - double fSlow62 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); - double fSlow63 = ((3 * faustpower<2>(fSlow61)) + -1); - double fSlow64 = ((3 * faustpower<2>(fSlow62)) + -1); - double fSlow65 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); - double fSlow66 = ((3 * faustpower<2>(fSlow65)) + -1); - double fSlow67 = (fSlow29 * cos((fSlow30 + -3.141592653589793))); - double fSlow68 = ((3 * faustpower<2>(fSlow67)) + -1); - double fSlow69 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); - double fSlow70 = ((3 * faustpower<2>(fSlow69)) + -1); - double fSlow71 = (fSlow29 * cos((fSlow30 + -4.71238898038469))); - double fSlow72 = ((3 * faustpower<2>(fSlow71)) + -1); - double fSlow73 = (fSlow16 - fSlow12); - double fSlow74 = (fSlow32 - fSlow28); - double fSlow75 = ((3 * faustpower<2>(fSlow73)) + -1); - double fSlow76 = ((3 * faustpower<2>(fSlow74)) + -1); - double fSlow77 = (0.7071067811865476 * fSlow15); - double fSlow78 = (0.7071067811865475 * fSlow12); - double fSlow79 = (fSlow77 + fSlow78); - double fSlow80 = (0.7071067811865476 * fSlow31); - double fSlow81 = (0.7071067811865475 * fSlow28); - double fSlow82 = (fSlow80 + fSlow81); - double fSlow83 = ((3 * faustpower<2>(fSlow79)) + -1); - double fSlow84 = ((3 * faustpower<2>(fSlow82)) + -1); - double fSlow85 = (0.7071067811865476 * fSlow61); - double fSlow86 = (fSlow81 + fSlow85); - double fSlow87 = ((3 * faustpower<2>(fSlow86)) + -1); - double fSlow88 = (0.7071067811865476 * fSlow62); - double fSlow89 = (fSlow78 + fSlow88); - double fSlow90 = ((3 * faustpower<2>(fSlow89)) + -1); - double fSlow91 = (0.7071067811865476 * fSlow65); - double fSlow92 = (fSlow78 + fSlow91); - double fSlow93 = (0.7071067811865476 * fSlow67); - double fSlow94 = (fSlow81 + fSlow93); - double fSlow95 = ((3 * faustpower<2>(fSlow92)) + -1); - double fSlow96 = ((3 * faustpower<2>(fSlow94)) + -1); - double fSlow97 = (0.7071067811865476 * fSlow71); - double fSlow98 = (fSlow81 + fSlow97); - double fSlow99 = (0.7071067811865476 * fSlow69); - double fSlow100 = (fSlow78 + fSlow99); - double fSlow101 = ((3 * faustpower<2>(fSlow98)) + -1); - double fSlow102 = ((3 * faustpower<2>(fSlow100)) + -1); - double fSlow103 = (fSlow13 * cos((fSlow14 + -0.7853981633974483))); - double fSlow104 = ((3 * faustpower<2>(fSlow103)) + -1); - double fSlow105 = (fSlow29 * cos((fSlow30 + -0.7853981633974483))); - double fSlow106 = ((3 * faustpower<2>(fSlow105)) + -1); - double fSlow107 = (fSlow29 * cos((fSlow30 + -2.356194490192345))); - double fSlow108 = ((3 * faustpower<2>(fSlow107)) + -1); - double fSlow109 = (fSlow13 * cos((fSlow14 + -2.356194490192345))); - double fSlow110 = ((3 * faustpower<2>(fSlow109)) + -1); - double fSlow111 = (fSlow13 * cos((fSlow14 + -3.9269908169872414))); - double fSlow112 = ((3 * faustpower<2>(fSlow111)) + -1); - double fSlow113 = (fSlow29 * cos((fSlow30 + -3.9269908169872414))); - double fSlow114 = ((3 * faustpower<2>(fSlow113)) + -1); - double fSlow115 = (fSlow13 * cos((fSlow14 + -5.497787143782138))); - double fSlow116 = ((3 * faustpower<2>(fSlow115)) + -1); - double fSlow117 = (fSlow29 * cos((fSlow30 + -5.497787143782138))); - double fSlow118 = ((3 * faustpower<2>(fSlow117)) + -1); - double fSlow119 = (fSlow77 - fSlow78); - double fSlow120 = (fSlow80 - fSlow81); - double fSlow121 = ((3 * faustpower<2>(fSlow119)) + -1); - double fSlow122 = ((3 * faustpower<2>(fSlow120)) + -1); - double fSlow123 = (fSlow85 - fSlow81); - double fSlow124 = ((3 * faustpower<2>(fSlow123)) + -1); - double fSlow125 = (fSlow88 - fSlow78); - double fSlow126 = ((3 * faustpower<2>(fSlow125)) + -1); - double fSlow127 = (fSlow91 - fSlow78); - double fSlow128 = (fSlow93 - fSlow81); - double fSlow129 = ((3 * faustpower<2>(fSlow128)) + -1); - double fSlow130 = ((3 * faustpower<2>(fSlow127)) + -1); - double fSlow131 = (fSlow97 - fSlow81); - double fSlow132 = (fSlow99 - fSlow78); - double fSlow133 = ((3 * faustpower<2>(fSlow132)) + -1); - double fSlow134 = ((3 * faustpower<2>(fSlow131)) + -1); - double fSlow135 = (0.8164965809277259 * fSlow103); - double fSlow136 = (0.5773502691896258 * fSlow12); - double fSlow137 = (fSlow135 + fSlow136); - double fSlow138 = ((3 * faustpower<2>(fSlow137)) + -1); - double fSlow139 = (0.8164965809277259 * fSlow105); - double fSlow140 = (0.5773502691896258 * fSlow28); - double fSlow141 = (fSlow139 + fSlow140); - double fSlow142 = ((3 * faustpower<2>(fSlow141)) + -1); - double fSlow143 = (0.8164965809277259 * fSlow109); - double fSlow144 = (fSlow136 + fSlow143); - double fSlow145 = ((3 * faustpower<2>(fSlow144)) + -1); - double fSlow146 = (0.8164965809277259 * fSlow107); - double fSlow147 = (fSlow140 + fSlow146); - double fSlow148 = ((3 * faustpower<2>(fSlow147)) + -1); - double fSlow149 = (0.8164965809277259 * fSlow113); - double fSlow150 = (fSlow140 + fSlow149); - double fSlow151 = (0.8164965809277259 * fSlow111); - double fSlow152 = (fSlow136 + fSlow151); - double fSlow153 = ((3 * faustpower<2>(fSlow152)) + -1); - double fSlow154 = ((3 * faustpower<2>(fSlow150)) + -1); - double fSlow155 = (0.8164965809277259 * fSlow117); - double fSlow156 = (fSlow140 + fSlow155); - double fSlow157 = ((3 * faustpower<2>(fSlow156)) + -1); - double fSlow158 = (0.8164965809277259 * fSlow115); - double fSlow159 = (fSlow136 + fSlow158); - double fSlow160 = ((3 * faustpower<2>(fSlow159)) + -1); - double fSlow161 = (fSlow135 - fSlow136); - double fSlow162 = (fSlow139 - fSlow140); - double fSlow163 = ((3 * faustpower<2>(fSlow162)) + -1); - double fSlow164 = ((3 * faustpower<2>(fSlow161)) + -1); - double fSlow165 = (fSlow146 - fSlow140); - double fSlow166 = (fSlow143 - fSlow136); - double fSlow167 = ((3 * faustpower<2>(fSlow166)) + -1); - double fSlow168 = ((3 * faustpower<2>(fSlow165)) + -1); - double fSlow169 = (fSlow151 - fSlow136); - double fSlow170 = ((3 * faustpower<2>(fSlow169)) + -1); - double fSlow171 = (fSlow149 - fSlow140); - double fSlow172 = ((3 * faustpower<2>(fSlow171)) + -1); - double fSlow173 = (fSlow158 - fSlow136); - double fSlow174 = ((3 * faustpower<2>(fSlow173)) + -1); - double fSlow175 = (fSlow155 - fSlow140); - double fSlow176 = ((3 * faustpower<2>(fSlow175)) + -1); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAPanLebedev263.cpp b/source/HOAUGens/HOAPanLebedev263.cpp deleted file mode 100644 index dc3c42a56c..0000000000 --- a/source/HOAUGens/HOAPanLebedev263.cpp +++ /dev/null @@ -1,2049 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAPanLebedev263" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fRec2[2]; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - FAUSTFLOAT fcheckbox3; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec7[2]; - double fRec6[2]; - FAUSTFLOAT fcheckbox4; - double fConst4; - double fConst5; - double fConst6; - double fConst7; - double fRec11[2]; - double fRec12[2]; - double fRec10[2]; - double fRec13[2]; - double fVec0[2]; - double fRec14[2]; - double fRec15[2]; - double fRec9[2]; - double fRec8[2]; - double fRec18[2]; - double fRec19[2]; - double fRec17[2]; - double fRec20[2]; - double fRec16[2]; - FAUSTFLOAT fslider6; - FAUSTFLOAT fslider7; - double fRec23[2]; - double fRec22[2]; - double fRec21[2]; - double fRec25[2]; - double fRec24[2]; - double fRec29[2]; - double fRec30[2]; - double fRec28[2]; - double fRec31[2]; - double fVec1[2]; - double fRec32[2]; - double fRec33[2]; - double fRec27[2]; - double fRec26[2]; - double fRec36[2]; - double fRec37[2]; - double fRec35[2]; - double fRec38[2]; - double fRec34[2]; - FAUSTFLOAT fcheckbox5; - double fConst8; - double fConst9; - double fRec40[2]; - double fRec41[2]; - double fRec39[2]; - double fRec42[2]; - double fVec2[2]; - double fRec43[2]; - double fRec45[2]; - double fRec46[2]; - double fRec44[2]; - double fRec48[2]; - double fRec49[2]; - double fRec47[2]; - double fRec50[2]; - double fVec3[2]; - double fRec51[2]; - double fRec53[2]; - double fRec54[2]; - double fRec52[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - double fRec55[2]; - FAUSTFLOAT fbargraph1; - double fRec56[2]; - FAUSTFLOAT fbargraph2; - double fRec57[2]; - FAUSTFLOAT fbargraph3; - double fRec58[2]; - FAUSTFLOAT fbargraph4; - double fRec59[2]; - FAUSTFLOAT fbargraph5; - double fRec60[2]; - FAUSTFLOAT fbargraph6; - double fRec61[2]; - FAUSTFLOAT fbargraph7; - double fRec62[2]; - FAUSTFLOAT fbargraph8; - double fRec63[2]; - FAUSTFLOAT fbargraph9; - double fRec64[2]; - FAUSTFLOAT fbargraph10; - double fRec65[2]; - FAUSTFLOAT fbargraph11; - double fRec66[2]; - FAUSTFLOAT fbargraph12; - double fRec67[2]; - FAUSTFLOAT fbargraph13; - double fRec68[2]; - FAUSTFLOAT fbargraph14; - double fRec69[2]; - FAUSTFLOAT fbargraph15; - double fRec70[2]; - FAUSTFLOAT fbargraph16; - double fRec71[2]; - FAUSTFLOAT fbargraph17; - double fRec72[2]; - FAUSTFLOAT fbargraph18; - double fRec73[2]; - FAUSTFLOAT fbargraph19; - double fRec74[2]; - FAUSTFLOAT fbargraph20; - double fRec75[2]; - FAUSTFLOAT fbargraph21; - double fRec76[2]; - FAUSTFLOAT fbargraph22; - double fRec77[2]; - FAUSTFLOAT fbargraph23; - double fRec78[2]; - FAUSTFLOAT fbargraph24; - double fRec79[2]; - FAUSTFLOAT fbargraph25; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAPanLebedev263"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 26; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (789.5430205728705 / fConst0); - fConst5 = (394.7715102864353 / fConst0); - fConst6 = (625.2284897135664 / fConst0); - fConst7 = (1250.4569794271329 / fConst0); - fConst8 = (5.1e+02 / fConst0); - fConst9 = (1.02e+03 / fConst0); - } - virtual void instanceResetUserInterface() { - fentry0 = 1.07; - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fslider0 = 2.0; - fslider1 = 0.0; - fcheckbox2 = 0.0; - fslider2 = 2.0; - fslider3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fcheckbox3 = 0.0; - fcheckbox4 = 0.0; - fslider6 = 0.0; - fslider7 = 0.0; - fcheckbox5 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider3, "0+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "0+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "0+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "0+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider1, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "1+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider7, "1+3", ""); - ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider6, "1+4", ""); - ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox0); - ui_interface->addCheckButton("1", &fcheckbox3); - ui_interface->addCheckButton("2", &fcheckbox5); - ui_interface->addCheckButton("3", &fcheckbox4); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf2474bc0", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf2477cc0", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf247b3a0", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf247ea90", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf2482010", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24854f0", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "osc", "/output7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf2488ee0", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "osc", "/output8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf248c1a0", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "osc", "/output9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf248f790", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "osc", "/output10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24930a0", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "osc", "/output11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf2496840", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "osc", "/output12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf249a590", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "osc", "/output13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf249e050", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "osc", "/output14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24a1b70", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "osc", "/output15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24a5110", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "osc", "/output16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24a84a0", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "osc", "/output17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24abb30", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "osc", "/output18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24af560", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "osc", "/output19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24b33e0", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "osc", "/output20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf24b6d00", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "osc", "/output21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf1c50e70", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "osc", "/output22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf1c54ad0", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "osc", "/output23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf1c584f0", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "osc", "/output24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf1c5bfa0", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "osc", "/output25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf1c5fac0", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "osc", "/output26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9bf1c63650", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fentry0); - double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); - double fSlow2 = double(fcheckbox1); - double fSlow3 = double(fslider0); - double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); - double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow6 = double(fcheckbox2); - double fSlow7 = double(fslider2); - double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); - double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow10 = double(fslider4); - double fSlow11 = sin(fSlow10); - double fSlow12 = cos(fSlow10); - double fSlow13 = double(fslider5); - double fSlow14 = (fSlow12 * cos(fSlow13)); - double fSlow15 = (6.123233995736766e-17 * fSlow14); - double fSlow16 = (fSlow11 + fSlow15); - double fSlow17 = (3 * (1 - double(fcheckbox3))); - double fSlow18 = (fConst3 / fSlow7); - double fSlow19 = (fSlow18 + 1); - double fSlow20 = (fConst2 / (fSlow7 * fSlow19)); - double fSlow21 = (fConst3 / fSlow0); - double fSlow22 = (1.0 / (fSlow21 + 1)); - double fSlow23 = (fSlow6 * fSlow0); - double fSlow24 = ((fSlow23 * fSlow19) / fSlow7); - double fSlow25 = (fConst2 / fSlow0); - double fSlow26 = ((1 - fSlow6) * fSlow0); - double fSlow27 = (1 - double(fcheckbox4)); - double fSlow28 = faustpower<2>(fSlow16); - double fSlow29 = (3.5 * (fSlow27 * ((5 * fSlow28) + -3))); - double fSlow30 = ((fConst5 / fSlow7) + 1); - double fSlow31 = (fConst4 / (fSlow7 * fSlow30)); - double fSlow32 = (1.0 / ((fConst5 / fSlow0) + 1)); - double fSlow33 = faustpower<2>(fSlow21); - double fSlow34 = (1.0 / (((fConst6 / fSlow0) + (6.45943269348338 * fSlow33)) + 1)); - double fSlow35 = faustpower<2>(fSlow18); - double fSlow36 = (((fConst6 / fSlow7) + (6.45943269348338 * fSlow35)) + 1); - double fSlow37 = ((fSlow23 * fSlow36) / fSlow7); - double fSlow38 = (25.83773077393352 * fSlow33); - double fSlow39 = (fSlow38 + (fConst7 / fSlow0)); - double fSlow40 = (1.0 / fSlow36); - double fSlow41 = (25.83773077393352 * fSlow35); - double fSlow42 = ((fConst7 / fSlow7) + fSlow41); - double fSlow43 = (fConst4 / fSlow0); - double fSlow44 = double(fslider6); - double fSlow45 = sin(fSlow44); - double fSlow46 = cos(fSlow44); - double fSlow47 = double(fslider7); - double fSlow48 = (fSlow46 * cos(fSlow47)); - double fSlow49 = (6.123233995736766e-17 * fSlow48); - double fSlow50 = (fSlow45 + fSlow49); - double fSlow51 = (fConst3 / fSlow3); - double fSlow52 = (fSlow51 + 1); - double fSlow53 = (fConst2 / (fSlow3 * fSlow52)); - double fSlow54 = (fSlow0 * fSlow2); - double fSlow55 = ((fSlow54 * fSlow52) / fSlow3); - double fSlow56 = (fSlow0 * (1 - fSlow2)); - double fSlow57 = faustpower<2>(fSlow50); - double fSlow58 = (3.5 * (fSlow27 * ((5 * fSlow57) + -3))); - double fSlow59 = ((fConst5 / fSlow3) + 1); - double fSlow60 = (fConst4 / (fSlow3 * fSlow59)); - double fSlow61 = faustpower<2>(fSlow51); - double fSlow62 = (((fConst6 / fSlow3) + (6.45943269348338 * fSlow61)) + 1); - double fSlow63 = ((fSlow54 * fSlow62) / fSlow3); - double fSlow64 = (1.0 / fSlow62); - double fSlow65 = (25.83773077393352 * fSlow61); - double fSlow66 = ((fConst7 / fSlow3) + fSlow65); - double fSlow67 = (2.5 * (1 - double(fcheckbox5))); - double fSlow68 = ((3 * fSlow57) + -1); - double fSlow69 = (1.0 / (((fConst8 / fSlow0) + (3 * fSlow33)) + 1)); - double fSlow70 = (12 * fSlow33); - double fSlow71 = (fSlow70 + (fConst9 / fSlow0)); - double fSlow72 = (((fConst8 / fSlow3) + (3 * fSlow61)) + 1); - double fSlow73 = ((fSlow54 * fSlow72) / fSlow3); - double fSlow74 = (1.0 / fSlow72); - double fSlow75 = (12 * fSlow61); - double fSlow76 = ((fConst9 / fSlow3) + fSlow75); - double fSlow77 = ((3 * fSlow28) + -1); - double fSlow78 = (((fConst8 / fSlow7) + (3 * fSlow35)) + 1); - double fSlow79 = ((fSlow23 * fSlow78) / fSlow7); - double fSlow80 = (1.0 / fSlow78); - double fSlow81 = (12 * fSlow35); - double fSlow82 = ((fConst9 / fSlow7) + fSlow81); - double fSlow83 = ((3 * faustpower<2>(fSlow48)) + -1); - double fSlow84 = ((3 * faustpower<2>(fSlow14)) + -1); - double fSlow85 = (3.5 * fSlow27); - double fSlow86 = ((5 * faustpower<3>(fSlow14)) - (3 * fSlow14)); - double fSlow87 = ((5 * faustpower<3>(fSlow48)) - (3 * fSlow48)); - double fSlow88 = (fSlow46 * cos((fSlow47 + -1.5707963267948966))); - double fSlow89 = (fSlow12 * cos((fSlow13 + -1.5707963267948966))); - double fSlow90 = ((3 * faustpower<2>(fSlow89)) + -1); - double fSlow91 = ((3 * faustpower<2>(fSlow88)) + -1); - double fSlow92 = ((5 * faustpower<3>(fSlow89)) - (3 * fSlow89)); - double fSlow93 = ((5 * faustpower<3>(fSlow88)) - (3 * fSlow88)); - double fSlow94 = (fSlow46 * cos((fSlow47 + -3.141592653589793))); - double fSlow95 = ((3 * faustpower<2>(fSlow94)) + -1); - double fSlow96 = (fSlow12 * cos((fSlow13 + -3.141592653589793))); - double fSlow97 = ((3 * faustpower<2>(fSlow96)) + -1); - double fSlow98 = ((5 * faustpower<3>(fSlow96)) - (3 * fSlow96)); - double fSlow99 = ((5 * faustpower<3>(fSlow94)) - (3 * fSlow94)); - double fSlow100 = (fSlow46 * cos((fSlow47 + -4.71238898038469))); - double fSlow101 = ((3 * faustpower<2>(fSlow100)) + -1); - double fSlow102 = (fSlow12 * cos((fSlow13 + -4.71238898038469))); - double fSlow103 = ((3 * faustpower<2>(fSlow102)) + -1); - double fSlow104 = ((5 * faustpower<3>(fSlow102)) - (3 * fSlow102)); - double fSlow105 = ((5 * faustpower<3>(fSlow100)) - (3 * fSlow100)); - double fSlow106 = (fSlow49 - fSlow45); - double fSlow107 = faustpower<2>(fSlow106); - double fSlow108 = ((3 * fSlow107) + -1); - double fSlow109 = (fSlow15 - fSlow11); - double fSlow110 = faustpower<2>(fSlow109); - double fSlow111 = ((3 * fSlow110) + -1); - double fSlow112 = (3.5 * (fSlow27 * ((5 * fSlow107) + -3))); - double fSlow113 = (3.5 * (fSlow27 * ((5 * fSlow110) + -3))); - double fSlow114 = (0.7071067811865476 * fSlow14); - double fSlow115 = (0.7071067811865475 * fSlow11); - double fSlow116 = (fSlow114 + fSlow115); - double fSlow117 = faustpower<2>(fSlow116); - double fSlow118 = (3.5 * (fSlow27 * ((5 * fSlow117) + -3))); - double fSlow119 = (0.7071067811865475 * fSlow45); - double fSlow120 = (0.7071067811865476 * fSlow48); - double fSlow121 = (fSlow119 + fSlow120); - double fSlow122 = faustpower<2>(fSlow121); - double fSlow123 = (3.5 * (fSlow27 * ((5 * fSlow122) + -3))); - double fSlow124 = ((3 * fSlow122) + -1); - double fSlow125 = ((3 * fSlow117) + -1); - double fSlow126 = (0.7071067811865476 * fSlow88); - double fSlow127 = (fSlow119 + fSlow126); - double fSlow128 = faustpower<2>(fSlow127); - double fSlow129 = (3.5 * (fSlow27 * ((5 * fSlow128) + -3))); - double fSlow130 = (0.7071067811865476 * fSlow89); - double fSlow131 = (fSlow115 + fSlow130); - double fSlow132 = faustpower<2>(fSlow131); - double fSlow133 = (3.5 * (fSlow27 * ((5 * fSlow132) + -3))); - double fSlow134 = ((3 * fSlow128) + -1); - double fSlow135 = ((3 * fSlow132) + -1); - double fSlow136 = (0.7071067811865476 * fSlow94); - double fSlow137 = (fSlow119 + fSlow136); - double fSlow138 = faustpower<2>(fSlow137); - double fSlow139 = (3.5 * (fSlow27 * ((5 * fSlow138) + -3))); - double fSlow140 = (0.7071067811865476 * fSlow96); - double fSlow141 = (fSlow115 + fSlow140); - double fSlow142 = faustpower<2>(fSlow141); - double fSlow143 = (3.5 * (fSlow27 * ((5 * fSlow142) + -3))); - double fSlow144 = ((3 * fSlow138) + -1); - double fSlow145 = ((3 * fSlow142) + -1); - double fSlow146 = (0.7071067811865476 * fSlow102); - double fSlow147 = (fSlow115 + fSlow146); - double fSlow148 = faustpower<2>(fSlow147); - double fSlow149 = ((3 * fSlow148) + -1); - double fSlow150 = (0.7071067811865476 * fSlow100); - double fSlow151 = (fSlow119 + fSlow150); - double fSlow152 = faustpower<2>(fSlow151); - double fSlow153 = ((3 * fSlow152) + -1); - double fSlow154 = (3.5 * (fSlow27 * ((5 * fSlow152) + -3))); - double fSlow155 = (3.5 * (fSlow27 * ((5 * fSlow148) + -3))); - double fSlow156 = (fSlow46 * cos((fSlow47 + -0.7853981633974483))); - double fSlow157 = ((3 * faustpower<2>(fSlow156)) + -1); - double fSlow158 = (fSlow12 * cos((fSlow13 + -0.7853981633974483))); - double fSlow159 = ((3 * faustpower<2>(fSlow158)) + -1); - double fSlow160 = ((5 * faustpower<3>(fSlow158)) - (3 * fSlow158)); - double fSlow161 = ((5 * faustpower<3>(fSlow156)) - (3 * fSlow156)); - double fSlow162 = (fSlow46 * cos((fSlow47 + -2.356194490192345))); - double fSlow163 = (fSlow12 * cos((fSlow13 + -2.356194490192345))); - double fSlow164 = ((3 * faustpower<2>(fSlow163)) + -1); - double fSlow165 = ((3 * faustpower<2>(fSlow162)) + -1); - double fSlow166 = ((5 * faustpower<3>(fSlow163)) - (3 * fSlow163)); - double fSlow167 = ((5 * faustpower<3>(fSlow162)) - (3 * fSlow162)); - double fSlow168 = (fSlow46 * cos((fSlow47 + -3.9269908169872414))); - double fSlow169 = ((5 * faustpower<3>(fSlow168)) - (3 * fSlow168)); - double fSlow170 = (fSlow12 * cos((fSlow13 + -3.9269908169872414))); - double fSlow171 = ((5 * faustpower<3>(fSlow170)) - (3 * fSlow170)); - double fSlow172 = ((3 * faustpower<2>(fSlow168)) + -1); - double fSlow173 = ((3 * faustpower<2>(fSlow170)) + -1); - double fSlow174 = (fSlow12 * cos((fSlow13 + -5.497787143782138))); - double fSlow175 = ((3 * faustpower<2>(fSlow174)) + -1); - double fSlow176 = (fSlow46 * cos((fSlow47 + -5.497787143782138))); - double fSlow177 = ((3 * faustpower<2>(fSlow176)) + -1); - double fSlow178 = ((5 * faustpower<3>(fSlow174)) - (3 * fSlow174)); - double fSlow179 = ((5 * faustpower<3>(fSlow176)) - (3 * fSlow176)); - double fSlow180 = (fSlow120 - fSlow119); - double fSlow181 = faustpower<2>(fSlow180); - double fSlow182 = ((3 * fSlow181) + -1); - double fSlow183 = (fSlow114 - fSlow115); - double fSlow184 = faustpower<2>(fSlow183); - double fSlow185 = ((3 * fSlow184) + -1); - double fSlow186 = (3.5 * (fSlow27 * ((5 * fSlow184) + -3))); - double fSlow187 = (3.5 * (fSlow27 * ((5 * fSlow181) + -3))); - double fSlow188 = (fSlow126 - fSlow119); - double fSlow189 = faustpower<2>(fSlow188); - double fSlow190 = (3.5 * (fSlow27 * ((5 * fSlow189) + -3))); - double fSlow191 = (fSlow130 - fSlow115); - double fSlow192 = faustpower<2>(fSlow191); - double fSlow193 = (3.5 * (fSlow27 * ((5 * fSlow192) + -3))); - double fSlow194 = ((3 * fSlow189) + -1); - double fSlow195 = ((3 * fSlow192) + -1); - double fSlow196 = (fSlow136 - fSlow119); - double fSlow197 = faustpower<2>(fSlow196); - double fSlow198 = (3.5 * (fSlow27 * ((5 * fSlow197) + -3))); - double fSlow199 = (fSlow140 - fSlow115); - double fSlow200 = faustpower<2>(fSlow199); - double fSlow201 = (3.5 * (fSlow27 * ((5 * fSlow200) + -3))); - double fSlow202 = ((3 * fSlow197) + -1); - double fSlow203 = ((3 * fSlow200) + -1); - double fSlow204 = (fSlow150 - fSlow119); - double fSlow205 = faustpower<2>(fSlow204); - double fSlow206 = ((3 * fSlow205) + -1); - double fSlow207 = (fSlow146 - fSlow115); - double fSlow208 = faustpower<2>(fSlow207); - double fSlow209 = ((3 * fSlow208) + -1); - double fSlow210 = (3.5 * (fSlow27 * ((5 * fSlow208) + -3))); - double fSlow211 = (3.5 * (fSlow27 * ((5 * fSlow205) + -3))); - double fSlow212 = (0.5773502691896258 * fSlow45); - double fSlow213 = (0.8164965809277259 * fSlow156); - double fSlow214 = (fSlow212 + fSlow213); - double fSlow215 = faustpower<2>(fSlow214); - double fSlow216 = ((3 * fSlow215) + -1); - double fSlow217 = (0.8164965809277259 * fSlow158); - double fSlow218 = (0.5773502691896258 * fSlow11); - double fSlow219 = (fSlow217 + fSlow218); - double fSlow220 = faustpower<2>(fSlow219); - double fSlow221 = ((3 * fSlow220) + -1); - double fSlow222 = (3.5 * (fSlow27 * ((5 * fSlow215) + -3))); - double fSlow223 = (3.5 * (fSlow27 * ((5 * fSlow220) + -3))); - double fSlow224 = (0.8164965809277259 * fSlow162); - double fSlow225 = (fSlow212 + fSlow224); - double fSlow226 = faustpower<2>(fSlow225); - double fSlow227 = (3.5 * (fSlow27 * ((5 * fSlow226) + -3))); - double fSlow228 = (0.8164965809277259 * fSlow163); - double fSlow229 = (fSlow218 + fSlow228); - double fSlow230 = faustpower<2>(fSlow229); - double fSlow231 = (3.5 * (fSlow27 * ((5 * fSlow230) + -3))); - double fSlow232 = ((3 * fSlow226) + -1); - double fSlow233 = ((3 * fSlow230) + -1); - double fSlow234 = (0.8164965809277259 * fSlow168); - double fSlow235 = (fSlow212 + fSlow234); - double fSlow236 = faustpower<2>(fSlow235); - double fSlow237 = (3.5 * (fSlow27 * ((5 * fSlow236) + -3))); - double fSlow238 = ((3 * fSlow236) + -1); - double fSlow239 = (0.8164965809277259 * fSlow170); - double fSlow240 = (fSlow218 + fSlow239); - double fSlow241 = faustpower<2>(fSlow240); - double fSlow242 = ((3 * fSlow241) + -1); - double fSlow243 = (3.5 * (fSlow27 * ((5 * fSlow241) + -3))); - double fSlow244 = (0.8164965809277259 * fSlow174); - double fSlow245 = (fSlow218 + fSlow244); - double fSlow246 = faustpower<2>(fSlow245); - double fSlow247 = (3.5 * (fSlow27 * ((5 * fSlow246) + -3))); - double fSlow248 = (0.8164965809277259 * fSlow176); - double fSlow249 = (fSlow212 + fSlow248); - double fSlow250 = faustpower<2>(fSlow249); - double fSlow251 = (3.5 * (fSlow27 * ((5 * fSlow250) + -3))); - double fSlow252 = ((3 * fSlow246) + -1); - double fSlow253 = ((3 * fSlow250) + -1); - double fSlow254 = (fSlow217 - fSlow218); - double fSlow255 = faustpower<2>(fSlow254); - double fSlow256 = ((3 * fSlow255) + -1); - double fSlow257 = (fSlow213 - fSlow212); - double fSlow258 = faustpower<2>(fSlow257); - double fSlow259 = ((3 * fSlow258) + -1); - double fSlow260 = (3.5 * (fSlow27 * ((5 * fSlow255) + -3))); - double fSlow261 = (3.5 * (fSlow27 * ((5 * fSlow258) + -3))); - double fSlow262 = (fSlow228 - fSlow218); - double fSlow263 = faustpower<2>(fSlow262); - double fSlow264 = ((3 * fSlow263) + -1); - double fSlow265 = (fSlow224 - fSlow212); - double fSlow266 = faustpower<2>(fSlow265); - double fSlow267 = ((3 * fSlow266) + -1); - double fSlow268 = (3.5 * (fSlow27 * ((5 * fSlow263) + -3))); - double fSlow269 = (3.5 * (fSlow27 * ((5 * fSlow266) + -3))); - double fSlow270 = (fSlow239 - fSlow218); - double fSlow271 = faustpower<2>(fSlow270); - double fSlow272 = ((3 * fSlow271) + -1); - double fSlow273 = (fSlow234 - fSlow212); - double fSlow274 = faustpower<2>(fSlow273); - double fSlow275 = ((3 * fSlow274) + -1); - double fSlow276 = (3.5 * (fSlow27 * ((5 * fSlow271) + -3))); - double fSlow277 = (3.5 * (fSlow27 * ((5 * fSlow274) + -3))); - double fSlow278 = (fSlow244 - fSlow218); - double fSlow279 = faustpower<2>(fSlow278); - double fSlow280 = ((3 * fSlow279) + -1); - double fSlow281 = (fSlow248 - fSlow212); - double fSlow282 = faustpower<2>(fSlow281); - double fSlow283 = ((3 * fSlow282) + -1); - double fSlow284 = (3.5 * (fSlow27 * ((5 * fSlow279) + -3))); - double fSlow285 = (3.5 * (fSlow27 * ((5 * fSlow282) + -3))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAPanLebedev501.cpp b/source/HOAUGens/HOAPanLebedev501.cpp deleted file mode 100644 index f787410765..0000000000 --- a/source/HOAUGens/HOAPanLebedev501.cpp +++ /dev/null @@ -1,2058 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAPanLebedev501" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fslider2; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider3; - double fRec2[2]; - FAUSTFLOAT fcheckbox3; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec7[2]; - double fRec6[2]; - FAUSTFLOAT fslider6; - FAUSTFLOAT fslider7; - double fRec10[2]; - double fRec9[2]; - double fRec8[2]; - double fRec12[2]; - double fRec11[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - double fRec13[2]; - FAUSTFLOAT fbargraph1; - double fRec14[2]; - FAUSTFLOAT fbargraph2; - double fRec15[2]; - FAUSTFLOAT fbargraph3; - double fRec16[2]; - FAUSTFLOAT fbargraph4; - double fRec17[2]; - FAUSTFLOAT fbargraph5; - double fRec18[2]; - FAUSTFLOAT fbargraph6; - double fRec19[2]; - FAUSTFLOAT fbargraph7; - double fRec20[2]; - FAUSTFLOAT fbargraph8; - double fRec21[2]; - FAUSTFLOAT fbargraph9; - double fRec22[2]; - FAUSTFLOAT fbargraph10; - double fRec23[2]; - FAUSTFLOAT fbargraph11; - double fRec24[2]; - FAUSTFLOAT fbargraph12; - double fRec25[2]; - FAUSTFLOAT fbargraph13; - double fRec26[2]; - FAUSTFLOAT fbargraph14; - double fRec27[2]; - FAUSTFLOAT fbargraph15; - double fRec28[2]; - FAUSTFLOAT fbargraph16; - double fRec29[2]; - FAUSTFLOAT fbargraph17; - double fRec30[2]; - FAUSTFLOAT fbargraph18; - double fRec31[2]; - FAUSTFLOAT fbargraph19; - double fRec32[2]; - FAUSTFLOAT fbargraph20; - double fRec33[2]; - FAUSTFLOAT fbargraph21; - double fRec34[2]; - FAUSTFLOAT fbargraph22; - double fRec35[2]; - FAUSTFLOAT fbargraph23; - double fRec36[2]; - FAUSTFLOAT fbargraph24; - double fRec37[2]; - FAUSTFLOAT fbargraph25; - double fRec38[2]; - FAUSTFLOAT fbargraph26; - double fRec39[2]; - FAUSTFLOAT fbargraph27; - double fRec40[2]; - FAUSTFLOAT fbargraph28; - double fRec41[2]; - FAUSTFLOAT fbargraph29; - double fRec42[2]; - FAUSTFLOAT fbargraph30; - double fRec43[2]; - FAUSTFLOAT fbargraph31; - double fRec44[2]; - FAUSTFLOAT fbargraph32; - double fRec45[2]; - FAUSTFLOAT fbargraph33; - double fRec46[2]; - FAUSTFLOAT fbargraph34; - double fRec47[2]; - FAUSTFLOAT fbargraph35; - double fRec48[2]; - FAUSTFLOAT fbargraph36; - double fRec49[2]; - FAUSTFLOAT fbargraph37; - double fRec50[2]; - FAUSTFLOAT fbargraph38; - double fRec51[2]; - FAUSTFLOAT fbargraph39; - double fRec52[2]; - FAUSTFLOAT fbargraph40; - double fRec53[2]; - FAUSTFLOAT fbargraph41; - double fRec54[2]; - FAUSTFLOAT fbargraph42; - double fRec55[2]; - FAUSTFLOAT fbargraph43; - double fRec56[2]; - FAUSTFLOAT fbargraph44; - double fRec57[2]; - FAUSTFLOAT fbargraph45; - double fRec58[2]; - FAUSTFLOAT fbargraph46; - double fRec59[2]; - FAUSTFLOAT fbargraph47; - double fRec60[2]; - FAUSTFLOAT fbargraph48; - double fRec61[2]; - FAUSTFLOAT fbargraph49; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAPanLebedev501"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - } - - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 50; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - } - virtual void instanceResetUserInterface() { - fentry0 = 1.07; - fcheckbox0 = 0.0; - fslider0 = 2.0; - fcheckbox1 = 0.0; - fslider1 = 0.0; - fslider2 = 2.0; - fcheckbox2 = 0.0; - fslider3 = 0.0; - fcheckbox3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fslider6 = 0.0; - fslider7 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider3, "0+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "0+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "0+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "0+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider1, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "1+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider7, "1+3", ""); - ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider6, "1+4", ""); - ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox0); - ui_interface->addCheckButton("1", &fcheckbox3); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openVerticalBox("Outputs"); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("1-25"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1129180", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac112ac50", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac112ce20", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac112f090", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1131380", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac11332d0", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "osc", "/output7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1135990", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "osc", "/output8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1137c40", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "osc", "/output9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1139f40", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "osc", "/output10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac113c2b0", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "osc", "/output11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac113e840", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "osc", "/output12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1140e30", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "osc", "/output13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac11434b0", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "osc", "/output14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1145b80", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "osc", "/output15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1147e80", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "osc", "/output16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac114a1f0", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "osc", "/output17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac114c5d0", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "osc", "/output18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac114ea20", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "osc", "/output19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1151630", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "osc", "/output20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1153db0", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "osc", "/output21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac11565f0", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "osc", "/output22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1158ea0", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "osc", "/output23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac115b510", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "osc", "/output24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac115dc00", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "osc", "/output25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac11603d0", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("26-50"); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "osc", "/output26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1162b20", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph26, "osc", "/output27"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1165790", &fbargraph26, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph27, "osc", "/output28"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1167820", &fbargraph27, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph28, "osc", "/output29"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1169960", &fbargraph28, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph29, "osc", "/output30"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac116bb10", &fbargraph29, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph30, "osc", "/output31"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac116e7a0", &fbargraph30, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph31, "osc", "/output32"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1171060", &fbargraph31, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph32, "osc", "/output33"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1173990", &fbargraph32, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph33, "osc", "/output34"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1176330", &fbargraph33, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph34, "osc", "/output35"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1178d40", &fbargraph34, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph35, "osc", "/output36"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac117b7c0", &fbargraph35, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph36, "osc", "/output37"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac117e250", &fbargraph36, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph37, "osc", "/output38"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1180d90", &fbargraph37, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph38, "osc", "/output39"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac11830a0", &fbargraph38, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph39, "osc", "/output40"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1185410", &fbargraph39, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph40, "osc", "/output41"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac11877f0", &fbargraph40, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph41, "osc", "/output42"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1189c40", &fbargraph41, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph42, "osc", "/output43"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac118c100", &fbargraph42, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph43, "osc", "/output44"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac118e630", &fbargraph43, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph44, "osc", "/output45"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1190bd0", &fbargraph44, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph45, "osc", "/output46"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac11931e0", &fbargraph45, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph46, "osc", "/output47"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1195860", &fbargraph46, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph47, "osc", "/output48"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac1197f50", &fbargraph47, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph48, "osc", "/output49"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac119a6b0", &fbargraph48, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph49, "osc", "/output50"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcac119ce80", &fbargraph49, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fentry0); - double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); - double fSlow2 = double(fslider0); - double fSlow3 = double(fcheckbox1); - double fSlow4 = (1 - ((1 - (1.0 / fSlow2)) * fSlow3)); - double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow6 = double(fslider2); - double fSlow7 = double(fcheckbox2); - double fSlow8 = (1 - ((1 - (1.0 / fSlow6)) * fSlow7)); - double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow10 = (3 * (1 - double(fcheckbox3))); - double fSlow11 = double(fslider4); - double fSlow12 = sin(fSlow11); - double fSlow13 = cos(fSlow11); - double fSlow14 = double(fslider5); - double fSlow15 = (fSlow13 * cos(fSlow14)); - double fSlow16 = (6.123233995736766e-17 * fSlow15); - double fSlow17 = (fSlow12 + fSlow16); - double fSlow18 = ((fConst3 / fSlow6) + 1); - double fSlow19 = (fConst2 / (fSlow6 * fSlow18)); - double fSlow20 = (1.0 / ((fConst3 / fSlow0) + 1)); - double fSlow21 = (((fSlow7 * fSlow0) * fSlow18) / fSlow6); - double fSlow22 = (fConst2 / fSlow0); - double fSlow23 = ((1 - fSlow7) * fSlow0); - double fSlow24 = double(fslider6); - double fSlow25 = sin(fSlow24); - double fSlow26 = cos(fSlow24); - double fSlow27 = double(fslider7); - double fSlow28 = (fSlow26 * cos(fSlow27)); - double fSlow29 = (6.123233995736766e-17 * fSlow28); - double fSlow30 = (fSlow25 + fSlow29); - double fSlow31 = ((fConst3 / fSlow2) + 1); - double fSlow32 = (fConst2 / (fSlow2 * fSlow31)); - double fSlow33 = (((fSlow0 * fSlow3) * fSlow31) / fSlow2); - double fSlow34 = (fSlow0 * (1 - fSlow3)); - double fSlow35 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); - double fSlow36 = (fSlow26 * cos((fSlow27 + -1.5707963267948966))); - double fSlow37 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); - double fSlow38 = (fSlow26 * cos((fSlow27 + -3.141592653589793))); - double fSlow39 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); - double fSlow40 = (fSlow26 * cos((fSlow27 + -4.71238898038469))); - double fSlow41 = (fSlow16 - fSlow12); - double fSlow42 = (fSlow29 - fSlow25); - double fSlow43 = (0.7071067811865476 * fSlow28); - double fSlow44 = (0.7071067811865475 * fSlow25); - double fSlow45 = (fSlow43 + fSlow44); - double fSlow46 = (0.7071067811865476 * fSlow15); - double fSlow47 = (0.7071067811865475 * fSlow12); - double fSlow48 = (fSlow46 + fSlow47); - double fSlow49 = (0.7071067811865476 * fSlow36); - double fSlow50 = (fSlow44 + fSlow49); - double fSlow51 = (0.7071067811865476 * fSlow35); - double fSlow52 = (fSlow47 + fSlow51); - double fSlow53 = (0.7071067811865476 * fSlow37); - double fSlow54 = (fSlow47 + fSlow53); - double fSlow55 = (0.7071067811865476 * fSlow38); - double fSlow56 = (fSlow44 + fSlow55); - double fSlow57 = (0.7071067811865476 * fSlow39); - double fSlow58 = (fSlow47 + fSlow57); - double fSlow59 = (0.7071067811865476 * fSlow40); - double fSlow60 = (fSlow44 + fSlow59); - double fSlow61 = (fSlow13 * cos((fSlow14 + -0.7853981633974483))); - double fSlow62 = (fSlow26 * cos((fSlow27 + -0.7853981633974483))); - double fSlow63 = (fSlow13 * cos((fSlow14 + -2.356194490192345))); - double fSlow64 = (fSlow26 * cos((fSlow27 + -2.356194490192345))); - double fSlow65 = (fSlow13 * cos((fSlow14 + -3.9269908169872414))); - double fSlow66 = (fSlow26 * cos((fSlow27 + -3.9269908169872414))); - double fSlow67 = (fSlow13 * cos((fSlow14 + -5.497787143782138))); - double fSlow68 = (fSlow26 * cos((fSlow27 + -5.497787143782138))); - double fSlow69 = (fSlow46 - fSlow47); - double fSlow70 = (fSlow43 - fSlow44); - double fSlow71 = (fSlow51 - fSlow47); - double fSlow72 = (fSlow49 - fSlow44); - double fSlow73 = (fSlow53 - fSlow47); - double fSlow74 = (fSlow55 - fSlow44); - double fSlow75 = (fSlow59 - fSlow44); - double fSlow76 = (fSlow57 - fSlow47); - double fSlow77 = (0.8164965809277259 * fSlow61); - double fSlow78 = (0.5773502691896258 * fSlow12); - double fSlow79 = (fSlow77 + fSlow78); - double fSlow80 = (0.8164965809277259 * fSlow62); - double fSlow81 = (0.5773502691896258 * fSlow25); - double fSlow82 = (fSlow80 + fSlow81); - double fSlow83 = (0.8164965809277259 * fSlow63); - double fSlow84 = (fSlow78 + fSlow83); - double fSlow85 = (0.8164965809277259 * fSlow64); - double fSlow86 = (fSlow81 + fSlow85); - double fSlow87 = (0.8164965809277259 * fSlow65); - double fSlow88 = (fSlow78 + fSlow87); - double fSlow89 = (0.8164965809277259 * fSlow66); - double fSlow90 = (fSlow81 + fSlow89); - double fSlow91 = (0.8164965809277259 * fSlow67); - double fSlow92 = (fSlow78 + fSlow91); - double fSlow93 = (0.8164965809277259 * fSlow68); - double fSlow94 = (fSlow81 + fSlow93); - double fSlow95 = (fSlow80 - fSlow81); - double fSlow96 = (fSlow77 - fSlow78); - double fSlow97 = (fSlow85 - fSlow81); - double fSlow98 = (fSlow83 - fSlow78); - double fSlow99 = (fSlow89 - fSlow81); - double fSlow100 = (fSlow87 - fSlow78); - double fSlow101 = (fSlow93 - fSlow81); - double fSlow102 = (fSlow91 - fSlow78); - double fSlow103 = (0.4264014327112203 * (fSlow13 * cos((fSlow14 + -0.7853981633974484)))); - double fSlow104 = (0.9045340337332911 * fSlow12); - double fSlow105 = (fSlow103 + fSlow104); - double fSlow106 = (0.4264014327112203 * (fSlow26 * cos((fSlow27 + -0.7853981633974484)))); - double fSlow107 = (0.9045340337332911 * fSlow25); - double fSlow108 = (fSlow106 + fSlow107); - double fSlow109 = (0.4264014327112203 * fSlow64); - double fSlow110 = (fSlow107 + fSlow109); - double fSlow111 = (0.4264014327112203 * fSlow63); - double fSlow112 = (fSlow104 + fSlow111); - double fSlow113 = (0.4264014327112203 * fSlow66); - double fSlow114 = (fSlow107 + fSlow113); - double fSlow115 = (0.4264014327112203 * fSlow65); - double fSlow116 = (fSlow104 + fSlow115); - double fSlow117 = (0.4264014327112203 * fSlow68); - double fSlow118 = (fSlow107 + fSlow117); - double fSlow119 = (0.4264014327112203 * fSlow67); - double fSlow120 = (fSlow104 + fSlow119); - double fSlow121 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -0.32175055439664263)))); - double fSlow122 = (0.3015113445777635 * fSlow12); - double fSlow123 = (fSlow121 + fSlow122); - double fSlow124 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -0.32175055439664263)))); - double fSlow125 = (0.3015113445777635 * fSlow25); - double fSlow126 = (fSlow124 + fSlow125); - double fSlow127 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -1.2490457723982544)))); - double fSlow128 = (fSlow122 + fSlow127); - double fSlow129 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -1.2490457723982544)))); - double fSlow130 = (fSlow125 + fSlow129); - double fSlow131 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -1.8925468811915387)))); - double fSlow132 = (fSlow122 + fSlow131); - double fSlow133 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -1.8925468811915387)))); - double fSlow134 = (fSlow125 + fSlow133); - double fSlow135 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -2.8198420991931505)))); - double fSlow136 = (fSlow122 + fSlow135); - double fSlow137 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -2.8198420991931505)))); - double fSlow138 = (fSlow125 + fSlow137); - double fSlow139 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -3.4633432079864357)))); - double fSlow140 = (fSlow122 + fSlow139); - double fSlow141 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -3.4633432079864357)))); - double fSlow142 = (fSlow125 + fSlow141); - double fSlow143 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -4.3906384259880475)))); - double fSlow144 = (fSlow122 + fSlow143); - double fSlow145 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -4.3906384259880475)))); - double fSlow146 = (fSlow125 + fSlow145); - double fSlow147 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -5.034139534781332)))); - double fSlow148 = (fSlow122 + fSlow147); - double fSlow149 = (0.9534625892455924 * (fSlow26 * cos((fSlow27 + -5.034139534781332)))); - double fSlow150 = (fSlow125 + fSlow149); - double fSlow151 = (0.9534625892455924 * (cos((fSlow14 + -5.961434752782943)) * fSlow13)); - double fSlow152 = (fSlow151 + fSlow122); - double fSlow153 = (0.9534625892455924 * (cos((fSlow27 + -5.961434752782943)) * fSlow26)); - double fSlow154 = (fSlow153 + fSlow125); - double fSlow155 = (fSlow124 - fSlow125); - double fSlow156 = (fSlow121 - fSlow122); - double fSlow157 = (fSlow129 - fSlow125); - double fSlow158 = (fSlow127 - fSlow122); - double fSlow159 = (fSlow133 - fSlow125); - double fSlow160 = (fSlow131 - fSlow122); - double fSlow161 = (fSlow137 - fSlow125); - double fSlow162 = (fSlow135 - fSlow122); - double fSlow163 = (fSlow141 - fSlow125); - double fSlow164 = (fSlow139 - fSlow122); - double fSlow165 = (fSlow145 - fSlow125); - double fSlow166 = (fSlow143 - fSlow122); - double fSlow167 = (fSlow149 - fSlow125); - double fSlow168 = (fSlow147 - fSlow122); - double fSlow169 = (fSlow153 - fSlow125); - double fSlow170 = (fSlow151 - fSlow122); - double fSlow171 = (fSlow106 - fSlow107); - double fSlow172 = (fSlow103 - fSlow104); - double fSlow173 = (fSlow109 - fSlow107); - double fSlow174 = (fSlow111 - fSlow104); - double fSlow175 = (fSlow113 - fSlow107); - double fSlow176 = (fSlow115 - fSlow104); - double fSlow177 = (fSlow117 - fSlow107); - double fSlow178 = (fSlow119 - fSlow104); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAPanLebedev502.cpp b/source/HOAUGens/HOAPanLebedev502.cpp deleted file mode 100644 index 00c602bc7c..0000000000 --- a/source/HOAUGens/HOAPanLebedev502.cpp +++ /dev/null @@ -1,2277 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAPanLebedev502" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fRec2[2]; - FAUSTFLOAT fcheckbox3; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec7[2]; - double fRec6[2]; - FAUSTFLOAT fslider6; - FAUSTFLOAT fslider7; - double fRec10[2]; - double fRec9[2]; - double fRec8[2]; - double fRec12[2]; - double fRec11[2]; - FAUSTFLOAT fcheckbox4; - double fConst4; - double fConst5; - double fRec14[2]; - double fRec15[2]; - double fRec13[2]; - double fRec16[2]; - double fVec0[2]; - double fRec17[2]; - double fRec19[2]; - double fRec20[2]; - double fRec18[2]; - double fRec22[2]; - double fRec23[2]; - double fRec21[2]; - double fRec24[2]; - double fVec1[2]; - double fRec25[2]; - double fRec27[2]; - double fRec28[2]; - double fRec26[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - double fRec29[2]; - FAUSTFLOAT fbargraph1; - double fRec30[2]; - FAUSTFLOAT fbargraph2; - double fRec31[2]; - FAUSTFLOAT fbargraph3; - double fRec32[2]; - FAUSTFLOAT fbargraph4; - double fRec33[2]; - FAUSTFLOAT fbargraph5; - double fRec34[2]; - FAUSTFLOAT fbargraph6; - double fRec35[2]; - FAUSTFLOAT fbargraph7; - double fRec36[2]; - FAUSTFLOAT fbargraph8; - double fRec37[2]; - FAUSTFLOAT fbargraph9; - double fRec38[2]; - FAUSTFLOAT fbargraph10; - double fRec39[2]; - FAUSTFLOAT fbargraph11; - double fRec40[2]; - FAUSTFLOAT fbargraph12; - double fRec41[2]; - FAUSTFLOAT fbargraph13; - double fRec42[2]; - FAUSTFLOAT fbargraph14; - double fRec43[2]; - FAUSTFLOAT fbargraph15; - double fRec44[2]; - FAUSTFLOAT fbargraph16; - double fRec45[2]; - FAUSTFLOAT fbargraph17; - double fRec46[2]; - FAUSTFLOAT fbargraph18; - double fRec47[2]; - FAUSTFLOAT fbargraph19; - double fRec48[2]; - FAUSTFLOAT fbargraph20; - double fRec49[2]; - FAUSTFLOAT fbargraph21; - double fRec50[2]; - FAUSTFLOAT fbargraph22; - double fRec51[2]; - FAUSTFLOAT fbargraph23; - double fRec52[2]; - FAUSTFLOAT fbargraph24; - double fRec53[2]; - FAUSTFLOAT fbargraph25; - double fRec54[2]; - FAUSTFLOAT fbargraph26; - double fRec55[2]; - FAUSTFLOAT fbargraph27; - double fRec56[2]; - FAUSTFLOAT fbargraph28; - double fRec57[2]; - FAUSTFLOAT fbargraph29; - double fRec58[2]; - FAUSTFLOAT fbargraph30; - double fRec59[2]; - FAUSTFLOAT fbargraph31; - double fRec60[2]; - FAUSTFLOAT fbargraph32; - double fRec61[2]; - FAUSTFLOAT fbargraph33; - double fRec62[2]; - FAUSTFLOAT fbargraph34; - double fRec63[2]; - FAUSTFLOAT fbargraph35; - double fRec64[2]; - FAUSTFLOAT fbargraph36; - double fRec65[2]; - FAUSTFLOAT fbargraph37; - double fRec66[2]; - FAUSTFLOAT fbargraph38; - double fRec67[2]; - FAUSTFLOAT fbargraph39; - double fRec68[2]; - FAUSTFLOAT fbargraph40; - double fRec69[2]; - FAUSTFLOAT fbargraph41; - double fRec70[2]; - FAUSTFLOAT fbargraph42; - double fRec71[2]; - FAUSTFLOAT fbargraph43; - double fRec72[2]; - FAUSTFLOAT fbargraph44; - double fRec73[2]; - FAUSTFLOAT fbargraph45; - double fRec74[2]; - FAUSTFLOAT fbargraph46; - double fRec75[2]; - FAUSTFLOAT fbargraph47; - double fRec76[2]; - FAUSTFLOAT fbargraph48; - double fRec77[2]; - FAUSTFLOAT fbargraph49; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAPanLebedev502"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 50; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); - } - virtual void instanceResetUserInterface() { - fentry0 = 1.07; - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fslider0 = 2.0; - fslider1 = 0.0; - fcheckbox2 = 0.0; - fslider2 = 2.0; - fslider3 = 0.0; - fcheckbox3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fslider6 = 0.0; - fslider7 = 0.0; - fcheckbox4 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "0+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "0+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(&fslider3, "1+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "1+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider7, "1+3", ""); - ui_interface->declare(&fslider7, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider7, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider6, "1+4", ""); - ui_interface->declare(&fslider6, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider6, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox0); - ui_interface->addCheckButton("1", &fcheckbox3); - ui_interface->addCheckButton("2", &fcheckbox4); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openVerticalBox("Outputs"); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("1-25"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41601220", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41603770", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41606390", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41609000", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4160bcd0", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4160e5b0", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "osc", "/output7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41611600", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "osc", "/output8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41614260", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "osc", "/output9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41616f90", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "osc", "/output10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41619d60", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "osc", "/output11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4161cd80", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "osc", "/output12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4161fe10", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "osc", "/output13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41622ef0", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "osc", "/output14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41626060", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "osc", "/output15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41628dc0", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "osc", "/output16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4162bbc0", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "osc", "/output17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4162ea10", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "osc", "/output18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a416318e0", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "osc", "/output19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41634c80", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "osc", "/output20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41637ed0", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "osc", "/output21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4163b180", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "osc", "/output22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4163e4b0", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "osc", "/output23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a416415b0", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "osc", "/output24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41644710", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "osc", "/output25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a416478f0", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("26-50"); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "osc", "/output26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4164ab40", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph26, "osc", "/output27"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4164e490", &fbargraph26, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph27, "osc", "/output28"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41650ff0", &fbargraph27, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph28, "osc", "/output29"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41653bb0", &fbargraph28, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph29, "osc", "/output30"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a416567e0", &fbargraph29, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph30, "osc", "/output31"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41659ee0", &fbargraph30, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph31, "osc", "/output32"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4165d220", &fbargraph31, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph32, "osc", "/output33"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a416605d0", &fbargraph32, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph33, "osc", "/output34"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a416639f0", &fbargraph33, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph34, "osc", "/output35"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41666e80", &fbargraph34, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph35, "osc", "/output36"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4166a380", &fbargraph35, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph36, "osc", "/output37"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4166d860", &fbargraph36, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph37, "osc", "/output38"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41670e20", &fbargraph37, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph38, "osc", "/output39"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41673be0", &fbargraph38, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph39, "osc", "/output40"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41676a00", &fbargraph39, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph40, "osc", "/output41"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41679890", &fbargraph40, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph41, "osc", "/output42"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4167c790", &fbargraph41, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph42, "osc", "/output43"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4167f700", &fbargraph42, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph43, "osc", "/output44"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a416826e0", &fbargraph43, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph44, "osc", "/output45"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41685730", &fbargraph44, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph45, "osc", "/output46"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a416887f0", &fbargraph45, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph46, "osc", "/output47"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4168b920", &fbargraph46, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph47, "osc", "/output48"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a4168eac0", &fbargraph47, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph48, "osc", "/output49"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41691cd0", &fbargraph48, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph49, "osc", "/output50"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8a41694f50", &fbargraph49, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fentry0); - double fSlow1 = (fSlow0 * (1 - double(fcheckbox0))); - double fSlow2 = double(fcheckbox1); - double fSlow3 = double(fslider0); - double fSlow4 = (1 - (fSlow2 * (1 - (1.0 / fSlow3)))); - double fSlow5 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow6 = double(fcheckbox2); - double fSlow7 = double(fslider2); - double fSlow8 = (1 - (fSlow6 * (1 - (1.0 / fSlow7)))); - double fSlow9 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow10 = (3 * (1 - double(fcheckbox3))); - double fSlow11 = double(fslider4); - double fSlow12 = sin(fSlow11); - double fSlow13 = cos(fSlow11); - double fSlow14 = double(fslider5); - double fSlow15 = (fSlow13 * cos(fSlow14)); - double fSlow16 = (6.123233995736766e-17 * fSlow15); - double fSlow17 = (fSlow12 + fSlow16); - double fSlow18 = (fConst3 / fSlow3); - double fSlow19 = (fSlow18 + 1); - double fSlow20 = (fConst2 / (fSlow3 * fSlow19)); - double fSlow21 = (fConst3 / fSlow0); - double fSlow22 = (1.0 / (fSlow21 + 1)); - double fSlow23 = (fSlow2 * fSlow0); - double fSlow24 = ((fSlow23 * fSlow19) / fSlow3); - double fSlow25 = (fConst2 / fSlow0); - double fSlow26 = ((1 - fSlow2) * fSlow0); - double fSlow27 = double(fslider6); - double fSlow28 = sin(fSlow27); - double fSlow29 = cos(fSlow27); - double fSlow30 = double(fslider7); - double fSlow31 = (fSlow29 * cos(fSlow30)); - double fSlow32 = (6.123233995736766e-17 * fSlow31); - double fSlow33 = (fSlow28 + fSlow32); - double fSlow34 = (fConst3 / fSlow7); - double fSlow35 = (fSlow34 + 1); - double fSlow36 = (fConst2 / (fSlow7 * fSlow35)); - double fSlow37 = (fSlow0 * fSlow6); - double fSlow38 = ((fSlow37 * fSlow35) / fSlow7); - double fSlow39 = (fSlow0 * (1 - fSlow6)); - double fSlow40 = (2.5 * (1 - double(fcheckbox4))); - double fSlow41 = ((3 * faustpower<2>(fSlow33)) + -1); - double fSlow42 = faustpower<2>(fSlow21); - double fSlow43 = (1.0 / (((fConst4 / fSlow0) + (3 * fSlow42)) + 1)); - double fSlow44 = (12 * fSlow42); - double fSlow45 = (fSlow44 + (fConst5 / fSlow0)); - double fSlow46 = faustpower<2>(fSlow34); - double fSlow47 = (((fConst4 / fSlow7) + (3 * fSlow46)) + 1); - double fSlow48 = ((fSlow37 * fSlow47) / fSlow7); - double fSlow49 = (1.0 / fSlow47); - double fSlow50 = (12 * fSlow46); - double fSlow51 = ((fConst5 / fSlow7) + fSlow50); - double fSlow52 = ((3 * faustpower<2>(fSlow17)) + -1); - double fSlow53 = faustpower<2>(fSlow18); - double fSlow54 = (((fConst4 / fSlow3) + (3 * fSlow53)) + 1); - double fSlow55 = ((fSlow23 * fSlow54) / fSlow3); - double fSlow56 = (1.0 / fSlow54); - double fSlow57 = (12 * fSlow53); - double fSlow58 = ((fConst5 / fSlow3) + fSlow57); - double fSlow59 = ((3 * faustpower<2>(fSlow31)) + -1); - double fSlow60 = ((3 * faustpower<2>(fSlow15)) + -1); - double fSlow61 = (fSlow29 * cos((fSlow30 + -1.5707963267948966))); - double fSlow62 = (fSlow13 * cos((fSlow14 + -1.5707963267948966))); - double fSlow63 = ((3 * faustpower<2>(fSlow61)) + -1); - double fSlow64 = ((3 * faustpower<2>(fSlow62)) + -1); - double fSlow65 = (fSlow13 * cos((fSlow14 + -3.141592653589793))); - double fSlow66 = ((3 * faustpower<2>(fSlow65)) + -1); - double fSlow67 = (fSlow29 * cos((fSlow30 + -3.141592653589793))); - double fSlow68 = ((3 * faustpower<2>(fSlow67)) + -1); - double fSlow69 = (fSlow13 * cos((fSlow14 + -4.71238898038469))); - double fSlow70 = ((3 * faustpower<2>(fSlow69)) + -1); - double fSlow71 = (fSlow29 * cos((fSlow30 + -4.71238898038469))); - double fSlow72 = ((3 * faustpower<2>(fSlow71)) + -1); - double fSlow73 = (fSlow16 - fSlow12); - double fSlow74 = (fSlow32 - fSlow28); - double fSlow75 = ((3 * faustpower<2>(fSlow73)) + -1); - double fSlow76 = ((3 * faustpower<2>(fSlow74)) + -1); - double fSlow77 = (0.7071067811865476 * fSlow15); - double fSlow78 = (0.7071067811865475 * fSlow12); - double fSlow79 = (fSlow77 + fSlow78); - double fSlow80 = (0.7071067811865476 * fSlow31); - double fSlow81 = (0.7071067811865475 * fSlow28); - double fSlow82 = (fSlow80 + fSlow81); - double fSlow83 = ((3 * faustpower<2>(fSlow79)) + -1); - double fSlow84 = ((3 * faustpower<2>(fSlow82)) + -1); - double fSlow85 = (0.7071067811865476 * fSlow61); - double fSlow86 = (fSlow81 + fSlow85); - double fSlow87 = ((3 * faustpower<2>(fSlow86)) + -1); - double fSlow88 = (0.7071067811865476 * fSlow62); - double fSlow89 = (fSlow78 + fSlow88); - double fSlow90 = ((3 * faustpower<2>(fSlow89)) + -1); - double fSlow91 = (0.7071067811865476 * fSlow65); - double fSlow92 = (fSlow78 + fSlow91); - double fSlow93 = (0.7071067811865476 * fSlow67); - double fSlow94 = (fSlow81 + fSlow93); - double fSlow95 = ((3 * faustpower<2>(fSlow92)) + -1); - double fSlow96 = ((3 * faustpower<2>(fSlow94)) + -1); - double fSlow97 = (0.7071067811865476 * fSlow71); - double fSlow98 = (fSlow81 + fSlow97); - double fSlow99 = (0.7071067811865476 * fSlow69); - double fSlow100 = (fSlow78 + fSlow99); - double fSlow101 = ((3 * faustpower<2>(fSlow98)) + -1); - double fSlow102 = ((3 * faustpower<2>(fSlow100)) + -1); - double fSlow103 = (fSlow13 * cos((fSlow14 + -0.7853981633974483))); - double fSlow104 = ((3 * faustpower<2>(fSlow103)) + -1); - double fSlow105 = (fSlow29 * cos((fSlow30 + -0.7853981633974483))); - double fSlow106 = ((3 * faustpower<2>(fSlow105)) + -1); - double fSlow107 = (fSlow29 * cos((fSlow30 + -2.356194490192345))); - double fSlow108 = ((3 * faustpower<2>(fSlow107)) + -1); - double fSlow109 = (fSlow13 * cos((fSlow14 + -2.356194490192345))); - double fSlow110 = ((3 * faustpower<2>(fSlow109)) + -1); - double fSlow111 = (fSlow13 * cos((fSlow14 + -3.9269908169872414))); - double fSlow112 = ((3 * faustpower<2>(fSlow111)) + -1); - double fSlow113 = (fSlow29 * cos((fSlow30 + -3.9269908169872414))); - double fSlow114 = ((3 * faustpower<2>(fSlow113)) + -1); - double fSlow115 = (fSlow13 * cos((fSlow14 + -5.497787143782138))); - double fSlow116 = ((3 * faustpower<2>(fSlow115)) + -1); - double fSlow117 = (fSlow29 * cos((fSlow30 + -5.497787143782138))); - double fSlow118 = ((3 * faustpower<2>(fSlow117)) + -1); - double fSlow119 = (fSlow77 - fSlow78); - double fSlow120 = (fSlow80 - fSlow81); - double fSlow121 = ((3 * faustpower<2>(fSlow119)) + -1); - double fSlow122 = ((3 * faustpower<2>(fSlow120)) + -1); - double fSlow123 = (fSlow85 - fSlow81); - double fSlow124 = ((3 * faustpower<2>(fSlow123)) + -1); - double fSlow125 = (fSlow88 - fSlow78); - double fSlow126 = ((3 * faustpower<2>(fSlow125)) + -1); - double fSlow127 = (fSlow91 - fSlow78); - double fSlow128 = ((3 * faustpower<2>(fSlow127)) + -1); - double fSlow129 = (fSlow93 - fSlow81); - double fSlow130 = ((3 * faustpower<2>(fSlow129)) + -1); - double fSlow131 = (fSlow99 - fSlow78); - double fSlow132 = ((3 * faustpower<2>(fSlow131)) + -1); - double fSlow133 = (fSlow97 - fSlow81); - double fSlow134 = ((3 * faustpower<2>(fSlow133)) + -1); - double fSlow135 = (0.8164965809277259 * fSlow105); - double fSlow136 = (0.5773502691896258 * fSlow28); - double fSlow137 = (fSlow135 + fSlow136); - double fSlow138 = ((3 * faustpower<2>(fSlow137)) + -1); - double fSlow139 = (0.8164965809277259 * fSlow103); - double fSlow140 = (0.5773502691896258 * fSlow12); - double fSlow141 = (fSlow139 + fSlow140); - double fSlow142 = ((3 * faustpower<2>(fSlow141)) + -1); - double fSlow143 = (0.8164965809277259 * fSlow109); - double fSlow144 = (fSlow140 + fSlow143); - double fSlow145 = ((3 * faustpower<2>(fSlow144)) + -1); - double fSlow146 = (0.8164965809277259 * fSlow107); - double fSlow147 = (fSlow136 + fSlow146); - double fSlow148 = ((3 * faustpower<2>(fSlow147)) + -1); - double fSlow149 = (0.8164965809277259 * fSlow113); - double fSlow150 = (fSlow136 + fSlow149); - double fSlow151 = (0.8164965809277259 * fSlow111); - double fSlow152 = (fSlow140 + fSlow151); - double fSlow153 = ((3 * faustpower<2>(fSlow150)) + -1); - double fSlow154 = ((3 * faustpower<2>(fSlow152)) + -1); - double fSlow155 = (0.8164965809277259 * fSlow115); - double fSlow156 = (fSlow140 + fSlow155); - double fSlow157 = (0.8164965809277259 * fSlow117); - double fSlow158 = (fSlow136 + fSlow157); - double fSlow159 = ((3 * faustpower<2>(fSlow156)) + -1); - double fSlow160 = ((3 * faustpower<2>(fSlow158)) + -1); - double fSlow161 = (fSlow135 - fSlow136); - double fSlow162 = ((3 * faustpower<2>(fSlow161)) + -1); - double fSlow163 = (fSlow139 - fSlow140); - double fSlow164 = ((3 * faustpower<2>(fSlow163)) + -1); - double fSlow165 = (fSlow143 - fSlow140); - double fSlow166 = ((3 * faustpower<2>(fSlow165)) + -1); - double fSlow167 = (fSlow146 - fSlow136); - double fSlow168 = ((3 * faustpower<2>(fSlow167)) + -1); - double fSlow169 = (fSlow151 - fSlow140); - double fSlow170 = ((3 * faustpower<2>(fSlow169)) + -1); - double fSlow171 = (fSlow149 - fSlow136); - double fSlow172 = ((3 * faustpower<2>(fSlow171)) + -1); - double fSlow173 = (fSlow155 - fSlow140); - double fSlow174 = ((3 * faustpower<2>(fSlow173)) + -1); - double fSlow175 = (fSlow157 - fSlow136); - double fSlow176 = ((3 * faustpower<2>(fSlow175)) + -1); - double fSlow177 = (0.4264014327112203 * (fSlow13 * cos((fSlow14 + -0.7853981633974484)))); - double fSlow178 = (0.9045340337332911 * fSlow12); - double fSlow179 = (fSlow177 + fSlow178); - double fSlow180 = (0.4264014327112203 * (fSlow29 * cos((fSlow30 + -0.7853981633974484)))); - double fSlow181 = (0.9045340337332911 * fSlow28); - double fSlow182 = (fSlow180 + fSlow181); - double fSlow183 = ((3 * faustpower<2>(fSlow182)) + -1); - double fSlow184 = ((3 * faustpower<2>(fSlow179)) + -1); - double fSlow185 = (0.4264014327112203 * fSlow107); - double fSlow186 = (fSlow181 + fSlow185); - double fSlow187 = ((3 * faustpower<2>(fSlow186)) + -1); - double fSlow188 = (0.4264014327112203 * fSlow109); - double fSlow189 = (fSlow178 + fSlow188); - double fSlow190 = ((3 * faustpower<2>(fSlow189)) + -1); - double fSlow191 = (0.4264014327112203 * fSlow113); - double fSlow192 = (fSlow181 + fSlow191); - double fSlow193 = ((3 * faustpower<2>(fSlow192)) + -1); - double fSlow194 = (0.4264014327112203 * fSlow111); - double fSlow195 = (fSlow178 + fSlow194); - double fSlow196 = ((3 * faustpower<2>(fSlow195)) + -1); - double fSlow197 = (0.4264014327112203 * fSlow115); - double fSlow198 = (fSlow178 + fSlow197); - double fSlow199 = ((3 * faustpower<2>(fSlow198)) + -1); - double fSlow200 = (0.4264014327112203 * fSlow117); - double fSlow201 = (fSlow181 + fSlow200); - double fSlow202 = ((3 * faustpower<2>(fSlow201)) + -1); - double fSlow203 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -0.32175055439664263)))); - double fSlow204 = (0.3015113445777635 * fSlow28); - double fSlow205 = (fSlow203 + fSlow204); - double fSlow206 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -0.32175055439664263)))); - double fSlow207 = (0.3015113445777635 * fSlow12); - double fSlow208 = (fSlow206 + fSlow207); - double fSlow209 = ((3 * faustpower<2>(fSlow205)) + -1); - double fSlow210 = ((3 * faustpower<2>(fSlow208)) + -1); - double fSlow211 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -1.2490457723982544)))); - double fSlow212 = (fSlow204 + fSlow211); - double fSlow213 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -1.2490457723982544)))); - double fSlow214 = (fSlow207 + fSlow213); - double fSlow215 = ((3 * faustpower<2>(fSlow212)) + -1); - double fSlow216 = ((3 * faustpower<2>(fSlow214)) + -1); - double fSlow217 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -1.8925468811915387)))); - double fSlow218 = (fSlow204 + fSlow217); - double fSlow219 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -1.8925468811915387)))); - double fSlow220 = (fSlow207 + fSlow219); - double fSlow221 = ((3 * faustpower<2>(fSlow218)) + -1); - double fSlow222 = ((3 * faustpower<2>(fSlow220)) + -1); - double fSlow223 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -2.8198420991931505)))); - double fSlow224 = (fSlow204 + fSlow223); - double fSlow225 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -2.8198420991931505)))); - double fSlow226 = (fSlow207 + fSlow225); - double fSlow227 = ((3 * faustpower<2>(fSlow224)) + -1); - double fSlow228 = ((3 * faustpower<2>(fSlow226)) + -1); - double fSlow229 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -3.4633432079864357)))); - double fSlow230 = (fSlow204 + fSlow229); - double fSlow231 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -3.4633432079864357)))); - double fSlow232 = (fSlow207 + fSlow231); - double fSlow233 = ((3 * faustpower<2>(fSlow230)) + -1); - double fSlow234 = ((3 * faustpower<2>(fSlow232)) + -1); - double fSlow235 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -4.3906384259880475)))); - double fSlow236 = (fSlow204 + fSlow235); - double fSlow237 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -4.3906384259880475)))); - double fSlow238 = (fSlow207 + fSlow237); - double fSlow239 = ((3 * faustpower<2>(fSlow236)) + -1); - double fSlow240 = ((3 * faustpower<2>(fSlow238)) + -1); - double fSlow241 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -5.034139534781332)))); - double fSlow242 = (fSlow204 + fSlow241); - double fSlow243 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -5.034139534781332)))); - double fSlow244 = (fSlow207 + fSlow243); - double fSlow245 = ((3 * faustpower<2>(fSlow242)) + -1); - double fSlow246 = ((3 * faustpower<2>(fSlow244)) + -1); - double fSlow247 = (0.9534625892455924 * (fSlow29 * cos((fSlow30 + -5.961434752782943)))); - double fSlow248 = (fSlow204 + fSlow247); - double fSlow249 = (0.9534625892455924 * (fSlow13 * cos((fSlow14 + -5.961434752782943)))); - double fSlow250 = (fSlow207 + fSlow249); - double fSlow251 = ((3 * faustpower<2>(fSlow248)) + -1); - double fSlow252 = ((3 * faustpower<2>(fSlow250)) + -1); - double fSlow253 = (fSlow206 - fSlow207); - double fSlow254 = ((3 * faustpower<2>(fSlow253)) + -1); - double fSlow255 = (fSlow203 - fSlow204); - double fSlow256 = ((3 * faustpower<2>(fSlow255)) + -1); - double fSlow257 = (fSlow213 - fSlow207); - double fSlow258 = ((3 * faustpower<2>(fSlow257)) + -1); - double fSlow259 = (fSlow211 - fSlow204); - double fSlow260 = ((3 * faustpower<2>(fSlow259)) + -1); - double fSlow261 = (fSlow219 - fSlow207); - double fSlow262 = (fSlow217 - fSlow204); - double fSlow263 = ((3 * faustpower<2>(fSlow262)) + -1); - double fSlow264 = ((3 * faustpower<2>(fSlow261)) + -1); - double fSlow265 = (fSlow225 - fSlow207); - double fSlow266 = ((3 * faustpower<2>(fSlow265)) + -1); - double fSlow267 = (fSlow223 - fSlow204); - double fSlow268 = ((3 * faustpower<2>(fSlow267)) + -1); - double fSlow269 = (fSlow231 - fSlow207); - double fSlow270 = ((3 * faustpower<2>(fSlow269)) + -1); - double fSlow271 = (fSlow229 - fSlow204); - double fSlow272 = ((3 * faustpower<2>(fSlow271)) + -1); - double fSlow273 = (fSlow237 - fSlow207); - double fSlow274 = ((3 * faustpower<2>(fSlow273)) + -1); - double fSlow275 = (fSlow235 - fSlow204); - double fSlow276 = ((3 * faustpower<2>(fSlow275)) + -1); - double fSlow277 = (fSlow243 - fSlow207); - double fSlow278 = ((3 * faustpower<2>(fSlow277)) + -1); - double fSlow279 = (fSlow241 - fSlow204); - double fSlow280 = ((3 * faustpower<2>(fSlow279)) + -1); - double fSlow281 = (fSlow249 - fSlow207); - double fSlow282 = ((3 * faustpower<2>(fSlow281)) + -1); - double fSlow283 = (fSlow247 - fSlow204); - double fSlow284 = ((3 * faustpower<2>(fSlow283)) + -1); - double fSlow285 = (fSlow177 - fSlow178); - double fSlow286 = ((3 * faustpower<2>(fSlow285)) + -1); - double fSlow287 = (fSlow180 - fSlow181); - double fSlow288 = ((3 * faustpower<2>(fSlow287)) + -1); - double fSlow289 = (fSlow188 - fSlow178); - double fSlow290 = ((3 * faustpower<2>(fSlow289)) + -1); - double fSlow291 = (fSlow185 - fSlow181); - double fSlow292 = ((3 * faustpower<2>(fSlow291)) + -1); - double fSlow293 = (fSlow194 - fSlow178); - double fSlow294 = ((3 * faustpower<2>(fSlow293)) + -1); - double fSlow295 = (fSlow191 - fSlow181); - double fSlow296 = ((3 * faustpower<2>(fSlow295)) + -1); - double fSlow297 = (fSlow197 - fSlow178); - double fSlow298 = ((3 * faustpower<2>(fSlow297)) + -1); - double fSlow299 = (fSlow200 - fSlow181); - double fSlow300 = ((3 * faustpower<2>(fSlow299)) + -1); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAPanLebedev503.cpp b/source/HOAUGens/HOAPanLebedev503.cpp deleted file mode 100644 index 72cce2de23..0000000000 --- a/source/HOAUGens/HOAPanLebedev503.cpp +++ /dev/null @@ -1,2611 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAPanLebedev503" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fConst2; - FAUSTFLOAT fentry0; - double fConst3; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fRec2[2]; - double fConst4; - double fRec3[2]; - double fRec4[2]; - double fRec1[2]; - double fRec5[2]; - double fVec0[2]; - double fRec6[2]; - double fRec8[2]; - double fRec9[2]; - double fRec7[2]; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider6; - FAUSTFLOAT fslider7; - double fRec11[2]; - double fRec12[2]; - double fRec13[2]; - double fRec10[2]; - double fRec14[2]; - double fVec1[2]; - double fRec15[2]; - double fRec17[2]; - double fRec18[2]; - double fRec16[2]; - FAUSTFLOAT fcheckbox3; - double fConst5; - double fConst6; - double fConst7; - double fRec23[2]; - double fRec22[2]; - double fConst8; - double fRec21[2]; - double fRec24[2]; - double fVec2[2]; - double fRec25[2]; - double fRec26[2]; - double fRec20[2]; - double fRec19[2]; - double fRec30[2]; - double fRec29[2]; - double fRec28[2]; - double fRec31[2]; - double fRec27[2]; - FAUSTFLOAT fcheckbox4; - double fConst9; - double fRec34[2]; - double fRec33[2]; - double fRec32[2]; - double fRec36[2]; - double fRec35[2]; - double fRec39[2]; - double fRec38[2]; - double fRec37[2]; - double fRec41[2]; - double fRec40[2]; - double fRec46[2]; - double fRec45[2]; - double fRec44[2]; - double fRec47[2]; - double fVec3[2]; - double fRec48[2]; - double fRec49[2]; - double fRec43[2]; - double fRec42[2]; - double fRec53[2]; - double fRec52[2]; - double fRec51[2]; - double fRec54[2]; - double fRec50[2]; - FAUSTFLOAT fcheckbox5; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - double fRec55[2]; - FAUSTFLOAT fbargraph1; - double fRec56[2]; - FAUSTFLOAT fbargraph2; - double fRec57[2]; - FAUSTFLOAT fbargraph3; - double fRec58[2]; - FAUSTFLOAT fbargraph4; - double fRec59[2]; - FAUSTFLOAT fbargraph5; - double fRec60[2]; - FAUSTFLOAT fbargraph6; - double fRec61[2]; - FAUSTFLOAT fbargraph7; - double fRec62[2]; - FAUSTFLOAT fbargraph8; - double fRec63[2]; - FAUSTFLOAT fbargraph9; - double fRec64[2]; - FAUSTFLOAT fbargraph10; - double fRec65[2]; - FAUSTFLOAT fbargraph11; - double fRec66[2]; - FAUSTFLOAT fbargraph12; - double fRec67[2]; - FAUSTFLOAT fbargraph13; - double fRec68[2]; - FAUSTFLOAT fbargraph14; - double fRec69[2]; - FAUSTFLOAT fbargraph15; - double fRec70[2]; - FAUSTFLOAT fbargraph16; - double fRec71[2]; - FAUSTFLOAT fbargraph17; - double fRec72[2]; - FAUSTFLOAT fbargraph18; - double fRec73[2]; - FAUSTFLOAT fbargraph19; - double fRec74[2]; - FAUSTFLOAT fbargraph20; - double fRec75[2]; - FAUSTFLOAT fbargraph21; - double fRec76[2]; - FAUSTFLOAT fbargraph22; - double fRec77[2]; - FAUSTFLOAT fbargraph23; - double fRec78[2]; - FAUSTFLOAT fbargraph24; - double fRec79[2]; - FAUSTFLOAT fbargraph25; - double fRec80[2]; - FAUSTFLOAT fbargraph26; - double fRec81[2]; - FAUSTFLOAT fbargraph27; - double fRec82[2]; - FAUSTFLOAT fbargraph28; - double fRec83[2]; - FAUSTFLOAT fbargraph29; - double fRec84[2]; - FAUSTFLOAT fbargraph30; - double fRec85[2]; - FAUSTFLOAT fbargraph31; - double fRec86[2]; - FAUSTFLOAT fbargraph32; - double fRec87[2]; - FAUSTFLOAT fbargraph33; - double fRec88[2]; - FAUSTFLOAT fbargraph34; - double fRec89[2]; - FAUSTFLOAT fbargraph35; - double fRec90[2]; - FAUSTFLOAT fbargraph36; - double fRec91[2]; - FAUSTFLOAT fbargraph37; - double fRec92[2]; - FAUSTFLOAT fbargraph38; - double fRec93[2]; - FAUSTFLOAT fbargraph39; - double fRec94[2]; - FAUSTFLOAT fbargraph40; - double fRec95[2]; - FAUSTFLOAT fbargraph41; - double fRec96[2]; - FAUSTFLOAT fbargraph42; - double fRec97[2]; - FAUSTFLOAT fbargraph43; - double fRec98[2]; - FAUSTFLOAT fbargraph44; - double fRec99[2]; - FAUSTFLOAT fbargraph45; - double fRec100[2]; - FAUSTFLOAT fbargraph46; - double fRec101[2]; - FAUSTFLOAT fbargraph47; - double fRec102[2]; - FAUSTFLOAT fbargraph48; - double fRec103[2]; - FAUSTFLOAT fbargraph49; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAPanLebedev503"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 50; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (5.1e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (1.02e+03 / fConst0); - fConst5 = (789.5430205728705 / fConst0); - fConst6 = (394.7715102864353 / fConst0); - fConst7 = (625.2284897135664 / fConst0); - fConst8 = (1250.4569794271329 / fConst0); - fConst9 = (3.4e+02 / fConst0); - } - virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fslider0 = 0.0; - fslider1 = 0.0; - fentry0 = 1.07; - fcheckbox1 = 0.0; - fslider2 = 2.0; - fslider3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fcheckbox2 = 0.0; - fslider6 = 2.0; - fslider7 = 0.0; - fcheckbox3 = 0.0; - fcheckbox4 = 0.0; - fcheckbox5 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec88[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec91[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<2; i++) fRec93[i] = 0; - for (int i=0; i<2; i++) fRec94[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<2; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec98[i] = 0; - for (int i=0; i<2; i++) fRec99[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; - for (int i=0; i<2; i++) fRec103[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider7, "0+1", ""); - ui_interface->declare(&fslider7, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider7, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider6, "0+2", ""); - ui_interface->declare(&fslider6, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider6, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "0+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "0+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(&fslider3, "1+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "1+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider1, "1+3", ""); - ui_interface->declare(&fslider1, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider0, "1+4", ""); - ui_interface->declare(&fslider0, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox5); - ui_interface->addCheckButton("1", &fcheckbox4); - ui_interface->addCheckButton("2", &fcheckbox0); - ui_interface->addCheckButton("3", &fcheckbox3); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openVerticalBox("Outputs"); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("1-25"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6637360", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d663a5f0", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d663de10", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6641690", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6645010", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66483d0", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "osc", "/output7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d664bf60", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "osc", "/output8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d664f670", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "osc", "/output9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6652e10", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "osc", "/output10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6656640", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "osc", "/output11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d665a250", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "osc", "/output12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d665de10", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "osc", "/output13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6661c50", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "osc", "/output14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66659c0", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "osc", "/output15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6669300", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "osc", "/output16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d666cbf0", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "osc", "/output17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6670550", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "osc", "/output18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6673f20", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "osc", "/output19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66780c0", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "osc", "/output20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d667bdd0", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "osc", "/output21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d667fb90", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "osc", "/output22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66839a0", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "osc", "/output23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6687590", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "osc", "/output24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d668b200", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "osc", "/output25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d668eed0", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("26-50"); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "osc", "/output26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6692c10", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph26, "osc", "/output27"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d6696d20", &fbargraph26, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph27, "osc", "/output28"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d669a3a0", &fbargraph27, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph28, "osc", "/output29"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d669da00", &fbargraph28, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph29, "osc", "/output30"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66a1170", &fbargraph29, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph30, "osc", "/output31"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66a5340", &fbargraph30, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph31, "osc", "/output32"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66a90d0", &fbargraph31, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph32, "osc", "/output33"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66acf60", &fbargraph32, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph33, "osc", "/output34"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66b0ec0", &fbargraph33, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph34, "osc", "/output35"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66b4e30", &fbargraph34, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph35, "osc", "/output36"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66b8e00", &fbargraph35, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph36, "osc", "/output37"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66bce20", &fbargraph36, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph37, "osc", "/output38"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66c0eb0", &fbargraph37, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph38, "osc", "/output39"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66c4780", &fbargraph38, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph39, "osc", "/output40"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66c8060", &fbargraph39, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph40, "osc", "/output41"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66cb980", &fbargraph40, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph41, "osc", "/output42"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66cf340", &fbargraph41, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph42, "osc", "/output43"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66d2da0", &fbargraph42, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph43, "osc", "/output44"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66d6810", &fbargraph43, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph44, "osc", "/output45"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66da350", &fbargraph44, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph45, "osc", "/output46"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66dded0", &fbargraph45, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph46, "osc", "/output47"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66e1ac0", &fbargraph46, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph47, "osc", "/output48"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66e5740", &fbargraph47, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph48, "osc", "/output49"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66e9430", &fbargraph48, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph49, "osc", "/output50"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f83d66ed190", &fbargraph49, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (2.5 * (1 - double(fcheckbox0))); - double fSlow1 = double(fslider0); - double fSlow2 = sin(fSlow1); - double fSlow3 = cos(fSlow1); - double fSlow4 = double(fslider1); - double fSlow5 = (fSlow3 * cos(fSlow4)); - double fSlow6 = (6.123233995736766e-17 * fSlow5); - double fSlow7 = (fSlow2 + fSlow6); - double fSlow8 = faustpower<2>(fSlow7); - double fSlow9 = ((3 * fSlow8) + -1); - double fSlow10 = double(fentry0); - double fSlow11 = (fConst3 / fSlow10); - double fSlow12 = faustpower<2>(fSlow11); - double fSlow13 = (1.0 / (((fConst2 / fSlow10) + (3 * fSlow12)) + 1)); - double fSlow14 = double(fcheckbox1); - double fSlow15 = (fSlow10 * fSlow14); - double fSlow16 = double(fslider2); - double fSlow17 = (fConst3 / fSlow16); - double fSlow18 = faustpower<2>(fSlow17); - double fSlow19 = (((fConst2 / fSlow16) + (3 * fSlow18)) + 1); - double fSlow20 = ((fSlow15 * fSlow19) / fSlow16); - double fSlow21 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow22 = (12 * fSlow12); - double fSlow23 = (fSlow22 + (fConst4 / fSlow10)); - double fSlow24 = (1.0 / fSlow19); - double fSlow25 = (12 * fSlow18); - double fSlow26 = ((fConst4 / fSlow16) + fSlow25); - double fSlow27 = (fSlow10 * (1 - fSlow14)); - double fSlow28 = double(fslider4); - double fSlow29 = sin(fSlow28); - double fSlow30 = cos(fSlow28); - double fSlow31 = double(fslider5); - double fSlow32 = (fSlow30 * cos(fSlow31)); - double fSlow33 = (6.123233995736766e-17 * fSlow32); - double fSlow34 = (fSlow29 + fSlow33); - double fSlow35 = faustpower<2>(fSlow34); - double fSlow36 = ((3 * fSlow35) + -1); - double fSlow37 = double(fcheckbox2); - double fSlow38 = (fSlow37 * fSlow10); - double fSlow39 = double(fslider6); - double fSlow40 = (fConst3 / fSlow39); - double fSlow41 = faustpower<2>(fSlow40); - double fSlow42 = (((fConst2 / fSlow39) + (3 * fSlow41)) + 1); - double fSlow43 = ((fSlow38 * fSlow42) / fSlow39); - double fSlow44 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider7)))); - double fSlow45 = (1.0 / fSlow42); - double fSlow46 = (12 * fSlow41); - double fSlow47 = ((fConst4 / fSlow39) + fSlow46); - double fSlow48 = ((1 - fSlow37) * fSlow10); - double fSlow49 = (1 - double(fcheckbox3)); - double fSlow50 = (3.5 * (fSlow49 * ((5 * fSlow35) + -3))); - double fSlow51 = ((fConst6 / fSlow39) + 1); - double fSlow52 = (fConst5 / (fSlow39 * fSlow51)); - double fSlow53 = (1.0 / ((fConst6 / fSlow10) + 1)); - double fSlow54 = (1.0 / (((6.45943269348338 * fSlow12) + (fConst7 / fSlow10)) + 1)); - double fSlow55 = (((fConst7 / fSlow39) + (6.45943269348338 * fSlow41)) + 1); - double fSlow56 = ((fSlow38 * fSlow55) / fSlow39); - double fSlow57 = (25.83773077393352 * fSlow12); - double fSlow58 = (fSlow57 + (fConst8 / fSlow10)); - double fSlow59 = (1.0 / fSlow55); - double fSlow60 = (25.83773077393352 * fSlow41); - double fSlow61 = (fSlow60 + (fConst8 / fSlow39)); - double fSlow62 = (fConst5 / fSlow10); - double fSlow63 = (3 * (1 - double(fcheckbox4))); - double fSlow64 = (fSlow40 + 1); - double fSlow65 = (fConst9 / (fSlow39 * fSlow64)); - double fSlow66 = (1.0 / (fSlow11 + 1)); - double fSlow67 = ((fSlow38 * fSlow64) / fSlow39); - double fSlow68 = (fConst9 / fSlow10); - double fSlow69 = (fSlow17 + 1); - double fSlow70 = (fConst9 / (fSlow16 * fSlow69)); - double fSlow71 = ((fSlow15 * fSlow69) / fSlow16); - double fSlow72 = (3.5 * (fSlow49 * ((5 * fSlow8) + -3))); - double fSlow73 = ((fConst6 / fSlow16) + 1); - double fSlow74 = (fConst5 / (fSlow16 * fSlow73)); - double fSlow75 = (((fConst7 / fSlow16) + (6.45943269348338 * fSlow18)) + 1); - double fSlow76 = ((fSlow15 * fSlow75) / fSlow16); - double fSlow77 = (1.0 / fSlow75); - double fSlow78 = (25.83773077393352 * fSlow18); - double fSlow79 = ((fConst8 / fSlow16) + fSlow78); - double fSlow80 = (fSlow10 * (1 - double(fcheckbox5))); - double fSlow81 = (1 - (fSlow37 * (1 - (1.0 / fSlow39)))); - double fSlow82 = (1 - (fSlow14 * (1 - (1.0 / fSlow16)))); - double fSlow83 = (3.5 * fSlow49); - double fSlow84 = ((5 * faustpower<3>(fSlow5)) - (3 * fSlow5)); - double fSlow85 = ((5 * faustpower<3>(fSlow32)) - (3 * fSlow32)); - double fSlow86 = ((3 * faustpower<2>(fSlow5)) + -1); - double fSlow87 = ((3 * faustpower<2>(fSlow32)) + -1); - double fSlow88 = (fSlow3 * cos((fSlow4 + -1.5707963267948966))); - double fSlow89 = ((5 * faustpower<3>(fSlow88)) - (3 * fSlow88)); - double fSlow90 = (fSlow30 * cos((fSlow31 + -1.5707963267948966))); - double fSlow91 = ((5 * faustpower<3>(fSlow90)) - (3 * fSlow90)); - double fSlow92 = ((3 * faustpower<2>(fSlow90)) + -1); - double fSlow93 = ((3 * faustpower<2>(fSlow88)) + -1); - double fSlow94 = (fSlow3 * cos((fSlow4 + -3.141592653589793))); - double fSlow95 = ((5 * faustpower<3>(fSlow94)) - (3 * fSlow94)); - double fSlow96 = (fSlow30 * cos((fSlow31 + -3.141592653589793))); - double fSlow97 = ((5 * faustpower<3>(fSlow96)) - (3 * fSlow96)); - double fSlow98 = ((3 * faustpower<2>(fSlow96)) + -1); - double fSlow99 = ((3 * faustpower<2>(fSlow94)) + -1); - double fSlow100 = (fSlow3 * cos((fSlow4 + -4.71238898038469))); - double fSlow101 = ((5 * faustpower<3>(fSlow100)) - (3 * fSlow100)); - double fSlow102 = (fSlow30 * cos((fSlow31 + -4.71238898038469))); - double fSlow103 = ((5 * faustpower<3>(fSlow102)) - (3 * fSlow102)); - double fSlow104 = ((3 * faustpower<2>(fSlow102)) + -1); - double fSlow105 = ((3 * faustpower<2>(fSlow100)) + -1); - double fSlow106 = (fSlow6 - fSlow2); - double fSlow107 = faustpower<2>(fSlow106); - double fSlow108 = ((3 * fSlow107) + -1); - double fSlow109 = (fSlow33 - fSlow29); - double fSlow110 = faustpower<2>(fSlow109); - double fSlow111 = ((3 * fSlow110) + -1); - double fSlow112 = (3.5 * (fSlow49 * ((5 * fSlow107) + -3))); - double fSlow113 = (3.5 * (fSlow49 * ((5 * fSlow110) + -3))); - double fSlow114 = (0.7071067811865476 * fSlow5); - double fSlow115 = (0.7071067811865475 * fSlow2); - double fSlow116 = (fSlow114 + fSlow115); - double fSlow117 = faustpower<2>(fSlow116); - double fSlow118 = (3.5 * (fSlow49 * ((5 * fSlow117) + -3))); - double fSlow119 = (0.7071067811865476 * fSlow32); - double fSlow120 = (0.7071067811865475 * fSlow29); - double fSlow121 = (fSlow119 + fSlow120); - double fSlow122 = faustpower<2>(fSlow121); - double fSlow123 = (3.5 * (fSlow49 * ((5 * fSlow122) + -3))); - double fSlow124 = ((3 * fSlow122) + -1); - double fSlow125 = ((3 * fSlow117) + -1); - double fSlow126 = (0.7071067811865476 * fSlow88); - double fSlow127 = (fSlow115 + fSlow126); - double fSlow128 = faustpower<2>(fSlow127); - double fSlow129 = (3.5 * (fSlow49 * ((5 * fSlow128) + -3))); - double fSlow130 = (0.7071067811865476 * fSlow90); - double fSlow131 = (fSlow120 + fSlow130); - double fSlow132 = faustpower<2>(fSlow131); - double fSlow133 = (3.5 * (fSlow49 * ((5 * fSlow132) + -3))); - double fSlow134 = ((3 * fSlow132) + -1); - double fSlow135 = ((3 * fSlow128) + -1); - double fSlow136 = (0.7071067811865476 * fSlow94); - double fSlow137 = (fSlow115 + fSlow136); - double fSlow138 = faustpower<2>(fSlow137); - double fSlow139 = (3.5 * (fSlow49 * ((5 * fSlow138) + -3))); - double fSlow140 = (0.7071067811865476 * fSlow96); - double fSlow141 = (fSlow120 + fSlow140); - double fSlow142 = faustpower<2>(fSlow141); - double fSlow143 = (3.5 * (fSlow49 * ((5 * fSlow142) + -3))); - double fSlow144 = ((3 * fSlow142) + -1); - double fSlow145 = ((3 * fSlow138) + -1); - double fSlow146 = (0.7071067811865476 * fSlow102); - double fSlow147 = (fSlow120 + fSlow146); - double fSlow148 = faustpower<2>(fSlow147); - double fSlow149 = (3.5 * (fSlow49 * ((5 * fSlow148) + -3))); - double fSlow150 = (0.7071067811865476 * fSlow100); - double fSlow151 = (fSlow115 + fSlow150); - double fSlow152 = faustpower<2>(fSlow151); - double fSlow153 = (3.5 * (fSlow49 * ((5 * fSlow152) + -3))); - double fSlow154 = ((3 * fSlow152) + -1); - double fSlow155 = ((3 * fSlow148) + -1); - double fSlow156 = (fSlow3 * cos((fSlow4 + -0.7853981633974483))); - double fSlow157 = ((3 * faustpower<2>(fSlow156)) + -1); - double fSlow158 = (fSlow30 * cos((fSlow31 + -0.7853981633974483))); - double fSlow159 = ((3 * faustpower<2>(fSlow158)) + -1); - double fSlow160 = ((5 * faustpower<3>(fSlow156)) - (3 * fSlow156)); - double fSlow161 = ((5 * faustpower<3>(fSlow158)) - (3 * fSlow158)); - double fSlow162 = (fSlow30 * cos((fSlow31 + -2.356194490192345))); - double fSlow163 = ((5 * faustpower<3>(fSlow162)) - (3 * fSlow162)); - double fSlow164 = (fSlow3 * cos((fSlow4 + -2.356194490192345))); - double fSlow165 = ((5 * faustpower<3>(fSlow164)) - (3 * fSlow164)); - double fSlow166 = ((3 * faustpower<2>(fSlow162)) + -1); - double fSlow167 = ((3 * faustpower<2>(fSlow164)) + -1); - double fSlow168 = (fSlow30 * cos((fSlow31 + -3.9269908169872414))); - double fSlow169 = ((3 * faustpower<2>(fSlow168)) + -1); - double fSlow170 = (fSlow3 * cos((fSlow4 + -3.9269908169872414))); - double fSlow171 = ((3 * faustpower<2>(fSlow170)) + -1); - double fSlow172 = ((5 * faustpower<3>(fSlow170)) - (3 * fSlow170)); - double fSlow173 = ((5 * faustpower<3>(fSlow168)) - (3 * fSlow168)); - double fSlow174 = (fSlow30 * cos((fSlow31 + -5.497787143782138))); - double fSlow175 = ((5 * faustpower<3>(fSlow174)) - (3 * fSlow174)); - double fSlow176 = (fSlow3 * cos((fSlow4 + -5.497787143782138))); - double fSlow177 = ((5 * faustpower<3>(fSlow176)) - (3 * fSlow176)); - double fSlow178 = ((3 * faustpower<2>(fSlow174)) + -1); - double fSlow179 = ((3 * faustpower<2>(fSlow176)) + -1); - double fSlow180 = (fSlow119 - fSlow120); - double fSlow181 = faustpower<2>(fSlow180); - double fSlow182 = ((3 * fSlow181) + -1); - double fSlow183 = (fSlow114 - fSlow115); - double fSlow184 = faustpower<2>(fSlow183); - double fSlow185 = ((3 * fSlow184) + -1); - double fSlow186 = (3.5 * (fSlow49 * ((5 * fSlow181) + -3))); - double fSlow187 = (3.5 * (fSlow49 * ((5 * fSlow184) + -3))); - double fSlow188 = (fSlow130 - fSlow120); - double fSlow189 = faustpower<2>(fSlow188); - double fSlow190 = ((3 * fSlow189) + -1); - double fSlow191 = (fSlow126 - fSlow115); - double fSlow192 = faustpower<2>(fSlow191); - double fSlow193 = ((3 * fSlow192) + -1); - double fSlow194 = (3.5 * (fSlow49 * ((5 * fSlow189) + -3))); - double fSlow195 = (3.5 * (fSlow49 * ((5 * fSlow192) + -3))); - double fSlow196 = (fSlow140 - fSlow120); - double fSlow197 = faustpower<2>(fSlow196); - double fSlow198 = ((3 * fSlow197) + -1); - double fSlow199 = (fSlow136 - fSlow115); - double fSlow200 = faustpower<2>(fSlow199); - double fSlow201 = ((3 * fSlow200) + -1); - double fSlow202 = (3.5 * (fSlow49 * ((5 * fSlow197) + -3))); - double fSlow203 = (3.5 * (fSlow49 * ((5 * fSlow200) + -3))); - double fSlow204 = (fSlow146 - fSlow120); - double fSlow205 = faustpower<2>(fSlow204); - double fSlow206 = ((3 * fSlow205) + -1); - double fSlow207 = (fSlow150 - fSlow115); - double fSlow208 = faustpower<2>(fSlow207); - double fSlow209 = ((3 * fSlow208) + -1); - double fSlow210 = (3.5 * (fSlow49 * ((5 * fSlow205) + -3))); - double fSlow211 = (3.5 * (fSlow49 * ((5 * fSlow208) + -3))); - double fSlow212 = (0.5773502691896258 * fSlow2); - double fSlow213 = (0.8164965809277259 * fSlow156); - double fSlow214 = (fSlow212 + fSlow213); - double fSlow215 = faustpower<2>(fSlow214); - double fSlow216 = ((3 * fSlow215) + -1); - double fSlow217 = (0.8164965809277259 * fSlow158); - double fSlow218 = (0.5773502691896258 * fSlow29); - double fSlow219 = (fSlow217 + fSlow218); - double fSlow220 = faustpower<2>(fSlow219); - double fSlow221 = ((3 * fSlow220) + -1); - double fSlow222 = (3.5 * (fSlow49 * ((5 * fSlow220) + -3))); - double fSlow223 = (3.5 * (fSlow49 * ((5 * fSlow215) + -3))); - double fSlow224 = (0.8164965809277259 * fSlow162); - double fSlow225 = (fSlow218 + fSlow224); - double fSlow226 = faustpower<2>(fSlow225); - double fSlow227 = (3.5 * (fSlow49 * ((5 * fSlow226) + -3))); - double fSlow228 = (0.8164965809277259 * fSlow164); - double fSlow229 = (fSlow228 + fSlow212); - double fSlow230 = faustpower<2>(fSlow229); - double fSlow231 = (3.5 * (fSlow49 * ((5 * fSlow230) + -3))); - double fSlow232 = ((3 * fSlow226) + -1); - double fSlow233 = ((3 * fSlow230) + -1); - double fSlow234 = (0.8164965809277259 * fSlow168); - double fSlow235 = (fSlow234 + fSlow218); - double fSlow236 = faustpower<2>(fSlow235); - double fSlow237 = ((3 * fSlow236) + -1); - double fSlow238 = (0.8164965809277259 * fSlow170); - double fSlow239 = (fSlow238 + fSlow212); - double fSlow240 = faustpower<2>(fSlow239); - double fSlow241 = ((3 * fSlow240) + -1); - double fSlow242 = (3.5 * (fSlow49 * ((5 * fSlow236) + -3))); - double fSlow243 = (3.5 * (fSlow49 * ((5 * fSlow240) + -3))); - double fSlow244 = (0.8164965809277259 * fSlow174); - double fSlow245 = (fSlow244 + fSlow218); - double fSlow246 = faustpower<2>(fSlow245); - double fSlow247 = (3.5 * (fSlow49 * ((5 * fSlow246) + -3))); - double fSlow248 = (0.8164965809277259 * fSlow176); - double fSlow249 = (fSlow248 + fSlow212); - double fSlow250 = faustpower<2>(fSlow249); - double fSlow251 = (3.5 * (fSlow49 * ((5 * fSlow250) + -3))); - double fSlow252 = ((3 * fSlow246) + -1); - double fSlow253 = ((3 * fSlow250) + -1); - double fSlow254 = (fSlow217 - fSlow218); - double fSlow255 = faustpower<2>(fSlow254); - double fSlow256 = ((3 * fSlow255) + -1); - double fSlow257 = (fSlow213 - fSlow212); - double fSlow258 = faustpower<2>(fSlow257); - double fSlow259 = ((3 * fSlow258) + -1); - double fSlow260 = (3.5 * (fSlow49 * ((5 * fSlow255) + -3))); - double fSlow261 = (3.5 * (fSlow49 * ((5 * fSlow258) + -3))); - double fSlow262 = (fSlow224 - fSlow218); - double fSlow263 = faustpower<2>(fSlow262); - double fSlow264 = (3.5 * (fSlow49 * ((5 * fSlow263) + -3))); - double fSlow265 = (fSlow228 - fSlow212); - double fSlow266 = faustpower<2>(fSlow265); - double fSlow267 = (3.5 * (fSlow49 * ((5 * fSlow266) + -3))); - double fSlow268 = ((3 * fSlow263) + -1); - double fSlow269 = ((3 * fSlow266) + -1); - double fSlow270 = (fSlow234 - fSlow218); - double fSlow271 = faustpower<2>(fSlow270); - double fSlow272 = (3.5 * (fSlow49 * ((5 * fSlow271) + -3))); - double fSlow273 = (fSlow238 - fSlow212); - double fSlow274 = faustpower<2>(fSlow273); - double fSlow275 = (3.5 * (fSlow49 * ((5 * fSlow274) + -3))); - double fSlow276 = ((3 * fSlow271) + -1); - double fSlow277 = ((3 * fSlow274) + -1); - double fSlow278 = (fSlow244 - fSlow218); - double fSlow279 = faustpower<2>(fSlow278); - double fSlow280 = (3.5 * (fSlow49 * ((5 * fSlow279) + -3))); - double fSlow281 = (fSlow248 - fSlow212); - double fSlow282 = faustpower<2>(fSlow281); - double fSlow283 = (3.5 * (fSlow49 * ((5 * fSlow282) + -3))); - double fSlow284 = ((3 * fSlow279) + -1); - double fSlow285 = ((3 * fSlow282) + -1); - double fSlow286 = (0.4264014327112203 * (fSlow30 * cos((fSlow31 + -0.7853981633974484)))); - double fSlow287 = (0.9045340337332911 * fSlow29); - double fSlow288 = (fSlow286 + fSlow287); - double fSlow289 = faustpower<2>(fSlow288); - double fSlow290 = (3.5 * (fSlow49 * ((5 * fSlow289) + -3))); - double fSlow291 = (0.4264014327112203 * (fSlow3 * cos((fSlow4 + -0.7853981633974484)))); - double fSlow292 = (0.9045340337332911 * fSlow2); - double fSlow293 = (fSlow291 + fSlow292); - double fSlow294 = faustpower<2>(fSlow293); - double fSlow295 = (3.5 * (fSlow49 * ((5 * fSlow294) + -3))); - double fSlow296 = ((3 * fSlow289) + -1); - double fSlow297 = ((3 * fSlow294) + -1); - double fSlow298 = (0.4264014327112203 * fSlow162); - double fSlow299 = (fSlow287 + fSlow298); - double fSlow300 = faustpower<2>(fSlow299); - double fSlow301 = ((3 * fSlow300) + -1); - double fSlow302 = (0.4264014327112203 * fSlow164); - double fSlow303 = (fSlow292 + fSlow302); - double fSlow304 = faustpower<2>(fSlow303); - double fSlow305 = ((3 * fSlow304) + -1); - double fSlow306 = (3.5 * (fSlow49 * ((5 * fSlow300) + -3))); - double fSlow307 = (3.5 * (fSlow49 * ((5 * fSlow304) + -3))); - double fSlow308 = (0.4264014327112203 * fSlow168); - double fSlow309 = (fSlow287 + fSlow308); - double fSlow310 = faustpower<2>(fSlow309); - double fSlow311 = (3.5 * (fSlow49 * ((5 * fSlow310) + -3))); - double fSlow312 = (0.4264014327112203 * fSlow170); - double fSlow313 = (fSlow292 + fSlow312); - double fSlow314 = faustpower<2>(fSlow313); - double fSlow315 = (3.5 * (fSlow49 * ((5 * fSlow314) + -3))); - double fSlow316 = ((3 * fSlow314) + -1); - double fSlow317 = ((3 * fSlow310) + -1); - double fSlow318 = (0.4264014327112203 * fSlow174); - double fSlow319 = (fSlow287 + fSlow318); - double fSlow320 = faustpower<2>(fSlow319); - double fSlow321 = ((3 * fSlow320) + -1); - double fSlow322 = (0.4264014327112203 * fSlow176); - double fSlow323 = (fSlow292 + fSlow322); - double fSlow324 = faustpower<2>(fSlow323); - double fSlow325 = ((3 * fSlow324) + -1); - double fSlow326 = (3.5 * (fSlow49 * ((5 * fSlow320) + -3))); - double fSlow327 = (3.5 * (fSlow49 * ((5 * fSlow324) + -3))); - double fSlow328 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -0.32175055439664263)))); - double fSlow329 = (0.3015113445777635 * fSlow2); - double fSlow330 = (fSlow328 + fSlow329); - double fSlow331 = faustpower<2>(fSlow330); - double fSlow332 = ((3 * fSlow331) + -1); - double fSlow333 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -0.32175055439664263)))); - double fSlow334 = (0.3015113445777635 * fSlow29); - double fSlow335 = (fSlow333 + fSlow334); - double fSlow336 = faustpower<2>(fSlow335); - double fSlow337 = ((3 * fSlow336) + -1); - double fSlow338 = (3.5 * (fSlow49 * ((5 * fSlow336) + -3))); - double fSlow339 = (3.5 * (fSlow49 * ((5 * fSlow331) + -3))); - double fSlow340 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -1.2490457723982544)))); - double fSlow341 = (fSlow334 + fSlow340); - double fSlow342 = faustpower<2>(fSlow341); - double fSlow343 = (3.5 * (fSlow49 * ((5 * fSlow342) + -3))); - double fSlow344 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.2490457723982544)))); - double fSlow345 = (fSlow329 + fSlow344); - double fSlow346 = faustpower<2>(fSlow345); - double fSlow347 = (3.5 * (fSlow49 * ((5 * fSlow346) + -3))); - double fSlow348 = ((3 * fSlow342) + -1); - double fSlow349 = ((3 * fSlow346) + -1); - double fSlow350 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -1.8925468811915387)))); - double fSlow351 = (fSlow334 + fSlow350); - double fSlow352 = faustpower<2>(fSlow351); - double fSlow353 = (3.5 * (fSlow49 * ((5 * fSlow352) + -3))); - double fSlow354 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.8925468811915387)))); - double fSlow355 = (fSlow329 + fSlow354); - double fSlow356 = faustpower<2>(fSlow355); - double fSlow357 = (3.5 * (fSlow49 * ((5 * fSlow356) + -3))); - double fSlow358 = ((3 * fSlow352) + -1); - double fSlow359 = ((3 * fSlow356) + -1); - double fSlow360 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -2.8198420991931505)))); - double fSlow361 = (fSlow334 + fSlow360); - double fSlow362 = faustpower<2>(fSlow361); - double fSlow363 = ((3 * fSlow362) + -1); - double fSlow364 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -2.8198420991931505)))); - double fSlow365 = (fSlow329 + fSlow364); - double fSlow366 = faustpower<2>(fSlow365); - double fSlow367 = ((3 * fSlow366) + -1); - double fSlow368 = (3.5 * (fSlow49 * ((5 * fSlow362) + -3))); - double fSlow369 = (3.5 * (fSlow49 * ((5 * fSlow366) + -3))); - double fSlow370 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -3.4633432079864357)))); - double fSlow371 = (fSlow334 + fSlow370); - double fSlow372 = faustpower<2>(fSlow371); - double fSlow373 = ((3 * fSlow372) + -1); - double fSlow374 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -3.4633432079864357)))); - double fSlow375 = (fSlow329 + fSlow374); - double fSlow376 = faustpower<2>(fSlow375); - double fSlow377 = ((3 * fSlow376) + -1); - double fSlow378 = (3.5 * (fSlow49 * ((5 * fSlow372) + -3))); - double fSlow379 = (3.5 * (fSlow49 * ((5 * fSlow376) + -3))); - double fSlow380 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -4.3906384259880475)))); - double fSlow381 = (fSlow329 + fSlow380); - double fSlow382 = faustpower<2>(fSlow381); - double fSlow383 = ((3 * fSlow382) + -1); - double fSlow384 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -4.3906384259880475)))); - double fSlow385 = (fSlow334 + fSlow384); - double fSlow386 = faustpower<2>(fSlow385); - double fSlow387 = ((3 * fSlow386) + -1); - double fSlow388 = (3.5 * (fSlow49 * ((5 * fSlow386) + -3))); - double fSlow389 = (3.5 * (fSlow49 * ((5 * fSlow382) + -3))); - double fSlow390 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -5.034139534781332)))); - double fSlow391 = (fSlow334 + fSlow390); - double fSlow392 = faustpower<2>(fSlow391); - double fSlow393 = ((3 * fSlow392) + -1); - double fSlow394 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.034139534781332)))); - double fSlow395 = (fSlow329 + fSlow394); - double fSlow396 = faustpower<2>(fSlow395); - double fSlow397 = ((3 * fSlow396) + -1); - double fSlow398 = (3.5 * (fSlow49 * ((5 * fSlow392) + -3))); - double fSlow399 = (3.5 * (fSlow49 * ((5 * fSlow396) + -3))); - double fSlow400 = (0.9534625892455924 * (fSlow30 * cos((fSlow31 + -5.961434752782943)))); - double fSlow401 = (fSlow334 + fSlow400); - double fSlow402 = faustpower<2>(fSlow401); - double fSlow403 = (3.5 * (fSlow49 * ((5 * fSlow402) + -3))); - double fSlow404 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.961434752782943)))); - double fSlow405 = (fSlow329 + fSlow404); - double fSlow406 = faustpower<2>(fSlow405); - double fSlow407 = (3.5 * (fSlow49 * ((5 * fSlow406) + -3))); - double fSlow408 = ((3 * fSlow406) + -1); - double fSlow409 = ((3 * fSlow402) + -1); - double fSlow410 = (fSlow328 - fSlow329); - double fSlow411 = faustpower<2>(fSlow410); - double fSlow412 = ((3 * fSlow411) + -1); - double fSlow413 = (fSlow333 - fSlow334); - double fSlow414 = faustpower<2>(fSlow413); - double fSlow415 = ((3 * fSlow414) + -1); - double fSlow416 = (3.5 * (fSlow49 * ((5 * fSlow414) + -3))); - double fSlow417 = (3.5 * (fSlow49 * ((5 * fSlow411) + -3))); - double fSlow418 = (fSlow344 - fSlow329); - double fSlow419 = faustpower<2>(fSlow418); - double fSlow420 = ((3 * fSlow419) + -1); - double fSlow421 = (fSlow340 - fSlow334); - double fSlow422 = faustpower<2>(fSlow421); - double fSlow423 = ((3 * fSlow422) + -1); - double fSlow424 = (3.5 * (fSlow49 * ((5 * fSlow422) + -3))); - double fSlow425 = (3.5 * (fSlow49 * ((5 * fSlow419) + -3))); - double fSlow426 = (fSlow350 - fSlow334); - double fSlow427 = faustpower<2>(fSlow426); - double fSlow428 = (3.5 * (fSlow49 * ((5 * fSlow427) + -3))); - double fSlow429 = (fSlow354 - fSlow329); - double fSlow430 = faustpower<2>(fSlow429); - double fSlow431 = (3.5 * (fSlow49 * ((5 * fSlow430) + -3))); - double fSlow432 = ((3 * fSlow427) + -1); - double fSlow433 = ((3 * fSlow430) + -1); - double fSlow434 = (fSlow360 - fSlow334); - double fSlow435 = faustpower<2>(fSlow434); - double fSlow436 = (3.5 * (fSlow49 * ((5 * fSlow435) + -3))); - double fSlow437 = (fSlow364 - fSlow329); - double fSlow438 = faustpower<2>(fSlow437); - double fSlow439 = (3.5 * (fSlow49 * ((5 * fSlow438) + -3))); - double fSlow440 = ((3 * fSlow435) + -1); - double fSlow441 = ((3 * fSlow438) + -1); - double fSlow442 = (fSlow370 - fSlow334); - double fSlow443 = faustpower<2>(fSlow442); - double fSlow444 = ((3 * fSlow443) + -1); - double fSlow445 = (fSlow374 - fSlow329); - double fSlow446 = faustpower<2>(fSlow445); - double fSlow447 = ((3 * fSlow446) + -1); - double fSlow448 = (3.5 * (fSlow49 * ((5 * fSlow443) + -3))); - double fSlow449 = (3.5 * (fSlow49 * ((5 * fSlow446) + -3))); - double fSlow450 = (fSlow384 - fSlow334); - double fSlow451 = faustpower<2>(fSlow450); - double fSlow452 = (3.5 * (fSlow49 * ((5 * fSlow451) + -3))); - double fSlow453 = (fSlow380 - fSlow329); - double fSlow454 = faustpower<2>(fSlow453); - double fSlow455 = (3.5 * (fSlow49 * ((5 * fSlow454) + -3))); - double fSlow456 = ((3 * fSlow454) + -1); - double fSlow457 = ((3 * fSlow451) + -1); - double fSlow458 = (fSlow394 - fSlow329); - double fSlow459 = faustpower<2>(fSlow458); - double fSlow460 = ((3 * fSlow459) + -1); - double fSlow461 = (fSlow390 - fSlow334); - double fSlow462 = faustpower<2>(fSlow461); - double fSlow463 = ((3 * fSlow462) + -1); - double fSlow464 = (3.5 * (fSlow49 * ((5 * fSlow462) + -3))); - double fSlow465 = (3.5 * (fSlow49 * ((5 * fSlow459) + -3))); - double fSlow466 = (fSlow404 - fSlow329); - double fSlow467 = faustpower<2>(fSlow466); - double fSlow468 = ((3 * fSlow467) + -1); - double fSlow469 = (fSlow400 - fSlow334); - double fSlow470 = faustpower<2>(fSlow469); - double fSlow471 = ((3 * fSlow470) + -1); - double fSlow472 = (3.5 * (fSlow49 * ((5 * fSlow470) + -3))); - double fSlow473 = (3.5 * (fSlow49 * ((5 * fSlow467) + -3))); - double fSlow474 = (fSlow286 - fSlow287); - double fSlow475 = faustpower<2>(fSlow474); - double fSlow476 = ((3 * fSlow475) + -1); - double fSlow477 = (fSlow291 - fSlow292); - double fSlow478 = faustpower<2>(fSlow477); - double fSlow479 = ((3 * fSlow478) + -1); - double fSlow480 = (3.5 * (fSlow49 * ((5 * fSlow475) + -3))); - double fSlow481 = (3.5 * (fSlow49 * ((5 * fSlow478) + -3))); - double fSlow482 = (fSlow298 - fSlow287); - double fSlow483 = faustpower<2>(fSlow482); - double fSlow484 = ((3 * fSlow483) + -1); - double fSlow485 = (fSlow302 - fSlow292); - double fSlow486 = faustpower<2>(fSlow485); - double fSlow487 = ((3 * fSlow486) + -1); - double fSlow488 = (3.5 * (fSlow49 * ((5 * fSlow483) + -3))); - double fSlow489 = (3.5 * (fSlow49 * ((5 * fSlow486) + -3))); - double fSlow490 = (fSlow312 - fSlow292); - double fSlow491 = faustpower<2>(fSlow490); - double fSlow492 = ((3 * fSlow491) + -1); - double fSlow493 = (fSlow308 - fSlow287); - double fSlow494 = faustpower<2>(fSlow493); - double fSlow495 = ((3 * fSlow494) + -1); - double fSlow496 = (3.5 * (fSlow49 * ((5 * fSlow494) + -3))); - double fSlow497 = (3.5 * (fSlow49 * ((5 * fSlow491) + -3))); - double fSlow498 = (fSlow318 - fSlow287); - double fSlow499 = faustpower<2>(fSlow498); - double fSlow500 = (3.5 * (fSlow49 * ((5 * fSlow499) + -3))); - double fSlow501 = (fSlow322 - fSlow292); - double fSlow502 = faustpower<2>(fSlow501); - double fSlow503 = (3.5 * (fSlow49 * ((5 * fSlow502) + -3))); - double fSlow504 = ((3 * fSlow502) + -1); - double fSlow505 = ((3 * fSlow499) + -1); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAPanLebedev504.cpp b/source/HOAUGens/HOAPanLebedev504.cpp deleted file mode 100644 index bf9a59e2c9..0000000000 --- a/source/HOAUGens/HOAPanLebedev504.cpp +++ /dev/null @@ -1,2913 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAPanLebedev504" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fConst2; - FAUSTFLOAT fentry0; - double fConst3; - FAUSTFLOAT fslider2; - double fConst4; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fslider3; - double fRec3[2]; - double fConst5; - double fRec4[2]; - double fRec5[2]; - double fRec2[2]; - double fRec6[2]; - double fVec0[2]; - double fRec7[2]; - double fConst6; - double fRec8[2]; - double fRec9[2]; - double fRec1[2]; - double fRec10[2]; - double fVec1[2]; - double fRec11[2]; - double fRec13[2]; - double fRec14[2]; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; - double fRec12[2]; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - double fRec19[2]; - double fRec20[2]; - FAUSTFLOAT fslider6; - double fRec22[2]; - double fRec23[2]; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider7; - double fRec24[2]; - double fRec21[2]; - double fRec25[2]; - double fVec2[2]; - double fRec26[2]; - double fRec18[2]; - double fRec27[2]; - double fVec3[2]; - double fRec28[2]; - double fRec30[2]; - double fRec31[2]; - double fRec33[2]; - double fRec34[2]; - double fRec32[2]; - double fRec29[2]; - FAUSTFLOAT fcheckbox3; - double fConst7; - double fConst8; - double fRec36[2]; - double fRec37[2]; - double fRec35[2]; - double fRec38[2]; - double fVec4[2]; - double fRec39[2]; - double fRec41[2]; - double fRec42[2]; - double fRec40[2]; - double fRec44[2]; - double fRec45[2]; - double fRec43[2]; - double fRec46[2]; - double fVec5[2]; - double fRec47[2]; - double fRec49[2]; - double fRec50[2]; - double fRec48[2]; - FAUSTFLOAT fcheckbox4; - FAUSTFLOAT fcheckbox5; - double fConst9; - double fRec53[2]; - double fRec52[2]; - double fRec51[2]; - double fRec55[2]; - double fRec54[2]; - FAUSTFLOAT fcheckbox6; - double fConst10; - double fConst11; - double fConst12; - double fConst13; - double fRec59[2]; - double fRec60[2]; - double fRec58[2]; - double fRec61[2]; - double fVec6[2]; - double fRec62[2]; - double fRec63[2]; - double fRec57[2]; - double fRec56[2]; - double fRec66[2]; - double fRec67[2]; - double fRec65[2]; - double fRec68[2]; - double fRec64[2]; - double fRec71[2]; - double fRec70[2]; - double fRec69[2]; - double fRec73[2]; - double fRec72[2]; - double fRec77[2]; - double fRec78[2]; - double fRec76[2]; - double fRec79[2]; - double fVec7[2]; - double fRec80[2]; - double fRec81[2]; - double fRec75[2]; - double fRec74[2]; - double fRec84[2]; - double fRec85[2]; - double fRec83[2]; - double fRec86[2]; - double fRec82[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - double fRec87[2]; - FAUSTFLOAT fbargraph1; - double fRec88[2]; - FAUSTFLOAT fbargraph2; - double fRec89[2]; - FAUSTFLOAT fbargraph3; - double fRec90[2]; - FAUSTFLOAT fbargraph4; - double fRec91[2]; - FAUSTFLOAT fbargraph5; - double fRec92[2]; - FAUSTFLOAT fbargraph6; - double fRec93[2]; - FAUSTFLOAT fbargraph7; - double fRec94[2]; - FAUSTFLOAT fbargraph8; - double fRec95[2]; - FAUSTFLOAT fbargraph9; - double fRec96[2]; - FAUSTFLOAT fbargraph10; - double fRec97[2]; - FAUSTFLOAT fbargraph11; - double fRec98[2]; - FAUSTFLOAT fbargraph12; - double fRec99[2]; - FAUSTFLOAT fbargraph13; - double fRec100[2]; - FAUSTFLOAT fbargraph14; - double fRec101[2]; - FAUSTFLOAT fbargraph15; - double fRec102[2]; - FAUSTFLOAT fbargraph16; - double fRec103[2]; - FAUSTFLOAT fbargraph17; - double fRec104[2]; - FAUSTFLOAT fbargraph18; - double fRec105[2]; - FAUSTFLOAT fbargraph19; - double fRec106[2]; - FAUSTFLOAT fbargraph20; - double fRec107[2]; - FAUSTFLOAT fbargraph21; - double fRec108[2]; - FAUSTFLOAT fbargraph22; - double fRec109[2]; - FAUSTFLOAT fbargraph23; - double fRec110[2]; - FAUSTFLOAT fbargraph24; - double fRec111[2]; - FAUSTFLOAT fbargraph25; - double fRec112[2]; - FAUSTFLOAT fbargraph26; - double fRec113[2]; - FAUSTFLOAT fbargraph27; - double fRec114[2]; - FAUSTFLOAT fbargraph28; - double fRec115[2]; - FAUSTFLOAT fbargraph29; - double fRec116[2]; - FAUSTFLOAT fbargraph30; - double fRec117[2]; - FAUSTFLOAT fbargraph31; - double fRec118[2]; - FAUSTFLOAT fbargraph32; - double fRec119[2]; - FAUSTFLOAT fbargraph33; - double fRec120[2]; - FAUSTFLOAT fbargraph34; - double fRec121[2]; - FAUSTFLOAT fbargraph35; - double fRec122[2]; - FAUSTFLOAT fbargraph36; - double fRec123[2]; - FAUSTFLOAT fbargraph37; - double fRec124[2]; - FAUSTFLOAT fbargraph38; - double fRec125[2]; - FAUSTFLOAT fbargraph39; - double fRec126[2]; - FAUSTFLOAT fbargraph40; - double fRec127[2]; - FAUSTFLOAT fbargraph41; - double fRec128[2]; - FAUSTFLOAT fbargraph42; - double fRec129[2]; - FAUSTFLOAT fbargraph43; - double fRec130[2]; - FAUSTFLOAT fbargraph44; - double fRec131[2]; - FAUSTFLOAT fbargraph45; - double fRec132[2]; - FAUSTFLOAT fbargraph46; - double fRec133[2]; - FAUSTFLOAT fbargraph47; - double fRec134[2]; - FAUSTFLOAT fbargraph48; - double fRec135[2]; - FAUSTFLOAT fbargraph49; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAPanLebedev504"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 50; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (984.7116049589241 / fConst0); - fConst4 = (715.2883950410759 / fConst0); - fConst5 = (1430.5767900821518 / fConst0); - fConst6 = (1969.4232099178482 / fConst0); - fConst7 = (5.1e+02 / fConst0); - fConst8 = (1.02e+03 / fConst0); - fConst9 = (3.4e+02 / fConst0); - fConst10 = (789.5430205728705 / fConst0); - fConst11 = (394.7715102864353 / fConst0); - fConst12 = (625.2284897135664 / fConst0); - fConst13 = (1250.4569794271329 / fConst0); - } - virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fslider0 = 0.0; - fslider1 = 0.0; - fentry0 = 1.07; - fslider2 = 2.0; - fcheckbox1 = 0.0; - fslider3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fslider6 = 2.0; - fcheckbox2 = 0.0; - fslider7 = 0.0; - fcheckbox3 = 0.0; - fcheckbox4 = 0.0; - fcheckbox5 = 0.0; - fcheckbox6 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fVec5[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fVec6[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fVec7[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec88[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec91[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<2; i++) fRec93[i] = 0; - for (int i=0; i<2; i++) fRec94[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<2; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec98[i] = 0; - for (int i=0; i<2; i++) fRec99[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; - for (int i=0; i<2; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec104[i] = 0; - for (int i=0; i<2; i++) fRec105[i] = 0; - for (int i=0; i<2; i++) fRec106[i] = 0; - for (int i=0; i<2; i++) fRec107[i] = 0; - for (int i=0; i<2; i++) fRec108[i] = 0; - for (int i=0; i<2; i++) fRec109[i] = 0; - for (int i=0; i<2; i++) fRec110[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; - for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec113[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; - for (int i=0; i<2; i++) fRec115[i] = 0; - for (int i=0; i<2; i++) fRec116[i] = 0; - for (int i=0; i<2; i++) fRec117[i] = 0; - for (int i=0; i<2; i++) fRec118[i] = 0; - for (int i=0; i<2; i++) fRec119[i] = 0; - for (int i=0; i<2; i++) fRec120[i] = 0; - for (int i=0; i<2; i++) fRec121[i] = 0; - for (int i=0; i<2; i++) fRec122[i] = 0; - for (int i=0; i<2; i++) fRec123[i] = 0; - for (int i=0; i<2; i++) fRec124[i] = 0; - for (int i=0; i<2; i++) fRec125[i] = 0; - for (int i=0; i<2; i++) fRec126[i] = 0; - for (int i=0; i<2; i++) fRec127[i] = 0; - for (int i=0; i<2; i++) fRec128[i] = 0; - for (int i=0; i<2; i++) fRec129[i] = 0; - for (int i=0; i<2; i++) fRec130[i] = 0; - for (int i=0; i<2; i++) fRec131[i] = 0; - for (int i=0; i<2; i++) fRec132[i] = 0; - for (int i=0; i<2; i++) fRec133[i] = 0; - for (int i=0; i<2; i++) fRec134[i] = 0; - for (int i=0; i<2; i++) fRec135[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider3, "0+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "0+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider1, "0+3", ""); - ui_interface->declare(&fslider1, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider0, "0+4", ""); - ui_interface->declare(&fslider0, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(&fslider7, "1+1", ""); - ui_interface->declare(&fslider7, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider7, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider6, "1+2", ""); - ui_interface->declare(&fslider6, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider6, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "1+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "1+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox4); - ui_interface->addCheckButton("1", &fcheckbox5); - ui_interface->addCheckButton("2", &fcheckbox3); - ui_interface->addCheckButton("3", &fcheckbox6); - ui_interface->addCheckButton("4", &fcheckbox0); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openVerticalBox("Outputs"); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("1-25"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ab00060", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ab040b0", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b009a0", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b050f0", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b097e0", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b0d8b0", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "osc", "/output7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b120f0", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "osc", "/output8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b16390", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "osc", "/output9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b1a9b0", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "osc", "/output10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b1eec0", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "osc", "/output11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9059b23790", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "osc", "/output12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a79c5b0", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "osc", "/output13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7a0dd0", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "osc", "/output14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7a5820", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "osc", "/output15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7a9dc0", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "osc", "/output16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7ae080", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "osc", "/output17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7b2570", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "osc", "/output18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7b6ac0", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "osc", "/output19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7bb990", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "osc", "/output20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7c0250", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "osc", "/output21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7c4b50", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "osc", "/output22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7c9580", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "osc", "/output23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7cddd0", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "osc", "/output24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7d26c0", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "osc", "/output25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7d6fe0", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("26-50"); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "osc", "/output26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7db930", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph26, "osc", "/output27"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7e06b0", &fbargraph26, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph27, "osc", "/output28"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7e47e0", &fbargraph27, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph28, "osc", "/output29"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7e8c40", &fbargraph28, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph29, "osc", "/output30"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7ecf60", &fbargraph29, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph30, "osc", "/output31"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7f1de0", &fbargraph30, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph31, "osc", "/output32"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7f6840", &fbargraph31, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph32, "osc", "/output33"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905a7fb2f0", &fbargraph32, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph33, "osc", "/output34"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac03de0", &fbargraph33, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph34, "osc", "/output35"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac08980", &fbargraph34, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph35, "osc", "/output36"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac0d5c0", &fbargraph35, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph36, "osc", "/output37"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac12070", &fbargraph36, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph37, "osc", "/output38"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac16f10", &fbargraph37, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph38, "osc", "/output39"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac1b240", &fbargraph38, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph39, "osc", "/output40"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac1f950", &fbargraph39, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph40, "osc", "/output41"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac23ef0", &fbargraph40, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph41, "osc", "/output42"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac284e0", &fbargraph41, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph42, "osc", "/output43"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac2cb60", &fbargraph42, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph43, "osc", "/output44"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac31250", &fbargraph43, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph44, "osc", "/output45"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac359b0", &fbargraph44, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph45, "osc", "/output46"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac39fc0", &fbargraph45, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph46, "osc", "/output47"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac3e9f0", &fbargraph46, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph47, "osc", "/output48"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac432a0", &fbargraph47, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph48, "osc", "/output49"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac47bc0", &fbargraph48, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph49, "osc", "/output50"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f905ac4c550", &fbargraph49, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (1.125 * (1 - double(fcheckbox0))); - double fSlow1 = double(fslider0); - double fSlow2 = sin(fSlow1); - double fSlow3 = cos(fSlow1); - double fSlow4 = double(fslider1); - double fSlow5 = (fSlow3 * cos(fSlow4)); - double fSlow6 = (6.123233995736766e-17 * fSlow5); - double fSlow7 = (fSlow2 + fSlow6); - double fSlow8 = faustpower<2>(fSlow7); - double fSlow9 = ((fSlow8 * ((35 * fSlow8) + -30)) + 3); - double fSlow10 = double(fentry0); - double fSlow11 = (fConst2 / fSlow10); - double fSlow12 = faustpower<2>(fSlow11); - double fSlow13 = (1.0 / (((9.1401308902779 * fSlow12) + (fConst3 / fSlow10)) + 1)); - double fSlow14 = double(fslider2); - double fSlow15 = (fConst2 / fSlow14); - double fSlow16 = faustpower<2>(fSlow15); - double fSlow17 = (((fConst3 / fSlow14) + (9.1401308902779 * fSlow16)) + 1); - double fSlow18 = (1.0 / (((fConst4 / fSlow10) + (11.4878004768713 * fSlow12)) + 1)); - double fSlow19 = double(fcheckbox1); - double fSlow20 = (fSlow19 * fSlow10); - double fSlow21 = (((fConst4 / fSlow14) + (11.4878004768713 * fSlow16)) + 1); - double fSlow22 = ((fSlow20 * fSlow21) / fSlow14); - double fSlow23 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow24 = (45.9512019074852 * fSlow12); - double fSlow25 = (fSlow24 + (fConst5 / fSlow10)); - double fSlow26 = (1.0 / fSlow21); - double fSlow27 = (45.9512019074852 * fSlow16); - double fSlow28 = ((fConst5 / fSlow14) + fSlow27); - double fSlow29 = (36.5605235611116 * fSlow12); - double fSlow30 = (fSlow29 + (fConst6 / fSlow10)); - double fSlow31 = (1.0 / fSlow17); - double fSlow32 = (36.5605235611116 * fSlow16); - double fSlow33 = ((fConst6 / fSlow14) + fSlow32); - double fSlow34 = ((1 - fSlow19) * fSlow10); - double fSlow35 = double(fslider4); - double fSlow36 = sin(fSlow35); - double fSlow37 = cos(fSlow35); - double fSlow38 = double(fslider5); - double fSlow39 = (fSlow37 * cos(fSlow38)); - double fSlow40 = (6.123233995736766e-17 * fSlow39); - double fSlow41 = (fSlow36 + fSlow40); - double fSlow42 = faustpower<2>(fSlow41); - double fSlow43 = ((fSlow42 * ((35 * fSlow42) + -30)) + 3); - double fSlow44 = double(fslider6); - double fSlow45 = (fConst2 / fSlow44); - double fSlow46 = faustpower<2>(fSlow45); - double fSlow47 = (((fConst3 / fSlow44) + (9.1401308902779 * fSlow46)) + 1); - double fSlow48 = double(fcheckbox2); - double fSlow49 = (fSlow10 * fSlow48); - double fSlow50 = (((fConst4 / fSlow44) + (11.4878004768713 * fSlow46)) + 1); - double fSlow51 = ((fSlow49 * fSlow50) / fSlow44); - double fSlow52 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider7)))); - double fSlow53 = (1.0 / fSlow50); - double fSlow54 = (45.9512019074852 * fSlow46); - double fSlow55 = ((fConst5 / fSlow44) + fSlow54); - double fSlow56 = (1.0 / fSlow47); - double fSlow57 = (36.5605235611116 * fSlow46); - double fSlow58 = ((fConst6 / fSlow44) + fSlow57); - double fSlow59 = (fSlow10 * (1 - fSlow48)); - double fSlow60 = (2.5 * (1 - double(fcheckbox3))); - double fSlow61 = ((3 * fSlow8) + -1); - double fSlow62 = (1.0 / (((fConst7 / fSlow10) + (3 * fSlow12)) + 1)); - double fSlow63 = (((fConst7 / fSlow14) + (3 * fSlow16)) + 1); - double fSlow64 = ((fSlow20 * fSlow63) / fSlow14); - double fSlow65 = (12 * fSlow12); - double fSlow66 = (fSlow65 + (fConst8 / fSlow10)); - double fSlow67 = (1.0 / fSlow63); - double fSlow68 = (12 * fSlow16); - double fSlow69 = ((fConst8 / fSlow14) + fSlow68); - double fSlow70 = ((3 * fSlow42) + -1); - double fSlow71 = (((fConst7 / fSlow44) + (3 * fSlow46)) + 1); - double fSlow72 = ((fSlow49 * fSlow71) / fSlow44); - double fSlow73 = (1.0 / fSlow71); - double fSlow74 = (12 * fSlow46); - double fSlow75 = ((fConst8 / fSlow44) + fSlow74); - double fSlow76 = (fSlow10 * (1 - double(fcheckbox4))); - double fSlow77 = (1 - (fSlow19 * (1 - (1.0 / fSlow14)))); - double fSlow78 = (1 - (fSlow48 * (1 - (1.0 / fSlow44)))); - double fSlow79 = (3 * (1 - double(fcheckbox5))); - double fSlow80 = (fSlow15 + 1); - double fSlow81 = (fConst9 / (fSlow14 * fSlow80)); - double fSlow82 = (1.0 / (fSlow11 + 1)); - double fSlow83 = ((fSlow20 * fSlow80) / fSlow14); - double fSlow84 = (fConst9 / fSlow10); - double fSlow85 = (1 - double(fcheckbox6)); - double fSlow86 = (3.5 * (fSlow85 * ((5 * fSlow8) + -3))); - double fSlow87 = ((fConst11 / fSlow14) + 1); - double fSlow88 = (fConst10 / (fSlow14 * fSlow87)); - double fSlow89 = (1.0 / ((fConst11 / fSlow10) + 1)); - double fSlow90 = (1.0 / (((fConst12 / fSlow10) + (6.45943269348338 * fSlow12)) + 1)); - double fSlow91 = (((fConst12 / fSlow14) + (6.45943269348338 * fSlow16)) + 1); - double fSlow92 = ((fSlow20 * fSlow91) / fSlow14); - double fSlow93 = (25.83773077393352 * fSlow12); - double fSlow94 = (fSlow93 + (fConst13 / fSlow10)); - double fSlow95 = (1.0 / fSlow91); - double fSlow96 = (25.83773077393352 * fSlow16); - double fSlow97 = ((fConst13 / fSlow14) + fSlow96); - double fSlow98 = (fConst10 / fSlow10); - double fSlow99 = (fSlow45 + 1); - double fSlow100 = (fConst9 / (fSlow44 * fSlow99)); - double fSlow101 = ((fSlow49 * fSlow99) / fSlow44); - double fSlow102 = (3.5 * (fSlow85 * ((5 * fSlow42) + -3))); - double fSlow103 = ((fConst11 / fSlow44) + 1); - double fSlow104 = (fConst10 / (fSlow44 * fSlow103)); - double fSlow105 = (((fConst12 / fSlow44) + (6.45943269348338 * fSlow46)) + 1); - double fSlow106 = ((fSlow49 * fSlow105) / fSlow44); - double fSlow107 = (1.0 / fSlow105); - double fSlow108 = (25.83773077393352 * fSlow46); - double fSlow109 = ((fConst13 / fSlow44) + fSlow108); - double fSlow110 = faustpower<2>(fSlow39); - double fSlow111 = ((3 * fSlow110) + -1); - double fSlow112 = faustpower<2>(fSlow5); - double fSlow113 = ((3 * fSlow112) + -1); - double fSlow114 = ((fSlow112 * ((35 * fSlow112) + -30)) + 3); - double fSlow115 = ((fSlow110 * ((35 * fSlow110) + -30)) + 3); - double fSlow116 = (3.5 * fSlow85); - double fSlow117 = ((5 * faustpower<3>(fSlow5)) - (3 * fSlow5)); - double fSlow118 = ((5 * faustpower<3>(fSlow39)) - (3 * fSlow39)); - double fSlow119 = (fSlow37 * cos((fSlow38 + -1.5707963267948966))); - double fSlow120 = faustpower<2>(fSlow119); - double fSlow121 = ((3 * fSlow120) + -1); - double fSlow122 = (fSlow3 * cos((fSlow4 + -1.5707963267948966))); - double fSlow123 = faustpower<2>(fSlow122); - double fSlow124 = ((3 * fSlow123) + -1); - double fSlow125 = ((5 * faustpower<3>(fSlow119)) - (3 * fSlow119)); - double fSlow126 = ((5 * faustpower<3>(fSlow122)) - (3 * fSlow122)); - double fSlow127 = ((fSlow123 * ((35 * fSlow123) + -30)) + 3); - double fSlow128 = ((fSlow120 * ((35 * fSlow120) + -30)) + 3); - double fSlow129 = (fSlow37 * cos((fSlow38 + -3.141592653589793))); - double fSlow130 = ((5 * faustpower<3>(fSlow129)) - (3 * fSlow129)); - double fSlow131 = (fSlow3 * cos((fSlow4 + -3.141592653589793))); - double fSlow132 = ((5 * faustpower<3>(fSlow131)) - (3 * fSlow131)); - double fSlow133 = faustpower<2>(fSlow131); - double fSlow134 = ((fSlow133 * ((35 * fSlow133) + -30)) + 3); - double fSlow135 = faustpower<2>(fSlow129); - double fSlow136 = ((fSlow135 * ((35 * fSlow135) + -30)) + 3); - double fSlow137 = ((3 * fSlow133) + -1); - double fSlow138 = ((3 * fSlow135) + -1); - double fSlow139 = (fSlow3 * cos((fSlow4 + -4.71238898038469))); - double fSlow140 = ((5 * faustpower<3>(fSlow139)) - (3 * fSlow139)); - double fSlow141 = (fSlow37 * cos((fSlow38 + -4.71238898038469))); - double fSlow142 = ((5 * faustpower<3>(fSlow141)) - (3 * fSlow141)); - double fSlow143 = faustpower<2>(fSlow141); - double fSlow144 = ((3 * fSlow143) + -1); - double fSlow145 = faustpower<2>(fSlow139); - double fSlow146 = ((3 * fSlow145) + -1); - double fSlow147 = ((fSlow143 * ((35 * fSlow143) + -30)) + 3); - double fSlow148 = ((fSlow145 * ((35 * fSlow145) + -30)) + 3); - double fSlow149 = (fSlow40 - fSlow36); - double fSlow150 = faustpower<2>(fSlow149); - double fSlow151 = (3.5 * (fSlow85 * ((5 * fSlow150) + -3))); - double fSlow152 = (fSlow6 - fSlow2); - double fSlow153 = faustpower<2>(fSlow152); - double fSlow154 = (3.5 * (fSlow85 * ((5 * fSlow153) + -3))); - double fSlow155 = ((fSlow153 * ((35 * fSlow153) + -30)) + 3); - double fSlow156 = ((fSlow150 * ((35 * fSlow150) + -30)) + 3); - double fSlow157 = ((3 * fSlow153) + -1); - double fSlow158 = ((3 * fSlow150) + -1); - double fSlow159 = (0.7071067811865476 * fSlow39); - double fSlow160 = (0.7071067811865475 * fSlow36); - double fSlow161 = (fSlow159 + fSlow160); - double fSlow162 = faustpower<2>(fSlow161); - double fSlow163 = (3.5 * (fSlow85 * ((5 * fSlow162) + -3))); - double fSlow164 = (0.7071067811865476 * fSlow5); - double fSlow165 = (0.7071067811865475 * fSlow2); - double fSlow166 = (fSlow164 + fSlow165); - double fSlow167 = faustpower<2>(fSlow166); - double fSlow168 = (3.5 * (fSlow85 * ((5 * fSlow167) + -3))); - double fSlow169 = ((fSlow167 * ((35 * fSlow167) + -30)) + 3); - double fSlow170 = ((fSlow162 * ((35 * fSlow162) + -30)) + 3); - double fSlow171 = ((3 * fSlow167) + -1); - double fSlow172 = ((3 * fSlow162) + -1); - double fSlow173 = (0.7071067811865476 * fSlow122); - double fSlow174 = (fSlow165 + fSlow173); - double fSlow175 = faustpower<2>(fSlow174); - double fSlow176 = ((3 * fSlow175) + -1); - double fSlow177 = (0.7071067811865476 * fSlow119); - double fSlow178 = (fSlow160 + fSlow177); - double fSlow179 = faustpower<2>(fSlow178); - double fSlow180 = ((3 * fSlow179) + -1); - double fSlow181 = ((fSlow175 * ((35 * fSlow175) + -30)) + 3); - double fSlow182 = ((fSlow179 * ((35 * fSlow179) + -30)) + 3); - double fSlow183 = (3.5 * (fSlow85 * ((5 * fSlow179) + -3))); - double fSlow184 = (3.5 * (fSlow85 * ((5 * fSlow175) + -3))); - double fSlow185 = (0.7071067811865476 * fSlow131); - double fSlow186 = (fSlow165 + fSlow185); - double fSlow187 = faustpower<2>(fSlow186); - double fSlow188 = ((3 * fSlow187) + -1); - double fSlow189 = (0.7071067811865476 * fSlow129); - double fSlow190 = (fSlow160 + fSlow189); - double fSlow191 = faustpower<2>(fSlow190); - double fSlow192 = ((3 * fSlow191) + -1); - double fSlow193 = (3.5 * (fSlow85 * ((5 * fSlow187) + -3))); - double fSlow194 = (3.5 * (((5 * fSlow191) + -3) * fSlow85)); - double fSlow195 = ((fSlow187 * ((35 * fSlow187) + -30)) + 3); - double fSlow196 = ((fSlow191 * ((35 * fSlow191) + -30)) + 3); - double fSlow197 = (0.7071067811865476 * fSlow139); - double fSlow198 = (fSlow197 + fSlow165); - double fSlow199 = faustpower<2>(fSlow198); - double fSlow200 = ((3 * fSlow199) + -1); - double fSlow201 = (0.7071067811865476 * fSlow141); - double fSlow202 = (fSlow160 + fSlow201); - double fSlow203 = faustpower<2>(fSlow202); - double fSlow204 = ((3 * fSlow203) + -1); - double fSlow205 = (3.5 * (fSlow85 * ((5 * fSlow203) + -3))); - double fSlow206 = (3.5 * (fSlow85 * ((5 * fSlow199) + -3))); - double fSlow207 = ((fSlow203 * ((35 * fSlow203) + -30)) + 3); - double fSlow208 = ((fSlow199 * ((35 * fSlow199) + -30)) + 3); - double fSlow209 = (fSlow3 * cos((fSlow4 + -0.7853981633974483))); - double fSlow210 = (fSlow37 * cos((fSlow38 + -0.7853981633974483))); - double fSlow211 = faustpower<2>(fSlow209); - double fSlow212 = ((fSlow211 * ((35 * fSlow211) + -30)) + 3); - double fSlow213 = faustpower<2>(fSlow210); - double fSlow214 = ((fSlow213 * ((35 * fSlow213) + -30)) + 3); - double fSlow215 = ((5 * faustpower<3>(fSlow210)) - (3 * fSlow210)); - double fSlow216 = ((5 * faustpower<3>(fSlow209)) - (3 * fSlow209)); - double fSlow217 = ((3 * fSlow211) + -1); - double fSlow218 = ((3 * fSlow213) + -1); - double fSlow219 = (fSlow3 * cos((fSlow4 + -2.356194490192345))); - double fSlow220 = (fSlow37 * cos((fSlow38 + -2.356194490192345))); - double fSlow221 = faustpower<2>(fSlow219); - double fSlow222 = ((fSlow221 * ((35 * fSlow221) + -30)) + 3); - double fSlow223 = faustpower<2>(fSlow220); - double fSlow224 = ((fSlow223 * ((35 * fSlow223) + -30)) + 3); - double fSlow225 = ((5 * faustpower<3>(fSlow220)) - (3 * fSlow220)); - double fSlow226 = ((5 * faustpower<3>(fSlow219)) - (3 * fSlow219)); - double fSlow227 = ((3 * fSlow221) + -1); - double fSlow228 = ((3 * fSlow223) + -1); - double fSlow229 = (fSlow37 * cos((fSlow38 + -3.9269908169872414))); - double fSlow230 = faustpower<2>(fSlow229); - double fSlow231 = ((3 * fSlow230) + -1); - double fSlow232 = (fSlow3 * cos((fSlow4 + -3.9269908169872414))); - double fSlow233 = faustpower<2>(fSlow232); - double fSlow234 = ((3 * fSlow233) + -1); - double fSlow235 = ((5 * faustpower<3>(fSlow229)) - (3 * fSlow229)); - double fSlow236 = ((5 * faustpower<3>(fSlow232)) - (3 * fSlow232)); - double fSlow237 = ((fSlow233 * ((35 * fSlow233) + -30)) + 3); - double fSlow238 = ((fSlow230 * ((35 * fSlow230) + -30)) + 3); - double fSlow239 = (fSlow3 * cos((fSlow4 + -5.497787143782138))); - double fSlow240 = faustpower<2>(fSlow239); - double fSlow241 = ((fSlow240 * ((35 * fSlow240) + -30)) + 3); - double fSlow242 = (fSlow37 * cos((fSlow38 + -5.497787143782138))); - double fSlow243 = faustpower<2>(fSlow242); - double fSlow244 = ((fSlow243 * ((35 * fSlow243) + -30)) + 3); - double fSlow245 = ((5 * faustpower<3>(fSlow239)) - (3 * fSlow239)); - double fSlow246 = ((5 * faustpower<3>(fSlow242)) - (3 * fSlow242)); - double fSlow247 = ((3 * fSlow240) + -1); - double fSlow248 = ((3 * fSlow243) + -1); - double fSlow249 = (fSlow164 - fSlow165); - double fSlow250 = faustpower<2>(fSlow249); - double fSlow251 = ((3 * fSlow250) + -1); - double fSlow252 = (fSlow159 - fSlow160); - double fSlow253 = faustpower<2>(fSlow252); - double fSlow254 = ((3 * fSlow253) + -1); - double fSlow255 = ((fSlow250 * ((35 * fSlow250) + -30)) + 3); - double fSlow256 = ((fSlow253 * ((35 * fSlow253) + -30)) + 3); - double fSlow257 = (3.5 * (fSlow85 * ((5 * fSlow253) + -3))); - double fSlow258 = (3.5 * (fSlow85 * ((5 * fSlow250) + -3))); - double fSlow259 = (fSlow177 - fSlow160); - double fSlow260 = faustpower<2>(fSlow259); - double fSlow261 = ((fSlow260 * ((35 * fSlow260) + -30)) + 3); - double fSlow262 = (fSlow173 - fSlow165); - double fSlow263 = faustpower<2>(fSlow262); - double fSlow264 = ((fSlow263 * ((35 * fSlow263) + -30)) + 3); - double fSlow265 = (3.5 * (fSlow85 * ((5 * fSlow260) + -3))); - double fSlow266 = (3.5 * (fSlow85 * ((5 * fSlow263) + -3))); - double fSlow267 = ((3 * fSlow260) + -1); - double fSlow268 = ((3 * fSlow263) + -1); - double fSlow269 = (fSlow189 - fSlow160); - double fSlow270 = faustpower<2>(fSlow269); - double fSlow271 = ((fSlow270 * ((35 * fSlow270) + -30)) + 3); - double fSlow272 = (fSlow185 - fSlow165); - double fSlow273 = faustpower<2>(fSlow272); - double fSlow274 = ((fSlow273 * ((35 * fSlow273) + -30)) + 3); - double fSlow275 = (3.5 * (fSlow85 * ((5 * fSlow270) + -3))); - double fSlow276 = (3.5 * (fSlow85 * ((5 * fSlow273) + -3))); - double fSlow277 = ((3 * fSlow270) + -1); - double fSlow278 = ((3 * fSlow273) + -1); - double fSlow279 = (fSlow197 - fSlow165); - double fSlow280 = faustpower<2>(fSlow279); - double fSlow281 = ((fSlow280 * ((35 * fSlow280) + -30)) + 3); - double fSlow282 = (fSlow201 - fSlow160); - double fSlow283 = faustpower<2>(fSlow282); - double fSlow284 = ((fSlow283 * ((35 * fSlow283) + -30)) + 3); - double fSlow285 = (3.5 * (fSlow85 * ((5 * fSlow283) + -3))); - double fSlow286 = (3.5 * (fSlow85 * ((5 * fSlow280) + -3))); - double fSlow287 = ((3 * fSlow283) + -1); - double fSlow288 = ((3 * fSlow280) + -1); - double fSlow289 = (0.8164965809277259 * fSlow209); - double fSlow290 = (0.5773502691896258 * fSlow2); - double fSlow291 = (fSlow289 + fSlow290); - double fSlow292 = faustpower<2>(fSlow291); - double fSlow293 = ((fSlow292 * ((35 * fSlow292) + -30)) + 3); - double fSlow294 = (0.8164965809277259 * fSlow210); - double fSlow295 = (0.5773502691896258 * fSlow36); - double fSlow296 = (fSlow294 + fSlow295); - double fSlow297 = faustpower<2>(fSlow296); - double fSlow298 = ((fSlow297 * ((35 * fSlow297) + -30)) + 3); - double fSlow299 = ((3 * fSlow297) + -1); - double fSlow300 = ((3 * fSlow292) + -1); - double fSlow301 = (3.5 * (fSlow85 * ((5 * fSlow297) + -3))); - double fSlow302 = (3.5 * (fSlow85 * ((5 * fSlow292) + -3))); - double fSlow303 = (0.8164965809277259 * fSlow220); - double fSlow304 = (fSlow295 + fSlow303); - double fSlow305 = faustpower<2>(fSlow304); - double fSlow306 = ((3 * fSlow305) + -1); - double fSlow307 = (0.8164965809277259 * fSlow219); - double fSlow308 = (fSlow290 + fSlow307); - double fSlow309 = faustpower<2>(fSlow308); - double fSlow310 = ((3 * fSlow309) + -1); - double fSlow311 = ((fSlow305 * ((35 * fSlow305) + -30)) + 3); - double fSlow312 = ((fSlow309 * ((35 * fSlow309) + -30)) + 3); - double fSlow313 = (3.5 * (fSlow85 * ((5 * fSlow305) + -3))); - double fSlow314 = (3.5 * (fSlow85 * ((5 * fSlow309) + -3))); - double fSlow315 = (0.8164965809277259 * fSlow229); - double fSlow316 = (fSlow295 + fSlow315); - double fSlow317 = faustpower<2>(fSlow316); - double fSlow318 = ((3 * fSlow317) + -1); - double fSlow319 = (0.8164965809277259 * fSlow232); - double fSlow320 = (fSlow290 + fSlow319); - double fSlow321 = faustpower<2>(fSlow320); - double fSlow322 = ((3 * fSlow321) + -1); - double fSlow323 = (3.5 * (fSlow85 * ((5 * fSlow317) + -3))); - double fSlow324 = (3.5 * (fSlow85 * ((5 * fSlow321) + -3))); - double fSlow325 = ((fSlow317 * ((35 * fSlow317) + -30)) + 3); - double fSlow326 = ((fSlow321 * ((35 * fSlow321) + -30)) + 3); - double fSlow327 = (0.8164965809277259 * fSlow242); - double fSlow328 = (fSlow295 + fSlow327); - double fSlow329 = faustpower<2>(fSlow328); - double fSlow330 = (3.5 * (fSlow85 * ((5 * fSlow329) + -3))); - double fSlow331 = (0.8164965809277259 * fSlow239); - double fSlow332 = (fSlow290 + fSlow331); - double fSlow333 = faustpower<2>(fSlow332); - double fSlow334 = (3.5 * (fSlow85 * ((5 * fSlow333) + -3))); - double fSlow335 = ((3 * fSlow333) + -1); - double fSlow336 = ((3 * fSlow329) + -1); - double fSlow337 = ((fSlow329 * ((35 * fSlow329) + -30)) + 3); - double fSlow338 = ((fSlow333 * ((35 * fSlow333) + -30)) + 3); - double fSlow339 = (fSlow294 - fSlow295); - double fSlow340 = faustpower<2>(fSlow339); - double fSlow341 = (3.5 * (fSlow85 * ((5 * fSlow340) + -3))); - double fSlow342 = (fSlow289 - fSlow290); - double fSlow343 = faustpower<2>(fSlow342); - double fSlow344 = (3.5 * (fSlow85 * ((5 * fSlow343) + -3))); - double fSlow345 = ((3 * fSlow343) + -1); - double fSlow346 = ((3 * fSlow340) + -1); - double fSlow347 = ((fSlow343 * ((35 * fSlow343) + -30)) + 3); - double fSlow348 = ((fSlow340 * ((35 * fSlow340) + -30)) + 3); - double fSlow349 = (fSlow307 - fSlow290); - double fSlow350 = faustpower<2>(fSlow349); - double fSlow351 = ((3 * fSlow350) + -1); - double fSlow352 = (fSlow303 - fSlow295); - double fSlow353 = faustpower<2>(fSlow352); - double fSlow354 = ((3 * fSlow353) + -1); - double fSlow355 = ((fSlow350 * ((35 * fSlow350) + -30)) + 3); - double fSlow356 = ((fSlow353 * ((35 * fSlow353) + -30)) + 3); - double fSlow357 = (3.5 * (fSlow85 * ((5 * fSlow353) + -3))); - double fSlow358 = (3.5 * (fSlow85 * ((5 * fSlow350) + -3))); - double fSlow359 = (fSlow315 - fSlow295); - double fSlow360 = faustpower<2>(fSlow359); - double fSlow361 = ((fSlow360 * ((35 * fSlow360) + -30)) + 3); - double fSlow362 = (fSlow319 - fSlow290); - double fSlow363 = faustpower<2>(fSlow362); - double fSlow364 = ((fSlow363 * ((35 * fSlow363) + -30)) + 3); - double fSlow365 = ((3 * fSlow360) + -1); - double fSlow366 = ((3 * fSlow363) + -1); - double fSlow367 = (3.5 * (fSlow85 * ((5 * fSlow360) + -3))); - double fSlow368 = (3.5 * (fSlow85 * ((5 * fSlow363) + -3))); - double fSlow369 = (fSlow327 - fSlow295); - double fSlow370 = faustpower<2>(fSlow369); - double fSlow371 = (3.5 * (fSlow85 * ((5 * fSlow370) + -3))); - double fSlow372 = (fSlow331 - fSlow290); - double fSlow373 = faustpower<2>(fSlow372); - double fSlow374 = (3.5 * (fSlow85 * ((5 * fSlow373) + -3))); - double fSlow375 = ((3 * fSlow373) + -1); - double fSlow376 = ((3 * fSlow370) + -1); - double fSlow377 = ((fSlow373 * ((35 * fSlow373) + -30)) + 3); - double fSlow378 = ((fSlow370 * ((35 * fSlow370) + -30)) + 3); - double fSlow379 = (0.4264014327112203 * (fSlow37 * cos((fSlow38 + -0.7853981633974484)))); - double fSlow380 = (0.9045340337332911 * fSlow36); - double fSlow381 = (fSlow379 + fSlow380); - double fSlow382 = faustpower<2>(fSlow381); - double fSlow383 = (3.5 * (fSlow85 * ((5 * fSlow382) + -3))); - double fSlow384 = (0.4264014327112203 * (fSlow3 * cos((fSlow4 + -0.7853981633974484)))); - double fSlow385 = (0.9045340337332911 * fSlow2); - double fSlow386 = (fSlow384 + fSlow385); - double fSlow387 = faustpower<2>(fSlow386); - double fSlow388 = (3.5 * (fSlow85 * ((5 * fSlow387) + -3))); - double fSlow389 = ((fSlow387 * ((35 * fSlow387) + -30)) + 3); - double fSlow390 = ((fSlow382 * ((35 * fSlow382) + -30)) + 3); - double fSlow391 = ((3 * fSlow382) + -1); - double fSlow392 = ((3 * fSlow387) + -1); - double fSlow393 = (0.4264014327112203 * fSlow219); - double fSlow394 = (fSlow385 + fSlow393); - double fSlow395 = faustpower<2>(fSlow394); - double fSlow396 = ((fSlow395 * ((35 * fSlow395) + -30)) + 3); - double fSlow397 = (0.4264014327112203 * fSlow220); - double fSlow398 = (fSlow380 + fSlow397); - double fSlow399 = faustpower<2>(fSlow398); - double fSlow400 = ((fSlow399 * ((35 * fSlow399) + -30)) + 3); - double fSlow401 = (3.5 * (fSlow85 * ((5 * fSlow399) + -3))); - double fSlow402 = (3.5 * (fSlow85 * ((5 * fSlow395) + -3))); - double fSlow403 = ((3 * fSlow399) + -1); - double fSlow404 = ((3 * fSlow395) + -1); - double fSlow405 = (0.4264014327112203 * fSlow229); - double fSlow406 = (fSlow380 + fSlow405); - double fSlow407 = faustpower<2>(fSlow406); - double fSlow408 = (3.5 * (fSlow85 * ((5 * fSlow407) + -3))); - double fSlow409 = (0.4264014327112203 * fSlow232); - double fSlow410 = (fSlow385 + fSlow409); - double fSlow411 = faustpower<2>(fSlow410); - double fSlow412 = (3.5 * (fSlow85 * ((5 * fSlow411) + -3))); - double fSlow413 = ((3 * fSlow411) + -1); - double fSlow414 = ((3 * fSlow407) + -1); - double fSlow415 = ((fSlow411 * ((35 * fSlow411) + -30)) + 3); - double fSlow416 = ((fSlow407 * ((35 * fSlow407) + -30)) + 3); - double fSlow417 = (0.4264014327112203 * fSlow242); - double fSlow418 = (fSlow380 + fSlow417); - double fSlow419 = faustpower<2>(fSlow418); - double fSlow420 = (3.5 * (fSlow85 * ((5 * fSlow419) + -3))); - double fSlow421 = (0.4264014327112203 * fSlow239); - double fSlow422 = (fSlow385 + fSlow421); - double fSlow423 = faustpower<2>(fSlow422); - double fSlow424 = (3.5 * (fSlow85 * ((5 * fSlow423) + -3))); - double fSlow425 = ((3 * fSlow423) + -1); - double fSlow426 = ((3 * fSlow419) + -1); - double fSlow427 = ((fSlow419 * ((35 * fSlow419) + -30)) + 3); - double fSlow428 = ((fSlow423 * ((35 * fSlow423) + -30)) + 3); - double fSlow429 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -0.32175055439664263)))); - double fSlow430 = (0.3015113445777635 * fSlow36); - double fSlow431 = (fSlow429 + fSlow430); - double fSlow432 = faustpower<2>(fSlow431); - double fSlow433 = ((fSlow432 * ((35 * fSlow432) + -30)) + 3); - double fSlow434 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -0.32175055439664263)))); - double fSlow435 = (0.3015113445777635 * fSlow2); - double fSlow436 = (fSlow434 + fSlow435); - double fSlow437 = faustpower<2>(fSlow436); - double fSlow438 = ((fSlow437 * ((35 * fSlow437) + -30)) + 3); - double fSlow439 = ((3 * fSlow432) + -1); - double fSlow440 = ((3 * fSlow437) + -1); - double fSlow441 = (3.5 * (fSlow85 * ((5 * fSlow432) + -3))); - double fSlow442 = (3.5 * (fSlow85 * ((5 * fSlow437) + -3))); - double fSlow443 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -1.2490457723982544)))); - double fSlow444 = (fSlow430 + fSlow443); - double fSlow445 = faustpower<2>(fSlow444); - double fSlow446 = (3.5 * (fSlow85 * ((5 * fSlow445) + -3))); - double fSlow447 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.2490457723982544)))); - double fSlow448 = (fSlow435 + fSlow447); - double fSlow449 = faustpower<2>(fSlow448); - double fSlow450 = (3.5 * (fSlow85 * ((5 * fSlow449) + -3))); - double fSlow451 = ((fSlow449 * ((35 * fSlow449) + -30)) + 3); - double fSlow452 = ((fSlow445 * ((35 * fSlow445) + -30)) + 3); - double fSlow453 = ((3 * fSlow445) + -1); - double fSlow454 = ((3 * fSlow449) + -1); - double fSlow455 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -1.8925468811915387)))); - double fSlow456 = (fSlow430 + fSlow455); - double fSlow457 = faustpower<2>(fSlow456); - double fSlow458 = (3.5 * (fSlow85 * ((5 * fSlow457) + -3))); - double fSlow459 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.8925468811915387)))); - double fSlow460 = (fSlow435 + fSlow459); - double fSlow461 = faustpower<2>(fSlow460); - double fSlow462 = (3.5 * (fSlow85 * ((5 * fSlow461) + -3))); - double fSlow463 = ((3 * fSlow461) + -1); - double fSlow464 = ((3 * fSlow457) + -1); - double fSlow465 = ((fSlow457 * ((35 * fSlow457) + -30)) + 3); - double fSlow466 = ((fSlow461 * ((35 * fSlow461) + -30)) + 3); - double fSlow467 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -2.8198420991931505)))); - double fSlow468 = (fSlow435 + fSlow467); - double fSlow469 = faustpower<2>(fSlow468); - double fSlow470 = ((3 * fSlow469) + -1); - double fSlow471 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -2.8198420991931505)))); - double fSlow472 = (fSlow430 + fSlow471); - double fSlow473 = faustpower<2>(fSlow472); - double fSlow474 = ((3 * fSlow473) + -1); - double fSlow475 = ((fSlow469 * ((35 * fSlow469) + -30)) + 3); - double fSlow476 = ((fSlow473 * ((35 * fSlow473) + -30)) + 3); - double fSlow477 = (3.5 * (fSlow85 * ((5 * fSlow473) + -3))); - double fSlow478 = (3.5 * (fSlow85 * ((5 * fSlow469) + -3))); - double fSlow479 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -3.4633432079864357)))); - double fSlow480 = (fSlow479 + fSlow430); - double fSlow481 = faustpower<2>(fSlow480); - double fSlow482 = (3.5 * (fSlow85 * ((5 * fSlow481) + -3))); - double fSlow483 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -3.4633432079864357)))); - double fSlow484 = (fSlow435 + fSlow483); - double fSlow485 = faustpower<2>(fSlow484); - double fSlow486 = (3.5 * (fSlow85 * ((5 * fSlow485) + -3))); - double fSlow487 = ((3 * fSlow481) + -1); - double fSlow488 = ((3 * fSlow485) + -1); - double fSlow489 = ((((35 * fSlow485) + -30) * fSlow485) + 3); - double fSlow490 = ((fSlow481 * ((35 * fSlow481) + -30)) + 3); - double fSlow491 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -4.3906384259880475)))); - double fSlow492 = (fSlow491 + fSlow430); - double fSlow493 = faustpower<2>(fSlow492); - double fSlow494 = ((3 * fSlow493) + -1); - double fSlow495 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -4.3906384259880475)))); - double fSlow496 = (fSlow495 + fSlow435); - double fSlow497 = faustpower<2>(fSlow496); - double fSlow498 = ((3 * fSlow497) + -1); - double fSlow499 = (3.5 * (fSlow85 * ((5 * fSlow493) + -3))); - double fSlow500 = (3.5 * (fSlow85 * ((5 * fSlow497) + -3))); - double fSlow501 = ((fSlow493 * ((35 * fSlow493) + -30)) + 3); - double fSlow502 = ((fSlow497 * ((35 * fSlow497) + -30)) + 3); - double fSlow503 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.034139534781332)))); - double fSlow504 = (fSlow503 + fSlow435); - double fSlow505 = faustpower<2>(fSlow504); - double fSlow506 = ((fSlow505 * ((35 * fSlow505) + -30)) + 3); - double fSlow507 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -5.034139534781332)))); - double fSlow508 = (fSlow507 + fSlow430); - double fSlow509 = faustpower<2>(fSlow508); - double fSlow510 = ((fSlow509 * ((35 * fSlow509) + -30)) + 3); - double fSlow511 = (3.5 * (fSlow85 * ((5 * fSlow509) + -3))); - double fSlow512 = (3.5 * (fSlow85 * ((5 * fSlow505) + -3))); - double fSlow513 = ((3 * fSlow509) + -1); - double fSlow514 = ((3 * fSlow505) + -1); - double fSlow515 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -5.961434752782943)))); - double fSlow516 = (fSlow515 + fSlow430); - double fSlow517 = faustpower<2>(fSlow516); - double fSlow518 = (3.5 * (fSlow85 * ((5 * fSlow517) + -3))); - double fSlow519 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.961434752782943)))); - double fSlow520 = (fSlow519 + fSlow435); - double fSlow521 = faustpower<2>(fSlow520); - double fSlow522 = (3.5 * (fSlow85 * ((5 * fSlow521) + -3))); - double fSlow523 = ((3 * fSlow521) + -1); - double fSlow524 = ((3 * fSlow517) + -1); - double fSlow525 = ((fSlow517 * ((35 * fSlow517) + -30)) + 3); - double fSlow526 = ((fSlow521 * ((35 * fSlow521) + -30)) + 3); - double fSlow527 = (fSlow429 - fSlow430); - double fSlow528 = faustpower<2>(fSlow527); - double fSlow529 = ((fSlow528 * ((35 * fSlow528) + -30)) + 3); - double fSlow530 = (fSlow434 - fSlow435); - double fSlow531 = faustpower<2>(fSlow530); - double fSlow532 = ((fSlow531 * ((35 * fSlow531) + -30)) + 3); - double fSlow533 = (3.5 * (((5 * fSlow528) + -3) * fSlow85)); - double fSlow534 = (3.5 * (fSlow85 * ((5 * fSlow531) + -3))); - double fSlow535 = ((3 * fSlow528) + -1); - double fSlow536 = ((3 * fSlow531) + -1); - double fSlow537 = (fSlow447 - fSlow435); - double fSlow538 = faustpower<2>(fSlow537); - double fSlow539 = ((3 * fSlow538) + -1); - double fSlow540 = (fSlow443 - fSlow430); - double fSlow541 = faustpower<2>(fSlow540); - double fSlow542 = ((3 * fSlow541) + -1); - double fSlow543 = (3.5 * (fSlow85 * ((5 * fSlow541) + -3))); - double fSlow544 = (3.5 * (fSlow85 * ((5 * fSlow538) + -3))); - double fSlow545 = ((fSlow538 * ((35 * fSlow538) + -30)) + 3); - double fSlow546 = ((fSlow541 * ((35 * fSlow541) + -30)) + 3); - double fSlow547 = (fSlow459 - fSlow435); - double fSlow548 = faustpower<2>(fSlow547); - double fSlow549 = ((3 * fSlow548) + -1); - double fSlow550 = (fSlow455 - fSlow430); - double fSlow551 = faustpower<2>(fSlow550); - double fSlow552 = ((3 * fSlow551) + -1); - double fSlow553 = (3.5 * (fSlow85 * ((5 * fSlow551) + -3))); - double fSlow554 = (3.5 * (fSlow85 * ((5 * fSlow548) + -3))); - double fSlow555 = ((fSlow548 * ((35 * fSlow548) + -30)) + 3); - double fSlow556 = ((fSlow551 * ((35 * fSlow551) + -30)) + 3); - double fSlow557 = (fSlow471 - fSlow430); - double fSlow558 = faustpower<2>(fSlow557); - double fSlow559 = (3.5 * (fSlow85 * ((5 * fSlow558) + -3))); - double fSlow560 = (fSlow467 - fSlow435); - double fSlow561 = faustpower<2>(fSlow560); - double fSlow562 = (3.5 * (fSlow85 * ((5 * fSlow561) + -3))); - double fSlow563 = ((3 * fSlow558) + -1); - double fSlow564 = ((3 * fSlow561) + -1); - double fSlow565 = ((fSlow561 * ((35 * fSlow561) + -30)) + 3); - double fSlow566 = ((fSlow558 * ((35 * fSlow558) + -30)) + 3); - double fSlow567 = (fSlow479 - fSlow430); - double fSlow568 = faustpower<2>(fSlow567); - double fSlow569 = (3.5 * (fSlow85 * ((5 * fSlow568) + -3))); - double fSlow570 = (fSlow483 - fSlow435); - double fSlow571 = faustpower<2>(fSlow570); - double fSlow572 = (3.5 * (fSlow85 * ((5 * fSlow571) + -3))); - double fSlow573 = ((3 * fSlow571) + -1); - double fSlow574 = ((3 * fSlow568) + -1); - double fSlow575 = ((fSlow568 * ((35 * fSlow568) + -30)) + 3); - double fSlow576 = ((fSlow571 * ((35 * fSlow571) + -30)) + 3); - double fSlow577 = (fSlow491 - fSlow430); - double fSlow578 = faustpower<2>(fSlow577); - double fSlow579 = (3.5 * (fSlow85 * ((5 * fSlow578) + -3))); - double fSlow580 = (fSlow495 - fSlow435); - double fSlow581 = faustpower<2>(fSlow580); - double fSlow582 = (3.5 * (fSlow85 * ((5 * fSlow581) + -3))); - double fSlow583 = ((3 * fSlow578) + -1); - double fSlow584 = ((3 * fSlow581) + -1); - double fSlow585 = ((fSlow581 * ((35 * fSlow581) + -30)) + 3); - double fSlow586 = ((fSlow578 * ((35 * fSlow578) + -30)) + 3); - double fSlow587 = (fSlow507 - fSlow430); - double fSlow588 = faustpower<2>(fSlow587); - double fSlow589 = (3.5 * (fSlow85 * ((5 * fSlow588) + -3))); - double fSlow590 = (fSlow503 - fSlow435); - double fSlow591 = faustpower<2>(fSlow590); - double fSlow592 = (3.5 * (fSlow85 * ((5 * fSlow591) + -3))); - double fSlow593 = ((3 * fSlow591) + -1); - double fSlow594 = ((3 * fSlow588) + -1); - double fSlow595 = ((fSlow588 * ((35 * fSlow588) + -30)) + 3); - double fSlow596 = ((fSlow591 * ((35 * fSlow591) + -30)) + 3); - double fSlow597 = (fSlow519 - fSlow435); - double fSlow598 = faustpower<2>(fSlow597); - double fSlow599 = ((((35 * fSlow598) + -30) * fSlow598) + 3); - double fSlow600 = (fSlow515 - fSlow430); - double fSlow601 = faustpower<2>(fSlow600); - double fSlow602 = ((fSlow601 * ((35 * fSlow601) + -30)) + 3); - double fSlow603 = (3.5 * (((5 * fSlow601) + -3) * fSlow85)); - double fSlow604 = (3.5 * (((5 * fSlow598) + -3) * fSlow85)); - double fSlow605 = ((3 * fSlow601) + -1); - double fSlow606 = ((3 * fSlow598) + -1); - double fSlow607 = (fSlow379 - fSlow380); - double fSlow608 = faustpower<2>(fSlow607); - double fSlow609 = (3.5 * (((5 * fSlow608) + -3) * fSlow85)); - double fSlow610 = (fSlow384 - fSlow385); - double fSlow611 = faustpower<2>(fSlow610); - double fSlow612 = (3.5 * (((5 * fSlow611) + -3) * fSlow85)); - double fSlow613 = ((fSlow611 * ((35 * fSlow611) + -30)) + 3); - double fSlow614 = ((fSlow608 * ((35 * fSlow608) + -30)) + 3); - double fSlow615 = ((3 * fSlow611) + -1); - double fSlow616 = ((3 * fSlow608) + -1); - double fSlow617 = (fSlow397 - fSlow380); - double fSlow618 = faustpower<2>(fSlow617); - double fSlow619 = (3.5 * (((5 * fSlow618) + -3) * fSlow85)); - double fSlow620 = (fSlow393 - fSlow385); - double fSlow621 = faustpower<2>(fSlow620); - double fSlow622 = (3.5 * (((5 * fSlow621) + -3) * fSlow85)); - double fSlow623 = ((fSlow621 * ((35 * fSlow621) + -30)) + 3); - double fSlow624 = ((fSlow618 * ((35 * fSlow618) + -30)) + 3); - double fSlow625 = ((3 * fSlow621) + -1); - double fSlow626 = ((3 * fSlow618) + -1); - double fSlow627 = (fSlow405 - fSlow380); - double fSlow628 = faustpower<2>(fSlow627); - double fSlow629 = (3.5 * (((5 * fSlow628) + -3) * fSlow85)); - double fSlow630 = (fSlow409 - fSlow385); - double fSlow631 = faustpower<2>(fSlow630); - double fSlow632 = (3.5 * (((5 * fSlow631) + -3) * fSlow85)); - double fSlow633 = ((fSlow631 * ((35 * fSlow631) + -30)) + 3); - double fSlow634 = ((fSlow628 * ((35 * fSlow628) + -30)) + 3); - double fSlow635 = ((3 * fSlow631) + -1); - double fSlow636 = ((3 * fSlow628) + -1); - double fSlow637 = (fSlow417 - fSlow380); - double fSlow638 = faustpower<2>(fSlow637); - double fSlow639 = (3.5 * (((5 * fSlow638) + -3) * fSlow85)); - double fSlow640 = (fSlow421 - fSlow385); - double fSlow641 = faustpower<2>(fSlow640); - double fSlow642 = (3.5 * (((5 * fSlow641) + -3) * fSlow85)); - double fSlow643 = ((fSlow641 * ((35 * fSlow641) + -30)) + 3); - double fSlow644 = ((fSlow638 * ((35 * fSlow638) + -30)) + 3); - double fSlow645 = ((3 * fSlow641) + -1); - double fSlow646 = ((3 * fSlow638) + -1); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOAPanLebedev505.cpp b/source/HOAUGens/HOAPanLebedev505.cpp deleted file mode 100644 index e2ece9167a..0000000000 --- a/source/HOAUGens/HOAPanLebedev505.cpp +++ /dev/null @@ -1,3266 +0,0 @@ -//---------------------------------------------------------- -// name: "HOAPanLebedev505" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.95 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif - -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -#include -#include -#include -#include - -/************************************************************************ - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - ************************************************************************ - ************************************************************************/ - -/****************************************************************************** -******************************************************************************* - - FAUST DSP - -******************************************************************************* -*******************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the UI* parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the UI* user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** Init instance state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with sucessive in/out audio buffers. - * - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation : alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, doucbe or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#ifndef FAUST_UI_H -#define FAUST_UI_H - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust User Interface - * This abstract class contains only the method that the faust compiler can - * generate to describe a DSP interface. - ******************************************************************************/ - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -//---------------------------------------------------------------- -// Generic decorator -//---------------------------------------------------------------- - -class DecoratorUI : public UI -{ - protected: - - UI* fUI; - - public: - - DecoratorUI(UI* ui = 0):fUI(ui) - {} - - virtual ~DecoratorUI() { delete fUI; } - - // -- widget's layouts - virtual void openTabBox(const char* label) { fUI->openTabBox(label); } - virtual void openHorizontalBox(const char* label) { fUI->openHorizontalBox(label); } - virtual void openVerticalBox(const char* label) { fUI->openVerticalBox(label); } - virtual void closeBox() { fUI->closeBox(); } - - // -- active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) { fUI->addButton(label, zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) { fUI->addCheckButton(label, zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addVerticalSlider(label, zone, init, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addHorizontalSlider(label, zone, init, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { fUI->addNumEntry(label, zone, init, min, max, step); } - - // -- passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addHorizontalBargraph(label, zone, min, max); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { fUI->addVerticalBargraph(label, zone, min, max); } - - virtual void declare(FAUSTFLOAT* zone, const char* key, const char* val) { fUI->declare(zone, key, val); } - -}; - -#endif -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - ************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - ************************************************************************ - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 -# define FAUST_EXPORT __attribute__((visibility("default"))) -#else -# define FAUST_EXPORT SC_API_EXPORT -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fConst2; - FAUSTFLOAT fentry0; - double fConst3; - FAUSTFLOAT fslider2; - double fConst4; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fslider3; - double fRec3[2]; - double fConst5; - double fRec4[2]; - double fRec5[2]; - double fRec2[2]; - double fRec6[2]; - double fVec0[2]; - double fRec7[2]; - double fConst6; - double fRec8[2]; - double fRec9[2]; - double fRec1[2]; - double fRec10[2]; - double fVec1[2]; - double fRec11[2]; - double fRec13[2]; - double fRec14[2]; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; - double fRec12[2]; - FAUSTFLOAT fslider4; - FAUSTFLOAT fslider5; - double fRec19[2]; - double fRec20[2]; - FAUSTFLOAT fslider6; - double fRec22[2]; - double fRec23[2]; - FAUSTFLOAT fcheckbox2; - FAUSTFLOAT fslider7; - double fRec24[2]; - double fRec21[2]; - double fRec25[2]; - double fVec2[2]; - double fRec26[2]; - double fRec18[2]; - double fRec27[2]; - double fVec3[2]; - double fRec28[2]; - double fRec30[2]; - double fRec31[2]; - double fRec33[2]; - double fRec34[2]; - double fRec32[2]; - double fRec29[2]; - FAUSTFLOAT fcheckbox3; - double fConst7; - double fConst8; - double fRec36[2]; - double fRec37[2]; - double fRec35[2]; - double fRec38[2]; - double fVec4[2]; - double fRec39[2]; - double fRec41[2]; - double fRec42[2]; - double fRec40[2]; - double fRec44[2]; - double fRec45[2]; - double fRec43[2]; - double fRec46[2]; - double fVec5[2]; - double fRec47[2]; - double fRec49[2]; - double fRec50[2]; - double fRec48[2]; - FAUSTFLOAT fcheckbox4; - FAUSTFLOAT fcheckbox5; - double fConst9; - double fRec53[2]; - double fRec52[2]; - double fRec51[2]; - double fRec55[2]; - double fRec54[2]; - FAUSTFLOAT fcheckbox6; - double fConst10; - double fConst11; - double fConst12; - double fConst13; - double fRec59[2]; - double fRec60[2]; - double fRec58[2]; - double fRec61[2]; - double fVec6[2]; - double fRec62[2]; - double fRec63[2]; - double fRec57[2]; - double fRec56[2]; - double fRec66[2]; - double fRec67[2]; - double fRec65[2]; - double fRec68[2]; - double fRec64[2]; - FAUSTFLOAT fcheckbox7; - double fConst14; - double fConst15; - double fConst16; - double fConst17; - double fConst18; - double fRec73[2]; - double fRec74[2]; - double fRec72[2]; - double fRec75[2]; - double fVec7[2]; - double fRec76[2]; - double fConst19; - double fRec77[2]; - double fRec78[2]; - double fRec71[2]; - double fRec79[2]; - double fVec8[2]; - double fRec80[2]; - double fRec81[2]; - double fRec70[2]; - double fRec69[2]; - double fRec84[2]; - double fRec85[2]; - double fRec87[2]; - double fRec88[2]; - double fRec86[2]; - double fRec83[2]; - double fRec89[2]; - double fRec82[2]; - double fRec92[2]; - double fRec91[2]; - double fRec90[2]; - double fRec94[2]; - double fRec93[2]; - double fRec98[2]; - double fRec99[2]; - double fRec97[2]; - double fRec100[2]; - double fVec9[2]; - double fRec101[2]; - double fRec102[2]; - double fRec96[2]; - double fRec95[2]; - double fRec105[2]; - double fRec106[2]; - double fRec104[2]; - double fRec107[2]; - double fRec103[2]; - double fRec111[2]; - double fRec112[2]; - double fRec114[2]; - double fRec115[2]; - double fRec113[2]; - double fRec116[2]; - double fVec10[2]; - double fRec117[2]; - double fRec110[2]; - double fRec118[2]; - double fVec11[2]; - double fRec119[2]; - double fRec120[2]; - double fRec109[2]; - double fRec108[2]; - double fRec123[2]; - double fRec124[2]; - double fRec126[2]; - double fRec127[2]; - double fRec125[2]; - double fRec122[2]; - double fRec128[2]; - double fRec121[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - double fRec129[2]; - FAUSTFLOAT fbargraph1; - double fRec130[2]; - FAUSTFLOAT fbargraph2; - double fRec131[2]; - FAUSTFLOAT fbargraph3; - double fRec132[2]; - FAUSTFLOAT fbargraph4; - double fRec133[2]; - FAUSTFLOAT fbargraph5; - double fRec134[2]; - FAUSTFLOAT fbargraph6; - double fRec135[2]; - FAUSTFLOAT fbargraph7; - double fRec136[2]; - FAUSTFLOAT fbargraph8; - double fRec137[2]; - FAUSTFLOAT fbargraph9; - double fRec138[2]; - FAUSTFLOAT fbargraph10; - double fRec139[2]; - FAUSTFLOAT fbargraph11; - double fRec140[2]; - FAUSTFLOAT fbargraph12; - double fRec141[2]; - FAUSTFLOAT fbargraph13; - double fRec142[2]; - FAUSTFLOAT fbargraph14; - double fRec143[2]; - FAUSTFLOAT fbargraph15; - double fRec144[2]; - FAUSTFLOAT fbargraph16; - double fRec145[2]; - FAUSTFLOAT fbargraph17; - double fRec146[2]; - FAUSTFLOAT fbargraph18; - double fRec147[2]; - FAUSTFLOAT fbargraph19; - double fRec148[2]; - FAUSTFLOAT fbargraph20; - double fRec149[2]; - FAUSTFLOAT fbargraph21; - double fRec150[2]; - FAUSTFLOAT fbargraph22; - double fRec151[2]; - FAUSTFLOAT fbargraph23; - double fRec152[2]; - FAUSTFLOAT fbargraph24; - double fRec153[2]; - FAUSTFLOAT fbargraph25; - double fRec154[2]; - FAUSTFLOAT fbargraph26; - double fRec155[2]; - FAUSTFLOAT fbargraph27; - double fRec156[2]; - FAUSTFLOAT fbargraph28; - double fRec157[2]; - FAUSTFLOAT fbargraph29; - double fRec158[2]; - FAUSTFLOAT fbargraph30; - double fRec159[2]; - FAUSTFLOAT fbargraph31; - double fRec160[2]; - FAUSTFLOAT fbargraph32; - double fRec161[2]; - FAUSTFLOAT fbargraph33; - double fRec162[2]; - FAUSTFLOAT fbargraph34; - double fRec163[2]; - FAUSTFLOAT fbargraph35; - double fRec164[2]; - FAUSTFLOAT fbargraph36; - double fRec165[2]; - FAUSTFLOAT fbargraph37; - double fRec166[2]; - FAUSTFLOAT fbargraph38; - double fRec167[2]; - FAUSTFLOAT fbargraph39; - double fRec168[2]; - FAUSTFLOAT fbargraph40; - double fRec169[2]; - FAUSTFLOAT fbargraph41; - double fRec170[2]; - FAUSTFLOAT fbargraph42; - double fRec171[2]; - FAUSTFLOAT fbargraph43; - double fRec172[2]; - FAUSTFLOAT fbargraph44; - double fRec173[2]; - FAUSTFLOAT fbargraph45; - double fRec174[2]; - FAUSTFLOAT fbargraph46; - double fRec175[2]; - FAUSTFLOAT fbargraph47; - double fRec176[2]; - FAUSTFLOAT fbargraph48; - double fRec177[2]; - FAUSTFLOAT fbargraph49; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAPanLebedev505"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signal.lib/name", "Faust Signal Routing Library"); - m->declare("signal.lib/version", "0.0"); - m->declare("basic.lib/name", "Faust Basic Element Library"); - m->declare("basic.lib/version", "0.0"); - m->declare("math.lib/name", "Faust Math Library"); - m->declare("math.lib/version", "2.0"); - m->declare("math.lib/author", "GRAME"); - m->declare("math.lib/copyright", "GRAME"); - m->declare("math.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 2; } - virtual int getNumOutputs() { return 50; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1.0, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (984.7116049589241 / fConst0); - fConst4 = (715.2883950410759 / fConst0); - fConst5 = (1430.5767900821518 / fConst0); - fConst6 = (1969.4232099178482 / fConst0); - fConst7 = (5.1e+02 / fConst0); - fConst8 = (1.02e+03 / fConst0); - fConst9 = (3.4e+02 / fConst0); - fConst10 = (789.5430205728705 / fConst0); - fConst11 = (394.7715102864353 / fConst0); - fConst12 = (625.2284897135664 / fConst0); - fConst13 = (1250.4569794271329 / fConst0); - fConst14 = (1239.8911224120607 / fConst0); - fConst15 = (619.9455612060303 / fConst0); - fConst16 = (1139.6651757122002 / fConst0); - fConst17 = (790.3892630817644 / fConst0); - fConst18 = (1580.7785261635288 / fConst0); - fConst19 = (2279.3303514244003 / fConst0); - } - virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fslider0 = 0.0; - fslider1 = 0.0; - fentry0 = 1.07; - fslider2 = 2.0; - fcheckbox1 = 0.0; - fslider3 = 0.0; - fslider4 = 0.0; - fslider5 = 0.0; - fslider6 = 2.0; - fcheckbox2 = 0.0; - fslider7 = 0.0; - fcheckbox3 = 0.0; - fcheckbox4 = 0.0; - fcheckbox5 = 0.0; - fcheckbox6 = 0.0; - fcheckbox7 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fVec5[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fVec6[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fVec7[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fVec8[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec88[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<2; i++) fRec91[i] = 0; - for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec94[i] = 0; - for (int i=0; i<2; i++) fRec93[i] = 0; - for (int i=0; i<2; i++) fRec98[i] = 0; - for (int i=0; i<2; i++) fRec99[i] = 0; - for (int i=0; i<2; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; - for (int i=0; i<2; i++) fVec9[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<2; i++) fRec105[i] = 0; - for (int i=0; i<2; i++) fRec106[i] = 0; - for (int i=0; i<2; i++) fRec104[i] = 0; - for (int i=0; i<2; i++) fRec107[i] = 0; - for (int i=0; i<2; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; - for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; - for (int i=0; i<2; i++) fRec115[i] = 0; - for (int i=0; i<2; i++) fRec113[i] = 0; - for (int i=0; i<2; i++) fRec116[i] = 0; - for (int i=0; i<2; i++) fVec10[i] = 0; - for (int i=0; i<2; i++) fRec117[i] = 0; - for (int i=0; i<2; i++) fRec110[i] = 0; - for (int i=0; i<2; i++) fRec118[i] = 0; - for (int i=0; i<2; i++) fVec11[i] = 0; - for (int i=0; i<2; i++) fRec119[i] = 0; - for (int i=0; i<2; i++) fRec120[i] = 0; - for (int i=0; i<2; i++) fRec109[i] = 0; - for (int i=0; i<2; i++) fRec108[i] = 0; - for (int i=0; i<2; i++) fRec123[i] = 0; - for (int i=0; i<2; i++) fRec124[i] = 0; - for (int i=0; i<2; i++) fRec126[i] = 0; - for (int i=0; i<2; i++) fRec127[i] = 0; - for (int i=0; i<2; i++) fRec125[i] = 0; - for (int i=0; i<2; i++) fRec122[i] = 0; - for (int i=0; i<2; i++) fRec128[i] = 0; - for (int i=0; i<2; i++) fRec121[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec129[i] = 0; - for (int i=0; i<2; i++) fRec130[i] = 0; - for (int i=0; i<2; i++) fRec131[i] = 0; - for (int i=0; i<2; i++) fRec132[i] = 0; - for (int i=0; i<2; i++) fRec133[i] = 0; - for (int i=0; i<2; i++) fRec134[i] = 0; - for (int i=0; i<2; i++) fRec135[i] = 0; - for (int i=0; i<2; i++) fRec136[i] = 0; - for (int i=0; i<2; i++) fRec137[i] = 0; - for (int i=0; i<2; i++) fRec138[i] = 0; - for (int i=0; i<2; i++) fRec139[i] = 0; - for (int i=0; i<2; i++) fRec140[i] = 0; - for (int i=0; i<2; i++) fRec141[i] = 0; - for (int i=0; i<2; i++) fRec142[i] = 0; - for (int i=0; i<2; i++) fRec143[i] = 0; - for (int i=0; i<2; i++) fRec144[i] = 0; - for (int i=0; i<2; i++) fRec145[i] = 0; - for (int i=0; i<2; i++) fRec146[i] = 0; - for (int i=0; i<2; i++) fRec147[i] = 0; - for (int i=0; i<2; i++) fRec148[i] = 0; - for (int i=0; i<2; i++) fRec149[i] = 0; - for (int i=0; i<2; i++) fRec150[i] = 0; - for (int i=0; i<2; i++) fRec151[i] = 0; - for (int i=0; i<2; i++) fRec152[i] = 0; - for (int i=0; i<2; i++) fRec153[i] = 0; - for (int i=0; i<2; i++) fRec154[i] = 0; - for (int i=0; i<2; i++) fRec155[i] = 0; - for (int i=0; i<2; i++) fRec156[i] = 0; - for (int i=0; i<2; i++) fRec157[i] = 0; - for (int i=0; i<2; i++) fRec158[i] = 0; - for (int i=0; i<2; i++) fRec159[i] = 0; - for (int i=0; i<2; i++) fRec160[i] = 0; - for (int i=0; i<2; i++) fRec161[i] = 0; - for (int i=0; i<2; i++) fRec162[i] = 0; - for (int i=0; i<2; i++) fRec163[i] = 0; - for (int i=0; i<2; i++) fRec164[i] = 0; - for (int i=0; i<2; i++) fRec165[i] = 0; - for (int i=0; i<2; i++) fRec166[i] = 0; - for (int i=0; i<2; i++) fRec167[i] = 0; - for (int i=0; i<2; i++) fRec168[i] = 0; - for (int i=0; i<2; i++) fRec169[i] = 0; - for (int i=0; i<2; i++) fRec170[i] = 0; - for (int i=0; i<2; i++) fRec171[i] = 0; - for (int i=0; i<2; i++) fRec172[i] = 0; - for (int i=0; i<2; i++) fRec173[i] = 0; - for (int i=0; i<2; i++) fRec174[i] = 0; - for (int i=0; i<2; i++) fRec175[i] = 0; - for (int i=0; i<2; i++) fRec176[i] = 0; - for (int i=0; i<2; i++) fRec177[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("0x00"); - ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fslider3, "0+1", ""); - ui_interface->declare(&fslider3, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider3, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "0+2", ""); - ui_interface->declare(&fslider2, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider2, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider1, "0+3", ""); - ui_interface->declare(&fslider1, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider0, "0+4", ""); - ui_interface->declare(&fslider0, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox1); - ui_interface->closeBox(); - ui_interface->declare(&fslider7, "1+1", ""); - ui_interface->declare(&fslider7, "osc", "/gain_1 -20 20"); - ui_interface->declare(&fslider7, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 1", &fslider7, 0.0, -3e+01, 2e+01, 0.1); - ui_interface->declare(&fslider6, "1+2", ""); - ui_interface->declare(&fslider6, "osc", "/radius_1 0.5 50"); - ui_interface->declare(&fslider6, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 1", &fslider6, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider5, "1+3", ""); - ui_interface->declare(&fslider5, "osc", "/azimuth_1 0 360"); - ui_interface->declare(&fslider5, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 1", &fslider5, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(&fslider4, "1+4", ""); - ui_interface->declare(&fslider4, "osc", "/elevation_1 -90 90"); - ui_interface->declare(&fslider4, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 1", &fslider4, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "1+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox2); - ui_interface->closeBox(); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Mute Order"); - ui_interface->addCheckButton("0", &fcheckbox4); - ui_interface->addCheckButton("1", &fcheckbox5); - ui_interface->addCheckButton("2", &fcheckbox3); - ui_interface->addCheckButton("3", &fcheckbox6); - ui_interface->addCheckButton("4", &fcheckbox0); - ui_interface->addCheckButton("5", &fcheckbox7); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openVerticalBox("Outputs"); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("1-25"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph0, "osc", "/output1"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e4152b0", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "osc", "/output2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e41a390", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "osc", "/output3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e41f700", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph3, "osc", "/output4"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e424e70", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph4, "osc", "/output5"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e42a480", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph5, "osc", "/output6"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e42f510", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph6, "osc", "/output7"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e434dc0", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "osc", "/output8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e43a200", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph8, "osc", "/output9"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e43f670", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph9, "osc", "/output10"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e444b40", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph10, "osc", "/output11"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e44a360", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph11, "osc", "/output12"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e44fc00", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph12, "osc", "/output13"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e455510", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph13, "osc", "/output14"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e45ae70", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph14, "osc", "/output15"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e460270", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph15, "osc", "/output16"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e4656c0", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph16, "osc", "/output17"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e46aba0", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph17, "osc", "/output18"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e4700e0", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph18, "osc", "/output19"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e475e00", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph19, "osc", "/output20"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e47b6c0", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph20, "osc", "/output21"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e480fb0", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph21, "osc", "/output22"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e1511a0", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph22, "osc", "/output23"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e1568d0", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph23, "osc", "/output24"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e15c0a0", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "osc", "/output25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e1618f0", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("26-50"); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph25, "osc", "/output26"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e2d6f80", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph26, "osc", "/output27"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e2f6eb0", &fbargraph26, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph27, "osc", "/output28"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e2fbf50", &fbargraph27, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph28, "osc", "/output29"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e505580", &fbargraph28, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph29, "osc", "/output30"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e50a9b0", &fbargraph29, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph30, "osc", "/output31"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e510870", &fbargraph30, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph31, "osc", "/output32"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e516370", &fbargraph31, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph32, "osc", "/output33"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e51bea0", &fbargraph32, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph33, "osc", "/output34"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e521a30", &fbargraph33, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph34, "osc", "/output35"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e527620", &fbargraph34, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph35, "osc", "/output36"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e52d270", &fbargraph35, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph36, "osc", "/output37"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e532ef0", &fbargraph36, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph37, "osc", "/output38"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e538bd0", &fbargraph37, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph38, "osc", "/output39"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e53e090", &fbargraph38, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph39, "osc", "/output40"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e5435b0", &fbargraph39, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph40, "osc", "/output41"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e548b30", &fbargraph40, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph41, "osc", "/output42"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e54e110", &fbargraph41, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph42, "osc", "/output43"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e5535b0", &fbargraph42, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph43, "osc", "/output44"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e558e50", &fbargraph43, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph44, "osc", "/output45"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e55e540", &fbargraph44, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph45, "osc", "/output46"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e563d00", &fbargraph45, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph46, "osc", "/output47"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e5694d0", &fbargraph46, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph47, "osc", "/output48"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e56ed10", &fbargraph47, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph48, "osc", "/output49"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e574620", &fbargraph48, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph49, "osc", "/output50"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9b6e579f40", &fbargraph49, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (1.125 * (1 - double(fcheckbox0))); - double fSlow1 = double(fslider0); - double fSlow2 = sin(fSlow1); - double fSlow3 = cos(fSlow1); - double fSlow4 = double(fslider1); - double fSlow5 = (fSlow3 * cos(fSlow4)); - double fSlow6 = (6.123233995736766e-17 * fSlow5); - double fSlow7 = (fSlow2 + fSlow6); - double fSlow8 = faustpower<2>(fSlow7); - double fSlow9 = ((fSlow8 * ((35 * fSlow8) + -30)) + 3); - double fSlow10 = double(fentry0); - double fSlow11 = (fConst2 / fSlow10); - double fSlow12 = faustpower<2>(fSlow11); - double fSlow13 = (1.0 / (((9.1401308902779 * fSlow12) + (fConst3 / fSlow10)) + 1)); - double fSlow14 = double(fslider2); - double fSlow15 = (fConst2 / fSlow14); - double fSlow16 = faustpower<2>(fSlow15); - double fSlow17 = (((fConst3 / fSlow14) + (9.1401308902779 * fSlow16)) + 1); - double fSlow18 = (1.0 / (((fConst4 / fSlow10) + (11.4878004768713 * fSlow12)) + 1)); - double fSlow19 = double(fcheckbox1); - double fSlow20 = (fSlow19 * fSlow10); - double fSlow21 = (((11.4878004768713 * fSlow16) + (fConst4 / fSlow14)) + 1); - double fSlow22 = ((fSlow20 * fSlow21) / fSlow14); - double fSlow23 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider3)))); - double fSlow24 = (45.9512019074852 * fSlow12); - double fSlow25 = (fSlow24 + (fConst5 / fSlow10)); - double fSlow26 = (1.0 / fSlow21); - double fSlow27 = (45.9512019074852 * fSlow16); - double fSlow28 = (fSlow27 + (fConst5 / fSlow14)); - double fSlow29 = (36.5605235611116 * fSlow12); - double fSlow30 = (fSlow29 + (fConst6 / fSlow10)); - double fSlow31 = (1.0 / fSlow17); - double fSlow32 = (36.5605235611116 * fSlow16); - double fSlow33 = ((fConst6 / fSlow14) + fSlow32); - double fSlow34 = ((1 - fSlow19) * fSlow10); - double fSlow35 = double(fslider4); - double fSlow36 = sin(fSlow35); - double fSlow37 = cos(fSlow35); - double fSlow38 = double(fslider5); - double fSlow39 = (fSlow37 * cos(fSlow38)); - double fSlow40 = (6.123233995736766e-17 * fSlow39); - double fSlow41 = (fSlow36 + fSlow40); - double fSlow42 = faustpower<2>(fSlow41); - double fSlow43 = ((fSlow42 * ((35 * fSlow42) + -30)) + 3); - double fSlow44 = double(fslider6); - double fSlow45 = (fConst2 / fSlow44); - double fSlow46 = faustpower<2>(fSlow45); - double fSlow47 = (((fConst3 / fSlow44) + (9.1401308902779 * fSlow46)) + 1); - double fSlow48 = double(fcheckbox2); - double fSlow49 = (fSlow10 * fSlow48); - double fSlow50 = (((11.4878004768713 * fSlow46) + (fConst4 / fSlow44)) + 1); - double fSlow51 = ((fSlow49 * fSlow50) / fSlow44); - double fSlow52 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider7)))); - double fSlow53 = (1.0 / fSlow50); - double fSlow54 = (45.9512019074852 * fSlow46); - double fSlow55 = ((fConst5 / fSlow44) + fSlow54); - double fSlow56 = (1.0 / fSlow47); - double fSlow57 = (36.5605235611116 * fSlow46); - double fSlow58 = ((fConst6 / fSlow44) + fSlow57); - double fSlow59 = (fSlow10 * (1 - fSlow48)); - double fSlow60 = (2.5 * (1 - double(fcheckbox3))); - double fSlow61 = ((3 * fSlow42) + -1); - double fSlow62 = (1.0 / (((fConst7 / fSlow10) + (3 * fSlow12)) + 1)); - double fSlow63 = (12 * fSlow12); - double fSlow64 = (fSlow63 + (fConst8 / fSlow10)); - double fSlow65 = (((fConst7 / fSlow44) + (3 * fSlow46)) + 1); - double fSlow66 = ((fSlow49 * fSlow65) / fSlow44); - double fSlow67 = (1.0 / fSlow65); - double fSlow68 = (12 * fSlow46); - double fSlow69 = ((fConst8 / fSlow44) + fSlow68); - double fSlow70 = ((3 * fSlow8) + -1); - double fSlow71 = (((fConst7 / fSlow14) + (3 * fSlow16)) + 1); - double fSlow72 = ((fSlow20 * fSlow71) / fSlow14); - double fSlow73 = (1.0 / fSlow71); - double fSlow74 = (12 * fSlow16); - double fSlow75 = ((fConst8 / fSlow14) + fSlow74); - double fSlow76 = (fSlow10 * (1 - double(fcheckbox4))); - double fSlow77 = (1 - (fSlow19 * (1 - (1.0 / fSlow14)))); - double fSlow78 = (1 - (fSlow48 * (1 - (1.0 / fSlow44)))); - double fSlow79 = (3 * (1 - double(fcheckbox5))); - double fSlow80 = (fSlow15 + 1); - double fSlow81 = (fConst9 / (fSlow14 * fSlow80)); - double fSlow82 = (1.0 / (fSlow11 + 1)); - double fSlow83 = ((fSlow20 * fSlow80) / fSlow14); - double fSlow84 = (fConst9 / fSlow10); - double fSlow85 = (1 - double(fcheckbox6)); - double fSlow86 = (3.5 * (fSlow85 * ((5 * fSlow8) + -3))); - double fSlow87 = ((fConst11 / fSlow14) + 1); - double fSlow88 = (fConst10 / (fSlow14 * fSlow87)); - double fSlow89 = (1.0 / ((fConst11 / fSlow10) + 1)); - double fSlow90 = (1.0 / (((fConst12 / fSlow10) + (6.45943269348338 * fSlow12)) + 1)); - double fSlow91 = (((fConst12 / fSlow14) + (6.45943269348338 * fSlow16)) + 1); - double fSlow92 = ((fSlow20 * fSlow91) / fSlow14); - double fSlow93 = (25.83773077393352 * fSlow12); - double fSlow94 = (fSlow93 + (fConst13 / fSlow10)); - double fSlow95 = (1.0 / fSlow91); - double fSlow96 = (25.83773077393352 * fSlow16); - double fSlow97 = ((fConst13 / fSlow14) + fSlow96); - double fSlow98 = (fConst10 / fSlow10); - double fSlow99 = (1 - double(fcheckbox7)); - double fSlow100 = (1.375 * (fSlow99 * ((fSlow8 * ((63 * fSlow8) + -70)) + 15))); - double fSlow101 = ((fConst15 / fSlow14) + 1); - double fSlow102 = (fConst14 / (fSlow14 * fSlow101)); - double fSlow103 = (1.0 / ((fConst15 / fSlow10) + 1)); - double fSlow104 = (1.0 / (((14.2724805132801 * fSlow12) + (fConst16 / fSlow10)) + 1)); - double fSlow105 = (((fConst16 / fSlow14) + (14.2724805132801 * fSlow16)) + 1); - double fSlow106 = (1.0 / (((fConst17 / fSlow10) + (18.1563153134523 * fSlow12)) + 1)); - double fSlow107 = (((fConst17 / fSlow14) + (18.1563153134523 * fSlow16)) + 1); - double fSlow108 = ((fSlow20 * fSlow107) / fSlow14); - double fSlow109 = (72.6252612538092 * fSlow12); - double fSlow110 = (fSlow109 + (fConst18 / fSlow10)); - double fSlow111 = (1.0 / fSlow107); - double fSlow112 = (72.6252612538092 * fSlow16); - double fSlow113 = (fSlow112 + (fConst18 / fSlow14)); - double fSlow114 = (57.0899220531204 * fSlow12); - double fSlow115 = (fSlow114 + (fConst19 / fSlow10)); - double fSlow116 = (1.0 / fSlow105); - double fSlow117 = (57.0899220531204 * fSlow16); - double fSlow118 = ((fConst19 / fSlow14) + fSlow117); - double fSlow119 = (fConst14 / fSlow10); - double fSlow120 = (fSlow45 + 1); - double fSlow121 = (fConst9 / (fSlow44 * fSlow120)); - double fSlow122 = ((fSlow49 * fSlow120) / fSlow44); - double fSlow123 = (3.5 * (fSlow85 * ((5 * fSlow42) + -3))); - double fSlow124 = ((fConst11 / fSlow44) + 1); - double fSlow125 = (fConst10 / (fSlow44 * fSlow124)); - double fSlow126 = (((fConst12 / fSlow44) + (6.45943269348338 * fSlow46)) + 1); - double fSlow127 = ((fSlow49 * fSlow126) / fSlow44); - double fSlow128 = (1.0 / fSlow126); - double fSlow129 = (25.83773077393352 * fSlow46); - double fSlow130 = ((fConst13 / fSlow44) + fSlow129); - double fSlow131 = (1.375 * (fSlow99 * ((fSlow42 * ((63 * fSlow42) + -70)) + 15))); - double fSlow132 = ((fConst15 / fSlow44) + 1); - double fSlow133 = (fConst14 / (fSlow44 * fSlow132)); - double fSlow134 = (((fConst16 / fSlow44) + (14.2724805132801 * fSlow46)) + 1); - double fSlow135 = (((fConst17 / fSlow44) + (18.1563153134523 * fSlow46)) + 1); - double fSlow136 = ((fSlow49 * fSlow135) / fSlow44); - double fSlow137 = (1.0 / fSlow135); - double fSlow138 = (72.6252612538092 * fSlow46); - double fSlow139 = ((fConst18 / fSlow44) + fSlow138); - double fSlow140 = (1.0 / fSlow134); - double fSlow141 = (57.0899220531204 * fSlow46); - double fSlow142 = ((fConst19 / fSlow44) + fSlow141); - double fSlow143 = (3.5 * fSlow85); - double fSlow144 = faustpower<3>(fSlow5); - double fSlow145 = ((5 * fSlow144) - (3 * fSlow5)); - double fSlow146 = faustpower<3>(fSlow39); - double fSlow147 = ((5 * fSlow146) - (3 * fSlow39)); - double fSlow148 = (1.375 * fSlow99); - double fSlow149 = faustpower<2>(fSlow5); - double fSlow150 = ((15 * fSlow5) + (fSlow144 * ((63 * fSlow149) + -70))); - double fSlow151 = faustpower<2>(fSlow39); - double fSlow152 = ((15 * fSlow39) + (fSlow146 * ((63 * fSlow151) + -70))); - double fSlow153 = ((3 * fSlow149) + -1); - double fSlow154 = ((3 * fSlow151) + -1); - double fSlow155 = ((fSlow149 * ((35 * fSlow149) + -30)) + 3); - double fSlow156 = ((fSlow151 * ((35 * fSlow151) + -30)) + 3); - double fSlow157 = (fSlow37 * cos((fSlow38 + -1.5707963267948966))); - double fSlow158 = faustpower<2>(fSlow157); - double fSlow159 = ((fSlow158 * ((35 * fSlow158) + -30)) + 3); - double fSlow160 = (fSlow3 * cos((fSlow4 + -1.5707963267948966))); - double fSlow161 = faustpower<2>(fSlow160); - double fSlow162 = ((fSlow161 * ((35 * fSlow161) + -30)) + 3); - double fSlow163 = faustpower<3>(fSlow160); - double fSlow164 = ((15 * fSlow160) + (fSlow163 * ((63 * fSlow161) + -70))); - double fSlow165 = faustpower<3>(fSlow157); - double fSlow166 = ((15 * fSlow157) + (fSlow165 * ((63 * fSlow158) + -70))); - double fSlow167 = ((5 * fSlow165) - (3 * fSlow157)); - double fSlow168 = ((5 * fSlow163) - (3 * fSlow160)); - double fSlow169 = ((3 * fSlow158) + -1); - double fSlow170 = ((3 * fSlow161) + -1); - double fSlow171 = (fSlow3 * cos((fSlow4 + -3.141592653589793))); - double fSlow172 = faustpower<2>(fSlow171); - double fSlow173 = ((3 * fSlow172) + -1); - double fSlow174 = (fSlow37 * cos((fSlow38 + -3.141592653589793))); - double fSlow175 = faustpower<2>(fSlow174); - double fSlow176 = ((3 * fSlow175) + -1); - double fSlow177 = faustpower<3>(fSlow174); - double fSlow178 = ((5 * fSlow177) - (3 * fSlow174)); - double fSlow179 = faustpower<3>(fSlow171); - double fSlow180 = ((5 * fSlow179) - (3 * fSlow171)); - double fSlow181 = ((15 * fSlow171) + (fSlow179 * ((63 * fSlow172) + -70))); - double fSlow182 = ((15 * fSlow174) + (fSlow177 * ((63 * fSlow175) + -70))); - double fSlow183 = ((fSlow175 * ((35 * fSlow175) + -30)) + 3); - double fSlow184 = ((fSlow172 * ((35 * fSlow172) + -30)) + 3); - double fSlow185 = (fSlow3 * cos((fSlow4 + -4.71238898038469))); - double fSlow186 = faustpower<2>(fSlow185); - double fSlow187 = ((3 * fSlow186) + -1); - double fSlow188 = (fSlow37 * cos((fSlow38 + -4.71238898038469))); - double fSlow189 = faustpower<2>(fSlow188); - double fSlow190 = ((3 * fSlow189) + -1); - double fSlow191 = faustpower<3>(fSlow188); - double fSlow192 = ((5 * fSlow191) - (3 * fSlow188)); - double fSlow193 = faustpower<3>(fSlow185); - double fSlow194 = ((5 * fSlow193) - (3 * fSlow185)); - double fSlow195 = ((15 * fSlow185) + (fSlow193 * ((63 * fSlow186) + -70))); - double fSlow196 = ((15 * fSlow188) + (fSlow191 * ((63 * fSlow189) + -70))); - double fSlow197 = ((fSlow189 * ((35 * fSlow189) + -30)) + 3); - double fSlow198 = ((fSlow186 * ((35 * fSlow186) + -30)) + 3); - double fSlow199 = (fSlow6 - fSlow2); - double fSlow200 = faustpower<2>(fSlow199); - double fSlow201 = ((fSlow200 * ((35 * fSlow200) + -30)) + 3); - double fSlow202 = (fSlow40 - fSlow36); - double fSlow203 = faustpower<2>(fSlow202); - double fSlow204 = ((fSlow203 * ((35 * fSlow203) + -30)) + 3); - double fSlow205 = (1.375 * (fSlow99 * ((fSlow203 * ((63 * fSlow203) + -70)) + 15))); - double fSlow206 = (3.5 * (fSlow85 * ((5 * fSlow203) + -3))); - double fSlow207 = (3.5 * (fSlow85 * ((5 * fSlow200) + -3))); - double fSlow208 = (1.375 * (fSlow99 * ((fSlow200 * ((63 * fSlow200) + -70)) + 15))); - double fSlow209 = ((3 * fSlow203) + -1); - double fSlow210 = ((3 * fSlow200) + -1); - double fSlow211 = (0.7071067811865476 * fSlow39); - double fSlow212 = (0.7071067811865475 * fSlow36); - double fSlow213 = (fSlow211 + fSlow212); - double fSlow214 = faustpower<2>(fSlow213); - double fSlow215 = (3.5 * (fSlow85 * ((5 * fSlow214) + -3))); - double fSlow216 = (1.375 * (fSlow99 * ((fSlow214 * ((63 * fSlow214) + -70)) + 15))); - double fSlow217 = (0.7071067811865476 * fSlow5); - double fSlow218 = (0.7071067811865475 * fSlow2); - double fSlow219 = (fSlow217 + fSlow218); - double fSlow220 = faustpower<2>(fSlow219); - double fSlow221 = (3.5 * (fSlow85 * ((5 * fSlow220) + -3))); - double fSlow222 = (1.375 * (fSlow99 * ((fSlow220 * ((63 * fSlow220) + -70)) + 15))); - double fSlow223 = ((3 * fSlow220) + -1); - double fSlow224 = ((3 * fSlow214) + -1); - double fSlow225 = ((fSlow214 * ((35 * fSlow214) + -30)) + 3); - double fSlow226 = ((fSlow220 * ((35 * fSlow220) + -30)) + 3); - double fSlow227 = (0.7071067811865476 * fSlow160); - double fSlow228 = (fSlow218 + fSlow227); - double fSlow229 = faustpower<2>(fSlow228); - double fSlow230 = ((fSlow229 * ((35 * fSlow229) + -30)) + 3); - double fSlow231 = (0.7071067811865476 * fSlow157); - double fSlow232 = (fSlow212 + fSlow231); - double fSlow233 = faustpower<2>(fSlow232); - double fSlow234 = ((fSlow233 * ((35 * fSlow233) + -30)) + 3); - double fSlow235 = ((3 * fSlow229) + -1); - double fSlow236 = ((3 * fSlow233) + -1); - double fSlow237 = (1.375 * (fSlow99 * ((fSlow233 * ((63 * fSlow233) + -70)) + 15))); - double fSlow238 = (3.5 * (fSlow85 * ((5 * fSlow233) + -3))); - double fSlow239 = (3.5 * (fSlow85 * ((5 * fSlow229) + -3))); - double fSlow240 = (1.375 * (fSlow99 * ((fSlow229 * ((63 * fSlow229) + -70)) + 15))); - double fSlow241 = (0.7071067811865476 * fSlow171); - double fSlow242 = (fSlow218 + fSlow241); - double fSlow243 = faustpower<2>(fSlow242); - double fSlow244 = ((fSlow243 * ((35 * fSlow243) + -30)) + 3); - double fSlow245 = (0.7071067811865476 * fSlow174); - double fSlow246 = (fSlow212 + fSlow245); - double fSlow247 = faustpower<2>(fSlow246); - double fSlow248 = ((fSlow247 * ((35 * fSlow247) + -30)) + 3); - double fSlow249 = ((3 * fSlow243) + -1); - double fSlow250 = ((3 * fSlow247) + -1); - double fSlow251 = (1.375 * (fSlow99 * ((fSlow247 * ((63 * fSlow247) + -70)) + 15))); - double fSlow252 = (3.5 * (fSlow85 * ((5 * fSlow247) + -3))); - double fSlow253 = (3.5 * (fSlow85 * ((5 * fSlow243) + -3))); - double fSlow254 = (1.375 * (fSlow99 * ((fSlow243 * ((63 * fSlow243) + -70)) + 15))); - double fSlow255 = (0.7071067811865476 * fSlow185); - double fSlow256 = (fSlow218 + fSlow255); - double fSlow257 = faustpower<2>(fSlow256); - double fSlow258 = ((fSlow257 * ((35 * fSlow257) + -30)) + 3); - double fSlow259 = (0.7071067811865476 * fSlow188); - double fSlow260 = (fSlow212 + fSlow259); - double fSlow261 = faustpower<2>(fSlow260); - double fSlow262 = ((fSlow261 * ((35 * fSlow261) + -30)) + 3); - double fSlow263 = ((3 * fSlow257) + -1); - double fSlow264 = ((3 * fSlow261) + -1); - double fSlow265 = (1.375 * (fSlow99 * ((fSlow261 * ((63 * fSlow261) + -70)) + 15))); - double fSlow266 = (3.5 * (fSlow85 * ((5 * fSlow261) + -3))); - double fSlow267 = (3.5 * (fSlow85 * ((5 * fSlow257) + -3))); - double fSlow268 = (1.375 * (fSlow99 * ((fSlow257 * ((63 * fSlow257) + -70)) + 15))); - double fSlow269 = (fSlow3 * cos((fSlow4 + -0.7853981633974483))); - double fSlow270 = faustpower<2>(fSlow269); - double fSlow271 = ((3 * fSlow270) + -1); - double fSlow272 = (fSlow37 * cos((fSlow38 + -0.7853981633974483))); - double fSlow273 = faustpower<2>(fSlow272); - double fSlow274 = ((3 * fSlow273) + -1); - double fSlow275 = faustpower<3>(fSlow272); - double fSlow276 = ((5 * fSlow275) - (3 * fSlow272)); - double fSlow277 = faustpower<3>(fSlow269); - double fSlow278 = ((5 * fSlow277) - (3 * fSlow269)); - double fSlow279 = ((15 * fSlow269) + (fSlow277 * ((63 * fSlow270) + -70))); - double fSlow280 = ((15 * fSlow272) + (fSlow275 * ((63 * fSlow273) + -70))); - double fSlow281 = ((fSlow273 * ((35 * fSlow273) + -30)) + 3); - double fSlow282 = ((fSlow270 * ((35 * fSlow270) + -30)) + 3); - double fSlow283 = (fSlow3 * cos((fSlow4 + -2.356194490192345))); - double fSlow284 = faustpower<2>(fSlow283); - double fSlow285 = ((3 * fSlow284) + -1); - double fSlow286 = (fSlow37 * cos((fSlow38 + -2.356194490192345))); - double fSlow287 = faustpower<2>(fSlow286); - double fSlow288 = ((3 * fSlow287) + -1); - double fSlow289 = faustpower<3>(fSlow286); - double fSlow290 = ((5 * fSlow289) - (3 * fSlow286)); - double fSlow291 = faustpower<3>(fSlow283); - double fSlow292 = ((5 * fSlow291) - (3 * fSlow283)); - double fSlow293 = ((15 * fSlow283) + (fSlow291 * ((63 * fSlow284) + -70))); - double fSlow294 = ((15 * fSlow286) + (fSlow289 * ((63 * fSlow287) + -70))); - double fSlow295 = ((fSlow287 * ((35 * fSlow287) + -30)) + 3); - double fSlow296 = ((fSlow284 * ((35 * fSlow284) + -30)) + 3); - double fSlow297 = (fSlow3 * cos((fSlow4 + -3.9269908169872414))); - double fSlow298 = faustpower<2>(fSlow297); - double fSlow299 = ((3 * fSlow298) + -1); - double fSlow300 = (fSlow37 * cos((fSlow38 + -3.9269908169872414))); - double fSlow301 = faustpower<2>(fSlow300); - double fSlow302 = ((3 * fSlow301) + -1); - double fSlow303 = faustpower<3>(fSlow300); - double fSlow304 = ((5 * fSlow303) - (3 * fSlow300)); - double fSlow305 = faustpower<3>(fSlow297); - double fSlow306 = ((5 * fSlow305) - (3 * fSlow297)); - double fSlow307 = ((15 * fSlow297) + (fSlow305 * ((63 * fSlow298) + -70))); - double fSlow308 = ((15 * fSlow300) + (fSlow303 * ((63 * fSlow301) + -70))); - double fSlow309 = ((fSlow301 * ((35 * fSlow301) + -30)) + 3); - double fSlow310 = ((fSlow298 * ((35 * fSlow298) + -30)) + 3); - double fSlow311 = (fSlow3 * cos((fSlow4 + -5.497787143782138))); - double fSlow312 = faustpower<2>(fSlow311); - double fSlow313 = ((3 * fSlow312) + -1); - double fSlow314 = (fSlow37 * cos((fSlow38 + -5.497787143782138))); - double fSlow315 = faustpower<2>(fSlow314); - double fSlow316 = ((3 * fSlow315) + -1); - double fSlow317 = faustpower<3>(fSlow314); - double fSlow318 = ((5 * fSlow317) - (3 * fSlow314)); - double fSlow319 = faustpower<3>(fSlow311); - double fSlow320 = ((5 * fSlow319) - (3 * fSlow311)); - double fSlow321 = ((15 * fSlow311) + (fSlow319 * ((63 * fSlow312) + -70))); - double fSlow322 = ((15 * fSlow314) + (fSlow317 * ((63 * fSlow315) + -70))); - double fSlow323 = ((fSlow315 * ((35 * fSlow315) + -30)) + 3); - double fSlow324 = ((fSlow312 * ((35 * fSlow312) + -30)) + 3); - double fSlow325 = (fSlow211 - fSlow212); - double fSlow326 = faustpower<2>(fSlow325); - double fSlow327 = (3.5 * (fSlow85 * ((5 * fSlow326) + -3))); - double fSlow328 = (1.375 * (fSlow99 * ((fSlow326 * ((63 * fSlow326) + -70)) + 15))); - double fSlow329 = (fSlow217 - fSlow218); - double fSlow330 = faustpower<2>(fSlow329); - double fSlow331 = (1.375 * (fSlow99 * ((fSlow330 * ((63 * fSlow330) + -70)) + 15))); - double fSlow332 = (3.5 * (fSlow85 * ((5 * fSlow330) + -3))); - double fSlow333 = ((3 * fSlow330) + -1); - double fSlow334 = ((3 * fSlow326) + -1); - double fSlow335 = ((fSlow326 * ((35 * fSlow326) + -30)) + 3); - double fSlow336 = ((fSlow330 * ((35 * fSlow330) + -30)) + 3); - double fSlow337 = (fSlow227 - fSlow218); - double fSlow338 = faustpower<2>(fSlow337); - double fSlow339 = ((fSlow338 * ((35 * fSlow338) + -30)) + 3); - double fSlow340 = (fSlow231 - fSlow212); - double fSlow341 = faustpower<2>(fSlow340); - double fSlow342 = ((fSlow341 * ((35 * fSlow341) + -30)) + 3); - double fSlow343 = (1.375 * (fSlow99 * ((fSlow341 * ((63 * fSlow341) + -70)) + 15))); - double fSlow344 = (3.5 * (fSlow85 * ((5 * fSlow341) + -3))); - double fSlow345 = (3.5 * (fSlow85 * ((5 * fSlow338) + -3))); - double fSlow346 = (1.375 * (fSlow99 * ((fSlow338 * ((63 * fSlow338) + -70)) + 15))); - double fSlow347 = ((3 * fSlow341) + -1); - double fSlow348 = ((3 * fSlow338) + -1); - double fSlow349 = (fSlow241 - fSlow218); - double fSlow350 = faustpower<2>(fSlow349); - double fSlow351 = ((fSlow350 * ((35 * fSlow350) + -30)) + 3); - double fSlow352 = (fSlow245 - fSlow212); - double fSlow353 = faustpower<2>(fSlow352); - double fSlow354 = ((fSlow353 * ((35 * fSlow353) + -30)) + 3); - double fSlow355 = (1.375 * (fSlow99 * ((fSlow353 * ((63 * fSlow353) + -70)) + 15))); - double fSlow356 = (3.5 * (fSlow85 * ((5 * fSlow353) + -3))); - double fSlow357 = (3.5 * (fSlow85 * ((5 * fSlow350) + -3))); - double fSlow358 = (1.375 * (fSlow99 * ((fSlow350 * ((63 * fSlow350) + -70)) + 15))); - double fSlow359 = ((3 * fSlow353) + -1); - double fSlow360 = ((3 * fSlow350) + -1); - double fSlow361 = (fSlow255 - fSlow218); - double fSlow362 = faustpower<2>(fSlow361); - double fSlow363 = ((fSlow362 * ((35 * fSlow362) + -30)) + 3); - double fSlow364 = (fSlow259 - fSlow212); - double fSlow365 = faustpower<2>(fSlow364); - double fSlow366 = ((fSlow365 * ((35 * fSlow365) + -30)) + 3); - double fSlow367 = (1.375 * (fSlow99 * ((fSlow365 * ((63 * fSlow365) + -70)) + 15))); - double fSlow368 = (3.5 * (fSlow85 * ((5 * fSlow365) + -3))); - double fSlow369 = (3.5 * (fSlow85 * ((5 * fSlow362) + -3))); - double fSlow370 = (1.375 * (fSlow99 * ((fSlow362 * ((63 * fSlow362) + -70)) + 15))); - double fSlow371 = ((3 * fSlow365) + -1); - double fSlow372 = ((3 * fSlow362) + -1); - double fSlow373 = (0.8164965809277259 * fSlow272); - double fSlow374 = (0.5773502691896258 * fSlow36); - double fSlow375 = (fSlow373 + fSlow374); - double fSlow376 = faustpower<2>(fSlow375); - double fSlow377 = (3.5 * (fSlow85 * ((5 * fSlow376) + -3))); - double fSlow378 = (1.375 * (fSlow99 * ((fSlow376 * ((63 * fSlow376) + -70)) + 15))); - double fSlow379 = (0.8164965809277259 * fSlow269); - double fSlow380 = (0.5773502691896258 * fSlow2); - double fSlow381 = (fSlow379 + fSlow380); - double fSlow382 = faustpower<2>(fSlow381); - double fSlow383 = (3.5 * (fSlow85 * ((5 * fSlow382) + -3))); - double fSlow384 = (1.375 * (fSlow99 * ((fSlow382 * ((63 * fSlow382) + -70)) + 15))); - double fSlow385 = ((3 * fSlow382) + -1); - double fSlow386 = ((3 * fSlow376) + -1); - double fSlow387 = ((fSlow376 * ((35 * fSlow376) + -30)) + 3); - double fSlow388 = ((fSlow382 * ((35 * fSlow382) + -30)) + 3); - double fSlow389 = (0.8164965809277259 * fSlow283); - double fSlow390 = (fSlow380 + fSlow389); - double fSlow391 = faustpower<2>(fSlow390); - double fSlow392 = ((fSlow391 * ((35 * fSlow391) + -30)) + 3); - double fSlow393 = (0.8164965809277259 * fSlow286); - double fSlow394 = (fSlow374 + fSlow393); - double fSlow395 = faustpower<2>(fSlow394); - double fSlow396 = ((fSlow395 * ((35 * fSlow395) + -30)) + 3); - double fSlow397 = ((3 * fSlow391) + -1); - double fSlow398 = ((3 * fSlow395) + -1); - double fSlow399 = (1.375 * (fSlow99 * ((fSlow395 * ((63 * fSlow395) + -70)) + 15))); - double fSlow400 = (3.5 * (fSlow85 * ((5 * fSlow395) + -3))); - double fSlow401 = (3.5 * (fSlow85 * ((5 * fSlow391) + -3))); - double fSlow402 = (1.375 * (fSlow99 * ((fSlow391 * ((63 * fSlow391) + -70)) + 15))); - double fSlow403 = (0.8164965809277259 * fSlow297); - double fSlow404 = (fSlow380 + fSlow403); - double fSlow405 = faustpower<2>(fSlow404); - double fSlow406 = ((fSlow405 * ((35 * fSlow405) + -30)) + 3); - double fSlow407 = (0.8164965809277259 * fSlow300); - double fSlow408 = (fSlow374 + fSlow407); - double fSlow409 = faustpower<2>(fSlow408); - double fSlow410 = ((fSlow409 * ((35 * fSlow409) + -30)) + 3); - double fSlow411 = ((3 * fSlow405) + -1); - double fSlow412 = ((3 * fSlow409) + -1); - double fSlow413 = (1.375 * (fSlow99 * ((fSlow409 * ((63 * fSlow409) + -70)) + 15))); - double fSlow414 = (3.5 * (fSlow85 * ((5 * fSlow409) + -3))); - double fSlow415 = (3.5 * (fSlow85 * ((5 * fSlow405) + -3))); - double fSlow416 = (1.375 * (fSlow99 * ((fSlow405 * ((63 * fSlow405) + -70)) + 15))); - double fSlow417 = (0.8164965809277259 * fSlow314); - double fSlow418 = (fSlow417 + fSlow374); - double fSlow419 = faustpower<2>(fSlow418); - double fSlow420 = ((fSlow419 * ((35 * fSlow419) + -30)) + 3); - double fSlow421 = (0.8164965809277259 * fSlow311); - double fSlow422 = (fSlow380 + fSlow421); - double fSlow423 = faustpower<2>(fSlow422); - double fSlow424 = ((((35 * fSlow423) + -30) * fSlow423) + 3); - double fSlow425 = (3.5 * (fSlow85 * ((5 * fSlow419) + -3))); - double fSlow426 = (1.375 * (fSlow99 * ((fSlow419 * ((63 * fSlow419) + -70)) + 15))); - double fSlow427 = (3.5 * (fSlow85 * ((5 * fSlow423) + -3))); - double fSlow428 = (1.375 * (fSlow99 * ((fSlow423 * ((63 * fSlow423) + -70)) + 15))); - double fSlow429 = ((3 * fSlow419) + -1); - double fSlow430 = ((3 * fSlow423) + -1); - double fSlow431 = (fSlow373 - fSlow374); - double fSlow432 = faustpower<2>(fSlow431); - double fSlow433 = ((3 * fSlow432) + -1); - double fSlow434 = (fSlow379 - fSlow380); - double fSlow435 = faustpower<2>(fSlow434); - double fSlow436 = ((3 * fSlow435) + -1); - double fSlow437 = ((fSlow435 * ((35 * fSlow435) + -30)) + 3); - double fSlow438 = ((fSlow432 * ((35 * fSlow432) + -30)) + 3); - double fSlow439 = (3.5 * (fSlow85 * ((5 * fSlow435) + -3))); - double fSlow440 = (1.375 * (fSlow99 * ((fSlow435 * ((63 * fSlow435) + -70)) + 15))); - double fSlow441 = (3.5 * (fSlow85 * ((5 * fSlow432) + -3))); - double fSlow442 = (1.375 * (fSlow99 * ((fSlow432 * ((63 * fSlow432) + -70)) + 15))); - double fSlow443 = (fSlow389 - fSlow380); - double fSlow444 = faustpower<2>(fSlow443); - double fSlow445 = ((3 * fSlow444) + -1); - double fSlow446 = (fSlow393 - fSlow374); - double fSlow447 = faustpower<2>(fSlow446); - double fSlow448 = ((3 * fSlow447) + -1); - double fSlow449 = ((fSlow444 * ((35 * fSlow444) + -30)) + 3); - double fSlow450 = ((fSlow447 * ((35 * fSlow447) + -30)) + 3); - double fSlow451 = (3.5 * (fSlow85 * ((5 * fSlow444) + -3))); - double fSlow452 = (1.375 * (fSlow99 * ((fSlow444 * ((63 * fSlow444) + -70)) + 15))); - double fSlow453 = (3.5 * (fSlow85 * ((5 * fSlow447) + -3))); - double fSlow454 = (1.375 * (fSlow99 * ((fSlow447 * ((63 * fSlow447) + -70)) + 15))); - double fSlow455 = (fSlow403 - fSlow380); - double fSlow456 = faustpower<2>(fSlow455); - double fSlow457 = ((3 * fSlow456) + -1); - double fSlow458 = (fSlow407 - fSlow374); - double fSlow459 = faustpower<2>(fSlow458); - double fSlow460 = ((3 * fSlow459) + -1); - double fSlow461 = ((fSlow456 * ((35 * fSlow456) + -30)) + 3); - double fSlow462 = ((fSlow459 * ((35 * fSlow459) + -30)) + 3); - double fSlow463 = (1.375 * (fSlow99 * ((fSlow456 * ((63 * fSlow456) + -70)) + 15))); - double fSlow464 = (3.5 * (fSlow85 * ((5 * fSlow456) + -3))); - double fSlow465 = (3.5 * (fSlow85 * ((5 * fSlow459) + -3))); - double fSlow466 = (1.375 * (fSlow99 * ((fSlow459 * ((63 * fSlow459) + -70)) + 15))); - double fSlow467 = (fSlow421 - fSlow380); - double fSlow468 = faustpower<2>(fSlow467); - double fSlow469 = ((3 * fSlow468) + -1); - double fSlow470 = (fSlow417 - fSlow374); - double fSlow471 = faustpower<2>(fSlow470); - double fSlow472 = ((3 * fSlow471) + -1); - double fSlow473 = ((fSlow468 * ((35 * fSlow468) + -30)) + 3); - double fSlow474 = ((fSlow471 * ((35 * fSlow471) + -30)) + 3); - double fSlow475 = (1.375 * (fSlow99 * ((fSlow468 * ((63 * fSlow468) + -70)) + 15))); - double fSlow476 = (3.5 * (fSlow85 * ((5 * fSlow468) + -3))); - double fSlow477 = (3.5 * (fSlow85 * ((5 * fSlow471) + -3))); - double fSlow478 = (1.375 * (fSlow99 * ((fSlow471 * ((63 * fSlow471) + -70)) + 15))); - double fSlow479 = (0.4264014327112203 * (fSlow3 * cos((fSlow4 + -0.7853981633974484)))); - double fSlow480 = (0.9045340337332911 * fSlow2); - double fSlow481 = (fSlow479 + fSlow480); - double fSlow482 = faustpower<2>(fSlow481); - double fSlow483 = ((fSlow482 * ((35 * fSlow482) + -30)) + 3); - double fSlow484 = (0.4264014327112203 * (fSlow37 * cos((fSlow38 + -0.7853981633974484)))); - double fSlow485 = (0.9045340337332911 * fSlow36); - double fSlow486 = (fSlow484 + fSlow485); - double fSlow487 = faustpower<2>(fSlow486); - double fSlow488 = ((fSlow487 * ((35 * fSlow487) + -30)) + 3); - double fSlow489 = (3.5 * (fSlow85 * ((5 * fSlow482) + -3))); - double fSlow490 = (1.375 * (fSlow99 * ((fSlow482 * ((63 * fSlow482) + -70)) + 15))); - double fSlow491 = (3.5 * (fSlow85 * ((5 * fSlow487) + -3))); - double fSlow492 = (1.375 * (fSlow99 * ((fSlow487 * ((63 * fSlow487) + -70)) + 15))); - double fSlow493 = ((3 * fSlow482) + -1); - double fSlow494 = ((3 * fSlow487) + -1); - double fSlow495 = (0.4264014327112203 * fSlow283); - double fSlow496 = (fSlow480 + fSlow495); - double fSlow497 = faustpower<2>(fSlow496); - double fSlow498 = (3.5 * (fSlow85 * ((5 * fSlow497) + -3))); - double fSlow499 = (1.375 * (fSlow99 * ((fSlow497 * ((63 * fSlow497) + -70)) + 15))); - double fSlow500 = (0.4264014327112203 * fSlow286); - double fSlow501 = (fSlow485 + fSlow500); - double fSlow502 = faustpower<2>(fSlow501); - double fSlow503 = (1.375 * (fSlow99 * ((fSlow502 * ((63 * fSlow502) + -70)) + 15))); - double fSlow504 = (3.5 * (fSlow85 * ((5 * fSlow502) + -3))); - double fSlow505 = ((fSlow497 * ((35 * fSlow497) + -30)) + 3); - double fSlow506 = ((((35 * fSlow502) + -30) * fSlow502) + 3); - double fSlow507 = ((3 * fSlow497) + -1); - double fSlow508 = ((3 * fSlow502) + -1); - double fSlow509 = (0.4264014327112203 * fSlow300); - double fSlow510 = (fSlow485 + fSlow509); - double fSlow511 = faustpower<2>(fSlow510); - double fSlow512 = ((3 * fSlow511) + -1); - double fSlow513 = (0.4264014327112203 * fSlow297); - double fSlow514 = (fSlow480 + fSlow513); - double fSlow515 = faustpower<2>(fSlow514); - double fSlow516 = ((3 * fSlow515) + -1); - double fSlow517 = (3.5 * (fSlow85 * ((5 * fSlow515) + -3))); - double fSlow518 = (1.375 * (fSlow99 * ((((63 * fSlow515) + -70) * fSlow515) + 15))); - double fSlow519 = (3.5 * (fSlow85 * ((5 * fSlow511) + -3))); - double fSlow520 = (1.375 * (fSlow99 * ((((63 * fSlow511) + -70) * fSlow511) + 15))); - double fSlow521 = ((fSlow511 * ((35 * fSlow511) + -30)) + 3); - double fSlow522 = ((fSlow515 * ((35 * fSlow515) + -30)) + 3); - double fSlow523 = (0.4264014327112203 * fSlow311); - double fSlow524 = (fSlow480 + fSlow523); - double fSlow525 = faustpower<2>(fSlow524); - double fSlow526 = ((3 * fSlow525) + -1); - double fSlow527 = (0.4264014327112203 * fSlow314); - double fSlow528 = (fSlow485 + fSlow527); - double fSlow529 = faustpower<2>(fSlow528); - double fSlow530 = ((3 * fSlow529) + -1); - double fSlow531 = ((fSlow525 * ((35 * fSlow525) + -30)) + 3); - double fSlow532 = ((fSlow529 * ((35 * fSlow529) + -30)) + 3); - double fSlow533 = (3.5 * (fSlow85 * ((5 * fSlow525) + -3))); - double fSlow534 = (1.375 * (fSlow99 * ((((63 * fSlow525) + -70) * fSlow525) + 15))); - double fSlow535 = (3.5 * (fSlow85 * ((5 * fSlow529) + -3))); - double fSlow536 = (1.375 * (fSlow99 * ((((63 * fSlow529) + -70) * fSlow529) + 15))); - double fSlow537 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -0.32175055439664263)))); - double fSlow538 = (0.3015113445777635 * fSlow2); - double fSlow539 = (fSlow537 + fSlow538); - double fSlow540 = faustpower<2>(fSlow539); - double fSlow541 = ((fSlow540 * ((35 * fSlow540) + -30)) + 3); - double fSlow542 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -0.32175055439664263)))); - double fSlow543 = (0.3015113445777635 * fSlow36); - double fSlow544 = (fSlow542 + fSlow543); - double fSlow545 = faustpower<2>(fSlow544); - double fSlow546 = ((fSlow545 * ((35 * fSlow545) + -30)) + 3); - double fSlow547 = (3.5 * (fSlow85 * ((5 * fSlow540) + -3))); - double fSlow548 = (1.375 * (fSlow99 * ((((63 * fSlow540) + -70) * fSlow540) + 15))); - double fSlow549 = (3.5 * (fSlow85 * ((5 * fSlow545) + -3))); - double fSlow550 = (1.375 * (fSlow99 * ((((63 * fSlow545) + -70) * fSlow545) + 15))); - double fSlow551 = ((3 * fSlow540) + -1); - double fSlow552 = ((3 * fSlow545) + -1); - double fSlow553 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.2490457723982544)))); - double fSlow554 = (fSlow538 + fSlow553); - double fSlow555 = faustpower<2>(fSlow554); - double fSlow556 = ((3 * fSlow555) + -1); - double fSlow557 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -1.2490457723982544)))); - double fSlow558 = (fSlow543 + fSlow557); - double fSlow559 = faustpower<2>(fSlow558); - double fSlow560 = ((3 * fSlow559) + -1); - double fSlow561 = ((fSlow555 * ((35 * fSlow555) + -30)) + 3); - double fSlow562 = ((fSlow559 * ((35 * fSlow559) + -30)) + 3); - double fSlow563 = (3.5 * (fSlow85 * ((5 * fSlow555) + -3))); - double fSlow564 = (1.375 * (fSlow99 * ((((63 * fSlow555) + -70) * fSlow555) + 15))); - double fSlow565 = (3.5 * (fSlow85 * ((5 * fSlow559) + -3))); - double fSlow566 = (1.375 * (fSlow99 * ((((63 * fSlow559) + -70) * fSlow559) + 15))); - double fSlow567 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -1.8925468811915387)))); - double fSlow568 = (fSlow538 + fSlow567); - double fSlow569 = faustpower<2>(fSlow568); - double fSlow570 = ((3 * fSlow569) + -1); - double fSlow571 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -1.8925468811915387)))); - double fSlow572 = (fSlow543 + fSlow571); - double fSlow573 = faustpower<2>(fSlow572); - double fSlow574 = ((3 * fSlow573) + -1); - double fSlow575 = ((fSlow569 * ((35 * fSlow569) + -30)) + 3); - double fSlow576 = ((fSlow573 * ((35 * fSlow573) + -30)) + 3); - double fSlow577 = (3.5 * (fSlow85 * ((5 * fSlow569) + -3))); - double fSlow578 = (1.375 * (fSlow99 * ((((63 * fSlow569) + -70) * fSlow569) + 15))); - double fSlow579 = (3.5 * (fSlow85 * ((5 * fSlow573) + -3))); - double fSlow580 = (1.375 * (fSlow99 * ((((63 * fSlow573) + -70) * fSlow573) + 15))); - double fSlow581 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -2.8198420991931505)))); - double fSlow582 = (fSlow538 + fSlow581); - double fSlow583 = faustpower<2>(fSlow582); - double fSlow584 = ((3 * fSlow583) + -1); - double fSlow585 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -2.8198420991931505)))); - double fSlow586 = (fSlow543 + fSlow585); - double fSlow587 = faustpower<2>(fSlow586); - double fSlow588 = ((3 * fSlow587) + -1); - double fSlow589 = ((fSlow583 * ((35 * fSlow583) + -30)) + 3); - double fSlow590 = ((fSlow587 * ((35 * fSlow587) + -30)) + 3); - double fSlow591 = (3.5 * (fSlow85 * ((5 * fSlow583) + -3))); - double fSlow592 = (1.375 * (fSlow99 * ((((63 * fSlow583) + -70) * fSlow583) + 15))); - double fSlow593 = (3.5 * (fSlow85 * ((5 * fSlow587) + -3))); - double fSlow594 = (1.375 * (fSlow99 * ((((63 * fSlow587) + -70) * fSlow587) + 15))); - double fSlow595 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -3.4633432079864357)))); - double fSlow596 = (fSlow538 + fSlow595); - double fSlow597 = faustpower<2>(fSlow596); - double fSlow598 = ((3 * fSlow597) + -1); - double fSlow599 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -3.4633432079864357)))); - double fSlow600 = (fSlow543 + fSlow599); - double fSlow601 = faustpower<2>(fSlow600); - double fSlow602 = ((3 * fSlow601) + -1); - double fSlow603 = ((fSlow597 * ((35 * fSlow597) + -30)) + 3); - double fSlow604 = ((fSlow601 * ((35 * fSlow601) + -30)) + 3); - double fSlow605 = (3.5 * (fSlow85 * ((5 * fSlow597) + -3))); - double fSlow606 = (1.375 * (fSlow99 * ((((63 * fSlow597) + -70) * fSlow597) + 15))); - double fSlow607 = (3.5 * (fSlow85 * ((5 * fSlow601) + -3))); - double fSlow608 = (1.375 * (fSlow99 * ((((63 * fSlow601) + -70) * fSlow601) + 15))); - double fSlow609 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -4.3906384259880475)))); - double fSlow610 = (fSlow538 + fSlow609); - double fSlow611 = faustpower<2>(fSlow610); - double fSlow612 = ((3 * fSlow611) + -1); - double fSlow613 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -4.3906384259880475)))); - double fSlow614 = (fSlow543 + fSlow613); - double fSlow615 = faustpower<2>(fSlow614); - double fSlow616 = ((3 * fSlow615) + -1); - double fSlow617 = ((fSlow611 * ((35 * fSlow611) + -30)) + 3); - double fSlow618 = ((fSlow615 * ((35 * fSlow615) + -30)) + 3); - double fSlow619 = (3.5 * (fSlow85 * ((5 * fSlow611) + -3))); - double fSlow620 = (1.375 * (fSlow99 * ((((63 * fSlow611) + -70) * fSlow611) + 15))); - double fSlow621 = (3.5 * (fSlow85 * ((5 * fSlow615) + -3))); - double fSlow622 = (1.375 * (fSlow99 * ((((63 * fSlow615) + -70) * fSlow615) + 15))); - double fSlow623 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.034139534781332)))); - double fSlow624 = (fSlow538 + fSlow623); - double fSlow625 = faustpower<2>(fSlow624); - double fSlow626 = ((3 * fSlow625) + -1); - double fSlow627 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -5.034139534781332)))); - double fSlow628 = (fSlow543 + fSlow627); - double fSlow629 = faustpower<2>(fSlow628); - double fSlow630 = ((3 * fSlow629) + -1); - double fSlow631 = ((fSlow625 * ((35 * fSlow625) + -30)) + 3); - double fSlow632 = ((fSlow629 * ((35 * fSlow629) + -30)) + 3); - double fSlow633 = (3.5 * (fSlow85 * ((5 * fSlow625) + -3))); - double fSlow634 = (1.375 * (fSlow99 * ((((63 * fSlow625) + -70) * fSlow625) + 15))); - double fSlow635 = (3.5 * (fSlow85 * ((5 * fSlow629) + -3))); - double fSlow636 = (1.375 * (fSlow99 * ((((63 * fSlow629) + -70) * fSlow629) + 15))); - double fSlow637 = (0.9534625892455924 * (fSlow3 * cos((fSlow4 + -5.961434752782943)))); - double fSlow638 = (fSlow538 + fSlow637); - double fSlow639 = faustpower<2>(fSlow638); - double fSlow640 = ((3 * fSlow639) + -1); - double fSlow641 = (0.9534625892455924 * (fSlow37 * cos((fSlow38 + -5.961434752782943)))); - double fSlow642 = (fSlow543 + fSlow641); - double fSlow643 = faustpower<2>(fSlow642); - double fSlow644 = ((3 * fSlow643) + -1); - double fSlow645 = ((fSlow639 * ((35 * fSlow639) + -30)) + 3); - double fSlow646 = ((fSlow643 * ((35 * fSlow643) + -30)) + 3); - double fSlow647 = (3.5 * (fSlow85 * ((5 * fSlow639) + -3))); - double fSlow648 = (1.375 * (fSlow99 * ((((63 * fSlow639) + -70) * fSlow639) + 15))); - double fSlow649 = (3.5 * (fSlow85 * ((5 * fSlow643) + -3))); - double fSlow650 = (1.375 * (fSlow99 * ((((63 * fSlow643) + -70) * fSlow643) + 15))); - double fSlow651 = (fSlow537 - fSlow538); - double fSlow652 = faustpower<2>(fSlow651); - double fSlow653 = ((3 * fSlow652) + -1); - double fSlow654 = (fSlow542 - fSlow543); - double fSlow655 = faustpower<2>(fSlow654); - double fSlow656 = ((3 * fSlow655) + -1); - double fSlow657 = ((fSlow652 * ((35 * fSlow652) + -30)) + 3); - double fSlow658 = ((fSlow655 * ((35 * fSlow655) + -30)) + 3); - double fSlow659 = (1.375 * (fSlow99 * ((((63 * fSlow652) + -70) * fSlow652) + 15))); - double fSlow660 = (3.5 * (fSlow85 * ((5 * fSlow652) + -3))); - double fSlow661 = (3.5 * (fSlow85 * ((5 * fSlow655) + -3))); - double fSlow662 = (1.375 * (fSlow99 * ((((63 * fSlow655) + -70) * fSlow655) + 15))); - double fSlow663 = (fSlow553 - fSlow538); - double fSlow664 = faustpower<2>(fSlow663); - double fSlow665 = ((3 * fSlow664) + -1); - double fSlow666 = (fSlow557 - fSlow543); - double fSlow667 = faustpower<2>(fSlow666); - double fSlow668 = ((3 * fSlow667) + -1); - double fSlow669 = ((fSlow664 * ((35 * fSlow664) + -30)) + 3); - double fSlow670 = ((fSlow667 * ((35 * fSlow667) + -30)) + 3); - double fSlow671 = (1.375 * (fSlow99 * ((((63 * fSlow664) + -70) * fSlow664) + 15))); - double fSlow672 = (3.5 * (fSlow85 * ((5 * fSlow664) + -3))); - double fSlow673 = (3.5 * (fSlow85 * ((5 * fSlow667) + -3))); - double fSlow674 = (1.375 * (fSlow99 * ((((63 * fSlow667) + -70) * fSlow667) + 15))); - double fSlow675 = (fSlow567 - fSlow538); - double fSlow676 = faustpower<2>(fSlow675); - double fSlow677 = ((3 * fSlow676) + -1); - double fSlow678 = (fSlow571 - fSlow543); - double fSlow679 = faustpower<2>(fSlow678); - double fSlow680 = ((3 * fSlow679) + -1); - double fSlow681 = ((fSlow676 * ((35 * fSlow676) + -30)) + 3); - double fSlow682 = ((fSlow679 * ((35 * fSlow679) + -30)) + 3); - double fSlow683 = (1.375 * (fSlow99 * ((((63 * fSlow676) + -70) * fSlow676) + 15))); - double fSlow684 = (3.5 * (fSlow85 * ((5 * fSlow676) + -3))); - double fSlow685 = (3.5 * (fSlow85 * ((5 * fSlow679) + -3))); - double fSlow686 = (1.375 * (fSlow99 * ((((63 * fSlow679) + -70) * fSlow679) + 15))); - double fSlow687 = (fSlow581 - fSlow538); - double fSlow688 = faustpower<2>(fSlow687); - double fSlow689 = ((3 * fSlow688) + -1); - double fSlow690 = (fSlow585 - fSlow543); - double fSlow691 = faustpower<2>(fSlow690); - double fSlow692 = ((3 * fSlow691) + -1); - double fSlow693 = ((fSlow688 * ((35 * fSlow688) + -30)) + 3); - double fSlow694 = ((fSlow691 * ((35 * fSlow691) + -30)) + 3); - double fSlow695 = (1.375 * (fSlow99 * ((((63 * fSlow688) + -70) * fSlow688) + 15))); - double fSlow696 = (3.5 * (fSlow85 * ((5 * fSlow688) + -3))); - double fSlow697 = (3.5 * (fSlow85 * ((5 * fSlow691) + -3))); - double fSlow698 = (1.375 * (fSlow99 * ((((63 * fSlow691) + -70) * fSlow691) + 15))); - double fSlow699 = (fSlow595 - fSlow538); - double fSlow700 = faustpower<2>(fSlow699); - double fSlow701 = ((3 * fSlow700) + -1); - double fSlow702 = (fSlow599 - fSlow543); - double fSlow703 = faustpower<2>(fSlow702); - double fSlow704 = ((3 * fSlow703) + -1); - double fSlow705 = ((fSlow700 * ((35 * fSlow700) + -30)) + 3); - double fSlow706 = ((fSlow703 * ((35 * fSlow703) + -30)) + 3); - double fSlow707 = (1.375 * (fSlow99 * ((((63 * fSlow700) + -70) * fSlow700) + 15))); - double fSlow708 = (3.5 * (fSlow85 * ((5 * fSlow700) + -3))); - double fSlow709 = (3.5 * (fSlow85 * ((5 * fSlow703) + -3))); - double fSlow710 = (1.375 * (fSlow99 * ((((63 * fSlow703) + -70) * fSlow703) + 15))); - double fSlow711 = (fSlow613 - fSlow543); - double fSlow712 = faustpower<2>(fSlow711); - double fSlow713 = (3.5 * (fSlow85 * ((5 * fSlow712) + -3))); - double fSlow714 = (1.375 * (fSlow99 * ((fSlow712 * ((63 * fSlow712) + -70)) + 15))); - double fSlow715 = (fSlow609 - fSlow538); - double fSlow716 = faustpower<2>(fSlow715); - double fSlow717 = (3.5 * (fSlow85 * ((5 * fSlow716) + -3))); - double fSlow718 = (1.375 * (fSlow99 * ((fSlow716 * ((63 * fSlow716) + -70)) + 15))); - double fSlow719 = ((3 * fSlow712) + -1); - double fSlow720 = ((3 * fSlow716) + -1); - double fSlow721 = ((fSlow716 * ((35 * fSlow716) + -30)) + 3); - double fSlow722 = ((fSlow712 * ((35 * fSlow712) + -30)) + 3); - double fSlow723 = (fSlow627 - fSlow543); - double fSlow724 = faustpower<2>(fSlow723); - double fSlow725 = (3.5 * (fSlow85 * ((5 * fSlow724) + -3))); - double fSlow726 = (1.375 * (fSlow99 * ((fSlow724 * ((63 * fSlow724) + -70)) + 15))); - double fSlow727 = (fSlow623 - fSlow538); - double fSlow728 = faustpower<2>(fSlow727); - double fSlow729 = (1.375 * (fSlow99 * ((fSlow728 * ((63 * fSlow728) + -70)) + 15))); - double fSlow730 = (3.5 * (fSlow85 * ((5 * fSlow728) + -3))); - double fSlow731 = ((3 * fSlow724) + -1); - double fSlow732 = ((3 * fSlow728) + -1); - double fSlow733 = ((fSlow724 * ((35 * fSlow724) + -30)) + 3); - double fSlow734 = ((fSlow728 * ((35 * fSlow728) + -30)) + 3); - double fSlow735 = (fSlow641 - fSlow543); - double fSlow736 = faustpower<2>(fSlow735); - double fSlow737 = ((3 * fSlow736) + -1); - double fSlow738 = (fSlow637 - fSlow538); - double fSlow739 = faustpower<2>(fSlow738); - double fSlow740 = ((3 * fSlow739) + -1); - double fSlow741 = (3.5 * (fSlow85 * ((5 * fSlow736) + -3))); - double fSlow742 = (1.375 * (fSlow99 * ((fSlow736 * ((63 * fSlow736) + -70)) + 15))); - double fSlow743 = (3.5 * (fSlow85 * ((5 * fSlow739) + -3))); - double fSlow744 = (1.375 * (fSlow99 * ((fSlow739 * ((63 * fSlow739) + -70)) + 15))); - double fSlow745 = ((fSlow739 * ((35 * fSlow739) + -30)) + 3); - double fSlow746 = ((fSlow736 * ((35 * fSlow736) + -30)) + 3); - double fSlow747 = (fSlow484 - fSlow485); - double fSlow748 = faustpower<2>(fSlow747); - double fSlow749 = ((3 * fSlow748) + -1); - double fSlow750 = (fSlow479 - fSlow480); - double fSlow751 = faustpower<2>(fSlow750); - double fSlow752 = ((3 * fSlow751) + -1); - double fSlow753 = (3.5 * (fSlow85 * ((5 * fSlow748) + -3))); - double fSlow754 = (1.375 * (fSlow99 * ((fSlow748 * ((63 * fSlow748) + -70)) + 15))); - double fSlow755 = (3.5 * (fSlow85 * ((5 * fSlow751) + -3))); - double fSlow756 = (1.375 * (fSlow99 * ((fSlow751 * ((63 * fSlow751) + -70)) + 15))); - double fSlow757 = ((fSlow748 * ((35 * fSlow748) + -30)) + 3); - double fSlow758 = ((fSlow751 * ((35 * fSlow751) + -30)) + 3); - double fSlow759 = (fSlow500 - fSlow485); - double fSlow760 = faustpower<2>(fSlow759); - double fSlow761 = (3.5 * (fSlow85 * ((5 * fSlow760) + -3))); - double fSlow762 = (1.375 * (fSlow99 * ((fSlow760 * ((63 * fSlow760) + -70)) + 15))); - double fSlow763 = (fSlow495 - fSlow480); - double fSlow764 = faustpower<2>(fSlow763); - double fSlow765 = (1.375 * (fSlow99 * ((fSlow764 * ((63 * fSlow764) + -70)) + 15))); - double fSlow766 = (3.5 * (fSlow85 * ((5 * fSlow764) + -3))); - double fSlow767 = ((3 * fSlow760) + -1); - double fSlow768 = ((3 * fSlow764) + -1); - double fSlow769 = ((fSlow760 * ((35 * fSlow760) + -30)) + 3); - double fSlow770 = ((fSlow764 * ((35 * fSlow764) + -30)) + 3); - double fSlow771 = (fSlow509 - fSlow485); - double fSlow772 = faustpower<2>(fSlow771); - double fSlow773 = ((3 * fSlow772) + -1); - double fSlow774 = (fSlow513 - fSlow480); - double fSlow775 = faustpower<2>(fSlow774); - double fSlow776 = ((3 * fSlow775) + -1); - double fSlow777 = (3.5 * (fSlow85 * ((5 * fSlow772) + -3))); - double fSlow778 = (1.375 * (fSlow99 * ((fSlow772 * ((63 * fSlow772) + -70)) + 15))); - double fSlow779 = (3.5 * (fSlow85 * ((5 * fSlow775) + -3))); - double fSlow780 = (1.375 * (fSlow99 * ((fSlow775 * ((63 * fSlow775) + -70)) + 15))); - double fSlow781 = ((fSlow775 * ((35 * fSlow775) + -30)) + 3); - double fSlow782 = ((fSlow772 * ((35 * fSlow772) + -30)) + 3); - double fSlow783 = (fSlow527 - fSlow485); - double fSlow784 = faustpower<2>(fSlow783); - double fSlow785 = ((3 * fSlow784) + -1); - double fSlow786 = (fSlow523 - fSlow480); - double fSlow787 = faustpower<2>(fSlow786); - double fSlow788 = ((3 * fSlow787) + -1); - double fSlow789 = (3.5 * (fSlow85 * ((5 * fSlow784) + -3))); - double fSlow790 = (1.375 * (fSlow99 * ((fSlow784 * ((63 * fSlow784) + -70)) + 15))); - double fSlow791 = (3.5 * (fSlow85 * ((5 * fSlow787) + -3))); - double fSlow792 = (1.375 * (fSlow99 * ((fSlow787 * ((63 * fSlow787) + -70)) + 15))); - double fSlow793 = ((fSlow784 * ((35 * fSlow784) + -30)) + 3); - double fSlow794 = ((fSlow787 * ((35 * fSlow787) + -30)) + 3); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = strdup(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable *ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - int api_version(void); -#endif - void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - int numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i=0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i=0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp tmp_dsp; - tmp_dsp.metadata(&meta); - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n",sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(),SC_FAUST_PREFIX,strlen(SC_FAUST_PREFIX))!=0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -// EOF diff --git a/source/HOAUGens/HOARotator1.cpp b/source/HOAUGens/HOARotator1.cpp new file mode 100644 index 0000000000..5c05df9a8b --- /dev/null +++ b/source/HOAUGens/HOARotator1.cpp @@ -0,0 +1,1008 @@ +//---------------------------------------------------------- +// name: "HOARotator1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.9.100 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +# define SC_FAUST_PREFIX "Faust" +#endif + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the UI* parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the UI* user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods: + * - static class 'classInit': static table initialisation + * - 'instanceInit': constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("name", "HOARotator1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 4; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOARotator1"); + ui_interface->declare(&fslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = double(fslider2); + double fSlow5 = sin(fSlow4); + double fSlow6 = sin(fSlow0); + double fSlow7 = (fSlow5 * fSlow6); + double fSlow8 = sin(fSlow2); + double fSlow9 = ((fSlow1 * fSlow3) - (fSlow7 * fSlow8)); + double fSlow10 = cos(fSlow4); + double fSlow11 = (0 - fSlow10); + double fSlow12 = (fSlow11 * fSlow8); + double fSlow13 = (fSlow1 * fSlow5); + double fSlow14 = ((fSlow13 * fSlow8) + (fSlow6 * fSlow3)); + double fSlow15 = ((fSlow1 * fSlow8) + (fSlow7 * fSlow3)); + double fSlow16 = (fSlow10 * fSlow3); + double fSlow17 = ((fSlow13 * (0 - fSlow3)) + (fSlow6 * fSlow8)); + double fSlow18 = (fSlow6 * fSlow11); + double fSlow19 = (fSlow10 * fSlow1); + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz1.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator1.sc similarity index 88% rename from source/HOAUGens/sc/Classes/HOARotatorAz1.sc rename to source/HOAUGens/sc/Classes/HOAAzimuthRotator1.sc index adf6bfe6f9..ece3b715da 100644 --- a/source/HOAUGens/sc/Classes/HOARotatorAz1.sc +++ b/source/HOAUGens/sc/Classes/HOAAzimuthRotator1.sc @@ -1,4 +1,4 @@ -HOARotatorAz1 : MultiOutUGen +FaustHOAAzimuthRotator1 : MultiOutUGen { *ar { | in1, in2, in3, in4, azimuth(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, azimuth) @@ -25,6 +25,6 @@ HOARotatorAz1 : MultiOutUGen ^this.initOutputs(4, rate) } - name { ^"HOARotatorAz1" } + name { ^"FaustHOAAzimuthRotator1" } } diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz2.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc similarity index 89% rename from source/HOAUGens/sc/Classes/HOARotatorAz2.sc rename to source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc index 9eeada5618..e0824c38da 100644 --- a/source/HOAUGens/sc/Classes/HOARotatorAz2.sc +++ b/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc @@ -1,4 +1,4 @@ -HOARotatorAz2 : MultiOutUGen +FaustHOAAzimuthRotator2 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth) @@ -25,6 +25,6 @@ HOARotatorAz2 : MultiOutUGen ^this.initOutputs(9, rate) } - name { ^"HOARotatorAz2" } + name { ^"FaustHOAAzimuthRotator2" } } diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz3.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.sc similarity index 91% rename from source/HOAUGens/sc/Classes/HOARotatorAz3.sc rename to source/HOAUGens/sc/Classes/HOAAzimuthRotator3.sc index da8e8c641e..1015f1727b 100644 --- a/source/HOAUGens/sc/Classes/HOARotatorAz3.sc +++ b/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.sc @@ -1,4 +1,4 @@ -HOARotatorAz3 : MultiOutUGen +FaustHOAAzimuthRotator3 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth) @@ -25,6 +25,6 @@ HOARotatorAz3 : MultiOutUGen ^this.initOutputs(16, rate) } - name { ^"HOARotatorAz3" } + name { ^"FaustHOAAzimuthRotator3" } } diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz4.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator4.sc similarity index 93% rename from source/HOAUGens/sc/Classes/HOARotatorAz4.sc rename to source/HOAUGens/sc/Classes/HOAAzimuthRotator4.sc index f9e72fe53a..16b9b5d39d 100644 --- a/source/HOAUGens/sc/Classes/HOARotatorAz4.sc +++ b/source/HOAUGens/sc/Classes/HOAAzimuthRotator4.sc @@ -1,4 +1,4 @@ -HOARotatorAz4 : MultiOutUGen +FaustHOAAzimuthRotator4 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth) @@ -25,6 +25,6 @@ HOARotatorAz4 : MultiOutUGen ^this.initOutputs(25, rate) } - name { ^"HOARotatorAz4" } + name { ^"FaustHOAAzimuthRotator4" } } diff --git a/source/HOAUGens/sc/Classes/HOARotatorAz5.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator5.sc similarity index 94% rename from source/HOAUGens/sc/Classes/HOARotatorAz5.sc rename to source/HOAUGens/sc/Classes/HOAAzimuthRotator5.sc index 87a4c48928..20258847f5 100644 --- a/source/HOAUGens/sc/Classes/HOARotatorAz5.sc +++ b/source/HOAUGens/sc/Classes/HOAAzimuthRotator5.sc @@ -1,4 +1,4 @@ -HOARotatorAz5 : MultiOutUGen +FaustHOAAzimuthRotator5 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth) @@ -25,6 +25,6 @@ HOARotatorAz5 : MultiOutUGen ^this.initOutputs(36, rate) } - name { ^"HOARotatorAz5" } + name { ^"FaustHOAAzimuthRotator5" } } diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc index 069addb07e..791edb4203 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc @@ -1,4 +1,4 @@ -HOABeamDirac2Hoa1 : MultiOutUGen +FaustHOABeamDirac2HOA1 : MultiOutUGen { *ar { | in1, in2, in3, in4, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, on, crossfade, gain, azimuth, elevation) @@ -25,6 +25,6 @@ HOABeamDirac2Hoa1 : MultiOutUGen ^this.initOutputs(4, rate) } - name { ^"HOABeamDirac2Hoa1" } + name { ^"FaustHOABeamDirac2HOA1" } } diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc index e03b62e2aa..aacbfc6ca6 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc @@ -1,4 +1,4 @@ -HOABeamDirac2Hoa2 : MultiOutUGen +FaustHOABeamDirac2HOA2 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, on, crossfade, gain, azimuth, elevation) @@ -25,6 +25,6 @@ HOABeamDirac2Hoa2 : MultiOutUGen ^this.initOutputs(9, rate) } - name { ^"HOABeamDirac2Hoa2" } + name { ^"FaustHOABeamDirac2HOA2" } } diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc index e34e960187..592b72b79a 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc @@ -1,4 +1,4 @@ -HOABeamDirac2Hoa3 : MultiOutUGen +FaustHOABeamDirac2HOA3 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on, crossfade, gain, azimuth, elevation) @@ -25,6 +25,6 @@ HOABeamDirac2Hoa3 : MultiOutUGen ^this.initOutputs(16, rate) } - name { ^"HOABeamDirac2Hoa3" } + name { ^"FaustHOABeamDirac2HOA3" } } diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc index 3770964aa9..bde47a581a 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc @@ -1,4 +1,4 @@ -HOABeamDirac2Hoa4 : MultiOutUGen +FaustHOABeamDirac2HOA4 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on, crossfade, gain, azimuth, elevation) @@ -25,6 +25,6 @@ HOABeamDirac2Hoa4 : MultiOutUGen ^this.initOutputs(25, rate) } - name { ^"HOABeamDirac2Hoa4" } + name { ^"FaustHOABeamDirac2HOA4" } } diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc index e20858ffd6..4a3b6f82fe 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc @@ -1,4 +1,4 @@ -HOABeamDirac2Hoa5 : MultiOutUGen +FaustHOABeamDirac2HOA5 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on, crossfade, gain, azimuth, elevation) @@ -25,6 +25,6 @@ HOABeamDirac2Hoa5 : MultiOutUGen ^this.initOutputs(36, rate) } - name { ^"HOABeamDirac2Hoa5" } + name { ^"FaustHOABeamDirac2HOA5" } } diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa1.sc b/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa1.sc deleted file mode 100644 index 5782417b5d..0000000000 --- a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa1.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOABeamHCardioid2Hoa1 : MultiOutUGen -{ - *ar { | in1, in2, in3, in4, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, azimuth, elevation, order) - } - - *kr { | in1, in2, in3, in4, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, azimuth, elevation, order) - } - - checkInputs { - if (rate == 'audio', { - 4.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(16, rate) - } - - name { ^"HOABeamHCardioid2Hoa1" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAConverter1.sc b/source/HOAUGens/sc/Classes/HOAConverter1.sc index f7f35a1deb..c4163c2b53 100644 --- a/source/HOAUGens/sc/Classes/HOAConverter1.sc +++ b/source/HOAUGens/sc/Classes/HOAConverter1.sc @@ -1,4 +1,4 @@ -HOAConverter1 : MultiOutUGen +FaustHOAConverter1 : MultiOutUGen { *ar { | in1, in2, in3, in4, input(1.0), output(1.0) | ^this.multiNew('audio', in1, in2, in3, in4, input, output) @@ -25,6 +25,6 @@ HOAConverter1 : MultiOutUGen ^this.initOutputs(4, rate) } - name { ^"HOAConverter1" } + name { ^"FaustHOAConverter1" } } diff --git a/source/HOAUGens/sc/Classes/HOAConverter2.sc b/source/HOAUGens/sc/Classes/HOAConverter2.sc index 4195b45a34..5d50d89661 100644 --- a/source/HOAUGens/sc/Classes/HOAConverter2.sc +++ b/source/HOAUGens/sc/Classes/HOAConverter2.sc @@ -1,4 +1,4 @@ -HOAConverter2 : MultiOutUGen +FaustHOAConverter2 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, input(1.0), output(1.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, input, output) @@ -25,6 +25,6 @@ HOAConverter2 : MultiOutUGen ^this.initOutputs(9, rate) } - name { ^"HOAConverter2" } + name { ^"FaustHOAConverter2" } } diff --git a/source/HOAUGens/sc/Classes/HOAConverter3.sc b/source/HOAUGens/sc/Classes/HOAConverter3.sc index 19975540b1..3ed3fb9644 100644 --- a/source/HOAUGens/sc/Classes/HOAConverter3.sc +++ b/source/HOAUGens/sc/Classes/HOAConverter3.sc @@ -1,4 +1,4 @@ -HOAConverter3 : MultiOutUGen +FaustHOAConverter3 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, input(1.0), output(1.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, input, output) @@ -25,6 +25,6 @@ HOAConverter3 : MultiOutUGen ^this.initOutputs(16, rate) } - name { ^"HOAConverter3" } + name { ^"FaustHOAConverter3" } } diff --git a/source/HOAUGens/sc/Classes/HOAConverter4.sc b/source/HOAUGens/sc/Classes/HOAConverter4.sc index 642dd988b2..9f08224158 100644 --- a/source/HOAUGens/sc/Classes/HOAConverter4.sc +++ b/source/HOAUGens/sc/Classes/HOAConverter4.sc @@ -1,4 +1,4 @@ -HOAConverter4 : MultiOutUGen +FaustHOAConverter4 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, input(1.0), output(1.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, input, output) @@ -25,6 +25,6 @@ HOAConverter4 : MultiOutUGen ^this.initOutputs(25, rate) } - name { ^"HOAConverter4" } + name { ^"FaustHOAConverter4" } } diff --git a/source/HOAUGens/sc/Classes/HOAConverter5.sc b/source/HOAUGens/sc/Classes/HOAConverter5.sc index b0fc51586b..5222b780b4 100644 --- a/source/HOAUGens/sc/Classes/HOAConverter5.sc +++ b/source/HOAUGens/sc/Classes/HOAConverter5.sc @@ -1,4 +1,4 @@ -HOAConverter5 : MultiOutUGen +FaustHOAConverter5 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, input(1.0), output(1.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, input, output) @@ -25,6 +25,6 @@ HOAConverter5 : MultiOutUGen ^this.initOutputs(36, rate) } - name { ^"HOAConverter5" } + name { ^"FaustHOAConverter5" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev061.sc b/source/HOAUGens/sc/Classes/HOADecLebedev061.sc index 28216f376c..920092b9f6 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev061.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev061.sc @@ -1,4 +1,4 @@ -HOADecLebedev061 : MultiOutUGen +FaustHOADecLebedev061 : MultiOutUGen { *ar { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev061 : MultiOutUGen ^this.initOutputs(6, rate) } - name { ^"HOADecLebedev061" } + name { ^"FaustHOADecLebedev061" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev261.sc b/source/HOAUGens/sc/Classes/HOADecLebedev261.sc index 5f85e5d270..90481b942d 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev261.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev261.sc @@ -1,4 +1,4 @@ -HOADecLebedev261 : MultiOutUGen +FaustHOADecLebedev261 : MultiOutUGen { *ar { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev261 : MultiOutUGen ^this.initOutputs(26, rate) } - name { ^"HOADecLebedev261" } + name { ^"FaustHOADecLebedev261" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev262.sc b/source/HOAUGens/sc/Classes/HOADecLebedev262.sc index f454267173..731e11f00d 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev262.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev262.sc @@ -1,4 +1,4 @@ -HOADecLebedev262 : MultiOutUGen +FaustHOADecLebedev262 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev262 : MultiOutUGen ^this.initOutputs(26, rate) } - name { ^"HOADecLebedev262" } + name { ^"FaustHOADecLebedev262" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev263.sc b/source/HOAUGens/sc/Classes/HOADecLebedev263.sc index 98a64cd17b..a6cf6c2f98 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev263.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev263.sc @@ -1,4 +1,4 @@ -HOADecLebedev263 : MultiOutUGen +FaustHOADecLebedev263 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev263 : MultiOutUGen ^this.initOutputs(26, rate) } - name { ^"HOADecLebedev263" } + name { ^"FaustHOADecLebedev263" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev501.sc b/source/HOAUGens/sc/Classes/HOADecLebedev501.sc index 1bcaae8021..92388134ea 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev501.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev501.sc @@ -1,4 +1,4 @@ -HOADecLebedev501 : MultiOutUGen +FaustHOADecLebedev501 : MultiOutUGen { *ar { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev501 : MultiOutUGen ^this.initOutputs(50, rate) } - name { ^"HOADecLebedev501" } + name { ^"FaustHOADecLebedev501" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev502.sc b/source/HOAUGens/sc/Classes/HOADecLebedev502.sc index 40886504de..9b3cf6d732 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev502.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev502.sc @@ -1,4 +1,4 @@ -HOADecLebedev502 : MultiOutUGen +FaustHOADecLebedev502 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev502 : MultiOutUGen ^this.initOutputs(50, rate) } - name { ^"HOADecLebedev502" } + name { ^"FaustHOADecLebedev502" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev503.sc b/source/HOAUGens/sc/Classes/HOADecLebedev503.sc index 0d2dd2ea9e..ab482a3ab1 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev503.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev503.sc @@ -1,4 +1,4 @@ -HOADecLebedev503 : MultiOutUGen +FaustHOADecLebedev503 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev503 : MultiOutUGen ^this.initOutputs(50, rate) } - name { ^"HOADecLebedev503" } + name { ^"FaustHOADecLebedev503" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev504.sc b/source/HOAUGens/sc/Classes/HOADecLebedev504.sc index 737b08da7f..b1f2d1fc34 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev504.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev504.sc @@ -1,4 +1,4 @@ -HOADecLebedev504 : MultiOutUGen +FaustHOADecLebedev504 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev504 : MultiOutUGen ^this.initOutputs(50, rate) } - name { ^"HOADecLebedev504" } + name { ^"FaustHOADecLebedev504" } } diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev505.sc b/source/HOAUGens/sc/Classes/HOADecLebedev505.sc index 4d5e2103df..c988bb7c88 100644 --- a/source/HOAUGens/sc/Classes/HOADecLebedev505.sc +++ b/source/HOAUGens/sc/Classes/HOADecLebedev505.sc @@ -1,4 +1,4 @@ -HOADecLebedev505 : MultiOutUGen +FaustHOADecLebedev505 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, inputs_gain(0.0), outputs_gain(0.0), yes(0.0), speakers_radius(1.07) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, inputs_gain, outputs_gain, yes, speakers_radius) @@ -25,6 +25,6 @@ HOADecLebedev505 : MultiOutUGen ^this.initOutputs(50, rate) } - name { ^"HOADecLebedev505" } + name { ^"FaustHOADecLebedev505" } } diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike1.sc b/source/HOAUGens/sc/Classes/HOAEncEigenMike1.sc new file mode 100644 index 0000000000..0b16c67fb9 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncEigenMike1.sc @@ -0,0 +1,30 @@ +FaustHOAEncEigenMike1 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain) + } + + checkInputs { + if (rate == 'audio', { + 32.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"FaustHOAEncEigenMike1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike2.sc b/source/HOAUGens/sc/Classes/HOAEncEigenMike2.sc new file mode 100644 index 0000000000..6c62daab25 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncEigenMike2.sc @@ -0,0 +1,30 @@ +FaustHOAEncEigenMike2 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain) + } + + checkInputs { + if (rate == 'audio', { + 32.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"FaustHOAEncEigenMike2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike3.sc b/source/HOAUGens/sc/Classes/HOAEncEigenMike3.sc new file mode 100644 index 0000000000..6c5b2ad5a0 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncEigenMike3.sc @@ -0,0 +1,30 @@ +FaustHOAEncEigenMike3 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain) + } + + checkInputs { + if (rate == 'audio', { + 32.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(16, rate) + } + + name { ^"FaustHOAEncEigenMike3" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike4.sc b/source/HOAUGens/sc/Classes/HOAEncEigenMike4.sc new file mode 100644 index 0000000000..7e77ad3167 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAEncEigenMike4.sc @@ -0,0 +1,30 @@ +FaustHOAEncEigenMike4 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, gain) + } + + checkInputs { + if (rate == 'audio', { + 32.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"FaustHOAEncEigenMike4" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev061.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev061.sc similarity index 89% rename from source/HOAUGens/sc/Classes/HOAMicLebedev061.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev061.sc index cea25acdae..23e51c561d 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev061.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev061.sc @@ -1,4 +1,4 @@ -HOAMicLebedev061 : MultiOutUGen +FaustHOAEncLebedev061 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, gain) @@ -25,6 +25,6 @@ HOAMicLebedev061 : MultiOutUGen ^this.initOutputs(4, rate) } - name { ^"HOAMicLebedev061" } + name { ^"FaustHOAEncLebedev061" } } diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev261.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev261.sc similarity index 93% rename from source/HOAUGens/sc/Classes/HOAMicLebedev261.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev261.sc index dafafeaba8..aa7eca4cef 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev261.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev261.sc @@ -1,4 +1,4 @@ -HOAMicLebedev261 : MultiOutUGen +FaustHOAEncLebedev261 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) @@ -25,6 +25,6 @@ HOAMicLebedev261 : MultiOutUGen ^this.initOutputs(4, rate) } - name { ^"HOAMicLebedev261" } + name { ^"FaustHOAEncLebedev261" } } diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev262.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev262.sc similarity index 93% rename from source/HOAUGens/sc/Classes/HOAMicLebedev262.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev262.sc index 7be28cd026..cf55d0be9e 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev262.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev262.sc @@ -1,4 +1,4 @@ -HOAMicLebedev262 : MultiOutUGen +FaustHOAEncLebedev262 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) @@ -25,6 +25,6 @@ HOAMicLebedev262 : MultiOutUGen ^this.initOutputs(9, rate) } - name { ^"HOAMicLebedev262" } + name { ^"FaustHOAEncLebedev262" } } diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev263.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev263.sc similarity index 93% rename from source/HOAUGens/sc/Classes/HOAMicLebedev263.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev263.sc index b75665e32d..bdee2e0506 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev263.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev263.sc @@ -1,4 +1,4 @@ -HOAMicLebedev263 : MultiOutUGen +FaustHOAEncLebedev263 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, gain) @@ -25,6 +25,6 @@ HOAMicLebedev263 : MultiOutUGen ^this.initOutputs(16, rate) } - name { ^"HOAMicLebedev263" } + name { ^"FaustHOAEncLebedev263" } } diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev501.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev501.sc similarity index 95% rename from source/HOAUGens/sc/Classes/HOAMicLebedev501.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev501.sc index 3a5c0350a6..acc36bec90 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev501.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev501.sc @@ -1,4 +1,4 @@ -HOAMicLebedev501 : MultiOutUGen +FaustHOAEncLebedev501 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) @@ -25,6 +25,6 @@ HOAMicLebedev501 : MultiOutUGen ^this.initOutputs(4, rate) } - name { ^"HOAMicLebedev501" } + name { ^"FaustHOAEncLebedev501" } } diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev502.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev502.sc similarity index 95% rename from source/HOAUGens/sc/Classes/HOAMicLebedev502.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev502.sc index 4c4e34e424..3c09aef9b0 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev502.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev502.sc @@ -1,4 +1,4 @@ -HOAMicLebedev502 : MultiOutUGen +FaustHOAEncLebedev502 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) @@ -25,6 +25,6 @@ HOAMicLebedev502 : MultiOutUGen ^this.initOutputs(9, rate) } - name { ^"HOAMicLebedev502" } + name { ^"FaustHOAEncLebedev502" } } diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev503.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev503.sc similarity index 95% rename from source/HOAUGens/sc/Classes/HOAMicLebedev503.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev503.sc index f575b85842..1e8f8fe41d 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev503.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev503.sc @@ -1,4 +1,4 @@ -HOAMicLebedev503 : MultiOutUGen +FaustHOAEncLebedev503 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) @@ -25,6 +25,6 @@ HOAMicLebedev503 : MultiOutUGen ^this.initOutputs(16, rate) } - name { ^"HOAMicLebedev503" } + name { ^"FaustHOAEncLebedev503" } } diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev504.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev504.sc similarity index 95% rename from source/HOAUGens/sc/Classes/HOAMicLebedev504.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev504.sc index 4ef8dda4ce..58cd4e3c9a 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev504.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev504.sc @@ -1,4 +1,4 @@ -HOAMicLebedev504 : MultiOutUGen +FaustHOAEncLebedev504 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) @@ -25,6 +25,6 @@ HOAMicLebedev504 : MultiOutUGen ^this.initOutputs(25, rate) } - name { ^"HOAMicLebedev504" } + name { ^"FaustHOAEncLebedev504" } } diff --git a/source/HOAUGens/sc/Classes/HOAMicLebedev505.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev505.sc similarity index 95% rename from source/HOAUGens/sc/Classes/HOAMicLebedev505.sc rename to source/HOAUGens/sc/Classes/HOAEncLebedev505.sc index 789190a8df..d46f583393 100644 --- a/source/HOAUGens/sc/Classes/HOAMicLebedev505.sc +++ b/source/HOAUGens/sc/Classes/HOAEncLebedev505.sc @@ -1,4 +1,4 @@ -HOAMicLebedev505 : MultiOutUGen +FaustHOAEncLebedev505 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, gain) @@ -25,6 +25,6 @@ HOAMicLebedev505 : MultiOutUGen ^this.initOutputs(36, rate) } - name { ^"HOAMicLebedev505" } + name { ^"FaustHOAEncLebedev505" } } diff --git a/source/HOAUGens/sc/Classes/HOAEncoder1.sc b/source/HOAUGens/sc/Classes/HOAEncoder1.sc index 4373d67d9d..7cdd0860bd 100644 --- a/source/HOAUGens/sc/Classes/HOAEncoder1.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder1.sc @@ -1,4 +1,4 @@ -HOAEncoder1 : MultiOutUGen +FaustHOAEncoder1 : MultiOutUGen { *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) @@ -25,6 +25,6 @@ HOAEncoder1 : MultiOutUGen ^this.initOutputs(4, rate) } - name { ^"HOAEncoder1" } + name { ^"FaustHOAEncoder1" } } diff --git a/source/HOAUGens/sc/Classes/HOAEncoder2.sc b/source/HOAUGens/sc/Classes/HOAEncoder2.sc index 4abf2aa850..c9f8d145b7 100644 --- a/source/HOAUGens/sc/Classes/HOAEncoder2.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder2.sc @@ -1,4 +1,4 @@ -HOAEncoder2 : MultiOutUGen +FaustHOAEncoder2 : MultiOutUGen { *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) @@ -25,6 +25,6 @@ HOAEncoder2 : MultiOutUGen ^this.initOutputs(9, rate) } - name { ^"HOAEncoder2" } + name { ^"FaustHOAEncoder2" } } diff --git a/source/HOAUGens/sc/Classes/HOAEncoder3.sc b/source/HOAUGens/sc/Classes/HOAEncoder3.sc index bf8d369f73..ff1164dbd1 100644 --- a/source/HOAUGens/sc/Classes/HOAEncoder3.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder3.sc @@ -1,4 +1,4 @@ -HOAEncoder3 : MultiOutUGen +FaustHOAEncoder3 : MultiOutUGen { *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) @@ -25,6 +25,6 @@ HOAEncoder3 : MultiOutUGen ^this.initOutputs(16, rate) } - name { ^"HOAEncoder3" } + name { ^"FaustHOAEncoder3" } } diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4.sc b/source/HOAUGens/sc/Classes/HOAEncoder4.sc index fcc3c02c49..d1e09d024f 100644 --- a/source/HOAUGens/sc/Classes/HOAEncoder4.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder4.sc @@ -1,4 +1,4 @@ -HOAEncoder4 : MultiOutUGen +FaustHOAEncoder4 : MultiOutUGen { *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) @@ -25,6 +25,6 @@ HOAEncoder4 : MultiOutUGen ^this.initOutputs(25, rate) } - name { ^"HOAEncoder4" } + name { ^"FaustHOAEncoder4" } } diff --git a/source/HOAUGens/sc/Classes/HOAEncoder5.sc b/source/HOAUGens/sc/Classes/HOAEncoder5.sc index 699cebdacf..1742df78a2 100644 --- a/source/HOAUGens/sc/Classes/HOAEncoder5.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder5.sc @@ -1,4 +1,4 @@ -HOAEncoder5 : MultiOutUGen +FaustHOAEncoder5 : MultiOutUGen { *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) @@ -25,6 +25,6 @@ HOAEncoder5 : MultiOutUGen ^this.initOutputs(36, rate) } - name { ^"HOAEncoder5" } + name { ^"FaustHOAEncoder5" } } diff --git a/source/HOAUGens/sc/Classes/HOAMirror1.sc b/source/HOAUGens/sc/Classes/HOAMirror1.sc index 07dbc43673..39dc5ea2c5 100644 --- a/source/HOAUGens/sc/Classes/HOAMirror1.sc +++ b/source/HOAUGens/sc/Classes/HOAMirror1.sc @@ -1,4 +1,4 @@ -HOAMirror1 : MultiOutUGen +FaustHOAMirror1 : MultiOutUGen { *ar { | in1, in2, in3, in4, front_back(0.0), left_right(0.0), up_down(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, front_back, left_right, up_down) @@ -25,6 +25,6 @@ HOAMirror1 : MultiOutUGen ^this.initOutputs(4, rate) } - name { ^"HOAMirror1" } + name { ^"FaustHOAMirror1" } } diff --git a/source/HOAUGens/sc/Classes/HOAMirror2.sc b/source/HOAUGens/sc/Classes/HOAMirror2.sc index 7920730d23..f28bd936e2 100644 --- a/source/HOAUGens/sc/Classes/HOAMirror2.sc +++ b/source/HOAUGens/sc/Classes/HOAMirror2.sc @@ -1,4 +1,4 @@ -HOAMirror2 : MultiOutUGen +FaustHOAMirror2 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, front_back(0.0), left_right(0.0), up_down(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, front_back, left_right, up_down) @@ -25,6 +25,6 @@ HOAMirror2 : MultiOutUGen ^this.initOutputs(9, rate) } - name { ^"HOAMirror2" } + name { ^"FaustHOAMirror2" } } diff --git a/source/HOAUGens/sc/Classes/HOAMirror3.sc b/source/HOAUGens/sc/Classes/HOAMirror3.sc index 23d490d756..b3335ee0a4 100644 --- a/source/HOAUGens/sc/Classes/HOAMirror3.sc +++ b/source/HOAUGens/sc/Classes/HOAMirror3.sc @@ -1,4 +1,4 @@ -HOAMirror3 : MultiOutUGen +FaustHOAMirror3 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, front_back(0.0), left_right(0.0), up_down(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, front_back, left_right, up_down) @@ -25,6 +25,6 @@ HOAMirror3 : MultiOutUGen ^this.initOutputs(16, rate) } - name { ^"HOAMirror3" } + name { ^"FaustHOAMirror3" } } diff --git a/source/HOAUGens/sc/Classes/HOAMirror4.sc b/source/HOAUGens/sc/Classes/HOAMirror4.sc index b9d41e19e0..1430080400 100644 --- a/source/HOAUGens/sc/Classes/HOAMirror4.sc +++ b/source/HOAUGens/sc/Classes/HOAMirror4.sc @@ -1,4 +1,4 @@ -HOAMirror4 : MultiOutUGen +FaustHOAMirror4 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, front_back(0.0), left_right(0.0), up_down(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, front_back, left_right, up_down) @@ -25,6 +25,6 @@ HOAMirror4 : MultiOutUGen ^this.initOutputs(25, rate) } - name { ^"HOAMirror4" } + name { ^"FaustHOAMirror4" } } diff --git a/source/HOAUGens/sc/Classes/HOAMirror5.sc b/source/HOAUGens/sc/Classes/HOAMirror5.sc index 54896003bb..3ed0940c40 100644 --- a/source/HOAUGens/sc/Classes/HOAMirror5.sc +++ b/source/HOAUGens/sc/Classes/HOAMirror5.sc @@ -1,4 +1,4 @@ -HOAMirror5 : MultiOutUGen +FaustHOAMirror5 : MultiOutUGen { *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, front_back(0.0), left_right(0.0), up_down(0.0) | ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, front_back, left_right, up_down) @@ -25,6 +25,6 @@ HOAMirror5 : MultiOutUGen ^this.initOutputs(36, rate) } - name { ^"HOAMirror5" } + name { ^"FaustHOAMirror5" } } diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc deleted file mode 100644 index eabb233696..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev061 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(6, rate) - } - - name { ^"HOAPanLebedev061" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc deleted file mode 100644 index 3996afb7d9..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev261 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(26, rate) - } - - name { ^"HOAPanLebedev261" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev262.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev262.sc deleted file mode 100644 index b30ad64a58..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev262.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev262 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(26, rate) - } - - name { ^"HOAPanLebedev262" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev263.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev263.sc deleted file mode 100644 index 701cc5dcc9..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev263.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev263 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(26, rate) - } - - name { ^"HOAPanLebedev263" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc deleted file mode 100644 index 37bc821c35..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev501 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(50, rate) - } - - name { ^"HOAPanLebedev501" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc deleted file mode 100644 index f706e48c07..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev502 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(50, rate) - } - - name { ^"HOAPanLebedev502" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc deleted file mode 100644 index b35bdf1cdb..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev503 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(50, rate) - } - - name { ^"HOAPanLebedev503" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev504.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev504.sc deleted file mode 100644 index d3c3b2d6ec..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev504.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev504 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), checkbox_4_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, checkbox_4_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), checkbox_4_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, checkbox_4_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(50, rate) - } - - name { ^"HOAPanLebedev504" } -} - diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev505.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev505.sc deleted file mode 100644 index 340dbf76e4..0000000000 --- a/source/HOAUGens/sc/Classes/HOAPanLebedev505.sc +++ /dev/null @@ -1,30 +0,0 @@ -HOAPanLebedev505 : MultiOutUGen -{ - *ar { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), checkbox_4_1(0.0), checkbox_5_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('audio', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, checkbox_4_1, checkbox_5_1, speaker_radius_1) - } - - *kr { | in1, in2, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes_0(0.0), gain_1_0(0.0), radius_1_0(2.0), azimuth_1_0(0.0), elevation_1_0(0.0), yes_1(0.0), checkbox_0_1(0.0), checkbox_1_1(0.0), checkbox_2_1(0.0), checkbox_3_1(0.0), checkbox_4_1(0.0), checkbox_5_1(0.0), speaker_radius_1(1.07) | - ^this.multiNew('control', in1, in2, gain_0, radius_0, azimuth_0, elevation_0, yes_0, gain_1_0, radius_1_0, azimuth_1_0, elevation_1_0, yes_1, checkbox_0_1, checkbox_1_1, checkbox_2_1, checkbox_3_1, checkbox_4_1, checkbox_5_1, speaker_radius_1) - } - - checkInputs { - if (rate == 'audio', { - 2.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(50, rate) - } - - name { ^"HOAPanLebedev505" } -} - diff --git a/source/HOAUGens/sc/Classes/HOARotator1.sc b/source/HOAUGens/sc/Classes/HOARotator1.sc new file mode 100644 index 0000000000..0a70acee74 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOARotator1.sc @@ -0,0 +1,30 @@ +FaustHOARotator1 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, pitch(0.0), roll(0.0), yaw(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, pitch, roll, yaw) + } + + *kr { | in1, in2, in3, in4, pitch(0.0), roll(0.0), yaw(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, pitch, roll, yaw) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"FaustHOARotator1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator1.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator1.sc new file mode 100644 index 0000000000..ece3b715da --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator1.sc @@ -0,0 +1,30 @@ +FaustHOAAzimuthRotator1 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, azimuth) + } + + *kr { | in1, in2, in3, in4, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, azimuth) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(4, rate) + } + + name { ^"FaustHOAAzimuthRotator1" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa2.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator2.sc similarity index 69% rename from source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa2.sc rename to source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator2.sc index 71d26fc58d..e0824c38da 100644 --- a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa2.sc +++ b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator2.sc @@ -1,11 +1,11 @@ -HOABeamHCardioid2Hoa2 : MultiOutUGen +FaustHOAAzimuthRotator2 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth, elevation, order) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth, elevation, order) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth) } checkInputs { @@ -22,9 +22,9 @@ HOABeamHCardioid2Hoa2 : MultiOutUGen init { | ... theInputs | inputs = theInputs - ^this.initOutputs(25, rate) + ^this.initOutputs(9, rate) } - name { ^"HOABeamHCardioid2Hoa2" } + name { ^"FaustHOAAzimuthRotator2" } } diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa3.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator3.sc similarity index 58% rename from source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa3.sc rename to source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator3.sc index 2b5fceb802..1015f1727b 100644 --- a/source/HOAUGens/sc/Classes/HOABeamHCardioid2Hoa3.sc +++ b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator3.sc @@ -1,11 +1,11 @@ -HOABeamHCardioid2Hoa3 : MultiOutUGen +FaustHOAAzimuthRotator3 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth, elevation, order) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth, elevation, order) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth) } checkInputs { @@ -22,9 +22,9 @@ HOABeamHCardioid2Hoa3 : MultiOutUGen init { | ... theInputs | inputs = theInputs - ^this.initOutputs(36, rate) + ^this.initOutputs(16, rate) } - name { ^"HOABeamHCardioid2Hoa3" } + name { ^"FaustHOAAzimuthRotator3" } } diff --git a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator4.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator4.sc new file mode 100644 index 0000000000..16b9b5d39d --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator4.sc @@ -0,0 +1,30 @@ +FaustHOAAzimuthRotator4 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth) + } + + checkInputs { + if (rate == 'audio', { + 25.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"FaustHOAAzimuthRotator4" } +} + diff --git a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator5.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator5.sc new file mode 100644 index 0000000000..20258847f5 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator5.sc @@ -0,0 +1,30 @@ +FaustHOAAzimuthRotator5 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth) + } + + checkInputs { + if (rate == 'audio', { + 36.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(36, rate) + } + + name { ^"FaustHOAAzimuthRotator5" } +} + From dd7b4e98d9490542e12ff654ba7e677af5edc555 Mon Sep 17 00:00:00 2001 From: fgrond Date: Mon, 5 Jun 2017 16:35:47 -0400 Subject: [PATCH 04/30] removed redundant classes --- .../sc/Classes/HOA_Azimuth_Rotator1.sc | 30 ------------------- .../sc/Classes/HOA_Azimuth_Rotator2.sc | 30 ------------------- .../sc/Classes/HOA_Azimuth_Rotator3.sc | 30 ------------------- .../sc/Classes/HOA_Azimuth_Rotator4.sc | 30 ------------------- .../sc/Classes/HOA_Azimuth_Rotator5.sc | 30 ------------------- 5 files changed, 150 deletions(-) delete mode 100644 source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator1.sc delete mode 100644 source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator2.sc delete mode 100644 source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator3.sc delete mode 100644 source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator4.sc delete mode 100644 source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator5.sc diff --git a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator1.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator1.sc deleted file mode 100644 index ece3b715da..0000000000 --- a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator1.sc +++ /dev/null @@ -1,30 +0,0 @@ -FaustHOAAzimuthRotator1 : MultiOutUGen -{ - *ar { | in1, in2, in3, in4, azimuth(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, azimuth) - } - - *kr { | in1, in2, in3, in4, azimuth(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, azimuth) - } - - checkInputs { - if (rate == 'audio', { - 4.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(4, rate) - } - - name { ^"FaustHOAAzimuthRotator1" } -} - diff --git a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator2.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator2.sc deleted file mode 100644 index e0824c38da..0000000000 --- a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator2.sc +++ /dev/null @@ -1,30 +0,0 @@ -FaustHOAAzimuthRotator2 : MultiOutUGen -{ - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth) - } - - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth) - } - - checkInputs { - if (rate == 'audio', { - 9.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(9, rate) - } - - name { ^"FaustHOAAzimuthRotator2" } -} - diff --git a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator3.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator3.sc deleted file mode 100644 index 1015f1727b..0000000000 --- a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator3.sc +++ /dev/null @@ -1,30 +0,0 @@ -FaustHOAAzimuthRotator3 : MultiOutUGen -{ - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth) - } - - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth) - } - - checkInputs { - if (rate == 'audio', { - 16.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(16, rate) - } - - name { ^"FaustHOAAzimuthRotator3" } -} - diff --git a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator4.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator4.sc deleted file mode 100644 index 16b9b5d39d..0000000000 --- a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator4.sc +++ /dev/null @@ -1,30 +0,0 @@ -FaustHOAAzimuthRotator4 : MultiOutUGen -{ - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth) - } - - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, azimuth) - } - - checkInputs { - if (rate == 'audio', { - 25.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(25, rate) - } - - name { ^"FaustHOAAzimuthRotator4" } -} - diff --git a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator5.sc b/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator5.sc deleted file mode 100644 index 20258847f5..0000000000 --- a/source/HOAUGens/sc/Classes/HOA_Azimuth_Rotator5.sc +++ /dev/null @@ -1,30 +0,0 @@ -FaustHOAAzimuthRotator5 : MultiOutUGen -{ - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth) - } - - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, azimuth) - } - - checkInputs { - if (rate == 'audio', { - 36.do({|i| - if (inputs.at(i).rate != 'audio', { - ^(" input at index " + i + "(" + inputs.at(i) + - ") is not audio rate"); - }); - }); - }); - ^this.checkValidInputs - } - - init { | ... theInputs | - inputs = theInputs - ^this.initOutputs(36, rate) - } - - name { ^"FaustHOAAzimuthRotator5" } -} - From a36f88ff4835e24b3cd153f3a34a40b764699f38 Mon Sep 17 00:00:00 2001 From: fgrond Date: Mon, 26 Jun 2017 16:54:19 -0400 Subject: [PATCH 05/30] compiled up to order 4 with most recent Faust version --- source/HOAUGens/HOAAzimuthRotator1.cpp | 262 +- source/HOAUGens/HOAAzimuthRotator2.cpp | 352 +- source/HOAUGens/HOAAzimuthRotator3.cpp | 474 +- source/HOAUGens/HOAAzimuthRotator4.cpp | 628 +- source/HOAUGens/HOAAzimuthRotator5.cpp | 814 +- source/HOAUGens/HOABeamDirac2Hoa1.cpp | 417 +- source/HOAUGens/HOABeamDirac2Hoa2.cpp | 556 +- source/HOAUGens/HOABeamDirac2Hoa3.cpp | 723 +- source/HOAUGens/HOABeamDirac2Hoa4.cpp | 938 ++- source/HOAUGens/HOABeamDirac2Hoa5.cpp | 1199 ++- source/HOAUGens/HOABeamHCardio2HOA1.cpp | 1277 ++++ source/HOAUGens/HOABeamHCardio2HOA2.cpp | 1426 ++++ source/HOAUGens/HOABeamHCardio2HOA3.cpp | 1658 ++++ source/HOAUGens/HOABeamHCardio2Mono1.cpp | 1196 +++ source/HOAUGens/HOABeamHCardio2Mono2.cpp | 1313 ++++ source/HOAUGens/HOABeamHCardio2Mono3.cpp | 1465 ++++ source/HOAUGens/HOAConverter1.cpp | 478 +- source/HOAUGens/HOAConverter2.cpp | 767 +- source/HOAUGens/HOAConverter3.cpp | 1170 +-- source/HOAUGens/HOAConverter4.cpp | 1683 +++-- source/HOAUGens/HOAConverter5.cpp | 2312 +++--- source/HOAUGens/HOADecBinauralLebedev501.cpp | 1242 +++ source/HOAUGens/HOADecLebedev061.cpp | 678 +- source/HOAUGens/HOADecLebedev261.cpp | 1339 ++-- source/HOAUGens/HOADecLebedev262.cpp | 1751 +++-- source/HOAUGens/HOADecLebedev263.cpp | 2435 +++--- source/HOAUGens/HOADecLebedev501.cpp | 2134 ++++-- source/HOAUGens/HOADecLebedev502.cpp | 2624 ++++--- source/HOAUGens/HOADecLebedev503.cpp | 3451 +++++---- source/HOAUGens/HOADecLebedev504.cpp | 4964 +++++++----- source/HOAUGens/HOADecLebedev505.cpp | 6732 ++++++++++------- source/HOAUGens/HOAEncEigenMike1.cpp | 1257 +-- source/HOAUGens/HOAEncEigenMike2.cpp | 1436 ++-- source/HOAUGens/HOAEncEigenMike3.cpp | 1665 ++-- source/HOAUGens/HOAEncEigenMike4.cpp | 1936 +++-- source/HOAUGens/HOAEncLebedev061.cpp | 517 +- source/HOAUGens/HOAEncLebedev261.cpp | 1075 ++- source/HOAUGens/HOAEncLebedev262.cpp | 1257 +-- source/HOAUGens/HOAEncLebedev263.cpp | 1485 ++-- source/HOAUGens/HOAEncLebedev501.cpp | 664 +- source/HOAUGens/HOAEncLebedev502.cpp | 763 +- source/HOAUGens/HOAEncLebedev503.cpp | 866 ++- source/HOAUGens/HOAEncLebedev504.cpp | 1014 ++- source/HOAUGens/HOAEncLebedev505.cpp | 1124 ++- source/HOAUGens/HOAEncoder1.cpp | 489 +- source/HOAUGens/HOAEncoder2.cpp | 770 +- source/HOAUGens/HOAEncoder3.cpp | 1145 +-- source/HOAUGens/HOAEncoder4.cpp | 1605 ++-- source/HOAUGens/HOAEncoder5.cpp | 2208 +++--- source/HOAUGens/HOAMirror1.cpp | 284 +- source/HOAUGens/HOAMirror2.cpp | 384 +- source/HOAUGens/HOAMirror3.cpp | 524 +- source/HOAUGens/HOAMirror4.cpp | 704 +- source/HOAUGens/HOAMirror5.cpp | 924 ++- source/HOAUGens/HOAPanLebedev061.cpp | 1333 ++++ source/HOAUGens/HOAPanLebedev261.cpp | 1791 +++++ source/HOAUGens/HOAPanLebedev262.cpp | 1932 +++++ source/HOAUGens/HOAPanLebedev263.cpp | 2088 +++++ source/HOAUGens/HOAPanLebedev501.cpp | 2342 ++++++ source/HOAUGens/HOAPanLebedev502.cpp | 2528 +++++++ source/HOAUGens/HOAPanLebedev503.cpp | 2708 +++++++ source/HOAUGens/HOAPanLebedev504.cpp | 2922 +++++++ source/HOAUGens/HOAPanLebedev505.cpp | 3183 ++++++++ source/HOAUGens/HOARotator1.cpp | 310 +- source/HOAUGens/HOARotator2.cpp | 1239 +++ source/HOAUGens/HOARotator3.cpp | 1425 ++++ source/HOAUGens/HOARotator4.cpp | 1715 +++++ .../HOAUGens/sc/Classes/HOAAzimuthRotator1.sc | 0 .../HOAUGens/sc/Classes/HOAAzimuthRotator1.so | Bin 0 -> 53272 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator2.sc | 0 .../HOAUGens/sc/Classes/HOAAzimuthRotator2.so | Bin 0 -> 53272 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator3.sc | 0 .../HOAUGens/sc/Classes/HOAAzimuthRotator3.so | Bin 0 -> 57368 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator4.sc | 0 .../HOAUGens/sc/Classes/HOAAzimuthRotator4.so | Bin 0 -> 57368 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator5.sc | 0 .../HOAUGens/sc/Classes/HOAAzimuthRotator5.so | Bin 0 -> 61464 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA1.so | Bin 0 -> 57392 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA2.so | Bin 0 -> 65696 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA3.so | Bin 0 -> 61656 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA4.so | Bin 0 -> 65808 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA5.so | Bin 0 -> 69960 bytes .../HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc | 0 .../HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc | 0 .../HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc | 0 .../HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc | 0 .../HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc | 0 .../sc/Classes/HOABeamHCardio2HOA1.sc | 30 + .../sc/Classes/HOABeamHCardio2HOA1.so | Bin 0 -> 65688 bytes .../sc/Classes/HOABeamHCardio2HOA2.sc | 30 + .../sc/Classes/HOABeamHCardio2HOA2.so | Bin 0 -> 61592 bytes .../sc/Classes/HOABeamHCardio2HOA3.sc | 30 + .../sc/Classes/HOABeamHCardio2HOA3.so | Bin 0 -> 69784 bytes .../sc/Classes/HOABeamHCardio2Mono1.sc | 25 + .../sc/Classes/HOABeamHCardio2Mono1.so | Bin 0 -> 57512 bytes .../sc/Classes/HOABeamHCardio2Mono2.sc | 25 + .../sc/Classes/HOABeamHCardio2Mono2.so | Bin 0 -> 61712 bytes .../sc/Classes/HOABeamHCardio2Mono3.sc | 25 + .../sc/Classes/HOABeamHCardio2Mono3.so | Bin 0 -> 61712 bytes source/HOAUGens/sc/Classes/HOAConverter1.sc | 0 source/HOAUGens/sc/Classes/HOAConverter1.so | Bin 0 -> 57312 bytes source/HOAUGens/sc/Classes/HOAConverter2.sc | 0 source/HOAUGens/sc/Classes/HOAConverter2.so | Bin 0 -> 65504 bytes source/HOAUGens/sc/Classes/HOAConverter3.sc | 0 source/HOAUGens/sc/Classes/HOAConverter3.so | Bin 0 -> 73696 bytes source/HOAUGens/sc/Classes/HOAConverter4.sc | 0 source/HOAUGens/sc/Classes/HOAConverter4.so | Bin 0 -> 81888 bytes source/HOAUGens/sc/Classes/HOAConverter5.sc | 0 source/HOAUGens/sc/Classes/HOAConverter5.so | Bin 0 -> 90080 bytes .../sc/Classes/HOADecBinauralLebedev501.sc | 30 + .../sc/Classes/HOADecBinauralLebedev501.so | Bin 0 -> 151752 bytes .../HOAUGens/sc/Classes/HOADecLebedev061.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev061.so | Bin 0 -> 61472 bytes .../HOAUGens/sc/Classes/HOADecLebedev261.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev261.so | Bin 0 -> 69664 bytes .../HOAUGens/sc/Classes/HOADecLebedev262.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev262.so | Bin 0 -> 77912 bytes .../HOAUGens/sc/Classes/HOADecLebedev263.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev263.so | Bin 0 -> 86104 bytes .../HOAUGens/sc/Classes/HOADecLebedev501.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev501.so | Bin 0 -> 81952 bytes .../HOAUGens/sc/Classes/HOADecLebedev502.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev502.so | Bin 0 -> 90200 bytes .../HOAUGens/sc/Classes/HOADecLebedev503.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev503.so | Bin 0 -> 98400 bytes .../HOAUGens/sc/Classes/HOADecLebedev504.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev504.so | Bin 0 -> 110688 bytes .../HOAUGens/sc/Classes/HOADecLebedev505.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev505.so | Bin 0 -> 135264 bytes .../HOAUGens/sc/Classes/HOAEncEigenMike1.sc | 0 .../HOAUGens/sc/Classes/HOAEncEigenMike1.so | Bin 0 -> 69664 bytes .../HOAUGens/sc/Classes/HOAEncEigenMike2.sc | 0 .../HOAUGens/sc/Classes/HOAEncEigenMike2.so | Bin 0 -> 73760 bytes .../HOAUGens/sc/Classes/HOAEncEigenMike3.sc | 0 .../HOAUGens/sc/Classes/HOAEncEigenMike3.so | Bin 0 -> 77856 bytes .../HOAUGens/sc/Classes/HOAEncEigenMike4.sc | 0 .../HOAUGens/sc/Classes/HOAEncEigenMike4.so | Bin 0 -> 86048 bytes .../HOAUGens/sc/Classes/HOAEncLebedev061.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev061.so | Bin 0 -> 57376 bytes .../HOAUGens/sc/Classes/HOAEncLebedev261.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev261.so | Bin 0 -> 65568 bytes .../HOAUGens/sc/Classes/HOAEncLebedev262.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev262.so | Bin 0 -> 69664 bytes .../HOAUGens/sc/Classes/HOAEncLebedev263.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev263.so | Bin 0 -> 73760 bytes .../HOAUGens/sc/Classes/HOAEncLebedev501.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev501.so | Bin 0 -> 65512 bytes .../HOAUGens/sc/Classes/HOAEncLebedev502.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev502.so | Bin 0 -> 61416 bytes .../HOAUGens/sc/Classes/HOAEncLebedev503.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev503.so | Bin 0 -> 65512 bytes .../HOAUGens/sc/Classes/HOAEncLebedev504.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev504.so | Bin 0 -> 73704 bytes .../HOAUGens/sc/Classes/HOAEncLebedev505.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev505.so | Bin 0 -> 77800 bytes source/HOAUGens/sc/Classes/HOAEncoder1.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder1.so | Bin 0 -> 61416 bytes source/HOAUGens/sc/Classes/HOAEncoder2.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder2.so | Bin 0 -> 61520 bytes source/HOAUGens/sc/Classes/HOAEncoder3.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder3.so | Bin 0 -> 65672 bytes source/HOAUGens/sc/Classes/HOAEncoder4.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder4.so | Bin 0 -> 73920 bytes source/HOAUGens/sc/Classes/HOAEncoder5.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder5.so | Bin 0 -> 82176 bytes source/HOAUGens/sc/Classes/HOAMirror1.sc | 0 source/HOAUGens/sc/Classes/HOAMirror1.so | Bin 0 -> 48944 bytes source/HOAUGens/sc/Classes/HOAMirror2.sc | 0 source/HOAUGens/sc/Classes/HOAMirror2.so | Bin 0 -> 48944 bytes source/HOAUGens/sc/Classes/HOAMirror3.sc | 0 source/HOAUGens/sc/Classes/HOAMirror3.so | Bin 0 -> 53040 bytes source/HOAUGens/sc/Classes/HOAMirror4.sc | 0 source/HOAUGens/sc/Classes/HOAMirror4.so | Bin 0 -> 57136 bytes source/HOAUGens/sc/Classes/HOAMirror5.sc | 0 source/HOAUGens/sc/Classes/HOAMirror5.so | Bin 0 -> 61232 bytes .../HOAUGens/sc/Classes/HOAPanLebedev061.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev061.so | Bin 0 -> 65648 bytes .../HOAUGens/sc/Classes/HOAPanLebedev261.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev261.so | Bin 0 -> 73840 bytes .../HOAUGens/sc/Classes/HOAPanLebedev262.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev262.so | Bin 0 -> 77992 bytes .../HOAUGens/sc/Classes/HOAPanLebedev263.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev263.so | Bin 0 -> 82144 bytes .../HOAUGens/sc/Classes/HOAPanLebedev501.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev501.so | Bin 0 -> 86128 bytes .../HOAUGens/sc/Classes/HOAPanLebedev502.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev502.so | Bin 0 -> 90280 bytes .../HOAUGens/sc/Classes/HOAPanLebedev503.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev503.so | Bin 0 -> 94432 bytes .../HOAUGens/sc/Classes/HOAPanLebedev504.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev504.so | Bin 0 -> 102904 bytes .../HOAUGens/sc/Classes/HOAPanLebedev505.sc | 30 + .../HOAUGens/sc/Classes/HOAPanLebedev505.so | Bin 0 -> 106784 bytes source/HOAUGens/sc/Classes/HOARotator1.sc | 0 source/HOAUGens/sc/Classes/HOARotator1.so | Bin 0 -> 53120 bytes source/HOAUGens/sc/Classes/HOARotator2.sc | 30 + source/HOAUGens/sc/Classes/HOARotator2.so | Bin 0 -> 61376 bytes source/HOAUGens/sc/Classes/HOARotator3.sc | 30 + source/HOAUGens/sc/Classes/HOARotator3.so | Bin 0 -> 61376 bytes source/HOAUGens/sc/Classes/HOARotator4.sc | 30 + source/HOAUGens/sc/Classes/HOARotator4.so | Bin 0 -> 73664 bytes 201 files changed, 75302 insertions(+), 23363 deletions(-) mode change 100644 => 100755 source/HOAUGens/HOAAzimuthRotator1.cpp mode change 100644 => 100755 source/HOAUGens/HOAAzimuthRotator2.cpp mode change 100644 => 100755 source/HOAUGens/HOAAzimuthRotator3.cpp mode change 100644 => 100755 source/HOAUGens/HOAAzimuthRotator4.cpp mode change 100644 => 100755 source/HOAUGens/HOAAzimuthRotator5.cpp mode change 100644 => 100755 source/HOAUGens/HOABeamDirac2Hoa1.cpp mode change 100644 => 100755 source/HOAUGens/HOABeamDirac2Hoa2.cpp mode change 100644 => 100755 source/HOAUGens/HOABeamDirac2Hoa3.cpp mode change 100644 => 100755 source/HOAUGens/HOABeamDirac2Hoa4.cpp mode change 100644 => 100755 source/HOAUGens/HOABeamDirac2Hoa5.cpp create mode 100755 source/HOAUGens/HOABeamHCardio2HOA1.cpp create mode 100755 source/HOAUGens/HOABeamHCardio2HOA2.cpp create mode 100755 source/HOAUGens/HOABeamHCardio2HOA3.cpp create mode 100755 source/HOAUGens/HOABeamHCardio2Mono1.cpp create mode 100755 source/HOAUGens/HOABeamHCardio2Mono2.cpp create mode 100755 source/HOAUGens/HOABeamHCardio2Mono3.cpp mode change 100644 => 100755 source/HOAUGens/HOAConverter1.cpp mode change 100644 => 100755 source/HOAUGens/HOAConverter2.cpp mode change 100644 => 100755 source/HOAUGens/HOAConverter3.cpp mode change 100644 => 100755 source/HOAUGens/HOAConverter4.cpp mode change 100644 => 100755 source/HOAUGens/HOAConverter5.cpp create mode 100755 source/HOAUGens/HOADecBinauralLebedev501.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev061.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev261.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev262.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev263.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev501.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev502.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev503.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev504.cpp mode change 100644 => 100755 source/HOAUGens/HOADecLebedev505.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncEigenMike1.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncEigenMike2.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncEigenMike3.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncEigenMike4.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev061.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev261.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev262.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev263.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev501.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev502.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev503.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev504.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncLebedev505.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncoder1.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncoder2.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncoder3.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncoder4.cpp mode change 100644 => 100755 source/HOAUGens/HOAEncoder5.cpp mode change 100644 => 100755 source/HOAUGens/HOAMirror1.cpp mode change 100644 => 100755 source/HOAUGens/HOAMirror2.cpp mode change 100644 => 100755 source/HOAUGens/HOAMirror3.cpp mode change 100644 => 100755 source/HOAUGens/HOAMirror4.cpp mode change 100644 => 100755 source/HOAUGens/HOAMirror5.cpp create mode 100755 source/HOAUGens/HOAPanLebedev061.cpp create mode 100755 source/HOAUGens/HOAPanLebedev261.cpp create mode 100755 source/HOAUGens/HOAPanLebedev262.cpp create mode 100755 source/HOAUGens/HOAPanLebedev263.cpp create mode 100755 source/HOAUGens/HOAPanLebedev501.cpp create mode 100755 source/HOAUGens/HOAPanLebedev502.cpp create mode 100755 source/HOAUGens/HOAPanLebedev503.cpp create mode 100755 source/HOAUGens/HOAPanLebedev504.cpp create mode 100755 source/HOAUGens/HOAPanLebedev505.cpp mode change 100644 => 100755 source/HOAUGens/HOARotator1.cpp create mode 100755 source/HOAUGens/HOARotator2.cpp create mode 100755 source/HOAUGens/HOARotator3.cpp create mode 100755 source/HOAUGens/HOARotator4.cpp mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator1.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator1.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator2.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator3.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator3.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator4.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator4.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator5.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator5.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA1.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA4.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA1.sc create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA1.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA2.sc create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA2.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA3.sc create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA3.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono1.sc create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono1.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.so create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc create mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAConverter1.sc create mode 100755 source/HOAUGens/sc/Classes/HOAConverter1.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAConverter2.sc create mode 100755 source/HOAUGens/sc/Classes/HOAConverter2.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAConverter3.sc create mode 100755 source/HOAUGens/sc/Classes/HOAConverter3.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAConverter4.sc create mode 100755 source/HOAUGens/sc/Classes/HOAConverter4.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAConverter5.sc create mode 100755 source/HOAUGens/sc/Classes/HOAConverter5.so create mode 100755 source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev061.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev061.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev261.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev261.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev262.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev262.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev263.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev263.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev501.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev501.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev502.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev502.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev503.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev503.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev504.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev504.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOADecLebedev505.sc create mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev505.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike1.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike1.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike2.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike2.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike3.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike3.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike4.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike4.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev061.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev061.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev261.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev261.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev262.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev262.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev263.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev263.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev501.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev501.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev502.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev502.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev503.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev503.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev504.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev504.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncLebedev505.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev505.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncoder1.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder1.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncoder2.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder2.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncoder3.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder3.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncoder4.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder4.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAEncoder5.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder5.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAMirror1.sc create mode 100755 source/HOAUGens/sc/Classes/HOAMirror1.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAMirror2.sc create mode 100755 source/HOAUGens/sc/Classes/HOAMirror2.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAMirror3.sc create mode 100755 source/HOAUGens/sc/Classes/HOAMirror3.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAMirror4.sc create mode 100755 source/HOAUGens/sc/Classes/HOAMirror4.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOAMirror5.sc create mode 100755 source/HOAUGens/sc/Classes/HOAMirror5.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev061.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev061.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev261.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev261.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev262.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev262.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev263.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev263.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev501.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev501.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev502.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev502.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev503.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev503.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev504.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev504.so create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev505.sc create mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev505.so mode change 100644 => 100755 source/HOAUGens/sc/Classes/HOARotator1.sc create mode 100755 source/HOAUGens/sc/Classes/HOARotator1.so create mode 100755 source/HOAUGens/sc/Classes/HOARotator2.sc create mode 100755 source/HOAUGens/sc/Classes/HOARotator2.so create mode 100755 source/HOAUGens/sc/Classes/HOARotator3.sc create mode 100755 source/HOAUGens/sc/Classes/HOARotator3.so create mode 100755 source/HOAUGens/sc/Classes/HOARotator4.sc create mode 100755 source/HOAUGens/sc/Classes/HOARotator4.so diff --git a/source/HOAUGens/HOAAzimuthRotator1.cpp b/source/HOAUGens/HOAAzimuthRotator1.cpp old mode 100644 new mode 100755 index b250e45dca..028b09f8fb --- a/source/HOAUGens/HOAAzimuthRotator1.cpp +++ b/source/HOAUGens/HOAAzimuthRotator1.cpp @@ -1,18 +1,14 @@ -//---------------------------------------------------------- -// name: "HOAAzimuthRotator1" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2015" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAAzimuthRotator1" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -34,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,48 +602,125 @@ class ControlAllocator : public UI #endif +double cos(double dummy0); +double sin(double dummy0); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); m->declare("name", "HOAAzimuthRotator1"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -614,44 +730,52 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator1"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,48 +602,165 @@ class ControlAllocator : public UI #endif +double cos(double dummy0); +double sin(double dummy0); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAAzimuthRotator2"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAAzimuthRotator2"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -614,69 +770,77 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator2"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,48 +602,221 @@ class ControlAllocator : public UI #endif +double cos(double dummy0); +double sin(double dummy0); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAAzimuthRotator3"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAAzimuthRotator3"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -614,102 +826,110 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator3"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,48 +602,293 @@ class ControlAllocator : public UI #endif +double cos(double dummy0); +double sin(double dummy0); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAAzimuthRotator4"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAAzimuthRotator4"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 25; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -614,143 +898,151 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator4"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - double fSlow18 = (4 * fSlow0); - double fSlow19 = cos(fSlow18); - double fSlow20 = sin(fSlow18); - double fSlow21 = (0 - fSlow18); - double fSlow22 = sin(fSlow21); - double fSlow23 = cos(fSlow21); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,48 +602,381 @@ class ControlAllocator : public UI #endif +double cos(double dummy0); +double sin(double dummy0); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAAzimuthRotator5"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAAzimuthRotator5"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 36; } - virtual int getNumOutputs() { return 36; } + virtual int getNumInputs() { + return 36; + + } + virtual int getNumOutputs() { + return 36; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -614,192 +986,200 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator5"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - double fSlow18 = (4 * fSlow0); - double fSlow19 = cos(fSlow18); - double fSlow20 = sin(fSlow18); - double fSlow21 = (0 - fSlow18); - double fSlow22 = sin(fSlow21); - double fSlow23 = cos(fSlow21); - double fSlow24 = (5 * fSlow0); - double fSlow25 = cos(fSlow24); - double fSlow26 = sin(fSlow24); - double fSlow27 = (0 - fSlow24); - double fSlow28 = sin(fSlow27); - double fSlow29 = cos(fSlow27); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA1" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,88 +601,182 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double sin(double dummy0); +double cos(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - double fRec0[2]; - double fRec1[2]; - FAUSTFLOAT fslider0; - double fRec2[2]; - double fRec3[2]; - double fRec4[2]; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; + + private: + + FAUSTFLOAT fCheckbox0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOABeamDirac2HOA1"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamDirac2HOA1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.0; - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -654,85 +786,90 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->addCheckButton("On", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "3", ""); - ui_interface->declare(&fentry0, "unit", "s"); - ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider0, "4", ""); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider0, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider1, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "4", ""); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider2, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = int(((1 - fSlow0) > 0)); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = int((fSlow0 > 0)); - double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow8 = double(fslider1); - double fSlow9 = cos(fSlow8); - double fSlow10 = double(fslider2); - double fSlow11 = (fSlow9 * sin(fSlow10)); - double fSlow12 = sin(fSlow8); - double fSlow13 = (fSlow9 * cos(fSlow10)); - double fSlow14 = (0.13783222385544802 * fSlow11); - double fSlow15 = (0.13783222385544802 * fSlow12); - double fSlow16 = (0.13783222385544802 * fSlow13); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow8 = double(fVslider1); + double fSlow9 = double(fVslider2); + double fSlow10 = cos(fSlow9); + double fSlow11 = (sin(fSlow8) * fSlow10); + double fSlow12 = sin(fSlow9); + double fSlow13 = (cos(fSlow8) * fSlow10); + double fSlow14 = (0.13783222385544802 * fSlow11); + double fSlow15 = (0.13783222385544802 * fSlow12); + double fSlow16 = (0.13783222385544802 * fSlow13); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); fRec2[0] = (fSlow7 + (0.999 * fRec2[1])); - double fTemp1 = (fTemp0 * fRec2[0]); - fRec3[0] = ((iSlow4)?0:min(fSlow5, (fRec3[1] + 1))); - fRec4[0] = ((iSlow6)?fSlow5:max((double)0, (fRec4[1] + -1))); - double fTemp2 = (double)input1[i]; - double fTemp3 = (fTemp2 * fRec2[0]); - double fTemp4 = (double)input2[i]; - double fTemp5 = (fTemp4 * fRec2[0]); - double fTemp6 = (double)input3[i]; - double fTemp7 = (fTemp6 * fRec2[0]); - double fTemp8 = (((iSlow1)?(fSlow3 * (fTemp1 * fRec3[0])):(fSlow3 * (fTemp1 * fRec4[0]))) + (1.7320508075688772 * (((fSlow11 * ((iSlow1)?(fSlow3 * (fTemp3 * fRec3[0])):(fSlow3 * (fTemp3 * fRec4[0])))) + (fSlow12 * ((iSlow1)?(fSlow3 * (fTemp5 * fRec3[0])):(fSlow3 * (fTemp5 * fRec4[0]))))) + (fSlow13 * ((iSlow1)?(fSlow3 * (fTemp7 * fRec3[0])):(fSlow3 * (fTemp7 * fRec4[0]))))))); - output0[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp0 * fRec0[0])):(fSlow3 * (fTemp0 * fRec1[0]))) + (0.07957747154594767 * fTemp8)); - output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp2 * fRec0[0])):(fSlow3 * (fTemp2 * fRec1[0]))) + (fSlow14 * fTemp8)); - output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp4 * fRec0[0])):(fSlow3 * (fTemp4 * fRec1[0]))) + (fSlow15 * fTemp8)); - output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp6 * fRec0[0])):(fSlow3 * (fTemp6 * fRec1[0]))) + (fSlow16 * fTemp8)); - // post processing - fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec1[1] = fRec1[0]; + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp2 = (fRec2[0] * fRec4[0]); + double fTemp3 = double(input1[i]); + double fTemp4 = double(input2[i]); + double fTemp5 = double(input3[i]); + double fTemp6 = ((iSlow1?(fSlow3 * (fTemp2 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow11 * (iSlow1?(fSlow3 * (fTemp2 * fTemp3)):(fSlow3 * (fTemp1 * fTemp3)))) + (fSlow12 * (iSlow1?(fSlow3 * (fTemp2 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4))))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp2 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp6))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp3)):(fSlow3 * (fRec0[0] * fTemp3))) + (fSlow14 * fTemp6))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow15 * fTemp6))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow16 * fTemp6))); fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1064,3 +1201,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa2.cpp b/source/HOAUGens/HOABeamDirac2Hoa2.cpp old mode 100644 new mode 100755 index 107d866351..b748a302e4 --- a/source/HOAUGens/HOABeamDirac2Hoa2.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa2.cpp @@ -1,31 +1,14 @@ -//---------------------------------------------------------- -// name: "HOABeamDirac2HOA2" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA2" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,88 +601,226 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - double fRec0[2]; - double fRec1[2]; - FAUSTFLOAT fslider0; - double fRec2[2]; - double fRec3[2]; - double fRec4[2]; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; + + private: + + FAUSTFLOAT fCheckbox0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamDirac2HOA2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); - m->declare("name", "HOABeamDirac2HOA2"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.0; - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -666,126 +830,126 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->addCheckButton("On", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "3", ""); - ui_interface->declare(&fentry0, "unit", "s"); - ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider0, "4", ""); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider0, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider2, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider1, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "4", ""); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider2, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = int(((1 - fSlow0) > 0)); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = int((fSlow0 > 0)); - double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow8 = double(fslider1); - double fSlow9 = cos(fSlow8); - double fSlow10 = double(fslider2); - double fSlow11 = sin(fSlow10); - double fSlow12 = (fSlow9 * fSlow11); - double fSlow13 = sin(fSlow8); - double fSlow14 = cos(fSlow10); - double fSlow15 = (fSlow9 * fSlow14); - double fSlow16 = ((3 * faustpower<2>(fSlow13)) + -1); - double fSlow17 = (1.118033988749895 * fSlow16); - double fSlow18 = faustpower<2>(fSlow9); - double fSlow19 = (2 * fSlow10); - double fSlow20 = (fSlow18 * sin(fSlow19)); - double fSlow21 = sin((2 * fSlow8)); - double fSlow22 = (fSlow21 * fSlow11); - double fSlow23 = (fSlow21 * fSlow14); - double fSlow24 = (fSlow18 * cos(fSlow19)); - double fSlow25 = (0.13783222385544802 * fSlow12); - double fSlow26 = (0.13783222385544802 * fSlow13); - double fSlow27 = (0.13783222385544802 * fSlow15); - double fSlow28 = (0.15410111101537496 * fSlow20); - double fSlow29 = (0.15410111101537496 * fSlow22); - double fSlow30 = (0.08897031792714714 * fSlow16); - double fSlow31 = (0.15410111101537496 * fSlow23); - double fSlow32 = (0.15410111101537496 * fSlow24); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - for (int i=0; i 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow8 = double(fVslider1); + double fSlow9 = sin(fSlow8); + double fSlow10 = double(fVslider2); + double fSlow11 = cos(fSlow10); + double fSlow12 = (fSlow9 * fSlow11); + double fSlow13 = sin(fSlow10); + double fSlow14 = cos(fSlow8); + double fSlow15 = (fSlow14 * fSlow11); + double fSlow16 = ((3.0 * mydsp_faustpower2_f(fSlow13)) + -1.0); + double fSlow17 = (1.1180339887498949 * fSlow16); + double fSlow18 = (2.0 * fSlow8); + double fSlow19 = mydsp_faustpower2_f(fSlow11); + double fSlow20 = (sin(fSlow18) * fSlow19); + double fSlow21 = sin((2.0 * fSlow10)); + double fSlow22 = (fSlow9 * fSlow21); + double fSlow23 = (fSlow14 * fSlow21); + double fSlow24 = (cos(fSlow18) * fSlow19); + double fSlow25 = (0.13783222385544802 * fSlow12); + double fSlow26 = (0.13783222385544802 * fSlow13); + double fSlow27 = (0.13783222385544802 * fSlow15); + double fSlow28 = (0.15410111101537496 * fSlow20); + double fSlow29 = (0.15410111101537496 * fSlow22); + double fSlow30 = (0.088970317927147144 * fSlow16); + double fSlow31 = (0.15410111101537496 * fSlow23); + double fSlow32 = (0.15410111101537496 * fSlow24); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); fRec2[0] = (fSlow7 + (0.999 * fRec2[1])); - double fTemp1 = (fTemp0 * fRec2[0]); - fRec3[0] = ((iSlow4)?0:min(fSlow5, (fRec3[1] + 1))); - fRec4[0] = ((iSlow6)?fSlow5:max((double)0, (fRec4[1] + -1))); - double fTemp2 = (double)input1[i]; - double fTemp3 = (fTemp2 * fRec2[0]); - double fTemp4 = (double)input2[i]; - double fTemp5 = (fTemp4 * fRec2[0]); - double fTemp6 = (double)input3[i]; - double fTemp7 = (fTemp6 * fRec2[0]); - double fTemp8 = (double)input6[i]; - double fTemp9 = (fTemp8 * fRec2[0]); - double fTemp10 = (double)input4[i]; - double fTemp11 = (fTemp10 * fRec2[0]); - double fTemp12 = (double)input5[i]; - double fTemp13 = (fTemp12 * fRec2[0]); - double fTemp14 = (double)input7[i]; - double fTemp15 = (fTemp14 * fRec2[0]); - double fTemp16 = (double)input8[i]; - double fTemp17 = (fTemp16 * fRec2[0]); - double fTemp18 = (((((iSlow1)?(fSlow3 * (fTemp1 * fRec3[0])):(fSlow3 * (fTemp1 * fRec4[0]))) + (1.7320508075688772 * (((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp3 * fRec3[0])):(fSlow3 * (fTemp3 * fRec4[0])))) + (fSlow13 * ((iSlow1)?(fSlow3 * (fTemp5 * fRec3[0])):(fSlow3 * (fTemp5 * fRec4[0]))))) + (fSlow15 * ((iSlow1)?(fSlow3 * (fTemp7 * fRec3[0])):(fSlow3 * (fTemp7 * fRec4[0]))))))) + (fSlow17 * ((iSlow1)?(fSlow3 * (fTemp9 * fRec3[0])):(fSlow3 * (fTemp9 * fRec4[0]))))) + (1.9364916731037085 * ((((fSlow20 * ((iSlow1)?(fSlow3 * (fTemp11 * fRec3[0])):(fSlow3 * (fTemp11 * fRec4[0])))) + (fSlow22 * ((iSlow1)?(fSlow3 * (fTemp13 * fRec3[0])):(fSlow3 * (fTemp13 * fRec4[0]))))) + (fSlow23 * ((iSlow1)?(fSlow3 * (fTemp15 * fRec3[0])):(fSlow3 * (fTemp15 * fRec4[0]))))) + (fSlow24 * ((iSlow1)?(fSlow3 * (fTemp17 * fRec3[0])):(fSlow3 * (fTemp17 * fRec4[0]))))))); - output0[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp0 * fRec0[0])):(fSlow3 * (fTemp0 * fRec1[0]))) + (0.07957747154594767 * fTemp18)); - output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp2 * fRec0[0])):(fSlow3 * (fTemp2 * fRec1[0]))) + (fSlow25 * fTemp18)); - output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp4 * fRec0[0])):(fSlow3 * (fTemp4 * fRec1[0]))) + (fSlow26 * fTemp18)); - output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp6 * fRec0[0])):(fSlow3 * (fTemp6 * fRec1[0]))) + (fSlow27 * fTemp18)); - output4[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp10 * fRec0[0])):(fSlow3 * (fTemp10 * fRec1[0]))) + (fSlow28 * fTemp18)); - output5[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp12 * fRec0[0])):(fSlow3 * (fTemp12 * fRec1[0]))) + (fSlow29 * fTemp18)); - output6[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp8 * fRec0[0])):(fSlow3 * (fTemp8 * fRec1[0]))) + (fSlow30 * fTemp18)); - output7[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp14 * fRec0[0])):(fSlow3 * (fTemp14 * fRec1[0]))) + (fSlow31 * fTemp18)); - output8[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp16 * fRec0[0])):(fSlow3 * (fTemp16 * fRec1[0]))) + (fSlow32 * fTemp18)); - // post processing - fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec1[1] = fRec1[0]; + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp2 = (fRec2[0] * fRec4[0]); + double fTemp3 = double(input1[i]); + double fTemp4 = double(input2[i]); + double fTemp5 = double(input3[i]); + double fTemp6 = double(input6[i]); + double fTemp7 = double(input4[i]); + double fTemp8 = double(input5[i]); + double fTemp9 = double(input7[i]); + double fTemp10 = double(input8[i]); + double fTemp11 = ((((iSlow1?(fSlow3 * (fTemp2 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow12 * (iSlow1?(fSlow3 * (fTemp2 * fTemp3)):(fSlow3 * (fTemp1 * fTemp3)))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp2 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4))))) + (fSlow15 * (iSlow1?(fSlow3 * (fTemp2 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp2 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (1.9364916731037085 * ((((fSlow20 * (iSlow1?(fSlow3 * (fTemp2 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7)))) + (fSlow22 * (iSlow1?(fSlow3 * (fTemp2 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp2 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp2 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp11))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp3)):(fSlow3 * (fRec0[0] * fTemp3))) + (fSlow25 * fTemp11))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow26 * fTemp11))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow27 * fTemp11))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow28 * fTemp11))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow29 * fTemp11))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow30 * fTemp11))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow31 * fTemp11))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow32 * fTemp11))); fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1117,3 +1281,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa3.cpp b/source/HOAUGens/HOABeamDirac2Hoa3.cpp old mode 100644 new mode 100755 index 639de2dbf9..2d259cabe1 --- a/source/HOAUGens/HOABeamDirac2Hoa3.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa3.cpp @@ -1,31 +1,14 @@ -//---------------------------------------------------------- -// name: "HOABeamDirac2HOA3" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA3" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,88 +601,286 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double cos(double dummy0); +double sin(double dummy0); +double pow(double dummy0, double dummy1); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - double fRec0[2]; - double fRec1[2]; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - double fRec2[2]; - double fRec3[2]; - double fRec4[2]; + + private: + + FAUSTFLOAT fCheckbox0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOABeamDirac2HOA3"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamDirac2HOA3"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.0; - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -666,186 +890,179 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->addCheckButton("On", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "3", ""); - ui_interface->declare(&fentry0, "unit", "s"); - ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider2, "4", ""); - ui_interface->declare(&fslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider2, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = int(((1 - fSlow0) > 0)); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = int((fSlow0 > 0)); - double fSlow7 = double(fslider0); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fslider1); - double fSlow10 = (3 * fSlow9); - double fSlow11 = sin(fSlow10); - double fSlow12 = (2.091650066335189 * (fSlow8 * fSlow11)); - double fSlow13 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider2)))); - double fSlow14 = sin(fSlow7); - double fSlow15 = (2 * fSlow9); - double fSlow16 = sin(fSlow15); - double fSlow17 = (5.123475382979799 * (fSlow14 * fSlow16)); - double fSlow18 = sin(fSlow9); - double fSlow19 = faustpower<2>(fSlow14); - double fSlow20 = (5 * fSlow19); - double fSlow21 = (fSlow20 + -1); - double fSlow22 = (1.620185174601965 * (fSlow18 * fSlow21)); - double fSlow23 = cos(fSlow9); - double fSlow24 = (1.620185174601965 * (fSlow23 * fSlow21)); - double fSlow25 = faustpower<2>(fSlow8); - double fSlow26 = cos(fSlow10); - double fSlow27 = (2.091650066335189 * (fSlow25 * fSlow26)); - double fSlow28 = (fSlow8 * fSlow18); - double fSlow29 = (fSlow8 * fSlow23); - double fSlow30 = ((3 * fSlow19) + -1); - double fSlow31 = (1.118033988749895 * fSlow30); - double fSlow32 = (fSlow25 * fSlow16); - double fSlow33 = sin((2 * fSlow7)); - double fSlow34 = (fSlow33 * fSlow18); - double fSlow35 = (fSlow33 * fSlow23); - double fSlow36 = cos(fSlow15); - double fSlow37 = (fSlow25 * fSlow36); - double fSlow38 = (fSlow20 + -3); - double fSlow39 = (1.3228756555322954 * fSlow38); - double fSlow40 = (5.123475382979799 * fSlow37); - double fSlow41 = (0.13783222385544802 * fSlow28); - double fSlow42 = (0.13783222385544802 * fSlow14); - double fSlow43 = (0.13783222385544802 * fSlow29); - double fSlow44 = (0.15410111101537496 * fSlow32); - double fSlow45 = (0.15410111101537496 * fSlow34); - double fSlow46 = (0.08897031792714714 * fSlow30); - double fSlow47 = (0.15410111101537496 * fSlow35); - double fSlow48 = (0.15410111101537496 * fSlow37); - double fSlow49 = faustpower<3>(fSlow8); - double fSlow50 = (0.16644822363786807 * (fSlow49 * fSlow11)); - double fSlow51 = (fSlow25 * fSlow14); - double fSlow52 = (0.4077132165054383 * (fSlow51 * fSlow16)); - double fSlow53 = (0.12893023963105413 * (fSlow28 * fSlow21)); - double fSlow54 = (0.10527109983694811 * (fSlow14 * fSlow38)); - double fSlow55 = (0.12893023963105413 * (fSlow29 * fSlow21)); - double fSlow56 = (0.4077132165054383 * (fSlow51 * fSlow36)); - double fSlow57 = (0.16644822363786807 * (fSlow49 * fSlow26)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; i 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = double(fVslider0); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fVslider1); + double fSlow10 = (3.0 * fSlow9); + double fSlow11 = sin(fSlow10); + double fSlow12 = (2.0916500663351889 * (fSlow11 * fSlow8)); + double fSlow13 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow14 = (2.0 * fSlow9); + double fSlow15 = sin(fSlow14); + double fSlow16 = sin(fSlow7); + double fSlow17 = (5.123475382979799 * (fSlow15 * fSlow16)); + double fSlow18 = sin(fSlow9); + double fSlow19 = mydsp_faustpower2_f(fSlow16); + double fSlow20 = (5.0 * fSlow19); + double fSlow21 = (fSlow20 + -1.0); + double fSlow22 = (fSlow18 * fSlow21); + double fSlow23 = (1.6201851746019651 * fSlow22); + double fSlow24 = cos(fSlow9); + double fSlow25 = (fSlow24 * fSlow21); + double fSlow26 = (1.6201851746019651 * fSlow25); + double fSlow27 = cos(fSlow10); + double fSlow28 = mydsp_faustpower2_f(fSlow8); + double fSlow29 = (2.0916500663351889 * (fSlow27 * fSlow28)); + double fSlow30 = (fSlow18 * fSlow8); + double fSlow31 = (fSlow24 * fSlow8); + double fSlow32 = ((3.0 * fSlow19) + -1.0); + double fSlow33 = (1.1180339887498949 * fSlow32); + double fSlow34 = (fSlow15 * fSlow28); + double fSlow35 = sin((2.0 * fSlow7)); + double fSlow36 = (fSlow18 * fSlow35); + double fSlow37 = (fSlow24 * fSlow35); + double fSlow38 = (cos(fSlow14) * fSlow28); + double fSlow39 = (fSlow20 + -3.0); + double fSlow40 = (1.3228756555322954 * fSlow39); + double fSlow41 = (5.123475382979799 * fSlow38); + double fSlow42 = (0.13783222385544802 * fSlow30); + double fSlow43 = (0.13783222385544802 * fSlow16); + double fSlow44 = (0.13783222385544802 * fSlow31); + double fSlow45 = (0.15410111101537496 * fSlow34); + double fSlow46 = (0.15410111101537496 * fSlow36); + double fSlow47 = (0.088970317927147144 * fSlow32); + double fSlow48 = (0.15410111101537496 * fSlow37); + double fSlow49 = (0.15410111101537496 * fSlow38); + double fSlow50 = mydsp_faustpower3_f(fSlow8); + double fSlow51 = (0.16644822363786807 * (fSlow11 * fSlow50)); + double fSlow52 = (0.40771321650543829 * (fSlow34 * fSlow16)); + double fSlow53 = (0.12893023963105413 * (fSlow22 * fSlow8)); + double fSlow54 = (0.10527109983694811 * (fSlow39 * fSlow16)); + double fSlow55 = (0.12893023963105413 * (fSlow25 * fSlow8)); + double fSlow56 = (0.40771321650543829 * (fSlow38 * fSlow16)); + double fSlow57 = (0.16644822363786807 * (fSlow27 * fSlow50)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); fRec2[0] = (fSlow13 + (0.999 * fRec2[1])); - double fTemp2 = (fTemp1 * fRec2[0]); - fRec3[0] = ((iSlow4)?0:min(fSlow5, (fRec3[1] + 1))); - fRec4[0] = ((iSlow6)?fSlow5:max((double)0, (fRec4[1] + -1))); - double fTemp3 = (double)input10[i]; - double fTemp4 = (fTemp3 * fRec2[0]); - double fTemp5 = (double)input11[i]; - double fTemp6 = (fTemp5 * fRec2[0]); - double fTemp7 = (double)input13[i]; - double fTemp8 = (fTemp7 * fRec2[0]); - double fTemp9 = (double)input15[i]; - double fTemp10 = (fTemp9 * fRec2[0]); - double fTemp11 = (fTemp0 * fRec2[0]); - double fTemp12 = (double)input1[i]; - double fTemp13 = (fTemp12 * fRec2[0]); - double fTemp14 = (double)input2[i]; - double fTemp15 = (fTemp14 * fRec2[0]); - double fTemp16 = (double)input3[i]; - double fTemp17 = (fTemp16 * fRec2[0]); - double fTemp18 = (double)input6[i]; - double fTemp19 = (fTemp18 * fRec2[0]); - double fTemp20 = (double)input4[i]; - double fTemp21 = (fTemp20 * fRec2[0]); - double fTemp22 = (double)input5[i]; - double fTemp23 = (fTemp22 * fRec2[0]); - double fTemp24 = (double)input7[i]; - double fTemp25 = (fTemp24 * fRec2[0]); - double fTemp26 = (double)input8[i]; - double fTemp27 = (fTemp26 * fRec2[0]); - double fTemp28 = (double)input12[i]; - double fTemp29 = (fTemp28 * fRec2[0]); - double fTemp30 = (double)input14[i]; - double fTemp31 = (fTemp30 * fRec2[0]); - double fTemp32 = ((fSlow8 * ((((fSlow8 * ((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp2 * fRec3[0])):(fSlow3 * (fTemp2 * fRec4[0])))) + (fSlow17 * ((iSlow1)?(fSlow3 * (fTemp4 * fRec3[0])):(fSlow3 * (fTemp4 * fRec4[0])))))) + (fSlow22 * ((iSlow1)?(fSlow3 * (fTemp6 * fRec3[0])):(fSlow3 * (fTemp6 * fRec4[0]))))) + (fSlow24 * ((iSlow1)?(fSlow3 * (fTemp8 * fRec3[0])):(fSlow3 * (fTemp8 * fRec4[0]))))) + (fSlow27 * ((iSlow1)?(fSlow3 * (fTemp10 * fRec3[0])):(fSlow3 * (fTemp10 * fRec4[0])))))) + ((((((iSlow1)?(fSlow3 * (fTemp11 * fRec3[0])):(fSlow3 * (fTemp11 * fRec4[0]))) + (1.7320508075688772 * (((fSlow28 * ((iSlow1)?(fSlow3 * (fTemp13 * fRec3[0])):(fSlow3 * (fTemp13 * fRec4[0])))) + (fSlow14 * ((iSlow1)?(fSlow3 * (fTemp15 * fRec3[0])):(fSlow3 * (fTemp15 * fRec4[0]))))) + (fSlow29 * ((iSlow1)?(fSlow3 * (fTemp17 * fRec3[0])):(fSlow3 * (fTemp17 * fRec4[0]))))))) + (fSlow31 * ((iSlow1)?(fSlow3 * (fTemp19 * fRec3[0])):(fSlow3 * (fTemp19 * fRec4[0]))))) + (1.9364916731037085 * ((((fSlow32 * ((iSlow1)?(fSlow3 * (fTemp21 * fRec3[0])):(fSlow3 * (fTemp21 * fRec4[0])))) + (fSlow34 * ((iSlow1)?(fSlow3 * (fTemp23 * fRec3[0])):(fSlow3 * (fTemp23 * fRec4[0]))))) + (fSlow35 * ((iSlow1)?(fSlow3 * (fTemp25 * fRec3[0])):(fSlow3 * (fTemp25 * fRec4[0]))))) + (fSlow37 * ((iSlow1)?(fSlow3 * (fTemp27 * fRec3[0])):(fSlow3 * (fTemp27 * fRec4[0]))))))) + (fSlow14 * ((fSlow39 * ((iSlow1)?(fSlow3 * (fTemp29 * fRec3[0])):(fSlow3 * (fTemp29 * fRec4[0])))) + (fSlow40 * ((iSlow1)?(fSlow3 * (fTemp31 * fRec3[0])):(fSlow3 * (fTemp31 * fRec4[0])))))))); - output0[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp0 * fRec0[0])):(fSlow3 * (fTemp0 * fRec1[0]))) + (0.07957747154594767 * fTemp32)); - output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp12 * fRec0[0])):(fSlow3 * (fTemp12 * fRec1[0]))) + (fSlow41 * fTemp32)); - output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp14 * fRec0[0])):(fSlow3 * (fTemp14 * fRec1[0]))) + (fSlow42 * fTemp32)); - output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp16 * fRec0[0])):(fSlow3 * (fTemp16 * fRec1[0]))) + (fSlow43 * fTemp32)); - output4[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp20 * fRec0[0])):(fSlow3 * (fTemp20 * fRec1[0]))) + (fSlow44 * fTemp32)); - output5[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp22 * fRec0[0])):(fSlow3 * (fTemp22 * fRec1[0]))) + (fSlow45 * fTemp32)); - output6[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp18 * fRec0[0])):(fSlow3 * (fTemp18 * fRec1[0]))) + (fSlow46 * fTemp32)); - output7[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp24 * fRec0[0])):(fSlow3 * (fTemp24 * fRec1[0]))) + (fSlow47 * fTemp32)); - output8[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp26 * fRec0[0])):(fSlow3 * (fTemp26 * fRec1[0]))) + (fSlow48 * fTemp32)); - output9[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp1 * fRec0[0])):(fSlow3 * (fTemp1 * fRec1[0]))) + (fSlow50 * fTemp32)); - output10[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp3 * fRec0[0])):(fSlow3 * (fTemp3 * fRec1[0]))) + (fSlow52 * fTemp32)); - output11[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp5 * fRec0[0])):(fSlow3 * (fTemp5 * fRec1[0]))) + (fSlow53 * fTemp32)); - output12[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp28 * fRec0[0])):(fSlow3 * (fTemp28 * fRec1[0]))) + (fSlow54 * fTemp32)); - output13[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp7 * fRec0[0])):(fSlow3 * (fTemp7 * fRec1[0]))) + (fSlow55 * fTemp32)); - output14[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp30 * fRec0[0])):(fSlow3 * (fTemp30 * fRec1[0]))) + (fSlow56 * fTemp32)); - output15[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp9 * fRec0[0])):(fSlow3 * (fTemp9 * fRec1[0]))) + (fSlow57 * fTemp32)); - // post processing - fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec1[1] = fRec1[0]; + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input9[i]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input10[i]); + double fTemp5 = double(input11[i]); + double fTemp6 = double(input13[i]); + double fTemp7 = double(input15[i]); + double fTemp8 = double(input1[i]); + double fTemp9 = double(input2[i]); + double fTemp10 = double(input3[i]); + double fTemp11 = double(input6[i]); + double fTemp12 = double(input4[i]); + double fTemp13 = double(input5[i]); + double fTemp14 = double(input7[i]); + double fTemp15 = double(input8[i]); + double fTemp16 = double(input12[i]); + double fTemp17 = double(input14[i]); + double fTemp18 = ((fSlow8 * ((((fSlow8 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow29 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8)))) + (fSlow16 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow31 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))))) + (fSlow33 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (1.9364916731037085 * ((((fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12)))) + (fSlow36 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow38 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))))) + (fSlow16 * ((fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))) + (fSlow41 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17)))))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp18))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow42 * fTemp18))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow43 * fTemp18))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow44 * fTemp18))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow45 * fTemp18))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow46 * fTemp18))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow47 * fTemp18))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow48 * fTemp18))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow49 * fTemp18))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow51 * fTemp18))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow52 * fTemp18))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow53 * fTemp18))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow54 * fTemp18))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow55 * fTemp18))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow56 * fTemp18))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow57 * fTemp18))); fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1177,3 +1394,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa4.cpp b/source/HOAUGens/HOABeamDirac2Hoa4.cpp old mode 100644 new mode 100755 index 83c79bb220..568f825017 --- a/source/HOAUGens/HOABeamDirac2Hoa4.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa4.cpp @@ -1,31 +1,14 @@ -//---------------------------------------------------------- -// name: "HOABeamDirac2HOA4" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA4" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,88 +601,362 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double cos(double dummy0); +double sin(double dummy0); +double pow(double dummy0, double dummy1); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} +double mydsp_faustpower4_f(double value) { + return (((value * value) * value) * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - double fRec0[2]; - double fRec1[2]; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - double fRec2[2]; - double fRec3[2]; - double fRec4[2]; + + private: + + FAUSTFLOAT fCheckbox0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOABeamDirac2HOA4"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamDirac2HOA4"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 25; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.0; - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -666,259 +966,245 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->addCheckButton("On", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "3", ""); - ui_interface->declare(&fentry0, "unit", "s"); - ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider2, "4", ""); - ui_interface->declare(&fslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider2, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = int(((1 - fSlow0) > 0)); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = int((fSlow0 > 0)); - double fSlow7 = double(fslider0); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fslider1); - double fSlow10 = (3 * fSlow9); - double fSlow11 = sin(fSlow10); - double fSlow12 = (2.091650066335189 * (fSlow8 * fSlow11)); - double fSlow13 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider2)))); - double fSlow14 = sin(fSlow7); - double fSlow15 = (2 * fSlow9); - double fSlow16 = sin(fSlow15); - double fSlow17 = (5.123475382979799 * (fSlow14 * fSlow16)); - double fSlow18 = sin(fSlow9); - double fSlow19 = faustpower<2>(fSlow14); - double fSlow20 = (5 * fSlow19); - double fSlow21 = (fSlow20 + -1); - double fSlow22 = (1.620185174601965 * (fSlow18 * fSlow21)); - double fSlow23 = cos(fSlow9); - double fSlow24 = (1.620185174601965 * (fSlow23 * fSlow21)); - double fSlow25 = faustpower<2>(fSlow8); - double fSlow26 = cos(fSlow10); - double fSlow27 = (2.091650066335189 * (fSlow25 * fSlow26)); - double fSlow28 = faustpower<3>(fSlow8); - double fSlow29 = (4 * fSlow9); - double fSlow30 = sin(fSlow29); - double fSlow31 = (2.218529918662356 * (fSlow28 * fSlow30)); - double fSlow32 = (7 * fSlow19); - double fSlow33 = (fSlow32 + -1); - double fSlow34 = (1.6770509831248424 * ((fSlow8 * fSlow16) * fSlow33)); - double fSlow35 = cos(fSlow15); - double fSlow36 = (1.6770509831248424 * ((fSlow8 * fSlow35) * fSlow33)); - double fSlow37 = cos(fSlow29); - double fSlow38 = (2.218529918662356 * (fSlow28 * fSlow37)); - double fSlow39 = (fSlow20 + -3); - double fSlow40 = (1.3228756555322954 * fSlow39); - double fSlow41 = (fSlow25 * fSlow35); - double fSlow42 = (5.123475382979799 * fSlow41); - double fSlow43 = (fSlow28 * fSlow11); - double fSlow44 = (6.274950199005566 * fSlow43); - double fSlow45 = (fSlow28 * fSlow26); - double fSlow46 = (6.274950199005566 * fSlow45); - double fSlow47 = sin((2 * fSlow7)); - double fSlow48 = (fSlow32 + -3); - double fSlow49 = (1.1858541225631423 * (fSlow47 * fSlow48)); - double fSlow50 = (fSlow8 * fSlow18); - double fSlow51 = (fSlow8 * fSlow23); - double fSlow52 = ((3 * fSlow19) + -1); - double fSlow53 = (1.118033988749895 * fSlow52); - double fSlow54 = (fSlow25 * fSlow16); - double fSlow55 = (fSlow47 * fSlow18); - double fSlow56 = (fSlow47 * fSlow23); - double fSlow57 = ((fSlow19 * ((35 * fSlow19) + -30)) + 3); - double fSlow58 = (0.375 * fSlow57); - double fSlow59 = (0.13783222385544802 * fSlow50); - double fSlow60 = (0.13783222385544802 * fSlow14); - double fSlow61 = (0.13783222385544802 * fSlow51); - double fSlow62 = (0.15410111101537496 * fSlow54); - double fSlow63 = (0.15410111101537496 * fSlow55); - double fSlow64 = (0.08897031792714714 * fSlow52); - double fSlow65 = (0.15410111101537496 * fSlow56); - double fSlow66 = (0.15410111101537496 * fSlow41); - double fSlow67 = (0.16644822363786807 * fSlow43); - double fSlow68 = (fSlow25 * fSlow14); - double fSlow69 = (0.4077132165054383 * (fSlow68 * fSlow16)); - double fSlow70 = (0.12893023963105413 * (fSlow50 * fSlow21)); - double fSlow71 = (0.10527109983694811 * (fSlow14 * fSlow39)); - double fSlow72 = (0.12893023963105413 * (fSlow51 * fSlow21)); - double fSlow73 = (0.4077132165054383 * (fSlow68 * fSlow35)); - double fSlow74 = (0.16644822363786807 * fSlow45); - double fSlow75 = faustpower<4>(fSlow8); - double fSlow76 = (0.17654500147618726 * (fSlow75 * fSlow30)); - double fSlow77 = (fSlow28 * fSlow14); - double fSlow78 = (0.4993446709136041 * (fSlow77 * fSlow11)); - double fSlow79 = (0.1334554768907207 * (fSlow54 * fSlow33)); - double fSlow80 = (0.0943672726959132 * (fSlow55 * fSlow48)); - double fSlow81 = (0.029841551829730376 * fSlow57); - double fSlow82 = (0.0943672726959132 * (fSlow56 * fSlow48)); - double fSlow83 = (0.1334554768907207 * (fSlow41 * fSlow33)); - double fSlow84 = (0.4993446709136041 * (fSlow77 * fSlow26)); - double fSlow85 = (0.17654500147618726 * (fSlow75 * fSlow37)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; i 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = double(fVslider0); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fVslider1); + double fSlow10 = (3.0 * fSlow9); + double fSlow11 = sin(fSlow10); + double fSlow12 = (2.0916500663351889 * (fSlow11 * fSlow8)); + double fSlow13 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow14 = (2.0 * fSlow9); + double fSlow15 = sin(fSlow14); + double fSlow16 = sin(fSlow7); + double fSlow17 = (5.123475382979799 * (fSlow15 * fSlow16)); + double fSlow18 = sin(fSlow9); + double fSlow19 = mydsp_faustpower2_f(fSlow16); + double fSlow20 = (5.0 * fSlow19); + double fSlow21 = (fSlow20 + -1.0); + double fSlow22 = (fSlow18 * fSlow21); + double fSlow23 = (1.6201851746019651 * fSlow22); + double fSlow24 = cos(fSlow9); + double fSlow25 = (fSlow24 * fSlow21); + double fSlow26 = (1.6201851746019651 * fSlow25); + double fSlow27 = cos(fSlow10); + double fSlow28 = mydsp_faustpower2_f(fSlow8); + double fSlow29 = (2.0916500663351889 * (fSlow27 * fSlow28)); + double fSlow30 = (4.0 * fSlow9); + double fSlow31 = sin(fSlow30); + double fSlow32 = mydsp_faustpower3_f(fSlow8); + double fSlow33 = (2.2185299186623562 * (fSlow31 * fSlow32)); + double fSlow34 = (7.0 * fSlow19); + double fSlow35 = (fSlow34 + -1.0); + double fSlow36 = (fSlow15 * fSlow35); + double fSlow37 = (1.6770509831248424 * (fSlow36 * fSlow8)); + double fSlow38 = cos(fSlow14); + double fSlow39 = (fSlow38 * fSlow35); + double fSlow40 = (1.6770509831248424 * (fSlow39 * fSlow8)); + double fSlow41 = cos(fSlow30); + double fSlow42 = (2.2185299186623562 * (fSlow41 * fSlow32)); + double fSlow43 = (fSlow20 + -3.0); + double fSlow44 = (1.3228756555322954 * fSlow43); + double fSlow45 = (fSlow38 * fSlow28); + double fSlow46 = (5.123475382979799 * fSlow45); + double fSlow47 = (fSlow11 * fSlow32); + double fSlow48 = (6.2749501990055663 * fSlow47); + double fSlow49 = (fSlow27 * fSlow32); + double fSlow50 = (6.2749501990055663 * fSlow49); + double fSlow51 = (fSlow34 + -3.0); + double fSlow52 = sin((2.0 * fSlow7)); + double fSlow53 = (1.1858541225631423 * (fSlow51 * fSlow52)); + double fSlow54 = (fSlow18 * fSlow8); + double fSlow55 = (fSlow24 * fSlow8); + double fSlow56 = ((3.0 * fSlow19) + -1.0); + double fSlow57 = (1.1180339887498949 * fSlow56); + double fSlow58 = (fSlow15 * fSlow28); + double fSlow59 = (fSlow18 * fSlow52); + double fSlow60 = (fSlow24 * fSlow52); + double fSlow61 = ((((35.0 * fSlow19) + -30.0) * fSlow19) + 3.0); + double fSlow62 = (0.375 * fSlow61); + double fSlow63 = (0.13783222385544802 * fSlow54); + double fSlow64 = (0.13783222385544802 * fSlow16); + double fSlow65 = (0.13783222385544802 * fSlow55); + double fSlow66 = (0.15410111101537496 * fSlow58); + double fSlow67 = (0.15410111101537496 * fSlow59); + double fSlow68 = (0.088970317927147144 * fSlow56); + double fSlow69 = (0.15410111101537496 * fSlow60); + double fSlow70 = (0.15410111101537496 * fSlow45); + double fSlow71 = (0.16644822363786807 * fSlow47); + double fSlow72 = (0.40771321650543829 * (fSlow58 * fSlow16)); + double fSlow73 = (0.12893023963105413 * (fSlow22 * fSlow8)); + double fSlow74 = (0.10527109983694811 * (fSlow43 * fSlow16)); + double fSlow75 = (0.12893023963105413 * (fSlow25 * fSlow8)); + double fSlow76 = (0.40771321650543829 * (fSlow45 * fSlow16)); + double fSlow77 = (0.16644822363786807 * fSlow49); + double fSlow78 = mydsp_faustpower4_f(fSlow8); + double fSlow79 = (0.17654500147618726 * (fSlow31 * fSlow78)); + double fSlow80 = (0.49934467091360413 * (fSlow47 * fSlow16)); + double fSlow81 = (0.13345547689072071 * (fSlow36 * fSlow28)); + double fSlow82 = (0.094367272695913204 * ((fSlow18 * fSlow51) * fSlow52)); + double fSlow83 = (0.029841551829730376 * fSlow61); + double fSlow84 = (0.094367272695913204 * ((fSlow24 * fSlow51) * fSlow52)); + double fSlow85 = (0.13345547689072071 * (fSlow39 * fSlow28)); + double fSlow86 = (0.49934467091360413 * (fSlow49 * fSlow16)); + double fSlow87 = (0.17654500147618726 * (fSlow41 * fSlow78)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); fRec2[0] = (fSlow13 + (0.999 * fRec2[1])); - double fTemp2 = (fTemp1 * fRec2[0]); - fRec3[0] = ((iSlow4)?0:min(fSlow5, (fRec3[1] + 1))); - fRec4[0] = ((iSlow6)?fSlow5:max((double)0, (fRec4[1] + -1))); - double fTemp3 = (double)input10[i]; - double fTemp4 = (fTemp3 * fRec2[0]); - double fTemp5 = (double)input11[i]; - double fTemp6 = (fTemp5 * fRec2[0]); - double fTemp7 = (double)input13[i]; - double fTemp8 = (fTemp7 * fRec2[0]); - double fTemp9 = (double)input15[i]; - double fTemp10 = (fTemp9 * fRec2[0]); - double fTemp11 = (double)input16[i]; - double fTemp12 = (fTemp11 * fRec2[0]); - double fTemp13 = (double)input18[i]; - double fTemp14 = (fTemp13 * fRec2[0]); - double fTemp15 = (double)input22[i]; - double fTemp16 = (fTemp15 * fRec2[0]); - double fTemp17 = (double)input24[i]; - double fTemp18 = (fTemp17 * fRec2[0]); - double fTemp19 = (double)input12[i]; - double fTemp20 = (fTemp19 * fRec2[0]); - double fTemp21 = (double)input14[i]; - double fTemp22 = (fTemp21 * fRec2[0]); - double fTemp23 = (double)input17[i]; - double fTemp24 = (fTemp23 * fRec2[0]); - double fTemp25 = (double)input23[i]; - double fTemp26 = (fTemp25 * fRec2[0]); - double fTemp27 = (double)input19[i]; - double fTemp28 = (fTemp27 * fRec2[0]); - double fTemp29 = (double)input21[i]; - double fTemp30 = (fTemp29 * fRec2[0]); - double fTemp31 = (fTemp0 * fRec2[0]); - double fTemp32 = (double)input1[i]; - double fTemp33 = (fTemp32 * fRec2[0]); - double fTemp34 = (double)input2[i]; - double fTemp35 = (fTemp34 * fRec2[0]); - double fTemp36 = (double)input3[i]; - double fTemp37 = (fTemp36 * fRec2[0]); - double fTemp38 = (double)input6[i]; - double fTemp39 = (fTemp38 * fRec2[0]); - double fTemp40 = (double)input4[i]; - double fTemp41 = (fTemp40 * fRec2[0]); - double fTemp42 = (double)input5[i]; - double fTemp43 = (fTemp42 * fRec2[0]); - double fTemp44 = (double)input7[i]; - double fTemp45 = (fTemp44 * fRec2[0]); - double fTemp46 = (double)input8[i]; - double fTemp47 = (fTemp46 * fRec2[0]); - double fTemp48 = (double)input20[i]; - double fTemp49 = (fTemp48 * fRec2[0]); - double fTemp50 = ((fSlow8 * ((((((((fSlow8 * ((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp2 * fRec3[0])):(fSlow3 * (fTemp2 * fRec4[0])))) + (fSlow17 * ((iSlow1)?(fSlow3 * (fTemp4 * fRec3[0])):(fSlow3 * (fTemp4 * fRec4[0])))))) + (fSlow22 * ((iSlow1)?(fSlow3 * (fTemp6 * fRec3[0])):(fSlow3 * (fTemp6 * fRec4[0]))))) + (fSlow24 * ((iSlow1)?(fSlow3 * (fTemp8 * fRec3[0])):(fSlow3 * (fTemp8 * fRec4[0]))))) + (fSlow27 * ((iSlow1)?(fSlow3 * (fTemp10 * fRec3[0])):(fSlow3 * (fTemp10 * fRec4[0]))))) + (fSlow31 * ((iSlow1)?(fSlow3 * (fTemp12 * fRec3[0])):(fSlow3 * (fTemp12 * fRec4[0]))))) + (fSlow34 * ((iSlow1)?(fSlow3 * (fTemp14 * fRec3[0])):(fSlow3 * (fTemp14 * fRec4[0]))))) + (fSlow36 * ((iSlow1)?(fSlow3 * (fTemp16 * fRec3[0])):(fSlow3 * (fTemp16 * fRec4[0]))))) + (fSlow38 * ((iSlow1)?(fSlow3 * (fTemp18 * fRec3[0])):(fSlow3 * (fTemp18 * fRec4[0])))))) + ((fSlow14 * ((((fSlow40 * ((iSlow1)?(fSlow3 * (fTemp20 * fRec3[0])):(fSlow3 * (fTemp20 * fRec4[0])))) + (fSlow42 * ((iSlow1)?(fSlow3 * (fTemp22 * fRec3[0])):(fSlow3 * (fTemp22 * fRec4[0]))))) + (fSlow44 * ((iSlow1)?(fSlow3 * (fTemp24 * fRec3[0])):(fSlow3 * (fTemp24 * fRec4[0]))))) + (fSlow46 * ((iSlow1)?(fSlow3 * (fTemp26 * fRec3[0])):(fSlow3 * (fTemp26 * fRec4[0])))))) + ((fSlow49 * ((fSlow18 * ((iSlow1)?(fSlow3 * (fTemp28 * fRec3[0])):(fSlow3 * (fTemp28 * fRec4[0])))) + (fSlow23 * ((iSlow1)?(fSlow3 * (fTemp30 * fRec3[0])):(fSlow3 * (fTemp30 * fRec4[0])))))) + ((((((iSlow1)?(fSlow3 * (fTemp31 * fRec3[0])):(fSlow3 * (fTemp31 * fRec4[0]))) + (1.7320508075688772 * (((fSlow50 * ((iSlow1)?(fSlow3 * (fTemp33 * fRec3[0])):(fSlow3 * (fTemp33 * fRec4[0])))) + (fSlow14 * ((iSlow1)?(fSlow3 * (fTemp35 * fRec3[0])):(fSlow3 * (fTemp35 * fRec4[0]))))) + (fSlow51 * ((iSlow1)?(fSlow3 * (fTemp37 * fRec3[0])):(fSlow3 * (fTemp37 * fRec4[0]))))))) + (fSlow53 * ((iSlow1)?(fSlow3 * (fTemp39 * fRec3[0])):(fSlow3 * (fTemp39 * fRec4[0]))))) + (1.9364916731037085 * ((((fSlow54 * ((iSlow1)?(fSlow3 * (fTemp41 * fRec3[0])):(fSlow3 * (fTemp41 * fRec4[0])))) + (fSlow55 * ((iSlow1)?(fSlow3 * (fTemp43 * fRec3[0])):(fSlow3 * (fTemp43 * fRec4[0]))))) + (fSlow56 * ((iSlow1)?(fSlow3 * (fTemp45 * fRec3[0])):(fSlow3 * (fTemp45 * fRec4[0]))))) + (fSlow41 * ((iSlow1)?(fSlow3 * (fTemp47 * fRec3[0])):(fSlow3 * (fTemp47 * fRec4[0]))))))) + (fSlow58 * ((iSlow1)?(fSlow3 * (fTemp49 * fRec3[0])):(fSlow3 * (fTemp49 * fRec4[0])))))))); - output0[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp0 * fRec0[0])):(fSlow3 * (fTemp0 * fRec1[0]))) + (0.07957747154594767 * fTemp50)); - output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp32 * fRec0[0])):(fSlow3 * (fTemp32 * fRec1[0]))) + (fSlow59 * fTemp50)); - output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp34 * fRec0[0])):(fSlow3 * (fTemp34 * fRec1[0]))) + (fSlow60 * fTemp50)); - output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp36 * fRec0[0])):(fSlow3 * (fTemp36 * fRec1[0]))) + (fSlow61 * fTemp50)); - output4[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp40 * fRec0[0])):(fSlow3 * (fTemp40 * fRec1[0]))) + (fSlow62 * fTemp50)); - output5[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp42 * fRec0[0])):(fSlow3 * (fTemp42 * fRec1[0]))) + (fSlow63 * fTemp50)); - output6[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp38 * fRec0[0])):(fSlow3 * (fTemp38 * fRec1[0]))) + (fSlow64 * fTemp50)); - output7[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp44 * fRec0[0])):(fSlow3 * (fTemp44 * fRec1[0]))) + (fSlow65 * fTemp50)); - output8[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp46 * fRec0[0])):(fSlow3 * (fTemp46 * fRec1[0]))) + (fSlow66 * fTemp50)); - output9[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp1 * fRec0[0])):(fSlow3 * (fTemp1 * fRec1[0]))) + (fSlow67 * fTemp50)); - output10[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp3 * fRec0[0])):(fSlow3 * (fTemp3 * fRec1[0]))) + (fSlow69 * fTemp50)); - output11[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp5 * fRec0[0])):(fSlow3 * (fTemp5 * fRec1[0]))) + (fSlow70 * fTemp50)); - output12[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp19 * fRec0[0])):(fSlow3 * (fTemp19 * fRec1[0]))) + (fSlow71 * fTemp50)); - output13[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp7 * fRec0[0])):(fSlow3 * (fTemp7 * fRec1[0]))) + (fSlow72 * fTemp50)); - output14[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp21 * fRec0[0])):(fSlow3 * (fTemp21 * fRec1[0]))) + (fSlow73 * fTemp50)); - output15[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp9 * fRec0[0])):(fSlow3 * (fTemp9 * fRec1[0]))) + (fSlow74 * fTemp50)); - output16[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp11 * fRec0[0])):(fSlow3 * (fTemp11 * fRec1[0]))) + (fSlow76 * fTemp50)); - output17[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp23 * fRec0[0])):(fSlow3 * (fTemp23 * fRec1[0]))) + (fSlow78 * fTemp50)); - output18[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp13 * fRec0[0])):(fSlow3 * (fTemp13 * fRec1[0]))) + (fSlow79 * fTemp50)); - output19[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp27 * fRec0[0])):(fSlow3 * (fTemp27 * fRec1[0]))) + (fSlow80 * fTemp50)); - output20[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp48 * fRec0[0])):(fSlow3 * (fTemp48 * fRec1[0]))) + (fSlow81 * fTemp50)); - output21[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp29 * fRec0[0])):(fSlow3 * (fTemp29 * fRec1[0]))) + (fSlow82 * fTemp50)); - output22[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp15 * fRec0[0])):(fSlow3 * (fTemp15 * fRec1[0]))) + (fSlow83 * fTemp50)); - output23[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp25 * fRec0[0])):(fSlow3 * (fTemp25 * fRec1[0]))) + (fSlow84 * fTemp50)); - output24[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp17 * fRec0[0])):(fSlow3 * (fTemp17 * fRec1[0]))) + (fSlow85 * fTemp50)); - // post processing - fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec1[1] = fRec1[0]; + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input9[i]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input10[i]); + double fTemp5 = double(input11[i]); + double fTemp6 = double(input13[i]); + double fTemp7 = double(input15[i]); + double fTemp8 = double(input16[i]); + double fTemp9 = double(input18[i]); + double fTemp10 = double(input22[i]); + double fTemp11 = double(input24[i]); + double fTemp12 = double(input12[i]); + double fTemp13 = double(input14[i]); + double fTemp14 = double(input17[i]); + double fTemp15 = double(input23[i]); + double fTemp16 = double(input19[i]); + double fTemp17 = double(input21[i]); + double fTemp18 = double(input1[i]); + double fTemp19 = double(input2[i]); + double fTemp20 = double(input3[i]); + double fTemp21 = double(input6[i]); + double fTemp22 = double(input4[i]); + double fTemp23 = double(input5[i]); + double fTemp24 = double(input7[i]); + double fTemp25 = double(input8[i]); + double fTemp26 = double(input20[i]); + double fTemp27 = ((fSlow8 * ((((((((fSlow8 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow29 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow33 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow42 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11)))))) + ((fSlow16 * ((((fSlow44 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12)))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow48 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow50 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))))) + ((fSlow53 * ((fSlow18 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow54 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18)))) + (fSlow16 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow55 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))))) + (fSlow57 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (1.9364916731037085 * ((((fSlow58 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow60 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow45 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26)))))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp27))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow63 * fTemp27))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow64 * fTemp27))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow65 * fTemp27))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow66 * fTemp27))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow67 * fTemp27))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow68 * fTemp27))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow69 * fTemp27))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow70 * fTemp27))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow71 * fTemp27))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow72 * fTemp27))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow73 * fTemp27))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow74 * fTemp27))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow75 * fTemp27))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow76 * fTemp27))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow77 * fTemp27))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow79 * fTemp27))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow80 * fTemp27))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow81 * fTemp27))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow82 * fTemp27))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow83 * fTemp27))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow84 * fTemp27))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow85 * fTemp27))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow86 * fTemp27))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow87 * fTemp27))); fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1250,3 +1536,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa5.cpp b/source/HOAUGens/HOABeamDirac2Hoa5.cpp old mode 100644 new mode 100755 index 8ef247234b..7a73a1e819 --- a/source/HOAUGens/HOABeamDirac2Hoa5.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa5.cpp @@ -1,31 +1,14 @@ -//---------------------------------------------------------- -// name: "HOABeamDirac2HOA5" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA5" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,88 +601,454 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double cos(double dummy0); +double sin(double dummy0); +double pow(double dummy0, double dummy1); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} +double mydsp_faustpower4_f(double value) { + return (((value * value) * value) * value); + +} +double mydsp_faustpower5_f(double value) { + return ((((value * value) * value) * value) * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - double fConst0; - double fConst1; - FAUSTFLOAT fentry0; - double fRec0[2]; - double fRec1[2]; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - double fRec2[2]; - double fRec3[2]; - double fRec4[2]; + + private: + + FAUSTFLOAT fCheckbox0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("name", "HOABeamDirac2HOA5"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamDirac2HOA5"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 36; } - virtual int getNumOutputs() { return 36; } + virtual int getNumInputs() { + return 36; + + } + virtual int getNumOutputs() { + return 36; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.0; - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -666,348 +1058,325 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fcheckbox0); + ui_interface->addCheckButton("On", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "3", ""); - ui_interface->declare(&fentry0, "unit", "s"); - ui_interface->addNumEntry("Crossfade", &fentry0, 1.0, 0.1, 1e+01, 0.1); - ui_interface->declare(&fslider2, "4", ""); - ui_interface->declare(&fslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fslider2, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = int(((1 - fSlow0) > 0)); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = int((fSlow0 > 0)); - double fSlow7 = double(fslider0); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fslider1); - double fSlow10 = (3 * fSlow9); - double fSlow11 = sin(fSlow10); - double fSlow12 = (2.091650066335189 * (fSlow8 * fSlow11)); - double fSlow13 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider2)))); - double fSlow14 = sin(fSlow7); - double fSlow15 = (2 * fSlow9); - double fSlow16 = sin(fSlow15); - double fSlow17 = (5.123475382979799 * (fSlow14 * fSlow16)); - double fSlow18 = sin(fSlow9); - double fSlow19 = faustpower<2>(fSlow14); - double fSlow20 = (5 * fSlow19); - double fSlow21 = (fSlow20 + -1); - double fSlow22 = (1.620185174601965 * (fSlow18 * fSlow21)); - double fSlow23 = cos(fSlow9); - double fSlow24 = (1.620185174601965 * (fSlow23 * fSlow21)); - double fSlow25 = faustpower<2>(fSlow8); - double fSlow26 = cos(fSlow10); - double fSlow27 = (fSlow25 * fSlow26); - double fSlow28 = (2.091650066335189 * fSlow27); - double fSlow29 = faustpower<3>(fSlow8); - double fSlow30 = (4 * fSlow9); - double fSlow31 = sin(fSlow30); - double fSlow32 = (2.218529918662356 * (fSlow29 * fSlow31)); - double fSlow33 = (7 * fSlow19); - double fSlow34 = (fSlow33 + -1); - double fSlow35 = (1.6770509831248424 * ((fSlow8 * fSlow16) * fSlow34)); - double fSlow36 = cos(fSlow15); - double fSlow37 = (1.6770509831248424 * ((fSlow8 * fSlow36) * fSlow34)); - double fSlow38 = cos(fSlow30); - double fSlow39 = (2.218529918662356 * (fSlow29 * fSlow38)); - double fSlow40 = faustpower<4>(fSlow8); - double fSlow41 = (5 * fSlow9); - double fSlow42 = sin(fSlow41); - double fSlow43 = (2.3268138086232857 * (fSlow40 * fSlow42)); - double fSlow44 = ((9 * fSlow19) + -1); - double fSlow45 = (1.734304615688951 * ((fSlow25 * fSlow11) * fSlow44)); - double fSlow46 = ((fSlow19 * ((21 * fSlow19) + -14)) + 1); - double fSlow47 = (1.6056540723331412 * (fSlow18 * fSlow46)); - double fSlow48 = (1.6056540723331412 * (fSlow23 * fSlow46)); - double fSlow49 = (1.734304615688951 * (fSlow27 * fSlow44)); - double fSlow50 = cos(fSlow41); - double fSlow51 = (2.3268138086232857 * (fSlow40 * fSlow50)); - double fSlow52 = sin((2 * fSlow7)); - double fSlow53 = (fSlow33 + -3); - double fSlow54 = (1.1858541225631423 * (fSlow52 * fSlow53)); - double fSlow55 = ((fSlow19 * ((35 * fSlow19) + -30)) + 3); - double fSlow56 = (0.375 * fSlow55); - double fSlow57 = (fSlow8 * fSlow18); - double fSlow58 = (fSlow8 * fSlow23); - double fSlow59 = (fSlow25 * fSlow16); - double fSlow60 = (fSlow52 * fSlow18); - double fSlow61 = (fSlow52 * fSlow23); - double fSlow62 = (fSlow25 * fSlow36); - double fSlow63 = ((3 * fSlow19) + -1); - double fSlow64 = (fSlow25 * fSlow14); - double fSlow65 = (fSlow64 * fSlow16); - double fSlow66 = (8.496322733983215 * fSlow65); - double fSlow67 = (fSlow64 * fSlow36); - double fSlow68 = (8.496322733983215 * fSlow67); - double fSlow69 = (fSlow20 + -3); - double fSlow70 = (1.3228756555322954 * fSlow69); - double fSlow71 = (5.123475382979799 * fSlow62); - double fSlow72 = (fSlow29 * fSlow11); - double fSlow73 = (6.274950199005566 * fSlow72); - double fSlow74 = (fSlow29 * fSlow26); - double fSlow75 = (6.274950199005566 * fSlow74); - double fSlow76 = (fSlow40 * fSlow31); - double fSlow77 = (7.358031326380718 * fSlow76); - double fSlow78 = ((fSlow19 * ((63 * fSlow19) + -70)) + 15); - double fSlow79 = (0.414578098794425 * fSlow78); - double fSlow80 = (fSlow40 * fSlow38); - double fSlow81 = (7.358031326380718 * fSlow80); - double fSlow82 = (0.13783222385544802 * fSlow57); - double fSlow83 = (0.13783222385544802 * fSlow14); - double fSlow84 = (0.13783222385544802 * fSlow58); - double fSlow85 = (0.15410111101537496 * fSlow59); - double fSlow86 = (0.15410111101537496 * fSlow60); - double fSlow87 = (0.08897031792714714 * fSlow63); - double fSlow88 = (0.15410111101537496 * fSlow61); - double fSlow89 = (0.15410111101537496 * fSlow62); - double fSlow90 = (0.16644822363786807 * fSlow72); - double fSlow91 = (0.4077132165054383 * fSlow65); - double fSlow92 = (0.12893023963105413 * (fSlow57 * fSlow21)); - double fSlow93 = (0.10527109983694811 * (fSlow14 * fSlow69)); - double fSlow94 = (0.12893023963105413 * (fSlow58 * fSlow21)); - double fSlow95 = (0.4077132165054383 * fSlow67); - double fSlow96 = (0.16644822363786807 * fSlow74); - double fSlow97 = (0.17654500147618726 * fSlow76); - double fSlow98 = (fSlow29 * fSlow14); - double fSlow99 = (0.4993446709136041 * (fSlow98 * fSlow11)); - double fSlow100 = (0.1334554768907207 * (fSlow59 * fSlow34)); - double fSlow101 = (0.0943672726959132 * (fSlow60 * fSlow53)); - double fSlow102 = (0.029841551829730376 * fSlow55); - double fSlow103 = (0.0943672726959132 * (fSlow61 * fSlow53)); - double fSlow104 = (0.1334554768907207 * (fSlow62 * fSlow34)); - double fSlow105 = (0.4993446709136041 * (fSlow98 * fSlow26)); - double fSlow106 = (0.17654500147618726 * fSlow80); - double fSlow107 = faustpower<5>(fSlow8); - double fSlow108 = (0.18516195964843765 * (fSlow107 * fSlow42)); - double fSlow109 = (fSlow40 * fSlow14); - double fSlow110 = (0.5855335285092532 * (fSlow109 * fSlow31)); - double fSlow111 = (0.13801157620699323 * (fSlow72 * fSlow44)); - double fSlow112 = (0.6761158806087376 * (fSlow65 * fSlow63)); - double fSlow113 = (0.12777389125372554 * (fSlow57 * fSlow46)); - double fSlow114 = (0.03299107686038644 * (fSlow14 * fSlow78)); - double fSlow115 = (0.12777389125372554 * (fSlow58 * fSlow46)); - double fSlow116 = (0.6761158806087376 * (fSlow67 * fSlow63)); - double fSlow117 = (0.13801157620699323 * (fSlow74 * fSlow44)); - double fSlow118 = (0.5855335285092532 * (fSlow109 * fSlow38)); - double fSlow119 = (0.18516195964843765 * (fSlow107 * fSlow50)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - for (int i=0; i 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = double(fVslider0); + double fSlow8 = cos(fSlow7); + double fSlow9 = double(fVslider1); + double fSlow10 = (3.0 * fSlow9); + double fSlow11 = sin(fSlow10); + double fSlow12 = (2.0916500663351889 * (fSlow11 * fSlow8)); + double fSlow13 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow14 = (2.0 * fSlow9); + double fSlow15 = sin(fSlow14); + double fSlow16 = sin(fSlow7); + double fSlow17 = (5.123475382979799 * (fSlow15 * fSlow16)); + double fSlow18 = sin(fSlow9); + double fSlow19 = mydsp_faustpower2_f(fSlow16); + double fSlow20 = (5.0 * fSlow19); + double fSlow21 = (fSlow20 + -1.0); + double fSlow22 = (fSlow18 * fSlow21); + double fSlow23 = (1.6201851746019651 * fSlow22); + double fSlow24 = cos(fSlow9); + double fSlow25 = (fSlow24 * fSlow21); + double fSlow26 = (1.6201851746019651 * fSlow25); + double fSlow27 = cos(fSlow10); + double fSlow28 = mydsp_faustpower2_f(fSlow8); + double fSlow29 = (2.0916500663351889 * (fSlow27 * fSlow28)); + double fSlow30 = (4.0 * fSlow9); + double fSlow31 = sin(fSlow30); + double fSlow32 = mydsp_faustpower3_f(fSlow8); + double fSlow33 = (2.2185299186623562 * (fSlow31 * fSlow32)); + double fSlow34 = (7.0 * fSlow19); + double fSlow35 = (fSlow34 + -1.0); + double fSlow36 = (fSlow15 * fSlow35); + double fSlow37 = (1.6770509831248424 * (fSlow36 * fSlow8)); + double fSlow38 = cos(fSlow14); + double fSlow39 = (fSlow38 * fSlow35); + double fSlow40 = (1.6770509831248424 * (fSlow39 * fSlow8)); + double fSlow41 = cos(fSlow30); + double fSlow42 = (2.2185299186623562 * (fSlow41 * fSlow32)); + double fSlow43 = (5.0 * fSlow9); + double fSlow44 = sin(fSlow43); + double fSlow45 = mydsp_faustpower4_f(fSlow8); + double fSlow46 = (2.3268138086232857 * (fSlow44 * fSlow45)); + double fSlow47 = ((9.0 * fSlow19) + -1.0); + double fSlow48 = (fSlow11 * fSlow47); + double fSlow49 = (1.734304615688951 * (fSlow48 * fSlow28)); + double fSlow50 = ((((21.0 * fSlow19) + -14.0) * fSlow19) + 1.0); + double fSlow51 = (fSlow18 * fSlow50); + double fSlow52 = (1.6056540723331412 * fSlow51); + double fSlow53 = (fSlow24 * fSlow50); + double fSlow54 = (1.6056540723331412 * fSlow53); + double fSlow55 = (fSlow27 * fSlow47); + double fSlow56 = (1.734304615688951 * (fSlow55 * fSlow28)); + double fSlow57 = cos(fSlow43); + double fSlow58 = (2.3268138086232857 * (fSlow57 * fSlow45)); + double fSlow59 = (fSlow20 + -3.0); + double fSlow60 = (1.3228756555322954 * fSlow59); + double fSlow61 = (fSlow38 * fSlow28); + double fSlow62 = (5.123475382979799 * fSlow61); + double fSlow63 = (fSlow11 * fSlow32); + double fSlow64 = (6.2749501990055663 * fSlow63); + double fSlow65 = (fSlow27 * fSlow32); + double fSlow66 = (6.2749501990055663 * fSlow65); + double fSlow67 = (fSlow31 * fSlow45); + double fSlow68 = (7.3580313263807184 * fSlow67); + double fSlow69 = ((((63.0 * fSlow19) + -70.0) * fSlow19) + 15.0); + double fSlow70 = (0.41457809879442498 * fSlow69); + double fSlow71 = (fSlow41 * fSlow45); + double fSlow72 = (7.3580313263807184 * fSlow71); + double fSlow73 = (fSlow34 + -3.0); + double fSlow74 = sin((2.0 * fSlow7)); + double fSlow75 = (1.1858541225631423 * (fSlow73 * fSlow74)); + double fSlow76 = ((((35.0 * fSlow19) + -30.0) * fSlow19) + 3.0); + double fSlow77 = (0.375 * fSlow76); + double fSlow78 = (fSlow18 * fSlow8); + double fSlow79 = (fSlow24 * fSlow8); + double fSlow80 = (fSlow15 * fSlow28); + double fSlow81 = (fSlow18 * fSlow74); + double fSlow82 = (fSlow24 * fSlow74); + double fSlow83 = ((3.0 * fSlow19) + -1.0); + double fSlow84 = (fSlow80 * fSlow16); + double fSlow85 = (8.4963227339832148 * fSlow84); + double fSlow86 = (fSlow61 * fSlow16); + double fSlow87 = (8.4963227339832148 * fSlow86); + double fSlow88 = (0.13783222385544802 * fSlow78); + double fSlow89 = (0.13783222385544802 * fSlow16); + double fSlow90 = (0.13783222385544802 * fSlow79); + double fSlow91 = (0.15410111101537496 * fSlow80); + double fSlow92 = (0.15410111101537496 * fSlow81); + double fSlow93 = (0.088970317927147144 * fSlow83); + double fSlow94 = (0.15410111101537496 * fSlow82); + double fSlow95 = (0.15410111101537496 * fSlow61); + double fSlow96 = (0.16644822363786807 * fSlow63); + double fSlow97 = (0.40771321650543829 * fSlow84); + double fSlow98 = (0.12893023963105413 * (fSlow22 * fSlow8)); + double fSlow99 = (0.10527109983694811 * (fSlow59 * fSlow16)); + double fSlow100 = (0.12893023963105413 * (fSlow25 * fSlow8)); + double fSlow101 = (0.40771321650543829 * fSlow86); + double fSlow102 = (0.16644822363786807 * fSlow65); + double fSlow103 = (0.17654500147618726 * fSlow67); + double fSlow104 = (0.49934467091360413 * (fSlow63 * fSlow16)); + double fSlow105 = (0.13345547689072071 * (fSlow36 * fSlow28)); + double fSlow106 = (0.094367272695913204 * ((fSlow18 * fSlow73) * fSlow74)); + double fSlow107 = (0.029841551829730376 * fSlow76); + double fSlow108 = (0.094367272695913204 * ((fSlow24 * fSlow73) * fSlow74)); + double fSlow109 = (0.13345547689072071 * (fSlow39 * fSlow28)); + double fSlow110 = (0.49934467091360413 * (fSlow65 * fSlow16)); + double fSlow111 = (0.17654500147618726 * fSlow71); + double fSlow112 = mydsp_faustpower5_f(fSlow8); + double fSlow113 = (0.18516195964843765 * (fSlow44 * fSlow112)); + double fSlow114 = (0.58553352850925322 * (fSlow67 * fSlow16)); + double fSlow115 = (0.13801157620699323 * (fSlow48 * fSlow32)); + double fSlow116 = (0.67611588060873762 * (((fSlow15 * fSlow83) * fSlow28) * fSlow16)); + double fSlow117 = (0.12777389125372554 * (fSlow51 * fSlow8)); + double fSlow118 = (0.032991076860386437 * (fSlow69 * fSlow16)); + double fSlow119 = (0.12777389125372554 * (fSlow53 * fSlow8)); + double fSlow120 = (0.67611588060873762 * (((fSlow38 * fSlow83) * fSlow28) * fSlow16)); + double fSlow121 = (0.13801157620699323 * (fSlow55 * fSlow32)); + double fSlow122 = (0.58553352850925322 * (fSlow71 * fSlow16)); + double fSlow123 = (0.18516195964843765 * (fSlow57 * fSlow112)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); fRec2[0] = (fSlow13 + (0.999 * fRec2[1])); - double fTemp2 = (fTemp1 * fRec2[0]); - fRec3[0] = ((iSlow4)?0:min(fSlow5, (fRec3[1] + 1))); - fRec4[0] = ((iSlow6)?fSlow5:max((double)0, (fRec4[1] + -1))); - double fTemp3 = (double)input10[i]; - double fTemp4 = (fTemp3 * fRec2[0]); - double fTemp5 = (double)input11[i]; - double fTemp6 = (fTemp5 * fRec2[0]); - double fTemp7 = (double)input13[i]; - double fTemp8 = (fTemp7 * fRec2[0]); - double fTemp9 = (double)input15[i]; - double fTemp10 = (fTemp9 * fRec2[0]); - double fTemp11 = (double)input16[i]; - double fTemp12 = (fTemp11 * fRec2[0]); - double fTemp13 = (double)input18[i]; - double fTemp14 = (fTemp13 * fRec2[0]); - double fTemp15 = (double)input22[i]; - double fTemp16 = (fTemp15 * fRec2[0]); - double fTemp17 = (double)input24[i]; - double fTemp18 = (fTemp17 * fRec2[0]); - double fTemp19 = (double)input25[i]; - double fTemp20 = (fTemp19 * fRec2[0]); - double fTemp21 = (double)input27[i]; - double fTemp22 = (fTemp21 * fRec2[0]); - double fTemp23 = (double)input29[i]; - double fTemp24 = (fTemp23 * fRec2[0]); - double fTemp25 = (double)input31[i]; - double fTemp26 = (fTemp25 * fRec2[0]); - double fTemp27 = (double)input33[i]; - double fTemp28 = (fTemp27 * fRec2[0]); - double fTemp29 = (double)input35[i]; - double fTemp30 = (fTemp29 * fRec2[0]); - double fTemp31 = (double)input19[i]; - double fTemp32 = (fTemp31 * fRec2[0]); - double fTemp33 = (double)input21[i]; - double fTemp34 = (fTemp33 * fRec2[0]); - double fTemp35 = (double)input20[i]; - double fTemp36 = (fTemp35 * fRec2[0]); - double fTemp37 = (fTemp0 * fRec2[0]); - double fTemp38 = (double)input1[i]; - double fTemp39 = (fTemp38 * fRec2[0]); - double fTemp40 = (double)input2[i]; - double fTemp41 = (fTemp40 * fRec2[0]); - double fTemp42 = (double)input3[i]; - double fTemp43 = (fTemp42 * fRec2[0]); - double fTemp44 = (double)input4[i]; - double fTemp45 = (fTemp44 * fRec2[0]); - double fTemp46 = (double)input5[i]; - double fTemp47 = (fTemp46 * fRec2[0]); - double fTemp48 = (double)input7[i]; - double fTemp49 = (fTemp48 * fRec2[0]); - double fTemp50 = (double)input8[i]; - double fTemp51 = (fTemp50 * fRec2[0]); - double fTemp52 = (double)input6[i]; - double fTemp53 = (fTemp52 * fRec2[0]); - double fTemp54 = (double)input28[i]; - double fTemp55 = (fTemp54 * fRec2[0]); - double fTemp56 = (double)input32[i]; - double fTemp57 = (fTemp56 * fRec2[0]); - double fTemp58 = (double)input12[i]; - double fTemp59 = (fTemp58 * fRec2[0]); - double fTemp60 = (double)input14[i]; - double fTemp61 = (fTemp60 * fRec2[0]); - double fTemp62 = (double)input17[i]; - double fTemp63 = (fTemp62 * fRec2[0]); - double fTemp64 = (double)input23[i]; - double fTemp65 = (fTemp64 * fRec2[0]); - double fTemp66 = (double)input26[i]; - double fTemp67 = (fTemp66 * fRec2[0]); - double fTemp68 = (double)input30[i]; - double fTemp69 = (fTemp68 * fRec2[0]); - double fTemp70 = (double)input34[i]; - double fTemp71 = (fTemp70 * fRec2[0]); - double fTemp72 = ((fSlow8 * ((((((((((((((fSlow8 * ((fSlow12 * ((iSlow1)?(fSlow3 * (fTemp2 * fRec3[0])):(fSlow3 * (fTemp2 * fRec4[0])))) + (fSlow17 * ((iSlow1)?(fSlow3 * (fTemp4 * fRec3[0])):(fSlow3 * (fTemp4 * fRec4[0])))))) + (fSlow22 * ((iSlow1)?(fSlow3 * (fTemp6 * fRec3[0])):(fSlow3 * (fTemp6 * fRec4[0]))))) + (fSlow24 * ((iSlow1)?(fSlow3 * (fTemp8 * fRec3[0])):(fSlow3 * (fTemp8 * fRec4[0]))))) + (fSlow28 * ((iSlow1)?(fSlow3 * (fTemp10 * fRec3[0])):(fSlow3 * (fTemp10 * fRec4[0]))))) + (fSlow32 * ((iSlow1)?(fSlow3 * (fTemp12 * fRec3[0])):(fSlow3 * (fTemp12 * fRec4[0]))))) + (fSlow35 * ((iSlow1)?(fSlow3 * (fTemp14 * fRec3[0])):(fSlow3 * (fTemp14 * fRec4[0]))))) + (fSlow37 * ((iSlow1)?(fSlow3 * (fTemp16 * fRec3[0])):(fSlow3 * (fTemp16 * fRec4[0]))))) + (fSlow39 * ((iSlow1)?(fSlow3 * (fTemp18 * fRec3[0])):(fSlow3 * (fTemp18 * fRec4[0]))))) + (fSlow43 * ((iSlow1)?(fSlow3 * (fTemp20 * fRec3[0])):(fSlow3 * (fTemp20 * fRec4[0]))))) + (fSlow45 * ((iSlow1)?(fSlow3 * (fTemp22 * fRec3[0])):(fSlow3 * (fTemp22 * fRec4[0]))))) + (fSlow47 * ((iSlow1)?(fSlow3 * (fTemp24 * fRec3[0])):(fSlow3 * (fTemp24 * fRec4[0]))))) + (fSlow48 * ((iSlow1)?(fSlow3 * (fTemp26 * fRec3[0])):(fSlow3 * (fTemp26 * fRec4[0]))))) + (fSlow49 * ((iSlow1)?(fSlow3 * (fTemp28 * fRec3[0])):(fSlow3 * (fTemp28 * fRec4[0]))))) + (fSlow51 * ((iSlow1)?(fSlow3 * (fTemp30 * fRec3[0])):(fSlow3 * (fTemp30 * fRec4[0])))))) + ((((fSlow54 * ((fSlow18 * ((iSlow1)?(fSlow3 * (fTemp32 * fRec3[0])):(fSlow3 * (fTemp32 * fRec4[0])))) + (fSlow23 * ((iSlow1)?(fSlow3 * (fTemp34 * fRec3[0])):(fSlow3 * (fTemp34 * fRec4[0])))))) + ((fSlow56 * ((iSlow1)?(fSlow3 * (fTemp36 * fRec3[0])):(fSlow3 * (fTemp36 * fRec4[0])))) + ((((iSlow1)?(fSlow3 * (fTemp37 * fRec3[0])):(fSlow3 * (fTemp37 * fRec4[0]))) + (1.7320508075688772 * (((fSlow57 * ((iSlow1)?(fSlow3 * (fTemp39 * fRec3[0])):(fSlow3 * (fTemp39 * fRec4[0])))) + (fSlow14 * ((iSlow1)?(fSlow3 * (fTemp41 * fRec3[0])):(fSlow3 * (fTemp41 * fRec4[0]))))) + (fSlow58 * ((iSlow1)?(fSlow3 * (fTemp43 * fRec3[0])):(fSlow3 * (fTemp43 * fRec4[0]))))))) + (1.9364916731037085 * ((((fSlow59 * ((iSlow1)?(fSlow3 * (fTemp45 * fRec3[0])):(fSlow3 * (fTemp45 * fRec4[0])))) + (fSlow60 * ((iSlow1)?(fSlow3 * (fTemp47 * fRec3[0])):(fSlow3 * (fTemp47 * fRec4[0]))))) + (fSlow61 * ((iSlow1)?(fSlow3 * (fTemp49 * fRec3[0])):(fSlow3 * (fTemp49 * fRec4[0]))))) + (fSlow62 * ((iSlow1)?(fSlow3 * (fTemp51 * fRec3[0])):(fSlow3 * (fTemp51 * fRec4[0]))))))))) + (fSlow63 * (((1.118033988749895 * ((iSlow1)?(fSlow3 * (fTemp53 * fRec3[0])):(fSlow3 * (fTemp53 * fRec4[0])))) + (fSlow66 * ((iSlow1)?(fSlow3 * (fTemp55 * fRec3[0])):(fSlow3 * (fTemp55 * fRec4[0]))))) + (fSlow68 * ((iSlow1)?(fSlow3 * (fTemp57 * fRec3[0])):(fSlow3 * (fTemp57 * fRec4[0]))))))) + (fSlow14 * (((((((fSlow70 * ((iSlow1)?(fSlow3 * (fTemp59 * fRec3[0])):(fSlow3 * (fTemp59 * fRec4[0])))) + (fSlow71 * ((iSlow1)?(fSlow3 * (fTemp61 * fRec3[0])):(fSlow3 * (fTemp61 * fRec4[0]))))) + (fSlow73 * ((iSlow1)?(fSlow3 * (fTemp63 * fRec3[0])):(fSlow3 * (fTemp63 * fRec4[0]))))) + (fSlow75 * ((iSlow1)?(fSlow3 * (fTemp65 * fRec3[0])):(fSlow3 * (fTemp65 * fRec4[0]))))) + (fSlow77 * ((iSlow1)?(fSlow3 * (fTemp67 * fRec3[0])):(fSlow3 * (fTemp67 * fRec4[0]))))) + (fSlow79 * ((iSlow1)?(fSlow3 * (fTemp69 * fRec3[0])):(fSlow3 * (fTemp69 * fRec4[0]))))) + (fSlow81 * ((iSlow1)?(fSlow3 * (fTemp71 * fRec3[0])):(fSlow3 * (fTemp71 * fRec4[0])))))))); - output0[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp0 * fRec0[0])):(fSlow3 * (fTemp0 * fRec1[0]))) + (0.07957747154594767 * fTemp72)); - output1[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp38 * fRec0[0])):(fSlow3 * (fTemp38 * fRec1[0]))) + (fSlow82 * fTemp72)); - output2[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp40 * fRec0[0])):(fSlow3 * (fTemp40 * fRec1[0]))) + (fSlow83 * fTemp72)); - output3[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp42 * fRec0[0])):(fSlow3 * (fTemp42 * fRec1[0]))) + (fSlow84 * fTemp72)); - output4[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp44 * fRec0[0])):(fSlow3 * (fTemp44 * fRec1[0]))) + (fSlow85 * fTemp72)); - output5[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp46 * fRec0[0])):(fSlow3 * (fTemp46 * fRec1[0]))) + (fSlow86 * fTemp72)); - output6[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp52 * fRec0[0])):(fSlow3 * (fTemp52 * fRec1[0]))) + (fSlow87 * fTemp72)); - output7[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp48 * fRec0[0])):(fSlow3 * (fTemp48 * fRec1[0]))) + (fSlow88 * fTemp72)); - output8[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp50 * fRec0[0])):(fSlow3 * (fTemp50 * fRec1[0]))) + (fSlow89 * fTemp72)); - output9[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp1 * fRec0[0])):(fSlow3 * (fTemp1 * fRec1[0]))) + (fSlow90 * fTemp72)); - output10[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp3 * fRec0[0])):(fSlow3 * (fTemp3 * fRec1[0]))) + (fSlow91 * fTemp72)); - output11[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp5 * fRec0[0])):(fSlow3 * (fTemp5 * fRec1[0]))) + (fSlow92 * fTemp72)); - output12[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp58 * fRec0[0])):(fSlow3 * (fTemp58 * fRec1[0]))) + (fSlow93 * fTemp72)); - output13[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp7 * fRec0[0])):(fSlow3 * (fTemp7 * fRec1[0]))) + (fSlow94 * fTemp72)); - output14[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp60 * fRec0[0])):(fSlow3 * (fTemp60 * fRec1[0]))) + (fSlow95 * fTemp72)); - output15[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp9 * fRec0[0])):(fSlow3 * (fTemp9 * fRec1[0]))) + (fSlow96 * fTemp72)); - output16[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp11 * fRec0[0])):(fSlow3 * (fTemp11 * fRec1[0]))) + (fSlow97 * fTemp72)); - output17[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp62 * fRec0[0])):(fSlow3 * (fTemp62 * fRec1[0]))) + (fSlow99 * fTemp72)); - output18[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp13 * fRec0[0])):(fSlow3 * (fTemp13 * fRec1[0]))) + (fSlow100 * fTemp72)); - output19[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp31 * fRec0[0])):(fSlow3 * (fTemp31 * fRec1[0]))) + (fSlow101 * fTemp72)); - output20[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp35 * fRec0[0])):(fSlow3 * (fTemp35 * fRec1[0]))) + (fSlow102 * fTemp72)); - output21[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp33 * fRec0[0])):(fSlow3 * (fTemp33 * fRec1[0]))) + (fSlow103 * fTemp72)); - output22[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp15 * fRec0[0])):(fSlow3 * (fTemp15 * fRec1[0]))) + (fSlow104 * fTemp72)); - output23[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp64 * fRec0[0])):(fSlow3 * (fTemp64 * fRec1[0]))) + (fSlow105 * fTemp72)); - output24[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp17 * fRec0[0])):(fSlow3 * (fTemp17 * fRec1[0]))) + (fSlow106 * fTemp72)); - output25[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp19 * fRec0[0])):(fSlow3 * (fTemp19 * fRec1[0]))) + (fSlow108 * fTemp72)); - output26[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp66 * fRec0[0])):(fSlow3 * (fTemp66 * fRec1[0]))) + (fSlow110 * fTemp72)); - output27[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp21 * fRec0[0])):(fSlow3 * (fTemp21 * fRec1[0]))) + (fSlow111 * fTemp72)); - output28[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp54 * fRec0[0])):(fSlow3 * (fTemp54 * fRec1[0]))) + (fSlow112 * fTemp72)); - output29[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp23 * fRec0[0])):(fSlow3 * (fTemp23 * fRec1[0]))) + (fSlow113 * fTemp72)); - output30[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp68 * fRec0[0])):(fSlow3 * (fTemp68 * fRec1[0]))) + (fSlow114 * fTemp72)); - output31[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp25 * fRec0[0])):(fSlow3 * (fTemp25 * fRec1[0]))) + (fSlow115 * fTemp72)); - output32[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp56 * fRec0[0])):(fSlow3 * (fTemp56 * fRec1[0]))) + (fSlow116 * fTemp72)); - output33[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp27 * fRec0[0])):(fSlow3 * (fTemp27 * fRec1[0]))) + (fSlow117 * fTemp72)); - output34[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp70 * fRec0[0])):(fSlow3 * (fTemp70 * fRec1[0]))) + (fSlow118 * fTemp72)); - output35[i] = (FAUSTFLOAT)(((iSlow1)?(fSlow3 * (fTemp29 * fRec0[0])):(fSlow3 * (fTemp29 * fRec1[0]))) + (fSlow119 * fTemp72)); - // post processing - fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec1[1] = fRec1[0]; + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input9[i]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input10[i]); + double fTemp5 = double(input11[i]); + double fTemp6 = double(input13[i]); + double fTemp7 = double(input15[i]); + double fTemp8 = double(input16[i]); + double fTemp9 = double(input18[i]); + double fTemp10 = double(input22[i]); + double fTemp11 = double(input24[i]); + double fTemp12 = double(input25[i]); + double fTemp13 = double(input27[i]); + double fTemp14 = double(input29[i]); + double fTemp15 = double(input31[i]); + double fTemp16 = double(input33[i]); + double fTemp17 = double(input35[i]); + double fTemp18 = double(input12[i]); + double fTemp19 = double(input14[i]); + double fTemp20 = double(input17[i]); + double fTemp21 = double(input23[i]); + double fTemp22 = double(input26[i]); + double fTemp23 = double(input30[i]); + double fTemp24 = double(input34[i]); + double fTemp25 = double(input19[i]); + double fTemp26 = double(input21[i]); + double fTemp27 = double(input20[i]); + double fTemp28 = double(input1[i]); + double fTemp29 = double(input2[i]); + double fTemp30 = double(input3[i]); + double fTemp31 = double(input4[i]); + double fTemp32 = double(input5[i]); + double fTemp33 = double(input7[i]); + double fTemp34 = double(input8[i]); + double fTemp35 = double(input6[i]); + double fTemp36 = double(input28[i]); + double fTemp37 = double(input32[i]); + double fTemp38 = ((fSlow8 * ((((((((((((((fSlow8 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow29 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow33 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow42 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow49 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow52 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow54 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow56 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow58 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17)))))) + ((fSlow16 * (((((((fSlow60 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18)))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow64 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow66 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22))))) + (fSlow70 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow72 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24)))))) + (((fSlow75 * ((fSlow18 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25)))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26)))))) + ((fSlow77 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27)))) + (((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow78 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28)))) + (fSlow16 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow79 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))))) + (1.9364916731037085 * ((((fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31)))) + (fSlow81 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow82 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow61 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))))))) + (fSlow83 * (((1.1180339887498949 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35)))) + (fSlow85 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow87 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp38))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow88 * fTemp38))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow89 * fTemp38))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow90 * fTemp38))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow91 * fTemp38))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow92 * fTemp38))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow93 * fTemp38))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow94 * fTemp38))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow95 * fTemp38))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow96 * fTemp38))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow97 * fTemp38))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow98 * fTemp38))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow99 * fTemp38))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow100 * fTemp38))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow101 * fTemp38))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow102 * fTemp38))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow103 * fTemp38))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow104 * fTemp38))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow105 * fTemp38))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow106 * fTemp38))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow107 * fTemp38))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow108 * fTemp38))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow109 * fTemp38))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow110 * fTemp38))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow111 * fTemp38))); + output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow113 * fTemp38))); + output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow114 * fTemp38))); + output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow115 * fTemp38))); + output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow116 * fTemp38))); + output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow117 * fTemp38))); + output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow118 * fTemp38))); + output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow119 * fTemp38))); + output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow120 * fTemp38))); + output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow121 * fTemp38))); + output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow122 * fTemp38))); + output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow123 * fTemp38))); fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1339,3 +1708,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOABeamHCardio2HOA1.cpp b/source/HOAUGens/HOABeamHCardio2HOA1.cpp new file mode 100755 index 0000000000..82c6836995 --- /dev/null +++ b/source/HOAUGens/HOABeamHCardio2HOA1.cpp @@ -0,0 +1,1277 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamHCardio2HOA1" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/author", "Pierre Lecomte"); + m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/license", "GPL"); + m->declare("lib/cijk.lib/name", "Cijk matrix"); + m->declare("lib/cijk.lib/version", "10"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamHCardio2HOA1"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "3", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + int iSlow0 = int(double(fHslider0)); + int iSlow1 = (iSlow0 >= 2); + int iSlow2 = (iSlow0 >= 1); + double fSlow3 = double(fHslider1); + double fSlow4 = sin(fSlow3); + double fSlow5 = double(fHslider2); + double fSlow6 = cos(fSlow5); + double fSlow7 = (fSlow4 * fSlow6); + double fSlow8 = sin(fSlow5); + double fSlow9 = cos(fSlow3); + double fSlow10 = (fSlow9 * fSlow6); + double fSlow11 = (0.43301700000000004 * fSlow7); + double fSlow12 = ((3.0 * mydsp_faustpower2_f(fSlow8)) + -1.0); + double fSlow13 = (0.055554711935999999 * fSlow12); + double fSlow14 = (2.0 * fSlow3); + double fSlow15 = cos(fSlow14); + double fSlow16 = mydsp_faustpower2_f(fSlow6); + double fSlow17 = (fSlow15 * fSlow16); + double fSlow18 = (0.16666405622891672 * fSlow17); + double fSlow19 = (0.11112 - (fSlow13 + fSlow18)); + double fSlow20 = (0.19245000000000004 * fSlow6); + double fSlow21 = sin((2.0 * fSlow5)); + double fSlow22 = (0.16666405622891672 * fSlow21); + double fSlow23 = sin(fSlow14); + double fSlow24 = (fSlow23 * fSlow16); + double fSlow25 = (0.16666405622891672 * fSlow24); + double fSlow26 = (0.43301700000000004 * fSlow8); + double fSlow27 = (0.19245000000000004 * fSlow8); + double fSlow28 = ((0.111109299648 * fSlow12) + 0.11112); + double fSlow29 = (0.43301700000000004 * fSlow10); + double fSlow30 = (0.19245000000000004 * fSlow9); + double fSlow31 = (fSlow23 * fSlow6); + double fSlow32 = (0.16666405622891672 * fSlow31); + double fSlow33 = (fSlow9 * fSlow21); + double fSlow34 = (0.16666405622891672 * fSlow33); + double fSlow35 = (fSlow18 + (0.11112 - fSlow13)); + double fSlow36 = (0.335413669149 * fSlow6); + double fSlow37 = (0.14907119265000002 * fSlow9); + double fSlow38 = (0.2151622795194362 * fSlow31); + double fSlow39 = (0.14907119265000002 * fSlow4); + double fSlow40 = (0.14907119265000002 * fSlow8); + double fSlow41 = (0.14907119265000002 * fSlow6); + double fSlow42 = (0.2151622795194362 * fSlow21); + double fSlow43 = (0.0 - (0.193651264638 * fSlow7)); + double fSlow44 = (0.38730209625899997 * fSlow8); + double fSlow45 = (0.0 - (0.193651264638 * fSlow10)); + double fSlow46 = (0.0 - (0.086066334300000019 * fSlow7)); + double fSlow47 = (0.124224 * fSlow12); + double fSlow48 = (0.17213247615000002 * fSlow8); + double fSlow49 = (0.0 - (0.086066334300000019 * fSlow10)); + double fSlow50 = (0.0 - (0.335413669149 * fSlow7)); + double fSlow51 = (0.335413669149 * fSlow10); + double fSlow52 = (0.0 - (0.14907119265000002 * fSlow7)); + double fSlow53 = (0.2151622795194362 * (fSlow15 * fSlow6)); + double fSlow54 = (0.17251367312221164 * fSlow16); + double fSlow55 = (fSlow4 * fSlow21); + double fSlow56 = (0.089085626687999991 * fSlow12); + double fSlow57 = (0.044542895106113686 * fSlow17); + double fSlow58 = (fSlow56 + fSlow57); + double fSlow59 = (0.1781713652621752 * fSlow55); + double fSlow60 = (0.0 - (0.044542895106113686 * fSlow24)); + double fSlow61 = (0.0 - (0.10910728580834947 * fSlow55)); + double fSlow62 = (0.10910718143999999 * fSlow12); + double fSlow63 = (0.0 - (0.10910728580834947 * fSlow33)); + double fSlow64 = (0.1781713652621752 * fSlow33); + double fSlow65 = (fSlow56 - fSlow57); + double fSlow66 = (0.0 - (0.14085684693651698 * fSlow55)); + double fSlow67 = (0.0 - (0.17251367312221164 * fSlow24)); + double fSlow68 = (0.17251367312221164 * fSlow17); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + double fTemp1 = double(input1[i]); + double fTemp2 = double(input2[i]); + double fTemp3 = double(input3[i]); + double fTemp4 = (((fSlow7 * fTemp1) + (fSlow8 * fTemp2)) + (fSlow10 * fTemp3)); + output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + (0.19245000000000004 * fTemp4)):(iSlow2?((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4)):fTemp0))); + output1[i] = FAUSTFLOAT((iSlow1?(((fSlow19 * fTemp1) + (fSlow4 * ((fSlow20 * fTemp0) + (fSlow22 * fTemp2)))) + (fSlow25 * fTemp3)):(iSlow2?((fSlow11 * fTemp0) + (0.24993000000000001 * fTemp1)):fTemp1))); + output2[i] = FAUSTFLOAT((iSlow1?((fSlow22 * ((fSlow4 * fTemp1) + (fSlow9 * fTemp3))) + ((fSlow27 * fTemp0) + (fSlow28 * fTemp2))):(iSlow2?((fSlow26 * fTemp0) + (0.24993000000000001 * fTemp2)):fTemp2))); + output3[i] = FAUSTFLOAT((iSlow1?(((fSlow6 * ((fSlow30 * fTemp0) + (fSlow32 * fTemp1))) + (fSlow34 * fTemp2)) + (fSlow35 * fTemp3)):(iSlow2?((fSlow29 * fTemp0) + (0.24993000000000001 * fTemp3)):fTemp3))); + output4[i] = FAUSTFLOAT((iSlow1?(fSlow6 * (((fSlow37 * fTemp1) + (fSlow38 * fTemp0)) + (fSlow39 * fTemp3))):(iSlow2?(fSlow36 * ((fSlow9 * fTemp1) + (fSlow4 * fTemp3))):0.0))); + double fTemp5 = ((fSlow41 * fTemp2) + (fSlow42 * fTemp0)); + output5[i] = FAUSTFLOAT((iSlow1?((fSlow40 * fTemp1) + (fSlow4 * fTemp5)):(iSlow2?(0.335413669149 * ((fSlow8 * fTemp1) + (fSlow7 * fTemp2))):0.0))); + output6[i] = FAUSTFLOAT((iSlow1?(((fSlow46 * fTemp1) + ((fSlow47 * fTemp0) + (fSlow48 * fTemp2))) + (fSlow49 * fTemp3)):(iSlow2?(((fSlow43 * fTemp1) + (fSlow44 * fTemp2)) + (fSlow45 * fTemp3)):0.0))); + output7[i] = FAUSTFLOAT((iSlow1?((fSlow9 * fTemp5) + (fSlow40 * fTemp3)):(iSlow2?(0.335413669149 * ((fSlow10 * fTemp2) + (fSlow8 * fTemp3))):0.0))); + output8[i] = FAUSTFLOAT((iSlow1?((fSlow52 * fTemp1) + (fSlow6 * ((fSlow37 * fTemp3) + (fSlow53 * fTemp0)))):(iSlow2?((fSlow50 * fTemp1) + (fSlow51 * fTemp3)):0.0))); + output9[i] = FAUSTFLOAT((iSlow1?(fSlow54 * ((fSlow23 * fTemp3) + (fSlow15 * fTemp1))):0.0)); + output10[i] = FAUSTFLOAT((iSlow1?(0.14085684693651698 * (((fSlow33 * fTemp1) + (fSlow24 * fTemp2)) + (fSlow55 * fTemp3))):0.0)); + output11[i] = FAUSTFLOAT((iSlow1?(((fSlow58 * fTemp1) + (fSlow59 * fTemp2)) + (fSlow60 * fTemp3)):0.0)); + output12[i] = FAUSTFLOAT((iSlow1?(((fSlow61 * fTemp1) + (fSlow62 * fTemp2)) + (fSlow63 * fTemp3)):0.0)); + output13[i] = FAUSTFLOAT((iSlow1?(((fSlow60 * fTemp1) + (fSlow64 * fTemp2)) + (fSlow65 * fTemp3)):0.0)); + output14[i] = FAUSTFLOAT((iSlow1?((fSlow66 * fTemp1) + (0.14085684693651698 * ((fSlow33 * fTemp3) + (fSlow17 * fTemp2)))):0.0)); + output15[i] = FAUSTFLOAT((iSlow1?((fSlow67 * fTemp1) + (fSlow68 * fTemp3)):0.0)); + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamHCardio2HOA2.cpp b/source/HOAUGens/HOABeamHCardio2HOA2.cpp new file mode 100755 index 0000000000..1a17b630a7 --- /dev/null +++ b/source/HOAUGens/HOABeamHCardio2HOA2.cpp @@ -0,0 +1,1426 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamHCardio2HOA2" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/author", "Pierre Lecomte"); + m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/license", "GPL"); + m->declare("lib/cijk.lib/name", "Cijk matrix"); + m->declare("lib/cijk.lib/version", "10"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamHCardio2HOA2"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "3", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + int iSlow0 = int(double(fHslider0)); + int iSlow1 = (iSlow0 >= 2); + int iSlow2 = (iSlow0 >= 1); + double fSlow3 = double(fHslider1); + double fSlow4 = sin(fSlow3); + double fSlow5 = double(fHslider2); + double fSlow6 = cos(fSlow5); + double fSlow7 = (fSlow4 * fSlow6); + double fSlow8 = sin(fSlow5); + double fSlow9 = cos(fSlow3); + double fSlow10 = (fSlow9 * fSlow6); + double fSlow11 = ((3.0 * mydsp_faustpower2_f(fSlow8)) + -1.0); + double fSlow12 = (0.124224 * fSlow11); + double fSlow13 = (2.0 * fSlow3); + double fSlow14 = sin(fSlow13); + double fSlow15 = mydsp_faustpower2_f(fSlow6); + double fSlow16 = (fSlow14 * fSlow15); + double fSlow17 = sin((2.0 * fSlow5)); + double fSlow18 = (fSlow4 * fSlow17); + double fSlow19 = (fSlow9 * fSlow17); + double fSlow20 = cos(fSlow13); + double fSlow21 = (fSlow20 * fSlow15); + double fSlow22 = (0.43301700000000004 * fSlow4); + double fSlow23 = (0.335413669149 * fSlow9); + double fSlow24 = (0.335413669149 * fSlow8); + double fSlow25 = (0.0 - (0.193651264638 * fSlow7)); + double fSlow26 = (0.0 - (0.335413669149 * fSlow7)); + double fSlow27 = (0.14907119265000002 * fSlow9); + double fSlow28 = (fSlow14 * fSlow6); + double fSlow29 = (0.16666405622891672 * fSlow28); + double fSlow30 = (0.19245000000000004 * fSlow6); + double fSlow31 = (0.16666405622891672 * fSlow17); + double fSlow32 = (0.055554711935999999 * fSlow11); + double fSlow33 = (0.16666405622891672 * fSlow21); + double fSlow34 = (0.11112 - (fSlow32 + fSlow33)); + double fSlow35 = (0.14907119265000002 * fSlow8); + double fSlow36 = (0.0 - (0.086066334300000019 * fSlow7)); + double fSlow37 = (0.0 - (0.14907119265000002 * fSlow7)); + double fSlow38 = (0.335413669149 * fSlow6); + double fSlow39 = ((0.111109299648 * fSlow11) + 0.11112); + double fSlow40 = (0.14907119265000002 * fSlow6); + double fSlow41 = (0.43301700000000004 * fSlow9); + double fSlow42 = (0.335413669149 * fSlow4); + double fSlow43 = (0.0 - (0.193651264638 * fSlow10)); + double fSlow44 = (0.0 - (0.086066334300000019 * fSlow10)); + double fSlow45 = (0.19245000000000004 * fSlow9); + double fSlow46 = (0.14907119265000002 * fSlow4); + double fSlow47 = (fSlow33 + (0.11112 - fSlow32)); + double fSlow48 = (0.11904563149935221 * fSlow17); + double fSlow49 = (0.2151622795194362 * fSlow28); + double fSlow50 = (0.079363856447999995 * fSlow11); + double fSlow51 = (0.11112 - fSlow50); + double fSlow52 = (0.0 - (0.13746223165253885 * fSlow16)); + double fSlow53 = (0.2151622795194362 * fSlow17); + double fSlow54 = (0.068731008245129663 * fSlow17); + double fSlow55 = (0.039681866111999996 * fSlow11); + double fSlow56 = (0.11904563149935221 * fSlow21); + double fSlow57 = (fSlow55 + (0.11112 - fSlow56)); + double fSlow58 = (0.0 - (0.11904563149935221 * fSlow18)); + double fSlow59 = (0.38730209625899997 * fSlow8); + double fSlow60 = (0.17213247615000002 * fSlow8); + double fSlow61 = (fSlow50 + 0.11112); + double fSlow62 = (0.0 - (0.13746223165253885 * fSlow21)); + double fSlow63 = ((fSlow55 + fSlow56) + 0.11112); + double fSlow64 = (0.335413669149 * fSlow10); + double fSlow65 = (fSlow20 * fSlow6); + double fSlow66 = (0.2151622795194362 * fSlow65); + double fSlow67 = (0.11904563149935221 * fSlow19); + double fSlow68 = (0.34718610232800001 * fSlow6); + double fSlow69 = (0.15430333080000003 * fSlow9); + double fSlow70 = (0.17251367312221164 * fSlow6); + double fSlow71 = (0.15430333080000003 * fSlow4); + double fSlow72 = (0.0 - (0.089643179340000004 * fSlow10)); + double fSlow73 = (0.35857228434300004 * fSlow8); + double fSlow74 = (0.0 - (0.039840999000000009 * fSlow10)); + double fSlow75 = (0.0 - (0.044542895106113686 * fSlow16)); + double fSlow76 = (0.089085626687999991 * fSlow11); + double fSlow77 = (0.044542895106113686 * fSlow21); + double fSlow78 = (fSlow76 + fSlow77); + double fSlow79 = (0.15936380355000002 * fSlow8); + double fSlow80 = (0.1781713652621752 * fSlow17); + double fSlow81 = (0.13801301565000001 * fSlow6); + double fSlow82 = (0.039840999000000009 * fSlow6); + double fSlow83 = (0.0 - (0.219579889581 * fSlow7)); + double fSlow84 = (0.38032316126999999 * fSlow8); + double fSlow85 = (0.0 - (0.219579889581 * fSlow10)); + double fSlow86 = (0.0 - (0.097590047850000028 * fSlow7)); + double fSlow87 = (0.0 - (0.10910728580834947 * fSlow19)); + double fSlow88 = (0.10910718143999999 * fSlow11); + double fSlow89 = (0.0 - (0.10910728580834947 * fSlow18)); + double fSlow90 = (0.16903075950000004 * fSlow8); + double fSlow91 = (0.0 - (0.097590047850000028 * fSlow10)); + double fSlow92 = (0.31053251232900003 * fSlow10); + double fSlow93 = (0.0 - (0.089643179340000004 * fSlow7)); + double fSlow94 = (0.0 - (0.039840999000000009 * fSlow7)); + double fSlow95 = (fSlow76 - fSlow77); + double fSlow96 = (0.0 - (0.28347631111800004 * fSlow7)); + double fSlow97 = (0.0 - (0.12598816230000001 * fSlow7)); + double fSlow98 = (0.0 - (0.14085684693651698 * fSlow18)); + double fSlow99 = (0.0 - (0.34718610232800001 * fSlow7)); + double fSlow100 = (0.34718610232800001 * fSlow10); + double fSlow101 = (0.17251367312221164 * fSlow65); + double fSlow102 = (0.0 - (0.17251367312221164 * fSlow16)); + double fSlow103 = (0.0 - (0.15430333080000003 * fSlow7)); + double fSlow104 = (0.18184526118496958 * fSlow15); + double fSlow105 = (0.11904563149935221 * fSlow16); + double fSlow106 = (0.068731027392000002 * fSlow11); + double fSlow107 = (0.13746223165253885 * fSlow17); + double fSlow108 = (0.0 - (0.048600210211011685 * fSlow19)); + double fSlow109 = (0.097200435264000004 * fSlow11); + double fSlow110 = (0.048600210211011685 * fSlow21); + double fSlow111 = (fSlow109 + fSlow110); + double fSlow112 = (0.0 - (0.048600210211011685 * fSlow16)); + double fSlow113 = (0.030737437765308104 * fSlow15); + double fSlow114 = (0.0 - (0.12294996622351191 * fSlow19)); + double fSlow115 = (0.0 - (0.12294996622351191 * fSlow18)); + double fSlow116 = (0.10647773203199999 * fSlow11); + double fSlow117 = (0.0 - (0.048600210211011685 * fSlow18)); + double fSlow118 = (0.16835609239505758 * fSlow19); + double fSlow119 = (fSlow109 - fSlow110); + double fSlow120 = (0.0 - (0.13746223165253885 * fSlow18)); + double fSlow121 = (0.13746223165253885 * fSlow19); + double fSlow122 = (0.0 - (0.12858399051272834 * fSlow18)); + double fSlow123 = (0.0 - (0.12858399051272834 * fSlow16)); + double fSlow124 = (0.0 - (0.18184526118496958 * fSlow16)); + double fSlow125 = (0.18184526118496958 * fSlow21); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + double fTemp1 = double(input1[i]); + double fTemp2 = double(input2[i]); + double fTemp3 = double(input3[i]); + double fTemp4 = (((fSlow7 * fTemp1) + (fSlow8 * fTemp2)) + (fSlow10 * fTemp3)); + double fTemp5 = double(input6[i]); + double fTemp6 = double(input4[i]); + double fTemp7 = double(input5[i]); + double fTemp8 = double(input7[i]); + double fTemp9 = double(input8[i]); + output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + (((0.19245000000000004 * fTemp4) + (fSlow12 * fTemp5)) + (0.2151622795194362 * ((((fSlow16 * fTemp6) + (fSlow18 * fTemp7)) + (fSlow19 * fTemp8)) + (fSlow21 * fTemp9))))):(iSlow2?((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4)):fTemp0))); + double fTemp10 = (fSlow31 * fTemp2); + output1[i] = FAUSTFLOAT((iSlow1?((((fSlow6 * ((fSlow27 * fTemp6) + (fSlow29 * fTemp3))) + ((fSlow4 * ((fSlow30 * fTemp0) + fTemp10)) + ((fSlow34 * fTemp1) + (fSlow35 * fTemp7)))) + (fSlow36 * fTemp5)) + (fSlow37 * fTemp9)):(iSlow2?((0.24993000000000001 * fTemp1) + ((((fSlow6 * ((fSlow22 * fTemp0) + (fSlow23 * fTemp6))) + (fSlow24 * fTemp7)) + (fSlow25 * fTemp5)) + (fSlow26 * fTemp9))):fTemp1))); + double fTemp11 = ((fSlow4 * fTemp7) + (fSlow9 * fTemp8)); + output2[i] = FAUSTFLOAT((iSlow1?((fSlow8 * ((0.19245000000000004 * fTemp0) + (0.17213247615000002 * fTemp5))) + ((fSlow31 * ((fSlow4 * fTemp1) + (fSlow9 * fTemp3))) + ((fSlow39 * fTemp2) + (fSlow40 * fTemp11)))):(iSlow2?((0.24993000000000001 * fTemp2) + ((fSlow8 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp5))) + (fSlow38 * fTemp11))):fTemp2))); + output3[i] = FAUSTFLOAT((iSlow1?((fSlow9 * (fTemp10 + (fSlow40 * fTemp9))) + ((fSlow44 * fTemp5) + ((fSlow6 * (((fSlow45 * fTemp0) + (fSlow29 * fTemp1)) + (fSlow46 * fTemp6))) + ((fSlow47 * fTemp3) + (fSlow35 * fTemp8))))):(iSlow2?((0.24993000000000001 * fTemp3) + ((fSlow6 * (((fSlow41 * fTemp0) + (fSlow42 * fTemp6)) + (fSlow23 * fTemp9))) + ((fSlow43 * fTemp5) + (fSlow24 * fTemp8)))):fTemp3))); + double fTemp12 = ((fSlow9 * fTemp7) + (fSlow4 * fTemp8)); + output4[i] = FAUSTFLOAT((iSlow1?((fSlow48 * fTemp12) + (((fSlow6 * (((fSlow27 * fTemp1) + (fSlow49 * fTemp0)) + (fSlow46 * fTemp3))) + (fSlow51 * fTemp6)) + (fSlow52 * fTemp5))):(iSlow2?((fSlow38 * ((fSlow9 * fTemp1) + (fSlow4 * fTemp3))) + (0.24993000000000001 * fTemp6)):fTemp6))); + double fTemp13 = (fSlow19 * fTemp6); + double fTemp14 = (fSlow16 * fTemp8); + double fTemp15 = (((fSlow40 * fTemp2) + (fSlow53 * fTemp0)) + (fSlow54 * fTemp5)); + output5[i] = FAUSTFLOAT((iSlow1?(((0.11904563149935221 * (fTemp13 + fTemp14)) + ((fSlow4 * fTemp15) + ((fSlow35 * fTemp1) + (fSlow57 * fTemp7)))) + (fSlow58 * fTemp9)):(iSlow2?((0.335413669149 * ((fSlow8 * fTemp1) + (fSlow7 * fTemp2))) + (0.24993000000000001 * fTemp7)):fTemp7))); + output6[i] = FAUSTFLOAT((iSlow1?(((fSlow54 * fTemp11) + (((((fSlow36 * fTemp1) + ((fSlow12 * fTemp0) + (fSlow60 * fTemp2))) + (fSlow44 * fTemp3)) + (fSlow52 * fTemp6)) + (fSlow61 * fTemp5))) + (fSlow62 * fTemp9)):(iSlow2?((((fSlow25 * fTemp1) + (fSlow59 * fTemp2)) + (fSlow43 * fTemp3)) + (0.24993000000000001 * fTemp5)):fTemp5))); + output7[i] = FAUSTFLOAT((iSlow1?((fSlow9 * (fTemp15 + (fSlow48 * fTemp9))) + (((fSlow35 * fTemp3) + (0.11904563149935221 * ((fSlow18 * fTemp6) + (fSlow16 * fTemp7)))) + (fSlow63 * fTemp8))):(iSlow2?((0.335413669149 * ((fSlow10 * fTemp2) + (fSlow8 * fTemp3))) + (0.24993000000000001 * fTemp8)):fTemp8))); + output8[i] = FAUSTFLOAT((iSlow1?(((fSlow62 * fTemp5) + ((fSlow58 * fTemp7) + ((fSlow6 * ((fSlow27 * fTemp3) + (fSlow66 * fTemp0))) + ((fSlow37 * fTemp1) + (fSlow67 * fTemp8))))) + (fSlow51 * fTemp9)):(iSlow2?(((fSlow26 * fTemp1) + (fSlow64 * fTemp3)) + (0.24993000000000001 * fTemp9)):fTemp9))); + output9[i] = FAUSTFLOAT((iSlow1?(fSlow6 * (((fSlow69 * fTemp6) + (fSlow70 * ((fSlow14 * fTemp3) + (fSlow20 * fTemp1)))) + (fSlow71 * fTemp9))):(iSlow2?(fSlow68 * ((fSlow9 * fTemp6) + (fSlow4 * fTemp9))):0.0))); + double fTemp16 = (((fSlow8 * fTemp6) + (fSlow10 * fTemp7)) + (fSlow7 * fTemp8)); + output10[i] = FAUSTFLOAT((iSlow1?((0.14085684693651698 * (((fSlow19 * fTemp1) + (fSlow16 * fTemp2)) + (fSlow18 * fTemp3))) + (0.12598816230000001 * fTemp16)):(iSlow2?(0.28347631111800004 * fTemp16):0.0))); + double fTemp17 = ((fSlow80 * fTemp2) + (fSlow81 * fTemp5)); + output11[i] = FAUSTFLOAT((iSlow1?(((fSlow74 * fTemp6) + ((fSlow75 * fTemp3) + ((fSlow78 * fTemp1) + (fSlow79 * fTemp7)))) + (fSlow4 * (fTemp17 + (fSlow82 * fTemp9)))):(iSlow2?(((fSlow72 * fTemp6) + (fSlow73 * fTemp7)) + (fSlow7 * ((0.31053251232900003 * fTemp5) + (0.089643179340000004 * fTemp9)))):0.0))); + output12[i] = FAUSTFLOAT((iSlow1?(((fSlow86 * fTemp7) + ((fSlow87 * fTemp3) + ((fSlow88 * fTemp2) + ((fSlow89 * fTemp1) + (fSlow90 * fTemp5))))) + (fSlow91 * fTemp8)):(iSlow2?(((fSlow83 * fTemp7) + (fSlow84 * fTemp5)) + (fSlow85 * fTemp8)):0.0))); + output13[i] = FAUSTFLOAT((iSlow1?(((fSlow9 * fTemp17) + ((fSlow94 * fTemp6) + ((fSlow95 * fTemp3) + ((fSlow75 * fTemp1) + (fSlow79 * fTemp8))))) + (fSlow74 * fTemp9)):(iSlow2?(((fSlow92 * fTemp5) + ((fSlow93 * fTemp6) + (fSlow73 * fTemp8))) + (fSlow72 * fTemp9)):0.0))); + double fTemp18 = ((fSlow10 * fTemp8) + (fSlow8 * fTemp9)); + output14[i] = FAUSTFLOAT((iSlow1?((fSlow97 * fTemp7) + ((0.14085684693651698 * ((fSlow19 * fTemp3) + (fSlow21 * fTemp2))) + ((fSlow98 * fTemp1) + (0.12598816230000001 * fTemp18)))):(iSlow2?((fSlow96 * fTemp7) + (0.28347631111800004 * fTemp18)):0.0))); + output15[i] = FAUSTFLOAT((iSlow1?((fSlow6 * ((fSlow69 * fTemp9) + (fSlow101 * fTemp3))) + ((fSlow102 * fTemp1) + (fSlow103 * fTemp6))):(iSlow2?((fSlow99 * fTemp6) + (fSlow100 * fTemp9)):0.0))); + output16[i] = FAUSTFLOAT((iSlow1?(fSlow104 * ((fSlow20 * fTemp6) + (fSlow14 * fTemp9))):0.0)); + output17[i] = FAUSTFLOAT((iSlow1?(0.12858399051272834 * ((fTemp14 + (fTemp13 + (fSlow21 * fTemp7))) + (fSlow18 * fTemp9))):0.0)); + output18[i] = FAUSTFLOAT((iSlow1?((fSlow105 * fTemp5) + ((fSlow106 * fTemp6) + (fSlow107 * fTemp12))):0.0)); + output19[i] = FAUSTFLOAT((iSlow1?((fSlow18 * ((0.16835609239505758 * fTemp5) + (0.048600210211011685 * fTemp9))) + (((fSlow108 * fTemp6) + (fSlow111 * fTemp7)) + (fSlow112 * fTemp8))):0.0)); + output20[i] = FAUSTFLOAT((iSlow1?((fSlow113 * ((fSlow14 * fTemp6) + (fSlow20 * fTemp9))) + ((fSlow114 * fTemp8) + ((fSlow115 * fTemp7) + (fSlow116 * fTemp5)))):0.0)); + output21[i] = FAUSTFLOAT((iSlow1?((((fSlow112 * fTemp7) + ((fSlow117 * fTemp6) + (fSlow118 * fTemp5))) + (fSlow119 * fTemp8)) + (fSlow108 * fTemp9)):0.0)); + output22[i] = FAUSTFLOAT((iSlow1?(((fSlow56 * fTemp5) + ((fSlow120 * fTemp7) + (fSlow121 * fTemp8))) + (fSlow106 * fTemp9)):0.0)); + output23[i] = FAUSTFLOAT((iSlow1?(((fSlow122 * fTemp6) + (fSlow123 * fTemp7)) + (0.12858399051272834 * ((fSlow19 * fTemp9) + (fSlow21 * fTemp8)))):0.0)); + output24[i] = FAUSTFLOAT((iSlow1?((fSlow124 * fTemp6) + (fSlow125 * fTemp9)):0.0)); + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamHCardio2HOA3.cpp b/source/HOAUGens/HOABeamHCardio2HOA3.cpp new file mode 100755 index 0000000000..bb98820d67 --- /dev/null +++ b/source/HOAUGens/HOABeamHCardio2HOA3.cpp @@ -0,0 +1,1658 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamHCardio2HOA3" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/author", "Pierre Lecomte"); + m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/cijk.lib/license", "GPL"); + m->declare("lib/cijk.lib/name", "Cijk matrix"); + m->declare("lib/cijk.lib/version", "10"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamHCardio2HOA3"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 36; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->declare(0, "3", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + int iSlow0 = int(double(fHslider0)); + int iSlow1 = (iSlow0 >= 2); + int iSlow2 = (iSlow0 >= 1); + double fSlow3 = double(fHslider1); + double fSlow4 = sin(fSlow3); + double fSlow5 = double(fHslider2); + double fSlow6 = cos(fSlow5); + double fSlow7 = (fSlow4 * fSlow6); + double fSlow8 = sin(fSlow5); + double fSlow9 = cos(fSlow3); + double fSlow10 = (fSlow9 * fSlow6); + double fSlow11 = ((3.0 * mydsp_faustpower2_f(fSlow8)) + -1.0); + double fSlow12 = (0.124224 * fSlow11); + double fSlow13 = (2.0 * fSlow3); + double fSlow14 = sin(fSlow13); + double fSlow15 = mydsp_faustpower2_f(fSlow6); + double fSlow16 = (fSlow14 * fSlow15); + double fSlow17 = sin((2.0 * fSlow5)); + double fSlow18 = (fSlow4 * fSlow17); + double fSlow19 = (fSlow9 * fSlow17); + double fSlow20 = cos(fSlow13); + double fSlow21 = (fSlow20 * fSlow15); + double fSlow22 = (0.43301700000000004 * fSlow4); + double fSlow23 = (0.335413669149 * fSlow9); + double fSlow24 = (0.335413669149 * fSlow8); + double fSlow25 = (0.0 - (0.193651264638 * fSlow7)); + double fSlow26 = (0.0 - (0.335413669149 * fSlow7)); + double fSlow27 = (0.14907119265000002 * fSlow9); + double fSlow28 = (fSlow14 * fSlow6); + double fSlow29 = (0.16666405622891672 * fSlow28); + double fSlow30 = (fSlow20 * fSlow6); + double fSlow31 = (0.17251367312221164 * fSlow30); + double fSlow32 = (0.0 - (0.14907119265000002 * fSlow7)); + double fSlow33 = (0.19245000000000004 * fSlow6); + double fSlow34 = (0.16666405622891672 * fSlow17); + double fSlow35 = (0.055554711935999999 * fSlow11); + double fSlow36 = (0.16666405622891672 * fSlow21); + double fSlow37 = (0.11112 - (fSlow35 + fSlow36)); + double fSlow38 = (0.14907119265000002 * fSlow8); + double fSlow39 = (0.0 - (0.086066334300000019 * fSlow7)); + double fSlow40 = (0.14085684693651698 * fSlow19); + double fSlow41 = (0.089085626687999991 * fSlow11); + double fSlow42 = (0.044542895106113686 * fSlow21); + double fSlow43 = (fSlow41 + fSlow42); + double fSlow44 = (0.0 - (0.10910728580834947 * fSlow18)); + double fSlow45 = (0.0 - (0.044542895106113686 * fSlow16)); + double fSlow46 = (0.0 - (0.14085684693651698 * fSlow18)); + double fSlow47 = (0.0 - (0.17251367312221164 * fSlow16)); + double fSlow48 = (0.335413669149 * fSlow6); + double fSlow49 = (0.14085684693651698 * fSlow28); + double fSlow50 = (0.14085684693651698 * fSlow30); + double fSlow51 = (0.1781713652621752 * fSlow4); + double fSlow52 = (0.1781713652621752 * fSlow9); + double fSlow53 = ((0.111109299648 * fSlow11) + 0.11112); + double fSlow54 = (0.10910718143999999 * fSlow11); + double fSlow55 = (0.43301700000000004 * fSlow9); + double fSlow56 = (0.335413669149 * fSlow4); + double fSlow57 = (0.0 - (0.193651264638 * fSlow10)); + double fSlow58 = (0.19245000000000004 * fSlow9); + double fSlow59 = (0.14907119265000002 * fSlow4); + double fSlow60 = (0.17251367312221164 * fSlow28); + double fSlow61 = (0.14085684693651698 * fSlow17); + double fSlow62 = (fSlow41 - fSlow42); + double fSlow63 = (0.0 - (0.10910728580834947 * fSlow19)); + double fSlow64 = (0.14907119265000002 * fSlow6); + double fSlow65 = (0.0 - (0.086066334300000019 * fSlow10)); + double fSlow66 = (fSlow36 + (0.11112 - fSlow35)); + double fSlow67 = (0.34718610232800001 * fSlow9); + double fSlow68 = (0.28347631111800004 * fSlow8); + double fSlow69 = (0.0 - (0.089643179340000004 * fSlow10)); + double fSlow70 = (0.0 - (0.089643179340000004 * fSlow7)); + double fSlow71 = (0.0 - (0.34718610232800001 * fSlow7)); + double fSlow72 = (0.2151622795194362 * fSlow28); + double fSlow73 = (0.15430333080000003 * fSlow9); + double fSlow74 = (0.11904563149935221 * fSlow17); + double fSlow75 = (0.0 - (0.13746223165253885 * fSlow16)); + double fSlow76 = (0.079363856447999995 * fSlow11); + double fSlow77 = (0.11112 - fSlow76); + double fSlow78 = (0.12598816230000001 * fSlow8); + double fSlow79 = (0.0 - (0.039840999000000009 * fSlow10)); + double fSlow80 = (0.0 - (0.039840999000000009 * fSlow7)); + double fSlow81 = (0.0 - (0.15430333080000003 * fSlow7)); + double fSlow82 = (0.28347631111800004 * fSlow10); + double fSlow83 = (0.35857228434300004 * fSlow8); + double fSlow84 = (0.0 - (0.219579889581 * fSlow7)); + double fSlow85 = (0.0 - (0.28347631111800004 * fSlow7)); + double fSlow86 = (0.0 - (0.11904563149935221 * fSlow18)); + double fSlow87 = (0.2151622795194362 * fSlow17); + double fSlow88 = (0.068731008245129663 * fSlow17); + double fSlow89 = (0.039681866111999996 * fSlow11); + double fSlow90 = (0.11904563149935221 * fSlow21); + double fSlow91 = (fSlow89 + (0.11112 - fSlow90)); + double fSlow92 = (0.12598816230000001 * fSlow10); + double fSlow93 = (0.0 - (0.097590047850000028 * fSlow7)); + double fSlow94 = (0.0 - (0.12598816230000001 * fSlow7)); + double fSlow95 = (0.31053251232900003 * fSlow6); + double fSlow96 = (0.0 - (0.13746223165253885 * fSlow21)); + double fSlow97 = (fSlow76 + 0.11112); + double fSlow98 = (0.13801301565000001 * fSlow6); + double fSlow99 = (0.28347631111800004 * fSlow6); + double fSlow100 = (0.0 - (0.219579889581 * fSlow10)); + double fSlow101 = (0.0 - (0.097590047850000028 * fSlow10)); + double fSlow102 = ((fSlow89 + fSlow90) + 0.11112); + double fSlow103 = (0.12598816230000001 * fSlow6); + double fSlow104 = (0.34718610232800001 * fSlow4); + double fSlow105 = (0.089643179340000004 * fSlow4); + double fSlow106 = (0.15430333080000003 * fSlow6); + double fSlow107 = (0.2151622795194362 * fSlow30); + double fSlow108 = (0.15430333080000003 * fSlow4); + double fSlow109 = (0.039840999000000009 * fSlow4); + double fSlow110 = (0.34718610232800001 * fSlow6); + double fSlow111 = (0.11340041877160077 * fSlow17); + double fSlow112 = (0.0 - (0.071720688119052231 * fSlow16)); + double fSlow113 = (0.17251367312221164 * fSlow6); + double fSlow114 = (0.11112 - (0.092591103744000008 * fSlow11)); + double fSlow115 = (0.0 - (0.071720688119052231 * fSlow21)); + double fSlow116 = (0.087839570289250796 * fSlow4); + double fSlow117 = (0.0 - (0.14344159140038398 * fSlow16)); + double fSlow118 = (0.0 - (0.11340041877160077 * fSlow18)); + double fSlow119 = (0.087839570289250796 * fSlow9); + double fSlow120 = (0.045360296606008023 * fSlow4); + double fSlow121 = (0.15936380355000002 * fSlow8); + double fSlow122 = (0.1781713652621752 * fSlow17); + double fSlow123 = (0.039840999000000009 * fSlow6); + double fSlow124 = (0.11110937081927783 * fSlow21); + double fSlow125 = (fSlow35 + (0.11112 - fSlow124)); + double fSlow126 = (0.0 - (0.087839570289250796 * fSlow18)); + double fSlow127 = (0.38032316126999999 * fSlow8); + double fSlow128 = (0.045360296606008023 * fSlow17); + double fSlow129 = (0.16903075950000004 * fSlow8); + double fSlow130 = ((0.074072907839999994 * fSlow11) + 0.11112); + double fSlow131 = (0.0 - (0.14344159140038398 * fSlow21)); + double fSlow132 = (0.31053251232900003 * fSlow10); + double fSlow133 = (0.087839570289250796 * fSlow17); + double fSlow134 = ((fSlow35 + fSlow124) + 0.11112); + double fSlow135 = (0.045360296606008023 * fSlow9); + double fSlow136 = (0.11110937081927783 * fSlow16); + double fSlow137 = (0.11340041877160077 * fSlow4); + double fSlow138 = (0.11340041877160077 * fSlow9); + double fSlow139 = (0.34718610232800001 * fSlow10); + double fSlow140 = (0.071720688119052231 * fSlow28); + double fSlow141 = (0.11340041877160077 * fSlow19); + double fSlow142 = (0.353557081449 * fSlow6); + double fSlow143 = (0.15713484765000002 * fSlow9); + double fSlow144 = (0.18184526118496958 * fSlow6); + double fSlow145 = (0.15713484765000002 * fSlow4); + double fSlow146 = (0.25000236495 * fSlow8); + double fSlow147 = (0.30618935181900003 * fSlow6); + double fSlow148 = (0.11111100750000003 * fSlow8); + double fSlow149 = (0.13608274215000005 * fSlow6); + double fSlow150 = (0.0 - (0.066815822151000001 * fSlow10)); + double fSlow151 = (0.32733010779299998 * fSlow8); + double fSlow152 = (0.066815822151000001 * fSlow4); + double fSlow153 = (0.0 - (0.029695612350000001 * fSlow10)); + double fSlow154 = (0.068731027392000002 * fSlow11); + double fSlow155 = (0.13746223165253885 * fSlow17); + double fSlow156 = (0.14547853605000002 * fSlow8); + double fSlow157 = (0.11501081430000001 * fSlow9); + double fSlow158 = (0.11904563149935221 * fSlow28); + double fSlow159 = (0.11501081430000001 * fSlow4); + double fSlow160 = (0.029695612350000001 * fSlow4); + double fSlow161 = (0.0 - (0.11572855643700003 * fSlow10)); + double fSlow162 = (0.365966049618 * fSlow8); + double fSlow163 = (0.0 - (0.051434379450000019 * fSlow10)); + double fSlow164 = (0.0 - (0.048600210211011685 * fSlow16)); + double fSlow165 = (0.097200435264000004 * fSlow11); + double fSlow166 = (0.048600210211011685 * fSlow21); + double fSlow167 = (fSlow165 + fSlow166); + double fSlow168 = (0.0 - (0.048600210211011685 * fSlow19)); + double fSlow169 = (0.16264988730000002 * fSlow8); + double fSlow170 = (0.13280320170000001 * fSlow6); + double fSlow171 = (0.051434379450000019 * fSlow6); + double fSlow172 = (0.0 - (0.23145711287400006 * fSlow7)); + double fSlow173 = (0.37796841482400001 * fSlow8); + double fSlow174 = (0.0 - (0.23145711287400006 * fSlow10)); + double fSlow175 = (0.0 - (0.10286875890000004 * fSlow7)); + double fSlow176 = (0.030737437765308104 * fSlow15); + double fSlow177 = (0.0 - (0.12294996622351191 * fSlow19)); + double fSlow178 = (0.0 - (0.12294996622351191 * fSlow18)); + double fSlow179 = (0.10647773203199999 * fSlow11); + double fSlow180 = (0.16798421640000002 * fSlow8); + double fSlow181 = (0.0 - (0.10286875890000004 * fSlow10)); + double fSlow182 = (0.29881030912199996 * fSlow10); + double fSlow183 = (0.0 - (0.11572855643700003 * fSlow7)); + double fSlow184 = (0.16835609239505758 * fSlow17); + double fSlow185 = (0.0 - (0.051434379450000019 * fSlow7)); + double fSlow186 = (fSlow165 - fSlow166); + double fSlow187 = (0.0 - (0.048600210211011685 * fSlow18)); + double fSlow188 = (0.0 - (0.25877702143799997 * fSlow7)); + double fSlow189 = (0.0 - (0.066815822151000001 * fSlow7)); + double fSlow190 = (0.25877702143799997 * fSlow10); + double fSlow191 = (0.11501081430000001 * fSlow6); + double fSlow192 = (0.0 - (0.11501081430000001 * fSlow7)); + double fSlow193 = (0.0 - (0.029695612350000001 * fSlow7)); + double fSlow194 = (0.0 - (0.13746223165253885 * fSlow18)); + double fSlow195 = (0.0 - (0.30618935181900003 * fSlow7)); + double fSlow196 = (0.30618935181900003 * fSlow10); + double fSlow197 = (0.0 - (0.13608274215000005 * fSlow7)); + double fSlow198 = (0.0 - (0.12858399051272834 * fSlow16)); + double fSlow199 = (0.0 - (0.12858399051272834 * fSlow18)); + double fSlow200 = (0.13608274215000005 * fSlow10); + double fSlow201 = (0.0 - (0.353557081449 * fSlow7)); + double fSlow202 = (0.353557081449 * fSlow10); + double fSlow203 = (0.18184526118496958 * fSlow30); + double fSlow204 = (0.0 - (0.18184526118496958 * fSlow16)); + double fSlow205 = (0.0 - (0.15713484765000002 * fSlow7)); + double fSlow206 = (0.18727466614636304 * fSlow15); + double fSlow207 = (0.14506240885200392 * fSlow15); + double fSlow208 = (0.11844296195441828 * fSlow17); + double fSlow209 = (0.10812313354182758 * fSlow15); + double fSlow210 = (0.055834588607999995 * fSlow11); + double fSlow211 = (0.13676618167829349 * fSlow17); + double fSlow212 = (0.0 - (0.034191437838433605 * fSlow19)); + double fSlow213 = (0.083751820800000001 * fSlow11); + double fSlow214 = (0.10812313354182758 * fSlow16); + double fSlow215 = (0.034191437838433605 * fSlow4); + double fSlow216 = (0.012923184413636137 * fSlow21); + double fSlow217 = (0.0 - (0.063310424937196505 * fSlow19)); + double fSlow218 = (0.10010255635199999 * fSlow11); + double fSlow219 = (0.05005126462409077 * fSlow21); + double fSlow220 = (fSlow218 + fSlow219); + double fSlow221 = (0.0 - (0.05005126462409077 * fSlow16)); + double fSlow222 = (0.0 - (0.012923184413636137 * fSlow16)); + double fSlow223 = (0.04086663239824459 * fSlow15); + double fSlow224 = (0.0 - (0.12923184413636135 * fSlow19)); + double fSlow225 = (0.0 - (0.12923184413636135 * fSlow18)); + double fSlow226 = (0.10551735628799999 * fSlow11); + double fSlow227 = (0.012923184413636137 * fSlow15); + double fSlow228 = (fSlow218 - fSlow219); + double fSlow229 = (0.0 - (0.063310424937196505 * fSlow18)); + double fSlow230 = (0.16346674475525791 * fSlow19); + double fSlow231 = (0.10812313354182758 * fSlow21); + double fSlow232 = (0.0 - (0.13242313106619366 * fSlow18)); + double fSlow233 = (0.0 - (0.034191437838433605 * fSlow18)); + double fSlow234 = (0.13242313106619366 * fSlow19); + double fSlow235 = (0.0 - fSlow214); + double fSlow236 = (0.0 - (0.13676618167829349 * fSlow18)); + double fSlow237 = (0.13676618167829349 * fSlow19); + double fSlow238 = (0.0 - (0.14506240885200392 * fSlow16)); + double fSlow239 = (0.0 - (0.11844296195441828 * fSlow18)); + double fSlow240 = (0.14506240885200392 * fSlow21); + double fSlow241 = (0.11844296195441828 * fSlow19); + double fSlow242 = (0.0 - (0.18727466614636304 * fSlow16)); + double fSlow243 = (0.18727466614636304 * fSlow21); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + double fTemp1 = double(input1[i]); + double fTemp2 = double(input2[i]); + double fTemp3 = double(input3[i]); + double fTemp4 = (((fSlow7 * fTemp1) + (fSlow8 * fTemp2)) + (fSlow10 * fTemp3)); + double fTemp5 = double(input6[i]); + double fTemp6 = double(input4[i]); + double fTemp7 = double(input5[i]); + double fTemp8 = double(input7[i]); + double fTemp9 = double(input8[i]); + output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + (((0.19245000000000004 * fTemp4) + (fSlow12 * fTemp5)) + (0.2151622795194362 * ((((fSlow16 * fTemp6) + (fSlow18 * fTemp7)) + (fSlow19 * fTemp8)) + (fSlow21 * fTemp9))))):(iSlow2?((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4)):fTemp0))); + double fTemp10 = double(input9[i]); + double fTemp11 = (fSlow34 * fTemp2); + double fTemp12 = double(input10[i]); + double fTemp13 = double(input11[i]); + double fTemp14 = double(input12[i]); + double fTemp15 = double(input13[i]); + double fTemp16 = double(input14[i]); + double fTemp17 = double(input15[i]); + output1[i] = FAUSTFLOAT((iSlow1?((((((((fSlow6 * (((fSlow27 * fTemp6) + (fSlow29 * fTemp3)) + (fSlow31 * fTemp10))) + ((fSlow32 * fTemp9) + (((fSlow4 * ((fSlow33 * fTemp0) + fTemp11)) + ((fSlow37 * fTemp1) + (fSlow38 * fTemp7))) + (fSlow39 * fTemp5)))) + (fSlow40 * fTemp12)) + (fSlow43 * fTemp13)) + (fSlow44 * fTemp14)) + (fSlow45 * fTemp15)) + (fSlow46 * fTemp16)) + (fSlow47 * fTemp17)):(iSlow2?((0.24993000000000001 * fTemp1) + ((((fSlow6 * ((fSlow22 * fTemp0) + (fSlow23 * fTemp6))) + (fSlow24 * fTemp7)) + (fSlow25 * fTemp5)) + (fSlow26 * fTemp9))):fTemp1))); + double fTemp18 = ((fSlow4 * fTemp7) + (fSlow9 * fTemp8)); + output2[i] = FAUSTFLOAT((iSlow1?((fSlow6 * (((0.14907119265000002 * fTemp18) + (fSlow49 * fTemp12)) + (fSlow50 * fTemp16))) + ((fSlow17 * (((0.16666405622891672 * ((fSlow4 * fTemp1) + (fSlow9 * fTemp3))) + (fSlow51 * fTemp13)) + (fSlow52 * fTemp15))) + (((fSlow53 * fTemp2) + (fSlow8 * ((0.19245000000000004 * fTemp0) + (0.17213247615000002 * fTemp5)))) + (fSlow54 * fTemp14)))):(iSlow2?((0.24993000000000001 * fTemp2) + ((fSlow8 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp5))) + (fSlow48 * fTemp18))):fTemp2))); + double fTemp19 = ((fSlow4 * fTemp12) + (fSlow9 * fTemp16)); + output3[i] = FAUSTFLOAT((iSlow1?((fSlow6 * (((((fSlow58 * fTemp0) + (fSlow29 * fTemp1)) + (fSlow59 * fTemp6)) + (fSlow60 * fTemp10)) + (fSlow31 * fTemp17))) + ((fSlow61 * fTemp19) + ((fSlow62 * fTemp15) + ((fSlow63 * fTemp14) + (((fSlow9 * (fTemp11 + (fSlow64 * fTemp9))) + ((fSlow65 * fTemp5) + ((fSlow66 * fTemp3) + (fSlow38 * fTemp8)))) + (fSlow45 * fTemp13)))))):(iSlow2?((0.24993000000000001 * fTemp3) + ((fSlow6 * (((fSlow55 * fTemp0) + (fSlow56 * fTemp6)) + (fSlow23 * fTemp9))) + ((fSlow57 * fTemp5) + (fSlow24 * fTemp8)))):fTemp3))); + double fTemp20 = ((fSlow9 * fTemp7) + (fSlow4 * fTemp8)); + output4[i] = FAUSTFLOAT((iSlow1?(((((fSlow6 * ((((fSlow27 * fTemp1) + (fSlow72 * fTemp0)) + (fSlow59 * fTemp3)) + (fSlow73 * fTemp10))) + ((fSlow74 * fTemp20) + ((fSlow75 * fTemp5) + ((fSlow77 * fTemp6) + (fSlow78 * fTemp12))))) + (fSlow79 * fTemp13)) + (fSlow80 * fTemp15)) + (fSlow81 * fTemp17)):(iSlow2?((0.24993000000000001 * fTemp6) + (((((fSlow6 * ((0.335413669149 * ((fSlow9 * fTemp1) + (fSlow4 * fTemp3))) + (fSlow67 * fTemp10))) + (fSlow68 * fTemp12)) + (fSlow69 * fTemp13)) + (fSlow70 * fTemp15)) + (fSlow71 * fTemp17))):fTemp6))); + double fTemp21 = (fSlow19 * fTemp6); + double fTemp22 = (fSlow16 * fTemp8); + double fTemp23 = (((fSlow64 * fTemp2) + (fSlow87 * fTemp0)) + (fSlow88 * fTemp5)); + output5[i] = FAUSTFLOAT((iSlow1?((((fSlow8 * ((0.14907119265000002 * fTemp1) + (0.15936380355000002 * fTemp13))) + ((fSlow86 * fTemp9) + ((0.11904563149935221 * (fTemp21 + fTemp22)) + ((fSlow4 * fTemp23) + ((fSlow91 * fTemp7) + (fSlow92 * fTemp12)))))) + (fSlow93 * fTemp14)) + (fSlow94 * fTemp16)):(iSlow2?((0.24993000000000001 * fTemp7) + (((((0.335413669149 * ((fSlow8 * fTemp1) + (fSlow7 * fTemp2))) + (fSlow82 * fTemp12)) + (fSlow83 * fTemp13)) + (fSlow84 * fTemp14)) + (fSlow85 * fTemp16))):fTemp7))); + double fTemp24 = ((fSlow4 * fTemp13) + (fSlow9 * fTemp15)); + output6[i] = FAUSTFLOAT((iSlow1?((fSlow8 * ((0.17213247615000002 * fTemp2) + (0.16903075950000004 * fTemp14))) + ((fSlow96 * fTemp9) + ((fSlow88 * fTemp18) + ((fSlow97 * fTemp5) + ((fSlow75 * fTemp6) + ((fSlow65 * fTemp3) + ((fSlow39 * fTemp1) + ((fSlow12 * fTemp0) + (fSlow98 * fTemp24))))))))):(iSlow2?((0.24993000000000001 * fTemp5) + ((fSlow95 * fTemp24) + ((fSlow8 * ((0.38730209625899997 * fTemp2) + (0.38032316126999999 * fTemp14))) + ((fSlow25 * fTemp1) + (fSlow57 * fTemp3))))):fTemp5))); + output7[i] = FAUSTFLOAT((iSlow1?((fSlow8 * ((0.14907119265000002 * fTemp3) + (0.15936380355000002 * fTemp15))) + ((fSlow101 * fTemp14) + ((fSlow9 * (fTemp23 + (fSlow74 * fTemp9))) + ((fSlow102 * fTemp8) + ((0.11904563149935221 * ((fSlow18 * fTemp6) + (fSlow16 * fTemp7))) + (fSlow103 * fTemp19)))))):(iSlow2?((0.24993000000000001 * fTemp8) + ((fSlow99 * fTemp19) + ((fSlow83 * fTemp15) + ((0.335413669149 * ((fSlow10 * fTemp2) + (fSlow8 * fTemp3))) + (fSlow100 * fTemp14))))):fTemp8))); + output8[i] = FAUSTFLOAT((iSlow1?((fSlow9 * ((fSlow74 * fTemp8) + (fSlow106 * fTemp17))) + ((fSlow79 * fTemp15) + ((fSlow6 * ((((fSlow27 * fTemp3) + (fSlow107 * fTemp0)) + (fSlow108 * fTemp10)) + (fSlow109 * fTemp13))) + ((fSlow77 * fTemp9) + ((fSlow86 * fTemp7) + ((fSlow96 * fTemp5) + ((fSlow32 * fTemp1) + (fSlow78 * fTemp16)))))))):(iSlow2?((0.24993000000000001 * fTemp9) + ((fSlow6 * ((((fSlow23 * fTemp3) + (fSlow104 * fTemp10)) + (fSlow105 * fTemp13)) + (fSlow67 * fTemp17))) + ((fSlow68 * fTemp16) + ((fSlow26 * fTemp1) + (fSlow69 * fTemp15))))):fTemp9))); + double fTemp25 = ((fSlow9 * fTemp12) + (fSlow4 * fTemp16)); + output9[i] = FAUSTFLOAT((iSlow1?((fSlow111 * fTemp25) + ((fSlow112 * fTemp15) + (((fSlow6 * (((fSlow73 * fTemp6) + (fSlow113 * ((fSlow14 * fTemp3) + (fSlow20 * fTemp1)))) + (fSlow108 * fTemp9))) + (fSlow114 * fTemp10)) + (fSlow115 * fTemp13)))):(iSlow2?((fSlow110 * ((fSlow9 * fTemp6) + (fSlow4 * fTemp9))) + (0.24993000000000001 * fTemp10)):fTemp10))); + double fTemp26 = (((fSlow8 * fTemp6) + (fSlow10 * fTemp7)) + (fSlow7 * fTemp8)); + output10[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp12) + (((fSlow17 * ((fSlow9 * ((0.11340041877160077 * fTemp10) + (0.087839570289250796 * fTemp13))) + (fSlow116 * fTemp15))) + (((0.14085684693651698 * (((fSlow19 * fTemp1) + (fSlow16 * fTemp2)) + (fSlow18 * fTemp3))) + (0.12598816230000001 * fTemp26)) + (fSlow117 * fTemp14))) + (fSlow118 * fTemp17))):(iSlow2?((0.28347631111800004 * fTemp26) + (0.24993000000000001 * fTemp12)):fTemp12))); + double fTemp27 = ((fSlow122 * fTemp2) + (fSlow98 * fTemp5)); + output11[i] = FAUSTFLOAT((iSlow1?((fSlow16 * ((0.11110937081927783 * fTemp15) + (0.071720688119052231 * fTemp17))) + (((fSlow17 * ((fSlow119 * fTemp12) + (fSlow120 * fTemp14))) + (((((fSlow79 * fTemp6) + ((fSlow45 * fTemp3) + ((fSlow43 * fTemp1) + (fSlow121 * fTemp7)))) + (fSlow4 * (fTemp27 + (fSlow123 * fTemp9)))) + (fSlow115 * fTemp10)) + (fSlow125 * fTemp13))) + (fSlow126 * fTemp16))):(iSlow2?((((fSlow69 * fTemp6) + (fSlow83 * fTemp7)) + (fSlow7 * ((0.31053251232900003 * fTemp5) + (0.089643179340000004 * fTemp9)))) + (0.24993000000000001 * fTemp13)):fTemp13))); + output12[i] = FAUSTFLOAT((iSlow1?(((fSlow128 * fTemp24) + (((fSlow101 * fTemp8) + ((fSlow93 * fTemp7) + ((fSlow63 * fTemp3) + ((fSlow54 * fTemp2) + ((fSlow44 * fTemp1) + ((fSlow117 * fTemp12) + (fSlow129 * fTemp5))))))) + (fSlow130 * fTemp14))) + (fSlow131 * fTemp16)):(iSlow2?((((fSlow84 * fTemp7) + (fSlow127 * fTemp5)) + (fSlow100 * fTemp8)) + (0.24993000000000001 * fTemp14)):fTemp14))); + output13[i] = FAUSTFLOAT((iSlow1?(((fSlow9 * (fTemp27 + (fSlow133 * fTemp16))) + ((fSlow134 * fTemp15) + ((fSlow17 * ((fSlow116 * fTemp12) + (fSlow135 * fTemp14))) + ((fSlow136 * fTemp13) + ((fSlow112 * fTemp10) + (((fSlow80 * fTemp6) + ((fSlow62 * fTemp3) + ((fSlow45 * fTemp1) + (fSlow121 * fTemp8)))) + (fSlow79 * fTemp9))))))) + (fSlow115 * fTemp17)):(iSlow2?((((fSlow132 * fTemp5) + ((fSlow70 * fTemp6) + (fSlow83 * fTemp8))) + (fSlow69 * fTemp9)) + (0.24993000000000001 * fTemp15)):fTemp15))); + double fTemp28 = ((fSlow10 * fTemp8) + (fSlow8 * fTemp9)); + output14[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp16) + (((fSlow131 * fTemp14) + (((fSlow94 * fTemp7) + ((0.14085684693651698 * ((fSlow19 * fTemp3) + (fSlow21 * fTemp2))) + ((fSlow46 * fTemp1) + (0.12598816230000001 * fTemp28)))) + (fSlow126 * fTemp13))) + (fSlow17 * (((fSlow119 * fTemp15) + (fSlow137 * fTemp10)) + (fSlow138 * fTemp17))))):(iSlow2?(((fSlow85 * fTemp7) + (0.28347631111800004 * fTemp28)) + (0.24993000000000001 * fTemp16)):fTemp16))); + output15[i] = FAUSTFLOAT((iSlow1?(((fSlow115 * fTemp15) + ((fSlow6 * (((fSlow73 * fTemp9) + (fSlow31 * fTemp3)) + (fSlow140 * fTemp13))) + ((fSlow118 * fTemp12) + ((fSlow81 * fTemp6) + ((fSlow47 * fTemp1) + (fSlow141 * fTemp16)))))) + (fSlow114 * fTemp17)):(iSlow2?(((fSlow71 * fTemp6) + (fSlow139 * fTemp9)) + (0.24993000000000001 * fTemp17)):fTemp17))); + double fTemp29 = ((fSlow9 * fTemp10) + (fSlow4 * fTemp17)); + output16[i] = FAUSTFLOAT((iSlow1?(fSlow6 * (((fSlow143 * fTemp10) + (fSlow144 * ((fSlow20 * fTemp6) + (fSlow14 * fTemp9)))) + (fSlow145 * fTemp17))):(iSlow2?(fSlow142 * fTemp29):0.0))); + output17[i] = FAUSTFLOAT((iSlow1?((0.12858399051272834 * ((fTemp22 + (fTemp21 + (fSlow21 * fTemp7))) + (fSlow18 * fTemp9))) + ((fSlow148 * fTemp10) + (fSlow149 * fTemp25))):(iSlow2?((fSlow146 * fTemp10) + (fSlow147 * fTemp25)):0.0))); + double fTemp30 = ((fSlow4 * fTemp15) + (fSlow9 * fTemp13)); + output18[i] = FAUSTFLOAT((iSlow1?(((fSlow153 * fTemp10) + ((fSlow154 * fTemp6) + ((fSlow155 * fTemp20) + (fSlow156 * fTemp12)))) + (fSlow6 * ((((fSlow157 * fTemp13) + (fSlow158 * fTemp5)) + (fSlow159 * fTemp15)) + (fSlow160 * fTemp17)))):(iSlow2?(((fSlow150 * fTemp10) + (fSlow151 * fTemp12)) + (fSlow6 * ((fSlow152 * fTemp17) + (0.25877702143799997 * fTemp30)))):0.0))); + double fTemp31 = (fSlow170 * fTemp14); + output19[i] = FAUSTFLOAT((iSlow1?(((fSlow163 * fTemp12) + ((fSlow164 * fTemp8) + ((fSlow167 * fTemp7) + ((fSlow168 * fTemp6) + (fSlow169 * fTemp13))))) + (fSlow4 * (((fSlow17 * ((0.16835609239505758 * fTemp5) + (0.048600210211011685 * fTemp9))) + fTemp31) + (fSlow171 * fTemp16)))):(iSlow2?(((fSlow161 * fTemp12) + (fSlow162 * fTemp13)) + (fSlow7 * ((0.29881030912199996 * fTemp14) + (0.11572855643700003 * fTemp16)))):0.0))); + output20[i] = FAUSTFLOAT((iSlow1?(((fSlow175 * fTemp13) + ((fSlow176 * ((fSlow14 * fTemp6) + (fSlow20 * fTemp9))) + ((fSlow177 * fTemp8) + ((fSlow178 * fTemp7) + ((fSlow179 * fTemp5) + (fSlow180 * fTemp14)))))) + (fSlow181 * fTemp15)):(iSlow2?(((fSlow172 * fTemp13) + (fSlow173 * fTemp14)) + (fSlow174 * fTemp15)):0.0))); + output21[i] = FAUSTFLOAT((iSlow1?(((fSlow9 * (fTemp31 + (fSlow184 * fTemp5))) + ((fSlow185 * fTemp12) + ((fSlow168 * fTemp9) + ((fSlow186 * fTemp8) + ((fSlow164 * fTemp7) + ((fSlow187 * fTemp6) + (fSlow169 * fTemp15))))))) + (fSlow163 * fTemp16)):(iSlow2?(((fSlow182 * fTemp14) + ((fSlow183 * fTemp12) + (fSlow162 * fTemp15))) + (fSlow161 * fTemp16)):0.0))); + output22[i] = FAUSTFLOAT((iSlow1?(((fSlow9 * ((fSlow155 * fTemp8) + (fSlow191 * fTemp15))) + ((fSlow192 * fTemp13) + ((fSlow193 * fTemp10) + ((fSlow154 * fTemp9) + ((fSlow90 * fTemp5) + ((fSlow194 * fTemp7) + (fSlow156 * fTemp16))))))) + (fSlow153 * fTemp17)):(iSlow2?(((fSlow188 * fTemp13) + ((fSlow189 * fTemp10) + ((fSlow190 * fTemp15) + (fSlow151 * fTemp16)))) + (fSlow150 * fTemp17)):0.0))); + output23[i] = FAUSTFLOAT((iSlow1?((fSlow197 * fTemp12) + ((0.12858399051272834 * ((fSlow19 * fTemp9) + (fSlow21 * fTemp8))) + ((fSlow198 * fTemp7) + ((fSlow199 * fTemp6) + ((fSlow200 * fTemp16) + (fSlow148 * fTemp17)))))):(iSlow2?(((fSlow195 * fTemp12) + (fSlow196 * fTemp16)) + (fSlow146 * fTemp17)):0.0))); + output24[i] = FAUSTFLOAT((iSlow1?((fSlow6 * ((fSlow143 * fTemp17) + (fSlow203 * fTemp9))) + ((fSlow204 * fTemp6) + (fSlow205 * fTemp10))):(iSlow2?((fSlow201 * fTemp10) + (fSlow202 * fTemp17)):0.0))); + output25[i] = FAUSTFLOAT((iSlow1?(fSlow206 * ((fSlow20 * fTemp10) + (fSlow14 * fTemp17))):0.0)); + output26[i] = FAUSTFLOAT((iSlow1?((fSlow207 * ((fSlow20 * fTemp12) + (fSlow14 * fTemp16))) + (fSlow208 * fTemp29)):0.0)); + output27[i] = FAUSTFLOAT((iSlow1?((fSlow209 * ((fSlow14 * fTemp15) + (fSlow20 * fTemp13))) + ((fSlow210 * fTemp10) + (fSlow211 * fTemp25))):0.0)); + output28[i] = FAUSTFLOAT((iSlow1?((((fSlow212 * fTemp10) + (fSlow213 * fTemp12)) + (fSlow214 * fTemp14)) + (fSlow17 * ((fSlow215 * fTemp17) + (0.13242313106619366 * fTemp30)))):0.0)); + output29[i] = FAUSTFLOAT((iSlow1?(((fSlow18 * ((0.16346674475525791 * fTemp14) + (0.063310424937196505 * fTemp16))) + ((((fSlow216 * fTemp10) + (fSlow217 * fTemp12)) + (fSlow220 * fTemp13)) + (fSlow221 * fTemp15))) + (fSlow222 * fTemp17)):0.0)); + output30[i] = FAUSTFLOAT((iSlow1?((fSlow223 * ((fSlow14 * fTemp12) + (fSlow20 * fTemp16))) + ((fSlow224 * fTemp15) + ((fSlow225 * fTemp13) + (fSlow226 * fTemp14)))):0.0)); + output31[i] = FAUSTFLOAT((iSlow1?((fSlow227 * ((fSlow14 * fTemp10) + (fSlow20 * fTemp17))) + ((fSlow217 * fTemp16) + ((fSlow228 * fTemp15) + ((fSlow221 * fTemp13) + ((fSlow229 * fTemp12) + (fSlow230 * fTemp14)))))):0.0)); + output32[i] = FAUSTFLOAT((iSlow1?((((fSlow231 * fTemp14) + ((fSlow232 * fTemp13) + ((fSlow233 * fTemp10) + (fSlow234 * fTemp15)))) + (fSlow213 * fTemp16)) + (fSlow212 * fTemp17)):0.0)); + output33[i] = FAUSTFLOAT((iSlow1?(((fSlow231 * fTemp15) + ((fSlow235 * fTemp13) + ((fSlow236 * fTemp12) + (fSlow237 * fTemp16)))) + (fSlow210 * fTemp17)):0.0)); + output34[i] = FAUSTFLOAT((iSlow1?((fSlow238 * fTemp12) + ((fSlow239 * fTemp10) + ((fSlow240 * fTemp16) + (fSlow241 * fTemp17)))):0.0)); + output35[i] = FAUSTFLOAT((iSlow1?((fSlow242 * fTemp10) + (fSlow243 * fTemp17)):0.0)); + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamHCardio2Mono1.cpp b/source/HOAUGens/HOABeamHCardio2Mono1.cpp new file mode 100755 index 0000000000..b05bd9dc2a --- /dev/null +++ b/source/HOAUGens/HOABeamHCardio2Mono1.cpp @@ -0,0 +1,1196 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOABeamHCardio2Mono1" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double sin(double dummy0); +double cos(double dummy0); + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + FAUSTFLOAT fVslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec0[2]; + FAUSTFLOAT fHbargraph0; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamHCardio2Mono1"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 1; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec0[l5] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOABeamHCardio2Mono1"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dd3650", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ddbb70", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1de1440", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1de70d0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->addVerticalSlider("Output Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "3", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Output"); + ui_interface->declare(&fHbargraph0, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x1debef0", &fHbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* output0 = outputs[0]; + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = double(fVslider1); + double fSlow2 = double(fVslider2); + double fSlow3 = cos(fSlow2); + double fSlow4 = (sin(fSlow1) * fSlow3); + double fSlow5 = sin(fSlow2); + double fSlow6 = (cos(fSlow1) * fSlow3); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + double fTemp0 = double(input0[i]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = double(input2[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec4[0]); + double fTemp3 = double(input3[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (fRec1[0] * ((0.24993000000000001 * fTemp0) + (0.43301700000000004 * (((fSlow4 * fTemp1) + (fSlow5 * fTemp2)) + (fSlow6 * fTemp3))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fHbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp4); + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec0[1] = fRec0[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamHCardio2Mono2.cpp b/source/HOAUGens/HOABeamHCardio2Mono2.cpp new file mode 100755 index 0000000000..544130632f --- /dev/null +++ b/source/HOAUGens/HOABeamHCardio2Mono2.cpp @@ -0,0 +1,1313 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOABeamHCardio2Mono2" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec0[2]; + FAUSTFLOAT fHbargraph0; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamHCardio2Mono2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 1; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(1.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec0[l10] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOABeamHCardio2Mono2"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ec8e30", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ed1720", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ed6ff0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1edce90", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ef7260", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1efc8c0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ee4a50", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ef16d0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1eeb6f0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider0, "1", ""); + ui_interface->addVerticalSlider("Order", &fVslider0, 1.0, 1.0, 2.0, 1.0); + ui_interface->declare(&fVslider1, "2", ""); + ui_interface->addVerticalSlider("Output Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Output"); + ui_interface->declare(&fHbargraph0, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x1f01c80", &fHbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* output0 = outputs[0]; + int iSlow0 = ((int(double(fVslider0)) + -1) >= 1); + double fSlow1 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + double fSlow2 = double(fVslider2); + double fSlow3 = sin(fSlow2); + double fSlow4 = double(fVslider3); + double fSlow5 = cos(fSlow4); + double fSlow6 = (fSlow3 * fSlow5); + double fSlow7 = sin(fSlow4); + double fSlow8 = cos(fSlow2); + double fSlow9 = (fSlow8 * fSlow5); + double fSlow10 = (0.124224 * ((3.0 * mydsp_faustpower2_f(fSlow7)) + -1.0)); + double fSlow11 = (2.0 * fSlow2); + double fSlow12 = mydsp_faustpower2_f(fSlow5); + double fSlow13 = (cos(fSlow11) * fSlow12); + double fSlow14 = sin((2.0 * fSlow4)); + double fSlow15 = (fSlow8 * fSlow14); + double fSlow16 = (sin(fSlow11) * fSlow12); + double fSlow17 = (fSlow3 * fSlow14); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow1 + (0.999 * fRec1[1])); + double fTemp0 = double(input0[i]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = double(input2[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec4[0]); + double fTemp3 = double(input3[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (((fSlow6 * fTemp1) + (fSlow7 * fTemp2)) + (fSlow9 * fTemp3)); + double fTemp5 = double(input6[i]); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph4 = FAUSTFLOAT(fRec6[0]); + double fTemp6 = double(input8[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph5 = FAUSTFLOAT(fRec7[0]); + double fTemp7 = double(input7[i]); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph6 = FAUSTFLOAT(fRec8[0]); + double fTemp8 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph7 = FAUSTFLOAT(fRec9[0]); + double fTemp9 = double(input5[i]); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph8 = FAUSTFLOAT(fRec10[0]); + double fTemp10 = (iSlow0?(fRec1[0] * ((((0.11112 * fTemp0) + (0.19245000000000004 * fTemp4)) + (fSlow10 * fTemp5)) + (0.2151622795194362 * ((fSlow13 * fTemp6) + ((fSlow15 * fTemp7) + ((fSlow16 * fTemp8) + (fSlow17 * fTemp9))))))):(fRec1[0] * ((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4)))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fHbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp10); + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec0[1] = fRec0[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamHCardio2Mono3.cpp b/source/HOAUGens/HOABeamHCardio2Mono3.cpp new file mode 100755 index 0000000000..ce14ac85b9 --- /dev/null +++ b/source/HOAUGens/HOABeamHCardio2Mono3.cpp @@ -0,0 +1,1465 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOABeamHCardio2Mono3" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec11[2]; + FAUSTFLOAT fVbargraph9; + double fRec12[2]; + FAUSTFLOAT fVbargraph10; + double fRec13[2]; + FAUSTFLOAT fVbargraph11; + double fRec14[2]; + FAUSTFLOAT fVbargraph12; + double fRec15[2]; + FAUSTFLOAT fVbargraph13; + double fRec16[2]; + FAUSTFLOAT fVbargraph14; + double fRec17[2]; + FAUSTFLOAT fVbargraph15; + double fRec0[2]; + FAUSTFLOAT fHbargraph0; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOABeamHCardio2Mono3"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 1; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(1.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec12[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec16[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec0[l17] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOABeamHCardio2Mono3"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2be1bc0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bea4b0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2befd80", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bf5c20", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c10450", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c15ab0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bfda30", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c0a6b0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c046d0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c1cd60", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c22930", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c29330", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c3ce80", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c2eff0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c42860", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c351d0", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider0, "1", ""); + ui_interface->addVerticalSlider("Order", &fVslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fVslider1, "2", ""); + ui_interface->addVerticalSlider("Output Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Output"); + ui_interface->declare(&fHbargraph0, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x2c47ea0", &fHbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* output0 = outputs[0]; + int iSlow0 = (int(double(fVslider0)) + -1); + int iSlow1 = (iSlow0 >= 2); + int iSlow2 = (iSlow0 >= 1); + double fSlow3 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + double fSlow4 = double(fVslider2); + double fSlow5 = sin(fSlow4); + double fSlow6 = double(fVslider3); + double fSlow7 = cos(fSlow6); + double fSlow8 = (fSlow5 * fSlow7); + double fSlow9 = sin(fSlow6); + double fSlow10 = cos(fSlow4); + double fSlow11 = (fSlow10 * fSlow7); + double fSlow12 = mydsp_faustpower2_f(fSlow9); + double fSlow13 = ((3.0 * fSlow12) + -1.0); + double fSlow14 = (0.124224 * fSlow13); + double fSlow15 = (2.0 * fSlow4); + double fSlow16 = mydsp_faustpower2_f(fSlow7); + double fSlow17 = (cos(fSlow15) * fSlow16); + double fSlow18 = sin((2.0 * fSlow6)); + double fSlow19 = (fSlow10 * fSlow18); + double fSlow20 = sin(fSlow15); + double fSlow21 = (fSlow20 * fSlow16); + double fSlow22 = (fSlow5 * fSlow18); + double fSlow23 = (3.0 * fSlow4); + double fSlow24 = (0.130732511318436 * (sin(fSlow23) * fSlow7)); + double fSlow25 = (0.32022794552279471 * (fSlow20 * fSlow9)); + double fSlow26 = (5.0 * fSlow12); + double fSlow27 = (fSlow26 + -1.0); + double fSlow28 = (0.10126496782883505 * (fSlow5 * fSlow27)); + double fSlow29 = (0.10126496782883505 * (fSlow10 * fSlow27)); + double fSlow30 = (0.130732511318436 * (cos(fSlow23) * fSlow16)); + double fSlow31 = (0.069875499999999993 * fSlow13); + double fSlow32 = (0.082682500000000006 * (fSlow26 + -3.0)); + double fSlow33 = (0.32022794552279471 * fSlow17); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow3 + (0.999 * fRec1[1])); + double fTemp0 = double(input0[i]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = double(input2[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec4[0]); + double fTemp3 = double(input3[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (((fSlow8 * fTemp1) + (fSlow9 * fTemp2)) + (fSlow11 * fTemp3)); + double fTemp5 = double(input6[i]); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph4 = FAUSTFLOAT(fRec6[0]); + double fTemp6 = double(input8[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph5 = FAUSTFLOAT(fRec7[0]); + double fTemp7 = double(input7[i]); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph6 = FAUSTFLOAT(fRec8[0]); + double fTemp8 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph7 = FAUSTFLOAT(fRec9[0]); + double fTemp9 = double(input5[i]); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph8 = FAUSTFLOAT(fRec10[0]); + double fTemp10 = ((fSlow17 * fTemp6) + ((fSlow19 * fTemp7) + ((fSlow21 * fTemp8) + (fSlow22 * fTemp9)))); + double fTemp11 = double(input9[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph9 = FAUSTFLOAT(fRec11[0]); + double fTemp12 = double(input10[i]); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph10 = FAUSTFLOAT(fRec12[0]); + double fTemp13 = double(input11[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph11 = FAUSTFLOAT(fRec13[0]); + double fTemp14 = double(input13[i]); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph12 = FAUSTFLOAT(fRec14[0]); + double fTemp15 = double(input15[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph13 = FAUSTFLOAT(fRec15[0]); + double fTemp16 = double(input12[i]); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph14 = FAUSTFLOAT(fRec16[0]); + double fTemp17 = double(input14[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph15 = FAUSTFLOAT(fRec17[0]); + double fTemp18 = (iSlow1?(fRec1[0] * ((fSlow7 * ((((fSlow7 * ((fSlow24 * fTemp11) + (fSlow25 * fTemp12))) + (fSlow28 * fTemp13)) + (fSlow29 * fTemp14)) + (fSlow30 * fTemp15))) + (((((0.062512799999999993 * fTemp0) + (0.108241 * fTemp4)) + (fSlow31 * fTemp5)) + (0.12102791620427908 * fTemp10)) + (fSlow9 * ((fSlow32 * fTemp16) + (fSlow33 * fTemp17)))))):(iSlow2?(fRec1[0] * ((((0.11112 * fTemp0) + (0.19245000000000004 * fTemp4)) + (fSlow14 * fTemp5)) + (0.2151622795194362 * fTemp10))):(fRec1[0] * ((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fHbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp18); + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec0[1] = fRec0[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverter1.cpp b/source/HOAUGens/HOAConverter1.cpp old mode 100644 new mode 100755 index d1c22cd6d3..4aca475ad7 --- a/source/HOAUGens/HOAConverter1.cpp +++ b/source/HOAUGens/HOAConverter1.cpp @@ -1,19 +1,14 @@ -//---------------------------------------------------------- -// name: "HOAConverter1" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverter1" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,81 +601,184 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double rint(double dummy0); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fbargraph0; - double fRec0[2]; - FAUSTFLOAT fbargraph1; - double fRec3[2]; - FAUSTFLOAT fbargraph2; - double fRec4[2]; - FAUSTFLOAT fbargraph3; - double fRec5[2]; - FAUSTFLOAT fbargraph4; - double fRec2[2]; - FAUSTFLOAT fbargraph5; - double fRec6[2]; - FAUSTFLOAT fbargraph6; - double fRec7[2]; - FAUSTFLOAT fbargraph7; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAConverter1"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec2[2]; + FAUSTFLOAT fVbargraph5; + double fRec6[2]; + FAUSTFLOAT fVbargraph6; + double fRec7[2]; + FAUSTFLOAT fVbargraph7; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAConverter1"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 1.0; - fslider1 = 1.0; + fHslider0 = FAUSTFLOAT(1.0); + fHslider1 = FAUSTFLOAT(1.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -647,40 +788,43 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAConverter1"); - ui_interface->declare(&fslider0, "0", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fslider1, "0", ""); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider1, "0", ""); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider0, "0", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffa3e53e960", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ffd30", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffa3e5424b0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a0cdc0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffa3e543c20", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a19080", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffa3e545660", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a127b0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -688,99 +832,99 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffa3e540990", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a06d00", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffa3e547700", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a1e140", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffa3e5495a0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a24680", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffa3e54b300", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a2a4c0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); - int iSlow1 = int((iSlow0 >= 5)); - int iSlow2 = int((iSlow0 >= 7)); - int iSlow3 = int((iSlow0 >= 8)); - int iSlow4 = int((iSlow0 >= 6)); - int iSlow5 = int((iSlow0 >= 3)); - int iSlow6 = int((iSlow0 >= 2)); - int iSlow7 = int((iSlow0 >= 4)); - int iSlow8 = int((iSlow0 >= 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i= 5); + int iSlow2 = (iSlow0 >= 3); + int iSlow3 = (iSlow0 >= 2); + int iSlow4 = (iSlow0 >= 7); + int iSlow5 = (iSlow0 >= 6); + int iSlow6 = (iSlow0 >= 8); + int iSlow7 = (iSlow0 >= 1); + int iSlow8 = (iSlow0 >= 4); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (0.70710678118654746 * fTemp0); + double fTemp2 = (1.4142135623730951 * fTemp0); + double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp5 = (0.57735026918962584 * fTemp4); + double fTemp6 = double(input3[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + double fTemp7 = (0.57735026918962584 * fTemp6); + double fTemp8 = (1.7320508075688772 * fTemp4); + double fTemp9 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp10 = (1.7320508075688772 * fTemp9); + double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph5 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.57735026918962584 * fTemp9); + double fTemp13 = (1.7320508075688772 * fTemp6); + double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph6 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph7 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp15); fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1112,3 +1256,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOAConverter2.cpp b/source/HOAUGens/HOAConverter2.cpp old mode 100644 new mode 100755 index 7f549cae0f..d3b00c3e53 --- a/source/HOAUGens/HOAConverter2.cpp +++ b/source/HOAUGens/HOAConverter2.cpp @@ -1,19 +1,14 @@ -//---------------------------------------------------------- -// name: "HOAConverter2" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverter2" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,111 +601,284 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double rint(double dummy0); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fbargraph0; - double fRec0[2]; - FAUSTFLOAT fbargraph1; - double fRec3[2]; - FAUSTFLOAT fbargraph2; - double fRec4[2]; - FAUSTFLOAT fbargraph3; - double fRec5[2]; - FAUSTFLOAT fbargraph4; - double fRec2[2]; - FAUSTFLOAT fbargraph5; - double fRec6[2]; - FAUSTFLOAT fbargraph6; - double fRec7[2]; - FAUSTFLOAT fbargraph7; - double fRec9[2]; - FAUSTFLOAT fbargraph8; - double fRec10[2]; - FAUSTFLOAT fbargraph9; - double fRec11[2]; - FAUSTFLOAT fbargraph10; - double fRec8[2]; - FAUSTFLOAT fbargraph11; - double fRec13[2]; - FAUSTFLOAT fbargraph12; - double fRec14[2]; - FAUSTFLOAT fbargraph13; - double fRec12[2]; - FAUSTFLOAT fbargraph14; - double fRec15[2]; - FAUSTFLOAT fbargraph15; - double fRec16[2]; - FAUSTFLOAT fbargraph16; - double fRec17[2]; - FAUSTFLOAT fbargraph17; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAConverter2"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec2[2]; + FAUSTFLOAT fVbargraph5; + double fRec6[2]; + FAUSTFLOAT fVbargraph6; + double fRec7[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec10[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec8[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec14[2]; + FAUSTFLOAT fVbargraph13; + double fRec12[2]; + FAUSTFLOAT fVbargraph14; + double fRec15[2]; + FAUSTFLOAT fVbargraph15; + double fRec16[2]; + FAUSTFLOAT fVbargraph16; + double fRec17[2]; + FAUSTFLOAT fVbargraph17; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAConverter2"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 1.0; - fslider1 = 1.0; + fHslider0 = FAUSTFLOAT(1.0); + fHslider1 = FAUSTFLOAT(1.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec8[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec12[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -677,62 +888,65 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAConverter2"); - ui_interface->declare(&fslider0, "0", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fslider1, "0", ""); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider1, "0", ""); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider0, "0", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa4118719c0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22c44e0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411875580", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22d1570", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411876d50", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22dd840", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411878790", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22d6f70", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411880090", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22f49a0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411886e70", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x230b710", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411883540", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22fa260", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411888a80", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2310fd0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411881990", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23006b0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -740,183 +954,178 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411873a30", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22cb4b0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa41187a830", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22e2900", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa41187c6d0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22e8e40", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa41187e430", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22eec80", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa4118852b0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2305ad0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa41188a8f0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2317010", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa41188c9e0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x231d4d0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa41188ef00", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2324010", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa411891470", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x232ac30", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); - int iSlow1 = int((iSlow0 >= 5)); - int iSlow2 = int((iSlow0 >= 7)); - int iSlow3 = int((iSlow0 >= 8)); - int iSlow4 = int((iSlow0 >= 6)); - int iSlow5 = int((iSlow0 >= 3)); - int iSlow6 = int((iSlow0 >= 2)); - int iSlow7 = int((iSlow0 >= 4)); - int iSlow8 = int((iSlow0 >= 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - for (int i=0; i= 5); + int iSlow2 = (iSlow0 >= 3); + int iSlow3 = (iSlow0 >= 2); + int iSlow4 = (iSlow0 >= 7); + int iSlow5 = (iSlow0 >= 6); + int iSlow6 = (iSlow0 >= 8); + int iSlow7 = (iSlow0 >= 1); + int iSlow8 = (iSlow0 >= 4); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (0.70710678118654746 * fTemp0); + double fTemp2 = (1.4142135623730951 * fTemp0); + double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp5 = (0.57735026918962584 * fTemp4); + double fTemp6 = double(input3[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + double fTemp7 = (0.57735026918962584 * fTemp6); + double fTemp8 = (1.7320508075688772 * fTemp4); + double fTemp9 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp10 = (1.7320508075688772 * fTemp9); + double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph5 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.57735026918962584 * fTemp9); + double fTemp13 = (1.7320508075688772 * fTemp6); + double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph6 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph7 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp17 = double(input6[i]); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph9 = FAUSTFLOAT(fRec10[0]); + double fTemp18 = (0.44721359549995793 * fTemp17); + double fTemp19 = (2.2360679774997898 * fTemp16); + double fTemp20 = double(input8[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp21 = (iSlow1?(iSlow4?(iSlow6?fTemp16:(0.86602540378443871 * fTemp20)):(iSlow5?(1.9364916731037085 * fTemp20):fTemp17)):(iSlow2?(iSlow8?fTemp16:fTemp19):(iSlow3?fTemp18:(iSlow7?(0.44721359549995793 * fTemp16):fTemp16)))); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph11 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = double(input5[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp23 = double(input7[i]); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph13 = FAUSTFLOAT(fRec14[0]); + double fTemp24 = (iSlow1?(iSlow4?(iSlow6?fTemp22:(0.86602540378443871 * fTemp17)):(iSlow5?(1.9364916731037085 * fTemp17):(1.1547005383792515 * fTemp23))):(iSlow2?(iSlow8?fTemp22:(2.2360679774997898 * fTemp22)):(iSlow3?(0.5163977794943222 * fTemp23):(iSlow7?(0.44721359549995793 * fTemp22):fTemp22)))); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph14 = FAUSTFLOAT(fRec12[0]); + output5[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (iSlow1?(iSlow4?(iSlow6?fTemp17:fTemp16):(iSlow5?fTemp19:(1.1547005383792515 * fTemp22))):(iSlow2?(iSlow8?fTemp17:(2.2360679774997898 * fTemp17)):(iSlow3?(0.5163977794943222 * fTemp22):(iSlow7?fTemp18:fTemp17)))); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph15 = FAUSTFLOAT(fRec15[0]); + output6[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (iSlow1?(iSlow4?(iSlow6?fTemp23:(0.86602540378443871 * fTemp22)):(iSlow5?(1.9364916731037085 * fTemp22):(1.1547005383792515 * fTemp20))):(iSlow2?(iSlow8?fTemp23:(2.2360679774997898 * fTemp23)):(iSlow3?(0.5163977794943222 * fTemp20):(iSlow7?(0.44721359549995793 * fTemp23):fTemp23)))); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph16 = FAUSTFLOAT(fRec16[0]); + output7[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (iSlow1?(iSlow4?(iSlow6?fTemp20:(0.86602540378443871 * fTemp23)):(iSlow5?(1.9364916731037085 * fTemp23):(1.1547005383792515 * fTemp16))):(iSlow2?(iSlow8?fTemp20:(2.2360679774997898 * fTemp20)):(iSlow3?(0.5163977794943222 * fTemp16):(iSlow7?(0.44721359549995793 * fTemp20):fTemp20)))); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph17 = FAUSTFLOAT(fRec17[0]); + output8[i] = FAUSTFLOAT(fTemp27); fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec8[1] = fRec8[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1248,3 +1457,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOAConverter3.cpp b/source/HOAUGens/HOAConverter3.cpp old mode 100644 new mode 100755 index 2cb369a53d..789104c2c5 --- a/source/HOAUGens/HOAConverter3.cpp +++ b/source/HOAUGens/HOAConverter3.cpp @@ -1,19 +1,14 @@ -//---------------------------------------------------------- -// name: "HOAConverter3" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverter3" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,153 +601,424 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double rint(double dummy0); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fbargraph0; - double fRec0[2]; - FAUSTFLOAT fbargraph1; - double fRec3[2]; - FAUSTFLOAT fbargraph2; - double fRec4[2]; - FAUSTFLOAT fbargraph3; - double fRec5[2]; - FAUSTFLOAT fbargraph4; - double fRec2[2]; - FAUSTFLOAT fbargraph5; - double fRec6[2]; - FAUSTFLOAT fbargraph6; - double fRec7[2]; - FAUSTFLOAT fbargraph7; - double fRec9[2]; - FAUSTFLOAT fbargraph8; - double fRec10[2]; - FAUSTFLOAT fbargraph9; - double fRec11[2]; - FAUSTFLOAT fbargraph10; - double fRec8[2]; - FAUSTFLOAT fbargraph11; - double fRec13[2]; - FAUSTFLOAT fbargraph12; - double fRec14[2]; - FAUSTFLOAT fbargraph13; - double fRec12[2]; - FAUSTFLOAT fbargraph14; - double fRec15[2]; - FAUSTFLOAT fbargraph15; - double fRec16[2]; - FAUSTFLOAT fbargraph16; - double fRec17[2]; - FAUSTFLOAT fbargraph17; - double fRec19[2]; - FAUSTFLOAT fbargraph18; - double fRec20[2]; - FAUSTFLOAT fbargraph19; - double fRec21[2]; - FAUSTFLOAT fbargraph20; - double fRec18[2]; - FAUSTFLOAT fbargraph21; - double fRec23[2]; - FAUSTFLOAT fbargraph22; - double fRec24[2]; - FAUSTFLOAT fbargraph23; - double fRec22[2]; - FAUSTFLOAT fbargraph24; - double fRec26[2]; - FAUSTFLOAT fbargraph25; - double fRec25[2]; - FAUSTFLOAT fbargraph26; - double fRec28[2]; - FAUSTFLOAT fbargraph27; - double fRec27[2]; - FAUSTFLOAT fbargraph28; - double fRec29[2]; - FAUSTFLOAT fbargraph29; - double fRec30[2]; - FAUSTFLOAT fbargraph30; - double fRec31[2]; - FAUSTFLOAT fbargraph31; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAConverter3"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec2[2]; + FAUSTFLOAT fVbargraph5; + double fRec6[2]; + FAUSTFLOAT fVbargraph6; + double fRec7[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec10[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec8[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec14[2]; + FAUSTFLOAT fVbargraph13; + double fRec12[2]; + FAUSTFLOAT fVbargraph14; + double fRec15[2]; + FAUSTFLOAT fVbargraph15; + double fRec16[2]; + FAUSTFLOAT fVbargraph16; + double fRec17[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec20[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec18[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec24[2]; + FAUSTFLOAT fVbargraph23; + double fRec22[2]; + FAUSTFLOAT fVbargraph24; + double fRec26[2]; + FAUSTFLOAT fVbargraph25; + double fRec25[2]; + FAUSTFLOAT fVbargraph26; + double fRec28[2]; + FAUSTFLOAT fVbargraph27; + double fRec27[2]; + FAUSTFLOAT fVbargraph28; + double fRec29[2]; + FAUSTFLOAT fVbargraph29; + double fRec30[2]; + FAUSTFLOAT fVbargraph30; + double fRec31[2]; + FAUSTFLOAT fVbargraph31; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAConverter3"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 1.0; - fslider1 = 1.0; + fHslider0 = FAUSTFLOAT(1.0); + fHslider1 = FAUSTFLOAT(1.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec8[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec12[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec18[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec22[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec25[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec28[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec27[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -719,92 +1028,95 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAConverter3"); - ui_interface->declare(&fslider0, "0", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fslider1, "0", ""); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider1, "0", ""); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider0, "0", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f268f920", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c24220", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26934e0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c312b0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f2694cb0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c3d570", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26966f0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c36ca0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f269dff0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c546e0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26a4dd0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c6b450", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26a14a0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c59fa0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26a69e0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c70d10", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f269f8f0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c603f0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26b11b0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c90930", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26b8190", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ca7a20", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26bdb40", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1cb9680", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26b4760", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c962d0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26b9b20", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1cad3c0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26c1cb0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1cc5ee0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26b2b40", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c9c800", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -812,299 +1124,287 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f2691990", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c2b1f0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f2698790", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c42630", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f269a630", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c48b70", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f269c390", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c4e9b0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26a3210", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c65810", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26a8850", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c76d50", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26aa940", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c7d210", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26ace60", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c83d50", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26af3d0", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c8a970", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26b6580", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ca1d00", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26bbdb0", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1cb3880", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26bfd00", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1cbfc50", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26c3b80", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ccbe00", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26c6130", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1cd2b00", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26c8860", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1cd9c80", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb3f26cb000", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ce0b40", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); - int iSlow1 = int((iSlow0 >= 5)); - int iSlow2 = int((iSlow0 >= 7)); - int iSlow3 = int((iSlow0 >= 8)); - int iSlow4 = int((iSlow0 >= 6)); - int iSlow5 = int((iSlow0 >= 3)); - int iSlow6 = int((iSlow0 >= 2)); - int iSlow7 = int((iSlow0 >= 4)); - int iSlow8 = int((iSlow0 >= 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; i= 5); + int iSlow2 = (iSlow0 >= 3); + int iSlow3 = (iSlow0 >= 2); + int iSlow4 = (iSlow0 >= 7); + int iSlow5 = (iSlow0 >= 6); + int iSlow6 = (iSlow0 >= 8); + int iSlow7 = (iSlow0 >= 1); + int iSlow8 = (iSlow0 >= 4); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (0.70710678118654746 * fTemp0); + double fTemp2 = (1.4142135623730951 * fTemp0); + double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp5 = (0.57735026918962584 * fTemp4); + double fTemp6 = double(input3[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + double fTemp7 = (0.57735026918962584 * fTemp6); + double fTemp8 = (1.7320508075688772 * fTemp4); + double fTemp9 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp10 = (1.7320508075688772 * fTemp9); + double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph5 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.57735026918962584 * fTemp9); + double fTemp13 = (1.7320508075688772 * fTemp6); + double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph6 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph7 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp17 = double(input6[i]); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph9 = FAUSTFLOAT(fRec10[0]); + double fTemp18 = (0.44721359549995793 * fTemp17); + double fTemp19 = (2.2360679774997898 * fTemp16); + double fTemp20 = double(input8[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp21 = (iSlow1?(iSlow4?(iSlow6?fTemp16:(0.86602540378443871 * fTemp20)):(iSlow5?(1.9364916731037085 * fTemp20):fTemp17)):(iSlow2?(iSlow8?fTemp16:fTemp19):(iSlow3?fTemp18:(iSlow7?(0.44721359549995793 * fTemp16):fTemp16)))); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph11 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = double(input5[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp23 = double(input7[i]); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph13 = FAUSTFLOAT(fRec14[0]); + double fTemp24 = (iSlow1?(iSlow4?(iSlow6?fTemp22:(0.86602540378443871 * fTemp17)):(iSlow5?(1.9364916731037085 * fTemp17):(1.1547005383792515 * fTemp23))):(iSlow2?(iSlow8?fTemp22:(2.2360679774997898 * fTemp22)):(iSlow3?(0.5163977794943222 * fTemp23):(iSlow7?(0.44721359549995793 * fTemp22):fTemp22)))); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph14 = FAUSTFLOAT(fRec12[0]); + output5[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (iSlow1?(iSlow4?(iSlow6?fTemp17:fTemp16):(iSlow5?fTemp19:(1.1547005383792515 * fTemp22))):(iSlow2?(iSlow8?fTemp17:(2.2360679774997898 * fTemp17)):(iSlow3?(0.5163977794943222 * fTemp22):(iSlow7?fTemp18:fTemp17)))); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph15 = FAUSTFLOAT(fRec15[0]); + output6[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (iSlow1?(iSlow4?(iSlow6?fTemp23:(0.86602540378443871 * fTemp22)):(iSlow5?(1.9364916731037085 * fTemp22):(1.1547005383792515 * fTemp20))):(iSlow2?(iSlow8?fTemp23:(2.2360679774997898 * fTemp23)):(iSlow3?(0.5163977794943222 * fTemp20):(iSlow7?(0.44721359549995793 * fTemp23):fTemp23)))); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph16 = FAUSTFLOAT(fRec16[0]); + output7[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (iSlow1?(iSlow4?(iSlow6?fTemp20:(0.86602540378443871 * fTemp23)):(iSlow5?(1.9364916731037085 * fTemp23):(1.1547005383792515 * fTemp16))):(iSlow2?(iSlow8?fTemp20:(2.2360679774997898 * fTemp20)):(iSlow3?(0.5163977794943222 * fTemp16):(iSlow7?(0.44721359549995793 * fTemp20):fTemp20)))); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph17 = FAUSTFLOAT(fRec17[0]); + output8[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp29 = double(input12[i]); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph19 = FAUSTFLOAT(fRec20[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + double fTemp31 = (2.6457513110645907 * fTemp28); + double fTemp32 = double(input15[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp33 = (iSlow1?(iSlow4?(iSlow6?fTemp28:(0.79056941504209477 * fTemp32)):(iSlow5?(2.0916500663351889 * fTemp32):fTemp29)):(iSlow2?(iSlow8?fTemp28:fTemp31):(iSlow3?fTemp30:(iSlow7?(0.3779644730092272 * fTemp28):fTemp28)))); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph21 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = double(input10[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp35 = double(input13[i]); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph23 = FAUSTFLOAT(fRec24[0]); + double fTemp36 = (iSlow1?(iSlow4?(iSlow6?fTemp34:(0.7453559924999299 * fTemp35)):(iSlow5?(1.9720265943665387 * fTemp35):(1.1858541225631423 * fTemp35))):(iSlow2?(iSlow8?fTemp34:(2.6457513110645907 * fTemp34)):(iSlow3?(0.44821072850039761 * fTemp35):(iSlow7?(0.3779644730092272 * fTemp34):fTemp34)))); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph24 = FAUSTFLOAT(fRec22[0]); + output10[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input11[i]); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph25 = FAUSTFLOAT(fRec26[0]); + double fTemp38 = (iSlow1?(iSlow4?(iSlow6?fTemp37:(0.84327404271156781 * fTemp37)):(iSlow5?(2.2310934040908683 * fTemp37):(1.1858541225631423 * fTemp37))):(iSlow2?(iSlow8?fTemp37:(2.6457513110645907 * fTemp37)):(iSlow3?(0.44821072850039761 * fTemp37):(iSlow7?(0.3779644730092272 * fTemp37):fTemp37)))); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph26 = FAUSTFLOAT(fRec25[0]); + output11[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input14[i]); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph27 = FAUSTFLOAT(fRec28[0]); + double fTemp40 = (iSlow1?(iSlow4?(iSlow6?fTemp29:fTemp28):(iSlow5?fTemp31:(1.3416407864998738 * fTemp39))):(iSlow2?(iSlow8?fTemp29:(2.6457513110645907 * fTemp29)):(iSlow3?(0.50709255283710997 * fTemp39):(iSlow7?fTemp30:fTemp29)))); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph28 = FAUSTFLOAT(fRec27[0]); + output12[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (iSlow1?(iSlow4?(iSlow6?fTemp35:(0.84327404271156781 * fTemp34)):(iSlow5?(2.2310934040908683 * fTemp34):(1.3416407864998738 * fTemp34))):(iSlow2?(iSlow8?fTemp35:(2.6457513110645907 * fTemp35)):(iSlow3?(0.50709255283710997 * fTemp34):(iSlow7?(0.3779644730092272 * fTemp35):fTemp35)))); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph29 = FAUSTFLOAT(fRec29[0]); + output13[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (iSlow1?(iSlow4?(iSlow6?fTemp39:(0.7453559924999299 * fTemp29)):(iSlow5?(1.9720265943665387 * fTemp29):(1.2649110640673518 * fTemp32))):(iSlow2?(iSlow8?fTemp39:(2.6457513110645907 * fTemp39)):(iSlow3?(0.47809144373375745 * fTemp32):(iSlow7?(0.3779644730092272 * fTemp39):fTemp39)))); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph30 = FAUSTFLOAT(fRec30[0]); + output14[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (iSlow1?(iSlow4?(iSlow6?fTemp32:(0.79056941504209477 * fTemp39)):(iSlow5?(2.0916500663351889 * fTemp39):(1.2649110640673518 * fTemp28))):(iSlow2?(iSlow8?fTemp32:(2.6457513110645907 * fTemp32)):(iSlow3?(0.47809144373375745 * fTemp28):(iSlow7?(0.3779644730092272 * fTemp32):fTemp32)))); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph31 = FAUSTFLOAT(fRec31[0]); + output15[i] = FAUSTFLOAT(fTemp43); fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec8[1] = fRec8[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec18[1] = fRec18[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec22[1] = fRec22[0]; + fRec26[1] = fRec26[0]; + fRec25[1] = fRec25[0]; + fRec28[1] = fRec28[0]; + fRec27[1] = fRec27[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1436,3 +1736,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOAConverter4.cpp b/source/HOAUGens/HOAConverter4.cpp old mode 100644 new mode 100755 index 46bcbc03d1..c96fb8af06 --- a/source/HOAUGens/HOAConverter4.cpp +++ b/source/HOAUGens/HOAConverter4.cpp @@ -1,19 +1,14 @@ -//---------------------------------------------------------- -// name: "HOAConverter4" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverter4" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,207 +601,604 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double rint(double dummy0); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fbargraph0; - double fRec0[2]; - FAUSTFLOAT fbargraph1; - double fRec3[2]; - FAUSTFLOAT fbargraph2; - double fRec4[2]; - FAUSTFLOAT fbargraph3; - double fRec5[2]; - FAUSTFLOAT fbargraph4; - double fRec2[2]; - FAUSTFLOAT fbargraph5; - double fRec6[2]; - FAUSTFLOAT fbargraph6; - double fRec7[2]; - FAUSTFLOAT fbargraph7; - double fRec9[2]; - FAUSTFLOAT fbargraph8; - double fRec10[2]; - FAUSTFLOAT fbargraph9; - double fRec11[2]; - FAUSTFLOAT fbargraph10; - double fRec8[2]; - FAUSTFLOAT fbargraph11; - double fRec13[2]; - FAUSTFLOAT fbargraph12; - double fRec14[2]; - FAUSTFLOAT fbargraph13; - double fRec12[2]; - FAUSTFLOAT fbargraph14; - double fRec15[2]; - FAUSTFLOAT fbargraph15; - double fRec16[2]; - FAUSTFLOAT fbargraph16; - double fRec17[2]; - FAUSTFLOAT fbargraph17; - double fRec19[2]; - FAUSTFLOAT fbargraph18; - double fRec20[2]; - FAUSTFLOAT fbargraph19; - double fRec21[2]; - FAUSTFLOAT fbargraph20; - double fRec18[2]; - FAUSTFLOAT fbargraph21; - double fRec23[2]; - FAUSTFLOAT fbargraph22; - double fRec24[2]; - FAUSTFLOAT fbargraph23; - double fRec22[2]; - FAUSTFLOAT fbargraph24; - double fRec26[2]; - FAUSTFLOAT fbargraph25; - double fRec25[2]; - FAUSTFLOAT fbargraph26; - double fRec28[2]; - FAUSTFLOAT fbargraph27; - double fRec27[2]; - FAUSTFLOAT fbargraph28; - double fRec29[2]; - FAUSTFLOAT fbargraph29; - double fRec30[2]; - FAUSTFLOAT fbargraph30; - double fRec31[2]; - FAUSTFLOAT fbargraph31; - double fRec33[2]; - FAUSTFLOAT fbargraph32; - double fRec32[2]; - FAUSTFLOAT fbargraph33; - double fRec35[2]; - FAUSTFLOAT fbargraph34; - double fRec34[2]; - FAUSTFLOAT fbargraph35; - double fRec37[2]; - FAUSTFLOAT fbargraph36; - double fRec36[2]; - FAUSTFLOAT fbargraph37; - double fRec39[2]; - FAUSTFLOAT fbargraph38; - double fRec38[2]; - FAUSTFLOAT fbargraph39; - double fRec41[2]; - FAUSTFLOAT fbargraph40; - double fRec40[2]; - FAUSTFLOAT fbargraph41; - double fRec43[2]; - FAUSTFLOAT fbargraph42; - double fRec42[2]; - FAUSTFLOAT fbargraph43; - double fRec45[2]; - FAUSTFLOAT fbargraph44; - double fRec44[2]; - FAUSTFLOAT fbargraph45; - double fRec47[2]; - FAUSTFLOAT fbargraph46; - double fRec46[2]; - FAUSTFLOAT fbargraph47; - double fRec49[2]; - FAUSTFLOAT fbargraph48; - double fRec48[2]; - FAUSTFLOAT fbargraph49; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAConverter4"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec2[2]; + FAUSTFLOAT fVbargraph5; + double fRec6[2]; + FAUSTFLOAT fVbargraph6; + double fRec7[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec10[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec8[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec14[2]; + FAUSTFLOAT fVbargraph13; + double fRec12[2]; + FAUSTFLOAT fVbargraph14; + double fRec15[2]; + FAUSTFLOAT fVbargraph15; + double fRec16[2]; + FAUSTFLOAT fVbargraph16; + double fRec17[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec20[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec18[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec24[2]; + FAUSTFLOAT fVbargraph23; + double fRec22[2]; + FAUSTFLOAT fVbargraph24; + double fRec26[2]; + FAUSTFLOAT fVbargraph25; + double fRec25[2]; + FAUSTFLOAT fVbargraph26; + double fRec28[2]; + FAUSTFLOAT fVbargraph27; + double fRec27[2]; + FAUSTFLOAT fVbargraph28; + double fRec29[2]; + FAUSTFLOAT fVbargraph29; + double fRec30[2]; + FAUSTFLOAT fVbargraph30; + double fRec31[2]; + FAUSTFLOAT fVbargraph31; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fRec32[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec34[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec36[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec38[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec40[2]; + FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec42[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec44[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec46[2]; + FAUSTFLOAT fVbargraph47; + double fRec49[2]; + FAUSTFLOAT fVbargraph48; + double fRec48[2]; + FAUSTFLOAT fVbargraph49; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAConverter4"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 25; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 1.0; - fslider1 = 1.0; + fHslider0 = FAUSTFLOAT(1.0); + fHslider1 = FAUSTFLOAT(1.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec8[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec12[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec18[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec22[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec25[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec28[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec27[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec35[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec37[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec41[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec43[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec42[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec45[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec44[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec47[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec46[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -773,130 +1208,133 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAConverter4"); - ui_interface->declare(&fslider0, "0", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fslider1, "0", ""); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider1, "0", ""); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider0, "0", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f423f8f0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2afa950", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f42434b0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b079e0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f4244c80", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b13ca0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f42466c0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b0d3d0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f424dfc0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b2ae10", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f4254da0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b41b80", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f4251470", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b306d0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f42569b0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b47440", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f424f8c0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b36b20", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f153c0f0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b67060", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1542d70", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b7e150", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1548460", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b8fdb0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f153f470", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b6ca00", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f15445b0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b83af0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f154c3f0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b9c610", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f153d930", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b72f30", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1557130", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bbd4d0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f155aa10", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bc91d0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f155e290", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bd4a40", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1561bf0", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2be0470", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1565630", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bec070", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1569150", &fbargraph42, -7e+01, 6.0); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bf7e20", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f156cd50", &fbargraph44, -7e+01, 6.0); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c03d90", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1570a30", &fbargraph46, -7e+01, 6.0); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c0fec0", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f15747f0", &fbargraph48, -7e+01, 6.0); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c1c1b0", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -904,445 +1342,424 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f4241960", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b01920", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f4248760", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b18d60", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f424a600", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b1f2b0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f424c360", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b250f0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f42531e0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b3bf40", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f152d420", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b4d480", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f152acc0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b53940", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1527670", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b5a480", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f153a430", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b610a0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f15411d0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b78430", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1546760", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b89fb0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f154a4f0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b96380", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f154e090", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ba2530", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f15506b0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ba9230", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1552ca0", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bb03b0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1555340", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bb7270", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1558d70", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bc33d0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f155c570", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bceb60", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f155fe60", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bda4b0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1563830", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2be5fd0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f15672e0", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bf1ca0", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f156ae70", &fbargraph43, -7e+01, 6.0); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bfdb30", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f156eae0", &fbargraph45, -7e+01, 6.0); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c09b80", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1572830", &fbargraph47, -7e+01, 6.0); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c15d90", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa6f1576660", &fbargraph49, -7e+01, 6.0); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c22160", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); - int iSlow1 = int((iSlow0 >= 5)); - int iSlow2 = int((iSlow0 >= 7)); - int iSlow3 = int((iSlow0 >= 8)); - int iSlow4 = int((iSlow0 >= 6)); - int iSlow5 = int((iSlow0 >= 3)); - int iSlow6 = int((iSlow0 >= 2)); - int iSlow7 = int((iSlow0 >= 4)); - int iSlow8 = int((iSlow0 >= 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; i= 5); + int iSlow2 = (iSlow0 >= 3); + int iSlow3 = (iSlow0 >= 2); + int iSlow4 = (iSlow0 >= 7); + int iSlow5 = (iSlow0 >= 6); + int iSlow6 = (iSlow0 >= 8); + int iSlow7 = (iSlow0 >= 1); + int iSlow8 = (iSlow0 >= 4); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (0.70710678118654746 * fTemp0); + double fTemp2 = (1.4142135623730951 * fTemp0); + double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp5 = (0.57735026918962584 * fTemp4); + double fTemp6 = double(input3[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + double fTemp7 = (0.57735026918962584 * fTemp6); + double fTemp8 = (1.7320508075688772 * fTemp4); + double fTemp9 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp10 = (1.7320508075688772 * fTemp9); + double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph5 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.57735026918962584 * fTemp9); + double fTemp13 = (1.7320508075688772 * fTemp6); + double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph6 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph7 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp17 = double(input6[i]); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph9 = FAUSTFLOAT(fRec10[0]); + double fTemp18 = (0.44721359549995793 * fTemp17); + double fTemp19 = (2.2360679774997898 * fTemp16); + double fTemp20 = double(input8[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp21 = (iSlow1?(iSlow4?(iSlow6?fTemp16:(0.86602540378443871 * fTemp20)):(iSlow5?(1.9364916731037085 * fTemp20):fTemp17)):(iSlow2?(iSlow8?fTemp16:fTemp19):(iSlow3?fTemp18:(iSlow7?(0.44721359549995793 * fTemp16):fTemp16)))); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph11 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = double(input5[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp23 = double(input7[i]); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph13 = FAUSTFLOAT(fRec14[0]); + double fTemp24 = (iSlow1?(iSlow4?(iSlow6?fTemp22:(0.86602540378443871 * fTemp17)):(iSlow5?(1.9364916731037085 * fTemp17):(1.1547005383792515 * fTemp23))):(iSlow2?(iSlow8?fTemp22:(2.2360679774997898 * fTemp22)):(iSlow3?(0.5163977794943222 * fTemp23):(iSlow7?(0.44721359549995793 * fTemp22):fTemp22)))); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph14 = FAUSTFLOAT(fRec12[0]); + output5[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (iSlow1?(iSlow4?(iSlow6?fTemp17:fTemp16):(iSlow5?fTemp19:(1.1547005383792515 * fTemp22))):(iSlow2?(iSlow8?fTemp17:(2.2360679774997898 * fTemp17)):(iSlow3?(0.5163977794943222 * fTemp22):(iSlow7?fTemp18:fTemp17)))); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph15 = FAUSTFLOAT(fRec15[0]); + output6[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (iSlow1?(iSlow4?(iSlow6?fTemp23:(0.86602540378443871 * fTemp22)):(iSlow5?(1.9364916731037085 * fTemp22):(1.1547005383792515 * fTemp20))):(iSlow2?(iSlow8?fTemp23:(2.2360679774997898 * fTemp23)):(iSlow3?(0.5163977794943222 * fTemp20):(iSlow7?(0.44721359549995793 * fTemp23):fTemp23)))); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph16 = FAUSTFLOAT(fRec16[0]); + output7[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (iSlow1?(iSlow4?(iSlow6?fTemp20:(0.86602540378443871 * fTemp23)):(iSlow5?(1.9364916731037085 * fTemp23):(1.1547005383792515 * fTemp16))):(iSlow2?(iSlow8?fTemp20:(2.2360679774997898 * fTemp20)):(iSlow3?(0.5163977794943222 * fTemp16):(iSlow7?(0.44721359549995793 * fTemp20):fTemp20)))); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph17 = FAUSTFLOAT(fRec17[0]); + output8[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp29 = double(input12[i]); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph19 = FAUSTFLOAT(fRec20[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + double fTemp31 = (2.6457513110645907 * fTemp28); + double fTemp32 = double(input15[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp33 = (iSlow1?(iSlow4?(iSlow6?fTemp28:(0.79056941504209477 * fTemp32)):(iSlow5?(2.0916500663351889 * fTemp32):fTemp29)):(iSlow2?(iSlow8?fTemp28:fTemp31):(iSlow3?fTemp30:(iSlow7?(0.3779644730092272 * fTemp28):fTemp28)))); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph21 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = double(input10[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp35 = double(input13[i]); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph23 = FAUSTFLOAT(fRec24[0]); + double fTemp36 = (iSlow1?(iSlow4?(iSlow6?fTemp34:(0.7453559924999299 * fTemp35)):(iSlow5?(1.9720265943665387 * fTemp35):(1.1858541225631423 * fTemp35))):(iSlow2?(iSlow8?fTemp34:(2.6457513110645907 * fTemp34)):(iSlow3?(0.44821072850039761 * fTemp35):(iSlow7?(0.3779644730092272 * fTemp34):fTemp34)))); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph24 = FAUSTFLOAT(fRec22[0]); + output10[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input11[i]); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph25 = FAUSTFLOAT(fRec26[0]); + double fTemp38 = (iSlow1?(iSlow4?(iSlow6?fTemp37:(0.84327404271156781 * fTemp37)):(iSlow5?(2.2310934040908683 * fTemp37):(1.1858541225631423 * fTemp37))):(iSlow2?(iSlow8?fTemp37:(2.6457513110645907 * fTemp37)):(iSlow3?(0.44821072850039761 * fTemp37):(iSlow7?(0.3779644730092272 * fTemp37):fTemp37)))); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph26 = FAUSTFLOAT(fRec25[0]); + output11[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input14[i]); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph27 = FAUSTFLOAT(fRec28[0]); + double fTemp40 = (iSlow1?(iSlow4?(iSlow6?fTemp29:fTemp28):(iSlow5?fTemp31:(1.3416407864998738 * fTemp39))):(iSlow2?(iSlow8?fTemp29:(2.6457513110645907 * fTemp29)):(iSlow3?(0.50709255283710997 * fTemp39):(iSlow7?fTemp30:fTemp29)))); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph28 = FAUSTFLOAT(fRec27[0]); + output12[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (iSlow1?(iSlow4?(iSlow6?fTemp35:(0.84327404271156781 * fTemp34)):(iSlow5?(2.2310934040908683 * fTemp34):(1.3416407864998738 * fTemp34))):(iSlow2?(iSlow8?fTemp35:(2.6457513110645907 * fTemp35)):(iSlow3?(0.50709255283710997 * fTemp34):(iSlow7?(0.3779644730092272 * fTemp35):fTemp35)))); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph29 = FAUSTFLOAT(fRec29[0]); + output13[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (iSlow1?(iSlow4?(iSlow6?fTemp39:(0.7453559924999299 * fTemp29)):(iSlow5?(1.9720265943665387 * fTemp29):(1.2649110640673518 * fTemp32))):(iSlow2?(iSlow8?fTemp39:(2.6457513110645907 * fTemp39)):(iSlow3?(0.47809144373375745 * fTemp32):(iSlow7?(0.3779644730092272 * fTemp39):fTemp39)))); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph30 = FAUSTFLOAT(fRec30[0]); + output14[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (iSlow1?(iSlow4?(iSlow6?fTemp32:(0.79056941504209477 * fTemp39)):(iSlow5?(2.0916500663351889 * fTemp39):(1.2649110640673518 * fTemp28))):(iSlow2?(iSlow8?fTemp32:(2.6457513110645907 * fTemp32)):(iSlow3?(0.47809144373375745 * fTemp28):(iSlow7?(0.3779644730092272 * fTemp32):fTemp32)))); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph31 = FAUSTFLOAT(fRec31[0]); + output15[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + double fTemp45 = (iSlow1?(iSlow4?(iSlow6?fTemp44:0.0):0.0):(iSlow2?(iSlow8?fTemp44:(3.0 * fTemp44)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp44):fTemp44)))); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph33 = FAUSTFLOAT(fRec32[0]); + output16[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph34 = FAUSTFLOAT(fRec35[0]); + double fTemp47 = (iSlow1?(iSlow4?(iSlow6?fTemp46:0.0):0.0):(iSlow2?(iSlow8?fTemp46:(3.0 * fTemp46)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp46):fTemp46)))); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph35 = FAUSTFLOAT(fRec34[0]); + output17[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph36 = FAUSTFLOAT(fRec37[0]); + double fTemp49 = (iSlow1?(iSlow4?(iSlow6?fTemp48:0.0):0.0):(iSlow2?(iSlow8?fTemp48:(3.0 * fTemp48)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp48):fTemp48)))); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph37 = FAUSTFLOAT(fRec36[0]); + output18[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph38 = FAUSTFLOAT(fRec39[0]); + double fTemp51 = (iSlow1?(iSlow4?(iSlow6?fTemp50:0.0):0.0):(iSlow2?(iSlow8?fTemp50:(3.0 * fTemp50)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp50):fTemp50)))); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph39 = FAUSTFLOAT(fRec38[0]); + output19[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph40 = FAUSTFLOAT(fRec41[0]); + double fTemp53 = (iSlow1?(iSlow4?(iSlow6?fTemp52:0.0):0.0):(iSlow2?(iSlow8?fTemp52:(3.0 * fTemp52)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp52):fTemp52)))); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph41 = FAUSTFLOAT(fRec40[0]); + output20[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph42 = FAUSTFLOAT(fRec43[0]); + double fTemp55 = (iSlow1?(iSlow4?(iSlow6?fTemp54:0.0):0.0):(iSlow2?(iSlow8?fTemp54:(3.0 * fTemp54)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp54):fTemp54)))); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph43 = FAUSTFLOAT(fRec42[0]); + output21[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph44 = FAUSTFLOAT(fRec45[0]); + double fTemp57 = (iSlow1?(iSlow4?(iSlow6?fTemp56:0.0):0.0):(iSlow2?(iSlow8?fTemp56:(3.0 * fTemp56)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp56):fTemp56)))); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph45 = FAUSTFLOAT(fRec44[0]); + output22[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph46 = FAUSTFLOAT(fRec47[0]); + double fTemp59 = (iSlow1?(iSlow4?(iSlow6?fTemp58:0.0):0.0):(iSlow2?(iSlow8?fTemp58:(3.0 * fTemp58)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp58):fTemp58)))); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph47 = FAUSTFLOAT(fRec46[0]); + output23[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph48 = FAUSTFLOAT(fRec49[0]); + double fTemp61 = (iSlow1?(iSlow4?(iSlow6?fTemp60:0.0):0.0):(iSlow2?(iSlow8?fTemp60:(3.0 * fTemp60)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp60):fTemp60)))); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph49 = FAUSTFLOAT(fRec48[0]); + output24[i] = FAUSTFLOAT(fTemp61); fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec8[1] = fRec8[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec18[1] = fRec18[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec22[1] = fRec22[0]; + fRec26[1] = fRec26[0]; + fRec25[1] = fRec25[0]; + fRec28[1] = fRec28[0]; + fRec27[1] = fRec27[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec33[1] = fRec33[0]; + fRec32[1] = fRec32[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fRec37[1] = fRec37[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; + fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec43[1] = fRec43[0]; + fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec49[1] = fRec49[0]; + fRec48[1] = fRec48[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1674,3 +2091,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOAConverter5.cpp b/source/HOAUGens/HOAConverter5.cpp old mode 100644 new mode 100755 index 3cf604b8a3..8e82423a66 --- a/source/HOAUGens/HOAConverter5.cpp +++ b/source/HOAUGens/HOAConverter5.cpp @@ -1,19 +1,14 @@ -//---------------------------------------------------------- -// name: "HOAConverter5" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverter5" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,273 +601,824 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double rint(double dummy0); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - FAUSTFLOAT fbargraph0; - double fRec0[2]; - FAUSTFLOAT fbargraph1; - double fRec3[2]; - FAUSTFLOAT fbargraph2; - double fRec4[2]; - FAUSTFLOAT fbargraph3; - double fRec5[2]; - FAUSTFLOAT fbargraph4; - double fRec2[2]; - FAUSTFLOAT fbargraph5; - double fRec6[2]; - FAUSTFLOAT fbargraph6; - double fRec7[2]; - FAUSTFLOAT fbargraph7; - double fRec9[2]; - FAUSTFLOAT fbargraph8; - double fRec10[2]; - FAUSTFLOAT fbargraph9; - double fRec11[2]; - FAUSTFLOAT fbargraph10; - double fRec8[2]; - FAUSTFLOAT fbargraph11; - double fRec13[2]; - FAUSTFLOAT fbargraph12; - double fRec14[2]; - FAUSTFLOAT fbargraph13; - double fRec12[2]; - FAUSTFLOAT fbargraph14; - double fRec15[2]; - FAUSTFLOAT fbargraph15; - double fRec16[2]; - FAUSTFLOAT fbargraph16; - double fRec17[2]; - FAUSTFLOAT fbargraph17; - double fRec19[2]; - FAUSTFLOAT fbargraph18; - double fRec20[2]; - FAUSTFLOAT fbargraph19; - double fRec21[2]; - FAUSTFLOAT fbargraph20; - double fRec18[2]; - FAUSTFLOAT fbargraph21; - double fRec23[2]; - FAUSTFLOAT fbargraph22; - double fRec24[2]; - FAUSTFLOAT fbargraph23; - double fRec22[2]; - FAUSTFLOAT fbargraph24; - double fRec26[2]; - FAUSTFLOAT fbargraph25; - double fRec25[2]; - FAUSTFLOAT fbargraph26; - double fRec28[2]; - FAUSTFLOAT fbargraph27; - double fRec27[2]; - FAUSTFLOAT fbargraph28; - double fRec29[2]; - FAUSTFLOAT fbargraph29; - double fRec30[2]; - FAUSTFLOAT fbargraph30; - double fRec31[2]; - FAUSTFLOAT fbargraph31; - double fRec33[2]; - FAUSTFLOAT fbargraph32; - double fRec32[2]; - FAUSTFLOAT fbargraph33; - double fRec35[2]; - FAUSTFLOAT fbargraph34; - double fRec34[2]; - FAUSTFLOAT fbargraph35; - double fRec37[2]; - FAUSTFLOAT fbargraph36; - double fRec36[2]; - FAUSTFLOAT fbargraph37; - double fRec39[2]; - FAUSTFLOAT fbargraph38; - double fRec38[2]; - FAUSTFLOAT fbargraph39; - double fRec41[2]; - FAUSTFLOAT fbargraph40; - double fRec40[2]; - FAUSTFLOAT fbargraph41; - double fRec43[2]; - FAUSTFLOAT fbargraph42; - double fRec42[2]; - FAUSTFLOAT fbargraph43; - double fRec45[2]; - FAUSTFLOAT fbargraph44; - double fRec44[2]; - FAUSTFLOAT fbargraph45; - double fRec47[2]; - FAUSTFLOAT fbargraph46; - double fRec46[2]; - FAUSTFLOAT fbargraph47; - double fRec49[2]; - FAUSTFLOAT fbargraph48; - double fRec48[2]; - FAUSTFLOAT fbargraph49; - double fRec51[2]; - FAUSTFLOAT fbargraph50; - double fRec50[2]; - FAUSTFLOAT fbargraph51; - double fRec53[2]; - FAUSTFLOAT fbargraph52; - double fRec52[2]; - FAUSTFLOAT fbargraph53; - double fRec55[2]; - FAUSTFLOAT fbargraph54; - double fRec54[2]; - FAUSTFLOAT fbargraph55; - double fRec57[2]; - FAUSTFLOAT fbargraph56; - double fRec56[2]; - FAUSTFLOAT fbargraph57; - double fRec59[2]; - FAUSTFLOAT fbargraph58; - double fRec58[2]; - FAUSTFLOAT fbargraph59; - double fRec61[2]; - FAUSTFLOAT fbargraph60; - double fRec60[2]; - FAUSTFLOAT fbargraph61; - double fRec63[2]; - FAUSTFLOAT fbargraph62; - double fRec62[2]; - FAUSTFLOAT fbargraph63; - double fRec65[2]; - FAUSTFLOAT fbargraph64; - double fRec64[2]; - FAUSTFLOAT fbargraph65; - double fRec67[2]; - FAUSTFLOAT fbargraph66; - double fRec66[2]; - FAUSTFLOAT fbargraph67; - double fRec69[2]; - FAUSTFLOAT fbargraph68; - double fRec68[2]; - FAUSTFLOAT fbargraph69; - double fRec71[2]; - FAUSTFLOAT fbargraph70; - double fRec70[2]; - FAUSTFLOAT fbargraph71; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - m->declare("name", "HOAConverter5"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec2[2]; + FAUSTFLOAT fVbargraph5; + double fRec6[2]; + FAUSTFLOAT fVbargraph6; + double fRec7[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec10[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec8[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec14[2]; + FAUSTFLOAT fVbargraph13; + double fRec12[2]; + FAUSTFLOAT fVbargraph14; + double fRec15[2]; + FAUSTFLOAT fVbargraph15; + double fRec16[2]; + FAUSTFLOAT fVbargraph16; + double fRec17[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec20[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec18[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec24[2]; + FAUSTFLOAT fVbargraph23; + double fRec22[2]; + FAUSTFLOAT fVbargraph24; + double fRec26[2]; + FAUSTFLOAT fVbargraph25; + double fRec25[2]; + FAUSTFLOAT fVbargraph26; + double fRec28[2]; + FAUSTFLOAT fVbargraph27; + double fRec27[2]; + FAUSTFLOAT fVbargraph28; + double fRec29[2]; + FAUSTFLOAT fVbargraph29; + double fRec30[2]; + FAUSTFLOAT fVbargraph30; + double fRec31[2]; + FAUSTFLOAT fVbargraph31; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fRec32[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec34[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec36[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec38[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec40[2]; + FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec42[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec44[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec46[2]; + FAUSTFLOAT fVbargraph47; + double fRec49[2]; + FAUSTFLOAT fVbargraph48; + double fRec48[2]; + FAUSTFLOAT fVbargraph49; + double fRec51[2]; + FAUSTFLOAT fVbargraph50; + double fRec50[2]; + FAUSTFLOAT fVbargraph51; + double fRec53[2]; + FAUSTFLOAT fVbargraph52; + double fRec52[2]; + FAUSTFLOAT fVbargraph53; + double fRec55[2]; + FAUSTFLOAT fVbargraph54; + double fRec54[2]; + FAUSTFLOAT fVbargraph55; + double fRec57[2]; + FAUSTFLOAT fVbargraph56; + double fRec56[2]; + FAUSTFLOAT fVbargraph57; + double fRec59[2]; + FAUSTFLOAT fVbargraph58; + double fRec58[2]; + FAUSTFLOAT fVbargraph59; + double fRec61[2]; + FAUSTFLOAT fVbargraph60; + double fRec60[2]; + FAUSTFLOAT fVbargraph61; + double fRec63[2]; + FAUSTFLOAT fVbargraph62; + double fRec62[2]; + FAUSTFLOAT fVbargraph63; + double fRec65[2]; + FAUSTFLOAT fVbargraph64; + double fRec64[2]; + FAUSTFLOAT fVbargraph65; + double fRec67[2]; + FAUSTFLOAT fVbargraph66; + double fRec66[2]; + FAUSTFLOAT fVbargraph67; + double fRec69[2]; + FAUSTFLOAT fVbargraph68; + double fRec68[2]; + FAUSTFLOAT fVbargraph69; + double fRec71[2]; + FAUSTFLOAT fVbargraph70; + double fRec70[2]; + FAUSTFLOAT fVbargraph71; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAConverter5"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 36; } - virtual int getNumOutputs() { return 36; } + virtual int getNumInputs() { + return 36; + + } + virtual int getNumOutputs() { + return 36; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 1.0; - fslider1 = 1.0; + fHslider0 = FAUSTFLOAT(1.0); + fHslider1 = FAUSTFLOAT(1.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec8[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec12[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec18[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec22[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec25[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec28[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec27[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec35[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec37[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec41[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec43[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec42[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec45[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec44[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec47[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec46[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec51[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec50[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec53[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec52[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec55[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec54[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec56[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec59[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec58[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec61[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec60[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec63[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec62[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec65[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec64[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec67[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec66[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec69[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec68[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec71[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec70[l71] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -839,176 +1428,179 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAConverter5"); - ui_interface->declare(&fslider0, "0", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider0, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fslider1, "0", ""); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider1, "0", ""); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); + ui_interface->declare(&fHslider0, "0", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa513690", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d36450", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa517250", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d434e0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa518a20", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d4f7a0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa51a460", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d48ed0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa521d60", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d66900", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa528b40", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d7d670", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa525210", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d6c1c0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa52a750", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d82f30", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa523660", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d72610", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa534f20", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1da2b50", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa53bf00", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1db9c40", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa5418b0", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dcb8a0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa5384d0", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1da84f0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa53d890", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dbf5e0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa545a20", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dd8100", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa5368b0", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1daea20", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa550c80", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1df8fc0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa5546a0", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e04cc0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa557f20", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e10530", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa55b880", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e1bf60", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa55f2c0", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e27b50", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa562de0", &fbargraph42, -7e+01, 6.0); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e33900", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa5669e0", &fbargraph44, -7e+01, 6.0); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e3f870", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa56a6c0", &fbargraph46, -7e+01, 6.0); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e4b9a0", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa56e480", &fbargraph48, -7e+01, 6.0); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e57c90", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa207fc0", &fbargraph50, -7e+01, 6.0); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e64140", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa20b5d0", &fbargraph52, -7e+01, 6.0); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e6fe30", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa20ed70", &fbargraph54, -7e+01, 6.0); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e7b860", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa2125d0", &fbargraph56, -7e+01, 6.0); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e87450", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2bee34ce0", &fbargraph58, -7e+01, 6.0); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e93200", &fVbargraph58, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1ae260", &fbargraph60, -7e+01, 6.0); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e9f170", &fVbargraph60, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1a9490", &fbargraph62, -7e+01, 6.0); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1eab2a0", &fVbargraph62, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1b3050", &fbargraph64, -7e+01, 6.0); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1eb7590", &fVbargraph64, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph66, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1b6cf0", &fbargraph66, -7e+01, 6.0); + ui_interface->declare(&fVbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ec3a40", &fVbargraph66, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph68, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1baa50", &fbargraph68, -7e+01, 6.0); + ui_interface->declare(&fVbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ed00b0", &fVbargraph68, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph70, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1be870", &fbargraph70, -7e+01, 6.0); + ui_interface->declare(&fVbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1edc8e0", &fVbargraph70, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1016,623 +1608,591 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa515700", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d3d420", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa51c500", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d54860", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa51e3a0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d5ada0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa520100", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d60be0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa526f80", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d77a30", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa52c5c0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d88f70", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa52e6b0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d8f430", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa530bd0", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d95f70", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa533140", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d9cb90", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa53a2f0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1db3f20", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa53fb20", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dc5aa0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa543a70", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dd1e70", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa5478f0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dde020", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa549ea0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1de4d20", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa54c5d0", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1debea0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa54ed70", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1df2d60", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa5529f0", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dfeec0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa556200", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e0a650", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa559af0", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e15fa0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa55d4c0", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e21ab0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa560f70", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e2d780", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa564b00", &fbargraph43, -7e+01, 6.0); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e39610", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa568770", &fbargraph45, -7e+01, 6.0); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e45660", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa56c4c0", &fbargraph47, -7e+01, 6.0); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e51870", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa5702f0", &fbargraph49, -7e+01, 6.0); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e5dc40", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa2098f0", &fbargraph51, -7e+01, 6.0); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e69f50", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa20d090", &fbargraph53, -7e+01, 6.0); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e758a0", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa210890", &fbargraph55, -7e+01, 6.0); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e813b0", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa214150", &fbargraph57, -7e+01, 6.0); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e8d080", &fVbargraph57, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1afec0", &fbargraph59, -7e+01, 6.0); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e98f10", &fVbargraph59, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1ab620", &fbargraph61, -7e+01, 6.0); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ea4f60", &fVbargraph61, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1b11e0", &fbargraph63, -7e+01, 6.0); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1eb1170", &fVbargraph63, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1b4d90", &fbargraph65, -7e+01, 6.0); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ebd540", &fVbargraph65, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph67, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1b8a90", &fbargraph67, -7e+01, 6.0); + ui_interface->declare(&fVbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ec9ad0", &fVbargraph67, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph69, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1bc850", &fbargraph69, -7e+01, 6.0); + ui_interface->declare(&fVbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ed6220", &fVbargraph69, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph71, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff2aa1c06d0", &fbargraph71, -7e+01, 6.0); + ui_interface->declare(&fVbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ee2b30", &fVbargraph71, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = int((((3 * rint(double(fslider0))) + rint(double(fslider1))) + -4)); - int iSlow1 = int((iSlow0 >= 5)); - int iSlow2 = int((iSlow0 >= 7)); - int iSlow3 = int((iSlow0 >= 8)); - int iSlow4 = int((iSlow0 >= 6)); - int iSlow5 = int((iSlow0 >= 3)); - int iSlow6 = int((iSlow0 >= 2)); - int iSlow7 = int((iSlow0 >= 4)); - int iSlow8 = int((iSlow0 >= 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - for (int i=0; i= 5); + int iSlow2 = (iSlow0 >= 3); + int iSlow3 = (iSlow0 >= 2); + int iSlow4 = (iSlow0 >= 7); + int iSlow5 = (iSlow0 >= 6); + int iSlow6 = (iSlow0 >= 8); + int iSlow7 = (iSlow0 >= 1); + int iSlow8 = (iSlow0 >= 4); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (0.70710678118654746 * fTemp0); + double fTemp2 = (1.4142135623730951 * fTemp0); + double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp5 = (0.57735026918962584 * fTemp4); + double fTemp6 = double(input3[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + double fTemp7 = (0.57735026918962584 * fTemp6); + double fTemp8 = (1.7320508075688772 * fTemp4); + double fTemp9 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp10 = (1.7320508075688772 * fTemp9); + double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph5 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.57735026918962584 * fTemp9); + double fTemp13 = (1.7320508075688772 * fTemp6); + double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph6 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph7 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp17 = double(input6[i]); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph9 = FAUSTFLOAT(fRec10[0]); + double fTemp18 = (0.44721359549995793 * fTemp17); + double fTemp19 = (2.2360679774997898 * fTemp16); + double fTemp20 = double(input8[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp21 = (iSlow1?(iSlow4?(iSlow6?fTemp16:(0.86602540378443871 * fTemp20)):(iSlow5?(1.9364916731037085 * fTemp20):fTemp17)):(iSlow2?(iSlow8?fTemp16:fTemp19):(iSlow3?fTemp18:(iSlow7?(0.44721359549995793 * fTemp16):fTemp16)))); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph11 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = double(input5[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp23 = double(input7[i]); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph13 = FAUSTFLOAT(fRec14[0]); + double fTemp24 = (iSlow1?(iSlow4?(iSlow6?fTemp22:(0.86602540378443871 * fTemp17)):(iSlow5?(1.9364916731037085 * fTemp17):(1.1547005383792515 * fTemp23))):(iSlow2?(iSlow8?fTemp22:(2.2360679774997898 * fTemp22)):(iSlow3?(0.5163977794943222 * fTemp23):(iSlow7?(0.44721359549995793 * fTemp22):fTemp22)))); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph14 = FAUSTFLOAT(fRec12[0]); + output5[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (iSlow1?(iSlow4?(iSlow6?fTemp17:fTemp16):(iSlow5?fTemp19:(1.1547005383792515 * fTemp22))):(iSlow2?(iSlow8?fTemp17:(2.2360679774997898 * fTemp17)):(iSlow3?(0.5163977794943222 * fTemp22):(iSlow7?fTemp18:fTemp17)))); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph15 = FAUSTFLOAT(fRec15[0]); + output6[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (iSlow1?(iSlow4?(iSlow6?fTemp23:(0.86602540378443871 * fTemp22)):(iSlow5?(1.9364916731037085 * fTemp22):(1.1547005383792515 * fTemp20))):(iSlow2?(iSlow8?fTemp23:(2.2360679774997898 * fTemp23)):(iSlow3?(0.5163977794943222 * fTemp20):(iSlow7?(0.44721359549995793 * fTemp23):fTemp23)))); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph16 = FAUSTFLOAT(fRec16[0]); + output7[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (iSlow1?(iSlow4?(iSlow6?fTemp20:(0.86602540378443871 * fTemp23)):(iSlow5?(1.9364916731037085 * fTemp23):(1.1547005383792515 * fTemp16))):(iSlow2?(iSlow8?fTemp20:(2.2360679774997898 * fTemp20)):(iSlow3?(0.5163977794943222 * fTemp16):(iSlow7?(0.44721359549995793 * fTemp20):fTemp20)))); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph17 = FAUSTFLOAT(fRec17[0]); + output8[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp29 = double(input12[i]); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph19 = FAUSTFLOAT(fRec20[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + double fTemp31 = (2.6457513110645907 * fTemp28); + double fTemp32 = double(input15[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp33 = (iSlow1?(iSlow4?(iSlow6?fTemp28:(0.79056941504209477 * fTemp32)):(iSlow5?(2.0916500663351889 * fTemp32):fTemp29)):(iSlow2?(iSlow8?fTemp28:fTemp31):(iSlow3?fTemp30:(iSlow7?(0.3779644730092272 * fTemp28):fTemp28)))); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph21 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = double(input10[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp35 = double(input13[i]); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph23 = FAUSTFLOAT(fRec24[0]); + double fTemp36 = (iSlow1?(iSlow4?(iSlow6?fTemp34:(0.7453559924999299 * fTemp35)):(iSlow5?(1.9720265943665387 * fTemp35):(1.1858541225631423 * fTemp35))):(iSlow2?(iSlow8?fTemp34:(2.6457513110645907 * fTemp34)):(iSlow3?(0.44821072850039761 * fTemp35):(iSlow7?(0.3779644730092272 * fTemp34):fTemp34)))); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph24 = FAUSTFLOAT(fRec22[0]); + output10[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input11[i]); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph25 = FAUSTFLOAT(fRec26[0]); + double fTemp38 = (iSlow1?(iSlow4?(iSlow6?fTemp37:(0.84327404271156781 * fTemp37)):(iSlow5?(2.2310934040908683 * fTemp37):(1.1858541225631423 * fTemp37))):(iSlow2?(iSlow8?fTemp37:(2.6457513110645907 * fTemp37)):(iSlow3?(0.44821072850039761 * fTemp37):(iSlow7?(0.3779644730092272 * fTemp37):fTemp37)))); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph26 = FAUSTFLOAT(fRec25[0]); + output11[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input14[i]); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph27 = FAUSTFLOAT(fRec28[0]); + double fTemp40 = (iSlow1?(iSlow4?(iSlow6?fTemp29:fTemp28):(iSlow5?fTemp31:(1.3416407864998738 * fTemp39))):(iSlow2?(iSlow8?fTemp29:(2.6457513110645907 * fTemp29)):(iSlow3?(0.50709255283710997 * fTemp39):(iSlow7?fTemp30:fTemp29)))); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph28 = FAUSTFLOAT(fRec27[0]); + output12[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (iSlow1?(iSlow4?(iSlow6?fTemp35:(0.84327404271156781 * fTemp34)):(iSlow5?(2.2310934040908683 * fTemp34):(1.3416407864998738 * fTemp34))):(iSlow2?(iSlow8?fTemp35:(2.6457513110645907 * fTemp35)):(iSlow3?(0.50709255283710997 * fTemp34):(iSlow7?(0.3779644730092272 * fTemp35):fTemp35)))); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph29 = FAUSTFLOAT(fRec29[0]); + output13[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (iSlow1?(iSlow4?(iSlow6?fTemp39:(0.7453559924999299 * fTemp29)):(iSlow5?(1.9720265943665387 * fTemp29):(1.2649110640673518 * fTemp32))):(iSlow2?(iSlow8?fTemp39:(2.6457513110645907 * fTemp39)):(iSlow3?(0.47809144373375745 * fTemp32):(iSlow7?(0.3779644730092272 * fTemp39):fTemp39)))); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph30 = FAUSTFLOAT(fRec30[0]); + output14[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (iSlow1?(iSlow4?(iSlow6?fTemp32:(0.79056941504209477 * fTemp39)):(iSlow5?(2.0916500663351889 * fTemp39):(1.2649110640673518 * fTemp28))):(iSlow2?(iSlow8?fTemp32:(2.6457513110645907 * fTemp32)):(iSlow3?(0.47809144373375745 * fTemp28):(iSlow7?(0.3779644730092272 * fTemp32):fTemp32)))); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph31 = FAUSTFLOAT(fRec31[0]); + output15[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + double fTemp45 = (iSlow1?(iSlow4?(iSlow6?fTemp44:0.0):0.0):(iSlow2?(iSlow8?fTemp44:(3.0 * fTemp44)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp44):fTemp44)))); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph33 = FAUSTFLOAT(fRec32[0]); + output16[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph34 = FAUSTFLOAT(fRec35[0]); + double fTemp47 = (iSlow1?(iSlow4?(iSlow6?fTemp46:0.0):0.0):(iSlow2?(iSlow8?fTemp46:(3.0 * fTemp46)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp46):fTemp46)))); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph35 = FAUSTFLOAT(fRec34[0]); + output17[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph36 = FAUSTFLOAT(fRec37[0]); + double fTemp49 = (iSlow1?(iSlow4?(iSlow6?fTemp48:0.0):0.0):(iSlow2?(iSlow8?fTemp48:(3.0 * fTemp48)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp48):fTemp48)))); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph37 = FAUSTFLOAT(fRec36[0]); + output18[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph38 = FAUSTFLOAT(fRec39[0]); + double fTemp51 = (iSlow1?(iSlow4?(iSlow6?fTemp50:0.0):0.0):(iSlow2?(iSlow8?fTemp50:(3.0 * fTemp50)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp50):fTemp50)))); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph39 = FAUSTFLOAT(fRec38[0]); + output19[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph40 = FAUSTFLOAT(fRec41[0]); + double fTemp53 = (iSlow1?(iSlow4?(iSlow6?fTemp52:0.0):0.0):(iSlow2?(iSlow8?fTemp52:(3.0 * fTemp52)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp52):fTemp52)))); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph41 = FAUSTFLOAT(fRec40[0]); + output20[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph42 = FAUSTFLOAT(fRec43[0]); + double fTemp55 = (iSlow1?(iSlow4?(iSlow6?fTemp54:0.0):0.0):(iSlow2?(iSlow8?fTemp54:(3.0 * fTemp54)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp54):fTemp54)))); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph43 = FAUSTFLOAT(fRec42[0]); + output21[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph44 = FAUSTFLOAT(fRec45[0]); + double fTemp57 = (iSlow1?(iSlow4?(iSlow6?fTemp56:0.0):0.0):(iSlow2?(iSlow8?fTemp56:(3.0 * fTemp56)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp56):fTemp56)))); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph45 = FAUSTFLOAT(fRec44[0]); + output22[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph46 = FAUSTFLOAT(fRec47[0]); + double fTemp59 = (iSlow1?(iSlow4?(iSlow6?fTemp58:0.0):0.0):(iSlow2?(iSlow8?fTemp58:(3.0 * fTemp58)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp58):fTemp58)))); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph47 = FAUSTFLOAT(fRec46[0]); + output23[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph48 = FAUSTFLOAT(fRec49[0]); + double fTemp61 = (iSlow1?(iSlow4?(iSlow6?fTemp60:0.0):0.0):(iSlow2?(iSlow8?fTemp60:(3.0 * fTemp60)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp60):fTemp60)))); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph49 = FAUSTFLOAT(fRec48[0]); + output24[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = double(input25[i]); + fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph50 = FAUSTFLOAT(fRec51[0]); + double fTemp63 = (iSlow1?(iSlow4?(iSlow6?fTemp62:0.0):0.0):(iSlow2?(iSlow8?fTemp62:(3.3166247903553998 * fTemp62)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp62):fTemp62)))); + fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph51 = FAUSTFLOAT(fRec50[0]); + output25[i] = FAUSTFLOAT(fTemp63); + double fTemp64 = double(input26[i]); + fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph52 = FAUSTFLOAT(fRec53[0]); + double fTemp65 = (iSlow1?(iSlow4?(iSlow6?fTemp64:0.0):0.0):(iSlow2?(iSlow8?fTemp64:(3.3166247903553998 * fTemp64)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp64):fTemp64)))); + fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph53 = FAUSTFLOAT(fRec52[0]); + output26[i] = FAUSTFLOAT(fTemp65); + double fTemp66 = double(input27[i]); + fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph54 = FAUSTFLOAT(fRec55[0]); + double fTemp67 = (iSlow1?(iSlow4?(iSlow6?fTemp66:0.0):0.0):(iSlow2?(iSlow8?fTemp66:(3.3166247903553998 * fTemp66)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp66):fTemp66)))); + fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); + fVbargraph55 = FAUSTFLOAT(fRec54[0]); + output27[i] = FAUSTFLOAT(fTemp67); + double fTemp68 = double(input28[i]); + fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph56 = FAUSTFLOAT(fRec57[0]); + double fTemp69 = (iSlow1?(iSlow4?(iSlow6?fTemp68:0.0):0.0):(iSlow2?(iSlow8?fTemp68:(3.3166247903553998 * fTemp68)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp68):fTemp68)))); + fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph57 = FAUSTFLOAT(fRec56[0]); + output28[i] = FAUSTFLOAT(fTemp69); + double fTemp70 = double(input29[i]); + fRec59[0] = max((fRec59[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph58 = FAUSTFLOAT(fRec59[0]); + double fTemp71 = (iSlow1?(iSlow4?(iSlow6?fTemp70:0.0):0.0):(iSlow2?(iSlow8?fTemp70:(3.3166247903553998 * fTemp70)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp70):fTemp70)))); + fRec58[0] = max((fRec58[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph59 = FAUSTFLOAT(fRec58[0]); + output29[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = double(input30[i]); + fRec61[0] = max((fRec61[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph60 = FAUSTFLOAT(fRec61[0]); + double fTemp73 = (iSlow1?(iSlow4?(iSlow6?fTemp72:0.0):0.0):(iSlow2?(iSlow8?fTemp72:(3.3166247903553998 * fTemp72)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp72):fTemp72)))); + fRec60[0] = max((fRec60[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph61 = FAUSTFLOAT(fRec60[0]); + output30[i] = FAUSTFLOAT(fTemp73); + double fTemp74 = double(input31[i]); + fRec63[0] = max((fRec63[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + fVbargraph62 = FAUSTFLOAT(fRec63[0]); + double fTemp75 = (iSlow1?(iSlow4?(iSlow6?fTemp74:0.0):0.0):(iSlow2?(iSlow8?fTemp74:(3.3166247903553998 * fTemp74)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp74):fTemp74)))); + fRec62[0] = max((fRec62[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp75)))))); + fVbargraph63 = FAUSTFLOAT(fRec62[0]); + output31[i] = FAUSTFLOAT(fTemp75); + double fTemp76 = double(input32[i]); + fRec65[0] = max((fRec65[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph64 = FAUSTFLOAT(fRec65[0]); + double fTemp77 = (iSlow1?(iSlow4?(iSlow6?fTemp76:0.0):0.0):(iSlow2?(iSlow8?fTemp76:(3.3166247903553998 * fTemp76)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp76):fTemp76)))); + fRec64[0] = max((fRec64[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph65 = FAUSTFLOAT(fRec64[0]); + output32[i] = FAUSTFLOAT(fTemp77); + double fTemp78 = double(input33[i]); + fRec67[0] = max((fRec67[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph66 = FAUSTFLOAT(fRec67[0]); + double fTemp79 = (iSlow1?(iSlow4?(iSlow6?fTemp78:0.0):0.0):(iSlow2?(iSlow8?fTemp78:(3.3166247903553998 * fTemp78)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp78):fTemp78)))); + fRec66[0] = max((fRec66[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + fVbargraph67 = FAUSTFLOAT(fRec66[0]); + output33[i] = FAUSTFLOAT(fTemp79); + double fTemp80 = double(input34[i]); + fRec69[0] = max((fRec69[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + fVbargraph68 = FAUSTFLOAT(fRec69[0]); + double fTemp81 = (iSlow1?(iSlow4?(iSlow6?fTemp80:0.0):0.0):(iSlow2?(iSlow8?fTemp80:(3.3166247903553998 * fTemp80)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp80):fTemp80)))); + fRec68[0] = max((fRec68[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + fVbargraph69 = FAUSTFLOAT(fRec68[0]); + output34[i] = FAUSTFLOAT(fTemp81); + double fTemp82 = double(input35[i]); + fRec71[0] = max((fRec71[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph70 = FAUSTFLOAT(fRec71[0]); + double fTemp83 = (iSlow1?(iSlow4?(iSlow6?fTemp82:0.0):0.0):(iSlow2?(iSlow8?fTemp82:(3.3166247903553998 * fTemp82)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp82):fTemp82)))); + fRec70[0] = max((fRec70[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph71 = FAUSTFLOAT(fRec70[0]); + output35[i] = FAUSTFLOAT(fTemp83); fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec8[1] = fRec8[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec18[1] = fRec18[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec22[1] = fRec22[0]; + fRec26[1] = fRec26[0]; + fRec25[1] = fRec25[0]; + fRec28[1] = fRec28[0]; + fRec27[1] = fRec27[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec33[1] = fRec33[0]; + fRec32[1] = fRec32[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fRec37[1] = fRec37[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; + fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec43[1] = fRec43[0]; + fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec49[1] = fRec49[0]; + fRec48[1] = fRec48[0]; + fRec51[1] = fRec51[0]; + fRec50[1] = fRec50[0]; + fRec53[1] = fRec53[0]; + fRec52[1] = fRec52[0]; + fRec55[1] = fRec55[0]; + fRec54[1] = fRec54[0]; + fRec57[1] = fRec57[0]; + fRec56[1] = fRec56[0]; + fRec59[1] = fRec59[0]; + fRec58[1] = fRec58[0]; + fRec61[1] = fRec61[0]; + fRec60[1] = fRec60[0]; + fRec63[1] = fRec63[0]; + fRec62[1] = fRec62[0]; + fRec65[1] = fRec65[0]; + fRec64[1] = fRec64[0]; + fRec67[1] = fRec67[0]; + fRec66[1] = fRec66[0]; + fRec69[1] = fRec69[0]; + fRec68[1] = fRec68[0]; + fRec71[1] = fRec71[0]; + fRec70[1] = fRec70[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -1964,3 +2524,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOADecBinauralLebedev501.cpp b/source/HOAUGens/HOADecBinauralLebedev501.cpp new file mode 100755 index 0000000000..c00b2c7b53 --- /dev/null +++ b/source/HOAUGens/HOADecBinauralLebedev501.cpp @@ -0,0 +1,1242 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL)" +name: "HOADecBinauralLebedev501" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + int IOTA; + double fVec0[128]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fVec1[128]; + double fRec5[2]; + FAUSTFLOAT fVbargraph2; + double fVec2[128]; + double fRec6[2]; + FAUSTFLOAT fVbargraph3; + double fVec3[128]; + double fRec0[2]; + FAUSTFLOAT fHbargraph0; + double fRec7[2]; + FAUSTFLOAT fHbargraph1; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("license", "GPL)"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOADecBinauralLebedev501"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + IOTA = 0; + for (int l3 = 0; (l3 < 128); l3 = (l3 + 1)) { + fVec0[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 128); l5 = (l5 + 1)) { + fVec1[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec5[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 128); l7 = (l7 + 1)) { + fVec2[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec6[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 128); l9 = (l9 + 1)) { + fVec3[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec0[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec7[l11] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecBinauralLebedev501"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x442b120", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x4408a30", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x43dcb20", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x43b1140", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 10"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 10"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->closeBox(); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("Left"); + ui_interface->declare(&fHbargraph0, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x451a1b0", &fHbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Right"); + ui_interface->declare(&fHbargraph1, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x45cf730", &fHbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec3[0] = (fSlow1 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input3[i])); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + fVec0[(IOTA & 127)] = fTemp0; + double fTemp1 = (fRec3[0] * double(input2[i])); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec4[0]); + fVec1[(IOTA & 127)] = fTemp1; + double fTemp2 = (fRec3[0] * double(input1[i])); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec5[0]); + fVec2[(IOTA & 127)] = fTemp2; + double fTemp3 = (fRec3[0] * double(input0[i])); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec6[0]); + fVec3[(IOTA & 127)] = fTemp3; + double fTemp4 = (fRec1[0] * (((2.4533100000000001e-06 * fVec0[((IOTA - 126) & 127)]) + ((1.70273e-06 * fVec0[((IOTA - 125) & 127)]) + ((8.0341699999999997e-06 * fVec0[((IOTA - 123) & 127)]) + ((3.8827600000000008e-05 * fVec0[((IOTA - 122) & 127)]) + ((0.000101833 * fVec0[((IOTA - 121) & 127)]) + ((0.000105639 * fVec0[((IOTA - 120) & 127)]) + ((3.9296600000000006e-05 * fVec0[((IOTA - 119) & 127)]) + ((3.85491e-05 * fVec0[((IOTA - 117) & 127)]) + ((0.00018456300000000003 * fVec0[((IOTA - 116) & 127)]) + ((0.000184012 * fVec0[((IOTA - 115) & 127)]) + ((0.0019589099999999999 * fVec0[((IOTA - 96) & 127)]) + ((0.0031713800000000001 * fVec0[((IOTA - 95) & 127)]) + ((0.00068253400000000005 * fVec0[((IOTA - 94) & 127)]) + ((0.00056285600000000003 * fVec0[((IOTA - 91) & 127)]) + ((0.0014036900000000002 * fVec0[((IOTA - 90) & 127)]) + ((0.00337025 * fVec0[((IOTA - 87) & 127)]) + ((0.0052786200000000004 * fVec0[((IOTA - 86) & 127)]) + ((0.0015441700000000001 * fVec0[((IOTA - 85) & 127)]) + ((0.00036768800000000002 * fVec0[((IOTA - 84) & 127)]) + ((0.00069545300000000007 * fVec0[((IOTA - 83) & 127)]) + ((0.0010311999999999999 * fVec0[((IOTA - 65) & 127)]) + ((0.00113331 * fVec0[((IOTA - 64) & 127)]) + ((0.0014698599999999999 * fVec0[((IOTA - 63) & 127)]) + ((0.0020663499999999998 * fVec0[((IOTA - 57) & 127)]) + ((0.00288332 * fVec0[((IOTA - 56) & 127)]) + ((0.0008817050000000001 * fVec0[((IOTA - 55) & 127)]) + ((0.0035919900000000002 * fVec0[((IOTA - 54) & 127)]) + ((0.0016634199999999999 * fVec0[((IOTA - 53) & 127)]) + ((0.0012247 * fVec0[((IOTA - 52) & 127)]) + ((0.00117636 * fVec0[((IOTA - 51) & 127)]) + ((0.0053477200000000003 * fVec0[((IOTA - 49) & 127)]) + ((0.00571347 * fVec0[((IOTA - 48) & 127)]) + ((0.0068109299999999998 * fVec0[((IOTA - 45) & 127)]) + ((0.00503769 * fVec0[((IOTA - 44) & 127)]) + ((0.0033690899999999999 * fVec0[((IOTA - 43) & 127)]) + ((0.0081425600000000001 * fVec0[((IOTA - 42) & 127)]) + ((0.0048383499999999999 * fVec0[((IOTA - 39) & 127)]) + ((1.73416e-05 * fVec0[((IOTA - 38) & 127)]) + ((0.0011593500000000002 * fVec0[((IOTA - 37) & 127)]) + ((0.00341282 * fVec0[((IOTA - 36) & 127)]) + ((0.0053672899999999994 * fVec0[((IOTA - 34) & 127)]) + ((0.0060068300000000003 * fVec0[((IOTA - 33) & 127)]) + ((0.036282299999999996 * fVec0[((IOTA - 30) & 127)]) + ((0.0096774400000000007 * fVec0[((IOTA - 29) & 127)]) + ((0.03066 * fVec0[((IOTA - 26) & 127)]) + ((0.0019489700000000002 * fVec0[((IOTA - 23) & 127)]) + ((9.4065400000000002e-05 * fVec0[((IOTA - 22) & 127)]) + ((0.000702438 * fVec0[((IOTA - 20) & 127)]) + ((0.0174746 * fVec0[((IOTA - 18) & 127)]) + ((0.021190899999999999 * fVec0[((IOTA - 17) & 127)]) + ((0.0025345699999999999 * fVec0[((IOTA - 16) & 127)]) + ((0.0025992000000000003 * fVec0[((IOTA - 15) & 127)]) + ((0.0061892400000000004 * fVec0[((IOTA - 13) & 127)]) + ((0.0020100199999999999 * fVec0[((IOTA - 10) & 127)]) + ((0.00148817 * fVec0[((IOTA - 8) & 127)]) + ((0.00053443399999999997 * fVec0[((IOTA - 6) & 127)]) + ((0.00069470999999999997 * fVec0[((IOTA - 4) & 127)]) + ((0.00013874000000000002 * fVec0[((IOTA - 2) & 127)]) + ((2.49699e-05 * fVec0[((IOTA - 1) & 127)]) + ((9.9362800000000004e-06 * fTemp0) + ((2.4082099999999999e-06 * fVec1[((IOTA - 126) & 127)]) + ((8.464169999999999e-06 * fVec1[((IOTA - 125) & 127)]) + ((8.8836499999999992e-06 * fVec1[((IOTA - 124) & 127)]) + ((8.7967399999999994e-06 * fVec1[((IOTA - 123) & 127)]) + ((2.4375700000000001e-05 * fVec1[((IOTA - 122) & 127)]) + ((8.0066800000000004e-05 * fVec1[((IOTA - 121) & 127)]) + ((9.9426100000000014e-05 * fVec1[((IOTA - 120) & 127)]) + ((9.0816700000000014e-05 * fVec1[((IOTA - 119) & 127)]) + ((5.80835e-05 * fVec1[((IOTA - 118) & 127)]) + ((7.7452699999999998e-05 * fVec1[((IOTA - 117) & 127)]) + ((9.5024799999999997e-07 * fVec1[((IOTA - 116) & 127)]) + ((5.1149400000000002e-05 * fVec1[((IOTA - 98) & 127)]) + ((0.00032476299999999999 * fVec1[((IOTA - 97) & 127)]) + ((0.0012872900000000002 * fVec1[((IOTA - 94) & 127)]) + ((0.0022912900000000001 * fVec1[((IOTA - 93) & 127)]) + ((0.00119739 * fVec1[((IOTA - 92) & 127)]) + ((0.00070883900000000006 * fVec0[((IOTA - 62) & 127)]) + ((0.0019518999999999999 * fVec1[((IOTA - 90) & 127)]) + ((0.0043689900000000005 * fVec1[((IOTA - 89) & 127)]) + ((0.00375801 * fVec1[((IOTA - 88) & 127)]) + ((0.0016994499999999999 * fVec1[((IOTA - 87) & 127)]) + ((0.0032713800000000004 * fVec1[((IOTA - 86) & 127)]) + ((0.0036832600000000003 * fVec1[((IOTA - 85) & 127)]) + ((0.00089328000000000009 * fVec1[((IOTA - 84) & 127)]) + ((0.00072158200000000002 * fVec1[((IOTA - 83) & 127)]) + ((0.00038337700000000001 * fVec1[((IOTA - 80) & 127)]) + ((0.0016079900000000001 * fVec1[((IOTA - 79) & 127)]) + ((0.0020680200000000003 * fVec1[((IOTA - 78) & 127)]) + ((0.00028545500000000005 * fVec1[((IOTA - 77) & 127)]) + ((0.00025900400000000002 * fVec1[((IOTA - 75) & 127)]) + ((3.3718100000000005e-05 * fVec1[((IOTA - 63) & 127)]) + ((0.0016691100000000001 * fVec1[((IOTA - 62) & 127)]) + ((0.00089519800000000015 * fVec1[((IOTA - 60) & 127)]) + ((0.00079125400000000002 * fVec1[((IOTA - 59) & 127)]) + ((0.00099548200000000001 * fVec1[((IOTA - 58) & 127)]) + ((0.0024358800000000001 * fVec1[((IOTA - 54) & 127)]) + ((0.0056765999999999995 * fVec1[((IOTA - 53) & 127)]) + ((0.0027909200000000001 * fVec1[((IOTA - 52) & 127)]) + ((0.00077908600000000012 * fVec1[((IOTA - 51) & 127)]) + ((0.0016214599999999999 * fVec1[((IOTA - 50) & 127)]) + ((0.0042173100000000002 * fVec1[((IOTA - 48) & 127)]) + ((0.0091871399999999999 * fVec1[((IOTA - 47) & 127)]) + ((0.0013077200000000001 * fVec1[((IOTA - 46) & 127)]) + ((0.0021427500000000001 * fVec1[((IOTA - 45) & 127)]) + ((0.0022329500000000005 * fVec1[((IOTA - 44) & 127)]) + ((0.0028589500000000003 * fVec1[((IOTA - 42) & 127)]) + ((0.0070971000000000003 * fVec1[((IOTA - 41) & 127)]) + ((0.0053105900000000004 * fVec1[((IOTA - 40) & 127)]) + ((0.0030150300000000001 * fVec1[((IOTA - 39) & 127)]) + ((0.00053429399999999994 * fVec1[((IOTA - 36) & 127)]) + ((0.0164669 * fVec1[((IOTA - 35) & 127)]) + ((0.0086483100000000011 * fVec1[((IOTA - 32) & 127)]) + ((0.021576300000000003 * fVec1[((IOTA - 29) & 127)]) + ((0.021685099999999999 * fVec1[((IOTA - 28) & 127)]) + ((0.0057969700000000002 * fVec1[((IOTA - 26) & 127)]) + ((0.0057622799999999998 * fVec1[((IOTA - 24) & 127)]) + ((0.0197594 * fVec1[((IOTA - 21) & 127)]) + ((0.0121098 * fVec1[((IOTA - 20) & 127)]) + ((0.032535399999999999 * fVec1[((IOTA - 17) & 127)]) + ((0.00050339700000000005 * fVec1[((IOTA - 14) & 127)]) + ((0.00086802899999999998 * fVec1[((IOTA - 13) & 127)]) + ((0.0016583500000000001 * fVec1[((IOTA - 8) & 127)]) + ((0.00031507000000000003 * fVec1[((IOTA - 5) & 127)]) + ((0.00049461800000000005 * fVec1[((IOTA - 4) & 127)]) + ((0.00015840400000000001 * fVec1[((IOTA - 2) & 127)]) + ((2.8519800000000004e-05 * fVec1[((IOTA - 1) & 127)]) + ((4.4578800000000004e-06 * fTemp1) + ((1.1796500000000001e-05 * fVec2[((IOTA - 114) & 127)]) + ((0.00041981599999999999 * fVec2[((IOTA - 107) & 127)]) + ((5.3605900000000008e-05 * fVec2[((IOTA - 105) & 127)]) + ((0.00046969700000000004 * fVec2[((IOTA - 104) & 127)]) + ((0.00047704000000000008 * fVec2[((IOTA - 103) & 127)]) + ((0.00043236800000000009 * fVec2[((IOTA - 102) & 127)]) + ((0.00070973900000000003 * fVec2[((IOTA - 101) & 127)]) + ((0.000705385 * fVec2[((IOTA - 100) & 127)]) + ((0.00045614100000000008 * fVec2[((IOTA - 99) & 127)]) + ((0.00092227100000000001 * fVec2[((IOTA - 98) & 127)]) + ((0.00081300600000000002 * fVec2[((IOTA - 97) & 127)]) + ((0.000623519 * fVec2[((IOTA - 96) & 127)]) + ((0.0013659500000000001 * fVec2[((IOTA - 95) & 127)]) + ((0.00214314 * fVec2[((IOTA - 94) & 127)]) + ((0.0016777999999999999 * fVec2[((IOTA - 93) & 127)]) + ((0.00108099 * fVec2[((IOTA - 92) & 127)]) + ((6.7984800000000007e-05 * fVec2[((IOTA - 90) & 127)]) + ((0.000264467 * fVec2[((IOTA - 89) & 127)]) + ((0.00045975200000000007 * fVec2[((IOTA - 88) & 127)]) + ((0.0013345100000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.0013671599999999999 * fVec2[((IOTA - 86) & 127)]) + ((0.00088433700000000001 * fVec2[((IOTA - 85) & 127)]) + ((0.0010498400000000002 * fVec2[((IOTA - 84) & 127)]) + ((0.00300031 * fVec2[((IOTA - 83) & 127)]) + ((0.00033132700000000002 * fVec2[((IOTA - 82) & 127)]) + ((0.0037660800000000002 * fVec1[((IOTA - 33) & 127)]) + ((2.3648600000000003e-05 * fVec2[((IOTA - 80) & 127)]) + ((0.00058793100000000009 * fVec2[((IOTA - 79) & 127)]) + ((0.0027816299999999998 * fVec2[((IOTA - 78) & 127)]) + ((0.0017765299999999999 * fVec2[((IOTA - 77) & 127)]) + ((0.00046795000000000002 * fVec2[((IOTA - 73) & 127)]) + ((0.0016152100000000002 * fVec2[((IOTA - 72) & 127)]) + ((0.00010376700000000001 * fVec2[((IOTA - 71) & 127)]) + ((0.058508199999999996 * fVec2[((IOTA - 22) & 127)]) + ((0.050635700000000006 * fVec2[((IOTA - 21) & 127)]) + ((0.041341200000000002 * fVec2[((IOTA - 20) & 127)]) + ((0.0214629 * fVec2[((IOTA - 19) & 127)]) + ((0.029345699999999999 * fVec2[((IOTA - 18) & 127)]) + ((0.088954799999999987 * fVec2[((IOTA - 17) & 127)]) + ((0.078143400000000002 * fVec2[((IOTA - 15) & 127)]) + ((0.060886200000000001 * fVec2[((IOTA - 14) & 127)]) + ((0.077131900000000003 * fVec2[((IOTA - 13) & 127)]) + ((0.090551499999999993 * fVec2[((IOTA - 12) & 127)]) + ((0.0054581200000000003 * fVec2[((IOTA - 11) & 127)]) + ((0.0018110400000000001 * fVec2[((IOTA - 9) & 127)]) + ((0.00194177 * fVec2[((IOTA - 7) & 127)]) + ((0.00114689 * fVec2[((IOTA - 5) & 127)]) + ((0.00058690300000000006 * fVec2[((IOTA - 4) & 127)]) + ((0.0012299100000000001 * fVec2[((IOTA - 3) & 127)]) + ((0.00015469 * fVec2[((IOTA - 1) & 127)]) + ((3.3955100000000003e-05 * fTemp2) + ((2.0625300000000001e-06 * fVec3[((IOTA - 126) & 127)]) + ((5.0813899999999995e-06 * fVec3[((IOTA - 125) & 127)]) + ((5.7126099999999992e-06 * fVec3[((IOTA - 124) & 127)]) + ((2.09787e-05 * fVec3[((IOTA - 123) & 127)]) + ((1.8717900000000003e-05 * fVec3[((IOTA - 122) & 127)]) + ((4.2541300000000006e-05 * fVec3[((IOTA - 121) & 127)]) + ((0.00010654600000000001 * fVec3[((IOTA - 120) & 127)]) + ((0.00016404399999999999 * fVec3[((IOTA - 119) & 127)]) + ((0.00016872499999999999 * fVec3[((IOTA - 118) & 127)]) + ((0.00025855300000000002 * fVec3[((IOTA - 117) & 127)]) + ((0.00034160000000000001 * fVec3[((IOTA - 116) & 127)]) + ((0.00045382400000000002 * fVec3[((IOTA - 115) & 127)]) + ((0.00054736599999999998 * fVec3[((IOTA - 114) & 127)]) + ((0.00053358400000000003 * fVec3[((IOTA - 113) & 127)]) + ((0.00050102000000000002 * fVec3[((IOTA - 112) & 127)]) + ((0.00067625599999999997 * fVec3[((IOTA - 111) & 127)]) + ((0.00098166300000000002 * fVec3[((IOTA - 110) & 127)]) + ((0.00083451500000000008 * fVec3[((IOTA - 109) & 127)]) + ((0.0009436510000000001 * fVec3[((IOTA - 108) & 127)]) + ((0.0012923000000000001 * fVec3[((IOTA - 107) & 127)]) + ((0.00136699 * fVec3[((IOTA - 106) & 127)]) + ((0.0014059200000000002 * fVec3[((IOTA - 105) & 127)]) + ((0.0012065399999999999 * fVec3[((IOTA - 104) & 127)]) + ((0.00185348 * fVec3[((IOTA - 103) & 127)]) + ((0.00154024 * fVec3[((IOTA - 102) & 127)]) + ((0.00087727600000000008 * fVec3[((IOTA - 101) & 127)]) + ((0.00050683400000000006 * fVec3[((IOTA - 100) & 127)]) + ((0.00061282500000000011 * fVec3[((IOTA - 99) & 127)]) + ((0.00058470199999999999 * fVec3[((IOTA - 98) & 127)]) + ((0.00054874000000000004 * fVec3[((IOTA - 96) & 127)]) + ((0.00272945 * fVec3[((IOTA - 95) & 127)]) + ((0.0021461499999999999 * fVec3[((IOTA - 94) & 127)]) + ((2.3955000000000004e-05 * fVec3[((IOTA - 93) & 127)]) + ((0.00041329900000000006 * fVec3[((IOTA - 90) & 127)]) + ((0.0037083100000000003 * fVec3[((IOTA - 87) & 127)]) + ((0.0051757600000000006 * fVec3[((IOTA - 86) & 127)]) + ((0.0016799500000000001 * fVec3[((IOTA - 85) & 127)]) + ((0.0015701700000000001 * fVec3[((IOTA - 83) & 127)]) + ((0.00056369199999999997 * fVec3[((IOTA - 82) & 127)]) + ((0.0024365300000000001 * fVec3[((IOTA - 80) & 127)]) + ((0.0041905200000000005 * fVec3[((IOTA - 79) & 127)]) + ((0.0024405 * fVec3[((IOTA - 78) & 127)]) + ((0.00082847699999999999 * fVec3[((IOTA - 77) & 127)]) + ((0.0041945800000000007 * fVec3[((IOTA - 76) & 127)]) + ((0.0063743100000000002 * fVec3[((IOTA - 75) & 127)]) + ((0.0029129100000000003 * fVec3[((IOTA - 74) & 127)]) + ((0.0030868900000000001 * fVec3[((IOTA - 73) & 127)]) + ((0.0052356299999999998 * fVec3[((IOTA - 72) & 127)]) + ((0.0032107500000000001 * fVec3[((IOTA - 71) & 127)]) + ((0.00185049 * fVec3[((IOTA - 70) & 127)]) + ((0.0014647 * fVec3[((IOTA - 69) & 127)]) + ((0.0022559300000000002 * fVec3[((IOTA - 68) & 127)]) + ((0.0034284599999999999 * fVec3[((IOTA - 67) & 127)]) + ((0.0023089200000000003 * fVec3[((IOTA - 66) & 127)]) + ((0.0027403499999999999 * fVec3[((IOTA - 65) & 127)]) + ((0.0042152999999999999 * fVec3[((IOTA - 64) & 127)]) + ((0.0062385100000000001 * fVec3[((IOTA - 63) & 127)]) + ((0.0068040700000000006 * fVec3[((IOTA - 62) & 127)]) + ((0.0035775299999999998 * fVec3[((IOTA - 61) & 127)]) + ((0.0042250600000000001 * fVec3[((IOTA - 60) & 127)]) + ((0.0031211899999999998 * fVec3[((IOTA - 59) & 127)]) + ((0.0036129299999999999 * fVec3[((IOTA - 58) & 127)]) + ((0.0050028199999999998 * fVec3[((IOTA - 57) & 127)]) + ((0.0012118500000000002 * fVec3[((IOTA - 56) & 127)]) + ((0.0012461600000000001 * fVec3[((IOTA - 55) & 127)]) + ((0.00305273 * fVec3[((IOTA - 54) & 127)]) + ((0.00325793 * fVec3[((IOTA - 53) & 127)]) + ((0.0028833999999999999 * fVec3[((IOTA - 52) & 127)]) + ((0.0036652500000000001 * fVec3[((IOTA - 51) & 127)]) + ((0.00086377000000000014 * fVec3[((IOTA - 50) & 127)]) + ((0.00175234 * fVec3[((IOTA - 49) & 127)]) + ((0.00306785 * fVec3[((IOTA - 48) & 127)]) + ((0.00250454 * fVec3[((IOTA - 46) & 127)]) + ((0.015005800000000001 * fVec3[((IOTA - 45) & 127)]) + ((0.0079248200000000008 * fVec3[((IOTA - 44) & 127)]) + ((0.0028857800000000001 * fVec3[((IOTA - 43) & 127)]) + ((0.0074329900000000004 * fVec3[((IOTA - 42) & 127)]) + ((0.0056945699999999995 * fVec3[((IOTA - 41) & 127)]) + ((0.0064973000000000001 * fVec3[((IOTA - 40) & 127)]) + ((0.011589100000000001 * fVec3[((IOTA - 39) & 127)]) + ((0.0069301900000000001 * fVec3[((IOTA - 38) & 127)]) + ((0.0079812000000000008 * fVec3[((IOTA - 37) & 127)]) + ((0.0141227 * fVec3[((IOTA - 36) & 127)]) + ((0.0044680700000000002 * fVec3[((IOTA - 35) & 127)]) + ((0.020023599999999999 * fVec3[((IOTA - 34) & 127)]) + ((0.023001999999999998 * fVec3[((IOTA - 33) & 127)]) + ((0.0057082499999999998 * fVec3[((IOTA - 32) & 127)]) + ((0.011366300000000001 * fVec3[((IOTA - 31) & 127)]) + ((0.0266261 * fVec3[((IOTA - 30) & 127)]) + ((0.0087064099999999995 * fVec3[((IOTA - 29) & 127)]) + ((0.030624600000000002 * fVec3[((IOTA - 27) & 127)]) + ((0.0528391 * fVec3[((IOTA - 26) & 127)]) + ((0.031746299999999998 * fVec3[((IOTA - 25) & 127)]) + ((((((((((((((((((((((((2.5118200000000003e-05 * fTemp3) + (0.00012370799999999999 * fVec3[((IOTA - 1) & 127)])) + (0.00096838400000000008 * fVec3[((IOTA - 3) & 127)])) + (0.00059949000000000005 * fVec3[((IOTA - 4) & 127)])) + (0.00076772799999999997 * fVec3[((IOTA - 5) & 127)])) + (0.00014117900000000001 * fVec3[((IOTA - 6) & 127)])) + (0.0018634200000000002 * fVec3[((IOTA - 7) & 127)])) + (0.00024957099999999997 * fVec3[((IOTA - 8) & 127)])) + (0.0011589199999999999 * fVec3[((IOTA - 9) & 127)])) + (0.00050879500000000004 * fVec3[((IOTA - 10) & 127)])) + (0.0036302599999999997 * fVec3[((IOTA - 11) & 127)])) + (0.056510400000000002 * fVec3[((IOTA - 12) & 127)])) + (0.049342300000000006 * fVec3[((IOTA - 13) & 127)])) + (0.0449074 * fVec3[((IOTA - 14) & 127)])) + (0.064749100000000004 * fVec3[((IOTA - 15) & 127)])) + (0.059606500000000007 * fVec3[((IOTA - 16) & 127)])) + (0.073495100000000008 * fVec3[((IOTA - 17) & 127)])) + (0.034514800000000005 * fVec3[((IOTA - 18) & 127)])) + (0.055772500000000003 * fVec3[((IOTA - 19) & 127)])) + (0.06596840000000001 * fVec3[((IOTA - 20) & 127)])) + (0.057809200000000005 * fVec3[((IOTA - 21) & 127)])) + (0.096895100000000012 * fVec3[((IOTA - 22) & 127)])) + (0.021260899999999999 * fVec3[((IOTA - 23) & 127)])) + (0.063658400000000004 * fVec2[((IOTA - 16) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((6.9716599999999994e-06 * fVec0[((IOTA - 124) & 127)]) + ((9.8485200000000004e-06 * fVec0[((IOTA - 118) & 127)]) + ((0.00010357900000000001 * fVec0[((IOTA - 114) & 127)]) + ((0.00042897299999999997 * fVec0[((IOTA - 113) & 127)]) + ((0.00029024100000000006 * fVec0[((IOTA - 112) & 127)]) + ((9.8297200000000012e-05 * fVec0[((IOTA - 111) & 127)]) + ((0.00020804999999999999 * fVec0[((IOTA - 110) & 127)]) + ((0.00054109500000000001 * fVec0[((IOTA - 109) & 127)]) + ((0.00083962700000000002 * fVec0[((IOTA - 108) & 127)]) + ((0.00056389100000000007 * fVec0[((IOTA - 107) & 127)]) + ((0.00051816800000000006 * fVec0[((IOTA - 106) & 127)]) + ((0.00065456900000000003 * fVec0[((IOTA - 105) & 127)]) + ((0.00088825400000000011 * fVec0[((IOTA - 104) & 127)]) + ((0.000446193 * fVec0[((IOTA - 103) & 127)]) + ((0.00071199100000000003 * fVec0[((IOTA - 102) & 127)]) + ((0.0012468500000000001 * fVec0[((IOTA - 101) & 127)]) + ((0.0012435300000000001 * fVec0[((IOTA - 100) & 127)]) + ((0.0010388900000000002 * fVec0[((IOTA - 99) & 127)]) + ((0.00170268 * fVec0[((IOTA - 98) & 127)]) + ((0.00126004 * fVec0[((IOTA - 97) & 127)]) + ((0.0013548899999999999 * fVec0[((IOTA - 93) & 127)]) + ((0.0020163799999999999 * fVec0[((IOTA - 92) & 127)]) + ((0.0010302600000000001 * fVec0[((IOTA - 89) & 127)]) + ((0.00142103 * fVec0[((IOTA - 88) & 127)]) + ((0.0020040399999999999 * fVec0[((IOTA - 82) & 127)]) + ((0.0030592000000000002 * fVec0[((IOTA - 81) & 127)]) + ((0.00082976100000000015 * fVec0[((IOTA - 80) & 127)]) + ((0.00083032800000000008 * fVec0[((IOTA - 79) & 127)]) + ((0.00146794 * fVec0[((IOTA - 78) & 127)]) + ((0.0029912300000000001 * fVec0[((IOTA - 77) & 127)]) + ((0.0019008400000000002 * fVec0[((IOTA - 76) & 127)]) + ((0.00032308700000000001 * fVec0[((IOTA - 75) & 127)]) + ((0.00121188 * fVec0[((IOTA - 74) & 127)]) + ((0.0015286800000000001 * fVec0[((IOTA - 73) & 127)]) + ((0.0016313200000000001 * fVec0[((IOTA - 72) & 127)]) + ((0.0019843199999999999 * fVec0[((IOTA - 71) & 127)]) + ((0.0031219500000000001 * fVec0[((IOTA - 70) & 127)]) + ((0.0017147500000000001 * fVec0[((IOTA - 69) & 127)]) + ((4.5241600000000004e-05 * fVec0[((IOTA - 68) & 127)]) + ((0.00193403 * fVec0[((IOTA - 67) & 127)]) + ((0.00103439 * fVec0[((IOTA - 66) & 127)]) + ((0.00025587599999999999 * fVec0[((IOTA - 61) & 127)]) + ((0.0014905299999999999 * fVec0[((IOTA - 60) & 127)]) + ((0.000502175 * fVec0[((IOTA - 59) & 127)]) + ((0.00055048599999999999 * fVec0[((IOTA - 58) & 127)]) + ((0.00049892100000000004 * fVec0[((IOTA - 50) & 127)]) + ((0.0029968600000000001 * fVec0[((IOTA - 47) & 127)]) + ((0.0024887899999999998 * fVec0[((IOTA - 46) & 127)]) + ((0.0030320900000000003 * fVec0[((IOTA - 41) & 127)]) + ((0.0076587399999999998 * fVec0[((IOTA - 40) & 127)]) + ((0.010064699999999999 * fVec0[((IOTA - 35) & 127)]) + ((0.030136699999999999 * fVec0[((IOTA - 32) & 127)]) + ((0.017341200000000001 * fVec0[((IOTA - 31) & 127)]) + ((0.039170099999999999 * fVec0[((IOTA - 28) & 127)]) + ((0.00031563800000000003 * fVec0[((IOTA - 27) & 127)]) + ((0.00069887100000000011 * fVec0[((IOTA - 25) & 127)]) + ((0.025458500000000002 * fVec0[((IOTA - 24) & 127)]) + ((0.0120184 * fVec0[((IOTA - 21) & 127)]) + ((0.011691100000000001 * fVec0[((IOTA - 19) & 127)]) + ((0.0053095800000000004 * fVec0[((IOTA - 14) & 127)]) + ((0.0072171800000000001 * fVec0[((IOTA - 12) & 127)]) + ((0.0030320200000000003 * fVec0[((IOTA - 11) & 127)]) + ((0.00131485 * fVec0[((IOTA - 9) & 127)]) + ((0.0011081700000000001 * fVec0[((IOTA - 7) & 127)]) + ((0.00036208399999999998 * fVec0[((IOTA - 5) & 127)]) + (((6.574880000000001e-05 * fVec1[((IOTA - 115) & 127)]) + ((7.5893800000000015e-05 * fVec1[((IOTA - 114) & 127)]) + ((0.00055035400000000008 * fVec1[((IOTA - 113) & 127)]) + ((0.00054230400000000007 * fVec1[((IOTA - 112) & 127)]) + ((0.00038862600000000004 * fVec1[((IOTA - 111) & 127)]) + ((0.00038355300000000002 * fVec1[((IOTA - 110) & 127)]) + ((0.0010789999999999999 * fVec1[((IOTA - 109) & 127)]) + ((0.00127535 * fVec1[((IOTA - 108) & 127)]) + ((0.00026040700000000004 * fVec1[((IOTA - 107) & 127)]) + ((0.00064190699999999994 * fVec1[((IOTA - 106) & 127)]) + ((0.0012643700000000001 * fVec1[((IOTA - 105) & 127)]) + ((0.0014951399999999998 * fVec1[((IOTA - 104) & 127)]) + ((0.00096466700000000011 * fVec1[((IOTA - 103) & 127)]) + ((0.00062200899999999997 * fVec1[((IOTA - 102) & 127)]) + ((0.0013151 * fVec1[((IOTA - 101) & 127)]) + ((0.00155276 * fVec1[((IOTA - 100) & 127)]) + ((0.00147963 * fVec1[((IOTA - 99) & 127)]) + ((0.0012132899999999999 * fVec1[((IOTA - 96) & 127)]) + ((0.0010497099999999999 * fVec1[((IOTA - 95) & 127)]) + ((5.4447799999999994e-06 * fVec1[((IOTA - 91) & 127)]) + ((0.00060830200000000002 * fVec1[((IOTA - 82) & 127)]) + ((0.00073753600000000001 * fVec1[((IOTA - 81) & 127)]) + ((4.1098800000000007e-05 * fVec1[((IOTA - 76) & 127)]) + ((0.00031511100000000003 * fVec1[((IOTA - 74) & 127)]) + ((0.0011385200000000001 * fVec1[((IOTA - 73) & 127)]) + ((0.0023925600000000002 * fVec1[((IOTA - 72) & 127)]) + ((0.00191902 * fVec1[((IOTA - 71) & 127)]) + ((0.00073584900000000001 * fVec1[((IOTA - 70) & 127)]) + ((0.0033698500000000002 * fVec1[((IOTA - 69) & 127)]) + ((0.0046562499999999998 * fVec1[((IOTA - 68) & 127)]) + ((0.0026088700000000001 * fVec1[((IOTA - 67) & 127)]) + ((0.0015381499999999998 * fVec1[((IOTA - 66) & 127)]) + ((0.00177024 * fVec1[((IOTA - 65) & 127)]) + ((0.0027169400000000002 * fVec1[((IOTA - 64) & 127)]) + ((0.0011334100000000001 * fVec1[((IOTA - 61) & 127)]) + ((0.0012374899999999999 * fVec1[((IOTA - 57) & 127)]) + ((0.00350462 * fVec1[((IOTA - 56) & 127)]) + ((0.00029472900000000003 * fVec1[((IOTA - 55) & 127)]) + ((0.00161133 * fVec1[((IOTA - 49) & 127)]) + ((0.0043256300000000004 * fVec1[((IOTA - 43) & 127)]) + ((0.0039263700000000002 * fVec1[((IOTA - 38) & 127)]) + ((0.0193136 * fVec1[((IOTA - 37) & 127)]) + ((0.0137585 * fVec1[((IOTA - 34) & 127)]) + ((0.016165499999999999 * fVec1[((IOTA - 31) & 127)]) + ((0.0200181 * fVec1[((IOTA - 30) & 127)]) + ((0.00436148 * fVec1[((IOTA - 27) & 127)]) + ((0.0115485 * fVec1[((IOTA - 25) & 127)]) + ((0.0032127699999999998 * fVec1[((IOTA - 23) & 127)]) + ((0.0057804000000000006 * fVec1[((IOTA - 22) & 127)]) + ((0.037111700000000004 * fVec1[((IOTA - 19) & 127)]) + ((0.014907300000000002 * fVec1[((IOTA - 18) & 127)]) + ((0.0092683000000000001 * fVec1[((IOTA - 16) & 127)]) + ((0.0158698 * fVec1[((IOTA - 15) & 127)]) + ((0.00489909 * fVec1[((IOTA - 12) & 127)]) + ((0.00036272099999999999 * fVec1[((IOTA - 11) & 127)]) + ((0.00043871700000000003 * fVec1[((IOTA - 10) & 127)]) + ((0.00018132700000000001 * fVec1[((IOTA - 9) & 127)]) + ((0.00097058900000000011 * fVec1[((IOTA - 7) & 127)]) + ((0.00016036100000000001 * fVec1[((IOTA - 6) & 127)]) + (((1.8656099999999998e-06 * fVec2[((IOTA - 126) & 127)]) + ((2.5639300000000001e-06 * fVec2[((IOTA - 125) & 127)]) + ((8.3185099999999991e-06 * fVec2[((IOTA - 124) & 127)]) + ((3.8801999999999999e-05 * fVec2[((IOTA - 123) & 127)]) + ((6.5230500000000005e-05 * fVec2[((IOTA - 122) & 127)]) + ((4.81323e-05 * fVec2[((IOTA - 121) & 127)]) + ((3.1175000000000006e-05 * fVec2[((IOTA - 120) & 127)]) + ((1.1129000000000001e-05 * fVec2[((IOTA - 119) & 127)]) + ((0.00016385400000000001 * fVec2[((IOTA - 118) & 127)]) + ((0.000137362 * fVec2[((IOTA - 117) & 127)]) + ((9.139900000000001e-05 * fVec2[((IOTA - 116) & 127)]) + ((0.00012562199999999998 * fVec2[((IOTA - 115) & 127)]) + ((0.00025063300000000005 * fVec2[((IOTA - 113) & 127)]) + ((0.000272806 * fVec2[((IOTA - 112) & 127)]) + ((0.000314307 * fVec2[((IOTA - 111) & 127)]) + ((0.00026935700000000002 * fVec2[((IOTA - 110) & 127)]) + ((0.00027303400000000002 * fVec2[((IOTA - 109) & 127)]) + ((8.74662e-06 * fVec2[((IOTA - 108) & 127)]) + ((0.00035653000000000003 * fVec2[((IOTA - 106) & 127)]) + ((0.000138672 * fVec2[((IOTA - 91) & 127)]) + ((0.0011749499999999999 * fVec2[((IOTA - 81) & 127)]) + ((0.00092974400000000003 * fVec2[((IOTA - 76) & 127)]) + ((0.00189912 * fVec2[((IOTA - 75) & 127)]) + ((0.0018498099999999999 * fVec2[((IOTA - 74) & 127)]) + ((0.00102903 * fVec2[((IOTA - 70) & 127)]) + ((0.0023879000000000001 * fVec2[((IOTA - 69) & 127)]) + ((0.0030104600000000004 * fVec2[((IOTA - 68) & 127)]) + ((0.00157916 * fVec2[((IOTA - 67) & 127)]) + ((0.0021747000000000003 * fVec2[((IOTA - 66) & 127)]) + ((0.0024374800000000001 * fVec2[((IOTA - 65) & 127)]) + ((0.0017056100000000002 * fVec2[((IOTA - 64) & 127)]) + ((0.00246014 * fVec2[((IOTA - 63) & 127)]) + ((0.0044470300000000003 * fVec2[((IOTA - 62) & 127)]) + ((0.0047484400000000005 * fVec2[((IOTA - 61) & 127)]) + ((0.0027951100000000004 * fVec2[((IOTA - 60) & 127)]) + ((0.0047547600000000002 * fVec2[((IOTA - 59) & 127)]) + ((0.0037710400000000002 * fVec2[((IOTA - 58) & 127)]) + ((0.0045419900000000001 * fVec2[((IOTA - 57) & 127)]) + ((0.010441600000000001 * fVec2[((IOTA - 56) & 127)]) + ((0.0100582 * fVec2[((IOTA - 55) & 127)]) + ((0.0076609499999999997 * fVec2[((IOTA - 54) & 127)]) + ((0.0068764300000000002 * fVec2[((IOTA - 53) & 127)]) + ((0.0095819500000000005 * fVec2[((IOTA - 52) & 127)]) + ((0.015913200000000002 * fVec2[((IOTA - 51) & 127)]) + ((0.015119400000000002 * fVec2[((IOTA - 50) & 127)]) + ((0.0128559 * fVec2[((IOTA - 49) & 127)]) + ((0.016606200000000002 * fVec2[((IOTA - 48) & 127)]) + ((0.016194200000000002 * fVec2[((IOTA - 47) & 127)]) + ((0.0116756 * fVec2[((IOTA - 46) & 127)]) + ((0.008875280000000001 * fVec2[((IOTA - 45) & 127)]) + ((0.016079200000000002 * fVec2[((IOTA - 44) & 127)]) + ((0.0188738 * fVec2[((IOTA - 43) & 127)]) + ((0.022184499999999999 * fVec2[((IOTA - 42) & 127)]) + ((0.020373700000000002 * fVec2[((IOTA - 41) & 127)]) + ((0.0086227300000000003 * fVec2[((IOTA - 40) & 127)]) + ((0.015368999999999999 * fVec2[((IOTA - 39) & 127)]) + ((0.025263300000000002 * fVec2[((IOTA - 38) & 127)]) + ((0.026966700000000003 * fVec2[((IOTA - 37) & 127)]) + ((0.023967600000000002 * fVec2[((IOTA - 36) & 127)]) + ((0.0180915 * fVec2[((IOTA - 35) & 127)]) + ((0.026436999999999999 * fVec2[((IOTA - 34) & 127)]) + ((0.035762599999999999 * fVec2[((IOTA - 33) & 127)]) + ((0.019380700000000001 * fVec2[((IOTA - 32) & 127)]) + ((0.0052166499999999998 * fVec2[((IOTA - 31) & 127)]) + ((0.012525700000000001 * fVec2[((IOTA - 30) & 127)]) + ((0.039007399999999998 * fVec2[((IOTA - 29) & 127)]) + ((0.039406500000000004 * fVec2[((IOTA - 28) & 127)]) + ((0.0160175 * fVec2[((IOTA - 27) & 127)]) + ((0.0095142000000000004 * fVec2[((IOTA - 26) & 127)]) + ((0.00060328500000000006 * fVec2[((IOTA - 25) & 127)]) + ((0.042794800000000008 * fVec2[((IOTA - 24) & 127)]) + ((0.034687500000000003 * fVec2[((IOTA - 23) & 127)]) + ((0.0011779100000000001 * fVec2[((IOTA - 10) & 127)]) + ((0.000167329 * fVec2[((IOTA - 8) & 127)]) + ((0.00041459900000000003 * fVec2[((IOTA - 6) & 127)]) + ((((((((((((0.00017378000000000001 * fVec3[((IOTA - 2) & 127)]) + (0.015415000000000002 * fVec3[((IOTA - 24) & 127)])) + (0.0114164 * fVec3[((IOTA - 28) & 127)])) + (0.0029673899999999999 * fVec3[((IOTA - 47) & 127)])) + (0.0010694400000000001 * fVec3[((IOTA - 81) & 127)])) + (0.000311911 * fVec3[((IOTA - 84) & 127)])) + (0.00141242 * fVec3[((IOTA - 88) & 127)])) + (0.00134669 * fVec3[((IOTA - 89) & 127)])) + (0.0014838199999999998 * fVec3[((IOTA - 91) & 127)])) + (0.0024969700000000003 * fVec3[((IOTA - 92) & 127)])) + (0.00054486499999999995 * fVec3[((IOTA - 97) & 127)])) + (0.00031506200000000001 * fVec2[((IOTA - 2) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00019245000000000002 * fVec1[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00017773600000000001 * fVec0[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fHbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (fRec1[0] * (((1.4188099999999999e-06 * fVec0[((IOTA - 126) & 127)]) + ((3.3187600000000001e-06 * fVec0[((IOTA - 125) & 127)]) + ((5.1482899999999996e-06 * fVec0[((IOTA - 124) & 127)]) + ((8.7600299999999995e-06 * fVec0[((IOTA - 123) & 127)]) + ((5.5660599999999997e-06 * fVec0[((IOTA - 122) & 127)]) + ((5.530960000000001e-05 * fVec0[((IOTA - 121) & 127)]) + ((0.00011918500000000002 * fVec0[((IOTA - 120) & 127)]) + ((9.8678100000000013e-05 * fVec0[((IOTA - 119) & 127)]) + ((4.2207000000000004e-05 * fVec0[((IOTA - 118) & 127)]) + ((3.2490500000000003e-05 * fVec0[((IOTA - 117) & 127)]) + ((0.00011697900000000002 * fVec0[((IOTA - 116) & 127)]) + ((5.6691300000000004e-05 * fVec0[((IOTA - 112) & 127)]) + ((0.000115798 * fVec0[((IOTA - 111) & 127)]) + ((0.0037339199999999999 * fVec0[((IOTA - 96) & 127)]) + ((0.0027517499999999999 * fVec0[((IOTA - 95) & 127)]) + ((0.00065997500000000004 * fVec0[((IOTA - 92) & 127)]) + ((0.0016790700000000002 * fVec0[((IOTA - 91) & 127)]) + ((0.0019817300000000001 * fVec0[((IOTA - 88) & 127)]) + ((0.0040626200000000003 * fVec0[((IOTA - 87) & 127)]) + ((0.0023261500000000004 * fVec0[((IOTA - 86) & 127)]) + ((0.0015044699999999999 * fVec0[((IOTA - 85) & 127)]) + ((0.0010922900000000001 * fVec0[((IOTA - 84) & 127)]) + ((0.0012104800000000001 * fVec0[((IOTA - 64) & 127)]) + ((0.0039074399999999999 * fVec0[((IOTA - 63) & 127)]) + ((0.00070128400000000004 * fVec0[((IOTA - 59) & 127)]) + ((0.00040873600000000004 * fVec0[((IOTA - 58) & 127)]) + ((0.0011136799999999999 * fVec0[((IOTA - 57) & 127)]) + ((0.0035448200000000002 * fVec0[((IOTA - 56) & 127)]) + ((0.0022150400000000002 * fVec0[((IOTA - 55) & 127)]) + ((3.8517100000000004e-05 * fVec0[((IOTA - 54) & 127)]) + ((0.0011952499999999999 * fVec0[((IOTA - 53) & 127)]) + ((0.00017855099999999999 * fVec0[((IOTA - 52) & 127)]) + ((0.0020778099999999998 * fVec0[((IOTA - 51) & 127)]) + ((0.0048699899999999994 * fVec0[((IOTA - 50) & 127)]) + ((0.0020168600000000001 * fVec0[((IOTA - 49) & 127)]) + ((0.0011997199999999998 * fVec0[((IOTA - 47) & 127)]) + ((0.0061526599999999999 * fVec0[((IOTA - 46) & 127)]) + ((0.0028706900000000004 * fVec0[((IOTA - 44) & 127)]) + ((0.011077500000000001 * fVec0[((IOTA - 43) & 127)]) + ((0.0022290399999999998 * fVec0[((IOTA - 42) & 127)]) + ((0.0084232300000000003 * fVec0[((IOTA - 39) & 127)]) + ((0.00127378 * fVec0[((IOTA - 38) & 127)]) + ((0.0125606 * fVec0[((IOTA - 34) & 127)]) + ((0.011542200000000001 * fVec0[((IOTA - 31) & 127)]) + ((0.024367400000000001 * fVec0[((IOTA - 30) & 127)]) + ((0.0537481 * fVec0[((IOTA - 26) & 127)]) + ((0.013059400000000001 * fVec0[((IOTA - 23) & 127)]) + ((0.021176 * fVec0[((IOTA - 22) & 127)]) + ((0.0292041 * fVec0[((IOTA - 18) & 127)]) + ((0.015611 * fVec0[((IOTA - 17) & 127)]) + ((0.0131959 * fVec0[((IOTA - 15) & 127)]) + ((0.0033820999999999999 * fVec0[((IOTA - 13) & 127)]) + ((0.00065433400000000001 * fVec0[((IOTA - 10) & 127)]) + ((0.00012754700000000002 * fVec0[((IOTA - 9) & 127)]) + ((0.00028600400000000002 * fVec0[((IOTA - 8) & 127)]) + ((0.00056964699999999995 * fVec0[((IOTA - 6) & 127)]) + ((0.00055874899999999999 * fVec0[((IOTA - 4) & 127)]) + ((0.000107706 * fVec0[((IOTA - 2) & 127)]) + ((2.3258800000000005e-05 * fVec0[((IOTA - 1) & 127)]) + ((1.5002200000000002e-05 * fTemp0) + ((1.8648999999999999e-06 * fVec1[((IOTA - 126) & 127)]) + ((1.0045e-05 * fVec1[((IOTA - 125) & 127)]) + ((1.8977800000000003e-05 * fVec1[((IOTA - 124) & 127)]) + ((1.9873400000000002e-05 * fVec1[((IOTA - 123) & 127)]) + ((3.4954000000000004e-05 * fVec1[((IOTA - 122) & 127)]) + ((9.3229500000000019e-05 * fVec1[((IOTA - 121) & 127)]) + ((0.00012240800000000001 * fVec1[((IOTA - 120) & 127)]) + ((9.5701199999999998e-05 * fVec1[((IOTA - 119) & 127)]) + ((5.5900900000000005e-05 * fVec1[((IOTA - 115) & 127)]) + ((1.9102600000000002e-05 * fVec1[((IOTA - 114) & 127)]) + (((0.000876507 * fVec1[((IOTA - 91) & 127)]) + ((0.0020406000000000001 * fVec1[((IOTA - 90) & 127)]) + ((0.0013280499999999999 * fVec1[((IOTA - 89) & 127)]) + ((0.0017303100000000001 * fVec1[((IOTA - 88) & 127)]) + ((0.0029776099999999999 * fVec1[((IOTA - 87) & 127)]) + ((0.0025195700000000001 * fVec1[((IOTA - 86) & 127)]) + ((0.0011889400000000001 * fVec1[((IOTA - 83) & 127)]) + ((0.000386788 * fVec1[((IOTA - 81) & 127)]) + ((0.00090610300000000012 * fVec1[((IOTA - 80) & 127)]) + ((0.0014508500000000001 * fVec1[((IOTA - 79) & 127)]) + ((0.00082739399999999996 * fVec1[((IOTA - 78) & 127)]) + ((0.00013990400000000002 * fVec1[((IOTA - 76) & 127)]) + ((0.00174807 * fVec1[((IOTA - 75) & 127)]) + ((0.00102092 * fVec1[((IOTA - 74) & 127)]) + ((0.00235812 * fVec1[((IOTA - 63) & 127)]) + ((0.0021519 * fVec1[((IOTA - 62) & 127)]) + ((7.6654099999999985e-06 * fVec1[((IOTA - 61) & 127)]) + ((0.0022741699999999998 * fVec1[((IOTA - 55) & 127)]) + ((0.0042530099999999998 * fVec1[((IOTA - 54) & 127)]) + ((0.0032282000000000001 * fVec1[((IOTA - 53) & 127)]) + ((0.0041592900000000004 * fVec1[((IOTA - 50) & 127)]) + ((0.0075640600000000001 * fVec1[((IOTA - 49) & 127)]) + ((0.0079603199999999999 * fVec1[((IOTA - 48) & 127)]) + ((0.0030812000000000001 * fVec1[((IOTA - 47) & 127)]) + ((0.00018497500000000001 * fVec1[((IOTA - 46) & 127)]) + ((0.00033097600000000002 * fVec1[((IOTA - 43) & 127)]) + ((0.0066906600000000002 * fVec1[((IOTA - 42) & 127)]) + ((0.0081795500000000007 * fVec1[((IOTA - 41) & 127)]) + ((0.00108066 * fVec1[((IOTA - 40) & 127)]) + ((0.0088403900000000001 * fVec1[((IOTA - 36) & 127)]) + ((0.0054466000000000002 * fVec1[((IOTA - 35) & 127)]) + ((0.033863999999999998 * fVec1[((IOTA - 29) & 127)]) + ((0.0092350000000000002 * fVec1[((IOTA - 28) & 127)]) + ((0.00053732699999999999 * fVec1[((IOTA - 26) & 127)]) + ((0.0043864799999999999 * fVec1[((IOTA - 24) & 127)]) + ((0.0027836500000000004 * fVec1[((IOTA - 23) & 127)]) + ((0.0092729000000000006 * fVec1[((IOTA - 22) & 127)]) + ((0.022299000000000003 * fVec1[((IOTA - 21) & 127)]) + ((0.0012059800000000002 * fVec1[((IOTA - 20) & 127)]) + ((0.025815500000000002 * fVec1[((IOTA - 17) & 127)]) + ((7.0800700000000008e-05 * fVec1[((IOTA - 9) & 127)]) + ((0.00076956600000000007 * fVec1[((IOTA - 8) & 127)]) + ((0.000231146 * fVec1[((IOTA - 5) & 127)]) + ((0.00014766099999999999 * fVec1[((IOTA - 4) & 127)]) + ((1.4833700000000001e-06 * fVec2[((IOTA - 126) & 127)]) + ((3.6973199999999999e-06 * fVec2[((IOTA - 125) & 127)]) + ((8.5058500000000009e-06 * fVec2[((IOTA - 124) & 127)]) + ((4.1470500000000002e-05 * fVec2[((IOTA - 123) & 127)]) + ((7.1901800000000003e-05 * fVec2[((IOTA - 122) & 127)]) + ((3.71676e-05 * fVec2[((IOTA - 121) & 127)]) + ((3.3982700000000002e-05 * fVec2[((IOTA - 119) & 127)]) + ((0.00016550199999999999 * fVec2[((IOTA - 118) & 127)]) + ((0.00015893600000000001 * fVec2[((IOTA - 117) & 127)]) + ((0.00011888700000000002 * fVec2[((IOTA - 116) & 127)]) + ((2.6751600000000003e-05 * fVec2[((IOTA - 115) & 127)]) + ((1.5261800000000004e-05 * fVec2[((IOTA - 114) & 127)]) + ((0.00030627700000000004 * fVec2[((IOTA - 113) & 127)]) + ((0.00036830800000000003 * fVec2[((IOTA - 112) & 127)]) + ((0.000251322 * fVec2[((IOTA - 111) & 127)]) + ((0.00022708 * fVec2[((IOTA - 110) & 127)]) + ((0.000239084 * fVec2[((IOTA - 109) & 127)]) + ((9.1238799999999995e-06 * fVec2[((IOTA - 108) & 127)]) + ((0.00015429699999999999 * fVec2[((IOTA - 90) & 127)]) + ((0.00021972700000000002 * fVec2[((IOTA - 89) & 127)]) + ((0.0011643300000000001 * fVec2[((IOTA - 82) & 127)]) + (((0.00065994200000000006 * fVec2[((IOTA - 77) & 127)]) + ((0.0017905 * fVec2[((IOTA - 76) & 127)]) + ((0.00015571700000000001 * fVec2[((IOTA - 71) & 127)]) + ((0.0044549899999999998 * fVec2[((IOTA - 70) & 127)]) + ((0.0039002500000000005 * fVec2[((IOTA - 69) & 127)]) + ((0.00054205300000000002 * fVec2[((IOTA - 68) & 127)]) + ((0.00164631 * fVec2[((IOTA - 67) & 127)]) + ((0.00128867 * fVec2[((IOTA - 66) & 127)]) + ((0.000377902 * fVec2[((IOTA - 65) & 127)]) + ((0.00227327 * fVec2[((IOTA - 64) & 127)]) + ((0.0030369999999999998 * fVec2[((IOTA - 63) & 127)]) + ((0.0023284899999999999 * fVec2[((IOTA - 62) & 127)]) + ((0.0020450900000000003 * fVec2[((IOTA - 61) & 127)]) + ((0.0038926099999999999 * fVec2[((IOTA - 60) & 127)]) + ((0.0051357799999999995 * fVec2[((IOTA - 59) & 127)]) + ((0.0057548899999999995 * fVec2[((IOTA - 58) & 127)]) + ((0.0110121 * fVec2[((IOTA - 57) & 127)]) + ((0.010980500000000001 * fVec2[((IOTA - 56) & 127)]) + ((0.0074067100000000004 * fVec2[((IOTA - 55) & 127)]) + ((0.0058000299999999994 * fVec2[((IOTA - 54) & 127)]) + ((0.0046881500000000003 * fVec2[((IOTA - 53) & 127)]) + ((0.0079024400000000002 * fVec2[((IOTA - 52) & 127)]) + ((0.0143637 * fVec2[((IOTA - 51) & 127)]) + ((0.018899099999999999 * fVec2[((IOTA - 50) & 127)]) + ((0.016699200000000001 * fVec2[((IOTA - 49) & 127)]) + ((0.0121522 * fVec2[((IOTA - 48) & 127)]) + ((0.011685700000000002 * fVec2[((IOTA - 47) & 127)]) + ((0.0122635 * fVec2[((IOTA - 46) & 127)]) + ((0.017027300000000002 * fVec2[((IOTA - 45) & 127)]) + ((0.019806900000000002 * fVec2[((IOTA - 44) & 127)]) + ((0.017303499999999999 * fVec2[((IOTA - 43) & 127)]) + ((0.017569399999999999 * fVec2[((IOTA - 42) & 127)]) + ((0.016072400000000001 * fVec2[((IOTA - 41) & 127)]) + ((0.0227996 * fVec2[((IOTA - 40) & 127)]) + ((0.016965000000000001 * fVec2[((IOTA - 39) & 127)]) + ((0.017693 * fVec2[((IOTA - 38) & 127)]) + ((0.033336499999999998 * fVec2[((IOTA - 37) & 127)]) + ((0.029073099999999998 * fVec2[((IOTA - 36) & 127)]) + ((0.018621700000000001 * fVec2[((IOTA - 35) & 127)]) + ((0.023295900000000001 * fVec2[((IOTA - 34) & 127)]) + ((0.030269900000000002 * fVec2[((IOTA - 33) & 127)]) + ((0.023498000000000002 * fVec2[((IOTA - 32) & 127)]) + ((0.012867100000000001 * fVec2[((IOTA - 31) & 127)]) + ((0.024658199999999998 * fVec2[((IOTA - 30) & 127)]) + ((0.033071500000000004 * fVec2[((IOTA - 29) & 127)]) + ((0.023601800000000003 * fVec2[((IOTA - 28) & 127)]) + ((0.025422899999999998 * fVec2[((IOTA - 27) & 127)]) + ((0.014210199999999999 * fVec2[((IOTA - 26) & 127)]) + ((0.010567 * fVec2[((IOTA - 25) & 127)]) + ((0.056895100000000004 * fVec2[((IOTA - 24) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((0.00105561 * fVec3[((IOTA - 7) & 127)]) + ((((((1.96889e-05 * fTemp3) + (0.00012713900000000002 * fVec3[((IOTA - 1) & 127)])) + (0.00072445800000000009 * fVec3[((IOTA - 3) & 127)])) + (0.00084005400000000002 * fVec3[((IOTA - 4) & 127)])) + (0.00078251799999999995 * fVec3[((IOTA - 5) & 127)])) + (0.00064681700000000005 * fVec3[((IOTA - 6) & 127)]))) + (0.00107368 * fVec3[((IOTA - 8) & 127)])) + (0.00055752700000000004 * fVec3[((IOTA - 9) & 127)])) + (0.0020685400000000002 * fVec3[((IOTA - 10) & 127)])) + (0.0007391530000000001 * fVec3[((IOTA - 11) & 127)])) + (0.048941400000000003 * fVec3[((IOTA - 12) & 127)])) + (0.053001199999999998 * fVec3[((IOTA - 13) & 127)])) + (0.046698700000000003 * fVec3[((IOTA - 14) & 127)])) + (0.062211200000000001 * fVec3[((IOTA - 15) & 127)])) + (0.043948600000000004 * fVec3[((IOTA - 16) & 127)])) + (0.081345899999999999 * fVec3[((IOTA - 17) & 127)])) + (0.047424299999999996 * fVec3[((IOTA - 18) & 127)])) + (0.041405900000000002 * fVec3[((IOTA - 19) & 127)])) + (0.069732299999999997 * fVec3[((IOTA - 20) & 127)])) + (0.050380599999999998 * fVec3[((IOTA - 21) & 127)])) + (0.111697 * fVec3[((IOTA - 22) & 127)])) + (0.054464300000000007 * fVec3[((IOTA - 23) & 127)])) + (0.036801199999999999 * fVec3[((IOTA - 25) & 127)])) + (0.042423700000000002 * fVec3[((IOTA - 26) & 127)])) + (0.0075229400000000005 * fVec3[((IOTA - 27) & 127)])) + (0.0123141 * fVec3[((IOTA - 28) & 127)])) + (0.0216826 * fVec3[((IOTA - 29) & 127)])) + (0.017730600000000003 * fVec3[((IOTA - 30) & 127)])) + (0.0080194200000000011 * fVec3[((IOTA - 31) & 127)])) + (0.021074000000000002 * fVec3[((IOTA - 33) & 127)])) + (0.0272114 * fVec3[((IOTA - 34) & 127)])) + (0.0056564199999999997 * fVec3[((IOTA - 35) & 127)])) + (0.010539099999999999 * fVec3[((IOTA - 36) & 127)])) + (0.0081598500000000015 * fVec3[((IOTA - 37) & 127)])) + (0.0060665699999999994 * fVec3[((IOTA - 38) & 127)])) + (0.0072938400000000002 * fVec3[((IOTA - 39) & 127)])) + (0.0014525200000000001 * fVec3[((IOTA - 40) & 127)])) + (0.0049862900000000009 * fVec3[((IOTA - 41) & 127)])) + (0.014038399999999999 * fVec3[((IOTA - 42) & 127)])) + (0.0105579 * fVec3[((IOTA - 43) & 127)])) + (0.00431154 * fVec3[((IOTA - 45) & 127)])) + (0.0084629900000000001 * fVec3[((IOTA - 46) & 127)])) + (0.0007157 * fVec3[((IOTA - 47) & 127)])) + (0.00067166600000000002 * fVec3[((IOTA - 48) & 127)])) + (0.0046483699999999998 * fVec3[((IOTA - 49) & 127)])) + (0.0014356600000000001 * fVec3[((IOTA - 50) & 127)])) + (0.00020930100000000001 * fVec3[((IOTA - 51) & 127)])) + (0.00139635 * fVec3[((IOTA - 52) & 127)])) + (0.0029229899999999999 * fVec3[((IOTA - 53) & 127)])) + (0.0042595000000000003 * fVec3[((IOTA - 54) & 127)])) + (0.0039973999999999999 * fVec3[((IOTA - 55) & 127)])) + (4.49754e-06 * fVec3[((IOTA - 56) & 127)])) + (0.00278079 * fVec3[((IOTA - 58) & 127)])) + (0.0038020800000000002 * fVec3[((IOTA - 59) & 127)])) + (0.0026122100000000002 * fVec3[((IOTA - 60) & 127)])) + (0.00338193 * fVec3[((IOTA - 61) & 127)])) + (0.0064815100000000002 * fVec3[((IOTA - 62) & 127)])) + (0.0067297599999999996 * fVec3[((IOTA - 63) & 127)])) + (0.0038801100000000004 * fVec3[((IOTA - 64) & 127)])) + (0.0029381799999999999 * fVec3[((IOTA - 65) & 127)])) + (0.0016933400000000002 * fVec3[((IOTA - 66) & 127)])) + (0.0028127900000000003 * fVec3[((IOTA - 67) & 127)])) + (0.0033726400000000001 * fVec3[((IOTA - 68) & 127)])) + (0.00072404000000000001 * fVec3[((IOTA - 70) & 127)])) + (0.0019828699999999999 * fVec3[((IOTA - 71) & 127)])) + (0.0039087499999999999 * fVec3[((IOTA - 72) & 127)])) + (0.0053022700000000004 * fVec3[((IOTA - 73) & 127)])) + (0.0036032700000000004 * fVec3[((IOTA - 74) & 127)])) + (0.0053821700000000004 * fVec3[((IOTA - 75) & 127)])) + (0.0046326400000000004 * fVec3[((IOTA - 76) & 127)])) + (0.0020199900000000002 * fVec3[((IOTA - 77) & 127)])) + (0.0020409600000000001 * fVec3[((IOTA - 78) & 127)])) + (0.00144247 * fVec3[((IOTA - 79) & 127)])) + (0.0026692399999999998 * fVec3[((IOTA - 80) & 127)])) + (0.0015368900000000002 * fVec3[((IOTA - 81) & 127)])) + (2.5156400000000002e-05 * fVec3[((IOTA - 83) & 127)])) + (0.0010550900000000001 * fVec3[((IOTA - 84) & 127)])) + (0.0017505699999999999 * fVec3[((IOTA - 85) & 127)])) + (0.0026745600000000003 * fVec3[((IOTA - 86) & 127)])) + (0.00365475 * fVec3[((IOTA - 87) & 127)])) + (0.00193882 * fVec3[((IOTA - 88) & 127)])) + (0.0033512100000000003 * fVec3[((IOTA - 95) & 127)])) + (0.0025739000000000001 * fVec3[((IOTA - 96) & 127)])) + (0.00059498000000000005 * fVec3[((IOTA - 99) & 127)])) + (0.00094503799999999993 * fVec3[((IOTA - 100) & 127)])) + (0.0013272 * fVec3[((IOTA - 101) & 127)])) + (0.00147426 * fVec3[((IOTA - 102) & 127)])) + (0.0018419899999999999 * fVec3[((IOTA - 103) & 127)])) + (0.0012236 * fVec3[((IOTA - 104) & 127)])) + (0.00100501 * fVec3[((IOTA - 105) & 127)])) + (0.0016259900000000001 * fVec3[((IOTA - 106) & 127)])) + (0.0013097499999999999 * fVec3[((IOTA - 107) & 127)])) + (0.00095978899999999995 * fVec3[((IOTA - 108) & 127)])) + (0.000779071 * fVec3[((IOTA - 109) & 127)])) + (0.00070924500000000006 * fVec3[((IOTA - 110) & 127)])) + (0.0010336799999999999 * fVec3[((IOTA - 111) & 127)])) + (0.00050421999999999999 * fVec3[((IOTA - 112) & 127)])) + (0.00042659700000000002 * fVec3[((IOTA - 113) & 127)])) + (0.00050803600000000001 * fVec3[((IOTA - 114) & 127)])) + (0.00050261399999999997 * fVec3[((IOTA - 115) & 127)])) + (0.00038352400000000005 * fVec3[((IOTA - 116) & 127)])) + (0.00016114100000000001 * fVec3[((IOTA - 117) & 127)])) + (0.00020216400000000001 * fVec3[((IOTA - 118) & 127)])) + (0.000195057 * fVec3[((IOTA - 119) & 127)])) + (0.000117308 * fVec3[((IOTA - 120) & 127)])) + (5.5996800000000006e-05 * fVec3[((IOTA - 121) & 127)])) + (7.3980599999999995e-07 * fVec3[((IOTA - 123) & 127)])) + (1.69708e-05 * fVec3[((IOTA - 124) & 127)])) + (7.1374800000000001e-06 * fVec3[((IOTA - 125) & 127)])) + (1.74779e-06 * fVec3[((IOTA - 126) & 127)])) + (0.00027516900000000002 * fVec2[((IOTA - 2) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0040393699999999996 * fVec1[((IOTA - 33) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00102589 * fVec0[((IOTA - 62) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((7.4329200000000013e-05 * fVec0[((IOTA - 115) & 127)]) + ((0.00029377599999999999 * fVec0[((IOTA - 114) & 127)]) + ((0.000280439 * fVec0[((IOTA - 113) & 127)]) + ((0.00052814500000000005 * fVec0[((IOTA - 110) & 127)]) + ((0.00070229999999999999 * fVec0[((IOTA - 109) & 127)]) + ((0.00080632699999999991 * fVec0[((IOTA - 108) & 127)]) + ((0.000643591 * fVec0[((IOTA - 107) & 127)]) + ((0.00081294000000000006 * fVec0[((IOTA - 106) & 127)]) + ((0.00082950500000000002 * fVec0[((IOTA - 105) & 127)]) + ((0.00023107600000000004 * fVec0[((IOTA - 104) & 127)]) + ((0.00064061300000000005 * fVec0[((IOTA - 103) & 127)]) + ((0.00091664000000000003 * fVec0[((IOTA - 102) & 127)]) + ((0.00073955600000000005 * fVec0[((IOTA - 101) & 127)]) + ((0.00059890600000000007 * fVec0[((IOTA - 100) & 127)]) + ((0.0013073099999999999 * fVec0[((IOTA - 99) & 127)]) + ((0.0027768799999999998 * fVec0[((IOTA - 98) & 127)]) + ((0.00040949500000000001 * fVec0[((IOTA - 97) & 127)]) + ((0.00145302 * fVec0[((IOTA - 94) & 127)]) + ((0.0022861500000000002 * fVec0[((IOTA - 93) & 127)]) + ((0.001377 * fVec0[((IOTA - 90) & 127)]) + ((0.0017080400000000001 * fVec0[((IOTA - 89) & 127)]) + ((0.00016274 * fVec0[((IOTA - 83) & 127)]) + ((0.0027307400000000002 * fVec0[((IOTA - 82) & 127)]) + ((0.0028667500000000004 * fVec0[((IOTA - 81) & 127)]) + ((0.0011399600000000002 * fVec0[((IOTA - 80) & 127)]) + ((0.00110995 * fVec0[((IOTA - 79) & 127)]) + ((0.00124602 * fVec0[((IOTA - 78) & 127)]) + ((0.00129805 * fVec0[((IOTA - 77) & 127)]) + ((0.00100318 * fVec0[((IOTA - 76) & 127)]) + ((0.0022987899999999998 * fVec0[((IOTA - 75) & 127)]) + ((0.0019049100000000001 * fVec0[((IOTA - 74) & 127)]) + ((0.00059075000000000002 * fVec0[((IOTA - 73) & 127)]) + ((0.00103864 * fVec0[((IOTA - 72) & 127)]) + ((0.0013787300000000001 * fVec0[((IOTA - 71) & 127)]) + ((0.00181733 * fVec0[((IOTA - 70) & 127)]) + ((0.00293582 * fVec0[((IOTA - 69) & 127)]) + ((0.0023355800000000003 * fVec0[((IOTA - 68) & 127)]) + ((0.0011070699999999999 * fVec0[((IOTA - 67) & 127)]) + ((0.00050953999999999995 * fVec0[((IOTA - 66) & 127)]) + ((0.00044511000000000003 * fVec0[((IOTA - 65) & 127)]) + ((0.0038312400000000001 * fVec0[((IOTA - 61) & 127)]) + ((0.0016638 * fVec0[((IOTA - 60) & 127)]) + ((0.0043739400000000006 * fVec0[((IOTA - 48) & 127)]) + ((0.0013932899999999999 * fVec0[((IOTA - 45) & 127)]) + ((0.0106382 * fVec0[((IOTA - 41) & 127)]) + ((0.0043469900000000002 * fVec0[((IOTA - 40) & 127)]) + ((0.0015759000000000001 * fVec0[((IOTA - 37) & 127)]) + ((0.0073185999999999998 * fVec0[((IOTA - 36) & 127)]) + ((0.0045973800000000007 * fVec0[((IOTA - 35) & 127)]) + ((0.013183400000000001 * fVec0[((IOTA - 33) & 127)]) + ((0.028645500000000001 * fVec0[((IOTA - 32) & 127)]) + ((0.0092487699999999999 * fVec0[((IOTA - 29) & 127)]) + ((0.039121700000000002 * fVec0[((IOTA - 28) & 127)]) + ((0.00144425 * fVec0[((IOTA - 27) & 127)]) + ((0.0060285 * fVec0[((IOTA - 25) & 127)]) + ((0.057524800000000001 * fVec0[((IOTA - 24) & 127)]) + ((0.021570599999999999 * fVec0[((IOTA - 21) & 127)]) + ((0.0014793400000000002 * fVec0[((IOTA - 20) & 127)]) + ((0.0043988899999999999 * fVec0[((IOTA - 19) & 127)]) + ((0.0073680199999999994 * fVec0[((IOTA - 16) & 127)]) + ((0.00058021900000000009 * fVec0[((IOTA - 14) & 127)]) + ((0.0037306700000000002 * fVec0[((IOTA - 12) & 127)]) + ((0.000216524 * fVec0[((IOTA - 11) & 127)]) + ((0.00050577300000000005 * fVec0[((IOTA - 7) & 127)]) + ((0.00019702400000000002 * fVec0[((IOTA - 5) & 127)]) + (((7.8904099999999995e-07 * fVec1[((IOTA - 118) & 127)]) + ((5.1851200000000009e-05 * fVec1[((IOTA - 117) & 127)]) + ((3.48346e-05 * fVec1[((IOTA - 116) & 127)]) + ((0.000263489 * fVec1[((IOTA - 113) & 127)]) + ((0.00048678400000000003 * fVec1[((IOTA - 112) & 127)]) + ((0.00066577900000000002 * fVec1[((IOTA - 111) & 127)]) + ((0.00072508600000000011 * fVec1[((IOTA - 110) & 127)]) + ((0.00094771800000000006 * fVec1[((IOTA - 109) & 127)]) + ((0.00085589900000000003 * fVec1[((IOTA - 108) & 127)]) + ((0.00097958799999999999 * fVec1[((IOTA - 107) & 127)]) + ((0.00110553 * fVec1[((IOTA - 106) & 127)]) + ((0.00082826600000000003 * fVec1[((IOTA - 105) & 127)]) + ((0.0013655500000000001 * fVec1[((IOTA - 104) & 127)]) + ((0.0018638400000000001 * fVec1[((IOTA - 103) & 127)]) + ((0.0016748900000000001 * fVec1[((IOTA - 102) & 127)]) + ((0.0013615999999999999 * fVec1[((IOTA - 101) & 127)]) + ((0.00120272 * fVec1[((IOTA - 100) & 127)]) + ((0.00103053 * fVec1[((IOTA - 99) & 127)]) + ((0.00040302800000000005 * fVec1[((IOTA - 98) & 127)]) + ((0.0012814900000000001 * fVec1[((IOTA - 97) & 127)]) + ((0.0015273399999999999 * fVec1[((IOTA - 96) & 127)]) + ((0.00046550599999999997 * fVec1[((IOTA - 95) & 127)]) + ((0.00038473700000000001 * fVec1[((IOTA - 94) & 127)]) + ((0.0010250300000000001 * fVec1[((IOTA - 93) & 127)]) + ((0.0011346700000000002 * fVec1[((IOTA - 92) & 127)]) + ((0.00043984100000000006 * fVec1[((IOTA - 85) & 127)]) + ((0.00021673800000000001 * fVec1[((IOTA - 84) & 127)]) + ((2.74177e-05 * fVec1[((IOTA - 82) & 127)]) + ((0.0010960700000000002 * fVec1[((IOTA - 77) & 127)]) + ((0.0013700399999999999 * fVec1[((IOTA - 73) & 127)]) + ((0.0030635300000000001 * fVec1[((IOTA - 72) & 127)]) + ((0.0019637600000000002 * fVec1[((IOTA - 71) & 127)]) + ((0.0018260300000000002 * fVec1[((IOTA - 70) & 127)]) + ((0.00238017 * fVec1[((IOTA - 69) & 127)]) + ((0.0031654200000000004 * fVec1[((IOTA - 68) & 127)]) + ((0.00275033 * fVec1[((IOTA - 67) & 127)]) + ((0.0016457800000000001 * fVec1[((IOTA - 66) & 127)]) + ((0.0025982900000000001 * fVec1[((IOTA - 65) & 127)]) + ((0.0013408299999999999 * fVec1[((IOTA - 64) & 127)]) + ((0.00068048499999999999 * fVec1[((IOTA - 60) & 127)]) + ((0.00122218 * fVec1[((IOTA - 59) & 127)]) + ((0.00152893 * fVec1[((IOTA - 58) & 127)]) + ((0.0022063899999999999 * fVec1[((IOTA - 57) & 127)]) + ((0.00078379700000000003 * fVec1[((IOTA - 56) & 127)]) + ((0.00022987799999999998 * fVec1[((IOTA - 52) & 127)]) + ((0.00078511300000000004 * fVec1[((IOTA - 51) & 127)]) + ((0.0012260999999999999 * fVec1[((IOTA - 45) & 127)]) + ((0.0026344099999999998 * fVec1[((IOTA - 44) & 127)]) + ((0.0038961999999999998 * fVec1[((IOTA - 39) & 127)]) + ((0.011467400000000001 * fVec1[((IOTA - 38) & 127)]) + ((0.0078678299999999993 * fVec1[((IOTA - 37) & 127)]) + ((0.0013363100000000001 * fVec1[((IOTA - 34) & 127)]) + ((0.0089890100000000004 * fVec1[((IOTA - 32) & 127)]) + ((0.0143689 * fVec1[((IOTA - 31) & 127)]) + ((0.0049334100000000001 * fVec1[((IOTA - 30) & 127)]) + ((0.019686699999999998 * fVec1[((IOTA - 27) & 127)]) + ((0.0086390499999999988 * fVec1[((IOTA - 25) & 127)]) + ((0.043355600000000001 * fVec1[((IOTA - 19) & 127)]) + ((0.00249322 * fVec1[((IOTA - 18) & 127)]) + ((0.0141169 * fVec1[((IOTA - 16) & 127)]) + ((0.0111431 * fVec1[((IOTA - 15) & 127)]) + ((0.0018486100000000001 * fVec1[((IOTA - 14) & 127)]) + ((0.000976993 * fVec1[((IOTA - 13) & 127)]) + ((0.0056459800000000001 * fVec1[((IOTA - 12) & 127)]) + ((0.00021246900000000004 * fVec1[((IOTA - 11) & 127)]) + ((0.00095016999999999996 * fVec1[((IOTA - 10) & 127)]) + ((0.0010622000000000001 * fVec1[((IOTA - 7) & 127)]) + ((0.00024919200000000002 * fVec1[((IOTA - 6) & 127)]) + ((0.00027049600000000001 * fVec1[((IOTA - 3) & 127)]) + ((5.1123399999999996e-06 * fVec1[((IOTA - 2) & 127)]) + ((3.7580000000000003e-05 * fVec1[((IOTA - 1) & 127)]) + (((2.5019199999999998e-06 * fVec2[((IOTA - 120) & 127)]) + ((0.00015476800000000001 * fVec2[((IOTA - 107) & 127)]) + ((2.3801800000000003e-05 * fVec2[((IOTA - 106) & 127)]) + ((0.00041578400000000004 * fVec2[((IOTA - 105) & 127)]) + ((0.00040693400000000007 * fVec2[((IOTA - 104) & 127)]) + ((0.00042180200000000004 * fVec2[((IOTA - 103) & 127)]) + ((0.00064933700000000005 * fVec2[((IOTA - 102) & 127)]) + ((0.0010572399999999999 * fVec2[((IOTA - 101) & 127)]) + ((0.00096599000000000012 * fVec2[((IOTA - 100) & 127)]) + ((0.00077855999999999997 * fVec2[((IOTA - 99) & 127)]) + ((0.00073777800000000002 * fVec2[((IOTA - 98) & 127)]) + ((0.00065036 * fVec2[((IOTA - 97) & 127)]) + ((0.00069698000000000004 * fVec2[((IOTA - 96) & 127)]) + ((0.0013956400000000001 * fVec2[((IOTA - 95) & 127)]) + ((0.0020596199999999999 * fVec2[((IOTA - 94) & 127)]) + ((0.0017169000000000002 * fVec2[((IOTA - 93) & 127)]) + ((0.0012716300000000002 * fVec2[((IOTA - 92) & 127)]) + ((0.00130908 * fVec2[((IOTA - 91) & 127)]) + ((0.00161012 * fVec2[((IOTA - 88) & 127)]) + ((0.0016711600000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.00075290600000000002 * fVec2[((IOTA - 86) & 127)]) + ((0.00144013 * fVec2[((IOTA - 85) & 127)]) + ((0.0021273399999999997 * fVec2[((IOTA - 84) & 127)]) + ((0.00061597300000000002 * fVec2[((IOTA - 83) & 127)]) + ((0.00011313 * fVec2[((IOTA - 81) & 127)]) + ((0.0017438199999999999 * fVec2[((IOTA - 80) & 127)]) + ((0.0024799100000000001 * fVec2[((IOTA - 79) & 127)]) + ((0.00256507 * fVec2[((IOTA - 78) & 127)]) + ((0.0011552999999999999 * fVec2[((IOTA - 75) & 127)]) + ((0.00098456699999999999 * fVec2[((IOTA - 74) & 127)]) + ((0.000597807 * fVec2[((IOTA - 73) & 127)]) + ((0.0018893200000000001 * fVec2[((IOTA - 72) & 127)]) + ((0.00092920600000000002 * fVec2[((IOTA - 23) & 127)]) + ((0.080136100000000002 * fVec2[((IOTA - 22) & 127)]) + ((0.041393800000000001 * fVec2[((IOTA - 21) & 127)]) + ((0.042661300000000006 * fVec2[((IOTA - 20) & 127)]) + ((0.0088175100000000006 * fVec2[((IOTA - 19) & 127)]) + ((0.053196100000000003 * fVec2[((IOTA - 18) & 127)]) + ((0.097787600000000002 * fVec2[((IOTA - 17) & 127)]) + ((0.077296500000000004 * fVec2[((IOTA - 15) & 127)]) + ((0.064767000000000005 * fVec2[((IOTA - 14) & 127)]) + ((0.082935599999999998 * fVec2[((IOTA - 13) & 127)]) + ((0.078489900000000001 * fVec2[((IOTA - 12) & 127)]) + ((0.00067357800000000009 * fVec2[((IOTA - 11) & 127)]) + ((0.00149621 * fVec2[((IOTA - 10) & 127)]) + ((0.00072128000000000003 * fVec2[((IOTA - 9) & 127)]) + ((0.00101019 * fVec2[((IOTA - 8) & 127)]) + ((0.000453602 * fVec2[((IOTA - 7) & 127)]) + ((0.00042969900000000002 * fVec2[((IOTA - 6) & 127)]) + ((0.0010723199999999999 * fVec2[((IOTA - 5) & 127)]) + ((0.00084950300000000004 * fVec2[((IOTA - 4) & 127)]) + ((0.00085153200000000001 * fVec2[((IOTA - 3) & 127)]) + ((0.00015027000000000001 * fVec2[((IOTA - 1) & 127)]) + ((2.4709800000000002e-05 * fTemp2) + ((1.47262e-06 * fVec3[((IOTA - 122) & 127)]) + ((0.00048385000000000002 * fVec3[((IOTA - 98) & 127)]) + ((0.00047365100000000001 * fVec3[((IOTA - 97) & 127)]) + ((9.940880000000001e-05 * fVec3[((IOTA - 94) & 127)]) + ((0.0023706000000000001 * fVec3[((IOTA - 93) & 127)]) + ((0.00196204 * fVec3[((IOTA - 92) & 127)]) + ((1.7742000000000001e-05 * fVec3[((IOTA - 91) & 127)]) + ((0.000611186 * fVec3[((IOTA - 90) & 127)]) + ((0.00087519700000000008 * fVec3[((IOTA - 89) & 127)]) + ((0.000687957 * fVec3[((IOTA - 82) & 127)]) + ((0.00036222200000000004 * fVec3[((IOTA - 69) & 127)]) + ((0.00063317100000000008 * fVec3[((IOTA - 57) & 127)]) + ((0.00092078700000000006 * fVec3[((IOTA - 44) & 127)]) + ((0.0029395300000000001 * fVec3[((IOTA - 32) & 127)]) + (((0.00016075400000000001 * fVec3[((IOTA - 2) & 127)]) + (0.021295600000000001 * fVec3[((IOTA - 24) & 127)])) + (0.040092800000000005 * fVec2[((IOTA - 16) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.0426200000000002e-05 * fTemp1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (6.4290300000000003e-05 * fVec0[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fHbargraph1 = FAUSTFLOAT(fRec7[0]); + output1[i] = FAUSTFLOAT(fTemp5); + fRec1[1] = fRec1[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + IOTA = (IOTA + 1); + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec0[1] = fRec0[0]; + fRec7[1] = fRec7[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOADecLebedev061.cpp b/source/HOAUGens/HOADecLebedev061.cpp old mode 100644 new mode 100755 index b4252f760b..32e07b87c5 --- a/source/HOAUGens/HOADecLebedev061.cpp +++ b/source/HOAUGens/HOADecLebedev061.cpp @@ -1,19 +1,14 @@ -//---------------------------------------------------------- -// name: "HOADecLebedev061" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev061" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,126 +601,267 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fConst2; - double fConst3; - double fRec6[2]; - double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec9[2]; - double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fbargraph2; - double fRec0[2]; - FAUSTFLOAT fbargraph3; - double fRec10[2]; - FAUSTFLOAT fbargraph4; - double fRec14[2]; - double fRec13[2]; - double fRec12[2]; - FAUSTFLOAT fbargraph5; - double fRec11[2]; - FAUSTFLOAT fbargraph6; - double fRec15[2]; - FAUSTFLOAT fbargraph7; - double fRec16[2]; - FAUSTFLOAT fbargraph8; - double fRec17[2]; - FAUSTFLOAT fbargraph9; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fRec0[2]; + FAUSTFLOAT fVbargraph3; + double fRec10[2]; + FAUSTFLOAT fVbargraph4; + double fRec14[2]; + double fRec13[2]; + double fRec12[2]; + FAUSTFLOAT fVbargraph5; + double fRec11[2]; + FAUSTFLOAT fVbargraph6; + double fRec15[2]; + FAUSTFLOAT fVbargraph7; + double fRec16[2]; + FAUSTFLOAT fVbargraph8; + double fRec17[2]; + FAUSTFLOAT fVbargraph9; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); m->declare("name", "HOADecLebedev061"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 6; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 6; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (3.4e+02 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec6[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec7[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec0[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec14[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec11[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -692,185 +871,190 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOADecLebedev061"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1cf120", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e3ed10", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1d9d40", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e670c0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1d21f0", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e4a000", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1d4a60", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e539a0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-6"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph3, "osc", "/output1"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1d6030", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "osc", "/output1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e58860", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph4, "osc", "/output2"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1d7500", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "osc", "/output2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e5dbd0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph6, "osc", "/output3"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1db1f0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "osc", "/output3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e6c0d0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph7, "osc", "/output4"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1dcbf0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "osc", "/output4"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e71500", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph8, "osc", "/output5"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1de550", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "osc", "/output5"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e76bd0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph9, "osc", "/output6"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f888a1dfc60", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "osc", "/output6"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e7bdf0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - fSlow1); - double fSlow3 = double(fentry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (fSlow2 + fSlow4); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = (1.0 / ((fConst2 / fSlow3) + 1)); - double fSlow8 = (fConst3 / fSlow3); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev261" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,186 +601,467 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fConst2; - double fConst3; - double fRec6[2]; - double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec9[2]; - double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fbargraph2; - double fRec0[2]; - FAUSTFLOAT fbargraph3; - double fRec10[2]; - FAUSTFLOAT fbargraph4; - double fRec14[2]; - double fRec13[2]; - double fRec12[2]; - FAUSTFLOAT fbargraph5; - double fRec11[2]; - FAUSTFLOAT fbargraph6; - double fRec15[2]; - FAUSTFLOAT fbargraph7; - double fRec16[2]; - FAUSTFLOAT fbargraph8; - double fRec17[2]; - FAUSTFLOAT fbargraph9; - double fRec18[2]; - FAUSTFLOAT fbargraph10; - double fRec19[2]; - FAUSTFLOAT fbargraph11; - double fRec20[2]; - FAUSTFLOAT fbargraph12; - double fRec21[2]; - FAUSTFLOAT fbargraph13; - double fRec22[2]; - FAUSTFLOAT fbargraph14; - double fRec23[2]; - FAUSTFLOAT fbargraph15; - double fRec24[2]; - FAUSTFLOAT fbargraph16; - double fRec25[2]; - FAUSTFLOAT fbargraph17; - double fRec26[2]; - FAUSTFLOAT fbargraph18; - double fRec27[2]; - FAUSTFLOAT fbargraph19; - double fRec28[2]; - FAUSTFLOAT fbargraph20; - double fRec29[2]; - FAUSTFLOAT fbargraph21; - double fRec30[2]; - FAUSTFLOAT fbargraph22; - double fRec31[2]; - FAUSTFLOAT fbargraph23; - double fRec32[2]; - FAUSTFLOAT fbargraph24; - double fRec33[2]; - FAUSTFLOAT fbargraph25; - double fRec34[2]; - FAUSTFLOAT fbargraph26; - double fRec35[2]; - FAUSTFLOAT fbargraph27; - double fRec36[2]; - FAUSTFLOAT fbargraph28; - double fRec37[2]; - FAUSTFLOAT fbargraph29; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOADecLebedev261"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fRec0[2]; + FAUSTFLOAT fVbargraph3; + double fRec10[2]; + FAUSTFLOAT fVbargraph4; + double fRec14[2]; + double fRec13[2]; + double fRec12[2]; + FAUSTFLOAT fVbargraph5; + double fRec11[2]; + FAUSTFLOAT fVbargraph6; + double fRec15[2]; + FAUSTFLOAT fVbargraph7; + double fRec16[2]; + FAUSTFLOAT fVbargraph8; + double fRec17[2]; + FAUSTFLOAT fVbargraph9; + double fRec18[2]; + FAUSTFLOAT fVbargraph10; + double fRec19[2]; + FAUSTFLOAT fVbargraph11; + double fRec20[2]; + FAUSTFLOAT fVbargraph12; + double fRec21[2]; + FAUSTFLOAT fVbargraph13; + double fRec22[2]; + FAUSTFLOAT fVbargraph14; + double fRec23[2]; + FAUSTFLOAT fVbargraph15; + double fRec24[2]; + FAUSTFLOAT fVbargraph16; + double fRec25[2]; + FAUSTFLOAT fVbargraph17; + double fRec26[2]; + FAUSTFLOAT fVbargraph18; + double fRec27[2]; + FAUSTFLOAT fVbargraph19; + double fRec28[2]; + FAUSTFLOAT fVbargraph20; + double fRec29[2]; + FAUSTFLOAT fVbargraph21; + double fRec30[2]; + FAUSTFLOAT fVbargraph22; + double fRec31[2]; + FAUSTFLOAT fVbargraph23; + double fRec32[2]; + FAUSTFLOAT fVbargraph24; + double fRec33[2]; + FAUSTFLOAT fVbargraph25; + double fRec34[2]; + FAUSTFLOAT fVbargraph26; + double fRec35[2]; + FAUSTFLOAT fVbargraph27; + double fRec36[2]; + FAUSTFLOAT fVbargraph28; + double fRec37[2]; + FAUSTFLOAT fVbargraph29; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOADecLebedev261"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 26; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 26; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (3.4e+02 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec6[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec7[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec0[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec14[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec11[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec18[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec20[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec22[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec23[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec24[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec25[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec26[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec27[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec33[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -752,429 +1071,431 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOADecLebedev261"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe77202aac0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x234dab0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec160a0", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2375e60", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec0e310", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2358da0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec10cd0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2362740", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-outs/2"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph3, "osc", "/output1"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec122f0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "osc", "/output1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2367600", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph4, "osc", "/output2"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec13860", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "osc", "/output2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x236c970", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph6, "osc", "/output3"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec17550", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "osc", "/output3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x237ae70", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph7, "osc", "/output4"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec18f50", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "osc", "/output4"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23802a0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph8, "osc", "/output5"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec1a8b0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "osc", "/output5"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2385970", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph9, "osc", "/output6"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec1bfc0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "osc", "/output6"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x238ab90", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph10, "osc", "/output7"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec1de00", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "osc", "/output7"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23913c0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph11, "osc", "/output8"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec1f980", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "osc", "/output8"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2397330", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph12, "osc", "/output9"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec21490", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "osc", "/output9"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x239cf90", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph13, "osc", "/output10"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec23010", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "osc", "/output10"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23a2cd0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph14, "osc", "/output11"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec24ba0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "osc", "/output11"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23a8b30", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph15, "osc", "/output12"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec26730", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "osc", "/output12"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23ae650", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph16, "osc", "/output13"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec28240", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output13"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23b4070", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph17, "osc", "/output14"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec29db0", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output14"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23b9f20", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph18, "osc", "/output15"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec2b3f0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "osc", "/output15"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23bef80", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph19, "osc", "/output16"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec2cbe0", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output16"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23c43a0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph20, "osc", "/output17"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec2e290", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "osc", "/output17"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23c98a0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph21, "osc", "/output18"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec2fd10", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "osc", "/output18"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23cee80", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph22, "osc", "/output19"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec31c20", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "osc", "/output19"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23d5890", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph23, "osc", "/output20"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec33700", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output20"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23db630", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph24, "osc", "/output21"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec35010", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "osc", "/output21"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e10f0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph25, "osc", "/output22"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec36e30", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output22"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e6e40", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph26, "osc", "/output23"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec389d0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output23"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23ecca0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph27, "osc", "/output24"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe76ec3a450", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "osc", "/output24"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f25e0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph28, "osc", "/output25"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe77202e9b0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output25"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f8420", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph29, "osc", "/output26"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe7720303f0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output26"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23fe100", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - fSlow1); - double fSlow3 = double(fentry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (fSlow2 + fSlow4); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = (1.0 / ((fConst2 / fSlow3) + 1)); - double fSlow8 = (fConst3 / fSlow3); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev262" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,235 +601,600 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fConst2; - double fConst3; - double fRec6[2]; - double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec9[2]; - double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fbargraph2; - double fConst4; - double fRec13[2]; - double fRec12[2]; - double fConst5; - double fRec11[2]; - double fRec10[2]; - FAUSTFLOAT fbargraph3; - double fRec17[2]; - double fRec16[2]; - double fRec15[2]; - double fRec14[2]; - FAUSTFLOAT fbargraph4; - double fRec21[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; - FAUSTFLOAT fbargraph5; - double fRec0[2]; - FAUSTFLOAT fbargraph6; - double fRec22[2]; - FAUSTFLOAT fbargraph7; - double fRec26[2]; - double fRec25[2]; - double fRec24[2]; - FAUSTFLOAT fbargraph8; - double fRec30[2]; - double fRec29[2]; - double fRec28[2]; - double fRec27[2]; - FAUSTFLOAT fbargraph9; - double fRec23[2]; - FAUSTFLOAT fbargraph10; - double fRec31[2]; - FAUSTFLOAT fbargraph11; - double fRec32[2]; - FAUSTFLOAT fbargraph12; - double fRec33[2]; - FAUSTFLOAT fbargraph13; - double fRec34[2]; - FAUSTFLOAT fbargraph14; - double fRec39[2]; - double fRec38[2]; - double fRec37[2]; - double fRec36[2]; - FAUSTFLOAT fbargraph15; - double fRec35[2]; - FAUSTFLOAT fbargraph16; - double fRec40[2]; - FAUSTFLOAT fbargraph17; - double fRec41[2]; - FAUSTFLOAT fbargraph18; - double fRec42[2]; - FAUSTFLOAT fbargraph19; - double fRec43[2]; - FAUSTFLOAT fbargraph20; - double fRec44[2]; - FAUSTFLOAT fbargraph21; - double fRec45[2]; - FAUSTFLOAT fbargraph22; - double fRec46[2]; - FAUSTFLOAT fbargraph23; - double fRec47[2]; - FAUSTFLOAT fbargraph24; - double fRec48[2]; - FAUSTFLOAT fbargraph25; - double fRec49[2]; - FAUSTFLOAT fbargraph26; - double fRec50[2]; - FAUSTFLOAT fbargraph27; - double fRec51[2]; - FAUSTFLOAT fbargraph28; - double fRec52[2]; - FAUSTFLOAT fbargraph29; - double fRec53[2]; - FAUSTFLOAT fbargraph30; - double fRec54[2]; - FAUSTFLOAT fbargraph31; - double fRec55[2]; - FAUSTFLOAT fbargraph32; - double fRec56[2]; - FAUSTFLOAT fbargraph33; - double fRec57[2]; - FAUSTFLOAT fbargraph34; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOADecLebedev262"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec12[2]; + double fRec13[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fVbargraph3; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fVbargraph4; + double fRec20[2]; + double fRec21[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph5; + double fRec0[2]; + FAUSTFLOAT fVbargraph6; + double fRec22[2]; + FAUSTFLOAT fVbargraph7; + double fRec26[2]; + double fRec25[2]; + double fRec24[2]; + FAUSTFLOAT fVbargraph8; + double fRec29[2]; + double fRec30[2]; + double fRec28[2]; + double fRec27[2]; + FAUSTFLOAT fVbargraph9; + double fRec23[2]; + FAUSTFLOAT fVbargraph10; + double fRec31[2]; + FAUSTFLOAT fVbargraph11; + double fRec32[2]; + FAUSTFLOAT fVbargraph12; + double fRec33[2]; + FAUSTFLOAT fVbargraph13; + double fRec34[2]; + FAUSTFLOAT fVbargraph14; + double fRec38[2]; + double fRec39[2]; + double fRec37[2]; + double fRec36[2]; + FAUSTFLOAT fVbargraph15; + double fRec35[2]; + FAUSTFLOAT fVbargraph16; + double fRec40[2]; + FAUSTFLOAT fVbargraph17; + double fRec41[2]; + FAUSTFLOAT fVbargraph18; + double fRec42[2]; + FAUSTFLOAT fVbargraph19; + double fRec43[2]; + FAUSTFLOAT fVbargraph20; + double fRec44[2]; + FAUSTFLOAT fVbargraph21; + double fRec45[2]; + FAUSTFLOAT fVbargraph22; + double fRec46[2]; + FAUSTFLOAT fVbargraph23; + double fRec47[2]; + FAUSTFLOAT fVbargraph24; + double fRec48[2]; + FAUSTFLOAT fVbargraph25; + double fRec49[2]; + FAUSTFLOAT fVbargraph26; + double fRec50[2]; + FAUSTFLOAT fVbargraph27; + double fRec51[2]; + FAUSTFLOAT fVbargraph28; + double fRec52[2]; + FAUSTFLOAT fVbargraph29; + double fRec53[2]; + FAUSTFLOAT fVbargraph30; + double fRec54[2]; + FAUSTFLOAT fVbargraph31; + double fRec55[2]; + FAUSTFLOAT fVbargraph32; + double fRec56[2]; + FAUSTFLOAT fVbargraph33; + double fRec57[2]; + FAUSTFLOAT fVbargraph34; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOADecLebedev262"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 26; } + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 26; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (3.4e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec6[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec7[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec13[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec10[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec16[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec17[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec14[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec20[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec21[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec18[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec0[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec22[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec26[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec29[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec30[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec27[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec23[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec33[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec38[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec39[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec36[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec35[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec43[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec44[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec45[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec46[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec47[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec48[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec49[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec50[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec51[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec52[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec53[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec54[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec55[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec56[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec57[l57] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -813,551 +1204,549 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOADecLebedev262"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b332f0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f5e600", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b486d0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fad280", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b36480", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f69b00", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b38d30", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f734a0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b4b6c0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fb87b0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b576e0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fe1e70", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b3cc80", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f81d40", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b3fcc0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f8d3d0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b42d80", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f98a60", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-outs/2"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph6, "osc", "/output1"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b444b0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "osc", "/output1"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f9dae0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph7, "osc", "/output2"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b45dd0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "osc", "/output2"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fa3d90", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph10, "osc", "/output3"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b4ccb0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "osc", "/output3"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fbd820", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph11, "osc", "/output4"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b4e920", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "osc", "/output4"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fc35a0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph12, "osc", "/output5"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b508b0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "osc", "/output5"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fc9400", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph13, "osc", "/output6"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b520b0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "osc", "/output6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fcebc0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph14, "osc", "/output7"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b54670", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "osc", "/output7"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fd6910", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph16, "osc", "/output8"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b59820", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output8"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fe8cc0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph17, "osc", "/output9"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b5ba30", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output9"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fefe50", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph18, "osc", "/output10"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b5de50", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "osc", "/output10"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ff6e90", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph19, "osc", "/output11"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b5ffb0", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output11"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ffde20", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph20, "osc", "/output12"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b61ed0", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "osc", "/output12"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x20040c0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph21, "osc", "/output13"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b63e70", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "osc", "/output13"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x200a260", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph22, "osc", "/output14"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b66030", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "osc", "/output14"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2010a60", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph23, "osc", "/output15"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b67920", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output15"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2016060", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph24, "osc", "/output16"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b69420", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "osc", "/output16"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x201bde0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph25, "osc", "/output17"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b6b2b0", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output17"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2021e50", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph26, "osc", "/output18"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b6cf30", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output18"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2027bb0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph27, "osc", "/output19"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b6fc00", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "osc", "/output19"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2030be0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph28, "osc", "/output20"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b71ff0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output20"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2038080", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph29, "osc", "/output21"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b73e40", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output21"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x203e820", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph30, "osc", "/output22"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b76310", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "osc", "/output22"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2045c60", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph31, "osc", "/output23"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b78130", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "osc", "/output23"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x204c420", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph32, "osc", "/output24"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b7a1f0", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "osc", "/output24"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x20526c0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph33, "osc", "/output25"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b7c310", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "osc", "/output25"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2058c20", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph34, "osc", "/output26"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fdc99b7e1a0", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "osc", "/output26"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x205f080", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - fSlow1); - double fSlow3 = double(fentry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (fSlow2 + fSlow4); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = (fConst2 / fSlow3); - double fSlow8 = (1.0 / (fSlow7 + 1)); - double fSlow9 = (fConst3 / fSlow3); - double fSlow10 = faustpower<2>(fSlow7); - double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); - double fSlow12 = (12 * fSlow10); - double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev263" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,334 +601,853 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fConst2; - double fConst3; - double fRec6[2]; - double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec9[2]; - double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fbargraph2; - double fConst4; - double fRec13[2]; - double fRec12[2]; - double fConst5; - double fRec11[2]; - double fRec10[2]; - FAUSTFLOAT fbargraph3; - double fRec17[2]; - double fRec16[2]; - double fRec15[2]; - double fRec14[2]; - FAUSTFLOAT fbargraph4; - double fRec21[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; - FAUSTFLOAT fbargraph5; - double fConst6; - double fConst7; - double fRec26[2]; - double fRec25[2]; - double fConst8; - double fRec24[2]; - double fConst9; - double fRec27[2]; - double fRec23[2]; - double fRec22[2]; - FAUSTFLOAT fbargraph6; - double fRec32[2]; - double fRec31[2]; - double fRec30[2]; - double fRec33[2]; - double fRec29[2]; - double fRec28[2]; - FAUSTFLOAT fbargraph7; - double fRec38[2]; - double fRec37[2]; - double fRec36[2]; - double fRec39[2]; - double fRec35[2]; - double fRec34[2]; - FAUSTFLOAT fbargraph8; - double fRec44[2]; - double fRec43[2]; - double fRec42[2]; - double fRec45[2]; - double fRec41[2]; - double fRec40[2]; - FAUSTFLOAT fbargraph9; - double fRec0[2]; - FAUSTFLOAT fbargraph10; - double fRec46[2]; - FAUSTFLOAT fbargraph11; - double fRec50[2]; - double fRec49[2]; - double fRec48[2]; - FAUSTFLOAT fbargraph12; - double fRec54[2]; - double fRec53[2]; - double fRec52[2]; - double fRec51[2]; - FAUSTFLOAT fbargraph13; - double fRec59[2]; - double fRec58[2]; - double fRec57[2]; - double fRec60[2]; - double fRec56[2]; - double fRec55[2]; - FAUSTFLOAT fbargraph14; - double fRec65[2]; - double fRec64[2]; - double fRec63[2]; - double fRec66[2]; - double fRec62[2]; - double fRec61[2]; - FAUSTFLOAT fbargraph15; - double fRec47[2]; - FAUSTFLOAT fbargraph16; - double fRec67[2]; - FAUSTFLOAT fbargraph17; - double fRec68[2]; - FAUSTFLOAT fbargraph18; - double fRec69[2]; - FAUSTFLOAT fbargraph19; - double fRec70[2]; - FAUSTFLOAT fbargraph20; - double fRec75[2]; - double fRec74[2]; - double fRec73[2]; - double fRec72[2]; - FAUSTFLOAT fbargraph21; - double fRec80[2]; - double fRec79[2]; - double fRec78[2]; - double fRec81[2]; - double fRec77[2]; - double fRec76[2]; - FAUSTFLOAT fbargraph22; - double fRec71[2]; - FAUSTFLOAT fbargraph23; - double fRec82[2]; - FAUSTFLOAT fbargraph24; - double fRec83[2]; - FAUSTFLOAT fbargraph25; - double fRec84[2]; - FAUSTFLOAT fbargraph26; - double fRec85[2]; - FAUSTFLOAT fbargraph27; - double fRec86[2]; - FAUSTFLOAT fbargraph28; - double fRec87[2]; - FAUSTFLOAT fbargraph29; - double fRec88[2]; - FAUSTFLOAT fbargraph30; - double fRec89[2]; - FAUSTFLOAT fbargraph31; - double fRec90[2]; - FAUSTFLOAT fbargraph32; - double fRec91[2]; - FAUSTFLOAT fbargraph33; - double fRec92[2]; - FAUSTFLOAT fbargraph34; - double fRec93[2]; - FAUSTFLOAT fbargraph35; - double fRec94[2]; - FAUSTFLOAT fbargraph36; - double fRec95[2]; - FAUSTFLOAT fbargraph37; - double fRec96[2]; - FAUSTFLOAT fbargraph38; - double fRec97[2]; - FAUSTFLOAT fbargraph39; - double fRec98[2]; - FAUSTFLOAT fbargraph40; - double fRec99[2]; - FAUSTFLOAT fbargraph41; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec12[2]; + double fRec13[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fVbargraph3; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fVbargraph4; + double fRec20[2]; + double fRec21[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph5; + double fConst6; + double fConst7; + double fConst8; + double fRec25[2]; + double fRec26[2]; + double fRec24[2]; + double fConst9; + double fRec27[2]; + double fRec23[2]; + double fRec22[2]; + FAUSTFLOAT fVbargraph6; + double fRec31[2]; + double fRec32[2]; + double fRec30[2]; + double fRec33[2]; + double fRec29[2]; + double fRec28[2]; + FAUSTFLOAT fVbargraph7; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fRec35[2]; + double fRec34[2]; + FAUSTFLOAT fVbargraph8; + double fRec43[2]; + double fRec44[2]; + double fRec42[2]; + double fRec45[2]; + double fRec41[2]; + double fRec40[2]; + FAUSTFLOAT fVbargraph9; + double fRec0[2]; + FAUSTFLOAT fVbargraph10; + double fRec46[2]; + FAUSTFLOAT fVbargraph11; + double fRec50[2]; + double fRec49[2]; + double fRec48[2]; + FAUSTFLOAT fVbargraph12; + double fRec53[2]; + double fRec54[2]; + double fRec52[2]; + double fRec51[2]; + FAUSTFLOAT fVbargraph13; + double fRec58[2]; + double fRec59[2]; + double fRec57[2]; + double fRec60[2]; + double fRec56[2]; + double fRec55[2]; + FAUSTFLOAT fVbargraph14; + double fRec64[2]; + double fRec65[2]; + double fRec63[2]; + double fRec66[2]; + double fRec62[2]; + double fRec61[2]; + FAUSTFLOAT fVbargraph15; + double fRec47[2]; + FAUSTFLOAT fVbargraph16; + double fRec67[2]; + FAUSTFLOAT fVbargraph17; + double fRec68[2]; + FAUSTFLOAT fVbargraph18; + double fRec69[2]; + FAUSTFLOAT fVbargraph19; + double fRec70[2]; + FAUSTFLOAT fVbargraph20; + double fRec74[2]; + double fRec75[2]; + double fRec73[2]; + double fRec72[2]; + FAUSTFLOAT fVbargraph21; + double fRec79[2]; + double fRec80[2]; + double fRec78[2]; + double fRec81[2]; + double fRec77[2]; + double fRec76[2]; + FAUSTFLOAT fVbargraph22; + double fRec71[2]; + FAUSTFLOAT fVbargraph23; + double fRec82[2]; + FAUSTFLOAT fVbargraph24; + double fRec83[2]; + FAUSTFLOAT fVbargraph25; + double fRec84[2]; + FAUSTFLOAT fVbargraph26; + double fRec85[2]; + FAUSTFLOAT fVbargraph27; + double fRec86[2]; + FAUSTFLOAT fVbargraph28; + double fRec87[2]; + FAUSTFLOAT fVbargraph29; + double fRec88[2]; + FAUSTFLOAT fVbargraph30; + double fRec89[2]; + FAUSTFLOAT fVbargraph31; + double fRec90[2]; + FAUSTFLOAT fVbargraph32; + double fRec91[2]; + FAUSTFLOAT fVbargraph33; + double fRec92[2]; + FAUSTFLOAT fVbargraph34; + double fRec93[2]; + FAUSTFLOAT fVbargraph35; + double fRec94[2]; + FAUSTFLOAT fVbargraph36; + double fRec95[2]; + FAUSTFLOAT fVbargraph37; + double fRec96[2]; + FAUSTFLOAT fVbargraph38; + double fRec97[2]; + FAUSTFLOAT fVbargraph39; + double fRec98[2]; + FAUSTFLOAT fVbargraph40; + double fRec99[2]; + FAUSTFLOAT fVbargraph41; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); m->declare("name", "HOADecLebedev263"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 26; } + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 26; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (3.4e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); - fConst6 = (394.7715102864353 / fConst0); - fConst7 = (625.2284897135664 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + fConst6 = (394.77151028643527 / fConst0); + fConst7 = (625.22848971356643 / fConst0); fConst8 = (1250.4569794271329 / fConst0); - fConst9 = (789.5430205728705 / fConst0); + fConst9 = (789.54302057287055 / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec88[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec91[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<2; i++) fRec93[i] = 0; - for (int i=0; i<2; i++) fRec94[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<2; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec98[i] = 0; - for (int i=0; i<2; i++) fRec99[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec6[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec7[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec13[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec10[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec16[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec17[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec14[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec20[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec21[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec18[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec25[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec26[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec27[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec23[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec22[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec31[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec32[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec30[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec33[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec29[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec28[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec37[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec38[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec36[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec39[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec35[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec34[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec43[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec44[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec42[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec45[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec41[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec40[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec0[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec46[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec50[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec53[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec54[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec52[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec51[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec58[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec59[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec60[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec56[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec55[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec64[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec65[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec63[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec66[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec62[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec61[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec47[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec67[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec68[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec69[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec70[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec74[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec75[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec73[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec72[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec79[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec80[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec78[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec81[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec77[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec76[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec71[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec82[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec83[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec84[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec85[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec86[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec87[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec88[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec89[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec90[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec91[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec92[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec93[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec94[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec95[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec96[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec97[l97] = 0.0; + + } + for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + fRec98[l98] = 0.0; + + } + for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + fRec99[l99] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -912,752 +1457,742 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOADecLebedev263"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e261e0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2273800", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e4c3c0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2302590", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e29370", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x227ed00", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e2bc20", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22886a0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e4f3b0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x230dac0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e650b0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2359380", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e2fb70", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2296f40", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e32bb0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22a25d0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e35c70", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22adc60", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e52e70", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x231c0f0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e68b70", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2367ad0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e56880", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x232a830", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e3aed0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22c0820", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e3ea60", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22cf3f0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e426c0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22ddfc0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e463e0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22ecc70", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-outs/2"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph10, "osc", "/output1"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e47be0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "osc", "/output1"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22f1eb0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph11, "osc", "/output2"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e49ae0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "osc", "/output2"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22f90a0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph16, "osc", "/output3"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e58700", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output3"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2330970", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph17, "osc", "/output4"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e5ab30", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output4"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23375d0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph18, "osc", "/output5"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e5d220", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "osc", "/output5"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x233e310", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph19, "osc", "/output6"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e5ee60", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output6"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2344250", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph20, "osc", "/output7"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e61f90", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "osc", "/output7"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x234de20", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph23, "osc", "/output8"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e6ba60", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output8"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2370c40", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph24, "osc", "/output9"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e6e9b0", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "osc", "/output9"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2379c30", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph25, "osc", "/output10"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e71810", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output10"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2382910", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph26, "osc", "/output11"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e745e0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output11"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x238b140", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph27, "osc", "/output12"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e76e20", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "osc", "/output12"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23926d0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph28, "osc", "/output13"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e79520", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output13"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2399590", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph29, "osc", "/output14"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e7baa0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23a0ac0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph30, "osc", "/output15"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e7d670", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "osc", "/output15"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23a6680", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph31, "osc", "/output16"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e7f960", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "osc", "/output16"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23acf60", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph32, "osc", "/output17"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e81f10", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "osc", "/output17"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23b3cf0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph33, "osc", "/output18"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e843e0", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "osc", "/output18"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23ba770", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph34, "osc", "/output19"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e88550", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "osc", "/output19"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23c6d00", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph35, "osc", "/output20"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e8bae0", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "osc", "/output20"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23d07e0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph36, "osc", "/output21"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e8ea30", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "osc", "/output21"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23d93a0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph37, "osc", "/output22"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e918a0", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "osc", "/output22"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e2690", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph38, "osc", "/output23"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e93eb0", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "osc", "/output23"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e9b70", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph39, "osc", "/output24"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e96810", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "osc", "/output24"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f0b30", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph40, "osc", "/output25"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e990b0", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "osc", "/output25"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f7db0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph41, "osc", "/output26"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe482e9b820", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "osc", "/output26"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23fef30", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - fSlow1); - double fSlow3 = double(fentry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (fSlow2 + fSlow4); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = (fConst2 / fSlow3); - double fSlow8 = (1.0 / (fSlow7 + 1)); - double fSlow9 = (fConst3 / fSlow3); - double fSlow10 = faustpower<2>(fSlow7); - double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); - double fSlow12 = (12 * fSlow10); - double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); - double fSlow14 = (1.0 / ((fConst6 / fSlow3) + 1)); - double fSlow15 = (1.0 / (((fConst7 / fSlow3) + (6.45943269348338 * fSlow10)) + 1)); - double fSlow16 = (25.83773077393352 * fSlow10); - double fSlow17 = (fSlow16 + (fConst8 / fSlow3)); - double fSlow18 = (fConst9 / fSlow3); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev501" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,258 +601,707 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fConst2; - double fConst3; - double fRec6[2]; - double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec9[2]; - double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fbargraph2; - double fRec0[2]; - FAUSTFLOAT fbargraph3; - double fRec10[2]; - FAUSTFLOAT fbargraph4; - double fRec14[2]; - double fRec13[2]; - double fRec12[2]; - FAUSTFLOAT fbargraph5; - double fRec11[2]; - FAUSTFLOAT fbargraph6; - double fRec15[2]; - FAUSTFLOAT fbargraph7; - double fRec16[2]; - FAUSTFLOAT fbargraph8; - double fRec17[2]; - FAUSTFLOAT fbargraph9; - double fRec18[2]; - FAUSTFLOAT fbargraph10; - double fRec19[2]; - FAUSTFLOAT fbargraph11; - double fRec20[2]; - FAUSTFLOAT fbargraph12; - double fRec21[2]; - FAUSTFLOAT fbargraph13; - double fRec22[2]; - FAUSTFLOAT fbargraph14; - double fRec23[2]; - FAUSTFLOAT fbargraph15; - double fRec24[2]; - FAUSTFLOAT fbargraph16; - double fRec25[2]; - FAUSTFLOAT fbargraph17; - double fRec26[2]; - FAUSTFLOAT fbargraph18; - double fRec27[2]; - FAUSTFLOAT fbargraph19; - double fRec28[2]; - FAUSTFLOAT fbargraph20; - double fRec29[2]; - FAUSTFLOAT fbargraph21; - double fRec30[2]; - FAUSTFLOAT fbargraph22; - double fRec31[2]; - FAUSTFLOAT fbargraph23; - double fRec32[2]; - FAUSTFLOAT fbargraph24; - double fRec33[2]; - FAUSTFLOAT fbargraph25; - double fRec34[2]; - FAUSTFLOAT fbargraph26; - double fRec35[2]; - FAUSTFLOAT fbargraph27; - double fRec36[2]; - FAUSTFLOAT fbargraph28; - double fRec37[2]; - FAUSTFLOAT fbargraph29; - double fRec38[2]; - FAUSTFLOAT fbargraph30; - double fRec39[2]; - FAUSTFLOAT fbargraph31; - double fRec40[2]; - FAUSTFLOAT fbargraph32; - double fRec41[2]; - FAUSTFLOAT fbargraph33; - double fRec42[2]; - FAUSTFLOAT fbargraph34; - double fRec43[2]; - FAUSTFLOAT fbargraph35; - double fRec44[2]; - FAUSTFLOAT fbargraph36; - double fRec45[2]; - FAUSTFLOAT fbargraph37; - double fRec46[2]; - FAUSTFLOAT fbargraph38; - double fRec47[2]; - FAUSTFLOAT fbargraph39; - double fRec48[2]; - FAUSTFLOAT fbargraph40; - double fRec49[2]; - FAUSTFLOAT fbargraph41; - double fRec50[2]; - FAUSTFLOAT fbargraph42; - double fRec51[2]; - FAUSTFLOAT fbargraph43; - double fRec52[2]; - FAUSTFLOAT fbargraph44; - double fRec53[2]; - FAUSTFLOAT fbargraph45; - double fRec54[2]; - FAUSTFLOAT fbargraph46; - double fRec55[2]; - FAUSTFLOAT fbargraph47; - double fRec56[2]; - FAUSTFLOAT fbargraph48; - double fRec57[2]; - FAUSTFLOAT fbargraph49; - double fRec58[2]; - FAUSTFLOAT fbargraph50; - double fRec59[2]; - FAUSTFLOAT fbargraph51; - double fRec60[2]; - FAUSTFLOAT fbargraph52; - double fRec61[2]; - FAUSTFLOAT fbargraph53; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("name", "HOADecLebedev501"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fRec0[2]; + FAUSTFLOAT fVbargraph3; + double fRec10[2]; + FAUSTFLOAT fVbargraph4; + double fRec14[2]; + double fRec13[2]; + double fRec12[2]; + FAUSTFLOAT fVbargraph5; + double fRec11[2]; + FAUSTFLOAT fVbargraph6; + double fRec15[2]; + FAUSTFLOAT fVbargraph7; + double fRec16[2]; + FAUSTFLOAT fVbargraph8; + double fRec17[2]; + FAUSTFLOAT fVbargraph9; + double fRec18[2]; + FAUSTFLOAT fVbargraph10; + double fRec19[2]; + FAUSTFLOAT fVbargraph11; + double fRec20[2]; + FAUSTFLOAT fVbargraph12; + double fRec21[2]; + FAUSTFLOAT fVbargraph13; + double fRec22[2]; + FAUSTFLOAT fVbargraph14; + double fRec23[2]; + FAUSTFLOAT fVbargraph15; + double fRec24[2]; + FAUSTFLOAT fVbargraph16; + double fRec25[2]; + FAUSTFLOAT fVbargraph17; + double fRec26[2]; + FAUSTFLOAT fVbargraph18; + double fRec27[2]; + FAUSTFLOAT fVbargraph19; + double fRec28[2]; + FAUSTFLOAT fVbargraph20; + double fRec29[2]; + FAUSTFLOAT fVbargraph21; + double fRec30[2]; + FAUSTFLOAT fVbargraph22; + double fRec31[2]; + FAUSTFLOAT fVbargraph23; + double fRec32[2]; + FAUSTFLOAT fVbargraph24; + double fRec33[2]; + FAUSTFLOAT fVbargraph25; + double fRec34[2]; + FAUSTFLOAT fVbargraph26; + double fRec35[2]; + FAUSTFLOAT fVbargraph27; + double fRec36[2]; + FAUSTFLOAT fVbargraph28; + double fRec37[2]; + FAUSTFLOAT fVbargraph29; + double fRec38[2]; + FAUSTFLOAT fVbargraph30; + double fRec39[2]; + FAUSTFLOAT fVbargraph31; + double fRec40[2]; + FAUSTFLOAT fVbargraph32; + double fRec41[2]; + FAUSTFLOAT fVbargraph33; + double fRec42[2]; + FAUSTFLOAT fVbargraph34; + double fRec43[2]; + FAUSTFLOAT fVbargraph35; + double fRec44[2]; + FAUSTFLOAT fVbargraph36; + double fRec45[2]; + FAUSTFLOAT fVbargraph37; + double fRec46[2]; + FAUSTFLOAT fVbargraph38; + double fRec47[2]; + FAUSTFLOAT fVbargraph39; + double fRec48[2]; + FAUSTFLOAT fVbargraph40; + double fRec49[2]; + FAUSTFLOAT fVbargraph41; + double fRec50[2]; + FAUSTFLOAT fVbargraph42; + double fRec51[2]; + FAUSTFLOAT fVbargraph43; + double fRec52[2]; + FAUSTFLOAT fVbargraph44; + double fRec53[2]; + FAUSTFLOAT fVbargraph45; + double fRec54[2]; + FAUSTFLOAT fVbargraph46; + double fRec55[2]; + FAUSTFLOAT fVbargraph47; + double fRec56[2]; + FAUSTFLOAT fVbargraph48; + double fRec57[2]; + FAUSTFLOAT fVbargraph49; + double fRec58[2]; + FAUSTFLOAT fVbargraph50; + double fRec59[2]; + FAUSTFLOAT fVbargraph51; + double fRec60[2]; + FAUSTFLOAT fVbargraph52; + double fRec61[2]; + FAUSTFLOAT fVbargraph53; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOADecLebedev501"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 50; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (3.4e+02 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec6[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec7[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec0[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec14[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec11[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec18[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec20[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec22[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec23[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec24[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec25[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec26[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec27[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec33[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec38[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec39[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec43[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec44[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec45[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec46[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec47[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec48[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec49[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec50[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec51[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec52[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec53[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec54[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec55[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec56[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec57[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec58[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec59[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec60[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec61[l61] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -824,716 +1311,719 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOADecLebedev501"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443a3bb0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a3be40", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443ae870", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a641f0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443a6ce0", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a47130", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443a95a0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a50ad0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph3, "osc", "/output1"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443aab50", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "osc", "/output1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a55990", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph4, "osc", "/output2"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443ac040", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "osc", "/output2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a5ad00", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph6, "osc", "/output3"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443afd20", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "osc", "/output3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a69200", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph7, "osc", "/output4"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443b1720", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "osc", "/output4"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a6e630", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph8, "osc", "/output5"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443b3080", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "osc", "/output5"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a73d00", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph9, "osc", "/output6"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443b4790", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "osc", "/output6"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a78f20", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph10, "osc", "/output7"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443b6550", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "osc", "/output7"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a7f750", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph11, "osc", "/output8"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443b8150", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "osc", "/output8"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a856c0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph12, "osc", "/output9"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443b9c60", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "osc", "/output9"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a8b320", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph13, "osc", "/output10"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443bb7e0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "osc", "/output10"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a91060", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph14, "osc", "/output11"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443bd320", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "osc", "/output11"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a96ec0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph15, "osc", "/output12"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443bed50", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "osc", "/output12"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a9c9e0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph16, "osc", "/output13"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443c0a00", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output13"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa2400", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph17, "osc", "/output14"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443c2570", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output14"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa82b0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph18, "osc", "/output15"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443c4080", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "osc", "/output15"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aadcb0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph19, "osc", "/output16"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443c5db0", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output16"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab3b50", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph20, "osc", "/output17"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443c79a0", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "osc", "/output17"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab9ad0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph21, "osc", "/output18"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443c9960", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "osc", "/output18"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3abfb30", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph22, "osc", "/output19"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443cbda0", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "osc", "/output19"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ac6fc0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph23, "osc", "/output20"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443cddc0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output20"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3acd7e0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph24, "osc", "/output21"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443cfe10", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "osc", "/output21"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ad3d20", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph25, "osc", "/output22"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443d1d10", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output22"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3adaab0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph26, "osc", "/output23"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443d3fc0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output23"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ae1390", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph27, "osc", "/output24"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443d5fd0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "osc", "/output24"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ae7750", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph28, "osc", "/output25"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443d81d0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output25"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aee010", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph29, "osc", "/output26"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443da3b0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output26"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3af4770", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph30, "osc", "/output27"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443dc160", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "osc", "/output27"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3afaee0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph31, "osc", "/output28"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443dd940", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "osc", "/output28"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b00510", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph32, "osc", "/output29"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443df3b0", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "osc", "/output29"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b061e0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph33, "osc", "/output30"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443e0dd0", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "osc", "/output30"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b0bf90", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph34, "osc", "/output31"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443e2ce0", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "osc", "/output31"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b129a0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph35, "osc", "/output32"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443e4890", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "osc", "/output32"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b18910", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph36, "osc", "/output33"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443e6380", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "osc", "/output33"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b1e570", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph37, "osc", "/output34"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443e7f10", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "osc", "/output34"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b242b0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph38, "osc", "/output35"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443e9b00", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "osc", "/output35"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b2a0d0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph39, "osc", "/output36"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443eb760", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "osc", "/output36"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b2ffd0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph40, "osc", "/output37"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443ed430", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "osc", "/output37"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b35fb0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph41, "osc", "/output38"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443ef0f0", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "osc", "/output38"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b3c630", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph42, "osc", "/output39"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443f1000", &fbargraph42, -7e+01, 6.0); + ui_interface->declare(&fVbargraph42, "osc", "/output39"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b423f0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph43, "osc", "/output40"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443f2d40", &fbargraph43, -7e+01, 6.0); + ui_interface->declare(&fVbargraph43, "osc", "/output40"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b48290", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph44, "osc", "/output41"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443f4930", &fbargraph44, -7e+01, 6.0); + ui_interface->declare(&fVbargraph44, "osc", "/output41"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b4e210", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph45, "osc", "/output42"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443f6700", &fbargraph45, -7e+01, 6.0); + ui_interface->declare(&fVbargraph45, "osc", "/output42"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b54480", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph46, "osc", "/output43"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443f84b0", &fbargraph46, -7e+01, 6.0); + ui_interface->declare(&fVbargraph46, "osc", "/output43"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b5a3e0", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph47, "osc", "/output44"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc1443fa5f0", &fbargraph47, -7e+01, 6.0); + ui_interface->declare(&fVbargraph47, "osc", "/output44"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b60600", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph48, "osc", "/output45"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc145c004b0", &fbargraph48, -7e+01, 6.0); + ui_interface->declare(&fVbargraph48, "osc", "/output45"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b66900", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph49, "osc", "/output46"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc145c022e0", &fbargraph49, -7e+01, 6.0); + ui_interface->declare(&fVbargraph49, "osc", "/output46"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b6cce0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph50, "osc", "/output47"); - ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc145c043f0", &fbargraph50, -7e+01, 6.0); + ui_interface->declare(&fVbargraph50, "osc", "/output47"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b72fc0", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph51, "osc", "/output48"); - ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc145c063c0", &fbargraph51, -7e+01, 6.0); + ui_interface->declare(&fVbargraph51, "osc", "/output48"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b79380", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph52, "osc", "/output49"); - ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc145c084e0", &fbargraph52, -7e+01, 6.0); + ui_interface->declare(&fVbargraph52, "osc", "/output49"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b7fa00", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph53, "osc", "/output50"); - ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc145c0a4c0", &fbargraph53, -7e+01, 6.0); + ui_interface->declare(&fVbargraph53, "osc", "/output50"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b86160", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - fSlow1); - double fSlow3 = double(fentry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (fSlow2 + fSlow4); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = (1.0 / ((fConst2 / fSlow3) + 1)); - double fSlow8 = (fConst3 / fSlow3); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev502" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,307 +601,840 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fConst2; - double fConst3; - double fRec6[2]; - double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec9[2]; - double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fbargraph2; - double fConst4; - double fRec13[2]; - double fRec12[2]; - double fConst5; - double fRec11[2]; - double fRec10[2]; - FAUSTFLOAT fbargraph3; - double fRec17[2]; - double fRec16[2]; - double fRec15[2]; - double fRec14[2]; - FAUSTFLOAT fbargraph4; - double fRec21[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; - FAUSTFLOAT fbargraph5; - double fRec0[2]; - FAUSTFLOAT fbargraph6; - double fRec22[2]; - FAUSTFLOAT fbargraph7; - double fRec26[2]; - double fRec25[2]; - double fRec24[2]; - FAUSTFLOAT fbargraph8; - double fRec30[2]; - double fRec29[2]; - double fRec28[2]; - double fRec27[2]; - FAUSTFLOAT fbargraph9; - double fRec23[2]; - FAUSTFLOAT fbargraph10; - double fRec31[2]; - FAUSTFLOAT fbargraph11; - double fRec32[2]; - FAUSTFLOAT fbargraph12; - double fRec33[2]; - FAUSTFLOAT fbargraph13; - double fRec34[2]; - FAUSTFLOAT fbargraph14; - double fRec39[2]; - double fRec38[2]; - double fRec37[2]; - double fRec36[2]; - FAUSTFLOAT fbargraph15; - double fRec35[2]; - FAUSTFLOAT fbargraph16; - double fRec40[2]; - FAUSTFLOAT fbargraph17; - double fRec41[2]; - FAUSTFLOAT fbargraph18; - double fRec42[2]; - FAUSTFLOAT fbargraph19; - double fRec43[2]; - FAUSTFLOAT fbargraph20; - double fRec44[2]; - FAUSTFLOAT fbargraph21; - double fRec45[2]; - FAUSTFLOAT fbargraph22; - double fRec46[2]; - FAUSTFLOAT fbargraph23; - double fRec47[2]; - FAUSTFLOAT fbargraph24; - double fRec48[2]; - FAUSTFLOAT fbargraph25; - double fRec49[2]; - FAUSTFLOAT fbargraph26; - double fRec50[2]; - FAUSTFLOAT fbargraph27; - double fRec51[2]; - FAUSTFLOAT fbargraph28; - double fRec52[2]; - FAUSTFLOAT fbargraph29; - double fRec53[2]; - FAUSTFLOAT fbargraph30; - double fRec54[2]; - FAUSTFLOAT fbargraph31; - double fRec55[2]; - FAUSTFLOAT fbargraph32; - double fRec56[2]; - FAUSTFLOAT fbargraph33; - double fRec57[2]; - FAUSTFLOAT fbargraph34; - double fRec58[2]; - FAUSTFLOAT fbargraph35; - double fRec59[2]; - FAUSTFLOAT fbargraph36; - double fRec60[2]; - FAUSTFLOAT fbargraph37; - double fRec61[2]; - FAUSTFLOAT fbargraph38; - double fRec62[2]; - FAUSTFLOAT fbargraph39; - double fRec63[2]; - FAUSTFLOAT fbargraph40; - double fRec64[2]; - FAUSTFLOAT fbargraph41; - double fRec65[2]; - FAUSTFLOAT fbargraph42; - double fRec66[2]; - FAUSTFLOAT fbargraph43; - double fRec67[2]; - FAUSTFLOAT fbargraph44; - double fRec68[2]; - FAUSTFLOAT fbargraph45; - double fRec69[2]; - FAUSTFLOAT fbargraph46; - double fRec70[2]; - FAUSTFLOAT fbargraph47; - double fRec71[2]; - FAUSTFLOAT fbargraph48; - double fRec72[2]; - FAUSTFLOAT fbargraph49; - double fRec73[2]; - FAUSTFLOAT fbargraph50; - double fRec74[2]; - FAUSTFLOAT fbargraph51; - double fRec75[2]; - FAUSTFLOAT fbargraph52; - double fRec76[2]; - FAUSTFLOAT fbargraph53; - double fRec77[2]; - FAUSTFLOAT fbargraph54; - double fRec78[2]; - FAUSTFLOAT fbargraph55; - double fRec79[2]; - FAUSTFLOAT fbargraph56; - double fRec80[2]; - FAUSTFLOAT fbargraph57; - double fRec81[2]; - FAUSTFLOAT fbargraph58; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOADecLebedev502"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec12[2]; + double fRec13[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fVbargraph3; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fVbargraph4; + double fRec20[2]; + double fRec21[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph5; + double fRec0[2]; + FAUSTFLOAT fVbargraph6; + double fRec22[2]; + FAUSTFLOAT fVbargraph7; + double fRec26[2]; + double fRec25[2]; + double fRec24[2]; + FAUSTFLOAT fVbargraph8; + double fRec29[2]; + double fRec30[2]; + double fRec28[2]; + double fRec27[2]; + FAUSTFLOAT fVbargraph9; + double fRec23[2]; + FAUSTFLOAT fVbargraph10; + double fRec31[2]; + FAUSTFLOAT fVbargraph11; + double fRec32[2]; + FAUSTFLOAT fVbargraph12; + double fRec33[2]; + FAUSTFLOAT fVbargraph13; + double fRec34[2]; + FAUSTFLOAT fVbargraph14; + double fRec38[2]; + double fRec39[2]; + double fRec37[2]; + double fRec36[2]; + FAUSTFLOAT fVbargraph15; + double fRec35[2]; + FAUSTFLOAT fVbargraph16; + double fRec40[2]; + FAUSTFLOAT fVbargraph17; + double fRec41[2]; + FAUSTFLOAT fVbargraph18; + double fRec42[2]; + FAUSTFLOAT fVbargraph19; + double fRec43[2]; + FAUSTFLOAT fVbargraph20; + double fRec44[2]; + FAUSTFLOAT fVbargraph21; + double fRec45[2]; + FAUSTFLOAT fVbargraph22; + double fRec46[2]; + FAUSTFLOAT fVbargraph23; + double fRec47[2]; + FAUSTFLOAT fVbargraph24; + double fRec48[2]; + FAUSTFLOAT fVbargraph25; + double fRec49[2]; + FAUSTFLOAT fVbargraph26; + double fRec50[2]; + FAUSTFLOAT fVbargraph27; + double fRec51[2]; + FAUSTFLOAT fVbargraph28; + double fRec52[2]; + FAUSTFLOAT fVbargraph29; + double fRec53[2]; + FAUSTFLOAT fVbargraph30; + double fRec54[2]; + FAUSTFLOAT fVbargraph31; + double fRec55[2]; + FAUSTFLOAT fVbargraph32; + double fRec56[2]; + FAUSTFLOAT fVbargraph33; + double fRec57[2]; + FAUSTFLOAT fVbargraph34; + double fRec58[2]; + FAUSTFLOAT fVbargraph35; + double fRec59[2]; + FAUSTFLOAT fVbargraph36; + double fRec60[2]; + FAUSTFLOAT fVbargraph37; + double fRec61[2]; + FAUSTFLOAT fVbargraph38; + double fRec62[2]; + FAUSTFLOAT fVbargraph39; + double fRec63[2]; + FAUSTFLOAT fVbargraph40; + double fRec64[2]; + FAUSTFLOAT fVbargraph41; + double fRec65[2]; + FAUSTFLOAT fVbargraph42; + double fRec66[2]; + FAUSTFLOAT fVbargraph43; + double fRec67[2]; + FAUSTFLOAT fVbargraph44; + double fRec68[2]; + FAUSTFLOAT fVbargraph45; + double fRec69[2]; + FAUSTFLOAT fVbargraph46; + double fRec70[2]; + FAUSTFLOAT fVbargraph47; + double fRec71[2]; + FAUSTFLOAT fVbargraph48; + double fRec72[2]; + FAUSTFLOAT fVbargraph49; + double fRec73[2]; + FAUSTFLOAT fVbargraph50; + double fRec74[2]; + FAUSTFLOAT fVbargraph51; + double fRec75[2]; + FAUSTFLOAT fVbargraph52; + double fRec76[2]; + FAUSTFLOAT fVbargraph53; + double fRec77[2]; + FAUSTFLOAT fVbargraph54; + double fRec78[2]; + FAUSTFLOAT fVbargraph55; + double fRec79[2]; + FAUSTFLOAT fVbargraph56; + double fRec80[2]; + FAUSTFLOAT fVbargraph57; + double fRec81[2]; + FAUSTFLOAT fVbargraph58; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOADecLebedev502"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 50; } + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (3.4e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec6[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec7[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec13[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec10[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec16[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec17[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec14[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec20[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec21[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec18[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec0[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec22[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec26[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec29[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec30[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec27[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec23[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec33[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec38[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec39[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec36[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec35[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec43[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec44[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec45[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec46[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec47[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec48[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec49[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec50[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec51[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec52[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec53[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec54[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec55[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec56[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec57[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec58[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec59[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec60[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec61[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec62[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec63[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec64[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec65[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec66[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec67[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec68[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec69[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec70[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec71[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec72[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec73[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec74[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec75[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec76[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec77[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec78[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec79[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec80[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec81[l81] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -885,875 +1444,882 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOADecLebedev502"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61690b0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35b4ab0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae617e460", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3603730", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae616c200", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35bffb0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae616eab0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35c9950", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae6181290", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x360ec60", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae618dc00", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3638320", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae6172a00", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35d81f0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae6175a50", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35e3880", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae6178b10", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35eef10", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph6, "osc", "/output1"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae617a240", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "osc", "/output1"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35f3f90", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph7, "osc", "/output2"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae617bc60", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "osc", "/output2"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35fa240", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph10, "osc", "/output3"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61829a0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "osc", "/output3"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3613cd0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph11, "osc", "/output4"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61847c0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "osc", "/output4"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3619a50", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph12, "osc", "/output5"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61864f0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "osc", "/output5"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x361f8b0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph13, "osc", "/output6"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae6187fa0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "osc", "/output6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3625070", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph14, "osc", "/output7"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae618a4e0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "osc", "/output7"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x362cdc0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph16, "osc", "/output8"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae618f7e0", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output8"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x363f170", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph17, "osc", "/output9"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae6191cf0", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output9"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3646300", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph18, "osc", "/output10"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61941c0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "osc", "/output10"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x364d340", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph19, "osc", "/output11"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61963e0", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output11"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36542d0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph20, "osc", "/output12"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae6198380", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "osc", "/output12"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x365a570", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph21, "osc", "/output13"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae619a2f0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "osc", "/output13"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36608e0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph22, "osc", "/output14"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae619c310", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "osc", "/output14"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36670e0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph23, "osc", "/output15"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae619df90", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output15"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x366d080", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph24, "osc", "/output16"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61a0230", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "osc", "/output16"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3673880", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph25, "osc", "/output17"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61a2320", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output17"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x367a370", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph26, "osc", "/output18"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61a45f0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output18"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3680b50", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph27, "osc", "/output19"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61a79a0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "osc", "/output19"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x368a600", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph28, "osc", "/output20"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61aa2f0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output20"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3692520", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph29, "osc", "/output21"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61ac860", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output21"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3699740", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph30, "osc", "/output22"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61af020", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "osc", "/output22"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a19b0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph31, "osc", "/output23"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61b1540", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "osc", "/output23"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a8bf0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph32, "osc", "/output24"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61b36e0", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "osc", "/output24"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36af910", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph33, "osc", "/output25"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61b5ce0", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "osc", "/output25"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36b68f0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph34, "osc", "/output26"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61b8480", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "osc", "/output26"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36bd7d0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph35, "osc", "/output27"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61bac00", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "osc", "/output27"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36c61b0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph36, "osc", "/output28"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61bce00", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "osc", "/output28"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36cc910", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph37, "osc", "/output29"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61befd0", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "osc", "/output29"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36d3cd0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph38, "osc", "/output30"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61c1320", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "osc", "/output30"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36db350", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph39, "osc", "/output31"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61c40c0", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "osc", "/output31"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36e4380", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph40, "osc", "/output32"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61c6970", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "osc", "/output32"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36ec350", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph41, "osc", "/output33"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61c8f70", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "osc", "/output33"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36f3e40", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph42, "osc", "/output34"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61cb300", &fbargraph42, -7e+01, 6.0); + ui_interface->declare(&fVbargraph42, "osc", "/output34"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36fb830", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph43, "osc", "/output35"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61cdd10", &fbargraph43, -7e+01, 6.0); + ui_interface->declare(&fVbargraph43, "osc", "/output35"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3703300", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph44, "osc", "/output36"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61d0490", &fbargraph44, -7e+01, 6.0); + ui_interface->declare(&fVbargraph44, "osc", "/output36"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x370aca0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph45, "osc", "/output37"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61d2d20", &fbargraph45, -7e+01, 6.0); + ui_interface->declare(&fVbargraph45, "osc", "/output37"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3712550", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph46, "osc", "/output38"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61d5850", &fbargraph46, -7e+01, 6.0); + ui_interface->declare(&fVbargraph46, "osc", "/output38"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x371ac30", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph47, "osc", "/output39"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae61d7900", &fbargraph47, -7e+01, 6.0); + ui_interface->declare(&fVbargraph47, "osc", "/output39"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3721560", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph48, "osc", "/output40"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae7d47fe0", &fbargraph48, -7e+01, 6.0); + ui_interface->declare(&fVbargraph48, "osc", "/output40"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3727b80", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph49, "osc", "/output41"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae7d4a2e0", &fbargraph49, -7e+01, 6.0); + ui_interface->declare(&fVbargraph49, "osc", "/output41"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x372e460", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph50, "osc", "/output42"); - ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae7d4c460", &fbargraph50, -7e+01, 6.0); + ui_interface->declare(&fVbargraph50, "osc", "/output42"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3735030", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph51, "osc", "/output43"); - ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae7d4e7f0", &fbargraph51, -7e+01, 6.0); + ui_interface->declare(&fVbargraph51, "osc", "/output43"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x373b710", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph52, "osc", "/output44"); - ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae7d50bd0", &fbargraph52, -7e+01, 6.0); + ui_interface->declare(&fVbargraph52, "osc", "/output44"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3742290", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph53, "osc", "/output45"); - ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae7d530e0", &fbargraph53, -7e+01, 6.0); + ui_interface->declare(&fVbargraph53, "osc", "/output45"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3748d10", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph54, "osc", "/output46"); - ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae779d430", &fbargraph54, -7e+01, 6.0); + ui_interface->declare(&fVbargraph54, "osc", "/output46"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x374f870", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph55, "osc", "/output47"); - ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae779f590", &fbargraph55, -7e+01, 6.0); + ui_interface->declare(&fVbargraph55, "osc", "/output47"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37564e0", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph56, "osc", "/output48"); - ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae77a1ba0", &fbargraph56, -7e+01, 6.0); + ui_interface->declare(&fVbargraph56, "osc", "/output48"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x375ce40", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph57, "osc", "/output49"); - ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae77a41b0", &fbargraph57, -7e+01, 6.0); + ui_interface->declare(&fVbargraph57, "osc", "/output49"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3763c40", &fVbargraph57, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph58, "osc", "/output50"); - ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcae77a6780", &fbargraph58, -7e+01, 6.0); + ui_interface->declare(&fVbargraph58, "osc", "/output50"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x376ad00", &fVbargraph58, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - fSlow1); - double fSlow3 = double(fentry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (fSlow2 + fSlow4); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = (fConst2 / fSlow3); - double fSlow8 = (1.0 / (fSlow7 + 1)); - double fSlow9 = (fConst3 / fSlow3); - double fSlow10 = faustpower<2>(fSlow7); - double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); - double fSlow12 = (12 * fSlow10); - double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev503" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,406 +601,1093 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - double fConst2; - FAUSTFLOAT fentry0; - double fConst3; - double fConst4; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fslider0; - double fRec4[2]; - double fRec6[2]; - double fRec5[2]; - double fConst5; - double fRec3[2]; - double fConst6; - double fRec7[2]; - double fRec2[2]; - double fRec1[2]; - FAUSTFLOAT fbargraph0; - double fRec12[2]; - double fRec11[2]; - double fRec10[2]; - double fRec13[2]; - double fRec9[2]; - double fRec8[2]; - FAUSTFLOAT fbargraph1; - double fRec18[2]; - double fRec17[2]; - double fRec16[2]; - double fRec19[2]; - double fRec15[2]; - double fRec14[2]; - FAUSTFLOAT fbargraph2; - double fRec20[2]; - FAUSTFLOAT fbargraph3; - double fConst7; - double fRec23[2]; - double fRec22[2]; - double fRec21[2]; - FAUSTFLOAT fbargraph4; - double fRec26[2]; - double fRec25[2]; - double fRec24[2]; - FAUSTFLOAT fbargraph5; - double fConst8; - double fRec30[2]; - double fRec29[2]; - double fConst9; - double fRec28[2]; - double fRec27[2]; - FAUSTFLOAT fbargraph6; - double fRec34[2]; - double fRec33[2]; - double fRec32[2]; - double fRec31[2]; - FAUSTFLOAT fbargraph7; - double fRec38[2]; - double fRec37[2]; - double fRec36[2]; - double fRec35[2]; - FAUSTFLOAT fbargraph8; - double fRec43[2]; - double fRec42[2]; - double fRec41[2]; - double fRec44[2]; - double fRec40[2]; - double fRec39[2]; - FAUSTFLOAT fbargraph9; - FAUSTFLOAT fslider1; - double fRec45[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph10; - double fRec46[2]; - FAUSTFLOAT fbargraph11; - double fRec50[2]; - double fRec49[2]; - double fRec48[2]; - FAUSTFLOAT fbargraph12; - double fRec54[2]; - double fRec53[2]; - double fRec52[2]; - double fRec51[2]; - FAUSTFLOAT fbargraph13; - double fRec59[2]; - double fRec58[2]; - double fRec57[2]; - double fRec60[2]; - double fRec56[2]; - double fRec55[2]; - FAUSTFLOAT fbargraph14; - double fRec65[2]; - double fRec64[2]; - double fRec63[2]; - double fRec66[2]; - double fRec62[2]; - double fRec61[2]; - FAUSTFLOAT fbargraph15; - double fRec47[2]; - FAUSTFLOAT fbargraph16; - double fRec67[2]; - FAUSTFLOAT fbargraph17; - double fRec68[2]; - FAUSTFLOAT fbargraph18; - double fRec69[2]; - FAUSTFLOAT fbargraph19; - double fRec70[2]; - FAUSTFLOAT fbargraph20; - double fRec76[2]; - double fRec75[2]; - double fRec74[2]; - double fRec77[2]; - double fRec73[2]; - double fRec72[2]; - FAUSTFLOAT fbargraph21; - double fRec81[2]; - double fRec80[2]; - double fRec79[2]; - double fRec78[2]; - FAUSTFLOAT fbargraph22; - double fRec71[2]; - FAUSTFLOAT fbargraph23; - double fRec82[2]; - FAUSTFLOAT fbargraph24; - double fRec83[2]; - FAUSTFLOAT fbargraph25; - double fRec84[2]; - FAUSTFLOAT fbargraph26; - double fRec85[2]; - FAUSTFLOAT fbargraph27; - double fRec86[2]; - FAUSTFLOAT fbargraph28; - double fRec87[2]; - FAUSTFLOAT fbargraph29; - double fRec88[2]; - FAUSTFLOAT fbargraph30; - double fRec89[2]; - FAUSTFLOAT fbargraph31; - double fRec90[2]; - FAUSTFLOAT fbargraph32; - double fRec91[2]; - FAUSTFLOAT fbargraph33; - double fRec92[2]; - FAUSTFLOAT fbargraph34; - double fRec93[2]; - FAUSTFLOAT fbargraph35; - double fRec94[2]; - FAUSTFLOAT fbargraph36; - double fRec95[2]; - FAUSTFLOAT fbargraph37; - double fRec96[2]; - FAUSTFLOAT fbargraph38; - double fRec97[2]; - FAUSTFLOAT fbargraph39; - double fRec98[2]; - FAUSTFLOAT fbargraph40; - double fRec99[2]; - FAUSTFLOAT fbargraph41; - double fRec100[2]; - FAUSTFLOAT fbargraph42; - double fRec101[2]; - FAUSTFLOAT fbargraph43; - double fRec102[2]; - FAUSTFLOAT fbargraph44; - double fRec103[2]; - FAUSTFLOAT fbargraph45; - double fRec104[2]; - FAUSTFLOAT fbargraph46; - double fRec105[2]; - FAUSTFLOAT fbargraph47; - double fRec106[2]; - FAUSTFLOAT fbargraph48; - double fRec107[2]; - FAUSTFLOAT fbargraph49; - double fRec108[2]; - FAUSTFLOAT fbargraph50; - double fRec109[2]; - FAUSTFLOAT fbargraph51; - double fRec110[2]; - FAUSTFLOAT fbargraph52; - double fRec111[2]; - FAUSTFLOAT fbargraph53; - double fRec112[2]; - FAUSTFLOAT fbargraph54; - double fRec113[2]; - FAUSTFLOAT fbargraph55; - double fRec114[2]; - FAUSTFLOAT fbargraph56; - double fRec115[2]; - FAUSTFLOAT fbargraph57; - double fRec116[2]; - FAUSTFLOAT fbargraph58; - double fRec117[2]; - FAUSTFLOAT fbargraph59; - double fRec118[2]; - FAUSTFLOAT fbargraph60; - double fRec119[2]; - FAUSTFLOAT fbargraph61; - double fRec120[2]; - FAUSTFLOAT fbargraph62; - double fRec121[2]; - FAUSTFLOAT fbargraph63; - double fRec122[2]; - FAUSTFLOAT fbargraph64; - double fRec123[2]; - FAUSTFLOAT fbargraph65; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOADecLebedev503"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec12[2]; + double fRec13[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fVbargraph3; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fVbargraph4; + double fRec20[2]; + double fRec21[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph5; + double fConst6; + double fConst7; + double fConst8; + double fRec25[2]; + double fRec26[2]; + double fRec24[2]; + double fConst9; + double fRec27[2]; + double fRec23[2]; + double fRec22[2]; + FAUSTFLOAT fVbargraph6; + double fRec31[2]; + double fRec32[2]; + double fRec30[2]; + double fRec33[2]; + double fRec29[2]; + double fRec28[2]; + FAUSTFLOAT fVbargraph7; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fRec35[2]; + double fRec34[2]; + FAUSTFLOAT fVbargraph8; + double fRec43[2]; + double fRec44[2]; + double fRec42[2]; + double fRec45[2]; + double fRec41[2]; + double fRec40[2]; + FAUSTFLOAT fVbargraph9; + double fRec0[2]; + FAUSTFLOAT fVbargraph10; + double fRec46[2]; + FAUSTFLOAT fVbargraph11; + double fRec50[2]; + double fRec49[2]; + double fRec48[2]; + FAUSTFLOAT fVbargraph12; + double fRec53[2]; + double fRec54[2]; + double fRec52[2]; + double fRec51[2]; + FAUSTFLOAT fVbargraph13; + double fRec58[2]; + double fRec59[2]; + double fRec57[2]; + double fRec60[2]; + double fRec56[2]; + double fRec55[2]; + FAUSTFLOAT fVbargraph14; + double fRec64[2]; + double fRec65[2]; + double fRec63[2]; + double fRec66[2]; + double fRec62[2]; + double fRec61[2]; + FAUSTFLOAT fVbargraph15; + double fRec47[2]; + FAUSTFLOAT fVbargraph16; + double fRec67[2]; + FAUSTFLOAT fVbargraph17; + double fRec68[2]; + FAUSTFLOAT fVbargraph18; + double fRec69[2]; + FAUSTFLOAT fVbargraph19; + double fRec70[2]; + FAUSTFLOAT fVbargraph20; + double fRec74[2]; + double fRec75[2]; + double fRec73[2]; + double fRec72[2]; + FAUSTFLOAT fVbargraph21; + double fRec79[2]; + double fRec80[2]; + double fRec78[2]; + double fRec81[2]; + double fRec77[2]; + double fRec76[2]; + FAUSTFLOAT fVbargraph22; + double fRec71[2]; + FAUSTFLOAT fVbargraph23; + double fRec82[2]; + FAUSTFLOAT fVbargraph24; + double fRec83[2]; + FAUSTFLOAT fVbargraph25; + double fRec84[2]; + FAUSTFLOAT fVbargraph26; + double fRec85[2]; + FAUSTFLOAT fVbargraph27; + double fRec86[2]; + FAUSTFLOAT fVbargraph28; + double fRec87[2]; + FAUSTFLOAT fVbargraph29; + double fRec88[2]; + FAUSTFLOAT fVbargraph30; + double fRec89[2]; + FAUSTFLOAT fVbargraph31; + double fRec90[2]; + FAUSTFLOAT fVbargraph32; + double fRec91[2]; + FAUSTFLOAT fVbargraph33; + double fRec92[2]; + FAUSTFLOAT fVbargraph34; + double fRec93[2]; + FAUSTFLOAT fVbargraph35; + double fRec94[2]; + FAUSTFLOAT fVbargraph36; + double fRec95[2]; + FAUSTFLOAT fVbargraph37; + double fRec96[2]; + FAUSTFLOAT fVbargraph38; + double fRec97[2]; + FAUSTFLOAT fVbargraph39; + double fRec98[2]; + FAUSTFLOAT fVbargraph40; + double fRec99[2]; + FAUSTFLOAT fVbargraph41; + double fRec100[2]; + FAUSTFLOAT fVbargraph42; + double fRec101[2]; + FAUSTFLOAT fVbargraph43; + double fRec102[2]; + FAUSTFLOAT fVbargraph44; + double fRec103[2]; + FAUSTFLOAT fVbargraph45; + double fRec104[2]; + FAUSTFLOAT fVbargraph46; + double fRec105[2]; + FAUSTFLOAT fVbargraph47; + double fRec106[2]; + FAUSTFLOAT fVbargraph48; + double fRec107[2]; + FAUSTFLOAT fVbargraph49; + double fRec108[2]; + FAUSTFLOAT fVbargraph50; + double fRec109[2]; + FAUSTFLOAT fVbargraph51; + double fRec110[2]; + FAUSTFLOAT fVbargraph52; + double fRec111[2]; + FAUSTFLOAT fVbargraph53; + double fRec112[2]; + FAUSTFLOAT fVbargraph54; + double fRec113[2]; + FAUSTFLOAT fVbargraph55; + double fRec114[2]; + FAUSTFLOAT fVbargraph56; + double fRec115[2]; + FAUSTFLOAT fVbargraph57; + double fRec116[2]; + FAUSTFLOAT fVbargraph58; + double fRec117[2]; + FAUSTFLOAT fVbargraph59; + double fRec118[2]; + FAUSTFLOAT fVbargraph60; + double fRec119[2]; + FAUSTFLOAT fVbargraph61; + double fRec120[2]; + FAUSTFLOAT fVbargraph62; + double fRec121[2]; + FAUSTFLOAT fVbargraph63; + double fRec122[2]; + FAUSTFLOAT fVbargraph64; + double fRec123[2]; + FAUSTFLOAT fVbargraph65; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOADecLebedev503"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 50; } + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (394.7715102864353 / fConst0); - fConst3 = (625.2284897135664 / fConst0); - fConst4 = (1.7e+02 / fConst0); - fConst5 = (1250.4569794271329 / fConst0); - fConst6 = (789.5430205728705 / fConst0); - fConst7 = (3.4e+02 / fConst0); - fConst8 = (5.1e+02 / fConst0); - fConst9 = (1.02e+03 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + fConst6 = (394.77151028643527 / fConst0); + fConst7 = (625.22848971356643 / fConst0); + fConst8 = (1250.4569794271329 / fConst0); + fConst9 = (789.54302057287055 / fConst0); + } + virtual void instanceResetUserInterface() { - fentry0 = 1.07; - fcheckbox0 = 0.0; - fslider0 = 0.0; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec88[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec91[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<2; i++) fRec93[i] = 0; - for (int i=0; i<2; i++) fRec94[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<2; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec98[i] = 0; - for (int i=0; i<2; i++) fRec99[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; - for (int i=0; i<2; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec104[i] = 0; - for (int i=0; i<2; i++) fRec105[i] = 0; - for (int i=0; i<2; i++) fRec106[i] = 0; - for (int i=0; i<2; i++) fRec107[i] = 0; - for (int i=0; i<2; i++) fRec108[i] = 0; - for (int i=0; i<2; i++) fRec109[i] = 0; - for (int i=0; i<2; i++) fRec110[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; - for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec113[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; - for (int i=0; i<2; i++) fRec115[i] = 0; - for (int i=0; i<2; i++) fRec116[i] = 0; - for (int i=0; i<2; i++) fRec117[i] = 0; - for (int i=0; i<2; i++) fRec118[i] = 0; - for (int i=0; i<2; i++) fRec119[i] = 0; - for (int i=0; i<2; i++) fRec120[i] = 0; - for (int i=0; i<2; i++) fRec121[i] = 0; - for (int i=0; i<2; i++) fRec122[i] = 0; - for (int i=0; i<2; i++) fRec123[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec6[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec7[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec13[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec10[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec16[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec17[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec14[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec20[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec21[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec18[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec25[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec26[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec27[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec23[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec22[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec31[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec32[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec30[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec33[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec29[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec28[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec37[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec38[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec36[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec39[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec35[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec34[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec43[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec44[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec42[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec45[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec41[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec40[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec0[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec46[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec50[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec53[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec54[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec52[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec51[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec58[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec59[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec60[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec56[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec55[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec64[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec65[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec63[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec66[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec62[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec61[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec47[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec67[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec68[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec69[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec70[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec74[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec75[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec73[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec72[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec79[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec80[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec78[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec81[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec77[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec76[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec71[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec82[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec83[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec84[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec85[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec86[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec87[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec88[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec89[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec90[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec91[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec92[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec93[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec94[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec95[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec96[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec97[l97] = 0.0; + + } + for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + fRec98[l98] = 0.0; + + } + for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + fRec99[l99] = 0.0; + + } + for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + fRec100[l100] = 0.0; + + } + for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + fRec101[l101] = 0.0; + + } + for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + fRec102[l102] = 0.0; + + } + for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + fRec103[l103] = 0.0; + + } + for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + fRec104[l104] = 0.0; + + } + for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + fRec105[l105] = 0.0; + + } + for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + fRec106[l106] = 0.0; + + } + for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + fRec107[l107] = 0.0; + + } + for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + fRec108[l108] = 0.0; + + } + for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + fRec109[l109] = 0.0; + + } + for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { + fRec110[l110] = 0.0; + + } + for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + fRec111[l111] = 0.0; + + } + for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + fRec112[l112] = 0.0; + + } + for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + fRec113[l113] = 0.0; + + } + for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + fRec114[l114] = 0.0; + + } + for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { + fRec115[l115] = 0.0; + + } + for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + fRec116[l116] = 0.0; + + } + for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + fRec117[l117] = 0.0; + + } + for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + fRec118[l118] = 0.0; + + } + for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + fRec119[l119] = 0.0; + + } + for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { + fRec120[l120] = 0.0; + + } + for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { + fRec121[l121] = 0.0; + + } + for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { + fRec122[l122] = 0.0; + + } + for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { + fRec123[l123] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -984,1131 +1697,1137 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOADecLebedev503"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("B-Format"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5761c20", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39b2f00", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc577bcd0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a41ca0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5764a80", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39be400", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5767450", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c7da0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc577ea70", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a4d1d0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57990b0", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a98a90", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc576b200", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d6640", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc576e270", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e1cd0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5771350", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ed360", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5782740", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a5b800", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57960f0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa71e0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5786150", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a69f40", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5774fd0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39fff30", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5758a70", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a0eb00", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc575c400", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a1d6d0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc575fe60", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a2c380", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider1, "2", ""); - ui_interface->declare(&fslider1, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); ui_interface->declare(0, "3", ""); ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph10, "osc", "/output1"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5777490", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "osc", "/output1"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a315c0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph11, "osc", "/output2"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57793b0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "osc", "/output2"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a387b0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph16, "osc", "/output3"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5787fc0", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output3"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a70080", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph17, "osc", "/output4"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc578a490", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output4"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a76ce0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph18, "osc", "/output5"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc578cc00", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "osc", "/output5"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a7da20", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph19, "osc", "/output6"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc578ea40", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output6"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a83960", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph20, "osc", "/output7"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc5791b10", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "osc", "/output7"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a8d530", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph23, "osc", "/output8"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc579b660", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output8"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab0350", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph24, "osc", "/output9"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc579e750", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "osc", "/output9"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab9340", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph25, "osc", "/output10"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57a18f0", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output10"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ac2020", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph26, "osc", "/output11"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57a42b0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output11"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aca4a0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph27, "osc", "/output12"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57a6ce0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "osc", "/output12"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ad1a30", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph28, "osc", "/output13"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57a9370", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output13"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ad8ac0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph29, "osc", "/output14"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57aba50", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3adfff0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph30, "osc", "/output15"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57adaf0", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "osc", "/output15"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ae6550", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph31, "osc", "/output16"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57b04d0", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "osc", "/output16"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aed8b0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph32, "osc", "/output17"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57b2bd0", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "osc", "/output17"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3af50c0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph33, "osc", "/output18"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57b5880", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "osc", "/output18"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3afc5c0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph34, "osc", "/output19"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57b9e70", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "osc", "/output19"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b095d0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph35, "osc", "/output20"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57bd8a0", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "osc", "/output20"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b13960", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph36, "osc", "/output21"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57c0df0", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "osc", "/output21"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b1cfa0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph37, "osc", "/output22"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57c42e0", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "osc", "/output22"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b26cd0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph38, "osc", "/output23"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57c7110", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "osc", "/output23"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b2ec30", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph39, "osc", "/output24"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57c9dc0", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "osc", "/output24"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b36670", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph40, "osc", "/output25"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57ccbb0", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "osc", "/output25"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b3e370", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph41, "osc", "/output26"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57cfa40", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "osc", "/output26"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b45f70", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph42, "osc", "/output27"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57d36c0", &fbargraph42, -7e+01, 6.0); + ui_interface->declare(&fVbargraph42, "osc", "/output27"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b520c0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph43, "osc", "/output28"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57d62c0", &fbargraph43, -7e+01, 6.0); + ui_interface->declare(&fVbargraph43, "osc", "/output28"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b59ee0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph44, "osc", "/output29"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57d9ac0", &fbargraph44, -7e+01, 6.0); + ui_interface->declare(&fVbargraph44, "osc", "/output29"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b63ab0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph45, "osc", "/output30"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57dca80", &fbargraph45, -7e+01, 6.0); + ui_interface->declare(&fVbargraph45, "osc", "/output30"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b6d5a0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph46, "osc", "/output31"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57e0eb0", &fbargraph46, -7e+01, 6.0); + ui_interface->declare(&fVbargraph46, "osc", "/output31"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b79d40", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph47, "osc", "/output32"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57e4810", &fbargraph47, -7e+01, 6.0); + ui_interface->declare(&fVbargraph47, "osc", "/output32"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b84ae0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph48, "osc", "/output33"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57e7fa0", &fbargraph48, -7e+01, 6.0); + ui_interface->declare(&fVbargraph48, "osc", "/output33"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b8efb0", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph49, "osc", "/output34"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57eb3d0", &fbargraph49, -7e+01, 6.0); + ui_interface->declare(&fVbargraph49, "osc", "/output34"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b98dc0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph50, "osc", "/output35"); - ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57eeb80", &fbargraph50, -7e+01, 6.0); + ui_interface->declare(&fVbargraph50, "osc", "/output35"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ba3270", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph51, "osc", "/output36"); - ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57f2470", &fbargraph51, -7e+01, 6.0); + ui_interface->declare(&fVbargraph51, "osc", "/output36"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bad030", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph52, "osc", "/output37"); - ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57f5e60", &fbargraph52, -7e+01, 6.0); + ui_interface->declare(&fVbargraph52, "osc", "/output37"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bb72c0", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph53, "osc", "/output38"); - ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc57f9d50", &fbargraph53, -7e+01, 6.0); + ui_interface->declare(&fVbargraph53, "osc", "/output38"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bc2760", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph54, "osc", "/output39"); - ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc60008b0", &fbargraph54, -7e+01, 6.0); + ui_interface->declare(&fVbargraph54, "osc", "/output39"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bc9db0", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph55, "osc", "/output40"); - ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc60032c0", &fbargraph55, -7e+01, 6.0); + ui_interface->declare(&fVbargraph55, "osc", "/output40"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bd10f0", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph56, "osc", "/output41"); - ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc6005e60", &fbargraph56, -7e+01, 6.0); + ui_interface->declare(&fVbargraph56, "osc", "/output41"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bd86f0", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph57, "osc", "/output42"); - ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc6008960", &fbargraph57, -7e+01, 6.0); + ui_interface->declare(&fVbargraph57, "osc", "/output42"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bdffe0", &fVbargraph57, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph58, "osc", "/output43"); - ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc600b4f0", &fbargraph58, -7e+01, 6.0); + ui_interface->declare(&fVbargraph58, "osc", "/output43"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3be73e0", &fVbargraph58, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph59, "osc", "/output44"); - ui_interface->declare(&fbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc600e130", &fbargraph59, -7e+01, 6.0); + ui_interface->declare(&fVbargraph59, "osc", "/output44"); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3beec80", &fVbargraph59, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph60, "osc", "/output45"); - ui_interface->declare(&fbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc6010d90", &fbargraph60, -7e+01, 6.0); + ui_interface->declare(&fVbargraph60, "osc", "/output45"); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bf6420", &fVbargraph60, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph61, "osc", "/output46"); - ui_interface->declare(&fbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc60138b0", &fbargraph61, -7e+01, 6.0); + ui_interface->declare(&fVbargraph61, "osc", "/output46"); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bfdca0", &fVbargraph61, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph62, "osc", "/output47"); - ui_interface->declare(&fbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc21024e0", &fbargraph62, -7e+01, 6.0); + ui_interface->declare(&fVbargraph62, "osc", "/output47"); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c05630", &fVbargraph62, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph63, "osc", "/output48"); - ui_interface->declare(&fbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc6017a30", &fbargraph63, -7e+01, 6.0); + ui_interface->declare(&fVbargraph63, "osc", "/output48"); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c0ccb0", &fVbargraph63, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph64, "osc", "/output49"); - ui_interface->declare(&fbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc601a800", &fbargraph64, -7e+01, 6.0); + ui_interface->declare(&fVbargraph64, "osc", "/output49"); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c147d0", &fVbargraph64, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph65, "osc", "/output50"); - ui_interface->declare(&fbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f7fc601d6b0", &fbargraph65, -7e+01, 6.0); + ui_interface->declare(&fVbargraph65, "osc", "/output50"); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c1c5b0", &fVbargraph65, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fentry0); - double fSlow1 = (1.0 / ((fConst2 / fSlow0) + 1)); - double fSlow2 = (fConst4 / fSlow0); - double fSlow3 = faustpower<2>(fSlow2); - double fSlow4 = (1.0 / (((fConst3 / fSlow0) + (6.45943269348338 * fSlow3)) + 1)); - double fSlow5 = double(fcheckbox0); - double fSlow6 = (fSlow5 * fSlow0); - double fSlow7 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow8 = (25.83773077393352 * fSlow3); - double fSlow9 = (fSlow8 + (fConst5 / fSlow0)); - double fSlow10 = (fConst6 / fSlow0); - double fSlow11 = (1 - fSlow5); - double fSlow12 = (fSlow11 + fSlow6); - double fSlow13 = (1.0 / (fSlow2 + 1)); - double fSlow14 = (fConst7 / fSlow0); - double fSlow15 = (1.0 / (((fConst8 / fSlow0) + (3 * fSlow3)) + 1)); - double fSlow16 = (12 * fSlow3); - double fSlow17 = (fSlow16 + (fConst9 / fSlow0)); - double fSlow18 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev504" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,2039 +601,2941 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fConst2; - double fConst3; - double fRec6[2]; - double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec9[2]; - double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fbargraph2; - double fConst4; - double fRec13[2]; - double fRec12[2]; - double fConst5; - double fRec11[2]; - double fRec10[2]; - FAUSTFLOAT fbargraph3; - double fRec17[2]; - double fRec16[2]; - double fRec15[2]; - double fRec14[2]; - FAUSTFLOAT fbargraph4; - double fRec21[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; - FAUSTFLOAT fbargraph5; - double fConst6; - double fConst7; - double fRec26[2]; - double fRec25[2]; - double fConst8; - double fRec24[2]; - double fConst9; - double fRec27[2]; - double fRec23[2]; - double fRec22[2]; - FAUSTFLOAT fbargraph6; - double fRec32[2]; - double fRec31[2]; - double fRec30[2]; - double fRec33[2]; - double fRec29[2]; - double fRec28[2]; - FAUSTFLOAT fbargraph7; - double fRec38[2]; - double fRec37[2]; - double fRec36[2]; - double fRec39[2]; - double fRec35[2]; - double fRec34[2]; - FAUSTFLOAT fbargraph8; - double fRec44[2]; - double fRec43[2]; - double fRec42[2]; - double fRec45[2]; - double fRec41[2]; - double fRec40[2]; - FAUSTFLOAT fbargraph9; - double fConst10; - double fConst11; - double fRec50[2]; - double fRec49[2]; - double fConst12; - double fRec48[2]; - double fRec52[2]; - double fRec51[2]; - double fConst13; - double fRec47[2]; - double fRec46[2]; - FAUSTFLOAT fbargraph10; - double fRec57[2]; - double fRec56[2]; - double fRec55[2]; - double fRec59[2]; - double fRec58[2]; - double fRec54[2]; - double fRec53[2]; - FAUSTFLOAT fbargraph11; - double fRec64[2]; - double fRec63[2]; - double fRec62[2]; - double fRec66[2]; - double fRec65[2]; - double fRec61[2]; - double fRec60[2]; - FAUSTFLOAT fbargraph12; - double fRec71[2]; - double fRec70[2]; - double fRec69[2]; - double fRec73[2]; - double fRec72[2]; - double fRec68[2]; - double fRec67[2]; - FAUSTFLOAT fbargraph13; - double fRec78[2]; - double fRec77[2]; - double fRec76[2]; - double fRec80[2]; - double fRec79[2]; - double fRec75[2]; - double fRec74[2]; - FAUSTFLOAT fbargraph14; - double fRec0[2]; - FAUSTFLOAT fbargraph15; - double fRec81[2]; - FAUSTFLOAT fbargraph16; - double fRec86[2]; - double fRec85[2]; - double fRec84[2]; - double fRec83[2]; - FAUSTFLOAT fbargraph17; - double fRec89[2]; - double fRec88[2]; - double fRec87[2]; - FAUSTFLOAT fbargraph18; - double fRec94[2]; - double fRec93[2]; - double fRec92[2]; - double fRec96[2]; - double fRec95[2]; - double fRec91[2]; - double fRec90[2]; - FAUSTFLOAT fbargraph19; - double fRec101[2]; - double fRec100[2]; - double fRec99[2]; - double fRec102[2]; - double fRec98[2]; - double fRec97[2]; - FAUSTFLOAT fbargraph20; - double fRec107[2]; - double fRec106[2]; - double fRec105[2]; - double fRec108[2]; - double fRec104[2]; - double fRec103[2]; - FAUSTFLOAT fbargraph21; - double fRec113[2]; - double fRec112[2]; - double fRec111[2]; - double fRec115[2]; - double fRec114[2]; - double fRec110[2]; - double fRec109[2]; - FAUSTFLOAT fbargraph22; - double fRec82[2]; - FAUSTFLOAT fbargraph23; - double fRec116[2]; - FAUSTFLOAT fbargraph24; - double fRec117[2]; - FAUSTFLOAT fbargraph25; - double fRec118[2]; - FAUSTFLOAT fbargraph26; - double fRec119[2]; - FAUSTFLOAT fbargraph27; - double fRec124[2]; - double fRec123[2]; - double fRec122[2]; - double fRec121[2]; - FAUSTFLOAT fbargraph28; - double fRec129[2]; - double fRec128[2]; - double fRec127[2]; - double fRec130[2]; - double fRec126[2]; - double fRec125[2]; - FAUSTFLOAT fbargraph29; - double fRec135[2]; - double fRec134[2]; - double fRec133[2]; - double fRec137[2]; - double fRec136[2]; - double fRec132[2]; - double fRec131[2]; - FAUSTFLOAT fbargraph30; - double fRec142[2]; - double fRec141[2]; - double fRec140[2]; - double fRec144[2]; - double fRec143[2]; - double fRec139[2]; - double fRec138[2]; - FAUSTFLOAT fbargraph31; - double fRec120[2]; - FAUSTFLOAT fbargraph32; - double fRec145[2]; - FAUSTFLOAT fbargraph33; - double fRec146[2]; - FAUSTFLOAT fbargraph34; - double fRec147[2]; - FAUSTFLOAT fbargraph35; - double fRec148[2]; - FAUSTFLOAT fbargraph36; - double fRec149[2]; - FAUSTFLOAT fbargraph37; - double fRec150[2]; - FAUSTFLOAT fbargraph38; - double fRec151[2]; - FAUSTFLOAT fbargraph39; - double fRec152[2]; - FAUSTFLOAT fbargraph40; - double fRec153[2]; - FAUSTFLOAT fbargraph41; - double fRec154[2]; - FAUSTFLOAT fbargraph42; - double fRec155[2]; - FAUSTFLOAT fbargraph43; - double fRec156[2]; - FAUSTFLOAT fbargraph44; - double fRec157[2]; - FAUSTFLOAT fbargraph45; - double fRec158[2]; - FAUSTFLOAT fbargraph46; - double fRec159[2]; - FAUSTFLOAT fbargraph47; - double fRec160[2]; - FAUSTFLOAT fbargraph48; - double fRec161[2]; - FAUSTFLOAT fbargraph49; - double fRec162[2]; - FAUSTFLOAT fbargraph50; - double fRec163[2]; - FAUSTFLOAT fbargraph51; - double fRec164[2]; - FAUSTFLOAT fbargraph52; - double fRec165[2]; - FAUSTFLOAT fbargraph53; - double fRec166[2]; - FAUSTFLOAT fbargraph54; - double fRec167[2]; - FAUSTFLOAT fbargraph55; - double fRec168[2]; - FAUSTFLOAT fbargraph56; - double fRec169[2]; - FAUSTFLOAT fbargraph57; - double fRec170[2]; - FAUSTFLOAT fbargraph58; - double fRec171[2]; - FAUSTFLOAT fbargraph59; - double fRec172[2]; - FAUSTFLOAT fbargraph60; - double fRec173[2]; - FAUSTFLOAT fbargraph61; - double fRec174[2]; - FAUSTFLOAT fbargraph62; - double fRec175[2]; - FAUSTFLOAT fbargraph63; - double fRec176[2]; - FAUSTFLOAT fbargraph64; - double fRec177[2]; - FAUSTFLOAT fbargraph65; - double fRec178[2]; - FAUSTFLOAT fbargraph66; - double fRec179[2]; - FAUSTFLOAT fbargraph67; - double fRec180[2]; - FAUSTFLOAT fbargraph68; - double fRec181[2]; - FAUSTFLOAT fbargraph69; - double fRec182[2]; - FAUSTFLOAT fbargraph70; - double fRec183[2]; - FAUSTFLOAT fbargraph71; - double fRec184[2]; - FAUSTFLOAT fbargraph72; - double fRec185[2]; - FAUSTFLOAT fbargraph73; - double fRec186[2]; - FAUSTFLOAT fbargraph74; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOADecLebedev504"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec12[2]; + double fRec13[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fVbargraph3; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fVbargraph4; + double fRec20[2]; + double fRec21[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph5; + double fConst6; + double fConst7; + double fConst8; + double fRec25[2]; + double fRec26[2]; + double fRec24[2]; + double fConst9; + double fRec27[2]; + double fRec23[2]; + double fRec22[2]; + FAUSTFLOAT fVbargraph6; + double fRec31[2]; + double fRec32[2]; + double fRec30[2]; + double fRec33[2]; + double fRec29[2]; + double fRec28[2]; + FAUSTFLOAT fVbargraph7; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fRec35[2]; + double fRec34[2]; + FAUSTFLOAT fVbargraph8; + double fRec43[2]; + double fRec44[2]; + double fRec42[2]; + double fRec45[2]; + double fRec41[2]; + double fRec40[2]; + FAUSTFLOAT fVbargraph9; + double fConst10; + double fConst11; + double fConst12; + double fRec49[2]; + double fRec50[2]; + double fRec48[2]; + double fConst13; + double fRec51[2]; + double fRec52[2]; + double fRec47[2]; + double fRec46[2]; + FAUSTFLOAT fVbargraph10; + double fRec56[2]; + double fRec57[2]; + double fRec55[2]; + double fRec58[2]; + double fRec59[2]; + double fRec54[2]; + double fRec53[2]; + FAUSTFLOAT fVbargraph11; + double fRec63[2]; + double fRec64[2]; + double fRec62[2]; + double fRec65[2]; + double fRec66[2]; + double fRec61[2]; + double fRec60[2]; + FAUSTFLOAT fVbargraph12; + double fRec70[2]; + double fRec71[2]; + double fRec69[2]; + double fRec72[2]; + double fRec73[2]; + double fRec68[2]; + double fRec67[2]; + FAUSTFLOAT fVbargraph13; + double fRec77[2]; + double fRec78[2]; + double fRec76[2]; + double fRec79[2]; + double fRec80[2]; + double fRec75[2]; + double fRec74[2]; + FAUSTFLOAT fVbargraph14; + double fRec0[2]; + FAUSTFLOAT fVbargraph15; + double fRec81[2]; + FAUSTFLOAT fVbargraph16; + double fRec85[2]; + double fRec86[2]; + double fRec84[2]; + double fRec83[2]; + FAUSTFLOAT fVbargraph17; + double fRec89[2]; + double fRec88[2]; + double fRec87[2]; + FAUSTFLOAT fVbargraph18; + double fRec93[2]; + double fRec94[2]; + double fRec92[2]; + double fRec95[2]; + double fRec96[2]; + double fRec91[2]; + double fRec90[2]; + FAUSTFLOAT fVbargraph19; + double fRec100[2]; + double fRec101[2]; + double fRec99[2]; + double fRec102[2]; + double fRec98[2]; + double fRec97[2]; + FAUSTFLOAT fVbargraph20; + double fRec106[2]; + double fRec107[2]; + double fRec105[2]; + double fRec108[2]; + double fRec104[2]; + double fRec103[2]; + FAUSTFLOAT fVbargraph21; + double fRec112[2]; + double fRec113[2]; + double fRec111[2]; + double fRec114[2]; + double fRec115[2]; + double fRec110[2]; + double fRec109[2]; + FAUSTFLOAT fVbargraph22; + double fRec82[2]; + FAUSTFLOAT fVbargraph23; + double fRec116[2]; + FAUSTFLOAT fVbargraph24; + double fRec117[2]; + FAUSTFLOAT fVbargraph25; + double fRec118[2]; + FAUSTFLOAT fVbargraph26; + double fRec119[2]; + FAUSTFLOAT fVbargraph27; + double fRec123[2]; + double fRec124[2]; + double fRec122[2]; + double fRec121[2]; + FAUSTFLOAT fVbargraph28; + double fRec128[2]; + double fRec129[2]; + double fRec127[2]; + double fRec130[2]; + double fRec126[2]; + double fRec125[2]; + FAUSTFLOAT fVbargraph29; + double fRec134[2]; + double fRec135[2]; + double fRec133[2]; + double fRec136[2]; + double fRec137[2]; + double fRec132[2]; + double fRec131[2]; + FAUSTFLOAT fVbargraph30; + double fRec141[2]; + double fRec142[2]; + double fRec140[2]; + double fRec143[2]; + double fRec144[2]; + double fRec139[2]; + double fRec138[2]; + FAUSTFLOAT fVbargraph31; + double fRec120[2]; + FAUSTFLOAT fVbargraph32; + double fRec145[2]; + FAUSTFLOAT fVbargraph33; + double fRec146[2]; + FAUSTFLOAT fVbargraph34; + double fRec147[2]; + FAUSTFLOAT fVbargraph35; + double fRec148[2]; + FAUSTFLOAT fVbargraph36; + double fRec149[2]; + FAUSTFLOAT fVbargraph37; + double fRec150[2]; + FAUSTFLOAT fVbargraph38; + double fRec151[2]; + FAUSTFLOAT fVbargraph39; + double fRec152[2]; + FAUSTFLOAT fVbargraph40; + double fRec153[2]; + FAUSTFLOAT fVbargraph41; + double fRec154[2]; + FAUSTFLOAT fVbargraph42; + double fRec155[2]; + FAUSTFLOAT fVbargraph43; + double fRec156[2]; + FAUSTFLOAT fVbargraph44; + double fRec157[2]; + FAUSTFLOAT fVbargraph45; + double fRec158[2]; + FAUSTFLOAT fVbargraph46; + double fRec159[2]; + FAUSTFLOAT fVbargraph47; + double fRec160[2]; + FAUSTFLOAT fVbargraph48; + double fRec161[2]; + FAUSTFLOAT fVbargraph49; + double fRec162[2]; + FAUSTFLOAT fVbargraph50; + double fRec163[2]; + FAUSTFLOAT fVbargraph51; + double fRec164[2]; + FAUSTFLOAT fVbargraph52; + double fRec165[2]; + FAUSTFLOAT fVbargraph53; + double fRec166[2]; + FAUSTFLOAT fVbargraph54; + double fRec167[2]; + FAUSTFLOAT fVbargraph55; + double fRec168[2]; + FAUSTFLOAT fVbargraph56; + double fRec169[2]; + FAUSTFLOAT fVbargraph57; + double fRec170[2]; + FAUSTFLOAT fVbargraph58; + double fRec171[2]; + FAUSTFLOAT fVbargraph59; + double fRec172[2]; + FAUSTFLOAT fVbargraph60; + double fRec173[2]; + FAUSTFLOAT fVbargraph61; + double fRec174[2]; + FAUSTFLOAT fVbargraph62; + double fRec175[2]; + FAUSTFLOAT fVbargraph63; + double fRec176[2]; + FAUSTFLOAT fVbargraph64; + double fRec177[2]; + FAUSTFLOAT fVbargraph65; + double fRec178[2]; + FAUSTFLOAT fVbargraph66; + double fRec179[2]; + FAUSTFLOAT fVbargraph67; + double fRec180[2]; + FAUSTFLOAT fVbargraph68; + double fRec181[2]; + FAUSTFLOAT fVbargraph69; + double fRec182[2]; + FAUSTFLOAT fVbargraph70; + double fRec183[2]; + FAUSTFLOAT fVbargraph71; + double fRec184[2]; + FAUSTFLOAT fVbargraph72; + double fRec185[2]; + FAUSTFLOAT fVbargraph73; + double fRec186[2]; + FAUSTFLOAT fVbargraph74; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOADecLebedev504"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 25; } - virtual int getNumOutputs() { return 50; } + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (3.4e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); - fConst6 = (394.7715102864353 / fConst0); - fConst7 = (625.2284897135664 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + fConst6 = (394.77151028643527 / fConst0); + fConst7 = (625.22848971356643 / fConst0); fConst8 = (1250.4569794271329 / fConst0); - fConst9 = (789.5430205728705 / fConst0); - fConst10 = (984.7116049589241 / fConst0); - fConst11 = (715.2883950410759 / fConst0); + fConst9 = (789.54302057287055 / fConst0); + fConst10 = (984.71160495892411 / fConst0); + fConst11 = (715.28839504107589 / fConst0); fConst12 = (1430.5767900821518 / fConst0); fConst13 = (1969.4232099178482 / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<2; i++) fRec88[i] = 0; - for (int i=0; i<2; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec94[i] = 0; - for (int i=0; i<2; i++) fRec93[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<2; i++) fRec91[i] = 0; - for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; - for (int i=0; i<2; i++) fRec99[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; - for (int i=0; i<2; i++) fRec98[i] = 0; - for (int i=0; i<2; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec107[i] = 0; - for (int i=0; i<2; i++) fRec106[i] = 0; - for (int i=0; i<2; i++) fRec105[i] = 0; - for (int i=0; i<2; i++) fRec108[i] = 0; - for (int i=0; i<2; i++) fRec104[i] = 0; - for (int i=0; i<2; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec113[i] = 0; - for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; - for (int i=0; i<2; i++) fRec115[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; - for (int i=0; i<2; i++) fRec110[i] = 0; - for (int i=0; i<2; i++) fRec109[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec116[i] = 0; - for (int i=0; i<2; i++) fRec117[i] = 0; - for (int i=0; i<2; i++) fRec118[i] = 0; - for (int i=0; i<2; i++) fRec119[i] = 0; - for (int i=0; i<2; i++) fRec124[i] = 0; - for (int i=0; i<2; i++) fRec123[i] = 0; - for (int i=0; i<2; i++) fRec122[i] = 0; - for (int i=0; i<2; i++) fRec121[i] = 0; - for (int i=0; i<2; i++) fRec129[i] = 0; - for (int i=0; i<2; i++) fRec128[i] = 0; - for (int i=0; i<2; i++) fRec127[i] = 0; - for (int i=0; i<2; i++) fRec130[i] = 0; - for (int i=0; i<2; i++) fRec126[i] = 0; - for (int i=0; i<2; i++) fRec125[i] = 0; - for (int i=0; i<2; i++) fRec135[i] = 0; - for (int i=0; i<2; i++) fRec134[i] = 0; - for (int i=0; i<2; i++) fRec133[i] = 0; - for (int i=0; i<2; i++) fRec137[i] = 0; - for (int i=0; i<2; i++) fRec136[i] = 0; - for (int i=0; i<2; i++) fRec132[i] = 0; - for (int i=0; i<2; i++) fRec131[i] = 0; - for (int i=0; i<2; i++) fRec142[i] = 0; - for (int i=0; i<2; i++) fRec141[i] = 0; - for (int i=0; i<2; i++) fRec140[i] = 0; - for (int i=0; i<2; i++) fRec144[i] = 0; - for (int i=0; i<2; i++) fRec143[i] = 0; - for (int i=0; i<2; i++) fRec139[i] = 0; - for (int i=0; i<2; i++) fRec138[i] = 0; - for (int i=0; i<2; i++) fRec120[i] = 0; - for (int i=0; i<2; i++) fRec145[i] = 0; - for (int i=0; i<2; i++) fRec146[i] = 0; - for (int i=0; i<2; i++) fRec147[i] = 0; - for (int i=0; i<2; i++) fRec148[i] = 0; - for (int i=0; i<2; i++) fRec149[i] = 0; - for (int i=0; i<2; i++) fRec150[i] = 0; - for (int i=0; i<2; i++) fRec151[i] = 0; - for (int i=0; i<2; i++) fRec152[i] = 0; - for (int i=0; i<2; i++) fRec153[i] = 0; - for (int i=0; i<2; i++) fRec154[i] = 0; - for (int i=0; i<2; i++) fRec155[i] = 0; - for (int i=0; i<2; i++) fRec156[i] = 0; - for (int i=0; i<2; i++) fRec157[i] = 0; - for (int i=0; i<2; i++) fRec158[i] = 0; - for (int i=0; i<2; i++) fRec159[i] = 0; - for (int i=0; i<2; i++) fRec160[i] = 0; - for (int i=0; i<2; i++) fRec161[i] = 0; - for (int i=0; i<2; i++) fRec162[i] = 0; - for (int i=0; i<2; i++) fRec163[i] = 0; - for (int i=0; i<2; i++) fRec164[i] = 0; - for (int i=0; i<2; i++) fRec165[i] = 0; - for (int i=0; i<2; i++) fRec166[i] = 0; - for (int i=0; i<2; i++) fRec167[i] = 0; - for (int i=0; i<2; i++) fRec168[i] = 0; - for (int i=0; i<2; i++) fRec169[i] = 0; - for (int i=0; i<2; i++) fRec170[i] = 0; - for (int i=0; i<2; i++) fRec171[i] = 0; - for (int i=0; i<2; i++) fRec172[i] = 0; - for (int i=0; i<2; i++) fRec173[i] = 0; - for (int i=0; i<2; i++) fRec174[i] = 0; - for (int i=0; i<2; i++) fRec175[i] = 0; - for (int i=0; i<2; i++) fRec176[i] = 0; - for (int i=0; i<2; i++) fRec177[i] = 0; - for (int i=0; i<2; i++) fRec178[i] = 0; - for (int i=0; i<2; i++) fRec179[i] = 0; - for (int i=0; i<2; i++) fRec180[i] = 0; - for (int i=0; i<2; i++) fRec181[i] = 0; - for (int i=0; i<2; i++) fRec182[i] = 0; - for (int i=0; i<2; i++) fRec183[i] = 0; - for (int i=0; i<2; i++) fRec184[i] = 0; - for (int i=0; i<2; i++) fRec185[i] = 0; - for (int i=0; i<2; i++) fRec186[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOADecLebedev504"); - ui_interface->openHorizontalBox("Inputs"); - ui_interface->openHorizontalBox("B-Format"); - ui_interface->openHorizontalBox("0"); - ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75ce9b50", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("1"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7588ed40", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75ceccf0", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75cef5a0", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("2"); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7588c650", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7488de20", &fbargraph28, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75cf34f0", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75cf6540", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75cf9600", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("3"); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75896d10", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe74891900", &fbargraph29, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7589a760", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75d027e0", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75d06370", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75d09fd0", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75d0dcf0", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("4"); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe758932a0", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7489bd40", &fbargraph31, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7487d100", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe74895e00", &fbargraph30, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75d13c60", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75d17ec0", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75d1c270", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75d20680", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe74876e50", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(0, "3", ""); - ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("Outputs 1-25"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph15, "osc", "/output1"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe74878d40", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph16, "osc", "/output2"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75889700", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph23, "osc", "/output3"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7487ec20", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph24, "osc", "/output4"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe74881a10", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph25, "osc", "/output5"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe74884a50", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph26, "osc", "/output6"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe74886d20", &fbargraph26, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph27, "osc", "/output7"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7488ad20", &fbargraph27, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph32, "osc", "/output8"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe7489de80", &fbargraph32, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph33, "osc", "/output9"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe748a1fc0", &fbargraph33, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph34, "osc", "/output10"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe748a6120", &fbargraph34, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph35, "osc", "/output11"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe748a9ae0", &fbargraph35, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph36, "osc", "/output12"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe748acf40", &fbargraph36, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph37, "osc", "/output13"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75ad4680", &fbargraph37, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph38, "osc", "/output14"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75ad75d0", &fbargraph38, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph39, "osc", "/output15"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75ad9b60", &fbargraph39, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph40, "osc", "/output16"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75adce20", &fbargraph40, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph41, "osc", "/output17"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75ae00d0", &fbargraph41, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph42, "osc", "/output18"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75ae32f0", &fbargraph42, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph43, "osc", "/output19"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75ae9420", &fbargraph43, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph44, "osc", "/output20"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75aedd70", &fbargraph44, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph45, "osc", "/output21"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75af2080", &fbargraph45, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph46, "osc", "/output22"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75af6d00", &fbargraph46, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph47, "osc", "/output23"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75afa360", &fbargraph47, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph48, "osc", "/output24"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e018a0", &fbargraph48, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph49, "osc", "/output25"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e051c0", &fbargraph49, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("Outputs 26-50"); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph50, "osc", "/output26"); - ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e08db0", &fbargraph50, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph51, "osc", "/output27"); - ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e0e400", &fbargraph51, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph52, "osc", "/output28"); - ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e12630", &fbargraph52, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph53, "osc", "/output29"); - ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e16ed0", &fbargraph53, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph54, "osc", "/output30"); - ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e1b280", &fbargraph54, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph55, "osc", "/output31"); - ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e20cc0", &fbargraph55, -7e+01, 6.0); + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec6[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec7[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec13[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec10[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec16[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec17[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec14[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec20[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec21[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec18[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec25[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec26[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec27[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec23[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec22[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec31[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec32[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec30[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec33[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec29[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec28[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec37[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec38[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec36[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec39[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec35[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec34[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec43[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec44[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec42[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec45[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec41[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec40[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec49[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec50[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec48[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec51[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec52[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec47[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec46[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec56[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec57[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec55[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec58[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec59[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec54[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec53[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec63[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec64[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec62[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec65[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec66[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec61[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec60[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec70[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec71[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec69[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec72[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec73[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec68[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec67[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec77[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec78[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec76[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec79[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec80[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec75[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec74[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec0[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec81[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec85[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec86[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec84[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec83[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec89[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec88[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec87[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec93[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec94[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec92[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec95[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec96[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec91[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec90[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec100[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec101[l97] = 0.0; + + } + for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + fRec99[l98] = 0.0; + + } + for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + fRec102[l99] = 0.0; + + } + for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + fRec98[l100] = 0.0; + + } + for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + fRec97[l101] = 0.0; + + } + for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + fRec106[l102] = 0.0; + + } + for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + fRec107[l103] = 0.0; + + } + for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + fRec105[l104] = 0.0; + + } + for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + fRec108[l105] = 0.0; + + } + for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + fRec104[l106] = 0.0; + + } + for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + fRec103[l107] = 0.0; + + } + for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + fRec112[l108] = 0.0; + + } + for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + fRec113[l109] = 0.0; + + } + for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { + fRec111[l110] = 0.0; + + } + for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + fRec114[l111] = 0.0; + + } + for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + fRec115[l112] = 0.0; + + } + for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + fRec110[l113] = 0.0; + + } + for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + fRec109[l114] = 0.0; + + } + for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { + fRec82[l115] = 0.0; + + } + for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + fRec116[l116] = 0.0; + + } + for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + fRec117[l117] = 0.0; + + } + for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + fRec118[l118] = 0.0; + + } + for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + fRec119[l119] = 0.0; + + } + for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { + fRec123[l120] = 0.0; + + } + for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { + fRec124[l121] = 0.0; + + } + for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { + fRec122[l122] = 0.0; + + } + for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { + fRec121[l123] = 0.0; + + } + for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { + fRec128[l124] = 0.0; + + } + for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { + fRec129[l125] = 0.0; + + } + for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { + fRec127[l126] = 0.0; + + } + for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { + fRec130[l127] = 0.0; + + } + for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { + fRec126[l128] = 0.0; + + } + for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { + fRec125[l129] = 0.0; + + } + for (int l130 = 0; (l130 < 2); l130 = (l130 + 1)) { + fRec134[l130] = 0.0; + + } + for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { + fRec135[l131] = 0.0; + + } + for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { + fRec133[l132] = 0.0; + + } + for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { + fRec136[l133] = 0.0; + + } + for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { + fRec137[l134] = 0.0; + + } + for (int l135 = 0; (l135 < 2); l135 = (l135 + 1)) { + fRec132[l135] = 0.0; + + } + for (int l136 = 0; (l136 < 2); l136 = (l136 + 1)) { + fRec131[l136] = 0.0; + + } + for (int l137 = 0; (l137 < 2); l137 = (l137 + 1)) { + fRec141[l137] = 0.0; + + } + for (int l138 = 0; (l138 < 2); l138 = (l138 + 1)) { + fRec142[l138] = 0.0; + + } + for (int l139 = 0; (l139 < 2); l139 = (l139 + 1)) { + fRec140[l139] = 0.0; + + } + for (int l140 = 0; (l140 < 2); l140 = (l140 + 1)) { + fRec143[l140] = 0.0; + + } + for (int l141 = 0; (l141 < 2); l141 = (l141 + 1)) { + fRec144[l141] = 0.0; + + } + for (int l142 = 0; (l142 < 2); l142 = (l142 + 1)) { + fRec139[l142] = 0.0; + + } + for (int l143 = 0; (l143 < 2); l143 = (l143 + 1)) { + fRec138[l143] = 0.0; + + } + for (int l144 = 0; (l144 < 2); l144 = (l144 + 1)) { + fRec120[l144] = 0.0; + + } + for (int l145 = 0; (l145 < 2); l145 = (l145 + 1)) { + fRec145[l145] = 0.0; + + } + for (int l146 = 0; (l146 < 2); l146 = (l146 + 1)) { + fRec146[l146] = 0.0; + + } + for (int l147 = 0; (l147 < 2); l147 = (l147 + 1)) { + fRec147[l147] = 0.0; + + } + for (int l148 = 0; (l148 < 2); l148 = (l148 + 1)) { + fRec148[l148] = 0.0; + + } + for (int l149 = 0; (l149 < 2); l149 = (l149 + 1)) { + fRec149[l149] = 0.0; + + } + for (int l150 = 0; (l150 < 2); l150 = (l150 + 1)) { + fRec150[l150] = 0.0; + + } + for (int l151 = 0; (l151 < 2); l151 = (l151 + 1)) { + fRec151[l151] = 0.0; + + } + for (int l152 = 0; (l152 < 2); l152 = (l152 + 1)) { + fRec152[l152] = 0.0; + + } + for (int l153 = 0; (l153 < 2); l153 = (l153 + 1)) { + fRec153[l153] = 0.0; + + } + for (int l154 = 0; (l154 < 2); l154 = (l154 + 1)) { + fRec154[l154] = 0.0; + + } + for (int l155 = 0; (l155 < 2); l155 = (l155 + 1)) { + fRec155[l155] = 0.0; + + } + for (int l156 = 0; (l156 < 2); l156 = (l156 + 1)) { + fRec156[l156] = 0.0; + + } + for (int l157 = 0; (l157 < 2); l157 = (l157 + 1)) { + fRec157[l157] = 0.0; + + } + for (int l158 = 0; (l158 < 2); l158 = (l158 + 1)) { + fRec158[l158] = 0.0; + + } + for (int l159 = 0; (l159 < 2); l159 = (l159 + 1)) { + fRec159[l159] = 0.0; + + } + for (int l160 = 0; (l160 < 2); l160 = (l160 + 1)) { + fRec160[l160] = 0.0; + + } + for (int l161 = 0; (l161 < 2); l161 = (l161 + 1)) { + fRec161[l161] = 0.0; + + } + for (int l162 = 0; (l162 < 2); l162 = (l162 + 1)) { + fRec162[l162] = 0.0; + + } + for (int l163 = 0; (l163 < 2); l163 = (l163 + 1)) { + fRec163[l163] = 0.0; + + } + for (int l164 = 0; (l164 < 2); l164 = (l164 + 1)) { + fRec164[l164] = 0.0; + + } + for (int l165 = 0; (l165 < 2); l165 = (l165 + 1)) { + fRec165[l165] = 0.0; + + } + for (int l166 = 0; (l166 < 2); l166 = (l166 + 1)) { + fRec166[l166] = 0.0; + + } + for (int l167 = 0; (l167 < 2); l167 = (l167 + 1)) { + fRec167[l167] = 0.0; + + } + for (int l168 = 0; (l168 < 2); l168 = (l168 + 1)) { + fRec168[l168] = 0.0; + + } + for (int l169 = 0; (l169 < 2); l169 = (l169 + 1)) { + fRec169[l169] = 0.0; + + } + for (int l170 = 0; (l170 < 2); l170 = (l170 + 1)) { + fRec170[l170] = 0.0; + + } + for (int l171 = 0; (l171 < 2); l171 = (l171 + 1)) { + fRec171[l171] = 0.0; + + } + for (int l172 = 0; (l172 < 2); l172 = (l172 + 1)) { + fRec172[l172] = 0.0; + + } + for (int l173 = 0; (l173 < 2); l173 = (l173 + 1)) { + fRec173[l173] = 0.0; + + } + for (int l174 = 0; (l174 < 2); l174 = (l174 + 1)) { + fRec174[l174] = 0.0; + + } + for (int l175 = 0; (l175 < 2); l175 = (l175 + 1)) { + fRec175[l175] = 0.0; + + } + for (int l176 = 0; (l176 < 2); l176 = (l176 + 1)) { + fRec176[l176] = 0.0; + + } + for (int l177 = 0; (l177 < 2); l177 = (l177 + 1)) { + fRec177[l177] = 0.0; + + } + for (int l178 = 0; (l178 < 2); l178 = (l178 + 1)) { + fRec178[l178] = 0.0; + + } + for (int l179 = 0; (l179 < 2); l179 = (l179 + 1)) { + fRec179[l179] = 0.0; + + } + for (int l180 = 0; (l180 < 2); l180 = (l180 + 1)) { + fRec180[l180] = 0.0; + + } + for (int l181 = 0; (l181 < 2); l181 = (l181 + 1)) { + fRec181[l181] = 0.0; + + } + for (int l182 = 0; (l182 < 2); l182 = (l182 + 1)) { + fRec182[l182] = 0.0; + + } + for (int l183 = 0; (l183 < 2); l183 = (l183 + 1)) { + fRec183[l183] = 0.0; + + } + for (int l184 = 0; (l184 < 2); l184 = (l184 + 1)) { + fRec184[l184] = 0.0; + + } + for (int l185 = 0; (l185 < 2); l185 = (l185 + 1)) { + fRec185[l185] = 0.0; + + } + for (int l186 = 0; (l186 < 2); l186 = (l186 + 1)) { + fRec186[l186] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecLebedev504"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x354ece0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3641f60", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x355a1e0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3563b80", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3638b80", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36b4090", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3572420", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x357dab0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3589140", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3661460", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36c27e0", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x366fba0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x359bd00", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35aa8d0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35b94a0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35c8150", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3652e50", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36e7c60", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3681080", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36d35c0", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35dd810", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35ee0d0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35fe990", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x360f330", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x361fdb0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph15, "osc", "/output1"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36251b0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph16, "osc", "/output2"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x362da80", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph56, "osc", "/output32"); - ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e262a0", &fbargraph56, -7e+01, 6.0); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph23, "osc", "/output3"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3686570", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph57, "osc", "/output33"); - ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e2b220", &fbargraph57, -7e+01, 6.0); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph24, "osc", "/output4"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x368e2a0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph58, "osc", "/output34"); - ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e2fbe0", &fbargraph58, -7e+01, 6.0); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph25, "osc", "/output5"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36960a0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph59, "osc", "/output35"); - ui_interface->declare(&fbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e34870", &fbargraph59, -7e+01, 6.0); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph26, "osc", "/output6"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x369c940", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph60, "osc", "/output36"); - ui_interface->declare(&fbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e39420", &fbargraph60, -7e+01, 6.0); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph27, "osc", "/output7"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a8b30", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph61, "osc", "/output37"); - ui_interface->declare(&fbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e3e040", &fbargraph61, -7e+01, 6.0); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph32, "osc", "/output8"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36ee670", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph62, "osc", "/output38"); - ui_interface->declare(&fbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e43ce0", &fbargraph62, -7e+01, 6.0); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph33, "osc", "/output9"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36f9880", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph63, "osc", "/output39"); - ui_interface->declare(&fbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e46f40", &fbargraph63, -7e+01, 6.0); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph34, "osc", "/output10"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3704d40", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph64, "osc", "/output40"); - ui_interface->declare(&fbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e4a6f0", &fbargraph64, -7e+01, 6.0); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph35, "osc", "/output11"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x370f3c0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph65, "osc", "/output41"); - ui_interface->declare(&fbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e4de10", &fbargraph65, -7e+01, 6.0); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph36, "osc", "/output12"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3717a10", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph66, "osc", "/output42"); - ui_interface->declare(&fbargraph66, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e515c0", &fbargraph66, -7e+01, 6.0); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph37, "osc", "/output13"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x371fb60", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph67, "osc", "/output43"); - ui_interface->declare(&fbargraph67, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e54b00", &fbargraph67, -7e+01, 6.0); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph38, "osc", "/output14"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3728150", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph68, "osc", "/output44"); - ui_interface->declare(&fbargraph68, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e58040", &fbargraph68, -7e+01, 6.0); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph39, "osc", "/output15"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x372f010", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph69, "osc", "/output45"); - ui_interface->declare(&fbargraph69, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e5ba00", &fbargraph69, -7e+01, 6.0); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph40, "osc", "/output16"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3737270", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph70, "osc", "/output46"); - ui_interface->declare(&fbargraph70, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e5f2b0", &fbargraph70, -7e+01, 6.0); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph41, "osc", "/output17"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x373f7c0", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph71, "osc", "/output47"); - ui_interface->declare(&fbargraph71, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e62750", &fbargraph71, -7e+01, 6.0); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph42, "osc", "/output18"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3747be0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph72, "osc", "/output48"); - ui_interface->declare(&fbargraph72, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e65e60", &fbargraph72, -7e+01, 6.0); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph43, "osc", "/output19"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3758910", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph73, "osc", "/output49"); - ui_interface->declare(&fbargraph73, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e69880", &fbargraph73, -7e+01, 6.0); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph44, "osc", "/output20"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37656b0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph74, "osc", "/output50"); - ui_interface->declare(&fbargraph74, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffe75e6ce70", &fbargraph74, -7e+01, 6.0); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph45, "osc", "/output21"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3771cc0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph46, "osc", "/output22"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x377e620", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph47, "osc", "/output23"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37872c0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - fSlow1); - double fSlow3 = double(fentry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (fSlow2 + fSlow4); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = (fConst2 / fSlow3); - double fSlow8 = (1.0 / (fSlow7 + 1)); - double fSlow9 = (fConst3 / fSlow3); - double fSlow10 = faustpower<2>(fSlow7); - double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); - double fSlow12 = (12 * fSlow10); - double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); - double fSlow14 = (1.0 / ((fConst6 / fSlow3) + 1)); - double fSlow15 = (1.0 / (((fConst7 / fSlow3) + (6.45943269348338 * fSlow10)) + 1)); - double fSlow16 = (25.83773077393352 * fSlow10); - double fSlow17 = (fSlow16 + (fConst8 / fSlow3)); - double fSlow18 = (fConst9 / fSlow3); - double fSlow19 = (1.0 / (((fConst10 / fSlow3) + (9.1401308902779 * fSlow10)) + 1)); - double fSlow20 = (1.0 / (((fConst11 / fSlow3) + (11.4878004768713 * fSlow10)) + 1)); - double fSlow21 = (45.9512019074852 * fSlow10); - double fSlow22 = (fSlow21 + (fConst12 / fSlow3)); - double fSlow23 = (36.5605235611116 * fSlow10); - double fSlow24 = (fSlow23 + (fConst13 / fSlow3)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; iopenVerticalBox("24"); + ui_interface->declare(&fVbargraph48, "osc", "/output24"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x378fa40", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph49, "osc", "/output25"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3798660", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph50, "osc", "/output26"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37a1340", &fVbargraph50, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph51, "osc", "/output27"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37b1930", &fVbargraph51, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph52, "osc", "/output28"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37bbf30", &fVbargraph52, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph53, "osc", "/output29"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37c8ac0", &fVbargraph53, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph54, "osc", "/output30"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37d4fb0", &fVbargraph54, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph55, "osc", "/output31"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37e5bf0", &fVbargraph55, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph56, "osc", "/output32"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37f4870", &fVbargraph56, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph57, "osc", "/output33"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3802660", &fVbargraph57, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph58, "osc", "/output34"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x380f210", &fVbargraph58, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph59, "osc", "/output35"); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x381ce10", &fVbargraph59, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph60, "osc", "/output36"); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3829f30", &fVbargraph60, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph61, "osc", "/output37"); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3837ae0", &fVbargraph61, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph62, "osc", "/output38"); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3846e60", &fVbargraph62, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph63, "osc", "/output39"); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x384f590", &fVbargraph63, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph64, "osc", "/output40"); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38579b0", &fVbargraph64, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph65, "osc", "/output41"); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3860090", &fVbargraph65, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph66, "osc", "/output42"); + ui_interface->declare(&fVbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3868a60", &fVbargraph66, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph67, "osc", "/output43"); + ui_interface->declare(&fVbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3870f40", &fVbargraph67, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph68, "osc", "/output44"); + ui_interface->declare(&fVbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38798c0", &fVbargraph68, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph69, "osc", "/output45"); + ui_interface->declare(&fVbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3882140", &fVbargraph69, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph70, "osc", "/output46"); + ui_interface->declare(&fVbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x388aaa0", &fVbargraph70, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph71, "osc", "/output47"); + ui_interface->declare(&fVbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3893510", &fVbargraph71, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph72, "osc", "/output48"); + ui_interface->declare(&fVbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x389bc70", &fVbargraph72, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph73, "osc", "/output49"); + ui_interface->declare(&fVbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38a4870", &fVbargraph73, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph74, "osc", "/output50"); + ui_interface->declare(&fVbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38ad730", &fVbargraph74, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = double(fCheckbox0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fSlow1 * fSlow2); + double fSlow4 = (1.0 - fSlow1); + double fSlow5 = (fSlow3 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + double fSlow7 = (fConst2 / fSlow2); + double fSlow8 = (1.0 / (fSlow7 + 1.0)); + double fSlow9 = (fConst3 / fSlow2); + double fSlow10 = mydsp_faustpower2_f(fSlow7); + double fSlow11 = (1.0 / (((fConst4 / fSlow2) + (3.0 * fSlow10)) + 1.0)); + double fSlow12 = (12.0 * fSlow10); + double fSlow13 = (fSlow12 + (fConst5 / fSlow2)); + double fSlow14 = (1.0 / ((fConst6 / fSlow2) + 1.0)); + double fSlow15 = (1.0 / (((fConst7 / fSlow2) + (6.4594326934833797 * fSlow10)) + 1.0)); + double fSlow16 = (25.837730773933519 * fSlow10); + double fSlow17 = (fSlow16 + (fConst8 / fSlow2)); + double fSlow18 = (fConst9 / fSlow2); + double fSlow19 = (1.0 / (((fConst10 / fSlow2) + (9.1401308902779004 * fSlow10)) + 1.0)); + double fSlow20 = (1.0 / (((fConst11 / fSlow2) + (11.4878004768713 * fSlow10)) + 1.0)); + double fSlow21 = (45.951201907485199 * fSlow10); + double fSlow22 = (fSlow21 + (fConst12 / fSlow2)); + double fSlow23 = (36.560523561111602 * fSlow10); + double fSlow24 = (fSlow23 + (fConst13 / fSlow2)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec3[0] = (fSlow6 + (0.999 * fRec3[1])); + double fTemp0 = (fSlow5 * (fRec3[0] * double(input0[i]))); + fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + double fTemp1 = (0.012698412698412698 * fTemp0); + double fTemp2 = (fRec3[0] * double(input2[i])); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow8 * ((fSlow3 * fTemp2) - (fSlow9 * fRec6[0]))); + double fTemp3 = (fRec5[0] + (fSlow4 * fTemp2)); + fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph1 = FAUSTFLOAT(fRec4[0]); + double fTemp4 = (0.021994295969128601 * fTemp3); + double fTemp5 = (fRec3[0] * double(input3[i])); + fRec9[0] = (fRec9[1] + fRec8[1]); + fRec8[0] = (fSlow8 * ((fSlow3 * fTemp5) - (fSlow9 * fRec9[0]))); + double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph2 = FAUSTFLOAT(fRec7[0]); + double fTemp7 = (1.3467622079046435e-18 * fTemp6); + double fTemp8 = (fRec3[0] * double(input6[i])); + fRec12[0] = (fRec12[1] + fRec11[1]); + fRec13[0] = (fRec13[1] + fRec12[1]); + fRec11[0] = (fSlow11 * ((fSlow3 * fTemp8) - ((fSlow13 * fRec12[0]) + (fSlow12 * fRec13[0])))); + double fTemp9 = (fRec11[0] + (fSlow4 * fTemp8)); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph3 = FAUSTFLOAT(fRec10[0]); + double fTemp10 = (0.028394513999997331 * fTemp9); + double fTemp11 = (fRec3[0] * double(input7[i])); + fRec16[0] = (fRec16[1] + fRec15[1]); + fRec17[0] = (fRec17[1] + fRec16[1]); + fRec15[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec16[0]) + (fSlow12 * fRec17[0])))); + double fTemp12 = (fRec15[0] + (fSlow4 * fTemp11)); + fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph4 = FAUSTFLOAT(fRec14[0]); + double fTemp13 = (3.0114518464024883e-18 * fTemp12); + double fTemp14 = (fRec3[0] * double(input8[i])); + fRec20[0] = (fRec20[1] + fRec19[1]); + fRec21[0] = (fRec21[1] + fRec20[1]); + fRec19[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec20[0]) + (fSlow12 * fRec21[0])))); + double fTemp15 = (fRec19[0] + (fSlow4 * fTemp14)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph5 = FAUSTFLOAT(fRec18[0]); + double fTemp16 = (9.2199121612079837e-35 * fTemp15); + double fTemp17 = (fRec3[0] * double(input12[i])); + fRec25[0] = (fRec25[1] + fRec24[1]); + fRec26[0] = (fRec26[1] + fRec25[1]); + fRec24[0] = (fSlow15 * ((fSlow3 * fTemp17) - ((fSlow17 * fRec25[0]) + (fSlow16 * fRec26[0])))); + fRec27[0] = (fRec27[1] + fRec23[1]); + fRec23[0] = (fSlow14 * (fRec24[0] - (fSlow18 * fRec27[0]))); + double fTemp18 = (fRec23[0] + (fSlow4 * fTemp17)); + fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph6 = FAUSTFLOAT(fRec22[0]); + double fTemp19 = (0.033596842045264641 * fTemp18); + double fTemp20 = (fRec3[0] * double(input13[i])); + fRec31[0] = (fRec31[1] + fRec30[1]); + fRec32[0] = (fRec32[1] + fRec31[1]); + fRec30[0] = (fSlow15 * ((fSlow3 * fTemp20) - ((fSlow17 * fRec31[0]) + (fSlow16 * fRec32[0])))); + fRec33[0] = (fRec33[1] + fRec29[1]); + fRec29[0] = (fSlow14 * (fRec30[0] - (fSlow18 * fRec33[0]))); + double fTemp21 = (fRec29[0] + (fSlow4 * fTemp20)); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph7 = FAUSTFLOAT(fRec28[0]); + double fTemp22 = (5.0391227634343926e-18 * fTemp21); + double fTemp23 = (fRec3[0] * double(input14[i])); + fRec37[0] = (fRec37[1] + fRec36[1]); + fRec38[0] = (fRec38[1] + fRec37[1]); + fRec36[0] = (fSlow15 * ((fSlow3 * fTemp23) - ((fSlow17 * fRec37[0]) + (fSlow16 * fRec38[0])))); + fRec39[0] = (fRec39[1] + fRec35[1]); + fRec35[0] = (fSlow14 * (fRec36[0] - (fSlow18 * fRec39[0]))); + double fTemp24 = (fRec35[0] + (fSlow4 * fTemp23)); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph8 = FAUSTFLOAT(fRec34[0]); + double fTemp25 = (2.4393594688416384e-34 * fTemp24); + double fTemp26 = (fRec3[0] * double(input15[i])); + fRec43[0] = (fRec43[1] + fRec42[1]); + fRec44[0] = (fRec44[1] + fRec43[1]); + fRec42[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec43[0]) + (fSlow16 * fRec44[0])))); + fRec45[0] = (fRec45[1] + fRec41[1]); + fRec41[0] = (fSlow14 * (fRec42[0] - (fSlow18 * fRec45[0]))); + double fTemp27 = (fRec41[0] + (fSlow4 * fTemp26)); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph9 = FAUSTFLOAT(fRec40[0]); + double fTemp28 = (6.0979103388536467e-51 * fTemp27); + double fTemp29 = (fRec3[0] * double(input20[i])); + fRec49[0] = (fRec49[1] + fRec48[1]); + fRec50[0] = (fRec50[1] + fRec49[1]); + fRec48[0] = (fSlow20 * ((fSlow3 * fTemp29) - ((fSlow22 * fRec49[0]) + (fSlow21 * fRec50[0])))); + fRec51[0] = (fRec51[1] + fRec47[1]); + fRec52[0] = (fRec52[1] + fRec51[1]); + fRec47[0] = (fSlow19 * (fRec48[0] - ((fSlow24 * fRec51[0]) + (fSlow23 * fRec52[0])))); + double fTemp30 = (fRec47[0] + (fSlow4 * fTemp29)); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph10 = FAUSTFLOAT(fRec46[0]); + double fTemp31 = (0.038095238095238099 * fTemp30); + double fTemp32 = (fRec3[0] * double(input21[i])); + fRec56[0] = (fRec56[1] + fRec55[1]); + fRec57[0] = (fRec57[1] + fRec56[1]); + fRec55[0] = (fSlow20 * ((fSlow3 * fTemp32) - ((fSlow22 * fRec56[0]) + (fSlow21 * fRec57[0])))); + fRec58[0] = (fRec58[1] + fRec54[1]); + fRec59[0] = (fRec59[1] + fRec58[1]); + fRec54[0] = (fSlow19 * (fRec55[0] - ((fSlow24 * fRec58[0]) + (fSlow23 * fRec59[0])))); + double fTemp33 = (fRec54[0] + (fSlow4 * fTemp32)); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph11 = FAUSTFLOAT(fRec53[0]); + double fTemp34 = (7.3765204086483564e-18 * fTemp33); + double fTemp35 = (fRec3[0] * double(input22[i])); + fRec63[0] = (fRec63[1] + fRec62[1]); + fRec64[0] = (fRec64[1] + fRec63[1]); + fRec62[0] = (fSlow20 * ((fSlow3 * fTemp35) - ((fSlow22 * fRec63[0]) + (fSlow21 * fRec64[0])))); + fRec65[0] = (fRec65[1] + fRec61[1]); + fRec66[0] = (fRec66[1] + fRec65[1]); + fRec61[0] = (fSlow19 * (fRec62[0] - ((fSlow24 * fRec65[0]) + (fSlow23 * fRec66[0])))); + double fTemp36 = (fRec61[0] + (fSlow4 * fTemp35)); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph12 = FAUSTFLOAT(fRec60[0]); + double fTemp37 = (4.7908068913603203e-34 * fTemp36); + double fTemp38 = (fRec3[0] * double(input23[i])); + fRec70[0] = (fRec70[1] + fRec69[1]); + fRec71[0] = (fRec71[1] + fRec70[1]); + fRec69[0] = (fSlow20 * ((fSlow3 * fTemp38) - ((fSlow22 * fRec70[0]) + (fSlow21 * fRec71[0])))); + fRec72[0] = (fRec72[1] + fRec68[1]); + fRec73[0] = (fRec73[1] + fRec72[1]); + fRec68[0] = (fSlow19 * (fRec69[0] - ((fSlow24 * fRec72[0]) + (fSlow23 * fRec73[0])))); + double fTemp39 = (fRec68[0] + (fSlow4 * fTemp38)); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph13 = FAUSTFLOAT(fRec67[0]); + double fTemp40 = (1.8293731016560941e-50 * fTemp39); + double fTemp41 = (fRec3[0] * double(input24[i])); + fRec77[0] = (fRec77[1] + fRec76[1]); + fRec78[0] = (fRec78[1] + fRec77[1]); + fRec76[0] = (fSlow20 * ((fSlow3 * fTemp41) - ((fSlow22 * fRec77[0]) + (fSlow21 * fRec78[0])))); + fRec79[0] = (fRec79[1] + fRec75[1]); + fRec80[0] = (fRec80[1] + fRec79[1]); + fRec75[0] = (fSlow19 * (fRec76[0] - ((fSlow24 * fRec79[0]) + (fSlow23 * fRec80[0])))); + double fTemp42 = (fRec75[0] + (fSlow4 * fTemp41)); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph14 = FAUSTFLOAT(fRec74[0]); + double fTemp43 = (3.9603917912335094e-67 * fTemp42); + double fTemp44 = (fRec1[0] * ((((((((((((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16) + fTemp19) + fTemp22) + fTemp25) + fTemp28) + fTemp31) + fTemp34) + fTemp37) + fTemp40) + fTemp43)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph15 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.021994295969128601 * fTemp6); + double fTemp46 = (0.024590370452110585 * fTemp15); + double fTemp47 = (0.026560635762986527 * fTemp27); + double fTemp48 = (0.014285714285714285 * fTemp30); + double fTemp49 = (0.028171808490950554 * fTemp42); + double fTemp50 = (0.014197256999998666 * fTemp9); + double fTemp51 = (0.020573779994945588 * fTemp21); + double fTemp52 = (0.021295885499997998 * fTemp36); + double fTemp53 = (fRec1[0] * ((((((fTemp1 + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) - ((fTemp50 + fTemp51) + fTemp52))); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph16 = FAUSTFLOAT(fRec81[0]); + output1[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (fRec3[0] * double(input4[i])); + fRec85[0] = (fRec85[1] + fRec84[1]); + fRec86[0] = (fRec86[1] + fRec85[1]); + fRec84[0] = (fSlow11 * ((fSlow3 * fTemp54) - ((fSlow13 * fRec85[0]) + (fSlow12 * fRec86[0])))); + double fTemp55 = (fRec84[0] + (fSlow4 * fTemp54)); + fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph17 = FAUSTFLOAT(fRec83[0]); + double fTemp56 = (fRec3[0] * double(input1[i])); + fRec89[0] = (fRec89[1] + fRec88[1]); + fRec88[0] = (fSlow8 * ((fSlow3 * fTemp56) - (fSlow9 * fRec89[0]))); + double fTemp57 = (fRec88[0] + (fSlow4 * fTemp56)); + fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph18 = FAUSTFLOAT(fRec87[0]); + double fTemp58 = (0.021994295969128601 * fTemp57); + double fTemp59 = (fTemp1 + fTemp7); + double fTemp60 = (fRec3[0] * double(input16[i])); + fRec93[0] = (fRec93[1] + fRec92[1]); + fRec94[0] = (fRec94[1] + fRec93[1]); + fRec92[0] = (fSlow20 * ((fSlow3 * fTemp60) - ((fSlow22 * fRec93[0]) + (fSlow21 * fRec94[0])))); + fRec95[0] = (fRec95[1] + fRec91[1]); + fRec96[0] = (fRec96[1] + fRec95[1]); + fRec91[0] = (fSlow19 * (fRec92[0] - ((fSlow24 * fRec95[0]) + (fSlow23 * fRec96[0])))); + double fTemp61 = (fRec91[0] + (fSlow4 * fTemp60)); + fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph19 = FAUSTFLOAT(fRec90[0]); + double fTemp62 = (fRec3[0] * double(input9[i])); + fRec100[0] = (fRec100[1] + fRec99[1]); + fRec101[0] = (fRec101[1] + fRec100[1]); + fRec99[0] = (fSlow15 * ((fSlow3 * fTemp62) - ((fSlow17 * fRec100[0]) + (fSlow16 * fRec101[0])))); + fRec102[0] = (fRec102[1] + fRec98[1]); + fRec98[0] = (fSlow14 * (fRec99[0] - (fSlow18 * fRec102[0]))); + double fTemp63 = (fRec98[0] + (fSlow4 * fTemp62)); + fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph20 = FAUSTFLOAT(fRec97[0]); + double fTemp64 = (0.026560635762986527 * fTemp63); + double fTemp65 = (fRec3[0] * double(input11[i])); + fRec106[0] = (fRec106[1] + fRec105[1]); + fRec107[0] = (fRec107[1] + fRec106[1]); + fRec105[0] = (fSlow15 * ((fSlow3 * fTemp65) - ((fSlow17 * fRec106[0]) + (fSlow16 * fRec107[0])))); + fRec108[0] = (fRec108[1] + fRec104[1]); + fRec104[0] = (fSlow14 * (fRec105[0] - (fSlow18 * fRec108[0]))); + double fTemp66 = (fRec104[0] + (fSlow4 * fTemp65)); + fRec103[0] = max((fRec103[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph21 = FAUSTFLOAT(fRec103[0]); + double fTemp67 = (0.020573779994945588 * fTemp66); + double fTemp68 = (fRec3[0] * double(input18[i])); + fRec112[0] = (fRec112[1] + fRec111[1]); + fRec113[0] = (fRec113[1] + fRec112[1]); + fRec111[0] = (fSlow20 * ((fSlow3 * fTemp68) - ((fSlow22 * fRec112[0]) + (fSlow21 * fRec113[0])))); + fRec114[0] = (fRec114[1] + fRec110[1]); + fRec115[0] = (fRec115[1] + fRec114[1]); + fRec110[0] = (fSlow19 * (fRec111[0] - ((fSlow24 * fRec114[0]) + (fSlow23 * fRec115[0])))); + double fTemp69 = (fRec110[0] + (fSlow4 * fTemp68)); + fRec109[0] = max((fRec109[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph22 = FAUSTFLOAT(fRec109[0]); + double fTemp70 = (fRec1[0] * (((3.0114518464024883e-18 * fTemp55) + (fTemp58 + (fTemp49 + (fTemp52 + (fTemp48 + fTemp59))))) - ((6.9001030189269641e-18 * fTemp61) + (fTemp64 + ((fTemp67 + (((fTemp50 + fTemp46) + (1.2597806908585981e-18 * fTemp21)) + (4.879109635569025e-18 * fTemp27))) + (2.607993801258108e-18 * fTemp69)))))); + fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph23 = FAUSTFLOAT(fRec82[0]); + output2[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = (fRec1[0] * (((9.7582192711380499e-18 * fTemp63) + ((2.6935244158092871e-18 * fTemp57) + ((5.2159876025162161e-18 * fTemp69) + (fTemp49 + (fTemp48 + (fTemp51 + (fTemp1 + fTemp46))))))) - ((1.3800206037853928e-17 * fTemp61) + ((6.0229036928049765e-18 * fTemp55) + ((2.5195613817171963e-18 * fTemp66) + (fTemp52 + (fTemp47 + (fTemp45 + fTemp50)))))))); + fRec116[0] = max((fRec116[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph24 = FAUSTFLOAT(fRec116[0]); + output3[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = (fRec1[0] * ((fTemp64 + ((9.0343555392074636e-18 * fTemp55) + (fTemp67 + (fTemp49 + (fTemp52 + (fTemp48 + ((fTemp1 + (3.7793420725757941e-18 * fTemp21)) + (1.4637328906707076e-17 * fTemp27)))))))) - ((2.0700309056780893e-17 * fTemp61) + (fTemp58 + ((fTemp46 + (fTemp50 + (4.0402866237139308e-18 * fTemp6))) + (7.823981403774323e-18 * fTemp69)))))); + fRec117[0] = max((fRec117[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph25 = FAUSTFLOAT(fRec117[0]); + output4[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = (fRec1[0] * ((fTemp43 + (fTemp37 + (fTemp31 + (fTemp28 + (fTemp22 + (fTemp16 + (fTemp10 + fTemp59))))))) - (fTemp40 + (fTemp34 + (fTemp25 + (fTemp19 + (fTemp4 + fTemp13))))))); + fRec118[0] = max((fRec118[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph26 = FAUSTFLOAT(fRec118[0]); + output5[i] = FAUSTFLOAT(fTemp73); + double fTemp74 = (0.022574955908289243 * fTemp0); + double fTemp75 = (0.027648561470568499 * fTemp3); + double fTemp76 = (fTemp74 + fTemp75); + double fTemp77 = (0.027648561470568506 * fTemp6); + double fTemp78 = (0.012619783999998805 * fTemp9); + double fTemp79 = (0.043716214137085485 * fTemp12); + double fTemp80 = (0.021858107068542749 * fTemp15); + double fTemp81 = (0.038794291597509752 * fTemp21); + double fTemp82 = (0.04089277388695433 * fTemp24); + double fTemp83 = (0.016694405031674409 * fTemp27); + double fTemp84 = (0.013385302265262959 * fTemp33); + double fTemp85 = (0.047324189999995547 * fTemp36); + double fTemp86 = (0.035414181017315374 * fTemp39); + double fTemp87 = (0.012520803773755805 * fTemp42); + double fTemp88 = (0.010558468816293319 * fTemp18); + double fTemp89 = (0.027513227513227514 * fTemp30); + double fTemp90 = (fRec1[0] * ((((((((((((fTemp76 + fTemp77) + fTemp78) + fTemp79) + fTemp80) + fTemp81) + fTemp82) + fTemp83) + fTemp84) + fTemp85) + fTemp86) + fTemp87) - (fTemp88 + fTemp89))); + fRec119[0] = max((fRec119[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph27 = FAUSTFLOAT(fRec119[0]); + output6[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = (fRec3[0] * double(input5[i])); + fRec123[0] = (fRec123[1] + fRec122[1]); + fRec124[0] = (fRec124[1] + fRec123[1]); + fRec122[0] = (fSlow11 * ((fSlow3 * fTemp91) - ((fSlow13 * fRec123[0]) + (fSlow12 * fRec124[0])))); + double fTemp92 = (fRec122[0] + (fSlow4 * fTemp91)); + fRec121[0] = max((fRec121[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph28 = FAUSTFLOAT(fRec121[0]); + double fTemp93 = (0.043716214137085485 * fTemp92); + double fTemp94 = (fRec3[0] * double(input10[i])); + fRec128[0] = (fRec128[1] + fRec127[1]); + fRec129[0] = (fRec129[1] + fRec128[1]); + fRec127[0] = (fSlow15 * ((fSlow3 * fTemp94) - ((fSlow17 * fRec128[0]) + (fSlow16 * fRec129[0])))); + fRec130[0] = (fRec130[1] + fRec126[1]); + fRec126[0] = (fSlow14 * (fRec127[0] - (fSlow18 * fRec130[0]))); + double fTemp95 = (fRec126[0] + (fSlow4 * fTemp94)); + fRec125[0] = max((fRec125[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph29 = FAUSTFLOAT(fRec125[0]); + double fTemp96 = (5.0079204648915091e-18 * fTemp95); + double fTemp97 = (2.6768460856911014e-18 * fTemp55); + double fTemp98 = (0.027648561470568506 * fTemp57); + double fTemp99 = (fRec3[0] * double(input19[i])); + fRec134[0] = (fRec134[1] + fRec133[1]); + fRec135[0] = (fRec135[1] + fRec134[1]); + fRec133[0] = (fSlow20 * ((fSlow3 * fTemp99) - ((fSlow22 * fRec134[0]) + (fSlow21 * fRec135[0])))); + fRec136[0] = (fRec136[1] + fRec132[1]); + fRec137[0] = (fRec137[1] + fRec136[1]); + fRec132[0] = (fSlow19 * (fRec133[0] - ((fSlow24 * fRec136[0]) + (fSlow23 * fRec137[0])))); + double fTemp100 = (fRec132[0] + (fSlow4 * fTemp99)); + fRec131[0] = max((fRec131[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + fVbargraph30 = FAUSTFLOAT(fRec131[0]); + double fTemp101 = (0.013385302265262959 * fTemp100); + double fTemp102 = (5.7955417805735729e-18 * fTemp69); + double fTemp103 = (0.038794291597509752 * fTemp66); + double fTemp104 = (1.6929861152980278e-18 * fTemp6); + double fTemp105 = (2.6768460856911007e-18 * fTemp12); + double fTemp106 = (2.3754652515039685e-18 * fTemp21); + double fTemp107 = (8.1961337873870493e-19 * fTemp33); + double fTemp108 = (3.0667124528564294e-18 * (fTemp27 + fTemp61)); + double fTemp109 = (fRec3[0] * double(input17[i])); + fRec141[0] = (fRec141[1] + fRec140[1]); + fRec142[0] = (fRec142[1] + fRec141[1]); + fRec140[0] = (fSlow20 * ((fSlow3 * fTemp109) - ((fSlow22 * fRec141[0]) + (fSlow21 * fRec142[0])))); + fRec143[0] = (fRec143[1] + fRec139[1]); + fRec144[0] = (fRec144[1] + fRec143[1]); + fRec139[0] = (fSlow19 * (fRec140[0] - ((fSlow24 * fRec143[0]) + (fSlow23 * fRec144[0])))); + double fTemp110 = (fRec139[0] + (fSlow4 * fTemp109)); + fRec138[0] = max((fRec138[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp110)))))); + fVbargraph31 = FAUSTFLOAT(fRec138[0]); + double fTemp111 = (0.035414181017315374 * fTemp110); + double fTemp112 = (0.016694405031674409 * fTemp63); + double fTemp113 = (6.5054795140920346e-18 * fTemp39); + double fTemp114 = (fRec1[0] * ((fTemp93 + (fTemp96 + (fTemp97 + (fTemp98 + (fTemp101 + (fTemp102 + (fTemp103 + (fTemp87 + ((((fTemp78 + (fTemp76 + fTemp104)) + fTemp105) + fTemp106) + fTemp107))))))))) - (fTemp108 + (fTemp111 + (fTemp112 + ((fTemp85 + (fTemp89 + (fTemp82 + (fTemp80 + fTemp88)))) + fTemp113)))))); + fRec120[0] = max((fRec120[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp114)))))); + fVbargraph32 = FAUSTFLOAT(fRec120[0]); + output7[i] = FAUSTFLOAT(fTemp114); + double fTemp115 = (6.1334249057128588e-18 * (fTemp63 - fTemp61)); + double fTemp116 = (5.3536921713822013e-18 * fTemp92); + double fTemp117 = (1.3010959028184069e-17 * fTemp110); + double fTemp118 = (3.3859722305960555e-18 * fTemp57); + double fTemp119 = (1.6392267574774099e-18 * fTemp100); + double fTemp120 = (4.7509305030079371e-18 * fTemp66); + double fTemp121 = (fTemp76 + fTemp78); + double fTemp122 = (1.0015840929783018e-17 * fTemp95); + double fTemp123 = (5.3536921713822029e-18 * fTemp55); + double fTemp124 = (1.1591083561147146e-17 * fTemp69); + double fTemp125 = (fRec1[0] * ((fTemp115 + (fTemp116 + (fTemp117 + (fTemp118 + (fTemp119 + (fTemp120 + (fTemp87 + (fTemp85 + (fTemp82 + (fTemp80 + fTemp121)))))))))) - (fTemp122 + (fTemp123 + (fTemp124 + (fTemp86 + (fTemp84 + (fTemp89 + (fTemp83 + (fTemp81 + (fTemp88 + (fTemp77 + fTemp79)))))))))))); + fRec145[0] = max((fRec145[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp125)))))); + fVbargraph33 = FAUSTFLOAT(fRec145[0]); + output8[i] = FAUSTFLOAT(fTemp125); + double fTemp126 = (1.5023761394674526e-17 * fTemp95); + double fTemp127 = (8.0305382570733035e-18 * fTemp55); + double fTemp128 = (1.7386625341720719e-17 * fTemp69); + double fTemp129 = (9.2001373585692901e-18 * fTemp27); + double fTemp130 = (1.9516438542276106e-17 * fTemp39); + double fTemp131 = (9.200137358569287e-18 * fTemp61); + double fTemp132 = (5.0789583458940831e-18 * fTemp6); + double fTemp133 = (8.0305382570733005e-18 * fTemp12); + double fTemp134 = (7.1263957545119048e-18 * fTemp21); + double fTemp135 = (2.4588401362161147e-18 * fTemp33); + double fTemp136 = (fRec1[0] * ((fTemp126 + (fTemp111 + (fTemp112 + (fTemp127 + (fTemp128 + (fTemp87 + ((fTemp121 + fTemp129) + fTemp130))))))) - (fTemp93 + (fTemp131 + (fTemp98 + (fTemp101 + (fTemp103 + (fTemp85 + ((fTemp89 + (fTemp82 + ((fTemp88 + (fTemp80 + (fTemp132 + fTemp133))) + fTemp134))) + fTemp135))))))))); + fRec146[0] = max((fRec146[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp136)))))); + fVbargraph34 = FAUSTFLOAT(fRec146[0]); + output9[i] = FAUSTFLOAT(fTemp136); + double fTemp137 = (0.043716214137085485 * fTemp55); + double fTemp138 = (0.027648561470568499 * fTemp57); + double fTemp139 = (fTemp74 + fTemp77); + double fTemp140 = (0.025396825396825397 * fTemp30); + double fTemp141 = (0.037859351999996446 * fTemp69); + double fTemp142 = (0.025862861065006505 * fTemp66); + double fTemp143 = (0.025239567999997631 * fTemp9); + double fTemp144 = (0.025862861065006511 * fTemp21); + double fTemp145 = (0.050083215095023212 * fTemp42); + double fTemp146 = (fRec1[0] * (((6.133424905712858e-18 * fTemp61) + (fTemp137 + (fTemp138 + ((fTemp139 + (2.6768460856911007e-18 * fTemp15)) + fTemp140)))) - ((0.033388810063348803 * (fTemp27 - fTemp63)) + (fTemp141 + (fTemp142 + (((fTemp143 + fTemp144) + (2.3182167122294292e-18 * fTemp36)) + fTemp145)))))); + fRec147[0] = max((fRec147[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp146)))))); + fVbargraph35 = FAUSTFLOAT(fRec147[0]); + output10[i] = FAUSTFLOAT(fTemp146); + double fTemp147 = (0.025862861065006511 * fTemp66); + double fTemp148 = (fRec1[0] * (((1.8400274717138574e-17 * fTemp61) + ((0.033388810063348796 * fTemp63) + (fTemp98 + (fTemp141 + ((fTemp140 + ((fTemp74 + (0.025862861065006505 * fTemp21)) + (0.033388810063348817 * fTemp27))) + (6.9546501366882881e-18 * fTemp36)))))) - (fTemp137 + (fTemp147 + (fTemp145 + ((fTemp143 + (0.027648561470568499 * fTemp6)) + (8.0305382570733005e-18 * fTemp15))))))); + fRec148[0] = max((fRec148[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp148)))))); + fVbargraph36 = FAUSTFLOAT(fRec148[0]); + output11[i] = FAUSTFLOAT(fTemp148); + double fTemp149 = (fRec1[0] * (((3.0667124528564293e-17 * fTemp61) + (fTemp137 + (fTemp142 + (fTemp140 + ((fTemp144 + (fTemp74 + (1.3384230428455503e-17 * fTemp15))) + (0.033388810063348762 * fTemp27)))))) - ((0.033388810063348852 * fTemp63) + (fTemp138 + (fTemp141 + (fTemp145 + ((fTemp77 + fTemp143) + (1.1591083561147147e-17 * fTemp36)))))))); + fRec149[0] = max((fRec149[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp149)))))); + fVbargraph37 = FAUSTFLOAT(fRec149[0]); + output12[i] = FAUSTFLOAT(fTemp149); + double fTemp150 = (fRec1[0] * (((4.2933974339990009e-17 * fTemp61) + (fTemp141 + (fTemp147 + ((fTemp140 + (fTemp74 + (0.027648561470568496 * fTemp6))) + (1.6227516985606004e-17 * fTemp36))))) - ((0.033388810063348817 * fTemp63) + (fTemp137 + (fTemp98 + (fTemp145 + (((fTemp143 + (1.8737922599837705e-17 * fTemp15)) + (0.025862861065006501 * fTemp21)) + (0.033388810063348796 * fTemp27)))))))); + fRec150[0] = max((fRec150[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp150)))))); + fVbargraph38 = FAUSTFLOAT(fRec150[0]); + output13[i] = FAUSTFLOAT(fTemp150); + double fTemp151 = (fRec1[0] * ((fTemp87 + (fTemp85 + (fTemp83 + (fTemp81 + (fTemp88 + (fTemp80 + (fTemp78 + fTemp139))))))) - (fTemp86 + (fTemp84 + (fTemp89 + (fTemp82 + (fTemp75 + fTemp79))))))); + fRec151[0] = max((fRec151[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp151)))))); + fVbargraph39 = FAUSTFLOAT(fRec151[0]); + output14[i] = FAUSTFLOAT(fTemp151); + double fTemp152 = (fRec1[0] * ((fTemp111 + (fTemp97 + (fTemp98 + (fTemp102 + (fTemp103 + (fTemp87 + (fTemp113 + (fTemp82 + (fTemp106 + (fTemp88 + (fTemp78 + (fTemp74 + fTemp104)))))))))))) - (fTemp108 + (fTemp93 + (fTemp96 + (fTemp112 + (fTemp101 + (fTemp85 + (fTemp107 + (fTemp89 + (fTemp80 + (fTemp75 + fTemp105)))))))))))); + fRec152[0] = max((fRec152[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); + fVbargraph40 = FAUSTFLOAT(fRec152[0]); + output15[i] = FAUSTFLOAT(fTemp152); + double fTemp153 = (fTemp74 + fTemp78); + double fTemp154 = (fRec1[0] * ((fTemp115 + (fTemp122 + (fTemp118 + (fTemp120 + (fTemp87 + (fTemp86 + (fTemp85 + (fTemp84 + (fTemp88 + (fTemp80 + (fTemp79 + fTemp153))))))))))) - (fTemp116 + (fTemp117 + (fTemp123 + (fTemp119 + (fTemp124 + (fTemp89 + (fTemp83 + (fTemp82 + (fTemp81 + (fTemp75 + fTemp77)))))))))))); + fRec153[0] = max((fRec153[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp154)))))); + fVbargraph41 = FAUSTFLOAT(fRec153[0]); + output16[i] = FAUSTFLOAT(fTemp154); + double fTemp155 = (fRec1[0] * ((fTemp93 + (fTemp112 + (fTemp127 + (fTemp101 + (fTemp128 + (fTemp87 + (fTemp135 + (fTemp129 + (fTemp82 + (fTemp88 + (fTemp133 + fTemp153))))))))))) - (fTemp126 + (fTemp111 + (fTemp131 + (fTemp98 + (fTemp103 + (fTemp130 + (fTemp85 + (fTemp89 + (fTemp134 + (fTemp80 + (fTemp75 + fTemp132))))))))))))); + fRec154[0] = max((fRec154[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); + fVbargraph42 = FAUSTFLOAT(fRec154[0]); + output17[i] = FAUSTFLOAT(fTemp155); + double fTemp156 = (fTemp0 + fTemp3); + double fTemp157 = (0.021093750000000001 * fTemp156); + double fTemp158 = (0.027231914153020904 * fTemp92); + double fTemp159 = (0.041597435974919175 * fTemp95); + double fTemp160 = (0.029413829057838591 * fTemp110); + double fTemp161 = (2.5471083409710855e-18 * fTemp61); + double fTemp162 = (0.016982082124440745 * fTemp63); + double fTemp163 = (0.027231914153020897 * fTemp55); + double fTemp164 = (0.021093749999999994 * fTemp57); + double fTemp165 = (0.031444705933590805 * fTemp69); + double fTemp166 = (0.013154264250377145 * fTemp66); + double fTemp167 = (5.236595479505967e-18 * fTemp9); + double fTemp168 = ((0.021093749999999998 * fTemp6) + fTemp167); + double fTemp169 = (0.027231914153020911 * fTemp12); + double fTemp170 = (1.6674738251076273e-18 * fTemp15); + double fTemp171 = (0.013154264250377147 * fTemp21); + double fTemp172 = (2.5471083409710867e-18 * fTemp24); + double fTemp173 = (1.9254329235850881e-18 * fTemp36); + double fTemp174 = (0.01111738239902945 * (fTemp33 + fTemp100)); + double fTemp175 = (0.021480823570105497 * fTemp18); + double fTemp176 = (0.016982082124440741 * fTemp27); + double fTemp177 = (0.024609375000000013 * fTemp30); + double fTemp178 = (0.029413829057838584 * fTemp39); + double fTemp179 = (0.020798717987459581 * fTemp42); + double fTemp180 = (fRec1[0] * ((fTemp157 + (fTemp158 + (fTemp159 + (fTemp160 + (fTemp161 + (fTemp162 + (fTemp163 + (fTemp164 + (fTemp165 + (fTemp166 + (((((fTemp168 + fTemp169) + fTemp170) + fTemp171) + fTemp172) + fTemp173))))))))))) - (fTemp174 + ((((fTemp175 + fTemp176) + fTemp177) + fTemp178) + fTemp179)))); + fRec155[0] = max((fRec155[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp180)))))); + fVbargraph43 = FAUSTFLOAT(fRec155[0]); + output18[i] = FAUSTFLOAT(fTemp180); + double fTemp181 = (0.01111738239902945 * (fTemp33 - fTemp100)); + double fTemp182 = (0.027231914153020911 * fTemp92); + double fTemp183 = (0.02941382905783858 * fTemp110); + double fTemp184 = (7.6413250229132566e-18 * fTemp61); + double fTemp185 = (0.016982082124440741 * fTemp63); + double fTemp186 = (0.021093749999999998 * fTemp57); + double fTemp187 = (0.013154264250377147 * fTemp66); + double fTemp188 = (0.016982082124440748 * fTemp27); + double fTemp189 = (0.029413829057838594 * fTemp39); + double fTemp190 = (0.021093749999999994 * fTemp6); + double fTemp191 = (0.027231914153020904 * fTemp12); + double fTemp192 = (5.0024214753228816e-18 * fTemp15); + double fTemp193 = (0.013154264250377145 * fTemp21); + double fTemp194 = (7.6413250229132581e-18 * fTemp24); + double fTemp195 = (5.7762987707552641e-18 * fTemp36); + double fTemp196 = (fRec1[0] * ((fTemp181 + (fTemp157 + (fTemp182 + (fTemp183 + (fTemp184 + (fTemp185 + (fTemp186 + (fTemp187 + ((fTemp167 + fTemp188) + fTemp189))))))))) - (fTemp159 + (fTemp163 + (fTemp165 + (fTemp179 + ((fTemp177 + (((fTemp175 + ((fTemp190 + fTemp191) + fTemp192)) + fTemp193) + fTemp194)) + fTemp195))))))); + fRec156[0] = max((fRec156[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp196)))))); + fVbargraph44 = FAUSTFLOAT(fRec156[0]); + output19[i] = FAUSTFLOAT(fTemp196); + double fTemp197 = (1.2735541704855428e-17 * fTemp61); + double fTemp198 = (0.01111738239902945 * fTemp100); + double fTemp199 = (8.3373691255381378e-18 * fTemp15); + double fTemp200 = (1.2735541704855431e-17 * fTemp24); + double fTemp201 = (0.016982082124440721 * fTemp27); + double fTemp202 = (0.011117382399029452 * fTemp33); + double fTemp203 = (9.6271646179254396e-18 * fTemp36); + double fTemp204 = (0.029413829057838549 * fTemp39); + double fTemp205 = (0.029413829057838629 * fTemp110); + double fTemp206 = (0.016982082124440766 * fTemp63); + double fTemp207 = (0.013154264250377148 * fTemp21); + double fTemp208 = (fRec1[0] * ((fTemp159 + (fTemp197 + (fTemp163 + (fTemp198 + (fTemp165 + ((((((fTemp167 + fTemp199) + fTemp200) + fTemp201) + fTemp202) + fTemp203) + fTemp204)))))) - ((0.021093750000000001 * (fTemp6 - fTemp156)) + (fTemp158 + (fTemp205 + (fTemp206 + (fTemp164 + (fTemp166 + (fTemp179 + (fTemp177 + ((fTemp169 + fTemp175) + fTemp207))))))))))); + fRec157[0] = max((fRec157[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp208)))))); + fVbargraph45 = FAUSTFLOAT(fRec157[0]); + output20[i] = FAUSTFLOAT(fTemp208); + double fTemp209 = (fTemp0 - fTemp57); + double fTemp210 = (1.7829758386797597e-17 * fTemp61); + double fTemp211 = (fTemp167 + (0.021093749999999991 * fTemp6)); + double fTemp212 = (0.027231914153020901 * fTemp12); + double fTemp213 = (0.011117382399029452 * fTemp100); + double fTemp214 = (0.029413829057838594 * fTemp110); + double fTemp215 = (0.016982082124440748 * fTemp63); + double fTemp216 = (0.013154264250377148 * fTemp66); + double fTemp217 = (1.167231677575339e-17 * fTemp15); + double fTemp218 = (1.7829758386797603e-17 * fTemp24); + double fTemp219 = (0.011117382399029449 * fTemp33); + double fTemp220 = (1.3478030465095617e-17 * fTemp36); + double fTemp221 = (0.02941382905783858 * fTemp39); + double fTemp222 = (fRec1[0] * (((0.021093750000000001 * (fTemp3 + fTemp209)) + (fTemp210 + ((fTemp193 + (fTemp211 + fTemp212)) + fTemp213))) - (fTemp182 + (fTemp159 + (fTemp214 + (fTemp215 + (fTemp163 + (fTemp165 + (fTemp216 + (fTemp179 + ((((fTemp177 + (fTemp176 + ((fTemp175 + fTemp217) + fTemp218))) + fTemp219) + fTemp220) + fTemp221))))))))))); + fRec158[0] = max((fRec158[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp222)))))); + fVbargraph46 = FAUSTFLOAT(fRec158[0]); + output21[i] = FAUSTFLOAT(fTemp222); + double fTemp223 = (fTemp0 - fTemp3); + double fTemp224 = (0.021093750000000001 * fTemp223); + double fTemp225 = (fRec1[0] * ((fTemp224 + (fTemp174 + (fTemp161 + (fTemp162 + (fTemp163 + (fTemp164 + (fTemp165 + (fTemp166 + (fTemp178 + (fTemp173 + (fTemp171 + (fTemp175 + (fTemp168 + fTemp170))))))))))))) - (fTemp158 + (fTemp159 + (fTemp160 + (fTemp179 + (fTemp177 + (fTemp176 + (fTemp169 + fTemp172))))))))); + fRec159[0] = max((fRec159[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp225)))))); + fVbargraph47 = FAUSTFLOAT(fRec159[0]); + output22[i] = FAUSTFLOAT(fTemp225); + double fTemp226 = (fRec1[0] * ((fTemp224 + (fTemp159 + (fTemp184 + (fTemp185 + (fTemp186 + (fTemp187 + (fTemp188 + (fTemp194 + (fTemp175 + (fTemp167 + fTemp191)))))))))) - (fTemp181 + (fTemp182 + (fTemp183 + (fTemp163 + (fTemp165 + (fTemp179 + (fTemp189 + (fTemp195 + (fTemp177 + (fTemp193 + (fTemp190 + fTemp192))))))))))))); + fRec160[0] = max((fRec160[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp226)))))); + fVbargraph48 = FAUSTFLOAT(fRec160[0]); + output23[i] = FAUSTFLOAT(fTemp226); + double fTemp227 = (fRec1[0] * ((fTemp158 + (fTemp205 + (fTemp197 + (fTemp163 + (fTemp165 + (fTemp203 + (fTemp201 + (fTemp175 + (fTemp199 + (fTemp167 + fTemp169)))))))))) - ((0.021093750000000001 * (fTemp6 - fTemp223)) + (fTemp159 + (fTemp206 + (fTemp164 + (fTemp198 + (fTemp166 + (fTemp179 + (fTemp204 + (fTemp202 + (fTemp177 + (fTemp207 + fTemp200))))))))))))); + fRec161[0] = max((fRec161[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp227)))))); + fVbargraph49 = FAUSTFLOAT(fRec161[0]); + output24[i] = FAUSTFLOAT(fTemp227); + double fTemp228 = (fRec1[0] * ((fTemp182 + (fTemp159 + (fTemp214 + (fTemp210 + (fTemp221 + (fTemp219 + (fTemp218 + (fTemp193 + (fTemp175 + fTemp211))))))))) - ((0.021093750000000001 * (fTemp3 - fTemp209)) + (fTemp215 + (fTemp163 + (fTemp213 + (fTemp165 + (fTemp216 + (fTemp179 + (fTemp220 + (fTemp177 + (fTemp176 + (fTemp212 + fTemp217))))))))))))); + fRec162[0] = max((fRec162[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp228)))))); + fVbargraph50 = FAUSTFLOAT(fRec162[0]); + output25[i] = FAUSTFLOAT(fTemp228); + double fTemp229 = (0.021308452520676528 * (fTemp12 + fTemp92)); + double fTemp230 = (0.010535180889746065 * (fTemp6 + fTemp57)); + double fTemp231 = (0.016998264729033836 * fTemp95); + double fTemp232 = (0.0062770252486745223 * fTemp110); + double fTemp233 = (0.0023131708388267431 * fTemp63); + double fTemp234 = (0.0071028175068921654 * fTemp55); + double fTemp235 = (0.035587388102713349 * fTemp100); + double fTemp236 = (0.02907849643359095 * fTemp69); + double fTemp237 = (0.030460165261409405 * fTemp66); + double fTemp238 = (0.02017333553791887 * fTemp0); + double fTemp239 = (0.031605542669238249 * fTemp3); + double fTemp240 = (fTemp238 + fTemp239); + double fTemp241 = (0.032806508796871948 * fTemp9); + double fTemp242 = (fTemp240 + fTemp241); + double fTemp243 = (0.0263335984839893 * fTemp18); + double fTemp244 = (fTemp242 + fTemp243); + double fTemp245 = (0.030460165261409402 * fTemp21); + double fTemp246 = (0.014254712301587407 * fTemp30); + double fTemp247 = (0.035587388102713342 * fTemp33); + double fTemp248 = (4.7584639941967359e-19 * fTemp61); + double fTemp249 = (1.1422201709353029e-18 * fTemp15); + double fTemp250 = (2.7335294515958808e-18 * fTemp24); + double fTemp251 = (0.0023131708388267449 * fTemp27); + double fTemp252 = (4.6761788733398907e-18 * fTemp36); + double fTemp253 = (0.0062770252486745275 * fTemp39); + double fTemp254 = (0.0014795090396723079 * fTemp42); + double fTemp255 = (fRec1[0] * ((fTemp229 + (fTemp230 + (fTemp231 + (fTemp232 + (fTemp233 + (fTemp234 + (fTemp235 + (fTemp236 + (fTemp237 + (((fTemp244 + fTemp245) + fTemp246) + fTemp247)))))))))) - (fTemp248 + (((((fTemp249 + fTemp250) + fTemp251) + fTemp252) + fTemp253) + fTemp254)))); + fRec163[0] = max((fRec163[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp255)))))); + fVbargraph51 = FAUSTFLOAT(fRec163[0]); + output26[i] = FAUSTFLOAT(fTemp255); + double fTemp256 = (0.0062770252486745231 * fTemp110); + double fTemp257 = (5.4356280292327993e-19 * fTemp61); + double fTemp258 = (0.0023131708388267444 * fTemp27); + double fTemp259 = (0.0062770252486745266 * fTemp39); + double fTemp260 = (0.021308452520676528 * (fTemp12 - fTemp92)); + double fTemp261 = (0.010535180889746065 * (fTemp6 - fTemp57)); + double fTemp262 = (1.3047664087114909e-18 * fTemp15); + double fTemp263 = (3.1225305737205953e-18 * fTemp24); + double fTemp264 = (5.3416331372122328e-18 * fTemp36); + double fTemp265 = (fRec1[0] * ((fTemp256 + (fTemp257 + (fTemp233 + (fTemp235 + (fTemp237 + ((fTemp246 + (fTemp244 + fTemp258)) + fTemp259)))))) - (fTemp260 + (fTemp261 + (fTemp231 + (fTemp234 + (fTemp236 + (fTemp254 + ((fTemp247 + ((fTemp245 + fTemp262) + fTemp263)) + fTemp264))))))))); + fRec164[0] = max((fRec164[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp265)))))); + fVbargraph52 = FAUSTFLOAT(fRec164[0]); + output27[i] = FAUSTFLOAT(fTemp265); + double fTemp266 = (9.0593800487213328e-19 * fTemp61); + double fTemp267 = (2.1746106811858183e-18 * fTemp15); + double fTemp268 = (5.2042176228676594e-18 * fTemp24); + double fTemp269 = (0.0023131708388267409 * fTemp27); + double fTemp270 = (8.902721895353721e-18 * fTemp36); + double fTemp271 = (0.0062770252486745171 * fTemp39); + double fTemp272 = (0.021308452520676528 * fTemp92); + double fTemp273 = (0.0062770252486745335 * fTemp110); + double fTemp274 = (0.002313170838826747 * fTemp63); + double fTemp275 = (0.010535180889746065 * fTemp57); + double fTemp276 = (0.035587388102713342 * fTemp100); + double fTemp277 = (0.030460165261409402 * fTemp66); + double fTemp278 = (0.010535180889746067 * fTemp6); + double fTemp279 = (0.021308452520676532 * fTemp12); + double fTemp280 = (0.030460165261409412 * fTemp21); + double fTemp281 = (0.035587388102713349 * fTemp33); + double fTemp282 = (fRec1[0] * ((fTemp231 + (fTemp266 + (fTemp234 + (fTemp236 + (((fTemp246 + (((fTemp243 + (fTemp242 + fTemp267)) + fTemp268) + fTemp269)) + fTemp270) + fTemp271))))) - (fTemp272 + (fTemp273 + (fTemp274 + (fTemp275 + (fTemp276 + (fTemp277 + (fTemp254 + (((fTemp278 + fTemp279) + fTemp280) + fTemp281)))))))))); + fRec165[0] = max((fRec165[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp282)))))); + fVbargraph53 = FAUSTFLOAT(fRec165[0]); + output28[i] = FAUSTFLOAT(fTemp282); + double fTemp283 = (1.2683132068209864e-18 * fTemp61); + double fTemp284 = (0.010535180889746063 * fTemp6); + double fTemp285 = (0.021308452520676525 * fTemp12); + double fTemp286 = (0.030460165261409398 * fTemp21); + double fTemp287 = (0.035587388102713335 * fTemp33); + double fTemp288 = (0.021308452520676532 * fTemp92); + double fTemp289 = (0.0062770252486745266 * fTemp110); + double fTemp290 = (0.0023131708388267444 * fTemp63); + double fTemp291 = (0.010535180889746067 * fTemp57); + double fTemp292 = (0.030460165261409412 * fTemp66); + double fTemp293 = (3.0444549536601452e-18 * fTemp15); + double fTemp294 = (7.2859046720147234e-18 * fTemp24); + double fTemp295 = (0.0023131708388267431 * fTemp27); + double fTemp296 = (1.246381065349521e-17 * fTemp36); + double fTemp297 = (0.0062770252486745231 * fTemp39); + double fTemp298 = (fRec1[0] * ((fTemp283 + ((fTemp246 + ((fTemp243 + ((fTemp241 + (fTemp240 + fTemp284)) + fTemp285)) + fTemp286)) + fTemp287)) - (fTemp288 + (fTemp231 + (fTemp289 + (fTemp290 + (fTemp234 + (fTemp291 + (fTemp235 + (fTemp236 + (fTemp292 + (fTemp254 + ((((fTemp293 + fTemp294) + fTemp295) + fTemp296) + fTemp297))))))))))))); + fRec166[0] = max((fRec166[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp298)))))); + fVbargraph54 = FAUSTFLOAT(fRec166[0]); + output29[i] = FAUSTFLOAT(fTemp298); + double fTemp299 = (0.0071028175068921914 * fTemp92); + double fTemp300 = (0.016998264729033888 * fTemp95); + double fTemp301 = (0.027200442744256398 * fTemp110); + double fTemp302 = (0.035508216952135616 * fTemp61); + double fTemp303 = (0.030071220904747824 * fTemp63); + double fTemp304 = (0.021308452520676577 * fTemp55); + double fTemp305 = (0.010535180889746094 * fTemp57); + double fTemp306 = (0.010535180889746075 * fTemp3); + double fTemp307 = (fTemp238 + fTemp306); + double fTemp308 = (0.031605542669238242 * fTemp6); + double fTemp309 = (0.021308452520676542 * fTemp12); + double fTemp310 = (0.028411270027568724 * fTemp15); + double fTemp311 = (0.022664352972045144 * fTemp24); + double fTemp312 = (0.020818537549440738 * fTemp27); + double fTemp313 = (0.0042514054232804356 * fTemp30); + double fTemp314 = (0.018831075746023603 * fTemp39); + double fTemp315 = (0.010356563277706152 * fTemp42); + double fTemp316 = (0.010280801007450534 * fTemp100); + double fTemp317 = (0.006710422253905635 * fTemp69); + double fTemp318 = (0.0053753232814252047 * fTemp66); + double fTemp319 = (0.01640325439843596 * fTemp9); + double fTemp320 = (0.020481687709769415 * fTemp18); + double fTemp321 = (fTemp319 + fTemp320); + double fTemp322 = (0.016125969844275591 * fTemp21); + double fTemp323 = (0.030842403022351559 * fTemp33); + double fTemp324 = (0.0089472296718741632 * fTemp36); + double fTemp325 = (fRec1[0] * ((fTemp299 + (fTemp300 + (fTemp301 + (fTemp302 + (fTemp303 + (fTemp304 + (fTemp305 + ((((((((fTemp307 + fTemp308) + fTemp309) + fTemp310) + fTemp311) + fTemp312) + fTemp313) + fTemp314) + fTemp315)))))))) - (fTemp316 + (fTemp317 + (fTemp318 + (((fTemp321 + fTemp322) + fTemp323) + fTemp324)))))); + fRec167[0] = max((fRec167[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp325)))))); + fVbargraph55 = FAUSTFLOAT(fRec167[0]); + output30[i] = FAUSTFLOAT(fTemp325); + double fTemp326 = (0.021308452520676546 * fTemp92); + double fTemp327 = (0.016998264729033867 * fTemp95); + double fTemp328 = (0.021308452520676556 * fTemp55); + double fTemp329 = (0.031605542669238242 * fTemp57); + double fTemp330 = (0.010535180889746081 * fTemp6); + double fTemp331 = (0.0071028175068921827 * fTemp12); + double fTemp332 = (0.0089472296718741701 * fTemp36); + double fTemp333 = (0.010356563277706217 * fTemp42); + double fTemp334 = (0.018831075746023641 * fTemp110); + double fTemp335 = (0.035508216952135595 * fTemp61); + double fTemp336 = (0.020818537549440783 * fTemp63); + double fTemp337 = (0.030842403022351562 * fTemp100); + double fTemp338 = (0.0067104222539056272 * fTemp69); + double fTemp339 = (0.016125969844275591 * fTemp66); + double fTemp340 = (0.028411270027568741 * fTemp15); + double fTemp341 = (0.0053753232814251978 * fTemp21); + double fTemp342 = (0.022664352972045162 * fTemp24); + double fTemp343 = (0.030071220904747797 * fTemp27); + double fTemp344 = (0.010280801007450522 * fTemp33); + double fTemp345 = (0.027200442744256374 * fTemp39); + double fTemp346 = (fRec1[0] * ((fTemp326 + (fTemp327 + (fTemp328 + (fTemp329 + (((fTemp313 + ((fTemp307 + fTemp330) + fTemp331)) + fTemp332) + fTemp333))))) - (fTemp334 + (fTemp335 + (fTemp336 + (fTemp337 + (fTemp338 + (fTemp339 + ((((((fTemp320 + (fTemp319 + fTemp340)) + fTemp341) + fTemp342) + fTemp343) + fTemp344) + fTemp345))))))))); + fRec168[0] = max((fRec168[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp346)))))); + fVbargraph56 = FAUSTFLOAT(fRec168[0]); + output31[i] = FAUSTFLOAT(fTemp346); + double fTemp347 = (0.021308452520676553 * fTemp92); + double fTemp348 = (0.0067104222539056254 * fTemp69); + double fTemp349 = (0.0053753232814251969 * fTemp21); + double fTemp350 = (0.03007122090474779 * fTemp27); + double fTemp351 = (0.010280801007450517 * fTemp33); + double fTemp352 = (0.0089472296718741719 * fTemp36); + double fTemp353 = (0.027200442744256363 * fTemp39); + double fTemp354 = (0.010356563277706232 * fTemp42); + double fTemp355 = (0.016998264729033864 * fTemp95); + double fTemp356 = (0.018831075746023648 * fTemp110); + double fTemp357 = (0.02081853754944079 * fTemp63); + double fTemp358 = (0.021308452520676546 * fTemp55); + double fTemp359 = (0.016125969844275594 * fTemp66); + double fTemp360 = (0.010535180889746079 * fTemp6); + double fTemp361 = (0.007102817506892181 * fTemp12); + double fTemp362 = (0.028411270027568745 * fTemp15); + double fTemp363 = (0.030842403022351569 * fTemp100); + double fTemp364 = (fRec1[0] * ((fTemp347 + (fTemp335 + (fTemp329 + (fTemp348 + (((((fTemp313 + ((fTemp307 + fTemp349) + fTemp350)) + fTemp351) + fTemp352) + fTemp353) + fTemp354))))) - (fTemp355 + (fTemp356 + (fTemp357 + (fTemp358 + ((fTemp359 + (fTemp342 + (fTemp320 + (((fTemp319 + fTemp360) + fTemp361) + fTemp362)))) + fTemp363))))))); + fRec169[0] = max((fRec169[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp364)))))); + fVbargraph57 = FAUSTFLOAT(fRec169[0]); + output32[i] = FAUSTFLOAT(fTemp364); + double fTemp365 = (0.0071028175068921931 * fTemp92); + double fTemp366 = (0.027200442744256408 * fTemp110); + double fTemp367 = (0.030071220904747838 * fTemp63); + double fTemp368 = (0.010535180889746096 * fTemp57); + double fTemp369 = (0.0067104222539056367 * fTemp69); + double fTemp370 = (0.028411270027568717 * fTemp15); + double fTemp371 = (0.022664352972045138 * fTemp24); + double fTemp372 = (0.010356563277706145 * fTemp42); + double fTemp373 = (0.021308452520676584 * fTemp55); + double fTemp374 = (0.010280801007450538 * fTemp100); + double fTemp375 = (0.0053753232814252056 * fTemp66); + double fTemp376 = (fTemp308 + fTemp319); + double fTemp377 = (0.020818537549440724 * fTemp27); + double fTemp378 = (0.018831075746023586 * fTemp39); + double fTemp379 = (fRec1[0] * ((fTemp365 + (fTemp366 + (fTemp367 + (fTemp368 + (fTemp369 + ((fTemp323 + (fTemp313 + ((fTemp322 + (fTemp307 + fTemp370)) + fTemp371))) + fTemp372)))))) - (fTemp300 + (fTemp302 + (fTemp373 + (fTemp374 + (fTemp375 + ((fTemp324 + ((fTemp320 + (fTemp309 + fTemp376)) + fTemp377)) + fTemp378)))))))); + fRec170[0] = max((fRec170[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp379)))))); + fVbargraph58 = FAUSTFLOAT(fRec170[0]); + output33[i] = FAUSTFLOAT(fTemp379); + double fTemp380 = (0.016998264729033881 * fTemp95); + double fTemp381 = (0.035508216952135609 * fTemp61); + double fTemp382 = (0.02130845252067657 * fTemp55); + double fTemp383 = (0.010280801007450529 * fTemp100); + double fTemp384 = (0.0053753232814252021 * fTemp66); + double fTemp385 = (0.028411270027568731 * fTemp15); + double fTemp386 = (0.022664352972045151 * fTemp24); + double fTemp387 = (0.030842403022351562 * fTemp33); + double fTemp388 = (0.010356563277706178 * fTemp42); + double fTemp389 = (0.0071028175068921871 * fTemp92); + double fTemp390 = (0.030071220904747821 * fTemp63); + double fTemp391 = (0.010535180889746089 * fTemp57); + double fTemp392 = (0.0067104222539056315 * fTemp69); + double fTemp393 = (0.021308452520676546 * fTemp12); + double fTemp394 = (0.020818537549440744 * fTemp27); + double fTemp395 = (0.0089472296718741667 * fTemp36); + double fTemp396 = (0.01883107574602361 * fTemp39); + double fTemp397 = (fRec1[0] * ((fTemp380 + (fTemp381 + (fTemp382 + (fTemp383 + (fTemp384 + (((fTemp313 + ((fTemp322 + (fTemp307 + fTemp385)) + fTemp386)) + fTemp387) + fTemp388)))))) - (fTemp389 + (fTemp301 + (fTemp390 + (fTemp391 + (fTemp392 + ((((fTemp320 + (fTemp376 + fTemp393)) + fTemp394) + fTemp395) + fTemp396)))))))); + fRec171[0] = max((fRec171[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp397)))))); + fVbargraph59 = FAUSTFLOAT(fRec171[0]); + output34[i] = FAUSTFLOAT(fTemp397); + double fTemp398 = (0.016998264729033874 * fTemp95); + double fTemp399 = (0.018831075746023631 * fTemp110); + double fTemp400 = (0.020818537549440772 * fTemp63); + double fTemp401 = (0.021308452520676563 * fTemp55); + double fTemp402 = (0.0053753232814252004 * fTemp21); + double fTemp403 = (0.0300712209047478 * fTemp27); + double fTemp404 = (0.010280801007450525 * fTemp33); + double fTemp405 = (0.0089472296718741684 * fTemp36); + double fTemp406 = (0.027200442744256377 * fTemp39); + double fTemp407 = (0.010356563277706199 * fTemp42); + double fTemp408 = (0.010535180889746086 * fTemp6); + double fTemp409 = (0.0071028175068921853 * fTemp12); + double fTemp410 = (0.028411270027568734 * fTemp15); + double fTemp411 = (0.0067104222539056298 * fTemp69); + double fTemp412 = (fRec1[0] * ((fTemp398 + (fTemp399 + (fTemp400 + (fTemp401 + (fTemp337 + (fTemp339 + (((((fTemp313 + ((fTemp307 + fTemp402) + fTemp403)) + fTemp404) + fTemp405) + fTemp406) + fTemp407))))))) - (fTemp326 + (fTemp381 + (fTemp329 + ((fTemp386 + (fTemp320 + (((fTemp319 + fTemp408) + fTemp409) + fTemp410))) + fTemp411)))))); + fRec172[0] = max((fRec172[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp412)))))); + fVbargraph60 = FAUSTFLOAT(fRec172[0]); + output35[i] = FAUSTFLOAT(fTemp412); + double fTemp413 = (0.018831075746023662 * fTemp110); + double fTemp414 = (0.035508216952135588 * fTemp61); + double fTemp415 = (0.020818537549440803 * fTemp63); + double fTemp416 = (0.0067104222539056237 * fTemp69); + double fTemp417 = (0.010535180889746074 * fTemp6); + double fTemp418 = (0.0071028175068921775 * fTemp12); + double fTemp419 = (0.0089472296718741736 * fTemp36); + double fTemp420 = (0.010356563277706251 * fTemp42); + double fTemp421 = (0.016998264729033857 * fTemp95); + double fTemp422 = (0.021308452520676542 * fTemp55); + double fTemp423 = (0.028411270027568748 * fTemp15); + double fTemp424 = (0.0053753232814251943 * fTemp21); + double fTemp425 = (0.022664352972045165 * fTemp24); + double fTemp426 = (0.030071220904747779 * fTemp27); + double fTemp427 = (0.010280801007450515 * fTemp33); + double fTemp428 = (0.027200442744256356 * fTemp39); + double fTemp429 = (fRec1[0] * ((fTemp413 + (fTemp414 + (fTemp415 + (fTemp363 + (fTemp416 + (fTemp359 + (((fTemp313 + ((fTemp307 + fTemp417) + fTemp418)) + fTemp419) + fTemp420))))))) - (fTemp347 + (fTemp421 + (fTemp422 + (fTemp329 + ((((((fTemp320 + (fTemp319 + fTemp423)) + fTemp424) + fTemp425) + fTemp426) + fTemp427) + fTemp428))))))); + fRec173[0] = max((fRec173[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp429)))))); + fVbargraph61 = FAUSTFLOAT(fRec173[0]); + output36[i] = FAUSTFLOAT(fTemp429); + double fTemp430 = (0.010280801007450555 * fTemp100); + double fTemp431 = (0.0067104222539056471 * fTemp69); + double fTemp432 = (0.0053753232814252143 * fTemp66); + double fTemp433 = (0.031605542669238228 * fTemp6); + double fTemp434 = (0.021308452520676539 * fTemp12); + double fTemp435 = (0.028411270027568696 * fTemp15); + double fTemp436 = (0.02266435297204512 * fTemp24); + double fTemp437 = (0.02081853754944071 * fTemp27); + double fTemp438 = (0.018831075746023575 * fTemp39); + double fTemp439 = (0.010356563277706064 * fTemp42); + double fTemp440 = (0.0071028175068922053 * fTemp92); + double fTemp441 = (0.016998264729033919 * fTemp95); + double fTemp442 = (0.027200442744256415 * fTemp110); + double fTemp443 = (0.035508216952135643 * fTemp61); + double fTemp444 = (0.030071220904747842 * fTemp63); + double fTemp445 = (0.021308452520676618 * fTemp55); + double fTemp446 = (0.010535180889746113 * fTemp57); + double fTemp447 = (0.016125969844275587 * fTemp21); + double fTemp448 = (0.030842403022351552 * fTemp33); + double fTemp449 = (0.0089472296718741563 * fTemp36); + double fTemp450 = (fRec1[0] * ((fTemp430 + (fTemp431 + (fTemp432 + (((fTemp313 + (((((fTemp307 + fTemp433) + fTemp434) + fTemp435) + fTemp436) + fTemp437)) + fTemp438) + fTemp439)))) - (fTemp440 + (fTemp441 + (fTemp442 + (fTemp443 + (fTemp444 + (fTemp445 + (fTemp446 + (((fTemp321 + fTemp447) + fTemp448) + fTemp449)))))))))); + fRec174[0] = max((fRec174[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp450)))))); + fVbargraph62 = FAUSTFLOAT(fRec174[0]); + output37[i] = FAUSTFLOAT(fTemp450); + double fTemp451 = (fTemp306 + fTemp319); + double fTemp452 = (fRec1[0] * ((fTemp302 + (fTemp303 + (fTemp304 + (fTemp305 + (fTemp316 + (fTemp315 + (fTemp323 + (fTemp313 + (fTemp312 + (fTemp320 + (fTemp310 + (fTemp238 + fTemp308)))))))))))) - (fTemp299 + (fTemp300 + (fTemp301 + (fTemp317 + (fTemp318 + (fTemp314 + (fTemp324 + (fTemp311 + (fTemp322 + (fTemp309 + fTemp451)))))))))))); + fRec175[0] = max((fRec175[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp452)))))); + fVbargraph63 = FAUSTFLOAT(fRec175[0]); + output38[i] = FAUSTFLOAT(fTemp452); + double fTemp453 = (fRec1[0] * ((fTemp334 + (fTemp328 + (fTemp329 + (fTemp337 + (fTemp333 + (fTemp345 + (fTemp332 + (fTemp344 + (fTemp313 + (fTemp342 + (fTemp320 + (fTemp238 + fTemp330)))))))))))) - (fTemp326 + (fTemp327 + (fTemp335 + (fTemp336 + (fTemp338 + (fTemp339 + (fTemp343 + (fTemp341 + (fTemp340 + (fTemp331 + fTemp451)))))))))))); + fRec176[0] = max((fRec176[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp453)))))); + fVbargraph64 = FAUSTFLOAT(fRec176[0]); + output39[i] = FAUSTFLOAT(fTemp453); + double fTemp454 = (fRec1[0] * ((fTemp355 + (fTemp356 + (fTemp335 + (fTemp329 + (fTemp363 + (fTemp348 + (fTemp354 + (fTemp352 + (fTemp313 + (fTemp350 + (fTemp342 + (fTemp349 + (fTemp320 + (fTemp238 + fTemp361)))))))))))))) - (fTemp347 + (fTemp357 + (fTemp358 + (fTemp359 + (fTemp353 + (fTemp351 + (fTemp362 + (fTemp319 + (fTemp306 + fTemp360))))))))))); + fRec177[0] = max((fRec177[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp454)))))); + fVbargraph65 = FAUSTFLOAT(fRec177[0]); + output40[i] = FAUSTFLOAT(fTemp454); + double fTemp455 = (fTemp319 + (fTemp306 + fTemp308)); + double fTemp456 = (fRec1[0] * ((fTemp300 + (fTemp367 + (fTemp368 + (fTemp374 + (fTemp369 + (fTemp372 + (fTemp378 + (fTemp313 + (fTemp322 + (fTemp320 + (fTemp370 + (fTemp238 + fTemp309)))))))))))) - (fTemp365 + (fTemp366 + (fTemp302 + (fTemp373 + (fTemp375 + (fTemp324 + (fTemp323 + (fTemp377 + (fTemp371 + fTemp455))))))))))); + fRec178[0] = max((fRec178[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp456)))))); + fVbargraph66 = FAUSTFLOAT(fRec178[0]); + output41[i] = FAUSTFLOAT(fTemp456); + double fTemp457 = (fRec1[0] * ((fTemp389 + (fTemp301 + (fTemp381 + (fTemp382 + (fTemp384 + (fTemp388 + (fTemp396 + (fTemp313 + (fTemp322 + (fTemp320 + (fTemp385 + (fTemp238 + fTemp393)))))))))))) - (fTemp380 + (fTemp390 + (fTemp391 + (fTemp383 + (fTemp392 + (fTemp395 + (fTemp387 + (fTemp394 + (fTemp386 + fTemp455))))))))))); + fRec179[0] = max((fRec179[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp457)))))); + fVbargraph67 = FAUSTFLOAT(fRec179[0]); + output42[i] = FAUSTFLOAT(fTemp457); + double fTemp458 = (fRec1[0] * ((fTemp326 + (fTemp400 + (fTemp401 + (fTemp339 + (fTemp407 + (fTemp405 + (fTemp313 + (fTemp403 + (fTemp386 + (fTemp402 + (fTemp320 + (fTemp238 + fTemp409)))))))))))) - (fTemp398 + (fTemp399 + (fTemp381 + (fTemp329 + (fTemp337 + (fTemp411 + (fTemp406 + (fTemp404 + (fTemp410 + (fTemp319 + (fTemp306 + fTemp408))))))))))))); + fRec180[0] = max((fRec180[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp458)))))); + fVbargraph68 = FAUSTFLOAT(fRec180[0]); + output43[i] = FAUSTFLOAT(fTemp458); + double fTemp459 = (fRec1[0] * ((fTemp347 + (fTemp421 + (fTemp414 + (fTemp415 + (fTemp416 + (fTemp359 + (fTemp420 + (fTemp428 + (fTemp419 + (fTemp427 + (fTemp313 + (fTemp425 + (fTemp320 + (fTemp238 + fTemp417)))))))))))))) - (fTemp413 + (fTemp422 + (fTemp329 + (fTemp363 + (fTemp426 + (fTemp424 + (fTemp423 + (fTemp418 + fTemp451)))))))))); + fRec181[0] = max((fRec181[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp459)))))); + fVbargraph69 = FAUSTFLOAT(fRec181[0]); + output44[i] = FAUSTFLOAT(fTemp459); + double fTemp460 = (fRec1[0] * ((fTemp440 + (fTemp441 + (fTemp442 + (fTemp431 + (fTemp432 + (fTemp439 + (fTemp448 + (fTemp313 + (fTemp437 + (fTemp320 + (fTemp435 + (fTemp238 + fTemp433)))))))))))) - (fTemp443 + (fTemp444 + (fTemp445 + (fTemp446 + (fTemp430 + (fTemp438 + (fTemp449 + (fTemp436 + (fTemp447 + (fTemp434 + fTemp451)))))))))))); + fRec182[0] = max((fRec182[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp460)))))); + fVbargraph70 = FAUSTFLOAT(fRec182[0]); + output45[i] = FAUSTFLOAT(fTemp460); + double fTemp461 = (fTemp238 + fTemp241); + double fTemp462 = (fRec1[0] * ((fTemp230 + (fTemp233 + (fTemp234 + (fTemp236 + (fTemp237 + (fTemp253 + (fTemp246 + (fTemp250 + (fTemp245 + fTemp461))))))))) - (fTemp229 + (fTemp231 + (fTemp232 + (fTemp248 + (fTemp235 + (fTemp254 + (fTemp252 + (fTemp247 + (fTemp251 + (fTemp243 + (fTemp239 + fTemp249))))))))))))); + fRec183[0] = max((fRec183[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp462)))))); + fVbargraph71 = FAUSTFLOAT(fRec183[0]); + output46[i] = FAUSTFLOAT(fTemp462); + double fTemp463 = (fRec1[0] * ((fTemp260 + (fTemp231 + (fTemp257 + (fTemp233 + (fTemp237 + (fTemp247 + (fTemp246 + (fTemp258 + (fTemp263 + fTemp461))))))))) - (fTemp261 + (fTemp256 + (fTemp234 + (fTemp235 + (fTemp236 + (fTemp254 + (fTemp259 + (fTemp264 + (fTemp245 + (fTemp243 + (fTemp239 + fTemp262))))))))))))); + fRec184[0] = max((fRec184[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp463)))))); + fVbargraph72 = FAUSTFLOAT(fRec184[0]); + output47[i] = FAUSTFLOAT(fTemp463); + double fTemp464 = (fRec1[0] * ((fTemp272 + (fTemp273 + (fTemp266 + (fTemp234 + (fTemp276 + (fTemp236 + (fTemp270 + (fTemp281 + (fTemp246 + (fTemp269 + (fTemp267 + (fTemp279 + fTemp461)))))))))))) - (fTemp231 + (fTemp274 + (fTemp275 + (fTemp277 + (fTemp254 + (fTemp271 + (fTemp268 + (fTemp280 + (fTemp243 + (fTemp239 + fTemp278)))))))))))); + fRec185[0] = max((fRec185[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp464)))))); + fVbargraph73 = FAUSTFLOAT(fRec185[0]); + output48[i] = FAUSTFLOAT(fTemp464); + double fTemp465 = (fRec1[0] * ((fTemp288 + (fTemp231 + (fTemp289 + (fTemp283 + (fTemp235 + (fTemp297 + (fTemp246 + (fTemp294 + (fTemp286 + (fTemp241 + (fTemp238 + fTemp284))))))))))) - (fTemp290 + (fTemp234 + (fTemp291 + (fTemp236 + (fTemp292 + (fTemp254 + (fTemp296 + (fTemp287 + (fTemp295 + (fTemp243 + (fTemp293 + (fTemp239 + fTemp285)))))))))))))); + fRec186[0] = max((fRec186[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp465)))))); + fVbargraph74 = FAUSTFLOAT(fRec186[0]); + output49[i] = FAUSTFLOAT(fTemp465); + fRec1[1] = fRec1[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec7[1] = fRec7[0]; fRec12[1] = fRec12[0]; fRec13[1] = fRec13[0]; - fRec7[1] = fRec7[0]; - fRec8[1] = fRec8[0]; - fRec9[1] = fRec9[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; - fRec6[1] = fRec6[0]; - fRec2[1] = fRec2[0]; - fRec3[1] = fRec3[0]; - fRec1[1] = fRec1[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec24[1] = fRec24[0]; + fRec27[1] = fRec27[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec30[1] = fRec30[0]; + fRec33[1] = fRec33[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fRec43[1] = fRec43[0]; + fRec44[1] = fRec44[0]; + fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec49[1] = fRec49[0]; + fRec50[1] = fRec50[0]; + fRec48[1] = fRec48[0]; + fRec51[1] = fRec51[0]; + fRec52[1] = fRec52[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec56[1] = fRec56[0]; + fRec57[1] = fRec57[0]; + fRec55[1] = fRec55[0]; + fRec58[1] = fRec58[0]; + fRec59[1] = fRec59[0]; + fRec54[1] = fRec54[0]; + fRec53[1] = fRec53[0]; + fRec63[1] = fRec63[0]; + fRec64[1] = fRec64[0]; + fRec62[1] = fRec62[0]; + fRec65[1] = fRec65[0]; + fRec66[1] = fRec66[0]; + fRec61[1] = fRec61[0]; + fRec60[1] = fRec60[0]; + fRec70[1] = fRec70[0]; + fRec71[1] = fRec71[0]; + fRec69[1] = fRec69[0]; + fRec72[1] = fRec72[0]; + fRec73[1] = fRec73[0]; + fRec68[1] = fRec68[0]; + fRec67[1] = fRec67[0]; + fRec77[1] = fRec77[0]; + fRec78[1] = fRec78[0]; + fRec76[1] = fRec76[0]; + fRec79[1] = fRec79[0]; + fRec80[1] = fRec80[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; + fRec0[1] = fRec0[0]; + fRec81[1] = fRec81[0]; + fRec85[1] = fRec85[0]; + fRec86[1] = fRec86[0]; + fRec84[1] = fRec84[0]; + fRec83[1] = fRec83[0]; + fRec89[1] = fRec89[0]; + fRec88[1] = fRec88[0]; + fRec87[1] = fRec87[0]; + fRec93[1] = fRec93[0]; + fRec94[1] = fRec94[0]; + fRec92[1] = fRec92[0]; + fRec95[1] = fRec95[0]; + fRec96[1] = fRec96[0]; + fRec91[1] = fRec91[0]; + fRec90[1] = fRec90[0]; + fRec100[1] = fRec100[0]; + fRec101[1] = fRec101[0]; + fRec99[1] = fRec99[0]; + fRec102[1] = fRec102[0]; + fRec98[1] = fRec98[0]; + fRec97[1] = fRec97[0]; + fRec106[1] = fRec106[0]; + fRec107[1] = fRec107[0]; + fRec105[1] = fRec105[0]; + fRec108[1] = fRec108[0]; + fRec104[1] = fRec104[0]; + fRec103[1] = fRec103[0]; + fRec112[1] = fRec112[0]; + fRec113[1] = fRec113[0]; + fRec111[1] = fRec111[0]; + fRec114[1] = fRec114[0]; + fRec115[1] = fRec115[0]; + fRec110[1] = fRec110[0]; + fRec109[1] = fRec109[0]; + fRec82[1] = fRec82[0]; + fRec116[1] = fRec116[0]; + fRec117[1] = fRec117[0]; + fRec118[1] = fRec118[0]; + fRec119[1] = fRec119[0]; + fRec123[1] = fRec123[0]; + fRec124[1] = fRec124[0]; + fRec122[1] = fRec122[0]; + fRec121[1] = fRec121[0]; + fRec128[1] = fRec128[0]; + fRec129[1] = fRec129[0]; + fRec127[1] = fRec127[0]; + fRec130[1] = fRec130[0]; + fRec126[1] = fRec126[0]; + fRec125[1] = fRec125[0]; + fRec134[1] = fRec134[0]; + fRec135[1] = fRec135[0]; + fRec133[1] = fRec133[0]; + fRec136[1] = fRec136[0]; + fRec137[1] = fRec137[0]; + fRec132[1] = fRec132[0]; + fRec131[1] = fRec131[0]; + fRec141[1] = fRec141[0]; + fRec142[1] = fRec142[0]; + fRec140[1] = fRec140[0]; + fRec143[1] = fRec143[0]; + fRec144[1] = fRec144[0]; + fRec139[1] = fRec139[0]; + fRec138[1] = fRec138[0]; + fRec120[1] = fRec120[0]; + fRec145[1] = fRec145[0]; + fRec146[1] = fRec146[0]; + fRec147[1] = fRec147[0]; + fRec148[1] = fRec148[0]; + fRec149[1] = fRec149[0]; + fRec150[1] = fRec150[0]; + fRec151[1] = fRec151[0]; + fRec152[1] = fRec152[0]; + fRec153[1] = fRec153[0]; + fRec154[1] = fRec154[0]; + fRec155[1] = fRec155[0]; + fRec156[1] = fRec156[0]; + fRec157[1] = fRec157[0]; + fRec158[1] = fRec158[0]; + fRec159[1] = fRec159[0]; + fRec160[1] = fRec160[0]; + fRec161[1] = fRec161[0]; + fRec162[1] = fRec162[0]; + fRec163[1] = fRec163[0]; + fRec164[1] = fRec164[0]; + fRec165[1] = fRec165[0]; + fRec166[1] = fRec166[0]; + fRec167[1] = fRec167[0]; + fRec168[1] = fRec168[0]; + fRec169[1] = fRec169[0]; + fRec170[1] = fRec170[0]; + fRec171[1] = fRec171[0]; + fRec172[1] = fRec172[0]; + fRec173[1] = fRec173[0]; + fRec174[1] = fRec174[0]; + fRec175[1] = fRec175[0]; + fRec176[1] = fRec176[0]; + fRec177[1] = fRec177[0]; + fRec178[1] = fRec178[0]; + fRec179[1] = fRec179[0]; + fRec180[1] = fRec180[0]; + fRec181[1] = fRec181[0]; + fRec182[1] = fRec182[0]; + fRec183[1] = fRec183[0]; + fRec184[1] = fRec184[0]; + fRec185[1] = fRec185[0]; + fRec186[1] = fRec186[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -2939,3 +3867,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOADecLebedev505.cpp b/source/HOAUGens/HOADecLebedev505.cpp old mode 100644 new mode 100755 index 6574f4bb4c..d5522afb80 --- a/source/HOAUGens/HOADecLebedev505.cpp +++ b/source/HOAUGens/HOADecLebedev505.cpp @@ -1,31 +1,14 @@ -//---------------------------------------------------------- -// name: "HOADecLebedev505" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2014" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOADecLebedev505" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,2741 +601,3973 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fConst2; - double fConst3; - double fRec6[2]; - double fRec5[2]; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fRec9[2]; - double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fbargraph2; - double fConst4; - double fRec13[2]; - double fRec12[2]; - double fConst5; - double fRec11[2]; - double fRec10[2]; - FAUSTFLOAT fbargraph3; - double fRec17[2]; - double fRec16[2]; - double fRec15[2]; - double fRec14[2]; - FAUSTFLOAT fbargraph4; - double fRec21[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; - FAUSTFLOAT fbargraph5; - double fConst6; - double fConst7; - double fRec26[2]; - double fRec25[2]; - double fConst8; - double fRec24[2]; - double fConst9; - double fRec27[2]; - double fRec23[2]; - double fRec22[2]; - FAUSTFLOAT fbargraph6; - double fRec32[2]; - double fRec31[2]; - double fRec30[2]; - double fRec33[2]; - double fRec29[2]; - double fRec28[2]; - FAUSTFLOAT fbargraph7; - double fRec38[2]; - double fRec37[2]; - double fRec36[2]; - double fRec39[2]; - double fRec35[2]; - double fRec34[2]; - FAUSTFLOAT fbargraph8; - double fRec44[2]; - double fRec43[2]; - double fRec42[2]; - double fRec45[2]; - double fRec41[2]; - double fRec40[2]; - FAUSTFLOAT fbargraph9; - double fConst10; - double fConst11; - double fRec50[2]; - double fRec49[2]; - double fConst12; - double fRec48[2]; - double fRec52[2]; - double fRec51[2]; - double fConst13; - double fRec47[2]; - double fRec46[2]; - FAUSTFLOAT fbargraph10; - double fRec57[2]; - double fRec56[2]; - double fRec55[2]; - double fRec59[2]; - double fRec58[2]; - double fRec54[2]; - double fRec53[2]; - FAUSTFLOAT fbargraph11; - double fRec64[2]; - double fRec63[2]; - double fRec62[2]; - double fRec66[2]; - double fRec65[2]; - double fRec61[2]; - double fRec60[2]; - FAUSTFLOAT fbargraph12; - double fRec71[2]; - double fRec70[2]; - double fRec69[2]; - double fRec73[2]; - double fRec72[2]; - double fRec68[2]; - double fRec67[2]; - FAUSTFLOAT fbargraph13; - double fRec78[2]; - double fRec77[2]; - double fRec76[2]; - double fRec80[2]; - double fRec79[2]; - double fRec75[2]; - double fRec74[2]; - FAUSTFLOAT fbargraph14; - double fConst14; - double fConst15; - double fConst16; - double fRec86[2]; - double fRec85[2]; - double fConst17; - double fRec84[2]; - double fRec88[2]; - double fRec87[2]; - double fConst18; - double fRec83[2]; - double fConst19; - double fRec89[2]; - double fRec82[2]; - double fRec81[2]; - FAUSTFLOAT fbargraph15; - double fRec95[2]; - double fRec94[2]; - double fRec93[2]; - double fRec97[2]; - double fRec96[2]; - double fRec92[2]; - double fRec98[2]; - double fRec91[2]; - double fRec90[2]; - FAUSTFLOAT fbargraph16; - double fRec104[2]; - double fRec103[2]; - double fRec102[2]; - double fRec106[2]; - double fRec105[2]; - double fRec101[2]; - double fRec107[2]; - double fRec100[2]; - double fRec99[2]; - FAUSTFLOAT fbargraph17; - double fRec113[2]; - double fRec112[2]; - double fRec111[2]; - double fRec115[2]; - double fRec114[2]; - double fRec110[2]; - double fRec116[2]; - double fRec109[2]; - double fRec108[2]; - FAUSTFLOAT fbargraph18; - double fRec122[2]; - double fRec121[2]; - double fRec120[2]; - double fRec124[2]; - double fRec123[2]; - double fRec119[2]; - double fRec125[2]; - double fRec118[2]; - double fRec117[2]; - FAUSTFLOAT fbargraph19; - double fRec131[2]; - double fRec130[2]; - double fRec129[2]; - double fRec133[2]; - double fRec132[2]; - double fRec128[2]; - double fRec134[2]; - double fRec127[2]; - double fRec126[2]; - FAUSTFLOAT fbargraph20; - double fRec0[2]; - FAUSTFLOAT fbargraph21; - double fRec135[2]; - FAUSTFLOAT fbargraph22; - double fRec142[2]; - double fRec141[2]; - double fRec140[2]; - double fRec144[2]; - double fRec143[2]; - double fRec139[2]; - double fRec145[2]; - double fRec138[2]; - double fRec137[2]; - FAUSTFLOAT fbargraph23; - double fRec151[2]; - double fRec150[2]; - double fRec149[2]; - double fRec153[2]; - double fRec152[2]; - double fRec148[2]; - double fRec154[2]; - double fRec147[2]; - double fRec146[2]; - FAUSTFLOAT fbargraph24; - double fRec158[2]; - double fRec157[2]; - double fRec156[2]; - double fRec155[2]; - FAUSTFLOAT fbargraph25; - double fRec161[2]; - double fRec160[2]; - double fRec159[2]; - FAUSTFLOAT fbargraph26; - double fRec167[2]; - double fRec166[2]; - double fRec165[2]; - double fRec169[2]; - double fRec168[2]; - double fRec164[2]; - double fRec170[2]; - double fRec163[2]; - double fRec162[2]; - FAUSTFLOAT fbargraph27; - double fRec175[2]; - double fRec174[2]; - double fRec173[2]; - double fRec177[2]; - double fRec176[2]; - double fRec172[2]; - double fRec171[2]; - FAUSTFLOAT fbargraph28; - double fRec182[2]; - double fRec181[2]; - double fRec180[2]; - double fRec183[2]; - double fRec179[2]; - double fRec178[2]; - FAUSTFLOAT fbargraph29; - double fRec188[2]; - double fRec187[2]; - double fRec186[2]; - double fRec189[2]; - double fRec185[2]; - double fRec184[2]; - FAUSTFLOAT fbargraph30; - double fRec194[2]; - double fRec193[2]; - double fRec192[2]; - double fRec196[2]; - double fRec195[2]; - double fRec191[2]; - double fRec190[2]; - FAUSTFLOAT fbargraph31; - double fRec136[2]; - FAUSTFLOAT fbargraph32; - double fRec197[2]; - FAUSTFLOAT fbargraph33; - double fRec198[2]; - FAUSTFLOAT fbargraph34; - double fRec199[2]; - FAUSTFLOAT fbargraph35; - double fRec200[2]; - FAUSTFLOAT fbargraph36; - double fRec205[2]; - double fRec204[2]; - double fRec203[2]; - double fRec202[2]; - FAUSTFLOAT fbargraph37; - double fRec210[2]; - double fRec209[2]; - double fRec208[2]; - double fRec211[2]; - double fRec207[2]; - double fRec206[2]; - FAUSTFLOAT fbargraph38; - double fRec217[2]; - double fRec216[2]; - double fRec215[2]; - double fRec219[2]; - double fRec218[2]; - double fRec214[2]; - double fRec220[2]; - double fRec213[2]; - double fRec212[2]; - FAUSTFLOAT fbargraph39; - double fRec225[2]; - double fRec224[2]; - double fRec223[2]; - double fRec227[2]; - double fRec226[2]; - double fRec222[2]; - double fRec221[2]; - FAUSTFLOAT fbargraph40; - double fRec233[2]; - double fRec232[2]; - double fRec231[2]; - double fRec235[2]; - double fRec234[2]; - double fRec230[2]; - double fRec236[2]; - double fRec229[2]; - double fRec228[2]; - FAUSTFLOAT fbargraph41; - double fRec241[2]; - double fRec240[2]; - double fRec239[2]; - double fRec243[2]; - double fRec242[2]; - double fRec238[2]; - double fRec237[2]; - FAUSTFLOAT fbargraph42; - double fRec201[2]; - FAUSTFLOAT fbargraph43; - double fRec244[2]; - FAUSTFLOAT fbargraph44; - double fRec245[2]; - FAUSTFLOAT fbargraph45; - double fRec246[2]; - FAUSTFLOAT fbargraph46; - double fRec247[2]; - FAUSTFLOAT fbargraph47; - double fRec248[2]; - FAUSTFLOAT fbargraph48; - double fRec249[2]; - FAUSTFLOAT fbargraph49; - double fRec250[2]; - FAUSTFLOAT fbargraph50; - double fRec251[2]; - FAUSTFLOAT fbargraph51; - double fRec252[2]; - FAUSTFLOAT fbargraph52; - double fRec253[2]; - FAUSTFLOAT fbargraph53; - double fRec254[2]; - FAUSTFLOAT fbargraph54; - double fRec255[2]; - FAUSTFLOAT fbargraph55; - double fRec256[2]; - FAUSTFLOAT fbargraph56; - double fRec257[2]; - FAUSTFLOAT fbargraph57; - double fRec258[2]; - FAUSTFLOAT fbargraph58; - double fRec259[2]; - FAUSTFLOAT fbargraph59; - double fRec260[2]; - FAUSTFLOAT fbargraph60; - double fRec261[2]; - FAUSTFLOAT fbargraph61; - double fRec262[2]; - FAUSTFLOAT fbargraph62; - double fRec263[2]; - FAUSTFLOAT fbargraph63; - double fRec264[2]; - FAUSTFLOAT fbargraph64; - double fRec265[2]; - FAUSTFLOAT fbargraph65; - double fRec266[2]; - FAUSTFLOAT fbargraph66; - double fRec267[2]; - FAUSTFLOAT fbargraph67; - double fRec268[2]; - FAUSTFLOAT fbargraph68; - double fRec269[2]; - FAUSTFLOAT fbargraph69; - double fRec270[2]; - FAUSTFLOAT fbargraph70; - double fRec271[2]; - FAUSTFLOAT fbargraph71; - double fRec272[2]; - FAUSTFLOAT fbargraph72; - double fRec273[2]; - FAUSTFLOAT fbargraph73; - double fRec274[2]; - FAUSTFLOAT fbargraph74; - double fRec275[2]; - FAUSTFLOAT fbargraph75; - double fRec276[2]; - FAUSTFLOAT fbargraph76; - double fRec277[2]; - FAUSTFLOAT fbargraph77; - double fRec278[2]; - FAUSTFLOAT fbargraph78; - double fRec279[2]; - FAUSTFLOAT fbargraph79; - double fRec280[2]; - FAUSTFLOAT fbargraph80; - double fRec281[2]; - FAUSTFLOAT fbargraph81; - double fRec282[2]; - FAUSTFLOAT fbargraph82; - double fRec283[2]; - FAUSTFLOAT fbargraph83; - double fRec284[2]; - FAUSTFLOAT fbargraph84; - double fRec285[2]; - FAUSTFLOAT fbargraph85; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOADecLebedev505"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fConst2; + double fConst3; + double fRec6[2]; + double fRec5[2]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fRec9[2]; + double fRec8[2]; + double fRec7[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec12[2]; + double fRec13[2]; + double fRec11[2]; + double fRec10[2]; + FAUSTFLOAT fVbargraph3; + double fRec16[2]; + double fRec17[2]; + double fRec15[2]; + double fRec14[2]; + FAUSTFLOAT fVbargraph4; + double fRec20[2]; + double fRec21[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph5; + double fConst6; + double fConst7; + double fConst8; + double fRec25[2]; + double fRec26[2]; + double fRec24[2]; + double fConst9; + double fRec27[2]; + double fRec23[2]; + double fRec22[2]; + FAUSTFLOAT fVbargraph6; + double fRec31[2]; + double fRec32[2]; + double fRec30[2]; + double fRec33[2]; + double fRec29[2]; + double fRec28[2]; + FAUSTFLOAT fVbargraph7; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fRec35[2]; + double fRec34[2]; + FAUSTFLOAT fVbargraph8; + double fRec43[2]; + double fRec44[2]; + double fRec42[2]; + double fRec45[2]; + double fRec41[2]; + double fRec40[2]; + FAUSTFLOAT fVbargraph9; + double fConst10; + double fConst11; + double fConst12; + double fRec49[2]; + double fRec50[2]; + double fRec48[2]; + double fConst13; + double fRec51[2]; + double fRec52[2]; + double fRec47[2]; + double fRec46[2]; + FAUSTFLOAT fVbargraph10; + double fRec56[2]; + double fRec57[2]; + double fRec55[2]; + double fRec58[2]; + double fRec59[2]; + double fRec54[2]; + double fRec53[2]; + FAUSTFLOAT fVbargraph11; + double fRec63[2]; + double fRec64[2]; + double fRec62[2]; + double fRec65[2]; + double fRec66[2]; + double fRec61[2]; + double fRec60[2]; + FAUSTFLOAT fVbargraph12; + double fRec70[2]; + double fRec71[2]; + double fRec69[2]; + double fRec72[2]; + double fRec73[2]; + double fRec68[2]; + double fRec67[2]; + FAUSTFLOAT fVbargraph13; + double fRec77[2]; + double fRec78[2]; + double fRec76[2]; + double fRec79[2]; + double fRec80[2]; + double fRec75[2]; + double fRec74[2]; + FAUSTFLOAT fVbargraph14; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fRec85[2]; + double fRec86[2]; + double fRec84[2]; + double fConst18; + double fRec87[2]; + double fRec88[2]; + double fRec83[2]; + double fConst19; + double fRec89[2]; + double fRec82[2]; + double fRec81[2]; + FAUSTFLOAT fVbargraph15; + double fRec94[2]; + double fRec95[2]; + double fRec93[2]; + double fRec96[2]; + double fRec97[2]; + double fRec92[2]; + double fRec98[2]; + double fRec91[2]; + double fRec90[2]; + FAUSTFLOAT fVbargraph16; + double fRec103[2]; + double fRec104[2]; + double fRec102[2]; + double fRec105[2]; + double fRec106[2]; + double fRec101[2]; + double fRec107[2]; + double fRec100[2]; + double fRec99[2]; + FAUSTFLOAT fVbargraph17; + double fRec112[2]; + double fRec113[2]; + double fRec111[2]; + double fRec114[2]; + double fRec115[2]; + double fRec110[2]; + double fRec116[2]; + double fRec109[2]; + double fRec108[2]; + FAUSTFLOAT fVbargraph18; + double fRec121[2]; + double fRec122[2]; + double fRec120[2]; + double fRec123[2]; + double fRec124[2]; + double fRec119[2]; + double fRec125[2]; + double fRec118[2]; + double fRec117[2]; + FAUSTFLOAT fVbargraph19; + double fRec130[2]; + double fRec131[2]; + double fRec129[2]; + double fRec132[2]; + double fRec133[2]; + double fRec128[2]; + double fRec134[2]; + double fRec127[2]; + double fRec126[2]; + FAUSTFLOAT fVbargraph20; + double fRec0[2]; + FAUSTFLOAT fVbargraph21; + double fRec135[2]; + FAUSTFLOAT fVbargraph22; + double fRec141[2]; + double fRec142[2]; + double fRec140[2]; + double fRec143[2]; + double fRec144[2]; + double fRec139[2]; + double fRec145[2]; + double fRec138[2]; + double fRec137[2]; + FAUSTFLOAT fVbargraph23; + double fRec150[2]; + double fRec151[2]; + double fRec149[2]; + double fRec152[2]; + double fRec153[2]; + double fRec148[2]; + double fRec154[2]; + double fRec147[2]; + double fRec146[2]; + FAUSTFLOAT fVbargraph24; + double fRec157[2]; + double fRec158[2]; + double fRec156[2]; + double fRec155[2]; + FAUSTFLOAT fVbargraph25; + double fRec161[2]; + double fRec160[2]; + double fRec159[2]; + FAUSTFLOAT fVbargraph26; + double fRec166[2]; + double fRec167[2]; + double fRec165[2]; + double fRec168[2]; + double fRec169[2]; + double fRec164[2]; + double fRec170[2]; + double fRec163[2]; + double fRec162[2]; + FAUSTFLOAT fVbargraph27; + double fRec174[2]; + double fRec175[2]; + double fRec173[2]; + double fRec176[2]; + double fRec177[2]; + double fRec172[2]; + double fRec171[2]; + FAUSTFLOAT fVbargraph28; + double fRec181[2]; + double fRec182[2]; + double fRec180[2]; + double fRec183[2]; + double fRec179[2]; + double fRec178[2]; + FAUSTFLOAT fVbargraph29; + double fRec187[2]; + double fRec188[2]; + double fRec186[2]; + double fRec189[2]; + double fRec185[2]; + double fRec184[2]; + FAUSTFLOAT fVbargraph30; + double fRec193[2]; + double fRec194[2]; + double fRec192[2]; + double fRec195[2]; + double fRec196[2]; + double fRec191[2]; + double fRec190[2]; + FAUSTFLOAT fVbargraph31; + double fRec136[2]; + FAUSTFLOAT fVbargraph32; + double fRec197[2]; + FAUSTFLOAT fVbargraph33; + double fRec198[2]; + FAUSTFLOAT fVbargraph34; + double fRec199[2]; + FAUSTFLOAT fVbargraph35; + double fRec200[2]; + FAUSTFLOAT fVbargraph36; + double fRec204[2]; + double fRec205[2]; + double fRec203[2]; + double fRec202[2]; + FAUSTFLOAT fVbargraph37; + double fRec209[2]; + double fRec210[2]; + double fRec208[2]; + double fRec211[2]; + double fRec207[2]; + double fRec206[2]; + FAUSTFLOAT fVbargraph38; + double fRec216[2]; + double fRec217[2]; + double fRec215[2]; + double fRec218[2]; + double fRec219[2]; + double fRec214[2]; + double fRec220[2]; + double fRec213[2]; + double fRec212[2]; + FAUSTFLOAT fVbargraph39; + double fRec224[2]; + double fRec225[2]; + double fRec223[2]; + double fRec226[2]; + double fRec227[2]; + double fRec222[2]; + double fRec221[2]; + FAUSTFLOAT fVbargraph40; + double fRec232[2]; + double fRec233[2]; + double fRec231[2]; + double fRec234[2]; + double fRec235[2]; + double fRec230[2]; + double fRec236[2]; + double fRec229[2]; + double fRec228[2]; + FAUSTFLOAT fVbargraph41; + double fRec240[2]; + double fRec241[2]; + double fRec239[2]; + double fRec242[2]; + double fRec243[2]; + double fRec238[2]; + double fRec237[2]; + FAUSTFLOAT fVbargraph42; + double fRec201[2]; + FAUSTFLOAT fVbargraph43; + double fRec244[2]; + FAUSTFLOAT fVbargraph44; + double fRec245[2]; + FAUSTFLOAT fVbargraph45; + double fRec246[2]; + FAUSTFLOAT fVbargraph46; + double fRec247[2]; + FAUSTFLOAT fVbargraph47; + double fRec248[2]; + FAUSTFLOAT fVbargraph48; + double fRec249[2]; + FAUSTFLOAT fVbargraph49; + double fRec250[2]; + FAUSTFLOAT fVbargraph50; + double fRec251[2]; + FAUSTFLOAT fVbargraph51; + double fRec252[2]; + FAUSTFLOAT fVbargraph52; + double fRec253[2]; + FAUSTFLOAT fVbargraph53; + double fRec254[2]; + FAUSTFLOAT fVbargraph54; + double fRec255[2]; + FAUSTFLOAT fVbargraph55; + double fRec256[2]; + FAUSTFLOAT fVbargraph56; + double fRec257[2]; + FAUSTFLOAT fVbargraph57; + double fRec258[2]; + FAUSTFLOAT fVbargraph58; + double fRec259[2]; + FAUSTFLOAT fVbargraph59; + double fRec260[2]; + FAUSTFLOAT fVbargraph60; + double fRec261[2]; + FAUSTFLOAT fVbargraph61; + double fRec262[2]; + FAUSTFLOAT fVbargraph62; + double fRec263[2]; + FAUSTFLOAT fVbargraph63; + double fRec264[2]; + FAUSTFLOAT fVbargraph64; + double fRec265[2]; + FAUSTFLOAT fVbargraph65; + double fRec266[2]; + FAUSTFLOAT fVbargraph66; + double fRec267[2]; + FAUSTFLOAT fVbargraph67; + double fRec268[2]; + FAUSTFLOAT fVbargraph68; + double fRec269[2]; + FAUSTFLOAT fVbargraph69; + double fRec270[2]; + FAUSTFLOAT fVbargraph70; + double fRec271[2]; + FAUSTFLOAT fVbargraph71; + double fRec272[2]; + FAUSTFLOAT fVbargraph72; + double fRec273[2]; + FAUSTFLOAT fVbargraph73; + double fRec274[2]; + FAUSTFLOAT fVbargraph74; + double fRec275[2]; + FAUSTFLOAT fVbargraph75; + double fRec276[2]; + FAUSTFLOAT fVbargraph76; + double fRec277[2]; + FAUSTFLOAT fVbargraph77; + double fRec278[2]; + FAUSTFLOAT fVbargraph78; + double fRec279[2]; + FAUSTFLOAT fVbargraph79; + double fRec280[2]; + FAUSTFLOAT fVbargraph80; + double fRec281[2]; + FAUSTFLOAT fVbargraph81; + double fRec282[2]; + FAUSTFLOAT fVbargraph82; + double fRec283[2]; + FAUSTFLOAT fVbargraph83; + double fRec284[2]; + FAUSTFLOAT fVbargraph84; + double fRec285[2]; + FAUSTFLOAT fVbargraph85; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOADecLebedev505"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 36; } - virtual int getNumOutputs() { return 50; } + virtual int getNumInputs() { + return 36; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (1.7e+02 / fConst0); - fConst3 = (3.4e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); - fConst6 = (394.7715102864353 / fConst0); - fConst7 = (625.2284897135664 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (170.0 / fConst0); + fConst3 = (340.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + fConst6 = (394.77151028643527 / fConst0); + fConst7 = (625.22848971356643 / fConst0); fConst8 = (1250.4569794271329 / fConst0); - fConst9 = (789.5430205728705 / fConst0); - fConst10 = (984.7116049589241 / fConst0); - fConst11 = (715.2883950410759 / fConst0); + fConst9 = (789.54302057287055 / fConst0); + fConst10 = (984.71160495892411 / fConst0); + fConst11 = (715.28839504107589 / fConst0); fConst12 = (1430.5767900821518 / fConst0); fConst13 = (1969.4232099178482 / fConst0); - fConst14 = (619.9455612060303 / fConst0); + fConst14 = (619.94556120603033 / fConst0); fConst15 = (1139.6651757122002 / fConst0); fConst16 = (790.3892630817644 / fConst0); fConst17 = (1580.7785261635288 / fConst0); fConst18 = (2279.3303514244003 / fConst0); fConst19 = (1239.8911224120607 / fConst0); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider1 = 0.0; + fVslider0 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider1 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec78[i] = 0; - for (int i=0; i<2; i++) fRec77[i] = 0; - for (int i=0; i<2; i++) fRec76[i] = 0; - for (int i=0; i<2; i++) fRec80[i] = 0; - for (int i=0; i<2; i++) fRec79[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec86[i] = 0; - for (int i=0; i<2; i++) fRec85[i] = 0; - for (int i=0; i<2; i++) fRec84[i] = 0; - for (int i=0; i<2; i++) fRec88[i] = 0; - for (int i=0; i<2; i++) fRec87[i] = 0; - for (int i=0; i<2; i++) fRec83[i] = 0; - for (int i=0; i<2; i++) fRec89[i] = 0; - for (int i=0; i<2; i++) fRec82[i] = 0; - for (int i=0; i<2; i++) fRec81[i] = 0; - for (int i=0; i<2; i++) fRec95[i] = 0; - for (int i=0; i<2; i++) fRec94[i] = 0; - for (int i=0; i<2; i++) fRec93[i] = 0; - for (int i=0; i<2; i++) fRec97[i] = 0; - for (int i=0; i<2; i++) fRec96[i] = 0; - for (int i=0; i<2; i++) fRec92[i] = 0; - for (int i=0; i<2; i++) fRec98[i] = 0; - for (int i=0; i<2; i++) fRec91[i] = 0; - for (int i=0; i<2; i++) fRec90[i] = 0; - for (int i=0; i<2; i++) fRec104[i] = 0; - for (int i=0; i<2; i++) fRec103[i] = 0; - for (int i=0; i<2; i++) fRec102[i] = 0; - for (int i=0; i<2; i++) fRec106[i] = 0; - for (int i=0; i<2; i++) fRec105[i] = 0; - for (int i=0; i<2; i++) fRec101[i] = 0; - for (int i=0; i<2; i++) fRec107[i] = 0; - for (int i=0; i<2; i++) fRec100[i] = 0; - for (int i=0; i<2; i++) fRec99[i] = 0; - for (int i=0; i<2; i++) fRec113[i] = 0; - for (int i=0; i<2; i++) fRec112[i] = 0; - for (int i=0; i<2; i++) fRec111[i] = 0; - for (int i=0; i<2; i++) fRec115[i] = 0; - for (int i=0; i<2; i++) fRec114[i] = 0; - for (int i=0; i<2; i++) fRec110[i] = 0; - for (int i=0; i<2; i++) fRec116[i] = 0; - for (int i=0; i<2; i++) fRec109[i] = 0; - for (int i=0; i<2; i++) fRec108[i] = 0; - for (int i=0; i<2; i++) fRec122[i] = 0; - for (int i=0; i<2; i++) fRec121[i] = 0; - for (int i=0; i<2; i++) fRec120[i] = 0; - for (int i=0; i<2; i++) fRec124[i] = 0; - for (int i=0; i<2; i++) fRec123[i] = 0; - for (int i=0; i<2; i++) fRec119[i] = 0; - for (int i=0; i<2; i++) fRec125[i] = 0; - for (int i=0; i<2; i++) fRec118[i] = 0; - for (int i=0; i<2; i++) fRec117[i] = 0; - for (int i=0; i<2; i++) fRec131[i] = 0; - for (int i=0; i<2; i++) fRec130[i] = 0; - for (int i=0; i<2; i++) fRec129[i] = 0; - for (int i=0; i<2; i++) fRec133[i] = 0; - for (int i=0; i<2; i++) fRec132[i] = 0; - for (int i=0; i<2; i++) fRec128[i] = 0; - for (int i=0; i<2; i++) fRec134[i] = 0; - for (int i=0; i<2; i++) fRec127[i] = 0; - for (int i=0; i<2; i++) fRec126[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec135[i] = 0; - for (int i=0; i<2; i++) fRec142[i] = 0; - for (int i=0; i<2; i++) fRec141[i] = 0; - for (int i=0; i<2; i++) fRec140[i] = 0; - for (int i=0; i<2; i++) fRec144[i] = 0; - for (int i=0; i<2; i++) fRec143[i] = 0; - for (int i=0; i<2; i++) fRec139[i] = 0; - for (int i=0; i<2; i++) fRec145[i] = 0; - for (int i=0; i<2; i++) fRec138[i] = 0; - for (int i=0; i<2; i++) fRec137[i] = 0; - for (int i=0; i<2; i++) fRec151[i] = 0; - for (int i=0; i<2; i++) fRec150[i] = 0; - for (int i=0; i<2; i++) fRec149[i] = 0; - for (int i=0; i<2; i++) fRec153[i] = 0; - for (int i=0; i<2; i++) fRec152[i] = 0; - for (int i=0; i<2; i++) fRec148[i] = 0; - for (int i=0; i<2; i++) fRec154[i] = 0; - for (int i=0; i<2; i++) fRec147[i] = 0; - for (int i=0; i<2; i++) fRec146[i] = 0; - for (int i=0; i<2; i++) fRec158[i] = 0; - for (int i=0; i<2; i++) fRec157[i] = 0; - for (int i=0; i<2; i++) fRec156[i] = 0; - for (int i=0; i<2; i++) fRec155[i] = 0; - for (int i=0; i<2; i++) fRec161[i] = 0; - for (int i=0; i<2; i++) fRec160[i] = 0; - for (int i=0; i<2; i++) fRec159[i] = 0; - for (int i=0; i<2; i++) fRec167[i] = 0; - for (int i=0; i<2; i++) fRec166[i] = 0; - for (int i=0; i<2; i++) fRec165[i] = 0; - for (int i=0; i<2; i++) fRec169[i] = 0; - for (int i=0; i<2; i++) fRec168[i] = 0; - for (int i=0; i<2; i++) fRec164[i] = 0; - for (int i=0; i<2; i++) fRec170[i] = 0; - for (int i=0; i<2; i++) fRec163[i] = 0; - for (int i=0; i<2; i++) fRec162[i] = 0; - for (int i=0; i<2; i++) fRec175[i] = 0; - for (int i=0; i<2; i++) fRec174[i] = 0; - for (int i=0; i<2; i++) fRec173[i] = 0; - for (int i=0; i<2; i++) fRec177[i] = 0; - for (int i=0; i<2; i++) fRec176[i] = 0; - for (int i=0; i<2; i++) fRec172[i] = 0; - for (int i=0; i<2; i++) fRec171[i] = 0; - for (int i=0; i<2; i++) fRec182[i] = 0; - for (int i=0; i<2; i++) fRec181[i] = 0; - for (int i=0; i<2; i++) fRec180[i] = 0; - for (int i=0; i<2; i++) fRec183[i] = 0; - for (int i=0; i<2; i++) fRec179[i] = 0; - for (int i=0; i<2; i++) fRec178[i] = 0; - for (int i=0; i<2; i++) fRec188[i] = 0; - for (int i=0; i<2; i++) fRec187[i] = 0; - for (int i=0; i<2; i++) fRec186[i] = 0; - for (int i=0; i<2; i++) fRec189[i] = 0; - for (int i=0; i<2; i++) fRec185[i] = 0; - for (int i=0; i<2; i++) fRec184[i] = 0; - for (int i=0; i<2; i++) fRec194[i] = 0; - for (int i=0; i<2; i++) fRec193[i] = 0; - for (int i=0; i<2; i++) fRec192[i] = 0; - for (int i=0; i<2; i++) fRec196[i] = 0; - for (int i=0; i<2; i++) fRec195[i] = 0; - for (int i=0; i<2; i++) fRec191[i] = 0; - for (int i=0; i<2; i++) fRec190[i] = 0; - for (int i=0; i<2; i++) fRec136[i] = 0; - for (int i=0; i<2; i++) fRec197[i] = 0; - for (int i=0; i<2; i++) fRec198[i] = 0; - for (int i=0; i<2; i++) fRec199[i] = 0; - for (int i=0; i<2; i++) fRec200[i] = 0; - for (int i=0; i<2; i++) fRec205[i] = 0; - for (int i=0; i<2; i++) fRec204[i] = 0; - for (int i=0; i<2; i++) fRec203[i] = 0; - for (int i=0; i<2; i++) fRec202[i] = 0; - for (int i=0; i<2; i++) fRec210[i] = 0; - for (int i=0; i<2; i++) fRec209[i] = 0; - for (int i=0; i<2; i++) fRec208[i] = 0; - for (int i=0; i<2; i++) fRec211[i] = 0; - for (int i=0; i<2; i++) fRec207[i] = 0; - for (int i=0; i<2; i++) fRec206[i] = 0; - for (int i=0; i<2; i++) fRec217[i] = 0; - for (int i=0; i<2; i++) fRec216[i] = 0; - for (int i=0; i<2; i++) fRec215[i] = 0; - for (int i=0; i<2; i++) fRec219[i] = 0; - for (int i=0; i<2; i++) fRec218[i] = 0; - for (int i=0; i<2; i++) fRec214[i] = 0; - for (int i=0; i<2; i++) fRec220[i] = 0; - for (int i=0; i<2; i++) fRec213[i] = 0; - for (int i=0; i<2; i++) fRec212[i] = 0; - for (int i=0; i<2; i++) fRec225[i] = 0; - for (int i=0; i<2; i++) fRec224[i] = 0; - for (int i=0; i<2; i++) fRec223[i] = 0; - for (int i=0; i<2; i++) fRec227[i] = 0; - for (int i=0; i<2; i++) fRec226[i] = 0; - for (int i=0; i<2; i++) fRec222[i] = 0; - for (int i=0; i<2; i++) fRec221[i] = 0; - for (int i=0; i<2; i++) fRec233[i] = 0; - for (int i=0; i<2; i++) fRec232[i] = 0; - for (int i=0; i<2; i++) fRec231[i] = 0; - for (int i=0; i<2; i++) fRec235[i] = 0; - for (int i=0; i<2; i++) fRec234[i] = 0; - for (int i=0; i<2; i++) fRec230[i] = 0; - for (int i=0; i<2; i++) fRec236[i] = 0; - for (int i=0; i<2; i++) fRec229[i] = 0; - for (int i=0; i<2; i++) fRec228[i] = 0; - for (int i=0; i<2; i++) fRec241[i] = 0; - for (int i=0; i<2; i++) fRec240[i] = 0; - for (int i=0; i<2; i++) fRec239[i] = 0; - for (int i=0; i<2; i++) fRec243[i] = 0; - for (int i=0; i<2; i++) fRec242[i] = 0; - for (int i=0; i<2; i++) fRec238[i] = 0; - for (int i=0; i<2; i++) fRec237[i] = 0; - for (int i=0; i<2; i++) fRec201[i] = 0; - for (int i=0; i<2; i++) fRec244[i] = 0; - for (int i=0; i<2; i++) fRec245[i] = 0; - for (int i=0; i<2; i++) fRec246[i] = 0; - for (int i=0; i<2; i++) fRec247[i] = 0; - for (int i=0; i<2; i++) fRec248[i] = 0; - for (int i=0; i<2; i++) fRec249[i] = 0; - for (int i=0; i<2; i++) fRec250[i] = 0; - for (int i=0; i<2; i++) fRec251[i] = 0; - for (int i=0; i<2; i++) fRec252[i] = 0; - for (int i=0; i<2; i++) fRec253[i] = 0; - for (int i=0; i<2; i++) fRec254[i] = 0; - for (int i=0; i<2; i++) fRec255[i] = 0; - for (int i=0; i<2; i++) fRec256[i] = 0; - for (int i=0; i<2; i++) fRec257[i] = 0; - for (int i=0; i<2; i++) fRec258[i] = 0; - for (int i=0; i<2; i++) fRec259[i] = 0; - for (int i=0; i<2; i++) fRec260[i] = 0; - for (int i=0; i<2; i++) fRec261[i] = 0; - for (int i=0; i<2; i++) fRec262[i] = 0; - for (int i=0; i<2; i++) fRec263[i] = 0; - for (int i=0; i<2; i++) fRec264[i] = 0; - for (int i=0; i<2; i++) fRec265[i] = 0; - for (int i=0; i<2; i++) fRec266[i] = 0; - for (int i=0; i<2; i++) fRec267[i] = 0; - for (int i=0; i<2; i++) fRec268[i] = 0; - for (int i=0; i<2; i++) fRec269[i] = 0; - for (int i=0; i<2; i++) fRec270[i] = 0; - for (int i=0; i<2; i++) fRec271[i] = 0; - for (int i=0; i<2; i++) fRec272[i] = 0; - for (int i=0; i<2; i++) fRec273[i] = 0; - for (int i=0; i<2; i++) fRec274[i] = 0; - for (int i=0; i<2; i++) fRec275[i] = 0; - for (int i=0; i<2; i++) fRec276[i] = 0; - for (int i=0; i<2; i++) fRec277[i] = 0; - for (int i=0; i<2; i++) fRec278[i] = 0; - for (int i=0; i<2; i++) fRec279[i] = 0; - for (int i=0; i<2; i++) fRec280[i] = 0; - for (int i=0; i<2; i++) fRec281[i] = 0; - for (int i=0; i<2; i++) fRec282[i] = 0; - for (int i=0; i<2; i++) fRec283[i] = 0; - for (int i=0; i<2; i++) fRec284[i] = 0; - for (int i=0; i<2; i++) fRec285[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOADecLebedev505"); - ui_interface->openHorizontalBox("Inputs"); - ui_interface->openHorizontalBox("B-Format"); - ui_interface->openHorizontalBox("0"); - ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128063a0", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("1"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12871bc0", &fbargraph26, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12809540", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1280bdf0", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("2"); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1286f3e0", &fbargraph25, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1289c920", &fbargraph37, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1280fd40", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12812d90", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12815e50", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("3"); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1287fb80", &fbargraph29, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128a0510", &fbargraph38, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12883690", &fbargraph30, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1281b0b0", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1281ec40", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128228a0", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128265c0", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("4"); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1287c050", &fbargraph28, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128b5250", &fbargraph42, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128880e0", &fbargraph31, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128a9af0", &fbargraph40, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1282c530", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12830790", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12834b40", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12838f50", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1283d500", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("5"); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1286c3b0", &fbargraph24, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128b0f90", &fbargraph41, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12876810", &fbargraph27, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128a57b0", &fbargraph39, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128675a0", &fbargraph23, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128448d0", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12849700", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1284e7d0", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128538f0", &fbargraph18, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12858a90", &fbargraph19, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1285dcc0", &fbargraph20, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 60"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 60"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 6e+01, 0.1); - ui_interface->declare(0, "3", ""); - ui_interface->openVerticalBox("NFC"); - ui_interface->addCheckButton("Yes", &fcheckbox0); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "4", ""); - ui_interface->addNumEntry("Speakers Radius", &fentry0, 1.07, 0.5, 1e+01, 0.01); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("Outputs 1-25"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph21, "osc", "/output1"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1285f6b0", &fbargraph21, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph22, "osc", "/output2"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12862820", &fbargraph22, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph32, "osc", "/output3"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12889c50", &fbargraph32, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph33, "osc", "/output4"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1288d9b0", &fbargraph33, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph34, "osc", "/output5"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128919c0", &fbargraph34, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph35, "osc", "/output6"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128943f0", &fbargraph35, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph36, "osc", "/output7"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12899820", &fbargraph36, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph43, "osc", "/output8"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128b8310", &fbargraph43, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph44, "osc", "/output9"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128bdd20", &fbargraph44, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph45, "osc", "/output10"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128c3410", &fbargraph45, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph46, "osc", "/output11"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128c8870", &fbargraph46, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph47, "osc", "/output12"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128cce50", &fbargraph47, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph48, "osc", "/output13"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128d1040", &fbargraph48, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph49, "osc", "/output14"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128d4f10", &fbargraph49, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph50, "osc", "/output15"); - ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128d7c90", &fbargraph50, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph51, "osc", "/output16"); - ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128dc1e0", &fbargraph51, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph52, "osc", "/output17"); - ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128e07f0", &fbargraph52, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph53, "osc", "/output18"); - ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128e4650", &fbargraph53, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph54, "osc", "/output19"); - ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128ed2e0", &fbargraph54, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph55, "osc", "/output20"); - ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128f3c10", &fbargraph55, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph56, "osc", "/output21"); - ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc128fa340", &fbargraph56, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph57, "osc", "/output22"); - ui_interface->declare(&fbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc129043e0", &fbargraph57, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph58, "osc", "/output23"); - ui_interface->declare(&fbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12908910", &fbargraph58, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph59, "osc", "/output24"); - ui_interface->declare(&fbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1290d240", &fbargraph59, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph60, "osc", "/output25"); - ui_interface->declare(&fbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12911c60", &fbargraph60, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("Outputs 26-50"); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph61, "osc", "/output26"); - ui_interface->declare(&fbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12916310", &fbargraph61, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph62, "osc", "/output27"); - ui_interface->declare(&fbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1291e010", &fbargraph62, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph63, "osc", "/output28"); - ui_interface->declare(&fbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12923460", &fbargraph63, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph64, "osc", "/output29"); - ui_interface->declare(&fbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12929a30", &fbargraph64, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph65, "osc", "/output30"); - ui_interface->declare(&fbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1292fa10", &fbargraph65, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph66, "osc", "/output31"); - ui_interface->declare(&fbargraph66, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12937bc0", &fbargraph66, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph67, "osc", "/output32"); - ui_interface->declare(&fbargraph67, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1293ea10", &fbargraph67, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph68, "osc", "/output33"); - ui_interface->declare(&fbargraph68, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12946040", &fbargraph68, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph69, "osc", "/output34"); - ui_interface->declare(&fbargraph69, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1294c170", &fbargraph69, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph70, "osc", "/output35"); - ui_interface->declare(&fbargraph70, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12952b20", &fbargraph70, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("36"); - ui_interface->declare(&fbargraph71, "osc", "/output36"); - ui_interface->declare(&fbargraph71, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12959660", &fbargraph71, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("37"); - ui_interface->declare(&fbargraph72, "osc", "/output37"); - ui_interface->declare(&fbargraph72, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc129606f0", &fbargraph72, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("38"); - ui_interface->declare(&fbargraph73, "osc", "/output38"); - ui_interface->declare(&fbargraph73, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc129681b0", &fbargraph73, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("39"); - ui_interface->declare(&fbargraph74, "osc", "/output39"); - ui_interface->declare(&fbargraph74, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1296c730", &fbargraph74, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("40"); - ui_interface->declare(&fbargraph75, "osc", "/output40"); - ui_interface->declare(&fbargraph75, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12970db0", &fbargraph75, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("41"); - ui_interface->declare(&fbargraph76, "osc", "/output41"); - ui_interface->declare(&fbargraph76, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc129759e0", &fbargraph76, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("42"); - ui_interface->declare(&fbargraph77, "osc", "/output42"); - ui_interface->declare(&fbargraph77, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1297a170", &fbargraph77, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("43"); - ui_interface->declare(&fbargraph78, "osc", "/output43"); - ui_interface->declare(&fbargraph78, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1297e7d0", &fbargraph78, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("44"); - ui_interface->declare(&fbargraph79, "osc", "/output44"); - ui_interface->declare(&fbargraph79, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12983260", &fbargraph79, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("45"); - ui_interface->declare(&fbargraph80, "osc", "/output45"); - ui_interface->declare(&fbargraph80, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12987c80", &fbargraph80, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("46"); - ui_interface->declare(&fbargraph81, "osc", "/output46"); - ui_interface->declare(&fbargraph81, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1298c380", &fbargraph81, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("47"); - ui_interface->declare(&fbargraph82, "osc", "/output47"); - ui_interface->declare(&fbargraph82, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12990c40", &fbargraph82, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("48"); - ui_interface->declare(&fbargraph83, "osc", "/output48"); - ui_interface->declare(&fbargraph83, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12994a90", &fbargraph83, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("49"); - ui_interface->declare(&fbargraph84, "osc", "/output49"); - ui_interface->declare(&fbargraph84, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc12999a50", &fbargraph84, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("50"); - ui_interface->declare(&fbargraph85, "osc", "/output50"); - ui_interface->declare(&fbargraph85, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fcc1299e860", &fbargraph85, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = double(fcheckbox0); - double fSlow2 = (1 - fSlow1); - double fSlow3 = double(fentry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (fSlow2 + fSlow4); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = (fConst2 / fSlow3); - double fSlow8 = (1.0 / (fSlow7 + 1)); - double fSlow9 = (fConst3 / fSlow3); - double fSlow10 = faustpower<2>(fSlow7); - double fSlow11 = (1.0 / (((fConst4 / fSlow3) + (3 * fSlow10)) + 1)); - double fSlow12 = (12 * fSlow10); - double fSlow13 = (fSlow12 + (fConst5 / fSlow3)); - double fSlow14 = (1.0 / ((fConst6 / fSlow3) + 1)); - double fSlow15 = (1.0 / (((fConst7 / fSlow3) + (6.45943269348338 * fSlow10)) + 1)); - double fSlow16 = (25.83773077393352 * fSlow10); - double fSlow17 = (fSlow16 + (fConst8 / fSlow3)); - double fSlow18 = (fConst9 / fSlow3); - double fSlow19 = (1.0 / (((fConst10 / fSlow3) + (9.1401308902779 * fSlow10)) + 1)); - double fSlow20 = (1.0 / (((fConst11 / fSlow3) + (11.4878004768713 * fSlow10)) + 1)); - double fSlow21 = (45.9512019074852 * fSlow10); - double fSlow22 = (fSlow21 + (fConst12 / fSlow3)); - double fSlow23 = (36.5605235611116 * fSlow10); - double fSlow24 = (fSlow23 + (fConst13 / fSlow3)); - double fSlow25 = (1.0 / ((fConst14 / fSlow3) + 1)); - double fSlow26 = (1.0 / (((fConst15 / fSlow3) + (14.2724805132801 * fSlow10)) + 1)); - double fSlow27 = (1.0 / (((fConst16 / fSlow3) + (18.1563153134523 * fSlow10)) + 1)); - double fSlow28 = (72.6252612538092 * fSlow10); - double fSlow29 = (fSlow28 + (fConst17 / fSlow3)); - double fSlow30 = (57.0899220531204 * fSlow10); - double fSlow31 = (fSlow30 + (fConst18 / fSlow3)); - double fSlow32 = (fConst19 / fSlow3); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - FAUSTFLOAT* output36 = output[36]; - FAUSTFLOAT* output37 = output[37]; - FAUSTFLOAT* output38 = output[38]; - FAUSTFLOAT* output39 = output[39]; - FAUSTFLOAT* output40 = output[40]; - FAUSTFLOAT* output41 = output[41]; - FAUSTFLOAT* output42 = output[42]; - FAUSTFLOAT* output43 = output[43]; - FAUSTFLOAT* output44 = output[44]; - FAUSTFLOAT* output45 = output[45]; - FAUSTFLOAT* output46 = output[46]; - FAUSTFLOAT* output47 = output[47]; - FAUSTFLOAT* output48 = output[48]; - FAUSTFLOAT* output49 = output[49]; - for (int i=0; iopenVerticalBox("HOADecLebedev505"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("B-Format"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30a7140", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32410d0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30b2640", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30bbfe0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3237cf0", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32ce850", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30ca880", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30d5f10", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30e15a0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3275670", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32dcfa0", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3283db0", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30f4160", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3102d30", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3111900", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31205b0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3267060", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x332b260", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32952a0", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3301e70", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3135c70", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3146530", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3156df0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3167790", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3178210", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x322c850", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x331ac70", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3254500", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32f17a0", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3218ee0", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3192850", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31a6650", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31ba460", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31ce340", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31e2300", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31f63a0", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 60"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 60"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 60.0, 0.10000000000000001); + ui_interface->declare(0, "3", ""); + ui_interface->openVerticalBox("NFC"); + ui_interface->addCheckButton("Yes", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "4", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph21, "osc", "/output1"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31fb960", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph22, "osc", "/output2"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3205910", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph32, "osc", "/output3"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x329a790", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph33, "osc", "/output4"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32a3b00", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph34, "osc", "/output5"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32acf50", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph35, "osc", "/output6"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32b4340", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph36, "osc", "/output7"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32c32f0", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph43, "osc", "/output8"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3333900", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph44, "osc", "/output9"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3341c70", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph45, "osc", "/output10"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3350290", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph46, "osc", "/output11"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x335ce90", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph47, "osc", "/output12"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33674b0", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph48, "osc", "/output13"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3370c60", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph49, "osc", "/output14"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x337ac60", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph50, "osc", "/output15"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3382660", &fVbargraph50, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph51, "osc", "/output16"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x338bd60", &fVbargraph51, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph52, "osc", "/output17"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3395750", &fVbargraph52, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph53, "osc", "/output18"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x339f010", &fVbargraph53, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph54, "osc", "/output19"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33b5120", &fVbargraph54, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph55, "osc", "/output20"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33c5dc0", &fVbargraph55, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph56, "osc", "/output21"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33d5ee0", &fVbargraph56, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph57, "osc", "/output22"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33e6570", &fVbargraph57, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph58, "osc", "/output23"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33f06b0", &fVbargraph58, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph59, "osc", "/output24"); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33fa2d0", &fVbargraph59, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph60, "osc", "/output25"); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3404390", &fVbargraph60, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Outputs 26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph61, "osc", "/output26"); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x340e350", &fVbargraph61, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph62, "osc", "/output27"); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3423b60", &fVbargraph62, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph63, "osc", "/output28"); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3431100", &fVbargraph63, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph64, "osc", "/output29"); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34419d0", &fVbargraph64, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph65, "osc", "/output30"); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3451640", &fVbargraph65, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph66, "osc", "/output31"); + ui_interface->declare(&fVbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34674a0", &fVbargraph66, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph67, "osc", "/output32"); + ui_interface->declare(&fVbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x347a9e0", &fVbargraph67, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph68, "osc", "/output33"); + ui_interface->declare(&fVbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x348ce70", &fVbargraph68, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph69, "osc", "/output34"); + ui_interface->declare(&fVbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x349d540", &fVbargraph69, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph70, "osc", "/output35"); + ui_interface->declare(&fVbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34aea90", &fVbargraph70, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph71, "osc", "/output36"); + ui_interface->declare(&fVbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34bfc90", &fVbargraph71, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph72, "osc", "/output37"); + ui_interface->declare(&fVbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34d1910", &fVbargraph72, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph73, "osc", "/output38"); + ui_interface->declare(&fVbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34e5ab0", &fVbargraph73, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph74, "osc", "/output39"); + ui_interface->declare(&fVbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34ef680", &fVbargraph74, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph75, "osc", "/output40"); + ui_interface->declare(&fVbargraph75, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34f8f40", &fVbargraph75, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph76, "osc", "/output41"); + ui_interface->declare(&fVbargraph76, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3502ac0", &fVbargraph76, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph77, "osc", "/output42"); + ui_interface->declare(&fVbargraph77, "unit", "dB"); + ui_interface->addVerticalBargraph("0x350c930", &fVbargraph77, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph78, "osc", "/output43"); + ui_interface->declare(&fVbargraph78, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35162b0", &fVbargraph78, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph79, "osc", "/output44"); + ui_interface->declare(&fVbargraph79, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35200d0", &fVbargraph79, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph80, "osc", "/output45"); + ui_interface->declare(&fVbargraph80, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3529df0", &fVbargraph80, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph81, "osc", "/output46"); + ui_interface->declare(&fVbargraph81, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3533bf0", &fVbargraph81, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph82, "osc", "/output47"); + ui_interface->declare(&fVbargraph82, "unit", "dB"); + ui_interface->addVerticalBargraph("0x353db00", &fVbargraph82, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph83, "osc", "/output48"); + ui_interface->declare(&fVbargraph83, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3547710", &fVbargraph83, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph84, "osc", "/output49"); + ui_interface->declare(&fVbargraph84, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35517b0", &fVbargraph84, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph85, "osc", "/output50"); + ui_interface->declare(&fVbargraph85, "unit", "dB"); + ui_interface->addVerticalBargraph("0x355bb10", &fVbargraph85, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = double(fCheckbox0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fSlow1 * fSlow2); + double fSlow4 = (1.0 - fSlow1); + double fSlow5 = (fSlow3 + fSlow4); + double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + double fSlow7 = (fConst2 / fSlow2); + double fSlow8 = (1.0 / (fSlow7 + 1.0)); + double fSlow9 = (fConst3 / fSlow2); + double fSlow10 = mydsp_faustpower2_f(fSlow7); + double fSlow11 = (1.0 / (((fConst4 / fSlow2) + (3.0 * fSlow10)) + 1.0)); + double fSlow12 = (12.0 * fSlow10); + double fSlow13 = (fSlow12 + (fConst5 / fSlow2)); + double fSlow14 = (1.0 / ((fConst6 / fSlow2) + 1.0)); + double fSlow15 = (1.0 / (((fConst7 / fSlow2) + (6.4594326934833797 * fSlow10)) + 1.0)); + double fSlow16 = (25.837730773933519 * fSlow10); + double fSlow17 = (fSlow16 + (fConst8 / fSlow2)); + double fSlow18 = (fConst9 / fSlow2); + double fSlow19 = (1.0 / (((fConst10 / fSlow2) + (9.1401308902779004 * fSlow10)) + 1.0)); + double fSlow20 = (1.0 / (((fConst11 / fSlow2) + (11.4878004768713 * fSlow10)) + 1.0)); + double fSlow21 = (45.951201907485199 * fSlow10); + double fSlow22 = (fSlow21 + (fConst12 / fSlow2)); + double fSlow23 = (36.560523561111602 * fSlow10); + double fSlow24 = (fSlow23 + (fConst13 / fSlow2)); + double fSlow25 = (1.0 / ((fConst14 / fSlow2) + 1.0)); + double fSlow26 = (1.0 / (((fConst15 / fSlow2) + (14.272480513280099 * fSlow10)) + 1.0)); + double fSlow27 = (1.0 / (((fConst16 / fSlow2) + (18.1563153134523 * fSlow10)) + 1.0)); + double fSlow28 = (72.6252612538092 * fSlow10); + double fSlow29 = (fSlow28 + (fConst17 / fSlow2)); + double fSlow30 = (57.089922053120397 * fSlow10); + double fSlow31 = (fSlow30 + (fConst18 / fSlow2)); + double fSlow32 = (fConst19 / fSlow2); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec3[0] = (fSlow6 + (0.999 * fRec3[1])); + double fTemp0 = (fSlow5 * (fRec3[0] * double(input0[i]))); + fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + double fTemp1 = (0.012698412698412698 * fTemp0); + double fTemp2 = (fRec3[0] * double(input2[i])); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow8 * ((fSlow3 * fTemp2) - (fSlow9 * fRec6[0]))); + double fTemp3 = (fRec5[0] + (fSlow4 * fTemp2)); + fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph1 = FAUSTFLOAT(fRec4[0]); + double fTemp4 = (0.021994295969128601 * fTemp3); + double fTemp5 = (fRec3[0] * double(input3[i])); + fRec9[0] = (fRec9[1] + fRec8[1]); + fRec8[0] = (fSlow8 * ((fSlow3 * fTemp5) - (fSlow9 * fRec9[0]))); + double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph2 = FAUSTFLOAT(fRec7[0]); + double fTemp7 = (1.3467622079046435e-18 * fTemp6); + double fTemp8 = (fRec3[0] * double(input6[i])); + fRec12[0] = (fRec12[1] + fRec11[1]); + fRec13[0] = (fRec13[1] + fRec12[1]); + fRec11[0] = (fSlow11 * ((fSlow3 * fTemp8) - ((fSlow13 * fRec12[0]) + (fSlow12 * fRec13[0])))); + double fTemp9 = (fRec11[0] + (fSlow4 * fTemp8)); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph3 = FAUSTFLOAT(fRec10[0]); + double fTemp10 = (0.028394513999997331 * fTemp9); + double fTemp11 = (fRec3[0] * double(input7[i])); + fRec16[0] = (fRec16[1] + fRec15[1]); + fRec17[0] = (fRec17[1] + fRec16[1]); + fRec15[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec16[0]) + (fSlow12 * fRec17[0])))); + double fTemp12 = (fRec15[0] + (fSlow4 * fTemp11)); + fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph4 = FAUSTFLOAT(fRec14[0]); + double fTemp13 = (3.0114518464024883e-18 * fTemp12); + double fTemp14 = (fRec3[0] * double(input8[i])); + fRec20[0] = (fRec20[1] + fRec19[1]); + fRec21[0] = (fRec21[1] + fRec20[1]); + fRec19[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec20[0]) + (fSlow12 * fRec21[0])))); + double fTemp15 = (fRec19[0] + (fSlow4 * fTemp14)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph5 = FAUSTFLOAT(fRec18[0]); + double fTemp16 = (9.2199121612079837e-35 * fTemp15); + double fTemp17 = (fRec3[0] * double(input12[i])); + fRec25[0] = (fRec25[1] + fRec24[1]); + fRec26[0] = (fRec26[1] + fRec25[1]); + fRec24[0] = (fSlow15 * ((fSlow3 * fTemp17) - ((fSlow17 * fRec25[0]) + (fSlow16 * fRec26[0])))); + fRec27[0] = (fRec27[1] + fRec23[1]); + fRec23[0] = (fSlow14 * (fRec24[0] - (fSlow18 * fRec27[0]))); + double fTemp18 = (fRec23[0] + (fSlow4 * fTemp17)); + fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph6 = FAUSTFLOAT(fRec22[0]); + double fTemp19 = (0.033596842045264641 * fTemp18); + double fTemp20 = (fRec3[0] * double(input13[i])); + fRec31[0] = (fRec31[1] + fRec30[1]); + fRec32[0] = (fRec32[1] + fRec31[1]); + fRec30[0] = (fSlow15 * ((fSlow3 * fTemp20) - ((fSlow17 * fRec31[0]) + (fSlow16 * fRec32[0])))); + fRec33[0] = (fRec33[1] + fRec29[1]); + fRec29[0] = (fSlow14 * (fRec30[0] - (fSlow18 * fRec33[0]))); + double fTemp21 = (fRec29[0] + (fSlow4 * fTemp20)); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph7 = FAUSTFLOAT(fRec28[0]); + double fTemp22 = (5.0391227634343926e-18 * fTemp21); + double fTemp23 = (fRec3[0] * double(input14[i])); + fRec37[0] = (fRec37[1] + fRec36[1]); + fRec38[0] = (fRec38[1] + fRec37[1]); + fRec36[0] = (fSlow15 * ((fSlow3 * fTemp23) - ((fSlow17 * fRec37[0]) + (fSlow16 * fRec38[0])))); + fRec39[0] = (fRec39[1] + fRec35[1]); + fRec35[0] = (fSlow14 * (fRec36[0] - (fSlow18 * fRec39[0]))); + double fTemp24 = (fRec35[0] + (fSlow4 * fTemp23)); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph8 = FAUSTFLOAT(fRec34[0]); + double fTemp25 = (2.4393594688416384e-34 * fTemp24); + double fTemp26 = (fRec3[0] * double(input15[i])); + fRec43[0] = (fRec43[1] + fRec42[1]); + fRec44[0] = (fRec44[1] + fRec43[1]); + fRec42[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec43[0]) + (fSlow16 * fRec44[0])))); + fRec45[0] = (fRec45[1] + fRec41[1]); + fRec41[0] = (fSlow14 * (fRec42[0] - (fSlow18 * fRec45[0]))); + double fTemp27 = (fRec41[0] + (fSlow4 * fTemp26)); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph9 = FAUSTFLOAT(fRec40[0]); + double fTemp28 = (6.0979103388536467e-51 * fTemp27); + double fTemp29 = (fRec3[0] * double(input20[i])); + fRec49[0] = (fRec49[1] + fRec48[1]); + fRec50[0] = (fRec50[1] + fRec49[1]); + fRec48[0] = (fSlow20 * ((fSlow3 * fTemp29) - ((fSlow22 * fRec49[0]) + (fSlow21 * fRec50[0])))); + fRec51[0] = (fRec51[1] + fRec47[1]); + fRec52[0] = (fRec52[1] + fRec51[1]); + fRec47[0] = (fSlow19 * (fRec48[0] - ((fSlow24 * fRec51[0]) + (fSlow23 * fRec52[0])))); + double fTemp30 = (fRec47[0] + (fSlow4 * fTemp29)); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph10 = FAUSTFLOAT(fRec46[0]); + double fTemp31 = (0.038095238095238099 * fTemp30); + double fTemp32 = (fRec3[0] * double(input21[i])); + fRec56[0] = (fRec56[1] + fRec55[1]); + fRec57[0] = (fRec57[1] + fRec56[1]); + fRec55[0] = (fSlow20 * ((fSlow3 * fTemp32) - ((fSlow22 * fRec56[0]) + (fSlow21 * fRec57[0])))); + fRec58[0] = (fRec58[1] + fRec54[1]); + fRec59[0] = (fRec59[1] + fRec58[1]); + fRec54[0] = (fSlow19 * (fRec55[0] - ((fSlow24 * fRec58[0]) + (fSlow23 * fRec59[0])))); + double fTemp33 = (fRec54[0] + (fSlow4 * fTemp32)); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph11 = FAUSTFLOAT(fRec53[0]); + double fTemp34 = (7.3765204086483564e-18 * fTemp33); + double fTemp35 = (fRec3[0] * double(input22[i])); + fRec63[0] = (fRec63[1] + fRec62[1]); + fRec64[0] = (fRec64[1] + fRec63[1]); + fRec62[0] = (fSlow20 * ((fSlow3 * fTemp35) - ((fSlow22 * fRec63[0]) + (fSlow21 * fRec64[0])))); + fRec65[0] = (fRec65[1] + fRec61[1]); + fRec66[0] = (fRec66[1] + fRec65[1]); + fRec61[0] = (fSlow19 * (fRec62[0] - ((fSlow24 * fRec65[0]) + (fSlow23 * fRec66[0])))); + double fTemp36 = (fRec61[0] + (fSlow4 * fTemp35)); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph12 = FAUSTFLOAT(fRec60[0]); + double fTemp37 = (4.7908068913603203e-34 * fTemp36); + double fTemp38 = (fRec3[0] * double(input23[i])); + fRec70[0] = (fRec70[1] + fRec69[1]); + fRec71[0] = (fRec71[1] + fRec70[1]); + fRec69[0] = (fSlow20 * ((fSlow3 * fTemp38) - ((fSlow22 * fRec70[0]) + (fSlow21 * fRec71[0])))); + fRec72[0] = (fRec72[1] + fRec68[1]); + fRec73[0] = (fRec73[1] + fRec72[1]); + fRec68[0] = (fSlow19 * (fRec69[0] - ((fSlow24 * fRec72[0]) + (fSlow23 * fRec73[0])))); + double fTemp39 = (fRec68[0] + (fSlow4 * fTemp38)); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph13 = FAUSTFLOAT(fRec67[0]); + double fTemp40 = (1.8293731016560941e-50 * fTemp39); + double fTemp41 = (fRec3[0] * double(input24[i])); + fRec77[0] = (fRec77[1] + fRec76[1]); + fRec78[0] = (fRec78[1] + fRec77[1]); + fRec76[0] = (fSlow20 * ((fSlow3 * fTemp41) - ((fSlow22 * fRec77[0]) + (fSlow21 * fRec78[0])))); + fRec79[0] = (fRec79[1] + fRec75[1]); + fRec80[0] = (fRec80[1] + fRec79[1]); + fRec75[0] = (fSlow19 * (fRec76[0] - ((fSlow24 * fRec79[0]) + (fSlow23 * fRec80[0])))); + double fTemp42 = (fRec75[0] + (fSlow4 * fTemp41)); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph14 = FAUSTFLOAT(fRec74[0]); + double fTemp43 = (3.9603917912335094e-67 * fTemp42); + double fTemp44 = (fRec3[0] * double(input30[i])); + fRec85[0] = (fRec85[1] + fRec84[1]); + fRec86[0] = (fRec86[1] + fRec85[1]); + fRec84[0] = (fSlow27 * ((fSlow3 * fTemp44) - ((fSlow29 * fRec85[0]) + (fSlow28 * fRec86[0])))); + fRec87[0] = (fRec87[1] + fRec83[1]); + fRec88[0] = (fRec88[1] + fRec87[1]); + fRec83[0] = (fSlow26 * (fRec84[0] - ((fSlow31 * fRec87[0]) + (fSlow30 * fRec88[0])))); + fRec89[0] = (fRec89[1] + fRec82[1]); + fRec82[0] = (fSlow25 * (fRec83[0] - (fSlow32 * fRec89[0]))); + double fTemp45 = (fRec82[0] + (fSlow4 * fTemp44)); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph15 = FAUSTFLOAT(fRec81[0]); + double fTemp46 = (0.042115870353719366 * fTemp45); + double fTemp47 = (fRec3[0] * double(input31[i])); + fRec94[0] = (fRec94[1] + fRec93[1]); + fRec95[0] = (fRec95[1] + fRec94[1]); + fRec93[0] = (fSlow27 * ((fSlow3 * fTemp47) - ((fSlow29 * fRec94[0]) + (fSlow28 * fRec95[0])))); + fRec96[0] = (fRec96[1] + fRec92[1]); + fRec97[0] = (fRec97[1] + fRec96[1]); + fRec92[0] = (fSlow26 * (fRec93[0] - ((fSlow31 * fRec96[0]) + (fSlow30 * fRec97[0])))); + fRec98[0] = (fRec98[1] + fRec91[1]); + fRec91[0] = (fSlow25 * (fRec92[0] - (fSlow32 * fRec98[0]))); + double fTemp48 = (fRec91[0] + (fSlow4 * fTemp47)); + fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph16 = FAUSTFLOAT(fRec90[0]); + double fTemp49 = (9.9878558487400326e-18 * fTemp48); + double fTemp50 = (fRec3[0] * double(input32[i])); + fRec103[0] = (fRec103[1] + fRec102[1]); + fRec104[0] = (fRec104[1] + fRec103[1]); + fRec102[0] = (fSlow27 * ((fSlow3 * fTemp50) - ((fSlow29 * fRec103[0]) + (fSlow28 * fRec104[0])))); + fRec105[0] = (fRec105[1] + fRec101[1]); + fRec106[0] = (fRec106[1] + fRec105[1]); + fRec101[0] = (fSlow26 * (fRec102[0] - ((fSlow31 * fRec105[0]) + (fSlow30 * fRec106[0])))); + fRec107[0] = (fRec107[1] + fRec100[1]); + fRec100[0] = (fSlow25 * (fRec101[0] - (fSlow32 * fRec107[0]))); + double fTemp51 = (fRec100[0] + (fSlow4 * fTemp50)); + fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph17 = FAUSTFLOAT(fRec99[0]); + double fTemp52 = (8.0904400869483595e-34 * fTemp51); + double fTemp53 = (fRec3[0] * double(input33[i])); + fRec112[0] = (fRec112[1] + fRec111[1]); + fRec113[0] = (fRec113[1] + fRec112[1]); + fRec111[0] = (fSlow27 * ((fSlow3 * fTemp53) - ((fSlow29 * fRec112[0]) + (fSlow28 * fRec113[0])))); + fRec114[0] = (fRec114[1] + fRec110[1]); + fRec115[0] = (fRec115[1] + fRec114[1]); + fRec110[0] = (fSlow26 * (fRec111[0] - ((fSlow31 * fRec114[0]) + (fSlow30 * fRec115[0])))); + fRec116[0] = (fRec116[1] + fRec109[1]); + fRec109[0] = (fSlow25 * (fRec110[0] - (fSlow32 * fRec116[0]))); + double fTemp54 = (fRec109[0] + (fSlow4 * fTemp53)); + fRec108[0] = max((fRec108[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph18 = FAUSTFLOAT(fRec108[0]); + double fTemp55 = (4.0448961198413007e-50 * fTemp54); + double fTemp56 = (fRec3[0] * double(input34[i])); + fRec121[0] = (fRec121[1] + fRec120[1]); + fRec122[0] = (fRec122[1] + fRec121[1]); + fRec120[0] = (fSlow27 * ((fSlow3 * fTemp56) - ((fSlow29 * fRec121[0]) + (fSlow28 * fRec122[0])))); + fRec123[0] = (fRec123[1] + fRec119[1]); + fRec124[0] = (fRec124[1] + fRec123[1]); + fRec119[0] = (fSlow26 * (fRec120[0] - ((fSlow31 * fRec123[0]) + (fSlow30 * fRec124[0])))); + fRec125[0] = (fRec125[1] + fRec118[1]); + fRec118[0] = (fSlow25 * (fRec119[0] - (fSlow32 * fRec125[0]))); + double fTemp57 = (fRec118[0] + (fSlow4 * fTemp56)); + fRec117[0] = max((fRec117[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph19 = FAUSTFLOAT(fRec117[0]); + double fTemp58 = (1.3135133594325083e-66 * fTemp57); + double fTemp59 = (fRec3[0] * double(input35[i])); + fRec130[0] = (fRec130[1] + fRec129[1]); + fRec131[0] = (fRec131[1] + fRec130[1]); + fRec129[0] = (fSlow27 * ((fSlow3 * fTemp59) - ((fSlow29 * fRec130[0]) + (fSlow28 * fRec131[0])))); + fRec132[0] = (fRec132[1] + fRec128[1]); + fRec133[0] = (fRec133[1] + fRec132[1]); + fRec128[0] = (fSlow26 * (fRec129[0] - ((fSlow31 * fRec132[0]) + (fSlow30 * fRec133[0])))); + fRec134[0] = (fRec134[1] + fRec127[1]); + fRec127[0] = (fSlow25 * (fRec128[0] - (fSlow32 * fRec134[0]))); + double fTemp60 = (fRec127[0] + (fSlow4 * fTemp59)); + fRec126[0] = max((fRec126[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph20 = FAUSTFLOAT(fRec126[0]); + double fTemp61 = (2.5434040020076175e-83 * fTemp60); + double fTemp62 = (fRec1[0] * ((((((((((((((((((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16) + fTemp19) + fTemp22) + fTemp25) + fTemp28) + fTemp31) + fTemp34) + fTemp37) + fTemp40) + fTemp43) + fTemp46) + fTemp49) + fTemp52) + fTemp55) + fTemp58) + fTemp61)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph21 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = (0.021994295969128601 * fTemp6); + double fTemp64 = (0.024590370452110585 * fTemp15); + double fTemp65 = (0.026560635762986527 * fTemp27); + double fTemp66 = (0.014285714285714285 * fTemp30); + double fTemp67 = (0.028171808490950554 * fTemp42); + double fTemp68 = (0.020389258061373223 * fTemp48); + double fTemp69 = (0.029546842014263944 * fTemp60); + double fTemp70 = (0.014197256999998666 * fTemp9); + double fTemp71 = (0.020573779994945588 * fTemp21); + double fTemp72 = (0.021295885499997998 * fTemp36); + double fTemp73 = (0.022022915754780329 * fTemp54); + double fTemp74 = (fRec1[0] * ((((((((fTemp1 + fTemp63) + fTemp64) + fTemp65) + fTemp66) + fTemp67) + fTemp68) + fTemp69) - (((fTemp70 + fTemp71) + fTemp72) + fTemp73))); + fRec135[0] = max((fRec135[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + fVbargraph22 = FAUSTFLOAT(fRec135[0]); + output1[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = (fRec3[0] * double(input29[i])); + fRec141[0] = (fRec141[1] + fRec140[1]); + fRec142[0] = (fRec142[1] + fRec141[1]); + fRec140[0] = (fSlow27 * ((fSlow3 * fTemp75) - ((fSlow29 * fRec141[0]) + (fSlow28 * fRec142[0])))); + fRec143[0] = (fRec143[1] + fRec139[1]); + fRec144[0] = (fRec144[1] + fRec143[1]); + fRec139[0] = (fSlow26 * (fRec140[0] - ((fSlow31 * fRec143[0]) + (fSlow30 * fRec144[0])))); + fRec145[0] = (fRec145[1] + fRec138[1]); + fRec138[0] = (fSlow25 * (fRec139[0] - (fSlow32 * fRec145[0]))); + double fTemp76 = (fRec138[0] + (fSlow4 * fTemp75)); + fRec137[0] = max((fRec137[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph23 = FAUSTFLOAT(fRec137[0]); + double fTemp77 = (0.020389258061373223 * fTemp76); + double fTemp78 = (fRec3[0] * double(input25[i])); + fRec150[0] = (fRec150[1] + fRec149[1]); + fRec151[0] = (fRec151[1] + fRec150[1]); + fRec149[0] = (fSlow27 * ((fSlow3 * fTemp78) - ((fSlow29 * fRec150[0]) + (fSlow28 * fRec151[0])))); + fRec152[0] = (fRec152[1] + fRec148[1]); + fRec153[0] = (fRec153[1] + fRec152[1]); + fRec148[0] = (fSlow26 * (fRec149[0] - ((fSlow31 * fRec152[0]) + (fSlow30 * fRec153[0])))); + fRec154[0] = (fRec154[1] + fRec147[1]); + fRec147[0] = (fSlow25 * (fRec148[0] - (fSlow32 * fRec154[0]))); + double fTemp79 = (fRec147[0] + (fSlow4 * fTemp78)); + fRec146[0] = max((fRec146[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + fVbargraph24 = FAUSTFLOAT(fRec146[0]); + double fTemp80 = (0.029546842014263944 * fTemp79); + double fTemp81 = (fRec3[0] * double(input4[i])); + fRec157[0] = (fRec157[1] + fRec156[1]); + fRec158[0] = (fRec158[1] + fRec157[1]); + fRec156[0] = (fSlow11 * ((fSlow3 * fTemp81) - ((fSlow13 * fRec157[0]) + (fSlow12 * fRec158[0])))); + double fTemp82 = (fRec156[0] + (fSlow4 * fTemp81)); + fRec155[0] = max((fRec155[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph25 = FAUSTFLOAT(fRec155[0]); + double fTemp83 = (fRec3[0] * double(input1[i])); + fRec161[0] = (fRec161[1] + fRec160[1]); + fRec160[0] = (fSlow8 * ((fSlow3 * fTemp83) - (fSlow9 * fRec161[0]))); + double fTemp84 = (fRec160[0] + (fSlow4 * fTemp83)); + fRec159[0] = max((fRec159[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph26 = FAUSTFLOAT(fRec159[0]); + double fTemp85 = (0.021994295969128601 * fTemp84); + double fTemp86 = (fRec3[0] * double(input27[i])); + fRec166[0] = (fRec166[1] + fRec165[1]); + fRec167[0] = (fRec167[1] + fRec166[1]); + fRec165[0] = (fSlow27 * ((fSlow3 * fTemp86) - ((fSlow29 * fRec166[0]) + (fSlow28 * fRec167[0])))); + fRec168[0] = (fRec168[1] + fRec164[1]); + fRec169[0] = (fRec169[1] + fRec168[1]); + fRec164[0] = (fSlow26 * (fRec165[0] - ((fSlow31 * fRec168[0]) + (fSlow30 * fRec169[0])))); + fRec170[0] = (fRec170[1] + fRec163[1]); + fRec163[0] = (fSlow25 * (fRec164[0] - (fSlow32 * fRec170[0]))); + double fTemp87 = (fRec163[0] + (fSlow4 * fTemp86)); + fRec162[0] = max((fRec162[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph27 = FAUSTFLOAT(fRec162[0]); + double fTemp88 = (0.022022915754780329 * fTemp87); + double fTemp89 = (fTemp1 + fTemp7); + double fTemp90 = (fRec3[0] * double(input16[i])); + fRec174[0] = (fRec174[1] + fRec173[1]); + fRec175[0] = (fRec175[1] + fRec174[1]); + fRec173[0] = (fSlow20 * ((fSlow3 * fTemp90) - ((fSlow22 * fRec174[0]) + (fSlow21 * fRec175[0])))); + fRec176[0] = (fRec176[1] + fRec172[1]); + fRec177[0] = (fRec177[1] + fRec176[1]); + fRec172[0] = (fSlow19 * (fRec173[0] - ((fSlow24 * fRec176[0]) + (fSlow23 * fRec177[0])))); + double fTemp91 = (fRec172[0] + (fSlow4 * fTemp90)); + fRec171[0] = max((fRec171[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph28 = FAUSTFLOAT(fRec171[0]); + double fTemp92 = (fRec3[0] * double(input9[i])); + fRec181[0] = (fRec181[1] + fRec180[1]); + fRec182[0] = (fRec182[1] + fRec181[1]); + fRec180[0] = (fSlow15 * ((fSlow3 * fTemp92) - ((fSlow17 * fRec181[0]) + (fSlow16 * fRec182[0])))); + fRec183[0] = (fRec183[1] + fRec179[1]); + fRec179[0] = (fSlow14 * (fRec180[0] - (fSlow18 * fRec183[0]))); + double fTemp93 = (fRec179[0] + (fSlow4 * fTemp92)); + fRec178[0] = max((fRec178[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph29 = FAUSTFLOAT(fRec178[0]); + double fTemp94 = (0.026560635762986527 * fTemp93); + double fTemp95 = (fRec3[0] * double(input11[i])); + fRec187[0] = (fRec187[1] + fRec186[1]); + fRec188[0] = (fRec188[1] + fRec187[1]); + fRec186[0] = (fSlow15 * ((fSlow3 * fTemp95) - ((fSlow17 * fRec187[0]) + (fSlow16 * fRec188[0])))); + fRec189[0] = (fRec189[1] + fRec185[1]); + fRec185[0] = (fSlow14 * (fRec186[0] - (fSlow18 * fRec189[0]))); + double fTemp96 = (fRec185[0] + (fSlow4 * fTemp95)); + fRec184[0] = max((fRec184[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph30 = FAUSTFLOAT(fRec184[0]); + double fTemp97 = (0.020573779994945588 * fTemp96); + double fTemp98 = (fRec3[0] * double(input18[i])); + fRec193[0] = (fRec193[1] + fRec192[1]); + fRec194[0] = (fRec194[1] + fRec193[1]); + fRec192[0] = (fSlow20 * ((fSlow3 * fTemp98) - ((fSlow22 * fRec193[0]) + (fSlow21 * fRec194[0])))); + fRec195[0] = (fRec195[1] + fRec191[1]); + fRec196[0] = (fRec196[1] + fRec195[1]); + fRec191[0] = (fSlow19 * (fRec192[0] - ((fSlow24 * fRec195[0]) + (fSlow23 * fRec196[0])))); + double fTemp99 = (fRec191[0] + (fSlow4 * fTemp98)); + fRec190[0] = max((fRec190[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); + fVbargraph31 = FAUSTFLOAT(fRec190[0]); + double fTemp100 = (fRec1[0] * ((fTemp77 + (fTemp80 + ((3.0114518464024883e-18 * fTemp82) + (fTemp85 + (fTemp88 + ((((fTemp67 + (fTemp72 + (fTemp66 + fTemp89))) + (1.2484819810925041e-18 * fTemp48)) + (4.0455439930475322e-18 * fTemp54)) + (9.0461113744202184e-18 * fTemp60))))))) - ((6.9001030189269641e-18 * fTemp91) + (fTemp94 + ((fTemp97 + (((fTemp70 + fTemp64) + (1.2597806908585981e-18 * fTemp21)) + (4.879109635569025e-18 * fTemp27))) + (2.607993801258108e-18 * fTemp99)))))); + fRec136[0] = max((fRec136[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + fVbargraph32 = FAUSTFLOAT(fRec136[0]); + output2[i] = FAUSTFLOAT(fTemp100); + double fTemp101 = (fRec1[0] * (((2.4969639621850082e-18 * fTemp76) + ((1.8092222748840437e-17 * fTemp79) + ((9.7582192711380499e-18 * fTemp93) + ((2.6935244158092871e-18 * fTemp84) + ((5.2159876025162161e-18 * fTemp99) + (fTemp73 + (fTemp67 + (fTemp66 + (fTemp71 + (fTemp1 + fTemp64)))))))))) - ((1.3800206037853928e-17 * fTemp91) + ((6.0229036928049765e-18 * fTemp82) + ((8.0910879860950644e-18 * fTemp87) + ((2.5195613817171963e-18 * fTemp96) + (fTemp69 + (fTemp68 + (fTemp72 + (fTemp65 + (fTemp63 + fTemp70))))))))))); + fRec197[0] = max((fRec197[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); + fVbargraph33 = FAUSTFLOAT(fRec197[0]); + output3[i] = FAUSTFLOAT(fTemp101); + double fTemp102 = (fRec1[0] * ((fTemp94 + ((9.0343555392074636e-18 * fTemp82) + (fTemp97 + (fTemp67 + (fTemp72 + (fTemp66 + ((fTemp1 + (3.7793420725757941e-18 * fTemp21)) + (1.4637328906707076e-17 * fTemp27)))))))) - (fTemp77 + (fTemp80 + ((2.0700309056780893e-17 * fTemp91) + (fTemp85 + (fTemp88 + ((7.823981403774323e-18 * fTemp99) + ((((fTemp64 + (fTemp70 + (4.0402866237139308e-18 * fTemp6))) + (3.745445943277512e-18 * fTemp48)) + (1.2136631979142595e-17 * fTemp54)) + (7.962406901797708e-17 * fTemp60)))))))))); + fRec198[0] = max((fRec198[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); + fVbargraph34 = FAUSTFLOAT(fRec198[0]); + output4[i] = FAUSTFLOAT(fTemp102); + double fTemp103 = (fRec1[0] * ((fTemp61 + (fTemp55 + (fTemp49 + (fTemp43 + (fTemp37 + (fTemp31 + (fTemp28 + (fTemp22 + (fTemp16 + (fTemp10 + fTemp89)))))))))) - (fTemp58 + (fTemp52 + (fTemp46 + (fTemp40 + (fTemp34 + (fTemp25 + (fTemp19 + (fTemp4 + fTemp13)))))))))); + fRec199[0] = max((fRec199[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + fVbargraph35 = FAUSTFLOAT(fRec199[0]); + output5[i] = FAUSTFLOAT(fTemp103); + double fTemp104 = (0.022574955908289243 * fTemp0); + double fTemp105 = (0.027648561470568499 * fTemp3); + double fTemp106 = (fTemp104 + fTemp105); + double fTemp107 = (0.027648561470568506 * fTemp6); + double fTemp108 = (0.012619783999998805 * fTemp9); + double fTemp109 = (0.043716214137085485 * fTemp12); + double fTemp110 = (0.021858107068542749 * fTemp15); + double fTemp111 = (0.038794291597509752 * fTemp21); + double fTemp112 = (0.04089277388695433 * fTemp24); + double fTemp113 = (0.016694405031674409 * fTemp27); + double fTemp114 = (0.013385302265262959 * fTemp33); + double fTemp115 = (0.047324189999995547 * fTemp36); + double fTemp116 = (0.035414181017315374 * fTemp39); + double fTemp117 = (0.012520803773755805 * fTemp42); + double fTemp118 = (0.033906496904967637 * fTemp51); + double fTemp119 = (0.048447942889749587 * fTemp54); + double fTemp120 = (0.029363887673040441 * fTemp57); + double fTemp121 = (0.0092856766004149483 * fTemp60); + double fTemp122 = (0.010558468816293319 * fTemp18); + double fTemp123 = (0.027513227513227514 * fTemp30); + double fTemp124 = (0.028125949882539081 * fTemp45); + double fTemp125 = (0.01922317685141265 * fTemp48); + double fTemp126 = (fRec1[0] * ((((((((((((((((fTemp106 + fTemp107) + fTemp108) + fTemp109) + fTemp110) + fTemp111) + fTemp112) + fTemp113) + fTemp114) + fTemp115) + fTemp116) + fTemp117) + fTemp118) + fTemp119) + fTemp120) + fTemp121) - (((fTemp122 + fTemp123) + fTemp124) + fTemp125))); + fRec200[0] = max((fRec200[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); + fVbargraph36 = FAUSTFLOAT(fRec200[0]); + output6[i] = FAUSTFLOAT(fTemp126); + double fTemp127 = (fRec3[0] * double(input5[i])); + fRec204[0] = (fRec204[1] + fRec203[1]); + fRec205[0] = (fRec205[1] + fRec204[1]); + fRec203[0] = (fSlow11 * ((fSlow3 * fTemp127) - ((fSlow13 * fRec204[0]) + (fSlow12 * fRec205[0])))); + double fTemp128 = (fRec203[0] + (fSlow4 * fTemp127)); + fRec202[0] = max((fRec202[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp128)))))); + fVbargraph37 = FAUSTFLOAT(fRec202[0]); + double fTemp129 = (0.043716214137085485 * fTemp128); + double fTemp130 = (fRec3[0] * double(input10[i])); + fRec209[0] = (fRec209[1] + fRec208[1]); + fRec210[0] = (fRec210[1] + fRec209[1]); + fRec208[0] = (fSlow15 * ((fSlow3 * fTemp130) - ((fSlow17 * fRec209[0]) + (fSlow16 * fRec210[0])))); + fRec211[0] = (fRec211[1] + fRec207[1]); + fRec207[0] = (fSlow14 * (fRec208[0] - (fSlow18 * fRec211[0]))); + double fTemp131 = (fRec207[0] + (fSlow4 * fTemp130)); + fRec206[0] = max((fRec206[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp131)))))); + fVbargraph38 = FAUSTFLOAT(fRec206[0]); + double fTemp132 = (5.0079204648915091e-18 * fTemp131); + double fTemp133 = (0.0092856766004149483 * fTemp79); + double fTemp134 = (2.6768460856911014e-18 * fTemp82); + double fTemp135 = (0.027648561470568506 * fTemp84); + double fTemp136 = (fRec3[0] * double(input28[i])); + fRec216[0] = (fRec216[1] + fRec215[1]); + fRec217[0] = (fRec217[1] + fRec216[1]); + fRec215[0] = (fSlow27 * ((fSlow3 * fTemp136) - ((fSlow29 * fRec216[0]) + (fSlow28 * fRec217[0])))); + fRec218[0] = (fRec218[1] + fRec214[1]); + fRec219[0] = (fRec219[1] + fRec218[1]); + fRec214[0] = (fSlow26 * (fRec215[0] - ((fSlow31 * fRec218[0]) + (fSlow30 * fRec219[0])))); + fRec220[0] = (fRec220[1] + fRec213[1]); + fRec213[0] = (fSlow25 * (fRec214[0] - (fSlow32 * fRec220[0]))); + double fTemp137 = (fRec213[0] + (fSlow4 * fTemp136)); + fRec212[0] = max((fRec212[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp137)))))); + fVbargraph39 = FAUSTFLOAT(fRec212[0]); + double fTemp138 = (4.1523482904968253e-18 * fTemp137); + double fTemp139 = (fRec3[0] * double(input19[i])); + fRec224[0] = (fRec224[1] + fRec223[1]); + fRec225[0] = (fRec225[1] + fRec224[1]); + fRec223[0] = (fSlow20 * ((fSlow3 * fTemp139) - ((fSlow22 * fRec224[0]) + (fSlow21 * fRec225[0])))); + fRec226[0] = (fRec226[1] + fRec222[1]); + fRec227[0] = (fRec227[1] + fRec226[1]); + fRec222[0] = (fSlow19 * (fRec223[0] - ((fSlow24 * fRec226[0]) + (fSlow23 * fRec227[0])))); + double fTemp140 = (fRec222[0] + (fSlow4 * fTemp139)); + fRec221[0] = max((fRec221[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp140)))))); + fVbargraph40 = FAUSTFLOAT(fRec221[0]); + double fTemp141 = (0.013385302265262959 * fTemp140); + double fTemp142 = (5.7955417805735729e-18 * fTemp99); + double fTemp143 = (0.038794291597509752 * fTemp96); + double fTemp144 = (1.6929861152980278e-18 * fTemp6); + double fTemp145 = (2.6768460856911007e-18 * fTemp12); + double fTemp146 = (2.3754652515039685e-18 * fTemp21); + double fTemp147 = (8.1961337873870493e-19 * fTemp33); + double fTemp148 = (2.8429185316539108e-18 * fTemp60); + double fTemp149 = (3.0667124528564294e-18 * (fTemp27 + fTemp91)); + double fTemp150 = (0.01922317685141265 * fTemp76); + double fTemp151 = (fRec3[0] * double(input26[i])); + fRec232[0] = (fRec232[1] + fRec231[1]); + fRec233[0] = (fRec233[1] + fRec232[1]); + fRec231[0] = (fSlow27 * ((fSlow3 * fTemp151) - ((fSlow29 * fRec232[0]) + (fSlow28 * fRec233[0])))); + fRec234[0] = (fRec234[1] + fRec230[1]); + fRec235[0] = (fRec235[1] + fRec234[1]); + fRec230[0] = (fSlow26 * (fRec231[0] - ((fSlow31 * fRec234[0]) + (fSlow30 * fRec235[0])))); + fRec236[0] = (fRec236[1] + fRec229[1]); + fRec229[0] = (fSlow25 * (fRec230[0] - (fSlow32 * fRec236[0]))); + double fTemp152 = (fRec229[0] + (fSlow4 * fTemp151)); + fRec228[0] = max((fRec228[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); + fVbargraph41 = FAUSTFLOAT(fRec228[0]); + double fTemp153 = (7.1920782098622802e-18 * fTemp152); + double fTemp154 = (fRec3[0] * double(input17[i])); + fRec240[0] = (fRec240[1] + fRec239[1]); + fRec241[0] = (fRec241[1] + fRec240[1]); + fRec239[0] = (fSlow20 * ((fSlow3 * fTemp154) - ((fSlow22 * fRec240[0]) + (fSlow21 * fRec241[0])))); + fRec242[0] = (fRec242[1] + fRec238[1]); + fRec243[0] = (fRec243[1] + fRec242[1]); + fRec238[0] = (fSlow19 * (fRec239[0] - ((fSlow24 * fRec242[0]) + (fSlow23 * fRec243[0])))); + double fTemp155 = (fRec238[0] + (fSlow4 * fTemp154)); + fRec237[0] = max((fRec237[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); + fVbargraph42 = FAUSTFLOAT(fRec237[0]); + double fTemp156 = (0.035414181017315374 * fTemp155); + double fTemp157 = (0.016694405031674409 * fTemp93); + double fTemp158 = (0.048447942889749587 * fTemp87); + double fTemp159 = (6.5054795140920346e-18 * fTemp39); + double fTemp160 = (1.1770801000262998e-18 * fTemp48); + double fTemp161 = (8.8997427277808398e-18 * fTemp54); + double fTemp162 = (fRec1[0] * ((fTemp129 + (fTemp132 + (fTemp133 + (fTemp134 + (fTemp135 + (fTemp138 + (fTemp141 + (fTemp142 + (fTemp143 + ((fTemp120 + (fTemp117 + ((((fTemp108 + (fTemp106 + fTemp144)) + fTemp145) + fTemp146) + fTemp147))) + fTemp148)))))))))) - (fTemp149 + (fTemp150 + (fTemp153 + (fTemp156 + (fTemp157 + (fTemp158 + ((fTemp118 + ((fTemp124 + ((fTemp115 + (fTemp123 + (fTemp112 + (fTemp110 + fTemp122)))) + fTemp159)) + fTemp160)) + fTemp161))))))))); + fRec201[0] = max((fRec201[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp162)))))); + fVbargraph43 = FAUSTFLOAT(fRec201[0]); + output7[i] = FAUSTFLOAT(fTemp162); + double fTemp163 = (6.1334249057128588e-18 * (fTemp93 - fTemp91)); + double fTemp164 = (5.3536921713822013e-18 * fTemp128); + double fTemp165 = (5.6858370633078216e-18 * fTemp79); + double fTemp166 = (1.3010959028184069e-17 * fTemp155); + double fTemp167 = (3.3859722305960555e-18 * fTemp84); + double fTemp168 = (1.779948545556168e-17 * fTemp87); + double fTemp169 = (1.6392267574774099e-18 * fTemp140); + double fTemp170 = (4.7509305030079371e-18 * fTemp96); + double fTemp171 = (fTemp106 + fTemp108); + double fTemp172 = (1.0015840929783018e-17 * fTemp131); + double fTemp173 = (2.3541602000525996e-18 * fTemp76); + double fTemp174 = (1.438415641972456e-17 * fTemp152); + double fTemp175 = (5.3536921713822029e-18 * fTemp82); + double fTemp176 = (8.3046965809936507e-18 * fTemp137); + double fTemp177 = (1.1591083561147146e-17 * fTemp99); + double fTemp178 = (fRec1[0] * ((fTemp163 + (fTemp164 + (fTemp165 + (fTemp166 + (fTemp167 + (fTemp168 + (fTemp169 + (fTemp170 + (fTemp120 + (fTemp118 + (fTemp125 + (fTemp117 + (fTemp115 + (fTemp112 + (fTemp110 + fTemp171))))))))))))))) - (fTemp172 + (fTemp173 + (fTemp174 + (fTemp175 + (fTemp176 + (fTemp177 + (fTemp121 + (fTemp119 + (fTemp124 + (fTemp116 + (fTemp114 + (fTemp123 + (fTemp113 + (fTemp111 + (fTemp122 + (fTemp107 + fTemp109)))))))))))))))))); + fRec244[0] = max((fRec244[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp178)))))); + fVbargraph44 = FAUSTFLOAT(fRec244[0]); + output8[i] = FAUSTFLOAT(fTemp178); + double fTemp179 = (1.5023761394674526e-17 * fTemp131); + double fTemp180 = (8.0305382570733035e-18 * fTemp82); + double fTemp181 = (1.2457044871490476e-17 * fTemp137); + double fTemp182 = (1.7386625341720719e-17 * fTemp99); + double fTemp183 = (9.2001373585692901e-18 * fTemp27); + double fTemp184 = (1.9516438542276106e-17 * fTemp39); + double fTemp185 = (3.5312403000788995e-18 * fTemp48); + double fTemp186 = (2.6699228183342524e-17 * fTemp54); + double fTemp187 = (2.1576234629586837e-17 * fTemp152); + double fTemp188 = (9.200137358569287e-18 * fTemp91); + double fTemp189 = (5.0789583458940831e-18 * fTemp6); + double fTemp190 = (8.0305382570733005e-18 * fTemp12); + double fTemp191 = (7.1263957545119048e-18 * fTemp21); + double fTemp192 = (2.4588401362161147e-18 * fTemp33); + double fTemp193 = (2.5023430732567692e-17 * fTemp60); + double fTemp194 = (fRec1[0] * ((fTemp179 + (fTemp150 + (fTemp156 + (fTemp157 + (fTemp180 + (fTemp181 + (fTemp158 + (fTemp182 + (fTemp120 + (((fTemp117 + ((fTemp171 + fTemp183) + fTemp184)) + fTemp185) + fTemp186)))))))))) - (fTemp129 + (fTemp187 + (fTemp133 + (fTemp188 + (fTemp135 + (fTemp141 + (fTemp143 + ((fTemp118 + (fTemp124 + (fTemp115 + ((fTemp123 + (fTemp112 + ((fTemp122 + (fTemp110 + (fTemp189 + fTemp190))) + fTemp191))) + fTemp192)))) + fTemp193)))))))))); + fRec245[0] = max((fRec245[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp194)))))); + fVbargraph45 = FAUSTFLOAT(fRec245[0]); + output9[i] = FAUSTFLOAT(fTemp194); + double fTemp195 = (0.025630902468550196 * fTemp76); + double fTemp196 = (0.043716214137085485 * fTemp82); + double fTemp197 = (0.027648561470568499 * fTemp84); + double fTemp198 = (fTemp104 + fTemp107); + double fTemp199 = (0.025396825396825397 * fTemp30); + double fTemp200 = (0.025630902468550199 * fTemp48); + double fTemp201 = (0.037859351999996446 * fTemp99); + double fTemp202 = (0.025862861065006505 * fTemp96); + double fTemp203 = (0.025239567999997631 * fTemp9); + double fTemp204 = (0.025862861065006511 * fTemp21); + double fTemp205 = (0.050083215095023212 * fTemp42); + double fTemp206 = (fRec1[0] * ((fTemp195 + ((6.133424905712858e-18 * fTemp91) + (fTemp196 + (fTemp197 + ((((fTemp198 + (2.6768460856911007e-18 * fTemp15)) + fTemp199) + fTemp200) + (0.027684538794142621 * fTemp54)))))) - ((0.033388810063348803 * (fTemp27 - fTemp93)) + ((0.037142706401659779 * fTemp79) + ((0.027684538794142628 * fTemp87) + (fTemp201 + (fTemp202 + ((((fTemp203 + fTemp204) + (2.3182167122294292e-18 * fTemp36)) + fTemp205) + (0.037142706401659786 * fTemp60))))))))); + fRec246[0] = max((fRec246[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp206)))))); + fVbargraph46 = FAUSTFLOAT(fRec246[0]); + output10[i] = FAUSTFLOAT(fTemp206); + double fTemp207 = (0.025630902468550199 * fTemp76); + double fTemp208 = (0.025862861065006511 * fTemp96); + double fTemp209 = (fRec1[0] * ((fTemp207 + ((1.8400274717138574e-17 * fTemp91) + ((0.033388810063348796 * fTemp93) + (fTemp135 + (fTemp201 + (((fTemp199 + ((fTemp104 + (0.025862861065006505 * fTemp21)) + (0.033388810063348817 * fTemp27))) + (6.9546501366882881e-18 * fTemp36)) + (0.037142706401659731 * fTemp60))))))) - ((0.037142706401659828 * fTemp79) + (fTemp196 + ((0.027684538794142618 * fTemp87) + (fTemp208 + (((fTemp205 + ((fTemp203 + (0.027648561470568499 * fTemp6)) + (8.0305382570733005e-18 * fTemp15))) + (0.025630902468550196 * fTemp48)) + (0.027684538794142632 * fTemp54)))))))); + fRec247[0] = max((fRec247[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp209)))))); + fVbargraph47 = FAUSTFLOAT(fRec247[0]); + output11[i] = FAUSTFLOAT(fTemp209); + double fTemp210 = (fRec1[0] * (((0.037142706401659786 * fTemp79) + ((3.0667124528564293e-17 * fTemp91) + (fTemp196 + ((0.027684538794142663 * fTemp87) + (fTemp202 + ((fTemp199 + ((fTemp204 + (fTemp104 + (1.3384230428455503e-17 * fTemp15))) + (0.033388810063348762 * fTemp27))) + (0.037142706401659779 * fTemp60))))))) - (fTemp195 + ((0.033388810063348852 * fTemp93) + (fTemp197 + (fTemp201 + ((fTemp200 + (fTemp205 + ((fTemp107 + fTemp203) + (1.1591083561147147e-17 * fTemp36)))) + (0.027684538794142587 * fTemp54)))))))); + fRec248[0] = max((fRec248[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp210)))))); + fVbargraph48 = FAUSTFLOAT(fRec248[0]); + output12[i] = FAUSTFLOAT(fTemp210); + double fTemp211 = (fRec1[0] * (((0.037142706401659856 * fTemp79) + ((4.2933974339990009e-17 * fTemp91) + ((0.027684538794142632 * fTemp87) + (fTemp201 + (fTemp208 + ((((fTemp199 + (fTemp104 + (0.027648561470568496 * fTemp6))) + (1.6227516985606004e-17 * fTemp36)) + (0.025630902468550189 * fTemp48)) + (0.027684538794142618 * fTemp54))))))) - (fTemp207 + ((0.033388810063348817 * fTemp93) + (fTemp196 + (fTemp135 + ((fTemp205 + (((fTemp203 + (1.8737922599837705e-17 * fTemp15)) + (0.025862861065006501 * fTemp21)) + (0.033388810063348796 * fTemp27))) + (0.03714270640165971 * fTemp60)))))))); + fRec249[0] = max((fRec249[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp211)))))); + fVbargraph49 = FAUSTFLOAT(fRec249[0]); + output13[i] = FAUSTFLOAT(fTemp211); + double fTemp212 = (fRec1[0] * ((fTemp121 + (fTemp119 + (fTemp124 + (fTemp117 + (fTemp115 + (fTemp113 + (fTemp111 + (fTemp122 + (fTemp110 + (fTemp108 + fTemp198)))))))))) - (fTemp120 + (fTemp118 + (fTemp125 + (fTemp116 + (fTemp114 + (fTemp123 + (fTemp112 + (fTemp105 + fTemp109)))))))))); + fRec250[0] = max((fRec250[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp212)))))); + fVbargraph50 = FAUSTFLOAT(fRec250[0]); + output14[i] = FAUSTFLOAT(fTemp212); + double fTemp213 = (fRec1[0] * ((fTemp153 + (fTemp133 + (fTemp156 + (fTemp134 + (fTemp135 + (fTemp142 + (fTemp143 + (fTemp148 + (fTemp118 + (fTemp124 + (fTemp117 + (fTemp159 + (fTemp112 + (fTemp146 + (fTemp122 + (fTemp108 + (fTemp104 + fTemp144))))))))))))))))) - (fTemp149 + (fTemp129 + (fTemp132 + (fTemp150 + (fTemp157 + (fTemp138 + (fTemp158 + (fTemp141 + (fTemp120 + (fTemp161 + (fTemp160 + (fTemp115 + (fTemp147 + (fTemp123 + (fTemp110 + (fTemp105 + fTemp145)))))))))))))))))); + fRec251[0] = max((fRec251[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp213)))))); + fVbargraph51 = FAUSTFLOAT(fRec251[0]); + output15[i] = FAUSTFLOAT(fTemp213); + double fTemp214 = (fTemp104 + fTemp108); + double fTemp215 = (fRec1[0] * ((fTemp163 + (fTemp172 + (fTemp174 + (fTemp165 + (fTemp167 + (fTemp176 + (fTemp168 + (fTemp170 + (fTemp125 + (fTemp124 + (fTemp117 + (fTemp116 + (fTemp115 + (fTemp114 + (fTemp122 + (fTemp110 + (fTemp109 + fTemp214))))))))))))))))) - (fTemp164 + (fTemp173 + (fTemp166 + (fTemp175 + (fTemp169 + (fTemp177 + (fTemp121 + (fTemp120 + (fTemp119 + (fTemp118 + (fTemp123 + (fTemp113 + (fTemp112 + (fTemp111 + (fTemp105 + fTemp107))))))))))))))))); + fRec252[0] = max((fRec252[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp215)))))); + fVbargraph52 = FAUSTFLOAT(fRec252[0]); + output16[i] = FAUSTFLOAT(fTemp215); + double fTemp216 = (fRec1[0] * ((fTemp129 + (fTemp150 + (fTemp187 + (fTemp157 + (fTemp180 + (fTemp158 + (fTemp141 + (fTemp182 + (fTemp186 + (fTemp118 + (fTemp185 + (fTemp124 + (fTemp117 + (fTemp192 + (fTemp183 + (fTemp112 + (fTemp122 + (fTemp190 + fTemp214)))))))))))))))))) - (fTemp179 + (fTemp133 + (fTemp156 + (fTemp188 + (fTemp135 + (fTemp181 + (fTemp143 + (fTemp193 + (fTemp120 + (fTemp184 + (fTemp115 + (fTemp123 + (fTemp191 + (fTemp110 + (fTemp105 + fTemp189))))))))))))))))); + fRec253[0] = max((fRec253[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp216)))))); + fVbargraph53 = FAUSTFLOAT(fRec253[0]); + output17[i] = FAUSTFLOAT(fTemp216); + double fTemp217 = (fTemp0 + fTemp3); + double fTemp218 = (0.021093750000000001 * fTemp217); + double fTemp219 = (0.027231914153020904 * fTemp128); + double fTemp220 = (0.041597435974919175 * fTemp131); + double fTemp221 = (4.8773411440759829e-18 * fTemp152); + double fTemp222 = (0.029413829057838591 * fTemp155); + double fTemp223 = (2.5471083409710855e-18 * fTemp91); + double fTemp224 = (0.016982082124440745 * fTemp93); + double fTemp225 = (0.027231914153020897 * fTemp82); + double fTemp226 = (0.021093749999999994 * fTemp84); + double fTemp227 = (1.5316979614614479e-17 * fTemp137); + double fTemp228 = (0.028161597282885743 * fTemp87); + double fTemp229 = (0.031444705933590805 * fTemp99); + double fTemp230 = (0.013154264250377145 * fTemp96); + double fTemp231 = (5.236595479505967e-18 * fTemp9); + double fTemp232 = ((0.021093749999999998 * fTemp6) + fTemp231); + double fTemp233 = (0.027231914153020911 * fTemp12); + double fTemp234 = (1.6674738251076273e-18 * fTemp15); + double fTemp235 = (0.013154264250377147 * fTemp21); + double fTemp236 = (2.5471083409710867e-18 * fTemp24); + double fTemp237 = (1.9254329235850881e-18 * fTemp36); + double fTemp238 = (9.3789450288214403e-34 * fTemp51); + double fTemp239 = (0.01111738239902945 * (fTemp33 + fTemp140)); + double fTemp240 = (0.026072572806195678 * fTemp76); + double fTemp241 = (0.012594249175901169 * fTemp79); + double fTemp242 = (0.021480823570105497 * fTemp18); + double fTemp243 = (0.016982082124440741 * fTemp27); + double fTemp244 = (0.024609375000000013 * fTemp30); + double fTemp245 = (0.029413829057838584 * fTemp39); + double fTemp246 = (0.020798717987459581 * fTemp42); + double fTemp247 = (0.0067319093514117785 * fTemp45); + double fTemp248 = (0.026072572806195685 * fTemp48); + double fTemp249 = (0.028161597282885739 * fTemp54); + double fTemp250 = (0.039826512815546306 * fTemp57); + double fTemp251 = (0.012594249175901174 * fTemp60); + double fTemp252 = (fRec1[0] * ((fTemp218 + (fTemp219 + (fTemp220 + (fTemp221 + (fTemp222 + (fTemp223 + (fTemp224 + (fTemp225 + (fTemp226 + (fTemp227 + (fTemp228 + (fTemp229 + (fTemp230 + ((((((fTemp232 + fTemp233) + fTemp234) + fTemp235) + fTemp236) + fTemp237) + fTemp238)))))))))))))) - (fTemp239 + (fTemp240 + (fTemp241 + (((((((((fTemp242 + fTemp243) + fTemp244) + fTemp245) + fTemp246) + fTemp247) + fTemp248) + fTemp249) + fTemp250) + fTemp251)))))); + fRec254[0] = max((fRec254[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp252)))))); + fVbargraph54 = FAUSTFLOAT(fRec254[0]); + output18[i] = FAUSTFLOAT(fTemp252); + double fTemp253 = (0.01111738239902945 * (fTemp33 - fTemp140)); + double fTemp254 = (0.027231914153020911 * fTemp128); + double fTemp255 = (1.4632023432227946e-17 * fTemp152); + double fTemp256 = (0.02941382905783858 * fTemp155); + double fTemp257 = (7.6413250229132566e-18 * fTemp91); + double fTemp258 = (0.016982082124440741 * fTemp93); + double fTemp259 = (0.021093749999999998 * fTemp84); + double fTemp260 = (0.028161597282885732 * fTemp87); + double fTemp261 = (0.013154264250377147 * fTemp96); + double fTemp262 = (0.016982082124440748 * fTemp27); + double fTemp263 = (0.029413829057838594 * fTemp39); + double fTemp264 = (0.026072572806195678 * fTemp48); + double fTemp265 = (0.028161597282885746 * fTemp54); + double fTemp266 = (0.012594249175901155 * fTemp60); + double fTemp267 = (0.026072572806195685 * fTemp76); + double fTemp268 = (0.012594249175901188 * fTemp79); + double fTemp269 = (0.021093749999999994 * fTemp6); + double fTemp270 = (0.027231914153020904 * fTemp12); + double fTemp271 = (5.0024214753228816e-18 * fTemp15); + double fTemp272 = (0.013154264250377145 * fTemp21); + double fTemp273 = (7.6413250229132581e-18 * fTemp24); + double fTemp274 = (5.7762987707552641e-18 * fTemp36); + double fTemp275 = (2.8136835086464319e-33 * fTemp51); + double fTemp276 = (fRec1[0] * ((fTemp253 + (fTemp218 + (fTemp254 + (fTemp255 + (fTemp256 + (fTemp257 + (fTemp258 + (fTemp259 + (fTemp260 + (fTemp261 + (((((fTemp231 + fTemp262) + fTemp263) + fTemp264) + fTemp265) + fTemp266))))))))))) - (fTemp220 + (fTemp267 + (fTemp268 + (fTemp225 + (fTemp227 + (fTemp229 + (fTemp250 + ((fTemp247 + (fTemp246 + ((fTemp244 + (((fTemp242 + ((fTemp269 + fTemp270) + fTemp271)) + fTemp272) + fTemp273)) + fTemp274))) + fTemp275)))))))))); + fRec255[0] = max((fRec255[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp276)))))); + fVbargraph55 = FAUSTFLOAT(fRec255[0]); + output19[i] = FAUSTFLOAT(fTemp276); + double fTemp277 = (2.4386705720379917e-17 * fTemp152); + double fTemp278 = (0.012594249175901172 * fTemp79); + double fTemp279 = (1.2735541704855428e-17 * fTemp91); + double fTemp280 = (0.01111738239902945 * fTemp140); + double fTemp281 = (8.3373691255381378e-18 * fTemp15); + double fTemp282 = (1.2735541704855431e-17 * fTemp24); + double fTemp283 = (0.016982082124440721 * fTemp27); + double fTemp284 = (0.011117382399029452 * fTemp33); + double fTemp285 = (9.6271646179254396e-18 * fTemp36); + double fTemp286 = (0.029413829057838549 * fTemp39); + double fTemp287 = (0.026072572806195689 * fTemp48); + double fTemp288 = (4.6894725144107197e-33 * fTemp51); + double fTemp289 = (0.028161597282885704 * fTemp54); + double fTemp290 = (0.012594249175901169 * fTemp60); + double fTemp291 = (0.029413829057838629 * fTemp155); + double fTemp292 = (0.016982082124440766 * fTemp93); + double fTemp293 = (0.028161597282885781 * fTemp87); + double fTemp294 = (0.013154264250377148 * fTemp21); + double fTemp295 = (fRec1[0] * ((fTemp220 + (fTemp240 + (fTemp277 + (fTemp278 + (fTemp279 + (fTemp225 + (fTemp227 + (fTemp280 + (fTemp229 + ((((((((((fTemp231 + fTemp281) + fTemp282) + fTemp283) + fTemp284) + fTemp285) + fTemp286) + fTemp287) + fTemp288) + fTemp289) + fTemp290)))))))))) - ((0.021093750000000001 * (fTemp6 - fTemp217)) + (fTemp219 + (fTemp291 + (fTemp292 + (fTemp226 + (fTemp293 + (fTemp230 + (fTemp250 + (fTemp247 + (fTemp246 + (fTemp244 + ((fTemp233 + fTemp242) + fTemp294)))))))))))))); + fRec256[0] = max((fRec256[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp295)))))); + fVbargraph56 = FAUSTFLOAT(fRec256[0]); + output20[i] = FAUSTFLOAT(fTemp295); + double fTemp296 = (fTemp0 - fTemp84); + double fTemp297 = (1.7829758386797597e-17 * fTemp91); + double fTemp298 = (fTemp231 + (0.021093749999999991 * fTemp6)); + double fTemp299 = (0.027231914153020901 * fTemp12); + double fTemp300 = (0.011117382399029452 * fTemp140); + double fTemp301 = (0.012594249175901195 * fTemp79); + double fTemp302 = (3.4141388008531875e-17 * fTemp152); + double fTemp303 = (0.026072572806195689 * fTemp76); + double fTemp304 = (0.029413829057838594 * fTemp155); + double fTemp305 = (0.016982082124440748 * fTemp93); + double fTemp306 = (0.028161597282885746 * fTemp87); + double fTemp307 = (0.013154264250377148 * fTemp96); + double fTemp308 = (1.167231677575339e-17 * fTemp15); + double fTemp309 = (1.7829758386797603e-17 * fTemp24); + double fTemp310 = (0.011117382399029449 * fTemp33); + double fTemp311 = (1.3478030465095617e-17 * fTemp36); + double fTemp312 = (0.02941382905783858 * fTemp39); + double fTemp313 = (0.026072572806195675 * fTemp48); + double fTemp314 = (6.5652615201750074e-33 * fTemp51); + double fTemp315 = (0.028161597282885732 * fTemp54); + double fTemp316 = (0.012594249175901146 * fTemp60); + double fTemp317 = (fRec1[0] * (((0.021093750000000001 * (fTemp3 + fTemp296)) + ((((fTemp297 + ((fTemp272 + (fTemp298 + fTemp299)) + fTemp300)) + fTemp301) + fTemp302) + fTemp303)) - (fTemp254 + (fTemp220 + (fTemp304 + (fTemp305 + (fTemp225 + (fTemp227 + (fTemp306 + (fTemp229 + (fTemp307 + ((fTemp250 + ((((fTemp247 + (fTemp246 + ((((fTemp244 + (fTemp243 + ((fTemp242 + fTemp308) + fTemp309))) + fTemp310) + fTemp311) + fTemp312))) + fTemp313) + fTemp314) + fTemp315)) + fTemp316)))))))))))); + fRec257[0] = max((fRec257[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp317)))))); + fVbargraph57 = FAUSTFLOAT(fRec257[0]); + output21[i] = FAUSTFLOAT(fTemp317); + double fTemp318 = (fTemp0 - fTemp3); + double fTemp319 = (0.021093750000000001 * fTemp318); + double fTemp320 = (fRec1[0] * ((fTemp319 + (fTemp239 + (fTemp223 + (fTemp224 + (fTemp225 + (fTemp226 + (fTemp228 + (fTemp229 + (fTemp230 + (fTemp250 + (fTemp247 + (fTemp245 + (fTemp237 + (fTemp235 + (fTemp242 + (fTemp232 + fTemp234)))))))))))))))) - (fTemp219 + (fTemp220 + (fTemp240 + (fTemp221 + (fTemp241 + (fTemp222 + (fTemp227 + (fTemp251 + (fTemp249 + (fTemp238 + (fTemp248 + (fTemp246 + (fTemp244 + (fTemp243 + (fTemp233 + fTemp236))))))))))))))))); + fRec258[0] = max((fRec258[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp320)))))); + fVbargraph58 = FAUSTFLOAT(fRec258[0]); + output22[i] = FAUSTFLOAT(fTemp320); + double fTemp321 = (fRec1[0] * ((fTemp319 + (fTemp220 + (fTemp257 + (fTemp258 + (fTemp259 + (fTemp227 + (fTemp260 + (fTemp261 + (fTemp266 + (fTemp250 + (fTemp265 + (fTemp275 + (fTemp264 + (fTemp247 + (fTemp262 + (fTemp273 + (fTemp242 + (fTemp231 + fTemp270)))))))))))))))))) - (fTemp253 + (fTemp254 + (fTemp267 + (fTemp255 + (fTemp268 + (fTemp256 + (fTemp225 + (fTemp229 + (fTemp246 + (fTemp263 + (fTemp274 + (fTemp244 + (fTemp272 + (fTemp269 + fTemp271)))))))))))))))); + fRec259[0] = max((fRec259[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp321)))))); + fVbargraph59 = FAUSTFLOAT(fRec259[0]); + output23[i] = FAUSTFLOAT(fTemp321); + double fTemp322 = (fRec1[0] * ((fTemp219 + (fTemp240 + (fTemp278 + (fTemp291 + (fTemp279 + (fTemp225 + (fTemp229 + (fTemp290 + (fTemp250 + (fTemp289 + (fTemp287 + (fTemp247 + (fTemp285 + (fTemp283 + (fTemp242 + (fTemp281 + (fTemp231 + fTemp233))))))))))))))))) - ((0.021093750000000001 * (fTemp6 - fTemp318)) + (fTemp220 + (fTemp277 + (fTemp292 + (fTemp226 + (fTemp227 + (fTemp293 + (fTemp280 + (fTemp230 + (fTemp288 + (fTemp246 + (fTemp286 + (fTemp284 + (fTemp244 + (fTemp294 + fTemp282))))))))))))))))); + fRec260[0] = max((fRec260[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp322)))))); + fVbargraph60 = FAUSTFLOAT(fRec260[0]); + output24[i] = FAUSTFLOAT(fTemp322); + double fTemp323 = (fRec1[0] * ((fTemp254 + (fTemp220 + (fTemp303 + (fTemp301 + (fTemp304 + (fTemp297 + (fTemp227 + (fTemp250 + (fTemp314 + (fTemp247 + (fTemp312 + (fTemp310 + (fTemp309 + (fTemp272 + (fTemp242 + fTemp298))))))))))))))) - ((0.021093750000000001 * (fTemp3 - fTemp296)) + (fTemp302 + (fTemp305 + (fTemp225 + (fTemp306 + (fTemp300 + (fTemp229 + (fTemp307 + (fTemp316 + (fTemp315 + (fTemp313 + (fTemp246 + (fTemp311 + (fTemp244 + (fTemp243 + (fTemp299 + fTemp308)))))))))))))))))); + fRec261[0] = max((fRec261[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp323)))))); + fVbargraph61 = FAUSTFLOAT(fRec261[0]); + output25[i] = FAUSTFLOAT(fTemp323); + double fTemp324 = (0.021308452520676528 * (fTemp12 + fTemp128)); + double fTemp325 = (0.010535180889746065 * (fTemp6 + fTemp84)); + double fTemp326 = (0.016998264729033836 * fTemp131); + double fTemp327 = (0.035191232193238609 * fTemp76); + double fTemp328 = (0.0062770252486745223 * fTemp155); + double fTemp329 = (0.0023131708388267431 * fTemp93); + double fTemp330 = (0.0071028175068921654 * fTemp82); + double fTemp331 = (0.041001357231518168 * fTemp137); + double fTemp332 = (0.012205326872422687 * fTemp87); + double fTemp333 = (0.035587388102713349 * fTemp140); + double fTemp334 = (0.02907849643359095 * fTemp99); + double fTemp335 = (0.030460165261409405 * fTemp96); + double fTemp336 = (0.02017333553791887 * fTemp0); + double fTemp337 = (0.031605542669238249 * fTemp3); + double fTemp338 = (fTemp336 + fTemp337); + double fTemp339 = (0.032806508796871948 * fTemp9); + double fTemp340 = (fTemp338 + fTemp339); + double fTemp341 = (0.0263335984839893 * fTemp18); + double fTemp342 = (fTemp340 + fTemp341); + double fTemp343 = (0.030460165261409402 * fTemp21); + double fTemp344 = (0.014254712301587407 * fTemp30); + double fTemp345 = (0.035587388102713342 * fTemp33); + double fTemp346 = (0.035191232193238602 * fTemp48); + double fTemp347 = (1.427539198259021e-18 * fTemp152); + double fTemp348 = (0.00046786183841729075 * fTemp79); + double fTemp349 = (4.7584639941967359e-19 * fTemp91); + double fTemp350 = (1.1422201709353029e-18 * fTemp15); + double fTemp351 = (2.7335294515958808e-18 * fTemp24); + double fTemp352 = (0.0023131708388267449 * fTemp27); + double fTemp353 = (4.6761788733398907e-18 * fTemp36); + double fTemp354 = (0.0062770252486745275 * fTemp39); + double fTemp355 = (0.0014795090396723079 * fTemp42); + double fTemp356 = (0.00075024801587290956 * fTemp45); + double fTemp357 = (6.5935211231487317e-18 * fTemp51); + double fTemp358 = (0.012205326872422696 * fTemp54); + double fTemp359 = (0.0044385271190169251 * fTemp57); + double fTemp360 = (0.00046786183841729048 * fTemp60); + double fTemp361 = (fRec1[0] * ((fTemp324 + (fTemp325 + (fTemp326 + (fTemp327 + (fTemp328 + (fTemp329 + (fTemp330 + (fTemp331 + (fTemp332 + (fTemp333 + (fTemp334 + (fTemp335 + ((((fTemp342 + fTemp343) + fTemp344) + fTemp345) + fTemp346))))))))))))) - (fTemp347 + (fTemp348 + (fTemp349 + ((((((((((fTemp350 + fTemp351) + fTemp352) + fTemp353) + fTemp354) + fTemp355) + fTemp356) + fTemp357) + fTemp358) + fTemp359) + fTemp360)))))); + fRec262[0] = max((fRec262[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp361)))))); + fVbargraph62 = FAUSTFLOAT(fRec262[0]); + output26[i] = FAUSTFLOAT(fTemp361); + double fTemp362 = (1.63068840876984e-18 * fTemp152); + double fTemp363 = (0.0062770252486745231 * fTemp155); + double fTemp364 = (5.4356280292327993e-19 * fTemp91); + double fTemp365 = (0.012205326872422689 * fTemp87); + double fTemp366 = (0.0023131708388267444 * fTemp27); + double fTemp367 = (0.0062770252486745266 * fTemp39); + double fTemp368 = (0.00046786183841728994 * fTemp60); + double fTemp369 = (0.021308452520676528 * (fTemp12 - fTemp128)); + double fTemp370 = (0.010535180889746065 * (fTemp6 - fTemp84)); + double fTemp371 = (0.00046786183841729124 * fTemp79); + double fTemp372 = (1.3047664087114909e-18 * fTemp15); + double fTemp373 = (3.1225305737205953e-18 * fTemp24); + double fTemp374 = (5.3416331372122328e-18 * fTemp36); + double fTemp375 = (7.5318271341413852e-18 * fTemp51); + double fTemp376 = (fRec1[0] * ((fTemp327 + (fTemp362 + (fTemp363 + (fTemp364 + (fTemp329 + (fTemp365 + (fTemp333 + (fTemp335 + ((fTemp358 + ((fTemp344 + (fTemp342 + fTemp366)) + fTemp367)) + fTemp368))))))))) - (fTemp369 + (fTemp370 + (fTemp326 + (fTemp371 + (fTemp330 + (fTemp331 + (fTemp334 + (fTemp359 + ((fTemp346 + (fTemp356 + (fTemp355 + ((fTemp345 + ((fTemp343 + fTemp372) + fTemp373)) + fTemp374)))) + fTemp375))))))))))); + fRec263[0] = max((fRec263[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp376)))))); + fVbargraph63 = FAUSTFLOAT(fRec263[0]); + output27[i] = FAUSTFLOAT(fTemp376); + double fTemp377 = (2.7178140146164e-18 * fTemp152); + double fTemp378 = (0.00046786183841729064 * fTemp79); + double fTemp379 = (9.0593800487213328e-19 * fTemp91); + double fTemp380 = (2.1746106811858183e-18 * fTemp15); + double fTemp381 = (5.2042176228676594e-18 * fTemp24); + double fTemp382 = (0.0023131708388267409 * fTemp27); + double fTemp383 = (8.902721895353721e-18 * fTemp36); + double fTemp384 = (0.0062770252486745171 * fTemp39); + double fTemp385 = (1.2553045223568977e-17 * fTemp51); + double fTemp386 = (0.012205326872422675 * fTemp54); + double fTemp387 = (0.00046786183841729053 * fTemp60); + double fTemp388 = (0.021308452520676528 * fTemp128); + double fTemp389 = (0.035191232193238602 * fTemp76); + double fTemp390 = (0.0062770252486745335 * fTemp155); + double fTemp391 = (0.002313170838826747 * fTemp93); + double fTemp392 = (0.010535180889746065 * fTemp84); + double fTemp393 = (0.012205326872422709 * fTemp87); + double fTemp394 = (0.035587388102713342 * fTemp140); + double fTemp395 = (0.030460165261409402 * fTemp96); + double fTemp396 = (0.010535180889746067 * fTemp6); + double fTemp397 = (0.021308452520676532 * fTemp12); + double fTemp398 = (0.030460165261409412 * fTemp21); + double fTemp399 = (0.035587388102713349 * fTemp33); + double fTemp400 = (0.035191232193238609 * fTemp48); + double fTemp401 = (fRec1[0] * ((fTemp326 + (fTemp377 + (fTemp378 + (fTemp379 + (fTemp330 + (fTemp331 + (fTemp334 + ((((((fTemp344 + (((fTemp341 + (fTemp340 + fTemp380)) + fTemp381) + fTemp382)) + fTemp383) + fTemp384) + fTemp385) + fTemp386) + fTemp387)))))))) - (fTemp388 + (fTemp389 + (fTemp390 + (fTemp391 + (fTemp392 + (fTemp393 + (fTemp394 + (fTemp395 + (fTemp359 + ((fTemp356 + (fTemp355 + (((fTemp396 + fTemp397) + fTemp398) + fTemp399))) + fTemp400)))))))))))); + fRec264[0] = max((fRec264[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp401)))))); + fVbargraph64 = FAUSTFLOAT(fRec264[0]); + output28[i] = FAUSTFLOAT(fTemp401); + double fTemp402 = (3.8049396204629603e-18 * fTemp152); + double fTemp403 = (0.00046786183841729151 * fTemp79); + double fTemp404 = (1.2683132068209864e-18 * fTemp91); + double fTemp405 = (0.010535180889746063 * fTemp6); + double fTemp406 = (0.021308452520676525 * fTemp12); + double fTemp407 = (0.030460165261409398 * fTemp21); + double fTemp408 = (0.035587388102713335 * fTemp33); + double fTemp409 = (0.035191232193238595 * fTemp48); + double fTemp410 = (0.021308452520676532 * fTemp128); + double fTemp411 = (0.0062770252486745266 * fTemp155); + double fTemp412 = (0.0023131708388267444 * fTemp93); + double fTemp413 = (0.010535180889746067 * fTemp84); + double fTemp414 = (0.012205326872422696 * fTemp87); + double fTemp415 = (0.030460165261409412 * fTemp96); + double fTemp416 = (3.0444549536601452e-18 * fTemp15); + double fTemp417 = (7.2859046720147234e-18 * fTemp24); + double fTemp418 = (0.0023131708388267431 * fTemp27); + double fTemp419 = (1.246381065349521e-17 * fTemp36); + double fTemp420 = (0.0062770252486745231 * fTemp39); + double fTemp421 = (1.7574263312996565e-17 * fTemp51); + double fTemp422 = (0.012205326872422689 * fTemp54); + double fTemp423 = (0.00046786183841728967 * fTemp60); + double fTemp424 = (fRec1[0] * ((fTemp402 + (fTemp403 + (fTemp404 + (((fTemp344 + ((fTemp341 + ((fTemp339 + (fTemp338 + fTemp405)) + fTemp406)) + fTemp407)) + fTemp408) + fTemp409)))) - (fTemp410 + (fTemp326 + (fTemp327 + (fTemp411 + (fTemp412 + (fTemp330 + (fTemp413 + (fTemp331 + (fTemp414 + (fTemp333 + (fTemp334 + (fTemp415 + ((fTemp359 + (((fTemp356 + (fTemp355 + ((((fTemp416 + fTemp417) + fTemp418) + fTemp419) + fTemp420))) + fTemp421) + fTemp422)) + fTemp423))))))))))))))); + fRec265[0] = max((fRec265[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp424)))))); + fVbargraph65 = FAUSTFLOAT(fRec265[0]); + output29[i] = FAUSTFLOAT(fTemp424); + double fTemp425 = (0.0071028175068921914 * fTemp128); + double fTemp426 = (0.016998264729033888 * fTemp131); + double fTemp427 = (0.035508216952135595 * fTemp152); + double fTemp428 = (0.036961085234966218 * fTemp79); + double fTemp429 = (0.027200442744256398 * fTemp155); + double fTemp430 = (0.035508216952135616 * fTemp91); + double fTemp431 = (0.030071220904747824 * fTemp93); + double fTemp432 = (0.021308452520676577 * fTemp82); + double fTemp433 = (0.010535180889746094 * fTemp84); + double fTemp434 = (0.010535180889746075 * fTemp3); + double fTemp435 = (fTemp336 + fTemp434); + double fTemp436 = (0.031605542669238242 * fTemp6); + double fTemp437 = (0.021308452520676542 * fTemp12); + double fTemp438 = (0.028411270027568724 * fTemp15); + double fTemp439 = (0.022664352972045144 * fTemp24); + double fTemp440 = (0.020818537549440738 * fTemp27); + double fTemp441 = (0.0042514054232804356 * fTemp30); + double fTemp442 = (0.018831075746023603 * fTemp39); + double fTemp443 = (0.010356563277706152 * fTemp42); + double fTemp444 = (0.023090966710758377 * fTemp45); + double fTemp445 = (0.010356563277706147 * fTemp57); + double fTemp446 = (0.00096856602366710964 * fTemp76); + double fTemp447 = (0.020500678615759143 * fTemp137); + double fTemp448 = (0.0045334071240427497 * fTemp87); + double fTemp449 = (0.010280801007450534 * fTemp140); + double fTemp450 = (0.006710422253905635 * fTemp99); + double fTemp451 = (0.0053753232814252047 * fTemp96); + double fTemp452 = (0.01640325439843596 * fTemp9); + double fTemp453 = (0.020481687709769415 * fTemp18); + double fTemp454 = (fTemp452 + fTemp453); + double fTemp455 = (0.016125969844275591 * fTemp21); + double fTemp456 = (0.030842403022351559 * fTemp33); + double fTemp457 = (0.0089472296718741632 * fTemp36); + double fTemp458 = (0.0029056980710013246 * fTemp48); + double fTemp459 = (0.027334238154345478 * fTemp51); + double fTemp460 = (0.0031385126243372789 * fTemp54); + double fTemp461 = (0.0014035855152519602 * fTemp60); + double fTemp462 = (fRec1[0] * ((fTemp425 + (fTemp426 + (fTemp427 + (fTemp428 + (fTemp429 + (fTemp430 + (fTemp431 + (fTemp432 + (fTemp433 + ((((((((((fTemp435 + fTemp436) + fTemp437) + fTemp438) + fTemp439) + fTemp440) + fTemp441) + fTemp442) + fTemp443) + fTemp444) + fTemp445)))))))))) - (fTemp446 + (fTemp447 + (fTemp448 + (fTemp449 + (fTemp450 + (fTemp451 + (((((((fTemp454 + fTemp455) + fTemp456) + fTemp457) + fTemp458) + fTemp459) + fTemp460) + fTemp461))))))))); + fRec266[0] = max((fRec266[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp462)))))); + fVbargraph66 = FAUSTFLOAT(fRec266[0]); + output30[i] = FAUSTFLOAT(fTemp462); + double fTemp463 = (0.021308452520676546 * fTemp128); + double fTemp464 = (0.016998264729033867 * fTemp131); + double fTemp465 = (0.021308452520676556 * fTemp82); + double fTemp466 = (0.031605542669238242 * fTemp84); + double fTemp467 = (0.0031385126243372858 * fTemp87); + double fTemp468 = (0.010535180889746081 * fTemp6); + double fTemp469 = (0.0071028175068921827 * fTemp12); + double fTemp470 = (0.0089472296718741701 * fTemp36); + double fTemp471 = (0.010356563277706217 * fTemp42); + double fTemp472 = (0.027334238154345495 * fTemp51); + double fTemp473 = (0.0045334071240427463 * fTemp54); + double fTemp474 = (0.010356563277706213 * fTemp57); + double fTemp475 = (0.036961085234966218 * fTemp60); + double fTemp476 = (0.0029056980710013254 * fTemp76); + double fTemp477 = (0.035508216952135581 * fTemp152); + double fTemp478 = (0.0014035855152518815 * fTemp79); + double fTemp479 = (0.018831075746023641 * fTemp155); + double fTemp480 = (0.035508216952135595 * fTemp91); + double fTemp481 = (0.020818537549440783 * fTemp93); + double fTemp482 = (0.020500678615759119 * fTemp137); + double fTemp483 = (0.030842403022351562 * fTemp140); + double fTemp484 = (0.0067104222539056272 * fTemp99); + double fTemp485 = (0.016125969844275591 * fTemp96); + double fTemp486 = (0.028411270027568741 * fTemp15); + double fTemp487 = (0.0053753232814251978 * fTemp21); + double fTemp488 = (0.022664352972045162 * fTemp24); + double fTemp489 = (0.030071220904747797 * fTemp27); + double fTemp490 = (0.010280801007450522 * fTemp33); + double fTemp491 = (0.027200442744256374 * fTemp39); + double fTemp492 = (0.00096856602366710855 * fTemp48); + double fTemp493 = (fRec1[0] * ((fTemp463 + (fTemp464 + (fTemp465 + (fTemp466 + (fTemp467 + (((((fTemp444 + (((fTemp441 + ((fTemp435 + fTemp468) + fTemp469)) + fTemp470) + fTemp471)) + fTemp472) + fTemp473) + fTemp474) + fTemp475)))))) - (fTemp476 + (fTemp477 + (fTemp478 + (fTemp479 + (fTemp480 + (fTemp481 + (fTemp482 + (fTemp483 + (fTemp484 + (fTemp485 + (((((((fTemp453 + (fTemp452 + fTemp486)) + fTemp487) + fTemp488) + fTemp489) + fTemp490) + fTemp491) + fTemp492))))))))))))); + fRec267[0] = max((fRec267[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp493)))))); + fVbargraph67 = FAUSTFLOAT(fRec267[0]); + output31[i] = FAUSTFLOAT(fTemp493); + double fTemp494 = (0.021308452520676553 * fTemp128); + double fTemp495 = (0.035508216952135574 * fTemp152); + double fTemp496 = (0.020500678615759112 * fTemp137); + double fTemp497 = (0.0031385126243372867 * fTemp87); + double fTemp498 = (0.0067104222539056254 * fTemp99); + double fTemp499 = (0.0053753232814251969 * fTemp21); + double fTemp500 = (0.03007122090474779 * fTemp27); + double fTemp501 = (0.010280801007450517 * fTemp33); + double fTemp502 = (0.0089472296718741719 * fTemp36); + double fTemp503 = (0.027200442744256363 * fTemp39); + double fTemp504 = (0.010356563277706232 * fTemp42); + double fTemp505 = (0.00096856602366710812 * fTemp48); + double fTemp506 = (0.027334238154345498 * fTemp51); + double fTemp507 = (0.010356563277706229 * fTemp57); + double fTemp508 = (0.016998264729033864 * fTemp131); + double fTemp509 = (0.0029056980710013259 * fTemp76); + double fTemp510 = (0.0014035855152518585 * fTemp79); + double fTemp511 = (0.018831075746023648 * fTemp155); + double fTemp512 = (0.02081853754944079 * fTemp93); + double fTemp513 = (0.021308452520676546 * fTemp82); + double fTemp514 = (0.030842403022351569 * fTemp140); + double fTemp515 = (0.016125969844275594 * fTemp96); + double fTemp516 = (0.010535180889746079 * fTemp6); + double fTemp517 = (0.007102817506892181 * fTemp12); + double fTemp518 = (0.028411270027568745 * fTemp15); + double fTemp519 = (0.0045334071240427445 * fTemp54); + double fTemp520 = (fRec1[0] * ((fTemp494 + (fTemp495 + (fTemp480 + (fTemp466 + (fTemp496 + (fTemp497 + (fTemp498 + ((((fTemp444 + (((((fTemp441 + ((fTemp435 + fTemp499) + fTemp500)) + fTemp501) + fTemp502) + fTemp503) + fTemp504)) + fTemp505) + fTemp506) + fTemp507)))))))) - (fTemp508 + (fTemp509 + (fTemp510 + (fTemp511 + (fTemp512 + (fTemp513 + (fTemp514 + (fTemp515 + (fTemp475 + ((fTemp488 + (fTemp453 + (((fTemp452 + fTemp516) + fTemp517) + fTemp518))) + fTemp519)))))))))))); + fRec268[0] = max((fRec268[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp520)))))); + fVbargraph68 = FAUSTFLOAT(fRec268[0]); + output32[i] = FAUSTFLOAT(fTemp520); + double fTemp521 = (0.0071028175068921931 * fTemp128); + double fTemp522 = (0.027200442744256408 * fTemp155); + double fTemp523 = (0.030071220904747838 * fTemp93); + double fTemp524 = (0.010535180889746096 * fTemp84); + double fTemp525 = (0.020500678615759146 * fTemp137); + double fTemp526 = (0.0067104222539056367 * fTemp99); + double fTemp527 = (0.028411270027568717 * fTemp15); + double fTemp528 = (0.022664352972045138 * fTemp24); + double fTemp529 = (0.010356563277706145 * fTemp42); + double fTemp530 = (0.0031385126243372767 * fTemp54); + double fTemp531 = (0.01035656327770614 * fTemp57); + double fTemp532 = (0.0014035855152519582 * fTemp60); + double fTemp533 = (0.00096856602366710996 * fTemp76); + double fTemp534 = (0.021308452520676584 * fTemp82); + double fTemp535 = (0.0045334071240427515 * fTemp87); + double fTemp536 = (0.010280801007450538 * fTemp140); + double fTemp537 = (0.0053753232814252056 * fTemp96); + double fTemp538 = (fTemp436 + fTemp452); + double fTemp539 = (0.020818537549440724 * fTemp27); + double fTemp540 = (0.018831075746023586 * fTemp39); + double fTemp541 = (0.027334238154345474 * fTemp51); + double fTemp542 = (fRec1[0] * ((fTemp521 + (fTemp428 + (fTemp522 + (fTemp523 + (fTemp524 + (fTemp525 + (fTemp526 + ((((fTemp458 + (fTemp444 + ((fTemp456 + (fTemp441 + ((fTemp455 + (fTemp435 + fTemp527)) + fTemp528))) + fTemp529))) + fTemp530) + fTemp531) + fTemp532)))))))) - (fTemp426 + (fTemp533 + (fTemp427 + (fTemp430 + (fTemp534 + (fTemp535 + (fTemp536 + (fTemp537 + (((fTemp457 + ((fTemp453 + (fTemp437 + fTemp538)) + fTemp539)) + fTemp540) + fTemp541))))))))))); + fRec269[0] = max((fRec269[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp542)))))); + fVbargraph69 = FAUSTFLOAT(fRec269[0]); + output33[i] = FAUSTFLOAT(fTemp542); + double fTemp543 = (0.016998264729033881 * fTemp131); + double fTemp544 = (0.0009685660236671092 * fTemp76); + double fTemp545 = (0.035508216952135609 * fTemp91); + double fTemp546 = (0.02130845252067657 * fTemp82); + double fTemp547 = (0.010280801007450529 * fTemp140); + double fTemp548 = (0.0053753232814252021 * fTemp96); + double fTemp549 = (0.028411270027568731 * fTemp15); + double fTemp550 = (0.022664352972045151 * fTemp24); + double fTemp551 = (0.030842403022351562 * fTemp33); + double fTemp552 = (0.010356563277706178 * fTemp42); + double fTemp553 = (0.0029056980710013254 * fTemp48); + double fTemp554 = (0.0031385126243372802 * fTemp54); + double fTemp555 = (0.010356563277706175 * fTemp57); + double fTemp556 = (0.0014035855152519131 * fTemp60); + double fTemp557 = (0.0071028175068921871 * fTemp128); + double fTemp558 = (0.030071220904747821 * fTemp93); + double fTemp559 = (0.010535180889746089 * fTemp84); + double fTemp560 = (0.020500678615759133 * fTemp137); + double fTemp561 = (0.0067104222539056315 * fTemp99); + double fTemp562 = (0.021308452520676546 * fTemp12); + double fTemp563 = (0.020818537549440744 * fTemp27); + double fTemp564 = (0.0089472296718741667 * fTemp36); + double fTemp565 = (0.01883107574602361 * fTemp39); + double fTemp566 = (0.027334238154345481 * fTemp51); + double fTemp567 = (fRec1[0] * ((fTemp543 + (fTemp544 + (fTemp427 + (fTemp545 + (fTemp546 + (fTemp448 + (fTemp547 + (fTemp548 + (((((fTemp444 + (((fTemp441 + ((fTemp455 + (fTemp435 + fTemp549)) + fTemp550)) + fTemp551) + fTemp552)) + fTemp553) + fTemp554) + fTemp555) + fTemp556))))))))) - (fTemp557 + (fTemp428 + (fTemp429 + (fTemp558 + (fTemp559 + (fTemp560 + (fTemp561 + (((((fTemp453 + (fTemp538 + fTemp562)) + fTemp563) + fTemp564) + fTemp565) + fTemp566)))))))))); + fRec270[0] = max((fRec270[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp567)))))); + fVbargraph70 = FAUSTFLOAT(fRec270[0]); + output34[i] = FAUSTFLOAT(fTemp567); + double fTemp568 = (0.016998264729033874 * fTemp131); + double fTemp569 = (0.001403585515251904 * fTemp79); + double fTemp570 = (0.018831075746023631 * fTemp155); + double fTemp571 = (0.020818537549440772 * fTemp93); + double fTemp572 = (0.021308452520676563 * fTemp82); + double fTemp573 = (0.0053753232814252004 * fTemp21); + double fTemp574 = (0.0300712209047478 * fTemp27); + double fTemp575 = (0.010280801007450525 * fTemp33); + double fTemp576 = (0.0089472296718741684 * fTemp36); + double fTemp577 = (0.027200442744256377 * fTemp39); + double fTemp578 = (0.010356563277706199 * fTemp42); + double fTemp579 = (0.00096856602366710877 * fTemp48); + double fTemp580 = (0.027334238154345485 * fTemp51); + double fTemp581 = (0.010356563277706192 * fTemp57); + double fTemp582 = (0.035508216952135588 * fTemp152); + double fTemp583 = (0.020500678615759129 * fTemp137); + double fTemp584 = (0.0031385126243372841 * fTemp87); + double fTemp585 = (0.0067104222539056298 * fTemp99); + double fTemp586 = (0.010535180889746086 * fTemp6); + double fTemp587 = (0.0071028175068921853 * fTemp12); + double fTemp588 = (0.028411270027568734 * fTemp15); + double fTemp589 = (0.0045334071240427471 * fTemp54); + double fTemp590 = (fRec1[0] * ((fTemp568 + (fTemp476 + (fTemp569 + (fTemp570 + (fTemp571 + (fTemp572 + (fTemp483 + (fTemp485 + ((((fTemp444 + (((((fTemp441 + ((fTemp435 + fTemp573) + fTemp574)) + fTemp575) + fTemp576) + fTemp577) + fTemp578)) + fTemp579) + fTemp580) + fTemp581))))))))) - (fTemp463 + (fTemp582 + (fTemp545 + (fTemp466 + (fTemp583 + (fTemp584 + (fTemp585 + (fTemp475 + ((fTemp550 + (fTemp453 + (((fTemp452 + fTemp586) + fTemp587) + fTemp588))) + fTemp589))))))))))); + fRec271[0] = max((fRec271[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp590)))))); + fVbargraph71 = FAUSTFLOAT(fRec271[0]); + output35[i] = FAUSTFLOAT(fTemp590); + double fTemp591 = (0.035508216952135567 * fTemp152); + double fTemp592 = (0.0014035855152518362 * fTemp79); + double fTemp593 = (0.018831075746023662 * fTemp155); + double fTemp594 = (0.035508216952135588 * fTemp91); + double fTemp595 = (0.020818537549440803 * fTemp93); + double fTemp596 = (0.020500678615759105 * fTemp137); + double fTemp597 = (0.0067104222539056237 * fTemp99); + double fTemp598 = (0.010535180889746074 * fTemp6); + double fTemp599 = (0.0071028175068921775 * fTemp12); + double fTemp600 = (0.0089472296718741736 * fTemp36); + double fTemp601 = (0.010356563277706251 * fTemp42); + double fTemp602 = (0.027334238154345505 * fTemp51); + double fTemp603 = (0.0045334071240427437 * fTemp54); + double fTemp604 = (0.010356563277706246 * fTemp57); + double fTemp605 = (0.016998264729033857 * fTemp131); + double fTemp606 = (0.021308452520676542 * fTemp82); + double fTemp607 = (0.0031385126243372885 * fTemp87); + double fTemp608 = (0.028411270027568748 * fTemp15); + double fTemp609 = (0.0053753232814251943 * fTemp21); + double fTemp610 = (0.022664352972045165 * fTemp24); + double fTemp611 = (0.030071220904747779 * fTemp27); + double fTemp612 = (0.010280801007450515 * fTemp33); + double fTemp613 = (0.027200442744256356 * fTemp39); + double fTemp614 = (0.00096856602366710779 * fTemp48); + double fTemp615 = (fRec1[0] * ((fTemp509 + (fTemp591 + (fTemp592 + (fTemp593 + (fTemp594 + (fTemp595 + (fTemp596 + (fTemp514 + (fTemp597 + (fTemp515 + (fTemp475 + ((((fTemp444 + (((fTemp441 + ((fTemp435 + fTemp598) + fTemp599)) + fTemp600) + fTemp601)) + fTemp602) + fTemp603) + fTemp604)))))))))))) - (fTemp494 + (fTemp605 + (fTemp606 + (fTemp466 + (fTemp607 + (((((((fTemp453 + (fTemp452 + fTemp608)) + fTemp609) + fTemp610) + fTemp611) + fTemp612) + fTemp613) + fTemp614)))))))); + fRec272[0] = max((fRec272[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp615)))))); + fVbargraph72 = FAUSTFLOAT(fRec272[0]); + output36[i] = FAUSTFLOAT(fTemp615); + double fTemp616 = (0.00096856602366711159 * fTemp76); + double fTemp617 = (0.020500678615759181 * fTemp137); + double fTemp618 = (0.0045334071240427532 * fTemp87); + double fTemp619 = (0.010280801007450555 * fTemp140); + double fTemp620 = (0.0067104222539056471 * fTemp99); + double fTemp621 = (0.0053753232814252143 * fTemp96); + double fTemp622 = (0.031605542669238228 * fTemp6); + double fTemp623 = (0.021308452520676539 * fTemp12); + double fTemp624 = (0.028411270027568696 * fTemp15); + double fTemp625 = (0.02266435297204512 * fTemp24); + double fTemp626 = (0.02081853754944071 * fTemp27); + double fTemp627 = (0.018831075746023575 * fTemp39); + double fTemp628 = (0.010356563277706064 * fTemp42); + double fTemp629 = (0.01035656327770606 * fTemp57); + double fTemp630 = (0.0071028175068922053 * fTemp128); + double fTemp631 = (0.016998264729033919 * fTemp131); + double fTemp632 = (0.035508216952135623 * fTemp152); + double fTemp633 = (0.036961085234966211 * fTemp79); + double fTemp634 = (0.027200442744256415 * fTemp155); + double fTemp635 = (0.035508216952135643 * fTemp91); + double fTemp636 = (0.030071220904747842 * fTemp93); + double fTemp637 = (0.021308452520676618 * fTemp82); + double fTemp638 = (0.010535180889746113 * fTemp84); + double fTemp639 = (0.016125969844275587 * fTemp21); + double fTemp640 = (0.030842403022351552 * fTemp33); + double fTemp641 = (0.0089472296718741563 * fTemp36); + double fTemp642 = (0.0029056980710013241 * fTemp48); + double fTemp643 = (0.02733423815434545 * fTemp51); + double fTemp644 = (0.0031385126243372746 * fTemp54); + double fTemp645 = (0.0014035855152521122 * fTemp60); + double fTemp646 = (fRec1[0] * ((fTemp616 + (fTemp617 + (fTemp618 + (fTemp619 + (fTemp620 + (fTemp621 + ((fTemp444 + (((fTemp441 + (((((fTemp435 + fTemp622) + fTemp623) + fTemp624) + fTemp625) + fTemp626)) + fTemp627) + fTemp628)) + fTemp629))))))) - (fTemp630 + (fTemp631 + (fTemp632 + (fTemp633 + (fTemp634 + (fTemp635 + (fTemp636 + (fTemp637 + (fTemp638 + (((((((fTemp454 + fTemp639) + fTemp640) + fTemp641) + fTemp642) + fTemp643) + fTemp644) + fTemp645)))))))))))); + fRec273[0] = max((fRec273[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp646)))))); + fVbargraph73 = FAUSTFLOAT(fRec273[0]); + output37[i] = FAUSTFLOAT(fTemp646); + double fTemp647 = (fTemp434 + fTemp452); + double fTemp648 = (fRec1[0] * ((fTemp428 + (fTemp430 + (fTemp431 + (fTemp432 + (fTemp433 + (fTemp447 + (fTemp449 + (fTemp459 + (fTemp443 + (fTemp456 + (fTemp441 + (fTemp440 + (fTemp453 + (fTemp438 + (fTemp336 + fTemp436))))))))))))))) - (fTemp425 + (fTemp426 + (fTemp446 + (fTemp427 + (fTemp429 + (fTemp448 + (fTemp450 + (fTemp451 + (fTemp461 + (fTemp445 + (fTemp460 + (fTemp458 + (fTemp444 + (fTemp442 + (fTemp457 + (fTemp439 + (fTemp455 + (fTemp437 + fTemp647)))))))))))))))))))); + fRec274[0] = max((fRec274[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp648)))))); + fVbargraph74 = FAUSTFLOAT(fRec274[0]); + output38[i] = FAUSTFLOAT(fTemp648); + double fTemp649 = (fRec1[0] * ((fTemp477 + (fTemp479 + (fTemp465 + (fTemp466 + (fTemp482 + (fTemp467 + (fTemp483 + (fTemp475 + (fTemp473 + (fTemp471 + (fTemp491 + (fTemp470 + (fTemp490 + (fTemp441 + (fTemp488 + (fTemp453 + (fTemp336 + fTemp468))))))))))))))))) - (fTemp463 + (fTemp464 + (fTemp476 + (fTemp478 + (fTemp480 + (fTemp481 + (fTemp484 + (fTemp485 + (fTemp474 + (fTemp472 + (fTemp492 + (fTemp444 + (fTemp489 + (fTemp487 + (fTemp486 + (fTemp469 + fTemp647)))))))))))))))))); + fRec275[0] = max((fRec275[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp649)))))); + fVbargraph75 = FAUSTFLOAT(fRec275[0]); + output39[i] = FAUSTFLOAT(fTemp649); + double fTemp650 = (fRec1[0] * ((fTemp508 + (fTemp511 + (fTemp480 + (fTemp466 + (fTemp497 + (fTemp514 + (fTemp498 + (fTemp505 + (fTemp504 + (fTemp502 + (fTemp441 + (fTemp500 + (fTemp488 + (fTemp499 + (fTemp453 + (fTemp336 + fTemp517)))))))))))))))) - (fTemp494 + (fTemp509 + (fTemp495 + (fTemp510 + (fTemp512 + (fTemp513 + (fTemp496 + (fTemp515 + (fTemp475 + (fTemp507 + (fTemp519 + (fTemp506 + (fTemp444 + (fTemp503 + (fTemp501 + (fTemp518 + (fTemp452 + (fTemp434 + fTemp516)))))))))))))))))))); + fRec276[0] = max((fRec276[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp650)))))); + fVbargraph76 = FAUSTFLOAT(fRec276[0]); + output40[i] = FAUSTFLOAT(fTemp650); + double fTemp651 = (fTemp452 + (fTemp434 + fTemp436)); + double fTemp652 = (fRec1[0] * ((fTemp426 + (fTemp427 + (fTemp428 + (fTemp523 + (fTemp524 + (fTemp536 + (fTemp526 + (fTemp532 + (fTemp530 + (fTemp541 + (fTemp458 + (fTemp529 + (fTemp540 + (fTemp441 + (fTemp455 + (fTemp453 + (fTemp527 + (fTemp336 + fTemp437)))))))))))))))))) - (fTemp521 + (fTemp533 + (fTemp522 + (fTemp430 + (fTemp534 + (fTemp525 + (fTemp535 + (fTemp537 + (fTemp531 + (fTemp444 + (fTemp457 + (fTemp456 + (fTemp539 + (fTemp528 + fTemp651)))))))))))))))); + fRec277[0] = max((fRec277[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp652)))))); + fVbargraph77 = FAUSTFLOAT(fRec277[0]); + output41[i] = FAUSTFLOAT(fTemp652); + double fTemp653 = (fRec1[0] * ((fTemp557 + (fTemp544 + (fTemp429 + (fTemp545 + (fTemp546 + (fTemp560 + (fTemp448 + (fTemp548 + (fTemp556 + (fTemp554 + (fTemp566 + (fTemp553 + (fTemp552 + (fTemp565 + (fTemp441 + (fTemp455 + (fTemp453 + (fTemp549 + (fTemp336 + fTemp562))))))))))))))))))) - (fTemp543 + (fTemp427 + (fTemp428 + (fTemp558 + (fTemp559 + (fTemp547 + (fTemp561 + (fTemp555 + (fTemp444 + (fTemp564 + (fTemp551 + (fTemp563 + (fTemp550 + fTemp651))))))))))))))); + fRec278[0] = max((fRec278[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp653)))))); + fVbargraph78 = FAUSTFLOAT(fRec278[0]); + output42[i] = FAUSTFLOAT(fTemp653); + double fTemp654 = (fRec1[0] * ((fTemp463 + (fTemp476 + (fTemp582 + (fTemp569 + (fTemp571 + (fTemp572 + (fTemp583 + (fTemp485 + (fTemp579 + (fTemp578 + (fTemp576 + (fTemp441 + (fTemp574 + (fTemp550 + (fTemp573 + (fTemp453 + (fTemp336 + fTemp587))))))))))))))))) - (fTemp568 + (fTemp570 + (fTemp545 + (fTemp466 + (fTemp584 + (fTemp483 + (fTemp585 + (fTemp475 + (fTemp581 + (fTemp589 + (fTemp580 + (fTemp444 + (fTemp577 + (fTemp575 + (fTemp588 + (fTemp452 + (fTemp434 + fTemp586))))))))))))))))))); + fRec279[0] = max((fRec279[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp654)))))); + fVbargraph79 = FAUSTFLOAT(fRec279[0]); + output43[i] = FAUSTFLOAT(fTemp654); + double fTemp655 = (fRec1[0] * ((fTemp494 + (fTemp605 + (fTemp509 + (fTemp592 + (fTemp594 + (fTemp595 + (fTemp597 + (fTemp515 + (fTemp475 + (fTemp603 + (fTemp601 + (fTemp613 + (fTemp600 + (fTemp612 + (fTemp441 + (fTemp610 + (fTemp453 + (fTemp336 + fTemp598)))))))))))))))))) - (fTemp591 + (fTemp593 + (fTemp606 + (fTemp466 + (fTemp596 + (fTemp607 + (fTemp514 + (fTemp604 + (fTemp602 + (fTemp614 + (fTemp444 + (fTemp611 + (fTemp609 + (fTemp608 + (fTemp599 + fTemp647))))))))))))))))); + fRec280[0] = max((fRec280[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp655)))))); + fVbargraph80 = FAUSTFLOAT(fRec280[0]); + output44[i] = FAUSTFLOAT(fTemp655); + double fTemp656 = (fRec1[0] * ((fTemp630 + (fTemp631 + (fTemp616 + (fTemp632 + (fTemp634 + (fTemp618 + (fTemp620 + (fTemp621 + (fTemp643 + (fTemp628 + (fTemp640 + (fTemp441 + (fTemp626 + (fTemp453 + (fTemp624 + (fTemp336 + fTemp622)))))))))))))))) - (fTemp633 + (fTemp635 + (fTemp636 + (fTemp637 + (fTemp638 + (fTemp617 + (fTemp619 + (fTemp645 + (fTemp629 + (fTemp644 + (fTemp642 + (fTemp444 + (fTemp627 + (fTemp641 + (fTemp625 + (fTemp639 + (fTemp623 + fTemp647))))))))))))))))))); + fRec281[0] = max((fRec281[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp656)))))); + fVbargraph81 = FAUSTFLOAT(fRec281[0]); + output45[i] = FAUSTFLOAT(fTemp656); + double fTemp657 = (fTemp336 + fTemp339); + double fTemp658 = (fRec1[0] * ((fTemp325 + (fTemp327 + (fTemp347 + (fTemp329 + (fTemp330 + (fTemp332 + (fTemp334 + (fTemp335 + (fTemp359 + (fTemp357 + (fTemp346 + (fTemp356 + (fTemp354 + (fTemp344 + (fTemp351 + (fTemp343 + fTemp657)))))))))))))))) - (fTemp324 + (fTemp326 + (fTemp348 + (fTemp328 + (fTemp349 + (fTemp331 + (fTemp333 + (fTemp360 + (fTemp358 + (fTemp355 + (fTemp353 + (fTemp345 + (fTemp352 + (fTemp341 + (fTemp337 + fTemp350))))))))))))))))); + fRec282[0] = max((fRec282[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp658)))))); + fVbargraph82 = FAUSTFLOAT(fRec282[0]); + output46[i] = FAUSTFLOAT(fTemp658); + double fTemp659 = (fRec1[0] * ((fTemp369 + (fTemp326 + (fTemp327 + (fTemp364 + (fTemp329 + (fTemp331 + (fTemp365 + (fTemp335 + (fTemp368 + (fTemp359 + (fTemp358 + (fTemp375 + (fTemp356 + (fTemp345 + (fTemp344 + (fTemp366 + (fTemp373 + fTemp657))))))))))))))))) - (fTemp370 + (fTemp362 + (fTemp371 + (fTemp363 + (fTemp330 + (fTemp333 + (fTemp334 + (fTemp346 + (fTemp355 + (fTemp367 + (fTemp374 + (fTemp343 + (fTemp341 + (fTemp337 + fTemp372)))))))))))))))); + fRec283[0] = max((fRec283[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp659)))))); + fVbargraph83 = FAUSTFLOAT(fRec283[0]); + output47[i] = FAUSTFLOAT(fTemp659); + double fTemp660 = (fRec1[0] * ((fTemp388 + (fTemp378 + (fTemp390 + (fTemp379 + (fTemp330 + (fTemp394 + (fTemp334 + (fTemp387 + (fTemp359 + (fTemp386 + (fTemp356 + (fTemp383 + (fTemp399 + (fTemp344 + (fTemp382 + (fTemp380 + (fTemp397 + fTemp657))))))))))))))))) - (fTemp326 + (fTemp389 + (fTemp377 + (fTemp391 + (fTemp392 + (fTemp331 + (fTemp393 + (fTemp395 + (fTemp385 + (fTemp400 + (fTemp355 + (fTemp384 + (fTemp381 + (fTemp398 + (fTemp341 + (fTemp337 + fTemp396)))))))))))))))))); + fRec284[0] = max((fRec284[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp660)))))); + fVbargraph84 = FAUSTFLOAT(fRec284[0]); + output48[i] = FAUSTFLOAT(fTemp660); + double fTemp661 = (fRec1[0] * ((fTemp410 + (fTemp326 + (fTemp403 + (fTemp411 + (fTemp404 + (fTemp331 + (fTemp333 + (fTemp359 + (fTemp421 + (fTemp409 + (fTemp356 + (fTemp420 + (fTemp344 + (fTemp417 + (fTemp407 + (fTemp339 + (fTemp336 + fTemp405))))))))))))))))) - (fTemp327 + (fTemp402 + (fTemp412 + (fTemp330 + (fTemp413 + (fTemp414 + (fTemp334 + (fTemp415 + (fTemp423 + (fTemp422 + (fTemp355 + (fTemp419 + (fTemp408 + (fTemp418 + (fTemp341 + (fTemp416 + (fTemp337 + fTemp406))))))))))))))))))); + fRec285[0] = max((fRec285[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp661)))))); + fVbargraph85 = FAUSTFLOAT(fRec285[0]); + output49[i] = FAUSTFLOAT(fTemp661); + fRec1[1] = fRec1[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec7[1] = fRec7[0]; fRec12[1] = fRec12[0]; fRec13[1] = fRec13[0]; - fRec7[1] = fRec7[0]; - fRec8[1] = fRec8[0]; - fRec9[1] = fRec9[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; - fRec6[1] = fRec6[0]; - fRec2[1] = fRec2[0]; - fRec3[1] = fRec3[0]; - fRec1[1] = fRec1[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec24[1] = fRec24[0]; + fRec27[1] = fRec27[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec30[1] = fRec30[0]; + fRec33[1] = fRec33[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fRec43[1] = fRec43[0]; + fRec44[1] = fRec44[0]; + fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec49[1] = fRec49[0]; + fRec50[1] = fRec50[0]; + fRec48[1] = fRec48[0]; + fRec51[1] = fRec51[0]; + fRec52[1] = fRec52[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec56[1] = fRec56[0]; + fRec57[1] = fRec57[0]; + fRec55[1] = fRec55[0]; + fRec58[1] = fRec58[0]; + fRec59[1] = fRec59[0]; + fRec54[1] = fRec54[0]; + fRec53[1] = fRec53[0]; + fRec63[1] = fRec63[0]; + fRec64[1] = fRec64[0]; + fRec62[1] = fRec62[0]; + fRec65[1] = fRec65[0]; + fRec66[1] = fRec66[0]; + fRec61[1] = fRec61[0]; + fRec60[1] = fRec60[0]; + fRec70[1] = fRec70[0]; + fRec71[1] = fRec71[0]; + fRec69[1] = fRec69[0]; + fRec72[1] = fRec72[0]; + fRec73[1] = fRec73[0]; + fRec68[1] = fRec68[0]; + fRec67[1] = fRec67[0]; + fRec77[1] = fRec77[0]; + fRec78[1] = fRec78[0]; + fRec76[1] = fRec76[0]; + fRec79[1] = fRec79[0]; + fRec80[1] = fRec80[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; + fRec85[1] = fRec85[0]; + fRec86[1] = fRec86[0]; + fRec84[1] = fRec84[0]; + fRec87[1] = fRec87[0]; + fRec88[1] = fRec88[0]; + fRec83[1] = fRec83[0]; + fRec89[1] = fRec89[0]; + fRec82[1] = fRec82[0]; + fRec81[1] = fRec81[0]; + fRec94[1] = fRec94[0]; + fRec95[1] = fRec95[0]; + fRec93[1] = fRec93[0]; + fRec96[1] = fRec96[0]; + fRec97[1] = fRec97[0]; + fRec92[1] = fRec92[0]; + fRec98[1] = fRec98[0]; + fRec91[1] = fRec91[0]; + fRec90[1] = fRec90[0]; + fRec103[1] = fRec103[0]; + fRec104[1] = fRec104[0]; + fRec102[1] = fRec102[0]; + fRec105[1] = fRec105[0]; + fRec106[1] = fRec106[0]; + fRec101[1] = fRec101[0]; + fRec107[1] = fRec107[0]; + fRec100[1] = fRec100[0]; + fRec99[1] = fRec99[0]; + fRec112[1] = fRec112[0]; + fRec113[1] = fRec113[0]; + fRec111[1] = fRec111[0]; + fRec114[1] = fRec114[0]; + fRec115[1] = fRec115[0]; + fRec110[1] = fRec110[0]; + fRec116[1] = fRec116[0]; + fRec109[1] = fRec109[0]; + fRec108[1] = fRec108[0]; + fRec121[1] = fRec121[0]; + fRec122[1] = fRec122[0]; + fRec120[1] = fRec120[0]; + fRec123[1] = fRec123[0]; + fRec124[1] = fRec124[0]; + fRec119[1] = fRec119[0]; + fRec125[1] = fRec125[0]; + fRec118[1] = fRec118[0]; + fRec117[1] = fRec117[0]; + fRec130[1] = fRec130[0]; + fRec131[1] = fRec131[0]; + fRec129[1] = fRec129[0]; + fRec132[1] = fRec132[0]; + fRec133[1] = fRec133[0]; + fRec128[1] = fRec128[0]; + fRec134[1] = fRec134[0]; + fRec127[1] = fRec127[0]; + fRec126[1] = fRec126[0]; + fRec0[1] = fRec0[0]; + fRec135[1] = fRec135[0]; + fRec141[1] = fRec141[0]; + fRec142[1] = fRec142[0]; + fRec140[1] = fRec140[0]; + fRec143[1] = fRec143[0]; + fRec144[1] = fRec144[0]; + fRec139[1] = fRec139[0]; + fRec145[1] = fRec145[0]; + fRec138[1] = fRec138[0]; + fRec137[1] = fRec137[0]; + fRec150[1] = fRec150[0]; + fRec151[1] = fRec151[0]; + fRec149[1] = fRec149[0]; + fRec152[1] = fRec152[0]; + fRec153[1] = fRec153[0]; + fRec148[1] = fRec148[0]; + fRec154[1] = fRec154[0]; + fRec147[1] = fRec147[0]; + fRec146[1] = fRec146[0]; + fRec157[1] = fRec157[0]; + fRec158[1] = fRec158[0]; + fRec156[1] = fRec156[0]; + fRec155[1] = fRec155[0]; + fRec161[1] = fRec161[0]; + fRec160[1] = fRec160[0]; + fRec159[1] = fRec159[0]; + fRec166[1] = fRec166[0]; + fRec167[1] = fRec167[0]; + fRec165[1] = fRec165[0]; + fRec168[1] = fRec168[0]; + fRec169[1] = fRec169[0]; + fRec164[1] = fRec164[0]; + fRec170[1] = fRec170[0]; + fRec163[1] = fRec163[0]; + fRec162[1] = fRec162[0]; + fRec174[1] = fRec174[0]; + fRec175[1] = fRec175[0]; + fRec173[1] = fRec173[0]; + fRec176[1] = fRec176[0]; + fRec177[1] = fRec177[0]; + fRec172[1] = fRec172[0]; + fRec171[1] = fRec171[0]; + fRec181[1] = fRec181[0]; + fRec182[1] = fRec182[0]; + fRec180[1] = fRec180[0]; + fRec183[1] = fRec183[0]; + fRec179[1] = fRec179[0]; + fRec178[1] = fRec178[0]; + fRec187[1] = fRec187[0]; + fRec188[1] = fRec188[0]; + fRec186[1] = fRec186[0]; + fRec189[1] = fRec189[0]; + fRec185[1] = fRec185[0]; + fRec184[1] = fRec184[0]; + fRec193[1] = fRec193[0]; + fRec194[1] = fRec194[0]; + fRec192[1] = fRec192[0]; + fRec195[1] = fRec195[0]; + fRec196[1] = fRec196[0]; + fRec191[1] = fRec191[0]; + fRec190[1] = fRec190[0]; + fRec136[1] = fRec136[0]; + fRec197[1] = fRec197[0]; + fRec198[1] = fRec198[0]; + fRec199[1] = fRec199[0]; + fRec200[1] = fRec200[0]; + fRec204[1] = fRec204[0]; + fRec205[1] = fRec205[0]; + fRec203[1] = fRec203[0]; + fRec202[1] = fRec202[0]; + fRec209[1] = fRec209[0]; + fRec210[1] = fRec210[0]; + fRec208[1] = fRec208[0]; + fRec211[1] = fRec211[0]; + fRec207[1] = fRec207[0]; + fRec206[1] = fRec206[0]; + fRec216[1] = fRec216[0]; + fRec217[1] = fRec217[0]; + fRec215[1] = fRec215[0]; + fRec218[1] = fRec218[0]; + fRec219[1] = fRec219[0]; + fRec214[1] = fRec214[0]; + fRec220[1] = fRec220[0]; + fRec213[1] = fRec213[0]; + fRec212[1] = fRec212[0]; + fRec224[1] = fRec224[0]; + fRec225[1] = fRec225[0]; + fRec223[1] = fRec223[0]; + fRec226[1] = fRec226[0]; + fRec227[1] = fRec227[0]; + fRec222[1] = fRec222[0]; + fRec221[1] = fRec221[0]; + fRec232[1] = fRec232[0]; + fRec233[1] = fRec233[0]; + fRec231[1] = fRec231[0]; + fRec234[1] = fRec234[0]; + fRec235[1] = fRec235[0]; + fRec230[1] = fRec230[0]; + fRec236[1] = fRec236[0]; + fRec229[1] = fRec229[0]; + fRec228[1] = fRec228[0]; + fRec240[1] = fRec240[0]; + fRec241[1] = fRec241[0]; + fRec239[1] = fRec239[0]; + fRec242[1] = fRec242[0]; + fRec243[1] = fRec243[0]; + fRec238[1] = fRec238[0]; + fRec237[1] = fRec237[0]; + fRec201[1] = fRec201[0]; + fRec244[1] = fRec244[0]; + fRec245[1] = fRec245[0]; + fRec246[1] = fRec246[0]; + fRec247[1] = fRec247[0]; + fRec248[1] = fRec248[0]; + fRec249[1] = fRec249[0]; + fRec250[1] = fRec250[0]; + fRec251[1] = fRec251[0]; + fRec252[1] = fRec252[0]; + fRec253[1] = fRec253[0]; + fRec254[1] = fRec254[0]; + fRec255[1] = fRec255[0]; + fRec256[1] = fRec256[0]; + fRec257[1] = fRec257[0]; + fRec258[1] = fRec258[0]; + fRec259[1] = fRec259[0]; + fRec260[1] = fRec260[0]; + fRec261[1] = fRec261[0]; + fRec262[1] = fRec262[0]; + fRec263[1] = fRec263[0]; + fRec264[1] = fRec264[0]; + fRec265[1] = fRec265[0]; + fRec266[1] = fRec266[0]; + fRec267[1] = fRec267[0]; + fRec268[1] = fRec268[0]; + fRec269[1] = fRec269[0]; + fRec270[1] = fRec270[0]; + fRec271[1] = fRec271[0]; + fRec272[1] = fRec272[0]; + fRec273[1] = fRec273[0]; + fRec274[1] = fRec274[0]; + fRec275[1] = fRec275[0]; + fRec276[1] = fRec276[0]; + fRec277[1] = fRec277[0]; + fRec278[1] = fRec278[0]; + fRec279[1] = fRec279[0]; + fRec280[1] = fRec280[0]; + fRec281[1] = fRec281[0]; + fRec282[1] = fRec282[0]; + fRec283[1] = fRec283[0]; + fRec284[1] = fRec284[0]; + fRec285[1] = fRec285[0]; + } + } -}; + +}; //---------------------------------------------------------------------------- @@ -3641,3 +4899,5 @@ FAUST_EXPORT void load(InterfaceTable* inTable) } // EOF + +#endif diff --git a/source/HOAUGens/HOAEncEigenMike1.cpp b/source/HOAUGens/HOAEncEigenMike1.cpp old mode 100644 new mode 100755 index 0f4f4f789d..1c15e3c11b --- a/source/HOAUGens/HOAEncEigenMike1.cpp +++ b/source/HOAUGens/HOAEncEigenMike1.cpp @@ -1,19 +1,14 @@ -//---------------------------------------------------------- -// name: "HOAEncEigenMike1" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2015" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAEncEigenMike1" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,173 +601,475 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fRec1[2]; - FAUSTFLOAT fbargraph0; - double fRec2[2]; - FAUSTFLOAT fbargraph1; - double fRec3[2]; - FAUSTFLOAT fbargraph2; - double fRec4[2]; - FAUSTFLOAT fbargraph3; - double fRec5[2]; - FAUSTFLOAT fbargraph4; - double fRec6[2]; - FAUSTFLOAT fbargraph5; - double fRec7[2]; - FAUSTFLOAT fbargraph6; - double fRec8[2]; - FAUSTFLOAT fbargraph7; - double fRec9[2]; - FAUSTFLOAT fbargraph8; - double fRec10[2]; - FAUSTFLOAT fbargraph9; - double fRec11[2]; - FAUSTFLOAT fbargraph10; - double fRec12[2]; - FAUSTFLOAT fbargraph11; - double fRec13[2]; - FAUSTFLOAT fbargraph12; - double fRec14[2]; - FAUSTFLOAT fbargraph13; - double fRec15[2]; - FAUSTFLOAT fbargraph14; - double fRec16[2]; - FAUSTFLOAT fbargraph15; - double fRec17[2]; - FAUSTFLOAT fbargraph16; - double fRec18[2]; - FAUSTFLOAT fbargraph17; - double fRec19[2]; - FAUSTFLOAT fbargraph18; - double fRec20[2]; - FAUSTFLOAT fbargraph19; - double fRec21[2]; - FAUSTFLOAT fbargraph20; - double fRec22[2]; - FAUSTFLOAT fbargraph21; - double fRec23[2]; - FAUSTFLOAT fbargraph22; - double fRec24[2]; - FAUSTFLOAT fbargraph23; - double fRec25[2]; - FAUSTFLOAT fbargraph24; - double fRec26[2]; - FAUSTFLOAT fbargraph25; - double fRec27[2]; - FAUSTFLOAT fbargraph26; - double fRec28[2]; - FAUSTFLOAT fbargraph27; - double fRec29[2]; - FAUSTFLOAT fbargraph28; - double fRec30[2]; - FAUSTFLOAT fbargraph29; - double fRec31[2]; - FAUSTFLOAT fbargraph30; - double fRec32[2]; - FAUSTFLOAT fbargraph31; - FAUSTFLOAT fslider0; - double fRec33[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph32; - double fRec34[2]; - FAUSTFLOAT fbargraph33; - double fRec35[2]; - FAUSTFLOAT fbargraph34; - double fRec36[2]; - FAUSTFLOAT fbargraph35; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncEigenMike1"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec11[2]; + FAUSTFLOAT fVbargraph9; + double fRec12[2]; + FAUSTFLOAT fVbargraph10; + double fRec13[2]; + FAUSTFLOAT fVbargraph11; + double fRec14[2]; + FAUSTFLOAT fVbargraph12; + double fRec15[2]; + FAUSTFLOAT fVbargraph13; + double fRec16[2]; + FAUSTFLOAT fVbargraph14; + double fRec17[2]; + FAUSTFLOAT fVbargraph15; + double fRec18[2]; + FAUSTFLOAT fVbargraph16; + double fRec19[2]; + FAUSTFLOAT fVbargraph17; + double fRec20[2]; + FAUSTFLOAT fVbargraph18; + double fRec21[2]; + FAUSTFLOAT fVbargraph19; + double fRec22[2]; + FAUSTFLOAT fVbargraph20; + double fRec23[2]; + FAUSTFLOAT fVbargraph21; + double fRec24[2]; + FAUSTFLOAT fVbargraph22; + double fRec25[2]; + FAUSTFLOAT fVbargraph23; + double fRec26[2]; + FAUSTFLOAT fVbargraph24; + double fRec27[2]; + FAUSTFLOAT fVbargraph25; + double fRec28[2]; + FAUSTFLOAT fVbargraph26; + double fRec29[2]; + FAUSTFLOAT fVbargraph27; + double fRec30[2]; + FAUSTFLOAT fVbargraph28; + double fRec31[2]; + FAUSTFLOAT fVbargraph29; + double fRec32[2]; + FAUSTFLOAT fVbargraph30; + double fRec33[2]; + FAUSTFLOAT fVbargraph31; + double fRec0[2]; + FAUSTFLOAT fVbargraph32; + double fRec34[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec36[2]; + FAUSTFLOAT fVbargraph35; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); - m->declare("lib/eigenmike32.lib/version", "1.0"); m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); - m->declare("lib/eigenmike32.lib/license", "GPL"); m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/eigenmike32.lib/license", "GPL"); + m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("lib/eigenmike32.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncEigenMike1"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 32; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 32; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec12[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec16[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec18[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec22[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec28[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec30[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec32[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec0[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -739,406 +1079,381 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAEncEigenMike1"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aa8380", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2709f10", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aa96f0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x270ea60", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aaab60", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27053c0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aac0e0", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2700870", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aad710", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26fbd20", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aaedc0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26f71d0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ab04f0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26f2680", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ab1c90", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26edb30", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ab34e0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26e8fe0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ab4db0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26e4490", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ab6700", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26df940", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ab80b0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26dadf0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ab9af0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26d62a0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5abb5b0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26d1750", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5abd0f0", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26ccc00", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5abec90", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26c80b0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ac08c0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26c3560", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ac2570", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26bea10", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ac42a0", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26b9ec0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ac6030", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26b5370", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ac7e50", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26b0820", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ac9cf0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26abcd0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5acbc10", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26a7180", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5acdb90", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26a2620", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5acfba0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x269dad0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ad1c30", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2698f80", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ad3d40", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2694430", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ad5eb0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x268f8e0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ad80b0", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x268ad90", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aa7010", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2686240", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aa5c00", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26816e0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ada770", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x267cab0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5adda00", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2716770", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ae2e80", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2723290", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5ae6590", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x272bcc0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb9f5aebd60", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2737aa0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAEncEigenMike2" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,188 +601,525 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fRec3[2]; - FAUSTFLOAT fbargraph1; - double fRec4[2]; - FAUSTFLOAT fbargraph2; - double fRec5[2]; - FAUSTFLOAT fbargraph3; - double fRec6[2]; - FAUSTFLOAT fbargraph4; - double fRec7[2]; - FAUSTFLOAT fbargraph5; - double fRec8[2]; - FAUSTFLOAT fbargraph6; - double fRec9[2]; - FAUSTFLOAT fbargraph7; - double fRec10[2]; - FAUSTFLOAT fbargraph8; - double fRec11[2]; - FAUSTFLOAT fbargraph9; - double fRec12[2]; - FAUSTFLOAT fbargraph10; - double fRec13[2]; - FAUSTFLOAT fbargraph11; - double fRec14[2]; - FAUSTFLOAT fbargraph12; - double fRec15[2]; - FAUSTFLOAT fbargraph13; - double fRec16[2]; - FAUSTFLOAT fbargraph14; - double fRec17[2]; - FAUSTFLOAT fbargraph15; - double fRec18[2]; - FAUSTFLOAT fbargraph16; - double fRec19[2]; - FAUSTFLOAT fbargraph17; - double fRec20[2]; - FAUSTFLOAT fbargraph18; - double fRec21[2]; - FAUSTFLOAT fbargraph19; - double fRec22[2]; - FAUSTFLOAT fbargraph20; - double fRec23[2]; - FAUSTFLOAT fbargraph21; - double fRec24[2]; - FAUSTFLOAT fbargraph22; - double fRec25[2]; - FAUSTFLOAT fbargraph23; - double fRec26[2]; - FAUSTFLOAT fbargraph24; - double fRec27[2]; - FAUSTFLOAT fbargraph25; - double fRec28[2]; - FAUSTFLOAT fbargraph26; - double fRec29[2]; - FAUSTFLOAT fbargraph27; - double fRec30[2]; - FAUSTFLOAT fbargraph28; - double fRec31[2]; - FAUSTFLOAT fbargraph29; - double fRec32[2]; - FAUSTFLOAT fbargraph30; - double fRec33[2]; - FAUSTFLOAT fbargraph31; - double fRec0[2]; - FAUSTFLOAT fbargraph32; - double fRec34[2]; - FAUSTFLOAT fbargraph33; - double fRec35[2]; - FAUSTFLOAT fbargraph34; - double fRec36[2]; - FAUSTFLOAT fbargraph35; - double fRec37[2]; - FAUSTFLOAT fbargraph36; - double fRec38[2]; - FAUSTFLOAT fbargraph37; - double fRec39[2]; - FAUSTFLOAT fbargraph38; - double fRec40[2]; - FAUSTFLOAT fbargraph39; - double fRec41[2]; - FAUSTFLOAT fbargraph40; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncEigenMike2"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec11[2]; + FAUSTFLOAT fVbargraph9; + double fRec12[2]; + FAUSTFLOAT fVbargraph10; + double fRec13[2]; + FAUSTFLOAT fVbargraph11; + double fRec14[2]; + FAUSTFLOAT fVbargraph12; + double fRec15[2]; + FAUSTFLOAT fVbargraph13; + double fRec16[2]; + FAUSTFLOAT fVbargraph14; + double fRec17[2]; + FAUSTFLOAT fVbargraph15; + double fRec18[2]; + FAUSTFLOAT fVbargraph16; + double fRec19[2]; + FAUSTFLOAT fVbargraph17; + double fRec20[2]; + FAUSTFLOAT fVbargraph18; + double fRec21[2]; + FAUSTFLOAT fVbargraph19; + double fRec22[2]; + FAUSTFLOAT fVbargraph20; + double fRec23[2]; + FAUSTFLOAT fVbargraph21; + double fRec24[2]; + FAUSTFLOAT fVbargraph22; + double fRec25[2]; + FAUSTFLOAT fVbargraph23; + double fRec26[2]; + FAUSTFLOAT fVbargraph24; + double fRec27[2]; + FAUSTFLOAT fVbargraph25; + double fRec28[2]; + FAUSTFLOAT fVbargraph26; + double fRec29[2]; + FAUSTFLOAT fVbargraph27; + double fRec30[2]; + FAUSTFLOAT fVbargraph28; + double fRec31[2]; + FAUSTFLOAT fVbargraph29; + double fRec32[2]; + FAUSTFLOAT fVbargraph30; + double fRec33[2]; + FAUSTFLOAT fVbargraph31; + double fRec0[2]; + FAUSTFLOAT fVbargraph32; + double fRec34[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec36[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec38[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec40[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); - m->declare("lib/eigenmike32.lib/version", "1.0"); m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); - m->declare("lib/eigenmike32.lib/license", "GPL"); m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/eigenmike32.lib/license", "GPL"); + m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("lib/eigenmike32.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncEigenMike2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 32; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 32; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec12[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec16[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec18[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec22[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec28[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec30[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec32[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec0[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec38[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec39[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -754,476 +1129,451 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAEncEigenMike2"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92b4ec0", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b83220", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92b62e0", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b87d70", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92b3aa0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b7e6d0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92b2680", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b79b80", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92b1260", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b75030", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92afe40", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b704e0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92aea20", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b6b990", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92ad600", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b66e40", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92ac1e0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b622f0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92aadc0", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b5d7a0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92a99a0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b58c50", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92a8580", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b54100", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92a7160", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b4f5b0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92a5d40", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b4aa60", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92a4920", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b45f10", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92a3500", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b413c0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92a20e0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b3c870", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92a0cc0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b37d20", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b929f8a0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b331d0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b929e480", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b2e680", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b929d060", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b29b30", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b929bc40", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b24fe0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b929a820", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b20490", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b9299400", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b1b940", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b9298000", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b16df0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b9296c10", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b122a0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b9295820", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b0d750", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b9294440", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b08c00", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92930d0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b040b0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b9291d60", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aff560", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92909f0", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3afaa10", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b928f5e0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3af5de0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92ba660", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b8fa80", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92bf930", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b9c9c0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92c2f30", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ba5e40", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92c8940", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bb2460", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92cd2f0", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bbd250", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92d0900", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bc6180", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92d4420", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bd01c0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92d7d50", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bd94c0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd2b92dc8b0", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3be3ec0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAEncEigenMike3" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,209 +601,595 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fRec3[2]; - FAUSTFLOAT fbargraph1; - double fRec4[2]; - FAUSTFLOAT fbargraph2; - double fRec5[2]; - FAUSTFLOAT fbargraph3; - double fRec6[2]; - FAUSTFLOAT fbargraph4; - double fRec7[2]; - FAUSTFLOAT fbargraph5; - double fRec8[2]; - FAUSTFLOAT fbargraph6; - double fRec9[2]; - FAUSTFLOAT fbargraph7; - double fRec10[2]; - FAUSTFLOAT fbargraph8; - double fRec11[2]; - FAUSTFLOAT fbargraph9; - double fRec12[2]; - FAUSTFLOAT fbargraph10; - double fRec13[2]; - FAUSTFLOAT fbargraph11; - double fRec14[2]; - FAUSTFLOAT fbargraph12; - double fRec15[2]; - FAUSTFLOAT fbargraph13; - double fRec16[2]; - FAUSTFLOAT fbargraph14; - double fRec17[2]; - FAUSTFLOAT fbargraph15; - double fRec18[2]; - FAUSTFLOAT fbargraph16; - double fRec19[2]; - FAUSTFLOAT fbargraph17; - double fRec20[2]; - FAUSTFLOAT fbargraph18; - double fRec21[2]; - FAUSTFLOAT fbargraph19; - double fRec22[2]; - FAUSTFLOAT fbargraph20; - double fRec23[2]; - FAUSTFLOAT fbargraph21; - double fRec24[2]; - FAUSTFLOAT fbargraph22; - double fRec25[2]; - FAUSTFLOAT fbargraph23; - double fRec26[2]; - FAUSTFLOAT fbargraph24; - double fRec27[2]; - FAUSTFLOAT fbargraph25; - double fRec28[2]; - FAUSTFLOAT fbargraph26; - double fRec29[2]; - FAUSTFLOAT fbargraph27; - double fRec30[2]; - FAUSTFLOAT fbargraph28; - double fRec31[2]; - FAUSTFLOAT fbargraph29; - double fRec32[2]; - FAUSTFLOAT fbargraph30; - double fRec33[2]; - FAUSTFLOAT fbargraph31; - double fRec0[2]; - FAUSTFLOAT fbargraph32; - double fRec34[2]; - FAUSTFLOAT fbargraph33; - double fRec35[2]; - FAUSTFLOAT fbargraph34; - double fRec36[2]; - FAUSTFLOAT fbargraph35; - double fRec37[2]; - FAUSTFLOAT fbargraph36; - double fRec38[2]; - FAUSTFLOAT fbargraph37; - double fRec39[2]; - FAUSTFLOAT fbargraph38; - double fRec40[2]; - FAUSTFLOAT fbargraph39; - double fRec41[2]; - FAUSTFLOAT fbargraph40; - double fRec42[2]; - FAUSTFLOAT fbargraph41; - double fRec43[2]; - FAUSTFLOAT fbargraph42; - double fRec44[2]; - FAUSTFLOAT fbargraph43; - double fRec45[2]; - FAUSTFLOAT fbargraph44; - double fRec46[2]; - FAUSTFLOAT fbargraph45; - double fRec47[2]; - FAUSTFLOAT fbargraph46; - double fRec48[2]; - FAUSTFLOAT fbargraph47; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncEigenMike3"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec11[2]; + FAUSTFLOAT fVbargraph9; + double fRec12[2]; + FAUSTFLOAT fVbargraph10; + double fRec13[2]; + FAUSTFLOAT fVbargraph11; + double fRec14[2]; + FAUSTFLOAT fVbargraph12; + double fRec15[2]; + FAUSTFLOAT fVbargraph13; + double fRec16[2]; + FAUSTFLOAT fVbargraph14; + double fRec17[2]; + FAUSTFLOAT fVbargraph15; + double fRec18[2]; + FAUSTFLOAT fVbargraph16; + double fRec19[2]; + FAUSTFLOAT fVbargraph17; + double fRec20[2]; + FAUSTFLOAT fVbargraph18; + double fRec21[2]; + FAUSTFLOAT fVbargraph19; + double fRec22[2]; + FAUSTFLOAT fVbargraph20; + double fRec23[2]; + FAUSTFLOAT fVbargraph21; + double fRec24[2]; + FAUSTFLOAT fVbargraph22; + double fRec25[2]; + FAUSTFLOAT fVbargraph23; + double fRec26[2]; + FAUSTFLOAT fVbargraph24; + double fRec27[2]; + FAUSTFLOAT fVbargraph25; + double fRec28[2]; + FAUSTFLOAT fVbargraph26; + double fRec29[2]; + FAUSTFLOAT fVbargraph27; + double fRec30[2]; + FAUSTFLOAT fVbargraph28; + double fRec31[2]; + FAUSTFLOAT fVbargraph29; + double fRec32[2]; + FAUSTFLOAT fVbargraph30; + double fRec33[2]; + FAUSTFLOAT fVbargraph31; + double fRec0[2]; + FAUSTFLOAT fVbargraph32; + double fRec34[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec36[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec38[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec40[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec42[2]; + FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec44[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec46[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec48[2]; + FAUSTFLOAT fVbargraph47; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); - m->declare("lib/eigenmike32.lib/version", "1.0"); m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); - m->declare("lib/eigenmike32.lib/license", "GPL"); m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/eigenmike32.lib/license", "GPL"); + m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("lib/eigenmike32.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncEigenMike3"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 32; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 32; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec12[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec16[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec18[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec22[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec28[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec30[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec32[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec0[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec38[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec39[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec43[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec44[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec45[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec46[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec47[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec48[l48] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -775,561 +1199,536 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAEncEigenMike3"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150028ea0", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36d8d10", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150027a80", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36dd860", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150026660", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36d41c0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150025240", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36cf670", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150023e20", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36cab20", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150022a00", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36c5fd0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500215e0", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36c1480", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500201c0", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36bc930", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15001eda0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36b7de0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15001d980", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36b3290", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15001c560", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36ae740", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15001b140", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a9bf0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150019d20", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a50a0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150018900", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a0550", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500174e0", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x369ba00", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500160c0", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3696eb0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150014ca0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3692360", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150013880", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x368d810", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150012460", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3688cc0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150011040", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3684170", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15000fc20", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x367f620", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15000e800", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x367aad0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15000d3e0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3675f80", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15000bfc0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3671430", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15000abc0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x366c8e0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500097d0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3667d90", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500083e0", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3663240", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150006fd0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x365e6f0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150005be0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3659ba0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500047f0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3655050", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150003430", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3650500", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150002020", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x364b8d0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15002d1b0", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36e5570", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500324c0", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36f28d0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150035a50", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36fc7a0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15003b080", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37091e0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15003fc00", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3713fd0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150043130", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x371d320", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150046d50", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3727360", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15004a830", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3730a80", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15004f050", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x373b480", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff1500538a0", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3745f60", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150056570", &fbargraph42, -7e+01, 6.0); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x374e1b0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15005b670", &fbargraph43, -7e+01, 6.0); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3758ad0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff15005d880", &fbargraph44, -7e+01, 6.0); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x375f7a0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150062c90", &fbargraph45, -7e+01, 6.0); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x376ada0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff150065b50", &fbargraph46, -7e+01, 6.0); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3772ce0", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff14fad5280", &fbargraph47, -7e+01, 6.0); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x377e4a0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAEncEigenMike4" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,236 +601,685 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fRec3[2]; - FAUSTFLOAT fbargraph1; - double fRec4[2]; - FAUSTFLOAT fbargraph2; - double fRec5[2]; - FAUSTFLOAT fbargraph3; - double fRec6[2]; - FAUSTFLOAT fbargraph4; - double fRec7[2]; - FAUSTFLOAT fbargraph5; - double fRec8[2]; - FAUSTFLOAT fbargraph6; - double fRec9[2]; - FAUSTFLOAT fbargraph7; - double fRec10[2]; - FAUSTFLOAT fbargraph8; - double fRec11[2]; - FAUSTFLOAT fbargraph9; - double fRec12[2]; - FAUSTFLOAT fbargraph10; - double fRec13[2]; - FAUSTFLOAT fbargraph11; - double fRec14[2]; - FAUSTFLOAT fbargraph12; - double fRec15[2]; - FAUSTFLOAT fbargraph13; - double fRec16[2]; - FAUSTFLOAT fbargraph14; - double fRec17[2]; - FAUSTFLOAT fbargraph15; - double fRec18[2]; - FAUSTFLOAT fbargraph16; - double fRec19[2]; - FAUSTFLOAT fbargraph17; - double fRec20[2]; - FAUSTFLOAT fbargraph18; - double fRec21[2]; - FAUSTFLOAT fbargraph19; - double fRec22[2]; - FAUSTFLOAT fbargraph20; - double fRec23[2]; - FAUSTFLOAT fbargraph21; - double fRec24[2]; - FAUSTFLOAT fbargraph22; - double fRec25[2]; - FAUSTFLOAT fbargraph23; - double fRec26[2]; - FAUSTFLOAT fbargraph24; - double fRec27[2]; - FAUSTFLOAT fbargraph25; - double fRec28[2]; - FAUSTFLOAT fbargraph26; - double fRec29[2]; - FAUSTFLOAT fbargraph27; - double fRec30[2]; - FAUSTFLOAT fbargraph28; - double fRec31[2]; - FAUSTFLOAT fbargraph29; - double fRec32[2]; - FAUSTFLOAT fbargraph30; - double fRec33[2]; - FAUSTFLOAT fbargraph31; - double fRec0[2]; - FAUSTFLOAT fbargraph32; - double fRec34[2]; - FAUSTFLOAT fbargraph33; - double fRec35[2]; - FAUSTFLOAT fbargraph34; - double fRec36[2]; - FAUSTFLOAT fbargraph35; - double fRec37[2]; - FAUSTFLOAT fbargraph36; - double fRec38[2]; - FAUSTFLOAT fbargraph37; - double fRec39[2]; - FAUSTFLOAT fbargraph38; - double fRec40[2]; - FAUSTFLOAT fbargraph39; - double fRec41[2]; - FAUSTFLOAT fbargraph40; - double fRec42[2]; - FAUSTFLOAT fbargraph41; - double fRec43[2]; - FAUSTFLOAT fbargraph42; - double fRec44[2]; - FAUSTFLOAT fbargraph43; - double fRec45[2]; - FAUSTFLOAT fbargraph44; - double fRec46[2]; - FAUSTFLOAT fbargraph45; - double fRec47[2]; - FAUSTFLOAT fbargraph46; - double fRec48[2]; - FAUSTFLOAT fbargraph47; - double fRec49[2]; - FAUSTFLOAT fbargraph48; - double fRec50[2]; - FAUSTFLOAT fbargraph49; - double fRec51[2]; - FAUSTFLOAT fbargraph50; - double fRec52[2]; - FAUSTFLOAT fbargraph51; - double fRec53[2]; - FAUSTFLOAT fbargraph52; - double fRec54[2]; - FAUSTFLOAT fbargraph53; - double fRec55[2]; - FAUSTFLOAT fbargraph54; - double fRec56[2]; - FAUSTFLOAT fbargraph55; - double fRec57[2]; - FAUSTFLOAT fbargraph56; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncEigenMike4"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec11[2]; + FAUSTFLOAT fVbargraph9; + double fRec12[2]; + FAUSTFLOAT fVbargraph10; + double fRec13[2]; + FAUSTFLOAT fVbargraph11; + double fRec14[2]; + FAUSTFLOAT fVbargraph12; + double fRec15[2]; + FAUSTFLOAT fVbargraph13; + double fRec16[2]; + FAUSTFLOAT fVbargraph14; + double fRec17[2]; + FAUSTFLOAT fVbargraph15; + double fRec18[2]; + FAUSTFLOAT fVbargraph16; + double fRec19[2]; + FAUSTFLOAT fVbargraph17; + double fRec20[2]; + FAUSTFLOAT fVbargraph18; + double fRec21[2]; + FAUSTFLOAT fVbargraph19; + double fRec22[2]; + FAUSTFLOAT fVbargraph20; + double fRec23[2]; + FAUSTFLOAT fVbargraph21; + double fRec24[2]; + FAUSTFLOAT fVbargraph22; + double fRec25[2]; + FAUSTFLOAT fVbargraph23; + double fRec26[2]; + FAUSTFLOAT fVbargraph24; + double fRec27[2]; + FAUSTFLOAT fVbargraph25; + double fRec28[2]; + FAUSTFLOAT fVbargraph26; + double fRec29[2]; + FAUSTFLOAT fVbargraph27; + double fRec30[2]; + FAUSTFLOAT fVbargraph28; + double fRec31[2]; + FAUSTFLOAT fVbargraph29; + double fRec32[2]; + FAUSTFLOAT fVbargraph30; + double fRec33[2]; + FAUSTFLOAT fVbargraph31; + double fRec0[2]; + FAUSTFLOAT fVbargraph32; + double fRec34[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec36[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec38[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec40[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec42[2]; + FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec44[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec46[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec48[2]; + FAUSTFLOAT fVbargraph47; + double fRec49[2]; + FAUSTFLOAT fVbargraph48; + double fRec50[2]; + FAUSTFLOAT fVbargraph49; + double fRec51[2]; + FAUSTFLOAT fVbargraph50; + double fRec52[2]; + FAUSTFLOAT fVbargraph51; + double fRec53[2]; + FAUSTFLOAT fVbargraph52; + double fRec54[2]; + FAUSTFLOAT fVbargraph53; + double fRec55[2]; + FAUSTFLOAT fVbargraph54; + double fRec56[2]; + FAUSTFLOAT fVbargraph55; + double fRec57[2]; + FAUSTFLOAT fVbargraph56; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); - m->declare("lib/eigenmike32.lib/version", "1.0"); m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); - m->declare("lib/eigenmike32.lib/license", "GPL"); m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/eigenmike32.lib/license", "GPL"); + m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("lib/eigenmike32.lib/version", "1.0"); m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncEigenMike4"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 32; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 32; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec12[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec16[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec18[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec22[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec28[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec30[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec32[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec0[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec38[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec39[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec43[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec44[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec45[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec46[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec47[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec48[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec49[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec50[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec51[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec52[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec53[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec54[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec55[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec56[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec57[l57] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -802,660 +1289,635 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAEncEigenMike4"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b62820", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26713c0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b63c40", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2675f10", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b61400", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x266c870", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b5ffe0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2667d20", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b5ebc0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26631d0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b5d7a0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x265e680", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b5c380", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2659b30", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b5af60", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2654fe0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b59b40", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2650490", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b58720", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x264b940", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b57300", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2646df0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b55ee0", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26422a0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b54ac0", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x263d750", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b536a0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2638c00", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b52280", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26340b0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b50e60", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x262f560", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b4fa40", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x262aa10", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b4e620", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2625ec0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b4d200", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2621370", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b4bde0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x261c820", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b4a9c0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2617cd0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b495a0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2613180", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b48180", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x260e630", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b46d60", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2609ae0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b45960", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2604f90", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b44570", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2600440", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b43180", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x25fb8f0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b41d70", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x25f6da0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b40980", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x25f2250", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b3f590", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x25ed700", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b3e1a0", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x25e8bb0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b3cd20", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x25e3f80", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b67fc0", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x267dc20", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b6d1e0", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x268af80", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b708a0", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2694e50", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b75ea0", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26a1890", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b7a8a0", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26ac890", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b7e030", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26b6000", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b81760", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26c0460", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b85030", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26c9fa0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b89a20", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26d49a0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b8e760", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26df480", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b91670", &fbargraph42, -7e+01, 6.0); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26e76d0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b95cc0", &fbargraph43, -7e+01, 6.0); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26f1ff0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b98520", &fbargraph44, -7e+01, 6.0); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26f8cc0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690b9d7b0", &fbargraph45, -7e+01, 6.0); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27042c0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690ba04c0", &fbargraph46, -7e+01, 6.0); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x270c200", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690ba53f0", &fbargraph47, -7e+01, 6.0); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27179c0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690baab90", &fbargraph48, -7e+01, 6.0); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2723260", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690bad9c0", &fbargraph49, -7e+01, 6.0); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x272afe0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690bb1f60", &fbargraph50, -7e+01, 6.0); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2735450", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690bb4c20", &fbargraph51, -7e+01, 6.0); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x273d2b0", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690bb7350", &fbargraph52, -7e+01, 6.0); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27446d0", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690bbaab0", &fbargraph53, -7e+01, 6.0); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x274d210", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690bbf6b0", &fbargraph54, -7e+01, 6.0); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2757f90", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690bc2d30", &fbargraph55, -7e+01, 6.0); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2760c90", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9690bc6d50", &fbargraph56, -7e+01, 6.0); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x276ab20", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncLebedev061" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,95 +601,215 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fRec3[2]; - FAUSTFLOAT fbargraph1; - double fRec4[2]; - FAUSTFLOAT fbargraph2; - double fRec5[2]; - FAUSTFLOAT fbargraph3; - double fRec6[2]; - FAUSTFLOAT fbargraph4; - double fRec7[2]; - FAUSTFLOAT fbargraph5; - double fRec0[2]; - FAUSTFLOAT fbargraph6; - double fRec8[2]; - FAUSTFLOAT fbargraph7; - double fRec9[2]; - FAUSTFLOAT fbargraph8; - double fRec10[2]; - FAUSTFLOAT fbargraph9; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - m->declare("name", "HOAEncLebedev061"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec0[2]; + FAUSTFLOAT fVbargraph6; + double fRec8[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec10[2]; + FAUSTFLOAT fVbargraph9; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev061"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 6; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 6; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec0[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -661,140 +819,141 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAEncLebedev061"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7fef860", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31f4b70", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7ff0c70", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31f96c0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7fee470", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31f0020", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7fed080", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31eb4d0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7febc90", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31e6980", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7fea890", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31e1d50", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7ff2330", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31fe310", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7ff3cd0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3203f50", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7ff5490", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3209350", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe0c7ff75d0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x320f630", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncLebedev261" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,155 +601,415 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fRec3[2]; - FAUSTFLOAT fbargraph1; - double fRec4[2]; - FAUSTFLOAT fbargraph2; - double fRec5[2]; - FAUSTFLOAT fbargraph3; - double fRec6[2]; - FAUSTFLOAT fbargraph4; - double fRec7[2]; - FAUSTFLOAT fbargraph5; - double fRec8[2]; - FAUSTFLOAT fbargraph6; - double fRec9[2]; - FAUSTFLOAT fbargraph7; - double fRec10[2]; - FAUSTFLOAT fbargraph8; - double fRec11[2]; - FAUSTFLOAT fbargraph9; - double fRec12[2]; - FAUSTFLOAT fbargraph10; - double fRec13[2]; - FAUSTFLOAT fbargraph11; - double fRec14[2]; - FAUSTFLOAT fbargraph12; - double fRec15[2]; - FAUSTFLOAT fbargraph13; - double fRec16[2]; - FAUSTFLOAT fbargraph14; - double fRec17[2]; - FAUSTFLOAT fbargraph15; - double fRec18[2]; - FAUSTFLOAT fbargraph16; - double fRec19[2]; - FAUSTFLOAT fbargraph17; - double fRec20[2]; - FAUSTFLOAT fbargraph18; - double fRec21[2]; - FAUSTFLOAT fbargraph19; - double fRec22[2]; - FAUSTFLOAT fbargraph20; - double fRec23[2]; - FAUSTFLOAT fbargraph21; - double fRec24[2]; - FAUSTFLOAT fbargraph22; - double fRec25[2]; - FAUSTFLOAT fbargraph23; - double fRec26[2]; - FAUSTFLOAT fbargraph24; - double fRec27[2]; - FAUSTFLOAT fbargraph25; - double fRec0[2]; - FAUSTFLOAT fbargraph26; - double fRec28[2]; - FAUSTFLOAT fbargraph27; - double fRec29[2]; - FAUSTFLOAT fbargraph28; - double fRec30[2]; - FAUSTFLOAT fbargraph29; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncLebedev261"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec11[2]; + FAUSTFLOAT fVbargraph9; + double fRec12[2]; + FAUSTFLOAT fVbargraph10; + double fRec13[2]; + FAUSTFLOAT fVbargraph11; + double fRec14[2]; + FAUSTFLOAT fVbargraph12; + double fRec15[2]; + FAUSTFLOAT fVbargraph13; + double fRec16[2]; + FAUSTFLOAT fVbargraph14; + double fRec17[2]; + FAUSTFLOAT fVbargraph15; + double fRec18[2]; + FAUSTFLOAT fVbargraph16; + double fRec19[2]; + FAUSTFLOAT fVbargraph17; + double fRec20[2]; + FAUSTFLOAT fVbargraph18; + double fRec21[2]; + FAUSTFLOAT fVbargraph19; + double fRec22[2]; + FAUSTFLOAT fVbargraph20; + double fRec23[2]; + FAUSTFLOAT fVbargraph21; + double fRec24[2]; + FAUSTFLOAT fVbargraph22; + double fRec25[2]; + FAUSTFLOAT fVbargraph23; + double fRec26[2]; + FAUSTFLOAT fVbargraph24; + double fRec27[2]; + FAUSTFLOAT fVbargraph25; + double fRec0[2]; + FAUSTFLOAT fVbargraph26; + double fRec28[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec30[2]; + FAUSTFLOAT fVbargraph29; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev261"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 26; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 26; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec12[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec16[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec18[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec22[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec0[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -721,342 +1019,323 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAEncLebedev261"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb21ef10", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2df56e0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb6011f0", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dfa230", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb49a4d0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2df0b90", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb499160", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dec040", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb497db0", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2de74f0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb600500", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2de28c0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb15fd10", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e32110", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb1613d0", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e371b0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb15e650", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e2d080", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb15cf90", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e27ff0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb15b8d0", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e22f60", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb15a210", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e1ded0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb158b50", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e18e40", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb157490", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e13db0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb155dd0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e0ed20", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb154710", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e09c90", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb153070", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e04c00", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb151990", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dffb70", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb16e170", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e601c0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb16fd70", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e65cd0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb16c570", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e5a6b0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb16a970", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e54ba0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb168d70", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e4f090", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb167170", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e49580", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb165570", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e43a70", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb163970", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e3df60", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb171ff0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e6c090", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb175a10", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e752e0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb177db0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e7bd60", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe8fb17baf0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e85a30", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncLebedev262" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,170 +601,465 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fRec3[2]; - FAUSTFLOAT fbargraph1; - double fRec4[2]; - FAUSTFLOAT fbargraph2; - double fRec5[2]; - FAUSTFLOAT fbargraph3; - double fRec6[2]; - FAUSTFLOAT fbargraph4; - double fRec7[2]; - FAUSTFLOAT fbargraph5; - double fRec8[2]; - FAUSTFLOAT fbargraph6; - double fRec9[2]; - FAUSTFLOAT fbargraph7; - double fRec10[2]; - FAUSTFLOAT fbargraph8; - double fRec11[2]; - FAUSTFLOAT fbargraph9; - double fRec12[2]; - FAUSTFLOAT fbargraph10; - double fRec13[2]; - FAUSTFLOAT fbargraph11; - double fRec14[2]; - FAUSTFLOAT fbargraph12; - double fRec15[2]; - FAUSTFLOAT fbargraph13; - double fRec16[2]; - FAUSTFLOAT fbargraph14; - double fRec17[2]; - FAUSTFLOAT fbargraph15; - double fRec18[2]; - FAUSTFLOAT fbargraph16; - double fRec19[2]; - FAUSTFLOAT fbargraph17; - double fRec20[2]; - FAUSTFLOAT fbargraph18; - double fRec21[2]; - FAUSTFLOAT fbargraph19; - double fRec22[2]; - FAUSTFLOAT fbargraph20; - double fRec23[2]; - FAUSTFLOAT fbargraph21; - double fRec24[2]; - FAUSTFLOAT fbargraph22; - double fRec25[2]; - FAUSTFLOAT fbargraph23; - double fRec26[2]; - FAUSTFLOAT fbargraph24; - double fRec27[2]; - FAUSTFLOAT fbargraph25; - double fRec0[2]; - FAUSTFLOAT fbargraph26; - double fRec28[2]; - FAUSTFLOAT fbargraph27; - double fRec29[2]; - FAUSTFLOAT fbargraph28; - double fRec30[2]; - FAUSTFLOAT fbargraph29; - double fRec31[2]; - FAUSTFLOAT fbargraph30; - double fRec32[2]; - FAUSTFLOAT fbargraph31; - double fRec33[2]; - FAUSTFLOAT fbargraph32; - double fRec34[2]; - FAUSTFLOAT fbargraph33; - double fRec35[2]; - FAUSTFLOAT fbargraph34; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - m->declare("name", "HOAEncLebedev262"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec11[2]; + FAUSTFLOAT fVbargraph9; + double fRec12[2]; + FAUSTFLOAT fVbargraph10; + double fRec13[2]; + FAUSTFLOAT fVbargraph11; + double fRec14[2]; + FAUSTFLOAT fVbargraph12; + double fRec15[2]; + FAUSTFLOAT fVbargraph13; + double fRec16[2]; + FAUSTFLOAT fVbargraph14; + double fRec17[2]; + FAUSTFLOAT fVbargraph15; + double fRec18[2]; + FAUSTFLOAT fVbargraph16; + double fRec19[2]; + FAUSTFLOAT fVbargraph17; + double fRec20[2]; + FAUSTFLOAT fVbargraph18; + double fRec21[2]; + FAUSTFLOAT fVbargraph19; + double fRec22[2]; + FAUSTFLOAT fVbargraph20; + double fRec23[2]; + FAUSTFLOAT fVbargraph21; + double fRec24[2]; + FAUSTFLOAT fVbargraph22; + double fRec25[2]; + FAUSTFLOAT fVbargraph23; + double fRec26[2]; + FAUSTFLOAT fVbargraph24; + double fRec27[2]; + FAUSTFLOAT fVbargraph25; + double fRec0[2]; + FAUSTFLOAT fVbargraph26; + double fRec28[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec30[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec32[2]; + FAUSTFLOAT fVbargraph31; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fRec34[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev262"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 26; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 26; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec12[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec16[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec18[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec22[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec0[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec33[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -736,410 +1069,390 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAEncLebedev262"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21e2950", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e839d0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21e3d60", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e88520", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21e1560", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e7ee80", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21e0170", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e7a330", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21dee10", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e757e0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21dda00", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e70bb0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21f3b50", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ec0400", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21f5210", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ec5490", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21f2490", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ebb370", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21f0dd0", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1eb62e0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21ef710", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1eb1250", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21ee050", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1eac1c0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21ec990", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ea7130", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21eb2d0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ea20a0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21e9c10", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e9d010", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21e8550", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e97f80", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21e6eb0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e92ef0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21e5820", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1e8de60", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae2205ed0", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1eee4a0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae2207ad0", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ef3fb0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae22042d0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ee8990", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae22026d0", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ee2e80", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae2200ad0", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1edd370", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21faf50", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ed7860", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21f9350", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ed1d50", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae21f7750", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ecc240", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae2209ca0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1efa580", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae220d4b0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f04220", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae220fa20", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f0aeb0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae22134a0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f157e0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae2216fc0", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f1e660", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae22196f0", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f25940", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae221c700", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f2db00", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae221ef60", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f35610", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f8ae2223070", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f3f190", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncLebedev263" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,191 +601,535 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fRec3[2]; - FAUSTFLOAT fbargraph1; - double fRec4[2]; - FAUSTFLOAT fbargraph2; - double fRec5[2]; - FAUSTFLOAT fbargraph3; - double fRec6[2]; - FAUSTFLOAT fbargraph4; - double fRec7[2]; - FAUSTFLOAT fbargraph5; - double fRec8[2]; - FAUSTFLOAT fbargraph6; - double fRec9[2]; - FAUSTFLOAT fbargraph7; - double fRec10[2]; - FAUSTFLOAT fbargraph8; - double fRec11[2]; - FAUSTFLOAT fbargraph9; - double fRec12[2]; - FAUSTFLOAT fbargraph10; - double fRec13[2]; - FAUSTFLOAT fbargraph11; - double fRec14[2]; - FAUSTFLOAT fbargraph12; - double fRec15[2]; - FAUSTFLOAT fbargraph13; - double fRec16[2]; - FAUSTFLOAT fbargraph14; - double fRec17[2]; - FAUSTFLOAT fbargraph15; - double fRec18[2]; - FAUSTFLOAT fbargraph16; - double fRec19[2]; - FAUSTFLOAT fbargraph17; - double fRec20[2]; - FAUSTFLOAT fbargraph18; - double fRec21[2]; - FAUSTFLOAT fbargraph19; - double fRec22[2]; - FAUSTFLOAT fbargraph20; - double fRec23[2]; - FAUSTFLOAT fbargraph21; - double fRec24[2]; - FAUSTFLOAT fbargraph22; - double fRec25[2]; - FAUSTFLOAT fbargraph23; - double fRec26[2]; - FAUSTFLOAT fbargraph24; - double fRec27[2]; - FAUSTFLOAT fbargraph25; - double fRec0[2]; - FAUSTFLOAT fbargraph26; - double fRec28[2]; - FAUSTFLOAT fbargraph27; - double fRec29[2]; - FAUSTFLOAT fbargraph28; - double fRec30[2]; - FAUSTFLOAT fbargraph29; - double fRec31[2]; - FAUSTFLOAT fbargraph30; - double fRec32[2]; - FAUSTFLOAT fbargraph31; - double fRec33[2]; - FAUSTFLOAT fbargraph32; - double fRec34[2]; - FAUSTFLOAT fbargraph33; - double fRec35[2]; - FAUSTFLOAT fbargraph34; - double fRec36[2]; - FAUSTFLOAT fbargraph35; - double fRec37[2]; - FAUSTFLOAT fbargraph36; - double fRec38[2]; - FAUSTFLOAT fbargraph37; - double fRec39[2]; - FAUSTFLOAT fbargraph38; - double fRec40[2]; - FAUSTFLOAT fbargraph39; - double fRec41[2]; - FAUSTFLOAT fbargraph40; - double fRec42[2]; - FAUSTFLOAT fbargraph41; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncLebedev263"); - m->declare("version", "1.0"); + double fConst0; + FAUSTFLOAT fHslider0; + double fRec1[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + double fRec3[2]; + FAUSTFLOAT fVbargraph1; + double fRec4[2]; + FAUSTFLOAT fVbargraph2; + double fRec5[2]; + FAUSTFLOAT fVbargraph3; + double fRec6[2]; + FAUSTFLOAT fVbargraph4; + double fRec7[2]; + FAUSTFLOAT fVbargraph5; + double fRec8[2]; + FAUSTFLOAT fVbargraph6; + double fRec9[2]; + FAUSTFLOAT fVbargraph7; + double fRec10[2]; + FAUSTFLOAT fVbargraph8; + double fRec11[2]; + FAUSTFLOAT fVbargraph9; + double fRec12[2]; + FAUSTFLOAT fVbargraph10; + double fRec13[2]; + FAUSTFLOAT fVbargraph11; + double fRec14[2]; + FAUSTFLOAT fVbargraph12; + double fRec15[2]; + FAUSTFLOAT fVbargraph13; + double fRec16[2]; + FAUSTFLOAT fVbargraph14; + double fRec17[2]; + FAUSTFLOAT fVbargraph15; + double fRec18[2]; + FAUSTFLOAT fVbargraph16; + double fRec19[2]; + FAUSTFLOAT fVbargraph17; + double fRec20[2]; + FAUSTFLOAT fVbargraph18; + double fRec21[2]; + FAUSTFLOAT fVbargraph19; + double fRec22[2]; + FAUSTFLOAT fVbargraph20; + double fRec23[2]; + FAUSTFLOAT fVbargraph21; + double fRec24[2]; + FAUSTFLOAT fVbargraph22; + double fRec25[2]; + FAUSTFLOAT fVbargraph23; + double fRec26[2]; + FAUSTFLOAT fVbargraph24; + double fRec27[2]; + FAUSTFLOAT fVbargraph25; + double fRec0[2]; + FAUSTFLOAT fVbargraph26; + double fRec28[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec30[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec32[2]; + FAUSTFLOAT fVbargraph31; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fRec34[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec36[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec38[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec40[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec42[2]; + FAUSTFLOAT fVbargraph41; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev263"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 26; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 26; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1e+03, (double)fSamplingFreq))); + fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec6[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec8[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec10[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec12[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec16[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec18[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec20[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec22[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec24[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec0[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec33[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec38[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec39[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -757,497 +1139,478 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAEncLebedev263"); ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9bcf90", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39b29e0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9be3a0", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39b7530", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9bbba0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ade90", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9ba7b0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39a9340", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9b9450", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39a47f0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9b8040", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x399fbc0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9ce190", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ef410", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9cf850", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39f44a0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9ccad0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ea380", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9cb410", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e52f0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9c9d50", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e0260", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9c8690", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39db1d0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9c6fd0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d6140", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9c5910", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d10b0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9c4250", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39cc020", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9c2b90", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c6f90", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9c14f0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c1f00", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9bfe60", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39bce70", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9dc590", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a1d4c0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9de190", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a22fd0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9da990", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a179b0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9d8d90", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a11ea0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9d7190", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a0c390", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9d5590", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a06880", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9d3990", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a00d70", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9d1d90", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39fb260", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9e0360", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a295a0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9e39b0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a33870", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9e6050", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a3a920", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9e9da0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a45670", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9ed760", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a4e700", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9efc20", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a55bf0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9f2c50", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a5ddc0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9f52f0", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a66110", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3b9f91f0", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a6fea0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3ba01280", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a79910", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3ba03710", &fbargraph36, -7e+01, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a806f0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3ba068e0", &fbargraph37, -7e+01, 6.0); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a88b00", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3ba08750", &fbargraph38, -7e+01, 6.0); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a8ecb0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3ba0c020", &fbargraph39, -7e+01, 6.0); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a98000", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3ba0f080", &fbargraph40, -7e+01, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a9ff70", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fff3ba12ff0", &fbargraph41, -7e+01, 6.0); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa9ba0", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,62 +602,325 @@ class ControlAllocator : public UI #endif +double pow(double dummy0, double dummy1); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fRec0[2]; + + private: + + FAUSTFLOAT fHslider0; + double fRec0[2]; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncLebedev501"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev501"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 50; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 50; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -628,144 +930,154 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* input36 = input[36]; - FAUSTFLOAT* input37 = input[37]; - FAUSTFLOAT* input38 = input[38]; - FAUSTFLOAT* input39 = input[39]; - FAUSTFLOAT* input40 = input[40]; - FAUSTFLOAT* input41 = input[41]; - FAUSTFLOAT* input42 = input[42]; - FAUSTFLOAT* input43 = input[43]; - FAUSTFLOAT* input44 = input[44]; - FAUSTFLOAT* input45 = input[45]; - FAUSTFLOAT* input46 = input[46]; - FAUSTFLOAT* input47 = input[47]; - FAUSTFLOAT* input48 = input[48]; - FAUSTFLOAT* input49 = input[49]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,62 +602,345 @@ class ControlAllocator : public UI #endif +double pow(double dummy0, double dummy1); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fRec0[2]; + + private: + + FAUSTFLOAT fHslider0; + double fRec0[2]; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncLebedev502"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev502"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 50; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 50; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -628,186 +950,191 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* input36 = input[36]; - FAUSTFLOAT* input37 = input[37]; - FAUSTFLOAT* input38 = input[38]; - FAUSTFLOAT* input39 = input[39]; - FAUSTFLOAT* input40 = input[40]; - FAUSTFLOAT* input41 = input[41]; - FAUSTFLOAT* input42 = input[42]; - FAUSTFLOAT* input43 = input[43]; - FAUSTFLOAT* input44 = input[44]; - FAUSTFLOAT* input45 = input[45]; - FAUSTFLOAT* input46 = input[46]; - FAUSTFLOAT* input47 = input[47]; - FAUSTFLOAT* input48 = input[48]; - FAUSTFLOAT* input49 = input[49]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,62 +602,373 @@ class ControlAllocator : public UI #endif +double pow(double dummy0, double dummy1); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fRec0[2]; + + private: + + FAUSTFLOAT fHslider0; + double fRec0[2]; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - m->declare("name", "HOAEncLebedev503"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev503"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 50; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 50; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -628,235 +978,241 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* input36 = input[36]; - FAUSTFLOAT* input37 = input[37]; - FAUSTFLOAT* input38 = input[38]; - FAUSTFLOAT* input39 = input[39]; - FAUSTFLOAT* input40 = input[40]; - FAUSTFLOAT* input41 = input[41]; - FAUSTFLOAT* input42 = input[42]; - FAUSTFLOAT* input43 = input[43]; - FAUSTFLOAT* input44 = input[44]; - FAUSTFLOAT* input45 = input[45]; - FAUSTFLOAT* input46 = input[46]; - FAUSTFLOAT* input47 = input[47]; - FAUSTFLOAT* input48 = input[48]; - FAUSTFLOAT* input49 = input[49]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,62 +602,409 @@ class ControlAllocator : public UI #endif +double pow(double dummy0, double dummy1); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fRec0[2]; + + private: + + FAUSTFLOAT fHslider0; + double fRec0[2]; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncLebedev504"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev504"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 50; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 50; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -628,281 +1014,283 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* input36 = input[36]; - FAUSTFLOAT* input37 = input[37]; - FAUSTFLOAT* input38 = input[38]; - FAUSTFLOAT* input39 = input[39]; - FAUSTFLOAT* input40 = input[40]; - FAUSTFLOAT* input41 = input[41]; - FAUSTFLOAT* input42 = input[42]; - FAUSTFLOAT* input43 = input[43]; - FAUSTFLOAT* input44 = input[44]; - FAUSTFLOAT* input45 = input[45]; - FAUSTFLOAT* input46 = input[46]; - FAUSTFLOAT* input47 = input[47]; - FAUSTFLOAT* input48 = input[48]; - FAUSTFLOAT* input49 = input[49]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,62 +602,453 @@ class ControlAllocator : public UI #endif +double pow(double dummy0, double dummy1); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fRec0[2]; + + private: + + FAUSTFLOAT fHslider0; + double fRec0[2]; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncLebedev505"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/license", "GPL"); m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncLebedev505"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 50; } - virtual int getNumOutputs() { return 36; } + virtual int getNumInputs() { + return 50; + + } + virtual int getNumOutputs() { + return 36; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec0[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -628,314 +1058,316 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); - ui_interface->declare(&fslider0, "1", ""); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fslider0, 0.0, -1e+01, 5e+01, 0.1); + ui_interface->declare(&fHslider0, "1", ""); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "dB"); + ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* input36 = input[36]; - FAUSTFLOAT* input37 = input[37]; - FAUSTFLOAT* input38 = input[38]; - FAUSTFLOAT* input39 = input[39]; - FAUSTFLOAT* input40 = input[40]; - FAUSTFLOAT* input41 = input[41]; - FAUSTFLOAT* input42 = input[42]; - FAUSTFLOAT* input43 = input[43]; - FAUSTFLOAT* input44 = input[44]; - FAUSTFLOAT* input45 = input[45]; - FAUSTFLOAT* input46 = input[46]; - FAUSTFLOAT* input47 = input[47]; - FAUSTFLOAT* input48 = input[48]; - FAUSTFLOAT* input49 = input[49]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - for (int i=0; i -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncoder1" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -35,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -66,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -73,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -91,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -126,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -193,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,99 +601,192 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double sin(double dummy0); +double cos(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph1; - double fRec6[2]; - FAUSTFLOAT fbargraph2; - double fRec7[2]; - FAUSTFLOAT fbargraph3; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("name", "HOAEncoder1"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec6[2]; + FAUSTFLOAT fVbargraph2; + double fRec7[2]; + FAUSTFLOAT fVbargraph3; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncoder1"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider0 = 2.0; - fslider1 = 0.0; - fslider2 = 0.0; - fslider3 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider0 = FAUSTFLOAT(2.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec5[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec3[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -665,125 +796,123 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder1"); - ui_interface->openVerticalBox("Parameters"); - ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider3, "0+3", ""); - ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider2, "0+4", ""); - ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider0, "5", ""); + ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "6", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); + ui_interface->declare(0, "7", ""); ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa62242fba0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27e0c80", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa622434df0", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27f2590", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa622436820", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27f8350", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa622438410", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27fe2e0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - double fSlow1 = (1 - fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = double(fslider2); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fslider3); - double fSlow10 = (1.7320508075688772 * (fSlow8 * sin(fSlow9))); - double fSlow11 = ((fConst3 / fSlow4) + 1); - double fSlow12 = (fConst2 / (fSlow4 * fSlow11)); - double fSlow13 = (1.0 / ((fConst3 / fSlow2) + 1)); - double fSlow14 = ((fSlow3 * fSlow11) / fSlow4); - double fSlow15 = (fConst2 / fSlow2); - double fSlow16 = (1.7320508075688772 * sin(fSlow7)); - double fSlow17 = (1.7320508075688772 * (fSlow8 * cos(fSlow9))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncoder2" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,130 +601,280 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph1; - double fRec6[2]; - FAUSTFLOAT fbargraph2; - double fRec7[2]; - FAUSTFLOAT fbargraph3; - double fConst4; - double fRec11[2]; - double fRec10[2]; - double fConst5; - double fRec9[2]; - double fRec13[2]; - double fVec0[2]; - double fRec12[2]; - double fRec8[2]; - FAUSTFLOAT fbargraph4; - double fRec14[2]; - FAUSTFLOAT fbargraph5; - double fRec15[2]; - FAUSTFLOAT fbargraph6; - double fRec16[2]; - FAUSTFLOAT fbargraph7; - double fRec17[2]; - FAUSTFLOAT fbargraph8; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncoder2"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec6[2]; + FAUSTFLOAT fVbargraph2; + double fRec7[2]; + FAUSTFLOAT fVbargraph3; + double fConst4; + double fConst5; + double fRec11[2]; + double fRec12[2]; + double fRec10[2]; + double fRec9[2]; + double fVec0[2]; + double fRec13[2]; + double fRec8[2]; + FAUSTFLOAT fVbargraph4; + double fRec14[2]; + FAUSTFLOAT fVbargraph5; + double fRec15[2]; + FAUSTFLOAT fVbargraph6; + double fRec16[2]; + FAUSTFLOAT fVbargraph7; + double fRec17[2]; + FAUSTFLOAT fVbargraph8; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncoder2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider0 = 2.0; - fslider1 = 0.0; - fslider2 = 0.0; - fslider3 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider0 = FAUSTFLOAT(2.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec5[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec3[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec11[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec9[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fVec0[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec8[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec15[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec17[l18] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -708,215 +884,213 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder2"); - ui_interface->openVerticalBox("Parameters"); - ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider3, "0+3", ""); - ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider2, "0+4", ""); - ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox0); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider0, "5", ""); + ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "6", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); + ui_interface->declare(0, "7", ""); ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a17f80", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3182330", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a1d3a0", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3194480", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a1ee10", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x319a450", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a20a20", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31a0600", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a26880", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31b7830", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a28530", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31bdd00", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a2a3a0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31c4670", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a2bf70", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31ca380", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7f9296a2dcf0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31d05b0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - double fSlow1 = (1 - fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = double(fslider2); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fslider3); - double fSlow10 = sin(fSlow9); - double fSlow11 = (1.7320508075688772 * (fSlow8 * fSlow10)); - double fSlow12 = (fConst3 / fSlow4); - double fSlow13 = (fSlow12 + 1); - double fSlow14 = (fConst2 / (fSlow4 * fSlow13)); - double fSlow15 = (fConst3 / fSlow2); - double fSlow16 = (1.0 / (fSlow15 + 1)); - double fSlow17 = ((fSlow3 * fSlow13) / fSlow4); - double fSlow18 = (fConst2 / fSlow2); - double fSlow19 = sin(fSlow7); - double fSlow20 = (1.7320508075688772 * fSlow19); - double fSlow21 = cos(fSlow9); - double fSlow22 = (1.7320508075688772 * (fSlow8 * fSlow21)); - double fSlow23 = faustpower<2>(fSlow8); - double fSlow24 = (2 * fSlow9); - double fSlow25 = (1.9364916731037085 * (fSlow23 * sin(fSlow24))); - double fSlow26 = faustpower<2>(fSlow15); - double fSlow27 = (1.0 / (((fConst4 / fSlow2) + (3 * fSlow26)) + 1)); - double fSlow28 = faustpower<2>(fSlow12); - double fSlow29 = (((fConst4 / fSlow4) + (3 * fSlow28)) + 1); - double fSlow30 = ((fSlow3 * fSlow29) / fSlow4); - double fSlow31 = (12 * fSlow26); - double fSlow32 = (fSlow31 + (fConst5 / fSlow2)); - double fSlow33 = (1.0 / fSlow29); - double fSlow34 = (12 * fSlow28); - double fSlow35 = ((fConst5 / fSlow4) + fSlow34); - double fSlow36 = sin((2 * fSlow7)); - double fSlow37 = (1.9364916731037085 * (fSlow36 * fSlow10)); - double fSlow38 = (1.118033988749895 * ((3 * faustpower<2>(fSlow19)) + -1)); - double fSlow39 = (1.9364916731037085 * (fSlow36 * fSlow21)); - double fSlow40 = (1.9364916731037085 * (fSlow23 * cos(fSlow24))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncoder3" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,177 +601,407 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph1; - double fRec6[2]; - FAUSTFLOAT fbargraph2; - double fRec7[2]; - FAUSTFLOAT fbargraph3; - double fConst4; - double fRec11[2]; - double fRec10[2]; - double fConst5; - double fRec9[2]; - double fRec13[2]; - double fVec0[2]; - double fRec12[2]; - double fRec8[2]; - FAUSTFLOAT fbargraph4; - double fRec14[2]; - FAUSTFLOAT fbargraph5; - double fRec15[2]; - FAUSTFLOAT fbargraph6; - double fRec16[2]; - FAUSTFLOAT fbargraph7; - double fRec17[2]; - FAUSTFLOAT fbargraph8; - double fConst6; - double fConst7; - double fConst8; - double fRec23[2]; - double fRec22[2]; - double fConst9; - double fRec21[2]; - double fRec25[2]; - double fVec1[2]; - double fRec24[2]; - double fRec26[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; - FAUSTFLOAT fbargraph9; - double fRec27[2]; - FAUSTFLOAT fbargraph10; - double fRec28[2]; - FAUSTFLOAT fbargraph11; - double fRec29[2]; - FAUSTFLOAT fbargraph12; - double fRec30[2]; - FAUSTFLOAT fbargraph13; - double fRec31[2]; - FAUSTFLOAT fbargraph14; - double fRec32[2]; - FAUSTFLOAT fbargraph15; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - m->declare("name", "HOAEncoder3"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec6[2]; + FAUSTFLOAT fVbargraph2; + double fRec7[2]; + FAUSTFLOAT fVbargraph3; + double fConst4; + double fConst5; + double fRec11[2]; + double fRec12[2]; + double fRec10[2]; + double fRec9[2]; + double fVec0[2]; + double fRec13[2]; + double fRec8[2]; + FAUSTFLOAT fVbargraph4; + double fRec14[2]; + FAUSTFLOAT fVbargraph5; + double fRec15[2]; + FAUSTFLOAT fVbargraph6; + double fRec16[2]; + FAUSTFLOAT fVbargraph7; + double fRec17[2]; + FAUSTFLOAT fVbargraph8; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph9; + double fRec27[2]; + FAUSTFLOAT fVbargraph10; + double fRec28[2]; + FAUSTFLOAT fVbargraph11; + double fRec29[2]; + FAUSTFLOAT fVbargraph12; + double fRec30[2]; + FAUSTFLOAT fVbargraph13; + double fRec31[2]; + FAUSTFLOAT fVbargraph14; + double fRec32[2]; + FAUSTFLOAT fVbargraph15; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncoder3"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); - fConst6 = (789.5430205728705 / fConst0); - fConst7 = (394.7715102864353 / fConst0); - fConst8 = (625.2284897135664 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + fConst6 = (789.54302057287055 / fConst0); + fConst7 = (394.77151028643527 / fConst0); + fConst8 = (625.22848971356643 / fConst0); fConst9 = (1250.4569794271329 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider0 = 2.0; - fslider1 = 0.0; - fslider2 = 0.0; - fslider3 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider0 = FAUSTFLOAT(2.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec5[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec3[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec11[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec9[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fVec0[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec8[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec15[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec17[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec22[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec23[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec24[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fVec1[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec20[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec19[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec18[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec27[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec28[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec29[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec30[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec31[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec32[l34] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -755,336 +1011,331 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder3"); - ui_interface->openVerticalBox("Parameters"); - ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider3, "0+3", ""); - ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider2, "0+4", ""); - ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox0); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider0, "5", ""); + ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "6", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); + ui_interface->declare(0, "7", ""); ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158d62a0", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x25fa870", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158db750", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x260c9c0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158dd1c0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2612990", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158dee60", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2618b40", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158e4d10", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x262ff90", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158e69c0", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2636460", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158e8850", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x263cfe0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158ea430", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2642cf0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158ec1e0", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2649140", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158f3fc0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2666ad0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158f5c90", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x266c9b0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158f7c60", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26734e0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158f9aa0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x26798b0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd1158fb770", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x267f960", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd115c01420", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2685910", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fd115c032f0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x268bde0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - double fSlow1 = (1 - fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = double(fslider2); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fslider3); - double fSlow10 = sin(fSlow9); - double fSlow11 = (fSlow8 * fSlow10); - double fSlow12 = (1.7320508075688772 * fSlow11); - double fSlow13 = (fConst3 / fSlow4); - double fSlow14 = (fSlow13 + 1); - double fSlow15 = (fConst2 / (fSlow4 * fSlow14)); - double fSlow16 = (fConst3 / fSlow2); - double fSlow17 = (1.0 / (fSlow16 + 1)); - double fSlow18 = ((fSlow3 * fSlow14) / fSlow4); - double fSlow19 = (fConst2 / fSlow2); - double fSlow20 = sin(fSlow7); - double fSlow21 = (1.7320508075688772 * fSlow20); - double fSlow22 = cos(fSlow9); - double fSlow23 = (fSlow8 * fSlow22); - double fSlow24 = (1.7320508075688772 * fSlow23); - double fSlow25 = faustpower<2>(fSlow8); - double fSlow26 = (2 * fSlow9); - double fSlow27 = sin(fSlow26); - double fSlow28 = (1.9364916731037085 * (fSlow25 * fSlow27)); - double fSlow29 = faustpower<2>(fSlow16); - double fSlow30 = (1.0 / (((fConst4 / fSlow2) + (3 * fSlow29)) + 1)); - double fSlow31 = faustpower<2>(fSlow13); - double fSlow32 = (((fConst4 / fSlow4) + (3 * fSlow31)) + 1); - double fSlow33 = ((fSlow3 * fSlow32) / fSlow4); - double fSlow34 = (12 * fSlow29); - double fSlow35 = (fSlow34 + (fConst5 / fSlow2)); - double fSlow36 = (1.0 / fSlow32); - double fSlow37 = (12 * fSlow31); - double fSlow38 = ((fConst5 / fSlow4) + fSlow37); - double fSlow39 = sin((2 * fSlow7)); - double fSlow40 = (1.9364916731037085 * (fSlow39 * fSlow10)); - double fSlow41 = faustpower<2>(fSlow20); - double fSlow42 = (1.118033988749895 * ((3 * fSlow41) + -1)); - double fSlow43 = (1.9364916731037085 * (fSlow39 * fSlow22)); - double fSlow44 = cos(fSlow26); - double fSlow45 = (1.9364916731037085 * (fSlow25 * fSlow44)); - double fSlow46 = faustpower<3>(fSlow8); - double fSlow47 = (3 * fSlow9); - double fSlow48 = (2.091650066335189 * (fSlow46 * sin(fSlow47))); - double fSlow49 = ((fConst7 / fSlow4) + 1); - double fSlow50 = (fConst6 / (fSlow4 * fSlow49)); - double fSlow51 = (1.0 / ((fConst7 / fSlow2) + 1)); - double fSlow52 = (1.0 / (((fConst8 / fSlow2) + (6.45943269348338 * fSlow29)) + 1)); - double fSlow53 = (((fConst8 / fSlow4) + (6.45943269348338 * fSlow31)) + 1); - double fSlow54 = ((fSlow3 * fSlow53) / fSlow4); - double fSlow55 = (25.83773077393352 * fSlow29); - double fSlow56 = (fSlow55 + (fConst9 / fSlow2)); - double fSlow57 = (1.0 / fSlow53); - double fSlow58 = (25.83773077393352 * fSlow31); - double fSlow59 = ((fConst9 / fSlow4) + fSlow58); - double fSlow60 = (fConst6 / fSlow2); - double fSlow61 = (fSlow25 * fSlow20); - double fSlow62 = (5.123475382979799 * (fSlow61 * fSlow27)); - double fSlow63 = (5 * fSlow41); - double fSlow64 = (fSlow63 + -1); - double fSlow65 = (1.620185174601965 * (fSlow11 * fSlow64)); - double fSlow66 = (1.3228756555322954 * (fSlow20 * (fSlow63 + -3))); - double fSlow67 = (1.620185174601965 * (fSlow23 * fSlow64)); - double fSlow68 = (5.123475382979799 * (fSlow61 * fSlow44)); - double fSlow69 = (2.091650066335189 * (fSlow46 * cos(fSlow47))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncoder4" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,236 +601,569 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} +double mydsp_faustpower4_f(double value) { + return (((value * value) * value) * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph1; - double fRec6[2]; - FAUSTFLOAT fbargraph2; - double fRec7[2]; - FAUSTFLOAT fbargraph3; - double fConst4; - double fRec11[2]; - double fRec10[2]; - double fConst5; - double fRec9[2]; - double fRec13[2]; - double fVec0[2]; - double fRec12[2]; - double fRec8[2]; - FAUSTFLOAT fbargraph4; - double fRec14[2]; - FAUSTFLOAT fbargraph5; - double fRec15[2]; - FAUSTFLOAT fbargraph6; - double fRec16[2]; - FAUSTFLOAT fbargraph7; - double fRec17[2]; - FAUSTFLOAT fbargraph8; - double fConst6; - double fConst7; - double fConst8; - double fRec23[2]; - double fRec22[2]; - double fConst9; - double fRec21[2]; - double fRec25[2]; - double fVec1[2]; - double fRec24[2]; - double fRec26[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; - FAUSTFLOAT fbargraph9; - double fRec27[2]; - FAUSTFLOAT fbargraph10; - double fRec28[2]; - FAUSTFLOAT fbargraph11; - double fRec29[2]; - FAUSTFLOAT fbargraph12; - double fRec30[2]; - FAUSTFLOAT fbargraph13; - double fRec31[2]; - FAUSTFLOAT fbargraph14; - double fRec32[2]; - FAUSTFLOAT fbargraph15; - double fConst10; - double fConst11; - double fRec37[2]; - double fRec36[2]; - double fConst12; - double fRec35[2]; - double fRec39[2]; - double fVec2[2]; - double fRec38[2]; - double fRec41[2]; - double fRec40[2]; - double fConst13; - double fRec34[2]; - double fRec43[2]; - double fVec3[2]; - double fRec42[2]; - double fRec33[2]; - FAUSTFLOAT fbargraph16; - double fRec44[2]; - FAUSTFLOAT fbargraph17; - double fRec45[2]; - FAUSTFLOAT fbargraph18; - double fRec46[2]; - FAUSTFLOAT fbargraph19; - double fRec47[2]; - FAUSTFLOAT fbargraph20; - double fRec48[2]; - FAUSTFLOAT fbargraph21; - double fRec49[2]; - FAUSTFLOAT fbargraph22; - double fRec50[2]; - FAUSTFLOAT fbargraph23; - double fRec51[2]; - FAUSTFLOAT fbargraph24; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - m->declare("name", "HOAEncoder4"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec6[2]; + FAUSTFLOAT fVbargraph2; + double fRec7[2]; + FAUSTFLOAT fVbargraph3; + double fConst4; + double fConst5; + double fRec11[2]; + double fRec12[2]; + double fRec10[2]; + double fRec9[2]; + double fVec0[2]; + double fRec13[2]; + double fRec8[2]; + FAUSTFLOAT fVbargraph4; + double fRec14[2]; + FAUSTFLOAT fVbargraph5; + double fRec15[2]; + FAUSTFLOAT fVbargraph6; + double fRec16[2]; + FAUSTFLOAT fVbargraph7; + double fRec17[2]; + FAUSTFLOAT fVbargraph8; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph9; + double fRec27[2]; + FAUSTFLOAT fVbargraph10; + double fRec28[2]; + FAUSTFLOAT fVbargraph11; + double fRec29[2]; + FAUSTFLOAT fVbargraph12; + double fRec30[2]; + FAUSTFLOAT fVbargraph13; + double fRec31[2]; + FAUSTFLOAT fVbargraph14; + double fRec32[2]; + FAUSTFLOAT fVbargraph15; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fVec2[2]; + double fRec40[2]; + double fRec41[2]; + double fRec42[2]; + double fRec35[2]; + double fRec34[2]; + double fVec3[2]; + double fRec43[2]; + double fRec33[2]; + FAUSTFLOAT fVbargraph16; + double fRec44[2]; + FAUSTFLOAT fVbargraph17; + double fRec45[2]; + FAUSTFLOAT fVbargraph18; + double fRec46[2]; + FAUSTFLOAT fVbargraph19; + double fRec47[2]; + FAUSTFLOAT fVbargraph20; + double fRec48[2]; + FAUSTFLOAT fVbargraph21; + double fRec49[2]; + FAUSTFLOAT fVbargraph22; + double fRec50[2]; + FAUSTFLOAT fVbargraph23; + double fRec51[2]; + FAUSTFLOAT fVbargraph24; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncoder4"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); - fConst6 = (789.5430205728705 / fConst0); - fConst7 = (394.7715102864353 / fConst0); - fConst8 = (625.2284897135664 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + fConst6 = (789.54302057287055 / fConst0); + fConst7 = (394.77151028643527 / fConst0); + fConst8 = (625.22848971356643 / fConst0); fConst9 = (1250.4569794271329 / fConst0); - fConst10 = (984.7116049589241 / fConst0); - fConst11 = (715.2883950410759 / fConst0); - fConst12 = (1430.5767900821518 / fConst0); - fConst13 = (1969.4232099178482 / fConst0); + fConst10 = (984.71160495892411 / fConst0); + fConst11 = (1969.4232099178482 / fConst0); + fConst12 = (715.28839504107589 / fConst0); + fConst13 = (1430.5767900821518 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider0 = 2.0; - fslider1 = 0.0; - fslider2 = 0.0; - fslider3 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider0 = FAUSTFLOAT(2.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec5[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec3[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec11[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec9[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fVec0[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec8[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec15[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec17[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec22[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec23[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec24[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fVec1[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec20[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec19[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec18[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec27[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec28[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec29[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec30[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec31[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec32[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec37[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec38[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fVec2[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec35[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec34[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fVec3[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec43[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec33[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec44[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec45[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec46[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec47[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec48[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec49[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec50[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec51[l55] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -814,485 +1173,483 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder4"); - ui_interface->openVerticalBox("Parameters"); - ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider3, "0+3", ""); - ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider2, "0+4", ""); - ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox0); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider0, "5", ""); + ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "6", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); + ui_interface->declare(0, "7", ""); ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6bd850", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fec390", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6c2c70", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ffe4e0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6c46e0", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30044b0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6c62f0", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x300a660", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6cc1a0", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3021cc0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6cde50", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3028190", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6cfce0", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x302ed10", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6d18c0", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3034a20", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6d3670", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x303b080", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6db4c0", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3058c30", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6dd160", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x305eb10", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6df1a0", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3065640", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6e1030", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x306ba10", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6e2d00", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3071ac0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6e4a30", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3077a70", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6e6930", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x307e160", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6f0380", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30a2790", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6f2030", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30a8750", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6f40c0", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30af360", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6f6060", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30b5a30", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6f8230", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30bc610", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6f9f90", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30c2880", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacb6fbda0", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30c8bd0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacdc01ba0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30cee20", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ffacdc03bc0", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30d5590", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - double fSlow1 = (1 - fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = double(fslider2); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fslider3); - double fSlow10 = sin(fSlow9); - double fSlow11 = (1.7320508075688772 * (fSlow8 * fSlow10)); - double fSlow12 = (fConst3 / fSlow4); - double fSlow13 = (fSlow12 + 1); - double fSlow14 = (fConst2 / (fSlow4 * fSlow13)); - double fSlow15 = (fConst3 / fSlow2); - double fSlow16 = (1.0 / (fSlow15 + 1)); - double fSlow17 = ((fSlow3 * fSlow13) / fSlow4); - double fSlow18 = (fConst2 / fSlow2); - double fSlow19 = sin(fSlow7); - double fSlow20 = (1.7320508075688772 * fSlow19); - double fSlow21 = cos(fSlow9); - double fSlow22 = (1.7320508075688772 * (fSlow8 * fSlow21)); - double fSlow23 = faustpower<2>(fSlow8); - double fSlow24 = (2 * fSlow9); - double fSlow25 = sin(fSlow24); - double fSlow26 = (1.9364916731037085 * (fSlow23 * fSlow25)); - double fSlow27 = faustpower<2>(fSlow15); - double fSlow28 = (1.0 / (((fConst4 / fSlow2) + (3 * fSlow27)) + 1)); - double fSlow29 = faustpower<2>(fSlow12); - double fSlow30 = (((fConst4 / fSlow4) + (3 * fSlow29)) + 1); - double fSlow31 = ((fSlow3 * fSlow30) / fSlow4); - double fSlow32 = (12 * fSlow27); - double fSlow33 = (fSlow32 + (fConst5 / fSlow2)); - double fSlow34 = (1.0 / fSlow30); - double fSlow35 = (12 * fSlow29); - double fSlow36 = ((fConst5 / fSlow4) + fSlow35); - double fSlow37 = sin((2 * fSlow7)); - double fSlow38 = (1.9364916731037085 * (fSlow37 * fSlow10)); - double fSlow39 = faustpower<2>(fSlow19); - double fSlow40 = (1.118033988749895 * ((3 * fSlow39) + -1)); - double fSlow41 = (1.9364916731037085 * (fSlow37 * fSlow21)); - double fSlow42 = cos(fSlow24); - double fSlow43 = (1.9364916731037085 * (fSlow23 * fSlow42)); - double fSlow44 = faustpower<3>(fSlow8); - double fSlow45 = (3 * fSlow9); - double fSlow46 = sin(fSlow45); - double fSlow47 = (2.091650066335189 * (fSlow44 * fSlow46)); - double fSlow48 = ((fConst7 / fSlow4) + 1); - double fSlow49 = (fConst6 / (fSlow4 * fSlow48)); - double fSlow50 = (1.0 / ((fConst7 / fSlow2) + 1)); - double fSlow51 = (1.0 / (((fConst8 / fSlow2) + (6.45943269348338 * fSlow27)) + 1)); - double fSlow52 = (((fConst8 / fSlow4) + (6.45943269348338 * fSlow29)) + 1); - double fSlow53 = ((fSlow3 * fSlow52) / fSlow4); - double fSlow54 = (25.83773077393352 * fSlow27); - double fSlow55 = (fSlow54 + (fConst9 / fSlow2)); - double fSlow56 = (1.0 / fSlow52); - double fSlow57 = (25.83773077393352 * fSlow29); - double fSlow58 = ((fConst9 / fSlow4) + fSlow57); - double fSlow59 = (fConst6 / fSlow2); - double fSlow60 = (fSlow23 * fSlow19); - double fSlow61 = (5.123475382979799 * (fSlow60 * fSlow25)); - double fSlow62 = (5 * fSlow39); - double fSlow63 = ((fSlow62 + -1) * fSlow8); - double fSlow64 = (1.620185174601965 * (fSlow63 * fSlow10)); - double fSlow65 = (1.3228756555322954 * ((fSlow62 + -3) * fSlow19)); - double fSlow66 = (1.620185174601965 * (fSlow63 * fSlow21)); - double fSlow67 = (5.123475382979799 * (fSlow60 * fSlow42)); - double fSlow68 = cos(fSlow45); - double fSlow69 = (2.091650066335189 * (fSlow44 * fSlow68)); - double fSlow70 = faustpower<4>(fSlow8); - double fSlow71 = (4 * fSlow9); - double fSlow72 = (2.218529918662356 * (fSlow70 * sin(fSlow71))); - double fSlow73 = (1.0 / (((fConst10 / fSlow2) + (9.1401308902779 * fSlow27)) + 1)); - double fSlow74 = (((9.1401308902779 * fSlow29) + (fConst10 / fSlow4)) + 1); - double fSlow75 = (1.0 / (((fConst11 / fSlow2) + (11.4878004768713 * fSlow27)) + 1)); - double fSlow76 = (((fConst11 / fSlow4) + (11.4878004768713 * fSlow29)) + 1); - double fSlow77 = ((fSlow3 * fSlow76) / fSlow4); - double fSlow78 = (45.9512019074852 * fSlow27); - double fSlow79 = (fSlow78 + (fConst12 / fSlow2)); - double fSlow80 = (1.0 / fSlow76); - double fSlow81 = (45.9512019074852 * fSlow29); - double fSlow82 = ((fConst12 / fSlow4) + fSlow81); - double fSlow83 = (36.5605235611116 * fSlow27); - double fSlow84 = (fSlow83 + (fConst13 / fSlow2)); - double fSlow85 = (1.0 / fSlow74); - double fSlow86 = (36.5605235611116 * fSlow29); - double fSlow87 = ((fConst13 / fSlow4) + fSlow86); - double fSlow88 = (fSlow44 * fSlow19); - double fSlow89 = (6.274950199005566 * (fSlow88 * fSlow46)); - double fSlow90 = (7 * fSlow39); - double fSlow91 = ((fSlow90 + -1) * fSlow23); - double fSlow92 = (1.6770509831248424 * (fSlow91 * fSlow25)); - double fSlow93 = ((fSlow90 + -3) * fSlow37); - double fSlow94 = (1.1858541225631423 * (fSlow93 * fSlow10)); - double fSlow95 = (0.375 * ((((35 * fSlow39) + -30) * fSlow39) + 3)); - double fSlow96 = (1.1858541225631423 * (fSlow93 * fSlow21)); - double fSlow97 = (1.6770509831248424 * (fSlow91 * fSlow42)); - double fSlow98 = (6.274950199005566 * (fSlow88 * fSlow68)); - double fSlow99 = (2.218529918662356 * (fSlow70 * cos(fSlow71))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAEncoder5" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -47,6 +30,11 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -78,6 +66,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -85,6 +75,19 @@ template <> inline double faustpower<2>(double x) { return x*x; } class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -103,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -138,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -205,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -575,311 +601,770 @@ class ControlAllocator : public UI #define FAUSTFLOAT float #endif +#include + +double pow(double dummy0, double dummy1); +double fabs(double dummy0); +double log10(double dummy0); +double sin(double dummy0); +double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} +double mydsp_faustpower4_f(double value) { + return (((value * value) * value) * value); + +} +double mydsp_faustpower5_f(double value) { + return ((((value * value) * value) * value) * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - double fConst0; - double fConst1; - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fentry0; - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - double fRec1[2]; - double fRec0[2]; - FAUSTFLOAT fbargraph0; - FAUSTFLOAT fslider2; - FAUSTFLOAT fslider3; - double fConst2; - double fConst3; - double fRec5[2]; - double fRec4[2]; - double fRec3[2]; - double fRec2[2]; - FAUSTFLOAT fbargraph1; - double fRec6[2]; - FAUSTFLOAT fbargraph2; - double fRec7[2]; - FAUSTFLOAT fbargraph3; - double fConst4; - double fRec11[2]; - double fRec10[2]; - double fConst5; - double fRec9[2]; - double fRec13[2]; - double fVec0[2]; - double fRec12[2]; - double fRec8[2]; - FAUSTFLOAT fbargraph4; - double fRec14[2]; - FAUSTFLOAT fbargraph5; - double fRec15[2]; - FAUSTFLOAT fbargraph6; - double fRec16[2]; - FAUSTFLOAT fbargraph7; - double fRec17[2]; - FAUSTFLOAT fbargraph8; - double fConst6; - double fConst7; - double fConst8; - double fRec23[2]; - double fRec22[2]; - double fConst9; - double fRec21[2]; - double fRec25[2]; - double fVec1[2]; - double fRec24[2]; - double fRec26[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; - FAUSTFLOAT fbargraph9; - double fRec27[2]; - FAUSTFLOAT fbargraph10; - double fRec28[2]; - FAUSTFLOAT fbargraph11; - double fRec29[2]; - FAUSTFLOAT fbargraph12; - double fRec30[2]; - FAUSTFLOAT fbargraph13; - double fRec31[2]; - FAUSTFLOAT fbargraph14; - double fRec32[2]; - FAUSTFLOAT fbargraph15; - double fConst10; - double fConst11; - double fRec37[2]; - double fRec36[2]; - double fConst12; - double fRec35[2]; - double fRec39[2]; - double fVec2[2]; - double fRec38[2]; - double fRec41[2]; - double fRec40[2]; - double fConst13; - double fRec34[2]; - double fRec43[2]; - double fVec3[2]; - double fRec42[2]; - double fRec33[2]; - FAUSTFLOAT fbargraph16; - double fRec44[2]; - FAUSTFLOAT fbargraph17; - double fRec45[2]; - FAUSTFLOAT fbargraph18; - double fRec46[2]; - FAUSTFLOAT fbargraph19; - double fRec47[2]; - FAUSTFLOAT fbargraph20; - double fRec48[2]; - FAUSTFLOAT fbargraph21; - double fRec49[2]; - FAUSTFLOAT fbargraph22; - double fRec50[2]; - FAUSTFLOAT fbargraph23; - double fRec51[2]; - FAUSTFLOAT fbargraph24; - double fConst14; - double fConst15; - double fConst16; - double fConst17; - double fRec58[2]; - double fRec57[2]; - double fConst18; - double fRec56[2]; - double fRec60[2]; - double fVec4[2]; - double fRec59[2]; - double fRec62[2]; - double fRec61[2]; - double fConst19; - double fRec55[2]; - double fRec64[2]; - double fVec5[2]; - double fRec63[2]; - double fRec65[2]; - double fRec54[2]; - double fRec53[2]; - double fRec52[2]; - FAUSTFLOAT fbargraph25; - double fRec66[2]; - FAUSTFLOAT fbargraph26; - double fRec67[2]; - FAUSTFLOAT fbargraph27; - double fRec68[2]; - FAUSTFLOAT fbargraph28; - double fRec69[2]; - FAUSTFLOAT fbargraph29; - double fRec70[2]; - FAUSTFLOAT fbargraph30; - double fRec71[2]; - FAUSTFLOAT fbargraph31; - double fRec72[2]; - FAUSTFLOAT fbargraph32; - double fRec73[2]; - FAUSTFLOAT fbargraph33; - double fRec74[2]; - FAUSTFLOAT fbargraph34; - double fRec75[2]; - FAUSTFLOAT fbargraph35; + + private: + int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAEncoder5"); - m->declare("version", "1.0"); + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + double fRec1[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; + double fConst2; + double fConst3; + double fRec5[2]; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec6[2]; + FAUSTFLOAT fVbargraph2; + double fRec7[2]; + FAUSTFLOAT fVbargraph3; + double fConst4; + double fConst5; + double fRec11[2]; + double fRec12[2]; + double fRec10[2]; + double fRec9[2]; + double fVec0[2]; + double fRec13[2]; + double fRec8[2]; + FAUSTFLOAT fVbargraph4; + double fRec14[2]; + FAUSTFLOAT fVbargraph5; + double fRec15[2]; + FAUSTFLOAT fVbargraph6; + double fRec16[2]; + FAUSTFLOAT fVbargraph7; + double fRec17[2]; + FAUSTFLOAT fVbargraph8; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; + FAUSTFLOAT fVbargraph9; + double fRec27[2]; + FAUSTFLOAT fVbargraph10; + double fRec28[2]; + FAUSTFLOAT fVbargraph11; + double fRec29[2]; + FAUSTFLOAT fVbargraph12; + double fRec30[2]; + FAUSTFLOAT fVbargraph13; + double fRec31[2]; + FAUSTFLOAT fVbargraph14; + double fRec32[2]; + FAUSTFLOAT fVbargraph15; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fVec2[2]; + double fRec40[2]; + double fRec41[2]; + double fRec42[2]; + double fRec35[2]; + double fRec34[2]; + double fVec3[2]; + double fRec43[2]; + double fRec33[2]; + FAUSTFLOAT fVbargraph16; + double fRec44[2]; + FAUSTFLOAT fVbargraph17; + double fRec45[2]; + FAUSTFLOAT fVbargraph18; + double fRec46[2]; + FAUSTFLOAT fVbargraph19; + double fRec47[2]; + FAUSTFLOAT fVbargraph20; + double fRec48[2]; + FAUSTFLOAT fVbargraph21; + double fRec49[2]; + FAUSTFLOAT fVbargraph22; + double fRec50[2]; + FAUSTFLOAT fVbargraph23; + double fRec51[2]; + FAUSTFLOAT fVbargraph24; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fRec57[2]; + double fRec58[2]; + double fRec56[2]; + double fRec59[2]; + double fVec4[2]; + double fRec60[2]; + double fConst19; + double fRec61[2]; + double fRec62[2]; + double fRec55[2]; + double fRec63[2]; + double fVec5[2]; + double fRec64[2]; + double fRec65[2]; + double fRec54[2]; + double fRec53[2]; + double fRec52[2]; + FAUSTFLOAT fVbargraph25; + double fRec66[2]; + FAUSTFLOAT fVbargraph26; + double fRec67[2]; + FAUSTFLOAT fVbargraph27; + double fRec68[2]; + FAUSTFLOAT fVbargraph28; + double fRec69[2]; + FAUSTFLOAT fVbargraph29; + double fRec70[2]; + FAUSTFLOAT fVbargraph30; + double fRec71[2]; + FAUSTFLOAT fVbargraph31; + double fRec72[2]; + FAUSTFLOAT fVbargraph32; + double fRec73[2]; + FAUSTFLOAT fVbargraph33; + double fRec74[2]; + FAUSTFLOAT fVbargraph34; + double fRec75[2]; + FAUSTFLOAT fVbargraph35; + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/license", "GPL"); m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAEncoder5"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 1; } - virtual int getNumOutputs() { return 36; } + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 36; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(1.92e+05, max(1e+03, (double)fSamplingFreq)); - fConst1 = (8e+01 / fConst0); - fConst2 = (3.4e+02 / fConst0); - fConst3 = (1.7e+02 / fConst0); - fConst4 = (5.1e+02 / fConst0); - fConst5 = (1.02e+03 / fConst0); - fConst6 = (789.5430205728705 / fConst0); - fConst7 = (394.7715102864353 / fConst0); - fConst8 = (625.2284897135664 / fConst0); + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + fConst6 = (789.54302057287055 / fConst0); + fConst7 = (394.77151028643527 / fConst0); + fConst8 = (625.22848971356643 / fConst0); fConst9 = (1250.4569794271329 / fConst0); - fConst10 = (984.7116049589241 / fConst0); - fConst11 = (715.2883950410759 / fConst0); - fConst12 = (1430.5767900821518 / fConst0); - fConst13 = (1969.4232099178482 / fConst0); + fConst10 = (984.71160495892411 / fConst0); + fConst11 = (1969.4232099178482 / fConst0); + fConst12 = (715.28839504107589 / fConst0); + fConst13 = (1430.5767900821518 / fConst0); fConst14 = (1239.8911224120607 / fConst0); - fConst15 = (619.9455612060303 / fConst0); + fConst15 = (619.94556120603033 / fConst0); fConst16 = (1139.6651757122002 / fConst0); fConst17 = (790.3892630817644 / fConst0); fConst18 = (1580.7785261635288 / fConst0); fConst19 = (2279.3303514244003 / fConst0); + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fentry0 = 1.07; - fslider0 = 2.0; - fslider1 = 0.0; - fslider2 = 0.0; - fslider3 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fVslider0 = FAUSTFLOAT(2.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<2; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; - for (int i=0; i<2; i++) fRec22[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec25[i] = 0; - for (int i=0; i<2; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec24[i] = 0; - for (int i=0; i<2; i++) fRec26[i] = 0; - for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<2; i++) fRec27[i] = 0; - for (int i=0; i<2; i++) fRec28[i] = 0; - for (int i=0; i<2; i++) fRec29[i] = 0; - for (int i=0; i<2; i++) fRec30[i] = 0; - for (int i=0; i<2; i++) fRec31[i] = 0; - for (int i=0; i<2; i++) fRec32[i] = 0; - for (int i=0; i<2; i++) fRec37[i] = 0; - for (int i=0; i<2; i++) fRec36[i] = 0; - for (int i=0; i<2; i++) fRec35[i] = 0; - for (int i=0; i<2; i++) fRec39[i] = 0; - for (int i=0; i<2; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec38[i] = 0; - for (int i=0; i<2; i++) fRec41[i] = 0; - for (int i=0; i<2; i++) fRec40[i] = 0; - for (int i=0; i<2; i++) fRec34[i] = 0; - for (int i=0; i<2; i++) fRec43[i] = 0; - for (int i=0; i<2; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec42[i] = 0; - for (int i=0; i<2; i++) fRec33[i] = 0; - for (int i=0; i<2; i++) fRec44[i] = 0; - for (int i=0; i<2; i++) fRec45[i] = 0; - for (int i=0; i<2; i++) fRec46[i] = 0; - for (int i=0; i<2; i++) fRec47[i] = 0; - for (int i=0; i<2; i++) fRec48[i] = 0; - for (int i=0; i<2; i++) fRec49[i] = 0; - for (int i=0; i<2; i++) fRec50[i] = 0; - for (int i=0; i<2; i++) fRec51[i] = 0; - for (int i=0; i<2; i++) fRec58[i] = 0; - for (int i=0; i<2; i++) fRec57[i] = 0; - for (int i=0; i<2; i++) fRec56[i] = 0; - for (int i=0; i<2; i++) fRec60[i] = 0; - for (int i=0; i<2; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec59[i] = 0; - for (int i=0; i<2; i++) fRec62[i] = 0; - for (int i=0; i<2; i++) fRec61[i] = 0; - for (int i=0; i<2; i++) fRec55[i] = 0; - for (int i=0; i<2; i++) fRec64[i] = 0; - for (int i=0; i<2; i++) fVec5[i] = 0; - for (int i=0; i<2; i++) fRec63[i] = 0; - for (int i=0; i<2; i++) fRec65[i] = 0; - for (int i=0; i<2; i++) fRec54[i] = 0; - for (int i=0; i<2; i++) fRec53[i] = 0; - for (int i=0; i<2; i++) fRec52[i] = 0; - for (int i=0; i<2; i++) fRec66[i] = 0; - for (int i=0; i<2; i++) fRec67[i] = 0; - for (int i=0; i<2; i++) fRec68[i] = 0; - for (int i=0; i<2; i++) fRec69[i] = 0; - for (int i=0; i<2; i++) fRec70[i] = 0; - for (int i=0; i<2; i++) fRec71[i] = 0; - for (int i=0; i<2; i++) fRec72[i] = 0; - for (int i=0; i<2; i++) fRec73[i] = 0; - for (int i=0; i<2; i++) fRec74[i] = 0; - for (int i=0; i<2; i++) fRec75[i] = 0; + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec5[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec4[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec3[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec2[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec11[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec9[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fVec0[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec8[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec15[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec17[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec22[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec23[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec24[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fVec1[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec26[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec20[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec19[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec18[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec27[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec28[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec29[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec30[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec31[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec32[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec37[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec38[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fVec2[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec35[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec34[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fVec3[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec43[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec33[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec44[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec45[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec46[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec47[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec48[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec49[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec50[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec51[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec58[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec56[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec59[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fVec4[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec60[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec61[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec62[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec55[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec63[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fVec5[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec64[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec65[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec54[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec53[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec52[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec66[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec67[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec68[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec69[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec70[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec71[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec72[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec73[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec74[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec75[l81] = 0.0; + + } + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -889,678 +1374,667 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder5"); - ui_interface->openVerticalBox("Parameters"); - ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fslider1, "0+1", ""); - ui_interface->declare(&fslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fslider1, 0.0, -2e+01, 2e+01, 0.1); - ui_interface->declare(&fslider0, "0+2", ""); - ui_interface->declare(&fslider0, "osc", "/radius_0 0.5 50"); - ui_interface->declare(&fslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fslider0, 2.0, 0.5, 5e+01, 0.01); - ui_interface->declare(&fslider3, "0+3", ""); - ui_interface->declare(&fslider3, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fslider3, 0.0, -3.141592653589793, 3.141592653589793, 0.1); - ui_interface->declare(&fslider2, "0+4", ""); - ui_interface->declare(&fslider2, "osc", "/elevation_0 -90 90"); - ui_interface->declare(&fslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.1); - ui_interface->declare(0, "0+5", ""); - ui_interface->openHorizontalBox("Spherical Wave"); - ui_interface->addCheckButton("Yes", &fcheckbox0); - ui_interface->closeBox(); - ui_interface->declare(&fentry0, "~", ""); - ui_interface->addNumEntry("Speaker Radius 0", &fentry0, 1.07, 0.5, 1e+01, 0.01); + ui_interface->declare(0, "0", ""); + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider0, "5", ""); + ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "6", ""); + ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); - ui_interface->declare(0, "~", ""); + ui_interface->declare(0, "7", ""); ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d906a360", &fbargraph0, -7e+01, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e6a6e0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d906f810", &fbargraph1, -7e+01, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e7c830", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d9071280", &fbargraph2, -7e+01, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e82800", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d9072f20", &fbargraph3, -7e+01, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e889b0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d9078e60", &fbargraph4, -7e+01, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ea0010", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d907aba0", &fbargraph5, -7e+01, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ea64e0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d907cb10", &fbargraph6, -7e+01, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ead270", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d907e720", &fbargraph7, -7e+01, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2eb2f80", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d9080570", &fbargraph8, -7e+01, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2eb95e0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d9088470", &fbargraph9, -7e+01, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ed73b0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d908a1f0", &fbargraph10, -7e+01, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2edd290", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d908c160", &fbargraph11, -7e+01, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ee3dc0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d908dfa0", &fbargraph12, -7e+01, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2eea190", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d908fc70", &fbargraph13, -7e+01, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ef0240", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d9091a80", &fbargraph14, -7e+01, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ef6200", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90939f0", &fbargraph15, -7e+01, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2efcb00", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d909d4b0", &fbargraph16, -7e+01, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f21340", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d909f160", &fbargraph17, -7e+01, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f27300", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90a1140", &fbargraph18, -7e+01, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f2df10", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90a2fe0", &fbargraph19, -7e+01, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f345e0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90a51b0", &fbargraph20, -7e+01, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f3b1c0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90a6f10", &fbargraph21, -7e+01, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f41430", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90a8d20", &fbargraph22, -7e+01, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f47780", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90aaba0", &fbargraph23, -7e+01, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f4d9d0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90acc00", &fbargraph24, -7e+01, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f54360", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90b8890", &fbargraph25, -7e+01, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f80530", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90ba5f0", &fbargraph26, -7e+01, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f865d0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90bc4f0", &fbargraph27, -7e+01, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f8d0b0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90be2a0", &fbargraph28, -7e+01, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f935f0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90c05d0", &fbargraph29, -7e+01, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f9a880", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90c2a90", &fbargraph30, -7e+01, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fa19d0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90c48b0", &fbargraph31, -7e+01, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fa7e00", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90c67a0", &fbargraph32, -7e+01, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fae4f0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90c8700", &fbargraph33, -7e+01, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fb4ae0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90ca6d0", &fbargraph34, -7e+01, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fbafd0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fe6d90cc840", &fbargraph35, -7e+01, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fc19e0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fcheckbox0); - double fSlow1 = (1 - fSlow0); - double fSlow2 = double(fentry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - double fSlow7 = double(fslider2); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fslider3); - double fSlow10 = sin(fSlow9); - double fSlow11 = (fSlow8 * fSlow10); - double fSlow12 = (1.7320508075688772 * fSlow11); - double fSlow13 = (fConst3 / fSlow4); - double fSlow14 = (fSlow13 + 1); - double fSlow15 = (fConst2 / (fSlow4 * fSlow14)); - double fSlow16 = (fConst3 / fSlow2); - double fSlow17 = (1.0 / (fSlow16 + 1)); - double fSlow18 = ((fSlow3 * fSlow14) / fSlow4); - double fSlow19 = (fConst2 / fSlow2); - double fSlow20 = sin(fSlow7); - double fSlow21 = (1.7320508075688772 * fSlow20); - double fSlow22 = cos(fSlow9); - double fSlow23 = (fSlow8 * fSlow22); - double fSlow24 = (1.7320508075688772 * fSlow23); - double fSlow25 = faustpower<2>(fSlow8); - double fSlow26 = (2 * fSlow9); - double fSlow27 = sin(fSlow26); - double fSlow28 = (fSlow25 * fSlow27); - double fSlow29 = (1.9364916731037085 * fSlow28); - double fSlow30 = faustpower<2>(fSlow16); - double fSlow31 = (1.0 / (((fConst4 / fSlow2) + (3 * fSlow30)) + 1)); - double fSlow32 = faustpower<2>(fSlow13); - double fSlow33 = (((fConst4 / fSlow4) + (3 * fSlow32)) + 1); - double fSlow34 = ((fSlow3 * fSlow33) / fSlow4); - double fSlow35 = (12 * fSlow30); - double fSlow36 = (fSlow35 + (fConst5 / fSlow2)); - double fSlow37 = (1.0 / fSlow33); - double fSlow38 = (12 * fSlow32); - double fSlow39 = ((fConst5 / fSlow4) + fSlow38); - double fSlow40 = sin((2 * fSlow7)); - double fSlow41 = (fSlow40 * fSlow10); - double fSlow42 = (1.9364916731037085 * fSlow41); - double fSlow43 = faustpower<2>(fSlow20); - double fSlow44 = ((3 * fSlow43) + -1); - double fSlow45 = (1.118033988749895 * fSlow44); - double fSlow46 = (fSlow40 * fSlow22); - double fSlow47 = (1.9364916731037085 * fSlow46); - double fSlow48 = cos(fSlow26); - double fSlow49 = (fSlow25 * fSlow48); - double fSlow50 = (1.9364916731037085 * fSlow49); - double fSlow51 = faustpower<3>(fSlow8); - double fSlow52 = (3 * fSlow9); - double fSlow53 = sin(fSlow52); - double fSlow54 = (fSlow51 * fSlow53); - double fSlow55 = (2.091650066335189 * fSlow54); - double fSlow56 = ((fConst7 / fSlow4) + 1); - double fSlow57 = (fConst6 / (fSlow4 * fSlow56)); - double fSlow58 = (1.0 / ((fConst7 / fSlow2) + 1)); - double fSlow59 = (1.0 / (((fConst8 / fSlow2) + (6.45943269348338 * fSlow30)) + 1)); - double fSlow60 = (((fConst8 / fSlow4) + (6.45943269348338 * fSlow32)) + 1); - double fSlow61 = ((fSlow3 * fSlow60) / fSlow4); - double fSlow62 = (25.83773077393352 * fSlow30); - double fSlow63 = (fSlow62 + (fConst9 / fSlow2)); - double fSlow64 = (1.0 / fSlow60); - double fSlow65 = (25.83773077393352 * fSlow32); - double fSlow66 = ((fConst9 / fSlow4) + fSlow65); - double fSlow67 = (fConst6 / fSlow2); - double fSlow68 = (fSlow25 * fSlow20); - double fSlow69 = (fSlow68 * fSlow27); - double fSlow70 = (5.123475382979799 * fSlow69); - double fSlow71 = (5 * fSlow43); - double fSlow72 = (fSlow71 + -1); - double fSlow73 = (1.620185174601965 * (fSlow11 * fSlow72)); - double fSlow74 = (1.3228756555322954 * (fSlow20 * (fSlow71 + -3))); - double fSlow75 = (1.620185174601965 * (fSlow23 * fSlow72)); - double fSlow76 = (fSlow68 * fSlow48); - double fSlow77 = (5.123475382979799 * fSlow76); - double fSlow78 = cos(fSlow52); - double fSlow79 = (fSlow51 * fSlow78); - double fSlow80 = (2.091650066335189 * fSlow79); - double fSlow81 = faustpower<4>(fSlow8); - double fSlow82 = (4 * fSlow9); - double fSlow83 = sin(fSlow82); - double fSlow84 = (2.218529918662356 * (fSlow81 * fSlow83)); - double fSlow85 = (1.0 / (((fConst10 / fSlow2) + (9.1401308902779 * fSlow30)) + 1)); - double fSlow86 = (((9.1401308902779 * fSlow32) + (fConst10 / fSlow4)) + 1); - double fSlow87 = (1.0 / (((fConst11 / fSlow2) + (11.4878004768713 * fSlow30)) + 1)); - double fSlow88 = (((fConst11 / fSlow4) + (11.4878004768713 * fSlow32)) + 1); - double fSlow89 = ((fSlow3 * fSlow88) / fSlow4); - double fSlow90 = (45.9512019074852 * fSlow30); - double fSlow91 = (fSlow90 + (fConst12 / fSlow2)); - double fSlow92 = (1.0 / fSlow88); - double fSlow93 = (45.9512019074852 * fSlow32); - double fSlow94 = ((fConst12 / fSlow4) + fSlow93); - double fSlow95 = (36.5605235611116 * fSlow30); - double fSlow96 = (fSlow95 + (fConst13 / fSlow2)); - double fSlow97 = (1.0 / fSlow86); - double fSlow98 = (36.5605235611116 * fSlow32); - double fSlow99 = ((fConst13 / fSlow4) + fSlow98); - double fSlow100 = (fSlow51 * fSlow20); - double fSlow101 = (6.274950199005566 * (fSlow100 * fSlow53)); - double fSlow102 = (7 * fSlow43); - double fSlow103 = (fSlow102 + -1); - double fSlow104 = (1.6770509831248424 * (fSlow28 * fSlow103)); - double fSlow105 = (fSlow102 + -3); - double fSlow106 = (1.1858541225631423 * (fSlow41 * fSlow105)); - double fSlow107 = (0.375 * ((fSlow43 * ((35 * fSlow43) + -30)) + 3)); - double fSlow108 = (1.1858541225631423 * (fSlow46 * fSlow105)); - double fSlow109 = (1.6770509831248424 * (fSlow49 * fSlow103)); - double fSlow110 = (6.274950199005566 * (fSlow100 * fSlow78)); - double fSlow111 = cos(fSlow82); - double fSlow112 = (2.218529918662356 * (fSlow81 * fSlow111)); - double fSlow113 = faustpower<5>(fSlow8); - double fSlow114 = (5 * fSlow9); - double fSlow115 = (2.3268138086232857 * (fSlow113 * sin(fSlow114))); - double fSlow116 = ((fConst15 / fSlow4) + 1); - double fSlow117 = (fConst14 / (fSlow4 * fSlow116)); - double fSlow118 = (1.0 / ((fConst15 / fSlow2) + 1)); - double fSlow119 = (1.0 / (((fConst16 / fSlow2) + (14.2724805132801 * fSlow30)) + 1)); - double fSlow120 = (((14.2724805132801 * fSlow32) + (fConst16 / fSlow4)) + 1); - double fSlow121 = (1.0 / (((fConst17 / fSlow2) + (18.1563153134523 * fSlow30)) + 1)); - double fSlow122 = (((fConst17 / fSlow4) + (18.1563153134523 * fSlow32)) + 1); - double fSlow123 = ((fSlow3 * fSlow122) / fSlow4); - double fSlow124 = (72.6252612538092 * fSlow30); - double fSlow125 = (fSlow124 + (fConst18 / fSlow2)); - double fSlow126 = (1.0 / fSlow122); - double fSlow127 = (72.6252612538092 * fSlow32); - double fSlow128 = ((fConst18 / fSlow4) + fSlow127); - double fSlow129 = (57.0899220531204 * fSlow30); - double fSlow130 = (fSlow129 + (fConst19 / fSlow2)); - double fSlow131 = (1.0 / fSlow120); - double fSlow132 = (57.0899220531204 * fSlow32); - double fSlow133 = ((fConst19 / fSlow4) + fSlow132); - double fSlow134 = (fConst14 / fSlow2); - double fSlow135 = (fSlow81 * fSlow20); - double fSlow136 = (7.358031326380718 * (fSlow135 * fSlow83)); - double fSlow137 = ((9 * fSlow43) + -1); - double fSlow138 = (1.734304615688951 * (fSlow54 * fSlow137)); - double fSlow139 = (8.496322733983215 * (fSlow69 * fSlow44)); - double fSlow140 = ((fSlow43 * ((21 * fSlow43) + -14)) + 1); - double fSlow141 = (1.6056540723331412 * (fSlow11 * fSlow140)); - double fSlow142 = (0.414578098794425 * (fSlow20 * ((fSlow43 * ((63 * fSlow43) + -70)) + 15))); - double fSlow143 = (1.6056540723331412 * (fSlow23 * fSlow140)); - double fSlow144 = (8.496322733983215 * (fSlow76 * fSlow44)); - double fSlow145 = (1.734304615688951 * (fSlow79 * fSlow137)); - double fSlow146 = (7.358031326380718 * (fSlow135 * fSlow111)); - double fSlow147 = (2.3268138086232857 * (fSlow113 * cos(fSlow114))); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,42 +602,117 @@ class ControlAllocator : public UI #endif + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fcheckbox2; + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAMirror1"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror1"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fcheckbox2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -608,58 +722,66 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOA scene mirroring"); - ui_interface->addCheckButton("front-back", &fcheckbox0); - ui_interface->addCheckButton("left-right", &fcheckbox1); - ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = (double(fcheckbox0) == 1); - int iSlow1 = int((iSlow0 & 0)); - int iSlow2 = (double(fcheckbox1) == 1); - int iSlow3 = int((iSlow2 & 0)); - int iSlow4 = (double(fcheckbox2) == 1); - int iSlow5 = int((iSlow4 & 0)); - int iSlow6 = int((iSlow2 & 1)); - int iSlow7 = int((iSlow4 & 1)); - int iSlow8 = int((iSlow0 & 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,42 +602,157 @@ class ControlAllocator : public UI #endif + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fcheckbox2; + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAMirror2"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror2"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fcheckbox2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -608,88 +762,96 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOA scene mirroring"); - ui_interface->addCheckButton("front-back", &fcheckbox0); - ui_interface->addCheckButton("left-right", &fcheckbox1); - ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = (double(fcheckbox0) == 1); - int iSlow1 = int((iSlow0 & 0)); - int iSlow2 = (double(fcheckbox1) == 1); - int iSlow3 = int((iSlow2 & 0)); - int iSlow4 = (double(fcheckbox2) == 1); - int iSlow5 = int((iSlow4 & 0)); - int iSlow6 = int((iSlow2 & 1)); - int iSlow7 = int((iSlow4 & 1)); - int iSlow8 = int((iSlow0 & 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,42 +602,213 @@ class ControlAllocator : public UI #endif + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fcheckbox2; + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAMirror3"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror3"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fcheckbox2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -608,130 +818,138 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOA scene mirroring"); - ui_interface->addCheckButton("front-back", &fcheckbox0); - ui_interface->addCheckButton("left-right", &fcheckbox1); - ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = (double(fcheckbox0) == 1); - int iSlow1 = int((iSlow0 & 0)); - int iSlow2 = (double(fcheckbox1) == 1); - int iSlow3 = int((iSlow2 & 0)); - int iSlow4 = (double(fcheckbox2) == 1); - int iSlow5 = int((iSlow4 & 0)); - int iSlow6 = int((iSlow2 & 1)); - int iSlow7 = int((iSlow4 & 1)); - int iSlow8 = int((iSlow0 & 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,42 +602,285 @@ class ControlAllocator : public UI #endif + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fcheckbox2; + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAMirror4"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror4"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 25; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fcheckbox2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -608,184 +890,192 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOA scene mirroring"); - ui_interface->addCheckButton("front-back", &fcheckbox0); - ui_interface->addCheckButton("left-right", &fcheckbox1); - ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = (double(fcheckbox0) == 1); - int iSlow1 = int((iSlow0 & 0)); - int iSlow2 = (double(fcheckbox1) == 1); - int iSlow3 = int((iSlow2 & 0)); - int iSlow4 = (double(fcheckbox2) == 1); - int iSlow5 = int((iSlow4 & 0)); - int iSlow6 = int((iSlow2 & 1)); - int iSlow7 = int((iSlow4 & 1)); - int iSlow8 = int((iSlow0 & 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - for (int i=0; i #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,42 +602,373 @@ class ControlAllocator : public UI #endif + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fcheckbox0; - FAUSTFLOAT fcheckbox1; - FAUSTFLOAT fcheckbox2; + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAMirror5"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror5"); + m->declare("version", "1.0"); } - virtual int getNumInputs() { return 36; } - virtual int getNumOutputs() { return 36; } + virtual int getNumInputs() { + return 36; + + } + virtual int getNumOutputs() { + return 36; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fcheckbox0 = 0.0; - fcheckbox1 = 0.0; - fcheckbox2 = 0.0; + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -608,250 +978,258 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOA scene mirroring"); - ui_interface->addCheckButton("front-back", &fcheckbox0); - ui_interface->addCheckButton("left-right", &fcheckbox1); - ui_interface->addCheckButton("up-down", &fcheckbox2); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - int iSlow0 = (double(fcheckbox0) == 1); - int iSlow1 = int((iSlow0 & 0)); - int iSlow2 = (double(fcheckbox1) == 1); - int iSlow3 = int((iSlow2 & 0)); - int iSlow4 = (double(fcheckbox2) == 1); - int iSlow5 = int((iSlow4 & 0)); - int iSlow6 = int((iSlow2 & 1)); - int iSlow7 = int((iSlow4 & 1)); - int iSlow8 = int((iSlow0 & 1)); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - for (int i=0; i +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double cos(double dummy0); +double sin(double dummy0); +double fabs(double dummy0); +double log10(double dummy0); + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + FAUSTFLOAT fCheckbox2; + double fConst2; + double fConst3; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + double fRec6[2]; + double fRec5[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec7[2]; + FAUSTFLOAT fVbargraph1; + double fRec8[2]; + FAUSTFLOAT fVbargraph2; + double fRec9[2]; + FAUSTFLOAT fVbargraph3; + double fRec10[2]; + FAUSTFLOAT fVbargraph4; + double fRec11[2]; + FAUSTFLOAT fVbargraph5; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev061"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 6; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec0[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev061"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox1); + ui_interface->addCheckButton("1", &fCheckbox2); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23cfa60", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23d53d0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23db530", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e1770", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e7a90", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23ed6a0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fHslider0); + double fSlow2 = (1.0 - fSlow0); + double fSlow3 = double(fEntry0); + double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = double(fHslider2); + double fSlow7 = cos(fSlow6); + double fSlow8 = double(fHslider3); + double fSlow9 = cos(fSlow8); + double fSlow10 = (6.123233995736766e-17 * (fSlow7 * fSlow9)); + double fSlow11 = sin(fSlow8); + double fSlow12 = (1.0 - double(fCheckbox2)); + double fSlow13 = (3.0 * ((fSlow10 + fSlow11) * fSlow12)); + double fSlow14 = ((fConst3 / fSlow1) + 1.0); + double fSlow15 = (fConst2 / (fSlow14 * fSlow1)); + double fSlow16 = (1.0 / ((fConst3 / fSlow3) + 1.0)); + double fSlow17 = (((fSlow14 * fSlow0) * fSlow3) / fSlow1); + double fSlow18 = (fConst2 / fSlow3); + double fSlow19 = (fSlow2 * fSlow3); + double fSlow20 = (3.0 * ((fSlow7 * fSlow12) * fSlow9)); + double fSlow21 = (3.0 * ((cos((fSlow6 + -1.5707963267948966)) * fSlow12) * fSlow9)); + double fSlow22 = (3.0 * ((cos((fSlow6 + -3.1415926535897931)) * fSlow12) * fSlow9)); + double fSlow23 = (3.0 * ((cos((fSlow6 + -4.7123889803846897)) * fSlow12) * fSlow9)); + double fSlow24 = (3.0 * ((fSlow10 - fSlow11) * fSlow12)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); + fRec4[0] = (fRec4[1] + fRec3[1]); + fRec3[0] = (fSlow16 * ((fSlow17 * fTemp0) - (fSlow18 * fRec4[0]))); + fRec2[0] = (fRec3[0] + fRec2[1]); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow16 * ((fSlow19 * fTemp0) - (fSlow18 * fRec6[0]))); + double fTemp2 = ((fSlow15 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + double fTemp3 = (0.16666666666666666 * (fTemp1 + (fSlow13 * fTemp2))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = (0.16666666666666666 * (fTemp1 + (fSlow20 * fTemp2))); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph1 = FAUSTFLOAT(fRec7[0]); + output1[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (0.16666666666666666 * (fTemp1 + (fSlow21 * fTemp2))); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec8[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (0.16666666666666666 * (fTemp1 + (fSlow22 * fTemp2))); + fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec9[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = (0.16666666666666666 * (fTemp1 + (fSlow23 * fTemp2))); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph4 = FAUSTFLOAT(fRec10[0]); + output4[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = (0.16666666666666666 * (fTemp1 + (fSlow24 * fTemp2))); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph5 = FAUSTFLOAT(fRec11[0]); + output5[i] = FAUSTFLOAT(fTemp8); + fRec1[1] = fRec1[0]; + fRec4[1] = fRec4[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec0[1] = fRec0[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev261.cpp b/source/HOAUGens/HOAPanLebedev261.cpp new file mode 100755 index 0000000000..6e66f2ba42 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev261.cpp @@ -0,0 +1,1791 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAPanLebedev261" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double cos(double dummy0); +double sin(double dummy0); +double fabs(double dummy0); +double log10(double dummy0); + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + FAUSTFLOAT fCheckbox2; + double fConst2; + double fConst3; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + double fRec6[2]; + double fRec5[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec7[2]; + FAUSTFLOAT fVbargraph1; + double fRec8[2]; + FAUSTFLOAT fVbargraph2; + double fRec9[2]; + FAUSTFLOAT fVbargraph3; + double fRec10[2]; + FAUSTFLOAT fVbargraph4; + double fRec11[2]; + FAUSTFLOAT fVbargraph5; + double fRec12[2]; + FAUSTFLOAT fVbargraph6; + double fRec13[2]; + FAUSTFLOAT fVbargraph7; + double fRec14[2]; + FAUSTFLOAT fVbargraph8; + double fRec15[2]; + FAUSTFLOAT fVbargraph9; + double fRec16[2]; + FAUSTFLOAT fVbargraph10; + double fRec17[2]; + FAUSTFLOAT fVbargraph11; + double fRec18[2]; + FAUSTFLOAT fVbargraph12; + double fRec19[2]; + FAUSTFLOAT fVbargraph13; + double fRec20[2]; + FAUSTFLOAT fVbargraph14; + double fRec21[2]; + FAUSTFLOAT fVbargraph15; + double fRec22[2]; + FAUSTFLOAT fVbargraph16; + double fRec23[2]; + FAUSTFLOAT fVbargraph17; + double fRec24[2]; + FAUSTFLOAT fVbargraph18; + double fRec25[2]; + FAUSTFLOAT fVbargraph19; + double fRec26[2]; + FAUSTFLOAT fVbargraph20; + double fRec27[2]; + FAUSTFLOAT fVbargraph21; + double fRec28[2]; + FAUSTFLOAT fVbargraph22; + double fRec29[2]; + FAUSTFLOAT fVbargraph23; + double fRec30[2]; + FAUSTFLOAT fVbargraph24; + double fRec31[2]; + FAUSTFLOAT fVbargraph25; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev261"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 26; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec0[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec12[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec14[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec18[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec20[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec22[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec23[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec24[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec25[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec26[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec27[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev261"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox1); + ui_interface->addCheckButton("1", &fCheckbox2); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b831f0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b88b60", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b8eee0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b95340", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b9b880", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ba1490", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ba7ed0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bae270", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bb46f0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bbac50", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bc16d0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bc8230", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bcee70", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bd5b90", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bdbf80", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2be2450", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2be8a00", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bef090", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bf6730", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bfd550", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c04450", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c0b430", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c11f20", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c18af0", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c1f7a0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c26530", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fHslider0); + double fSlow2 = (1.0 - fSlow0); + double fSlow3 = double(fEntry0); + double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = double(fHslider2); + double fSlow7 = cos(fSlow6); + double fSlow8 = double(fHslider3); + double fSlow9 = cos(fSlow8); + double fSlow10 = (fSlow7 * fSlow9); + double fSlow11 = (6.123233995736766e-17 * fSlow10); + double fSlow12 = sin(fSlow8); + double fSlow13 = (1.0 - double(fCheckbox2)); + double fSlow14 = (3.0 * ((fSlow11 + fSlow12) * fSlow13)); + double fSlow15 = ((fConst3 / fSlow1) + 1.0); + double fSlow16 = (fConst2 / (fSlow15 * fSlow1)); + double fSlow17 = (1.0 / ((fConst3 / fSlow3) + 1.0)); + double fSlow18 = (((fSlow15 * fSlow0) * fSlow3) / fSlow1); + double fSlow19 = (fConst2 / fSlow3); + double fSlow20 = (fSlow2 * fSlow3); + double fSlow21 = (3.0 * ((fSlow7 * fSlow13) * fSlow9)); + double fSlow22 = cos((fSlow6 + -1.5707963267948966)); + double fSlow23 = (3.0 * ((fSlow22 * fSlow13) * fSlow9)); + double fSlow24 = cos((fSlow6 + -3.1415926535897931)); + double fSlow25 = (3.0 * ((fSlow24 * fSlow13) * fSlow9)); + double fSlow26 = cos((fSlow6 + -4.7123889803846897)); + double fSlow27 = (3.0 * ((fSlow26 * fSlow13) * fSlow9)); + double fSlow28 = (3.0 * ((fSlow11 - fSlow12) * fSlow13)); + double fSlow29 = (0.70710678118654757 * fSlow10); + double fSlow30 = (0.70710678118654746 * fSlow12); + double fSlow31 = (3.0 * ((fSlow29 + fSlow30) * fSlow13)); + double fSlow32 = (0.70710678118654757 * (fSlow22 * fSlow9)); + double fSlow33 = (3.0 * ((fSlow30 + fSlow32) * fSlow13)); + double fSlow34 = (0.70710678118654757 * (fSlow24 * fSlow9)); + double fSlow35 = (3.0 * ((fSlow30 + fSlow34) * fSlow13)); + double fSlow36 = (0.70710678118654757 * (fSlow26 * fSlow9)); + double fSlow37 = (3.0 * ((fSlow30 + fSlow36) * fSlow13)); + double fSlow38 = cos((fSlow6 + -0.78539816339744828)); + double fSlow39 = (3.0 * ((fSlow38 * fSlow13) * fSlow9)); + double fSlow40 = cos((fSlow6 + -2.3561944901923448)); + double fSlow41 = (3.0 * ((fSlow40 * fSlow13) * fSlow9)); + double fSlow42 = cos((fSlow6 + -3.9269908169872414)); + double fSlow43 = (3.0 * ((fSlow42 * fSlow13) * fSlow9)); + double fSlow44 = cos((fSlow6 + -5.497787143782138)); + double fSlow45 = (3.0 * ((fSlow44 * fSlow13) * fSlow9)); + double fSlow46 = (3.0 * ((fSlow29 - fSlow30) * fSlow13)); + double fSlow47 = (3.0 * ((fSlow32 - fSlow30) * fSlow13)); + double fSlow48 = (3.0 * ((fSlow34 - fSlow30) * fSlow13)); + double fSlow49 = (3.0 * ((fSlow36 - fSlow30) * fSlow13)); + double fSlow50 = (0.81649658092772592 * (fSlow38 * fSlow9)); + double fSlow51 = (0.57735026918962584 * fSlow12); + double fSlow52 = (3.0 * ((fSlow50 + fSlow51) * fSlow13)); + double fSlow53 = (0.81649658092772592 * (fSlow40 * fSlow9)); + double fSlow54 = (3.0 * ((fSlow51 + fSlow53) * fSlow13)); + double fSlow55 = (0.81649658092772592 * (fSlow42 * fSlow9)); + double fSlow56 = (3.0 * ((fSlow51 + fSlow55) * fSlow13)); + double fSlow57 = (0.81649658092772592 * (fSlow44 * fSlow9)); + double fSlow58 = (3.0 * ((fSlow51 + fSlow57) * fSlow13)); + double fSlow59 = (3.0 * ((fSlow50 - fSlow51) * fSlow13)); + double fSlow60 = (3.0 * ((fSlow53 - fSlow51) * fSlow13)); + double fSlow61 = (3.0 * ((fSlow55 - fSlow51) * fSlow13)); + double fSlow62 = (3.0 * ((fSlow57 - fSlow51) * fSlow13)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); + fRec4[0] = (fRec4[1] + fRec3[1]); + fRec3[0] = (fSlow17 * ((fSlow18 * fTemp0) - (fSlow19 * fRec4[0]))); + fRec2[0] = (fRec3[0] + fRec2[1]); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow17 * ((fSlow20 * fTemp0) - (fSlow19 * fRec6[0]))); + double fTemp2 = ((fSlow16 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + double fTemp3 = (0.047619047619047623 * (fTemp1 + (fSlow14 * fTemp2))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = (0.047619047619047623 * (fTemp1 + (fSlow21 * fTemp2))); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph1 = FAUSTFLOAT(fRec7[0]); + output1[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (0.047619047619047623 * (fTemp1 + (fSlow23 * fTemp2))); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec8[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (0.047619047619047623 * (fTemp1 + (fSlow25 * fTemp2))); + fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec9[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = (0.047619047619047623 * (fTemp1 + (fSlow27 * fTemp2))); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph4 = FAUSTFLOAT(fRec10[0]); + output4[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = (0.047619047619047623 * (fTemp1 + (fSlow28 * fTemp2))); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph5 = FAUSTFLOAT(fRec11[0]); + output5[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (0.038095238095238099 * (fTemp1 + (fSlow31 * fTemp2))); + fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph6 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (0.038095238095238099 * (fTemp1 + (fSlow33 * fTemp2))); + fRec13[0] = max((fRec13[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph7 = FAUSTFLOAT(fRec13[0]); + output7[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (0.038095238095238099 * (fTemp1 + (fSlow35 * fTemp2))); + fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph8 = FAUSTFLOAT(fRec14[0]); + output8[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.038095238095238099 * (fTemp1 + (fSlow37 * fTemp2))); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph9 = FAUSTFLOAT(fRec15[0]); + output9[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.038095238095238099 * (fTemp1 + (fSlow39 * fTemp2))); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph10 = FAUSTFLOAT(fRec16[0]); + output10[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.038095238095238099 * (fTemp1 + (fSlow41 * fTemp2))); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph11 = FAUSTFLOAT(fRec17[0]); + output11[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.038095238095238099 * (fTemp1 + (fSlow43 * fTemp2))); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph12 = FAUSTFLOAT(fRec18[0]); + output12[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.038095238095238099 * (fTemp1 + (fSlow45 * fTemp2))); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph13 = FAUSTFLOAT(fRec19[0]); + output13[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.038095238095238099 * (fTemp1 + (fSlow46 * fTemp2))); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph14 = FAUSTFLOAT(fRec20[0]); + output14[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.038095238095238099 * (fTemp1 + (fSlow47 * fTemp2))); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph15 = FAUSTFLOAT(fRec21[0]); + output15[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.038095238095238099 * (fTemp1 + (fSlow48 * fTemp2))); + fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph16 = FAUSTFLOAT(fRec22[0]); + output16[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.038095238095238099 * (fTemp1 + (fSlow49 * fTemp2))); + fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph17 = FAUSTFLOAT(fRec23[0]); + output17[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.03214285714285714 * (fTemp1 + (fSlow52 * fTemp2))); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph18 = FAUSTFLOAT(fRec24[0]); + output18[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.03214285714285714 * (fTemp1 + (fSlow54 * fTemp2))); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph19 = FAUSTFLOAT(fRec25[0]); + output19[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.03214285714285714 * (fTemp1 + (fSlow56 * fTemp2))); + fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph20 = FAUSTFLOAT(fRec26[0]); + output20[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.03214285714285714 * (fTemp1 + (fSlow58 * fTemp2))); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph21 = FAUSTFLOAT(fRec27[0]); + output21[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.03214285714285714 * (fTemp1 + (fSlow59 * fTemp2))); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph22 = FAUSTFLOAT(fRec28[0]); + output22[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.03214285714285714 * (fTemp1 + (fSlow60 * fTemp2))); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph23 = FAUSTFLOAT(fRec29[0]); + output23[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.03214285714285714 * (fTemp1 + (fSlow61 * fTemp2))); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph24 = FAUSTFLOAT(fRec30[0]); + output24[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.03214285714285714 * (fTemp1 + (fSlow62 * fTemp2))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph25 = FAUSTFLOAT(fRec31[0]); + output25[i] = FAUSTFLOAT(fTemp28); + fRec1[1] = fRec1[0]; + fRec4[1] = fRec4[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec0[1] = fRec0[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev262.cpp b/source/HOAUGens/HOAPanLebedev262.cpp new file mode 100755 index 0000000000..38bb76180f --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev262.cpp @@ -0,0 +1,1932 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAPanLebedev262" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double cos(double dummy0); +double sin(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double fabs(double dummy0); +double log10(double dummy0); + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + FAUSTFLOAT fCheckbox2; + double fConst2; + double fConst3; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + double fRec6[2]; + double fRec5[2]; + FAUSTFLOAT fCheckbox3; + double fConst4; + double fConst5; + double fRec9[2]; + double fRec10[2]; + double fRec8[2]; + double fRec7[2]; + double fVec0[2]; + double fRec11[2]; + double fRec13[2]; + double fRec14[2]; + double fRec12[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec15[2]; + FAUSTFLOAT fVbargraph1; + double fRec16[2]; + FAUSTFLOAT fVbargraph2; + double fRec17[2]; + FAUSTFLOAT fVbargraph3; + double fRec18[2]; + FAUSTFLOAT fVbargraph4; + double fRec19[2]; + FAUSTFLOAT fVbargraph5; + double fRec20[2]; + FAUSTFLOAT fVbargraph6; + double fRec21[2]; + FAUSTFLOAT fVbargraph7; + double fRec22[2]; + FAUSTFLOAT fVbargraph8; + double fRec23[2]; + FAUSTFLOAT fVbargraph9; + double fRec24[2]; + FAUSTFLOAT fVbargraph10; + double fRec25[2]; + FAUSTFLOAT fVbargraph11; + double fRec26[2]; + FAUSTFLOAT fVbargraph12; + double fRec27[2]; + FAUSTFLOAT fVbargraph13; + double fRec28[2]; + FAUSTFLOAT fVbargraph14; + double fRec29[2]; + FAUSTFLOAT fVbargraph15; + double fRec30[2]; + FAUSTFLOAT fVbargraph16; + double fRec31[2]; + FAUSTFLOAT fVbargraph17; + double fRec32[2]; + FAUSTFLOAT fVbargraph18; + double fRec33[2]; + FAUSTFLOAT fVbargraph19; + double fRec34[2]; + FAUSTFLOAT fVbargraph20; + double fRec35[2]; + FAUSTFLOAT fVbargraph21; + double fRec36[2]; + FAUSTFLOAT fVbargraph22; + double fRec37[2]; + FAUSTFLOAT fVbargraph23; + double fRec38[2]; + FAUSTFLOAT fVbargraph24; + double fRec39[2]; + FAUSTFLOAT fVbargraph25; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev262"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 26; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + fCheckbox3 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec10[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec7[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fVec0[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec12[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec0[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec15[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec17[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec19[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec21[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec23[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec25[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec27[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec29[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec31[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec33[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec35[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec37[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec39[l40] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev262"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox1); + ui_interface->addCheckButton("1", &fCheckbox2); + ui_interface->addCheckButton("2", &fCheckbox3); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x335c110", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3362f90", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x336ac10", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3372970", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x337a7b0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3381ae0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3389c40", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3391520", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3398ee0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33a0980", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33a8d00", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33b1160", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33b96a0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33c1cc0", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33c97d0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33d13c0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33d9090", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33e0e40", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33e9a20", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33f1d80", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33fa1c0", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34026e0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x340a8f0", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3412be0", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x341afb0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3423460", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fHslider0); + double fSlow2 = (1.0 - fSlow0); + double fSlow3 = double(fEntry0); + double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = double(fHslider2); + double fSlow7 = cos(fSlow6); + double fSlow8 = double(fHslider3); + double fSlow9 = cos(fSlow8); + double fSlow10 = (fSlow7 * fSlow9); + double fSlow11 = (6.123233995736766e-17 * fSlow10); + double fSlow12 = sin(fSlow8); + double fSlow13 = (fSlow11 + fSlow12); + double fSlow14 = (1.0 - double(fCheckbox2)); + double fSlow15 = (3.0 * (fSlow13 * fSlow14)); + double fSlow16 = (fConst3 / fSlow1); + double fSlow17 = (fSlow16 + 1.0); + double fSlow18 = (fConst2 / (fSlow17 * fSlow1)); + double fSlow19 = (fConst3 / fSlow3); + double fSlow20 = (1.0 / (fSlow19 + 1.0)); + double fSlow21 = (((fSlow17 * fSlow0) * fSlow3) / fSlow1); + double fSlow22 = (fConst2 / fSlow3); + double fSlow23 = (fSlow2 * fSlow3); + double fSlow24 = (1.0 - double(fCheckbox3)); + double fSlow25 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow13)) + -1.0) * fSlow24)); + double fSlow26 = mydsp_faustpower2_f(fSlow16); + double fSlow27 = (((fConst4 / fSlow1) + (3.0 * fSlow26)) + 1.0); + double fSlow28 = (1.0 / fSlow27); + double fSlow29 = (12.0 * fSlow26); + double fSlow30 = ((fConst5 / fSlow1) + fSlow29); + double fSlow31 = mydsp_faustpower2_f(fSlow19); + double fSlow32 = (1.0 / (((fConst4 / fSlow3) + (3.0 * fSlow31)) + 1.0)); + double fSlow33 = (((fSlow27 * fSlow0) * fSlow3) / fSlow1); + double fSlow34 = (12.0 * fSlow31); + double fSlow35 = (fSlow34 + (fConst5 / fSlow3)); + double fSlow36 = (3.0 * ((fSlow7 * fSlow14) * fSlow9)); + double fSlow37 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow10)) + -1.0) * fSlow24)); + double fSlow38 = cos((fSlow6 + -1.5707963267948966)); + double fSlow39 = (3.0 * ((fSlow38 * fSlow14) * fSlow9)); + double fSlow40 = (fSlow38 * fSlow9); + double fSlow41 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow40)) + -1.0) * fSlow24)); + double fSlow42 = cos((fSlow6 + -3.1415926535897931)); + double fSlow43 = (3.0 * ((fSlow42 * fSlow14) * fSlow9)); + double fSlow44 = (fSlow42 * fSlow9); + double fSlow45 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow44)) + -1.0) * fSlow24)); + double fSlow46 = cos((fSlow6 + -4.7123889803846897)); + double fSlow47 = (3.0 * ((fSlow46 * fSlow14) * fSlow9)); + double fSlow48 = (fSlow46 * fSlow9); + double fSlow49 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow48)) + -1.0) * fSlow24)); + double fSlow50 = (fSlow11 - fSlow12); + double fSlow51 = (3.0 * (fSlow50 * fSlow14)); + double fSlow52 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow50)) + -1.0) * fSlow24)); + double fSlow53 = (0.70710678118654757 * fSlow10); + double fSlow54 = (0.70710678118654746 * fSlow12); + double fSlow55 = (fSlow53 + fSlow54); + double fSlow56 = (3.0 * (fSlow55 * fSlow14)); + double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow55)) + -1.0) * fSlow24)); + double fSlow58 = (0.70710678118654757 * fSlow40); + double fSlow59 = (fSlow54 + fSlow58); + double fSlow60 = (3.0 * (fSlow59 * fSlow14)); + double fSlow61 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow59)) + -1.0) * fSlow24)); + double fSlow62 = (0.70710678118654757 * fSlow44); + double fSlow63 = (fSlow54 + fSlow62); + double fSlow64 = (3.0 * (fSlow63 * fSlow14)); + double fSlow65 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow63)) + -1.0) * fSlow24)); + double fSlow66 = (0.70710678118654757 * fSlow48); + double fSlow67 = (fSlow54 + fSlow66); + double fSlow68 = (3.0 * (fSlow67 * fSlow14)); + double fSlow69 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow67)) + -1.0) * fSlow24)); + double fSlow70 = cos((fSlow6 + -0.78539816339744828)); + double fSlow71 = (3.0 * ((fSlow70 * fSlow14) * fSlow9)); + double fSlow72 = (fSlow70 * fSlow9); + double fSlow73 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow72)) + -1.0) * fSlow24)); + double fSlow74 = cos((fSlow6 + -2.3561944901923448)); + double fSlow75 = (3.0 * ((fSlow74 * fSlow14) * fSlow9)); + double fSlow76 = (fSlow74 * fSlow9); + double fSlow77 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow76)) + -1.0) * fSlow24)); + double fSlow78 = cos((fSlow6 + -3.9269908169872414)); + double fSlow79 = (3.0 * ((fSlow78 * fSlow14) * fSlow9)); + double fSlow80 = (fSlow78 * fSlow9); + double fSlow81 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow80)) + -1.0) * fSlow24)); + double fSlow82 = cos((fSlow6 + -5.497787143782138)); + double fSlow83 = (3.0 * ((fSlow82 * fSlow14) * fSlow9)); + double fSlow84 = (fSlow82 * fSlow9); + double fSlow85 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow84)) + -1.0) * fSlow24)); + double fSlow86 = (fSlow53 - fSlow54); + double fSlow87 = (3.0 * (fSlow86 * fSlow14)); + double fSlow88 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow86)) + -1.0) * fSlow24)); + double fSlow89 = (fSlow58 - fSlow54); + double fSlow90 = (3.0 * (fSlow89 * fSlow14)); + double fSlow91 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow89)) + -1.0) * fSlow24)); + double fSlow92 = (fSlow62 - fSlow54); + double fSlow93 = (3.0 * (fSlow92 * fSlow14)); + double fSlow94 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow92)) + -1.0) * fSlow24)); + double fSlow95 = (fSlow66 - fSlow54); + double fSlow96 = (3.0 * (fSlow95 * fSlow14)); + double fSlow97 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow95)) + -1.0) * fSlow24)); + double fSlow98 = (0.81649658092772592 * fSlow72); + double fSlow99 = (0.57735026918962584 * fSlow12); + double fSlow100 = (fSlow98 + fSlow99); + double fSlow101 = (3.0 * (fSlow100 * fSlow14)); + double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow100)) + -1.0) * fSlow24)); + double fSlow103 = (0.81649658092772592 * fSlow76); + double fSlow104 = (fSlow99 + fSlow103); + double fSlow105 = (3.0 * (fSlow104 * fSlow14)); + double fSlow106 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow104)) + -1.0) * fSlow24)); + double fSlow107 = (0.81649658092772592 * fSlow80); + double fSlow108 = (fSlow99 + fSlow107); + double fSlow109 = (3.0 * (fSlow108 * fSlow14)); + double fSlow110 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow108)) + -1.0) * fSlow24)); + double fSlow111 = (0.81649658092772592 * fSlow84); + double fSlow112 = (fSlow99 + fSlow111); + double fSlow113 = (3.0 * (fSlow112 * fSlow14)); + double fSlow114 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow112)) + -1.0) * fSlow24)); + double fSlow115 = (fSlow98 - fSlow99); + double fSlow116 = (3.0 * (fSlow115 * fSlow14)); + double fSlow117 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow115)) + -1.0) * fSlow24)); + double fSlow118 = (fSlow103 - fSlow99); + double fSlow119 = (3.0 * (fSlow118 * fSlow14)); + double fSlow120 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow118)) + -1.0) * fSlow24)); + double fSlow121 = (fSlow107 - fSlow99); + double fSlow122 = (3.0 * (fSlow121 * fSlow14)); + double fSlow123 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow121)) + -1.0) * fSlow24)); + double fSlow124 = (fSlow111 - fSlow99); + double fSlow125 = (3.0 * (fSlow124 * fSlow14)); + double fSlow126 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow124)) + -1.0) * fSlow24)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); + fRec4[0] = (fRec4[1] + fRec3[1]); + fRec3[0] = (fSlow20 * ((fSlow21 * fTemp0) - (fSlow22 * fRec4[0]))); + fRec2[0] = (fRec3[0] + fRec2[1]); + double fTemp2 = (fSlow23 * fTemp0); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow20 * (fTemp2 - (fSlow22 * fRec6[0]))); + double fTemp3 = ((fSlow18 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + fRec9[0] = (fRec9[1] + fRec8[1]); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec8[0] = (fSlow32 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec9[0]) + (fSlow34 * fRec10[0])))); + fRec7[0] = (fRec8[0] + fRec7[1]); + double fTemp4 = (fRec7[0] - fRec8[0]); + fVec0[0] = fTemp4; + fRec11[0] = (fRec11[1] + fVec0[1]); + fRec13[0] = (fRec13[1] + fRec12[1]); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec12[0] = (fSlow32 * (fTemp2 - ((fSlow35 * fRec13[0]) + (fSlow34 * fRec14[0])))); + double fTemp5 = ((fSlow28 * ((fSlow30 * fTemp4) + (fSlow29 * fRec11[0]))) + (fRec8[0] + fRec12[0])); + double fTemp6 = (0.047619047619047623 * ((fTemp1 + (fSlow15 * fTemp3)) + (fSlow25 * fTemp5))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = (0.047619047619047623 * ((fTemp1 + (fSlow36 * fTemp3)) + (fSlow37 * fTemp5))); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph1 = FAUSTFLOAT(fRec15[0]); + output1[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = (0.047619047619047623 * ((fTemp1 + (fSlow39 * fTemp3)) + (fSlow41 * fTemp5))); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph2 = FAUSTFLOAT(fRec16[0]); + output2[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (0.047619047619047623 * ((fTemp1 + (fSlow43 * fTemp3)) + (fSlow45 * fTemp5))); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph3 = FAUSTFLOAT(fRec17[0]); + output3[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (0.047619047619047623 * ((fTemp1 + (fSlow47 * fTemp3)) + (fSlow49 * fTemp5))); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph4 = FAUSTFLOAT(fRec18[0]); + output4[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (0.047619047619047623 * ((fTemp1 + (fSlow51 * fTemp3)) + (fSlow52 * fTemp5))); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph5 = FAUSTFLOAT(fRec19[0]); + output5[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.038095238095238099 * ((fTemp1 + (fSlow56 * fTemp3)) + (fSlow57 * fTemp5))); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph6 = FAUSTFLOAT(fRec20[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.038095238095238099 * ((fTemp1 + (fSlow60 * fTemp3)) + (fSlow61 * fTemp5))); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph7 = FAUSTFLOAT(fRec21[0]); + output7[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.038095238095238099 * ((fTemp1 + (fSlow64 * fTemp3)) + (fSlow65 * fTemp5))); + fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph8 = FAUSTFLOAT(fRec22[0]); + output8[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.038095238095238099 * ((fTemp1 + (fSlow68 * fTemp3)) + (fSlow69 * fTemp5))); + fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph9 = FAUSTFLOAT(fRec23[0]); + output9[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.038095238095238099 * ((fTemp1 + (fSlow71 * fTemp3)) + (fSlow73 * fTemp5))); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph10 = FAUSTFLOAT(fRec24[0]); + output10[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.038095238095238099 * ((fTemp1 + (fSlow75 * fTemp3)) + (fSlow77 * fTemp5))); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph11 = FAUSTFLOAT(fRec25[0]); + output11[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.038095238095238099 * ((fTemp1 + (fSlow79 * fTemp3)) + (fSlow81 * fTemp5))); + fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph12 = FAUSTFLOAT(fRec26[0]); + output12[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.038095238095238099 * ((fTemp1 + (fSlow83 * fTemp3)) + (fSlow85 * fTemp5))); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph13 = FAUSTFLOAT(fRec27[0]); + output13[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.038095238095238099 * ((fTemp1 + (fSlow87 * fTemp3)) + (fSlow88 * fTemp5))); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph14 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.038095238095238099 * ((fTemp1 + (fSlow90 * fTemp3)) + (fSlow91 * fTemp5))); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph15 = FAUSTFLOAT(fRec29[0]); + output15[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.038095238095238099 * ((fTemp1 + (fSlow93 * fTemp3)) + (fSlow94 * fTemp5))); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph16 = FAUSTFLOAT(fRec30[0]); + output16[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.038095238095238099 * ((fTemp1 + (fSlow96 * fTemp3)) + (fSlow97 * fTemp5))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph17 = FAUSTFLOAT(fRec31[0]); + output17[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.03214285714285714 * ((fTemp1 + (fSlow101 * fTemp3)) + (fSlow102 * fTemp5))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph18 = FAUSTFLOAT(fRec32[0]); + output18[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.03214285714285714 * ((fTemp1 + (fSlow105 * fTemp3)) + (fSlow106 * fTemp5))); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph19 = FAUSTFLOAT(fRec33[0]); + output19[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.03214285714285714 * ((fTemp1 + (fSlow109 * fTemp3)) + (fSlow110 * fTemp5))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph20 = FAUSTFLOAT(fRec34[0]); + output20[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.03214285714285714 * ((fTemp1 + (fSlow113 * fTemp3)) + (fSlow114 * fTemp5))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph21 = FAUSTFLOAT(fRec35[0]); + output21[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.03214285714285714 * ((fTemp1 + (fSlow116 * fTemp3)) + (fSlow117 * fTemp5))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph22 = FAUSTFLOAT(fRec36[0]); + output22[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.03214285714285714 * ((fTemp1 + (fSlow119 * fTemp3)) + (fSlow120 * fTemp5))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph23 = FAUSTFLOAT(fRec37[0]); + output23[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.03214285714285714 * ((fTemp1 + (fSlow122 * fTemp3)) + (fSlow123 * fTemp5))); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph24 = FAUSTFLOAT(fRec38[0]); + output24[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.03214285714285714 * ((fTemp1 + (fSlow125 * fTemp3)) + (fSlow126 * fTemp5))); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph25 = FAUSTFLOAT(fRec39[0]); + output25[i] = FAUSTFLOAT(fTemp31); + fRec1[1] = fRec1[0]; + fRec4[1] = fRec4[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec8[1] = fRec8[0]; + fRec7[1] = fRec7[0]; + fVec0[1] = fVec0[0]; + fRec11[1] = fRec11[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec0[1] = fRec0[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec39[1] = fRec39[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev263.cpp b/source/HOAUGens/HOAPanLebedev263.cpp new file mode 100755 index 0000000000..b561b7b3a4 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev263.cpp @@ -0,0 +1,2088 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAPanLebedev263" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double cos(double dummy0); +double sin(double dummy0); +double pow(double dummy0, double dummy1); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fCheckbox0; + double fConst2; + double fConst3; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider3; + double fRec3[2]; + double fRec4[2]; + double fRec2[2]; + double fRec1[2]; + double fRec6[2]; + double fRec5[2]; + FAUSTFLOAT fCheckbox2; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fRec10[2]; + double fRec11[2]; + double fRec9[2]; + double fRec12[2]; + double fVec0[2]; + double fRec13[2]; + double fRec14[2]; + double fRec8[2]; + double fRec7[2]; + double fRec17[2]; + double fRec18[2]; + double fRec16[2]; + double fRec19[2]; + double fRec15[2]; + FAUSTFLOAT fCheckbox3; + FAUSTFLOAT fCheckbox4; + double fConst8; + double fConst9; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec20[2]; + double fVec1[2]; + double fRec24[2]; + double fRec26[2]; + double fRec27[2]; + double fRec25[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec28[2]; + FAUSTFLOAT fVbargraph1; + double fRec29[2]; + FAUSTFLOAT fVbargraph2; + double fRec30[2]; + FAUSTFLOAT fVbargraph3; + double fRec31[2]; + FAUSTFLOAT fVbargraph4; + double fRec32[2]; + FAUSTFLOAT fVbargraph5; + double fRec33[2]; + FAUSTFLOAT fVbargraph6; + double fRec34[2]; + FAUSTFLOAT fVbargraph7; + double fRec35[2]; + FAUSTFLOAT fVbargraph8; + double fRec36[2]; + FAUSTFLOAT fVbargraph9; + double fRec37[2]; + FAUSTFLOAT fVbargraph10; + double fRec38[2]; + FAUSTFLOAT fVbargraph11; + double fRec39[2]; + FAUSTFLOAT fVbargraph12; + double fRec40[2]; + FAUSTFLOAT fVbargraph13; + double fRec41[2]; + FAUSTFLOAT fVbargraph14; + double fRec42[2]; + FAUSTFLOAT fVbargraph15; + double fRec43[2]; + FAUSTFLOAT fVbargraph16; + double fRec44[2]; + FAUSTFLOAT fVbargraph17; + double fRec45[2]; + FAUSTFLOAT fVbargraph18; + double fRec46[2]; + FAUSTFLOAT fVbargraph19; + double fRec47[2]; + FAUSTFLOAT fVbargraph20; + double fRec48[2]; + FAUSTFLOAT fVbargraph21; + double fRec49[2]; + FAUSTFLOAT fVbargraph22; + double fRec50[2]; + FAUSTFLOAT fVbargraph23; + double fRec51[2]; + FAUSTFLOAT fVbargraph24; + double fRec52[2]; + FAUSTFLOAT fVbargraph25; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev263"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 26; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (789.54302057287055 / fConst0); + fConst5 = (394.77151028643527 / fConst0); + fConst6 = (625.22848971356643 / fConst0); + fConst7 = (1250.4569794271329 / fConst0); + fConst8 = (510.0 / fConst0); + fConst9 = (1020.0 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + fCheckbox3 = FAUSTFLOAT(0.0); + fCheckbox4 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec3[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec1[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec10[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec11[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fVec0[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec13[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec14[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec8[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec7[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec17[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec18[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec15[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec22[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec23[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec21[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec20[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fVec1[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec26[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec27[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec25[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec0[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec28[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec29[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec30[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec31[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec32[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec33[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec34[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec35[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec36[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec37[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec38[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec39[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec40[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec41[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec42[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec43[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec44[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec45[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec46[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec47[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec48[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec49[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec50[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec51[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec52[l54] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev263"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider3, "0+1", ""); + ui_interface->declare(&fHslider3, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider3, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+2", ""); + ui_interface->declare(&fHslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider2, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider0, "0+3", ""); + ui_interface->declare(&fHslider0, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+4", ""); + ui_interface->declare(&fHslider1, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox1); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox3); + ui_interface->addCheckButton("1", &fCheckbox0); + ui_interface->addCheckButton("2", &fCheckbox4); + ui_interface->addCheckButton("3", &fCheckbox2); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x353e620", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3546d40", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35501f0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3559780", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3562df0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x356ab10", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3573660", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x357b930", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3583ce0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x358c180", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3595d30", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x359f9c0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35a9730", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35b3580", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35bba80", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35c4060", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35cc720", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35d4ec0", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35de490", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35e71e0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35f0010", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35f8f20", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3601b20", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x360a800", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36135c0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x361c460", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fHslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (6.123233995736766e-17 * fSlow4); + double fSlow6 = sin(fSlow2); + double fSlow7 = (fSlow5 + fSlow6); + double fSlow8 = (1.0 - double(fCheckbox0)); + double fSlow9 = (3.0 * fSlow8); + double fSlow10 = double(fHslider2); + double fSlow11 = (fConst3 / fSlow10); + double fSlow12 = (fSlow11 + 1.0); + double fSlow13 = (fConst2 / (fSlow12 * fSlow10)); + double fSlow14 = double(fEntry0); + double fSlow15 = (fConst3 / fSlow14); + double fSlow16 = (1.0 / (fSlow15 + 1.0)); + double fSlow17 = double(fCheckbox1); + double fSlow18 = (((fSlow12 * fSlow17) * fSlow14) / fSlow10); + double fSlow19 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider3)))); + double fSlow20 = (fConst2 / fSlow14); + double fSlow21 = (1.0 - fSlow17); + double fSlow22 = (fSlow21 * fSlow14); + double fSlow23 = mydsp_faustpower2_f(fSlow7); + double fSlow24 = (1.0 - double(fCheckbox2)); + double fSlow25 = (3.5 * (((5.0 * fSlow23) + -3.0) * fSlow24)); + double fSlow26 = ((fConst5 / fSlow10) + 1.0); + double fSlow27 = (fConst4 / (fSlow26 * fSlow10)); + double fSlow28 = (1.0 / ((fConst5 / fSlow14) + 1.0)); + double fSlow29 = mydsp_faustpower2_f(fSlow15); + double fSlow30 = (1.0 / (((fConst6 / fSlow14) + (6.4594326934833797 * fSlow29)) + 1.0)); + double fSlow31 = mydsp_faustpower2_f(fSlow11); + double fSlow32 = (((fConst6 / fSlow10) + (6.4594326934833797 * fSlow31)) + 1.0); + double fSlow33 = (((fSlow32 * fSlow17) * fSlow14) / fSlow10); + double fSlow34 = (25.837730773933519 * fSlow29); + double fSlow35 = (fSlow34 + (fConst7 / fSlow14)); + double fSlow36 = (1.0 / fSlow32); + double fSlow37 = (25.837730773933519 * fSlow31); + double fSlow38 = ((fConst7 / fSlow10) + fSlow37); + double fSlow39 = (fConst4 / fSlow14); + double fSlow40 = ((((fSlow17 / fSlow10) + fSlow21) * fSlow14) * (1.0 - double(fCheckbox3))); + double fSlow41 = (1.0 - double(fCheckbox4)); + double fSlow42 = (2.5 * (((3.0 * fSlow23) + -1.0) * fSlow41)); + double fSlow43 = (((fConst8 / fSlow10) + (3.0 * fSlow31)) + 1.0); + double fSlow44 = (1.0 / fSlow43); + double fSlow45 = (12.0 * fSlow31); + double fSlow46 = ((fConst9 / fSlow10) + fSlow45); + double fSlow47 = (1.0 / (((fConst8 / fSlow14) + (3.0 * fSlow29)) + 1.0)); + double fSlow48 = (((fSlow43 * fSlow17) * fSlow14) / fSlow10); + double fSlow49 = (12.0 * fSlow29); + double fSlow50 = (fSlow49 + (fConst9 / fSlow14)); + double fSlow51 = (3.0 * ((fSlow1 * fSlow8) * fSlow3)); + double fSlow52 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow4)) + -1.0) * fSlow41)); + double fSlow53 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow4)) - (3.0 * fSlow4)) * fSlow24)); + double fSlow54 = cos((fSlow0 + -1.5707963267948966)); + double fSlow55 = (3.0 * ((fSlow54 * fSlow8) * fSlow3)); + double fSlow56 = (fSlow54 * fSlow3); + double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow56)) + -1.0) * fSlow41)); + double fSlow58 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow56)) - (3.0 * fSlow56)) * fSlow24)); + double fSlow59 = cos((fSlow0 + -3.1415926535897931)); + double fSlow60 = (3.0 * ((fSlow59 * fSlow8) * fSlow3)); + double fSlow61 = (fSlow59 * fSlow3); + double fSlow62 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow61)) + -1.0) * fSlow41)); + double fSlow63 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow61)) - (3.0 * fSlow61)) * fSlow24)); + double fSlow64 = cos((fSlow0 + -4.7123889803846897)); + double fSlow65 = (3.0 * ((fSlow64 * fSlow8) * fSlow3)); + double fSlow66 = (fSlow64 * fSlow3); + double fSlow67 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow66)) + -1.0) * fSlow41)); + double fSlow68 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow66)) - (3.0 * fSlow66)) * fSlow24)); + double fSlow69 = (fSlow5 - fSlow6); + double fSlow70 = mydsp_faustpower2_f(fSlow69); + double fSlow71 = (3.5 * (((5.0 * fSlow70) + -3.0) * fSlow24)); + double fSlow72 = (2.5 * (((3.0 * fSlow70) + -1.0) * fSlow41)); + double fSlow73 = (0.70710678118654757 * fSlow4); + double fSlow74 = (0.70710678118654746 * fSlow6); + double fSlow75 = (fSlow73 + fSlow74); + double fSlow76 = mydsp_faustpower2_f(fSlow75); + double fSlow77 = (3.5 * (((5.0 * fSlow76) + -3.0) * fSlow24)); + double fSlow78 = (2.5 * (((3.0 * fSlow76) + -1.0) * fSlow41)); + double fSlow79 = (0.70710678118654757 * fSlow56); + double fSlow80 = (fSlow74 + fSlow79); + double fSlow81 = mydsp_faustpower2_f(fSlow80); + double fSlow82 = (3.5 * (((5.0 * fSlow81) + -3.0) * fSlow24)); + double fSlow83 = (2.5 * (((3.0 * fSlow81) + -1.0) * fSlow41)); + double fSlow84 = (0.70710678118654757 * fSlow61); + double fSlow85 = (fSlow74 + fSlow84); + double fSlow86 = mydsp_faustpower2_f(fSlow85); + double fSlow87 = (3.5 * (((5.0 * fSlow86) + -3.0) * fSlow24)); + double fSlow88 = (2.5 * (((3.0 * fSlow86) + -1.0) * fSlow41)); + double fSlow89 = (0.70710678118654757 * fSlow66); + double fSlow90 = (fSlow74 + fSlow89); + double fSlow91 = mydsp_faustpower2_f(fSlow90); + double fSlow92 = (3.5 * (((5.0 * fSlow91) + -3.0) * fSlow24)); + double fSlow93 = (2.5 * (((3.0 * fSlow91) + -1.0) * fSlow41)); + double fSlow94 = cos((fSlow0 + -0.78539816339744828)); + double fSlow95 = (3.0 * ((fSlow94 * fSlow8) * fSlow3)); + double fSlow96 = (fSlow94 * fSlow3); + double fSlow97 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow96)) + -1.0) * fSlow41)); + double fSlow98 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow96)) - (3.0 * fSlow96)) * fSlow24)); + double fSlow99 = cos((fSlow0 + -2.3561944901923448)); + double fSlow100 = (3.0 * ((fSlow99 * fSlow8) * fSlow3)); + double fSlow101 = (fSlow99 * fSlow3); + double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow101)) + -1.0) * fSlow41)); + double fSlow103 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow101)) - (3.0 * fSlow101)) * fSlow24)); + double fSlow104 = cos((fSlow0 + -3.9269908169872414)); + double fSlow105 = (3.0 * ((fSlow104 * fSlow8) * fSlow3)); + double fSlow106 = (fSlow104 * fSlow3); + double fSlow107 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow106)) + -1.0) * fSlow41)); + double fSlow108 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow106)) - (3.0 * fSlow106)) * fSlow24)); + double fSlow109 = cos((fSlow0 + -5.497787143782138)); + double fSlow110 = (3.0 * ((fSlow109 * fSlow8) * fSlow3)); + double fSlow111 = (fSlow109 * fSlow3); + double fSlow112 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow111)) + -1.0) * fSlow41)); + double fSlow113 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow111)) - (3.0 * fSlow111)) * fSlow24)); + double fSlow114 = (fSlow73 - fSlow74); + double fSlow115 = mydsp_faustpower2_f(fSlow114); + double fSlow116 = (3.5 * (((5.0 * fSlow115) + -3.0) * fSlow24)); + double fSlow117 = (2.5 * (((3.0 * fSlow115) + -1.0) * fSlow41)); + double fSlow118 = (fSlow79 - fSlow74); + double fSlow119 = mydsp_faustpower2_f(fSlow118); + double fSlow120 = (3.5 * (((5.0 * fSlow119) + -3.0) * fSlow24)); + double fSlow121 = (2.5 * (((3.0 * fSlow119) + -1.0) * fSlow41)); + double fSlow122 = (fSlow84 - fSlow74); + double fSlow123 = mydsp_faustpower2_f(fSlow122); + double fSlow124 = (3.5 * (((5.0 * fSlow123) + -3.0) * fSlow24)); + double fSlow125 = (2.5 * (((3.0 * fSlow123) + -1.0) * fSlow41)); + double fSlow126 = (fSlow89 - fSlow74); + double fSlow127 = mydsp_faustpower2_f(fSlow126); + double fSlow128 = (3.5 * (((5.0 * fSlow127) + -3.0) * fSlow24)); + double fSlow129 = (2.5 * (((3.0 * fSlow127) + -1.0) * fSlow41)); + double fSlow130 = (0.81649658092772592 * fSlow96); + double fSlow131 = (0.57735026918962584 * fSlow6); + double fSlow132 = (fSlow130 + fSlow131); + double fSlow133 = mydsp_faustpower2_f(fSlow132); + double fSlow134 = (3.5 * (((5.0 * fSlow133) + -3.0) * fSlow24)); + double fSlow135 = (2.5 * (((3.0 * fSlow133) + -1.0) * fSlow41)); + double fSlow136 = (0.81649658092772592 * fSlow101); + double fSlow137 = (fSlow131 + fSlow136); + double fSlow138 = mydsp_faustpower2_f(fSlow137); + double fSlow139 = (3.5 * (((5.0 * fSlow138) + -3.0) * fSlow24)); + double fSlow140 = (2.5 * (((3.0 * fSlow138) + -1.0) * fSlow41)); + double fSlow141 = (0.81649658092772592 * fSlow106); + double fSlow142 = (fSlow131 + fSlow141); + double fSlow143 = mydsp_faustpower2_f(fSlow142); + double fSlow144 = (3.5 * (((5.0 * fSlow143) + -3.0) * fSlow24)); + double fSlow145 = (2.5 * (((3.0 * fSlow143) + -1.0) * fSlow41)); + double fSlow146 = (0.81649658092772592 * fSlow111); + double fSlow147 = (fSlow131 + fSlow146); + double fSlow148 = mydsp_faustpower2_f(fSlow147); + double fSlow149 = (3.5 * (((5.0 * fSlow148) + -3.0) * fSlow24)); + double fSlow150 = (2.5 * (((3.0 * fSlow148) + -1.0) * fSlow41)); + double fSlow151 = (fSlow130 - fSlow131); + double fSlow152 = mydsp_faustpower2_f(fSlow151); + double fSlow153 = (3.5 * (((5.0 * fSlow152) + -3.0) * fSlow24)); + double fSlow154 = (2.5 * (((3.0 * fSlow152) + -1.0) * fSlow41)); + double fSlow155 = (fSlow136 - fSlow131); + double fSlow156 = mydsp_faustpower2_f(fSlow155); + double fSlow157 = (3.5 * (((5.0 * fSlow156) + -3.0) * fSlow24)); + double fSlow158 = (2.5 * (((3.0 * fSlow156) + -1.0) * fSlow41)); + double fSlow159 = (fSlow141 - fSlow131); + double fSlow160 = mydsp_faustpower2_f(fSlow159); + double fSlow161 = (3.5 * (((5.0 * fSlow160) + -3.0) * fSlow24)); + double fSlow162 = (2.5 * (((3.0 * fSlow160) + -1.0) * fSlow41)); + double fSlow163 = (fSlow146 - fSlow131); + double fSlow164 = mydsp_faustpower2_f(fSlow163); + double fSlow165 = (3.5 * (((5.0 * fSlow164) + -3.0) * fSlow24)); + double fSlow166 = (2.5 * (((3.0 * fSlow164) + -1.0) * fSlow41)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec3[0] = (fSlow19 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input0[i])); + fRec4[0] = (fRec4[1] + fRec2[1]); + fRec2[0] = (fSlow16 * ((fSlow18 * fTemp0) - (fSlow20 * fRec4[0]))); + fRec1[0] = (fRec2[0] + fRec1[1]); + double fTemp1 = (fSlow22 * fTemp0); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow16 * (fTemp1 - (fSlow20 * fRec6[0]))); + double fTemp2 = ((fSlow13 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0])); + double fTemp3 = (fSlow9 * fTemp2); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec11[0] = (fRec11[1] + fRec10[1]); + fRec9[0] = (fSlow30 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec10[0]) + (fSlow34 * fRec11[0])))); + fRec12[0] = (fRec9[0] + fRec12[1]); + double fTemp4 = (fRec12[0] - fRec9[0]); + fVec0[0] = fTemp4; + fRec13[0] = (fRec13[1] + fVec0[1]); + fRec14[0] = (fRec14[1] + fRec8[1]); + fRec8[0] = (fSlow28 * ((fSlow26 * (fRec9[0] + (fSlow36 * ((fSlow38 * fTemp4) + (fSlow37 * fRec13[0]))))) - (fSlow39 * fRec14[0]))); + fRec7[0] = (fRec8[0] + fRec7[1]); + fRec17[0] = (fRec17[1] + fRec16[1]); + fRec18[0] = (fRec18[1] + fRec17[1]); + fRec16[0] = (fSlow30 * (fTemp1 - ((fSlow35 * fRec17[0]) + (fSlow34 * fRec18[0])))); + fRec19[0] = (fRec19[1] + fRec15[1]); + fRec15[0] = (fSlow28 * (fRec16[0] - (fSlow39 * fRec19[0]))); + double fTemp5 = ((fSlow27 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); + double fTemp6 = (fSlow40 * fTemp0); + fRec22[0] = (fRec22[1] + fRec21[1]); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec21[0] = (fSlow47 * ((fSlow48 * fTemp0) - ((fSlow50 * fRec22[0]) + (fSlow49 * fRec23[0])))); + fRec20[0] = (fRec21[0] + fRec20[1]); + double fTemp7 = (fRec20[0] - fRec21[0]); + fVec1[0] = fTemp7; + fRec24[0] = (fRec24[1] + fVec1[1]); + fRec26[0] = (fRec26[1] + fRec25[1]); + fRec27[0] = (fRec27[1] + fRec26[1]); + fRec25[0] = (fSlow47 * (fTemp1 - ((fSlow50 * fRec26[0]) + (fSlow49 * fRec27[0])))); + double fTemp8 = ((fSlow44 * ((fSlow46 * fTemp7) + (fSlow45 * fRec24[0]))) + (fRec21[0] + fRec25[0])); + double fTemp9 = (0.047619047619047623 * ((fSlow7 * (fTemp3 + (fSlow25 * fTemp5))) + (fTemp6 + (fSlow42 * fTemp8)))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (0.047619047619047623 * (((fTemp6 + (fSlow51 * fTemp2)) + (fSlow52 * fTemp8)) + (fSlow53 * fTemp5))); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph1 = FAUSTFLOAT(fRec28[0]); + output1[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (0.047619047619047623 * (((fTemp6 + (fSlow55 * fTemp2)) + (fSlow57 * fTemp8)) + (fSlow58 * fTemp5))); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph2 = FAUSTFLOAT(fRec29[0]); + output2[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.047619047619047623 * (((fTemp6 + (fSlow60 * fTemp2)) + (fSlow62 * fTemp8)) + (fSlow63 * fTemp5))); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph3 = FAUSTFLOAT(fRec30[0]); + output3[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.047619047619047623 * (((fTemp6 + (fSlow65 * fTemp2)) + (fSlow67 * fTemp8)) + (fSlow68 * fTemp5))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph4 = FAUSTFLOAT(fRec31[0]); + output4[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.047619047619047623 * ((fSlow69 * (fTemp3 + (fSlow71 * fTemp5))) + (fTemp6 + (fSlow72 * fTemp8)))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph5 = FAUSTFLOAT(fRec32[0]); + output5[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.038095238095238099 * ((fSlow75 * (fTemp3 + (fSlow77 * fTemp5))) + (fTemp6 + (fSlow78 * fTemp8)))); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph6 = FAUSTFLOAT(fRec33[0]); + output6[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.038095238095238099 * ((fSlow80 * (fTemp3 + (fSlow82 * fTemp5))) + (fTemp6 + (fSlow83 * fTemp8)))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph7 = FAUSTFLOAT(fRec34[0]); + output7[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.038095238095238099 * ((fSlow85 * (fTemp3 + (fSlow87 * fTemp5))) + (fTemp6 + (fSlow88 * fTemp8)))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph8 = FAUSTFLOAT(fRec35[0]); + output8[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.038095238095238099 * ((fSlow90 * (fTemp3 + (fSlow92 * fTemp5))) + (fTemp6 + (fSlow93 * fTemp8)))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph9 = FAUSTFLOAT(fRec36[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.038095238095238099 * (((fTemp6 + (fSlow95 * fTemp2)) + (fSlow97 * fTemp8)) + (fSlow98 * fTemp5))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph10 = FAUSTFLOAT(fRec37[0]); + output10[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.038095238095238099 * (((fTemp6 + (fSlow100 * fTemp2)) + (fSlow102 * fTemp8)) + (fSlow103 * fTemp5))); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph11 = FAUSTFLOAT(fRec38[0]); + output11[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.038095238095238099 * (((fTemp6 + (fSlow105 * fTemp2)) + (fSlow107 * fTemp8)) + (fSlow108 * fTemp5))); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph12 = FAUSTFLOAT(fRec39[0]); + output12[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.038095238095238099 * (((fTemp6 + (fSlow110 * fTemp2)) + (fSlow112 * fTemp8)) + (fSlow113 * fTemp5))); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph13 = FAUSTFLOAT(fRec40[0]); + output13[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.038095238095238099 * ((fSlow114 * (fTemp3 + (fSlow116 * fTemp5))) + (fTemp6 + (fSlow117 * fTemp8)))); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph14 = FAUSTFLOAT(fRec41[0]); + output14[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.038095238095238099 * ((fSlow118 * (fTemp3 + (fSlow120 * fTemp5))) + (fTemp6 + (fSlow121 * fTemp8)))); + fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph15 = FAUSTFLOAT(fRec42[0]); + output15[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.038095238095238099 * ((fSlow122 * (fTemp3 + (fSlow124 * fTemp5))) + (fTemp6 + (fSlow125 * fTemp8)))); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph16 = FAUSTFLOAT(fRec43[0]); + output16[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.038095238095238099 * ((fSlow126 * (fTemp3 + (fSlow128 * fTemp5))) + (fTemp6 + (fSlow129 * fTemp8)))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph17 = FAUSTFLOAT(fRec44[0]); + output17[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.03214285714285714 * ((fSlow132 * (fTemp3 + (fSlow134 * fTemp5))) + (fTemp6 + (fSlow135 * fTemp8)))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph18 = FAUSTFLOAT(fRec45[0]); + output18[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.03214285714285714 * ((fSlow137 * (fTemp3 + (fSlow139 * fTemp5))) + (fTemp6 + (fSlow140 * fTemp8)))); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph19 = FAUSTFLOAT(fRec46[0]); + output19[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.03214285714285714 * ((fSlow142 * (fTemp3 + (fSlow144 * fTemp5))) + (fTemp6 + (fSlow145 * fTemp8)))); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph20 = FAUSTFLOAT(fRec47[0]); + output20[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.03214285714285714 * ((fSlow147 * (fTemp3 + (fSlow149 * fTemp5))) + (fTemp6 + (fSlow150 * fTemp8)))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph21 = FAUSTFLOAT(fRec48[0]); + output21[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.03214285714285714 * ((fSlow151 * (fTemp3 + (fSlow153 * fTemp5))) + (fTemp6 + (fSlow154 * fTemp8)))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph22 = FAUSTFLOAT(fRec49[0]); + output22[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.03214285714285714 * ((fSlow155 * (fTemp3 + (fSlow157 * fTemp5))) + (fTemp6 + (fSlow158 * fTemp8)))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph23 = FAUSTFLOAT(fRec50[0]); + output23[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.03214285714285714 * ((fSlow159 * (fTemp3 + (fSlow161 * fTemp5))) + (fTemp6 + (fSlow162 * fTemp8)))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph24 = FAUSTFLOAT(fRec51[0]); + output24[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.03214285714285714 * ((fSlow163 * (fTemp3 + (fSlow165 * fTemp5))) + (fTemp6 + (fSlow166 * fTemp8)))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph25 = FAUSTFLOAT(fRec52[0]); + output25[i] = FAUSTFLOAT(fTemp34); + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; + fRec1[1] = fRec1[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec9[1] = fRec9[0]; + fRec12[1] = fRec12[0]; + fVec0[1] = fVec0[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec8[1] = fRec8[0]; + fRec7[1] = fRec7[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec15[1] = fRec15[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fVec1[1] = fVec1[0]; + fRec24[1] = fRec24[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec25[1] = fRec25[0]; + fRec0[1] = fRec0[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec39[1] = fRec39[0]; + fRec40[1] = fRec40[0]; + fRec41[1] = fRec41[0]; + fRec42[1] = fRec42[0]; + fRec43[1] = fRec43[0]; + fRec44[1] = fRec44[0]; + fRec45[1] = fRec45[0]; + fRec46[1] = fRec46[0]; + fRec47[1] = fRec47[0]; + fRec48[1] = fRec48[0]; + fRec49[1] = fRec49[0]; + fRec50[1] = fRec50[0]; + fRec51[1] = fRec51[0]; + fRec52[1] = fRec52[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev501.cpp b/source/HOAUGens/HOAPanLebedev501.cpp new file mode 100755 index 0000000000..8ff7291c00 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev501.cpp @@ -0,0 +1,2342 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAPanLebedev501" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double cos(double dummy0); +double sin(double dummy0); +double fabs(double dummy0); +double log10(double dummy0); + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + FAUSTFLOAT fCheckbox2; + double fConst2; + double fConst3; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + double fRec6[2]; + double fRec5[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec7[2]; + FAUSTFLOAT fVbargraph1; + double fRec8[2]; + FAUSTFLOAT fVbargraph2; + double fRec9[2]; + FAUSTFLOAT fVbargraph3; + double fRec10[2]; + FAUSTFLOAT fVbargraph4; + double fRec11[2]; + FAUSTFLOAT fVbargraph5; + double fRec12[2]; + FAUSTFLOAT fVbargraph6; + double fRec13[2]; + FAUSTFLOAT fVbargraph7; + double fRec14[2]; + FAUSTFLOAT fVbargraph8; + double fRec15[2]; + FAUSTFLOAT fVbargraph9; + double fRec16[2]; + FAUSTFLOAT fVbargraph10; + double fRec17[2]; + FAUSTFLOAT fVbargraph11; + double fRec18[2]; + FAUSTFLOAT fVbargraph12; + double fRec19[2]; + FAUSTFLOAT fVbargraph13; + double fRec20[2]; + FAUSTFLOAT fVbargraph14; + double fRec21[2]; + FAUSTFLOAT fVbargraph15; + double fRec22[2]; + FAUSTFLOAT fVbargraph16; + double fRec23[2]; + FAUSTFLOAT fVbargraph17; + double fRec24[2]; + FAUSTFLOAT fVbargraph18; + double fRec25[2]; + FAUSTFLOAT fVbargraph19; + double fRec26[2]; + FAUSTFLOAT fVbargraph20; + double fRec27[2]; + FAUSTFLOAT fVbargraph21; + double fRec28[2]; + FAUSTFLOAT fVbargraph22; + double fRec29[2]; + FAUSTFLOAT fVbargraph23; + double fRec30[2]; + FAUSTFLOAT fVbargraph24; + double fRec31[2]; + FAUSTFLOAT fVbargraph25; + double fRec32[2]; + FAUSTFLOAT fVbargraph26; + double fRec33[2]; + FAUSTFLOAT fVbargraph27; + double fRec34[2]; + FAUSTFLOAT fVbargraph28; + double fRec35[2]; + FAUSTFLOAT fVbargraph29; + double fRec36[2]; + FAUSTFLOAT fVbargraph30; + double fRec37[2]; + FAUSTFLOAT fVbargraph31; + double fRec38[2]; + FAUSTFLOAT fVbargraph32; + double fRec39[2]; + FAUSTFLOAT fVbargraph33; + double fRec40[2]; + FAUSTFLOAT fVbargraph34; + double fRec41[2]; + FAUSTFLOAT fVbargraph35; + double fRec42[2]; + FAUSTFLOAT fVbargraph36; + double fRec43[2]; + FAUSTFLOAT fVbargraph37; + double fRec44[2]; + FAUSTFLOAT fVbargraph38; + double fRec45[2]; + FAUSTFLOAT fVbargraph39; + double fRec46[2]; + FAUSTFLOAT fVbargraph40; + double fRec47[2]; + FAUSTFLOAT fVbargraph41; + double fRec48[2]; + FAUSTFLOAT fVbargraph42; + double fRec49[2]; + FAUSTFLOAT fVbargraph43; + double fRec50[2]; + FAUSTFLOAT fVbargraph44; + double fRec51[2]; + FAUSTFLOAT fVbargraph45; + double fRec52[2]; + FAUSTFLOAT fVbargraph46; + double fRec53[2]; + FAUSTFLOAT fVbargraph47; + double fRec54[2]; + FAUSTFLOAT fVbargraph48; + double fRec55[2]; + FAUSTFLOAT fVbargraph49; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev501"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec0[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec12[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec14[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec18[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec20[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec22[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec23[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec24[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec25[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec26[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec27[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec33[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec37[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec38[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec39[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec40[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec41[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec42[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec43[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec44[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec45[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec46[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec47[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec48[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec49[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec50[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec51[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec52[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec53[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec54[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec55[l55] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev501"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox1); + ui_interface->addCheckButton("1", &fCheckbox2); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28d2be0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28d89b0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28df0b0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28e5890", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28ec150", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28f20e0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28f8ea0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28ff5c0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2905dc0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x290c6a0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29134a0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x291a380", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2921340", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29283e0", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x292eb50", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29353a0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x293bcd0", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29426e0", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x294a100", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29514b0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2958940", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x295feb0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2966d20", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x296dc70", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2974ca0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x297bdb0", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29832a0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2989460", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x298f700", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2995a80", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x299d040", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29a3f50", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29aaf40", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29b2010", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29b91c0", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29c0450", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29c77c0", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29cec10", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29d5380", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29dbbd0", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29e2500", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29e8f10", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29efa00", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29f65d0", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29fd280", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a04010", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a0ae80", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a11dd0", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a18e00", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a1ff10", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fHslider0); + double fSlow2 = (1.0 - fSlow0); + double fSlow3 = double(fEntry0); + double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = double(fHslider2); + double fSlow7 = cos(fSlow6); + double fSlow8 = double(fHslider3); + double fSlow9 = cos(fSlow8); + double fSlow10 = (fSlow7 * fSlow9); + double fSlow11 = (6.123233995736766e-17 * fSlow10); + double fSlow12 = sin(fSlow8); + double fSlow13 = (1.0 - double(fCheckbox2)); + double fSlow14 = (3.0 * ((fSlow11 + fSlow12) * fSlow13)); + double fSlow15 = ((fConst3 / fSlow1) + 1.0); + double fSlow16 = (fConst2 / (fSlow15 * fSlow1)); + double fSlow17 = (1.0 / ((fConst3 / fSlow3) + 1.0)); + double fSlow18 = (((fSlow15 * fSlow0) * fSlow3) / fSlow1); + double fSlow19 = (fConst2 / fSlow3); + double fSlow20 = (fSlow2 * fSlow3); + double fSlow21 = (3.0 * ((fSlow7 * fSlow13) * fSlow9)); + double fSlow22 = cos((fSlow6 + -1.5707963267948966)); + double fSlow23 = (3.0 * ((fSlow22 * fSlow13) * fSlow9)); + double fSlow24 = cos((fSlow6 + -3.1415926535897931)); + double fSlow25 = (3.0 * ((fSlow24 * fSlow13) * fSlow9)); + double fSlow26 = cos((fSlow6 + -4.7123889803846897)); + double fSlow27 = (3.0 * ((fSlow26 * fSlow13) * fSlow9)); + double fSlow28 = (3.0 * ((fSlow11 - fSlow12) * fSlow13)); + double fSlow29 = (0.70710678118654757 * fSlow10); + double fSlow30 = (0.70710678118654746 * fSlow12); + double fSlow31 = (3.0 * ((fSlow29 + fSlow30) * fSlow13)); + double fSlow32 = (0.70710678118654757 * (fSlow22 * fSlow9)); + double fSlow33 = (3.0 * ((fSlow30 + fSlow32) * fSlow13)); + double fSlow34 = (0.70710678118654757 * (fSlow24 * fSlow9)); + double fSlow35 = (3.0 * ((fSlow30 + fSlow34) * fSlow13)); + double fSlow36 = (0.70710678118654757 * (fSlow26 * fSlow9)); + double fSlow37 = (3.0 * ((fSlow30 + fSlow36) * fSlow13)); + double fSlow38 = cos((fSlow6 + -0.78539816339744828)); + double fSlow39 = (3.0 * ((fSlow38 * fSlow13) * fSlow9)); + double fSlow40 = cos((fSlow6 + -2.3561944901923448)); + double fSlow41 = (3.0 * ((fSlow40 * fSlow13) * fSlow9)); + double fSlow42 = cos((fSlow6 + -3.9269908169872414)); + double fSlow43 = (3.0 * ((fSlow42 * fSlow13) * fSlow9)); + double fSlow44 = cos((fSlow6 + -5.497787143782138)); + double fSlow45 = (3.0 * ((fSlow44 * fSlow13) * fSlow9)); + double fSlow46 = (3.0 * ((fSlow29 - fSlow30) * fSlow13)); + double fSlow47 = (3.0 * ((fSlow32 - fSlow30) * fSlow13)); + double fSlow48 = (3.0 * ((fSlow34 - fSlow30) * fSlow13)); + double fSlow49 = (3.0 * ((fSlow36 - fSlow30) * fSlow13)); + double fSlow50 = (0.81649658092772592 * (fSlow38 * fSlow9)); + double fSlow51 = (0.57735026918962584 * fSlow12); + double fSlow52 = (3.0 * ((fSlow50 + fSlow51) * fSlow13)); + double fSlow53 = (fSlow40 * fSlow9); + double fSlow54 = (0.81649658092772592 * fSlow53); + double fSlow55 = (3.0 * ((fSlow51 + fSlow54) * fSlow13)); + double fSlow56 = (fSlow42 * fSlow9); + double fSlow57 = (0.81649658092772592 * fSlow56); + double fSlow58 = (3.0 * ((fSlow51 + fSlow57) * fSlow13)); + double fSlow59 = (fSlow44 * fSlow9); + double fSlow60 = (0.81649658092772592 * fSlow59); + double fSlow61 = (3.0 * ((fSlow51 + fSlow60) * fSlow13)); + double fSlow62 = (3.0 * ((fSlow50 - fSlow51) * fSlow13)); + double fSlow63 = (3.0 * ((fSlow54 - fSlow51) * fSlow13)); + double fSlow64 = (3.0 * ((fSlow57 - fSlow51) * fSlow13)); + double fSlow65 = (3.0 * ((fSlow60 - fSlow51) * fSlow13)); + double fSlow66 = (0.42640143271122027 * (cos((fSlow6 + -0.78539816339744839)) * fSlow9)); + double fSlow67 = (0.90453403373329111 * fSlow12); + double fSlow68 = (3.0 * ((fSlow66 + fSlow67) * fSlow13)); + double fSlow69 = (0.42640143271122027 * fSlow53); + double fSlow70 = (3.0 * ((fSlow67 + fSlow69) * fSlow13)); + double fSlow71 = (0.42640143271122027 * fSlow56); + double fSlow72 = (3.0 * ((fSlow67 + fSlow71) * fSlow13)); + double fSlow73 = (0.42640143271122027 * fSlow59); + double fSlow74 = (3.0 * ((fSlow67 + fSlow73) * fSlow13)); + double fSlow75 = (0.95346258924559235 * (cos((fSlow6 + -0.32175055439664263)) * fSlow9)); + double fSlow76 = (0.30151134457776352 * fSlow12); + double fSlow77 = (3.0 * ((fSlow75 + fSlow76) * fSlow13)); + double fSlow78 = (0.95346258924559235 * (cos((fSlow6 + -1.2490457723982544)) * fSlow9)); + double fSlow79 = (3.0 * ((fSlow76 + fSlow78) * fSlow13)); + double fSlow80 = (0.95346258924559235 * (cos((fSlow6 + -1.8925468811915387)) * fSlow9)); + double fSlow81 = (3.0 * ((fSlow76 + fSlow80) * fSlow13)); + double fSlow82 = (0.95346258924559235 * (cos((fSlow6 + -2.8198420991931505)) * fSlow9)); + double fSlow83 = (3.0 * ((fSlow76 + fSlow82) * fSlow13)); + double fSlow84 = (0.95346258924559235 * (cos((fSlow6 + -3.4633432079864357)) * fSlow9)); + double fSlow85 = (3.0 * ((fSlow76 + fSlow84) * fSlow13)); + double fSlow86 = (0.95346258924559235 * (cos((fSlow6 + -4.3906384259880475)) * fSlow9)); + double fSlow87 = (3.0 * ((fSlow76 + fSlow86) * fSlow13)); + double fSlow88 = (0.95346258924559235 * (cos((fSlow6 + -5.0341395347813318)) * fSlow9)); + double fSlow89 = (3.0 * ((fSlow76 + fSlow88) * fSlow13)); + double fSlow90 = (0.95346258924559235 * (cos((fSlow6 + -5.9614347527829432)) * fSlow9)); + double fSlow91 = (3.0 * ((fSlow76 + fSlow90) * fSlow13)); + double fSlow92 = (3.0 * ((fSlow75 - fSlow76) * fSlow13)); + double fSlow93 = (3.0 * ((fSlow78 - fSlow76) * fSlow13)); + double fSlow94 = (3.0 * ((fSlow80 - fSlow76) * fSlow13)); + double fSlow95 = (3.0 * ((fSlow82 - fSlow76) * fSlow13)); + double fSlow96 = (3.0 * ((fSlow84 - fSlow76) * fSlow13)); + double fSlow97 = (3.0 * ((fSlow86 - fSlow76) * fSlow13)); + double fSlow98 = (3.0 * ((fSlow88 - fSlow76) * fSlow13)); + double fSlow99 = (3.0 * ((fSlow90 - fSlow76) * fSlow13)); + double fSlow100 = (3.0 * ((fSlow66 - fSlow67) * fSlow13)); + double fSlow101 = (3.0 * ((fSlow69 - fSlow67) * fSlow13)); + double fSlow102 = (3.0 * ((fSlow71 - fSlow67) * fSlow13)); + double fSlow103 = (3.0 * ((fSlow73 - fSlow67) * fSlow13)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); + fRec4[0] = (fRec4[1] + fRec3[1]); + fRec3[0] = (fSlow17 * ((fSlow18 * fTemp0) - (fSlow19 * fRec4[0]))); + fRec2[0] = (fRec3[0] + fRec2[1]); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow17 * ((fSlow20 * fTemp0) - (fSlow19 * fRec6[0]))); + double fTemp2 = ((fSlow16 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + double fTemp3 = (0.012698412698412698 * (fTemp1 + (fSlow14 * fTemp2))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = (0.012698412698412698 * (fTemp1 + (fSlow21 * fTemp2))); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph1 = FAUSTFLOAT(fRec7[0]); + output1[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (0.012698412698412698 * (fTemp1 + (fSlow23 * fTemp2))); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec8[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (0.012698412698412698 * (fTemp1 + (fSlow25 * fTemp2))); + fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec9[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = (0.012698412698412698 * (fTemp1 + (fSlow27 * fTemp2))); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph4 = FAUSTFLOAT(fRec10[0]); + output4[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = (0.012698412698412698 * (fTemp1 + (fSlow28 * fTemp2))); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph5 = FAUSTFLOAT(fRec11[0]); + output5[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (0.022574955908289243 * (fTemp1 + (fSlow31 * fTemp2))); + fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph6 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (0.022574955908289243 * (fTemp1 + (fSlow33 * fTemp2))); + fRec13[0] = max((fRec13[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph7 = FAUSTFLOAT(fRec13[0]); + output7[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (0.022574955908289243 * (fTemp1 + (fSlow35 * fTemp2))); + fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph8 = FAUSTFLOAT(fRec14[0]); + output8[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.022574955908289243 * (fTemp1 + (fSlow37 * fTemp2))); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph9 = FAUSTFLOAT(fRec15[0]); + output9[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.022574955908289243 * (fTemp1 + (fSlow39 * fTemp2))); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph10 = FAUSTFLOAT(fRec16[0]); + output10[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.022574955908289243 * (fTemp1 + (fSlow41 * fTemp2))); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph11 = FAUSTFLOAT(fRec17[0]); + output11[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.022574955908289243 * (fTemp1 + (fSlow43 * fTemp2))); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph12 = FAUSTFLOAT(fRec18[0]); + output12[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.022574955908289243 * (fTemp1 + (fSlow45 * fTemp2))); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph13 = FAUSTFLOAT(fRec19[0]); + output13[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.022574955908289243 * (fTemp1 + (fSlow46 * fTemp2))); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph14 = FAUSTFLOAT(fRec20[0]); + output14[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.022574955908289243 * (fTemp1 + (fSlow47 * fTemp2))); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph15 = FAUSTFLOAT(fRec21[0]); + output15[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.022574955908289243 * (fTemp1 + (fSlow48 * fTemp2))); + fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph16 = FAUSTFLOAT(fRec22[0]); + output16[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.022574955908289243 * (fTemp1 + (fSlow49 * fTemp2))); + fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph17 = FAUSTFLOAT(fRec23[0]); + output17[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.021093750000000001 * (fTemp1 + (fSlow52 * fTemp2))); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph18 = FAUSTFLOAT(fRec24[0]); + output18[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.021093750000000001 * (fTemp1 + (fSlow55 * fTemp2))); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph19 = FAUSTFLOAT(fRec25[0]); + output19[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.021093750000000001 * (fTemp1 + (fSlow58 * fTemp2))); + fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph20 = FAUSTFLOAT(fRec26[0]); + output20[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.021093750000000001 * (fTemp1 + (fSlow61 * fTemp2))); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph21 = FAUSTFLOAT(fRec27[0]); + output21[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.021093750000000001 * (fTemp1 + (fSlow62 * fTemp2))); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph22 = FAUSTFLOAT(fRec28[0]); + output22[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.021093750000000001 * (fTemp1 + (fSlow63 * fTemp2))); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph23 = FAUSTFLOAT(fRec29[0]); + output23[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.021093750000000001 * (fTemp1 + (fSlow64 * fTemp2))); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph24 = FAUSTFLOAT(fRec30[0]); + output24[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.021093750000000001 * (fTemp1 + (fSlow65 * fTemp2))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph25 = FAUSTFLOAT(fRec31[0]); + output25[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.02017333553791887 * (fTemp1 + (fSlow68 * fTemp2))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph26 = FAUSTFLOAT(fRec32[0]); + output26[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.02017333553791887 * (fTemp1 + (fSlow70 * fTemp2))); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph27 = FAUSTFLOAT(fRec33[0]); + output27[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.02017333553791887 * (fTemp1 + (fSlow72 * fTemp2))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph28 = FAUSTFLOAT(fRec34[0]); + output28[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.02017333553791887 * (fTemp1 + (fSlow74 * fTemp2))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph29 = FAUSTFLOAT(fRec35[0]); + output29[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.02017333553791887 * (fTemp1 + (fSlow77 * fTemp2))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph30 = FAUSTFLOAT(fRec36[0]); + output30[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.02017333553791887 * (fTemp1 + (fSlow79 * fTemp2))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph31 = FAUSTFLOAT(fRec37[0]); + output31[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (0.02017333553791887 * (fTemp1 + (fSlow81 * fTemp2))); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph32 = FAUSTFLOAT(fRec38[0]); + output32[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (0.02017333553791887 * (fTemp1 + (fSlow83 * fTemp2))); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph33 = FAUSTFLOAT(fRec39[0]); + output33[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (0.02017333553791887 * (fTemp1 + (fSlow85 * fTemp2))); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph34 = FAUSTFLOAT(fRec40[0]); + output34[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (0.02017333553791887 * (fTemp1 + (fSlow87 * fTemp2))); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph35 = FAUSTFLOAT(fRec41[0]); + output35[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (0.02017333553791887 * (fTemp1 + (fSlow89 * fTemp2))); + fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph36 = FAUSTFLOAT(fRec42[0]); + output36[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.02017333553791887 * (fTemp1 + (fSlow91 * fTemp2))); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph37 = FAUSTFLOAT(fRec43[0]); + output37[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (0.02017333553791887 * (fTemp1 + (fSlow92 * fTemp2))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph38 = FAUSTFLOAT(fRec44[0]); + output38[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (0.02017333553791887 * (fTemp1 + (fSlow93 * fTemp2))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph39 = FAUSTFLOAT(fRec45[0]); + output39[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (0.02017333553791887 * (fTemp1 + (fSlow94 * fTemp2))); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph40 = FAUSTFLOAT(fRec46[0]); + output40[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (0.02017333553791887 * (fTemp1 + (fSlow95 * fTemp2))); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph41 = FAUSTFLOAT(fRec47[0]); + output41[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.02017333553791887 * (fTemp1 + (fSlow96 * fTemp2))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph42 = FAUSTFLOAT(fRec48[0]); + output42[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (0.02017333553791887 * (fTemp1 + (fSlow97 * fTemp2))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph43 = FAUSTFLOAT(fRec49[0]); + output43[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (0.02017333553791887 * (fTemp1 + (fSlow98 * fTemp2))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph44 = FAUSTFLOAT(fRec50[0]); + output44[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (0.02017333553791887 * (fTemp1 + (fSlow99 * fTemp2))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph45 = FAUSTFLOAT(fRec51[0]); + output45[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.02017333553791887 * (fTemp1 + (fSlow100 * fTemp2))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph46 = FAUSTFLOAT(fRec52[0]); + output46[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (0.02017333553791887 * (fTemp1 + (fSlow101 * fTemp2))); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph47 = FAUSTFLOAT(fRec53[0]); + output47[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * (fTemp1 + (fSlow102 * fTemp2))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph48 = FAUSTFLOAT(fRec54[0]); + output48[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (0.02017333553791887 * (fTemp1 + (fSlow103 * fTemp2))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph49 = FAUSTFLOAT(fRec55[0]); + output49[i] = FAUSTFLOAT(fTemp52); + fRec1[1] = fRec1[0]; + fRec4[1] = fRec4[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec0[1] = fRec0[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec39[1] = fRec39[0]; + fRec40[1] = fRec40[0]; + fRec41[1] = fRec41[0]; + fRec42[1] = fRec42[0]; + fRec43[1] = fRec43[0]; + fRec44[1] = fRec44[0]; + fRec45[1] = fRec45[0]; + fRec46[1] = fRec46[0]; + fRec47[1] = fRec47[0]; + fRec48[1] = fRec48[0]; + fRec49[1] = fRec49[0]; + fRec50[1] = fRec50[0]; + fRec51[1] = fRec51[0]; + fRec52[1] = fRec52[0]; + fRec53[1] = fRec53[0]; + fRec54[1] = fRec54[0]; + fRec55[1] = fRec55[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev502.cpp b/source/HOAUGens/HOAPanLebedev502.cpp new file mode 100755 index 0000000000..a0994ec79c --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev502.cpp @@ -0,0 +1,2528 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAPanLebedev502" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double pow(double dummy0, double dummy1); +double cos(double dummy0); +double sin(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double fabs(double dummy0); +double log10(double dummy0); + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider1; + double fRec1[2]; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + FAUSTFLOAT fCheckbox2; + double fConst2; + double fConst3; + double fRec4[2]; + double fRec3[2]; + double fRec2[2]; + double fRec6[2]; + double fRec5[2]; + FAUSTFLOAT fCheckbox3; + double fConst4; + double fConst5; + double fRec9[2]; + double fRec10[2]; + double fRec8[2]; + double fRec7[2]; + double fVec0[2]; + double fRec11[2]; + double fRec13[2]; + double fRec14[2]; + double fRec12[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec15[2]; + FAUSTFLOAT fVbargraph1; + double fRec16[2]; + FAUSTFLOAT fVbargraph2; + double fRec17[2]; + FAUSTFLOAT fVbargraph3; + double fRec18[2]; + FAUSTFLOAT fVbargraph4; + double fRec19[2]; + FAUSTFLOAT fVbargraph5; + double fRec20[2]; + FAUSTFLOAT fVbargraph6; + double fRec21[2]; + FAUSTFLOAT fVbargraph7; + double fRec22[2]; + FAUSTFLOAT fVbargraph8; + double fRec23[2]; + FAUSTFLOAT fVbargraph9; + double fRec24[2]; + FAUSTFLOAT fVbargraph10; + double fRec25[2]; + FAUSTFLOAT fVbargraph11; + double fRec26[2]; + FAUSTFLOAT fVbargraph12; + double fRec27[2]; + FAUSTFLOAT fVbargraph13; + double fRec28[2]; + FAUSTFLOAT fVbargraph14; + double fRec29[2]; + FAUSTFLOAT fVbargraph15; + double fRec30[2]; + FAUSTFLOAT fVbargraph16; + double fRec31[2]; + FAUSTFLOAT fVbargraph17; + double fRec32[2]; + FAUSTFLOAT fVbargraph18; + double fRec33[2]; + FAUSTFLOAT fVbargraph19; + double fRec34[2]; + FAUSTFLOAT fVbargraph20; + double fRec35[2]; + FAUSTFLOAT fVbargraph21; + double fRec36[2]; + FAUSTFLOAT fVbargraph22; + double fRec37[2]; + FAUSTFLOAT fVbargraph23; + double fRec38[2]; + FAUSTFLOAT fVbargraph24; + double fRec39[2]; + FAUSTFLOAT fVbargraph25; + double fRec40[2]; + FAUSTFLOAT fVbargraph26; + double fRec41[2]; + FAUSTFLOAT fVbargraph27; + double fRec42[2]; + FAUSTFLOAT fVbargraph28; + double fRec43[2]; + FAUSTFLOAT fVbargraph29; + double fRec44[2]; + FAUSTFLOAT fVbargraph30; + double fRec45[2]; + FAUSTFLOAT fVbargraph31; + double fRec46[2]; + FAUSTFLOAT fVbargraph32; + double fRec47[2]; + FAUSTFLOAT fVbargraph33; + double fRec48[2]; + FAUSTFLOAT fVbargraph34; + double fRec49[2]; + FAUSTFLOAT fVbargraph35; + double fRec50[2]; + FAUSTFLOAT fVbargraph36; + double fRec51[2]; + FAUSTFLOAT fVbargraph37; + double fRec52[2]; + FAUSTFLOAT fVbargraph38; + double fRec53[2]; + FAUSTFLOAT fVbargraph39; + double fRec54[2]; + FAUSTFLOAT fVbargraph40; + double fRec55[2]; + FAUSTFLOAT fVbargraph41; + double fRec56[2]; + FAUSTFLOAT fVbargraph42; + double fRec57[2]; + FAUSTFLOAT fVbargraph43; + double fRec58[2]; + FAUSTFLOAT fVbargraph44; + double fRec59[2]; + FAUSTFLOAT fVbargraph45; + double fRec60[2]; + FAUSTFLOAT fVbargraph46; + double fRec61[2]; + FAUSTFLOAT fVbargraph47; + double fRec62[2]; + FAUSTFLOAT fVbargraph48; + double fRec63[2]; + FAUSTFLOAT fVbargraph49; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev502"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (510.0 / fConst0); + fConst5 = (1020.0 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + fCheckbox3 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec9[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec10[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec7[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fVec0[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec14[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec12[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec0[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec15[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec17[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec19[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec21[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec23[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec25[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec27[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec29[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec31[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec33[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec35[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec37[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec39[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec41[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec42[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec43[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec44[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec45[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec46[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec47[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec49[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec50[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec51[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec52[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec53[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec54[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec55[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec56[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec57[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec58[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec59[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec60[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec61[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec62[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec63[l64] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev502"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox1); + ui_interface->addCheckButton("1", &fCheckbox2); + ui_interface->addCheckButton("2", &fCheckbox3); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31cb000", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31d22e0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31da2e0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31e23c0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31ea580", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31f1c30", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31fa110", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3201d70", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3209ab0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32118d0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3219fd0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32227b0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x322b070", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3233a10", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x323b8a0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3243810", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x324b860", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3253990", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x325c8f0", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3264fd0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x326d790", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3276030", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x327e5c0", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3286c30", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x328f380", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3297bb0", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32a07c0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32a80a0", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32afa60", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32b7500", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32c01e0", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32c8810", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32d0f20", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32d9710", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32e1ff0", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32ea9a0", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32f3430", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32fbfa0", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3303e30", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x330bda0", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3313df0", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x331bf20", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3324130", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x332c420", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33347f0", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x333cca0", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3345230", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x334d8a0", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3355ff0", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x335e820", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fHslider0); + double fSlow2 = (1.0 - fSlow0); + double fSlow3 = double(fEntry0); + double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = double(fHslider2); + double fSlow7 = cos(fSlow6); + double fSlow8 = double(fHslider3); + double fSlow9 = cos(fSlow8); + double fSlow10 = (fSlow7 * fSlow9); + double fSlow11 = (6.123233995736766e-17 * fSlow10); + double fSlow12 = sin(fSlow8); + double fSlow13 = (fSlow11 + fSlow12); + double fSlow14 = (1.0 - double(fCheckbox2)); + double fSlow15 = (3.0 * (fSlow13 * fSlow14)); + double fSlow16 = (fConst3 / fSlow1); + double fSlow17 = (fSlow16 + 1.0); + double fSlow18 = (fConst2 / (fSlow17 * fSlow1)); + double fSlow19 = (fConst3 / fSlow3); + double fSlow20 = (1.0 / (fSlow19 + 1.0)); + double fSlow21 = (((fSlow17 * fSlow0) * fSlow3) / fSlow1); + double fSlow22 = (fConst2 / fSlow3); + double fSlow23 = (fSlow2 * fSlow3); + double fSlow24 = (1.0 - double(fCheckbox3)); + double fSlow25 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow13)) + -1.0) * fSlow24)); + double fSlow26 = mydsp_faustpower2_f(fSlow16); + double fSlow27 = (((fConst4 / fSlow1) + (3.0 * fSlow26)) + 1.0); + double fSlow28 = (1.0 / fSlow27); + double fSlow29 = (12.0 * fSlow26); + double fSlow30 = ((fConst5 / fSlow1) + fSlow29); + double fSlow31 = mydsp_faustpower2_f(fSlow19); + double fSlow32 = (1.0 / (((fConst4 / fSlow3) + (3.0 * fSlow31)) + 1.0)); + double fSlow33 = (((fSlow27 * fSlow0) * fSlow3) / fSlow1); + double fSlow34 = (12.0 * fSlow31); + double fSlow35 = (fSlow34 + (fConst5 / fSlow3)); + double fSlow36 = (3.0 * ((fSlow7 * fSlow14) * fSlow9)); + double fSlow37 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow10)) + -1.0) * fSlow24)); + double fSlow38 = cos((fSlow6 + -1.5707963267948966)); + double fSlow39 = (3.0 * ((fSlow38 * fSlow14) * fSlow9)); + double fSlow40 = (fSlow38 * fSlow9); + double fSlow41 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow40)) + -1.0) * fSlow24)); + double fSlow42 = cos((fSlow6 + -3.1415926535897931)); + double fSlow43 = (3.0 * ((fSlow42 * fSlow14) * fSlow9)); + double fSlow44 = (fSlow42 * fSlow9); + double fSlow45 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow44)) + -1.0) * fSlow24)); + double fSlow46 = cos((fSlow6 + -4.7123889803846897)); + double fSlow47 = (3.0 * ((fSlow46 * fSlow14) * fSlow9)); + double fSlow48 = (fSlow46 * fSlow9); + double fSlow49 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow48)) + -1.0) * fSlow24)); + double fSlow50 = (fSlow11 - fSlow12); + double fSlow51 = (3.0 * (fSlow50 * fSlow14)); + double fSlow52 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow50)) + -1.0) * fSlow24)); + double fSlow53 = (0.70710678118654757 * fSlow10); + double fSlow54 = (0.70710678118654746 * fSlow12); + double fSlow55 = (fSlow53 + fSlow54); + double fSlow56 = (3.0 * (fSlow55 * fSlow14)); + double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow55)) + -1.0) * fSlow24)); + double fSlow58 = (0.70710678118654757 * fSlow40); + double fSlow59 = (fSlow54 + fSlow58); + double fSlow60 = (3.0 * (fSlow59 * fSlow14)); + double fSlow61 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow59)) + -1.0) * fSlow24)); + double fSlow62 = (0.70710678118654757 * fSlow44); + double fSlow63 = (fSlow54 + fSlow62); + double fSlow64 = (3.0 * (fSlow63 * fSlow14)); + double fSlow65 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow63)) + -1.0) * fSlow24)); + double fSlow66 = (0.70710678118654757 * fSlow48); + double fSlow67 = (fSlow54 + fSlow66); + double fSlow68 = (3.0 * (fSlow67 * fSlow14)); + double fSlow69 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow67)) + -1.0) * fSlow24)); + double fSlow70 = cos((fSlow6 + -0.78539816339744828)); + double fSlow71 = (3.0 * ((fSlow70 * fSlow14) * fSlow9)); + double fSlow72 = (fSlow70 * fSlow9); + double fSlow73 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow72)) + -1.0) * fSlow24)); + double fSlow74 = cos((fSlow6 + -2.3561944901923448)); + double fSlow75 = (3.0 * ((fSlow74 * fSlow14) * fSlow9)); + double fSlow76 = (fSlow74 * fSlow9); + double fSlow77 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow76)) + -1.0) * fSlow24)); + double fSlow78 = cos((fSlow6 + -3.9269908169872414)); + double fSlow79 = (3.0 * ((fSlow78 * fSlow14) * fSlow9)); + double fSlow80 = (fSlow78 * fSlow9); + double fSlow81 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow80)) + -1.0) * fSlow24)); + double fSlow82 = cos((fSlow6 + -5.497787143782138)); + double fSlow83 = (3.0 * ((fSlow82 * fSlow14) * fSlow9)); + double fSlow84 = (fSlow82 * fSlow9); + double fSlow85 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow84)) + -1.0) * fSlow24)); + double fSlow86 = (fSlow53 - fSlow54); + double fSlow87 = (3.0 * (fSlow86 * fSlow14)); + double fSlow88 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow86)) + -1.0) * fSlow24)); + double fSlow89 = (fSlow58 - fSlow54); + double fSlow90 = (3.0 * (fSlow89 * fSlow14)); + double fSlow91 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow89)) + -1.0) * fSlow24)); + double fSlow92 = (fSlow62 - fSlow54); + double fSlow93 = (3.0 * (fSlow92 * fSlow14)); + double fSlow94 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow92)) + -1.0) * fSlow24)); + double fSlow95 = (fSlow66 - fSlow54); + double fSlow96 = (3.0 * (fSlow95 * fSlow14)); + double fSlow97 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow95)) + -1.0) * fSlow24)); + double fSlow98 = (0.81649658092772592 * fSlow72); + double fSlow99 = (0.57735026918962584 * fSlow12); + double fSlow100 = (fSlow98 + fSlow99); + double fSlow101 = (3.0 * (fSlow100 * fSlow14)); + double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow100)) + -1.0) * fSlow24)); + double fSlow103 = (0.81649658092772592 * fSlow76); + double fSlow104 = (fSlow99 + fSlow103); + double fSlow105 = (3.0 * (fSlow104 * fSlow14)); + double fSlow106 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow104)) + -1.0) * fSlow24)); + double fSlow107 = (0.81649658092772592 * fSlow80); + double fSlow108 = (fSlow99 + fSlow107); + double fSlow109 = (3.0 * (fSlow108 * fSlow14)); + double fSlow110 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow108)) + -1.0) * fSlow24)); + double fSlow111 = (0.81649658092772592 * fSlow84); + double fSlow112 = (fSlow99 + fSlow111); + double fSlow113 = (3.0 * (fSlow112 * fSlow14)); + double fSlow114 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow112)) + -1.0) * fSlow24)); + double fSlow115 = (fSlow98 - fSlow99); + double fSlow116 = (3.0 * (fSlow115 * fSlow14)); + double fSlow117 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow115)) + -1.0) * fSlow24)); + double fSlow118 = (fSlow103 - fSlow99); + double fSlow119 = (3.0 * (fSlow118 * fSlow14)); + double fSlow120 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow118)) + -1.0) * fSlow24)); + double fSlow121 = (fSlow107 - fSlow99); + double fSlow122 = (3.0 * (fSlow121 * fSlow14)); + double fSlow123 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow121)) + -1.0) * fSlow24)); + double fSlow124 = (fSlow111 - fSlow99); + double fSlow125 = (3.0 * (fSlow124 * fSlow14)); + double fSlow126 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow124)) + -1.0) * fSlow24)); + double fSlow127 = (0.42640143271122027 * (cos((fSlow6 + -0.78539816339744839)) * fSlow9)); + double fSlow128 = (0.90453403373329111 * fSlow12); + double fSlow129 = (fSlow127 + fSlow128); + double fSlow130 = (3.0 * (fSlow129 * fSlow14)); + double fSlow131 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow129)) + -1.0) * fSlow24)); + double fSlow132 = (0.42640143271122027 * fSlow76); + double fSlow133 = (fSlow128 + fSlow132); + double fSlow134 = (3.0 * (fSlow133 * fSlow14)); + double fSlow135 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow133)) + -1.0) * fSlow24)); + double fSlow136 = (0.42640143271122027 * fSlow80); + double fSlow137 = (fSlow128 + fSlow136); + double fSlow138 = (3.0 * (fSlow137 * fSlow14)); + double fSlow139 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow137)) + -1.0) * fSlow24)); + double fSlow140 = (0.42640143271122027 * fSlow84); + double fSlow141 = (fSlow128 + fSlow140); + double fSlow142 = (3.0 * (fSlow141 * fSlow14)); + double fSlow143 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow141)) + -1.0) * fSlow24)); + double fSlow144 = (0.95346258924559235 * (cos((fSlow6 + -0.32175055439664263)) * fSlow9)); + double fSlow145 = (0.30151134457776352 * fSlow12); + double fSlow146 = (fSlow144 + fSlow145); + double fSlow147 = (3.0 * (fSlow146 * fSlow14)); + double fSlow148 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow146)) + -1.0) * fSlow24)); + double fSlow149 = (0.95346258924559235 * (cos((fSlow6 + -1.2490457723982544)) * fSlow9)); + double fSlow150 = (fSlow145 + fSlow149); + double fSlow151 = (3.0 * (fSlow150 * fSlow14)); + double fSlow152 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow150)) + -1.0) * fSlow24)); + double fSlow153 = (0.95346258924559235 * (cos((fSlow6 + -1.8925468811915387)) * fSlow9)); + double fSlow154 = (fSlow145 + fSlow153); + double fSlow155 = (3.0 * (fSlow154 * fSlow14)); + double fSlow156 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow154)) + -1.0) * fSlow24)); + double fSlow157 = (0.95346258924559235 * (cos((fSlow6 + -2.8198420991931505)) * fSlow9)); + double fSlow158 = (fSlow145 + fSlow157); + double fSlow159 = (3.0 * (fSlow158 * fSlow14)); + double fSlow160 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow158)) + -1.0) * fSlow24)); + double fSlow161 = (0.95346258924559235 * (cos((fSlow6 + -3.4633432079864357)) * fSlow9)); + double fSlow162 = (fSlow145 + fSlow161); + double fSlow163 = (3.0 * (fSlow162 * fSlow14)); + double fSlow164 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow162)) + -1.0) * fSlow24)); + double fSlow165 = (0.95346258924559235 * (cos((fSlow6 + -4.3906384259880475)) * fSlow9)); + double fSlow166 = (fSlow145 + fSlow165); + double fSlow167 = (3.0 * (fSlow166 * fSlow14)); + double fSlow168 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow166)) + -1.0) * fSlow24)); + double fSlow169 = (0.95346258924559235 * (cos((fSlow6 + -5.0341395347813318)) * fSlow9)); + double fSlow170 = (fSlow145 + fSlow169); + double fSlow171 = (3.0 * (fSlow170 * fSlow14)); + double fSlow172 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow170)) + -1.0) * fSlow24)); + double fSlow173 = (0.95346258924559235 * (cos((fSlow6 + -5.9614347527829432)) * fSlow9)); + double fSlow174 = (fSlow145 + fSlow173); + double fSlow175 = (3.0 * (fSlow174 * fSlow14)); + double fSlow176 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow174)) + -1.0) * fSlow24)); + double fSlow177 = (fSlow144 - fSlow145); + double fSlow178 = (3.0 * (fSlow177 * fSlow14)); + double fSlow179 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow177)) + -1.0) * fSlow24)); + double fSlow180 = (fSlow149 - fSlow145); + double fSlow181 = (3.0 * (fSlow180 * fSlow14)); + double fSlow182 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow180)) + -1.0) * fSlow24)); + double fSlow183 = (fSlow153 - fSlow145); + double fSlow184 = (3.0 * (fSlow183 * fSlow14)); + double fSlow185 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow183)) + -1.0) * fSlow24)); + double fSlow186 = (fSlow157 - fSlow145); + double fSlow187 = (3.0 * (fSlow186 * fSlow14)); + double fSlow188 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow186)) + -1.0) * fSlow24)); + double fSlow189 = (fSlow161 - fSlow145); + double fSlow190 = (3.0 * (fSlow189 * fSlow14)); + double fSlow191 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow189)) + -1.0) * fSlow24)); + double fSlow192 = (fSlow165 - fSlow145); + double fSlow193 = (3.0 * (fSlow192 * fSlow14)); + double fSlow194 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow192)) + -1.0) * fSlow24)); + double fSlow195 = (fSlow169 - fSlow145); + double fSlow196 = (3.0 * (fSlow195 * fSlow14)); + double fSlow197 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow195)) + -1.0) * fSlow24)); + double fSlow198 = (fSlow173 - fSlow145); + double fSlow199 = (3.0 * (fSlow198 * fSlow14)); + double fSlow200 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow198)) + -1.0) * fSlow24)); + double fSlow201 = (fSlow127 - fSlow128); + double fSlow202 = (3.0 * (fSlow201 * fSlow14)); + double fSlow203 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow201)) + -1.0) * fSlow24)); + double fSlow204 = (fSlow132 - fSlow128); + double fSlow205 = (3.0 * (fSlow204 * fSlow14)); + double fSlow206 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow204)) + -1.0) * fSlow24)); + double fSlow207 = (fSlow136 - fSlow128); + double fSlow208 = (3.0 * (fSlow207 * fSlow14)); + double fSlow209 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow207)) + -1.0) * fSlow24)); + double fSlow210 = (fSlow140 - fSlow128); + double fSlow211 = (3.0 * (fSlow210 * fSlow14)); + double fSlow212 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow210)) + -1.0) * fSlow24)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); + fRec4[0] = (fRec4[1] + fRec3[1]); + fRec3[0] = (fSlow20 * ((fSlow21 * fTemp0) - (fSlow22 * fRec4[0]))); + fRec2[0] = (fRec3[0] + fRec2[1]); + double fTemp2 = (fSlow23 * fTemp0); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow20 * (fTemp2 - (fSlow22 * fRec6[0]))); + double fTemp3 = ((fSlow18 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + fRec9[0] = (fRec9[1] + fRec8[1]); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec8[0] = (fSlow32 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec9[0]) + (fSlow34 * fRec10[0])))); + fRec7[0] = (fRec8[0] + fRec7[1]); + double fTemp4 = (fRec7[0] - fRec8[0]); + fVec0[0] = fTemp4; + fRec11[0] = (fRec11[1] + fVec0[1]); + fRec13[0] = (fRec13[1] + fRec12[1]); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec12[0] = (fSlow32 * (fTemp2 - ((fSlow35 * fRec13[0]) + (fSlow34 * fRec14[0])))); + double fTemp5 = ((fSlow28 * ((fSlow30 * fTemp4) + (fSlow29 * fRec11[0]))) + (fRec8[0] + fRec12[0])); + double fTemp6 = (0.012698412698412698 * ((fTemp1 + (fSlow15 * fTemp3)) + (fSlow25 * fTemp5))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = (0.012698412698412698 * ((fTemp1 + (fSlow36 * fTemp3)) + (fSlow37 * fTemp5))); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph1 = FAUSTFLOAT(fRec15[0]); + output1[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = (0.012698412698412698 * ((fTemp1 + (fSlow39 * fTemp3)) + (fSlow41 * fTemp5))); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph2 = FAUSTFLOAT(fRec16[0]); + output2[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (0.012698412698412698 * ((fTemp1 + (fSlow43 * fTemp3)) + (fSlow45 * fTemp5))); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph3 = FAUSTFLOAT(fRec17[0]); + output3[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (0.012698412698412698 * ((fTemp1 + (fSlow47 * fTemp3)) + (fSlow49 * fTemp5))); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph4 = FAUSTFLOAT(fRec18[0]); + output4[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (0.012698412698412698 * ((fTemp1 + (fSlow51 * fTemp3)) + (fSlow52 * fTemp5))); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph5 = FAUSTFLOAT(fRec19[0]); + output5[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.022574955908289243 * ((fTemp1 + (fSlow56 * fTemp3)) + (fSlow57 * fTemp5))); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph6 = FAUSTFLOAT(fRec20[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.022574955908289243 * ((fTemp1 + (fSlow60 * fTemp3)) + (fSlow61 * fTemp5))); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph7 = FAUSTFLOAT(fRec21[0]); + output7[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.022574955908289243 * ((fTemp1 + (fSlow64 * fTemp3)) + (fSlow65 * fTemp5))); + fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph8 = FAUSTFLOAT(fRec22[0]); + output8[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.022574955908289243 * ((fTemp1 + (fSlow68 * fTemp3)) + (fSlow69 * fTemp5))); + fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph9 = FAUSTFLOAT(fRec23[0]); + output9[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.022574955908289243 * ((fTemp1 + (fSlow71 * fTemp3)) + (fSlow73 * fTemp5))); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph10 = FAUSTFLOAT(fRec24[0]); + output10[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.022574955908289243 * ((fTemp1 + (fSlow75 * fTemp3)) + (fSlow77 * fTemp5))); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph11 = FAUSTFLOAT(fRec25[0]); + output11[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.022574955908289243 * ((fTemp1 + (fSlow79 * fTemp3)) + (fSlow81 * fTemp5))); + fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph12 = FAUSTFLOAT(fRec26[0]); + output12[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.022574955908289243 * ((fTemp1 + (fSlow83 * fTemp3)) + (fSlow85 * fTemp5))); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph13 = FAUSTFLOAT(fRec27[0]); + output13[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.022574955908289243 * ((fTemp1 + (fSlow87 * fTemp3)) + (fSlow88 * fTemp5))); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph14 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.022574955908289243 * ((fTemp1 + (fSlow90 * fTemp3)) + (fSlow91 * fTemp5))); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph15 = FAUSTFLOAT(fRec29[0]); + output15[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.022574955908289243 * ((fTemp1 + (fSlow93 * fTemp3)) + (fSlow94 * fTemp5))); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph16 = FAUSTFLOAT(fRec30[0]); + output16[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.022574955908289243 * ((fTemp1 + (fSlow96 * fTemp3)) + (fSlow97 * fTemp5))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph17 = FAUSTFLOAT(fRec31[0]); + output17[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.021093750000000001 * ((fTemp1 + (fSlow101 * fTemp3)) + (fSlow102 * fTemp5))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph18 = FAUSTFLOAT(fRec32[0]); + output18[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.021093750000000001 * ((fTemp1 + (fSlow105 * fTemp3)) + (fSlow106 * fTemp5))); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph19 = FAUSTFLOAT(fRec33[0]); + output19[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.021093750000000001 * ((fTemp1 + (fSlow109 * fTemp3)) + (fSlow110 * fTemp5))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph20 = FAUSTFLOAT(fRec34[0]); + output20[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.021093750000000001 * ((fTemp1 + (fSlow113 * fTemp3)) + (fSlow114 * fTemp5))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph21 = FAUSTFLOAT(fRec35[0]); + output21[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.021093750000000001 * ((fTemp1 + (fSlow116 * fTemp3)) + (fSlow117 * fTemp5))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph22 = FAUSTFLOAT(fRec36[0]); + output22[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.021093750000000001 * ((fTemp1 + (fSlow119 * fTemp3)) + (fSlow120 * fTemp5))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph23 = FAUSTFLOAT(fRec37[0]); + output23[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.021093750000000001 * ((fTemp1 + (fSlow122 * fTemp3)) + (fSlow123 * fTemp5))); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph24 = FAUSTFLOAT(fRec38[0]); + output24[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.021093750000000001 * ((fTemp1 + (fSlow125 * fTemp3)) + (fSlow126 * fTemp5))); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph25 = FAUSTFLOAT(fRec39[0]); + output25[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.02017333553791887 * ((fTemp1 + (fSlow130 * fTemp3)) + (fSlow131 * fTemp5))); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph26 = FAUSTFLOAT(fRec40[0]); + output26[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.02017333553791887 * ((fTemp1 + (fSlow134 * fTemp3)) + (fSlow135 * fTemp5))); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph27 = FAUSTFLOAT(fRec41[0]); + output27[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.02017333553791887 * ((fTemp1 + (fSlow138 * fTemp3)) + (fSlow139 * fTemp5))); + fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph28 = FAUSTFLOAT(fRec42[0]); + output28[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (0.02017333553791887 * ((fTemp1 + (fSlow142 * fTemp3)) + (fSlow143 * fTemp5))); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph29 = FAUSTFLOAT(fRec43[0]); + output29[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (0.02017333553791887 * ((fTemp1 + (fSlow147 * fTemp3)) + (fSlow148 * fTemp5))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph30 = FAUSTFLOAT(fRec44[0]); + output30[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (0.02017333553791887 * ((fTemp1 + (fSlow151 * fTemp3)) + (fSlow152 * fTemp5))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph31 = FAUSTFLOAT(fRec45[0]); + output31[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (0.02017333553791887 * ((fTemp1 + (fSlow155 * fTemp3)) + (fSlow156 * fTemp5))); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph32 = FAUSTFLOAT(fRec46[0]); + output32[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (0.02017333553791887 * ((fTemp1 + (fSlow159 * fTemp3)) + (fSlow160 * fTemp5))); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph33 = FAUSTFLOAT(fRec47[0]); + output33[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.02017333553791887 * ((fTemp1 + (fSlow163 * fTemp3)) + (fSlow164 * fTemp5))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph34 = FAUSTFLOAT(fRec48[0]); + output34[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (0.02017333553791887 * ((fTemp1 + (fSlow167 * fTemp3)) + (fSlow168 * fTemp5))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph35 = FAUSTFLOAT(fRec49[0]); + output35[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (0.02017333553791887 * ((fTemp1 + (fSlow171 * fTemp3)) + (fSlow172 * fTemp5))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph36 = FAUSTFLOAT(fRec50[0]); + output36[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (0.02017333553791887 * ((fTemp1 + (fSlow175 * fTemp3)) + (fSlow176 * fTemp5))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph37 = FAUSTFLOAT(fRec51[0]); + output37[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (0.02017333553791887 * ((fTemp1 + (fSlow178 * fTemp3)) + (fSlow179 * fTemp5))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph38 = FAUSTFLOAT(fRec52[0]); + output38[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.02017333553791887 * ((fTemp1 + (fSlow181 * fTemp3)) + (fSlow182 * fTemp5))); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph39 = FAUSTFLOAT(fRec53[0]); + output39[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (0.02017333553791887 * ((fTemp1 + (fSlow184 * fTemp3)) + (fSlow185 * fTemp5))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph40 = FAUSTFLOAT(fRec54[0]); + output40[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (0.02017333553791887 * ((fTemp1 + (fSlow187 * fTemp3)) + (fSlow188 * fTemp5))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph41 = FAUSTFLOAT(fRec55[0]); + output41[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (0.02017333553791887 * ((fTemp1 + (fSlow190 * fTemp3)) + (fSlow191 * fTemp5))); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph42 = FAUSTFLOAT(fRec56[0]); + output42[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.02017333553791887 * ((fTemp1 + (fSlow193 * fTemp3)) + (fSlow194 * fTemp5))); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph43 = FAUSTFLOAT(fRec57[0]); + output43[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (0.02017333553791887 * ((fTemp1 + (fSlow196 * fTemp3)) + (fSlow197 * fTemp5))); + fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph44 = FAUSTFLOAT(fRec58[0]); + output44[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * ((fTemp1 + (fSlow199 * fTemp3)) + (fSlow200 * fTemp5))); + fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph45 = FAUSTFLOAT(fRec59[0]); + output45[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (0.02017333553791887 * ((fTemp1 + (fSlow202 * fTemp3)) + (fSlow203 * fTemp5))); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph46 = FAUSTFLOAT(fRec60[0]); + output46[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (0.02017333553791887 * ((fTemp1 + (fSlow205 * fTemp3)) + (fSlow206 * fTemp5))); + fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph47 = FAUSTFLOAT(fRec61[0]); + output47[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (0.02017333553791887 * ((fTemp1 + (fSlow208 * fTemp3)) + (fSlow209 * fTemp5))); + fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph48 = FAUSTFLOAT(fRec62[0]); + output48[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (0.02017333553791887 * ((fTemp1 + (fSlow211 * fTemp3)) + (fSlow212 * fTemp5))); + fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph49 = FAUSTFLOAT(fRec63[0]); + output49[i] = FAUSTFLOAT(fTemp55); + fRec1[1] = fRec1[0]; + fRec4[1] = fRec4[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec8[1] = fRec8[0]; + fRec7[1] = fRec7[0]; + fVec0[1] = fVec0[0]; + fRec11[1] = fRec11[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec0[1] = fRec0[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec39[1] = fRec39[0]; + fRec40[1] = fRec40[0]; + fRec41[1] = fRec41[0]; + fRec42[1] = fRec42[0]; + fRec43[1] = fRec43[0]; + fRec44[1] = fRec44[0]; + fRec45[1] = fRec45[0]; + fRec46[1] = fRec46[0]; + fRec47[1] = fRec47[0]; + fRec48[1] = fRec48[0]; + fRec49[1] = fRec49[0]; + fRec50[1] = fRec50[0]; + fRec51[1] = fRec51[0]; + fRec52[1] = fRec52[0]; + fRec53[1] = fRec53[0]; + fRec54[1] = fRec54[0]; + fRec55[1] = fRec55[0]; + fRec56[1] = fRec56[0]; + fRec57[1] = fRec57[0]; + fRec58[1] = fRec58[0]; + fRec59[1] = fRec59[0]; + fRec60[1] = fRec60[0]; + fRec61[1] = fRec61[0]; + fRec62[1] = fRec62[0]; + fRec63[1] = fRec63[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev503.cpp b/source/HOAUGens/HOAPanLebedev503.cpp new file mode 100755 index 0000000000..8203eea0e3 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev503.cpp @@ -0,0 +1,2708 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAPanLebedev503" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double cos(double dummy0); +double sin(double dummy0); +double pow(double dummy0, double dummy1); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fCheckbox0; + double fConst2; + double fConst3; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider3; + double fRec3[2]; + double fRec4[2]; + double fRec2[2]; + double fRec1[2]; + double fRec6[2]; + double fRec5[2]; + FAUSTFLOAT fCheckbox2; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fRec10[2]; + double fRec11[2]; + double fRec9[2]; + double fRec12[2]; + double fVec0[2]; + double fRec13[2]; + double fRec14[2]; + double fRec8[2]; + double fRec7[2]; + double fRec17[2]; + double fRec18[2]; + double fRec16[2]; + double fRec19[2]; + double fRec15[2]; + FAUSTFLOAT fCheckbox3; + FAUSTFLOAT fCheckbox4; + double fConst8; + double fConst9; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec20[2]; + double fVec1[2]; + double fRec24[2]; + double fRec26[2]; + double fRec27[2]; + double fRec25[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec28[2]; + FAUSTFLOAT fVbargraph1; + double fRec29[2]; + FAUSTFLOAT fVbargraph2; + double fRec30[2]; + FAUSTFLOAT fVbargraph3; + double fRec31[2]; + FAUSTFLOAT fVbargraph4; + double fRec32[2]; + FAUSTFLOAT fVbargraph5; + double fRec33[2]; + FAUSTFLOAT fVbargraph6; + double fRec34[2]; + FAUSTFLOAT fVbargraph7; + double fRec35[2]; + FAUSTFLOAT fVbargraph8; + double fRec36[2]; + FAUSTFLOAT fVbargraph9; + double fRec37[2]; + FAUSTFLOAT fVbargraph10; + double fRec38[2]; + FAUSTFLOAT fVbargraph11; + double fRec39[2]; + FAUSTFLOAT fVbargraph12; + double fRec40[2]; + FAUSTFLOAT fVbargraph13; + double fRec41[2]; + FAUSTFLOAT fVbargraph14; + double fRec42[2]; + FAUSTFLOAT fVbargraph15; + double fRec43[2]; + FAUSTFLOAT fVbargraph16; + double fRec44[2]; + FAUSTFLOAT fVbargraph17; + double fRec45[2]; + FAUSTFLOAT fVbargraph18; + double fRec46[2]; + FAUSTFLOAT fVbargraph19; + double fRec47[2]; + FAUSTFLOAT fVbargraph20; + double fRec48[2]; + FAUSTFLOAT fVbargraph21; + double fRec49[2]; + FAUSTFLOAT fVbargraph22; + double fRec50[2]; + FAUSTFLOAT fVbargraph23; + double fRec51[2]; + FAUSTFLOAT fVbargraph24; + double fRec52[2]; + FAUSTFLOAT fVbargraph25; + double fRec53[2]; + FAUSTFLOAT fVbargraph26; + double fRec54[2]; + FAUSTFLOAT fVbargraph27; + double fRec55[2]; + FAUSTFLOAT fVbargraph28; + double fRec56[2]; + FAUSTFLOAT fVbargraph29; + double fRec57[2]; + FAUSTFLOAT fVbargraph30; + double fRec58[2]; + FAUSTFLOAT fVbargraph31; + double fRec59[2]; + FAUSTFLOAT fVbargraph32; + double fRec60[2]; + FAUSTFLOAT fVbargraph33; + double fRec61[2]; + FAUSTFLOAT fVbargraph34; + double fRec62[2]; + FAUSTFLOAT fVbargraph35; + double fRec63[2]; + FAUSTFLOAT fVbargraph36; + double fRec64[2]; + FAUSTFLOAT fVbargraph37; + double fRec65[2]; + FAUSTFLOAT fVbargraph38; + double fRec66[2]; + FAUSTFLOAT fVbargraph39; + double fRec67[2]; + FAUSTFLOAT fVbargraph40; + double fRec68[2]; + FAUSTFLOAT fVbargraph41; + double fRec69[2]; + FAUSTFLOAT fVbargraph42; + double fRec70[2]; + FAUSTFLOAT fVbargraph43; + double fRec71[2]; + FAUSTFLOAT fVbargraph44; + double fRec72[2]; + FAUSTFLOAT fVbargraph45; + double fRec73[2]; + FAUSTFLOAT fVbargraph46; + double fRec74[2]; + FAUSTFLOAT fVbargraph47; + double fRec75[2]; + FAUSTFLOAT fVbargraph48; + double fRec76[2]; + FAUSTFLOAT fVbargraph49; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev503"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (789.54302057287055 / fConst0); + fConst5 = (394.77151028643527 / fConst0); + fConst6 = (625.22848971356643 / fConst0); + fConst7 = (1250.4569794271329 / fConst0); + fConst8 = (510.0 / fConst0); + fConst9 = (1020.0 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + fCheckbox3 = FAUSTFLOAT(0.0); + fCheckbox4 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec3[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec1[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec10[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec11[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fVec0[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec13[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec14[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec8[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec7[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec17[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec18[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec15[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec22[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec23[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec21[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec20[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fVec1[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec26[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec27[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec25[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec0[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec28[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec29[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec30[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec31[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec32[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec33[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec34[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec35[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec36[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec37[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec38[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec39[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec40[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec41[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec42[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec43[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec44[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec45[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec46[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec47[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec48[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec49[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec50[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec51[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec52[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec53[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec54[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec55[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec56[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec57[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec58[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec59[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec60[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec61[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec62[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec63[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec64[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec65[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec66[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec67[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec68[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec69[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec70[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec71[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec72[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec73[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec74[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec75[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec76[l78] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev503"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider3, "0+1", ""); + ui_interface->declare(&fHslider3, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider3, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+2", ""); + ui_interface->declare(&fHslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider2, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider0, "0+3", ""); + ui_interface->declare(&fHslider0, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+4", ""); + ui_interface->declare(&fHslider1, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox1); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox3); + ui_interface->addCheckButton("1", &fCheckbox0); + ui_interface->addCheckButton("2", &fCheckbox4); + ui_interface->addCheckButton("3", &fCheckbox2); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34d4340", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34dcec0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34e66f0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34f0000", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34f99f0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3501a90", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x350a960", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3512fb0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x351b6e0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3523ef0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x352de20", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3537e30", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3541f20", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x354c0f0", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3554970", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x355d2d0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3565d10", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x356e830", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3578180", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3581250", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x358a400", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3593690", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x359c610", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35a5670", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35ae7b0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35b79d0", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35c0fd0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35c92a0", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35d1650", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35d9ae0", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35e31b0", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35ec1d0", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35f52d0", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35fe4b0", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3607770", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3610b10", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3619f90", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36234f0", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x362bd70", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36346d0", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x363d110", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3645c30", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x364e830", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3657510", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36602d0", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3669170", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36720f0", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x367b150", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3684290", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x368d4b0", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fHslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (6.123233995736766e-17 * fSlow4); + double fSlow6 = sin(fSlow2); + double fSlow7 = (fSlow5 + fSlow6); + double fSlow8 = (1.0 - double(fCheckbox0)); + double fSlow9 = (3.0 * fSlow8); + double fSlow10 = double(fHslider2); + double fSlow11 = (fConst3 / fSlow10); + double fSlow12 = (fSlow11 + 1.0); + double fSlow13 = (fConst2 / (fSlow12 * fSlow10)); + double fSlow14 = double(fEntry0); + double fSlow15 = (fConst3 / fSlow14); + double fSlow16 = (1.0 / (fSlow15 + 1.0)); + double fSlow17 = double(fCheckbox1); + double fSlow18 = (((fSlow12 * fSlow17) * fSlow14) / fSlow10); + double fSlow19 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider3)))); + double fSlow20 = (fConst2 / fSlow14); + double fSlow21 = (1.0 - fSlow17); + double fSlow22 = (fSlow21 * fSlow14); + double fSlow23 = mydsp_faustpower2_f(fSlow7); + double fSlow24 = (1.0 - double(fCheckbox2)); + double fSlow25 = (3.5 * (((5.0 * fSlow23) + -3.0) * fSlow24)); + double fSlow26 = ((fConst5 / fSlow10) + 1.0); + double fSlow27 = (fConst4 / (fSlow26 * fSlow10)); + double fSlow28 = (1.0 / ((fConst5 / fSlow14) + 1.0)); + double fSlow29 = mydsp_faustpower2_f(fSlow15); + double fSlow30 = (1.0 / (((fConst6 / fSlow14) + (6.4594326934833797 * fSlow29)) + 1.0)); + double fSlow31 = mydsp_faustpower2_f(fSlow11); + double fSlow32 = (((fConst6 / fSlow10) + (6.4594326934833797 * fSlow31)) + 1.0); + double fSlow33 = (((fSlow32 * fSlow17) * fSlow14) / fSlow10); + double fSlow34 = (25.837730773933519 * fSlow29); + double fSlow35 = (fSlow34 + (fConst7 / fSlow14)); + double fSlow36 = (1.0 / fSlow32); + double fSlow37 = (25.837730773933519 * fSlow31); + double fSlow38 = ((fConst7 / fSlow10) + fSlow37); + double fSlow39 = (fConst4 / fSlow14); + double fSlow40 = ((((fSlow17 / fSlow10) + fSlow21) * fSlow14) * (1.0 - double(fCheckbox3))); + double fSlow41 = (1.0 - double(fCheckbox4)); + double fSlow42 = (2.5 * (((3.0 * fSlow23) + -1.0) * fSlow41)); + double fSlow43 = (((fConst8 / fSlow10) + (3.0 * fSlow31)) + 1.0); + double fSlow44 = (1.0 / fSlow43); + double fSlow45 = (12.0 * fSlow31); + double fSlow46 = ((fConst9 / fSlow10) + fSlow45); + double fSlow47 = (1.0 / (((fConst8 / fSlow14) + (3.0 * fSlow29)) + 1.0)); + double fSlow48 = (((fSlow43 * fSlow17) * fSlow14) / fSlow10); + double fSlow49 = (12.0 * fSlow29); + double fSlow50 = (fSlow49 + (fConst9 / fSlow14)); + double fSlow51 = (3.0 * ((fSlow1 * fSlow8) * fSlow3)); + double fSlow52 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow4)) + -1.0) * fSlow41)); + double fSlow53 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow4)) - (3.0 * fSlow4)) * fSlow24)); + double fSlow54 = cos((fSlow0 + -1.5707963267948966)); + double fSlow55 = (3.0 * ((fSlow54 * fSlow8) * fSlow3)); + double fSlow56 = (fSlow54 * fSlow3); + double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow56)) + -1.0) * fSlow41)); + double fSlow58 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow56)) - (3.0 * fSlow56)) * fSlow24)); + double fSlow59 = cos((fSlow0 + -3.1415926535897931)); + double fSlow60 = (3.0 * ((fSlow59 * fSlow8) * fSlow3)); + double fSlow61 = (fSlow59 * fSlow3); + double fSlow62 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow61)) + -1.0) * fSlow41)); + double fSlow63 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow61)) - (3.0 * fSlow61)) * fSlow24)); + double fSlow64 = cos((fSlow0 + -4.7123889803846897)); + double fSlow65 = (3.0 * ((fSlow64 * fSlow8) * fSlow3)); + double fSlow66 = (fSlow64 * fSlow3); + double fSlow67 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow66)) + -1.0) * fSlow41)); + double fSlow68 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow66)) - (3.0 * fSlow66)) * fSlow24)); + double fSlow69 = (fSlow5 - fSlow6); + double fSlow70 = mydsp_faustpower2_f(fSlow69); + double fSlow71 = (3.5 * (((5.0 * fSlow70) + -3.0) * fSlow24)); + double fSlow72 = (2.5 * (((3.0 * fSlow70) + -1.0) * fSlow41)); + double fSlow73 = (0.70710678118654757 * fSlow4); + double fSlow74 = (0.70710678118654746 * fSlow6); + double fSlow75 = (fSlow73 + fSlow74); + double fSlow76 = mydsp_faustpower2_f(fSlow75); + double fSlow77 = (3.5 * (((5.0 * fSlow76) + -3.0) * fSlow24)); + double fSlow78 = (2.5 * (((3.0 * fSlow76) + -1.0) * fSlow41)); + double fSlow79 = (0.70710678118654757 * fSlow56); + double fSlow80 = (fSlow74 + fSlow79); + double fSlow81 = mydsp_faustpower2_f(fSlow80); + double fSlow82 = (3.5 * (((5.0 * fSlow81) + -3.0) * fSlow24)); + double fSlow83 = (2.5 * (((3.0 * fSlow81) + -1.0) * fSlow41)); + double fSlow84 = (0.70710678118654757 * fSlow61); + double fSlow85 = (fSlow74 + fSlow84); + double fSlow86 = mydsp_faustpower2_f(fSlow85); + double fSlow87 = (3.5 * (((5.0 * fSlow86) + -3.0) * fSlow24)); + double fSlow88 = (2.5 * (((3.0 * fSlow86) + -1.0) * fSlow41)); + double fSlow89 = (0.70710678118654757 * fSlow66); + double fSlow90 = (fSlow74 + fSlow89); + double fSlow91 = mydsp_faustpower2_f(fSlow90); + double fSlow92 = (3.5 * (((5.0 * fSlow91) + -3.0) * fSlow24)); + double fSlow93 = (2.5 * (((3.0 * fSlow91) + -1.0) * fSlow41)); + double fSlow94 = cos((fSlow0 + -0.78539816339744828)); + double fSlow95 = (3.0 * ((fSlow94 * fSlow8) * fSlow3)); + double fSlow96 = (fSlow94 * fSlow3); + double fSlow97 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow96)) + -1.0) * fSlow41)); + double fSlow98 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow96)) - (3.0 * fSlow96)) * fSlow24)); + double fSlow99 = cos((fSlow0 + -2.3561944901923448)); + double fSlow100 = (3.0 * ((fSlow99 * fSlow8) * fSlow3)); + double fSlow101 = (fSlow99 * fSlow3); + double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow101)) + -1.0) * fSlow41)); + double fSlow103 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow101)) - (3.0 * fSlow101)) * fSlow24)); + double fSlow104 = cos((fSlow0 + -3.9269908169872414)); + double fSlow105 = (3.0 * ((fSlow104 * fSlow8) * fSlow3)); + double fSlow106 = (fSlow104 * fSlow3); + double fSlow107 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow106)) + -1.0) * fSlow41)); + double fSlow108 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow106)) - (3.0 * fSlow106)) * fSlow24)); + double fSlow109 = cos((fSlow0 + -5.497787143782138)); + double fSlow110 = (3.0 * ((fSlow109 * fSlow8) * fSlow3)); + double fSlow111 = (fSlow109 * fSlow3); + double fSlow112 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow111)) + -1.0) * fSlow41)); + double fSlow113 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow111)) - (3.0 * fSlow111)) * fSlow24)); + double fSlow114 = (fSlow73 - fSlow74); + double fSlow115 = mydsp_faustpower2_f(fSlow114); + double fSlow116 = (3.5 * (((5.0 * fSlow115) + -3.0) * fSlow24)); + double fSlow117 = (2.5 * (((3.0 * fSlow115) + -1.0) * fSlow41)); + double fSlow118 = (fSlow79 - fSlow74); + double fSlow119 = mydsp_faustpower2_f(fSlow118); + double fSlow120 = (3.5 * (((5.0 * fSlow119) + -3.0) * fSlow24)); + double fSlow121 = (2.5 * (((3.0 * fSlow119) + -1.0) * fSlow41)); + double fSlow122 = (fSlow84 - fSlow74); + double fSlow123 = mydsp_faustpower2_f(fSlow122); + double fSlow124 = (3.5 * (((5.0 * fSlow123) + -3.0) * fSlow24)); + double fSlow125 = (2.5 * (((3.0 * fSlow123) + -1.0) * fSlow41)); + double fSlow126 = (fSlow89 - fSlow74); + double fSlow127 = mydsp_faustpower2_f(fSlow126); + double fSlow128 = (3.5 * (((5.0 * fSlow127) + -3.0) * fSlow24)); + double fSlow129 = (2.5 * (((3.0 * fSlow127) + -1.0) * fSlow41)); + double fSlow130 = (0.81649658092772592 * fSlow96); + double fSlow131 = (0.57735026918962584 * fSlow6); + double fSlow132 = (fSlow130 + fSlow131); + double fSlow133 = mydsp_faustpower2_f(fSlow132); + double fSlow134 = (3.5 * (((5.0 * fSlow133) + -3.0) * fSlow24)); + double fSlow135 = (2.5 * (((3.0 * fSlow133) + -1.0) * fSlow41)); + double fSlow136 = (0.81649658092772592 * fSlow101); + double fSlow137 = (fSlow131 + fSlow136); + double fSlow138 = mydsp_faustpower2_f(fSlow137); + double fSlow139 = (3.5 * (((5.0 * fSlow138) + -3.0) * fSlow24)); + double fSlow140 = (2.5 * (((3.0 * fSlow138) + -1.0) * fSlow41)); + double fSlow141 = (0.81649658092772592 * fSlow106); + double fSlow142 = (fSlow131 + fSlow141); + double fSlow143 = mydsp_faustpower2_f(fSlow142); + double fSlow144 = (3.5 * (((5.0 * fSlow143) + -3.0) * fSlow24)); + double fSlow145 = (2.5 * (((3.0 * fSlow143) + -1.0) * fSlow41)); + double fSlow146 = (0.81649658092772592 * fSlow111); + double fSlow147 = (fSlow131 + fSlow146); + double fSlow148 = mydsp_faustpower2_f(fSlow147); + double fSlow149 = (3.5 * (((5.0 * fSlow148) + -3.0) * fSlow24)); + double fSlow150 = (2.5 * (((3.0 * fSlow148) + -1.0) * fSlow41)); + double fSlow151 = (fSlow130 - fSlow131); + double fSlow152 = mydsp_faustpower2_f(fSlow151); + double fSlow153 = (3.5 * (((5.0 * fSlow152) + -3.0) * fSlow24)); + double fSlow154 = (2.5 * (((3.0 * fSlow152) + -1.0) * fSlow41)); + double fSlow155 = (fSlow136 - fSlow131); + double fSlow156 = mydsp_faustpower2_f(fSlow155); + double fSlow157 = (3.5 * (((5.0 * fSlow156) + -3.0) * fSlow24)); + double fSlow158 = (2.5 * (((3.0 * fSlow156) + -1.0) * fSlow41)); + double fSlow159 = (fSlow141 - fSlow131); + double fSlow160 = mydsp_faustpower2_f(fSlow159); + double fSlow161 = (3.5 * (((5.0 * fSlow160) + -3.0) * fSlow24)); + double fSlow162 = (2.5 * (((3.0 * fSlow160) + -1.0) * fSlow41)); + double fSlow163 = (fSlow146 - fSlow131); + double fSlow164 = mydsp_faustpower2_f(fSlow163); + double fSlow165 = (3.5 * (((5.0 * fSlow164) + -3.0) * fSlow24)); + double fSlow166 = (2.5 * (((3.0 * fSlow164) + -1.0) * fSlow41)); + double fSlow167 = (0.42640143271122027 * (cos((fSlow0 + -0.78539816339744839)) * fSlow3)); + double fSlow168 = (0.90453403373329111 * fSlow6); + double fSlow169 = (fSlow167 + fSlow168); + double fSlow170 = mydsp_faustpower2_f(fSlow169); + double fSlow171 = (3.5 * (((5.0 * fSlow170) + -3.0) * fSlow24)); + double fSlow172 = (2.5 * (((3.0 * fSlow170) + -1.0) * fSlow41)); + double fSlow173 = (0.42640143271122027 * fSlow101); + double fSlow174 = (fSlow168 + fSlow173); + double fSlow175 = mydsp_faustpower2_f(fSlow174); + double fSlow176 = (3.5 * (((5.0 * fSlow175) + -3.0) * fSlow24)); + double fSlow177 = (2.5 * (((3.0 * fSlow175) + -1.0) * fSlow41)); + double fSlow178 = (0.42640143271122027 * fSlow106); + double fSlow179 = (fSlow168 + fSlow178); + double fSlow180 = mydsp_faustpower2_f(fSlow179); + double fSlow181 = (3.5 * (((5.0 * fSlow180) + -3.0) * fSlow24)); + double fSlow182 = (2.5 * (((3.0 * fSlow180) + -1.0) * fSlow41)); + double fSlow183 = (0.42640143271122027 * fSlow111); + double fSlow184 = (fSlow168 + fSlow183); + double fSlow185 = mydsp_faustpower2_f(fSlow184); + double fSlow186 = (3.5 * (((5.0 * fSlow185) + -3.0) * fSlow24)); + double fSlow187 = (2.5 * (((3.0 * fSlow185) + -1.0) * fSlow41)); + double fSlow188 = (0.95346258924559235 * (cos((fSlow0 + -0.32175055439664263)) * fSlow3)); + double fSlow189 = (0.30151134457776352 * fSlow6); + double fSlow190 = (fSlow188 + fSlow189); + double fSlow191 = mydsp_faustpower2_f(fSlow190); + double fSlow192 = (3.5 * (((5.0 * fSlow191) + -3.0) * fSlow24)); + double fSlow193 = (2.5 * (((3.0 * fSlow191) + -1.0) * fSlow41)); + double fSlow194 = (0.95346258924559235 * (cos((fSlow0 + -1.2490457723982544)) * fSlow3)); + double fSlow195 = (fSlow189 + fSlow194); + double fSlow196 = mydsp_faustpower2_f(fSlow195); + double fSlow197 = (3.5 * (((5.0 * fSlow196) + -3.0) * fSlow24)); + double fSlow198 = (2.5 * (((3.0 * fSlow196) + -1.0) * fSlow41)); + double fSlow199 = (0.95346258924559235 * (cos((fSlow0 + -1.8925468811915387)) * fSlow3)); + double fSlow200 = (fSlow189 + fSlow199); + double fSlow201 = mydsp_faustpower2_f(fSlow200); + double fSlow202 = (3.5 * (((5.0 * fSlow201) + -3.0) * fSlow24)); + double fSlow203 = (2.5 * (((3.0 * fSlow201) + -1.0) * fSlow41)); + double fSlow204 = (0.95346258924559235 * (cos((fSlow0 + -2.8198420991931505)) * fSlow3)); + double fSlow205 = (fSlow189 + fSlow204); + double fSlow206 = mydsp_faustpower2_f(fSlow205); + double fSlow207 = (3.5 * (((5.0 * fSlow206) + -3.0) * fSlow24)); + double fSlow208 = (2.5 * (((3.0 * fSlow206) + -1.0) * fSlow41)); + double fSlow209 = (0.95346258924559235 * (cos((fSlow0 + -3.4633432079864357)) * fSlow3)); + double fSlow210 = (fSlow189 + fSlow209); + double fSlow211 = mydsp_faustpower2_f(fSlow210); + double fSlow212 = (3.5 * (((5.0 * fSlow211) + -3.0) * fSlow24)); + double fSlow213 = (2.5 * (((3.0 * fSlow211) + -1.0) * fSlow41)); + double fSlow214 = (0.95346258924559235 * (cos((fSlow0 + -4.3906384259880475)) * fSlow3)); + double fSlow215 = (fSlow189 + fSlow214); + double fSlow216 = mydsp_faustpower2_f(fSlow215); + double fSlow217 = (3.5 * (((5.0 * fSlow216) + -3.0) * fSlow24)); + double fSlow218 = (2.5 * (((3.0 * fSlow216) + -1.0) * fSlow41)); + double fSlow219 = (0.95346258924559235 * (cos((fSlow0 + -5.0341395347813318)) * fSlow3)); + double fSlow220 = (fSlow189 + fSlow219); + double fSlow221 = mydsp_faustpower2_f(fSlow220); + double fSlow222 = (3.5 * (((5.0 * fSlow221) + -3.0) * fSlow24)); + double fSlow223 = (2.5 * (((3.0 * fSlow221) + -1.0) * fSlow41)); + double fSlow224 = (0.95346258924559235 * (cos((fSlow0 + -5.9614347527829432)) * fSlow3)); + double fSlow225 = (fSlow189 + fSlow224); + double fSlow226 = mydsp_faustpower2_f(fSlow225); + double fSlow227 = (3.5 * (((5.0 * fSlow226) + -3.0) * fSlow24)); + double fSlow228 = (2.5 * (((3.0 * fSlow226) + -1.0) * fSlow41)); + double fSlow229 = (fSlow188 - fSlow189); + double fSlow230 = mydsp_faustpower2_f(fSlow229); + double fSlow231 = (3.5 * (((5.0 * fSlow230) + -3.0) * fSlow24)); + double fSlow232 = (2.5 * (((3.0 * fSlow230) + -1.0) * fSlow41)); + double fSlow233 = (fSlow194 - fSlow189); + double fSlow234 = mydsp_faustpower2_f(fSlow233); + double fSlow235 = (3.5 * (((5.0 * fSlow234) + -3.0) * fSlow24)); + double fSlow236 = (2.5 * (((3.0 * fSlow234) + -1.0) * fSlow41)); + double fSlow237 = (fSlow199 - fSlow189); + double fSlow238 = mydsp_faustpower2_f(fSlow237); + double fSlow239 = (3.5 * (((5.0 * fSlow238) + -3.0) * fSlow24)); + double fSlow240 = (2.5 * (((3.0 * fSlow238) + -1.0) * fSlow41)); + double fSlow241 = (fSlow204 - fSlow189); + double fSlow242 = mydsp_faustpower2_f(fSlow241); + double fSlow243 = (3.5 * (((5.0 * fSlow242) + -3.0) * fSlow24)); + double fSlow244 = (2.5 * (((3.0 * fSlow242) + -1.0) * fSlow41)); + double fSlow245 = (fSlow209 - fSlow189); + double fSlow246 = mydsp_faustpower2_f(fSlow245); + double fSlow247 = (3.5 * (((5.0 * fSlow246) + -3.0) * fSlow24)); + double fSlow248 = (2.5 * (((3.0 * fSlow246) + -1.0) * fSlow41)); + double fSlow249 = (fSlow214 - fSlow189); + double fSlow250 = mydsp_faustpower2_f(fSlow249); + double fSlow251 = (3.5 * (((5.0 * fSlow250) + -3.0) * fSlow24)); + double fSlow252 = (2.5 * (((3.0 * fSlow250) + -1.0) * fSlow41)); + double fSlow253 = (fSlow219 - fSlow189); + double fSlow254 = mydsp_faustpower2_f(fSlow253); + double fSlow255 = (3.5 * (((5.0 * fSlow254) + -3.0) * fSlow24)); + double fSlow256 = (2.5 * (((3.0 * fSlow254) + -1.0) * fSlow41)); + double fSlow257 = (fSlow224 - fSlow189); + double fSlow258 = mydsp_faustpower2_f(fSlow257); + double fSlow259 = (3.5 * (((5.0 * fSlow258) + -3.0) * fSlow24)); + double fSlow260 = (2.5 * (((3.0 * fSlow258) + -1.0) * fSlow41)); + double fSlow261 = (fSlow167 - fSlow168); + double fSlow262 = mydsp_faustpower2_f(fSlow261); + double fSlow263 = (3.5 * (((5.0 * fSlow262) + -3.0) * fSlow24)); + double fSlow264 = (2.5 * (((3.0 * fSlow262) + -1.0) * fSlow41)); + double fSlow265 = (fSlow173 - fSlow168); + double fSlow266 = mydsp_faustpower2_f(fSlow265); + double fSlow267 = (3.5 * (((5.0 * fSlow266) + -3.0) * fSlow24)); + double fSlow268 = (2.5 * (((3.0 * fSlow266) + -1.0) * fSlow41)); + double fSlow269 = (fSlow178 - fSlow168); + double fSlow270 = mydsp_faustpower2_f(fSlow269); + double fSlow271 = (3.5 * (((5.0 * fSlow270) + -3.0) * fSlow24)); + double fSlow272 = (2.5 * (((3.0 * fSlow270) + -1.0) * fSlow41)); + double fSlow273 = (fSlow183 - fSlow168); + double fSlow274 = mydsp_faustpower2_f(fSlow273); + double fSlow275 = (3.5 * (((5.0 * fSlow274) + -3.0) * fSlow24)); + double fSlow276 = (2.5 * (((3.0 * fSlow274) + -1.0) * fSlow41)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec3[0] = (fSlow19 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input0[i])); + fRec4[0] = (fRec4[1] + fRec2[1]); + fRec2[0] = (fSlow16 * ((fSlow18 * fTemp0) - (fSlow20 * fRec4[0]))); + fRec1[0] = (fRec2[0] + fRec1[1]); + double fTemp1 = (fSlow22 * fTemp0); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow16 * (fTemp1 - (fSlow20 * fRec6[0]))); + double fTemp2 = ((fSlow13 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0])); + double fTemp3 = (fSlow9 * fTemp2); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec11[0] = (fRec11[1] + fRec10[1]); + fRec9[0] = (fSlow30 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec10[0]) + (fSlow34 * fRec11[0])))); + fRec12[0] = (fRec9[0] + fRec12[1]); + double fTemp4 = (fRec12[0] - fRec9[0]); + fVec0[0] = fTemp4; + fRec13[0] = (fRec13[1] + fVec0[1]); + fRec14[0] = (fRec14[1] + fRec8[1]); + fRec8[0] = (fSlow28 * ((fSlow26 * (fRec9[0] + (fSlow36 * ((fSlow38 * fTemp4) + (fSlow37 * fRec13[0]))))) - (fSlow39 * fRec14[0]))); + fRec7[0] = (fRec8[0] + fRec7[1]); + fRec17[0] = (fRec17[1] + fRec16[1]); + fRec18[0] = (fRec18[1] + fRec17[1]); + fRec16[0] = (fSlow30 * (fTemp1 - ((fSlow35 * fRec17[0]) + (fSlow34 * fRec18[0])))); + fRec19[0] = (fRec19[1] + fRec15[1]); + fRec15[0] = (fSlow28 * (fRec16[0] - (fSlow39 * fRec19[0]))); + double fTemp5 = ((fSlow27 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); + double fTemp6 = (fSlow40 * fTemp0); + fRec22[0] = (fRec22[1] + fRec21[1]); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec21[0] = (fSlow47 * ((fSlow48 * fTemp0) - ((fSlow50 * fRec22[0]) + (fSlow49 * fRec23[0])))); + fRec20[0] = (fRec21[0] + fRec20[1]); + double fTemp7 = (fRec20[0] - fRec21[0]); + fVec1[0] = fTemp7; + fRec24[0] = (fRec24[1] + fVec1[1]); + fRec26[0] = (fRec26[1] + fRec25[1]); + fRec27[0] = (fRec27[1] + fRec26[1]); + fRec25[0] = (fSlow47 * (fTemp1 - ((fSlow50 * fRec26[0]) + (fSlow49 * fRec27[0])))); + double fTemp8 = ((fSlow44 * ((fSlow46 * fTemp7) + (fSlow45 * fRec24[0]))) + (fRec21[0] + fRec25[0])); + double fTemp9 = (0.012698412698412698 * ((fSlow7 * (fTemp3 + (fSlow25 * fTemp5))) + (fTemp6 + (fSlow42 * fTemp8)))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (0.012698412698412698 * (((fTemp6 + (fSlow51 * fTemp2)) + (fSlow52 * fTemp8)) + (fSlow53 * fTemp5))); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph1 = FAUSTFLOAT(fRec28[0]); + output1[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (0.012698412698412698 * (((fTemp6 + (fSlow55 * fTemp2)) + (fSlow57 * fTemp8)) + (fSlow58 * fTemp5))); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph2 = FAUSTFLOAT(fRec29[0]); + output2[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.012698412698412698 * (((fTemp6 + (fSlow60 * fTemp2)) + (fSlow62 * fTemp8)) + (fSlow63 * fTemp5))); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph3 = FAUSTFLOAT(fRec30[0]); + output3[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.012698412698412698 * (((fTemp6 + (fSlow65 * fTemp2)) + (fSlow67 * fTemp8)) + (fSlow68 * fTemp5))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph4 = FAUSTFLOAT(fRec31[0]); + output4[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.012698412698412698 * ((fSlow69 * (fTemp3 + (fSlow71 * fTemp5))) + (fTemp6 + (fSlow72 * fTemp8)))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph5 = FAUSTFLOAT(fRec32[0]); + output5[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.022574955908289243 * ((fSlow75 * (fTemp3 + (fSlow77 * fTemp5))) + (fTemp6 + (fSlow78 * fTemp8)))); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph6 = FAUSTFLOAT(fRec33[0]); + output6[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.022574955908289243 * ((fSlow80 * (fTemp3 + (fSlow82 * fTemp5))) + (fTemp6 + (fSlow83 * fTemp8)))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph7 = FAUSTFLOAT(fRec34[0]); + output7[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.022574955908289243 * ((fSlow85 * (fTemp3 + (fSlow87 * fTemp5))) + (fTemp6 + (fSlow88 * fTemp8)))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph8 = FAUSTFLOAT(fRec35[0]); + output8[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.022574955908289243 * ((fSlow90 * (fTemp3 + (fSlow92 * fTemp5))) + (fTemp6 + (fSlow93 * fTemp8)))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph9 = FAUSTFLOAT(fRec36[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.022574955908289243 * (((fTemp6 + (fSlow95 * fTemp2)) + (fSlow97 * fTemp8)) + (fSlow98 * fTemp5))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph10 = FAUSTFLOAT(fRec37[0]); + output10[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.022574955908289243 * (((fTemp6 + (fSlow100 * fTemp2)) + (fSlow102 * fTemp8)) + (fSlow103 * fTemp5))); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph11 = FAUSTFLOAT(fRec38[0]); + output11[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.022574955908289243 * (((fTemp6 + (fSlow105 * fTemp2)) + (fSlow107 * fTemp8)) + (fSlow108 * fTemp5))); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph12 = FAUSTFLOAT(fRec39[0]); + output12[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.022574955908289243 * (((fTemp6 + (fSlow110 * fTemp2)) + (fSlow112 * fTemp8)) + (fSlow113 * fTemp5))); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph13 = FAUSTFLOAT(fRec40[0]); + output13[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.022574955908289243 * ((fSlow114 * (fTemp3 + (fSlow116 * fTemp5))) + (fTemp6 + (fSlow117 * fTemp8)))); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph14 = FAUSTFLOAT(fRec41[0]); + output14[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.022574955908289243 * ((fSlow118 * (fTemp3 + (fSlow120 * fTemp5))) + (fTemp6 + (fSlow121 * fTemp8)))); + fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph15 = FAUSTFLOAT(fRec42[0]); + output15[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.022574955908289243 * ((fSlow122 * (fTemp3 + (fSlow124 * fTemp5))) + (fTemp6 + (fSlow125 * fTemp8)))); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph16 = FAUSTFLOAT(fRec43[0]); + output16[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.022574955908289243 * ((fSlow126 * (fTemp3 + (fSlow128 * fTemp5))) + (fTemp6 + (fSlow129 * fTemp8)))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph17 = FAUSTFLOAT(fRec44[0]); + output17[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.021093750000000001 * ((fSlow132 * (fTemp3 + (fSlow134 * fTemp5))) + (fTemp6 + (fSlow135 * fTemp8)))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph18 = FAUSTFLOAT(fRec45[0]); + output18[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.021093750000000001 * ((fSlow137 * (fTemp3 + (fSlow139 * fTemp5))) + (fTemp6 + (fSlow140 * fTemp8)))); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph19 = FAUSTFLOAT(fRec46[0]); + output19[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.021093750000000001 * ((fSlow142 * (fTemp3 + (fSlow144 * fTemp5))) + (fTemp6 + (fSlow145 * fTemp8)))); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph20 = FAUSTFLOAT(fRec47[0]); + output20[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.021093750000000001 * ((fSlow147 * (fTemp3 + (fSlow149 * fTemp5))) + (fTemp6 + (fSlow150 * fTemp8)))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph21 = FAUSTFLOAT(fRec48[0]); + output21[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.021093750000000001 * ((fSlow151 * (fTemp3 + (fSlow153 * fTemp5))) + (fTemp6 + (fSlow154 * fTemp8)))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph22 = FAUSTFLOAT(fRec49[0]); + output22[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.021093750000000001 * ((fSlow155 * (fTemp3 + (fSlow157 * fTemp5))) + (fTemp6 + (fSlow158 * fTemp8)))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph23 = FAUSTFLOAT(fRec50[0]); + output23[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.021093750000000001 * ((fSlow159 * (fTemp3 + (fSlow161 * fTemp5))) + (fTemp6 + (fSlow162 * fTemp8)))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph24 = FAUSTFLOAT(fRec51[0]); + output24[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.021093750000000001 * ((fSlow163 * (fTemp3 + (fSlow165 * fTemp5))) + (fTemp6 + (fSlow166 * fTemp8)))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph25 = FAUSTFLOAT(fRec52[0]); + output25[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (0.02017333553791887 * ((fSlow169 * (fTemp3 + (fSlow171 * fTemp5))) + (fTemp6 + (fSlow172 * fTemp8)))); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph26 = FAUSTFLOAT(fRec53[0]); + output26[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (0.02017333553791887 * ((fSlow174 * (fTemp3 + (fSlow176 * fTemp5))) + (fTemp6 + (fSlow177 * fTemp8)))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph27 = FAUSTFLOAT(fRec54[0]); + output27[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (0.02017333553791887 * ((fSlow179 * (fTemp3 + (fSlow181 * fTemp5))) + (fTemp6 + (fSlow182 * fTemp8)))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph28 = FAUSTFLOAT(fRec55[0]); + output28[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (0.02017333553791887 * ((fSlow184 * (fTemp3 + (fSlow186 * fTemp5))) + (fTemp6 + (fSlow187 * fTemp8)))); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph29 = FAUSTFLOAT(fRec56[0]); + output29[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (0.02017333553791887 * ((fSlow190 * (fTemp3 + (fSlow192 * fTemp5))) + (fTemp6 + (fSlow193 * fTemp8)))); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph30 = FAUSTFLOAT(fRec57[0]); + output30[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.02017333553791887 * ((fSlow195 * (fTemp3 + (fSlow197 * fTemp5))) + (fTemp6 + (fSlow198 * fTemp8)))); + fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph31 = FAUSTFLOAT(fRec58[0]); + output31[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (0.02017333553791887 * ((fSlow200 * (fTemp3 + (fSlow202 * fTemp5))) + (fTemp6 + (fSlow203 * fTemp8)))); + fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph32 = FAUSTFLOAT(fRec59[0]); + output32[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (0.02017333553791887 * ((fSlow205 * (fTemp3 + (fSlow207 * fTemp5))) + (fTemp6 + (fSlow208 * fTemp8)))); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph33 = FAUSTFLOAT(fRec60[0]); + output33[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (0.02017333553791887 * ((fSlow210 * (fTemp3 + (fSlow212 * fTemp5))) + (fTemp6 + (fSlow213 * fTemp8)))); + fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph34 = FAUSTFLOAT(fRec61[0]); + output34[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (0.02017333553791887 * ((fSlow215 * (fTemp3 + (fSlow217 * fTemp5))) + (fTemp6 + (fSlow218 * fTemp8)))); + fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph35 = FAUSTFLOAT(fRec62[0]); + output35[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.02017333553791887 * ((fSlow220 * (fTemp3 + (fSlow222 * fTemp5))) + (fTemp6 + (fSlow223 * fTemp8)))); + fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph36 = FAUSTFLOAT(fRec63[0]); + output36[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (0.02017333553791887 * ((fSlow225 * (fTemp3 + (fSlow227 * fTemp5))) + (fTemp6 + (fSlow228 * fTemp8)))); + fRec64[0] = max((fRec64[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph37 = FAUSTFLOAT(fRec64[0]); + output37[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (0.02017333553791887 * ((fSlow229 * (fTemp3 + (fSlow231 * fTemp5))) + (fTemp6 + (fSlow232 * fTemp8)))); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph38 = FAUSTFLOAT(fRec65[0]); + output38[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (0.02017333553791887 * ((fSlow233 * (fTemp3 + (fSlow235 * fTemp5))) + (fTemp6 + (fSlow236 * fTemp8)))); + fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph39 = FAUSTFLOAT(fRec66[0]); + output39[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.02017333553791887 * ((fSlow237 * (fTemp3 + (fSlow239 * fTemp5))) + (fTemp6 + (fSlow240 * fTemp8)))); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph40 = FAUSTFLOAT(fRec67[0]); + output40[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (0.02017333553791887 * ((fSlow241 * (fTemp3 + (fSlow243 * fTemp5))) + (fTemp6 + (fSlow244 * fTemp8)))); + fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph41 = FAUSTFLOAT(fRec68[0]); + output41[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * ((fSlow245 * (fTemp3 + (fSlow247 * fTemp5))) + (fTemp6 + (fSlow248 * fTemp8)))); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph42 = FAUSTFLOAT(fRec69[0]); + output42[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (0.02017333553791887 * ((fSlow249 * (fTemp3 + (fSlow251 * fTemp5))) + (fTemp6 + (fSlow252 * fTemp8)))); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph43 = FAUSTFLOAT(fRec70[0]); + output43[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (0.02017333553791887 * ((fSlow253 * (fTemp3 + (fSlow255 * fTemp5))) + (fTemp6 + (fSlow256 * fTemp8)))); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph44 = FAUSTFLOAT(fRec71[0]); + output44[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (0.02017333553791887 * ((fSlow257 * (fTemp3 + (fSlow259 * fTemp5))) + (fTemp6 + (fSlow260 * fTemp8)))); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph45 = FAUSTFLOAT(fRec72[0]); + output45[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (0.02017333553791887 * ((fSlow261 * (fTemp3 + (fSlow263 * fTemp5))) + (fTemp6 + (fSlow264 * fTemp8)))); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph46 = FAUSTFLOAT(fRec73[0]); + output46[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (0.02017333553791887 * ((fSlow265 * (fTemp3 + (fSlow267 * fTemp5))) + (fTemp6 + (fSlow268 * fTemp8)))); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph47 = FAUSTFLOAT(fRec74[0]); + output47[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (0.02017333553791887 * ((fSlow269 * (fTemp3 + (fSlow271 * fTemp5))) + (fTemp6 + (fSlow272 * fTemp8)))); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph48 = FAUSTFLOAT(fRec75[0]); + output48[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (0.02017333553791887 * ((fSlow273 * (fTemp3 + (fSlow275 * fTemp5))) + (fTemp6 + (fSlow276 * fTemp8)))); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph49 = FAUSTFLOAT(fRec76[0]); + output49[i] = FAUSTFLOAT(fTemp58); + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; + fRec1[1] = fRec1[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec9[1] = fRec9[0]; + fRec12[1] = fRec12[0]; + fVec0[1] = fVec0[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec8[1] = fRec8[0]; + fRec7[1] = fRec7[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec15[1] = fRec15[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fVec1[1] = fVec1[0]; + fRec24[1] = fRec24[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec25[1] = fRec25[0]; + fRec0[1] = fRec0[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec39[1] = fRec39[0]; + fRec40[1] = fRec40[0]; + fRec41[1] = fRec41[0]; + fRec42[1] = fRec42[0]; + fRec43[1] = fRec43[0]; + fRec44[1] = fRec44[0]; + fRec45[1] = fRec45[0]; + fRec46[1] = fRec46[0]; + fRec47[1] = fRec47[0]; + fRec48[1] = fRec48[0]; + fRec49[1] = fRec49[0]; + fRec50[1] = fRec50[0]; + fRec51[1] = fRec51[0]; + fRec52[1] = fRec52[0]; + fRec53[1] = fRec53[0]; + fRec54[1] = fRec54[0]; + fRec55[1] = fRec55[0]; + fRec56[1] = fRec56[0]; + fRec57[1] = fRec57[0]; + fRec58[1] = fRec58[0]; + fRec59[1] = fRec59[0]; + fRec60[1] = fRec60[0]; + fRec61[1] = fRec61[0]; + fRec62[1] = fRec62[0]; + fRec63[1] = fRec63[0]; + fRec64[1] = fRec64[0]; + fRec65[1] = fRec65[0]; + fRec66[1] = fRec66[0]; + fRec67[1] = fRec67[0]; + fRec68[1] = fRec68[0]; + fRec69[1] = fRec69[0]; + fRec70[1] = fRec70[0]; + fRec71[1] = fRec71[0]; + fRec72[1] = fRec72[0]; + fRec73[1] = fRec73[0]; + fRec74[1] = fRec74[0]; + fRec75[1] = fRec75[0]; + fRec76[1] = fRec76[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev504.cpp b/source/HOAUGens/HOAPanLebedev504.cpp new file mode 100755 index 0000000000..f57f984617 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev504.cpp @@ -0,0 +1,2922 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAPanLebedev504" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double cos(double dummy0); +double sin(double dummy0); +double pow(double dummy0, double dummy1); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fCheckbox0; + double fConst2; + double fConst3; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider3; + double fRec3[2]; + double fRec4[2]; + double fRec2[2]; + double fRec1[2]; + double fRec6[2]; + double fRec5[2]; + FAUSTFLOAT fCheckbox2; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fRec10[2]; + double fRec11[2]; + double fRec9[2]; + double fRec12[2]; + double fVec0[2]; + double fRec13[2]; + double fRec14[2]; + double fRec8[2]; + double fRec7[2]; + double fRec17[2]; + double fRec18[2]; + double fRec16[2]; + double fRec19[2]; + double fRec15[2]; + FAUSTFLOAT fCheckbox3; + FAUSTFLOAT fCheckbox4; + double fConst8; + double fConst9; + double fRec22[2]; + double fRec23[2]; + double fRec21[2]; + double fRec20[2]; + double fVec1[2]; + double fRec24[2]; + double fRec26[2]; + double fRec27[2]; + double fRec25[2]; + FAUSTFLOAT fCheckbox5; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fRec31[2]; + double fRec32[2]; + double fRec30[2]; + double fRec33[2]; + double fVec2[2]; + double fRec34[2]; + double fRec35[2]; + double fRec36[2]; + double fRec29[2]; + double fRec28[2]; + double fVec3[2]; + double fRec37[2]; + double fRec40[2]; + double fRec41[2]; + double fRec39[2]; + double fRec42[2]; + double fRec43[2]; + double fRec38[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec44[2]; + FAUSTFLOAT fVbargraph1; + double fRec45[2]; + FAUSTFLOAT fVbargraph2; + double fRec46[2]; + FAUSTFLOAT fVbargraph3; + double fRec47[2]; + FAUSTFLOAT fVbargraph4; + double fRec48[2]; + FAUSTFLOAT fVbargraph5; + double fRec49[2]; + FAUSTFLOAT fVbargraph6; + double fRec50[2]; + FAUSTFLOAT fVbargraph7; + double fRec51[2]; + FAUSTFLOAT fVbargraph8; + double fRec52[2]; + FAUSTFLOAT fVbargraph9; + double fRec53[2]; + FAUSTFLOAT fVbargraph10; + double fRec54[2]; + FAUSTFLOAT fVbargraph11; + double fRec55[2]; + FAUSTFLOAT fVbargraph12; + double fRec56[2]; + FAUSTFLOAT fVbargraph13; + double fRec57[2]; + FAUSTFLOAT fVbargraph14; + double fRec58[2]; + FAUSTFLOAT fVbargraph15; + double fRec59[2]; + FAUSTFLOAT fVbargraph16; + double fRec60[2]; + FAUSTFLOAT fVbargraph17; + double fRec61[2]; + FAUSTFLOAT fVbargraph18; + double fRec62[2]; + FAUSTFLOAT fVbargraph19; + double fRec63[2]; + FAUSTFLOAT fVbargraph20; + double fRec64[2]; + FAUSTFLOAT fVbargraph21; + double fRec65[2]; + FAUSTFLOAT fVbargraph22; + double fRec66[2]; + FAUSTFLOAT fVbargraph23; + double fRec67[2]; + FAUSTFLOAT fVbargraph24; + double fRec68[2]; + FAUSTFLOAT fVbargraph25; + double fRec69[2]; + FAUSTFLOAT fVbargraph26; + double fRec70[2]; + FAUSTFLOAT fVbargraph27; + double fRec71[2]; + FAUSTFLOAT fVbargraph28; + double fRec72[2]; + FAUSTFLOAT fVbargraph29; + double fRec73[2]; + FAUSTFLOAT fVbargraph30; + double fRec74[2]; + FAUSTFLOAT fVbargraph31; + double fRec75[2]; + FAUSTFLOAT fVbargraph32; + double fRec76[2]; + FAUSTFLOAT fVbargraph33; + double fRec77[2]; + FAUSTFLOAT fVbargraph34; + double fRec78[2]; + FAUSTFLOAT fVbargraph35; + double fRec79[2]; + FAUSTFLOAT fVbargraph36; + double fRec80[2]; + FAUSTFLOAT fVbargraph37; + double fRec81[2]; + FAUSTFLOAT fVbargraph38; + double fRec82[2]; + FAUSTFLOAT fVbargraph39; + double fRec83[2]; + FAUSTFLOAT fVbargraph40; + double fRec84[2]; + FAUSTFLOAT fVbargraph41; + double fRec85[2]; + FAUSTFLOAT fVbargraph42; + double fRec86[2]; + FAUSTFLOAT fVbargraph43; + double fRec87[2]; + FAUSTFLOAT fVbargraph44; + double fRec88[2]; + FAUSTFLOAT fVbargraph45; + double fRec89[2]; + FAUSTFLOAT fVbargraph46; + double fRec90[2]; + FAUSTFLOAT fVbargraph47; + double fRec91[2]; + FAUSTFLOAT fVbargraph48; + double fRec92[2]; + FAUSTFLOAT fVbargraph49; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev504"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (789.54302057287055 / fConst0); + fConst5 = (394.77151028643527 / fConst0); + fConst6 = (625.22848971356643 / fConst0); + fConst7 = (1250.4569794271329 / fConst0); + fConst8 = (510.0 / fConst0); + fConst9 = (1020.0 / fConst0); + fConst10 = (984.71160495892411 / fConst0); + fConst11 = (1969.4232099178482 / fConst0); + fConst12 = (715.28839504107589 / fConst0); + fConst13 = (1430.5767900821518 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + fCheckbox3 = FAUSTFLOAT(0.0); + fCheckbox4 = FAUSTFLOAT(0.0); + fCheckbox5 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec3[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec1[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec10[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec11[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fVec0[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec13[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec14[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec8[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec7[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec17[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec18[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec15[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec22[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec23[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec21[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec20[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fVec1[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec26[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec27[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec25[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec31[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec32[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fVec2[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec29[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec28[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fVec3[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec37[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec41[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec39[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec42[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec43[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec38[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec0[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec44[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec45[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec46[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec47[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec48[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec49[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec50[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec51[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec52[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec53[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec54[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec55[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec56[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec57[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec58[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec59[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec60[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec61[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec62[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec63[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec64[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec65[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec66[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec67[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec68[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec69[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec70[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec71[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec72[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec73[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec74[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec75[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec76[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec77[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec78[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec79[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec80[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec81[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec82[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec83[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec84[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec85[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec86[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec87[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec88[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec89[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec90[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec91[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec92[l96] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev504"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider3, "0+1", ""); + ui_interface->declare(&fHslider3, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider3, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+2", ""); + ui_interface->declare(&fHslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider2, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider0, "0+3", ""); + ui_interface->declare(&fHslider0, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+4", ""); + ui_interface->declare(&fHslider1, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox1); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox3); + ui_interface->addCheckButton("1", &fCheckbox0); + ui_interface->addCheckButton("2", &fCheckbox4); + ui_interface->addCheckButton("3", &fCheckbox2); + ui_interface->addCheckButton("4", &fCheckbox5); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3611fb0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x361bf70", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3626be0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3631930", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x363c760", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3645a30", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x364fb30", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36593b0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3662d10", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x366c750", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3677ac0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3682f10", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x368e440", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3699a50", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a3500", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36ad090", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36b6d00", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36c0a50", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36cb5d0", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36d58d0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36dfcb0", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36ea170", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36f4320", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36fe5b0", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3708920", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3712d70", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x371d5a0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3726aa0", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3730080", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3739740", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3744040", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x374e290", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37585c0", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37629d0", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x376cec0", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3777490", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3781b40", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x378c2d0", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3795d80", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x379f910", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37a9580", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37b32d0", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37bd100", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37c7010", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37d1000", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37db0d0", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37e5280", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37ef510", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37f9880", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3803cd0", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fHslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (6.123233995736766e-17 * fSlow4); + double fSlow6 = sin(fSlow2); + double fSlow7 = (fSlow5 + fSlow6); + double fSlow8 = (1.0 - double(fCheckbox0)); + double fSlow9 = (3.0 * fSlow8); + double fSlow10 = double(fHslider2); + double fSlow11 = (fConst3 / fSlow10); + double fSlow12 = (fSlow11 + 1.0); + double fSlow13 = (fConst2 / (fSlow12 * fSlow10)); + double fSlow14 = double(fEntry0); + double fSlow15 = (fConst3 / fSlow14); + double fSlow16 = (1.0 / (fSlow15 + 1.0)); + double fSlow17 = double(fCheckbox1); + double fSlow18 = (((fSlow12 * fSlow17) * fSlow14) / fSlow10); + double fSlow19 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider3)))); + double fSlow20 = (fConst2 / fSlow14); + double fSlow21 = (1.0 - fSlow17); + double fSlow22 = (fSlow21 * fSlow14); + double fSlow23 = mydsp_faustpower2_f(fSlow7); + double fSlow24 = (1.0 - double(fCheckbox2)); + double fSlow25 = (3.5 * (((5.0 * fSlow23) + -3.0) * fSlow24)); + double fSlow26 = ((fConst5 / fSlow10) + 1.0); + double fSlow27 = (fConst4 / (fSlow26 * fSlow10)); + double fSlow28 = (1.0 / ((fConst5 / fSlow14) + 1.0)); + double fSlow29 = mydsp_faustpower2_f(fSlow15); + double fSlow30 = (1.0 / (((fConst6 / fSlow14) + (6.4594326934833797 * fSlow29)) + 1.0)); + double fSlow31 = mydsp_faustpower2_f(fSlow11); + double fSlow32 = (((fConst6 / fSlow10) + (6.4594326934833797 * fSlow31)) + 1.0); + double fSlow33 = (((fSlow32 * fSlow17) * fSlow14) / fSlow10); + double fSlow34 = (25.837730773933519 * fSlow29); + double fSlow35 = (fSlow34 + (fConst7 / fSlow14)); + double fSlow36 = (1.0 / fSlow32); + double fSlow37 = (25.837730773933519 * fSlow31); + double fSlow38 = ((fConst7 / fSlow10) + fSlow37); + double fSlow39 = (fConst4 / fSlow14); + double fSlow40 = ((((fSlow17 / fSlow10) + fSlow21) * fSlow14) * (1.0 - double(fCheckbox3))); + double fSlow41 = (1.0 - double(fCheckbox4)); + double fSlow42 = (2.5 * (((3.0 * fSlow23) + -1.0) * fSlow41)); + double fSlow43 = (((fConst8 / fSlow10) + (3.0 * fSlow31)) + 1.0); + double fSlow44 = (1.0 / fSlow43); + double fSlow45 = (12.0 * fSlow31); + double fSlow46 = ((fConst9 / fSlow10) + fSlow45); + double fSlow47 = (1.0 / (((fConst8 / fSlow14) + (3.0 * fSlow29)) + 1.0)); + double fSlow48 = (((fSlow43 * fSlow17) * fSlow14) / fSlow10); + double fSlow49 = (12.0 * fSlow29); + double fSlow50 = (fSlow49 + (fConst9 / fSlow14)); + double fSlow51 = (1.0 - double(fCheckbox5)); + double fSlow52 = (1.125 * (((fSlow23 * ((35.0 * fSlow23) + -30.0)) + 3.0) * fSlow51)); + double fSlow53 = (((fConst10 / fSlow10) + (9.1401308902779004 * fSlow31)) + 1.0); + double fSlow54 = (1.0 / fSlow53); + double fSlow55 = (36.560523561111602 * fSlow31); + double fSlow56 = ((fConst11 / fSlow10) + fSlow55); + double fSlow57 = (1.0 / (((fConst10 / fSlow14) + (9.1401308902779004 * fSlow29)) + 1.0)); + double fSlow58 = (1.0 / (((fConst12 / fSlow14) + (11.4878004768713 * fSlow29)) + 1.0)); + double fSlow59 = (((fConst12 / fSlow10) + (11.4878004768713 * fSlow31)) + 1.0); + double fSlow60 = (((fSlow59 * fSlow17) * fSlow14) / fSlow10); + double fSlow61 = (45.951201907485199 * fSlow29); + double fSlow62 = (fSlow61 + (fConst13 / fSlow14)); + double fSlow63 = (1.0 / fSlow59); + double fSlow64 = (45.951201907485199 * fSlow31); + double fSlow65 = ((fConst13 / fSlow10) + fSlow64); + double fSlow66 = (36.560523561111602 * fSlow29); + double fSlow67 = (fSlow66 + (fConst11 / fSlow14)); + double fSlow68 = (3.0 * ((fSlow1 * fSlow8) * fSlow3)); + double fSlow69 = mydsp_faustpower2_f(fSlow4); + double fSlow70 = (2.5 * (((3.0 * fSlow69) + -1.0) * fSlow41)); + double fSlow71 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow4)) - (3.0 * fSlow4)) * fSlow24)); + double fSlow72 = (1.125 * (((fSlow69 * ((35.0 * fSlow69) + -30.0)) + 3.0) * fSlow51)); + double fSlow73 = cos((fSlow0 + -1.5707963267948966)); + double fSlow74 = (3.0 * ((fSlow73 * fSlow8) * fSlow3)); + double fSlow75 = (fSlow73 * fSlow3); + double fSlow76 = mydsp_faustpower2_f(fSlow75); + double fSlow77 = (2.5 * (((3.0 * fSlow76) + -1.0) * fSlow41)); + double fSlow78 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow75)) - (3.0 * fSlow75)) * fSlow24)); + double fSlow79 = (1.125 * (((fSlow76 * ((35.0 * fSlow76) + -30.0)) + 3.0) * fSlow51)); + double fSlow80 = cos((fSlow0 + -3.1415926535897931)); + double fSlow81 = (3.0 * ((fSlow80 * fSlow8) * fSlow3)); + double fSlow82 = (fSlow80 * fSlow3); + double fSlow83 = mydsp_faustpower2_f(fSlow82); + double fSlow84 = (2.5 * (((3.0 * fSlow83) + -1.0) * fSlow41)); + double fSlow85 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow82)) - (3.0 * fSlow82)) * fSlow24)); + double fSlow86 = (1.125 * (((fSlow83 * ((35.0 * fSlow83) + -30.0)) + 3.0) * fSlow51)); + double fSlow87 = cos((fSlow0 + -4.7123889803846897)); + double fSlow88 = (3.0 * ((fSlow87 * fSlow8) * fSlow3)); + double fSlow89 = (fSlow87 * fSlow3); + double fSlow90 = mydsp_faustpower2_f(fSlow89); + double fSlow91 = (2.5 * (((3.0 * fSlow90) + -1.0) * fSlow41)); + double fSlow92 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow89)) - (3.0 * fSlow89)) * fSlow24)); + double fSlow93 = (1.125 * (((fSlow90 * ((35.0 * fSlow90) + -30.0)) + 3.0) * fSlow51)); + double fSlow94 = (fSlow5 - fSlow6); + double fSlow95 = mydsp_faustpower2_f(fSlow94); + double fSlow96 = (3.5 * (((5.0 * fSlow95) + -3.0) * fSlow24)); + double fSlow97 = (2.5 * (((3.0 * fSlow95) + -1.0) * fSlow41)); + double fSlow98 = (1.125 * (((fSlow95 * ((35.0 * fSlow95) + -30.0)) + 3.0) * fSlow51)); + double fSlow99 = (0.70710678118654757 * fSlow4); + double fSlow100 = (0.70710678118654746 * fSlow6); + double fSlow101 = (fSlow99 + fSlow100); + double fSlow102 = mydsp_faustpower2_f(fSlow101); + double fSlow103 = (3.5 * (((5.0 * fSlow102) + -3.0) * fSlow24)); + double fSlow104 = (2.5 * (((3.0 * fSlow102) + -1.0) * fSlow41)); + double fSlow105 = (1.125 * (((fSlow102 * ((35.0 * fSlow102) + -30.0)) + 3.0) * fSlow51)); + double fSlow106 = (0.70710678118654757 * fSlow75); + double fSlow107 = (fSlow100 + fSlow106); + double fSlow108 = mydsp_faustpower2_f(fSlow107); + double fSlow109 = (3.5 * (((5.0 * fSlow108) + -3.0) * fSlow24)); + double fSlow110 = (2.5 * (((3.0 * fSlow108) + -1.0) * fSlow41)); + double fSlow111 = (1.125 * (((fSlow108 * ((35.0 * fSlow108) + -30.0)) + 3.0) * fSlow51)); + double fSlow112 = (0.70710678118654757 * fSlow82); + double fSlow113 = (fSlow100 + fSlow112); + double fSlow114 = mydsp_faustpower2_f(fSlow113); + double fSlow115 = (3.5 * (((5.0 * fSlow114) + -3.0) * fSlow24)); + double fSlow116 = (2.5 * (((3.0 * fSlow114) + -1.0) * fSlow41)); + double fSlow117 = (1.125 * (((fSlow114 * ((35.0 * fSlow114) + -30.0)) + 3.0) * fSlow51)); + double fSlow118 = (0.70710678118654757 * fSlow89); + double fSlow119 = (fSlow100 + fSlow118); + double fSlow120 = mydsp_faustpower2_f(fSlow119); + double fSlow121 = (3.5 * (((5.0 * fSlow120) + -3.0) * fSlow24)); + double fSlow122 = (2.5 * (((3.0 * fSlow120) + -1.0) * fSlow41)); + double fSlow123 = (1.125 * (((fSlow120 * ((35.0 * fSlow120) + -30.0)) + 3.0) * fSlow51)); + double fSlow124 = cos((fSlow0 + -0.78539816339744828)); + double fSlow125 = (3.0 * ((fSlow124 * fSlow8) * fSlow3)); + double fSlow126 = (fSlow124 * fSlow3); + double fSlow127 = mydsp_faustpower2_f(fSlow126); + double fSlow128 = (2.5 * (((3.0 * fSlow127) + -1.0) * fSlow41)); + double fSlow129 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow126)) - (3.0 * fSlow126)) * fSlow24)); + double fSlow130 = (1.125 * (((fSlow127 * ((35.0 * fSlow127) + -30.0)) + 3.0) * fSlow51)); + double fSlow131 = cos((fSlow0 + -2.3561944901923448)); + double fSlow132 = (3.0 * ((fSlow131 * fSlow8) * fSlow3)); + double fSlow133 = (fSlow131 * fSlow3); + double fSlow134 = mydsp_faustpower2_f(fSlow133); + double fSlow135 = (2.5 * (((3.0 * fSlow134) + -1.0) * fSlow41)); + double fSlow136 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow133)) - (3.0 * fSlow133)) * fSlow24)); + double fSlow137 = (1.125 * (((fSlow134 * ((35.0 * fSlow134) + -30.0)) + 3.0) * fSlow51)); + double fSlow138 = cos((fSlow0 + -3.9269908169872414)); + double fSlow139 = (3.0 * ((fSlow138 * fSlow8) * fSlow3)); + double fSlow140 = (fSlow138 * fSlow3); + double fSlow141 = mydsp_faustpower2_f(fSlow140); + double fSlow142 = (2.5 * (((3.0 * fSlow141) + -1.0) * fSlow41)); + double fSlow143 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow140)) - (3.0 * fSlow140)) * fSlow24)); + double fSlow144 = (1.125 * (((fSlow141 * ((35.0 * fSlow141) + -30.0)) + 3.0) * fSlow51)); + double fSlow145 = cos((fSlow0 + -5.497787143782138)); + double fSlow146 = (3.0 * ((fSlow145 * fSlow8) * fSlow3)); + double fSlow147 = (fSlow145 * fSlow3); + double fSlow148 = mydsp_faustpower2_f(fSlow147); + double fSlow149 = (2.5 * (((3.0 * fSlow148) + -1.0) * fSlow41)); + double fSlow150 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow147)) - (3.0 * fSlow147)) * fSlow24)); + double fSlow151 = (1.125 * (((fSlow148 * ((35.0 * fSlow148) + -30.0)) + 3.0) * fSlow51)); + double fSlow152 = (fSlow99 - fSlow100); + double fSlow153 = mydsp_faustpower2_f(fSlow152); + double fSlow154 = (3.5 * (((5.0 * fSlow153) + -3.0) * fSlow24)); + double fSlow155 = (2.5 * (((3.0 * fSlow153) + -1.0) * fSlow41)); + double fSlow156 = (1.125 * (((fSlow153 * ((35.0 * fSlow153) + -30.0)) + 3.0) * fSlow51)); + double fSlow157 = (fSlow106 - fSlow100); + double fSlow158 = mydsp_faustpower2_f(fSlow157); + double fSlow159 = (3.5 * (((5.0 * fSlow158) + -3.0) * fSlow24)); + double fSlow160 = (2.5 * (((3.0 * fSlow158) + -1.0) * fSlow41)); + double fSlow161 = (1.125 * (((fSlow158 * ((35.0 * fSlow158) + -30.0)) + 3.0) * fSlow51)); + double fSlow162 = (fSlow112 - fSlow100); + double fSlow163 = mydsp_faustpower2_f(fSlow162); + double fSlow164 = (3.5 * (((5.0 * fSlow163) + -3.0) * fSlow24)); + double fSlow165 = (2.5 * (((3.0 * fSlow163) + -1.0) * fSlow41)); + double fSlow166 = (1.125 * (((fSlow163 * ((35.0 * fSlow163) + -30.0)) + 3.0) * fSlow51)); + double fSlow167 = (fSlow118 - fSlow100); + double fSlow168 = mydsp_faustpower2_f(fSlow167); + double fSlow169 = (3.5 * (((5.0 * fSlow168) + -3.0) * fSlow24)); + double fSlow170 = (2.5 * (((3.0 * fSlow168) + -1.0) * fSlow41)); + double fSlow171 = (1.125 * (((fSlow168 * ((35.0 * fSlow168) + -30.0)) + 3.0) * fSlow51)); + double fSlow172 = (0.81649658092772592 * fSlow126); + double fSlow173 = (0.57735026918962584 * fSlow6); + double fSlow174 = (fSlow172 + fSlow173); + double fSlow175 = mydsp_faustpower2_f(fSlow174); + double fSlow176 = (3.5 * (((5.0 * fSlow175) + -3.0) * fSlow24)); + double fSlow177 = (2.5 * (((3.0 * fSlow175) + -1.0) * fSlow41)); + double fSlow178 = (1.125 * (((fSlow175 * ((35.0 * fSlow175) + -30.0)) + 3.0) * fSlow51)); + double fSlow179 = (0.81649658092772592 * fSlow133); + double fSlow180 = (fSlow173 + fSlow179); + double fSlow181 = mydsp_faustpower2_f(fSlow180); + double fSlow182 = (3.5 * (((5.0 * fSlow181) + -3.0) * fSlow24)); + double fSlow183 = (2.5 * (((3.0 * fSlow181) + -1.0) * fSlow41)); + double fSlow184 = (1.125 * (((fSlow181 * ((35.0 * fSlow181) + -30.0)) + 3.0) * fSlow51)); + double fSlow185 = (0.81649658092772592 * fSlow140); + double fSlow186 = (fSlow173 + fSlow185); + double fSlow187 = mydsp_faustpower2_f(fSlow186); + double fSlow188 = (3.5 * (((5.0 * fSlow187) + -3.0) * fSlow24)); + double fSlow189 = (2.5 * (((3.0 * fSlow187) + -1.0) * fSlow41)); + double fSlow190 = (1.125 * (((fSlow187 * ((35.0 * fSlow187) + -30.0)) + 3.0) * fSlow51)); + double fSlow191 = (0.81649658092772592 * fSlow147); + double fSlow192 = (fSlow173 + fSlow191); + double fSlow193 = mydsp_faustpower2_f(fSlow192); + double fSlow194 = (3.5 * (((5.0 * fSlow193) + -3.0) * fSlow24)); + double fSlow195 = (2.5 * (((3.0 * fSlow193) + -1.0) * fSlow41)); + double fSlow196 = (1.125 * (((fSlow193 * ((35.0 * fSlow193) + -30.0)) + 3.0) * fSlow51)); + double fSlow197 = (fSlow172 - fSlow173); + double fSlow198 = mydsp_faustpower2_f(fSlow197); + double fSlow199 = (3.5 * (((5.0 * fSlow198) + -3.0) * fSlow24)); + double fSlow200 = (2.5 * (((3.0 * fSlow198) + -1.0) * fSlow41)); + double fSlow201 = (1.125 * (((fSlow198 * ((35.0 * fSlow198) + -30.0)) + 3.0) * fSlow51)); + double fSlow202 = (fSlow179 - fSlow173); + double fSlow203 = mydsp_faustpower2_f(fSlow202); + double fSlow204 = (3.5 * (((5.0 * fSlow203) + -3.0) * fSlow24)); + double fSlow205 = (2.5 * (((3.0 * fSlow203) + -1.0) * fSlow41)); + double fSlow206 = (1.125 * (((fSlow203 * ((35.0 * fSlow203) + -30.0)) + 3.0) * fSlow51)); + double fSlow207 = (fSlow185 - fSlow173); + double fSlow208 = mydsp_faustpower2_f(fSlow207); + double fSlow209 = (3.5 * (((5.0 * fSlow208) + -3.0) * fSlow24)); + double fSlow210 = (2.5 * (((3.0 * fSlow208) + -1.0) * fSlow41)); + double fSlow211 = (1.125 * (((fSlow208 * ((35.0 * fSlow208) + -30.0)) + 3.0) * fSlow51)); + double fSlow212 = (fSlow191 - fSlow173); + double fSlow213 = mydsp_faustpower2_f(fSlow212); + double fSlow214 = (3.5 * (((5.0 * fSlow213) + -3.0) * fSlow24)); + double fSlow215 = (2.5 * (((3.0 * fSlow213) + -1.0) * fSlow41)); + double fSlow216 = (1.125 * (((fSlow213 * ((35.0 * fSlow213) + -30.0)) + 3.0) * fSlow51)); + double fSlow217 = (0.42640143271122027 * (cos((fSlow0 + -0.78539816339744839)) * fSlow3)); + double fSlow218 = (0.90453403373329111 * fSlow6); + double fSlow219 = (fSlow217 + fSlow218); + double fSlow220 = mydsp_faustpower2_f(fSlow219); + double fSlow221 = (3.5 * (((5.0 * fSlow220) + -3.0) * fSlow24)); + double fSlow222 = (2.5 * (((3.0 * fSlow220) + -1.0) * fSlow41)); + double fSlow223 = (1.125 * (((fSlow220 * ((35.0 * fSlow220) + -30.0)) + 3.0) * fSlow51)); + double fSlow224 = (0.42640143271122027 * fSlow133); + double fSlow225 = (fSlow218 + fSlow224); + double fSlow226 = mydsp_faustpower2_f(fSlow225); + double fSlow227 = (3.5 * (((5.0 * fSlow226) + -3.0) * fSlow24)); + double fSlow228 = (2.5 * (((3.0 * fSlow226) + -1.0) * fSlow41)); + double fSlow229 = (1.125 * (((fSlow226 * ((35.0 * fSlow226) + -30.0)) + 3.0) * fSlow51)); + double fSlow230 = (0.42640143271122027 * fSlow140); + double fSlow231 = (fSlow218 + fSlow230); + double fSlow232 = mydsp_faustpower2_f(fSlow231); + double fSlow233 = (3.5 * (((5.0 * fSlow232) + -3.0) * fSlow24)); + double fSlow234 = (2.5 * (((3.0 * fSlow232) + -1.0) * fSlow41)); + double fSlow235 = (1.125 * (((fSlow232 * ((35.0 * fSlow232) + -30.0)) + 3.0) * fSlow51)); + double fSlow236 = (0.42640143271122027 * fSlow147); + double fSlow237 = (fSlow218 + fSlow236); + double fSlow238 = mydsp_faustpower2_f(fSlow237); + double fSlow239 = (3.5 * (((5.0 * fSlow238) + -3.0) * fSlow24)); + double fSlow240 = (2.5 * (((3.0 * fSlow238) + -1.0) * fSlow41)); + double fSlow241 = (1.125 * (((fSlow238 * ((35.0 * fSlow238) + -30.0)) + 3.0) * fSlow51)); + double fSlow242 = (0.95346258924559235 * (cos((fSlow0 + -0.32175055439664263)) * fSlow3)); + double fSlow243 = (0.30151134457776352 * fSlow6); + double fSlow244 = (fSlow242 + fSlow243); + double fSlow245 = mydsp_faustpower2_f(fSlow244); + double fSlow246 = (3.5 * (((5.0 * fSlow245) + -3.0) * fSlow24)); + double fSlow247 = (2.5 * (((3.0 * fSlow245) + -1.0) * fSlow41)); + double fSlow248 = (1.125 * (((fSlow245 * ((35.0 * fSlow245) + -30.0)) + 3.0) * fSlow51)); + double fSlow249 = (0.95346258924559235 * (cos((fSlow0 + -1.2490457723982544)) * fSlow3)); + double fSlow250 = (fSlow243 + fSlow249); + double fSlow251 = mydsp_faustpower2_f(fSlow250); + double fSlow252 = (3.5 * (((5.0 * fSlow251) + -3.0) * fSlow24)); + double fSlow253 = (2.5 * (((3.0 * fSlow251) + -1.0) * fSlow41)); + double fSlow254 = (1.125 * (((fSlow251 * ((35.0 * fSlow251) + -30.0)) + 3.0) * fSlow51)); + double fSlow255 = (0.95346258924559235 * (cos((fSlow0 + -1.8925468811915387)) * fSlow3)); + double fSlow256 = (fSlow243 + fSlow255); + double fSlow257 = mydsp_faustpower2_f(fSlow256); + double fSlow258 = (3.5 * (((5.0 * fSlow257) + -3.0) * fSlow24)); + double fSlow259 = (2.5 * (((3.0 * fSlow257) + -1.0) * fSlow41)); + double fSlow260 = (1.125 * (((fSlow257 * ((35.0 * fSlow257) + -30.0)) + 3.0) * fSlow51)); + double fSlow261 = (0.95346258924559235 * (cos((fSlow0 + -2.8198420991931505)) * fSlow3)); + double fSlow262 = (fSlow243 + fSlow261); + double fSlow263 = mydsp_faustpower2_f(fSlow262); + double fSlow264 = (3.5 * (((5.0 * fSlow263) + -3.0) * fSlow24)); + double fSlow265 = (2.5 * (((3.0 * fSlow263) + -1.0) * fSlow41)); + double fSlow266 = (1.125 * (((fSlow263 * ((35.0 * fSlow263) + -30.0)) + 3.0) * fSlow51)); + double fSlow267 = (0.95346258924559235 * (cos((fSlow0 + -3.4633432079864357)) * fSlow3)); + double fSlow268 = (fSlow243 + fSlow267); + double fSlow269 = mydsp_faustpower2_f(fSlow268); + double fSlow270 = (3.5 * (((5.0 * fSlow269) + -3.0) * fSlow24)); + double fSlow271 = (2.5 * (((3.0 * fSlow269) + -1.0) * fSlow41)); + double fSlow272 = (1.125 * (((fSlow269 * ((35.0 * fSlow269) + -30.0)) + 3.0) * fSlow51)); + double fSlow273 = (0.95346258924559235 * (cos((fSlow0 + -4.3906384259880475)) * fSlow3)); + double fSlow274 = (fSlow243 + fSlow273); + double fSlow275 = mydsp_faustpower2_f(fSlow274); + double fSlow276 = (3.5 * (((5.0 * fSlow275) + -3.0) * fSlow24)); + double fSlow277 = (2.5 * (((3.0 * fSlow275) + -1.0) * fSlow41)); + double fSlow278 = (1.125 * (((fSlow275 * ((35.0 * fSlow275) + -30.0)) + 3.0) * fSlow51)); + double fSlow279 = (0.95346258924559235 * (cos((fSlow0 + -5.0341395347813318)) * fSlow3)); + double fSlow280 = (fSlow243 + fSlow279); + double fSlow281 = mydsp_faustpower2_f(fSlow280); + double fSlow282 = (3.5 * (((5.0 * fSlow281) + -3.0) * fSlow24)); + double fSlow283 = (2.5 * (((3.0 * fSlow281) + -1.0) * fSlow41)); + double fSlow284 = (1.125 * (((fSlow281 * ((35.0 * fSlow281) + -30.0)) + 3.0) * fSlow51)); + double fSlow285 = (0.95346258924559235 * (cos((fSlow0 + -5.9614347527829432)) * fSlow3)); + double fSlow286 = (fSlow243 + fSlow285); + double fSlow287 = mydsp_faustpower2_f(fSlow286); + double fSlow288 = (3.5 * (((5.0 * fSlow287) + -3.0) * fSlow24)); + double fSlow289 = (2.5 * (((3.0 * fSlow287) + -1.0) * fSlow41)); + double fSlow290 = (1.125 * (((fSlow287 * ((35.0 * fSlow287) + -30.0)) + 3.0) * fSlow51)); + double fSlow291 = (fSlow242 - fSlow243); + double fSlow292 = mydsp_faustpower2_f(fSlow291); + double fSlow293 = (3.5 * (((5.0 * fSlow292) + -3.0) * fSlow24)); + double fSlow294 = (2.5 * (((3.0 * fSlow292) + -1.0) * fSlow41)); + double fSlow295 = (1.125 * (((fSlow292 * ((35.0 * fSlow292) + -30.0)) + 3.0) * fSlow51)); + double fSlow296 = (fSlow249 - fSlow243); + double fSlow297 = mydsp_faustpower2_f(fSlow296); + double fSlow298 = (3.5 * (((5.0 * fSlow297) + -3.0) * fSlow24)); + double fSlow299 = (2.5 * (((3.0 * fSlow297) + -1.0) * fSlow41)); + double fSlow300 = (1.125 * (((fSlow297 * ((35.0 * fSlow297) + -30.0)) + 3.0) * fSlow51)); + double fSlow301 = (fSlow255 - fSlow243); + double fSlow302 = mydsp_faustpower2_f(fSlow301); + double fSlow303 = (3.5 * (((5.0 * fSlow302) + -3.0) * fSlow24)); + double fSlow304 = (2.5 * (((3.0 * fSlow302) + -1.0) * fSlow41)); + double fSlow305 = (1.125 * (((fSlow302 * ((35.0 * fSlow302) + -30.0)) + 3.0) * fSlow51)); + double fSlow306 = (fSlow261 - fSlow243); + double fSlow307 = mydsp_faustpower2_f(fSlow306); + double fSlow308 = (3.5 * (((5.0 * fSlow307) + -3.0) * fSlow24)); + double fSlow309 = (2.5 * (((3.0 * fSlow307) + -1.0) * fSlow41)); + double fSlow310 = (1.125 * (((fSlow307 * ((35.0 * fSlow307) + -30.0)) + 3.0) * fSlow51)); + double fSlow311 = (fSlow267 - fSlow243); + double fSlow312 = mydsp_faustpower2_f(fSlow311); + double fSlow313 = (3.5 * (((5.0 * fSlow312) + -3.0) * fSlow24)); + double fSlow314 = (2.5 * (((3.0 * fSlow312) + -1.0) * fSlow41)); + double fSlow315 = (1.125 * (((fSlow312 * ((35.0 * fSlow312) + -30.0)) + 3.0) * fSlow51)); + double fSlow316 = (fSlow273 - fSlow243); + double fSlow317 = mydsp_faustpower2_f(fSlow316); + double fSlow318 = (3.5 * (((5.0 * fSlow317) + -3.0) * fSlow24)); + double fSlow319 = (2.5 * (((3.0 * fSlow317) + -1.0) * fSlow41)); + double fSlow320 = (1.125 * (((fSlow317 * ((35.0 * fSlow317) + -30.0)) + 3.0) * fSlow51)); + double fSlow321 = (fSlow279 - fSlow243); + double fSlow322 = mydsp_faustpower2_f(fSlow321); + double fSlow323 = (3.5 * (((5.0 * fSlow322) + -3.0) * fSlow24)); + double fSlow324 = (2.5 * (((3.0 * fSlow322) + -1.0) * fSlow41)); + double fSlow325 = (1.125 * (((fSlow322 * ((35.0 * fSlow322) + -30.0)) + 3.0) * fSlow51)); + double fSlow326 = (fSlow285 - fSlow243); + double fSlow327 = mydsp_faustpower2_f(fSlow326); + double fSlow328 = (3.5 * (((5.0 * fSlow327) + -3.0) * fSlow24)); + double fSlow329 = (2.5 * (((3.0 * fSlow327) + -1.0) * fSlow41)); + double fSlow330 = (1.125 * (((fSlow327 * ((35.0 * fSlow327) + -30.0)) + 3.0) * fSlow51)); + double fSlow331 = (fSlow217 - fSlow218); + double fSlow332 = mydsp_faustpower2_f(fSlow331); + double fSlow333 = (3.5 * (((5.0 * fSlow332) + -3.0) * fSlow24)); + double fSlow334 = (2.5 * (((3.0 * fSlow332) + -1.0) * fSlow41)); + double fSlow335 = (1.125 * (((fSlow332 * ((35.0 * fSlow332) + -30.0)) + 3.0) * fSlow51)); + double fSlow336 = (fSlow224 - fSlow218); + double fSlow337 = mydsp_faustpower2_f(fSlow336); + double fSlow338 = (3.5 * (((5.0 * fSlow337) + -3.0) * fSlow24)); + double fSlow339 = (2.5 * (((3.0 * fSlow337) + -1.0) * fSlow41)); + double fSlow340 = (1.125 * (((fSlow337 * ((35.0 * fSlow337) + -30.0)) + 3.0) * fSlow51)); + double fSlow341 = (fSlow230 - fSlow218); + double fSlow342 = mydsp_faustpower2_f(fSlow341); + double fSlow343 = (3.5 * (((5.0 * fSlow342) + -3.0) * fSlow24)); + double fSlow344 = (2.5 * (((3.0 * fSlow342) + -1.0) * fSlow41)); + double fSlow345 = (1.125 * (((fSlow342 * ((35.0 * fSlow342) + -30.0)) + 3.0) * fSlow51)); + double fSlow346 = (fSlow236 - fSlow218); + double fSlow347 = mydsp_faustpower2_f(fSlow346); + double fSlow348 = (3.5 * (((5.0 * fSlow347) + -3.0) * fSlow24)); + double fSlow349 = (2.5 * (((3.0 * fSlow347) + -1.0) * fSlow41)); + double fSlow350 = (1.125 * (((fSlow347 * ((35.0 * fSlow347) + -30.0)) + 3.0) * fSlow51)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec3[0] = (fSlow19 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input0[i])); + fRec4[0] = (fRec4[1] + fRec2[1]); + fRec2[0] = (fSlow16 * ((fSlow18 * fTemp0) - (fSlow20 * fRec4[0]))); + fRec1[0] = (fRec2[0] + fRec1[1]); + double fTemp1 = (fSlow22 * fTemp0); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow16 * (fTemp1 - (fSlow20 * fRec6[0]))); + double fTemp2 = ((fSlow13 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0])); + double fTemp3 = (fSlow9 * fTemp2); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec11[0] = (fRec11[1] + fRec10[1]); + fRec9[0] = (fSlow30 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec10[0]) + (fSlow34 * fRec11[0])))); + fRec12[0] = (fRec9[0] + fRec12[1]); + double fTemp4 = (fRec12[0] - fRec9[0]); + fVec0[0] = fTemp4; + fRec13[0] = (fRec13[1] + fVec0[1]); + fRec14[0] = (fRec14[1] + fRec8[1]); + fRec8[0] = (fSlow28 * ((fSlow26 * (fRec9[0] + (fSlow36 * ((fSlow38 * fTemp4) + (fSlow37 * fRec13[0]))))) - (fSlow39 * fRec14[0]))); + fRec7[0] = (fRec8[0] + fRec7[1]); + fRec17[0] = (fRec17[1] + fRec16[1]); + fRec18[0] = (fRec18[1] + fRec17[1]); + fRec16[0] = (fSlow30 * (fTemp1 - ((fSlow35 * fRec17[0]) + (fSlow34 * fRec18[0])))); + fRec19[0] = (fRec19[1] + fRec15[1]); + fRec15[0] = (fSlow28 * (fRec16[0] - (fSlow39 * fRec19[0]))); + double fTemp5 = ((fSlow27 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); + double fTemp6 = (fSlow40 * fTemp0); + fRec22[0] = (fRec22[1] + fRec21[1]); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec21[0] = (fSlow47 * ((fSlow48 * fTemp0) - ((fSlow50 * fRec22[0]) + (fSlow49 * fRec23[0])))); + fRec20[0] = (fRec21[0] + fRec20[1]); + double fTemp7 = (fRec20[0] - fRec21[0]); + fVec1[0] = fTemp7; + fRec24[0] = (fRec24[1] + fVec1[1]); + fRec26[0] = (fRec26[1] + fRec25[1]); + fRec27[0] = (fRec27[1] + fRec26[1]); + fRec25[0] = (fSlow47 * (fTemp1 - ((fSlow50 * fRec26[0]) + (fSlow49 * fRec27[0])))); + double fTemp8 = ((fSlow44 * ((fSlow46 * fTemp7) + (fSlow45 * fRec24[0]))) + (fRec21[0] + fRec25[0])); + fRec31[0] = (fRec31[1] + fRec30[1]); + fRec32[0] = (fRec32[1] + fRec31[1]); + fRec30[0] = (fSlow58 * ((fSlow60 * fTemp0) - ((fSlow62 * fRec31[0]) + (fSlow61 * fRec32[0])))); + fRec33[0] = (fRec30[0] + fRec33[1]); + double fTemp9 = (fRec33[0] - fRec30[0]); + fVec2[0] = fTemp9; + fRec34[0] = (fRec34[1] + fVec2[1]); + fRec35[0] = (fRec35[1] + fRec29[1]); + fRec36[0] = (fRec36[1] + fRec35[1]); + fRec29[0] = (fSlow57 * ((fSlow53 * (fRec30[0] + (fSlow63 * ((fSlow65 * fTemp9) + (fSlow64 * fRec34[0]))))) - ((fSlow67 * fRec35[0]) + (fSlow66 * fRec36[0])))); + fRec28[0] = (fRec29[0] + fRec28[1]); + double fTemp10 = (fRec28[0] - fRec29[0]); + fVec3[0] = fTemp10; + fRec37[0] = (fRec37[1] + fVec3[1]); + fRec40[0] = (fRec40[1] + fRec39[1]); + fRec41[0] = (fRec41[1] + fRec40[1]); + fRec39[0] = (fSlow58 * (fTemp1 - ((fSlow62 * fRec40[0]) + (fSlow61 * fRec41[0])))); + fRec42[0] = (fRec42[1] + fRec38[1]); + fRec43[0] = (fRec43[1] + fRec42[1]); + fRec38[0] = (fSlow57 * (fRec39[0] - ((fSlow67 * fRec42[0]) + (fSlow66 * fRec43[0])))); + double fTemp11 = ((fSlow54 * ((fSlow56 * fTemp10) + (fSlow55 * fRec37[0]))) + (fRec29[0] + fRec38[0])); + double fTemp12 = (0.012698412698412698 * (((fSlow7 * (fTemp3 + (fSlow25 * fTemp5))) + (fTemp6 + (fSlow42 * fTemp8))) + (fSlow52 * fTemp11))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.012698412698412698 * ((((fTemp6 + (fSlow68 * fTemp2)) + (fSlow70 * fTemp8)) + (fSlow71 * fTemp5)) + (fSlow72 * fTemp11))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph1 = FAUSTFLOAT(fRec44[0]); + output1[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.012698412698412698 * ((((fTemp6 + (fSlow74 * fTemp2)) + (fSlow77 * fTemp8)) + (fSlow78 * fTemp5)) + (fSlow79 * fTemp11))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph2 = FAUSTFLOAT(fRec45[0]); + output2[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.012698412698412698 * ((((fTemp6 + (fSlow81 * fTemp2)) + (fSlow84 * fTemp8)) + (fSlow85 * fTemp5)) + (fSlow86 * fTemp11))); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph3 = FAUSTFLOAT(fRec46[0]); + output3[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.012698412698412698 * ((((fTemp6 + (fSlow88 * fTemp2)) + (fSlow91 * fTemp8)) + (fSlow92 * fTemp5)) + (fSlow93 * fTemp11))); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph4 = FAUSTFLOAT(fRec47[0]); + output4[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.012698412698412698 * (((fSlow94 * (fTemp3 + (fSlow96 * fTemp5))) + (fTemp6 + (fSlow97 * fTemp8))) + (fSlow98 * fTemp11))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph5 = FAUSTFLOAT(fRec48[0]); + output5[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.022574955908289243 * (((fSlow101 * (fTemp3 + (fSlow103 * fTemp5))) + (fTemp6 + (fSlow104 * fTemp8))) + (fSlow105 * fTemp11))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph6 = FAUSTFLOAT(fRec49[0]); + output6[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.022574955908289243 * (((fSlow107 * (fTemp3 + (fSlow109 * fTemp5))) + (fTemp6 + (fSlow110 * fTemp8))) + (fSlow111 * fTemp11))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph7 = FAUSTFLOAT(fRec50[0]); + output7[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.022574955908289243 * (((fSlow113 * (fTemp3 + (fSlow115 * fTemp5))) + (fTemp6 + (fSlow116 * fTemp8))) + (fSlow117 * fTemp11))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph8 = FAUSTFLOAT(fRec51[0]); + output8[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.022574955908289243 * (((fSlow119 * (fTemp3 + (fSlow121 * fTemp5))) + (fTemp6 + (fSlow122 * fTemp8))) + (fSlow123 * fTemp11))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph9 = FAUSTFLOAT(fRec52[0]); + output9[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.022574955908289243 * ((((fTemp6 + (fSlow125 * fTemp2)) + (fSlow128 * fTemp8)) + (fSlow129 * fTemp5)) + (fSlow130 * fTemp11))); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph10 = FAUSTFLOAT(fRec53[0]); + output10[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.022574955908289243 * ((((fTemp6 + (fSlow132 * fTemp2)) + (fSlow135 * fTemp8)) + (fSlow136 * fTemp5)) + (fSlow137 * fTemp11))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph11 = FAUSTFLOAT(fRec54[0]); + output11[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.022574955908289243 * ((((fTemp6 + (fSlow139 * fTemp2)) + (fSlow142 * fTemp8)) + (fSlow143 * fTemp5)) + (fSlow144 * fTemp11))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph12 = FAUSTFLOAT(fRec55[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.022574955908289243 * ((((fTemp6 + (fSlow146 * fTemp2)) + (fSlow149 * fTemp8)) + (fSlow150 * fTemp5)) + (fSlow151 * fTemp11))); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph13 = FAUSTFLOAT(fRec56[0]); + output13[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.022574955908289243 * (((fSlow152 * (fTemp3 + (fSlow154 * fTemp5))) + (fTemp6 + (fSlow155 * fTemp8))) + (fSlow156 * fTemp11))); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph14 = FAUSTFLOAT(fRec57[0]); + output14[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.022574955908289243 * (((fSlow157 * (fTemp3 + (fSlow159 * fTemp5))) + (fTemp6 + (fSlow160 * fTemp8))) + (fSlow161 * fTemp11))); + fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph15 = FAUSTFLOAT(fRec58[0]); + output15[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.022574955908289243 * (((fSlow162 * (fTemp3 + (fSlow164 * fTemp5))) + (fTemp6 + (fSlow165 * fTemp8))) + (fSlow166 * fTemp11))); + fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph16 = FAUSTFLOAT(fRec59[0]); + output16[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.022574955908289243 * (((fSlow167 * (fTemp3 + (fSlow169 * fTemp5))) + (fTemp6 + (fSlow170 * fTemp8))) + (fSlow171 * fTemp11))); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph17 = FAUSTFLOAT(fRec60[0]); + output17[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.021093750000000001 * (((fSlow174 * (fTemp3 + (fSlow176 * fTemp5))) + (fTemp6 + (fSlow177 * fTemp8))) + (fSlow178 * fTemp11))); + fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph18 = FAUSTFLOAT(fRec61[0]); + output18[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.021093750000000001 * (((fSlow180 * (fTemp3 + (fSlow182 * fTemp5))) + (fTemp6 + (fSlow183 * fTemp8))) + (fSlow184 * fTemp11))); + fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph19 = FAUSTFLOAT(fRec62[0]); + output19[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.021093750000000001 * (((fSlow186 * (fTemp3 + (fSlow188 * fTemp5))) + (fTemp6 + (fSlow189 * fTemp8))) + (fSlow190 * fTemp11))); + fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph20 = FAUSTFLOAT(fRec63[0]); + output20[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.021093750000000001 * (((fSlow192 * (fTemp3 + (fSlow194 * fTemp5))) + (fTemp6 + (fSlow195 * fTemp8))) + (fSlow196 * fTemp11))); + fRec64[0] = max((fRec64[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph21 = FAUSTFLOAT(fRec64[0]); + output21[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.021093750000000001 * (((fSlow197 * (fTemp3 + (fSlow199 * fTemp5))) + (fTemp6 + (fSlow200 * fTemp8))) + (fSlow201 * fTemp11))); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph22 = FAUSTFLOAT(fRec65[0]); + output22[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (0.021093750000000001 * (((fSlow202 * (fTemp3 + (fSlow204 * fTemp5))) + (fTemp6 + (fSlow205 * fTemp8))) + (fSlow206 * fTemp11))); + fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph23 = FAUSTFLOAT(fRec66[0]); + output23[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (0.021093750000000001 * (((fSlow207 * (fTemp3 + (fSlow209 * fTemp5))) + (fTemp6 + (fSlow210 * fTemp8))) + (fSlow211 * fTemp11))); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph24 = FAUSTFLOAT(fRec67[0]); + output24[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (0.021093750000000001 * (((fSlow212 * (fTemp3 + (fSlow214 * fTemp5))) + (fTemp6 + (fSlow215 * fTemp8))) + (fSlow216 * fTemp11))); + fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph25 = FAUSTFLOAT(fRec68[0]); + output25[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (0.02017333553791887 * (((fSlow219 * (fTemp3 + (fSlow221 * fTemp5))) + (fTemp6 + (fSlow222 * fTemp8))) + (fSlow223 * fTemp11))); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph26 = FAUSTFLOAT(fRec69[0]); + output26[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (0.02017333553791887 * (((fSlow225 * (fTemp3 + (fSlow227 * fTemp5))) + (fTemp6 + (fSlow228 * fTemp8))) + (fSlow229 * fTemp11))); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph27 = FAUSTFLOAT(fRec70[0]); + output27[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.02017333553791887 * (((fSlow231 * (fTemp3 + (fSlow233 * fTemp5))) + (fTemp6 + (fSlow234 * fTemp8))) + (fSlow235 * fTemp11))); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph28 = FAUSTFLOAT(fRec71[0]); + output28[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (0.02017333553791887 * (((fSlow237 * (fTemp3 + (fSlow239 * fTemp5))) + (fTemp6 + (fSlow240 * fTemp8))) + (fSlow241 * fTemp11))); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph29 = FAUSTFLOAT(fRec72[0]); + output29[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (0.02017333553791887 * (((fSlow244 * (fTemp3 + (fSlow246 * fTemp5))) + (fTemp6 + (fSlow247 * fTemp8))) + (fSlow248 * fTemp11))); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph30 = FAUSTFLOAT(fRec73[0]); + output30[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (0.02017333553791887 * (((fSlow250 * (fTemp3 + (fSlow252 * fTemp5))) + (fTemp6 + (fSlow253 * fTemp8))) + (fSlow254 * fTemp11))); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph31 = FAUSTFLOAT(fRec74[0]); + output31[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (0.02017333553791887 * (((fSlow256 * (fTemp3 + (fSlow258 * fTemp5))) + (fTemp6 + (fSlow259 * fTemp8))) + (fSlow260 * fTemp11))); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph32 = FAUSTFLOAT(fRec75[0]); + output32[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.02017333553791887 * (((fSlow262 * (fTemp3 + (fSlow264 * fTemp5))) + (fTemp6 + (fSlow265 * fTemp8))) + (fSlow266 * fTemp11))); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph33 = FAUSTFLOAT(fRec76[0]); + output33[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (0.02017333553791887 * (((fSlow268 * (fTemp3 + (fSlow270 * fTemp5))) + (fTemp6 + (fSlow271 * fTemp8))) + (fSlow272 * fTemp11))); + fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph34 = FAUSTFLOAT(fRec77[0]); + output34[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (0.02017333553791887 * (((fSlow274 * (fTemp3 + (fSlow276 * fTemp5))) + (fTemp6 + (fSlow277 * fTemp8))) + (fSlow278 * fTemp11))); + fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph35 = FAUSTFLOAT(fRec78[0]); + output35[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (0.02017333553791887 * (((fSlow280 * (fTemp3 + (fSlow282 * fTemp5))) + (fTemp6 + (fSlow283 * fTemp8))) + (fSlow284 * fTemp11))); + fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph36 = FAUSTFLOAT(fRec79[0]); + output36[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.02017333553791887 * (((fSlow286 * (fTemp3 + (fSlow288 * fTemp5))) + (fTemp6 + (fSlow289 * fTemp8))) + (fSlow290 * fTemp11))); + fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph37 = FAUSTFLOAT(fRec80[0]); + output37[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (0.02017333553791887 * (((fSlow291 * (fTemp3 + (fSlow293 * fTemp5))) + (fTemp6 + (fSlow294 * fTemp8))) + (fSlow295 * fTemp11))); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph38 = FAUSTFLOAT(fRec81[0]); + output38[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * (((fSlow296 * (fTemp3 + (fSlow298 * fTemp5))) + (fTemp6 + (fSlow299 * fTemp8))) + (fSlow300 * fTemp11))); + fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph39 = FAUSTFLOAT(fRec82[0]); + output39[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (0.02017333553791887 * (((fSlow301 * (fTemp3 + (fSlow303 * fTemp5))) + (fTemp6 + (fSlow304 * fTemp8))) + (fSlow305 * fTemp11))); + fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph40 = FAUSTFLOAT(fRec83[0]); + output40[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (0.02017333553791887 * (((fSlow306 * (fTemp3 + (fSlow308 * fTemp5))) + (fTemp6 + (fSlow309 * fTemp8))) + (fSlow310 * fTemp11))); + fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph41 = FAUSTFLOAT(fRec84[0]); + output41[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (0.02017333553791887 * (((fSlow311 * (fTemp3 + (fSlow313 * fTemp5))) + (fTemp6 + (fSlow314 * fTemp8))) + (fSlow315 * fTemp11))); + fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph42 = FAUSTFLOAT(fRec85[0]); + output42[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (0.02017333553791887 * (((fSlow316 * (fTemp3 + (fSlow318 * fTemp5))) + (fTemp6 + (fSlow319 * fTemp8))) + (fSlow320 * fTemp11))); + fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph43 = FAUSTFLOAT(fRec86[0]); + output43[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (0.02017333553791887 * (((fSlow321 * (fTemp3 + (fSlow323 * fTemp5))) + (fTemp6 + (fSlow324 * fTemp8))) + (fSlow325 * fTemp11))); + fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph44 = FAUSTFLOAT(fRec87[0]); + output44[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (0.02017333553791887 * (((fSlow326 * (fTemp3 + (fSlow328 * fTemp5))) + (fTemp6 + (fSlow329 * fTemp8))) + (fSlow330 * fTemp11))); + fRec88[0] = max((fRec88[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph45 = FAUSTFLOAT(fRec88[0]); + output45[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (0.02017333553791887 * (((fSlow331 * (fTemp3 + (fSlow333 * fTemp5))) + (fTemp6 + (fSlow334 * fTemp8))) + (fSlow335 * fTemp11))); + fRec89[0] = max((fRec89[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph46 = FAUSTFLOAT(fRec89[0]); + output46[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = (0.02017333553791887 * (((fSlow336 * (fTemp3 + (fSlow338 * fTemp5))) + (fTemp6 + (fSlow339 * fTemp8))) + (fSlow340 * fTemp11))); + fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph47 = FAUSTFLOAT(fRec90[0]); + output47[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = (0.02017333553791887 * (((fSlow341 * (fTemp3 + (fSlow343 * fTemp5))) + (fTemp6 + (fSlow344 * fTemp8))) + (fSlow345 * fTemp11))); + fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph48 = FAUSTFLOAT(fRec91[0]); + output48[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = (0.02017333553791887 * (((fSlow346 * (fTemp3 + (fSlow348 * fTemp5))) + (fTemp6 + (fSlow349 * fTemp8))) + (fSlow350 * fTemp11))); + fRec92[0] = max((fRec92[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph49 = FAUSTFLOAT(fRec92[0]); + output49[i] = FAUSTFLOAT(fTemp61); + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; + fRec1[1] = fRec1[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec9[1] = fRec9[0]; + fRec12[1] = fRec12[0]; + fVec0[1] = fVec0[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec8[1] = fRec8[0]; + fRec7[1] = fRec7[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec15[1] = fRec15[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fVec1[1] = fVec1[0]; + fRec24[1] = fRec24[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec25[1] = fRec25[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec30[1] = fRec30[0]; + fRec33[1] = fRec33[0]; + fVec2[1] = fVec2[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; + fRec36[1] = fRec36[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fVec3[1] = fVec3[0]; + fRec37[1] = fRec37[0]; + fRec40[1] = fRec40[0]; + fRec41[1] = fRec41[0]; + fRec39[1] = fRec39[0]; + fRec42[1] = fRec42[0]; + fRec43[1] = fRec43[0]; + fRec38[1] = fRec38[0]; + fRec0[1] = fRec0[0]; + fRec44[1] = fRec44[0]; + fRec45[1] = fRec45[0]; + fRec46[1] = fRec46[0]; + fRec47[1] = fRec47[0]; + fRec48[1] = fRec48[0]; + fRec49[1] = fRec49[0]; + fRec50[1] = fRec50[0]; + fRec51[1] = fRec51[0]; + fRec52[1] = fRec52[0]; + fRec53[1] = fRec53[0]; + fRec54[1] = fRec54[0]; + fRec55[1] = fRec55[0]; + fRec56[1] = fRec56[0]; + fRec57[1] = fRec57[0]; + fRec58[1] = fRec58[0]; + fRec59[1] = fRec59[0]; + fRec60[1] = fRec60[0]; + fRec61[1] = fRec61[0]; + fRec62[1] = fRec62[0]; + fRec63[1] = fRec63[0]; + fRec64[1] = fRec64[0]; + fRec65[1] = fRec65[0]; + fRec66[1] = fRec66[0]; + fRec67[1] = fRec67[0]; + fRec68[1] = fRec68[0]; + fRec69[1] = fRec69[0]; + fRec70[1] = fRec70[0]; + fRec71[1] = fRec71[0]; + fRec72[1] = fRec72[0]; + fRec73[1] = fRec73[0]; + fRec74[1] = fRec74[0]; + fRec75[1] = fRec75[0]; + fRec76[1] = fRec76[0]; + fRec77[1] = fRec77[0]; + fRec78[1] = fRec78[0]; + fRec79[1] = fRec79[0]; + fRec80[1] = fRec80[0]; + fRec81[1] = fRec81[0]; + fRec82[1] = fRec82[0]; + fRec83[1] = fRec83[0]; + fRec84[1] = fRec84[0]; + fRec85[1] = fRec85[0]; + fRec86[1] = fRec86[0]; + fRec87[1] = fRec87[0]; + fRec88[1] = fRec88[0]; + fRec89[1] = fRec89[0]; + fRec90[1] = fRec90[0]; + fRec91[1] = fRec91[0]; + fRec92[1] = fRec92[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev505.cpp b/source/HOAUGens/HOAPanLebedev505.cpp new file mode 100755 index 0000000000..d42eee87a0 --- /dev/null +++ b/source/HOAUGens/HOAPanLebedev505.cpp @@ -0,0 +1,3183 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2014" +license: "GPL" +name: "HOAPanLebedev505" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + +double cos(double dummy0); +double sin(double dummy0); +double pow(double dummy0, double dummy1); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower4_f(double value) { + return (((value * value) * value) * value); + +} +double fabs(double dummy0); +double log10(double dummy0); +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fCheckbox0; + double fConst2; + double fConst3; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fEntry0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fHslider3; + double fRec3[2]; + double fRec4[2]; + double fRec2[2]; + double fRec1[2]; + double fRec6[2]; + double fRec5[2]; + FAUSTFLOAT fCheckbox2; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fRec10[2]; + double fRec11[2]; + double fRec9[2]; + double fRec12[2]; + double fVec0[2]; + double fRec13[2]; + double fRec14[2]; + double fRec8[2]; + double fRec7[2]; + double fRec17[2]; + double fRec18[2]; + double fRec16[2]; + double fRec19[2]; + double fRec15[2]; + FAUSTFLOAT fCheckbox3; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fRec24[2]; + double fRec25[2]; + double fRec23[2]; + double fRec26[2]; + double fVec1[2]; + double fRec27[2]; + double fConst13; + double fRec28[2]; + double fRec29[2]; + double fRec22[2]; + double fRec30[2]; + double fVec2[2]; + double fRec31[2]; + double fRec32[2]; + double fRec21[2]; + double fRec20[2]; + double fRec36[2]; + double fRec37[2]; + double fRec35[2]; + double fRec38[2]; + double fRec39[2]; + double fRec34[2]; + double fRec40[2]; + double fRec33[2]; + FAUSTFLOAT fCheckbox4; + FAUSTFLOAT fCheckbox5; + double fConst14; + double fConst15; + double fRec43[2]; + double fRec44[2]; + double fRec42[2]; + double fRec41[2]; + double fVec3[2]; + double fRec45[2]; + double fRec47[2]; + double fRec48[2]; + double fRec46[2]; + FAUSTFLOAT fCheckbox6; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fRec52[2]; + double fRec53[2]; + double fRec51[2]; + double fRec54[2]; + double fVec4[2]; + double fRec55[2]; + double fRec56[2]; + double fRec57[2]; + double fRec50[2]; + double fRec49[2]; + double fVec5[2]; + double fRec58[2]; + double fRec61[2]; + double fRec62[2]; + double fRec60[2]; + double fRec63[2]; + double fRec64[2]; + double fRec59[2]; + double fRec0[2]; + FAUSTFLOAT fVbargraph0; + double fRec65[2]; + FAUSTFLOAT fVbargraph1; + double fRec66[2]; + FAUSTFLOAT fVbargraph2; + double fRec67[2]; + FAUSTFLOAT fVbargraph3; + double fRec68[2]; + FAUSTFLOAT fVbargraph4; + double fRec69[2]; + FAUSTFLOAT fVbargraph5; + double fRec70[2]; + FAUSTFLOAT fVbargraph6; + double fRec71[2]; + FAUSTFLOAT fVbargraph7; + double fRec72[2]; + FAUSTFLOAT fVbargraph8; + double fRec73[2]; + FAUSTFLOAT fVbargraph9; + double fRec74[2]; + FAUSTFLOAT fVbargraph10; + double fRec75[2]; + FAUSTFLOAT fVbargraph11; + double fRec76[2]; + FAUSTFLOAT fVbargraph12; + double fRec77[2]; + FAUSTFLOAT fVbargraph13; + double fRec78[2]; + FAUSTFLOAT fVbargraph14; + double fRec79[2]; + FAUSTFLOAT fVbargraph15; + double fRec80[2]; + FAUSTFLOAT fVbargraph16; + double fRec81[2]; + FAUSTFLOAT fVbargraph17; + double fRec82[2]; + FAUSTFLOAT fVbargraph18; + double fRec83[2]; + FAUSTFLOAT fVbargraph19; + double fRec84[2]; + FAUSTFLOAT fVbargraph20; + double fRec85[2]; + FAUSTFLOAT fVbargraph21; + double fRec86[2]; + FAUSTFLOAT fVbargraph22; + double fRec87[2]; + FAUSTFLOAT fVbargraph23; + double fRec88[2]; + FAUSTFLOAT fVbargraph24; + double fRec89[2]; + FAUSTFLOAT fVbargraph25; + double fRec90[2]; + FAUSTFLOAT fVbargraph26; + double fRec91[2]; + FAUSTFLOAT fVbargraph27; + double fRec92[2]; + FAUSTFLOAT fVbargraph28; + double fRec93[2]; + FAUSTFLOAT fVbargraph29; + double fRec94[2]; + FAUSTFLOAT fVbargraph30; + double fRec95[2]; + FAUSTFLOAT fVbargraph31; + double fRec96[2]; + FAUSTFLOAT fVbargraph32; + double fRec97[2]; + FAUSTFLOAT fVbargraph33; + double fRec98[2]; + FAUSTFLOAT fVbargraph34; + double fRec99[2]; + FAUSTFLOAT fVbargraph35; + double fRec100[2]; + FAUSTFLOAT fVbargraph36; + double fRec101[2]; + FAUSTFLOAT fVbargraph37; + double fRec102[2]; + FAUSTFLOAT fVbargraph38; + double fRec103[2]; + FAUSTFLOAT fVbargraph39; + double fRec104[2]; + FAUSTFLOAT fVbargraph40; + double fRec105[2]; + FAUSTFLOAT fVbargraph41; + double fRec106[2]; + FAUSTFLOAT fVbargraph42; + double fRec107[2]; + FAUSTFLOAT fVbargraph43; + double fRec108[2]; + FAUSTFLOAT fVbargraph44; + double fRec109[2]; + FAUSTFLOAT fVbargraph45; + double fRec110[2]; + FAUSTFLOAT fVbargraph46; + double fRec111[2]; + FAUSTFLOAT fVbargraph47; + double fRec112[2]; + FAUSTFLOAT fVbargraph48; + double fRec113[2]; + FAUSTFLOAT fVbargraph49; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/gui.lib/author", "Pierre Lecomte"); + m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/gui.lib/license", "GPL"); + m->declare("lib/gui.lib/name", "GUI Library"); + m->declare("lib/gui.lib/version", "1.0"); + m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); + m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/lebedev.lib/license", "GPL"); + m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lib/lebedev.lib/version", "1.0"); + m->declare("lib/nfc.lib/author", "Pierre Lecomte"); + m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lib/nfc.lib/license", "GPL"); + m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); + m->declare("lib/nfc.lib/version", "1.0"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOAPanLebedev505"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 1; + + } + virtual int getNumOutputs() { + return 50; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst1 = (80.0 / fConst0); + fConst2 = (340.0 / fConst0); + fConst3 = (170.0 / fConst0); + fConst4 = (789.54302057287055 / fConst0); + fConst5 = (394.77151028643527 / fConst0); + fConst6 = (625.22848971356643 / fConst0); + fConst7 = (1250.4569794271329 / fConst0); + fConst8 = (1239.8911224120607 / fConst0); + fConst9 = (619.94556120603033 / fConst0); + fConst10 = (1139.6651757122002 / fConst0); + fConst11 = (790.3892630817644 / fConst0); + fConst12 = (1580.7785261635288 / fConst0); + fConst13 = (2279.3303514244003 / fConst0); + fConst14 = (510.0 / fConst0); + fConst15 = (1020.0 / fConst0); + fConst16 = (984.71160495892411 / fConst0); + fConst17 = (1969.4232099178482 / fConst0); + fConst18 = (715.28839504107589 / fConst0); + fConst19 = (1430.5767900821518 / fConst0); + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(2.0); + fEntry0 = FAUSTFLOAT(1.0700000000000001); + fCheckbox1 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + fCheckbox3 = FAUSTFLOAT(0.0); + fCheckbox4 = FAUSTFLOAT(0.0); + fCheckbox5 = FAUSTFLOAT(0.0); + fCheckbox6 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec3[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec4[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec1[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec6[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec10[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec11[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec12[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fVec0[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec13[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec14[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec8[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec7[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec17[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec18[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec15[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec24[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec25[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec26[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fVec1[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec27[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec28[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec29[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec22[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec30[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fVec2[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec21[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec20[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec36[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec37[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec35[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec38[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec39[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec34[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec33[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec43[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec44[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec42[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec41[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fVec3[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec45[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec47[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec48[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec46[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec52[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec53[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec51[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec54[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fVec4[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec55[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec56[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec57[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec50[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec49[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fVec5[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec58[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec61[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec62[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec60[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec63[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec64[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec59[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec0[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec65[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec66[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec67[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec68[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec69[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec70[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec71[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec72[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec73[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec74[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec75[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec76[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec77[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec78[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec79[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec80[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec81[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec82[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec83[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec84[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec85[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec86[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec87[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec88[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec89[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec90[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec91[l97] = 0.0; + + } + for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + fRec92[l98] = 0.0; + + } + for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + fRec93[l99] = 0.0; + + } + for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + fRec94[l100] = 0.0; + + } + for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + fRec95[l101] = 0.0; + + } + for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + fRec96[l102] = 0.0; + + } + for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + fRec97[l103] = 0.0; + + } + for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + fRec98[l104] = 0.0; + + } + for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + fRec99[l105] = 0.0; + + } + for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + fRec100[l106] = 0.0; + + } + for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + fRec101[l107] = 0.0; + + } + for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + fRec102[l108] = 0.0; + + } + for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + fRec103[l109] = 0.0; + + } + for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { + fRec104[l110] = 0.0; + + } + for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + fRec105[l111] = 0.0; + + } + for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + fRec106[l112] = 0.0; + + } + for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + fRec107[l113] = 0.0; + + } + for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + fRec108[l114] = 0.0; + + } + for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { + fRec109[l115] = 0.0; + + } + for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + fRec110[l116] = 0.0; + + } + for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + fRec111[l117] = 0.0; + + } + for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + fRec112[l118] = 0.0; + + } + for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + fRec113[l119] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAPanLebedev505"); + ui_interface->openHorizontalBox("0x00"); + ui_interface->declare(&fHslider3, "0+1", ""); + ui_interface->declare(&fHslider3, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider3, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+2", ""); + ui_interface->declare(&fHslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider2, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider0, "0+3", ""); + ui_interface->declare(&fHslider0, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+4", ""); + ui_interface->declare(&fHslider1, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); + ui_interface->addCheckButton("Yes", &fCheckbox1); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("Mute Order"); + ui_interface->addCheckButton("0", &fCheckbox4); + ui_interface->addCheckButton("1", &fCheckbox0); + ui_interface->addCheckButton("2", &fCheckbox5); + ui_interface->addCheckButton("3", &fCheckbox2); + ui_interface->addCheckButton("4", &fCheckbox6); + ui_interface->addCheckButton("5", &fCheckbox3); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("1-25"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2281280", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x228ca30", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2298cc0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22a5030", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22b1480", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22bc300", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22c7fb0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22d33e0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22de8f0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22e9ee0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22f6870", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23032e0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x230fe30", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x231ca60", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23280c0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2333800", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x233f020", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x234a920", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2357050", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2362f00", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x236ee90", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x237af00", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2386c60", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2392aa0", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x239e9c0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("26-50"); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23aa9c0", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23b6da0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23c1e50", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23ccfe0", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23d8250", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e4700", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f0500", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23fc3e0", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24083a0", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2414440", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24205c0", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x242c820", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2438b60", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24441c0", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x244f900", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x245b120", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2466a20", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2472400", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x247dec0", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2489a60", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24956e0", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24a1440", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24ad280", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24b91a0", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24c51a0", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fHslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (6.123233995736766e-17 * fSlow4); + double fSlow6 = sin(fSlow2); + double fSlow7 = (fSlow5 + fSlow6); + double fSlow8 = (1.0 - double(fCheckbox0)); + double fSlow9 = (3.0 * fSlow8); + double fSlow10 = double(fHslider2); + double fSlow11 = (fConst3 / fSlow10); + double fSlow12 = (fSlow11 + 1.0); + double fSlow13 = (fConst2 / (fSlow12 * fSlow10)); + double fSlow14 = double(fEntry0); + double fSlow15 = (fConst3 / fSlow14); + double fSlow16 = (1.0 / (fSlow15 + 1.0)); + double fSlow17 = double(fCheckbox1); + double fSlow18 = (((fSlow12 * fSlow17) * fSlow14) / fSlow10); + double fSlow19 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider3)))); + double fSlow20 = (fConst2 / fSlow14); + double fSlow21 = (1.0 - fSlow17); + double fSlow22 = (fSlow21 * fSlow14); + double fSlow23 = mydsp_faustpower2_f(fSlow7); + double fSlow24 = (1.0 - double(fCheckbox2)); + double fSlow25 = (3.5 * (((5.0 * fSlow23) + -3.0) * fSlow24)); + double fSlow26 = ((fConst5 / fSlow10) + 1.0); + double fSlow27 = (fConst4 / (fSlow26 * fSlow10)); + double fSlow28 = (1.0 / ((fConst5 / fSlow14) + 1.0)); + double fSlow29 = mydsp_faustpower2_f(fSlow15); + double fSlow30 = (1.0 / (((fConst6 / fSlow14) + (6.4594326934833797 * fSlow29)) + 1.0)); + double fSlow31 = mydsp_faustpower2_f(fSlow11); + double fSlow32 = (((fConst6 / fSlow10) + (6.4594326934833797 * fSlow31)) + 1.0); + double fSlow33 = (((fSlow32 * fSlow17) * fSlow14) / fSlow10); + double fSlow34 = (25.837730773933519 * fSlow29); + double fSlow35 = (fSlow34 + (fConst7 / fSlow14)); + double fSlow36 = (1.0 / fSlow32); + double fSlow37 = (25.837730773933519 * fSlow31); + double fSlow38 = ((fConst7 / fSlow10) + fSlow37); + double fSlow39 = (fConst4 / fSlow14); + double fSlow40 = (1.0 - double(fCheckbox3)); + double fSlow41 = (1.375 * (((15.0 - (70.0 * fSlow23)) + (63.0 * mydsp_faustpower4_f(fSlow7))) * fSlow40)); + double fSlow42 = ((fConst9 / fSlow10) + 1.0); + double fSlow43 = (fConst8 / (fSlow42 * fSlow10)); + double fSlow44 = (1.0 / ((fConst9 / fSlow14) + 1.0)); + double fSlow45 = (1.0 / (((fConst10 / fSlow14) + (14.272480513280099 * fSlow29)) + 1.0)); + double fSlow46 = (((fConst10 / fSlow10) + (14.272480513280099 * fSlow31)) + 1.0); + double fSlow47 = (1.0 / (((fConst11 / fSlow14) + (18.1563153134523 * fSlow29)) + 1.0)); + double fSlow48 = (((fConst11 / fSlow10) + (18.1563153134523 * fSlow31)) + 1.0); + double fSlow49 = (((fSlow48 * fSlow17) * fSlow14) / fSlow10); + double fSlow50 = (72.6252612538092 * fSlow29); + double fSlow51 = (fSlow50 + (fConst12 / fSlow14)); + double fSlow52 = (1.0 / fSlow48); + double fSlow53 = (72.6252612538092 * fSlow31); + double fSlow54 = ((fConst12 / fSlow10) + fSlow53); + double fSlow55 = (57.089922053120397 * fSlow29); + double fSlow56 = (fSlow55 + (fConst13 / fSlow14)); + double fSlow57 = (1.0 / fSlow46); + double fSlow58 = (57.089922053120397 * fSlow31); + double fSlow59 = ((fConst13 / fSlow10) + fSlow58); + double fSlow60 = (fConst8 / fSlow14); + double fSlow61 = ((((fSlow17 / fSlow10) + fSlow21) * fSlow14) * (1.0 - double(fCheckbox4))); + double fSlow62 = (1.0 - double(fCheckbox5)); + double fSlow63 = (2.5 * (((3.0 * fSlow23) + -1.0) * fSlow62)); + double fSlow64 = (((fConst14 / fSlow10) + (3.0 * fSlow31)) + 1.0); + double fSlow65 = (1.0 / fSlow64); + double fSlow66 = (12.0 * fSlow31); + double fSlow67 = ((fConst15 / fSlow10) + fSlow66); + double fSlow68 = (1.0 / (((fConst14 / fSlow14) + (3.0 * fSlow29)) + 1.0)); + double fSlow69 = (((fSlow64 * fSlow17) * fSlow14) / fSlow10); + double fSlow70 = (12.0 * fSlow29); + double fSlow71 = (fSlow70 + (fConst15 / fSlow14)); + double fSlow72 = (1.0 - double(fCheckbox6)); + double fSlow73 = (1.125 * (((fSlow23 * ((35.0 * fSlow23) + -30.0)) + 3.0) * fSlow72)); + double fSlow74 = (((fConst16 / fSlow10) + (9.1401308902779004 * fSlow31)) + 1.0); + double fSlow75 = (1.0 / fSlow74); + double fSlow76 = (36.560523561111602 * fSlow31); + double fSlow77 = ((fConst17 / fSlow10) + fSlow76); + double fSlow78 = (1.0 / (((fConst16 / fSlow14) + (9.1401308902779004 * fSlow29)) + 1.0)); + double fSlow79 = (1.0 / (((fConst18 / fSlow14) + (11.4878004768713 * fSlow29)) + 1.0)); + double fSlow80 = (((fConst18 / fSlow10) + (11.4878004768713 * fSlow31)) + 1.0); + double fSlow81 = (((fSlow80 * fSlow17) * fSlow14) / fSlow10); + double fSlow82 = (45.951201907485199 * fSlow29); + double fSlow83 = (fSlow82 + (fConst19 / fSlow14)); + double fSlow84 = (1.0 / fSlow80); + double fSlow85 = (45.951201907485199 * fSlow31); + double fSlow86 = ((fConst19 / fSlow10) + fSlow85); + double fSlow87 = (36.560523561111602 * fSlow29); + double fSlow88 = (fSlow87 + (fConst17 / fSlow14)); + double fSlow89 = (3.0 * ((fSlow1 * fSlow8) * fSlow3)); + double fSlow90 = mydsp_faustpower2_f(fSlow4); + double fSlow91 = (2.5 * (((3.0 * fSlow90) + -1.0) * fSlow62)); + double fSlow92 = mydsp_faustpower3_f(fSlow4); + double fSlow93 = (3.5 * (((5.0 * fSlow92) - (3.0 * fSlow4)) * fSlow24)); + double fSlow94 = (1.125 * (((fSlow90 * ((35.0 * fSlow90) + -30.0)) + 3.0) * fSlow72)); + double fSlow95 = (1.375 * (((15.0 * fSlow4) + (fSlow92 * ((63.0 * fSlow90) + -70.0))) * fSlow40)); + double fSlow96 = cos((fSlow0 + -1.5707963267948966)); + double fSlow97 = (3.0 * ((fSlow96 * fSlow8) * fSlow3)); + double fSlow98 = (fSlow96 * fSlow3); + double fSlow99 = mydsp_faustpower2_f(fSlow98); + double fSlow100 = (2.5 * (((3.0 * fSlow99) + -1.0) * fSlow62)); + double fSlow101 = mydsp_faustpower3_f(fSlow98); + double fSlow102 = (3.5 * (((5.0 * fSlow101) - (3.0 * fSlow98)) * fSlow24)); + double fSlow103 = (1.125 * (((fSlow99 * ((35.0 * fSlow99) + -30.0)) + 3.0) * fSlow72)); + double fSlow104 = (1.375 * (((15.0 * fSlow98) + (fSlow101 * ((63.0 * fSlow99) + -70.0))) * fSlow40)); + double fSlow105 = cos((fSlow0 + -3.1415926535897931)); + double fSlow106 = (3.0 * ((fSlow105 * fSlow8) * fSlow3)); + double fSlow107 = (fSlow105 * fSlow3); + double fSlow108 = mydsp_faustpower2_f(fSlow107); + double fSlow109 = (2.5 * (((3.0 * fSlow108) + -1.0) * fSlow62)); + double fSlow110 = mydsp_faustpower3_f(fSlow107); + double fSlow111 = (3.5 * (((5.0 * fSlow110) - (3.0 * fSlow107)) * fSlow24)); + double fSlow112 = (1.125 * (((fSlow108 * ((35.0 * fSlow108) + -30.0)) + 3.0) * fSlow72)); + double fSlow113 = (1.375 * (((15.0 * fSlow107) + (fSlow110 * ((63.0 * fSlow108) + -70.0))) * fSlow40)); + double fSlow114 = cos((fSlow0 + -4.7123889803846897)); + double fSlow115 = (3.0 * ((fSlow114 * fSlow8) * fSlow3)); + double fSlow116 = (fSlow114 * fSlow3); + double fSlow117 = mydsp_faustpower2_f(fSlow116); + double fSlow118 = (2.5 * (((3.0 * fSlow117) + -1.0) * fSlow62)); + double fSlow119 = mydsp_faustpower3_f(fSlow116); + double fSlow120 = (3.5 * (((5.0 * fSlow119) - (3.0 * fSlow116)) * fSlow24)); + double fSlow121 = (1.125 * (((fSlow117 * ((35.0 * fSlow117) + -30.0)) + 3.0) * fSlow72)); + double fSlow122 = (1.375 * (((15.0 * fSlow116) + (fSlow119 * ((63.0 * fSlow117) + -70.0))) * fSlow40)); + double fSlow123 = (fSlow5 - fSlow6); + double fSlow124 = mydsp_faustpower2_f(fSlow123); + double fSlow125 = (3.5 * (((5.0 * fSlow124) + -3.0) * fSlow24)); + double fSlow126 = (1.375 * (((15.0 - (70.0 * fSlow124)) + (63.0 * mydsp_faustpower4_f(fSlow123))) * fSlow40)); + double fSlow127 = (2.5 * (((3.0 * fSlow124) + -1.0) * fSlow62)); + double fSlow128 = (1.125 * (((fSlow124 * ((35.0 * fSlow124) + -30.0)) + 3.0) * fSlow72)); + double fSlow129 = (0.70710678118654757 * fSlow4); + double fSlow130 = (0.70710678118654746 * fSlow6); + double fSlow131 = (fSlow129 + fSlow130); + double fSlow132 = mydsp_faustpower2_f(fSlow131); + double fSlow133 = (3.5 * (((5.0 * fSlow132) + -3.0) * fSlow24)); + double fSlow134 = (1.375 * (((15.0 - (70.0 * fSlow132)) + (63.0 * mydsp_faustpower4_f(fSlow131))) * fSlow40)); + double fSlow135 = (2.5 * (((3.0 * fSlow132) + -1.0) * fSlow62)); + double fSlow136 = (1.125 * (((fSlow132 * ((35.0 * fSlow132) + -30.0)) + 3.0) * fSlow72)); + double fSlow137 = (0.70710678118654757 * fSlow98); + double fSlow138 = (fSlow137 + fSlow130); + double fSlow139 = mydsp_faustpower2_f(fSlow138); + double fSlow140 = (3.5 * (((5.0 * fSlow139) + -3.0) * fSlow24)); + double fSlow141 = (1.375 * (((15.0 - (70.0 * fSlow139)) + (63.0 * mydsp_faustpower4_f(fSlow138))) * fSlow40)); + double fSlow142 = (2.5 * (((3.0 * fSlow139) + -1.0) * fSlow62)); + double fSlow143 = (1.125 * (((fSlow139 * ((35.0 * fSlow139) + -30.0)) + 3.0) * fSlow72)); + double fSlow144 = (0.70710678118654757 * fSlow107); + double fSlow145 = (fSlow130 + fSlow144); + double fSlow146 = mydsp_faustpower2_f(fSlow145); + double fSlow147 = (3.5 * (((5.0 * fSlow146) + -3.0) * fSlow24)); + double fSlow148 = (1.375 * (((15.0 - (70.0 * fSlow146)) + (63.0 * mydsp_faustpower4_f(fSlow145))) * fSlow40)); + double fSlow149 = (2.5 * (((3.0 * fSlow146) + -1.0) * fSlow62)); + double fSlow150 = (1.125 * (((fSlow146 * ((35.0 * fSlow146) + -30.0)) + 3.0) * fSlow72)); + double fSlow151 = (0.70710678118654757 * fSlow116); + double fSlow152 = (fSlow130 + fSlow151); + double fSlow153 = mydsp_faustpower2_f(fSlow152); + double fSlow154 = (3.5 * (((5.0 * fSlow153) + -3.0) * fSlow24)); + double fSlow155 = (1.375 * (((15.0 - (70.0 * fSlow153)) + (63.0 * mydsp_faustpower4_f(fSlow152))) * fSlow40)); + double fSlow156 = (2.5 * (((3.0 * fSlow153) + -1.0) * fSlow62)); + double fSlow157 = (1.125 * (((fSlow153 * ((35.0 * fSlow153) + -30.0)) + 3.0) * fSlow72)); + double fSlow158 = cos((fSlow0 + -0.78539816339744828)); + double fSlow159 = (3.0 * ((fSlow158 * fSlow8) * fSlow3)); + double fSlow160 = (fSlow158 * fSlow3); + double fSlow161 = mydsp_faustpower2_f(fSlow160); + double fSlow162 = (2.5 * (((3.0 * fSlow161) + -1.0) * fSlow62)); + double fSlow163 = mydsp_faustpower3_f(fSlow160); + double fSlow164 = (3.5 * (((5.0 * fSlow163) - (3.0 * fSlow160)) * fSlow24)); + double fSlow165 = (1.125 * (((fSlow161 * ((35.0 * fSlow161) + -30.0)) + 3.0) * fSlow72)); + double fSlow166 = (1.375 * (((15.0 * fSlow160) + (fSlow163 * ((63.0 * fSlow161) + -70.0))) * fSlow40)); + double fSlow167 = cos((fSlow0 + -2.3561944901923448)); + double fSlow168 = (3.0 * ((fSlow167 * fSlow8) * fSlow3)); + double fSlow169 = (fSlow167 * fSlow3); + double fSlow170 = mydsp_faustpower2_f(fSlow169); + double fSlow171 = (2.5 * (((3.0 * fSlow170) + -1.0) * fSlow62)); + double fSlow172 = mydsp_faustpower3_f(fSlow169); + double fSlow173 = (3.5 * (((5.0 * fSlow172) - (3.0 * fSlow169)) * fSlow24)); + double fSlow174 = (1.125 * (((fSlow170 * ((35.0 * fSlow170) + -30.0)) + 3.0) * fSlow72)); + double fSlow175 = (1.375 * (((15.0 * fSlow169) + (fSlow172 * ((63.0 * fSlow170) + -70.0))) * fSlow40)); + double fSlow176 = cos((fSlow0 + -3.9269908169872414)); + double fSlow177 = (3.0 * ((fSlow176 * fSlow8) * fSlow3)); + double fSlow178 = (fSlow176 * fSlow3); + double fSlow179 = mydsp_faustpower2_f(fSlow178); + double fSlow180 = (2.5 * (((3.0 * fSlow179) + -1.0) * fSlow62)); + double fSlow181 = mydsp_faustpower3_f(fSlow178); + double fSlow182 = (3.5 * (((5.0 * fSlow181) - (3.0 * fSlow178)) * fSlow24)); + double fSlow183 = (1.125 * (((fSlow179 * ((35.0 * fSlow179) + -30.0)) + 3.0) * fSlow72)); + double fSlow184 = (1.375 * (((15.0 * fSlow178) + (fSlow181 * ((63.0 * fSlow179) + -70.0))) * fSlow40)); + double fSlow185 = cos((fSlow0 + -5.497787143782138)); + double fSlow186 = (3.0 * ((fSlow185 * fSlow8) * fSlow3)); + double fSlow187 = (fSlow185 * fSlow3); + double fSlow188 = mydsp_faustpower2_f(fSlow187); + double fSlow189 = (2.5 * (((3.0 * fSlow188) + -1.0) * fSlow62)); + double fSlow190 = mydsp_faustpower3_f(fSlow187); + double fSlow191 = (3.5 * (((5.0 * fSlow190) - (3.0 * fSlow187)) * fSlow24)); + double fSlow192 = (1.125 * (((fSlow188 * ((35.0 * fSlow188) + -30.0)) + 3.0) * fSlow72)); + double fSlow193 = (1.375 * (((15.0 * fSlow187) + (fSlow190 * ((63.0 * fSlow188) + -70.0))) * fSlow40)); + double fSlow194 = (fSlow129 - fSlow130); + double fSlow195 = mydsp_faustpower2_f(fSlow194); + double fSlow196 = (3.5 * (((5.0 * fSlow195) + -3.0) * fSlow24)); + double fSlow197 = (1.375 * (((15.0 - (70.0 * fSlow195)) + (63.0 * mydsp_faustpower4_f(fSlow194))) * fSlow40)); + double fSlow198 = (2.5 * (((3.0 * fSlow195) + -1.0) * fSlow62)); + double fSlow199 = (1.125 * (((fSlow195 * ((35.0 * fSlow195) + -30.0)) + 3.0) * fSlow72)); + double fSlow200 = (fSlow137 - fSlow130); + double fSlow201 = mydsp_faustpower2_f(fSlow200); + double fSlow202 = (3.5 * (((5.0 * fSlow201) + -3.0) * fSlow24)); + double fSlow203 = (1.375 * (((15.0 - (70.0 * fSlow201)) + (63.0 * mydsp_faustpower4_f(fSlow200))) * fSlow40)); + double fSlow204 = (2.5 * (((3.0 * fSlow201) + -1.0) * fSlow62)); + double fSlow205 = (1.125 * (((fSlow201 * ((35.0 * fSlow201) + -30.0)) + 3.0) * fSlow72)); + double fSlow206 = (fSlow144 - fSlow130); + double fSlow207 = mydsp_faustpower2_f(fSlow206); + double fSlow208 = (3.5 * (((5.0 * fSlow207) + -3.0) * fSlow24)); + double fSlow209 = (1.375 * (((15.0 - (70.0 * fSlow207)) + (63.0 * mydsp_faustpower4_f(fSlow206))) * fSlow40)); + double fSlow210 = (1.125 * (((fSlow207 * ((35.0 * fSlow207) + -30.0)) + 3.0) * fSlow72)); + double fSlow211 = (2.5 * (((3.0 * fSlow207) + -1.0) * fSlow62)); + double fSlow212 = (fSlow151 - fSlow130); + double fSlow213 = mydsp_faustpower2_f(fSlow212); + double fSlow214 = (3.5 * (((5.0 * fSlow213) + -3.0) * fSlow24)); + double fSlow215 = (1.375 * (((15.0 - (70.0 * fSlow213)) + (63.0 * mydsp_faustpower4_f(fSlow212))) * fSlow40)); + double fSlow216 = (2.5 * (((3.0 * fSlow213) + -1.0) * fSlow62)); + double fSlow217 = (1.125 * (((fSlow213 * ((35.0 * fSlow213) + -30.0)) + 3.0) * fSlow72)); + double fSlow218 = (0.81649658092772592 * fSlow160); + double fSlow219 = (0.57735026918962584 * fSlow6); + double fSlow220 = (fSlow218 + fSlow219); + double fSlow221 = mydsp_faustpower2_f(fSlow220); + double fSlow222 = (3.5 * (((5.0 * fSlow221) + -3.0) * fSlow24)); + double fSlow223 = (1.375 * (((15.0 - (70.0 * fSlow221)) + (63.0 * mydsp_faustpower4_f(fSlow220))) * fSlow40)); + double fSlow224 = (2.5 * (((3.0 * fSlow221) + -1.0) * fSlow62)); + double fSlow225 = (1.125 * (((fSlow221 * ((35.0 * fSlow221) + -30.0)) + 3.0) * fSlow72)); + double fSlow226 = (0.81649658092772592 * fSlow169); + double fSlow227 = (fSlow219 + fSlow226); + double fSlow228 = mydsp_faustpower2_f(fSlow227); + double fSlow229 = (3.5 * (((5.0 * fSlow228) + -3.0) * fSlow24)); + double fSlow230 = (1.375 * (((15.0 - (70.0 * fSlow228)) + (63.0 * mydsp_faustpower4_f(fSlow227))) * fSlow40)); + double fSlow231 = (2.5 * (((3.0 * fSlow228) + -1.0) * fSlow62)); + double fSlow232 = (1.125 * (((fSlow228 * ((35.0 * fSlow228) + -30.0)) + 3.0) * fSlow72)); + double fSlow233 = (0.81649658092772592 * fSlow178); + double fSlow234 = (fSlow219 + fSlow233); + double fSlow235 = mydsp_faustpower2_f(fSlow234); + double fSlow236 = (3.5 * (((5.0 * fSlow235) + -3.0) * fSlow24)); + double fSlow237 = (1.375 * (((15.0 - (70.0 * fSlow235)) + (63.0 * mydsp_faustpower4_f(fSlow234))) * fSlow40)); + double fSlow238 = (2.5 * (((3.0 * fSlow235) + -1.0) * fSlow62)); + double fSlow239 = (1.125 * (((fSlow235 * ((35.0 * fSlow235) + -30.0)) + 3.0) * fSlow72)); + double fSlow240 = (0.81649658092772592 * fSlow187); + double fSlow241 = (fSlow219 + fSlow240); + double fSlow242 = mydsp_faustpower2_f(fSlow241); + double fSlow243 = (3.5 * (((5.0 * fSlow242) + -3.0) * fSlow24)); + double fSlow244 = (1.375 * (((15.0 - (70.0 * fSlow242)) + (63.0 * mydsp_faustpower4_f(fSlow241))) * fSlow40)); + double fSlow245 = (2.5 * (((3.0 * fSlow242) + -1.0) * fSlow62)); + double fSlow246 = (1.125 * (((fSlow242 * ((35.0 * fSlow242) + -30.0)) + 3.0) * fSlow72)); + double fSlow247 = (fSlow218 - fSlow219); + double fSlow248 = mydsp_faustpower2_f(fSlow247); + double fSlow249 = (3.5 * (((5.0 * fSlow248) + -3.0) * fSlow24)); + double fSlow250 = (1.375 * (((15.0 - (70.0 * fSlow248)) + (63.0 * mydsp_faustpower4_f(fSlow247))) * fSlow40)); + double fSlow251 = (2.5 * (((3.0 * fSlow248) + -1.0) * fSlow62)); + double fSlow252 = (1.125 * (((fSlow248 * ((35.0 * fSlow248) + -30.0)) + 3.0) * fSlow72)); + double fSlow253 = (fSlow226 - fSlow219); + double fSlow254 = mydsp_faustpower2_f(fSlow253); + double fSlow255 = (3.5 * (((5.0 * fSlow254) + -3.0) * fSlow24)); + double fSlow256 = (1.375 * (((15.0 - (70.0 * fSlow254)) + (63.0 * mydsp_faustpower4_f(fSlow253))) * fSlow40)); + double fSlow257 = (2.5 * (((3.0 * fSlow254) + -1.0) * fSlow62)); + double fSlow258 = (1.125 * (((fSlow254 * ((35.0 * fSlow254) + -30.0)) + 3.0) * fSlow72)); + double fSlow259 = (fSlow233 - fSlow219); + double fSlow260 = mydsp_faustpower2_f(fSlow259); + double fSlow261 = (3.5 * (((5.0 * fSlow260) + -3.0) * fSlow24)); + double fSlow262 = (1.375 * (((15.0 - (70.0 * fSlow260)) + (63.0 * mydsp_faustpower4_f(fSlow259))) * fSlow40)); + double fSlow263 = (2.5 * (((3.0 * fSlow260) + -1.0) * fSlow62)); + double fSlow264 = (1.125 * (((fSlow260 * ((35.0 * fSlow260) + -30.0)) + 3.0) * fSlow72)); + double fSlow265 = (fSlow240 - fSlow219); + double fSlow266 = mydsp_faustpower2_f(fSlow265); + double fSlow267 = (3.5 * (((5.0 * fSlow266) + -3.0) * fSlow24)); + double fSlow268 = (1.375 * (((15.0 - (70.0 * fSlow266)) + (63.0 * mydsp_faustpower4_f(fSlow265))) * fSlow40)); + double fSlow269 = (2.5 * (((3.0 * fSlow266) + -1.0) * fSlow62)); + double fSlow270 = (1.125 * (((fSlow266 * ((35.0 * fSlow266) + -30.0)) + 3.0) * fSlow72)); + double fSlow271 = (0.42640143271122027 * (cos((fSlow0 + -0.78539816339744839)) * fSlow3)); + double fSlow272 = (0.90453403373329111 * fSlow6); + double fSlow273 = (fSlow271 + fSlow272); + double fSlow274 = mydsp_faustpower2_f(fSlow273); + double fSlow275 = (3.5 * (((5.0 * fSlow274) + -3.0) * fSlow24)); + double fSlow276 = (1.375 * (((15.0 - (70.0 * fSlow274)) + (63.0 * mydsp_faustpower4_f(fSlow273))) * fSlow40)); + double fSlow277 = (2.5 * (((3.0 * fSlow274) + -1.0) * fSlow62)); + double fSlow278 = (1.125 * (((fSlow274 * ((35.0 * fSlow274) + -30.0)) + 3.0) * fSlow72)); + double fSlow279 = (0.42640143271122027 * fSlow169); + double fSlow280 = (fSlow272 + fSlow279); + double fSlow281 = mydsp_faustpower2_f(fSlow280); + double fSlow282 = (3.5 * (((5.0 * fSlow281) + -3.0) * fSlow24)); + double fSlow283 = (1.375 * (((15.0 - (70.0 * fSlow281)) + (63.0 * mydsp_faustpower4_f(fSlow280))) * fSlow40)); + double fSlow284 = (2.5 * (((3.0 * fSlow281) + -1.0) * fSlow62)); + double fSlow285 = (1.125 * (((fSlow281 * ((35.0 * fSlow281) + -30.0)) + 3.0) * fSlow72)); + double fSlow286 = (0.42640143271122027 * fSlow178); + double fSlow287 = (fSlow272 + fSlow286); + double fSlow288 = mydsp_faustpower2_f(fSlow287); + double fSlow289 = (3.5 * (((5.0 * fSlow288) + -3.0) * fSlow24)); + double fSlow290 = (1.375 * (((15.0 - (70.0 * fSlow288)) + (63.0 * mydsp_faustpower4_f(fSlow287))) * fSlow40)); + double fSlow291 = (2.5 * (((3.0 * fSlow288) + -1.0) * fSlow62)); + double fSlow292 = (1.125 * (((fSlow288 * ((35.0 * fSlow288) + -30.0)) + 3.0) * fSlow72)); + double fSlow293 = (0.42640143271122027 * fSlow187); + double fSlow294 = (fSlow272 + fSlow293); + double fSlow295 = mydsp_faustpower2_f(fSlow294); + double fSlow296 = (3.5 * (((5.0 * fSlow295) + -3.0) * fSlow24)); + double fSlow297 = (1.375 * (((15.0 - (70.0 * fSlow295)) + (63.0 * mydsp_faustpower4_f(fSlow294))) * fSlow40)); + double fSlow298 = (2.5 * (((3.0 * fSlow295) + -1.0) * fSlow62)); + double fSlow299 = (1.125 * (((fSlow295 * ((35.0 * fSlow295) + -30.0)) + 3.0) * fSlow72)); + double fSlow300 = (0.95346258924559235 * (cos((fSlow0 + -0.32175055439664263)) * fSlow3)); + double fSlow301 = (0.30151134457776352 * fSlow6); + double fSlow302 = (fSlow300 + fSlow301); + double fSlow303 = mydsp_faustpower2_f(fSlow302); + double fSlow304 = (3.5 * (((5.0 * fSlow303) + -3.0) * fSlow24)); + double fSlow305 = (1.375 * (((15.0 - (70.0 * fSlow303)) + (63.0 * mydsp_faustpower4_f(fSlow302))) * fSlow40)); + double fSlow306 = (2.5 * (((3.0 * fSlow303) + -1.0) * fSlow62)); + double fSlow307 = (1.125 * (((fSlow303 * ((35.0 * fSlow303) + -30.0)) + 3.0) * fSlow72)); + double fSlow308 = (0.95346258924559235 * (cos((fSlow0 + -1.2490457723982544)) * fSlow3)); + double fSlow309 = (fSlow301 + fSlow308); + double fSlow310 = mydsp_faustpower2_f(fSlow309); + double fSlow311 = (3.5 * (((5.0 * fSlow310) + -3.0) * fSlow24)); + double fSlow312 = (1.375 * (((15.0 - (70.0 * fSlow310)) + (63.0 * mydsp_faustpower4_f(fSlow309))) * fSlow40)); + double fSlow313 = (2.5 * (((3.0 * fSlow310) + -1.0) * fSlow62)); + double fSlow314 = (1.125 * (((fSlow310 * ((35.0 * fSlow310) + -30.0)) + 3.0) * fSlow72)); + double fSlow315 = (0.95346258924559235 * (cos((fSlow0 + -1.8925468811915387)) * fSlow3)); + double fSlow316 = (fSlow301 + fSlow315); + double fSlow317 = mydsp_faustpower2_f(fSlow316); + double fSlow318 = (3.5 * (((5.0 * fSlow317) + -3.0) * fSlow24)); + double fSlow319 = (1.375 * (((15.0 - (70.0 * fSlow317)) + (63.0 * mydsp_faustpower4_f(fSlow316))) * fSlow40)); + double fSlow320 = (2.5 * (((3.0 * fSlow317) + -1.0) * fSlow62)); + double fSlow321 = (1.125 * (((fSlow317 * ((35.0 * fSlow317) + -30.0)) + 3.0) * fSlow72)); + double fSlow322 = (0.95346258924559235 * (cos((fSlow0 + -2.8198420991931505)) * fSlow3)); + double fSlow323 = (fSlow301 + fSlow322); + double fSlow324 = mydsp_faustpower2_f(fSlow323); + double fSlow325 = (3.5 * (((5.0 * fSlow324) + -3.0) * fSlow24)); + double fSlow326 = (1.375 * (((15.0 - (70.0 * fSlow324)) + (63.0 * mydsp_faustpower4_f(fSlow323))) * fSlow40)); + double fSlow327 = (2.5 * (((3.0 * fSlow324) + -1.0) * fSlow62)); + double fSlow328 = (1.125 * (((fSlow324 * ((35.0 * fSlow324) + -30.0)) + 3.0) * fSlow72)); + double fSlow329 = (0.95346258924559235 * (cos((fSlow0 + -3.4633432079864357)) * fSlow3)); + double fSlow330 = (fSlow301 + fSlow329); + double fSlow331 = mydsp_faustpower2_f(fSlow330); + double fSlow332 = (3.5 * (((5.0 * fSlow331) + -3.0) * fSlow24)); + double fSlow333 = (1.375 * (((15.0 - (70.0 * fSlow331)) + (63.0 * mydsp_faustpower4_f(fSlow330))) * fSlow40)); + double fSlow334 = (2.5 * (((3.0 * fSlow331) + -1.0) * fSlow62)); + double fSlow335 = (1.125 * (((fSlow331 * ((35.0 * fSlow331) + -30.0)) + 3.0) * fSlow72)); + double fSlow336 = (0.95346258924559235 * (cos((fSlow0 + -4.3906384259880475)) * fSlow3)); + double fSlow337 = (fSlow301 + fSlow336); + double fSlow338 = mydsp_faustpower2_f(fSlow337); + double fSlow339 = (3.5 * (((5.0 * fSlow338) + -3.0) * fSlow24)); + double fSlow340 = (1.375 * (((15.0 - (70.0 * fSlow338)) + (63.0 * mydsp_faustpower4_f(fSlow337))) * fSlow40)); + double fSlow341 = (2.5 * (((3.0 * fSlow338) + -1.0) * fSlow62)); + double fSlow342 = (1.125 * (((fSlow338 * ((35.0 * fSlow338) + -30.0)) + 3.0) * fSlow72)); + double fSlow343 = (0.95346258924559235 * (cos((fSlow0 + -5.0341395347813318)) * fSlow3)); + double fSlow344 = (fSlow301 + fSlow343); + double fSlow345 = mydsp_faustpower2_f(fSlow344); + double fSlow346 = (3.5 * (((5.0 * fSlow345) + -3.0) * fSlow24)); + double fSlow347 = (1.375 * (((15.0 - (70.0 * fSlow345)) + (63.0 * mydsp_faustpower4_f(fSlow344))) * fSlow40)); + double fSlow348 = (2.5 * (((3.0 * fSlow345) + -1.0) * fSlow62)); + double fSlow349 = (1.125 * (((fSlow345 * ((35.0 * fSlow345) + -30.0)) + 3.0) * fSlow72)); + double fSlow350 = (0.95346258924559235 * (cos((fSlow0 + -5.9614347527829432)) * fSlow3)); + double fSlow351 = (fSlow301 + fSlow350); + double fSlow352 = mydsp_faustpower2_f(fSlow351); + double fSlow353 = (3.5 * (((5.0 * fSlow352) + -3.0) * fSlow24)); + double fSlow354 = (1.375 * (((15.0 - (70.0 * fSlow352)) + (63.0 * mydsp_faustpower4_f(fSlow351))) * fSlow40)); + double fSlow355 = (2.5 * (((3.0 * fSlow352) + -1.0) * fSlow62)); + double fSlow356 = (1.125 * (((fSlow352 * ((35.0 * fSlow352) + -30.0)) + 3.0) * fSlow72)); + double fSlow357 = (fSlow300 - fSlow301); + double fSlow358 = mydsp_faustpower2_f(fSlow357); + double fSlow359 = (3.5 * (((5.0 * fSlow358) + -3.0) * fSlow24)); + double fSlow360 = (1.375 * (((15.0 - (70.0 * fSlow358)) + (63.0 * mydsp_faustpower4_f(fSlow357))) * fSlow40)); + double fSlow361 = (2.5 * (((3.0 * fSlow358) + -1.0) * fSlow62)); + double fSlow362 = (1.125 * (((fSlow358 * ((35.0 * fSlow358) + -30.0)) + 3.0) * fSlow72)); + double fSlow363 = (fSlow308 - fSlow301); + double fSlow364 = mydsp_faustpower2_f(fSlow363); + double fSlow365 = (3.5 * (((5.0 * fSlow364) + -3.0) * fSlow24)); + double fSlow366 = (1.375 * (((15.0 - (70.0 * fSlow364)) + (63.0 * mydsp_faustpower4_f(fSlow363))) * fSlow40)); + double fSlow367 = (2.5 * (((3.0 * fSlow364) + -1.0) * fSlow62)); + double fSlow368 = (1.125 * (((fSlow364 * ((35.0 * fSlow364) + -30.0)) + 3.0) * fSlow72)); + double fSlow369 = (fSlow315 - fSlow301); + double fSlow370 = mydsp_faustpower2_f(fSlow369); + double fSlow371 = (3.5 * (((5.0 * fSlow370) + -3.0) * fSlow24)); + double fSlow372 = (1.375 * (((15.0 - (70.0 * fSlow370)) + (63.0 * mydsp_faustpower4_f(fSlow369))) * fSlow40)); + double fSlow373 = (2.5 * (((3.0 * fSlow370) + -1.0) * fSlow62)); + double fSlow374 = (1.125 * (((fSlow370 * ((35.0 * fSlow370) + -30.0)) + 3.0) * fSlow72)); + double fSlow375 = (fSlow322 - fSlow301); + double fSlow376 = mydsp_faustpower2_f(fSlow375); + double fSlow377 = (3.5 * (((5.0 * fSlow376) + -3.0) * fSlow24)); + double fSlow378 = (1.375 * (((15.0 - (70.0 * fSlow376)) + (63.0 * mydsp_faustpower4_f(fSlow375))) * fSlow40)); + double fSlow379 = (2.5 * (((3.0 * fSlow376) + -1.0) * fSlow62)); + double fSlow380 = (1.125 * (((fSlow376 * ((35.0 * fSlow376) + -30.0)) + 3.0) * fSlow72)); + double fSlow381 = (fSlow329 - fSlow301); + double fSlow382 = mydsp_faustpower2_f(fSlow381); + double fSlow383 = (3.5 * (((5.0 * fSlow382) + -3.0) * fSlow24)); + double fSlow384 = (1.375 * (((15.0 - (70.0 * fSlow382)) + (63.0 * mydsp_faustpower4_f(fSlow381))) * fSlow40)); + double fSlow385 = (2.5 * (((3.0 * fSlow382) + -1.0) * fSlow62)); + double fSlow386 = (1.125 * (((fSlow382 * ((35.0 * fSlow382) + -30.0)) + 3.0) * fSlow72)); + double fSlow387 = (fSlow336 - fSlow301); + double fSlow388 = mydsp_faustpower2_f(fSlow387); + double fSlow389 = (3.5 * (((5.0 * fSlow388) + -3.0) * fSlow24)); + double fSlow390 = (1.375 * (((15.0 - (70.0 * fSlow388)) + (63.0 * mydsp_faustpower4_f(fSlow387))) * fSlow40)); + double fSlow391 = (2.5 * (((3.0 * fSlow388) + -1.0) * fSlow62)); + double fSlow392 = (1.125 * (((fSlow388 * ((35.0 * fSlow388) + -30.0)) + 3.0) * fSlow72)); + double fSlow393 = (fSlow343 - fSlow301); + double fSlow394 = mydsp_faustpower2_f(fSlow393); + double fSlow395 = (3.5 * (((5.0 * fSlow394) + -3.0) * fSlow24)); + double fSlow396 = (1.375 * (((15.0 - (70.0 * fSlow394)) + (63.0 * mydsp_faustpower4_f(fSlow393))) * fSlow40)); + double fSlow397 = (2.5 * (((3.0 * fSlow394) + -1.0) * fSlow62)); + double fSlow398 = (1.125 * (((fSlow394 * ((35.0 * fSlow394) + -30.0)) + 3.0) * fSlow72)); + double fSlow399 = (fSlow350 - fSlow301); + double fSlow400 = mydsp_faustpower2_f(fSlow399); + double fSlow401 = (3.5 * (((5.0 * fSlow400) + -3.0) * fSlow24)); + double fSlow402 = (1.375 * (((15.0 - (70.0 * fSlow400)) + (63.0 * mydsp_faustpower4_f(fSlow399))) * fSlow40)); + double fSlow403 = (2.5 * (((3.0 * fSlow400) + -1.0) * fSlow62)); + double fSlow404 = (1.125 * (((fSlow400 * ((35.0 * fSlow400) + -30.0)) + 3.0) * fSlow72)); + double fSlow405 = (fSlow271 - fSlow272); + double fSlow406 = mydsp_faustpower2_f(fSlow405); + double fSlow407 = (3.5 * (((5.0 * fSlow406) + -3.0) * fSlow24)); + double fSlow408 = (1.375 * (((15.0 - (70.0 * fSlow406)) + (63.0 * mydsp_faustpower4_f(fSlow405))) * fSlow40)); + double fSlow409 = (2.5 * (((3.0 * fSlow406) + -1.0) * fSlow62)); + double fSlow410 = (1.125 * (((fSlow406 * ((35.0 * fSlow406) + -30.0)) + 3.0) * fSlow72)); + double fSlow411 = (fSlow279 - fSlow272); + double fSlow412 = mydsp_faustpower2_f(fSlow411); + double fSlow413 = (3.5 * (((5.0 * fSlow412) + -3.0) * fSlow24)); + double fSlow414 = (1.375 * (((15.0 - (70.0 * fSlow412)) + (63.0 * mydsp_faustpower4_f(fSlow411))) * fSlow40)); + double fSlow415 = (2.5 * (((3.0 * fSlow412) + -1.0) * fSlow62)); + double fSlow416 = (1.125 * (((fSlow412 * ((35.0 * fSlow412) + -30.0)) + 3.0) * fSlow72)); + double fSlow417 = (fSlow286 - fSlow272); + double fSlow418 = mydsp_faustpower2_f(fSlow417); + double fSlow419 = (3.5 * (((5.0 * fSlow418) + -3.0) * fSlow24)); + double fSlow420 = (1.375 * (((15.0 - (70.0 * fSlow418)) + (63.0 * mydsp_faustpower4_f(fSlow417))) * fSlow40)); + double fSlow421 = (2.5 * (((3.0 * fSlow418) + -1.0) * fSlow62)); + double fSlow422 = (1.125 * (((fSlow418 * ((35.0 * fSlow418) + -30.0)) + 3.0) * fSlow72)); + double fSlow423 = (fSlow293 - fSlow272); + double fSlow424 = mydsp_faustpower2_f(fSlow423); + double fSlow425 = (3.5 * (((5.0 * fSlow424) + -3.0) * fSlow24)); + double fSlow426 = (1.375 * (((15.0 - (70.0 * fSlow424)) + (63.0 * mydsp_faustpower4_f(fSlow423))) * fSlow40)); + double fSlow427 = (2.5 * (((3.0 * fSlow424) + -1.0) * fSlow62)); + double fSlow428 = (1.125 * (((fSlow424 * ((35.0 * fSlow424) + -30.0)) + 3.0) * fSlow72)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec3[0] = (fSlow19 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input0[i])); + fRec4[0] = (fRec4[1] + fRec2[1]); + fRec2[0] = (fSlow16 * ((fSlow18 * fTemp0) - (fSlow20 * fRec4[0]))); + fRec1[0] = (fRec2[0] + fRec1[1]); + double fTemp1 = (fSlow22 * fTemp0); + fRec6[0] = (fRec6[1] + fRec5[1]); + fRec5[0] = (fSlow16 * (fTemp1 - (fSlow20 * fRec6[0]))); + double fTemp2 = ((fSlow13 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0])); + double fTemp3 = (fSlow9 * fTemp2); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec11[0] = (fRec11[1] + fRec10[1]); + fRec9[0] = (fSlow30 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec10[0]) + (fSlow34 * fRec11[0])))); + fRec12[0] = (fRec9[0] + fRec12[1]); + double fTemp4 = (fRec12[0] - fRec9[0]); + fVec0[0] = fTemp4; + fRec13[0] = (fRec13[1] + fVec0[1]); + fRec14[0] = (fRec14[1] + fRec8[1]); + fRec8[0] = (fSlow28 * ((fSlow26 * (fRec9[0] + (fSlow36 * ((fSlow38 * fTemp4) + (fSlow37 * fRec13[0]))))) - (fSlow39 * fRec14[0]))); + fRec7[0] = (fRec8[0] + fRec7[1]); + fRec17[0] = (fRec17[1] + fRec16[1]); + fRec18[0] = (fRec18[1] + fRec17[1]); + fRec16[0] = (fSlow30 * (fTemp1 - ((fSlow35 * fRec17[0]) + (fSlow34 * fRec18[0])))); + fRec19[0] = (fRec19[1] + fRec15[1]); + fRec15[0] = (fSlow28 * (fRec16[0] - (fSlow39 * fRec19[0]))); + double fTemp5 = ((fSlow27 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); + fRec24[0] = (fRec24[1] + fRec23[1]); + fRec25[0] = (fRec25[1] + fRec24[1]); + fRec23[0] = (fSlow47 * ((fSlow49 * fTemp0) - ((fSlow51 * fRec24[0]) + (fSlow50 * fRec25[0])))); + fRec26[0] = (fRec23[0] + fRec26[1]); + double fTemp6 = (fRec26[0] - fRec23[0]); + fVec1[0] = fTemp6; + fRec27[0] = (fRec27[1] + fVec1[1]); + fRec28[0] = (fRec28[1] + fRec22[1]); + fRec29[0] = (fRec29[1] + fRec28[1]); + fRec22[0] = (fSlow45 * ((fSlow46 * (fRec23[0] + (fSlow52 * ((fSlow54 * fTemp6) + (fSlow53 * fRec27[0]))))) - ((fSlow56 * fRec28[0]) + (fSlow55 * fRec29[0])))); + fRec30[0] = (fRec22[0] + fRec30[1]); + double fTemp7 = (fRec30[0] - fRec22[0]); + fVec2[0] = fTemp7; + fRec31[0] = (fRec31[1] + fVec2[1]); + fRec32[0] = (fRec32[1] + fRec21[1]); + fRec21[0] = (fSlow44 * ((fSlow42 * (fRec22[0] + (fSlow57 * ((fSlow59 * fTemp7) + (fSlow58 * fRec31[0]))))) - (fSlow60 * fRec32[0]))); + fRec20[0] = (fRec21[0] + fRec20[1]); + fRec36[0] = (fRec36[1] + fRec35[1]); + fRec37[0] = (fRec37[1] + fRec36[1]); + fRec35[0] = (fSlow47 * (fTemp1 - ((fSlow51 * fRec36[0]) + (fSlow50 * fRec37[0])))); + fRec38[0] = (fRec38[1] + fRec34[1]); + fRec39[0] = (fRec39[1] + fRec38[1]); + fRec34[0] = (fSlow45 * (fRec35[0] - ((fSlow56 * fRec38[0]) + (fSlow55 * fRec39[0])))); + fRec40[0] = (fRec40[1] + fRec33[1]); + fRec33[0] = (fSlow44 * (fRec34[0] - (fSlow60 * fRec40[0]))); + double fTemp8 = ((fSlow43 * (fRec20[0] - fRec21[0])) + (fRec21[0] + fRec33[0])); + double fTemp9 = (fSlow61 * fTemp0); + fRec43[0] = (fRec43[1] + fRec42[1]); + fRec44[0] = (fRec44[1] + fRec43[1]); + fRec42[0] = (fSlow68 * ((fSlow69 * fTemp0) - ((fSlow71 * fRec43[0]) + (fSlow70 * fRec44[0])))); + fRec41[0] = (fRec42[0] + fRec41[1]); + double fTemp10 = (fRec41[0] - fRec42[0]); + fVec3[0] = fTemp10; + fRec45[0] = (fRec45[1] + fVec3[1]); + fRec47[0] = (fRec47[1] + fRec46[1]); + fRec48[0] = (fRec48[1] + fRec47[1]); + fRec46[0] = (fSlow68 * (fTemp1 - ((fSlow71 * fRec47[0]) + (fSlow70 * fRec48[0])))); + double fTemp11 = ((fSlow65 * ((fSlow67 * fTemp10) + (fSlow66 * fRec45[0]))) + (fRec42[0] + fRec46[0])); + fRec52[0] = (fRec52[1] + fRec51[1]); + fRec53[0] = (fRec53[1] + fRec52[1]); + fRec51[0] = (fSlow79 * ((fSlow81 * fTemp0) - ((fSlow83 * fRec52[0]) + (fSlow82 * fRec53[0])))); + fRec54[0] = (fRec51[0] + fRec54[1]); + double fTemp12 = (fRec54[0] - fRec51[0]); + fVec4[0] = fTemp12; + fRec55[0] = (fRec55[1] + fVec4[1]); + fRec56[0] = (fRec56[1] + fRec50[1]); + fRec57[0] = (fRec57[1] + fRec56[1]); + fRec50[0] = (fSlow78 * ((fSlow74 * (fRec51[0] + (fSlow84 * ((fSlow86 * fTemp12) + (fSlow85 * fRec55[0]))))) - ((fSlow88 * fRec56[0]) + (fSlow87 * fRec57[0])))); + fRec49[0] = (fRec50[0] + fRec49[1]); + double fTemp13 = (fRec49[0] - fRec50[0]); + fVec5[0] = fTemp13; + fRec58[0] = (fRec58[1] + fVec5[1]); + fRec61[0] = (fRec61[1] + fRec60[1]); + fRec62[0] = (fRec62[1] + fRec61[1]); + fRec60[0] = (fSlow79 * (fTemp1 - ((fSlow83 * fRec61[0]) + (fSlow82 * fRec62[0])))); + fRec63[0] = (fRec63[1] + fRec59[1]); + fRec64[0] = (fRec64[1] + fRec63[1]); + fRec59[0] = (fSlow78 * (fRec60[0] - ((fSlow88 * fRec63[0]) + (fSlow87 * fRec64[0])))); + double fTemp14 = ((fSlow75 * ((fSlow77 * fTemp13) + (fSlow76 * fRec58[0]))) + (fRec50[0] + fRec59[0])); + double fTemp15 = (0.012698412698412698 * ((fSlow7 * ((fTemp3 + (fSlow25 * fTemp5)) + (fSlow41 * fTemp8))) + ((fTemp9 + (fSlow63 * fTemp11)) + (fSlow73 * fTemp14)))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.012698412698412698 * (((((fTemp9 + (fSlow89 * fTemp2)) + (fSlow91 * fTemp11)) + (fSlow93 * fTemp5)) + (fSlow94 * fTemp14)) + (fSlow95 * fTemp8))); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph1 = FAUSTFLOAT(fRec65[0]); + output1[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.012698412698412698 * (((((fTemp9 + (fSlow97 * fTemp2)) + (fSlow100 * fTemp11)) + (fSlow102 * fTemp5)) + (fSlow103 * fTemp14)) + (fSlow104 * fTemp8))); + fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph2 = FAUSTFLOAT(fRec66[0]); + output2[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.012698412698412698 * (((((fTemp9 + (fSlow106 * fTemp2)) + (fSlow109 * fTemp11)) + (fSlow111 * fTemp5)) + (fSlow112 * fTemp14)) + (fSlow113 * fTemp8))); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph3 = FAUSTFLOAT(fRec67[0]); + output3[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.012698412698412698 * (((((fTemp9 + (fSlow115 * fTemp2)) + (fSlow118 * fTemp11)) + (fSlow120 * fTemp5)) + (fSlow121 * fTemp14)) + (fSlow122 * fTemp8))); + fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph4 = FAUSTFLOAT(fRec68[0]); + output4[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.012698412698412698 * ((fSlow123 * ((fTemp3 + (fSlow125 * fTemp5)) + (fSlow126 * fTemp8))) + ((fTemp9 + (fSlow127 * fTemp11)) + (fSlow128 * fTemp14)))); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph5 = FAUSTFLOAT(fRec69[0]); + output5[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.022574955908289243 * ((fSlow131 * ((fTemp3 + (fSlow133 * fTemp5)) + (fSlow134 * fTemp8))) + ((fTemp9 + (fSlow135 * fTemp11)) + (fSlow136 * fTemp14)))); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph6 = FAUSTFLOAT(fRec70[0]); + output6[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.022574955908289243 * ((fSlow138 * ((fTemp3 + (fSlow140 * fTemp5)) + (fSlow141 * fTemp8))) + ((fTemp9 + (fSlow142 * fTemp11)) + (fSlow143 * fTemp14)))); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph7 = FAUSTFLOAT(fRec71[0]); + output7[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.022574955908289243 * ((fSlow145 * ((fTemp3 + (fSlow147 * fTemp5)) + (fSlow148 * fTemp8))) + ((fTemp9 + (fSlow149 * fTemp11)) + (fSlow150 * fTemp14)))); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph8 = FAUSTFLOAT(fRec72[0]); + output8[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.022574955908289243 * ((fSlow152 * ((fTemp3 + (fSlow154 * fTemp5)) + (fSlow155 * fTemp8))) + ((fTemp9 + (fSlow156 * fTemp11)) + (fSlow157 * fTemp14)))); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph9 = FAUSTFLOAT(fRec73[0]); + output9[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.022574955908289243 * (((((fTemp9 + (fSlow159 * fTemp2)) + (fSlow162 * fTemp11)) + (fSlow164 * fTemp5)) + (fSlow165 * fTemp14)) + (fSlow166 * fTemp8))); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph10 = FAUSTFLOAT(fRec74[0]); + output10[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.022574955908289243 * (((((fTemp9 + (fSlow168 * fTemp2)) + (fSlow171 * fTemp11)) + (fSlow173 * fTemp5)) + (fSlow174 * fTemp14)) + (fSlow175 * fTemp8))); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph11 = FAUSTFLOAT(fRec75[0]); + output11[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.022574955908289243 * (((((fTemp9 + (fSlow177 * fTemp2)) + (fSlow180 * fTemp11)) + (fSlow182 * fTemp5)) + (fSlow183 * fTemp14)) + (fSlow184 * fTemp8))); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph12 = FAUSTFLOAT(fRec76[0]); + output12[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.022574955908289243 * (((((fTemp9 + (fSlow186 * fTemp2)) + (fSlow189 * fTemp11)) + (fSlow191 * fTemp5)) + (fSlow192 * fTemp14)) + (fSlow193 * fTemp8))); + fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph13 = FAUSTFLOAT(fRec77[0]); + output13[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.022574955908289243 * ((fSlow194 * ((fTemp3 + (fSlow196 * fTemp5)) + (fSlow197 * fTemp8))) + ((fTemp9 + (fSlow198 * fTemp11)) + (fSlow199 * fTemp14)))); + fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph14 = FAUSTFLOAT(fRec78[0]); + output14[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.022574955908289243 * ((fSlow200 * ((fTemp3 + (fSlow202 * fTemp5)) + (fSlow203 * fTemp8))) + ((fTemp9 + (fSlow204 * fTemp11)) + (fSlow205 * fTemp14)))); + fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph15 = FAUSTFLOAT(fRec79[0]); + output15[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.022574955908289243 * ((fSlow206 * ((fTemp3 + (fSlow208 * fTemp5)) + (fSlow209 * fTemp8))) + ((fSlow210 * fTemp14) + (fTemp9 + (fSlow211 * fTemp11))))); + fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph16 = FAUSTFLOAT(fRec80[0]); + output16[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.022574955908289243 * ((fSlow212 * ((fTemp3 + (fSlow214 * fTemp5)) + (fSlow215 * fTemp8))) + ((fTemp9 + (fSlow216 * fTemp11)) + (fSlow217 * fTemp14)))); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph17 = FAUSTFLOAT(fRec81[0]); + output17[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.021093750000000001 * ((fSlow220 * ((fTemp3 + (fSlow222 * fTemp5)) + (fSlow223 * fTemp8))) + ((fTemp9 + (fSlow224 * fTemp11)) + (fSlow225 * fTemp14)))); + fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph18 = FAUSTFLOAT(fRec82[0]); + output18[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.021093750000000001 * ((fSlow227 * ((fTemp3 + (fSlow229 * fTemp5)) + (fSlow230 * fTemp8))) + ((fTemp9 + (fSlow231 * fTemp11)) + (fSlow232 * fTemp14)))); + fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph19 = FAUSTFLOAT(fRec83[0]); + output19[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (0.021093750000000001 * ((fSlow234 * ((fTemp3 + (fSlow236 * fTemp5)) + (fSlow237 * fTemp8))) + ((fTemp9 + (fSlow238 * fTemp11)) + (fSlow239 * fTemp14)))); + fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph20 = FAUSTFLOAT(fRec84[0]); + output20[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (0.021093750000000001 * ((fSlow241 * ((fTemp3 + (fSlow243 * fTemp5)) + (fSlow244 * fTemp8))) + ((fTemp9 + (fSlow245 * fTemp11)) + (fSlow246 * fTemp14)))); + fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph21 = FAUSTFLOAT(fRec85[0]); + output21[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (0.021093750000000001 * ((fSlow247 * ((fTemp3 + (fSlow249 * fTemp5)) + (fSlow250 * fTemp8))) + ((fTemp9 + (fSlow251 * fTemp11)) + (fSlow252 * fTemp14)))); + fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph22 = FAUSTFLOAT(fRec86[0]); + output22[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (0.021093750000000001 * ((fSlow253 * ((fTemp3 + (fSlow255 * fTemp5)) + (fSlow256 * fTemp8))) + ((fTemp9 + (fSlow257 * fTemp11)) + (fSlow258 * fTemp14)))); + fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph23 = FAUSTFLOAT(fRec87[0]); + output23[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (0.021093750000000001 * ((fSlow259 * ((fTemp3 + (fSlow261 * fTemp5)) + (fSlow262 * fTemp8))) + ((fTemp9 + (fSlow263 * fTemp11)) + (fSlow264 * fTemp14)))); + fRec88[0] = max((fRec88[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph24 = FAUSTFLOAT(fRec88[0]); + output24[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.021093750000000001 * ((fSlow265 * ((fTemp3 + (fSlow267 * fTemp5)) + (fSlow268 * fTemp8))) + ((fTemp9 + (fSlow269 * fTemp11)) + (fSlow270 * fTemp14)))); + fRec89[0] = max((fRec89[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph25 = FAUSTFLOAT(fRec89[0]); + output25[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (0.02017333553791887 * ((fSlow273 * ((fTemp3 + (fSlow275 * fTemp5)) + (fSlow276 * fTemp8))) + ((fTemp9 + (fSlow277 * fTemp11)) + (fSlow278 * fTemp14)))); + fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph26 = FAUSTFLOAT(fRec90[0]); + output26[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (0.02017333553791887 * ((fSlow280 * ((fTemp3 + (fSlow282 * fTemp5)) + (fSlow283 * fTemp8))) + ((fTemp9 + (fSlow284 * fTemp11)) + (fSlow285 * fTemp14)))); + fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph27 = FAUSTFLOAT(fRec91[0]); + output27[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (0.02017333553791887 * ((fSlow287 * ((fTemp3 + (fSlow289 * fTemp5)) + (fSlow290 * fTemp8))) + ((fTemp9 + (fSlow291 * fTemp11)) + (fSlow292 * fTemp14)))); + fRec92[0] = max((fRec92[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph28 = FAUSTFLOAT(fRec92[0]); + output28[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (0.02017333553791887 * ((fSlow294 * ((fTemp3 + (fSlow296 * fTemp5)) + (fSlow297 * fTemp8))) + ((fTemp9 + (fSlow298 * fTemp11)) + (fSlow299 * fTemp14)))); + fRec93[0] = max((fRec93[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph29 = FAUSTFLOAT(fRec93[0]); + output29[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.02017333553791887 * ((fSlow302 * ((fTemp3 + (fSlow304 * fTemp5)) + (fSlow305 * fTemp8))) + ((fTemp9 + (fSlow306 * fTemp11)) + (fSlow307 * fTemp14)))); + fRec94[0] = max((fRec94[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph30 = FAUSTFLOAT(fRec94[0]); + output30[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (0.02017333553791887 * ((fSlow309 * ((fTemp3 + (fSlow311 * fTemp5)) + (fSlow312 * fTemp8))) + ((fTemp9 + (fSlow313 * fTemp11)) + (fSlow314 * fTemp14)))); + fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph31 = FAUSTFLOAT(fRec95[0]); + output31[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (0.02017333553791887 * ((fSlow316 * ((fTemp3 + (fSlow318 * fTemp5)) + (fSlow319 * fTemp8))) + ((fTemp9 + (fSlow320 * fTemp11)) + (fSlow321 * fTemp14)))); + fRec96[0] = max((fRec96[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph32 = FAUSTFLOAT(fRec96[0]); + output32[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (0.02017333553791887 * ((fSlow323 * ((fTemp3 + (fSlow325 * fTemp5)) + (fSlow326 * fTemp8))) + ((fTemp9 + (fSlow327 * fTemp11)) + (fSlow328 * fTemp14)))); + fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph33 = FAUSTFLOAT(fRec97[0]); + output33[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.02017333553791887 * ((fSlow330 * ((fTemp3 + (fSlow332 * fTemp5)) + (fSlow333 * fTemp8))) + ((fTemp9 + (fSlow334 * fTemp11)) + (fSlow335 * fTemp14)))); + fRec98[0] = max((fRec98[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph34 = FAUSTFLOAT(fRec98[0]); + output34[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (0.02017333553791887 * ((fSlow337 * ((fTemp3 + (fSlow339 * fTemp5)) + (fSlow340 * fTemp8))) + ((fTemp9 + (fSlow341 * fTemp11)) + (fSlow342 * fTemp14)))); + fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph35 = FAUSTFLOAT(fRec99[0]); + output35[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * ((fSlow344 * ((fTemp3 + (fSlow346 * fTemp5)) + (fSlow347 * fTemp8))) + ((fTemp9 + (fSlow348 * fTemp11)) + (fSlow349 * fTemp14)))); + fRec100[0] = max((fRec100[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph36 = FAUSTFLOAT(fRec100[0]); + output36[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (0.02017333553791887 * ((fSlow351 * ((fTemp3 + (fSlow353 * fTemp5)) + (fSlow354 * fTemp8))) + ((fTemp9 + (fSlow355 * fTemp11)) + (fSlow356 * fTemp14)))); + fRec101[0] = max((fRec101[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph37 = FAUSTFLOAT(fRec101[0]); + output37[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (0.02017333553791887 * ((fSlow357 * ((fTemp3 + (fSlow359 * fTemp5)) + (fSlow360 * fTemp8))) + ((fTemp9 + (fSlow361 * fTemp11)) + (fSlow362 * fTemp14)))); + fRec102[0] = max((fRec102[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph38 = FAUSTFLOAT(fRec102[0]); + output38[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (0.02017333553791887 * ((fSlow363 * ((fTemp3 + (fSlow365 * fTemp5)) + (fSlow366 * fTemp8))) + ((fTemp9 + (fSlow367 * fTemp11)) + (fSlow368 * fTemp14)))); + fRec103[0] = max((fRec103[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph39 = FAUSTFLOAT(fRec103[0]); + output39[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (0.02017333553791887 * ((fSlow369 * ((fTemp3 + (fSlow371 * fTemp5)) + (fSlow372 * fTemp8))) + ((fTemp9 + (fSlow373 * fTemp11)) + (fSlow374 * fTemp14)))); + fRec104[0] = max((fRec104[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph40 = FAUSTFLOAT(fRec104[0]); + output40[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (0.02017333553791887 * ((fSlow375 * ((fTemp3 + (fSlow377 * fTemp5)) + (fSlow378 * fTemp8))) + ((fTemp9 + (fSlow379 * fTemp11)) + (fSlow380 * fTemp14)))); + fRec105[0] = max((fRec105[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph41 = FAUSTFLOAT(fRec105[0]); + output41[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (0.02017333553791887 * ((fSlow381 * ((fTemp3 + (fSlow383 * fTemp5)) + (fSlow384 * fTemp8))) + ((fTemp9 + (fSlow385 * fTemp11)) + (fSlow386 * fTemp14)))); + fRec106[0] = max((fRec106[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph42 = FAUSTFLOAT(fRec106[0]); + output42[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (0.02017333553791887 * ((fSlow387 * ((fTemp3 + (fSlow389 * fTemp5)) + (fSlow390 * fTemp8))) + ((fTemp9 + (fSlow391 * fTemp11)) + (fSlow392 * fTemp14)))); + fRec107[0] = max((fRec107[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph43 = FAUSTFLOAT(fRec107[0]); + output43[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = (0.02017333553791887 * ((fSlow393 * ((fTemp3 + (fSlow395 * fTemp5)) + (fSlow396 * fTemp8))) + ((fTemp9 + (fSlow397 * fTemp11)) + (fSlow398 * fTemp14)))); + fRec108[0] = max((fRec108[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph44 = FAUSTFLOAT(fRec108[0]); + output44[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = (0.02017333553791887 * ((fSlow399 * ((fTemp3 + (fSlow401 * fTemp5)) + (fSlow402 * fTemp8))) + ((fTemp9 + (fSlow403 * fTemp11)) + (fSlow404 * fTemp14)))); + fRec109[0] = max((fRec109[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph45 = FAUSTFLOAT(fRec109[0]); + output45[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = (0.02017333553791887 * ((fSlow405 * ((fTemp3 + (fSlow407 * fTemp5)) + (fSlow408 * fTemp8))) + ((fTemp9 + (fSlow409 * fTemp11)) + (fSlow410 * fTemp14)))); + fRec110[0] = max((fRec110[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph46 = FAUSTFLOAT(fRec110[0]); + output46[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (0.02017333553791887 * ((fSlow411 * ((fTemp3 + (fSlow413 * fTemp5)) + (fSlow414 * fTemp8))) + ((fTemp9 + (fSlow415 * fTemp11)) + (fSlow416 * fTemp14)))); + fRec111[0] = max((fRec111[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph47 = FAUSTFLOAT(fRec111[0]); + output47[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = (0.02017333553791887 * ((fSlow417 * ((fTemp3 + (fSlow419 * fTemp5)) + (fSlow420 * fTemp8))) + ((fTemp9 + (fSlow421 * fTemp11)) + (fSlow422 * fTemp14)))); + fRec112[0] = max((fRec112[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph48 = FAUSTFLOAT(fRec112[0]); + output48[i] = FAUSTFLOAT(fTemp63); + double fTemp64 = (0.02017333553791887 * ((fSlow423 * ((fTemp3 + (fSlow425 * fTemp5)) + (fSlow426 * fTemp8))) + ((fTemp9 + (fSlow427 * fTemp11)) + (fSlow428 * fTemp14)))); + fRec113[0] = max((fRec113[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph49 = FAUSTFLOAT(fRec113[0]); + output49[i] = FAUSTFLOAT(fTemp64); + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; + fRec1[1] = fRec1[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec9[1] = fRec9[0]; + fRec12[1] = fRec12[0]; + fVec0[1] = fVec0[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec8[1] = fRec8[0]; + fRec7[1] = fRec7[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec15[1] = fRec15[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; + fRec23[1] = fRec23[0]; + fRec26[1] = fRec26[0]; + fVec1[1] = fVec1[0]; + fRec27[1] = fRec27[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec22[1] = fRec22[0]; + fRec30[1] = fRec30[0]; + fVec2[1] = fVec2[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; + fRec35[1] = fRec35[0]; + fRec38[1] = fRec38[0]; + fRec39[1] = fRec39[0]; + fRec34[1] = fRec34[0]; + fRec40[1] = fRec40[0]; + fRec33[1] = fRec33[0]; + fRec43[1] = fRec43[0]; + fRec44[1] = fRec44[0]; + fRec42[1] = fRec42[0]; + fRec41[1] = fRec41[0]; + fVec3[1] = fVec3[0]; + fRec45[1] = fRec45[0]; + fRec47[1] = fRec47[0]; + fRec48[1] = fRec48[0]; + fRec46[1] = fRec46[0]; + fRec52[1] = fRec52[0]; + fRec53[1] = fRec53[0]; + fRec51[1] = fRec51[0]; + fRec54[1] = fRec54[0]; + fVec4[1] = fVec4[0]; + fRec55[1] = fRec55[0]; + fRec56[1] = fRec56[0]; + fRec57[1] = fRec57[0]; + fRec50[1] = fRec50[0]; + fRec49[1] = fRec49[0]; + fVec5[1] = fVec5[0]; + fRec58[1] = fRec58[0]; + fRec61[1] = fRec61[0]; + fRec62[1] = fRec62[0]; + fRec60[1] = fRec60[0]; + fRec63[1] = fRec63[0]; + fRec64[1] = fRec64[0]; + fRec59[1] = fRec59[0]; + fRec0[1] = fRec0[0]; + fRec65[1] = fRec65[0]; + fRec66[1] = fRec66[0]; + fRec67[1] = fRec67[0]; + fRec68[1] = fRec68[0]; + fRec69[1] = fRec69[0]; + fRec70[1] = fRec70[0]; + fRec71[1] = fRec71[0]; + fRec72[1] = fRec72[0]; + fRec73[1] = fRec73[0]; + fRec74[1] = fRec74[0]; + fRec75[1] = fRec75[0]; + fRec76[1] = fRec76[0]; + fRec77[1] = fRec77[0]; + fRec78[1] = fRec78[0]; + fRec79[1] = fRec79[0]; + fRec80[1] = fRec80[0]; + fRec81[1] = fRec81[0]; + fRec82[1] = fRec82[0]; + fRec83[1] = fRec83[0]; + fRec84[1] = fRec84[0]; + fRec85[1] = fRec85[0]; + fRec86[1] = fRec86[0]; + fRec87[1] = fRec87[0]; + fRec88[1] = fRec88[0]; + fRec89[1] = fRec89[0]; + fRec90[1] = fRec90[0]; + fRec91[1] = fRec91[0]; + fRec92[1] = fRec92[0]; + fRec93[1] = fRec93[0]; + fRec94[1] = fRec94[0]; + fRec95[1] = fRec95[0]; + fRec96[1] = fRec96[0]; + fRec97[1] = fRec97[0]; + fRec98[1] = fRec98[0]; + fRec99[1] = fRec99[0]; + fRec100[1] = fRec100[0]; + fRec101[1] = fRec101[0]; + fRec102[1] = fRec102[0]; + fRec103[1] = fRec103[0]; + fRec104[1] = fRec104[0]; + fRec105[1] = fRec105[0]; + fRec106[1] = fRec106[0]; + fRec107[1] = fRec107[0]; + fRec108[1] = fRec108[0]; + fRec109[1] = fRec109[0]; + fRec110[1] = fRec110[0]; + fRec111[1] = fRec111[0]; + fRec112[1] = fRec112[0]; + fRec113[1] = fRec113[0]; + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOARotator1.cpp b/source/HOAUGens/HOARotator1.cpp old mode 100644 new mode 100755 index 5c05df9a8b..4ad2735c13 --- a/source/HOAUGens/HOARotator1.cpp +++ b/source/HOAUGens/HOARotator1.cpp @@ -1,18 +1,14 @@ -//---------------------------------------------------------- -// name: "HOARotator1" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.9.100 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -# define SC_FAUST_PREFIX "Faust" -#endif +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOARotator1" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. @@ -34,6 +30,11 @@ // 02111-1307 USA //------------------------------------------------------------------- +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + #include #include #include @@ -65,6 +66,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -72,6 +75,19 @@ class UI; struct Meta; +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + /** * Signal processor definition. */ @@ -90,30 +106,30 @@ class dsp { virtual int getNumOutputs() = 0; /** - * Trigger the UI* parameter with instance specific calls + * Trigger the ui_interface parameter with instance specific calls * to 'addBtton', 'addVerticalSlider'... in order to build the UI. * - * @param ui_interface - the UI* user interface builder + * @param ui_interface - the user interface builder */ virtual void buildUserInterface(UI* ui_interface) = 0; /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods: - * - static class 'classInit': static table initialisation - * - 'instanceInit': constants and instance table initialisation + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - + /** Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - + /** Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -125,8 +141,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -192,7 +208,30 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -563,52 +602,127 @@ class ControlAllocator : public UI #endif +double cos(double dummy0); +double sin(double dummy0); + #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); m->declare("name", "HOARotator1"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -618,63 +732,71 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } + virtual int getSampleRate() { return fSamplingFreq; } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator1"); - ui_interface->declare(&fslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider1, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider0, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = double(fslider2); - double fSlow5 = sin(fSlow4); - double fSlow6 = sin(fSlow0); - double fSlow7 = (fSlow5 * fSlow6); - double fSlow8 = sin(fSlow2); - double fSlow9 = ((fSlow1 * fSlow3) - (fSlow7 * fSlow8)); - double fSlow10 = cos(fSlow4); - double fSlow11 = (0 - fSlow10); - double fSlow12 = (fSlow11 * fSlow8); - double fSlow13 = (fSlow1 * fSlow5); - double fSlow14 = ((fSlow13 * fSlow8) + (fSlow6 * fSlow3)); - double fSlow15 = ((fSlow1 * fSlow8) + (fSlow7 * fSlow3)); - double fSlow16 = (fSlow10 * fSlow3); - double fSlow17 = ((fSlow13 * (0 - fSlow3)) + (fSlow6 * fSlow8)); - double fSlow18 = (fSlow6 * fSlow11); - double fSlow19 = (fSlow10 * fSlow1); - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - for (int i=0; i +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +double cos(double dummy0); +double sin(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOARotator2"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOARotator2"); + ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fHslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = sin(fSlow0); + double fSlow6 = sin(fSlow2); + double fSlow7 = (fSlow5 * fSlow6); + double fSlow8 = double(fHslider2); + double fSlow9 = sin(fSlow8); + double fSlow10 = (fSlow4 - (fSlow7 * fSlow9)); + double fSlow11 = cos(fSlow8); + double fSlow12 = (0.0 - fSlow11); + double fSlow13 = (fSlow6 * fSlow12); + double fSlow14 = (fSlow6 * fSlow9); + double fSlow15 = (fSlow5 * fSlow3); + double fSlow16 = ((fSlow14 * fSlow1) + fSlow15); + double fSlow17 = (fSlow6 * fSlow1); + double fSlow18 = (fSlow5 * fSlow9); + double fSlow19 = (fSlow17 + (fSlow18 * fSlow3)); + double fSlow20 = (fSlow3 * fSlow11); + double fSlow21 = (fSlow9 * fSlow1); + double fSlow22 = ((fSlow21 * (0.0 - fSlow3)) + fSlow7); + double fSlow23 = (fSlow5 * fSlow12); + double fSlow24 = (fSlow1 * fSlow11); + double fSlow25 = ((fSlow24 * fSlow10) + (fSlow23 * fSlow16)); + double fSlow26 = mydsp_faustpower2_f(fSlow12); + double fSlow27 = ((fSlow9 * fSlow10) + (fSlow7 * fSlow26)); + double fSlow28 = (1.7320508075688772 * (fSlow14 * fSlow12)); + double fSlow29 = ((fSlow9 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); + double fSlow30 = ((fSlow24 * fSlow16) - (fSlow23 * fSlow10)); + double fSlow31 = ((fSlow22 * fSlow10) + (fSlow19 * fSlow16)); + double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow6 * fSlow19) * fSlow12))); + double fSlow33 = (1.7320508075688772 * (((fSlow6 * fSlow3) * fSlow11) * fSlow12)); + double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow6 * fSlow22) * fSlow12))); + double fSlow35 = ((fSlow22 * fSlow16) - (fSlow19 * fSlow10)); + double fSlow36 = (((fSlow5 * fSlow1) * fSlow11) * fSlow12); + double fSlow37 = (fSlow16 * fSlow10); + double fSlow38 = ((1.1547005383792515 * (fSlow22 * fSlow19)) - (0.57735026918962573 * (fSlow36 + fSlow37))); + double fSlow39 = (fSlow6 * fSlow10); + double fSlow40 = ((1.1547005383792515 * (fSlow20 * fSlow19)) - (0.57735026918962573 * (fSlow12 * (fSlow18 + fSlow39)))); + double fSlow41 = mydsp_faustpower2_f(fSlow11); + double fSlow42 = mydsp_faustpower2_f(fSlow9); + double fSlow43 = (mydsp_faustpower2_f(fSlow6) * fSlow26); + double fSlow44 = ((mydsp_faustpower2_f(fSlow3) * fSlow41) - (0.5 * (fSlow42 + fSlow43))); + double fSlow45 = (fSlow21 * fSlow11); + double fSlow46 = (fSlow13 * fSlow16); + double fSlow47 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.57735026918962573 * (fSlow45 + fSlow46))); + double fSlow48 = (mydsp_faustpower2_f(fSlow1) * fSlow41); + double fSlow49 = mydsp_faustpower2_f(fSlow16); + double fSlow50 = (mydsp_faustpower2_f(fSlow5) * fSlow26); + double fSlow51 = mydsp_faustpower2_f(fSlow10); + double fSlow52 = ((0.57735026918962573 * (mydsp_faustpower2_f(fSlow22) - mydsp_faustpower2_f(fSlow19))) - (0.28867513459481287 * ((fSlow48 + fSlow49) - (fSlow50 + fSlow51)))); + double fSlow53 = (((fSlow5 * fSlow22) * fSlow12) + (fSlow24 * fSlow19)); + double fSlow54 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow9 * fSlow19))); + double fSlow55 = (1.7320508075688772 * ((fSlow9 * fSlow3) * fSlow11)); + double fSlow56 = ((fSlow4 * fSlow41) + (1.0000000000000002 * (fSlow9 * fSlow22))); + double fSlow57 = ((fSlow24 * fSlow22) - ((fSlow5 * fSlow19) * fSlow12)); + double fSlow58 = (fSlow36 - fSlow37); + double fSlow59 = (fSlow12 * (fSlow18 - fSlow39)); + double fSlow60 = (0.8660254037844386 * (fSlow42 - fSlow43)); + double fSlow61 = (fSlow45 - fSlow46); + double fSlow62 = (0.5 * ((fSlow48 + fSlow51) - (fSlow50 + fSlow49))); + for (int i = 0; (i < count); i = (i + 1)) { + output0[i] = FAUSTFLOAT(double(input0[i])); + double fTemp0 = double(input1[i]); + double fTemp1 = double(input2[i]); + double fTemp2 = double(input3[i]); + output1[i] = FAUSTFLOAT((((fSlow10 * fTemp0) + (fSlow13 * fTemp1)) + (fSlow16 * fTemp2))); + output2[i] = FAUSTFLOAT((((fSlow19 * fTemp0) + (fSlow20 * fTemp1)) + (fSlow22 * fTemp2))); + output3[i] = FAUSTFLOAT((((fSlow23 * fTemp0) + (fSlow9 * fTemp1)) + (fSlow24 * fTemp2))); + double fTemp3 = double(input4[i]); + double fTemp4 = double(input5[i]); + double fTemp5 = double(input6[i]); + double fTemp6 = double(input7[i]); + double fTemp7 = double(input8[i]); + output4[i] = FAUSTFLOAT((((((fSlow25 * fTemp3) + (fSlow27 * fTemp4)) + (fSlow28 * fTemp5)) + (fSlow29 * fTemp6)) + (fSlow30 * fTemp7))); + output5[i] = FAUSTFLOAT((((((fSlow31 * fTemp3) + (fSlow32 * fTemp4)) + (fSlow33 * fTemp5)) + (fSlow34 * fTemp6)) + (fSlow35 * fTemp7))); + output6[i] = FAUSTFLOAT((((((fSlow38 * fTemp3) + (fSlow40 * fTemp4)) + (fSlow44 * fTemp5)) + (fSlow47 * fTemp6)) + (fSlow52 * fTemp7))); + output7[i] = FAUSTFLOAT((((((fSlow53 * fTemp3) + (fSlow54 * fTemp4)) + (fSlow55 * fTemp5)) + (fSlow56 * fTemp6)) + (fSlow57 * fTemp7))); + output8[i] = FAUSTFLOAT((((((fSlow58 * fTemp3) + (fSlow59 * fTemp4)) + (fSlow60 * fTemp5)) + (fSlow61 * fTemp6)) + (fSlow62 * fTemp7))); + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOARotator3.cpp b/source/HOAUGens/HOARotator3.cpp new file mode 100755 index 0000000000..3fef0f85f3 --- /dev/null +++ b/source/HOAUGens/HOARotator3.cpp @@ -0,0 +1,1425 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOARotator3" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +double cos(double dummy0); +double sin(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOARotator3"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOARotator3"); + ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fHslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = sin(fSlow0); + double fSlow6 = sin(fSlow2); + double fSlow7 = (fSlow5 * fSlow6); + double fSlow8 = double(fHslider2); + double fSlow9 = sin(fSlow8); + double fSlow10 = (fSlow4 - (fSlow7 * fSlow9)); + double fSlow11 = cos(fSlow8); + double fSlow12 = (0.0 - fSlow11); + double fSlow13 = (fSlow6 * fSlow12); + double fSlow14 = (fSlow6 * fSlow9); + double fSlow15 = (fSlow5 * fSlow3); + double fSlow16 = ((fSlow14 * fSlow1) + fSlow15); + double fSlow17 = (fSlow6 * fSlow1); + double fSlow18 = (fSlow5 * fSlow9); + double fSlow19 = (fSlow17 + (fSlow18 * fSlow3)); + double fSlow20 = (fSlow3 * fSlow11); + double fSlow21 = (fSlow9 * fSlow1); + double fSlow22 = ((fSlow21 * (0.0 - fSlow3)) + fSlow7); + double fSlow23 = (fSlow5 * fSlow12); + double fSlow24 = (fSlow1 * fSlow11); + double fSlow25 = ((fSlow24 * fSlow10) + (fSlow23 * fSlow16)); + double fSlow26 = mydsp_faustpower2_f(fSlow12); + double fSlow27 = ((fSlow9 * fSlow10) + (fSlow7 * fSlow26)); + double fSlow28 = (1.7320508075688772 * (fSlow14 * fSlow12)); + double fSlow29 = ((fSlow9 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); + double fSlow30 = ((fSlow24 * fSlow16) - (fSlow23 * fSlow10)); + double fSlow31 = ((fSlow19 * fSlow16) + (fSlow22 * fSlow10)); + double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow6 * fSlow19) * fSlow12))); + double fSlow33 = (1.7320508075688772 * (((fSlow6 * fSlow3) * fSlow11) * fSlow12)); + double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow6 * fSlow22) * fSlow12))); + double fSlow35 = ((fSlow22 * fSlow16) - (fSlow19 * fSlow10)); + double fSlow36 = (((fSlow5 * fSlow1) * fSlow11) * fSlow12); + double fSlow37 = (fSlow16 * fSlow10); + double fSlow38 = ((1.1547005383792515 * (fSlow22 * fSlow19)) - (0.57735026918962573 * (fSlow36 + fSlow37))); + double fSlow39 = (fSlow6 * fSlow10); + double fSlow40 = ((1.1547005383792515 * (fSlow20 * fSlow19)) - (0.57735026918962573 * ((fSlow18 + fSlow39) * fSlow12))); + double fSlow41 = mydsp_faustpower2_f(fSlow11); + double fSlow42 = (mydsp_faustpower2_f(fSlow3) * fSlow41); + double fSlow43 = mydsp_faustpower2_f(fSlow9); + double fSlow44 = (mydsp_faustpower2_f(fSlow6) * fSlow26); + double fSlow45 = (fSlow43 + fSlow44); + double fSlow46 = (fSlow42 - (0.5 * fSlow45)); + double fSlow47 = (fSlow21 * fSlow11); + double fSlow48 = (fSlow13 * fSlow16); + double fSlow49 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.57735026918962573 * (fSlow47 + fSlow48))); + double fSlow50 = (mydsp_faustpower2_f(fSlow1) * fSlow41); + double fSlow51 = mydsp_faustpower2_f(fSlow16); + double fSlow52 = (mydsp_faustpower2_f(fSlow5) * fSlow26); + double fSlow53 = mydsp_faustpower2_f(fSlow10); + double fSlow54 = ((0.57735026918962573 * (mydsp_faustpower2_f(fSlow22) - mydsp_faustpower2_f(fSlow19))) - (0.28867513459481287 * ((fSlow50 + fSlow51) - (fSlow52 + fSlow53)))); + double fSlow55 = (((fSlow5 * fSlow22) * fSlow12) + (fSlow24 * fSlow19)); + double fSlow56 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow9 * fSlow19))); + double fSlow57 = (1.7320508075688772 * ((fSlow9 * fSlow3) * fSlow11)); + double fSlow58 = ((fSlow4 * fSlow41) + (1.0000000000000002 * (fSlow9 * fSlow22))); + double fSlow59 = ((fSlow24 * fSlow22) - ((fSlow5 * fSlow19) * fSlow12)); + double fSlow60 = (fSlow36 - fSlow37); + double fSlow61 = (fSlow18 - fSlow39); + double fSlow62 = (fSlow12 * fSlow61); + double fSlow63 = (fSlow43 - fSlow44); + double fSlow64 = (0.8660254037844386 * fSlow63); + double fSlow65 = (fSlow47 - fSlow48); + double fSlow66 = ((fSlow50 + fSlow53) - (fSlow52 + fSlow51)); + double fSlow67 = (0.5 * fSlow66); + double fSlow68 = (0.5 * (fSlow10 * fSlow66)); + double fSlow69 = ((fSlow24 * fSlow25) + (fSlow23 * fSlow30)); + double fSlow70 = (fSlow16 * fSlow60); + double fSlow71 = (fSlow68 + (fSlow69 + fSlow70)); + double fSlow72 = (fSlow24 * fSlow30); + double fSlow73 = (0.5 * (fSlow16 * fSlow66)); + double fSlow74 = (fSlow23 * fSlow25); + double fSlow75 = (fSlow10 * fSlow60); + double fSlow76 = ((fSlow72 + fSlow73) - (fSlow74 + fSlow75)); + double fSlow77 = (fSlow9 * fSlow25); + double fSlow78 = (fSlow13 * fSlow60); + double fSlow79 = (fSlow77 + fSlow78); + double fSlow80 = (fSlow9 * fSlow30); + double fSlow81 = (0.5 * (fSlow13 * fSlow66)); + double fSlow82 = (fSlow80 + fSlow81); + double fSlow83 = (1.7320508075688772 * fSlow43); + double fSlow84 = (0.9128709291752769 * (((fSlow83 + fSlow64) * fSlow6) * fSlow12)); + double fSlow85 = (fSlow9 * fSlow27); + double fSlow86 = ((fSlow6 * fSlow26) * fSlow61); + double fSlow87 = (fSlow85 + fSlow86); + double fSlow88 = (fSlow9 * fSlow29); + double fSlow89 = (fSlow13 * fSlow65); + double fSlow90 = (fSlow88 + fSlow89); + double fSlow91 = (((fSlow22 * fSlow25) + (fSlow19 * fSlow30)) + ((fSlow16 * fSlow55) + (((fSlow24 * fSlow31) + (fSlow23 * fSlow35)) + (fSlow10 * fSlow59)))); + double fSlow92 = (((fSlow22 * fSlow30) - (fSlow19 * fSlow25)) + (((fSlow24 * fSlow35) + (fSlow16 * fSlow59)) - ((fSlow23 * fSlow31) + (fSlow10 * fSlow55)))); + double fSlow93 = ((fSlow13 * fSlow59) + ((fSlow20 * fSlow30) + (fSlow9 * fSlow35))); + double fSlow94 = ((fSlow20 * fSlow27) + ((fSlow9 * fSlow32) + (fSlow13 * fSlow56))); + double fSlow95 = ((fSlow20 * fSlow29) + ((fSlow9 * fSlow34) + (fSlow13 * fSlow58))); + double fSlow96 = ((fSlow13 * fSlow55) + ((fSlow20 * fSlow25) + (fSlow9 * fSlow31))); + double fSlow97 = (3.872983346207417 * (((fSlow14 * fSlow3) * fSlow11) * fSlow12)); + double fSlow98 = (((0.5163977794943222 * ((fSlow22 * fSlow31) + (fSlow19 * fSlow35))) + (0.44721359549995798 * ((fSlow38 * fSlow16) + (fSlow54 * fSlow10)))) - (0.12909944487358055 * (fSlow69 - (fSlow70 + fSlow68)))); + double fSlow99 = (((1.2649110640673518 * (fSlow20 * fSlow31)) + (1.0954451150103324 * ((fSlow38 * fSlow6) * fSlow12))) - (0.31622776601683794 * (fSlow77 - fSlow78))); + double fSlow100 = (((fSlow20 * fSlow32) + (0.8660254037844386 * ((fSlow40 * fSlow6) * fSlow12))) - (0.25 * (fSlow85 - fSlow86))); + double fSlow101 = ((1.6329931618554518 * fSlow42) + (0.81649658092772603 * fSlow46)); + double fSlow102 = (((fSlow101 - (0.23570226039551584 * (fSlow83 - fSlow64))) * fSlow6) * fSlow12); + double fSlow103 = (((fSlow20 * fSlow34) + (0.8660254037844386 * ((fSlow49 * fSlow6) * fSlow12))) - (0.25 * (fSlow88 - fSlow89))); + double fSlow104 = (((1.2649110640673518 * (fSlow20 * fSlow35)) + (1.0954451150103324 * ((fSlow54 * fSlow6) * fSlow12))) - (0.31622776601683794 * (fSlow80 - fSlow81))); + double fSlow105 = (((0.5163977794943222 * ((fSlow22 * fSlow35) - (fSlow19 * fSlow31))) + (0.44721359549995798 * ((fSlow54 * fSlow16) - (fSlow38 * fSlow10)))) - (0.12909944487358055 * ((fSlow72 + fSlow75) - (fSlow74 + fSlow73)))); + double fSlow106 = ((fSlow24 * fSlow55) + (fSlow23 * fSlow59)); + double fSlow107 = (fSlow16 * fSlow31); + double fSlow108 = (fSlow10 * fSlow35); + double fSlow109 = ((0.54772255750516607 * ((fSlow38 * fSlow22) + (fSlow54 * fSlow19))) - (0.31622776601683794 * ((fSlow106 + fSlow107) + fSlow108))); + double fSlow110 = (fSlow9 * fSlow55); + double fSlow111 = (fSlow13 * fSlow31); + double fSlow112 = ((1.3416407864998738 * ((fSlow38 * fSlow3) * fSlow11)) - (0.7745966692414834 * (fSlow110 + fSlow111))); + double fSlow113 = (fSlow9 * fSlow56); + double fSlow114 = (fSlow13 * fSlow32); + double fSlow115 = ((1.0606601717798212 * ((fSlow40 * fSlow3) * fSlow11)) - (0.61237243569579447 * (fSlow113 + fSlow114))); + double fSlow116 = (((fSlow46 - (0.99999999999999989 * fSlow45)) * fSlow3) * fSlow11); + double fSlow117 = (fSlow9 * fSlow58); + double fSlow118 = (fSlow13 * fSlow34); + double fSlow119 = ((1.0606601717798212 * ((fSlow49 * fSlow3) * fSlow11)) - (0.61237243569579447 * (fSlow117 + fSlow118))); + double fSlow120 = (fSlow9 * fSlow59); + double fSlow121 = (fSlow13 * fSlow35); + double fSlow122 = ((1.3416407864998738 * ((fSlow54 * fSlow3) * fSlow11)) - (0.7745966692414834 * (fSlow120 + fSlow121))); + double fSlow123 = (fSlow24 * fSlow59); + double fSlow124 = (fSlow16 * fSlow35); + double fSlow125 = (fSlow23 * fSlow55); + double fSlow126 = (fSlow10 * fSlow31); + double fSlow127 = ((0.54772255750516607 * ((fSlow54 * fSlow22) - (fSlow38 * fSlow19))) - (0.31622776601683794 * ((fSlow123 + fSlow124) - (fSlow125 + fSlow126)))); + double fSlow128 = ((fSlow24 * fSlow60) + (0.5 * (fSlow23 * fSlow66))); + double fSlow129 = (fSlow16 * fSlow25); + double fSlow130 = (fSlow10 * fSlow30); + double fSlow131 = (((0.5163977794943222 * ((fSlow22 * fSlow55) + (fSlow19 * fSlow59))) + (0.44721359549995798 * (((fSlow38 * fSlow1) * fSlow11) + ((fSlow54 * fSlow5) * fSlow12)))) - (0.12909944487358055 * ((fSlow128 + fSlow129) + fSlow130))); + double fSlow132 = (fSlow9 * fSlow60); + double fSlow133 = (fSlow13 * fSlow25); + double fSlow134 = (((1.2649110640673518 * (fSlow20 * fSlow55)) + (1.0954451150103324 * (fSlow38 * fSlow9))) - (0.31622776601683794 * (fSlow132 + fSlow133))); + double fSlow135 = (fSlow9 * fSlow61); + double fSlow136 = (fSlow6 * fSlow27); + double fSlow137 = (((fSlow20 * fSlow56) + (0.8660254037844386 * (fSlow40 * fSlow9))) - (0.25 * ((fSlow135 + fSlow136) * fSlow12))); + double fSlow138 = (1.7320508075688772 * fSlow44); + double fSlow139 = ((fSlow101 - (0.23570226039551584 * (fSlow64 + fSlow138))) * fSlow9); + double fSlow140 = (fSlow9 * fSlow65); + double fSlow141 = (fSlow13 * fSlow29); + double fSlow142 = (((fSlow20 * fSlow58) + (0.8660254037844386 * (fSlow49 * fSlow9))) - (0.25 * (fSlow140 + fSlow141))); + double fSlow143 = (0.5 * (fSlow9 * fSlow66)); + double fSlow144 = (fSlow13 * fSlow30); + double fSlow145 = (((1.2649110640673518 * (fSlow20 * fSlow59)) + (1.0954451150103324 * (fSlow54 * fSlow9))) - (0.31622776601683794 * (fSlow143 + fSlow144))); + double fSlow146 = (0.5 * (fSlow24 * fSlow66)); + double fSlow147 = (fSlow16 * fSlow30); + double fSlow148 = (fSlow23 * fSlow60); + double fSlow149 = (fSlow10 * fSlow25); + double fSlow150 = (((0.5163977794943222 * ((fSlow22 * fSlow59) - (fSlow19 * fSlow55))) + (0.44721359549995798 * (((fSlow54 * fSlow1) * fSlow11) - ((fSlow38 * fSlow5) * fSlow12)))) - (0.12909944487358055 * ((fSlow146 + fSlow147) - (fSlow148 + fSlow149)))); + double fSlow151 = (((fSlow22 * fSlow60) + (0.5 * (fSlow19 * fSlow66))) + (fSlow106 - (fSlow107 + fSlow108))); + double fSlow152 = (((0.5 * (fSlow22 * fSlow66)) - (fSlow19 * fSlow60)) + ((fSlow123 + fSlow126) - (fSlow125 + fSlow124))); + double fSlow153 = (((0.5 * (fSlow20 * fSlow66)) + fSlow120) - fSlow121); + double fSlow154 = (((fSlow20 * fSlow12) * fSlow61) + (fSlow113 - fSlow114)); + double fSlow155 = ((fSlow20 * fSlow65) + (fSlow117 - fSlow118)); + double fSlow156 = (((fSlow20 * fSlow60) + fSlow110) - fSlow111); + double fSlow157 = (1.9364916731037085 * (fSlow20 * fSlow63)); + double fSlow158 = (fSlow128 - (fSlow129 + fSlow130)); + double fSlow159 = ((fSlow146 + fSlow149) - (fSlow148 + fSlow147)); + double fSlow160 = (fSlow132 - fSlow133); + double fSlow161 = (fSlow143 - fSlow144); + double fSlow162 = (0.9128709291752769 * (fSlow9 * (fSlow64 - fSlow138))); + double fSlow163 = (fSlow12 * (fSlow135 - fSlow136)); + double fSlow164 = (fSlow140 - fSlow141); + for (int i = 0; (i < count); i = (i + 1)) { + output0[i] = FAUSTFLOAT(double(input0[i])); + double fTemp0 = double(input1[i]); + double fTemp1 = double(input2[i]); + double fTemp2 = double(input3[i]); + output1[i] = FAUSTFLOAT((((fSlow10 * fTemp0) + (fSlow13 * fTemp1)) + (fSlow16 * fTemp2))); + output2[i] = FAUSTFLOAT((((fSlow19 * fTemp0) + (fSlow20 * fTemp1)) + (fSlow22 * fTemp2))); + output3[i] = FAUSTFLOAT((((fSlow23 * fTemp0) + (fSlow9 * fTemp1)) + (fSlow24 * fTemp2))); + double fTemp3 = double(input4[i]); + double fTemp4 = double(input5[i]); + double fTemp5 = double(input6[i]); + double fTemp6 = double(input7[i]); + double fTemp7 = double(input8[i]); + output4[i] = FAUSTFLOAT((((((fSlow25 * fTemp3) + (fSlow27 * fTemp4)) + (fSlow28 * fTemp5)) + (fSlow29 * fTemp6)) + (fSlow30 * fTemp7))); + output5[i] = FAUSTFLOAT((((((fSlow31 * fTemp3) + (fSlow32 * fTemp4)) + (fSlow33 * fTemp5)) + (fSlow34 * fTemp6)) + (fSlow35 * fTemp7))); + output6[i] = FAUSTFLOAT((((((fSlow38 * fTemp3) + (fSlow40 * fTemp4)) + (fSlow46 * fTemp5)) + (fSlow49 * fTemp6)) + (fSlow54 * fTemp7))); + output7[i] = FAUSTFLOAT((((((fSlow55 * fTemp3) + (fSlow56 * fTemp4)) + (fSlow57 * fTemp5)) + (fSlow58 * fTemp6)) + (fSlow59 * fTemp7))); + output8[i] = FAUSTFLOAT((((((fSlow60 * fTemp3) + (fSlow62 * fTemp4)) + (fSlow64 * fTemp5)) + (fSlow65 * fTemp6)) + (fSlow67 * fTemp7))); + double fTemp8 = double(input9[i]); + double fTemp9 = double(input15[i]); + double fTemp10 = double(input10[i]); + double fTemp11 = double(input14[i]); + double fTemp12 = double(input12[i]); + double fTemp13 = double(input11[i]); + double fTemp14 = double(input13[i]); + output9[i] = FAUSTFLOAT(((0.5 * ((fSlow71 * fTemp8) + (fSlow76 * fTemp9))) + ((1.2247448713915889 * ((fSlow79 * fTemp10) + (fSlow82 * fTemp11))) + ((fSlow84 * fTemp12) + (0.96824583655185426 * ((fSlow87 * fTemp13) + (fSlow90 * fTemp14))))))); + output10[i] = FAUSTFLOAT(((0.40824829046386302 * ((fSlow91 * fTemp8) + (fSlow92 * fTemp9))) + ((fSlow93 * fTemp11) + ((0.79056941504209488 * ((fSlow94 * fTemp13) + (fSlow95 * fTemp14))) + ((fSlow96 * fTemp10) + (fSlow97 * fTemp12)))))); + output11[i] = FAUSTFLOAT((((((((fSlow98 * fTemp8) + (fSlow99 * fTemp10)) + (fSlow100 * fTemp13)) + (fSlow102 * fTemp12)) + (fSlow103 * fTemp14)) + (fSlow104 * fTemp11)) + (fSlow105 * fTemp9))); + output12[i] = FAUSTFLOAT((((((((fSlow109 * fTemp8) + (fSlow112 * fTemp10)) + (fSlow115 * fTemp13)) + (fSlow116 * fTemp12)) + (fSlow119 * fTemp14)) + (fSlow122 * fTemp11)) + (fSlow127 * fTemp9))); + output13[i] = FAUSTFLOAT((((((((fSlow131 * fTemp8) + (fSlow134 * fTemp10)) + (fSlow137 * fTemp13)) + (fSlow139 * fTemp12)) + (fSlow142 * fTemp14)) + (fSlow145 * fTemp11)) + (fSlow150 * fTemp9))); + output14[i] = FAUSTFLOAT(((0.40824829046386302 * ((fSlow151 * fTemp8) + (fSlow152 * fTemp9))) + ((fSlow153 * fTemp11) + ((0.79056941504209488 * ((fSlow154 * fTemp13) + (fSlow155 * fTemp14))) + ((fSlow156 * fTemp10) + (fSlow157 * fTemp12)))))); + output15[i] = FAUSTFLOAT(((0.5 * ((fSlow158 * fTemp8) + (fSlow159 * fTemp9))) + ((1.2247448713915889 * ((fSlow160 * fTemp10) + (fSlow161 * fTemp11))) + ((fSlow162 * fTemp12) + (0.96824583655185426 * ((fSlow163 * fTemp13) + (fSlow164 * fTemp14))))))); + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/HOARotator4.cpp b/source/HOAUGens/HOARotator4.cpp new file mode 100755 index 0000000000..0c5061d06c --- /dev/null +++ b/source/HOAUGens/HOARotator4.cpp @@ -0,0 +1,1715 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOARotator4" +version: "1.0" +Code generated with Faust 2.2.0 (http://faust.grame.fr) +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** Global init, calls the following methods : + * - static class 'classInit' : static table initialisation + * - 'instanceInit' : constants and instance table initialisation + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with sucessive in/out audio buffers. + * + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the nomber of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { return fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef FAUST_UI_H +#define FAUST_UI_H + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +double cos(double dummy0); +double sin(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/author", "Pierre Lecomte"); + m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("lib/ymn.lib/license", "GPL"); + m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); + m->declare("lib/ymn.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.0"); + m->declare("name", "HOARotator4"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + + virtual int getSampleRate() { + return fSamplingFreq; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOARotator4"); + ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fHslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = sin(fSlow0); + double fSlow6 = sin(fSlow2); + double fSlow7 = (fSlow5 * fSlow6); + double fSlow8 = double(fHslider2); + double fSlow9 = sin(fSlow8); + double fSlow10 = (fSlow4 - (fSlow7 * fSlow9)); + double fSlow11 = cos(fSlow8); + double fSlow12 = (0.0 - fSlow11); + double fSlow13 = (fSlow6 * fSlow12); + double fSlow14 = (fSlow5 * fSlow3); + double fSlow15 = (fSlow6 * fSlow9); + double fSlow16 = (fSlow14 + (fSlow15 * fSlow1)); + double fSlow17 = (fSlow6 * fSlow1); + double fSlow18 = (fSlow5 * fSlow9); + double fSlow19 = (fSlow17 + (fSlow18 * fSlow3)); + double fSlow20 = (fSlow3 * fSlow11); + double fSlow21 = (fSlow9 * fSlow1); + double fSlow22 = ((fSlow21 * (0.0 - fSlow3)) + fSlow7); + double fSlow23 = (fSlow5 * fSlow12); + double fSlow24 = (fSlow1 * fSlow11); + double fSlow25 = ((fSlow24 * fSlow10) + (fSlow23 * fSlow16)); + double fSlow26 = mydsp_faustpower2_f(fSlow12); + double fSlow27 = ((fSlow9 * fSlow10) + (fSlow7 * fSlow26)); + double fSlow28 = (1.7320508075688772 * (fSlow15 * fSlow12)); + double fSlow29 = ((fSlow9 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); + double fSlow30 = ((fSlow24 * fSlow16) - (fSlow23 * fSlow10)); + double fSlow31 = ((fSlow19 * fSlow16) + (fSlow22 * fSlow10)); + double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow6 * fSlow19) * fSlow12))); + double fSlow33 = (1.7320508075688772 * (((fSlow6 * fSlow3) * fSlow11) * fSlow12)); + double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow6 * fSlow22) * fSlow12))); + double fSlow35 = ((fSlow22 * fSlow16) - (fSlow19 * fSlow10)); + double fSlow36 = (((fSlow5 * fSlow1) * fSlow11) * fSlow12); + double fSlow37 = (fSlow16 * fSlow10); + double fSlow38 = ((1.1547005383792515 * (fSlow22 * fSlow19)) - (0.57735026918962573 * (fSlow36 + fSlow37))); + double fSlow39 = (fSlow6 * fSlow10); + double fSlow40 = ((1.1547005383792515 * (fSlow20 * fSlow19)) - (0.57735026918962573 * ((fSlow18 + fSlow39) * fSlow12))); + double fSlow41 = mydsp_faustpower2_f(fSlow3); + double fSlow42 = mydsp_faustpower2_f(fSlow11); + double fSlow43 = (fSlow41 * fSlow42); + double fSlow44 = mydsp_faustpower2_f(fSlow9); + double fSlow45 = mydsp_faustpower2_f(fSlow6); + double fSlow46 = (fSlow45 * fSlow26); + double fSlow47 = (fSlow44 + fSlow46); + double fSlow48 = (fSlow43 - (0.5 * fSlow47)); + double fSlow49 = (fSlow21 * fSlow11); + double fSlow50 = (fSlow13 * fSlow16); + double fSlow51 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.57735026918962573 * (fSlow49 + fSlow50))); + double fSlow52 = (mydsp_faustpower2_f(fSlow1) * fSlow42); + double fSlow53 = mydsp_faustpower2_f(fSlow16); + double fSlow54 = (mydsp_faustpower2_f(fSlow5) * fSlow26); + double fSlow55 = mydsp_faustpower2_f(fSlow10); + double fSlow56 = ((0.57735026918962573 * (mydsp_faustpower2_f(fSlow22) - mydsp_faustpower2_f(fSlow19))) - (0.28867513459481287 * ((fSlow52 + fSlow53) - (fSlow54 + fSlow55)))); + double fSlow57 = (((fSlow5 * fSlow22) * fSlow12) + (fSlow24 * fSlow19)); + double fSlow58 = (((fSlow14 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow9 * fSlow19))); + double fSlow59 = (1.7320508075688772 * ((fSlow9 * fSlow3) * fSlow11)); + double fSlow60 = ((fSlow4 * fSlow42) + (1.0000000000000002 * (fSlow9 * fSlow22))); + double fSlow61 = ((fSlow24 * fSlow22) - ((fSlow5 * fSlow19) * fSlow12)); + double fSlow62 = (fSlow36 - fSlow37); + double fSlow63 = (fSlow18 - fSlow39); + double fSlow64 = (fSlow12 * fSlow63); + double fSlow65 = (fSlow44 - fSlow46); + double fSlow66 = (0.8660254037844386 * fSlow65); + double fSlow67 = (fSlow49 - fSlow50); + double fSlow68 = ((fSlow52 + fSlow55) - (fSlow54 + fSlow53)); + double fSlow69 = (0.5 * fSlow68); + double fSlow70 = (0.5 * (fSlow10 * fSlow68)); + double fSlow71 = ((fSlow24 * fSlow25) + (fSlow23 * fSlow30)); + double fSlow72 = (fSlow16 * fSlow62); + double fSlow73 = (fSlow70 + (fSlow71 + fSlow72)); + double fSlow74 = (fSlow24 * fSlow30); + double fSlow75 = (0.5 * (fSlow16 * fSlow68)); + double fSlow76 = (fSlow23 * fSlow25); + double fSlow77 = (fSlow10 * fSlow62); + double fSlow78 = ((fSlow74 + fSlow75) - (fSlow76 + fSlow77)); + double fSlow79 = (fSlow9 * fSlow25); + double fSlow80 = (fSlow13 * fSlow62); + double fSlow81 = (fSlow79 + fSlow80); + double fSlow82 = (fSlow9 * fSlow30); + double fSlow83 = (0.5 * (fSlow13 * fSlow68)); + double fSlow84 = (fSlow82 + fSlow83); + double fSlow85 = (1.7320508075688772 * fSlow44); + double fSlow86 = (fSlow66 + fSlow85); + double fSlow87 = (0.9128709291752769 * (fSlow13 * fSlow86)); + double fSlow88 = (fSlow9 * fSlow27); + double fSlow89 = (fSlow6 * fSlow26); + double fSlow90 = (fSlow89 * fSlow63); + double fSlow91 = (fSlow88 + fSlow90); + double fSlow92 = (fSlow9 * fSlow29); + double fSlow93 = (fSlow13 * fSlow67); + double fSlow94 = (fSlow92 + fSlow93); + double fSlow95 = (((fSlow22 * fSlow25) + (fSlow19 * fSlow30)) + ((fSlow61 * fSlow10) + ((((fSlow31 * fSlow1) * fSlow11) + ((fSlow35 * fSlow5) * fSlow12)) + (fSlow57 * fSlow16)))); + double fSlow96 = (((fSlow22 * fSlow30) - (fSlow19 * fSlow25)) + ((((fSlow35 * fSlow1) * fSlow11) + (fSlow61 * fSlow16)) - (((fSlow31 * fSlow5) * fSlow12) + (fSlow57 * fSlow10)))); + double fSlow97 = (((fSlow61 * fSlow6) * fSlow12) + ((fSlow20 * fSlow30) + (fSlow35 * fSlow9))); + double fSlow98 = ((fSlow20 * fSlow27) + ((fSlow32 * fSlow9) + ((fSlow58 * fSlow6) * fSlow12))); + double fSlow99 = ((fSlow20 * fSlow29) + ((fSlow34 * fSlow9) + ((fSlow60 * fSlow6) * fSlow12))); + double fSlow100 = (((fSlow57 * fSlow6) * fSlow12) + ((fSlow20 * fSlow25) + (fSlow31 * fSlow9))); + double fSlow101 = (3.872983346207417 * (((fSlow15 * fSlow3) * fSlow11) * fSlow12)); + double fSlow102 = (((0.5163977794943222 * ((fSlow31 * fSlow22) + (fSlow35 * fSlow19))) + (0.44721359549995798 * ((fSlow38 * fSlow16) + (fSlow56 * fSlow10)))) - (0.12909944487358055 * (fSlow71 - (fSlow72 + fSlow70)))); + double fSlow103 = (((1.2649110640673518 * ((fSlow31 * fSlow3) * fSlow11)) + (1.0954451150103324 * ((fSlow38 * fSlow6) * fSlow12))) - (0.31622776601683794 * (fSlow79 - fSlow80))); + double fSlow104 = ((((fSlow32 * fSlow3) * fSlow11) + (0.8660254037844386 * ((fSlow40 * fSlow6) * fSlow12))) - (0.25 * (fSlow88 - fSlow90))); + double fSlow105 = ((1.6329931618554518 * fSlow43) + (0.81649658092772603 * fSlow48)); + double fSlow106 = (fSlow105 - (0.23570226039551584 * (fSlow85 - fSlow66))); + double fSlow107 = ((fSlow106 * fSlow6) * fSlow12); + double fSlow108 = ((((fSlow34 * fSlow3) * fSlow11) + (0.8660254037844386 * ((fSlow51 * fSlow6) * fSlow12))) - (0.25 * (fSlow92 - fSlow93))); + double fSlow109 = (((1.2649110640673518 * ((fSlow35 * fSlow3) * fSlow11)) + (1.0954451150103324 * ((fSlow56 * fSlow6) * fSlow12))) - (0.31622776601683794 * (fSlow82 - fSlow83))); + double fSlow110 = (((0.5163977794943222 * ((fSlow35 * fSlow22) - (fSlow31 * fSlow19))) + (0.44721359549995798 * ((fSlow56 * fSlow16) - (fSlow38 * fSlow10)))) - (0.12909944487358055 * ((fSlow74 + fSlow77) - (fSlow76 + fSlow75)))); + double fSlow111 = (((fSlow57 * fSlow1) * fSlow11) + ((fSlow61 * fSlow5) * fSlow12)); + double fSlow112 = (fSlow31 * fSlow16); + double fSlow113 = (fSlow35 * fSlow10); + double fSlow114 = ((0.54772255750516607 * ((fSlow38 * fSlow22) + (fSlow56 * fSlow19))) - (0.31622776601683794 * ((fSlow111 + fSlow112) + fSlow113))); + double fSlow115 = (fSlow57 * fSlow9); + double fSlow116 = ((fSlow31 * fSlow6) * fSlow12); + double fSlow117 = ((1.3416407864998738 * ((fSlow38 * fSlow3) * fSlow11)) - (0.7745966692414834 * (fSlow115 + fSlow116))); + double fSlow118 = (fSlow58 * fSlow9); + double fSlow119 = ((fSlow32 * fSlow6) * fSlow12); + double fSlow120 = ((1.0606601717798212 * ((fSlow40 * fSlow3) * fSlow11)) - (0.61237243569579447 * (fSlow118 + fSlow119))); + double fSlow121 = (fSlow48 - (0.99999999999999989 * fSlow47)); + double fSlow122 = ((fSlow121 * fSlow3) * fSlow11); + double fSlow123 = (fSlow60 * fSlow9); + double fSlow124 = ((fSlow34 * fSlow6) * fSlow12); + double fSlow125 = ((1.0606601717798212 * ((fSlow51 * fSlow3) * fSlow11)) - (0.61237243569579447 * (fSlow123 + fSlow124))); + double fSlow126 = (fSlow61 * fSlow9); + double fSlow127 = ((fSlow35 * fSlow6) * fSlow12); + double fSlow128 = ((1.3416407864998738 * ((fSlow56 * fSlow3) * fSlow11)) - (0.7745966692414834 * (fSlow126 + fSlow127))); + double fSlow129 = ((fSlow61 * fSlow1) * fSlow11); + double fSlow130 = (fSlow35 * fSlow16); + double fSlow131 = ((fSlow57 * fSlow5) * fSlow12); + double fSlow132 = (fSlow31 * fSlow10); + double fSlow133 = ((0.54772255750516607 * ((fSlow56 * fSlow22) - (fSlow38 * fSlow19))) - (0.31622776601683794 * ((fSlow129 + fSlow130) - (fSlow131 + fSlow132)))); + double fSlow134 = ((fSlow24 * fSlow62) + (0.5 * (fSlow23 * fSlow68))); + double fSlow135 = (fSlow16 * fSlow25); + double fSlow136 = (fSlow10 * fSlow30); + double fSlow137 = (((0.5163977794943222 * ((fSlow57 * fSlow22) + (fSlow61 * fSlow19))) + (0.44721359549995798 * (((fSlow38 * fSlow1) * fSlow11) + ((fSlow56 * fSlow5) * fSlow12)))) - (0.12909944487358055 * ((fSlow134 + fSlow135) + fSlow136))); + double fSlow138 = (fSlow9 * fSlow62); + double fSlow139 = (fSlow13 * fSlow25); + double fSlow140 = (((1.2649110640673518 * ((fSlow57 * fSlow3) * fSlow11)) + (1.0954451150103324 * (fSlow38 * fSlow9))) - (0.31622776601683794 * (fSlow138 + fSlow139))); + double fSlow141 = (fSlow9 * fSlow63); + double fSlow142 = (fSlow6 * fSlow27); + double fSlow143 = ((((fSlow58 * fSlow3) * fSlow11) + (0.8660254037844386 * (fSlow40 * fSlow9))) - (0.25 * ((fSlow141 + fSlow142) * fSlow12))); + double fSlow144 = (1.7320508075688772 * fSlow46); + double fSlow145 = (fSlow105 - (0.23570226039551584 * (fSlow66 + fSlow144))); + double fSlow146 = (fSlow145 * fSlow9); + double fSlow147 = (fSlow9 * fSlow67); + double fSlow148 = (fSlow13 * fSlow29); + double fSlow149 = ((((fSlow60 * fSlow3) * fSlow11) + (0.8660254037844386 * (fSlow51 * fSlow9))) - (0.25 * (fSlow147 + fSlow148))); + double fSlow150 = (0.5 * (fSlow9 * fSlow68)); + double fSlow151 = (fSlow13 * fSlow30); + double fSlow152 = (((1.2649110640673518 * ((fSlow61 * fSlow3) * fSlow11)) + (1.0954451150103324 * (fSlow56 * fSlow9))) - (0.31622776601683794 * (fSlow150 + fSlow151))); + double fSlow153 = (0.5 * (fSlow24 * fSlow68)); + double fSlow154 = (fSlow16 * fSlow30); + double fSlow155 = (fSlow23 * fSlow62); + double fSlow156 = (fSlow10 * fSlow25); + double fSlow157 = (((0.5163977794943222 * ((fSlow61 * fSlow22) - (fSlow57 * fSlow19))) + (0.44721359549995798 * (((fSlow56 * fSlow1) * fSlow11) - ((fSlow38 * fSlow5) * fSlow12)))) - (0.12909944487358055 * ((fSlow153 + fSlow154) - (fSlow155 + fSlow156)))); + double fSlow158 = (((fSlow22 * fSlow62) + (0.5 * (fSlow19 * fSlow68))) + (fSlow111 - (fSlow112 + fSlow113))); + double fSlow159 = (((0.5 * (fSlow22 * fSlow68)) - (fSlow19 * fSlow62)) + ((fSlow129 + fSlow132) - (fSlow131 + fSlow130))); + double fSlow160 = (((0.5 * (fSlow20 * fSlow68)) + fSlow126) - fSlow127); + double fSlow161 = (fSlow20 * fSlow12); + double fSlow162 = ((fSlow161 * fSlow63) + (fSlow118 - fSlow119)); + double fSlow163 = ((fSlow20 * fSlow67) + (fSlow123 - fSlow124)); + double fSlow164 = (((fSlow20 * fSlow62) + fSlow115) - fSlow116); + double fSlow165 = (1.9364916731037085 * (fSlow20 * fSlow65)); + double fSlow166 = (fSlow134 - (fSlow135 + fSlow136)); + double fSlow167 = ((fSlow153 + fSlow156) - (fSlow155 + fSlow154)); + double fSlow168 = (fSlow138 - fSlow139); + double fSlow169 = (fSlow150 - fSlow151); + double fSlow170 = (fSlow66 - fSlow144); + double fSlow171 = (0.9128709291752769 * (fSlow9 * fSlow170)); + double fSlow172 = (fSlow141 - fSlow142); + double fSlow173 = (fSlow12 * fSlow172); + double fSlow174 = (fSlow147 - fSlow148); + double fSlow175 = ((fSlow24 * fSlow73) + (fSlow23 * fSlow78)); + double fSlow176 = ((fSlow16 * fSlow166) + (fSlow10 * fSlow167)); + double fSlow177 = (fSlow175 + fSlow176); + double fSlow178 = ((fSlow24 * fSlow78) - (fSlow23 * fSlow73)); + double fSlow179 = ((fSlow16 * fSlow167) - (fSlow10 * fSlow166)); + double fSlow180 = (fSlow178 + fSlow179); + double fSlow181 = (fSlow9 * fSlow73); + double fSlow182 = (fSlow13 * fSlow166); + double fSlow183 = (fSlow181 + fSlow182); + double fSlow184 = (fSlow9 * fSlow78); + double fSlow185 = (fSlow13 * fSlow167); + double fSlow186 = (fSlow184 + fSlow185); + double fSlow187 = (fSlow9 * fSlow81); + double fSlow188 = (fSlow13 * fSlow168); + double fSlow189 = (fSlow187 + fSlow188); + double fSlow190 = (fSlow9 * fSlow84); + double fSlow191 = (fSlow13 * fSlow169); + double fSlow192 = (fSlow190 + fSlow191); + double fSlow193 = (0.85391256382996661 * ((((fSlow170 + fSlow86) * fSlow6) * fSlow9) * fSlow12)); + double fSlow194 = (fSlow89 * fSlow172); + double fSlow195 = (fSlow9 * fSlow91); + double fSlow196 = (fSlow194 + fSlow195); + double fSlow197 = (fSlow9 * fSlow94); + double fSlow198 = (fSlow13 * fSlow174); + double fSlow199 = (fSlow197 + fSlow198); + double fSlow200 = (fSlow100 * fSlow9); + double fSlow201 = ((fSlow164 * fSlow6) * fSlow12); + double fSlow202 = ((fSlow20 * fSlow81) + (fSlow200 + fSlow201)); + double fSlow203 = (fSlow97 * fSlow9); + double fSlow204 = ((fSlow160 * fSlow6) * fSlow12); + double fSlow205 = ((fSlow20 * fSlow84) + (fSlow203 + fSlow204)); + double fSlow206 = (fSlow99 * fSlow9); + double fSlow207 = ((fSlow163 * fSlow6) * fSlow12); + double fSlow208 = ((0.66143782776614757 * (fSlow20 * fSlow94)) + (0.66143782776614768 * (fSlow206 + fSlow207))); + double fSlow209 = (3.872983346207417 * fSlow44); + double fSlow210 = (1.9364916731037085 * fSlow65); + double fSlow211 = ((((((0.81009258730098255 * (fSlow209 + fSlow210)) + (0.60380736442455996 * fSlow86)) * fSlow6) * fSlow3) * fSlow11) * fSlow12); + double fSlow212 = (((fSlow95 * fSlow1) * fSlow11) + ((fSlow96 * fSlow5) * fSlow12)); + double fSlow213 = ((fSlow158 * fSlow16) + (fSlow159 * fSlow10)); + double fSlow214 = ((0.17677669529663689 * ((fSlow22 * fSlow73) + (fSlow19 * fSlow78))) + (0.17677669529663687 * (fSlow212 + fSlow213))); + double fSlow215 = (fSlow95 * fSlow9); + double fSlow216 = ((fSlow158 * fSlow6) * fSlow12); + double fSlow217 = ((0.5 * (fSlow20 * fSlow73)) + (0.49999999999999994 * (fSlow215 + fSlow216))); + double fSlow218 = (fSlow98 * fSlow9); + double fSlow219 = ((fSlow162 * fSlow6) * fSlow12); + double fSlow220 = ((0.66143782776614757 * (fSlow20 * fSlow91)) + (0.66143782776614768 * (fSlow218 + fSlow219))); + double fSlow221 = ((fSlow159 * fSlow6) * fSlow12); + double fSlow222 = (fSlow96 * fSlow9); + double fSlow223 = ((0.5 * (fSlow20 * fSlow78)) + (0.49999999999999994 * (fSlow221 + fSlow222))); + double fSlow224 = (((fSlow96 * fSlow1) * fSlow11) - ((fSlow95 * fSlow5) * fSlow12)); + double fSlow225 = ((fSlow159 * fSlow16) - (fSlow158 * fSlow10)); + double fSlow226 = ((0.17677669529663689 * ((fSlow22 * fSlow78) - (fSlow19 * fSlow73))) + (0.17677669529663687 * (fSlow224 + fSlow225))); + double fSlow227 = (((0.1889822365046136 * ((fSlow95 * fSlow22) + (fSlow96 * fSlow19))) + (0.36596252735569995 * ((fSlow157 * fSlow10) + ((((fSlow102 * fSlow1) * fSlow11) + ((fSlow110 * fSlow5) * fSlow12)) + (fSlow137 * fSlow16))))) - (0.0472455591261534 * (fSlow175 - fSlow176))); + double fSlow228 = (((0.53452248382484868 * ((fSlow95 * fSlow3) * fSlow11)) + (1.0350983390135313 * ((fSlow102 * fSlow9) + ((fSlow137 * fSlow6) * fSlow12)))) - (0.1336306209562122 * (fSlow181 - fSlow182))); + double fSlow229 = ((((fSlow100 * fSlow3) * fSlow11) + (0.79056941504209488 * ((fSlow103 * fSlow9) + ((fSlow140 * fSlow6) * fSlow12)))) - (0.24999999999999997 * (fSlow187 - fSlow188))); + double fSlow230 = ((0.70710678118654757 * (((fSlow98 * fSlow3) * fSlow11) + ((fSlow104 * fSlow9) + ((fSlow143 * fSlow6) * fSlow12)))) - (0.18257418583505536 * (0.0 - (0.96824583655185426 * (fSlow194 - fSlow195))))); + double fSlow231 = ((((((0.68465319688145765 * (fSlow145 + fSlow106)) + (3.3541019662496843 * fSlow43)) * fSlow6) * fSlow9) * fSlow12) - (0.17677669529663689 * (0.0 - (0.9128709291752769 * ((((fSlow170 - fSlow86) * fSlow6) * fSlow9) * fSlow12))))); + double fSlow232 = ((0.70710678118654757 * (((fSlow99 * fSlow3) * fSlow11) + ((fSlow108 * fSlow9) + ((fSlow149 * fSlow6) * fSlow12)))) - (0.17677669529663687 * (fSlow197 - fSlow198))); + double fSlow233 = ((((fSlow97 * fSlow3) * fSlow11) + (0.79056941504209488 * ((fSlow109 * fSlow9) + ((fSlow152 * fSlow6) * fSlow12)))) - (0.24999999999999997 * (fSlow190 - fSlow191))); + double fSlow234 = (((0.53452248382484868 * ((fSlow96 * fSlow3) * fSlow11)) + (1.0350983390135313 * ((fSlow110 * fSlow9) + ((fSlow157 * fSlow6) * fSlow12)))) - (0.1336306209562122 * (fSlow184 - fSlow185))); + double fSlow235 = (((0.1889822365046136 * ((fSlow96 * fSlow22) - (fSlow95 * fSlow19))) + (0.36596252735569995 * ((((fSlow110 * fSlow1) * fSlow11) + (fSlow157 * fSlow16)) - (((fSlow102 * fSlow5) * fSlow12) + (fSlow137 * fSlow10))))) - (0.0472455591261534 * (fSlow178 - fSlow179))); + double fSlow236 = (((0.51754916950676566 * ((fSlow102 * fSlow22) + (fSlow110 * fSlow19))) + (0.42257712736425829 * ((fSlow114 * fSlow16) + (fSlow133 * fSlow10)))) - (0.066815310478106085 * (fSlow212 - fSlow213))); + double fSlow237 = (((1.4638501094227998 * ((fSlow102 * fSlow3) * fSlow11)) + (1.1952286093343938 * ((fSlow114 * fSlow6) * fSlow12))) - (0.1889822365046136 * (fSlow215 - fSlow216))); + double fSlow238 = (((1.1180339887498949 * ((fSlow103 * fSlow3) * fSlow11)) + (0.9128709291752769 * ((fSlow117 * fSlow6) * fSlow12))) - (0.35355339059327379 * (fSlow200 - fSlow201))); + double fSlow239 = ((((fSlow104 * fSlow3) * fSlow11) + (0.81649658092772603 * ((fSlow120 * fSlow6) * fSlow12))) - (0.25 * (fSlow218 - fSlow219))); + double fSlow240 = (0.79056941504209488 * fSlow121); + double fSlow241 = (((((((0.96824583655185426 * fSlow106) + fSlow240) - (0.30618621784789724 * (fSlow209 - fSlow210))) * fSlow6) * fSlow3) * fSlow11) * fSlow12); + double fSlow242 = ((((fSlow108 * fSlow3) * fSlow11) + (0.81649658092772603 * ((fSlow125 * fSlow6) * fSlow12))) - (0.25 * (fSlow206 - fSlow207))); + double fSlow243 = (((1.1180339887498949 * ((fSlow109 * fSlow3) * fSlow11)) + (0.9128709291752769 * ((fSlow128 * fSlow6) * fSlow12))) - (0.35355339059327379 * (fSlow203 - fSlow204))); + double fSlow244 = (((1.4638501094227998 * ((fSlow110 * fSlow3) * fSlow11)) + (1.1952286093343938 * ((fSlow133 * fSlow6) * fSlow12))) - (0.46291004988627571 * (0.0 - (0.40824829046386302 * (fSlow221 - fSlow222))))); + double fSlow245 = (((0.51754916950676566 * ((fSlow110 * fSlow22) - (fSlow102 * fSlow19))) + (0.42257712736425829 * ((fSlow133 * fSlow16) - (fSlow114 * fSlow10)))) - (0.066815310478106085 * (fSlow224 - fSlow225))); + double fSlow246 = (((fSlow137 * fSlow1) * fSlow11) + ((fSlow157 * fSlow5) * fSlow12)); + double fSlow247 = (fSlow102 * fSlow16); + double fSlow248 = (fSlow110 * fSlow10); + double fSlow249 = ((0.53452248382484879 * ((fSlow114 * fSlow22) + (fSlow133 * fSlow19))) - (0.32732683535398854 * ((fSlow246 + fSlow247) + fSlow248))); + double fSlow250 = (fSlow137 * fSlow9); + double fSlow251 = ((fSlow102 * fSlow6) * fSlow12); + double fSlow252 = ((1.5118578920369088 * ((fSlow114 * fSlow3) * fSlow11)) - (0.92582009977255142 * (fSlow250 + fSlow251))); + double fSlow253 = (fSlow140 * fSlow9); + double fSlow254 = ((fSlow103 * fSlow6) * fSlow12); + double fSlow255 = ((1.1547005383792515 * ((fSlow117 * fSlow3) * fSlow11)) - (0.70710678118654757 * (fSlow253 + fSlow254))); + double fSlow256 = (fSlow143 * fSlow9); + double fSlow257 = ((fSlow104 * fSlow6) * fSlow12); + double fSlow258 = ((1.0327955589886444 * ((fSlow120 * fSlow3) * fSlow11)) - (0.63245553203367588 * (fSlow256 + fSlow257))); + double fSlow259 = (fSlow145 * fSlow44); + double fSlow260 = ((fSlow106 * fSlow45) * fSlow26); + double fSlow261 = (((fSlow121 * fSlow41) * fSlow42) - (0.61237243569579447 * (fSlow259 + fSlow260))); + double fSlow262 = (fSlow149 * fSlow9); + double fSlow263 = ((fSlow108 * fSlow6) * fSlow12); + double fSlow264 = ((1.0327955589886444 * ((fSlow125 * fSlow3) * fSlow11)) - (0.63245553203367588 * (fSlow262 + fSlow263))); + double fSlow265 = (fSlow152 * fSlow9); + double fSlow266 = ((fSlow109 * fSlow6) * fSlow12); + double fSlow267 = ((1.1547005383792515 * ((fSlow128 * fSlow3) * fSlow11)) - (0.70710678118654757 * (fSlow265 + fSlow266))); + double fSlow268 = (fSlow157 * fSlow9); + double fSlow269 = ((fSlow110 * fSlow6) * fSlow12); + double fSlow270 = ((1.5118578920369088 * ((fSlow133 * fSlow3) * fSlow11)) - (0.92582009977255142 * (fSlow268 + fSlow269))); + double fSlow271 = ((fSlow157 * fSlow1) * fSlow11); + double fSlow272 = (fSlow110 * fSlow16); + double fSlow273 = ((fSlow137 * fSlow5) * fSlow12); + double fSlow274 = (fSlow102 * fSlow10); + double fSlow275 = ((0.53452248382484879 * ((fSlow133 * fSlow22) - (fSlow114 * fSlow19))) - (0.32732683535398854 * ((fSlow271 + fSlow272) - (fSlow273 + fSlow274)))); + double fSlow276 = (((fSlow158 * fSlow1) * fSlow11) + ((fSlow159 * fSlow5) * fSlow12)); + double fSlow277 = ((fSlow96 * fSlow10) + (fSlow95 * fSlow16)); + double fSlow278 = (((0.51754916950676566 * ((fSlow137 * fSlow22) + (fSlow157 * fSlow19))) + (0.42257712736425829 * (((fSlow114 * fSlow1) * fSlow11) + ((fSlow133 * fSlow5) * fSlow12)))) - (0.066815310478106085 * (fSlow276 + fSlow277))); + double fSlow279 = (fSlow158 * fSlow9); + double fSlow280 = ((fSlow95 * fSlow6) * fSlow12); + double fSlow281 = (((1.4638501094227998 * ((fSlow137 * fSlow3) * fSlow11)) + (1.1952286093343938 * (fSlow114 * fSlow9))) - (0.1889822365046136 * (fSlow279 + fSlow280))); + double fSlow282 = (fSlow164 * fSlow9); + double fSlow283 = ((fSlow100 * fSlow6) * fSlow12); + double fSlow284 = (((1.1180339887498949 * ((fSlow140 * fSlow3) * fSlow11)) + (0.9128709291752769 * (fSlow117 * fSlow9))) - (0.35355339059327379 * (fSlow282 + fSlow283))); + double fSlow285 = (fSlow162 * fSlow9); + double fSlow286 = ((fSlow98 * fSlow6) * fSlow12); + double fSlow287 = ((((fSlow143 * fSlow3) * fSlow11) + (0.81649658092772603 * (fSlow120 * fSlow9))) - (0.25 * (fSlow285 + fSlow286))); + double fSlow288 = (3.872983346207417 * fSlow46); + double fSlow289 = (((((fSlow240 + (0.96824583655185426 * fSlow145)) - (0.30618621784789724 * (fSlow288 + fSlow210))) * fSlow9) * fSlow3) * fSlow11); + double fSlow290 = (fSlow163 * fSlow9); + double fSlow291 = ((fSlow99 * fSlow6) * fSlow12); + double fSlow292 = ((((fSlow149 * fSlow3) * fSlow11) + (0.81649658092772603 * (fSlow125 * fSlow9))) - (0.25 * (fSlow290 + fSlow291))); + double fSlow293 = (fSlow160 * fSlow9); + double fSlow294 = ((fSlow97 * fSlow6) * fSlow12); + double fSlow295 = (((1.1180339887498949 * ((fSlow152 * fSlow3) * fSlow11)) + (0.9128709291752769 * (fSlow128 * fSlow9))) - (0.35355339059327379 * (fSlow293 + fSlow294))); + double fSlow296 = (fSlow159 * fSlow9); + double fSlow297 = ((fSlow96 * fSlow6) * fSlow12); + double fSlow298 = (((1.4638501094227998 * ((fSlow157 * fSlow3) * fSlow11)) + (1.1952286093343938 * (fSlow133 * fSlow9))) - (0.1889822365046136 * (fSlow296 + fSlow297))); + double fSlow299 = (((fSlow159 * fSlow1) * fSlow11) - ((fSlow158 * fSlow5) * fSlow12)); + double fSlow300 = ((fSlow96 * fSlow16) - (fSlow95 * fSlow10)); + double fSlow301 = (((0.51754916950676566 * ((fSlow157 * fSlow22) - (fSlow137 * fSlow19))) + (0.42257712736425829 * (((fSlow133 * fSlow1) * fSlow11) - ((fSlow114 * fSlow5) * fSlow12)))) - (0.066815310478106085 * (fSlow299 + fSlow300))); + double fSlow302 = ((fSlow24 * fSlow166) + (fSlow23 * fSlow167)); + double fSlow303 = ((fSlow16 * fSlow73) + (fSlow10 * fSlow78)); + double fSlow304 = (((0.1889822365046136 * ((fSlow158 * fSlow22) + (fSlow159 * fSlow19))) + (0.36596252735569995 * (fSlow246 - (fSlow247 + fSlow248)))) - (0.0472455591261534 * (fSlow302 + fSlow303))); + double fSlow305 = (fSlow9 * fSlow166); + double fSlow306 = (fSlow13 * fSlow73); + double fSlow307 = (((0.53452248382484868 * ((fSlow158 * fSlow3) * fSlow11)) + (1.0350983390135313 * (fSlow250 - fSlow251))) - (0.1336306209562122 * (fSlow305 + fSlow306))); + double fSlow308 = (fSlow9 * fSlow168); + double fSlow309 = (fSlow13 * fSlow81); + double fSlow310 = ((((fSlow164 * fSlow3) * fSlow11) + (0.79056941504209488 * (fSlow253 - fSlow254))) - (0.24999999999999997 * (fSlow308 + fSlow309))); + double fSlow311 = (fSlow9 * fSlow172); + double fSlow312 = (fSlow6 * fSlow91); + double fSlow313 = ((0.70710678118654757 * (((fSlow162 * fSlow3) * fSlow11) + (fSlow256 - fSlow257))) - (0.17677669529663687 * ((fSlow311 + fSlow312) * fSlow12))); + double fSlow314 = (fSlow44 * fSlow170); + double fSlow315 = (fSlow46 * fSlow86); + double fSlow316 = (((1.6770509831248421 * (fSlow43 * fSlow65)) + (0.68465319688145765 * (fSlow259 - fSlow260))) - (0.16137430609197573 * (fSlow314 + fSlow315))); + double fSlow317 = (fSlow9 * fSlow174); + double fSlow318 = (fSlow13 * fSlow94); + double fSlow319 = ((0.70710678118654757 * (((fSlow163 * fSlow3) * fSlow11) + (fSlow262 - fSlow263))) - (0.17677669529663687 * (fSlow317 + fSlow318))); + double fSlow320 = (fSlow9 * fSlow169); + double fSlow321 = (fSlow13 * fSlow84); + double fSlow322 = ((((fSlow160 * fSlow3) * fSlow11) + (0.79056941504209488 * (fSlow265 - fSlow266))) - (0.24999999999999997 * (fSlow320 + fSlow321))); + double fSlow323 = (fSlow9 * fSlow167); + double fSlow324 = (fSlow13 * fSlow78); + double fSlow325 = (((0.53452248382484868 * ((fSlow159 * fSlow3) * fSlow11)) + (1.0350983390135313 * (fSlow268 - fSlow269))) - (0.1336306209562122 * (fSlow323 + fSlow324))); + double fSlow326 = ((fSlow24 * fSlow167) - (fSlow23 * fSlow166)); + double fSlow327 = ((fSlow16 * fSlow78) - (fSlow10 * fSlow73)); + double fSlow328 = (((0.1889822365046136 * ((fSlow159 * fSlow22) - (fSlow158 * fSlow19))) + (0.36596252735569995 * ((fSlow271 + fSlow274) - (fSlow273 + fSlow272)))) - (0.0472455591261534 * (fSlow326 + fSlow327))); + double fSlow329 = ((fSlow20 * fSlow168) + (fSlow282 - fSlow283)); + double fSlow330 = ((fSlow20 * fSlow169) + (fSlow293 - fSlow294)); + double fSlow331 = ((0.66143782776614757 * (fSlow20 * fSlow174)) + (0.66143782776614768 * (fSlow290 - fSlow291))); + double fSlow332 = (((((0.81009258730098255 * (fSlow210 - fSlow288)) + (0.60380736442455996 * fSlow170)) * fSlow9) * fSlow3) * fSlow11); + double fSlow333 = ((0.17677669529663689 * ((fSlow22 * fSlow166) + (fSlow19 * fSlow167))) + (0.17677669529663687 * (fSlow276 - fSlow277))); + double fSlow334 = ((0.5 * (fSlow20 * fSlow166)) + (0.49999999999999994 * (fSlow279 - fSlow280))); + double fSlow335 = ((0.66143782776614757 * (fSlow161 * fSlow172)) + (0.66143782776614768 * (fSlow285 - fSlow286))); + double fSlow336 = ((0.5 * (fSlow20 * fSlow167)) + (0.49999999999999994 * (fSlow296 - fSlow297))); + double fSlow337 = ((0.17677669529663689 * ((fSlow22 * fSlow167) - (fSlow19 * fSlow166))) + (0.17677669529663687 * (fSlow299 - fSlow300))); + double fSlow338 = (fSlow302 - fSlow303); + double fSlow339 = (fSlow326 - fSlow327); + double fSlow340 = (fSlow305 - fSlow306); + double fSlow341 = (fSlow323 - fSlow324); + double fSlow342 = (fSlow308 - fSlow309); + double fSlow343 = (fSlow320 - fSlow321); + double fSlow344 = (0.85391256382996661 * (fSlow314 - fSlow315)); + double fSlow345 = (fSlow12 * (fSlow311 - fSlow312)); + double fSlow346 = (fSlow317 - fSlow318); + for (int i = 0; (i < count); i = (i + 1)) { + output0[i] = FAUSTFLOAT(double(input0[i])); + double fTemp0 = double(input1[i]); + double fTemp1 = double(input2[i]); + double fTemp2 = double(input3[i]); + output1[i] = FAUSTFLOAT((((fSlow10 * fTemp0) + (fSlow13 * fTemp1)) + (fSlow16 * fTemp2))); + output2[i] = FAUSTFLOAT((((fSlow19 * fTemp0) + (fSlow20 * fTemp1)) + (fSlow22 * fTemp2))); + output3[i] = FAUSTFLOAT((((fSlow23 * fTemp0) + (fSlow9 * fTemp1)) + (fSlow24 * fTemp2))); + double fTemp3 = double(input4[i]); + double fTemp4 = double(input5[i]); + double fTemp5 = double(input6[i]); + double fTemp6 = double(input7[i]); + double fTemp7 = double(input8[i]); + output4[i] = FAUSTFLOAT((((((fSlow25 * fTemp3) + (fSlow27 * fTemp4)) + (fSlow28 * fTemp5)) + (fSlow29 * fTemp6)) + (fSlow30 * fTemp7))); + output5[i] = FAUSTFLOAT((((((fSlow31 * fTemp3) + (fSlow32 * fTemp4)) + (fSlow33 * fTemp5)) + (fSlow34 * fTemp6)) + (fSlow35 * fTemp7))); + output6[i] = FAUSTFLOAT((((((fSlow38 * fTemp3) + (fSlow40 * fTemp4)) + (fSlow48 * fTemp5)) + (fSlow51 * fTemp6)) + (fSlow56 * fTemp7))); + output7[i] = FAUSTFLOAT((((((fSlow57 * fTemp3) + (fSlow58 * fTemp4)) + (fSlow59 * fTemp5)) + (fSlow60 * fTemp6)) + (fSlow61 * fTemp7))); + output8[i] = FAUSTFLOAT((((((fSlow62 * fTemp3) + (fSlow64 * fTemp4)) + (fSlow66 * fTemp5)) + (fSlow67 * fTemp6)) + (fSlow69 * fTemp7))); + double fTemp8 = double(input9[i]); + double fTemp9 = double(input15[i]); + double fTemp10 = double(input10[i]); + double fTemp11 = double(input14[i]); + double fTemp12 = double(input12[i]); + double fTemp13 = double(input11[i]); + double fTemp14 = double(input13[i]); + output9[i] = FAUSTFLOAT(((0.5 * ((fSlow73 * fTemp8) + (fSlow78 * fTemp9))) + ((1.2247448713915889 * ((fSlow81 * fTemp10) + (fSlow84 * fTemp11))) + ((fSlow87 * fTemp12) + (0.96824583655185426 * ((fSlow91 * fTemp13) + (fSlow94 * fTemp14))))))); + output10[i] = FAUSTFLOAT(((0.40824829046386302 * ((fSlow95 * fTemp8) + (fSlow96 * fTemp9))) + ((fSlow97 * fTemp11) + ((0.79056941504209488 * ((fSlow98 * fTemp13) + (fSlow99 * fTemp14))) + ((fSlow100 * fTemp10) + (fSlow101 * fTemp12)))))); + output11[i] = FAUSTFLOAT((((((((fSlow102 * fTemp8) + (fSlow103 * fTemp10)) + (fSlow104 * fTemp13)) + (fSlow107 * fTemp12)) + (fSlow108 * fTemp14)) + (fSlow109 * fTemp11)) + (fSlow110 * fTemp9))); + output12[i] = FAUSTFLOAT((((((((fSlow114 * fTemp8) + (fSlow117 * fTemp10)) + (fSlow120 * fTemp13)) + (fSlow122 * fTemp12)) + (fSlow125 * fTemp14)) + (fSlow128 * fTemp11)) + (fSlow133 * fTemp9))); + output13[i] = FAUSTFLOAT((((((((fSlow137 * fTemp8) + (fSlow140 * fTemp10)) + (fSlow143 * fTemp13)) + (fSlow146 * fTemp12)) + (fSlow149 * fTemp14)) + (fSlow152 * fTemp11)) + (fSlow157 * fTemp9))); + output14[i] = FAUSTFLOAT(((0.40824829046386302 * ((fSlow158 * fTemp8) + (fSlow159 * fTemp9))) + ((fSlow160 * fTemp11) + ((0.79056941504209488 * ((fSlow162 * fTemp13) + (fSlow163 * fTemp14))) + ((fSlow164 * fTemp10) + (fSlow165 * fTemp12)))))); + output15[i] = FAUSTFLOAT(((0.5 * ((fSlow166 * fTemp8) + (fSlow167 * fTemp9))) + ((1.2247448713915889 * ((fSlow168 * fTemp10) + (fSlow169 * fTemp11))) + ((fSlow171 * fTemp12) + (0.96824583655185426 * ((fSlow173 * fTemp13) + (fSlow174 * fTemp14))))))); + double fTemp15 = double(input16[i]); + double fTemp16 = double(input24[i]); + double fTemp17 = double(input17[i]); + double fTemp18 = double(input23[i]); + double fTemp19 = double(input18[i]); + double fTemp20 = double(input22[i]); + double fTemp21 = double(input20[i]); + double fTemp22 = double(input19[i]); + double fTemp23 = double(input21[i]); + output16[i] = FAUSTFLOAT(((0.25 * ((fSlow177 * fTemp15) + (fSlow180 * fTemp16))) + ((0.70710678118654757 * ((fSlow183 * fTemp17) + (fSlow186 * fTemp18))) + ((1.3228756555322954 * ((fSlow189 * fTemp19) + (fSlow192 * fTemp20))) + ((fSlow193 * fTemp21) + (0.93541434669348533 * ((fSlow196 * fTemp22) + (fSlow199 * fTemp23)))))))); + output17[i] = FAUSTFLOAT(((((0.93541434669348533 * ((fSlow202 * fTemp19) + (fSlow205 * fTemp20))) + ((fSlow208 * fTemp23) + ((fSlow211 * fTemp21) + (((fSlow214 * fTemp15) + (fSlow217 * fTemp17)) + (fSlow220 * fTemp22))))) + (fSlow223 * fTemp18)) + (fSlow226 * fTemp16))); + output18[i] = FAUSTFLOAT((((((((((fSlow227 * fTemp15) + (fSlow228 * fTemp17)) + (fSlow229 * fTemp19)) + (fSlow230 * fTemp22)) + (fSlow231 * fTemp21)) + (fSlow232 * fTemp23)) + (fSlow233 * fTemp20)) + (fSlow234 * fTemp18)) + (fSlow235 * fTemp16))); + output19[i] = FAUSTFLOAT((((((((((fSlow236 * fTemp15) + (fSlow237 * fTemp17)) + (fSlow238 * fTemp19)) + (fSlow239 * fTemp22)) + (fSlow241 * fTemp21)) + (fSlow242 * fTemp23)) + (fSlow243 * fTemp20)) + (fSlow244 * fTemp18)) + (fSlow245 * fTemp16))); + output20[i] = FAUSTFLOAT((((((((((fSlow249 * fTemp15) + (fSlow252 * fTemp17)) + (fSlow255 * fTemp19)) + (fSlow258 * fTemp22)) + (fSlow261 * fTemp21)) + (fSlow264 * fTemp23)) + (fSlow267 * fTemp20)) + (fSlow270 * fTemp18)) + (fSlow275 * fTemp16))); + output21[i] = FAUSTFLOAT((((((((((fSlow278 * fTemp15) + (fSlow281 * fTemp17)) + (fSlow284 * fTemp19)) + (fSlow287 * fTemp22)) + (fSlow289 * fTemp21)) + (fSlow292 * fTemp23)) + (fSlow295 * fTemp20)) + (fSlow298 * fTemp18)) + (fSlow301 * fTemp16))); + output22[i] = FAUSTFLOAT((((((((((fSlow304 * fTemp15) + (fSlow307 * fTemp17)) + (fSlow310 * fTemp19)) + (fSlow313 * fTemp22)) + (fSlow316 * fTemp21)) + (fSlow319 * fTemp23)) + (fSlow322 * fTemp20)) + (fSlow325 * fTemp18)) + (fSlow328 * fTemp16))); + output23[i] = FAUSTFLOAT(((((0.93541434669348533 * ((fSlow329 * fTemp19) + (fSlow330 * fTemp20))) + ((fSlow331 * fTemp23) + ((fSlow332 * fTemp21) + (((fSlow333 * fTemp15) + (fSlow334 * fTemp17)) + (fSlow335 * fTemp22))))) + (fSlow336 * fTemp18)) + (fSlow337 * fTemp16))); + output24[i] = FAUSTFLOAT(((0.25 * ((fSlow338 * fTemp15) + (fSlow339 * fTemp16))) + ((0.70710678118654757 * ((fSlow340 * fTemp17) + (fSlow341 * fTemp18))) + ((1.3228756555322954 * ((fSlow342 * fTemp19) + (fSlow343 * fTemp20))) + ((fSlow344 * fTemp21) + (0.93541434669348533 * ((fSlow345 * fTemp22) + (fSlow346 * fTemp23)))))))); + + } + + } + + +}; + + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +// EOF + +#endif diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator1.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator1.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator1.so b/source/HOAUGens/sc/Classes/HOAAzimuthRotator1.so new file mode 100755 index 0000000000000000000000000000000000000000..3876f006bf62958686b2134713310ea9a211a386 GIT binary patch literal 53272 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.so b/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.so new file mode 100755 index 0000000000000000000000000000000000000000..5e21167d63ff38ec98c12ccbde3e0c68df8afa45 GIT binary patch literal 53272 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

H~gbnh*lrU?&_FGZ91QRt&`2 z8uMpmogZtVF+QG z>cDE_gCuikwQ(cK5?l=bQ9_-4dPc1w=UH2@+F}b{pJNLyF=@djmWbXy9iOW#THrS0 zI#z?VM)Dsv#F;}N9|j`y-_=G^kuA_+Y(uC8Y(^9DSCOh}fmi6>qJ=t)n^@|0isu|K zjIa5j!xeAgvlE|}@Y#C6Fz+wO_71{liQfUk{I~JhL9D=Y%tq#FYl{pyZ-YzL zs6PT6#Xyz7*AN{+<-$18(5#?G>FOmS^Dsv>TqMt}RE3A_vBbHUJ7dME;Rzv`Y(o0sBl7bXwr;KGJ9p#uf4x zTIlE03&>|!1K-T42po)gjNcP8@))cqYgyXl6Yg0Q^A;P^khrGQ94+ho%oZ{-ccBIT z>L1@Xo>+s^H4Xm4+P*zyW-v{)wm&cYMOoo~jr@hJ`lFK2wb4@ZXEQ_N??Z8l_1RAc zN&jpOUSD4t8_3|Se$ZDu$%f&~5W0~v1*dyv2B(A(=AfW3je}IUq2nKLI@A_~9yFZ) z4y-K;DXoT_7iWe>J*b6d9I>TDI|(0j(69iFch!GgpDpyLwRfjM@6i3cXSKq^EwICp zCtBhBB8zC;>|z6|VfFQhkf_$+5;(plPoLx4;v~m+J9B)c=;~!83+!tSoZLcqzB$>p zU>ST3>ub~D24#PnWf88h6yEJRc(ybn_ewT$Nzxy-ShyR^B@W~kL0pTl3Dd23??(h# zATUWc*x&ncw}_&c<15fY((&1Z*MoCpK2QxC5B7N=a(U!9(e+i_ew+7;91z|QIsC>P zneBMJpDFwx7(j{4^Tw5p9&;St&yDQnL!Iv=^L>V!|0q3QU;)V{TjTh>A4Y)%dKXA4 zIi?F_^N5%WgsT`?@)#LOH+e%Xm}cazkK7{neB=({J>Fv8P&g*${)A8L?*obHm`AA- z;0|sNUS>Cy0Aq%ClCE#eM&=pG_hnE~BmTe&e4NT+#W1(W9H7q6lE(tCUEl=b2?)>OB8@D6j2c<_P(J3MwVUFRJ?xc>8KTpjJ=7+Vwo^Z_< z(P*Ru9+4g!qOWPeQN~EozhVv)ZW2_1_u{=H=7X3$v6Ya^!Uy(8qt9f)(`bS8B@R3b ze$h+ZwqoA)>Oxg{CYzGlyV37TmGB!ZZ41&qLK-HO8Azp&7znadEm#WQYFFXawt}i< z0@1M5va;$-`nGXsM(*g&} z3STJ;yjW(K{w7hvbJ>hpWu3bW9ehf)OT&X`;8h#o92*|c)UX8_?CiD$ac>I(HFVHJ zkYUv>*5&-*(3H;}OAVcSX)J1geqLV-vL|y} zpw~8Thc*@dd4=KTDwJdk?68gN<;aT1wW-ig+jS3@6~cLun2^RPs zUt{G@5(>nm76Pyeg#YqcObSB>JxM`;RW$$JhMdYXRj79OBC1=c6{F74SlRxtg*Owdk-&MP3O zEpTnlv~6hx(AKqf=oFP~#M8{R7F*!3mJ;@7mvu&4PJ$|r6hW0kpdZ3o`?z+!D%+C?a0kKu8sSc9RV$=(ZJy%(~#W8RvA?h$zxz7Fzg z?JIH=ztt9OhUI!Qtigpa@B_BOgPLLbU&wemFM;s3ahUSK8%9^GI1@KieZy)x${E;A zX7eN5N%;bw+XA14T__7yV-36!DI}futsjK^G(EZ2V%`-t?I9ve7>X^V8Vhdh@UphR zH{mxZe-PEg6R{;S4kb(e$X|fGUq)nJsICN$Rsq;%;Ged@q3|z|*9Jq!KwGRve#YCS z$nf~!RmGT5pa~+^Gpr5OP=F6vRcw!JV~_<}>($2X7XIKC*7KOX8dg_BVUf8sLIkf> zH5e~E`Bp4^&t#H>QIYWbtU~XHCjkmC!k@hnD{I>pC0va(=&JK26cpKjKim#^N85%( zW=7B%b+|}~wGPG?^E;6g+{d1;$-+mn#10Z4^6nyNw4{d^kuSkL{6{9%mhfaDlMkVo z&y#;=PyN~CmjY9}=V5qaBUfmxaUGa$?_iI7#9zZbJ>1fz8wWa!8OTdRL2(w5?Bo>S z)?w_%J%#k(fdTHoTvZHc9gKPSEhgEsw$KKn1zmv;4#5qq7|`DX`l2Ur=tC(Bxw639 z4k9NGZn&vu1cq$lXboML6`s#n8ah^= z&3*1}r1td>Yw$;!HM9a<1Dd43JoX_Ds(Uv=0yI0 zc?;}@=`S>v=?_z-W9iQT{Sgz=Un9g8`upNI^=CnWI{jrDRvyON3kYlIe9NdPn}{_z zooq%I)7F7P(iXj^fVKuRy(DUD-QS_D5Y{2!t~B_O9P=&>%E+OYEzA$WH&A*Pr9*Q> z7Y8Wq;6%}GdKYPLM(K!3>n%JP%Aqcq6M^!+CVENEVuE};CA5NJB+J9xeeb< zWef848?2)lIzGhP5slVIhz(kkh-@Jr{7af~?>KJ1RyZ_xx_o2!G}H}i{9|Fk)5-#$ zlm%;OTJ^F2vNDjMkUiGI{TM(03g_MOf-Ue5ZCpg-Bi)LfxItapmJbc==1& zGTomRP-DPDP-86pm^4Vbh5fQR(kz(SZzfC9+bRXNtrGYl(t!iO?D zy%FWJ1yfQ@FHl{t4oxD}z@kYtSA9gPNwm|$A96cgNA^JDCAU+H&Q3GPPB&6IjEd;O zA5kXQsYQDN`;sqO+Sr6gexCL;Ia9Jzo&k1B6y#F5oqCv^veM8@7RvS@SoX8iGtK}T z*eR#nz=#I6Q!ncFZ?)5AxW*)QdI{i|oqh(bke!YNNR2U>CC2RZcN29k_O%bVo#HuZ zGp}RJPHQO%8t)b@GLN^&JbLXaJO^u$ouWmEF8o8ruhKYAdpg!4O!H*pq-4eo&BAk; zs4=!%vdH?kSw{KEcQ6XH$vh(8k*rM`;PI$UIOPUL#0JU$e8bo5-(PTpYPKyOQ4;8d*T7>Fji(8I0|TD}16f(HF41qC z515UGoxDjyeT;DMLGqJ))gGyq!I4a>SRmSUdNMb|$*8n}k8n z^Jq^uI{oz+eBBr;SpRDFQo|7yZ|Vo^C&?3uA>a0(c?KE=3~{CT&_W0x z#+f6>InLlqm7w3)IFo8vxe1+yjWaJ`o5m($O{%7Oq;8z4$s<+Mkb!aL(7UAS#BrvJ zp?%tT!rjc~{xspHX^g)5wMA^2-T4_!76&)U5t#PXKwCdzBk%((WCmpMQ~lh&AbF6{Cxp;;&7lA2CIF z^POb+@i3G!rjf4F{`Ms9M`~n~87#=a3$>g-$Q9n>9d~UJjqCvztvoZJ|evJzxfU3%WR_ zad<;Yo(q^32-{M63>~ME&!bs*7TtuVE;7USH9|%FIfznPh%Y_pK;MBpya9lRBV!`= zZ7jUk*o_d+{~377CnH)#mV=8*gdufNl!iovMTS4k8AVc1R%?hRkcd!zikM)LmBvxF zz=y)EZ)Q|gog0Ap|mgoxRBOMx8ZEIxUiWKSOeP`H$ES|{w;0?tdRESvuuT* z;wh_MpiGYTZ9u;^bX4FiL3kEYB39g4+mB$`=U(=<*s$_Wn)0KkB4-Yp#?m6Zn2Mg`Xc1r zj=4x)ZZ)xDrDHT=EKyDd^3X^{X>=ccgUSrmr(kDRbQAI_Pv_zfm0&0dV{Q??mkG6+ zQEP$cv~hc|lg4J4hTvtx%68IBXtPlTFFdbULo--gvuGf!rSh8D3L`ed^oSOCmWDxF zO2j`ByG&X}z!={^ap4}6Va58GEwF*T&o``Gg@;8TXow;3git7PHgw(vn22&v9PAKn zk%RE-@czH@=BIM;LJ|!fMVq(0b%B8OHR?G&O}G=y})+6cmv-Uil< z#F{;xVCWSd<-+PoV1#k6%KDF`?dXO6sTRZ2N5fa38lByY-d|7>=)n?IL%LEDs!FkR zU^Vz*FzwjoAI@n1_GUC1*ow@KmZw;by|3`+MVdP>(I!Jv5P`%h3tb0I45MyA9TSMP z@UPcQoVIE_Tn;BMYCm$8EwGu9Puo@k1zj^$*1)_g(gaT~`7bwS6m6m!nqM$uMgH^f z7fer_&)$c{dL1pqp|5{Ui+WuUmW@KlMeCgH@-c7-OF&NrH@08wevElqkozRGZt8eN zd4gsQ2k$p@{E~>Uc2or}TF8@5O0Oq5a6#!Fy46B+U_f|3avLKHPp1MlL3p}WXczDt zFxE7~O*=*r{lvR3KsTT=kT1NA33MA5NXh~HcZAal=hxvaZ}7@6F{mH2{yP=u(`|pI z`h6W<$GD_lU8-WFVPXYO*j%ilW~0+fD1ZxM!lqfYQ2y3cbRSI519{YLlBrhiaA1cY zyiO&i-@`cYT_fa3nHte2*CBiOWhNCmXeuq&#deH+2HKc>lpxY9e38*2T%& zkL%$>ui=)WLnxAsGKSEFxbNr4u^>VEmtGwDXC7RRAIxKhbe@}bU8aN$9am#sh#iWC z&U(5DO&tyGhgA|juKW)$hRE_?#=R}X2M{TT797FKC-+Ym%BPVdakSur8405WcChjn zvGQNQVmvSZ_VZExI#O_4`LAKAOP2o>?q&J35JUC;mU6L7hlU~VF6-^YAjRrEk8VO! z&!BR1P_Eq15MTa7^a4ic|90Ger}D`=DXeUAI*4Skhy-~ zJI3UQRCF?%v+HL_Vz&O*Z&lPGwsetfhO}U3GDS@nXq=*M`4Wm6kCaF!?!O=7YpwHFVf4F_XpC;xL1BWz>4*%n2=;g<_V|u|<4K0B8Cg(t1q!$J6 zPuNQUoxOZXZ%2fm>|t+82JT>IeoF_V=^5)`!LsB&h@OPAnNi>grECm!wKHLHthbGk zqXLNyvw9y^a%`UzWJ?ms?CFb_lIiUofyU|WOS}^ZKZ}&e9(wa3-Vtktl{J{r@OQ*_ zqVwbNjouv@I?u(kuol3q5aQ9~7bxEBbN5GYAZT2p9#VynzmYa{+>Dywt+b)Dld6R0 zzaLqiGOf^X)6BxF8KYG|QtWnYU@AMVT3*OqSZO(DrT<6|CwCzE>7} z7cV$+4hsH~)FA3~_9R!{n3U|vs?p>q}+-7!Z(x%G_Y9zNGU6h4WTm{4V^qBXFM zG{Bz$m;Dz{uuwwmO1ou&{6ul|3Hi5AzxTGEKn1I}bX z56@*lr!*^OlQ#&K!vs6T1^Z`snOLhK6+kdPQ5Lej_aezgT7~2a2>RyGTUb)u2xjPT zlU+Q7l!!xT7p;bsKaB~P!zKW*3(V3CoueTfDQgFKbHl)sHhU*Ug$W->4-0K9&K|_H zl!&3DgW3iUV=G`8+SzEJ3R0NRNR?rwjR{LnVm@jrGDLbLeu`QP<*ka9H=Pwn&cvss`zAq^dO z!exf=vjlF+P)6|hBDC7wpi_fve|U2;Z49S#ZMc67HrV7hxTb#L-Bc{o(n2 zJS>8TMm+2~aSpNCH_-NW{(KN=!lndb(n?G|4Ug_)LM=&xwh|K>nApPy>huS}q*Zp1 z$TT5IJzm4A*d+7nwwPwt2`=@-WuuPEV!@@JxDZvuN1CA(J2Z_ogxAjC)Y-?Whh>Hb zKr%7w)iFDhG2^|D_z`X7R+5T4JRD{Kvw}Wm3d>AB2Ar~VoL(mdU;_}m0e@hL&@wV< z$d1_niF9Bq;=I|b1Q$DT@lb@f)h&XFotO|&WIr(prWp;7lYNr0(TY%HKlYWeg-hL> z!b<})pHr;PM}LmY2GB*Ex|xl}ziW#)zaY-ZUyeqe7l~~m=PHEq&1vL3Oac33vO`Q7 zb|MQ7>*0+Io^Fb~fo)iQ)Ldm^n2r20E=w=V0^LSN#^veatg<5QusOE>Nfbdf4fluN zWFcdsP@BY_z&_hTOyG@SY{I*?+_(2Zg4##~ERLXXEXbn3X9aCHOOT7VzhS5tGFi*< zWhX=De5?gU=#LOzGUVKR`g}dqZZh9Fl#l-C>&&E}YEMoo#aKPJb$V{Ee*%KBJj@z9qX|uO=V5GowrmJFMp}Dlc==exWjhC z$Op6!B(Nv)5&8*RmflJ&8-7((oLYu0y59lU6n^Vj-{yJmCOkCtZ&*qX-_Z?4 zgovY)6tIAiei(U#DPT|JwwRj34W!I(s6^(Wq0ae)gh*^JN+kVU%d&rs+wfFM{5j&0 zIY^}aqc}EPRo}ONE%E&Je>bkR&&Wv8?N9$7h-W46i;o9q;QY}@MV^zwxr^C2Mor*C zoczi9QPx3&gU*3v@qG~g?fQW=owU$G8lE<1!-h_9U#QYiE(`jLon*0KohL)eL!u;%Hqw`X_AN0^if(QNiJ&c=Teml^}kA zBn;9y|1P$&tLtxx@%C?qp4#2sGpIeB0+X~TiSfWSBXqfIySC536D3ZV$o1{S_7Bd8 zr%z1(wm6->VSAUuH$Fv9Y;^Vcu`dkRZW%#k%kLIw$Cs0IMeh2ueminNlQ<8D6EDGXoPiPNl5vK)@1)-47J9N-N1_BzwgnOo8`Jju z;4D0gR?=8L7aMi^pE|}a{#o!3cnV-goI~>99gfOqA%3Qf&ezBzf!L)P*v`*A*WxgB z&a>?7GduFk4&&rdVK|h`4k|CD8j}kOVtUSw>fzbu_zo&ximWmRGRthodsMF=eDuiy z%09lMdQT%eX02(-j_P5p@aEsrfXkkp#6dmtA$sVfrmzM7XAdgN^9d*oL&UMpD`)=? zpI2r_lM~M?)4(x;ju^inPVdc6+en&VhnBzdab-Fl_&AvT51m(j6v7?vdF8&biM=PM zeu&ZGC=C$o;N4*OuhtW&mv7C8;;dXS)rM~ruuV?C@mw64L(h93(;(0+0}a~c3||%t zM>iuRs|R*M9qyxcO^h%>OO6I#L5JvSyRe!0LgF48O~0^7-{cW^zX)Hp5KP^BFZn-= zS3@*>4NA~%!7;sW#-hyeh-iqM3IX5_TXJzM&yKG+xB-dVi!H zmLUuRKaRz{FF=;-aspoicqKcJ%?=LR3&8$-D$9cMQ8EOWJev5oTqby}MT8135+w>5 zjv7I85-Yp|odDJTP`uA)1<-lrK6&PWhyNKV&tA6A2N2Of992u0wB`gqo~-~AJUi3pSJHSz^hOV9uz12PNbDOYSvyziW3#xM>bApS+T0Z-XL&n2+RCwIQl5d>CdnR-i`bi4{SI+1O}zZ zzffd<7bJA1sBgXcMIf~9^ju%&zeP@EnO7k53}kkQ%y+ZQE0B2x#3pG%EORv6*_ZkK z$g4E(hp#|qYPH~OBb~ajbNYouCz4dag3WXWqf+51g3$>Y&PS_s(9AEmVF*j)W)R#c zNyqK*AE^-Ry9<9#cb)I}88@`Y?#L*?EvrAbXIVD(K&}V8Sw7NqwK+q zJ#;6^<`dj7HtV@95Zp4t<$7)yy>~|{1-G33vW*qoC`nh-Ou;QDoTlf7;dyuDOL{14 zf4(4Y!v?-~32Q2MpN+4wLeF>L>s9b}B`}0^WVMCrGP<;&53j~Q4L{E~Uu!`>wQIq} z!T^5t2x%6_*J8bQH6i39_l9qvTWnU`OeMs6)*Fp!0RxRD$e5H&4jld&sjRa8!OdswbbH}jNgnstndP~uPf|j<2K=xm!o7g&Y~|d7G@Ya9+0m zZ8Tf>1Sp60!(mBN3%c>$4p*!2d#F9DN#LJ2#rX#NCJNa;fpDZ5rNPN@|F6^M4eVQh z;tu(3f;`x!7NUcg@MCy^1%FM`RC3OA4Ao@lI0v2^Ukjp<^ZPQqb|VC8Ka4Y~TZkyf zu#)XJYd?%PKRx8j$+Pbnu-uBK!-%>oQUj#>w-t)G#@NYQFfG?ri)$(##AZ#7CTO8qC zu}d7^U48-%@ZvbbbDS?2P{}yQhx64KQ+~(n=sM2peQ}=3&~Y7LE!YAPJ`MjARfPzR zm}stA!Ekc&Xp}X-hYo^sG%W=09YB5G!WL{FKpPgc;ZK$uO|u#C$%l+p)Et zbk*<6TWY)D8EoSYi>=Wi`ObSOnv@#IZVS;D>)=q^JP1TbxvS7NTPdlEngeU+Gg#w! zY=IsvWw(DM#zD4$@;1Dc3*Sw$wEqi@2j6X2xsJxw_J5(}+NpY-?@(?-=febpqIFwZ zHkxh*-W=B$;ba!@V=7&s72Ioxy90|-7Zdj)aEE_lZ$8=KyYNN7LwWpIg^5j0Nk$8r zk6L&aQw*J(!`hlD@+vwB)}+&ntN5!2k|okY^%erd)E*!)nZOfCMkX-ct~~}AZ$x0Q z^3m&`Bs#s9xjzYlN zE{HhFh#di_#h%FNfaG&QXsS64N|=Hwv-MTH$;iP$PkNJ)!x&fc6M|e4@wmt|0S$$> zlBS?xC<8CHAZ+9URGs_*_<#qUqW@q6(a;kiwCJHn&Nfyn(kAh^LGVyX)t*Qpjij`& zDSKJuNu7$0aW8{KzpBJLk-4(Es#Th+1>cPBbRD(;it^}F8-rn>NNUYFSWFR{nnCd zb1(8by-O8&T$9ea;(&)@!VhuiF!>u^Io0FTc&=)m$vlyM-GiN?lV{~{h%PxP`+<-c zsXV~wS7z94aZDQA)h_&clv3fTcX{boKvm7@#c!j!t9>d8VKVCrWkQ=Fv>udF&nPb{ zD^=uqBYE0L2lUBdgCOcPZhyV%YOQv8{Pe?ReHo=x?6=s|G8|xvDX@=-iIN9V`XDKY z+*L03nS1k;i=6xy6jhTt;bN20?5kG9Zz}Tkx^k><;U&Wq71s<`6Mi$ykKbcceQx|l zPqj@2wY*ZrPr)^Nm#R+wo1Lhz zO1}{2su{21H%L|XGg~kj6zZ>csrc=xh70}fMwiUy!|%$1h$XULE%K_(Ol>|cH2Y1) zi})`ts`v%DrY2W|+UWK{Io0*Us9JRK-+{bDMbQvV9gD*8t6_8#BN0CVc}WryY4glr zV~W5}JXO{pjK@yo3u!&u)Xs)K%)OwGBb-d$a zOHm!S@4`!|ayjD?QicB1D}62arKsxW2KH01xz!#I8j31|AH{8`VTJLZ`eIeNu#UH0 zvsZ0wu4!p-sbnW=t+%;Rt) zJ%U|X;~$PjX)KV9SApIR=E%1OMi++E3uZa8oSy%5Uxdd1iPJ< zKOK$U3qCJ>5{;IC@4E;WAl!%0kMIb>)d)v?3Oa;i5N<{|9wBX#oPuy4LL0&~Ou`l* z9D}d{VLrm;2yF;gBdkHV7U6P)8xY=x@Fj#B5Wb7>d4&5AzKie(!Y>hy2uGtMFc3~b zNZ)bOfN%=JwFoN_zJ#y=;Sq!#2uDPs(X|N2Abb?z+C7jH;Rb~J5N<}820guma16qC z5#}S@htP)b2twKfHv(_)mm?g5@Fj%f5q^wt3c@1@Z3stU7tV5o;}Nb#Sb}gZ!UYI7 zAoL@gvLE$A_!7b|DUQ7;qtG6k5w1l$96`7l;gl~?PqfDdgi{bs`3m_FuBKh|XdfIp zU{}hrawVlTE9LYNLo&KBX)yvFgU^n8qfr&@pk!uE&&-}_7=BGgn{wG{lh2=EJclw; z{t|rJ@a7a^#4f@Y;L{46vdfEbKR%u$_-f$wN$`7tS0%wW1D}@!e;v3Tc%nS}fNM$c zG}PCU1Rn#uAPJri+>`{j0nbT-*8o?O;LCw$14nbjF4E6!z_WnkRA=lWe1o7*)aUbp zJ`sNxcn0_+;$H$+lHemic=)4ebX=@d-o8fQBu^qf1vu4rYyv%E)(DMVZ;{sb!h! zpeu)EW&M!PE$76a-e`=a*CZ56Qk-wq$0M z(@n`R+!3o1BuxQb>#w8HM?^htrh0@@XJo3Y(;)0kRFC$-GcxU|ttrEp{6#wXxj;4G z(*Zuc_eY}_LN1*?N@M!aV)~dt`gkXGSTcoZ!{=relnkIJDrXt{n zEc9-ravn)bTF#8&b(sa$0m`BFs6@x};Hmi$-0Rw-1nqH4tUau}J;;7KsH0*LL*HM? z-f7QrHrgo<_q?4Jp`FTxqcs(>qs>S!K>E~gx1*9wPpa`4W~7kZBQSpEV0?8`c`&lo zgS5=-n^Mte?P-JNGee5mT|P)?K2#6-n*@D`+JAK_>Uk5je|tLGZBSii4geS=w_0ik zKk{`W-wg6!$F~2HO#7gXXoczh)LlIMillf^pPiFfDa-6OHnI=7Yt9L(a=IMfNqd=nB9e?>U*Bf7{4?~7 zB%QmM*8;W#HZS3`6YIETIpDkNIQZ@yoZ5R*Qof~>F(qd; z&E{T6OMhip%56j5P5Je()CY!A^Z$~z;M{ycgH z?!P)E{a~4L`)TQ4&Q>;^mI~yRG3jq;O8c4VPs~<6JS%;pU3pXeNy?p8W$iiXy*A}- zWBOyWlz$o1|2j+gYHZm*W+^+)P2V$H*?aD#AiZl``fW3nyUtJl>~iJS3(~*3T)B6A z`q9gkBNwLMQ>NT!O8=lt>CQ{vVOMtNr~k&TbWKWs6h#)Kzcf?XUYLI8<;to{(qAf5 z)=y6Vg&k{8={MSxcc!LqvnuN@O%K?WjhCfwLM{u5_?{&dC9W(=hitowsKj4RBMu)- zqjK*rCQ0@cQ{Kl*h);VdN%BG|m36xn>fAVsvi^N`Ix6v>>pvR!j|TpK(184XTKRjl z|IRw==kfY`Dszy2^8fD?;y=9qpU?nJ@#v!8W~NKV>9?Tuar*6OeVl#^nywK%P#!e# z8*KhzS4Jlf@l7}ElE2q1*9@c?;v0V0C4aY>=GAn`^sl~&HdDM;2!;WaUGyD-bjdk6 zI{}Qid?sCht(tVn`4sl4vx}zU>{_R?K=u#%$_Kh=-bELt!0e(gAf&77LLN$-O-=zx zIlIIni3k)~9$o=4`At9I`SCW2#W4kC7nZ?TeEc~){tpq4$tmdm6U1vk`=uHWh}b8> z4iAZNu$d>EEW&d|c(Dkli*T+8Yel$3gg1%s4iVlj!pB9pO@wcX@DmXp65(L>aENap z65+WbyjXU!vyBS=7?x zZ&4@a=I5F&ytswM%-5SQ&Nb!d=8xkzz16$ebg`*0E`PE}D!j!G=`eHzsmh>Of7QWC zD*nlS8jq(bvOmY;>5A+Z@%Ugx_NRCpy^|gq6RuSBQrUm?NvX=vnBR)WhbcRS{lw$L zm0qFWcpP33-<+3trQ$2;q#x9$r7D?*8fuR3-JYaC*uQeDEzIykW}SVCDBeP zJykhPF|AkWHttGQ;@GK@2}@&f{&aBBFZjWn@Lgnx7ThkOjfV^82xEV!Fm;UedEst+^0Zq z+IkgtefTrDC)~1L#a$o%D(9O}FQ8n)r9I2>aUebKM?wnh^KgP49%Xoc z{Zkpq>NOMvrNAC?)~iGk8&}6N0s8lg0!H88u4V~7iS{#J;EDED$MF94Oy@aIWRk@H zxeNF?(9b$*P+Za-e9Y)aC|y%H&ekw-`z7$R(ccx(ud8^nG7keh@#*q&K+a=m&6#k; z$8q)!0k;nUPbLq&GbH+6FQ-Rw>@r}2p^AHbaOMDb9`I!RrvqnlUeCF(wM5+hXaIV8 zCrR{eLY}dr@bv;$S~wu({PO^O46sMyvvDb>Zxnnc34Es~p3jxQPfX%(oq}E!@{ALF zLX2KSbio6HzDKl+lyj%RJy&yL*c6 zuoI|-T`L9u!@>_|3H+ym|4t!~l#|w+ncjqc5M|dJ0&f%aLk0e&z!Tdg6GLe-IqQI{ zBCkGZ2TpcgCFF;?*tHrs$;3tAUE1z?b&kJ)IeH>>N@iO}U_zuCpCqe%a;3NB!E2l%@B&S`_%XXPA@T>&+ zuL4eTszOfoP7QqBf?iGFbF08NCdl)Iz&(P$Y?s#rZW8!KLgp`kQ@K?d2WU;3u0xW) z&?k+rbe#nSQoY&|_!j~vd+-D}oz(LTL9Ysb;^xW9Jb~L2{6-LXGCO>G0Q`JB@KJx< zxK?GH*9iW!V4sZ7t-wkC?gYJc3qHFO`rQkHzA8cgM+DxJ;Fr#WqDUT-kf%+^b185t zw@c`ay=z2TEu+s=)(O3xBNh?Pz~``_ws>*gm7pIq7SoSPJF0Q9cXbHqD|M6c`5o|N?e*~h^o1ZMd$6xp!L{$Y z6gcZI9*#-<%mtpT+{M7DUFId|?M6nA_ATOk9uY-s8-PzLm?z^;2bW2nM1NuucyEH7 zR}8@C8sN-t2szt?JgXV~2*opv1JX{`48UhUa3+tKx2zU?RCHv*cZ&XtVS-(Afs>!? z7IrvV;LX6ZFdsIpR|Ud@CBRWczw76Mzbfo)xuAGl;L6n;knQ!x0DQs&;IuGCEj4PI}G|dM*%Ym5d(ajsVzR1Ee_^eWubT^aJx? zmtXLa&!;eBcI{?-`ajpd2b|~0-|Y1{oGq;iwpe=_Tz*$g?xcwY6O$7;YTZq4 zhtunIE_Jw?u)9{N^?aVfIsVh&LH<47IzZF#kR1%Y`&oujFxvA7v5nj0Vx zAXA-#Hq6eVz1xoYvnu=rj`Bqgzt`omA~MP0sBUdFo6ULpEwa|?3cuNmJ-Miz*Xj2A ztktCzPW&k?t?=i2oNll6@`{NL{72kua#Xk)T-AQF&u^_LASl1V&Cuqub;%Zy2a%{@ud#4*-=E>iyckPH7>>;ltMm-8|rmJkAiF7gjfpOz8jxjemTl6 zuXN*H&AqFLf+2fo{gEIgV0IWY$W`W5vy$KE0x}(otD7 z%~nbbE6a*w%xiqj4(xiaX+XP_TrsPt%vy{Fs_^HT91efIxA__e_WsuS>mAst-|V$t zUTv|=uvw=S&zt9%kekojQnbbQYDhF*NnYs^zUSM~)}jIHaMA$#$el1_wCBtv zj&k7!iW{6hANhd!H4XM9afMMyu?^BCCe+H`+~R=|2`WckZeA`N!+`Q=&0hC1^l4{9 z1=~?BV1!qb$x z8C||mE%v-Op&y$~%^p`%rE}4==2ntlVJjO^|XGH@KW$VNQvH9lOQnS6Y)<>VQS&aSP_h7Fdb!kTI9* zsBuBPjd1byIGDVj10L8Fr*afhSwXw(5n834Co|fKq}!O)N(IlKMcecz(fHGX2CZ@1 z?X?wVnC<*olSJc~^L%a^o#uGZnOvpz3dcYuMV$@T+|<_X)EW>LQ~Ofz`4l1#EfAW(;6^!_?LQI7`khlOZ)Y?#I9sUYruV% z(hMfSNhOf#MxGM5T{5l2Gb00efn*-9zjx`+k9pn!8f_w*!9foV&CVJo%s?&6hbGpt z+|Tt>t0>DRzgA5#J%y}f3U>;ekE=#|`zP|~X2QFrA|Mncn zj$$6U&mmV<9DjE6q}ZrNhuEA=e%}B??lJ8Nj~s=_ss^VQgTm$2Y}9Zp zf-^vQUV7BPG_^1`8yE9>%w^$4@$f@4fkguha1|y;c}2W~0=op~LsMX%`&<1_>{;Y{ zSXe1Nov^-$6O7f(zJ7}6=ZDxm5Y(->0L~FdaA9W(Sv#e-6%`I#3-)H62V&oCC#rYHUuJ(4)-BC+Cdo zB0M}cCFP63G=Y!e^tc`JxcK)PRH@AxTS$=u&ciX}C7bvZENXE#)Xc$2M3rM4_s3^slg)}`*%XJ1p6Tf^yWc8HqTZ9`&nHVsJ{HE$b(^k)>~kh z82A(0nLO~nef@r_y<{ zl8XtCf@Q=;@)cqM`M(*^`)a(Z#vU4e$^CIMGzwe>^1ZZ-=i&xOpPOZVx$jkm&x-_X z`(T%Rk07E7EuZ66WUPF--%f_vVu7B@B~~(jHty-N;6uD+`Ep;L4CTIBkgzL7-iS~` zNPApmez|{7hJ!=~DZiwX;T+_rJ+m?{_xZ_irznTyr;n6hz)Fq4W&YTHKqIG+`*dab zGQX^UlgK|!FqHcSWhnOvQ+~>mn7 z$S^=bK{*9>$5i=>mPp&33z23%P;qPZaU8Ve?wjpQT7kH zf3o{H^M9C-U%sE)A@a8+=s!_^`;njejx1m9Gu3_x5SR3WQg1T9w8I-gqnBUqM=iLU zWmk6aAof@0m*L@r{IPwj>v$G5q5Wh&8KxjzU%t9tWf|4=JinBa$NIP55M(A^vi|b@ zuSw)rWkwOoawR+h`SD*dNkD`$e|`c^v~2`iIS`rF8AycAsH%)i2+o`V4UmkV^M@Ab|J$yO2n~RgfibCU<9cTP%4F{n6Ot=MTRLX zRZ)@<(z!#V>qE1klOfU4;rzr`N!O0wvS`0Bi3GwC4S7_#9QmT63+z~dQ6v_N@&?k2 zQz%=8qB^W@qrf8(XW@*Qieuy-7Tx}j7bELN{k7zuU9~$Rp@U6SL>|twagtt+!#Ub! zwq0#%OX^N=q-H;xp7NU=XXM^I++*ubADT6-^_-ETZyfPRuv{sxJMot%-4aAF%be!XGo`>^%oEbRfae=tVL^uKGM4Z_;b8udS^J1Kr;H1Nb zGaqLG&S^O5D8xA(XA#aBIGs2z$610?9y7(oEQGTqs0-(c_>~B+!s)^}4`&6=N}Sa= zYjD=$yas0@&TDb{aL&g`#{!(KI2Yo)4(Iham*S*j|Gc-l!Y6yfzdLd3ansJq{wQ%t zZ^xOZZLazIlj(oD;kd6aubh&;ed3te$%UQI{W5jUFP?HJ9)q7t*km{%& z^yl|)d2Pk$MHlZ_P`LT>ge#T2PqV-K^w2%U2}j@gY*gCTxBjx~kFUS|MDWYhttWqU z(!+PX@!O}z-1v|GzF^%ijh8qc*mukQuA3^B@9n%h@J8g0A%mKxzh|8`{k76S#ocvd ze)HOj)hBGO89nFr>Jwl6?S-S0KL6yDqbr|!>5fMa-&g)}o2Tn0D%1Af;T@ukd>2WFId%n(~Q?jPk%pYn6hczFK1nKd-YZS_1cP$PTE}4asKZY zzxv{NOWWRfWb2b3-M09K)OJV1)o<^coO16|XKyA`IQfd@dv{-3Hs;TdPI;GWd*Hu`uKL7UP&6V1C;yN0Qjx}_&)~66|Wty89<-s!Li1Z=Z^!l*PH?P&lrIJX9Kj$?g8{L zasYc-D#I0H7B>p0iyimi z?-{@?8KaUV_9cn1-G%kisHp2g6J(babODMpkuO-$EK6# zfT-_!9sdL&k5kA)b1phoiTZ98^_BQVs5q6|=9hkQ3Em$KM5?9vz=sMf>j7*{uTt zF#QX8VDaqugJ{QIp|_I-ewU!P2zp_*3iX4LamK-2!alt!XCUP)KtWV)cYx!ogrZ*; z_3c?4OMi;svs(1)hfz;D{(+PDIE9?DUknoV-y`%ReeyKX?s_|{WAvkyGF?BtN$9y- z@R9B17IxL9v#Ya(efD-T@f4ba(y?0TKcv(DHX%=&(5I9?U)ae`ot>O3?9eOhu$Hq| z<_r2>K`-xTnuOlg7jnXf1^u0(zFu8@S26#Vs+5cRmJ9kKVGlcX^*vSSp7JO_vJ%0dtvLAhW{Y%(kug(r9qrGT+F$p`A^Yr1U7xB@z%Y6g1?`;D2>g0I{ z{et+H&)|aJeGU&l6!cw!{sK|2>qWct2>rwS*zr%MpOX})PCvIGmE<((+N)L6*Qpy{ z%tCL9C|CN2cJM!4NmWc@d>Jjuog(bPtFx1bh5aAV+5Zbd9-B^{r$oJsI)A=N@L#Rt ze}a(TDC8e2=$~|+f@qanO%wTXqBK>T(0W+#s*ij z&)wv6xfEAzL#+##c6bCsj1ods}>-g34N_v#P|3(&x;`oN1p_>8Yr5 zH+c%2RnAK*N-`O4&B|+R@HI8oPj!BqZQP|yNcHB?k07pr^rJe4iS(!aUL)zB^zMA4jA2s**?0S#S4V!TnIJ1gy$*eFAoi(%CPhr4e-Ma6&~0$T|mqMxn@q3#KoRwk8ftPr^!x! zvC3WHIacLluDm*ryXjbjs9cGgdL$EizB0|-((H3Jcv^j~3d$>he6#_pdB4`o&lK$Y zr&vXb&ZkFn=y6FON4wEH@zRcwZvy;y1J_i;f_l`TbXL5^8>mt9EvyQabbHm4v2C*Y_4snXk_DMJlU+-^IB@_Dr1}8i2-yVp{<#+_3aqt2ez#&ngk%3 zH+dd!Vd$q{Lu!mdbLpyR#PrEUbBc;bxOUbzJl;MImEsMz1LHG>5LNJ zBo}53tyZfwbDq1owgTCjY8$HU6(v5awW7w|e1{uDqkkW{vKd86rU zMR9v;UGqIn&9#jUq=yn;me*a|WdBJel}vCINCW%#83}7F@nyS;=b=^}kNu}qKPm{M zBLSf&i>t&_=c({nn|=0@Y=W}tJk8B^mh5IwLAI;Nj+Y|18X7A-jDob4 zO&&BK&Q#R8bXF9JO%`>Drb@H^KUBHQEYuDj3)5FPLZ7Rpq4wGqkIUQGTu@vx$;E81 zo(u+6k7^%t+lnSny{ExP8tH>cBQDq?CaR%x z7v@V9H3Dh!Frh`v1F1yn%!UQEh+&jzsfR{f)vc{AFZx#_P4ImSUGpt5meDtP$J8BD zdUVw~kLZa%wx`3ci=Z5D9gS)A^-yBHQrGCNqyjJf@tT;>gu9Z;0xjP*Vy8PLP@Bf#uc+6YF(kApTuTT6DAQ&^TFh&i{VBs zpkCHW)N#-!MMr3C@wpnSTuttVYLBa`-UpKFP!32ek_0wV?W@stmeP_E-}rjB_ow+t zxJI21l;eQ#ngs=rpw#}qp^RBGV8=AXx#!i+w_2$a(0#DWx6tc>zp83vl9bRLF%wB% zl<<+f)GopjIlV2lN3Tkv4wz+)iN%(iX?3~g*Vo1`TYuxsn8gEiJW;RafmrsREReqA z%pm}m#GBr5A>vGvl)Bn^&A!TtbI;9aZp@fS(fa6Bbp>V+6tfau!Eu*|ZV=$S=0We6 zmNa3B1GcIZ=HEZAV?y-WniajwQu4~ma;Mr|){OBSEGt94tc*-+ zY*cXKsceO15PQRbp4TKP$#@fE5dO-yD=41K{v`n)jCVv*7#*P;p)1OBoHA5N`2XNP zg~|L1Ta)6?OPyye97bFLC3DDnrBHaf1mB0QSRuYFQ zBau!lM%C8hNnMI^iiq?4Nt*mg%A+Db$d%V0yao+0SUFqJUwh=guu_+-WQw?##S@iW z5%-O|4J)jJ6er?z$oFjkvZF`5_p?!~3rc*oz)cUC7@fprTt0uJUCavk^|u&ZYcD4gCZS zy-9<&YH*7NKUagx=Z(bwmpCPV`Ful<%jW=kT-ETWXY=xKYVa}%BCHtzFW2DmnFwWT z)!=e1o$xjdt`Z=QE)6c0;91Hl4K9|>8NOPBUm=+wT&uxt8hoP$KVO4)Yw!jQzC(l0 z(cn8Zc)AAPt--|-HcRc%;FoLYLmJ$z!Fx40y(1)#BN}{`1Su5j*3`bDYq8W64K9|> z8E(|zQy9Ykq-pR;8r-D8%Qbkq25;8jYX`vBKWJi9a8invK3hXys^MeP;PRO@C94{o z-kFkzQ-g~~3oNNjgUe?tlu)k0CrTy=Yc%*p8r-YFr)uz44L(kTw`uTv4Zd817i#b> z4KAONQSvGcZqd-M*5E!3zEOkIyJ_<1*5I=xh;WAn&(q*LHTY#3{D`IC)gAYVfrhyh4L-)ZlFze1`_F*5ExF+^NAs8r-VE(;qUi7}@Qa z8a!=1$MJX*v$Vd$q`}3j7A!GcgOiVzhed-EFL`8Z@DvFmv}thp%$kx_4L(#u@6_PK zG6?l4Su=?SA;#2t(~F4Q#80)gBvyYSPh=0!Ozm*YWwFYY9Kjyy-86! zyM4)_@#r0D`<9gFG(@?_}{aC{A51 z+|A-AQJlJ1cs+}cq&T_4@M;zxN^x?5;Vu>*L~-hR;Wifk1|rsw8p2){KS*)vYTKGr!EsNXYs2kPF*GJWbt_vr>+pTvG^Q{lc|R-EM83U zF%&nk_;iYs$%loiiq5KneAwd4`DE~9xC93{j^_kEmYQi@4weNgsVD{xA&TKem#%0j+Yn$Q+AEo7N zwSCH~$N-l9Pkh7Gz?6BwLlaQLkcvN7Zc8o)knmL;dFG>>_DhtOVd1Ml$>m1*c2Rzq zSVneU$?OmK>EIJ7cXGNCHL##n_5VxlJnSS z{Z4*mQ~jgNYVbF!iNs%OhPN6WS!lxbZ(cv%e; zr>T=iyHI%UCX&z4`4v(Ed1-3SRzt_FEZ6AeRFA*}KLx=lH_TNOYj>pB5N(Vjr^nFgfkj#O?>kNQq1>D;ORTVqbTm*%ZQq*E z-kLI~B}WY`s>$_#jz(7lPUA+Zq9bRo@3qJ-WLW$vWVk|z6Rsm0jkZ5hehsZq{>^Pn z4K-fI#Rdh244qY^K$zQ`Xm_-v*U<3>qe{L)=CZ}fb#ZL2Rzt@hd9JY{ml_bo^a*R| zJOQ~359XDlJhcM7`O`tHSi66VZz*&frWyn$?4=+$W%3oGdBS(VEuk~<{vCOXs-jke z)Bv}pz%Rr9f?tZJ?{ZZ1gcErd_!k&o4MbD+{ShTB<0UNTCH!p;x=OJrJQ>7jg7M5B z<>qW#QULv{r2nrBMo5&``jufs(pu`Q4!=31R-guGn4+M$gEz|;`eu1DvTNUC(EKkK zpep{nvhZ&5oI81?6T>S|po|R)Z=l$&@J9$jfB7fXMC%W8f0aAS?vLco%q?{UAEcgu zZhXV%Wl*IfaBmypYG7%N-)Bw|LZBOzqgZAlhR&BUu&S%9`-?h1R)b@eC)5R2{*_G^!D*jPSV>s&?d;_MFc_+VX)N{EGq$oc6#1C-wCH^=)9iT z2c}unz^oKU;3}gdFe}Xwn1L=eEnW3@m{XXYOhb=IRsAc?7LwY3r#YR4E6pZKh673g zk1~gUg*lBSbeN4SVTC!H;(>;2HMqiT6U0Uk*Ej-IHZ{-yfvzgAG8~8y7mNwhymVp0 z1$^!+be(Pw45rXx4@`pt$v0=?!uXY8&Qioym{&s~MS<(RRfhEK2Mr@Onb!g!G8@R! z=t9MXi7uc3s#LzY3>OxoU5g*28rS#9`OL*^w4P$iQex9mJ!<+>0w{>D7aVvR4s4 z18uD^uP4Ug!?7YFBTv!Fx`+i8_YeTh;`=O#O)4nV;opZ#1V6i;57UA zjabkjZg)nxtugNu-0n2*z*SVxjl|j(Pf$vU3QFoBJA)>vg4`UUN@EDC^5K67T@tbN zF#LTIOI!_RQS#1ihOGi-xaAzoh}D4X5!|xXfanqd(IpT!fuSQHdIIQKPe7Y@6KB*_ z)Q|+FMj|_*8gMmGmFbGN7F|Wv3zhE{sZq;7GaUiO{2q;27IgfihhS~bSLGVg-=ROR zk?UJe28i=85oM$A41bu?_I{OXn3KdV|9;Rg`)^eRhV*Z6u@mR32XhUxQU9{niSh$n zJVO^RA2iH42$osIlCiUaiE-2;z zLWI|GLW0?M@=k7;-CvELL~ZBn2KV!rEGb0t1sHSDOyKi5 zwHA}Sjo6@m9|3)hE?xqUH^GA{`Vz?nUI!8GLiqP+9gM^i)t$qONP|($K8oll$Ugf3 zsbo2mZ}vgrxf6fNz6Qg+U~*V6;m!`gerPT05r&e?kD~=fnAzVkkE!k35^^w#8E$RD zSgGEyg+@3zVaj!3$|T1BUE%XENJhsm)qgNRgP+LY@P8>LS-GxA59V2#@ly@{7s)!a z#Q#-v1bvXyLL(>}*;J!C`S>%u(b01?ZbQ{o1=hnwo%O8b2KsALR#|BL&v|(}U;Tjp7tLWQ zo@B%H&JetjG6f2~(*qZU5T>J`5X}pza6?BJgD}|wp^-J~DQ%!3AgOa(Bn zSP`8klmlb40-6J`Spm%fvWXAP0Wd3w&H*qnh|U4n+@K5mK~p9Ndt8^x`2aa}H5fA= zSPdw&_(0!ayOwA$Hc$dN`#AG~Br_8F&jlueOLUx~sfC_Z|GB_Lj8oisfWw>;`uK}j zxxgK;R=OWN1GpWmkbSs0o?v~W|C5*VTK|C2pN-j5`%Bn2O<^k3jsB>yoGxJ?UyMpd z_QwqSop8T#=Lp2jaLdG)A%7Dar&SE?G^xcTn6>Z^o&nq$odM{Fbg~|*AX$JI_~qG|q(7JpsQ%HTP*Ma-Sph6)?!mou3a!CkffYya+_;;yTi1fee0G#f?0-Y&jg9bah z9RXZB0zeHNvp`a9tjst+TteSoQCw3@R4Qve>eup>tmn z>2*t4UkkF8S%<&ZF>Z%C1@n=mhFi)}lEc5lF|L;*OCM9GK-jh=_Z8(VhExy}vO3Hr zLq{|CIsB2(iy^dfpbS;tN^%4b*k{a%yWC8m&ImdXf|?CH6^j3V;R!1 zOzM9cjbU$Jnx+^!%#8g$OcV_r84ynGeAm!<8;O@wM_OOTbW)%=0xfI~Vk`<2rP~7q zknvzq4vZBVNBOU@@+S!eVx|KDSOr3_e-@R(&_OF{5MX%&1lfk1%G2ejcIX1CTd);# zl;=sr59?4UtJjfm#LzJW*^4?48#=#3F08fPt0HqT3aILe(eJGju_z@p zT16U7^A(W}3qOrS908Sd2%~ZMUl5w}%~k^_otmD6P79qH6*|o~g)|mK$@caoq_JI4 zUXlN3co)j(n@__Ue#eY%Ea32Ca0cl5=(k1VzO>(f?v7T!mDWfQp@v@kaK3-XzPtPK z7x{aO#_h1*09Qbyd%y(|BF*=A8-m*rCxs=1U%(aa5A5v`gTueroNZWkIg>4tVCY!N z^aC@2-!^p4hM*4rqV%cTlCq(#MNa4xm8?%!{flf4{}DAIb9f{P{dxtV^FaQLqn5&5W4mg$li__ zZ34PS_`PqLylVT>bj4?P1R7zvO)2)kl`!ywj-0Pl!?f4QcsehH@Q!h~#rYShVCkv2 zpz0e|xRK!BO=j~eTuJ%-UpV}qg*+$=R%7?S8O|Y{_pKiXeP$afZL{tQSw1ErtWD+F zNHsQGU>>{I;r}l5Cgl&HnphFFg~y>}$shT%k@wI?GA~qz0T6jD4*xd}|KZT>$m@Wi zXJduc6uynOORnLu!OQb7hes2HuV+{rs-XZMvOLcj-o_vswAQPR+b#UTt*qxU4`5hP z0fmKU;SWSIsW4u6@~wFAIh{!oLPbJ*ScUe4CIJe~!=HU&J8Rn(B~*bl=&JK26ck>E zKim#^N85%(W=7B%b+~YlwGQmm`ffM@*U|BcEPMn@>>%+W?=FHyOL~YAJ_PQeN0?a8 zg(eG`nh}coSMu*{)pt4hCI6J}c^ID9$Q8VkP5rj>^+V#X;(7;N;LwZ%9p+Z#rJ*3t zNF+UsfVg$AB{K?l1H%BftK1|8G(N8k{f$Ys%@JH@UXQN82Zz8qRt)GL27T@m*z~6q z1wBR*1w?La$aDl38QB1en`i$Tk#}%a0X#zz$v{IHZX1WymWeqS#98}9U$;C}nN!Si=LNqijsPeTuUNTe;V*@M%* z5ktcB!ht;{*177_z@X)6(u6%{yP=~C&w}lNMmXaICUnna!%g&bm~pfRml#8H7)wLP zrDt-VTaMJe{$UUNO0@@NEpE*jb-5ee^`u*_K2n|3S?+cW+qLs9Xn@#IUcPyFE=(`gBUNZXfl%SAOoi#; zYw;))i?4a+v-={AHlbS^ndQ8p55 zayq+#YP3~+32EzOuC2jLFM4gQ-UDp~v3vw~rNWPxth-bw!$c3;nID30p!C(04$To= zC_tHLN}@g?b*pZM`q&o0r?CexN=i>8cviSuZ%UQF6%&?~yfnBS6R}(cmfP@cLPuZ? zvv)j4F?8H@I+$Pz%;Z9A5|Ja=4F8g3-ZzfhuN@8zo-WHAItg{dGv2YV;HgFaPm2PT zG_CsBcS#XQFox{4=N!QJ`8J$)%kvKZKh<$zm5+2wcj5wdZCiYte@AEc!e^*mksX80 z$1Trr1KwuncpUmD3RH1cpM%vKY!Y!JV0&Obgt*8Y`Yp7AM(C&qNR83X5@*45uP4*} z5oMvLvnj($>zV+UlCPmJ2&g@xcR=BoEeHF`Te@*cO-^{@l7Q;c_Hr&M5!opw_?jEd+& zA5kXQX|}o<`%*3-hp9e6R}1SKG9(q5D9`0h*-S20^}|lR%uZQpXeJD$@TFkc&raXR zTODMloN^r_8rV*oP`Cf6oi2qZh-0VI0Y~k0KeR%2IsqUx#-%JVYNx4_H7@qGcQtm( z>KL`tDoP4sXcH~sYSI~WDp1k)mnr}5h4yi<6aa7sLs0a3I~##VLp`Hc@D&VRH$8ZnT?X^#s5 zN895{CWN75EI?|H$t*G29{8p;+~zc0|vs;qA;`*V48#y$VWALUf^8 z5(YgF{jJ{ZtHIz~t8V5!u(3%}vB?YCn&)I~O%2QnLIX2@cSP5~)Ymw{Iy0rwLwA3Y zxg{gqf%nn$Fc-WpeFy(c6~4nYRu$EXxMM<^wL2zmZsz>dF{hRCS9cXjC`jO;VkHJ`j3?PiRk4Ls!8Nym-z(uRWn6eD94^@xEY8r`dlJ(N?j7Uk#Ut*AzDZKLsZzR^F7cWo;dTKA?(4!5m z2GhxDm<7WN0#p4VM?#OG<3#e!bT?q6i{O+CVMU=&pdx-hMk(pUmu}&}*MHx^NCaK7 zoAp?*XW<&N1=fmnh!m_gkP#grb>W~AVMuIOE!?#YRJn%7XO3c0fW{uAi7Z5-{1mak zB1_Gq9R3f9O*T+*4>}E(5W2(c#09055r6~i%jq)IMT@{_Z6dJyw=-^hUVL~LPho|$ zZ!tP@KEvH!k3gvkcs>mDYeUD2xEl*?LrVA=T-n>d#q!e{wwi8ORs=r>1S>>cxI&Xt z?F^k8)2K1mu$MKk2xS7zRyH|bPrAuDfTCK!(1BZ#BaoBUAUkh|vK_%S{QVKM(rP4d ze@a)lW#gK`+7DHknkIBP6BqYHNK`k=4=brp$WJRtLY8MGdsF2}ua|UYQT;0BrOr{C zFF;g3J^5J#dwn&3MI~l&TPO$lnwr{ zL$pOY!mmTsuZiXdZg1a?hK`_3{=So=q+EN{C|)Eq2rDBQgDcGC6q2%gk?ePGtH%QuYC&V&^Ht;p_Od-AFaGK5xa7fiFU} zOnaQqzWcMu(@Ruabu048V=Ow|p4hQVnpQgw}o6q9{+$ z?B%O_3>|+UBCKI~!9@*vlS%2VBnJ*Cy^Su_;7k}0p3|&kWTDMez(xp9$5QoNo&(03 zWVq>H=tLM47odzMsSM-`UCbn1$pw;f06&XxT50_{G?~e~iHkw~nDyUBUx`FExBZps z_jM?ZaY+u(Fkz5pVg-&LQ)EKTM%S}o6L+w|B%2z{+Pa(y4R*b@jqU-bI?Z@@- z5yo)quW>8SM;SwK39i{VLCy*uiF~9Qz|(!`UwU!r!K32`dCXvbpXXNnJFv`d=-7{W zjN19Uq4Q(92u|4#hZ9u7TA^qc z0?F|{lLJc^Z*Vz0B!`g{9ixZW4)&G*6s~3Yvi{#wE|v}9G|9`$`p>{%#p+)`7pOnn zWoXsQ1J(bT-oEl5z;$2wKcL>^rM#?caz2Q(v4{k@A_}DVrhEXyvg9c{s=ogr+A)r?u z^Nr4wFCr1P_@j;sN&Ed)BWH-Nf7*nE{0N_sJT?>0Q!y`s#4&cw<`B8dOX)FbbV4GQ z$?Rl_lxx5VNkl9%_n(k>ULc_{FoH+l*mIdcnHcS2LSjVyLKBb@9*is2ubF=4y~y=r z!>orb;%fAh1x&W1iLUWlOS}mihM<|Jidh@$MsfN)4QotEfui_2qC1E*t|-IfMPo=? zr$Sro&SH%0y$0wCz4x;3)!B<;sky(-tk1{O*~tQp(ODLrVuuot5>L?B1~`R zK$T=y-Csd(bQ7V`+Xi4#Z>w>A47Hu`J!+F$gG!Du*(GJ2z%-?u@rt{z!tYhqANO#T z^jB8Wj(E!YVmn7;l=UNHtF&CHye1@brm2D^52oyP4cOn}FU9Z=eRq1JksJruKfi9rI%r3eji= z%2FMov(wWh@}i)|tQ@`rMEn`Gp`#7;rRUU(;1@Tf!!Nq1xkRC5hGq9e3td5l(yX@t zvtFwxZ=)y=C|)bzz9m{5irT3u>M>rFq4NP;ptu4mu9s9GinAD&?Z>Q%*D*;`M{I;c z9Us8j6`KN5FQCenG3JN)jQg8VvRH_x>e>C<_^i;vZ^ml3lKx3!BqRv>CX6#!QjA+P zbR7B=jgW)^IMl!v^*1q9KrEu? zGQGKlWYRAbJS|X-m&QC5{xozqQo_F>&&u?*j=g1#`w|+|m|0wnKFnGOlO#iD1BpZ? zftDv(xT(_pAXT5tfJ_4B+{@y4k0%LxCcZFqB+z7-dLNrY2dDhuEVPqKS`zK#H7t8D zs)i59K*%iUu5_d*lZxPF(mo(zeJIi>iloYkTQ4;sZ0I;c7ReR{f>X|+BAI?fk$6?& zhG>y5Q;{*|-$cfOy0(gPk7@p0Ad=>vje=qRhRzE}g5Z>g#-iZ4)C5AuU9eTdGH+DJ zZ<7>M-F!2e{UDp*2x~;0;9PjKe-~On%g|_D(sJy=!28eg6jFjcdJni=pwt@Cg@G$S zN4r0OlyC{Ir2bnC%WfwHvPS>26lfacDb~o7#^gCD<@t=QaBpHwz~n*8u;+I(`WK8F zgzWx88afWs5O*qx^Es}hII3Y8y*$Fj`8A0n+J<-AZLrFiZo7)FJ*KPlcCF#2DC!avTB}fUsi!0n4{W;e}%{tZ0xAlER9u+GetI(=+qxp5n zOKj-<6|q2t{y>QoS5PS$EpR(J^f`<(c-+g9sLOyPyaba(!(#=?a!yJ;AY2QK3Ro)& zh=dGGPQLYoxLQb6GzX**w;FiG2jz#>LaTIhOc|+D5?Of70jdO5AI~vVEY;w(lF;Vv zsKlf)N>_>TYKrhTZ?0gCR|g!Nh$y@W&k0Db! zEADHUTu2Mw{V$RWH{&E%I^N_tN5f3Wl+HM@2<|JuX&X~S9leat=j`E2v6vgJo<&q| z&(qQBIRz^=Xq8ihS8uW41lPg`v+yUx39^(?qaFy|(Z^%G;88~6(7-J#Hc2okBPK+} z_K*;ha!f%?sMO3pE;|L6a^liM5iZF=syAM7DkmmH6#iOB(u$|(#KhRg#K_c&JpjbS zq|xy@!KIbB5LGxE%emBC%vGrcfRPPZQI@!XsVZ~8+oNyO_sxGE%)_r21m4+Xp zTU(T~UL?{&iF}Y69)+bdNk6Qcr!mWw?O-I zVo86%GW-S)_id&~1y^ghP9!F?`1Y{#Uqrk;{Cl!|gh3G>MV<=rec$kKi%1_V;&u_T zAp>+vMEp4e-eD z67^h!m3YJ&J`ah+)gz?eB;rF5r&9L6&519-z#5J)(YJ>GhQ#neiUcRDrKf4ZDevH6 zADCLZLnagpj?qboQ`^obfPI+$5buTWa^8>7+7M*;4jeHU;WG3hn1uhz=cPNjDNd+ zV2zD3-D*(9YS?9Hh~vXqCfYz_Lo+%_78}-kQlva2ijMw?@1xi7{sX7Q##heU$$0lQ zAKJ4JGry=T^*@q+%Jai29M?l}cVOwZ|qfKOqE~?UUXn0C-x2C!-x1ODH+{VQJL8Gn z?LC9qLkTcRo1%~V7Yx_ruIk!O4-Bw_Nj|U9w|}58mR_I!eR0~|#omn%o$)C7veCcD zjDC=4yA3N@s2MplKVD78$IrULlOKukU*U6g@snfYd_Vas{FQukJZx2GA7jB5DnIQ* z_v8CC#ptzHVV8*Rdnjyw@Cx?uSoO~(A3LK4g!u4D>=#k`?|<%KA5!5TLg8D2qu)OP zBUA+)vGKhiTU}wnNfaSa3s*9cS`hd?nk_5d9v@YVe{x(V_N-=@Byj5XyQg2qP5T zqSMY+&XTTH@K1rzhfpXdp#GbmbHFLOvzKPQdUpIyh3)MP5fj=@E4lIYfPNoBSqr*Q z&qJ{yBBR(Su90;^-v>q@@4D!xOQPF)M~Dxh+y-up0~H-l%r%13?BgFqf2G?0fUVFQ zNzh601f`UyQgvIQMg29~q4}p#Li^Wic0^-!B8h2@6dKiV%x6%}#k8Mp%xGJr+zV~R zhd_S(hfwr;n8|{u3Zw_#NK69OfJ`+zMB*CxjhKEPN8#^7<^TWeJ1DDJW9T+S|G)7& zDAb2&?mfVFP`FXW*#r%*@PE&DP-v4cWky$m7wQ((t0#dXA~iWybFmQG_MZA!-aOYrz9 z#638=fC79O&%Y-ZA1@0e?ps6s1@p5ZDn2V1aN4l#`Id7~=6Q&yi2M&C82(!_u+7oMsukAn;+E@g4!PT!{p}2Ji~nBMk$gFW_Z^eK8VR zY$zWkLx9PnM-Xs{;AKXH3eS~WwYdzBjswjvSm7NoHJ{M-5IMg=QPGkn|31WM=y1d$X@-u^nKO;%G8sBn0C5CbX;-SD z!-_~zpb-(g1@;;0Tomxo79##il(?@c3ixPW(P7_ot`F=0z}(|S5 z{8e-(h&718s3A}jP-uaWLw{zspmywA4dW8qpIbK3JJHCPPhV7_X$pG;@gh>$%hGJo zjbo3q%%6oG_ft8p)i-I!odfc#gA>?>Gy?E8y8TDy*AJ`if^%lv-$M3#9e zG8ZDVOJu%`WnPNRg%F!IGl?m2%V|bhP~pni_yvHk0&~jWCASM z99~N>)^0YVT4_LaFc;NxJ5z9@Bn`LWf?G;xkd_;!al6B% zf?IljZg1Yp3!)?qx6KU3Hn`9Rx{`WJCvJym5u<%ecFc=s_>3u*D=#?9L?3bpxbV3` ztP}c&P)@reSe??P2Ac6I&1WGWlXH;`{nV)jt`P<>gO#^P(|a!>gnZ<_kd=wBzhx7Z zDDSWNw-t`gEFtdP<0h{kYeJtCg?GM-@_i23-(~rScuBhQU%7|Wpe=tBA-w#D=n^k| zZzAuD)g)f=@b3Zl`H&d@0lR@|WA{4Lk0p3~a-ic)^lwMtdVJmCtbJ$0U*eGy-UBC% z+y;rTFJTSZYp1iTKY0y zn_uz_vKslfPVoxuv$hWK#zU>YwNzo#q0fqU@!3MuaC7JkR-PIdZuXsoGS5Y=V8J`A zyEF}o?+uJQs@?#*!N!&kZ~^JtmR!L}-?4UUNY$V#h53K7)||35-#buS=&8F&eGm%I zvjes1j=;4h_&wB~)x`e|cE!KRzGNla#~%teqBJ-;?*BFVyy0`2BF1c*rU@l&nx6e$9Xv4!6l!N9w zllDhA{6~udOR=dm;>(4jNAG#Zp7TET4&kG&yINi@@`vo>cH8+U5ti=41!;Nl@%SJD zwhuka`GNtJjD6AgUIoUKzkmkcIpDnZi2bRCjwOKAKnq0pER@SdsK@IA%a<~o-HYxC zscWEvz)V#Q!h8EMlKl-^C(i`vz{4TigU;jkJeD1D!^Ynj6S2t{-7SR|% zRTn&iW84w3lOZVIrCNw4r3P|3f{Sruip`g0$Vi{YC`a3DrKECFu9F@=(S_IH?@<$W z`$k|KWG{lR!L#hpWh8j}ztDK_-G*hWXa=?d{O zOeOA^F~pV8O-L7L1@}tg?!rpxG~)gxY6|}(9;(r!)IE2hJi7lS(}Ej@w)5$3{2glH z8<`df#Dc6P{3<#Lp6w)=m*b%uiXd6SEmUtIFih=U;9TGdBqI|TZwfrh$ghXN^3Mw5 zy9*>bJ?wr8%f)olM?%BOs5X3{Gm~hL)!X+z`v?I!9sZDfV9`OV?V+##2P?xzAz)P( zL>y(tOJ}IX-tftQ#QXwE$W4M0J_i$apM@us>DV|=Pdj%bJ5>_Z=jx+HgVjtT(gZXV zYGGC~mp@P@VZ-O5>f{f=2R!JjB)=AHOss+X79=DOtKflQ9R?82p^=nU`(-Z+KdDhM z6;Ij-KgY2q+`;9V;?MOZ!%H#c8yJdB&SS<5~YxL=8XI$t>YH zs>aRWx$h}9)Ll2R{|;^Y9 znWpi|1#bQe0=~TbK+A_0@Px_-)v_^L@4T9+|DV_Bs!USR(sX&?ZwOQ(H3^n*HYa z1^gGyP56c8h6YcaslK)u%BiRsO4Xu+|IYe_CKL_POk+_vewCLlq9o!c)-Q}hBKrU{ z*r+1tr)=q`(VJQ-e5Qt$x;j%sqt7(oT~}KvGK_7$(Bz`u{WYa8sHv@}G1WGk#$MMl z&U7)VQ`>z0#ZE%+tYipDxH^fYBuc)e&Ss!U#EOI;-^jQ^A_tIGM+ zy!9HJO!bYGEp;9f*@>yDsj=QvMXiY#%RLXuCvD?*PC;H$PK2WnZa}#5GsuZ>4Z_b6Za|m> zJ#9fahV+Io3*pBI9S9F0tVEa;f}99PA$$p;8R5qWvk-oZFdyM4yo2dOcpkzIg!u?p zBAknG4MHD6GoG?|5iQ455>WTJPiSQzXX6(xGA@t#O z76;k~E7|NwxUN`9Xf-CBJbXwBz0P0;ItFL??U9HH?VzL@r=_M%Hw;^l(xzN;(&Tf- zo6n$(ls_M5>)#_0h!H&qpNrEAoU+SFJLT2VpPpanVwF`RkiS_S2Pglt3OKrb^q_LdA9VrelJF$L$v-Uzj^d*S;pDH{;_xB=m5zRg z?ioF(-sI0rz~>Xn>OH7VRGZcNC8XQpl=Ct0>^S(hz%6m`QK(otaO|-|=T0?VjY3G? z^MDh7xT)wtcs_9AugB*CC;nR80eYX{-$osDYO3+pK~q!HZb>XiH3gHVrlzk*&P}!4 zG&nakyM4%|sa=VQR}N0i29%qcJ~h<@Qe>Gb>wO+rYyrPA_{9~tCcWG=C^t2&J+Ua& zH0X+`hdU_Q8dz&cxP)p-lcgZc@)eT*>T8GiaytjDM=MP0r|!IAv*Y5qeRfV_C0yrpu#tVp9s5U^l#}K7PWm(B zv|xe#eb`0PFbES*mVB-4B@B8wu1OROD+MnfP7_`=UX=uXUm+5YUtixYOl=#KcpG{~ zoX(xcYk_$m*t~?Z<}Z=R-RFSst{=d+dq`sIsJMI!B;QeB^DX+p`rBgtGGHZg$ApCR z6*QZBJ}LQ?p$RL8yqEB&p^5h%N0H};CcivP`NvSC?jD9eP#Z1M(GiIxj1LV;-k72w z^L;7G-lXKaQ8B(P}W?M+*Yb=uqFSwRCzf!`O^~Rv8jnD z_r<9s^t!xc$ayr6D7WO3B)=}8a^EW;{;Q{vJfBXZQtmG#p8qH${@p4`yUb2<-dqG_ z?<*!Yt7j&oaz7tGYv5-M{H%eWHSn_re%8Rx8u(9Wpl3Yix>|()i83Tl?fQcDn$ibp z7bRqdpTqxaH9)tXbUbS0p^R_Q#b43I-xKlSJe#uC!Y}Z$B0I{uc!;e^>{x%FiG^}4 zQ<@?6g0W+xNT>UKI%N7kzKb+cyjKW@sXIG%it^=J0sDdpQsi3MT>5k=4tbxK#-j=? z5wK&ui3PHM&`y3j=zfq6T7sd2K0r-J*ZDk@IJ;>EB<1W9i?pQ2XYupS;PHQocvMb7_j3@d0rde>EFfZ^3OhV3!ogOaaDoWW65&JSs9k|C$_Md^?K{X3`=8If@r z(zuiWZ?3NwjYor&;fhh$Uc{Mjrw+$w^%$<7x8*bbeR9ffP{Q#3dcIEZk@G-A*+FZ@ z2}=L=+6{*B>UB4xKS{|J`jO+$I)SS?{Aq#Pboi^lslIJ0E^yG=FCEXLT*9S2%kgm_ zJs&_qf?`z4SF`NVKSvqfU;ji9uU^NYpakVaC0!@ySSCRKev!@S``gtF!AEaDa|Eup zw`zv>w`cm)!N_QB`Y!GOeg^c@+sQHM4nAh|!; z$}qqapYlZB?y3i143Afu{mz^%8Q*dgTb*s4KTv;5`DD^UG@muGeQk;B7iR-wQlm`_e?$BxKVD zV}Mh=x<$QEO?He0PVzf-dcG8RJpL|0-z(&o9(<|5Z8|yE0yl}Ww868CKm2wUN98>K zb;d_a$*&JE`u=zU945(c)9Jqo_=x`G$|^y>Ue_+q3EZob|6SnJ?%w-NjGMd}p`i&k>g2pk;5$XRvR$fy6aVrVyb|<`jE*`%-=m|y2{^Uy zPSL(npDP8u*U$6U@<6#;;Om7vV+Fn&c)WH$8w}&&3kJZq1E>0$boD(1obf0UQjOke^9Ty7RB=}2zQVrY~XI|7i0RLx!$Ft|J1%Lhc zWy6hoJUL5&lbow{^;#xyqZp5*J!}|&&raZ^=jHdCSUuC(Uq$&q@afjs=QoT#Re4_6 zC)^i1=$Gn9o-RRufxyiIx9P^m*}$n>n$1CA{H4jXXdQ?8TWC2(&C&$2?~>>7a2p9aAH%5d~+ zF&?pZm%wY=0Q7$YPWnj^`pFjMekS;o3xK`5gtUXeN&a3jv66Z_c@)RnL_119JPA0B zM?Ipyqq*7P5cEAdK0Zd@cYg|VWyfydBjeoHe<1jHb>%7*O}=JdOI1}yh2nBe&ntF0 z>?NfxmxA}sJ=L|%K2MX&SMRE*Yi#f|gQBw0RbAIO&t2!L^ffj$yWB0U3bufF>pVVB zWyYil*%RUuxvFX#YF+N8Cig;@rvY#OD^*Q+E!|bwQeVFiSu`;hD19-ct~rj(DxZSD zI=0#_aDdcn2LcMP2 zQE<&1A5CG~3u4oYFGbnKrLK(H<|cPWHh$`awjg+$8oe3W*@~;saoN;dhs%Xc8ZNu5 z|8@}CMF2%lqYW#rf*JW}W8UEWI{#N0O`fU@m#ez9)rHLm&5aG%&fr_$$4po%~t5JPt7YUbB)i);%zC~;wLpE8ZSSyU_RfI;%e}; z`mk#Q1C?t|X~}Grt`oP6U0(?^!n2R3H78mnAQ?uKfQtE%1y zom>~Al#EQY23SuNJ%E`OS&%iyU0FE`#zz~Prn;M|o7~=-0_1mARaK!~s`L1HoyYuSY&CS%cp_F(MBcZa+IX^}U5+S-_Bi{lQ`x;xkFd9MS%FM{jfFl@C zP_?nC_B!-ocU=kF;UWbkQR8LGx1tQB{P^yiLtAyQv&iQuD6X%MsYOPnm6etybcww+ z4d{)~IWF)+Cv7u=sGrv50cw1l?c zAhb(sjAvRCNFh<%l3JNFgZA)DBIn-%?N-)0omC}P7}uN`lY~aCna#B{G|cqE z64yZOOWl-OK8|jFdfUTq7oiorb?ypJL47^iGL8Y*ON*d3Io82_(MX5ZC#MDduzgB# zZIaq0rq!_>4F0TN7lkyib7LD`UY*C?M9LvK<4VbP+zIbS z#KQV8-ok%hC!4&lOa8Pz1Se5j-B5rrD9aUNMY0$5^GMm4GcnQq;X@$mTwA2^S^g-t_bfnDflUc_zC@~)7!)r2| z)8!qgPsj61{e19MI+Ms<9Pf@8jl~(jb8fWTRIC? zQ&|wNo6MQ<6WC2?ItITVFWsaj58DP>5T_f*ZJkNvxcbJLs6&TgMEkX_wKB=bG+FwM zr171UHM82|V>?ZY$xd8`l9_ zv*)$c)>XzT+sQp+!-7~FS6nk27GPS2JND+5da~HOJgkpc#56XKrm@sTy$kz{*~$h2 zd$i>=OCYes_#%ym!WHxOr<8-X+b5C^{-u>Z%`U#Q2jy6Reo zjoL~^^TK+cdmchx6Ax?T6~5%*$*68<$zV-%KECL|Vm0pO8YQE0VFPmV(AUIMq{T8a z5pf}{$y4X14C2aL=TkD6R2jI;sBT2mhcziBgO)}?)W|F@!&4&`Lu)F*M8;551;!!v z;TRVr#_cI%#@9(X4|#oc1u_yd5&?XfxbFJe3NUH(QRzHc$-tyc!7^e!c_OiZ{BH*I zd>fCR@eU0?OXW#;#WN4K6<$JF(+#(Y2dIvk?a}W_#Xc-=lBBSNY z_hMz3CLX9zxx`B5Ps24GHk`y;mM`DSlc9XC79{MzYd$dtJtm=dTxEXw{+(RfqwfQnIfZ;rSC%jH%lbEn{8I%(`QD%m z<$J=EpYrJQw*sRo%I6*Oy=WPpgf#6zb<(Khgy8QAzFd3FzDJglV=NHuFm+wEy5U&fw9QykIM&y^(l|dqkJNay2hVh9PQP&7m)UE7I@?n)N{< zlkah^zmH;l_QqrVzR<@=r+e_;Oik(Wf2{X@P#+5H3af2hkZ-yhu}^0(>q zuh-uJdWh$ja!LVYJ{cc^%!JAM%jd-wk>4ZX#Gi}b<`<(Sp}=)f#z)u0jIu_^-y;-oD$ofyrTo(WQum5izWOX< Oqa4O_TaV7!W0z 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�HSR>yeA0UPo4>de4A0&-SmVgvF8P8 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

WUT!e7&yWkt) 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 Dqw1kQ literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA1.so b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA1.so new file mode 100755 index 0000000000000000000000000000000000000000..beafe0faa13956b9af205bfca287bd736fc23493 GIT binary patch literal 57392 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

QSq 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 J^V@7b|1U^5Q?UR5 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.so b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.so new file mode 100755 index 0000000000000000000000000000000000000000..99923a9af2dce962606a0dd3e81bce031c9f5268 GIT binary patch literal 65696 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 D5BP$p literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.so b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.so new file mode 100755 index 0000000000000000000000000000000000000000..c82816e39470e0eab4709d65f4a264b9964d1379 GIT binary patch literal 61656 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.so b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.so new file mode 100755 index 0000000000000000000000000000000000000000..34717de42dc9fbdbd7bc8c7ec62b91fb5bb86fee GIT binary patch literal 69960 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc new file mode 100755 index 0000000000..5096b7434b --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc @@ -0,0 +1,25 @@ +FaustHOABeamHCardio2Mono2 : UGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, order(1.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, order, output_gain, azimuth, elevation) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, order(1.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, order, output_gain, azimuth, elevation) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + name { ^"FaustHOABeamHCardio2Mono2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.so b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.so new file mode 100755 index 0000000000000000000000000000000000000000..eefe9a270a5191d0f5c0a5267aa7192d5c1a22ef GIT binary patch literal 61712 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 Np*R~YN6okQ{~HLh+|vL6 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc new file mode 100755 index 0000000000..c9775b3a62 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc @@ -0,0 +1,25 @@ +FaustHOABeamHCardio2Mono3 : UGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, order(1.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, order, output_gain, azimuth, elevation) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, order(1.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, order, output_gain, azimuth, elevation) + } + + checkInputs { + if (rate == 'audio', { + 16.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + name { ^"FaustHOABeamHCardio2Mono3" } +} + diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.so b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.so new file mode 100755 index 0000000000000000000000000000000000000000..70590d11f82b59bb278810ad5ad2da58d8dad610 GIT binary patch literal 61712 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 Z_(_*iA@M5f|K;!Uva!JX<80CU{|~BYJ|h4C literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAConverter1.sc b/source/HOAUGens/sc/Classes/HOAConverter1.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAConverter1.so b/source/HOAUGens/sc/Classes/HOAConverter1.so new file mode 100755 index 0000000000000000000000000000000000000000..146d12d8fbbba70ed1c761d27dd6f0e42c62969c GIT binary patch literal 57312 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAConverter2.sc b/source/HOAUGens/sc/Classes/HOAConverter2.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAConverter2.so b/source/HOAUGens/sc/Classes/HOAConverter2.so new file mode 100755 index 0000000000000000000000000000000000000000..de83b4e46e399409605f218eea6af9f946d647ec GIT binary patch literal 65504 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

%u%xK3$a0I#-tej^&^JZh-FX(Vq@X(&KjMFMsDr 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 z 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 IIhpnU2k=HIJ^%m! literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAConverter3.sc b/source/HOAUGens/sc/Classes/HOAConverter3.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAConverter3.so b/source/HOAUGens/sc/Classes/HOAConverter3.so new file mode 100755 index 0000000000000000000000000000000000000000..8b837657ded13a3d02a79868d8bffc25bfd44226 GIT binary patch literal 73696 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 ALI3~& literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAConverter4.sc b/source/HOAUGens/sc/Classes/HOAConverter4.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAConverter4.so b/source/HOAUGens/sc/Classes/HOAConverter4.so new file mode 100755 index 0000000000000000000000000000000000000000..15de3835f50658bc8faccbcb0acd0b3e15cae2e1 GIT binary patch literal 81888 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

}{BZmdX^N1_i;zvLX`hHtEK2tFM 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 In9Sw>FGUWWUH||9 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAConverter5.sc b/source/HOAUGens/sc/Classes/HOAConverter5.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAConverter5.so b/source/HOAUGens/sc/Classes/HOAConverter5.so new file mode 100755 index 0000000000000000000000000000000000000000..81e8280f89a92ffbe625395f96f7f20a93ec443f GIT binary patch literal 90080 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 J?4tMozW}taXJ7yT literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.sc b/source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.sc new file mode 100755 index 0000000000..3db96d53bb --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.sc @@ -0,0 +1,30 @@ +FaustHOADecBinauralLebedev501 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, inputs_gain, outputs_gain) + } + + *kr { | in1, in2, in3, in4, inputs_gain(0.0), outputs_gain(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, inputs_gain, outputs_gain) + } + + checkInputs { + if (rate == 'audio', { + 4.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(2, rate) + } + + name { ^"FaustHOADecBinauralLebedev501" } +} + diff --git a/source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.so b/source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.so new file mode 100755 index 0000000000000000000000000000000000000000..e47613461252072bedc82b72db353632d0baf989 GIT binary patch literal 151752 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

E-6s(jR2$c`xe^ZF^dJxw*FV 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 QMFX20GaWdEcUrceD@&Et; literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev263.sc b/source/HOAUGens/sc/Classes/HOADecLebedev263.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev263.so b/source/HOAUGens/sc/Classes/HOADecLebedev263.so new file mode 100755 index 0000000000000000000000000000000000000000..efc27ddf61f6fd5cafb9453dcfc6f4e7d5953b9a GIT binary patch literal 86104 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev501.sc b/source/HOAUGens/sc/Classes/HOADecLebedev501.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev501.so b/source/HOAUGens/sc/Classes/HOADecLebedev501.so new file mode 100755 index 0000000000000000000000000000000000000000..849608e6126f1ef99482021282f514b0de15cdc5 GIT binary patch literal 81952 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 D$8m_x literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev505.sc b/source/HOAUGens/sc/Classes/HOADecLebedev505.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev505.so b/source/HOAUGens/sc/Classes/HOADecLebedev505.so new file mode 100755 index 0000000000000000000000000000000000000000..54a7668cb964d3a6b30e2f129a445f60a70b7f64 GIT binary patch literal 135264 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 BMH2u3 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike4.sc b/source/HOAUGens/sc/Classes/HOAEncEigenMike4.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike4.so b/source/HOAUGens/sc/Classes/HOAEncEigenMike4.so new file mode 100755 index 0000000000000000000000000000000000000000..4f7e5924440b1afad58c4d62955cb21ff6d501fc GIT binary patch literal 86048 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev061.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev061.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev061.so b/source/HOAUGens/sc/Classes/HOAEncLebedev061.so new file mode 100755 index 0000000000000000000000000000000000000000..711bd0fb90e6b08674c178f5564d3d0a526c85d2 GIT binary patch literal 57376 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 YRx%V>^;%?j@5SqL@%~meX~@bWZzeK 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev261.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev261.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev261.so b/source/HOAUGens/sc/Classes/HOAEncLebedev261.so new file mode 100755 index 0000000000000000000000000000000000000000..b2ecdb91a4ba084326fe6802807df11c0c39ebc6 GIT binary patch literal 65568 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev262.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev262.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev262.so b/source/HOAUGens/sc/Classes/HOAEncLebedev262.so new file mode 100755 index 0000000000000000000000000000000000000000..ba1c1865a8c5c03cf153590747e9e5ec6cfadede GIT binary patch literal 69664 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev263.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev263.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev263.so b/source/HOAUGens/sc/Classes/HOAEncLebedev263.so new file mode 100755 index 0000000000000000000000000000000000000000..8935ad09389ea519a030a59cdbcbaaa47254f057 GIT binary patch literal 73760 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 B(_a7p literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev501.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev501.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev501.so b/source/HOAUGens/sc/Classes/HOAEncLebedev501.so new file mode 100755 index 0000000000000000000000000000000000000000..3b2128af2eb3db95d8781f2e8702c60ca1ce1104 GIT binary patch literal 65512 zcmeFa3w%`7)i!6x3)E zU>u^UQj1F8QpJ{9TB$F!NU27-MT!;iQmR(ddYj=Q5v`)4^M9VT_nDj-5_@^y{=eV% z{d#n=_kQ-;Yp=c5zMp+Iw`O@~4v330tY@Hcslia^1cjvQh@@lM11H@`H3s4D8OCU# zb@WD^;M>1VL6&P6ZULCbN%(EvEkU?$@mOvXBk`=(u9a>8FhaS{F_x}7%I(obvD^fS zHH>(;{B`O0Sl6TJESI!=a^LZl(ZBt137+7_Qy@GMR|So$kS-#+#=gpN>B!kSzy9=M zYGqrlE{>FKBzO$OZ`KuajdNx`u+4M6^T>@q_|?U2yWT!Lb?yFEW-$Z5bMT{HPR7rX z?nyt>-E5@CrQiO2?N}B3@tZ1e>QmX%=~i)k81wj?JLWS?y8P+JJ&T&iM#%r zdmc2>XOBH4Ir03V%bQ;yFFr~5ormA~_>IT!0{pBeS$i&oI~l)=@SB3)#rRFbk52}E z)A6HxGx6hN;&&N-m*ba%-<9~~;&&B(v+(X`*5!X_8pBE!7atF z48L;xD)74wzbgEy@vFn{di;F&Sx+N8i}AYwzZ>zp1;1PIYsT;Jf>%0%r`Ls6-}XrG zjID78@BPM(lLy}1(|Xn!PgeY8OVUHPo&3pFWob#fCXX&~%xc^A_2KKj_PgBcCtlll z@cZGX?hT)_Z_>vX{QCP3Kblpv;=pHTztOWPAzZfil?R_+vE;@bf4+J6Hx~YM#H8z| zCA;Uo`AAh!XWYS;=H9pHz>7zQ=PVlVvyn?K?V9%dy$`MV^WAN6*BUb%{)L;~P5tuS zzx`x(T;h&be)&ZE2g7%q{?=*#{oqUA|Iq~-zV4dl{l&pMe_ph#bj5+ThXXH#9~d;? z%JyrnslV*?l$n>kFegy@aMjvVpR5=)|Gq`PIcLkXQSpb~+4I1!KYpb6x#r^+RWB;< zSY~|k>Avu{FFRvmaMp~Ewru(Bbu+SFKD7T^lkez!^U)^d&@uO zXxD!4_jV7xZT^DCF8kimqZ9u2*3r;x$2BVs{OS7q(dRunhSmHlpMj{^6;`Fwl*z*l zw-J{_*U<-D*TKIinq zr?Vfs{Hh;49PCH_IsM?D^uzx^Kl1GE2QTY~|H=L6`2Ys5zV!K7Km0TM(OaVM8EWih z=Z^=)k>@A)d!{keaJ8$j9!8D%s3*jG?pF8_=#kH3;6uDl;}-qx81RS}->K-vD#v&k z?fTosC}Zz#w;(XLJQbQxaSWdxjz@X^N^O)rR8M1<@0^P zha1V7kELgq){iSj&eOE~Yh(Cdq4kp+qn{5j@1Q*C8b>kZ;dn^AXQc{Ta>k*&)Mx4* zw?s6nXd@ew4$|j7tbjDg$EQK`Fv@6((f=h{es_%gN3?!AV&uPG>tT%6gC!^Dk)qF- za*cwbh#Nmsax7DhaVp$XjA2I8qZ-gop_V6E%VX8IUuwKV<6|`a3%Wk+{hk6W{bXu= z8d@GmAkS@D{;^tqi~di#T{N##bXwiUUv$2mG5J;qpHW74O#T0%w)d}`*W11G6`>{1w;(X}*8PaWS8GLoEd4y%<3xqehkShgh9BvZb-q@+cuki#U6C{(#O`rEL~5EW9mtf=Hu3Upk8_QXgs7~k#h_C2xlY^NrRlBudAZiJOY8YDO@IAx)jxD@Qb4iBbF>{d z#>n5Q<>`J<5uS!}^7)o7Z+eXWf3E9i`dx}{nKsPF&;#3Vht_kFiZ*s@`IEK$P>Vd@ z(s+-q=T?3GE$rnozF{Q4;MSDNxmVM>H6IjTo=>zq-7)RuUJy{8&03yjO+QGNw^Q>0 zTX}v1`o8Qq7WLs2)>}OuaW2p29c}kmdo}C&Q>^)0_4W=FkbF9eCAo3IIOX1=?b50B z47T$8LG*B%ksG52He1SR#Mq@t>mga&#mYBL+c7uB?g3pt4Xqz!Cr=?f9ABDsyRgQW z-8x@)OuqlE^=YhA>2Fq!@jG3vo*4SATAt<@c}~^x_r&x|XAf58?f98uJWJQlbgSOR z*zp;yx7hmA1G`9l*y9#PtF@d)QPHC6+M1#UUrD{MsK_X)tf}-FMGN5=McH$5ipt9C z%NJEP_{!_&VvY@J5#q}LiRN7QR1|?OMH-Yf7#YM9f+vo4YVC1-Z|^V#3_)i^|GNt4iw2vvL>aUS66vLGYA`Giqym z^|e(qY8z`HO-gcYU3m?JnO@tJ1u~{Rf#xF8n6>qlHz93F)mM>DBI&&HdS7MfR}!X{ zR@F9?lhfk9vYb*31cX>3-R>H zn)&w@_#aA=f+SZoR%b!GH-0tu2_)_1KE0%VQGH2Wg_WpZfvghrmEa<6)|3eimDP1s z<#X%GN>C+o^NOT^k?0E-!0u(`Wijz7lXd!xs;b)35?^iK72`yzuc#U)68BplBJx|}v6sNBwyQs1TeQ!-^IqESz5U(GO6DC`vv&$RGeRCVi>$BMtE-Wc6 z@4rY^ni*B)CH4K2p-6cpY=0u`Vq<1WV}q}#ro72lRLYbZ$V3BE<&AB2nG-DLC&Z-a zn3x_sk|Gwj=ugmTB*lp_{id0O{<=o#r{;!g$UbM@iN@;Ngqg`Acv)3$pIyCb<@~jcBuJ(q$Gfzof&{$bj7H#ERjE?<~Pp}M~jRCyBDm0O!J0g{JXDDM* zA+aT}+27_ZDy^-%5i_@)tShOk&;FNk%9~V_W!0wtIU`;9@_ea9vlpOL<>lG`O7SCt zKspKtJtY_Al~j~eNPsgWYoMa)X0=__mg5&9`bMZSvq+8c_hY8Rn8 zm)FF%BD4;bLn<9Rx8{aQgfN&iRzo92i<+8>>d?MwIdk{jShP4f zs%G@g$}uO$Tpdlds$93kf3~HgUgtnLbyXa?s;i;IYNM*Qq>LF}{?BV-QazR%Wm#bI zuce=8Oa9O2PCH;-Q@N-nYxd=N6N`+>hK4#6%<$DV)R;np-N?SwQqaG|=AwGc z73vp*$-gc}2}%L=ij~-KCL~81LV3+1Uqwtym}te;Hu{Qc7Z%l*)GR75T3GD^gPS15 zoV+~Wh1Df>|5_i3t}&($w8jD5Yi4CJkL>>+@|br8>M@77k_DBEQ&QLnxWFy)-B?$S z{%T>ZNRr2;u83rL^3*6kCtJID*35NIcEpz#>3}6^R46*%2`NQIi>oX9&ijNxl&a|q zjNyrLHT1{w#L0p%?Gw)HbFKvuPMEQjdKL)Kg>Dj2T52j!!mbd9$a_D4H;S!uUxMf6By&ccL*PKR;u7 zc2Uas3l*53k8~5qPe_RlYECLvZJP{`a|4Dk0OtrCIA1XUf2}hU3=cw>|HUKbB%B=} z-AR!!eN1yQ-tNTxU-%z&K)D~1y(YtOBb_cS)LvT_(tT^!Y6l|J5> zZoMZX&UfOL{E0UD$u{~V8*c3lGdk6V>#bf%WxX#Xf4(!c_*?HMVsY#JRxF-tuH75Ziy&a*4lv%-dZEfDT%8$QW~ueIU1HhjGeFSOwsZTJiu z-f6?f+wd+MUTeem+Hm{%p8YmF$wuF8!<%e)(1y>p;XO8dfek-q!y9e5q4%9>$9x-} zV8it*Fo|{9@Fh0-L>r!N!`(JK)rKe8@M0UDY{MID_{M(lz0bRa3Z0Z;r%$)h&$aO} zZ8*GF=UFK0$+zJ*Ss>hE8=h>#D{Q!aMJ};*HrzTZ#)u{xo@L|HY{Sp9;VW$T zOdH-|!!Nhtt8MsF8@|?tr`YiIHr!{!J8k%-HoVJ*pKHVS+VJaa_==dH z=qqjXK^tCT!}r_x*zq14{lzx=V>bLU8*V)3mJr(o&&OF$g^j-*Pq5MRY@YRW+34-K z%SK;e5yLfY^maVaMqh5DZ?e(bakq{BY8!o$4KKCf$u@kf4PRm7Z^u(@^q1J^({1=d z8*bWg(}t(p_&3||TpNCY4bQjXcr_P!ifuS19FeEahF>2+agNJ|54GVPHay3MueRaC zZTMOnevS=aZ^Q9QGxBV-;nfio^BfyK)rNQ4@G=`7wBg^i;XO9|DjR;xhEK5JNiVo1 z#Cm>~4Nu&waJq)iY2^I)9-G-lR!%Z7L*oNoY z@F6xl--Zvf;l(!Gn&U9K!iJw>qp!2!U$fy&HhiQFZ?@s1Z1@TreyR=cu;KQ3$Z8w@ zbsPO!8(v_;*W2)K*zk=u+&VMD=*>3#G#h=V4Y%HzGrG%$TW4*E@3rCIB%q)DHvC%_ z2)EmYf5(OgZTJ~ByvK&SZTK-8{%sp>==#jMcBTzau;CsX?y})yYX7wN_alQY+|8}5}wU4yS&g^317xAySh+^gr_sirWb0K@Wl*M4WT*-Phgl$ zEmSPwa~Wn63*}1qOorLCLg^AdjbS#aP_l$iVVGTI$SvW)46|v4ToN9@@Nk9=34aC^ z@${Av>iH7Dn4=84819zv0ft8~yjQ}1WtdGb)G6Ut8D^6UZItjnhS}6YYbCs!VK%W) zhlHPDm`y9xEa5E-v+0EDB>Wh|T-t<+CHx4(Y$~B#2|vg%n?fjE!uK=Gsvb&~@ZAh^ z=@oKI_zs3yWkT)R)7R%yMxYLbL=tG|Bl&mZ200)sD5`M4XfYD*M_?nI?u>7jBB^Cmi6*L z`fo`3NvEjvUo!pEUk)_=J?7KFX=dC`^Mx;ciC|WsnGIFUlnk-_n$w>Bq1!MT&oNul zE_AqZ}=V z+{nMo48)HiZ2B`ji7B06^avP*b19FrwT7KTVAPN9C+|sXnMKPpF0;L6g6T)5d8wv< zM#WL*xKsSO;5Ok5dM2sFseN_0p1RH19^$&l$V{Ys|W{19i}Y;lisJ( zo@U-`7%83M*=}!O*o%Nb{6stmGXpb5oBsDfaabra!dFrJjVjf*tW;2jLo%I_5AWTG zeUkm1>3=hvn`;K3url*Pr9NjHKXgJr>b~aMjKYj-GrqG;*}Y}S=y+$_0@N38;QUYS zgINAuDTlrO0|(EMdY>_6`^_n^e-aE4G+TDWwKOFRXapjbH3PXW@00@>{zIEN>G8b~ z-iHKBpNBZxgx8GxPzmc|2apfMN=qu9?4T%tiaJycGms7jL1)`|!7d5E476A|90Qy zP;ri=opc4A_OwAuwS7Ws(B+6eVD$>HFb?hm^%;uVt*HOB1XX&rTe`!P!v`;78(#b#L&Lb*YP)a(q~pbka2a!ylj6sV{XPAZ~LRHq-bWh9qK{@ z@&7y@MP@dCsp$X4QuQc1 zFw69|*Cw(gC@S1-2`p~->)BHdfv)ilP*h|GuFTC2Ty2{ER?lW>yT~@Z!o0-cK}OED zS1_KLfdLDhN1i1Khi@}59c`)AQ>Xkc`kRzLk^W}ochkQ@`IG2Zm27%4{i_v@-k{a9 zR{7KEU$6Wk&PL_WCB9kt^XczY{$l#Ol)r-hy~tU7SZu ziGMIxoJaBrg0xPNx&(c!Sez{t66y1#oBpL9F=Ue>OJqC-hh(qc>v1!Evx;y_3RDUe zOwz#)6-?H_)hd|EVBqc*8eK~i{d$r&a25J?Raw1(0*ooyiAS9-NBd38b&e@HUr4X46twk z6wZsDI~kdniQWK;l+x)%Jp9Z90P+}tzovhcXCqmi(F{v~*D7f)Xgd4wJB;7QkZt7c zjG$EjytdGp^j8ufVw^-aj;6GxMhm8UpDd%X3UM*}!FlP|G4Wcz3HWh{_ zh+?uwS|REF8FBR6<9>d3>4^hnm-I&z(7vyObbH!`Rr%RDYoVsC~$I;PN*$Qa2@ zneUj6nd5Pb23Thd)Ga7@H`6O^B>*{^;mm)YkWzw+L|M+Hr;$vRDp4V*CZOzM`C2^* zWY2=8!o#dP$w3*@O{Ub4!8j-gd49@dK2K6_K1o8A|2YVrW#mdvr!M)kBvNWgR;;#q zT#8kgQA(Yuj6%9HPqHY5{tcckyK0sA=^$K~;Y<>>> zd=;(o$YnIjwlLF~^fyFr@Fc2erM-M5LjH%K5nC#z#foXtE9Cq!SUsL|(Qn4#NNhCuB*=jM( z^yD*Ut0!5-xR#>Cna;wkR=F}g#RwOqeO=}DG`Ky3-%jCL!7R7&53x*79scfMa3}vf z%|8-Ev7khy+ycjTyaWQU9acpD%t7L)bG|ADTer|kyFx4IlF~6H>eL9&ZD`tm0l_Y^ zepgJUlE7rjMuiwal!6>p%m;-%COm>li&)W6-}#IKk6j>eZS{0BQi|Q9e9+L^2qty} zqouGLh?c@+RLN*5hfBK!T8F(%*&QjSs`tv@#cl!8#WxWa0Kky-lLD{R|-! zEWwjLhx}+WM`;!I2bBBOi1152=Fu!?{^!EvXDXQ#In$#m04hTv&CI{W$lNj=!!TIk z4(g-HmatV-6Dr5)N~>Xv6QygWK9DsnS_q34I4)s+2EXFVO|;i}Nv) zaivXAypBhJu@-Y$5k-9ybs|ib7(ENOArDnKpfeYW!zwTpV=F3YDv78{$cT!EO72qQ zC0N6rs*xA2k?~Ac6w-Uy_7T)=f7p$ZUHpn|(!TDI{R?$IEI>{c?fWXnm103WF7uLM7cY-&RV0r< zpe87j!!mbaU z-}(J5iPn0rr86G(!L%v=X>-c4#v=%vl8w!m5cl%1@6C-k=gM0U08ebZT!D?3d9quv z8J02w_+K_&e%{87mtl~_3{2qM%)};8G1{6LsK+96liq}>$NF}Yr%vIC^fxI#mfV~4 zCQN-2{VNonOn-;+W4*pfZ^G1L0l!Ia!ql7euU9m=^lw!DeEK&le=+@?%3nc$m-3@1 z=pdE9iT?fKe~ij!uv-OLffx*`V22L&s34~uj6J4;Yjw~N4L!!riLnVPxKRgPD#-aD zV-r=dQwQBD*rkI>D!5k%lT~oP4yLMLw+^POU{D8573|T$TopW~gZV1R&dm(O?zjYG zZ-wF&E3yQTc?0&X7H=SWZv~cCq%LygE{kldkVl=0NR$XzUIpDc*sOv{I=DgwlXb8| z1ygl!wF;(75F?ox(0fLD??rZaxbY&pIgy>0s}k(HFV0F?FL2|9J0oiMWvGYU-k}O? zzTEY;+I%^JKpVFrFy%+S&N~ms?z;Hbcs7Yd*5(U3;R@`vpvUIE3$|bEn=gfwm-&ns z=i&a#dNS?ZevLP*4uagNad7wP; z9I6Hi38G|Kp*bjFntO#&i^vY)F#`FD z09eJYAPJcD7H73)fr4V)$^s*r`$DVK3ZHum*7|;};)ezZHW&b3iAcMiTtr(*M<^j8 zUzSKPQUkFp{e&v%c~Wpes8qIDxaPkA(v@nthhb=4WUolJL)7ZEQ>A}~@5l2eJCa5VfA&&4+;`QhlOk$N> zRtb+G0_xpECd#@7jLP|iY`>_bcLE?1jJ}-_yP=JBGTEWxTqKu5o5Bj!NlKZ3P_JZ( ztSQc<5Y#IhD_CJgB(!bNfcrs_k37&d>ng#GvkfvEMta%QP-&8M-ahOnK|Hm{Pu5_} z-i^{jD&@cw`b8yjt`<^RJDrhI=^@8Uq*!Ndy(ra~n&53traqC%ByuK#4aoD4Mk-yd zqD*?FR|WYxvD$nA<+$6Kg>450rL5ux?JDU^BSmc?k8#WSR~4cHoS4*yO%8}lhS)Dj z7STly%eZAR(Uzi4rzli=IkqjiCLJ>eJ2>FQMy{06%m_Aq6N1<(`U>EBTLl|9Wo_J0 zQHt+~WTLiiBz1+PW?@;b)l7_Xs7;zG?BUR!;Nw{)3Q=1vq+GAEZ?(2!^kM)d#p@AN z3y`BWvaNB*L$|g@EkSG>F>BO{oyc0D$uE@62W#<bw(l znX-+8(LnsE@;6=nnzXKcQ%3XOstYcwQ;_uT&TLhyEY!!y4i45Qpv%W!Eac%UX69UY z>OC3E`my*xQ0>V;s-)+UFV@g?aImG&%u*m;@6=$0l6I~tQ16z_2nBG_74Jc^`JHI- zvcIzv9#!xT(FXQk*1`j8kBGmG`8d8P0e^69ReMZW0KKRXy)nbNiAYXkIG$o0q|qBQ z(&dYo$4DjxU#)x)eZ9uML zIaJ)6Q18W1YVdM7x>X$ZMVc&|sYFjP!qQvX)0*rvDX*lQNhr%%@H8bnCeTBgYFjU~ zT0^o`wO3VPaQ!1>gT^f5M@pm`tXMBuOpbPoI*3Z{TBVvdgw{I<&O+?M8d5ZuV{ego z3WiN%hG>M^O;av-potW|Lj7Tr13?o(9FkypxSxb2c{h163W`LO3;w4OQ}7H20SdfI zw{z$g&7)w{9OfzeT|kP-DN;cDPK~ldUpqC4tf04mOJ6%Rs_kM2!HqnujhljD&wodx z#J~!TB(VmfZXFd_u_4gsPK}3hLOR*0ndpHRYiYJQ(J(jekxP@1>6uKhjb^ci*BPTNj8&n?=5seqJLP>?(Qz_WP z0gNi^B$u1XMF?dB2s)H5hnqg^SYSTsK%A~opBGXvHeT2H=P(tNgZEw}TFP!7xh5-1 zqcbTc@B0+*f_+E^5hvPEJwYsgb+@%N$M<6 zZ%eK8)j|MJ`b*(a$SzwpX1cM~_gEViJ& zJmD06!3>P_gr0t%yF5`FHU2kx_jb5d!_y;jQgd2x!5_onr;<<$OuysQ8*onrfl2O-!s_{b7 z!6wEQ{=w#q=^wReF;9VEIfeswZ(=JWfoDXo!3jHSJ?4J{gkhZ0$pcZAaj+|Te`zz+ zX4uXIa=%G!G#%&pvzJl2{HVicCJvvq&q^?-^zbNJg0pqYK(46ku`sv8JOud z1A|TfhdERJkmKK-HS$h5ZOdOQ+KhFg&R=KEp!L_f1!);h? z!p|jVlCzcPxST8Y;V+K`;I%)-HKeqqsftPCOK#z5kD~90tdo?Q8MMd|mh$vBgxHM)=* zP4wkZhd+Ih$L>t(5S7O3->o(0D=-7dou;SIiNRaIlQjf>Um7*mj-0bwZl=ceL3ug; zFGBl}NALb7YQw!!>BayKJ&qHx>YP^2*blOA`&6ucmq{kKeM&bc#Y&Cz<{w>0bXaGcM>$%xMcZehsQDn+sJgf_|*_-13Ff z^y7WDbNR2R?3ORUU+jyT()J`F|8?fh_zRH50q5gTv7D7L{ci;SvJbMiU=|mL<`H`R zxX5d^+?r(gvb}*?w7L3(?7+3C;77evJ~W*(Uu5NJyBNZI$70L*bE@FhZ^6UjJ6Dz< z!oQ!@=4$vX`TXyD{qF^LATQLKZ2!xlDb#u7e5={c9j5jr=_&hy9WRh*7iv;ERg(@+ zF8X4x|I6Scl-LZQm^cZT9vX|BE&fQKinMbgX`wm{^+=18PoH`H9|v*EHfj@0fRlyp z(A~-|8P3N~S}`M8Oc1(7ux1p)06u8NjNH&pfzqM19&_w|-5=Z~El+v?=gLwjEHn>) zAd=feC|hjXXau)GVCbrC4>AgEz#ml) zRYN-)38flAXKZkxcCk(-j$OVMii01-trS;k_y~zqVf2Qq^rI|#h!Oe-+=E{e1#JsH zAnu#N7vZ9QTK&76dQ3nkWBSvI>o7dY$kncvtGjS~PjW*v{6X!vjRQDbfUbf=!3-Bk zxIp2whA8eJ~^2JGu_iZ5~um9cPFc`6|v+;%O z_N>qJknpVTz<#IB!3L@m!JzReY9f2eE@x{JGRzLtqBFk1jppfaF2i+_hH%Vozr_{Y z^1M`p)@dHq=N`ki4ZZDyr$V#aZ$%RsmXd?&xfyAVl#hd}{=kZdMKp?*-9FQ0PT7UJ zH=bzws8c~{wof{bj{nVIP@&@#I##3m6nefw8#TIBQ0y_lfNYydDf`S_=p#-+w$e7y zWtr{z_$Q1?y5Jw5qc9i?%_ngk!v%{PE63B|jC(?i(|#RnwMxCN@Fy!O8q@UGB`oxt z7|5}VVvcCK==Rh})1CM?A-n0#?x;wAlZ}Rs9$=y; zxBw-=+59oE?DQP}J2`a+r>?(!jv`_3hk5SP2UTqchmb6Mb${l4D zZm&{(qzh&UKkNrYTSa)l7>ZUKgBN+x7`xJ4^_7b%cBYT?(I!F*kD=X!54sUNe+_9!YNf&&8tk8Dyqpid^rAKw-(6pLOO-Xe*Ek*N4MlcWF z3#v2IcJt6GieQ7h$J0%wF*$S+UISa>N3VS*K>B~HeeQxD`moP@z!CfW0@`4E;WgE? z&ovSmvCju4?Zc15V4v?jYqO7(G-98#8Pz`OO_0MruhW5jx)mClCFrXf-7RRVycnR> z>Xg;$_=%RbS^}-=)>d=D4ZhQ*tX8M2R)zZ~X#>XXOi%P#mQ!ia#&9|1cy^6qxhL7$ z*vx1{CIN~@kMlI-kw_jfU7rx4burGeV^V0Rj4W1vSC4Z1TkUr>vg^ZsXNnZMzdH=Q z(0;=J(tc-2WW;`*Gi~kbgv$SCMMnaaUjUH;bZ%>x2JSb zp`s36E?m_%nfU~DF2=E0K(j>`$b?&JaN^DMC(tqr{kbF216Ea*mhVhIwVdV=3DA<5 zFRhb`BzEgaC-~@SM1n{WZxEtLCzvGjg5Gwv8v^!krs21~ocap$DQ- zw?Ypqz5`H~nA>25eyC`_&>TKelC4+hujqjG4MAHyxw>AhWeKHT(TBbUR9Js-3`XrM z*7b_i!4J1n3+ipC`9yVzuc84h+I(`s1)Rv#*0XYu&}#ZBu~aK2lN?b+m=8(wL29o@ ztUihc8;OY1tsEbKAwg&>zL&MWC$if6?I=tC^(baM{a5PIEM(e8dp`wmq#k_%t+2g+ zk)Z0)*CaAhk6NJjjLi-d0rluF+idkn${MLhiy75EYL2p2nYLCkRo*_TQlX1AdYVFS zRA`$<;}t5w_DQ#E^nJxwqrac7YQcVmHY*PIYT9QMdJ>7+Cw)(&8;I&v2$vk2D{;I` zFGqO!D3>F)wMQn_9&Lv+uy#AC##)5%TWBmoX0bUnUJzIW+rR4| zI?YzZOFMA3rLuqB)rmE&*3V(vIt>#(S*IP3hknSM`vv6?ROu(vb6hJ3yLyOizIiKm zJi)-ePQ!G5vsB$`tkW=-wR|zqxx5aD=w~_gL)O$!2T*T2Ml8(GvIEuWXd;--&%y!+ z<3BL0{k?JB&en72r*^+ZPkY)UGti6t0;*E$M8;H~4!&Gkg0KISqpa<%o;v6P9R}CC z-u88#jZ{th5*+FIk`<~6K|buHWLnY;0JV#b!6g>l4Cim=jifkamEF$X3;{A?AQ?;K zIi8VRvVb2uc}f5lJK>eSX)ipC+fM)w;=1V#9tkP)lK@r{Zfb$@>!(zVWYV(T<(={# zmZLusl!Btp)RC)d@y^yUA7D$O8PTEB;mdA0j!iQ4*^YDhOPuqy9LGM^`IxApBcyhn zZI59>Mj{?wz*drz|hNS5=f+Bb-+UlIYpRpm?1wb|u#QxJjRUq$_kk>ggB%AB;9&gD~z#RhATf2E|t7L$Ld=ipgZ|B&AN#reLp zbmx;_1iuGC+BzkPFE!KOjjg;YhmqM{9GBjTuH_N%ZQbV^BDA9*h<^tX7d8G)QXKq) z8eeHJk?s;G3sO+Boc2a2WAFf)6R)FyWKVhJhDp;`j6>I>$TM1wpW(%cK$1`2nTdCz zH>6pGNZA*v30wPn>?ad4HiOJac{T-aF5VB06$L6j2OrV5_7B zKQc0GPLl{M84w}g{l7bmGHz1+P;oyGZ;s{;i#^gc73JlAf??%Z+ z-7Jpke9iXwbhCZp4w;(c{sWMQbCYE;fkZgKjH(z0?{7$sj#DJ5I&jAhRn&;~vKO)k z9g?Nm#k5@xaQ>+f^0w{V7mayOv<0of2z~TL#IES|$97x$#Gm3TS2fx=+uxyI_v?`k z9j7Jjy*cYWd)TO6ojnaZ&8QyS^mpNX06I`~+Gg9c&bHC?w5NGthTxSbskJX2CC|4% z>Xm00{JnBa6ggz7kNhDA2auR7weWok$7?+(&)t|l;0g?9o1dQcw5?Mi&r@6aktc*s z-_p;^@b}82^zxPRSRGw5B(>CW2Wp_G<2HIw^O=1*vgc^rYnNZ~g)TIO*A?wQgugf6 ze^3uS>;$Z#*AM})%OarCL!Af$JuFg!Y`O%3{N{;%^l;nZUU{nF@0I5t&;u*gM!P(n z60ks3Pg*G>>&X&&+S5Fg=bZlJDLL3HPY(S5v^;fod78C63RLneAx3%X>1j_}bur}m z0lFAnZ)FB2`{EA*#Js3&1=^2HzRa;ft9>oCwXcf4+Luh2-v7Hz%r*()^bXa3JJbXV z+gn~AGa(Xis)OD?9S%ZlHflbEz+MD`&vZkVnD;P%7n!!n(u&7b3^`;+#>RS}d`%UZ zEa@K1*?Q;SFj>k&bf^_RHBQM&K=gFeZ9PjSd0ihk!s!y!0Mnd#IdB9VJ`lP8D_?cIi6GHO$?`*dgjVD%{2yC?P3!1J=b7bYj z{A~2@rXQm}Dk;v-uGqP}B~m^w%NM2F zY@O#ZB>%fcb=fk05Pm7=eej^1-II{es;vg=av`aXQB)?vQ2lZTAB~E?{V=S%us@tP%uB|ExNu{IG4-$D(U6!;Vdl5 zmKQ>@C|f3qcoAC;(c-z3cu|e<`Cn3W-5A*&^)|*$5*1_1>1>SmBPNu}#)!2#m-$@v zg@X?<0XLgl)oKk>2}UyP#@NA`3D$;bQhU_S2-lii6o)>3pJI%9;tDq#+?Et|z1Bbs zZ_dZFj1`IjH%&r&NQrE_bhe)a$1z*1Vu>)XT#i#%?iJI;Yjd0uf>gmBqI9(*zq)y;r9n6yT7$|WZfg)aEqCQva1dZL$0kLFTL zE{3gWb2Xb{vLRJyHp>NBnpj;v3Ho}OBuhFRmM4>R8xxmi(nKbt3f-qw-3)DFvgn31 z=k+qmm9(uM#*$Yt!>U+2s6@ zBo6#Y8(Jx*V{<||E40o7y$oH#03Q*Mo0|b8T#_)W0uD|j3Y~YH;%ZJf4kp&i=;hR* z^^Rj<*y&(Eae9NwK;^{IFg1@0&CwcT_mgh6e_eyoQ@KPVW zksV1x$3BY)hA(|ZWg^?dy(~L4OU8?xICiS#?#dry?>4jsK<_?RvS=mxb!F%;(#RpcbO_N0Izok5tD6BU?{tVG zc~8I+Ob*VeI>b>XbRERh*jgzet%GSz=)a+19U(RqvoT^JbfqJxR+)l^eiK#NPHjh- zsfS+ViY6kB>U2~tuF$1Xah;lSDnk8UV%oHa2EkuiK zbu~VGaJ|lOBg-41O%&Qpb+D+1c2#poXImY%_2in~KGSvol!EGXQXi~zsZ7T|eWqJ) zPq)#YA8+WDYkH#wbTH}Nt-DSVM-8MX?p!-dskfFWzxWa?`Nuw!0!Q@*;+sepl~->@ z1MDnwSr;sp^U0Eb?6wn@e95r;C((JSj5Z0%+6Q~P?A(Tu8~=!|G)0e%qV+OF1{=UY zZUDBE)!E7JA(@wC{upi>?PL>4Hil&9Dzeb$+I?8Nm%<9x{yB!X(ADgu;ErWmgL@16 zdAL0~e7X+btm&T8?lc`gf_*0FeLC#b;XAdPEKQ5^2LF!W5=xejeN)UdLO*+jDR+dv zP03_t0g3`rd(9cECHN?r!!m#t;h?i9l;?8_tgTNtqWk*;PHn* zo)4cUf1L&24R!~gI{3RtCOe6K4QK~0_6QeO^uE82y+8VY8a7*ICB)gjKlxt>yJGl7 zhXb>4zsU##r)iooc;Y)<*Oj=&nc%g!S;Td<>qBSJ3!reR^EUtE@_{wJ(CReX%|z3G zB`U$Nu^Db;J0cx#UUDf*I(F6)EO{tO4E?9+e}~@2`>>+L30uWGS9tfD5B9{jJH4{} z?w_P@|9kX*PhYrS`y_lDgu^*F>2al-HGa~QaCkSie8SW|%2epJ(dc&+ikCii+9HMi zG#dTn4B?9xKz3Tqp*9*_tT;48qfH9EIU2oHp-ZDtzsl{VXmp1{mqeopiUS$hO1wg$ z_eY~66nbAYdb;BKKs0*0LRUwl_xFkZQ1N{%n)V?@`-^BaU!f&%Z1S#A9AacxrqFw% zIgki8ULTGAT%o^-Mi~U{rasXxz7-_{#RqLyG;Jz~fNqOMcLBWy@biofMBTS8mpa?} zA9?d&3%7hZ;TxST-2+;JacH9HM$4D+QDOfLZX5N&j$N}73_PH1rHfNsa{I_EeAzo< zR^qmfz^rKczt>)3}%vLV0;QcEkh!2WY ztgKrR+oNLDT5YSoA8E^4oz~zyEO5WtyV$DlN7|y+ifh!YFmV57%{ftsw{+^XZk4u6 z$0n)Ry*f5o#qQU!sSHA#bVb!oIBv5MkA+qLX5ojg zz`S^Uiwb9bxoN*D314LguX{kV+m1S z+wC)ZnI4h2??p$-HN?su`*o!K-Xq*_psuIs){$x}mu&y{?xq%-i5j@GYtV}S_yyIF zP*sCOZGC-1H4AA#XkH7!D@1UQ4LbndhNG&38}v#SY_gQ06WR8ANA+hg?N{GX4FX&x z02{J5LEwMuo@z*}tj{h`49Xi3{zTbVTK6R>3+7rX`1jsb&78e`-csG)&D1QyGA1k3 z7gO^NqS(u*RlK^(h-T8QTbl`A7^!*^F(5l!>vAKowr*#NG#2*2!l#AT9N}i{NEKtB z%-rUv8?~i+;KLd6XMcbzs?|N#kz1X{*{`c^wQf~a*Bg`8(~M*u-jB4-x*tj1WsP>N z&dkH3E`Sq+tq-2E=nIk7d72fD-dTAfH(6s7OE`2WJd<}H6^sev1SQ~1UT;$12&vF^ z^r`El4oVJ5lCD#wD~q|VdZ$X#jU?)=i@taREOFTg{-(=cQ~u^sW%iqqG*fk>i0wio zTuld3+(5!UR+1JYT#&|pH3~sqj)Z$_aFq&k_}8wh9;M5QW`^#S!^OYny6WF0LS$S4 za!fSD&RK+}_8mWC99rU6+={f82}Bhel@E7`@ZOThb=B46fvb>}iyL=2o3Jru52hHf z^FrQVd0q7dc8Su)D%t

#9Hdx@4)ZNJ^LTqB5upd*qUyUegh+LmX~hDR4Y%OQ^3% zqH<8Wrx?@sb=7MaWhpW3zZ8q!>#E17XxnwwEs9s~b=5a1V5^)mMi2fbyI!*Vm#(We zmBMk4&VDhr?Yin;ohqdmGgb>ZEKzbs9nOUc3dOMhlk2Lpg+DY}0i9c=uwR0tG~L%F zNND5*jvJA_uS<|RRY78}tKN-|Z;{bIb6xcrln|PgOOSBB7k+hJwe4bR4yKSMZ3t=6 za&Wg0l-VsZxQ3N8Q@OneeF}PrW`*NrAjsBPm(N9ASFIZz@2QrAPHG{W~?qdD)`DPt7YD%??IAYxX&xApTk*v+F*?EkGit@4vC7r zBZ(Fpc0(je-3AwZJGC^OLnJ}=Y+-n*K&jD{I?7c_bzSwCizMV4woBZCb*dNPU26F> zS0|F7e^)&SZ+?<1tzjE1B+yt6bGC3CC_6HBUG*<1wO&kX#F zUx9(4TD;Z3zo*td>%#s-D1V>Q}KJF<0*G&E@{;FIqkzjijJSX z+V}{aCqf6!3^MW0@&$6!aV^v1=iyqWsR)<|j70$3L5-K91iAR9ys{D27dtghi(Kur zYX*iHY)9#TcaAqR;i4yD5Iomy_?}?_6ewHwWBuhnhuY$TU7xF+7 z2&D3Fyi)U8gIEf4m6kxu^lK(Mt50E+zQg#3k@%gd%8>VG_sVBdzDF(j4sPInnEV@s zfm_|UB|)F+xj(?lb_xFBGrZz>(>MH@&IH$Cq23ay-@9x&c#B8{%@ddZUpNs0d5XcGC zB7m<%-h(ahMHjDnP@hcb_X0Ushc3?4fu#N=xpe(raJUzR89xf994&UP7 z9pO*z5Y!D6S|G9t2;R_Su9Zb4v_fYUc)f><^99+^`K4 z%WZ__#wZ)N&sI=m%qxRE^r4UdO1eS>7eK*84gUyqxhL48A}w zuD03A9If|L>Tb9%=H`*Ry86zs{%kkeo6fxLHRSK}TJ7D+f0dLhHvgIv@-OVo|0*kg z?p@=bPE-XCT@1Ll4~gnOP;XGRar+k3k8?=4GOhJxv~O?V7VICM&40-gJv;7~`j{G- z0EzHD^;mp?dkJoeO2pWL;H4&RUIpsrxzUZ`OCaBA$n!ju3N^SZ zWuMKUxG!z&7v^oKH@E=c4S2w}`Q~dB>8mN7Hd3>_C_%;pR>>*(iN051w&1nPXg&xP z?=b_FN#4NqZuEO7y_Cc+7vRXhj9}TvA5;UW6}IUU|0*W3kGk|}GXP%t#EZGmkKsfw z`s+FT-jq_{TC!wk>zO=@f{$0(`F#{T)CPfCj^PmgHWDQ{m&ohJ5Nu_niR?}KMs{qn7DC^=Y$g2Q}g@q22o z|BIZ!t+@Or?8`t$kJj^Q_LM*4f*85`=eZnzFnjEN+~Ou$-Uko0ymS~Ybi*|Z&nUiN zz?^Zf6Ykr?nDR@|;GQrH)cjkEP;z$QK*W`+6-iV6{``O)yLf@6(CqXb)_gTP$V z#3ex4ew6o5_&Rp+8ybNyfie;quCtan}g3+R?Cmnf7Dq3jbIL_}VJL!VdHd zUi_QQX;PMU>szNA5u|}~y*ScV$E$<#k&svW74yI{ql&5AT%H=Gr_Sr|HskjDMqnJ2 zZ$%HCgfk9DC`-%dFdq7D=km22S6e=ZSvxfkJ#1CKKYzX$H%C`qpJOsVv4|%D5D6B!^*z~jMI^*u<9m!oXMx?Jb(Lz zoWR4;e5T|_Jl4Rt{dVRKW%eE@`jv)qz5bwemZ)_Q#-rd55EJ?W0xs-;h$B5K=CBk8 zLZ<_=zSnC{^E;q~l_;`&pN=DuNx1ln=MS5NF|XIcdkiIszK23I0SyI5Ni8V^NkEZ= z&O_1JAAk>da12k;Y}{gC9{O#TQc;`a@dC9CE4iuFy3iDkq&&Z7wX)C_n~K*WDYX&W zCS=GtrDA-0=UkEinD16laxlFebxSJNsT5mMry(~7UN>@ z#L*PqvWjtF8|3(^C%3Y^zP{Y;EibLD_LUnmOBx$|?&&2Bm8I^is`Bdc8lT%+xuCwJ z{zhW~QC{k?-~!%PU?h)Ewqv~Qp|ZBdNGcucj^^r~keo8nU^?D>Mps=4(huq6C{pV# zAfGWS*BceXYiMd3%8glbvm-LvGZ7(EAfz3%q$I|RZ>)=lv_!FRZ|<=%R_@;N1>oUc zR9{)v;4Y~tbKg*on~Qu6lB+!j5hs?5U7Q=MYwXG)sRc!gVWE}?d36=#^_8V1Rc^DS zzPh#sR&pb?7|qTlB7w!g%6-=CjGQdPy0ax>o?f6ge=n@yzM;}r;Vy3~EwA&@;=Od1 zM5-F);1ZaKWqOH3j0vzyFJuW~T_<2&CZOwMUge@1lx}uyqpz}NQG{iKz_uD`2P~FX zHu~xsVUFu+Y8My{z8kB`jk4)RV@)M0R7qux%Hf(Z4cA^g*l^>SRbEqGUn2Q5R92PO zl$N{4j~_o+)%2nUUp*wa_~M4f1@NlGF;OLTb>%f>R+|$|2z&SJIqvH6>e~7n-6d63 zwWY|Tw#L1%1euhLbNc{S)|A$lqmiMAzKU`;{8i`sDyz$_WDS)!m4iqk8_MfZLU*lL zph1bAU4xQdpbG3RtthFfDX(%@S2jS;r4@r&I6gwvaIqU%v#pOo=F|o}5fZJli~At4 z$|apaL>)yrMWwYh&`4vc&t214RpqX!^|=?9R8?Av7=s*(it1_`+(|c7RF+n_D;wNn zZfYFsz7)l&Y&ic?7A|RQOst_Rz%>nxb>;P?wN+qPUe608U@jJBMr~tNnPf)Q`O2jz z=Pyz=tgUxf*OoO_mAhHx+zab#tKAD}Q-mb-0w|x_M!ix-wo2FQ=J_tHE~(4DBF}eG zQBi4AQ%Xw81bf-DOY?jwDNuHOk*~g_($|n(nw3|AKUrCMlZx_u6RXM_8nWRfieOzy zWqtPLi~^LEWn5U+P-je-n{7F6pH698`|ib8PJLL1 zh5dcspSD^&-=DVb%Rxh$?rEF$uy+6UWmdxd9KKDS5JLF<3G~w#E<50I{f3= zQ=i+jCk<1Y>4xEcI_~s=m+-AIm9+;`#nJE|UlI-Gm5;d5-A_YmB1aO0t;sc=Wb^}?M9w-BxuZWY`zxJ%(Kg}V~&9=L1Zz72N+ z+~aV!!X1fO@o~80;0}Eq`hzvQekzNdWqIOmnr*~2x#CVAIw*k$K0H82H}W~yt5B{EAY*I;4cB+2s~DvL%`Sffybk~Yx}@Q17F<-J`s3FAGjCziav0jC2H;i zUkbblILr}wsGn89>wupgL6x32X!=-vZrAj&`0Kzcz$X^}2zYTH_)rk$10NfcuLn5g ziN&V^XL-lO(9Z!*ea7Ndz-g~oycPIf;BX=j^{@s&R}9WN$$#RZ6ZkSF$QbTw88Gn1 z0mD(*@h~0xk7V=*C)gi&QXe?`7dLR6@QOU-!~Q0*51jpv3pkp6#5*J2cP8!*a7fs{p>3sFZs^l`giFdk^9_gCEsmJBHS1 zMUv@OxyOOUcJRx6CmcQv^_u)v4#*guxNKnNaCb}mfTqF26QL_4xMB#RsmG5%pZ;z* z%uO4uM|1G-gjqwb8=l|+G!g=@Mf^&}U&Z=0AZy$3gxU0E4u&sti1c|=L6^Tc9G(w7 zGT%E{j`o4GhPzkBL)c|3N6SgGhUX5P8#h?w&#=iqi{cn%__cyh9md}WU5d{M`YbD<{I3WLNbOd>dP5~Sp&n%puN&wY*uQ!V)}x^qKQ{-%;Y#Kw^~hvBg3(Zq z=3CW>k%lo5KhB4afqoeQ(6`h6D_PEEw10~Ob{nv0coG0800gLnw6_oGazo+pEL~r} zQtsRV8)1c+C#ZYIkb*w(45e4TPJ1>?}!`lT%T1UYseh%^5NHoa;=UBzYh`Ui(hZsMqM5-@NTq>J{tE7RSLr( z-#z%{{wN&207i=6_Yd&xOc$W9wYw z)j`DXAMDsL*ZBS5i{alg%&}>%ad22J{GYiT+vgg4N08>hk&fHv8ZVA~H4cFTiH>!1 zjR(HrXW$p39j}9G^g#IE|CZy8D~t_p$E#Nx9cMb$%r!ng^NzTOt~8$ZIKG@~+~Je6zwX@cXveB<6pjtBCMw5kwWrGu z$Z%wa1JZ8IWL~XVl;?#k=DubobNTB`%Jb7%l&xnL^Lompv>n;Z@zrd~^U!6Kh3A5AOVvr|D7U;=2cVHt%+e zYwfLB)$lYGZFK5*YyD)!|Lx0gElGN`V3;<_vsdSjrKmje-7tLC-c1VE+IXyWhaCDu zm`hf9_PWKf+6QkXF2bN8u=pXmDcxOR7H_Z98FtKE;ads2#GbE}RUlFb#vI90o6Yj?7CXKHtz zb{A@Qv38ef_g?M(M7!=6qV+Rt#*B;INplzAWnZIv()fwvlh2>rD4~>FQYMd2o;ZHu zScUUc#pLA4$y55&uN@qSUZTtDC~Oe}@lwlbr#2XEZlL<-9PA+c1C4mYYRC4dfri7d z+Cwycl3}%@Xnc@iwZ~{Y!LZtGG=6fVzlz2O8y&iSMB_t@jat9a_)w#>PkfkR^?%Xy z!;Q7NUyR0`#`eeUi1H6KTt?UCzVH#o>reNEpJG`3tUY$1@wG_*8jX)Mx^%xAjgK<+ z_KBZr^ws_b;$MhLf8K3pA^w5v1^4!af5V8ar%W)=IL%0oslN)hMh%A4!|E4rd=R$6 zmdo)d4!wA6xi}6Dz(2{dH^yG%OxzVSFB`A%*!fzf@b8t=Y6f|NpQz`XG#_jJhoC&% zyNokVv=={W?yFo63;k(Es@9J+?rhMw8G}Ei@$?w{dEhK>_k4Kpa1WBtv&fgYRiCYK zu|GW@MnoLy=l-Wvdh74!f}f~=#`jgOLC7f1_=b@bBj;Hnz=`c*ve2Jcue_R1Z2igC zcx-(u7yQKfTm$^u#wcU+9=8-}wfx1u7z6xF=*NAx0xbPM0sItAV|U)x^y!-38t;c- zU?(3J4T{IAj&p#Y0=&*txV$TXm+!E?jeo$jbCbf0m1A@Xy$;x%&o%$#yA%j9&KGw)qePlM?Dq2 zwJQb|{cPZ;7$^3(`I^31=Q~#C%XdC~mFvGWy|GRaT6@deHNNrxEAHw-B)O_^DS{D_ z%|^2zD@Z?NHF>b??wN6V(1+QX>D}qgrq7o81Y~%WmJQQ|F$0 z?z!ild#dW38tzy8&3`a_|M?JK;PmGq(&#@4IL+e;3VubwFm-V>{Fr6k$msKOv&Ovq4)C;o|H}A#JTBP@?!yAiFwJ=NS-@!>?Xf+V z`+)-B#OE&0FN@FG(C|2g@c3y>Ckg*K)5#d~atrVWlIYfPOa%3N)zF_J!_TwaWPZN_ zIPt&F{OfnlpxYLFgU$;KKVZ1fp}($0{q8Y+k^dgUuN&~c0G=lQ|7bY&h4bOy=v|O5 z5G>K(H|QJ(oaQ~t^Dgp#nDMWEH*DTvG7AhJFdgB)D)=nt6O8{gz|;7=IR$Ah)95@4IE~9P=JzL>&M|BMt&FB1>+}uAKVUn6mb%@$?)Ch!v4gL-E$t<%7z^F7=HD8AszkB8i!9o@zUsA0X$9qKbnI7F(A|Ymfy*Q9q{iFz=UaO!A)<~c!QqF|X!&Vk$K->c-9!#6^5Jk=Uaf|U!uGYAdUALk9U_bZfJbiTOP0U``amWY#5@W z@Ow>vbq?^fe$N3;<6SiPA5Fpk#uWG~fD`}Q#(e!)k$qm|bqY1mUvvFS2Y69A1Y_GZ6U>F&~*d1Vb9MM=F*W=v(xV=$M>Bbh2$5cy)=D< zi>t<{*V{pp*qH)mFoCKz*YeH4LY13oss59sra1QyqxcfgG7?ekQu2!~Q3)SI(gCN=@0Fq3_s*8C&BFd~aYE3YI#(_Sn+N zHKmY3p-Re(PN&#@i1`#{q^RQh3T8N*?(lf!aocyBwoUuMnyQ^#S}PL4+S%oZcw^`(b?A zYt;`r-$9FGR>XnC3*|MH@AO-)YW4z%^$a`#A0SSks_V!7)Khh!o)8{P87iO#5}DF0$53ke0@2-!S7 zW2wBIw_!J?^0Vssoy$nqaJp5Us3QCjM`?{#ax$HFn_RL$88*&OE}gI3EQGtg$x!BEc>+v!O(Av1osbro zs#Pif26ZXS!AYH}+#HE7QaF*}<~k+t%+t;?!s2Xn%H?J?2aVfYpJ$cL<%b1E0P16Qile+VSBxgjD%U##;534lTAI@U>23@jDy&jYxMRQ8Evyh?+K+s(in_lVueN0o7qC*Q^Rdch>w^|Wif8jNL1-O&(h9K z3aJ$uJ3jW1%c2+KRetw5U$iV?UXYhq#4b3iCR9xpX2O;g;I#~0T9-8cwR7v3D9SZ+ zwmKJc*oEQMfT#*~1}=8)rdLd?J#($+AZ09(A~`UI5i(F?8^H=Tcr7mjWtufevuH^x z11y7{wydeTq^}ITOOx8r^_)gHkLD)8lxo$;Y7<^`BIY%@sp?Uu>St~~wy&gF@iTX? z6|>N=Mlo%%ZLS}J+?+q1UaguOEXm~VnV$FI%^=6Lm|`PRXMUaxDwdnd%rp-x+)W}T$o(_54RR#$rhpSFetRu~$!m-T zlS&@f+j;C@UB|~>ai*>}6Salqubmn20C#dBa=+P;hx-b9h`SwfL${{vd)2I}R3}Xm z4QbNckgGcEyr;!^{|+d-KBjTde%*Mo(^g<|3Ubrz9SN;|LDkzA6eU`ZMNZCk?ObFj z^wh?7|Ad;(M;kDuIXnGe$o@=19o}18YbA5g)O{&*LjGU3g$3+fxW^lkgA(M%_jlwq z>AODghzkqixp%!*r+%CJ7{lf#wta1rBA@Mlc>|oE#ZX~&jGJJjrWY&Kd1WC-zurr% zPIH;$l)BivlXY?!&p!Nw04@I%<4YeGfb^g)V>{6#OOaPrXE+?dxf|uRtwR!w{oh8jil7JD2)`kf?J=;6}{G_GPvi!-020*7V5wc>$V)>qZzK<>W^%_20n+6XXvxGGi+OSW2cXnVIBD46;UIN z#wQBbe7EaR13nsb1IyMt+c>ma9!>*1_OWbw+6g32tBdWn`T1tM0U~mSuIe!L`g1P| z9OF(<6AK@GhBV~(sX7`GF=7F9HM>r)QwI?*px(pFmJOH2!jr)snTzmI@B8|t_sn?p zjF_0PNW7cW4>4RSd5QCYo z4HfE_NJ)EnKeY%L(U$%t&Q5BHj|GY@2-}$`t2m=rRcSBrcu~y_g#QSSscfL8*jIr| z+@92Xj7R*_f8n3OIzLy&Mlgx*lUm|!rGIHJZoAl^4Q=ET^XOtRY0Taa>|BKvShADB6Qa?nCD^@bGV>)~p|EYgzFY%F5e?%@2 zGK$$hy*7=vmpDqPA2bGF%I`I!y~JBe{VoxY6|?`J;Tm2A>orJd5|?@HEjkc{ ze+L)v3OH&n@$uL1u>J4RmROYaA@PvExWo2;G}=o%=pMJgC%F~u6Q&HV4P0Pq*xtU3G_{>A>%@=EJ}l@tr*O}v+l7qkEW0^eS9 AZ2$lO literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev502.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev502.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev502.so b/source/HOAUGens/sc/Classes/HOAEncLebedev502.so new file mode 100755 index 0000000000000000000000000000000000000000..4a4baa5ba23ca4b6cbcdbc70e06680660075a9d0 GIT binary patch literal 61416 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev503.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev503.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev503.so b/source/HOAUGens/sc/Classes/HOAEncLebedev503.so new file mode 100755 index 0000000000000000000000000000000000000000..10af03d407ef7a9525d78f408a531806dc6adda1 GIT binary patch literal 65512 zcmdSC4O~@K_CI`8NHXPK8*S+QHeDK=)WDa*!T<$5*riCcz$idKVL~9d7?vgmq_-C^wGUHBnl4BN*1G*_@8Y86+ zM-)>2Ht6!MsYlb9DQUUoeBmqQ{*pgS_JlNw3SqNSm33T;dY0-M`?18O3nyxMC$meM zHny4S=1AKHfJZO<#$P?zv9<3==ayx^Dk|D>M(ViNjQ!`IyW=~G7>nP}@uOW%#V@g`xfUJ3XO!tWRO4aRQ>eu?;TOTv$#G!nl{@f(HT75H6=Un+iM z@XNq26F+X_@XL}thvO=wUi`B0y9U2&@yo?;5`L5M%frvyrs$m;kltj1NQ>~BYRi{k zzZAbR{HAHV0_iXDyIJQek7rgEvbp_9dlyOoV??i%59S$p1%8?{ju58d;V_Y635E}Z@+Rw zj~g9hQ-A&Z+AoujfBBE!PV5o4_Psy;sr8%KHD`Z*){bEOo)>&pp2{ysKov?v|$l+rp3b?pZtGCqRDJX7>mV_Dl>jteH7KVod=yLMfHT ztDgPobvHdc{qwV4EpHj}$n3^#FRXp#^ZRGdi*52&|MLAk6*IrN?4@=Av#g54k7l6Q`>_R0VDLS*Nd0jS9m zV;zpuyQy;ZNpSWncQ^FKC&4f1-97(F{kq5RI<0&BFZcNTm=Q1BijMs7dQqwIySi_zgWSJ-y;2)qpzcegD*CHcy-)~0~_%U4#?Pe zyy5mP`Y-ux-{_V++$vi+_zOJ;Y-}cqriXcD`y2|8Pm$K&)MqRh5^tWx#nZqfm!O4(?$Oa(Qx`J zO~+58Qp=Hbs-i!j^&bsAxLu+3Y3!oUer=xvUHI3DJqJ1(yTrpS+74^A9pFCM2EriJ zvwfM$-=*<0ke=@7=ZJew13D?t`m}Y4=Z)I_?N2JgIhy{Dn*M;MkJtD-tm&d2NTy8aM5B zmA3z8PS~+MuM)==%_p%7pIc-cj&&4i`xI&VY#l!?9Y3br^R(UCyZGw}?8bh*Sld5A z^Z7IU;&PnnNZjJqh)N!Wo}};4^o_doW#HY}e-IQn9e(N1$0KcS#~0dPUG3bc?bFf4 zK6lG;6LFiS1g^bArFZD|x^;WOR<^&1{%1LIy6AroN~vd2jiNK{-=OW>ru}H*qqW_Z zYkJe30UcK{+71vW+Y}vFIl7@k1}l8AZdX^oZ$vTmY3!oUUv#^2bh}J_R%v~9cG2ey zt$&WzKVFG-T+~PLPyC$%#-l#B0w~Pmm-|JPH;-RwTK}{z{o)PKyBueo5D$*R!s#=r zs|xFU#kIb|LPudmRfW${I1P!TFl$nFVQE=y+4PD!Us>&>?6H;ARb`Wkr&gA!vhGU? zOB#yFpt!Q)HV{sjSvXO17+YCfS65c&D4cTj@Y1@P%Sx(e)YSXRGD|CRa;D`bLHd-d zhfU79thB78vbeS^GiO@PRVBH@1Wy_#HdFQNrYs%Idl@a+=wl$Wg_mrDN)SzUnF}l{2k7 znxqjR8e3jga`V5WybP44Qn{5CaE4+#4O_RYDL>NSf2&Fos$5+^BNNu0_2b-!ku<`6 zOmXe>+TxmWv(iZwGF#AHh0C;ClZMq*%&4g>n_N>`jF8C5EtCdY#lxq<@1

UCNU# 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev505.sc b/source/HOAUGens/sc/Classes/HOAEncLebedev505.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev505.so b/source/HOAUGens/sc/Classes/HOAEncLebedev505.so new file mode 100755 index 0000000000000000000000000000000000000000..92c88cdb414653a86c3d26701caebe691a74f39f GIT binary patch literal 77800 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 z zdz|v#5VoX6lrol3^;Kez#TBeI6-+cXP!w5`_G6N1tTa#~Fw(~W9ltf2+8>epAPMwl zCTjby1P`wyCD20&XdBtmLmX2~iMoA_mgs#`D4|c)IPHehKY%FhdLrso_*gmZiQ8lY zS&6~gSY{hcxotvWoV3G`mIq3d&KA+h0)`pWu~A2b@3u=g)FhO2*(DwQOS4G{{X)huv zua^7I9Q*oM0m1hiYT+Up@QZHc@$+=wPS9h3giK1;3$o}ntHpt`vw>wGe_D>{4cVdT z38RY_%nFn!DOxH!G@a~p*gG_gAhd?;u$^S^435wk{H26v3GK#6k@Bajg>XrrfSPR% zq%z=hygu`o2n?Dkmhd5w1253W{YjB@2dn0I3(*`_@)j%!q>`j4kSzy(J+S1!#{&!q z1-QePDhaDvZRW=~Djap8YVw)Tbc_ClS*H+$uAlNxFCEr_@=wJ441U7TqdKfB76efgMvB_6j~>334Uq(nMVt zsZrVsq8>p|B%_OQ^b)qe=u=3?d4vk_8T)Pw_*9)Dyj+KJFo{!M#&$0QM11rTWQ$3Y zlzEk?0z(^iV9cdk7A|2>fE(>Q5^09=kW`ogeH#PJOWea*g%%XO&r*bM0gVnmoD^{n z&)^wVH%f*lRuo8=c6S?7Y_xMQ_^niG#Dm6MVOC_ea>8@i@Kf5qDCh&SSt~aKU=P(S zRS4CxmBC0{Vj+1C%ag8F9%w1sN6WuNHd;8@DP${IsY@!21J0iBXP|=m73qNuC@aiC z3nY3(xCw=#wUX`P_WgL4Xb!33Si}Torc}@Iz+R<*+Dv5RtapQB518~rhxV@yx7|t$ zZqgkcik~V4@MKDv>Mh*L*7Vw$Vu|!q+yJSi1v|B^>|mAB;#wmjCxFgXbO`-8YqrsF zFO8;Qb0A+;%?Z?s5#nZ^=&0CB6&(wwIee4j;7JC=d*0rANi`88Pm&lfL@%4O7mJ1` z-zqsSl{$Ni^tKc#iy%~Jb3nQ~AScTd;ex15@4*fYAPtZa949PVh$$f$rs)Cl1NvJx z^=AC$F;3WGuMb!28C@(+CoSxayjuXTN=*_4hs~$O^rIx zjG`P2ZH{Hv&opu*8f^b{iD(H1>d+x7Vn;g&b~GttN8Aqkp)JsArDz4KtQQ^7nUSXP zw-SF3QGt)BfZmTT?$4lj$#j&@&`)FNOH_(Ipy(^441p7TrQPK9E2%VkV;kiOvDib> zz#57c*F;(BR60XNA>2hv2S4868Wds}nEO+*SSydwV-N9ND@{X;pyELW3TS8p>R9)(Pyzodu&hff>6&%(G2N>G8SCiynE&-*7Q*@|` zkg=skjVY2Y5QD)H7MrzEay<5sRBBb@Zt5ZCYiDIKUys&CdSz2Oq>XT`M+uN-eFC99 zX-3XQjZfiI0E}IX$r&b*Si&B9IGD9V9PPJPTFrnZDf>FuHlmOkB(2KB4o5+WHc>oP zB|-6I@(po(0>71ppJt09)`JiGKmy8!c=CJj3So^HU~_DlzNB%i0e%=9(ZX5^L4A6+ zP%>5zNq5rqJK|j@Nh^UF+p6(MJxoh{NjWM_xN_8FQ^dUN5`H=KOHK5iFO+nWqqf8g zRMUn=9DI#YS@EwrxCDhmUuJN;b1QC>H!rtsBGKv)U+fV3;=~yaXF5OL)a8Z=M=4lI z)wsyv+)kG|_y-Q&n1KJ&!RgO9eYwGyDjw219DH{|G(O-kk(q^t`n?WuV*>GA4)H`rn-Z^bKucniB_=Ez)!^`R z8~02^B4f*tfrw-U&i^rskd%snh}C;^aFP6(DsC>q`6E@)v}uxh(g`XWL-0hEgfs8; zh76A;l8onaCZQMULvZ#;humC3-omnzwHS~autSP}07o;}xi*kD%Q}=bD*928x*wqK zW?s&iED=(6NReG6bNP*dG)ImMW~lRlXlj#I;?ScRRU8_u&>=SUD}AuFOva6`v^(&L(Zc%scEg~>U49GZv{EyKAUmRtS?<0 zRb?=Vvi=Twjf+!0Jk2dO7>Ua^Mz?C5syni8G3sF2$VNDwp~k_*h7Nv;gVW}5`b!<0 z0b;komvo-u1s_o)hG(6wVW1vB-?&!E4!1<(_2xpRI77mUp~*%jMGfvuy`wb1yDZZM zBkW-~XJ*1#fS5&m?M}iCVkel>uR9;xGb#?B1@9sBIMXz4LSSz&PS^MQ!4YI!a9^NS z%?!cW$_O)JicGppl@z~nu7s2#>xY=WkQFD_jCRsulBZmB4uTTtjz&19t9e4+q2z`m zrvN6+>sv~M#>64&;EJMTd+_trL_(|+rc{^jDgcFOs6`yC;@jWJ^?tR-_opKR0OXg zB3$!pG^@y*|5?+Z8AQ>AzIB@QBz*E{UX0CeA|hqMW3AjMO7T1u_u-6Fd{VdrN0^^W z7xT`+nG4RIWY&yih-tfcnCCoNsZqU#3YtD)Y5GWqZ`kVvmgaolgNwNx{9)oe0gjX2?~sbc9nzBw?u0bfAF+1lEqWAQ*@2V8 zE|Zzy@2DLV>FRiWMJZc^l_4sIy%BSip>Oo{hVv?Wb+2$;pk2ZPuHm3B;e-Cu!G=O? z(Nhrp3@30Xr#NK^%5JGvGz(X|&}YQ^&E_l?%cndMEXa`)^I5pA1!i5UQ>6wD%5dtA zSflzO$!(_OZ*rF6z>iFp<`?3%+^nDi z=NekP^_{+#OH|r>@=OU{>xtk)%ojeVQQ)2PqCE%2`Lt5`5GEQ<$SIaaW&tjsXmw_l5k&(8-3G8rIXqmyKGd_oQ>{Mv`Bi2s{e=$`IxkvQ+kOz_;`>s zzNi;1be(-Gii;(pZZ;1&;ZDPjooPqaOwtBE2_teINb7ODVjLOnc|(Mx2)|FDzR|fR zE^K+zU~b>2apb{@m8Rk@lg zWeWtt(a zZMNjQHp&SAG{q7K&_)|=(6%XBM-(z%p@Hnx4fv*rc6b*9-9JzlZ?MspV#W=Y6oeZV zbQOKnL~=lA*-OU0YJ@u5XNet(@Y-%#OBYLQH+&V9gbgT*@Vp_+TB~M7M(KeJRPoKi z!XD;8!ze&{i*M9RmvA4<8`XH?)4$tbFDn|#EefI&*~p)5G6t~i^*;(|ye?fA7aVOZ z@3Cw6UDDcY#(k_gjrv=iAS8eJ7mnzTL;7X+&P#dsaZB|RMAR#j)Z_zVOT&=Nr6sT^vj>;f1 z45`yCq=4ONQR#z!$}*ZuZZ}|w&8Jb#ER^{+DB0dnK4(`i(WVGxh7p2(ph9YuiVhNj zRAp5p=YxXGQ;H(?1EpyuBAIOs8bc2>iU(jzhL#;~&)OB8nEf9`)|$n64T%SA&?h}i z!H+L8ZEtr)(`r)ELXhw@zEt`}Cr^B6SMi{C+d5Qf6^yd%nG;b#-26wImci<92ognt z(OU*|nWVs84Mj#s7X=IVig=lU%Jp3MeWjFOJer6dTlT+Hh+dNyvHNX=C(fFm`llw3 zI139|Y2ai>k6HfZd|Cs`H)_4Gf>JU9N*Id{m=IxJaEA(7B}*`DADUEzlRliWcB?_V zp{0;66jG*7Op;54$4JcKMGcTwsy^kMT`TX)ZQkp(t+}nK0~zY86yN9*lz5#k z+Ua@zYtUt#xiqINhuADttb!k2sNU|h1;0bUTlfStXKw0(T(j)JNhao)&nN+#_Bg(; z0~^&PSi!5Kes1xIRNrY46Rd$yXnolnqZY5nd`Mg}HJMZP7Ea&|~sV z(%SP_QJHM8nPl6@!%_;ia@mWw3GnVuQWqhZ3jdCl&3S>h*Wfk*__T;?%@CDJYoXD& zi$wQ)BSOL(Nv2T^;!C-kh`6DP?ZqBXHqouZDB!saC17M=ilIP+nb^gblxpjVc?Hjf z#EZTWAB&^mlys;l(eRNXyzFU^e<^}h9rAK~_by@4#T|>g?dlWl>ZV^9^EuW3>{OSC zvhh`RBI<;TAEh+d9wz9Nb`&PH34eenp*Lmn`F$0trwKUmro9-oYcy(oDK`m$Z^W%e z=qxUkq7zE*A`{^TZ=@7B6v?!woRY8BO9Y^K1`YO=%i;$Hmz83~0_0E4XJ@GzPeOB9 zRe@vHY34!I*I9McNFhPG-Ng35dM}ID=r5j26(EuNMtq?08^p>BRCwKvAjz5CEJGwC zd8yFnZQ?vdWLO#fn4;_C{d#CB7dhv2K{4F?<{N##UCQxALlH%?Ffi&TQbybQM*oQW zP!cB_(p0Qfq;dz%f!#I9FCz^UVgi-~euGx>jjG2Ez0giCfTCMjb&DsJb`EL1U@IwI z*wRY*$^vrNqc2cv8iID-jbPxdm1eLworI{S$#uM`rgv0>uRZd-#_CT)yl<38B&z8? zV^5Xlt=H&E9EsjxF_>e93Jts1E4cy%M3n+6d6`xphiXmiq=EI@c5cyN1{)1tkEMS2ef!0Ou4Cmp;u0e{5cj|(X~)RU;L zbArFIjA7h~hKS`+~ z5XeCE>4JYN0j@IFuL?1jfwjE8tUW?qh?NmlQ`)m#!DcfX zRVT^)O`{%UkqGBCLE}-}1Sy&!6LoJ;xd!!%kfqQn zh<_9M&e`U)Yqk<@rHn5Ak-_0tcJlcRoytKH z6Gi$)y+K5*l1_h$7BJ(bTHOgpRV&SA+O0m6B=dC}WJJ>99me8zI`yR_3yE)3Hn(sW z#wT-P$e@(?dq*^5lJupRcG_3i3h}Ipq#w;mek8>t12Odp<6WSzM)h#&_^ z->AQ70bU1YBU==~pBzLe>na=dD^es+_rM6e$|jb+S}FAI2>9%{CN?@#(beX@Ti@u33OFau;KR#j zD&^;6CCqS|t*w-K&@Tm)iB!s9yLOi}24QQuiMa0Vbg7PoGi|C=e@j6KR8S~)*_6_C zjmx$x$mb%Y=4eM7jUB1E$*w7B!%%+TmQey3XpqG2Z3^;?SdM>pwrO0uDk9+ZBtj_u z6I56r^QBZO6~a%cxN0VpR~Smp4+Xf?0Npl_r2=&l2rW!FITu4a;FX*f^kZMri9+fd z{Y|Z6uE}@{%Q5ZIJD-#K&JlHyA++@}$2eevGG{Ook9P>74V=n;#_>_7=&ul#wAbk3 zuv>|BBr}s9Q&%KxQVBSjWMJUS>6cjkms)~|)!@KNqc7#B0_qUmY7=niu=}@DeVJX# zQ44&fdYuiLfd$vmd|4F=;!*?9QdZKeoV|9s49tGK} z2yS3gF#_(h$^2l5T!Y~WKA?)Y-G@swGTeM1R0VoRhD<2d2#>;~yR}68@k8asOW4Lk zYi%SQh*<1aMffaC66k_rc+)xJ^R6hw!{OKm1jj?v7aXBL*0u8N-!8vmP~71jQ0 zZrw2F)h{V%-vy&5+kdw~lda?od<#MN8V{T(Rfhq(0Kn`D-mg`;*e$hwW3%dpmCz=p zZ3dCK0SB(unaE3N;O>>1aJ+}P7cs>XTP9=})Hhpwh1@?`a&#lCvreL_k zuPIAvr`xqno_tD7Z3o?`(^!lv=`TBRIO>&e*bF5pJETWBf;K6CnZP6~|5+S^v4)7O zqqB+bvurM==W&424tg7@)DVvvDqPfpsU+xk65@IQTk1?e{-Wqxppu}!OOAb6_bP5r zn=sQiu}B|*pN=3ArCO&qIhY=Bi-JqA*e7J#Q)+G0=_&JUq?X<&kt5%zN=41}basMv z^||z=$#xx19M~;@YS);kCH85if@dnI7Z9Weoo17ntRdiWHkhs%hai{RV5t{*>b6IG zi*EGknY1C!$4tJ!MJ||h#LEJ+cj;-Q9%KGgU?Y2kf-7z|(ygpuN?mhdI4Av8$#lwm za4IGlE11GkencFxh|BPr%it{H-*<40LRgEz${F--Juxh2UiPKDNJ2D6t1WS=$z^5J z$*v+wgS-1{u2ziq*F2l5GeMIKhb6B@GZ4)+baR5(3lmCLPBjcU?hD|x8CH^^0S6l@ zOazqb<8K<}*mvj-b78R)?vT@4kFt@6{}Ugu8nxZ7%l>8SvB?Jg>T}IA3ffZ5T@l_w z<{K0Ez7anr5mFeJ4dfno+|2?NWL1F2s8*rAI%?5#HM6RD%37{P zS>NLpMd)YDMtC2>B~k*w1SMLE`&|^|y(H*{G_$Ptb6FM|u|r7m__~s#k*dDKJB@phAfdqY_L-iDbvz5TL;w^HivpM^cvGy1x zTWc>G3wWi?kl74c3i!4SHoCxK8#L1e5&dliv9#i{!$Sn&_U+&&R2!8lM;;~?SX(LvxhtVGg@+6 zA?{>oCaqT*l^HP=;4uVEyBNWDcB`qdPvp@t9o*ynYawOL_SdgkYO}U4#wA`1_l;4{A>?h)(X06XlBXYb%k9B2QLaI)YW;>>Z?47TRSR_I^ z4r19rU(!{ig;?o!zLYDZsxp2_Ysj@XtPrCU;wC0Z@KPI@D_1CdqpnneOXOZ7y@^8_ zFDo(1?A_Bvd=Sryn;GoeqXj`YsB`|Q$1(=mvm;;DFSQ;XlA%@1Ny!!^#iLU$aH9<} z^+1R$^*$-pb&U9tO`vHA!PH0(m=UB!OL4tRK{G$|WrfHB?!*wF^RnxdlGov!DV*yx zo@bl4GCnR7I^QVWB1TOQ*L#0Jk#Z#|VEhS{w(#{34&9Ob^{n}8EP!w(AsK^?QA%f- zTEIbuN;~!t9wFiwA&fdni63gPn$;ILaEn>i*W$f)v1ATY=QSHNLlquUL9@0giih0> zi>`92{`{$s$^L2F#Jfj}__S8xhfrk>F9-W3eABPZ#j6LvvO)MC(oGd|$nE(@r zHX}q3&5#>J6{<4OlZ;>H5^35ss*o$&qm`Ncx)%c|iPhJBWFXA7OT zkOAz}J=xT)mfLL$H#+x1k3L#>m~*&Bh9Gn=mzO}`)^i-Q5zJS69H5C2NhOpO7;%7bMH` zQfId)Q|bG6aUUY9_5O0XzB@W71W1NGQ&G7+LJ59uv@MrFmmw@$>);_t)&V(J zu^409F;l_Yg0!!XQz~9RGKf#qgMSNbd4ge#>X%>|mxJFZ#-^%*~9} zFTyJrmw9oH5#F2Iv@N+WFV%{C)rw52v@)aKmIq-~*$L}TeL3iY;nz^90+sM?)=~43 z46scp!xCT)|4UGWPAvollpdpT3+Kl zuMOpW$4L37*aX9Gf`H{;jopG5N=x}OTF&41ag|f=*lg0sdt$+7zta6^0J?xf2g?kz z!k=1^ylm^jln>AMd+IO3frW#6ae&uJ)?bVkx-laQO|vEdZ~fQE+}Y4Ac`LZYB!q^PmqjfkGFiR1vts z@H!a>ROU*ffzjz&(tLeDWtyp$rw^;|)Jp}>0kjkH3ZO*{KjL1S9 z;HTB!LYrqqDsb>m{kcN(J2Eryra6EghNi1M@Z-sNtK56h;g$Hc$jB|(xvf{_;Wv@_ zj%&Pm{LOiS`hmg41a{5bdElTUHm9c{pMV}xDFL_0;pMp*VV}nmicXPul3A?Q+&w5=f4|#yz{G zcqwI9Y?k4ccDQbTl4^MVDUsWc4Y#!DYBx8$va&1o0bd2)v~6O-Z$f$|&BAXh{N!A} zXEriHaVlJZh76+~xxv=?$!%6-5#G4?R&=kGn09&v)Mj!|!RsV>bbg=a7W_fw)0v(q@DY1tW|6!OTPW_1JfiD(dA2 z2<@LTU-pFlsL9eTsOozd8HGQFTK{NvGkD{donEM)XSM7JWnjQT7O=v@adA`RS&`v^ z(20PyFvSqJe2YefsUZbRV559}kYAsHd@gN7S%`8X_ zy$G{K@0m;UL8+kuD^i6QWM1z_-b3r9CE-sj@1@ViK;z_N{M09Z4+BX~^S{fU%irci zsT{mUr?Gu_u_vccc&BD-HC|6D>5BOpH_GYnU5Bd!>E7nkk-2ljpIc0RA4JchLQTE+ zQP8a;xdrCIIgsS+G8Q9gP7FrM zktM_1_n%?stIl2yV;J&ZJvN^%y z?Y^M=V)TznNUWxI{V42DX{+Vi=n+>C%xgnt2#)EsvZO7o_HT7B#vvV)7i?V;sI_+D zNjg;Y?7)>b{tg_AN@!gCdeSs;UTrYkZ4K%Qjl?)8KaKqMQTR26bEvrd)EjcQcSSqL zRr#H_CN@ugvJbyV`D?<+?hWxDhb#{u$zTm!ewqlhhI=`=7vqN=zDw>;p{2-A?5+4c zu{8Yb)+5D`$6q<)NXQqwaxWY1qlf2;6(wcj&V$&K=p^`wnxTP}&4EUUke|exjsGCb z``=P1FBpzW-o5JY3p8Fq?p$6l?R_O6XpS-Gyy1EK~u%c|? zf>4F$($e}xA^+skMO9_~snrz=Dr!RhVAb5Z(z?Z-xkML@t*)ATPEF~83QzjjbT@WG zMctyRg*BeEvN8TduKsc98RI>yH^070>X+7sDi_urf%Lot(z1oMi|eZ9SB5;(@`4E^ z)m3E`HH#`d(`M&7I=Y33k{M9a4cb}~tFDlrV|Q!RAC61!Ut&uSR?IE0xWPZauBv>I zzqF>@e`5u;T_jT75=5Q;T-@p`UQp9t6&p%a!$xft@@p$A>Z;00tN*|Dz689fYHNFU z2xEyYq5^X77m!JX(3B1V51dY+EflC7pwz-?nxt(YO=6Nl8T1wkI8da>AfuES2Lut( z>xbXvDgsJD96kgDMXv)YDhennkbkXn)=rz#^y>Bh@ALi7^SK}Cd-l86UVH7m*B(yJ z*+*Tb*;DCqLNDo{Ai2}9KrSD!fD^p*jNFvbCRSDe8EmGWQG$;)8Op}moMjZ4@6U7b59GhZtTA)d7(54Bo3FMD?_HrlGF4tA% zvpdTJD!nq@%p;o-8NJUzfZ-57;ntsJE&VE|tuxB(vLXb6S;AC%1>$h`# ztF%?RJkxb%hr?xo5?oGQnHh?(4$%34wmU5z8w@h2qOZcHgKNh?pS{w?vw7_^Y#<~j zdTk!4q0S}ufLAd*%L(-yq*PaDsW3a8Hixd#?uB-?RCK_qVUVS~Lv>Izj`coJIJN~` z1VpIChK3N~bBR0|1R6scEm>SnXpbt3Pv@+1ICM^zPdC-BL}$0TjjQSEG`Eqw0ZOvw;MVOE0gA`a#-cU zu<3j@xhez8l^%3?bd@e^mBXe(m(!JbT$Q>q>`{oxxl5t(v9-aklrHAAYr;I=;7YSQ zYfPRmNs=tp)dqthu6fUFcYf-Dw4+U7GeW<*Fg=SuD#jli zxA`A`dQ9xz5C;D}EGqeyiJP~_F8qA#8u5DKf~2SCEf+UZeCv>T4WA7iE6D0sE)!SC z7t6#=*V}fiUNTSIOnCXasog4lgSdp^rVF>N{`|d6VLion5H2NLN%#ZhdyMp6r1+zh zuIMoeiXEb`hWHhP8_3RKUsxY z3E#bI6%;*%!f?u$NjR7=j!?;WkB}*sTPQqAdY2N8CH;33CQv>-;Yi{o!a>9@)kiP& z-ndrWdEw*-8GQ?d(%WnHmYsM={Q8Z*?~iC~5S8?WVuj4F6u*%9deK1n2NEiFWeSVQ z9ut)#5>`<=rBOVSP>HVuRs!AAMTldJguIt6; z_Z#TtUwh+maS>qy@$FYXSMIxenb?`|c+SY%I$tamw|qCL zT&O7%hLOIqTTk7xCvLU4p7K3Rdg=*J@_dvYMf$XaA5wav&<#gfiiJ`C{=*-T9oma_<%Hr}$jL8p2of#&N0Ho5d=MEBVWXg%rP!a3D7I`N}x->^|J%fy9$ zetXE_nXAM@ly5f4&mnw+&5p8CvBfu-e*{baBkC+7gr5lFFu~z z?IXjFtHj2*uDiCcnGKZv{b{MF*liLHklt!4Zx*4VZ@kdvl{KAC zSKck0q;gJF&YAIyvqYFqa#ca{NkSdBZ*AJT@6s+Af9^T>m)wNM#4Cgs2|IUqFipz} zg+cfJ)cEPQo5XeBU!EI#e}-Uk4c@YMVx@4EP#qSsGync~JT&opKW_hl}>V`5^Kp!jLF;9sTq;g5vvU+?NYl4uiFl0VHRKbuSV z7Wvb{4;QVOlRPJ3Si%FN2cC5cM)Ip)NKY8~UoGXkpYRm-SJ}_U375(KOtO0jGc9x5 zl7ux>-!!W4qu+Gx)JwlXeC+*#6L;>370y*2Nj%!Ax3HY}WrVwF{I!+qQ6(61#e}D} z&lWxqzu)=o-yRfJk(`ol6LPx6`G-ByQ&>X$LjyMth<{rW6m$vwKAzcg>zQf7hv(mU zD2F+PDW`8a<~+4p%xgb+>$X2XE|&NDqMI*siRdOANBqHob-gY;KV3XPSV8$#l`nqj zXwMB|CB+X@`gqDWne;da-=TCfrT57GF~u@#rr4iwmSk*m=SxMx+KeaD8#?-g8;I{j z*m(IaabC9uvElQ>r}rILE56)o<-CiX3I!$KWT89B-Aoum*o9F0A0?eemu{qdnL?*i zahs-gC>2)sy=`IJVZ(*f>)w2SpM8OtSorR~ZrXXGiEv=<;-k;+pD%7Oc3&~axIr93 z{9S}2=MG=rciB2In{YkJ4WN8~dN&3BTPSuh&c4w&dn4^9R*Bn}ce(VH{a$h05<|Bo zhK1t6S7zT^Ibe;LG#JB5@o%qL#Qbox&_MbWJN3dKDmR|+Qt_!LUfVuG$e{A?q;lgZ zJ&Slf#kXoVyq^6^ijebYhpQjPl?moEn~tB)og!di#cb9ZWHf!{Aa}I_9eowCyM6IecmJde3Mu2-B=`STKRrSn=URvqWlvGE7Eh0 z6};>azU>vYWBJi#V(pGzh1=>2gbCYzS(vqel(tNn>_BO3X{nHN(uLopN%9xD6lfsXucnRTX!YPE)|Fkf=^T{=0UDUkXzZUh0`*8o;|2=!tL*fTAJ|XUt*PmtL z_rrSboinUZoc+@(_CU(x;;6zCN4FS@gwJkim=kgMA@SX@500Ah#BlK>#mj{))zSWO zqW&%g_w#hiqREpYYsHeDj~naHZxAbv-}~H0@B4%kGQUy$m?PS_L2L}+=vW`9admeBr|E9d&$ zKTc@uk!acRr&+?8-toE5cNs1$&8+O{TjmxXBY7oWBAhvYTb%xEwXm4@pZXlWUR*F# z=(**E_XjLoE|ypC>^gIvPk6XT!4d26HR7&ewuE(yJ>o)&`{jPLi(z`4zwF}W%yz?X z^*<>7Kqz$o{QH6lYsA5Xk5Imyq~~XnTS5FUq)$Wo!m|{8UnV{rf9KI{;xm+Q%Xh0b z_u5t}#F5@XgpH$*B=@|&R6I_2>YX!bL;L0l2VZWqjsL4dc!l_Vgez_RQV(pqS9nQ| zZxR)Gi*T6I4-xJsJV;pZcJlXMon0zMrOf!-)#0ne)WhBWYyYlQVt&%*U0>}TD^4ct zMCr*>_Z?jpxj}qNr|5c{cH$NsuTedBTIzHwQ-r>h-*c{E&HmjfadXaG>b*GTad8mMXLk~cgx6>uETH%#!YslH z!Y*I;i0p0MBuCg|2fV%;UKLop>AJzcY0iOOC>W%&K52!En%W1%L?4M7; zPUxR5^6x^7h0VxiVb#%Lw??&XhcArvMxTIxSJM4{9rOd!Mvu^T9eG2?Y3*v5*!`|M z2KVlTSuuY){M$L#?+0@N0r_J1w+(pA&I9s3_}37EuLFKX2!0dr^&$AZz&{v*e;4=~ z;MMk=2fjK49|`q!hv0hvUlD?j2fic(pACFr2;K^OP6&P$@R`6vcLV~q&r;x%fxk7t zD((C<$*bFQKgp~4)4&@+kD9*(d~66l3IzKDf4i#O-oT?hYF+>y>)S^qpAS5?rg^EX?+zos^@bfW4iZ;47JYssd7MvUc=EM1e!T4{{|G-~? z`AE&<{Bi;KC{#cJ_27JSE(DMB&spGM*arg2<9u`ic*PPW33;5KjsXuZ>IDMwIA0wK zp$F%$ed&Hb49`HodgFZdBJfj@mFpeuplZwYZiMs)K_6D12Q23k;A=wgSAnk%!FPd* zxq*j;0tUA>x*7^WJp+JW0X$4ofq;BE@bw}1V&Ku9=JMGf?*ks~xg!T6soLm8;i=lL zk3^WXx`mOc+WvK#6m9JMHYr+TZQD`WhNy_PIa(u7Dcb(2S{;Z&mQ-Hv0ia?(=qowy z_jd=sMtybRDcY{{Bht0H+Q{(g4%)8JR*+##M@Yu6u`@<(WM zB8G-_2vvS6s*~r)bgbZee*b+)DE*SzLEA2);}mT>EDz^>W`cDN)0^rWs=RbQLX^=>OrSSGDbO@hZIoT%~uE=j78MXM}Q#pr5haN3fk2Mr3Gp zb&=4R^Rb<4+hjl$3!sYFzA4SxH$yHE+qX9in4C<%e;1Yq^_!3FTZ`=*zDQ}^6m7dK z#Xj_he2_m2^3BH?`mY0sbI?z5q^CB#6q;#tN60PrOC6-QgL(}kd#PWb(_8pOy4D@h zJ0euKpl%3g_i4~~<)q(lM?&_CO!Nz=B=|)UcMD8pEFS(v!TM=D1@j6LAiogXs}Acq zAKR-|lc|jjFW2@50vZ4Wz^SYtitBGZhKF$)_moitUFX zY(`GDyi&JaeUnzlZsqGW`dM%ISDoSapMidl>*6w`~9yC0=;kl2E98wMBLXc zq@kHyZx_@H6L0nK;Q0?|=3ku<*1s+iTIKaf&Cw2FOWU3f+t?vuYkQ2m-a&JuBfH!I zQcrY*KhSLQIL3Vbu)*iTH7~Yfkon1W?8`{a=638VD!Q)GENIWZZ3CCJZIOMWElSL9 z4+La;A)+>H){0{G*GSE)6Cod7uWYBOmDm^UG;sYyN6q^a*{P00;rgUjvp`}yZb1I0 z7|m*lJ=xg-*KggV*)fT2y&3tBx@xu+vlqJI^>?>w8j9J59_Pa#a!99nF`pgjso7P; z{=1jv@&tC~HqFly*r&ZU+sCu7`)GC)upj$sE{|hB^wYcyfBS3ZjbrQX(43saY6fU_ z7PGGgEC{PDV7v61e@tW##A;qFX0r{WPZhIw4VrnA*pG(cAhaP~vr%Gu5;WHe*;9#{ zO%vG9iJF6x*lR}3OGWJAA)0lQ*v6rnjT6}ycWF)(vG)bdr{meNVVVaD*=xf!Ckoli zqUQ4gHYZv0+(foIMRRx}dp1?`U@<$Ardc$JeU`3yVG=uH!pb~8A_7W0FhT=XEzdx0 zpJreMc4T6eE@om?U&_LY%^QiOzdjPHy?hkfc6Jn2eseaKdp;X0{K9Co);}6;I5Gxp zSUnbPJ2w^^;(9*zWw8dTyL=)R_(%Ao1^#G(KU(1bc?;CQH@Yz3x4Qn_q51y5`8Ads z-u&j|-)+br`v1Rg0o<};cvwD#C2xP^_)1lLqbmL^#iL|txIc(hE;>=X>pRLtH;V83 zStnod-!!-zcBk}1l+O3LJpJ-@zY9h1I3WgDujO!z%7-n!9Ps}nkAdGa8)B3=-ye2W zq6}{>l+aTKK0fdpj2Lhqi2=6sa=3-i2;ZK;!1)umDRFLR3H^vez<7Dr{fhnVNFLrs zmg__2vI`Us@1^MbiQ-LmD*XTUzlGOyA)5fdxQ1al;TFO@ga-(Z6Mjbc17REZx*Ud^ z3HuTz5{@7oM_5KUm2f`ca>6Zydk7B@9w+>a@CU*+^35=mPuQ0*k#GdzIKnc*sf6E45)PBQ0&Hu75!(yi8c7OVG#bV+STy$uYzIhD3dAygvSRg~zwH6Jrx&;Um|- z5+dN{=n$VUn#o46@WA+NM#ET(V0>H#^O1~?-(X(D_&5mW+b}+Ug889YPNJNYokllhkIJcIP`eIG>SfWIw;v6lUXUmyupug$W2cV?va;p@%Q#AmAb zzY(9T;@<=w>)QYy{l|d65n*^8%9VL)2fiM**3Mr;LKyg`QRRof$b8H8$1+0It1T21 z2L8}rW#?_O0WHTxqAZWAYEM)d2-&1Z?LYV#3DmD6{XBzB=3Dx+6Zp zA%*1b@-gr|*-dQURh^u$g7W+%>xp8?@d_dT#tfJ3VL|W7w5;TW!j~w(DuEAGZUgXG zZoNkl1hsN_hxlVv!Ti_2>l7;JFaE|KijRg3NT_o0Styp=cKfXr&2xiOSCz7wB`tor)5DG#+Y4?jxmWx)zSrYJQ zznkpg^(`enhuVSLIg@xD$@6{YD&p1cyc_sX{o4sPuyX&Bo!tI-;1vtWK!P0LvA+AL zzEDj$Odvh=s`md2@n=cD{0s?ltR=qTppu{e#`-Goq3nE*+zr5^A08t=gs2>L zl6)-9S9aq6PW%O`Zy(|>0Uyd9d_WP3UjjUqt2?PExRLZc*^2znz+=0WsM@(7I3&&k z=V*V$=Yd$@QJ#@J_bUtW_0-NcP`M8iUqk)N{p5MzQGYV6M>QnhDD&{?7M1<~AU(%a ze$oYQ;6t@Tf8f#1nxl$hd?th;9r$S0v@cRv_&uN%J?prh1B#^l%oZ+>0w2ROH^T@p z9m`d(zuCl}RoVX+;&VKT65j7m10Skhhk(a+TS4=4e=7U9%xl@}p4lS6vClAb$=zoP2*IN-5f7ihf5&paW|QQ$+_d4=S6s_NS#TG11GL@7{y1__sY zfDfhT4U#V*zXCUq!*{@kYX5#fhSD<&ch4YgGN!27WjTWoI|wQNAn58>uG!WO-P>5)@(+@o}=e zmYt<>2W}vT4AR5zPr+T~@RY2l<$e9Lz+?NU*HdQk_`JTVvNFAeNz%x)Tq!#%FJF=v zoHwyCV`|cNK`7yjw|yq0K?#N$yrrNXFtIp zpkm7YN!mT`MrZoSdSq>SvbsVUi#1P8RGEJ=O(70(VsGmpR%?~-Xu zI`pv8-O6?Pc)iC~rkAAh>S_s&9D7}G@Z9d3E=`RExr{Ldk|~oiXQt-{3L86OM4l;M z%1=qnHlf1&(P;tYR`P#fsupz({w7+M^4HViRat>eJc@Z$%m zW>2}t?5;3D{+zP1G9`<;|COeY%HcB!aC+SgP73`sa;lU|gFMY)_Ih!I7g-%SQ-jPv zg@NPQ>9NqHK35eS_4kmJ6sM2V!?17F(oC1fJ_Am3n;m)bId*O-w^e^sB?#06h!kns95Qn%`724lPQdS~-dLEZB>~(C3BjRTipr z*d@qgR;A6*%A6E(GHx-~fs{(0JimvW8(L41y#p$*d|`#Rx!SAaaa#xVal57k`>Mlb zwkp$+x|^uT{Jg;OgK~igUnfE=kV(xJ$WV*UsDIrdgjxE!;KX(puWeYMvJ><>m#?bJ*!EUBO^1t+G3;!K-tQvZ&{e z3!2Mtv+cG2>U0+PK+o@RG5p?-DKHe(J%}q_lW&9?iYUv&{BePaLH2}yvQhbUkIm0gPmHKDi#AUGL${blSQ6oW(Tf`-pP}hq5%+`g9VFNY z2}Ae|hQn2Ex3qqHrLJM9&B^~zP2=LBs<7oy-B814v`o2qNfLwaiCHRJj?fT81vhWX zW`K4s=qSNM#2`siD}T!v`B%S$C2wKmZ=&H$5n=|$ucg5V2d`?HQp#{riIbS!>vh9c zwaLeodn|CwP&3>RTwL>fus_Wm^?Sy!U2&bJTMzl0Y`^{1L%s!q>PYZ;H%mo}-BOEv z8lNu$LpHE0QcobE?Q;09R91y?1)0&s+-V z^C(!sui&G6HhsCXN-wXQ1L5O*a;(DatzdfVbSLCg(C1N7xTDBo6p16{ct zKBkwg(!-^`+yzk|{G!D4_-iK!xnzgX+bZby%?c|h;V~%60@JhnIY|jDhPy{unex-8 zqJv*gwm?Qyh9-bs*<5p_-2zHnJ}g~HW_s9)F!*J#62~t6Cj5T`_?#IYF~d7CO5pFi zaqLYz2mU;k$MtaW1H8k@^YiysIqs(fcr8N?@c1|=;P2z`2r*DTe}9f+S9)NB<)SK{ zpFeL(1`c)e^7(sq9Qk{(AR>n_enFTCi0`QK{QP~q08$2Se?X4%7Xacrubk)a?QuLt za%eyPxq>#S{$dSM2i}^8+I)62ASVjK4hQHU$ zu{)$S4_Jrh!3&Y*`T2W=9Cf^6l!-sb;CR0(KY#y_BbVc4a{GDw0abqfo+8KU1}>?f zTHiude*QiqM|fQzD5&edg!1!h^7kG&cDXqyJJSV6*=kjO{(dCKNUoUjsmp&tm7l*y z$?+3agQ=qIIaPlCz9q*yf2I7_AU`}Jmd7AK;JwU!KVz)P-;`L(_*;+wk9q_7`TLuP zeq;VKkQe=rj}QJnUz$m8e7-1aY5K$SbG)L;k53 z0t9ZS9DzSPACI>MG30oD{yaC9^6R)Dp*nvQQu1IDJ}>2EHy4fR zr%2w!Gf<)`DwnP5Vp+0+>_1Bl0RQVHhL3K!{WzCm!1*Cm`I()Sl3s`Bvdx3K{Qm=q C8*niI literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder1.sc b/source/HOAUGens/sc/Classes/HOAEncoder1.sc old mode 100644 new mode 100755 index 7cdd0860bd..7e2d6856e2 --- a/source/HOAUGens/sc/Classes/HOAEncoder1.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder1.sc @@ -1,11 +1,11 @@ FaustHOAEncoder1 : MultiOutUGen { - *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *ar { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } - *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *kr { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOAEncoder1.so b/source/HOAUGens/sc/Classes/HOAEncoder1.so new file mode 100755 index 0000000000000000000000000000000000000000..74c5cae8bc7fe0712fd9989e3cdf0ccf1cd749f2 GIT binary patch literal 61416 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder2.sc b/source/HOAUGens/sc/Classes/HOAEncoder2.sc old mode 100644 new mode 100755 index c9f8d145b7..b4083ca9b9 --- a/source/HOAUGens/sc/Classes/HOAEncoder2.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder2.sc @@ -1,11 +1,11 @@ FaustHOAEncoder2 : MultiOutUGen { - *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *ar { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } - *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *kr { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOAEncoder2.so b/source/HOAUGens/sc/Classes/HOAEncoder2.so new file mode 100755 index 0000000000000000000000000000000000000000..b141516872c907630dd7279a8e532ffc0efd9344 GIT binary patch literal 61520 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 Ty7piEsvcY4WB;{ynC<@y1-1$= literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder3.sc b/source/HOAUGens/sc/Classes/HOAEncoder3.sc old mode 100644 new mode 100755 index ff1164dbd1..40bc91677e --- a/source/HOAUGens/sc/Classes/HOAEncoder3.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder3.sc @@ -1,11 +1,11 @@ FaustHOAEncoder3 : MultiOutUGen { - *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *ar { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } - *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *kr { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOAEncoder3.so b/source/HOAUGens/sc/Classes/HOAEncoder3.so new file mode 100755 index 0000000000000000000000000000000000000000..52e74d19533fda2c778dac85df3cb7c90342d21b GIT binary patch literal 65672 zcmeFa33yaR)<1j$X^9BwMvW5}wADrf0(KyQ1dMb@0=J<9Edfo~l8|&rBukrgBnnC} z38bg#G2@^ziZhuJm2nt{agB^ilqGSGsAF7-`)xppxW$eB|4voizPFo>I`jVD@B7~8 zdvBi3sXBG))Twh$ovK@RTbJXQH6$iRQjek1r4r?OCUcBU6m$=W1b|ISlZN5{Inr5- z)}R#~mpY}Jqf{tKW`>|PPQb78S(XJfvxEw_P$7;E0o8g#fFo4?3sg$b90vPES5z3s zN+l^4kbd2wJQ7+2oeGJT4(CUnQcCyjV%g*1sU#2%6{__vL%opboa86}n?&gX(cWNs zu?c0XP;`g&?Nsm>ir?&ci=;JQ-961y^mgOOhZlCvIepo>yPBHK)I=73W7W#F;|V= z(>SE@q>pvJ@`~H=89i7)ynvv8s<*Wk3 z?3UfXir;q1 zda&g#->bpfhYhKn^LFyAIWI5tmE2X?e%ce|35$Qfa^<6@zH{;}I*<^1_@n1yj$d8A{P!zAIOB=( zmI=45ZG82Cz56aII$_rbH?3VC-{h#i^7TVwhAm%LarNg@AKAC#q7S@djy^kL{o)n( z&-v}qqm#b+;Amh$?2^`l6;e^^8&~C@wf?|G2cYtwJch!I)3jU_?^R}(~lbw9e>s!a-Kg3J&j>Aev!ul zAkK?KBLB@Ge9kjU(x@o(=L}+(jzRb|41(W0h&~$z;Xh#zeSS8GoaYb1XZ^6~dNvKh z|1X2s>$XAKeRYt2WekGv8-)KWgUIv1Ao$!t_#YjF{=Px{{DVR0=MAE_af9gj5az#= zr4dpeO)falO?Kp90zFrXm(m{Pc??^2+>QU|f!<639fz2%r6ROTcpC+8923EpjvFw6 z65f3k&yVFmdIAj3l@g@hXUzhGga>P0cFgR`&d`w~z65W>WK|931{c28kzG&c6EI?ShGFrugbGY z=pj+)f#M4t*E4*))ZfALs(nquF6Ib1&k*wOjNpH+&|6=G{u>2eoz&HS(L7IbvWXvQ zRnCXdU$U3&c{3BJk^RRS2a6}7w{7Q$49G{v6-*BaQe%XDrwjS55%M1q`e~1lf3eWR zM?w!U2Rn|5cKiRz^BV;IG{BRkky82n0wKUs(XK7RpBD)KF;mBJ*oD8{C+OP+{TN;> zohtmNQTX8l!Z23~IRipYRd4SJK0Oh9E)#ZFBF51j!j64H4`+&Yp-%Mc_<8(!;h%jG ze!iK-4ft~=XQ0Y645lS}_56+Fw+MyaEBv{AD#!mC_38KuKW1MckLo9TM1LjW=c5?4 zB&|Y2%zuP_RQh28AL)k^(J}I?@(4eX1^+&wPZ3U}V&NxlA&=Ux0OV!u3O}4A`gaPvIBk*^v-lY= zHHv-}@oG}8uzP1jzpSENlkiWNj~!)rfPN8vi_mkDz~2V_ zo21jF{FluF!@)Yp&-e)XMp4=hd^A1(RrsN^mJ@CehW`Qb(>&EL0=5X#(u;%WIZxOn za=xfz>m2->&G`?A4qPwv)+6))w(Kwpy|EJ)U{t;RjrI2osUf1jG#yaCOoET5Sw2mninOyL8%IrS6KmLaJFSQqOzv;wGRKHD#@rauf8e=+P&tdxlbZejr+{v z+Lg7%?sB!#paQ8qh*n{$Fl+Lpx{4}yrE8J9v=}bo%qwIa3>8ma0lSyFN+ZgXr-=HQ zm6bIm#h#kzj&VHIPq@bM#DhA=aio#%aU4NZ2RV-FCtT!s+MjijB_PW2d?rm%sTR2E zT%JXBu39^Vxw7ICS5(PW@~lc%acxuzNS;?rLy8G@wKS`^zRpuv?P~B8mQW>u$i|pq z-8#-3*^>m{<4cl7NkmW%)riEa^m^5Wh{KT4C{q!0tGODgS64yUg_nmJ;W(>gTbX>N zmCmR^S`^PaK6r#m^fD!Ct30&)o^x9wB!gh z^_HwEEGb`ASXNw7d0dSYnvp@snPzcoK>^1Z1vQh?tFFPs3Pv!syJoekc2Z$kY1D$r zydd10r>ZluIw6CHR9ArkS4TjqtXY|C1-o>TDbIr;v0(1JJkQiZ%=rz;$;p#e6xUUh zphvY8)hq2Kd7k9tlJer(LQidRg{RJ5l9N}Ae>vz4NJ{J7V1=GUIEz&5t|+|PRa;k4 zQw;*}PjMGl)Y|`}mhw^yb5uwBuQL+PndeC>T(APYa=GmPN%up7Kspi-da@Sgxhh>H zp5!`@Jui(=DV46eIy);aW~iLB!rVevZE+pVj-KSnstASE2#1Vt0u-^&Q&?YJaaFym&|OoPvmkG3Asbp%A-xMp zi>pfuYh5dfD=EgW7(|dfYvF=Cwvhezhf6v%1F>lWT2O`X#}?Qtu%@mq#EPe+TwrQl zOlXmFK`K$YsCsn;a+p}^tDup>l?@GrZj7%QTB3WdDZHA7wB|V4@*9h9EXpxdD_vqF z{<|X`ew_>DxGQNItEz$$s}MwrDJ0FC`|oQawHD_Ur8!{opVd#%RsZ)}Cp+K-rebAv z&VsplDTPu+U7Z^plRP!`ZYY$5`p>vl)l)2074#pmnOci=L+#aI@}G-Qj9x&!%t|zH zFeb%7sHyi9)|3_27FVxy6_!x#e-6o46JST4NXNy&wUS65X;Z~M4Ol$wo(jNplW)eXin+6n_qqoVU7 z7i1vRuc4&MiWPO9(vpiVnpjseaSCOtLaCJ{STj&AneZhXU+AK>J;K!rXc}vzT5LDuNfVP(LP;$(X=19Bm7kwE(_WZ7aWW^!&quwKiIbAUvw{;Z zWt$>Ha90A~HykP%u(Li4dDe%pG;x3iq*M&0sMd+N-ZMms`5*d6 z${^WqV0%iEWJcb3!8Iq*of!86M@I~L*(S?Jm~ zN!|ug26hr}Z%C*;^?n^xV#iLg-`OqpomISB;N_Rij84U?dG)#)ZPT5MADU!`dYvE= zukLF{;?;e|NPM4=hwv)}Zvy=~ym}7_D;E2eL~myZ{?DYtJ9T*VIu_BNjh`yNSx0}V zj^3)n)BPmsVbkF+R*`_}^+Mu*I({mD_4+|1UcLSliO<*ZU##O_q{A2M@C}3D-8wwo z*P|Y-I{ZZ{60l8&U!cRc>+l&m{B|9l?)g!VojQDpiUjP?;pgb^-8%dv9ll40uhZds zb@&xJe4h?KUWZq7c)BM@J^FR{0u>23pu=CO!%O121=)-4F;b5>9iHxOQV)|3e~F3& zOw{4m>F{P9Ue@80ba=+@z9=gXGE^m=@v zj{aI5eUFY_k2mY+Q+4#6I(j`mNk=cHMpnzJ!@G5S(sX!nshXAAboeYCy{yBl*B+_Z zsl!+3>2-3_y_@Rc)ZuBprXKk^JdJJjDA(cZRV1KWhaaiKH|p?okEeRH>hQRP7&^A- z@Z&;QNov>O)wz+1x9jlYk|L|MQ-@!r1V@>+t8%+e2vZvZ8|)) ztsb%tudd;!%&Ehx*P;oZufq=~ggA)v5V7U%ILWg(j@bNl)gAPARhi}y3)q9bs zxK)QgRY%{Z!zbwQTXgu-boh21{#QEub{#%!-J-)M>gYRk_#z#?Q-?o8hws+m)q7;9 zxJQT2(b4zn@O00odi3e=>s2J6qQj5Y;rn&?b9DFt9p0?NOTwSYcgl45I35069p0qF zpQpno>hS05@May}qQfWY@E7RtRvrFA9X?HmPtxISI{a82UT!)ZC;JQue=tjOOQ*-6 ztQjIna?_r;-JB?xdOwPSV;;nR<2g2@D9=__mcN1W6oLbdEPpNKN$mkQ%hyt#hH9XQ<*%eX4bgy; z`bS^f;l(~u49WciaRPeV1(&ho=4PeU}&#_~fbPeU`% z$nxLafjkY#fScuyQl5rfporxUQl3ts0#25HpYk-s0ydU^lkzmQ0#=saPx-SbZ)W*t zDNjQqU}E{FDNm<-0g2^zQT`mt_y0)!zn}7E%J;GSy_6@{5A?A7pD9l+ALwNH+bB=2 z9@xq9H&LEkJkZYazoz^c%D3_S?PjU0EjVUBgJ0|}n`k_z8O0LwKiQvg6)MPn1A#^I z*a6x5k=!&8e{}-fxEgiHjZa(_>?<>#lPyWhc9Yj?JWxNG)lVJA>mQ@~PaPX7d;8_5 zlo@i&KKbQioR z?EPMD`PySb;ZhXJz8S%`Mkq}7Ww}Wm7t1~?5u6Hw>5O2yj=;MQXiGSHO}XqF79@rz zv4T3}r!SFxjl>qZ4cR2~ipccgrw+emFOZUFjNLa+mi<>I+MBv!Wbf;9d?U`aBN}~S zG{po@&P_iedk@yX)$>Df8{ zQ@6|h**`d9f-Qs}@`Z6}_ZPUwm z1=+SOxSu50bUiX8D!S|RzH9eg?q(9($`N`Kmn_R%nz<}Qsx86-^`-Kb9pd}vEqo6cV@&s_9G5~hR9g%A{e+jQ6pe=S8rW0FWJ{07p42aWH{N_6~vbr^(*D z@}tJ_C>Yo2of%hVocI)IVlBpvr(%XFGbTNCG#hnSQe7krWsHd_L%>u4CkQx3z|jIG z2so0#Y~%87a9Q4Y)VO>Azkd7_{QB_g#jgjyZrML)JVcmj>Y8arXQv+O`?aaz)(B@?xzSxY8qNs23UfJ2&=v}s9MOFFe=zLqS~l5Q>8pe0+iWSf?3 z*OJ?{WQUgQ)RO&LazIO}PjgV`X$8f5VbYR`TGFf~leDB&OQvZ_o0gQ-B<7dRW>S(< z#dO_}uO*ALBwNgJQQR7~K~2(V>$;&)&B9@{2=aFTa&Q2J0|~a3{WC47+esMz zocyk)2a%$qtEn6R-!j@eQ6UbLzN|zL(zpO&QdiUSyx7*&)W=fKJlWOsAy3T!VLy_x z-q z{&)y$((c{knG4f0JNi;jAQt|Nm8*q?0~V}7m>u9rG z0s~myCx3cqvas8}>vCW>ne0ZZ3#1#cR*Kz@gxle@C~^s;fkAWqmS$2cD-`8q)OnItF0$8ftPN}XQC|duvUe}qpNjUMOe8z7rALmWdc^%~Y+`C*GM z8S5+m>^M2SpTcCEv3VD|?C{mbIehby?6e}BWtM%zW$zcc=`ZGbpUpMS`WI0mbU7@h z+?M^u=2nRA@a~s!V&Q$s0d$fB>sGT;^m#DY(&@nB6#)fUV>87AW9xqAtsaWWYb}YW zsjD+SqK?Pb(%G;;_V&`cQ%3wqVarBi%OQ*d=p~#@`g7 zC5N}$F}9y$);%m|K-k9X?#)eK3#lL`WOZ1~#^yTkb9jTwp?+A>myfRRC7~fXXzc0G z_M3Lk<)fEsXskockD?Cqg*6 z+~9^v{{b(f-S<{i#BMIBSIftOLpy zM?z8Ap2k|>B%B=TbWON^Ea5`sb~jdHOuPoUB}zQctTtKj+g;s^DtD; zZTZ^RatyUFqGxzexfTtSwT0>T#wi$MLZfA*(L_%!>F|orD16JLLpY7Y`>fEMr$F|h zby$)Kov2(I5<1b7K^pU;WqZ?gq_O=_Uat4Yz<#u$oln3UZedP02I#=U82{YwbH{#e zUynEotKUcqK4i$yYwyqYb|1P+tDo!b&mG%sUq8S}4}c3YM4IjGH2S-cCxyiXo<)kz zkD7u;hj*|JAX zcn9Pd#gho~`ct6FFKeO73!xu%95?-Fl)aS}n{nemNZCz4fz;IgcIko4(~DLE2{59Hxb!wfw5>=<&XMls2dxq z3)N*?a3%-e^nT~?eyu!;x(+yc8fFS};3jUDOyk2Rv}ReE2?EzMTqC+60Y9uY%Nf|m zP&R0-Umn{l;=zq<I(U6=zL8XTnfiJ;bd4-9!TUjDx`W+zbt;Tl*_w|Qq+g0{v$iK$)#AYu4R?AK_ z($#F~q{eW_NO$w3q?-qtE%~TRQ$ZG1_sy0*K_YvbEj?5Xu$Q3Eu%Oi}=DlXdT=|ws zhV?W}3O>UbRPIms0Cxw-{?xuz0GPqp3>c%la1hG%C%ncB4-)VmP#)pfLmaCJ?4LOH zFvs4@87V%FZRXfd1Z{m7haUvCkYk5ZRe!1^IM_MXz_G&xb~49~;Mfxdb~MMH##8{}mAm+ws_KbqS>`T0$ssxXtKiw2MXfkaR$T8X zm%VaaS+*CuX1>k5Neny$t!7ID81IW6g2`wba~9dRgW(*$2N@wYk&G?0TM;P1#=6*t zWAo|P$}02$TaaTAsIzjtALaT=X_fGy$CisB4DJW*=|?afypC8@|E$CNtvog$^T55X z2MI83Tsz#`-O_o@Q?!#y^$|QjtnVb(w5RViHXk_&!^Y?0ybgoct87x-1+?8)Z^kZ` z@-dWx!P$H_a1_uUV`YnEyZ<_y>>oKBOV`Yfc(j%LwX*9I3NM#fWZz?~bJ&T*Qap%A z;6w?W^%hXWeQv8DtshW^lfwN8_l0A>WVFqeHeou%Lo%I>mUS#9a?`a7(-E0sqB=00 zE!=cerW%dY3!_yRSGmY&WG~hZ>}4Z+Z9$Dldl8Q8MTDfkq`(X)q0J5}Kt*3GyV3Z6 zubo~R9@S2_0j=8UQYM74c>{1{r>(3kWT(rRozCQTI{9PGPSh#QPTM~siy#^SOT#9g z>puUKaNT!OF|BW}soxd=f6L(DdT* zKeex?bDwqVUO@u=Y+O4s+pA#Ii1X;kakJ0Z+;t+^qbzdV+yu1UcQu?MsN4sw(73rC zII_oPR(3hY&Gj^Hj$l7FvjYsxV3@Qhf%KF;`pK_VE`Kgq*Qm$5mH>7WLS@zrK5&rUFI=!?Ut8gWE8F)7zF zmd57q;HRXsUX*I|>AE*Tbyb!Gq9sPGSJ#XysP%ZTyH3(yKVIK8%tjJ1Rnh8+A{W+DTcgM@o6mtR~$UQR0(sBn27sW8&Z2M#dpT?k5O&q4s&yPwf& z+JhcQTWr!3I*H{v*+x3iYmo-*1%X1?vW>-sN6upU!5aFf^b-sH5J%F_Lug#+=Z9aY zpMETTbov=;+_)VWrk^*_eh0B8{d6LqnV{5V}S%6(SRjt)p-ffeN9lp3;>tR9s+*rJk72(`t1B=f*B}b_?`(_e;MgUDKQvzV7{!(2=RJj~A~gQt-|fIK z|Nh76I{)qj)&YO)2Q!QZTdr>OFamVW}q+$lS$ARBk%))za85UNSdiB zDgvaPfEdNt?8JCvQDQa?SAWI|lH=yLqsrm_N|R$L(*KqmPEC#?AqSyUIr0z#m>hGE zfE;fYL5`8p*w^smKab(8xw%Gq>Rl)Oc6n2%N1M^1th?xw@48- zZs+0H=N0Y5NtgwjE{jgXCQuyNrxyiu(0)K1RpHED20=J%kdgS!45bs9TwZ;y^M|_NE`O z9k|WXjz)|dYcL@KgB`p3k;2d)MbmqJ1{2hv&Fkr zZ4nw8xtM9>eCnaUJO=kp1v^k6Juwmgh?6l}p*v2FLL}L@iH$GZdm)cKh--@u<4k~n z@rGAVCHWq+m>?%k+3o(>e9Tc6n`J}!@N=XG9L8Az*^AwvSc@Yj;2DMMSoI^|-rp~S zStddVJ9a!B-W`_hXx_NdPYW=%>3Jtkm7xmaY;0)=Ojiu8ZvnIqHZiys4N~`8C?lv~xK}0zFbApTPcN<9M`6LGp zsJw`hvVRfW2iLhaGcx5CYM=wc)3Hvzh}VFt#u_)gjs|{6pJ@Ci_3s;{pOF~G)|;^+V`BM6F03=7X9+hm z@R;aetWEZ(>}{pSeTIV`x-w^_KtbKNH|;|V`37V9T<}KuBv$o7zHvq|k<^G-wG+h3 zXx1d(ZPi^2UqpRezlZj3Bd%w$u^ssG$Bpv--pTb54sF09;>M93x`f` zY0>lsyNPM%Csjx5N~o8*CC*JONWw++8l{j!SR52`R05iSFsf-D1vxEc_$-AC&05M# zb^;%53hUTUj)ovebwX3vpBXmV6t?_pOkqtZ4lG29#~)2kyI$dXa^muKq@J?rlDDv@ zmC}*^_5T4qox#q!qv@&b2i3ivINBe2U0>$nAl+$?DO0N1(H9-;R-c7 z`PKQ;4|HKw=t*H0S-AsHj3fiA;{fZPMQ8n@g_1hyXZq@KrCsk%$S}kEv$0UZjzJ<8 zN((J#!CiIUNK(VuCc;CQHL(0G*?V8I78Kk>)Qn zn=hJ08SRxvYt+pe<);pRL7FYu$);%ZLTYreu2HLTs!tK^S)P|1FhhBb$s zXQq;rP>WS+i`jI+ULiL`ljK{Z0v30v%^tKtPS;BiZPK7n9qv`N&F6TV7g3wbLv2>l z9Rk;565uwV&wi+CB!_cRle8E>vuUg+-*M%CrYy!OA8ClxuV}xyIqrhBB1oG9#tRRc_o^8=^|WoQamULoJ$wrgv)GUF5@8MGEG&I zElDDTS!0Wz97wev^NROXk#2jFw@l80!NVtUwo7a}zI7}Uzk4?NfHF2W;YJ7LEffc? zVYf>pth>@oBR=UeenXuXI}o(<*A7u>N&k)VB8b`5MX}XF>j@N+?@H(iO$b={H$e4t zDVG(2gqE#=C78yH59dg&oRrR71G9mn2DXEM8VD*?)BsLK2t!;=;7Y4@GePX?FgHB9ha+!)P6+yx;xajHpVI2QbcUnyuac zFu`p#P&8$@f|d&=xU~jaCMH+lt{^fRMNpFE6Xi;c4GkmKoahxTTFDD&``{GOEviT~ zL>st;L}HT%blyPr*O>JPnHor@K9=E}o*^~jUZDnJLsWq`*%IAjv2v&E?FwnfB$%-E zftfPAV=aOQPSYR?@wj1tI)-})Igia652xTElORPJk4(WsCLTl-c!uP_B~RnSG;C-L z&~8N_59=MaO{QBB#?sYMz9QVT?=Xh+d${~X_h(^xp>s|BrQpB>5U?AU_$Xi@B;bc7 z1hNy2Q>Y7k41EH30$OhbPDJv+G!0GibF?XNMwqyLC{dRMrocv=2?$PRU6rM%BG9%F z+8W6GHY5x4WOa2BxSP`tgFx+|hmfYgMAEdTCHMh#$Q1Arp6;I&*MmY)TG>k#4BwWR zA>be<&L8fh%14x~%x;Vcd6>OP-NCz)F$p^-ufOZicF|xs?P^AQ+@)({%T?HZ2++T% z)oiGy-YL>X#^-m6;Fdb7M*pH#J5g87t*Q?ef-iLD-E3q5kmo;wYz37*=j zZyKu{dG=}1v+U8c98E0gAN7NcHGMDfBm#<*k9LFT*F@yq8<<61^6owKdm1me|7|zi zo8SckmI(MFypoku%tCoKE{G63N96kjED-Q%QST$}hye$+<4?Uph64NpeY5fKCL$Blg0;k2LWX{{kcx&cs zBmO%2JN`}js-L6(Iep>z>J#v+11{g;wQEb|S}K z6pp=^V?PbYcFkaX$Ax1BhZ*76S)4;wI9BG^+;HrCj&+1%3wUdD!m&4V?CfxCZ&WNX zgdU2*Y2V|tOTw{-E@iX@;n)S7_VRG-l~J+85UshxY3n%cs&H%)$KDB`v&CZ0Awq_1 zj$Ihefr!vrSvat5`hBPTL7@{_*>6j@jPh-`)I*uM`J3X78VjH)Qo{BbZcmRCZ z!*2_K77xGONjOk`lcjt3?I<$z@SA{R1e_pXs(={`(!+0`Qw4hXt)JB#HQR*TsQHQX ze|8ZbhF({We~&1vu~C2T=kOj{Gywm{UJh^V990Xqcj6tG9YUI7OLq)h;- zPfwc?q*=$rAKnaUsk|Rz)I)h_!3uqQFNkFTBw6#WbHUVV;Y1v8md;yCDq=!%m?-r1@z$o7+ zV5@*z1Z)>@r+^&-b_>`eV4r}BfCB1z--qRMC8Bs=jy2p)T!FcFP9e715sJ>pux_R>-}fdJENuD{YUo)d;BreaT+ zk;Wr|MbGH_Y&7!m3J5%mdpFY9c0zLGACW{;i#VsC(}vbUOzuCC6=rD7EDYk=OW#nt ze<5y3^`}l(t6}$pruLvSNnd{f>hpF+(=1L+Pv-5NfQr<75@o#yNHFR}euMy@$AuVt zhQLk?zM}x|PknV7XK;kF8iS+=25lOHX9R=2oWVB1U>9cq)`pEpk`$H*CKrJT%12W< z?bi8I>v`pbYeJPr)*?wvE(K)IYDdw>)7)%!)D~uQa(#m30fO7o%zV^m|Ll9G{>U; zR;{IOi8>qJl0WrxPQbes65XXSoFf>{;tUsQ4Ev%o{99CpUm8NX_%?$}_!S@|jMo^J zBOFFbsQM`=XQ`aoDD$WGrZO!?h<>Hk(v6}eA8+Ztw2;;tqqO8tJyC5SOu662hD5(q zFr3C2uGAQAiOR4zs)Vf?!%r{ax(EQGhh~l8&ZrC@jp}H>(imBf+35f{?xx}411$8+#HqR zGcbgZ@G~Bo3?9!^i+=vpJ5<{6 zkQ5s5x&&SbkVI2AzgbBCel9#`vVr*c6aJWt9sI8$TqfR$;2X-eU(4E1es&5gKLY@_ zzH0t(ts*LamzTd8S?(3(Pw?_xk>!b^{13eRw#f2(usuZl zujl30MwU+z<;!{b;>hy7*fyg2m-6yyk>%4x`PsbujL7n5vCYK#Pd?yJ_zobf|Fn(B z`p?VXj4W5My-4Lx@bX=e<*P;cA9(p~k>#IaJCo{P&&#ikEMF_im-F()k>w|e@=JO7 zw8(OL=AHPL@%~dYdjBw^nEA&nUjER<5&eG{d;L`Z0$zSNl0V&yM&&2)@;Q<9`*F#E z%0K4v-5go}Mp3?xmzM+R<+IYgOH_Y392@po3=n3YS8#ch$~W-(XGZX+xjb+;XtdQW z*4ua|2ECKata}z3k1^xMPxk5&8(!6M@?5iIYcKm&VBgp2pX|XN=K_ z_lyOJicX1-F>+IefT;pb5O9ouqXkS5a3q7j=o}UA6_FwA<8#b(0+Yo~x#zM|?yMpp z*3c>U0}A38;9tcl_nkcml*r%S%i-_(IP@ui#+KI+$Pj3p@^r)HVB3{tMs)yw@|%@} zjIAqcJV!3%AfJG-_Du&I$C4!MiHZ%HKE7>;4LXvuah zxm`AXnN89g1wmgn#vbF_I0+n1v-knjlx1lww(t+0i-6=~yZm{VxS zt%XX|*G)AdLpyE)juCKzfT;pzFi7EL9aW$mx9gDzd=8$W{W5w(5YE6^aA==}NY*?S z(;zKbcmW&Ut69NZD!|J{sKX=JTXyP)QwKo2B-p1c_zT6~pN^Ml2tf;oS<4>8K{QJN z^yM5voP^U5T>#yL*&%8GJw+ct>5&H(Kp$u1rVIg71)Lz@7y(BMm>}Rt27gfiMI8LU z5H*FSr?4*fQ556>Gy#ZzCxAXdRsT1DHvMk^r6|(XBx`Z!|2F~j16=@RQ6S--iz4Ia zzeN1Zp%OKI+K{36Dc~3ZCkU7-U`k%iyD3usFD_D)^A*1gZi`#s|2TX?OHg1K7u4MFZxJPJnh zIX!RL3kcNL4!?Lh9gj`mB4rG4&(QN7*k;JYb^dI6{5})cTj|{{zD!)?#SM)}Agt4C zmVB8>l&~RTrG$(G?h>PW>3o?sO5`IUQ=$k7C*32}&E(0<|H8Pq(2RdIcn3s9xx-iN z#?_hKK&(!J`V$JqL2T5+(z9SMu=B@*K@mv4L#*9lX@_}HGIAQo9KH&=4#Mv_3w#k9>%m;X#mkWGtN` ze1lf{(SFH7RNMpNZS2_`#(Q@^%#3F z4GG+842*ICIG~&xg0taoUZK|ESS6$b$bpJmKwp+)Ogaquk(Wb2#+NI@w1m|2FJMG> zF>`%{1w+#J^zUodp2Q`1kiC`(yqAB5f9O&i!xy{^eZ52c_Y!)CrH^SDnr&kVlTa~a z+R8i#RQY(vB?xF`j0AsU6pf{~Acv}|f;WiWR(31Q(H!U#l-t;2UBDN_!b&Kl#WxC< zAEWlaB+f^vbT9ZUwZstvbRRU-neUK=VTqawn%NzuP|^WT)=p%`q*s7Jk04zqN4yGq zzlwsVl?U3H%K7^#PzgQb#xe2t;jmg}QVQ5_W)@cp|A;z_v>WUoR>nIQGJ=90kT>H^ zYAgpA=%ePKgS|&HjRhntSafjBKgM~TLcEM7VF#n>c15tfiC7w!zsoo}c^&?w96B?A zDniweL$w;1^V<2im_WlL|4nfC9vrr^N8FHrYYG0-7=Om8sh{E40C|iV5Y>A~Zn$~= z>!`Mw^+YNA0~2-!yDJzp-4LURH3=yUeHSo^VW&}>EHamP2Ydby9WTHev>~$S9hZj- ziN3S;GmZJ3=o$@Gv}aO#oW>I5Tm|o-H`H@gUee8Dg5`2*b}Q!ugDhpT6nsk^5q)?} z=)e>jb(__Gpo{rT|O@=Xy8#HMnk&Gtp-^A_>3S+(WZ!gLA z0aE$ct1wqU5r4)#tm68Lkd>P2Gp73$@`z^EHYjmD(s zQ1k*IX2PWh!7%?DWL~4{53=WN8Eqriz{vBcWytn2mE)Zt9KBTxoTVB2&m&D0;O0jB ze$joL8&<~t)=^1JaB2%Nt5f_+w+!}~oRzm3WD9>JUD99SE5 zfYR#I z8&!pGco4(IxG*_t{1&R@My1f)hjq?Uine~5Bq1fj3`^t_|CUCU9_4Ria4B&4Sd$>$ zaB3ndcn`wtDKjoKJcQ0*SJJQy(7547=m0D*na8liCT3E_yoD>n1|l>&dW)GsUJ3-K z2bo3}#*(vlhd!FXQ!is;vutP)!W7z-)zlRPxFwzQ)L$wr+g`4WVD zkDKW_%Ba7QmH<<>7&q)68CBT2Te+~mLk%>OaOj+9!ZHydaSxN2BJRzdU`@g%F=bIs zNK7k5Sc3#zd{`Bfghv`?So|FcT50BrJQWZEKHiOTW#MUB^m}ZMjVm%Y?w#Uxq+P)jmxIsCI6mgu}R@}@r?FA9~ zp77pi1|!@SC6OvGf*hpsw5V>&l@ac?`KY0H+vP&O69A#szm=mLklgm9=)yj>nG5?i z7cwE`mkQe;gtc)mW&Qy_Sxn~*+r%m>Tv)dzEOXs|pec$01%TuWja=CA5O&`1sG2nj zVJ{ZKZanK3YPL-XOA%9bW(0=CKQLjrXM_vestJ3P##yWob_be-un%qF!d?Ple~TM& zqPW3|-*L^}z=ceB^UPl;>~6Q$^5Lfz>Mj(}!OjOe&9(~4#(%oOPisf}E6 zd~Qi?c5Flq5oXxP{RVB2kNpvlMs6F*0cqqe#EnRL@sM7j`Z>+@2=TDZ#ny$i z?9mKMfg)0U-I{pJuxAVL_Mt5@Y%dp&3_CYMyr$o9?cK@6O8EY?pA%1EjYTmm1-wYf z`ZURyVVltmDQ-NM?4f>=j10TgxS@S0)z^lE;^(5p3DJsvRy4X+#-c4n%b$w216-_7 zwEYyUNvxXz$)0rA4vFQt14EUFAr}VeD>6${A1WW9vf15Yt_B zrA`>~1MY7u#8O$V4WqFatXuevx~3c}0`MUcz$^qv`6E7)76X!8nJT!E%1NVa1G4@` zwk{gwZ)MOV*6gFi!rtU>7v-3{D3HznEFiqI0i@gO(LHt@@A1w z5_ujoO=1Oxcr40gQSKCZ5$W*?E2cNUTa-75e5=T}iF~`rZx{Ivk?$1wevuy#d5K%f zAIG4{ZxZ=LkvEHclE_;{K279pA}@=)Q{?kSzDVTDMcys)4IekY)u zjvY)c_s!g2NBKKMc{iuOgM0=?_V);UAIJL@Kx1=0t6gB|JB5ca6Wj`?y4VkBg#ECc zJYox`BL3=3j0Q|XqsXz?4(A99T<&RF34Mp!*-C*_-QSCS}ir~DhZi%8_#C_hfi zH&UMN@)6~3%HNCIazws}@}J@k8B0Ytf#@;kKtm?@w4WvJXl`5sP> zw__<#ukP(w{QW%adbDqy8E*j=Z-ThZOP8^yV|e0m%mbeIC4p98)aOT*==Vf%) zTbd51;iH){Ua5mG)tn4V%ibU9E1^Cc-U!`ES0wPAmL0IP4r4MlJHj!E#^%EiR7Ybr zHg5vP;cK9;fEb&Tk;(PdAcMEXeFD$G%k1eD_x#mq;yIICAKvVP*S>h>@P6WrrMPr+ zM0p#1!G|PmcK_x08sl<$;uO#N-rdTuW?-QO!fXZx7a#2SPKXytd~T-xF?ts>D&pFX z-M19iir7mkRfy3m5(SVYn9&#oX#q*L*?11Tqr6Z*+?wcq4I2qO|K4r2N-(q#A|?%nOZ&&cnLQS z(z3veugBQ%Z5|UIS9WsxzY(1%GPCytF*dg_G&-eh5{yR5-lbrG52bhnH|+C7aw`;D#%2k=#ZJZd9b>_T2^&c`ZI1)K4jNlF5cEbiIKGF_@`4 zamRDp&8qPt9k(5VTb%M|JvUtV>kTXv+;H75Qnq@*jf!;KmJ4o4%0fLiTq5iZd`TBI zoA#vXh9Jgq=0ZHVKf{7g^Ww?LLVP=vUUoN(dS!R`SH`u;zB+v2=@Z4ml(EK!aq5(P z_#y?f(`PNz-!;0?`!-?l@TK>V@-ijy^4rI#MfLep{=5l3dP>~sVHY&tdA=FrO*G!} z7TWhX)bXyizm4@Qvi<7g+Fz=*f0^1odX2Zi9pN1hOaofGg)l6Bz;EE%_*xLupJIU$ zjLolMd^>#C<7-+M&>R18Ig;K?LK>L~iSYj8v3PU+bbQ$+5%)SGd#Oxc5nGjnkH9#5 zb!K`EvT+u^+WKiddo_Ui3cGbL@Rv(m_Y|s{_-FR;qRppm&ESn!vb<4Wh7SdJl5vAC zq5!?cQrQo=5ytRFK+hRy^CI*L9^9S0UuRH!-)ZcRviP#VyGTI##_N`F(l?Vkb)>St zFb@6U-kP4D=y?-nQm#+ z*B|ai^ST=|@r4B-=p!|ixL}PqhPPWGUgJh87M$rbN>*d@d5GNjEU`?%?@Q%y69j4+ zz`MwH6H$_JBYVGQ(*WMINwYVL?D!tugDl=-Z;0MyO)taA_2HwqsKH})2^Aw~raAE5 zc`Npn4_%PbLCAM$en}^mo*cH@uMRRqSJX z@zp8xd)>PINRXE4`wg9Vy*<_d^c`z3pqB9+0(>6~bIN_7!FQ!NuLI%(D#qsPfX3&D zAi^ig=jbX#sKQI?TGuf=1$h`nxdA%BmwRP={lxCYO!fv|J-!=A2i~%R0kqa))n1vj zgb{O9hwgmC>mNy1>-UgFbWTv#hREO;J0M<}?pNP|cMZBm268&^-XFY=7IzV#B7KUi z2)5ZvMMb1syvv8)Ba3VO4sV|v)9V?9d62y>_IaF!D?yT_>3bLtu^aE7rg^pLdswcC zy4Ug+)i$==OK4Cu?2Ao=>1N~gVWo8Y!czWK4%#ml+)IgjA>O)BP2B$k?ubt`TJc^O zd}~Kpw;t`$D}~6l5Qd>`x;4W4CRunAc@jh7#ShlNO9-xbQ%bC*wb{~$CPU4}u@1T>_KVP3M7ZYkj;fs4>}iU;6>7c0>mo-EjynStr8 zQH^0d-Xm?pN@mikJCIH@DZO<=9c6)CIu*C0DrqCIo0084gu%J{&;{_nBY`CXHBq@w zs6?kF-#V^1otCi9s0TKh_b(%A44G8s3A?Eq)4=o4<7}$IJg^&b=nrRwtG3ow)@Lus z%*~P1PkV$U&=6Yt4(Qyxy24X#b~Ti^+#a&8MyE=|ohBDwX$h%8BVuAqf)zBBDv0`) zaJ=_hI9?w6w1as;O}(e0dS!^4`o#z89^z*Q&Z)zsIPxXhW?R#d?w)hrzU>SEScQNEzKw4xr=ZddUtGPcN1 zmFCxb-1VM1$=Wa}wX8U8s+CextR?9sJe52tJzb>IR;2LMq_Q%Bn>;0D3dc<@DRc2u z%A}GqtCYt0q@*XKPC83ZnNnQJDW;U9udqtV$qYSpatbOYPvV*MG%A_QGiB+5d0J|E zGSI0EowlMB6_~}AjHz2TZMbB{G22z`szsNf^SX*kS2c7papJ_`e0Ueud1_HIZCYLZ z3M6^uh@xV*+f`kPz@l+BFIZ@XKR)f(lyo zl)KDGS5EL$RJqh@brsjTK*S2`T(vN?xrX^*9hcf(4dq|VZD1}bFRre3Rhp|R>fmW5 z<-@68bTF#AX=XG{v26?*C+9#SL?X;MEeeSmD_QUhX`(Qw;I!a{dVojGZBc|}RNxuVWI=GywP=1b9?inN6x z$ehTr+AE-Z(l&+{x347Sc_vpCyY2JxJW~q`OBx!IlanXu`)V)A^CTxjxwVC!+TsdN zoxLO{uNePwa`I9O^E@e)uDUuql7vOpU0hLXpG!qR<>W|{OY7Xyq(ycqCD-LCmZUTS z*~OG(M{-J5O|_@CrV>4?#^4p`5J;XP$}_nS(H8;fNKV#A4~~;;H`?mgeEZw6f4g=D zhgZ%RO`~5Ld9>?oTNw)1@-g^7$4?dsq*57vw zd*Gjv?H?amHq`&?bOFg8o!n>B$$&nSJ=%83zaU|7G2{uV!4d@w7Ky z{N~7v@ozpISoLU%;GbgK{Z%WaZ7)3kd1sX$#)xl_Wdp6Gc)jea`@}#Un1di z?Vtl~C)(KbG}7$ADvFMEYCh)7q0>*r+M9^oR|kVur289!K^rbNOVS(YNbsRxkakwB zfV7ip1Eif(Cty2Z5g_f1x&dh?v=NYYK-&Om=d>M=c1m{wS^+x&WxyW5BEUYt2Ecy6 zHbCiN^aIcg*a>I_>;<#|_5(Tr<8XPT2+$1J2ABre3Frju2P_9PKN1W!0y+V=02Tr6 z1at#-14_FfC!h&Xg1*dviGWr>E1(TfCO!TWasqY&HURcN4mkm(CxXE~Koj5qpc&8v zeOm#O0NsE#z(&A)z&1cPU^`$dV9_&>6ZUAsTZ6X%_P>Jmpno&o_Sy$n1SsKRcY8nj z1!%(7Xd~qTI{^E!71{>-&~YjUQp~jrq?iU%%$XyG#nJA(1$bPUmeM@jc2c})R(#?d z<4LRI8l@R$OdmJdavoKs`q}t(-X9D?w9rBLrTBFK50i!t!h7)B83n%y`0Y{f+kkJ6 zf`1J7Em82V0^bIFq&$a#Z;gVFMSmNk;LifSAqqYPcy|;$z4W&{3ceKhqA2*az~=)G zlY|b^&t~AAz~e%H=pg(KK_98lJ%Tf{J%I#|bp5%$d zUjjV!cT5ERLf}cCk@!mB$zGB8X5e=M4-h)2zgvOW9)TyHd=U6{;5Sf(%y?7NkfGNM ziHGCkpn9(YZ$eBs&i=s1MZw1+Hb}saAO_+fKJ*TSfd`MrrvTp%yd8Q}52AMfpM)54 zp^5|~d@1l0gU%;;#Xr?4ZJxDekt%I zkDmS#(0hOeK?%|?e7 z#}1D-WyZ(loHXR0NM*;zkp!gUW}@F03|<&pEP6>uQ~UmDqeB+Ni60*26_c@ z|C(GMa{q?(;2%0W-n@zQxWRx8lz1da%aWMJVWN z!w?v~iTq*6t;6FJfq~lWT)!mOgP<>hTmYei#>ewOq`4$t8!MVD+Sr>N-xf3Eg+T_( zLh$n7m#^?OR_qtZMB}IV((L%gAwzG9KA5w3FEIAN=6U?A*mxUAf}Hz*0pIpvLpu`& z5fs(wAio=riF$igczmU@;O(g~Nt-B&JQHhpad^z;VQa|XqS$aE z5UBRSkQ-u}hW1@1J#~U%=Vj98C(K7WaH65@GU<`w2Bg0oVc3GS(eSZT`oK61m^V*0 zbj*`{r%>q~35Mt9OV1=w`te^GzIRH2U)hj8c!r_zGU@g+O-Mg6+VFR~wC`-gZ{|ub zo@01@j`Wh*&^|}H9aA0Jx=M~Bt!2!>A57sck`sZV{^C8m$r;E zJTqVV=eSF6bxL23H}vF6%@Ym1xzZaK8}4>W>n9nuJEbR64BMR2rYVMAhqQjG;jg*U z*HaC9=Sq9h4EH-F?=-^)bEO}r8Co3DQ_~IImq~A2V(7R``YglHJ6~Eq!_a=2q|6u! z{y)wjLEp6*AkTf7ME`9jaeHDWaqwjk|JSle^xLwD|9jaa&wV*0&lfq=y+>wI_m0@1 z+gIihn?3Ul=*0gX|Eq!jF&fyJ!bNop_}?kGetoG=Q=3D?eD~kk{{Qm+pQ8auMC5OX$hV372wqLH;w?>dsB6*k`+1(0pmcOTYi3YAXI9-1cU!ZgTa>Ho9JTzb zW5F6CpgRrez#PC1=O_-y>OFw-ZP9%uR-)7O~3&Gal&`cXAXH!!6i zVWZT?bSKk&Op8ocm>y>OFw-ZP9%nj!DrWe}pIxJ)pN@TMb^#w1nz7z^Pdsr~U(@80 zhmw8qL{GfuPK(pm>Apl?Vo<8KrJdMBKQE4?rBtW7#Gl74Fy>^ZlKC6NFI6(ngZO1i z=1UO2T**8O;#Vk{uR(l^l6f7(uk`&{5dVmpVmk@qSE&=M-yptKZA9W9#e2EdlJ>e& zZNq!HDEw-5+B|#*?{%s!b?#R|jB=go8ui)dqVQ{dKiqn^Q(dRT{|52v)du_JAiiC_ z5sBZRqULF*x>1e48f#@?t~<#~ZbacXE7wk`LZ`Y#%{lgKaamO;XA_y2^V{ob(8uRB@YF0 zcfdXe96LN~@UZ@=jVL~sprHTpao=d>5 zC1IWPCEz=tpEI7lA^Va?+mwHS%d01Cd3OJb;?b`KpIWcQ%{x?FQnVxCLqisqeb#4y z-$s7p8H>+bqP`EDn$!nRkyf#r;p3a zv4M%w!ys_tKg8vwUHWepW0pnW?-$$P-)zJGhs^)XPb?dnCzR-&bCf(UaQThP?_;fXGVe)H~hJi=Pe+W3)$y;nE=)OsZ4ZdA%;eK^7euVk2 zv;CNF0l4=|#$znM^!F{sl_TeSjBhY5`{R#cBTe$V`tJuGCI1mFzro`r@;?PU#xl2( zSAbK0Pji2vMw4D=KFZPCImU;aak&+a)Qm5emv2gAz@y}xjx$ z-tikx8~)G_uRHQw^E*?%m4m&e@5)i~^g-byf5I8Bdx2jQW}_bD@<*L<{5j)iSpPEa zF99dNafanI-@d^2buM3X_;jEnB#(0Bxr6a}wl^8C&jF9>*ObA*XP4~+y-TJv%Y14M zpDJ*&hcj#s$eQ$JF2BzHq{R3`j2~q=Z)f~Bz@y~px+)r<2TuL%VtH6iYOPKA7l4zW zIq_1=wD<_O`$ys9=xqyBK;_>#Y0GzU`D=hvyFYXEKgM{1aT&)d^BLlH*O|{@gKtx@ zUs&Ke#=pmW)*b$@Fz&89Z!&(A4Me`RUWSD%N}o3aC;2yiY8#|D4@$kjyCU|1!)^E+ z0Ul-N&jL4g_@w2VvP5mePpCx6vjaGlKjQRvmT^_L48%?zXv61G;51&3ycjbT*lg7? zgKtxRW&4ENH0e0=PcVNOuXmZx6!W=>%d4v`|8tH#YynR44{?9ZH#XFH9C%cJU*Ymo z&OCaP@p(rNS9Dqa>&L7h=35vpA7i}6<9-LrxdA+?-M;{j8n0UbMwPDuCwo{u6=Tkp zc)+Q@T{W8*y?q@x`GEnpXQ}4+m!zrmv{ZrcNiaX`t{p3d`<&5{)FXUx6P}6n)1-kum!~4IxxX;E0pGd zcVQpy?w@s=^6S8jy?w>9GT+*9`55CN-iJvy!TOk`%XR)}vcES4Gw{nTDX=gQS(#AR!puj<8ebs<~Ud9PY; z=xlRU;fO-5j0o?1yuWv#H@c86mX=F8Td!x=G!8G|*g}!Q!gan`sjQ(&OHQMt7bvRt z?@1Ls1(NJu)XU8Z$DTqUK#4_7fy0wvhdd%?2lVs;qGAh$iwmE1f@KkBo6wm;xsdac z4R0bdfRI`zycSS8*^l7k63#u;Jrd{sW0Nv785!QAHKM`wgl>t#r7&e^ zcqbh%(CNuB46Yq%dp&kMn-iio{Gaz z_D=@Fg)z7VZ?ak8u(5X&j8H)~9yonAzN%?vD4^k>@by zi;S91kEPJ2iImsNg;fu+f}`4;xdoJmb}R=^%pHv*nBl+ZTCAqNq-cC5`1>gb@wW z`2!RGpPsH%0=}TwQ`FASX&iGfMhB1Pdt99_Kml|- zZ7Kkh^V2xLPzWf6G?Jl12&5UY#Gt7r2Ns&8a()(mb%M?z6tlTPddk*`GQeKao^OGo z!u^wU-l3lsswSk)m!_tQnIueb|71U}CCOByM9bK04HE-RWOO_8ASZ!}7k)AW>&RXV zORY?Os8lexQ8wcApL}8_OOhFdqv?s6y->5P&hWdmHp5`Z+d`k_WCs~`>q(4c3T(`Y z8-Lg$v`3~8v?P~JKUO#|i*rcO8eMn|m;lb(z%_@aqp#WS1)L$t7xDqsQZL%{AwqPl z3iiB^zDB#-iJ!14e6Sa)kB_TZJiA5iqC@|IDTCISMLa~}Y@6=3UJkawr?Ux*{<#>&jm1_+939?W3 z1W!9>fs$dr8FE5le#RAJH4Kh>xtgVwF@mQlPX_8cb1LU&#Op=~)8DeFM7i+Y7e2y0 zu$Fu}dj4GmyWaZy@C!`DUbBh?>w4HY-lv&;;Sq+YGnq&@Y{lm@hJX%yqYC)KZr_QK`@mShf#sXEpdq)~ zW54*L6cegeSe7v2qzN#rXR+N_0{gr3d>oeOCq z=s0Nm+bEsaclbyAE@EAx6N71^DxCSuRU08igj@+N6q^PSH7CQPnQZ6HNRhewbZ+TB z?66Da&DLpCKeNyG5XMS2cL^b$NrCj@mprHNJb~$1#h+63XN8L~Lp#RvMIM2>Fp_`u0^qVbOpi8Mf znZ48Sg`wO*-wkV$o+hi}c!!JN4!UlHM@=`=P51SYrXREp$Q zQq)y=!B$VDN{vPho5js3VIP}e$06%S?Lm4D%y`(oPVc@LH$YF2fnB>f2z~*Z`QXOQ z-){T6ZS!0L4QL!X&n>yzAAh3z54p}{O-66-4c7%cNG?b6#j@z|QQ2Ba%g+;FFfM%i zK*Nk*CZGp}cKi4OJzvu!Z|JRx+wZ`TCsShH6Y@|WS_6X{&E*3@GgEqY`2cn|c(!gd zD`Y#Pqj*EYKQ5q0X?sYsq_(zcR`?kZa)kZ}w7djSSQ9o2vi)U3Dy8Zl`pXcqZwMMv zh*`T-ys=jCvJ0SI-O?qw!mj`n;)~18xOteo3%>?na!c99l8WcomQmAEuWs*%b(mtD z(YRMHl(STUuWDsa#f?;PT*eox$a;8lq~i3t6NReA3gU$&e!;nv2NTJmsT@4H`2`OR ziSYnunAvxqmWNz_A%}{@j6?umBW|`*%7IDMqt@+h701>@;niS;<}JSz{x1l9PsXQe z#NyZ_adtvK!MG6qY$jP1$JJTHm`Z(#s}=eZ-$2-hNn4l-q4(za6zR8rf*TNe1mF26 z5lpP4zI>k=0!F;0eTnZADsj6gVp4}(FdYY_7+R@6zr)@Tx|J)4{8CQnEQ(W1uH+?N zQ0NA?L-NxyI!)i9Zx7amZAk>bUh+fl(LbdyT|h z3zc|k6fueV(3%>^wAPn+MxpdO0If;BV+cLu)R(wNp;AtGi2RcOs#9O$$%H;a4YVYe z-#2itRep)16pFBeKyv&4ZLTlflz2;_^Nzr=05_$+>(rOHOrh5cW3K16|6`}V#BT~6 zb2{LNqn>u^OPr_B*V+ELd1J$JP4rp(!`CY_2PrRc`6o_NZqwduE}TDw8~6n5*O$1_ z=RaWmKcOy(DDy+&FgHG6{XaYP<$K#3Tz}oszpKB$qdv_YX?qm%g qXNXP7BP{!$LZV@3O7QZT~-xqAAY+ literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4.sc b/source/HOAUGens/sc/Classes/HOAEncoder4.sc old mode 100644 new mode 100755 index d1e09d024f..0b0930dc8f --- a/source/HOAUGens/sc/Classes/HOAEncoder4.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder4.sc @@ -1,11 +1,11 @@ FaustHOAEncoder4 : MultiOutUGen { - *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *ar { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } - *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *kr { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4.so b/source/HOAUGens/sc/Classes/HOAEncoder4.so new file mode 100755 index 0000000000000000000000000000000000000000..0a8d69693b4a937faad4f3c1a44fa174f38d2bcb GIT binary patch literal 73920 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder5.sc b/source/HOAUGens/sc/Classes/HOAEncoder5.sc old mode 100644 new mode 100755 index 1742df78a2..710f9ca956 --- a/source/HOAUGens/sc/Classes/HOAEncoder5.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder5.sc @@ -1,11 +1,11 @@ FaustHOAEncoder5 : MultiOutUGen { - *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *ar { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('audio', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } - *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | - ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) + *kr { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | + ^this.multiNew('control', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOAEncoder5.so b/source/HOAUGens/sc/Classes/HOAEncoder5.so new file mode 100755 index 0000000000000000000000000000000000000000..7aba8e1b89178cc475fe63f89f29994b946f582a GIT binary patch literal 82176 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

    -ZOi-;oD2|E}RTW}?XKt@P(*Wy|!D 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAMirror1.sc b/source/HOAUGens/sc/Classes/HOAMirror1.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAMirror1.so b/source/HOAUGens/sc/Classes/HOAMirror1.so new file mode 100755 index 0000000000000000000000000000000000000000..663f042874a4adfe4407a5f3ba513728435928ab GIT binary patch literal 48944 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 D5;h-S literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAMirror2.sc b/source/HOAUGens/sc/Classes/HOAMirror2.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAMirror2.so b/source/HOAUGens/sc/Classes/HOAMirror2.so new file mode 100755 index 0000000000000000000000000000000000000000..75b687705d35b419c90a1a6471274df5dbf58397 GIT binary patch literal 48944 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAMirror3.sc b/source/HOAUGens/sc/Classes/HOAMirror3.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAMirror3.so b/source/HOAUGens/sc/Classes/HOAMirror3.so new file mode 100755 index 0000000000000000000000000000000000000000..78fc777ad8337e5ec25471eb9e62b9e69d5e3db1 GIT binary patch literal 53040 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAMirror4.sc b/source/HOAUGens/sc/Classes/HOAMirror4.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAMirror4.so b/source/HOAUGens/sc/Classes/HOAMirror4.so new file mode 100755 index 0000000000000000000000000000000000000000..2a238995e9a19a960bc84bab04eb2a542d8e934f GIT binary patch literal 57136 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 I6<_}U0~z_mrT_o{ literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAMirror5.sc b/source/HOAUGens/sc/Classes/HOAMirror5.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAMirror5.so b/source/HOAUGens/sc/Classes/HOAMirror5.so new file mode 100755 index 0000000000000000000000000000000000000000..5aba1e5930abdda361776f8e7560786d73c645e3 GIT binary patch literal 61232 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc new file mode 100755 index 0000000000..36ef6d6a53 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc @@ -0,0 +1,30 @@ +FaustHOAPanLebedev061 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), speaker_radius(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, speaker_radius) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), speaker_radius(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, speaker_radius) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(6, rate) + } + + name { ^"FaustHOAPanLebedev061" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev061.so b/source/HOAUGens/sc/Classes/HOAPanLebedev061.so new file mode 100755 index 0000000000000000000000000000000000000000..de837b7ec5b338d3ada9e550a9b2db0e34884f61 GIT binary patch literal 65648 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 Qr^&HUF5>%bf3e&DFW=dQLI3~& literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc new file mode 100755 index 0000000000..1cb177f656 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc @@ -0,0 +1,30 @@ +FaustHOAPanLebedev261 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), speaker_radius(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, speaker_radius) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), speaker_radius(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, speaker_radius) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(26, rate) + } + + name { ^"FaustHOAPanLebedev261" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev261.so b/source/HOAUGens/sc/Classes/HOAPanLebedev261.so new file mode 100755 index 0000000000000000000000000000000000000000..23af2d16d98cef2e347b49860a81acb0d50d7bbe GIT binary patch literal 73840 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 z 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc new file mode 100755 index 0000000000..1656dfe027 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc @@ -0,0 +1,30 @@ +FaustHOAPanLebedev501 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), speaker_radius(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, speaker_radius) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), speaker_radius(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, speaker_radius) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"FaustHOAPanLebedev501" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev501.so b/source/HOAUGens/sc/Classes/HOAPanLebedev501.so new file mode 100755 index 0000000000000000000000000000000000000000..1f99c55014a6a5ee65bfe4208734d830f407a7da GIT binary patch literal 86128 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 z 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc new file mode 100755 index 0000000000..03d11975de --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc @@ -0,0 +1,30 @@ +FaustHOAPanLebedev502 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), checkbox_2(0.0), speaker_radius(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, checkbox_2, speaker_radius) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), checkbox_2(0.0), speaker_radius(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, checkbox_2, speaker_radius) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"FaustHOAPanLebedev502" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev502.so b/source/HOAUGens/sc/Classes/HOAPanLebedev502.so new file mode 100755 index 0000000000000000000000000000000000000000..715de92eeb2acf0704c2282b12c3a2e6f607baaf GIT binary patch literal 90280 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

    ^u+^nc_1&=^|Zj?U3qrSj3 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 z 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 Pmy~n?o&(#D*z*53M&|5= literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOARotator1.sc b/source/HOAUGens/sc/Classes/HOARotator1.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOARotator1.so b/source/HOAUGens/sc/Classes/HOARotator1.so new file mode 100755 index 0000000000000000000000000000000000000000..1975b6c878e20b97638d2ae514db8bf7d6573494 GIT binary patch literal 53120 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOARotator2.sc b/source/HOAUGens/sc/Classes/HOARotator2.sc new file mode 100755 index 0000000000..e18e8bb966 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOARotator2.sc @@ -0,0 +1,30 @@ +FaustHOARotator2 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, pitch(0.0), roll(0.0), yaw(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, pitch, roll, yaw) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, pitch(0.0), roll(0.0), yaw(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, pitch, roll, yaw) + } + + checkInputs { + if (rate == 'audio', { + 9.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(9, rate) + } + + name { ^"FaustHOARotator2" } +} + diff --git a/source/HOAUGens/sc/Classes/HOARotator2.so b/source/HOAUGens/sc/Classes/HOARotator2.so new file mode 100755 index 0000000000000000000000000000000000000000..b8f8aa41a685edbdce4cc37056a1ad8c962ffa0b GIT binary patch literal 61376 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 JYPRU(e+>Bud-MPR literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOARotator4.sc b/source/HOAUGens/sc/Classes/HOARotator4.sc new file mode 100755 index 0000000000..d7a9d41654 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOARotator4.sc @@ -0,0 +1,30 @@ +FaustHOARotator4 : MultiOutUGen +{ + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, pitch(0.0), roll(0.0), yaw(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, pitch, roll, yaw) + } + + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, pitch(0.0), roll(0.0), yaw(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, pitch, roll, yaw) + } + + checkInputs { + if (rate == 'audio', { + 25.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(25, rate) + } + + name { ^"FaustHOARotator4" } +} + diff --git a/source/HOAUGens/sc/Classes/HOARotator4.so b/source/HOAUGens/sc/Classes/HOARotator4.so new file mode 100755 index 0000000000000000000000000000000000000000..f20340a298d190ae4b8730820c54df341065a078 GIT binary patch literal 73664 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 Date: Sat, 6 Jan 2018 15:10:19 -0500 Subject: [PATCH 06/30] updated HOA Ugens and CMakelist in oder to supress debugmessages and accept deeper bracket nesting --- README.md | 6 +- source/CMakeLists.txt | 27 +- source/HOAUGens/HOAAzimuthRotator1.cpp | 278 +- source/HOAUGens/HOAAzimuthRotator2.cpp | 380 +- source/HOAUGens/HOAAzimuthRotator3.cpp | 512 +- source/HOAUGens/HOAAzimuthRotator4.cpp | 680 +- source/HOAUGens/HOAAzimuthRotator5.cpp | 888 +- source/HOAUGens/HOABeamDirac2Hoa1.cpp | 0 source/HOAUGens/HOABeamDirac2Hoa2.cpp | 0 source/HOAUGens/HOABeamDirac2Hoa3.cpp | 0 source/HOAUGens/HOABeamDirac2Hoa4.cpp | 0 source/HOAUGens/HOABeamDirac2Hoa5.cpp | 0 source/HOAUGens/HOABeamHCardio2HOA1.cpp | 0 source/HOAUGens/HOABeamHCardio2HOA2.cpp | 0 source/HOAUGens/HOABeamHCardio2HOA3.cpp | 0 source/HOAUGens/HOABeamHCardio2Mono1.cpp | 0 source/HOAUGens/HOABeamHCardio2Mono2.cpp | 0 source/HOAUGens/HOABeamHCardio2Mono3.cpp | 0 source/HOAUGens/HOAConverter1.cpp | 0 source/HOAUGens/HOAConverter2.cpp | 0 source/HOAUGens/HOAConverter3.cpp | 0 source/HOAUGens/HOAConverter4.cpp | 0 source/HOAUGens/HOAConverter5.cpp | 0 source/HOAUGens/HOADecBinauralLebedev501.cpp | 0 source/HOAUGens/HOADecLebedev061.cpp | 0 source/HOAUGens/HOADecLebedev261.cpp | 0 source/HOAUGens/HOADecLebedev262.cpp | 0 source/HOAUGens/HOADecLebedev263.cpp | 0 source/HOAUGens/HOADecLebedev501.cpp | 0 source/HOAUGens/HOADecLebedev502.cpp | 0 source/HOAUGens/HOADecLebedev503.cpp | 0 source/HOAUGens/HOADecLebedev504.cpp | 0 source/HOAUGens/HOADecLebedev505.cpp | 0 .../HOAUGens/HOADecoderLebedev50Binaural1.cpp | 2657 ++++++ .../HOAUGens/HOADecoderLebedev50Binaural2.cpp | 4649 +++++++++++ .../HOAUGens/HOADecoderLebedev50Binaural3.cpp | 7437 +++++++++++++++++ source/HOAUGens/HOAEncEigenMike1.cpp | 0 source/HOAUGens/HOAEncEigenMike2.cpp | 0 source/HOAUGens/HOAEncEigenMike3.cpp | 0 source/HOAUGens/HOAEncEigenMike4.cpp | 0 source/HOAUGens/HOAEncLebedev061.cpp | 0 source/HOAUGens/HOAEncLebedev261.cpp | 0 source/HOAUGens/HOAEncLebedev262.cpp | 0 source/HOAUGens/HOAEncLebedev263.cpp | 0 source/HOAUGens/HOAEncLebedev501.cpp | 0 source/HOAUGens/HOAEncLebedev502.cpp | 0 source/HOAUGens/HOAEncLebedev503.cpp | 0 source/HOAUGens/HOAEncLebedev504.cpp | 0 source/HOAUGens/HOAEncLebedev505.cpp | 0 source/HOAUGens/HOAEncoder1.cpp | 229 +- source/HOAUGens/HOAEncoder2.cpp | 335 +- source/HOAUGens/HOAEncoder3.cpp | 448 +- source/HOAUGens/HOAEncoder4.cpp | 660 +- source/HOAUGens/HOAEncoder5.cpp | 843 +- source/HOAUGens/HOAMirror1.cpp | 0 source/HOAUGens/HOAMirror2.cpp | 0 source/HOAUGens/HOAMirror3.cpp | 0 source/HOAUGens/HOAMirror4.cpp | 0 source/HOAUGens/HOAMirror5.cpp | 0 source/HOAUGens/HOAPanLebedev061.cpp | 0 source/HOAUGens/HOAPanLebedev261.cpp | 0 source/HOAUGens/HOAPanLebedev262.cpp | 0 source/HOAUGens/HOAPanLebedev263.cpp | 0 source/HOAUGens/HOAPanLebedev501.cpp | 0 source/HOAUGens/HOAPanLebedev502.cpp | 0 source/HOAUGens/HOAPanLebedev503.cpp | 0 source/HOAUGens/HOAPanLebedev504.cpp | 0 source/HOAUGens/HOAPanLebedev505.cpp | 0 source/HOAUGens/HOARotator1.cpp | 326 +- source/HOAUGens/HOARotator2.cpp | 521 +- source/HOAUGens/HOARotator3.cpp | 847 +- source/HOAUGens/HOARotator4.cpp | 1375 ++- source/HOAUGens/README.md | 5 - source/HOAUGens/README_HOAUgens.md | 19 + .../HOAUGens/sc/Classes/HOAAzimuthRotator1.sc | 0 .../sc/Classes/HOAAzimuthRotator1.scx | Bin 0 -> 25968 bytes .../Classes/HOAAzimuthRotator1_supernova.scx | Bin 0 -> 25976 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator2.sc | 0 .../sc/Classes/HOAAzimuthRotator2.scx | Bin 0 -> 25968 bytes .../Classes/HOAAzimuthRotator2_supernova.scx | Bin 0 -> 25976 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator3.sc | 0 .../sc/Classes/HOAAzimuthRotator3.scx | Bin 0 -> 25968 bytes .../Classes/HOAAzimuthRotator3_supernova.scx | Bin 0 -> 25976 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator4.sc | 0 .../sc/Classes/HOAAzimuthRotator4.scx | Bin 0 -> 26016 bytes .../Classes/HOAAzimuthRotator4_supernova.scx | Bin 0 -> 26024 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator5.sc | 0 .../sc/Classes/HOAAzimuthRotator5.scx | Bin 0 -> 30120 bytes .../Classes/HOAAzimuthRotator5_supernova.scx | Bin 0 -> 30128 bytes .../HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc | 0 .../HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc | 0 .../HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc | 0 .../HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc | 0 .../HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc | 0 .../sc/Classes/HOABeamHCardio2HOA1.sc | 0 .../sc/Classes/HOABeamHCardio2HOA2.sc | 0 .../sc/Classes/HOABeamHCardio2HOA3.sc | 0 .../sc/Classes/HOABeamHCardio2Mono1.sc | 0 .../sc/Classes/HOABeamHCardio2Mono2.sc | 0 .../sc/Classes/HOABeamHCardio2Mono3.sc | 0 source/HOAUGens/sc/Classes/HOAConverter1.sc | 0 source/HOAUGens/sc/Classes/HOAConverter2.sc | 0 source/HOAUGens/sc/Classes/HOAConverter3.sc | 0 source/HOAUGens/sc/Classes/HOAConverter4.sc | 0 source/HOAUGens/sc/Classes/HOAConverter5.sc | 0 .../sc/Classes/HOADecBinauralLebedev501.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev061.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev261.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev262.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev263.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev501.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev502.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev503.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev504.sc | 0 .../HOAUGens/sc/Classes/HOADecLebedev505.sc | 0 .../HOAUGens/sc/Classes/HOAEncEigenMike1.sc | 0 .../HOAUGens/sc/Classes/HOAEncEigenMike2.sc | 0 .../HOAUGens/sc/Classes/HOAEncEigenMike3.sc | 0 .../HOAUGens/sc/Classes/HOAEncEigenMike4.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev061.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev261.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev262.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev263.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev501.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev502.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev503.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev504.sc | 0 .../HOAUGens/sc/Classes/HOAEncLebedev505.sc | 0 source/HOAUGens/sc/Classes/HOAEncoder1.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder1.scx | Bin 0 -> 30424 bytes .../sc/Classes/HOAEncoder1_supernova.scx | Bin 0 -> 30432 bytes source/HOAUGens/sc/Classes/HOAEncoder2.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder2.scx | Bin 0 -> 34528 bytes .../sc/Classes/HOAEncoder2_supernova.scx | Bin 0 -> 34536 bytes source/HOAUGens/sc/Classes/HOAEncoder3.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder3.scx | Bin 0 -> 38664 bytes .../sc/Classes/HOAEncoder3_supernova.scx | Bin 0 -> 38664 bytes source/HOAUGens/sc/Classes/HOAEncoder4.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder4.scx | Bin 0 -> 42760 bytes .../sc/Classes/HOAEncoder4_supernova.scx | Bin 0 -> 42760 bytes source/HOAUGens/sc/Classes/HOAEncoder5.sc | 8 +- source/HOAUGens/sc/Classes/HOAEncoder5.scx | Bin 0 -> 46856 bytes .../sc/Classes/HOAEncoder5_supernova.scx | Bin 0 -> 46856 bytes source/HOAUGens/sc/Classes/HOAMirror1.sc | 0 source/HOAUGens/sc/Classes/HOAMirror2.sc | 0 source/HOAUGens/sc/Classes/HOAMirror3.sc | 0 source/HOAUGens/sc/Classes/HOAMirror4.sc | 0 source/HOAUGens/sc/Classes/HOAMirror5.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev061.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev261.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev262.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev263.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev501.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev502.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev503.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev504.sc | 0 .../HOAUGens/sc/Classes/HOAPanLebedev505.sc | 0 source/HOAUGens/sc/Classes/HOARotator1.sc | 0 source/HOAUGens/sc/Classes/HOARotator1.scx | Bin 0 -> 25816 bytes .../sc/Classes/HOARotator1_supernova.scx | Bin 0 -> 25824 bytes source/HOAUGens/sc/Classes/HOARotator2.sc | 0 source/HOAUGens/sc/Classes/HOARotator2.scx | Bin 0 -> 29920 bytes .../sc/Classes/HOARotator2_supernova.scx | Bin 0 -> 29928 bytes source/HOAUGens/sc/Classes/HOARotator3.sc | 0 source/HOAUGens/sc/Classes/HOARotator3.scx | Bin 0 -> 34080 bytes .../sc/Classes/HOARotator3_supernova.scx | Bin 0 -> 34088 bytes source/HOAUGens/sc/Classes/HOARotator4.sc | 0 source/HOAUGens/sc/Classes/HOARotator4.scx | Bin 0 -> 46368 bytes .../sc/Classes/HOARotator4_supernova.scx | Bin 0 -> 46376 bytes 169 files changed, 18399 insertions(+), 4763 deletions(-) mode change 100755 => 100644 source/HOAUGens/HOAAzimuthRotator1.cpp mode change 100755 => 100644 source/HOAUGens/HOAAzimuthRotator2.cpp mode change 100755 => 100644 source/HOAUGens/HOAAzimuthRotator3.cpp mode change 100755 => 100644 source/HOAUGens/HOAAzimuthRotator4.cpp mode change 100755 => 100644 source/HOAUGens/HOAAzimuthRotator5.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamDirac2Hoa1.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamDirac2Hoa2.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamDirac2Hoa3.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamDirac2Hoa4.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamDirac2Hoa5.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamHCardio2HOA1.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamHCardio2HOA2.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamHCardio2HOA3.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamHCardio2Mono1.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamHCardio2Mono2.cpp mode change 100755 => 100644 source/HOAUGens/HOABeamHCardio2Mono3.cpp mode change 100755 => 100644 source/HOAUGens/HOAConverter1.cpp mode change 100755 => 100644 source/HOAUGens/HOAConverter2.cpp mode change 100755 => 100644 source/HOAUGens/HOAConverter3.cpp mode change 100755 => 100644 source/HOAUGens/HOAConverter4.cpp mode change 100755 => 100644 source/HOAUGens/HOAConverter5.cpp mode change 100755 => 100644 source/HOAUGens/HOADecBinauralLebedev501.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev061.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev261.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev262.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev263.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev501.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev502.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev503.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev504.cpp mode change 100755 => 100644 source/HOAUGens/HOADecLebedev505.cpp create mode 100644 source/HOAUGens/HOADecoderLebedev50Binaural1.cpp create mode 100644 source/HOAUGens/HOADecoderLebedev50Binaural2.cpp create mode 100644 source/HOAUGens/HOADecoderLebedev50Binaural3.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncEigenMike1.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncEigenMike2.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncEigenMike3.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncEigenMike4.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev061.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev261.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev262.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev263.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev501.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev502.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev503.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev504.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncLebedev505.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncoder1.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncoder2.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncoder3.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncoder4.cpp mode change 100755 => 100644 source/HOAUGens/HOAEncoder5.cpp mode change 100755 => 100644 source/HOAUGens/HOAMirror1.cpp mode change 100755 => 100644 source/HOAUGens/HOAMirror2.cpp mode change 100755 => 100644 source/HOAUGens/HOAMirror3.cpp mode change 100755 => 100644 source/HOAUGens/HOAMirror4.cpp mode change 100755 => 100644 source/HOAUGens/HOAMirror5.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev061.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev261.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev262.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev263.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev501.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev502.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev503.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev504.cpp mode change 100755 => 100644 source/HOAUGens/HOAPanLebedev505.cpp mode change 100755 => 100644 source/HOAUGens/HOARotator1.cpp mode change 100755 => 100644 source/HOAUGens/HOARotator2.cpp mode change 100755 => 100644 source/HOAUGens/HOARotator3.cpp mode change 100755 => 100644 source/HOAUGens/HOARotator4.cpp delete mode 100644 source/HOAUGens/README.md create mode 100644 source/HOAUGens/README_HOAUgens.md mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator1.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator1.scx create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator1_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator2.scx create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator2_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator3.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator3.scx create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator3_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator4.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator4.scx create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator4_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator5.sc create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator5.scx create mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator5_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA1.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA2.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA3.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono1.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAConverter1.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAConverter2.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAConverter3.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAConverter4.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAConverter5.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev061.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev261.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev262.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev263.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev501.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev502.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev503.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev504.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOADecLebedev505.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncEigenMike1.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncEigenMike2.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncEigenMike3.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncEigenMike4.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev061.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev261.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev262.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev263.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev501.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev502.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev503.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev504.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncLebedev505.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncoder1.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder1.scx create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder1_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncoder2.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder2.scx create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder2_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncoder3.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder3.scx create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder3_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncoder4.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder4.scx create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder4_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAEncoder5.sc create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder5.scx create mode 100755 source/HOAUGens/sc/Classes/HOAEncoder5_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAMirror1.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAMirror2.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAMirror3.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAMirror4.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAMirror5.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev061.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev261.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev262.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev263.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev501.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev502.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev503.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev504.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOAPanLebedev505.sc mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOARotator1.sc create mode 100755 source/HOAUGens/sc/Classes/HOARotator1.scx create mode 100755 source/HOAUGens/sc/Classes/HOARotator1_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOARotator2.sc create mode 100755 source/HOAUGens/sc/Classes/HOARotator2.scx create mode 100755 source/HOAUGens/sc/Classes/HOARotator2_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOARotator3.sc create mode 100755 source/HOAUGens/sc/Classes/HOARotator3.scx create mode 100755 source/HOAUGens/sc/Classes/HOARotator3_supernova.scx mode change 100755 => 100644 source/HOAUGens/sc/Classes/HOARotator4.sc create mode 100755 source/HOAUGens/sc/Classes/HOARotator4.scx create mode 100755 source/HOAUGens/sc/Classes/HOARotator4_supernova.scx diff --git a/README.md b/README.md index 7d0b5606a3..2cb8578a42 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ Make a directory for the `cmake` build files: sc3-plugins/$ mkdir build && cd build sc3-plugins/build/$ cmake -DSC_PATH=/path/to/sc3source/ .. ``` - If no `SC_PATH` is provided the build system assumes the SuperCollider include files in `/usr/include/SuperCollider/`. +Faust generated CPP sources for Ugens contain debug messages at server start and Synth launches. Set `-DCMAKE_BUILD_TYPE=Release` (see below) to suppress them. ```shell sc3-plugins/build/$ make @@ -61,6 +61,8 @@ Copy the `SC3plugins` folder to you Extensions folder (you find out which one th WARNING: on OSX, if you want to install into `CMAKE_INSTALL_PREFIX`, you have to specify it by disabling the `IN_PLACE_BUILD` cmake option which defaults to ON (see below). +WARNING: supernova on OSX. Supernova searches for plugins specifically in Extension/plugins and not like scsynth in Extension/anyOddFolder. If supernova on OSX cannot find your plugins make sure they are in the correct place. (patch for supernova server submitted). + ### Cmake Options + Set install target @@ -77,6 +79,8 @@ WARNING: on OSX, if you want to install into `CMAKE_INSTALL_PREFIX`, you have to * `sc3-plugins/build/$ cmake -DSUPERNOVA=ON ..` + Print all cmake options * `sc3-plugins/build/$ cmake -L ..` ++ Suppress debug output on server (typically from Faust generated CPP code) + * `-DCMAKE_BUILD_TYPE=Release ..` ### Starting over diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 7d89183e39..bf7dae3caa 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -78,7 +78,14 @@ macro(BUILD_PLUGIN PLUGIN_NAME PLUGIN_SOURCES PLUGIN_LIBS PLUGIN_DIR) endmacro() -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=512") +# This is to be able to switch off the debug messages coming from the Faust generated CPP sources +# by setting to release mode -DCMAKE_BUILD_TYPE=Release +if (NOT CMAKE_BUILD_TYPE MATCHES Debug) + add_definitions(-DNDEBUG) +endif() + +# This is necessary since Faust generated CPP sources can have deep bracket nesting +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") #----------------------- # plugins without extras @@ -220,17 +227,17 @@ BUILD_PLUGIN(complexRes "" "DEINDUGens") include_directories(DEINDUGens/include) BUILD_PLUGIN(JPverb -"DEINDUGens/JPverbRaw.cpp" +"DEINDUGens/JPverbRaw.cpp" "" "DEINDUGens") - set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") - set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS mydsp=JPVERB) - set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) + set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") + set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS mydsp=JPVERB) + set_property(TARGET JPverb APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) BUILD_PLUGIN(Greyhole -"DEINDUGens/GreyholeRaw.cpp" +"DEINDUGens/GreyholeRaw.cpp" "" "DEINDUGens") - set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") - set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS mydsp=GREYHOLE) - set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) + set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS SC_FAUST_PREFIX="\"\"") + set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS mydsp=GREYHOLE) + set_property(TARGET Greyhole APPEND PROPERTY COMPILE_DEFINITIONS NDEBUG) # MembraneUGens BUILD_PLUGIN(MembraneUGens "MembraneUGens/Membrane_shape.c;MembraneUGens/Membrane.cpp" @@ -246,7 +253,7 @@ endif() # OteyPianoUGens BUILD_PLUGIN(OteyPianoUGens "OteyPianoUGens/OteyPiano.cpp;OteyPianoUGens/dwgs.cpp;OteyPianoUGens/filter.cpp;OteyPianoUGens/hammer.cpp;OteyPianoUGens/reverb.cpp" "" "OteyPianoUGens") - + # PitchDetectionUGens file(GLOB PitchDetectionSources PitchDetection/*cpp) diff --git a/source/HOAUGens/HOAAzimuthRotator1.cpp b/source/HOAUGens/HOAAzimuthRotator1.cpp old mode 100755 new mode 100644 index 028b09f8fb..4b3a77dba1 --- a/source/HOAUGens/HOAAzimuthRotator1.cpp +++ b/source/HOAUGens/HOAAzimuthRotator1.cpp @@ -1,15 +1,15 @@ -/* ------------------------------------------------------------ -author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2015" -license: "GPL" -name: "HOAAzimuthRotator1" -version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) ------------------------------------------------------------- */ - -#ifndef __mydsp_H__ -#define __mydsp_H__ +//---------------------------------------------------------- +// name: "HOAAzimuthRotator1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.12.0 (http://faust.grame.fr) +//---------------------------------------------------------- +/* link with */ +#include //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +66,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +114,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +142,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +151,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +171,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +205,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +252,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +266,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +296,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,125 +586,52 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; + private: + FAUSTFLOAT fslider0; + double fTempPerm0; + double fTempPerm1; int fSamplingFreq; - - public: - - void metadata(Meta* m) { - m->declare("author", "Pierre Lecomte"); + + public: + virtual void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("license", "GPL"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); m->declare("name", "HOAAzimuthRotator1"); m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); } - virtual int getNumInputs() { - return 4; - - } - virtual int getNumOutputs() { - return 4; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 4; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -730,54 +641,51 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator1"); - ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0.0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input3[i]); - output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); - output2[i] = FAUSTFLOAT(double(input2[i])); - output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + //LoopGraphScalar + for (int i=0; i //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +66,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +114,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +142,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +151,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +171,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +205,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +252,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +266,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +296,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,165 +586,60 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; + private: + FAUSTFLOAT fslider0; + double fTempPerm0; + double fTempPerm1; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; int fSamplingFreq; - - public: - - void metadata(Meta* m) { - m->declare("author", "Pierre Lecomte"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("license", "GPL"); + + public: + virtual void metadata(Meta* m) { + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); m->declare("name", "HOAAzimuthRotator2"); m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); } - virtual int getNumInputs() { - return 9; - - } - virtual int getNumOutputs() { - return 9; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 9; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -770,79 +649,76 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator2"); - ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* input4 = inputs[4]; - FAUSTFLOAT* input5 = inputs[5]; - FAUSTFLOAT* input6 = inputs[6]; - FAUSTFLOAT* input7 = inputs[7]; - FAUSTFLOAT* input8 = inputs[8]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - FAUSTFLOAT* output4 = outputs[4]; - FAUSTFLOAT* output5 = outputs[5]; - FAUSTFLOAT* output6 = outputs[6]; - FAUSTFLOAT* output7 = outputs[7]; - FAUSTFLOAT* output8 = outputs[8]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0.0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2.0 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0.0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input3[i]); - output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); - output2[i] = FAUSTFLOAT(double(input2[i])); - output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); - double fTemp2 = double(input4[i]); - double fTemp3 = double(input8[i]); - output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); - double fTemp4 = double(input5[i]); - double fTemp5 = double(input7[i]); - output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); - output6[i] = FAUSTFLOAT(double(input6[i])); - output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); - output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + //LoopGraphScalar + for (int i=0; i //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +66,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +114,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +142,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +151,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +171,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +205,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +252,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +266,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +296,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,221 +586,72 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; + private: + FAUSTFLOAT fslider0; + double fTempPerm0; + double fTempPerm1; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; + double fTempPerm8; + double fTempPerm9; + double fTempPerm10; + double fTempPerm11; int fSamplingFreq; - - public: - - void metadata(Meta* m) { + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOAAzimuthRotator3"); + m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("license", "GPL"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAAzimuthRotator3"); - m->declare("version", "1.0"); } - virtual int getNumInputs() { - return 16; - - } - virtual int getNumOutputs() { - return 16; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 16; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; + fTempPerm9 = 0; + fTempPerm10 = 0; + fTempPerm11 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -826,112 +661,109 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator3"); - ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* input4 = inputs[4]; - FAUSTFLOAT* input5 = inputs[5]; - FAUSTFLOAT* input6 = inputs[6]; - FAUSTFLOAT* input7 = inputs[7]; - FAUSTFLOAT* input8 = inputs[8]; - FAUSTFLOAT* input9 = inputs[9]; - FAUSTFLOAT* input10 = inputs[10]; - FAUSTFLOAT* input11 = inputs[11]; - FAUSTFLOAT* input12 = inputs[12]; - FAUSTFLOAT* input13 = inputs[13]; - FAUSTFLOAT* input14 = inputs[14]; - FAUSTFLOAT* input15 = inputs[15]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - FAUSTFLOAT* output4 = outputs[4]; - FAUSTFLOAT* output5 = outputs[5]; - FAUSTFLOAT* output6 = outputs[6]; - FAUSTFLOAT* output7 = outputs[7]; - FAUSTFLOAT* output8 = outputs[8]; - FAUSTFLOAT* output9 = outputs[9]; - FAUSTFLOAT* output10 = outputs[10]; - FAUSTFLOAT* output11 = outputs[11]; - FAUSTFLOAT* output12 = outputs[12]; - FAUSTFLOAT* output13 = outputs[13]; - FAUSTFLOAT* output14 = outputs[14]; - FAUSTFLOAT* output15 = outputs[15]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0.0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2.0 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0.0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3.0 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0.0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input3[i]); - output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); - output2[i] = FAUSTFLOAT(double(input2[i])); - output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); - double fTemp2 = double(input4[i]); - double fTemp3 = double(input8[i]); - output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); - double fTemp4 = double(input5[i]); - double fTemp5 = double(input7[i]); - output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); - output6[i] = FAUSTFLOAT(double(input6[i])); - output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); - output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); - double fTemp6 = double(input9[i]); - double fTemp7 = double(input15[i]); - output9[i] = FAUSTFLOAT(((fSlow13 * fTemp6) + (fSlow14 * fTemp7))); - double fTemp8 = double(input10[i]); - double fTemp9 = double(input14[i]); - output10[i] = FAUSTFLOAT(((fSlow7 * fTemp8) + (fSlow8 * fTemp9))); - double fTemp10 = double(input11[i]); - double fTemp11 = double(input13[i]); - output11[i] = FAUSTFLOAT(((fSlow1 * fTemp10) + (fSlow2 * fTemp11))); - output12[i] = FAUSTFLOAT(double(input12[i])); - output13[i] = FAUSTFLOAT(((fSlow4 * fTemp10) + (fSlow5 * fTemp11))); - output14[i] = FAUSTFLOAT(((fSlow10 * fTemp8) + (fSlow11 * fTemp9))); - output15[i] = FAUSTFLOAT(((fSlow16 * fTemp6) + (fSlow17 * fTemp7))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + //LoopGraphScalar + for (int i=0; i //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +66,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +114,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +142,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +151,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +171,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +205,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +252,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +266,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +296,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,293 +586,88 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; + private: + FAUSTFLOAT fslider0; + double fTempPerm0; + double fTempPerm1; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; + double fTempPerm8; + double fTempPerm9; + double fTempPerm10; + double fTempPerm11; + double fTempPerm12; + double fTempPerm13; + double fTempPerm14; + double fTempPerm15; + double fTempPerm16; + double fTempPerm17; + double fTempPerm18; + double fTempPerm19; int fSamplingFreq; - - public: - - void metadata(Meta* m) { - m->declare("author", "Pierre Lecomte"); + + public: + virtual void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("license", "GPL"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); m->declare("name", "HOAAzimuthRotator4"); m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); } - virtual int getNumInputs() { - return 25; - - } - virtual int getNumOutputs() { - return 25; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - case 16: { - rate = 1; - break; - } - case 17: { - rate = 1; - break; - } - case 18: { - rate = 1; - break; - } - case 19: { - rate = 1; - break; - } - case 20: { - rate = 1; - break; - } - case 21: { - rate = 1; - break; - } - case 22: { - rate = 1; - break; - } - case 23: { - rate = 1; - break; - } - case 24: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - case 16: { - rate = 1; - break; - } - case 17: { - rate = 1; - break; - } - case 18: { - rate = 1; - break; - } - case 19: { - rate = 1; - break; - } - case 20: { - rate = 1; - break; - } - case 21: { - rate = 1; - break; - } - case 22: { - rate = 1; - break; - } - case 23: { - rate = 1; - break; - } - case 24: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 25; } + virtual int getNumOutputs() { return 25; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; + fTempPerm9 = 0; + fTempPerm10 = 0; + fTempPerm11 = 0; + fTempPerm12 = 0; + fTempPerm13 = 0; + fTempPerm14 = 0; + fTempPerm15 = 0; + fTempPerm16 = 0; + fTempPerm17 = 0; + fTempPerm18 = 0; + fTempPerm19 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -898,153 +677,150 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator4"); - ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* input4 = inputs[4]; - FAUSTFLOAT* input5 = inputs[5]; - FAUSTFLOAT* input6 = inputs[6]; - FAUSTFLOAT* input7 = inputs[7]; - FAUSTFLOAT* input8 = inputs[8]; - FAUSTFLOAT* input9 = inputs[9]; - FAUSTFLOAT* input10 = inputs[10]; - FAUSTFLOAT* input11 = inputs[11]; - FAUSTFLOAT* input12 = inputs[12]; - FAUSTFLOAT* input13 = inputs[13]; - FAUSTFLOAT* input14 = inputs[14]; - FAUSTFLOAT* input15 = inputs[15]; - FAUSTFLOAT* input16 = inputs[16]; - FAUSTFLOAT* input17 = inputs[17]; - FAUSTFLOAT* input18 = inputs[18]; - FAUSTFLOAT* input19 = inputs[19]; - FAUSTFLOAT* input20 = inputs[20]; - FAUSTFLOAT* input21 = inputs[21]; - FAUSTFLOAT* input22 = inputs[22]; - FAUSTFLOAT* input23 = inputs[23]; - FAUSTFLOAT* input24 = inputs[24]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - FAUSTFLOAT* output4 = outputs[4]; - FAUSTFLOAT* output5 = outputs[5]; - FAUSTFLOAT* output6 = outputs[6]; - FAUSTFLOAT* output7 = outputs[7]; - FAUSTFLOAT* output8 = outputs[8]; - FAUSTFLOAT* output9 = outputs[9]; - FAUSTFLOAT* output10 = outputs[10]; - FAUSTFLOAT* output11 = outputs[11]; - FAUSTFLOAT* output12 = outputs[12]; - FAUSTFLOAT* output13 = outputs[13]; - FAUSTFLOAT* output14 = outputs[14]; - FAUSTFLOAT* output15 = outputs[15]; - FAUSTFLOAT* output16 = outputs[16]; - FAUSTFLOAT* output17 = outputs[17]; - FAUSTFLOAT* output18 = outputs[18]; - FAUSTFLOAT* output19 = outputs[19]; - FAUSTFLOAT* output20 = outputs[20]; - FAUSTFLOAT* output21 = outputs[21]; - FAUSTFLOAT* output22 = outputs[22]; - FAUSTFLOAT* output23 = outputs[23]; - FAUSTFLOAT* output24 = outputs[24]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0.0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2.0 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0.0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3.0 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0.0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - double fSlow18 = (4.0 * fSlow0); - double fSlow19 = cos(fSlow18); - double fSlow20 = sin(fSlow18); - double fSlow21 = (0.0 - fSlow18); - double fSlow22 = sin(fSlow21); - double fSlow23 = cos(fSlow21); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input3[i]); - output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); - output2[i] = FAUSTFLOAT(double(input2[i])); - output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); - double fTemp2 = double(input4[i]); - double fTemp3 = double(input8[i]); - output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); - double fTemp4 = double(input5[i]); - double fTemp5 = double(input7[i]); - output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); - output6[i] = FAUSTFLOAT(double(input6[i])); - output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); - output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); - double fTemp6 = double(input9[i]); - double fTemp7 = double(input15[i]); - output9[i] = FAUSTFLOAT(((fSlow13 * fTemp6) + (fSlow14 * fTemp7))); - double fTemp8 = double(input10[i]); - double fTemp9 = double(input14[i]); - output10[i] = FAUSTFLOAT(((fSlow7 * fTemp8) + (fSlow8 * fTemp9))); - double fTemp10 = double(input11[i]); - double fTemp11 = double(input13[i]); - output11[i] = FAUSTFLOAT(((fSlow1 * fTemp10) + (fSlow2 * fTemp11))); - output12[i] = FAUSTFLOAT(double(input12[i])); - output13[i] = FAUSTFLOAT(((fSlow4 * fTemp10) + (fSlow5 * fTemp11))); - output14[i] = FAUSTFLOAT(((fSlow10 * fTemp8) + (fSlow11 * fTemp9))); - output15[i] = FAUSTFLOAT(((fSlow16 * fTemp6) + (fSlow17 * fTemp7))); - double fTemp12 = double(input16[i]); - double fTemp13 = double(input24[i]); - output16[i] = FAUSTFLOAT(((fSlow19 * fTemp12) + (fSlow20 * fTemp13))); - double fTemp14 = double(input17[i]); - double fTemp15 = double(input23[i]); - output17[i] = FAUSTFLOAT(((fSlow13 * fTemp14) + (fSlow14 * fTemp15))); - double fTemp16 = double(input18[i]); - double fTemp17 = double(input22[i]); - output18[i] = FAUSTFLOAT(((fSlow7 * fTemp16) + (fSlow8 * fTemp17))); - double fTemp18 = double(input19[i]); - double fTemp19 = double(input21[i]); - output19[i] = FAUSTFLOAT(((fSlow1 * fTemp18) + (fSlow2 * fTemp19))); - output20[i] = FAUSTFLOAT(double(input20[i])); - output21[i] = FAUSTFLOAT(((fSlow4 * fTemp18) + (fSlow5 * fTemp19))); - output22[i] = FAUSTFLOAT(((fSlow10 * fTemp16) + (fSlow11 * fTemp17))); - output23[i] = FAUSTFLOAT(((fSlow16 * fTemp14) + (fSlow17 * fTemp15))); - output24[i] = FAUSTFLOAT(((fSlow22 * fTemp12) + (fSlow23 * fTemp13))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2 * fSlow0); + double fSlow7 = sin(fSlow6); + double fSlow8 = cos(fSlow6); + double fSlow9 = (0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + //LoopGraphScalar + for (int i=0; i //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +66,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +114,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +142,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +151,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +171,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +205,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +252,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +266,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +296,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,381 +586,108 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; + private: + FAUSTFLOAT fslider0; + double fTempPerm0; + double fTempPerm1; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; + double fTempPerm8; + double fTempPerm9; + double fTempPerm10; + double fTempPerm11; + double fTempPerm12; + double fTempPerm13; + double fTempPerm14; + double fTempPerm15; + double fTempPerm16; + double fTempPerm17; + double fTempPerm18; + double fTempPerm19; + double fTempPerm20; + double fTempPerm21; + double fTempPerm22; + double fTempPerm23; + double fTempPerm24; + double fTempPerm25; + double fTempPerm26; + double fTempPerm27; + double fTempPerm28; + double fTempPerm29; int fSamplingFreq; - - public: - - void metadata(Meta* m) { - m->declare("author", "Pierre Lecomte"); + + public: + virtual void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("name", "HOAAzimuthRotator5"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAAzimuthRotator5"); - m->declare("version", "1.0"); } - virtual int getNumInputs() { - return 36; - - } - virtual int getNumOutputs() { - return 36; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - case 16: { - rate = 1; - break; - } - case 17: { - rate = 1; - break; - } - case 18: { - rate = 1; - break; - } - case 19: { - rate = 1; - break; - } - case 20: { - rate = 1; - break; - } - case 21: { - rate = 1; - break; - } - case 22: { - rate = 1; - break; - } - case 23: { - rate = 1; - break; - } - case 24: { - rate = 1; - break; - } - case 25: { - rate = 1; - break; - } - case 26: { - rate = 1; - break; - } - case 27: { - rate = 1; - break; - } - case 28: { - rate = 1; - break; - } - case 29: { - rate = 1; - break; - } - case 30: { - rate = 1; - break; - } - case 31: { - rate = 1; - break; - } - case 32: { - rate = 1; - break; - } - case 33: { - rate = 1; - break; - } - case 34: { - rate = 1; - break; - } - case 35: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - case 16: { - rate = 1; - break; - } - case 17: { - rate = 1; - break; - } - case 18: { - rate = 1; - break; - } - case 19: { - rate = 1; - break; - } - case 20: { - rate = 1; - break; - } - case 21: { - rate = 1; - break; - } - case 22: { - rate = 1; - break; - } - case 23: { - rate = 1; - break; - } - case 24: { - rate = 1; - break; - } - case 25: { - rate = 1; - break; - } - case 26: { - rate = 1; - break; - } - case 27: { - rate = 1; - break; - } - case 28: { - rate = 1; - break; - } - case 29: { - rate = 1; - break; - } - case 30: { - rate = 1; - break; - } - case 31: { - rate = 1; - break; - } - case 32: { - rate = 1; - break; - } - case 33: { - rate = 1; - break; - } - case 34: { - rate = 1; - break; - } - case 35: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 36; } + virtual int getNumOutputs() { return 36; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; + fTempPerm9 = 0; + fTempPerm10 = 0; + fTempPerm11 = 0; + fTempPerm12 = 0; + fTempPerm13 = 0; + fTempPerm14 = 0; + fTempPerm15 = 0; + fTempPerm16 = 0; + fTempPerm17 = 0; + fTempPerm18 = 0; + fTempPerm19 = 0; + fTempPerm20 = 0; + fTempPerm21 = 0; + fTempPerm22 = 0; + fTempPerm23 = 0; + fTempPerm24 = 0; + fTempPerm25 = 0; + fTempPerm26 = 0; + fTempPerm27 = 0; + fTempPerm28 = 0; + fTempPerm29 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -986,202 +697,199 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator5"); - ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* input4 = inputs[4]; - FAUSTFLOAT* input5 = inputs[5]; - FAUSTFLOAT* input6 = inputs[6]; - FAUSTFLOAT* input7 = inputs[7]; - FAUSTFLOAT* input8 = inputs[8]; - FAUSTFLOAT* input9 = inputs[9]; - FAUSTFLOAT* input10 = inputs[10]; - FAUSTFLOAT* input11 = inputs[11]; - FAUSTFLOAT* input12 = inputs[12]; - FAUSTFLOAT* input13 = inputs[13]; - FAUSTFLOAT* input14 = inputs[14]; - FAUSTFLOAT* input15 = inputs[15]; - FAUSTFLOAT* input16 = inputs[16]; - FAUSTFLOAT* input17 = inputs[17]; - FAUSTFLOAT* input18 = inputs[18]; - FAUSTFLOAT* input19 = inputs[19]; - FAUSTFLOAT* input20 = inputs[20]; - FAUSTFLOAT* input21 = inputs[21]; - FAUSTFLOAT* input22 = inputs[22]; - FAUSTFLOAT* input23 = inputs[23]; - FAUSTFLOAT* input24 = inputs[24]; - FAUSTFLOAT* input25 = inputs[25]; - FAUSTFLOAT* input26 = inputs[26]; - FAUSTFLOAT* input27 = inputs[27]; - FAUSTFLOAT* input28 = inputs[28]; - FAUSTFLOAT* input29 = inputs[29]; - FAUSTFLOAT* input30 = inputs[30]; - FAUSTFLOAT* input31 = inputs[31]; - FAUSTFLOAT* input32 = inputs[32]; - FAUSTFLOAT* input33 = inputs[33]; - FAUSTFLOAT* input34 = inputs[34]; - FAUSTFLOAT* input35 = inputs[35]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - FAUSTFLOAT* output4 = outputs[4]; - FAUSTFLOAT* output5 = outputs[5]; - FAUSTFLOAT* output6 = outputs[6]; - FAUSTFLOAT* output7 = outputs[7]; - FAUSTFLOAT* output8 = outputs[8]; - FAUSTFLOAT* output9 = outputs[9]; - FAUSTFLOAT* output10 = outputs[10]; - FAUSTFLOAT* output11 = outputs[11]; - FAUSTFLOAT* output12 = outputs[12]; - FAUSTFLOAT* output13 = outputs[13]; - FAUSTFLOAT* output14 = outputs[14]; - FAUSTFLOAT* output15 = outputs[15]; - FAUSTFLOAT* output16 = outputs[16]; - FAUSTFLOAT* output17 = outputs[17]; - FAUSTFLOAT* output18 = outputs[18]; - FAUSTFLOAT* output19 = outputs[19]; - FAUSTFLOAT* output20 = outputs[20]; - FAUSTFLOAT* output21 = outputs[21]; - FAUSTFLOAT* output22 = outputs[22]; - FAUSTFLOAT* output23 = outputs[23]; - FAUSTFLOAT* output24 = outputs[24]; - FAUSTFLOAT* output25 = outputs[25]; - FAUSTFLOAT* output26 = outputs[26]; - FAUSTFLOAT* output27 = outputs[27]; - FAUSTFLOAT* output28 = outputs[28]; - FAUSTFLOAT* output29 = outputs[29]; - FAUSTFLOAT* output30 = outputs[30]; - FAUSTFLOAT* output31 = outputs[31]; - FAUSTFLOAT* output32 = outputs[32]; - FAUSTFLOAT* output33 = outputs[33]; - FAUSTFLOAT* output34 = outputs[34]; - FAUSTFLOAT* output35 = outputs[35]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0.0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2.0 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0.0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3.0 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0.0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - double fSlow18 = (4.0 * fSlow0); - double fSlow19 = cos(fSlow18); - double fSlow20 = sin(fSlow18); - double fSlow21 = (0.0 - fSlow18); - double fSlow22 = sin(fSlow21); - double fSlow23 = cos(fSlow21); - double fSlow24 = (5.0 * fSlow0); - double fSlow25 = cos(fSlow24); - double fSlow26 = sin(fSlow24); - double fSlow27 = (0.0 - fSlow24); - double fSlow28 = sin(fSlow27); - double fSlow29 = cos(fSlow27); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input3[i]); - output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); - output2[i] = FAUSTFLOAT(double(input2[i])); - output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); - double fTemp2 = double(input4[i]); - double fTemp3 = double(input8[i]); - output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); - double fTemp4 = double(input5[i]); - double fTemp5 = double(input7[i]); - output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); - output6[i] = FAUSTFLOAT(double(input6[i])); - output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); - output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); - double fTemp6 = double(input9[i]); - double fTemp7 = double(input15[i]); - output9[i] = FAUSTFLOAT(((fSlow13 * fTemp6) + (fSlow14 * fTemp7))); - double fTemp8 = double(input10[i]); - double fTemp9 = double(input14[i]); - output10[i] = FAUSTFLOAT(((fSlow7 * fTemp8) + (fSlow8 * fTemp9))); - double fTemp10 = double(input11[i]); - double fTemp11 = double(input13[i]); - output11[i] = FAUSTFLOAT(((fSlow1 * fTemp10) + (fSlow2 * fTemp11))); - output12[i] = FAUSTFLOAT(double(input12[i])); - output13[i] = FAUSTFLOAT(((fSlow4 * fTemp10) + (fSlow5 * fTemp11))); - output14[i] = FAUSTFLOAT(((fSlow10 * fTemp8) + (fSlow11 * fTemp9))); - output15[i] = FAUSTFLOAT(((fSlow16 * fTemp6) + (fSlow17 * fTemp7))); - double fTemp12 = double(input16[i]); - double fTemp13 = double(input24[i]); - output16[i] = FAUSTFLOAT(((fSlow19 * fTemp12) + (fSlow20 * fTemp13))); - double fTemp14 = double(input17[i]); - double fTemp15 = double(input23[i]); - output17[i] = FAUSTFLOAT(((fSlow13 * fTemp14) + (fSlow14 * fTemp15))); - double fTemp16 = double(input18[i]); - double fTemp17 = double(input22[i]); - output18[i] = FAUSTFLOAT(((fSlow7 * fTemp16) + (fSlow8 * fTemp17))); - double fTemp18 = double(input19[i]); - double fTemp19 = double(input21[i]); - output19[i] = FAUSTFLOAT(((fSlow1 * fTemp18) + (fSlow2 * fTemp19))); - output20[i] = FAUSTFLOAT(double(input20[i])); - output21[i] = FAUSTFLOAT(((fSlow4 * fTemp18) + (fSlow5 * fTemp19))); - output22[i] = FAUSTFLOAT(((fSlow10 * fTemp16) + (fSlow11 * fTemp17))); - output23[i] = FAUSTFLOAT(((fSlow16 * fTemp14) + (fSlow17 * fTemp15))); - output24[i] = FAUSTFLOAT(((fSlow22 * fTemp12) + (fSlow23 * fTemp13))); - double fTemp20 = double(input25[i]); - double fTemp21 = double(input35[i]); - output25[i] = FAUSTFLOAT(((fSlow25 * fTemp20) + (fSlow26 * fTemp21))); - double fTemp22 = double(input26[i]); - double fTemp23 = double(input34[i]); - output26[i] = FAUSTFLOAT(((fSlow19 * fTemp22) + (fSlow20 * fTemp23))); - double fTemp24 = double(input27[i]); - double fTemp25 = double(input33[i]); - output27[i] = FAUSTFLOAT(((fSlow13 * fTemp24) + (fSlow14 * fTemp25))); - double fTemp26 = double(input28[i]); - double fTemp27 = double(input32[i]); - output28[i] = FAUSTFLOAT(((fSlow7 * fTemp26) + (fSlow8 * fTemp27))); - double fTemp28 = double(input29[i]); - double fTemp29 = double(input31[i]); - output29[i] = FAUSTFLOAT(((fSlow1 * fTemp28) + (fSlow2 * fTemp29))); - output30[i] = FAUSTFLOAT(double(input30[i])); - output31[i] = FAUSTFLOAT(((fSlow4 * fTemp28) + (fSlow5 * fTemp29))); - output32[i] = FAUSTFLOAT(((fSlow10 * fTemp26) + (fSlow11 * fTemp27))); - output33[i] = FAUSTFLOAT(((fSlow16 * fTemp24) + (fSlow17 * fTemp25))); - output34[i] = FAUSTFLOAT(((fSlow22 * fTemp22) + (fSlow23 * fTemp23))); - output35[i] = FAUSTFLOAT(((fSlow28 * fTemp20) + (fSlow29 * fTemp21))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + double fSlow24 = (5 * fSlow0); + double fSlow25 = cos(fSlow24); + double fSlow26 = sin(fSlow24); + double fSlow27 = (0 - fSlow24); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* input25 = input[25]; + FAUSTFLOAT* input26 = input[26]; + FAUSTFLOAT* input27 = input[27]; + FAUSTFLOAT* input28 = input[28]; + FAUSTFLOAT* input29 = input[29]; + FAUSTFLOAT* input30 = input[30]; + FAUSTFLOAT* input31 = input[31]; + FAUSTFLOAT* input32 = input[32]; + FAUSTFLOAT* input33 = input[33]; + FAUSTFLOAT* input34 = input[34]; + FAUSTFLOAT* input35 = input[35]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + FAUSTFLOAT* output25 = output[25]; + FAUSTFLOAT* output26 = output[26]; + FAUSTFLOAT* output27 = output[27]; + FAUSTFLOAT* output28 = output[28]; + FAUSTFLOAT* output29 = output[29]; + FAUSTFLOAT* output30 = output[30]; + FAUSTFLOAT* output31 = output[31]; + FAUSTFLOAT* output32 = output[32]; + FAUSTFLOAT* output33 = output[33]; + FAUSTFLOAT* output34 = output[34]; + FAUSTFLOAT* output35 = output[35]; + //LoopGraphScalar + for (int i=0; i +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fTempPerm0; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fTempPerm1; + int IOTA; + double fVec0[128]; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; + double fTempPerm8; + double fTempPerm9; + double fTempPerm10; + double fTempPerm11; + double fTempPerm12; + double fTempPerm13; + double fTempPerm14; + double fTempPerm15; + double fTempPerm16; + double fTempPerm17; + double fTempPerm18; + double fTempPerm19; + double fTempPerm20; + double fTempPerm21; + double fTempPerm22; + double fTempPerm23; + double fTempPerm24; + double fTempPerm25; + double fTempPerm26; + double fTempPerm27; + double fTempPerm28; + double fTempPerm29; + double fTempPerm30; + double fTempPerm31; + double fTempPerm32; + double fTempPerm33; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fTempPerm34; + double fVec1[128]; + double fTempPerm35; + double fTempPerm36; + double fTempPerm37; + double fTempPerm38; + double fTempPerm39; + double fTempPerm40; + double fTempPerm41; + double fTempPerm42; + double fTempPerm43; + double fTempPerm44; + double fTempPerm45; + double fTempPerm46; + double fTempPerm47; + double fTempPerm48; + double fTempPerm49; + double fTempPerm50; + double fTempPerm51; + double fTempPerm52; + double fTempPerm53; + double fTempPerm54; + double fTempPerm55; + double fTempPerm56; + double fTempPerm57; + double fTempPerm58; + double fTempPerm59; + double fTempPerm60; + double fTempPerm61; + double fRec5[2]; + FAUSTFLOAT fbargraph2; + double fTempPerm62; + double fVec2[128]; + double fTempPerm63; + double fTempPerm64; + double fTempPerm65; + double fTempPerm66; + double fTempPerm67; + double fTempPerm68; + double fTempPerm69; + double fTempPerm70; + double fTempPerm71; + double fTempPerm72; + double fTempPerm73; + double fTempPerm74; + double fTempPerm75; + double fTempPerm76; + double fTempPerm77; + double fTempPerm78; + double fTempPerm79; + double fTempPerm80; + double fTempPerm81; + double fTempPerm82; + double fTempPerm83; + double fTempPerm84; + double fTempPerm85; + double fTempPerm86; + double fTempPerm87; + double fTempPerm88; + double fTempPerm89; + double fTempPerm90; + double fTempPerm91; + double fTempPerm92; + double fTempPerm93; + double fTempPerm94; + double fTempPerm95; + double fTempPerm96; + double fTempPerm97; + double fTempPerm98; + double fTempPerm99; + double fTempPerm100; + double fTempPerm101; + double fTempPerm102; + double fTempPerm103; + double fTempPerm104; + double fTempPerm105; + double fTempPerm106; + double fTempPerm107; + double fTempPerm108; + double fTempPerm109; + double fTempPerm110; + double fTempPerm111; + double fTempPerm112; + double fTempPerm113; + double fTempPerm114; + double fTempPerm115; + double fTempPerm116; + double fTempPerm117; + double fTempPerm118; + double fTempPerm119; + double fTempPerm120; + double fTempPerm121; + double fTempPerm122; + double fTempPerm123; + double fTempPerm124; + double fTempPerm125; + double fTempPerm126; + double fTempPerm127; + double fTempPerm128; + double fTempPerm129; + double fTempPerm130; + double fTempPerm131; + double fTempPerm132; + double fTempPerm133; + double fTempPerm134; + double fTempPerm135; + double fTempPerm136; + double fRec6[2]; + FAUSTFLOAT fbargraph3; + double fTempPerm137; + double fVec3[128]; + double fTempPerm138; + double fTempPerm139; + double fTempPerm140; + double fTempPerm141; + double fTempPerm142; + double fTempPerm143; + double fTempPerm144; + double fTempPerm145; + double fTempPerm146; + double fTempPerm147; + double fTempPerm148; + double fTempPerm149; + double fTempPerm150; + double fTempPerm151; + double fTempPerm152; + double fTempPerm153; + double fTempPerm154; + double fTempPerm155; + double fTempPerm156; + double fTempPerm157; + double fTempPerm158; + double fTempPerm159; + double fTempPerm160; + double fTempPerm161; + double fTempPerm162; + double fTempPerm163; + double fTempPerm164; + double fTempPerm165; + double fTempPerm166; + double fTempPerm167; + double fTempPerm168; + double fTempPerm169; + double fTempPerm170; + double fTempPerm171; + double fTempPerm172; + double fTempPerm173; + double fTempPerm174; + double fTempPerm175; + double fTempPerm176; + double fTempPerm177; + double fTempPerm178; + double fTempPerm179; + double fTempPerm180; + double fTempPerm181; + double fTempPerm182; + double fTempPerm183; + double fTempPerm184; + double fTempPerm185; + double fTempPerm186; + double fTempPerm187; + double fTempPerm188; + double fTempPerm189; + double fTempPerm190; + double fTempPerm191; + double fTempPerm192; + double fTempPerm193; + double fTempPerm194; + double fTempPerm195; + double fTempPerm196; + double fTempPerm197; + double fTempPerm198; + double fTempPerm199; + double fTempPerm200; + double fTempPerm201; + double fTempPerm202; + double fTempPerm203; + double fTempPerm204; + double fTempPerm205; + double fTempPerm206; + double fTempPerm207; + double fTempPerm208; + double fTempPerm209; + double fTempPerm210; + double fTempPerm211; + double fTempPerm212; + double fTempPerm213; + double fTempPerm214; + double fTempPerm215; + double fTempPerm216; + double fTempPerm217; + double fTempPerm218; + double fTempPerm219; + double fTempPerm220; + double fTempPerm221; + double fTempPerm222; + double fTempPerm223; + double fTempPerm224; + double fTempPerm225; + double fTempPerm226; + double fTempPerm227; + double fTempPerm228; + double fTempPerm229; + double fTempPerm230; + double fTempPerm231; + double fTempPerm232; + double fTempPerm233; + double fTempPerm234; + double fTempPerm235; + double fTempPerm236; + double fTempPerm237; + double fTempPerm238; + double fTempPerm239; + double fTempPerm240; + double fTempPerm241; + double fTempPerm242; + double fTempPerm243; + double fTempPerm244; + double fTempPerm245; + double fTempPerm246; + double fTempPerm247; + double fTempPerm248; + double fTempPerm249; + double fTempPerm250; + double fTempPerm251; + double fTempPerm252; + double fTempPerm253; + double fTempPerm254; + double fTempPerm255; + double fTempPerm256; + double fTempPerm257; + double fTempPerm258; + double fTempPerm259; + double fTempPerm260; + double fTempPerm261; + double fTempPerm262; + double fTempPerm263; + double fTempPerm264; + double fTempPerm265; + double fTempPerm266; + double fTempPerm267; + double fTempPerm268; + double fTempPerm269; + double fTempPerm270; + double fTempPerm271; + double fTempPerm272; + double fTempPerm273; + double fTempPerm274; + double fTempPerm275; + double fTempPerm276; + double fTempPerm277; + double fTempPerm278; + double fTempPerm279; + double fTempPerm280; + double fTempPerm281; + double fTempPerm282; + double fTempPerm283; + double fTempPerm284; + double fTempPerm285; + double fTempPerm286; + double fTempPerm287; + double fTempPerm288; + double fTempPerm289; + double fTempPerm290; + double fTempPerm291; + double fTempPerm292; + double fTempPerm293; + double fTempPerm294; + double fTempPerm295; + double fTempPerm296; + double fTempPerm297; + double fTempPerm298; + double fTempPerm299; + double fTempPerm300; + double fTempPerm301; + double fTempPerm302; + double fTempPerm303; + double fTempPerm304; + double fTempPerm305; + double fTempPerm306; + double fTempPerm307; + double fTempPerm308; + double fTempPerm309; + double fTempPerm310; + double fTempPerm311; + double fTempPerm312; + double fTempPerm313; + double fTempPerm314; + double fTempPerm315; + double fTempPerm316; + double fTempPerm317; + double fTempPerm318; + double fTempPerm319; + double fTempPerm320; + double fTempPerm321; + double fTempPerm322; + double fTempPerm323; + double fTempPerm324; + double fTempPerm325; + double fTempPerm326; + double fTempPerm327; + double fTempPerm328; + double fTempPerm329; + double fTempPerm330; + double fTempPerm331; + double fTempPerm332; + double fTempPerm333; + double fTempPerm334; + double fTempPerm335; + double fTempPerm336; + double fTempPerm337; + double fTempPerm338; + double fTempPerm339; + double fTempPerm340; + double fTempPerm341; + double fTempPerm342; + double fTempPerm343; + double fTempPerm344; + double fTempPerm345; + double fTempPerm346; + double fTempPerm347; + double fTempPerm348; + double fTempPerm349; + double fTempPerm350; + double fTempPerm351; + double fTempPerm352; + double fTempPerm353; + double fTempPerm354; + double fTempPerm355; + double fTempPerm356; + double fTempPerm357; + double fTempPerm358; + double fTempPerm359; + double fTempPerm360; + double fTempPerm361; + double fTempPerm362; + double fTempPerm363; + double fTempPerm364; + double fTempPerm365; + double fTempPerm366; + double fTempPerm367; + double fTempPerm368; + double fTempPerm369; + double fTempPerm370; + double fTempPerm371; + double fTempPerm372; + double fTempPerm373; + double fTempPerm374; + double fTempPerm375; + double fTempPerm376; + double fTempPerm377; + double fTempPerm378; + double fTempPerm379; + double fTempPerm380; + double fTempPerm381; + double fTempPerm382; + double fTempPerm383; + double fTempPerm384; + double fTempPerm385; + double fTempPerm386; + double fTempPerm387; + double fTempPerm388; + double fTempPerm389; + double fTempPerm390; + double fTempPerm391; + double fTempPerm392; + double fTempPerm393; + double fTempPerm394; + double fTempPerm395; + double fTempPerm396; + double fTempPerm397; + double fTempPerm398; + double fTempPerm399; + double fTempPerm400; + double fTempPerm401; + double fTempPerm402; + double fTempPerm403; + double fTempPerm404; + double fTempPerm405; + double fTempPerm406; + double fTempPerm407; + double fTempPerm408; + double fTempPerm409; + double fTempPerm410; + double fTempPerm411; + double fTempPerm412; + double fTempPerm413; + double fTempPerm414; + double fTempPerm415; + double fTempPerm416; + double fTempPerm417; + double fTempPerm418; + double fTempPerm419; + double fTempPerm420; + double fTempPerm421; + double fTempPerm422; + double fTempPerm423; + double fTempPerm424; + double fTempPerm425; + double fTempPerm426; + double fTempPerm427; + double fTempPerm428; + double fTempPerm429; + double fTempPerm430; + double fTempPerm431; + double fTempPerm432; + double fTempPerm433; + double fTempPerm434; + double fTempPerm435; + double fTempPerm436; + double fTempPerm437; + double fTempPerm438; + double fTempPerm439; + double fTempPerm440; + double fTempPerm441; + double fTempPerm442; + double fTempPerm443; + double fTempPerm444; + double fTempPerm445; + double fTempPerm446; + double fTempPerm447; + double fTempPerm448; + double fTempPerm449; + double fTempPerm450; + double fTempPerm451; + double fTempPerm452; + double fTempPerm453; + double fTempPerm454; + double fTempPerm455; + double fTempPerm456; + double fTempPerm457; + double fTempPerm458; + double fTempPerm459; + double fTempPerm460; + double fTempPerm461; + double fTempPerm462; + double fTempPerm463; + double fTempPerm464; + double fTempPerm465; + double fTempPerm466; + double fTempPerm467; + double fTempPerm468; + double fTempPerm469; + double fTempPerm470; + double fTempPerm471; + double fTempPerm472; + double fTempPerm473; + double fTempPerm474; + double fTempPerm475; + double fTempPerm476; + double fTempPerm477; + double fTempPerm478; + double fTempPerm479; + double fTempPerm480; + double fTempPerm481; + double fTempPerm482; + double fTempPerm483; + double fTempPerm484; + double fTempPerm485; + double fTempPerm486; + double fTempPerm487; + double fTempPerm488; + double fTempPerm489; + double fTempPerm490; + double fTempPerm491; + double fTempPerm492; + double fTempPerm493; + double fTempPerm494; + double fTempPerm495; + double fTempPerm496; + double fTempPerm497; + double fTempPerm498; + double fTempPerm499; + double fTempPerm500; + double fTempPerm501; + double fTempPerm502; + double fTempPerm503; + double fTempPerm504; + double fTempPerm505; + double fTempPerm506; + double fTempPerm507; + double fTempPerm508; + double fTempPerm509; + double fTempPerm510; + double fTempPerm511; + double fTempPerm512; + double fRec0[2]; + FAUSTFLOAT fbargraph4; + double fTempPerm513; + double fRec7[2]; + FAUSTFLOAT fbargraph5; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecoderLebedev50Binaural1"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL)"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("signals.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + } + + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 2; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; + fTempPerm9 = 0; + fTempPerm10 = 0; + fTempPerm11 = 0; + fTempPerm12 = 0; + fTempPerm13 = 0; + fTempPerm14 = 0; + fTempPerm15 = 0; + fTempPerm16 = 0; + fTempPerm17 = 0; + fTempPerm18 = 0; + fTempPerm19 = 0; + fTempPerm20 = 0; + fTempPerm21 = 0; + fTempPerm22 = 0; + fTempPerm23 = 0; + fTempPerm24 = 0; + fTempPerm25 = 0; + fTempPerm26 = 0; + fTempPerm27 = 0; + fTempPerm28 = 0; + fTempPerm29 = 0; + fTempPerm30 = 0; + fTempPerm31 = 0; + fTempPerm32 = 0; + fTempPerm33 = 0; + fTempPerm34 = 0; + fTempPerm35 = 0; + fTempPerm36 = 0; + fTempPerm37 = 0; + fTempPerm38 = 0; + fTempPerm39 = 0; + fTempPerm40 = 0; + fTempPerm41 = 0; + fTempPerm42 = 0; + fTempPerm43 = 0; + fTempPerm44 = 0; + fTempPerm45 = 0; + fTempPerm46 = 0; + fTempPerm47 = 0; + fTempPerm48 = 0; + fTempPerm49 = 0; + fTempPerm50 = 0; + fTempPerm51 = 0; + fTempPerm52 = 0; + fTempPerm53 = 0; + fTempPerm54 = 0; + fTempPerm55 = 0; + fTempPerm56 = 0; + fTempPerm57 = 0; + fTempPerm58 = 0; + fTempPerm59 = 0; + fTempPerm60 = 0; + fTempPerm61 = 0; + fTempPerm62 = 0; + fTempPerm63 = 0; + fTempPerm64 = 0; + fTempPerm65 = 0; + fTempPerm66 = 0; + fTempPerm67 = 0; + fTempPerm68 = 0; + fTempPerm69 = 0; + fTempPerm70 = 0; + fTempPerm71 = 0; + fTempPerm72 = 0; + fTempPerm73 = 0; + fTempPerm74 = 0; + fTempPerm75 = 0; + fTempPerm76 = 0; + fTempPerm77 = 0; + fTempPerm78 = 0; + fTempPerm79 = 0; + fTempPerm80 = 0; + fTempPerm81 = 0; + fTempPerm82 = 0; + fTempPerm83 = 0; + fTempPerm84 = 0; + fTempPerm85 = 0; + fTempPerm86 = 0; + fTempPerm87 = 0; + fTempPerm88 = 0; + fTempPerm89 = 0; + fTempPerm90 = 0; + fTempPerm91 = 0; + fTempPerm92 = 0; + fTempPerm93 = 0; + fTempPerm94 = 0; + fTempPerm95 = 0; + fTempPerm96 = 0; + fTempPerm97 = 0; + fTempPerm98 = 0; + fTempPerm99 = 0; + fTempPerm100 = 0; + fTempPerm101 = 0; + fTempPerm102 = 0; + fTempPerm103 = 0; + fTempPerm104 = 0; + fTempPerm105 = 0; + fTempPerm106 = 0; + fTempPerm107 = 0; + fTempPerm108 = 0; + fTempPerm109 = 0; + fTempPerm110 = 0; + fTempPerm111 = 0; + fTempPerm112 = 0; + fTempPerm113 = 0; + fTempPerm114 = 0; + fTempPerm115 = 0; + fTempPerm116 = 0; + fTempPerm117 = 0; + fTempPerm118 = 0; + fTempPerm119 = 0; + fTempPerm120 = 0; + fTempPerm121 = 0; + fTempPerm122 = 0; + fTempPerm123 = 0; + fTempPerm124 = 0; + fTempPerm125 = 0; + fTempPerm126 = 0; + fTempPerm127 = 0; + fTempPerm128 = 0; + fTempPerm129 = 0; + fTempPerm130 = 0; + fTempPerm131 = 0; + fTempPerm132 = 0; + fTempPerm133 = 0; + fTempPerm134 = 0; + fTempPerm135 = 0; + fTempPerm136 = 0; + fTempPerm137 = 0; + fTempPerm138 = 0; + fTempPerm139 = 0; + fTempPerm140 = 0; + fTempPerm141 = 0; + fTempPerm142 = 0; + fTempPerm143 = 0; + fTempPerm144 = 0; + fTempPerm145 = 0; + fTempPerm146 = 0; + fTempPerm147 = 0; + fTempPerm148 = 0; + fTempPerm149 = 0; + fTempPerm150 = 0; + fTempPerm151 = 0; + fTempPerm152 = 0; + fTempPerm153 = 0; + fTempPerm154 = 0; + fTempPerm155 = 0; + fTempPerm156 = 0; + fTempPerm157 = 0; + fTempPerm158 = 0; + fTempPerm159 = 0; + fTempPerm160 = 0; + fTempPerm161 = 0; + fTempPerm162 = 0; + fTempPerm163 = 0; + fTempPerm164 = 0; + fTempPerm165 = 0; + fTempPerm166 = 0; + fTempPerm167 = 0; + fTempPerm168 = 0; + fTempPerm169 = 0; + fTempPerm170 = 0; + fTempPerm171 = 0; + fTempPerm172 = 0; + fTempPerm173 = 0; + fTempPerm174 = 0; + fTempPerm175 = 0; + fTempPerm176 = 0; + fTempPerm177 = 0; + fTempPerm178 = 0; + fTempPerm179 = 0; + fTempPerm180 = 0; + fTempPerm181 = 0; + fTempPerm182 = 0; + fTempPerm183 = 0; + fTempPerm184 = 0; + fTempPerm185 = 0; + fTempPerm186 = 0; + fTempPerm187 = 0; + fTempPerm188 = 0; + fTempPerm189 = 0; + fTempPerm190 = 0; + fTempPerm191 = 0; + fTempPerm192 = 0; + fTempPerm193 = 0; + fTempPerm194 = 0; + fTempPerm195 = 0; + fTempPerm196 = 0; + fTempPerm197 = 0; + fTempPerm198 = 0; + fTempPerm199 = 0; + fTempPerm200 = 0; + fTempPerm201 = 0; + fTempPerm202 = 0; + fTempPerm203 = 0; + fTempPerm204 = 0; + fTempPerm205 = 0; + fTempPerm206 = 0; + fTempPerm207 = 0; + fTempPerm208 = 0; + fTempPerm209 = 0; + fTempPerm210 = 0; + fTempPerm211 = 0; + fTempPerm212 = 0; + fTempPerm213 = 0; + fTempPerm214 = 0; + fTempPerm215 = 0; + fTempPerm216 = 0; + fTempPerm217 = 0; + fTempPerm218 = 0; + fTempPerm219 = 0; + fTempPerm220 = 0; + fTempPerm221 = 0; + fTempPerm222 = 0; + fTempPerm223 = 0; + fTempPerm224 = 0; + fTempPerm225 = 0; + fTempPerm226 = 0; + fTempPerm227 = 0; + fTempPerm228 = 0; + fTempPerm229 = 0; + fTempPerm230 = 0; + fTempPerm231 = 0; + fTempPerm232 = 0; + fTempPerm233 = 0; + fTempPerm234 = 0; + fTempPerm235 = 0; + fTempPerm236 = 0; + fTempPerm237 = 0; + fTempPerm238 = 0; + fTempPerm239 = 0; + fTempPerm240 = 0; + fTempPerm241 = 0; + fTempPerm242 = 0; + fTempPerm243 = 0; + fTempPerm244 = 0; + fTempPerm245 = 0; + fTempPerm246 = 0; + fTempPerm247 = 0; + fTempPerm248 = 0; + fTempPerm249 = 0; + fTempPerm250 = 0; + fTempPerm251 = 0; + fTempPerm252 = 0; + fTempPerm253 = 0; + fTempPerm254 = 0; + fTempPerm255 = 0; + fTempPerm256 = 0; + fTempPerm257 = 0; + fTempPerm258 = 0; + fTempPerm259 = 0; + fTempPerm260 = 0; + fTempPerm261 = 0; + fTempPerm262 = 0; + fTempPerm263 = 0; + fTempPerm264 = 0; + fTempPerm265 = 0; + fTempPerm266 = 0; + fTempPerm267 = 0; + fTempPerm268 = 0; + fTempPerm269 = 0; + fTempPerm270 = 0; + fTempPerm271 = 0; + fTempPerm272 = 0; + fTempPerm273 = 0; + fTempPerm274 = 0; + fTempPerm275 = 0; + fTempPerm276 = 0; + fTempPerm277 = 0; + fTempPerm278 = 0; + fTempPerm279 = 0; + fTempPerm280 = 0; + fTempPerm281 = 0; + fTempPerm282 = 0; + fTempPerm283 = 0; + fTempPerm284 = 0; + fTempPerm285 = 0; + fTempPerm286 = 0; + fTempPerm287 = 0; + fTempPerm288 = 0; + fTempPerm289 = 0; + fTempPerm290 = 0; + fTempPerm291 = 0; + fTempPerm292 = 0; + fTempPerm293 = 0; + fTempPerm294 = 0; + fTempPerm295 = 0; + fTempPerm296 = 0; + fTempPerm297 = 0; + fTempPerm298 = 0; + fTempPerm299 = 0; + fTempPerm300 = 0; + fTempPerm301 = 0; + fTempPerm302 = 0; + fTempPerm303 = 0; + fTempPerm304 = 0; + fTempPerm305 = 0; + fTempPerm306 = 0; + fTempPerm307 = 0; + fTempPerm308 = 0; + fTempPerm309 = 0; + fTempPerm310 = 0; + fTempPerm311 = 0; + fTempPerm312 = 0; + fTempPerm313 = 0; + fTempPerm314 = 0; + fTempPerm315 = 0; + fTempPerm316 = 0; + fTempPerm317 = 0; + fTempPerm318 = 0; + fTempPerm319 = 0; + fTempPerm320 = 0; + fTempPerm321 = 0; + fTempPerm322 = 0; + fTempPerm323 = 0; + fTempPerm324 = 0; + fTempPerm325 = 0; + fTempPerm326 = 0; + fTempPerm327 = 0; + fTempPerm328 = 0; + fTempPerm329 = 0; + fTempPerm330 = 0; + fTempPerm331 = 0; + fTempPerm332 = 0; + fTempPerm333 = 0; + fTempPerm334 = 0; + fTempPerm335 = 0; + fTempPerm336 = 0; + fTempPerm337 = 0; + fTempPerm338 = 0; + fTempPerm339 = 0; + fTempPerm340 = 0; + fTempPerm341 = 0; + fTempPerm342 = 0; + fTempPerm343 = 0; + fTempPerm344 = 0; + fTempPerm345 = 0; + fTempPerm346 = 0; + fTempPerm347 = 0; + fTempPerm348 = 0; + fTempPerm349 = 0; + fTempPerm350 = 0; + fTempPerm351 = 0; + fTempPerm352 = 0; + fTempPerm353 = 0; + fTempPerm354 = 0; + fTempPerm355 = 0; + fTempPerm356 = 0; + fTempPerm357 = 0; + fTempPerm358 = 0; + fTempPerm359 = 0; + fTempPerm360 = 0; + fTempPerm361 = 0; + fTempPerm362 = 0; + fTempPerm363 = 0; + fTempPerm364 = 0; + fTempPerm365 = 0; + fTempPerm366 = 0; + fTempPerm367 = 0; + fTempPerm368 = 0; + fTempPerm369 = 0; + fTempPerm370 = 0; + fTempPerm371 = 0; + fTempPerm372 = 0; + fTempPerm373 = 0; + fTempPerm374 = 0; + fTempPerm375 = 0; + fTempPerm376 = 0; + fTempPerm377 = 0; + fTempPerm378 = 0; + fTempPerm379 = 0; + fTempPerm380 = 0; + fTempPerm381 = 0; + fTempPerm382 = 0; + fTempPerm383 = 0; + fTempPerm384 = 0; + fTempPerm385 = 0; + fTempPerm386 = 0; + fTempPerm387 = 0; + fTempPerm388 = 0; + fTempPerm389 = 0; + fTempPerm390 = 0; + fTempPerm391 = 0; + fTempPerm392 = 0; + fTempPerm393 = 0; + fTempPerm394 = 0; + fTempPerm395 = 0; + fTempPerm396 = 0; + fTempPerm397 = 0; + fTempPerm398 = 0; + fTempPerm399 = 0; + fTempPerm400 = 0; + fTempPerm401 = 0; + fTempPerm402 = 0; + fTempPerm403 = 0; + fTempPerm404 = 0; + fTempPerm405 = 0; + fTempPerm406 = 0; + fTempPerm407 = 0; + fTempPerm408 = 0; + fTempPerm409 = 0; + fTempPerm410 = 0; + fTempPerm411 = 0; + fTempPerm412 = 0; + fTempPerm413 = 0; + fTempPerm414 = 0; + fTempPerm415 = 0; + fTempPerm416 = 0; + fTempPerm417 = 0; + fTempPerm418 = 0; + fTempPerm419 = 0; + fTempPerm420 = 0; + fTempPerm421 = 0; + fTempPerm422 = 0; + fTempPerm423 = 0; + fTempPerm424 = 0; + fTempPerm425 = 0; + fTempPerm426 = 0; + fTempPerm427 = 0; + fTempPerm428 = 0; + fTempPerm429 = 0; + fTempPerm430 = 0; + fTempPerm431 = 0; + fTempPerm432 = 0; + fTempPerm433 = 0; + fTempPerm434 = 0; + fTempPerm435 = 0; + fTempPerm436 = 0; + fTempPerm437 = 0; + fTempPerm438 = 0; + fTempPerm439 = 0; + fTempPerm440 = 0; + fTempPerm441 = 0; + fTempPerm442 = 0; + fTempPerm443 = 0; + fTempPerm444 = 0; + fTempPerm445 = 0; + fTempPerm446 = 0; + fTempPerm447 = 0; + fTempPerm448 = 0; + fTempPerm449 = 0; + fTempPerm450 = 0; + fTempPerm451 = 0; + fTempPerm452 = 0; + fTempPerm453 = 0; + fTempPerm454 = 0; + fTempPerm455 = 0; + fTempPerm456 = 0; + fTempPerm457 = 0; + fTempPerm458 = 0; + fTempPerm459 = 0; + fTempPerm460 = 0; + fTempPerm461 = 0; + fTempPerm462 = 0; + fTempPerm463 = 0; + fTempPerm464 = 0; + fTempPerm465 = 0; + fTempPerm466 = 0; + fTempPerm467 = 0; + fTempPerm468 = 0; + fTempPerm469 = 0; + fTempPerm470 = 0; + fTempPerm471 = 0; + fTempPerm472 = 0; + fTempPerm473 = 0; + fTempPerm474 = 0; + fTempPerm475 = 0; + fTempPerm476 = 0; + fTempPerm477 = 0; + fTempPerm478 = 0; + fTempPerm479 = 0; + fTempPerm480 = 0; + fTempPerm481 = 0; + fTempPerm482 = 0; + fTempPerm483 = 0; + fTempPerm484 = 0; + fTempPerm485 = 0; + fTempPerm486 = 0; + fTempPerm487 = 0; + fTempPerm488 = 0; + fTempPerm489 = 0; + fTempPerm490 = 0; + fTempPerm491 = 0; + fTempPerm492 = 0; + fTempPerm493 = 0; + fTempPerm494 = 0; + fTempPerm495 = 0; + fTempPerm496 = 0; + fTempPerm497 = 0; + fTempPerm498 = 0; + fTempPerm499 = 0; + fTempPerm500 = 0; + fTempPerm501 = 0; + fTempPerm502 = 0; + fTempPerm503 = 0; + fTempPerm504 = 0; + fTempPerm505 = 0; + fTempPerm506 = 0; + fTempPerm507 = 0; + fTempPerm508 = 0; + fTempPerm509 = 0; + fTempPerm510 = 0; + fTempPerm511 = 0; + fTempPerm512 = 0; + fTempPerm513 = 0; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + IOTA = 0; + for (int i=0; i<128; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<128; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<128; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<128; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecoderLebedev50Binaural1"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbe77630060", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbe7753eb50", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbe77536ed0", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fbe7762b4e0", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 10"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 1e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 10"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 1e+01, 0.1); + ui_interface->closeBox(); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("Left"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x7fbe77492670", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Right"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x7fbe774a3a50", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + //LoopGraphScalar + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF diff --git a/source/HOAUGens/HOADecoderLebedev50Binaural2.cpp b/source/HOAUGens/HOADecoderLebedev50Binaural2.cpp new file mode 100644 index 0000000000..8aeddec84f --- /dev/null +++ b/source/HOAUGens/HOADecoderLebedev50Binaural2.cpp @@ -0,0 +1,4649 @@ +//---------------------------------------------------------- +// name: "HOADecoderLebedev50Binaural2" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL)" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.12.0 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fTempPerm0; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fTempPerm1; + int IOTA; + double fVec0[128]; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; + double fTempPerm8; + double fTempPerm9; + double fTempPerm10; + double fTempPerm11; + double fTempPerm12; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fTempPerm13; + double fVec1[128]; + double fTempPerm14; + double fTempPerm15; + double fTempPerm16; + double fTempPerm17; + double fTempPerm18; + double fTempPerm19; + double fTempPerm20; + double fTempPerm21; + double fTempPerm22; + double fTempPerm23; + double fTempPerm24; + double fTempPerm25; + double fTempPerm26; + double fTempPerm27; + double fTempPerm28; + double fTempPerm29; + double fTempPerm30; + double fTempPerm31; + double fRec5[2]; + FAUSTFLOAT fbargraph2; + double fTempPerm32; + double fVec2[128]; + double fTempPerm33; + double fTempPerm34; + double fTempPerm35; + double fTempPerm36; + double fTempPerm37; + double fTempPerm38; + double fTempPerm39; + double fTempPerm40; + double fTempPerm41; + double fTempPerm42; + double fTempPerm43; + double fRec6[2]; + FAUSTFLOAT fbargraph3; + double fTempPerm44; + double fVec3[128]; + double fTempPerm45; + double fTempPerm46; + double fTempPerm47; + double fTempPerm48; + double fTempPerm49; + double fTempPerm50; + double fTempPerm51; + double fTempPerm52; + double fTempPerm53; + double fTempPerm54; + double fTempPerm55; + double fTempPerm56; + double fTempPerm57; + double fTempPerm58; + double fTempPerm59; + double fTempPerm60; + double fTempPerm61; + double fTempPerm62; + double fTempPerm63; + double fTempPerm64; + double fTempPerm65; + double fTempPerm66; + double fTempPerm67; + double fTempPerm68; + double fTempPerm69; + double fTempPerm70; + double fTempPerm71; + double fTempPerm72; + double fTempPerm73; + double fTempPerm74; + double fTempPerm75; + double fTempPerm76; + double fTempPerm77; + double fTempPerm78; + double fTempPerm79; + double fTempPerm80; + double fTempPerm81; + double fTempPerm82; + double fTempPerm83; + double fTempPerm84; + double fTempPerm85; + double fTempPerm86; + double fTempPerm87; + double fTempPerm88; + double fTempPerm89; + double fTempPerm90; + double fTempPerm91; + double fTempPerm92; + double fTempPerm93; + double fTempPerm94; + double fTempPerm95; + double fTempPerm96; + double fTempPerm97; + double fTempPerm98; + double fTempPerm99; + double fTempPerm100; + double fTempPerm101; + double fTempPerm102; + double fTempPerm103; + double fTempPerm104; + double fTempPerm105; + double fTempPerm106; + double fTempPerm107; + double fTempPerm108; + double fTempPerm109; + double fTempPerm110; + double fTempPerm111; + double fTempPerm112; + double fTempPerm113; + double fTempPerm114; + double fTempPerm115; + double fRec7[2]; + FAUSTFLOAT fbargraph4; + double fTempPerm116; + double fVec4[128]; + double fTempPerm117; + double fTempPerm118; + double fTempPerm119; + double fTempPerm120; + double fTempPerm121; + double fTempPerm122; + double fTempPerm123; + double fTempPerm124; + double fTempPerm125; + double fRec8[2]; + FAUSTFLOAT fbargraph5; + double fTempPerm126; + double fVec5[128]; + double fTempPerm127; + double fTempPerm128; + double fTempPerm129; + double fTempPerm130; + double fTempPerm131; + double fTempPerm132; + double fTempPerm133; + double fTempPerm134; + double fTempPerm135; + double fTempPerm136; + double fTempPerm137; + double fTempPerm138; + double fTempPerm139; + double fTempPerm140; + double fTempPerm141; + double fTempPerm142; + double fRec9[2]; + FAUSTFLOAT fbargraph6; + double fTempPerm143; + double fVec6[128]; + double fTempPerm144; + double fTempPerm145; + double fTempPerm146; + double fTempPerm147; + double fTempPerm148; + double fTempPerm149; + double fTempPerm150; + double fTempPerm151; + double fTempPerm152; + double fTempPerm153; + double fTempPerm154; + double fTempPerm155; + double fTempPerm156; + double fTempPerm157; + double fTempPerm158; + double fTempPerm159; + double fTempPerm160; + double fRec10[2]; + FAUSTFLOAT fbargraph7; + double fTempPerm161; + double fVec7[128]; + double fTempPerm162; + double fTempPerm163; + double fTempPerm164; + double fTempPerm165; + double fTempPerm166; + double fTempPerm167; + double fTempPerm168; + double fTempPerm169; + double fTempPerm170; + double fTempPerm171; + double fTempPerm172; + double fTempPerm173; + double fTempPerm174; + double fTempPerm175; + double fTempPerm176; + double fTempPerm177; + double fTempPerm178; + double fTempPerm179; + double fTempPerm180; + double fTempPerm181; + double fTempPerm182; + double fTempPerm183; + double fTempPerm184; + double fTempPerm185; + double fTempPerm186; + double fTempPerm187; + double fTempPerm188; + double fTempPerm189; + double fTempPerm190; + double fTempPerm191; + double fTempPerm192; + double fTempPerm193; + double fTempPerm194; + double fTempPerm195; + double fTempPerm196; + double fTempPerm197; + double fTempPerm198; + double fTempPerm199; + double fTempPerm200; + double fTempPerm201; + double fTempPerm202; + double fTempPerm203; + double fTempPerm204; + double fTempPerm205; + double fTempPerm206; + double fTempPerm207; + double fTempPerm208; + double fTempPerm209; + double fTempPerm210; + double fTempPerm211; + double fTempPerm212; + double fTempPerm213; + double fTempPerm214; + double fTempPerm215; + double fTempPerm216; + double fTempPerm217; + double fTempPerm218; + double fTempPerm219; + double fTempPerm220; + double fTempPerm221; + double fTempPerm222; + double fTempPerm223; + double fTempPerm224; + double fTempPerm225; + double fTempPerm226; + double fTempPerm227; + double fTempPerm228; + double fTempPerm229; + double fTempPerm230; + double fTempPerm231; + double fTempPerm232; + double fTempPerm233; + double fTempPerm234; + double fTempPerm235; + double fTempPerm236; + double fTempPerm237; + double fTempPerm238; + double fTempPerm239; + double fTempPerm240; + double fTempPerm241; + double fTempPerm242; + double fTempPerm243; + double fTempPerm244; + double fTempPerm245; + double fTempPerm246; + double fTempPerm247; + double fTempPerm248; + double fTempPerm249; + double fTempPerm250; + double fTempPerm251; + double fTempPerm252; + double fTempPerm253; + double fTempPerm254; + double fTempPerm255; + double fTempPerm256; + double fTempPerm257; + double fTempPerm258; + double fTempPerm259; + double fTempPerm260; + double fTempPerm261; + double fTempPerm262; + double fTempPerm263; + double fTempPerm264; + double fTempPerm265; + double fTempPerm266; + double fTempPerm267; + double fTempPerm268; + double fTempPerm269; + double fTempPerm270; + double fTempPerm271; + double fTempPerm272; + double fTempPerm273; + double fTempPerm274; + double fTempPerm275; + double fTempPerm276; + double fTempPerm277; + double fTempPerm278; + double fTempPerm279; + double fTempPerm280; + double fTempPerm281; + double fTempPerm282; + double fTempPerm283; + double fTempPerm284; + double fTempPerm285; + double fTempPerm286; + double fTempPerm287; + double fTempPerm288; + double fTempPerm289; + double fTempPerm290; + double fTempPerm291; + double fTempPerm292; + double fTempPerm293; + double fTempPerm294; + double fTempPerm295; + double fTempPerm296; + double fTempPerm297; + double fTempPerm298; + double fTempPerm299; + double fTempPerm300; + double fTempPerm301; + double fTempPerm302; + double fTempPerm303; + double fTempPerm304; + double fTempPerm305; + double fTempPerm306; + double fTempPerm307; + double fRec11[2]; + FAUSTFLOAT fbargraph8; + double fTempPerm308; + double fVec8[128]; + double fTempPerm309; + double fTempPerm310; + double fTempPerm311; + double fTempPerm312; + double fTempPerm313; + double fTempPerm314; + double fTempPerm315; + double fTempPerm316; + double fTempPerm317; + double fTempPerm318; + double fTempPerm319; + double fTempPerm320; + double fTempPerm321; + double fTempPerm322; + double fTempPerm323; + double fTempPerm324; + double fTempPerm325; + double fTempPerm326; + double fTempPerm327; + double fTempPerm328; + double fTempPerm329; + double fTempPerm330; + double fTempPerm331; + double fTempPerm332; + double fTempPerm333; + double fTempPerm334; + double fTempPerm335; + double fTempPerm336; + double fTempPerm337; + double fTempPerm338; + double fTempPerm339; + double fTempPerm340; + double fTempPerm341; + double fTempPerm342; + double fTempPerm343; + double fTempPerm344; + double fTempPerm345; + double fTempPerm346; + double fTempPerm347; + double fTempPerm348; + double fTempPerm349; + double fTempPerm350; + double fTempPerm351; + double fTempPerm352; + double fTempPerm353; + double fTempPerm354; + double fTempPerm355; + double fTempPerm356; + double fTempPerm357; + double fTempPerm358; + double fTempPerm359; + double fTempPerm360; + double fTempPerm361; + double fTempPerm362; + double fTempPerm363; + double fTempPerm364; + double fTempPerm365; + double fTempPerm366; + double fTempPerm367; + double fTempPerm368; + double fTempPerm369; + double fTempPerm370; + double fTempPerm371; + double fTempPerm372; + double fTempPerm373; + double fTempPerm374; + double fTempPerm375; + double fTempPerm376; + double fTempPerm377; + double fTempPerm378; + double fTempPerm379; + double fTempPerm380; + double fTempPerm381; + double fTempPerm382; + double fTempPerm383; + double fTempPerm384; + double fTempPerm385; + double fTempPerm386; + double fTempPerm387; + double fTempPerm388; + double fTempPerm389; + double fTempPerm390; + double fTempPerm391; + double fTempPerm392; + double fTempPerm393; + double fTempPerm394; + double fTempPerm395; + double fTempPerm396; + double fTempPerm397; + double fTempPerm398; + double fTempPerm399; + double fTempPerm400; + double fTempPerm401; + double fTempPerm402; + double fTempPerm403; + double fTempPerm404; + double fTempPerm405; + double fTempPerm406; + double fTempPerm407; + double fTempPerm408; + double fTempPerm409; + double fTempPerm410; + double fTempPerm411; + double fTempPerm412; + double fTempPerm413; + double fTempPerm414; + double fTempPerm415; + double fTempPerm416; + double fTempPerm417; + double fTempPerm418; + double fTempPerm419; + double fTempPerm420; + double fTempPerm421; + double fTempPerm422; + double fTempPerm423; + double fTempPerm424; + double fTempPerm425; + double fTempPerm426; + double fTempPerm427; + double fTempPerm428; + double fTempPerm429; + double fTempPerm430; + double fTempPerm431; + double fTempPerm432; + double fTempPerm433; + double fTempPerm434; + double fTempPerm435; + double fTempPerm436; + double fTempPerm437; + double fTempPerm438; + double fTempPerm439; + double fTempPerm440; + double fTempPerm441; + double fTempPerm442; + double fTempPerm443; + double fTempPerm444; + double fTempPerm445; + double fTempPerm446; + double fTempPerm447; + double fTempPerm448; + double fTempPerm449; + double fTempPerm450; + double fTempPerm451; + double fTempPerm452; + double fTempPerm453; + double fTempPerm454; + double fTempPerm455; + double fTempPerm456; + double fTempPerm457; + double fTempPerm458; + double fTempPerm459; + double fTempPerm460; + double fTempPerm461; + double fTempPerm462; + double fTempPerm463; + double fTempPerm464; + double fTempPerm465; + double fTempPerm466; + double fTempPerm467; + double fTempPerm468; + double fTempPerm469; + double fTempPerm470; + double fTempPerm471; + double fTempPerm472; + double fTempPerm473; + double fTempPerm474; + double fTempPerm475; + double fTempPerm476; + double fTempPerm477; + double fTempPerm478; + double fTempPerm479; + double fTempPerm480; + double fTempPerm481; + double fTempPerm482; + double fTempPerm483; + double fTempPerm484; + double fTempPerm485; + double fTempPerm486; + double fTempPerm487; + double fTempPerm488; + double fTempPerm489; + double fTempPerm490; + double fTempPerm491; + double fTempPerm492; + double fTempPerm493; + double fTempPerm494; + double fTempPerm495; + double fTempPerm496; + double fTempPerm497; + double fTempPerm498; + double fTempPerm499; + double fTempPerm500; + double fTempPerm501; + double fTempPerm502; + double fTempPerm503; + double fTempPerm504; + double fTempPerm505; + double fTempPerm506; + double fTempPerm507; + double fTempPerm508; + double fTempPerm509; + double fTempPerm510; + double fTempPerm511; + double fTempPerm512; + double fTempPerm513; + double fTempPerm514; + double fTempPerm515; + double fTempPerm516; + double fTempPerm517; + double fTempPerm518; + double fTempPerm519; + double fTempPerm520; + double fTempPerm521; + double fTempPerm522; + double fTempPerm523; + double fTempPerm524; + double fTempPerm525; + double fTempPerm526; + double fTempPerm527; + double fTempPerm528; + double fTempPerm529; + double fTempPerm530; + double fTempPerm531; + double fTempPerm532; + double fTempPerm533; + double fTempPerm534; + double fTempPerm535; + double fTempPerm536; + double fTempPerm537; + double fTempPerm538; + double fTempPerm539; + double fTempPerm540; + double fTempPerm541; + double fTempPerm542; + double fTempPerm543; + double fTempPerm544; + double fTempPerm545; + double fTempPerm546; + double fTempPerm547; + double fTempPerm548; + double fTempPerm549; + double fTempPerm550; + double fTempPerm551; + double fTempPerm552; + double fTempPerm553; + double fTempPerm554; + double fTempPerm555; + double fTempPerm556; + double fTempPerm557; + double fTempPerm558; + double fTempPerm559; + double fTempPerm560; + double fTempPerm561; + double fTempPerm562; + double fTempPerm563; + double fTempPerm564; + double fTempPerm565; + double fTempPerm566; + double fTempPerm567; + double fTempPerm568; + double fTempPerm569; + double fTempPerm570; + double fTempPerm571; + double fTempPerm572; + double fTempPerm573; + double fTempPerm574; + double fTempPerm575; + double fTempPerm576; + double fTempPerm577; + double fTempPerm578; + double fTempPerm579; + double fTempPerm580; + double fTempPerm581; + double fTempPerm582; + double fTempPerm583; + double fTempPerm584; + double fTempPerm585; + double fTempPerm586; + double fTempPerm587; + double fTempPerm588; + double fTempPerm589; + double fTempPerm590; + double fTempPerm591; + double fTempPerm592; + double fTempPerm593; + double fTempPerm594; + double fTempPerm595; + double fTempPerm596; + double fTempPerm597; + double fTempPerm598; + double fTempPerm599; + double fTempPerm600; + double fTempPerm601; + double fTempPerm602; + double fTempPerm603; + double fTempPerm604; + double fTempPerm605; + double fTempPerm606; + double fTempPerm607; + double fTempPerm608; + double fTempPerm609; + double fTempPerm610; + double fTempPerm611; + double fTempPerm612; + double fTempPerm613; + double fTempPerm614; + double fTempPerm615; + double fTempPerm616; + double fTempPerm617; + double fTempPerm618; + double fTempPerm619; + double fTempPerm620; + double fTempPerm621; + double fTempPerm622; + double fTempPerm623; + double fTempPerm624; + double fTempPerm625; + double fTempPerm626; + double fTempPerm627; + double fTempPerm628; + double fTempPerm629; + double fTempPerm630; + double fTempPerm631; + double fTempPerm632; + double fTempPerm633; + double fTempPerm634; + double fTempPerm635; + double fTempPerm636; + double fTempPerm637; + double fTempPerm638; + double fTempPerm639; + double fTempPerm640; + double fTempPerm641; + double fTempPerm642; + double fTempPerm643; + double fTempPerm644; + double fTempPerm645; + double fTempPerm646; + double fTempPerm647; + double fTempPerm648; + double fTempPerm649; + double fTempPerm650; + double fTempPerm651; + double fTempPerm652; + double fTempPerm653; + double fTempPerm654; + double fTempPerm655; + double fTempPerm656; + double fTempPerm657; + double fTempPerm658; + double fTempPerm659; + double fTempPerm660; + double fTempPerm661; + double fTempPerm662; + double fTempPerm663; + double fTempPerm664; + double fTempPerm665; + double fTempPerm666; + double fTempPerm667; + double fTempPerm668; + double fTempPerm669; + double fTempPerm670; + double fTempPerm671; + double fTempPerm672; + double fTempPerm673; + double fTempPerm674; + double fTempPerm675; + double fTempPerm676; + double fTempPerm677; + double fTempPerm678; + double fTempPerm679; + double fTempPerm680; + double fTempPerm681; + double fTempPerm682; + double fTempPerm683; + double fTempPerm684; + double fTempPerm685; + double fTempPerm686; + double fTempPerm687; + double fTempPerm688; + double fTempPerm689; + double fTempPerm690; + double fTempPerm691; + double fTempPerm692; + double fTempPerm693; + double fTempPerm694; + double fTempPerm695; + double fTempPerm696; + double fTempPerm697; + double fTempPerm698; + double fTempPerm699; + double fTempPerm700; + double fTempPerm701; + double fTempPerm702; + double fTempPerm703; + double fTempPerm704; + double fTempPerm705; + double fTempPerm706; + double fTempPerm707; + double fTempPerm708; + double fTempPerm709; + double fTempPerm710; + double fTempPerm711; + double fTempPerm712; + double fTempPerm713; + double fTempPerm714; + double fTempPerm715; + double fTempPerm716; + double fTempPerm717; + double fTempPerm718; + double fTempPerm719; + double fTempPerm720; + double fTempPerm721; + double fTempPerm722; + double fTempPerm723; + double fTempPerm724; + double fTempPerm725; + double fTempPerm726; + double fTempPerm727; + double fTempPerm728; + double fTempPerm729; + double fTempPerm730; + double fTempPerm731; + double fTempPerm732; + double fTempPerm733; + double fTempPerm734; + double fTempPerm735; + double fTempPerm736; + double fTempPerm737; + double fTempPerm738; + double fTempPerm739; + double fTempPerm740; + double fTempPerm741; + double fTempPerm742; + double fTempPerm743; + double fTempPerm744; + double fTempPerm745; + double fTempPerm746; + double fTempPerm747; + double fTempPerm748; + double fTempPerm749; + double fTempPerm750; + double fTempPerm751; + double fTempPerm752; + double fTempPerm753; + double fTempPerm754; + double fTempPerm755; + double fTempPerm756; + double fTempPerm757; + double fTempPerm758; + double fTempPerm759; + double fTempPerm760; + double fTempPerm761; + double fTempPerm762; + double fTempPerm763; + double fTempPerm764; + double fTempPerm765; + double fTempPerm766; + double fTempPerm767; + double fTempPerm768; + double fTempPerm769; + double fTempPerm770; + double fTempPerm771; + double fTempPerm772; + double fTempPerm773; + double fTempPerm774; + double fTempPerm775; + double fTempPerm776; + double fTempPerm777; + double fTempPerm778; + double fTempPerm779; + double fTempPerm780; + double fTempPerm781; + double fTempPerm782; + double fTempPerm783; + double fTempPerm784; + double fTempPerm785; + double fTempPerm786; + double fTempPerm787; + double fTempPerm788; + double fTempPerm789; + double fTempPerm790; + double fTempPerm791; + double fTempPerm792; + double fTempPerm793; + double fTempPerm794; + double fTempPerm795; + double fTempPerm796; + double fTempPerm797; + double fTempPerm798; + double fTempPerm799; + double fTempPerm800; + double fTempPerm801; + double fTempPerm802; + double fTempPerm803; + double fTempPerm804; + double fTempPerm805; + double fTempPerm806; + double fTempPerm807; + double fTempPerm808; + double fTempPerm809; + double fTempPerm810; + double fTempPerm811; + double fTempPerm812; + double fTempPerm813; + double fTempPerm814; + double fTempPerm815; + double fTempPerm816; + double fTempPerm817; + double fTempPerm818; + double fTempPerm819; + double fTempPerm820; + double fTempPerm821; + double fTempPerm822; + double fTempPerm823; + double fTempPerm824; + double fTempPerm825; + double fTempPerm826; + double fTempPerm827; + double fTempPerm828; + double fTempPerm829; + double fTempPerm830; + double fTempPerm831; + double fTempPerm832; + double fTempPerm833; + double fTempPerm834; + double fTempPerm835; + double fTempPerm836; + double fTempPerm837; + double fTempPerm838; + double fTempPerm839; + double fTempPerm840; + double fTempPerm841; + double fTempPerm842; + double fTempPerm843; + double fTempPerm844; + double fTempPerm845; + double fTempPerm846; + double fTempPerm847; + double fTempPerm848; + double fTempPerm849; + double fTempPerm850; + double fTempPerm851; + double fTempPerm852; + double fTempPerm853; + double fTempPerm854; + double fTempPerm855; + double fTempPerm856; + double fTempPerm857; + double fTempPerm858; + double fTempPerm859; + double fTempPerm860; + double fTempPerm861; + double fTempPerm862; + double fTempPerm863; + double fTempPerm864; + double fTempPerm865; + double fTempPerm866; + double fTempPerm867; + double fTempPerm868; + double fTempPerm869; + double fTempPerm870; + double fTempPerm871; + double fTempPerm872; + double fTempPerm873; + double fTempPerm874; + double fTempPerm875; + double fTempPerm876; + double fTempPerm877; + double fTempPerm878; + double fTempPerm879; + double fTempPerm880; + double fTempPerm881; + double fTempPerm882; + double fTempPerm883; + double fTempPerm884; + double fTempPerm885; + double fTempPerm886; + double fTempPerm887; + double fTempPerm888; + double fTempPerm889; + double fTempPerm890; + double fTempPerm891; + double fTempPerm892; + double fTempPerm893; + double fTempPerm894; + double fTempPerm895; + double fTempPerm896; + double fTempPerm897; + double fTempPerm898; + double fTempPerm899; + double fTempPerm900; + double fTempPerm901; + double fTempPerm902; + double fTempPerm903; + double fTempPerm904; + double fTempPerm905; + double fTempPerm906; + double fTempPerm907; + double fTempPerm908; + double fTempPerm909; + double fTempPerm910; + double fTempPerm911; + double fTempPerm912; + double fTempPerm913; + double fTempPerm914; + double fTempPerm915; + double fTempPerm916; + double fTempPerm917; + double fTempPerm918; + double fTempPerm919; + double fTempPerm920; + double fTempPerm921; + double fTempPerm922; + double fTempPerm923; + double fTempPerm924; + double fTempPerm925; + double fTempPerm926; + double fTempPerm927; + double fTempPerm928; + double fTempPerm929; + double fTempPerm930; + double fTempPerm931; + double fTempPerm932; + double fTempPerm933; + double fTempPerm934; + double fTempPerm935; + double fTempPerm936; + double fTempPerm937; + double fTempPerm938; + double fTempPerm939; + double fTempPerm940; + double fTempPerm941; + double fTempPerm942; + double fTempPerm943; + double fTempPerm944; + double fTempPerm945; + double fTempPerm946; + double fTempPerm947; + double fTempPerm948; + double fTempPerm949; + double fTempPerm950; + double fTempPerm951; + double fTempPerm952; + double fTempPerm953; + double fTempPerm954; + double fTempPerm955; + double fTempPerm956; + double fTempPerm957; + double fTempPerm958; + double fTempPerm959; + double fTempPerm960; + double fTempPerm961; + double fTempPerm962; + double fTempPerm963; + double fTempPerm964; + double fTempPerm965; + double fTempPerm966; + double fTempPerm967; + double fTempPerm968; + double fTempPerm969; + double fTempPerm970; + double fTempPerm971; + double fTempPerm972; + double fTempPerm973; + double fTempPerm974; + double fTempPerm975; + double fTempPerm976; + double fTempPerm977; + double fTempPerm978; + double fTempPerm979; + double fTempPerm980; + double fTempPerm981; + double fTempPerm982; + double fTempPerm983; + double fTempPerm984; + double fTempPerm985; + double fTempPerm986; + double fTempPerm987; + double fTempPerm988; + double fTempPerm989; + double fTempPerm990; + double fTempPerm991; + double fTempPerm992; + double fTempPerm993; + double fTempPerm994; + double fTempPerm995; + double fTempPerm996; + double fTempPerm997; + double fTempPerm998; + double fTempPerm999; + double fTempPerm1000; + double fTempPerm1001; + double fTempPerm1002; + double fTempPerm1003; + double fTempPerm1004; + double fTempPerm1005; + double fTempPerm1006; + double fTempPerm1007; + double fTempPerm1008; + double fTempPerm1009; + double fTempPerm1010; + double fTempPerm1011; + double fTempPerm1012; + double fTempPerm1013; + double fTempPerm1014; + double fTempPerm1015; + double fTempPerm1016; + double fTempPerm1017; + double fTempPerm1018; + double fTempPerm1019; + double fTempPerm1020; + double fTempPerm1021; + double fTempPerm1022; + double fTempPerm1023; + double fTempPerm1024; + double fTempPerm1025; + double fTempPerm1026; + double fTempPerm1027; + double fTempPerm1028; + double fTempPerm1029; + double fTempPerm1030; + double fTempPerm1031; + double fTempPerm1032; + double fTempPerm1033; + double fTempPerm1034; + double fTempPerm1035; + double fTempPerm1036; + double fTempPerm1037; + double fTempPerm1038; + double fTempPerm1039; + double fTempPerm1040; + double fTempPerm1041; + double fTempPerm1042; + double fTempPerm1043; + double fTempPerm1044; + double fTempPerm1045; + double fTempPerm1046; + double fTempPerm1047; + double fTempPerm1048; + double fTempPerm1049; + double fTempPerm1050; + double fTempPerm1051; + double fTempPerm1052; + double fTempPerm1053; + double fTempPerm1054; + double fTempPerm1055; + double fTempPerm1056; + double fTempPerm1057; + double fTempPerm1058; + double fTempPerm1059; + double fTempPerm1060; + double fTempPerm1061; + double fTempPerm1062; + double fTempPerm1063; + double fTempPerm1064; + double fTempPerm1065; + double fTempPerm1066; + double fTempPerm1067; + double fTempPerm1068; + double fTempPerm1069; + double fTempPerm1070; + double fTempPerm1071; + double fTempPerm1072; + double fTempPerm1073; + double fTempPerm1074; + double fTempPerm1075; + double fTempPerm1076; + double fTempPerm1077; + double fTempPerm1078; + double fTempPerm1079; + double fTempPerm1080; + double fTempPerm1081; + double fTempPerm1082; + double fTempPerm1083; + double fTempPerm1084; + double fTempPerm1085; + double fTempPerm1086; + double fTempPerm1087; + double fTempPerm1088; + double fTempPerm1089; + double fTempPerm1090; + double fTempPerm1091; + double fTempPerm1092; + double fTempPerm1093; + double fTempPerm1094; + double fTempPerm1095; + double fTempPerm1096; + double fTempPerm1097; + double fTempPerm1098; + double fTempPerm1099; + double fTempPerm1100; + double fTempPerm1101; + double fTempPerm1102; + double fTempPerm1103; + double fTempPerm1104; + double fTempPerm1105; + double fTempPerm1106; + double fTempPerm1107; + double fTempPerm1108; + double fTempPerm1109; + double fTempPerm1110; + double fTempPerm1111; + double fTempPerm1112; + double fTempPerm1113; + double fTempPerm1114; + double fTempPerm1115; + double fTempPerm1116; + double fTempPerm1117; + double fTempPerm1118; + double fTempPerm1119; + double fTempPerm1120; + double fTempPerm1121; + double fTempPerm1122; + double fTempPerm1123; + double fTempPerm1124; + double fTempPerm1125; + double fTempPerm1126; + double fTempPerm1127; + double fTempPerm1128; + double fTempPerm1129; + double fTempPerm1130; + double fTempPerm1131; + double fTempPerm1132; + double fTempPerm1133; + double fTempPerm1134; + double fTempPerm1135; + double fTempPerm1136; + double fTempPerm1137; + double fTempPerm1138; + double fTempPerm1139; + double fTempPerm1140; + double fTempPerm1141; + double fTempPerm1142; + double fTempPerm1143; + double fTempPerm1144; + double fTempPerm1145; + double fTempPerm1146; + double fTempPerm1147; + double fTempPerm1148; + double fTempPerm1149; + double fTempPerm1150; + double fTempPerm1151; + double fTempPerm1152; + double fRec0[2]; + FAUSTFLOAT fbargraph9; + double fTempPerm1153; + double fRec12[2]; + FAUSTFLOAT fbargraph10; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("name", "HOADecoderLebedev50Binaural2"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL)"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 2; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; + fTempPerm9 = 0; + fTempPerm10 = 0; + fTempPerm11 = 0; + fTempPerm12 = 0; + fTempPerm13 = 0; + fTempPerm14 = 0; + fTempPerm15 = 0; + fTempPerm16 = 0; + fTempPerm17 = 0; + fTempPerm18 = 0; + fTempPerm19 = 0; + fTempPerm20 = 0; + fTempPerm21 = 0; + fTempPerm22 = 0; + fTempPerm23 = 0; + fTempPerm24 = 0; + fTempPerm25 = 0; + fTempPerm26 = 0; + fTempPerm27 = 0; + fTempPerm28 = 0; + fTempPerm29 = 0; + fTempPerm30 = 0; + fTempPerm31 = 0; + fTempPerm32 = 0; + fTempPerm33 = 0; + fTempPerm34 = 0; + fTempPerm35 = 0; + fTempPerm36 = 0; + fTempPerm37 = 0; + fTempPerm38 = 0; + fTempPerm39 = 0; + fTempPerm40 = 0; + fTempPerm41 = 0; + fTempPerm42 = 0; + fTempPerm43 = 0; + fTempPerm44 = 0; + fTempPerm45 = 0; + fTempPerm46 = 0; + fTempPerm47 = 0; + fTempPerm48 = 0; + fTempPerm49 = 0; + fTempPerm50 = 0; + fTempPerm51 = 0; + fTempPerm52 = 0; + fTempPerm53 = 0; + fTempPerm54 = 0; + fTempPerm55 = 0; + fTempPerm56 = 0; + fTempPerm57 = 0; + fTempPerm58 = 0; + fTempPerm59 = 0; + fTempPerm60 = 0; + fTempPerm61 = 0; + fTempPerm62 = 0; + fTempPerm63 = 0; + fTempPerm64 = 0; + fTempPerm65 = 0; + fTempPerm66 = 0; + fTempPerm67 = 0; + fTempPerm68 = 0; + fTempPerm69 = 0; + fTempPerm70 = 0; + fTempPerm71 = 0; + fTempPerm72 = 0; + fTempPerm73 = 0; + fTempPerm74 = 0; + fTempPerm75 = 0; + fTempPerm76 = 0; + fTempPerm77 = 0; + fTempPerm78 = 0; + fTempPerm79 = 0; + fTempPerm80 = 0; + fTempPerm81 = 0; + fTempPerm82 = 0; + fTempPerm83 = 0; + fTempPerm84 = 0; + fTempPerm85 = 0; + fTempPerm86 = 0; + fTempPerm87 = 0; + fTempPerm88 = 0; + fTempPerm89 = 0; + fTempPerm90 = 0; + fTempPerm91 = 0; + fTempPerm92 = 0; + fTempPerm93 = 0; + fTempPerm94 = 0; + fTempPerm95 = 0; + fTempPerm96 = 0; + fTempPerm97 = 0; + fTempPerm98 = 0; + fTempPerm99 = 0; + fTempPerm100 = 0; + fTempPerm101 = 0; + fTempPerm102 = 0; + fTempPerm103 = 0; + fTempPerm104 = 0; + fTempPerm105 = 0; + fTempPerm106 = 0; + fTempPerm107 = 0; + fTempPerm108 = 0; + fTempPerm109 = 0; + fTempPerm110 = 0; + fTempPerm111 = 0; + fTempPerm112 = 0; + fTempPerm113 = 0; + fTempPerm114 = 0; + fTempPerm115 = 0; + fTempPerm116 = 0; + fTempPerm117 = 0; + fTempPerm118 = 0; + fTempPerm119 = 0; + fTempPerm120 = 0; + fTempPerm121 = 0; + fTempPerm122 = 0; + fTempPerm123 = 0; + fTempPerm124 = 0; + fTempPerm125 = 0; + fTempPerm126 = 0; + fTempPerm127 = 0; + fTempPerm128 = 0; + fTempPerm129 = 0; + fTempPerm130 = 0; + fTempPerm131 = 0; + fTempPerm132 = 0; + fTempPerm133 = 0; + fTempPerm134 = 0; + fTempPerm135 = 0; + fTempPerm136 = 0; + fTempPerm137 = 0; + fTempPerm138 = 0; + fTempPerm139 = 0; + fTempPerm140 = 0; + fTempPerm141 = 0; + fTempPerm142 = 0; + fTempPerm143 = 0; + fTempPerm144 = 0; + fTempPerm145 = 0; + fTempPerm146 = 0; + fTempPerm147 = 0; + fTempPerm148 = 0; + fTempPerm149 = 0; + fTempPerm150 = 0; + fTempPerm151 = 0; + fTempPerm152 = 0; + fTempPerm153 = 0; + fTempPerm154 = 0; + fTempPerm155 = 0; + fTempPerm156 = 0; + fTempPerm157 = 0; + fTempPerm158 = 0; + fTempPerm159 = 0; + fTempPerm160 = 0; + fTempPerm161 = 0; + fTempPerm162 = 0; + fTempPerm163 = 0; + fTempPerm164 = 0; + fTempPerm165 = 0; + fTempPerm166 = 0; + fTempPerm167 = 0; + fTempPerm168 = 0; + fTempPerm169 = 0; + fTempPerm170 = 0; + fTempPerm171 = 0; + fTempPerm172 = 0; + fTempPerm173 = 0; + fTempPerm174 = 0; + fTempPerm175 = 0; + fTempPerm176 = 0; + fTempPerm177 = 0; + fTempPerm178 = 0; + fTempPerm179 = 0; + fTempPerm180 = 0; + fTempPerm181 = 0; + fTempPerm182 = 0; + fTempPerm183 = 0; + fTempPerm184 = 0; + fTempPerm185 = 0; + fTempPerm186 = 0; + fTempPerm187 = 0; + fTempPerm188 = 0; + fTempPerm189 = 0; + fTempPerm190 = 0; + fTempPerm191 = 0; + fTempPerm192 = 0; + fTempPerm193 = 0; + fTempPerm194 = 0; + fTempPerm195 = 0; + fTempPerm196 = 0; + fTempPerm197 = 0; + fTempPerm198 = 0; + fTempPerm199 = 0; + fTempPerm200 = 0; + fTempPerm201 = 0; + fTempPerm202 = 0; + fTempPerm203 = 0; + fTempPerm204 = 0; + fTempPerm205 = 0; + fTempPerm206 = 0; + fTempPerm207 = 0; + fTempPerm208 = 0; + fTempPerm209 = 0; + fTempPerm210 = 0; + fTempPerm211 = 0; + fTempPerm212 = 0; + fTempPerm213 = 0; + fTempPerm214 = 0; + fTempPerm215 = 0; + fTempPerm216 = 0; + fTempPerm217 = 0; + fTempPerm218 = 0; + fTempPerm219 = 0; + fTempPerm220 = 0; + fTempPerm221 = 0; + fTempPerm222 = 0; + fTempPerm223 = 0; + fTempPerm224 = 0; + fTempPerm225 = 0; + fTempPerm226 = 0; + fTempPerm227 = 0; + fTempPerm228 = 0; + fTempPerm229 = 0; + fTempPerm230 = 0; + fTempPerm231 = 0; + fTempPerm232 = 0; + fTempPerm233 = 0; + fTempPerm234 = 0; + fTempPerm235 = 0; + fTempPerm236 = 0; + fTempPerm237 = 0; + fTempPerm238 = 0; + fTempPerm239 = 0; + fTempPerm240 = 0; + fTempPerm241 = 0; + fTempPerm242 = 0; + fTempPerm243 = 0; + fTempPerm244 = 0; + fTempPerm245 = 0; + fTempPerm246 = 0; + fTempPerm247 = 0; + fTempPerm248 = 0; + fTempPerm249 = 0; + fTempPerm250 = 0; + fTempPerm251 = 0; + fTempPerm252 = 0; + fTempPerm253 = 0; + fTempPerm254 = 0; + fTempPerm255 = 0; + fTempPerm256 = 0; + fTempPerm257 = 0; + fTempPerm258 = 0; + fTempPerm259 = 0; + fTempPerm260 = 0; + fTempPerm261 = 0; + fTempPerm262 = 0; + fTempPerm263 = 0; + fTempPerm264 = 0; + fTempPerm265 = 0; + fTempPerm266 = 0; + fTempPerm267 = 0; + fTempPerm268 = 0; + fTempPerm269 = 0; + fTempPerm270 = 0; + fTempPerm271 = 0; + fTempPerm272 = 0; + fTempPerm273 = 0; + fTempPerm274 = 0; + fTempPerm275 = 0; + fTempPerm276 = 0; + fTempPerm277 = 0; + fTempPerm278 = 0; + fTempPerm279 = 0; + fTempPerm280 = 0; + fTempPerm281 = 0; + fTempPerm282 = 0; + fTempPerm283 = 0; + fTempPerm284 = 0; + fTempPerm285 = 0; + fTempPerm286 = 0; + fTempPerm287 = 0; + fTempPerm288 = 0; + fTempPerm289 = 0; + fTempPerm290 = 0; + fTempPerm291 = 0; + fTempPerm292 = 0; + fTempPerm293 = 0; + fTempPerm294 = 0; + fTempPerm295 = 0; + fTempPerm296 = 0; + fTempPerm297 = 0; + fTempPerm298 = 0; + fTempPerm299 = 0; + fTempPerm300 = 0; + fTempPerm301 = 0; + fTempPerm302 = 0; + fTempPerm303 = 0; + fTempPerm304 = 0; + fTempPerm305 = 0; + fTempPerm306 = 0; + fTempPerm307 = 0; + fTempPerm308 = 0; + fTempPerm309 = 0; + fTempPerm310 = 0; + fTempPerm311 = 0; + fTempPerm312 = 0; + fTempPerm313 = 0; + fTempPerm314 = 0; + fTempPerm315 = 0; + fTempPerm316 = 0; + fTempPerm317 = 0; + fTempPerm318 = 0; + fTempPerm319 = 0; + fTempPerm320 = 0; + fTempPerm321 = 0; + fTempPerm322 = 0; + fTempPerm323 = 0; + fTempPerm324 = 0; + fTempPerm325 = 0; + fTempPerm326 = 0; + fTempPerm327 = 0; + fTempPerm328 = 0; + fTempPerm329 = 0; + fTempPerm330 = 0; + fTempPerm331 = 0; + fTempPerm332 = 0; + fTempPerm333 = 0; + fTempPerm334 = 0; + fTempPerm335 = 0; + fTempPerm336 = 0; + fTempPerm337 = 0; + fTempPerm338 = 0; + fTempPerm339 = 0; + fTempPerm340 = 0; + fTempPerm341 = 0; + fTempPerm342 = 0; + fTempPerm343 = 0; + fTempPerm344 = 0; + fTempPerm345 = 0; + fTempPerm346 = 0; + fTempPerm347 = 0; + fTempPerm348 = 0; + fTempPerm349 = 0; + fTempPerm350 = 0; + fTempPerm351 = 0; + fTempPerm352 = 0; + fTempPerm353 = 0; + fTempPerm354 = 0; + fTempPerm355 = 0; + fTempPerm356 = 0; + fTempPerm357 = 0; + fTempPerm358 = 0; + fTempPerm359 = 0; + fTempPerm360 = 0; + fTempPerm361 = 0; + fTempPerm362 = 0; + fTempPerm363 = 0; + fTempPerm364 = 0; + fTempPerm365 = 0; + fTempPerm366 = 0; + fTempPerm367 = 0; + fTempPerm368 = 0; + fTempPerm369 = 0; + fTempPerm370 = 0; + fTempPerm371 = 0; + fTempPerm372 = 0; + fTempPerm373 = 0; + fTempPerm374 = 0; + fTempPerm375 = 0; + fTempPerm376 = 0; + fTempPerm377 = 0; + fTempPerm378 = 0; + fTempPerm379 = 0; + fTempPerm380 = 0; + fTempPerm381 = 0; + fTempPerm382 = 0; + fTempPerm383 = 0; + fTempPerm384 = 0; + fTempPerm385 = 0; + fTempPerm386 = 0; + fTempPerm387 = 0; + fTempPerm388 = 0; + fTempPerm389 = 0; + fTempPerm390 = 0; + fTempPerm391 = 0; + fTempPerm392 = 0; + fTempPerm393 = 0; + fTempPerm394 = 0; + fTempPerm395 = 0; + fTempPerm396 = 0; + fTempPerm397 = 0; + fTempPerm398 = 0; + fTempPerm399 = 0; + fTempPerm400 = 0; + fTempPerm401 = 0; + fTempPerm402 = 0; + fTempPerm403 = 0; + fTempPerm404 = 0; + fTempPerm405 = 0; + fTempPerm406 = 0; + fTempPerm407 = 0; + fTempPerm408 = 0; + fTempPerm409 = 0; + fTempPerm410 = 0; + fTempPerm411 = 0; + fTempPerm412 = 0; + fTempPerm413 = 0; + fTempPerm414 = 0; + fTempPerm415 = 0; + fTempPerm416 = 0; + fTempPerm417 = 0; + fTempPerm418 = 0; + fTempPerm419 = 0; + fTempPerm420 = 0; + fTempPerm421 = 0; + fTempPerm422 = 0; + fTempPerm423 = 0; + fTempPerm424 = 0; + fTempPerm425 = 0; + fTempPerm426 = 0; + fTempPerm427 = 0; + fTempPerm428 = 0; + fTempPerm429 = 0; + fTempPerm430 = 0; + fTempPerm431 = 0; + fTempPerm432 = 0; + fTempPerm433 = 0; + fTempPerm434 = 0; + fTempPerm435 = 0; + fTempPerm436 = 0; + fTempPerm437 = 0; + fTempPerm438 = 0; + fTempPerm439 = 0; + fTempPerm440 = 0; + fTempPerm441 = 0; + fTempPerm442 = 0; + fTempPerm443 = 0; + fTempPerm444 = 0; + fTempPerm445 = 0; + fTempPerm446 = 0; + fTempPerm447 = 0; + fTempPerm448 = 0; + fTempPerm449 = 0; + fTempPerm450 = 0; + fTempPerm451 = 0; + fTempPerm452 = 0; + fTempPerm453 = 0; + fTempPerm454 = 0; + fTempPerm455 = 0; + fTempPerm456 = 0; + fTempPerm457 = 0; + fTempPerm458 = 0; + fTempPerm459 = 0; + fTempPerm460 = 0; + fTempPerm461 = 0; + fTempPerm462 = 0; + fTempPerm463 = 0; + fTempPerm464 = 0; + fTempPerm465 = 0; + fTempPerm466 = 0; + fTempPerm467 = 0; + fTempPerm468 = 0; + fTempPerm469 = 0; + fTempPerm470 = 0; + fTempPerm471 = 0; + fTempPerm472 = 0; + fTempPerm473 = 0; + fTempPerm474 = 0; + fTempPerm475 = 0; + fTempPerm476 = 0; + fTempPerm477 = 0; + fTempPerm478 = 0; + fTempPerm479 = 0; + fTempPerm480 = 0; + fTempPerm481 = 0; + fTempPerm482 = 0; + fTempPerm483 = 0; + fTempPerm484 = 0; + fTempPerm485 = 0; + fTempPerm486 = 0; + fTempPerm487 = 0; + fTempPerm488 = 0; + fTempPerm489 = 0; + fTempPerm490 = 0; + fTempPerm491 = 0; + fTempPerm492 = 0; + fTempPerm493 = 0; + fTempPerm494 = 0; + fTempPerm495 = 0; + fTempPerm496 = 0; + fTempPerm497 = 0; + fTempPerm498 = 0; + fTempPerm499 = 0; + fTempPerm500 = 0; + fTempPerm501 = 0; + fTempPerm502 = 0; + fTempPerm503 = 0; + fTempPerm504 = 0; + fTempPerm505 = 0; + fTempPerm506 = 0; + fTempPerm507 = 0; + fTempPerm508 = 0; + fTempPerm509 = 0; + fTempPerm510 = 0; + fTempPerm511 = 0; + fTempPerm512 = 0; + fTempPerm513 = 0; + fTempPerm514 = 0; + fTempPerm515 = 0; + fTempPerm516 = 0; + fTempPerm517 = 0; + fTempPerm518 = 0; + fTempPerm519 = 0; + fTempPerm520 = 0; + fTempPerm521 = 0; + fTempPerm522 = 0; + fTempPerm523 = 0; + fTempPerm524 = 0; + fTempPerm525 = 0; + fTempPerm526 = 0; + fTempPerm527 = 0; + fTempPerm528 = 0; + fTempPerm529 = 0; + fTempPerm530 = 0; + fTempPerm531 = 0; + fTempPerm532 = 0; + fTempPerm533 = 0; + fTempPerm534 = 0; + fTempPerm535 = 0; + fTempPerm536 = 0; + fTempPerm537 = 0; + fTempPerm538 = 0; + fTempPerm539 = 0; + fTempPerm540 = 0; + fTempPerm541 = 0; + fTempPerm542 = 0; + fTempPerm543 = 0; + fTempPerm544 = 0; + fTempPerm545 = 0; + fTempPerm546 = 0; + fTempPerm547 = 0; + fTempPerm548 = 0; + fTempPerm549 = 0; + fTempPerm550 = 0; + fTempPerm551 = 0; + fTempPerm552 = 0; + fTempPerm553 = 0; + fTempPerm554 = 0; + fTempPerm555 = 0; + fTempPerm556 = 0; + fTempPerm557 = 0; + fTempPerm558 = 0; + fTempPerm559 = 0; + fTempPerm560 = 0; + fTempPerm561 = 0; + fTempPerm562 = 0; + fTempPerm563 = 0; + fTempPerm564 = 0; + fTempPerm565 = 0; + fTempPerm566 = 0; + fTempPerm567 = 0; + fTempPerm568 = 0; + fTempPerm569 = 0; + fTempPerm570 = 0; + fTempPerm571 = 0; + fTempPerm572 = 0; + fTempPerm573 = 0; + fTempPerm574 = 0; + fTempPerm575 = 0; + fTempPerm576 = 0; + fTempPerm577 = 0; + fTempPerm578 = 0; + fTempPerm579 = 0; + fTempPerm580 = 0; + fTempPerm581 = 0; + fTempPerm582 = 0; + fTempPerm583 = 0; + fTempPerm584 = 0; + fTempPerm585 = 0; + fTempPerm586 = 0; + fTempPerm587 = 0; + fTempPerm588 = 0; + fTempPerm589 = 0; + fTempPerm590 = 0; + fTempPerm591 = 0; + fTempPerm592 = 0; + fTempPerm593 = 0; + fTempPerm594 = 0; + fTempPerm595 = 0; + fTempPerm596 = 0; + fTempPerm597 = 0; + fTempPerm598 = 0; + fTempPerm599 = 0; + fTempPerm600 = 0; + fTempPerm601 = 0; + fTempPerm602 = 0; + fTempPerm603 = 0; + fTempPerm604 = 0; + fTempPerm605 = 0; + fTempPerm606 = 0; + fTempPerm607 = 0; + fTempPerm608 = 0; + fTempPerm609 = 0; + fTempPerm610 = 0; + fTempPerm611 = 0; + fTempPerm612 = 0; + fTempPerm613 = 0; + fTempPerm614 = 0; + fTempPerm615 = 0; + fTempPerm616 = 0; + fTempPerm617 = 0; + fTempPerm618 = 0; + fTempPerm619 = 0; + fTempPerm620 = 0; + fTempPerm621 = 0; + fTempPerm622 = 0; + fTempPerm623 = 0; + fTempPerm624 = 0; + fTempPerm625 = 0; + fTempPerm626 = 0; + fTempPerm627 = 0; + fTempPerm628 = 0; + fTempPerm629 = 0; + fTempPerm630 = 0; + fTempPerm631 = 0; + fTempPerm632 = 0; + fTempPerm633 = 0; + fTempPerm634 = 0; + fTempPerm635 = 0; + fTempPerm636 = 0; + fTempPerm637 = 0; + fTempPerm638 = 0; + fTempPerm639 = 0; + fTempPerm640 = 0; + fTempPerm641 = 0; + fTempPerm642 = 0; + fTempPerm643 = 0; + fTempPerm644 = 0; + fTempPerm645 = 0; + fTempPerm646 = 0; + fTempPerm647 = 0; + fTempPerm648 = 0; + fTempPerm649 = 0; + fTempPerm650 = 0; + fTempPerm651 = 0; + fTempPerm652 = 0; + fTempPerm653 = 0; + fTempPerm654 = 0; + fTempPerm655 = 0; + fTempPerm656 = 0; + fTempPerm657 = 0; + fTempPerm658 = 0; + fTempPerm659 = 0; + fTempPerm660 = 0; + fTempPerm661 = 0; + fTempPerm662 = 0; + fTempPerm663 = 0; + fTempPerm664 = 0; + fTempPerm665 = 0; + fTempPerm666 = 0; + fTempPerm667 = 0; + fTempPerm668 = 0; + fTempPerm669 = 0; + fTempPerm670 = 0; + fTempPerm671 = 0; + fTempPerm672 = 0; + fTempPerm673 = 0; + fTempPerm674 = 0; + fTempPerm675 = 0; + fTempPerm676 = 0; + fTempPerm677 = 0; + fTempPerm678 = 0; + fTempPerm679 = 0; + fTempPerm680 = 0; + fTempPerm681 = 0; + fTempPerm682 = 0; + fTempPerm683 = 0; + fTempPerm684 = 0; + fTempPerm685 = 0; + fTempPerm686 = 0; + fTempPerm687 = 0; + fTempPerm688 = 0; + fTempPerm689 = 0; + fTempPerm690 = 0; + fTempPerm691 = 0; + fTempPerm692 = 0; + fTempPerm693 = 0; + fTempPerm694 = 0; + fTempPerm695 = 0; + fTempPerm696 = 0; + fTempPerm697 = 0; + fTempPerm698 = 0; + fTempPerm699 = 0; + fTempPerm700 = 0; + fTempPerm701 = 0; + fTempPerm702 = 0; + fTempPerm703 = 0; + fTempPerm704 = 0; + fTempPerm705 = 0; + fTempPerm706 = 0; + fTempPerm707 = 0; + fTempPerm708 = 0; + fTempPerm709 = 0; + fTempPerm710 = 0; + fTempPerm711 = 0; + fTempPerm712 = 0; + fTempPerm713 = 0; + fTempPerm714 = 0; + fTempPerm715 = 0; + fTempPerm716 = 0; + fTempPerm717 = 0; + fTempPerm718 = 0; + fTempPerm719 = 0; + fTempPerm720 = 0; + fTempPerm721 = 0; + fTempPerm722 = 0; + fTempPerm723 = 0; + fTempPerm724 = 0; + fTempPerm725 = 0; + fTempPerm726 = 0; + fTempPerm727 = 0; + fTempPerm728 = 0; + fTempPerm729 = 0; + fTempPerm730 = 0; + fTempPerm731 = 0; + fTempPerm732 = 0; + fTempPerm733 = 0; + fTempPerm734 = 0; + fTempPerm735 = 0; + fTempPerm736 = 0; + fTempPerm737 = 0; + fTempPerm738 = 0; + fTempPerm739 = 0; + fTempPerm740 = 0; + fTempPerm741 = 0; + fTempPerm742 = 0; + fTempPerm743 = 0; + fTempPerm744 = 0; + fTempPerm745 = 0; + fTempPerm746 = 0; + fTempPerm747 = 0; + fTempPerm748 = 0; + fTempPerm749 = 0; + fTempPerm750 = 0; + fTempPerm751 = 0; + fTempPerm752 = 0; + fTempPerm753 = 0; + fTempPerm754 = 0; + fTempPerm755 = 0; + fTempPerm756 = 0; + fTempPerm757 = 0; + fTempPerm758 = 0; + fTempPerm759 = 0; + fTempPerm760 = 0; + fTempPerm761 = 0; + fTempPerm762 = 0; + fTempPerm763 = 0; + fTempPerm764 = 0; + fTempPerm765 = 0; + fTempPerm766 = 0; + fTempPerm767 = 0; + fTempPerm768 = 0; + fTempPerm769 = 0; + fTempPerm770 = 0; + fTempPerm771 = 0; + fTempPerm772 = 0; + fTempPerm773 = 0; + fTempPerm774 = 0; + fTempPerm775 = 0; + fTempPerm776 = 0; + fTempPerm777 = 0; + fTempPerm778 = 0; + fTempPerm779 = 0; + fTempPerm780 = 0; + fTempPerm781 = 0; + fTempPerm782 = 0; + fTempPerm783 = 0; + fTempPerm784 = 0; + fTempPerm785 = 0; + fTempPerm786 = 0; + fTempPerm787 = 0; + fTempPerm788 = 0; + fTempPerm789 = 0; + fTempPerm790 = 0; + fTempPerm791 = 0; + fTempPerm792 = 0; + fTempPerm793 = 0; + fTempPerm794 = 0; + fTempPerm795 = 0; + fTempPerm796 = 0; + fTempPerm797 = 0; + fTempPerm798 = 0; + fTempPerm799 = 0; + fTempPerm800 = 0; + fTempPerm801 = 0; + fTempPerm802 = 0; + fTempPerm803 = 0; + fTempPerm804 = 0; + fTempPerm805 = 0; + fTempPerm806 = 0; + fTempPerm807 = 0; + fTempPerm808 = 0; + fTempPerm809 = 0; + fTempPerm810 = 0; + fTempPerm811 = 0; + fTempPerm812 = 0; + fTempPerm813 = 0; + fTempPerm814 = 0; + fTempPerm815 = 0; + fTempPerm816 = 0; + fTempPerm817 = 0; + fTempPerm818 = 0; + fTempPerm819 = 0; + fTempPerm820 = 0; + fTempPerm821 = 0; + fTempPerm822 = 0; + fTempPerm823 = 0; + fTempPerm824 = 0; + fTempPerm825 = 0; + fTempPerm826 = 0; + fTempPerm827 = 0; + fTempPerm828 = 0; + fTempPerm829 = 0; + fTempPerm830 = 0; + fTempPerm831 = 0; + fTempPerm832 = 0; + fTempPerm833 = 0; + fTempPerm834 = 0; + fTempPerm835 = 0; + fTempPerm836 = 0; + fTempPerm837 = 0; + fTempPerm838 = 0; + fTempPerm839 = 0; + fTempPerm840 = 0; + fTempPerm841 = 0; + fTempPerm842 = 0; + fTempPerm843 = 0; + fTempPerm844 = 0; + fTempPerm845 = 0; + fTempPerm846 = 0; + fTempPerm847 = 0; + fTempPerm848 = 0; + fTempPerm849 = 0; + fTempPerm850 = 0; + fTempPerm851 = 0; + fTempPerm852 = 0; + fTempPerm853 = 0; + fTempPerm854 = 0; + fTempPerm855 = 0; + fTempPerm856 = 0; + fTempPerm857 = 0; + fTempPerm858 = 0; + fTempPerm859 = 0; + fTempPerm860 = 0; + fTempPerm861 = 0; + fTempPerm862 = 0; + fTempPerm863 = 0; + fTempPerm864 = 0; + fTempPerm865 = 0; + fTempPerm866 = 0; + fTempPerm867 = 0; + fTempPerm868 = 0; + fTempPerm869 = 0; + fTempPerm870 = 0; + fTempPerm871 = 0; + fTempPerm872 = 0; + fTempPerm873 = 0; + fTempPerm874 = 0; + fTempPerm875 = 0; + fTempPerm876 = 0; + fTempPerm877 = 0; + fTempPerm878 = 0; + fTempPerm879 = 0; + fTempPerm880 = 0; + fTempPerm881 = 0; + fTempPerm882 = 0; + fTempPerm883 = 0; + fTempPerm884 = 0; + fTempPerm885 = 0; + fTempPerm886 = 0; + fTempPerm887 = 0; + fTempPerm888 = 0; + fTempPerm889 = 0; + fTempPerm890 = 0; + fTempPerm891 = 0; + fTempPerm892 = 0; + fTempPerm893 = 0; + fTempPerm894 = 0; + fTempPerm895 = 0; + fTempPerm896 = 0; + fTempPerm897 = 0; + fTempPerm898 = 0; + fTempPerm899 = 0; + fTempPerm900 = 0; + fTempPerm901 = 0; + fTempPerm902 = 0; + fTempPerm903 = 0; + fTempPerm904 = 0; + fTempPerm905 = 0; + fTempPerm906 = 0; + fTempPerm907 = 0; + fTempPerm908 = 0; + fTempPerm909 = 0; + fTempPerm910 = 0; + fTempPerm911 = 0; + fTempPerm912 = 0; + fTempPerm913 = 0; + fTempPerm914 = 0; + fTempPerm915 = 0; + fTempPerm916 = 0; + fTempPerm917 = 0; + fTempPerm918 = 0; + fTempPerm919 = 0; + fTempPerm920 = 0; + fTempPerm921 = 0; + fTempPerm922 = 0; + fTempPerm923 = 0; + fTempPerm924 = 0; + fTempPerm925 = 0; + fTempPerm926 = 0; + fTempPerm927 = 0; + fTempPerm928 = 0; + fTempPerm929 = 0; + fTempPerm930 = 0; + fTempPerm931 = 0; + fTempPerm932 = 0; + fTempPerm933 = 0; + fTempPerm934 = 0; + fTempPerm935 = 0; + fTempPerm936 = 0; + fTempPerm937 = 0; + fTempPerm938 = 0; + fTempPerm939 = 0; + fTempPerm940 = 0; + fTempPerm941 = 0; + fTempPerm942 = 0; + fTempPerm943 = 0; + fTempPerm944 = 0; + fTempPerm945 = 0; + fTempPerm946 = 0; + fTempPerm947 = 0; + fTempPerm948 = 0; + fTempPerm949 = 0; + fTempPerm950 = 0; + fTempPerm951 = 0; + fTempPerm952 = 0; + fTempPerm953 = 0; + fTempPerm954 = 0; + fTempPerm955 = 0; + fTempPerm956 = 0; + fTempPerm957 = 0; + fTempPerm958 = 0; + fTempPerm959 = 0; + fTempPerm960 = 0; + fTempPerm961 = 0; + fTempPerm962 = 0; + fTempPerm963 = 0; + fTempPerm964 = 0; + fTempPerm965 = 0; + fTempPerm966 = 0; + fTempPerm967 = 0; + fTempPerm968 = 0; + fTempPerm969 = 0; + fTempPerm970 = 0; + fTempPerm971 = 0; + fTempPerm972 = 0; + fTempPerm973 = 0; + fTempPerm974 = 0; + fTempPerm975 = 0; + fTempPerm976 = 0; + fTempPerm977 = 0; + fTempPerm978 = 0; + fTempPerm979 = 0; + fTempPerm980 = 0; + fTempPerm981 = 0; + fTempPerm982 = 0; + fTempPerm983 = 0; + fTempPerm984 = 0; + fTempPerm985 = 0; + fTempPerm986 = 0; + fTempPerm987 = 0; + fTempPerm988 = 0; + fTempPerm989 = 0; + fTempPerm990 = 0; + fTempPerm991 = 0; + fTempPerm992 = 0; + fTempPerm993 = 0; + fTempPerm994 = 0; + fTempPerm995 = 0; + fTempPerm996 = 0; + fTempPerm997 = 0; + fTempPerm998 = 0; + fTempPerm999 = 0; + fTempPerm1000 = 0; + fTempPerm1001 = 0; + fTempPerm1002 = 0; + fTempPerm1003 = 0; + fTempPerm1004 = 0; + fTempPerm1005 = 0; + fTempPerm1006 = 0; + fTempPerm1007 = 0; + fTempPerm1008 = 0; + fTempPerm1009 = 0; + fTempPerm1010 = 0; + fTempPerm1011 = 0; + fTempPerm1012 = 0; + fTempPerm1013 = 0; + fTempPerm1014 = 0; + fTempPerm1015 = 0; + fTempPerm1016 = 0; + fTempPerm1017 = 0; + fTempPerm1018 = 0; + fTempPerm1019 = 0; + fTempPerm1020 = 0; + fTempPerm1021 = 0; + fTempPerm1022 = 0; + fTempPerm1023 = 0; + fTempPerm1024 = 0; + fTempPerm1025 = 0; + fTempPerm1026 = 0; + fTempPerm1027 = 0; + fTempPerm1028 = 0; + fTempPerm1029 = 0; + fTempPerm1030 = 0; + fTempPerm1031 = 0; + fTempPerm1032 = 0; + fTempPerm1033 = 0; + fTempPerm1034 = 0; + fTempPerm1035 = 0; + fTempPerm1036 = 0; + fTempPerm1037 = 0; + fTempPerm1038 = 0; + fTempPerm1039 = 0; + fTempPerm1040 = 0; + fTempPerm1041 = 0; + fTempPerm1042 = 0; + fTempPerm1043 = 0; + fTempPerm1044 = 0; + fTempPerm1045 = 0; + fTempPerm1046 = 0; + fTempPerm1047 = 0; + fTempPerm1048 = 0; + fTempPerm1049 = 0; + fTempPerm1050 = 0; + fTempPerm1051 = 0; + fTempPerm1052 = 0; + fTempPerm1053 = 0; + fTempPerm1054 = 0; + fTempPerm1055 = 0; + fTempPerm1056 = 0; + fTempPerm1057 = 0; + fTempPerm1058 = 0; + fTempPerm1059 = 0; + fTempPerm1060 = 0; + fTempPerm1061 = 0; + fTempPerm1062 = 0; + fTempPerm1063 = 0; + fTempPerm1064 = 0; + fTempPerm1065 = 0; + fTempPerm1066 = 0; + fTempPerm1067 = 0; + fTempPerm1068 = 0; + fTempPerm1069 = 0; + fTempPerm1070 = 0; + fTempPerm1071 = 0; + fTempPerm1072 = 0; + fTempPerm1073 = 0; + fTempPerm1074 = 0; + fTempPerm1075 = 0; + fTempPerm1076 = 0; + fTempPerm1077 = 0; + fTempPerm1078 = 0; + fTempPerm1079 = 0; + fTempPerm1080 = 0; + fTempPerm1081 = 0; + fTempPerm1082 = 0; + fTempPerm1083 = 0; + fTempPerm1084 = 0; + fTempPerm1085 = 0; + fTempPerm1086 = 0; + fTempPerm1087 = 0; + fTempPerm1088 = 0; + fTempPerm1089 = 0; + fTempPerm1090 = 0; + fTempPerm1091 = 0; + fTempPerm1092 = 0; + fTempPerm1093 = 0; + fTempPerm1094 = 0; + fTempPerm1095 = 0; + fTempPerm1096 = 0; + fTempPerm1097 = 0; + fTempPerm1098 = 0; + fTempPerm1099 = 0; + fTempPerm1100 = 0; + fTempPerm1101 = 0; + fTempPerm1102 = 0; + fTempPerm1103 = 0; + fTempPerm1104 = 0; + fTempPerm1105 = 0; + fTempPerm1106 = 0; + fTempPerm1107 = 0; + fTempPerm1108 = 0; + fTempPerm1109 = 0; + fTempPerm1110 = 0; + fTempPerm1111 = 0; + fTempPerm1112 = 0; + fTempPerm1113 = 0; + fTempPerm1114 = 0; + fTempPerm1115 = 0; + fTempPerm1116 = 0; + fTempPerm1117 = 0; + fTempPerm1118 = 0; + fTempPerm1119 = 0; + fTempPerm1120 = 0; + fTempPerm1121 = 0; + fTempPerm1122 = 0; + fTempPerm1123 = 0; + fTempPerm1124 = 0; + fTempPerm1125 = 0; + fTempPerm1126 = 0; + fTempPerm1127 = 0; + fTempPerm1128 = 0; + fTempPerm1129 = 0; + fTempPerm1130 = 0; + fTempPerm1131 = 0; + fTempPerm1132 = 0; + fTempPerm1133 = 0; + fTempPerm1134 = 0; + fTempPerm1135 = 0; + fTempPerm1136 = 0; + fTempPerm1137 = 0; + fTempPerm1138 = 0; + fTempPerm1139 = 0; + fTempPerm1140 = 0; + fTempPerm1141 = 0; + fTempPerm1142 = 0; + fTempPerm1143 = 0; + fTempPerm1144 = 0; + fTempPerm1145 = 0; + fTempPerm1146 = 0; + fTempPerm1147 = 0; + fTempPerm1148 = 0; + fTempPerm1149 = 0; + fTempPerm1150 = 0; + fTempPerm1151 = 0; + fTempPerm1152 = 0; + fTempPerm1153 = 0; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + IOTA = 0; + for (int i=0; i<128; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<128; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<128; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<128; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<128; i++) fVec4[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<128; i++) fVec5[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<128; i++) fVec6[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<128; i++) fVec7[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<128; i++) fVec8[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecoderLebedev50Binaural2"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d5f11610", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d6145be0", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d6140b30", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d613bd70", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d6138770", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d5e1e0e0", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d5e1a1b0", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d5e14490", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fa3d5f63c50", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 10"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 1e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 10"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 1e+01, 0.1); + ui_interface->closeBox(); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("Left"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x7fa3d5e46dc0", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Right"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x7fa3d6190190", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + //LoopGraphScalar + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF diff --git a/source/HOAUGens/HOADecoderLebedev50Binaural3.cpp b/source/HOAUGens/HOADecoderLebedev50Binaural3.cpp new file mode 100644 index 0000000000..d01e1cb368 --- /dev/null +++ b/source/HOAUGens/HOADecoderLebedev50Binaural3.cpp @@ -0,0 +1,7437 @@ +//---------------------------------------------------------- +// name: "HOADecoderLebedev50Binaural3" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL)" +// copyright: "(c) Pierre Lecomte 2015" +// +// Code generated with Faust 0.12.0 (http://faust.grame.fr) +//---------------------------------------------------------- + +/* link with */ +#include +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// If other than 'faust2sc --prefix Faust' is used, sed this as well: +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "Faust" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Herz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + { } + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class mydsp : public dsp { + private: + double fConst0; + FAUSTFLOAT fslider0; + double fRec1[2]; + FAUSTFLOAT fslider1; + double fRec3[2]; + double fTempPerm0; + double fRec2[2]; + FAUSTFLOAT fbargraph0; + double fTempPerm1; + int IOTA; + double fVec0[128]; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; + double fTempPerm8; + double fTempPerm9; + double fTempPerm10; + double fTempPerm11; + double fTempPerm12; + double fTempPerm13; + double fTempPerm14; + double fRec4[2]; + FAUSTFLOAT fbargraph1; + double fTempPerm15; + double fVec1[128]; + double fTempPerm16; + double fTempPerm17; + double fTempPerm18; + double fTempPerm19; + double fTempPerm20; + double fTempPerm21; + double fTempPerm22; + double fTempPerm23; + double fTempPerm24; + double fTempPerm25; + double fTempPerm26; + double fTempPerm27; + double fTempPerm28; + double fTempPerm29; + double fTempPerm30; + double fTempPerm31; + double fTempPerm32; + double fTempPerm33; + double fTempPerm34; + double fRec5[2]; + FAUSTFLOAT fbargraph2; + double fTempPerm35; + double fVec2[128]; + double fTempPerm36; + double fTempPerm37; + double fTempPerm38; + double fTempPerm39; + double fTempPerm40; + double fTempPerm41; + double fTempPerm42; + double fTempPerm43; + double fTempPerm44; + double fTempPerm45; + double fTempPerm46; + double fTempPerm47; + double fTempPerm48; + double fTempPerm49; + double fTempPerm50; + double fRec6[2]; + FAUSTFLOAT fbargraph3; + double fTempPerm51; + double fVec3[128]; + double fTempPerm52; + double fTempPerm53; + double fTempPerm54; + double fTempPerm55; + double fTempPerm56; + double fTempPerm57; + double fTempPerm58; + double fTempPerm59; + double fTempPerm60; + double fTempPerm61; + double fTempPerm62; + double fTempPerm63; + double fTempPerm64; + double fTempPerm65; + double fTempPerm66; + double fTempPerm67; + double fTempPerm68; + double fTempPerm69; + double fTempPerm70; + double fTempPerm71; + double fTempPerm72; + double fTempPerm73; + double fTempPerm74; + double fTempPerm75; + double fTempPerm76; + double fTempPerm77; + double fTempPerm78; + double fTempPerm79; + double fTempPerm80; + double fTempPerm81; + double fTempPerm82; + double fTempPerm83; + double fTempPerm84; + double fTempPerm85; + double fTempPerm86; + double fTempPerm87; + double fTempPerm88; + double fTempPerm89; + double fTempPerm90; + double fTempPerm91; + double fTempPerm92; + double fTempPerm93; + double fTempPerm94; + double fTempPerm95; + double fTempPerm96; + double fTempPerm97; + double fTempPerm98; + double fTempPerm99; + double fTempPerm100; + double fTempPerm101; + double fTempPerm102; + double fTempPerm103; + double fTempPerm104; + double fTempPerm105; + double fTempPerm106; + double fTempPerm107; + double fTempPerm108; + double fTempPerm109; + double fTempPerm110; + double fTempPerm111; + double fTempPerm112; + double fTempPerm113; + double fTempPerm114; + double fTempPerm115; + double fTempPerm116; + double fTempPerm117; + double fTempPerm118; + double fTempPerm119; + double fTempPerm120; + double fTempPerm121; + double fTempPerm122; + double fTempPerm123; + double fTempPerm124; + double fTempPerm125; + double fTempPerm126; + double fTempPerm127; + double fTempPerm128; + double fTempPerm129; + double fTempPerm130; + double fTempPerm131; + double fTempPerm132; + double fTempPerm133; + double fTempPerm134; + double fTempPerm135; + double fTempPerm136; + double fTempPerm137; + double fTempPerm138; + double fTempPerm139; + double fTempPerm140; + double fTempPerm141; + double fTempPerm142; + double fTempPerm143; + double fTempPerm144; + double fTempPerm145; + double fTempPerm146; + double fTempPerm147; + double fTempPerm148; + double fTempPerm149; + double fTempPerm150; + double fTempPerm151; + double fTempPerm152; + double fTempPerm153; + double fTempPerm154; + double fTempPerm155; + double fTempPerm156; + double fTempPerm157; + double fTempPerm158; + double fTempPerm159; + double fTempPerm160; + double fTempPerm161; + double fTempPerm162; + double fTempPerm163; + double fTempPerm164; + double fTempPerm165; + double fTempPerm166; + double fTempPerm167; + double fTempPerm168; + double fTempPerm169; + double fTempPerm170; + double fTempPerm171; + double fTempPerm172; + double fTempPerm173; + double fTempPerm174; + double fTempPerm175; + double fTempPerm176; + double fTempPerm177; + double fTempPerm178; + double fTempPerm179; + double fTempPerm180; + double fTempPerm181; + double fTempPerm182; + double fTempPerm183; + double fTempPerm184; + double fTempPerm185; + double fTempPerm186; + double fTempPerm187; + double fTempPerm188; + double fTempPerm189; + double fTempPerm190; + double fTempPerm191; + double fTempPerm192; + double fTempPerm193; + double fTempPerm194; + double fTempPerm195; + double fTempPerm196; + double fTempPerm197; + double fTempPerm198; + double fTempPerm199; + double fTempPerm200; + double fTempPerm201; + double fTempPerm202; + double fTempPerm203; + double fTempPerm204; + double fTempPerm205; + double fTempPerm206; + double fTempPerm207; + double fTempPerm208; + double fTempPerm209; + double fTempPerm210; + double fTempPerm211; + double fTempPerm212; + double fRec7[2]; + FAUSTFLOAT fbargraph4; + double fTempPerm213; + double fVec4[128]; + double fTempPerm214; + double fTempPerm215; + double fTempPerm216; + double fTempPerm217; + double fTempPerm218; + double fTempPerm219; + double fTempPerm220; + double fTempPerm221; + double fTempPerm222; + double fTempPerm223; + double fTempPerm224; + double fTempPerm225; + double fTempPerm226; + double fRec8[2]; + FAUSTFLOAT fbargraph5; + double fTempPerm227; + double fVec5[128]; + double fTempPerm228; + double fTempPerm229; + double fTempPerm230; + double fTempPerm231; + double fTempPerm232; + double fTempPerm233; + double fTempPerm234; + double fTempPerm235; + double fTempPerm236; + double fTempPerm237; + double fTempPerm238; + double fTempPerm239; + double fTempPerm240; + double fTempPerm241; + double fTempPerm242; + double fTempPerm243; + double fTempPerm244; + double fTempPerm245; + double fTempPerm246; + double fTempPerm247; + double fTempPerm248; + double fTempPerm249; + double fTempPerm250; + double fTempPerm251; + double fTempPerm252; + double fTempPerm253; + double fTempPerm254; + double fTempPerm255; + double fTempPerm256; + double fTempPerm257; + double fTempPerm258; + double fTempPerm259; + double fTempPerm260; + double fTempPerm261; + double fTempPerm262; + double fTempPerm263; + double fTempPerm264; + double fTempPerm265; + double fTempPerm266; + double fTempPerm267; + double fTempPerm268; + double fTempPerm269; + double fTempPerm270; + double fTempPerm271; + double fTempPerm272; + double fTempPerm273; + double fTempPerm274; + double fTempPerm275; + double fTempPerm276; + double fTempPerm277; + double fTempPerm278; + double fTempPerm279; + double fTempPerm280; + double fTempPerm281; + double fTempPerm282; + double fTempPerm283; + double fTempPerm284; + double fTempPerm285; + double fTempPerm286; + double fTempPerm287; + double fTempPerm288; + double fTempPerm289; + double fTempPerm290; + double fTempPerm291; + double fTempPerm292; + double fTempPerm293; + double fTempPerm294; + double fTempPerm295; + double fTempPerm296; + double fTempPerm297; + double fTempPerm298; + double fTempPerm299; + double fTempPerm300; + double fRec9[2]; + FAUSTFLOAT fbargraph6; + double fTempPerm301; + double fVec6[128]; + double fTempPerm302; + double fTempPerm303; + double fTempPerm304; + double fTempPerm305; + double fTempPerm306; + double fTempPerm307; + double fTempPerm308; + double fTempPerm309; + double fTempPerm310; + double fTempPerm311; + double fTempPerm312; + double fTempPerm313; + double fRec10[2]; + FAUSTFLOAT fbargraph7; + double fTempPerm314; + double fVec7[128]; + double fTempPerm315; + double fTempPerm316; + double fTempPerm317; + double fTempPerm318; + double fTempPerm319; + double fTempPerm320; + double fTempPerm321; + double fTempPerm322; + double fTempPerm323; + double fTempPerm324; + double fTempPerm325; + double fTempPerm326; + double fTempPerm327; + double fTempPerm328; + double fRec11[2]; + FAUSTFLOAT fbargraph8; + double fTempPerm329; + double fVec8[128]; + double fTempPerm330; + double fTempPerm331; + double fTempPerm332; + double fTempPerm333; + double fTempPerm334; + double fTempPerm335; + double fTempPerm336; + double fTempPerm337; + double fTempPerm338; + double fTempPerm339; + double fTempPerm340; + double fTempPerm341; + double fTempPerm342; + double fTempPerm343; + double fTempPerm344; + double fTempPerm345; + double fTempPerm346; + double fTempPerm347; + double fTempPerm348; + double fTempPerm349; + double fTempPerm350; + double fRec12[2]; + FAUSTFLOAT fbargraph9; + double fTempPerm351; + double fVec9[128]; + double fTempPerm352; + double fTempPerm353; + double fTempPerm354; + double fTempPerm355; + double fTempPerm356; + double fTempPerm357; + double fTempPerm358; + double fTempPerm359; + double fTempPerm360; + double fTempPerm361; + double fTempPerm362; + double fTempPerm363; + double fTempPerm364; + double fTempPerm365; + double fTempPerm366; + double fTempPerm367; + double fTempPerm368; + double fTempPerm369; + double fTempPerm370; + double fTempPerm371; + double fTempPerm372; + double fTempPerm373; + double fTempPerm374; + double fRec13[2]; + FAUSTFLOAT fbargraph10; + double fTempPerm375; + double fVec10[128]; + double fTempPerm376; + double fTempPerm377; + double fTempPerm378; + double fTempPerm379; + double fTempPerm380; + double fTempPerm381; + double fTempPerm382; + double fTempPerm383; + double fTempPerm384; + double fTempPerm385; + double fTempPerm386; + double fTempPerm387; + double fTempPerm388; + double fTempPerm389; + double fTempPerm390; + double fTempPerm391; + double fTempPerm392; + double fTempPerm393; + double fTempPerm394; + double fTempPerm395; + double fTempPerm396; + double fTempPerm397; + double fTempPerm398; + double fTempPerm399; + double fTempPerm400; + double fTempPerm401; + double fTempPerm402; + double fTempPerm403; + double fTempPerm404; + double fTempPerm405; + double fTempPerm406; + double fTempPerm407; + double fTempPerm408; + double fTempPerm409; + double fTempPerm410; + double fTempPerm411; + double fTempPerm412; + double fTempPerm413; + double fTempPerm414; + double fTempPerm415; + double fTempPerm416; + double fTempPerm417; + double fTempPerm418; + double fTempPerm419; + double fTempPerm420; + double fTempPerm421; + double fTempPerm422; + double fTempPerm423; + double fTempPerm424; + double fTempPerm425; + double fTempPerm426; + double fTempPerm427; + double fTempPerm428; + double fTempPerm429; + double fTempPerm430; + double fTempPerm431; + double fTempPerm432; + double fTempPerm433; + double fTempPerm434; + double fTempPerm435; + double fTempPerm436; + double fTempPerm437; + double fTempPerm438; + double fTempPerm439; + double fTempPerm440; + double fTempPerm441; + double fTempPerm442; + double fTempPerm443; + double fTempPerm444; + double fTempPerm445; + double fTempPerm446; + double fTempPerm447; + double fTempPerm448; + double fTempPerm449; + double fTempPerm450; + double fTempPerm451; + double fTempPerm452; + double fTempPerm453; + double fTempPerm454; + double fTempPerm455; + double fTempPerm456; + double fTempPerm457; + double fTempPerm458; + double fTempPerm459; + double fTempPerm460; + double fTempPerm461; + double fTempPerm462; + double fTempPerm463; + double fTempPerm464; + double fTempPerm465; + double fTempPerm466; + double fTempPerm467; + double fTempPerm468; + double fTempPerm469; + double fTempPerm470; + double fTempPerm471; + double fTempPerm472; + double fTempPerm473; + double fTempPerm474; + double fTempPerm475; + double fTempPerm476; + double fTempPerm477; + double fTempPerm478; + double fTempPerm479; + double fTempPerm480; + double fTempPerm481; + double fTempPerm482; + double fTempPerm483; + double fTempPerm484; + double fTempPerm485; + double fTempPerm486; + double fTempPerm487; + double fTempPerm488; + double fTempPerm489; + double fTempPerm490; + double fRec14[2]; + FAUSTFLOAT fbargraph11; + double fTempPerm491; + double fVec11[128]; + double fTempPerm492; + double fTempPerm493; + double fTempPerm494; + double fTempPerm495; + double fTempPerm496; + double fTempPerm497; + double fTempPerm498; + double fTempPerm499; + double fTempPerm500; + double fTempPerm501; + double fTempPerm502; + double fTempPerm503; + double fTempPerm504; + double fTempPerm505; + double fRec15[2]; + FAUSTFLOAT fbargraph12; + double fTempPerm506; + double fVec12[128]; + double fTempPerm507; + double fTempPerm508; + double fTempPerm509; + double fTempPerm510; + double fTempPerm511; + double fTempPerm512; + double fTempPerm513; + double fTempPerm514; + double fTempPerm515; + double fTempPerm516; + double fTempPerm517; + double fTempPerm518; + double fTempPerm519; + double fTempPerm520; + double fTempPerm521; + double fTempPerm522; + double fRec16[2]; + FAUSTFLOAT fbargraph13; + double fTempPerm523; + double fVec13[128]; + double fTempPerm524; + double fTempPerm525; + double fTempPerm526; + double fTempPerm527; + double fTempPerm528; + double fTempPerm529; + double fTempPerm530; + double fTempPerm531; + double fTempPerm532; + double fTempPerm533; + double fTempPerm534; + double fTempPerm535; + double fTempPerm536; + double fTempPerm537; + double fTempPerm538; + double fTempPerm539; + double fTempPerm540; + double fTempPerm541; + double fTempPerm542; + double fTempPerm543; + double fTempPerm544; + double fTempPerm545; + double fTempPerm546; + double fTempPerm547; + double fTempPerm548; + double fTempPerm549; + double fTempPerm550; + double fTempPerm551; + double fTempPerm552; + double fTempPerm553; + double fTempPerm554; + double fTempPerm555; + double fTempPerm556; + double fTempPerm557; + double fTempPerm558; + double fTempPerm559; + double fTempPerm560; + double fTempPerm561; + double fTempPerm562; + double fTempPerm563; + double fTempPerm564; + double fTempPerm565; + double fTempPerm566; + double fTempPerm567; + double fTempPerm568; + double fTempPerm569; + double fTempPerm570; + double fTempPerm571; + double fTempPerm572; + double fTempPerm573; + double fTempPerm574; + double fTempPerm575; + double fTempPerm576; + double fTempPerm577; + double fTempPerm578; + double fTempPerm579; + double fTempPerm580; + double fTempPerm581; + double fTempPerm582; + double fTempPerm583; + double fTempPerm584; + double fTempPerm585; + double fTempPerm586; + double fTempPerm587; + double fTempPerm588; + double fTempPerm589; + double fTempPerm590; + double fTempPerm591; + double fTempPerm592; + double fTempPerm593; + double fTempPerm594; + double fTempPerm595; + double fTempPerm596; + double fTempPerm597; + double fTempPerm598; + double fTempPerm599; + double fTempPerm600; + double fTempPerm601; + double fTempPerm602; + double fTempPerm603; + double fTempPerm604; + double fTempPerm605; + double fTempPerm606; + double fTempPerm607; + double fTempPerm608; + double fTempPerm609; + double fTempPerm610; + double fTempPerm611; + double fTempPerm612; + double fTempPerm613; + double fTempPerm614; + double fTempPerm615; + double fTempPerm616; + double fTempPerm617; + double fTempPerm618; + double fTempPerm619; + double fTempPerm620; + double fTempPerm621; + double fTempPerm622; + double fTempPerm623; + double fTempPerm624; + double fTempPerm625; + double fTempPerm626; + double fTempPerm627; + double fTempPerm628; + double fTempPerm629; + double fTempPerm630; + double fTempPerm631; + double fTempPerm632; + double fTempPerm633; + double fTempPerm634; + double fTempPerm635; + double fTempPerm636; + double fTempPerm637; + double fTempPerm638; + double fTempPerm639; + double fTempPerm640; + double fTempPerm641; + double fTempPerm642; + double fTempPerm643; + double fTempPerm644; + double fTempPerm645; + double fTempPerm646; + double fTempPerm647; + double fTempPerm648; + double fTempPerm649; + double fTempPerm650; + double fTempPerm651; + double fTempPerm652; + double fTempPerm653; + double fTempPerm654; + double fTempPerm655; + double fTempPerm656; + double fTempPerm657; + double fTempPerm658; + double fTempPerm659; + double fTempPerm660; + double fTempPerm661; + double fTempPerm662; + double fTempPerm663; + double fTempPerm664; + double fRec17[2]; + FAUSTFLOAT fbargraph14; + double fTempPerm665; + double fVec14[128]; + double fTempPerm666; + double fTempPerm667; + double fTempPerm668; + double fTempPerm669; + double fTempPerm670; + double fTempPerm671; + double fTempPerm672; + double fTempPerm673; + double fTempPerm674; + double fTempPerm675; + double fTempPerm676; + double fTempPerm677; + double fTempPerm678; + double fTempPerm679; + double fTempPerm680; + double fTempPerm681; + double fTempPerm682; + double fTempPerm683; + double fTempPerm684; + double fTempPerm685; + double fTempPerm686; + double fTempPerm687; + double fTempPerm688; + double fTempPerm689; + double fTempPerm690; + double fTempPerm691; + double fTempPerm692; + double fTempPerm693; + double fTempPerm694; + double fTempPerm695; + double fTempPerm696; + double fTempPerm697; + double fTempPerm698; + double fTempPerm699; + double fTempPerm700; + double fTempPerm701; + double fTempPerm702; + double fTempPerm703; + double fTempPerm704; + double fTempPerm705; + double fTempPerm706; + double fTempPerm707; + double fTempPerm708; + double fTempPerm709; + double fTempPerm710; + double fTempPerm711; + double fTempPerm712; + double fTempPerm713; + double fTempPerm714; + double fTempPerm715; + double fTempPerm716; + double fTempPerm717; + double fTempPerm718; + double fTempPerm719; + double fTempPerm720; + double fTempPerm721; + double fTempPerm722; + double fTempPerm723; + double fTempPerm724; + double fTempPerm725; + double fTempPerm726; + double fTempPerm727; + double fTempPerm728; + double fTempPerm729; + double fTempPerm730; + double fTempPerm731; + double fTempPerm732; + double fTempPerm733; + double fTempPerm734; + double fTempPerm735; + double fTempPerm736; + double fTempPerm737; + double fTempPerm738; + double fTempPerm739; + double fTempPerm740; + double fTempPerm741; + double fTempPerm742; + double fTempPerm743; + double fTempPerm744; + double fTempPerm745; + double fTempPerm746; + double fTempPerm747; + double fTempPerm748; + double fTempPerm749; + double fTempPerm750; + double fTempPerm751; + double fTempPerm752; + double fTempPerm753; + double fTempPerm754; + double fTempPerm755; + double fTempPerm756; + double fTempPerm757; + double fTempPerm758; + double fTempPerm759; + double fTempPerm760; + double fTempPerm761; + double fTempPerm762; + double fTempPerm763; + double fTempPerm764; + double fTempPerm765; + double fTempPerm766; + double fTempPerm767; + double fTempPerm768; + double fTempPerm769; + double fTempPerm770; + double fTempPerm771; + double fTempPerm772; + double fTempPerm773; + double fTempPerm774; + double fTempPerm775; + double fTempPerm776; + double fTempPerm777; + double fTempPerm778; + double fTempPerm779; + double fTempPerm780; + double fTempPerm781; + double fTempPerm782; + double fTempPerm783; + double fTempPerm784; + double fTempPerm785; + double fTempPerm786; + double fTempPerm787; + double fTempPerm788; + double fTempPerm789; + double fTempPerm790; + double fTempPerm791; + double fTempPerm792; + double fTempPerm793; + double fTempPerm794; + double fTempPerm795; + double fTempPerm796; + double fTempPerm797; + double fTempPerm798; + double fTempPerm799; + double fTempPerm800; + double fTempPerm801; + double fTempPerm802; + double fTempPerm803; + double fTempPerm804; + double fTempPerm805; + double fTempPerm806; + double fTempPerm807; + double fTempPerm808; + double fTempPerm809; + double fTempPerm810; + double fTempPerm811; + double fTempPerm812; + double fTempPerm813; + double fTempPerm814; + double fTempPerm815; + double fTempPerm816; + double fRec18[2]; + FAUSTFLOAT fbargraph15; + double fTempPerm817; + double fVec15[128]; + double fTempPerm818; + double fTempPerm819; + double fTempPerm820; + double fTempPerm821; + double fTempPerm822; + double fTempPerm823; + double fTempPerm824; + double fTempPerm825; + double fTempPerm826; + double fTempPerm827; + double fTempPerm828; + double fTempPerm829; + double fTempPerm830; + double fTempPerm831; + double fTempPerm832; + double fTempPerm833; + double fTempPerm834; + double fTempPerm835; + double fTempPerm836; + double fTempPerm837; + double fTempPerm838; + double fTempPerm839; + double fTempPerm840; + double fTempPerm841; + double fTempPerm842; + double fTempPerm843; + double fTempPerm844; + double fTempPerm845; + double fTempPerm846; + double fTempPerm847; + double fTempPerm848; + double fTempPerm849; + double fTempPerm850; + double fTempPerm851; + double fTempPerm852; + double fTempPerm853; + double fTempPerm854; + double fTempPerm855; + double fTempPerm856; + double fTempPerm857; + double fTempPerm858; + double fTempPerm859; + double fTempPerm860; + double fTempPerm861; + double fTempPerm862; + double fTempPerm863; + double fTempPerm864; + double fTempPerm865; + double fTempPerm866; + double fTempPerm867; + double fTempPerm868; + double fTempPerm869; + double fTempPerm870; + double fTempPerm871; + double fTempPerm872; + double fTempPerm873; + double fTempPerm874; + double fTempPerm875; + double fTempPerm876; + double fTempPerm877; + double fTempPerm878; + double fTempPerm879; + double fTempPerm880; + double fTempPerm881; + double fTempPerm882; + double fTempPerm883; + double fTempPerm884; + double fTempPerm885; + double fTempPerm886; + double fTempPerm887; + double fTempPerm888; + double fTempPerm889; + double fTempPerm890; + double fTempPerm891; + double fTempPerm892; + double fTempPerm893; + double fTempPerm894; + double fTempPerm895; + double fTempPerm896; + double fTempPerm897; + double fTempPerm898; + double fTempPerm899; + double fTempPerm900; + double fTempPerm901; + double fTempPerm902; + double fTempPerm903; + double fTempPerm904; + double fTempPerm905; + double fTempPerm906; + double fTempPerm907; + double fTempPerm908; + double fTempPerm909; + double fTempPerm910; + double fTempPerm911; + double fTempPerm912; + double fTempPerm913; + double fTempPerm914; + double fTempPerm915; + double fTempPerm916; + double fTempPerm917; + double fTempPerm918; + double fTempPerm919; + double fTempPerm920; + double fTempPerm921; + double fTempPerm922; + double fTempPerm923; + double fTempPerm924; + double fTempPerm925; + double fTempPerm926; + double fTempPerm927; + double fTempPerm928; + double fTempPerm929; + double fTempPerm930; + double fTempPerm931; + double fTempPerm932; + double fTempPerm933; + double fTempPerm934; + double fTempPerm935; + double fTempPerm936; + double fTempPerm937; + double fTempPerm938; + double fTempPerm939; + double fTempPerm940; + double fTempPerm941; + double fTempPerm942; + double fTempPerm943; + double fTempPerm944; + double fTempPerm945; + double fTempPerm946; + double fTempPerm947; + double fTempPerm948; + double fTempPerm949; + double fTempPerm950; + double fTempPerm951; + double fTempPerm952; + double fTempPerm953; + double fTempPerm954; + double fTempPerm955; + double fTempPerm956; + double fTempPerm957; + double fTempPerm958; + double fTempPerm959; + double fTempPerm960; + double fTempPerm961; + double fTempPerm962; + double fTempPerm963; + double fTempPerm964; + double fTempPerm965; + double fTempPerm966; + double fTempPerm967; + double fTempPerm968; + double fTempPerm969; + double fTempPerm970; + double fTempPerm971; + double fTempPerm972; + double fTempPerm973; + double fTempPerm974; + double fTempPerm975; + double fTempPerm976; + double fTempPerm977; + double fTempPerm978; + double fTempPerm979; + double fTempPerm980; + double fTempPerm981; + double fTempPerm982; + double fTempPerm983; + double fTempPerm984; + double fTempPerm985; + double fTempPerm986; + double fTempPerm987; + double fTempPerm988; + double fTempPerm989; + double fTempPerm990; + double fTempPerm991; + double fTempPerm992; + double fTempPerm993; + double fTempPerm994; + double fTempPerm995; + double fTempPerm996; + double fTempPerm997; + double fTempPerm998; + double fTempPerm999; + double fTempPerm1000; + double fTempPerm1001; + double fTempPerm1002; + double fTempPerm1003; + double fTempPerm1004; + double fTempPerm1005; + double fTempPerm1006; + double fTempPerm1007; + double fTempPerm1008; + double fTempPerm1009; + double fTempPerm1010; + double fTempPerm1011; + double fTempPerm1012; + double fTempPerm1013; + double fTempPerm1014; + double fTempPerm1015; + double fTempPerm1016; + double fTempPerm1017; + double fTempPerm1018; + double fTempPerm1019; + double fTempPerm1020; + double fTempPerm1021; + double fTempPerm1022; + double fTempPerm1023; + double fTempPerm1024; + double fTempPerm1025; + double fTempPerm1026; + double fTempPerm1027; + double fTempPerm1028; + double fTempPerm1029; + double fTempPerm1030; + double fTempPerm1031; + double fTempPerm1032; + double fTempPerm1033; + double fTempPerm1034; + double fTempPerm1035; + double fTempPerm1036; + double fTempPerm1037; + double fTempPerm1038; + double fTempPerm1039; + double fTempPerm1040; + double fTempPerm1041; + double fTempPerm1042; + double fTempPerm1043; + double fTempPerm1044; + double fTempPerm1045; + double fTempPerm1046; + double fTempPerm1047; + double fTempPerm1048; + double fTempPerm1049; + double fTempPerm1050; + double fTempPerm1051; + double fTempPerm1052; + double fTempPerm1053; + double fTempPerm1054; + double fTempPerm1055; + double fTempPerm1056; + double fTempPerm1057; + double fTempPerm1058; + double fTempPerm1059; + double fTempPerm1060; + double fTempPerm1061; + double fTempPerm1062; + double fTempPerm1063; + double fTempPerm1064; + double fTempPerm1065; + double fTempPerm1066; + double fTempPerm1067; + double fTempPerm1068; + double fTempPerm1069; + double fTempPerm1070; + double fTempPerm1071; + double fTempPerm1072; + double fTempPerm1073; + double fTempPerm1074; + double fTempPerm1075; + double fTempPerm1076; + double fTempPerm1077; + double fTempPerm1078; + double fTempPerm1079; + double fTempPerm1080; + double fTempPerm1081; + double fTempPerm1082; + double fTempPerm1083; + double fTempPerm1084; + double fTempPerm1085; + double fTempPerm1086; + double fTempPerm1087; + double fTempPerm1088; + double fTempPerm1089; + double fTempPerm1090; + double fTempPerm1091; + double fTempPerm1092; + double fTempPerm1093; + double fTempPerm1094; + double fTempPerm1095; + double fTempPerm1096; + double fTempPerm1097; + double fTempPerm1098; + double fTempPerm1099; + double fTempPerm1100; + double fTempPerm1101; + double fTempPerm1102; + double fTempPerm1103; + double fTempPerm1104; + double fTempPerm1105; + double fTempPerm1106; + double fTempPerm1107; + double fTempPerm1108; + double fTempPerm1109; + double fTempPerm1110; + double fTempPerm1111; + double fTempPerm1112; + double fTempPerm1113; + double fTempPerm1114; + double fTempPerm1115; + double fTempPerm1116; + double fTempPerm1117; + double fTempPerm1118; + double fTempPerm1119; + double fTempPerm1120; + double fTempPerm1121; + double fTempPerm1122; + double fTempPerm1123; + double fTempPerm1124; + double fTempPerm1125; + double fTempPerm1126; + double fTempPerm1127; + double fTempPerm1128; + double fTempPerm1129; + double fTempPerm1130; + double fTempPerm1131; + double fTempPerm1132; + double fTempPerm1133; + double fTempPerm1134; + double fTempPerm1135; + double fTempPerm1136; + double fTempPerm1137; + double fTempPerm1138; + double fTempPerm1139; + double fTempPerm1140; + double fTempPerm1141; + double fTempPerm1142; + double fTempPerm1143; + double fTempPerm1144; + double fTempPerm1145; + double fTempPerm1146; + double fTempPerm1147; + double fTempPerm1148; + double fTempPerm1149; + double fTempPerm1150; + double fTempPerm1151; + double fTempPerm1152; + double fTempPerm1153; + double fTempPerm1154; + double fTempPerm1155; + double fTempPerm1156; + double fTempPerm1157; + double fTempPerm1158; + double fTempPerm1159; + double fTempPerm1160; + double fTempPerm1161; + double fTempPerm1162; + double fTempPerm1163; + double fTempPerm1164; + double fTempPerm1165; + double fTempPerm1166; + double fTempPerm1167; + double fTempPerm1168; + double fTempPerm1169; + double fTempPerm1170; + double fTempPerm1171; + double fTempPerm1172; + double fTempPerm1173; + double fTempPerm1174; + double fTempPerm1175; + double fTempPerm1176; + double fTempPerm1177; + double fTempPerm1178; + double fTempPerm1179; + double fTempPerm1180; + double fTempPerm1181; + double fTempPerm1182; + double fTempPerm1183; + double fTempPerm1184; + double fTempPerm1185; + double fTempPerm1186; + double fTempPerm1187; + double fTempPerm1188; + double fTempPerm1189; + double fTempPerm1190; + double fTempPerm1191; + double fTempPerm1192; + double fTempPerm1193; + double fTempPerm1194; + double fTempPerm1195; + double fTempPerm1196; + double fTempPerm1197; + double fTempPerm1198; + double fTempPerm1199; + double fTempPerm1200; + double fTempPerm1201; + double fTempPerm1202; + double fTempPerm1203; + double fTempPerm1204; + double fTempPerm1205; + double fTempPerm1206; + double fTempPerm1207; + double fTempPerm1208; + double fTempPerm1209; + double fTempPerm1210; + double fTempPerm1211; + double fTempPerm1212; + double fTempPerm1213; + double fTempPerm1214; + double fTempPerm1215; + double fTempPerm1216; + double fTempPerm1217; + double fTempPerm1218; + double fTempPerm1219; + double fTempPerm1220; + double fTempPerm1221; + double fTempPerm1222; + double fTempPerm1223; + double fTempPerm1224; + double fTempPerm1225; + double fTempPerm1226; + double fTempPerm1227; + double fTempPerm1228; + double fTempPerm1229; + double fTempPerm1230; + double fTempPerm1231; + double fTempPerm1232; + double fTempPerm1233; + double fTempPerm1234; + double fTempPerm1235; + double fTempPerm1236; + double fTempPerm1237; + double fTempPerm1238; + double fTempPerm1239; + double fTempPerm1240; + double fTempPerm1241; + double fTempPerm1242; + double fTempPerm1243; + double fTempPerm1244; + double fTempPerm1245; + double fTempPerm1246; + double fTempPerm1247; + double fTempPerm1248; + double fTempPerm1249; + double fTempPerm1250; + double fTempPerm1251; + double fTempPerm1252; + double fTempPerm1253; + double fTempPerm1254; + double fTempPerm1255; + double fTempPerm1256; + double fTempPerm1257; + double fTempPerm1258; + double fTempPerm1259; + double fTempPerm1260; + double fTempPerm1261; + double fTempPerm1262; + double fTempPerm1263; + double fTempPerm1264; + double fTempPerm1265; + double fTempPerm1266; + double fTempPerm1267; + double fTempPerm1268; + double fTempPerm1269; + double fTempPerm1270; + double fTempPerm1271; + double fTempPerm1272; + double fTempPerm1273; + double fTempPerm1274; + double fTempPerm1275; + double fTempPerm1276; + double fTempPerm1277; + double fTempPerm1278; + double fTempPerm1279; + double fTempPerm1280; + double fTempPerm1281; + double fTempPerm1282; + double fTempPerm1283; + double fTempPerm1284; + double fTempPerm1285; + double fTempPerm1286; + double fTempPerm1287; + double fTempPerm1288; + double fTempPerm1289; + double fTempPerm1290; + double fTempPerm1291; + double fTempPerm1292; + double fTempPerm1293; + double fTempPerm1294; + double fTempPerm1295; + double fTempPerm1296; + double fTempPerm1297; + double fTempPerm1298; + double fTempPerm1299; + double fTempPerm1300; + double fTempPerm1301; + double fTempPerm1302; + double fTempPerm1303; + double fTempPerm1304; + double fTempPerm1305; + double fTempPerm1306; + double fTempPerm1307; + double fTempPerm1308; + double fTempPerm1309; + double fTempPerm1310; + double fTempPerm1311; + double fTempPerm1312; + double fTempPerm1313; + double fTempPerm1314; + double fTempPerm1315; + double fTempPerm1316; + double fTempPerm1317; + double fTempPerm1318; + double fTempPerm1319; + double fTempPerm1320; + double fTempPerm1321; + double fTempPerm1322; + double fTempPerm1323; + double fTempPerm1324; + double fTempPerm1325; + double fTempPerm1326; + double fTempPerm1327; + double fTempPerm1328; + double fTempPerm1329; + double fTempPerm1330; + double fTempPerm1331; + double fTempPerm1332; + double fTempPerm1333; + double fTempPerm1334; + double fTempPerm1335; + double fTempPerm1336; + double fTempPerm1337; + double fTempPerm1338; + double fTempPerm1339; + double fTempPerm1340; + double fTempPerm1341; + double fTempPerm1342; + double fTempPerm1343; + double fTempPerm1344; + double fTempPerm1345; + double fTempPerm1346; + double fTempPerm1347; + double fTempPerm1348; + double fTempPerm1349; + double fTempPerm1350; + double fTempPerm1351; + double fTempPerm1352; + double fTempPerm1353; + double fTempPerm1354; + double fTempPerm1355; + double fTempPerm1356; + double fTempPerm1357; + double fTempPerm1358; + double fTempPerm1359; + double fTempPerm1360; + double fTempPerm1361; + double fTempPerm1362; + double fTempPerm1363; + double fTempPerm1364; + double fTempPerm1365; + double fTempPerm1366; + double fTempPerm1367; + double fTempPerm1368; + double fTempPerm1369; + double fTempPerm1370; + double fTempPerm1371; + double fTempPerm1372; + double fTempPerm1373; + double fTempPerm1374; + double fTempPerm1375; + double fTempPerm1376; + double fTempPerm1377; + double fTempPerm1378; + double fTempPerm1379; + double fTempPerm1380; + double fTempPerm1381; + double fTempPerm1382; + double fTempPerm1383; + double fTempPerm1384; + double fTempPerm1385; + double fTempPerm1386; + double fTempPerm1387; + double fTempPerm1388; + double fTempPerm1389; + double fTempPerm1390; + double fTempPerm1391; + double fTempPerm1392; + double fTempPerm1393; + double fTempPerm1394; + double fTempPerm1395; + double fTempPerm1396; + double fTempPerm1397; + double fTempPerm1398; + double fTempPerm1399; + double fTempPerm1400; + double fTempPerm1401; + double fTempPerm1402; + double fTempPerm1403; + double fTempPerm1404; + double fTempPerm1405; + double fTempPerm1406; + double fTempPerm1407; + double fTempPerm1408; + double fTempPerm1409; + double fTempPerm1410; + double fTempPerm1411; + double fTempPerm1412; + double fTempPerm1413; + double fTempPerm1414; + double fTempPerm1415; + double fTempPerm1416; + double fTempPerm1417; + double fTempPerm1418; + double fTempPerm1419; + double fTempPerm1420; + double fTempPerm1421; + double fTempPerm1422; + double fTempPerm1423; + double fTempPerm1424; + double fTempPerm1425; + double fTempPerm1426; + double fTempPerm1427; + double fTempPerm1428; + double fTempPerm1429; + double fTempPerm1430; + double fTempPerm1431; + double fTempPerm1432; + double fTempPerm1433; + double fTempPerm1434; + double fTempPerm1435; + double fTempPerm1436; + double fTempPerm1437; + double fTempPerm1438; + double fTempPerm1439; + double fTempPerm1440; + double fTempPerm1441; + double fTempPerm1442; + double fTempPerm1443; + double fTempPerm1444; + double fTempPerm1445; + double fTempPerm1446; + double fTempPerm1447; + double fTempPerm1448; + double fTempPerm1449; + double fTempPerm1450; + double fTempPerm1451; + double fTempPerm1452; + double fTempPerm1453; + double fTempPerm1454; + double fTempPerm1455; + double fTempPerm1456; + double fTempPerm1457; + double fTempPerm1458; + double fTempPerm1459; + double fTempPerm1460; + double fTempPerm1461; + double fTempPerm1462; + double fTempPerm1463; + double fTempPerm1464; + double fTempPerm1465; + double fTempPerm1466; + double fTempPerm1467; + double fTempPerm1468; + double fTempPerm1469; + double fTempPerm1470; + double fTempPerm1471; + double fTempPerm1472; + double fTempPerm1473; + double fTempPerm1474; + double fTempPerm1475; + double fTempPerm1476; + double fTempPerm1477; + double fTempPerm1478; + double fTempPerm1479; + double fTempPerm1480; + double fTempPerm1481; + double fTempPerm1482; + double fTempPerm1483; + double fTempPerm1484; + double fTempPerm1485; + double fTempPerm1486; + double fTempPerm1487; + double fTempPerm1488; + double fTempPerm1489; + double fTempPerm1490; + double fTempPerm1491; + double fTempPerm1492; + double fTempPerm1493; + double fTempPerm1494; + double fTempPerm1495; + double fTempPerm1496; + double fTempPerm1497; + double fTempPerm1498; + double fTempPerm1499; + double fTempPerm1500; + double fTempPerm1501; + double fTempPerm1502; + double fTempPerm1503; + double fTempPerm1504; + double fTempPerm1505; + double fTempPerm1506; + double fTempPerm1507; + double fTempPerm1508; + double fTempPerm1509; + double fTempPerm1510; + double fTempPerm1511; + double fTempPerm1512; + double fTempPerm1513; + double fTempPerm1514; + double fTempPerm1515; + double fTempPerm1516; + double fTempPerm1517; + double fTempPerm1518; + double fTempPerm1519; + double fTempPerm1520; + double fTempPerm1521; + double fTempPerm1522; + double fTempPerm1523; + double fTempPerm1524; + double fTempPerm1525; + double fTempPerm1526; + double fTempPerm1527; + double fTempPerm1528; + double fTempPerm1529; + double fTempPerm1530; + double fTempPerm1531; + double fTempPerm1532; + double fTempPerm1533; + double fTempPerm1534; + double fTempPerm1535; + double fTempPerm1536; + double fTempPerm1537; + double fTempPerm1538; + double fTempPerm1539; + double fTempPerm1540; + double fTempPerm1541; + double fTempPerm1542; + double fTempPerm1543; + double fTempPerm1544; + double fTempPerm1545; + double fTempPerm1546; + double fTempPerm1547; + double fTempPerm1548; + double fTempPerm1549; + double fTempPerm1550; + double fTempPerm1551; + double fTempPerm1552; + double fTempPerm1553; + double fTempPerm1554; + double fTempPerm1555; + double fTempPerm1556; + double fTempPerm1557; + double fTempPerm1558; + double fTempPerm1559; + double fTempPerm1560; + double fTempPerm1561; + double fTempPerm1562; + double fTempPerm1563; + double fTempPerm1564; + double fTempPerm1565; + double fTempPerm1566; + double fTempPerm1567; + double fTempPerm1568; + double fTempPerm1569; + double fTempPerm1570; + double fTempPerm1571; + double fTempPerm1572; + double fTempPerm1573; + double fTempPerm1574; + double fTempPerm1575; + double fTempPerm1576; + double fTempPerm1577; + double fTempPerm1578; + double fTempPerm1579; + double fTempPerm1580; + double fTempPerm1581; + double fTempPerm1582; + double fTempPerm1583; + double fTempPerm1584; + double fTempPerm1585; + double fTempPerm1586; + double fTempPerm1587; + double fTempPerm1588; + double fTempPerm1589; + double fTempPerm1590; + double fTempPerm1591; + double fTempPerm1592; + double fTempPerm1593; + double fTempPerm1594; + double fTempPerm1595; + double fTempPerm1596; + double fTempPerm1597; + double fTempPerm1598; + double fTempPerm1599; + double fTempPerm1600; + double fTempPerm1601; + double fTempPerm1602; + double fTempPerm1603; + double fTempPerm1604; + double fTempPerm1605; + double fTempPerm1606; + double fTempPerm1607; + double fTempPerm1608; + double fTempPerm1609; + double fTempPerm1610; + double fTempPerm1611; + double fTempPerm1612; + double fTempPerm1613; + double fTempPerm1614; + double fTempPerm1615; + double fTempPerm1616; + double fTempPerm1617; + double fTempPerm1618; + double fTempPerm1619; + double fTempPerm1620; + double fTempPerm1621; + double fTempPerm1622; + double fTempPerm1623; + double fTempPerm1624; + double fTempPerm1625; + double fTempPerm1626; + double fTempPerm1627; + double fTempPerm1628; + double fTempPerm1629; + double fTempPerm1630; + double fTempPerm1631; + double fTempPerm1632; + double fTempPerm1633; + double fTempPerm1634; + double fTempPerm1635; + double fTempPerm1636; + double fTempPerm1637; + double fTempPerm1638; + double fTempPerm1639; + double fTempPerm1640; + double fTempPerm1641; + double fTempPerm1642; + double fTempPerm1643; + double fTempPerm1644; + double fTempPerm1645; + double fTempPerm1646; + double fTempPerm1647; + double fTempPerm1648; + double fTempPerm1649; + double fTempPerm1650; + double fTempPerm1651; + double fTempPerm1652; + double fTempPerm1653; + double fTempPerm1654; + double fTempPerm1655; + double fTempPerm1656; + double fTempPerm1657; + double fTempPerm1658; + double fTempPerm1659; + double fTempPerm1660; + double fTempPerm1661; + double fTempPerm1662; + double fTempPerm1663; + double fTempPerm1664; + double fTempPerm1665; + double fTempPerm1666; + double fTempPerm1667; + double fTempPerm1668; + double fTempPerm1669; + double fTempPerm1670; + double fTempPerm1671; + double fTempPerm1672; + double fTempPerm1673; + double fTempPerm1674; + double fTempPerm1675; + double fTempPerm1676; + double fTempPerm1677; + double fTempPerm1678; + double fTempPerm1679; + double fTempPerm1680; + double fTempPerm1681; + double fTempPerm1682; + double fTempPerm1683; + double fTempPerm1684; + double fTempPerm1685; + double fTempPerm1686; + double fTempPerm1687; + double fTempPerm1688; + double fTempPerm1689; + double fTempPerm1690; + double fTempPerm1691; + double fTempPerm1692; + double fTempPerm1693; + double fTempPerm1694; + double fTempPerm1695; + double fTempPerm1696; + double fTempPerm1697; + double fTempPerm1698; + double fTempPerm1699; + double fTempPerm1700; + double fTempPerm1701; + double fTempPerm1702; + double fTempPerm1703; + double fTempPerm1704; + double fTempPerm1705; + double fTempPerm1706; + double fTempPerm1707; + double fTempPerm1708; + double fTempPerm1709; + double fTempPerm1710; + double fTempPerm1711; + double fTempPerm1712; + double fTempPerm1713; + double fTempPerm1714; + double fTempPerm1715; + double fTempPerm1716; + double fTempPerm1717; + double fTempPerm1718; + double fTempPerm1719; + double fTempPerm1720; + double fTempPerm1721; + double fTempPerm1722; + double fTempPerm1723; + double fTempPerm1724; + double fTempPerm1725; + double fTempPerm1726; + double fTempPerm1727; + double fTempPerm1728; + double fTempPerm1729; + double fTempPerm1730; + double fTempPerm1731; + double fTempPerm1732; + double fTempPerm1733; + double fTempPerm1734; + double fTempPerm1735; + double fTempPerm1736; + double fTempPerm1737; + double fTempPerm1738; + double fTempPerm1739; + double fTempPerm1740; + double fTempPerm1741; + double fTempPerm1742; + double fTempPerm1743; + double fTempPerm1744; + double fTempPerm1745; + double fTempPerm1746; + double fTempPerm1747; + double fTempPerm1748; + double fTempPerm1749; + double fTempPerm1750; + double fTempPerm1751; + double fTempPerm1752; + double fTempPerm1753; + double fTempPerm1754; + double fTempPerm1755; + double fTempPerm1756; + double fTempPerm1757; + double fTempPerm1758; + double fTempPerm1759; + double fTempPerm1760; + double fTempPerm1761; + double fTempPerm1762; + double fTempPerm1763; + double fTempPerm1764; + double fTempPerm1765; + double fTempPerm1766; + double fTempPerm1767; + double fTempPerm1768; + double fTempPerm1769; + double fTempPerm1770; + double fTempPerm1771; + double fTempPerm1772; + double fTempPerm1773; + double fTempPerm1774; + double fTempPerm1775; + double fTempPerm1776; + double fTempPerm1777; + double fTempPerm1778; + double fTempPerm1779; + double fTempPerm1780; + double fTempPerm1781; + double fTempPerm1782; + double fTempPerm1783; + double fTempPerm1784; + double fTempPerm1785; + double fTempPerm1786; + double fTempPerm1787; + double fTempPerm1788; + double fTempPerm1789; + double fTempPerm1790; + double fTempPerm1791; + double fTempPerm1792; + double fTempPerm1793; + double fTempPerm1794; + double fTempPerm1795; + double fTempPerm1796; + double fTempPerm1797; + double fTempPerm1798; + double fTempPerm1799; + double fTempPerm1800; + double fTempPerm1801; + double fTempPerm1802; + double fTempPerm1803; + double fTempPerm1804; + double fTempPerm1805; + double fTempPerm1806; + double fTempPerm1807; + double fTempPerm1808; + double fTempPerm1809; + double fTempPerm1810; + double fTempPerm1811; + double fTempPerm1812; + double fTempPerm1813; + double fTempPerm1814; + double fTempPerm1815; + double fTempPerm1816; + double fTempPerm1817; + double fTempPerm1818; + double fTempPerm1819; + double fTempPerm1820; + double fTempPerm1821; + double fTempPerm1822; + double fTempPerm1823; + double fTempPerm1824; + double fTempPerm1825; + double fTempPerm1826; + double fTempPerm1827; + double fTempPerm1828; + double fTempPerm1829; + double fTempPerm1830; + double fTempPerm1831; + double fTempPerm1832; + double fTempPerm1833; + double fTempPerm1834; + double fTempPerm1835; + double fTempPerm1836; + double fTempPerm1837; + double fTempPerm1838; + double fTempPerm1839; + double fTempPerm1840; + double fTempPerm1841; + double fTempPerm1842; + double fTempPerm1843; + double fTempPerm1844; + double fTempPerm1845; + double fTempPerm1846; + double fTempPerm1847; + double fTempPerm1848; + double fTempPerm1849; + double fTempPerm1850; + double fTempPerm1851; + double fTempPerm1852; + double fTempPerm1853; + double fTempPerm1854; + double fTempPerm1855; + double fTempPerm1856; + double fTempPerm1857; + double fTempPerm1858; + double fTempPerm1859; + double fTempPerm1860; + double fTempPerm1861; + double fTempPerm1862; + double fTempPerm1863; + double fTempPerm1864; + double fTempPerm1865; + double fTempPerm1866; + double fTempPerm1867; + double fTempPerm1868; + double fTempPerm1869; + double fTempPerm1870; + double fTempPerm1871; + double fTempPerm1872; + double fTempPerm1873; + double fTempPerm1874; + double fTempPerm1875; + double fTempPerm1876; + double fTempPerm1877; + double fTempPerm1878; + double fTempPerm1879; + double fTempPerm1880; + double fTempPerm1881; + double fTempPerm1882; + double fTempPerm1883; + double fTempPerm1884; + double fTempPerm1885; + double fTempPerm1886; + double fTempPerm1887; + double fTempPerm1888; + double fTempPerm1889; + double fTempPerm1890; + double fTempPerm1891; + double fTempPerm1892; + double fTempPerm1893; + double fTempPerm1894; + double fTempPerm1895; + double fTempPerm1896; + double fTempPerm1897; + double fTempPerm1898; + double fTempPerm1899; + double fTempPerm1900; + double fTempPerm1901; + double fTempPerm1902; + double fTempPerm1903; + double fTempPerm1904; + double fTempPerm1905; + double fTempPerm1906; + double fTempPerm1907; + double fTempPerm1908; + double fTempPerm1909; + double fTempPerm1910; + double fTempPerm1911; + double fTempPerm1912; + double fTempPerm1913; + double fTempPerm1914; + double fTempPerm1915; + double fTempPerm1916; + double fTempPerm1917; + double fTempPerm1918; + double fTempPerm1919; + double fTempPerm1920; + double fTempPerm1921; + double fTempPerm1922; + double fTempPerm1923; + double fTempPerm1924; + double fTempPerm1925; + double fTempPerm1926; + double fTempPerm1927; + double fTempPerm1928; + double fTempPerm1929; + double fTempPerm1930; + double fTempPerm1931; + double fTempPerm1932; + double fTempPerm1933; + double fTempPerm1934; + double fTempPerm1935; + double fTempPerm1936; + double fTempPerm1937; + double fTempPerm1938; + double fTempPerm1939; + double fTempPerm1940; + double fTempPerm1941; + double fTempPerm1942; + double fTempPerm1943; + double fTempPerm1944; + double fTempPerm1945; + double fTempPerm1946; + double fTempPerm1947; + double fTempPerm1948; + double fTempPerm1949; + double fTempPerm1950; + double fTempPerm1951; + double fTempPerm1952; + double fTempPerm1953; + double fTempPerm1954; + double fTempPerm1955; + double fTempPerm1956; + double fTempPerm1957; + double fTempPerm1958; + double fTempPerm1959; + double fTempPerm1960; + double fTempPerm1961; + double fTempPerm1962; + double fTempPerm1963; + double fTempPerm1964; + double fTempPerm1965; + double fTempPerm1966; + double fTempPerm1967; + double fTempPerm1968; + double fTempPerm1969; + double fTempPerm1970; + double fTempPerm1971; + double fTempPerm1972; + double fTempPerm1973; + double fTempPerm1974; + double fTempPerm1975; + double fTempPerm1976; + double fTempPerm1977; + double fTempPerm1978; + double fTempPerm1979; + double fTempPerm1980; + double fTempPerm1981; + double fTempPerm1982; + double fTempPerm1983; + double fTempPerm1984; + double fTempPerm1985; + double fTempPerm1986; + double fTempPerm1987; + double fTempPerm1988; + double fTempPerm1989; + double fTempPerm1990; + double fTempPerm1991; + double fTempPerm1992; + double fTempPerm1993; + double fTempPerm1994; + double fTempPerm1995; + double fTempPerm1996; + double fTempPerm1997; + double fTempPerm1998; + double fTempPerm1999; + double fTempPerm2000; + double fTempPerm2001; + double fTempPerm2002; + double fTempPerm2003; + double fTempPerm2004; + double fTempPerm2005; + double fTempPerm2006; + double fTempPerm2007; + double fTempPerm2008; + double fTempPerm2009; + double fTempPerm2010; + double fTempPerm2011; + double fTempPerm2012; + double fTempPerm2013; + double fTempPerm2014; + double fTempPerm2015; + double fTempPerm2016; + double fTempPerm2017; + double fTempPerm2018; + double fTempPerm2019; + double fTempPerm2020; + double fTempPerm2021; + double fTempPerm2022; + double fTempPerm2023; + double fTempPerm2024; + double fTempPerm2025; + double fTempPerm2026; + double fTempPerm2027; + double fTempPerm2028; + double fTempPerm2029; + double fTempPerm2030; + double fTempPerm2031; + double fTempPerm2032; + double fTempPerm2033; + double fTempPerm2034; + double fTempPerm2035; + double fTempPerm2036; + double fTempPerm2037; + double fTempPerm2038; + double fTempPerm2039; + double fTempPerm2040; + double fTempPerm2041; + double fTempPerm2042; + double fTempPerm2043; + double fTempPerm2044; + double fTempPerm2045; + double fTempPerm2046; + double fTempPerm2047; + double fTempPerm2048; + double fRec0[2]; + FAUSTFLOAT fbargraph16; + double fTempPerm2049; + double fRec19[2]; + FAUSTFLOAT fbargraph17; + int fSamplingFreq; + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOADecoderLebedev50Binaural3"); + m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL)"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + } + + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 2; } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; + fTempPerm9 = 0; + fTempPerm10 = 0; + fTempPerm11 = 0; + fTempPerm12 = 0; + fTempPerm13 = 0; + fTempPerm14 = 0; + fTempPerm15 = 0; + fTempPerm16 = 0; + fTempPerm17 = 0; + fTempPerm18 = 0; + fTempPerm19 = 0; + fTempPerm20 = 0; + fTempPerm21 = 0; + fTempPerm22 = 0; + fTempPerm23 = 0; + fTempPerm24 = 0; + fTempPerm25 = 0; + fTempPerm26 = 0; + fTempPerm27 = 0; + fTempPerm28 = 0; + fTempPerm29 = 0; + fTempPerm30 = 0; + fTempPerm31 = 0; + fTempPerm32 = 0; + fTempPerm33 = 0; + fTempPerm34 = 0; + fTempPerm35 = 0; + fTempPerm36 = 0; + fTempPerm37 = 0; + fTempPerm38 = 0; + fTempPerm39 = 0; + fTempPerm40 = 0; + fTempPerm41 = 0; + fTempPerm42 = 0; + fTempPerm43 = 0; + fTempPerm44 = 0; + fTempPerm45 = 0; + fTempPerm46 = 0; + fTempPerm47 = 0; + fTempPerm48 = 0; + fTempPerm49 = 0; + fTempPerm50 = 0; + fTempPerm51 = 0; + fTempPerm52 = 0; + fTempPerm53 = 0; + fTempPerm54 = 0; + fTempPerm55 = 0; + fTempPerm56 = 0; + fTempPerm57 = 0; + fTempPerm58 = 0; + fTempPerm59 = 0; + fTempPerm60 = 0; + fTempPerm61 = 0; + fTempPerm62 = 0; + fTempPerm63 = 0; + fTempPerm64 = 0; + fTempPerm65 = 0; + fTempPerm66 = 0; + fTempPerm67 = 0; + fTempPerm68 = 0; + fTempPerm69 = 0; + fTempPerm70 = 0; + fTempPerm71 = 0; + fTempPerm72 = 0; + fTempPerm73 = 0; + fTempPerm74 = 0; + fTempPerm75 = 0; + fTempPerm76 = 0; + fTempPerm77 = 0; + fTempPerm78 = 0; + fTempPerm79 = 0; + fTempPerm80 = 0; + fTempPerm81 = 0; + fTempPerm82 = 0; + fTempPerm83 = 0; + fTempPerm84 = 0; + fTempPerm85 = 0; + fTempPerm86 = 0; + fTempPerm87 = 0; + fTempPerm88 = 0; + fTempPerm89 = 0; + fTempPerm90 = 0; + fTempPerm91 = 0; + fTempPerm92 = 0; + fTempPerm93 = 0; + fTempPerm94 = 0; + fTempPerm95 = 0; + fTempPerm96 = 0; + fTempPerm97 = 0; + fTempPerm98 = 0; + fTempPerm99 = 0; + fTempPerm100 = 0; + fTempPerm101 = 0; + fTempPerm102 = 0; + fTempPerm103 = 0; + fTempPerm104 = 0; + fTempPerm105 = 0; + fTempPerm106 = 0; + fTempPerm107 = 0; + fTempPerm108 = 0; + fTempPerm109 = 0; + fTempPerm110 = 0; + fTempPerm111 = 0; + fTempPerm112 = 0; + fTempPerm113 = 0; + fTempPerm114 = 0; + fTempPerm115 = 0; + fTempPerm116 = 0; + fTempPerm117 = 0; + fTempPerm118 = 0; + fTempPerm119 = 0; + fTempPerm120 = 0; + fTempPerm121 = 0; + fTempPerm122 = 0; + fTempPerm123 = 0; + fTempPerm124 = 0; + fTempPerm125 = 0; + fTempPerm126 = 0; + fTempPerm127 = 0; + fTempPerm128 = 0; + fTempPerm129 = 0; + fTempPerm130 = 0; + fTempPerm131 = 0; + fTempPerm132 = 0; + fTempPerm133 = 0; + fTempPerm134 = 0; + fTempPerm135 = 0; + fTempPerm136 = 0; + fTempPerm137 = 0; + fTempPerm138 = 0; + fTempPerm139 = 0; + fTempPerm140 = 0; + fTempPerm141 = 0; + fTempPerm142 = 0; + fTempPerm143 = 0; + fTempPerm144 = 0; + fTempPerm145 = 0; + fTempPerm146 = 0; + fTempPerm147 = 0; + fTempPerm148 = 0; + fTempPerm149 = 0; + fTempPerm150 = 0; + fTempPerm151 = 0; + fTempPerm152 = 0; + fTempPerm153 = 0; + fTempPerm154 = 0; + fTempPerm155 = 0; + fTempPerm156 = 0; + fTempPerm157 = 0; + fTempPerm158 = 0; + fTempPerm159 = 0; + fTempPerm160 = 0; + fTempPerm161 = 0; + fTempPerm162 = 0; + fTempPerm163 = 0; + fTempPerm164 = 0; + fTempPerm165 = 0; + fTempPerm166 = 0; + fTempPerm167 = 0; + fTempPerm168 = 0; + fTempPerm169 = 0; + fTempPerm170 = 0; + fTempPerm171 = 0; + fTempPerm172 = 0; + fTempPerm173 = 0; + fTempPerm174 = 0; + fTempPerm175 = 0; + fTempPerm176 = 0; + fTempPerm177 = 0; + fTempPerm178 = 0; + fTempPerm179 = 0; + fTempPerm180 = 0; + fTempPerm181 = 0; + fTempPerm182 = 0; + fTempPerm183 = 0; + fTempPerm184 = 0; + fTempPerm185 = 0; + fTempPerm186 = 0; + fTempPerm187 = 0; + fTempPerm188 = 0; + fTempPerm189 = 0; + fTempPerm190 = 0; + fTempPerm191 = 0; + fTempPerm192 = 0; + fTempPerm193 = 0; + fTempPerm194 = 0; + fTempPerm195 = 0; + fTempPerm196 = 0; + fTempPerm197 = 0; + fTempPerm198 = 0; + fTempPerm199 = 0; + fTempPerm200 = 0; + fTempPerm201 = 0; + fTempPerm202 = 0; + fTempPerm203 = 0; + fTempPerm204 = 0; + fTempPerm205 = 0; + fTempPerm206 = 0; + fTempPerm207 = 0; + fTempPerm208 = 0; + fTempPerm209 = 0; + fTempPerm210 = 0; + fTempPerm211 = 0; + fTempPerm212 = 0; + fTempPerm213 = 0; + fTempPerm214 = 0; + fTempPerm215 = 0; + fTempPerm216 = 0; + fTempPerm217 = 0; + fTempPerm218 = 0; + fTempPerm219 = 0; + fTempPerm220 = 0; + fTempPerm221 = 0; + fTempPerm222 = 0; + fTempPerm223 = 0; + fTempPerm224 = 0; + fTempPerm225 = 0; + fTempPerm226 = 0; + fTempPerm227 = 0; + fTempPerm228 = 0; + fTempPerm229 = 0; + fTempPerm230 = 0; + fTempPerm231 = 0; + fTempPerm232 = 0; + fTempPerm233 = 0; + fTempPerm234 = 0; + fTempPerm235 = 0; + fTempPerm236 = 0; + fTempPerm237 = 0; + fTempPerm238 = 0; + fTempPerm239 = 0; + fTempPerm240 = 0; + fTempPerm241 = 0; + fTempPerm242 = 0; + fTempPerm243 = 0; + fTempPerm244 = 0; + fTempPerm245 = 0; + fTempPerm246 = 0; + fTempPerm247 = 0; + fTempPerm248 = 0; + fTempPerm249 = 0; + fTempPerm250 = 0; + fTempPerm251 = 0; + fTempPerm252 = 0; + fTempPerm253 = 0; + fTempPerm254 = 0; + fTempPerm255 = 0; + fTempPerm256 = 0; + fTempPerm257 = 0; + fTempPerm258 = 0; + fTempPerm259 = 0; + fTempPerm260 = 0; + fTempPerm261 = 0; + fTempPerm262 = 0; + fTempPerm263 = 0; + fTempPerm264 = 0; + fTempPerm265 = 0; + fTempPerm266 = 0; + fTempPerm267 = 0; + fTempPerm268 = 0; + fTempPerm269 = 0; + fTempPerm270 = 0; + fTempPerm271 = 0; + fTempPerm272 = 0; + fTempPerm273 = 0; + fTempPerm274 = 0; + fTempPerm275 = 0; + fTempPerm276 = 0; + fTempPerm277 = 0; + fTempPerm278 = 0; + fTempPerm279 = 0; + fTempPerm280 = 0; + fTempPerm281 = 0; + fTempPerm282 = 0; + fTempPerm283 = 0; + fTempPerm284 = 0; + fTempPerm285 = 0; + fTempPerm286 = 0; + fTempPerm287 = 0; + fTempPerm288 = 0; + fTempPerm289 = 0; + fTempPerm290 = 0; + fTempPerm291 = 0; + fTempPerm292 = 0; + fTempPerm293 = 0; + fTempPerm294 = 0; + fTempPerm295 = 0; + fTempPerm296 = 0; + fTempPerm297 = 0; + fTempPerm298 = 0; + fTempPerm299 = 0; + fTempPerm300 = 0; + fTempPerm301 = 0; + fTempPerm302 = 0; + fTempPerm303 = 0; + fTempPerm304 = 0; + fTempPerm305 = 0; + fTempPerm306 = 0; + fTempPerm307 = 0; + fTempPerm308 = 0; + fTempPerm309 = 0; + fTempPerm310 = 0; + fTempPerm311 = 0; + fTempPerm312 = 0; + fTempPerm313 = 0; + fTempPerm314 = 0; + fTempPerm315 = 0; + fTempPerm316 = 0; + fTempPerm317 = 0; + fTempPerm318 = 0; + fTempPerm319 = 0; + fTempPerm320 = 0; + fTempPerm321 = 0; + fTempPerm322 = 0; + fTempPerm323 = 0; + fTempPerm324 = 0; + fTempPerm325 = 0; + fTempPerm326 = 0; + fTempPerm327 = 0; + fTempPerm328 = 0; + fTempPerm329 = 0; + fTempPerm330 = 0; + fTempPerm331 = 0; + fTempPerm332 = 0; + fTempPerm333 = 0; + fTempPerm334 = 0; + fTempPerm335 = 0; + fTempPerm336 = 0; + fTempPerm337 = 0; + fTempPerm338 = 0; + fTempPerm339 = 0; + fTempPerm340 = 0; + fTempPerm341 = 0; + fTempPerm342 = 0; + fTempPerm343 = 0; + fTempPerm344 = 0; + fTempPerm345 = 0; + fTempPerm346 = 0; + fTempPerm347 = 0; + fTempPerm348 = 0; + fTempPerm349 = 0; + fTempPerm350 = 0; + fTempPerm351 = 0; + fTempPerm352 = 0; + fTempPerm353 = 0; + fTempPerm354 = 0; + fTempPerm355 = 0; + fTempPerm356 = 0; + fTempPerm357 = 0; + fTempPerm358 = 0; + fTempPerm359 = 0; + fTempPerm360 = 0; + fTempPerm361 = 0; + fTempPerm362 = 0; + fTempPerm363 = 0; + fTempPerm364 = 0; + fTempPerm365 = 0; + fTempPerm366 = 0; + fTempPerm367 = 0; + fTempPerm368 = 0; + fTempPerm369 = 0; + fTempPerm370 = 0; + fTempPerm371 = 0; + fTempPerm372 = 0; + fTempPerm373 = 0; + fTempPerm374 = 0; + fTempPerm375 = 0; + fTempPerm376 = 0; + fTempPerm377 = 0; + fTempPerm378 = 0; + fTempPerm379 = 0; + fTempPerm380 = 0; + fTempPerm381 = 0; + fTempPerm382 = 0; + fTempPerm383 = 0; + fTempPerm384 = 0; + fTempPerm385 = 0; + fTempPerm386 = 0; + fTempPerm387 = 0; + fTempPerm388 = 0; + fTempPerm389 = 0; + fTempPerm390 = 0; + fTempPerm391 = 0; + fTempPerm392 = 0; + fTempPerm393 = 0; + fTempPerm394 = 0; + fTempPerm395 = 0; + fTempPerm396 = 0; + fTempPerm397 = 0; + fTempPerm398 = 0; + fTempPerm399 = 0; + fTempPerm400 = 0; + fTempPerm401 = 0; + fTempPerm402 = 0; + fTempPerm403 = 0; + fTempPerm404 = 0; + fTempPerm405 = 0; + fTempPerm406 = 0; + fTempPerm407 = 0; + fTempPerm408 = 0; + fTempPerm409 = 0; + fTempPerm410 = 0; + fTempPerm411 = 0; + fTempPerm412 = 0; + fTempPerm413 = 0; + fTempPerm414 = 0; + fTempPerm415 = 0; + fTempPerm416 = 0; + fTempPerm417 = 0; + fTempPerm418 = 0; + fTempPerm419 = 0; + fTempPerm420 = 0; + fTempPerm421 = 0; + fTempPerm422 = 0; + fTempPerm423 = 0; + fTempPerm424 = 0; + fTempPerm425 = 0; + fTempPerm426 = 0; + fTempPerm427 = 0; + fTempPerm428 = 0; + fTempPerm429 = 0; + fTempPerm430 = 0; + fTempPerm431 = 0; + fTempPerm432 = 0; + fTempPerm433 = 0; + fTempPerm434 = 0; + fTempPerm435 = 0; + fTempPerm436 = 0; + fTempPerm437 = 0; + fTempPerm438 = 0; + fTempPerm439 = 0; + fTempPerm440 = 0; + fTempPerm441 = 0; + fTempPerm442 = 0; + fTempPerm443 = 0; + fTempPerm444 = 0; + fTempPerm445 = 0; + fTempPerm446 = 0; + fTempPerm447 = 0; + fTempPerm448 = 0; + fTempPerm449 = 0; + fTempPerm450 = 0; + fTempPerm451 = 0; + fTempPerm452 = 0; + fTempPerm453 = 0; + fTempPerm454 = 0; + fTempPerm455 = 0; + fTempPerm456 = 0; + fTempPerm457 = 0; + fTempPerm458 = 0; + fTempPerm459 = 0; + fTempPerm460 = 0; + fTempPerm461 = 0; + fTempPerm462 = 0; + fTempPerm463 = 0; + fTempPerm464 = 0; + fTempPerm465 = 0; + fTempPerm466 = 0; + fTempPerm467 = 0; + fTempPerm468 = 0; + fTempPerm469 = 0; + fTempPerm470 = 0; + fTempPerm471 = 0; + fTempPerm472 = 0; + fTempPerm473 = 0; + fTempPerm474 = 0; + fTempPerm475 = 0; + fTempPerm476 = 0; + fTempPerm477 = 0; + fTempPerm478 = 0; + fTempPerm479 = 0; + fTempPerm480 = 0; + fTempPerm481 = 0; + fTempPerm482 = 0; + fTempPerm483 = 0; + fTempPerm484 = 0; + fTempPerm485 = 0; + fTempPerm486 = 0; + fTempPerm487 = 0; + fTempPerm488 = 0; + fTempPerm489 = 0; + fTempPerm490 = 0; + fTempPerm491 = 0; + fTempPerm492 = 0; + fTempPerm493 = 0; + fTempPerm494 = 0; + fTempPerm495 = 0; + fTempPerm496 = 0; + fTempPerm497 = 0; + fTempPerm498 = 0; + fTempPerm499 = 0; + fTempPerm500 = 0; + fTempPerm501 = 0; + fTempPerm502 = 0; + fTempPerm503 = 0; + fTempPerm504 = 0; + fTempPerm505 = 0; + fTempPerm506 = 0; + fTempPerm507 = 0; + fTempPerm508 = 0; + fTempPerm509 = 0; + fTempPerm510 = 0; + fTempPerm511 = 0; + fTempPerm512 = 0; + fTempPerm513 = 0; + fTempPerm514 = 0; + fTempPerm515 = 0; + fTempPerm516 = 0; + fTempPerm517 = 0; + fTempPerm518 = 0; + fTempPerm519 = 0; + fTempPerm520 = 0; + fTempPerm521 = 0; + fTempPerm522 = 0; + fTempPerm523 = 0; + fTempPerm524 = 0; + fTempPerm525 = 0; + fTempPerm526 = 0; + fTempPerm527 = 0; + fTempPerm528 = 0; + fTempPerm529 = 0; + fTempPerm530 = 0; + fTempPerm531 = 0; + fTempPerm532 = 0; + fTempPerm533 = 0; + fTempPerm534 = 0; + fTempPerm535 = 0; + fTempPerm536 = 0; + fTempPerm537 = 0; + fTempPerm538 = 0; + fTempPerm539 = 0; + fTempPerm540 = 0; + fTempPerm541 = 0; + fTempPerm542 = 0; + fTempPerm543 = 0; + fTempPerm544 = 0; + fTempPerm545 = 0; + fTempPerm546 = 0; + fTempPerm547 = 0; + fTempPerm548 = 0; + fTempPerm549 = 0; + fTempPerm550 = 0; + fTempPerm551 = 0; + fTempPerm552 = 0; + fTempPerm553 = 0; + fTempPerm554 = 0; + fTempPerm555 = 0; + fTempPerm556 = 0; + fTempPerm557 = 0; + fTempPerm558 = 0; + fTempPerm559 = 0; + fTempPerm560 = 0; + fTempPerm561 = 0; + fTempPerm562 = 0; + fTempPerm563 = 0; + fTempPerm564 = 0; + fTempPerm565 = 0; + fTempPerm566 = 0; + fTempPerm567 = 0; + fTempPerm568 = 0; + fTempPerm569 = 0; + fTempPerm570 = 0; + fTempPerm571 = 0; + fTempPerm572 = 0; + fTempPerm573 = 0; + fTempPerm574 = 0; + fTempPerm575 = 0; + fTempPerm576 = 0; + fTempPerm577 = 0; + fTempPerm578 = 0; + fTempPerm579 = 0; + fTempPerm580 = 0; + fTempPerm581 = 0; + fTempPerm582 = 0; + fTempPerm583 = 0; + fTempPerm584 = 0; + fTempPerm585 = 0; + fTempPerm586 = 0; + fTempPerm587 = 0; + fTempPerm588 = 0; + fTempPerm589 = 0; + fTempPerm590 = 0; + fTempPerm591 = 0; + fTempPerm592 = 0; + fTempPerm593 = 0; + fTempPerm594 = 0; + fTempPerm595 = 0; + fTempPerm596 = 0; + fTempPerm597 = 0; + fTempPerm598 = 0; + fTempPerm599 = 0; + fTempPerm600 = 0; + fTempPerm601 = 0; + fTempPerm602 = 0; + fTempPerm603 = 0; + fTempPerm604 = 0; + fTempPerm605 = 0; + fTempPerm606 = 0; + fTempPerm607 = 0; + fTempPerm608 = 0; + fTempPerm609 = 0; + fTempPerm610 = 0; + fTempPerm611 = 0; + fTempPerm612 = 0; + fTempPerm613 = 0; + fTempPerm614 = 0; + fTempPerm615 = 0; + fTempPerm616 = 0; + fTempPerm617 = 0; + fTempPerm618 = 0; + fTempPerm619 = 0; + fTempPerm620 = 0; + fTempPerm621 = 0; + fTempPerm622 = 0; + fTempPerm623 = 0; + fTempPerm624 = 0; + fTempPerm625 = 0; + fTempPerm626 = 0; + fTempPerm627 = 0; + fTempPerm628 = 0; + fTempPerm629 = 0; + fTempPerm630 = 0; + fTempPerm631 = 0; + fTempPerm632 = 0; + fTempPerm633 = 0; + fTempPerm634 = 0; + fTempPerm635 = 0; + fTempPerm636 = 0; + fTempPerm637 = 0; + fTempPerm638 = 0; + fTempPerm639 = 0; + fTempPerm640 = 0; + fTempPerm641 = 0; + fTempPerm642 = 0; + fTempPerm643 = 0; + fTempPerm644 = 0; + fTempPerm645 = 0; + fTempPerm646 = 0; + fTempPerm647 = 0; + fTempPerm648 = 0; + fTempPerm649 = 0; + fTempPerm650 = 0; + fTempPerm651 = 0; + fTempPerm652 = 0; + fTempPerm653 = 0; + fTempPerm654 = 0; + fTempPerm655 = 0; + fTempPerm656 = 0; + fTempPerm657 = 0; + fTempPerm658 = 0; + fTempPerm659 = 0; + fTempPerm660 = 0; + fTempPerm661 = 0; + fTempPerm662 = 0; + fTempPerm663 = 0; + fTempPerm664 = 0; + fTempPerm665 = 0; + fTempPerm666 = 0; + fTempPerm667 = 0; + fTempPerm668 = 0; + fTempPerm669 = 0; + fTempPerm670 = 0; + fTempPerm671 = 0; + fTempPerm672 = 0; + fTempPerm673 = 0; + fTempPerm674 = 0; + fTempPerm675 = 0; + fTempPerm676 = 0; + fTempPerm677 = 0; + fTempPerm678 = 0; + fTempPerm679 = 0; + fTempPerm680 = 0; + fTempPerm681 = 0; + fTempPerm682 = 0; + fTempPerm683 = 0; + fTempPerm684 = 0; + fTempPerm685 = 0; + fTempPerm686 = 0; + fTempPerm687 = 0; + fTempPerm688 = 0; + fTempPerm689 = 0; + fTempPerm690 = 0; + fTempPerm691 = 0; + fTempPerm692 = 0; + fTempPerm693 = 0; + fTempPerm694 = 0; + fTempPerm695 = 0; + fTempPerm696 = 0; + fTempPerm697 = 0; + fTempPerm698 = 0; + fTempPerm699 = 0; + fTempPerm700 = 0; + fTempPerm701 = 0; + fTempPerm702 = 0; + fTempPerm703 = 0; + fTempPerm704 = 0; + fTempPerm705 = 0; + fTempPerm706 = 0; + fTempPerm707 = 0; + fTempPerm708 = 0; + fTempPerm709 = 0; + fTempPerm710 = 0; + fTempPerm711 = 0; + fTempPerm712 = 0; + fTempPerm713 = 0; + fTempPerm714 = 0; + fTempPerm715 = 0; + fTempPerm716 = 0; + fTempPerm717 = 0; + fTempPerm718 = 0; + fTempPerm719 = 0; + fTempPerm720 = 0; + fTempPerm721 = 0; + fTempPerm722 = 0; + fTempPerm723 = 0; + fTempPerm724 = 0; + fTempPerm725 = 0; + fTempPerm726 = 0; + fTempPerm727 = 0; + fTempPerm728 = 0; + fTempPerm729 = 0; + fTempPerm730 = 0; + fTempPerm731 = 0; + fTempPerm732 = 0; + fTempPerm733 = 0; + fTempPerm734 = 0; + fTempPerm735 = 0; + fTempPerm736 = 0; + fTempPerm737 = 0; + fTempPerm738 = 0; + fTempPerm739 = 0; + fTempPerm740 = 0; + fTempPerm741 = 0; + fTempPerm742 = 0; + fTempPerm743 = 0; + fTempPerm744 = 0; + fTempPerm745 = 0; + fTempPerm746 = 0; + fTempPerm747 = 0; + fTempPerm748 = 0; + fTempPerm749 = 0; + fTempPerm750 = 0; + fTempPerm751 = 0; + fTempPerm752 = 0; + fTempPerm753 = 0; + fTempPerm754 = 0; + fTempPerm755 = 0; + fTempPerm756 = 0; + fTempPerm757 = 0; + fTempPerm758 = 0; + fTempPerm759 = 0; + fTempPerm760 = 0; + fTempPerm761 = 0; + fTempPerm762 = 0; + fTempPerm763 = 0; + fTempPerm764 = 0; + fTempPerm765 = 0; + fTempPerm766 = 0; + fTempPerm767 = 0; + fTempPerm768 = 0; + fTempPerm769 = 0; + fTempPerm770 = 0; + fTempPerm771 = 0; + fTempPerm772 = 0; + fTempPerm773 = 0; + fTempPerm774 = 0; + fTempPerm775 = 0; + fTempPerm776 = 0; + fTempPerm777 = 0; + fTempPerm778 = 0; + fTempPerm779 = 0; + fTempPerm780 = 0; + fTempPerm781 = 0; + fTempPerm782 = 0; + fTempPerm783 = 0; + fTempPerm784 = 0; + fTempPerm785 = 0; + fTempPerm786 = 0; + fTempPerm787 = 0; + fTempPerm788 = 0; + fTempPerm789 = 0; + fTempPerm790 = 0; + fTempPerm791 = 0; + fTempPerm792 = 0; + fTempPerm793 = 0; + fTempPerm794 = 0; + fTempPerm795 = 0; + fTempPerm796 = 0; + fTempPerm797 = 0; + fTempPerm798 = 0; + fTempPerm799 = 0; + fTempPerm800 = 0; + fTempPerm801 = 0; + fTempPerm802 = 0; + fTempPerm803 = 0; + fTempPerm804 = 0; + fTempPerm805 = 0; + fTempPerm806 = 0; + fTempPerm807 = 0; + fTempPerm808 = 0; + fTempPerm809 = 0; + fTempPerm810 = 0; + fTempPerm811 = 0; + fTempPerm812 = 0; + fTempPerm813 = 0; + fTempPerm814 = 0; + fTempPerm815 = 0; + fTempPerm816 = 0; + fTempPerm817 = 0; + fTempPerm818 = 0; + fTempPerm819 = 0; + fTempPerm820 = 0; + fTempPerm821 = 0; + fTempPerm822 = 0; + fTempPerm823 = 0; + fTempPerm824 = 0; + fTempPerm825 = 0; + fTempPerm826 = 0; + fTempPerm827 = 0; + fTempPerm828 = 0; + fTempPerm829 = 0; + fTempPerm830 = 0; + fTempPerm831 = 0; + fTempPerm832 = 0; + fTempPerm833 = 0; + fTempPerm834 = 0; + fTempPerm835 = 0; + fTempPerm836 = 0; + fTempPerm837 = 0; + fTempPerm838 = 0; + fTempPerm839 = 0; + fTempPerm840 = 0; + fTempPerm841 = 0; + fTempPerm842 = 0; + fTempPerm843 = 0; + fTempPerm844 = 0; + fTempPerm845 = 0; + fTempPerm846 = 0; + fTempPerm847 = 0; + fTempPerm848 = 0; + fTempPerm849 = 0; + fTempPerm850 = 0; + fTempPerm851 = 0; + fTempPerm852 = 0; + fTempPerm853 = 0; + fTempPerm854 = 0; + fTempPerm855 = 0; + fTempPerm856 = 0; + fTempPerm857 = 0; + fTempPerm858 = 0; + fTempPerm859 = 0; + fTempPerm860 = 0; + fTempPerm861 = 0; + fTempPerm862 = 0; + fTempPerm863 = 0; + fTempPerm864 = 0; + fTempPerm865 = 0; + fTempPerm866 = 0; + fTempPerm867 = 0; + fTempPerm868 = 0; + fTempPerm869 = 0; + fTempPerm870 = 0; + fTempPerm871 = 0; + fTempPerm872 = 0; + fTempPerm873 = 0; + fTempPerm874 = 0; + fTempPerm875 = 0; + fTempPerm876 = 0; + fTempPerm877 = 0; + fTempPerm878 = 0; + fTempPerm879 = 0; + fTempPerm880 = 0; + fTempPerm881 = 0; + fTempPerm882 = 0; + fTempPerm883 = 0; + fTempPerm884 = 0; + fTempPerm885 = 0; + fTempPerm886 = 0; + fTempPerm887 = 0; + fTempPerm888 = 0; + fTempPerm889 = 0; + fTempPerm890 = 0; + fTempPerm891 = 0; + fTempPerm892 = 0; + fTempPerm893 = 0; + fTempPerm894 = 0; + fTempPerm895 = 0; + fTempPerm896 = 0; + fTempPerm897 = 0; + fTempPerm898 = 0; + fTempPerm899 = 0; + fTempPerm900 = 0; + fTempPerm901 = 0; + fTempPerm902 = 0; + fTempPerm903 = 0; + fTempPerm904 = 0; + fTempPerm905 = 0; + fTempPerm906 = 0; + fTempPerm907 = 0; + fTempPerm908 = 0; + fTempPerm909 = 0; + fTempPerm910 = 0; + fTempPerm911 = 0; + fTempPerm912 = 0; + fTempPerm913 = 0; + fTempPerm914 = 0; + fTempPerm915 = 0; + fTempPerm916 = 0; + fTempPerm917 = 0; + fTempPerm918 = 0; + fTempPerm919 = 0; + fTempPerm920 = 0; + fTempPerm921 = 0; + fTempPerm922 = 0; + fTempPerm923 = 0; + fTempPerm924 = 0; + fTempPerm925 = 0; + fTempPerm926 = 0; + fTempPerm927 = 0; + fTempPerm928 = 0; + fTempPerm929 = 0; + fTempPerm930 = 0; + fTempPerm931 = 0; + fTempPerm932 = 0; + fTempPerm933 = 0; + fTempPerm934 = 0; + fTempPerm935 = 0; + fTempPerm936 = 0; + fTempPerm937 = 0; + fTempPerm938 = 0; + fTempPerm939 = 0; + fTempPerm940 = 0; + fTempPerm941 = 0; + fTempPerm942 = 0; + fTempPerm943 = 0; + fTempPerm944 = 0; + fTempPerm945 = 0; + fTempPerm946 = 0; + fTempPerm947 = 0; + fTempPerm948 = 0; + fTempPerm949 = 0; + fTempPerm950 = 0; + fTempPerm951 = 0; + fTempPerm952 = 0; + fTempPerm953 = 0; + fTempPerm954 = 0; + fTempPerm955 = 0; + fTempPerm956 = 0; + fTempPerm957 = 0; + fTempPerm958 = 0; + fTempPerm959 = 0; + fTempPerm960 = 0; + fTempPerm961 = 0; + fTempPerm962 = 0; + fTempPerm963 = 0; + fTempPerm964 = 0; + fTempPerm965 = 0; + fTempPerm966 = 0; + fTempPerm967 = 0; + fTempPerm968 = 0; + fTempPerm969 = 0; + fTempPerm970 = 0; + fTempPerm971 = 0; + fTempPerm972 = 0; + fTempPerm973 = 0; + fTempPerm974 = 0; + fTempPerm975 = 0; + fTempPerm976 = 0; + fTempPerm977 = 0; + fTempPerm978 = 0; + fTempPerm979 = 0; + fTempPerm980 = 0; + fTempPerm981 = 0; + fTempPerm982 = 0; + fTempPerm983 = 0; + fTempPerm984 = 0; + fTempPerm985 = 0; + fTempPerm986 = 0; + fTempPerm987 = 0; + fTempPerm988 = 0; + fTempPerm989 = 0; + fTempPerm990 = 0; + fTempPerm991 = 0; + fTempPerm992 = 0; + fTempPerm993 = 0; + fTempPerm994 = 0; + fTempPerm995 = 0; + fTempPerm996 = 0; + fTempPerm997 = 0; + fTempPerm998 = 0; + fTempPerm999 = 0; + fTempPerm1000 = 0; + fTempPerm1001 = 0; + fTempPerm1002 = 0; + fTempPerm1003 = 0; + fTempPerm1004 = 0; + fTempPerm1005 = 0; + fTempPerm1006 = 0; + fTempPerm1007 = 0; + fTempPerm1008 = 0; + fTempPerm1009 = 0; + fTempPerm1010 = 0; + fTempPerm1011 = 0; + fTempPerm1012 = 0; + fTempPerm1013 = 0; + fTempPerm1014 = 0; + fTempPerm1015 = 0; + fTempPerm1016 = 0; + fTempPerm1017 = 0; + fTempPerm1018 = 0; + fTempPerm1019 = 0; + fTempPerm1020 = 0; + fTempPerm1021 = 0; + fTempPerm1022 = 0; + fTempPerm1023 = 0; + fTempPerm1024 = 0; + fTempPerm1025 = 0; + fTempPerm1026 = 0; + fTempPerm1027 = 0; + fTempPerm1028 = 0; + fTempPerm1029 = 0; + fTempPerm1030 = 0; + fTempPerm1031 = 0; + fTempPerm1032 = 0; + fTempPerm1033 = 0; + fTempPerm1034 = 0; + fTempPerm1035 = 0; + fTempPerm1036 = 0; + fTempPerm1037 = 0; + fTempPerm1038 = 0; + fTempPerm1039 = 0; + fTempPerm1040 = 0; + fTempPerm1041 = 0; + fTempPerm1042 = 0; + fTempPerm1043 = 0; + fTempPerm1044 = 0; + fTempPerm1045 = 0; + fTempPerm1046 = 0; + fTempPerm1047 = 0; + fTempPerm1048 = 0; + fTempPerm1049 = 0; + fTempPerm1050 = 0; + fTempPerm1051 = 0; + fTempPerm1052 = 0; + fTempPerm1053 = 0; + fTempPerm1054 = 0; + fTempPerm1055 = 0; + fTempPerm1056 = 0; + fTempPerm1057 = 0; + fTempPerm1058 = 0; + fTempPerm1059 = 0; + fTempPerm1060 = 0; + fTempPerm1061 = 0; + fTempPerm1062 = 0; + fTempPerm1063 = 0; + fTempPerm1064 = 0; + fTempPerm1065 = 0; + fTempPerm1066 = 0; + fTempPerm1067 = 0; + fTempPerm1068 = 0; + fTempPerm1069 = 0; + fTempPerm1070 = 0; + fTempPerm1071 = 0; + fTempPerm1072 = 0; + fTempPerm1073 = 0; + fTempPerm1074 = 0; + fTempPerm1075 = 0; + fTempPerm1076 = 0; + fTempPerm1077 = 0; + fTempPerm1078 = 0; + fTempPerm1079 = 0; + fTempPerm1080 = 0; + fTempPerm1081 = 0; + fTempPerm1082 = 0; + fTempPerm1083 = 0; + fTempPerm1084 = 0; + fTempPerm1085 = 0; + fTempPerm1086 = 0; + fTempPerm1087 = 0; + fTempPerm1088 = 0; + fTempPerm1089 = 0; + fTempPerm1090 = 0; + fTempPerm1091 = 0; + fTempPerm1092 = 0; + fTempPerm1093 = 0; + fTempPerm1094 = 0; + fTempPerm1095 = 0; + fTempPerm1096 = 0; + fTempPerm1097 = 0; + fTempPerm1098 = 0; + fTempPerm1099 = 0; + fTempPerm1100 = 0; + fTempPerm1101 = 0; + fTempPerm1102 = 0; + fTempPerm1103 = 0; + fTempPerm1104 = 0; + fTempPerm1105 = 0; + fTempPerm1106 = 0; + fTempPerm1107 = 0; + fTempPerm1108 = 0; + fTempPerm1109 = 0; + fTempPerm1110 = 0; + fTempPerm1111 = 0; + fTempPerm1112 = 0; + fTempPerm1113 = 0; + fTempPerm1114 = 0; + fTempPerm1115 = 0; + fTempPerm1116 = 0; + fTempPerm1117 = 0; + fTempPerm1118 = 0; + fTempPerm1119 = 0; + fTempPerm1120 = 0; + fTempPerm1121 = 0; + fTempPerm1122 = 0; + fTempPerm1123 = 0; + fTempPerm1124 = 0; + fTempPerm1125 = 0; + fTempPerm1126 = 0; + fTempPerm1127 = 0; + fTempPerm1128 = 0; + fTempPerm1129 = 0; + fTempPerm1130 = 0; + fTempPerm1131 = 0; + fTempPerm1132 = 0; + fTempPerm1133 = 0; + fTempPerm1134 = 0; + fTempPerm1135 = 0; + fTempPerm1136 = 0; + fTempPerm1137 = 0; + fTempPerm1138 = 0; + fTempPerm1139 = 0; + fTempPerm1140 = 0; + fTempPerm1141 = 0; + fTempPerm1142 = 0; + fTempPerm1143 = 0; + fTempPerm1144 = 0; + fTempPerm1145 = 0; + fTempPerm1146 = 0; + fTempPerm1147 = 0; + fTempPerm1148 = 0; + fTempPerm1149 = 0; + fTempPerm1150 = 0; + fTempPerm1151 = 0; + fTempPerm1152 = 0; + fTempPerm1153 = 0; + fTempPerm1154 = 0; + fTempPerm1155 = 0; + fTempPerm1156 = 0; + fTempPerm1157 = 0; + fTempPerm1158 = 0; + fTempPerm1159 = 0; + fTempPerm1160 = 0; + fTempPerm1161 = 0; + fTempPerm1162 = 0; + fTempPerm1163 = 0; + fTempPerm1164 = 0; + fTempPerm1165 = 0; + fTempPerm1166 = 0; + fTempPerm1167 = 0; + fTempPerm1168 = 0; + fTempPerm1169 = 0; + fTempPerm1170 = 0; + fTempPerm1171 = 0; + fTempPerm1172 = 0; + fTempPerm1173 = 0; + fTempPerm1174 = 0; + fTempPerm1175 = 0; + fTempPerm1176 = 0; + fTempPerm1177 = 0; + fTempPerm1178 = 0; + fTempPerm1179 = 0; + fTempPerm1180 = 0; + fTempPerm1181 = 0; + fTempPerm1182 = 0; + fTempPerm1183 = 0; + fTempPerm1184 = 0; + fTempPerm1185 = 0; + fTempPerm1186 = 0; + fTempPerm1187 = 0; + fTempPerm1188 = 0; + fTempPerm1189 = 0; + fTempPerm1190 = 0; + fTempPerm1191 = 0; + fTempPerm1192 = 0; + fTempPerm1193 = 0; + fTempPerm1194 = 0; + fTempPerm1195 = 0; + fTempPerm1196 = 0; + fTempPerm1197 = 0; + fTempPerm1198 = 0; + fTempPerm1199 = 0; + fTempPerm1200 = 0; + fTempPerm1201 = 0; + fTempPerm1202 = 0; + fTempPerm1203 = 0; + fTempPerm1204 = 0; + fTempPerm1205 = 0; + fTempPerm1206 = 0; + fTempPerm1207 = 0; + fTempPerm1208 = 0; + fTempPerm1209 = 0; + fTempPerm1210 = 0; + fTempPerm1211 = 0; + fTempPerm1212 = 0; + fTempPerm1213 = 0; + fTempPerm1214 = 0; + fTempPerm1215 = 0; + fTempPerm1216 = 0; + fTempPerm1217 = 0; + fTempPerm1218 = 0; + fTempPerm1219 = 0; + fTempPerm1220 = 0; + fTempPerm1221 = 0; + fTempPerm1222 = 0; + fTempPerm1223 = 0; + fTempPerm1224 = 0; + fTempPerm1225 = 0; + fTempPerm1226 = 0; + fTempPerm1227 = 0; + fTempPerm1228 = 0; + fTempPerm1229 = 0; + fTempPerm1230 = 0; + fTempPerm1231 = 0; + fTempPerm1232 = 0; + fTempPerm1233 = 0; + fTempPerm1234 = 0; + fTempPerm1235 = 0; + fTempPerm1236 = 0; + fTempPerm1237 = 0; + fTempPerm1238 = 0; + fTempPerm1239 = 0; + fTempPerm1240 = 0; + fTempPerm1241 = 0; + fTempPerm1242 = 0; + fTempPerm1243 = 0; + fTempPerm1244 = 0; + fTempPerm1245 = 0; + fTempPerm1246 = 0; + fTempPerm1247 = 0; + fTempPerm1248 = 0; + fTempPerm1249 = 0; + fTempPerm1250 = 0; + fTempPerm1251 = 0; + fTempPerm1252 = 0; + fTempPerm1253 = 0; + fTempPerm1254 = 0; + fTempPerm1255 = 0; + fTempPerm1256 = 0; + fTempPerm1257 = 0; + fTempPerm1258 = 0; + fTempPerm1259 = 0; + fTempPerm1260 = 0; + fTempPerm1261 = 0; + fTempPerm1262 = 0; + fTempPerm1263 = 0; + fTempPerm1264 = 0; + fTempPerm1265 = 0; + fTempPerm1266 = 0; + fTempPerm1267 = 0; + fTempPerm1268 = 0; + fTempPerm1269 = 0; + fTempPerm1270 = 0; + fTempPerm1271 = 0; + fTempPerm1272 = 0; + fTempPerm1273 = 0; + fTempPerm1274 = 0; + fTempPerm1275 = 0; + fTempPerm1276 = 0; + fTempPerm1277 = 0; + fTempPerm1278 = 0; + fTempPerm1279 = 0; + fTempPerm1280 = 0; + fTempPerm1281 = 0; + fTempPerm1282 = 0; + fTempPerm1283 = 0; + fTempPerm1284 = 0; + fTempPerm1285 = 0; + fTempPerm1286 = 0; + fTempPerm1287 = 0; + fTempPerm1288 = 0; + fTempPerm1289 = 0; + fTempPerm1290 = 0; + fTempPerm1291 = 0; + fTempPerm1292 = 0; + fTempPerm1293 = 0; + fTempPerm1294 = 0; + fTempPerm1295 = 0; + fTempPerm1296 = 0; + fTempPerm1297 = 0; + fTempPerm1298 = 0; + fTempPerm1299 = 0; + fTempPerm1300 = 0; + fTempPerm1301 = 0; + fTempPerm1302 = 0; + fTempPerm1303 = 0; + fTempPerm1304 = 0; + fTempPerm1305 = 0; + fTempPerm1306 = 0; + fTempPerm1307 = 0; + fTempPerm1308 = 0; + fTempPerm1309 = 0; + fTempPerm1310 = 0; + fTempPerm1311 = 0; + fTempPerm1312 = 0; + fTempPerm1313 = 0; + fTempPerm1314 = 0; + fTempPerm1315 = 0; + fTempPerm1316 = 0; + fTempPerm1317 = 0; + fTempPerm1318 = 0; + fTempPerm1319 = 0; + fTempPerm1320 = 0; + fTempPerm1321 = 0; + fTempPerm1322 = 0; + fTempPerm1323 = 0; + fTempPerm1324 = 0; + fTempPerm1325 = 0; + fTempPerm1326 = 0; + fTempPerm1327 = 0; + fTempPerm1328 = 0; + fTempPerm1329 = 0; + fTempPerm1330 = 0; + fTempPerm1331 = 0; + fTempPerm1332 = 0; + fTempPerm1333 = 0; + fTempPerm1334 = 0; + fTempPerm1335 = 0; + fTempPerm1336 = 0; + fTempPerm1337 = 0; + fTempPerm1338 = 0; + fTempPerm1339 = 0; + fTempPerm1340 = 0; + fTempPerm1341 = 0; + fTempPerm1342 = 0; + fTempPerm1343 = 0; + fTempPerm1344 = 0; + fTempPerm1345 = 0; + fTempPerm1346 = 0; + fTempPerm1347 = 0; + fTempPerm1348 = 0; + fTempPerm1349 = 0; + fTempPerm1350 = 0; + fTempPerm1351 = 0; + fTempPerm1352 = 0; + fTempPerm1353 = 0; + fTempPerm1354 = 0; + fTempPerm1355 = 0; + fTempPerm1356 = 0; + fTempPerm1357 = 0; + fTempPerm1358 = 0; + fTempPerm1359 = 0; + fTempPerm1360 = 0; + fTempPerm1361 = 0; + fTempPerm1362 = 0; + fTempPerm1363 = 0; + fTempPerm1364 = 0; + fTempPerm1365 = 0; + fTempPerm1366 = 0; + fTempPerm1367 = 0; + fTempPerm1368 = 0; + fTempPerm1369 = 0; + fTempPerm1370 = 0; + fTempPerm1371 = 0; + fTempPerm1372 = 0; + fTempPerm1373 = 0; + fTempPerm1374 = 0; + fTempPerm1375 = 0; + fTempPerm1376 = 0; + fTempPerm1377 = 0; + fTempPerm1378 = 0; + fTempPerm1379 = 0; + fTempPerm1380 = 0; + fTempPerm1381 = 0; + fTempPerm1382 = 0; + fTempPerm1383 = 0; + fTempPerm1384 = 0; + fTempPerm1385 = 0; + fTempPerm1386 = 0; + fTempPerm1387 = 0; + fTempPerm1388 = 0; + fTempPerm1389 = 0; + fTempPerm1390 = 0; + fTempPerm1391 = 0; + fTempPerm1392 = 0; + fTempPerm1393 = 0; + fTempPerm1394 = 0; + fTempPerm1395 = 0; + fTempPerm1396 = 0; + fTempPerm1397 = 0; + fTempPerm1398 = 0; + fTempPerm1399 = 0; + fTempPerm1400 = 0; + fTempPerm1401 = 0; + fTempPerm1402 = 0; + fTempPerm1403 = 0; + fTempPerm1404 = 0; + fTempPerm1405 = 0; + fTempPerm1406 = 0; + fTempPerm1407 = 0; + fTempPerm1408 = 0; + fTempPerm1409 = 0; + fTempPerm1410 = 0; + fTempPerm1411 = 0; + fTempPerm1412 = 0; + fTempPerm1413 = 0; + fTempPerm1414 = 0; + fTempPerm1415 = 0; + fTempPerm1416 = 0; + fTempPerm1417 = 0; + fTempPerm1418 = 0; + fTempPerm1419 = 0; + fTempPerm1420 = 0; + fTempPerm1421 = 0; + fTempPerm1422 = 0; + fTempPerm1423 = 0; + fTempPerm1424 = 0; + fTempPerm1425 = 0; + fTempPerm1426 = 0; + fTempPerm1427 = 0; + fTempPerm1428 = 0; + fTempPerm1429 = 0; + fTempPerm1430 = 0; + fTempPerm1431 = 0; + fTempPerm1432 = 0; + fTempPerm1433 = 0; + fTempPerm1434 = 0; + fTempPerm1435 = 0; + fTempPerm1436 = 0; + fTempPerm1437 = 0; + fTempPerm1438 = 0; + fTempPerm1439 = 0; + fTempPerm1440 = 0; + fTempPerm1441 = 0; + fTempPerm1442 = 0; + fTempPerm1443 = 0; + fTempPerm1444 = 0; + fTempPerm1445 = 0; + fTempPerm1446 = 0; + fTempPerm1447 = 0; + fTempPerm1448 = 0; + fTempPerm1449 = 0; + fTempPerm1450 = 0; + fTempPerm1451 = 0; + fTempPerm1452 = 0; + fTempPerm1453 = 0; + fTempPerm1454 = 0; + fTempPerm1455 = 0; + fTempPerm1456 = 0; + fTempPerm1457 = 0; + fTempPerm1458 = 0; + fTempPerm1459 = 0; + fTempPerm1460 = 0; + fTempPerm1461 = 0; + fTempPerm1462 = 0; + fTempPerm1463 = 0; + fTempPerm1464 = 0; + fTempPerm1465 = 0; + fTempPerm1466 = 0; + fTempPerm1467 = 0; + fTempPerm1468 = 0; + fTempPerm1469 = 0; + fTempPerm1470 = 0; + fTempPerm1471 = 0; + fTempPerm1472 = 0; + fTempPerm1473 = 0; + fTempPerm1474 = 0; + fTempPerm1475 = 0; + fTempPerm1476 = 0; + fTempPerm1477 = 0; + fTempPerm1478 = 0; + fTempPerm1479 = 0; + fTempPerm1480 = 0; + fTempPerm1481 = 0; + fTempPerm1482 = 0; + fTempPerm1483 = 0; + fTempPerm1484 = 0; + fTempPerm1485 = 0; + fTempPerm1486 = 0; + fTempPerm1487 = 0; + fTempPerm1488 = 0; + fTempPerm1489 = 0; + fTempPerm1490 = 0; + fTempPerm1491 = 0; + fTempPerm1492 = 0; + fTempPerm1493 = 0; + fTempPerm1494 = 0; + fTempPerm1495 = 0; + fTempPerm1496 = 0; + fTempPerm1497 = 0; + fTempPerm1498 = 0; + fTempPerm1499 = 0; + fTempPerm1500 = 0; + fTempPerm1501 = 0; + fTempPerm1502 = 0; + fTempPerm1503 = 0; + fTempPerm1504 = 0; + fTempPerm1505 = 0; + fTempPerm1506 = 0; + fTempPerm1507 = 0; + fTempPerm1508 = 0; + fTempPerm1509 = 0; + fTempPerm1510 = 0; + fTempPerm1511 = 0; + fTempPerm1512 = 0; + fTempPerm1513 = 0; + fTempPerm1514 = 0; + fTempPerm1515 = 0; + fTempPerm1516 = 0; + fTempPerm1517 = 0; + fTempPerm1518 = 0; + fTempPerm1519 = 0; + fTempPerm1520 = 0; + fTempPerm1521 = 0; + fTempPerm1522 = 0; + fTempPerm1523 = 0; + fTempPerm1524 = 0; + fTempPerm1525 = 0; + fTempPerm1526 = 0; + fTempPerm1527 = 0; + fTempPerm1528 = 0; + fTempPerm1529 = 0; + fTempPerm1530 = 0; + fTempPerm1531 = 0; + fTempPerm1532 = 0; + fTempPerm1533 = 0; + fTempPerm1534 = 0; + fTempPerm1535 = 0; + fTempPerm1536 = 0; + fTempPerm1537 = 0; + fTempPerm1538 = 0; + fTempPerm1539 = 0; + fTempPerm1540 = 0; + fTempPerm1541 = 0; + fTempPerm1542 = 0; + fTempPerm1543 = 0; + fTempPerm1544 = 0; + fTempPerm1545 = 0; + fTempPerm1546 = 0; + fTempPerm1547 = 0; + fTempPerm1548 = 0; + fTempPerm1549 = 0; + fTempPerm1550 = 0; + fTempPerm1551 = 0; + fTempPerm1552 = 0; + fTempPerm1553 = 0; + fTempPerm1554 = 0; + fTempPerm1555 = 0; + fTempPerm1556 = 0; + fTempPerm1557 = 0; + fTempPerm1558 = 0; + fTempPerm1559 = 0; + fTempPerm1560 = 0; + fTempPerm1561 = 0; + fTempPerm1562 = 0; + fTempPerm1563 = 0; + fTempPerm1564 = 0; + fTempPerm1565 = 0; + fTempPerm1566 = 0; + fTempPerm1567 = 0; + fTempPerm1568 = 0; + fTempPerm1569 = 0; + fTempPerm1570 = 0; + fTempPerm1571 = 0; + fTempPerm1572 = 0; + fTempPerm1573 = 0; + fTempPerm1574 = 0; + fTempPerm1575 = 0; + fTempPerm1576 = 0; + fTempPerm1577 = 0; + fTempPerm1578 = 0; + fTempPerm1579 = 0; + fTempPerm1580 = 0; + fTempPerm1581 = 0; + fTempPerm1582 = 0; + fTempPerm1583 = 0; + fTempPerm1584 = 0; + fTempPerm1585 = 0; + fTempPerm1586 = 0; + fTempPerm1587 = 0; + fTempPerm1588 = 0; + fTempPerm1589 = 0; + fTempPerm1590 = 0; + fTempPerm1591 = 0; + fTempPerm1592 = 0; + fTempPerm1593 = 0; + fTempPerm1594 = 0; + fTempPerm1595 = 0; + fTempPerm1596 = 0; + fTempPerm1597 = 0; + fTempPerm1598 = 0; + fTempPerm1599 = 0; + fTempPerm1600 = 0; + fTempPerm1601 = 0; + fTempPerm1602 = 0; + fTempPerm1603 = 0; + fTempPerm1604 = 0; + fTempPerm1605 = 0; + fTempPerm1606 = 0; + fTempPerm1607 = 0; + fTempPerm1608 = 0; + fTempPerm1609 = 0; + fTempPerm1610 = 0; + fTempPerm1611 = 0; + fTempPerm1612 = 0; + fTempPerm1613 = 0; + fTempPerm1614 = 0; + fTempPerm1615 = 0; + fTempPerm1616 = 0; + fTempPerm1617 = 0; + fTempPerm1618 = 0; + fTempPerm1619 = 0; + fTempPerm1620 = 0; + fTempPerm1621 = 0; + fTempPerm1622 = 0; + fTempPerm1623 = 0; + fTempPerm1624 = 0; + fTempPerm1625 = 0; + fTempPerm1626 = 0; + fTempPerm1627 = 0; + fTempPerm1628 = 0; + fTempPerm1629 = 0; + fTempPerm1630 = 0; + fTempPerm1631 = 0; + fTempPerm1632 = 0; + fTempPerm1633 = 0; + fTempPerm1634 = 0; + fTempPerm1635 = 0; + fTempPerm1636 = 0; + fTempPerm1637 = 0; + fTempPerm1638 = 0; + fTempPerm1639 = 0; + fTempPerm1640 = 0; + fTempPerm1641 = 0; + fTempPerm1642 = 0; + fTempPerm1643 = 0; + fTempPerm1644 = 0; + fTempPerm1645 = 0; + fTempPerm1646 = 0; + fTempPerm1647 = 0; + fTempPerm1648 = 0; + fTempPerm1649 = 0; + fTempPerm1650 = 0; + fTempPerm1651 = 0; + fTempPerm1652 = 0; + fTempPerm1653 = 0; + fTempPerm1654 = 0; + fTempPerm1655 = 0; + fTempPerm1656 = 0; + fTempPerm1657 = 0; + fTempPerm1658 = 0; + fTempPerm1659 = 0; + fTempPerm1660 = 0; + fTempPerm1661 = 0; + fTempPerm1662 = 0; + fTempPerm1663 = 0; + fTempPerm1664 = 0; + fTempPerm1665 = 0; + fTempPerm1666 = 0; + fTempPerm1667 = 0; + fTempPerm1668 = 0; + fTempPerm1669 = 0; + fTempPerm1670 = 0; + fTempPerm1671 = 0; + fTempPerm1672 = 0; + fTempPerm1673 = 0; + fTempPerm1674 = 0; + fTempPerm1675 = 0; + fTempPerm1676 = 0; + fTempPerm1677 = 0; + fTempPerm1678 = 0; + fTempPerm1679 = 0; + fTempPerm1680 = 0; + fTempPerm1681 = 0; + fTempPerm1682 = 0; + fTempPerm1683 = 0; + fTempPerm1684 = 0; + fTempPerm1685 = 0; + fTempPerm1686 = 0; + fTempPerm1687 = 0; + fTempPerm1688 = 0; + fTempPerm1689 = 0; + fTempPerm1690 = 0; + fTempPerm1691 = 0; + fTempPerm1692 = 0; + fTempPerm1693 = 0; + fTempPerm1694 = 0; + fTempPerm1695 = 0; + fTempPerm1696 = 0; + fTempPerm1697 = 0; + fTempPerm1698 = 0; + fTempPerm1699 = 0; + fTempPerm1700 = 0; + fTempPerm1701 = 0; + fTempPerm1702 = 0; + fTempPerm1703 = 0; + fTempPerm1704 = 0; + fTempPerm1705 = 0; + fTempPerm1706 = 0; + fTempPerm1707 = 0; + fTempPerm1708 = 0; + fTempPerm1709 = 0; + fTempPerm1710 = 0; + fTempPerm1711 = 0; + fTempPerm1712 = 0; + fTempPerm1713 = 0; + fTempPerm1714 = 0; + fTempPerm1715 = 0; + fTempPerm1716 = 0; + fTempPerm1717 = 0; + fTempPerm1718 = 0; + fTempPerm1719 = 0; + fTempPerm1720 = 0; + fTempPerm1721 = 0; + fTempPerm1722 = 0; + fTempPerm1723 = 0; + fTempPerm1724 = 0; + fTempPerm1725 = 0; + fTempPerm1726 = 0; + fTempPerm1727 = 0; + fTempPerm1728 = 0; + fTempPerm1729 = 0; + fTempPerm1730 = 0; + fTempPerm1731 = 0; + fTempPerm1732 = 0; + fTempPerm1733 = 0; + fTempPerm1734 = 0; + fTempPerm1735 = 0; + fTempPerm1736 = 0; + fTempPerm1737 = 0; + fTempPerm1738 = 0; + fTempPerm1739 = 0; + fTempPerm1740 = 0; + fTempPerm1741 = 0; + fTempPerm1742 = 0; + fTempPerm1743 = 0; + fTempPerm1744 = 0; + fTempPerm1745 = 0; + fTempPerm1746 = 0; + fTempPerm1747 = 0; + fTempPerm1748 = 0; + fTempPerm1749 = 0; + fTempPerm1750 = 0; + fTempPerm1751 = 0; + fTempPerm1752 = 0; + fTempPerm1753 = 0; + fTempPerm1754 = 0; + fTempPerm1755 = 0; + fTempPerm1756 = 0; + fTempPerm1757 = 0; + fTempPerm1758 = 0; + fTempPerm1759 = 0; + fTempPerm1760 = 0; + fTempPerm1761 = 0; + fTempPerm1762 = 0; + fTempPerm1763 = 0; + fTempPerm1764 = 0; + fTempPerm1765 = 0; + fTempPerm1766 = 0; + fTempPerm1767 = 0; + fTempPerm1768 = 0; + fTempPerm1769 = 0; + fTempPerm1770 = 0; + fTempPerm1771 = 0; + fTempPerm1772 = 0; + fTempPerm1773 = 0; + fTempPerm1774 = 0; + fTempPerm1775 = 0; + fTempPerm1776 = 0; + fTempPerm1777 = 0; + fTempPerm1778 = 0; + fTempPerm1779 = 0; + fTempPerm1780 = 0; + fTempPerm1781 = 0; + fTempPerm1782 = 0; + fTempPerm1783 = 0; + fTempPerm1784 = 0; + fTempPerm1785 = 0; + fTempPerm1786 = 0; + fTempPerm1787 = 0; + fTempPerm1788 = 0; + fTempPerm1789 = 0; + fTempPerm1790 = 0; + fTempPerm1791 = 0; + fTempPerm1792 = 0; + fTempPerm1793 = 0; + fTempPerm1794 = 0; + fTempPerm1795 = 0; + fTempPerm1796 = 0; + fTempPerm1797 = 0; + fTempPerm1798 = 0; + fTempPerm1799 = 0; + fTempPerm1800 = 0; + fTempPerm1801 = 0; + fTempPerm1802 = 0; + fTempPerm1803 = 0; + fTempPerm1804 = 0; + fTempPerm1805 = 0; + fTempPerm1806 = 0; + fTempPerm1807 = 0; + fTempPerm1808 = 0; + fTempPerm1809 = 0; + fTempPerm1810 = 0; + fTempPerm1811 = 0; + fTempPerm1812 = 0; + fTempPerm1813 = 0; + fTempPerm1814 = 0; + fTempPerm1815 = 0; + fTempPerm1816 = 0; + fTempPerm1817 = 0; + fTempPerm1818 = 0; + fTempPerm1819 = 0; + fTempPerm1820 = 0; + fTempPerm1821 = 0; + fTempPerm1822 = 0; + fTempPerm1823 = 0; + fTempPerm1824 = 0; + fTempPerm1825 = 0; + fTempPerm1826 = 0; + fTempPerm1827 = 0; + fTempPerm1828 = 0; + fTempPerm1829 = 0; + fTempPerm1830 = 0; + fTempPerm1831 = 0; + fTempPerm1832 = 0; + fTempPerm1833 = 0; + fTempPerm1834 = 0; + fTempPerm1835 = 0; + fTempPerm1836 = 0; + fTempPerm1837 = 0; + fTempPerm1838 = 0; + fTempPerm1839 = 0; + fTempPerm1840 = 0; + fTempPerm1841 = 0; + fTempPerm1842 = 0; + fTempPerm1843 = 0; + fTempPerm1844 = 0; + fTempPerm1845 = 0; + fTempPerm1846 = 0; + fTempPerm1847 = 0; + fTempPerm1848 = 0; + fTempPerm1849 = 0; + fTempPerm1850 = 0; + fTempPerm1851 = 0; + fTempPerm1852 = 0; + fTempPerm1853 = 0; + fTempPerm1854 = 0; + fTempPerm1855 = 0; + fTempPerm1856 = 0; + fTempPerm1857 = 0; + fTempPerm1858 = 0; + fTempPerm1859 = 0; + fTempPerm1860 = 0; + fTempPerm1861 = 0; + fTempPerm1862 = 0; + fTempPerm1863 = 0; + fTempPerm1864 = 0; + fTempPerm1865 = 0; + fTempPerm1866 = 0; + fTempPerm1867 = 0; + fTempPerm1868 = 0; + fTempPerm1869 = 0; + fTempPerm1870 = 0; + fTempPerm1871 = 0; + fTempPerm1872 = 0; + fTempPerm1873 = 0; + fTempPerm1874 = 0; + fTempPerm1875 = 0; + fTempPerm1876 = 0; + fTempPerm1877 = 0; + fTempPerm1878 = 0; + fTempPerm1879 = 0; + fTempPerm1880 = 0; + fTempPerm1881 = 0; + fTempPerm1882 = 0; + fTempPerm1883 = 0; + fTempPerm1884 = 0; + fTempPerm1885 = 0; + fTempPerm1886 = 0; + fTempPerm1887 = 0; + fTempPerm1888 = 0; + fTempPerm1889 = 0; + fTempPerm1890 = 0; + fTempPerm1891 = 0; + fTempPerm1892 = 0; + fTempPerm1893 = 0; + fTempPerm1894 = 0; + fTempPerm1895 = 0; + fTempPerm1896 = 0; + fTempPerm1897 = 0; + fTempPerm1898 = 0; + fTempPerm1899 = 0; + fTempPerm1900 = 0; + fTempPerm1901 = 0; + fTempPerm1902 = 0; + fTempPerm1903 = 0; + fTempPerm1904 = 0; + fTempPerm1905 = 0; + fTempPerm1906 = 0; + fTempPerm1907 = 0; + fTempPerm1908 = 0; + fTempPerm1909 = 0; + fTempPerm1910 = 0; + fTempPerm1911 = 0; + fTempPerm1912 = 0; + fTempPerm1913 = 0; + fTempPerm1914 = 0; + fTempPerm1915 = 0; + fTempPerm1916 = 0; + fTempPerm1917 = 0; + fTempPerm1918 = 0; + fTempPerm1919 = 0; + fTempPerm1920 = 0; + fTempPerm1921 = 0; + fTempPerm1922 = 0; + fTempPerm1923 = 0; + fTempPerm1924 = 0; + fTempPerm1925 = 0; + fTempPerm1926 = 0; + fTempPerm1927 = 0; + fTempPerm1928 = 0; + fTempPerm1929 = 0; + fTempPerm1930 = 0; + fTempPerm1931 = 0; + fTempPerm1932 = 0; + fTempPerm1933 = 0; + fTempPerm1934 = 0; + fTempPerm1935 = 0; + fTempPerm1936 = 0; + fTempPerm1937 = 0; + fTempPerm1938 = 0; + fTempPerm1939 = 0; + fTempPerm1940 = 0; + fTempPerm1941 = 0; + fTempPerm1942 = 0; + fTempPerm1943 = 0; + fTempPerm1944 = 0; + fTempPerm1945 = 0; + fTempPerm1946 = 0; + fTempPerm1947 = 0; + fTempPerm1948 = 0; + fTempPerm1949 = 0; + fTempPerm1950 = 0; + fTempPerm1951 = 0; + fTempPerm1952 = 0; + fTempPerm1953 = 0; + fTempPerm1954 = 0; + fTempPerm1955 = 0; + fTempPerm1956 = 0; + fTempPerm1957 = 0; + fTempPerm1958 = 0; + fTempPerm1959 = 0; + fTempPerm1960 = 0; + fTempPerm1961 = 0; + fTempPerm1962 = 0; + fTempPerm1963 = 0; + fTempPerm1964 = 0; + fTempPerm1965 = 0; + fTempPerm1966 = 0; + fTempPerm1967 = 0; + fTempPerm1968 = 0; + fTempPerm1969 = 0; + fTempPerm1970 = 0; + fTempPerm1971 = 0; + fTempPerm1972 = 0; + fTempPerm1973 = 0; + fTempPerm1974 = 0; + fTempPerm1975 = 0; + fTempPerm1976 = 0; + fTempPerm1977 = 0; + fTempPerm1978 = 0; + fTempPerm1979 = 0; + fTempPerm1980 = 0; + fTempPerm1981 = 0; + fTempPerm1982 = 0; + fTempPerm1983 = 0; + fTempPerm1984 = 0; + fTempPerm1985 = 0; + fTempPerm1986 = 0; + fTempPerm1987 = 0; + fTempPerm1988 = 0; + fTempPerm1989 = 0; + fTempPerm1990 = 0; + fTempPerm1991 = 0; + fTempPerm1992 = 0; + fTempPerm1993 = 0; + fTempPerm1994 = 0; + fTempPerm1995 = 0; + fTempPerm1996 = 0; + fTempPerm1997 = 0; + fTempPerm1998 = 0; + fTempPerm1999 = 0; + fTempPerm2000 = 0; + fTempPerm2001 = 0; + fTempPerm2002 = 0; + fTempPerm2003 = 0; + fTempPerm2004 = 0; + fTempPerm2005 = 0; + fTempPerm2006 = 0; + fTempPerm2007 = 0; + fTempPerm2008 = 0; + fTempPerm2009 = 0; + fTempPerm2010 = 0; + fTempPerm2011 = 0; + fTempPerm2012 = 0; + fTempPerm2013 = 0; + fTempPerm2014 = 0; + fTempPerm2015 = 0; + fTempPerm2016 = 0; + fTempPerm2017 = 0; + fTempPerm2018 = 0; + fTempPerm2019 = 0; + fTempPerm2020 = 0; + fTempPerm2021 = 0; + fTempPerm2022 = 0; + fTempPerm2023 = 0; + fTempPerm2024 = 0; + fTempPerm2025 = 0; + fTempPerm2026 = 0; + fTempPerm2027 = 0; + fTempPerm2028 = 0; + fTempPerm2029 = 0; + fTempPerm2030 = 0; + fTempPerm2031 = 0; + fTempPerm2032 = 0; + fTempPerm2033 = 0; + fTempPerm2034 = 0; + fTempPerm2035 = 0; + fTempPerm2036 = 0; + fTempPerm2037 = 0; + fTempPerm2038 = 0; + fTempPerm2039 = 0; + fTempPerm2040 = 0; + fTempPerm2041 = 0; + fTempPerm2042 = 0; + fTempPerm2043 = 0; + fTempPerm2044 = 0; + fTempPerm2045 = 0; + fTempPerm2046 = 0; + fTempPerm2047 = 0; + fTempPerm2048 = 0; + fTempPerm2049 = 0; + } + virtual void instanceResetUserInterface() { + fslider0 = 0.0; + fslider1 = 0.0; + } + virtual void instanceClear() { + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + IOTA = 0; + for (int i=0; i<128; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<128; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<128; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<128; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<128; i++) fVec4[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<128; i++) fVec5[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<128; i++) fVec6[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<128; i++) fVec7[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<128; i++) fVec8[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<128; i++) fVec9[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<128; i++) fVec10[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<128; i++) fVec11[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<128; i++) fVec12[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<128; i++) fVec13[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<128; i++) fVec14[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<128; i++) fVec15[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecoderLebedev50Binaural3"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad111186b0", &fbargraph15, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad11107370", &fbargraph14, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad110a8080", &fbargraph13, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad110a3410", &fbargraph12, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad1109ee20", &fbargraph11, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad11085370", &fbargraph10, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad1107f120", &fbargraph9, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad11079510", &fbargraph8, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad11074f80", &fbargraph7, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad110710d0", &fbargraph6, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad10cf2310", &fbargraph5, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad10cee050", &fbargraph4, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad10cd5e60", &fbargraph3, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad10cd0e20", &fbargraph2, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad10ccae30", &fbargraph1, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fad10cc6300", &fbargraph0, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fslider1, "1", ""); + ui_interface->declare(&fslider1, "osc", "/levelin -10 10"); + ui_interface->declare(&fslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 1e+01, 0.1); + ui_interface->declare(&fslider0, "2", ""); + ui_interface->declare(&fslider0, "osc", "/levelout -10 10"); + ui_interface->declare(&fslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 1e+01, 0.1); + ui_interface->closeBox(); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("Left"); + ui_interface->declare(&fbargraph16, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x7fad10eaba10", &fbargraph16, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Right"); + ui_interface->declare(&fbargraph17, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x7fad10f28cb0", &fbargraph17, -7e+01, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); + double fSlow1 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + //LoopGraphScalar + for (int i=0; igetNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if !defined(NDEBUG) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if !defined(NDEBUG) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if !defined(NDEBUG) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // NDEBUG +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF diff --git a/source/HOAUGens/HOAEncEigenMike1.cpp b/source/HOAUGens/HOAEncEigenMike1.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncEigenMike2.cpp b/source/HOAUGens/HOAEncEigenMike2.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncEigenMike3.cpp b/source/HOAUGens/HOAEncEigenMike3.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncEigenMike4.cpp b/source/HOAUGens/HOAEncEigenMike4.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev061.cpp b/source/HOAUGens/HOAEncLebedev061.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev261.cpp b/source/HOAUGens/HOAEncLebedev261.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev262.cpp b/source/HOAUGens/HOAEncLebedev262.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev263.cpp b/source/HOAUGens/HOAEncLebedev263.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev501.cpp b/source/HOAUGens/HOAEncLebedev501.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev502.cpp b/source/HOAUGens/HOAEncLebedev502.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev503.cpp b/source/HOAUGens/HOAEncLebedev503.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev504.cpp b/source/HOAUGens/HOAEncLebedev504.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncLebedev505.cpp b/source/HOAUGens/HOAEncLebedev505.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAEncoder1.cpp b/source/HOAUGens/HOAEncoder1.cpp old mode 100755 new mode 100644 index 55b3d62ac5..9eff659cf2 --- a/source/HOAUGens/HOAEncoder1.cpp +++ b/source/HOAUGens/HOAEncoder1.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.12 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,19 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); -double sin(double dummy0); -double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -622,15 +641,16 @@ class mydsp : public dsp { double fConst1; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fVslider0; - FAUSTFLOAT fVslider1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; - FAUSTFLOAT fVslider2; - FAUSTFLOAT fVslider3; double fConst2; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; double fConst3; + double fConst4; double fRec5[2]; double fRec4[2]; double fRec3[2]; @@ -648,31 +668,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncoder1"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -734,20 +754,21 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); - fConst2 = (340.0 / fConst0); - fConst3 = (170.0 / fConst0); + fConst2 = (1.5957691216057308 * (sqrt((3.0 * (double(tgamma(1.0)) / double(tgamma(3.0))))) * double(tgamma(1.5)))); + fConst3 = (340.0 / fConst0); + fConst4 = (170.0 / fConst0); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fVslider0 = FAUSTFLOAT(2.0); - fVslider1 = FAUSTFLOAT(0.0); - fVslider2 = FAUSTFLOAT(0.0); - fVslider3 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -800,51 +821,59 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder1"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fVslider1, "1", ""); - ui_interface->declare(&fVslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fVslider2, "3", ""); - ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider3, "4", ""); - ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); - ui_interface->declare(&fVslider0, "5", ""); - ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); - ui_interface->declare(&fEntry0, "6", ""); - ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); - ui_interface->declare(0, "7", ""); - ui_interface->openVerticalBox("Outputs"); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27e0c80", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7ff8dc1b5250", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27f2590", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7ff8dc1c6e30", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27f8350", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7ff8dc1cbb50", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27fe2e0", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7ff8dc1d0c60", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -859,42 +888,43 @@ class mydsp : public dsp { FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; double fSlow0 = double(fCheckbox0); - double fSlow1 = double(fEntry0); - double fSlow2 = double(fVslider0); - double fSlow3 = (1.0 - fSlow0); - double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); - double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow6 = double(fVslider2); - double fSlow7 = double(fVslider3); - double fSlow8 = cos(fSlow7); - double fSlow9 = (1.7320508075688772 * (sin(fSlow6) * fSlow8)); - double fSlow10 = ((fConst3 / fSlow2) + 1.0); - double fSlow11 = (fConst2 / (fSlow10 * fSlow2)); - double fSlow12 = (1.0 / ((fConst3 / fSlow1) + 1.0)); - double fSlow13 = (((fSlow10 * fSlow0) * fSlow1) / fSlow2); - double fSlow14 = (fConst2 / fSlow1); - double fSlow15 = (1.7320508075688772 * sin(fSlow7)); - double fSlow16 = (1.7320508075688772 * (cos(fSlow6) * fSlow8)); + double fSlow1 = (1.0 - fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fHslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(double(fHslider3)); + double fSlow9 = pow((1.0 - mydsp_faustpower2_f(fSlow8)), 0.5); + double fSlow10 = (fConst2 * (sin(fSlow7) * fSlow9)); + double fSlow11 = ((fConst4 / fSlow4) + 1.0); + double fSlow12 = (fConst3 / (fSlow4 * fSlow11)); + double fSlow13 = (1.0 / ((fConst4 / fSlow2) + 1.0)); + double fSlow14 = ((fSlow3 * fSlow11) / fSlow4); + double fSlow15 = (fConst3 / fSlow2); + double fSlow16 = (1.7320508075688772 * fSlow8); + double fSlow17 = (fConst2 * (cos(fSlow7) * fSlow9)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); - double fTemp0 = (fRec1[0] * double(input0[i])); - double fTemp1 = (fSlow4 * fTemp0); + fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); + double fTemp0 = (double(input0[i]) * fRec1[0]); + double fTemp1 = (fSlow5 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow12 * ((fSlow13 * fTemp0) - (fSlow14 * fRec5[0]))); + fRec4[0] = (fSlow13 * ((fSlow14 * fTemp0) - (fSlow15 * fRec5[0]))); fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = ((fSlow11 * (fRec3[0] - fRec4[0])) + (fRec4[0] + (fSlow3 * fTemp0))); - double fTemp3 = (fSlow9 * fTemp2); + double fTemp2 = ((fSlow12 * (fRec3[0] - fRec4[0])) + (fRec4[0] + (fSlow1 * fTemp0))); + double fTemp3 = (fSlow10 * fTemp2); fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec2[0]); output1[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = (fSlow15 * fTemp2); + double fTemp4 = (fSlow16 * fTemp2); fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph2 = FAUSTFLOAT(fRec6[0]); output2[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow16 * fTemp2); + double fTemp5 = (fSlow17 * fTemp2); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph3 = FAUSTFLOAT(fRec7[0]); output3[i] = FAUSTFLOAT(fTemp5); @@ -914,7 +944,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1243,6 +1272,12 @@ FAUST_EXPORT void load(InterfaceTable* inTable) #endif // NDEBUG } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncoder2.cpp b/source/HOAUGens/HOAEncoder2.cpp old mode 100755 new mode 100644 index 2066088b89..67949cf1e1 --- a/source/HOAUGens/HOAEncoder2.cpp +++ b/source/HOAUGens/HOAEncoder2.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder2" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.12 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,15 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -616,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -626,15 +641,18 @@ class mydsp : public dsp { double fConst1; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fVslider0; - FAUSTFLOAT fVslider1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; - FAUSTFLOAT fVslider2; - FAUSTFLOAT fVslider3; double fConst2; double fConst3; + double fConst4; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + double fConst5; + double fConst6; double fRec5[2]; double fRec4[2]; double fRec3[2]; @@ -644,22 +662,26 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph2; double fRec7[2]; FAUSTFLOAT fVbargraph3; - double fConst4; - double fConst5; - double fRec11[2]; - double fRec12[2]; + double fConst7; + double fConst8; + double fConst9; + double fConst10; double fRec10[2]; + double fRec11[2]; double fRec9[2]; + double fRec12[2]; double fVec0[2]; double fRec13[2]; double fRec8[2]; FAUSTFLOAT fVbargraph4; + double fConst11; double fRec14[2]; FAUSTFLOAT fVbargraph5; double fRec15[2]; FAUSTFLOAT fVbargraph6; double fRec16[2]; FAUSTFLOAT fVbargraph7; + double fConst12; double fRec17[2]; FAUSTFLOAT fVbargraph8; @@ -670,31 +692,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncoder2"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -776,22 +798,29 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); - fConst2 = (340.0 / fConst0); - fConst3 = (170.0 / fConst0); - fConst4 = (510.0 / fConst0); - fConst5 = (1020.0 / fConst0); + fConst2 = double(tgamma(1.0)); + fConst3 = double(tgamma(1.5)); + fConst4 = (1.5957691216057308 * (sqrt((3.0 * (fConst2 / double(tgamma(3.0))))) * fConst3)); + fConst5 = (340.0 / fConst0); + fConst6 = (170.0 / fConst0); + fConst7 = (sqrt((5.0 * (fConst2 / double(tgamma(5.0))))) * double(tgamma(2.5))); + fConst8 = (6.3830764864229232 * fConst7); + fConst9 = (510.0 / fConst0); + fConst10 = (1020.0 / fConst0); + fConst11 = (4.7873073648171927 * (fConst3 * sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))))); + fConst12 = (3.1915382432114616 * fConst7); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fVslider0 = FAUSTFLOAT(2.0); - fVslider1 = FAUSTFLOAT(0.0); - fVslider2 = FAUSTFLOAT(0.0); - fVslider3 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -829,19 +858,19 @@ class mydsp : public dsp { } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec11[l8] = 0.0; + fRec10[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec11[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec9[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec9[l11] = 0.0; + fRec12[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -888,73 +917,81 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder2"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fVslider1, "1", ""); - ui_interface->declare(&fVslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fVslider2, "3", ""); - ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider3, "4", ""); - ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); - ui_interface->declare(&fVslider0, "5", ""); - ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); - ui_interface->declare(&fEntry0, "6", ""); - ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); - ui_interface->declare(0, "7", ""); - ui_interface->openVerticalBox("Outputs"); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3182330", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a8440300", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3194480", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a8452f80", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x319a450", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a8457ca0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31a0600", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a845cf90", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31b7830", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a8471340", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31bdd00", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a8477b20", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31c4670", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a847ce20", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31ca380", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a8481e20", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31d05b0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fc3a8487cc0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -974,94 +1011,93 @@ class mydsp : public dsp { FAUSTFLOAT* output7 = outputs[7]; FAUSTFLOAT* output8 = outputs[8]; double fSlow0 = double(fCheckbox0); - double fSlow1 = double(fEntry0); - double fSlow2 = double(fVslider0); - double fSlow3 = (1.0 - fSlow0); - double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); - double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow6 = double(fVslider2); - double fSlow7 = sin(fSlow6); - double fSlow8 = double(fVslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (1.7320508075688772 * (fSlow7 * fSlow9)); - double fSlow11 = (fConst3 / fSlow2); - double fSlow12 = (fSlow11 + 1.0); - double fSlow13 = (fConst2 / (fSlow12 * fSlow2)); - double fSlow14 = (fConst3 / fSlow1); - double fSlow15 = (1.0 / (fSlow14 + 1.0)); - double fSlow16 = (((fSlow12 * fSlow0) * fSlow1) / fSlow2); - double fSlow17 = (fConst2 / fSlow1); - double fSlow18 = sin(fSlow8); - double fSlow19 = (1.7320508075688772 * fSlow18); - double fSlow20 = cos(fSlow6); - double fSlow21 = (1.7320508075688772 * (fSlow20 * fSlow9)); - double fSlow22 = (2.0 * fSlow6); - double fSlow23 = mydsp_faustpower2_f(fSlow9); - double fSlow24 = (1.9364916731037085 * (sin(fSlow22) * fSlow23)); - double fSlow25 = mydsp_faustpower2_f(fSlow11); - double fSlow26 = (((fConst4 / fSlow2) + (3.0 * fSlow25)) + 1.0); - double fSlow27 = (1.0 / fSlow26); - double fSlow28 = (12.0 * fSlow25); - double fSlow29 = ((fConst5 / fSlow2) + fSlow28); - double fSlow30 = mydsp_faustpower2_f(fSlow14); - double fSlow31 = (1.0 / (((fConst4 / fSlow1) + (3.0 * fSlow30)) + 1.0)); - double fSlow32 = (((fSlow26 * fSlow0) * fSlow1) / fSlow2); - double fSlow33 = (12.0 * fSlow30); - double fSlow34 = (fSlow33 + (fConst5 / fSlow1)); - double fSlow35 = sin((2.0 * fSlow8)); - double fSlow36 = (1.9364916731037085 * (fSlow7 * fSlow35)); - double fSlow37 = (1.1180339887498949 * ((3.0 * mydsp_faustpower2_f(fSlow18)) + -1.0)); - double fSlow38 = (1.9364916731037085 * (fSlow20 * fSlow35)); - double fSlow39 = (1.9364916731037085 * (cos(fSlow22) * fSlow23)); + double fSlow1 = (1.0 - fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fHslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = sin(double(fHslider3)); + double fSlow10 = mydsp_faustpower2_f(fSlow9); + double fSlow11 = (1.0 - fSlow10); + double fSlow12 = pow(fSlow11, 0.5); + double fSlow13 = (fConst4 * (fSlow8 * fSlow12)); + double fSlow14 = (fConst6 / fSlow4); + double fSlow15 = (fSlow14 + 1.0); + double fSlow16 = (fConst5 / (fSlow4 * fSlow15)); + double fSlow17 = (fConst6 / fSlow2); + double fSlow18 = (1.0 / (fSlow17 + 1.0)); + double fSlow19 = ((fSlow3 * fSlow15) / fSlow4); + double fSlow20 = (fConst5 / fSlow2); + double fSlow21 = (1.7320508075688772 * fSlow9); + double fSlow22 = cos(fSlow7); + double fSlow23 = (fConst4 * (fSlow22 * fSlow12)); + double fSlow24 = (fConst8 * ((fSlow22 * fSlow11) * fSlow8)); + double fSlow25 = mydsp_faustpower2_f(fSlow17); + double fSlow26 = (1.0 / (((fConst9 / fSlow2) + (3.0 * fSlow25)) + 1.0)); + double fSlow27 = mydsp_faustpower2_f(fSlow14); + double fSlow28 = (((fConst9 / fSlow4) + (3.0 * fSlow27)) + 1.0); + double fSlow29 = ((fSlow3 * fSlow28) / fSlow4); + double fSlow30 = (12.0 * fSlow25); + double fSlow31 = (fSlow30 + (fConst10 / fSlow2)); + double fSlow32 = (1.0 / fSlow28); + double fSlow33 = (12.0 * fSlow27); + double fSlow34 = ((fConst10 / fSlow4) + fSlow33); + double fSlow35 = (fConst11 * ((fSlow9 * fSlow8) * fSlow12)); + double fSlow36 = (1.1180339887498949 * ((3.0 * fSlow10) + -1.0)); + double fSlow37 = (fConst11 * ((fSlow22 * fSlow9) * fSlow12)); + double fSlow38 = (fConst12 * (fSlow11 * ((2.0 * mydsp_faustpower2_f(fSlow22)) + -1.0))); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); - double fTemp0 = (fRec1[0] * double(input0[i])); - double fTemp1 = (fSlow4 * fTemp0); + fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); + double fTemp0 = (double(input0[i]) * fRec1[0]); + double fTemp1 = (fSlow5 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow15 * ((fSlow16 * fTemp0) - (fSlow17 * fRec5[0]))); + fRec4[0] = (fSlow18 * ((fSlow19 * fTemp0) - (fSlow20 * fRec5[0]))); fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = (fSlow3 * fTemp0); - double fTemp3 = ((fSlow13 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); - double fTemp4 = (fSlow10 * fTemp3); + double fTemp2 = (fSlow1 * fTemp0); + double fTemp3 = ((fSlow16 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); + double fTemp4 = (fSlow13 * fTemp3); fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph1 = FAUSTFLOAT(fRec2[0]); output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow19 * fTemp3); + double fTemp5 = (fSlow21 * fTemp3); fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph2 = FAUSTFLOAT(fRec6[0]); output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (fSlow21 * fTemp3); + double fTemp6 = (fSlow23 * fTemp3); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph3 = FAUSTFLOAT(fRec7[0]); output3[i] = FAUSTFLOAT(fTemp6); + fRec10[0] = (fRec10[1] + fRec9[1]); fRec11[0] = (fRec11[1] + fRec10[1]); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec10[0] = (fSlow31 * ((fSlow32 * fTemp0) - ((fSlow34 * fRec11[0]) + (fSlow33 * fRec12[0])))); - fRec9[0] = (fRec10[0] + fRec9[1]); - double fTemp7 = (fRec9[0] - fRec10[0]); + fRec9[0] = (fSlow26 * ((fSlow29 * fTemp0) - ((fSlow31 * fRec10[0]) + (fSlow30 * fRec11[0])))); + fRec12[0] = (fRec9[0] + fRec12[1]); + double fTemp7 = (fRec12[0] - fRec9[0]); fVec0[0] = fTemp7; fRec13[0] = (fRec13[1] + fVec0[1]); - double fTemp8 = ((fSlow27 * ((fSlow29 * fTemp7) + (fSlow28 * fRec13[0]))) + (fRec10[0] + fTemp2)); + double fTemp8 = ((fRec9[0] + fTemp2) + (fSlow32 * ((fSlow34 * fTemp7) + (fSlow33 * fRec13[0])))); double fTemp9 = (fSlow24 * fTemp8); fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph4 = FAUSTFLOAT(fRec8[0]); output4[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (fSlow36 * fTemp8); + double fTemp10 = (fSlow35 * fTemp8); fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph5 = FAUSTFLOAT(fRec14[0]); output5[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fSlow37 * fTemp8); + double fTemp11 = (fSlow36 * fTemp8); fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph6 = FAUSTFLOAT(fRec15[0]); output6[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (fSlow38 * fTemp8); + double fTemp12 = (fSlow37 * fTemp8); fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph7 = FAUSTFLOAT(fRec16[0]); output7[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (fSlow39 * fTemp8); + double fTemp13 = (fSlow38 * fTemp8); fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph8 = FAUSTFLOAT(fRec17[0]); output8[i] = FAUSTFLOAT(fTemp13); @@ -1073,10 +1109,10 @@ class mydsp : public dsp { fRec2[1] = fRec2[0]; fRec6[1] = fRec6[0]; fRec7[1] = fRec7[0]; - fRec11[1] = fRec11[0]; - fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; fRec9[1] = fRec9[0]; + fRec12[1] = fRec12[0]; fVec0[1] = fVec0[0]; fRec13[1] = fRec13[0]; fRec8[1] = fRec8[0]; @@ -1092,7 +1128,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1421,6 +1456,12 @@ FAUST_EXPORT void load(InterfaceTable* inTable) #endif // NDEBUG } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncoder3.cpp b/source/HOAUGens/HOAEncoder3.cpp old mode 100755 new mode 100644 index e0d7f3e9cb..5ac98fc2c0 --- a/source/HOAUGens/HOAEncoder3.cpp +++ b/source/HOAUGens/HOAEncoder3.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.12 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,27 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); -} -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -630,15 +641,19 @@ class mydsp : public dsp { double fConst1; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fVslider0; - FAUSTFLOAT fVslider1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; - FAUSTFLOAT fVslider2; - FAUSTFLOAT fVslider3; double fConst2; double fConst3; + double fConst4; + double fConst5; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + double fConst6; + double fConst7; double fRec5[2]; double fRec4[2]; double fRec3[2]; @@ -648,28 +663,36 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph2; double fRec7[2]; FAUSTFLOAT fVbargraph3; - double fConst4; - double fConst5; - double fRec11[2]; - double fRec12[2]; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; double fRec10[2]; + double fRec11[2]; double fRec9[2]; + double fRec12[2]; double fVec0[2]; double fRec13[2]; double fRec8[2]; FAUSTFLOAT fVbargraph4; + double fConst14; + double fConst15; double fRec14[2]; FAUSTFLOAT fVbargraph5; double fRec15[2]; FAUSTFLOAT fVbargraph6; double fRec16[2]; FAUSTFLOAT fVbargraph7; + double fConst16; double fRec17[2]; FAUSTFLOAT fVbargraph8; - double fConst6; - double fConst7; - double fConst8; - double fConst9; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; double fRec22[2]; double fRec23[2]; double fRec21[2]; @@ -681,14 +704,18 @@ class mydsp : public dsp { double fRec19[2]; double fRec18[2]; FAUSTFLOAT fVbargraph9; + double fConst22; + double fConst23; double fRec27[2]; FAUSTFLOAT fVbargraph10; + double fConst24; double fRec28[2]; FAUSTFLOAT fVbargraph11; double fRec29[2]; FAUSTFLOAT fVbargraph12; double fRec30[2]; FAUSTFLOAT fVbargraph13; + double fConst25; double fRec31[2]; FAUSTFLOAT fVbargraph14; double fRec32[2]; @@ -701,31 +728,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncoder3"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -835,26 +862,42 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); - fConst2 = (340.0 / fConst0); - fConst3 = (170.0 / fConst0); - fConst4 = (510.0 / fConst0); - fConst5 = (1020.0 / fConst0); - fConst6 = (789.54302057287055 / fConst0); - fConst7 = (394.77151028643527 / fConst0); - fConst8 = (625.22848971356643 / fConst0); - fConst9 = (1250.4569794271329 / fConst0); + fConst2 = double(tgamma(1.0)); + fConst3 = double(tgamma(3.0)); + fConst4 = double(tgamma(1.5)); + fConst5 = (1.5957691216057308 * (sqrt((3.0 * (fConst2 / fConst3))) * fConst4)); + fConst6 = (340.0 / fConst0); + fConst7 = (170.0 / fConst0); + fConst8 = double(tgamma(5.0)); + fConst9 = double(tgamma(2.5)); + fConst10 = (sqrt((5.0 * (fConst2 / fConst8))) * fConst9); + fConst11 = (6.3830764864229232 * fConst10); + fConst12 = (510.0 / fConst0); + fConst13 = (1020.0 / fConst0); + fConst14 = double(tgamma(2.0)); + fConst15 = (4.7873073648171927 * (fConst4 * sqrt((5.0 * (fConst14 / double(tgamma(4.0))))))); + fConst16 = (3.1915382432114616 * fConst10); + fConst17 = (6.3830764864229232 * (sqrt((7.0 * (fConst2 / double(tgamma(7.0))))) * double(tgamma(3.5)))); + fConst18 = (789.54302057287055 / fConst0); + fConst19 = (394.77151028643527 / fConst0); + fConst20 = (625.22848971356643 / fConst0); + fConst21 = (1250.4569794271329 / fConst0); + fConst22 = (fConst9 * sqrt((7.0 * (fConst14 / double(tgamma(6.0)))))); + fConst23 = (31.915382432114615 * fConst22); + fConst24 = (0.70710678118654757 * (fConst4 * sqrt((7.0 * (fConst3 / fConst8))))); + fConst25 = (15.957691216057308 * fConst22); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fVslider0 = FAUSTFLOAT(2.0); - fVslider1 = FAUSTFLOAT(0.0); - fVslider2 = FAUSTFLOAT(0.0); - fVslider3 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -892,19 +935,19 @@ class mydsp : public dsp { } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec11[l8] = 0.0; + fRec10[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec11[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec9[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec9[l11] = 0.0; + fRec12[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -1015,103 +1058,111 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder3"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fVslider1, "1", ""); - ui_interface->declare(&fVslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fVslider2, "3", ""); - ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider3, "4", ""); - ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); - ui_interface->declare(&fVslider0, "5", ""); - ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); - ui_interface->declare(&fEntry0, "6", ""); - ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(0, "7", ""); - ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x25fa870", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee03046e20", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x260c9c0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee03059f30", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2612990", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee0305ec50", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2618b40", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee03064120", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x262ff90", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee03078a30", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2636460", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee0307f4c0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x263cfe0", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee030849a0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2642cf0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee03089b80", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2649140", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee0308fde0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2666ad0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee030aa140", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x266c9b0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee030b06a0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26734e0", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee030b6b40", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26798b0", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee030bc0c0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x267f960", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee030c10a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2685910", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee030c6860", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x268bde0", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fee030cbee0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1138,104 +1189,104 @@ class mydsp : public dsp { FAUSTFLOAT* output14 = outputs[14]; FAUSTFLOAT* output15 = outputs[15]; double fSlow0 = double(fCheckbox0); - double fSlow1 = double(fEntry0); - double fSlow2 = double(fVslider0); - double fSlow3 = (1.0 - fSlow0); - double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); - double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow6 = double(fVslider2); - double fSlow7 = sin(fSlow6); - double fSlow8 = double(fVslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (1.7320508075688772 * (fSlow7 * fSlow9)); - double fSlow11 = (fConst3 / fSlow2); - double fSlow12 = (fSlow11 + 1.0); - double fSlow13 = (fConst2 / (fSlow12 * fSlow2)); - double fSlow14 = (fConst3 / fSlow1); - double fSlow15 = (1.0 / (fSlow14 + 1.0)); - double fSlow16 = (((fSlow12 * fSlow0) * fSlow1) / fSlow2); - double fSlow17 = (fConst2 / fSlow1); - double fSlow18 = sin(fSlow8); - double fSlow19 = (1.7320508075688772 * fSlow18); - double fSlow20 = cos(fSlow6); - double fSlow21 = (1.7320508075688772 * (fSlow20 * fSlow9)); - double fSlow22 = (2.0 * fSlow6); - double fSlow23 = mydsp_faustpower2_f(fSlow9); - double fSlow24 = (sin(fSlow22) * fSlow23); - double fSlow25 = (1.9364916731037085 * fSlow24); - double fSlow26 = mydsp_faustpower2_f(fSlow11); - double fSlow27 = (((fConst4 / fSlow2) + (3.0 * fSlow26)) + 1.0); - double fSlow28 = (1.0 / fSlow27); - double fSlow29 = (12.0 * fSlow26); - double fSlow30 = ((fConst5 / fSlow2) + fSlow29); - double fSlow31 = mydsp_faustpower2_f(fSlow14); - double fSlow32 = (1.0 / (((fConst4 / fSlow1) + (3.0 * fSlow31)) + 1.0)); - double fSlow33 = (((fSlow27 * fSlow0) * fSlow1) / fSlow2); - double fSlow34 = (12.0 * fSlow31); - double fSlow35 = (fSlow34 + (fConst5 / fSlow1)); - double fSlow36 = sin((2.0 * fSlow8)); - double fSlow37 = (1.9364916731037085 * (fSlow7 * fSlow36)); - double fSlow38 = mydsp_faustpower2_f(fSlow18); - double fSlow39 = (1.1180339887498949 * ((3.0 * fSlow38) + -1.0)); - double fSlow40 = (1.9364916731037085 * (fSlow20 * fSlow36)); - double fSlow41 = (cos(fSlow22) * fSlow23); - double fSlow42 = (1.9364916731037085 * fSlow41); - double fSlow43 = (3.0 * fSlow6); - double fSlow44 = mydsp_faustpower3_f(fSlow9); - double fSlow45 = (2.0916500663351889 * (sin(fSlow43) * fSlow44)); - double fSlow46 = ((fConst7 / fSlow2) + 1.0); - double fSlow47 = (fConst6 / (fSlow46 * fSlow2)); - double fSlow48 = (1.0 / ((fConst7 / fSlow1) + 1.0)); - double fSlow49 = (1.0 / (((fConst8 / fSlow1) + (6.4594326934833797 * fSlow31)) + 1.0)); - double fSlow50 = (((fConst8 / fSlow2) + (6.4594326934833797 * fSlow26)) + 1.0); - double fSlow51 = (((fSlow50 * fSlow0) * fSlow1) / fSlow2); - double fSlow52 = (25.837730773933519 * fSlow31); - double fSlow53 = (fSlow52 + (fConst9 / fSlow1)); - double fSlow54 = (1.0 / fSlow50); - double fSlow55 = (25.837730773933519 * fSlow26); - double fSlow56 = ((fConst9 / fSlow2) + fSlow55); - double fSlow57 = (fConst6 / fSlow1); - double fSlow58 = (5.123475382979799 * (fSlow24 * fSlow18)); - double fSlow59 = (5.0 * fSlow38); - double fSlow60 = (fSlow59 + -1.0); - double fSlow61 = (1.6201851746019651 * ((fSlow7 * fSlow60) * fSlow9)); - double fSlow62 = (1.3228756555322954 * ((fSlow59 + -3.0) * fSlow18)); - double fSlow63 = (1.6201851746019651 * ((fSlow20 * fSlow60) * fSlow9)); - double fSlow64 = (5.123475382979799 * (fSlow41 * fSlow18)); - double fSlow65 = (2.0916500663351889 * (cos(fSlow43) * fSlow44)); + double fSlow1 = (1.0 - fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fHslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = sin(double(fHslider3)); + double fSlow10 = mydsp_faustpower2_f(fSlow9); + double fSlow11 = (1.0 - fSlow10); + double fSlow12 = pow(fSlow11, 0.5); + double fSlow13 = (fSlow8 * fSlow12); + double fSlow14 = (fConst5 * fSlow13); + double fSlow15 = (fConst7 / fSlow4); + double fSlow16 = (fSlow15 + 1.0); + double fSlow17 = (fConst6 / (fSlow4 * fSlow16)); + double fSlow18 = (fConst7 / fSlow2); + double fSlow19 = (1.0 / (fSlow18 + 1.0)); + double fSlow20 = ((fSlow3 * fSlow16) / fSlow4); + double fSlow21 = (fConst6 / fSlow2); + double fSlow22 = (1.7320508075688772 * fSlow9); + double fSlow23 = cos(fSlow7); + double fSlow24 = (fSlow23 * fSlow12); + double fSlow25 = (fConst5 * fSlow24); + double fSlow26 = (fConst11 * ((fSlow23 * fSlow11) * fSlow8)); + double fSlow27 = mydsp_faustpower2_f(fSlow18); + double fSlow28 = (1.0 / (((fConst12 / fSlow2) + (3.0 * fSlow27)) + 1.0)); + double fSlow29 = mydsp_faustpower2_f(fSlow15); + double fSlow30 = (((fConst12 / fSlow4) + (3.0 * fSlow29)) + 1.0); + double fSlow31 = ((fSlow3 * fSlow30) / fSlow4); + double fSlow32 = (12.0 * fSlow27); + double fSlow33 = (fSlow32 + (fConst13 / fSlow2)); + double fSlow34 = (1.0 / fSlow30); + double fSlow35 = (12.0 * fSlow29); + double fSlow36 = ((fConst13 / fSlow4) + fSlow35); + double fSlow37 = (fConst15 * ((fSlow9 * fSlow8) * fSlow12)); + double fSlow38 = ((3.0 * fSlow10) + -1.0); + double fSlow39 = (1.1180339887498949 * fSlow38); + double fSlow40 = (fSlow23 * fSlow9); + double fSlow41 = (fConst15 * (fSlow40 * fSlow12)); + double fSlow42 = mydsp_faustpower2_f(fSlow23); + double fSlow43 = ((2.0 * fSlow42) + -1.0); + double fSlow44 = (fConst16 * (fSlow11 * fSlow43)); + double fSlow45 = pow(fSlow11, 1.5); + double fSlow46 = (fConst17 * ((fSlow8 * fSlow45) * ((4.0 * fSlow42) + -1.0))); + double fSlow47 = ((fConst19 / fSlow4) + 1.0); + double fSlow48 = (fConst18 / (fSlow4 * fSlow47)); + double fSlow49 = (1.0 / ((fConst19 / fSlow2) + 1.0)); + double fSlow50 = (1.0 / (((fConst20 / fSlow2) + (6.4594326934833797 * fSlow27)) + 1.0)); + double fSlow51 = (((fConst20 / fSlow4) + (6.4594326934833797 * fSlow29)) + 1.0); + double fSlow52 = ((fSlow3 * fSlow51) / fSlow4); + double fSlow53 = (25.837730773933519 * fSlow27); + double fSlow54 = (fSlow53 + (fConst21 / fSlow2)); + double fSlow55 = (1.0 / fSlow51); + double fSlow56 = (25.837730773933519 * fSlow29); + double fSlow57 = ((fConst21 / fSlow4) + fSlow56); + double fSlow58 = (fConst18 / fSlow2); + double fSlow59 = (fConst23 * ((fSlow40 * fSlow11) * fSlow8)); + double fSlow60 = ((16.925687506432688 * fSlow10) + -3.3851375012865379); + double fSlow61 = (fConst24 * (fSlow13 * fSlow60)); + double fSlow62 = (0.88191710368819687 * (fSlow9 * ((2.5 * fSlow38) + -2.0))); + double fSlow63 = (fConst24 * (fSlow24 * fSlow60)); + double fSlow64 = (fConst25 * ((fSlow9 * fSlow11) * fSlow43)); + double fSlow65 = (fConst17 * ((fSlow23 * fSlow45) * ((2.0 * fSlow43) + -1.0))); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); - double fTemp0 = (fRec1[0] * double(input0[i])); - double fTemp1 = (fSlow4 * fTemp0); + fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); + double fTemp0 = (double(input0[i]) * fRec1[0]); + double fTemp1 = (fSlow5 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow15 * ((fSlow16 * fTemp0) - (fSlow17 * fRec5[0]))); + fRec4[0] = (fSlow19 * ((fSlow20 * fTemp0) - (fSlow21 * fRec5[0]))); fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = (fSlow3 * fTemp0); - double fTemp3 = ((fSlow13 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); - double fTemp4 = (fSlow10 * fTemp3); + double fTemp2 = (fSlow1 * fTemp0); + double fTemp3 = ((fSlow17 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); + double fTemp4 = (fSlow14 * fTemp3); fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph1 = FAUSTFLOAT(fRec2[0]); output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow19 * fTemp3); + double fTemp5 = (fSlow22 * fTemp3); fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph2 = FAUSTFLOAT(fRec6[0]); output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (fSlow21 * fTemp3); + double fTemp6 = (fSlow25 * fTemp3); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph3 = FAUSTFLOAT(fRec7[0]); output3[i] = FAUSTFLOAT(fTemp6); + fRec10[0] = (fRec10[1] + fRec9[1]); fRec11[0] = (fRec11[1] + fRec10[1]); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec10[0] = (fSlow32 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec11[0]) + (fSlow34 * fRec12[0])))); - fRec9[0] = (fRec10[0] + fRec9[1]); - double fTemp7 = (fRec9[0] - fRec10[0]); + fRec9[0] = (fSlow28 * ((fSlow31 * fTemp0) - ((fSlow33 * fRec10[0]) + (fSlow32 * fRec11[0])))); + fRec12[0] = (fRec9[0] + fRec12[1]); + double fTemp7 = (fRec12[0] - fRec9[0]); fVec0[0] = fTemp7; fRec13[0] = (fRec13[1] + fVec0[1]); - double fTemp8 = ((fSlow28 * ((fSlow30 * fTemp7) + (fSlow29 * fRec13[0]))) + (fRec10[0] + fTemp2)); - double fTemp9 = (fSlow25 * fTemp8); + double fTemp8 = ((fRec9[0] + fTemp2) + (fSlow34 * ((fSlow36 * fTemp7) + (fSlow35 * fRec13[0])))); + double fTemp9 = (fSlow26 * fTemp8); fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph4 = FAUSTFLOAT(fRec8[0]); output4[i] = FAUSTFLOAT(fTemp9); @@ -1247,30 +1298,30 @@ class mydsp : public dsp { fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph6 = FAUSTFLOAT(fRec15[0]); output6[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (fSlow40 * fTemp8); + double fTemp12 = (fSlow41 * fTemp8); fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph7 = FAUSTFLOAT(fRec16[0]); output7[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (fSlow42 * fTemp8); + double fTemp13 = (fSlow44 * fTemp8); fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph8 = FAUSTFLOAT(fRec17[0]); output8[i] = FAUSTFLOAT(fTemp13); fRec22[0] = (fRec22[1] + fRec21[1]); fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow49 * ((fSlow51 * fTemp0) - ((fSlow53 * fRec22[0]) + (fSlow52 * fRec23[0])))); + fRec21[0] = (fSlow50 * ((fSlow52 * fTemp0) - ((fSlow54 * fRec22[0]) + (fSlow53 * fRec23[0])))); fRec24[0] = (fRec21[0] + fRec24[1]); double fTemp14 = (fRec24[0] - fRec21[0]); fVec1[0] = fTemp14; fRec25[0] = (fRec25[1] + fVec1[1]); fRec26[0] = (fRec26[1] + fRec20[1]); - fRec20[0] = (fSlow48 * ((fSlow46 * (fRec21[0] + (fSlow54 * ((fSlow56 * fTemp14) + (fSlow55 * fRec25[0]))))) - (fSlow57 * fRec26[0]))); + fRec20[0] = (fSlow49 * ((fSlow47 * (fRec21[0] + (fSlow55 * ((fSlow57 * fTemp14) + (fSlow56 * fRec25[0]))))) - (fSlow58 * fRec26[0]))); fRec19[0] = (fRec20[0] + fRec19[1]); - double fTemp15 = ((fSlow47 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); - double fTemp16 = (fSlow45 * fTemp15); + double fTemp15 = ((fSlow48 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); + double fTemp16 = (fSlow46 * fTemp15); fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph9 = FAUSTFLOAT(fRec18[0]); output9[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fSlow58 * fTemp15); + double fTemp17 = (fSlow59 * fTemp15); fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph10 = FAUSTFLOAT(fRec27[0]); output10[i] = FAUSTFLOAT(fTemp17); @@ -1302,10 +1353,10 @@ class mydsp : public dsp { fRec2[1] = fRec2[0]; fRec6[1] = fRec6[0]; fRec7[1] = fRec7[0]; - fRec11[1] = fRec11[0]; - fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; fRec9[1] = fRec9[0]; + fRec12[1] = fRec12[0]; fVec0[1] = fVec0[0]; fRec13[1] = fRec13[0]; fRec8[1] = fRec8[0]; @@ -1337,7 +1388,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1666,6 +1716,12 @@ FAUST_EXPORT void load(InterfaceTable* inTable) #endif // NDEBUG } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncoder4.cpp b/source/HOAUGens/HOAEncoder4.cpp old mode 100755 new mode 100644 index 595c8347f2..8910772383 --- a/source/HOAUGens/HOAEncoder4.cpp +++ b/source/HOAUGens/HOAEncoder4.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder4" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.12 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,31 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); -} -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - -} -double mydsp_faustpower4_f(double value) { - return (((value * value) * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -634,15 +641,19 @@ class mydsp : public dsp { double fConst1; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fVslider0; - FAUSTFLOAT fVslider1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; - FAUSTFLOAT fVslider2; - FAUSTFLOAT fVslider3; double fConst2; double fConst3; + double fConst4; + double fConst5; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + double fConst6; + double fConst7; double fRec5[2]; double fRec4[2]; double fRec3[2]; @@ -652,28 +663,39 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph2; double fRec7[2]; FAUSTFLOAT fVbargraph3; - double fConst4; - double fConst5; - double fRec11[2]; - double fRec12[2]; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; double fRec10[2]; + double fRec11[2]; double fRec9[2]; + double fRec12[2]; double fVec0[2]; double fRec13[2]; double fRec8[2]; FAUSTFLOAT fVbargraph4; + double fConst14; + double fConst15; + double fConst16; double fRec14[2]; FAUSTFLOAT fVbargraph5; double fRec15[2]; FAUSTFLOAT fVbargraph6; double fRec16[2]; FAUSTFLOAT fVbargraph7; + double fConst17; double fRec17[2]; FAUSTFLOAT fVbargraph8; - double fConst6; - double fConst7; - double fConst8; - double fConst9; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; double fRec22[2]; double fRec23[2]; double fRec21[2]; @@ -685,46 +707,57 @@ class mydsp : public dsp { double fRec19[2]; double fRec18[2]; FAUSTFLOAT fVbargraph9; + double fConst25; + double fConst26; + double fConst27; double fRec27[2]; FAUSTFLOAT fVbargraph10; + double fConst28; double fRec28[2]; FAUSTFLOAT fVbargraph11; double fRec29[2]; FAUSTFLOAT fVbargraph12; double fRec30[2]; FAUSTFLOAT fVbargraph13; + double fConst29; double fRec31[2]; FAUSTFLOAT fVbargraph14; double fRec32[2]; FAUSTFLOAT fVbargraph15; - double fConst10; - double fConst11; - double fConst12; - double fConst13; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fRec36[2]; double fRec37[2]; + double fRec35[2]; double fRec38[2]; - double fRec36[2]; - double fRec39[2]; double fVec2[2]; + double fRec39[2]; + double fConst34; double fRec40[2]; double fRec41[2]; - double fRec42[2]; - double fRec35[2]; double fRec34[2]; + double fRec42[2]; double fVec3[2]; double fRec43[2]; double fRec33[2]; FAUSTFLOAT fVbargraph16; + double fConst35; double fRec44[2]; FAUSTFLOAT fVbargraph17; + double fConst36; + double fConst37; double fRec45[2]; FAUSTFLOAT fVbargraph18; + double fConst38; double fRec46[2]; FAUSTFLOAT fVbargraph19; double fRec47[2]; FAUSTFLOAT fVbargraph20; double fRec48[2]; FAUSTFLOAT fVbargraph21; + double fConst39; double fRec49[2]; FAUSTFLOAT fVbargraph22; double fRec50[2]; @@ -739,31 +772,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncoder4"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -909,30 +942,56 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); - fConst2 = (340.0 / fConst0); - fConst3 = (170.0 / fConst0); - fConst4 = (510.0 / fConst0); - fConst5 = (1020.0 / fConst0); - fConst6 = (789.54302057287055 / fConst0); - fConst7 = (394.77151028643527 / fConst0); - fConst8 = (625.22848971356643 / fConst0); - fConst9 = (1250.4569794271329 / fConst0); - fConst10 = (984.71160495892411 / fConst0); - fConst11 = (1969.4232099178482 / fConst0); - fConst12 = (715.28839504107589 / fConst0); - fConst13 = (1430.5767900821518 / fConst0); + fConst2 = double(tgamma(1.0)); + fConst3 = double(tgamma(3.0)); + fConst4 = double(tgamma(1.5)); + fConst5 = (1.5957691216057308 * (sqrt((3.0 * (fConst2 / fConst3))) * fConst4)); + fConst6 = (340.0 / fConst0); + fConst7 = (170.0 / fConst0); + fConst8 = double(tgamma(5.0)); + fConst9 = double(tgamma(2.5)); + fConst10 = (sqrt((5.0 * (fConst2 / fConst8))) * fConst9); + fConst11 = (6.3830764864229232 * fConst10); + fConst12 = (510.0 / fConst0); + fConst13 = (1020.0 / fConst0); + fConst14 = double(tgamma(2.0)); + fConst15 = double(tgamma(4.0)); + fConst16 = (4.7873073648171927 * (fConst4 * sqrt((5.0 * (fConst14 / fConst15))))); + fConst17 = (3.1915382432114616 * fConst10); + fConst18 = double(tgamma(7.0)); + fConst19 = double(tgamma(3.5)); + fConst20 = (6.3830764864229232 * (sqrt((7.0 * (fConst2 / fConst18))) * fConst19)); + fConst21 = (789.54302057287055 / fConst0); + fConst22 = (394.77151028643527 / fConst0); + fConst23 = (625.22848971356643 / fConst0); + fConst24 = (1250.4569794271329 / fConst0); + fConst25 = double(tgamma(6.0)); + fConst26 = (fConst9 * sqrt((7.0 * (fConst14 / fConst25)))); + fConst27 = (31.915382432114615 * fConst26); + fConst28 = (0.70710678118654757 * (fConst4 * sqrt((7.0 * (fConst3 / fConst8))))); + fConst29 = (15.957691216057308 * fConst26); + fConst30 = (12.766152972845846 * (sqrt((9.0 * (fConst2 / double(tgamma(9.0))))) * double(tgamma(4.5)))); + fConst31 = (984.71160495892411 / fConst0); + fConst32 = (715.28839504107589 / fConst0); + fConst33 = (1430.5767900821518 / fConst0); + fConst34 = (1969.4232099178482 / fConst0); + fConst35 = (44.681535404960464 * (fConst19 * sqrt((9.0 * (fConst14 / double(tgamma(8.0))))))); + fConst36 = (fConst9 * sqrt((9.0 * (fConst3 / fConst18)))); + fConst37 = (1.4142135623730951 * fConst36); + fConst38 = (0.47140452079103168 * (fConst4 * sqrt((9.0 * (fConst15 / fConst25))))); + fConst39 = (0.70710678118654757 * fConst36); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fVslider0 = FAUSTFLOAT(2.0); - fVslider1 = FAUSTFLOAT(0.0); - fVslider2 = FAUSTFLOAT(0.0); - fVslider3 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -970,19 +1029,19 @@ class mydsp : public dsp { } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec11[l8] = 0.0; + fRec10[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec11[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec9[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec9[l11] = 0.0; + fRec12[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -1078,19 +1137,19 @@ class mydsp : public dsp { } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec37[l35] = 0.0; + fRec36[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec38[l36] = 0.0; + fRec37[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec36[l37] = 0.0; + fRec35[l37] = 0.0; } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec39[l38] = 0.0; + fRec38[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { @@ -1098,23 +1157,23 @@ class mydsp : public dsp { } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - fRec40[l40] = 0.0; + fRec39[l40] = 0.0; } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec41[l41] = 0.0; + fRec40[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec42[l42] = 0.0; + fRec41[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec35[l43] = 0.0; + fRec34[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec34[l44] = 0.0; + fRec42[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { @@ -1177,141 +1236,149 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder4"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fVslider1, "1", ""); - ui_interface->declare(&fVslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fVslider2, "3", ""); - ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider3, "4", ""); - ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); - ui_interface->declare(&fVslider0, "5", ""); - ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); - ui_interface->declare(&fEntry0, "6", ""); - ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(0, "7", ""); - ui_interface->openVerticalBox("Outputs"); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2fec390", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331a6960", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ffe4e0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331b9a70", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30044b0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331be790", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x300a660", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331c3c60", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3021cc0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331d8750", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3028190", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331df850", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x302ed10", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331e4d30", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3034a20", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331ea0f0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x303b080", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5331f0530", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3058c30", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb53320ef50", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x305eb10", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb533215760", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3065640", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb53321bc00", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x306ba10", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb533221360", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3071ac0", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb533226340", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3077a70", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb53322bb00", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x307e160", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb533231360", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30a2790", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb533251760", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30a8750", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb533257c30", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30af360", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb53325e430", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30b5a30", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb5332648b0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30bc610", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb53326a0c0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30c2880", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb53326f200", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30c8bd0", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb533274820", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30cee20", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb533279c40", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30d5590", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fb53327f6b0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1347,243 +1414,245 @@ class mydsp : public dsp { FAUSTFLOAT* output23 = outputs[23]; FAUSTFLOAT* output24 = outputs[24]; double fSlow0 = double(fCheckbox0); - double fSlow1 = double(fEntry0); - double fSlow2 = double(fVslider0); - double fSlow3 = (1.0 - fSlow0); - double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); - double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow6 = double(fVslider2); - double fSlow7 = sin(fSlow6); - double fSlow8 = double(fVslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (1.7320508075688772 * (fSlow7 * fSlow9)); - double fSlow11 = (fConst3 / fSlow2); - double fSlow12 = (fSlow11 + 1.0); - double fSlow13 = (fConst2 / (fSlow12 * fSlow2)); - double fSlow14 = (fConst3 / fSlow1); - double fSlow15 = (1.0 / (fSlow14 + 1.0)); - double fSlow16 = (((fSlow12 * fSlow0) * fSlow1) / fSlow2); - double fSlow17 = (fConst2 / fSlow1); - double fSlow18 = sin(fSlow8); - double fSlow19 = (1.7320508075688772 * fSlow18); - double fSlow20 = cos(fSlow6); - double fSlow21 = (1.7320508075688772 * (fSlow20 * fSlow9)); - double fSlow22 = (2.0 * fSlow6); - double fSlow23 = sin(fSlow22); - double fSlow24 = mydsp_faustpower2_f(fSlow9); - double fSlow25 = (fSlow23 * fSlow24); - double fSlow26 = (1.9364916731037085 * fSlow25); - double fSlow27 = mydsp_faustpower2_f(fSlow11); - double fSlow28 = (((fConst4 / fSlow2) + (3.0 * fSlow27)) + 1.0); - double fSlow29 = (1.0 / fSlow28); - double fSlow30 = (12.0 * fSlow27); - double fSlow31 = ((fConst5 / fSlow2) + fSlow30); - double fSlow32 = mydsp_faustpower2_f(fSlow14); - double fSlow33 = (1.0 / (((fConst4 / fSlow1) + (3.0 * fSlow32)) + 1.0)); - double fSlow34 = (((fSlow28 * fSlow0) * fSlow1) / fSlow2); - double fSlow35 = (12.0 * fSlow32); - double fSlow36 = (fSlow35 + (fConst5 / fSlow1)); - double fSlow37 = sin((2.0 * fSlow8)); - double fSlow38 = (1.9364916731037085 * (fSlow7 * fSlow37)); - double fSlow39 = mydsp_faustpower2_f(fSlow18); - double fSlow40 = (1.1180339887498949 * ((3.0 * fSlow39) + -1.0)); - double fSlow41 = (1.9364916731037085 * (fSlow20 * fSlow37)); - double fSlow42 = cos(fSlow22); - double fSlow43 = (fSlow42 * fSlow24); - double fSlow44 = (1.9364916731037085 * fSlow43); - double fSlow45 = (3.0 * fSlow6); - double fSlow46 = mydsp_faustpower3_f(fSlow9); - double fSlow47 = (sin(fSlow45) * fSlow46); - double fSlow48 = (2.0916500663351889 * fSlow47); - double fSlow49 = ((fConst7 / fSlow2) + 1.0); - double fSlow50 = (fConst6 / (fSlow49 * fSlow2)); - double fSlow51 = (1.0 / ((fConst7 / fSlow1) + 1.0)); - double fSlow52 = (1.0 / (((fConst8 / fSlow1) + (6.4594326934833797 * fSlow32)) + 1.0)); - double fSlow53 = (((fConst8 / fSlow2) + (6.4594326934833797 * fSlow27)) + 1.0); - double fSlow54 = (((fSlow53 * fSlow0) * fSlow1) / fSlow2); - double fSlow55 = (25.837730773933519 * fSlow32); - double fSlow56 = (fSlow55 + (fConst9 / fSlow1)); - double fSlow57 = (1.0 / fSlow53); - double fSlow58 = (25.837730773933519 * fSlow27); - double fSlow59 = ((fConst9 / fSlow2) + fSlow58); - double fSlow60 = (fConst6 / fSlow1); - double fSlow61 = (5.123475382979799 * (fSlow25 * fSlow18)); - double fSlow62 = (5.0 * fSlow39); - double fSlow63 = (fSlow62 + -1.0); - double fSlow64 = (1.6201851746019651 * ((fSlow7 * fSlow63) * fSlow9)); - double fSlow65 = (1.3228756555322954 * ((fSlow62 + -3.0) * fSlow18)); - double fSlow66 = (1.6201851746019651 * ((fSlow20 * fSlow63) * fSlow9)); - double fSlow67 = (5.123475382979799 * (fSlow43 * fSlow18)); - double fSlow68 = (cos(fSlow45) * fSlow46); - double fSlow69 = (2.0916500663351889 * fSlow68); - double fSlow70 = (4.0 * fSlow6); - double fSlow71 = mydsp_faustpower4_f(fSlow9); - double fSlow72 = (2.2185299186623562 * (sin(fSlow70) * fSlow71)); - double fSlow73 = (((fConst10 / fSlow2) + (9.1401308902779004 * fSlow27)) + 1.0); - double fSlow74 = (1.0 / fSlow73); - double fSlow75 = (36.560523561111602 * fSlow27); - double fSlow76 = ((fConst11 / fSlow2) + fSlow75); - double fSlow77 = (1.0 / (((fConst10 / fSlow1) + (9.1401308902779004 * fSlow32)) + 1.0)); - double fSlow78 = (1.0 / (((fConst12 / fSlow1) + (11.4878004768713 * fSlow32)) + 1.0)); - double fSlow79 = (((fConst12 / fSlow2) + (11.4878004768713 * fSlow27)) + 1.0); - double fSlow80 = (((fSlow79 * fSlow0) * fSlow1) / fSlow2); - double fSlow81 = (45.951201907485199 * fSlow32); - double fSlow82 = (fSlow81 + (fConst13 / fSlow1)); + double fSlow1 = (1.0 - fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fHslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = sin(double(fHslider3)); + double fSlow10 = mydsp_faustpower2_f(fSlow9); + double fSlow11 = (1.0 - fSlow10); + double fSlow12 = pow(fSlow11, 0.5); + double fSlow13 = (fSlow8 * fSlow12); + double fSlow14 = (fConst5 * fSlow13); + double fSlow15 = (fConst7 / fSlow4); + double fSlow16 = (fSlow15 + 1.0); + double fSlow17 = (fConst6 / (fSlow4 * fSlow16)); + double fSlow18 = (fConst7 / fSlow2); + double fSlow19 = (1.0 / (fSlow18 + 1.0)); + double fSlow20 = ((fSlow3 * fSlow16) / fSlow4); + double fSlow21 = (fConst6 / fSlow2); + double fSlow22 = (1.7320508075688772 * fSlow9); + double fSlow23 = cos(fSlow7); + double fSlow24 = (fSlow23 * fSlow12); + double fSlow25 = (fConst5 * fSlow24); + double fSlow26 = ((fSlow23 * fSlow11) * fSlow8); + double fSlow27 = (fConst11 * fSlow26); + double fSlow28 = mydsp_faustpower2_f(fSlow18); + double fSlow29 = (1.0 / (((fConst12 / fSlow2) + (3.0 * fSlow28)) + 1.0)); + double fSlow30 = mydsp_faustpower2_f(fSlow15); + double fSlow31 = (((fConst12 / fSlow4) + (3.0 * fSlow30)) + 1.0); + double fSlow32 = ((fSlow3 * fSlow31) / fSlow4); + double fSlow33 = (12.0 * fSlow28); + double fSlow34 = (fSlow33 + (fConst13 / fSlow2)); + double fSlow35 = (1.0 / fSlow31); + double fSlow36 = (12.0 * fSlow30); + double fSlow37 = ((fConst13 / fSlow4) + fSlow36); + double fSlow38 = (fSlow9 * fSlow8); + double fSlow39 = (fSlow38 * fSlow12); + double fSlow40 = (fConst16 * fSlow39); + double fSlow41 = ((3.0 * fSlow10) + -1.0); + double fSlow42 = (1.1180339887498949 * fSlow41); + double fSlow43 = (fSlow23 * fSlow9); + double fSlow44 = (fSlow43 * fSlow12); + double fSlow45 = (fConst16 * fSlow44); + double fSlow46 = mydsp_faustpower2_f(fSlow23); + double fSlow47 = ((2.0 * fSlow46) + -1.0); + double fSlow48 = (fSlow11 * fSlow47); + double fSlow49 = (fConst17 * fSlow48); + double fSlow50 = pow(fSlow11, 1.5); + double fSlow51 = ((4.0 * fSlow46) + -1.0); + double fSlow52 = (fConst20 * ((fSlow8 * fSlow50) * fSlow51)); + double fSlow53 = ((fConst22 / fSlow4) + 1.0); + double fSlow54 = (fConst21 / (fSlow4 * fSlow53)); + double fSlow55 = (1.0 / ((fConst22 / fSlow2) + 1.0)); + double fSlow56 = (1.0 / (((fConst23 / fSlow2) + (6.4594326934833797 * fSlow28)) + 1.0)); + double fSlow57 = (((fConst23 / fSlow4) + (6.4594326934833797 * fSlow30)) + 1.0); + double fSlow58 = ((fSlow3 * fSlow57) / fSlow4); + double fSlow59 = (25.837730773933519 * fSlow28); + double fSlow60 = (fSlow59 + (fConst24 / fSlow2)); + double fSlow61 = (1.0 / fSlow57); + double fSlow62 = (25.837730773933519 * fSlow30); + double fSlow63 = ((fConst24 / fSlow4) + fSlow62); + double fSlow64 = (fConst21 / fSlow2); + double fSlow65 = (fConst27 * ((fSlow43 * fSlow11) * fSlow8)); + double fSlow66 = ((16.925687506432688 * fSlow10) + -3.3851375012865379); + double fSlow67 = (fConst28 * (fSlow13 * fSlow66)); + double fSlow68 = ((2.5 * fSlow41) + -2.0); + double fSlow69 = (0.88191710368819687 * (fSlow9 * fSlow68)); + double fSlow70 = (fConst28 * (fSlow24 * fSlow66)); + double fSlow71 = (fConst29 * ((fSlow9 * fSlow11) * fSlow47)); + double fSlow72 = ((2.0 * fSlow47) + -1.0); + double fSlow73 = (fConst20 * ((fSlow23 * fSlow50) * fSlow72)); + double fSlow74 = mydsp_faustpower2_f(fSlow11); + double fSlow75 = (fConst30 * ((fSlow74 * fSlow8) * (0.0 - (2.0 * (fSlow23 * (1.0 - fSlow51)))))); + double fSlow76 = (1.0 / (((fConst31 / fSlow2) + (9.1401308902779004 * fSlow28)) + 1.0)); + double fSlow77 = (((fConst31 / fSlow4) + (9.1401308902779004 * fSlow30)) + 1.0); + double fSlow78 = (1.0 / (((fConst32 / fSlow2) + (11.4878004768713 * fSlow28)) + 1.0)); + double fSlow79 = (((fConst32 / fSlow4) + (11.4878004768713 * fSlow30)) + 1.0); + double fSlow80 = ((fSlow3 * fSlow79) / fSlow4); + double fSlow81 = (45.951201907485199 * fSlow28); + double fSlow82 = (fSlow81 + (fConst33 / fSlow2)); double fSlow83 = (1.0 / fSlow79); - double fSlow84 = (45.951201907485199 * fSlow27); - double fSlow85 = ((fConst13 / fSlow2) + fSlow84); - double fSlow86 = (36.560523561111602 * fSlow32); - double fSlow87 = (fSlow86 + (fConst11 / fSlow1)); - double fSlow88 = (6.2749501990055663 * (fSlow47 * fSlow18)); - double fSlow89 = (7.0 * fSlow39); - double fSlow90 = (fSlow89 + -1.0); - double fSlow91 = (1.6770509831248424 * ((fSlow23 * fSlow90) * fSlow24)); - double fSlow92 = (fSlow89 + -3.0); - double fSlow93 = (1.1858541225631423 * ((fSlow7 * fSlow92) * fSlow37)); - double fSlow94 = (0.375 * ((((35.0 * fSlow39) + -30.0) * fSlow39) + 3.0)); - double fSlow95 = (1.1858541225631423 * ((fSlow20 * fSlow92) * fSlow37)); - double fSlow96 = (1.6770509831248424 * ((fSlow42 * fSlow90) * fSlow24)); - double fSlow97 = (6.2749501990055663 * (fSlow68 * fSlow18)); - double fSlow98 = (2.2185299186623562 * (cos(fSlow70) * fSlow71)); + double fSlow84 = (45.951201907485199 * fSlow30); + double fSlow85 = ((fConst33 / fSlow4) + fSlow84); + double fSlow86 = (36.560523561111602 * fSlow28); + double fSlow87 = (fSlow86 + (fConst34 / fSlow2)); + double fSlow88 = (1.0 / fSlow77); + double fSlow89 = (36.560523561111602 * fSlow30); + double fSlow90 = ((fConst34 / fSlow4) + fSlow89); + double fSlow91 = (fConst35 * ((fSlow38 * fSlow50) * fSlow51)); + double fSlow92 = ((78.986541696685876 * fSlow10) + -11.283791670955125); + double fSlow93 = (fConst37 * (fSlow26 * fSlow92)); + double fSlow94 = ((3.5 * fSlow66) + -13.540550005146152); + double fSlow95 = (fConst38 * (fSlow39 * fSlow94)); + double fSlow96 = (0.75 * ((2.333333333333333 * (fSlow10 * fSlow68)) - (1.5 * fSlow41))); + double fSlow97 = (fConst38 * (fSlow44 * fSlow94)); + double fSlow98 = (fConst39 * (fSlow48 * fSlow92)); + double fSlow99 = (fConst35 * ((fSlow43 * fSlow50) * fSlow72)); + double fSlow100 = (fConst30 * (fSlow74 * (1.0 - (2.0 * (fSlow46 * (1.0 - fSlow72)))))); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); - double fTemp0 = (fRec1[0] * double(input0[i])); - double fTemp1 = (fSlow4 * fTemp0); + fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); + double fTemp0 = (double(input0[i]) * fRec1[0]); + double fTemp1 = (fSlow5 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow15 * ((fSlow16 * fTemp0) - (fSlow17 * fRec5[0]))); + fRec4[0] = (fSlow19 * ((fSlow20 * fTemp0) - (fSlow21 * fRec5[0]))); fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = (fSlow3 * fTemp0); - double fTemp3 = ((fSlow13 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); - double fTemp4 = (fSlow10 * fTemp3); + double fTemp2 = (fSlow1 * fTemp0); + double fTemp3 = ((fSlow17 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); + double fTemp4 = (fSlow14 * fTemp3); fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph1 = FAUSTFLOAT(fRec2[0]); output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow19 * fTemp3); + double fTemp5 = (fSlow22 * fTemp3); fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph2 = FAUSTFLOAT(fRec6[0]); output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (fSlow21 * fTemp3); + double fTemp6 = (fSlow25 * fTemp3); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph3 = FAUSTFLOAT(fRec7[0]); output3[i] = FAUSTFLOAT(fTemp6); + fRec10[0] = (fRec10[1] + fRec9[1]); fRec11[0] = (fRec11[1] + fRec10[1]); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec10[0] = (fSlow33 * ((fSlow34 * fTemp0) - ((fSlow36 * fRec11[0]) + (fSlow35 * fRec12[0])))); - fRec9[0] = (fRec10[0] + fRec9[1]); - double fTemp7 = (fRec9[0] - fRec10[0]); + fRec9[0] = (fSlow29 * ((fSlow32 * fTemp0) - ((fSlow34 * fRec10[0]) + (fSlow33 * fRec11[0])))); + fRec12[0] = (fRec9[0] + fRec12[1]); + double fTemp7 = (fRec12[0] - fRec9[0]); fVec0[0] = fTemp7; fRec13[0] = (fRec13[1] + fVec0[1]); - double fTemp8 = ((fSlow29 * ((fSlow31 * fTemp7) + (fSlow30 * fRec13[0]))) + (fRec10[0] + fTemp2)); - double fTemp9 = (fSlow26 * fTemp8); + double fTemp8 = ((fRec9[0] + fTemp2) + (fSlow35 * ((fSlow37 * fTemp7) + (fSlow36 * fRec13[0])))); + double fTemp9 = (fSlow27 * fTemp8); fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph4 = FAUSTFLOAT(fRec8[0]); output4[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (fSlow38 * fTemp8); + double fTemp10 = (fSlow40 * fTemp8); fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph5 = FAUSTFLOAT(fRec14[0]); output5[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fSlow40 * fTemp8); + double fTemp11 = (fSlow42 * fTemp8); fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph6 = FAUSTFLOAT(fRec15[0]); output6[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (fSlow41 * fTemp8); + double fTemp12 = (fSlow45 * fTemp8); fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph7 = FAUSTFLOAT(fRec16[0]); output7[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (fSlow44 * fTemp8); + double fTemp13 = (fSlow49 * fTemp8); fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph8 = FAUSTFLOAT(fRec17[0]); output8[i] = FAUSTFLOAT(fTemp13); fRec22[0] = (fRec22[1] + fRec21[1]); fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow52 * ((fSlow54 * fTemp0) - ((fSlow56 * fRec22[0]) + (fSlow55 * fRec23[0])))); + fRec21[0] = (fSlow56 * ((fSlow58 * fTemp0) - ((fSlow60 * fRec22[0]) + (fSlow59 * fRec23[0])))); fRec24[0] = (fRec21[0] + fRec24[1]); double fTemp14 = (fRec24[0] - fRec21[0]); fVec1[0] = fTemp14; fRec25[0] = (fRec25[1] + fVec1[1]); fRec26[0] = (fRec26[1] + fRec20[1]); - fRec20[0] = (fSlow51 * ((fSlow49 * (fRec21[0] + (fSlow57 * ((fSlow59 * fTemp14) + (fSlow58 * fRec25[0]))))) - (fSlow60 * fRec26[0]))); + fRec20[0] = (fSlow55 * ((fSlow53 * (fRec21[0] + (fSlow61 * ((fSlow63 * fTemp14) + (fSlow62 * fRec25[0]))))) - (fSlow64 * fRec26[0]))); fRec19[0] = (fRec20[0] + fRec19[1]); - double fTemp15 = ((fSlow50 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); - double fTemp16 = (fSlow48 * fTemp15); + double fTemp15 = ((fSlow54 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); + double fTemp16 = (fSlow52 * fTemp15); fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph9 = FAUSTFLOAT(fRec18[0]); output9[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fSlow61 * fTemp15); + double fTemp17 = (fSlow65 * fTemp15); fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph10 = FAUSTFLOAT(fRec27[0]); output10[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (fSlow64 * fTemp15); + double fTemp18 = (fSlow67 * fTemp15); fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph11 = FAUSTFLOAT(fRec28[0]); output11[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (fSlow65 * fTemp15); + double fTemp19 = (fSlow69 * fTemp15); fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph12 = FAUSTFLOAT(fRec29[0]); output12[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (fSlow66 * fTemp15); + double fTemp20 = (fSlow70 * fTemp15); fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph13 = FAUSTFLOAT(fRec30[0]); output13[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (fSlow67 * fTemp15); + double fTemp21 = (fSlow71 * fTemp15); fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph14 = FAUSTFLOAT(fRec31[0]); output14[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (fSlow69 * fTemp15); + double fTemp22 = (fSlow73 * fTemp15); fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph15 = FAUSTFLOAT(fRec32[0]); output15[i] = FAUSTFLOAT(fTemp22); + fRec36[0] = (fRec36[1] + fRec35[1]); fRec37[0] = (fRec37[1] + fRec36[1]); - fRec38[0] = (fRec38[1] + fRec37[1]); - fRec36[0] = (fSlow78 * ((fSlow80 * fTemp0) - ((fSlow82 * fRec37[0]) + (fSlow81 * fRec38[0])))); - fRec39[0] = (fRec36[0] + fRec39[1]); - double fTemp23 = (fRec39[0] - fRec36[0]); + fRec35[0] = (fSlow78 * ((fSlow80 * fTemp0) - ((fSlow82 * fRec36[0]) + (fSlow81 * fRec37[0])))); + fRec38[0] = (fRec35[0] + fRec38[1]); + double fTemp23 = (fRec38[0] - fRec35[0]); fVec2[0] = fTemp23; - fRec40[0] = (fRec40[1] + fVec2[1]); - fRec41[0] = (fRec41[1] + fRec35[1]); - fRec42[0] = (fRec42[1] + fRec41[1]); - fRec35[0] = (fSlow77 * ((fSlow73 * (fRec36[0] + (fSlow83 * ((fSlow85 * fTemp23) + (fSlow84 * fRec40[0]))))) - ((fSlow87 * fRec41[0]) + (fSlow86 * fRec42[0])))); - fRec34[0] = (fRec35[0] + fRec34[1]); - double fTemp24 = (fRec34[0] - fRec35[0]); + fRec39[0] = (fRec39[1] + fVec2[1]); + fRec40[0] = (fRec40[1] + fRec34[1]); + fRec41[0] = (fRec41[1] + fRec40[1]); + fRec34[0] = (fSlow76 * ((fSlow77 * (fRec35[0] + (fSlow83 * ((fSlow85 * fTemp23) + (fSlow84 * fRec39[0]))))) - ((fSlow87 * fRec40[0]) + (fSlow86 * fRec41[0])))); + fRec42[0] = (fRec34[0] + fRec42[1]); + double fTemp24 = (fRec42[0] - fRec34[0]); fVec3[0] = fTemp24; fRec43[0] = (fRec43[1] + fVec3[1]); - double fTemp25 = ((fSlow74 * ((fSlow76 * fTemp24) + (fSlow75 * fRec43[0]))) + (fRec35[0] + fTemp2)); - double fTemp26 = (fSlow72 * fTemp25); + double fTemp25 = ((fRec34[0] + fTemp2) + (fSlow88 * ((fSlow90 * fTemp24) + (fSlow89 * fRec43[0])))); + double fTemp26 = (fSlow75 * fTemp25); fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph16 = FAUSTFLOAT(fRec33[0]); output16[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (fSlow88 * fTemp25); + double fTemp27 = (fSlow91 * fTemp25); fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph17 = FAUSTFLOAT(fRec44[0]); output17[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (fSlow91 * fTemp25); + double fTemp28 = (fSlow93 * fTemp25); fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph18 = FAUSTFLOAT(fRec45[0]); output18[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (fSlow93 * fTemp25); + double fTemp29 = (fSlow95 * fTemp25); fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph19 = FAUSTFLOAT(fRec46[0]); output19[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fSlow94 * fTemp25); + double fTemp30 = (fSlow96 * fTemp25); fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph20 = FAUSTFLOAT(fRec47[0]); output20[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (fSlow95 * fTemp25); + double fTemp31 = (fSlow97 * fTemp25); fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph21 = FAUSTFLOAT(fRec48[0]); output21[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (fSlow96 * fTemp25); + double fTemp32 = (fSlow98 * fTemp25); fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph22 = FAUSTFLOAT(fRec49[0]); output22[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (fSlow97 * fTemp25); + double fTemp33 = (fSlow99 * fTemp25); fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph23 = FAUSTFLOAT(fRec50[0]); output23[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (fSlow98 * fTemp25); + double fTemp34 = (fSlow100 * fTemp25); fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph24 = FAUSTFLOAT(fRec51[0]); output24[i] = FAUSTFLOAT(fTemp34); @@ -1595,10 +1664,10 @@ class mydsp : public dsp { fRec2[1] = fRec2[0]; fRec6[1] = fRec6[0]; fRec7[1] = fRec7[0]; - fRec11[1] = fRec11[0]; - fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; fRec9[1] = fRec9[0]; + fRec12[1] = fRec12[0]; fVec0[1] = fVec0[0]; fRec13[1] = fRec13[0]; fRec8[1] = fRec8[0]; @@ -1622,16 +1691,16 @@ class mydsp : public dsp { fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; + fRec36[1] = fRec36[0]; fRec37[1] = fRec37[0]; + fRec35[1] = fRec35[0]; fRec38[1] = fRec38[0]; - fRec36[1] = fRec36[0]; - fRec39[1] = fRec39[0]; fVec2[1] = fVec2[0]; + fRec39[1] = fRec39[0]; fRec40[1] = fRec40[0]; fRec41[1] = fRec41[0]; - fRec42[1] = fRec42[0]; - fRec35[1] = fRec35[0]; fRec34[1] = fRec34[0]; + fRec42[1] = fRec42[0]; fVec3[1] = fVec3[0]; fRec43[1] = fRec43[0]; fRec33[1] = fRec33[0]; @@ -1651,7 +1720,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1980,6 +2048,12 @@ FAUST_EXPORT void load(InterfaceTable* inTable) #endif // NDEBUG } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncoder5.cpp b/source/HOAUGens/HOAEncoder5.cpp old mode 100755 new mode 100644 index 93eb7e4e04..e02348664c --- a/source/HOAUGens/HOAEncoder5.cpp +++ b/source/HOAUGens/HOAEncoder5.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder5" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.12 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,35 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); -} -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - -} -double mydsp_faustpower4_f(double value) { - return (((value * value) * value) * value); - -} -double mydsp_faustpower5_f(double value) { - return ((((value * value) * value) * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -638,15 +641,19 @@ class mydsp : public dsp { double fConst1; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fVslider0; - FAUSTFLOAT fVslider1; + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; - FAUSTFLOAT fVslider2; - FAUSTFLOAT fVslider3; double fConst2; double fConst3; + double fConst4; + double fConst5; + FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider3; + double fConst6; + double fConst7; double fRec5[2]; double fRec4[2]; double fRec3[2]; @@ -656,28 +663,39 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph2; double fRec7[2]; FAUSTFLOAT fVbargraph3; - double fConst4; - double fConst5; - double fRec11[2]; - double fRec12[2]; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; double fRec10[2]; + double fRec11[2]; double fRec9[2]; + double fRec12[2]; double fVec0[2]; double fRec13[2]; double fRec8[2]; FAUSTFLOAT fVbargraph4; + double fConst14; + double fConst15; + double fConst16; double fRec14[2]; FAUSTFLOAT fVbargraph5; double fRec15[2]; FAUSTFLOAT fVbargraph6; double fRec16[2]; FAUSTFLOAT fVbargraph7; + double fConst17; double fRec17[2]; FAUSTFLOAT fVbargraph8; - double fConst6; - double fConst7; - double fConst8; - double fConst9; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; double fRec22[2]; double fRec23[2]; double fRec21[2]; @@ -689,64 +707,79 @@ class mydsp : public dsp { double fRec19[2]; double fRec18[2]; FAUSTFLOAT fVbargraph9; + double fConst25; + double fConst26; + double fConst27; double fRec27[2]; FAUSTFLOAT fVbargraph10; + double fConst28; double fRec28[2]; FAUSTFLOAT fVbargraph11; double fRec29[2]; FAUSTFLOAT fVbargraph12; double fRec30[2]; FAUSTFLOAT fVbargraph13; + double fConst29; double fRec31[2]; FAUSTFLOAT fVbargraph14; double fRec32[2]; FAUSTFLOAT fVbargraph15; - double fConst10; - double fConst11; - double fConst12; - double fConst13; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fRec36[2]; double fRec37[2]; + double fRec35[2]; double fRec38[2]; - double fRec36[2]; - double fRec39[2]; double fVec2[2]; + double fRec39[2]; + double fConst36; double fRec40[2]; double fRec41[2]; - double fRec42[2]; - double fRec35[2]; double fRec34[2]; + double fRec42[2]; double fVec3[2]; double fRec43[2]; double fRec33[2]; FAUSTFLOAT fVbargraph16; + double fConst37; + double fConst38; double fRec44[2]; FAUSTFLOAT fVbargraph17; + double fConst39; + double fConst40; double fRec45[2]; FAUSTFLOAT fVbargraph18; + double fConst41; double fRec46[2]; FAUSTFLOAT fVbargraph19; double fRec47[2]; FAUSTFLOAT fVbargraph20; double fRec48[2]; FAUSTFLOAT fVbargraph21; + double fConst42; double fRec49[2]; FAUSTFLOAT fVbargraph22; double fRec50[2]; FAUSTFLOAT fVbargraph23; double fRec51[2]; FAUSTFLOAT fVbargraph24; - double fConst14; - double fConst15; - double fConst16; - double fConst17; - double fConst18; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; double fRec57[2]; double fRec58[2]; double fRec56[2]; double fRec59[2]; double fVec4[2]; double fRec60[2]; - double fConst19; + double fConst49; double fRec61[2]; double fRec62[2]; double fRec55[2]; @@ -758,18 +791,24 @@ class mydsp : public dsp { double fRec53[2]; double fRec52[2]; FAUSTFLOAT fVbargraph25; + double fConst50; double fRec66[2]; FAUSTFLOAT fVbargraph26; + double fConst51; double fRec67[2]; FAUSTFLOAT fVbargraph27; + double fConst52; + double fConst53; double fRec68[2]; FAUSTFLOAT fVbargraph28; + double fConst54; double fRec69[2]; FAUSTFLOAT fVbargraph29; double fRec70[2]; FAUSTFLOAT fVbargraph30; double fRec71[2]; FAUSTFLOAT fVbargraph31; + double fConst55; double fRec72[2]; FAUSTFLOAT fVbargraph32; double fRec73[2]; @@ -786,31 +825,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncoder5"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1000,36 +1039,72 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); - fConst2 = (340.0 / fConst0); - fConst3 = (170.0 / fConst0); - fConst4 = (510.0 / fConst0); - fConst5 = (1020.0 / fConst0); - fConst6 = (789.54302057287055 / fConst0); - fConst7 = (394.77151028643527 / fConst0); - fConst8 = (625.22848971356643 / fConst0); - fConst9 = (1250.4569794271329 / fConst0); - fConst10 = (984.71160495892411 / fConst0); - fConst11 = (1969.4232099178482 / fConst0); - fConst12 = (715.28839504107589 / fConst0); - fConst13 = (1430.5767900821518 / fConst0); - fConst14 = (1239.8911224120607 / fConst0); - fConst15 = (619.94556120603033 / fConst0); - fConst16 = (1139.6651757122002 / fConst0); - fConst17 = (790.3892630817644 / fConst0); - fConst18 = (1580.7785261635288 / fConst0); - fConst19 = (2279.3303514244003 / fConst0); + fConst2 = double(tgamma(1.0)); + fConst3 = double(tgamma(3.0)); + fConst4 = double(tgamma(1.5)); + fConst5 = (1.5957691216057308 * (sqrt((3.0 * (fConst2 / fConst3))) * fConst4)); + fConst6 = (340.0 / fConst0); + fConst7 = (170.0 / fConst0); + fConst8 = double(tgamma(5.0)); + fConst9 = double(tgamma(2.5)); + fConst10 = (sqrt((5.0 * (fConst2 / fConst8))) * fConst9); + fConst11 = (6.3830764864229232 * fConst10); + fConst12 = (510.0 / fConst0); + fConst13 = (1020.0 / fConst0); + fConst14 = double(tgamma(2.0)); + fConst15 = double(tgamma(4.0)); + fConst16 = (4.7873073648171927 * (fConst4 * sqrt((5.0 * (fConst14 / fConst15))))); + fConst17 = (3.1915382432114616 * fConst10); + fConst18 = double(tgamma(7.0)); + fConst19 = double(tgamma(3.5)); + fConst20 = (6.3830764864229232 * (sqrt((7.0 * (fConst2 / fConst18))) * fConst19)); + fConst21 = (789.54302057287055 / fConst0); + fConst22 = (394.77151028643527 / fConst0); + fConst23 = (625.22848971356643 / fConst0); + fConst24 = (1250.4569794271329 / fConst0); + fConst25 = double(tgamma(6.0)); + fConst26 = (fConst9 * sqrt((7.0 * (fConst14 / fConst25)))); + fConst27 = (31.915382432114615 * fConst26); + fConst28 = (0.70710678118654757 * (fConst4 * sqrt((7.0 * (fConst3 / fConst8))))); + fConst29 = (15.957691216057308 * fConst26); + fConst30 = double(tgamma(9.0)); + fConst31 = double(tgamma(4.5)); + fConst32 = (12.766152972845846 * (sqrt((9.0 * (fConst2 / fConst30))) * fConst31)); + fConst33 = (984.71160495892411 / fConst0); + fConst34 = (715.28839504107589 / fConst0); + fConst35 = (1430.5767900821518 / fConst0); + fConst36 = (1969.4232099178482 / fConst0); + fConst37 = double(tgamma(8.0)); + fConst38 = (44.681535404960464 * (fConst19 * sqrt((9.0 * (fConst14 / fConst37))))); + fConst39 = (fConst9 * sqrt((9.0 * (fConst3 / fConst18)))); + fConst40 = (1.4142135623730951 * fConst39); + fConst41 = (0.47140452079103168 * (fConst4 * sqrt((9.0 * (fConst15 / fConst25))))); + fConst42 = (0.70710678118654757 * fConst39); + fConst43 = (25.532305945691693 * (sqrt((11.0 * (fConst2 / double(tgamma(11.0))))) * double(tgamma(5.5)))); + fConst44 = (1239.8911224120607 / fConst0); + fConst45 = (619.94556120603033 / fConst0); + fConst46 = (1139.6651757122002 / fConst0); + fConst47 = (790.3892630817644 / fConst0); + fConst48 = (1580.7785261635288 / fConst0); + fConst49 = (2279.3303514244003 / fConst0); + fConst50 = (114.89537675561263 * (fConst31 * sqrt((11.0 * (fConst14 / double(tgamma(10.0))))))); + fConst51 = (0.70710678118654757 * (fConst19 * sqrt((11.0 * (fConst3 / fConst30))))); + fConst52 = (fConst9 * sqrt((11.0 * (fConst15 / fConst37)))); + fConst53 = (0.94280904158206336 * fConst52); + fConst54 = (0.35355339059327379 * (fConst4 * sqrt((11.0 * (fConst8 / fConst18))))); + fConst55 = (0.47140452079103168 * fConst52); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fVslider0 = FAUSTFLOAT(2.0); - fVslider1 = FAUSTFLOAT(0.0); - fVslider2 = FAUSTFLOAT(0.0); - fVslider3 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -1067,19 +1142,19 @@ class mydsp : public dsp { } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec11[l8] = 0.0; + fRec10[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec11[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec9[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec9[l11] = 0.0; + fRec12[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -1175,19 +1250,19 @@ class mydsp : public dsp { } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec37[l35] = 0.0; + fRec36[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec38[l36] = 0.0; + fRec37[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec36[l37] = 0.0; + fRec35[l37] = 0.0; } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec39[l38] = 0.0; + fRec38[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { @@ -1195,23 +1270,23 @@ class mydsp : public dsp { } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - fRec40[l40] = 0.0; + fRec39[l40] = 0.0; } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec41[l41] = 0.0; + fRec40[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec42[l42] = 0.0; + fRec41[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec35[l43] = 0.0; + fRec34[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec34[l44] = 0.0; + fRec42[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { @@ -1378,187 +1453,195 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openHorizontalBox("HOAEncoder5"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fVslider1, "1", ""); - ui_interface->declare(&fVslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(0, "2", ""); - ui_interface->openVerticalBox("Spherical Wave Encoding"); + ui_interface->openVerticalBox("Parameters"); + ui_interface->openHorizontalBox("Source 0"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider2, "0+3", ""); + ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider3, "0+4", ""); + ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(0, "0+5", ""); + ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); ui_interface->closeBox(); - ui_interface->declare(&fVslider2, "3", ""); - ui_interface->addVerticalSlider("Source Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider3, "4", ""); - ui_interface->addVerticalSlider("Source Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); - ui_interface->declare(&fVslider0, "5", ""); - ui_interface->addVerticalSlider("Source Radius", &fVslider0, 2.0, 0.5, 10.0, 0.01); - ui_interface->declare(&fEntry0, "6", ""); - ui_interface->addNumEntry("Speakers Radius", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); + ui_interface->declare(&fEntry0, "~", ""); + ui_interface->addNumEntry("Speaker Radius 0", &fEntry0, 1.0700000000000001, 0.5, 10.0, 0.01); ui_interface->closeBox(); - ui_interface->declare(0, "7", ""); - ui_interface->openVerticalBox("Outputs"); + ui_interface->closeBox(); + ui_interface->declare(0, "~", ""); + ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e6a6e0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceef8d4d90", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e7c830", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceef8e7ea0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e82800", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceef8ecbc0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e889b0", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceef8f2090", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ea0010", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa0ab00", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ea64e0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa11c00", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ead270", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa170e0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2eb2f80", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa1c4a0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2eb95e0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa228e0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ed73b0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa3d560", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2edd290", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa43f50", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ee3dc0", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa4a3f0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2eea190", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa4fb50", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ef0240", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa54b30", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ef6200", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa5a4d0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2efcb00", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa5ff10", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f21340", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa80a50", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f27300", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa871d0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f2df10", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa8d9d0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f345e0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa93e50", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f3b1c0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa99840", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f41430", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefa9e980", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f47780", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefaa3fa0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f4d9d0", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefaa93c0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f54360", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefaaf010", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f80530", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefad5dc0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f865d0", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefadc530", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f8d0b0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefae29b0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f935f0", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefae9190", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2f9a880", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefaefa70", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2fa19d0", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefaf5560", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2fa7e00", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefafa800", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2fae4f0", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefb03f00", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2fb4ae0", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefb09300", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2fbafd0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefb0e7b0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2fc19e0", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x7fceefb141f0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1605,344 +1688,349 @@ class mydsp : public dsp { FAUSTFLOAT* output34 = outputs[34]; FAUSTFLOAT* output35 = outputs[35]; double fSlow0 = double(fCheckbox0); - double fSlow1 = double(fEntry0); - double fSlow2 = double(fVslider0); - double fSlow3 = (1.0 - fSlow0); - double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); - double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow6 = double(fVslider2); - double fSlow7 = sin(fSlow6); - double fSlow8 = double(fVslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (1.7320508075688772 * (fSlow7 * fSlow9)); - double fSlow11 = (fConst3 / fSlow2); - double fSlow12 = (fSlow11 + 1.0); - double fSlow13 = (fConst2 / (fSlow12 * fSlow2)); - double fSlow14 = (fConst3 / fSlow1); - double fSlow15 = (1.0 / (fSlow14 + 1.0)); - double fSlow16 = (((fSlow12 * fSlow0) * fSlow1) / fSlow2); - double fSlow17 = (fConst2 / fSlow1); - double fSlow18 = sin(fSlow8); - double fSlow19 = (1.7320508075688772 * fSlow18); - double fSlow20 = cos(fSlow6); - double fSlow21 = (1.7320508075688772 * (fSlow20 * fSlow9)); - double fSlow22 = (2.0 * fSlow6); - double fSlow23 = sin(fSlow22); - double fSlow24 = mydsp_faustpower2_f(fSlow9); - double fSlow25 = (fSlow23 * fSlow24); - double fSlow26 = (1.9364916731037085 * fSlow25); - double fSlow27 = mydsp_faustpower2_f(fSlow11); - double fSlow28 = (((fConst4 / fSlow2) + (3.0 * fSlow27)) + 1.0); - double fSlow29 = (1.0 / fSlow28); - double fSlow30 = (12.0 * fSlow27); - double fSlow31 = ((fConst5 / fSlow2) + fSlow30); - double fSlow32 = mydsp_faustpower2_f(fSlow14); - double fSlow33 = (1.0 / (((fConst4 / fSlow1) + (3.0 * fSlow32)) + 1.0)); - double fSlow34 = (((fSlow28 * fSlow0) * fSlow1) / fSlow2); - double fSlow35 = (12.0 * fSlow32); - double fSlow36 = (fSlow35 + (fConst5 / fSlow1)); - double fSlow37 = sin((2.0 * fSlow8)); - double fSlow38 = (1.9364916731037085 * (fSlow7 * fSlow37)); - double fSlow39 = mydsp_faustpower2_f(fSlow18); - double fSlow40 = ((3.0 * fSlow39) + -1.0); - double fSlow41 = (1.1180339887498949 * fSlow40); - double fSlow42 = (1.9364916731037085 * (fSlow20 * fSlow37)); - double fSlow43 = cos(fSlow22); - double fSlow44 = (fSlow43 * fSlow24); - double fSlow45 = (1.9364916731037085 * fSlow44); - double fSlow46 = (3.0 * fSlow6); - double fSlow47 = sin(fSlow46); - double fSlow48 = mydsp_faustpower3_f(fSlow9); - double fSlow49 = (fSlow47 * fSlow48); - double fSlow50 = (2.0916500663351889 * fSlow49); - double fSlow51 = ((fConst7 / fSlow2) + 1.0); - double fSlow52 = (fConst6 / (fSlow51 * fSlow2)); - double fSlow53 = (1.0 / ((fConst7 / fSlow1) + 1.0)); - double fSlow54 = (1.0 / (((fConst8 / fSlow1) + (6.4594326934833797 * fSlow32)) + 1.0)); - double fSlow55 = (((fConst8 / fSlow2) + (6.4594326934833797 * fSlow27)) + 1.0); - double fSlow56 = (((fSlow55 * fSlow0) * fSlow1) / fSlow2); - double fSlow57 = (25.837730773933519 * fSlow32); - double fSlow58 = (fSlow57 + (fConst9 / fSlow1)); - double fSlow59 = (1.0 / fSlow55); - double fSlow60 = (25.837730773933519 * fSlow27); - double fSlow61 = ((fConst9 / fSlow2) + fSlow60); - double fSlow62 = (fConst6 / fSlow1); - double fSlow63 = (5.123475382979799 * (fSlow25 * fSlow18)); - double fSlow64 = (5.0 * fSlow39); - double fSlow65 = (fSlow64 + -1.0); - double fSlow66 = (1.6201851746019651 * ((fSlow7 * fSlow65) * fSlow9)); - double fSlow67 = (1.3228756555322954 * ((fSlow64 + -3.0) * fSlow18)); - double fSlow68 = (1.6201851746019651 * ((fSlow20 * fSlow65) * fSlow9)); - double fSlow69 = (5.123475382979799 * (fSlow44 * fSlow18)); - double fSlow70 = cos(fSlow46); - double fSlow71 = (fSlow70 * fSlow48); - double fSlow72 = (2.0916500663351889 * fSlow71); - double fSlow73 = (4.0 * fSlow6); - double fSlow74 = mydsp_faustpower4_f(fSlow9); - double fSlow75 = (sin(fSlow73) * fSlow74); - double fSlow76 = (2.2185299186623562 * fSlow75); - double fSlow77 = (((fConst10 / fSlow2) + (9.1401308902779004 * fSlow27)) + 1.0); - double fSlow78 = (1.0 / fSlow77); - double fSlow79 = (36.560523561111602 * fSlow27); - double fSlow80 = ((fConst11 / fSlow2) + fSlow79); - double fSlow81 = (1.0 / (((fConst10 / fSlow1) + (9.1401308902779004 * fSlow32)) + 1.0)); - double fSlow82 = (1.0 / (((fConst12 / fSlow1) + (11.4878004768713 * fSlow32)) + 1.0)); - double fSlow83 = (((fConst12 / fSlow2) + (11.4878004768713 * fSlow27)) + 1.0); - double fSlow84 = (((fSlow83 * fSlow0) * fSlow1) / fSlow2); - double fSlow85 = (45.951201907485199 * fSlow32); - double fSlow86 = (fSlow85 + (fConst13 / fSlow1)); - double fSlow87 = (1.0 / fSlow83); - double fSlow88 = (45.951201907485199 * fSlow27); - double fSlow89 = ((fConst13 / fSlow2) + fSlow88); - double fSlow90 = (36.560523561111602 * fSlow32); - double fSlow91 = (fSlow90 + (fConst11 / fSlow1)); - double fSlow92 = (6.2749501990055663 * (fSlow49 * fSlow18)); - double fSlow93 = (7.0 * fSlow39); - double fSlow94 = (fSlow93 + -1.0); - double fSlow95 = (1.6770509831248424 * ((fSlow23 * fSlow94) * fSlow24)); - double fSlow96 = (fSlow93 + -3.0); - double fSlow97 = (1.1858541225631423 * ((fSlow7 * fSlow96) * fSlow37)); - double fSlow98 = (0.375 * ((((35.0 * fSlow39) + -30.0) * fSlow39) + 3.0)); - double fSlow99 = (1.1858541225631423 * ((fSlow20 * fSlow96) * fSlow37)); - double fSlow100 = (1.6770509831248424 * ((fSlow43 * fSlow94) * fSlow24)); - double fSlow101 = (6.2749501990055663 * (fSlow71 * fSlow18)); - double fSlow102 = (cos(fSlow73) * fSlow74); - double fSlow103 = (2.2185299186623562 * fSlow102); - double fSlow104 = (5.0 * fSlow6); - double fSlow105 = mydsp_faustpower5_f(fSlow9); - double fSlow106 = (2.3268138086232857 * (sin(fSlow104) * fSlow105)); - double fSlow107 = ((fConst15 / fSlow2) + 1.0); - double fSlow108 = (fConst14 / (fSlow107 * fSlow2)); - double fSlow109 = (1.0 / ((fConst15 / fSlow1) + 1.0)); - double fSlow110 = (1.0 / (((fConst16 / fSlow1) + (14.272480513280099 * fSlow32)) + 1.0)); - double fSlow111 = (((fConst16 / fSlow2) + (14.272480513280099 * fSlow27)) + 1.0); - double fSlow112 = (1.0 / (((fConst17 / fSlow1) + (18.1563153134523 * fSlow32)) + 1.0)); - double fSlow113 = (((fConst17 / fSlow2) + (18.1563153134523 * fSlow27)) + 1.0); - double fSlow114 = (((fSlow113 * fSlow0) * fSlow1) / fSlow2); - double fSlow115 = (72.6252612538092 * fSlow32); - double fSlow116 = (fSlow115 + (fConst18 / fSlow1)); - double fSlow117 = (1.0 / fSlow113); - double fSlow118 = (72.6252612538092 * fSlow27); - double fSlow119 = ((fConst18 / fSlow2) + fSlow118); - double fSlow120 = (57.089922053120397 * fSlow32); - double fSlow121 = (fSlow120 + (fConst19 / fSlow1)); - double fSlow122 = (1.0 / fSlow111); - double fSlow123 = (57.089922053120397 * fSlow27); - double fSlow124 = ((fConst19 / fSlow2) + fSlow123); - double fSlow125 = (fConst14 / fSlow1); - double fSlow126 = (7.3580313263807184 * (fSlow75 * fSlow18)); - double fSlow127 = ((9.0 * fSlow39) + -1.0); - double fSlow128 = (1.734304615688951 * ((fSlow47 * fSlow127) * fSlow48)); - double fSlow129 = (8.4963227339832148 * (((fSlow23 * fSlow40) * fSlow24) * fSlow18)); - double fSlow130 = ((((21.0 * fSlow39) + -14.0) * fSlow39) + 1.0); - double fSlow131 = (1.6056540723331412 * ((fSlow7 * fSlow130) * fSlow9)); - double fSlow132 = (0.41457809879442498 * (((((63.0 * fSlow39) + -70.0) * fSlow39) + 15.0) * fSlow18)); - double fSlow133 = (1.6056540723331412 * ((fSlow20 * fSlow130) * fSlow9)); - double fSlow134 = (8.4963227339832148 * (((fSlow43 * fSlow40) * fSlow24) * fSlow18)); - double fSlow135 = (1.734304615688951 * ((fSlow70 * fSlow127) * fSlow48)); - double fSlow136 = (7.3580313263807184 * (fSlow102 * fSlow18)); - double fSlow137 = (2.3268138086232857 * (cos(fSlow104) * fSlow105)); + double fSlow1 = (1.0 - fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fSlow0 * fSlow2); + double fSlow4 = double(fHslider0); + double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); + double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = sin(double(fHslider3)); + double fSlow10 = mydsp_faustpower2_f(fSlow9); + double fSlow11 = (1.0 - fSlow10); + double fSlow12 = pow(fSlow11, 0.5); + double fSlow13 = (fSlow8 * fSlow12); + double fSlow14 = (fConst5 * fSlow13); + double fSlow15 = (fConst7 / fSlow4); + double fSlow16 = (fSlow15 + 1.0); + double fSlow17 = (fConst6 / (fSlow4 * fSlow16)); + double fSlow18 = (fConst7 / fSlow2); + double fSlow19 = (1.0 / (fSlow18 + 1.0)); + double fSlow20 = ((fSlow3 * fSlow16) / fSlow4); + double fSlow21 = (fConst6 / fSlow2); + double fSlow22 = (1.7320508075688772 * fSlow9); + double fSlow23 = cos(fSlow7); + double fSlow24 = (fSlow23 * fSlow12); + double fSlow25 = (fConst5 * fSlow24); + double fSlow26 = ((fSlow23 * fSlow11) * fSlow8); + double fSlow27 = (fConst11 * fSlow26); + double fSlow28 = mydsp_faustpower2_f(fSlow18); + double fSlow29 = (1.0 / (((fConst12 / fSlow2) + (3.0 * fSlow28)) + 1.0)); + double fSlow30 = mydsp_faustpower2_f(fSlow15); + double fSlow31 = (((fConst12 / fSlow4) + (3.0 * fSlow30)) + 1.0); + double fSlow32 = ((fSlow3 * fSlow31) / fSlow4); + double fSlow33 = (12.0 * fSlow28); + double fSlow34 = (fSlow33 + (fConst13 / fSlow2)); + double fSlow35 = (1.0 / fSlow31); + double fSlow36 = (12.0 * fSlow30); + double fSlow37 = ((fConst13 / fSlow4) + fSlow36); + double fSlow38 = (fSlow9 * fSlow8); + double fSlow39 = (fSlow38 * fSlow12); + double fSlow40 = (fConst16 * fSlow39); + double fSlow41 = ((3.0 * fSlow10) + -1.0); + double fSlow42 = (1.1180339887498949 * fSlow41); + double fSlow43 = (fSlow23 * fSlow9); + double fSlow44 = (fSlow43 * fSlow12); + double fSlow45 = (fConst16 * fSlow44); + double fSlow46 = mydsp_faustpower2_f(fSlow23); + double fSlow47 = ((2.0 * fSlow46) + -1.0); + double fSlow48 = (fSlow11 * fSlow47); + double fSlow49 = (fConst17 * fSlow48); + double fSlow50 = pow(fSlow11, 1.5); + double fSlow51 = ((4.0 * fSlow46) + -1.0); + double fSlow52 = ((fSlow8 * fSlow50) * fSlow51); + double fSlow53 = (fConst20 * fSlow52); + double fSlow54 = ((fConst22 / fSlow4) + 1.0); + double fSlow55 = (fConst21 / (fSlow4 * fSlow54)); + double fSlow56 = (1.0 / ((fConst22 / fSlow2) + 1.0)); + double fSlow57 = (1.0 / (((fConst23 / fSlow2) + (6.4594326934833797 * fSlow28)) + 1.0)); + double fSlow58 = (((fConst23 / fSlow4) + (6.4594326934833797 * fSlow30)) + 1.0); + double fSlow59 = ((fSlow3 * fSlow58) / fSlow4); + double fSlow60 = (25.837730773933519 * fSlow28); + double fSlow61 = (fSlow60 + (fConst24 / fSlow2)); + double fSlow62 = (1.0 / fSlow58); + double fSlow63 = (25.837730773933519 * fSlow30); + double fSlow64 = ((fConst24 / fSlow4) + fSlow63); + double fSlow65 = (fConst21 / fSlow2); + double fSlow66 = ((fSlow43 * fSlow11) * fSlow8); + double fSlow67 = (fConst27 * fSlow66); + double fSlow68 = ((16.925687506432688 * fSlow10) + -3.3851375012865379); + double fSlow69 = (fConst28 * (fSlow13 * fSlow68)); + double fSlow70 = ((2.5 * fSlow41) + -2.0); + double fSlow71 = (0.88191710368819687 * (fSlow9 * fSlow70)); + double fSlow72 = (fConst28 * (fSlow24 * fSlow68)); + double fSlow73 = ((fSlow9 * fSlow11) * fSlow47); + double fSlow74 = (fConst29 * fSlow73); + double fSlow75 = ((2.0 * fSlow47) + -1.0); + double fSlow76 = ((fSlow23 * fSlow50) * fSlow75); + double fSlow77 = (fConst20 * fSlow76); + double fSlow78 = mydsp_faustpower2_f(fSlow11); + double fSlow79 = (0.0 - (2.0 * (fSlow23 * (1.0 - fSlow51)))); + double fSlow80 = (fConst32 * ((fSlow78 * fSlow8) * fSlow79)); + double fSlow81 = (1.0 / (((fConst33 / fSlow2) + (9.1401308902779004 * fSlow28)) + 1.0)); + double fSlow82 = (((fConst33 / fSlow4) + (9.1401308902779004 * fSlow30)) + 1.0); + double fSlow83 = (1.0 / (((fConst34 / fSlow2) + (11.4878004768713 * fSlow28)) + 1.0)); + double fSlow84 = (((fConst34 / fSlow4) + (11.4878004768713 * fSlow30)) + 1.0); + double fSlow85 = ((fSlow3 * fSlow84) / fSlow4); + double fSlow86 = (45.951201907485199 * fSlow28); + double fSlow87 = (fSlow86 + (fConst35 / fSlow2)); + double fSlow88 = (1.0 / fSlow84); + double fSlow89 = (45.951201907485199 * fSlow30); + double fSlow90 = ((fConst35 / fSlow4) + fSlow89); + double fSlow91 = (36.560523561111602 * fSlow28); + double fSlow92 = (fSlow91 + (fConst36 / fSlow2)); + double fSlow93 = (1.0 / fSlow82); + double fSlow94 = (36.560523561111602 * fSlow30); + double fSlow95 = ((fConst36 / fSlow4) + fSlow94); + double fSlow96 = (fConst38 * ((fSlow38 * fSlow50) * fSlow51)); + double fSlow97 = ((78.986541696685876 * fSlow10) + -11.283791670955125); + double fSlow98 = (fConst40 * (fSlow26 * fSlow97)); + double fSlow99 = ((3.5 * fSlow68) + -13.540550005146152); + double fSlow100 = (fConst41 * (fSlow39 * fSlow99)); + double fSlow101 = ((2.333333333333333 * (fSlow10 * fSlow70)) - (1.5 * fSlow41)); + double fSlow102 = (0.75 * fSlow101); + double fSlow103 = (fConst41 * (fSlow44 * fSlow99)); + double fSlow104 = (fConst42 * (fSlow48 * fSlow97)); + double fSlow105 = (fConst38 * ((fSlow43 * fSlow50) * fSlow75)); + double fSlow106 = (1.0 - (2.0 * (fSlow46 * (1.0 - fSlow75)))); + double fSlow107 = (fConst32 * (fSlow78 * fSlow106)); + double fSlow108 = pow(fSlow11, 2.5); + double fSlow109 = (fConst43 * ((fSlow8 * fSlow108) * ((fSlow23 * ((2.0 * fSlow79) - (4.0 * fSlow23))) + 1.0))); + double fSlow110 = ((fConst45 / fSlow4) + 1.0); + double fSlow111 = (fConst44 / (fSlow4 * fSlow110)); + double fSlow112 = (1.0 / ((fConst45 / fSlow2) + 1.0)); + double fSlow113 = (1.0 / (((fConst46 / fSlow2) + (14.272480513280099 * fSlow28)) + 1.0)); + double fSlow114 = (((fConst46 / fSlow4) + (14.272480513280099 * fSlow30)) + 1.0); + double fSlow115 = (1.0 / (((fConst47 / fSlow2) + (18.1563153134523 * fSlow28)) + 1.0)); + double fSlow116 = (((fConst47 / fSlow4) + (18.1563153134523 * fSlow30)) + 1.0); + double fSlow117 = ((fSlow3 * fSlow116) / fSlow4); + double fSlow118 = (72.6252612538092 * fSlow28); + double fSlow119 = (fSlow118 + (fConst48 / fSlow2)); + double fSlow120 = (1.0 / fSlow116); + double fSlow121 = (72.6252612538092 * fSlow30); + double fSlow122 = ((fConst48 / fSlow4) + fSlow121); + double fSlow123 = (57.089922053120397 * fSlow28); + double fSlow124 = (fSlow123 + (fConst49 / fSlow2)); + double fSlow125 = (1.0 / fSlow114); + double fSlow126 = (57.089922053120397 * fSlow30); + double fSlow127 = ((fConst49 / fSlow4) + fSlow126); + double fSlow128 = (fConst44 / fSlow2); + double fSlow129 = (fSlow9 * fSlow78); + double fSlow130 = (fConst50 * ((fSlow129 * fSlow8) * fSlow79)); + double fSlow131 = ((284.35155010806915 * fSlow10) + -31.594616678674353); + double fSlow132 = (fConst51 * (fSlow52 * fSlow131)); + double fSlow133 = ((4.5 * fSlow97) + -67.702750025730751); + double fSlow134 = (fConst53 * (fSlow66 * fSlow133)); + double fSlow135 = ((3.0 * (fSlow10 * fSlow99)) - (2.5 * fSlow68)); + double fSlow136 = (fConst54 * (fSlow13 * fSlow135)); + double fSlow137 = (0.66332495807108005 * (fSlow9 * ((2.25 * fSlow101) - (1.3333333333333333 * fSlow70)))); + double fSlow138 = (fConst54 * (fSlow24 * fSlow135)); + double fSlow139 = (fConst55 * (fSlow73 * fSlow133)); + double fSlow140 = (fConst51 * (fSlow76 * fSlow131)); + double fSlow141 = (fConst50 * (fSlow129 * fSlow106)); + double fSlow142 = (fConst43 * ((fSlow23 * fSlow108) * ((2.0 * fSlow106) - fSlow75))); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); - double fTemp0 = (fRec1[0] * double(input0[i])); - double fTemp1 = (fSlow4 * fTemp0); + fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); + double fTemp0 = (double(input0[i]) * fRec1[0]); + double fTemp1 = (fSlow5 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow15 * ((fSlow16 * fTemp0) - (fSlow17 * fRec5[0]))); + fRec4[0] = (fSlow19 * ((fSlow20 * fTemp0) - (fSlow21 * fRec5[0]))); fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = (fSlow3 * fTemp0); - double fTemp3 = ((fSlow13 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); - double fTemp4 = (fSlow10 * fTemp3); + double fTemp2 = (fSlow1 * fTemp0); + double fTemp3 = ((fSlow17 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); + double fTemp4 = (fSlow14 * fTemp3); fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph1 = FAUSTFLOAT(fRec2[0]); output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow19 * fTemp3); + double fTemp5 = (fSlow22 * fTemp3); fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph2 = FAUSTFLOAT(fRec6[0]); output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (fSlow21 * fTemp3); + double fTemp6 = (fSlow25 * fTemp3); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph3 = FAUSTFLOAT(fRec7[0]); output3[i] = FAUSTFLOAT(fTemp6); + fRec10[0] = (fRec10[1] + fRec9[1]); fRec11[0] = (fRec11[1] + fRec10[1]); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec10[0] = (fSlow33 * ((fSlow34 * fTemp0) - ((fSlow36 * fRec11[0]) + (fSlow35 * fRec12[0])))); - fRec9[0] = (fRec10[0] + fRec9[1]); - double fTemp7 = (fRec9[0] - fRec10[0]); + fRec9[0] = (fSlow29 * ((fSlow32 * fTemp0) - ((fSlow34 * fRec10[0]) + (fSlow33 * fRec11[0])))); + fRec12[0] = (fRec9[0] + fRec12[1]); + double fTemp7 = (fRec12[0] - fRec9[0]); fVec0[0] = fTemp7; fRec13[0] = (fRec13[1] + fVec0[1]); - double fTemp8 = ((fSlow29 * ((fSlow31 * fTemp7) + (fSlow30 * fRec13[0]))) + (fRec10[0] + fTemp2)); - double fTemp9 = (fSlow26 * fTemp8); + double fTemp8 = ((fRec9[0] + fTemp2) + (fSlow35 * ((fSlow37 * fTemp7) + (fSlow36 * fRec13[0])))); + double fTemp9 = (fSlow27 * fTemp8); fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph4 = FAUSTFLOAT(fRec8[0]); output4[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (fSlow38 * fTemp8); + double fTemp10 = (fSlow40 * fTemp8); fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph5 = FAUSTFLOAT(fRec14[0]); output5[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fSlow41 * fTemp8); + double fTemp11 = (fSlow42 * fTemp8); fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph6 = FAUSTFLOAT(fRec15[0]); output6[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (fSlow42 * fTemp8); + double fTemp12 = (fSlow45 * fTemp8); fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph7 = FAUSTFLOAT(fRec16[0]); output7[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (fSlow45 * fTemp8); + double fTemp13 = (fSlow49 * fTemp8); fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph8 = FAUSTFLOAT(fRec17[0]); output8[i] = FAUSTFLOAT(fTemp13); fRec22[0] = (fRec22[1] + fRec21[1]); fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow54 * ((fSlow56 * fTemp0) - ((fSlow58 * fRec22[0]) + (fSlow57 * fRec23[0])))); + fRec21[0] = (fSlow57 * ((fSlow59 * fTemp0) - ((fSlow61 * fRec22[0]) + (fSlow60 * fRec23[0])))); fRec24[0] = (fRec21[0] + fRec24[1]); double fTemp14 = (fRec24[0] - fRec21[0]); fVec1[0] = fTemp14; fRec25[0] = (fRec25[1] + fVec1[1]); fRec26[0] = (fRec26[1] + fRec20[1]); - fRec20[0] = (fSlow53 * ((fSlow51 * (fRec21[0] + (fSlow59 * ((fSlow61 * fTemp14) + (fSlow60 * fRec25[0]))))) - (fSlow62 * fRec26[0]))); + fRec20[0] = (fSlow56 * ((fSlow54 * (fRec21[0] + (fSlow62 * ((fSlow64 * fTemp14) + (fSlow63 * fRec25[0]))))) - (fSlow65 * fRec26[0]))); fRec19[0] = (fRec20[0] + fRec19[1]); - double fTemp15 = ((fSlow52 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); - double fTemp16 = (fSlow50 * fTemp15); + double fTemp15 = ((fSlow55 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); + double fTemp16 = (fSlow53 * fTemp15); fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph9 = FAUSTFLOAT(fRec18[0]); output9[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fSlow63 * fTemp15); + double fTemp17 = (fSlow67 * fTemp15); fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph10 = FAUSTFLOAT(fRec27[0]); output10[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (fSlow66 * fTemp15); + double fTemp18 = (fSlow69 * fTemp15); fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph11 = FAUSTFLOAT(fRec28[0]); output11[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (fSlow67 * fTemp15); + double fTemp19 = (fSlow71 * fTemp15); fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph12 = FAUSTFLOAT(fRec29[0]); output12[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (fSlow68 * fTemp15); + double fTemp20 = (fSlow72 * fTemp15); fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph13 = FAUSTFLOAT(fRec30[0]); output13[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (fSlow69 * fTemp15); + double fTemp21 = (fSlow74 * fTemp15); fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph14 = FAUSTFLOAT(fRec31[0]); output14[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (fSlow72 * fTemp15); + double fTemp22 = (fSlow77 * fTemp15); fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph15 = FAUSTFLOAT(fRec32[0]); output15[i] = FAUSTFLOAT(fTemp22); + fRec36[0] = (fRec36[1] + fRec35[1]); fRec37[0] = (fRec37[1] + fRec36[1]); - fRec38[0] = (fRec38[1] + fRec37[1]); - fRec36[0] = (fSlow82 * ((fSlow84 * fTemp0) - ((fSlow86 * fRec37[0]) + (fSlow85 * fRec38[0])))); - fRec39[0] = (fRec36[0] + fRec39[1]); - double fTemp23 = (fRec39[0] - fRec36[0]); + fRec35[0] = (fSlow83 * ((fSlow85 * fTemp0) - ((fSlow87 * fRec36[0]) + (fSlow86 * fRec37[0])))); + fRec38[0] = (fRec35[0] + fRec38[1]); + double fTemp23 = (fRec38[0] - fRec35[0]); fVec2[0] = fTemp23; - fRec40[0] = (fRec40[1] + fVec2[1]); - fRec41[0] = (fRec41[1] + fRec35[1]); - fRec42[0] = (fRec42[1] + fRec41[1]); - fRec35[0] = (fSlow81 * ((fSlow77 * (fRec36[0] + (fSlow87 * ((fSlow89 * fTemp23) + (fSlow88 * fRec40[0]))))) - ((fSlow91 * fRec41[0]) + (fSlow90 * fRec42[0])))); - fRec34[0] = (fRec35[0] + fRec34[1]); - double fTemp24 = (fRec34[0] - fRec35[0]); + fRec39[0] = (fRec39[1] + fVec2[1]); + fRec40[0] = (fRec40[1] + fRec34[1]); + fRec41[0] = (fRec41[1] + fRec40[1]); + fRec34[0] = (fSlow81 * ((fSlow82 * (fRec35[0] + (fSlow88 * ((fSlow90 * fTemp23) + (fSlow89 * fRec39[0]))))) - ((fSlow92 * fRec40[0]) + (fSlow91 * fRec41[0])))); + fRec42[0] = (fRec34[0] + fRec42[1]); + double fTemp24 = (fRec42[0] - fRec34[0]); fVec3[0] = fTemp24; fRec43[0] = (fRec43[1] + fVec3[1]); - double fTemp25 = ((fSlow78 * ((fSlow80 * fTemp24) + (fSlow79 * fRec43[0]))) + (fRec35[0] + fTemp2)); - double fTemp26 = (fSlow76 * fTemp25); + double fTemp25 = ((fRec34[0] + fTemp2) + (fSlow93 * ((fSlow95 * fTemp24) + (fSlow94 * fRec43[0])))); + double fTemp26 = (fSlow80 * fTemp25); fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph16 = FAUSTFLOAT(fRec33[0]); output16[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (fSlow92 * fTemp25); + double fTemp27 = (fSlow96 * fTemp25); fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph17 = FAUSTFLOAT(fRec44[0]); output17[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (fSlow95 * fTemp25); + double fTemp28 = (fSlow98 * fTemp25); fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph18 = FAUSTFLOAT(fRec45[0]); output18[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (fSlow97 * fTemp25); + double fTemp29 = (fSlow100 * fTemp25); fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph19 = FAUSTFLOAT(fRec46[0]); output19[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fSlow98 * fTemp25); + double fTemp30 = (fSlow102 * fTemp25); fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph20 = FAUSTFLOAT(fRec47[0]); output20[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (fSlow99 * fTemp25); + double fTemp31 = (fSlow103 * fTemp25); fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph21 = FAUSTFLOAT(fRec48[0]); output21[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (fSlow100 * fTemp25); + double fTemp32 = (fSlow104 * fTemp25); fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph22 = FAUSTFLOAT(fRec49[0]); output22[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (fSlow101 * fTemp25); + double fTemp33 = (fSlow105 * fTemp25); fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph23 = FAUSTFLOAT(fRec50[0]); output23[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (fSlow103 * fTemp25); + double fTemp34 = (fSlow107 * fTemp25); fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph24 = FAUSTFLOAT(fRec51[0]); output24[i] = FAUSTFLOAT(fTemp34); fRec57[0] = (fRec57[1] + fRec56[1]); fRec58[0] = (fRec58[1] + fRec57[1]); - fRec56[0] = (fSlow112 * ((fSlow114 * fTemp0) - ((fSlow116 * fRec57[0]) + (fSlow115 * fRec58[0])))); + fRec56[0] = (fSlow115 * ((fSlow117 * fTemp0) - ((fSlow119 * fRec57[0]) + (fSlow118 * fRec58[0])))); fRec59[0] = (fRec56[0] + fRec59[1]); double fTemp35 = (fRec59[0] - fRec56[0]); fVec4[0] = fTemp35; fRec60[0] = (fRec60[1] + fVec4[1]); fRec61[0] = (fRec61[1] + fRec55[1]); fRec62[0] = (fRec62[1] + fRec61[1]); - fRec55[0] = (fSlow110 * ((fSlow111 * (fRec56[0] + (fSlow117 * ((fSlow119 * fTemp35) + (fSlow118 * fRec60[0]))))) - ((fSlow121 * fRec61[0]) + (fSlow120 * fRec62[0])))); + fRec55[0] = (fSlow113 * ((fSlow114 * (fRec56[0] + (fSlow120 * ((fSlow122 * fTemp35) + (fSlow121 * fRec60[0]))))) - ((fSlow124 * fRec61[0]) + (fSlow123 * fRec62[0])))); fRec63[0] = (fRec55[0] + fRec63[1]); double fTemp36 = (fRec63[0] - fRec55[0]); fVec5[0] = fTemp36; fRec64[0] = (fRec64[1] + fVec5[1]); fRec65[0] = (fRec65[1] + fRec54[1]); - fRec54[0] = (fSlow109 * ((fSlow107 * (fRec55[0] + (fSlow122 * ((fSlow124 * fTemp36) + (fSlow123 * fRec64[0]))))) - (fSlow125 * fRec65[0]))); + fRec54[0] = (fSlow112 * ((fSlow110 * (fRec55[0] + (fSlow125 * ((fSlow127 * fTemp36) + (fSlow126 * fRec64[0]))))) - (fSlow128 * fRec65[0]))); fRec53[0] = (fRec54[0] + fRec53[1]); - double fTemp37 = ((fSlow108 * (fRec53[0] - fRec54[0])) + (fRec54[0] + fTemp2)); - double fTemp38 = (fSlow106 * fTemp37); + double fTemp37 = ((fSlow111 * (fRec53[0] - fRec54[0])) + (fRec54[0] + fTemp2)); + double fTemp38 = (fSlow109 * fTemp37); fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); fVbargraph25 = FAUSTFLOAT(fRec52[0]); output25[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (fSlow126 * fTemp37); + double fTemp39 = (fSlow130 * fTemp37); fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph26 = FAUSTFLOAT(fRec66[0]); output26[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (fSlow128 * fTemp37); + double fTemp40 = (fSlow132 * fTemp37); fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph27 = FAUSTFLOAT(fRec67[0]); output27[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (fSlow129 * fTemp37); + double fTemp41 = (fSlow134 * fTemp37); fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph28 = FAUSTFLOAT(fRec68[0]); output28[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (fSlow131 * fTemp37); + double fTemp42 = (fSlow136 * fTemp37); fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph29 = FAUSTFLOAT(fRec69[0]); output29[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (fSlow132 * fTemp37); + double fTemp43 = (fSlow137 * fTemp37); fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph30 = FAUSTFLOAT(fRec70[0]); output30[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (fSlow133 * fTemp37); + double fTemp44 = (fSlow138 * fTemp37); fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph31 = FAUSTFLOAT(fRec71[0]); output31[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (fSlow134 * fTemp37); + double fTemp45 = (fSlow139 * fTemp37); fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph32 = FAUSTFLOAT(fRec72[0]); output32[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (fSlow135 * fTemp37); + double fTemp46 = (fSlow140 * fTemp37); fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph33 = FAUSTFLOAT(fRec73[0]); output33[i] = FAUSTFLOAT(fTemp46); - double fTemp47 = (fSlow136 * fTemp37); + double fTemp47 = (fSlow141 * fTemp37); fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph34 = FAUSTFLOAT(fRec74[0]); output34[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (fSlow137 * fTemp37); + double fTemp48 = (fSlow142 * fTemp37); fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph35 = FAUSTFLOAT(fRec75[0]); output35[i] = FAUSTFLOAT(fTemp48); @@ -1954,10 +2042,10 @@ class mydsp : public dsp { fRec2[1] = fRec2[0]; fRec6[1] = fRec6[0]; fRec7[1] = fRec7[0]; - fRec11[1] = fRec11[0]; - fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; fRec9[1] = fRec9[0]; + fRec12[1] = fRec12[0]; fVec0[1] = fVec0[0]; fRec13[1] = fRec13[0]; fRec8[1] = fRec8[0]; @@ -1981,16 +2069,16 @@ class mydsp : public dsp { fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; + fRec36[1] = fRec36[0]; fRec37[1] = fRec37[0]; + fRec35[1] = fRec35[0]; fRec38[1] = fRec38[0]; - fRec36[1] = fRec36[0]; - fRec39[1] = fRec39[0]; fVec2[1] = fVec2[0]; + fRec39[1] = fRec39[0]; fRec40[1] = fRec40[0]; fRec41[1] = fRec41[0]; - fRec42[1] = fRec42[0]; - fRec35[1] = fRec35[0]; fRec34[1] = fRec34[0]; + fRec42[1] = fRec42[0]; fVec3[1] = fVec3[0]; fRec43[1] = fRec43[0]; fRec33[1] = fRec33[0]; @@ -2036,7 +2124,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2365,6 +2452,12 @@ FAUST_EXPORT void load(InterfaceTable* inTable) #endif // NDEBUG } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAMirror1.cpp b/source/HOAUGens/HOAMirror1.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAMirror2.cpp b/source/HOAUGens/HOAMirror2.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAMirror3.cpp b/source/HOAUGens/HOAMirror3.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAMirror4.cpp b/source/HOAUGens/HOAMirror4.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAMirror5.cpp b/source/HOAUGens/HOAMirror5.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev061.cpp b/source/HOAUGens/HOAPanLebedev061.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev261.cpp b/source/HOAUGens/HOAPanLebedev261.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev262.cpp b/source/HOAUGens/HOAPanLebedev262.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev263.cpp b/source/HOAUGens/HOAPanLebedev263.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev501.cpp b/source/HOAUGens/HOAPanLebedev501.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev502.cpp b/source/HOAUGens/HOAPanLebedev502.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev503.cpp b/source/HOAUGens/HOAPanLebedev503.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev504.cpp b/source/HOAUGens/HOAPanLebedev504.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOAPanLebedev505.cpp b/source/HOAUGens/HOAPanLebedev505.cpp old mode 100755 new mode 100644 diff --git a/source/HOAUGens/HOARotator1.cpp b/source/HOAUGens/HOARotator1.cpp old mode 100755 new mode 100644 index 4ad2735c13..3deb6f6af7 --- a/source/HOAUGens/HOARotator1.cpp +++ b/source/HOAUGens/HOARotator1.cpp @@ -1,15 +1,15 @@ -/* ------------------------------------------------------------ -author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2016" -license: "GPL" -name: "HOARotator1" -version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) ------------------------------------------------------------- */ - -#ifndef __mydsp_H__ -#define __mydsp_H__ +//---------------------------------------------------------- +// name: "HOARotator1" +// version: "1.0" +// author: "Pierre Lecomte" +// license: "GPL" +// copyright: "(c) Pierre Lecomte 2016" +// +// Code generated with Faust 0.12.0 (http://faust.grame.fr) +//---------------------------------------------------------- +/* link with */ +#include //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +66,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +114,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +142,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +151,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +171,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +205,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +252,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +266,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +296,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,127 +586,56 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; - FAUSTFLOAT fHslider2; + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + double fTempPerm0; + double fTempPerm1; + double fTempPerm2; int fSamplingFreq; - - public: - - void metadata(Meta* m) { - m->declare("author", "Pierre Lecomte"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); - m->declare("license", "GPL"); + + public: + virtual void metadata(Meta* m) { + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); m->declare("name", "HOARotator1"); m->declare("version", "1.0"); + m->declare("author", "Pierre Lecomte"); + m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); } - virtual int getNumInputs() { - return 4; - - } - virtual int getNumOutputs() { - return 4; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 4; } + virtual int getNumOutputs() { return 4; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - fHslider1 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -732,73 +645,70 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator1"); - ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); - ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); - ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fHslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = double(fHslider2); - double fSlow5 = sin(fSlow4); - double fSlow6 = sin(fSlow0); - double fSlow7 = (fSlow5 * fSlow6); - double fSlow8 = sin(fSlow2); - double fSlow9 = ((fSlow1 * fSlow3) - (fSlow7 * fSlow8)); - double fSlow10 = cos(fSlow4); - double fSlow11 = (0.0 - fSlow10); - double fSlow12 = (fSlow11 * fSlow8); - double fSlow13 = (fSlow1 * fSlow5); - double fSlow14 = ((fSlow13 * fSlow8) + (fSlow6 * fSlow3)); - double fSlow15 = ((fSlow1 * fSlow8) + (fSlow7 * fSlow3)); - double fSlow16 = (fSlow10 * fSlow3); - double fSlow17 = ((fSlow13 * (0.0 - fSlow3)) + (fSlow6 * fSlow8)); - double fSlow18 = (fSlow6 * fSlow11); - double fSlow19 = (fSlow1 * fSlow10); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input2[i]); - double fTemp2 = double(input3[i]); - output1[i] = FAUSTFLOAT((((fSlow9 * fTemp0) + (fSlow12 * fTemp1)) + (fSlow14 * fTemp2))); - output2[i] = FAUSTFLOAT((((fSlow15 * fTemp0) + (fSlow16 * fTemp1)) + (fSlow17 * fTemp2))); - output3[i] = FAUSTFLOAT((((fSlow18 * fTemp0) + (fSlow5 * fTemp1)) + (fSlow19 * fTemp2))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = sin(fSlow0); + double fSlow5 = double(fslider2); + double fSlow6 = sin(fSlow5); + double fSlow7 = (fSlow4 * fSlow6); + double fSlow8 = sin(fSlow2); + double fSlow9 = ((fSlow1 * fSlow3) - (fSlow7 * fSlow8)); + double fSlow10 = cos(fSlow5); + double fSlow11 = (0 - fSlow10); + double fSlow12 = (fSlow11 * fSlow8); + double fSlow13 = (fSlow6 * fSlow1); + double fSlow14 = ((fSlow13 * fSlow8) + (fSlow4 * fSlow3)); + double fSlow15 = ((fSlow1 * fSlow8) + (fSlow7 * fSlow3)); + double fSlow16 = (fSlow10 * fSlow3); + double fSlow17 = ((fSlow13 * (0 - fSlow3)) + (fSlow4 * fSlow8)); + double fSlow18 = (fSlow4 * fSlow11); + double fSlow19 = (fSlow10 * fSlow1); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + //LoopGraphScalar + for (int i=0; i +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +78,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +126,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +154,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +163,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +183,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +217,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +264,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +278,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +308,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,171 +598,66 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); -double mydsp_faustpower2_f(double value) { - return (value * value); - -} - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; - FAUSTFLOAT fHslider2; + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + double fTempPerm0; + double fTempPerm1; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; int fSamplingFreq; - - public: - - void metadata(Meta* m) { + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOARotator2"); + m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOARotator2"); - m->declare("version", "1.0"); } - virtual int getNumInputs() { - return 9; - - } - virtual int getNumOutputs() { - return 9; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 9; } + virtual int getNumOutputs() { return 9; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - fHslider1 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -776,136 +667,134 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator2"); - ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); - ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); - ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider0, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider1, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* input4 = inputs[4]; - FAUSTFLOAT* input5 = inputs[5]; - FAUSTFLOAT* input6 = inputs[6]; - FAUSTFLOAT* input7 = inputs[7]; - FAUSTFLOAT* input8 = inputs[8]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - FAUSTFLOAT* output4 = outputs[4]; - FAUSTFLOAT* output5 = outputs[5]; - FAUSTFLOAT* output6 = outputs[6]; - FAUSTFLOAT* output7 = outputs[7]; - FAUSTFLOAT* output8 = outputs[8]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fHslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = sin(fSlow0); - double fSlow6 = sin(fSlow2); - double fSlow7 = (fSlow5 * fSlow6); - double fSlow8 = double(fHslider2); - double fSlow9 = sin(fSlow8); - double fSlow10 = (fSlow4 - (fSlow7 * fSlow9)); - double fSlow11 = cos(fSlow8); - double fSlow12 = (0.0 - fSlow11); - double fSlow13 = (fSlow6 * fSlow12); - double fSlow14 = (fSlow6 * fSlow9); - double fSlow15 = (fSlow5 * fSlow3); - double fSlow16 = ((fSlow14 * fSlow1) + fSlow15); - double fSlow17 = (fSlow6 * fSlow1); - double fSlow18 = (fSlow5 * fSlow9); - double fSlow19 = (fSlow17 + (fSlow18 * fSlow3)); - double fSlow20 = (fSlow3 * fSlow11); - double fSlow21 = (fSlow9 * fSlow1); - double fSlow22 = ((fSlow21 * (0.0 - fSlow3)) + fSlow7); - double fSlow23 = (fSlow5 * fSlow12); - double fSlow24 = (fSlow1 * fSlow11); - double fSlow25 = ((fSlow24 * fSlow10) + (fSlow23 * fSlow16)); - double fSlow26 = mydsp_faustpower2_f(fSlow12); - double fSlow27 = ((fSlow9 * fSlow10) + (fSlow7 * fSlow26)); - double fSlow28 = (1.7320508075688772 * (fSlow14 * fSlow12)); - double fSlow29 = ((fSlow9 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); - double fSlow30 = ((fSlow24 * fSlow16) - (fSlow23 * fSlow10)); - double fSlow31 = ((fSlow22 * fSlow10) + (fSlow19 * fSlow16)); - double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow6 * fSlow19) * fSlow12))); - double fSlow33 = (1.7320508075688772 * (((fSlow6 * fSlow3) * fSlow11) * fSlow12)); - double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow6 * fSlow22) * fSlow12))); - double fSlow35 = ((fSlow22 * fSlow16) - (fSlow19 * fSlow10)); - double fSlow36 = (((fSlow5 * fSlow1) * fSlow11) * fSlow12); - double fSlow37 = (fSlow16 * fSlow10); - double fSlow38 = ((1.1547005383792515 * (fSlow22 * fSlow19)) - (0.57735026918962573 * (fSlow36 + fSlow37))); - double fSlow39 = (fSlow6 * fSlow10); - double fSlow40 = ((1.1547005383792515 * (fSlow20 * fSlow19)) - (0.57735026918962573 * (fSlow12 * (fSlow18 + fSlow39)))); - double fSlow41 = mydsp_faustpower2_f(fSlow11); - double fSlow42 = mydsp_faustpower2_f(fSlow9); - double fSlow43 = (mydsp_faustpower2_f(fSlow6) * fSlow26); - double fSlow44 = ((mydsp_faustpower2_f(fSlow3) * fSlow41) - (0.5 * (fSlow42 + fSlow43))); - double fSlow45 = (fSlow21 * fSlow11); - double fSlow46 = (fSlow13 * fSlow16); - double fSlow47 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.57735026918962573 * (fSlow45 + fSlow46))); - double fSlow48 = (mydsp_faustpower2_f(fSlow1) * fSlow41); - double fSlow49 = mydsp_faustpower2_f(fSlow16); - double fSlow50 = (mydsp_faustpower2_f(fSlow5) * fSlow26); - double fSlow51 = mydsp_faustpower2_f(fSlow10); - double fSlow52 = ((0.57735026918962573 * (mydsp_faustpower2_f(fSlow22) - mydsp_faustpower2_f(fSlow19))) - (0.28867513459481287 * ((fSlow48 + fSlow49) - (fSlow50 + fSlow51)))); - double fSlow53 = (((fSlow5 * fSlow22) * fSlow12) + (fSlow24 * fSlow19)); - double fSlow54 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow9 * fSlow19))); - double fSlow55 = (1.7320508075688772 * ((fSlow9 * fSlow3) * fSlow11)); - double fSlow56 = ((fSlow4 * fSlow41) + (1.0000000000000002 * (fSlow9 * fSlow22))); - double fSlow57 = ((fSlow24 * fSlow22) - ((fSlow5 * fSlow19) * fSlow12)); - double fSlow58 = (fSlow36 - fSlow37); - double fSlow59 = (fSlow12 * (fSlow18 - fSlow39)); - double fSlow60 = (0.8660254037844386 * (fSlow42 - fSlow43)); - double fSlow61 = (fSlow45 - fSlow46); - double fSlow62 = (0.5 * ((fSlow48 + fSlow51) - (fSlow50 + fSlow49))); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input2[i]); - double fTemp2 = double(input3[i]); - output1[i] = FAUSTFLOAT((((fSlow10 * fTemp0) + (fSlow13 * fTemp1)) + (fSlow16 * fTemp2))); - output2[i] = FAUSTFLOAT((((fSlow19 * fTemp0) + (fSlow20 * fTemp1)) + (fSlow22 * fTemp2))); - output3[i] = FAUSTFLOAT((((fSlow23 * fTemp0) + (fSlow9 * fTemp1)) + (fSlow24 * fTemp2))); - double fTemp3 = double(input4[i]); - double fTemp4 = double(input5[i]); - double fTemp5 = double(input6[i]); - double fTemp6 = double(input7[i]); - double fTemp7 = double(input8[i]); - output4[i] = FAUSTFLOAT((((((fSlow25 * fTemp3) + (fSlow27 * fTemp4)) + (fSlow28 * fTemp5)) + (fSlow29 * fTemp6)) + (fSlow30 * fTemp7))); - output5[i] = FAUSTFLOAT((((((fSlow31 * fTemp3) + (fSlow32 * fTemp4)) + (fSlow33 * fTemp5)) + (fSlow34 * fTemp6)) + (fSlow35 * fTemp7))); - output6[i] = FAUSTFLOAT((((((fSlow38 * fTemp3) + (fSlow40 * fTemp4)) + (fSlow44 * fTemp5)) + (fSlow47 * fTemp6)) + (fSlow52 * fTemp7))); - output7[i] = FAUSTFLOAT((((((fSlow53 * fTemp3) + (fSlow54 * fTemp4)) + (fSlow55 * fTemp5)) + (fSlow56 * fTemp6)) + (fSlow57 * fTemp7))); - output8[i] = FAUSTFLOAT((((((fSlow58 * fTemp3) + (fSlow59 * fTemp4)) + (fSlow60 * fTemp5)) + (fSlow61 * fTemp6)) + (fSlow62 * fTemp7))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = double(fslider2); + double fSlow6 = sin(fSlow5); + double fSlow7 = sin(fSlow0); + double fSlow8 = (fSlow6 * fSlow7); + double fSlow9 = sin(fSlow2); + double fSlow10 = (fSlow4 - (fSlow8 * fSlow9)); + double fSlow11 = cos(fSlow5); + double fSlow12 = (0 - fSlow11); + double fSlow13 = (fSlow7 * fSlow12); + double fSlow14 = (fSlow3 * fSlow6); + double fSlow15 = (fSlow1 * fSlow9); + double fSlow16 = ((fSlow14 * fSlow7) + fSlow15); + double fSlow17 = (fSlow3 * fSlow7); + double fSlow18 = (fSlow1 * fSlow6); + double fSlow19 = (fSlow17 + (fSlow18 * fSlow9)); + double fSlow20 = (fSlow1 * fSlow11); + double fSlow21 = (fSlow7 * fSlow9); + double fSlow22 = (fSlow21 + (fSlow14 * (0 - fSlow1))); + double fSlow23 = (fSlow9 * fSlow12); + double fSlow24 = (fSlow3 * fSlow11); + double fSlow25 = ((fSlow24 * fSlow10) + ((fSlow9 * fSlow16) * fSlow12)); + double fSlow26 = faustpower<2>(fSlow12); + double fSlow27 = ((fSlow6 * fSlow10) + (fSlow21 * fSlow26)); + double fSlow28 = (1.7320508075688772 * (fSlow8 * fSlow12)); + double fSlow29 = ((fSlow6 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); + double fSlow30 = ((fSlow24 * fSlow16) - ((fSlow9 * fSlow10) * fSlow12)); + double fSlow31 = ((fSlow19 * fSlow16) + (fSlow10 * fSlow22)); + double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow7 * fSlow19) * fSlow12))); + double fSlow33 = (1.7320508075688772 * (((fSlow1 * fSlow7) * fSlow11) * fSlow12)); + double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow7 * fSlow22) * fSlow12))); + double fSlow35 = ((fSlow16 * fSlow22) - (fSlow19 * fSlow10)); + double fSlow36 = (fSlow16 * fSlow10); + double fSlow37 = (((fSlow3 * fSlow9) * fSlow11) * fSlow12); + double fSlow38 = ((1.1547005383792515 * (fSlow19 * fSlow22)) - (0.5773502691896257 * (fSlow36 + fSlow37))); + double fSlow39 = (fSlow6 * fSlow9); + double fSlow40 = (fSlow7 * fSlow10); + double fSlow41 = ((1.1547005383792515 * ((fSlow1 * fSlow19) * fSlow11)) - (0.5773502691896257 * ((fSlow39 + fSlow40) * fSlow12))); + double fSlow42 = faustpower<2>(fSlow11); + double fSlow43 = faustpower<2>(fSlow6); + double fSlow44 = (faustpower<2>(fSlow7) * fSlow26); + double fSlow45 = ((faustpower<2>(fSlow1) * fSlow42) - (0.5 * (fSlow43 + fSlow44))); + double fSlow46 = (fSlow14 * fSlow11); + double fSlow47 = ((fSlow7 * fSlow16) * fSlow12); + double fSlow48 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.5773502691896257 * (fSlow46 + fSlow47))); + double fSlow49 = (faustpower<2>(fSlow3) * fSlow42); + double fSlow50 = faustpower<2>(fSlow16); + double fSlow51 = (faustpower<2>(fSlow9) * fSlow26); + double fSlow52 = faustpower<2>(fSlow10); + double fSlow53 = ((0.5773502691896257 * (faustpower<2>(fSlow22) - faustpower<2>(fSlow19))) - (0.28867513459481287 * ((fSlow49 + fSlow50) - (fSlow51 + fSlow52)))); + double fSlow54 = (((fSlow9 * fSlow22) * fSlow12) + ((fSlow3 * fSlow19) * fSlow11)); + double fSlow55 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow6 * fSlow19))); + double fSlow56 = (1.7320508075688772 * (fSlow18 * fSlow11)); + double fSlow57 = ((fSlow4 * fSlow42) + (1.0000000000000002 * (fSlow6 * fSlow22))); + double fSlow58 = ((fSlow24 * fSlow22) - ((fSlow9 * fSlow19) * fSlow12)); + double fSlow59 = (fSlow46 - fSlow47); + double fSlow60 = (fSlow12 * (fSlow39 - fSlow40)); + double fSlow61 = (0.8660254037844386 * (fSlow43 - fSlow44)); + double fSlow62 = (0 - (2 * (fSlow36 - fSlow37))); + double fSlow63 = ((fSlow49 + fSlow52) - (fSlow51 + fSlow50)); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + //LoopGraphScalar + for (int i=0; i +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +78,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +126,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +154,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +163,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +183,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +217,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +264,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +278,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +308,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,227 +598,80 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); -double mydsp_faustpower2_f(double value) { - return (value * value); - -} - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; - FAUSTFLOAT fHslider2; + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + double fTempPerm0; + double fTempPerm1; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; + double fTempPerm8; + double fTempPerm9; + double fTempPerm10; + double fTempPerm11; + double fTempPerm12; + double fTempPerm13; + double fTempPerm14; int fSamplingFreq; - - public: - - void metadata(Meta* m) { + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOARotator3"); + m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOARotator3"); - m->declare("version", "1.0"); } - virtual int getNumInputs() { - return 16; - - } - virtual int getNumOutputs() { - return 16; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 16; } + virtual int getNumOutputs() { return 16; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; + fTempPerm9 = 0; + fTempPerm10 = 0; + fTempPerm11 = 0; + fTempPerm12 = 0; + fTempPerm13 = 0; + fTempPerm14 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - fHslider1 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -832,266 +681,260 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator3"); - ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); - ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); - ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider0, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider1, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* input4 = inputs[4]; - FAUSTFLOAT* input5 = inputs[5]; - FAUSTFLOAT* input6 = inputs[6]; - FAUSTFLOAT* input7 = inputs[7]; - FAUSTFLOAT* input8 = inputs[8]; - FAUSTFLOAT* input9 = inputs[9]; - FAUSTFLOAT* input10 = inputs[10]; - FAUSTFLOAT* input11 = inputs[11]; - FAUSTFLOAT* input12 = inputs[12]; - FAUSTFLOAT* input13 = inputs[13]; - FAUSTFLOAT* input14 = inputs[14]; - FAUSTFLOAT* input15 = inputs[15]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - FAUSTFLOAT* output4 = outputs[4]; - FAUSTFLOAT* output5 = outputs[5]; - FAUSTFLOAT* output6 = outputs[6]; - FAUSTFLOAT* output7 = outputs[7]; - FAUSTFLOAT* output8 = outputs[8]; - FAUSTFLOAT* output9 = outputs[9]; - FAUSTFLOAT* output10 = outputs[10]; - FAUSTFLOAT* output11 = outputs[11]; - FAUSTFLOAT* output12 = outputs[12]; - FAUSTFLOAT* output13 = outputs[13]; - FAUSTFLOAT* output14 = outputs[14]; - FAUSTFLOAT* output15 = outputs[15]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fHslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = sin(fSlow0); - double fSlow6 = sin(fSlow2); - double fSlow7 = (fSlow5 * fSlow6); - double fSlow8 = double(fHslider2); - double fSlow9 = sin(fSlow8); - double fSlow10 = (fSlow4 - (fSlow7 * fSlow9)); - double fSlow11 = cos(fSlow8); - double fSlow12 = (0.0 - fSlow11); - double fSlow13 = (fSlow6 * fSlow12); - double fSlow14 = (fSlow6 * fSlow9); - double fSlow15 = (fSlow5 * fSlow3); - double fSlow16 = ((fSlow14 * fSlow1) + fSlow15); - double fSlow17 = (fSlow6 * fSlow1); - double fSlow18 = (fSlow5 * fSlow9); - double fSlow19 = (fSlow17 + (fSlow18 * fSlow3)); - double fSlow20 = (fSlow3 * fSlow11); - double fSlow21 = (fSlow9 * fSlow1); - double fSlow22 = ((fSlow21 * (0.0 - fSlow3)) + fSlow7); - double fSlow23 = (fSlow5 * fSlow12); - double fSlow24 = (fSlow1 * fSlow11); - double fSlow25 = ((fSlow24 * fSlow10) + (fSlow23 * fSlow16)); - double fSlow26 = mydsp_faustpower2_f(fSlow12); - double fSlow27 = ((fSlow9 * fSlow10) + (fSlow7 * fSlow26)); - double fSlow28 = (1.7320508075688772 * (fSlow14 * fSlow12)); - double fSlow29 = ((fSlow9 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); - double fSlow30 = ((fSlow24 * fSlow16) - (fSlow23 * fSlow10)); - double fSlow31 = ((fSlow19 * fSlow16) + (fSlow22 * fSlow10)); - double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow6 * fSlow19) * fSlow12))); - double fSlow33 = (1.7320508075688772 * (((fSlow6 * fSlow3) * fSlow11) * fSlow12)); - double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow6 * fSlow22) * fSlow12))); - double fSlow35 = ((fSlow22 * fSlow16) - (fSlow19 * fSlow10)); - double fSlow36 = (((fSlow5 * fSlow1) * fSlow11) * fSlow12); - double fSlow37 = (fSlow16 * fSlow10); - double fSlow38 = ((1.1547005383792515 * (fSlow22 * fSlow19)) - (0.57735026918962573 * (fSlow36 + fSlow37))); - double fSlow39 = (fSlow6 * fSlow10); - double fSlow40 = ((1.1547005383792515 * (fSlow20 * fSlow19)) - (0.57735026918962573 * ((fSlow18 + fSlow39) * fSlow12))); - double fSlow41 = mydsp_faustpower2_f(fSlow11); - double fSlow42 = (mydsp_faustpower2_f(fSlow3) * fSlow41); - double fSlow43 = mydsp_faustpower2_f(fSlow9); - double fSlow44 = (mydsp_faustpower2_f(fSlow6) * fSlow26); - double fSlow45 = (fSlow43 + fSlow44); - double fSlow46 = (fSlow42 - (0.5 * fSlow45)); - double fSlow47 = (fSlow21 * fSlow11); - double fSlow48 = (fSlow13 * fSlow16); - double fSlow49 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.57735026918962573 * (fSlow47 + fSlow48))); - double fSlow50 = (mydsp_faustpower2_f(fSlow1) * fSlow41); - double fSlow51 = mydsp_faustpower2_f(fSlow16); - double fSlow52 = (mydsp_faustpower2_f(fSlow5) * fSlow26); - double fSlow53 = mydsp_faustpower2_f(fSlow10); - double fSlow54 = ((0.57735026918962573 * (mydsp_faustpower2_f(fSlow22) - mydsp_faustpower2_f(fSlow19))) - (0.28867513459481287 * ((fSlow50 + fSlow51) - (fSlow52 + fSlow53)))); - double fSlow55 = (((fSlow5 * fSlow22) * fSlow12) + (fSlow24 * fSlow19)); - double fSlow56 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow9 * fSlow19))); - double fSlow57 = (1.7320508075688772 * ((fSlow9 * fSlow3) * fSlow11)); - double fSlow58 = ((fSlow4 * fSlow41) + (1.0000000000000002 * (fSlow9 * fSlow22))); - double fSlow59 = ((fSlow24 * fSlow22) - ((fSlow5 * fSlow19) * fSlow12)); - double fSlow60 = (fSlow36 - fSlow37); - double fSlow61 = (fSlow18 - fSlow39); - double fSlow62 = (fSlow12 * fSlow61); - double fSlow63 = (fSlow43 - fSlow44); - double fSlow64 = (0.8660254037844386 * fSlow63); - double fSlow65 = (fSlow47 - fSlow48); - double fSlow66 = ((fSlow50 + fSlow53) - (fSlow52 + fSlow51)); - double fSlow67 = (0.5 * fSlow66); - double fSlow68 = (0.5 * (fSlow10 * fSlow66)); - double fSlow69 = ((fSlow24 * fSlow25) + (fSlow23 * fSlow30)); - double fSlow70 = (fSlow16 * fSlow60); - double fSlow71 = (fSlow68 + (fSlow69 + fSlow70)); - double fSlow72 = (fSlow24 * fSlow30); - double fSlow73 = (0.5 * (fSlow16 * fSlow66)); - double fSlow74 = (fSlow23 * fSlow25); - double fSlow75 = (fSlow10 * fSlow60); - double fSlow76 = ((fSlow72 + fSlow73) - (fSlow74 + fSlow75)); - double fSlow77 = (fSlow9 * fSlow25); - double fSlow78 = (fSlow13 * fSlow60); - double fSlow79 = (fSlow77 + fSlow78); - double fSlow80 = (fSlow9 * fSlow30); - double fSlow81 = (0.5 * (fSlow13 * fSlow66)); - double fSlow82 = (fSlow80 + fSlow81); - double fSlow83 = (1.7320508075688772 * fSlow43); - double fSlow84 = (0.9128709291752769 * (((fSlow83 + fSlow64) * fSlow6) * fSlow12)); - double fSlow85 = (fSlow9 * fSlow27); - double fSlow86 = ((fSlow6 * fSlow26) * fSlow61); - double fSlow87 = (fSlow85 + fSlow86); - double fSlow88 = (fSlow9 * fSlow29); - double fSlow89 = (fSlow13 * fSlow65); - double fSlow90 = (fSlow88 + fSlow89); - double fSlow91 = (((fSlow22 * fSlow25) + (fSlow19 * fSlow30)) + ((fSlow16 * fSlow55) + (((fSlow24 * fSlow31) + (fSlow23 * fSlow35)) + (fSlow10 * fSlow59)))); - double fSlow92 = (((fSlow22 * fSlow30) - (fSlow19 * fSlow25)) + (((fSlow24 * fSlow35) + (fSlow16 * fSlow59)) - ((fSlow23 * fSlow31) + (fSlow10 * fSlow55)))); - double fSlow93 = ((fSlow13 * fSlow59) + ((fSlow20 * fSlow30) + (fSlow9 * fSlow35))); - double fSlow94 = ((fSlow20 * fSlow27) + ((fSlow9 * fSlow32) + (fSlow13 * fSlow56))); - double fSlow95 = ((fSlow20 * fSlow29) + ((fSlow9 * fSlow34) + (fSlow13 * fSlow58))); - double fSlow96 = ((fSlow13 * fSlow55) + ((fSlow20 * fSlow25) + (fSlow9 * fSlow31))); - double fSlow97 = (3.872983346207417 * (((fSlow14 * fSlow3) * fSlow11) * fSlow12)); - double fSlow98 = (((0.5163977794943222 * ((fSlow22 * fSlow31) + (fSlow19 * fSlow35))) + (0.44721359549995798 * ((fSlow38 * fSlow16) + (fSlow54 * fSlow10)))) - (0.12909944487358055 * (fSlow69 - (fSlow70 + fSlow68)))); - double fSlow99 = (((1.2649110640673518 * (fSlow20 * fSlow31)) + (1.0954451150103324 * ((fSlow38 * fSlow6) * fSlow12))) - (0.31622776601683794 * (fSlow77 - fSlow78))); - double fSlow100 = (((fSlow20 * fSlow32) + (0.8660254037844386 * ((fSlow40 * fSlow6) * fSlow12))) - (0.25 * (fSlow85 - fSlow86))); - double fSlow101 = ((1.6329931618554518 * fSlow42) + (0.81649658092772603 * fSlow46)); - double fSlow102 = (((fSlow101 - (0.23570226039551584 * (fSlow83 - fSlow64))) * fSlow6) * fSlow12); - double fSlow103 = (((fSlow20 * fSlow34) + (0.8660254037844386 * ((fSlow49 * fSlow6) * fSlow12))) - (0.25 * (fSlow88 - fSlow89))); - double fSlow104 = (((1.2649110640673518 * (fSlow20 * fSlow35)) + (1.0954451150103324 * ((fSlow54 * fSlow6) * fSlow12))) - (0.31622776601683794 * (fSlow80 - fSlow81))); - double fSlow105 = (((0.5163977794943222 * ((fSlow22 * fSlow35) - (fSlow19 * fSlow31))) + (0.44721359549995798 * ((fSlow54 * fSlow16) - (fSlow38 * fSlow10)))) - (0.12909944487358055 * ((fSlow72 + fSlow75) - (fSlow74 + fSlow73)))); - double fSlow106 = ((fSlow24 * fSlow55) + (fSlow23 * fSlow59)); - double fSlow107 = (fSlow16 * fSlow31); - double fSlow108 = (fSlow10 * fSlow35); - double fSlow109 = ((0.54772255750516607 * ((fSlow38 * fSlow22) + (fSlow54 * fSlow19))) - (0.31622776601683794 * ((fSlow106 + fSlow107) + fSlow108))); - double fSlow110 = (fSlow9 * fSlow55); - double fSlow111 = (fSlow13 * fSlow31); - double fSlow112 = ((1.3416407864998738 * ((fSlow38 * fSlow3) * fSlow11)) - (0.7745966692414834 * (fSlow110 + fSlow111))); - double fSlow113 = (fSlow9 * fSlow56); - double fSlow114 = (fSlow13 * fSlow32); - double fSlow115 = ((1.0606601717798212 * ((fSlow40 * fSlow3) * fSlow11)) - (0.61237243569579447 * (fSlow113 + fSlow114))); - double fSlow116 = (((fSlow46 - (0.99999999999999989 * fSlow45)) * fSlow3) * fSlow11); - double fSlow117 = (fSlow9 * fSlow58); - double fSlow118 = (fSlow13 * fSlow34); - double fSlow119 = ((1.0606601717798212 * ((fSlow49 * fSlow3) * fSlow11)) - (0.61237243569579447 * (fSlow117 + fSlow118))); - double fSlow120 = (fSlow9 * fSlow59); - double fSlow121 = (fSlow13 * fSlow35); - double fSlow122 = ((1.3416407864998738 * ((fSlow54 * fSlow3) * fSlow11)) - (0.7745966692414834 * (fSlow120 + fSlow121))); - double fSlow123 = (fSlow24 * fSlow59); - double fSlow124 = (fSlow16 * fSlow35); - double fSlow125 = (fSlow23 * fSlow55); - double fSlow126 = (fSlow10 * fSlow31); - double fSlow127 = ((0.54772255750516607 * ((fSlow54 * fSlow22) - (fSlow38 * fSlow19))) - (0.31622776601683794 * ((fSlow123 + fSlow124) - (fSlow125 + fSlow126)))); - double fSlow128 = ((fSlow24 * fSlow60) + (0.5 * (fSlow23 * fSlow66))); - double fSlow129 = (fSlow16 * fSlow25); - double fSlow130 = (fSlow10 * fSlow30); - double fSlow131 = (((0.5163977794943222 * ((fSlow22 * fSlow55) + (fSlow19 * fSlow59))) + (0.44721359549995798 * (((fSlow38 * fSlow1) * fSlow11) + ((fSlow54 * fSlow5) * fSlow12)))) - (0.12909944487358055 * ((fSlow128 + fSlow129) + fSlow130))); - double fSlow132 = (fSlow9 * fSlow60); - double fSlow133 = (fSlow13 * fSlow25); - double fSlow134 = (((1.2649110640673518 * (fSlow20 * fSlow55)) + (1.0954451150103324 * (fSlow38 * fSlow9))) - (0.31622776601683794 * (fSlow132 + fSlow133))); - double fSlow135 = (fSlow9 * fSlow61); - double fSlow136 = (fSlow6 * fSlow27); - double fSlow137 = (((fSlow20 * fSlow56) + (0.8660254037844386 * (fSlow40 * fSlow9))) - (0.25 * ((fSlow135 + fSlow136) * fSlow12))); - double fSlow138 = (1.7320508075688772 * fSlow44); - double fSlow139 = ((fSlow101 - (0.23570226039551584 * (fSlow64 + fSlow138))) * fSlow9); - double fSlow140 = (fSlow9 * fSlow65); - double fSlow141 = (fSlow13 * fSlow29); - double fSlow142 = (((fSlow20 * fSlow58) + (0.8660254037844386 * (fSlow49 * fSlow9))) - (0.25 * (fSlow140 + fSlow141))); - double fSlow143 = (0.5 * (fSlow9 * fSlow66)); - double fSlow144 = (fSlow13 * fSlow30); - double fSlow145 = (((1.2649110640673518 * (fSlow20 * fSlow59)) + (1.0954451150103324 * (fSlow54 * fSlow9))) - (0.31622776601683794 * (fSlow143 + fSlow144))); - double fSlow146 = (0.5 * (fSlow24 * fSlow66)); - double fSlow147 = (fSlow16 * fSlow30); - double fSlow148 = (fSlow23 * fSlow60); - double fSlow149 = (fSlow10 * fSlow25); - double fSlow150 = (((0.5163977794943222 * ((fSlow22 * fSlow59) - (fSlow19 * fSlow55))) + (0.44721359549995798 * (((fSlow54 * fSlow1) * fSlow11) - ((fSlow38 * fSlow5) * fSlow12)))) - (0.12909944487358055 * ((fSlow146 + fSlow147) - (fSlow148 + fSlow149)))); - double fSlow151 = (((fSlow22 * fSlow60) + (0.5 * (fSlow19 * fSlow66))) + (fSlow106 - (fSlow107 + fSlow108))); - double fSlow152 = (((0.5 * (fSlow22 * fSlow66)) - (fSlow19 * fSlow60)) + ((fSlow123 + fSlow126) - (fSlow125 + fSlow124))); - double fSlow153 = (((0.5 * (fSlow20 * fSlow66)) + fSlow120) - fSlow121); - double fSlow154 = (((fSlow20 * fSlow12) * fSlow61) + (fSlow113 - fSlow114)); - double fSlow155 = ((fSlow20 * fSlow65) + (fSlow117 - fSlow118)); - double fSlow156 = (((fSlow20 * fSlow60) + fSlow110) - fSlow111); - double fSlow157 = (1.9364916731037085 * (fSlow20 * fSlow63)); - double fSlow158 = (fSlow128 - (fSlow129 + fSlow130)); - double fSlow159 = ((fSlow146 + fSlow149) - (fSlow148 + fSlow147)); - double fSlow160 = (fSlow132 - fSlow133); - double fSlow161 = (fSlow143 - fSlow144); - double fSlow162 = (0.9128709291752769 * (fSlow9 * (fSlow64 - fSlow138))); - double fSlow163 = (fSlow12 * (fSlow135 - fSlow136)); - double fSlow164 = (fSlow140 - fSlow141); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input2[i]); - double fTemp2 = double(input3[i]); - output1[i] = FAUSTFLOAT((((fSlow10 * fTemp0) + (fSlow13 * fTemp1)) + (fSlow16 * fTemp2))); - output2[i] = FAUSTFLOAT((((fSlow19 * fTemp0) + (fSlow20 * fTemp1)) + (fSlow22 * fTemp2))); - output3[i] = FAUSTFLOAT((((fSlow23 * fTemp0) + (fSlow9 * fTemp1)) + (fSlow24 * fTemp2))); - double fTemp3 = double(input4[i]); - double fTemp4 = double(input5[i]); - double fTemp5 = double(input6[i]); - double fTemp6 = double(input7[i]); - double fTemp7 = double(input8[i]); - output4[i] = FAUSTFLOAT((((((fSlow25 * fTemp3) + (fSlow27 * fTemp4)) + (fSlow28 * fTemp5)) + (fSlow29 * fTemp6)) + (fSlow30 * fTemp7))); - output5[i] = FAUSTFLOAT((((((fSlow31 * fTemp3) + (fSlow32 * fTemp4)) + (fSlow33 * fTemp5)) + (fSlow34 * fTemp6)) + (fSlow35 * fTemp7))); - output6[i] = FAUSTFLOAT((((((fSlow38 * fTemp3) + (fSlow40 * fTemp4)) + (fSlow46 * fTemp5)) + (fSlow49 * fTemp6)) + (fSlow54 * fTemp7))); - output7[i] = FAUSTFLOAT((((((fSlow55 * fTemp3) + (fSlow56 * fTemp4)) + (fSlow57 * fTemp5)) + (fSlow58 * fTemp6)) + (fSlow59 * fTemp7))); - output8[i] = FAUSTFLOAT((((((fSlow60 * fTemp3) + (fSlow62 * fTemp4)) + (fSlow64 * fTemp5)) + (fSlow65 * fTemp6)) + (fSlow67 * fTemp7))); - double fTemp8 = double(input9[i]); - double fTemp9 = double(input15[i]); - double fTemp10 = double(input10[i]); - double fTemp11 = double(input14[i]); - double fTemp12 = double(input12[i]); - double fTemp13 = double(input11[i]); - double fTemp14 = double(input13[i]); - output9[i] = FAUSTFLOAT(((0.5 * ((fSlow71 * fTemp8) + (fSlow76 * fTemp9))) + ((1.2247448713915889 * ((fSlow79 * fTemp10) + (fSlow82 * fTemp11))) + ((fSlow84 * fTemp12) + (0.96824583655185426 * ((fSlow87 * fTemp13) + (fSlow90 * fTemp14))))))); - output10[i] = FAUSTFLOAT(((0.40824829046386302 * ((fSlow91 * fTemp8) + (fSlow92 * fTemp9))) + ((fSlow93 * fTemp11) + ((0.79056941504209488 * ((fSlow94 * fTemp13) + (fSlow95 * fTemp14))) + ((fSlow96 * fTemp10) + (fSlow97 * fTemp12)))))); - output11[i] = FAUSTFLOAT((((((((fSlow98 * fTemp8) + (fSlow99 * fTemp10)) + (fSlow100 * fTemp13)) + (fSlow102 * fTemp12)) + (fSlow103 * fTemp14)) + (fSlow104 * fTemp11)) + (fSlow105 * fTemp9))); - output12[i] = FAUSTFLOAT((((((((fSlow109 * fTemp8) + (fSlow112 * fTemp10)) + (fSlow115 * fTemp13)) + (fSlow116 * fTemp12)) + (fSlow119 * fTemp14)) + (fSlow122 * fTemp11)) + (fSlow127 * fTemp9))); - output13[i] = FAUSTFLOAT((((((((fSlow131 * fTemp8) + (fSlow134 * fTemp10)) + (fSlow137 * fTemp13)) + (fSlow139 * fTemp12)) + (fSlow142 * fTemp14)) + (fSlow145 * fTemp11)) + (fSlow150 * fTemp9))); - output14[i] = FAUSTFLOAT(((0.40824829046386302 * ((fSlow151 * fTemp8) + (fSlow152 * fTemp9))) + ((fSlow153 * fTemp11) + ((0.79056941504209488 * ((fSlow154 * fTemp13) + (fSlow155 * fTemp14))) + ((fSlow156 * fTemp10) + (fSlow157 * fTemp12)))))); - output15[i] = FAUSTFLOAT(((0.5 * ((fSlow158 * fTemp8) + (fSlow159 * fTemp9))) + ((1.2247448713915889 * ((fSlow160 * fTemp10) + (fSlow161 * fTemp11))) + ((fSlow162 * fTemp12) + (0.96824583655185426 * ((fSlow163 * fTemp13) + (fSlow164 * fTemp14))))))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = double(fslider2); + double fSlow6 = sin(fSlow5); + double fSlow7 = sin(fSlow0); + double fSlow8 = (fSlow6 * fSlow7); + double fSlow9 = sin(fSlow2); + double fSlow10 = (fSlow4 - (fSlow8 * fSlow9)); + double fSlow11 = cos(fSlow5); + double fSlow12 = (0 - fSlow11); + double fSlow13 = (fSlow7 * fSlow12); + double fSlow14 = (fSlow3 * fSlow6); + double fSlow15 = (fSlow1 * fSlow9); + double fSlow16 = ((fSlow14 * fSlow7) + fSlow15); + double fSlow17 = (fSlow3 * fSlow7); + double fSlow18 = (fSlow1 * fSlow6); + double fSlow19 = (fSlow17 + (fSlow18 * fSlow9)); + double fSlow20 = (fSlow1 * fSlow11); + double fSlow21 = (fSlow7 * fSlow9); + double fSlow22 = (fSlow21 + (fSlow14 * (0 - fSlow1))); + double fSlow23 = (fSlow9 * fSlow12); + double fSlow24 = (fSlow3 * fSlow11); + double fSlow25 = ((fSlow24 * fSlow10) + ((fSlow9 * fSlow16) * fSlow12)); + double fSlow26 = faustpower<2>(fSlow12); + double fSlow27 = ((fSlow21 * fSlow26) + (fSlow6 * fSlow10)); + double fSlow28 = (1.7320508075688772 * (fSlow8 * fSlow12)); + double fSlow29 = ((fSlow6 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); + double fSlow30 = ((fSlow24 * fSlow16) - ((fSlow9 * fSlow10) * fSlow12)); + double fSlow31 = ((fSlow19 * fSlow16) + (fSlow10 * fSlow22)); + double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow7 * fSlow19) * fSlow12))); + double fSlow33 = (1.7320508075688772 * (((fSlow1 * fSlow7) * fSlow11) * fSlow12)); + double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow7 * fSlow22) * fSlow12))); + double fSlow35 = ((fSlow16 * fSlow22) - (fSlow19 * fSlow10)); + double fSlow36 = (fSlow16 * fSlow10); + double fSlow37 = (((fSlow3 * fSlow9) * fSlow11) * fSlow12); + double fSlow38 = ((1.1547005383792515 * (fSlow19 * fSlow22)) - (0.5773502691896257 * (fSlow36 + fSlow37))); + double fSlow39 = (fSlow6 * fSlow9); + double fSlow40 = (fSlow7 * fSlow10); + double fSlow41 = ((1.1547005383792515 * ((fSlow1 * fSlow19) * fSlow11)) - (0.5773502691896257 * (fSlow12 * (fSlow39 + fSlow40)))); + double fSlow42 = faustpower<2>(fSlow11); + double fSlow43 = (faustpower<2>(fSlow1) * fSlow42); + double fSlow44 = faustpower<2>(fSlow6); + double fSlow45 = (faustpower<2>(fSlow7) * fSlow26); + double fSlow46 = (fSlow44 + fSlow45); + double fSlow47 = (fSlow43 - (0.5 * fSlow46)); + double fSlow48 = (fSlow14 * fSlow11); + double fSlow49 = ((fSlow7 * fSlow16) * fSlow12); + double fSlow50 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.5773502691896257 * (fSlow48 + fSlow49))); + double fSlow51 = (faustpower<2>(fSlow3) * fSlow42); + double fSlow52 = faustpower<2>(fSlow16); + double fSlow53 = (faustpower<2>(fSlow9) * fSlow26); + double fSlow54 = faustpower<2>(fSlow10); + double fSlow55 = ((0.5773502691896257 * (faustpower<2>(fSlow22) - faustpower<2>(fSlow19))) - (0.28867513459481287 * ((fSlow51 + fSlow52) - (fSlow53 + fSlow54)))); + double fSlow56 = (((fSlow9 * fSlow22) * fSlow12) + ((fSlow3 * fSlow19) * fSlow11)); + double fSlow57 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow6 * fSlow19))); + double fSlow58 = (1.7320508075688772 * (fSlow18 * fSlow11)); + double fSlow59 = ((fSlow4 * fSlow42) + (1.0000000000000002 * (fSlow6 * fSlow22))); + double fSlow60 = ((fSlow24 * fSlow22) - ((fSlow9 * fSlow19) * fSlow12)); + double fSlow61 = (fSlow48 - fSlow49); + double fSlow62 = (fSlow39 - fSlow40); + double fSlow63 = (fSlow62 * fSlow12); + double fSlow64 = (fSlow44 - fSlow45); + double fSlow65 = (0.8660254037844386 * fSlow64); + double fSlow66 = (0 - (2 * (fSlow36 - fSlow37))); + double fSlow67 = ((fSlow51 + fSlow54) - (fSlow53 + fSlow52)); + double fSlow68 = (fSlow6 * fSlow25); + double fSlow69 = (0.5 * (fSlow13 * fSlow66)); + double fSlow70 = (fSlow68 + fSlow69); + double fSlow71 = (fSlow6 * fSlow30); + double fSlow72 = (0.5 * (fSlow13 * fSlow67)); + double fSlow73 = (fSlow71 + fSlow72); + double fSlow74 = (1.7320508075688772 * fSlow44); + double fSlow75 = (0.9128709291752769 * (fSlow13 * (fSlow65 + fSlow74))); + double fSlow76 = (fSlow27 * fSlow6); + double fSlow77 = ((fSlow62 * fSlow7) * fSlow26); + double fSlow78 = (fSlow76 + fSlow77); + double fSlow79 = (fSlow6 * fSlow29); + double fSlow80 = (fSlow13 * fSlow61); + double fSlow81 = (fSlow79 + fSlow80); + double fSlow82 = ((fSlow24 * fSlow25) + (fSlow23 * fSlow30)); + double fSlow83 = (0.5 * ((fSlow16 * fSlow66) + (fSlow10 * fSlow67))); + double fSlow84 = (fSlow82 + fSlow83); + double fSlow85 = (fSlow24 * fSlow30); + double fSlow86 = (0.5 * ((fSlow16 * fSlow67) - (fSlow10 * fSlow66))); + double fSlow87 = (fSlow23 * fSlow25); + double fSlow88 = ((fSlow85 + fSlow86) - fSlow87); + double fSlow89 = ((fSlow13 * fSlow60) + ((fSlow20 * fSlow30) + (fSlow6 * fSlow35))); + double fSlow90 = (((fSlow27 * fSlow1) * fSlow11) + ((fSlow32 * fSlow6) + ((fSlow57 * fSlow7) * fSlow12))); + double fSlow91 = ((fSlow20 * fSlow29) + ((fSlow6 * fSlow34) + (fSlow13 * fSlow59))); + double fSlow92 = ((fSlow13 * fSlow56) + ((fSlow20 * fSlow25) + (fSlow6 * fSlow31))); + double fSlow93 = (3.872983346207417 * (((fSlow18 * fSlow7) * fSlow11) * fSlow12)); + double fSlow94 = (((fSlow22 * fSlow25) + (fSlow19 * fSlow30)) + ((fSlow10 * fSlow60) + ((fSlow23 * fSlow35) + ((fSlow24 * fSlow31) + (fSlow16 * fSlow56))))); + double fSlow95 = (((fSlow22 * fSlow30) - (fSlow19 * fSlow25)) + (((fSlow24 * fSlow35) + (fSlow16 * fSlow60)) - ((fSlow23 * fSlow31) + (fSlow10 * fSlow56)))); + double fSlow96 = (((0.5163977794943222 * ((fSlow22 * fSlow31) + (fSlow19 * fSlow35))) + (0.447213595499958 * ((fSlow16 * fSlow38) + (fSlow10 * fSlow55)))) - (0.12909944487358055 * (fSlow82 - fSlow83))); + double fSlow97 = (((1.2649110640673518 * (fSlow20 * fSlow31)) + (1.0954451150103324 * (fSlow13 * fSlow38))) - (0.31622776601683794 * (fSlow68 - fSlow69))); + double fSlow98 = ((((fSlow32 * fSlow1) * fSlow11) + (0.8660254037844386 * (fSlow13 * fSlow41))) - (0.25 * (fSlow76 - fSlow77))); + double fSlow99 = ((1.6329931618554518 * fSlow43) + (0.816496580927726 * fSlow47)); + double fSlow100 = (fSlow13 * (fSlow99 - (0.23570226039551584 * (fSlow74 - fSlow65)))); + double fSlow101 = (((fSlow20 * fSlow34) + (0.8660254037844386 * (fSlow13 * fSlow50))) - (0.25 * (fSlow79 - fSlow80))); + double fSlow102 = (((1.2649110640673518 * (fSlow20 * fSlow35)) + (1.0954451150103324 * (fSlow13 * fSlow55))) - (0.31622776601683794 * (fSlow71 - fSlow72))); + double fSlow103 = (((0.5163977794943222 * ((fSlow22 * fSlow35) - (fSlow19 * fSlow31))) + (0.447213595499958 * ((fSlow16 * fSlow55) - (fSlow10 * fSlow38)))) - (0.12909944487358055 * (fSlow85 - (fSlow87 + fSlow86)))); + double fSlow104 = (fSlow6 * fSlow60); + double fSlow105 = (fSlow13 * fSlow35); + double fSlow106 = ((1.3416407864998738 * (fSlow20 * fSlow55)) - (0.7745966692414834 * (fSlow104 + fSlow105))); + double fSlow107 = (fSlow57 * fSlow6); + double fSlow108 = ((fSlow32 * fSlow7) * fSlow12); + double fSlow109 = ((1.0606601717798212 * (fSlow20 * fSlow41)) - (0.6123724356957945 * (fSlow107 + fSlow108))); + double fSlow110 = (fSlow20 * (fSlow47 - (0.9999999999999999 * fSlow46))); + double fSlow111 = (fSlow24 * fSlow60); + double fSlow112 = (fSlow16 * fSlow35); + double fSlow113 = (fSlow23 * fSlow56); + double fSlow114 = (fSlow10 * fSlow31); + double fSlow115 = ((0.5477225575051661 * ((fSlow22 * fSlow55) - (fSlow19 * fSlow38))) - (0.31622776601683794 * ((fSlow111 + fSlow112) - (fSlow113 + fSlow114)))); + double fSlow116 = (fSlow10 * fSlow35); + double fSlow117 = ((fSlow24 * fSlow56) + (fSlow23 * fSlow60)); + double fSlow118 = (fSlow16 * fSlow31); + double fSlow119 = ((0.5477225575051661 * ((fSlow22 * fSlow38) + (fSlow19 * fSlow55))) - (0.31622776601683794 * (fSlow116 + (fSlow117 + fSlow118)))); + double fSlow120 = (fSlow6 * fSlow56); + double fSlow121 = (fSlow13 * fSlow31); + double fSlow122 = ((1.3416407864998738 * (fSlow20 * fSlow38)) - (0.7745966692414834 * (fSlow120 + fSlow121))); + double fSlow123 = (fSlow6 * fSlow59); + double fSlow124 = (fSlow13 * fSlow34); + double fSlow125 = ((1.0606601717798212 * (fSlow20 * fSlow50)) - (0.6123724356957945 * (fSlow123 + fSlow124))); + double fSlow126 = (fSlow6 * fSlow61); + double fSlow127 = (fSlow13 * fSlow29); + double fSlow128 = (((fSlow20 * fSlow59) + (0.8660254037844386 * (fSlow6 * fSlow50))) - (0.25 * (fSlow126 + fSlow127))); + double fSlow129 = (fSlow10 * fSlow30); + double fSlow130 = (0.5 * ((fSlow24 * fSlow66) + (fSlow23 * fSlow67))); + double fSlow131 = (fSlow16 * fSlow25); + double fSlow132 = (((0.5163977794943222 * ((fSlow22 * fSlow56) + (fSlow19 * fSlow60))) + (0.447213595499958 * ((fSlow24 * fSlow38) + (fSlow23 * fSlow55)))) - (0.12909944487358055 * (fSlow129 + (fSlow130 + fSlow131)))); + double fSlow133 = (1.7320508075688772 * fSlow45); + double fSlow134 = (fSlow6 * (fSlow99 - (0.23570226039551584 * (fSlow65 + fSlow133)))); + double fSlow135 = (0.5 * (fSlow6 * fSlow67)); + double fSlow136 = (fSlow13 * fSlow30); + double fSlow137 = (((1.2649110640673518 * (fSlow20 * fSlow60)) + (1.0954451150103324 * (fSlow6 * fSlow55))) - (0.31622776601683794 * (fSlow135 + fSlow136))); + double fSlow138 = (0.5 * (fSlow6 * fSlow66)); + double fSlow139 = (fSlow13 * fSlow25); + double fSlow140 = (((1.2649110640673518 * (fSlow20 * fSlow56)) + (1.0954451150103324 * (fSlow6 * fSlow38))) - (0.31622776601683794 * (fSlow138 + fSlow139))); + double fSlow141 = (fSlow62 * fSlow6); + double fSlow142 = (fSlow27 * fSlow7); + double fSlow143 = ((((fSlow57 * fSlow1) * fSlow11) + (0.8660254037844386 * (fSlow6 * fSlow41))) - (0.25 * (fSlow12 * (fSlow141 + fSlow142)))); + double fSlow144 = (fSlow16 * fSlow30); + double fSlow145 = (0.5 * ((fSlow24 * fSlow67) - (fSlow23 * fSlow66))); + double fSlow146 = (fSlow10 * fSlow25); + double fSlow147 = (((0.5163977794943222 * ((fSlow22 * fSlow60) - (fSlow19 * fSlow56))) + (0.447213595499958 * ((fSlow24 * fSlow55) - (fSlow23 * fSlow38)))) - (0.12909944487358055 * ((fSlow144 + fSlow145) - fSlow146))); + double fSlow148 = ((0.2041241452319315 * ((fSlow22 * fSlow67) - (fSlow19 * fSlow66))) + (0.408248290463863 * ((fSlow111 + fSlow114) - (fSlow112 + fSlow113)))); + double fSlow149 = ((0.2041241452319315 * ((fSlow22 * fSlow66) + (fSlow19 * fSlow67))) + (0.408248290463863 * (fSlow117 - (fSlow118 + fSlow116)))); + double fSlow150 = (((0.5 * (fSlow20 * fSlow66)) + fSlow120) - fSlow121); + double fSlow151 = (1.9364916731037085 * (fSlow20 * fSlow64)); + double fSlow152 = (((0.5 * (fSlow20 * fSlow67)) + fSlow104) - fSlow105); + double fSlow153 = ((((fSlow62 * fSlow1) * fSlow11) * fSlow12) + (fSlow107 - fSlow108)); + double fSlow154 = ((fSlow20 * fSlow61) + (fSlow123 - fSlow124)); + double fSlow155 = (fSlow138 - fSlow139); + double fSlow156 = (fSlow135 - fSlow136); + double fSlow157 = (0.9128709291752769 * (fSlow6 * (fSlow65 - fSlow133))); + double fSlow158 = ((fSlow141 - fSlow142) * fSlow12); + double fSlow159 = (fSlow126 - fSlow127); + double fSlow160 = (fSlow130 - (fSlow131 + fSlow129)); + double fSlow161 = ((fSlow145 + fSlow146) - fSlow144); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + //LoopGraphScalar + for (int i=0; i +#ifndef FAUSTPOWER +#define FAUSTPOWER +#include +template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } +template <> inline int faustpower<0>(int x) { return 1; } +template <> inline int faustpower<1>(int x) { return x; } +template <> inline int faustpower<2>(int x) { return x*x; } +template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } +template <> inline double faustpower<0>(double x) { return 1; } +template <> inline double faustpower<1>(double x) { return x; } +template <> inline double faustpower<2>(double x) { return x*x; } +#endif //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -66,8 +78,6 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) #ifndef __dsp__ #define __dsp__ -#include - #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -116,21 +126,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * * @param samplingRate - the sampling rate in Herz */ virtual void init(int samplingRate) = 0; - - /** Init instance state + + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** Init instance constant state + + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -141,8 +154,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -150,16 +163,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +183,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,34 +217,11 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * DSP factory class. - */ - -class dsp_factory { - - protected: - - // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); - virtual ~dsp_factory() {} - - public: - - virtual std::string getName() = 0; - virtual std::string getSHAKey() = 0; - virtual std::string getDSPCode() = 0; - virtual dsp* createDSPInstance() = 0; - - virtual void setMemoryManager(dsp_memory_manager* manager) = 0; - virtual dsp_memory_manager* getMemoryManager() = 0; - + }; /** @@ -274,8 +264,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +278,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +308,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} // -- metadata declarations @@ -602,299 +598,98 @@ class ControlAllocator : public UI #endif -double cos(double dummy0); -double sin(double dummy0); -double mydsp_faustpower2_f(double value) { - return (value * value); - -} - #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif class mydsp : public dsp { - - private: - - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; - FAUSTFLOAT fHslider2; + private: + FAUSTFLOAT fslider0; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + double fTempPerm0; + double fTempPerm1; + double fTempPerm2; + double fTempPerm3; + double fTempPerm4; + double fTempPerm5; + double fTempPerm6; + double fTempPerm7; + double fTempPerm8; + double fTempPerm9; + double fTempPerm10; + double fTempPerm11; + double fTempPerm12; + double fTempPerm13; + double fTempPerm14; + double fTempPerm15; + double fTempPerm16; + double fTempPerm17; + double fTempPerm18; + double fTempPerm19; + double fTempPerm20; + double fTempPerm21; + double fTempPerm22; + double fTempPerm23; int fSamplingFreq; - - public: - - void metadata(Meta* m) { + + public: + virtual void metadata(Meta* m) { + m->declare("name", "HOARotator4"); + m->declare("version", "1.0"); m->declare("author", "Pierre Lecomte"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); m->declare("license", "GPL"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOARotator4"); - m->declare("version", "1.0"); } - virtual int getNumInputs() { - return 25; - - } - virtual int getNumOutputs() { - return 25; - - } - virtual int getInputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - case 16: { - rate = 1; - break; - } - case 17: { - rate = 1; - break; - } - case 18: { - rate = 1; - break; - } - case 19: { - rate = 1; - break; - } - case 20: { - rate = 1; - break; - } - case 21: { - rate = 1; - break; - } - case 22: { - rate = 1; - break; - } - case 23: { - rate = 1; - break; - } - case 24: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { - rate = 1; - break; - } - case 1: { - rate = 1; - break; - } - case 2: { - rate = 1; - break; - } - case 3: { - rate = 1; - break; - } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } - case 6: { - rate = 1; - break; - } - case 7: { - rate = 1; - break; - } - case 8: { - rate = 1; - break; - } - case 9: { - rate = 1; - break; - } - case 10: { - rate = 1; - break; - } - case 11: { - rate = 1; - break; - } - case 12: { - rate = 1; - break; - } - case 13: { - rate = 1; - break; - } - case 14: { - rate = 1; - break; - } - case 15: { - rate = 1; - break; - } - case 16: { - rate = 1; - break; - } - case 17: { - rate = 1; - break; - } - case 18: { - rate = 1; - break; - } - case 19: { - rate = 1; - break; - } - case 20: { - rate = 1; - break; - } - case 21: { - rate = 1; - break; - } - case 22: { - rate = 1; - break; - } - case 23: { - rate = 1; - break; - } - case 24: { - rate = 1; - break; - } - default: { - rate = -1; - break; - } - - } - return rate; - - } - + virtual int getNumInputs() { return 25; } + virtual int getNumOutputs() { return 25; } static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - + fTempPerm0 = 0; + fTempPerm1 = 0; + fTempPerm2 = 0; + fTempPerm3 = 0; + fTempPerm4 = 0; + fTempPerm5 = 0; + fTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; + fTempPerm9 = 0; + fTempPerm10 = 0; + fTempPerm11 = 0; + fTempPerm12 = 0; + fTempPerm13 = 0; + fTempPerm14 = 0; + fTempPerm15 = 0; + fTempPerm16 = 0; + fTempPerm17 = 0; + fTempPerm18 = 0; + fTempPerm19 = 0; + fTempPerm20 = 0; + fTempPerm21 = 0; + fTempPerm22 = 0; + fTempPerm23 = 0; } - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - fHslider1 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(0.0); - + fslider0 = 0.0; + fslider1 = 0.0; + fslider2 = 0.0; } - virtual void instanceClear() { - } - virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -904,484 +699,480 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } - virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; } - virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator4"); - ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); - ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); - ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider0, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fslider1, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); ui_interface->closeBox(); - } - - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { - FAUSTFLOAT* input0 = inputs[0]; - FAUSTFLOAT* input1 = inputs[1]; - FAUSTFLOAT* input2 = inputs[2]; - FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* input4 = inputs[4]; - FAUSTFLOAT* input5 = inputs[5]; - FAUSTFLOAT* input6 = inputs[6]; - FAUSTFLOAT* input7 = inputs[7]; - FAUSTFLOAT* input8 = inputs[8]; - FAUSTFLOAT* input9 = inputs[9]; - FAUSTFLOAT* input10 = inputs[10]; - FAUSTFLOAT* input11 = inputs[11]; - FAUSTFLOAT* input12 = inputs[12]; - FAUSTFLOAT* input13 = inputs[13]; - FAUSTFLOAT* input14 = inputs[14]; - FAUSTFLOAT* input15 = inputs[15]; - FAUSTFLOAT* input16 = inputs[16]; - FAUSTFLOAT* input17 = inputs[17]; - FAUSTFLOAT* input18 = inputs[18]; - FAUSTFLOAT* input19 = inputs[19]; - FAUSTFLOAT* input20 = inputs[20]; - FAUSTFLOAT* input21 = inputs[21]; - FAUSTFLOAT* input22 = inputs[22]; - FAUSTFLOAT* input23 = inputs[23]; - FAUSTFLOAT* input24 = inputs[24]; - FAUSTFLOAT* output0 = outputs[0]; - FAUSTFLOAT* output1 = outputs[1]; - FAUSTFLOAT* output2 = outputs[2]; - FAUSTFLOAT* output3 = outputs[3]; - FAUSTFLOAT* output4 = outputs[4]; - FAUSTFLOAT* output5 = outputs[5]; - FAUSTFLOAT* output6 = outputs[6]; - FAUSTFLOAT* output7 = outputs[7]; - FAUSTFLOAT* output8 = outputs[8]; - FAUSTFLOAT* output9 = outputs[9]; - FAUSTFLOAT* output10 = outputs[10]; - FAUSTFLOAT* output11 = outputs[11]; - FAUSTFLOAT* output12 = outputs[12]; - FAUSTFLOAT* output13 = outputs[13]; - FAUSTFLOAT* output14 = outputs[14]; - FAUSTFLOAT* output15 = outputs[15]; - FAUSTFLOAT* output16 = outputs[16]; - FAUSTFLOAT* output17 = outputs[17]; - FAUSTFLOAT* output18 = outputs[18]; - FAUSTFLOAT* output19 = outputs[19]; - FAUSTFLOAT* output20 = outputs[20]; - FAUSTFLOAT* output21 = outputs[21]; - FAUSTFLOAT* output22 = outputs[22]; - FAUSTFLOAT* output23 = outputs[23]; - FAUSTFLOAT* output24 = outputs[24]; - double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fHslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = sin(fSlow0); - double fSlow6 = sin(fSlow2); - double fSlow7 = (fSlow5 * fSlow6); - double fSlow8 = double(fHslider2); - double fSlow9 = sin(fSlow8); - double fSlow10 = (fSlow4 - (fSlow7 * fSlow9)); - double fSlow11 = cos(fSlow8); - double fSlow12 = (0.0 - fSlow11); - double fSlow13 = (fSlow6 * fSlow12); - double fSlow14 = (fSlow5 * fSlow3); - double fSlow15 = (fSlow6 * fSlow9); - double fSlow16 = (fSlow14 + (fSlow15 * fSlow1)); - double fSlow17 = (fSlow6 * fSlow1); - double fSlow18 = (fSlow5 * fSlow9); - double fSlow19 = (fSlow17 + (fSlow18 * fSlow3)); - double fSlow20 = (fSlow3 * fSlow11); - double fSlow21 = (fSlow9 * fSlow1); - double fSlow22 = ((fSlow21 * (0.0 - fSlow3)) + fSlow7); - double fSlow23 = (fSlow5 * fSlow12); - double fSlow24 = (fSlow1 * fSlow11); - double fSlow25 = ((fSlow24 * fSlow10) + (fSlow23 * fSlow16)); - double fSlow26 = mydsp_faustpower2_f(fSlow12); - double fSlow27 = ((fSlow9 * fSlow10) + (fSlow7 * fSlow26)); - double fSlow28 = (1.7320508075688772 * (fSlow15 * fSlow12)); - double fSlow29 = ((fSlow9 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); - double fSlow30 = ((fSlow24 * fSlow16) - (fSlow23 * fSlow10)); - double fSlow31 = ((fSlow19 * fSlow16) + (fSlow22 * fSlow10)); - double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow6 * fSlow19) * fSlow12))); - double fSlow33 = (1.7320508075688772 * (((fSlow6 * fSlow3) * fSlow11) * fSlow12)); - double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow6 * fSlow22) * fSlow12))); - double fSlow35 = ((fSlow22 * fSlow16) - (fSlow19 * fSlow10)); - double fSlow36 = (((fSlow5 * fSlow1) * fSlow11) * fSlow12); - double fSlow37 = (fSlow16 * fSlow10); - double fSlow38 = ((1.1547005383792515 * (fSlow22 * fSlow19)) - (0.57735026918962573 * (fSlow36 + fSlow37))); - double fSlow39 = (fSlow6 * fSlow10); - double fSlow40 = ((1.1547005383792515 * (fSlow20 * fSlow19)) - (0.57735026918962573 * ((fSlow18 + fSlow39) * fSlow12))); - double fSlow41 = mydsp_faustpower2_f(fSlow3); - double fSlow42 = mydsp_faustpower2_f(fSlow11); - double fSlow43 = (fSlow41 * fSlow42); - double fSlow44 = mydsp_faustpower2_f(fSlow9); - double fSlow45 = mydsp_faustpower2_f(fSlow6); - double fSlow46 = (fSlow45 * fSlow26); - double fSlow47 = (fSlow44 + fSlow46); - double fSlow48 = (fSlow43 - (0.5 * fSlow47)); - double fSlow49 = (fSlow21 * fSlow11); - double fSlow50 = (fSlow13 * fSlow16); - double fSlow51 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.57735026918962573 * (fSlow49 + fSlow50))); - double fSlow52 = (mydsp_faustpower2_f(fSlow1) * fSlow42); - double fSlow53 = mydsp_faustpower2_f(fSlow16); - double fSlow54 = (mydsp_faustpower2_f(fSlow5) * fSlow26); - double fSlow55 = mydsp_faustpower2_f(fSlow10); - double fSlow56 = ((0.57735026918962573 * (mydsp_faustpower2_f(fSlow22) - mydsp_faustpower2_f(fSlow19))) - (0.28867513459481287 * ((fSlow52 + fSlow53) - (fSlow54 + fSlow55)))); - double fSlow57 = (((fSlow5 * fSlow22) * fSlow12) + (fSlow24 * fSlow19)); - double fSlow58 = (((fSlow14 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow9 * fSlow19))); - double fSlow59 = (1.7320508075688772 * ((fSlow9 * fSlow3) * fSlow11)); - double fSlow60 = ((fSlow4 * fSlow42) + (1.0000000000000002 * (fSlow9 * fSlow22))); - double fSlow61 = ((fSlow24 * fSlow22) - ((fSlow5 * fSlow19) * fSlow12)); - double fSlow62 = (fSlow36 - fSlow37); - double fSlow63 = (fSlow18 - fSlow39); - double fSlow64 = (fSlow12 * fSlow63); - double fSlow65 = (fSlow44 - fSlow46); - double fSlow66 = (0.8660254037844386 * fSlow65); - double fSlow67 = (fSlow49 - fSlow50); - double fSlow68 = ((fSlow52 + fSlow55) - (fSlow54 + fSlow53)); - double fSlow69 = (0.5 * fSlow68); - double fSlow70 = (0.5 * (fSlow10 * fSlow68)); - double fSlow71 = ((fSlow24 * fSlow25) + (fSlow23 * fSlow30)); - double fSlow72 = (fSlow16 * fSlow62); - double fSlow73 = (fSlow70 + (fSlow71 + fSlow72)); - double fSlow74 = (fSlow24 * fSlow30); - double fSlow75 = (0.5 * (fSlow16 * fSlow68)); - double fSlow76 = (fSlow23 * fSlow25); - double fSlow77 = (fSlow10 * fSlow62); - double fSlow78 = ((fSlow74 + fSlow75) - (fSlow76 + fSlow77)); - double fSlow79 = (fSlow9 * fSlow25); - double fSlow80 = (fSlow13 * fSlow62); - double fSlow81 = (fSlow79 + fSlow80); - double fSlow82 = (fSlow9 * fSlow30); - double fSlow83 = (0.5 * (fSlow13 * fSlow68)); - double fSlow84 = (fSlow82 + fSlow83); - double fSlow85 = (1.7320508075688772 * fSlow44); - double fSlow86 = (fSlow66 + fSlow85); - double fSlow87 = (0.9128709291752769 * (fSlow13 * fSlow86)); - double fSlow88 = (fSlow9 * fSlow27); - double fSlow89 = (fSlow6 * fSlow26); - double fSlow90 = (fSlow89 * fSlow63); - double fSlow91 = (fSlow88 + fSlow90); - double fSlow92 = (fSlow9 * fSlow29); - double fSlow93 = (fSlow13 * fSlow67); - double fSlow94 = (fSlow92 + fSlow93); - double fSlow95 = (((fSlow22 * fSlow25) + (fSlow19 * fSlow30)) + ((fSlow61 * fSlow10) + ((((fSlow31 * fSlow1) * fSlow11) + ((fSlow35 * fSlow5) * fSlow12)) + (fSlow57 * fSlow16)))); - double fSlow96 = (((fSlow22 * fSlow30) - (fSlow19 * fSlow25)) + ((((fSlow35 * fSlow1) * fSlow11) + (fSlow61 * fSlow16)) - (((fSlow31 * fSlow5) * fSlow12) + (fSlow57 * fSlow10)))); - double fSlow97 = (((fSlow61 * fSlow6) * fSlow12) + ((fSlow20 * fSlow30) + (fSlow35 * fSlow9))); - double fSlow98 = ((fSlow20 * fSlow27) + ((fSlow32 * fSlow9) + ((fSlow58 * fSlow6) * fSlow12))); - double fSlow99 = ((fSlow20 * fSlow29) + ((fSlow34 * fSlow9) + ((fSlow60 * fSlow6) * fSlow12))); - double fSlow100 = (((fSlow57 * fSlow6) * fSlow12) + ((fSlow20 * fSlow25) + (fSlow31 * fSlow9))); - double fSlow101 = (3.872983346207417 * (((fSlow15 * fSlow3) * fSlow11) * fSlow12)); - double fSlow102 = (((0.5163977794943222 * ((fSlow31 * fSlow22) + (fSlow35 * fSlow19))) + (0.44721359549995798 * ((fSlow38 * fSlow16) + (fSlow56 * fSlow10)))) - (0.12909944487358055 * (fSlow71 - (fSlow72 + fSlow70)))); - double fSlow103 = (((1.2649110640673518 * ((fSlow31 * fSlow3) * fSlow11)) + (1.0954451150103324 * ((fSlow38 * fSlow6) * fSlow12))) - (0.31622776601683794 * (fSlow79 - fSlow80))); - double fSlow104 = ((((fSlow32 * fSlow3) * fSlow11) + (0.8660254037844386 * ((fSlow40 * fSlow6) * fSlow12))) - (0.25 * (fSlow88 - fSlow90))); - double fSlow105 = ((1.6329931618554518 * fSlow43) + (0.81649658092772603 * fSlow48)); - double fSlow106 = (fSlow105 - (0.23570226039551584 * (fSlow85 - fSlow66))); - double fSlow107 = ((fSlow106 * fSlow6) * fSlow12); - double fSlow108 = ((((fSlow34 * fSlow3) * fSlow11) + (0.8660254037844386 * ((fSlow51 * fSlow6) * fSlow12))) - (0.25 * (fSlow92 - fSlow93))); - double fSlow109 = (((1.2649110640673518 * ((fSlow35 * fSlow3) * fSlow11)) + (1.0954451150103324 * ((fSlow56 * fSlow6) * fSlow12))) - (0.31622776601683794 * (fSlow82 - fSlow83))); - double fSlow110 = (((0.5163977794943222 * ((fSlow35 * fSlow22) - (fSlow31 * fSlow19))) + (0.44721359549995798 * ((fSlow56 * fSlow16) - (fSlow38 * fSlow10)))) - (0.12909944487358055 * ((fSlow74 + fSlow77) - (fSlow76 + fSlow75)))); - double fSlow111 = (((fSlow57 * fSlow1) * fSlow11) + ((fSlow61 * fSlow5) * fSlow12)); - double fSlow112 = (fSlow31 * fSlow16); - double fSlow113 = (fSlow35 * fSlow10); - double fSlow114 = ((0.54772255750516607 * ((fSlow38 * fSlow22) + (fSlow56 * fSlow19))) - (0.31622776601683794 * ((fSlow111 + fSlow112) + fSlow113))); - double fSlow115 = (fSlow57 * fSlow9); - double fSlow116 = ((fSlow31 * fSlow6) * fSlow12); - double fSlow117 = ((1.3416407864998738 * ((fSlow38 * fSlow3) * fSlow11)) - (0.7745966692414834 * (fSlow115 + fSlow116))); - double fSlow118 = (fSlow58 * fSlow9); - double fSlow119 = ((fSlow32 * fSlow6) * fSlow12); - double fSlow120 = ((1.0606601717798212 * ((fSlow40 * fSlow3) * fSlow11)) - (0.61237243569579447 * (fSlow118 + fSlow119))); - double fSlow121 = (fSlow48 - (0.99999999999999989 * fSlow47)); - double fSlow122 = ((fSlow121 * fSlow3) * fSlow11); - double fSlow123 = (fSlow60 * fSlow9); - double fSlow124 = ((fSlow34 * fSlow6) * fSlow12); - double fSlow125 = ((1.0606601717798212 * ((fSlow51 * fSlow3) * fSlow11)) - (0.61237243569579447 * (fSlow123 + fSlow124))); - double fSlow126 = (fSlow61 * fSlow9); - double fSlow127 = ((fSlow35 * fSlow6) * fSlow12); - double fSlow128 = ((1.3416407864998738 * ((fSlow56 * fSlow3) * fSlow11)) - (0.7745966692414834 * (fSlow126 + fSlow127))); - double fSlow129 = ((fSlow61 * fSlow1) * fSlow11); - double fSlow130 = (fSlow35 * fSlow16); - double fSlow131 = ((fSlow57 * fSlow5) * fSlow12); - double fSlow132 = (fSlow31 * fSlow10); - double fSlow133 = ((0.54772255750516607 * ((fSlow56 * fSlow22) - (fSlow38 * fSlow19))) - (0.31622776601683794 * ((fSlow129 + fSlow130) - (fSlow131 + fSlow132)))); - double fSlow134 = ((fSlow24 * fSlow62) + (0.5 * (fSlow23 * fSlow68))); - double fSlow135 = (fSlow16 * fSlow25); - double fSlow136 = (fSlow10 * fSlow30); - double fSlow137 = (((0.5163977794943222 * ((fSlow57 * fSlow22) + (fSlow61 * fSlow19))) + (0.44721359549995798 * (((fSlow38 * fSlow1) * fSlow11) + ((fSlow56 * fSlow5) * fSlow12)))) - (0.12909944487358055 * ((fSlow134 + fSlow135) + fSlow136))); - double fSlow138 = (fSlow9 * fSlow62); - double fSlow139 = (fSlow13 * fSlow25); - double fSlow140 = (((1.2649110640673518 * ((fSlow57 * fSlow3) * fSlow11)) + (1.0954451150103324 * (fSlow38 * fSlow9))) - (0.31622776601683794 * (fSlow138 + fSlow139))); - double fSlow141 = (fSlow9 * fSlow63); - double fSlow142 = (fSlow6 * fSlow27); - double fSlow143 = ((((fSlow58 * fSlow3) * fSlow11) + (0.8660254037844386 * (fSlow40 * fSlow9))) - (0.25 * ((fSlow141 + fSlow142) * fSlow12))); - double fSlow144 = (1.7320508075688772 * fSlow46); - double fSlow145 = (fSlow105 - (0.23570226039551584 * (fSlow66 + fSlow144))); - double fSlow146 = (fSlow145 * fSlow9); - double fSlow147 = (fSlow9 * fSlow67); - double fSlow148 = (fSlow13 * fSlow29); - double fSlow149 = ((((fSlow60 * fSlow3) * fSlow11) + (0.8660254037844386 * (fSlow51 * fSlow9))) - (0.25 * (fSlow147 + fSlow148))); - double fSlow150 = (0.5 * (fSlow9 * fSlow68)); - double fSlow151 = (fSlow13 * fSlow30); - double fSlow152 = (((1.2649110640673518 * ((fSlow61 * fSlow3) * fSlow11)) + (1.0954451150103324 * (fSlow56 * fSlow9))) - (0.31622776601683794 * (fSlow150 + fSlow151))); - double fSlow153 = (0.5 * (fSlow24 * fSlow68)); - double fSlow154 = (fSlow16 * fSlow30); - double fSlow155 = (fSlow23 * fSlow62); - double fSlow156 = (fSlow10 * fSlow25); - double fSlow157 = (((0.5163977794943222 * ((fSlow61 * fSlow22) - (fSlow57 * fSlow19))) + (0.44721359549995798 * (((fSlow56 * fSlow1) * fSlow11) - ((fSlow38 * fSlow5) * fSlow12)))) - (0.12909944487358055 * ((fSlow153 + fSlow154) - (fSlow155 + fSlow156)))); - double fSlow158 = (((fSlow22 * fSlow62) + (0.5 * (fSlow19 * fSlow68))) + (fSlow111 - (fSlow112 + fSlow113))); - double fSlow159 = (((0.5 * (fSlow22 * fSlow68)) - (fSlow19 * fSlow62)) + ((fSlow129 + fSlow132) - (fSlow131 + fSlow130))); - double fSlow160 = (((0.5 * (fSlow20 * fSlow68)) + fSlow126) - fSlow127); - double fSlow161 = (fSlow20 * fSlow12); - double fSlow162 = ((fSlow161 * fSlow63) + (fSlow118 - fSlow119)); - double fSlow163 = ((fSlow20 * fSlow67) + (fSlow123 - fSlow124)); - double fSlow164 = (((fSlow20 * fSlow62) + fSlow115) - fSlow116); - double fSlow165 = (1.9364916731037085 * (fSlow20 * fSlow65)); - double fSlow166 = (fSlow134 - (fSlow135 + fSlow136)); - double fSlow167 = ((fSlow153 + fSlow156) - (fSlow155 + fSlow154)); - double fSlow168 = (fSlow138 - fSlow139); - double fSlow169 = (fSlow150 - fSlow151); - double fSlow170 = (fSlow66 - fSlow144); - double fSlow171 = (0.9128709291752769 * (fSlow9 * fSlow170)); - double fSlow172 = (fSlow141 - fSlow142); - double fSlow173 = (fSlow12 * fSlow172); - double fSlow174 = (fSlow147 - fSlow148); - double fSlow175 = ((fSlow24 * fSlow73) + (fSlow23 * fSlow78)); - double fSlow176 = ((fSlow16 * fSlow166) + (fSlow10 * fSlow167)); - double fSlow177 = (fSlow175 + fSlow176); - double fSlow178 = ((fSlow24 * fSlow78) - (fSlow23 * fSlow73)); - double fSlow179 = ((fSlow16 * fSlow167) - (fSlow10 * fSlow166)); - double fSlow180 = (fSlow178 + fSlow179); - double fSlow181 = (fSlow9 * fSlow73); - double fSlow182 = (fSlow13 * fSlow166); - double fSlow183 = (fSlow181 + fSlow182); - double fSlow184 = (fSlow9 * fSlow78); - double fSlow185 = (fSlow13 * fSlow167); - double fSlow186 = (fSlow184 + fSlow185); - double fSlow187 = (fSlow9 * fSlow81); - double fSlow188 = (fSlow13 * fSlow168); - double fSlow189 = (fSlow187 + fSlow188); - double fSlow190 = (fSlow9 * fSlow84); - double fSlow191 = (fSlow13 * fSlow169); - double fSlow192 = (fSlow190 + fSlow191); - double fSlow193 = (0.85391256382996661 * ((((fSlow170 + fSlow86) * fSlow6) * fSlow9) * fSlow12)); - double fSlow194 = (fSlow89 * fSlow172); - double fSlow195 = (fSlow9 * fSlow91); - double fSlow196 = (fSlow194 + fSlow195); - double fSlow197 = (fSlow9 * fSlow94); - double fSlow198 = (fSlow13 * fSlow174); - double fSlow199 = (fSlow197 + fSlow198); - double fSlow200 = (fSlow100 * fSlow9); - double fSlow201 = ((fSlow164 * fSlow6) * fSlow12); - double fSlow202 = ((fSlow20 * fSlow81) + (fSlow200 + fSlow201)); - double fSlow203 = (fSlow97 * fSlow9); - double fSlow204 = ((fSlow160 * fSlow6) * fSlow12); - double fSlow205 = ((fSlow20 * fSlow84) + (fSlow203 + fSlow204)); - double fSlow206 = (fSlow99 * fSlow9); - double fSlow207 = ((fSlow163 * fSlow6) * fSlow12); - double fSlow208 = ((0.66143782776614757 * (fSlow20 * fSlow94)) + (0.66143782776614768 * (fSlow206 + fSlow207))); - double fSlow209 = (3.872983346207417 * fSlow44); - double fSlow210 = (1.9364916731037085 * fSlow65); - double fSlow211 = ((((((0.81009258730098255 * (fSlow209 + fSlow210)) + (0.60380736442455996 * fSlow86)) * fSlow6) * fSlow3) * fSlow11) * fSlow12); - double fSlow212 = (((fSlow95 * fSlow1) * fSlow11) + ((fSlow96 * fSlow5) * fSlow12)); - double fSlow213 = ((fSlow158 * fSlow16) + (fSlow159 * fSlow10)); - double fSlow214 = ((0.17677669529663689 * ((fSlow22 * fSlow73) + (fSlow19 * fSlow78))) + (0.17677669529663687 * (fSlow212 + fSlow213))); - double fSlow215 = (fSlow95 * fSlow9); - double fSlow216 = ((fSlow158 * fSlow6) * fSlow12); - double fSlow217 = ((0.5 * (fSlow20 * fSlow73)) + (0.49999999999999994 * (fSlow215 + fSlow216))); - double fSlow218 = (fSlow98 * fSlow9); - double fSlow219 = ((fSlow162 * fSlow6) * fSlow12); - double fSlow220 = ((0.66143782776614757 * (fSlow20 * fSlow91)) + (0.66143782776614768 * (fSlow218 + fSlow219))); - double fSlow221 = ((fSlow159 * fSlow6) * fSlow12); - double fSlow222 = (fSlow96 * fSlow9); - double fSlow223 = ((0.5 * (fSlow20 * fSlow78)) + (0.49999999999999994 * (fSlow221 + fSlow222))); - double fSlow224 = (((fSlow96 * fSlow1) * fSlow11) - ((fSlow95 * fSlow5) * fSlow12)); - double fSlow225 = ((fSlow159 * fSlow16) - (fSlow158 * fSlow10)); - double fSlow226 = ((0.17677669529663689 * ((fSlow22 * fSlow78) - (fSlow19 * fSlow73))) + (0.17677669529663687 * (fSlow224 + fSlow225))); - double fSlow227 = (((0.1889822365046136 * ((fSlow95 * fSlow22) + (fSlow96 * fSlow19))) + (0.36596252735569995 * ((fSlow157 * fSlow10) + ((((fSlow102 * fSlow1) * fSlow11) + ((fSlow110 * fSlow5) * fSlow12)) + (fSlow137 * fSlow16))))) - (0.0472455591261534 * (fSlow175 - fSlow176))); - double fSlow228 = (((0.53452248382484868 * ((fSlow95 * fSlow3) * fSlow11)) + (1.0350983390135313 * ((fSlow102 * fSlow9) + ((fSlow137 * fSlow6) * fSlow12)))) - (0.1336306209562122 * (fSlow181 - fSlow182))); - double fSlow229 = ((((fSlow100 * fSlow3) * fSlow11) + (0.79056941504209488 * ((fSlow103 * fSlow9) + ((fSlow140 * fSlow6) * fSlow12)))) - (0.24999999999999997 * (fSlow187 - fSlow188))); - double fSlow230 = ((0.70710678118654757 * (((fSlow98 * fSlow3) * fSlow11) + ((fSlow104 * fSlow9) + ((fSlow143 * fSlow6) * fSlow12)))) - (0.18257418583505536 * (0.0 - (0.96824583655185426 * (fSlow194 - fSlow195))))); - double fSlow231 = ((((((0.68465319688145765 * (fSlow145 + fSlow106)) + (3.3541019662496843 * fSlow43)) * fSlow6) * fSlow9) * fSlow12) - (0.17677669529663689 * (0.0 - (0.9128709291752769 * ((((fSlow170 - fSlow86) * fSlow6) * fSlow9) * fSlow12))))); - double fSlow232 = ((0.70710678118654757 * (((fSlow99 * fSlow3) * fSlow11) + ((fSlow108 * fSlow9) + ((fSlow149 * fSlow6) * fSlow12)))) - (0.17677669529663687 * (fSlow197 - fSlow198))); - double fSlow233 = ((((fSlow97 * fSlow3) * fSlow11) + (0.79056941504209488 * ((fSlow109 * fSlow9) + ((fSlow152 * fSlow6) * fSlow12)))) - (0.24999999999999997 * (fSlow190 - fSlow191))); - double fSlow234 = (((0.53452248382484868 * ((fSlow96 * fSlow3) * fSlow11)) + (1.0350983390135313 * ((fSlow110 * fSlow9) + ((fSlow157 * fSlow6) * fSlow12)))) - (0.1336306209562122 * (fSlow184 - fSlow185))); - double fSlow235 = (((0.1889822365046136 * ((fSlow96 * fSlow22) - (fSlow95 * fSlow19))) + (0.36596252735569995 * ((((fSlow110 * fSlow1) * fSlow11) + (fSlow157 * fSlow16)) - (((fSlow102 * fSlow5) * fSlow12) + (fSlow137 * fSlow10))))) - (0.0472455591261534 * (fSlow178 - fSlow179))); - double fSlow236 = (((0.51754916950676566 * ((fSlow102 * fSlow22) + (fSlow110 * fSlow19))) + (0.42257712736425829 * ((fSlow114 * fSlow16) + (fSlow133 * fSlow10)))) - (0.066815310478106085 * (fSlow212 - fSlow213))); - double fSlow237 = (((1.4638501094227998 * ((fSlow102 * fSlow3) * fSlow11)) + (1.1952286093343938 * ((fSlow114 * fSlow6) * fSlow12))) - (0.1889822365046136 * (fSlow215 - fSlow216))); - double fSlow238 = (((1.1180339887498949 * ((fSlow103 * fSlow3) * fSlow11)) + (0.9128709291752769 * ((fSlow117 * fSlow6) * fSlow12))) - (0.35355339059327379 * (fSlow200 - fSlow201))); - double fSlow239 = ((((fSlow104 * fSlow3) * fSlow11) + (0.81649658092772603 * ((fSlow120 * fSlow6) * fSlow12))) - (0.25 * (fSlow218 - fSlow219))); - double fSlow240 = (0.79056941504209488 * fSlow121); - double fSlow241 = (((((((0.96824583655185426 * fSlow106) + fSlow240) - (0.30618621784789724 * (fSlow209 - fSlow210))) * fSlow6) * fSlow3) * fSlow11) * fSlow12); - double fSlow242 = ((((fSlow108 * fSlow3) * fSlow11) + (0.81649658092772603 * ((fSlow125 * fSlow6) * fSlow12))) - (0.25 * (fSlow206 - fSlow207))); - double fSlow243 = (((1.1180339887498949 * ((fSlow109 * fSlow3) * fSlow11)) + (0.9128709291752769 * ((fSlow128 * fSlow6) * fSlow12))) - (0.35355339059327379 * (fSlow203 - fSlow204))); - double fSlow244 = (((1.4638501094227998 * ((fSlow110 * fSlow3) * fSlow11)) + (1.1952286093343938 * ((fSlow133 * fSlow6) * fSlow12))) - (0.46291004988627571 * (0.0 - (0.40824829046386302 * (fSlow221 - fSlow222))))); - double fSlow245 = (((0.51754916950676566 * ((fSlow110 * fSlow22) - (fSlow102 * fSlow19))) + (0.42257712736425829 * ((fSlow133 * fSlow16) - (fSlow114 * fSlow10)))) - (0.066815310478106085 * (fSlow224 - fSlow225))); - double fSlow246 = (((fSlow137 * fSlow1) * fSlow11) + ((fSlow157 * fSlow5) * fSlow12)); - double fSlow247 = (fSlow102 * fSlow16); - double fSlow248 = (fSlow110 * fSlow10); - double fSlow249 = ((0.53452248382484879 * ((fSlow114 * fSlow22) + (fSlow133 * fSlow19))) - (0.32732683535398854 * ((fSlow246 + fSlow247) + fSlow248))); - double fSlow250 = (fSlow137 * fSlow9); - double fSlow251 = ((fSlow102 * fSlow6) * fSlow12); - double fSlow252 = ((1.5118578920369088 * ((fSlow114 * fSlow3) * fSlow11)) - (0.92582009977255142 * (fSlow250 + fSlow251))); - double fSlow253 = (fSlow140 * fSlow9); - double fSlow254 = ((fSlow103 * fSlow6) * fSlow12); - double fSlow255 = ((1.1547005383792515 * ((fSlow117 * fSlow3) * fSlow11)) - (0.70710678118654757 * (fSlow253 + fSlow254))); - double fSlow256 = (fSlow143 * fSlow9); - double fSlow257 = ((fSlow104 * fSlow6) * fSlow12); - double fSlow258 = ((1.0327955589886444 * ((fSlow120 * fSlow3) * fSlow11)) - (0.63245553203367588 * (fSlow256 + fSlow257))); - double fSlow259 = (fSlow145 * fSlow44); - double fSlow260 = ((fSlow106 * fSlow45) * fSlow26); - double fSlow261 = (((fSlow121 * fSlow41) * fSlow42) - (0.61237243569579447 * (fSlow259 + fSlow260))); - double fSlow262 = (fSlow149 * fSlow9); - double fSlow263 = ((fSlow108 * fSlow6) * fSlow12); - double fSlow264 = ((1.0327955589886444 * ((fSlow125 * fSlow3) * fSlow11)) - (0.63245553203367588 * (fSlow262 + fSlow263))); - double fSlow265 = (fSlow152 * fSlow9); - double fSlow266 = ((fSlow109 * fSlow6) * fSlow12); - double fSlow267 = ((1.1547005383792515 * ((fSlow128 * fSlow3) * fSlow11)) - (0.70710678118654757 * (fSlow265 + fSlow266))); - double fSlow268 = (fSlow157 * fSlow9); - double fSlow269 = ((fSlow110 * fSlow6) * fSlow12); - double fSlow270 = ((1.5118578920369088 * ((fSlow133 * fSlow3) * fSlow11)) - (0.92582009977255142 * (fSlow268 + fSlow269))); - double fSlow271 = ((fSlow157 * fSlow1) * fSlow11); - double fSlow272 = (fSlow110 * fSlow16); - double fSlow273 = ((fSlow137 * fSlow5) * fSlow12); - double fSlow274 = (fSlow102 * fSlow10); - double fSlow275 = ((0.53452248382484879 * ((fSlow133 * fSlow22) - (fSlow114 * fSlow19))) - (0.32732683535398854 * ((fSlow271 + fSlow272) - (fSlow273 + fSlow274)))); - double fSlow276 = (((fSlow158 * fSlow1) * fSlow11) + ((fSlow159 * fSlow5) * fSlow12)); - double fSlow277 = ((fSlow96 * fSlow10) + (fSlow95 * fSlow16)); - double fSlow278 = (((0.51754916950676566 * ((fSlow137 * fSlow22) + (fSlow157 * fSlow19))) + (0.42257712736425829 * (((fSlow114 * fSlow1) * fSlow11) + ((fSlow133 * fSlow5) * fSlow12)))) - (0.066815310478106085 * (fSlow276 + fSlow277))); - double fSlow279 = (fSlow158 * fSlow9); - double fSlow280 = ((fSlow95 * fSlow6) * fSlow12); - double fSlow281 = (((1.4638501094227998 * ((fSlow137 * fSlow3) * fSlow11)) + (1.1952286093343938 * (fSlow114 * fSlow9))) - (0.1889822365046136 * (fSlow279 + fSlow280))); - double fSlow282 = (fSlow164 * fSlow9); - double fSlow283 = ((fSlow100 * fSlow6) * fSlow12); - double fSlow284 = (((1.1180339887498949 * ((fSlow140 * fSlow3) * fSlow11)) + (0.9128709291752769 * (fSlow117 * fSlow9))) - (0.35355339059327379 * (fSlow282 + fSlow283))); - double fSlow285 = (fSlow162 * fSlow9); - double fSlow286 = ((fSlow98 * fSlow6) * fSlow12); - double fSlow287 = ((((fSlow143 * fSlow3) * fSlow11) + (0.81649658092772603 * (fSlow120 * fSlow9))) - (0.25 * (fSlow285 + fSlow286))); - double fSlow288 = (3.872983346207417 * fSlow46); - double fSlow289 = (((((fSlow240 + (0.96824583655185426 * fSlow145)) - (0.30618621784789724 * (fSlow288 + fSlow210))) * fSlow9) * fSlow3) * fSlow11); - double fSlow290 = (fSlow163 * fSlow9); - double fSlow291 = ((fSlow99 * fSlow6) * fSlow12); - double fSlow292 = ((((fSlow149 * fSlow3) * fSlow11) + (0.81649658092772603 * (fSlow125 * fSlow9))) - (0.25 * (fSlow290 + fSlow291))); - double fSlow293 = (fSlow160 * fSlow9); - double fSlow294 = ((fSlow97 * fSlow6) * fSlow12); - double fSlow295 = (((1.1180339887498949 * ((fSlow152 * fSlow3) * fSlow11)) + (0.9128709291752769 * (fSlow128 * fSlow9))) - (0.35355339059327379 * (fSlow293 + fSlow294))); - double fSlow296 = (fSlow159 * fSlow9); - double fSlow297 = ((fSlow96 * fSlow6) * fSlow12); - double fSlow298 = (((1.4638501094227998 * ((fSlow157 * fSlow3) * fSlow11)) + (1.1952286093343938 * (fSlow133 * fSlow9))) - (0.1889822365046136 * (fSlow296 + fSlow297))); - double fSlow299 = (((fSlow159 * fSlow1) * fSlow11) - ((fSlow158 * fSlow5) * fSlow12)); - double fSlow300 = ((fSlow96 * fSlow16) - (fSlow95 * fSlow10)); - double fSlow301 = (((0.51754916950676566 * ((fSlow157 * fSlow22) - (fSlow137 * fSlow19))) + (0.42257712736425829 * (((fSlow133 * fSlow1) * fSlow11) - ((fSlow114 * fSlow5) * fSlow12)))) - (0.066815310478106085 * (fSlow299 + fSlow300))); - double fSlow302 = ((fSlow24 * fSlow166) + (fSlow23 * fSlow167)); - double fSlow303 = ((fSlow16 * fSlow73) + (fSlow10 * fSlow78)); - double fSlow304 = (((0.1889822365046136 * ((fSlow158 * fSlow22) + (fSlow159 * fSlow19))) + (0.36596252735569995 * (fSlow246 - (fSlow247 + fSlow248)))) - (0.0472455591261534 * (fSlow302 + fSlow303))); - double fSlow305 = (fSlow9 * fSlow166); - double fSlow306 = (fSlow13 * fSlow73); - double fSlow307 = (((0.53452248382484868 * ((fSlow158 * fSlow3) * fSlow11)) + (1.0350983390135313 * (fSlow250 - fSlow251))) - (0.1336306209562122 * (fSlow305 + fSlow306))); - double fSlow308 = (fSlow9 * fSlow168); - double fSlow309 = (fSlow13 * fSlow81); - double fSlow310 = ((((fSlow164 * fSlow3) * fSlow11) + (0.79056941504209488 * (fSlow253 - fSlow254))) - (0.24999999999999997 * (fSlow308 + fSlow309))); - double fSlow311 = (fSlow9 * fSlow172); - double fSlow312 = (fSlow6 * fSlow91); - double fSlow313 = ((0.70710678118654757 * (((fSlow162 * fSlow3) * fSlow11) + (fSlow256 - fSlow257))) - (0.17677669529663687 * ((fSlow311 + fSlow312) * fSlow12))); - double fSlow314 = (fSlow44 * fSlow170); - double fSlow315 = (fSlow46 * fSlow86); - double fSlow316 = (((1.6770509831248421 * (fSlow43 * fSlow65)) + (0.68465319688145765 * (fSlow259 - fSlow260))) - (0.16137430609197573 * (fSlow314 + fSlow315))); - double fSlow317 = (fSlow9 * fSlow174); - double fSlow318 = (fSlow13 * fSlow94); - double fSlow319 = ((0.70710678118654757 * (((fSlow163 * fSlow3) * fSlow11) + (fSlow262 - fSlow263))) - (0.17677669529663687 * (fSlow317 + fSlow318))); - double fSlow320 = (fSlow9 * fSlow169); - double fSlow321 = (fSlow13 * fSlow84); - double fSlow322 = ((((fSlow160 * fSlow3) * fSlow11) + (0.79056941504209488 * (fSlow265 - fSlow266))) - (0.24999999999999997 * (fSlow320 + fSlow321))); - double fSlow323 = (fSlow9 * fSlow167); - double fSlow324 = (fSlow13 * fSlow78); - double fSlow325 = (((0.53452248382484868 * ((fSlow159 * fSlow3) * fSlow11)) + (1.0350983390135313 * (fSlow268 - fSlow269))) - (0.1336306209562122 * (fSlow323 + fSlow324))); - double fSlow326 = ((fSlow24 * fSlow167) - (fSlow23 * fSlow166)); - double fSlow327 = ((fSlow16 * fSlow78) - (fSlow10 * fSlow73)); - double fSlow328 = (((0.1889822365046136 * ((fSlow159 * fSlow22) - (fSlow158 * fSlow19))) + (0.36596252735569995 * ((fSlow271 + fSlow274) - (fSlow273 + fSlow272)))) - (0.0472455591261534 * (fSlow326 + fSlow327))); - double fSlow329 = ((fSlow20 * fSlow168) + (fSlow282 - fSlow283)); - double fSlow330 = ((fSlow20 * fSlow169) + (fSlow293 - fSlow294)); - double fSlow331 = ((0.66143782776614757 * (fSlow20 * fSlow174)) + (0.66143782776614768 * (fSlow290 - fSlow291))); - double fSlow332 = (((((0.81009258730098255 * (fSlow210 - fSlow288)) + (0.60380736442455996 * fSlow170)) * fSlow9) * fSlow3) * fSlow11); - double fSlow333 = ((0.17677669529663689 * ((fSlow22 * fSlow166) + (fSlow19 * fSlow167))) + (0.17677669529663687 * (fSlow276 - fSlow277))); - double fSlow334 = ((0.5 * (fSlow20 * fSlow166)) + (0.49999999999999994 * (fSlow279 - fSlow280))); - double fSlow335 = ((0.66143782776614757 * (fSlow161 * fSlow172)) + (0.66143782776614768 * (fSlow285 - fSlow286))); - double fSlow336 = ((0.5 * (fSlow20 * fSlow167)) + (0.49999999999999994 * (fSlow296 - fSlow297))); - double fSlow337 = ((0.17677669529663689 * ((fSlow22 * fSlow167) - (fSlow19 * fSlow166))) + (0.17677669529663687 * (fSlow299 - fSlow300))); - double fSlow338 = (fSlow302 - fSlow303); - double fSlow339 = (fSlow326 - fSlow327); - double fSlow340 = (fSlow305 - fSlow306); - double fSlow341 = (fSlow323 - fSlow324); - double fSlow342 = (fSlow308 - fSlow309); - double fSlow343 = (fSlow320 - fSlow321); - double fSlow344 = (0.85391256382996661 * (fSlow314 - fSlow315)); - double fSlow345 = (fSlow12 * (fSlow311 - fSlow312)); - double fSlow346 = (fSlow317 - fSlow318); - for (int i = 0; (i < count); i = (i + 1)) { - output0[i] = FAUSTFLOAT(double(input0[i])); - double fTemp0 = double(input1[i]); - double fTemp1 = double(input2[i]); - double fTemp2 = double(input3[i]); - output1[i] = FAUSTFLOAT((((fSlow10 * fTemp0) + (fSlow13 * fTemp1)) + (fSlow16 * fTemp2))); - output2[i] = FAUSTFLOAT((((fSlow19 * fTemp0) + (fSlow20 * fTemp1)) + (fSlow22 * fTemp2))); - output3[i] = FAUSTFLOAT((((fSlow23 * fTemp0) + (fSlow9 * fTemp1)) + (fSlow24 * fTemp2))); - double fTemp3 = double(input4[i]); - double fTemp4 = double(input5[i]); - double fTemp5 = double(input6[i]); - double fTemp6 = double(input7[i]); - double fTemp7 = double(input8[i]); - output4[i] = FAUSTFLOAT((((((fSlow25 * fTemp3) + (fSlow27 * fTemp4)) + (fSlow28 * fTemp5)) + (fSlow29 * fTemp6)) + (fSlow30 * fTemp7))); - output5[i] = FAUSTFLOAT((((((fSlow31 * fTemp3) + (fSlow32 * fTemp4)) + (fSlow33 * fTemp5)) + (fSlow34 * fTemp6)) + (fSlow35 * fTemp7))); - output6[i] = FAUSTFLOAT((((((fSlow38 * fTemp3) + (fSlow40 * fTemp4)) + (fSlow48 * fTemp5)) + (fSlow51 * fTemp6)) + (fSlow56 * fTemp7))); - output7[i] = FAUSTFLOAT((((((fSlow57 * fTemp3) + (fSlow58 * fTemp4)) + (fSlow59 * fTemp5)) + (fSlow60 * fTemp6)) + (fSlow61 * fTemp7))); - output8[i] = FAUSTFLOAT((((((fSlow62 * fTemp3) + (fSlow64 * fTemp4)) + (fSlow66 * fTemp5)) + (fSlow67 * fTemp6)) + (fSlow69 * fTemp7))); - double fTemp8 = double(input9[i]); - double fTemp9 = double(input15[i]); - double fTemp10 = double(input10[i]); - double fTemp11 = double(input14[i]); - double fTemp12 = double(input12[i]); - double fTemp13 = double(input11[i]); - double fTemp14 = double(input13[i]); - output9[i] = FAUSTFLOAT(((0.5 * ((fSlow73 * fTemp8) + (fSlow78 * fTemp9))) + ((1.2247448713915889 * ((fSlow81 * fTemp10) + (fSlow84 * fTemp11))) + ((fSlow87 * fTemp12) + (0.96824583655185426 * ((fSlow91 * fTemp13) + (fSlow94 * fTemp14))))))); - output10[i] = FAUSTFLOAT(((0.40824829046386302 * ((fSlow95 * fTemp8) + (fSlow96 * fTemp9))) + ((fSlow97 * fTemp11) + ((0.79056941504209488 * ((fSlow98 * fTemp13) + (fSlow99 * fTemp14))) + ((fSlow100 * fTemp10) + (fSlow101 * fTemp12)))))); - output11[i] = FAUSTFLOAT((((((((fSlow102 * fTemp8) + (fSlow103 * fTemp10)) + (fSlow104 * fTemp13)) + (fSlow107 * fTemp12)) + (fSlow108 * fTemp14)) + (fSlow109 * fTemp11)) + (fSlow110 * fTemp9))); - output12[i] = FAUSTFLOAT((((((((fSlow114 * fTemp8) + (fSlow117 * fTemp10)) + (fSlow120 * fTemp13)) + (fSlow122 * fTemp12)) + (fSlow125 * fTemp14)) + (fSlow128 * fTemp11)) + (fSlow133 * fTemp9))); - output13[i] = FAUSTFLOAT((((((((fSlow137 * fTemp8) + (fSlow140 * fTemp10)) + (fSlow143 * fTemp13)) + (fSlow146 * fTemp12)) + (fSlow149 * fTemp14)) + (fSlow152 * fTemp11)) + (fSlow157 * fTemp9))); - output14[i] = FAUSTFLOAT(((0.40824829046386302 * ((fSlow158 * fTemp8) + (fSlow159 * fTemp9))) + ((fSlow160 * fTemp11) + ((0.79056941504209488 * ((fSlow162 * fTemp13) + (fSlow163 * fTemp14))) + ((fSlow164 * fTemp10) + (fSlow165 * fTemp12)))))); - output15[i] = FAUSTFLOAT(((0.5 * ((fSlow166 * fTemp8) + (fSlow167 * fTemp9))) + ((1.2247448713915889 * ((fSlow168 * fTemp10) + (fSlow169 * fTemp11))) + ((fSlow171 * fTemp12) + (0.96824583655185426 * ((fSlow173 * fTemp13) + (fSlow174 * fTemp14))))))); - double fTemp15 = double(input16[i]); - double fTemp16 = double(input24[i]); - double fTemp17 = double(input17[i]); - double fTemp18 = double(input23[i]); - double fTemp19 = double(input18[i]); - double fTemp20 = double(input22[i]); - double fTemp21 = double(input20[i]); - double fTemp22 = double(input19[i]); - double fTemp23 = double(input21[i]); - output16[i] = FAUSTFLOAT(((0.25 * ((fSlow177 * fTemp15) + (fSlow180 * fTemp16))) + ((0.70710678118654757 * ((fSlow183 * fTemp17) + (fSlow186 * fTemp18))) + ((1.3228756555322954 * ((fSlow189 * fTemp19) + (fSlow192 * fTemp20))) + ((fSlow193 * fTemp21) + (0.93541434669348533 * ((fSlow196 * fTemp22) + (fSlow199 * fTemp23)))))))); - output17[i] = FAUSTFLOAT(((((0.93541434669348533 * ((fSlow202 * fTemp19) + (fSlow205 * fTemp20))) + ((fSlow208 * fTemp23) + ((fSlow211 * fTemp21) + (((fSlow214 * fTemp15) + (fSlow217 * fTemp17)) + (fSlow220 * fTemp22))))) + (fSlow223 * fTemp18)) + (fSlow226 * fTemp16))); - output18[i] = FAUSTFLOAT((((((((((fSlow227 * fTemp15) + (fSlow228 * fTemp17)) + (fSlow229 * fTemp19)) + (fSlow230 * fTemp22)) + (fSlow231 * fTemp21)) + (fSlow232 * fTemp23)) + (fSlow233 * fTemp20)) + (fSlow234 * fTemp18)) + (fSlow235 * fTemp16))); - output19[i] = FAUSTFLOAT((((((((((fSlow236 * fTemp15) + (fSlow237 * fTemp17)) + (fSlow238 * fTemp19)) + (fSlow239 * fTemp22)) + (fSlow241 * fTemp21)) + (fSlow242 * fTemp23)) + (fSlow243 * fTemp20)) + (fSlow244 * fTemp18)) + (fSlow245 * fTemp16))); - output20[i] = FAUSTFLOAT((((((((((fSlow249 * fTemp15) + (fSlow252 * fTemp17)) + (fSlow255 * fTemp19)) + (fSlow258 * fTemp22)) + (fSlow261 * fTemp21)) + (fSlow264 * fTemp23)) + (fSlow267 * fTemp20)) + (fSlow270 * fTemp18)) + (fSlow275 * fTemp16))); - output21[i] = FAUSTFLOAT((((((((((fSlow278 * fTemp15) + (fSlow281 * fTemp17)) + (fSlow284 * fTemp19)) + (fSlow287 * fTemp22)) + (fSlow289 * fTemp21)) + (fSlow292 * fTemp23)) + (fSlow295 * fTemp20)) + (fSlow298 * fTemp18)) + (fSlow301 * fTemp16))); - output22[i] = FAUSTFLOAT((((((((((fSlow304 * fTemp15) + (fSlow307 * fTemp17)) + (fSlow310 * fTemp19)) + (fSlow313 * fTemp22)) + (fSlow316 * fTemp21)) + (fSlow319 * fTemp23)) + (fSlow322 * fTemp20)) + (fSlow325 * fTemp18)) + (fSlow328 * fTemp16))); - output23[i] = FAUSTFLOAT(((((0.93541434669348533 * ((fSlow329 * fTemp19) + (fSlow330 * fTemp20))) + ((fSlow331 * fTemp23) + ((fSlow332 * fTemp21) + (((fSlow333 * fTemp15) + (fSlow334 * fTemp17)) + (fSlow335 * fTemp22))))) + (fSlow336 * fTemp18)) + (fSlow337 * fTemp16))); - output24[i] = FAUSTFLOAT(((0.25 * ((fSlow338 * fTemp15) + (fSlow339 * fTemp16))) + ((0.70710678118654757 * ((fSlow340 * fTemp17) + (fSlow341 * fTemp18))) + ((1.3228756555322954 * ((fSlow342 * fTemp19) + (fSlow343 * fTemp20))) + ((fSlow344 * fTemp21) + (0.93541434669348533 * ((fSlow345 * fTemp22) + (fSlow346 * fTemp23)))))))); - + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + //zone1 + //zone2 + double fSlow0 = double(fslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = double(fslider1); + double fSlow3 = cos(fSlow2); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = double(fslider2); + double fSlow6 = sin(fSlow5); + double fSlow7 = sin(fSlow0); + double fSlow8 = (fSlow6 * fSlow7); + double fSlow9 = sin(fSlow2); + double fSlow10 = (fSlow4 - (fSlow8 * fSlow9)); + double fSlow11 = cos(fSlow5); + double fSlow12 = (0 - fSlow11); + double fSlow13 = (fSlow7 * fSlow12); + double fSlow14 = (fSlow3 * fSlow6); + double fSlow15 = (fSlow1 * fSlow9); + double fSlow16 = ((fSlow14 * fSlow7) + fSlow15); + double fSlow17 = (fSlow3 * fSlow7); + double fSlow18 = (fSlow1 * fSlow6); + double fSlow19 = (fSlow17 + (fSlow18 * fSlow9)); + double fSlow20 = (fSlow1 * fSlow11); + double fSlow21 = (fSlow7 * fSlow9); + double fSlow22 = (fSlow21 + (fSlow14 * (0 - fSlow1))); + double fSlow23 = (fSlow9 * fSlow12); + double fSlow24 = (fSlow3 * fSlow11); + double fSlow25 = ((fSlow24 * fSlow10) + ((fSlow9 * fSlow16) * fSlow12)); + double fSlow26 = faustpower<2>(fSlow12); + double fSlow27 = ((fSlow6 * fSlow10) + (fSlow21 * fSlow26)); + double fSlow28 = (1.7320508075688772 * (fSlow8 * fSlow12)); + double fSlow29 = ((fSlow6 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); + double fSlow30 = ((fSlow24 * fSlow16) - ((fSlow9 * fSlow10) * fSlow12)); + double fSlow31 = ((fSlow19 * fSlow16) + (fSlow10 * fSlow22)); + double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow7 * fSlow19) * fSlow12))); + double fSlow33 = (1.7320508075688772 * (((fSlow1 * fSlow7) * fSlow11) * fSlow12)); + double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow7 * fSlow22) * fSlow12))); + double fSlow35 = ((fSlow16 * fSlow22) - (fSlow19 * fSlow10)); + double fSlow36 = (fSlow16 * fSlow10); + double fSlow37 = (((fSlow3 * fSlow9) * fSlow11) * fSlow12); + double fSlow38 = ((1.1547005383792515 * (fSlow19 * fSlow22)) - (0.5773502691896257 * (fSlow36 + fSlow37))); + double fSlow39 = (fSlow6 * fSlow9); + double fSlow40 = (fSlow7 * fSlow10); + double fSlow41 = ((1.1547005383792515 * ((fSlow1 * fSlow19) * fSlow11)) - (0.5773502691896257 * ((fSlow39 + fSlow40) * fSlow12))); + double fSlow42 = faustpower<2>(fSlow1); + double fSlow43 = faustpower<2>(fSlow11); + double fSlow44 = (fSlow42 * fSlow43); + double fSlow45 = faustpower<2>(fSlow6); + double fSlow46 = faustpower<2>(fSlow7); + double fSlow47 = (fSlow46 * fSlow26); + double fSlow48 = (fSlow45 + fSlow47); + double fSlow49 = (fSlow44 - (0.5 * fSlow48)); + double fSlow50 = (fSlow14 * fSlow11); + double fSlow51 = ((fSlow7 * fSlow16) * fSlow12); + double fSlow52 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.5773502691896257 * (fSlow50 + fSlow51))); + double fSlow53 = (faustpower<2>(fSlow3) * fSlow43); + double fSlow54 = faustpower<2>(fSlow16); + double fSlow55 = (faustpower<2>(fSlow9) * fSlow26); + double fSlow56 = faustpower<2>(fSlow10); + double fSlow57 = ((0.5773502691896257 * (faustpower<2>(fSlow22) - faustpower<2>(fSlow19))) - (0.28867513459481287 * ((fSlow53 + fSlow54) - (fSlow55 + fSlow56)))); + double fSlow58 = (((fSlow9 * fSlow22) * fSlow12) + ((fSlow3 * fSlow19) * fSlow11)); + double fSlow59 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow6 * fSlow19))); + double fSlow60 = (fSlow18 * fSlow11); + double fSlow61 = (1.7320508075688772 * fSlow60); + double fSlow62 = ((fSlow4 * fSlow43) + (1.0000000000000002 * (fSlow6 * fSlow22))); + double fSlow63 = ((fSlow24 * fSlow22) - ((fSlow9 * fSlow19) * fSlow12)); + double fSlow64 = (fSlow50 - fSlow51); + double fSlow65 = (fSlow39 - fSlow40); + double fSlow66 = (fSlow65 * fSlow12); + double fSlow67 = (fSlow45 - fSlow47); + double fSlow68 = (0.8660254037844386 * fSlow67); + double fSlow69 = (0 - (2 * (fSlow36 - fSlow37))); + double fSlow70 = ((fSlow53 + fSlow56) - (fSlow55 + fSlow54)); + double fSlow71 = (fSlow6 * fSlow25); + double fSlow72 = (0.5 * (fSlow13 * fSlow69)); + double fSlow73 = (fSlow71 + fSlow72); + double fSlow74 = (fSlow6 * fSlow30); + double fSlow75 = (0.5 * (fSlow13 * fSlow70)); + double fSlow76 = (fSlow74 + fSlow75); + double fSlow77 = (1.7320508075688772 * fSlow45); + double fSlow78 = (fSlow68 + fSlow77); + double fSlow79 = (0.9128709291752769 * ((fSlow78 * fSlow7) * fSlow12)); + double fSlow80 = (fSlow27 * fSlow6); + double fSlow81 = ((fSlow65 * fSlow7) * fSlow26); + double fSlow82 = (fSlow80 + fSlow81); + double fSlow83 = (fSlow6 * fSlow29); + double fSlow84 = (fSlow13 * fSlow64); + double fSlow85 = (fSlow83 + fSlow84); + double fSlow86 = ((fSlow24 * fSlow25) + (fSlow23 * fSlow30)); + double fSlow87 = (0.5 * ((fSlow16 * fSlow69) + (fSlow10 * fSlow70))); + double fSlow88 = (fSlow86 + fSlow87); + double fSlow89 = (fSlow24 * fSlow30); + double fSlow90 = (0.5 * ((fSlow16 * fSlow70) - (fSlow10 * fSlow69))); + double fSlow91 = (fSlow23 * fSlow25); + double fSlow92 = ((fSlow89 + fSlow90) - fSlow91); + double fSlow93 = (((fSlow27 * fSlow1) * fSlow11) + ((fSlow6 * fSlow32) + (fSlow13 * fSlow59))); + double fSlow94 = ((fSlow20 * fSlow29) + ((fSlow6 * fSlow34) + (fSlow13 * fSlow62))); + double fSlow95 = ((fSlow13 * fSlow58) + ((fSlow20 * fSlow25) + (fSlow6 * fSlow31))); + double fSlow96 = (3.872983346207417 * (((fSlow18 * fSlow7) * fSlow11) * fSlow12)); + double fSlow97 = ((fSlow13 * fSlow63) + ((fSlow20 * fSlow30) + (fSlow6 * fSlow35))); + double fSlow98 = (((fSlow22 * fSlow25) + (fSlow19 * fSlow30)) + ((fSlow10 * fSlow63) + ((fSlow23 * fSlow35) + ((fSlow24 * fSlow31) + (fSlow16 * fSlow58))))); + double fSlow99 = (((fSlow22 * fSlow30) - (fSlow19 * fSlow25)) + (((fSlow24 * fSlow35) + (fSlow16 * fSlow63)) - ((fSlow23 * fSlow31) + (fSlow10 * fSlow58)))); + double fSlow100 = (((1.2649110640673518 * (fSlow20 * fSlow31)) + (1.0954451150103324 * ((fSlow38 * fSlow7) * fSlow12))) - (0.31622776601683794 * (fSlow71 - fSlow72))); + double fSlow101 = (((0.5163977794943222 * ((fSlow22 * fSlow31) + (fSlow19 * fSlow35))) + (0.447213595499958 * ((fSlow38 * fSlow16) + (fSlow57 * fSlow10)))) - (0.12909944487358055 * (fSlow86 - fSlow87))); + double fSlow102 = (((fSlow20 * fSlow32) + (0.8660254037844386 * ((fSlow41 * fSlow7) * fSlow12))) - (0.25 * (fSlow80 - fSlow81))); + double fSlow103 = ((1.6329931618554518 * fSlow44) + (0.816496580927726 * fSlow49)); + double fSlow104 = (fSlow103 - (0.23570226039551584 * (fSlow77 - fSlow68))); + double fSlow105 = ((fSlow104 * fSlow7) * fSlow12); + double fSlow106 = (((fSlow20 * fSlow34) + (0.8660254037844386 * ((fSlow52 * fSlow7) * fSlow12))) - (0.25 * (fSlow83 - fSlow84))); + double fSlow107 = (((1.2649110640673518 * (fSlow20 * fSlow35)) + (1.0954451150103324 * ((fSlow57 * fSlow7) * fSlow12))) - (0.31622776601683794 * (fSlow74 - fSlow75))); + double fSlow108 = (((0.5163977794943222 * ((fSlow22 * fSlow35) - (fSlow19 * fSlow31))) + (0.447213595499958 * ((fSlow57 * fSlow16) - (fSlow38 * fSlow10)))) - (0.12909944487358055 * (fSlow89 - (fSlow91 + fSlow90)))); + double fSlow109 = ((fSlow24 * fSlow58) + (fSlow23 * fSlow63)); + double fSlow110 = (fSlow16 * fSlow31); + double fSlow111 = (fSlow10 * fSlow35); + double fSlow112 = ((0.5477225575051661 * ((fSlow38 * fSlow22) + (fSlow57 * fSlow19))) - (0.31622776601683794 * ((fSlow109 + fSlow110) + fSlow111))); + double fSlow113 = (fSlow6 * fSlow58); + double fSlow114 = (fSlow13 * fSlow31); + double fSlow115 = ((1.3416407864998738 * ((fSlow38 * fSlow1) * fSlow11)) - (0.7745966692414834 * (fSlow113 + fSlow114))); + double fSlow116 = (fSlow6 * fSlow59); + double fSlow117 = (fSlow13 * fSlow32); + double fSlow118 = ((1.0606601717798212 * ((fSlow41 * fSlow1) * fSlow11)) - (0.6123724356957945 * (fSlow116 + fSlow117))); + double fSlow119 = (fSlow49 - (0.9999999999999999 * fSlow48)); + double fSlow120 = ((fSlow119 * fSlow1) * fSlow11); + double fSlow121 = (fSlow6 * fSlow62); + double fSlow122 = (fSlow13 * fSlow34); + double fSlow123 = ((1.0606601717798212 * ((fSlow52 * fSlow1) * fSlow11)) - (0.6123724356957945 * (fSlow121 + fSlow122))); + double fSlow124 = (fSlow6 * fSlow63); + double fSlow125 = (fSlow13 * fSlow35); + double fSlow126 = ((1.3416407864998738 * ((fSlow57 * fSlow1) * fSlow11)) - (0.7745966692414834 * (fSlow124 + fSlow125))); + double fSlow127 = (fSlow24 * fSlow63); + double fSlow128 = (fSlow16 * fSlow35); + double fSlow129 = (fSlow23 * fSlow58); + double fSlow130 = (fSlow10 * fSlow31); + double fSlow131 = ((0.5477225575051661 * ((fSlow57 * fSlow22) - (fSlow38 * fSlow19))) - (0.31622776601683794 * ((fSlow127 + fSlow128) - (fSlow129 + fSlow130)))); + double fSlow132 = (0.5 * ((fSlow24 * fSlow69) + (fSlow23 * fSlow70))); + double fSlow133 = (fSlow16 * fSlow25); + double fSlow134 = (fSlow10 * fSlow30); + double fSlow135 = (((0.447213595499958 * (((fSlow38 * fSlow3) * fSlow11) + ((fSlow57 * fSlow9) * fSlow12))) + (0.5163977794943222 * ((fSlow22 * fSlow58) + (fSlow19 * fSlow63)))) - (0.12909944487358055 * ((fSlow132 + fSlow133) + fSlow134))); + double fSlow136 = (0.5 * (fSlow6 * fSlow69)); + double fSlow137 = (fSlow13 * fSlow25); + double fSlow138 = (((1.2649110640673518 * (fSlow20 * fSlow58)) + (1.0954451150103324 * (fSlow38 * fSlow6))) - (0.31622776601683794 * (fSlow136 + fSlow137))); + double fSlow139 = (fSlow65 * fSlow6); + double fSlow140 = (fSlow27 * fSlow7); + double fSlow141 = (((fSlow20 * fSlow59) + (0.8660254037844386 * (fSlow41 * fSlow6))) - (0.25 * ((fSlow139 + fSlow140) * fSlow12))); + double fSlow142 = (1.7320508075688772 * fSlow47); + double fSlow143 = (fSlow103 - (0.23570226039551584 * (fSlow68 + fSlow142))); + double fSlow144 = (fSlow143 * fSlow6); + double fSlow145 = (fSlow6 * fSlow64); + double fSlow146 = (fSlow13 * fSlow29); + double fSlow147 = (((fSlow20 * fSlow62) + (0.8660254037844386 * (fSlow52 * fSlow6))) - (0.25 * (fSlow145 + fSlow146))); + double fSlow148 = (0.5 * (fSlow6 * fSlow70)); + double fSlow149 = (fSlow13 * fSlow30); + double fSlow150 = (((1.2649110640673518 * (fSlow20 * fSlow63)) + (1.0954451150103324 * (fSlow57 * fSlow6))) - (0.31622776601683794 * (fSlow148 + fSlow149))); + double fSlow151 = (fSlow16 * fSlow30); + double fSlow152 = (0.5 * ((fSlow24 * fSlow70) - (fSlow23 * fSlow69))); + double fSlow153 = (fSlow10 * fSlow25); + double fSlow154 = (((0.5163977794943222 * ((fSlow22 * fSlow63) - (fSlow19 * fSlow58))) + (0.447213595499958 * (((fSlow57 * fSlow3) * fSlow11) - ((fSlow38 * fSlow9) * fSlow12)))) - (0.12909944487358055 * ((fSlow151 + fSlow152) - fSlow153))); + double fSlow155 = (((0.5 * (fSlow20 * fSlow70)) + fSlow124) - fSlow125); + double fSlow156 = ((0.2041241452319315 * ((fSlow22 * fSlow70) - (fSlow19 * fSlow69))) + (0.408248290463863 * ((fSlow127 + fSlow130) - (fSlow128 + fSlow129)))); + double fSlow157 = ((0.2041241452319315 * ((fSlow22 * fSlow69) + (fSlow19 * fSlow70))) + (0.408248290463863 * (fSlow109 - (fSlow110 + fSlow111)))); + double fSlow158 = (((0.5 * (fSlow20 * fSlow69)) + fSlow113) - fSlow114); + double fSlow159 = (1.9364916731037085 * ((fSlow67 * fSlow1) * fSlow11)); + double fSlow160 = ((((fSlow65 * fSlow1) * fSlow11) * fSlow12) + (fSlow116 - fSlow117)); + double fSlow161 = ((fSlow20 * fSlow64) + (fSlow121 - fSlow122)); + double fSlow162 = (fSlow139 - fSlow140); + double fSlow163 = (fSlow162 * fSlow12); + double fSlow164 = (fSlow145 - fSlow146); + double fSlow165 = (fSlow148 - fSlow149); + double fSlow166 = (fSlow136 - fSlow137); + double fSlow167 = ((fSlow152 + fSlow153) - fSlow151); + double fSlow168 = (fSlow132 - (fSlow133 + fSlow134)); + double fSlow169 = (fSlow68 - fSlow142); + double fSlow170 = (0.9128709291752769 * (fSlow169 * fSlow6)); + double fSlow171 = (fSlow6 * fSlow88); + double fSlow172 = (fSlow13 * fSlow168); + double fSlow173 = (fSlow171 + fSlow172); + double fSlow174 = (fSlow6 * fSlow92); + double fSlow175 = (fSlow13 * fSlow167); + double fSlow176 = (fSlow174 + fSlow175); + double fSlow177 = (0.8539125638299666 * ((((fSlow169 + fSlow78) * fSlow6) * fSlow7) * fSlow12)); + double fSlow178 = (fSlow82 * fSlow6); + double fSlow179 = ((fSlow162 * fSlow7) * fSlow26); + double fSlow180 = (fSlow178 + fSlow179); + double fSlow181 = (fSlow6 * fSlow85); + double fSlow182 = (fSlow13 * fSlow164); + double fSlow183 = (fSlow181 + fSlow182); + double fSlow184 = (fSlow73 * fSlow6); + double fSlow185 = ((fSlow166 * fSlow7) * fSlow12); + double fSlow186 = (fSlow184 + fSlow185); + double fSlow187 = (fSlow6 * fSlow76); + double fSlow188 = (fSlow13 * fSlow165); + double fSlow189 = (fSlow187 + fSlow188); + double fSlow190 = ((fSlow24 * fSlow88) + (fSlow23 * fSlow92)); + double fSlow191 = ((fSlow10 * fSlow167) + (fSlow16 * fSlow168)); + double fSlow192 = (fSlow190 + fSlow191); + double fSlow193 = ((fSlow24 * fSlow92) - (fSlow23 * fSlow88)); + double fSlow194 = ((fSlow16 * fSlow167) - (fSlow10 * fSlow168)); + double fSlow195 = (fSlow193 + fSlow194); + double fSlow196 = (fSlow6 * fSlow94); + double fSlow197 = (fSlow13 * fSlow161); + double fSlow198 = ((0.6614378277661476 * (fSlow20 * fSlow85)) + (0.6614378277661477 * (fSlow196 + fSlow197))); + double fSlow199 = (3.872983346207417 * fSlow45); + double fSlow200 = (1.9364916731037085 * fSlow67); + double fSlow201 = ((((((0.8100925873009825 * (fSlow199 + fSlow200)) + (0.60380736442456 * fSlow78)) * fSlow1) * fSlow7) * fSlow11) * fSlow12); + double fSlow202 = (0.408248290463863 * (fSlow6 * fSlow98)); + double fSlow203 = (fSlow13 * fSlow157); + double fSlow204 = ((0.5 * (fSlow20 * fSlow88)) + (1.224744871391589 * (fSlow202 + fSlow203))); + double fSlow205 = (0.408248290463863 * ((fSlow24 * fSlow98) + (fSlow23 * fSlow99))); + double fSlow206 = (fSlow16 * fSlow157); + double fSlow207 = (fSlow10 * fSlow156); + double fSlow208 = ((0.1767766952966369 * ((fSlow22 * fSlow88) + (fSlow19 * fSlow92))) + (0.4330127018922193 * ((fSlow205 + fSlow206) + fSlow207))); + double fSlow209 = (fSlow6 * fSlow93); + double fSlow210 = (fSlow13 * fSlow160); + double fSlow211 = ((0.6614378277661476 * ((fSlow82 * fSlow1) * fSlow11)) + (0.6614378277661477 * (fSlow209 + fSlow210))); + double fSlow212 = (fSlow6 * fSlow95); + double fSlow213 = (fSlow13 * fSlow158); + double fSlow214 = (((fSlow73 * fSlow1) * fSlow11) + (fSlow212 + fSlow213)); + double fSlow215 = (fSlow6 * fSlow97); + double fSlow216 = (fSlow13 * fSlow155); + double fSlow217 = ((fSlow20 * fSlow76) + (fSlow215 + fSlow216)); + double fSlow218 = (0.408248290463863 * ((fSlow24 * fSlow99) - (fSlow23 * fSlow98))); + double fSlow219 = (fSlow16 * fSlow156); + double fSlow220 = (fSlow10 * fSlow157); + double fSlow221 = ((0.1767766952966369 * ((fSlow22 * fSlow92) - (fSlow19 * fSlow88))) + (0.4330127018922193 * ((fSlow218 + fSlow219) - fSlow220))); + double fSlow222 = (0.408248290463863 * (fSlow6 * fSlow99)); + double fSlow223 = (fSlow13 * fSlow156); + double fSlow224 = ((0.5 * (fSlow20 * fSlow92)) + (1.224744871391589 * (fSlow222 + fSlow223))); + double fSlow225 = (((fSlow20 * fSlow97) + (0.7905694150420949 * ((fSlow107 * fSlow6) + ((fSlow150 * fSlow7) * fSlow12)))) - (0.24999999999999997 * (fSlow187 - fSlow188))); + double fSlow226 = (((0.5345224838248487 * (fSlow20 * fSlow99)) + (1.0350983390135313 * ((fSlow108 * fSlow6) + ((fSlow154 * fSlow7) * fSlow12)))) - (0.1336306209562122 * (fSlow174 - fSlow175))); + double fSlow227 = (((0.1889822365046136 * ((fSlow22 * fSlow99) - (fSlow19 * fSlow98))) + (0.36596252735569995 * ((((fSlow108 * fSlow3) * fSlow11) + (fSlow154 * fSlow16)) - (((fSlow101 * fSlow9) * fSlow12) + (fSlow135 * fSlow10))))) - (0.0472455591261534 * (fSlow193 - fSlow194))); + double fSlow228 = (((0.1889822365046136 * ((fSlow22 * fSlow98) + (fSlow19 * fSlow99))) + (0.36596252735569995 * ((fSlow154 * fSlow10) + ((((fSlow101 * fSlow3) * fSlow11) + ((fSlow108 * fSlow9) * fSlow12)) + (fSlow135 * fSlow16))))) - (0.0472455591261534 * (fSlow190 - fSlow191))); + double fSlow229 = (((0.5345224838248487 * (fSlow20 * fSlow98)) + (1.0350983390135313 * ((fSlow101 * fSlow6) + ((fSlow135 * fSlow7) * fSlow12)))) - (0.1336306209562122 * (fSlow171 - fSlow172))); + double fSlow230 = (((fSlow20 * fSlow95) + (0.7905694150420949 * ((fSlow100 * fSlow6) + ((fSlow138 * fSlow7) * fSlow12)))) - (0.24999999999999997 * (fSlow184 - fSlow185))); + double fSlow231 = ((0.7071067811865476 * ((fSlow20 * fSlow93) + ((fSlow102 * fSlow6) + ((fSlow141 * fSlow7) * fSlow12)))) - (0.17677669529663687 * (fSlow178 - fSlow179))); + double fSlow232 = ((((((0.6846531968814576 * (fSlow143 + fSlow104)) + (3.3541019662496843 * fSlow44)) * fSlow6) * fSlow7) * fSlow12) - (0.1767766952966369 * (0 - (0.9128709291752769 * ((((fSlow169 - fSlow78) * fSlow6) * fSlow7) * fSlow12))))); + double fSlow233 = ((0.7071067811865476 * ((fSlow20 * fSlow94) + ((fSlow106 * fSlow6) + ((fSlow147 * fSlow7) * fSlow12)))) - (0.17677669529663687 * (fSlow181 - fSlow182))); + double fSlow234 = (((0.5175491695067657 * ((fSlow101 * fSlow22) + (fSlow108 * fSlow19))) + (0.4225771273642583 * ((fSlow112 * fSlow16) + (fSlow131 * fSlow10)))) - (0.16366341767699427 * (fSlow205 - (fSlow206 + fSlow207)))); + double fSlow235 = (((1.4638501094227998 * ((fSlow101 * fSlow1) * fSlow11)) + (1.1952286093343938 * ((fSlow112 * fSlow7) * fSlow12))) - (0.4629100498862757 * (fSlow202 - fSlow203))); + double fSlow236 = (((1.118033988749895 * ((fSlow100 * fSlow1) * fSlow11)) + (0.9128709291752769 * ((fSlow115 * fSlow7) * fSlow12))) - (0.3535533905932738 * (fSlow212 - fSlow213))); + double fSlow237 = ((((fSlow102 * fSlow1) * fSlow11) + (0.816496580927726 * ((fSlow118 * fSlow7) * fSlow12))) - (0.25 * (fSlow209 - fSlow210))); + double fSlow238 = (0.7905694150420949 * fSlow119); + double fSlow239 = (((((((0.9682458365518543 * fSlow104) + fSlow238) - (0.30618621784789724 * (fSlow199 - fSlow200))) * fSlow1) * fSlow7) * fSlow11) * fSlow12); + double fSlow240 = ((((fSlow106 * fSlow1) * fSlow11) + (0.816496580927726 * ((fSlow123 * fSlow7) * fSlow12))) - (0.25 * (fSlow196 - fSlow197))); + double fSlow241 = (((1.118033988749895 * ((fSlow107 * fSlow1) * fSlow11)) + (0.9128709291752769 * ((fSlow126 * fSlow7) * fSlow12))) - (0.3535533905932738 * (fSlow215 - fSlow216))); + double fSlow242 = (((1.4638501094227998 * ((fSlow108 * fSlow1) * fSlow11)) + (1.1952286093343938 * ((fSlow131 * fSlow7) * fSlow12))) - (0.4629100498862757 * (fSlow222 - fSlow223))); + double fSlow243 = (((0.5175491695067657 * ((fSlow108 * fSlow22) - (fSlow101 * fSlow19))) + (0.4225771273642583 * ((fSlow131 * fSlow16) - (fSlow112 * fSlow10)))) - (0.16366341767699427 * ((fSlow218 + fSlow220) - fSlow219))); + double fSlow244 = (fSlow108 * fSlow10); + double fSlow245 = (((fSlow135 * fSlow3) * fSlow11) + ((fSlow154 * fSlow9) * fSlow12)); + double fSlow246 = (fSlow101 * fSlow16); + double fSlow247 = ((0.5345224838248488 * ((fSlow112 * fSlow22) + (fSlow131 * fSlow19))) - (0.32732683535398854 * (fSlow244 + (fSlow245 + fSlow246)))); + double fSlow248 = (fSlow135 * fSlow6); + double fSlow249 = ((fSlow101 * fSlow7) * fSlow12); + double fSlow250 = ((1.5118578920369088 * ((fSlow112 * fSlow1) * fSlow11)) - (0.9258200997725514 * (fSlow248 + fSlow249))); + double fSlow251 = (fSlow138 * fSlow6); + double fSlow252 = ((fSlow100 * fSlow7) * fSlow12); + double fSlow253 = ((1.1547005383792515 * ((fSlow115 * fSlow1) * fSlow11)) - (0.7071067811865476 * (fSlow251 + fSlow252))); + double fSlow254 = (fSlow141 * fSlow6); + double fSlow255 = ((fSlow102 * fSlow7) * fSlow12); + double fSlow256 = ((1.0327955589886444 * ((fSlow118 * fSlow1) * fSlow11)) - (0.6324555320336759 * (fSlow254 + fSlow255))); + double fSlow257 = (fSlow143 * fSlow45); + double fSlow258 = ((fSlow104 * fSlow46) * fSlow26); + double fSlow259 = (((fSlow119 * fSlow42) * fSlow43) - (0.6123724356957945 * (fSlow257 + fSlow258))); + double fSlow260 = (fSlow147 * fSlow6); + double fSlow261 = ((fSlow106 * fSlow7) * fSlow12); + double fSlow262 = ((1.0327955589886444 * ((fSlow123 * fSlow1) * fSlow11)) - (0.6324555320336759 * (fSlow260 + fSlow261))); + double fSlow263 = (fSlow150 * fSlow6); + double fSlow264 = ((fSlow107 * fSlow7) * fSlow12); + double fSlow265 = ((1.1547005383792515 * ((fSlow126 * fSlow1) * fSlow11)) - (0.7071067811865476 * (fSlow263 + fSlow264))); + double fSlow266 = (fSlow154 * fSlow6); + double fSlow267 = ((fSlow108 * fSlow7) * fSlow12); + double fSlow268 = ((1.5118578920369088 * ((fSlow131 * fSlow1) * fSlow11)) - (0.9258200997725514 * (fSlow266 + fSlow267))); + double fSlow269 = (fSlow108 * fSlow16); + double fSlow270 = ((fSlow154 * fSlow3) * fSlow11); + double fSlow271 = ((fSlow135 * fSlow9) * fSlow12); + double fSlow272 = (fSlow101 * fSlow10); + double fSlow273 = ((0.5345224838248488 * ((fSlow131 * fSlow22) - (fSlow112 * fSlow19))) - (0.32732683535398854 * ((fSlow269 + fSlow270) - (fSlow271 + fSlow272)))); + double fSlow274 = ((fSlow24 * fSlow157) + (fSlow23 * fSlow156)); + double fSlow275 = (0.408248290463863 * ((fSlow16 * fSlow98) + (fSlow10 * fSlow99))); + double fSlow276 = (((0.5175491695067657 * ((fSlow135 * fSlow22) + (fSlow154 * fSlow19))) + (0.4225771273642583 * (((fSlow112 * fSlow3) * fSlow11) + ((fSlow131 * fSlow9) * fSlow12)))) - (0.16366341767699427 * (fSlow274 + fSlow275))); + double fSlow277 = (fSlow6 * fSlow157); + double fSlow278 = (0.408248290463863 * (fSlow13 * fSlow98)); + double fSlow279 = (((1.4638501094227998 * ((fSlow135 * fSlow1) * fSlow11)) + (1.1952286093343938 * (fSlow112 * fSlow6))) - (0.4629100498862757 * (fSlow277 + fSlow278))); + double fSlow280 = (fSlow6 * fSlow158); + double fSlow281 = (fSlow13 * fSlow95); + double fSlow282 = (((1.118033988749895 * ((fSlow138 * fSlow1) * fSlow11)) + (0.9128709291752769 * (fSlow115 * fSlow6))) - (0.3535533905932738 * (fSlow280 + fSlow281))); + double fSlow283 = (fSlow6 * fSlow160); + double fSlow284 = (fSlow13 * fSlow93); + double fSlow285 = ((((fSlow141 * fSlow1) * fSlow11) + (0.816496580927726 * (fSlow118 * fSlow6))) - (0.25 * (fSlow283 + fSlow284))); + double fSlow286 = (3.872983346207417 * fSlow47); + double fSlow287 = ((((((0.9682458365518543 * fSlow143) + fSlow238) - (0.30618621784789724 * (fSlow200 + fSlow286))) * fSlow1) * fSlow6) * fSlow11); + double fSlow288 = (fSlow6 * fSlow161); + double fSlow289 = (fSlow13 * fSlow94); + double fSlow290 = ((((fSlow147 * fSlow1) * fSlow11) + (0.816496580927726 * (fSlow123 * fSlow6))) - (0.25 * (fSlow288 + fSlow289))); + double fSlow291 = (fSlow6 * fSlow155); + double fSlow292 = (fSlow13 * fSlow97); + double fSlow293 = (((1.118033988749895 * ((fSlow150 * fSlow1) * fSlow11)) + (0.9128709291752769 * (fSlow126 * fSlow6))) - (0.3535533905932738 * (fSlow291 + fSlow292))); + double fSlow294 = (fSlow6 * fSlow156); + double fSlow295 = (0.408248290463863 * (fSlow13 * fSlow99)); + double fSlow296 = (((1.4638501094227998 * ((fSlow154 * fSlow1) * fSlow11)) + (1.1952286093343938 * (fSlow131 * fSlow6))) - (0.4629100498862757 * (fSlow294 + fSlow295))); + double fSlow297 = (fSlow24 * fSlow156); + double fSlow298 = (0.408248290463863 * ((fSlow16 * fSlow99) - (fSlow10 * fSlow98))); + double fSlow299 = (fSlow23 * fSlow157); + double fSlow300 = (((0.5175491695067657 * ((fSlow154 * fSlow22) - (fSlow135 * fSlow19))) + (0.4225771273642583 * (((fSlow131 * fSlow3) * fSlow11) - ((fSlow112 * fSlow9) * fSlow12)))) - (0.16366341767699427 * ((fSlow297 + fSlow298) - fSlow299))); + double fSlow301 = ((fSlow24 * fSlow168) + (fSlow23 * fSlow167)); + double fSlow302 = ((fSlow16 * fSlow88) + (fSlow10 * fSlow92)); + double fSlow303 = (((0.36596252735569995 * (fSlow245 - (fSlow246 + fSlow244))) + (0.4629100498862757 * ((fSlow22 * fSlow157) + (fSlow19 * fSlow156)))) - (0.0472455591261534 * (fSlow301 + fSlow302))); + double fSlow304 = (fSlow6 * fSlow168); + double fSlow305 = (fSlow13 * fSlow88); + double fSlow306 = (((1.3093073414159542 * (fSlow20 * fSlow157)) + (1.0350983390135313 * (fSlow248 - fSlow249))) - (0.1336306209562122 * (fSlow304 + fSlow305))); + double fSlow307 = (fSlow166 * fSlow6); + double fSlow308 = ((fSlow73 * fSlow7) * fSlow12); + double fSlow309 = (((fSlow20 * fSlow158) + (0.7905694150420949 * (fSlow251 - fSlow252))) - (0.24999999999999997 * (fSlow307 + fSlow308))); + double fSlow310 = (fSlow162 * fSlow6); + double fSlow311 = (fSlow82 * fSlow7); + double fSlow312 = ((0.7071067811865476 * ((fSlow20 * fSlow160) + (fSlow254 - fSlow255))) - (0.17677669529663687 * ((fSlow310 + fSlow311) * fSlow12))); + double fSlow313 = (fSlow169 * fSlow45); + double fSlow314 = ((fSlow78 * fSlow46) * fSlow26); + double fSlow315 = (((1.6770509831248421 * ((fSlow67 * fSlow42) * fSlow43)) + (0.6846531968814576 * (fSlow257 - fSlow258))) - (0.16137430609197573 * (fSlow313 + fSlow314))); + double fSlow316 = (fSlow6 * fSlow164); + double fSlow317 = (fSlow13 * fSlow85); + double fSlow318 = ((0.7071067811865476 * ((fSlow20 * fSlow161) + (fSlow260 - fSlow261))) - (0.17677669529663687 * (fSlow316 + fSlow317))); + double fSlow319 = (fSlow6 * fSlow165); + double fSlow320 = (fSlow13 * fSlow76); + double fSlow321 = (((fSlow20 * fSlow155) + (0.7905694150420949 * (fSlow263 - fSlow264))) - (0.24999999999999997 * (fSlow319 + fSlow320))); + double fSlow322 = (fSlow6 * fSlow167); + double fSlow323 = (fSlow13 * fSlow92); + double fSlow324 = (((1.3093073414159542 * (fSlow20 * fSlow156)) + (1.0350983390135313 * (fSlow266 - fSlow267))) - (0.1336306209562122 * (fSlow322 + fSlow323))); + double fSlow325 = ((fSlow24 * fSlow167) - (fSlow23 * fSlow168)); + double fSlow326 = ((fSlow16 * fSlow92) - (fSlow10 * fSlow88)); + double fSlow327 = (((0.36596252735569995 * ((fSlow272 + fSlow270) - (fSlow271 + fSlow269))) + (0.4629100498862757 * ((fSlow22 * fSlow156) - (fSlow19 * fSlow157)))) - (0.0472455591261534 * (fSlow325 + fSlow326))); + double fSlow328 = ((0.6614378277661476 * (fSlow20 * fSlow164)) + (0.6614378277661477 * (fSlow288 - fSlow289))); + double fSlow329 = (fSlow60 * ((0.60380736442456 * fSlow169) + (0.8100925873009825 * (fSlow200 - fSlow286)))); + double fSlow330 = ((0.1767766952966369 * ((fSlow22 * fSlow168) + (fSlow19 * fSlow167))) + (0.4330127018922193 * (fSlow274 - fSlow275))); + double fSlow331 = ((0.5 * (fSlow20 * fSlow168)) + (1.224744871391589 * (fSlow277 - fSlow278))); + double fSlow332 = ((0.6614378277661476 * (((fSlow162 * fSlow1) * fSlow11) * fSlow12)) + (0.6614378277661477 * (fSlow283 - fSlow284))); + double fSlow333 = (((fSlow166 * fSlow1) * fSlow11) + (fSlow280 - fSlow281)); + double fSlow334 = ((fSlow20 * fSlow165) + (fSlow291 - fSlow292)); + double fSlow335 = ((0.5 * (fSlow20 * fSlow167)) + (1.224744871391589 * (fSlow294 - fSlow295))); + double fSlow336 = ((0.1767766952966369 * ((fSlow22 * fSlow167) - (fSlow19 * fSlow168))) + (0.4330127018922193 * (fSlow297 - (fSlow299 + fSlow298)))); + double fSlow337 = (fSlow304 - fSlow305); + double fSlow338 = (fSlow322 - fSlow323); + double fSlow339 = (fSlow307 - fSlow308); + double fSlow340 = (fSlow319 - fSlow320); + double fSlow341 = (0.8539125638299666 * (fSlow313 - fSlow314)); + double fSlow342 = ((fSlow310 - fSlow311) * fSlow12); + double fSlow343 = (fSlow316 - fSlow317); + double fSlow344 = (fSlow301 - fSlow302); + double fSlow345 = (fSlow325 - fSlow326); + //zone2b + //zone3 + FAUSTFLOAT* input0 = input[0]; + FAUSTFLOAT* input1 = input[1]; + FAUSTFLOAT* input2 = input[2]; + FAUSTFLOAT* input3 = input[3]; + FAUSTFLOAT* input4 = input[4]; + FAUSTFLOAT* input5 = input[5]; + FAUSTFLOAT* input6 = input[6]; + FAUSTFLOAT* input7 = input[7]; + FAUSTFLOAT* input8 = input[8]; + FAUSTFLOAT* input9 = input[9]; + FAUSTFLOAT* input10 = input[10]; + FAUSTFLOAT* input11 = input[11]; + FAUSTFLOAT* input12 = input[12]; + FAUSTFLOAT* input13 = input[13]; + FAUSTFLOAT* input14 = input[14]; + FAUSTFLOAT* input15 = input[15]; + FAUSTFLOAT* input16 = input[16]; + FAUSTFLOAT* input17 = input[17]; + FAUSTFLOAT* input18 = input[18]; + FAUSTFLOAT* input19 = input[19]; + FAUSTFLOAT* input20 = input[20]; + FAUSTFLOAT* input21 = input[21]; + FAUSTFLOAT* input22 = input[22]; + FAUSTFLOAT* input23 = input[23]; + FAUSTFLOAT* input24 = input[24]; + FAUSTFLOAT* output0 = output[0]; + FAUSTFLOAT* output1 = output[1]; + FAUSTFLOAT* output2 = output[2]; + FAUSTFLOAT* output3 = output[3]; + FAUSTFLOAT* output4 = output[4]; + FAUSTFLOAT* output5 = output[5]; + FAUSTFLOAT* output6 = output[6]; + FAUSTFLOAT* output7 = output[7]; + FAUSTFLOAT* output8 = output[8]; + FAUSTFLOAT* output9 = output[9]; + FAUSTFLOAT* output10 = output[10]; + FAUSTFLOAT* output11 = output[11]; + FAUSTFLOAT* output12 = output[12]; + FAUSTFLOAT* output13 = output[13]; + FAUSTFLOAT* output14 = output[14]; + FAUSTFLOAT* output15 = output[15]; + FAUSTFLOAT* output16 = output[16]; + FAUSTFLOAT* output17 = output[17]; + FAUSTFLOAT* output18 = output[18]; + FAUSTFLOAT* output19 = output[19]; + FAUSTFLOAT* output20 = output[20]; + FAUSTFLOAT* output21 = output[21]; + FAUSTFLOAT* output22 = output[22]; + FAUSTFLOAT* output23 = output[23]; + FAUSTFLOAT* output24 = output[24]; + //LoopGraphScalar + for (int i=0; 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 VwOtM;`uG<=ah6uwL)Sv=`7a2)`Pu*g literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.scx new file mode 100755 index 0000000000000000000000000000000000000000..011ad6828a08cce3a45e3bb148c241edc3ee452c GIT binary patch literal 25968 zcmeHwdwg5Po$rw!i3txWB^0+jqO_(s5Q5~`iCx02Wn1w%iJU05LqfnD%d#A+$dZtb z5{E}CaJ6RAn-R*7K+fQo(q;9uO#RlS(K5(FyrlhxImlTw`&}>3YmeOdy zzd3Vc>BvdAkh|<3o=@iS{msm8e)BssznL?0!)T5f~i;#gfjRG;p=A!!eHEl zlpuTrzQ0HiWVzkBp`DTP16w{6I0jFl6rN&ovaI;}6)mmde10PrX?gRhK{&!CT2c#3 zgm^BL<){+tie^bh`Npr-vif-m!dj0sLK)|Wt}>_blY4!EurC6Nk)K$pm3vx?1j10u zlq-;Llh-Tz`n|reA}gLQBfkq4YE_@+LJ`j6H^rHyWZ4@EMyC{LtP^ zh5VvQ#2?(m=|+BguhlYcrhx&cV+|F`D$B9p7Jsl?_6K`HC}iY!`Sn`OBb))@Gxe8- zK_we^O^$X4uSAhP-YlGEz%<@SM2k^^Z8l0JoUT|VI#i}=kW`8&Lp3k^Bd-M2{{M-{b2&1dE9kHr)F)T{D z#3tB52$E_Rgj&SZ-Ew%_DnYmt@s2h@I5<}j&PUn}PtM8xWr#cBKMH?3H{L1;Rnufr zU25n1*JYl#MW~BCc+HnCuXy}NTPi@aQ27hyFi+E;VWPoZ08jm)x+JSmx&*y33D?J> zk?RBgF7n=MuU%|k+`Sb^R=zf;e9`h3@fh>Vw{49ozP`l`yb5s@J^@edo?HpNASSa$ znDjE^W;8IPff)_VXkbPIGa8uDz`4-CI#KBJKX*-x+3WB8W6BDJa3y?LCvPkNzpVDq9eHkme7g<;HEKw~U#qLPx5zWEW3G-(g z%S83%^kdljiwR1Xeg=G9>RajC@OmsJijjMZ!kG5YsEuSqN#!esx=5S27!JR z`&Y(Bt3H@Ae?AGVi3#Vp%S*M3h;%tf=Jn9xHSlwtzi3MKX4Jg{ugrGZC(ZNG-=>Q2 z%EaCOPnd5#aKe1sx?d7ao#>$zV#KiK0q>sDI~GuxYOdi;37c22FYHpfS&?m=-SkF7kW8Ax<`N1(Wj z#fb~Qdj;UYQ<%(UlG;?!D`G5dn~yga>QU`+^P=-qu^#3BpZI6lm;S^`=3rYz9L-6| zZEVPki3=BJTWuK^Rp-I1=901TjN2-WVaTC|K#4F*&@|G8$SyDP#N0@?XGRn;Qyz#}v#y{N=S1q}#1WEvC7L1^7% zg^Cgz!YzsFiri}6W8zb<7Q;McUXaw;P#ik;f97KrZd(9WV&dlMYZUPs=%QBVA6T8D z>FY>dS4F3Yrp({}cQmI}W)JCAbPFwdQCm#ZxF|~A*ozr#Pi59xC;E}stmWCXyeITL zF>%FpAUP8473EG+6Ds~A%XF!eF7-b$ZB|sCqt!Z*t(7co{#zzPqh!OxM^WG?&Ogxd z^Asg-d;@cZwG53t2htw&2e$jQjN6SVV4*2MR&%eIEUkYV6Y>YB`mk2@alPsU7KfVq zG~ze1#P7j^IqjK=8sq$hUB;Az(L9zA8q^X@LX4KxDr}s$siLzbx%_j}*n_*Dfds1| z!O<$%1zN)#A3_HZ*YViS=QR+hT`nmMZ=VFy_lGV2dZ2Om3~DlAgcQ^4`$0GNm@8ouc+QwNwt&CxH#sdr3hxhNt~dJ!G6+BqVy}Y zWMd5nB@BwT#JAzNMO0}W4`s89#pIJzg4S<4&Um!NI^!UD`llSaI=hFvarY4;!lX9MzxMw_l2++LSiL9r@14nn# z_M>G)9Q>Ji@LP=M&?0eE2}P7WG(qIaMHO zN%R_k9B~&hIHXBGoW26^e&TWy5k=X>T&`IlL{^f0^Wc8e?b|CTybV-sL|O z>IGrJ{=rmi$;8|}1e(;>(vP4vNLK1illp497kJ>W^PTD&Tdv7%Pd%8~JL!a~6D=g* zbN82+wxyig|6(4D&|}tnegmrK^t=ktyt@Mr>Y#WaJ-L^jloL-1efuu@1cECO8-)P` zOE9Tfjw9Y5l_Dp-n8~Fq1MzAQNjx#RZfCjzV>sK|FL61M)7sO3_jl|hmf+lCZhDLM ziU&c(*6{|M`iWzuwTMWa7_D_kQkPt2=RKoh@{+Hfq>fzJ`c5XZXBb5sY%l6kGa0vS z;$mpBj94UZTzE0JY*d+z$kDV!jqt&nh{e-MoCad*^-itydneXURAWdndFQcVJdcS# zWQv_X(ZX^tM4FH@oPHboTjCzOVWNTMAZeReHZf0Uu!tB;EC6IdjuL*#t8&3cXs4Vb z*qb<5rb&4#=(*1~YY+7O#ha3P3WFK@o_|ZvM{gu`OiIib2M@)9KXua+A`WO@Ox|U6 zVc^sd9BZVV2*ve0*7gYr=Rwf4J;oU3HPvjyCT6|_TbB^X++n+cE!DCKZ0dh6B|cM@ z{v$P-Sz!?e_SVw)$z3$)jRKu`0jI0M%tw~ldk_Jv4GY{O)3U{P{J`C%zf6K*9 zYFbD+w$GN5vZ-b8_1MCRrP9DYi!|`+F%oSlI6_O3DueVZQ;WK+MGcjqpkhW3XhY~y z|CnA(r4lfU$*^hCx!=^VujE<*b0uuS@S`X249>G%>PaXeXY;rhndxsL2Msvz7N(qs z_Y_O|CyerPdMo0*^+-%?fi}m=I*z`9UKi@io}$G;dmkeGbsUXoEU@1tJW7`mx$6hs z|I`ySPVg$0tQmx6(I@QJfT4pj%&BceOI~=dmIZT3yHr;C9+2=lap4OXH;6BJPK&Sj zIbxVbFmkEKGj5Se>#up0`Ri$-xt^qnLn^+1rZ==&+B>uNLB8G=XWaD~mn=KJDt5Z_ z^rLR67ss0U&bHY`Y=J9zY~^t|k0HONjW{JpKYUD)OblzwV>QMxv-R~h^TK*7yv4i_ zjO**E9?S~cXJ}jQeEmD{K1+Q#p=qoQCJ`#Vg(9dK>pf{*)~KH@q`HzdevL|+bt*v9V$Yu^Jr8!i zfc;Xxq&^3e;!w#>o^Y5gE6ProH>Qr`ReL<$0^35V9SB;6d+_v+n{NfZhSPTvedM^= z;v7G2-oPuB^UP7oOifjy&jFl+N6eqMVd-44dj4awTrBhtY-ED3cPfP>E)|@UF48B$_K*5^HQNiS@ND z3Ax^>zJ@*b@g}on-3|&nhAH&zq_A&x`fdX@Hul*o8-QNR=iu-f+Ao=!_pJ-+6rI=|h!#hj%{Q%gKhZD`P=_1D0nljie z53TrWnW(zU^n-+a`z7X=ubV25LmttBz&+2%A4DuMn*GMIum+_p>*t*?ci^N+ewH|* z1f(>s@0F7JqJ({<`i@~=O>5+#5|VVUIPh02;a`H)m2h$gbZPWM>Omp3-I;PF`<|k` zjcsB%rr4;2JxIGP49vq}3X2{iC@WzM6a9d7y{z4P!rqV}qDj8R@re;2WFf1|B$$-D3{ zqLwr^r>Og~wzM4`ou)jU*J|ta;335!CYI0!+n%O91kvG;}UaWah;n!%M!k+92Z`NZX- z`adS{0?!cSNlnbr0iIC7K8~+1V%;h8Lo3S7+d_ClVd72AS23~L65m=bme|f@-C0xSuQ9aov6;SznGQCxt?-j3->w7O=8_i^F#IJ`x;mhuhp^d94#eg zb#?`-!LvvInVu5BIx(>p{i+hxJHTU7!4zMO=Fp_tpv84%N)65Xi7GKMS4>1u!hYJ4 z8(2w9*k>m$5>+snBdTk`r@=y^?5i(FchDS~L?%Qo(VB6iBo#wkSEQiMN)&LEO{`@M zkPsO&q8ho0U^kc9rPHySMeHW9vjkt0sEV+2LwSzv=Su&G{qG^OR6kaF1gR4xPkw5w z^!F@PgVaH!@O8>6ag<_wchM-Sr9TG|%raNqiFG@3)!i)o3=88dypM(3Son7=+|I)L zS@-}8KhMG;7JiY153%qoEZo7uzh~hiEc^xwhY`AxSNss0dq-R5s&6A6>ZKEnqpxCY z_V!Tfca-`8rJkqMDN609)LM*$qkAazkCb|XQg2b}JCth1*grZ~PxB(gvKTP0@0P7Jm zcNAa&QmoEeWK)SP6tpA2*F~Dkd~NXFcw8vH&*TJQ3H&}P^L6-3;D11%0nOt~P#9vh z0k8lHn+g03fLQ&Uz-qKeIZqPU34rqsfo!kvW1bTsU_nrg_&Wre5Tp<@m-*Vl;;Sij zqlUEv27~ZDB9MT0Q-WOPYr9G8>TO8V@FmMEd;z|W66E&7Uj@%{D4>OfxokU+=oCue zcu9DP2#>=%C_xUhCPg!6&Tl@xoUpxCKXlWN;v!YTlJ01jGU4pijiI0t2?ZKMv7mxa zKdaVBT8g9M3(JK`aEH2b(?Ij>heVW zUVN-d-&#suBH6vYo`|eOJbooAd7Vzs>O4AkA~>CGOJz{21HNcfLYm4{%fzob?D0pW zRiH64l@(TaVo~LmtD+sBw6?Ze`+R+&$W|+7=nn<0Jsy9+*S*N9fb0)?BR)tJ++v=`hf0uRrJ|p-LJWv$y$XWF@O2^**&-SXlqoDC5Q}DC&=>J2By<#A33`3j z#fulu5$N<*D15wh`l<K z1a<`mP6<4RC?0}Pwb-6R^?)hHV{@yc#hF9) zhQeDT{!P6~4lUsK`hroP;A(cetXuqOMEf+EnCi^!i){jD>Gt~~5uerN^M?8qpP<)9 zWnqeYrFWq{~CBKqwjl$qiz-SSYn(EwarPOe2U>vxSoJ^M%sk3xpCnZxt>QisEQ{ z_#(kHj=0k-%sOTfic=S(t$9L8{1Vi=L@2U+82n&9J*Hyn()13pkhAc3lz->jTcy$U z?|#c@3CeN1DmAcy$6Y)Q@OU$i<2=5f#}D!N8$900;~ds3`D0Gs$K!Dxzr^DsJbr`6 zCwW{1eUlqv3znA74TpLE#%UFW8=?mfH*APUIJV(^i(EaA-8_!-IK^X~-#Et>+$xeA z#;qo~@W-^+qD8`A@ceU~PCv})+qs;288?3(dONz@IzC+-=k1;?9^&Qn*vL8YuGhy47x>tFly{iRp~vGK7sUMe8RgWmE}!)@^11nVrnyM2Q-9tS8rJLIXy~uo zfR}JgwTj?voG+!x)$6!S!!zNG24*xcqk$O>%xGXn12YO@g`gvb?eVrqy;Eeu>`S@9FYyw%eB>9q>e> zva&VoW54`%3TyA!UfgLJ9x)B4O^*#tQ>zLbqW;2)@q_pPjycotPSfxX)3lZCvb?!( zy4o99@$P_ovk>2p&uTSJox(7_uH%4}2yW>!(&SD3{W8u8qoJTD;8(WFn{7gT$5gcs zp%+a)98Lz5)>zQz!Z~ojC&W`zCF=1b+HUq23FI#P2p-4C@$^(KX^<4LdKo`UwpT^{ zec^y_T^K*E_Bq{cau4)Y&g7daw4@71(%ru9+)|oOq=HlH_>N*dtMI@&zLV=xn)Wn2 zK7`MynbV8W8F+lWDEkZ~c3>XgX)LFmf5%7kwx>?U<8)_}$MXX?7>{>qI%z9Z*Fi&9 z+NL?@kLyFQZF;pC)zQY(maU}eEQJpya`n*0bvDd()|R6)Z2+{leGsb38Ll)`wRtq2 zokwSzMZz6!nkDPBzX8$ei^gy?KP23-f!U4KtF&8@_jVgn-GeFR^!5?I&U3)8CX&Oj zH;-Wz%uDWt4gTmx9}cZ0SC`%CB*UfjMnYR;Tm@`WdS#rEha%3+Bv)8t^M1Oy)DsT- z&{6j)t*ia#f@L)7-xMU4BxKz5{#n+AW6@sd$a}k!@!Wn6csAOdt*hEqj>uH-3bHqf$UGDQlZ;xO}AjwBH67JT#p(tJW`4l3jG_n$k;qgX@vY#lp zrt|iN36AS9yp`ZVf~egcW4VVp#E_%hG>1X0G8Pt-ER+hR@5u+AVQQp%)8CkyDEb}l>Qh&mWH0?RrwDgd!Y@q$pC=+bkBss8xc!J%AQ-0L z@U;{yLU4?NI4+Berdd0`UNqfW`9F(_OX4ep;*y~isMaPtRwN0Jmk6`$!Y_-NaULom zi~aW{QzrPIN;LEQ?UE0`27j+aD4y=NI#FW0qyBP9;UfQNNpZ>Hb?EJ1D2U&L;6Vz8 zDR`WMpHMJ<6YjHE@1HBR3%@QU4Lm$c>-GPd^#Szyf6tmy|H!Q3lI>m$o9Wc>#aTu* zJTj|L4gUZZ!(MbW)lI#n;Fu4=NDt8{7^m-1Fgk}!L#B}u>&R?N++-Ol8#fIVSuGX< z7F)fgeyDi76wqd~SmQ;u&Q#G*G1Yq*mw{K})=a-oc*1~xZ@_OE@a4F-%dIaOaKwPW zXuzWee87ND8t^A@zmVHrs{tzp{2c@SJ;U*AfB%DHy1OJ7JCFFs*&Qa~103u3Ca*9& zb)WW*0be>ttFPZ%(O2svuYT`#8_(DA=Q!5y;eN=mejoP=$NIfo@%dane*dGF*@mW`7t6<6!{!B9i}V8XfqGh;WH^4^H^U9MgR`xnFTi_u}LZb4>T+ki!SOda9_DyA$2&QGmg5nQ=|0d5{m{1oFr=RE(jk-0&W!EjOU}@>;IN8^rzn=|CwX`o_02PQ@(ybzJO!>UiTV~ z^?T`Rj`jP_PjT$#{avls=Xf9C(zu}C7ypi9{eJdMj`jQRi=Z$nuirOc%CUZLzJO!> zes&SZ`hDyT9P9VBj}t~4o%kk$T#94*MuXfwj^q3u_yu4TN2s~i4EQY#qlo4lSTz8$ z_yGg{r2*3y+PUR>3>X`jy!>|z*j1XJ|78RIu>rqoz;m%)nS^*&-j5itm0=P=b4xXx z)klK?w;FJV0s9QN&wyhFe2)SDodJ6wRu{Y%z8l^L-vhr1z8BsP|7rLjd!}M6e3p1rHa`^-L6%Twf#KXI`cH!Kl3!(S?8p2phlbM zJPK{D@iKodxB6#0#>&f|ZdZ;1?S&iRI>Z_JcS>l5^iXW%k-B=e~7LcZg~{GD26* z(P7d1<}`Iol*8)19S{+Nb9OZJ{+Uf33cX)md8a||ms$20=v*<<&wt)8zwE&e7`>Y- zkiuf8yYrZ)>Fo6tI2>rJp{rnAQk>-b67SG*Qe> zmPQ#n*I0rplrhSPYf4bO%@3tFhjnYdRUgxJ+7&7d(5DrG$JzWirrs5nK7IcR${KrEcn?x#M~8D1 z>xpcNc*4D`=lHSM={i=2T3HppyE@qs@L&BK3V*+|wauYDBdzUl;9dV#1HZ~J9Gtex z?KZjHj-PF~>6aQfgs#(gXV>U#PmMQIO*VaY6g;V^tZBAGXUw!O+2m7J$NKp1Ec6zp zVPmh-N@_paI8(veu9!d2y$7}iKi3pylJGFiIkr4e6ZKpfC zH=R~P%W&C*pVIi8ez&`)&8`g@+UsRAx^r`kL&si?8Q0kB^WNSNQOp*Szs)4 zCTAP_ZHzvh^$BgPLDPB42)w&GWH>PFocMj!*0b;@_GcIS>^8+9_ItElXV7H9w47e@ zf@1b}qrk#iXHsEd>1AhotXTszwLW2W;zKQ)nKdSwEnJF?L&WFPe$Ix^FFb*mkKH4^ zpC7m_V?Sz>?R9jC7UoQ80$|aU+Lp;}wK>0lqr&V87Qch5ktO8ecW>wdwkaWuEV97Z zHj$8WFw~9uwX%CNei=s={YT%m(jBCj+iGv{dPKAS%0|FS%2tC+9y$uw7eSL zSKJo!{;s5YtJ-r{uqu3D=vo%NBcfDsP#eibcAJ9hUGECK%qpyw-OdP2p;#9_0U|zj+a~eTIR4=K>%mX@YH=Wq-Zn)4ti1Y#dfTMYDr6u2dAc_?*heUf5Q9?|`+ zJ$qznq$J#u`*Hv9eA$oR-fOSD_S(-`d*nRx?pw!Z3xcIo5QGZ2GvOL%3Bq8)f|wwD z3a-CI5M;T-wW)(8<$KlnP~aFmg>pCw>5*l{->>L#9q02)P{nwbo~MU|%k-%3mkEhn zD9bS=-WAIxndKY#te&-8=4>Is9$%2aYbwWUqd*UHqfqa5P zC#Jd19^hPlry1!yl;v)(;+;+`XfNltgLkG4_{8I`D>glA3-z~inO+xfHUqix@#&Hk zh{lNsC(CYW&1zSRWUNt*oWx+nasNU+o%EK=>mor&FjCObR9}R!5d^(XK{$xEi7kRK z0zrhsv_9DPM-xScIkVSafMH z&_&L7>7`2?OS-oq%INEJ=u1|uvto$Jv(b6AbAz*^-Q!fJBsC*xU+Qhsew09E zqBc9@v9%4prqoKwdv_qk?Mq90UoW-J-wps7wN`PJR<`Jf)rJPVn)#%dyslCjc&b9m z{5<|U;sh3=*4Qg)8%0T5>uFJ^#DOO(u5(`R-0Zx;DR0gk?CI%QV(`n8M;!QLrKrZo zCG~wtyR8aB{j@59N)4%|l%-Pgo+@3eqtf0tONS(_rHTZqHwiQffqohPEn}k>A52;Q zA&E1RsJX`7J}O;8N#`TUx)EBu1a7YD=Pk+JjJj{&_p@D&DeHW+x1}nwN?SQekwuc` zX0=TY^jDOu(rW)FZgs2grXNN>9oh{+dxpe;(f0>mhA^|JK>v{@tL=;t>!R@^*6W`= zV!dI*&y|ZD&*iiqb*?Q#p|T^^O;2Z@Xm~#U)sKwAOlIN+ z$IIxh>HeBlgQ%4qAT@|u?XTmNOi!Y=@&M`MzH8a?`G%8@TSo;unwnlOpp z2ldZDEom#O_Rv(zcp~CxVC8)E1q-z^U%3!)U@sK&0WAmHs}iVAN^WOEUewOKAzN$P zxTv}gWHpzJk7qn~X%s__1f)oWMQ9r7Scawr!pnQ%Sb+VRi}umtpEBy zs7^1;I_V8G3pL({(xO)PRSJ?U*LVLqAU`HjJcqXxM94WQG#Z4KgB> zu~gJ%p+l8(q0$$00#V(c`FfT{D}Ow{+^uXT5X1XfMnWgO0vvnU9);C}>feoNENtG# z*01b(Li;6FlzvgYvX@FH2m476qb_2Cm4QJPRR<%Kqm`#<4*1dblR5w*uiRq1tB z@XWXp;=sOoF?o9mS?Mbw*_3P8qMRmbw~wS70j-a=A!|&0Ha)eM4ot2wnzn;4L4^IT z9hZr_m2k9Xi7yfnRo9(Bz3an@R|x}sUED3Mbvkbe^u>YH{jPfjH*~XyOq2gkMm{5ndHa0pz z>?i%W#=rsHaC^!zmF^+N8fn-yKCR)lG2oO*!&9yudW(0a*PzrLZ3P5-E$-y)d#NJH z+A?~FupPV0_fVJf5zBwj0+F3R&Z(y?%IVfUN7EO9lgsgz^HIyn%au(lWu>FVy652b zRR5#xH?jg{kzL`FN&Owr$+TNnRk^V05z)HT`$67I!2%1XAUTsz*jvQ9@v+{P7ku1=^-7FSpujR&qU>mt`M zMtaKn=w@{O0qXpH+0Iv70B)QK(0`~gBPQ!^oQE!@`-il|1Xp56yc&rlKPE#e9fO)! zx7oQgpM?${pedKU@^P#{Y~ehlf<=_1$lO5#UY9`~UCOS3| z#?vc^AD`aZBW(IaVF<)3)jxeG+DEJJYD!l3u_4ugNwhQl9uEDi<*O&w6UAasOz1Qi z#mgtIq{Ml8v59I{784NaxqW2fd;{w9afGwtQhkqJC-S9wFP>N~4eYl`18+=HhrAC1DcT~b zGLn92X;W9Uso@F`DprU~2TZs6hxEHdrMXgKGGdu>jai!Zmt87g&5791BX0F~=|K>< z)uZ``(S68F`}GQ(c&k%R!+Vb{J-||4O*bIS&QIDuMD1o94%`)+4?Td!({Va~zhgrn zXTRBes9tA*^E2CzpyRy#2=9~X5lKBp`$V$N&sO(WasC5_4k|Frx+yJrrdQ9xVn(N4 zM!gwHcs)7uVT>?@XaB1nUhq!{u}ncZZuM}+BNDao+PElRUahr}q)k97ejcYczIr-~ zv-eBBf0t%FjXIYsJHE?ydh+z6-rOjTw(5J#XlpgG1zyBMI}fpZv2-?$^6KYfiqe=o z`bPUMMmSq{8>_908|`p5>tZl&Y-EhIGwB?{kMLA^O@NVOkUB)u5 zyxhom*N|d9r6kX$ts;l}rFyC(KlSr^D$Uy*+Lb!YX&IA^MoqSs6?)00{F1Bn)Q;R# z4bs%zplAG@p23C)Hx%&x%w13VCG{Cmecq}51>^sS(`vh_;)wOy)M323kEcI{i9)fR z@Y;rZ(EEq2*CXA+(|1w&$YHC^HGbH-i5GeebCL?}rp(lIp`Rn&HTatKAF6R2bgS_( zHkN5`ClkwHC!N={W*egH=%zKpbit27&2~iD@lb2V2@6La4W}*@$0x119^sH%yRlKy zR$$qvkTk4NS}R_l*V@~()eF7b!@E^0jQ4w~Ce-K^f8jRaNy6 zy6Ckd%~o6R5v)1azC{e)Ic&Y=FBCb3$OowMn04b6s(gp4tbGveNKn~YDmw)UGx`v_7}dM!r~yanoss*SiQ_q#9m-y=kM)Uq88pEW2Kc znbr!t17+VgfNgnLYsH!_VtlQwz#+y-X9E>u&{JU;Ci2%WF`xcZ)ATSJi8gqid1n4d z#1^Bk-`Ez`g37jW-Vy6&Sgz!!i6bZ=rTKlRUQ%C_)VE=0(a*RkoQlV3A$6;NPX7oe zG;G4+zYwNoe<|pk`^zrGsuJHN z;uMHe+6bKn{*mfdpOUoActgRfQ4#{`uSUNr(?!HdThw2TQaI_2<-Zzb8+C$Lqg_Q` zjW)wHGE2lVhxek>V9}MdxG+I4MPv}Mr9Y3QMasbZ!rqB!5j~c!ghV+f!OKa&fhX&8 zk9~OINWYF3Fm_nWo*7G7Q(jH~8*;Mi0ri)@A180c;ECDNm!R!f(DkkO&@YKN=RD#` zk0B-fAiV5&B>S~~-WYsYaf;e9Qt9t8xxuf3;x8gT)m+aGueXZnTTpna*{;Lt^o@Y1 zkSx%LWW*^_u-`I!G&?V9as?fhsGqjK#bl*3;_Y}fD500zXa6K7S6Qm)OheYJ7MioPU19s(_sj3|}CI3#80b zysjIoF#~YU97}&qXIb7~F|lw6{I<>)Szllqp%>d#Op!GFD(U$B`3V>_7=k>hi8%&9 zj}@Fl`Ti(29J7A&s!HqjForo3Z+g8EwKcZHwo1V|xE`6J=Cp~LO>B5tIfvw3nYg7= zP|lmE&5jpQ!>WRurIZt2yx&=A5gU$Lzu8#1zllX*V~PLdP&qMca46W#o<8&+)Jp&x zL~R|$SdFOO1RhfgX8Iabhbq-3J#45@>S*1Xs1dcfq80^( z)pg+0WFt}bH&&uKs18*k6C#)C)p$TjWC$Bd6qH#70%ygrDIkujrGGdB_J=CXD5 zc-13GL-TF4{5+iBU$#n(qvi7uJ5u(@7e>p^VzD~JDiFihC#%KX z6ym#zW>GDF?{qrj4`mkKg>y${;XTa%F7t<(|9$5Ffcf_`e;4zA!u)?`KD}RL7LG9g zA?E*-`HwPxH}n6U`TxoMJVs#YjrkI;z*HY{Tig_s3N3p9Yb{oZ3QcR;5nJRnlqSzwDGI!tm zWuf#Q2!!>CJbEZX@1kD=m2fWdDEta}mvitX0=*pEOWwwqJXy9e;{^6Gs36hdNu%Wg36)fvQ9Bv65d+vju zg8MDy`~|YWq$vE5z{RKp<4E`pfaS*k#CMW%s1nMd{m$}Z0N6@|QObD^fCl7$5jf1r z9w)LkcrYsKIYEFF0DDj;p3L2kCLn6^mtRec7xqETx zXDNC=PhgQ00Nv3EJ@A}HPHu=pVz-W!ItUDIrg&eib;gAvy z2b;t3kb+M?Yc@!^{2a@9zB3pM`(Q_m3iWM%#oIz(#nnug z;#V8-2BOkxq_Je86|VBeW6E_4W1Bx`U*BQx^Y?|L+w7cSARMyycmqLy_hohk$$^kB z>W4(3Eq0~XZ$~_Mxf1B}8^vOQTl^qmnK6HKt3PTFM-*_0&B>`}j$p?lg(7if>Dsu0 zz>YSBLjIt=FA(eVD!$%1L_rUuiha%wF(9UWAq0uz>qJDdBsvSw6p{$UqSYVrN4*LO z9Ya$>KEHj*k|lElvU3ZC-AlG#U0C~du{b{G^@W4MK({|i8Jj=Hszq-HyX~Pc1cwe3 zKa=V5EqX=as2v|s#)E!4)nM<5hWqS2R51`M-35)3G+{KHNy56Ih$uoh<`b5B$>OZ^ z+NFxMQ^k(918eicC?wb&mc4e zsDS`R8W+TXh6DyanG`DoHt!1b+eEX`?h5+*{2?W)=p0%@mTJgC3k`jy#ETLo^;pAC@ z#SVkeh*g+{8v8R;W)=0{&8<7 z4%#|?SC z!zT$xc)k&u`5E%fy;PUTzyik}E}tQF zI=Or_Pw7eU{uZiqY?Qy!)LxGXFXNa>mB2M}z7(g&W8exM&-gPMn9;zD24*xcqk$O> z%xGXn12Yt?vJ|6PBVFwQSQOh(%BYs5N&Hf^R+=U;( z!;G9rPv?>bNfB#Sa9gsYCKl+61pON#_;I!0aGk7{(Kwx=z{))pfwsl=dQa{)90E+l#Bstd4f3wrn9?XDNITlBwpn{o_zo&Tyrns?Vdb>^wTzED~<=&@9=Y{|$)s{#YEQ`61z^O>Es*vs%9u`P*(o zYI`uHT)sZy*Le!~)kSj{_U19H!Sa%OVS_)q(FdcoZMy zKqf_`dgru)_xEiDwhg1=ETbiPIQ(NCaCaK|P5!V>g*qr!8@7`_1aCgTg> z!2n!JH!ScjftMn0cm<5EMfTk9loZ=zzh6>XHryhVmW{NaSiA6Gi6lH+Cd_gOzbIvk z`cN6I^mmm_FWo;V)0g!hmwgOt_XA}@X|Y>wt;~G4{jIXX!@<2}rDX>Dv~J&LPW?Wu(kLGTWB0*hc0ImDp`I zirT6hZH+^vOgLo1 zJ56}E3IE1~-!b6}aqo~@zuScSO_;ty%B3GS;j+^xKap+ke2(eflb%~SHttiB3{T&) z-EYEsIlXZ|^c$XU+{abS(d#p?gJa`<&d0HFPnYD_xUc&cj*WY}7dSTV@5)Zs`5X6m zS8#0H<6Y0Oai2HHaf;vTJ;3o0zo!~w7~_HCBPP5MpWHD0^89N|n0|P|^vm;q!t+Ns zeud{7*oJ#);%D5KUCD4Fi@SL~mQVKFWx`{e-pGHSW8+?oJ|ZT0jC-+5Ij-jSWX&8m zay%RN)l7bl|H|<}`Wy(43m0o=L0;p2Hb}TkzeA_|FLF$G>GTY7On2(^e4k^wTc_s{ z;0w=42*$njGaMWD+OKnL+;4xtv2nkB#$42oHt*#3bmwq<562gCJj}6!;~#L`#PKeU zJ2)QUn0}-~{C9J_jpG!@bWdo7KIl6FdZ12*NBDg*O)JW`Q3jsRz!4tj^z|GM^L&Y8 z`d)#aop4t4pKGoY^!q@9KtFK-Y z?l<896V^=lf0^*zCVZa>|Fa2qqFcOhU2s0QZa6<&58M{GUbq0<-@%38!f+9|C|nFq zfuoNyx5C{F*AKT1?iM&ajr8~6R>7?%gkwdny9uBZ?*B#oc0tz9`|N1VOZA#94FO}JAshs;(TFf|W zHbtQ+r^pEPkvUD9pK@6JZH6aeaLPvFW4o%CRziR91QBrH{%iYgal|j0}Sk z_~l!Yknmw{TMEgJcfC@C@_2VCAZ7Mngmha1o0Zv`g`^^PCb`Bf#Ph6Lz=k=?uw${1 zb`oy6qL55h6f#>?!KDfWT2ssx-{OE3_IR0&WdZ!*WG}uNZ>F8hpfni;rdgOW9Mxf% zWjnlGP2qlKNM-eyiB=Gi7>)*R!LJFt!4uNf5$)Cfs6wAbpNO*F7YxVzM4`713$>%h z+uhwx_d@hRI?3blG-NT;0jO4V`+Y%g6!|@%Xs?lV16!t%2WVm`tD@a!0k? z;lK|!JoH-)7>yhBKFIE-+1ku^Q!UlT2rbaobXJjr%Ly|b%eMHHHSs?FOADihB5WKr zI;H-zjS~^pcf|w2?hV+9CHmn^kJpFs#?KN(XDJh+-Afmr>*?C__*1r)Y|O9^A9qUE z7*kq03E>KZ5I3*12q>`=u&r5cP~!s2ujDuF_|n#4nubo)occceOo;xBw#$<}MHbc2 z3S2kg$25Ldz~kv@cj!ZgPG#AQ?%W*n&~ema)HnC~eK$766(!8>eLQ@M6f9Ud6QrH} zI>wk%#-uWrpeZ#y5kFiRn!FfxF8so3+e!En`;&`(@_B6%`)^!7PN2zxX<1zI0y4*k zQD9-I6REI}dd11QHM;;!?-AG`_)yDc^2LNc(g!(Qw|9!hr-<`UoU&M;x}`&viyJD21ku7(>1m1zbWnwQoCKQ^{hQy z>8w3;S?!moMS5NxZ!7MRd3#q;xz!!|QlhuG2A}OPjdXd@y*|I}?Lp__^BpYZigbcH zT&}GhGTo}ma;tl7lhcheUc5_|0S}LDXP?PP#?`jj%o!rw!W+I?y0a+4hKtU3CFwe nB@pp(RByrmfDusE&~Fl1!m=%LDBj1v_=&N!njSI>vFHB)ynxWc literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.sc b/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.scx new file mode 100755 index 0000000000000000000000000000000000000000..f56278b0c78be3b2ae0af5438ceb96f05205701c GIT binary patch literal 25968 zcmeHw3wT?_nf8${L4<(hax>);g&OKW2$ti-b_xGliG|NeX=3d@tcq11@IdzGf1W?*$;^E3%s1bB^Ud|l963*a@YcsCNs=jFk|Ztc(T0KQ+S$s9uEl@WZ4NsbD^q+ zwaB_~Cd#N^@~b?lM{p44HR2IwArDn$50|IgZlC z;*IilU&<5KQpdofV~(cks;ZIhOBYDaf_08B=C=UvWoz9s|^K309H-<7g{SLGshn-s?oKtlxocgZQw?e%=rz4OT^z|5Rb~Z{oHH23Jyl&F$hHF2 zbFw_E(5FV^A#9X))+BkIo@43f7V-u}9>TfusJ<6WlGhcWM(EJg_DHvPihkolo>}A} zoGb6-99cxFYMV#%WFw9BmFzrio8Fkf$L@FQ!r4(f)qdL+aCt&a26FWi-8-WY^%EIR zRb9%8<<45ANhH;XP!}X{@FE^hcFUD@p(I5aEBI(=mLjYHgWn-Z2T(V;7V{t!N!CeH z6+)_RFE7HiKmRRXO~5i=Rg`PUdgi9M*hY^OuM$;FhF|;i%jr%U~CTa|I^5oOn)H;DiNE zSm6I>3#^i3e{`&FloNHPiIYsS#aU;SW5cN*VVf(*3NOG?^XneiC$$j~N^FlDFT4j+ zyWE?!DzO>ArrA4nE#uvdq)j48j^z*0;?*u&x|4@3f49^u$M&a+u%^jzq6?q;swBB$ z@1=HOJ1@uck$SD;x|VdSxu5B?#SXznyoxeVQZxj;c_(^HEwZ88) ztwKrMy$vxgZ%TROkNK9_TLGYByiQ&gFDN~1v7!R|)2GXcYm1fM$IMFlw~;@PB#4mX zHGU<&Mpoi0-L(s=($T|~ukSrmGqt*OUc`n>OGd*OzCub>^l3)Xs&E~Wz8VR z3-*y2HvN4NgcC94EVFy=9Ppse{<@D}JWysaLZ~7@Ey7g$@ zZJJ7gay&E(xQX)Lp;CrH#^FcSVkBOzYn=DjILzf6B>YD90sAo>X0!{Aopi%WLV zP)oam@^DR%gdy~cuvLW3B6N#T7GaGDt3*h9E6QIgLYoMSMM!%hN;k7Ge(G;+fW41k z@SBxbZHZq--`lzpJ2SFC)gjBglVdXJ^*^dlMxDYRe}$%-ttC;YrzEzrAtlF8y&$7y z{iqys?#r}HA~KqG+mvB+Y2=WIU>4LFFlo5FkoG3i-J_h{Hko8+U>%Zz*$FTS;4Dra@Gm$^R4C%C|#}*pr z2h95z@|cvzd`a^`%kFIdBHZYfV;{=#Fxq)Sv%)U-+Q?#8r2C_+ z?ZQDyxLl6UK!a*$!=$%x206ATeMg2TUKrrfdcGTJ?Msuu)hr>(S+77*ezpc;wxaTf z@+3)W+0Ew1%zQ=bF=i~k9J{iZawnWodDyuPoR~(OQ5MGfddN2M!dqxdfIWg7>kA@= zZy^@2`qMsv4$*jWzMOcNIB0*cf$a}yGmv(hvE*6iI+GARN}~5TljdRPBi)`Z-yY{< zDE(Kgq(mf{`Uc*1<;2Z9Q2Er*>5??zOq#Tl<@n8`sb2tEb~=&th`jgU4%*(-56XRy zTl(&0GW+MrLs}rTV7@mPlw;1jf&2{t&7%c?{!t#1S2`RwbaX|4?%3nJS8^pH{k!O( z=s)R*gf=j9QGy)XjbXoQK97=PFQraJto?C$?mpR4Hv-*~7$1nQkBz6!qYR`iseUFv zj=HlL?C07Kr2hIPNxId!!(fRWCRgI-f5#?aNU_uo-zsgzJpDry?RePq3mQ7K8s@Aw zj)})i+9{S@M^bwr&S`(kvD38pGOc;Bsx{SGb{*K7>^WEQK8ikc4+d3at2#_wXWo^bY? zBBzYivlMiZTBHo5UScUbOpz*vIJ1*jN1_l}08dHmt;F%Y83Lx_|Aa79t5KUryX;bD`s$ zNpN_nj3f$cM9B9oapyk7@jb~f#x>6T z5my}3Vj^goaE_Rk>?ycZ!dMAf(fz0ees~(y^azZQvpL<3#8e+rP=Et(dD_W%53;7d z&tmqc)*_s=9?9`du;#G2<=|5|yqjt-dy*E1tz;0k-)%YAz(v$@JVd6;T|e-C89Pk< z1h0CDg%O$pX_B`A!vw4{j^`8R(p%b zzCAhiRX|r_AqAo(1p5J&aOLmygb#E%&r(d{%;$N69=o5%{&8~bAs+kTZF$*~vm*vqEI!V2?vY>r|!Lky;{ z#KPHJ#w9$Bbun@9AllcVpMS_(-Ymr;q{N=YtmMGz7yJ0I!(zS4eAseL@(@k~MpJ*n z2qkI=USja$bh;gV;*jO*NP1c%5ocluNrx;}=jb6zGs`-XdVr_*C0SBYVk9T`Na_xe zdxUb2W^=DCtj2^(MUJMrgoJ%U!hswKqp6iht&P2p?bhvoTR_uNWRMLn=O{k~>Pvwg zB<&K%If>b~?+7PtASJe&Tv`g!%*is4R!(BF?mO?^Bf*T;SC`na>XK3?Cd#9MH1vlT` zf@8D3DaR9JCro{3Y(dka<$r@HGLndT98pgks|8@@8I4< z#EWS7mn>_ZIb^x!SqPxI;E3i7l$0Rj^D?PgC=+>GlF0Wg+^eM70F#I^`luhZql|r| z^^PfW>!Z3*i4_2)57%0*c?PA}awA?s5fAeYSNi-Rhh;7Fvi^#CB8uEk5id{Dw|<*0 zmpTHgIm!J49vIXt^8nBz=d4%6WL%a+3S7iLyvStDq-=mBbTftbx87qi! z0$ApFG2t{i&f2F?b_*tuwPg6_7eyywwTObh2K=y+BQ|Rb7+0acu6>@e4Z~~x4RJdx z*WduL=!{+@Jqq_E)EMDn_A)WlqgHLFdOlBO^%J!}r(GCRubfUQ)sI>Fj$mhvUCtm_ zspl2dScyVsE2=3*nMH0J`OT%|x0aFbuOdHKLw=78##T2xe>1#bE4&`Ryya1vN^|zv zSklFQh3^Oanf-vAt}|nm%%-R7tdnrO4to|EgMXzN+x-o+hmT=`aGSB>W|r@*w0yJm zTAs|WWcgt<*$U5nhEYBuv4!IM6ZDvs;Ighc(o{-*jIPS7G8|GpuUa`WDlT-XU&IT6X5)^+ehGwwzdIDxo*tWmsA2N46$i z7H7yjHjDK?;)Eq!iR*2(mYrT(ee4Zo?>ml(N9lF+#?t!gkFniQEOjr)ea~nYDv5}R z(jY8chF8Cl)bn@`rnjce7muB6nO!3xL-<@;hH>l|+aDPi3rybM*H`0Z_yY)ho&?TO z(vOLm>W93Iv+-^R+v8>jFYJBGm?5#q$BM_!lVksD3?O4iTQUi z|DTyZ!2Eld{{!a#8}oNC|32p5&-|Y-e-OSaasK0YWp^~DFZwycem|Yq9ef>q)89_i z?}+*tQO^+dF;OE#U5%b_a2HYkO4LI{y+_o2MAf119~>a+pNaZ=qL5WOcpFh~Q`|R+ zqVE+C(r(IMOjI{fmk`xPR5el85G4~uE4hCSQCAVwPSj#h>F?dWMasVmg-gJn+)r>)R5IO8MV3Ie`|y?IE7;!{PW_`Wb;GC>}36Qa^zv04#vg zMgormkf{GdUCszBDsS{~NBF2zo}~E`nnz0vkX_Gynu0VH(H*7;<$P?O}Vbm2U zhXQ(Lp@*lmJAGZgZq4QrisbO>x|Bf|^dJ8e3H6A~ zWXy8t`O4?pbMlE=)HOKjojK82?Xv>(8oFR)+olc_!oS(3mcisHod-7qj%Gx{bjpa? zk{*)@|K><}roGLDwdJh=faJk>1kKz=UzVnWrE=dFUP_iFW+Pq7^ zkE6+Egto6p(wzut;+=*0&d*Ae^7;|wMr1HwDvZ)%dy-_bV%oKtrGm0q_{{!PslW=^ zt*1$O2M|gY$yA1uY+*!W%@mRfM;TaJvY(w5)%>h~Fu~ zqzIo7;d3HVXy-|vee4tBel?ILoI?V-kZ|X9}sq1@sRGbrr1Kpm^4sEl#u}q3? z&u04)YEkRM;bf=Q5b5^0a1Pw*lcLEiM-6^N+s6JPfw~Sqg2yp(G?h&y3z8vLREo1? zdwIB{E7<8<6~vFLeNK0y+77!Fvl?WX7OcaObepd&my6p(nR03!-JY)}O+B!V?hv+A zracXh_WxDrs^hu*g+Tf;9vWou=hz4Icf}{Co1~dak(E*_}?BxHNw#ut~*LzYtzcre9|y6X#;lryChG2LmnVFE2ulKKKE$JNx8@Cm>B7&aQFM|=Yk>%wH$*Wb z6oYFzZus1Adh3GO3^+-(t-dO$#QIZ90l*v&IzVKJ$=04P+ikt*3$izc^pJ-ZX3H_w%M(EAPq6FBo@9`32FdkgZYrX`UiISRl=?OHbyr z$+^FPX6%0|$WFmODB#oczZZM~bMQ|Jr2Oe_tK$X6JL>NiOkL#fF32x9unM*P3whDi z@a`aQfV>CE`xSYkt8t&jYX5YhU3#vNEbtFAc&-0!#urfQAI->`e{e>A!8R|t&2(n? z_6(yL?wT>x4F3WV171`#*+#V`Z`=oOu$|(_8>R14&^!B0{ieYJTff;FHCg-3qo)2m zo7GCdS{Agr`}4Okext^1s4xG*jRA1*W@8dLsCPK^K^!><*Lg zUV-&{lUEte-lu(Jz-Q0o`Sp9N3Wl@yZr6!){T}XH0_*p1KNncPk9$>M{a!Br6rrEE zmzyWBeouFez>>I^yF+08zV1Kt{34w`yQ2E)_jd*Ol?bc9xR1JkVcZ)DtQhc(2K;~l zzsztnlb^oWq4v=4-^v+|W^lVm*YCx?Bhq#JpCVnqCmT253vgdd`s?ZROC!Si{Z~N8 z;{I!kz;1z^xMwE*L4hlAK}HxeH+y=4Pb2-m%JF@K3-~=a#r#rWx(}!4DS_!;oSp*$ z)BQL-hXtm4a(ZSIp}bj9e5k{qWD{7wuU;gues8@(VEx{@1^6`BME|=}>jl0|+|OwO z)6zrFHwC^^;O_{$UEm)IJRtB+fp-Y}gusIW(|w=?_MvYB=%Ik{xVVR=Zp$$G9X%Jr z5gru$^gROMDEbXO3LIhj27#XKa29G0(I1BdmcBx%lJp{+1@_bLk>3$mzo$J3vM61@ zAD<(zey@9p!1}#(g~0lK=idnI7WG}B=NEVn;lik--xvQ*VEumfU4ixc@6%u~;@9t+ z&lXs}H=iT0em^@;VEsP!3W4?e+6M`vjNs|0IG&`y^o<5Rdj#$m_rT8rgB?D9-Z0?z zI0g%U99T5~GWa$Fe$s&Hi|t(gb_2!+W>We`2J9-Foc>({{-puGZooxYuS`-jqwhHe zY-5;I;LjqCGxk_wzzqi6V!%EF?lRzr0pD!Ew-~SoYORCw!nMKq;M(EV!};Ml;JyLZ z4Htmh02hJ_!)b64xQ%d|;CkRT!{MoEg|{5e1&1e^>w*BsyIh;3^8Gy9It!ZZp9Rf! z);Tl|)MyhuDTX%Jc$q(*Tm4Tu#+sBq-L4!AO;gXWc9FW?OUfP-<%s%h2Sg;`xE&3Beqq@|q0cL8(rM7=6_z;$I$nbG^PkTv zFLUq%L7(OdWGdUy?mVX9JlX{ZSlOX0Lb}4h;nOs?7P&`KpeLP00qciQ`sou3X^jx) zO%&2W6NT)AY09+*N?$SEX?U$2=b%SRv@htupDy;`yX~d4M(Lb}*ZHgnLxR05fP>K{ z&$=an9(I(;$}uuk5|bPVb=-jO`8}P-DjzK}i^XO*`z5cUxVuN|gfd%35r zt&whK=#y~L$L+4pU}ghwRkr!Oot_ZV+riOTu5#l{ne(Tw+f=q=)ov>H(d##b*I2`; z_aNnVR5-`5p3wS`C+KH2$B)O3R&=xQ!IvqooXYP^}MEz?KGl$OdSO|u<3W}2&P1%hps&v=+g7( z(?tcHOygAfsMATgKAk9^z*wm>;@*`eAT4|hvE_?&Zd_maw8>RFy0!~3MRXslI#pfx zkr3{AJx+IKZ#u1oDskC_pVIi89d37fqn&pd+UsQ!+HzBjUB_O55x3Ou^IpFsqG*E%~bIN3yGdLUBZ)5b~tPf~o4jRtcN#N7vp@{?C&WYbwZTt1t{^U8up!R2+ zyN+SWDZ_Gl&8M*0KaByW<~o)Mr*c<*QnO|zpzQjD)k$=GS-+t&;tyO|@6kC0bAjr2&9NQ)#SJ8>@1D0Y}X23KqYETc|2X!|&cu z1#D9S=vg!aW7|YZs@;J$!o_yF;C+o9ZcDpa*Q&Z&W%kf z-NveFoonS1hYS12$U0R~kMc{qx}{5V{-29ZUxj3hshSc~Jtf9oHYI9dB{g8v>go2I zBE>M=MeLM;!Q(Uio1m)#m!xcVbXA5ogtT%2szSNQUZ&xC*LxLSW;K?}Zf6m-fyg?1 n0z`7`W$W=@Uvy|I=*NgGV!?W~JJKaS^$D}M@^(5~qUXN>g}ww0 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator3_supernova.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator3_supernova.scx new file mode 100755 index 0000000000000000000000000000000000000000..80c883eef80b7670fa54eb418a4054727fdfdeb1 GIT binary patch literal 25976 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 j)jIqS7~R@R`b{DWShP;r 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator5_supernova.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator5_supernova.scx new file mode 100755 index 0000000000000000000000000000000000000000..32b5b1f3b61d7b8c2e1c905f926e45d5d5ddf59a GIT binary patch literal 30128 zcmeHwdw5&bmG6-)Cn8Od454^f%k z&H_nNlm_eS1{O8(VV(#jfgw{W!c8GviV|{nhB(dfM0tr~p7!KrJS42muoH-6Lq!RO z!p*^SRIYxJg*@qQ!9keUh)3vzJXDokT%OYA_W0ca#N^7GS;hHY=Yd2RX31Q6`mJ}l z6nCe~?GGs-XLGK+aUpL|C`EXJyo_W

    SI4Q33OD{tUhp5bgEkMIQh<;x3(0`1=Q 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder1_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder1_supernova.scx new file mode 100755 index 0000000000000000000000000000000000000000..dc19e5f2767c0da71ae9327c89e9a6644bcb852c GIT binary patch literal 30432 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 AK>z>% literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder2_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder2_supernova.scx new file mode 100755 index 0000000000000000000000000000000000000000..de6a4719f0f915dc0ef3767383cfbc27eba369cf GIT binary patch literal 34536 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%0A5ZT)NDw%K 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder3.sc b/source/HOAUGens/sc/Classes/HOAEncoder3.sc old mode 100755 new mode 100644 index 40bc91677e..ff1164dbd1 --- a/source/HOAUGens/sc/Classes/HOAEncoder3.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder3.sc @@ -1,11 +1,11 @@ FaustHOAEncoder3 : MultiOutUGen { - *ar { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | - ^this.multiNew('audio', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) } - *kr { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | - ^this.multiNew('control', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOAEncoder3.scx b/source/HOAUGens/sc/Classes/HOAEncoder3.scx new file mode 100755 index 0000000000000000000000000000000000000000..10c1d9802d30e6b5b32a347f2f5dfe605987d9dd GIT binary patch literal 38664 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 R5o#C5umX%$+)V3K{|~+Rq^SS^ literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4.sc b/source/HOAUGens/sc/Classes/HOAEncoder4.sc old mode 100755 new mode 100644 index 0b0930dc8f..d1e09d024f --- a/source/HOAUGens/sc/Classes/HOAEncoder4.sc +++ b/source/HOAUGens/sc/Classes/HOAEncoder4.sc @@ -1,11 +1,11 @@ FaustHOAEncoder4 : MultiOutUGen { - *ar { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | - ^this.multiNew('audio', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) } - *kr { | in1, gain(0.0), yes(0.0), source_azimuth(0.0), source_elevation(0.0), source_radius(2.0), speakers_radius(1.07) | - ^this.multiNew('control', in1, gain, yes, source_azimuth, source_elevation, source_radius, speakers_radius) + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), speaker_radius_0(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, speaker_radius_0) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4.scx b/source/HOAUGens/sc/Classes/HOAEncoder4.scx new file mode 100755 index 0000000000000000000000000000000000000000..7ea3c1a12d0f0eb55fb45895d17e6b56a7bb9c94 GIT binary patch literal 42760 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 Mx>;ONGZwr4AHrw@M*si- literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder4_supernova.scx new file mode 100755 index 0000000000000000000000000000000000000000..8db9ebc108c53cad8d8e5ec2f71fa2e8d5fd5a4f GIT binary patch literal 42760 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

    sH9$Q3)2b>I9j|>!(x2~oQFADcmYQX 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 Rcelysu)2g_NfS1^{tpR4Ktccj literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder5_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder5_supernova.scx new file mode 100755 index 0000000000000000000000000000000000000000..130167882bbc44a99a1850b83b72739563f115d2 GIT binary patch literal 46856 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAMirror1.sc b/source/HOAUGens/sc/Classes/HOAMirror1.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAMirror2.sc b/source/HOAUGens/sc/Classes/HOAMirror2.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAMirror3.sc b/source/HOAUGens/sc/Classes/HOAMirror3.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAMirror4.sc b/source/HOAUGens/sc/Classes/HOAMirror4.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAMirror5.sc b/source/HOAUGens/sc/Classes/HOAMirror5.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev061.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev261.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev262.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev262.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev263.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev263.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev501.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev502.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev504.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev504.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev505.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev505.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOARotator1.sc b/source/HOAUGens/sc/Classes/HOARotator1.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOARotator1.scx b/source/HOAUGens/sc/Classes/HOARotator1.scx new file mode 100755 index 0000000000000000000000000000000000000000..61511af78f35df2352c714cf422f1b092fd4472b GIT binary patch literal 25816 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOARotator2.sc b/source/HOAUGens/sc/Classes/HOARotator2.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOARotator2.scx b/source/HOAUGens/sc/Classes/HOARotator2.scx new file mode 100755 index 0000000000000000000000000000000000000000..73de90ca368486800dba216642690c08f1b608e5 GIT binary patch literal 29920 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOARotator3.sc b/source/HOAUGens/sc/Classes/HOARotator3.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOARotator3.scx b/source/HOAUGens/sc/Classes/HOARotator3.scx new file mode 100755 index 0000000000000000000000000000000000000000..d918578fb6fe2b6a2cb91d5975db0ee867ded3f2 GIT binary patch literal 34080 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 P(g_OOoLcVGXxje)FaSAq literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOARotator4.sc b/source/HOAUGens/sc/Classes/HOARotator4.sc old mode 100755 new mode 100644 diff --git a/source/HOAUGens/sc/Classes/HOARotator4.scx b/source/HOAUGens/sc/Classes/HOARotator4.scx new file mode 100755 index 0000000000000000000000000000000000000000..2c18544331b8ace4d334b499936e8c34074b65a8 GIT binary patch literal 46368 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 literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOARotator4_supernova.scx b/source/HOAUGens/sc/Classes/HOARotator4_supernova.scx new file mode 100755 index 0000000000000000000000000000000000000000..4266f0370471ab49fee1d2d6a7402a52cf8fb55c GIT binary patch literal 46376 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 literal 0 HcmV?d00001 From 83ff22b9c7acd1cf9191029ba23286dbdaccbb0b Mon Sep 17 00:00:00 2001 From: fgrond Date: Sun, 7 Jan 2018 12:38:06 -0500 Subject: [PATCH 07/30] added NOT WIN32 macro for -fbracket-depth flag --- source/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index bf7dae3caa..2f2a6cd778 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -79,13 +79,17 @@ endmacro() # This is to be able to switch off the debug messages coming from the Faust generated CPP sources -# by setting to release mode -DCMAKE_BUILD_TYPE=Release +# by setting to release mode -DCMAKE_BUILD_TYPE=Release . if (NOT CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DNDEBUG) endif() -# This is necessary since Faust generated CPP sources can have deep bracket nesting +# This is necessary since Faust generated CPP sources can have deep bracket nesting. +# Without setting -fbracket-depth to an appropriate level, cmake on OSX resulted in error. +# Seems not to be needed under Linux, however -fbracket-depth throws an error in the MSYS build. +if(NOT WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") +endif() #----------------------- # plugins without extras From e3b0e5f5e5806f2bc7a9464e46ec8c5b95ca13e7 Mon Sep 17 00:00:00 2001 From: fgrond Date: Fri, 12 Jan 2018 11:36:23 -0500 Subject: [PATCH 08/30] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2cb8578a42..d1e9b09940 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Copy the `SC3plugins` folder to you Extensions folder (you find out which one th WARNING: on OSX, if you want to install into `CMAKE_INSTALL_PREFIX`, you have to specify it by disabling the `IN_PLACE_BUILD` cmake option which defaults to ON (see below). -WARNING: supernova on OSX. Supernova searches for plugins specifically in Extension/plugins and not like scsynth in Extension/anyOddFolder. If supernova on OSX cannot find your plugins make sure they are in the correct place. (patch for supernova server submitted). +WARNING: supernova on OSX, supernova searches for plugins specifically in Extension/plugins and not like scsynth in Extension/anyOddFolder. If supernova on OSX cannot find your plugins make sure they are in the correct place. (patch for supernova server submitted for 3.9). ### Cmake Options From d9ca104bccb341ca2b4670ac8f66999b9ce3d071 Mon Sep 17 00:00:00 2001 From: fgrond Date: Fri, 12 Jan 2018 17:14:29 -0500 Subject: [PATCH 09/30] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d1e9b09940..9043b8a806 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Copy the `SC3plugins` folder to you Extensions folder (you find out which one th WARNING: on OSX, if you want to install into `CMAKE_INSTALL_PREFIX`, you have to specify it by disabling the `IN_PLACE_BUILD` cmake option which defaults to ON (see below). -WARNING: supernova on OSX, supernova searches for plugins specifically in Extension/plugins and not like scsynth in Extension/anyOddFolder. If supernova on OSX cannot find your plugins make sure they are in the correct place. (patch for supernova server submitted for 3.9). +**Note:** supernova on OSX, supernova searches for plugins specifically in Extension/plugins and not like scsynth in Extension/anyOddFolder. If supernova on OSX cannot find your plugins make sure they are in the correct place. (patch for supernova server submitted for 3.9). ### Cmake Options From 27d67c0437fc7eafc190c7ff8854a9c55154826b Mon Sep 17 00:00:00 2001 From: fgrond Date: Sun, 28 Jan 2018 09:53:51 -0500 Subject: [PATCH 10/30] change to if(APPLE) for bracketdepth --- source/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 2f2a6cd778..54aa0c51a1 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -87,7 +87,7 @@ endif() # This is necessary since Faust generated CPP sources can have deep bracket nesting. # Without setting -fbracket-depth to an appropriate level, cmake on OSX resulted in error. # Seems not to be needed under Linux, however -fbracket-depth throws an error in the MSYS build. -if(NOT WIN32) +if(APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") endif() From 265af6f51b6d75bebb47da469abeebbdce383d1d Mon Sep 17 00:00:00 2001 From: fgrond Date: Sun, 28 Jan 2018 10:11:46 -0500 Subject: [PATCH 11/30] removed binaries from sources --- .../HOAUGens/sc/Classes/HOAAzimuthRotator1.scx | Bin 25968 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator1.so | Bin 53272 -> 0 bytes .../Classes/HOAAzimuthRotator1_supernova.scx | Bin 25976 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator2.scx | Bin 25968 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator2.so | Bin 53272 -> 0 bytes .../Classes/HOAAzimuthRotator2_supernova.scx | Bin 25976 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator3.scx | Bin 25968 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator3.so | Bin 57368 -> 0 bytes .../Classes/HOAAzimuthRotator3_supernova.scx | Bin 25976 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator4.scx | Bin 26016 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator4.so | Bin 57368 -> 0 bytes .../Classes/HOAAzimuthRotator4_supernova.scx | Bin 26024 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator5.scx | Bin 30120 -> 0 bytes .../HOAUGens/sc/Classes/HOAAzimuthRotator5.so | Bin 61464 -> 0 bytes .../Classes/HOAAzimuthRotator5_supernova.scx | Bin 30128 -> 0 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA1.so | Bin 57392 -> 0 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA2.so | Bin 65696 -> 0 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA3.so | Bin 61656 -> 0 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA4.so | Bin 65808 -> 0 bytes .../HOAUGens/sc/Classes/HOABeamDirac2HOA5.so | Bin 69960 -> 0 bytes .../HOAUGens/sc/Classes/HOABeamHCardio2HOA1.so | Bin 65688 -> 0 bytes .../HOAUGens/sc/Classes/HOABeamHCardio2HOA2.so | Bin 61592 -> 0 bytes .../HOAUGens/sc/Classes/HOABeamHCardio2HOA3.so | Bin 69784 -> 0 bytes .../sc/Classes/HOABeamHCardio2Mono1.so | Bin 57512 -> 0 bytes .../sc/Classes/HOABeamHCardio2Mono2.so | Bin 61712 -> 0 bytes .../sc/Classes/HOABeamHCardio2Mono3.so | Bin 61712 -> 0 bytes source/HOAUGens/sc/Classes/HOAConverter1.so | Bin 57312 -> 0 bytes source/HOAUGens/sc/Classes/HOAConverter2.so | Bin 65504 -> 0 bytes source/HOAUGens/sc/Classes/HOAConverter3.so | Bin 73696 -> 0 bytes source/HOAUGens/sc/Classes/HOAConverter4.so | Bin 81888 -> 0 bytes source/HOAUGens/sc/Classes/HOAConverter5.so | Bin 90080 -> 0 bytes .../sc/Classes/HOADecBinauralLebedev501.so | Bin 151752 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev061.so | Bin 61472 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev261.so | Bin 69664 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev262.so | Bin 77912 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev263.so | Bin 86104 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev501.so | Bin 81952 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev502.so | Bin 90200 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev503.so | Bin 98400 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev504.so | Bin 110688 -> 0 bytes source/HOAUGens/sc/Classes/HOADecLebedev505.so | Bin 135264 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncEigenMike1.so | Bin 69664 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncEigenMike2.so | Bin 73760 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncEigenMike3.so | Bin 77856 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncEigenMike4.so | Bin 86048 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev061.so | Bin 57376 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev261.so | Bin 65568 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev262.so | Bin 69664 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev263.so | Bin 73760 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev501.so | Bin 65512 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev502.so | Bin 61416 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev503.so | Bin 65512 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev504.so | Bin 73704 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncLebedev505.so | Bin 77800 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder1.scx | Bin 30424 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder1.so | Bin 61416 -> 0 bytes .../sc/Classes/HOAEncoder1_supernova.scx | Bin 30432 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder2.scx | Bin 34528 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder2.so | Bin 61520 -> 0 bytes .../sc/Classes/HOAEncoder2_supernova.scx | Bin 34536 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder3.scx | Bin 38664 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder3.so | Bin 65672 -> 0 bytes .../sc/Classes/HOAEncoder3_supernova.scx | Bin 38664 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder4.scx | Bin 42760 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder4.so | Bin 73920 -> 0 bytes .../sc/Classes/HOAEncoder4_supernova.scx | Bin 42760 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder5.scx | Bin 46856 -> 0 bytes source/HOAUGens/sc/Classes/HOAEncoder5.so | Bin 82176 -> 0 bytes .../sc/Classes/HOAEncoder5_supernova.scx | Bin 46856 -> 0 bytes source/HOAUGens/sc/Classes/HOAMirror1.so | Bin 48944 -> 0 bytes source/HOAUGens/sc/Classes/HOAMirror2.so | Bin 48944 -> 0 bytes source/HOAUGens/sc/Classes/HOAMirror3.so | Bin 53040 -> 0 bytes source/HOAUGens/sc/Classes/HOAMirror4.so | Bin 57136 -> 0 bytes source/HOAUGens/sc/Classes/HOAMirror5.so | Bin 61232 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev061.so | Bin 65648 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev261.so | Bin 73840 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev262.so | Bin 77992 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev263.so | Bin 82144 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev501.so | Bin 86128 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev502.so | Bin 90280 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev503.so | Bin 94432 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev504.so | Bin 102904 -> 0 bytes source/HOAUGens/sc/Classes/HOAPanLebedev505.so | Bin 106784 -> 0 bytes source/HOAUGens/sc/Classes/HOARotator1.scx | Bin 25816 -> 0 bytes source/HOAUGens/sc/Classes/HOARotator1.so | Bin 53120 -> 0 bytes .../sc/Classes/HOARotator1_supernova.scx | Bin 25824 -> 0 bytes source/HOAUGens/sc/Classes/HOARotator2.scx | Bin 29920 -> 0 bytes source/HOAUGens/sc/Classes/HOARotator2.so | Bin 61376 -> 0 bytes .../sc/Classes/HOARotator2_supernova.scx | Bin 29928 -> 0 bytes source/HOAUGens/sc/Classes/HOARotator3.scx | Bin 34080 -> 0 bytes source/HOAUGens/sc/Classes/HOARotator3.so | Bin 61376 -> 0 bytes .../sc/Classes/HOARotator3_supernova.scx | Bin 34088 -> 0 bytes source/HOAUGens/sc/Classes/HOARotator4.scx | Bin 46368 -> 0 bytes source/HOAUGens/sc/Classes/HOARotator4.so | Bin 73664 -> 0 bytes .../sc/Classes/HOARotator4_supernova.scx | Bin 46376 -> 0 bytes 95 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator1.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator1.so delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator1_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator2.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator2.so delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator2_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator3.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator3.so delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator3_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator4.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator4.so delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator4_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator5.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator5.so delete mode 100755 source/HOAUGens/sc/Classes/HOAAzimuthRotator5_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA1.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA4.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA1.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA2.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2HOA3.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono1.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.so delete mode 100755 source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.so delete mode 100755 source/HOAUGens/sc/Classes/HOAConverter1.so delete mode 100755 source/HOAUGens/sc/Classes/HOAConverter2.so delete mode 100755 source/HOAUGens/sc/Classes/HOAConverter3.so delete mode 100755 source/HOAUGens/sc/Classes/HOAConverter4.so delete mode 100755 source/HOAUGens/sc/Classes/HOAConverter5.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev061.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev261.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev262.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev263.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev501.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev502.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev503.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev504.so delete mode 100755 source/HOAUGens/sc/Classes/HOADecLebedev505.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike1.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike2.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike3.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncEigenMike4.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev061.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev261.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev262.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev263.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev501.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev502.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev503.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev504.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncLebedev505.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder1.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder1.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder1_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder2.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder2.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder2_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder3.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder3.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder3_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder4.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder4.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder4_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder5.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder5.so delete mode 100755 source/HOAUGens/sc/Classes/HOAEncoder5_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOAMirror1.so delete mode 100755 source/HOAUGens/sc/Classes/HOAMirror2.so delete mode 100755 source/HOAUGens/sc/Classes/HOAMirror3.so delete mode 100755 source/HOAUGens/sc/Classes/HOAMirror4.so delete mode 100755 source/HOAUGens/sc/Classes/HOAMirror5.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev061.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev261.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev262.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev263.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev501.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev502.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev503.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev504.so delete mode 100755 source/HOAUGens/sc/Classes/HOAPanLebedev505.so delete mode 100755 source/HOAUGens/sc/Classes/HOARotator1.scx delete mode 100755 source/HOAUGens/sc/Classes/HOARotator1.so delete mode 100755 source/HOAUGens/sc/Classes/HOARotator1_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOARotator2.scx delete mode 100755 source/HOAUGens/sc/Classes/HOARotator2.so delete mode 100755 source/HOAUGens/sc/Classes/HOARotator2_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOARotator3.scx delete mode 100755 source/HOAUGens/sc/Classes/HOARotator3.so delete mode 100755 source/HOAUGens/sc/Classes/HOARotator3_supernova.scx delete mode 100755 source/HOAUGens/sc/Classes/HOARotator4.scx delete mode 100755 source/HOAUGens/sc/Classes/HOARotator4.so delete mode 100755 source/HOAUGens/sc/Classes/HOARotator4_supernova.scx diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator1.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator1.scx deleted file mode 100755 index 57ee65e70baa16e99ab8f8f99db02412d24374ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25968 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 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator1_supernova.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator1_supernova.scx deleted file mode 100755 index 4f66877d4c90d190b1952c8573bed3bf5788bcae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25976 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 VwOtM;`uG<=ah6uwL)Sv=`7a2)`Pu*g diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator2.scx deleted file mode 100755 index 011ad6828a08cce3a45e3bb148c241edc3ee452c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25968 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

    H~gbnh*lrU?&_FGZ91QRt&`2 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 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.scx deleted file mode 100755 index f56278b0c78be3b2ae0af5438ceb96f05205701c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25968 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 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.so b/source/HOAUGens/sc/Classes/HOAAzimuthRotator3.so deleted file mode 100755 index a3856970595feb244e4efc5818664b3bf624edea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57368 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 Oqa4O_TKyhIA}!#peW>2y7DP;T#KDM!u0PMLGhL zgpL^FDJQ3D-P=yfH0`b1PFtGWNu6oJFw+SUA;E5LlNgefkVgw`^AO{tVW4ryqv(GB z-uvifL$VrX<*vIpi?jFt?fvh6|NGzXy^qY(@4b0qx+GbOB}pp7I}309G)WqWTR=(D z1$g_4BuQ0UU2Ux_DBr2dhmydMDV5?SpB`1!{CygyInI|?HG{{6F5y1mk}NxccrH}c zs1{or%>)(dH}qK^wMB3c<|X0*WkMc`${sFH4fum$e*__g@+vAh-vRDPgkhHKGfBU7 zKA-CE^ZCP?s(IHI%KJdb+bNVHoF^|UnNh0h3-v~`1}v19{2WhEEaVZ+v)^QSQ7zKl zyH11`%G+}#kGP2%1|Ac0G+9?wjrDHm?(I~&d%HqlDwKEeLZ0%F5J31;<)wC4$=Y3` zv(+gQk!Q9yn+Pkw)ZR$tY`yjd)#%2awV|LI)*{erYI&wOk}rzPG9WqUF^W5?x-OKh z1uAF0Je$y`UZf#hD6c$EUeJ3g{X9b6ut-BVS00tuo+qy-M3vC3sa>&N-z5Dc2WKub z(*WnnJIf3gzN&V5HE%X>Qh9~Et)en*z^86^Yopm-JK28Q7V*49u^GtKPc-k0Lex%V zysGL}R<3Y0D&`nfFIY@L0{6}1;bga5S(i&voUwwBx@IN(dN2f>l5_}VlN%*z7>XQk zlB8PrR9vdZzzRva3;vN7N!mI`lFkP0!AlR4u=gVPD&C9np6n?{`Xy6DQd-Jq|Ior$ zZrQPDB0g}xc30w2qXJSm2BW z{{OPT8d-nUc|(hwXtGR9x5!pklTFq~QX^Ql$$IH+=>CuNp~R`LAVAUg%0}sajJR@t z(x&Ls9-+}FbqC|!gQ%a1C|NIN>!2>#+M7IP{o95zSwEPXgE3k*h%TKCxo-WP)a=<5 zRE*eLoVT^7JIV%`J~ujVaISH-ws@TSgrcVv<8K4a#!utOOg5&cJ+|h7SF{=>@%^m` zar;ur?pKSgmu&%njz*Jwol#PG%xXgc4yHdXCvGWM`X4V-(!YuQfh0kMY}5x7<3?FA zuJ<(R6LSA!Ww$tQb+$WibE@s>LtR~63ru-=`pErnl*@W-Owm73jJqqK)PogqWNK

    WUT!e7&yWkt) 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 diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator5.so b/source/HOAUGens/sc/Classes/HOAAzimuthRotator5.so deleted file mode 100755 index 75f3218ea673f19b940b3499dc0c469bcced4f33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61464 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 Dqw1kQ diff --git a/source/HOAUGens/sc/Classes/HOAAzimuthRotator5_supernova.scx b/source/HOAUGens/sc/Classes/HOAAzimuthRotator5_supernova.scx deleted file mode 100755 index 32b5b1f3b61d7b8c2e1c905f926e45d5d5ddf59a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30128 zcmeHwdw5&bmG6-)Cn8Od454^f%k z&H_nNlm_eS1{O8(VV(#jfgw{W!c8GviV|{nhB(dfM0tr~p7!KrJS42muoH-6Lq!RO z!p*^SRIYxJg*@qQ!9keUh)3vzJXDokT%OYA_W0ca#N^7GS;hHY=Yd2RX31Q6`mJ}l z6nCe~?GGs-XLGK+aUpL|C`EXJyo_W

    SI4Q33OD{tUhp5bgEkMIQh<;x3(0`1=Q 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 diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.so b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.so deleted file mode 100755 index eefe9a270a5191d0f5c0a5267aa7192d5c1a22ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61712 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 Np*R~YN6okQ{~HLh+|vL6 diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.so b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.so deleted file mode 100755 index 70590d11f82b59bb278810ad5ad2da58d8dad610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61712 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 Z_(_*iA@M5f|K;!Uva!JX<80CU{|~BYJ|h4C diff --git a/source/HOAUGens/sc/Classes/HOAConverter1.so b/source/HOAUGens/sc/Classes/HOAConverter1.so deleted file mode 100755 index 146d12d8fbbba70ed1c761d27dd6f0e42c62969c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57312 zcmeFa3w%>W+CP4J36xtC)M{0fs6mTLO-c)`h@`ZI6HGC-1q*^{Xj9s?m)Isy5Tw`^ zh#}ZjR`K%gvaYV^;>zxeioS?duDZ91H@xgx?}_MA!3(Qm{@-V2PI7XZdVBx-`~Ba~ z|2=RzXTI~yGtWHp%rkT5%sE+AVxN(mlq4xfigdX|v28gVv5ExaA#s7gD&JP#HsT_B_O*2#xGQ3EL$`Yd(uAob5RPcbqtaE#7ZqJ#-xU}{Vwos! zFuhoXvXxL&ht=&A@JPWqbM_pmc=()Q+dg>blipV*%GGsOZn!byx2IDPML4r?l3s@4 z9O@WnJ=fSSSzAY`;aPvsFwddmDxicy+oPOHopFcaQO6qIqzVP5<-33Y4 zpS7<&)o{{;(dNvvPSH!Ni5DH?abART0?urlW}M1l5f^y~^Klm7oPzT*oYQa?;v~7~ zD8@OHT}hHGLL0&>aF*hnjq^&JSK+L{sT^11q7vskoC|PXi_?iydsG2%;ar5X8Ydl# zan|9irwESga5ms<#_7S?ic>kfxbWdzf^#X(8*#3}xfo{Pdj_nWnG48_Jf2^}3I4JmarVb=@C$DRTGF39$Xq-7g$ils*3;%*d*|YJ&)8MhHQ}xm?Jxc3 z-Y4I^b;auR4tw*@UOimDvgYPUpeOe$>~a0fyNUbDX?sZ+5kZ|Z>S`llz==rJuz+^ z1gHLHOu&b1DiQuAoIs*-vqvSyD@P>8e?JI*=kUbzCyz{wj~PVHk%Q1ve@#@cGT`Up z)E<3<@EM_(q|sVp#D6^qy=xGB&RylLq1c#vt_j2C?Tq4?=(UAoV?gaqJ{%q|`H!8wIMv zj^E<%xxlxP^Ti>CSLv@9gbD8v&R7{+Z^D2_xO6?Ir*Vjm2he}dkus!14;fipaT=w_ zNc0AB;y4uk&!WAE-tjvl!!y}mjAh7pj+8D{-N^xkPk_~Hq~yru_^Koxz6*xLf3t_j z75;C7p75%*9REM)9VW_E^z*i$ zuhP(8%IGtskj9?>L$r%WlzXP&Z$Nlbf^l#q^OGZ`UYda6P|EE`|E2aa-oo)sLJ@r+ zAlxJLDbyx?E$p*>5~sge(7y%(qVK1P5)MV5pW~YF-ev|z?c`yh2cyu#Xr3&cF3Q!~ zRfgc-C;R|DC98;d6a%y#QbEsv{@*iO3;@IyK)G-QuJ`P&`+PH9e*eIn+1R27NrBI zFX?%ckUvZCUyFJfq|>GRKNtnVgHEA`Dq%m0f2%{iSbGUR?IM?dkakIjJT$)aPUM6% zU#H{oLGumL~Lo;@I)L;NPR+|2x6IPw;<5*vSH+XG!Rp=5usBCF<2J z>ZRDpN}(UE{p=KS8U?)~=c%IHZjB#1uIOL*)tN$`Qx$vG^p{74ob5u+MlPnb0Tnk$ zXAH2PPZfQNex%4FIh~6eo12`iURR6P>6D!HP4!;MS&Kk&+A2z&HSQMo;`&yvyQQME zsG+&ZUEx~P;O1$GQ=HXpE@I$ns9z4kSxcN{f+2d}4 zFw>jcNwqE?=wH+2n5XI;$z0 z0E*FzSOo_(P;rjnJTS!~QZ#NlnnQ~#^zllJl560^)Oqm5OczE2 zvuByq=x(e=5No7F+;Wt5w_)5STcVM?`Z{NI-F41dSA9c*Jh?Q)gOoEa;*AZ>4QNy3 zEg;%*FKoW-irMAf$xaOJZ5E3qXOXM5z8YnrvWsoik3UR!xSLAed?)>a!!b}^_V-&yK(x42qq81z~u zDk3|%ZWM`67IlfHDt7#Tsd72Fs2w~JW}0woUZ=0A{(7I= z>1l2)DJ!4sWMv-Q*>W#9-2h6SjzXW;}g;(+{C9a5}wpEzL`v z=&dkkcS}oi3!h7tdvgk+dKZ$qnrfUa?nSN!a^Q;w5v1JgEGuU-)*s(p3ZNN?O(RTM zBm5bgNiV|WxygyCO?90>THH)%5pzQ-kvgYoX+2^XGklHEh;wmUo702-)l747?=t5S z=8&R>5SwRXmW|mrx@v=4^u!!d8MySR{D6tVP&{adGc*T#`L|zMSAZkj$ zvPp9cyhp?(_IMj!c7ML|D_&EytL z30jtb$xj!xk_rY&+BZib+)*g7Q3Cbjb1QV4k;?i z%e@mDU7nxjBjFk~K2RA4gx4%7p)zd$2g;Z`8+J@XoNH125{rd80o}4Xy~{jq_^aAx zCP_KnyfTrLi*g#jNk$QtE7Q>mTlA_t+V2=;Tr9ra9E;Prq_IA6*#ibqDmD?Q;fZ>+ z4#qOk$PcCo;qrkqERe=eiKK@5MXlbN>WePQZf(w$D0o6jzjI zm^55U`XBg@YA!Lko7vhCf3E2`e;HQ3he^Kz#?w=zl_K2=VB^nkhmwX%4+!j(`ub6{ zd*Y8G?mMF%D_S~fXEcARG*_fKkpIO;u7iSyN(TgX{qZ}nq&7r)QN%qgo+`Z~;@49MMCpZxVe`6ogzVTvp-A^DUyMXWWYX zMissC?2EFQRk&DkBv`Vl@QWG3|0vG|iGL zEVWXF)1D{gs8Zp}6cAyZ3b&|mj|wkP;cY6M_Jk=%y9%G7fC$&A@QYMpQv6(2QzTt$DCie7ry$YRtla#VPl3a?V(9uj|}!fAh>a^$P( zg)3ttC2vvT4J!H_DtxL6?@{54Rd}BY|CtI8sqjh_-mk(PD*U(#&sE{(KNwkz?A)Zn zGq-UZk0+yh7AV=M!m(u|dSt0^KHKI=W))7nlp|k-D|0eRv#Ri63Nb=ig%4NZ4i!E^ zg;%QZkt)1Og{Q0VIu$-zg?m)^$tt`}g`c9r+f{gm3SXzfPgUXFDtxvI-=xA%Q{kIc z_a?@{3^RrmoFex?fVRpDo;@Ixy6Y!%+8!pExckP3IH z@O~9;RN==}_&F+E6822CcCHFfQ{m^SaDxgTr@}K;`1vZ_sKPH$;c~~vX>vfPTV<5w zt{$&0G$k2E+p#BYHz$hZ-HN2hxQ+O$A8W-G#p@_B+!w(y?q-TpHw^c(_)QcC6Di!o z;>#&cT`s(h#ak#&T`jzs#eYU|a+Tq37GFeha*^S77N1XXQcKvw;$;-4t{1Li@mUn7 zE*EyN_;iX>R|{KN{8EZj7YmzNJcr`cwZcXgzmVeOV#5X&KbPXv#ljMcpFweQsp0-_ z0gO9|;s%QMvG{O`kEVDpizie3B#QU2_*XX~PF*m(jm3{roVs3kGmC#jaq4p6ZWe!s z;?&i`?JWK}#i=WWJuH5Z;&e+Bu43`$DNbD{>|pU{DNbD@Y-RB$DNd#zHnaF2DNeUs zVIzw_L~-f@VFQcbOYyTQF0uGs6dz0R{u5OHTPbd&cpr=3OmQ;ha4(BLxxy&bc1Ok? zW#O^iwb}Zyok*6L{m8+o*CT@*)KM@;9)Dc+zb|(jPhXM&GyEm;kQokJ80o9kk1dv@ zg}ce>Vmy%F!t&=`$n$?o`JeeVMfUg0&xEGQN&Dm%zV&8;nM*Jm$(eB(wEWtqzP-|j z+w=?Mj;Yg-0V4U|_l}eUQ=bGL%0rDqGX5;wr`rJ_>DWMd3YJ3Xj%ku_MEF`za=B6d z6F2b6go$OOcOkP!;LE@#Qsv-u<#J$Yo9zEu?)t)OK;i-<%7JN-?sh0l4itGv9hb-f zGZCBuf+>t(ii*I$53ng7zM)PI42=-O5iFq<@hR8Hfp%gG-A3D_@an?3a`29IfD7jo zR@nUC&MEgFgICD32Oc3}Ik1X&$pP6QPZ>1_b=r{%Sl?wvpO-h4SR$oepV)(@y#OWe zI9p)0EC+vP{T6&QJr4c_FK-jEbIskGpT?ElF3hQ0dT;@}OD63ZvEf*0RU z8Ewyen9SPS7Pzsl#Q!lX(SZ^(-d!Fou^ohk1$*?tn1UDBFOPHhtFfvx28=k%Ke8u_r~k2v0tyUvS`<{@Op?n5iF2 z?9q@tsmJuArDOWaXXJw8z9Wd7Wb4?Q6kbGa+Z{Pb60E-w5fT;Eb@=~b3(WN}iLG^T zotf7xEL>2yu<+VKXQXddAUA|MhhF+75;^?1?5{ATMP85t2*OXJdv%lk?ZL-m`adzJ zoNNC9l83bK_nKgjN(;QWOz6W`BX6>NQrh*N92~=yKVCl;YAKORgEwZ%5ZUhkQVyiz zayRK;DvX?JEBLt7|E=$JTVN$bFLl@gbL4=+exUH+7kT0ErrK_mz056~v#Sr16;?n{ z*lowhX4q>D3L2M10{e?iS(Y9c-mPf3h=c4`-}y`Uf7$=+6JtPuME|R3pPpm#??84k z>T^_Y7^mXO~O)Z8*rV^uJ=#3 ziqIj#N)gtH(8I%<+9|{#@4tx}jt*RI;#YLJId-`%cDW;Vc_4P#t6V~J)M4)>cM`~} zUWULQ=tim>3{ckn9lQk8sN)`%$!eAT9V7vQ%@hQuXUhKnY-fnwlqm>PC)X$^-k?bq2ifk?WfPU=; zjBr47|8!!w`#B=r$oU{^up8=j8L2{nIuCaRC@7@w$|f%vm=bvz{Q#Bs=sT(DkgHY6 zWk`@~NPMm~@6V8?^{^{Jp1`U_zsimTB-nq3OV$?n4!1zwT^E9xD7Y5|RCT!T%BP ze>#(rm}@DKLgQH4ZlndM?EOV)NTrZkLy)D&ff7{9VZ<~KWth04BZJm3TI zH{@SmhJUS$bFMP{XK-ekT+mOhHcj98Bz&tq(2`~k%+9ir$Dd)81H)zivC@LSminJB z)z5f^DB&3FCPQi0L4D^s6lwP#lreGe|IH3K%Z_o$7;67K66xx(V{k$z2deL+KB`}L zkXfUbyweI(CUUCs*fn{))~=qmGTDEK#uXWTI+qO#`mV!p7SKth(x(fZY$j#*_uI!G zkf)+mSLruYp(MNifPH*FM^-&1Pld4UD<3K?SOKXZCSOq z_ma?%95l89X!~^=Rh=sQ01ZC@5A?FaWC-2)8Ly^7tnXZlbPQAer_mU;j#ZhGzSG3m zAI989-_b~gPgkMZp;e%fgKb9HzZ>PCFBX~Yft9>G^cR%X zZ%;a|?;MKkrCnd>yS_y(^w?YGA@i-rXucAs-&-c34+)Ldl14MVrKH0f-Nrx~R zyZ?EiIWPPsN=HjFp)*6*f+txB#uo2X(pV5B+d5W~#tuSxrT!D)gD4~BKVc2GGou>^ zIQ$s;H@ExJ@t@jO|BJQyEiy4#{V!_h6@M)DA2@t}EPtuLzjXWo+v?+-^eu2fgh-41 zJ^J8SXE;pcHh^Pi50-tJ#v%Ga;Gipds9(s$C!UZq_y6SR}QYaRr(`)|mazArT& z+Pc93ouZPBS+f5ItKENGP6~N5LGC*lsw}RADrZ7JNM>QniL)R5K!uuFxh1UAz@rQ&zxP|pR<^lBUtD&&)T>ODZMj6J7N#b5CSlo4l zY7s(3LYJ^wzZF^wDD+4CIUL4J7XtdE&~G3xbk+4|6cpZyKim#^M>`c6nHfQ6)ZxNG z);jRdmN&vlxCU`2iOVc}G)v@hctbM!422$Igg*oK&@m>~?ofa!>aEajglKQYzr(q& z{x}UzM)pswYsT=@2j+6{9#b#E{hcO?(jntI#4jb)IM8W24p%`#K@ldfohCeWW{2$W zH1$(9gw#tgz}?(v6a!i(V;&mMB-&>WZZ(;~gbxmZt*jW(-vs)?9oT6rl?L4g@V0`; z<@46rgEtu10E+uP|9v9wklGS>zf_VTA9S>Cv#--M1DBHTqVP*tM-ly<+|#cvMsfRl zzJfWyFBID_at0a=a@Qx`Lio2V8Es|j_;$#WgHIA4yZ?jGC;uc;-wU?jjIYFy@SJd9 zPw{z6pfM8+d{2`mYz6!EomD8)7HEbuUTQ@5)alpc17RF(!Ig&4U5ur^^Y(Gv=bA~z zX#cPUu9j`VRp=t4u6MvZcOX@=d=cvWgbZ&dtFT{UhVR)l8a|cT{6HZA<;)I%+IZGAUTmY$41s&5N2Tnxz#kXx7FwJ3jo- zsnq4I-0fd*5z{N?G~cDyVbCjaA-(VUPLap)P-OZ^{|25M-!_MUfIDSRo)`N&pq1mp6n7!-WZ+5P{L z$A@J;g0AYt1z5MQ80J6F)wApw_!-KMLF_%>GrVK$(|7(2i;$&(TF&ZYuzHD2PVNG1 z3oL;UmzhEXBR+f%)43QTy%*WsY?u-O^rE%H|F&pk^V@t=od`$G`nW~VhANc z-@T-78gY1gSivo>J^Cme8YH^Vr(xb6*7)|Iw5RKviEyKdXAliSTePV`YW;17eb$qj zs9{)%5Xwqy4ia-X1Ne!@spX9>Jn&U^*@(ip;FPV4@pH@FJ4I~thFDOK-OBx zt+i6?J?McVnHAB6iWsX3Q>DDC(dDgc&2Fey(#TLbEev(hB{X(6wX2d05O&pNAm-Ry$paAuxfRP6r&d(-J0xzHrqL1}-Vz>_-$hd{T-p|8#49Dd2s8##xKf_5E8FD9a3-UflTFtpQT zrnV1mH?1RU!Z6>-uC#sCN>pe{q7L2hF4b%!Bb0a1{&`nJD;w-7SsCnk7BRM{2YXf` zIwX}yJoAxBZ64HFIn7phcHqNtpM(yHkNqeGEej?f?Y%0bFcEJ|Cmoh%drvPcZ<2s@PJ}VjxKm`)>O3Nrf+(=2mjAoFdC$&+4ewzj6Y$*@xv24v!nHcz#+dXFe;+8HI zip9WROanikCv4~Uez@xzAHEe1h0g=t(|3&}7rDO&_rlPi_WsT-?(e=y#XNwR(pteN zR!^D-6q~*g69KFSBDHndqjJt3deM(V;rch_vlY6k!{QXs*kdk_}tAD?py zi9@VN157qzL=iJ4Vil%Ss0)K1P4Y+ru-J!7X6n7TptM5-;6Pd*U4|ZKGwGcsBCz@Q zGj4oh-uMq{dQ8_TrDG4CQGAHo*sB>zf+ER-BzBumH`AYBtss<-$%hiLGEm9Xzg?57n`E(+XcPX!5%TKTuu(PY# zI8KBt51NTM`^~#9A#%T*w$EztP0Ti!a`w0d-AW;6}xSxa) ziL<_obVWp!C=Qkg{bwQkGW7nNyxpl>Jeo(lN6-#Vfsztp)?g!)44gy`t~a$)NG6St z4zgmpq!u*b;z^2dJNK_=x#$t^NYml7aUW`JKQX~O)vDihB6Jlh(bdDKz4^udJ}mt; z=%nIcRg$$6tLzVfOXorF2uAzz8>puo8Yk&{wqvrg*&K9 zmgg*Z((%twm}!agIsA~Af71dd`udl&Sh^0vvYvxnw0<0QzmeA|0rN>Du;<`Cm=?B~oo2 z`(TD&!VC|+MrzW%T}d3a^Cc8`Ql>|A$zBu?+AdUi98N^_q&Su8xOxvQq{cm1lAhEf zSNO9N(RPKmAK%AE82v4Oz~cly%IJgtLD#~clm5vy%7Kw4X7aeEgG`<-BdCs;r~O$+H^IE){tiaUGK*m&rlipAN`D14sN| zp$MN)INBCP@_bBU&>HN!T%HD!r+F}WUc+-9MV`I5j>*II@}2UquH@+=w~6Wf3!RvwLI-Y9u9JO==*m}p8M$n&%a2XnK60T3Nl+qF9V4AP*)n( z$=KqrJU*oKuWx7qBIFFwwdh~upRHgVmHP)yn8@Fe;bX{{g9q90#fS`?F%_<>py$)k z2@_16y3BJRhE>3m;3DCKX$_k~Cz>!__A;a&Fkw2Mp@}9;$*65;D3Zg+vF29W%~rga zzRrDx>#Gt=?`*M3r7t@@8xZ=+r)!}vctf?isQRbUBvb91qUPR?+9{68k2w^gm|^<9 zV}?okI+d;W(KJ)cT&ZuPZxE~fxcqL#mA=K*Lz<1BX{NlCNO7OMNN6I(*^lmF-ZupxL9S zAZBq1X53_4+dzr2p4tmB(mtPe3%d)QE2iE9RdwiKB2_)h&_t>_A09dM8zhIv;0n*U z*b`~9eyxvu8k-c><0gsgnIv^PNC*$&ent=s^unDU{O3#h3?p>6uLi=)kO zn2oxao0nj2{x&w5Q+fGNG?fPw+c|hmq74A$JCM$mukU<}7p3od7#Aq+(a9)o2dO|5 z=g_acCR)e6R9svmxKU$@H!GbMipwN$cdf5gq>i_kGK4JBN`)u)2z^Pq=eJxS)Wi@m45AI(H8n$T1;i!EG{IOAkT5s_CO#z{`#(a$w0{*!IGOtv5DD- z2LRbe8->D~DE2|0hh$~`h0V98{vr=$ZX#W<%5F7vvogPlmYFi3zR99oV*kDM?FNxj zw$?UJr?SUH%Wg2$>DT@mZj`q>eONu-HXnq`h_lU1#yo19pVIUY4NW@M+UEU#p)}zj z`r~Z#W|pL}O%K_o2PxrNm2GZf%5j4~m$6}hj3;2NaWZa-m$6jHNP5xAn1teZUQ~h_ zF?Qqq!Jm26wlS0~!{|F#U?LUzGg89z=uv6FZA?ZxH81Nw%SlFVH0VHcs5glYbcl)e zj?#hti1`_*ua}FaS_G;aSUT>)%77*kSKrw|-Dn~Swv4(_Ameenk(?2IyMQ)^UU(EJ zR@!zzRJvvUGITzbKs$>%`HdjPMM|W&5jCM<7B|*COhJ4(iEfkWo-zE)Cz$&_RwAwA zq&BQ6g&zh+1so6sL_&N2M1pK&2yu0gerTnbLOe~!<}2C|bS*1^ubEH@L>7LNCiUP( znzaS7?2GM8KH|p(CVdetB@^pDit}Ajda$FO$dW)pq~Vp{5{T6RdSGP+ukkTn9Q?m?fz-`VHwRYaus14Xi}C9f^>Z*q zQG_e%1J*nZCI`tyMB$|*7w5FyMEy=M`{p^|T=CsPI7%gcn`6S=&iG*pK}ldqq~V%x zkQH*Zk*QtP?^ljOGoq2hZ=);gP#%3F1)5#KvQxA)Cp`IXpLi02{5I3R?AC2jYZMb8a z|J#9>vV`Wb@eZ1bX}*CmYoN_{d>R*SqqPNYpWE4R0Fzh~W8@K%bqlSxt0WsMBx7md zN3`KyCYiAJDljXEG3ysnRgqMZiqp%a3hXDWBC&`nd?!;pcEvnKU7h+Ztzd?y9meb) zE)I*O(YwhynhNmQ{ra15R~0S+pxm#6pM#Ye|5PVDo_aYF4I(iUq4LNleDM*U*w5TW z{3G@-?H;6@y&~}t!f4K~kjVBd3avAf#*{Zan(aeY>SIOSY1S7W0qqNVBhv?&8qp_1 zjS8coq+y^Y%)GW=hy6L-Gh$a02m+*BYt$**~ zUHGGxnu|P9FkuQ}ol22w0x_XK3G;ouTU8&{-;{ixV{tZ2e^@@D`fV!lIs;%DdJ+u6 ztBJkJj*tbWr0=YN%%M$0F^fyj#~4uds~Ne8?0O=*23PF4BKGM%N243U-;*mss3Q-K z@M;ksB0@HH0Z$V2MIwAwq@O18MMQi9^$E~tP-lW-=khv+X$w52KH-#ifisWn-y8Zb zlImWfP>=@+$!ADx6`oc2Lw%PHc$ofR{^icXg!_hPVVy6BI+2OWYC;k=kcaPpi^NbB zUX7_!cqxsPh!lT}$j?}0Z}?*oI+;{>hh=Z*5-K@~#qo$?Z)hyyamFSrP2ZV?%poI+ z4xcU9(96Iiz-nVpT4T^ z8buWJ2TwH0ET9SzYGvsOt$l`a(vSq9e@5kfNtCGZvov!=nEVnz588=z^ED#u zAh?n^1Nthq^d5qpHut3 z^M5xkcg##nQoSGa|3ciL;TInd%*4y0qb2MvX~!sx_h1cI;>ISo3uge-(YkkEDNpDwBP1{@H` z2yyfT0u}l#N576oBOJXXp2Hm+{VJaJMUH+Mk0$0z->86Ox_G`rIhq=e?&N&;#`8VK z(WCL`-#Pk8JW50;jVhz6aWXG0J-#%Gf_6kg)D_QR2&WwrPrKd7IGh@fzRqPhIUZfd zX*DuLfL;S3hEkqD-23)yd=u7ShCBfvak~U7Z?_Zimucf-i(Hqkj z?xVM&my9LE34~r$U7A5JsoGfj=$X`00rPjIiy6q@mBvfbNQ@ajm4_~_YXc4X-ONn- zGbWAze2(-`J|q3fqCffc$4Y-3^rw>k;HB-+Gd=jTwq0Vcb+26~Lb`(^e6tAYR+{2F zM0h}iy$DHebVro{wcX#>f3)d%e=_aqJ}?XAJVir+>K%0c{`qZ}8u?rgZ=CykE$^@d{8n9zp|ncsuP zc&_V{qxyNeuJfqL=HpGXqxf*aQT+nl4M6l8Mqzy@Sb}$!FFs`X1XEhZvMT(DPT7~( z@pUpxW4F(Mzt7@)r&eE~TZ_D~Bi%IOv4(yZ6-`uQN(+7a1ik+}PnV4ZGPrNi8xSIi znO!QgG6;z`O^+g|pn9PSNA>gHgRGEr!3zk%!bxTIf(F%s0U2~V8K?Olp^Bp$Ofu?g z+Cq7)sMTd#P&`I=h&J_O(4nlU_c3~)#w8bm)&5Ym5bZWDQbsj}TolmvE+yHX&G2m57BR^fyH)wJyhTI1`rYx=P~BjvUQt`WTs_EfV?}|HeFos zr7T>iYvV<23LfW8QIBkpJfnbzNQ$eC-oQDK^&mm;<#mi%6W_oJvA;kaj}}AU7czEe zvSR(b-K?EZAMDGKSnYbLb{pAR4_$d5CK2+!9ZQMxKGSa)nIbAYk<}a(K8e)}{XP?Q zsWG9W(!O6vrQ3{L`ZXsZ2U7TkXcUUF+F4m>I%>uR)IP{q7qULaEAC;X88WOqL=t3R zWN6Yhssv{tYA!ertoaTU!&??Tnrt-ItNHRN)bbV8a;K>Wq}-P0uP_-1yX^P+4UZ&? z%GR=455+$9Xl2Fxlj^zSY^vw8AZ8Uw3oU(=SL6XCK=iYg@(^xF*dPUXNsASleTcQz zZo=+in~5Nn;*MT}(7Rzu2apQIvC#)~#U>+&!XzhN5CR*zGCe|{Gm!EAcNJ0N7^TT2l-GTe3n7C z;VkCvnfG}U-T17R0YFt}1raW>phB=bG8WeUX`vb0xx$tpnYDEq{<7qSx=RUzDDc^2 z!nndKak1VSYg4Y2qsW;tiSe2D5~&4?-uexX;+7W)6UHF{{gqslenW2(MTU|z`mU{@ zz!mk|_aU+FJWx{OzJXol`nC7){JKXG3qOO1^86p;lYYY;j8Uq-lfH`q2K!Mhm=Upg z6B&rjM#knd+{y9&0bz7?#Ox~EdBRUHKFtcB+o4ua;6*`j!vv~=55uEQ{P#MA~>I{4~Ulxdg4VNHrB6|DK$EQAh~+a1iwZ_E^J+V0Q`i# zGoCO$$d(o!3o!)V@ipjv6{ACW+*2FEpK@V4Q75qJI*Pv}4Rqw?I@&?y{fY5HI_W&Dz6G z)XtdP`mQs0I?RNmB92)^LyIWTr@reZDz8wV)kA;!C_RnRQ@A|HLniZX_!yTzsvmUr z@LRERfMbTBq>^=nUqcDq49NtC&%!Ujth%vTkb0MDvmmz@=$Dh~yZqpa>l!97Q_xa; zPA%L5xR&@at@4^&O9{)EWsChPtS01zv4Tf+xr`{TWOZ#vx#A;R?Aso6lUEvSFpZ%( zD&6)4^A=~|4hJ6`!L43k!rPY^@$AuBXQS`PY=;YA7YA{HdE{9y;*|z^$`#C8b}B~{I6hGBN$e3hVvAL7&r%V zD@n-hH4J2=g44l*x8PXNkupXQQ>ynM3Q$xMRcI4fp;}?CZEAKos+%L&3a)OFx0HCC zu111`sG1*pX-SGMzHj&*g(-hBHKW;hMR{-2;J#7B){y`nQ4o(^RHp!Nx7 zyvcU($H>^g6B|E3xStd5W`rL^`LWLnb|d`(p8gvxqh9!IN?*&FF;`VB38VY#yLvAfTy3Q&7UUn59R48+Vs1i2g?5;6a_`RtI=0@yhz{A z(|2pr?}dY={5hQe1xQ!RSIGP~(tSLCt2X~fG+rS6C{KTc_OEH$EBq8_VvT|E3*Ts> zZ{QhK-{!!a053qWPhDB@>8P*98!^h!1`bTBl(n1tVe+(ggFzbi?3gSl-?jS&Mu^dh zeb;UiBT~L=2VXuVV=tH?PZ9PD8NdqO|`VMjZKIOP58vvcBd6T=v~Id-`%cDW;Vc_4P# zD=vL2&|!?%V6~^1%}hpZLWhA$4lv~y@SO=5CdOS|8}RTkHuI3^OIjEtnNqf8LBpLy z1#1)uOfO?u!WWc4pDcnVMvkMZ`-W4AAigHj7n=2ux=FvgJ@e57A6-E0xqzwHK@EI5 zmC|*0d;{-+5hiTluTj3zz>hPc=wci`<-#lU7Au1Mn`q#<0JIG};(ts7>$}#W(!7z; zj-z%M;@kIA(Y~92vybPXU(xMO%yfOTSnkL>-I^AjdOkJ%=L1{#^jHfsyJBV$z6XS% zd0Wun%KZgv@4zY}zLFvK7tVTs%w-C`nu#Y*Z+X+N3FiY*=&w<&4$^w5vfjtOLzj;? z3uHg;DzNnsQwG_8f?mG}Sn&p953S{;={vX5h#f-=czG@!!TrR?yy2BxMt$dcAof5T zeU(bzX+fkk(2NM)n)(o$Ee*KoQy==y|3F0CFO&wb0)=mad1vwYE#54}vf`0Y1L}eg zms)MXx%m3$we)ZePl)IKmZ3(V&;lXFK(Ld`hVNDt;1Zud^X;T}WRVeTXSTosJfLQu z`Z$wi#X6j7gV|7)`NL4;ewNdlX7j%p{u%BA@HHkdC_(;(BKw;lp>H(B_IExHg!c11 z8_WFn@aZh`DrBCC%ubQ{S1j`?WS$AJ>4Q8$mN^pYie-K){5NJExP8Uf%&hoU9DT*e z!RZ$g9ZZdqjDQ8384O0HLYE0fqh$XAP~pQ}Ucn7BUoAJi;6_O*ZpZJVLhvcD&_C&_ z>kTjChW0oVK1Fat*Vl4;hGoNjL_D{L1UExyvzi-Lj}L{nV~C~d;C4dGtyOTNB$aFn z1h=$MnVK6Gr4NNG1UJl@wA{uCZj_|rmM*wug;LervWOeqo1;_at8Tr}&kHNC5#+;j z@hNCL`Euf0wb+;8A4)p1*@KJIy5&GC-st!+w4HIj!HRzBkOS8V1Nh}{sJ=I-dhdEd zFb(q`4y~q3yrjI7O2p{Wj@}{ezwnV=;?8fpbaf~`T6otRDBo*W`nytoZo=}<9#H`EKKVUa7ZG62B>c`$Nd~&e!Wyov~+=#C`o=;ymrHL-y znd+LSb6kjoc9crc@b&_ z3qD{usA^DrZ*cqxc{S_?A1wF>F2J{a`a-cp7&q|E&d#F9D3I8wx`x3L#KK@X+8Kp)2xk{g_Kc>lsYGTGWq0&dw=)-pK zV|Y;k{u-}TGUrU6^)u@`&xPm4XRu{*exHTz`85RUIF2_gb`w#Sel2^?wBtCIW7zgA z^6dEjD&3zGK|Z}aOq*6q1NaCt0PeG^DH%>P-;VDxnX#eZ@cD{gUS*^Y;-sSDXuk94 zy?ML;L}_3ZKK>N(7Q)e^_q=W^_&Yw>#J&mfmr{SoHvW)}e-d%kL0piQSB%035%F0F zJXqo1g;+%;M=~;jvFZC!!1y2+oWwos zu>w9ALZZ`_>ZcwA18iL(pu~wF{;e=Q;`br;XK-KoW&Sd@Q}*i0}9b~P0fq&W5&xG+>))yh%(PcB zw@oalt*x18rYo1Zx~AHUU+2AVrc(V$&*5h}TtKG)z?Cjy(bi^;GUwUb)55JV! z!ZT}<_>c4oBW4vbW?3c_7R`3fo>+Ww4!bI+OXI`|Gkm44@kGj{{(i!kw8pXuBYtYW zxn-Hr)zHw4pOS_F80oj;-8B~*y@1(oX`^ePsl0V=BYvQ|VS=~5(XC`_tzYg25ldu0 zP26H^W@gmNHNj-RL`a68iEnChHy9i1TVX8Kb;C(lbnvFS)QF;etzP3e6i#i1izta` zl1meiD1BZ1yY!b{O24Pw+yn*ts=dZ0Uqgej3Ex0p;%ca`5gEp{UTSpGkB=L(me$o* z*BR?ujpLU4#v3n3b?RFuTuznC8m~!}gdtzk>ch`LS2s6+p}PfNL-C;XsWL^)zJ?lB z82>$QR+R~hxk)s)7#o{wd<||RnXs|8rMb~qOD2LC%e@H7Cv7+TyxeA#+Qq_u_m3g7 zUpA&+Gv>cvEX97Vn9DHW7l&h_v8x0>9vnxZ{l#FGXuZXH<(Z-Ft7lJ{#^Ro#g*;P* zm4}%;Y`?09$J2ORGFUHu{n_w!Pvr7^Qm*ySQ&!dfa`Ok%{=&j9rkyphyX1jo?@W8h zUKv{c*w>(I$7x0W9-Ql+#i&TfD$ZAulFm$-f*Gbn3_Z6;B1T+q+Z2gNc#E&+&PZev z2IXFa+YmbLibT?eB7S!yQi-tro=C)yhTlTPM6VKIFT!;Q`w-$MbEO`v4QxT!jn~&@ z@ZF5CiufaJL)e3`8(}ZPEeQJ%_8{y>Nbi+OuS6oW?b?7a4HI4?LL)*m!hD2Qgbsub zg!GG0RS4DjL?d(3SlL} zZiF6$JqXt!>_xa4VIM-;XV>!@^lVIe9daV9LP+0bXh%rDOx2ID zozmaH&k-OrAPgZiB9t%_G$YJJ=s{>k*p5&}*p09X;bw$w2z%Z~y$HuUE?dwZRoI+- z2%!V-lx#*jbR+DccES5}hGEbb-k-1{>_ymy(D*szLi^BxCr0c@T3#k4wHcDm962S53%F?LbTY+Z+UqT40 zcXETMHmmoak)8#9sAlvae(w>#1o$_^F9CiE1R{BJiA!<1p&5k`pNoO#1Bc6s9)uSI zHz&Xs04I6W^mfpDfs;I^Qw67|8*WLSo}RfOWqP_Xm^wW@YrU>G-MnT?{t79-zCbeKBGeKYh)a&I6#22*CH8`qN_*XYm&9YbcO zSEbBL9?qHr`iwTm6-;1~w*q`+lll8NS_KjR_QrrN03+8QE|E_#gvlBiikH3 zl6xe^&>i7Oq@DoOe|@r?p1CFkmF!4Op3ek_*-;|bGkyKxIOx|90Qv!TC#Rc}7pG^T z;!&%s0jZb9>W?B3+Wz&uayyc@!9HdTu>PVE^Ah5PT(6`*I+B(<>}+HodiT^(M(Ipt ze77Ubg!9lHk;va+FR3FSOw3keI*j$jnd#k0$$uHdSS!HGi}L{LwF&lBF_!i{bhvo`EaBj8i7Ah8!dj)5s4&C3?=J! zq)Ev9P@42ns_y4@O`md7SGwR--CmlFf*MGIN z?Yx_l9xao;FzL1++XcE4^Q0Fq(EVz@^w+G?t(DTR$Ln6Ml=h6j9Hie|q`PB|w0?r_ zS97F5w(h<;(#A`4Z_bhKGwYrxm$qAUZOL)(-YV4XsgNF; zt_y=tk?ytmQn*;R?i#7LBn2|OUqThwH$w-RZ=Xr@@64ofACyUkqcU-R)<&h=GK=`U zHjCuE?+W67_zIGLr=8^KDy3Q+EG7B3m7y(qD|M*uOY@2G{~rIVf&bOO|3@`I-;ANd zAwnMe_xx4Qr`6X~TC$iA{Ci6NU#|btG(b~2I_6>z5*Ks>sb9oDIESbIOT?pca`^xEe=8q0Ce*YPZi<$BAg_`86uo3!dek75#bsU-Y&x5itsTJ?i1lFBK$yvUx;uB zyIGW^Q$={b2q%efh6v}1uvUaiM7TzTw~H|A5Ak}MSyXhXF>B5uUz68o%*)QrHcy!3 zV=>E(mPy&>-0a-(9A{5Q&6CUp3H7W7Q{W{ID2_svkRl~V`>6^>pG)CCPoM^Iog$@5 zNaXJQ;gUz#MLa%2+AQ=NkB^kL zCB#QbivNqJPnY_HUyR4`jncc+2)|B|3{u)XiSW_VnEMmqCrOH*Ri~!l7fBTV8jqhM z^$Ncmk7r1S65^*yiTYuRbebeTVpOwW*D2%$w&m zzf|edh!R&q8jq5&`lqcIjYG-ONU2BDUc{MjJZg?RvIVZ4uN4DNQpu@wgK~xs)bnz| zN16X2$_`qCNssA_^!yPLl3<^i8aq7B@PYcLG7{B`p6Mk?r%PsyoJJC)y+9IxVm^o*eQ2suUbN{1MK zL8J;sfFbeky`F;*j~$l_yj_&5JPTMP@E-AGmaSnU#|Gd=o;B|8e++{ELGbDB;^b_t z7?&>rPo)2lptlA&JzK-X<-Z1@Pe;Y6UR9!A<9IfyNZ^vtk5b=-z!R1G2SLA$&DyAs z@Z)7hKhV#=q3{>wju-SpF;Pv#{~X{Xr^CYu5oJf&AoRBYr*_xf$>~sicHF`63@J_6 zp+Vrk22T993I2-we-?PRs28H_cwgXEf?k==refkte6)Hy8+f96Ed_2AJk`N%f={2& z4|^sCg2#YUy(CdDsF58{3;JFmkD|}_fhQ{WUxMBv=#`P>7kV9XEhfZeJ@e5Ejf13-CnzR}1>h z8vXnpIQjX|Lq?Y0z}ZNT3woj#AOP{PZsmO11)qx*`JWefx2D~{1fHl~C&M+6-ZuTt$O_Ej#Y*QeJY55kMEo}ZPt=Zk2BCj-5d2~=A^WNPgOLj){#t-jf3FhyM|O6U z04F&&i+U;gUkE&roGpUBM^mp~F#Z`*ou<9EGCt@RVjjz$-J<0FLHJKVp^3`10c84I z&*fJ9(tHKi$loytpI-}ltzX&!ob0wo$luP3k^aK?z#j_vm3Dk>5dLNum;v)-?fiB! zaAX;9R05}Z^=af^ItcyEgW&f9XYy|~vNFVUQ+kZikCfUc@uJx?cw9a+2%nb(pG={L ze4b5u2RO-T7XDmJf29+Ge{UWqyid@lox<(SDC`Z*&5pAe9=mT<>~J;klca(7`}DyB zDpxzsO4TjiRdBx3oH4zBUP4*gXwyue&CDa$bI3Vj^d4eN(;D)zacx=5#k!T=m{oTXjjf3x7&V%DuTBSAC1^ zit;=s{v&QNJImb-?rN{4)oUxyCn&eU-P&qn$u0(!SSDk$Z$0+Qw|GgM>wRt~iZ5|m zEY3pO*6eI*u5mN=pcL{s>!Ds3^eDLIOpKGqbps4tYcP=h5Td-=b6qx3*Iip{KOs3=!a5jJu=n`@md zuBOFqXKkYwYFZwrr|cXwHEJ|T^ekqwWSN!%S53`a7Z8;anNROm|$ab6JAbmp%xPg*-kkm9dmc-SMvPHL$GX;5@eID5QKzmHA0=c=R zemT63tD&6jwO3RilrSJuv4vOt$2*_`dT9XfIKYC+8XMzkk)2~<_0JWpgkAomKa089 z<8G>OEt=lkMsi8a*)qxja#?cGo<();>g%Tayx!&}UJod~y3OTmakCy}wH8%Y7EZT0 zE!h(jmiIk20goAV!Oj{tD$@v;?}&rR8#>{U-EkE}X%*$n5YX%S&i}+#nMXB_nx#_h z`LpS@fys&ssfqcJ*^`CJEIF<9)I;ZZYDmM5awoUq0g7Us9)1}1MYPR-Gmce>xLhn4F=YvWs8Vv^x&8`|I z)BvrC(W0U}>K=(M8d3aMf{|geYGg>{6tDR44WA1mswqj-Uk3CErGNf}Qu11Ucrlh7 z4C?IFFgB*s;PMk(!sHe=doisffhS1Vu9L~X#m1bdV~1Oe_Iph`=a99kvLqU-HCZf! z7c+NYgQMyddHfQ-x+kiW&@p%Tgqo~bI#+cFIYJqpYqMA(sor}#v->KYu`jYZeZhB26JJg&g$!&)pgf7=~c^EW6+ejVs5l8SfeY0PJ;R2 z_gfvN@0ywrPa7ZQp`_?k;s4~_T0TY?+ z@zYlta$~F54<0p4RemUty*$iIZmm*wbg@3-~iDy`Pmo)-S9V%`Rv6uurH(N0`fEE zUd&v}uJ|ebg@&)VX*hee`iIZX*?N0{-l@EV&pOACUHl;nX!MbO2c5XPX&z2Dssq+awCd1`7e7C3S{gqW zkeqXxmSXmU8{Sr5BiT$*5mqqhwj4E$A8y2AL=nw2sT+Bg#Z1h?9Jnpo7Raydi+OA{ z4|W!t$x|uiT7e0){oB_s$fTK&no)u^vy|PstkLUQgwWf(uhP4-7dQE`*=oWB zyi(6%b*|PrDZ6G_6LRv<+rm>6(_myG;zU}DyTL^n#FeMPD`hjOvT>QcxEWC|)_tUG zTEhfUGc$o~cb!uRj8 z29stlmClo;Y)pV8toJoiR~0M3|Gj{o6XVfw^!dKBzfB2E8urR_cLmPI#TVGSsXXUU z_Nyx49+7};80^4f;kbj=!|}*4TE4QMRSC^_9!Ce2ORSXq%JVBLFygJ0uk5Q+!V}7Z zIB4h)kCS)=e`TDsH&w~6?7ve&_RcYA6!{f8C7gpa+Uu&sm3?|j*o$;JNPapM`3a+= z2B%UtiYxp1lu+4UtCX+gSL)v+@=vGCIFx;VN~rAbrTmmfo4*Yh=|p)BqwHr^LS>&a zNZ3KLs*hGg)cKWtgi6TXNmpf1nnMY1)Z|z88!Dkfr?61uSK{sS2wIZRh;)muyP@xQsjWZ3`! diff --git a/source/HOAUGens/sc/Classes/HOAConverter2.so b/source/HOAUGens/sc/Classes/HOAConverter2.so deleted file mode 100755 index de83b4e46e399409605f218eea6af9f946d647ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65504 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

    %u%xK3$a0I#-tej^&^JZh-FX(Vq@X(&KjMFMsDr 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 z zb^&K`;~?(AuPX-59mdTu@VkL;ih*wdz99zwD)3I=(efMszCH$?fcAF8z()dK9Rtq< z-Vy^Z0Nxw}uK->j178Nb3OGy>I;fv@z)OMS+IQ$6zEROf>+@MfAC2=GQZe{M<6i=I z#lVMxPzOFbRI9YF132Z0#(8ak?Hv_GKN~pp8I9Kfr@f-_HsD>r5rhu5_f7ztqj37< zL%=rye;w`6a+7SW@dKWVOM=7WV7XV3UyoOk^sztisu*|z#{}R*1qb<$d`1E-L;T6C;fe)j+>LCARq{rBWAtZDVUkAKrS#PiEq9Tv&-UvJZdwLer_xCicu={j0=*;*bNw(ai#A(OHUyWE^ zQX(aw&0Yn){iELAoe}gIihk;G%VfbR$1RrSsK`8&8;TB-4Y}u`Jmp?XJ^BYsPqMF} z9#>jmgVur5lS&6<4HzQK0ewcAL&!TDd|Ws6_C5|aly_x3l-^2v#NRd~DFq0`&X?_@ z|FnU=8}#P>N`Jo-0Kci1q4>1MFC3DTSa=*t3%hMWzK;Bf@MDvn!+r#Ll^^9L)emqC zh~-7(je~j~ia9hJb80mKw0}*!o|Lk302Gux&ns4mw{X6WPa2$jQ`)XL0a9^CB)Dai|Vn5D08@xRD>HDw-O8~#aNW|h7 zw#oFQmiPfT$L>s1WGgg{d|$wC6EV7e(63Bf+Ebm^WeLcj2_~XMYuV1D8-D-LHDs6*}$Oj`V4_>8hKA!QL zPPF(IXn#5J{x~G=IK}dZtF)d|M6uH>k6oqhKg|Ywt=;n7Z0*)FEqmr^ubpMN2UR*O zuP)GjJL;!#+vaGW{>XClO6{)Emiy*w+eTYnn6GU;xA61%+Rx9k{9=Lj(0P}D^uSol zTl2JU$61~z*1kF4(p9XrrCW{`YwI#BEpxTI$6H>Ur>)Jhd<51LEWa($uoT`qS38wb4l9{@=nozBLr*Da9zL!C|fV?OKpI-jMU zpFwWFxRi3fe<@{txPW|aETptA6tc#fXHw?B&!lX3U&gldTt=xLaj_L!=fFCLuO$1s zud+Z5KO8@3;0F!-pn)GW@Ph_^(7+EG_(20dXy6A8{GfsV4I1beFPXSh_`iW=zbwrA zgXTC3#H;;{ehdGQ@&A+txJAX|3f$Ap!$`ZM(sfbkUbo|6?5Q79`Nn=w zip7|-KxUhtMCyO?oi?DD*Qx+ zM^wl+8uB<%g+Edu-+0JlnhLK_VWkR}sBonUZ&l&%RrrVscc}1n6@H?^BPtvyHosB7 z3V)=+3sg8wg;%JsQiV%YxKf3;sxb9syO7)XH+{;K3+<_M7UHIeCVSSn%yDUBFK7~} z^c&JI7?+kgE_1ZR#ocFV7o_DFMf(j0V3gQp3=}4+0a|>hpPFFwxdEEdKO^x3&FIIG zxJ5JiLnJ;>pCW z{~;+3UQ>$G`r2zR7{+SXJ%aue&8hTb%sU$u?ux>nQn((4zXY7^-E=V`ICyP{$8)Gx z;7UKnyx5l__y??HSQ{OzdZBNm}Ov z5-*j3RtY>-y|)7={|=8N1Y2?NUI2kN%e1OS`&8k!4vC9v=7=7T1&3Wi5&zHX2fqM# zEO}-CXT3eYlWfGbQADroho1LYk>0N4AEj!)N8zPPexqGa^~2|Q_$m3+H%JBs{RH46 zw7%o*MBry?$y(P7c2Quxs`qlmr>ju{#yu~~1s_FZ3T{*MHbrl&H+S_zZvg@AYuO~3 zpgH0gCh%k}@vnA~wn1My|LcBPT|q|TnC(bXi@c| z=ZIqi@L2YZ!vdG`v_#n@1-M<6H3ylB-lgb`_VPYL>OoU_fV#v{rszAO^uJ2so5am8 zxK^*||ETb2dHDTc%GsspXDRx9z+<)RJ4K(S>NRGR(=m|RRatY84V?X#?_%d+oLA%n zKTARp|J{N<0uqTQ1U>Yr>NV{94)Ec9$+aXHlJBuxVc=& z(=l1%yw=ZSyrS=k;$H}y{$o@AgQPgFRP-%s{Ha!Wjl$FTY%LCPZw$hf3hzGqx2aRe3G@m^L8PL!RL^o*A%^B$5H4A z#bl{tjeq(r>e5d%Unm0P^FitFfIq*q{!viN`sWHd^eYC$|Ao=NUje*G|6kMPt#d`WtSg`&?I1e; zF!=vCObo%#_531z27&WM4R09pP80AVd8dF=d;a8)YqG}cy54U~_%-X3x;?pHUeoj+ zX!_hQztMCWn$C-w&V`0QHv0X2O=tUD6_mbCxJ*7>%;y_`le~|NcKEG^Klr(#BYlr> z`E@8*k-Rg&i`xIq73JSv0lx+!#Lw%7{V4-ZdUE{Unqo-*t?2USx;)fIrjCYxL(9eO z83A6z|3kp3zlKITzah&*PhM7ZrH>jeKUhKM^B`VC|78G4t~G7PcpQy2+_XR6(eT$J zRWI}ZCgAv&OYZ_m{J*35f1pdyp*m!@&-MD8_3gtIbiNG6p2zyxT=&)hFRIrET#lDW zRmgn)U`6>KuYmtb!eN(QQgozGAuiuuQT|VWle{l#d8=C9ziK)cn+l-S*ZL4};?p`) zaOq2m%TK&Obgo%zj}#o;D%0mAe6eqZy2|uDz&~T<_xle4C;BsOm$)6QUX;Yiyx+Hb zmJqMhn&P0|Y71c@jwTq4VuY56WFmUwa2muY;fG={4!ho1_(>SW!keF32oao(gCy|n z%4T)5xRB_NrX%4+k#{B#JczKteuOX^;m;?NGoUQp36xASMMdYJ+)pfI&iX)1=Mx>< z0)_x84Fm-!9a6ZT=pZ7eDw}u5#w+>$2xp5!_qS!=TWTJa0APQ}KlVTo)d$^14Rei0lcfV>! zLEjc)aC#~bM-_)tL}n#t;-rLfw+@elyQh)&cAIHUuim`ba@(SPW9Psng6-S2l(-*< z0s&?|LJY<3*A8#ouGg$_IB-ha+qVwtJ2g?Z%QjS{(@M%EA(CMf-V=zt8YDx3z|$~l z?Durh<72UIZ>XNtVNzF&x^j2R?um*R6Vu={K}^~Vy4Pv9KI&*LDdz^uiEuIz_C@4P z2Z88M63BW#BdlFU!*>qzFlI7ifEWcK(fvG&4fbRRKo-nb>B_*g70ST3Gz*HLmkdj#GVg(J#vK({%W zWTddmj%+I}flK}Kkjqa}O3)2^#{ z!(#2*q*h4PkDH=%NWqE~ngtM_?E0fdqu+9%IGw|aHq=fz9?=|eH1iRJ={8zIX=|>b zMAK-e~#0igk8(ei_7eGnuq zk3?*efHdIREg8dE*pk$hSxqP=sRC^!$x%VIy0vmcyMlQr@et*V=BJA!c1H;Kj$mMO zqcQEG^)4bw{lL%k5w${L8_2k2ZAHg{7inF_ERU(O%=C5F}X_Ug+AQaxk%(o#j zD$CEE%kKWIg(CgX|gMt6ZW6oB5XiGeYe;Q zT!GwXw3=SKWe7_R^6VT}qCm#-yTzufpw-AoFDBD;#)45z4U(ZEWzz8_l%j=&f#OtF zR&yu6Zh`1%jvTL2m2!li)ax)}{(P1*VyT{0F!7DO2vf{{PtHN2i_s1n7}53ti_NWc zg{{}>Sfs+jVM9aqvb$osY?VZ_m9;>UcVpt9RSzW18Xa2S#-mH^PI?Bw6?BA-6mZia zW;Q5IHjB30TlhXRQO&ZFrKbBm>HW0hax1w#{)R+8OY zl4)F85YSefTG1H5PVpW?veCsZbXv#=wqXVx%bSe^A9!@7iI;R`GN+bbxpfH0NYZ{e z_ueGePzHP1W$N@^RuwIAG`)v~3ijRcd_t;HtKlVxKG#UpXyr(QYj(EKBK)c|*}jE! zU98Xxw6(&!wZ&!)6STpkB>0iP8X*NQ(gZo5S$2FjNxUxdBvSd1uW*D=U=OBqTfWHn z5{?p*cSA28TDE^S1*XcANIhY7kj3op&h+OnzO`&z;mr7u@!4OM^LOO@5Av4Fs+~cca z{mb~AKQ{1Fztanaa-E1TCC20Y zV|cz?Kl=+_r;b5lKGj{mKc53K(PH`edu&zXuQ8&|xn2f;O4navfX*3z!+;a7lsKpF zpj@|np#MDgZ*@UGM6{fYTS>?0Vp)8q`G2e%0KZa((=8YBlP#r0!>g$NAt@Hp&+xr< IIhpnU2k=HIJ^%m! diff --git a/source/HOAUGens/sc/Classes/HOAConverter3.so b/source/HOAUGens/sc/Classes/HOAConverter3.so deleted file mode 100755 index 8b837657ded13a3d02a79868d8bffc25bfd44226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73696 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 ALI3~& diff --git a/source/HOAUGens/sc/Classes/HOAConverter4.so b/source/HOAUGens/sc/Classes/HOAConverter4.so deleted file mode 100755 index 15de3835f50658bc8faccbcb0acd0b3e15cae2e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81888 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

    }{BZmdX^N1_i;zvLX`hHtEK2tFM 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 In9Sw>FGUWWUH||9 diff --git a/source/HOAUGens/sc/Classes/HOAConverter5.so b/source/HOAUGens/sc/Classes/HOAConverter5.so deleted file mode 100755 index 81e8280f89a92ffbe625395f96f7f20a93ec443f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90080 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 J?4tMozW}taXJ7yT diff --git a/source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.so b/source/HOAUGens/sc/Classes/HOADecBinauralLebedev501.so deleted file mode 100755 index e47613461252072bedc82b72db353632d0baf989..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151752 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

    QSq znGEPn=)&-LQG|yrjJ3e9wqQx<)wEwi_cYu7Io^-O4@ngOOLML z>wV;(AhcH+3*zA!c z4zV)(3uxs7k8&bnsL92$=tz2m0zc|J#Y6Zm+=4IW&$ywqeFWeF`(C;Y+(zq*7#xWJ zHX_yr{=npUji<0e+IDCyIbYy$*Tzs16q#JamA6Pu`%b*N3z(1`{0HvLZ6~k@cdvdc z3el|j1U)1Wtdm`g*)X~&(ypfC=5xrj_hRi%lCTt~1I;ep)q}Am=WCRAcrUF>VtN7+ zT8Ztr6E_zBy?O&P!4`ct3gA64-Qlr}s|PD!RBxgRyZ|25l@fuxO*zI$NoJHV4)McC zyiGaYh~~N&kBu2su5IIxbC+qPiw(*|hz^-?LlN1C)1XXgbRT$+iu2cE6UXroRbSec zfj?A?rXYY$Ht-;mXC0%)7EpQ2eryc1Xz~yQH8*?GsDfMcRw`#qkgYVJ7#77ES0b;J zB`0XnObxOH{3N|4;gEX-w!L|V!7I0*AqT!d8CXbx4L0ldpm@!iZkpG!waQztl^VJv z&YF(b025I;io?YNftPuIL&jo~T?Iu!0+OoO?}0N8!B|RW zBjLSM%w;pXiL<^*AAuMY_$VKa&;bATG3MF8wjs&((nC8B+Zwv2- z{F6V-mZZm%QPk1epxaviLG=p-HZd;AH_X&waA#uqhVLlWp=P5_vVeEKvOmcr`?GegCBc2knII2Y z4Q%p`OxQRAHw=OI+b@%rlK;T6ZsAK?=unv&(N=npJ@AIm(Fz*Mv-i^(fAALUi9nK7f}}}`-bV6&*Pphr2~)Z)v3>+ zPBW?pm%V%NzCqJI9}^+D<2g-73ElW7ADoC+VtVJoi;Zp1)|9}q=&EQ z#y`1?1X=Ua0D2g4C?d~Eyn&C%^F8!HPSvHBr<+9-ko!rCqL@amm>m-!&(|*wAkVAx za#Z;3Q@D@F^F8(BQp?jS+VeeF)!*U$9sCV zSSgPQDDBGvOp!C2?iCmPkrOAjP!5A($e4{6-*MUK7SN?3uJ!C zHPJ&U-kqw+W!iJ`bTkO41=8U= zU<%G>H7V%JWiM7mP%_PEfa1M5w+X!kpx%gTU`5E^_iEa2MfLH{SJTl!n)Xkw%Y+~Q zjsz9ORcO{cIv7c85;dKQ^N~Gi?53INx>VwcHBYn=DwC!5E3~Z}kM`|)t*T%h#x_>) z*|;&8#6^{o&{vu0Je>|6L#3{^_gF`SB}!4E~3Gp7$e~mju6|!c{Ng5THDsCfjqEvA= zOAxthq8=@L$RJqF@8FK{^WN9wao9 z#x!z>Yvh~2Mz*wy$p%#s+ePrIpA5pP-@c2KB3fu4b#&obnUf_&HEB)zTR~`MCQ^bg z;Z70Is#%i|Hq`C?1Y9yKM!CIP#GL6*)K@d>T|?@mc2ht*BOW5RCd)xVyx|n!fskg+0LXEBC`6-ovG_B1 zW|R|xn)VVBhx&Fi-S{Vu8wbNxlG<3~!5ozp>!n<**h{F`D5seuil&mn?I+w=MZ4(~ z#dopdcd_CR@wUr~7j3sI1I06aiMDIdthtSbOIG$5RQaf~yU2x6?G{KME_VJxFVh=)0)uu`bcG zJ${dgIr86;6f+EI+J8x7&2Nwr^x}@oSVuc$Ok_5uod4kILQxJEa5=mcJ>VzgN}|2* zW4im8>+VpXi!Ht?qqKSix(j8*s0T`G1sZ<@nu|F}z)phAq}hpY)UWb%M<_qAftA3Q0Z0fU3!YBX zW;WDsR~+ZAs_xa&>7)mV4Mo{ zEyTveBHSM)37J}m2~h=aK1NleMh{L_VZXu%s~%B3E0c&K+;~Sw1K4tAW#UlnUKJ|e z1o26tF9N5wh3nSEglK0Y8gc4Y3H2w&ijQ{0jc9|v__s=~S|Qh8A`G>RL4h7S70~b~ z!sVJLmgiDvGoy=rn5w55+1sj{}XJ-ntb&Bh~TP!l8_2_?nY!3OlyJ~sDf?0 z<1WFb=E29l34^SOiXqYvJQbndD0D<@48ej(LIo0NMjC9Sr;%{6WE3{H2;K*si6WV9 z!`!DwX+csIpbb7q)BP~B)~K{sm=TovnRxlyU{X|;Zea~x?M0AHskSP?5UeE`Xs5W? z8Ple$cs4vq0whnoN{9YyfTgDEo}$c$0~awT;7rJtZOW?o7{)}rU}$5jSf2Y1Y!U^M zZ$@ZO{(}lE=(mSS)8Pui?DR)HZh;41ncsRINfsU=v>QL{9tS<)_CwiTDvuK&odX-`3UfwRCMcnY*?GS+msY$)UC6VX-W z^?aY9LO;y!mCDfJ9qfYyHOsz;Y+$)DF3VfgEc>V_DJ)N7FbdKiwPS!iUkxvb%Wab2 z#-3uek>WAACT{cx927y>5hjS^>ui7(WL<>G2$lEu7?Oi8Q$L6>_ZuFjQcs5Xry@-L z5094%x;BB26QNb)`=tn-g8n=aHnJ7X33V5t?*7St_yq#`YBx~vIPrx?D|S>XXEarZ z{?Ile{>)CvAa8pX?)8?YBatZRPhcV`#k)Va;!PrttQDKRJNR<(X(-9!{Vezf8-OOC zyb$x~y<4$=7axJ(2^Ngm%OR$EP5a%T3cQBo;BB~LuW)t-{zfd~E+330@_UK=Jlq|4 zg;ZRJJKlwRcLrLJHP{J35B!bNE}}{y+|8JO99;1Um%fJPV89nJe19-&AIE=ApV~ad zbh$J5h{$|ggfkHaHzE=9vEZd|a1MWFalE7288|_5<*B9FPsmy|vX77+mgj5AvxnlV zr~p=9AdeDqA&^dbVOvof+0Pn#e#}pe%WXv|399c^{u|=j7=F=lUlBeM9U&>_Q{WrT znb_Mz;6i+;shy)es=g-pWy5Gzt#?pcAOT&1Ns5hA-{4(BM{Ep#`)Bmg=cT*o z)TYIk02%cb5IXo~$&nGYjo;OW%B>1$2)txMqJM`$oqoq;9JzZ$3GGccTZw8C0}zmPTn&?GILCUPK(^F_WmFedy(KDi&h77aA8(#03~ zIQ9dX0W%hB!5)Ia7jdQv(JPANj~W>`8-z1m{0OaRD49j1U6`HU5aNQ&@LCB z&Pyn$>27Cj2pe__&xEZKY{v4e?{4tTPoEPJWN-rPvYr$VRFNO}LjPU=#=fy<2SDXhU4*9|i@FYzF z*~j*$VYJ+fePkgkdPkhZHTvR9b$Cf&sx8jx#rL&v0uXEi0diRU^|}zgp~q~|KMPaY z34h^u$cj~8nn8xF=$P1XUM%+k?MqF2xP<6RW?0j2KV|ephmS!#8n$)K6Ocf1!ReWHqT}+6{>EH-nIO zui8;daL?Herw=;7?g+jQA{DLLNke563lA0*Kg1I-s9pyZ@wx<=NS28ap2NrCp64TS zpDCS&KfX~(InNUxy=|v*{G%2iFdhS8F3xWAB?i4PdQB(N|H#v?WN*O_MF^H+S%K2q zczP}Zyl9G~pDWUJJbg%P`eP`7^5^sPmEf<=PxcSq!aT2l1RPGMTSCrf5vb{cmyn>! zd;)YwIozq^o@pcQi0=q-CIX$YsZ)Imi{S@52-%T$CLGm}cZp8Ybc}`7$y8$Q zwGbc0(cFuTYZxNK=VrbRQz>&SD@m z5mtz>R)j7Qwos_yXX>==(9P%bLJX&)THxO_y@dQ_c)hzO4F(22yqw`UUGYq|(9}u{ z=!6O!c)=>(I~p2nAAv+The%-6euX7uQUbP^J8H(QKMAGvJa%ffXM)UfB|1& zIsa!3cqf%13}`}KwWGG8MX2p}j<6rK6jb@y;K+#mqTS0gjd2Qn+!iw~qV?Pp*L$cC6cnt0=FKFw%x&c`VSp+B;m?i924J$AkrPA>q1LgZg4vcCrsI@16sN~Ukn zp9f-rq|Zh&zaJ!5G5b~`a}hGzMCRYI%qx+(NM!c2%%MO>B=d*CS73Gatbo%$OgLMG zzWTTF!WI%8Jw~vDLBhLdrZO0n3QQ7=hRZlN6J5f-pj&XmR3Vm|MsTAf9SRXb9sdIr zg0D{khv=^3T{q(fd+ZC26x^`<6wB=ymW{m|P;+}gaMK1hs=48zY+rB-TSSGU_2g4hR3;m!LMiuxNS#v)JA0- zGmZCAf70RTZmi7Na7HTL<#-2^j?5PSqLfbAhhtCiru22jdASMg)GGUMbO7^}|N1>? zcDbtct|NrzCIzn*6qLZ^qi94VDC8wkKaN!;AqI|bSY41w;WpT^@ zdB5_9MaoZ5%15oSRbCwR6x_d2J)T7MAMhKvHcoqi`tg<(NA$G6f%a|j-GtMSE~XQU zX^Ms|_oR^{V2|(L#^8&it8g+&8s<)jUM=Iq58w6aIK;!^Yu3?ckeaDqqO0(*{b9yzQyM$KY-wzU`;eYwD3XjC)lE#rZsAaC|QO1|M2}fE(~_y>UJ#eaG0XB9;BN6x4?r9}a&iPjkNmvjv7j zIXJqJUXsc_XS&6AgAV;3YR_uoWd}3_E7>s74&K(71;1Q2-J2QXXI=rqIAs~_MJuB zaeQ&nOFcLB>^Mhx3+wOkbWLB+(0lJ<-%U^thFI2TS5Y!L&1?(4Gd19)hw}XxIyD^~ zprA*^VZL9`_hT0C$ztD198M8(=c1!W>v_kV^FBV%XJ=EqRO}6y$LzzYL8$l2m3wi6 zYPPNzjst}7IqS2$zXt;<8Rv-Ld?$=4e+3QB1>(Fu6z2xuyJNsI4yPc8`aP-&5$fq9 zvXu;{P98>C|6kAnol=ZLD$HKg_icR5*bLBu?G5Npa852xkkne(ml8u6F;{hXdZ_96 zJ?U!I4zh^K32HjgGgxru|72Ddzp@9IruJkYs|A}tTy)q7n>FGbiwfG5MM)K;Tq|uR zq8pdR+bbvRbC19{$i5p|F&L{w50NZw|AFz)cjJ3GxH+P*TpLxd<6X+F>3D!(P_*ny zN`vW&u(!6Fc5N)+CjxYWR&cK-?l!zr{5f&I2HepDOXI5{e*Mf*z{35E!oZC*WM*2_z#E7+b{t&d6^< zC$WKT4Z^`CBsy)t^3x(Dy^*Axv`JYR7~LBv0m_WL3%3i%YVihGze}gh3_gV!QV~+v zi())4YaSh`$F_3RVt?>F$Smd;P{KLb{1>pG%IteZY>r9CK{K>tC!H~-1v>0J;gX0i zhM6Xyp}-rYDQFnV;3UDzP<84Lzy~~N%h^Z2AsQUs#tck*!CG0ZNSnmtcELkOs&)l) zAUUcWX=TADAg-d~jmS#c2ySO&+Yg{|Za;7_{O@pZzJM|U*Y?-aRZNN%aK*5eFi9B= zG@kblCu%gA&xjFDIYTw}13K^&8)`5PY=<1`%j(3x^6b!A9QYU9-46aQpX>7IUo+Pg z*0FzKT4!-qHrbn&O3E=h;!|tMfPa8gg(?4Xd3x0tT{Kr+roqVmwNrMgiE@Amj#!{u zI_QK#8xagFltbdhA=uhKsoz?j&nfC@rBG{ zEY#!?sbU!^Qdu08;H_KK2N>T*%=jH&s$sm?k#{)Ou(Jt^d20Te)8_|p1@*uoVkx^M+m3NLllI+~nS_Bx$x zZ>n!>a8@PsVcg7`8U)gK3IEKyTgq>0Y;LZxS39KYJgLa; zY>*~MxyzjRSFvj)w7$i5Rzp^w`Jvc6`QN&p8N+_SS4bS5yR%#as|EK>IaQ07n(?8?Q|KV;a^6zwW8T$QG z+Y!;&ow5JFnjJ+E@1MyI6PRu@-S_dq?ThxkfwKW{xd!L*w7x0#+)dY?an1-`dXx0P zKlc__TBnS>@3Wg$-22Rw%hsIr_RC)%p7MaDJh1H1|4eDy^IW~bwgvR9Q|O<(k?^nF z;2)=<-!u4!XH4{u&%CR7ZVG-+C!Cjfm4x{sG2igZQ0RQzzxS(9Xe_>|ICxhmbSE~< zpFp@7;fh~}LUovp)nUNhg3yBJwDVJtj#ayMgirn%IKmeZ(zgkl9}0zDM>y=gP^bWW z&qufb;aG%jgp&}iLuf&GFTw=~pF~)P@O6YM5FSLh4q*}|^&1eLk8m@>EQC)Yv><#D zVKu_{5UxOY5aFE&hrJKE5uT5bzD*m8@I8c+5Yi`^7KFo+P!2*mvvo7VNeJIVScY)e z2dFQ?NeJ5!S`cnPxB%f63O|CJ2fwY^Ff;i!e z@CEp71y0$Oi*Pr7U2*Vrz&FLg?*+aw4*n$Y^>Ogmfzz2jvGN=QzBUe?g!;C|!OsWY z5(m!$?uvt3fY-*stASUH{jum@XdlgR-ZcreJuVSa2b4J z@vnfJ;^4zTm<@bPxKwUmJ#dmI7M}#1>N`4yz6?0&GZwD{PWFn$+ktlhM-aZKz8e5+ ziowYz>EA5d2>dI`kejM)8eN)O!+G>;S(`^s{YLK_vPIfoNS~ZmMo|5;Cv_hap{$RrL%x*GQ0QaGOLE>ya{3dCQg!P{&ec@!w$qAI zD-t&k8p7%edBgSP@>V137Vzo1GZgv&A@RA5_}rRkCjI4w^_NTfn@0M(HF-!p1r`o1 zP0cPCK(AEJ`Dj4t_k==S)R5wpgUqW>W968soQ0>wEhl&A?9}Y31C&GhZwG%D*5w|- zJ?Ve-AQ-7Fu^?49=(ZuLX+U5GGcy06OL8Gf&-5A(Yiy%nUo67`Akv_`yfk=&Co-fqG;>?8pCSvN>dOG2zx2n;a=o3;p?3u^0$Z`;>&Fv)CDW_ zS9ku4X!3x(c?-z5!&F!5xG_(V}^ zXTqSD;<`lP&@%9HP@#q_oINN&~GLrq_3l1Zbj zY0v4DddslngL9;R471|?2~F~QbEE?rqTGK*@~3m8-<)Z}{R3wu|89=-?pf;-C~|J{ zpAb3sok57ad_nTvGo^JGChwgs^<9+QHb?sK7q=vQFjKm3baK~h>Elb1yJksk>B)O% zNhi~bSIw4s#w7oBwsdsN)gawGHo2`#dh+sQUzzlejO1UINjt_RuP>8cHzaQ?lRh;j z-(r<^j!#}SM+#0z{w?SyCjY%ux-UEV;}R*Do%~d})OBU@Z6(rwu1tQZT-q=x*$2wW z$kFN^;;D=^<0{-Q`kGZt{cW(t*5WZ@IKLKM|#Wkx!!UDM*I2>kCPS zU?I^zI+gO?Ttt$*P(&sES|&+8l8N(!W|H%mnaX`?8p(g_bdu-w=_K>pGoktiXA#Rk z&rU{l|9h^!@tjYW2>*My#^<6Q|JCKyXprMAY`?Ne%;#*?k?4L&k ziIV=JNFToNVJK!7c22UZ z^>Q96cnS@YxD+{CFlNvt0!bVh zVHT!Yf2LRfMxeSR=y4B3v!PyF_@u2p<*UE)l*d!p}u`OoZtVN9(C5 zKmSTy`m9P%gWIE8N{66I zNW@~J(q2_C+FoL~okrtHIJ`}b@cTrxcBNgYQxkE5snVXJ@xhYPE~D`jNol{)`03$( zD;ggn^$0(T#?hO^8NU;yVUjj3K3r1z!Dv3Il1}uG(YQv+`mGw__lc5L%KlwEe1x=O zQ#||(N$GFZsfp5=lG4vc<0GX#qW_J?M@c<#@w23O?J!X~TQWVQQ?p?AiPRf*#lz2$ zV*QjdBueK>*)jghab@(N7{AEScA{@e)s3@SS2x(E10(2up1C$P0G z+&&}ljXsWxZde+Ef&2{6x6;cOTx^X6;km$xk8Ul4CAKDo+g#umN~u!sZ#Z7T1L;1- zM?_Qs9ce^-T9A|(^Jj*~?F%^d)r1w5V}oC^QjI2*Rsf!k#R z(9`)^B#&0eGg_2RYkGutt>l0r{|5u`$%LO0eZ|sf`q{wGkoxzx3j}=^H9%Zrcp$B1 z^dh1P{vhZjL9fg&UlX`N$a%5IlL7)JkHD3+Ujy)XdaDOc_AT7N8K9c%@-Tc99zAs| zuH~?_QsFP;QS|eGz)eCAh_Y+Dz_o&2nU8)f@K`;c03J`yS(xbR1W$Ev18|bxB;7g}7&l?5aa}%eVFX&$c9 zMW@^rF?uBy3F#jkAo*P}dfo6i$4)WBhqMaFWv?8r!GcL`ez2>@qbv*TVwS60q_fPVtnrdIwqmg9={OueKGbr7lxp6d%V0t?41E_ zvjy%F^h*1!0#5w1H*@~2Je#zP;i*!q(C3)~zg_U@6naqF`&NN>$H)@|9uF=5b@o@vE`fe0{uJmIY1l|+l|BnHW*NzSaYYb17%tHT)p5GVrTQ_t1^@9Fiz)2pL zC|9xXr5es(7W|d;KZj_=z+bvKpCF^kEj3Pa7d>A7(EyTuIuCivUdr% zeF1npJ|6;)XO~d`pa1e9ZuSHVFD&;U}V7l>Pyn>{1b< zx4n!H`p>Dnz(+*6XFigaR z{J&xRM@d^ny;=o-4H`K0w|$~sioc!5a6zOBnt*FDkByz*E**gW9^j;h&KNl#7x>1Q z{^X+p_?#+0T4MafC2-}r74FTh*BSr*&-?EHC;h~Z*HTrJyV>ojsmZ94Y_@6nB{qw> zw9ICcupiE`$k~i7kT!R{t*WlE!O;wg>PFk5y2eU-ovqs4*wk#Zds-xHL3Y()vt)I~ z#0l9G;uG0woDEK!y{XB*)aGcwu0*MZc39e~J@xfVkwq1=fzlmCYMW=ttZ_>SjN=#C z8a(y+jbPDO2Y~Rq8ex zv6m6GYqC4t&E~4YQak<>7M8lRTy|%Zd3xyt8~#V!Xt0$!>Ks*WW3$^_noUqvouj$g z%#!U4Dl|^SW<@9VJ2$yWoEtn28;UQq8I87F+Lmc+XsmWH_MjB<*_=?X9eNa8GslNh z*tW;$^pfc)yQIvP;cRZQXJn7hU^K3#Mps65wqz@^%*@NR*lgH9YBSsVZHlGMjnMN{ z+O=ydoKXN1b9?jqf;kyYj+zXcZBa{$4SOP+8?i~&>0WAEYye%+j9IoqS!9+AO2Vbh zoI16%u*_DLn`bE`hGoV1VdmA%jW%o+t*(Pv3g*tpEjH)FKBewVgU#lyZE9R%!H&i za@cC>-O${!DAi?T!e-E3zb%}`9D8;3YX;s z7Q3yXx1N7ym*3dM0t9L)~*EOb<6lD)=W<=~o%)7p&Vl}!0{ z4to=$Lw^|VU~Sb7XsR9^x-|->zRrgJ))A#WRHdwx_9P=T3ulUJ?+K*Nu%9YAoi~Fv zHHSNZYE=&~QP{(n+3cjTXqF2e>nOCA+PGWy_YP|DKgv5W7!<=!t~%0NeLbul$3@I# z#ZZkhfTB~R;S>HrT_JS9HfP6mbuw(UU&QSNjT6Imq3!YZ26r>MBJ7h#kJ_(6g_SeD z67E{_Jx7y56Sq#MKO+JU|6PDHqvf?Tth>Lf$uR2F}7vdqMSu(YW+-? zjk!p(gIXF{ux$1WScHand!=)+5o0UnDqw1JFLgOE9@jJ$erIbkLg_O+^@TJoiRo5i z8oFwrD8R5y9u&Kg-Z((}j_c_C`i=P3&Rpbhv(GC^$g640=~pc4QVE~fZ{#;-S9+Xv z)zK~9O6}0qxFp(J>Kg6UjC((=3;t!L;ZB_B!V#snjWgyy(-K1n+{~rrzC9M^}b380PgkBr246;mPOw|W{n$7+u& z+TGP2JP|`#oxKTz#`G#Sue4R77h$s;h>BTjPIzvPzL#eCnA)P}#G??+1}g^`080(F zlG5m&jWw`1&6K>f)K0?}^HMfG#c9r>sl{}BG^uWOerMnJ)2GTbt-_~dRgKO4blI;f zq|q$mVeuM&e+MuQ)Ekp6s;;+H)n0F-kJ}=p)1yM!>~L4a97~y9l+BK#L1ut{J=}M< zhca_)4XG?MpV45V8J-sX?|kme#&iS^kX>NcoUNULp9CJLRHa5VxF?`?O$O@=|r1^k07h+`?c`cc4D;I7T15DhVnxf4(PFg zf1ycTNSuz_(ZI%5xJ#t3siEE`( z-IyzsO#czjKdg6;n$EKiNPoaAKVA>crcV4R2a2%aGu5ivn3);IgZ|Z}#u{$hoJs%L zk1_re1AC^b#KUPr{PJe^YtMF<)24g_jDmmo$W2~=?|^BZHqgU?gPx`_o9@5T5~GiP zlf3AuZ#*qyeTs`T1CJF^CnAe45x&TXHRp zxTBGEvgWWMRI4S_2bT6zBz27OtyyONA73sZ|0lnRm5L3WQbzOAdbhn2p}UEPwaOj7 zE_P%rYVc&R8S~}%%9zD!?aj4PM)lGLJ6D}s%3xAu z;5K7XBcg7sG)Wn>EDEAV<`Wr?TCosXTMZ^k3`JF;%VwX>+aNKXA{jHjM#_08_t#Y+ zBQYZpz?X?@uXk2~Nu!%e=gCqArZ*Cn5bLR3i^b!g5YYQ;ywb*=8h$DJ<&;n_a3xUQ zqbczW+~8jyX;ktn`|6Z%he*IS5O(3Ubks%b>v&}uE??OvtAqx;52TCAC00s)<$aY2 z81YuhSN7>Cp|Z~wB<#YrpQuYljP|@L`IY^AN=V;i(xu3+&?(_8q|qK)C9drIQ^FpW z`+qfVhAI&SQ5ar9uo$%%WaCCb1*3=$U^a@uB!a~#7Skr9PoN+w7ULoaMolJ*FCZA? zM*lN2-{tsY*aN%g&YAPgoVj=Bmif2VA8Vlg79Q;Dg0)2qeIOp)F7v~){=>#^1uR2H zh(|XZd@#BfPTnC*reo1}VqSkE3YGfW=BEI}*Hvyb?;Ny5F^Syp?wL;`E1ohKC zHy&LWzS|?SdLM6WJbFmHWC(xE*MHG?oqGs#e`9<7H~+y?8D{XU J^V@7b|1U^5Q?UR5 diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.so b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.so deleted file mode 100755 index 99923a9af2dce962606a0dd3e81bce031c9f5268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65696 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 D5BP$p diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.so b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.so deleted file mode 100755 index c82816e39470e0eab4709d65f4a264b9964d1379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61656 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 diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.so b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.so deleted file mode 100755 index 34717de42dc9fbdbd7bc8c7ec62b91fb5bb86fee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69960 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

    E-6s(jR2$c`xe^ZF^dJxw*FV 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 QMFX20GaWdEcUrceD@&Et; diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev263.so b/source/HOAUGens/sc/Classes/HOADecLebedev263.so deleted file mode 100755 index efc27ddf61f6fd5cafb9453dcfc6f4e7d5953b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86104 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 diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev501.so b/source/HOAUGens/sc/Classes/HOADecLebedev501.so deleted file mode 100755 index 849608e6126f1ef99482021282f514b0de15cdc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81952 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 D$8m_x diff --git a/source/HOAUGens/sc/Classes/HOADecLebedev505.so b/source/HOAUGens/sc/Classes/HOADecLebedev505.so deleted file mode 100755 index 54a7668cb964d3a6b30e2f129a445f60a70b7f64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135264 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 BMH2u3 diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike4.so b/source/HOAUGens/sc/Classes/HOAEncEigenMike4.so deleted file mode 100755 index 4f7e5924440b1afad58c4d62955cb21ff6d501fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86048 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev061.so b/source/HOAUGens/sc/Classes/HOAEncLebedev061.so deleted file mode 100755 index 711bd0fb90e6b08674c178f5564d3d0a526c85d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57376 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 YRx%V>^;%?j@5SqL@%~meX~@bWZzeK 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev261.so b/source/HOAUGens/sc/Classes/HOAEncLebedev261.so deleted file mode 100755 index b2ecdb91a4ba084326fe6802807df11c0c39ebc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65568 zcmeFa3w%>mwm*LQ2vi078ikOrZTBVZG7EUn5NDCGO+tQ}A+DB|tsRB}L z1C1e0uj2zpyu*w#GKzN?2Nk`DMPBt?7$5a9THlF)6j7`X$p5?c-Y4fIO`XTRzyI&| z`~2>KbnU(N+H0-7*4mG=&udkIeP(=IoTMBH(iIZr`qMeaDhkR5L;}DnWl6*F_dIDF zqt&TJgHq4$=O_hAl93@u#xVT4USwH7BTFc-g$i-37f`7e4;-ONUZGNg#t7IinxeoY zRw_w}fb{DY<=Y^|EMt?B%`Dy3pKK9ai##7Q=Bq9&LH2laer{Oo; zYI3C;TP5q5nekcs(oXwzQoMBgD5te6ZA8Y*l8fR~T2H@iRGCy(XSk?qQ){;F#+*HO z-X@LBHl(NObi<{+#EXsz_+5nGMEownZxVi&;%COsf*&0j_)Wzx8^6o(%fZizAL*2j z9~}kw$t)#FHo)2V+3}l$-_`id#jhB@`S_LKcP)N&EW&Rwe%Ikwj^9rm6{4_Gz@>mS z_+2mZHvrb+=fdws{M`86gx@m!TJXCCzvcL?z^@g*)%ekIWXYSI!E;=}d(PT>TEfcy z_6yJ3S^eQNX%DVG?c1w=_uZJWH@NPJtISE;KV{qk-7L@UpCvzZ`m>H3GZr@=x;wP< zp3pBZd2sw02QyDx`o!Iv{*+(Z@x>3n?q0nuDOB0>=I>wgF28wi)x%>lUDM6R`<72{ zFWuWvJnw@?YG0ps-_kGsdNjFkY5X5kmS52ww^+)%E^h6gKR!8T>}Of0KKtembK_F? zzWE<>UvK~TY5%e0z2|&w9 z?3Gq$=Nf5e@t=>JKl{9lyn;6lAI->4T|4JMv9x2$&*oou-_jX1>&Ab4_Reb0CBIqG z`ubn?KJ)RND^@4B+3T-=>rnYOW5%9)+x{mDFF3r-^i0XLnwySIeQMv9i$C^`|LVn2 zs~0YLeD=S6^;P;eAAc2`tGl-2i??qq8ONk#x=L(o${ya2!G zkU!@YfGv=Pxj+#j>X~1pNy`_&1gDK_!|LaG*Kt z_yhi40A>and~t~BRk{rm8{x}nK*mAy4IS^IpPnzJNWCu_Ssw0VM>Y5peJc&xI21l7 zV1J@_ykunfRQ6Yro@RQEk~)PxtKxXU!umK=hQ zV&{HTBs+AyY-Dun*M$M2z`u8_* zfr|c@p?{G+R-sR;(C4btgxxlCL=N<$<8q;=F-p&)!aki*dftF_6UjA@0yyS!Al(l8 z6W;M}9B~x!M8`5=w*p}|G>0AMz<@;G^C-`+5%@C!$4a9m`Eh{|V3E+%92K|!A@H37 zKVHzU6>@Dtu412KLjN*hXGI@cACo@O@%f?P-xbBbp7BqS0#W_t0pZ^sVYhRHJ}(RY z8--laJtPCl$Htgv|IEfo*oPK(I28SFMg{V3YgE58p{tPoTOZ@}>qW!f6@Ia9izMO-6zp&cxmF<;Wb9Zd+GS|r`OD7Yuw2A#nb2Rc+b|LTeGhZGbPl9d!jA({ zeoPbm`-Q(0xg$i}mWjBf^)4M(3ws)bzr<;dw2Y0b$x`2TPFKc(R4C$PYm}Zp7y4VH z?EiCNpMF|I<52ALBicpruwK|XjTcM1V1I*jmXvkCC@>ssfSzo;67;R2^jYDTX!}fn z0mnj`K?E$V-|09c>=|u`1Bg5FZ;#MZv45+GljwP*6AdB$U3r}Er4u>4RoJIX*a70$ z@j7eQ*-}YVyY4_Kiz`8|#BGbv$1KKA1wUN)w=c@S_Xs$5_?08Y&TLu0d_=%2h z1^>RN_T~sbI)pxo9sW(kTavIpn!}D4@t5>BM(O{outR?oeuv=S8pZ!ip-+F*cr|eZ z=U=vk%bO+iw+cJ36EYMjao!EZ4AR+y;zueiU0T;rU)tm@Z*-TIN~JaRHEyZ23P38g z6&IFPIvbr!Ynt57#^S=f+J<^(aru&3CohX#Qd-ecP7KOxYiETt>GNz;E1ea!<&Dk)N0sBsilTIew`Als z)VmuSYV#VJ>!FRs+~9K7Lzx*3Ed?N>x`Sw@5{=x@SaS>Nme>9iX(o}*cQ(3fDt?kM ztD?4{$w{1UiX}3;ys~mev)kQJPf9teV$oPKK$KVQthnLtQceY>qEu0B4V=N*R^f=r zn&hhu{)ehqP-RYYT>-3n^G|b6CsLLBjPk~%jpeRtrP7cJDJ_UqVXAPeCB3Pp&Q

    L)^EFzw$BlEGE}fiM|d=_dkZ5b-|}DuXInNUfg=7Rwa*s@#J53cGWOv(kA} z`V>o6ozq>8h$$~{WE3LFVsH?ZC4H&WjTpDpW4vh+J$EqGWKMNev->B>h#BKFmm(G8 zBu1Xt%s8i?B%4}OkFmGD!ihMh1k@XXWBL?@bgr|>>7Li*Y_!oxSXEx(9J)zLoxECS zdE?MzXi`x*^*^TUP14Nr<|cP(y|cw#T0u1hA|D-$w>P@m<)0Evys^~XSYG39vQ-ommE%tVq=2Nd*#%aR5EUF!xvQr1CTC+) zO+!7YTI9}fmDe=d{v}C8nWY6vO#Rmxi4ZJuXO+%ff>t@5wtuDhVMU-FDF{26ON*Sf z&I-4s$!#mjB2-4Lv#H6(ipv?QAgi>n)Y(|xL{q2RGFeffw7#Lz$tcKLSu{lEW3&{l zE}kF8L>7y-giDoJ|KHTO^bE8PLljo081>wx&Gj`mHakmQ4NV1ei>8*c;IE^ALDR$5 z$I`W;(OKuLcaud_G+Cq+v52*4Bz;Z&KSG~fTI#NDY*!7s-+36t`0`5!&q2eNuhYdUxmOltlu9*CO)fM{ayK-)U{F%(U*lTWOk=5Hpnr+Y)JCir8gBxVe_f4ov;yX3 zUZReZZVq<@XZ=!lbyQEtP)Zw`-K7mxrH$qFOP!@vb#5@Y1zHpr6}czZmAn46F%m;# z)EKDD17g%HC?FZO{~u(`pMyB2DXx4;%}o{ybpkrgEp^}Qa$>xyYG9fa(Fre8Nl6sZ zEKWKKSfs39i*4alQMlhR%7|Q~+;mH6=}mPtv1JdML`iHcWE4-dt7#~fv1WcSjfpOb zx#A+~=;gdrTeGCeU0HGQ#gm#ECQYGiT{yM00;>ngSqNXj@uf~${bS%-0-Iwg(}>** z#HlnZFRyg+B(pTjZkv%;nm);r5l*V9^hudgUP(#r3|pyX(qv9hQi6IJlhQ4bS;2{y z@;#S$+*N?>85{}NXBmcjKN8r!F73JSd_3~>PluA>xVM1lhKKW%qB^JHDo@=1h5xAK zr1u}$-jXC4k$3#!=8<#<#oNHq5r_6YCCaVH-}P_zVC!sz^r66=QB#8}ZAsE$k#9b` z23vzV=|s4GqSPtM9H{@-KhYJ7;Zi&{tcm2tfqSu|HcT2V@-CK7l*Wm?d%~UA@=K5| zMxGAR_qT!{<+;50usr2H8)cucXEIUY{ur^Jtl&EZKJ9>!l`D89uUvPdZMm`dk*;(o z*B7Gk%6@e;UfEZS#`g(*2w%xK^FRF>Jl*>dKE(bc(dUPe&`X22Y4FPRGNL~hKSh6| zhJLDs-mJmXeIUwV)!;8ykbuf{M&eIf{R)5O`a(2bxjqt&FVXP7M#H~MgD=zITZX{9 zGPm*#NH26#f z37D$Euhig;8how>pQgcIroo#vc&7%RrNK98@Y{#L_r7LiRJ8xErI$7I3p9Kj8vNxN ze2E6%s==3O@N^%Qa#U;Z76l3D(%`c-_!bS`s=>Ev@Ut}d4h{Yy4Zc%@mo@nH8oXVD z->AXgs=;s8;FW82RJ>J#7nfXEt!@o|u7*#K27jpr->bokOFFEyPlK=5&<8YrjKFK? z#idAAt6zf`m$n$bOT$NtAJEXx*2tA!F|r)>i-j6|k_KO_!Ee;?*WwKt`WYJf9u2(~ zpQ@o(uK7{5ZVkN_Z`9C>OKMC?nTB4APt(v}rP0T%!B5lRvo!d{8oX757nfdHsjR^- z)zCXM_-i$IS)=D94c?)_(>hH#N;G)o+8&ivYw$NJ#DFdhezXSPqQTG6;9E6#TrvzF z9U6RE7%NGg8oV+$Qt^5XzE(rOS%c5g;J0e0E;d_7xVbtKoEd-1%O@rraZHAW28a(k*jw}scS(8zj zRfAWqJriEm;71Tb91abBq=E!2(cnjE@MRi&vIbwR!H?14T^ju98hncee})F%s==pd z@EscbnHqej2LCe+e!T`?q``00;8QjD%^G~E2ESE*We`)&lGDHXz)oI{Dm64 zL4zN!!KZ5QztG@~8vHLcc)9IxlI+tx`|n0c_H?;*fxLJGZQGut-5Me!Lz#1bYm`Fc zi}6=~o)sy|vz{I73*i_)oAT5hgFP%igYsY|1-n@OGRjle3vOlkbjnkg3vOijizrV+ zX0VgxFQ7aPmBCh)Kb!Joo}i26$5NiUV6cqkM^K)+UeLkv@sy`77qqhc_h@1@b+w?G z<-ejlb+Mq4<-edj4Yff7%YQ_9>S{rW<=>$^4XwfcQ$UPANO=S0`&j-(%8#LZ56eGK zc{(){v(1zTDEHnVROj=z~Ck)8mPvy3O|% z70JG3Ewc9q*>l2eK;bwP%D(BL&Q=&q_T{;V!=+P>Jsxe^PQj)3n9=9u^#zttq34L*Z`uo_pQ^{KYD{c*DQt=Ya& z=i4x<9M>D-LSqZFkILRJn%}ioe4OuJ9xAXLneCsri7MK5eIC#JZS&n)UEn>;Bsw55 zr%0;O4674Ap8QM9SR1mRg)Xl z;L@XH_utm1CIf16Kus#kcWN;$Be;^OYBEhtn$@ILP0DJrL`{~d zNtc>zQIj2NvQtfNRFj+4HSM9wacg5aJNy~-^K&UxNCpg z25PS)&ye@$xmap{UJHY)Q{+1u7ZDF2L9Bq=_9d8u;tUVZx= zg!ZNEry0tZ*-gNold*z2VQ8+=?i>9WP`;wnr_r0Fd|%!;+506Z-eMHFp{tFkd^@i- zLa7Cz&)o$^-nMj3Lpi42iqjmXAx+d#W*f z+I^S2#rV8sIb!#Iap;$9{Kx3J(t@s^h5;o&gBXqL%?o57o6%&S!(h+;BG-GEO+xMi zY&c%=8Wg!-=oDN^<8*j_qw&FUD~%PCy7g;c{UHm;; zhH?lB=slCrHkxkVz&M5`yY%hkA=GM8YSB<3`yy)%i>%e+z8*DlMU61A!@ydB2I)N? zfs6i6d1a6#S70UcSv(VI^X_q92`A`S-OOPG{5h}PB0Lzp1#<|q8{&l&kq#XMHM6TP zvzJWb&-opw;qBlY&{~chnk?+RZ)E}OER&sSc0jrXb6w(QBwTi{DIixs8#tiQZ)zv= zNz`~i1A~k# zLG~4(Sq>vs5e1-XzMRTwWlQuFv(L~U*^5O<%C=wAYz0NIko-XQSuqRkNxBv*M`c~$ zeIJA&Shom71=1nRHncuv1A%6ZOY=EjNc~9j;~SVCOClym8S|fiR+60EPhB`k-~J4m zZ1*)L*?n`;Y&2ufG|IjaviEpl_N#^77Yp?>-{hU$Yd0ARJqPve)YbR|*u9ms7x0fo& z=*byuTGx9HVTgcDN|c_QTgq0#c5lCZLbsd)uddSHQ3gqNZ?}CyKgXS?jY*_mp8#SF8{4hm@&jq`zFc|{D zuXr;RVtxBslw+CUeGa3It!-7Rq;IG7f!%uuYg2vuBq%3)-qm~VB=xdu$?9vFO$uQ7 z<|Hz&q0m>DhQ$+f{Hief7_&I!A7JvQ3Ik%mg#xSrfeKX%efyapfC3%$P-GtlX6d;y zG&}GdXk>qjQTFbJ9Q4IJv)#9n%R_&GtbTjkfWCb=suy}r=sl-U3q5xKGF1NP7_B!W z?E9-J=tIJyRbg?-;twNJf83E zKD0@#U+C>GoX~AsJ-|sn02gG4G~e5$_wPrZ3>FuB5h+@~wuSU|?+R0ve(lvvw@{qE zogNM>^dL;&C%tC@6t#Por_I=xm<4Mscfh7-WL=u;CK6wgjVd2f*SC0+^(;Ivb3wr1)x2;N(+%~(f0g>C7Wb-XXfPZDrJ}&EL{*{8qa~YJkPdF~G#&i=} zwd&_cQ1kWc=n*7uFNMuDNGbYxzqETl4}5bJj`r@hdEW?Tlg-2Pne2C)tZ1~=axl>K zB@yjMBw5KcRwNua*RXp}1)R`T_Mw>=xvjwokgV`W{VddN57&k1@=aK2BR0L?+r1|O z6Ie9C1(*qp!8^HMa`jIR>&P=R7X)u*xK=bn0)BW$o+G%Ap{%f4zdWH=j0eABJ&%n5 z`gIjBSa3f6KqaG$;Kd?;FE*auIYO-npdo<<*6I%e`+*94g+GUaI8%Xw%~Iev6o#!l zFGEmp3;ysp^eGBG)ChhJ z?twgJpxuF&82liR01@!FGQMMQUwt?UgN*FWsrDNsK6Cjum}n8PzunYF!f?n)2Y6D_ z%meMF0Spy1733L+L_!46A$!|R{Q^=i!31}k&nV`-cE&tV!!+7w_ir)wY%-Cl95Yo~q)pV`_@4!h~#GsMsC z{Vb3PXL`Dt57_(#-;1f?1u>94%hxZyx>PV|evT|+%igbVH$tw>*MLEJnGxMor(ZLG zT{_0m=D*bt_~!(COW;MKA&beDDTJELmP>#&$Cm3c2gIXBWQ>& z@TV`Rk(fW_ow$+d(xuHcla#XOY8v1P{|)GLcZo`7PDM98%U)MfmAA#P&pNhV_T9y$ z(o&wP(`ns4yl=(sdq~8XPzy0fWwZt1#W}f$?!yRvcLt4R@EqoQ*_UAoT!xll4{JOk zWk#X*(?VY*En_}$PcH;Xnmzj@h8+x+SYRJ)e!=ejPM#2y`OLDa2MO?OU2&SX+tYRP zF7T!57~DT;-o*n2Cpl{&vC!uPt55CTj|3}y`&^)HzGf&f%@lY7mci)Jo&zL}xJ9gR z9zta$g~}gppirTpN2uHvBrB4A5iiXCw47w|GKq@(DfeE_JlKI+6fXgWMeihE(D=-K zWj!m(S9I!21|_;c0+UjV5t{j`7EhiiW&5nDZpBr+4qS!DQYMj8$yM^s3f!9CShKX6 zoW;a?T~L?J0qv$<@Q-#FBZ9-IOgOB0Qg8?Msrfjn`s;QmHnhJmzu2;mVtw(}zwEDB z5K8`HtPX?K>uixV7U;0QbW90-`$=r9lfO=9g<*eH*O0${#{CuiT;ng+&al63r6PaI zoghb#JB{21e`N(2b}aXzNnkHvSPZ}9C3vxfd$EM1XnUN5(u-84 zc#zXad2lCn$Ng3Vb-pUE>x_NYGg-%D!r{jfk}v=+(SGCvTUeRu$4Z>`MEmi1s5Z18 z{~P+(eIuCI_yWX5B0lEK$0K-lNE;jI0@&h;eL1iXBt1Uc82}<y z+7IK=j-mbc-_Q@A8XdDA-Uf8oe=A`Z@?Ra0O zJ|<7Ko6KZ$tXn#$=VC%@XDK>o*Y+?gQNesf9e9_j!mw0Dews!=<{UO?)|c0@L6fn? zyv8eHv5p}URT$dGWe~rtD0jg8`gZF$@C6Yk-ol7@*G)7XGGRTT%wvsc-aqUQ+k~UG z)mR>3!T(nzpnL0zQTg5h%wjlg&L_hUn#b-P8Pgw2fDZfP2&_T=CTQ4 zzLXGb;SZ|#42^WMmpP@%>j*C~m}uCY@qu$nK&$O5%sFdtsfnD!iMKGKuye3sXoY1I z{~Uy3L;ELcy!%)Dv-Gr><6Sz?VgD2|CG_p*0!jXv%nHN)xuQbTUo0PL{KHxp_RqdP zD&k9eTE%atF-R=sY1E;myt0O`%4G|9&yif50S$91D|xzNj+Oi@TGTX82&SXslD*ja zJpr3wSijTh`%kRjhhzOtTxk8?3|+=ItT57V!00S0S)y~lShHqMAO znP@$u3$NNgE7zDPnb{$F)xP-yir$nnVNA>hDFiSZEFoHdio~%7fwgliBl2fnAh1(7 zc08xG2&|D~S=OI9Nnl4rV3$EXlJ+&%VIt=+L(sm@v5%KA&2j{`n`3jSsy}nK;P5zM z5xv-87|wPcxx4A)M0lDFZ{oxZXPV^B`~-3cTgGF^LWb zLc0#c14RV+=0L;(LVZu~^z)Ax7@6VkQ^*BU;@>F8?= zONyeBi@5R;LEk+72Q5we+eJV6cyM30BJp0J5&$^EggF zh$t22#8#ORH2e5e0LJ$0Zy~P~4DA?Zh=dIcok)-o&CCVcOkEJb=LJgPoQazUJ541Yo`K#k_yGV$dF72FzKg3v{AHaera30fT9iztOW_iLFxC&<1&j1MOZ+n{z zg2jh}yw-S?oV0@CMnlgLeJQAlqC|G}+_6bdSNMpXO1BNb?dXaV2D6a|8C@ zV(Nx?{o0pkP0RKX@5amtI}&HT=Y61ws08A$tp*pQ0fqt#-{r0+x#SY=ir3%aShA@t z91uGRiy7EOD*M-&S_x8A1JXf(Oi6O00SR$IgCfYgj@6>8?W0VGE>!lvtgR<6apzd| zJ5L67K@m?EtK!be_x52cuU04J`^)02?HE)Z0pIq6?vaeP0E&3`qH<~Tv#iFUSNZt{ zIgDv{IgAA@NV7tJGlFqMJh}5Orl2kR&1IQ0IwoT1;pDk(Kb~jzZe!##_T{I=Ny~DS zMpzC8>oIaE{8yNga<@|>EiYJb<>Jf00%kzY=g=c!U(=3FZuI#OZD0<(&233~(SBrj zT5VtjSeK)K-IwqgW<}YzjgLeAoNG$4+}A9{`m7TTGoq?04zN?(0bp9I*RF zO3MCu7%Oo7=q^SU*hvDmLwPz@$rtk)h}T5@ngpCkV)#FP9o$4RP%kivdHpV~kfI0h zXA+)vf}4xypYCyxha6_MSVtw?u!B$xfwv93v5z={Ro%w7d@!IgGorurK=(kV zu;c*763yk_OU^{QR_~#G(WvW0bXF(@zYbqNpizH9pR!N<_6dk&vyI-rm(mpTG)yT2 zx^I+;#XWFzCo&>Ck)B$;9`ov4okTrFE4^3pT9YT9loP$1wx-skyiEj2kbyWwNEkPOke)pE~Z%o(ee)6a1YD` z4{Li~jFk`(Yy~Aoe=7iT)NS~B2$>#a0?*SrJG@xht63~<|0^#c4z}>z_5U^`NL9${xP%ubKI&h6BC9Co6U5RIMOz$tbrqqMLShGx=RaW7`d z`DfB1Q){qrn74vb8K5x5QA@GHyy+)an7JLrrZch3bhBlqSh-T4CiTE-Ka$MIWGIr^ zO9&h&>!W1A^MTfQ+Lh+=gRzX~WY}0M%^NYi1ZJW*xD+WY?Ahf~vwm$l4ODEIvmKib zvX3g$%t}l4Utn~Xy_o$Gq_oaqrFJ-zTt+9d)EH2kDG)kA#4pq8+rPlfgG;q~&xc4L zyk99nV*;d{5G?E0&It>?aFF1=*f%4=+y4>4JsQDxAk74OkbvM~65J3Lyv4K`X4S84 zr`duv`U9L}p{;Ck(R&IMxo8(Pm_;i!*d-d=LQsUZ(%56bF_{4>^yl>hqL#TS#W&_V_6%tB2rZzgUfh_WxlIZ&>M>sOliId9^PByOEXT$z4tTey98 zYF~s?Z9?V%s{dW58Z?4`k2GuNeMq341M?yHbd6wK+`l#4&ZE>$AsBZ#BbvIgBfxt$ zbuqMhJv6||kCed0qQH8#%-_KRiEbOgC4UMnc7Q*Nq6=9q<2#zpLZ=`XSi_;4V_GsfYys9zI)(GPiv!W>D+>R~i zz-1^2w$i4$FwS~rocUqn%p_Mv==eEeDMH8f%m85rzQq=-a3IjpI==Ku>|q@X)2%3? z8Dc9{b31@1vf@N2sIDRgXQI$FYZyo0o5XJ%%-$3dYkLaT&n_7xAUF9SJ3 zGY8iUolnG7hLCNhg7Ed@pU2YZJzPi%B$7r4>5`JrXe-l*UVF+tJ44YZ-vpKRQh*7S zdYMWeDJnf8P5^ool~94l`o@XFH@O%VPB3E>KV9t5uGvg5-BJ;BMnDtXZ(Z}Mfvh0>WnXm#$^_?zbuc?!r)EVUF`y`T;!9E^W!DWx>Tn0= z^4lR3Fu&`cERZ@l1KKnRzD$%5ODFau_S?WBrsrJ@L$Vw+Ptn#kL0sO(T|&?*@C`FM z-w|LN)+G1TQIbn56kLWfjJQaerg;RLGGaqi!MW5f=+eUd_K?cN%v=9@b3f?D7-3n`B zv1o)g*Q$&htZuuBN{Lq)<$1Hdp_XHv!-~L-NQ3LumThBG3fPTO*|`Kenrw(&E6a0( zZxZ}i8Tb)xa2<0Ubtkm5TG;$QyTjHpFb4UiYT{<33|Fp%F{=e0oQNoR@sFgg;Dp=3 znD=f}IduxVvaV-XIOj8;4FqIH`qK$p3R?m|q zU@}$&c0?K+_&%)IHWN)WLbo^ehg;bxSW+odPi5I4Sh6D0kXSY`tKt5XC#kDbzoqdz zSbiAGe~iJ}<^OXuckE>Q*dutG() z73whA={N;rH_q`GqFE+*1Jo3_jjV;_9V}~te}RQX0rM$y8x>T+R-%B+%9fzPry^S0 z#gyWl48gzBu7*$1h7USQ*%c9GU4ow>_%obADMB>N%)yp#BbaGaHUvMWQ_Qd+DWdEV zl_3kPaC1gbCA!^PT<&R8wnm@cOWbs~R2ng|4Y41!X&+TS8d%KYgfk&e^Hl<7MK@z2 zu0pi2t*+)xhc*j=TdBQaTA9)2^BaKrX`tt8NWI5}Z9VoFYRq~DZM`0Cy)3Fne`40_ z-9rr&^0sR0NmP&iL`>*lqVCq+&nibuq-d^3%aVnr(uBw8{z>|yT}go>zXDN+dJ(cz zLFrnStScxi7ZOYQqxBtQNf#Nu-yJE73;Kj%Df-}V14Wj?Z4_~%Kg?EwqF+PNJ{yIB z2f=_n;i@HbX~}*~WGjfw8^vv_mMnwF<`LONoGkc*fSUxo0uE62&oS)=uc1K-a02x; zz*}jY2kaO5b3}fnpnFch>7slLjhUc#i@aUr?-0<;x)!Y)yn6$Wl4d2?H^oXL_~$pN z=HB4>q#0XTfWk`@-+_WkQU#nVbbmzxf<8!p*aMRkDK09;Akp?bHp1W1drU+@f3UOO4z}R_ zj7%h7Sh@l(h@cky4MTm{TGx`MR@9)UBVoNODZdC-VHc?O1};ZFRu9m(FM(SF6TvfB zf|MX1Mb%#fyF>_(kS@ zv+ywK7zuZ=v|{qabFzl3@K`b-7k49bjp4Yy^Z+Of{63fea{IuV9u}4Ta;ogT3d6=-Mqyf{b~D|XhB6n#jQDEecI{|>!|_ZyrR&pLD74#rz`AN+}DcT`~ ze~vMPhAS+GUYg564~}iS6cCVx(!Yj4bT1FcN!! z(=Ld_zIz3uy*3g%gVUBoVi(55E(Q^#HAd1_aN4>^Y%0f|51`R^5$6!4!%U8yAIX7; zAgwwQdjrQVi^NhEwCu1%@8n zT$Vx)ZLVhJV`kCF0yKa2dj&&=pZ!Lm+F427{#mIK4peC;h7<+RbP7YTOTcacdj;$huwTFd0qG$`s%H?8 zHZmxW%i#=W31}72Az+Ds)dJG2NcCC;>=2MHR}+4tfLjHmi^PQQ7O+RaJ^=#)4hSe= zy+ri1P9vBqV48qt0j&bc0+t9^CLk@(sD6up9RhX=NGAkTzFENS0(J@5BVez90Rj5~ zck}Z!49}VfsOtQC<7sp`p4Uub&+-J~|C3e^ns*lP_Z576jghZa@rD9#kKBeg=BN=@ z)fpW5G)@`Ak85=Xf7l+GKNOkQJWu33iQs$zWBcmEy)eA&g8*FWL9EEW8CVPQhl-HK z4IHb6Lyk!-hH;QZv&r&ZW;#Que&Pdq~p4~38ojltmvg>)4dMXibM3%;w zLMxW0-A~a|;tO;%t$5x=Kw^6h<@!68;T8^m9z8)`mu7hvXDoOU5PKUa3#O-l0OL*I z-6whF3sLzi{bJq682VA65c4y44l?ty;OQe@=@%UU1iRAbF`V^4Pyq&`gzHiKhP^oa+SVV=KxC#hq^AX)USCF5(9NY+7n#L=w?7RVkU|Kvd}>C93-5gWGJ~9 z`ncSZNV#}RO|h<*Gu6pV?hKOq%@e$pIb3eaNz4qal@Q*ujD$Z=a@mekKqFV%)-pw= zi?o8=iPYY`Xm72lgyfb9xjkU6U-La~KMSlBa`$q1DV~^e?{0-iYBF^mF#jZ$sWGxI z{0OGrM6nmy>N1l45m=M8=Q8QFBt5i^w|bV4K0LN`7Os%q$E7nzYZ~sM=oW2%Y@?vj zHh+t$i(!j(*9je7#k8znvmLjW1(pjPb^`?yr?hccXo#@<-K-Zt2kKCY1++SBh6Kd` z)J2E}I+(}>d*Fgf6PD4%y1#)t8KICV@JmwQ`@e7_%n%C1$5x;lOvwe*!O6cdT;S>A zN>IQ*)`N7U7to?&-6EmD%hSjL_uw(0z|BH|T|kiqR&y9_fj%%K1!%y50_ew!4rnbv zu>lLb1K|$@kR}=^Fpey+8x~k(N+ku}1$VN*l}rI0DKPLjw}4eBAjMW-Kqx??ADLHJ z0G0^%cMtVR#SIeZv|)e^TT)=5P~gSO$pUWN;u%;b6nG9OvcM`1qb**ur%PN5Vtw@&)PeG6awv zrZFAv!EF$M;Gei1EJBB4SuyRF_Gq;luyn zc9%9L@epR1%bJzg2QMFqzVN(xB@J0p}+~P0tV11W0{dFkU?|VK6nD} zd>{q%LV;C~qF?g@?j#9J6biV70vWLtFbf4*xdJhRHjOL5f;NjQ5MI&oi_oNl4+6*t zKV*;&nWV$!N4XLDfuiYbD~HiWkcAE{T!)y0n3e0m1~CWMK{JSLW#L$?8!mKM#&jqr z9ZW)pTA{}PDY^GZ1JW(oK*i`O#fPMOK7 z3&5*{>bYqeg0?&;7Gyrmim7N3G*VspE%4;ZrGWZ1H{yOa*i>=EAXk3(2ky#T#?6o! z$KgNg$}Z*-?naE;XxkXicJ3xbFP!#7H*(yeuvrgltnh3Znw8ItrG&VF{ONuGiW@S! zFJ)Fh5b!uRr0nAuas#*49#&>%e<{xM$x`SKjIIRzVNpM9k6=)ZbP#1^q#1zvHPdkG z1T)fh9`F3cH-W!x;fjLaH z{6mB}Y0Ku&v_7&@54RF-cH%bq8tUd#^e)i70(oS*zOd<-#ZrziJr>{rf3V`+y@d6E ze@C8=M9h*4QeI+|f(GG;5o#k7vmj-=wg@qYA|8tiQku0zFy$gdzhRLHr!Uk$5&PYO z$09}uf71F1EXYa9__(MS#kt67v!5{H1^yimNTRTE@A$@%hbww z^7bV$1v@zkTo_!j%NN8d%eyUDWwhBvTnu(#pI2L`ww zvEadpIwE}BZ}B$UIFJ^={)Pe>sXDY|OaZ)aC@7;;HKkgR@^Et)#D2>d4>!5N!-s=0 z9^QC^*oGM6;XX2WdYMtic={MLh?Dd&o&k|h;vw%bFlg`?MLtdBvqau1@(z(N5qVlX zkbX3Q%h?;)1|pR9(BcYs(GA9UIt2ZCj`wq`VXznYtsL*+UC`j^7Wp1g-Y4<_kslCw ziCfuYU~r5lRpiq|-YoJ~k(WijMC8jv-X-!aBHtnMog%+cI{>;*rr5>*id{LvbhQV5vHzey#5d3POXf4XEI+k>S?? z2<0Nw>SJ{C2B;0XGRhypV@x9Np!@9WR+_ELg&6Lkj^G3=)h#MtDxqH-bMLBHNTbej~)t_Z>0RWYQB^5AK}I=QNNY) zbJVvpQz>?l)wM0aJiN8e^c#cro2tf8!7*UYA*xjt8lZ5;4e}BbKKu0 z^8IPZ&sOt&lz&pyuZQx9xH(49cTxUB+yo=?TPgnv?zKQ3PZjne2sBR>azAU{waG4u zv(Fj~!?nuQ7vgd!-u;QI;=W6+yTXWz6V_@Qz0%b-0)gkx{0j(h8NCpXcy2_;4mt23 zegg1%6T|bm;YyXsbdNF4D-5IGhFXBSHvmC@i^^v^<5R}3#D^SdoZ(BHAd2Df(P4%i zf?+#nI9X-b5tHHCm<;K?EkeVog5hM&@bCqqrL`tk$Pukxx-nLJ&rrDqf63eXDInUr zS>;wTm|J{I-TpvNba3n4FSy;yxmBv%tb@7jIxm)PSt_?e!Oh0G85M5WLPxX=W_SxH zi1NjLoB;~;e*6V*>;NDd`}X-v0SXcdzrhTr#AG;MW%#II_%LU9r^=89wZRO(;sj9| zeu|hC8ZHzJ=W~Wvsth}0GCVgXL$}KCG{I2E878U>TVgUi5;I^DREFEfa~p00gblkm zJ=w4Obr*S3=g8GQB3FELomFZGt{dL9WfaW#Eio0 z*;6XP5Uw5lBZdMDv}o#X(2=vhxe_pr85{V8;HQvEN~F7Xsi_S|FhEk-=u%RnE%qqSoUjl>nM@YCzCVH2nQX{?QL|x`s$TjP4vQ-G>xe z{*=D~;GtPnp{=;(oAlkq%b$%dpDxOO$IBmxE`Jp_NmKpRyc{nLkK~^(%75VP-H&pu zJ^FAvG;41zub&fLpYA><{^#@ZbEC^giSjsJe)4Bg^6$r)0@eQz1=RlN@{2_IE?)j@ zbotXb6QTOQAjH7{QoUH%qs=coGRynJzVd6g*7<>fii<=^1Uhqa%VpBr7? zF3RJ0`ANiEgnv&LjbaAnwPJPF272Y zm-F()(dF->Ly-JjUY-+OUMI@W=jG={m;Z<}N2(vk%TK06wcjVoKSTkwKf3&EQND|p zKO0^CN1PcG|KIWQ2cpX_7v-yY`O4_>S8ygx^~-tr;^^{HQJ%}obE3E2pwn&55r z*o;%YqjVSpGIrnCca+SGh~G<#?`FtgmI7v|lZW?N@yEEV4*7E3y_1a6{ycO;?BjUi zXx`hOXQUipnt)~jvjmg{bO=}`V6}iP9JaL*#3AozU$PO&^$f?bo7E(3;L!ovE|y@) zZZ+AfCi~Q6znUCSlS!Cv=m0Z=nl!4(G&Px}Car4Hp(abzWVM=fsmWF~*`X%atI3T@ z5)X!@hF`G+<+dsX``fmw$!;~-qbB>*WI#<0s7VR#R~oG*Q`Kaenl!6PtD2P6WQm$A zQC~c8*vlFib>`Y9}h1ymo44c!Q=hj;!PQSVQ(*r0LLXA^Sfa8eQ#wI&^q+_&=#b>pdONi+5`3 z&#tkN{W(tbX9w`XMBbn2`C4@tZJy0)hd%0z>e0{sl6v&1!9DscwMVmYgbf41Eg%e> zbvs+6w=-L@{_R_3#McSLTROh)pyAEmlG9ik54IEc-o)C)UN@z0--7P0!5H-I_DD>szWp%9dku|I-@XnQ zyRU`5lA~{@^Q=N&12TB))Sm3Wf6wmn;;{A$1o^a3R=OZ@XO}MrHXkelj zufz1+YPI?2<7<-F(Nmdt=64uc2&@rUSb;EKuVqhM+VCBnAd>hTQ}YgbcQY#D(yh(6 z2v1wH7x=t{Qub13_B=bsJ;f@29{3Zl=}xkF-wR%ka~^yh1`G;Nf3c{(j#bC^NBjkl zOyBspg;hQpXjCizEqE5Iyb6_Pp>nCHd=;y_3YBMx$~mlZD3GaE{vh}oJzI--GUDq> zR(!jPzN+Hj!bTIFC^7;q*qm5HXuKUEaF|k_cip39?;hz*!-E{X!EH3>p*cx|xm_r@ zQIUq*D8Vf$5U=Hi$5(oT#ey5QO`>&s!@~tpk%rq&hQ?_f8`WPW-)x0v4vik>(vF5vz$->hS#f6F%BX-09&Vi0`@3i2f#od)|e7 zw_WM)iu|v+q$v5Xwv!pO@^=u1%l|Va@rj%rXfTk*BIU(gp9aR!O+MV%mv+zE~F{`3iWBlzX`@>43#-I2XQ#ut@* zH>BYsNp@e8kzS*&pNX%|9%*Lp-BMmLxat-D-i(#IP}RUc2#L4mK5uOYZ@eMr?dB?c zj0eZ+}Aw1sgDuP?)RT}&CxVu!v`3o3jb$mJ^3(M!NrF+2_OaEg2zY=AEh%lP3(;&U)cVw&8d&nc2AgJoZ$Y94e#dBE1_?34#-i$0c z$YIATYFzXor4m%6PxY123&^ObjEw7`w?I+CW%u^UalP&_m#7xd#n;!c&?3_=XsZE>phRqbPI}>eTk`X-7LJQuae$(w1|Jzr4zJ*dnIu%#XAe$ z#ATJhF|-uplXzbgKKK;)pcV4yJx>%`7=~f(d_cT3E{*U(AuqLxHc zN4u#NB1jju$EYZbPGpMb;!97Qw?vrgjChX(pxj(I~wv_>9KH8&Q?45!}tl zb{|6L+Hq?ghk35z{ZOHXNekJ#=|0EH#Oro;E7jF z&{TtYU^n#89*!DkW24h(cUCmixt-F?^5!PDaYlJlO@*-GQcN^_BOB%}?Z%{wq!`k7sd$E=jHIlx!9yrB1n}lSGlEG z4tqoieb}PD$tlg6XAA476~dIXKuIl9(UNfV4K3v}Swf>|v?@KiM3HWHE&&hY(#D#~ zCS!ShrE!@P-`R3EF{xS!Or2;hT6O3UOpSE-MMWu!D4zpRJ_aD-v8ZNgJz6)nq1jzizckFUiJ>(SsYNI(ZS}5Z zc%yQL)LdWVmdq{bl~tKjoMxUXPoFGO<|WxY<*YDgh}6`KDv?Uhs$ePS1%=~YvZNoN^LrLz*5$vl(gxg31cr?8UAm8AJq&2DBo;xeUzDpG1{W;!>XbLx^xP!TRGvm9o; zp}t{>)a1Uo7G1Kurk?xm+VM?`FB>5lam;eoI~&WH2b*eYo%Iz?oL}RF~J+ zJ8O+~HBE@$is}*6G&*>oU1o%68bilJI7J*1VG?1{%VLlyV=^0L!^S8rEUjp$hdr7r z+{XIm+FE0MgWGshd2Nj_gEYSBGGl3}tD(u5wye6QqS{!~WE_7>^917+XiiPjC09`6 z(k4WeN}^+3+tloGHdZv$f}yjKKCA&}QDgENnrkbWFfyIn$(nM>QtrWqMq^z=Wpl05 zNL|@j)!2X=v&o~#vD!;ue6lwBD|fNdy1}r>J-M#jWt&svo?2R3(b8hESkkpNuvHYf zEfyHPvDDpIUgK`ERTLDJ<4-|BQD$k8JEPXw)MP`Fu*kZ~YZ`4=QV~!E1=8foCYO{x z&n9IQI^E@xltm!FoRaLYWaKr}yBiy7(c*fyvoTsj%M?+b%VUeald3%|QwEJ$YO(cK z)~n75Y+F6&^63oe8lKAwi>(}{a@cxx*Kh8lfX;%rlHi4fb@~cIj*SlsKr=LCTSboaeuP(cB+KM@M z9V^&fF%7FEI%s_^jxMVtt$Y5JmtW4ol5d728F$5k9 ztYopYzDp-bivYI(z6Y3y)$F3>p-?g4s1>2mD6E|qVYONeI1VQT?SK;jf5Z)0qp*MU z5co`cA{5F8UpwF;z(s&=z*@j{fGYqW0$c~U18@W2>wsGT4+HK1OvFji%Yfqm-vi75 zJPb&C=|2L}JszX*!h{uo;{fjhoCdfB&i0H*2VL$l8 zj@Meg4mc6FDQ|!uY5{iuZozH6qu`HmxX3sSa0{Rt@JC#}_=kY+iGkk%e0L1|>%eybAFa<};J3%XC!)PuW8lXD zzc~gz1Nef zE#MQ4{~CB#4E!h%Rs%mFES3A$1U%^zjh_ZQwRe0JeKGK4&uDxt@Z_&(d^_-czypL2 zYVQUhdZX|ZliPsr0e%ft$W1o1#V6bxpNwF~LG@_-uwq;o^p?ii8 zYB!B%n}NTHu&mwjwW8Uq-7lj&fN_k>q8!BU6X5$|;C}?ZHwOL;DAWUd1~JJ`HZ(v8 z@tFwx0Pq;5!Uy5=f$xujUj#hqqoucl-VHqIa~bYSkY*$seic6>IrWZ&8OcU};*8|9 zb-LVS^O|9~$ysf~9m$=E2`OhKX91O)oCXq*qRI@V-P6Eg5BT-G77883z5K+_PyE&; zLZK(&FYfnQXpkjgM6w|_ zIces|_#2SQPfj8Y$Y-yE-t}Q9^i~A@OhKPJas{uLH?oe`n}vG$s5c57W&rUun>r5c za0l7ZpD-)gxQ^_&hWyetY*unv!i9+=m_K08us?E{!lZ98)xRYadIo^>T@w$Zw~;^M z?;Vkx3Jlb?@%B;t(8oABK~L3`gW`Py5FMX{Lg|EL@xEk4a#G<))MkF$f%45L&!Kjz zev1`H`N^&XQ$j4a5pNu%_bAMt>pu^LY6t;->*D3))HMlcWLskVLZ)~)?#Ry5K;H}c zHG+On+{wx2_@&8dXm~j4DnaW;J#!!wniUyuvGsPuZ$*5}92EX}BNxQPb2qTLo79TC z#bIYN`|$hyqm0ry%KT1oZ^ADP>$<-oUJ^$_nOHVdV}Dk1XI%U%Lj-Fvc)9W0jCQS0 z1i$0R#Nwy+?ODmK@d^D=&A*f6^kPD(uZ5Af|uN=Qu^LQzzw;|%3W^g%P?}MoQm|Kxywt{DIkM zbDWM)C~k5fUbj6-Lgh!2q%RV6o06m-iP0&Y&Uc!0bQqFt!wLK1aH3dq8W5;B!l-_vT6Wozq3^zWllF{W;PWqwbw+q|OU;8|Fzr zTyT5bgI7trOuAF^q}zU}dwst2;4gJ2=1UKx6>gj_^{44xnJ@i%!WAHW`C?sPk@Vg~ zU7$#M_Yz%yk@U$V-D_7#Utg+Q>yX+ly5}6y+v&RdN~C)-b@!J@A5YQU3HqtJr;DVX zEZvJ&OV4HN9+)d_zf5;%uGDt9?tv2NjcK}X9n!`e-S%swJy+;%pC`RPUH9TO(lM*f zTOxJN&;^R6ff=OqzPtqJa5PT`ZFl68to8!Z=Rg5T-!PM;d^D5vd3YA-)<276Jtvd4 zoi>vAj*awra5iajVm8VB_p4y~?)f@2^wDdG@&6qEV}bv7EzmQWx4l!q|CN@|u1~dT zk{PdEJpZp$;(vJmUts}SBGJ)l;84l`HY)$esQgnRKZ;kAI?OzQ$6whYKh7bYg3!_R zqLD%6oLdP)Je$FeZc$F_QaY6KZ%&08DBmv>!=%EFfRL}OY1#XeQKFpFO&!DOlyy!j z&(h7<{OB<!akQ8~RLR|keL61E{ z)*dY3*n#aMmZv9h>G)3M!+LV`|MP!KUNOeB!9EdpZwmOCfF}eThBx5Qai)O35O9is zGXhmYl#xD*{$@`NPGhSti2YAbb^#9Dg9VmlpyIOr9VXC zhe=95io_3>l>QirPm+{=8;L(HJYGfOM@U;m+(hC>N`1n64|h z$F&%qPLTA{Hg+-}S(YFfr0qK*ag z#i8tc1O;)3&+e!={DI*I+n;2_YS(ZGij&Tg%u#w?$P^gdFQzd1!Et35e4^uro~f6roWgJNKDYjVp>;|6Xnj1MG#IfUq!1ud(J}egt4kJfJ{JnSx{B+=B$t?n& zqgFJywK_mfp;zA2&G*|hv1)w_$7S|u1I?N zEc#e!@Hkv2=*xs$<(dngHy?WL4%9&FC zX;h$bEdJc^1GaT~R>KcEkG+x7@KOET<(;Us70i5_b%kmfgmjS1KEpWfkeVtahe%g}fOS=9+XP5gc{_xiU zPvYmhOy?%|ODz6x08epSquDJ@2inc^Nc{f4YdWJf&GX|hm`Ux{0jK`n;{Hm%KF{zg z4CiK?%M4Fh<3(q|dK|Y+d;07Jk8cD1#3Vb;lNdOvf6>ybPceMg(*G9$C%ZAjjOa5e z(B0trXDvEkVfY<}i(dU$;8uTcX!?_k{#nBhIM)m29epFFbc^XY++UH~KLIB_DYKr) zxIBgjtygR}+J=ntQHEb+c|OB%Iy+Aqugg>5e`7ieR}2AtmV?J9K9Ed@e!Q0WajbFt z8sJYm2c6qDQku|=A?JLP;n#m>;IA_LM@;96CI7!NJY~uM0GcHF3ruI1>3m$nKj`eT z+&;qa=K&`^`xgCkfG5f4i(LQO4-El2E1+~4@Rgp6acL7h*+fP1j__5c!h~c{y zpH~@v#~R;10-nVG9l%LGufCDed>_((@qwS|lwUCbeHMww=Wr%T`c`7OiJi;=PI60y zroQNZhvBz)eU$o_G@XM^ncEe6^%}$PS^98I=)Y#@>oYPuE`KPwUt53^KV?fk-(vXL z9~e6N%nFZlGd%9RZo-V{)MEGy!z&EG1bC7>uL7Plj&Dt=pG9TTleITfOxa{P!1a9T zo3hCBG~h|?HUOt_Y+3SrN!N!RWB*gOJ-?hn=igJ{PoYub=j`_lKVnawWq8`+vjTV$ zpL7S3_`J@1?izB=%ep@N9OhH>MGnn;HMr}_&P z|EmmlzGG1I*)tx)DRf?*0{=GCxoE8~Kh^bN=MNkD`ivTnzvB7}p@Hj|5Io+VLjPZY z(|o*Q*|85lY2^GA%QvlUQZE!LYPnRcDdiw8)Zc6m5E`kXuBvx}otdmbMyK6+XLr8gA?+^*2w1htNc(!8o{AZpb2_ZMDj1(PBU zHLa?C$FE13K~$>d5prsUp8{0Oce0uTdvQh}7RwZRe zr&5eB#C(h*{#9{h2_tNV+dMD5=!SmNRcdp4TOl-f5Fqfr9qp*CH0m8+SyjaojC^9L z5;u1G*s*G{rfNqQmy1NOcB&8)Zwvy3nCS+>!qw8JSB{=46`W46nMp4!9A7Ri7F5>F zy3m&OYLrbY6}7_Pyh1SXX4F!+n-YZOlXb4Twx(v?IWxE%>ATOs;o?%ZxJ85}<9DH2 zeqiOFdqOtqX()C*P-Huz<;+PY0Adp%GO%-~*Ow6g)&r$ojVbP z?F)$E_BvG^#V(zb?%7C78AI;TBhHUdIKB>tFIKwUvCg``qte>`^Wa>Wp0K$Nuf++hPukIJST?|OVD3)rc zAR1ZpV9997!w{1Fnrbhq9Eln@Qk_y|LylV%7vX+l`RiOCX+Yjy)S z7I3R*OkTu%BJ29T4BIf8Qmj{4jbYy}$XLg=cpqk!W(SM`?qn6QLd~f$^^y58aa%$g zhD5o}YhPp9)X(GXz^7?7#f-fGb_*lx@F>Rw6`)?f8o!7Wfkr8eXQBdp!mQE zmci()47){gT`Wsu&3&z=M(j&i+O_gnRi;h(L__FgRV6pFswA1+laD?*=b(#?V$zIUU)cw_`S3pUCZ}5_D=SV3J|q@> z2;$NEkPCf%fvlKdR}u#`N7iz01&fynm;|;UwKJ2<>d~}xDNC9;LMdsfw@@v~1Wzt|_f-!Vw#KkOuA`%Bm&3x;@j@&CC+m8RP#c(|+WPWQB0azlS7c1 zW|T;1^>eD;I;ZG9HoK zLZIDlSXRCxX$(`zcBqK&l3@X&kA0c{3=0l6qqW^boPev{t6fk(VJBECEJ zI_>)Oos8YX1ozK)1_e-@uqi-COAxbdlbQc*D2imx2v6^JFvdU=> z27OGIy%}e=xa8<1*wrKSrK1|b?X8^Lk42%?YRre%H=ZBfwbxq=bVuRxbiHN!K(Uz+ z$JXgO|Urw2@vN1=Hm`l+jN zLE&BKcRWJir+z1LT+Nk>M|U$oF~S!l$E6RTs1#^Dbo~~8@@zFgL`rC?jx|I7!iECJ z*n4VX=4+^-As9=RsU_=zBVj9OL#S9#--+&hscy zyF^Ox<(z8)FrqE(OI)7hbpA7%5au(MPM}1wt%9HWn0YNZ-2tW~{7XH_SMiQwWu+`} zev;qR*oJ@VgYeH_r-29Q8^I(VP;!aSmG%W+`rl*xMM6fBxIxJ!KA7+c$Hw0VjJhc2 zL=q1zxx_i6icZAqXd0j}iZ5}9lIuI-BM5T7A^8_9e2G_-TEK&g7NJ3 zzh~h~+@<6cuQ8e|cATGB_!6Hf`CZn3p<%cGYrMdbay&mIUjF(GgJHL4m)}G+93{v2 z67Tujhs1vixWuB&4~d_=`H=W;TljJg_b0~Rwd8N}{|@kJ?nwI*XS()#0FlHFirfTW z^zcilGs?fjqn`MKMt6Q@viPsyOMcJ7kKwRXp7B#sk#lKRzz4Yfv;a64{5cCwyi$^!%)7L$U+|x$f0&1ZQjy_S sQPZ)8Sl8?`|Myq`_@8>5dHfUp$(B;0>6O%eixdm#FF3CqO?LbL0W6luRsaA1 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev262.so b/source/HOAUGens/sc/Classes/HOAEncLebedev262.so deleted file mode 100755 index ba1c1865a8c5c03cf153590747e9e5ec6cfadede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69664 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev263.so b/source/HOAUGens/sc/Classes/HOAEncLebedev263.so deleted file mode 100755 index 8935ad09389ea519a030a59cdbcbaaa47254f057..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73760 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 B(_a7p diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev501.so b/source/HOAUGens/sc/Classes/HOAEncLebedev501.so deleted file mode 100755 index 3b2128af2eb3db95d8781f2e8702c60ca1ce1104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65512 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 AZ2$lO diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev502.so b/source/HOAUGens/sc/Classes/HOAEncLebedev502.so deleted file mode 100755 index 4a4baa5ba23ca4b6cbcdbc70e06680660075a9d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61416 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev503.so b/source/HOAUGens/sc/Classes/HOAEncLebedev503.so deleted file mode 100755 index 10af03d407ef7a9525d78f408a531806dc6adda1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65512 zcmdSC4O~@K_CI`8NHXPK8*S+QHeDK=)WDa*!T<$5*riCcz$idKVL~9d7?vgmq_-C^wGUHBnl4BN*1G*_@8Y86+ zM-)>2Ht6!MsYlb9DQUUoeBmqQ{*pgS_JlNw3SqNSm33T;dY0-M`?18O3nyxMC$meM zHny4S=1AKHfJZO<#$P?zv9<3==ayx^Dk|D>M(ViNjQ!`IyW=~G7>nP}@uOW%#V@g`xfUJ3XO!tWRO4aRQ>eu?;TOTv$#G!nl{@f(HT75H6=Un+iM z@XNq26F+X_@XL}thvO=wUi`B0y9U2&@yo?;5`L5M%frvyrs$m;kltj1NQ>~BYRi{k zzZAbR{HAHV0_iXDyIJQek7rgEvbp_9dlyOoV??i%59S$p1%8?{ju58d;V_Y635E}Z@+Rw zj~g9hQ-A&Z+AoujfBBE!PV5o4_Psy;sr8%KHD`Z*){bEOo)>&pp2{ysKov?v|$l+rp3b?pZtGCqRDJX7>mV_Dl>jteH7KVod=yLMfHT ztDgPobvHdc{qwV4EpHj}$n3^#FRXp#^ZRGdi*52&|MLAk6*IrN?4@=Av#g54k7l6Q`>_R0VDLS*Nd0jS9m zV;zpuyQy;ZNpSWncQ^FKC&4f1-97(F{kq5RI<0&BFZcNTm=Q1BijMs7dQqwIySi_zgWSJ-y;2)qpzcegD*CHcy-)~0~_%U4#?Pe zyy5mP`Y-ux-{_V++$vi+_zOJ;Y-}cqriXcD`y2|8Pm$K&)MqRh5^tWx#nZqfm!O4(?$Oa(Qx`J zO~+58Qp=Hbs-i!j^&bsAxLu+3Y3!oUer=xvUHI3DJqJ1(yTrpS+74^A9pFCM2EriJ zvwfM$-=*<0ke=@7=ZJew13D?t`m}Y4=Z)I_?N2JgIhy{Dn*M;MkJtD-tm&d2NTy8aM5B zmA3z8PS~+MuM)==%_p%7pIc-cj&&4i`xI&VY#l!?9Y3br^R(UCyZGw}?8bh*Sld5A z^Z7IU;&PnnNZjJqh)N!Wo}};4^o_doW#HY}e-IQn9e(N1$0KcS#~0dPUG3bc?bFf4 zK6lG;6LFiS1g^bArFZD|x^;WOR<^&1{%1LIy6AroN~vd2jiNK{-=OW>ru}H*qqW_Z zYkJe30UcK{+71vW+Y}vFIl7@k1}l8AZdX^oZ$vTmY3!oUUv#^2bh}J_R%v~9cG2ey zt$&WzKVFG-T+~PLPyC$%#-l#B0w~Pmm-|JPH;-RwTK}{z{o)PKyBueo5D$*R!s#=r zs|xFU#kIb|LPudmRfW${I1P!TFl$nFVQE=y+4PD!Us>&>?6H;ARb`Wkr&gA!vhGU? zOB#yFpt!Q)HV{sjSvXO17+YCfS65c&D4cTj@Y1@P%Sx(e)YSXRGD|CRa;D`bLHd-d zhfU79thB78vbeS^GiO@PRVBH@1Wy_#HdFQNrYs%Idl@a+=wl$Wg_mrDN)SzUnF}l{2k7 znxqjR8e3jga`V5WybP44Qn{5CaE4+#4O_RYDL>NSf2&Fos$5+^BNNu0_2b-!ku<`6 zOmXe>+TxmWv(iZwGF#AHh0C;ClZMq*%&4g>n_N>`jF8C5EtCdY#lxq<@1

    UCNU# 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncLebedev505.so b/source/HOAUGens/sc/Classes/HOAEncLebedev505.so deleted file mode 100755 index 92c88cdb414653a86c3d26701caebe691a74f39f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77800 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

    sH9$Q3)2b>I9j|>!(x2~oQFADcmYQX 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 Rcelysu)2g_NfS1^{tpR4Ktccj diff --git a/source/HOAUGens/sc/Classes/HOAEncoder5.so b/source/HOAUGens/sc/Classes/HOAEncoder5.so deleted file mode 100755 index 7aba8e1b89178cc475fe63f89f29994b946f582a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82176 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

      -ZOi-;oD2|E}RTW}?XKt@P(*Wy|!D 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder5_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder5_supernova.scx deleted file mode 100755 index 130167882bbc44a99a1850b83b72739563f115d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46856 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 diff --git a/source/HOAUGens/sc/Classes/HOAMirror1.so b/source/HOAUGens/sc/Classes/HOAMirror1.so deleted file mode 100755 index 663f042874a4adfe4407a5f3ba513728435928ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48944 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 D5;h-S diff --git a/source/HOAUGens/sc/Classes/HOAMirror2.so b/source/HOAUGens/sc/Classes/HOAMirror2.so deleted file mode 100755 index 75b687705d35b419c90a1a6471274df5dbf58397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48944 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 diff --git a/source/HOAUGens/sc/Classes/HOAMirror3.so b/source/HOAUGens/sc/Classes/HOAMirror3.so deleted file mode 100755 index 78fc777ad8337e5ec25471eb9e62b9e69d5e3db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53040 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 diff --git a/source/HOAUGens/sc/Classes/HOAMirror4.so b/source/HOAUGens/sc/Classes/HOAMirror4.so deleted file mode 100755 index 2a238995e9a19a960bc84bab04eb2a542d8e934f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57136 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 I6<_}U0~z_mrT_o{ diff --git a/source/HOAUGens/sc/Classes/HOAMirror5.so b/source/HOAUGens/sc/Classes/HOAMirror5.so deleted file mode 100755 index 5aba1e5930abdda361776f8e7560786d73c645e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61232 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 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev061.so b/source/HOAUGens/sc/Classes/HOAPanLebedev061.so deleted file mode 100755 index de837b7ec5b338d3ada9e550a9b2db0e34884f61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65648 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 Qr^&HUF5>%bf3e&DFW=dQLI3~& diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev261.so b/source/HOAUGens/sc/Classes/HOAPanLebedev261.so deleted file mode 100755 index 23af2d16d98cef2e347b49860a81acb0d50d7bbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73840 zcmeFa4SZC^^*?-hlc?ZsEZF!$U3Jl*f=Ngqks=!)aF=dyC7?mTBqSRW&C8l>Fe*wg z31qu&8x`BMRh#-s71~r$Q4ymEL8~>Q)+nt+w7Lr@5frHv^L)>lxqD}q4YvI~zvub< zKcD}F?97}w^PMy2oO!u(-&W?hW(^)RNHdNh+GQH0yb}e*Au~FXOdf}psSVd0+S%G! z%sWi-#0v^P5L6@7G#e8L?F9UF?&Tyx8%K<=g)(uhlc7;=Fla=||BP}ev_*w|QcNRE z;9N}`ije+x$o$yQF8Pd*cBBD#$@dB&NoG0rW zNG}elY$KG-;kJze#t{6?p1VLxo)Y|a-|vS0_?IUa1@?`q-~8D0KfXg%%)sA;_#?fX zh`+H8yW?D2gH|}iac<^I$q9Fj7_9wtgr~4G`K0vi`4d);ZcV)H_Cjl6h4sSD2OF{m zeR1|b8ippHI?kG&**tXkpjCuL$3^(N7=M@GF9m;T_@jf|D4k=PHW}em{7u8(bo`Ml zv+$?m&xt=e=HM@vW12QshL!SL4q(7R$&IgoOq%CR{4h#WM8B zunb{2{;rkj>kwApuNr?f_^ZPo9XH_bCj8xuzZLkq6@RzkuMvNAe75wjt>H7h;b(tW z|Lb3zzU{;zxAZlgclMUD^j|%H(}&L{Kd|b=udi@^vbD2hYI4`4vlb4U-MsaOL#Lm) z^X<{EoqWoJKX~4KefpBV7dDsG?Yq1Gr#HR6{e@rjUl2;YsC8$?;Y*&p`=LMP6twK! zn9yI+{nz{7@ZWsnw$euuGp?VOV)H+C=DiDcKU(qjf?qA$`__R|a+eMM{pg!7+c9W~ zHsh1b?>_nJ;dz6Sw*B=F&ji0XW!sq_o$wY?Ir7fXr1QT@aWHn2lxH# zv4YjbEqj|E3cTI_o8g0N=KL*n)|@xz2Z|r6Xg_UB+32f(wd~U`OA|&7-T#jb8#3>D z?Ke*zezfrQ22bm1?VLGhr_acFXa9lptfVz_-<+>)UjM@@uld!okIvXqHuK`s*Efy- z^@_JX{>kqf-hN`+vmf2LV$~^)uBFe;2v=YG?!I6AaMyG9pWIr0!Oa&hC|~}?_O-9*SEhqV%614AD?r_!GmdEeRME9Z`h)iz3*M0f0oepz`sM_*?r`M$`Kf@ zX{Rb_BRchz`1C~s(5b)KjKWG-Gywga0qQLu8Nc4UPL59x4?utWr1<=62B>%Li1_@Z zRGZQsBRYEk{>%aR=Yf8%QCJDj9H70kESi?6@EOsD0p$PN0P@^30DaQ{_1=R4FrGhL zF@T;=#Q+^o&ZYt6Oc($^eE|H|2e9Lo0rYcZfOZuPKp#3lyX>f+;J{GO|g&{E_eJy_CT13%F_ZV?1y4!UiKpf@ZR z^l_4Z5BmE#+Gwq3uZ=0jd|W1RS|yHwzXx&>zV`_MFiS2Nj>2Aq%F$?Y1U zSu+G-B@HAv8c-4OH^lINgo+5?Cgn8hoq>9Y?x4vChe3Z=;{7Z zB-=&f1s#t|eYVHw^M2+(Mf1vf4g209<#*pJ%AawX2(8kNDKYvvL+Y(FM$Wmi-iDZZ ziH+p9#_(sOU1S%>ej8WVz`vSyB^FJ@->_K_ra}%nrbu}lG4dRcdh3Y6pDFdm~09_v4oB#vXU;6Dhzq2nw35x-l?1M&EH6L>@~l=?U74M{yTNIe*1e!8qT z)_>;7{#zE)e=8(Tp~Qi?`6!b9&=BJfBc)$Cq+g{;{?&{#T00V>=VaM0co7O-13yvv zN#_d!pj_g7A^puO{onAbd_!-vD97=v2(+)Ie!MaIxs}IB{K$3{O8#7F_wJZ>{YbXA zFh>7FASd;&HmSE{iL(Rxv}&ho`WH4y5y1nHllVI&e}l|@8FaE^tlq}KUZ;ZIDhGb) zzS=>l=UDwTNc+Z)^S_XKOOfMbs;u{yJb#VQ`f>!}^h-oo&i-(U)+zO4jGwnk{q#yb zKny;1aeL3u%3|94GvrdcY%zL!%Hy+a*T+;nHvWq#vR>KAxBQu}VY9W@(#c zz3nmeo+jICmF*oXaVDN5>h0_lgxM%hheOtDmGhuc?;BG8vHqqN6fCQ(t}3YY71j6( z3bcaqs&b!JP>Mh+aL&&yDDl*ImX+7~JT>!kXH-;IdFB@_t?-Dv_&Ei|^+g0wR8f8t z80Rc6m?sftR20?LdTO%NzB zGB^#P@+!(<3;|n;BQ7-6Z#MYfDw2vKbL%Q|pxqmfkDf-XCi?WEnq@Ub-ZG=mfC3pU zh*w~;G;3;FZF!})!n43zQUsT9=M``RBiR#|!tN!Wl9>F|NwR!)MMZUSk*_+wV;swM z9M?FOc|hklhBekbj$w%FAjfbW$3>3i{az!j-wpI{O`ERF@;h|tm8RL z>LmU0Y-?+sMs@blZ-MmDm+Cs1GAw?c}3L!SlH#-tfIPFUqO|p-d9jeB_&}dI+$p0Y`2@4 zW`G})lPYs!M({|9Sh~S~j7}pZj?EdcOa{j5DxsgM8!93D{40+&R(uoAOku%GDsXZU zXLgaCPD76s#Y#bjg3GiE$*^$l8Wc~x&h!iqD}6`R2gNb zYVVC&rKhqOfoZ-00MiV=aALkEkE0bp@pT2oW!Dvy7L`}TFP2WL18@uY8NwMzp|Ki3 z@hsxa^P!8(`^nrq-{bo8Jbk&403 zS5Q|~etn&%z*}9LGcRv)0Xu&sISiT}(LPqN#WkKvPnC}}Vv#k#wy0IQK^sQ(VN zvW~`5LqY!)%;Xv@9BP&Wi0 zsniMRY`4I7qt}D+sja7=qo&6L81K5L~Umb` z?|^RB-th~l=p-#9X`{;NN^ydANT%z~D96^}Fzslh{7~(eGS7|jZ~c*W_J(UGV&j@v zu0QfiY^9x`jgo0Er-y3i$+U0Wo!CJgqNO2C2Wk0XiAQNs-{44n#{D@c#D`n%ukMih z(+1rt>6u^Hn9raaY2!K@ZO_pjDalHQaXlfHZtQ=@(v5w`SbDFNhv*(g7C(IoeX&B< z?r%P&v{5FOEGKD`yq06mg&UGmC2@1b){gCj_z@LF{TxW=- zHz+tNf4)LrsNfeW^a6!mKLFjU(6bc&7KMJjLT^>*ZiU{i(0{DZ*D3V*3cW+27b)~j z3Vn`3-=WY`6?(TquTtne3cXOF_bT*@6naRZuTbcH3jHdDeng=!Q|Ox9k0(3It#-~$ zQ0Pk(eyc*iRG}v+^py(TrqE|A^kjvetk9uO z1;?$>rz`Y)g?^htFI4DqE1z@A6uKOGnC?~R4h5%Pq0dt24GP_*&|4Jxc!l1o&~p`f zn?k=_p|>ma28F&(p=T)c4ux)9!=mgR3Vou&->uN6D)b(OE-$@sZm&YmSNKDU9i!+9 ze~H51r_kl4M9%dpI4b>!!oO6((LS?riu%PAg`S|$Qxtlqg0Ir83V*%A->vYg^dyD9 zTH)6fewA)h_%jv$7KLA>CoB9HEBq-6U0&ki+)RZ&S>bmm^cf0WSLin?bhkp+Rk|Xl zajluM^A);rjg07p3Z444ag-@^c`1&w>J@s8!Hlp$p`W7ATNU~h3cXFC8*?CKw=47u z75;S!T`p-jw?m;qsL!p-`^j?L2twQfp=vONABMN66;~}uqkxhk`XzQ6}nh$i>wrdPFTi~snCrz8RaT_et|+yR_MtJJw>69 zQ|Nl*{scWRY{?dzrZ;!`hJ_ZPm+6f!Cu|i={TT<5)j#%2{94X-AVz5(0m8lgIL7X! zG

      H>dYdn!0MZlhf~0n!0GXgVQ@HO&fQx^6<7`T`}DE9SCD1ibRwm@IlYw9)J4OcoW7dUbV?WQ;PgC7Q&$bQ zb9xS?sf&hNIX#`y)HTBmoW7LO)Fs1SPNz|tx?;GH(-%^jx?0%H>2oPfr#xW?r_Z1? zb**p;r%$Ccb*Zq8(A{qyE)mu^{mt`8pH1n$qtyO`l(td2m(zPGOKYV)NdABLM(Ba5CxITyfJQ<( zewJ(>mH@(_L&wT<<5Lj2ahg_la`+l>3b|4L7te~ugbA|0dkOn1=&wLA{e^D9m!}7A zsMr1f(wh(atjJuCOg%8IzqJ7h(*rZSq>fAUKngL80z-fqrYH>l?I8Q2$v2njf#LlG zxQH`qk)E

      S-gbQ`fr_Ep(e>cL;OfSkP`d%n~E-GV&-A&eSHuD~COSr4ovEIpuG z^(iACLYp?xU|?xZL7=zgr1s}Ff949>w}Ghn#ySIYbv<}(lC!aEknVqXPGH12PK-8( zEY?B&r{-oI(EWSscDaf_ni;&gKPUCGIl+q`qJqvBKOM~Wb_Q-O%kl5$8r`UI^hC49 z1~6u4y=)2IMkNBXymJCS4k1jQ6Brt5tWOw>xNd3kBe&FYU>8vjSuWg#x~<5mw-K-(3|#4Di5+DaT9Xzn$zGhjB>S4|g8tq)f%FjC9D4iP z{{DSW>;C!ng#I`60D|xf=zguFe^>BnQ~yU7ManfBz=PB`8k z2-@!^|Ftxofbm`Tzx0d;9LV&)3;T2)(jNocTTk1xgBI(^DQz0UM3+4QCa~)M!EpXe z-Je%>&~h;{F6{JAPbjraco959?Upqghmnz!k+hCU=AzcoG8`$wYkCe^uIa|#4m~(0 z1;wUYyQbS909A8!QrC1lqK>ZV$y>i_nFi9l{I2O2Q??$w$%gct!mjBllNcZ=W|Wr;qFB92Z7`#)X0*+W zt}~+@X0+3c?l7Z0X0+Fg_L|#jZ9VFcv*6KnJ2pM${i5mqTB$qt|WN zXv5f&F_)$;e}G&K8G2WvaK*kCyBhDI@>+X#SEKa4X<+OG35+h$MQ7S+g1MBSf>jvp z1LS*pV5F5O{wErc>T2AGUr?v({zmeC1nnXqPezJdx2tgnes@`%on4KuiI}6Sv6o}7 zywKJ7v51ibB*pI6!iy^m@>zW%uGZBGm>=wbL95OvvJ-{7wf?Q`EFO^ z5zy)AYW!A2!1Y`LXIb$}hn}^qt8tV}bTuYNViy|>ewRI|tI;8n)4CdGa?F;kcg^rJ zLf4FX3N1~)B)q`rZlUxySz%K>tuz+)&$GD#BcB2(keBq#8DN|lm~ocw{~QaQggb~M zyZ;Is3g0D4O)*MA^WBfzAoq-XMC*{dh3eP+yZha4J%CZTM4u?eWJ~izcnM~v6k}%E zip570xbZCK&1aoqX)eHY<_e7OV!(G(KXdu_?z@2JW6XB9q+%#e#sD9pNrmRwy6g1- zuQ2q0+v>{No9*Afi7NNK$#^QDY3!cRYgu#IH~sxI_|IZW z^2>;io{l(;>J)~v!N76=@s20ZT-3WI0afXNGCAc!fRLqm0_w*Sr~e(yH_(aK(nJo7 zQj3gIL*tY>A-Yt(?^=`?Crd=Ca9g=`XsD%m4^S+BoKc9n^kS?yKN-wbI{h#EegZ3f zMy(EHd`>}d>h7OO6NeXKt{3g-no$M_ZQo9CzaY3f1^1u84R;8S2XE?U`zA{LZ@(o6 z`qxSSG>ao%k2T5Ab%=OfetSqShBPotZqVLD>dA)h&}zYy+V^b#&V5gzWtVqAEI3T~ zRa&Wciv|n{zl;iv)Zp-bO6?5)5Wk_z4w2aE`kPlL37GLiI}i5vzd$Pi-9PNRKVhx> zCYW{qHq_JqN1OIS66u?#@*FMnBe~i{x+%oR z#s(jCjb}OG$0Bm{TGZI@h9Fq@@74njtQuZUScH|nv5xb9p!*N>L(6$!%F*`i5bJFo zW|eaiT7QX!@3*v`c?av6{HVo@j`d1#c7mSOM@yRoOVhJxvMW%N;0nx5cG3!KmQ4?w zr27x$X8k4C|7xyf)?bMe!;i~u&28RkX=;J!F8@v)3w8e+E|8O5SO?ldHfXT9(}l$# z#sE+)P1J=gEj!sOeKfkRuqUCUQfB`b(Pey&=Fa+gy1$3kaXPwuIxoX4&HLc*&`G}0 z<+BU;%*EyJbB)`fPla_?T7FiDnq2-Ju5o>Wvhpc?Duivg<SfqXQ58wm}`!Q;$=w%>PB)2YFakXHn}(8~(DHIyYqHkd6X#LKE6t*>F76^OGy2*3>pJ<%r=$Bj7+3=p8D3W98ht+W>k(d>|g+7_(0>He*#2R(R3 ziYsu7s1N-Hb@jOh9kDbGNAcX|!^w~)qmLV3CVqv4&X z!(5-k8-Bq~Hx}gZQ|RZy?{mj};av4kw))R$4n%?sz2fni{vG=sGRx=s`*O$aaIQKc zSa$;j31Xe;@3aKFkS2u<3crdNoo_VuTU`DX_Dsu~D_FMvL6#Dz~9LR&Yxp;I)n5|j7M4wwIkJ}Bf%0(;#LpvtD7LY1F>PS_2o6)t?#qWdfC z4$GQ9i6rpZzVMXhEkyEPr*9v6398s@c?v4lp)Hu~gU}T~aW-Ni#L}cE{5PC{L0-La zWwPdTx&qbk+?oVuU|*MzDqN6n4qB zJat0Lj1)FO_*SMhpcxwI!&_#!!`qqUfY$o-aXoT8`1u4>Ed14SdodIiz7jtW$)>}3 ztr*;~fp`*25<){lFMLJ~+8z3OALfd4LEjg~nI#0Q(?To_OX8-ed0tXjhZHkHB&0h#RXzWgcj<)0QSp1v9L~5?Lks zo9to%+GMBoBPO_|zqiSGuZh7!&#+|MUBQj^c8oV-atN&FYQVp9olVQ$gxl%0++e8{ z*d1Uhs`Hh(f;U@v0>%D{|3O*ygwh<0enUxyb>O3Y)a_07rx3-K%q92@w_q>R^gkL< zo9`b_4eP{O3MQ$a>BI~gsI=KjX1NqEKOF_>kL$5P`<&2UOUXPI&=!AY(jJfZ?%Tf7!sZL zd@=U+BDb{F8MsP!23Mksj67#0+;bDCTI%7@(7oh%o4M7_;4G`2)dk=CSs2vd=o7%H z2Q$v30PdGhyus0D3F_&RI$co5271T>5bqiCQ?49Hq=*hO!oqE?yyN$Mgc_g4ys9=-5oATjG#20!cL`}z{ zK;MG<+AgWUGcHEn3*;uQ;C1MVYh|GneG8s|nLwPn-<#0ou#)eT`s=Y-xK>n*@xn$3 zJAl3&FYa*#9+b`}C4)0k9_=OhvANQGA;b$8LP)X?)&Y7T-5#nzTd)^779KP`*Z+^) zKnX2xKK4z^1q;UVz0Rxyn8)75AX@i|%l}V(Tv!(~&dP2?0NJqOME{QF&KqAuzog^xOVfeT5Fy|ZQ2PP(Hc#fyg6s^`L5LsQL!Uu67*(1c0+B}I=Qwi#T<8{Z zp$}FlF7)E3q({;){D>_;%S`s8S(F96_mbYl2upU!q-}Q9E`5{_%@JQHmGS0doQ<*z zx8p2c&>74>1Y5 z54G<*pXS|&UEYUS|EqTC`axW~+zE2TE(=%)OVceNl3niN%!pmuZYI0@5ZXo89`}i2 z7gk5aE`Rt3*=6)gU`PMXf;Fjs*HeMu=;@RUX3Uq=rA)=}i{%B`&@K9wn`%*QXr+7_ zrV)lJsRHyZceD*D&*)ZyKgNbz%BwL=IIQ%jNvYpEYP;jKDzYY54ohMl#{>Wr)skdD z!LXk5WdEw05dJt3eT&CY(~hU2J^!nAtVX4A`q!l(N9-7ceyD$q1(EDHg)<{|yyhmd zBTY82W6{To9l4zmJAU#JS**!!Bi+L`Wx_Um*-W)f3gts{#20##3c)sI!ZuZ<#S@IY zXK37`4kik~I5ghTKu2RM z8=CjOYLCk?VaBn?89a~5@$M*eLiQL2BH80i&WzaO^Ba`$?#(@lJ-CGtdt6Cbu!n=~ zvC-Z@7Q|H4#4(JaMvqA#F1NG_afhZb>RM)uHVlKoCW2ksgoZjf57CIX-7(5XreR(v zzJaT1vg`4za~rNol63_0dS;4PXIyN5*#p7;SM4(y7mefCXE4Z-{<4IHurz&!3(jPp zA)FbpPy2FZ+)MpX*a!O&n?)NV_IavT*r!n1rwwWn_MsTYQo}yHTJTEy5O?S|R1_K} z#%TL680;h1Q=YA=H8?8Di#?@&w{^SYR4gsL5NNHPxuJZXQ8cU2@474^~@Bp zP)z@sj^_T`_Hm9o;9P~}DNeZFLIiDTSTSOz{|HtK*tWoVL7er%a9s3{W1pS4Hy~o4 z=b;_yKhJ|m_IZmlBlcNXr;KNJ>=yRn^#ZprVxQ9}3q7Mj+NT2o3j0vZN~)*xI=Px_ zmG&X-(7!$q_94b-`!E>nBiLpCsVb_Bn1mT%5-tjpw8S&X56%=O5zOnEDPj`4vVMCU zZTMfc$EVnxi(`++L5|pCJPToIx)(&U#}k|xvBw@C*@L$FFux39&B^r}H!ot3)qf{@ zjDCYWI+)ReQnXHRQ-R><_h_yNX8cuBFBMdW;C)L{?Sh&gO+7_W88DdfndChpYAX`F zAxYgMsHX|4O;TSI)ORUq%J7t+z9^_~O5S!sWkG`(A4%#@1@#lbdr(q+g38HY#sNva zCW`uJ5(RqD1(n4QW(p_}X1fhbY-ga-0T;&U#B7{mVVwY)?hm;J^;()P zpg5JLSNve7>V3?;p{bBdoDWmZ&4f!QyukIJ%bSTU+Jvg6@1WcL%rA!NK|sv7~1)X~#JkD(51=0N}J?LDa8 zvL@R~`acT&KLiaykA!S#o)0oHl@X}_Fien)us`%@k1##eOC}Mf7$vDBg6R<7y-O{| zya=iuyxmUrAx~>TNC!NPNZ4^$&wc4xN(fi?-_E7zZjcf7edih1BOMJ#$NQ!_EL)C- z&Ou9>JGqE2bEdx+TbC8Xw3)%eL5?O2ERO=JX{YaG=52-`{%t5+Q1?8S*!LGP-jLx~ zx+zc=q#((1gLP2GNi<8tbR?iN>#sLtOmDduLyut3Zv6IamwzL(Pv1T>d60I)RHG58 zJHu5NxeWXj_JnM{KA8GSDz4Og9(smVC2;mVD)(_+*wja#@23r0owSA?L~_yoYh+sc z<6kKQofsK>-;4#jVR~Sr7>9yW=`84(VQBZEhb>L_kzUak+KD;n9Y%Uzhd3S3dk00G z!TEG40li@@^MyuI)tewa9V_*VL=iabP|NBslL#o|BvkS&Rf2M%Ad9+INF)UzdL8K4 zCnSHliG{{a9V#?ESfvpj=C_WJ&O}7E&S!th+Q%2kLxw|#TR~!8hN&{1al}3pQrIJGN5CFjP!4e z=FmS6;8CMGjX6{(Y6Pd-76*kaO+8o$;TAtj^BWWiPF;a%IY!DbHBM zW96V(fDXt(6G%*zQuw&S8S=bf$n%ttXTKNnTt1LIC(`9zsh_WKRr5cR#~A2n+&8K( zht#Z&LW%^Z;%yFEsQYcy5~YVPFxeRO{vGlEs9rK+A=fFVUN0vMqOi*$Ly)~fkdLb& z$ZQA_*Di0;WgMx8=jpPHG2u)9_+Go%RC!XQJc20XxrRn9@{o7+d3vdq$kK!paAFRHJhLfI@?1ud;MA9^AkPH@$#Vtms7raKBK{xC)6P{( zdv$OEYfTP?Jgc$zVR>$$NN{R8$@9yd5&iIrlCMYH4Y zC?4D2c>(wN_jY+@Q3m&+?wC$t^hgkAWkw9N^uk=w0VhC;y0KWFAwlc4(DdDqi*^zy z$G=Tkyp?r}971qL7H{)FrOSko#T#zXr2*B_^xcq26|HqY!dg!EV{HccXz9SYF1cjXY0-w-!JR^Faezr&>9sUz7|U_B*V6no zX(BlF&I&ZDHZ?DsJIOgRD3#BydqLD)&>yB zvgQ|bmcVs8v8jW$isjOCST0d}>8cx53o3375G&+JbJ5gJrN-+aA~%&bQ&8h0*P+If zA~jan3oUD2i8OUDRVQ_f+r6RV3uuYPCZp*MmFo=txmc=w6Pm`SX>b9M>3$4cODBc% zC6401kQ2zYx(y6$InL5KD{66XX`)MDp$W(dkDyK}ZQ-@7Sr>7FJF($n2q>K3ub4GS zt}@_%uPqu_c)HwgX?hB(X3cC6P7u5nn&~6CWW~B=jVq#=`;>}>W)`60D9t1=ctkT} zab8B9LjyThGtSo)&G1+jS%6L8tQgItnV7+C{S2V=1r<`_-fNQaG zixRLUTEM1VLO@bVtbprYQv@sogK4@TXT=D(4_D?wwa5v7NY@)#!1eZ4_U6+}>){z1 z;ms+Q=A+cDq*Lu+$qovq`aHB(p89nP$;i)zMQTgjFB( zxut0y^(`96ouZRXFM}&RM6yanv~#u95o0|~)kckF{nYbNHPsYx<4C8LW0*$c8LFp- z;_S<){%1hv>YFJNoVs-xsy{zceFbjoTC*O@Y2hfpC38g8Jw?{N4$?>JK4xH%GIWB; z7)PH$ecXjQM8$Kc;tgaC+3t0qTh=^5+F~c2rqnHZ(bI6-C?`!o+i(gaT;ZG0Zh6v2 zO^C_3hzNL@ z6p-{1E8tR=LJokuM2K|r+3^H?68qJm@g(45v{5gW*vU#<5K&?wuP-nsz&S0=_t9Ko zjLodOJwkV%haTW_o_N#qD?5%+50v%r0 zm7dDcS_CU?)r7AEjVhq+1ghZc(D~eiwM-$@LYh(OQUirp>*8K4)F0XnZPHmY6{H%7 zE!={8+GuYPyIr_73b!`B*A=l zG+}IHF2Lk-i#Z`+=1Q1+ZZ9&zSqwv70%=mPmxQ~KLbFXM@+^YlWlT3E#0^_RB@#v` z%=w^)=i}T_crTC&CDPIDk+wOcP=zFvn-T))S=J@i0)#|N;S-NUkT%+>7fY}X6U-Ql zD3|c8JSg$4WY;nt7AjKd#2P*gd#w@Sbct7};7Q?h1~Y{lBZbpRIE{o`Z3^eJ*Gr_+ zOr!>hR8L5)CemA^Q{3TJPe{ZR{yQPTtvVs7Gq{3ojtRZK4K(4o4r&r9m)b!pGn=@E zvDS+$(i%0<$4!)ek_m>- zKBRjdruL(8ynjSo;c>XxO1dX*`$7|d)c10valI@9PF-Z<`V^Ud&tU6C9>gNv@REO` zER@y4P}B$SH__T98fCI*3fdxx#(6*^-ta^|r`gDB1e^?!=JQOrP6En|^7cDI7$6@6!Pu9Bm%$JO--6J%Bo@x5!3=d3%1m0C zM>03cOozO zDQ68&qc+i_2l9r&$hP&87YT6KUsl>+l>xR2%U`0x2SVp;jet1F>mp~)NeqHTH&gkf zx$dET>$pOaj%p>dMAjFdc2ccTt8~opZ!#4opsY^v6Hx$rIoOO1(~oQe^#il|U#aET zzl?HYs2u&E+`gZwHG&{6*(^rkc*_dNlda-5m<_NrZ~G3o^b=JQm~u^m!b7=mY!g3! zff_EGSg1nQ5G4I@6Q$M)$%qlH{fP_5LjFdD z93G}06|z_1Xj+2$Lc;+N&J#6*tG0i1p9k$uOm@X6HsasTsj3=b4OMk6P}dui@Lc!f-FmwaK#cdbk(OTJ%n z@97HPEb}#)|E>(T$o!WvYw*Q{ZJ}Y%K$LStR;%@xhC`n`kA_w8guIzoeSB??8)9kt z4RO3o9Ct7WP1*i!p~um@@V8PKbU(P5K9SQ#IX|ZyUhjdjnkYNL6Ru!w;c;qGSp#({ z38wfE>yPOmOPBs|jsy zYG-ITatIfmZPsJB;otF`K$w28tPZ>B)WN?u{AeM3n_#9WEup&JmR zT9+e1A=PI15ial-mYMg9$G)%Of11`CXD19&p11mcA#IJpi%th-<6-wi4R;MSV8wyw z_^p@YPG}-7*@47W)?e!E_iXjqri4EwrRdr!dLk3{SWyozmNa>^o93XoPcNHaKj1i z#JT)(>PQ*8+&EFitjCY)1xM?Gx&(njy+%+MMNS$hxP#sNOE)Z&? zsr7<-OEh(*pst9f`bBLwMN_v4>dn#A1c5+6O50il_1DqVL_z&kH1$k@`b(N@Ptm*&2;TM4)D5|;$w#B9qXh3G(bS9MQV9??eleOiL-1~nrtTHBeThs( zJC6y37#Z#s)Q6%GhzYel9Zh{!P`5`@DGA=KajCzJmVv|v@4L~wuezAJGn%>(tyl!+ zN@`;u>TN2et$cY~8SnUJHYMHo-JsJu8+!*gh6Z6saA=L+oe`C$vB7^s0zDKxZUH?A zec^U`>&5cfpp2ai3OzV|!&J&o-&OA)Q%L*e1hv8LpFIhYabQk@z}g*e$~z z8HQxoCqoU>Kk+BXFiD0s8PdiWV;~aq{WN! z4jJ+On7gjGiE{|NF~;AmH{#7^=5$!v8ea4Swge)NW44BW5|f@1omQR~^dBwFu^jje zli8~MWEDLym>SbVW*|F-B03_O6mcWspa?c5vvrCTBI2e<86x=<@gh=qXr|@rY8(Atj@y}jN1eeH z_&xQ7(rioewnNC}DzM9zU3PG$C2>7J*?2J9a?Ojbz@Ivq|Ct>KDD!rEFJiPS(?DS$ zo4O?~gGgeFAl4H@E5}zg$SmredSDfEAh%s4iHTm_@Pb>Qt`lTpE}dyfehV+``G~+s zY?N+Ca4^TR_#L8A8$hEXkT(A%k`K?E}^rnf0!+wke6+@9+o!PnpE#4%QIKm!U!F-8W z=!2_M4{qj1uV{CRIx0%#xI#&f18b(mT4JYhTI9epl3%7Gphy8{S{80c4IBAkQ7Va7 zekH$!e1VAubR#j6CNC=8LoLQOC#oUvxqgpq;1 zpUUhZl29Ev#a1MtGdZ5E#k1RlnBN6dJSYvFyo5h`tx^-~m5OXj}c!EmCwg}_0T$xMQosRYoueF#HFEn%u`7nEuh4n$>k zgMXtvpQT&8n|!60v_7UrNV3_!iLLV%#gDu=EbqqdoUGQcCm00#6r;peGBMkfnsosxOoWO=YbkPD)30X7r(+$$E zM0;Ti(ixz>0XPOeE+8#_gcVaL^3j79VsRGZPUmrLXe+^m#v9;NhVj}&Vby8NI8Sj} z5`e%_K->m&Mk zi)y5)iX>Y6DIhq(GVUZYN%JB_ShhD2L)Fws>Y;B?h8TIJLh@fHjtBXw2LKOHDk1=! zu|w#MYC~U<_^jsJSsMbCl)g!D=0lN-cM~TSLBC%3wowe@$wDcRbdY;^R~mX-%a4Ow ze%3!)(}H>QhNfHxidl2Ksk`vjtwA6>)PUg};oYqwe7+qa&D7mgvBmmi2h!wTVapE? zi7dbvy$3v@JAY43yKq>VlMCQtGM8L3?0TI_9>A^_)>TwD{oLCLyn~jj(J5h)1ZG|Q z9@q{81KWQGEd^U)no)Mt*@H@&X*~h{L&zTe0wX5BRBD+&>`YXLGnFTIARpn6+i*fP z>|roiR`=recvHTE>x6uFA`g|0e1A5FLQWLgal=sAeR7iwacv}N50HgmQd+B&b^u9f z0b)oxT9K6WK$7;Vl70&*EUV9tl2n(HhJ=J;QdCJH5y>~9hsDKo*`<4gK6>C{1zW(rBs39rWD20BeSzN8}i>VJ_=n^B3O(^n9OgwH#Kq;}Tn zd=M?Gufe^VruEw&5;}DV3CFa|Jg!dJ`Z`JK7LuCQC($vm4PjN?km)_0SnWkOQZ`lOWONLnZ)qtl&!x8l^8nxGvZ|Z z79pvy{*@qFR;NTsdjA7Lr_+UmV}3gQxH@I)7m}oHLQ>QE%m}Iz5Enar$_D=lC}v6$Mj|&S5mfq8A;j!uOm*@??ygCVf}m%EvxA{d9&|7_&cG~naG0xV{UhFIFO`l{d$tL7syc~ ze;EkJ(P*5M9b;`ZizJ2nk$9_aI+Sm6ebfWfjlF-q7& z_X%O|5<-sIh5L*k$Uwrf8?;HyI)t$1EYNa%VKarWJPTZ;2wROfxq&W(6>jhi1hK51 zf1;|{SyI?fgpgw<{2RiyOJVb4g>5~)ux>@z)u_kN>`RD~u!X9yxgc6r|1v=p_E+}` z&1MN9$E^DC_iJ{Y6xJInY}@gLEmMSj5A_(rj+VmKtHQQ}!Ls`O;i|Cv?-9b@E`%KO z_LT1zwnGZr5-V)`@r7+rguPf1whVF7Y^y5lAqZkwJtj)nX;RqTLdY=}{2RhbhA5VlzeIp+1O;|oheR(GtBn~pE!4n@fE zijd`qlSX?;$ZRYJ?x9oGLy*9-`tL(kDW^#(cMIvpT<~v58H$xsO!Wg!S-pysYk+U4 zax3B_WuKIC#l6UyFw6xq&R3(vZ2Of^W~LBtOhe}PE0ZoWDKjgd^RbL#ui}`~|09Z+ zy}&obJWGn106bRaeI(_>;IOQ22Mzu?${sr0CM5iYkZkM+lUc%1cGy*HM-V`Sl`yLxW6ohj1}nRd%`zD$?N zv{$AZWV%JB+hn?3raNSMlT7cB>28_smFbWO?(ty#-r>~mswQ@G3GzX11QI5qEnz6NMqo=RLoeo5PsLE%ie z3S>!?PKzB+%fhwxUal#>8;rC|&b^VAMoeD#E`V@xXW{7C8D__Ofa4Q}O+ko9=Wu@< z1Q`}g#~t66{d7B86AE)L8&*%mA$*S-ExCr3QQC#O-04 zU%}0cGM!B65oS7x(wF1rMwy>L={s?=q)Z=~i1a(S=~1Rbluk0!J(OOAn;~WX4ocsL zdzxi>6Qw^q6iKh6^aWgF8Y$nUqd6)5(+`!b)cSB~jW53rPM1N>BbQl0K4#^euuPFH4~Qro1e{+{>l= zSCn_B(@kHwK|Iq%*X-#wuwcf*i*ct9Ug(Znzk(URMFK4SZd@!sSr3eN&aJYjlR=K_1gQdzy)<6OUQ-T zy=KT{Bho)A0vSRZ3G!ovfSfHM-=m~|H*$tOjwr$EF|c<6gkg(}NTvzfEMe~!u=sQh zOZrm*Ye?#ffqdf!67oJHQilkH7?Xj5REk7(A}$m%a=L(j>mrtx(T2DJjxr~y@^k_T zW^~C+Quh#g5r_@M7Y$;jxE-(Gos3AN=$2Et=x+rVwLV#xkILio85y(H@Bbn+i4l+eiTrDp zAqM$dq)9iU5UYir8<*-k8I@3F!x5t3KSaUYpt!c(?=Do81BTP$BEM;s$nA(o@IDjy2nM%fk#~(_4G1MiWTxl7S?0soL6gW=N#s0%e3gl8MgKe&`FC-VZvh}9 zyG-Pxmk62vi4ZbdP2}Xb$Q5ys-@+CeBj1mRl=%UP{9A$iiYQ2WcEm+~d~7^zj5Cmr zU`I(JJ0)_CK)%gH&X0?n8P|d<0mw4XHIWZY5Zc&>5ZahxB75T^AB?MwcScC$2N97n z-z|~v5XfI9b7M&xEpd_8$3?!#K>p_B2=Ww(JXs)bFp=BiBHt?*V!Un@09hMu6ZymO zLK}Za2yHAgkvGLfzA7&AyC+HHhY^w5SR;`e1@bv2a(7(h#JI@g4dic6j3AGf$m0a^ zt_vc14#h?OvtWqPMk4@O8}m%$x5RKh>GCy*~Uk(1&gPm3$_B?j_$!z0LNOXM>J@`)yLN?hdeab<1>AZug3iM$QtFpZ)- zr{F%@^CNoJ<03yH7-F=s3!4Ir{3s$)8`nwXWeB0?TTJA_xX6`pky8z1dLf=fPL#+a z1v0&h9`g+K!TPw!7sN$ggS`Qk`AS42^3xb$NE=Tegv?)vp^T7Q<03zN9#`^JlI4YB9Z%PqzPttOythE$P3~k`*B{wGUp>A zW&S-7NgEFd-qlPR=hNS z2$c$s9(E4FeolgQE6eDnYI=?|IC8Izxeg+T$2CuIy(_rhiRKEYBUe6`8ys1MicsIR zT;C_CFPkbH5>CdWTqIBCd7R(E7-l}Lj>7-?j?PkM62r*z1VoTct?H|r@fEz zS-Ft!7Xt6jSiFoFyk60cb@A{t1#gzXn;wf7z?r@(-wJ`39}n+J-W3q?9R>s1doYGC z{2_J*RJDJBc!Oi{KEh6iinm|zCB?)01Mi9myr;kb{XHJT$FI;(@md7l zjc5?hu1xlST)|t0RK1B_7^l@EYUG`GW7< zSiDcM)1{vS%PnREZ#os{Hb^|1YdqUyr+1V zP~aT~1KN8qhA*5QgV!tg5@Psx{2QU*JuLX{kKqgd5<8Eoe073vQ&JrLE#+NGA>YkH z&*QqF!SRxKQrw3b#%?(#~r(7;KZ4T*mt8q7lBIzZVD{TQwgYR zMkb{YI%HTTL$3_$McCLtAr5?Sxkbb%+GNcbKX0*(Vdd+Bq8ErA6 zZDzFHjCPpOO=fh58SOTsy=F9IMvs_Lx*kafbVe7PWt6T;(t)q7;uq(JwncbYn649z z-H}9nazZb9O9|f4xTXas51@~1W4d_ocrD_fjiE3c;IoScf}=0*;)A~20lO!ohd14Y zOggy~8Qkf<=8UbBL7zB#_tpJ|*a#Pw5koLMEunG~jrapq#g zX`G=j++>b3{E$#&I;fk+`2BmZNNEyUiXL&AC(=;#_^~6->E?*T>l+@X!k2(Cl(n1} zJpzx%pTJ5RzFH|?i~Eg_hOa5OQ3o#_+U+}KQ8)yOQU4<4X>`6`F26U<-%-!Ro62>+ z53h)AI+Z%O|0uoxKH$KYY&z+YZ+!Q9J;rZ^Vzo56qA5w1ru~@86ds$U>2^?DfqMF? zvZW~%iQGUn68LJyr_c(%a6_No#8;S*knhRK4fyDLoQHjL#QM$|SdORH4}@HG_?$@K zR);fqrP~>}hTf}$w|||07J_O66Wy9CF9r)Hc zeTCO8DjP|BGRp?CggIP81>mho^lK4VU3#(O%$U{PqBR_B(>M zPNF4+?o-iVkDl--iDo?(?RtquSqj?K63rTNt7v#hK~H!iwj!xHxLqSww(}$!WhrPQ zBw9jfu!@FvAM`}tfQnlRV$t5YUQ|R`3fdMXMWP@6<=pj^vx-t0g>b?X6qFqeI0F4uRn z(tCeQ6zq%p_k~hfgwN_WQ;o*^n#BDrM;GJ~y121rSOcn$RNlNx_Ye2EjQ(!aKPqnh zfANwU)cQ9QMb!T%isF;Xo6%}~D&~M_c=*>Ko8zVOeu~EZa4EPpzP=9i<9(*hyDUxb zpi8>~wTh&W(}0Ove|v1J@5UMq%fW9(*q;yzB5qgMQ9Z~ct`3^#h|6Fu5m~8Rq#T5`0oQmfZK4(BEkB8YNx`g z2MZF=9^tK7`ANR_p|;TT)ucWMHPo&L%9CAz>unhK(0Xo({~LVO{hjbqz#I1Qhr%dA zC$VBYSM<4R{|;2IoT!SIQqV`g>BYks$MDu{jMw<24iC=sS^5-9)43SAo%ooS|7)lJ z%g|yHsPPECS-+K-@bYi|&QRkKd_;j(=sdFTwKUVm(ug6Gz92zc`n#+GQH?R^PWA685W1vUxdEc4!cYHwk z9r_mY>$(1rb6k&e6}E<<<(-I-mRF3N>F>nn74ZNkT~7f3)r{|XXI0oSr~CmtuD~q< zYq$KaGrsQ&GCuDP5k3tS2@xvkBWf#|PJ=v*l3xWK1QzHzKFaL$V)s=Ms!}oKQ#4J=Dna3^7zaw3(dYLSuI6-MEMh4foBk~JyLE~E@H==1| zAh#>H0xwFzr=0UqP{SwY3+cV!lvPN|b<_K-DdKhcd-Xv*zC_G}{Ozm}C*hIgY7)Hh zUoalVZp)f>npYeD12X?(bh$l$2oJ~RoYn~l#vl+YVo7K`^y(`md!FCp{- zyh`v7CjvbY=op{m8;a@G!n-R_AHD6ETnoc6v`ue^@xMNQ{anJ7tamp{bgE`9iIIOe0!*Vo}qgGcGIRx3mtWp9~Jt=Jnr z6C}C5fD(S6040ooxoI6luiH+>hu`Vd!#yZYAO1!2<%?$Mb5$%6X#yGw-OXOISiE4F zgbiPWrqg%;9AMB}&+m{hHa0N5j=UiX;|hskBUO9DSu~TO zry9%yTOo&fxXV2?H6EMGQ(Rr?^Jue*>S}$q=|#2W#kQOZPo<~IXLFS=ttqOxQCmvX zTK+OTeXUVTnUJE==u_6^)m2(@@i<#Fsx2)gHC>}GEHA4o=koNWWqf=rKI^0?R^wae zK5e$!6_rC@ovo_%XtNhMBQmO$u#l+`QY9Kv60O3+pXXC0iY1%1$L1KdyF5!vJj-p% zYRXG$ZADcjwi`V7PO-0+YgKDtabi(aap(iplrNP-QG*mMhCww%m^;gsjf&^anqiw& zUg3isqV!>~M+7hkYUMXpR>f9skfJL$s7B>^-ZD>3d2vyNO)sjctgeEK*dRK43^l>v zkJN4ujM`_<%g)WwDvNw&!nb7eO@dj!3oc;0q1;zy^VAo6ygqU_lh2Sy_;4-&BWf_2 zSd26{g-J35F}~$!e6vw@hP?7+RcPJ3>N;O})v^d=Et8e*pb`wol=_quE#;zA?UH3h z)^}qCJQ$fa8*!#-m(&!Ml-JdQH)TSGEh9yn$7zv0 zQM;t*rt(Vk9?G{(oRp$vi?qm3*Dmo?c$OEDW~jET6kAq`hK?*qf+<5YZFW`Ba*wvq zQ>*3H`8>AEYf3yd+O5d<6kX@3v5Bg+%j+uBzOprPQY_&77E8 znqp+72~y@#2qw8F3X;d;iICEnl$9|tJwnP5q@|ge5z-_k6{V)51rlqrAWim^L`a!} zIq%y5Ib&`peDjHCnnKsen6D=tAc+4s=oDp70 z#!^$bRMCc#rKM&YQbi*?Y3WM6q7|OZBKU?Oi)eYXubfu0oZbxy-(sZRPx1%^UwG=3_-ZXAUacX9fsjD<@M{#QDUXeeKp9r^wQe8rHG2cFZQguarKhsG=0;mlMMZTnJGHH}2vw9^Z1aI!UR7MMH1?uGnX*s;j85RaN_J%ZnU;jH92N2s;%>SYKp5X z0O+ZifUnNNSk#yq)pZpmTp6hjU7ngUewnafb&ajEx}>hcW1~^hR$5bCX)7g*BE_Yb zLiwa^j03{NnwICASXtzC&du{pE+{CjuTM=)O;g+IEY9<#rb4+j1-_c1a$l{pI47?N zKRG#h83lR1^a@XHtrJnABIzwEuW|l_vOvno(I%GEdbP9#PAxsx<15m%ObTWeQIwC= z^cmGvzMAR^w5$qKpP_FfOr0e2vxN`QCr{NQb<#1zzM1X#xnsz^le)`?Yg@y z@u-RCKYYiJ1z&il0WGM2((?tGY z$2FM?#@%$S#ZmXjbK&QXj&@AFc!c+P+umtoCbs50a^s$97p*z%y}x{YVA|=ci;`9s zt($i7`!9vBdnR4VlkOOmx#|a*s~(u<9$tt4?L>EM{i#w~wRnywh-o6)4diOlY zsZU4Vv|Sdb1Am>nEUzH`$_tui15c+z({6u>+JaRz9V;nL$DlKZOrd)u3AneQzu$(q z11Hql$(rUa?(c6KrfG!;I}r9FOc;)|r@ucRp|!NX--<=Q6=yQ}2)hxsAnZj*-{S7X zF5)_by$@g!4BS41g$Omg)1)4u6=5qv8^U!6QxJ9{bRg_O=tkIwun-~LqUl9wL)d^Y z6JaYtH^O#=We7VEHX!Uo*oLqdVF$uKggX#wct1@qLMy@}2yF=IQx|T8^i{G3gbsuq z2=fv4BJ?7(;tf142yF=45vCxdFG{B14Ocw~9SHjnx)COjz7X0FdJ$$K)EK1Lg+ZLLFf*!a{_72HB3BCJQ)+XuN|A3Ct@&c~pe=4pfKt%J@SF+72; z+1f$HWq57V67a$n+9}pqrzFj>oP0w{8LD0Q%=$k<=i$i}K^g_^M<=GEKKU5ILy5_kd6z zLnoiy2)Y;aFR4KGDb~ipLp~jR3LG8>m3td>H~RiD_6J>$Lm!GU!2$XRMi4)Qa~9~C zap>uwr-1&`7=9P%>p;iTXOV+&=-!rY&<{iJ#zFKIpl`yMf*~Yw5PdD^9q4zmi*g>d zdp+TUzMLrB?!gtZ+1&2ekY5ixQj2jA9$ho{#-V=;dRZL$Cw!i@rsG&4<_$C38+5t?8 zDTi>_{_ebcSNmq)f^m|QKcYEDd*9r-bLY;TJ9p;2H}|Ox_!$rU7T`&qLi+Wf&jL^K zocRf4TKqMCRo>!XcBQYyAJ|jT;$Lxv)$9-LUeN4s+_mt}{rf9??|t0g2voCw1xP@O zDlO9Q&x6GS;1_)`mpgr_!*37qyTaGz5A3c$rCru}{*dqb>MH+=W`Cer>bGL0!xKIH zRY1T4Td+9N_{_=EnU|+6FV7l()c4u4Dld6j^89+K!x!XoHvxPIzczoge5WV7h-Rn$ z1T1a>zr9cAa%<2}XWZM-q1${_{+ecgWm|RmE?l+wD@g(xv!_76|M^^QyNmulre9ZG z-s{v{S3T)eY_HZnd@&}>JFu@`Vl5%LuOvP0@wNK{SCAfe)41$f(C#1f?X#-%ctD@| z@mQ+`CV6|oXMZA>y9d`K@9uIaeHV>K`88GkWxzn}PN#olKbL~OX~aEW$=<&W{211_ zTIRE>e5lG_xuF`h^|;-K@~@$sPH7eB*~^aF{3+jZpVzPvZzPg?G5WpZm0WI|5a|CE zN3WzmN@bTs*Xxyi;dOtwG@#Cq^_}c~IsOjDbGheWFBR1g zX3qBKWSO)5cK_b8^2bUTYcF_Z@%J_K>sr`d#s4DX#cytIxBF+xec$k&OwQy43*!4j z{MF!r>S+iHt$6Yn`0iiiTeQ?u&^AXq&N}fPmW;;p-To5XRqnb~Wh<^Aukc8P^>|g; zHy1uzc4L+AyNf9ENR{0@P|&cuHLFgrEh zFK<>?erCh&E$XGuSl`>CF8$+kL3-ag*7N=9he7Mre)WStwO;R6Plc>oHmR4x*6o|r zTea5hed^LW>(xH><5kuRo7F81*30Ls>l>}R`qfpdtvffVXIEQyY*n{?&bsP+_4eni z$2O~L{>=Kj&FcH-T5oMtZ-2o$+^3Eta~@B=US}?x2kvAtn0R_ z7a~4L@>Ybp@n35!NdEWj)b9V_ca!?34yyHj2etcyPU3UjT5A23wbbJ6>xlom>qzE* zT~BgezJdDk;|Z%PBvI)_sY!`~ENFFu9O2Me!>w%mD)>Q!wX_j{-TdPGI(ni>a6{uU#@ z-^kz3`Nd8(btL3me2nwAKIB{=)>Nn2Ljeutorjp==}xhFn9Jq4mXsfTKbIsDi2%fH zyH3mSRX9p`M5q(Jx1%J_)X(K|c^-r?H=XEFqE1Hw8p!+@JpkJd3OFs!r!Op6Qh1yAnE|m(xN2-v9Q$ z7Vy-;+59r5p5YpX8ySu;+{SP>!*4OXh2fnHA7c0;hOaVwo8bceuv)3549{j*&u|UH zjSNQ^ZezHc;kOvx!thRp4>9}^!&e!;&2Yg=M-59Ep3ShH;Tnb;88*J@)?0gP>t_Qi z`i5|bV>+-ZSQiYPQ$MY9;V*^jgQ2=$-KQNqohGdh)rVGl>b(%@!$VRD;dSH7^Yhk? z_bHjLZhVE3dF{qqO6G?fzd*^na^n{&nV)WaWquyJ@r&~Q%Z;y6H9YQae6<>6{krjs zRmv0pF(v-cP48E;>?hs$6IAGlLX30mQ#GpbKfUlLs`bx$;ZIWHcMD5>>g2q?b>mM_ z2iOn0@k`V}PyABlH7|YenjLQh3R&oDA9=+iUij0LX{S`dr%qQLhW$EtSw$%4BwDvB z)SEfU3#9d_3~x8he$l#At`@5qW4wqn;b#qekn!gJtxfZvlT+5u9*r;7^Ciqj_Jhdk zMDLi&RPlIGJiJ%GZr1dtt0?P7)}eo7{GfsV7smG+`2PT&`dib43nY41MClQB`85=j!9F_-JN%W#7weze@aoq>G*qTeQ%#1PpV9&p&x?9ZUu;(tZApAg`{`%A zX>SRQFSh3?;7=l9jr3*U&xC&V^UERG)?Z(O{!ylHy3b+6?p&RWg`W6?zUbh^-LwOL z5{=6$2e02<R+YqWj=%39fUqRfy7Pr`KMMRO)e<%Pi-4xPR{x@3 z%;!aYSVF0@7{3(uOZ}SRaglz7fcKK;Ql<}0I}C*WR!v{*w{I8z+^(FNdAbDux0wC_ z^OybVS-9|$X9##2-vo~@x~bEJ!0Yk)TPLs2Lg4amH2o4)c{rd8YMf$qBh!aiPU+X< zjIS}|`5EJ1WW4NS7huEdrO%hK(f5)+0D3R{PT(C0SwIGV4LtRCkoyaD>GU0LH)`nl z0mi3zzQ~!I!@zsBn`8PT+%H)JZ6 zp)LH~qv;DV&h<~3f0HpT6;Swz#pJ3Uc#`J^!=9sz-*1fL7a70TpuZY;l7BDD&&{jv zF#U|d=V8Xz7;?VOctkJgB;&OJ3h~nasT#jn9f>&f^p2m>9{^ANsxkP~15fslVtYVV zr#8mVGX7-7Z)QHTw7?;aJ3vh^em~297UQo6-b>EcHUA}Q=5Rn$%Ke*#8%Qtuz7qJG zfv0{2481)GJo&MoA9DE1Jbi}gXAS-PVR*!+iSaUjS2O+ykFV&z2YBM&#C~!{_d=-) zHQujoF!c6i=99X^A=GD&aQR)v?=|E(2)vgbe!=uL|K{+avmul!;U8)|_HU<@@EgOx zd)fcBz-v7i>*h-(_#9>W8w~kZV9C_>#_OHfLm%*7{kj-<(&x2o4=bE*slU{CzZz$K z!fopGb>`n>tf%)ge)cYhPM_Jr1T}f40M`eK60N6GuG)z&8PVJz(L^29?W%C4X3l2?DWV; za9G*)+SYD+eP>UvZ7akFB}T_H2%WLBllJgLathIawjEE}qZ7%Y*n}O=Ces-^HoZe3 zL^w5($R^^!hE1XjxYSk2sT2TQpoN>_~dXl zoXK|fG$JI)2u}hk5^g~7);Qvh(^(Sd;^~Bq<|B4EZ0issdny@EP;^rklq{b;4)w;M zN9J0)GGC&@z})5C>(F+0uN@rEq+`Lxl|fCDN+(mn#ztkguRpJ)dA)5Tpw8~J&FCeH z^@5t$P*ANM>1x9WJHzc`=xkLJ$|h&S_Zm`W35(cdy8yCX-~E`WZT)XbaK0mkh4*QxFRw=nU1a-W=8$}_R3(LGxQuM zcAQ~nk+xdhriVne^%&c13_*H4SjA4=>yLOx1 z%}%CuB9_UJhZ%@ZM7Oy_BIfzL6O{?V&(TPjd}74o#0w#NE>=>X7$#iUngnnu8HuMGDH>qiAWM zivmOQh8NFU-auCavk2E_#%aCkOJSNMBGDe3&DU%~oWVyQZ!8!ap!w7UIfuzfjGxD# zclK_8CS{R@=cFYTBToJjD$@b3o->h#%01FvE;PJS99HW@B9?~fBCHq=)SNVPdRaMy zP}z7Q?otd%Swcn+FNx(jk#(Y;yGgm@F2_i6uvua^fc51PF_pQs;G-*>CKr4MKD!XX z3R!2ntWTy_k^MAcg~=pncF`i!yRi#nMsdoqq48~DtkBr;fT^9`nMz<)A4x`vW>8Up zu=t0fxg5rTbxlu3Xxn2r8DrXOlXKRRHf#&@oH0nkC1yL>fN8P7U$I;5F zbm?Y}V*}EV#>N64BZzqT3eUl9AP+dVh~-xb^fB)|4CARKQ!J?BwTv58!X=yWnEzrN zScpx#VJq=Kd+-U@iu3Bk&K_>WYl-|o!-2DlPp8~Q4JLVmY``Km5lh4WuN!u@CPSF+ zdS`;hu<2Z#--`359$Q&>LfrY#CUB_4($^ERyL;R&h&t|eFSMb}jDM(y$$$0WIE;xt zq7c!O4xhmoPG*V}QRJj(RhhF4uZdVZrr}bajTAY2kv%+ikxd`wm}{N3>Af5Cqd>Wy z4_M`o#a@g2a2?%0YMa4iH>{Z&?Bw0Z@90Lc5$hH1`ZBcj$cE?c_-Om2?*k#D*OZ{8 zwI@b97rnGP_eSB>va`pn)%bAfTO(5uUYm&DkwR+gpb>P=xO>JoP9ohs4Y*D4R7Zn& z2zV4&+f+7#A;))Nh9`?=y*d5Dw!LlgSmxhH{d9@mis+BlkX!NayF1ikV|##-t|Xwj(tkY~MB4A>0y9dGjq^yTi4x9Q`RC-f((a3yXmp#A1I?YOZ0&#^3M3 z7BQ9@x8>tqo-JrOP{sKw(64i&h_86j*16PeLxOJZ=}x-nL5(>GW?$V~-l^?w`&4${ z)OKu}a7Uh*o+LADZN+mH{;ZSTO50JIUa6gP7K+bZkw49kcEN6+3VKWlH1%)&u?Wo! zv{ZCYt(QX;%e(9|#- zyZ*494T*7osF^uWNF5$>ec>=F5;GD3e6_f-$?;(@NoJ{ar&tBC+fjIcI7u^}A07W% zfZkK%)iuuGI7!ae30%&20rK8Q@xq`?qbOQTO zpU&P&Ud{;$Jix7y{PZXCGg`$NFZJa-p+GtBEA2~t>HiehZ()XVepsNKH>Ubj$E?2t zIO?LjzmfCR0#8R-VWK`1rVKKL_2nF+K>f|1f(r7!Lm<7DFRU-;9R&)Vun_qr|5c;D zoFfz1c(qVE(B!wrs4wRy1>zWjE1CT#_9VZIpPaK4n5uGBR{?icU59*OeL0UQkiM-| zn9TP7!Kg3iHU*wybimZ#9Y%dQ-zo5v4{85F)W<7hJqH2u=RjupzFOq(7M-a{ltbG1mWyQD5H69pw5mM*mIyy@C2Pccgter`rD-kVxVO zW!$8`*x^?|Qz*ZjXYC-yNOwCR|10$czJrp&`uTION1Q5+R9KLtp1?Ac7uJ{aij8kN zl|)WqA@wA`5S0lh{g-o)9b7*kgbdC4i@E)fK_~U=3_Qt7Ng%yfm9}*O|6F^jL$O2% u8E<4YA7h9$-w6L2(28^!#2vq(J4c{+$hk9ly{tRDYS-!0}`el z#&E8pj6q1h9+@8=+9aPI5-%OD58Wjcx4*~9Vc|FeghLPYa+jlA5V~MF;eU(FT_E+1 zWEZb2 z{Icyf``Ok;yOwPqmHJ#_%r8zJrCdL*)YWyt#F=yQrjCm9j^8w{*j88>e_q!;jcHL= zC+u#tPdIh5r6xYMd8~aS$vPjuDfmsrFA2Zt_@&@?A%1ks5`l6N!k^)1$8R=%gk=tX zbT~wy%tM$XV6Wi||{F-xc`f;kOh&I`Z+m62Im672;QnA04ImmEpIN5~ibE z#w%o4iEtHu)iPa!uol01{8r<44SxD@Eh6jjyAHn%_%-3zj2|7Jta!a`=Cyakj{WwX zhQN<%0=NHg&-X^JA83v_ef_a>&fHnPAm&4h3`F)_`8kY`||R!wl7Lb(i6Kc zJYz}pynpQKn%lDL^i%Hn!IQ45XI@!<=(eGqw-5c~PcJ5W_op12_Q-AbKA2t5dhp?x zp_1O$fBUlM+O>P0yYax@vOkPZx%!eM>!JhqRld6Dmn#pxa`=>-m81SR;o6_|Ouq6Y zf7F#q=08%u`^Oi*Ul0|)=k*7+UH#sfkNZA5WzUa3nE23dU%l;11@etG`JGjq>B5I5%I4`2ANM~>ZB_+n#e+h*mgd1uaa-f>`WX7+0zAD)>Ozj^+? zg{5~TtW$PuJALu;U#|RM;?DAxDR-`GeD$F{um1hgKR)rnE$cR((&ViE`5TAISARC^ zj?>@%>tlPjo&SMn(vj!JZCtwIFY|6ba%B1!9~=oRh+fuu@Xf39&JY%l{C_k&+nyYn zcNHA|)KC(q)}9iXzIX&W^*3t-IYlGT&l($9{-)T-^ljgdOdmBaGX0a2Bhy!oP~Vj! z$RUG9s#oC%{HY`GQ$IZ$zwl$`2=y&c6=i%lGtz}4;QwL-Jdcb(-#3EZM@EqU^AYTS zJ_hJWI7>#5vu}iU&ly4fKSpTBH%73}_!0c`ni1-oFoIso2zDD7f&cmu>Au=80;oYE)PCvXEkK9lmhXcEAo&->-TN%H$8U6=oYq$`cg zuE=UA?@Rp3U4p(w;y(?FNU!S~D`&)uY{kR&8K>0H1dC$>4M;eC3O^*hjlU7;Th0^V z2LM3yjx{2!hxbqy^UddJEY!$3x%9}M4&8W{!^631A_1aN%sO5$+t+o zs6HRh!k?*L@lrmGBXs8B_zDMxSLENN$pY)7~a9~RkOoniHwDC=tv(>q_@au@aGI>5AtWhF~~jx`vkpR8g5AXZO1G@KO5~w#~1h!f3IwJ-T$McKNrgS>SO*) z0Av0z|GA3!eKM=;>BJF9H@^wF1D*dOXk7Uaj|F31c42HE!qSWhZ6pT8a^Q6CZye#MyQqFS{PZBMHacq```%<>! zKv+ATCEKgl&g{W{akZrPOZpQcTe*YB+f$VOcLkwP(sQ7P?C%Pz?~kP&`or4s4B)5! z+b-KBQOao_pjFFu#{nGC(B zl7Gs9U&2+sKZ2bbCC>19q!WHla@yt!AjhVP@H%OqLTMlA=E^4N&mGd=^zr#~uJ1&p zCak_ULLAkrBg~!+vR=KiUb0$By0rg*yY(*G>|Fh<%FF!*>5|4DCG znBFI4z1n2GbiF&IUTc^?oF;L$g^f#2-Ojy2-&~ZZ!!G^5u#uBN|MW}yg!_Y1P_S}U zbyY!~yQtP(P@oi4R8_c@f-(e3fn#A#K}l(C>B@>acWLdyoXpDVs?vo;D=JGxUgVsD z;)Ws;P*hoQ4H)OGE?6KXWL6f{)s@yM1xx48D58(rXZ@z%1FU$=`T2?j@xqVfo1y%JLbN zmDR;X?&`>nF`VlJt}&c>MCTaB8txv$7$Q2zFs>80$Z+0&>LkO9{0nX}ywC|8Wf=3n z;wr-mB@?U@IZN_|+GQE8qAF+UiqewO)zdGWp1P{kT?CIQ%684nL6m)P7+3Q2m8EX@ zxT6Z=O`Yty!?|V%uFLA(CuAdGENKCGD#l5SJduS7Nhf5RRZ)epx2m`leoPU-8$sgq z3w727rFEt5MRldM4jKu|ii%4|u999Rv$C|Pc4RhGDYuCFAA?=3%qgm`a~D*VHnALV?Imt37Yy=OM2&e1(!)zKXF+69)GAS6ZtAu^3)~o{dg^Pzb zR^%qkN@Cz8m9B_Gz05}2538{#7|APASJYQjmV~yQ3v*tG!K-W5DyvFY6(ca(Au`6~ z>3Rb@FmaRX&{ST0RY7t2RRv{56_t^T&7^4_+(LY&XjQUIcvVn5Ic?Qi%+`; zQ(8N{psXaa+*$gRuFvS;SL!ONimU6C%IcNLNhp>^x^vy=I}0wIpX;7gfCWQCa&q$Y z6-9Lw#eiR1QMJ-hoa;_bE-o*sEpXQsRk-UM#o4(<_?HdTU@57ufhZsja~`FrrlMeV zX>DCabrnI(bYE-BF(HUt*dizb`g`ZQwwqmN^6ViXlivQ&(I+hR8^OhG6z{Jm4?tP zjHa^I3l|3|q1m!7!CbvB{C`xr=`&F~3}INkVpMb&)K^tpU0+&IQ(c$6Aa_;)ccxY3 zFsORa`dHc)*Osm-t#Xq^3^G}y0KSN|YbZb5_+Q{pD=2W6*H*77fWO0?OKWSZYsLCB z*F8NgXm^RUsH&u(wsb{NB~1Yg(;_g6)aM)vZ0}%2K}p=*7xqU1*@q`8;)bF-LZ1V ziXL6HvQ+lOf48T@uXA9Wno64BR;_{&S78t-;-Tl#f8P=*wKyp$$%YUB{twE}G!_5% zwNpFb?5AR7RrZ2Qb7vMP6?JtrsF>oeuCIYX3DkckbyYo$rMiLsBQdjTv7)G54I%$I zj3U$m=H*tRj)OiaJ3@86yP&$Ppth)LWobd#DmPfJfgZ3V=`8S(mF{wLXIYq=>z=Wy zsOCQ#BQZ3Fje+_+AVYbikP_TMcMP%K>CQ(uwi5Mmm^{N|5 zWTce@ghnLiMqH5*cldH&sjOI0=PoHe|NNq7WieI{lu9Ogv7i@}(%At9 zt`)F3mPWPM-GHAeb2BpwW=u^|<~kj-GYh6qO`aKy8nNk9QK!M&tSn?I_W%q@Ylm{-TjL7P&FZJ2pt6 z7?t~;adcPprU}V6<|Y+|Z7Kr8{ML7x-U!kan8KDrZans|WAER@+I+6q&B! z^cdx0nRZXU1v{Xll}m&2qLinkJcv_-zEMGa`h7hp#7C#x2knvj(K@|G((O@aF`rJ? z)B1Hd+PoA~=o^kNge-$b8cqWevBx_3xF22AukorrMIM8C>JSLA*=wb!*K zdW?x)Xrfz8^ovdOcoV(RM7Nsgnu(rhqGy=sNhbQwP4rX~eXWVUeFS>Xkd?V;v^Vo> zCjMn6IW7}@wuzo+qBoi7g(kYZB*(esCi*NBe~pQ5H_;nRba@Gea~n-`r-{GSM3|PT+-^AZ%qR%nW`%Uy* zGu_mVX1d?RUuNPTFwvKr=;bCkX8NFsKgqo-$Zwrqm`=E-(3UR)dLtiq4F%%|u^dqPLsq z`dmlZ9VYsDCjPA^x?H+&Zl{S}YvSK-qGy@tT_$>^iQZ?TSDWa56MdbDK479>VWJP3 z=sz{lHMuS#KR?$*kH^(kI&e8Ncuy0httL8d*$5tqCi==CmG0j)}*&MtPcvu3w8Ly30hzCE4JSXQE@F8$1e4^l?F|qLiEHSm*|i8WSCtnuAA!iGFI3 zswj;n`UDfb)kKdo(c4V)(@gYs6a91(y~9M0H_^A6=ppMC6a9xK{_Q4uk%``AqW{Q5 z?=jKOFwuKW^lTHo&qPl!(fdvGO(weEME|jgK479-P4qz%U3i$xl>SUURc_*sG11R9 z(JdzWIVO6%iEcB|ttR>;6Ft#H|A~p7WTGdU=&2_9WD{L$`Zz}OM#sKnRkW5aceMYi zQE>jI-7&ia(@@H9ku@~w9{g9&v?E4ou4$lu2*;#5DIEpwKrg3np)`ajfi6y8PigA9 zflf|uqBM2QKnJIw!Gu ziPGfafeyj{yj3Y{8=CYMhevmnO;yiqMz+HKruot>@8UWT5;?IZQ1Z3qns@9F2^`HCbx2>dO!GF9 zSlBk$CK*>`EY^H?w1S+mC}W|+^WCCc&rysb@lNl9#H@KYkSxusS+t8{(^04GG&ra& zNeHy|?Bt=GmQS2M+a3@V_aujRzNYzp9`9)Cj?z4D%=3;r%Yo77sA`ECIyEQlu;w{f z|F*OEgDl^*L)pon%=2AvFBNn={n03HZ-@7~@@&t?tkDIHanC;+)Yu5djI`aVZxfa9 z&Z(K_z1WX1ah`XKzo{W+6yloN>_KjsdiZUk9#zkK8@esXX;2fNo9CObRrAgL))_U_ zLiABb)%>2L>hkBWi&xJi@o31dF-O($%274%X)SHA{xA}!I-2%G1y)eowhiqk1UFoV z1VKf0U7mLx-o-VH*j|pIHh$Ta8TlDkW-QMr80w$ro#{uN{jYvIG<4`O&9l%JGqg|h zA_zQ%?$}25clsVP?0&c^%nSRkF-a9iPoO{Nlwe(HQyP+_>jx=TFrN}i&`ehFhPcKGK>}Ba{m!^c|U%A`1Rt~15vXr-LtI# zrF74>;lCZEpT~F4PTciH>m}W@FQ6QdR^)Zh=94?kH!lh4rG?$IHOkX`*I1Fhr3>-y z*-j!Md3_HjU6kzJw4DMRTK8-|Ax3DI>2ev?$gn|#n;I#^p>=O+6)}po8PRql+F?Yu z8qrQ8+G|AnjA*|R^&8OvBRXhA73%OffFZ_+T8wDC5w#l8L?cRLg_MwLMD0dYGomgd znrB1{jVLcp1e^wg+Gs@EjA*+N-D*TTjcAt z_8QTCBkDJzgGLnF?0i5jJ@!BcqVYyF(TFA)QM(b1v9)!o#I1ddC(n;zzfHe2&FQO`!u zA%g89=;gpmT@peRQtI)>Bj|4G0qt$o(be7bf{59>oBBES>{H!Me-|;R&^vB-)3>0} z(cNT`?%LfnLB>!eD~nAGW?c}>@+Kh)Y#If=*@>F(dcxP;WDhcD1(};%hQ0W_8Q zy@d$6oALw)5an~snxS=P)({@eQ22B+TyaOA;^=Nhv>Ixh@FH( z^Bfp*xil}PsS<65n6%WE*`tutv^z3`|A=#s%r$ zBToc|oiPf5DVIwWfbpv>Q-K9b!lBnNKf^>dYBTvYO1<*5EHx%VsgpuWHMoC{62Flp zf+}1Vt|=<5w!9B1>Vuhu(4`e)h5nCGtkU7x?YMjN=CjTv;4GlfjJ6eH;=&~-HYut>&nr9F69)RAb z;!$fcuw*O#dd}O0yoU%=cP6zdg%%EZ#WY&;W}~_;D^|@3;Htlf_`WCksOLPv2@e+G zao;{gt1|$>iPHhiYsac(oY;n~AN?PK+l`ntKt(gC({{e3xU>wpR{fz@fVs?Bwf=kyHuuL1zgn}@3J zA<#e$9!DCi{g#8OP8I$Gd4;zIc3Ee$_`fnNmk#&HpzzN>to2gmK<+RB2E^7@kmbEXKZok-^coANdw|6 z8UVNg{yGDN+I$)q0HC!BK=z`ol&1<&ZU4*Q(R>Y7&9e)7(4#YxoZj_9ANmn=4LG9) z)#kA%p3`znZTSwR(C^hdQTWKGbbb|L-pU`lukqzNAPS11F za_%LX7uwO13_9Mw6Eev|FyFY-$znceb~LRgi|vQ;ay-Wa`=P@)zkxU0&Q3Q8gz_D z3>Fo54lz1kYZ_9Wo^`fVb<5?9Z751@riW;ATHq#VC$(h>fI2ua(}qOF?QnXl;kmUj4)2w4 z@FUK&qnbMB6>^@Ip8~vd@=PmTvSanIusK)sB zxtZXyhmYq>k;Z69P9LZ914iI;NcZQmfp+=d=J0_32T+0b*2i}Y?i)X*hwd~_dgtSq zo_OZ+-DT^ClI~{P04c+vAx`d2hiM*Yw$Tkqm z4C-BF(ON!nXE>=JqRkvl$4^?l{|S=k^!&r0jmB*0s^91EWq&QFhG*qK_M}{&t%`?$ z`lrYuj81x2(WiBLPR*CHi~_h{JS1zrW?L6E z1p13LdB4`3WwX+zH}^L>vq65ZY$)RMpTi0;^=do$zW=(ZmDGro_Y`j3SDe19;PAJ~ zLP^@riWSrNzJAS96I14Cz~p?Z(1`A6rJ_A3x_8VdOi}m9wv~|3)|5wEU7j(v`e}hU zY@f^i?LfyxhnZ>f?*}04l}<-_0Im*jv2W930d+F{HSZ(xwBf7a>w zN}C+e#E8D37ZKF8aozVkJuO{ppN8L4aSW<|uYX!J5KdBljZORbRVF+{z}ljYAr zc6jRn;$oXWhe4>#i$J82?kdh)geF=~P4tzQnuweYO?1{r)I?-kv=iH&mT}xpzyAlf z(|ce?J581CR6_-Pacc$jZxo>QmI`XWpnfK)SxiL_g5ju5F$PkbrqYEAbDIuOK8#O% z{>w-$)+4FfPTYVwZDoDMR6S2`PQj1nB!3eAhbcKsTl{#V;|7Bog^*HIt`+qIrSsLh|ie$=j` zIWyRPrcC_mT3ebY>RKORvQBbdw)J;sq@QCT3TF@n0 z&;^eQX+aC+!_36z_mKj$pi4Fop0m^Q9;YEvZ$?oF&4{P)rczT7Jr2<>SGuVzl#;Hbd2;KOBsU5kl!FD`}vV6@pE7=}xQ!d(uFWZ@WR}$sJdc^1d z?0wNT<)Ljud3){gZW=5Fe^|30fuEF8{0T@)#zz2<@_o=Q}xW#xV%Bc@>D%E=`;nY?r>x)Gl<< z6ys*#JyW}|IfCs{MOkPUJF2T;z0gP{Fz_{VjLOT_i6Jf*alwMb?ayVYw=!dB1FVJLv{Gs&E`$bXWSz}64LXLk((WHa5|{+@Hf9R8QX;Pt zjQ(>30RLCp>5kZl?X&{qVE&9hy2C@3UHbWLQ z#IW_p%I`;PpXne6+vi1ChsHO0y%x3449*O;&jy?XWNeRzI`pI8yery=*B@NZVEdd) zS-!Z#O)!ElWerNvJT)MwUu|OQT1kCNP*Vi&YDwKKs12di2L$z6V)CWjBzfBfb)(?D zUQ#y+s#j=hmDEZ>JtC+rlDb$>PZkn%s-3CmgJ@tH4LYgbJQ`4pcFxRWbsKTP9f;eX z{f_W5ViaDsc2yNGhA3N~MMV*K8qJ{WUYJG6IawoIjEh5ND+-x=KXrP+vyJnDOQ0m^ z3w(;rJ^lR6)c*nLf7QR%Ky8F^dN#;G|60W$)aEH5l7G=YBwa+7>)SKY02$lq<`no> z#@|f-#kCFk*WS0;zi!${4U=*jH5>e^jSBeUvIKShCPBSMP@_fLj*+}2f_j*kd?`bc zcfO!9lP_hwV?-(oxw=ck{T&QEc|!sn;oj=}jU38wv$djUtBpJv&i^W$4Fk8LN>ww>Vgyif8HK_vtbaUr6Ri|HB>%F~E|19>ir`VaFtF(x~t&_XOtoY1}2 zN6inTP)^fsT!Z-tr{hmCm4G6P!0>hjZ3axjF0sD@*?}J+=4kpBn}qk+dZ0wzQb=po zrf;#2_dCSk0AyXYCkJ>J1g*zO?7xjhLn6nS7I3O_0(@~{jLjMKse3#w ziPevTN7CfwUj`l6+=2bK+4`Vf-I8G;`_n$^y|57MNRrhSdh;MLm6K4BuUTPB26uVy+RDxhQ!~;Zyk2iv<`EIaL`;e!#BBTSJMkH*JY~#N41SN#4dv4%T zba%}-+o5yx`NQ6Le2P2WuI@bU-v=NqU0lSSn&s)oR%T_ilI1ImvNvN`xeub6_q)H( zyeRuXYGw_bpuM^q-G z>Dx1%o`;!z_TH?-C}mB$UWw%Wfhvq#y8Lyvm<+ytnEY%quH1a;uV4cTIfw3(`#w&u z+lD?rL>st+uL)a{)o4F9IL#Dr20AeTre%?e-7(Gkuo#DY>A!ANl*gk{@1wt0n}3Cn z`a%aW`)Z=e?pqP319tDEsKd9AE-j!p+{%3ZCrQJ0pr>PlcD^VAhaIDCz7#icVg~qW zBX;pf3Cj7?x!G?Oh$IlAPXZnLhU72j$=VPO!!vGub!cd3<6lY2kpFa+5}kUF6|*hj z!kq?nzqKNW+s1(yeKp@0yXKp@r=dxYY0Tn`TD*w7>U>!UgB&jWbKs7_l&3#yy;Fd|X>`=%$<+h9a)jBMm9c-Nl7#rO>d~P#=<`pOSP~4)A+0(E&wv!pMh)Z zWN^MD^Me=32}l}&1Opq8vj$(FECF5mhuZvmbVvWY$O+s z46#fM3lCZ*j!uhFMFr$=%Y5}by~|l)mf4MKDgNEa2|Pj9nFiEf)TNw z(|d8kszrUOHZP#QMFY7*bh6sjaHU0LCvK^2whmT1C8+i?>fo}mgd4v>JrAl$Q_zir zom!4zid0V(#o3px{zgb=^(_?fr5~+_`q#-Q(oquCEoWdkEgIo4b*2#Axl;F5pbzRE zHn2zxU0~A3(Z`{WyHKZ4d<`kSGN^c)Z7b;NmK=i14sf=q-l7+Mgnkv;i@=Oi7~u+E z`(NhsRrDf|!=3b@p2*V)*5~cW8aBS13rFx@hn&C}L6@ksC8=9pq-JA)ADN6J03M^g z8J@FrUu6RX0Zx?w$u8jlPh}LcoAVMO*v-G}jsP$kmkRvvASdt*T?mlQ)5S(~(u~0v zkC7WuFT%!)+HxKBdwpzX+r2Mr_o@FEd=?mKdR{wRJB(Hgs;DaZ9=UjMdUhTHuq*;L z8!?eS;oAr8CeW|18o#Hy+6yEOZ*mq;wK$LaP#-r+&sQ zD0XS6Us;hA_&HXs>Z938t6-(An!sYvNC9mpkb*D$ukR%ww=#vK7LtAFQU--M7s9<+ z(C@#AHHdu((m-s1*26+t7o<6S>*($c|7MaW0PDS+vPm@URLPsB?A)T;Y@7vg#2Q%t z9YLXG4X$h2A?v4xEFRp^+w3H0fc%Wk)36b9jGKUOzY@#YzVQUIEJNdU7qR3GxpI1e_lo0oWl}brC+r<(B z^guLDMak%`u!Asqks*eLVB(}q0!52Ny>1g(lvvFW5AgP;|&6>{M$TMbF# zb0BG@UT)<|WIzmY1uTQX>OIWki>%?^-9cl~SV8<-B{YlCevK?o3{1pAtbujkkVx5n zi9mLZA&Yx0tc6=xP)AeyT_}<9ehqO29>>j2WG!EGy)O^|5_v@@J6TOmnvQ9@KzVPTb^ zLlQ9seof~#y1Qyp(pS#}E2>CI8cDJkk{%_~;`T+2n~@|{n;pMFN_xr2kfb(4 zQl*sCK$3_lu$Lv_nYl-45TX%<78`-fG4}D^y6H6S!8ZXzoKD_wvmXQGtsv<8a&TGp zn9ysXfqgWXQT=76hETsy8pxutiOeiB6U~{w=1d(}C$KWGkB(9qojf4x$tOyIKXA9x z^MnV};DDJZFcz)IcV|j_a5G?@5A5Ma(F@gt2)qd=XtGeR0FV@z8DcQ~M9~s>5Om4w zG6_iv{1J#{h9xB9K0`Wp+aRPjP!C-cJdkIiQFP73BFnY35}dvRez zuY;*jQs7kbYkHtS-Ub-le4g7y(xP2ATG25^*zn7JnhGEGf1iDhh1kh=jPqX>g0($U z`P8@m-a}iZLh4us@9R&ILM%&pA&dfY1+KQ#VBeHq1Q4;@uVgts>0%E(@r*=pUD(=A`9_ zA=&*G|Klip2#>-Vtpr|NB~Y6Wp`8CtWCz|0lVBwekl31MqB{OMVmps220^;@SrA=m zT7=w4t083l6j{NxX*7_jEw5tA4A8%jl8`BvQYd`<$xwyjy4FWbmCapf7P*l`(m%5~ zI!qkRPa)I)dk6?TBG>|1qO}g)VJ=f>Ho!Mjrk2WlhM3%M?hXWK4#WM;IWp|0(F5r@ zGMvc$qdTxh<}Z}#cW3|r-+9y_5k4iumt=mCOxMeFx|H`h1{%INu*d%)z=T*WxcaQZ zRa*bv9l%#7xNd}LM418s#{E5XxxTR6NQb}A;=h~Ln&!qtnVzTmA4prm zVqshPyq9cx4X~S6Gg!1^d8Z5%(eex9bPd^sv9?)8aMH zWoZ9c&lW4xj<=(UU4+GsYw;J|?Jxq13MAR>Ob~W{nYVt>6 zNU$qS-%Sij)7aoy6GIP0dy45n==1i{TR~Q@1SRDUpwNTUYp$gHt2reenqI}cmIN72 zlHn8)j-PA6Ydfmr@o!}w{uLDB-yK~*hVZ5yLa5(Qp}%t^O9-4K!vq<|$uL%g!{0e_ z=w@Ru;wObspYFLfsIYg><=2j2M4W4-e;3fdB>Jb(KPUZj;olZIdDX{DvIjuUO{IT! z`d3c>YUp1B{%vUlGljIZK_Q)&Q`j!U4jIz^0?}#rlfqsZ_Q|kchJG0i$Z$}G3g&Gp z7b8Q94C7^Jl_A}WL434vMq#Q9?K0G4=#pWc3=3sgF2e>HHp;L~hV3%kD#K10cFC|u zhJ7;Zm*Id62W1$8MJeI4$j~Z7I)!E2GPKLkCBr-!mdmh4hK(|8m0`OKJ7h>Fvm}=u zu%@s_hP^WEm!V&VgECY`OPn%{mtmp|>0FWI*=4B7Fi(cGkf!_^88*nURfcUc?2zGB z8PZcsRIUr5ssCbnHKoeh{@HvOo{#6pWBA!Z|E7m%0cUz=ka%Cvt_@ak=7To`d3v=b zyxGp^QDtp`tNv_WzO@CGg{3bIO`D!wr%5@-hdp${K-07@<%df!3gUr!OwGQO0wlmP zyek}Vu0r$)>H{+7V<(X?nekAC>?@8j9q}AuCZh(a&4Rxsp*k35s@PMFyli;+^Yy7a;y~jEG0b$kQ4n|L`kd`CiXA5 zX^oL?)FXL_NU`-&Y>N>4a-KkXjS#CNb%u#NjHjYl%#d2xLm1r*dE}lICSApQ7 z+9!(Uqw*IZXRNtA5nUkqt`IO>B-G)%mA4f^|FxOUEgz!nawwxZ=3x3my-?tD6rh@3 z0g7ma*i=M8ijGIf?;W8UohIu=0$VYv4Y>-vprehupnvc^7Ihxk&q8$l86^!@8Td+SO z<}JAN%a|7&(I~0G9>>%N>+vBMTTT8qU7H#jAUmI24cpX7aWmeA73i0@d!frhH6MIj3{|1 zqT~a(T*;CjpzEr_HwvWWWkT|^q9ED1A)@5RBT7!uC66&AM@z|3LUNNKxhj! zxJiI9FGWOR{*#zJqW?fM9OfrO^45rwmtPji&hN!Y$(@Ku$(KvXIYRQ6xm=K}(G^kh zM}k2N+QG4ImM-}uL-Lmx$;qFO(unR$`LiLpFQVkv=10Qp!zFUIMm{1E^W9SNFNNf* z49No#B`=GJ`Gb?BWcu>9l$K!rb~`7BnQOI6a66#%)XQZ zV!$CgTO&$-IpT#~G4e#NbBOc$Nk^ z>^2#aJ0nUyKceJcU}j^?D-eOW*wqjR?2vdIO->5R#V8u|W5>qbJ*ESS8ZAfVc^rUmn~Haa7^h-%)8_+`Ty@ z{!?0h^_rI1&6nXK9k{MXHn?sXfor>leP*y+YSBL0wYL2Jk>xuzqeKug|I1Pw=rk z<2`D=*wsQ_ZMeMGXv5ni&m!ctMv_Obc-HZqE99LWF7Ny>dE10NQX|PbhARrXyw|}1 zyX+6+3v2|B8J{NP`7e!7U#CglW+87=xV$&8{@@9w2n-(T-p^%psN#57EM5fC-1_spkNElzB1w3Ya143_17$5ty%Ovmj zLf&t~_yTX^a-3P-4MN^_M+E!*9=tlf#X{bKaCymL@)Cu-@<{T&#ic`C-bq5Yb)n-M1OTfx^5 zNgmzmuFE@3@SPei&m#uM;CR(8_!1+@TWFHE7YwNHGhuvz1GwG7T;CKSuWxRI`rZd# z9p7ppuQps>N|?O;g0D4_JjEpMT)}sCxI8cJ)iC3$7JR9ZbN!}Qfyg7nz zcDTHoaL1DwU!35}izII;-TukXGy7tHB--so@FgEJmIb3oT=0EkSRWh}_PaMsUZ4%{ zsiXD7DpoN==lMW-x``vJDmY5@#yur zROop$0^ea=bPw`n3V9i!e1YqUhwv^D`SGFotnW&*oVSIY&yB!$ftl}>Os?NP1m^nf z!fn#5?>UjbH8h{~-A+7u{jL)F?ufuw8swAjz_*&-b%)nG;wfByrK}yVV*R?@idW0M zI!0`S%4=6I!WZb;6?V|^wnfu>?em#Wyw|>;nJklJm>|PA8ODlm_%$ZH16G6LWGIIG zOuDvp6uox-+dHBe3DWy*pF94L|b& zK}-?>un`O9ehRR}M$ojK0vu|~4^R)hem0d-2<_8QTCBkDJzgGN*t zEvtze7vqD^Ji{d{dPa9syb(<_qDe;7ZbUUBnrB35b3q!j#)vi;(N-hcW<)!T=vE`T z-H3L{sM_*dh{w6Hbs4T1qtjbb8neV@atr`?Q?9zD4JR;k!Q9Stal!mz#6e4t;UpPO zp)l}Yd{)#*u;~rac=0q3I96#xxCY@x93?5V-i8TaM$mEZ3h*xWK$@ zsNcW;b{d~gJf5avSUZn|wfubyD&=+20Q*ZOoF5%Bz*c6CFu*QDLH#2B24=EMl3{`j z<75~s!r=of4EIk*RcVuLD+ujkM$5MN9SHvu1MC?j^8W@{8lqE;p~-GU|8Ib$evj`k zjG}(Z(f=D@gQobO9AKXy>+%3w)<)y2^^(x>^=3J~_Wz8B9{!5M-w>zqRfdyfIEBK% zUB>uI_tYAbPyGVcGxWZ3{t-ITW-q59`0v9<+8-JtEw68Rcn(|vM*otVdC}XfCM?vLSK#f=}wj7AN;qmcdtKfH!F3s>X4QHVcFaqRDA;CX6#49lB=TQBLwuigyY z?@5n}c{4D=XVIfA8F=m}3s>B|8A%k$LnM_Vg^1WGQjQ27jiE=UycsTvG$4{kkGM3F zjlCI#N7bcktoT=rx6k~B)_hLyAGagGkiHk>l~5rcmPAX&_QIPZw}-^h%h z=V9CgXP4&NVWTAwJzO<_5X!Qh{-4~$3xpe(1T8z5|45c<$u5MRuOJ%VYCwjtU|F`B zh|fhFeij_dUo6W~6W@W(1K`@hZ%2aA92ZjJ9Y!dIM^K;(k`l5-eIDlbEmE5zH^st4 z%cLX@^FJfSi*PPu5f+2_c0t-*wsuqk)P(+vxRNh{h?fMhe1)@?^q}bY8~E)z$b6XJ zQw6o}A#sn*&rM;O^cxgElA-3k2j(Sz1Be&OGStNP!S@o#%ReCX3G0Z7N)3ooHXF#x z(MTZCd<5C2!^TorCRFl(~yvx&u{jve|TBfZM*qxdb0p z^O1X@K9j!tDTVoj+h+6U-5{FV!k8=x90H_X(fsI_n19I_8}#*2ZRj&e-rHDja;lk3QcGh z2>MXIgZcYYv_a@_2i%>8KfkmbVL|B1MzU6 z;Kq|LklGD}>FY$fLGa36Lnz9H8gPKR6$$^X*NZlEipngs#iM=W7IP{;`V=9B+b=qq z6Vjgm_8EUS7q(z00V?xZc@JV!hEmBgOP<# zf1b(?_5NTUo@EPA+262bv{*u%mZaru>>S@?%#DnLx${7fNB_HX-^D>?WR` zME;Ay{+20AMIq5Z?WC_&>az=d_wZndBGhb?iUm=)jR3GDeU2bbIgP{o*mp1Fx`^S3 z7J%rW!r2nVKpP4XtwfH{0p(Pk9+Va}0Fk}(*cM@d2Sg5lp!1Vl-2!)WMt*FmUegI8*PEZX5ac!WG z^U(xgnRE^3=f}?DFpswU@J_-Y28h|G`=^+n#5WU6DA)<>2nFW!^GOWkmawN=rko?v z`I8n1J<;#aq`J~r57BZ0ejqek5>Azx-*f82tNyEYnF6k=PY9>OK7SUQ9JKG18Pyh@Nd0w%I7yr7}zGT9M9A=wf8~ z(WxBDmg->~5Rci@LSl}P7$7o6b*M(yu*4+_K|HSak@9^o2`z!BS_C7W%FmWCzMf8Y zuq4QE2fquRM)1cuLoNzX?k;{z8=|mMv+%^2e;0Rh82uZe!IH2|6r#o4T`bA}R+Fgi zEke&Wo9xXA8<~(FeYr_bw3`!{ypn(sLNNeXD#_;gvIB`>PAq#!lK&bhf4Y!=55FZH zrP9xm@;^(~8yekXf-c`KUi&TZ?_f#(i7elezMsWdf_-xk=+IduE+jr8 zr4KV#{-kw6sf~tu2opMJK!8{mR1aF-yaU(8|tq%jBuFxtBdE`7HOIT7KAvBr}ASrY3Ka7eNLObO==&cSlJ!GIHY zw$O~Vj9&Nc%$7f?kwbaTvi$^_sUlR}HD=AE!+$ScevX_eR|?HHh<+s6K6a}h@+wL; z-js1dC#_p=u=NPJv1bao7f>U>^jL9YW;vCK;A&+q41A5GafZ}*Xc{naM@L_wDb*62 zYUo2}LKn-QayN0|6VOnH^CV(=h$%~0*OUi10nu#&341Wl&$L>;!PZV1pKcT#V=XhI z|BLW0n`kWbe<2cMBWp#u4wQqnG45g1AgATiswFrp;44D0Q$-2ngPFwm^QDprLOAYS z7l>ji&MGnSyl7^C(s8wg*uF;7{H;9MzJMW%tJVd@egefHF%5*Sb~P1 z@_Qx-botRWX5qikg?9x=ysjBaEM?TlLE5k8nv2U~=MV zmnadjyUS4)r;vX~#c>W(unUgU2N5lWLbiU!wiNT(64($=lif?pcTr?1&T%ma2pmh; zBl0HLz+-DiUm)Lzn*{xk`AnI*FnS}$r$+w}p}P48@mwncyLG()8zaER+67Ex;X-H6 znlaLwbEv`ZZiIS*p9BmT67uN`_}CG3>DP>f>O=K_Zs5^t)1cReu!Hxgs0~0)Kwrx1 z1>{FsIcrH=9h4(|ak~!tIS_y&dIdstv-9*I?9bK-*p~~q37+#QOV}DVMwvdw4ltIx z+aaD{r|Q-g@TCa_z;M`YI&7*lV1F|l_LChF_6{g#%j>XzAYuOr8S3Uerv+jERKmVf zz)jeH-U(oLO4xQ`Wwth)W$6*Nwy;?^?5#R%fnWC>v$gNtE@4Lt*fWFH&If_4{W(yn zo4iOES0GHhy#;ZD+}!xkou=p?-o_IxOZwJ!+5 zz83_7osLl5e7XVqg=+-t3k2MRlF28qcE5z}63)Ta27Kw;!mi=g?$cpYQ-K#Jjnq@k z*1q2_VLu4vA-?@72n2gGLUpriLeScA5_Y|Sn{a>P31AOO*m;1>BZ+`7eOokjIP3u( zwlI4{-&SY@#UL^WU1PSwP za-rc)62p*iGAleGqHo7b*ck%0;oFTMkhS9(_A{pjVgI2)z#c1MUveVYi4t}>U=R0g z;SS-}w(79S!{8*52EZf<`+6u3@$F|pAlO9+)y?0G55gW;BVfA(+=SM1DQkoQ&@N%u z2ee+;)Z-Yd>0{UTa!@Yk40wGUBsBZq98bsbxFOVl9 z1OAavXyXv`J5u2jWvfKqDv%HNaM8WOkvHndtpa%@4{wvmw?co2hkpbDA>V*d-TdY$ zLFA`M(a?o;Rwaq=k=`5t7b zo9S}}a=KjT7B+uaAWr!B>=Pj04)OHbwRVAgxSyx8{&3`-Oa*c~M zS`v57*fe7K+IfnoUA($7>N zFXTwXk$ix&mc(^Ie~6zCfk4RbK&Wn}C(os~oGX!U7KrI<@Kl4y$d%CoIi0yg^z-tF z$Om=gH3E60g$i9arWyYff!tVxXG`So0GPV@qmzTkE3Xzde?cHl7;_@z@e=uVfqb~1 zH$+5E_iw=(&Ac&yQ8Cgw+$xbTgnroE@N+K+Wb<`>R}Q;|X5GVe?d zBio$r5Fk;ZeEMBWemA%1?kME)Q$us)0lBLA60{wskv z;q`79kCd!Bl>rvMC^v%qZx4UyYv&y`#>Scvk|JBKRzi4 zdEY7lIaxqWs5s*U#%>dkhdZ_ys>28HRvmJ$Fmj}YO1p&oH1rZ=_uarLwjz#!M3`?x zsBTU)FegaN>jl@6Q|S~TI~Bdt*TXPK(Nb&~T5hut2kll_sBy;qT5H-x zn`u5p&~J<9&~lqqq_N3{YaO(iHePO~jn_BR#^2vTV6cfpQxdU>%`|nq*h2$BZmNyf zH`92O9e-OQ$ws!=R0AlxAXuI(l##n#lI6*AJ*$Bt(4px$je1U-q=>CK$bGV1&)TXp zcj}ZbozkOI`gBUaP8rZCgE}RK{GB9QM8xu>Ri`BClvJH!*C{TYlBZM3bxMs+Y1ApL zI;CBwbm){$M6|TK#NMVlo_heJ*{*Z+$TGT%jeoLN&+3<1Px^JrpiWVw+dOFzk?~K) z>y$*DlB84YIz`hdc{-&~r_|__2A$HXQ`!(wn|D(Zv+p`=L((RI71hZ55*^_aihPQH zmL1}b8{CgW`DdhguTcc| zGUZ`}7~evJ2twKU^FiawMLwdEXhACOI2- zQqj6Co)b&35sOQnv^BZ9w29G@D!9-+GBF+Yu|mguLjj~93z3FCPyB5x(~ zH~i!)L5Oar^eiLYO6gnqNn6fupmYg8iOT76O5e#(l5#qa(!KoTCa3BBO@Wh)bSkAU z<|i>ZKatY4{Ny92<0-wBpETrj45i=YCj~h@h<&}l1S9RI^gMo2kMsK|-N;Ycak_`n zkMfgkoZe39!+7jWJP#1PmC}hux}DNRc$`e;w^I5}Jo+Wm4U~Qbk6g)gIi<%L={!om z0W-^djnWn)ol5CR2ZQ;ElwOWct$-gNlZ!!DHhoOaXe+uN!p{eIH&}70Mt(-+no@eK z;37;nc$@42_bJN)<)G-#voABf9gNDG?r&}SI2B*E(mZZkqS|~alxm*i^u08%9bZ1} zqPtIH)aGp%(o7VK+UyLa#H-C8!yQdLR<-#CP@LX|c>115b21V+-fAT9mBo+X-S{FZ z68K8{-AKsyu;zH(HV}`w=ZWXf9NyKqfA+Bd1=Pjiz0U6NEp|D)%jt!=c_37KYN_x$fgf_=4JbSpg$rci zm%-vdueT(FU4RX#)jLZ`vMQ+RS8s`nBmfXC#6xAN!krkT8w{_SsL!X?h7oG(h`SDTO_4X zmPy*rq_jl;OtUoHMBNwo9IsNqP2;Jiu897bu@EngKRwB+EW(>?3*z}5b*ONg7`5U5m8TdGx{~6%MFyn?Xfu14rAiDh?#|{gAX~XEx#dK;r%_3 zYjT3JHjE6;$%FEX;XeJFj%!ghY9N=>w+;_)bZ6P}P*B;6i*fWFDatA&E`0IfhF`*Nxt}?P#buq^b(R@fEUL8z4@wwJxMu91Q#jB>j80zVtuFzz8>>%Crt*6F7Vu=)*pFEO?>#ERaBg z&l@u$vIH#Tk7F;%rzd^HBQt^XQFR&*U`oiKuVjsvVyxW2^!cjB5E=WRnp(+9R;>x7 z0XeE{^s>McfUBFh14YRifnChD>kvBUu0!X-{|*P1NzzpRucS##R=R4LFr3Ls@bX2V zM)Ll2;zpO5MA$sL`1{L{dFV-=YA_G%0uJ-xswl0kEwwsJi>p_;OO-iA^>uFR?4r7g zVrzC~>8jEyx7As(qPD1Zt+IlsbyF)VR!plZT2-nfO-(Y>R+rY+Ra93giN%wxp;E2W zlagmDRBmN`1(z?Xcb8Y!j=*|h2y1b5&Dz?EmE~?_uFDycQ&~}5T2)u7%w6ONVl*pZ zkjVgPCh91OR$0oQb2lRjCmY(sb9C*_(iJ78tF0?*D@y9DMO7u%HKl~Mj(GDT@(Ak3kbb?v=+ErEI%5_qxa-FIx z&#fsht*t07sjYi<+yxmq*~+RSce(H_=^F;Y(C>r` zSl3jz%dMpi#iccFayNrdMprtV-S=pvIEl9H69^OKcnD~l?s3X-f-rYE5{DAjev%2id> zE0j9-+DdpZGObqPoUTl(Eh?#~uLEz=)D&w~JHRp>pGZ=G>rl9D0P zB7debt+cXqbrD&Hw526k(~=Z)WI+;4DT>i%R}`%-RhE?2DLM7-QtM^4C8f2>b;vI* zx~jC+DpV_%)w^rz;nCAz0z{IPlG#dqRfStgYM3!2r8qe`Nzaj`&6=JzE69~1NJX<&1W6Y%DK)vMG)S5yNNL40gQQd@r6vDA?Oh9WT*Y}FX|(St>>o4Hr^=NPgBC~B# z$LrBhSKk1;@cy;!g3OLJ)l5U`3@5^AxEwl1CK?MTf?>^Ww^xg?LC<8v)1DlPg?M3PI&^ue%E|%Jg2}WNPlkqKVU41s7D*@LT7+5@XFPX5j8E1^91u;+ zm@iu&52QTZzHFne2S-MnPB;@y6l7gJL0{JCgmKe)HXVp&GoGN^7r-C4+qX*hWgBAQ zOvZylLUEc3MAM%2bP15#&FVv$6sz0hVGSF@*#KirL^=X=$dj|7J(? zTT$m~dA(Km5M~`k$+@~D?9X0z-QxP^*K4=m^7v4Tpy3wFmsU?lEgL1>(Q?Jv#~!-2 zduMZ3{mIi@L-&2>_;=o3>bmse#i@VNe%11^`f>MtyMEE~@f*&3_Q(JI zYRgB*0?Wn%_qSa9+~dcu`o{*TUxRB&)3qONy7sOXZ{-kvCJ2YkZftqt@Zn1tn}9uL z9;^Q8`Ov$o4cA(pKh5L9@6_|B9m4UU?=hxK9KDI^104iSfsTTXg3`ODaZq~0GyzKQktRXu9()Rv zUKLG)*5F3_C@8%angMlzvVFN6y#lHMr58UMD824+fKGsVK@WiTflh;_K#zfrg0c#f z3%U$+3Y7kR;|ypQsP_3>t`F1;Is!ThIu1GxdOzp{=oHZ}Ku^#~(37B3pf#}9G-xg8 zQBW7z@lNOoIs=*l9sM%&1RV!G0y+UY13C#x-)f!$)j-+b<#J7+HK1Nl4RjFH0Xhnr zdKh}59i|?IexR-?lneVG#Ut}6Pz{gTk5aqfk-Y^%Bt})#+C!c8)!DO5qZ%T%vQ6`w(RoL7VWGWWi4l|y{LZqd6bdz zci{KrZMhs&%O}FO<97x)Wmk#tEPjuf;Cq1|HNo!&e#8X-F7Rm+{Au6^fgAOC1^AQ+ zUV-`^Fu~6OK52qC0KeY^r~g_#VSE7(20jiPO_EP!pF4ox2pn(r^NH{WCBM<0 z|04N~_zS>CA;*Zn27JT>r?`*;z9L_$Xy4_)NgpGA32>_K1qOaUaI&Wnj{&FlGUC?* zKL#8mpQyfH1aQ=VlTSVb{0Q*ZC_}5QW>2~0Kg(@!cqGdAH1Gq66(#KtoMMa-uRv_L zA2?R_-DB>J7~qWl`w`$6IdK1>L&cX>=!o7ej=u1`WSJ)huZ!fC0)wbHSR@*YLwArfGV}!!9G5kJ+{DZK=HSlA~e+%Wm+2XNj zH&wLRYWG?@Y>u%7t+u8;mFsL?%bK!kTT`pe0nu$X4Xi?5TV7rT6x`pP%iT={yt}*( zo40(IsW>+m$1a8lKjc;YLoU}%73b~Li3;6SQEjVfwN-U2D!&~^9kwdcfNXp{_-enE z%k3=Ue@ODTFDeg-oa-0GMaIrWJm!8E{NvF3JPIJt`)0DkO_olZwwLTUW<{m;9AD@Wt*p>{9-e6?*E5ST}(#r^Gz;GYCPNIvoY4`A6Za=AJ} zxqbVqZB-i=AvgDrr*XXr*Dr;C7qq9D-W|4-Ww~W;wYlEQF~-*ZGM9@|d9d@|@-Ex5 zF$;{jr=q-+LO{ zgdeUeaqIR)TTSs+;h$tbN@csf8~BJ{dFSg(HFmZd_o>~NEb z0qq-h$bIU4$emnh`RJLZigqZuOCV+m`qN-%aU2EAa(AvOtKCb{;!uV4$JJ$bRK8Gl zSGDE7g>-VL+WN#I_Ifq09$ADxFdMy$p_I#&)gLRj9;jl-{Ix3fs|xEqRqXd9=pCyS z|8V8i1vuPON$3wNiDPUb0A!o6Tvukja~u1%#rpjn>_y8O96z_fdSV;kO& zZX0{C+Kb~iKV-djJNu!H_-{Mi`ZwFzvD4}J(IwW~x3Tf1bo|^$toQ6-pItUnMivLYAlizCADIa_AJnLjH8((hy(hm04^3Rlg+Rq-l(0ZbmUAMyez;<@m3hR%y zvoBw?@i*JqiHofJcCb4>ei>K~ue9d2uovvs8@96NKVd!YXD>OdU)jW7b6TI>#ICQm z-nyCH(O~_CpB-Oiy=xnLq|u6h7xMKc>!Ho;E6vv9o7pSP)}L=<-&t$jyOoVyV*Pn9 zyYEu#6WiEhms#)G#>QOMZ(hkh-D>^x7WPi7^~e@>xXt>~4)&XN>r*?}jc)71+t{ma z3pBZY9aZC(>#WfH;ZDkRZ5Ne(u!}Ug-9vew^N@!3T}~RlemTi}Y(44rnGK}Lvm2-u z_idyao!m%zKHg1w?!AI^8>QHO_jVG0>kcc-FrVfvFmHi*3(Q+!-U9O$n76>Z1?DX< zZ-IFW%w>Ve25}`N>0Eq&2)yt)VBs;zE|C1zVkszJtI7TXH1mTv-2zEb@hA)+rN0CM}s1r%ZchAw112eJqMzMM{+#jGf+Go zTq&r+2kBuMlG2mjvr&?Ssq)^*3H|qcWXY~~L|M$OJ z-quV_Ff9FUOwxUl-Ye-NlKw!_XC!@D(l;bsz#l3zcBZ5kN{Z!cJgt*-v!oG8hb0}8 zbf2X6O8SVTKalhpNne)q4M`W&i*nAC^g>BjOS(?d&5}kW9hP)V(tVQNE9oPWy2^yV zD!tRyzvcZYe3n)Pjef zw8_<&EUY}=e+#c!n1!i+TZ~sQ)xV2zD^vZX7+=6t|0>2Snd+y-cokFqxfoxVk7LDn zHS3dpQj9NR^vzadvarQ$+7$l~Q*p5{j|KneeL}{|V*E7b`j0|H99vio^S)??pU$p+ z#SA}#srXxX)xtiUkGsYA5;iU4aWTG>9WlkvWM=)-!al;fa$2DXer(~S2$fy_p6K0C87pls+B0reuX{NES!|26j~b62l=z?l$3h{< zKa2Gl@Sgyu`cAgu0EylKQ96Wj30MBC#!IT7nLfY4g);c(h`|rv;&`e3sSGnYl_;nT z{?KL6^L(yAX}?&_`DxTWmqg~%1}VqrKU*a3lJZrCFvm;%IRX3(#Z*AAodbUm_<7_% zhXu0?^XzrbznG;~37o&n#-SAh{<(+)NB>>meS)wk@H5E%E&-_d&vhJ^OanH}7~soa`rA%(vK#UcHND>MG9B!8dO z=K@*ygv6)i$~C3uqjSiy!5~!bl;j5+Ppc$8IV{eVoUOpmz%11mhjq!H8WsF}jRFpD zmN=7ot`L{mqg;+WDIiZve%Gh~amv$gCGOoR&egp2&u~Ecvr&PoaC0eeGrR2uPJZJ4 zx!_mzy^iBcS=Cz_zaXdQY_F6*Da%!M__oByrG0S9)3n6c8}zwc;@(lAlxoL*;AVEll5<|}c&Ff}H2{=G zq@2D{e#(@b+klgQdZnM>l&1;FKS2W@QdAK34T(Dpap@)CX8P3Q2Gb1RGY9@}z{w61 z20H+Po=e#=Ilof#oVOLf zL4Su$`k|qHcK|o5*Dm1HF8gI%trgW`H*nm>JkoBezuYS2Pf7Wzzx+VT@k%+%q@3p^ ze$vqHFG@Kxe=Qi5{OZ$${(Xl9&euBO@Lu3%`cFAF_ZP2v-Byyk0!D=`$?l3>xIz#Q70dUBW((3c{Y8 zLyir?&E#JMkn8gkAwb24wG!9lc=WiGACb7Re~n6f+EA|tfa9km{VPDS&y=j!sN{Ho z^CNDw3PAb8u{q?lpd*w1OzMdvp2EOuFt0ZD$C%_lYVfz)fSc+0Ey-VFkpCQTuD^^w z`(?Q&lzf97YL=MGKYtEr^ zi^2oZ47T3r*|;8zB@@_9sOzDmJ`hXx2V#0Cn@nf)z|aW87UNVboDGNUjjNhgnKS8; zXd~-hB+EdY^#gihC@%N@Kp{Ym z0iAX`b<^Huy%#%{n)IH2>`DrUPi^~>VY3qUIXQG6wqFLb&P>+hYr>W$!}caXZf7Gl ze?_rxIh`eS{%RhA6iw6JJy zaolmGJspnNb$wuDM8_7hOcHxzquE{humgOZ-J5iGm(1MN(UULiigoLJZolqtZQI}` zf&Pu{dEucm0hC9ZV;8 z>e!SvfK9O2yPiyY*9Rr*mMwZc{sj_mT)C6%6gQ^1JL=rSVl$nd2#;j3T`vXq>-GEo z*c;yTUT1TB7k0hre7|8Txig%u(<32afCgm%Y{Ao$5j`D9421PaJPRZ2F0z6hdqrW0 z(*14DI(T0;fNh!{^agiSa2a>WIhzBa&}KL(ZS8IgqzBT0)Sw%scq5SrT5tecy|KkF z053*^UOue%$SBYr3uH1B0(wI+?{JYyR8oHbUWWq)&L)Sj_cLv5X=rV#PggP>-Hq*j zftZhPY*hM?MpRW}rVb~{;NI{-HzzjJ4o$v8(%ln}7uCX!4Y%fotse+yeF2JbJ=j_) ziZ<>~bUKpQ?CKBnwCpHba`$*4cn2Yaa{; zuWB30W|IkF9kf+&B%r6myyLiB?OV3Aws~}?z23Y~-Yz8Hu(9$z9Ky`gR`Jn*+X2xm zA8qwe7^bC9OL&W53Vb^Dj)sfO4K4jXQD?tLYyvf}{VFnS-eZ+@d%I}|X(J6i*x~LD zMZMmL&k2|9?QWFr;;hR=snIs2Ley+tpFWp6QA{9pN;?(F``}w(F<@*&%cNq|u<dfjT(zk9-&aJJZcg#LU}t*I5M*B5(_SrH91@~X&T z96_A*s{Hm?IFOdzpk$kEQyd$4Veo+4D_Rx1p%K+fLP5Tj>ie<7Hxv#PH4_=f)HHk_ zxeVQ;hU^BIU0}T0tz0ZWwwyxaQHVgO!)GAe7;zi)BCnk@NaQ`Sz!6IWR}*?pCQKoM zH`wNGcna;V4)jNdotPJ3o`s_I?5=?+V+S(p`lc<0~Y#JBL=NlAdTT+ zeUOhIdOtcKp8%mSOii2fQ*t@E$CMVK33os=)#{&PsPj4W9$#_jfH;3~ho@<8Ci0N&W7B|e4+?vn++!s3Mh3ti)Jz@Oao_KU)=PP z43p^AOfxWF7W37f^{3L^>8`J6^3A`c^Zw`L{GI}})bUxK;Gl8#k?*g3F2RTJl77{g zpC!_VZ~}>JX08ckUWj4XahlKgxoZ8m8%>xh=ihAfdlpDVb@jzADEq+&S(*ysqg-_N zFxM=e#@Z4a)WOC1=Y{zFBHAQO6Jj*YT+9eW;&Vh4hfJQq7#qT*Ou9)G!Aup309(q( zl`t5*cvhO&S?u^s-;~&isSut7WQOA8$nEWT93#IMrMJ^ulKO3G*Q}4@vw+l1^8Qlr z#Dy;SN}7te|L9L(sBf9opO25sp4k=82Kqs>X+a0o5kBG+whttR?EJocB|hfF&jtgT zL1qu_N+748*|fN#ypFTU6CKym;aGq&$fHy&%j{e$I}YswNt|Z!REpW@X(^bJ+;8mR zLHT@iFa#m$3`GSo4Dc`J>ChNAj$D{{bSh-1<4*>Wk%W;7kjvE##G^q7NoJ{ZahcgM z{b6{r7^j#apDF)u$l1t@SKU~%Ba&K=r|5EtDx0n12KqRZ+bkQtPr6Jqy091vAQ5L7|VaakYBCyRPz20xBB?m2+D+wGes~>t3iVg(U%PTVJ3Amq{;$ff=t)C< zdV47nNo80cE6&tkl~2(!TqhQ#zpLzA&g!BINJ>wBfWaJfv35ci+!id-k5mg!b+G{{Me{ z*YywAWIgLy&$`!hSf{=Ap3T}Bg=dc(F~VVf4siU$!Cdx4#qsF^&m>F6=g4y$GfIEEb$Mdy6)A_qOexQg|GnBJLhn_1M?!i86~f0%&3fmfUQBf*vfsaM zT{>I0H=JL5+Sz8R%@O;K0LB6M&OCRXb$*S(uh@=yVp5xJ92Dm-X^DaL&G{^@pCf1r{Fst-)wwy@ST7!Kd0e)I=*M%dnUeT z;X4`MDfmvqHy_^_`0{f$z6C-#9J6$K4$>lg&%>8SoR9BpeCOe7el7%2jPHDW7n)3@ z<@heLYVqV?mX=F?``v6HgQ4So|^`rxOwozow;A0`oK+_@5wK1`LOHx+h*LKGPtDY_1j(! zUUkLxrFW*~UN$A$Gj>YfmGgG}vHG=nzr6UvS3f>fJ}3zTmPp_msk|dwzOX>H5VjA2x3ez4qO& z4;p#Y{DBWX{cOpK0}p)ptCh3f$~k-1D|17OH&@TP^RpdoM?PMeKL3{&Z)?1)@whoB z@7moKIX8XONAJDx>j%F4W7&%h6|L(XORo9qu;XVPH*xxmzkKxR#7P+&&V6O>#=Ab- z;dt!sqb^wZ%ZuMV=JCqA=RA6E^SEEFX?X3v?T@^B!4zvPWQCvU3x zq-ynNXFRy$?vsCc)SHjK8yvIuxzX$9FS>Wu&-U(}@Ws1(qqChCwS4&3%L2zX>^gZ@ z)}){BzOTwR6)xZJ=K%EZR(3?&rwJYZa9iFaR~(j{A0CF!apy5B+tTu3_{SfV9RJs; z$@$w4P0s)R=;ZtZhml`1jJ*xR;2b-Q{#OhmpEry=$L9(7CVq;BvA5pkaHJ&)Bi}HL z{)Y{N^U^SSemI=`F!+tb_%k09buvA#7zXE+VdB1Y82rIQlE=4y82_9!O#l4(F!r84 zOuJ);@!P?}@P9uHzA=pahgb}gjk`(1$p3N}zhwx{XooLXbr!fwK6l{n369Z@Ha%I7 z)ck7?Q2hSO6=SUC9|3U{^oDxXT=6UVns;(LCwLh~H{CTtXPZ<|ie7HB@rw(80*`VWV>Ujvp9sTbct^D6WVSHM!xe>p; zrSg-ZA3tYlJ=+uX{8anFlc47hv_Ab;srqKT+O;1xYd;`N@|g>Vu-&pgm0zzC$B{@6 zcceOc-`5PClxTfAb-QN&{FCN;blk^i`A*&LA9TB>AO5c8{R#4SihQ~wlF-j@)p04) z?S5b5a~vF=WZnEw=C{#~{^?54Y`UHD_ic;Fun&8i0>+#~~ zSM|+#zFzCosr{_o?3l0nRgdl`^N&>ZChK_hX?&O|pXYSHP0@ZvbMonjfcRg}!+Ll- zo+iU9cm~Pjd(0`89`Zs9($LMw|%((O^#!S@b$EWS;)OMNue1!IA zV*fc)_j8Z#=h)uJ=QBMnJQ@dT$mbo6@B6LFpMku5N=q+Zwqkkds@n3EwWXzw(yHZE zwT{xINF1dFbBjusRIIGHxN22x#mc!w)2ml3ub5lDsJcRxB`+ymTwhLr^6IK9AvkMw z>1>TKy}EqWs)|*P()s6}wq#Y!8H-metEsE4n6aeF?_WA62d&RPcf!1aGnP~=t}b6$ zF~h&qf6n4L6NH~Lar%nowJTRtPhU~D9NOe$uc)b54rQjTsGk8b)*T{q24##DE32+V z-SX=FiRM!Df{K;3Rg3p4n76ok#i|M-txneDr1B+8rq$Kfu2@c`{7aL`;i9Gjv#UCakJjR#ROuuVzU(x`cmDsTde5K5Y@=zNBJFLV3>Vy8hJa>J^L2 zYgZ)i7(=D@(=~<)58FA0h$eQAAp%J|$PlUhbdjO5|FV+|t@3YllcAON(@};9|2th} zNTnRAwZG1ibGmWfRDb#M!iq%|ODa}RIQ_J|WfisM=rQFp{1b~nN*^2|l{4YuidyvX zg5{WRR_T#DRO&P(bzWWVe#HnTNVC~fF;8OVNe-rv_A7Qq)pE?e%NJLmACrK3!yryL z-4vZ&v8tkW-l~d~1)K?&mM^Xt-Xycm^y-T8mBWj{q&ejrf1>Pa$Jym|t7=P^SJc;* zE@n;5$j1Ov_9hOy{0S!bkdho-k}!kEY9#Va`5``y)fiebY@J-p*UOcEmS4UMy3f5} zXt0upFh5%qUsCN)I@Rl9#D0jys$#NUk+-O>s(ML$?EF~s;vBxB<_gEMie-zDSaC?M zW6lIKzy(;i*>$*-FTS*Napk3@OUtXOlUJL_WggNBe!7Y(J(Fk(s^?5vb_G^zprK3D zthl^l<%H6uOOh6xrV5f6eulZ$n@jzws^yDUta1R)QN7~goNVAtqEd5eF{oyrbMBnl zGfJ_OsL#pCnXssQRn=nHwX$mY#RZG!)aK+Yt}I_!TD!8ms&-Yu;u&+w@n;6ifyk1& z8bHC6gkI$+uc<0sU9oai)r#d10RF_9@~V{u|4~bGa!Y5Jo$-GTr2Foi+Pu=)i(pkn zMZte!eoPT)M+M=h?9w?E)fJ0tb5_+B%*i8bVs*u;RRvO9F02`OrA4I`E6Z1L&8^Kj z%~YXu`HCeKB0+EEac<4WG^?$idqIp7U#xA3m70U(|0CljOoVlq+pw+0bXi+kx4i1I zx{A`86{}{Yuuah+2;VN%TRTGR67OG;N(EGn<&+OTLCMdoCe&YmONS}(mGcGt#s+U<(F3>hqb6~89Y*YaeaMh z4aV0BZv1PnC|%7VZFL-LQ;#h@w)z;V)fIXq{&z<@`gIYUQ&Y{AZ`m?9aTz9&a?VNT zp7Y=LMD9vltt^=VkpHayL|gU$e(Q__E{m!zUOr>?IddkKI;vK!s)1pS+7)#*a441f z&rp}uaV|9-^dG^Tu@YO2m8${rpQ}+0E8t#<5(mzN?ASo4SblMBWx`09XqK+1t1Vrz zv~*?p@{21YN-70$v}N)?QIlf%$6b3ejW^uare4lbFNp0(I2s9CPD4w;)E%iA}&F8JCN1 zcS25S>FQ-w$=e>Xh_cya%mhr>wQ4xXWLpe?CS}h_x>cie;&p(dx@ys?+9iumK6(7A z72{85c3F(NcrkVl%;k{3Sn*3Mc-er7YY}{oJ=01Yd!U~>W=@}8dfNDG$IQZlY12z5 zjL(@EBQ0ve_*}>IKw#>$g3_GvrzwFz0QDx0pO6!u)kvyTj$B6KsRwl~bAZE%r$Y`x zexy7l!c!l`VV?h-C_4zHDM+25Ob#j5JJ@lEW5oZZ|L6?r{*IiHIvgJ4{Xe<_C+`P4 z4%Y|gBVc2{F887Q#-H7clec4sqPmT|AoTcS28~6o|@(y&It@AaKALW>*^R;7dz)9NyjwLa?5sqGs2RMgnZ)B`J z^LZdtl8;-T%XaH?bCchr54a6|PHOVaym_CG$Adf*MU(O|?~5ez&2#xgzIpDM$nVqo zkYAy(ne^NE7uxs^eSS*$88*J##-C;5oA==;e;mH1{vMk=pRF-J*)~3(S1~_68-JY1 zL~7o@B>pk@n)v2@ltg}m4aY7Yu<_^G@XKuc1vY;DF#H-D{|uXai;b_3l%=%Q#xJzV zx7qlUZ2T=YzTd`gxADtt{0YV_{y8?BHXDDfjladlH}4Iy zxZTFrw_v1Jw~c?g4X4M(UuNU?+W7Y8@%n81%WU%Xwm91P5t}@p?=wIBHom?kBt?}r z96Nu&Cf{U&FxAhGa$Gdq_$f9%pJg&XeKveM-))m$Yziaw+vM&144eE1p8Ha&A}@&Owk z8;RJb%*N-~Ha|5s{wkA+w86&5t?AgO#l|m+aUG6U8{b^(SiH%`KglNFX5;Ivis!N8+G*og+2kWO{-rj4zm0#sjXz-H>#dTM`t`nu{rpEZ`3(2* zlH=`5^Byc29vlAvkx+lKZ2U$WKikG%WaH=A_~yM+7W-^`^VTW(hK+CT;mG&f_~yNF z@&h(LZUx6aWi~!Gz_CxIjgMRLu}_VSj}36_Q*Yzr)_3gFVB;SiZ2U1cezuK&qK%(t<7e6UJ{y0mjc+u5lwyRO+y2YrFq%7Sosp|BDvicxQl3^q zgSoTc_BaN|%*9{VaXwJY%S;~a8^mYKEao}Pqdk(J#yp31v{UkDGS49$ZI}E6<~cN@ zZIVBUc}~UAR>_~hJg4AjgXE84o^FrUNd9o1u|2O726r=s$fiY$$^PIw?eUg8Uc}~&M z9?3t&JcnqsQ}T~6&r85)yX5a>oyYsIV7VslD~m@ z4#jAhX7_= z=8t2(|6AHWn|TlOeUhKWJcmTINAlB{XP1w5O8!jd+0~=%lApjlyLhxs@+UFRt{rVv z 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 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev501.so b/source/HOAUGens/sc/Classes/HOAPanLebedev501.so deleted file mode 100755 index 1f99c55014a6a5ee65bfe4208734d830f407a7da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86128 zcmeFa34ByV_BPxsk*MHp7|^&xTW!XmhzSx6BHAGYZexNi0Suc-2!TXdVn{TKN-zs) zn;tWcOB{8~C}>m|GmcB#qX>!1XhcV&xWtv)fD%D5RWXcWc(BXG|M7V1UE?404?3pj`2ptntW#Cf%~}I8q!#93ICBj^l)F zjI^;!JQ^QorVfWon347nd|Qs;@|I&x6nZnQr9ylfWojNb5IRz2$MbR7@qC<_cCp%F zrm+Nq&tUm&ljYH=TUa?9W=i(-@qJOcgk;Y^J}^2ROoZ?Wr<`?MgyX{0rLMokDGO)G z`ug&VM>^X~WphOPMgn6HzSC#UaSYlx;oXyOIH%&ahX+6RVQ|R>C5a0kpeoYvJr!T_ z%c1zjcqVvGa#c7y15yW0d@c56Q*UKI_Q>);V&-C8`QZx`P9xY zuAe;M^7z+l9Ro&eaVEya3?AZGM_BYZ4d2u8Jp-hd$|?IHn<;A>|8@X5gEN?}hlz!Z!=w+4#=E_hNj_&wME?M4Bt*#WKxDx&+?> znO}-@8NP-1UWV^-d{^MR5?}hP!nYXT)%cd;dnLZ*_|oTUeAnQ64Zhdmdp*9D_|oUA z#qZP^#}| z{?0vb_}5&uZR!2PlP^C%(KYAe2baG+=k{g0-`aOX#m znf&bCZ+2bqK=sCidq)l4`^BG5-ud)vcRY6R!Q6jV6x7u?2EDv~?TIr^n2?tKuf6*w zOpIGU^Uc|gXEq--_mbO}eRj-qh1IA3`I?Hi|FP|<&u+SA-4T@;t1f+aPp)g`GH>d$ zcNbmp&Dl?E-+bD%{aaf;^N-&D%FuQ57e6xNkNfwJ|L(K>p;<8tYInbPdG>Ma?Y{pG zLS%O(MwSPLI2>ch_?FhSe#tm=bjY#;a&`oRBZAN}}TAO7j?qg{D@=m+;v@ArM^-|a(xc^~*k z_Tm5CSOo3-Jfsi%_CEX>Cvb*3D&%4UcZtt^_p9v7lsvTvtJA0HF{X!I}XeV?;_J?!Z7Gy02g ze8-+B@^RuX_Bo1W zp5xg66;vrcbFtYWd)FS$PnPj8N%9ekJ&H_!?vws0j^cBjY;TNgFS#Q?9eS3u_ngi8fikejjb!hPiXTJz!6p4*&eao85!pw_&nz)6MmY+j#_5}Ke7R(M zO`gjozC+@h{`^Mzr%A@A84uq}oWv-cJQ-J>sJI#?=Ego&ZzNKB*d>mdH<4A3@))9a)k8f1F`D?U2~|6?45QT+daQo%E79W0k|=%f=Fd;lvx z51DZ;_20^ZddV|79wtlwCr0&4y^POT={L|5p9&E_qZ}1cH1|KRzql+a9HV zM%J4fRqv6Ke|ywCcBUEs`(1^LVK zN($0_OMMsQXN?#7qzP%OR+g5mTAsG5Y$ezvC9WziSP3#yR+Xp2jE?PPb2i!Nt4fNl z#<6+J`!h`@)42sDrA7Ju8m8ngU$we`kgl++a$??+B~!{uOINKVQof~jHc1m;lvY@f zf7!2Eo()TrRMzq$bOysN#m5$!>bDyFn+{3BAv4QXq{F*c^^ZQDOfB>&c_qtA@`?-1 zgZd<7w!rRyvt_p?jbB}~qIh}1oZ=;U2nks z->jA+x3|@qY;|E-X}@L!CXi-Pq+*`L%wrG6Nd20fU9=K&@5=lF#4!n=*9YSGvrN-j z1*;26=d3O$@zPAVG%vrP?M*INpp4FV=gCINAZ^UzU?!cv;TUyrSjyhfSc} z0jwE5je~(48tnlbK9Ov*N-;!cT`)7N^z0n$3(Av{lEyF2TV0fo>Pm`MF7xJRl_n+S z7v`1Zl$PWbm9F;Yr)TBiPdaLW$&#{SK%s`H7;)qk7v)@0P_nvc)k>n8RXU+Kuc*ZP zU)7YAoRe;b*8e_`jKr+cl$=?M(W-(1?|;+$FcGjLg78yfPFBJ4g8b5?)urC76jDuC zUa)$#R}|+7ReDNJW==s#-fCJwOOwttDdenNwWL5;khfB3rksjNQ?`2c+^{CHShgix zYKHv(M~xdl0j+Bp6{3|G6(DbnPv4hPoDOgdk zvXnexsmUWbh(&BsBkeI7e}nzRoSf3al2upcVAvv@3rb2>mGCw+t91Otu-_%qyp>CG zN(vU|EvK1&aUVpo5_4u{iOueRK3pckGoVci(ySGj=ENp^G4|anbFeGQFO-^+0zq2l z3cyO1&RKb75pq~r%2vQ5Im^n+bBZy(R?#-T^s1aI#LN^91Z#_q4LUaN7^=$)^s<6V54KPV3l;6>#DT%!PSNC=@UF&pnY`f^&~0=>Ylfj-Q|${-4)Q{eY94qGc=7 zXI+prA;(d)dUY`x<|tiNRt$#{ss9djMH$Vdri1<~n6pc;aVWV0Apbp$JhTGt6}?0Q zXMAFKAQY@zR$3S}5+<0XtIA4qRxQmb$y>RsAZO`{QUF{H7PGUmO3z%8SNz}2k(e5z z=0I~Dkh5lbI@RI*f1!@KGZDwM#N{n6x*{ow1_7Pz=9FGlT!8s%=_IdC}t4rAzWpJ8j(RRpZX0?253oEFZfE$|aFLpY=HfbP|AxYcYI|txO3n zVjxZ()6>#&&K#HMn4aOCl9n@mT+)QFXi4M8B|Flxvs0&dbCSlL$p+ckIBvqY@kx9e1eXFkFZH zzwaMiEgs-#64#g<4j0<(`~6k8vv#PXQ(h<=fYv=H%RMN+`H#2a3fy51L+VBr(VgO0 z#{royJEjPi0%IIMhmRlZxJ{P%aQs^j(;b8%jze()oJ=n7z71E_4snc>`C^eD>^NEG zOUK-VE1ZKI&@$q(fUrwhxCO4ng4Vtdh?kPQ6jHXl6|^j?^N^`D0=h$ z7}=kIugTw~*iTaI6BWI@)GkUrihi78Z{9y7{A2Jn@y+`c(R%YbYqUOF!Jn((=PLRf zMPJ^BzF5(pt=QKp`X!3KPSMX)^bLxBqM~n9^jV6&Nzvyi`esExP0_b0`Xoi)uIS~Z zWKr6o=yMhOPDOv3qBj)%wTiw=(a%xz-HQHFMemUJL#V&5R`juoevzVgDthytEEUHo z`n8I^OVLkN^a+aoJVl?V=!+D6ilR5~aZqt{ANr0HP83ID5_72bx?-O#EclO4(VwsA zvladIiauA-)ALv6r%=($sYetQD|&kF%>0xq`ZQCCv_jGAioRCSpRVZZ6#WcEU$5vh z6@7!EuTb=jiauG>@QR78x?z1 z?^5i?D)vo^y{b=8?9Wl`6BT{AqEAuu=PG)SqW36zUD02t=zWU*OhvCNJjW~gY(JxuILR#zf#e6Df-!pzFX0srRY6!Uqo^Kdqp4T;`tM|E5r9{ zso16H@d!uwlc4B%x6MU~ik`5{Pl}>9_heM&QS{hghCjNZ$F0@y$EWBI4{PyUwxS=Z z=yMf4HnibSp`ypF%1OS@gBbp;xz*#uy6*;@OMJmtwcFQBU%I6!nb$7Js!9Jdh|a&LBdaJ@|~?O?eu& zp>~n~l=1*^gjz)Yeah1i4K<1U4$9Ne3^j=SE0m|HHB=|^FH)YS)KG=UKSgO_7D3>pgaw!kW1tbqdX0nkW=IbQl5rH$RYASe1$xn(uKNyruOfryo>UkBEOsR zG$capBL6AnDda;fBL6<+DbzzveEc4lV`*K_=u`JndSL6)aoP!0D0YbW(u0#i-PPMGR&EZRy@X<^{_b>jHstNHj}==c|Y z8KnEW^cRft^#R-UH-9OO1K8~nY$$^$ z$?%Aw_3DGAP84oNp&mHDr>+7H(*tS64+Kq488gh4q657z>>4Qg+Z(v9Fx|gb)aXNv zqfWDGtbk$a#Fw<-^>jpFTJem)xdzgN8G*q@WqIsC$hubLN9j^+-%ipV&`#Znx}7K~ z*AiZt5ggg52dDp(F`%cK^aBrQ3)>E8m%MsioOS}iqa#}eAJB$74rtjg=o7ok_8~LE zTe)pOXfgF|UC$0;u;Dsnh$@=v^MB+G%qiA|7>?`&zpJxN$7bDzdG`NM(_#C|3A;kV(;Hie8~I$Qa9q!?15uLvIokR z==DioWmbQ#2ajXtkI_zmThjH+;B|32C};S;*8_tgZYBRaQhSc{PTZU6|E27GZ{S)` z&-8f%bM$}--} z`xHcbd=$T0)sdLLb^nV`Zh-{~{qLfGS`O$B!R$=K<=C$|hwW^0ARV6Jjzt$Zb^kyF ze~RwUD%`J)MZu{p{wc9bwQ(=NX0TgZ{}NV=rCI{A&iFQQsB@G|hjDsI$A0aSc6{4# z$P{Pm6c;LYv`%s3uLr96ajjDlwtiQ8e(RL6R07qk?A9rXB%@R8-vC|T}EV0`XV`;a-bexvxvcv>SOtD0dCHgEe+Y-eth;fT8ZG|P) zT4KE=HdtblB{o}PnTpWr>NV7>L>WnTrld zF*U8%>z3%V#9ULPS*Z1Tv6E#_(xb)nfwsaD>nzcHmLCR_g`sRyqfs|Tkf zz59j6}fIWs2iPWA6?rpim-6x*e1 z-T#X8WMK%v}%fq~^7i}-`w#e}SgWF#!ciBPN70~)KI)LjqsmJ!#Sur# zBf`c$r)V7-s#Sjq6z$=(T-2rK;|%1>fuc&U|E1Ck&`Tdus{_d&Q4*Yd@w2jvL-Vlr z<94*B6#~MsX9ui>zXQplAA^&}z#8EYIvuu2U+pF~c!{-<3X;7%1=R(x;d>mTI zTf20Ju}PF|MOhYcXicL&q|_-=u>%~W2h!0zp9^OJw|wYwluaT#(b=%0q4AW+_;FG( zstPss_&@|Ff*tK(!RfL3#4egIW3{TM2H~y!KuK&yU}l1scHGlkdf+hKe;{+>>zV#n zGPP;%kYyar63)!(9a>c_sAu?h=s0onzmWlTLI%zYT!s@KtZvD`$pPj7XtgRD!dmSP z{H1L=Cg*G1aX3;r=7W8a$CP@iTgqqY{th}o$B>^Ow&hy&9>hC*l5Gz8)Esdpo8j-u z7}KUtM(?iG{*a5BGW=~BW4c(g_HlhO$W~nYVCKYYzzQ_MHN)-Fs#XIp!{1}v0Rnm; z8%^Ivq`@3E-ih$``(A1~HTZtGNDmalFW0!8#u!Q2G}fxtqa3FR{^v0*c`Mh(IkYOb zfZv02ORZ`g$m!KPwd$LQ-o)kP_4UFh>F|76EVmgBS2~$I7DUb7%4^AEJK(%b|IeWvsKYv6Lp0nf zf^Ia_p~o@KIqoyZeB)jBZ_(>F>IAax-_+69JTleawr7)de5SuEb4;6e9p+sG$c-NZ z1sO7(>Tl74t;mzZ283RLMCYHCJz9qU8h47e{vyGxXMk2kFaKs%BTUdwTJ<~-&G4^D zn6iCv3cR((2cM#mE3g?@jR9^IGC6H4zB#E8LoU6{xQdK<;F#9 zuKXGJqJI%7)z6X2f0@30@ENFLxAr((tRpJXWgi)-K=D>$A;dnWBlH1I$iY{yT$|u1 z^=1TCA#zJ%y@5pt@ckJR59r#owO$0b{r?J0B%g=ZJ3UzH_Mp+8q#Z`*ZZc{`Bzed+9tb{ME6DKwVr-)0 z1862@a8GCqYBuq4dJqgmyY1YN%}Ti zQ2rrAtuW9K<4lynSJkhfqR?ji;W*@hb}I@+7{O;W z;6g#sJ5#Y-?hFlp9NwQ$gbx>mRYV_rcaUn7X%8BqZ-H)93I}a94wszLkfOiM`5lw{ zy1jJbqWdSOyocpUtX#o6-L&Cst#Y>zI6gY$HWnSqI#A`N^B-CY(r}hg!?W?S9liG_|`x#?mK z=klWbf~8aao{`%~DM^8~!M9Re^bt~t!#R^4*d3xrF@V-ozlOoW)1&Km9?idi&Jz*u{M^|n~tN}%=z z%3QeGXS@#gV31W^0v%0ErJ`((?hRh+(SySdL${=gGw`H?#ywxsG;yw54?H8 zzwJIes^9KF1OCtU+m)!&rr)MOZT8!df&_Lt&{4ll6=mUmyT6h8jqX{Y-*$g)^&7R# z>bGK)px<7FHF{_$brkyT9P&2CQ9EpDnEAMee00l7>7h<4MlX<=F^!Ng%zTkOL}kzM zC|fN?86PBjh=vyTP_c8nXM`ACqEhq{)-_CsI6S(SNSA>KBtr`Kq)_`|IQI*$mvVgl zVjKV^tDnA9$JcT>zP`ek!1*4=mv_up-gR_Nvv%!U5X9gbHq~!nbkV6U)|Ke-wOy;a z7!_v*mPU^+`lSnR;0lbd9%H2-p;a9L9rcr2l+DHXx{k)zgZC@rYszQjL(E~abz(}N z*oyJh_NnNnTezPdpalJN6WIqx-2n{r-bSgthP9jS6WV*Eb}4IzvhCec>tn4uQhN?- z1z<4wNonh5?dfd$sMH<-ZANgjo32aJ+}8%rJxLu-DXYf}3GUSRKPZ3In|4ZXLxU9OR>`iZQ+P~$g$;)yh{j9tmup$lsWzW-! z?48)ERpFsy^xG<&6kO@THt`UxrXv=ojD(2k&}rNwAhoKKj^n;;N9oc!Z{T9|=345_ z4>l>iS^5d}<};$X-e9^@7d`n)C-qsCy9?1vW2=zImbiT^#ui;sL%Du63uW`YjGP`4@f%b zJ~GM((oh}j-jg8wB*v2-nBX?x~Ylcqs zchi8198WKB2Vgwy!xCvTo}Pl5#*>b<$A}jsw5m-|(tvte6ov;>BEmkknJ!ae;``=f z@*8;+{UDq{nS5OiB>?A)2A9YvI5m<<-gcP3XWN)}+Z;-XIK%m|%3?n;4fT2U! zJoc$&g#bsd7f#80(mI zrsB@1oNs7##C-EQj-vVIQsl$)&GYf7u(f4>4>hLG`Q`}BH-tj-O*N>=`DXuboNwqC z%9QzLn6|zN8t~Mrr=xzcd{cNU&Me;~YfD=gu?KT!hj zEf%(x_v944GH*qA4j#-td5L_YdXXl|--k}X=CDp&wzvUPApC=KsQ&yj82%wd@=pOO zm;U+bH~ObZgid%q9;B_Or*?#YMxg#?f+qje3cIj>9>0hDLze~NpRae?`KO$;!BKa? z68`xICGgJ__S$`S3+>;eb}Va?8-#YoU)lCZ(qiP{d~ArgifFpE%=w$#ie2VFAi=F? zgc`8!So;^T^E?BO>-6bgZ0N;$_mkz{gGLMpv45w!O$XyD9lTI+?K2eDSTLj3yM)N~ z4*u=LiYEN~1g4#^e`#IJz#Q2HFvP1TGq4OR-ZU%{SU8}=xqQZePOa(%Zjn|^t2wU3 zlwhl1WWv?F-ok23r+J;A{s8p ziNN>bG6+NuRYgTe=}N=^1M4%!q=?d^A%MqjtO>@p_icH!eQWV}6!L$>quAn6A$gF> z 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 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev502.so b/source/HOAUGens/sc/Classes/HOAPanLebedev502.so deleted file mode 100755 index 715de92eeb2acf0704c2282b12c3a2e6f607baaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90280 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

      ^u+^nc_1&=^|Zj?U3qrSj3 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 z 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 Pmy~n?o&(#D*z*53M&|5= diff --git a/source/HOAUGens/sc/Classes/HOARotator1.scx b/source/HOAUGens/sc/Classes/HOARotator1.scx deleted file mode 100755 index 61511af78f35df2352c714cf422f1b092fd4472b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25816 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 diff --git a/source/HOAUGens/sc/Classes/HOARotator1_supernova.scx b/source/HOAUGens/sc/Classes/HOARotator1_supernova.scx deleted file mode 100755 index 1035851b3ad0a917dedb33c4cf8ad2c3f6087354..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25824 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 diff --git a/source/HOAUGens/sc/Classes/HOARotator2.scx b/source/HOAUGens/sc/Classes/HOARotator2.scx deleted file mode 100755 index 73de90ca368486800dba216642690c08f1b608e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29920 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 diff --git a/source/HOAUGens/sc/Classes/HOARotator3.scx b/source/HOAUGens/sc/Classes/HOARotator3.scx deleted file mode 100755 index d918578fb6fe2b6a2cb91d5975db0ee867ded3f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34080 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 JYPRU(e+>Bud-MPR diff --git a/source/HOAUGens/sc/Classes/HOARotator3_supernova.scx b/source/HOAUGens/sc/Classes/HOARotator3_supernova.scx deleted file mode 100755 index 3122c996a82e763d28ed9d719269483970f826bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34088 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 P(g_OOoLcVGXxje)FaSAq diff --git a/source/HOAUGens/sc/Classes/HOARotator4.scx b/source/HOAUGens/sc/Classes/HOARotator4.scx deleted file mode 100755 index 2c18544331b8ace4d334b499936e8c34074b65a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46368 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 diff --git a/source/HOAUGens/sc/Classes/HOARotator4.so b/source/HOAUGens/sc/Classes/HOARotator4.so deleted file mode 100755 index f20340a298d190ae4b8730820c54df341065a078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73664 zcmdSC3w%`7wLd-}k<@}SSg`Ru+Cf8oB}i&g#ZDmTiB2@~urnAb2(ONzL9<;K1?uo9nT=4!Va3>ZPd4_M2qx6ifPh-qKbrPk#d zf-AorroR8xXYlMRarr5JFFcd?!PljD*mW2M!pFYa?XE_L%ozID$MPS}+*9&nvY3ePS@_Z}U%@xc z@5?`#<;mc39UR*i2=Hi=&??w1tjPG~w z!>MdtI8@$AK^l>xCXKwk{ z$)U8%S~h(B*cD&Q{oxkjyc`r=+>Fiz4?>)9?_TWE^y#11nnv*iF{&|+~^R^*B zx?<3Eu8F5_-Mr!b+(Ykw{JY76mOS;*1)rR|pf_XFOZPwA`q8lucE9%Vrjy<|@h`uA z;YYtbf7RDL-wFKJ?(hF+>D?8JceVUB`ofF%?|-}Z=R*hAUH*FZrI&A=8m;(kb^Gz_ zt42-#>Fm>{oV{bjZ}#Sm8nWlTr+@z62mV<0Ok-u+-LBIwKW*H|zwCc|;-nY%Oul8y z4SUDsW!!z`)~P3C{qz&px>aAl=K7z`e&@vXRW0ZKY(e7-f7vwlb=Th>dFQ?bi;isy z)ZFm$?oZxndTh?kA6@w1=2d4;+1q`=JCV`*o*cGl`iwtce(%10V?TLkUt)6FwTpMX za#QeRwfMmQABD)ywS&)~j5^lkI&J{;eZvQa4+5@t0DQ*MK=9Yl*$1M3>JjK$UmY0# zKaK#895XQfQNsp?(?A2s`Q;JlvtJH`&pvkszWqO)N8tMf>^!1BGRpTJ0srbFz~>&p zZdW654P@t|kD%8U_rUTTeFQpx9Xc@m#1ZU&*Ad|JkHGi8j-c1^M}R+k1p2Fvpzo3+ zz|TAa{ilwAfBzBUdEF84uRMa?ZUmh(T*F-5^ED{UaOv8OaqKw2S6`rTs41V{;eX<< zuFl}d8KTRuNN74y86lUXZVZw z#k&fziSU5c-!|26+&d+xZ zoz7RZY}?;s?76z1oF^Lj{r%{lZtT$6&z^J>j|TmZO=8hp*>^9p34;7^_G#Rte-sJ6gs0^@qYbcvf+StKw=-Bell{}36@NFev!@H1Y=r7k+g)cJ#{nYe}+HWcR zkI<8!Pw*vvXN?q-{pc6QZe7N1BedEz6pRGl$Yb}rp-_PKtm>BsHXD4u>F+R$d`>s? zV}`yBFE{b&GWN0cdK~(aZyRIu}U(Jl0ia^eQv(BIEbsetMm1^zG_r|Fw{l_FQJ{ znQ7=W8oj#v*?&Il?{S^r%KgY|F!l0;iNlz|x8pMi`6d1h{YKO3)+5;Y0~3eE{o?RT z(C2s*yFdvTGr4|$1UpYL^7kJ{0ti{s>GCU`)#vH;PGh$+V>ghMkK5=~X5_K^*WF@= z6J5c6cKAM8F@D>9nV>yL;E!Li|6siU)_d|9iK%e4$}=jn#*UTiJw{% zhovTuJ!#~L^^@msM&GttZEwr7&hYgbxXt%?BY#`Jd=EuT?csdWR_lvXs9lR$a(oZEnS`OT%14TXu-<@4uP&Uckgzw&~a^J_1xsF_<^ zAFiA4nt9>6n(B!)_46Q2 zc2-Sogp)lENE53nD{lOUm=^-m7HUfM95_SC&cbIv(&V2~_@8Q$ zjV4#t&z%J8-um~ck0ok~`h@bj*>&Z$Rd%Bz3S?_AP=gDNTeHW`pEI|%x^i0W%yNW8 z@sv_gFj;-U4ETL!<;;Hd+21nl^Q)_CD$2t(0|&<8Sbrxp4o5y>a2$r(KRgaY7%)H% z!}>cRayafk43fi}{1ahvc%#1)D2E~cGof-=qil-x_ktxm+qx=$a!r_i9+x|}GF*;e zDW6n4t_Zgheoln!v9l|~i0s07$TIUyf9->Cfg)U0A3hQWNl5$2j7sE0WSPTAX!|2! zTsUVQvg^ExN<=DeAj;u%#(vAjnp`=*GCXa5WnCfD+^q77$^j*}(I-|{me&o40m-M7 zvrCC!H@hw^ub&?-ombfqF0EiA11NwkMXkf!Q83ofJ-jB{)bvZr$rkU`Gpmerj+BqNst>T zGwW+X3NrVL0#|wMoYI>s>*mj?nMawXgvZsEc?w>VA7DV=0T(Epr}iMlD_+|tQ2 zpjBmM;lHDPQV>W-0b!@C(kYeIl@;Oa`QgGTxde@?uAD!=P^!xXG%2^VsI;=Kd_IT0 zaP|eZ2&MCCW>yLYt(D6hSAcY9w4QoR64JNY=#s3pWBUIm<;ISKcF0ATSt6;0OY7&& zxv9Rgw6abv#ISE7%>HkLiagOHyI(Pa3E0a01=S`Y?#guWSt~vAP*FrH@xTd}q2BlE{ z9@V+^%%!%0{w*>W)?q?WcQc6m`(l(s3z%2D#EyeLX*xnpeYmt{R%u=NyxEndv*w0@ zavS&nCCf%ZjLZ&KIXlbLDO181%q_3|_i`jsW4|0|j{_!aPMQP>rWXExz~h=L5yu?j z%4f{EIXj!3fJ@ZU@U69#$XBy!M3O07tcpnX%@hv)l+j$L*b~sHg~_`q$pkEzeM)`# zj?FGDy?O4Ofq5S`h?4CuLz+e#V#+^4dyKm7@(pr1BMYlx<wE^NB4)@`-A=AT}B?lXNm;+U$+Bp zKdT`%W}lJx`3`)K1Ae&!Zl7ZjpJ&{*{9XsXea6LRSq}KE1elNC0YAqE;%cA&k^a~5 zwdvdE0sZ0jzG{DX&_VyZ4*F#d`1KBW!x7-M4!AiAlvax!@N5U2HV3@O0dIG}FLc0H zI^gC=Kx$Vz;AIZ{wGQ}12fV`pH(TCP+v$MUI`FqU;LhiDx*YH^4*a+S&S!7zPqzbp zjSa-L#{r+^fV<2&8U5AZfTug)B@Vd90XIiZQk&s`+h@_N@H*gr!PNgU9dL8hA{AK< zc%=hB*8%5Qs{L7e1bF9Oub^;0-HC5G@Iy8cT#FrW`|O(4K?l5%0P`txz!%s+T&o;# z`z(vqwGMcm1HZumx1arDb)y45$$`Jv0YBRTZ*#yeb-I^l5#{#*xsw*!8g1K#GK ze<-~W$dAALoE)edLuAnZa?$F>g^8rDGvND2mDkAJnn#3IN;q5 z_-PJ!j|1*?z+EPu8B?b_;OP$d84kF|0rxrJ84mbp2i)s`pXq>GO?%R+F z9FVQIF8(5}!617sE!7{sAqD;!uS!NeY z6iazB%j{YSzmzX$nO!Q8CFKb$GqonXQvNo}>{qT{dWo2nk71czF0oq5gIQ)*OSDV*^YtjRizV8mypLsep+uvU zcd^W+OrloGZ?nuUlPHt&t1PptB#NcHjb(O)gkQ=}vdmCVWJ&pPmbvswc%}RZ%MAI1 zN6LR@`Bau&QvM^$r?K39koy0cWiQKJQvMms4BbShlpk5=bpb^q z&8T)s{8+8y7omaGn#RjCYfO(7dCzLp)ft7-gI zXaJES?}dk1(eY0L9?yZsaSQ)lw>hl?fI<5Ym#6R{2;KA@SN&HL*8@}K2LFfus>&ot zvbXa(iATUApwnActawwb=q(Laa5F(oa9@iIqdzBR(+Dn2bNyU7WFS^!>Hj*rCoAgQkck{2YT7R+_;QVR%Qwt-9 zrcH_LM|Q{vL?0ls6`qu&#?-aD&-a9G#gUegb`7Ik3 zKDKkP_`5KAXVs+09^qIFj-%drB+0Q6i1~RN-K}@AMfB3z%cB>^am~CuIwaoIkUkjq zmb*EE+F90b91c5pw*NRN6+UGv!xJWVLeAM%6y{;{O=6PIXCcMSZtP2j&HeOn-VL~ACmqrw~ zG%dsbuel3jR%E0P?JLk8s4E3E+9@c@6~(`$X|+M#(zM3FtjG`P1YFwnvX+Ohg?w=_MicYdJ8a2uVHVQraMi#r#t4RXzU(cOF>0nt%ESDlyh(mMX`U*dJD zSnp(SAUb>zKxq6hyHi1Q;>lLzLtvcUPK^BCtG#G^y|yZ`TfwZqVYZ1(4C2<0+VvcH zt;mkv;$kZb)6cXnP)E314zPnZZS>mVD4DD2_LEO=x6DNN2BPQQBeb?;e-Mc5+I^Pv zKScK(*~mMYaA=%C#C}zuXGJBWSkYonAa7TGWRE0)@K)!Z~86-KT^1^Y=dzo6!) z^aR?krwOfSmFX%V6nD3rM{c@eXmxboRt@1B&?4KkNU|vQ zh?Ef6-SRf5xF48U23}SLMvC_b3(LaD#_$y|^e2=)nsb1c*74u@596i8kI_fPE^uuX zNVs-y1NIih?ojLzz=lT?Hvl*LgWVSxJ8r&X66|Qvj_iH7Z$K^?vXV(X5b?#W3P=M3 z7q$ADX`XzzpS?UKb@-9qZMz?YW~KiPvEcK>P_XFjR0WPoY;=?cC-$(kE%9~yAHVxk zdmP&54#hS&`mbb{boAKxalm;rgT{@d9eNOB-H4vvUMsT6@YAZMn8%7ta>YLZvK85Y zx*I9WmWk;!2Cg2t3ffUtbQ07o_9AP4vc~JGzkqn0`8~q_tO%0-sO8|)i%u2AfW550C zxAMA~n$q3P6ebX@OAkb^%q(Pvywqz&kFg^Ai}Ic=iac55zVszYV(j;xqLyv$=EYzc zh-|Yk&_9{0w}4)pf6!~#g>=+1y5&mk_|i?>O1hJDCt3w#-9>1cCKzcyii zORQnC71_=_Y@zp#lQimX**yd%YuXsJdvAWJ^xr_FJ20lh8V@fobbr4LoC1-Kz?g1@ zEPT)!4`Cbc_+wGt0!RfhA#1?rbvMrky+EWlzWWn+G8%;HnCl-zQsBqC|;`JX` zB(mr;I(osM3nCr6f17Gw6zMJ+(^0qxeHj7rgB_rP0#OShF?Z`0lxeU*i6?Q#`9f2# zI}lmm%XQy#waC^x$lc7Bq>5S)Ch(KHB?LhOk=rvTY#x#eYu#Q9n?lLCnO5X>e<0Fh z4T^^|fL{MKnDX_X!jxyhK6Za@I_S0{)jq%bopMr-qs^TA@5 z`$3r4LZHEAZ^rN42icnne3_U?Zcn_92^8eDnigid!i9lo4I;NLy)b$m0(@T}Z@=Zf z^mztP%eNtXV9b7N(HAtq!c%cW_1#O#Q4!hBu=y_TZ22M|1|mD-E#QTyDU7_B$fM0u z<5z3g=ZDh%>}~PlkBGDdk>sao{J1H`+%6C~6#s+@BZ&&Nh9t&qdpj$+j?E zfsd1&tU%=RK;%IDVYCe(&~q^|coX-jU-I1#9=&*Cmbf5sr@$Jah70haizgN*HVeoP zt94srwwrwL1L=8^0o+R}V6enB_zxm^Ed(zz`6ev%Z|J5LaVQe+6`^*-zY9?OF8sGU zfteu$tartmPzPJJJPk&PRrpWiP&?ZDsFX0`n1BwKXcg}iVAy;uF$niSZl<^r;UlC{ z%gBZd`cXDM#7KM$>hb4AtPSyNjZ8np75=vKJCggNJwYTHD>B|%?RDw!)Vkc)1twdX zecfb+kA-`NJ3o$bpxI}kEr)`M9-?><0sL5zW*<(H<(kfGH0_4_y@)c7d(A>T{+URI z+>d^P`U$LW9W`+&TkTNHqpjAQN&w=|?1gb#N9C|mLBNSWB+zDGJ2@aAGPAc?TM*dX zC6Is`;;(E75rKkikg8E5t}vbd|sY(KUjI#e}=%90-*-8yg^I zJtpJGf%tsrfTieYB&dl+k@t$CGdViG8}=6=bU}SrVcuS(!I#ko>z@onKC{LoEKOJo zJ8=V|jSG&6bhN~7eT*YI+aqbbTQ4pt%-iH{eh8Z|MbS#7wFk6bkip6-_S21odWmGlW)(9OHgPWGolSR1A|5Pt^({qOqY0j#{0*wAxAazN9oOdt%!M!W^W5S-4Kd4yBAKQ1UKe_;=KZ5FyAUDk%{^({k zOh>f%Mz(=Jf_?qLy8N~CaFWBWp)HJ8s^?Txny%sZZ1x{lNuLNy_#{ZeaWr;z5An&g zZ-5qj!bHxO=@hq&u{&78E^ha3glK$B716l`j zCi>&gyHft3QYn8}sA2!$K??m*tNy6vT;Jgj536A|qQ%Ft4g68t*B?Rxo={xliFxI7 z#S?UZAix2&q?8UyhdJQ1Gt>dBqyyMO9B?M{NYeh#LxBHX`#*q9e#sUC=Cd{dz?fkzhL_$M0uL zSd}gMI)c@Y&Z!~pQlGXl-r$4o(k~(n>=yIbUN}dUABkt8^g>jgFR3|0n^WZ6g@ zGn(^C%~OZs7eUP<_yq%@j2j=C>2v*)g=0P}T!h&G=55d823j;O7+w(R#;CDD=N|)% z8^6Tn{{Viu0bun@Z~Q^nh5h0h!04B1sZ080SgWI7{A?#}h!NSSBqMy@7K|HNs0qLy zjp#vCob!zJ%r)>#8(_>Zf!5nSMXj?u7B)pAD+F~`K6dbiEk#5mo@a9dD_m2-41Nrv+SoOff6R@iiK=*`<6A)P?v{rHOz zttD2!wXk*4XJ#q*gju-!P4_RNb2C7o{!z|=3iGzOo4c@tFO1e;5q66g)AFO;cdrFR zC>FNf>51PZB;Cz>PEnh!M(wP&!svG~+Aj2Cw7oa#u-eS`X|;8taAE7E9!o5C=sk^O zKSG0%+zxRyl6jZRCs<}M-xL!I(MIg}J8X(jB%-x`Zh5$B{(04N>}p1_q9clDoX=@b zO&z0{O@tewSDJ#J1$u`?ZyD6GfTYN)1c}jWMTYoxpVN1|wW8yE@j7T|0(pXS0`wi3 z00r_6VmgmS2sW~|)jv@2&NJ%GQ0QPI15&vw1U`O^(-wEo!<)5oC zm=2I*b>8<4HiCPJ{p32M4HS;lfd5Oqc8u-e3U7sO6H@Z-1l^0^n@_(mgi1$ zxz>_2P3jW7WET499-0&|hWwjv(WL#ePy?Z@qs{~-ta&~!u;v-GF-9q@>4wUVq;0Hu z|D3T_={Nvmot;<;{&xQ65(@Gj(Oy{KNdEpZWv>t8qacjhtH5U)47+^Ls_~9>jB^YC z{qnb0?BKN5cH3T$p5m}q51@h8RX#80c+nbvQFJyk_#|215{A8iz@RR7^H#)xSi6Ha zt>ceFB*m|T>2&-6)|f7PpJ6e#J48BnYna;?tt)(tCk}7vbQC@aEe~%CTbV}C!vz6J zrx8895ZfrYZ8MpLAns%gio2UX!>}NmbKSUs9N&Y#;xBd$C`TJMnrt~1a8vGIkt3Fp zqtnPikS#|7sa53Y!VTmYOgV}MmSY+A`D{6wasMyL!QcEd_TaDgh^cV3<#@@K;~ACX zw!0z6rX2&@gBzg6FAH%0FUjFg$x&?NAjpz|8YRSnP}QOOudhQ5 zq%`)P!lsSb!q|za=x+r|fl)=F%q-R2d@al!zZ=zwt8rJ@^d+`;SNJ-?#C^{cH)(u{ z9oQe^4$E8S0e1_Z9wAaDvH>=Ey};QllLoPV-lyP~1A<(95k-Pv3T|w3TI=n%-5;r_ zrJ`!I_2+}B7z;bBb^@3cDIWF+nDcBG@5Z0E*?(-UZ7qUft<%IJQ>bBU)gU|@(#tu5 zYyElnkCfa6ag65iGsFZ-B;Qz($E`8Dth`MD_k?{`Uc!CX@(jv{c@Hz(m_%XgWs-xW zh|SNVG#v%oQg;8ECg2qs+P+Ya{bdv3z+ z5+E?)->`cJQ;@Q|r5Ru%Su{)J5UiMm>)!a>*VKFDn_A%Qe03n7ZY31)S4NRrm-uRV zMSxb}$`4FKkSv0|xOs#HjoQc(X@&jG$S~jTQ!#G)8xNivzS!?xe=zT2F=nJ(%u>ne(><@yzF4-RLY_Y; zz`m4a*uuBt8(pr4)4*!~@7&Eey_HCABywwQ8cn{Ka^M4#xAC^Hbt;c^5XDP<#EWkt zhqaKNpM}=h+61vW#C`W4k0+s=?F-=|GU55cBoTF~N@N5f{9M2>Ut*|C5TVxz{ZvO^ zx4pM_edAwAWpDg6p^_H-sTWfo%4J1||K=xNTt>Yv7bFmXt=1uat99Ha4B)6rI|1mu z#c+w%;$apfk-g~DWuT4vTczn5-4SL|q#cp0y3jlxFs9`8x#QV_8tS-cBRAyx98kKX zZzn!Zo?CHtk(xJr?4gdiu;mGN z%N*Xcjt{^K@t;6ZJC6Iv^O$2E^Iy(+jFICX&SfO^ItLD0I9r}s>>ZTnI^ML7Uw0?u z8JdzuX3VnQJ`O;PTP+zFw`HJq??_&4 zp><>fLMEa3071qlBCrMe6vt7NIJMJJ3I&c@@j6V6B*s|NX9(+gQEU1RVQ&j`pdsv3 zXc*ss>cmLgX?{rAY1d0?CogQ$-%cX|v*#Ty-uI8M{{!rF`Hmymsq=+_?DU902eQ+d zwA0T~oj4hH*u%j|D-LwvH}^fi<0MTEThHQbDa!Wj*IZ7e<7ri5GE_DX$<$iz;L$>* z;7ju4EAd0V(u=^C0+A=<$>#Y45}NRgNoE^=J9%!VP0Y!1gZrKjlMFuwL$&{;a?+p>+bEw(krNlhJAp^8vPUvf8pj$@ek zeW*!v^O(v6LZisI4s%eI@dn6fvtby_!F*puMN4y1Aw z=!n781r&SX#2JLlndKRn*6|NFAee^GScYkt`<{4`=}9n!lj(fJG#%#t2TZ-<5sly` zSQt#}??gAX$WZKK%-<&F&toT$6mgVo{!1~H{kCDa*f7LW3{TPYOAhFy?ZS;uf8d!a zyOaJ&JLyZefaB@(h*7Z$oixerj-*|+tE^>~Fuf#Gs3rsP6f?!6YW)N8SI-%b8$sCT zB@`Ch6$}zxGP#>S!OmQK9%>T1ac9d_?7rs%4$NYPXVY!dt6Z55x#Hr`q+Bg#vPM7m zm+LEry>2ErI!O1kMqsC0&tT^#{t{{u8@M55?3LxdXJ=BbpCLG$A<@ocgE(9ajDHXk z?IN~@#P2mE+%25(A}q3RhLaXhSQ8e@BrJN8d@C80?3I_IQ+}09jgwZ2#rN5rvO(sN zIAvES5nmnA`;02w$O^0}1G1J(7-*jqHV?b&@#j#Jkdp*s20WGIONz4#FNHYs*G-IC zTO!dj>7MsrR>oAnzk6=5g_0%?_gp=YT>pX5I({MLS}NoAsHa-JG+s%)KJ@uJj=VV8 z=!EUKY}p(CCdu$AA&g_}4VW{rl4UG^puyXC&^Nvj9_M2iQUw&ECT_u#Chi9(xfUyG zAy(&!3O;=T2HOpT-uM$wQ@N!AAyq%Q@H|Agjq~AoDDaQZ5DwaqLJ%zx{D{=TzG9r= zc=1@$9i*kgGL$)l6_aK+3w*TcK>S3B+G@Z-gh+|_mnss|2zCB6{;d=l`kI)mBqh!l zh0>vTrx((r$?0fh#;3rPgQSk5$r8 zs8Ox0Mx-hu(#RAkuaGM6Rgq4XP3J)TPeP{}aEL^t#LmxEq(%`*9QO2+N&A!u9hecd zBvqRtHOq)3RiH-Hgr`TTaqul{UEmY{r^s93!DluKi;h|M^ z+yyC0F=KO!WOQp)9M?%3;2}ASY>1S&pEPumv_>YbF#4`1k{ZU0hAWLool+j>gIMt< zA*Rz^p+^>VR&*xYB`1)8xn`OiDFWdnKQy-wUFe) zZgDF`v&%@xT58+PvKsAe8U&MCsRBu&CU%K{VPBaV?NCQjSC>#K@RgB_$0lR_^zSRKpI3!#F@5m$nAcR$%dJO`&fy*53r^} z*2k7va_xBxhb7%pUb1Qz65(E)2_(-)NwG})-S>1ZaXRxB*_lcUSNrHLu~aG#f2bz0 zfs;h81RxP7>M>q%Dw{aNRAiD2W+PrhF7YcoUm$B1sYpE@l5n9yo}$zkGy`bjBJ7H$ zG`E+r$g@03NLoZA%`BP{&+QXZLt!d$uvtxIB~F4F4G$(Ln@1_a+JI|eZ8K;kexTSS z!&S9RUK3wKL;#n-)xhQ8nOK@?&y;1icYl^7>q(OJB;HgCN7IoGa2gacLUcQboQ>!) z;H)HeR$>9nV#H`uF+7O_3|77nfK4gFn(Pt$tj)Aln!m-1&T@o}qpxjYAtg(fv+W~n%m2_U@eQ?2;zo1LG>&s2=1}i&+%Mw)1&X_W+{Xt% zv1Mvr4ifPQaO5#+Dr#Gsgz|Q}o5vGlHZd;1-K;iDeiDB`zv6YTxgKq zro^%X-SRVH@IUDV zV*ZUDV~3VISjqn&!8iyK{|1<20*3l{Ce5=CLYQ&}%csIzvID*;o{n-K7bNY!6_dI6 zS3oJTh10souEd{S<8@Oa1LSr;y8CZ<%0Kbi4y{Yu4aA=V5p&|i0c;=gg+=gRNdm(u z-~{b+i5E!sPXLqDJdtcyVu&IAGcnhu#0@}V{UK_F>su%%E+&v2$b=s%@DQ-Oxf<|z z>0`i{AsF0j0qb+gnh(tz)lXshCx&1bFbzD7@JFPKLxD~4Pe_Rj`7l9QRqFkL{_j8k zPs>)*W$A+)??3&&Q1t*R$VUx)m56 zeXi+$tRG0@<=q%w@650wS0S*6NAC23?Fc_&x0tf{aT1$u%R^E6;fMYazJvC7#l^Go zN*k}9f_BP%ZKUtOAO0`mzj24ieq{Rp$X<9q{Aj$J#y1UGM?F`;jFIyNE_}CJUZHCp z)uGUyzR=$&bVFb0a)rkFLboV%V_)bK3VpLLv`e9H^o6!4^!t6GPb>7PzR(91y16fu zNIW&`3w=$YJNrUe1n#>7LciS?nuX%EK+a{GXrFiA`P_iKA?k2=|8moz6HbUVbq#Kc z4?@WKUH!|ETShus<4tMAE@D(V&1J)Q=jl`5-`~;8`nK<1|BuRe-!Wa@g^5pI&+Iem zH@AEF_IqrLeaQxw>vFejf+$G+NEoNoRZ12a zH4j&`yAtgH9$vv>WCukDnPI)fSS5mtqdgnv0835m8Feo1mFDm>mDWhm5}`Jw_i0~` zrxABxGy=Op%I=gsGgXQ>u7=?7F5GK7qDTFiG?N~0rru9&9Ud*G;G^!vC4hH!BRlf( zN^bP1#K{<}+VEWL54HX#UYzv}rhbOjUp-)Z^!K3_UaOB5`|%p>@weeM+KW-JP`K$< zuM6Q;e+fh@wk}G01!eOh?v{zzs>CxD`Z{iX_O)gdc~%1}Id1 zNZ@k-UP~R(MfeJGF4!G|ih2w3KoSUa(WnRkR~cIGHmERH4=90=@Itm2PGMZVZ<}*| zVU!9ur+jUo8GgW)Z}%hYZ>jgc=q0=ZW^pq#IvKC;PVfezmuCi|({u6Q#kj$+cJ#ym z_QAM;AHV`Q7a(9_^Lm0mfF~q4yG9Eu5LqtI4x?p|__8tueo*o8dgFvL;+H9Y72Y%S z1fsX$Mc$?Q04mzovJPz;|QA@6}MvUIat+7D# zXUn9v*|*HlXy-M0SG&}Hk9!_$yVA6kg<$kP?k1q^T3oE?eKA48L$rnjr}b>qVH$Pf z%B{ieyhcaxwo7iW#%yP)FRu3({P3=f-eb^R>g&;aFYjd*9=#fNUL+z#Bf6onh~it( zKQ!_Jy!4}3yc#bxV*5gT^ea(6`Uk4Z4GAxxRxA9%D_U?3ix$|KTk6Zudq3~JdXL>B z_)_nSdC%o4@PoY1)%!Bu`}Mwx_mA3E9PrnS& z^iwryBqk_$ZH&93+yDSt4_o7joGfX!+{efFt;nOzv}g z6n|fV+p|h^2BQhX_PIxZ9(VvgqS}`cf9j#$UgF>$ZB_{nl0#vIG@F(0&U^+XxP_vT zgR&AXp%+0Bd!hT>p{JFkmwY^c;srbWKh=jH)ff@*`Qzn=Q;E+n($Nnjz5%6~zA6y? zKrkCX>oLHVi!78)m-zeKCA(EpFK)Zobn~o9_)qx;(YVBipS8(+5rEKRxcO2js}vT> zd+_}jXn5!rJa)02KBbS+M}V)8tzq0$`!dl~)!K}*z5_F>0JO>WfS{D^o8+eYp^x|F zyMvFD8iHXEOv?t1Fcus1u)!u);tg2UYy@66!ri8Q?%-xf^a<|wqYa#m|HD47uz+TJ z51?7eCrL#=0iRF|u+Tm<>mYm!31jn`5(a_!@xW!Fz_Jeh5aG>a)nP6J)UemqzVK(*slEf7O#ss-Yc(_?-9p z0ua?A6)GRv2IO;xUN6nz+!5=1>0+tSK1#g{wd+JkHfLY~co1l-d_nXg$onBHPDWG) zWaA7LLHt3We^Re9S>w&KPFIuyaR-CdahO6 zXQ>LFm^DNK=+qGS88m*3=6KS!5X23oJ%vW7c?s%t;)+fMnKQvP{??xm*$h->hGt&| zViyP-;!h|XNnfHF3N(O_26(z6F+!L4x+nn2wE-HxPn(I-Ah%dC>9-ZKGZMdv2r%>t z(@oe7$N@I)5(zR{LP&V2C-WQWvV}=PFw+ZEeT8qCshEj8gnC98sLYfE0`(!%GBr*} z5_Qh{=|VA0uO+Y0UXqSi_}Ymmq3Is6T;7#4HUUBQ0OSe4W5hyib&!9v9PP0Y>`+42 z=sWGe#F#?U-o08(yTV6%!FbRQebNJjnZAa26>A~3iAxe(3;K*ONrZYP5zjYh2ohB{ z)FWgvD8o8Aj)|WljF1}3P&LFCA8wc7Q*ca=fBAq&f|qv5afP&ER7t*AE_{JmEorTU zsUz)YA+gm0Ndm#$0Qr1W{dL@>qJ0xh$noM6&<*az4eiO)gxff8^`we-ChO-TSF@<< zftoQZ>?mC}nLKjNf(Rh<7%lRg9nG+F$%n8YdbY4|2NSG+lG?lgBqVdxl@Yd=-QXZ8 zfQuccA@u0b;{bjl&A}DJRFD)g{IeHQGIn300QDnWF_>5(ah(ze3MUftmb?CZUpp`WH8X*v1 z&34KTV&rwj1$Ixm=qal|Igz{dN?-bADBRjYa_yP!C&jG=yels3a!P5aSQzIHxDa!NgVoOO(3J7SV43=(JvQjQWc5Q%S!3BcBZ z2wjq#29|6{d4Z9YR-~*j|3rgO+Vxr-Kaba>gED}r1AJ)IFxE&Ux^VuqxTSv4mpwp>BO?YbOb?P#B1^qcPM*!ow2zTj+U@zvH0D&?f`*3w8t5*y=7+WwM<8mSNC8dk8V`8Ka<=o5$ zOvs>dF&1w!Ie^hbG`NcC9eSEPj(}N7Q4!x_WU`Wl+didA)OPl2cTi`PXk8+MH|6Kt z442RX@iLeQEx^;ZUnN9K43;DujwE;tjl4c3pB_@+I1CE-ITp1L$YXl!$@!%c;5-P4 zmL^@PVyx2<5;_BqDnke+J6b1{R?B9f0aHVA4pD$|DvPMp&LU2gS&>-paq7v{kIuuF z2z3-;fAlk25Yk~Q1!NY;@|#-*qB7lM#OB6_3b~pb!K+z**aTt)WoCgHXHW+8@op6m z!mLF97Dv$@#N^CUEeYmjpe~-3LGKAF$cZMojDP-0RWgP`0fo|u8f2H0Au+~o0$FHO zcA7Q5wOYqch`t01|AL79yZM(`~B*(r1V_lHI=(Chx zB$i<#=zwrxq?Cbx^dCSE;vO9bTvP_`2|CjWF5iES3uPpq-|YAa~I0-Ah;_7kJ1z^u%+- z?B#zFH5ej?fDs#NE)|`+sS`AyLl6|`wr;F~QIG|3DCcMh2bGi|ts!v`q&R7BUru^K z9Wbjx<0}u|S#n>Wch<56Vc8CDI)0KkAOuabKpuzY$4VrW9ixQt` zgGkb=ZxIpL3CI8f6yuKkO@3zzfiRql%j6f6krK67j2va*36h-}CE#Qt2srcys=V4q z*4QiDv=<7EFc^nu0s_h+rfnVS}Dit|YiUhgrJz<+P0gM2sLL zI^`bRw^JUQiA$IOnj!XpRx+%}mMmhxbbVS$R={cBR5qM(AS3$C*v)w*w86oTqYJ6fm0$X3N5DU==?H8St`Hi1u5)t6Hv;2!J}b4W(h`39trp_FoR z&Z2VCX0r1m0-O1Y%(Jl(M%RJk=-x?kBio<)Xs&20nOxM9X%)i%E$ZDRDzV`Tjb2ED z!vIPMl&AUM+lZ4AB4bxi(khxQk(3G;1f|u9*F`+4gJD&oPHH9E(88oeVWe3J7BqL)slgSPOxxxc+?CF>U^{RL%&K@pII}H3Sz>#)n8n&us zE%sj-KRRm##8(Q`g#!}m#ovxv}6+VBfvmVgD? z%L*cZkqsSeCviE7!*?PeT7AK$k`q_>id9h@#Xz=ZUr>uQt8qJ`(3Sx96>^`G3Ad48 zLYt=KtCvAoQWbJh8!15m*}ccpHKRN284B$$lz zKsJ1ZQexSzQihhRqtURF70^&CAXm^NNGv&Ne(;mQ0$Vh+D*2HWXSX0+E9WF^2x@Q_!d(v6#>?$Qfq);j|z?r z60|jkN)1LCv)utIW}4}x7_=K!;>Cu<5}lMmT69NaS{?&nivel~XB>z?Q8MU2q{tR8 zC{n#zRnK5aZ>AACL_O4ZD-+y_|G0C29HngqiG08eUA)r>jbA{Q1S4e=*E0VHU5~+O zmLG7Skir@J=gA65bEpuDKko2^n2f^Z(rJb;bT&;zp|o%2tCQ1C;0=1kW2!Z*lXk!_ zbz)1{&m>MrZs(fe0mTR{(StLZPnuKbm?UkByg_RlG2s_uxK06ss0k>D)#DOwp|oET z6;=lU4m3J-F%)6fMuR8YHgfWW^;Xgv+gZyvGy2Nf%C_b*gJyOFbSGTgDq|e9-$L=3 zY%m7GN!V^NO>~vceR?3s&IgB9m>t{Rw7Gz=%pkhRP6K}M9Z?A*t&qWF{CPqkn#|O> z-7b7QY42Pjm|&P`7-Al36lF3*#mZ!bjPYRoCHa4zb(_F{) z5{lte7j`wntHhCF9joGlcUF>jgT}XHXjH65g>5oV+KZ}%Bz07-HLc9dLHEBMBC#=q zgLwqgDUWUbTtgzcGlc$RJmd%k8AK$qV6_xeM_({ddP{5+R2wnIJZV=_Y;b1=3ylws z7pXvA8~|rYkYToz3_LNYDWW@=J6mSIk-!|7g8)6qJ^}*jEwki*ic!tU7T3cVcx04g za57!lUQVixZHweOu>lm}>Mp~|>=^O8X}mfGV|$#NY4Os~%Q z_+qvRjUQs98ue8pl?XI^6RW}O6uX}JQ&!086cOFdtJIxxHIgY9Q0%lQDcGXpSYHLw zgBlJEvID5U913(E3&D@7i9GJ1TWKZ)APJZ1IhTT{#*{2|Luunh4cRcovck-++t@?s zbB@7c6V5U^70PuL4_9?XwOE1NR?Hbh;>;tdWi)q5OJo-ugFaCq$O}TYOl%Ia%K)ZG zT-NeDm)i+Cx0a5|^}B50Qbs&@1bXtM#)^wX#++5W!k3taXoo=5(|NQlCnR=kpp!1Q z7qgfiVFh`cwj8n4cC5_#Jo;3HlH{_IB9FR8adqqcaX4@9wxpOkjX)U5K%fbqMxqyu zLNr(?=aoF6rrei&8wK=OU1QP!oYg>$cD1PN{7_EJf{YZefQW2n;5VgcJp_ko6W2DJ zv+_9Dwx5PI<{)x|eP8l~AQ`x-eULh)5QuPki87c4@Jgj8M>1x**FYK&aMVdEcyK>M zc)M~0TNTyJE!1U@&$zx(8>2UM^A2jujxrb2csPc-lNj}*+9AWzwDOE;>BnOW!PV$c%{$^><`B1y|EPKvuaM6lMk;2KtQ=EZuyW192 z=6F<==Gq3YCk~0?UrqkrK<%;xX+yqUWuw!Wp z5wNL*^wdV-p=GV$$);OcwcMK>(Kbqqz<-}6X38$<0yncMEHWZXtWY|T9M6|f9$0aO z<`>Xj0D9yo=gcdTdG#G?x?Cp*Ad4_nL*kqr6{9bq6kve3*Nr_1%u_BjVEBgH638aY zLOQ4QXFoNaamvuM{#&-RSfnfe|Q_6A}!wQD<@( zA`!#52+JwNY6P~;@y~+J{W^&q+Y7?%yl*KpT7oByo}490e2q@4b<9h6Kv)^ zvQq+{@waMC&RcrLs#`D^dBCE@5ENL@st^n< zBPyh}En`x_<03?=%-0bLpqF-rVlwVw5@iaycGv^hp+NW^5n|{-EKiPGHR$7-AC4nq z69*l39CY%=ctS^yF6msfF{D;J>^G_`96=OonPPpcF@)!A6oI;nY8Z259~RPJC{=D) z7>Nx-Y4-@W`lHFICOaa0igbk6sE3v!ubf+RGgoC5%v5KU{b&S|oLHv4t7^-x zIZTNo$u3C4&VER96oPcAuifyKl*K-X#k=lh$jl7x7af2LR}dFT>LANW3vxLR~7h2QNer*fe6x4(RM^Y26nH z{gRlb09ja>DJZ4TncMS<1Vg}o+(5SXHEOx}2QIOsy+=JjT%d87(+%6<+8R{jbdS*u z!yWEqZj4#65m~fc=UYqxAuhX_Y|Y0|Vz3bn=a^GSktqr|GBLa%TN;2xn~{iwk$+$` zY?CrZ#lMnd#18mR)>!7eNpcj-40ACf8~*5$o}3TIN^5=c3}Ggj(X8|+R3=>_(|kHv zGLLZWNpfARPQxjoIukp$egQ$=)p7$e8Mv`+1DV??0trf@f@C%-K?1kGTeWs3`IGM9;BkR~q9)N?9hRv@pHYB`I`c_B-Y$go z%Y&rSg9`GH9>GT3KcNSie9%-L*FuD$$W@N6{t#HC2U7C*KZ6>AZC7tX3rQwIDn?SK zcgTti6w<+7)*tBfA~_<#^lLbuEkIAEQidi{0P-}(6v&xe7h)aPNFnqI2$)3*p`0$- z7@Bf)OM6WWZjVNsYrtGoS&XupH`2p(5yBD8tf`0>r|e*9&kl)-PAUUmDwCsY1Gk$} z)6k*_1GOJrSsvzmaURj2Z#!60J~+ zl#;~>Riz4Y_Q=^ACn*5BG;ov4%j7g|u1a^QU+{O_nW9gDp*lkp=?jB*?4gv6Hk;kzhoXK=P}RAjc_z(t!lp9?ywM zt&SWU&K3>PZ-hV0lB@ntH1dqN0`3PIv57MxJdyD8FZbOkB1a~VQ7 zyHP9VCanm5N**TEV<(~lnq})M85IqadYXL7$&|RiP&6>^*JhB+u*f+{YK_6Wod&mT zwfwePwOY+t860GcZrQaanI>a0p_WU7ZPqWGdM6MBo`Q;nAupuX80Xs11C zN$>@-i4d_PRYg_W&M~4lc9H-wD^n2~qjndPj67?{x83k;1suv{c?lo19D!pcV+Wjm zkq<0VqR-#!QJgIYj)-Ec2MM}pfov6eR;YO)*n32jheY2*wH_k|x8t^e+p(A@prOnk z&wV~q*no8v)TKD`XaQ{<(#b`}ZkIvfSPw#emvH+fV^iU}u94$4#7UIUsvh>4X_X zR{0vB6Dv5AK}D6SsBe)3$R2d;I+BHz5=1qJMJAZWs-W011^OoxRJiHNoqueXj-xZ# z1Na7rQCmf%jYlYN;>1ax5As0h1PMx@zkHTjKpto}dn1i1?T8h=xRLEW(qHbYH5NcW zmK>7v2ec+BIcn`9Wjz5)xtK;Uov4wm#pAWcJ9j0bo96<2l zhYTyz`^uPqfX3|%i7jfgLeCdumj?ksW=fdy#9*wPbgGLpeL-#$mN?d4CO6VAO>8fw zgk1M^$W2gQZ+M>s@#3_R9`jJW(=_(qXQByMcaa&S3B65q9wO8o8hshBP!#e)%wSJ}o;-gr+9!|n?0 z4fLj&wA#iQ9VKD0O-Lo{5D6g4S`ecc<$@vZF?0|(@1th)ccrF;juSqioifC?OG9+u zEU3#>gyu$wSkehp9_{c6rdlZ6gR(ispkT&4_WV>QmS)p2MylX!7WbWMK+IRStDK|% z@C`x04kr=_55P+J2o>k?p|lp(=|eGT5yjKDMUy9S@_328!I^H`z#})X9|M}Pyb~nt z2Y<|SPloKiGsps{jP4{Vma8f#cCjqpL4&?D7{Jm_?d=);D-uGe3mQ%ulkIc0y$X(% z4E2VVI3Z<)5#x4S46zr2d4>Ss1IZ34x^a$A8eQ19MRua6IPv0)EG|K6f@?Rm*#Q~x zdx2tWyl2S$C(QX|%z}FbjF{<`o6so-PbcwE8m|mU>^yr;@el})(CNvLz$(rtB4&kr zT+nV8lpdR`OB4*HJt$-i(*^~a%*Mf4BLU-JhE!n?@S282D$gl;#W@GWS>&aR$dO&D z6gr;^kUkO=D<7|(xFc0-Ol%q{CT(qGvexi}Togrp})9{KS zNuxb}`azg*0m9B`%X%g%s zW&z6;wp~t{rZ!lm%Qmz%|(?l1ekb;NS9K;m}IcU3W8ls zFz6a53t;#6pL6r46|gfils~V57npI)KENLi>qb3)ZC8FW0vP(+7MNlP=5qZlh$xPh zmAq&CA5|pJxqrY7fA_*~YI52M0EsTx8$V_<;QHk)}gf!SkT|)X*N}D2ziJk~e;?tkU{k!&Zoim@))8MqDg%q$_>Ck|7%^ zvYW-%rZ@#maq$koC6iJQ$R)Es7mv-QxDS_LKQ37VaH&e^f=RwhDECt;*RTUM44A-A zYL{X2EmOXsRr<`i+o)M30!UOK7#fJ3(%BEP^u1b_5ByrneK(^)5#7OEC@^%4or7_d zV`}f|FXH|Kd=DfA@`42by~)rigAoDP1}2!YapH;~&>(74`@+XE83O|HlxT-2VTe~5 zgrzdyLA!ARUJP(Dv>FsA#MsnOtTm9=0nr#}G?3>2(df*iCB(IuC~;OO>m&eTgbv?( z5~@+dX*i@Vrda@gmN40LoGQ<0VmXMV*K>s02f4&Vk;^9>Ipe>y8&6b_tiG1`8VoJA zn%+hF&B+7w4Qy)g78?nl-jDq1TP?{%=v`!FGn=2=O}C*acH3IR<4M9qJMaJ=ZJK51 z##m>siVf@qVKCV+umv#;oevnhUro>w|fOxS1#OoM9y!Jlgk@6F? znQ=g;EfnoDOaj@`28ghBhZeTSwwnf99M)SofOuU7&uP85ff?(i%++HmH2l<68iX!% z5?ZC$2(>i%8qrqPj?f}7gmB|P#Jkf{d$yI-UyKiEr~{6)8E#nSq8>u$AgAk zE@6;qD?Kvvzr|WB^x^*$lGh-0k)o(-T4xxFViyDR7?^Y<=0d3NH!xA(Ng!w{L?mM? z%fPxQ=Ie}&cd5iXB(>aEY-+`bhGiLHP@;4HBxLzDY-eh!OpQEHZeX=a0b(`aPEwdo zQK1_2BQv{so1&_*jd+a)#?Y|cyV$^}UrJ;r82KW<=7`MU`d`DL(G*Qaw8mXfl^ zv^z|Em#)_OgjbKr(@ya{2G1#ehJg(%zSq<`#m_V_r}$ZfCB^@E-{B{EySo}^?>lA;xfxV0&1BdDCeW?iPVkKi+I`f~{CGnPnSw!kKjsv^H zV4KtgWIT63WDbS0Oiodb8MZH=a)q8)r7G8&%I8sOHYl)w=94Tzlf>eN6@N{M3r`HA z_Bwk51%8op{RHo1LWeh%f}hLK32>ZrOb6^XoVo;-%5S3YUqE;K{T@+3Pi+CfS)Hg9 z+zXoB0OYK}f*tqR7MT7b2hKlPO`8Yh>FEGDe!aKv?~&rCZ*#4d16CyL%XBv% zhapRT61N+_eTu)-9g`oAbT_ZUIO>3S+|7Z$kPLV89?Vc2I9_-25k&%N;_(4{bXr@yfE zn&QIf_55Xc{E>iJGX?4e6jmT)Dj@jz^}@)T@j~2MEw9zDE5r|3qG194T2QnEziTOf zI^k?-itS0q-(LH=G~O9^Ys+wYVdVA14fwg+!ss0!FbVCiGtKu@2o$X+f%6t{eiab@ z-K1@}f-M`rkvKsbFGS0MFLc^^{2?#{CC&Gprwq^QLJIzpIm4jNkp_UOp zG(&X~YVgPQ#7INUb2zoFMAknA;iUG6fN@e6U+tuZA8p;Pe<=V>@H6TCWot6jSmltd z+E7c6&u~)1&zx>gOyv*hgIea{)N%|pRynAhYN%z#M>?rxlG?{#f?CtY+&&%9l|L1K zIArMQUKf5uI$D|`f6gE>lzuM^w9Za%v!e6yL%TcUF9_w^{phE~R`f;_0QZ+u!rL9a zcR3;aap&FfdwJXPLH#;%#BUBaqIbCXd)0-JgVUyvy8c>q+G4L4{mn3MdCiIp4F~N0 zZu6fyApi3Y<9~9B{|K8ue>NHst%@f;FLVCDcIx+xAq?UMp&h~dNmgW>4@Ph|zX+KF z(L3>jv}f)<3%{F;AGpRJ;i5(MfqY9WJfBGupF18yQ_p&26#QkkSpDPvX3*YcMP8|&WwmSzXUpFr z#vfrA=8NAY{4D$>-0+Fuc{a2{1b1X_b2xNXTVTvVYZ2n6cj3Y}aRa)IcU-HeuV%*_ zs8(xfy8OO0qcty>5q=eJi=P7HSP=*{#Aik4;75jU@*?j+d(kBFx#hm}#ROcD%*T;< zq6Wp}-yd?=bI~5|QqBY|p6bfhE0=Znqu8z0J_HiZeI#E`MJm%@_Qem(x|`2H<}Spa zY-jTOIKHYB0yXvEFR5-IQl|SJ`TN#QJ@`x4UCi9f?7Q48Yb4(n_;NQ78SKIz?eP>v z?}T}9h9o(=g4IZxxq;|Ru*F|UIn&O|3%xLM+y}+szHh*?1%b%HqUb^o8iw8AA&ipfMdc!a;|^W%EJz_ zyZL_L1fq8+tsS8CGHAJ*@1S9#^$=la{8vyFBFx1f9bUXp;7syx%F63ugXlENYDM;r zK;Kug55$`Q4B(GE#(j$%_nAL{N5E#>=f7f_n ztNpinZ-r`fP;sCYFYZ}e3VcB{bZy4ZZ1C^*v8s&5#hDJSDdG=MmZmS@JmhZoJ=_mM5uR%TF?27scDMYIU|{?|?Oh3Y9L1F`9fO5z#sUlo z@UjiDSrPCsBgwXGj?pzbuxx}zwuL0p9?i5gv&_Xzk1cswqA%uioWy{*oxlcj#Ufv_ zYjQ1{3+)<+SqM19Nracf3E;>!#&$TO<(mCpb=7F5r^Vs@*!}j~)Mxp1|NZLKt5>g% z?tV2r_(X9znywi?5FVhf+u?^w>2WsD1>mY6d z@ol>rF1Qo(hA!N{4 z#&C{|n}rO8Oda391e&ADQ@xCTP)M41E3%R`_V3_qI}W0A?l^cZ{O|Do9sxNfzL0OF zWn2sVn#GirV7rAtt-SxQh#OtzH4^ld9r!xT!~sADf5xX8%mX{1$4901kd{bjN}J}7 zMRbi-_|H>vA*IskTExPkz6*yUQ3p|9N)N^oIgmdVA4-GwYW~%r}(5+O}9IsL zyD%Q|BfnFrTI6K0q@T5ibbpXtn23eL0`0&dyKu<2PMlxqTgQ0OJ@b=SEiGjVQnMD- z5ku!fyUxDOHXV=SnVBP&65RJ_=7oLv)Z~F+_kT zpGDRy*Bt6{)gOz(A}PPFL{l($G^Q(Sec_Na#C%9o)p#taRICez{6Qs@ROYWwou^!i z>V%RDE~UyRi+`93I}*$WIA2rRar1#v|%iv zL}GzdSX0P_l>S64qV!Xn;*96+gYn7QG1!YYvaDS`_3Bj-U%YjNS6{5E{=q?)%T<|e zgI2#+ce!BngsLZeAwAjZ_jrBy&*SkfRK0q2SW6~baY!gmxL#-Y76t|*pDVkMFjo4z&t3c< zvs-KNH%1KKZtI#@|D*TZm}iiVxaU@lc(x7wNzgxFKRKnn;`}+c!GF;G=nF07mn=Hu z-m~KJhhKWnUc2X=-S>5F-0R+R=+VdL-}8doI3IJ*Zf)s1`I5KX$?GTeqZ^Nk^W8%3 zF83uD%!>a^dDnd@rw82q?|%5=-=F`CJHh#X@Am)c^3L9MZ@XI(?zgUca>D(5_~ob9 zP9AYP&OUz5jay!EWA;EgEcE!$eL~;if{T>U%uzCUlCP|w!hO?&i=O-L#B1*N z-tdR2ep6a&$lL3_ciHuahiCqWko&MG|IhBmp2tf@|N2e$=v#N*weFRpLhf%xy?-t2 zwZ~n2O8d|iTVE9VK(8NOT=)8)b_=~H#dWk3Z=WN={;vu>-gVzn{ne-TZ+lG0ebe3Q z4xV`6jYGn2Z@UZ5EV^hG)^N4(f|Aa3x`NhotI}yUld-PV=`=m_3WCy8qY2P4Jf8_( znNHIuGRnKt=~2*~n6Qt4j)QiUFt+6j>GUR0T3@nK#x~(`!6<0Wt?6_-$p;OBc7YCq z20`iV$RH@ar`QBaZ#TAp(pr2JbQ1It&@wEzcY@Lz*>TWX&|MAZR)0D5w*39JB?r{Sk00a^iC3t9u(1=6zIUPbF8bnxpa5B8q~9R}U>4djRY$KOExLCX(APtY!W-n8s^ z*blT8wChdO3v~1?$VK~5nqv@Fu)c#843-s~IcrAA2nLUNz~|y`{0i6zZNcniP4@E3 zX3tz#GR)j(T=e;>dFN18%HN2;y(8%~RLdm7d+|38oU+SAxQ@SF7Wii1J1y`BfR9<= zKL!4X1-={jcHm}xUI#vEffu8`TP^Upz_(c7)xbwA@HXI^EbsvEVGI0P;Df-?B$-6^ zxea(6I9{}865-zw{APPTCiui<8gKNnhi6W?CnKM3rg)Zb#^C2*V`4a8UpLNK(cEw6kG#;p@%5Ku1%#> z;??#NDsLXHJ3G?p2k1I7e?)nW_V&Ud%i=tS{_`M0hrBq-+f4GVApb3F*ny(xsIioe zX7VxhZtw+B?zhoSRPK#b&l`%G?aF4d(?%OAwc)sCRPi2Ek?IG7W$I@XNbU0~WRKI-9=8E-?n|e!nOC$&ADUzNOyoA&AJ^M){Ssl9 zkI=i(9xs|#G`-qf?_$iMwfL%dh{}VVHy5_p%QuogZYVD7=8D4s=^|s*^auW7@NXml z{K9`xPvO5U@ZSM@1%QnE2EZCdzH#Jh&h=X>dy^k+haWZNxoyMDD=qOl!@tOWlnU0j zxA7T$#$B(KD(p--uXBIK^{t)h^owZ!;+arp%BQDvnd(E$_K||ZUryuH7D zfta_@mbJ@r$4S5}eb>T*ip?|{JXvgernKO;87~yvUs|;7cshBq)b`7n?Cnxq9iNH+ zU^YHpP`-3Q)kLA~krIZ?-!5SXifs>;u=h#Ohc?^Sj%SDIIpc;Ig#P;s;@EgR0Azch z=t~8Ex2>1`OR;U!RqV?)8;+lxVY{i9-C07%&zIWn>1Eqy^5YY1|J2LAYp3I**gFIK zWZR>?Z1QA6etfF!u^u*Z8XfOB-FD~e>J<~9NXw>_RY`P4zFhS%(K0`n(do!yP=0o{>@hl9`~}JpJ#ilm%V$wZMd7= zb%E`^Zg$6l<&Sl<{R?a#^svp2OTX019&^&yJa)TmPpxDRRoR~IVZT~vd!~ooyV!Pn z7rVX2_R}u*)g`tKtJwGw+rD1*_EOtqFT3$#+t#bt?=G?ZdKKGwsqN3J*^k|}qh9u* z+x7uUsk0sGW-r&p7PS|aguMBzmC52v_5^C2ZHO?Wy@&=UM6 z0VRo#e$F_Tdae;St%5LF9$vw4{m0KS`0*T#p9^)_5pn+9*~az%6z3T|4fy~4|6PX^ zOB<{eez#H3I|Tifpg$7y2|<4==srQ;5%f6x91W#Y1wB{LMS?a7x=PS~LDvepQP4XC z{g$9V67&f{e=F!dLEjPdIKH??`GTG+=psRz1YIR)zo2Uc-6&|qQH9q-{@2{luvDp7 z*@uVfDP^If+TmQVD8U29y0U7cXJ5-{#`SXU3~syp*jG{*a5$WFx}9 zx%e!$)e=8}$?-3j-_FLwxR{I2W?e62BgSzND`UZztnd?={zohPq|7**eYJ?4%;fl* zi_c-Z#JHP_pTfp1@l%;qKP+OWv6jP1wg`S)M5EvlEBth3_EXAG#Li$fCjT{XIcw0F zk;wgu+0nE-mz3tC0z92D*Nf(%LN<$SH? zAxEzNaLNt^k+FQPG@J@F;f8ljGO%M9ggSQpUSYRS0M^2z$(FM((^2?Kz_e)asGV2Y8GooL$!#pe%O=1d@ES zK68O9S^4GR`P1NT;8ynW3i%2-7!rRL1R9uze@O7J5qi$&xfuILf$uWejW#n_l{*&( zp?YoSt19wgBh>;wiRF*OO@g0^a^*Apguq8cxpEzNFP9^PW|5x={`R;5%5~`L0^gM~ zaQRH+1Ta|Xe;IJ{hsT9Kpqe~&aQqZja!}#tWd_W8f%E!`a%FwLEbtLw2b}V>Rp4s` zzg(X_DsZ!%pBH#Lf2hvbW+CS&a7+EMAXWrVHt7dW^%@iPf?0Tq0Vn-;34NsfZwGEA z{~^I27yNQ2coMiGWM-3BB)@K;{FyoqPr!gl{b+lYfy?`Zvw)L6Yec)#{6WdhapO4q z{~j(U8!?U_7IMZ+?ed(!YlS}24u1rGV!jx5IvR-daSAywJ5P-Q-)rg@y}+qnW1?Q7 z+1P;KXC^r}3w*?+=RXU)-K6KULjK-bLl1iPNNKm=Ut{8b130z&F46AN&hHEU?avtb zLk3|dfPvT7G!E1PxAKRZfRp_4J%#|gkaO=e{6{(eDQx(l!a3!ASrKjwt>k-wlRo?* zE^>%zl7$7n)nvD?13#Oc!X^$F^2>NBjNK>rYfbk5jljoD;}sQ2a%x{U;11xVXPHU9D&&j_Ia>t(HG;og_>c6fTY+2IVVmG*zcK{SvusK`fR|aU)1IA1 z&RKXMVCCmt;Jn?RGUQeogxw9?N}uh5UoqA96@ibK{HF{ivyyWGaI*6j;SUv}+@-)t zpS_|3@pnMD*2DSj>`CFz(r%jI9~0%uarheouQl2ECtS`ctli{?y97RI@}F@bCob&6 z-|avjeYSPIz6qT4KVlmH|4rcApEWAV-?iYd7mjLWpEz)<_WIT|{O9bw5i`1tG%5eM{ zL$Dl|<_LV3N&icL<6mCt0Z96f3H^r!N1XGcU4;J9f3BTI&aZ)&VLfbK$L^Vi|2^QO z|6Y@xXJDYfrM$FY8r;M2SuDQD$im;T;;?-hem`)kZ@H*%jVS3FA!lr%0X!h^YdOE2 z?G^n9&B4>nz`6d{80S2O0f*lc_;Av|<+^B`%bB`Ah5PYz@f@me{(XHta4uiSk?r0s z@VLM+d>P4~(35(qzu)0!s(M*NhuYTa?Nn8UxJ+#zltgHvsz+3RI2P5C;0VOjfpDzP z7ghs^(oL$q)F4BMb3Cl+TEMY*Va-BoCbd5l4XM6F!Z)O92z(r3{RxC^s)1A_GK4Hy zXDT@L99Ffvt+HQdAg-zbHJXZu*hnY@$T^@=!0QT%a8|n!(OIK*^dV|f(~d2?(-h2! zI8dkR)xw%zcO~^!Zw*2|P2rz_Jg&tEnhhZ&JE4<0*Q7KR#d}njOXVS)YBUzmJcu6E z!721pLohEzI}53mRhcV1{5JP`$1;@N(WyE@$%M~QQ{~`1@kA`{sHtIUbKB+hb#1DO zP-eAN&59DG@LE{7iGsXU&x%GguF=xQapP)7LhE;^>cHTjim2RVEQ&Z^eMnvF1Yh%t zm8z#jWNvBf$dq$=Qr@2o4(LG@G4ioQ`!auRZF5^|eM485TIHxV8c{^l9%F#6r?Jwr)(AFMquQX3 zaOODNtb2tkJARfksokC4&pH~|Trk{N)4e|GHXVp^hN^0}Ye{4XLBlGK(T>N~X^Bd; zKVaCcTG|bf&1$S)P57b%n%W=HVY~G?#&cAn)lkj6@L|^yUm&mw-btGU>V1iUgfAZS zAb)#*e}BGZT%?mafE@*hk@vx;(Z-jpRXfC(&=B?|lQbZ72g2=Zb2K1XnP}%mC*6d;Amgi%frK^l0wbAnl*A=spEgzQ0^rZ=g#BIJspuq zPAwdjF0P^}Oxxv*VK+dhudhBfNP00ou1!;!YFNA>sQIt1Pw9FrYSe@CW;|Q|;^NVRJ zNufgoLhbGSUKgCMd&Ocg+Pf-~A?h(J;{ob3?OxUJ+kA(hzE6c`o4J~16<)_Gh;LHWlrQEYB6yv&YC!^M&xCmzLl%tF#(TNCqhTb>9(Zg zF%+;c@ew7o=9Td2Yp^(h!5Uk(JQf3iY2;bR7tg{o^P6@tjfYcnUS?v!Fq#=MOif)$ zj+m9jYBo1zaZO*$s{A&G)zJ=lx^mCT6a3Nc(YY$m+BpDU3ZYYpJ!&u$M!!HRo;Uhs zTy-(#rLZr78DN>8PZ4S#x-nm+KtZfBmtAza_ z2d~CTG!&jHoz~@@t1_*?eIa{-T`cGBsj0iu`wla_s|>qi{gJ$mZ0=DmRb3nTBwgxQR`dzIFJMFTMFH z4AoJw3)vscTgT*dqbj-RZ=fZfF)d|!wYVeBTU@xTSM9vqKHL*VElbAOZ<;NbFCJ3m zZg1|n$I_~i6q$P3g}8?M10UVJ<~`8Jvy4f-+;wDhU9QtGb!BuN7B098PNpK{8x0M3 zVBr+&<_22mklT^0ZG4ra29|IMblC zW!o3kll(TP6WfwM+daK4E{9a`N_MP*ypf4F@j=)e9ISr~Oj4RTqIGZ?8aV?>ReUw2Q#lt#tP;X@p96APK zIMDHch&kv1C75E|c^q0$Jdz9sAVi*_C_lz({>uj{G{&tR7iK)IG-Sx*zx5*{2_qFC zm#gcGg!~W^)2VdhGIL=0!tgLJLj7Gnmi_NidT)$Z!6q%{4zdKQoNqe zN#^?BD)P(rlW~laZjpu+Qj{ENjNN6*FXJ60rMluFP1hAR2I zCO|lqhDDnp^)43(KHuu%wZ%y}K^-@Bm;zJZ$ntc*HrD%EH#cl-s`oVqTHcqQMUGmg zn+z(7&Zi`%9_WXr>0X`9pBYqmMJg}|r_y8FtdGxEU-d!!l?4^%pe{f-nI7AFmd<0~ z^EEWF6Y2uKnzqL3S?$fdRUvb%^Fuh9-pMLC@$~sNRRyXN;4FHkrng;pCgBg(ukda z3M%k&k(Z0G2ne;`H;hrVt>_;NBSt}WA&!vE&B3?*$AnCTAByNfHr_z<#O;a$jj=SG#~3eT0jrW%*6F?Q7Uja8YY(XVHgL>Dcr z141-wDTDBVlJI*a;b-F+SZ})`b6wG8xkx{1Gqe5&YDbuTn+g|15Z2gUjY*ler^;MF z2gUgy^>%F%sj0GNMd($eP8T4_B2DsQO|k%?A_SsSWx1}%s!TL^XCs;!nO72ibE+(p zw896jE3PQMzSy^6sxq@iKIhxc+$Norkl#8;u&g+I%pIO`N4`;88u?ie2(HLUQ)Omp z==s1>cl0OQky26}ckg^*u2tS0S>w7alAa6xD2}O*yQ0_SxVP@fbWh#a_ADuZgey{1 z>yBLOa!0N#TOB^;+PXWF9BoiMje(=%^W)ljD906U8*zu%MnGPk@A(QQP(F?hBlqzdxz{sPoEn z6iPp8^V~ai_liHZ9Uh;PzrT3vpHFJ3c121@&UpyAjv7n;#DAW+jKrO&cudM1ac@@*d9**k!xz#j5=H^c75%a%q+8#mD;Rb zhyl?y0;S1GRvO!x)C7b2i&6UsM{T62Y{L|_DT%*?e#1U&J%j=OF0g+FYJ=Z&fDZ#=cdue+5!`tS-E5VGybA=r++;S0w94Qo~NvP&(oYJ4X}Ej<$_V zl{wt|pf4z4Fw!g$jsc~-CDjw9bJbw5icOW}K#hyRT@Je|bP^Pq(CO|K`)r}NK%g`l zSlB$P{}MD^UFZT^v8j`otLQl9qGg-{z|g`(;xF=_fEgNJGIRXFu3|{B zyCMb#mJGd;@X}Ft_3DL{rO~C|I^Iy*i`s8P?FW}*SaZ5;S&zyPep!bbb+}%KSL^UH z9bTftFCv`ghvRL-u9?|5mcyukE&{Aj)65GKZ6*x#)e&De-ie9^BpWg zyDPl1i>0HXW(s0os2u_DF^(lgqTx_2Gb0&?tC1mAAykQ!yT*_m4|+x5FN&c^DHir}P@zH=I4Lea?Oo-|Otj+~@q)#;OMYUS}^D8Iro9Z9!LbT~GWE z>u5Y+j?bV43jGKr?kZ!gr&zT*`(5Exd6>p}FhA^Yg)h$qj2R-O9@r%p>qA(i!vYB- z&Y)$pT>IuqQg{_C9x8TItK^FEpgJ-w~ z15GVU&#!K7c7>hWU4yPGi?419R0ROtx)*3AkkOqN0Qo;{c);I@|L3*f1wApf>(294 zk}Ldp{9lloe~;^&QI~DaF!<}i*hYG3cq0C5WF2$H(%Ld>_BmsmrRWaqrIeh*pn&e! z63agp-%P?0O4>OxE$Px>!062sNgs0tRkJ(dK9u`T>2XkYrj||wb+vkW}$U5@&*mu(BY>PR!zhRT%fQ&X%%j#1KF)(p_nK`K#T4pu2CT9=TK4!aP z1C(HtO0X-T1OX?263p`GMASJ2KlmHsDB*y9_7^*}2Uf5`b2Ex^c##eWGoN#8j% zKc9yb?&AoIuAHjSCio!wl3X08PkS-4EdCJosL`YP^gA13WCvW8+E%|w)#5mGg)=HZ zUo9EFBgM1+0AJ6wm9u!}?>Kn4Uf7BCLQ$q`U&az(Gm&=n5?CQuB;!0Jk?Rtha|=`{ z>*Ii3(fMvybm{%ui5kszy$QP!&Dsg;Tr6vllJL}2SsqKtXc~!UvTkiCA_FoES6zjq zt-IT&eWYEi^>ikOcZo`_#YpUk--i=K5!>bCR}Xgc|#1)Cov|6Z~6G@aNLL$ zZ$HT$^`(`D4!4~%zTCZauj$_U;sm?%zH(`+JM2T!18JqynLrHK=+TKPz8oJR zR>T=|MVr%(Ifv6O*_(cz0n62FqD#2$TL*-a@Z?PAbQdz?%Txu$Sdj)!#yZH1mrKfl z_{j(p{yXO*SL7BGK4j*GgI~WAS+o3C(SfA-Ys0}zMFRe`%x`~()+gm#>*4TGclbR{ zJke#oRky7>|qry*o_d&BghEN zw^p$=nV|F8N(~T< zX1C2u{W8Fk=rRVP0!J+L8zf_8t(Eb%m9d^F(d-Q>!%D4Dsr55cH>=cd&P=^UfhFNY zWx^XZFi}g3D!FB5$#1FD@6Am8flBS3or;$Ivr0{>tRp2Qg61r{P0{!#l_zR3y_u0b zpHiP>Jc_@0>!BRjHFx+yclcrKwZJWgDzD1KPJSHhXC-z8aPQG3O3~ zgGX$pGZxQNY2tYzIZC_F@+OPMKZe}Z;Ug^6U$fel`%q}V?RzzF`CQ@d;5$=OM^@X+ z(!rWyTkbO;CzJURn|BQOy>vKhuqiAy7w{Wj({M(_Rg~R&>Z9d@a|_q5!;7^ zCs7_ecu}?YWnjmV+1LKAH2z`a9U_@W!A0&tGBA#Zy>C16!IMB9vO)^`h`E18twG}1 zybrP>RS8gHkk2qVZpV6&IeS{ zS%o`P19r2go+rz_T*9EzEfl~$)~ah$LYgkwrAmtQ9<#WEa4JNM9q4edu}|2rCo27JDi0_PY-jUr zxqo26KOmvBgLICeVvw=7Z6~yonS1y^G4CFrPim5TnFv8Mqhb;ThI(|D-9u?ao3(K7 zCA5x+O!wYHs&5f}2gLy4Vd#0EKti`e>kIV+`1VjGNPzJu6$xq7!H_9&&nOFYs0Ogx zGwv8p}-?^y^o_^W+%-8b10`6iS49DKf~7d){;>)^?qu!NZ=h{fj=*YoY^+a^kXdj z3SiF!ihI~?uc8Lll=1rI!V_9*4|Qq5?jk;P*}kp|D0dTrvOr3p^$42Y5Cbj5K#(TJ z-r1wX=?nskRChvNqsTG0i1CrZwTEzqpVg`E_0ZnPi0z?bq7rK6-8$ForV%6XB-j=9 zV$=c<3DH^*Uqr;nF5>N>RKOm4Q^|Ii1+1R3RY2~lqmbt80FrY%QW!Hs90y3*4MHAD zuHsERynn*OzJZob^vb2{g)q!+8YNT)^)?4+42b_U9-cq3KjH)z|LiiV&b3re&q3BY z0#d_d_I@PU`&6x_e>gGJ2L{PAP9jJ%s-9 zc52fxhWHB*+q1+PWCo2QLXH-u+IvTkK+#DtZ8vBDz^1oPByID+q?%%Tgac4fCXwm( zzEKhYXZXSfc>hRZFM(;ZkH(Mu3J1u32w#z3F8KyVRP+THG5Y*!XAhpHOkbpomR3+) z(yPx9>wXY=5Jc`nDp)l`B05asfM3D)X^SD$QUPSoy{Ii3m%cPR)vUm2(wn^wegP}n zvV(MAqNHeqk%hRomzs-k(Q=|e5}=Kl-dxwu3NWRbz0x+wsuh&0DY_8C?Lo*+>$CdP%yqj-3pA~U~JRV+}U=Skv^UOX<0Zh{Dghc((eo^WkC8nruJ9N!lbegJ?z3?vB zqrQ>FX(!1W;z*$kNn;&sgI9SQVr@K+gQ@OGC5F2}Fgr^Tyqh|L%nJ0Py?2lr31c^T zsmL(I`3P{gnmN1+;*u^i%?6ktvs30LG4K_78nTCa)XWTm>_U5Qj6znEK*pzpfIUyAv3KQfn1rz_UgAr-PHjPzt&{o& z$s{^vWeM?73GG~>_7M>oP(O%0yL6JcN zDar;s#d>7gS~pB&jtgrPfvF1guQwxIRkuKeo>8#HDWFg0B&CL!XUqYy(V+Jx06$F$ zM~(7iRYRUu6z$zH5v2!%hYj*({0h4Oh+~qmM+ey$p=x&b2%dQ97#rTGvV6Hb&3*}sx z8IP?}oi7WSl@DnMW2plDVeibLbkNX4Y}y+rH9$`SIRlky@X*7cd6apPB|20(ts2I^ zS2>n8@1M!|qRpEAyU0cFP|?k-dM45nuvNgbvJW{}r&v$#fF4QW>b*`LoT!sHI`RS!QMzK;dV2 zWYa(3bZGX;jER&-$O||&l{Z1Z1gU5aO%B!A-d#Z2bl;Fc-Ij?ZPZG_BE>OImIrovQ zQ$|jVFh@Fc$(yzO5-~RPkIW%aef04G>Jwccd-oXSj3g+vxrNq6RxO@^lv zt^mq$fd+S#oMW!_MrDk022ef5`5K~v;fOOvMxae*c0+Mu^rLO|?pmUQ#y*nkmdT8K zg9F-pj$rmIQ1ybD{BPHChFW@^P(HJ>QuPfbZw~1B15FV-xrgNGCGBBz?`A8x5b;oJ zvtKC!JLu+&r&I(BVqnL}OvX2v1ZITKX4NcA{*WKyD2%v0I;{DB5edERU<_Q-OM+H; zs0Z2qKq}e~Y?p$1#0j1_<>sNuC+Iur8cX48Dxe$jp+OEb?bX4)?;lQO0r!Qq@b&wzcI#iql?ID-aV70d) zHJJ-u{*rJEUi6*^?EN5!zX}rUZZBHT-2;dMQW%~T7St|*G z^t4paqO26jr5578bwaZ%km)zt6s4!P=`e#9Mp!M zco4EQJ7wmDX2T+wSr4pK626C&#*orYoutg4V+F5+wnr*Jd)4~Nqw=vnBF~^hE7}&s zBdT0Wu!-drMxnWmcIF7_a7Bz3m|J?thb+AYWV%DY3hUn^AJ&+KrPJ)w>5~!LCnFZ- zRmL)vSVk>cj?PsJ-Etuza^>R8Y~!TjJ<7*|mo66a&SB6CaX5{o?>N-m$5j|IZG|bQ>;J+c0s2Ykp3FN zKNIO~lz)$rKZBs2n?0Q}V?&G{Q3hIUZ`O;#xJOKfN;msB_ko$d4&4rF5j(T310`Tv z?a@){Ft~CKvXTi#u`ooGT;S`GRtgGpdPKBDXz(Kok;Em=mgz2O0wktH`szF?# z#w=>ngE~4&G7yL`D*zmO&M@{USp|ntF+sM9=!n2}1&g^yInhzNXZ8(fiKmyQ5|9~f zRuN50L*{@?OG>%SzJ69tn~efng6v+fVfMyUGQ1fN`raO$RE(6;sgeyUjA?TNC3uwb z!3g6>vk#2X)76T*n-SPaOuJBCEP9nqG$0(56U)o_M^>CL!tMKgen^Z`!p?66+nh4V{K!Kl{xu%E$(@^sl@buL4F~Z1Wg98+utQo#yGL z!2&&j$$5-|?~!(6azcs#ZZ}#&>YFW8s-i*woN+-ZPn@KbB8Y8kA?UXe%s)XH#wnHiWvU@;-CN@EPJ(D1>9dvA8>rsix zAMTqpz$_gBU0JH;s)Tj4A)WmK*gNwi^sf9mI7HLYIUd+7>8 znb4KM+<1pf(JA{-oQazL1Q8(_>OaPfM<`_~O7xNXWDka3D%2tl0%Vz0M++3S=mbL! z)^_SOazV=MRqHtK>!^oL0mUPmbS6myiH?=b7v3RJ7#NH|!Ps1JZ13xqON zJ2vb<0(9Nm>Cu8zTRNy3@`qmvp%9-FV)j{z9<3HPV(F`jjgk)OP~8f}#y+RbK9nbI zs$k)a31LcYALJ@VK+xltxj2!Kw?;EtDb{OR&XtA zb~kGc!?K(s)AYl_Nd(FOp3!koG$2OlGf;5co;5pnu#w2Wmk*X}kX>0>8uqrc5-1l} zxR4u|#jrKA4lH9Ya{1=XctYYF+Ge-5{UWR(G4*IGT43*V>9!tVoh$!?Wl-G#FfZOC zanV@1hI9bmBYWI1^TO5Uss$!eTq+1rw!~zEfTWbagS=rNc(^06PFl;2<7w%$?KD`~ z=PPDuJ!Q^AUC;otoAVlQgqJdreuW(3V9-Ol;9n3>U$-@mX>iGI#_yL>7HYX6W$1G> zP;X@{Jj|wG?u5>OA@cA8DIjYq&X3O_EhN)4$VX-RlfHowX;wOm_IqTCs8pPZ&aM?I zN@qPt2c_K?^@m3*wkKo`C%JA?G<1gVpcr)(E=X`f9Hfk$Ikx5I+(QWw`-USUy zC}ySftO-csoAq%Ik-U>8t;RDbCJP!Sik!f*c9+2NAEhArNn9c1h?|K-*=81P>0nzi zVx@A~hoW)EFtB%S*J9{G!}`Pk2%lzY59Oi;7plDn-9uXg0|Lz-RyqW&G1X*WD-w}` zm6ajw@@A`$iVpFr{7|lhX0$*_5EQ*xFF;V>26*<)E^>o<+XgvSIKhZWHprw-CC#`? z#Hu#m=mNb>pf+fiZ`Ph zA|X+FCbGd6swG3fkz+^Em0OkAsL`QGO+QnyozWn9s)}JHZkc|iCuQ37%hW47gGqBH zhZon>s9T%@jucFw;sqv#3^b6M?#(!W%e)A)RmhQJhDL=0Pe^%g6`?WB(JsMN<8?%F zBo}2+Mor6{t=qDA*qwIP5 zWilo?lLO7W=xf3TS(P2z>;Pdbig|ow?;Ry$7!K?DS(@ffmMc^WCcGhHAxTuG`~aOp zv-u!9>m`n7SuBcOSOD@UG=}P)1H-Cp`h-d0t=x7B5_k1aSER`buhx>)O~Ty}yQyC{-I)Pu@P6 z*ib@hnoO=q20U_D)1vE07<~l>Cr}$ULd?Zisx-taz?wZe!Ma3#W>h96sy2F0>4F(@ z$guUwxqYYzJg_~LYV7E{9Cj(FD|rq1%Wg*#*?1UKGpbF8qN)ov>#$ah1>uBv35m&| zSM31*ASH{gGC{WwaEP)8A7>7o`yp!%1AF!%L(Oh4qRlTMGa=VWEm!H2JkruN{DE|& zZ^hS#c1>tzXsQ!71gdQhWy&P&8Jp2#2JRW7t!m^$cPFUqTo!qk?Un8}du4nefd>ut zP8tDLI*w99gJgxhX?3Z|20%Fv09Ur)z1iO;87#(*u=qeG>x1r;$`TrrrF8g)9(2MV zNkvZ$-mC&uyWE0^BbPosR7l-$L0oP*j8K;Qg|9re4uoZQj||EJwVnMAvJiFB%?X@b zlW`8l994|sRtt<=Ccs&E8IKA&EQ{|rm&(W^b$irQ;?j4}^vRvb0Ex1M7ak;;qG58LSTAN#rXV1yNJ+#p%5%;MASeg*psaQjGs!G_%JSQ>6M)?S;EEM> zDVY#G>r@i4RXhXH_d37=YJUk|*cy1X>_QZhW1tubu6!QNVv=0LLqolNIjWz{jH^Dc zvf^OpAR7wz(A#N>{@Od~L@-fSz1B`gnZ*c5FZ;eGjS&cuz)a>Uc7zp|kWrjqKh`S; ze~|OC^H?iSv#}7=(uECT`=LuYx>7d3Q~B}s&dQ`pv!48%Vj9B)w<2L5^0fMG7c8up zP?S8&e9cL1!A&e86P!J&u{up<387GEsdiT&UX%9;JQz?dmlyHtL$fRzqIR%wxzOq?6r*CuOyN=N0@iyUl7}IU@dnq{ zoAo(#5$VH~HG5^`%Dpx3f^6wK+zCVGy|kj3I?SPdC4Y=Mdo)*baTpnDTT-1yEk0!t zyWQSbq&VV@F>~epOayBvD&5vy3D%ecqlzjZ0&H>tOx$3=j*(P`-7F+46U}uMryW|7 z2AXN?E_l1!6&`I=_Lrn?Q+|m8SZ|AB@xwh6A`ffHqV*L=k+AF&Qi5k*>gWelNlBcY zJk{Kcf`!tekVmO{X%I-f#;Esr(JWXNdvAeiFmz2_HQFh~)B$-jb)BS9s=JwVQHqN| z*b|;2in|07$e}!B`%mpE08c~&_4P($q5__K*@5Z?gld@CDGr~_(>WjaAH%nRYhg!v-mVr)QnDP!E`nC#|IEomLh`rfPRVf;&&XQT_h^|z;K%Ods zd2C%+rqY`=aW*+swQ<=Q3Q7rkNDE=z4i@2@?CqRTeW$h`k-%ehS!+}EGkyU|#1-QO zvx40tFrpZ+T>OfVT4Q_bZX4y&Y(PZq@jkEm6=oJHv>WvhT{gdWEl4m=@4&VA&^2yiUD3qCF)n_kJ9 zqM+EvvMS|Wb<}Z;Jqrtg=Bm3ol&i7>-ammX^i7=}&5?o?@G9(mlN1BWDd!O07$j}V zHD_*QbD1ogLRh5$X^S{+L;Xsq*daz*pXH49<&iI*qUNfIck$29gjiTk{AL&rafa8? zAj>@Lkxs8*#^Oha3(IntO@ZIwfp6(u*~C;EF<@e($I$&+rS#nUE*s2M$;$m_5ZRlh zLVAR_N-D_a5Cb(72fOyMOdZ@g=fl%30l?Z0zRn8k2o+pdKVWhU<=HwTtxuW7uVwI zhz03#(-Q??lg%MD$gzxpXw;}vw?1S)e@l!~VT;Mc%0Wf9Ge7Rp7I&YEtnAH0`Q`Y)1~vX4@<~%TDwNZbuS>1gDpLj z3f5Rk>z~AaIaxD~-~P*d$vA$z8=_Tbya4e` z9WO$hW{>GE#A$OF$4>%79CVC(5U1r~yb^JmBgShHXAd*pj5sxi@pi;H0Ns&o3xfuK zbQYpw65Osp>I1`@>Um&iLb2!DuRzXIDeIHoLFH=&}G z+oXz8Z0+c-(#Q?%rIG&#g6q=Aw<)F4$ZeEPY2+U%mD0#hdL;NQrQnYIgspc+zRgy< zBe%s6g!ktkoB4ZTS7eB)vpRAy-YPOg0jv&7luCpj3#R`T$1M20AYSM)R0KqwgjWcy zA43vVN|G=DN{4ON9!5H5Hnm%tt40jAEqGce$MAc2mSb=wCs-+ByJbr3?6 zf%O@&&C(!pVlr63lBT_(9|^sgDgmAY5AM_~3Z~e1c)iglehZvFQ{lh`;IZZUdyvl# zMSeP4%pOI2KI0q{(ip_)Ln1!^w?|j=cb0gtBu9sZ!O@Yx!26ljzXb#i6G31JxN-O~ z5hNtdL=NqrObuA5nw{Ip8B)+{vpdLaIjO~#j!d462_ zSHRV?1dr-GrAzTCyUyrJIr>Qa_GXwRdRVJ%{qt-IdPwz>TyaDK45joqx&<@bG;Qh1 zVS&-_Km>y7J0j*lsUT<$KlIx|_VG}zRKsI#vsYg}!(NGQF&*4Kxs?Qy*_o$PUj_}1 zTdgOaL#SgMn4LS=U$plQjY)0o9t1lm!Qm~MBWAroV_=;jm$_F?eL`kIybfT9qhIt2 zc~9}@uD11fL(dQ`fe=940h$S2i6NoLNKFI@sd+vD_6!VfPLKn?W7X&~ISz%}2oDG2iqMG4rc8+NRY=F8Wi(K@J z>_HCfP%V0s>o>S`P*u1?S>LDBfrgIuypD3c9(ExT=pQ9+V!)?J#<0e~dPrdm>yb-V)XpLZ%6ee} zC{Q}HH&dfP){2NjC$JiP&6PVoCTfLoEY`8l@)0Q)>TGCGmw=^}AIx^=>ICuu5@NeJ z^JtAUd-IYj+eN>aZ0jqqP4np>}q`RgD{-{(VN{xq@b?5tB%za;j3}0!0ay2 zJ#CGS#3?%@tuQ>g2+GU&>D;a>U|$Ih4`&caOh&e;YNT#K*y}lBIB&{uq7>vFA&_?g z0g{kLb2d#hs6VMeJEt2xnT%7ZaWG#%w>5+0*t%b-P7@1s4i%TW8fs<&%toI}tAJSH zQJp&A(WzKrdoWGX9B{<7BRRppINY>RWg1yVM34;G>;pwiRM%Tjp*QRAl~QDX)lTJ* z-G2Pk6vcaMb#czS*5y_EP^C`QTEtmF25_j1{e*Je%^HL9!^DeOuNaf$Z@{KU4dZk% z40wCbP*6lB&cQvH`Dp7yl{j!>Uva7!C?a6PjYwH8d03`4naCs(nk^!rAX8;fQ`iRz zopP;0Z5`-cK@VPkGt`_+h4Z2E%TX_ZtSur9?mP;1Wis|Kink}~gmsgdvsqV4S0kFI z0eTB;RK_wz4{^NnFfvq@Oph+n_GEfvDA8G_Nr-_{_pz{4<3X5*6MZKyj8aUrH$!qS z69Cq+p0}B6=+d-q9A-l?t&fvdg1T=jC5X_QsY`I08!|QUXJEtTdsjA?q8&mzS7%~` zV%0?e$A#!1XsWz7!UGFrc8+Q-u$Y8)M`%DA?Z9*^q||-%QK=eT>%wAY~LsnxHp2qVV7TZ zaMbsXF%`S+a$m!u*csP_*&q?n1QRgChGf4E{f+5BNvcEJ5%MjllSGBv$0_cpg=Ij? zs57*!f|bJr-Y~$d;?SAnWRJ!cV#DMGO=S_FcwjNjfn1Gdxp;lUQj^IyhR_j|Gr(w` z#-ep#=L}`4ny7wMB5W&wD7lr(kVD%^1o|yMqK3v{C95gW((!(+**&6hc%x7zv`&x4 zVS6AXbHLOI=t~d!)ad7WS$8+OM*Wc2C7o(^)=D{ER943i z>K4Da(MsSWdORiiW>oB}*(Y5i=jRHsGPP&oIzfCJFwr@o6B4~L$pj^G4uhdujX>{< zve7$LaxT)FDfQC7m-t z5bPTU(QLHD?9&^1)Tcva$hQ7P;pf-nXHpku^#igSgUa3jD!Se5fVhT7=1 z2AAbg$wgE(cMp^D{5ycE_N+ln7BO@uu!it1Yd=+tA2+8L|L;>IF29!HTMG2n3d+!n z?d{U6fn(1ziu{B08^E`B(e{(2>~q>>V0yob-^chbT~m8qD~{Mg{S#aygn~4fsKAiW z?#dyMsR0K8QvfQNwi4mP{1l7P(U0BQ+{ zV*;R=fJc{UCs3(??Lq7i5Eci*X5Y>&2EcrskbOHh8UV-(hJxH~pg{}v=*S?q9GKF@ zO$SD{bK8ND9Wfp07}k-V5ky?K?&iCVl3qVI{r)TU2I$25wOmtcGLzp&1=yScN3dlR zbzy_%%1pe)>MG26c)Ok}jJH|uD*~WicD9WX{r;{Q_~%UHqdQ%AJCeQZ6RGr($ai$f z`@XRLx)NCCwVya@+kln753a!)yp+ifE@!^KY3rc^cNj0ZeFN_ihSz612d{?P=VbHo z7PwdAeHr9*muu@gcqQGXY1pQT$_^gh8@ctJPqlt5JZi+YJ7ain!Y$oPK{BUg(S$ z!J2Vg-9e||CCzy0_=bZI5IO1nYh`h!#D9rLLSONAG`t**@6HQ75h!*=E~H4GgE<4e zOvWEW{Mf1jc^l(bUGcA=@Uc}61?I(X1c(Z+E53fiK_B9b;N`R1s3oGW)9(Z0`^_W1 zOuqb&{j}|{@XB`{Zo!K(=kUF+553}wUY53yugbj4bcIWYx5Y|q&X&ya`NA(Tp>ieB z8y%}{cT_u|C+>${Ek3rJZ%F)VZs`iVp8km2w&pQcXn){rceE{yc_7xBhc`M7$K&V` z^i}5O&yAmKJG00@f!5FP4RCmibNE18&v?_!{l(H1P`g-pyz7<=XOcdcN-UG7%)zFNg1w{L(mH_$v_jiH)CP0qC(=?^VS6 z*V(_W74O;p;nE!2wkD{#us8iaJy+xkGq^d&u!XKhrYllxx+11)#l3+~lHZGiU&%27 zpB`VD&=*$(Rs}g1FsJRDy~R0ct`(EEe<;e?dx=Ex4&t`k4`z_qiu?eS_TGcPXD!1v;0QWMywr4w{4NP$e?Ka=NOf446bixMEHKWiA6kapw3{LI4q$5Myd8H5bU) z#jd^|xp^eV0SvlnuCNPsx?{$N{jo3O+|vx>37flUU&cbjj;0S3?#nnsV#^TAK@9&v z?{XKX5PS+&;YF&aA`!%<7Tu1Sd}Xb-}U+D{_!;ET}L z+8V~5WbC($?Pu&g#)cWY3fgh-PR4%9*l!qngR$Egb7MRl>|yLjjQxl`S#xj}K$k-CbHZkU8Y&~NYjFmCg$k?TfZDH(U#=gtg62^YaST19?Gj;}I z(n~S+)G3dB_F`6edx32>mvbkLwKfdzy!q#n*f!DtETA_j;E`0ph!~b*bx5f$|KYZ7o zML&5`!!b=~q;TaI<~I*H-Y)!-gfAD?y#3x&Th4o+utn%RQ&@fE%C!}@yiw?CDSZ9w z_rweTRDa;Un!=Y6NTprytDAdH-Glx_w$AeyW4;IsaI}%Ov5`gy%!7b z({yj^UB16B{zBn9uTYrNMr zKW`WQVCi@MaPVil?{XK`+FyRwh57l`Te$IRZsWpDt<6e9tY`kxRZWe7mZthu zO>K<<{Hx(5>)ciz!~Eqszqr1>sk#a;_%;ek{ei00{4cCa8B4}Cj4R3m7y5kp7dBKi zyRRtsb#-#98Viy`{}nbuI48ktWH+g&q3wPi{5l{<92;Ut8=j0{_;y0%OT|7+;2$^6|0; zzC<7wr5Ik%hY!Figy$332Y^HFa|Aw)@qY=zYY40Za4kal{BHnfAtq%^WD{e#l)YNVL<4wi>`KR?hDM!~n<#O~z;H$9Dw5 z>e6k9vk<);<2HQpi)QuVN@5YdlEcTRRXWR_GZ(i`4dZ`VDU8JM<^OIm_|Gbe5z6P% zs|BT1SJwp{ZrFLu*1^Q=_A%s;=I@=?jhklIt3)Tl`R^#v2@gTE7GF z`o)2|2ESFTweBl^AW3GczvX6si=(MI04lAg7}NEfVmR<|H#WBgF1WHSfWQG|Y;5$` zI~wX*8>#};wWkn+AHizHil#JH z`yJ<>fBq>3|960qG%oqde8r{Xy4E)Q!|&>*`ue&}{uX9z_@dN@@masg(bxoz(fEL0 zm|1*-s-daHfq%2yR_}L^w4|K@d7e>L2XPn|z&6zDl&cXnF4$aki-x^bw-}IgE5vN%pPy$`wFPQnAj<0eEiHaW ziNCt3A>cRa>#F^Yt$t%oS&32I)V#T+?uOcckz0L^VOf{oRmfdzjU7Z({&h1%9>K15oM zQY1P`boJ91(+uP%mD4P&xw^R2nUp+T^)vyCy%I>saZ4R4QU6z+V&$O0B^>$R^)wWO zm*NW>z)xBl{vPsV@Ozd0)buo0&@lMF>g$nNg0J;|=Lz$lDf9oZn;+RlMrH?WY0pVUnj;g|DASnRpJmLA!6h_pMtYu! z|1oVEX+eZ}cH^X;j~R1%t}~3v3S+K$y^&UQy)m!sdLyI%dSlLnkLGd?n_*O?%}oQ( zS26x!9}_(C^}PLN6}wo6m+G)ghwF8?Nr#O(Y}es8b@*K! z{!oV&eJlKpPVdp-ojM%W;eH)Hslyj_IHAM0b(l`Wj8A2o3aw|qZfEmnRLaQNDjZ7* zdDoX8bD;_yI?U5yr4EBSwCMF{*rZvxd4l^fH~^rTMh5Ds{hD z^;mpc@cV@wy50{9do-RErqZ+cyH)dN!Oa>j)BIWd8d`rWI)5p@{hALe9Mf=WXwiMY z(BiM-efX=?{Bg|k)1&));wA-K<@-|F8%u$Is$rIzgKv?h%Q!z}7L4(J;&Va*CnRt} z0w*MJLINiwa6$qnByd6kCnRt}0{TH^Q~Wd%@z51K3{cvd)3CeoAdK8LcG4Jwbd8c-0b(&HP$pajjL|znpttdsQ(&)kc zLk$Q<<1G!TX}%lU+kMytY;9_+s;>)d_T8Lk1UsgSeGIKw?Z=*DecZ zWg4Ss)8_h3*mQ5(=-XJ=h>b)e7@y8%zfllZT%`B*^Ov;NH8j`z*EMg#&Z4ud+*bp+ zc4g>wX_B_oz)GbSNRdpTh@|9uyzK)B`_<=2WLL) zq+|QrU9vIX>7>C5)V4I;;=>024S`x8cH5g;oHvuNW<}<&Y3A~(=4L+{T6Vc=YWqh) zvbDADhDMSklfksVp5#R>emUlGN_TAk2q>;-ZfmWD)T?iF3YQ%p0nJtU&Z{pkU*==0 zyFNmC4Gkc>RLJ%yvgLslIK6GCYlHz8O&Cn$K=5t+iod0a)yD)6b7hrpqyL7wMjsAy zalC_^VTIXH)p}zKrV}QOs3aV>RX4Tr@YWw-@~BD(!So3H=cFn87&U1`&^o-vWO*7*6HxyBfdHRm?^ z+XKdL(pK>t{IRsv44zDzYxJC(=Bwuajh}<_E#v;QdVf`mu^$=z=iyWZ??Iev1oQZ~ zh>rq1I{1h=vH5zOxwm`H@#fl}&Ph-27)!%hZV#TuoO0vWbKJ%q>BhW#6u+NA$mx-$2-r~eIXdVjhxcgFpLZ>6VRH~2yNY(L;%($mvNj@u8>1N%LFYWx?4Qm18#KFb-n9IGJuf}IYb$ouXA0uBd8vZ< z@x0lB_*WF}M`4I#8=qtH41SC8m^?@1IfkeHjD0>frz5RD-7zuG45pdEQ#{<(Q(C9vnR=-@oVI0J&T&Ltj5fnQ63Pr-R$GX4cA@O3G0 zCoyq*dWR4fr(FZ=KV=M>s>BuM@+>K^$S8v-5MdhI!u3 z&r%KZ+?^l(JM}Z>qknEy@Olkf=iAL1w$8b?YuGyP{zt&4p$%R7-0ojB{LdQxg@$`H z{C_n3ZyLT|!#gy5K*RkSp3v~1hSTxGJk}S}Fb$9m^57i->7LhKn?QfrcwJyv8c8;kyW@2aPg)uDV~ta0lcQ*Kmh*?h1hs-#V8* zS;N-(Ixn0t-#W)VL&Mg&?P3jE=eoUwQHNX>LGUXL^R5R!gBp&Vt>8U?fsUv8{3!)K zs9;i*&xLaZKLLL|1->f0)Ppt>U_11Cmzja(Z^Q1U7^yq}oNTG9%t%Z+rsqkUj zXfyJU=hXvYZOZaV6Wy+M^k>c6%% zMFJn$rqo|gYr?YoH1@#8+|JvQSd2<8;}SjQqSN?AflZ+IUG*yX>+` z1*u3E5y{omQuh`7#Bn>Lm6u!wii z$xm6?iUcf;2i8TK{MGeUEy%9{M)?w-lFF?p5LeUNY$61AnCORdhcG<24FmvoledSd=>b#l+uLJS#F`>c*-A`$@g(MT807EcwAl!8u0TgoY+=5%MxzT%m!bC zb0hr7#qX>uE2}BbSKUkJDUq=$IVZK7^Or(HSJnEfZ@i=}5NMJEoHDJ>vy4lUGMCGb zS1k3n20&^Fs{iz$`OC_1ph01r_{rMl51~);AI|oNkHHkS|BGY&10*?X2pymES!nrx zi2!Gp`XCX`#=hvox;0@ertLYbxmLAArXK&iWzl#8j-Kl4eTm~L8EeX(EytAG;`ggx z4&r7-RehUZj(Gl>-x6LVzaRAFui#wYtch}9VDfR7U*sz!*XKRI0Hb0ZHw zF+|fa!8bwUXhq?SkV#)-(0!vYH5!a zy0nL<&VDyrr1F;Ow&FloxA!uZyL_!OC91_saPLMWvat%?TkZE%)u3~6{{|*G;QoL* zoX(rq`glC*^Q|el@{-~bcwo4);`XKfHg3(TRX+8bC|{szW4(W=k(yF4D`my3lx54= zO>3{2;g9L0lu@ozXN?Dyo=|IoB};KUDMqp6qSl*Q0!uVd(2@-0=LK-MT74-Ng#js* rpDziko7&JGm6CUZkH0Xyg1-(VVN6%P#k#xVXb@`~S$ From 9738aecdbb7b61a82f210e8e2a338cce3f5360ef Mon Sep 17 00:00:00 2001 From: fgrond Date: Mon, 29 Jan 2018 16:23:22 -0500 Subject: [PATCH 12/30] changing to if(APPLE AND CMAKE_COMPILER_IS_CLANG) --- source/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 54aa0c51a1..f6ed00ebce 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -87,7 +87,7 @@ endif() # This is necessary since Faust generated CPP sources can have deep bracket nesting. # Without setting -fbracket-depth to an appropriate level, cmake on OSX resulted in error. # Seems not to be needed under Linux, however -fbracket-depth throws an error in the MSYS build. -if(APPLE) +if(APPLE AND CMAKE_COMPILER_IS_CLANG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") endif() From 887172329374b2d27685ca285591402e182d8565 Mon Sep 17 00:00:00 2001 From: fgrond Date: Mon, 29 Jan 2018 17:37:54 -0500 Subject: [PATCH 13/30] changed fbracket test to CMAKE_COMPILER_IS_CLANG --- source/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index f6ed00ebce..ddc8cb1d5f 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -87,7 +87,7 @@ endif() # This is necessary since Faust generated CPP sources can have deep bracket nesting. # Without setting -fbracket-depth to an appropriate level, cmake on OSX resulted in error. # Seems not to be needed under Linux, however -fbracket-depth throws an error in the MSYS build. -if(APPLE AND CMAKE_COMPILER_IS_CLANG) +if(CMAKE_COMPILER_IS_CLANG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") endif() From fad983d56263622c33ba46c991633b88619ed59f Mon Sep 17 00:00:00 2001 From: fgrond Date: Wed, 31 Jan 2018 04:52:48 -0500 Subject: [PATCH 14/30] adressing Patrick's change requests --- README.md | 5 +---- source/CMakeLists.txt | 8 +++++--- source/HOAUGens/README_HOAUgens.md | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 9043b8a806..252b4f3568 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,6 @@ sc3-plugins/$ mkdir build && cd build sc3-plugins/build/$ cmake -DSC_PATH=/path/to/sc3source/ .. ``` If no `SC_PATH` is provided the build system assumes the SuperCollider include files in `/usr/include/SuperCollider/`. -Faust generated CPP sources for Ugens contain debug messages at server start and Synth launches. Set `-DCMAKE_BUILD_TYPE=Release` (see below) to suppress them. ```shell sc3-plugins/build/$ make @@ -61,7 +60,7 @@ Copy the `SC3plugins` folder to you Extensions folder (you find out which one th WARNING: on OSX, if you want to install into `CMAKE_INSTALL_PREFIX`, you have to specify it by disabling the `IN_PLACE_BUILD` cmake option which defaults to ON (see below). -**Note:** supernova on OSX, supernova searches for plugins specifically in Extension/plugins and not like scsynth in Extension/anyOddFolder. If supernova on OSX cannot find your plugins make sure they are in the correct place. (patch for supernova server submitted for 3.9). +**Note:** for SuperCollider <=3.9.0 supernova on MACOS and Windows searches for plugins in Extension/plugins and not like scsynth in the Extension folder. If supernova cannot find the SC3plugins make sure they are in the correct place (i.e. Extension/plugins). ### Cmake Options @@ -79,8 +78,6 @@ WARNING: on OSX, if you want to install into `CMAKE_INSTALL_PREFIX`, you have to * `sc3-plugins/build/$ cmake -DSUPERNOVA=ON ..` + Print all cmake options * `sc3-plugins/build/$ cmake -L ..` -+ Suppress debug output on server (typically from Faust generated CPP code) - * `-DCMAKE_BUILD_TYPE=Release ..` ### Starting over diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index ddc8cb1d5f..a514b95461 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -79,14 +79,16 @@ endmacro() # This is to be able to switch off the debug messages coming from the Faust generated CPP sources -# by setting to release mode -DCMAKE_BUILD_TYPE=Release . +# when configuring the release mode. +# Without this line we need to set -DCMAKE_BUILD_TYPE=Release +# cmake -DSC_PATH=/your/path/to/SuperCollider/ -DCMAKE_BUILD_TYPE=Release .. if (NOT CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DNDEBUG) endif() + # This is necessary since Faust generated CPP sources can have deep bracket nesting. -# Without setting -fbracket-depth to an appropriate level, cmake on OSX resulted in error. -# Seems not to be needed under Linux, however -fbracket-depth throws an error in the MSYS build. +# Without setting -fbracket-depth to an appropriate level, clang will exit with error. if(CMAKE_COMPILER_IS_CLANG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") endif() diff --git a/source/HOAUGens/README_HOAUgens.md b/source/HOAUGens/README_HOAUgens.md index 01c879d8e2..4e69c456e2 100644 --- a/source/HOAUGens/README_HOAUgens.md +++ b/source/HOAUGens/README_HOAUgens.md @@ -1,19 +1,19 @@ # HOA SC3-plugins This Folder contains the HOA unit generator plugins based on the Faust library [Ambitools](https://github.com/sekisushai/ambitools) by Pierre Lecomte. -Use these plugins together with SC-HOA quark by Florian Grond. +Use these plugins together with [SC-HOA](https://github.com/florian-grond/SC-HOA) quark by Florian Grond. The original [CPP sources are here]: (https://github.com/sekisushai/ambitools/tree/master/Faust/bin/ambitools2supercollider/HOA) +and can be generated from the +[Faust code](https://github.com/sekisushai/ambitools/tree/master/Faust/src) +by with +[this script](https://github.com/sekisushai/ambitools/blob/master/Faust/src/ambitools2supercollider.sh) -In order to compile the Faust based CPP sources, we added to the CMakeLists.txt in the source folder -the following lines: +Since Faust generated CPP sources can have deep bracket nesting. +Without setting -fbracket-depth to an appropriate level, clang will exit with error. +This is why in CMakeLists there is: -# This is to be able to switch off the debug messages coming from the Faust generated CPP sources -# by setting to release mode -DCMAKE_BUILD_TYPE=Release -if (NOT CMAKE_BUILD_TYPE MATCHES Debug) - add_definitions(-DNDEBUG) -endif() - -# This is necessary since Faust generated CPP sources can have (very) deep bracket nesting +if(CMAKE_COMPILER_IS_CLANG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") +endif() From de082bc4c5cbc0789885cabea5f578d7ee3519df Mon Sep 17 00:00:00 2001 From: fgrond Date: Wed, 31 Jan 2018 04:56:16 -0500 Subject: [PATCH 15/30] small worrding change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 252b4f3568..ea1b65b4db 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Copy the `SC3plugins` folder to you Extensions folder (you find out which one th WARNING: on OSX, if you want to install into `CMAKE_INSTALL_PREFIX`, you have to specify it by disabling the `IN_PLACE_BUILD` cmake option which defaults to ON (see below). -**Note:** for SuperCollider <=3.9.0 supernova on MACOS and Windows searches for plugins in Extension/plugins and not like scsynth in the Extension folder. If supernova cannot find the SC3plugins make sure they are in the correct place (i.e. Extension/plugins). +**Note:** for SuperCollider <=3.9.0: supernova on MACOS and Windows searches for plugins in the Extension/plugins folder and not like scsynth in the Extension folder. If supernova cannot find the SC3plugins make sure they are in the correct place (i.e. Extension/plugins). ### Cmake Options From 749ddaf86fd0febdd3f7a9ee517da244b85b4214 Mon Sep 17 00:00:00 2001 From: fgrond Date: Wed, 31 Jan 2018 13:20:21 -0500 Subject: [PATCH 16/30] adopting Brian's change requests --- source/CMakeLists.txt | 8 -------- source/HOAUGens/README_HOAUgens.md | 8 -------- 2 files changed, 16 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index a514b95461..38f6769e6a 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -78,14 +78,6 @@ macro(BUILD_PLUGIN PLUGIN_NAME PLUGIN_SOURCES PLUGIN_LIBS PLUGIN_DIR) endmacro() -# This is to be able to switch off the debug messages coming from the Faust generated CPP sources -# when configuring the release mode. -# Without this line we need to set -DCMAKE_BUILD_TYPE=Release -# cmake -DSC_PATH=/your/path/to/SuperCollider/ -DCMAKE_BUILD_TYPE=Release .. -if (NOT CMAKE_BUILD_TYPE MATCHES Debug) - add_definitions(-DNDEBUG) -endif() - # This is necessary since Faust generated CPP sources can have deep bracket nesting. # Without setting -fbracket-depth to an appropriate level, clang will exit with error. diff --git a/source/HOAUGens/README_HOAUgens.md b/source/HOAUGens/README_HOAUgens.md index 4e69c456e2..46935424a9 100644 --- a/source/HOAUGens/README_HOAUgens.md +++ b/source/HOAUGens/README_HOAUgens.md @@ -9,11 +9,3 @@ and can be generated from the [Faust code](https://github.com/sekisushai/ambitools/tree/master/Faust/src) by with [this script](https://github.com/sekisushai/ambitools/blob/master/Faust/src/ambitools2supercollider.sh) - -Since Faust generated CPP sources can have deep bracket nesting. -Without setting -fbracket-depth to an appropriate level, clang will exit with error. -This is why in CMakeLists there is: - -if(CMAKE_COMPILER_IS_CLANG) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") -endif() From 363cd191613fd7277a6f2a9f07be04ce044d50f3 Mon Sep 17 00:00:00 2001 From: fgrond Date: Wed, 31 Jan 2018 14:40:58 -0500 Subject: [PATCH 17/30] edit CMakeList adopting Brian's change request --- source/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 38f6769e6a..c4beb8931f 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -78,7 +78,6 @@ macro(BUILD_PLUGIN PLUGIN_NAME PLUGIN_SOURCES PLUGIN_LIBS PLUGIN_DIR) endmacro() - # This is necessary since Faust generated CPP sources can have deep bracket nesting. # Without setting -fbracket-depth to an appropriate level, clang will exit with error. if(CMAKE_COMPILER_IS_CLANG) From dd2a61d24fc336a5f8e4d45adea5e7d08bce96e9 Mon Sep 17 00:00:00 2001 From: patrickdupuis Date: Thu, 1 Feb 2018 01:19:20 -0500 Subject: [PATCH 18/30] add target specific clang compile flag --- source/CMakeLists.txt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index c4beb8931f..574ef80be6 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -77,13 +77,6 @@ macro(BUILD_PLUGIN PLUGIN_NAME PLUGIN_SOURCES PLUGIN_LIBS PLUGIN_DIR) endmacro() - -# This is necessary since Faust generated CPP sources can have deep bracket nesting. -# Without setting -fbracket-depth to an appropriate level, clang will exit with error. -if(CMAKE_COMPILER_IS_CLANG) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fbracket-depth=2048") -endif() - #----------------------- # plugins without extras #----------------------- @@ -138,6 +131,11 @@ if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND ${CMAKE_CXX_COMPILER_VERSION} M SET_SOURCE_FILES_PROPERTIES(${BHOBFILT_CPP} PROPERTIES COMPILE_FLAGS "-fno-slp-vectorize") endif() +#HOAUGens +if (CMAKE_COMPILER_IS_CLANG) + set_target_properties(HOAUGens PROPERTIES COMPILE_FLAGS "-fbracket-depth=2048") +endif() + set(plugins "") set(supernova_plugins "") From b6a43b4456c31e270c9cab69856ca5f5ec190064 Mon Sep 17 00:00:00 2001 From: patrickdupuis Date: Thu, 1 Feb 2018 16:51:19 -0500 Subject: [PATCH 19/30] use set_property target append property --- source/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 574ef80be6..98f10e50b6 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -133,7 +133,7 @@ endif() #HOAUGens if (CMAKE_COMPILER_IS_CLANG) - set_target_properties(HOAUGens PROPERTIES COMPILE_FLAGS "-fbracket-depth=2048") + set_property(TARGET HOAUGens APPEND PROPERTY COMPILE_FLAGS "-fbracket-depth=2048") endif() set(plugins "") From 1390db6d6ab1bd32fd4bde91c6e247761aa65e17 Mon Sep 17 00:00:00 2001 From: fgrond Date: Sat, 3 Feb 2018 07:28:22 -0500 Subject: [PATCH 20/30] readme fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ea1b65b4db..63afae94ec 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Copy the `SC3plugins` folder to you Extensions folder (you find out which one th WARNING: on OSX, if you want to install into `CMAKE_INSTALL_PREFIX`, you have to specify it by disabling the `IN_PLACE_BUILD` cmake option which defaults to ON (see below). -**Note:** for SuperCollider <=3.9.0: supernova on MACOS and Windows searches for plugins in the Extension/plugins folder and not like scsynth in the Extension folder. If supernova cannot find the SC3plugins make sure they are in the correct place (i.e. Extension/plugins). +**Note for SuperCollider < 3.9.1** The Supernova server on macOS and Windows incorrectly searches for plugins in the `/Extensions/plugins` directory. The scsynth server correctly searches for plugins in `/Extensions`. If Supernova is unable to find the sc3-plugins, make sure that they are located in `/Extensions/plugins`. ### Cmake Options From c8586bb7d2ca58d7ca454b39a33fd296db48c240 Mon Sep 17 00:00:00 2001 From: fgrond Date: Sat, 3 Feb 2018 15:17:45 -0500 Subject: [PATCH 21/30] typo fix CPP -> C++ --- source/HOAUGens/README_HOAUgens.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/HOAUGens/README_HOAUgens.md b/source/HOAUGens/README_HOAUgens.md index 46935424a9..96d9bc3fd2 100644 --- a/source/HOAUGens/README_HOAUgens.md +++ b/source/HOAUGens/README_HOAUgens.md @@ -3,9 +3,9 @@ This Folder contains the HOA unit generator plugins based on the Faust library [Ambitools](https://github.com/sekisushai/ambitools) by Pierre Lecomte. Use these plugins together with [SC-HOA](https://github.com/florian-grond/SC-HOA) quark by Florian Grond. -The original [CPP sources are here]: +The original [C++ sources are here]: (https://github.com/sekisushai/ambitools/tree/master/Faust/bin/ambitools2supercollider/HOA) and can be generated from the [Faust code](https://github.com/sekisushai/ambitools/tree/master/Faust/src) -by with +with [this script](https://github.com/sekisushai/ambitools/blob/master/Faust/src/ambitools2supercollider.sh) From 73e04f6cfa13987e1d5535c4bfbad02fd6e8035d Mon Sep 17 00:00:00 2001 From: fgrond Date: Sat, 3 Feb 2018 15:18:46 -0500 Subject: [PATCH 22/30] minor typo --- source/HOAUGens/README_HOAUgens.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/HOAUGens/README_HOAUgens.md b/source/HOAUGens/README_HOAUgens.md index 96d9bc3fd2..e8f04b1037 100644 --- a/source/HOAUGens/README_HOAUgens.md +++ b/source/HOAUGens/README_HOAUgens.md @@ -3,8 +3,7 @@ This Folder contains the HOA unit generator plugins based on the Faust library [Ambitools](https://github.com/sekisushai/ambitools) by Pierre Lecomte. Use these plugins together with [SC-HOA](https://github.com/florian-grond/SC-HOA) quark by Florian Grond. -The original [C++ sources are here]: -(https://github.com/sekisushai/ambitools/tree/master/Faust/bin/ambitools2supercollider/HOA) +The original [C++ sources are here:](https://github.com/sekisushai/ambitools/tree/master/Faust/bin/ambitools2supercollider/HOA) and can be generated from the [Faust code](https://github.com/sekisushai/ambitools/tree/master/Faust/src) with From ea84645023c57f2a50aab842560c7c3cdcf7cc8e Mon Sep 17 00:00:00 2001 From: Patrick Dupuis Date: Sat, 3 Feb 2018 19:41:56 -0500 Subject: [PATCH 23/30] move set property to after target creation (#2) --- source/CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 8b8b9bfc6a..600210f592 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -131,11 +131,6 @@ if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND ${CMAKE_CXX_COMPILER_VERSION} M SET_SOURCE_FILES_PROPERTIES(${BHOBFILT_CPP} PROPERTIES COMPILE_FLAGS "-fno-slp-vectorize") endif() -#HOAUGens -if (CMAKE_COMPILER_IS_CLANG) - set_property(TARGET HOAUGens APPEND PROPERTY COMPILE_FLAGS "-fbracket-depth=2048") -endif() - set(plugins "") set(supernova_plugins "") @@ -343,6 +338,11 @@ if (NOVA_DISK_IO) add_subdirectory(NovaDiskIO) endif() +#HOAUGens +if (CMAKE_COMPILER_IS_CLANG) + set_property(TARGET HOAUGens APPEND PROPERTY COMPILE_FLAGS "-fbracket-depth=2048") +endif() + #-------- # INSTALL #-------- From 53408c5cbb3a5ddb3d38f069794be2dca0de3261 Mon Sep 17 00:00:00 2001 From: Patrick Dupuis Date: Sun, 4 Feb 2018 08:41:17 -0500 Subject: [PATCH 24/30] set property per source file (#3) --- source/CMakeLists.txt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 600210f592..04e42b80a2 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -165,6 +165,13 @@ else() set(INSTALL_DESTINATION_DISTRO "SC3plugins") endif() +#HOAUGens +if (CMAKE_COMPILER_IS_CLANG) + file(GLOB HOAUGensSources HOAUGens/*cpp) + foreach(HOAUGensSourceFile ${HOAUGensSources}) + set_source_files_properties("${HOAUGensSourceFile}" PROPERTIES COMPILE_FLAGS "-fbracket-depth=2048") + endforeach(HOAUGensSourceFile) +endif() foreach(DIR ${PLUGIN_DIRS}) FIND_AND_BUILD_PLUGINS(${DIR}) @@ -338,11 +345,6 @@ if (NOVA_DISK_IO) add_subdirectory(NovaDiskIO) endif() -#HOAUGens -if (CMAKE_COMPILER_IS_CLANG) - set_property(TARGET HOAUGens APPEND PROPERTY COMPILE_FLAGS "-fbracket-depth=2048") -endif() - #-------- # INSTALL #-------- From 965cf3bb33be506bf236014066f9093923e0edaa Mon Sep 17 00:00:00 2001 From: fgrond Date: Sat, 17 Feb 2018 15:53:28 -0500 Subject: [PATCH 25/30] integrate most recent addition fro Pierre Lecomte some Ugens up to order 10 --- source/CMakeLists.txt | 22 +- source/HOAUGens/HOAAzimuthRotator1.cpp | 274 +- source/HOAUGens/HOAAzimuthRotator10.cpp | 2582 ++++++ source/HOAUGens/HOAAzimuthRotator2.cpp | 376 +- source/HOAUGens/HOAAzimuthRotator3.cpp | 512 +- source/HOAUGens/HOAAzimuthRotator4.cpp | 676 +- source/HOAUGens/HOAAzimuthRotator5.cpp | 888 +- source/HOAUGens/HOAAzimuthRotator6.cpp | 1698 ++++ source/HOAUGens/HOAAzimuthRotator7.cpp | 1883 +++++ source/HOAUGens/HOAAzimuthRotator8.cpp | 2092 +++++ source/HOAUGens/HOAAzimuthRotator9.cpp | 2325 ++++++ source/HOAUGens/HOABeamDirac2HOA10.cpp | 3525 ++++++++ source/HOAUGens/HOABeamDirac2HOA6.cpp | 2116 +++++ source/HOAUGens/HOABeamDirac2HOA7.cpp | 2403 ++++++ source/HOAUGens/HOABeamDirac2HOA8.cpp | 2744 ++++++ source/HOAUGens/HOABeamDirac2HOA9.cpp | 3110 +++++++ source/HOAUGens/HOABeamDirac2Hoa1.cpp | 187 +- source/HOAUGens/HOABeamDirac2Hoa2.cpp | 251 +- source/HOAUGens/HOABeamDirac2Hoa3.cpp | 341 +- source/HOAUGens/HOABeamDirac2Hoa4.cpp | 485 +- source/HOAUGens/HOABeamDirac2Hoa5.cpp | 646 +- source/HOAUGens/HOABeamHCardio2HOA1.cpp | 366 +- source/HOAUGens/HOABeamHCardio2HOA2.cpp | 607 +- source/HOAUGens/HOABeamHCardio2HOA3.cpp | 985 ++- source/HOAUGens/HOABeamHCardio2Mono1.cpp | 164 +- source/HOAUGens/HOABeamHCardio2Mono2.cpp | 225 +- source/HOAUGens/HOABeamHCardio2Mono3.cpp | 345 +- .../HOAUGens/HOAConverterAcnN3d2AcnSn3d1.cpp | 1251 +++ .../HOAUGens/HOAConverterAcnN3d2AcnSn3d10.cpp | 5850 +++++++++++++ .../HOAUGens/HOAConverterAcnN3d2AcnSn3d2.cpp | 1450 ++++ ...61.cpp => HOAConverterAcnN3d2AcnSn3d3.cpp} | 694 +- ...r4.cpp => HOAConverterAcnN3d2AcnSn3d4.cpp} | 685 +- ...r5.cpp => HOAConverterAcnN3d2AcnSn3d5.cpp} | 839 +- ...63.cpp => HOAConverterAcnN3d2AcnSn3d6.cpp} | 2110 +++-- .../HOAUGens/HOAConverterAcnN3d2AcnSn3d7.cpp | 3615 ++++++++ .../HOAUGens/HOAConverterAcnN3d2AcnSn3d8.cpp | 4282 ++++++++++ .../HOAUGens/HOAConverterAcnN3d2AcnSn3d9.cpp | 5027 +++++++++++ ...rter1.cpp => HOAConverterAcnN3d2FuMa1.cpp} | 218 +- ...rter2.cpp => HOAConverterAcnN3d2FuMa2.cpp} | 356 +- ...rter3.cpp => HOAConverterAcnN3d2FuMa3.cpp} | 560 +- source/HOAUGens/HOAConverterAcnSn3d2FuMa1.cpp | 1251 +++ source/HOAUGens/HOAConverterAcnSn3d2FuMa2.cpp | 1449 ++++ source/HOAUGens/HOAConverterAcnSn3d2FuMa3.cpp | 1725 ++++ ...ev061.cpp => HOAConverterFuma2AcnN3d1.cpp} | 301 +- source/HOAUGens/HOAConverterFuma2AcnN3d2.cpp | 1453 ++++ source/HOAUGens/HOAConverterFuma2AcnN3d3.cpp | 1730 ++++ source/HOAUGens/HOAConverterFuma2AcnSn3d1.cpp | 1251 +++ source/HOAUGens/HOAConverterFuma2AcnSn3d2.cpp | 1449 ++++ ...v262.cpp => HOAConverterFuma2AcnSn3d3.cpp} | 773 +- ...uralLebedev501.cpp => HOADecBinaural1.cpp} | 115 +- source/HOAUGens/HOADecBinaural2.cpp | 1390 +++ source/HOAUGens/HOADecBinaural3.cpp | 1567 ++++ source/HOAUGens/HOADecBinaural4.cpp | 1794 ++++ source/HOAUGens/HOADecBinaural5.cpp | 2071 +++++ source/HOAUGens/HOADecLebedev061.cpp | 252 +- source/HOAUGens/HOADecLebedev261.cpp | 505 +- source/HOAUGens/HOADecLebedev262.cpp | 865 +- source/HOAUGens/HOADecLebedev263.cpp | 1485 ++-- source/HOAUGens/HOADecLebedev501.cpp | 821 +- source/HOAUGens/HOADecLebedev502.cpp | 1357 +-- source/HOAUGens/HOADecLebedev503.cpp | 2261 +++-- source/HOAUGens/HOADecLebedev504.cpp | 3326 +++++--- source/HOAUGens/HOADecLebedev505.cpp | 4897 +++++++---- .../HOAUGens/HOADecoderLebedev50Binaural1.cpp | 2657 ------ .../HOAUGens/HOADecoderLebedev50Binaural2.cpp | 4649 ----------- .../HOAUGens/HOADecoderLebedev50Binaural3.cpp | 7437 ----------------- source/HOAUGens/HOAEncEigenMike1.cpp | 494 +- source/HOAUGens/HOAEncEigenMike2.cpp | 643 +- source/HOAUGens/HOAEncEigenMike3.cpp | 859 +- source/HOAUGens/HOAEncEigenMike4.cpp | 1080 ++- source/HOAUGens/HOAEncLebedev501.cpp | 270 +- source/HOAUGens/HOAEncLebedev502.cpp | 503 +- source/HOAUGens/HOAEncLebedev503.cpp | 995 ++- source/HOAUGens/HOAEncLebedev504.cpp | 1706 +++- source/HOAUGens/HOAEncLebedev505.cpp | 2514 +++++- source/HOAUGens/HOAEncoder1.cpp | 180 +- source/HOAUGens/HOAEncoder2.cpp | 332 +- source/HOAUGens/HOAEncoder3.cpp | 540 +- source/HOAUGens/HOAEncoder4.cpp | 796 +- source/HOAUGens/HOAEncoder5.cpp | 1115 ++- source/HOAUGens/HOAMirror1.cpp | 76 +- source/HOAUGens/HOAMirror10.cpp | 2779 ++++++ source/HOAUGens/HOAMirror2.cpp | 76 +- source/HOAUGens/HOAMirror3.cpp | 76 +- source/HOAUGens/HOAMirror4.cpp | 76 +- source/HOAUGens/HOAMirror5.cpp | 76 +- source/HOAUGens/HOAMirror6.cpp | 1771 ++++ source/HOAUGens/HOAMirror7.cpp | 1981 +++++ source/HOAUGens/HOAMirror8.cpp | 2219 +++++ source/HOAUGens/HOAMirror9.cpp | 2485 ++++++ source/HOAUGens/HOAPanLebedev061.cpp | 224 +- source/HOAUGens/HOAPanLebedev261.cpp | 420 +- source/HOAUGens/HOAPanLebedev262.cpp | 551 +- source/HOAUGens/HOAPanLebedev263.cpp | 796 +- source/HOAUGens/HOAPanLebedev501.cpp | 646 +- source/HOAUGens/HOAPanLebedev502.cpp | 870 +- source/HOAUGens/HOAPanLebedev503.cpp | 1256 +-- source/HOAUGens/HOAPanLebedev504.cpp | 1508 ++-- source/HOAUGens/HOAPanLebedev505.cpp | 1732 ++-- source/HOAUGens/HOARotator1.cpp | 324 +- source/HOAUGens/HOARotator2.cpp | 519 +- source/HOAUGens/HOARotator3.cpp | 845 +- source/HOAUGens/HOARotator4.cpp | 1374 +-- source/HOAUGens/README_HOAUgens.md | 10 - .../HOAUGens/sc/Classes/HOAAzimuthRotator1.sc | 7 +- .../sc/Classes/HOAAzimuthRotator10.sc | 33 + .../HOAUGens/sc/Classes/HOAAzimuthRotator2.sc | 7 +- .../HOAUGens/sc/Classes/HOAAzimuthRotator3.sc | 7 +- .../HOAUGens/sc/Classes/HOAAzimuthRotator4.sc | 7 +- .../HOAUGens/sc/Classes/HOAAzimuthRotator5.sc | 7 +- .../HOAUGens/sc/Classes/HOAAzimuthRotator6.sc | 33 + .../HOAUGens/sc/Classes/HOAAzimuthRotator7.sc | 33 + .../HOAUGens/sc/Classes/HOAAzimuthRotator8.sc | 33 + .../HOAUGens/sc/Classes/HOAAzimuthRotator9.sc | 33 + .../HOAUGens/sc/Classes/HOABeamDirac2HOA10.sc | 33 + .../HOAUGens/sc/Classes/HOABeamDirac2HOA6.sc | 33 + .../HOAUGens/sc/Classes/HOABeamDirac2HOA7.sc | 33 + .../HOAUGens/sc/Classes/HOABeamDirac2HOA8.sc | 33 + .../HOAUGens/sc/Classes/HOABeamDirac2HOA9.sc | 33 + .../HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc | 7 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc | 7 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc | 7 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc | 7 +- .../HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc | 7 +- .../sc/Classes/HOABeamHCardio2HOA1.sc | 7 +- .../sc/Classes/HOABeamHCardio2HOA2.sc | 7 +- .../sc/Classes/HOABeamHCardio2HOA3.sc | 7 +- .../sc/Classes/HOABeamHCardio2Mono1.sc | 7 +- .../sc/Classes/HOABeamHCardio2Mono2.sc | 7 +- .../sc/Classes/HOABeamHCardio2Mono3.sc | 7 +- ...ter1.sc => HOAConverterAcnN3d2AcnSn3d1.sc} | 15 +- .../Classes/HOAConverterAcnN3d2AcnSn3d10.sc | 33 + ...ter2.sc => HOAConverterAcnN3d2AcnSn3d2.sc} | 15 +- ...ter3.sc => HOAConverterAcnN3d2AcnSn3d3.sc} | 15 +- ...ter4.sc => HOAConverterAcnN3d2AcnSn3d4.sc} | 15 +- ...ter5.sc => HOAConverterAcnN3d2AcnSn3d5.sc} | 15 +- .../sc/Classes/HOAConverterAcnN3d2AcnSn3d6.sc | 33 + .../sc/Classes/HOAConverterAcnN3d2AcnSn3d7.sc | 33 + .../sc/Classes/HOAConverterAcnN3d2AcnSn3d8.sc | 33 + .../sc/Classes/HOAConverterAcnN3d2AcnSn3d9.sc | 33 + ...edev061.sc => HOAConverterAcnN3d2FuMa1.sc} | 17 +- .../sc/Classes/HOAConverterAcnN3d2FuMa2.sc | 33 + ...edev262.sc => HOAConverterAcnN3d2FuMa3.sc} | 19 +- .../sc/Classes/HOAConverterAcnSn3d2FuMa1.sc | 33 + .../sc/Classes/HOAConverterAcnSn3d2FuMa2.sc | 33 + .../sc/Classes/HOAConverterAcnSn3d2FuMa3.sc | 33 + .../sc/Classes/HOAConverterFuma2AcnN3d1.sc | 33 + .../sc/Classes/HOAConverterFuma2AcnN3d2.sc | 33 + .../sc/Classes/HOAConverterFuma2AcnN3d3.sc | 33 + .../sc/Classes/HOAConverterFuma2AcnSn3d1.sc | 33 + .../sc/Classes/HOAConverterFuma2AcnSn3d2.sc | 33 + .../sc/Classes/HOAConverterFuma2AcnSn3d3.sc | 33 + ...nauralLebedev501.sc => HOADecBinaural1.sc} | 7 +- source/HOAUGens/sc/Classes/HOADecBinaural2.sc | 33 + source/HOAUGens/sc/Classes/HOADecBinaural3.sc | 33 + ...HOAEncLebedev263.sc => HOADecBinaural4.sc} | 19 +- ...HOAEncLebedev261.sc => HOADecBinaural5.sc} | 19 +- .../HOAUGens/sc/Classes/HOADecLebedev061.sc | 7 +- .../HOAUGens/sc/Classes/HOADecLebedev261.sc | 7 +- .../HOAUGens/sc/Classes/HOADecLebedev262.sc | 7 +- .../HOAUGens/sc/Classes/HOADecLebedev263.sc | 7 +- .../HOAUGens/sc/Classes/HOADecLebedev501.sc | 7 +- .../HOAUGens/sc/Classes/HOADecLebedev502.sc | 7 +- .../HOAUGens/sc/Classes/HOADecLebedev503.sc | 7 +- .../HOAUGens/sc/Classes/HOADecLebedev504.sc | 7 +- .../HOAUGens/sc/Classes/HOADecLebedev505.sc | 7 +- .../HOAUGens/sc/Classes/HOAEncEigenMike1.sc | 17 +- .../HOAUGens/sc/Classes/HOAEncEigenMike2.sc | 17 +- .../HOAUGens/sc/Classes/HOAEncEigenMike3.sc | 17 +- .../HOAUGens/sc/Classes/HOAEncEigenMike4.sc | 7 +- .../HOAUGens/sc/Classes/HOAEncLebedev501.sc | 7 +- .../HOAUGens/sc/Classes/HOAEncLebedev502.sc | 7 +- .../HOAUGens/sc/Classes/HOAEncLebedev503.sc | 7 +- .../HOAUGens/sc/Classes/HOAEncLebedev504.sc | 7 +- .../HOAUGens/sc/Classes/HOAEncLebedev505.sc | 7 +- source/HOAUGens/sc/Classes/HOAEncoder1.sc | 7 +- source/HOAUGens/sc/Classes/HOAEncoder2.sc | 7 +- source/HOAUGens/sc/Classes/HOAEncoder3.sc | 7 +- source/HOAUGens/sc/Classes/HOAEncoder4.sc | 7 +- source/HOAUGens/sc/Classes/HOAEncoder5.sc | 7 +- source/HOAUGens/sc/Classes/HOAMirror1.sc | 7 +- source/HOAUGens/sc/Classes/HOAMirror10.sc | 33 + source/HOAUGens/sc/Classes/HOAMirror2.sc | 7 +- source/HOAUGens/sc/Classes/HOAMirror3.sc | 7 +- source/HOAUGens/sc/Classes/HOAMirror4.sc | 7 +- source/HOAUGens/sc/Classes/HOAMirror5.sc | 7 +- source/HOAUGens/sc/Classes/HOAMirror6.sc | 33 + source/HOAUGens/sc/Classes/HOAMirror7.sc | 33 + source/HOAUGens/sc/Classes/HOAMirror8.sc | 33 + source/HOAUGens/sc/Classes/HOAMirror9.sc | 33 + .../HOAUGens/sc/Classes/HOAPanLebedev061.sc | 7 +- .../HOAUGens/sc/Classes/HOAPanLebedev261.sc | 7 +- .../HOAUGens/sc/Classes/HOAPanLebedev262.sc | 7 +- .../HOAUGens/sc/Classes/HOAPanLebedev263.sc | 7 +- .../HOAUGens/sc/Classes/HOAPanLebedev501.sc | 7 +- .../HOAUGens/sc/Classes/HOAPanLebedev502.sc | 7 +- .../HOAUGens/sc/Classes/HOAPanLebedev503.sc | 7 +- .../HOAUGens/sc/Classes/HOAPanLebedev504.sc | 7 +- .../HOAUGens/sc/Classes/HOAPanLebedev505.sc | 7 +- source/HOAUGens/sc/Classes/HOARotator1.sc | 7 +- source/HOAUGens/sc/Classes/HOARotator2.sc | 7 +- source/HOAUGens/sc/Classes/HOARotator3.sc | 7 +- source/HOAUGens/sc/Classes/HOARotator4.sc | 7 +- 203 files changed, 108675 insertions(+), 35279 deletions(-) mode change 100644 => 100755 source/CMakeLists.txt create mode 100644 source/HOAUGens/HOAAzimuthRotator10.cpp create mode 100644 source/HOAUGens/HOAAzimuthRotator6.cpp create mode 100644 source/HOAUGens/HOAAzimuthRotator7.cpp create mode 100644 source/HOAUGens/HOAAzimuthRotator8.cpp create mode 100644 source/HOAUGens/HOAAzimuthRotator9.cpp create mode 100644 source/HOAUGens/HOABeamDirac2HOA10.cpp create mode 100644 source/HOAUGens/HOABeamDirac2HOA6.cpp create mode 100644 source/HOAUGens/HOABeamDirac2HOA7.cpp create mode 100644 source/HOAUGens/HOABeamDirac2HOA8.cpp create mode 100644 source/HOAUGens/HOABeamDirac2HOA9.cpp create mode 100644 source/HOAUGens/HOAConverterAcnN3d2AcnSn3d1.cpp create mode 100644 source/HOAUGens/HOAConverterAcnN3d2AcnSn3d10.cpp create mode 100644 source/HOAUGens/HOAConverterAcnN3d2AcnSn3d2.cpp rename source/HOAUGens/{HOAEncLebedev261.cpp => HOAConverterAcnN3d2AcnSn3d3.cpp} (81%) rename source/HOAUGens/{HOAConverter4.cpp => HOAConverterAcnN3d2AcnSn3d4.cpp} (77%) rename source/HOAUGens/{HOAConverter5.cpp => HOAConverterAcnN3d2AcnSn3d5.cpp} (76%) rename source/HOAUGens/{HOAEncLebedev263.cpp => HOAConverterAcnN3d2AcnSn3d6.cpp} (52%) create mode 100644 source/HOAUGens/HOAConverterAcnN3d2AcnSn3d7.cpp create mode 100644 source/HOAUGens/HOAConverterAcnN3d2AcnSn3d8.cpp create mode 100644 source/HOAUGens/HOAConverterAcnN3d2AcnSn3d9.cpp rename source/HOAUGens/{HOAConverter1.cpp => HOAConverterAcnN3d2FuMa1.cpp} (88%) rename source/HOAUGens/{HOAConverter2.cpp => HOAConverterAcnN3d2FuMa2.cpp} (83%) rename source/HOAUGens/{HOAConverter3.cpp => HOAConverterAcnN3d2FuMa3.cpp} (79%) create mode 100644 source/HOAUGens/HOAConverterAcnSn3d2FuMa1.cpp create mode 100644 source/HOAUGens/HOAConverterAcnSn3d2FuMa2.cpp create mode 100644 source/HOAUGens/HOAConverterAcnSn3d2FuMa3.cpp rename source/HOAUGens/{HOAEncLebedev061.cpp => HOAConverterFuma2AcnN3d1.cpp} (85%) create mode 100644 source/HOAUGens/HOAConverterFuma2AcnN3d2.cpp create mode 100644 source/HOAUGens/HOAConverterFuma2AcnN3d3.cpp create mode 100644 source/HOAUGens/HOAConverterFuma2AcnSn3d1.cpp create mode 100644 source/HOAUGens/HOAConverterFuma2AcnSn3d2.cpp rename source/HOAUGens/{HOAEncLebedev262.cpp => HOAConverterFuma2AcnSn3d3.cpp} (75%) rename source/HOAUGens/{HOADecBinauralLebedev501.cpp => HOADecBinaural1.cpp} (55%) create mode 100644 source/HOAUGens/HOADecBinaural2.cpp create mode 100644 source/HOAUGens/HOADecBinaural3.cpp create mode 100644 source/HOAUGens/HOADecBinaural4.cpp create mode 100644 source/HOAUGens/HOADecBinaural5.cpp delete mode 100644 source/HOAUGens/HOADecoderLebedev50Binaural1.cpp delete mode 100644 source/HOAUGens/HOADecoderLebedev50Binaural2.cpp delete mode 100644 source/HOAUGens/HOADecoderLebedev50Binaural3.cpp create mode 100644 source/HOAUGens/HOAMirror10.cpp create mode 100644 source/HOAUGens/HOAMirror6.cpp create mode 100644 source/HOAUGens/HOAMirror7.cpp create mode 100644 source/HOAUGens/HOAMirror8.cpp create mode 100644 source/HOAUGens/HOAMirror9.cpp delete mode 100644 source/HOAUGens/README_HOAUgens.md create mode 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator10.sc create mode 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator6.sc create mode 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator7.sc create mode 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator8.sc create mode 100644 source/HOAUGens/sc/Classes/HOAAzimuthRotator9.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2HOA10.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2HOA6.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2HOA7.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2HOA8.sc create mode 100644 source/HOAUGens/sc/Classes/HOABeamDirac2HOA9.sc rename source/HOAUGens/sc/Classes/{HOAConverter1.sc => HOAConverterAcnN3d2AcnSn3d1.sc} (54%) create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnN3d2AcnSn3d10.sc rename source/HOAUGens/sc/Classes/{HOAConverter2.sc => HOAConverterAcnN3d2AcnSn3d2.sc} (63%) rename source/HOAUGens/sc/Classes/{HOAConverter3.sc => HOAConverterAcnN3d2AcnSn3d3.sc} (65%) rename source/HOAUGens/sc/Classes/{HOAConverter4.sc => HOAConverterAcnN3d2AcnSn3d4.sc} (75%) rename source/HOAUGens/sc/Classes/{HOAConverter5.sc => HOAConverterAcnN3d2AcnSn3d5.sc} (79%) create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnN3d2AcnSn3d6.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnN3d2AcnSn3d7.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnN3d2AcnSn3d8.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnN3d2AcnSn3d9.sc rename source/HOAUGens/sc/Classes/{HOAEncLebedev061.sc => HOAConverterAcnN3d2FuMa1.sc} (51%) create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnN3d2FuMa2.sc rename source/HOAUGens/sc/Classes/{HOAEncLebedev262.sc => HOAConverterAcnN3d2FuMa3.sc} (50%) create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnSn3d2FuMa1.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnSn3d2FuMa2.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterAcnSn3d2FuMa3.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterFuma2AcnN3d1.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterFuma2AcnN3d2.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterFuma2AcnN3d3.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterFuma2AcnSn3d1.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterFuma2AcnSn3d2.sc create mode 100644 source/HOAUGens/sc/Classes/HOAConverterFuma2AcnSn3d3.sc rename source/HOAUGens/sc/Classes/{HOADecBinauralLebedev501.sc => HOADecBinaural1.sc} (87%) create mode 100644 source/HOAUGens/sc/Classes/HOADecBinaural2.sc create mode 100644 source/HOAUGens/sc/Classes/HOADecBinaural3.sc rename source/HOAUGens/sc/Classes/{HOAEncLebedev263.sc => HOADecBinaural4.sc} (66%) rename source/HOAUGens/sc/Classes/{HOAEncLebedev261.sc => HOADecBinaural5.sc} (55%) create mode 100644 source/HOAUGens/sc/Classes/HOAMirror10.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror6.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror7.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror8.sc create mode 100644 source/HOAUGens/sc/Classes/HOAMirror9.sc diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt old mode 100644 new mode 100755 index 98f10e50b6..ff8c5c30f7 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -131,11 +131,6 @@ if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND ${CMAKE_CXX_COMPILER_VERSION} M SET_SOURCE_FILES_PROPERTIES(${BHOBFILT_CPP} PROPERTIES COMPILE_FLAGS "-fno-slp-vectorize") endif() -#HOAUGens -if (CMAKE_COMPILER_IS_CLANG) - set_property(TARGET HOAUGens APPEND PROPERTY COMPILE_FLAGS "-fbracket-depth=2048") -endif() - set(plugins "") set(supernova_plugins "") @@ -151,7 +146,7 @@ endif() GET_GCC_VERSION(gcc_version) -if (CMAKE_SYSTEM_NAME MATCHES "Linux") +if (CMAKE_SYSTEM_NAME MATCHES "Linux|.*BSD|DragonFly") set(INSTALL_DESTINATION "lib/SuperCollider/plugins") if (QUARKS) set(INSTALL_DESTINATION_LADSPALIST @@ -170,6 +165,13 @@ else() set(INSTALL_DESTINATION_DISTRO "SC3plugins") endif() +#HOAUGens +if (CMAKE_COMPILER_IS_CLANG) + file(GLOB HOAUGensSources HOAUGens/*cpp) + foreach(HOAUGensSourceFile ${HOAUGensSources}) + set_source_files_properties("${HOAUGensSourceFile}" PROPERTIES COMPILE_FLAGS "-fbracket-depth=4096") + endforeach(HOAUGensSourceFile) +endif() foreach(DIR ${PLUGIN_DIRS}) FIND_AND_BUILD_PLUGINS(${DIR}) @@ -240,9 +242,9 @@ BUILD_PLUGIN(MembraneUGens "MembraneUGens/Membrane_shape.c;MembraneUGens/Membran # LadspaUGen if(NOT WIN32) - BUILD_PLUGIN(LadspaUGen "LadspaUGen/LadspaUGen.cpp;LadspaUGen/search.c" "dl" "LadspaUGen") + BUILD_PLUGIN(LadspaUGen "LadspaUGen/LadspaUGen.cpp;LadspaUGen/search.c" "${CMAKE_DL_LIBS}" "LadspaUGen") add_executable(ladspalist LadspaUGen/ladspalist.c LadspaUGen/search.c) - target_link_libraries(ladspalist dl) + target_link_libraries(ladspalist "${CMAKE_DL_LIBS}") endif() # OteyPianoUGens @@ -338,9 +340,11 @@ else() BUILD_PLUGIN(TJUGens "${TJUGensSources}" "" "TJUGens") endif() +# NovaDiskIO if (NOVA_DISK_IO) - add_subdirectory(NovaDiskIO) + add_subdirectory(NovaDiskIO) endif() + #-------- # INSTALL #-------- diff --git a/source/HOAUGens/HOAAzimuthRotator1.cpp b/source/HOAUGens/HOAAzimuthRotator1.cpp index 4b3a77dba1..06cb53fdad 100644 --- a/source/HOAUGens/HOAAzimuthRotator1.cpp +++ b/source/HOAUGens/HOAAzimuthRotator1.cpp @@ -1,15 +1,16 @@ -//---------------------------------------------------------- -// name: "HOAAzimuthRotator1" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2015" -// -// Code generated with Faust 0.12.0 (http://faust.grame.fr) -//---------------------------------------------------------- +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAAzimuthRotator1" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ -/* link with */ -#include //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -30,9 +31,9 @@ // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -66,6 +67,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -114,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -142,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -209,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -299,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -456,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -485,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -552,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -583,55 +613,131 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fTempPerm0; - double fTempPerm1; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAAzimuthRotator1"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("ymn.lib/name", "Spherical Harmonics library"); - m->declare("ymn.lib/version", "2.0"); m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -641,50 +747,52 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator1"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - //LoopGraphScalar - for (int i=0; i +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAAzimuthRotator10"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 121; + + } + virtual int getNumOutputs() { + return 121; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + case 100: { + rate = 1; + break; + } + case 101: { + rate = 1; + break; + } + case 102: { + rate = 1; + break; + } + case 103: { + rate = 1; + break; + } + case 104: { + rate = 1; + break; + } + case 105: { + rate = 1; + break; + } + case 106: { + rate = 1; + break; + } + case 107: { + rate = 1; + break; + } + case 108: { + rate = 1; + break; + } + case 109: { + rate = 1; + break; + } + case 110: { + rate = 1; + break; + } + case 111: { + rate = 1; + break; + } + case 112: { + rate = 1; + break; + } + case 113: { + rate = 1; + break; + } + case 114: { + rate = 1; + break; + } + case 115: { + rate = 1; + break; + } + case 116: { + rate = 1; + break; + } + case 117: { + rate = 1; + break; + } + case 118: { + rate = 1; + break; + } + case 119: { + rate = 1; + break; + } + case 120: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + case 100: { + rate = 1; + break; + } + case 101: { + rate = 1; + break; + } + case 102: { + rate = 1; + break; + } + case 103: { + rate = 1; + break; + } + case 104: { + rate = 1; + break; + } + case 105: { + rate = 1; + break; + } + case 106: { + rate = 1; + break; + } + case 107: { + rate = 1; + break; + } + case 108: { + rate = 1; + break; + } + case 109: { + rate = 1; + break; + } + case 110: { + rate = 1; + break; + } + case 111: { + rate = 1; + break; + } + case 112: { + rate = 1; + break; + } + case 113: { + rate = 1; + break; + } + case 114: { + rate = 1; + break; + } + case 115: { + rate = 1; + break; + } + case 116: { + rate = 1; + break; + } + case 117: { + rate = 1; + break; + } + case 118: { + rate = 1; + break; + } + case 119: { + rate = 1; + break; + } + case 120: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAAzimuthRotator10"); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* input81 = inputs[81]; + FAUSTFLOAT* input82 = inputs[82]; + FAUSTFLOAT* input83 = inputs[83]; + FAUSTFLOAT* input84 = inputs[84]; + FAUSTFLOAT* input85 = inputs[85]; + FAUSTFLOAT* input86 = inputs[86]; + FAUSTFLOAT* input87 = inputs[87]; + FAUSTFLOAT* input88 = inputs[88]; + FAUSTFLOAT* input89 = inputs[89]; + FAUSTFLOAT* input90 = inputs[90]; + FAUSTFLOAT* input91 = inputs[91]; + FAUSTFLOAT* input92 = inputs[92]; + FAUSTFLOAT* input93 = inputs[93]; + FAUSTFLOAT* input94 = inputs[94]; + FAUSTFLOAT* input95 = inputs[95]; + FAUSTFLOAT* input96 = inputs[96]; + FAUSTFLOAT* input97 = inputs[97]; + FAUSTFLOAT* input98 = inputs[98]; + FAUSTFLOAT* input99 = inputs[99]; + FAUSTFLOAT* input100 = inputs[100]; + FAUSTFLOAT* input101 = inputs[101]; + FAUSTFLOAT* input102 = inputs[102]; + FAUSTFLOAT* input103 = inputs[103]; + FAUSTFLOAT* input104 = inputs[104]; + FAUSTFLOAT* input105 = inputs[105]; + FAUSTFLOAT* input106 = inputs[106]; + FAUSTFLOAT* input107 = inputs[107]; + FAUSTFLOAT* input108 = inputs[108]; + FAUSTFLOAT* input109 = inputs[109]; + FAUSTFLOAT* input110 = inputs[110]; + FAUSTFLOAT* input111 = inputs[111]; + FAUSTFLOAT* input112 = inputs[112]; + FAUSTFLOAT* input113 = inputs[113]; + FAUSTFLOAT* input114 = inputs[114]; + FAUSTFLOAT* input115 = inputs[115]; + FAUSTFLOAT* input116 = inputs[116]; + FAUSTFLOAT* input117 = inputs[117]; + FAUSTFLOAT* input118 = inputs[118]; + FAUSTFLOAT* input119 = inputs[119]; + FAUSTFLOAT* input120 = inputs[120]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + FAUSTFLOAT* output81 = outputs[81]; + FAUSTFLOAT* output82 = outputs[82]; + FAUSTFLOAT* output83 = outputs[83]; + FAUSTFLOAT* output84 = outputs[84]; + FAUSTFLOAT* output85 = outputs[85]; + FAUSTFLOAT* output86 = outputs[86]; + FAUSTFLOAT* output87 = outputs[87]; + FAUSTFLOAT* output88 = outputs[88]; + FAUSTFLOAT* output89 = outputs[89]; + FAUSTFLOAT* output90 = outputs[90]; + FAUSTFLOAT* output91 = outputs[91]; + FAUSTFLOAT* output92 = outputs[92]; + FAUSTFLOAT* output93 = outputs[93]; + FAUSTFLOAT* output94 = outputs[94]; + FAUSTFLOAT* output95 = outputs[95]; + FAUSTFLOAT* output96 = outputs[96]; + FAUSTFLOAT* output97 = outputs[97]; + FAUSTFLOAT* output98 = outputs[98]; + FAUSTFLOAT* output99 = outputs[99]; + FAUSTFLOAT* output100 = outputs[100]; + FAUSTFLOAT* output101 = outputs[101]; + FAUSTFLOAT* output102 = outputs[102]; + FAUSTFLOAT* output103 = outputs[103]; + FAUSTFLOAT* output104 = outputs[104]; + FAUSTFLOAT* output105 = outputs[105]; + FAUSTFLOAT* output106 = outputs[106]; + FAUSTFLOAT* output107 = outputs[107]; + FAUSTFLOAT* output108 = outputs[108]; + FAUSTFLOAT* output109 = outputs[109]; + FAUSTFLOAT* output110 = outputs[110]; + FAUSTFLOAT* output111 = outputs[111]; + FAUSTFLOAT* output112 = outputs[112]; + FAUSTFLOAT* output113 = outputs[113]; + FAUSTFLOAT* output114 = outputs[114]; + FAUSTFLOAT* output115 = outputs[115]; + FAUSTFLOAT* output116 = outputs[116]; + FAUSTFLOAT* output117 = outputs[117]; + FAUSTFLOAT* output118 = outputs[118]; + FAUSTFLOAT* output119 = outputs[119]; + FAUSTFLOAT* output120 = outputs[120]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0.0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2.0 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0.0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3.0 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0.0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4.0 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0.0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + double fSlow24 = (5.0 * fSlow0); + double fSlow25 = cos(fSlow24); + double fSlow26 = sin(fSlow24); + double fSlow27 = (0.0 - fSlow24); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + double fSlow30 = (6.0 * fSlow0); + double fSlow31 = cos(fSlow30); + double fSlow32 = sin(fSlow30); + double fSlow33 = (0.0 - fSlow30); + double fSlow34 = sin(fSlow33); + double fSlow35 = cos(fSlow33); + double fSlow36 = (7.0 * fSlow0); + double fSlow37 = cos(fSlow36); + double fSlow38 = sin(fSlow36); + double fSlow39 = (0.0 - fSlow36); + double fSlow40 = sin(fSlow39); + double fSlow41 = cos(fSlow39); + double fSlow42 = (8.0 * fSlow0); + double fSlow43 = cos(fSlow42); + double fSlow44 = sin(fSlow42); + double fSlow45 = (0.0 - fSlow42); + double fSlow46 = sin(fSlow45); + double fSlow47 = cos(fSlow45); + double fSlow48 = (9.0 * fSlow0); + double fSlow49 = cos(fSlow48); + double fSlow50 = sin(fSlow48); + double fSlow51 = (0.0 - fSlow48); + double fSlow52 = sin(fSlow51); + double fSlow53 = cos(fSlow51); + double fSlow54 = (10.0 * fSlow0); + double fSlow55 = cos(fSlow54); + double fSlow56 = sin(fSlow54); + double fSlow57 = (0.0 - fSlow54); + double fSlow58 = sin(fSlow57); + double fSlow59 = cos(fSlow57); + for (int i = 0; (i < count); i = (i + 1)) { + output0[i] = FAUSTFLOAT(double(input0[i])); + double fTemp0 = double(input1[i]); + double fTemp1 = double(input3[i]); + output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); + output2[i] = FAUSTFLOAT(double(input2[i])); + output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); + double fTemp2 = double(input4[i]); + double fTemp3 = double(input8[i]); + output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); + double fTemp4 = double(input5[i]); + double fTemp5 = double(input7[i]); + output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); + output6[i] = FAUSTFLOAT(double(input6[i])); + output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); + output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); + double fTemp6 = double(input9[i]); + double fTemp7 = double(input15[i]); + output9[i] = FAUSTFLOAT(((fSlow13 * fTemp6) + (fSlow14 * fTemp7))); + double fTemp8 = double(input10[i]); + double fTemp9 = double(input14[i]); + output10[i] = FAUSTFLOAT(((fSlow7 * fTemp8) + (fSlow8 * fTemp9))); + double fTemp10 = double(input11[i]); + double fTemp11 = double(input13[i]); + output11[i] = FAUSTFLOAT(((fSlow1 * fTemp10) + (fSlow2 * fTemp11))); + output12[i] = FAUSTFLOAT(double(input12[i])); + output13[i] = FAUSTFLOAT(((fSlow4 * fTemp10) + (fSlow5 * fTemp11))); + output14[i] = FAUSTFLOAT(((fSlow10 * fTemp8) + (fSlow11 * fTemp9))); + output15[i] = FAUSTFLOAT(((fSlow16 * fTemp6) + (fSlow17 * fTemp7))); + double fTemp12 = double(input16[i]); + double fTemp13 = double(input24[i]); + output16[i] = FAUSTFLOAT(((fSlow19 * fTemp12) + (fSlow20 * fTemp13))); + double fTemp14 = double(input17[i]); + double fTemp15 = double(input23[i]); + output17[i] = FAUSTFLOAT(((fSlow13 * fTemp14) + (fSlow14 * fTemp15))); + double fTemp16 = double(input18[i]); + double fTemp17 = double(input22[i]); + output18[i] = FAUSTFLOAT(((fSlow7 * fTemp16) + (fSlow8 * fTemp17))); + double fTemp18 = double(input19[i]); + double fTemp19 = double(input21[i]); + output19[i] = FAUSTFLOAT(((fSlow1 * fTemp18) + (fSlow2 * fTemp19))); + output20[i] = FAUSTFLOAT(double(input20[i])); + output21[i] = FAUSTFLOAT(((fSlow4 * fTemp18) + (fSlow5 * fTemp19))); + output22[i] = FAUSTFLOAT(((fSlow10 * fTemp16) + (fSlow11 * fTemp17))); + output23[i] = FAUSTFLOAT(((fSlow16 * fTemp14) + (fSlow17 * fTemp15))); + output24[i] = FAUSTFLOAT(((fSlow22 * fTemp12) + (fSlow23 * fTemp13))); + double fTemp20 = double(input25[i]); + double fTemp21 = double(input35[i]); + output25[i] = FAUSTFLOAT(((fSlow25 * fTemp20) + (fSlow26 * fTemp21))); + double fTemp22 = double(input26[i]); + double fTemp23 = double(input34[i]); + output26[i] = FAUSTFLOAT(((fSlow19 * fTemp22) + (fSlow20 * fTemp23))); + double fTemp24 = double(input27[i]); + double fTemp25 = double(input33[i]); + output27[i] = FAUSTFLOAT(((fSlow13 * fTemp24) + (fSlow14 * fTemp25))); + double fTemp26 = double(input28[i]); + double fTemp27 = double(input32[i]); + output28[i] = FAUSTFLOAT(((fSlow7 * fTemp26) + (fSlow8 * fTemp27))); + double fTemp28 = double(input29[i]); + double fTemp29 = double(input31[i]); + output29[i] = FAUSTFLOAT(((fSlow1 * fTemp28) + (fSlow2 * fTemp29))); + output30[i] = FAUSTFLOAT(double(input30[i])); + output31[i] = FAUSTFLOAT(((fSlow4 * fTemp28) + (fSlow5 * fTemp29))); + output32[i] = FAUSTFLOAT(((fSlow10 * fTemp26) + (fSlow11 * fTemp27))); + output33[i] = FAUSTFLOAT(((fSlow16 * fTemp24) + (fSlow17 * fTemp25))); + output34[i] = FAUSTFLOAT(((fSlow22 * fTemp22) + (fSlow23 * fTemp23))); + output35[i] = FAUSTFLOAT(((fSlow28 * fTemp20) + (fSlow29 * fTemp21))); + double fTemp30 = double(input36[i]); + double fTemp31 = double(input48[i]); + output36[i] = FAUSTFLOAT(((fSlow31 * fTemp30) + (fSlow32 * fTemp31))); + double fTemp32 = double(input37[i]); + double fTemp33 = double(input47[i]); + output37[i] = FAUSTFLOAT(((fSlow25 * fTemp32) + (fSlow26 * fTemp33))); + double fTemp34 = double(input38[i]); + double fTemp35 = double(input46[i]); + output38[i] = FAUSTFLOAT(((fSlow19 * fTemp34) + (fSlow20 * fTemp35))); + double fTemp36 = double(input39[i]); + double fTemp37 = double(input45[i]); + output39[i] = FAUSTFLOAT(((fSlow13 * fTemp36) + (fSlow14 * fTemp37))); + double fTemp38 = double(input40[i]); + double fTemp39 = double(input44[i]); + output40[i] = FAUSTFLOAT(((fSlow7 * fTemp38) + (fSlow8 * fTemp39))); + double fTemp40 = double(input41[i]); + double fTemp41 = double(input43[i]); + output41[i] = FAUSTFLOAT(((fSlow1 * fTemp40) + (fSlow2 * fTemp41))); + output42[i] = FAUSTFLOAT(double(input42[i])); + output43[i] = FAUSTFLOAT(((fSlow4 * fTemp40) + (fSlow5 * fTemp41))); + output44[i] = FAUSTFLOAT(((fSlow10 * fTemp38) + (fSlow11 * fTemp39))); + output45[i] = FAUSTFLOAT(((fSlow16 * fTemp36) + (fSlow17 * fTemp37))); + output46[i] = FAUSTFLOAT(((fSlow22 * fTemp34) + (fSlow23 * fTemp35))); + output47[i] = FAUSTFLOAT(((fSlow28 * fTemp32) + (fSlow29 * fTemp33))); + output48[i] = FAUSTFLOAT(((fSlow34 * fTemp30) + (fSlow35 * fTemp31))); + double fTemp42 = double(input49[i]); + double fTemp43 = double(input63[i]); + output49[i] = FAUSTFLOAT(((fSlow37 * fTemp42) + (fSlow38 * fTemp43))); + double fTemp44 = double(input50[i]); + double fTemp45 = double(input62[i]); + output50[i] = FAUSTFLOAT(((fSlow31 * fTemp44) + (fSlow32 * fTemp45))); + double fTemp46 = double(input51[i]); + double fTemp47 = double(input61[i]); + output51[i] = FAUSTFLOAT(((fSlow25 * fTemp46) + (fSlow26 * fTemp47))); + double fTemp48 = double(input52[i]); + double fTemp49 = double(input60[i]); + output52[i] = FAUSTFLOAT(((fSlow19 * fTemp48) + (fSlow20 * fTemp49))); + double fTemp50 = double(input53[i]); + double fTemp51 = double(input59[i]); + output53[i] = FAUSTFLOAT(((fSlow13 * fTemp50) + (fSlow14 * fTemp51))); + double fTemp52 = double(input54[i]); + double fTemp53 = double(input58[i]); + output54[i] = FAUSTFLOAT(((fSlow7 * fTemp52) + (fSlow8 * fTemp53))); + double fTemp54 = double(input55[i]); + double fTemp55 = double(input57[i]); + output55[i] = FAUSTFLOAT(((fSlow1 * fTemp54) + (fSlow2 * fTemp55))); + output56[i] = FAUSTFLOAT(double(input56[i])); + output57[i] = FAUSTFLOAT(((fSlow4 * fTemp54) + (fSlow5 * fTemp55))); + output58[i] = FAUSTFLOAT(((fSlow10 * fTemp52) + (fSlow11 * fTemp53))); + output59[i] = FAUSTFLOAT(((fSlow16 * fTemp50) + (fSlow17 * fTemp51))); + output60[i] = FAUSTFLOAT(((fSlow22 * fTemp48) + (fSlow23 * fTemp49))); + output61[i] = FAUSTFLOAT(((fSlow28 * fTemp46) + (fSlow29 * fTemp47))); + output62[i] = FAUSTFLOAT(((fSlow34 * fTemp44) + (fSlow35 * fTemp45))); + output63[i] = FAUSTFLOAT(((fSlow40 * fTemp42) + (fSlow41 * fTemp43))); + double fTemp56 = double(input64[i]); + double fTemp57 = double(input80[i]); + output64[i] = FAUSTFLOAT(((fSlow43 * fTemp56) + (fSlow44 * fTemp57))); + double fTemp58 = double(input65[i]); + double fTemp59 = double(input79[i]); + output65[i] = FAUSTFLOAT(((fSlow37 * fTemp58) + (fSlow38 * fTemp59))); + double fTemp60 = double(input66[i]); + double fTemp61 = double(input78[i]); + output66[i] = FAUSTFLOAT(((fSlow31 * fTemp60) + (fSlow32 * fTemp61))); + double fTemp62 = double(input67[i]); + double fTemp63 = double(input77[i]); + output67[i] = FAUSTFLOAT(((fSlow25 * fTemp62) + (fSlow26 * fTemp63))); + double fTemp64 = double(input68[i]); + double fTemp65 = double(input76[i]); + output68[i] = FAUSTFLOAT(((fSlow19 * fTemp64) + (fSlow20 * fTemp65))); + double fTemp66 = double(input69[i]); + double fTemp67 = double(input75[i]); + output69[i] = FAUSTFLOAT(((fSlow13 * fTemp66) + (fSlow14 * fTemp67))); + double fTemp68 = double(input70[i]); + double fTemp69 = double(input74[i]); + output70[i] = FAUSTFLOAT(((fSlow7 * fTemp68) + (fSlow8 * fTemp69))); + double fTemp70 = double(input71[i]); + double fTemp71 = double(input73[i]); + output71[i] = FAUSTFLOAT(((fSlow1 * fTemp70) + (fSlow2 * fTemp71))); + output72[i] = FAUSTFLOAT(double(input72[i])); + output73[i] = FAUSTFLOAT(((fSlow4 * fTemp70) + (fSlow5 * fTemp71))); + output74[i] = FAUSTFLOAT(((fSlow10 * fTemp68) + (fSlow11 * fTemp69))); + output75[i] = FAUSTFLOAT(((fSlow16 * fTemp66) + (fSlow17 * fTemp67))); + output76[i] = FAUSTFLOAT(((fSlow22 * fTemp64) + (fSlow23 * fTemp65))); + output77[i] = FAUSTFLOAT(((fSlow28 * fTemp62) + (fSlow29 * fTemp63))); + output78[i] = FAUSTFLOAT(((fSlow34 * fTemp60) + (fSlow35 * fTemp61))); + output79[i] = FAUSTFLOAT(((fSlow40 * fTemp58) + (fSlow41 * fTemp59))); + output80[i] = FAUSTFLOAT(((fSlow46 * fTemp56) + (fSlow47 * fTemp57))); + double fTemp72 = double(input81[i]); + double fTemp73 = double(input99[i]); + output81[i] = FAUSTFLOAT(((fSlow49 * fTemp72) + (fSlow50 * fTemp73))); + double fTemp74 = double(input82[i]); + double fTemp75 = double(input98[i]); + output82[i] = FAUSTFLOAT(((fSlow43 * fTemp74) + (fSlow44 * fTemp75))); + double fTemp76 = double(input83[i]); + double fTemp77 = double(input97[i]); + output83[i] = FAUSTFLOAT(((fSlow37 * fTemp76) + (fSlow38 * fTemp77))); + double fTemp78 = double(input84[i]); + double fTemp79 = double(input96[i]); + output84[i] = FAUSTFLOAT(((fSlow31 * fTemp78) + (fSlow32 * fTemp79))); + double fTemp80 = double(input85[i]); + double fTemp81 = double(input95[i]); + output85[i] = FAUSTFLOAT(((fSlow25 * fTemp80) + (fSlow26 * fTemp81))); + double fTemp82 = double(input86[i]); + double fTemp83 = double(input94[i]); + output86[i] = FAUSTFLOAT(((fSlow19 * fTemp82) + (fSlow20 * fTemp83))); + double fTemp84 = double(input87[i]); + double fTemp85 = double(input93[i]); + output87[i] = FAUSTFLOAT(((fSlow13 * fTemp84) + (fSlow14 * fTemp85))); + double fTemp86 = double(input88[i]); + double fTemp87 = double(input92[i]); + output88[i] = FAUSTFLOAT(((fSlow7 * fTemp86) + (fSlow8 * fTemp87))); + double fTemp88 = double(input89[i]); + double fTemp89 = double(input91[i]); + output89[i] = FAUSTFLOAT(((fSlow1 * fTemp88) + (fSlow2 * fTemp89))); + output90[i] = FAUSTFLOAT(double(input90[i])); + output91[i] = FAUSTFLOAT(((fSlow4 * fTemp88) + (fSlow5 * fTemp89))); + output92[i] = FAUSTFLOAT(((fSlow10 * fTemp86) + (fSlow11 * fTemp87))); + output93[i] = FAUSTFLOAT(((fSlow16 * fTemp84) + (fSlow17 * fTemp85))); + output94[i] = FAUSTFLOAT(((fSlow22 * fTemp82) + (fSlow23 * fTemp83))); + output95[i] = FAUSTFLOAT(((fSlow28 * fTemp80) + (fSlow29 * fTemp81))); + output96[i] = FAUSTFLOAT(((fSlow34 * fTemp78) + (fSlow35 * fTemp79))); + output97[i] = FAUSTFLOAT(((fSlow40 * fTemp76) + (fSlow41 * fTemp77))); + output98[i] = FAUSTFLOAT(((fSlow46 * fTemp74) + (fSlow47 * fTemp75))); + output99[i] = FAUSTFLOAT(((fSlow52 * fTemp72) + (fSlow53 * fTemp73))); + double fTemp90 = double(input100[i]); + double fTemp91 = double(input120[i]); + output100[i] = FAUSTFLOAT(((fSlow55 * fTemp90) + (fSlow56 * fTemp91))); + double fTemp92 = double(input101[i]); + double fTemp93 = double(input119[i]); + output101[i] = FAUSTFLOAT(((fSlow49 * fTemp92) + (fSlow50 * fTemp93))); + double fTemp94 = double(input102[i]); + double fTemp95 = double(input118[i]); + output102[i] = FAUSTFLOAT(((fSlow43 * fTemp94) + (fSlow44 * fTemp95))); + double fTemp96 = double(input103[i]); + double fTemp97 = double(input117[i]); + output103[i] = FAUSTFLOAT(((fSlow37 * fTemp96) + (fSlow38 * fTemp97))); + double fTemp98 = double(input104[i]); + double fTemp99 = double(input116[i]); + output104[i] = FAUSTFLOAT(((fSlow31 * fTemp98) + (fSlow32 * fTemp99))); + double fTemp100 = double(input105[i]); + double fTemp101 = double(input115[i]); + output105[i] = FAUSTFLOAT(((fSlow25 * fTemp100) + (fSlow26 * fTemp101))); + double fTemp102 = double(input106[i]); + double fTemp103 = double(input114[i]); + output106[i] = FAUSTFLOAT(((fSlow19 * fTemp102) + (fSlow20 * fTemp103))); + double fTemp104 = double(input107[i]); + double fTemp105 = double(input113[i]); + output107[i] = FAUSTFLOAT(((fSlow13 * fTemp104) + (fSlow14 * fTemp105))); + double fTemp106 = double(input108[i]); + double fTemp107 = double(input112[i]); + output108[i] = FAUSTFLOAT(((fSlow7 * fTemp106) + (fSlow8 * fTemp107))); + double fTemp108 = double(input109[i]); + double fTemp109 = double(input111[i]); + output109[i] = FAUSTFLOAT(((fSlow1 * fTemp108) + (fSlow2 * fTemp109))); + output110[i] = FAUSTFLOAT(double(input110[i])); + output111[i] = FAUSTFLOAT(((fSlow4 * fTemp108) + (fSlow5 * fTemp109))); + output112[i] = FAUSTFLOAT(((fSlow10 * fTemp106) + (fSlow11 * fTemp107))); + output113[i] = FAUSTFLOAT(((fSlow16 * fTemp104) + (fSlow17 * fTemp105))); + output114[i] = FAUSTFLOAT(((fSlow22 * fTemp102) + (fSlow23 * fTemp103))); + output115[i] = FAUSTFLOAT(((fSlow28 * fTemp100) + (fSlow29 * fTemp101))); + output116[i] = FAUSTFLOAT(((fSlow34 * fTemp98) + (fSlow35 * fTemp99))); + output117[i] = FAUSTFLOAT(((fSlow40 * fTemp96) + (fSlow41 * fTemp97))); + output118[i] = FAUSTFLOAT(((fSlow46 * fTemp94) + (fSlow47 * fTemp95))); + output119[i] = FAUSTFLOAT(((fSlow52 * fTemp92) + (fSlow53 * fTemp93))); + output120[i] = FAUSTFLOAT(((fSlow58 * fTemp90) + (fSlow59 * fTemp91))); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAAzimuthRotator2.cpp b/source/HOAUGens/HOAAzimuthRotator2.cpp index ca26328fd3..56c9922143 100644 --- a/source/HOAUGens/HOAAzimuthRotator2.cpp +++ b/source/HOAUGens/HOAAzimuthRotator2.cpp @@ -1,15 +1,16 @@ -//---------------------------------------------------------- -// name: "HOAAzimuthRotator2" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2015" -// -// Code generated with Faust 0.12.0 (http://faust.grame.fr) -//---------------------------------------------------------- +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAAzimuthRotator2" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ -/* link with */ -#include //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -30,9 +31,9 @@ // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -66,6 +67,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -114,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -142,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -209,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -299,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -456,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -485,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -552,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -583,63 +613,171 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fTempPerm0; - double fTempPerm1; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAAzimuthRotator2"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("ymn.lib/name", "Spherical Harmonics library"); - m->declare("ymn.lib/version", "2.0"); m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -649,75 +787,77 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator2"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - //LoopGraphScalar - for (int i=0; i //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -30,9 +31,9 @@ // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -66,6 +67,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -114,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -142,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -209,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -299,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -456,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -485,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -552,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -583,75 +613,227 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fTempPerm0; - double fTempPerm1; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; - double fTempPerm8; - double fTempPerm9; - double fTempPerm10; - double fTempPerm11; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOAAzimuthRotator3"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("ymn.lib/name", "Spherical Harmonics library"); - m->declare("ymn.lib/version", "2.0"); - m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); - m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAAzimuthRotator3"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; - fTempPerm8 = 0; - fTempPerm9 = 0; - fTempPerm10 = 0; - fTempPerm11 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -661,108 +843,110 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator3"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - //LoopGraphScalar - for (int i=0; i //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -30,9 +31,9 @@ // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -66,6 +67,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -114,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -142,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -209,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -299,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -456,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -485,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -552,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -583,91 +613,299 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fTempPerm0; - double fTempPerm1; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; - double fTempPerm8; - double fTempPerm9; - double fTempPerm10; - double fTempPerm11; - double fTempPerm12; - double fTempPerm13; - double fTempPerm14; - double fTempPerm15; - double fTempPerm16; - double fTempPerm17; - double fTempPerm18; - double fTempPerm19; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAAzimuthRotator4"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("ymn.lib/name", "Spherical Harmonics library"); - m->declare("ymn.lib/version", "2.0"); m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 25; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; - fTempPerm8 = 0; - fTempPerm9 = 0; - fTempPerm10 = 0; - fTempPerm11 = 0; - fTempPerm12 = 0; - fTempPerm13 = 0; - fTempPerm14 = 0; - fTempPerm15 = 0; - fTempPerm16 = 0; - fTempPerm17 = 0; - fTempPerm18 = 0; - fTempPerm19 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -677,149 +915,151 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator4"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2 * fSlow0); - double fSlow7 = sin(fSlow6); - double fSlow8 = cos(fSlow6); - double fSlow9 = (0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - double fSlow18 = (4 * fSlow0); - double fSlow19 = cos(fSlow18); - double fSlow20 = sin(fSlow18); - double fSlow21 = (0 - fSlow18); - double fSlow22 = sin(fSlow21); - double fSlow23 = cos(fSlow21); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - //LoopGraphScalar - for (int i=0; i //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -30,9 +31,9 @@ // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -66,6 +67,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -114,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -142,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -209,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -299,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -456,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -485,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -552,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -583,111 +613,387 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - double fTempPerm0; - double fTempPerm1; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; - double fTempPerm8; - double fTempPerm9; - double fTempPerm10; - double fTempPerm11; - double fTempPerm12; - double fTempPerm13; - double fTempPerm14; - double fTempPerm15; - double fTempPerm16; - double fTempPerm17; - double fTempPerm18; - double fTempPerm19; - double fTempPerm20; - double fTempPerm21; - double fTempPerm22; - double fTempPerm23; - double fTempPerm24; - double fTempPerm25; - double fTempPerm26; - double fTempPerm27; - double fTempPerm28; - double fTempPerm29; + + private: + + FAUSTFLOAT fHslider0; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("name", "HOAAzimuthRotator5"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("ymn.lib/name", "Spherical Harmonics library"); - m->declare("ymn.lib/version", "2.0"); - m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); - m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAAzimuthRotator5"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 36; } - virtual int getNumOutputs() { return 36; } + virtual int getNumInputs() { + return 36; + + } + virtual int getNumOutputs() { + return 36; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; - fTempPerm8 = 0; - fTempPerm9 = 0; - fTempPerm10 = 0; - fTempPerm11 = 0; - fTempPerm12 = 0; - fTempPerm13 = 0; - fTempPerm14 = 0; - fTempPerm15 = 0; - fTempPerm16 = 0; - fTempPerm17 = 0; - fTempPerm18 = 0; - fTempPerm19 = 0; - fTempPerm20 = 0; - fTempPerm21 = 0; - fTempPerm22 = 0; - fTempPerm23 = 0; - fTempPerm24 = 0; - fTempPerm25 = 0; - fTempPerm26 = 0; - fTempPerm27 = 0; - fTempPerm28 = 0; - fTempPerm29 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -697,198 +1003,200 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAAzimuthRotator5"); - ui_interface->declare(&fslider0, "osc", "/azimuth 0 360"); - ui_interface->addHorizontalSlider("Azimuth", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = sin(fSlow0); - double fSlow3 = (0 - fSlow0); - double fSlow4 = sin(fSlow3); - double fSlow5 = cos(fSlow3); - double fSlow6 = (2 * fSlow0); - double fSlow7 = cos(fSlow6); - double fSlow8 = sin(fSlow6); - double fSlow9 = (0 - fSlow6); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (3 * fSlow0); - double fSlow13 = cos(fSlow12); - double fSlow14 = sin(fSlow12); - double fSlow15 = (0 - fSlow12); - double fSlow16 = sin(fSlow15); - double fSlow17 = cos(fSlow15); - double fSlow18 = (4 * fSlow0); - double fSlow19 = cos(fSlow18); - double fSlow20 = sin(fSlow18); - double fSlow21 = (0 - fSlow18); - double fSlow22 = sin(fSlow21); - double fSlow23 = cos(fSlow21); - double fSlow24 = (5 * fSlow0); - double fSlow25 = cos(fSlow24); - double fSlow26 = sin(fSlow24); - double fSlow27 = (0 - fSlow24); - double fSlow28 = sin(fSlow27); - double fSlow29 = cos(fSlow27); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* input25 = input[25]; - FAUSTFLOAT* input26 = input[26]; - FAUSTFLOAT* input27 = input[27]; - FAUSTFLOAT* input28 = input[28]; - FAUSTFLOAT* input29 = input[29]; - FAUSTFLOAT* input30 = input[30]; - FAUSTFLOAT* input31 = input[31]; - FAUSTFLOAT* input32 = input[32]; - FAUSTFLOAT* input33 = input[33]; - FAUSTFLOAT* input34 = input[34]; - FAUSTFLOAT* input35 = input[35]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - FAUSTFLOAT* output25 = output[25]; - FAUSTFLOAT* output26 = output[26]; - FAUSTFLOAT* output27 = output[27]; - FAUSTFLOAT* output28 = output[28]; - FAUSTFLOAT* output29 = output[29]; - FAUSTFLOAT* output30 = output[30]; - FAUSTFLOAT* output31 = output[31]; - FAUSTFLOAT* output32 = output[32]; - FAUSTFLOAT* output33 = output[33]; - FAUSTFLOAT* output34 = output[34]; - FAUSTFLOAT* output35 = output[35]; - //LoopGraphScalar - for (int i=0; i +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAAzimuthRotator6"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 49; + + } + virtual int getNumOutputs() { + return 49; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAAzimuthRotator6"); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0.0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2.0 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0.0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3.0 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0.0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4.0 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0.0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + double fSlow24 = (5.0 * fSlow0); + double fSlow25 = cos(fSlow24); + double fSlow26 = sin(fSlow24); + double fSlow27 = (0.0 - fSlow24); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + double fSlow30 = (6.0 * fSlow0); + double fSlow31 = cos(fSlow30); + double fSlow32 = sin(fSlow30); + double fSlow33 = (0.0 - fSlow30); + double fSlow34 = sin(fSlow33); + double fSlow35 = cos(fSlow33); + for (int i = 0; (i < count); i = (i + 1)) { + output0[i] = FAUSTFLOAT(double(input0[i])); + double fTemp0 = double(input1[i]); + double fTemp1 = double(input3[i]); + output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); + output2[i] = FAUSTFLOAT(double(input2[i])); + output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); + double fTemp2 = double(input4[i]); + double fTemp3 = double(input8[i]); + output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); + double fTemp4 = double(input5[i]); + double fTemp5 = double(input7[i]); + output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); + output6[i] = FAUSTFLOAT(double(input6[i])); + output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); + output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); + double fTemp6 = double(input9[i]); + double fTemp7 = double(input15[i]); + output9[i] = FAUSTFLOAT(((fSlow13 * fTemp6) + (fSlow14 * fTemp7))); + double fTemp8 = double(input10[i]); + double fTemp9 = double(input14[i]); + output10[i] = FAUSTFLOAT(((fSlow7 * fTemp8) + (fSlow8 * fTemp9))); + double fTemp10 = double(input11[i]); + double fTemp11 = double(input13[i]); + output11[i] = FAUSTFLOAT(((fSlow1 * fTemp10) + (fSlow2 * fTemp11))); + output12[i] = FAUSTFLOAT(double(input12[i])); + output13[i] = FAUSTFLOAT(((fSlow4 * fTemp10) + (fSlow5 * fTemp11))); + output14[i] = FAUSTFLOAT(((fSlow10 * fTemp8) + (fSlow11 * fTemp9))); + output15[i] = FAUSTFLOAT(((fSlow16 * fTemp6) + (fSlow17 * fTemp7))); + double fTemp12 = double(input16[i]); + double fTemp13 = double(input24[i]); + output16[i] = FAUSTFLOAT(((fSlow19 * fTemp12) + (fSlow20 * fTemp13))); + double fTemp14 = double(input17[i]); + double fTemp15 = double(input23[i]); + output17[i] = FAUSTFLOAT(((fSlow13 * fTemp14) + (fSlow14 * fTemp15))); + double fTemp16 = double(input18[i]); + double fTemp17 = double(input22[i]); + output18[i] = FAUSTFLOAT(((fSlow7 * fTemp16) + (fSlow8 * fTemp17))); + double fTemp18 = double(input19[i]); + double fTemp19 = double(input21[i]); + output19[i] = FAUSTFLOAT(((fSlow1 * fTemp18) + (fSlow2 * fTemp19))); + output20[i] = FAUSTFLOAT(double(input20[i])); + output21[i] = FAUSTFLOAT(((fSlow4 * fTemp18) + (fSlow5 * fTemp19))); + output22[i] = FAUSTFLOAT(((fSlow10 * fTemp16) + (fSlow11 * fTemp17))); + output23[i] = FAUSTFLOAT(((fSlow16 * fTemp14) + (fSlow17 * fTemp15))); + output24[i] = FAUSTFLOAT(((fSlow22 * fTemp12) + (fSlow23 * fTemp13))); + double fTemp20 = double(input25[i]); + double fTemp21 = double(input35[i]); + output25[i] = FAUSTFLOAT(((fSlow25 * fTemp20) + (fSlow26 * fTemp21))); + double fTemp22 = double(input26[i]); + double fTemp23 = double(input34[i]); + output26[i] = FAUSTFLOAT(((fSlow19 * fTemp22) + (fSlow20 * fTemp23))); + double fTemp24 = double(input27[i]); + double fTemp25 = double(input33[i]); + output27[i] = FAUSTFLOAT(((fSlow13 * fTemp24) + (fSlow14 * fTemp25))); + double fTemp26 = double(input28[i]); + double fTemp27 = double(input32[i]); + output28[i] = FAUSTFLOAT(((fSlow7 * fTemp26) + (fSlow8 * fTemp27))); + double fTemp28 = double(input29[i]); + double fTemp29 = double(input31[i]); + output29[i] = FAUSTFLOAT(((fSlow1 * fTemp28) + (fSlow2 * fTemp29))); + output30[i] = FAUSTFLOAT(double(input30[i])); + output31[i] = FAUSTFLOAT(((fSlow4 * fTemp28) + (fSlow5 * fTemp29))); + output32[i] = FAUSTFLOAT(((fSlow10 * fTemp26) + (fSlow11 * fTemp27))); + output33[i] = FAUSTFLOAT(((fSlow16 * fTemp24) + (fSlow17 * fTemp25))); + output34[i] = FAUSTFLOAT(((fSlow22 * fTemp22) + (fSlow23 * fTemp23))); + output35[i] = FAUSTFLOAT(((fSlow28 * fTemp20) + (fSlow29 * fTemp21))); + double fTemp30 = double(input36[i]); + double fTemp31 = double(input48[i]); + output36[i] = FAUSTFLOAT(((fSlow31 * fTemp30) + (fSlow32 * fTemp31))); + double fTemp32 = double(input37[i]); + double fTemp33 = double(input47[i]); + output37[i] = FAUSTFLOAT(((fSlow25 * fTemp32) + (fSlow26 * fTemp33))); + double fTemp34 = double(input38[i]); + double fTemp35 = double(input46[i]); + output38[i] = FAUSTFLOAT(((fSlow19 * fTemp34) + (fSlow20 * fTemp35))); + double fTemp36 = double(input39[i]); + double fTemp37 = double(input45[i]); + output39[i] = FAUSTFLOAT(((fSlow13 * fTemp36) + (fSlow14 * fTemp37))); + double fTemp38 = double(input40[i]); + double fTemp39 = double(input44[i]); + output40[i] = FAUSTFLOAT(((fSlow7 * fTemp38) + (fSlow8 * fTemp39))); + double fTemp40 = double(input41[i]); + double fTemp41 = double(input43[i]); + output41[i] = FAUSTFLOAT(((fSlow1 * fTemp40) + (fSlow2 * fTemp41))); + output42[i] = FAUSTFLOAT(double(input42[i])); + output43[i] = FAUSTFLOAT(((fSlow4 * fTemp40) + (fSlow5 * fTemp41))); + output44[i] = FAUSTFLOAT(((fSlow10 * fTemp38) + (fSlow11 * fTemp39))); + output45[i] = FAUSTFLOAT(((fSlow16 * fTemp36) + (fSlow17 * fTemp37))); + output46[i] = FAUSTFLOAT(((fSlow22 * fTemp34) + (fSlow23 * fTemp35))); + output47[i] = FAUSTFLOAT(((fSlow28 * fTemp32) + (fSlow29 * fTemp33))); + output48[i] = FAUSTFLOAT(((fSlow34 * fTemp30) + (fSlow35 * fTemp31))); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAAzimuthRotator7.cpp b/source/HOAUGens/HOAAzimuthRotator7.cpp new file mode 100644 index 0000000000..13a8065b48 --- /dev/null +++ b/source/HOAUGens/HOAAzimuthRotator7.cpp @@ -0,0 +1,1883 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAAzimuthRotator7" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAAzimuthRotator7"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 64; + + } + virtual int getNumOutputs() { + return 64; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAAzimuthRotator7"); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0.0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2.0 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0.0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3.0 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0.0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4.0 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0.0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + double fSlow24 = (5.0 * fSlow0); + double fSlow25 = cos(fSlow24); + double fSlow26 = sin(fSlow24); + double fSlow27 = (0.0 - fSlow24); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + double fSlow30 = (6.0 * fSlow0); + double fSlow31 = cos(fSlow30); + double fSlow32 = sin(fSlow30); + double fSlow33 = (0.0 - fSlow30); + double fSlow34 = sin(fSlow33); + double fSlow35 = cos(fSlow33); + double fSlow36 = (7.0 * fSlow0); + double fSlow37 = cos(fSlow36); + double fSlow38 = sin(fSlow36); + double fSlow39 = (0.0 - fSlow36); + double fSlow40 = sin(fSlow39); + double fSlow41 = cos(fSlow39); + for (int i = 0; (i < count); i = (i + 1)) { + output0[i] = FAUSTFLOAT(double(input0[i])); + double fTemp0 = double(input1[i]); + double fTemp1 = double(input3[i]); + output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); + output2[i] = FAUSTFLOAT(double(input2[i])); + output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); + double fTemp2 = double(input4[i]); + double fTemp3 = double(input8[i]); + output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); + double fTemp4 = double(input5[i]); + double fTemp5 = double(input7[i]); + output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); + output6[i] = FAUSTFLOAT(double(input6[i])); + output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); + output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); + double fTemp6 = double(input9[i]); + double fTemp7 = double(input15[i]); + output9[i] = FAUSTFLOAT(((fSlow13 * fTemp6) + (fSlow14 * fTemp7))); + double fTemp8 = double(input10[i]); + double fTemp9 = double(input14[i]); + output10[i] = FAUSTFLOAT(((fSlow7 * fTemp8) + (fSlow8 * fTemp9))); + double fTemp10 = double(input11[i]); + double fTemp11 = double(input13[i]); + output11[i] = FAUSTFLOAT(((fSlow1 * fTemp10) + (fSlow2 * fTemp11))); + output12[i] = FAUSTFLOAT(double(input12[i])); + output13[i] = FAUSTFLOAT(((fSlow4 * fTemp10) + (fSlow5 * fTemp11))); + output14[i] = FAUSTFLOAT(((fSlow10 * fTemp8) + (fSlow11 * fTemp9))); + output15[i] = FAUSTFLOAT(((fSlow16 * fTemp6) + (fSlow17 * fTemp7))); + double fTemp12 = double(input16[i]); + double fTemp13 = double(input24[i]); + output16[i] = FAUSTFLOAT(((fSlow19 * fTemp12) + (fSlow20 * fTemp13))); + double fTemp14 = double(input17[i]); + double fTemp15 = double(input23[i]); + output17[i] = FAUSTFLOAT(((fSlow13 * fTemp14) + (fSlow14 * fTemp15))); + double fTemp16 = double(input18[i]); + double fTemp17 = double(input22[i]); + output18[i] = FAUSTFLOAT(((fSlow7 * fTemp16) + (fSlow8 * fTemp17))); + double fTemp18 = double(input19[i]); + double fTemp19 = double(input21[i]); + output19[i] = FAUSTFLOAT(((fSlow1 * fTemp18) + (fSlow2 * fTemp19))); + output20[i] = FAUSTFLOAT(double(input20[i])); + output21[i] = FAUSTFLOAT(((fSlow4 * fTemp18) + (fSlow5 * fTemp19))); + output22[i] = FAUSTFLOAT(((fSlow10 * fTemp16) + (fSlow11 * fTemp17))); + output23[i] = FAUSTFLOAT(((fSlow16 * fTemp14) + (fSlow17 * fTemp15))); + output24[i] = FAUSTFLOAT(((fSlow22 * fTemp12) + (fSlow23 * fTemp13))); + double fTemp20 = double(input25[i]); + double fTemp21 = double(input35[i]); + output25[i] = FAUSTFLOAT(((fSlow25 * fTemp20) + (fSlow26 * fTemp21))); + double fTemp22 = double(input26[i]); + double fTemp23 = double(input34[i]); + output26[i] = FAUSTFLOAT(((fSlow19 * fTemp22) + (fSlow20 * fTemp23))); + double fTemp24 = double(input27[i]); + double fTemp25 = double(input33[i]); + output27[i] = FAUSTFLOAT(((fSlow13 * fTemp24) + (fSlow14 * fTemp25))); + double fTemp26 = double(input28[i]); + double fTemp27 = double(input32[i]); + output28[i] = FAUSTFLOAT(((fSlow7 * fTemp26) + (fSlow8 * fTemp27))); + double fTemp28 = double(input29[i]); + double fTemp29 = double(input31[i]); + output29[i] = FAUSTFLOAT(((fSlow1 * fTemp28) + (fSlow2 * fTemp29))); + output30[i] = FAUSTFLOAT(double(input30[i])); + output31[i] = FAUSTFLOAT(((fSlow4 * fTemp28) + (fSlow5 * fTemp29))); + output32[i] = FAUSTFLOAT(((fSlow10 * fTemp26) + (fSlow11 * fTemp27))); + output33[i] = FAUSTFLOAT(((fSlow16 * fTemp24) + (fSlow17 * fTemp25))); + output34[i] = FAUSTFLOAT(((fSlow22 * fTemp22) + (fSlow23 * fTemp23))); + output35[i] = FAUSTFLOAT(((fSlow28 * fTemp20) + (fSlow29 * fTemp21))); + double fTemp30 = double(input36[i]); + double fTemp31 = double(input48[i]); + output36[i] = FAUSTFLOAT(((fSlow31 * fTemp30) + (fSlow32 * fTemp31))); + double fTemp32 = double(input37[i]); + double fTemp33 = double(input47[i]); + output37[i] = FAUSTFLOAT(((fSlow25 * fTemp32) + (fSlow26 * fTemp33))); + double fTemp34 = double(input38[i]); + double fTemp35 = double(input46[i]); + output38[i] = FAUSTFLOAT(((fSlow19 * fTemp34) + (fSlow20 * fTemp35))); + double fTemp36 = double(input39[i]); + double fTemp37 = double(input45[i]); + output39[i] = FAUSTFLOAT(((fSlow13 * fTemp36) + (fSlow14 * fTemp37))); + double fTemp38 = double(input40[i]); + double fTemp39 = double(input44[i]); + output40[i] = FAUSTFLOAT(((fSlow7 * fTemp38) + (fSlow8 * fTemp39))); + double fTemp40 = double(input41[i]); + double fTemp41 = double(input43[i]); + output41[i] = FAUSTFLOAT(((fSlow1 * fTemp40) + (fSlow2 * fTemp41))); + output42[i] = FAUSTFLOAT(double(input42[i])); + output43[i] = FAUSTFLOAT(((fSlow4 * fTemp40) + (fSlow5 * fTemp41))); + output44[i] = FAUSTFLOAT(((fSlow10 * fTemp38) + (fSlow11 * fTemp39))); + output45[i] = FAUSTFLOAT(((fSlow16 * fTemp36) + (fSlow17 * fTemp37))); + output46[i] = FAUSTFLOAT(((fSlow22 * fTemp34) + (fSlow23 * fTemp35))); + output47[i] = FAUSTFLOAT(((fSlow28 * fTemp32) + (fSlow29 * fTemp33))); + output48[i] = FAUSTFLOAT(((fSlow34 * fTemp30) + (fSlow35 * fTemp31))); + double fTemp42 = double(input49[i]); + double fTemp43 = double(input63[i]); + output49[i] = FAUSTFLOAT(((fSlow37 * fTemp42) + (fSlow38 * fTemp43))); + double fTemp44 = double(input50[i]); + double fTemp45 = double(input62[i]); + output50[i] = FAUSTFLOAT(((fSlow31 * fTemp44) + (fSlow32 * fTemp45))); + double fTemp46 = double(input51[i]); + double fTemp47 = double(input61[i]); + output51[i] = FAUSTFLOAT(((fSlow25 * fTemp46) + (fSlow26 * fTemp47))); + double fTemp48 = double(input52[i]); + double fTemp49 = double(input60[i]); + output52[i] = FAUSTFLOAT(((fSlow19 * fTemp48) + (fSlow20 * fTemp49))); + double fTemp50 = double(input53[i]); + double fTemp51 = double(input59[i]); + output53[i] = FAUSTFLOAT(((fSlow13 * fTemp50) + (fSlow14 * fTemp51))); + double fTemp52 = double(input54[i]); + double fTemp53 = double(input58[i]); + output54[i] = FAUSTFLOAT(((fSlow7 * fTemp52) + (fSlow8 * fTemp53))); + double fTemp54 = double(input55[i]); + double fTemp55 = double(input57[i]); + output55[i] = FAUSTFLOAT(((fSlow1 * fTemp54) + (fSlow2 * fTemp55))); + output56[i] = FAUSTFLOAT(double(input56[i])); + output57[i] = FAUSTFLOAT(((fSlow4 * fTemp54) + (fSlow5 * fTemp55))); + output58[i] = FAUSTFLOAT(((fSlow10 * fTemp52) + (fSlow11 * fTemp53))); + output59[i] = FAUSTFLOAT(((fSlow16 * fTemp50) + (fSlow17 * fTemp51))); + output60[i] = FAUSTFLOAT(((fSlow22 * fTemp48) + (fSlow23 * fTemp49))); + output61[i] = FAUSTFLOAT(((fSlow28 * fTemp46) + (fSlow29 * fTemp47))); + output62[i] = FAUSTFLOAT(((fSlow34 * fTemp44) + (fSlow35 * fTemp45))); + output63[i] = FAUSTFLOAT(((fSlow40 * fTemp42) + (fSlow41 * fTemp43))); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAAzimuthRotator8.cpp b/source/HOAUGens/HOAAzimuthRotator8.cpp new file mode 100644 index 0000000000..5dd8a876b4 --- /dev/null +++ b/source/HOAUGens/HOAAzimuthRotator8.cpp @@ -0,0 +1,2092 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAAzimuthRotator8" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAAzimuthRotator8"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 81; + + } + virtual int getNumOutputs() { + return 81; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAAzimuthRotator8"); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0.0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2.0 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0.0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3.0 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0.0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4.0 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0.0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + double fSlow24 = (5.0 * fSlow0); + double fSlow25 = cos(fSlow24); + double fSlow26 = sin(fSlow24); + double fSlow27 = (0.0 - fSlow24); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + double fSlow30 = (6.0 * fSlow0); + double fSlow31 = cos(fSlow30); + double fSlow32 = sin(fSlow30); + double fSlow33 = (0.0 - fSlow30); + double fSlow34 = sin(fSlow33); + double fSlow35 = cos(fSlow33); + double fSlow36 = (7.0 * fSlow0); + double fSlow37 = cos(fSlow36); + double fSlow38 = sin(fSlow36); + double fSlow39 = (0.0 - fSlow36); + double fSlow40 = sin(fSlow39); + double fSlow41 = cos(fSlow39); + double fSlow42 = (8.0 * fSlow0); + double fSlow43 = cos(fSlow42); + double fSlow44 = sin(fSlow42); + double fSlow45 = (0.0 - fSlow42); + double fSlow46 = sin(fSlow45); + double fSlow47 = cos(fSlow45); + for (int i = 0; (i < count); i = (i + 1)) { + output0[i] = FAUSTFLOAT(double(input0[i])); + double fTemp0 = double(input1[i]); + double fTemp1 = double(input3[i]); + output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); + output2[i] = FAUSTFLOAT(double(input2[i])); + output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); + double fTemp2 = double(input4[i]); + double fTemp3 = double(input8[i]); + output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); + double fTemp4 = double(input5[i]); + double fTemp5 = double(input7[i]); + output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); + output6[i] = FAUSTFLOAT(double(input6[i])); + output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); + output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); + double fTemp6 = double(input9[i]); + double fTemp7 = double(input15[i]); + output9[i] = FAUSTFLOAT(((fSlow13 * fTemp6) + (fSlow14 * fTemp7))); + double fTemp8 = double(input10[i]); + double fTemp9 = double(input14[i]); + output10[i] = FAUSTFLOAT(((fSlow7 * fTemp8) + (fSlow8 * fTemp9))); + double fTemp10 = double(input11[i]); + double fTemp11 = double(input13[i]); + output11[i] = FAUSTFLOAT(((fSlow1 * fTemp10) + (fSlow2 * fTemp11))); + output12[i] = FAUSTFLOAT(double(input12[i])); + output13[i] = FAUSTFLOAT(((fSlow4 * fTemp10) + (fSlow5 * fTemp11))); + output14[i] = FAUSTFLOAT(((fSlow10 * fTemp8) + (fSlow11 * fTemp9))); + output15[i] = FAUSTFLOAT(((fSlow16 * fTemp6) + (fSlow17 * fTemp7))); + double fTemp12 = double(input16[i]); + double fTemp13 = double(input24[i]); + output16[i] = FAUSTFLOAT(((fSlow19 * fTemp12) + (fSlow20 * fTemp13))); + double fTemp14 = double(input17[i]); + double fTemp15 = double(input23[i]); + output17[i] = FAUSTFLOAT(((fSlow13 * fTemp14) + (fSlow14 * fTemp15))); + double fTemp16 = double(input18[i]); + double fTemp17 = double(input22[i]); + output18[i] = FAUSTFLOAT(((fSlow7 * fTemp16) + (fSlow8 * fTemp17))); + double fTemp18 = double(input19[i]); + double fTemp19 = double(input21[i]); + output19[i] = FAUSTFLOAT(((fSlow1 * fTemp18) + (fSlow2 * fTemp19))); + output20[i] = FAUSTFLOAT(double(input20[i])); + output21[i] = FAUSTFLOAT(((fSlow4 * fTemp18) + (fSlow5 * fTemp19))); + output22[i] = FAUSTFLOAT(((fSlow10 * fTemp16) + (fSlow11 * fTemp17))); + output23[i] = FAUSTFLOAT(((fSlow16 * fTemp14) + (fSlow17 * fTemp15))); + output24[i] = FAUSTFLOAT(((fSlow22 * fTemp12) + (fSlow23 * fTemp13))); + double fTemp20 = double(input25[i]); + double fTemp21 = double(input35[i]); + output25[i] = FAUSTFLOAT(((fSlow25 * fTemp20) + (fSlow26 * fTemp21))); + double fTemp22 = double(input26[i]); + double fTemp23 = double(input34[i]); + output26[i] = FAUSTFLOAT(((fSlow19 * fTemp22) + (fSlow20 * fTemp23))); + double fTemp24 = double(input27[i]); + double fTemp25 = double(input33[i]); + output27[i] = FAUSTFLOAT(((fSlow13 * fTemp24) + (fSlow14 * fTemp25))); + double fTemp26 = double(input28[i]); + double fTemp27 = double(input32[i]); + output28[i] = FAUSTFLOAT(((fSlow7 * fTemp26) + (fSlow8 * fTemp27))); + double fTemp28 = double(input29[i]); + double fTemp29 = double(input31[i]); + output29[i] = FAUSTFLOAT(((fSlow1 * fTemp28) + (fSlow2 * fTemp29))); + output30[i] = FAUSTFLOAT(double(input30[i])); + output31[i] = FAUSTFLOAT(((fSlow4 * fTemp28) + (fSlow5 * fTemp29))); + output32[i] = FAUSTFLOAT(((fSlow10 * fTemp26) + (fSlow11 * fTemp27))); + output33[i] = FAUSTFLOAT(((fSlow16 * fTemp24) + (fSlow17 * fTemp25))); + output34[i] = FAUSTFLOAT(((fSlow22 * fTemp22) + (fSlow23 * fTemp23))); + output35[i] = FAUSTFLOAT(((fSlow28 * fTemp20) + (fSlow29 * fTemp21))); + double fTemp30 = double(input36[i]); + double fTemp31 = double(input48[i]); + output36[i] = FAUSTFLOAT(((fSlow31 * fTemp30) + (fSlow32 * fTemp31))); + double fTemp32 = double(input37[i]); + double fTemp33 = double(input47[i]); + output37[i] = FAUSTFLOAT(((fSlow25 * fTemp32) + (fSlow26 * fTemp33))); + double fTemp34 = double(input38[i]); + double fTemp35 = double(input46[i]); + output38[i] = FAUSTFLOAT(((fSlow19 * fTemp34) + (fSlow20 * fTemp35))); + double fTemp36 = double(input39[i]); + double fTemp37 = double(input45[i]); + output39[i] = FAUSTFLOAT(((fSlow13 * fTemp36) + (fSlow14 * fTemp37))); + double fTemp38 = double(input40[i]); + double fTemp39 = double(input44[i]); + output40[i] = FAUSTFLOAT(((fSlow7 * fTemp38) + (fSlow8 * fTemp39))); + double fTemp40 = double(input41[i]); + double fTemp41 = double(input43[i]); + output41[i] = FAUSTFLOAT(((fSlow1 * fTemp40) + (fSlow2 * fTemp41))); + output42[i] = FAUSTFLOAT(double(input42[i])); + output43[i] = FAUSTFLOAT(((fSlow4 * fTemp40) + (fSlow5 * fTemp41))); + output44[i] = FAUSTFLOAT(((fSlow10 * fTemp38) + (fSlow11 * fTemp39))); + output45[i] = FAUSTFLOAT(((fSlow16 * fTemp36) + (fSlow17 * fTemp37))); + output46[i] = FAUSTFLOAT(((fSlow22 * fTemp34) + (fSlow23 * fTemp35))); + output47[i] = FAUSTFLOAT(((fSlow28 * fTemp32) + (fSlow29 * fTemp33))); + output48[i] = FAUSTFLOAT(((fSlow34 * fTemp30) + (fSlow35 * fTemp31))); + double fTemp42 = double(input49[i]); + double fTemp43 = double(input63[i]); + output49[i] = FAUSTFLOAT(((fSlow37 * fTemp42) + (fSlow38 * fTemp43))); + double fTemp44 = double(input50[i]); + double fTemp45 = double(input62[i]); + output50[i] = FAUSTFLOAT(((fSlow31 * fTemp44) + (fSlow32 * fTemp45))); + double fTemp46 = double(input51[i]); + double fTemp47 = double(input61[i]); + output51[i] = FAUSTFLOAT(((fSlow25 * fTemp46) + (fSlow26 * fTemp47))); + double fTemp48 = double(input52[i]); + double fTemp49 = double(input60[i]); + output52[i] = FAUSTFLOAT(((fSlow19 * fTemp48) + (fSlow20 * fTemp49))); + double fTemp50 = double(input53[i]); + double fTemp51 = double(input59[i]); + output53[i] = FAUSTFLOAT(((fSlow13 * fTemp50) + (fSlow14 * fTemp51))); + double fTemp52 = double(input54[i]); + double fTemp53 = double(input58[i]); + output54[i] = FAUSTFLOAT(((fSlow7 * fTemp52) + (fSlow8 * fTemp53))); + double fTemp54 = double(input55[i]); + double fTemp55 = double(input57[i]); + output55[i] = FAUSTFLOAT(((fSlow1 * fTemp54) + (fSlow2 * fTemp55))); + output56[i] = FAUSTFLOAT(double(input56[i])); + output57[i] = FAUSTFLOAT(((fSlow4 * fTemp54) + (fSlow5 * fTemp55))); + output58[i] = FAUSTFLOAT(((fSlow10 * fTemp52) + (fSlow11 * fTemp53))); + output59[i] = FAUSTFLOAT(((fSlow16 * fTemp50) + (fSlow17 * fTemp51))); + output60[i] = FAUSTFLOAT(((fSlow22 * fTemp48) + (fSlow23 * fTemp49))); + output61[i] = FAUSTFLOAT(((fSlow28 * fTemp46) + (fSlow29 * fTemp47))); + output62[i] = FAUSTFLOAT(((fSlow34 * fTemp44) + (fSlow35 * fTemp45))); + output63[i] = FAUSTFLOAT(((fSlow40 * fTemp42) + (fSlow41 * fTemp43))); + double fTemp56 = double(input64[i]); + double fTemp57 = double(input80[i]); + output64[i] = FAUSTFLOAT(((fSlow43 * fTemp56) + (fSlow44 * fTemp57))); + double fTemp58 = double(input65[i]); + double fTemp59 = double(input79[i]); + output65[i] = FAUSTFLOAT(((fSlow37 * fTemp58) + (fSlow38 * fTemp59))); + double fTemp60 = double(input66[i]); + double fTemp61 = double(input78[i]); + output66[i] = FAUSTFLOAT(((fSlow31 * fTemp60) + (fSlow32 * fTemp61))); + double fTemp62 = double(input67[i]); + double fTemp63 = double(input77[i]); + output67[i] = FAUSTFLOAT(((fSlow25 * fTemp62) + (fSlow26 * fTemp63))); + double fTemp64 = double(input68[i]); + double fTemp65 = double(input76[i]); + output68[i] = FAUSTFLOAT(((fSlow19 * fTemp64) + (fSlow20 * fTemp65))); + double fTemp66 = double(input69[i]); + double fTemp67 = double(input75[i]); + output69[i] = FAUSTFLOAT(((fSlow13 * fTemp66) + (fSlow14 * fTemp67))); + double fTemp68 = double(input70[i]); + double fTemp69 = double(input74[i]); + output70[i] = FAUSTFLOAT(((fSlow7 * fTemp68) + (fSlow8 * fTemp69))); + double fTemp70 = double(input71[i]); + double fTemp71 = double(input73[i]); + output71[i] = FAUSTFLOAT(((fSlow1 * fTemp70) + (fSlow2 * fTemp71))); + output72[i] = FAUSTFLOAT(double(input72[i])); + output73[i] = FAUSTFLOAT(((fSlow4 * fTemp70) + (fSlow5 * fTemp71))); + output74[i] = FAUSTFLOAT(((fSlow10 * fTemp68) + (fSlow11 * fTemp69))); + output75[i] = FAUSTFLOAT(((fSlow16 * fTemp66) + (fSlow17 * fTemp67))); + output76[i] = FAUSTFLOAT(((fSlow22 * fTemp64) + (fSlow23 * fTemp65))); + output77[i] = FAUSTFLOAT(((fSlow28 * fTemp62) + (fSlow29 * fTemp63))); + output78[i] = FAUSTFLOAT(((fSlow34 * fTemp60) + (fSlow35 * fTemp61))); + output79[i] = FAUSTFLOAT(((fSlow40 * fTemp58) + (fSlow41 * fTemp59))); + output80[i] = FAUSTFLOAT(((fSlow46 * fTemp56) + (fSlow47 * fTemp57))); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAAzimuthRotator9.cpp b/source/HOAUGens/HOAAzimuthRotator9.cpp new file mode 100644 index 0000000000..5a816616e6 --- /dev/null +++ b/source/HOAUGens/HOAAzimuthRotator9.cpp @@ -0,0 +1,2325 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAAzimuthRotator9" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fHslider0; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAAzimuthRotator9"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 100; + + } + virtual int getNumOutputs() { + return 100; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAAzimuthRotator9"); + ui_interface->declare(&fHslider0, "osc", "/azimuth 0 360"); + ui_interface->addHorizontalSlider("Azimuth", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* input81 = inputs[81]; + FAUSTFLOAT* input82 = inputs[82]; + FAUSTFLOAT* input83 = inputs[83]; + FAUSTFLOAT* input84 = inputs[84]; + FAUSTFLOAT* input85 = inputs[85]; + FAUSTFLOAT* input86 = inputs[86]; + FAUSTFLOAT* input87 = inputs[87]; + FAUSTFLOAT* input88 = inputs[88]; + FAUSTFLOAT* input89 = inputs[89]; + FAUSTFLOAT* input90 = inputs[90]; + FAUSTFLOAT* input91 = inputs[91]; + FAUSTFLOAT* input92 = inputs[92]; + FAUSTFLOAT* input93 = inputs[93]; + FAUSTFLOAT* input94 = inputs[94]; + FAUSTFLOAT* input95 = inputs[95]; + FAUSTFLOAT* input96 = inputs[96]; + FAUSTFLOAT* input97 = inputs[97]; + FAUSTFLOAT* input98 = inputs[98]; + FAUSTFLOAT* input99 = inputs[99]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + FAUSTFLOAT* output81 = outputs[81]; + FAUSTFLOAT* output82 = outputs[82]; + FAUSTFLOAT* output83 = outputs[83]; + FAUSTFLOAT* output84 = outputs[84]; + FAUSTFLOAT* output85 = outputs[85]; + FAUSTFLOAT* output86 = outputs[86]; + FAUSTFLOAT* output87 = outputs[87]; + FAUSTFLOAT* output88 = outputs[88]; + FAUSTFLOAT* output89 = outputs[89]; + FAUSTFLOAT* output90 = outputs[90]; + FAUSTFLOAT* output91 = outputs[91]; + FAUSTFLOAT* output92 = outputs[92]; + FAUSTFLOAT* output93 = outputs[93]; + FAUSTFLOAT* output94 = outputs[94]; + FAUSTFLOAT* output95 = outputs[95]; + FAUSTFLOAT* output96 = outputs[96]; + FAUSTFLOAT* output97 = outputs[97]; + FAUSTFLOAT* output98 = outputs[98]; + FAUSTFLOAT* output99 = outputs[99]; + double fSlow0 = double(fHslider0); + double fSlow1 = cos(fSlow0); + double fSlow2 = sin(fSlow0); + double fSlow3 = (0.0 - fSlow0); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (2.0 * fSlow0); + double fSlow7 = cos(fSlow6); + double fSlow8 = sin(fSlow6); + double fSlow9 = (0.0 - fSlow6); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (3.0 * fSlow0); + double fSlow13 = cos(fSlow12); + double fSlow14 = sin(fSlow12); + double fSlow15 = (0.0 - fSlow12); + double fSlow16 = sin(fSlow15); + double fSlow17 = cos(fSlow15); + double fSlow18 = (4.0 * fSlow0); + double fSlow19 = cos(fSlow18); + double fSlow20 = sin(fSlow18); + double fSlow21 = (0.0 - fSlow18); + double fSlow22 = sin(fSlow21); + double fSlow23 = cos(fSlow21); + double fSlow24 = (5.0 * fSlow0); + double fSlow25 = cos(fSlow24); + double fSlow26 = sin(fSlow24); + double fSlow27 = (0.0 - fSlow24); + double fSlow28 = sin(fSlow27); + double fSlow29 = cos(fSlow27); + double fSlow30 = (6.0 * fSlow0); + double fSlow31 = cos(fSlow30); + double fSlow32 = sin(fSlow30); + double fSlow33 = (0.0 - fSlow30); + double fSlow34 = sin(fSlow33); + double fSlow35 = cos(fSlow33); + double fSlow36 = (7.0 * fSlow0); + double fSlow37 = cos(fSlow36); + double fSlow38 = sin(fSlow36); + double fSlow39 = (0.0 - fSlow36); + double fSlow40 = sin(fSlow39); + double fSlow41 = cos(fSlow39); + double fSlow42 = (8.0 * fSlow0); + double fSlow43 = cos(fSlow42); + double fSlow44 = sin(fSlow42); + double fSlow45 = (0.0 - fSlow42); + double fSlow46 = sin(fSlow45); + double fSlow47 = cos(fSlow45); + double fSlow48 = (9.0 * fSlow0); + double fSlow49 = cos(fSlow48); + double fSlow50 = sin(fSlow48); + double fSlow51 = (0.0 - fSlow48); + double fSlow52 = sin(fSlow51); + double fSlow53 = cos(fSlow51); + for (int i = 0; (i < count); i = (i + 1)) { + output0[i] = FAUSTFLOAT(double(input0[i])); + double fTemp0 = double(input1[i]); + double fTemp1 = double(input3[i]); + output1[i] = FAUSTFLOAT(((fSlow1 * fTemp0) + (fSlow2 * fTemp1))); + output2[i] = FAUSTFLOAT(double(input2[i])); + output3[i] = FAUSTFLOAT(((fSlow4 * fTemp0) + (fSlow5 * fTemp1))); + double fTemp2 = double(input4[i]); + double fTemp3 = double(input8[i]); + output4[i] = FAUSTFLOAT(((fSlow7 * fTemp2) + (fSlow8 * fTemp3))); + double fTemp4 = double(input5[i]); + double fTemp5 = double(input7[i]); + output5[i] = FAUSTFLOAT(((fSlow1 * fTemp4) + (fSlow2 * fTemp5))); + output6[i] = FAUSTFLOAT(double(input6[i])); + output7[i] = FAUSTFLOAT(((fSlow4 * fTemp4) + (fSlow5 * fTemp5))); + output8[i] = FAUSTFLOAT(((fSlow10 * fTemp2) + (fSlow11 * fTemp3))); + double fTemp6 = double(input9[i]); + double fTemp7 = double(input15[i]); + output9[i] = FAUSTFLOAT(((fSlow13 * fTemp6) + (fSlow14 * fTemp7))); + double fTemp8 = double(input10[i]); + double fTemp9 = double(input14[i]); + output10[i] = FAUSTFLOAT(((fSlow7 * fTemp8) + (fSlow8 * fTemp9))); + double fTemp10 = double(input11[i]); + double fTemp11 = double(input13[i]); + output11[i] = FAUSTFLOAT(((fSlow1 * fTemp10) + (fSlow2 * fTemp11))); + output12[i] = FAUSTFLOAT(double(input12[i])); + output13[i] = FAUSTFLOAT(((fSlow4 * fTemp10) + (fSlow5 * fTemp11))); + output14[i] = FAUSTFLOAT(((fSlow10 * fTemp8) + (fSlow11 * fTemp9))); + output15[i] = FAUSTFLOAT(((fSlow16 * fTemp6) + (fSlow17 * fTemp7))); + double fTemp12 = double(input16[i]); + double fTemp13 = double(input24[i]); + output16[i] = FAUSTFLOAT(((fSlow19 * fTemp12) + (fSlow20 * fTemp13))); + double fTemp14 = double(input17[i]); + double fTemp15 = double(input23[i]); + output17[i] = FAUSTFLOAT(((fSlow13 * fTemp14) + (fSlow14 * fTemp15))); + double fTemp16 = double(input18[i]); + double fTemp17 = double(input22[i]); + output18[i] = FAUSTFLOAT(((fSlow7 * fTemp16) + (fSlow8 * fTemp17))); + double fTemp18 = double(input19[i]); + double fTemp19 = double(input21[i]); + output19[i] = FAUSTFLOAT(((fSlow1 * fTemp18) + (fSlow2 * fTemp19))); + output20[i] = FAUSTFLOAT(double(input20[i])); + output21[i] = FAUSTFLOAT(((fSlow4 * fTemp18) + (fSlow5 * fTemp19))); + output22[i] = FAUSTFLOAT(((fSlow10 * fTemp16) + (fSlow11 * fTemp17))); + output23[i] = FAUSTFLOAT(((fSlow16 * fTemp14) + (fSlow17 * fTemp15))); + output24[i] = FAUSTFLOAT(((fSlow22 * fTemp12) + (fSlow23 * fTemp13))); + double fTemp20 = double(input25[i]); + double fTemp21 = double(input35[i]); + output25[i] = FAUSTFLOAT(((fSlow25 * fTemp20) + (fSlow26 * fTemp21))); + double fTemp22 = double(input26[i]); + double fTemp23 = double(input34[i]); + output26[i] = FAUSTFLOAT(((fSlow19 * fTemp22) + (fSlow20 * fTemp23))); + double fTemp24 = double(input27[i]); + double fTemp25 = double(input33[i]); + output27[i] = FAUSTFLOAT(((fSlow13 * fTemp24) + (fSlow14 * fTemp25))); + double fTemp26 = double(input28[i]); + double fTemp27 = double(input32[i]); + output28[i] = FAUSTFLOAT(((fSlow7 * fTemp26) + (fSlow8 * fTemp27))); + double fTemp28 = double(input29[i]); + double fTemp29 = double(input31[i]); + output29[i] = FAUSTFLOAT(((fSlow1 * fTemp28) + (fSlow2 * fTemp29))); + output30[i] = FAUSTFLOAT(double(input30[i])); + output31[i] = FAUSTFLOAT(((fSlow4 * fTemp28) + (fSlow5 * fTemp29))); + output32[i] = FAUSTFLOAT(((fSlow10 * fTemp26) + (fSlow11 * fTemp27))); + output33[i] = FAUSTFLOAT(((fSlow16 * fTemp24) + (fSlow17 * fTemp25))); + output34[i] = FAUSTFLOAT(((fSlow22 * fTemp22) + (fSlow23 * fTemp23))); + output35[i] = FAUSTFLOAT(((fSlow28 * fTemp20) + (fSlow29 * fTemp21))); + double fTemp30 = double(input36[i]); + double fTemp31 = double(input48[i]); + output36[i] = FAUSTFLOAT(((fSlow31 * fTemp30) + (fSlow32 * fTemp31))); + double fTemp32 = double(input37[i]); + double fTemp33 = double(input47[i]); + output37[i] = FAUSTFLOAT(((fSlow25 * fTemp32) + (fSlow26 * fTemp33))); + double fTemp34 = double(input38[i]); + double fTemp35 = double(input46[i]); + output38[i] = FAUSTFLOAT(((fSlow19 * fTemp34) + (fSlow20 * fTemp35))); + double fTemp36 = double(input39[i]); + double fTemp37 = double(input45[i]); + output39[i] = FAUSTFLOAT(((fSlow13 * fTemp36) + (fSlow14 * fTemp37))); + double fTemp38 = double(input40[i]); + double fTemp39 = double(input44[i]); + output40[i] = FAUSTFLOAT(((fSlow7 * fTemp38) + (fSlow8 * fTemp39))); + double fTemp40 = double(input41[i]); + double fTemp41 = double(input43[i]); + output41[i] = FAUSTFLOAT(((fSlow1 * fTemp40) + (fSlow2 * fTemp41))); + output42[i] = FAUSTFLOAT(double(input42[i])); + output43[i] = FAUSTFLOAT(((fSlow4 * fTemp40) + (fSlow5 * fTemp41))); + output44[i] = FAUSTFLOAT(((fSlow10 * fTemp38) + (fSlow11 * fTemp39))); + output45[i] = FAUSTFLOAT(((fSlow16 * fTemp36) + (fSlow17 * fTemp37))); + output46[i] = FAUSTFLOAT(((fSlow22 * fTemp34) + (fSlow23 * fTemp35))); + output47[i] = FAUSTFLOAT(((fSlow28 * fTemp32) + (fSlow29 * fTemp33))); + output48[i] = FAUSTFLOAT(((fSlow34 * fTemp30) + (fSlow35 * fTemp31))); + double fTemp42 = double(input49[i]); + double fTemp43 = double(input63[i]); + output49[i] = FAUSTFLOAT(((fSlow37 * fTemp42) + (fSlow38 * fTemp43))); + double fTemp44 = double(input50[i]); + double fTemp45 = double(input62[i]); + output50[i] = FAUSTFLOAT(((fSlow31 * fTemp44) + (fSlow32 * fTemp45))); + double fTemp46 = double(input51[i]); + double fTemp47 = double(input61[i]); + output51[i] = FAUSTFLOAT(((fSlow25 * fTemp46) + (fSlow26 * fTemp47))); + double fTemp48 = double(input52[i]); + double fTemp49 = double(input60[i]); + output52[i] = FAUSTFLOAT(((fSlow19 * fTemp48) + (fSlow20 * fTemp49))); + double fTemp50 = double(input53[i]); + double fTemp51 = double(input59[i]); + output53[i] = FAUSTFLOAT(((fSlow13 * fTemp50) + (fSlow14 * fTemp51))); + double fTemp52 = double(input54[i]); + double fTemp53 = double(input58[i]); + output54[i] = FAUSTFLOAT(((fSlow7 * fTemp52) + (fSlow8 * fTemp53))); + double fTemp54 = double(input55[i]); + double fTemp55 = double(input57[i]); + output55[i] = FAUSTFLOAT(((fSlow1 * fTemp54) + (fSlow2 * fTemp55))); + output56[i] = FAUSTFLOAT(double(input56[i])); + output57[i] = FAUSTFLOAT(((fSlow4 * fTemp54) + (fSlow5 * fTemp55))); + output58[i] = FAUSTFLOAT(((fSlow10 * fTemp52) + (fSlow11 * fTemp53))); + output59[i] = FAUSTFLOAT(((fSlow16 * fTemp50) + (fSlow17 * fTemp51))); + output60[i] = FAUSTFLOAT(((fSlow22 * fTemp48) + (fSlow23 * fTemp49))); + output61[i] = FAUSTFLOAT(((fSlow28 * fTemp46) + (fSlow29 * fTemp47))); + output62[i] = FAUSTFLOAT(((fSlow34 * fTemp44) + (fSlow35 * fTemp45))); + output63[i] = FAUSTFLOAT(((fSlow40 * fTemp42) + (fSlow41 * fTemp43))); + double fTemp56 = double(input64[i]); + double fTemp57 = double(input80[i]); + output64[i] = FAUSTFLOAT(((fSlow43 * fTemp56) + (fSlow44 * fTemp57))); + double fTemp58 = double(input65[i]); + double fTemp59 = double(input79[i]); + output65[i] = FAUSTFLOAT(((fSlow37 * fTemp58) + (fSlow38 * fTemp59))); + double fTemp60 = double(input66[i]); + double fTemp61 = double(input78[i]); + output66[i] = FAUSTFLOAT(((fSlow31 * fTemp60) + (fSlow32 * fTemp61))); + double fTemp62 = double(input67[i]); + double fTemp63 = double(input77[i]); + output67[i] = FAUSTFLOAT(((fSlow25 * fTemp62) + (fSlow26 * fTemp63))); + double fTemp64 = double(input68[i]); + double fTemp65 = double(input76[i]); + output68[i] = FAUSTFLOAT(((fSlow19 * fTemp64) + (fSlow20 * fTemp65))); + double fTemp66 = double(input69[i]); + double fTemp67 = double(input75[i]); + output69[i] = FAUSTFLOAT(((fSlow13 * fTemp66) + (fSlow14 * fTemp67))); + double fTemp68 = double(input70[i]); + double fTemp69 = double(input74[i]); + output70[i] = FAUSTFLOAT(((fSlow7 * fTemp68) + (fSlow8 * fTemp69))); + double fTemp70 = double(input71[i]); + double fTemp71 = double(input73[i]); + output71[i] = FAUSTFLOAT(((fSlow1 * fTemp70) + (fSlow2 * fTemp71))); + output72[i] = FAUSTFLOAT(double(input72[i])); + output73[i] = FAUSTFLOAT(((fSlow4 * fTemp70) + (fSlow5 * fTemp71))); + output74[i] = FAUSTFLOAT(((fSlow10 * fTemp68) + (fSlow11 * fTemp69))); + output75[i] = FAUSTFLOAT(((fSlow16 * fTemp66) + (fSlow17 * fTemp67))); + output76[i] = FAUSTFLOAT(((fSlow22 * fTemp64) + (fSlow23 * fTemp65))); + output77[i] = FAUSTFLOAT(((fSlow28 * fTemp62) + (fSlow29 * fTemp63))); + output78[i] = FAUSTFLOAT(((fSlow34 * fTemp60) + (fSlow35 * fTemp61))); + output79[i] = FAUSTFLOAT(((fSlow40 * fTemp58) + (fSlow41 * fTemp59))); + output80[i] = FAUSTFLOAT(((fSlow46 * fTemp56) + (fSlow47 * fTemp57))); + double fTemp72 = double(input81[i]); + double fTemp73 = double(input99[i]); + output81[i] = FAUSTFLOAT(((fSlow49 * fTemp72) + (fSlow50 * fTemp73))); + double fTemp74 = double(input82[i]); + double fTemp75 = double(input98[i]); + output82[i] = FAUSTFLOAT(((fSlow43 * fTemp74) + (fSlow44 * fTemp75))); + double fTemp76 = double(input83[i]); + double fTemp77 = double(input97[i]); + output83[i] = FAUSTFLOAT(((fSlow37 * fTemp76) + (fSlow38 * fTemp77))); + double fTemp78 = double(input84[i]); + double fTemp79 = double(input96[i]); + output84[i] = FAUSTFLOAT(((fSlow31 * fTemp78) + (fSlow32 * fTemp79))); + double fTemp80 = double(input85[i]); + double fTemp81 = double(input95[i]); + output85[i] = FAUSTFLOAT(((fSlow25 * fTemp80) + (fSlow26 * fTemp81))); + double fTemp82 = double(input86[i]); + double fTemp83 = double(input94[i]); + output86[i] = FAUSTFLOAT(((fSlow19 * fTemp82) + (fSlow20 * fTemp83))); + double fTemp84 = double(input87[i]); + double fTemp85 = double(input93[i]); + output87[i] = FAUSTFLOAT(((fSlow13 * fTemp84) + (fSlow14 * fTemp85))); + double fTemp86 = double(input88[i]); + double fTemp87 = double(input92[i]); + output88[i] = FAUSTFLOAT(((fSlow7 * fTemp86) + (fSlow8 * fTemp87))); + double fTemp88 = double(input89[i]); + double fTemp89 = double(input91[i]); + output89[i] = FAUSTFLOAT(((fSlow1 * fTemp88) + (fSlow2 * fTemp89))); + output90[i] = FAUSTFLOAT(double(input90[i])); + output91[i] = FAUSTFLOAT(((fSlow4 * fTemp88) + (fSlow5 * fTemp89))); + output92[i] = FAUSTFLOAT(((fSlow10 * fTemp86) + (fSlow11 * fTemp87))); + output93[i] = FAUSTFLOAT(((fSlow16 * fTemp84) + (fSlow17 * fTemp85))); + output94[i] = FAUSTFLOAT(((fSlow22 * fTemp82) + (fSlow23 * fTemp83))); + output95[i] = FAUSTFLOAT(((fSlow28 * fTemp80) + (fSlow29 * fTemp81))); + output96[i] = FAUSTFLOAT(((fSlow34 * fTemp78) + (fSlow35 * fTemp79))); + output97[i] = FAUSTFLOAT(((fSlow40 * fTemp76) + (fSlow41 * fTemp77))); + output98[i] = FAUSTFLOAT(((fSlow46 * fTemp74) + (fSlow47 * fTemp75))); + output99[i] = FAUSTFLOAT(((fSlow52 * fTemp72) + (fSlow53 * fTemp73))); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2HOA10.cpp b/source/HOAUGens/HOABeamDirac2HOA10.cpp new file mode 100644 index 0000000000..75a92ba532 --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2HOA10.cpp @@ -0,0 +1,3525 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA10" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/* link with : "" */ +#include +#include + +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} +double mydsp_faustpower4_f(double value) { + return (((value * value) * value) * value); + +} +double mydsp_faustpower5_f(double value) { + return ((((value * value) * value) * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fConst119; + double fConst120; + double fConst121; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fConst136; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fConst157; + double fConst158; + double fConst159; + double fConst160; + double fConst161; + double fConst162; + double fConst163; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; + double fConst176; + double fConst177; + double fConst178; + double fConst179; + double fConst180; + double fConst181; + double fConst182; + double fConst183; + double fConst184; + double fConst185; + double fConst186; + double fConst187; + double fConst188; + double fConst189; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + double fConst196; + double fConst197; + double fConst198; + double fConst199; + double fConst200; + double fConst201; + double fConst202; + double fConst203; + double fConst204; + double fConst205; + double fConst206; + double fConst207; + double fConst208; + double fConst209; + double fConst210; + double fConst211; + double fConst212; + double fConst213; + double fConst214; + double fConst215; + double fConst216; + double fConst217; + double fConst218; + double fConst219; + double fConst220; + double fConst221; + double fConst222; + double fConst223; + double fConst224; + double fConst225; + double fConst226; + double fConst227; + double fConst228; + double fConst229; + double fConst230; + double fConst231; + double fConst232; + double fConst233; + double fConst234; + double fConst235; + double fConst236; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOABeamDirac2HOA10"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 121; + + } + virtual int getNumOutputs() { + return 121; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + case 100: { + rate = 1; + break; + } + case 101: { + rate = 1; + break; + } + case 102: { + rate = 1; + break; + } + case 103: { + rate = 1; + break; + } + case 104: { + rate = 1; + break; + } + case 105: { + rate = 1; + break; + } + case 106: { + rate = 1; + break; + } + case 107: { + rate = 1; + break; + } + case 108: { + rate = 1; + break; + } + case 109: { + rate = 1; + break; + } + case 110: { + rate = 1; + break; + } + case 111: { + rate = 1; + break; + } + case 112: { + rate = 1; + break; + } + case 113: { + rate = 1; + break; + } + case 114: { + rate = 1; + break; + } + case 115: { + rate = 1; + break; + } + case 116: { + rate = 1; + break; + } + case 117: { + rate = 1; + break; + } + case 118: { + rate = 1; + break; + } + case 119: { + rate = 1; + break; + } + case 120: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + case 100: { + rate = 1; + break; + } + case 101: { + rate = 1; + break; + } + case 102: { + rate = 1; + break; + } + case 103: { + rate = 1; + break; + } + case 104: { + rate = 1; + break; + } + case 105: { + rate = 1; + break; + } + case 106: { + rate = 1; + break; + } + case 107: { + rate = 1; + break; + } + case 108: { + rate = 1; + break; + } + case 109: { + rate = 1; + break; + } + case 110: { + rate = 1; + break; + } + case 111: { + rate = 1; + break; + } + case 112: { + rate = 1; + break; + } + case 113: { + rate = 1; + break; + } + case 114: { + rate = 1; + break; + } + case 115: { + rate = 1; + break; + } + case 116: { + rate = 1; + break; + } + case 117: { + rate = 1; + break; + } + case 118: { + rate = 1; + break; + } + case 119: { + rate = 1; + break; + } + case 120: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); + fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(2.5)); + fConst3 = double(tgamma(1.0)); + fConst4 = double(tgamma(5.0)); + fConst5 = sqrt((5.0 * (fConst3 / fConst4))); + fConst6 = double(tgamma(2.0)); + fConst7 = double(tgamma(6.0)); + fConst8 = sqrt((7.0 * (fConst6 / fConst7))); + fConst9 = (31.915382432114615 * fConst8); + fConst10 = (15.957691216057308 * fConst8); + fConst11 = double(tgamma(9.0)); + fConst12 = double(tgamma(4.5)); + fConst13 = (sqrt((9.0 * (fConst3 / fConst11))) * fConst12); + fConst14 = (25.532305945691693 * fConst13); + fConst15 = double(tgamma(3.0)); + fConst16 = double(tgamma(7.0)); + fConst17 = (sqrt((9.0 * (fConst15 / fConst16))) * fConst2); + fConst18 = (1.4142135623730951 * fConst17); + fConst19 = (0.70710678118654757 * fConst17); + fConst20 = (12.766152972845846 * fConst13); + fConst21 = double(tgamma(4.0)); + fConst22 = double(tgamma(8.0)); + fConst23 = (sqrt((11.0 * (fConst21 / fConst22))) * fConst2); + fConst24 = (0.94280904158206336 * fConst23); + fConst25 = (0.47140452079103168 * fConst23); + fConst26 = double(tgamma(13.0)); + fConst27 = double(tgamma(6.5)); + fConst28 = (sqrt((13.0 * (fConst3 / fConst26))) * fConst27); + fConst29 = (51.064611891383386 * fConst28); + fConst30 = double(tgamma(11.0)); + fConst31 = (sqrt((13.0 * (fConst15 / fConst30))) * fConst12); + fConst32 = (1.4142135623730951 * fConst31); + fConst33 = (sqrt((13.0 * (fConst4 / fConst11))) * fConst2); + fConst34 = (0.70710678118654757 * fConst33); + fConst35 = (0.35355339059327379 * fConst33); + fConst36 = (0.70710678118654757 * fConst31); + fConst37 = double(tgamma(12.0)); + fConst38 = (sqrt((15.0 * (fConst21 / fConst37))) * fConst12); + fConst39 = (0.94280904158206336 * fConst38); + fConst40 = double(tgamma(10.0)); + fConst41 = (sqrt((15.0 * (fConst7 / fConst40))) * fConst2); + fConst42 = (0.28284271247461906 * fConst41); + fConst43 = double(tgamma(14.0)); + fConst44 = (sqrt((15.0 * (fConst6 / fConst43))) * fConst27); + fConst45 = (663.83995458798404 * fConst44); + fConst46 = double(tgamma(15.0)); + fConst47 = (sqrt((17.0 * (fConst15 / fConst46))) * fConst27); + fConst48 = (0.70710678118654757 * fConst47); + fConst49 = (sqrt((17.0 * (fConst16 / fConst30))) * fConst2); + fConst50 = (0.47140452079103168 * fConst49); + fConst51 = (0.23570226039551584 * fConst49); + fConst52 = (sqrt((17.0 * (fConst4 / fConst26))) * fConst12); + fConst53 = (0.35355339059327379 * fConst52); + fConst54 = double(tgamma(17.0)); + fConst55 = double(tgamma(8.5)); + fConst56 = (sqrt((17.0 * (fConst3 / fConst54))) * fConst55); + fConst57 = (204.25844756553354 * fConst56); + fConst58 = double(tgamma(16.0)); + fConst59 = (sqrt((19.0 * (fConst21 / fConst58))) * fConst27); + fConst60 = (0.47140452079103168 * fConst59); + fConst61 = (sqrt((19.0 * (fConst22 / fConst37))) * fConst2); + fConst62 = (0.20203050891044216 * fConst61); + fConst63 = double(tgamma(19.0)); + fConst64 = (sqrt((21.0 * (fConst15 / fConst63))) * fConst55); + fConst65 = (1.4142135623730951 * fConst64); + fConst66 = (sqrt((21.0 * (fConst16 / fConst46))) * fConst12); + fConst67 = (0.47140452079103168 * fConst66); + fConst68 = (sqrt((21.0 * (fConst11 / fConst26))) * fConst2); + fConst69 = (0.17677669529663689 * fConst68); + fConst70 = (0.23570226039551584 * fConst66); + fConst71 = (sqrt((21.0 * (fConst4 / fConst54))) * fConst27); + fConst72 = (0.35355339059327379 * fConst71); + fConst73 = (0.70710678118654757 * fConst64); + fConst74 = (sqrt((21.0 * (fConst3 / double(tgamma(21.0))))) * double(tgamma(10.5))); + fConst75 = (817.03379026213418 * fConst74); + fConst76 = double(tgamma(5.5)); + fConst77 = sqrt((11.0 * (fConst3 / fConst30))); + fConst78 = (25.532305945691693 * fConst77); + fConst79 = sqrt((13.0 * (fConst6 / fConst37))); + fConst80 = (280.85536540260864 * fConst79); + fConst81 = sqrt((15.0 * (fConst15 / fConst26))); + fConst82 = (0.70710678118654757 * fConst81); + fConst83 = sqrt((17.0 * (fConst21 / fConst43))); + fConst84 = (0.47140452079103168 * fConst83); + fConst85 = sqrt((19.0 * (fConst4 / fConst46))); + fConst86 = (0.35355339059327379 * fConst85); + fConst87 = sqrt((21.0 * (fConst7 / fConst58))); + fConst88 = (0.28284271247461906 * fConst87); + fConst89 = double(tgamma(3.5)); + fConst90 = sqrt((7.0 * (fConst3 / fConst16))); + fConst91 = (6.3830764864229232 * fConst90); + fConst92 = sqrt((9.0 * (fConst6 / fConst22))); + fConst93 = (44.681535404960464 * fConst92); + fConst94 = sqrt((11.0 * (fConst15 / fConst11))); + fConst95 = (0.70710678118654757 * fConst94); + fConst96 = sqrt((13.0 * (fConst21 / fConst40))); + fConst97 = (0.47140452079103168 * fConst96); + fConst98 = sqrt((15.0 * (fConst4 / fConst30))); + fConst99 = (0.35355339059327379 * fConst98); + fConst100 = sqrt((17.0 * (fConst7 / fConst37))); + fConst101 = (0.28284271247461906 * fConst100); + fConst102 = sqrt((19.0 * (fConst16 / fConst26))); + fConst103 = (0.23570226039551584 * fConst102); + fConst104 = sqrt((21.0 * (fConst22 / fConst43))); + fConst105 = (0.20203050891044216 * fConst104); + fConst106 = double(tgamma(1.5)); + fConst107 = sqrt((3.0 * (fConst3 / fConst15))); + fConst108 = (1.5957691216057308 * fConst107); + fConst109 = sqrt((5.0 * (fConst6 / fConst21))); + fConst110 = (4.7873073648171927 * fConst109); + fConst111 = sqrt((7.0 * (fConst15 / fConst4))); + fConst112 = (0.70710678118654757 * fConst111); + fConst113 = sqrt((9.0 * (fConst21 / fConst7))); + fConst114 = (0.47140452079103168 * fConst113); + fConst115 = sqrt((11.0 * (fConst4 / fConst16))); + fConst116 = (0.35355339059327379 * fConst115); + fConst117 = sqrt((13.0 * (fConst7 / fConst22))); + fConst118 = (0.28284271247461906 * fConst117); + fConst119 = sqrt((15.0 * (fConst16 / fConst11))); + fConst120 = (0.23570226039551584 * fConst119); + fConst121 = sqrt((17.0 * (fConst22 / fConst40))); + fConst122 = (0.20203050891044216 * fConst121); + fConst123 = sqrt((19.0 * (fConst11 / fConst30))); + fConst124 = (0.17677669529663689 * fConst123); + fConst125 = sqrt((21.0 * (fConst40 / fConst37))); + fConst126 = (0.15713484026367722 * fConst125); + fConst127 = sqrt((15.0 * (fConst3 / fConst46))); + fConst128 = double(tgamma(7.5)); + fConst129 = (fConst127 * fConst128); + fConst130 = (102.12922378276677 * fConst129); + fConst131 = (0.56568542494923812 * fConst41); + fConst132 = (408.51689513106709 * fConst56); + fConst133 = (0.70710678118654757 * fConst52); + fConst134 = sqrt((19.0 * (fConst3 / fConst63))); + fConst135 = double(tgamma(9.5)); + fConst136 = (fConst134 * fConst135); + fConst137 = (408.51689513106709 * fConst136); + fConst138 = (sqrt((19.0 * (fConst7 / fConst43))) * fConst12); + fConst139 = (0.56568542494923812 * fConst138); + fConst140 = (0.35355339059327379 * fConst68); + fConst141 = (sqrt((11.0 * (fConst6 / fConst40))) * fConst12); + fConst142 = (229.79075351122526 * fConst141); + fConst143 = (114.89537675561263 * fConst141); + fConst144 = (0.47140452079103168 * fConst38); + fConst145 = double(tgamma(18.0)); + fConst146 = (sqrt((19.0 * (fConst6 / fConst145))) * fConst55); + fConst147 = (6944.7872172281404 * fConst146); + fConst148 = (0.40406101782088433 * fConst61); + fConst149 = (0.28284271247461906 * fConst138); + fConst150 = (3472.3936086140702 * fConst146); + fConst151 = (102.12922378276677 * fConst127); + fConst152 = sqrt((17.0 * (fConst6 / fConst58))); + fConst153 = (1531.9383567415016 * fConst152); + fConst154 = sqrt((19.0 * (fConst15 / fConst54))); + fConst155 = (0.70710678118654757 * fConst154); + fConst156 = sqrt((21.0 * (fConst21 / fConst145))); + fConst157 = (0.47140452079103168 * fConst156); + fConst158 = (408.51689513106709 * fConst134); + fConst159 = sqrt((21.0 * (fConst6 / double(tgamma(20.0))))); + fConst160 = (7761.8210074902745 * fConst159); + fConst161 = (0.12698727186848197 * (fConst107 * fConst106)); + fConst162 = (fConst5 * fConst2); + fConst163 = (0.50794908747392786 * fConst162); + fConst164 = (0.3809618156054459 * (fConst109 * fConst106)); + fConst165 = (0.25397454373696393 * fConst162); + fConst166 = (0.50794908747392786 * (fConst90 * fConst89)); + fConst167 = (fConst8 * fConst2); + fConst168 = (2.5397454373696391 * fConst167); + fConst169 = (0.056269769759819135 * (fConst111 * fConst106)); + fConst170 = (1.2698727186848195 * fConst167); + fConst171 = (2.0317963498957115 * fConst13); + fConst172 = (3.5556436123174948 * (fConst92 * fConst89)); + fConst173 = (0.11253953951963827 * fConst17); + fConst174 = (0.037513179839879424 * (fConst113 * fConst106)); + fConst175 = (0.056269769759819135 * fConst17); + fConst176 = (1.0158981749478557 * fConst13); + fConst177 = (2.0317963498957115 * (fConst77 * fConst76)); + fConst178 = (18.286167149061402 * fConst141); + fConst179 = (0.056269769759819135 * (fConst94 * fConst89)); + fConst180 = (0.075026359679758847 * fConst23); + fConst181 = (0.028134884879909568 * (fConst115 * fConst106)); + fConst182 = (0.037513179839879424 * fConst23); + fConst183 = (9.1430835745307011 * fConst141); + fConst184 = (4.0635926997914229 * fConst28); + fConst185 = (22.349759848852827 * (fConst79 * fConst76)); + fConst186 = (0.11253953951963827 * fConst31); + fConst187 = (0.037513179839879424 * (fConst96 * fConst89)); + fConst188 = (0.056269769759819135 * fConst33); + fConst189 = (0.022507907903927659 * (fConst117 * fConst106)); + fConst190 = (0.028134884879909568 * fConst33); + fConst191 = (0.056269769759819135 * fConst31); + fConst192 = (8.1271853995828458 * fConst129); + fConst193 = (52.826705097288496 * fConst44); + fConst194 = (0.056269769759819135 * (fConst81 * fConst76)); + fConst195 = (0.075026359679758847 * fConst38); + fConst196 = (0.028134884879909568 * (fConst98 * fConst89)); + fConst197 = (0.045015815807855318 * fConst41); + fConst198 = (0.018756589919939712 * (fConst119 * fConst106)); + fConst199 = (0.022507907903927659 * fConst41); + fConst200 = (0.037513179839879424 * fConst38); + fConst201 = (32.508741598331383 * fConst56); + fConst202 = (121.90778099374268 * (fConst152 * fConst128)); + fConst203 = (0.056269769759819135 * fConst47); + fConst204 = (0.037513179839879424 * (fConst83 * fConst76)); + fConst205 = (0.056269769759819135 * fConst52); + fConst206 = (0.022507907903927659 * (fConst100 * fConst89)); + fConst207 = (0.037513179839879424 * fConst49); + fConst208 = (0.016077077074234038 * (fConst121 * fConst106)); + fConst209 = (0.018756589919939712 * fConst49); + fConst210 = (0.028134884879909568 * fConst52); + fConst211 = (16.254370799165692 * fConst56); + fConst212 = (32.508741598331383 * fConst136); + fConst213 = (552.64860717163344 * fConst146); + fConst214 = (0.056269769759819135 * (fConst154 * fConst128)); + fConst215 = (0.037513179839879424 * fConst59); + fConst216 = (0.028134884879909568 * (fConst85 * fConst76)); + fConst217 = (0.045015815807855318 * fConst138); + fConst218 = (0.018756589919939712 * (fConst102 * fConst89)); + fConst219 = (0.032154154148468075 * fConst61); + fConst220 = (0.014067442439954784 * (fConst123 * fConst106)); + fConst221 = (0.016077077074234038 * fConst61); + fConst222 = (0.022507907903927659 * fConst138); + fConst223 = (276.32430358581672 * fConst146); + fConst224 = (65.017483196662766 * fConst74); + fConst225 = (617.66609036829618 * (fConst159 * fConst135)); + fConst226 = (0.11253953951963827 * fConst64); + fConst227 = (0.037513179839879424 * (fConst156 * fConst128)); + fConst228 = (0.028134884879909568 * fConst71); + fConst229 = (0.022507907903927659 * (fConst87 * fConst76)); + fConst230 = (0.037513179839879424 * fConst66); + fConst231 = (0.016077077074234038 * (fConst104 * fConst89)); + fConst232 = (0.028134884879909568 * fConst68); + fConst233 = (0.012504393279959806 * (fConst125 * fConst106)); + fConst234 = (0.014067442439954784 * fConst68); + fConst235 = (0.018756589919939712 * fConst66); + fConst236 = (0.056269769759819135 * fConst64); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* input81 = inputs[81]; + FAUSTFLOAT* input82 = inputs[82]; + FAUSTFLOAT* input83 = inputs[83]; + FAUSTFLOAT* input84 = inputs[84]; + FAUSTFLOAT* input85 = inputs[85]; + FAUSTFLOAT* input86 = inputs[86]; + FAUSTFLOAT* input87 = inputs[87]; + FAUSTFLOAT* input88 = inputs[88]; + FAUSTFLOAT* input89 = inputs[89]; + FAUSTFLOAT* input90 = inputs[90]; + FAUSTFLOAT* input91 = inputs[91]; + FAUSTFLOAT* input92 = inputs[92]; + FAUSTFLOAT* input93 = inputs[93]; + FAUSTFLOAT* input94 = inputs[94]; + FAUSTFLOAT* input95 = inputs[95]; + FAUSTFLOAT* input96 = inputs[96]; + FAUSTFLOAT* input97 = inputs[97]; + FAUSTFLOAT* input98 = inputs[98]; + FAUSTFLOAT* input99 = inputs[99]; + FAUSTFLOAT* input100 = inputs[100]; + FAUSTFLOAT* input101 = inputs[101]; + FAUSTFLOAT* input102 = inputs[102]; + FAUSTFLOAT* input103 = inputs[103]; + FAUSTFLOAT* input104 = inputs[104]; + FAUSTFLOAT* input105 = inputs[105]; + FAUSTFLOAT* input106 = inputs[106]; + FAUSTFLOAT* input107 = inputs[107]; + FAUSTFLOAT* input108 = inputs[108]; + FAUSTFLOAT* input109 = inputs[109]; + FAUSTFLOAT* input110 = inputs[110]; + FAUSTFLOAT* input111 = inputs[111]; + FAUSTFLOAT* input112 = inputs[112]; + FAUSTFLOAT* input113 = inputs[113]; + FAUSTFLOAT* input114 = inputs[114]; + FAUSTFLOAT* input115 = inputs[115]; + FAUSTFLOAT* input116 = inputs[116]; + FAUSTFLOAT* input117 = inputs[117]; + FAUSTFLOAT* input118 = inputs[118]; + FAUSTFLOAT* input119 = inputs[119]; + FAUSTFLOAT* input120 = inputs[120]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + FAUSTFLOAT* output81 = outputs[81]; + FAUSTFLOAT* output82 = outputs[82]; + FAUSTFLOAT* output83 = outputs[83]; + FAUSTFLOAT* output84 = outputs[84]; + FAUSTFLOAT* output85 = outputs[85]; + FAUSTFLOAT* output86 = outputs[86]; + FAUSTFLOAT* output87 = outputs[87]; + FAUSTFLOAT* output88 = outputs[88]; + FAUSTFLOAT* output89 = outputs[89]; + FAUSTFLOAT* output90 = outputs[90]; + FAUSTFLOAT* output91 = outputs[91]; + FAUSTFLOAT* output92 = outputs[92]; + FAUSTFLOAT* output93 = outputs[93]; + FAUSTFLOAT* output94 = outputs[94]; + FAUSTFLOAT* output95 = outputs[95]; + FAUSTFLOAT* output96 = outputs[96]; + FAUSTFLOAT* output97 = outputs[97]; + FAUSTFLOAT* output98 = outputs[98]; + FAUSTFLOAT* output99 = outputs[99]; + FAUSTFLOAT* output100 = outputs[100]; + FAUSTFLOAT* output101 = outputs[101]; + FAUSTFLOAT* output102 = outputs[102]; + FAUSTFLOAT* output103 = outputs[103]; + FAUSTFLOAT* output104 = outputs[104]; + FAUSTFLOAT* output105 = outputs[105]; + FAUSTFLOAT* output106 = outputs[106]; + FAUSTFLOAT* output107 = outputs[107]; + FAUSTFLOAT* output108 = outputs[108]; + FAUSTFLOAT* output109 = outputs[109]; + FAUSTFLOAT* output110 = outputs[110]; + FAUSTFLOAT* output111 = outputs[111]; + FAUSTFLOAT* output112 = outputs[112]; + FAUSTFLOAT* output113 = outputs[113]; + FAUSTFLOAT* output114 = outputs[114]; + FAUSTFLOAT* output115 = outputs[115]; + FAUSTFLOAT* output116 = outputs[116]; + FAUSTFLOAT* output117 = outputs[117]; + FAUSTFLOAT* output118 = outputs[118]; + FAUSTFLOAT* output119 = outputs[119]; + FAUSTFLOAT* output120 = outputs[120]; + double fSlow0 = double(fCheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = (fSlow0 > 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = mydsp_faustpower2_f(fSlow7); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = double(fVslider1); + double fSlow11 = cos(fSlow10); + double fSlow12 = sin(fSlow10); + double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); + double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow15 = mydsp_faustpower2_f(fSlow11); + double fSlow16 = ((2.0 * fSlow15) + -1.0); + double fSlow17 = (3.1915382432114616 * fSlow16); + double fSlow18 = (fSlow11 * fSlow7); + double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); + double fSlow20 = (fSlow16 * fSlow7); + double fSlow21 = (fConst10 * fSlow20); + double fSlow22 = ((4.0 * fSlow15) + -1.0); + double fSlow23 = (fSlow22 + -1.0); + double fSlow24 = (fSlow23 * fSlow11); + double fSlow25 = (fConst14 * ((fSlow24 * fSlow9) * fSlow12)); + double fSlow26 = ((78.986541696685876 * fSlow8) + -11.283791670955125); + double fSlow27 = (fSlow26 * fSlow11); + double fSlow28 = (fConst18 * (fSlow27 * fSlow12)); + double fSlow29 = (fSlow16 * fSlow26); + double fSlow30 = (fConst19 * fSlow29); + double fSlow31 = ((2.0 * fSlow16) + -1.0); + double fSlow32 = (1.0 - fSlow31); + double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow15))); + double fSlow34 = (fConst20 * (fSlow33 * fSlow9)); + double fSlow35 = ((4.5 * fSlow26) + -67.702750025730751); + double fSlow36 = ((fSlow35 * fSlow11) * fSlow7); + double fSlow37 = (fConst24 * (fSlow36 * fSlow12)); + double fSlow38 = ((fSlow16 * fSlow35) * fSlow7); + double fSlow39 = (fConst25 * fSlow38); + double fSlow40 = (1.0 - fSlow23); + double fSlow41 = (1.0 - (4.0 * (fSlow40 * fSlow15))); + double fSlow42 = (fSlow23 - fSlow41); + double fSlow43 = (0.0 - (2.0 * (fSlow42 * fSlow11))); + double fSlow44 = mydsp_faustpower2_f(fSlow9); + double fSlow45 = (fConst29 * ((fSlow43 * fSlow44) * fSlow12)); + double fSlow46 = ((893.67630033964599 * fSlow8) + -81.24330003087691); + double fSlow47 = ((fSlow23 * fSlow46) * fSlow11); + double fSlow48 = (fConst32 * ((fSlow47 * fSlow9) * fSlow12)); + double fSlow49 = ((3.6666666666666665 * (fSlow35 * fSlow8)) - (3.5 * fSlow26)); + double fSlow50 = (fSlow49 * fSlow11); + double fSlow51 = (fConst34 * (fSlow50 * fSlow12)); + double fSlow52 = (fSlow16 * fSlow49); + double fSlow53 = (fConst35 * fSlow52); + double fSlow54 = (fSlow33 * fSlow46); + double fSlow55 = (fConst36 * (fSlow54 * fSlow9)); + double fSlow56 = ((2.0 * fSlow33) - fSlow31); + double fSlow57 = (fSlow32 + fSlow56); + double fSlow58 = ((2.0 * (fSlow57 * fSlow15)) + -1.0); + double fSlow59 = (fConst29 * (fSlow58 * fSlow44)); + double fSlow60 = ((6.5 * fSlow46) + -812.43300030876912); + double fSlow61 = (((fSlow23 * fSlow60) * fSlow11) * fSlow7); + double fSlow62 = (fConst39 * ((fSlow61 * fSlow9) * fSlow12)); + double fSlow63 = ((3.25 * fSlow49) - (2.6666666666666665 * fSlow35)); + double fSlow64 = ((fSlow16 * fSlow63) * fSlow7); + double fSlow65 = (fConst42 * fSlow64); + double fSlow66 = (fSlow58 * fSlow7); + double fSlow67 = (fConst45 * (fSlow66 * fSlow44)); + double fSlow68 = ((7041.0860026759983 * fSlow8) + -469.40573351173322); + double fSlow69 = (fSlow43 * fSlow68); + double fSlow70 = (fConst48 * ((fSlow69 * fSlow44) * fSlow12)); + double fSlow71 = ((3.0 * (fSlow63 * fSlow8)) - (2.25 * fSlow49)); + double fSlow72 = (fSlow71 * fSlow11); + double fSlow73 = (fConst50 * (fSlow72 * fSlow12)); + double fSlow74 = (fSlow16 * fSlow71); + double fSlow75 = (fConst51 * fSlow74); + double fSlow76 = ((5.0 * (fSlow60 * fSlow8)) - (5.5 * fSlow46)); + double fSlow77 = (fSlow33 * fSlow76); + double fSlow78 = (fConst53 * (fSlow77 * fSlow9)); + double fSlow79 = (fSlow58 * fSlow68); + double fSlow80 = (fConst48 * (fSlow79 * fSlow44)); + double fSlow81 = ((2.0 * fSlow58) - fSlow56); + double fSlow82 = (fSlow57 - fSlow81); + double fSlow83 = (1.0 - (2.0 * (fSlow82 * fSlow15))); + double fSlow84 = mydsp_faustpower3_f(fSlow9); + double fSlow85 = (fConst57 * (fSlow83 * fSlow84)); + double fSlow86 = ((8.5 * fSlow68) + -6571.6802691642652); + double fSlow87 = ((fSlow43 * fSlow86) * fSlow7); + double fSlow88 = (fConst60 * ((fSlow87 * fSlow44) * fSlow12)); + double fSlow89 = ((2.833333333333333 * fSlow71) - (2.0 * fSlow63)); + double fSlow90 = ((fSlow16 * fSlow89) * fSlow7); + double fSlow91 = (fConst62 * fSlow90); + double fSlow92 = ((fSlow58 * fSlow86) * fSlow7); + double fSlow93 = (fConst60 * (fSlow92 * fSlow44)); + double fSlow94 = ((2.0 * fSlow43) + (4.0 * (fSlow40 * fSlow11))); + double fSlow95 = ((fSlow94 * fSlow11) + -1.0); + double fSlow96 = (fSlow42 + fSlow95); + double fSlow97 = ((46651.708284396875 * fSlow8) + -2455.3530675998354); + double fSlow98 = ((fSlow96 * fSlow97) * fSlow11); + double fSlow99 = (fConst65 * ((fSlow98 * fSlow84) * fSlow12)); + double fSlow100 = ((4.25 * fSlow76) - (4.0 * fSlow60)); + double fSlow101 = ((3.8000000000000003 * (fSlow100 * fSlow8)) - (3.25 * fSlow76)); + double fSlow102 = ((fSlow23 * fSlow101) * fSlow11); + double fSlow103 = (fConst67 * ((fSlow102 * fSlow9) * fSlow12)); + double fSlow104 = ((2.714285714285714 * (fSlow89 * fSlow8)) - (1.8333333333333333 * fSlow71)); + double fSlow105 = (fSlow16 * fSlow104); + double fSlow106 = (fConst69 * fSlow105); + double fSlow107 = (fSlow33 * fSlow101); + double fSlow108 = (fConst70 * (fSlow107 * fSlow9)); + double fSlow109 = ((6.333333333333333 * (fSlow86 * fSlow8)) - (7.5 * fSlow68)); + double fSlow110 = (fSlow58 * fSlow109); + double fSlow111 = (fConst72 * (fSlow110 * fSlow44)); + double fSlow112 = (fSlow83 * fSlow97); + double fSlow113 = (fConst73 * (fSlow112 * fSlow84)); + double fSlow114 = ((2.0 * fSlow83) - fSlow81); + double fSlow115 = ((2.0 * ((fSlow82 + fSlow114) * fSlow15)) + -1.0); + double fSlow116 = mydsp_faustpower4_f(fSlow9); + double fSlow117 = (fConst75 * (fSlow115 * fSlow116)); + double fSlow118 = pow(fSlow9, 2.5); + double fSlow119 = (fConst76 * fSlow118); + double fSlow120 = (fSlow41 * fSlow12); + double fSlow121 = (fSlow56 * fSlow11); + double fSlow122 = (fSlow41 * fSlow7); + double fSlow123 = (fConst80 * (fSlow122 * fSlow12)); + double fSlow124 = (fSlow121 * fSlow7); + double fSlow125 = (fConst80 * fSlow124); + double fSlow126 = ((2581.7315343145328 * fSlow8) + -198.59473340881021); + double fSlow127 = (fSlow41 * fSlow126); + double fSlow128 = (fConst82 * (fSlow127 * fSlow12)); + double fSlow129 = ((fSlow56 * fSlow126) * fSlow11); + double fSlow130 = (fConst82 * fSlow129); + double fSlow131 = ((7.5 * fSlow126) + -2383.1368009057223); + double fSlow132 = ((fSlow41 * fSlow131) * fSlow7); + double fSlow133 = (fConst84 * (fSlow132 * fSlow12)); + double fSlow134 = (((fSlow56 * fSlow131) * fSlow11) * fSlow7); + double fSlow135 = (fConst84 * fSlow134); + double fSlow136 = ((5.6666666666666661 * (fSlow131 * fSlow8)) - (6.5 * fSlow126)); + double fSlow137 = (fSlow41 * fSlow136); + double fSlow138 = (fConst86 * (fSlow137 * fSlow12)); + double fSlow139 = ((fSlow56 * fSlow136) * fSlow11); + double fSlow140 = (fConst86 * fSlow139); + double fSlow141 = ((4.75 * fSlow136) - (4.6666666666666661 * fSlow131)); + double fSlow142 = ((fSlow41 * fSlow141) * fSlow7); + double fSlow143 = (fConst88 * (fSlow142 * fSlow12)); + double fSlow144 = (((fSlow56 * fSlow141) * fSlow11) * fSlow7); + double fSlow145 = (fConst88 * fSlow144); + double fSlow146 = pow(fSlow9, 1.5); + double fSlow147 = (fConst89 * fSlow146); + double fSlow148 = (fSlow22 * fSlow12); + double fSlow149 = (fSlow31 * fSlow11); + double fSlow150 = (fSlow22 * fSlow7); + double fSlow151 = (fConst93 * (fSlow150 * fSlow12)); + double fSlow152 = (fSlow149 * fSlow7); + double fSlow153 = (fConst93 * fSlow152); + double fSlow154 = ((284.35155010806915 * fSlow8) + -31.594616678674353); + double fSlow155 = (fSlow22 * fSlow154); + double fSlow156 = (fConst95 * (fSlow155 * fSlow12)); + double fSlow157 = ((fSlow31 * fSlow154) * fSlow11); + double fSlow158 = (fConst95 * fSlow157); + double fSlow159 = ((5.5 * fSlow154) + -252.75693342939482); + double fSlow160 = ((fSlow22 * fSlow159) * fSlow7); + double fSlow161 = (fConst97 * (fSlow160 * fSlow12)); + double fSlow162 = (((fSlow31 * fSlow159) * fSlow11) * fSlow7); + double fSlow163 = (fConst97 * fSlow162); + double fSlow164 = ((4.333333333333333 * (fSlow159 * fSlow8)) - (4.5 * fSlow154)); + double fSlow165 = (fSlow22 * fSlow164); + double fSlow166 = (fConst99 * (fSlow165 * fSlow12)); + double fSlow167 = ((fSlow31 * fSlow164) * fSlow11); + double fSlow168 = (fConst99 * fSlow167); + double fSlow169 = ((3.75 * fSlow164) - (3.333333333333333 * fSlow159)); + double fSlow170 = ((fSlow22 * fSlow169) * fSlow7); + double fSlow171 = (fConst101 * (fSlow170 * fSlow12)); + double fSlow172 = (((fSlow31 * fSlow169) * fSlow11) * fSlow7); + double fSlow173 = (fConst101 * fSlow172); + double fSlow174 = ((3.4000000000000004 * (fSlow169 * fSlow8)) - (2.75 * fSlow164)); + double fSlow175 = (fSlow22 * fSlow174); + double fSlow176 = (fConst103 * (fSlow175 * fSlow12)); + double fSlow177 = ((fSlow31 * fSlow174) * fSlow11); + double fSlow178 = (fConst103 * fSlow177); + double fSlow179 = ((3.1666666666666665 * fSlow174) - (2.4000000000000004 * fSlow169)); + double fSlow180 = ((fSlow22 * fSlow179) * fSlow7); + double fSlow181 = (fConst105 * (fSlow180 * fSlow12)); + double fSlow182 = (((fSlow31 * fSlow179) * fSlow11) * fSlow7); + double fSlow183 = (fConst105 * fSlow182); + double fSlow184 = pow(fSlow9, 0.5); + double fSlow185 = (fConst106 * fSlow184); + double fSlow186 = (fConst110 * (fSlow7 * fSlow12)); + double fSlow187 = (fConst110 * fSlow18); + double fSlow188 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); + double fSlow189 = (fConst112 * (fSlow188 * fSlow12)); + double fSlow190 = (fSlow188 * fSlow11); + double fSlow191 = (fConst112 * fSlow190); + double fSlow192 = ((3.5 * fSlow188) + -13.540550005146152); + double fSlow193 = (fSlow192 * fSlow7); + double fSlow194 = (fConst114 * (fSlow193 * fSlow12)); + double fSlow195 = ((fSlow192 * fSlow11) * fSlow7); + double fSlow196 = (fConst114 * fSlow195); + double fSlow197 = ((3.0 * (fSlow192 * fSlow8)) - (2.5 * fSlow188)); + double fSlow198 = (fConst116 * (fSlow197 * fSlow12)); + double fSlow199 = (fSlow197 * fSlow11); + double fSlow200 = (fConst116 * fSlow199); + double fSlow201 = ((2.75 * fSlow197) - (2.0 * fSlow192)); + double fSlow202 = (fSlow201 * fSlow7); + double fSlow203 = (fConst118 * (fSlow202 * fSlow12)); + double fSlow204 = ((fSlow201 * fSlow11) * fSlow7); + double fSlow205 = (fConst118 * fSlow204); + double fSlow206 = ((2.6000000000000001 * (fSlow201 * fSlow8)) - (1.75 * fSlow197)); + double fSlow207 = (fConst120 * (fSlow206 * fSlow12)); + double fSlow208 = (fSlow206 * fSlow11); + double fSlow209 = (fConst120 * fSlow208); + double fSlow210 = ((2.5 * fSlow206) - (1.6000000000000001 * fSlow201)); + double fSlow211 = (fSlow210 * fSlow7); + double fSlow212 = (fConst122 * (fSlow211 * fSlow12)); + double fSlow213 = ((fSlow210 * fSlow11) * fSlow7); + double fSlow214 = (fConst122 * fSlow213); + double fSlow215 = ((2.4285714285714284 * (fSlow210 * fSlow8)) - (1.5 * fSlow206)); + double fSlow216 = (fConst124 * (fSlow215 * fSlow12)); + double fSlow217 = (fSlow215 * fSlow11); + double fSlow218 = (fConst124 * fSlow217); + double fSlow219 = ((2.375 * fSlow215) - (1.4285714285714284 * fSlow210)); + double fSlow220 = (fSlow219 * fSlow7); + double fSlow221 = (fConst126 * (fSlow220 * fSlow12)); + double fSlow222 = ((fSlow219 * fSlow11) * fSlow7); + double fSlow223 = (fConst126 * fSlow222); + double fSlow224 = ((3.0 * fSlow8) + -1.0); + double fSlow225 = ((2.5 * fSlow224) + -2.0); + double fSlow226 = ((2.333333333333333 * (fSlow225 * fSlow8)) - (1.5 * fSlow224)); + double fSlow227 = ((2.25 * fSlow226) - (1.3333333333333333 * fSlow225)); + double fSlow228 = ((2.2000000000000002 * (fSlow227 * fSlow8)) - (1.25 * fSlow226)); + double fSlow229 = ((2.1666666666666665 * fSlow228) - (1.2000000000000002 * fSlow227)); + double fSlow230 = ((2.1428571428571428 * (fSlow229 * fSlow8)) - (1.1666666666666665 * fSlow228)); + double fSlow231 = ((2.125 * fSlow230) - (1.1428571428571428 * fSlow229)); + double fSlow232 = ((2.1111111111111112 * (fSlow231 * fSlow8)) - (1.125 * fSlow230)); + double fSlow233 = (0.45825756949558399 * fSlow232); + double fSlow234 = pow(fSlow9, 3.5); + double fSlow235 = (fSlow95 * fSlow234); + double fSlow236 = (fConst130 * fSlow235); + double fSlow237 = (((fSlow63 * fSlow11) * fSlow7) * fSlow9); + double fSlow238 = (fConst131 * fSlow237); + double fSlow239 = (fSlow96 * fSlow11); + double fSlow240 = (fSlow239 * fSlow116); + double fSlow241 = (fConst132 * fSlow240); + double fSlow242 = (((fSlow23 * fSlow76) * fSlow11) * fSlow44); + double fSlow243 = (fConst133 * fSlow242); + double fSlow244 = ((((4.0 * fSlow239) - fSlow94) * fSlow11) + 1.0); + double fSlow245 = pow(fSlow9, 4.5); + double fSlow246 = (fSlow244 * fSlow245); + double fSlow247 = (fConst137 * fSlow246); + double fSlow248 = ((((fSlow23 * fSlow100) * fSlow11) * fSlow7) * fSlow44); + double fSlow249 = (fConst139 * fSlow248); + double fSlow250 = mydsp_faustpower5_f(fSlow9); + double fSlow251 = ((0.0 - (2.0 * ((fSlow96 - fSlow244) * fSlow11))) * fSlow250); + double fSlow252 = (fConst75 * fSlow251); + double fSlow253 = ((fSlow43 * fSlow109) * fSlow84); + double fSlow254 = (fConst72 * fSlow253); + double fSlow255 = ((fSlow104 * fSlow11) * fSlow9); + double fSlow256 = (fConst140 * fSlow255); + double fSlow257 = (1.1180339887498949 * fSlow224); + double fSlow258 = (0.75 * fSlow226); + double fSlow259 = (0.60092521257733145 * fSlow228); + double fSlow260 = (0.51538820320220757 * fSlow230); + double fSlow261 = (0.88191710368819687 * fSlow225); + double fSlow262 = ((fSlow24 * fSlow44) * fSlow12); + double fSlow263 = (fConst142 * fSlow262); + double fSlow264 = (0.66332495807108005 * fSlow227); + double fSlow265 = (fSlow33 * fSlow44); + double fSlow266 = (fConst143 * fSlow265); + double fSlow267 = ((fSlow43 * fSlow84) * fSlow12); + double fSlow268 = (fConst45 * fSlow267); + double fSlow269 = (0.55328333517248807 * fSlow229); + double fSlow270 = (fSlow33 * fSlow60); + double fSlow271 = (fConst144 * (fSlow270 * fSlow44)); + double fSlow272 = (fSlow240 * fSlow12); + double fSlow273 = (fConst147 * fSlow272); + double fSlow274 = (fSlow89 * fSlow11); + double fSlow275 = (fConst148 * ((fSlow274 * fSlow9) * fSlow12)); + double fSlow276 = (0.48432210483785265 * fSlow231); + double fSlow277 = (fSlow33 * fSlow100); + double fSlow278 = (fConst149 * (fSlow277 * fSlow44)); + double fSlow279 = (fSlow83 * fSlow116); + double fSlow280 = (fConst150 * fSlow279); + double fSlow281 = (fConst128 * fSlow234); + double fSlow282 = (fSlow81 * fSlow11); + double fSlow283 = (fConst151 * fSlow282); + double fSlow284 = (fSlow95 * fSlow7); + double fSlow285 = (fConst153 * (fSlow284 * fSlow12)); + double fSlow286 = (fSlow282 * fSlow7); + double fSlow287 = (fConst153 * fSlow286); + double fSlow288 = ((18415.148006998763 * fSlow8) + -1083.244000411692); + double fSlow289 = (fSlow95 * fSlow288); + double fSlow290 = (fConst155 * (fSlow289 * fSlow12)); + double fSlow291 = ((fSlow81 * fSlow288) * fSlow11); + double fSlow292 = (fConst155 * fSlow291); + double fSlow293 = ((9.5 * fSlow288) + -17331.904006587072); + double fSlow294 = ((fSlow95 * fSlow293) * fSlow7); + double fSlow295 = (fConst157 * (fSlow294 * fSlow12)); + double fSlow296 = (((fSlow81 * fSlow293) * fSlow11) * fSlow7); + double fSlow297 = (fConst157 * fSlow296); + double fSlow298 = (fConst135 * fSlow245); + double fSlow299 = (fSlow114 * fSlow11); + double fSlow300 = (fConst158 * fSlow299); + double fSlow301 = (fSlow244 * fSlow7); + double fSlow302 = (fConst160 * (fSlow301 * fSlow12)); + double fSlow303 = (fSlow299 * fSlow7); + double fSlow304 = (fConst160 * fSlow303); + double fSlow305 = (fConst161 * (fSlow184 * fSlow12)); + double fSlow306 = (0.13783222385544802 * fSlow7); + double fSlow307 = (fConst161 * (fSlow11 * fSlow184)); + double fSlow308 = (fConst163 * ((fSlow11 * fSlow9) * fSlow12)); + double fSlow309 = (fConst164 * ((fSlow7 * fSlow184) * fSlow12)); + double fSlow310 = (0.088970317927147144 * fSlow224); + double fSlow311 = (fConst164 * (fSlow18 * fSlow184)); + double fSlow312 = (fConst165 * (fSlow16 * fSlow9)); + double fSlow313 = (fConst166 * ((fSlow22 * fSlow146) * fSlow12)); + double fSlow314 = (fConst168 * ((fSlow18 * fSlow9) * fSlow12)); + double fSlow315 = (fConst169 * ((fSlow188 * fSlow184) * fSlow12)); + double fSlow316 = (0.070180733224632072 * (fSlow225 * fSlow7)); + double fSlow317 = (fConst169 * (fSlow190 * fSlow184)); + double fSlow318 = (fConst170 * (fSlow20 * fSlow9)); + double fSlow319 = (fConst166 * (fSlow149 * fSlow146)); + double fSlow320 = (fConst171 * fSlow262); + double fSlow321 = (fConst172 * ((fSlow150 * fSlow146) * fSlow12)); + double fSlow322 = (fConst173 * ((fSlow27 * fSlow9) * fSlow12)); + double fSlow323 = (fConst174 * ((fSlow193 * fSlow184) * fSlow12)); + double fSlow324 = (0.059683103659460751 * fSlow226); + double fSlow325 = (fConst174 * (fSlow195 * fSlow184)); + double fSlow326 = (fConst175 * (fSlow29 * fSlow9)); + double fSlow327 = (fConst172 * (fSlow152 * fSlow146)); + double fSlow328 = (fConst176 * fSlow265); + double fSlow329 = (fConst177 * ((fSlow41 * fSlow118) * fSlow12)); + double fSlow330 = (fConst178 * (((fSlow24 * fSlow7) * fSlow44) * fSlow12)); + double fSlow331 = (fConst179 * ((fSlow155 * fSlow146) * fSlow12)); + double fSlow332 = (fConst180 * ((fSlow36 * fSlow9) * fSlow12)); + double fSlow333 = (fConst181 * ((fSlow197 * fSlow184) * fSlow12)); + double fSlow334 = (0.052785722976618307 * (fSlow227 * fSlow7)); + double fSlow335 = (fConst181 * (fSlow199 * fSlow184)); + double fSlow336 = (fConst182 * (fSlow38 * fSlow9)); + double fSlow337 = (fConst179 * (fSlow157 * fSlow146)); + double fSlow338 = (fConst183 * ((fSlow33 * fSlow7) * fSlow44)); + double fSlow339 = (fConst177 * (fSlow121 * fSlow118)); + double fSlow340 = (fConst184 * fSlow267); + double fSlow341 = (fConst185 * ((fSlow122 * fSlow118) * fSlow12)); + double fSlow342 = (fConst186 * ((fSlow47 * fSlow44) * fSlow12)); + double fSlow343 = (fConst187 * ((fSlow160 * fSlow146) * fSlow12)); + double fSlow344 = (fConst188 * ((fSlow50 * fSlow9) * fSlow12)); + double fSlow345 = (fConst189 * ((fSlow202 * fSlow184) * fSlow12)); + double fSlow346 = (0.047820109005115151 * fSlow228); + double fSlow347 = (fConst189 * (fSlow204 * fSlow184)); + double fSlow348 = (fConst190 * (fSlow52 * fSlow9)); + double fSlow349 = (fConst187 * (fSlow162 * fSlow146)); + double fSlow350 = (fConst191 * (fSlow54 * fSlow44)); + double fSlow351 = (fConst185 * (fSlow124 * fSlow118)); + double fSlow352 = (fConst184 * (fSlow58 * fSlow84)); + double fSlow353 = (fConst192 * (fSlow235 * fSlow12)); + double fSlow354 = (fConst193 * (((fSlow43 * fSlow7) * fSlow84) * fSlow12)); + double fSlow355 = (fConst194 * ((fSlow127 * fSlow118) * fSlow12)); + double fSlow356 = (fConst195 * ((fSlow61 * fSlow44) * fSlow12)); + double fSlow357 = (fConst196 * ((fSlow165 * fSlow146) * fSlow12)); + double fSlow358 = (fConst197 * (fSlow237 * fSlow12)); + double fSlow359 = (fConst198 * ((fSlow206 * fSlow184) * fSlow12)); + double fSlow360 = (0.044028888861535699 * (fSlow229 * fSlow7)); + double fSlow361 = (fConst198 * (fSlow208 * fSlow184)); + double fSlow362 = (fConst199 * (fSlow64 * fSlow9)); + double fSlow363 = (fConst196 * (fSlow167 * fSlow146)); + double fSlow364 = (fConst200 * ((fSlow270 * fSlow7) * fSlow44)); + double fSlow365 = (fConst194 * (fSlow129 * fSlow118)); + double fSlow366 = (fConst193 * (fSlow66 * fSlow84)); + double fSlow367 = (fConst192 * (fSlow282 * fSlow234)); + double fSlow368 = (fConst201 * fSlow272); + double fSlow369 = (fConst202 * ((fSlow284 * fSlow234) * fSlow12)); + double fSlow370 = (fConst203 * ((fSlow69 * fSlow84) * fSlow12)); + double fSlow371 = (fConst204 * ((fSlow132 * fSlow118) * fSlow12)); + double fSlow372 = (fConst205 * (fSlow242 * fSlow12)); + double fSlow373 = (fConst206 * ((fSlow170 * fSlow146) * fSlow12)); + double fSlow374 = (fConst207 * ((fSlow72 * fSlow9) * fSlow12)); + double fSlow375 = (fConst208 * ((fSlow211 * fSlow184) * fSlow12)); + double fSlow376 = (0.041013290075440773 * fSlow230); + double fSlow377 = (fConst208 * (fSlow213 * fSlow184)); + double fSlow378 = (fConst209 * (fSlow74 * fSlow9)); + double fSlow379 = (fConst206 * (fSlow172 * fSlow146)); + double fSlow380 = (fConst210 * (fSlow77 * fSlow44)); + double fSlow381 = (fConst204 * (fSlow134 * fSlow118)); + double fSlow382 = (fConst203 * (fSlow79 * fSlow84)); + double fSlow383 = (fConst202 * (fSlow286 * fSlow234)); + double fSlow384 = (fConst211 * fSlow279); + double fSlow385 = (fConst212 * (fSlow246 * fSlow12)); + double fSlow386 = (fConst213 * (((fSlow239 * fSlow7) * fSlow116) * fSlow12)); + double fSlow387 = (fConst214 * ((fSlow289 * fSlow234) * fSlow12)); + double fSlow388 = (fConst215 * ((fSlow87 * fSlow84) * fSlow12)); + double fSlow389 = (fConst216 * ((fSlow137 * fSlow118) * fSlow12)); + double fSlow390 = (fConst217 * (fSlow248 * fSlow12)); + double fSlow391 = (fConst218 * ((fSlow175 * fSlow146) * fSlow12)); + double fSlow392 = (fConst219 * (((fSlow274 * fSlow7) * fSlow9) * fSlow12)); + double fSlow393 = (fConst220 * ((fSlow215 * fSlow184) * fSlow12)); + double fSlow394 = (0.038541128516807702 * (fSlow231 * fSlow7)); + double fSlow395 = (fConst220 * (fSlow217 * fSlow184)); + double fSlow396 = (fConst221 * (fSlow90 * fSlow9)); + double fSlow397 = (fConst218 * (fSlow177 * fSlow146)); + double fSlow398 = (fConst222 * ((fSlow277 * fSlow7) * fSlow44)); + double fSlow399 = (fConst216 * (fSlow139 * fSlow118)); + double fSlow400 = (fConst215 * (fSlow92 * fSlow84)); + double fSlow401 = (fConst214 * (fSlow291 * fSlow234)); + double fSlow402 = (fConst223 * ((fSlow83 * fSlow7) * fSlow116)); + double fSlow403 = (fConst212 * (fSlow299 * fSlow245)); + double fSlow404 = (fConst224 * (fSlow251 * fSlow12)); + double fSlow405 = (fConst225 * ((fSlow301 * fSlow245) * fSlow12)); + double fSlow406 = (fConst226 * ((fSlow98 * fSlow116) * fSlow12)); + double fSlow407 = (fConst227 * ((fSlow294 * fSlow234) * fSlow12)); + double fSlow408 = (fConst228 * (fSlow253 * fSlow12)); + double fSlow409 = (fConst229 * ((fSlow142 * fSlow118) * fSlow12)); + double fSlow410 = (fConst230 * ((fSlow102 * fSlow44) * fSlow12)); + double fSlow411 = (fConst231 * ((fSlow180 * fSlow146) * fSlow12)); + double fSlow412 = (fConst232 * (fSlow255 * fSlow12)); + double fSlow413 = (fConst233 * ((fSlow220 * fSlow184) * fSlow12)); + double fSlow414 = (0.03646697869724997 * fSlow232); + double fSlow415 = (fConst233 * (fSlow222 * fSlow184)); + double fSlow416 = (fConst234 * (fSlow105 * fSlow9)); + double fSlow417 = (fConst231 * (fSlow182 * fSlow146)); + double fSlow418 = (fConst235 * (fSlow107 * fSlow44)); + double fSlow419 = (fConst229 * (fSlow144 * fSlow118)); + double fSlow420 = (fConst228 * (fSlow110 * fSlow84)); + double fSlow421 = (fConst227 * (fSlow296 * fSlow234)); + double fSlow422 = (fConst236 * (fSlow112 * fSlow116)); + double fSlow423 = (fConst225 * (fSlow303 * fSlow245)); + double fSlow424 = (fConst224 * (fSlow115 * fSlow250)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input4[i]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input8[i]); + double fTemp5 = double(input10[i]); + double fTemp6 = double(input14[i]); + double fTemp7 = double(input16[i]); + double fTemp8 = double(input18[i]); + double fTemp9 = double(input22[i]); + double fTemp10 = double(input24[i]); + double fTemp11 = double(input28[i]); + double fTemp12 = double(input32[i]); + double fTemp13 = double(input36[i]); + double fTemp14 = double(input38[i]); + double fTemp15 = double(input40[i]); + double fTemp16 = double(input44[i]); + double fTemp17 = double(input46[i]); + double fTemp18 = double(input48[i]); + double fTemp19 = double(input52[i]); + double fTemp20 = double(input58[i]); + double fTemp21 = double(input62[i]); + double fTemp22 = double(input66[i]); + double fTemp23 = double(input70[i]); + double fTemp24 = double(input74[i]); + double fTemp25 = double(input76[i]); + double fTemp26 = double(input78[i]); + double fTemp27 = double(input80[i]); + double fTemp28 = double(input84[i]); + double fTemp29 = double(input92[i]); + double fTemp30 = double(input96[i]); + double fTemp31 = double(input102[i]); + double fTemp32 = double(input106[i]); + double fTemp33 = double(input112[i]); + double fTemp34 = double(input114[i]); + double fTemp35 = double(input116[i]); + double fTemp36 = double(input118[i]); + double fTemp37 = double(input120[i]); + double fTemp38 = double(input25[i]); + double fTemp39 = double(input35[i]); + double fTemp40 = double(input37[i]); + double fTemp41 = double(input47[i]); + double fTemp42 = double(input51[i]); + double fTemp43 = double(input61[i]); + double fTemp44 = double(input67[i]); + double fTemp45 = double(input77[i]); + double fTemp46 = double(input85[i]); + double fTemp47 = double(input95[i]); + double fTemp48 = double(input105[i]); + double fTemp49 = double(input115[i]); + double fTemp50 = double(input9[i]); + double fTemp51 = double(input15[i]); + double fTemp52 = double(input17[i]); + double fTemp53 = double(input23[i]); + double fTemp54 = double(input27[i]); + double fTemp55 = double(input33[i]); + double fTemp56 = double(input39[i]); + double fTemp57 = double(input45[i]); + double fTemp58 = double(input53[i]); + double fTemp59 = double(input59[i]); + double fTemp60 = double(input69[i]); + double fTemp61 = double(input75[i]); + double fTemp62 = double(input87[i]); + double fTemp63 = double(input93[i]); + double fTemp64 = double(input107[i]); + double fTemp65 = double(input113[i]); + double fTemp66 = double(input1[i]); + double fTemp67 = double(input3[i]); + double fTemp68 = double(input5[i]); + double fTemp69 = double(input7[i]); + double fTemp70 = double(input11[i]); + double fTemp71 = double(input13[i]); + double fTemp72 = double(input19[i]); + double fTemp73 = double(input21[i]); + double fTemp74 = double(input29[i]); + double fTemp75 = double(input31[i]); + double fTemp76 = double(input41[i]); + double fTemp77 = double(input43[i]); + double fTemp78 = double(input55[i]); + double fTemp79 = double(input57[i]); + double fTemp80 = double(input71[i]); + double fTemp81 = double(input73[i]); + double fTemp82 = double(input89[i]); + double fTemp83 = double(input91[i]); + double fTemp84 = double(input109[i]); + double fTemp85 = double(input111[i]); + double fTemp86 = double(input110[i]); + double fTemp87 = double(input49[i]); + double fTemp88 = double(input54[i]); + double fTemp89 = double(input64[i]); + double fTemp90 = double(input68[i]); + double fTemp91 = double(input81[i]); + double fTemp92 = double(input86[i]); + double fTemp93 = double(input100[i]); + double fTemp94 = double(input104[i]); + double fTemp95 = double(input108[i]); + double fTemp96 = double(input6[i]); + double fTemp97 = double(input20[i]); + double fTemp98 = double(input42[i]); + double fTemp99 = double(input72[i]); + double fTemp100 = double(input2[i]); + double fTemp101 = double(input12[i]); + double fTemp102 = double(input26[i]); + double fTemp103 = double(input30[i]); + double fTemp104 = double(input34[i]); + double fTemp105 = double(input50[i]); + double fTemp106 = double(input56[i]); + double fTemp107 = double(input60[i]); + double fTemp108 = double(input82[i]); + double fTemp109 = double(input88[i]); + double fTemp110 = double(input90[i]); + double fTemp111 = double(input94[i]); + double fTemp112 = double(input98[i]); + double fTemp113 = double(input63[i]); + double fTemp114 = double(input65[i]); + double fTemp115 = double(input79[i]); + double fTemp116 = double(input83[i]); + double fTemp117 = double(input97[i]); + double fTemp118 = double(input103[i]); + double fTemp119 = double(input117[i]); + double fTemp120 = double(input99[i]); + double fTemp121 = double(input101[i]); + double fTemp122 = double(input119[i]); + double fTemp123 = ((fSlow9 * ((((((((((((((((((((((((((((((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow28 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow45 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow48 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow55 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow65 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow67 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow70 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22))))) + (fSlow73 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow78 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow85 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27))))) + (fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28))))) + (fSlow91 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow93 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))) + (fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31))))) + (fSlow103 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow106 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow108 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow111 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow113 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow117 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37)))))) + ((((fSlow119 * (((((((((((fConst78 * ((fSlow120 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38)))) + (fSlow121 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39)))))) + (fSlow123 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40))))) + (fSlow125 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow128 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42))))) + (fSlow130 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow133 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow135 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45))))) + (fSlow138 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46))))) + (fSlow140 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47))))) + (fSlow143 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48))))) + (fSlow145 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49)))))) + ((fSlow147 * (((((((((((((((fConst91 * ((fSlow148 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50)))) + (fSlow149 * (iSlow1?(fSlow3 * (fTemp3 * fTemp51)):(fSlow3 * (fTemp1 * fTemp51)))))) + (fSlow151 * (iSlow1?(fSlow3 * (fTemp3 * fTemp52)):(fSlow3 * (fTemp1 * fTemp52))))) + (fSlow153 * (iSlow1?(fSlow3 * (fTemp3 * fTemp53)):(fSlow3 * (fTemp1 * fTemp53))))) + (fSlow156 * (iSlow1?(fSlow3 * (fTemp3 * fTemp54)):(fSlow3 * (fTemp1 * fTemp54))))) + (fSlow158 * (iSlow1?(fSlow3 * (fTemp3 * fTemp55)):(fSlow3 * (fTemp1 * fTemp55))))) + (fSlow161 * (iSlow1?(fSlow3 * (fTemp3 * fTemp56)):(fSlow3 * (fTemp1 * fTemp56))))) + (fSlow163 * (iSlow1?(fSlow3 * (fTemp3 * fTemp57)):(fSlow3 * (fTemp1 * fTemp57))))) + (fSlow166 * (iSlow1?(fSlow3 * (fTemp3 * fTemp58)):(fSlow3 * (fTemp1 * fTemp58))))) + (fSlow168 * (iSlow1?(fSlow3 * (fTemp3 * fTemp59)):(fSlow3 * (fTemp1 * fTemp59))))) + (fSlow171 * (iSlow1?(fSlow3 * (fTemp3 * fTemp60)):(fSlow3 * (fTemp1 * fTemp60))))) + (fSlow173 * (iSlow1?(fSlow3 * (fTemp3 * fTemp61)):(fSlow3 * (fTemp1 * fTemp61))))) + (fSlow176 * (iSlow1?(fSlow3 * (fTemp3 * fTemp62)):(fSlow3 * (fTemp1 * fTemp62))))) + (fSlow178 * (iSlow1?(fSlow3 * (fTemp3 * fTemp63)):(fSlow3 * (fTemp1 * fTemp63))))) + (fSlow181 * (iSlow1?(fSlow3 * (fTemp3 * fTemp64)):(fSlow3 * (fTemp1 * fTemp64))))) + (fSlow183 * (iSlow1?(fSlow3 * (fTemp3 * fTemp65)):(fSlow3 * (fTemp1 * fTemp65)))))) + ((fSlow185 * (((((((((((((((((((fConst108 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp66)):(fSlow3 * (fTemp1 * fTemp66)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp67)):(fSlow3 * (fTemp1 * fTemp67)))))) + (fSlow186 * (iSlow1?(fSlow3 * (fTemp3 * fTemp68)):(fSlow3 * (fTemp1 * fTemp68))))) + (fSlow187 * (iSlow1?(fSlow3 * (fTemp3 * fTemp69)):(fSlow3 * (fTemp1 * fTemp69))))) + (fSlow189 * (iSlow1?(fSlow3 * (fTemp3 * fTemp70)):(fSlow3 * (fTemp1 * fTemp70))))) + (fSlow191 * (iSlow1?(fSlow3 * (fTemp3 * fTemp71)):(fSlow3 * (fTemp1 * fTemp71))))) + (fSlow194 * (iSlow1?(fSlow3 * (fTemp3 * fTemp72)):(fSlow3 * (fTemp1 * fTemp72))))) + (fSlow196 * (iSlow1?(fSlow3 * (fTemp3 * fTemp73)):(fSlow3 * (fTemp1 * fTemp73))))) + (fSlow198 * (iSlow1?(fSlow3 * (fTemp3 * fTemp74)):(fSlow3 * (fTemp1 * fTemp74))))) + (fSlow200 * (iSlow1?(fSlow3 * (fTemp3 * fTemp75)):(fSlow3 * (fTemp1 * fTemp75))))) + (fSlow203 * (iSlow1?(fSlow3 * (fTemp3 * fTemp76)):(fSlow3 * (fTemp1 * fTemp76))))) + (fSlow205 * (iSlow1?(fSlow3 * (fTemp3 * fTemp77)):(fSlow3 * (fTemp1 * fTemp77))))) + (fSlow207 * (iSlow1?(fSlow3 * (fTemp3 * fTemp78)):(fSlow3 * (fTemp1 * fTemp78))))) + (fSlow209 * (iSlow1?(fSlow3 * (fTemp3 * fTemp79)):(fSlow3 * (fTemp1 * fTemp79))))) + (fSlow212 * (iSlow1?(fSlow3 * (fTemp3 * fTemp80)):(fSlow3 * (fTemp1 * fTemp80))))) + (fSlow214 * (iSlow1?(fSlow3 * (fTemp3 * fTemp81)):(fSlow3 * (fTemp1 * fTemp81))))) + (fSlow216 * (iSlow1?(fSlow3 * (fTemp3 * fTemp82)):(fSlow3 * (fTemp1 * fTemp82))))) + (fSlow218 * (iSlow1?(fSlow3 * (fTemp3 * fTemp83)):(fSlow3 * (fTemp1 * fTemp83))))) + (fSlow221 * (iSlow1?(fSlow3 * (fTemp3 * fTemp84)):(fSlow3 * (fTemp1 * fTemp84))))) + (fSlow223 * (iSlow1?(fSlow3 * (fTemp3 * fTemp85)):(fSlow3 * (fTemp1 * fTemp85)))))) + ((fSlow233 * (iSlow1?(fSlow3 * (fTemp3 * fTemp86)):(fSlow3 * (fTemp1 * fTemp86)))) + ((fSlow12 * (((((((((fSlow236 * (iSlow1?(fSlow3 * (fTemp3 * fTemp87)):(fSlow3 * (fTemp1 * fTemp87)))) + (fSlow238 * (iSlow1?(fSlow3 * (fTemp3 * fTemp88)):(fSlow3 * (fTemp1 * fTemp88))))) + (fSlow241 * (iSlow1?(fSlow3 * (fTemp3 * fTemp89)):(fSlow3 * (fTemp1 * fTemp89))))) + (fSlow243 * (iSlow1?(fSlow3 * (fTemp3 * fTemp90)):(fSlow3 * (fTemp1 * fTemp90))))) + (fSlow247 * (iSlow1?(fSlow3 * (fTemp3 * fTemp91)):(fSlow3 * (fTemp1 * fTemp91))))) + (fSlow249 * (iSlow1?(fSlow3 * (fTemp3 * fTemp92)):(fSlow3 * (fTemp1 * fTemp92))))) + (fSlow252 * (iSlow1?(fSlow3 * (fTemp3 * fTemp93)):(fSlow3 * (fTemp1 * fTemp93))))) + (fSlow254 * (iSlow1?(fSlow3 * (fTemp3 * fTemp94)):(fSlow3 * (fTemp1 * fTemp94))))) + (fSlow256 * (iSlow1?(fSlow3 * (fTemp3 * fTemp95)):(fSlow3 * (fTemp1 * fTemp95)))))) + ((((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow257 * (iSlow1?(fSlow3 * (fTemp3 * fTemp96)):(fSlow3 * (fTemp1 * fTemp96))))) + (fSlow258 * (iSlow1?(fSlow3 * (fTemp3 * fTemp97)):(fSlow3 * (fTemp1 * fTemp97))))) + (fSlow259 * (iSlow1?(fSlow3 * (fTemp3 * fTemp98)):(fSlow3 * (fTemp1 * fTemp98))))) + (fSlow260 * (iSlow1?(fSlow3 * (fTemp3 * fTemp99)):(fSlow3 * (fTemp1 * fTemp99))))) + (fSlow7 * (((((((((((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp100)):(fSlow3 * (fTemp1 * fTemp100)))) + (fSlow261 * (iSlow1?(fSlow3 * (fTemp3 * fTemp101)):(fSlow3 * (fTemp1 * fTemp101))))) + (fSlow263 * (iSlow1?(fSlow3 * (fTemp3 * fTemp102)):(fSlow3 * (fTemp1 * fTemp102))))) + (fSlow264 * (iSlow1?(fSlow3 * (fTemp3 * fTemp103)):(fSlow3 * (fTemp1 * fTemp103))))) + (fSlow266 * (iSlow1?(fSlow3 * (fTemp3 * fTemp104)):(fSlow3 * (fTemp1 * fTemp104))))) + (fSlow268 * (iSlow1?(fSlow3 * (fTemp3 * fTemp105)):(fSlow3 * (fTemp1 * fTemp105))))) + (fSlow269 * (iSlow1?(fSlow3 * (fTemp3 * fTemp106)):(fSlow3 * (fTemp1 * fTemp106))))) + (fSlow271 * (iSlow1?(fSlow3 * (fTemp3 * fTemp107)):(fSlow3 * (fTemp1 * fTemp107))))) + (fSlow273 * (iSlow1?(fSlow3 * (fTemp3 * fTemp108)):(fSlow3 * (fTemp1 * fTemp108))))) + (fSlow275 * (iSlow1?(fSlow3 * (fTemp3 * fTemp109)):(fSlow3 * (fTemp1 * fTemp109))))) + (fSlow276 * (iSlow1?(fSlow3 * (fTemp3 * fTemp110)):(fSlow3 * (fTemp1 * fTemp110))))) + (fSlow278 * (iSlow1?(fSlow3 * (fTemp3 * fTemp111)):(fSlow3 * (fTemp1 * fTemp111))))) + (fSlow280 * (iSlow1?(fSlow3 * (fTemp3 * fTemp112)):(fSlow3 * (fTemp1 * fTemp112)))))))))))) + (fSlow281 * (((((((fSlow283 * (iSlow1?(fSlow3 * (fTemp3 * fTemp113)):(fSlow3 * (fTemp1 * fTemp113)))) + (fSlow285 * (iSlow1?(fSlow3 * (fTemp3 * fTemp114)):(fSlow3 * (fTemp1 * fTemp114))))) + (fSlow287 * (iSlow1?(fSlow3 * (fTemp3 * fTemp115)):(fSlow3 * (fTemp1 * fTemp115))))) + (fSlow290 * (iSlow1?(fSlow3 * (fTemp3 * fTemp116)):(fSlow3 * (fTemp1 * fTemp116))))) + (fSlow292 * (iSlow1?(fSlow3 * (fTemp3 * fTemp117)):(fSlow3 * (fTemp1 * fTemp117))))) + (fSlow295 * (iSlow1?(fSlow3 * (fTemp3 * fTemp118)):(fSlow3 * (fTemp1 * fTemp118))))) + (fSlow297 * (iSlow1?(fSlow3 * (fTemp3 * fTemp119)):(fSlow3 * (fTemp1 * fTemp119))))))) + (fSlow298 * (((fSlow300 * (iSlow1?(fSlow3 * (fTemp3 * fTemp120)):(fSlow3 * (fTemp1 * fTemp120)))) + (fSlow302 * (iSlow1?(fSlow3 * (fTemp3 * fTemp121)):(fSlow3 * (fTemp1 * fTemp121))))) + (fSlow304 * (iSlow1?(fSlow3 * (fTemp3 * fTemp122)):(fSlow3 * (fTemp1 * fTemp122)))))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp123))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp66)):(fSlow3 * (fRec0[0] * fTemp66))) + (fSlow305 * fTemp123))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp100)):(fSlow3 * (fRec0[0] * fTemp100))) + (fSlow306 * fTemp123))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp67)):(fSlow3 * (fRec0[0] * fTemp67))) + (fSlow307 * fTemp123))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow308 * fTemp123))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp68)):(fSlow3 * (fRec0[0] * fTemp68))) + (fSlow309 * fTemp123))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp96)):(fSlow3 * (fRec0[0] * fTemp96))) + (fSlow310 * fTemp123))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp69)):(fSlow3 * (fRec0[0] * fTemp69))) + (fSlow311 * fTemp123))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow312 * fTemp123))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow313 * fTemp123))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow314 * fTemp123))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp70)):(fSlow3 * (fRec0[0] * fTemp70))) + (fSlow315 * fTemp123))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp101)):(fSlow3 * (fRec0[0] * fTemp101))) + (fSlow316 * fTemp123))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp71)):(fSlow3 * (fRec0[0] * fTemp71))) + (fSlow317 * fTemp123))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow318 * fTemp123))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp51)):(fSlow3 * (fRec0[0] * fTemp51))) + (fSlow319 * fTemp123))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow320 * fTemp123))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp52)):(fSlow3 * (fRec0[0] * fTemp52))) + (fSlow321 * fTemp123))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow322 * fTemp123))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp72)):(fSlow3 * (fRec0[0] * fTemp72))) + (fSlow323 * fTemp123))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp97)):(fSlow3 * (fRec0[0] * fTemp97))) + (fSlow324 * fTemp123))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp73)):(fSlow3 * (fRec0[0] * fTemp73))) + (fSlow325 * fTemp123))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow326 * fTemp123))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp53)):(fSlow3 * (fRec0[0] * fTemp53))) + (fSlow327 * fTemp123))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow328 * fTemp123))); + output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow329 * fTemp123))); + output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp102)):(fSlow3 * (fRec0[0] * fTemp102))) + (fSlow330 * fTemp123))); + output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp54)):(fSlow3 * (fRec0[0] * fTemp54))) + (fSlow331 * fTemp123))); + output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow332 * fTemp123))); + output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp74)):(fSlow3 * (fRec0[0] * fTemp74))) + (fSlow333 * fTemp123))); + output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp103)):(fSlow3 * (fRec0[0] * fTemp103))) + (fSlow334 * fTemp123))); + output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp75)):(fSlow3 * (fRec0[0] * fTemp75))) + (fSlow335 * fTemp123))); + output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow336 * fTemp123))); + output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp55)):(fSlow3 * (fRec0[0] * fTemp55))) + (fSlow337 * fTemp123))); + output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp104)):(fSlow3 * (fRec0[0] * fTemp104))) + (fSlow338 * fTemp123))); + output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow339 * fTemp123))); + output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow340 * fTemp123))); + output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow341 * fTemp123))); + output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow342 * fTemp123))); + output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp56)):(fSlow3 * (fRec0[0] * fTemp56))) + (fSlow343 * fTemp123))); + output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow344 * fTemp123))); + output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp76)):(fSlow3 * (fRec0[0] * fTemp76))) + (fSlow345 * fTemp123))); + output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp98)):(fSlow3 * (fRec0[0] * fTemp98))) + (fSlow346 * fTemp123))); + output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp77)):(fSlow3 * (fRec0[0] * fTemp77))) + (fSlow347 * fTemp123))); + output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow348 * fTemp123))); + output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp57)):(fSlow3 * (fRec0[0] * fTemp57))) + (fSlow349 * fTemp123))); + output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow350 * fTemp123))); + output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow351 * fTemp123))); + output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow352 * fTemp123))); + output49[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp87)):(fSlow3 * (fRec0[0] * fTemp87))) + (fSlow353 * fTemp123))); + output50[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp105)):(fSlow3 * (fRec0[0] * fTemp105))) + (fSlow354 * fTemp123))); + output51[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow355 * fTemp123))); + output52[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow356 * fTemp123))); + output53[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp58)):(fSlow3 * (fRec0[0] * fTemp58))) + (fSlow357 * fTemp123))); + output54[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp88)):(fSlow3 * (fRec0[0] * fTemp88))) + (fSlow358 * fTemp123))); + output55[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp78)):(fSlow3 * (fRec0[0] * fTemp78))) + (fSlow359 * fTemp123))); + output56[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp106)):(fSlow3 * (fRec0[0] * fTemp106))) + (fSlow360 * fTemp123))); + output57[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp79)):(fSlow3 * (fRec0[0] * fTemp79))) + (fSlow361 * fTemp123))); + output58[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow362 * fTemp123))); + output59[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp59)):(fSlow3 * (fRec0[0] * fTemp59))) + (fSlow363 * fTemp123))); + output60[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp107)):(fSlow3 * (fRec0[0] * fTemp107))) + (fSlow364 * fTemp123))); + output61[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow365 * fTemp123))); + output62[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow366 * fTemp123))); + output63[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp113)):(fSlow3 * (fRec0[0] * fTemp113))) + (fSlow367 * fTemp123))); + output64[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp89)):(fSlow3 * (fRec0[0] * fTemp89))) + (fSlow368 * fTemp123))); + output65[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp114)):(fSlow3 * (fRec0[0] * fTemp114))) + (fSlow369 * fTemp123))); + output66[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow370 * fTemp123))); + output67[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow371 * fTemp123))); + output68[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp90)):(fSlow3 * (fRec0[0] * fTemp90))) + (fSlow372 * fTemp123))); + output69[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp60)):(fSlow3 * (fRec0[0] * fTemp60))) + (fSlow373 * fTemp123))); + output70[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow374 * fTemp123))); + output71[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp80)):(fSlow3 * (fRec0[0] * fTemp80))) + (fSlow375 * fTemp123))); + output72[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp99)):(fSlow3 * (fRec0[0] * fTemp99))) + (fSlow376 * fTemp123))); + output73[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp81)):(fSlow3 * (fRec0[0] * fTemp81))) + (fSlow377 * fTemp123))); + output74[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow378 * fTemp123))); + output75[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp61)):(fSlow3 * (fRec0[0] * fTemp61))) + (fSlow379 * fTemp123))); + output76[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow380 * fTemp123))); + output77[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))) + (fSlow381 * fTemp123))); + output78[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow382 * fTemp123))); + output79[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp115)):(fSlow3 * (fRec0[0] * fTemp115))) + (fSlow383 * fTemp123))); + output80[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow384 * fTemp123))); + output81[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp91)):(fSlow3 * (fRec0[0] * fTemp91))) + (fSlow385 * fTemp123))); + output82[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp108)):(fSlow3 * (fRec0[0] * fTemp108))) + (fSlow386 * fTemp123))); + output83[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp116)):(fSlow3 * (fRec0[0] * fTemp116))) + (fSlow387 * fTemp123))); + output84[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow388 * fTemp123))); + output85[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow389 * fTemp123))); + output86[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp92)):(fSlow3 * (fRec0[0] * fTemp92))) + (fSlow390 * fTemp123))); + output87[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp62)):(fSlow3 * (fRec0[0] * fTemp62))) + (fSlow391 * fTemp123))); + output88[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp109)):(fSlow3 * (fRec0[0] * fTemp109))) + (fSlow392 * fTemp123))); + output89[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp82)):(fSlow3 * (fRec0[0] * fTemp82))) + (fSlow393 * fTemp123))); + output90[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp110)):(fSlow3 * (fRec0[0] * fTemp110))) + (fSlow394 * fTemp123))); + output91[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp83)):(fSlow3 * (fRec0[0] * fTemp83))) + (fSlow395 * fTemp123))); + output92[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow396 * fTemp123))); + output93[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp63)):(fSlow3 * (fRec0[0] * fTemp63))) + (fSlow397 * fTemp123))); + output94[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp111)):(fSlow3 * (fRec0[0] * fTemp111))) + (fSlow398 * fTemp123))); + output95[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow399 * fTemp123))); + output96[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow400 * fTemp123))); + output97[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp117)):(fSlow3 * (fRec0[0] * fTemp117))) + (fSlow401 * fTemp123))); + output98[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp112)):(fSlow3 * (fRec0[0] * fTemp112))) + (fSlow402 * fTemp123))); + output99[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp120)):(fSlow3 * (fRec0[0] * fTemp120))) + (fSlow403 * fTemp123))); + output100[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp93)):(fSlow3 * (fRec0[0] * fTemp93))) + (fSlow404 * fTemp123))); + output101[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp121)):(fSlow3 * (fRec0[0] * fTemp121))) + (fSlow405 * fTemp123))); + output102[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow406 * fTemp123))); + output103[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp118)):(fSlow3 * (fRec0[0] * fTemp118))) + (fSlow407 * fTemp123))); + output104[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp94)):(fSlow3 * (fRec0[0] * fTemp94))) + (fSlow408 * fTemp123))); + output105[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow409 * fTemp123))); + output106[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow410 * fTemp123))); + output107[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp64)):(fSlow3 * (fRec0[0] * fTemp64))) + (fSlow411 * fTemp123))); + output108[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp95)):(fSlow3 * (fRec0[0] * fTemp95))) + (fSlow412 * fTemp123))); + output109[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp84)):(fSlow3 * (fRec0[0] * fTemp84))) + (fSlow413 * fTemp123))); + output110[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp86)):(fSlow3 * (fRec0[0] * fTemp86))) + (fSlow414 * fTemp123))); + output111[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp85)):(fSlow3 * (fRec0[0] * fTemp85))) + (fSlow415 * fTemp123))); + output112[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow416 * fTemp123))); + output113[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp65)):(fSlow3 * (fRec0[0] * fTemp65))) + (fSlow417 * fTemp123))); + output114[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow418 * fTemp123))); + output115[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow419 * fTemp123))); + output116[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow420 * fTemp123))); + output117[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp119)):(fSlow3 * (fRec0[0] * fTemp119))) + (fSlow421 * fTemp123))); + output118[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow422 * fTemp123))); + output119[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp122)):(fSlow3 * (fRec0[0] * fTemp122))) + (fSlow423 * fTemp123))); + output120[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow424 * fTemp123))); + fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2HOA6.cpp b/source/HOAUGens/HOABeamDirac2HOA6.cpp new file mode 100644 index 0000000000..0e5aa7e562 --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2HOA6.cpp @@ -0,0 +1,2116 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA6" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/* link with : "" */ +#include +#include + +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOABeamDirac2HOA6"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 49; + + } + virtual int getNumOutputs() { + return 49; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); + fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(2.5)); + fConst3 = double(tgamma(1.0)); + fConst4 = double(tgamma(5.0)); + fConst5 = sqrt((5.0 * (fConst3 / fConst4))); + fConst6 = double(tgamma(2.0)); + fConst7 = double(tgamma(6.0)); + fConst8 = sqrt((7.0 * (fConst6 / fConst7))); + fConst9 = (31.915382432114615 * fConst8); + fConst10 = (15.957691216057308 * fConst8); + fConst11 = double(tgamma(9.0)); + fConst12 = double(tgamma(4.5)); + fConst13 = (sqrt((9.0 * (fConst3 / fConst11))) * fConst12); + fConst14 = (25.532305945691693 * fConst13); + fConst15 = double(tgamma(3.0)); + fConst16 = double(tgamma(7.0)); + fConst17 = (sqrt((9.0 * (fConst15 / fConst16))) * fConst2); + fConst18 = (1.4142135623730951 * fConst17); + fConst19 = (0.70710678118654757 * fConst17); + fConst20 = (12.766152972845846 * fConst13); + fConst21 = double(tgamma(4.0)); + fConst22 = double(tgamma(8.0)); + fConst23 = (sqrt((11.0 * (fConst21 / fConst22))) * fConst2); + fConst24 = (0.94280904158206336 * fConst23); + fConst25 = (0.47140452079103168 * fConst23); + fConst26 = (sqrt((13.0 * (fConst3 / double(tgamma(13.0))))) * double(tgamma(6.5))); + fConst27 = (51.064611891383386 * fConst26); + fConst28 = double(tgamma(11.0)); + fConst29 = (sqrt((13.0 * (fConst15 / fConst28))) * fConst12); + fConst30 = (1.4142135623730951 * fConst29); + fConst31 = (sqrt((13.0 * (fConst4 / fConst11))) * fConst2); + fConst32 = (0.70710678118654757 * fConst31); + fConst33 = (0.35355339059327379 * fConst31); + fConst34 = (0.70710678118654757 * fConst29); + fConst35 = double(tgamma(5.5)); + fConst36 = sqrt((11.0 * (fConst3 / fConst28))); + fConst37 = (25.532305945691693 * fConst36); + fConst38 = sqrt((13.0 * (fConst6 / double(tgamma(12.0))))); + fConst39 = (280.85536540260864 * fConst38); + fConst40 = double(tgamma(3.5)); + fConst41 = sqrt((7.0 * (fConst3 / fConst16))); + fConst42 = (6.3830764864229232 * fConst41); + fConst43 = sqrt((9.0 * (fConst6 / fConst22))); + fConst44 = (44.681535404960464 * fConst43); + fConst45 = sqrt((11.0 * (fConst15 / fConst11))); + fConst46 = (0.70710678118654757 * fConst45); + fConst47 = double(tgamma(10.0)); + fConst48 = sqrt((13.0 * (fConst21 / fConst47))); + fConst49 = (0.47140452079103168 * fConst48); + fConst50 = double(tgamma(1.5)); + fConst51 = sqrt((3.0 * (fConst3 / fConst15))); + fConst52 = (1.5957691216057308 * fConst51); + fConst53 = sqrt((5.0 * (fConst6 / fConst21))); + fConst54 = (4.7873073648171927 * fConst53); + fConst55 = sqrt((7.0 * (fConst15 / fConst4))); + fConst56 = (0.70710678118654757 * fConst55); + fConst57 = sqrt((9.0 * (fConst21 / fConst7))); + fConst58 = (0.47140452079103168 * fConst57); + fConst59 = sqrt((11.0 * (fConst4 / fConst16))); + fConst60 = (0.35355339059327379 * fConst59); + fConst61 = sqrt((13.0 * (fConst7 / fConst22))); + fConst62 = (0.28284271247461906 * fConst61); + fConst63 = (sqrt((11.0 * (fConst6 / fConst47))) * fConst12); + fConst64 = (229.79075351122526 * fConst63); + fConst65 = (114.89537675561263 * fConst63); + fConst66 = (0.12698727186848197 * (fConst51 * fConst50)); + fConst67 = (fConst5 * fConst2); + fConst68 = (0.50794908747392786 * fConst67); + fConst69 = (0.3809618156054459 * (fConst53 * fConst50)); + fConst70 = (0.25397454373696393 * fConst67); + fConst71 = (0.50794908747392786 * (fConst41 * fConst40)); + fConst72 = (fConst8 * fConst2); + fConst73 = (2.5397454373696391 * fConst72); + fConst74 = (0.056269769759819135 * (fConst55 * fConst50)); + fConst75 = (1.2698727186848195 * fConst72); + fConst76 = (2.0317963498957115 * fConst13); + fConst77 = (3.5556436123174948 * (fConst43 * fConst40)); + fConst78 = (0.11253953951963827 * fConst17); + fConst79 = (0.037513179839879424 * (fConst57 * fConst50)); + fConst80 = (0.056269769759819135 * fConst17); + fConst81 = (1.0158981749478557 * fConst13); + fConst82 = (2.0317963498957115 * (fConst36 * fConst35)); + fConst83 = (18.286167149061402 * fConst63); + fConst84 = (0.056269769759819135 * (fConst45 * fConst40)); + fConst85 = (0.075026359679758847 * fConst23); + fConst86 = (0.028134884879909568 * (fConst59 * fConst50)); + fConst87 = (0.037513179839879424 * fConst23); + fConst88 = (9.1430835745307011 * fConst63); + fConst89 = (4.0635926997914229 * fConst26); + fConst90 = (22.349759848852827 * (fConst38 * fConst35)); + fConst91 = (0.11253953951963827 * fConst29); + fConst92 = (0.037513179839879424 * (fConst48 * fConst40)); + fConst93 = (0.056269769759819135 * fConst31); + fConst94 = (0.022507907903927659 * (fConst61 * fConst50)); + fConst95 = (0.028134884879909568 * fConst31); + fConst96 = (0.056269769759819135 * fConst29); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + double fSlow0 = double(fCheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = (fSlow0 > 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = mydsp_faustpower2_f(fSlow7); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = double(fVslider1); + double fSlow11 = cos(fSlow10); + double fSlow12 = sin(fSlow10); + double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); + double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow15 = mydsp_faustpower2_f(fSlow11); + double fSlow16 = ((2.0 * fSlow15) + -1.0); + double fSlow17 = (3.1915382432114616 * fSlow16); + double fSlow18 = (fSlow11 * fSlow7); + double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); + double fSlow20 = (fSlow16 * fSlow7); + double fSlow21 = (fConst10 * fSlow20); + double fSlow22 = ((4.0 * fSlow15) + -1.0); + double fSlow23 = (fSlow22 + -1.0); + double fSlow24 = (fSlow23 * fSlow11); + double fSlow25 = (fConst14 * ((fSlow24 * fSlow9) * fSlow12)); + double fSlow26 = ((78.986541696685876 * fSlow8) + -11.283791670955125); + double fSlow27 = (fSlow26 * fSlow11); + double fSlow28 = (fConst18 * (fSlow27 * fSlow12)); + double fSlow29 = (fSlow16 * fSlow26); + double fSlow30 = (fConst19 * fSlow29); + double fSlow31 = ((2.0 * fSlow16) + -1.0); + double fSlow32 = (1.0 - fSlow31); + double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow15))); + double fSlow34 = (fConst20 * (fSlow33 * fSlow9)); + double fSlow35 = ((4.5 * fSlow26) + -67.702750025730751); + double fSlow36 = ((fSlow35 * fSlow11) * fSlow7); + double fSlow37 = (fConst24 * (fSlow36 * fSlow12)); + double fSlow38 = ((fSlow16 * fSlow35) * fSlow7); + double fSlow39 = (fConst25 * fSlow38); + double fSlow40 = (1.0 - (4.0 * ((1.0 - fSlow23) * fSlow15))); + double fSlow41 = (0.0 - (2.0 * ((fSlow23 - fSlow40) * fSlow11))); + double fSlow42 = mydsp_faustpower2_f(fSlow9); + double fSlow43 = (fConst27 * ((fSlow41 * fSlow42) * fSlow12)); + double fSlow44 = ((893.67630033964599 * fSlow8) + -81.24330003087691); + double fSlow45 = ((fSlow23 * fSlow44) * fSlow11); + double fSlow46 = (fConst30 * ((fSlow45 * fSlow9) * fSlow12)); + double fSlow47 = ((3.6666666666666665 * (fSlow35 * fSlow8)) - (3.5 * fSlow26)); + double fSlow48 = (fSlow47 * fSlow11); + double fSlow49 = (fConst32 * (fSlow48 * fSlow12)); + double fSlow50 = (fSlow16 * fSlow47); + double fSlow51 = (fConst33 * fSlow50); + double fSlow52 = (fSlow33 * fSlow44); + double fSlow53 = (fConst34 * (fSlow52 * fSlow9)); + double fSlow54 = ((2.0 * fSlow33) - fSlow31); + double fSlow55 = ((2.0 * ((fSlow32 + fSlow54) * fSlow15)) + -1.0); + double fSlow56 = (fConst27 * (fSlow55 * fSlow42)); + double fSlow57 = pow(fSlow9, 2.5); + double fSlow58 = (fConst35 * fSlow57); + double fSlow59 = (fSlow40 * fSlow12); + double fSlow60 = (fSlow54 * fSlow11); + double fSlow61 = (fSlow40 * fSlow7); + double fSlow62 = (fConst39 * (fSlow61 * fSlow12)); + double fSlow63 = (fSlow60 * fSlow7); + double fSlow64 = (fConst39 * fSlow63); + double fSlow65 = pow(fSlow9, 1.5); + double fSlow66 = (fConst40 * fSlow65); + double fSlow67 = (fSlow22 * fSlow12); + double fSlow68 = (fSlow31 * fSlow11); + double fSlow69 = (fSlow22 * fSlow7); + double fSlow70 = (fConst44 * (fSlow69 * fSlow12)); + double fSlow71 = (fSlow68 * fSlow7); + double fSlow72 = (fConst44 * fSlow71); + double fSlow73 = ((284.35155010806915 * fSlow8) + -31.594616678674353); + double fSlow74 = (fSlow22 * fSlow73); + double fSlow75 = (fConst46 * (fSlow74 * fSlow12)); + double fSlow76 = ((fSlow31 * fSlow73) * fSlow11); + double fSlow77 = (fConst46 * fSlow76); + double fSlow78 = ((5.5 * fSlow73) + -252.75693342939482); + double fSlow79 = ((fSlow22 * fSlow78) * fSlow7); + double fSlow80 = (fConst49 * (fSlow79 * fSlow12)); + double fSlow81 = (((fSlow31 * fSlow78) * fSlow11) * fSlow7); + double fSlow82 = (fConst49 * fSlow81); + double fSlow83 = pow(fSlow9, 0.5); + double fSlow84 = (fConst50 * fSlow83); + double fSlow85 = (fConst54 * (fSlow7 * fSlow12)); + double fSlow86 = (fConst54 * fSlow18); + double fSlow87 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); + double fSlow88 = (fConst56 * (fSlow87 * fSlow12)); + double fSlow89 = (fSlow87 * fSlow11); + double fSlow90 = (fConst56 * fSlow89); + double fSlow91 = ((3.5 * fSlow87) + -13.540550005146152); + double fSlow92 = (fSlow91 * fSlow7); + double fSlow93 = (fConst58 * (fSlow92 * fSlow12)); + double fSlow94 = ((fSlow91 * fSlow11) * fSlow7); + double fSlow95 = (fConst58 * fSlow94); + double fSlow96 = ((3.0 * (fSlow91 * fSlow8)) - (2.5 * fSlow87)); + double fSlow97 = (fConst60 * (fSlow96 * fSlow12)); + double fSlow98 = (fSlow96 * fSlow11); + double fSlow99 = (fConst60 * fSlow98); + double fSlow100 = ((2.75 * fSlow96) - (2.0 * fSlow91)); + double fSlow101 = (fSlow100 * fSlow7); + double fSlow102 = (fConst62 * (fSlow101 * fSlow12)); + double fSlow103 = ((fSlow100 * fSlow11) * fSlow7); + double fSlow104 = (fConst62 * fSlow103); + double fSlow105 = ((3.0 * fSlow8) + -1.0); + double fSlow106 = (1.1180339887498949 * fSlow105); + double fSlow107 = ((2.5 * fSlow105) + -2.0); + double fSlow108 = ((2.333333333333333 * (fSlow107 * fSlow8)) - (1.5 * fSlow105)); + double fSlow109 = (0.75 * fSlow108); + double fSlow110 = (0.88191710368819687 * fSlow107); + double fSlow111 = ((fSlow24 * fSlow42) * fSlow12); + double fSlow112 = (fConst64 * fSlow111); + double fSlow113 = ((2.25 * fSlow108) - (1.3333333333333333 * fSlow107)); + double fSlow114 = (0.66332495807108005 * fSlow113); + double fSlow115 = (fSlow33 * fSlow42); + double fSlow116 = (fConst65 * fSlow115); + double fSlow117 = ((2.2000000000000002 * (fSlow113 * fSlow8)) - (1.25 * fSlow108)); + double fSlow118 = (0.60092521257733145 * fSlow117); + double fSlow119 = (fConst66 * (fSlow83 * fSlow12)); + double fSlow120 = (0.13783222385544802 * fSlow7); + double fSlow121 = (fConst66 * (fSlow11 * fSlow83)); + double fSlow122 = (fConst68 * ((fSlow11 * fSlow9) * fSlow12)); + double fSlow123 = (fConst69 * ((fSlow7 * fSlow83) * fSlow12)); + double fSlow124 = (0.088970317927147144 * fSlow105); + double fSlow125 = (fConst69 * (fSlow18 * fSlow83)); + double fSlow126 = (fConst70 * (fSlow16 * fSlow9)); + double fSlow127 = (fConst71 * ((fSlow22 * fSlow65) * fSlow12)); + double fSlow128 = (fConst73 * ((fSlow18 * fSlow9) * fSlow12)); + double fSlow129 = (fConst74 * ((fSlow87 * fSlow83) * fSlow12)); + double fSlow130 = (0.070180733224632072 * (fSlow107 * fSlow7)); + double fSlow131 = (fConst74 * (fSlow89 * fSlow83)); + double fSlow132 = (fConst75 * (fSlow20 * fSlow9)); + double fSlow133 = (fConst71 * (fSlow68 * fSlow65)); + double fSlow134 = (fConst76 * fSlow111); + double fSlow135 = (fConst77 * ((fSlow69 * fSlow65) * fSlow12)); + double fSlow136 = (fConst78 * ((fSlow27 * fSlow9) * fSlow12)); + double fSlow137 = (fConst79 * ((fSlow92 * fSlow83) * fSlow12)); + double fSlow138 = (0.059683103659460751 * fSlow108); + double fSlow139 = (fConst79 * (fSlow94 * fSlow83)); + double fSlow140 = (fConst80 * (fSlow29 * fSlow9)); + double fSlow141 = (fConst77 * (fSlow71 * fSlow65)); + double fSlow142 = (fConst81 * fSlow115); + double fSlow143 = (fConst82 * ((fSlow40 * fSlow57) * fSlow12)); + double fSlow144 = (fConst83 * (((fSlow24 * fSlow7) * fSlow42) * fSlow12)); + double fSlow145 = (fConst84 * ((fSlow74 * fSlow65) * fSlow12)); + double fSlow146 = (fConst85 * ((fSlow36 * fSlow9) * fSlow12)); + double fSlow147 = (fConst86 * ((fSlow96 * fSlow83) * fSlow12)); + double fSlow148 = (0.052785722976618307 * (fSlow113 * fSlow7)); + double fSlow149 = (fConst86 * (fSlow98 * fSlow83)); + double fSlow150 = (fConst87 * (fSlow38 * fSlow9)); + double fSlow151 = (fConst84 * (fSlow76 * fSlow65)); + double fSlow152 = (fConst88 * ((fSlow33 * fSlow7) * fSlow42)); + double fSlow153 = (fConst82 * (fSlow60 * fSlow57)); + double fSlow154 = mydsp_faustpower3_f(fSlow9); + double fSlow155 = (fConst89 * ((fSlow41 * fSlow154) * fSlow12)); + double fSlow156 = (fConst90 * ((fSlow61 * fSlow57) * fSlow12)); + double fSlow157 = (fConst91 * ((fSlow45 * fSlow42) * fSlow12)); + double fSlow158 = (fConst92 * ((fSlow79 * fSlow65) * fSlow12)); + double fSlow159 = (fConst93 * ((fSlow48 * fSlow9) * fSlow12)); + double fSlow160 = (fConst94 * ((fSlow101 * fSlow83) * fSlow12)); + double fSlow161 = (0.047820109005115151 * fSlow117); + double fSlow162 = (fConst94 * (fSlow103 * fSlow83)); + double fSlow163 = (fConst95 * (fSlow50 * fSlow9)); + double fSlow164 = (fConst92 * (fSlow81 * fSlow65)); + double fSlow165 = (fConst96 * (fSlow52 * fSlow42)); + double fSlow166 = (fConst90 * (fSlow63 * fSlow57)); + double fSlow167 = (fConst89 * (fSlow55 * fSlow154)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input4[i]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input8[i]); + double fTemp5 = double(input10[i]); + double fTemp6 = double(input14[i]); + double fTemp7 = double(input16[i]); + double fTemp8 = double(input18[i]); + double fTemp9 = double(input22[i]); + double fTemp10 = double(input24[i]); + double fTemp11 = double(input28[i]); + double fTemp12 = double(input32[i]); + double fTemp13 = double(input36[i]); + double fTemp14 = double(input38[i]); + double fTemp15 = double(input40[i]); + double fTemp16 = double(input44[i]); + double fTemp17 = double(input46[i]); + double fTemp18 = double(input48[i]); + double fTemp19 = double(input25[i]); + double fTemp20 = double(input35[i]); + double fTemp21 = double(input37[i]); + double fTemp22 = double(input47[i]); + double fTemp23 = double(input9[i]); + double fTemp24 = double(input15[i]); + double fTemp25 = double(input17[i]); + double fTemp26 = double(input23[i]); + double fTemp27 = double(input27[i]); + double fTemp28 = double(input33[i]); + double fTemp29 = double(input39[i]); + double fTemp30 = double(input45[i]); + double fTemp31 = double(input1[i]); + double fTemp32 = double(input3[i]); + double fTemp33 = double(input5[i]); + double fTemp34 = double(input7[i]); + double fTemp35 = double(input11[i]); + double fTemp36 = double(input13[i]); + double fTemp37 = double(input19[i]); + double fTemp38 = double(input21[i]); + double fTemp39 = double(input29[i]); + double fTemp40 = double(input31[i]); + double fTemp41 = double(input41[i]); + double fTemp42 = double(input43[i]); + double fTemp43 = double(input6[i]); + double fTemp44 = double(input20[i]); + double fTemp45 = double(input2[i]); + double fTemp46 = double(input12[i]); + double fTemp47 = double(input26[i]); + double fTemp48 = double(input30[i]); + double fTemp49 = double(input34[i]); + double fTemp50 = double(input42[i]); + double fTemp51 = ((fSlow9 * (((((((((((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow28 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow43 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow49 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow56 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18)))))) + ((fSlow58 * (((fConst37 * ((fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19)))) + (fSlow60 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20)))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow64 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))))) + ((fSlow66 * (((((((fConst42 * ((fSlow67 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23)))) + (fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24)))))) + (fSlow70 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow72 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27))))) + (fSlow77 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28))))) + (fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow82 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30)))))) + ((fSlow84 * (((((((((((fConst52 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32)))))) + (fSlow85 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow86 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow90 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow93 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))) + (fSlow95 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38))))) + (fSlow97 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39))))) + (fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40))))) + (fSlow102 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow104 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow106 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow109 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow7 * (((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45)))) + (fSlow110 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46))))) + (fSlow112 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47))))) + (fSlow114 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48))))) + (fSlow116 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49))))))) + (fSlow118 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50))))))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp51))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow119 * fTemp51))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))) + (fSlow120 * fTemp51))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow121 * fTemp51))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow122 * fTemp51))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow123 * fTemp51))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow124 * fTemp51))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow125 * fTemp51))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow126 * fTemp51))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow127 * fTemp51))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow128 * fTemp51))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow129 * fTemp51))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow130 * fTemp51))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow131 * fTemp51))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow132 * fTemp51))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow133 * fTemp51))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow134 * fTemp51))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow135 * fTemp51))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow136 * fTemp51))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow137 * fTemp51))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow138 * fTemp51))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow139 * fTemp51))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow140 * fTemp51))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow141 * fTemp51))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow142 * fTemp51))); + output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow143 * fTemp51))); + output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow144 * fTemp51))); + output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow145 * fTemp51))); + output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow146 * fTemp51))); + output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow147 * fTemp51))); + output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow148 * fTemp51))); + output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow149 * fTemp51))); + output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow150 * fTemp51))); + output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow151 * fTemp51))); + output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow152 * fTemp51))); + output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow153 * fTemp51))); + output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow155 * fTemp51))); + output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow156 * fTemp51))); + output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow157 * fTemp51))); + output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow158 * fTemp51))); + output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow159 * fTemp51))); + output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow160 * fTemp51))); + output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow161 * fTemp51))); + output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow162 * fTemp51))); + output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow163 * fTemp51))); + output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow164 * fTemp51))); + output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow165 * fTemp51))); + output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow166 * fTemp51))); + output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow167 * fTemp51))); + fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2HOA7.cpp b/source/HOAUGens/HOABeamDirac2HOA7.cpp new file mode 100644 index 0000000000..92b32056fc --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2HOA7.cpp @@ -0,0 +1,2403 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA7" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/* link with : "" */ +#include +#include + +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fConst119; + double fConst120; + double fConst121; + double fConst122; + double fConst123; + double fConst124; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOABeamDirac2HOA7"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 64; + + } + virtual int getNumOutputs() { + return 64; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); + fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(2.5)); + fConst3 = double(tgamma(1.0)); + fConst4 = double(tgamma(5.0)); + fConst5 = sqrt((5.0 * (fConst3 / fConst4))); + fConst6 = double(tgamma(2.0)); + fConst7 = double(tgamma(6.0)); + fConst8 = sqrt((7.0 * (fConst6 / fConst7))); + fConst9 = (31.915382432114615 * fConst8); + fConst10 = (15.957691216057308 * fConst8); + fConst11 = double(tgamma(9.0)); + fConst12 = double(tgamma(4.5)); + fConst13 = (sqrt((9.0 * (fConst3 / fConst11))) * fConst12); + fConst14 = (25.532305945691693 * fConst13); + fConst15 = double(tgamma(3.0)); + fConst16 = double(tgamma(7.0)); + fConst17 = (sqrt((9.0 * (fConst15 / fConst16))) * fConst2); + fConst18 = (1.4142135623730951 * fConst17); + fConst19 = (0.70710678118654757 * fConst17); + fConst20 = (12.766152972845846 * fConst13); + fConst21 = double(tgamma(4.0)); + fConst22 = double(tgamma(8.0)); + fConst23 = (sqrt((11.0 * (fConst21 / fConst22))) * fConst2); + fConst24 = (0.94280904158206336 * fConst23); + fConst25 = (0.47140452079103168 * fConst23); + fConst26 = double(tgamma(13.0)); + fConst27 = double(tgamma(6.5)); + fConst28 = (sqrt((13.0 * (fConst3 / fConst26))) * fConst27); + fConst29 = (51.064611891383386 * fConst28); + fConst30 = double(tgamma(11.0)); + fConst31 = (sqrt((13.0 * (fConst15 / fConst30))) * fConst12); + fConst32 = (1.4142135623730951 * fConst31); + fConst33 = (sqrt((13.0 * (fConst4 / fConst11))) * fConst2); + fConst34 = (0.70710678118654757 * fConst33); + fConst35 = (0.35355339059327379 * fConst33); + fConst36 = (0.70710678118654757 * fConst31); + fConst37 = double(tgamma(12.0)); + fConst38 = (sqrt((15.0 * (fConst21 / fConst37))) * fConst12); + fConst39 = (0.94280904158206336 * fConst38); + fConst40 = double(tgamma(10.0)); + fConst41 = (sqrt((15.0 * (fConst7 / fConst40))) * fConst2); + fConst42 = (0.28284271247461906 * fConst41); + fConst43 = (sqrt((15.0 * (fConst6 / double(tgamma(14.0))))) * fConst27); + fConst44 = (663.83995458798404 * fConst43); + fConst45 = double(tgamma(5.5)); + fConst46 = sqrt((11.0 * (fConst3 / fConst30))); + fConst47 = (25.532305945691693 * fConst46); + fConst48 = sqrt((13.0 * (fConst6 / fConst37))); + fConst49 = (280.85536540260864 * fConst48); + fConst50 = sqrt((15.0 * (fConst15 / fConst26))); + fConst51 = (0.70710678118654757 * fConst50); + fConst52 = (sqrt((11.0 * (fConst6 / fConst40))) * fConst12); + fConst53 = (229.79075351122526 * fConst52); + fConst54 = (114.89537675561263 * fConst52); + fConst55 = (0.47140452079103168 * fConst38); + fConst56 = double(tgamma(3.5)); + fConst57 = sqrt((7.0 * (fConst3 / fConst16))); + fConst58 = (6.3830764864229232 * fConst57); + fConst59 = sqrt((9.0 * (fConst6 / fConst22))); + fConst60 = (44.681535404960464 * fConst59); + fConst61 = sqrt((11.0 * (fConst15 / fConst11))); + fConst62 = (0.70710678118654757 * fConst61); + fConst63 = sqrt((13.0 * (fConst21 / fConst40))); + fConst64 = (0.47140452079103168 * fConst63); + fConst65 = sqrt((15.0 * (fConst4 / fConst30))); + fConst66 = (0.35355339059327379 * fConst65); + fConst67 = double(tgamma(1.5)); + fConst68 = sqrt((3.0 * (fConst3 / fConst15))); + fConst69 = (1.5957691216057308 * fConst68); + fConst70 = sqrt((5.0 * (fConst6 / fConst21))); + fConst71 = (4.7873073648171927 * fConst70); + fConst72 = sqrt((7.0 * (fConst15 / fConst4))); + fConst73 = (0.70710678118654757 * fConst72); + fConst74 = sqrt((9.0 * (fConst21 / fConst7))); + fConst75 = (0.47140452079103168 * fConst74); + fConst76 = sqrt((11.0 * (fConst4 / fConst16))); + fConst77 = (0.35355339059327379 * fConst76); + fConst78 = sqrt((13.0 * (fConst7 / fConst22))); + fConst79 = (0.28284271247461906 * fConst78); + fConst80 = sqrt((15.0 * (fConst16 / fConst11))); + fConst81 = (0.23570226039551584 * fConst80); + fConst82 = (sqrt((15.0 * (fConst3 / double(tgamma(15.0))))) * double(tgamma(7.5))); + fConst83 = (102.12922378276677 * fConst82); + fConst84 = (0.56568542494923812 * fConst41); + fConst85 = (0.12698727186848197 * (fConst68 * fConst67)); + fConst86 = (fConst5 * fConst2); + fConst87 = (0.50794908747392786 * fConst86); + fConst88 = (0.3809618156054459 * (fConst70 * fConst67)); + fConst89 = (0.25397454373696393 * fConst86); + fConst90 = (0.50794908747392786 * (fConst57 * fConst56)); + fConst91 = (fConst8 * fConst2); + fConst92 = (2.5397454373696391 * fConst91); + fConst93 = (0.056269769759819135 * (fConst72 * fConst67)); + fConst94 = (1.2698727186848195 * fConst91); + fConst95 = (2.0317963498957115 * fConst13); + fConst96 = (3.5556436123174948 * (fConst59 * fConst56)); + fConst97 = (0.11253953951963827 * fConst17); + fConst98 = (0.037513179839879424 * (fConst74 * fConst67)); + fConst99 = (0.056269769759819135 * fConst17); + fConst100 = (1.0158981749478557 * fConst13); + fConst101 = (2.0317963498957115 * (fConst46 * fConst45)); + fConst102 = (18.286167149061402 * fConst52); + fConst103 = (0.056269769759819135 * (fConst61 * fConst56)); + fConst104 = (0.075026359679758847 * fConst23); + fConst105 = (0.028134884879909568 * (fConst76 * fConst67)); + fConst106 = (0.037513179839879424 * fConst23); + fConst107 = (9.1430835745307011 * fConst52); + fConst108 = (4.0635926997914229 * fConst28); + fConst109 = (22.349759848852827 * (fConst48 * fConst45)); + fConst110 = (0.11253953951963827 * fConst31); + fConst111 = (0.037513179839879424 * (fConst63 * fConst56)); + fConst112 = (0.056269769759819135 * fConst33); + fConst113 = (0.022507907903927659 * (fConst78 * fConst67)); + fConst114 = (0.028134884879909568 * fConst33); + fConst115 = (0.056269769759819135 * fConst31); + fConst116 = (8.1271853995828458 * fConst82); + fConst117 = (52.826705097288496 * fConst43); + fConst118 = (0.056269769759819135 * (fConst50 * fConst45)); + fConst119 = (0.075026359679758847 * fConst38); + fConst120 = (0.028134884879909568 * (fConst65 * fConst56)); + fConst121 = (0.045015815807855318 * fConst41); + fConst122 = (0.018756589919939712 * (fConst80 * fConst67)); + fConst123 = (0.022507907903927659 * fConst41); + fConst124 = (0.037513179839879424 * fConst38); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + double fSlow0 = double(fCheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = (fSlow0 > 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = mydsp_faustpower2_f(fSlow7); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = double(fVslider1); + double fSlow11 = cos(fSlow10); + double fSlow12 = sin(fSlow10); + double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); + double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow15 = mydsp_faustpower2_f(fSlow11); + double fSlow16 = ((2.0 * fSlow15) + -1.0); + double fSlow17 = (3.1915382432114616 * fSlow16); + double fSlow18 = (fSlow11 * fSlow7); + double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); + double fSlow20 = (fSlow16 * fSlow7); + double fSlow21 = (fConst10 * fSlow20); + double fSlow22 = ((4.0 * fSlow15) + -1.0); + double fSlow23 = (fSlow22 + -1.0); + double fSlow24 = (fSlow23 * fSlow11); + double fSlow25 = (fConst14 * ((fSlow24 * fSlow9) * fSlow12)); + double fSlow26 = ((78.986541696685876 * fSlow8) + -11.283791670955125); + double fSlow27 = (fSlow26 * fSlow11); + double fSlow28 = (fConst18 * (fSlow27 * fSlow12)); + double fSlow29 = (fSlow16 * fSlow26); + double fSlow30 = (fConst19 * fSlow29); + double fSlow31 = ((2.0 * fSlow16) + -1.0); + double fSlow32 = (1.0 - fSlow31); + double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow15))); + double fSlow34 = (fConst20 * (fSlow33 * fSlow9)); + double fSlow35 = ((4.5 * fSlow26) + -67.702750025730751); + double fSlow36 = ((fSlow35 * fSlow11) * fSlow7); + double fSlow37 = (fConst24 * (fSlow36 * fSlow12)); + double fSlow38 = ((fSlow16 * fSlow35) * fSlow7); + double fSlow39 = (fConst25 * fSlow38); + double fSlow40 = (1.0 - fSlow23); + double fSlow41 = (1.0 - (4.0 * (fSlow40 * fSlow15))); + double fSlow42 = (0.0 - (2.0 * ((fSlow23 - fSlow41) * fSlow11))); + double fSlow43 = mydsp_faustpower2_f(fSlow9); + double fSlow44 = (fConst29 * ((fSlow42 * fSlow43) * fSlow12)); + double fSlow45 = ((893.67630033964599 * fSlow8) + -81.24330003087691); + double fSlow46 = ((fSlow23 * fSlow45) * fSlow11); + double fSlow47 = (fConst32 * ((fSlow46 * fSlow9) * fSlow12)); + double fSlow48 = ((3.6666666666666665 * (fSlow35 * fSlow8)) - (3.5 * fSlow26)); + double fSlow49 = (fSlow48 * fSlow11); + double fSlow50 = (fConst34 * (fSlow49 * fSlow12)); + double fSlow51 = (fSlow16 * fSlow48); + double fSlow52 = (fConst35 * fSlow51); + double fSlow53 = (fSlow33 * fSlow45); + double fSlow54 = (fConst36 * (fSlow53 * fSlow9)); + double fSlow55 = ((2.0 * fSlow33) - fSlow31); + double fSlow56 = ((2.0 * ((fSlow32 + fSlow55) * fSlow15)) + -1.0); + double fSlow57 = (fConst29 * (fSlow56 * fSlow43)); + double fSlow58 = ((6.5 * fSlow45) + -812.43300030876912); + double fSlow59 = (((fSlow23 * fSlow58) * fSlow11) * fSlow7); + double fSlow60 = (fConst39 * ((fSlow59 * fSlow9) * fSlow12)); + double fSlow61 = ((3.25 * fSlow48) - (2.6666666666666665 * fSlow35)); + double fSlow62 = ((fSlow16 * fSlow61) * fSlow7); + double fSlow63 = (fConst42 * fSlow62); + double fSlow64 = (fSlow56 * fSlow7); + double fSlow65 = (fConst44 * (fSlow64 * fSlow43)); + double fSlow66 = pow(fSlow9, 2.5); + double fSlow67 = (fConst45 * fSlow66); + double fSlow68 = (fSlow41 * fSlow12); + double fSlow69 = (fSlow55 * fSlow11); + double fSlow70 = (fSlow41 * fSlow7); + double fSlow71 = (fConst49 * (fSlow70 * fSlow12)); + double fSlow72 = (fSlow69 * fSlow7); + double fSlow73 = (fConst49 * fSlow72); + double fSlow74 = ((2581.7315343145328 * fSlow8) + -198.59473340881021); + double fSlow75 = (fSlow41 * fSlow74); + double fSlow76 = (fConst51 * (fSlow75 * fSlow12)); + double fSlow77 = ((fSlow55 * fSlow74) * fSlow11); + double fSlow78 = (fConst51 * fSlow77); + double fSlow79 = ((3.0 * fSlow8) + -1.0); + double fSlow80 = ((2.5 * fSlow79) + -2.0); + double fSlow81 = (0.88191710368819687 * fSlow80); + double fSlow82 = ((fSlow24 * fSlow43) * fSlow12); + double fSlow83 = (fConst53 * fSlow82); + double fSlow84 = ((2.333333333333333 * (fSlow80 * fSlow8)) - (1.5 * fSlow79)); + double fSlow85 = ((2.25 * fSlow84) - (1.3333333333333333 * fSlow80)); + double fSlow86 = (0.66332495807108005 * fSlow85); + double fSlow87 = (fSlow33 * fSlow43); + double fSlow88 = (fConst54 * fSlow87); + double fSlow89 = mydsp_faustpower3_f(fSlow9); + double fSlow90 = ((fSlow42 * fSlow89) * fSlow12); + double fSlow91 = (fConst44 * fSlow90); + double fSlow92 = ((2.2000000000000002 * (fSlow85 * fSlow8)) - (1.25 * fSlow84)); + double fSlow93 = ((2.1666666666666665 * fSlow92) - (1.2000000000000002 * fSlow85)); + double fSlow94 = (0.55328333517248807 * fSlow93); + double fSlow95 = (fSlow33 * fSlow58); + double fSlow96 = (fConst55 * (fSlow95 * fSlow43)); + double fSlow97 = pow(fSlow9, 1.5); + double fSlow98 = (fConst56 * fSlow97); + double fSlow99 = (fSlow22 * fSlow12); + double fSlow100 = (fSlow31 * fSlow11); + double fSlow101 = (fSlow22 * fSlow7); + double fSlow102 = (fConst60 * (fSlow101 * fSlow12)); + double fSlow103 = (fSlow100 * fSlow7); + double fSlow104 = (fConst60 * fSlow103); + double fSlow105 = ((284.35155010806915 * fSlow8) + -31.594616678674353); + double fSlow106 = (fSlow22 * fSlow105); + double fSlow107 = (fConst62 * (fSlow106 * fSlow12)); + double fSlow108 = ((fSlow31 * fSlow105) * fSlow11); + double fSlow109 = (fConst62 * fSlow108); + double fSlow110 = ((5.5 * fSlow105) + -252.75693342939482); + double fSlow111 = ((fSlow22 * fSlow110) * fSlow7); + double fSlow112 = (fConst64 * (fSlow111 * fSlow12)); + double fSlow113 = (((fSlow31 * fSlow110) * fSlow11) * fSlow7); + double fSlow114 = (fConst64 * fSlow113); + double fSlow115 = ((4.333333333333333 * (fSlow110 * fSlow8)) - (4.5 * fSlow105)); + double fSlow116 = (fSlow22 * fSlow115); + double fSlow117 = (fConst66 * (fSlow116 * fSlow12)); + double fSlow118 = ((fSlow31 * fSlow115) * fSlow11); + double fSlow119 = (fConst66 * fSlow118); + double fSlow120 = pow(fSlow9, 0.5); + double fSlow121 = (fConst67 * fSlow120); + double fSlow122 = (fConst71 * (fSlow7 * fSlow12)); + double fSlow123 = (fConst71 * fSlow18); + double fSlow124 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); + double fSlow125 = (fConst73 * (fSlow124 * fSlow12)); + double fSlow126 = (fSlow124 * fSlow11); + double fSlow127 = (fConst73 * fSlow126); + double fSlow128 = ((3.5 * fSlow124) + -13.540550005146152); + double fSlow129 = (fSlow128 * fSlow7); + double fSlow130 = (fConst75 * (fSlow129 * fSlow12)); + double fSlow131 = ((fSlow128 * fSlow11) * fSlow7); + double fSlow132 = (fConst75 * fSlow131); + double fSlow133 = ((3.0 * (fSlow128 * fSlow8)) - (2.5 * fSlow124)); + double fSlow134 = (fConst77 * (fSlow133 * fSlow12)); + double fSlow135 = (fSlow133 * fSlow11); + double fSlow136 = (fConst77 * fSlow135); + double fSlow137 = ((2.75 * fSlow133) - (2.0 * fSlow128)); + double fSlow138 = (fSlow137 * fSlow7); + double fSlow139 = (fConst79 * (fSlow138 * fSlow12)); + double fSlow140 = ((fSlow137 * fSlow11) * fSlow7); + double fSlow141 = (fConst79 * fSlow140); + double fSlow142 = ((2.6000000000000001 * (fSlow137 * fSlow8)) - (1.75 * fSlow133)); + double fSlow143 = (fConst81 * (fSlow142 * fSlow12)); + double fSlow144 = (fSlow142 * fSlow11); + double fSlow145 = (fConst81 * fSlow144); + double fSlow146 = (1.1180339887498949 * fSlow79); + double fSlow147 = (0.75 * fSlow84); + double fSlow148 = (0.60092521257733145 * fSlow92); + double fSlow149 = pow(fSlow9, 3.5); + double fSlow150 = (((((2.0 * fSlow42) + (4.0 * (fSlow40 * fSlow11))) * fSlow11) + -1.0) * fSlow149); + double fSlow151 = (fConst83 * fSlow150); + double fSlow152 = (((fSlow61 * fSlow11) * fSlow7) * fSlow9); + double fSlow153 = (fConst84 * fSlow152); + double fSlow154 = ((((2.0 * fSlow56) - fSlow55) * fSlow11) * fSlow149); + double fSlow155 = (fConst83 * fSlow154); + double fSlow156 = (fConst85 * (fSlow120 * fSlow12)); + double fSlow157 = (0.13783222385544802 * fSlow7); + double fSlow158 = (fConst85 * (fSlow11 * fSlow120)); + double fSlow159 = (fConst87 * ((fSlow11 * fSlow9) * fSlow12)); + double fSlow160 = (fConst88 * ((fSlow7 * fSlow120) * fSlow12)); + double fSlow161 = (0.088970317927147144 * fSlow79); + double fSlow162 = (fConst88 * (fSlow18 * fSlow120)); + double fSlow163 = (fConst89 * (fSlow16 * fSlow9)); + double fSlow164 = (fConst90 * ((fSlow22 * fSlow97) * fSlow12)); + double fSlow165 = (fConst92 * ((fSlow18 * fSlow9) * fSlow12)); + double fSlow166 = (fConst93 * ((fSlow124 * fSlow120) * fSlow12)); + double fSlow167 = (0.070180733224632072 * (fSlow80 * fSlow7)); + double fSlow168 = (fConst93 * (fSlow126 * fSlow120)); + double fSlow169 = (fConst94 * (fSlow20 * fSlow9)); + double fSlow170 = (fConst90 * (fSlow100 * fSlow97)); + double fSlow171 = (fConst95 * fSlow82); + double fSlow172 = (fConst96 * ((fSlow101 * fSlow97) * fSlow12)); + double fSlow173 = (fConst97 * ((fSlow27 * fSlow9) * fSlow12)); + double fSlow174 = (fConst98 * ((fSlow129 * fSlow120) * fSlow12)); + double fSlow175 = (0.059683103659460751 * fSlow84); + double fSlow176 = (fConst98 * (fSlow131 * fSlow120)); + double fSlow177 = (fConst99 * (fSlow29 * fSlow9)); + double fSlow178 = (fConst96 * (fSlow103 * fSlow97)); + double fSlow179 = (fConst100 * fSlow87); + double fSlow180 = (fConst101 * ((fSlow41 * fSlow66) * fSlow12)); + double fSlow181 = (fConst102 * (((fSlow24 * fSlow7) * fSlow43) * fSlow12)); + double fSlow182 = (fConst103 * ((fSlow106 * fSlow97) * fSlow12)); + double fSlow183 = (fConst104 * ((fSlow36 * fSlow9) * fSlow12)); + double fSlow184 = (fConst105 * ((fSlow133 * fSlow120) * fSlow12)); + double fSlow185 = (0.052785722976618307 * (fSlow85 * fSlow7)); + double fSlow186 = (fConst105 * (fSlow135 * fSlow120)); + double fSlow187 = (fConst106 * (fSlow38 * fSlow9)); + double fSlow188 = (fConst103 * (fSlow108 * fSlow97)); + double fSlow189 = (fConst107 * ((fSlow33 * fSlow7) * fSlow43)); + double fSlow190 = (fConst101 * (fSlow69 * fSlow66)); + double fSlow191 = (fConst108 * fSlow90); + double fSlow192 = (fConst109 * ((fSlow70 * fSlow66) * fSlow12)); + double fSlow193 = (fConst110 * ((fSlow46 * fSlow43) * fSlow12)); + double fSlow194 = (fConst111 * ((fSlow111 * fSlow97) * fSlow12)); + double fSlow195 = (fConst112 * ((fSlow49 * fSlow9) * fSlow12)); + double fSlow196 = (fConst113 * ((fSlow138 * fSlow120) * fSlow12)); + double fSlow197 = (0.047820109005115151 * fSlow92); + double fSlow198 = (fConst113 * (fSlow140 * fSlow120)); + double fSlow199 = (fConst114 * (fSlow51 * fSlow9)); + double fSlow200 = (fConst111 * (fSlow113 * fSlow97)); + double fSlow201 = (fConst115 * (fSlow53 * fSlow43)); + double fSlow202 = (fConst109 * (fSlow72 * fSlow66)); + double fSlow203 = (fConst108 * (fSlow56 * fSlow89)); + double fSlow204 = (fConst116 * (fSlow150 * fSlow12)); + double fSlow205 = (fConst117 * (((fSlow42 * fSlow7) * fSlow89) * fSlow12)); + double fSlow206 = (fConst118 * ((fSlow75 * fSlow66) * fSlow12)); + double fSlow207 = (fConst119 * ((fSlow59 * fSlow43) * fSlow12)); + double fSlow208 = (fConst120 * ((fSlow116 * fSlow97) * fSlow12)); + double fSlow209 = (fConst121 * (fSlow152 * fSlow12)); + double fSlow210 = (fConst122 * ((fSlow142 * fSlow120) * fSlow12)); + double fSlow211 = (0.044028888861535699 * (fSlow93 * fSlow7)); + double fSlow212 = (fConst122 * (fSlow144 * fSlow120)); + double fSlow213 = (fConst123 * (fSlow62 * fSlow9)); + double fSlow214 = (fConst120 * (fSlow118 * fSlow97)); + double fSlow215 = (fConst124 * ((fSlow95 * fSlow7) * fSlow43)); + double fSlow216 = (fConst118 * (fSlow77 * fSlow66)); + double fSlow217 = (fConst117 * (fSlow64 * fSlow89)); + double fSlow218 = (fConst116 * fSlow154); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input4[i]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input8[i]); + double fTemp5 = double(input10[i]); + double fTemp6 = double(input14[i]); + double fTemp7 = double(input16[i]); + double fTemp8 = double(input18[i]); + double fTemp9 = double(input22[i]); + double fTemp10 = double(input24[i]); + double fTemp11 = double(input28[i]); + double fTemp12 = double(input32[i]); + double fTemp13 = double(input36[i]); + double fTemp14 = double(input38[i]); + double fTemp15 = double(input40[i]); + double fTemp16 = double(input44[i]); + double fTemp17 = double(input46[i]); + double fTemp18 = double(input48[i]); + double fTemp19 = double(input52[i]); + double fTemp20 = double(input58[i]); + double fTemp21 = double(input62[i]); + double fTemp22 = double(input25[i]); + double fTemp23 = double(input35[i]); + double fTemp24 = double(input37[i]); + double fTemp25 = double(input47[i]); + double fTemp26 = double(input51[i]); + double fTemp27 = double(input61[i]); + double fTemp28 = double(input2[i]); + double fTemp29 = double(input12[i]); + double fTemp30 = double(input26[i]); + double fTemp31 = double(input30[i]); + double fTemp32 = double(input34[i]); + double fTemp33 = double(input50[i]); + double fTemp34 = double(input56[i]); + double fTemp35 = double(input60[i]); + double fTemp36 = double(input9[i]); + double fTemp37 = double(input15[i]); + double fTemp38 = double(input17[i]); + double fTemp39 = double(input23[i]); + double fTemp40 = double(input27[i]); + double fTemp41 = double(input33[i]); + double fTemp42 = double(input39[i]); + double fTemp43 = double(input45[i]); + double fTemp44 = double(input53[i]); + double fTemp45 = double(input59[i]); + double fTemp46 = double(input1[i]); + double fTemp47 = double(input3[i]); + double fTemp48 = double(input5[i]); + double fTemp49 = double(input7[i]); + double fTemp50 = double(input11[i]); + double fTemp51 = double(input13[i]); + double fTemp52 = double(input19[i]); + double fTemp53 = double(input21[i]); + double fTemp54 = double(input29[i]); + double fTemp55 = double(input31[i]); + double fTemp56 = double(input41[i]); + double fTemp57 = double(input43[i]); + double fTemp58 = double(input55[i]); + double fTemp59 = double(input57[i]); + double fTemp60 = double(input6[i]); + double fTemp61 = double(input20[i]); + double fTemp62 = double(input42[i]); + double fTemp63 = double(input49[i]); + double fTemp64 = double(input54[i]); + double fTemp65 = double(input63[i]); + double fTemp66 = (((fSlow9 * ((((((((((((((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow28 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow44 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow47 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow50 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow52 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow54 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow57 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow60 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow63 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow65 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21)))))) + ((fSlow67 * (((((fConst47 * ((fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))) + (fSlow69 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23)))))) + (fSlow71 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow73 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow76 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow78 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27)))))) + ((fSlow7 * ((((((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28)))) + (fSlow81 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow83 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))) + (fSlow86 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31))))) + (fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow91 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow94 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow96 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35)))))) + ((fSlow98 * (((((((((fConst58 * ((fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36)))) + (fSlow100 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37)))))) + (fSlow102 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38))))) + (fSlow104 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39))))) + (fSlow107 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40))))) + (fSlow109 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow112 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42))))) + (fSlow114 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow117 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow119 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45)))))) + ((fSlow121 * (((((((((((((fConst69 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47)))))) + (fSlow122 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48))))) + (fSlow123 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49))))) + (fSlow125 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50))))) + (fSlow127 * (iSlow1?(fSlow3 * (fTemp3 * fTemp51)):(fSlow3 * (fTemp1 * fTemp51))))) + (fSlow130 * (iSlow1?(fSlow3 * (fTemp3 * fTemp52)):(fSlow3 * (fTemp1 * fTemp52))))) + (fSlow132 * (iSlow1?(fSlow3 * (fTemp3 * fTemp53)):(fSlow3 * (fTemp1 * fTemp53))))) + (fSlow134 * (iSlow1?(fSlow3 * (fTemp3 * fTemp54)):(fSlow3 * (fTemp1 * fTemp54))))) + (fSlow136 * (iSlow1?(fSlow3 * (fTemp3 * fTemp55)):(fSlow3 * (fTemp1 * fTemp55))))) + (fSlow139 * (iSlow1?(fSlow3 * (fTemp3 * fTemp56)):(fSlow3 * (fTemp1 * fTemp56))))) + (fSlow141 * (iSlow1?(fSlow3 * (fTemp3 * fTemp57)):(fSlow3 * (fTemp1 * fTemp57))))) + (fSlow143 * (iSlow1?(fSlow3 * (fTemp3 * fTemp58)):(fSlow3 * (fTemp1 * fTemp58))))) + (fSlow145 * (iSlow1?(fSlow3 * (fTemp3 * fTemp59)):(fSlow3 * (fTemp1 * fTemp59)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow146 * (iSlow1?(fSlow3 * (fTemp3 * fTemp60)):(fSlow3 * (fTemp1 * fTemp60))))) + (fSlow147 * (iSlow1?(fSlow3 * (fTemp3 * fTemp61)):(fSlow3 * (fTemp1 * fTemp61))))) + (fSlow148 * (iSlow1?(fSlow3 * (fTemp3 * fTemp62)):(fSlow3 * (fTemp1 * fTemp62))))) + (fSlow12 * ((fSlow151 * (iSlow1?(fSlow3 * (fTemp3 * fTemp63)):(fSlow3 * (fTemp1 * fTemp63)))) + (fSlow153 * (iSlow1?(fSlow3 * (fTemp3 * fTemp64)):(fSlow3 * (fTemp1 * fTemp64)))))))))))) + (fSlow155 * (iSlow1?(fSlow3 * (fTemp3 * fTemp65)):(fSlow3 * (fTemp1 * fTemp65))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp66))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow156 * fTemp66))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow157 * fTemp66))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow158 * fTemp66))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow159 * fTemp66))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow160 * fTemp66))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp60)):(fSlow3 * (fRec0[0] * fTemp60))) + (fSlow161 * fTemp66))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow162 * fTemp66))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow163 * fTemp66))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow164 * fTemp66))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow165 * fTemp66))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow166 * fTemp66))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow167 * fTemp66))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp51)):(fSlow3 * (fRec0[0] * fTemp51))) + (fSlow168 * fTemp66))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow169 * fTemp66))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow170 * fTemp66))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow171 * fTemp66))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow172 * fTemp66))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow173 * fTemp66))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp52)):(fSlow3 * (fRec0[0] * fTemp52))) + (fSlow174 * fTemp66))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp61)):(fSlow3 * (fRec0[0] * fTemp61))) + (fSlow175 * fTemp66))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp53)):(fSlow3 * (fRec0[0] * fTemp53))) + (fSlow176 * fTemp66))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow177 * fTemp66))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow178 * fTemp66))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow179 * fTemp66))); + output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow180 * fTemp66))); + output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow181 * fTemp66))); + output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow182 * fTemp66))); + output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow183 * fTemp66))); + output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp54)):(fSlow3 * (fRec0[0] * fTemp54))) + (fSlow184 * fTemp66))); + output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow185 * fTemp66))); + output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp55)):(fSlow3 * (fRec0[0] * fTemp55))) + (fSlow186 * fTemp66))); + output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow187 * fTemp66))); + output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow188 * fTemp66))); + output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow189 * fTemp66))); + output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow190 * fTemp66))); + output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow191 * fTemp66))); + output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow192 * fTemp66))); + output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow193 * fTemp66))); + output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow194 * fTemp66))); + output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow195 * fTemp66))); + output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp56)):(fSlow3 * (fRec0[0] * fTemp56))) + (fSlow196 * fTemp66))); + output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp62)):(fSlow3 * (fRec0[0] * fTemp62))) + (fSlow197 * fTemp66))); + output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp57)):(fSlow3 * (fRec0[0] * fTemp57))) + (fSlow198 * fTemp66))); + output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow199 * fTemp66))); + output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow200 * fTemp66))); + output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow201 * fTemp66))); + output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow202 * fTemp66))); + output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow203 * fTemp66))); + output49[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp63)):(fSlow3 * (fRec0[0] * fTemp63))) + (fSlow204 * fTemp66))); + output50[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow205 * fTemp66))); + output51[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow206 * fTemp66))); + output52[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow207 * fTemp66))); + output53[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow208 * fTemp66))); + output54[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp64)):(fSlow3 * (fRec0[0] * fTemp64))) + (fSlow209 * fTemp66))); + output55[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp58)):(fSlow3 * (fRec0[0] * fTemp58))) + (fSlow210 * fTemp66))); + output56[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow211 * fTemp66))); + output57[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp59)):(fSlow3 * (fRec0[0] * fTemp59))) + (fSlow212 * fTemp66))); + output58[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow213 * fTemp66))); + output59[i] = FAUSTFLOAT(((fSlow214 * fTemp66) + (iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))))); + output60[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow215 * fTemp66))); + output61[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow216 * fTemp66))); + output62[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow217 * fTemp66))); + output63[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp65)):(fSlow3 * (fRec0[0] * fTemp65))) + (fSlow218 * fTemp66))); + fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2HOA8.cpp b/source/HOAUGens/HOABeamDirac2HOA8.cpp new file mode 100644 index 0000000000..38a70d8e0a --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2HOA8.cpp @@ -0,0 +1,2744 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA8" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/* link with : "" */ +#include +#include + +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} +double mydsp_faustpower4_f(double value) { + return (((value * value) * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fConst119; + double fConst120; + double fConst121; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fConst136; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fConst157; + double fConst158; + double fConst159; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOABeamDirac2HOA8"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 81; + + } + virtual int getNumOutputs() { + return 81; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); + fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(2.5)); + fConst3 = double(tgamma(1.0)); + fConst4 = double(tgamma(5.0)); + fConst5 = sqrt((5.0 * (fConst3 / fConst4))); + fConst6 = double(tgamma(2.0)); + fConst7 = double(tgamma(6.0)); + fConst8 = sqrt((7.0 * (fConst6 / fConst7))); + fConst9 = (31.915382432114615 * fConst8); + fConst10 = (15.957691216057308 * fConst8); + fConst11 = double(tgamma(9.0)); + fConst12 = double(tgamma(4.5)); + fConst13 = (sqrt((9.0 * (fConst3 / fConst11))) * fConst12); + fConst14 = (25.532305945691693 * fConst13); + fConst15 = double(tgamma(3.0)); + fConst16 = double(tgamma(7.0)); + fConst17 = (sqrt((9.0 * (fConst15 / fConst16))) * fConst2); + fConst18 = (1.4142135623730951 * fConst17); + fConst19 = (0.70710678118654757 * fConst17); + fConst20 = (12.766152972845846 * fConst13); + fConst21 = double(tgamma(4.0)); + fConst22 = double(tgamma(8.0)); + fConst23 = (sqrt((11.0 * (fConst21 / fConst22))) * fConst2); + fConst24 = (0.94280904158206336 * fConst23); + fConst25 = (0.47140452079103168 * fConst23); + fConst26 = double(tgamma(13.0)); + fConst27 = double(tgamma(6.5)); + fConst28 = (sqrt((13.0 * (fConst3 / fConst26))) * fConst27); + fConst29 = (51.064611891383386 * fConst28); + fConst30 = double(tgamma(11.0)); + fConst31 = (sqrt((13.0 * (fConst15 / fConst30))) * fConst12); + fConst32 = (1.4142135623730951 * fConst31); + fConst33 = (sqrt((13.0 * (fConst4 / fConst11))) * fConst2); + fConst34 = (0.70710678118654757 * fConst33); + fConst35 = (0.35355339059327379 * fConst33); + fConst36 = (0.70710678118654757 * fConst31); + fConst37 = double(tgamma(12.0)); + fConst38 = (sqrt((15.0 * (fConst21 / fConst37))) * fConst12); + fConst39 = (0.94280904158206336 * fConst38); + fConst40 = double(tgamma(10.0)); + fConst41 = (sqrt((15.0 * (fConst7 / fConst40))) * fConst2); + fConst42 = (0.28284271247461906 * fConst41); + fConst43 = double(tgamma(14.0)); + fConst44 = (sqrt((15.0 * (fConst6 / fConst43))) * fConst27); + fConst45 = (663.83995458798404 * fConst44); + fConst46 = double(tgamma(15.0)); + fConst47 = (sqrt((17.0 * (fConst15 / fConst46))) * fConst27); + fConst48 = (0.70710678118654757 * fConst47); + fConst49 = (sqrt((17.0 * (fConst16 / fConst30))) * fConst2); + fConst50 = (0.47140452079103168 * fConst49); + fConst51 = (0.23570226039551584 * fConst49); + fConst52 = (sqrt((17.0 * (fConst4 / fConst26))) * fConst12); + fConst53 = (0.35355339059327379 * fConst52); + fConst54 = (sqrt((17.0 * (fConst3 / double(tgamma(17.0))))) * double(tgamma(8.5))); + fConst55 = (204.25844756553354 * fConst54); + fConst56 = double(tgamma(7.5)); + fConst57 = sqrt((15.0 * (fConst3 / fConst46))); + fConst58 = (102.12922378276677 * fConst57); + fConst59 = sqrt((17.0 * (fConst6 / double(tgamma(16.0))))); + fConst60 = (1531.9383567415016 * fConst59); + fConst61 = double(tgamma(5.5)); + fConst62 = sqrt((11.0 * (fConst3 / fConst30))); + fConst63 = (25.532305945691693 * fConst62); + fConst64 = sqrt((13.0 * (fConst6 / fConst37))); + fConst65 = (280.85536540260864 * fConst64); + fConst66 = sqrt((15.0 * (fConst15 / fConst26))); + fConst67 = (0.70710678118654757 * fConst66); + fConst68 = sqrt((17.0 * (fConst21 / fConst43))); + fConst69 = (0.47140452079103168 * fConst68); + fConst70 = double(tgamma(3.5)); + fConst71 = sqrt((7.0 * (fConst3 / fConst16))); + fConst72 = (6.3830764864229232 * fConst71); + fConst73 = sqrt((9.0 * (fConst6 / fConst22))); + fConst74 = (44.681535404960464 * fConst73); + fConst75 = sqrt((11.0 * (fConst15 / fConst11))); + fConst76 = (0.70710678118654757 * fConst75); + fConst77 = sqrt((13.0 * (fConst21 / fConst40))); + fConst78 = (0.47140452079103168 * fConst77); + fConst79 = sqrt((15.0 * (fConst4 / fConst30))); + fConst80 = (0.35355339059327379 * fConst79); + fConst81 = sqrt((17.0 * (fConst7 / fConst37))); + fConst82 = (0.28284271247461906 * fConst81); + fConst83 = double(tgamma(1.5)); + fConst84 = sqrt((3.0 * (fConst3 / fConst15))); + fConst85 = (1.5957691216057308 * fConst84); + fConst86 = sqrt((5.0 * (fConst6 / fConst21))); + fConst87 = (4.7873073648171927 * fConst86); + fConst88 = sqrt((7.0 * (fConst15 / fConst4))); + fConst89 = (0.70710678118654757 * fConst88); + fConst90 = sqrt((9.0 * (fConst21 / fConst7))); + fConst91 = (0.47140452079103168 * fConst90); + fConst92 = sqrt((11.0 * (fConst4 / fConst16))); + fConst93 = (0.35355339059327379 * fConst92); + fConst94 = sqrt((13.0 * (fConst7 / fConst22))); + fConst95 = (0.28284271247461906 * fConst94); + fConst96 = sqrt((15.0 * (fConst16 / fConst11))); + fConst97 = (0.23570226039551584 * fConst96); + fConst98 = sqrt((17.0 * (fConst22 / fConst40))); + fConst99 = (0.20203050891044216 * fConst98); + fConst100 = (fConst57 * fConst56); + fConst101 = (102.12922378276677 * fConst100); + fConst102 = (0.56568542494923812 * fConst41); + fConst103 = (408.51689513106709 * fConst54); + fConst104 = (0.70710678118654757 * fConst52); + fConst105 = (sqrt((11.0 * (fConst6 / fConst40))) * fConst12); + fConst106 = (229.79075351122526 * fConst105); + fConst107 = (114.89537675561263 * fConst105); + fConst108 = (0.47140452079103168 * fConst38); + fConst109 = (0.12698727186848197 * (fConst84 * fConst83)); + fConst110 = (fConst5 * fConst2); + fConst111 = (0.50794908747392786 * fConst110); + fConst112 = (0.3809618156054459 * (fConst86 * fConst83)); + fConst113 = (0.25397454373696393 * fConst110); + fConst114 = (0.50794908747392786 * (fConst71 * fConst70)); + fConst115 = (fConst8 * fConst2); + fConst116 = (2.5397454373696391 * fConst115); + fConst117 = (0.056269769759819135 * (fConst88 * fConst83)); + fConst118 = (1.2698727186848195 * fConst115); + fConst119 = (2.0317963498957115 * fConst13); + fConst120 = (3.5556436123174948 * (fConst73 * fConst70)); + fConst121 = (0.11253953951963827 * fConst17); + fConst122 = (0.037513179839879424 * (fConst90 * fConst83)); + fConst123 = (0.056269769759819135 * fConst17); + fConst124 = (1.0158981749478557 * fConst13); + fConst125 = (2.0317963498957115 * (fConst62 * fConst61)); + fConst126 = (18.286167149061402 * fConst105); + fConst127 = (0.056269769759819135 * (fConst75 * fConst70)); + fConst128 = (0.075026359679758847 * fConst23); + fConst129 = (0.028134884879909568 * (fConst92 * fConst83)); + fConst130 = (0.037513179839879424 * fConst23); + fConst131 = (9.1430835745307011 * fConst105); + fConst132 = (4.0635926997914229 * fConst28); + fConst133 = (22.349759848852827 * (fConst64 * fConst61)); + fConst134 = (0.11253953951963827 * fConst31); + fConst135 = (0.037513179839879424 * (fConst77 * fConst70)); + fConst136 = (0.056269769759819135 * fConst33); + fConst137 = (0.022507907903927659 * (fConst94 * fConst83)); + fConst138 = (0.028134884879909568 * fConst33); + fConst139 = (0.056269769759819135 * fConst31); + fConst140 = (8.1271853995828458 * fConst100); + fConst141 = (52.826705097288496 * fConst44); + fConst142 = (0.056269769759819135 * (fConst66 * fConst61)); + fConst143 = (0.075026359679758847 * fConst38); + fConst144 = (0.028134884879909568 * (fConst79 * fConst70)); + fConst145 = (0.045015815807855318 * fConst41); + fConst146 = (0.018756589919939712 * (fConst96 * fConst83)); + fConst147 = (0.022507907903927659 * fConst41); + fConst148 = (0.037513179839879424 * fConst38); + fConst149 = (32.508741598331383 * fConst54); + fConst150 = (121.90778099374268 * (fConst59 * fConst56)); + fConst151 = (0.056269769759819135 * fConst47); + fConst152 = (0.037513179839879424 * (fConst68 * fConst61)); + fConst153 = (0.056269769759819135 * fConst52); + fConst154 = (0.022507907903927659 * (fConst81 * fConst70)); + fConst155 = (0.037513179839879424 * fConst49); + fConst156 = (0.016077077074234038 * (fConst98 * fConst83)); + fConst157 = (0.018756589919939712 * fConst49); + fConst158 = (0.028134884879909568 * fConst52); + fConst159 = (16.254370799165692 * fConst54); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + double fSlow0 = double(fCheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = (fSlow0 > 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = mydsp_faustpower2_f(fSlow7); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = double(fVslider1); + double fSlow11 = cos(fSlow10); + double fSlow12 = sin(fSlow10); + double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); + double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow15 = mydsp_faustpower2_f(fSlow11); + double fSlow16 = ((2.0 * fSlow15) + -1.0); + double fSlow17 = (3.1915382432114616 * fSlow16); + double fSlow18 = (fSlow11 * fSlow7); + double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); + double fSlow20 = (fSlow16 * fSlow7); + double fSlow21 = (fConst10 * fSlow20); + double fSlow22 = ((4.0 * fSlow15) + -1.0); + double fSlow23 = (fSlow22 + -1.0); + double fSlow24 = (fSlow23 * fSlow11); + double fSlow25 = (fConst14 * ((fSlow24 * fSlow9) * fSlow12)); + double fSlow26 = ((78.986541696685876 * fSlow8) + -11.283791670955125); + double fSlow27 = (fSlow26 * fSlow11); + double fSlow28 = (fConst18 * (fSlow27 * fSlow12)); + double fSlow29 = (fSlow16 * fSlow26); + double fSlow30 = (fConst19 * fSlow29); + double fSlow31 = ((2.0 * fSlow16) + -1.0); + double fSlow32 = (1.0 - fSlow31); + double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow15))); + double fSlow34 = (fConst20 * (fSlow33 * fSlow9)); + double fSlow35 = ((4.5 * fSlow26) + -67.702750025730751); + double fSlow36 = ((fSlow35 * fSlow11) * fSlow7); + double fSlow37 = (fConst24 * (fSlow36 * fSlow12)); + double fSlow38 = ((fSlow16 * fSlow35) * fSlow7); + double fSlow39 = (fConst25 * fSlow38); + double fSlow40 = (1.0 - fSlow23); + double fSlow41 = (1.0 - (4.0 * (fSlow40 * fSlow15))); + double fSlow42 = (fSlow23 - fSlow41); + double fSlow43 = (0.0 - (2.0 * (fSlow42 * fSlow11))); + double fSlow44 = mydsp_faustpower2_f(fSlow9); + double fSlow45 = (fConst29 * ((fSlow43 * fSlow44) * fSlow12)); + double fSlow46 = ((893.67630033964599 * fSlow8) + -81.24330003087691); + double fSlow47 = ((fSlow23 * fSlow46) * fSlow11); + double fSlow48 = (fConst32 * ((fSlow47 * fSlow9) * fSlow12)); + double fSlow49 = ((3.6666666666666665 * (fSlow35 * fSlow8)) - (3.5 * fSlow26)); + double fSlow50 = (fSlow49 * fSlow11); + double fSlow51 = (fConst34 * (fSlow50 * fSlow12)); + double fSlow52 = (fSlow16 * fSlow49); + double fSlow53 = (fConst35 * fSlow52); + double fSlow54 = (fSlow33 * fSlow46); + double fSlow55 = (fConst36 * (fSlow54 * fSlow9)); + double fSlow56 = ((2.0 * fSlow33) - fSlow31); + double fSlow57 = (fSlow32 + fSlow56); + double fSlow58 = ((2.0 * (fSlow57 * fSlow15)) + -1.0); + double fSlow59 = (fConst29 * (fSlow58 * fSlow44)); + double fSlow60 = ((6.5 * fSlow46) + -812.43300030876912); + double fSlow61 = (((fSlow23 * fSlow60) * fSlow11) * fSlow7); + double fSlow62 = (fConst39 * ((fSlow61 * fSlow9) * fSlow12)); + double fSlow63 = ((3.25 * fSlow49) - (2.6666666666666665 * fSlow35)); + double fSlow64 = ((fSlow16 * fSlow63) * fSlow7); + double fSlow65 = (fConst42 * fSlow64); + double fSlow66 = (fSlow58 * fSlow7); + double fSlow67 = (fConst45 * (fSlow66 * fSlow44)); + double fSlow68 = ((7041.0860026759983 * fSlow8) + -469.40573351173322); + double fSlow69 = (fSlow43 * fSlow68); + double fSlow70 = (fConst48 * ((fSlow69 * fSlow44) * fSlow12)); + double fSlow71 = ((3.0 * (fSlow63 * fSlow8)) - (2.25 * fSlow49)); + double fSlow72 = (fSlow71 * fSlow11); + double fSlow73 = (fConst50 * (fSlow72 * fSlow12)); + double fSlow74 = (fSlow16 * fSlow71); + double fSlow75 = (fConst51 * fSlow74); + double fSlow76 = ((5.0 * (fSlow60 * fSlow8)) - (5.5 * fSlow46)); + double fSlow77 = (fSlow33 * fSlow76); + double fSlow78 = (fConst53 * (fSlow77 * fSlow9)); + double fSlow79 = (fSlow58 * fSlow68); + double fSlow80 = (fConst48 * (fSlow79 * fSlow44)); + double fSlow81 = ((2.0 * fSlow58) - fSlow56); + double fSlow82 = (1.0 - (2.0 * ((fSlow57 - fSlow81) * fSlow15))); + double fSlow83 = mydsp_faustpower3_f(fSlow9); + double fSlow84 = (fConst55 * (fSlow82 * fSlow83)); + double fSlow85 = pow(fSlow9, 3.5); + double fSlow86 = (fConst56 * fSlow85); + double fSlow87 = (fSlow81 * fSlow11); + double fSlow88 = (fConst58 * fSlow87); + double fSlow89 = ((((2.0 * fSlow43) + (4.0 * (fSlow40 * fSlow11))) * fSlow11) + -1.0); + double fSlow90 = (fSlow89 * fSlow7); + double fSlow91 = (fConst60 * (fSlow90 * fSlow12)); + double fSlow92 = (fSlow87 * fSlow7); + double fSlow93 = (fConst60 * fSlow92); + double fSlow94 = pow(fSlow9, 2.5); + double fSlow95 = (fConst61 * fSlow94); + double fSlow96 = (fSlow41 * fSlow12); + double fSlow97 = (fSlow56 * fSlow11); + double fSlow98 = (fSlow41 * fSlow7); + double fSlow99 = (fConst65 * (fSlow98 * fSlow12)); + double fSlow100 = (fSlow97 * fSlow7); + double fSlow101 = (fConst65 * fSlow100); + double fSlow102 = ((2581.7315343145328 * fSlow8) + -198.59473340881021); + double fSlow103 = (fSlow41 * fSlow102); + double fSlow104 = (fConst67 * (fSlow103 * fSlow12)); + double fSlow105 = ((fSlow56 * fSlow102) * fSlow11); + double fSlow106 = (fConst67 * fSlow105); + double fSlow107 = ((7.5 * fSlow102) + -2383.1368009057223); + double fSlow108 = ((fSlow41 * fSlow107) * fSlow7); + double fSlow109 = (fConst69 * (fSlow108 * fSlow12)); + double fSlow110 = (((fSlow56 * fSlow107) * fSlow11) * fSlow7); + double fSlow111 = (fConst69 * fSlow110); + double fSlow112 = pow(fSlow9, 1.5); + double fSlow113 = (fConst70 * fSlow112); + double fSlow114 = (fSlow22 * fSlow12); + double fSlow115 = (fSlow31 * fSlow11); + double fSlow116 = (fSlow22 * fSlow7); + double fSlow117 = (fConst74 * (fSlow116 * fSlow12)); + double fSlow118 = (fSlow115 * fSlow7); + double fSlow119 = (fConst74 * fSlow118); + double fSlow120 = ((284.35155010806915 * fSlow8) + -31.594616678674353); + double fSlow121 = (fSlow22 * fSlow120); + double fSlow122 = (fConst76 * (fSlow121 * fSlow12)); + double fSlow123 = ((fSlow31 * fSlow120) * fSlow11); + double fSlow124 = (fConst76 * fSlow123); + double fSlow125 = ((5.5 * fSlow120) + -252.75693342939482); + double fSlow126 = ((fSlow22 * fSlow125) * fSlow7); + double fSlow127 = (fConst78 * (fSlow126 * fSlow12)); + double fSlow128 = (((fSlow31 * fSlow125) * fSlow11) * fSlow7); + double fSlow129 = (fConst78 * fSlow128); + double fSlow130 = ((4.333333333333333 * (fSlow125 * fSlow8)) - (4.5 * fSlow120)); + double fSlow131 = (fSlow22 * fSlow130); + double fSlow132 = (fConst80 * (fSlow131 * fSlow12)); + double fSlow133 = ((fSlow31 * fSlow130) * fSlow11); + double fSlow134 = (fConst80 * fSlow133); + double fSlow135 = ((3.75 * fSlow130) - (3.333333333333333 * fSlow125)); + double fSlow136 = ((fSlow22 * fSlow135) * fSlow7); + double fSlow137 = (fConst82 * (fSlow136 * fSlow12)); + double fSlow138 = (((fSlow31 * fSlow135) * fSlow11) * fSlow7); + double fSlow139 = (fConst82 * fSlow138); + double fSlow140 = pow(fSlow9, 0.5); + double fSlow141 = (fConst83 * fSlow140); + double fSlow142 = (fConst87 * (fSlow7 * fSlow12)); + double fSlow143 = (fConst87 * fSlow18); + double fSlow144 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); + double fSlow145 = (fConst89 * (fSlow144 * fSlow12)); + double fSlow146 = (fSlow144 * fSlow11); + double fSlow147 = (fConst89 * fSlow146); + double fSlow148 = ((3.5 * fSlow144) + -13.540550005146152); + double fSlow149 = (fSlow148 * fSlow7); + double fSlow150 = (fConst91 * (fSlow149 * fSlow12)); + double fSlow151 = ((fSlow148 * fSlow11) * fSlow7); + double fSlow152 = (fConst91 * fSlow151); + double fSlow153 = ((3.0 * (fSlow148 * fSlow8)) - (2.5 * fSlow144)); + double fSlow154 = (fConst93 * (fSlow153 * fSlow12)); + double fSlow155 = (fSlow153 * fSlow11); + double fSlow156 = (fConst93 * fSlow155); + double fSlow157 = ((2.75 * fSlow153) - (2.0 * fSlow148)); + double fSlow158 = (fSlow157 * fSlow7); + double fSlow159 = (fConst95 * (fSlow158 * fSlow12)); + double fSlow160 = ((fSlow157 * fSlow11) * fSlow7); + double fSlow161 = (fConst95 * fSlow160); + double fSlow162 = ((2.6000000000000001 * (fSlow157 * fSlow8)) - (1.75 * fSlow153)); + double fSlow163 = (fConst97 * (fSlow162 * fSlow12)); + double fSlow164 = (fSlow162 * fSlow11); + double fSlow165 = (fConst97 * fSlow164); + double fSlow166 = ((2.5 * fSlow162) - (1.6000000000000001 * fSlow157)); + double fSlow167 = (fSlow166 * fSlow7); + double fSlow168 = (fConst99 * (fSlow167 * fSlow12)); + double fSlow169 = ((fSlow166 * fSlow11) * fSlow7); + double fSlow170 = (fConst99 * fSlow169); + double fSlow171 = ((3.0 * fSlow8) + -1.0); + double fSlow172 = ((2.5 * fSlow171) + -2.0); + double fSlow173 = ((2.333333333333333 * (fSlow172 * fSlow8)) - (1.5 * fSlow171)); + double fSlow174 = ((2.25 * fSlow173) - (1.3333333333333333 * fSlow172)); + double fSlow175 = ((2.2000000000000002 * (fSlow174 * fSlow8)) - (1.25 * fSlow173)); + double fSlow176 = ((2.1666666666666665 * fSlow175) - (1.2000000000000002 * fSlow174)); + double fSlow177 = ((2.1428571428571428 * (fSlow176 * fSlow8)) - (1.1666666666666665 * fSlow175)); + double fSlow178 = (0.51538820320220757 * fSlow177); + double fSlow179 = (fSlow89 * fSlow85); + double fSlow180 = (fConst101 * fSlow179); + double fSlow181 = (((fSlow63 * fSlow11) * fSlow7) * fSlow9); + double fSlow182 = (fConst102 * fSlow181); + double fSlow183 = mydsp_faustpower4_f(fSlow9); + double fSlow184 = (((fSlow42 + fSlow89) * fSlow11) * fSlow183); + double fSlow185 = (fConst103 * fSlow184); + double fSlow186 = (((fSlow23 * fSlow76) * fSlow11) * fSlow44); + double fSlow187 = (fConst104 * fSlow186); + double fSlow188 = (1.1180339887498949 * fSlow171); + double fSlow189 = (0.75 * fSlow173); + double fSlow190 = (0.60092521257733145 * fSlow175); + double fSlow191 = (0.88191710368819687 * fSlow172); + double fSlow192 = ((fSlow24 * fSlow44) * fSlow12); + double fSlow193 = (fConst106 * fSlow192); + double fSlow194 = (0.66332495807108005 * fSlow174); + double fSlow195 = (fSlow33 * fSlow44); + double fSlow196 = (fConst107 * fSlow195); + double fSlow197 = ((fSlow43 * fSlow83) * fSlow12); + double fSlow198 = (fConst45 * fSlow197); + double fSlow199 = (0.55328333517248807 * fSlow176); + double fSlow200 = (fSlow33 * fSlow60); + double fSlow201 = (fConst108 * (fSlow200 * fSlow44)); + double fSlow202 = (fConst109 * (fSlow140 * fSlow12)); + double fSlow203 = (0.13783222385544802 * fSlow7); + double fSlow204 = (fConst109 * (fSlow11 * fSlow140)); + double fSlow205 = (fConst111 * ((fSlow11 * fSlow9) * fSlow12)); + double fSlow206 = (fConst112 * ((fSlow7 * fSlow140) * fSlow12)); + double fSlow207 = (0.088970317927147144 * fSlow171); + double fSlow208 = (fConst112 * (fSlow18 * fSlow140)); + double fSlow209 = (fConst113 * (fSlow16 * fSlow9)); + double fSlow210 = (fConst114 * ((fSlow22 * fSlow112) * fSlow12)); + double fSlow211 = (fConst116 * ((fSlow18 * fSlow9) * fSlow12)); + double fSlow212 = (fConst117 * ((fSlow144 * fSlow140) * fSlow12)); + double fSlow213 = (0.070180733224632072 * (fSlow172 * fSlow7)); + double fSlow214 = (fConst117 * (fSlow146 * fSlow140)); + double fSlow215 = (fConst118 * (fSlow20 * fSlow9)); + double fSlow216 = (fConst114 * (fSlow115 * fSlow112)); + double fSlow217 = (fConst119 * fSlow192); + double fSlow218 = (fConst120 * ((fSlow116 * fSlow112) * fSlow12)); + double fSlow219 = (fConst121 * ((fSlow27 * fSlow9) * fSlow12)); + double fSlow220 = (fConst122 * ((fSlow149 * fSlow140) * fSlow12)); + double fSlow221 = (0.059683103659460751 * fSlow173); + double fSlow222 = (fConst122 * (fSlow151 * fSlow140)); + double fSlow223 = (fConst123 * (fSlow29 * fSlow9)); + double fSlow224 = (fConst120 * (fSlow118 * fSlow112)); + double fSlow225 = (fConst124 * fSlow195); + double fSlow226 = (fConst125 * ((fSlow41 * fSlow94) * fSlow12)); + double fSlow227 = (fConst126 * (((fSlow24 * fSlow7) * fSlow44) * fSlow12)); + double fSlow228 = (fConst127 * ((fSlow121 * fSlow112) * fSlow12)); + double fSlow229 = (fConst128 * ((fSlow36 * fSlow9) * fSlow12)); + double fSlow230 = (fConst129 * ((fSlow153 * fSlow140) * fSlow12)); + double fSlow231 = (0.052785722976618307 * (fSlow174 * fSlow7)); + double fSlow232 = (fConst129 * (fSlow155 * fSlow140)); + double fSlow233 = (fConst130 * (fSlow38 * fSlow9)); + double fSlow234 = (fConst127 * (fSlow123 * fSlow112)); + double fSlow235 = (fConst131 * ((fSlow33 * fSlow7) * fSlow44)); + double fSlow236 = (fConst125 * (fSlow97 * fSlow94)); + double fSlow237 = (fConst132 * fSlow197); + double fSlow238 = (fConst133 * ((fSlow98 * fSlow94) * fSlow12)); + double fSlow239 = (fConst134 * ((fSlow47 * fSlow44) * fSlow12)); + double fSlow240 = (fConst135 * ((fSlow126 * fSlow112) * fSlow12)); + double fSlow241 = (fConst136 * ((fSlow50 * fSlow9) * fSlow12)); + double fSlow242 = (fConst137 * ((fSlow158 * fSlow140) * fSlow12)); + double fSlow243 = (0.047820109005115151 * fSlow175); + double fSlow244 = (fConst137 * (fSlow160 * fSlow140)); + double fSlow245 = (fConst138 * (fSlow52 * fSlow9)); + double fSlow246 = (fConst135 * (fSlow128 * fSlow112)); + double fSlow247 = (fConst139 * (fSlow54 * fSlow44)); + double fSlow248 = (fConst133 * (fSlow100 * fSlow94)); + double fSlow249 = (fConst132 * (fSlow58 * fSlow83)); + double fSlow250 = (fConst140 * (fSlow179 * fSlow12)); + double fSlow251 = (fConst141 * (((fSlow43 * fSlow7) * fSlow83) * fSlow12)); + double fSlow252 = (fConst142 * ((fSlow103 * fSlow94) * fSlow12)); + double fSlow253 = (fConst143 * ((fSlow61 * fSlow44) * fSlow12)); + double fSlow254 = (fConst144 * ((fSlow131 * fSlow112) * fSlow12)); + double fSlow255 = (fConst145 * (fSlow181 * fSlow12)); + double fSlow256 = (fConst146 * ((fSlow162 * fSlow140) * fSlow12)); + double fSlow257 = (0.044028888861535699 * (fSlow176 * fSlow7)); + double fSlow258 = (fConst146 * (fSlow164 * fSlow140)); + double fSlow259 = (fConst147 * (fSlow64 * fSlow9)); + double fSlow260 = (fConst144 * (fSlow133 * fSlow112)); + double fSlow261 = (fConst148 * ((fSlow200 * fSlow7) * fSlow44)); + double fSlow262 = (fConst142 * (fSlow105 * fSlow94)); + double fSlow263 = (fConst141 * (fSlow66 * fSlow83)); + double fSlow264 = (fConst140 * (fSlow87 * fSlow85)); + double fSlow265 = (fConst149 * (fSlow184 * fSlow12)); + double fSlow266 = (fConst150 * ((fSlow90 * fSlow85) * fSlow12)); + double fSlow267 = (fConst151 * ((fSlow69 * fSlow83) * fSlow12)); + double fSlow268 = (fConst152 * ((fSlow108 * fSlow94) * fSlow12)); + double fSlow269 = (fConst153 * (fSlow186 * fSlow12)); + double fSlow270 = (fConst154 * ((fSlow136 * fSlow112) * fSlow12)); + double fSlow271 = (fConst155 * ((fSlow72 * fSlow9) * fSlow12)); + double fSlow272 = (fConst156 * ((fSlow167 * fSlow140) * fSlow12)); + double fSlow273 = (0.041013290075440773 * fSlow177); + double fSlow274 = (fConst156 * (fSlow169 * fSlow140)); + double fSlow275 = (fConst157 * (fSlow74 * fSlow9)); + double fSlow276 = (fConst154 * (fSlow138 * fSlow112)); + double fSlow277 = (fConst158 * (fSlow77 * fSlow44)); + double fSlow278 = (fConst152 * (fSlow110 * fSlow94)); + double fSlow279 = (fConst151 * (fSlow79 * fSlow83)); + double fSlow280 = (fConst150 * (fSlow92 * fSlow85)); + double fSlow281 = (fConst159 * (fSlow82 * fSlow183)); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input4[i]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input8[i]); + double fTemp5 = double(input10[i]); + double fTemp6 = double(input14[i]); + double fTemp7 = double(input16[i]); + double fTemp8 = double(input18[i]); + double fTemp9 = double(input22[i]); + double fTemp10 = double(input24[i]); + double fTemp11 = double(input28[i]); + double fTemp12 = double(input32[i]); + double fTemp13 = double(input36[i]); + double fTemp14 = double(input38[i]); + double fTemp15 = double(input40[i]); + double fTemp16 = double(input44[i]); + double fTemp17 = double(input46[i]); + double fTemp18 = double(input48[i]); + double fTemp19 = double(input52[i]); + double fTemp20 = double(input58[i]); + double fTemp21 = double(input62[i]); + double fTemp22 = double(input66[i]); + double fTemp23 = double(input70[i]); + double fTemp24 = double(input74[i]); + double fTemp25 = double(input76[i]); + double fTemp26 = double(input78[i]); + double fTemp27 = double(input80[i]); + double fTemp28 = double(input63[i]); + double fTemp29 = double(input65[i]); + double fTemp30 = double(input79[i]); + double fTemp31 = double(input25[i]); + double fTemp32 = double(input35[i]); + double fTemp33 = double(input37[i]); + double fTemp34 = double(input47[i]); + double fTemp35 = double(input51[i]); + double fTemp36 = double(input61[i]); + double fTemp37 = double(input67[i]); + double fTemp38 = double(input77[i]); + double fTemp39 = double(input9[i]); + double fTemp40 = double(input15[i]); + double fTemp41 = double(input17[i]); + double fTemp42 = double(input23[i]); + double fTemp43 = double(input27[i]); + double fTemp44 = double(input33[i]); + double fTemp45 = double(input39[i]); + double fTemp46 = double(input45[i]); + double fTemp47 = double(input53[i]); + double fTemp48 = double(input59[i]); + double fTemp49 = double(input69[i]); + double fTemp50 = double(input75[i]); + double fTemp51 = double(input1[i]); + double fTemp52 = double(input3[i]); + double fTemp53 = double(input5[i]); + double fTemp54 = double(input7[i]); + double fTemp55 = double(input11[i]); + double fTemp56 = double(input13[i]); + double fTemp57 = double(input19[i]); + double fTemp58 = double(input21[i]); + double fTemp59 = double(input29[i]); + double fTemp60 = double(input31[i]); + double fTemp61 = double(input41[i]); + double fTemp62 = double(input43[i]); + double fTemp63 = double(input55[i]); + double fTemp64 = double(input57[i]); + double fTemp65 = double(input71[i]); + double fTemp66 = double(input73[i]); + double fTemp67 = double(input72[i]); + double fTemp68 = double(input49[i]); + double fTemp69 = double(input54[i]); + double fTemp70 = double(input64[i]); + double fTemp71 = double(input68[i]); + double fTemp72 = double(input6[i]); + double fTemp73 = double(input20[i]); + double fTemp74 = double(input42[i]); + double fTemp75 = double(input2[i]); + double fTemp76 = double(input12[i]); + double fTemp77 = double(input26[i]); + double fTemp78 = double(input30[i]); + double fTemp79 = double(input34[i]); + double fTemp80 = double(input50[i]); + double fTemp81 = double(input56[i]); + double fTemp82 = double(input60[i]); + double fTemp83 = ((fSlow9 * ((((((((((((((((((((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow28 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow45 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow48 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow55 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow65 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow67 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow70 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22))))) + (fSlow73 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow78 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow84 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27)))))) + ((fSlow86 * (((fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28)))) + (fSlow91 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow93 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30)))))) + ((fSlow95 * (((((((fConst63 * ((fSlow96 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31)))) + (fSlow97 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32)))))) + (fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow101 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow104 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow106 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow109 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))) + (fSlow111 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38)))))) + ((fSlow113 * (((((((((((fConst72 * ((fSlow114 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39)))) + (fSlow115 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40)))))) + (fSlow117 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow119 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42))))) + (fSlow122 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow124 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow127 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45))))) + (fSlow129 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46))))) + (fSlow132 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47))))) + (fSlow134 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48))))) + (fSlow137 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49))))) + (fSlow139 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50)))))) + ((fSlow141 * (((((((((((((((fConst85 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp51)):(fSlow3 * (fTemp1 * fTemp51)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp52)):(fSlow3 * (fTemp1 * fTemp52)))))) + (fSlow142 * (iSlow1?(fSlow3 * (fTemp3 * fTemp53)):(fSlow3 * (fTemp1 * fTemp53))))) + (fSlow143 * (iSlow1?(fSlow3 * (fTemp3 * fTemp54)):(fSlow3 * (fTemp1 * fTemp54))))) + (fSlow145 * (iSlow1?(fSlow3 * (fTemp3 * fTemp55)):(fSlow3 * (fTemp1 * fTemp55))))) + (fSlow147 * (iSlow1?(fSlow3 * (fTemp3 * fTemp56)):(fSlow3 * (fTemp1 * fTemp56))))) + (fSlow150 * (iSlow1?(fSlow3 * (fTemp3 * fTemp57)):(fSlow3 * (fTemp1 * fTemp57))))) + (fSlow152 * (iSlow1?(fSlow3 * (fTemp3 * fTemp58)):(fSlow3 * (fTemp1 * fTemp58))))) + (fSlow154 * (iSlow1?(fSlow3 * (fTemp3 * fTemp59)):(fSlow3 * (fTemp1 * fTemp59))))) + (fSlow156 * (iSlow1?(fSlow3 * (fTemp3 * fTemp60)):(fSlow3 * (fTemp1 * fTemp60))))) + (fSlow159 * (iSlow1?(fSlow3 * (fTemp3 * fTemp61)):(fSlow3 * (fTemp1 * fTemp61))))) + (fSlow161 * (iSlow1?(fSlow3 * (fTemp3 * fTemp62)):(fSlow3 * (fTemp1 * fTemp62))))) + (fSlow163 * (iSlow1?(fSlow3 * (fTemp3 * fTemp63)):(fSlow3 * (fTemp1 * fTemp63))))) + (fSlow165 * (iSlow1?(fSlow3 * (fTemp3 * fTemp64)):(fSlow3 * (fTemp1 * fTemp64))))) + (fSlow168 * (iSlow1?(fSlow3 * (fTemp3 * fTemp65)):(fSlow3 * (fTemp1 * fTemp65))))) + (fSlow170 * (iSlow1?(fSlow3 * (fTemp3 * fTemp66)):(fSlow3 * (fTemp1 * fTemp66)))))) + ((fSlow178 * (iSlow1?(fSlow3 * (fTemp3 * fTemp67)):(fSlow3 * (fTemp1 * fTemp67)))) + ((fSlow12 * ((((fSlow180 * (iSlow1?(fSlow3 * (fTemp3 * fTemp68)):(fSlow3 * (fTemp1 * fTemp68)))) + (fSlow182 * (iSlow1?(fSlow3 * (fTemp3 * fTemp69)):(fSlow3 * (fTemp1 * fTemp69))))) + (fSlow185 * (iSlow1?(fSlow3 * (fTemp3 * fTemp70)):(fSlow3 * (fTemp1 * fTemp70))))) + (fSlow187 * (iSlow1?(fSlow3 * (fTemp3 * fTemp71)):(fSlow3 * (fTemp1 * fTemp71)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow188 * (iSlow1?(fSlow3 * (fTemp3 * fTemp72)):(fSlow3 * (fTemp1 * fTemp72))))) + (fSlow189 * (iSlow1?(fSlow3 * (fTemp3 * fTemp73)):(fSlow3 * (fTemp1 * fTemp73))))) + (fSlow190 * (iSlow1?(fSlow3 * (fTemp3 * fTemp74)):(fSlow3 * (fTemp1 * fTemp74))))) + (fSlow7 * ((((((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp75)):(fSlow3 * (fTemp1 * fTemp75)))) + (fSlow191 * (iSlow1?(fSlow3 * (fTemp3 * fTemp76)):(fSlow3 * (fTemp1 * fTemp76))))) + (fSlow193 * (iSlow1?(fSlow3 * (fTemp3 * fTemp77)):(fSlow3 * (fTemp1 * fTemp77))))) + (fSlow194 * (iSlow1?(fSlow3 * (fTemp3 * fTemp78)):(fSlow3 * (fTemp1 * fTemp78))))) + (fSlow196 * (iSlow1?(fSlow3 * (fTemp3 * fTemp79)):(fSlow3 * (fTemp1 * fTemp79))))) + (fSlow198 * (iSlow1?(fSlow3 * (fTemp3 * fTemp80)):(fSlow3 * (fTemp1 * fTemp80))))) + (fSlow199 * (iSlow1?(fSlow3 * (fTemp3 * fTemp81)):(fSlow3 * (fTemp1 * fTemp81))))) + (fSlow201 * (iSlow1?(fSlow3 * (fTemp3 * fTemp82)):(fSlow3 * (fTemp1 * fTemp82)))))))))))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp83))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp51)):(fSlow3 * (fRec0[0] * fTemp51))) + (fSlow202 * fTemp83))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp75)):(fSlow3 * (fRec0[0] * fTemp75))) + (fSlow203 * fTemp83))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp52)):(fSlow3 * (fRec0[0] * fTemp52))) + (fSlow204 * fTemp83))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow205 * fTemp83))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp53)):(fSlow3 * (fRec0[0] * fTemp53))) + (fSlow206 * fTemp83))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp72)):(fSlow3 * (fRec0[0] * fTemp72))) + (fSlow207 * fTemp83))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp54)):(fSlow3 * (fRec0[0] * fTemp54))) + (fSlow208 * fTemp83))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow209 * fTemp83))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow210 * fTemp83))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow211 * fTemp83))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp55)):(fSlow3 * (fRec0[0] * fTemp55))) + (fSlow212 * fTemp83))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp76)):(fSlow3 * (fRec0[0] * fTemp76))) + (fSlow213 * fTemp83))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp56)):(fSlow3 * (fRec0[0] * fTemp56))) + (fSlow214 * fTemp83))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow215 * fTemp83))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow216 * fTemp83))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow217 * fTemp83))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow218 * fTemp83))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow219 * fTemp83))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp57)):(fSlow3 * (fRec0[0] * fTemp57))) + (fSlow220 * fTemp83))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp73)):(fSlow3 * (fRec0[0] * fTemp73))) + (fSlow221 * fTemp83))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp58)):(fSlow3 * (fRec0[0] * fTemp58))) + (fSlow222 * fTemp83))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow223 * fTemp83))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow224 * fTemp83))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow225 * fTemp83))); + output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow226 * fTemp83))); + output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp77)):(fSlow3 * (fRec0[0] * fTemp77))) + (fSlow227 * fTemp83))); + output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow228 * fTemp83))); + output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow229 * fTemp83))); + output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp59)):(fSlow3 * (fRec0[0] * fTemp59))) + (fSlow230 * fTemp83))); + output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp78)):(fSlow3 * (fRec0[0] * fTemp78))) + (fSlow231 * fTemp83))); + output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp60)):(fSlow3 * (fRec0[0] * fTemp60))) + (fSlow232 * fTemp83))); + output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow233 * fTemp83))); + output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow234 * fTemp83))); + output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp79)):(fSlow3 * (fRec0[0] * fTemp79))) + (fSlow235 * fTemp83))); + output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow236 * fTemp83))); + output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow237 * fTemp83))); + output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow238 * fTemp83))); + output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow239 * fTemp83))); + output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))) + (fSlow240 * fTemp83))); + output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow241 * fTemp83))); + output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp61)):(fSlow3 * (fRec0[0] * fTemp61))) + (fSlow242 * fTemp83))); + output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp74)):(fSlow3 * (fRec0[0] * fTemp74))) + (fSlow243 * fTemp83))); + output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp62)):(fSlow3 * (fRec0[0] * fTemp62))) + (fSlow244 * fTemp83))); + output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow245 * fTemp83))); + output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow246 * fTemp83))); + output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow247 * fTemp83))); + output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow248 * fTemp83))); + output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow249 * fTemp83))); + output49[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp68)):(fSlow3 * (fRec0[0] * fTemp68))) + (fSlow250 * fTemp83))); + output50[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp80)):(fSlow3 * (fRec0[0] * fTemp80))) + (fSlow251 * fTemp83))); + output51[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow252 * fTemp83))); + output52[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow253 * fTemp83))); + output53[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow254 * fTemp83))); + output54[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp69)):(fSlow3 * (fRec0[0] * fTemp69))) + (fSlow255 * fTemp83))); + output55[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp63)):(fSlow3 * (fRec0[0] * fTemp63))) + (fSlow256 * fTemp83))); + output56[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp81)):(fSlow3 * (fRec0[0] * fTemp81))) + (fSlow257 * fTemp83))); + output57[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp64)):(fSlow3 * (fRec0[0] * fTemp64))) + (fSlow258 * fTemp83))); + output58[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow259 * fTemp83))); + output59[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow260 * fTemp83))); + output60[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp82)):(fSlow3 * (fRec0[0] * fTemp82))) + (fSlow261 * fTemp83))); + output61[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow262 * fTemp83))); + output62[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow263 * fTemp83))); + output63[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow264 * fTemp83))); + output64[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp70)):(fSlow3 * (fRec0[0] * fTemp70))) + (fSlow265 * fTemp83))); + output65[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow266 * fTemp83))); + output66[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow267 * fTemp83))); + output67[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow268 * fTemp83))); + output68[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp71)):(fSlow3 * (fRec0[0] * fTemp71))) + (fSlow269 * fTemp83))); + output69[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow270 * fTemp83))); + output70[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow271 * fTemp83))); + output71[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp65)):(fSlow3 * (fRec0[0] * fTemp65))) + (fSlow272 * fTemp83))); + output72[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp67)):(fSlow3 * (fRec0[0] * fTemp67))) + (fSlow273 * fTemp83))); + output73[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp66)):(fSlow3 * (fRec0[0] * fTemp66))) + (fSlow274 * fTemp83))); + output74[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow275 * fTemp83))); + output75[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow276 * fTemp83))); + output76[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow277 * fTemp83))); + output77[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow278 * fTemp83))); + output78[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow279 * fTemp83))); + output79[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow280 * fTemp83))); + output80[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow281 * fTemp83))); + fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2HOA9.cpp b/source/HOAUGens/HOABeamDirac2HOA9.cpp new file mode 100644 index 0000000000..7e1bb1ce36 --- /dev/null +++ b/source/HOAUGens/HOABeamDirac2HOA9.cpp @@ -0,0 +1,3110 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOABeamDirac2HOA9" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/* link with : "" */ +#include +#include + +double mydsp_faustpower2_f(double value) { + return (value * value); + +} +double mydsp_faustpower3_f(double value) { + return ((value * value) * value); + +} +double mydsp_faustpower4_f(double value) { + return (((value * value) * value) * value); + +} + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + int fSamplingFreq; + double fConst0; + double fConst1; + FAUSTFLOAT fEntry0; + double fRec0[2]; + double fRec1[2]; + FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + double fRec2[2]; + double fRec3[2]; + double fRec4[2]; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + FAUSTFLOAT fVslider2; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fConst119; + double fConst120; + double fConst121; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fConst136; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fConst157; + double fConst158; + double fConst159; + double fConst160; + double fConst161; + double fConst162; + double fConst163; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; + double fConst176; + double fConst177; + double fConst178; + double fConst179; + double fConst180; + double fConst181; + double fConst182; + double fConst183; + double fConst184; + double fConst185; + double fConst186; + double fConst187; + double fConst188; + double fConst189; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOABeamDirac2HOA9"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); + } + + virtual int getNumInputs() { + return 100; + + } + virtual int getNumOutputs() { + return 100; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); + fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(2.0)); + fConst3 = double(tgamma(10.0)); + fConst4 = double(tgamma(4.5)); + fConst5 = (sqrt((11.0 * (fConst2 / fConst3))) * fConst4); + fConst6 = (229.79075351122526 * fConst5); + fConst7 = (114.89537675561263 * fConst5); + fConst8 = double(tgamma(14.0)); + fConst9 = double(tgamma(6.5)); + fConst10 = (sqrt((15.0 * (fConst2 / fConst8))) * fConst9); + fConst11 = (663.83995458798404 * fConst10); + fConst12 = double(tgamma(4.0)); + fConst13 = double(tgamma(12.0)); + fConst14 = (sqrt((15.0 * (fConst12 / fConst13))) * fConst4); + fConst15 = (0.47140452079103168 * fConst14); + fConst16 = double(tgamma(8.5)); + fConst17 = (sqrt((19.0 * (fConst2 / double(tgamma(18.0))))) * fConst16); + fConst18 = (6944.7872172281404 * fConst17); + fConst19 = double(tgamma(8.0)); + fConst20 = double(tgamma(2.5)); + fConst21 = (sqrt((19.0 * (fConst19 / fConst13))) * fConst20); + fConst22 = (0.40406101782088433 * fConst21); + fConst23 = double(tgamma(6.0)); + fConst24 = (sqrt((19.0 * (fConst23 / fConst8))) * fConst4); + fConst25 = (0.28284271247461906 * fConst24); + fConst26 = (3472.3936086140702 * fConst17); + fConst27 = double(tgamma(7.5)); + fConst28 = double(tgamma(1.0)); + fConst29 = double(tgamma(15.0)); + fConst30 = sqrt((15.0 * (fConst28 / fConst29))); + fConst31 = (102.12922378276677 * fConst30); + fConst32 = double(tgamma(16.0)); + fConst33 = sqrt((17.0 * (fConst2 / fConst32))); + fConst34 = (1531.9383567415016 * fConst33); + fConst35 = double(tgamma(3.0)); + fConst36 = double(tgamma(17.0)); + fConst37 = sqrt((19.0 * (fConst35 / fConst36))); + fConst38 = (0.70710678118654757 * fConst37); + fConst39 = double(tgamma(5.0)); + fConst40 = sqrt((5.0 * (fConst28 / fConst39))); + fConst41 = sqrt((7.0 * (fConst2 / fConst23))); + fConst42 = (31.915382432114615 * fConst41); + fConst43 = (15.957691216057308 * fConst41); + fConst44 = double(tgamma(9.0)); + fConst45 = (sqrt((9.0 * (fConst28 / fConst44))) * fConst4); + fConst46 = (25.532305945691693 * fConst45); + fConst47 = double(tgamma(7.0)); + fConst48 = (sqrt((9.0 * (fConst35 / fConst47))) * fConst20); + fConst49 = (1.4142135623730951 * fConst48); + fConst50 = (0.70710678118654757 * fConst48); + fConst51 = (12.766152972845846 * fConst45); + fConst52 = (sqrt((11.0 * (fConst12 / fConst19))) * fConst20); + fConst53 = (0.94280904158206336 * fConst52); + fConst54 = (0.47140452079103168 * fConst52); + fConst55 = double(tgamma(13.0)); + fConst56 = (sqrt((13.0 * (fConst28 / fConst55))) * fConst9); + fConst57 = (51.064611891383386 * fConst56); + fConst58 = double(tgamma(11.0)); + fConst59 = (sqrt((13.0 * (fConst35 / fConst58))) * fConst4); + fConst60 = (1.4142135623730951 * fConst59); + fConst61 = (sqrt((13.0 * (fConst39 / fConst44))) * fConst20); + fConst62 = (0.70710678118654757 * fConst61); + fConst63 = (0.35355339059327379 * fConst61); + fConst64 = (0.70710678118654757 * fConst59); + fConst65 = (0.94280904158206336 * fConst14); + fConst66 = (sqrt((15.0 * (fConst23 / fConst3))) * fConst20); + fConst67 = (0.28284271247461906 * fConst66); + fConst68 = (sqrt((17.0 * (fConst35 / fConst29))) * fConst9); + fConst69 = (0.70710678118654757 * fConst68); + fConst70 = (sqrt((17.0 * (fConst47 / fConst58))) * fConst20); + fConst71 = (0.47140452079103168 * fConst70); + fConst72 = (0.23570226039551584 * fConst70); + fConst73 = (sqrt((17.0 * (fConst39 / fConst55))) * fConst4); + fConst74 = (0.35355339059327379 * fConst73); + fConst75 = (sqrt((17.0 * (fConst28 / fConst36))) * fConst16); + fConst76 = (204.25844756553354 * fConst75); + fConst77 = (sqrt((19.0 * (fConst12 / fConst32))) * fConst9); + fConst78 = (0.47140452079103168 * fConst77); + fConst79 = (0.20203050891044216 * fConst21); + fConst80 = double(tgamma(5.5)); + fConst81 = sqrt((11.0 * (fConst28 / fConst58))); + fConst82 = (25.532305945691693 * fConst81); + fConst83 = sqrt((13.0 * (fConst2 / fConst13))); + fConst84 = (280.85536540260864 * fConst83); + fConst85 = sqrt((15.0 * (fConst35 / fConst55))); + fConst86 = (0.70710678118654757 * fConst85); + fConst87 = sqrt((17.0 * (fConst12 / fConst8))); + fConst88 = (0.47140452079103168 * fConst87); + fConst89 = sqrt((19.0 * (fConst39 / fConst29))); + fConst90 = (0.35355339059327379 * fConst89); + fConst91 = double(tgamma(3.5)); + fConst92 = sqrt((7.0 * (fConst28 / fConst47))); + fConst93 = (6.3830764864229232 * fConst92); + fConst94 = sqrt((9.0 * (fConst2 / fConst19))); + fConst95 = (44.681535404960464 * fConst94); + fConst96 = sqrt((11.0 * (fConst35 / fConst44))); + fConst97 = (0.70710678118654757 * fConst96); + fConst98 = sqrt((13.0 * (fConst12 / fConst3))); + fConst99 = (0.47140452079103168 * fConst98); + fConst100 = sqrt((15.0 * (fConst39 / fConst58))); + fConst101 = (0.35355339059327379 * fConst100); + fConst102 = sqrt((17.0 * (fConst23 / fConst13))); + fConst103 = (0.28284271247461906 * fConst102); + fConst104 = sqrt((19.0 * (fConst47 / fConst55))); + fConst105 = (0.23570226039551584 * fConst104); + fConst106 = double(tgamma(1.5)); + fConst107 = sqrt((3.0 * (fConst28 / fConst35))); + fConst108 = (1.5957691216057308 * fConst107); + fConst109 = sqrt((5.0 * (fConst2 / fConst12))); + fConst110 = (4.7873073648171927 * fConst109); + fConst111 = sqrt((7.0 * (fConst35 / fConst39))); + fConst112 = (0.70710678118654757 * fConst111); + fConst113 = sqrt((9.0 * (fConst12 / fConst23))); + fConst114 = (0.47140452079103168 * fConst113); + fConst115 = sqrt((11.0 * (fConst39 / fConst47))); + fConst116 = (0.35355339059327379 * fConst115); + fConst117 = sqrt((13.0 * (fConst23 / fConst19))); + fConst118 = (0.28284271247461906 * fConst117); + fConst119 = sqrt((15.0 * (fConst47 / fConst44))); + fConst120 = (0.23570226039551584 * fConst119); + fConst121 = sqrt((17.0 * (fConst19 / fConst3))); + fConst122 = (0.20203050891044216 * fConst121); + fConst123 = sqrt((19.0 * (fConst44 / fConst58))); + fConst124 = (0.17677669529663689 * fConst123); + fConst125 = (fConst30 * fConst27); + fConst126 = (102.12922378276677 * fConst125); + fConst127 = (0.56568542494923812 * fConst66); + fConst128 = (408.51689513106709 * fConst75); + fConst129 = (0.70710678118654757 * fConst73); + fConst130 = (sqrt((19.0 * (fConst28 / double(tgamma(19.0))))) * double(tgamma(9.5))); + fConst131 = (408.51689513106709 * fConst130); + fConst132 = (0.56568542494923812 * fConst24); + fConst133 = (0.12698727186848197 * (fConst107 * fConst106)); + fConst134 = (fConst40 * fConst20); + fConst135 = (0.50794908747392786 * fConst134); + fConst136 = (0.3809618156054459 * (fConst109 * fConst106)); + fConst137 = (0.25397454373696393 * fConst134); + fConst138 = (0.50794908747392786 * (fConst92 * fConst91)); + fConst139 = (fConst41 * fConst20); + fConst140 = (2.5397454373696391 * fConst139); + fConst141 = (0.056269769759819135 * (fConst111 * fConst106)); + fConst142 = (1.2698727186848195 * fConst139); + fConst143 = (2.0317963498957115 * fConst45); + fConst144 = (3.5556436123174948 * (fConst94 * fConst91)); + fConst145 = (0.11253953951963827 * fConst48); + fConst146 = (0.037513179839879424 * (fConst113 * fConst106)); + fConst147 = (0.056269769759819135 * fConst48); + fConst148 = (1.0158981749478557 * fConst45); + fConst149 = (2.0317963498957115 * (fConst81 * fConst80)); + fConst150 = (18.286167149061402 * fConst5); + fConst151 = (0.056269769759819135 * (fConst96 * fConst91)); + fConst152 = (0.075026359679758847 * fConst52); + fConst153 = (0.028134884879909568 * (fConst115 * fConst106)); + fConst154 = (0.037513179839879424 * fConst52); + fConst155 = (9.1430835745307011 * fConst5); + fConst156 = (4.0635926997914229 * fConst56); + fConst157 = (22.349759848852827 * (fConst83 * fConst80)); + fConst158 = (0.11253953951963827 * fConst59); + fConst159 = (0.037513179839879424 * (fConst98 * fConst91)); + fConst160 = (0.056269769759819135 * fConst61); + fConst161 = (0.022507907903927659 * (fConst117 * fConst106)); + fConst162 = (0.028134884879909568 * fConst61); + fConst163 = (0.056269769759819135 * fConst59); + fConst164 = (8.1271853995828458 * fConst125); + fConst165 = (52.826705097288496 * fConst10); + fConst166 = (0.056269769759819135 * (fConst85 * fConst80)); + fConst167 = (0.075026359679758847 * fConst14); + fConst168 = (0.028134884879909568 * (fConst100 * fConst91)); + fConst169 = (0.045015815807855318 * fConst66); + fConst170 = (0.018756589919939712 * (fConst119 * fConst106)); + fConst171 = (0.022507907903927659 * fConst66); + fConst172 = (0.037513179839879424 * fConst14); + fConst173 = (32.508741598331383 * fConst75); + fConst174 = (121.90778099374268 * (fConst33 * fConst27)); + fConst175 = (0.056269769759819135 * fConst68); + fConst176 = (0.037513179839879424 * (fConst87 * fConst80)); + fConst177 = (0.056269769759819135 * fConst73); + fConst178 = (0.022507907903927659 * (fConst102 * fConst91)); + fConst179 = (0.037513179839879424 * fConst70); + fConst180 = (0.016077077074234038 * (fConst121 * fConst106)); + fConst181 = (0.018756589919939712 * fConst70); + fConst182 = (0.028134884879909568 * fConst73); + fConst183 = (16.254370799165692 * fConst75); + fConst184 = (32.508741598331383 * fConst130); + fConst185 = (552.64860717163344 * fConst17); + fConst186 = (0.056269769759819135 * (fConst37 * fConst27)); + fConst187 = (0.037513179839879424 * fConst77); + fConst188 = (0.028134884879909568 * (fConst89 * fConst80)); + fConst189 = (0.045015815807855318 * fConst24); + fConst190 = (0.018756589919939712 * (fConst104 * fConst91)); + fConst191 = (0.032154154148468075 * fConst21); + fConst192 = (0.014067442439954784 * (fConst123 * fConst106)); + fConst193 = (0.016077077074234038 * fConst21); + fConst194 = (0.022507907903927659 * fConst24); + fConst195 = (276.32430358581672 * fConst17); + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fEntry0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + fVslider2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec0[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec1[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openHorizontalBox("Parameters"); + ui_interface->declare(0, "2", ""); + ui_interface->openVerticalBox("On/Off"); + ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->closeBox(); + ui_interface->declare(&fEntry0, "3", ""); + ui_interface->declare(&fEntry0, "unit", "s"); + ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider1, "4", ""); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* input81 = inputs[81]; + FAUSTFLOAT* input82 = inputs[82]; + FAUSTFLOAT* input83 = inputs[83]; + FAUSTFLOAT* input84 = inputs[84]; + FAUSTFLOAT* input85 = inputs[85]; + FAUSTFLOAT* input86 = inputs[86]; + FAUSTFLOAT* input87 = inputs[87]; + FAUSTFLOAT* input88 = inputs[88]; + FAUSTFLOAT* input89 = inputs[89]; + FAUSTFLOAT* input90 = inputs[90]; + FAUSTFLOAT* input91 = inputs[91]; + FAUSTFLOAT* input92 = inputs[92]; + FAUSTFLOAT* input93 = inputs[93]; + FAUSTFLOAT* input94 = inputs[94]; + FAUSTFLOAT* input95 = inputs[95]; + FAUSTFLOAT* input96 = inputs[96]; + FAUSTFLOAT* input97 = inputs[97]; + FAUSTFLOAT* input98 = inputs[98]; + FAUSTFLOAT* input99 = inputs[99]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + FAUSTFLOAT* output81 = outputs[81]; + FAUSTFLOAT* output82 = outputs[82]; + FAUSTFLOAT* output83 = outputs[83]; + FAUSTFLOAT* output84 = outputs[84]; + FAUSTFLOAT* output85 = outputs[85]; + FAUSTFLOAT* output86 = outputs[86]; + FAUSTFLOAT* output87 = outputs[87]; + FAUSTFLOAT* output88 = outputs[88]; + FAUSTFLOAT* output89 = outputs[89]; + FAUSTFLOAT* output90 = outputs[90]; + FAUSTFLOAT* output91 = outputs[91]; + FAUSTFLOAT* output92 = outputs[92]; + FAUSTFLOAT* output93 = outputs[93]; + FAUSTFLOAT* output94 = outputs[94]; + FAUSTFLOAT* output95 = outputs[95]; + FAUSTFLOAT* output96 = outputs[96]; + FAUSTFLOAT* output97 = outputs[97]; + FAUSTFLOAT* output98 = outputs[98]; + FAUSTFLOAT* output99 = outputs[99]; + double fSlow0 = double(fCheckbox0); + int iSlow1 = int(fSlow0); + double fSlow2 = double(fEntry0); + double fSlow3 = (fConst1 / fSlow2); + int iSlow4 = (fSlow0 > 0.0); + double fSlow5 = (fConst0 * fSlow2); + int iSlow6 = ((1.0 - fSlow0) > 0.0); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + double fSlow9 = mydsp_faustpower2_f(fSlow7); + double fSlow10 = ((3.0 * fSlow9) + -1.0); + double fSlow11 = ((2.5 * fSlow10) + -2.0); + double fSlow12 = (0.88191710368819687 * fSlow11); + double fSlow13 = double(fVslider2); + double fSlow14 = cos(fSlow13); + double fSlow15 = mydsp_faustpower2_f(fSlow14); + double fSlow16 = ((4.0 * fSlow15) + -1.0); + double fSlow17 = (fSlow16 + -1.0); + double fSlow18 = (fSlow17 * fSlow14); + double fSlow19 = (1.0 - fSlow9); + double fSlow20 = mydsp_faustpower2_f(fSlow19); + double fSlow21 = sin(fSlow13); + double fSlow22 = ((fSlow18 * fSlow20) * fSlow21); + double fSlow23 = (fConst6 * fSlow22); + double fSlow24 = ((2.333333333333333 * (fSlow11 * fSlow9)) - (1.5 * fSlow10)); + double fSlow25 = ((2.25 * fSlow24) - (1.3333333333333333 * fSlow11)); + double fSlow26 = (0.66332495807108005 * fSlow25); + double fSlow27 = ((2.0 * fSlow15) + -1.0); + double fSlow28 = ((2.0 * fSlow27) + -1.0); + double fSlow29 = (1.0 - fSlow28); + double fSlow30 = (1.0 - (2.0 * (fSlow29 * fSlow15))); + double fSlow31 = (fSlow30 * fSlow20); + double fSlow32 = (fConst7 * fSlow31); + double fSlow33 = (1.0 - fSlow17); + double fSlow34 = (1.0 - (4.0 * (fSlow33 * fSlow15))); + double fSlow35 = (fSlow17 - fSlow34); + double fSlow36 = (0.0 - (2.0 * (fSlow35 * fSlow14))); + double fSlow37 = mydsp_faustpower3_f(fSlow19); + double fSlow38 = ((fSlow36 * fSlow37) * fSlow21); + double fSlow39 = (fConst11 * fSlow38); + double fSlow40 = ((2.2000000000000002 * (fSlow25 * fSlow9)) - (1.25 * fSlow24)); + double fSlow41 = ((2.1666666666666665 * fSlow40) - (1.2000000000000002 * fSlow25)); + double fSlow42 = (0.55328333517248807 * fSlow41); + double fSlow43 = ((893.67630033964599 * fSlow9) + -81.24330003087691); + double fSlow44 = ((6.5 * fSlow43) + -812.43300030876912); + double fSlow45 = (fSlow30 * fSlow44); + double fSlow46 = (fConst15 * (fSlow45 * fSlow20)); + double fSlow47 = ((2.0 * fSlow36) + (4.0 * (fSlow33 * fSlow14))); + double fSlow48 = ((fSlow47 * fSlow14) + -1.0); + double fSlow49 = ((fSlow35 + fSlow48) * fSlow14); + double fSlow50 = mydsp_faustpower4_f(fSlow19); + double fSlow51 = (fSlow49 * fSlow50); + double fSlow52 = (fSlow51 * fSlow21); + double fSlow53 = (fConst18 * fSlow52); + double fSlow54 = ((78.986541696685876 * fSlow9) + -11.283791670955125); + double fSlow55 = ((4.5 * fSlow54) + -67.702750025730751); + double fSlow56 = ((3.6666666666666665 * (fSlow55 * fSlow9)) - (3.5 * fSlow54)); + double fSlow57 = ((3.25 * fSlow56) - (2.6666666666666665 * fSlow55)); + double fSlow58 = ((3.0 * (fSlow57 * fSlow9)) - (2.25 * fSlow56)); + double fSlow59 = ((2.833333333333333 * fSlow58) - (2.0 * fSlow57)); + double fSlow60 = (fSlow59 * fSlow14); + double fSlow61 = (fConst22 * ((fSlow60 * fSlow19) * fSlow21)); + double fSlow62 = ((2.1428571428571428 * (fSlow41 * fSlow9)) - (1.1666666666666665 * fSlow40)); + double fSlow63 = ((2.125 * fSlow62) - (1.1428571428571428 * fSlow41)); + double fSlow64 = (0.48432210483785265 * fSlow63); + double fSlow65 = ((5.0 * (fSlow44 * fSlow9)) - (5.5 * fSlow43)); + double fSlow66 = ((4.25 * fSlow65) - (4.0 * fSlow44)); + double fSlow67 = (fSlow30 * fSlow66); + double fSlow68 = (fConst25 * (fSlow67 * fSlow20)); + double fSlow69 = ((2.0 * fSlow30) - fSlow28); + double fSlow70 = (fSlow29 + fSlow69); + double fSlow71 = ((2.0 * (fSlow70 * fSlow15)) + -1.0); + double fSlow72 = ((2.0 * fSlow71) - fSlow69); + double fSlow73 = (1.0 - (2.0 * ((fSlow70 - fSlow72) * fSlow15))); + double fSlow74 = (fSlow73 * fSlow50); + double fSlow75 = (fConst26 * fSlow74); + double fSlow76 = pow(fSlow19, 3.5); + double fSlow77 = (fConst27 * fSlow76); + double fSlow78 = (fSlow72 * fSlow14); + double fSlow79 = (fConst31 * fSlow78); + double fSlow80 = (fSlow48 * fSlow7); + double fSlow81 = (fConst34 * (fSlow80 * fSlow21)); + double fSlow82 = (fSlow78 * fSlow7); + double fSlow83 = (fConst34 * fSlow82); + double fSlow84 = ((18415.148006998763 * fSlow9) + -1083.244000411692); + double fSlow85 = (fSlow48 * fSlow84); + double fSlow86 = (fConst38 * (fSlow85 * fSlow21)); + double fSlow87 = ((fSlow72 * fSlow84) * fSlow14); + double fSlow88 = (fConst38 * fSlow87); + double fSlow89 = (6.3830764864229232 * (fSlow14 * fSlow21)); + double fSlow90 = (3.1915382432114616 * fSlow27); + double fSlow91 = (fSlow14 * fSlow7); + double fSlow92 = (fConst42 * (fSlow91 * fSlow21)); + double fSlow93 = (fSlow27 * fSlow7); + double fSlow94 = (fConst43 * fSlow93); + double fSlow95 = (fConst46 * ((fSlow18 * fSlow19) * fSlow21)); + double fSlow96 = (fSlow54 * fSlow14); + double fSlow97 = (fConst49 * (fSlow96 * fSlow21)); + double fSlow98 = (fSlow27 * fSlow54); + double fSlow99 = (fConst50 * fSlow98); + double fSlow100 = (fConst51 * (fSlow30 * fSlow19)); + double fSlow101 = ((fSlow55 * fSlow14) * fSlow7); + double fSlow102 = (fConst53 * (fSlow101 * fSlow21)); + double fSlow103 = ((fSlow27 * fSlow55) * fSlow7); + double fSlow104 = (fConst54 * fSlow103); + double fSlow105 = (fConst57 * ((fSlow36 * fSlow20) * fSlow21)); + double fSlow106 = ((fSlow17 * fSlow43) * fSlow14); + double fSlow107 = (fConst60 * ((fSlow106 * fSlow19) * fSlow21)); + double fSlow108 = (fSlow56 * fSlow14); + double fSlow109 = (fConst62 * (fSlow108 * fSlow21)); + double fSlow110 = (fSlow27 * fSlow56); + double fSlow111 = (fConst63 * fSlow110); + double fSlow112 = (fSlow30 * fSlow43); + double fSlow113 = (fConst64 * (fSlow112 * fSlow19)); + double fSlow114 = (fConst57 * (fSlow71 * fSlow20)); + double fSlow115 = (((fSlow17 * fSlow44) * fSlow14) * fSlow7); + double fSlow116 = (fConst65 * ((fSlow115 * fSlow19) * fSlow21)); + double fSlow117 = ((fSlow27 * fSlow57) * fSlow7); + double fSlow118 = (fConst67 * fSlow117); + double fSlow119 = (fSlow71 * fSlow7); + double fSlow120 = (fConst11 * (fSlow119 * fSlow20)); + double fSlow121 = ((7041.0860026759983 * fSlow9) + -469.40573351173322); + double fSlow122 = (fSlow36 * fSlow121); + double fSlow123 = (fConst69 * ((fSlow122 * fSlow20) * fSlow21)); + double fSlow124 = (fSlow58 * fSlow14); + double fSlow125 = (fConst71 * (fSlow124 * fSlow21)); + double fSlow126 = (fSlow27 * fSlow58); + double fSlow127 = (fConst72 * fSlow126); + double fSlow128 = (fSlow30 * fSlow65); + double fSlow129 = (fConst74 * (fSlow128 * fSlow19)); + double fSlow130 = (fSlow71 * fSlow121); + double fSlow131 = (fConst69 * (fSlow130 * fSlow20)); + double fSlow132 = (fConst76 * (fSlow73 * fSlow37)); + double fSlow133 = ((8.5 * fSlow121) + -6571.6802691642652); + double fSlow134 = ((fSlow36 * fSlow133) * fSlow7); + double fSlow135 = (fConst78 * ((fSlow134 * fSlow20) * fSlow21)); + double fSlow136 = ((fSlow27 * fSlow59) * fSlow7); + double fSlow137 = (fConst79 * fSlow136); + double fSlow138 = ((fSlow71 * fSlow133) * fSlow7); + double fSlow139 = (fConst78 * (fSlow138 * fSlow20)); + double fSlow140 = pow(fSlow19, 2.5); + double fSlow141 = (fConst80 * fSlow140); + double fSlow142 = (fSlow34 * fSlow21); + double fSlow143 = (fSlow69 * fSlow14); + double fSlow144 = (fSlow34 * fSlow7); + double fSlow145 = (fConst84 * (fSlow144 * fSlow21)); + double fSlow146 = (fSlow143 * fSlow7); + double fSlow147 = (fConst84 * fSlow146); + double fSlow148 = ((2581.7315343145328 * fSlow9) + -198.59473340881021); + double fSlow149 = (fSlow34 * fSlow148); + double fSlow150 = (fConst86 * (fSlow149 * fSlow21)); + double fSlow151 = ((fSlow69 * fSlow148) * fSlow14); + double fSlow152 = (fConst86 * fSlow151); + double fSlow153 = ((7.5 * fSlow148) + -2383.1368009057223); + double fSlow154 = ((fSlow34 * fSlow153) * fSlow7); + double fSlow155 = (fConst88 * (fSlow154 * fSlow21)); + double fSlow156 = (((fSlow69 * fSlow153) * fSlow14) * fSlow7); + double fSlow157 = (fConst88 * fSlow156); + double fSlow158 = ((5.6666666666666661 * (fSlow153 * fSlow9)) - (6.5 * fSlow148)); + double fSlow159 = (fSlow34 * fSlow158); + double fSlow160 = (fConst90 * (fSlow159 * fSlow21)); + double fSlow161 = ((fSlow69 * fSlow158) * fSlow14); + double fSlow162 = (fConst90 * fSlow161); + double fSlow163 = pow(fSlow19, 1.5); + double fSlow164 = (fConst91 * fSlow163); + double fSlow165 = (fSlow16 * fSlow21); + double fSlow166 = (fSlow28 * fSlow14); + double fSlow167 = (fSlow16 * fSlow7); + double fSlow168 = (fConst95 * (fSlow167 * fSlow21)); + double fSlow169 = (fSlow166 * fSlow7); + double fSlow170 = (fConst95 * fSlow169); + double fSlow171 = ((284.35155010806915 * fSlow9) + -31.594616678674353); + double fSlow172 = (fSlow16 * fSlow171); + double fSlow173 = (fConst97 * (fSlow172 * fSlow21)); + double fSlow174 = ((fSlow28 * fSlow171) * fSlow14); + double fSlow175 = (fConst97 * fSlow174); + double fSlow176 = ((5.5 * fSlow171) + -252.75693342939482); + double fSlow177 = ((fSlow16 * fSlow176) * fSlow7); + double fSlow178 = (fConst99 * (fSlow177 * fSlow21)); + double fSlow179 = (((fSlow28 * fSlow176) * fSlow14) * fSlow7); + double fSlow180 = (fConst99 * fSlow179); + double fSlow181 = ((4.333333333333333 * (fSlow176 * fSlow9)) - (4.5 * fSlow171)); + double fSlow182 = (fSlow16 * fSlow181); + double fSlow183 = (fConst101 * (fSlow182 * fSlow21)); + double fSlow184 = ((fSlow28 * fSlow181) * fSlow14); + double fSlow185 = (fConst101 * fSlow184); + double fSlow186 = ((3.75 * fSlow181) - (3.333333333333333 * fSlow176)); + double fSlow187 = ((fSlow16 * fSlow186) * fSlow7); + double fSlow188 = (fConst103 * (fSlow187 * fSlow21)); + double fSlow189 = (((fSlow28 * fSlow186) * fSlow14) * fSlow7); + double fSlow190 = (fConst103 * fSlow189); + double fSlow191 = ((3.4000000000000004 * (fSlow186 * fSlow9)) - (2.75 * fSlow181)); + double fSlow192 = (fSlow16 * fSlow191); + double fSlow193 = (fConst105 * (fSlow192 * fSlow21)); + double fSlow194 = ((fSlow28 * fSlow191) * fSlow14); + double fSlow195 = (fConst105 * fSlow194); + double fSlow196 = pow(fSlow19, 0.5); + double fSlow197 = (fConst106 * fSlow196); + double fSlow198 = (fConst110 * (fSlow7 * fSlow21)); + double fSlow199 = (fConst110 * fSlow91); + double fSlow200 = ((16.925687506432688 * fSlow9) + -3.3851375012865379); + double fSlow201 = (fConst112 * (fSlow200 * fSlow21)); + double fSlow202 = (fSlow200 * fSlow14); + double fSlow203 = (fConst112 * fSlow202); + double fSlow204 = ((3.5 * fSlow200) + -13.540550005146152); + double fSlow205 = (fSlow204 * fSlow7); + double fSlow206 = (fConst114 * (fSlow205 * fSlow21)); + double fSlow207 = ((fSlow204 * fSlow14) * fSlow7); + double fSlow208 = (fConst114 * fSlow207); + double fSlow209 = ((3.0 * (fSlow204 * fSlow9)) - (2.5 * fSlow200)); + double fSlow210 = (fConst116 * (fSlow209 * fSlow21)); + double fSlow211 = (fSlow209 * fSlow14); + double fSlow212 = (fConst116 * fSlow211); + double fSlow213 = ((2.75 * fSlow209) - (2.0 * fSlow204)); + double fSlow214 = (fSlow213 * fSlow7); + double fSlow215 = (fConst118 * (fSlow214 * fSlow21)); + double fSlow216 = ((fSlow213 * fSlow14) * fSlow7); + double fSlow217 = (fConst118 * fSlow216); + double fSlow218 = ((2.6000000000000001 * (fSlow213 * fSlow9)) - (1.75 * fSlow209)); + double fSlow219 = (fConst120 * (fSlow218 * fSlow21)); + double fSlow220 = (fSlow218 * fSlow14); + double fSlow221 = (fConst120 * fSlow220); + double fSlow222 = ((2.5 * fSlow218) - (1.6000000000000001 * fSlow213)); + double fSlow223 = (fSlow222 * fSlow7); + double fSlow224 = (fConst122 * (fSlow223 * fSlow21)); + double fSlow225 = ((fSlow222 * fSlow14) * fSlow7); + double fSlow226 = (fConst122 * fSlow225); + double fSlow227 = ((2.4285714285714284 * (fSlow222 * fSlow9)) - (1.5 * fSlow218)); + double fSlow228 = (fConst124 * (fSlow227 * fSlow21)); + double fSlow229 = (fSlow227 * fSlow14); + double fSlow230 = (fConst124 * fSlow229); + double fSlow231 = (1.1180339887498949 * fSlow10); + double fSlow232 = (0.75 * fSlow24); + double fSlow233 = (0.60092521257733145 * fSlow40); + double fSlow234 = (0.51538820320220757 * fSlow62); + double fSlow235 = (fSlow48 * fSlow76); + double fSlow236 = (fConst126 * fSlow235); + double fSlow237 = (((fSlow57 * fSlow14) * fSlow7) * fSlow19); + double fSlow238 = (fConst127 * fSlow237); + double fSlow239 = (fConst128 * fSlow51); + double fSlow240 = (((fSlow17 * fSlow65) * fSlow14) * fSlow20); + double fSlow241 = (fConst129 * fSlow240); + double fSlow242 = pow(fSlow19, 4.5); + double fSlow243 = (((((4.0 * fSlow49) - fSlow47) * fSlow14) + 1.0) * fSlow242); + double fSlow244 = (fConst131 * fSlow243); + double fSlow245 = ((((fSlow17 * fSlow66) * fSlow14) * fSlow7) * fSlow20); + double fSlow246 = (fConst132 * fSlow245); + double fSlow247 = ((((2.0 * fSlow73) - fSlow72) * fSlow14) * fSlow242); + double fSlow248 = (fConst131 * fSlow247); + double fSlow249 = (fConst133 * (fSlow196 * fSlow21)); + double fSlow250 = (0.13783222385544802 * fSlow7); + double fSlow251 = (fConst133 * (fSlow14 * fSlow196)); + double fSlow252 = (fConst135 * ((fSlow14 * fSlow19) * fSlow21)); + double fSlow253 = (fConst136 * ((fSlow7 * fSlow196) * fSlow21)); + double fSlow254 = (0.088970317927147144 * fSlow10); + double fSlow255 = (fConst136 * (fSlow91 * fSlow196)); + double fSlow256 = (fConst137 * (fSlow27 * fSlow19)); + double fSlow257 = (fConst138 * ((fSlow16 * fSlow163) * fSlow21)); + double fSlow258 = (fConst140 * ((fSlow91 * fSlow19) * fSlow21)); + double fSlow259 = (fConst141 * ((fSlow200 * fSlow196) * fSlow21)); + double fSlow260 = (0.070180733224632072 * (fSlow11 * fSlow7)); + double fSlow261 = (fConst141 * (fSlow202 * fSlow196)); + double fSlow262 = (fConst142 * (fSlow93 * fSlow19)); + double fSlow263 = (fConst138 * (fSlow166 * fSlow163)); + double fSlow264 = (fConst143 * fSlow22); + double fSlow265 = (fConst144 * ((fSlow167 * fSlow163) * fSlow21)); + double fSlow266 = (fConst145 * ((fSlow96 * fSlow19) * fSlow21)); + double fSlow267 = (fConst146 * ((fSlow205 * fSlow196) * fSlow21)); + double fSlow268 = (0.059683103659460751 * fSlow24); + double fSlow269 = (fConst146 * (fSlow207 * fSlow196)); + double fSlow270 = (fConst147 * (fSlow98 * fSlow19)); + double fSlow271 = (fConst144 * (fSlow169 * fSlow163)); + double fSlow272 = (fConst148 * fSlow31); + double fSlow273 = (fConst149 * ((fSlow34 * fSlow140) * fSlow21)); + double fSlow274 = (fConst150 * (((fSlow18 * fSlow7) * fSlow20) * fSlow21)); + double fSlow275 = (fConst151 * ((fSlow172 * fSlow163) * fSlow21)); + double fSlow276 = (fConst152 * ((fSlow101 * fSlow19) * fSlow21)); + double fSlow277 = (fConst153 * ((fSlow209 * fSlow196) * fSlow21)); + double fSlow278 = (0.052785722976618307 * (fSlow25 * fSlow7)); + double fSlow279 = (fConst153 * (fSlow211 * fSlow196)); + double fSlow280 = (fConst154 * (fSlow103 * fSlow19)); + double fSlow281 = (fConst151 * (fSlow174 * fSlow163)); + double fSlow282 = (fConst155 * ((fSlow30 * fSlow7) * fSlow20)); + double fSlow283 = (fConst149 * (fSlow143 * fSlow140)); + double fSlow284 = (fConst156 * fSlow38); + double fSlow285 = (fConst157 * ((fSlow144 * fSlow140) * fSlow21)); + double fSlow286 = (fConst158 * ((fSlow106 * fSlow20) * fSlow21)); + double fSlow287 = (fConst159 * ((fSlow177 * fSlow163) * fSlow21)); + double fSlow288 = (fConst160 * ((fSlow108 * fSlow19) * fSlow21)); + double fSlow289 = (fConst161 * ((fSlow214 * fSlow196) * fSlow21)); + double fSlow290 = (0.047820109005115151 * fSlow40); + double fSlow291 = (fConst161 * (fSlow216 * fSlow196)); + double fSlow292 = (fConst162 * (fSlow110 * fSlow19)); + double fSlow293 = (fConst159 * (fSlow179 * fSlow163)); + double fSlow294 = (fConst163 * (fSlow112 * fSlow20)); + double fSlow295 = (fConst157 * (fSlow146 * fSlow140)); + double fSlow296 = (fConst156 * (fSlow71 * fSlow37)); + double fSlow297 = (fConst164 * (fSlow235 * fSlow21)); + double fSlow298 = (fConst165 * (((fSlow36 * fSlow7) * fSlow37) * fSlow21)); + double fSlow299 = (fConst166 * ((fSlow149 * fSlow140) * fSlow21)); + double fSlow300 = (fConst167 * ((fSlow115 * fSlow20) * fSlow21)); + double fSlow301 = (fConst168 * ((fSlow182 * fSlow163) * fSlow21)); + double fSlow302 = (fConst169 * (fSlow237 * fSlow21)); + double fSlow303 = (fConst170 * ((fSlow218 * fSlow196) * fSlow21)); + double fSlow304 = (0.044028888861535699 * (fSlow41 * fSlow7)); + double fSlow305 = (fConst170 * (fSlow220 * fSlow196)); + double fSlow306 = (fConst171 * (fSlow117 * fSlow19)); + double fSlow307 = (fConst168 * (fSlow184 * fSlow163)); + double fSlow308 = (fConst172 * ((fSlow45 * fSlow7) * fSlow20)); + double fSlow309 = (fConst166 * (fSlow151 * fSlow140)); + double fSlow310 = (fConst165 * (fSlow119 * fSlow37)); + double fSlow311 = (fConst164 * (fSlow78 * fSlow76)); + double fSlow312 = (fConst173 * fSlow52); + double fSlow313 = (fConst174 * ((fSlow80 * fSlow76) * fSlow21)); + double fSlow314 = (fConst175 * ((fSlow122 * fSlow37) * fSlow21)); + double fSlow315 = (fConst176 * ((fSlow154 * fSlow140) * fSlow21)); + double fSlow316 = (fConst177 * (fSlow240 * fSlow21)); + double fSlow317 = (fConst178 * ((fSlow187 * fSlow163) * fSlow21)); + double fSlow318 = (fConst179 * ((fSlow124 * fSlow19) * fSlow21)); + double fSlow319 = (fConst180 * ((fSlow223 * fSlow196) * fSlow21)); + double fSlow320 = (0.041013290075440773 * fSlow62); + double fSlow321 = (fConst180 * (fSlow225 * fSlow196)); + double fSlow322 = (fConst181 * (fSlow126 * fSlow19)); + double fSlow323 = (fConst178 * (fSlow189 * fSlow163)); + double fSlow324 = (fConst182 * (fSlow128 * fSlow20)); + double fSlow325 = (fConst176 * (fSlow156 * fSlow140)); + double fSlow326 = (fConst175 * (fSlow130 * fSlow37)); + double fSlow327 = (fConst174 * (fSlow82 * fSlow76)); + double fSlow328 = (fConst183 * fSlow74); + double fSlow329 = (fConst184 * (fSlow243 * fSlow21)); + double fSlow330 = (fConst185 * (((fSlow49 * fSlow7) * fSlow50) * fSlow21)); + double fSlow331 = (fConst186 * ((fSlow85 * fSlow76) * fSlow21)); + double fSlow332 = (fConst187 * ((fSlow134 * fSlow37) * fSlow21)); + double fSlow333 = (fConst188 * ((fSlow159 * fSlow140) * fSlow21)); + double fSlow334 = (fConst189 * (fSlow245 * fSlow21)); + double fSlow335 = (fConst190 * ((fSlow192 * fSlow163) * fSlow21)); + double fSlow336 = (fConst191 * (((fSlow60 * fSlow7) * fSlow19) * fSlow21)); + double fSlow337 = (fConst192 * ((fSlow227 * fSlow196) * fSlow21)); + double fSlow338 = (0.038541128516807702 * (fSlow63 * fSlow7)); + double fSlow339 = (fConst192 * (fSlow229 * fSlow196)); + double fSlow340 = (fConst193 * (fSlow136 * fSlow19)); + double fSlow341 = (fConst190 * (fSlow194 * fSlow163)); + double fSlow342 = (fConst194 * ((fSlow67 * fSlow7) * fSlow20)); + double fSlow343 = (fConst188 * (fSlow161 * fSlow140)); + double fSlow344 = (fConst187 * (fSlow138 * fSlow37)); + double fSlow345 = (fConst186 * (fSlow87 * fSlow76)); + double fSlow346 = (fConst195 * ((fSlow73 * fSlow7) * fSlow50)); + double fSlow347 = (fConst184 * fSlow247); + for (int i = 0; (i < count); i = (i + 1)) { + fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + double fTemp0 = double(input0[i]); + fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow8 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input2[i]); + fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input12[i]); + double fTemp5 = double(input26[i]); + double fTemp6 = double(input30[i]); + double fTemp7 = double(input34[i]); + double fTemp8 = double(input50[i]); + double fTemp9 = double(input56[i]); + double fTemp10 = double(input60[i]); + double fTemp11 = double(input82[i]); + double fTemp12 = double(input88[i]); + double fTemp13 = double(input90[i]); + double fTemp14 = double(input94[i]); + double fTemp15 = double(input98[i]); + double fTemp16 = double(input63[i]); + double fTemp17 = double(input65[i]); + double fTemp18 = double(input79[i]); + double fTemp19 = double(input83[i]); + double fTemp20 = double(input97[i]); + double fTemp21 = double(input4[i]); + double fTemp22 = double(input8[i]); + double fTemp23 = double(input10[i]); + double fTemp24 = double(input14[i]); + double fTemp25 = double(input16[i]); + double fTemp26 = double(input18[i]); + double fTemp27 = double(input22[i]); + double fTemp28 = double(input24[i]); + double fTemp29 = double(input28[i]); + double fTemp30 = double(input32[i]); + double fTemp31 = double(input36[i]); + double fTemp32 = double(input38[i]); + double fTemp33 = double(input40[i]); + double fTemp34 = double(input44[i]); + double fTemp35 = double(input46[i]); + double fTemp36 = double(input48[i]); + double fTemp37 = double(input52[i]); + double fTemp38 = double(input58[i]); + double fTemp39 = double(input62[i]); + double fTemp40 = double(input66[i]); + double fTemp41 = double(input70[i]); + double fTemp42 = double(input74[i]); + double fTemp43 = double(input76[i]); + double fTemp44 = double(input78[i]); + double fTemp45 = double(input80[i]); + double fTemp46 = double(input84[i]); + double fTemp47 = double(input92[i]); + double fTemp48 = double(input96[i]); + double fTemp49 = double(input25[i]); + double fTemp50 = double(input35[i]); + double fTemp51 = double(input37[i]); + double fTemp52 = double(input47[i]); + double fTemp53 = double(input51[i]); + double fTemp54 = double(input61[i]); + double fTemp55 = double(input67[i]); + double fTemp56 = double(input77[i]); + double fTemp57 = double(input85[i]); + double fTemp58 = double(input95[i]); + double fTemp59 = double(input9[i]); + double fTemp60 = double(input15[i]); + double fTemp61 = double(input17[i]); + double fTemp62 = double(input23[i]); + double fTemp63 = double(input27[i]); + double fTemp64 = double(input33[i]); + double fTemp65 = double(input39[i]); + double fTemp66 = double(input45[i]); + double fTemp67 = double(input53[i]); + double fTemp68 = double(input59[i]); + double fTemp69 = double(input69[i]); + double fTemp70 = double(input75[i]); + double fTemp71 = double(input87[i]); + double fTemp72 = double(input93[i]); + double fTemp73 = double(input1[i]); + double fTemp74 = double(input3[i]); + double fTemp75 = double(input5[i]); + double fTemp76 = double(input7[i]); + double fTemp77 = double(input11[i]); + double fTemp78 = double(input13[i]); + double fTemp79 = double(input19[i]); + double fTemp80 = double(input21[i]); + double fTemp81 = double(input29[i]); + double fTemp82 = double(input31[i]); + double fTemp83 = double(input41[i]); + double fTemp84 = double(input43[i]); + double fTemp85 = double(input55[i]); + double fTemp86 = double(input57[i]); + double fTemp87 = double(input71[i]); + double fTemp88 = double(input73[i]); + double fTemp89 = double(input89[i]); + double fTemp90 = double(input91[i]); + double fTemp91 = double(input6[i]); + double fTemp92 = double(input20[i]); + double fTemp93 = double(input42[i]); + double fTemp94 = double(input72[i]); + double fTemp95 = double(input49[i]); + double fTemp96 = double(input54[i]); + double fTemp97 = double(input64[i]); + double fTemp98 = double(input68[i]); + double fTemp99 = double(input81[i]); + double fTemp100 = double(input86[i]); + double fTemp101 = double(input99[i]); + double fTemp102 = (((fSlow7 * (((((((((((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow32 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow42 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow61 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow64 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))))) + ((fSlow77 * (((((fSlow79 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))) + (fSlow81 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow83 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow86 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20)))))) + ((fSlow19 * (((((((((((((((((((((((((fConst20 * (((fConst40 * ((fSlow89 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21)))) + (fSlow90 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))))) + (fSlow92 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow94 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24)))))) + (fSlow95 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow97 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27))))) + (fSlow100 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28))))) + (fSlow102 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow104 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))) + (fSlow105 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31))))) + (fSlow107 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow109 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow111 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow113 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow114 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow116 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))) + (fSlow118 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38))))) + (fSlow120 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39))))) + (fSlow123 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40))))) + (fSlow125 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow127 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42))))) + (fSlow129 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow131 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow132 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45))))) + (fSlow135 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46))))) + (fSlow137 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47))))) + (fSlow139 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48)))))) + ((fSlow141 * (((((((((fConst82 * ((fSlow142 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49)))) + (fSlow143 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50)))))) + (fSlow145 * (iSlow1?(fSlow3 * (fTemp3 * fTemp51)):(fSlow3 * (fTemp1 * fTemp51))))) + (fSlow147 * (iSlow1?(fSlow3 * (fTemp3 * fTemp52)):(fSlow3 * (fTemp1 * fTemp52))))) + (fSlow150 * (iSlow1?(fSlow3 * (fTemp3 * fTemp53)):(fSlow3 * (fTemp1 * fTemp53))))) + (fSlow152 * (iSlow1?(fSlow3 * (fTemp3 * fTemp54)):(fSlow3 * (fTemp1 * fTemp54))))) + (fSlow155 * (iSlow1?(fSlow3 * (fTemp3 * fTemp55)):(fSlow3 * (fTemp1 * fTemp55))))) + (fSlow157 * (iSlow1?(fSlow3 * (fTemp3 * fTemp56)):(fSlow3 * (fTemp1 * fTemp56))))) + (fSlow160 * (iSlow1?(fSlow3 * (fTemp3 * fTemp57)):(fSlow3 * (fTemp1 * fTemp57))))) + (fSlow162 * (iSlow1?(fSlow3 * (fTemp3 * fTemp58)):(fSlow3 * (fTemp1 * fTemp58)))))) + ((fSlow164 * (((((((((((((fConst93 * ((fSlow165 * (iSlow1?(fSlow3 * (fTemp3 * fTemp59)):(fSlow3 * (fTemp1 * fTemp59)))) + (fSlow166 * (iSlow1?(fSlow3 * (fTemp3 * fTemp60)):(fSlow3 * (fTemp1 * fTemp60)))))) + (fSlow168 * (iSlow1?(fSlow3 * (fTemp3 * fTemp61)):(fSlow3 * (fTemp1 * fTemp61))))) + (fSlow170 * (iSlow1?(fSlow3 * (fTemp3 * fTemp62)):(fSlow3 * (fTemp1 * fTemp62))))) + (fSlow173 * (iSlow1?(fSlow3 * (fTemp3 * fTemp63)):(fSlow3 * (fTemp1 * fTemp63))))) + (fSlow175 * (iSlow1?(fSlow3 * (fTemp3 * fTemp64)):(fSlow3 * (fTemp1 * fTemp64))))) + (fSlow178 * (iSlow1?(fSlow3 * (fTemp3 * fTemp65)):(fSlow3 * (fTemp1 * fTemp65))))) + (fSlow180 * (iSlow1?(fSlow3 * (fTemp3 * fTemp66)):(fSlow3 * (fTemp1 * fTemp66))))) + (fSlow183 * (iSlow1?(fSlow3 * (fTemp3 * fTemp67)):(fSlow3 * (fTemp1 * fTemp67))))) + (fSlow185 * (iSlow1?(fSlow3 * (fTemp3 * fTemp68)):(fSlow3 * (fTemp1 * fTemp68))))) + (fSlow188 * (iSlow1?(fSlow3 * (fTemp3 * fTemp69)):(fSlow3 * (fTemp1 * fTemp69))))) + (fSlow190 * (iSlow1?(fSlow3 * (fTemp3 * fTemp70)):(fSlow3 * (fTemp1 * fTemp70))))) + (fSlow193 * (iSlow1?(fSlow3 * (fTemp3 * fTemp71)):(fSlow3 * (fTemp1 * fTemp71))))) + (fSlow195 * (iSlow1?(fSlow3 * (fTemp3 * fTemp72)):(fSlow3 * (fTemp1 * fTemp72)))))) + ((fSlow197 * (((((((((((((((((fConst108 * ((fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp73)):(fSlow3 * (fTemp1 * fTemp73)))) + (fSlow14 * (iSlow1?(fSlow3 * (fTemp3 * fTemp74)):(fSlow3 * (fTemp1 * fTemp74)))))) + (fSlow198 * (iSlow1?(fSlow3 * (fTemp3 * fTemp75)):(fSlow3 * (fTemp1 * fTemp75))))) + (fSlow199 * (iSlow1?(fSlow3 * (fTemp3 * fTemp76)):(fSlow3 * (fTemp1 * fTemp76))))) + (fSlow201 * (iSlow1?(fSlow3 * (fTemp3 * fTemp77)):(fSlow3 * (fTemp1 * fTemp77))))) + (fSlow203 * (iSlow1?(fSlow3 * (fTemp3 * fTemp78)):(fSlow3 * (fTemp1 * fTemp78))))) + (fSlow206 * (iSlow1?(fSlow3 * (fTemp3 * fTemp79)):(fSlow3 * (fTemp1 * fTemp79))))) + (fSlow208 * (iSlow1?(fSlow3 * (fTemp3 * fTemp80)):(fSlow3 * (fTemp1 * fTemp80))))) + (fSlow210 * (iSlow1?(fSlow3 * (fTemp3 * fTemp81)):(fSlow3 * (fTemp1 * fTemp81))))) + (fSlow212 * (iSlow1?(fSlow3 * (fTemp3 * fTemp82)):(fSlow3 * (fTemp1 * fTemp82))))) + (fSlow215 * (iSlow1?(fSlow3 * (fTemp3 * fTemp83)):(fSlow3 * (fTemp1 * fTemp83))))) + (fSlow217 * (iSlow1?(fSlow3 * (fTemp3 * fTemp84)):(fSlow3 * (fTemp1 * fTemp84))))) + (fSlow219 * (iSlow1?(fSlow3 * (fTemp3 * fTemp85)):(fSlow3 * (fTemp1 * fTemp85))))) + (fSlow221 * (iSlow1?(fSlow3 * (fTemp3 * fTemp86)):(fSlow3 * (fTemp1 * fTemp86))))) + (fSlow224 * (iSlow1?(fSlow3 * (fTemp3 * fTemp87)):(fSlow3 * (fTemp1 * fTemp87))))) + (fSlow226 * (iSlow1?(fSlow3 * (fTemp3 * fTemp88)):(fSlow3 * (fTemp1 * fTemp88))))) + (fSlow228 * (iSlow1?(fSlow3 * (fTemp3 * fTemp89)):(fSlow3 * (fTemp1 * fTemp89))))) + (fSlow230 * (iSlow1?(fSlow3 * (fTemp3 * fTemp90)):(fSlow3 * (fTemp1 * fTemp90)))))) + ((((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow231 * (iSlow1?(fSlow3 * (fTemp3 * fTemp91)):(fSlow3 * (fTemp1 * fTemp91))))) + (fSlow232 * (iSlow1?(fSlow3 * (fTemp3 * fTemp92)):(fSlow3 * (fTemp1 * fTemp92))))) + (fSlow233 * (iSlow1?(fSlow3 * (fTemp3 * fTemp93)):(fSlow3 * (fTemp1 * fTemp93))))) + (fSlow234 * (iSlow1?(fSlow3 * (fTemp3 * fTemp94)):(fSlow3 * (fTemp1 * fTemp94))))) + (fSlow21 * ((((((fSlow236 * (iSlow1?(fSlow3 * (fTemp3 * fTemp95)):(fSlow3 * (fTemp1 * fTemp95)))) + (fSlow238 * (iSlow1?(fSlow3 * (fTemp3 * fTemp96)):(fSlow3 * (fTemp1 * fTemp96))))) + (fSlow239 * (iSlow1?(fSlow3 * (fTemp3 * fTemp97)):(fSlow3 * (fTemp1 * fTemp97))))) + (fSlow241 * (iSlow1?(fSlow3 * (fTemp3 * fTemp98)):(fSlow3 * (fTemp1 * fTemp98))))) + (fSlow244 * (iSlow1?(fSlow3 * (fTemp3 * fTemp99)):(fSlow3 * (fTemp1 * fTemp99))))) + (fSlow246 * (iSlow1?(fSlow3 * (fTemp3 * fTemp100)):(fSlow3 * (fTemp1 * fTemp100))))))))))))) + (fSlow248 * (iSlow1?(fSlow3 * (fTemp3 * fTemp101)):(fSlow3 * (fTemp1 * fTemp101))))); + output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp102))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp73)):(fSlow3 * (fRec0[0] * fTemp73))) + (fSlow249 * fTemp102))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow250 * fTemp102))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp74)):(fSlow3 * (fRec0[0] * fTemp74))) + (fSlow251 * fTemp102))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow252 * fTemp102))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp75)):(fSlow3 * (fRec0[0] * fTemp75))) + (fSlow253 * fTemp102))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp91)):(fSlow3 * (fRec0[0] * fTemp91))) + (fSlow254 * fTemp102))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp76)):(fSlow3 * (fRec0[0] * fTemp76))) + (fSlow255 * fTemp102))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow256 * fTemp102))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp59)):(fSlow3 * (fRec0[0] * fTemp59))) + (fSlow257 * fTemp102))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow258 * fTemp102))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp77)):(fSlow3 * (fRec0[0] * fTemp77))) + (fSlow259 * fTemp102))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow260 * fTemp102))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp78)):(fSlow3 * (fRec0[0] * fTemp78))) + (fSlow261 * fTemp102))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow262 * fTemp102))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp60)):(fSlow3 * (fRec0[0] * fTemp60))) + (fSlow263 * fTemp102))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow264 * fTemp102))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp61)):(fSlow3 * (fRec0[0] * fTemp61))) + (fSlow265 * fTemp102))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow266 * fTemp102))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp79)):(fSlow3 * (fRec0[0] * fTemp79))) + (fSlow267 * fTemp102))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp92)):(fSlow3 * (fRec0[0] * fTemp92))) + (fSlow268 * fTemp102))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp80)):(fSlow3 * (fRec0[0] * fTemp80))) + (fSlow269 * fTemp102))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow270 * fTemp102))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp62)):(fSlow3 * (fRec0[0] * fTemp62))) + (fSlow271 * fTemp102))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow272 * fTemp102))); + output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow273 * fTemp102))); + output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow274 * fTemp102))); + output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp63)):(fSlow3 * (fRec0[0] * fTemp63))) + (fSlow275 * fTemp102))); + output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow276 * fTemp102))); + output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp81)):(fSlow3 * (fRec0[0] * fTemp81))) + (fSlow277 * fTemp102))); + output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow278 * fTemp102))); + output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp82)):(fSlow3 * (fRec0[0] * fTemp82))) + (fSlow279 * fTemp102))); + output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow280 * fTemp102))); + output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp64)):(fSlow3 * (fRec0[0] * fTemp64))) + (fSlow281 * fTemp102))); + output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow282 * fTemp102))); + output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow283 * fTemp102))); + output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow284 * fTemp102))); + output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp51)):(fSlow3 * (fRec0[0] * fTemp51))) + (fSlow285 * fTemp102))); + output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow286 * fTemp102))); + output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp65)):(fSlow3 * (fRec0[0] * fTemp65))) + (fSlow287 * fTemp102))); + output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow288 * fTemp102))); + output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp83)):(fSlow3 * (fRec0[0] * fTemp83))) + (fSlow289 * fTemp102))); + output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp93)):(fSlow3 * (fRec0[0] * fTemp93))) + (fSlow290 * fTemp102))); + output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp84)):(fSlow3 * (fRec0[0] * fTemp84))) + (fSlow291 * fTemp102))); + output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow292 * fTemp102))); + output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp66)):(fSlow3 * (fRec0[0] * fTemp66))) + (fSlow293 * fTemp102))); + output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow294 * fTemp102))); + output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp52)):(fSlow3 * (fRec0[0] * fTemp52))) + (fSlow295 * fTemp102))); + output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow296 * fTemp102))); + output49[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp95)):(fSlow3 * (fRec0[0] * fTemp95))) + (fSlow297 * fTemp102))); + output50[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow298 * fTemp102))); + output51[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp53)):(fSlow3 * (fRec0[0] * fTemp53))) + (fSlow299 * fTemp102))); + output52[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow300 * fTemp102))); + output53[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp67)):(fSlow3 * (fRec0[0] * fTemp67))) + (fSlow301 * fTemp102))); + output54[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp96)):(fSlow3 * (fRec0[0] * fTemp96))) + (fSlow302 * fTemp102))); + output55[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp85)):(fSlow3 * (fRec0[0] * fTemp85))) + (fSlow303 * fTemp102))); + output56[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow304 * fTemp102))); + output57[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp86)):(fSlow3 * (fRec0[0] * fTemp86))) + (fSlow305 * fTemp102))); + output58[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow306 * fTemp102))); + output59[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp68)):(fSlow3 * (fRec0[0] * fTemp68))) + (fSlow307 * fTemp102))); + output60[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow308 * fTemp102))); + output61[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp54)):(fSlow3 * (fRec0[0] * fTemp54))) + (fSlow309 * fTemp102))); + output62[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow310 * fTemp102))); + output63[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow311 * fTemp102))); + output64[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp97)):(fSlow3 * (fRec0[0] * fTemp97))) + (fSlow312 * fTemp102))); + output65[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow313 * fTemp102))); + output66[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow314 * fTemp102))); + output67[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp55)):(fSlow3 * (fRec0[0] * fTemp55))) + (fSlow315 * fTemp102))); + output68[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp98)):(fSlow3 * (fRec0[0] * fTemp98))) + (fSlow316 * fTemp102))); + output69[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp69)):(fSlow3 * (fRec0[0] * fTemp69))) + (fSlow317 * fTemp102))); + output70[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow318 * fTemp102))); + output71[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp87)):(fSlow3 * (fRec0[0] * fTemp87))) + (fSlow319 * fTemp102))); + output72[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp94)):(fSlow3 * (fRec0[0] * fTemp94))) + (fSlow320 * fTemp102))); + output73[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp88)):(fSlow3 * (fRec0[0] * fTemp88))) + (fSlow321 * fTemp102))); + output74[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow322 * fTemp102))); + output75[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp70)):(fSlow3 * (fRec0[0] * fTemp70))) + (fSlow323 * fTemp102))); + output76[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow324 * fTemp102))); + output77[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp56)):(fSlow3 * (fRec0[0] * fTemp56))) + (fSlow325 * fTemp102))); + output78[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow326 * fTemp102))); + output79[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow327 * fTemp102))); + output80[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))) + (fSlow328 * fTemp102))); + output81[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp99)):(fSlow3 * (fRec0[0] * fTemp99))) + (fSlow329 * fTemp102))); + output82[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow330 * fTemp102))); + output83[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow331 * fTemp102))); + output84[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow332 * fTemp102))); + output85[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp57)):(fSlow3 * (fRec0[0] * fTemp57))) + (fSlow333 * fTemp102))); + output86[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp100)):(fSlow3 * (fRec0[0] * fTemp100))) + (fSlow334 * fTemp102))); + output87[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp71)):(fSlow3 * (fRec0[0] * fTemp71))) + (fSlow335 * fTemp102))); + output88[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow336 * fTemp102))); + output89[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp89)):(fSlow3 * (fRec0[0] * fTemp89))) + (fSlow337 * fTemp102))); + output90[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow338 * fTemp102))); + output91[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp90)):(fSlow3 * (fRec0[0] * fTemp90))) + (fSlow339 * fTemp102))); + output92[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow340 * fTemp102))); + output93[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp72)):(fSlow3 * (fRec0[0] * fTemp72))) + (fSlow341 * fTemp102))); + output94[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow342 * fTemp102))); + output95[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp58)):(fSlow3 * (fRec0[0] * fTemp58))) + (fSlow343 * fTemp102))); + output96[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow344 * fTemp102))); + output97[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow345 * fTemp102))); + output98[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow346 * fTemp102))); + output99[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp101)):(fSlow3 * (fRec0[0] * fTemp101))) + (fSlow347 * fTemp102))); + fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa1.cpp b/source/HOAUGens/HOABeamDirac2Hoa1.cpp index 348e1d83f3..daf21a3f9e 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa1.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa1.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double sin(double dummy0); -double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -622,12 +643,15 @@ class mydsp : public dsp { FAUSTFLOAT fEntry0; double fRec0[2]; double fRec1[2]; + double fConst2; + double fConst3; FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; double fRec2[2]; double fRec3[2]; double fRec4[2]; - FAUSTFLOAT fVslider1; - FAUSTFLOAT fVslider2; + double fConst4; public: @@ -636,36 +660,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamDirac2HOA1"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -739,8 +763,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + fConst2 = (sqrt((3.0 * (double(tgamma(1.0)) / double(tgamma(3.0))))) * double(tgamma(1.5))); + fConst3 = (1.5957691216057308 * fConst2); + fConst4 = (0.12698727186848197 * fConst2); } @@ -790,9 +817,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -804,13 +831,13 @@ class mydsp : public dsp { ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider0, "4", ""); - ui_interface->declare(&fVslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); ui_interface->declare(&fVslider1, "5", ""); ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider2, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); } @@ -831,33 +858,34 @@ class mydsp : public dsp { int iSlow4 = (fSlow0 > 0.0); double fSlow5 = (fConst0 * fSlow2); int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); - double fSlow8 = double(fVslider1); - double fSlow9 = double(fVslider2); - double fSlow10 = cos(fSlow9); - double fSlow11 = (sin(fSlow8) * fSlow10); - double fSlow12 = sin(fSlow9); - double fSlow13 = (cos(fSlow8) * fSlow10); - double fSlow14 = (0.13783222385544802 * fSlow11); - double fSlow15 = (0.13783222385544802 * fSlow12); - double fSlow16 = (0.13783222385544802 * fSlow13); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = pow((1.0 - mydsp_faustpower2_f(fSlow7)), 0.5); + double fSlow9 = (fConst3 * fSlow8); + double fSlow10 = double(fVslider1); + double fSlow11 = sin(fSlow10); + double fSlow12 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow13 = cos(fSlow10); + double fSlow14 = (1.7320508075688772 * fSlow7); + double fSlow15 = (fConst4 * (fSlow8 * fSlow11)); + double fSlow16 = (0.13783222385544802 * fSlow7); + double fSlow17 = (fConst4 * (fSlow13 * fSlow8)); for (int i = 0; (i < count); i = (i + 1)) { fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow7 + (0.999 * fRec2[1])); + fRec2[0] = (fSlow12 + (0.999 * fRec2[1])); fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input1[i]); fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); - double fTemp2 = (fRec2[0] * fRec4[0]); - double fTemp3 = double(input1[i]); - double fTemp4 = double(input2[i]); - double fTemp5 = double(input3[i]); - double fTemp6 = ((iSlow1?(fSlow3 * (fTemp2 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow11 * (iSlow1?(fSlow3 * (fTemp2 * fTemp3)):(fSlow3 * (fTemp1 * fTemp3)))) + (fSlow12 * (iSlow1?(fSlow3 * (fTemp2 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4))))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp2 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input3[i]); + double fTemp5 = double(input2[i]); + double fTemp6 = ((fSlow9 * ((fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + ((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow14 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5)))))); output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp6))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp3)):(fSlow3 * (fRec0[0] * fTemp3))) + (fSlow14 * fTemp6))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow15 * fTemp6))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow16 * fTemp6))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow15 * fTemp6))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow16 * fTemp6))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow17 * fTemp6))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; @@ -871,7 +899,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1103,7 +1130,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1166,7 +1193,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1195,11 +1222,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa2.cpp b/source/HOAUGens/HOABeamDirac2Hoa2.cpp index b748a302e4..a16d9da2c9 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa2.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa2.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA2" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -614,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -626,12 +643,23 @@ class mydsp : public dsp { FAUSTFLOAT fEntry0; double fRec0[2]; double fRec1[2]; + double fConst2; + double fConst3; FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; double fRec2[2]; double fRec3[2]; double fRec4[2]; - FAUSTFLOAT fVslider1; - FAUSTFLOAT fVslider2; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; public: @@ -640,36 +668,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamDirac2HOA2"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -783,8 +811,19 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(1.0)); + fConst3 = (sqrt((5.0 * (fConst2 / double(tgamma(5.0))))) * double(tgamma(2.5))); + fConst4 = double(tgamma(1.5)); + fConst5 = sqrt((3.0 * (fConst2 / double(tgamma(3.0))))); + fConst6 = (1.5957691216057308 * fConst5); + fConst7 = sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))); + fConst8 = (4.7873073648171927 * fConst7); + fConst9 = (0.12698727186848197 * (fConst5 * fConst4)); + fConst10 = (0.50794908747392786 * fConst3); + fConst11 = (0.3809618156054459 * (fConst7 * fConst4)); + fConst12 = (0.25397454373696393 * fConst3); } @@ -834,9 +873,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -848,13 +887,13 @@ class mydsp : public dsp { ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider0, "4", ""); - ui_interface->declare(&fVslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); ui_interface->declare(&fVslider1, "5", ""); ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider2, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider0, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); } @@ -885,59 +924,60 @@ class mydsp : public dsp { int iSlow4 = (fSlow0 > 0.0); double fSlow5 = (fConst0 * fSlow2); int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); - double fSlow8 = double(fVslider1); - double fSlow9 = sin(fSlow8); - double fSlow10 = double(fVslider2); - double fSlow11 = cos(fSlow10); - double fSlow12 = (fSlow9 * fSlow11); - double fSlow13 = sin(fSlow10); - double fSlow14 = cos(fSlow8); - double fSlow15 = (fSlow14 * fSlow11); - double fSlow16 = ((3.0 * mydsp_faustpower2_f(fSlow13)) + -1.0); - double fSlow17 = (1.1180339887498949 * fSlow16); - double fSlow18 = (2.0 * fSlow8); - double fSlow19 = mydsp_faustpower2_f(fSlow11); - double fSlow20 = (sin(fSlow18) * fSlow19); - double fSlow21 = sin((2.0 * fSlow10)); - double fSlow22 = (fSlow9 * fSlow21); - double fSlow23 = (fSlow14 * fSlow21); - double fSlow24 = (cos(fSlow18) * fSlow19); - double fSlow25 = (0.13783222385544802 * fSlow12); - double fSlow26 = (0.13783222385544802 * fSlow13); - double fSlow27 = (0.13783222385544802 * fSlow15); - double fSlow28 = (0.15410111101537496 * fSlow20); - double fSlow29 = (0.15410111101537496 * fSlow22); - double fSlow30 = (0.088970317927147144 * fSlow16); - double fSlow31 = (0.15410111101537496 * fSlow23); - double fSlow32 = (0.15410111101537496 * fSlow24); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = mydsp_faustpower2_f(fSlow7); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = (fConst3 * fSlow9); + double fSlow11 = double(fVslider1); + double fSlow12 = cos(fSlow11); + double fSlow13 = sin(fSlow11); + double fSlow14 = (6.3830764864229232 * (fSlow12 * fSlow13)); + double fSlow15 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow16 = ((2.0 * mydsp_faustpower2_f(fSlow12)) + -1.0); + double fSlow17 = (3.1915382432114616 * fSlow16); + double fSlow18 = pow(fSlow9, 0.5); + double fSlow19 = (fConst4 * fSlow18); + double fSlow20 = (fConst8 * (fSlow7 * fSlow13)); + double fSlow21 = (fSlow12 * fSlow7); + double fSlow22 = (fConst8 * fSlow21); + double fSlow23 = (1.7320508075688772 * fSlow7); + double fSlow24 = ((3.0 * fSlow8) + -1.0); + double fSlow25 = (1.1180339887498949 * fSlow24); + double fSlow26 = (fConst9 * (fSlow18 * fSlow13)); + double fSlow27 = (0.13783222385544802 * fSlow7); + double fSlow28 = (fConst9 * (fSlow12 * fSlow18)); + double fSlow29 = (fConst10 * ((fSlow12 * fSlow9) * fSlow13)); + double fSlow30 = (fConst11 * ((fSlow7 * fSlow18) * fSlow13)); + double fSlow31 = (0.088970317927147144 * fSlow24); + double fSlow32 = (fConst11 * (fSlow21 * fSlow18)); + double fSlow33 = (fConst12 * (fSlow16 * fSlow9)); for (int i = 0; (i < count); i = (i + 1)) { fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow7 + (0.999 * fRec2[1])); + fRec2[0] = (fSlow15 + (0.999 * fRec2[1])); fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); + double fTemp2 = double(input4[i]); fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); - double fTemp2 = (fRec2[0] * fRec4[0]); - double fTemp3 = double(input1[i]); - double fTemp4 = double(input2[i]); - double fTemp5 = double(input3[i]); - double fTemp6 = double(input6[i]); - double fTemp7 = double(input4[i]); - double fTemp8 = double(input5[i]); - double fTemp9 = double(input7[i]); - double fTemp10 = double(input8[i]); - double fTemp11 = ((((iSlow1?(fSlow3 * (fTemp2 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow12 * (iSlow1?(fSlow3 * (fTemp2 * fTemp3)):(fSlow3 * (fTemp1 * fTemp3)))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp2 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4))))) + (fSlow15 * (iSlow1?(fSlow3 * (fTemp2 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp2 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (1.9364916731037085 * ((((fSlow20 * (iSlow1?(fSlow3 * (fTemp2 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7)))) + (fSlow22 * (iSlow1?(fSlow3 * (fTemp2 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp2 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp2 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))))); + double fTemp3 = (fRec2[0] * fRec4[0]); + double fTemp4 = double(input8[i]); + double fTemp5 = double(input1[i]); + double fTemp6 = double(input3[i]); + double fTemp7 = double(input5[i]); + double fTemp8 = double(input7[i]); + double fTemp9 = double(input2[i]); + double fTemp10 = double(input6[i]); + double fTemp11 = ((fSlow10 * ((fSlow14 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + ((fSlow19 * (((fConst6 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5)))) + (fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow20 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow22 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8)))))) + (((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))))); output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp11))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp3)):(fSlow3 * (fRec0[0] * fTemp3))) + (fSlow25 * fTemp11))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow26 * fTemp11))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow27 * fTemp11))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow28 * fTemp11))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow29 * fTemp11))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow30 * fTemp11))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow31 * fTemp11))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow32 * fTemp11))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow26 * fTemp11))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow27 * fTemp11))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow28 * fTemp11))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow29 * fTemp11))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow30 * fTemp11))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow31 * fTemp11))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow32 * fTemp11))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow33 * fTemp11))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; @@ -951,7 +991,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1183,7 +1222,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1246,7 +1285,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1275,11 +1314,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa3.cpp b/source/HOAUGens/HOABeamDirac2Hoa3.cpp index 2d259cabe1..773fef0f8c 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa3.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa3.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,25 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double cos(double dummy0); -double sin(double dummy0); -double pow(double dummy0, double dummy1); double mydsp_faustpower2_f(double value) { return (value * value); -} -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -630,12 +643,40 @@ class mydsp : public dsp { FAUSTFLOAT fEntry0; double fRec0[2]; double fRec1[2]; + double fConst2; + double fConst3; + double fConst4; FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; double fRec2[2]; double fRec3[2]; double fRec4[2]; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; public: @@ -644,36 +685,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamDirac2HOA3"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -843,8 +884,36 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(1.0)); + fConst3 = (sqrt((7.0 * (fConst2 / double(tgamma(7.0))))) * double(tgamma(3.5))); + fConst4 = (6.3830764864229232 * fConst3); + fConst5 = double(tgamma(2.5)); + fConst6 = double(tgamma(5.0)); + fConst7 = sqrt((5.0 * (fConst2 / fConst6))); + fConst8 = double(tgamma(2.0)); + fConst9 = sqrt((7.0 * (fConst8 / double(tgamma(6.0))))); + fConst10 = (31.915382432114615 * fConst9); + fConst11 = (15.957691216057308 * fConst9); + fConst12 = double(tgamma(1.5)); + fConst13 = double(tgamma(3.0)); + fConst14 = sqrt((3.0 * (fConst2 / fConst13))); + fConst15 = (1.5957691216057308 * fConst14); + fConst16 = sqrt((5.0 * (fConst8 / double(tgamma(4.0))))); + fConst17 = (4.7873073648171927 * fConst16); + fConst18 = sqrt((7.0 * (fConst13 / fConst6))); + fConst19 = (0.70710678118654757 * fConst18); + fConst20 = (0.12698727186848197 * (fConst14 * fConst12)); + fConst21 = (fConst7 * fConst5); + fConst22 = (0.50794908747392786 * fConst21); + fConst23 = (0.3809618156054459 * (fConst16 * fConst12)); + fConst24 = (0.25397454373696393 * fConst21); + fConst25 = (0.50794908747392786 * fConst3); + fConst26 = (fConst9 * fConst5); + fConst27 = (2.5397454373696391 * fConst26); + fConst28 = (0.056269769759819135 * (fConst18 * fConst12)); + fConst29 = (1.2698727186848195 * fConst26); } @@ -894,9 +963,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -959,98 +1028,95 @@ class mydsp : public dsp { int iSlow4 = (fSlow0 > 0.0); double fSlow5 = (fConst0 * fSlow2); int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = double(fVslider0); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fVslider1); - double fSlow10 = (3.0 * fSlow9); - double fSlow11 = sin(fSlow10); - double fSlow12 = (2.0916500663351889 * (fSlow11 * fSlow8)); - double fSlow13 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow14 = (2.0 * fSlow9); - double fSlow15 = sin(fSlow14); - double fSlow16 = sin(fSlow7); - double fSlow17 = (5.123475382979799 * (fSlow15 * fSlow16)); - double fSlow18 = sin(fSlow9); - double fSlow19 = mydsp_faustpower2_f(fSlow16); - double fSlow20 = (5.0 * fSlow19); - double fSlow21 = (fSlow20 + -1.0); - double fSlow22 = (fSlow18 * fSlow21); - double fSlow23 = (1.6201851746019651 * fSlow22); - double fSlow24 = cos(fSlow9); - double fSlow25 = (fSlow24 * fSlow21); - double fSlow26 = (1.6201851746019651 * fSlow25); - double fSlow27 = cos(fSlow10); - double fSlow28 = mydsp_faustpower2_f(fSlow8); - double fSlow29 = (2.0916500663351889 * (fSlow27 * fSlow28)); - double fSlow30 = (fSlow18 * fSlow8); - double fSlow31 = (fSlow24 * fSlow8); - double fSlow32 = ((3.0 * fSlow19) + -1.0); - double fSlow33 = (1.1180339887498949 * fSlow32); - double fSlow34 = (fSlow15 * fSlow28); - double fSlow35 = sin((2.0 * fSlow7)); - double fSlow36 = (fSlow18 * fSlow35); - double fSlow37 = (fSlow24 * fSlow35); - double fSlow38 = (cos(fSlow14) * fSlow28); - double fSlow39 = (fSlow20 + -3.0); - double fSlow40 = (1.3228756555322954 * fSlow39); - double fSlow41 = (5.123475382979799 * fSlow38); - double fSlow42 = (0.13783222385544802 * fSlow30); - double fSlow43 = (0.13783222385544802 * fSlow16); - double fSlow44 = (0.13783222385544802 * fSlow31); - double fSlow45 = (0.15410111101537496 * fSlow34); - double fSlow46 = (0.15410111101537496 * fSlow36); - double fSlow47 = (0.088970317927147144 * fSlow32); - double fSlow48 = (0.15410111101537496 * fSlow37); - double fSlow49 = (0.15410111101537496 * fSlow38); - double fSlow50 = mydsp_faustpower3_f(fSlow8); - double fSlow51 = (0.16644822363786807 * (fSlow11 * fSlow50)); - double fSlow52 = (0.40771321650543829 * (fSlow34 * fSlow16)); - double fSlow53 = (0.12893023963105413 * (fSlow22 * fSlow8)); - double fSlow54 = (0.10527109983694811 * (fSlow39 * fSlow16)); - double fSlow55 = (0.12893023963105413 * (fSlow25 * fSlow8)); - double fSlow56 = (0.40771321650543829 * (fSlow38 * fSlow16)); - double fSlow57 = (0.16644822363786807 * (fSlow27 * fSlow50)); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = mydsp_faustpower2_f(fSlow7); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = pow(fSlow9, 1.5); + double fSlow11 = (fConst4 * fSlow10); + double fSlow12 = double(fVslider1); + double fSlow13 = cos(fSlow12); + double fSlow14 = mydsp_faustpower2_f(fSlow13); + double fSlow15 = ((4.0 * fSlow14) + -1.0); + double fSlow16 = sin(fSlow12); + double fSlow17 = (fSlow15 * fSlow16); + double fSlow18 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow19 = ((2.0 * fSlow14) + -1.0); + double fSlow20 = (((2.0 * fSlow19) + -1.0) * fSlow13); + double fSlow21 = (fConst5 * fSlow9); + double fSlow22 = (6.3830764864229232 * (fSlow13 * fSlow16)); + double fSlow23 = (3.1915382432114616 * fSlow19); + double fSlow24 = (fSlow13 * fSlow7); + double fSlow25 = (fConst10 * (fSlow24 * fSlow16)); + double fSlow26 = (fSlow19 * fSlow7); + double fSlow27 = (fConst11 * fSlow26); + double fSlow28 = pow(fSlow9, 0.5); + double fSlow29 = (fConst12 * fSlow28); + double fSlow30 = (fConst17 * (fSlow7 * fSlow16)); + double fSlow31 = (fConst17 * fSlow24); + double fSlow32 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); + double fSlow33 = (fConst19 * (fSlow32 * fSlow16)); + double fSlow34 = (fSlow32 * fSlow13); + double fSlow35 = (fConst19 * fSlow34); + double fSlow36 = ((3.0 * fSlow8) + -1.0); + double fSlow37 = ((2.5 * fSlow36) + -2.0); + double fSlow38 = (0.88191710368819687 * fSlow37); + double fSlow39 = (1.1180339887498949 * fSlow36); + double fSlow40 = (fConst20 * (fSlow28 * fSlow16)); + double fSlow41 = (0.13783222385544802 * fSlow7); + double fSlow42 = (fConst20 * (fSlow13 * fSlow28)); + double fSlow43 = (fConst22 * ((fSlow13 * fSlow9) * fSlow16)); + double fSlow44 = (fConst23 * ((fSlow7 * fSlow28) * fSlow16)); + double fSlow45 = (0.088970317927147144 * fSlow36); + double fSlow46 = (fConst23 * (fSlow24 * fSlow28)); + double fSlow47 = (fConst24 * (fSlow19 * fSlow9)); + double fSlow48 = (fConst25 * ((fSlow15 * fSlow10) * fSlow16)); + double fSlow49 = (fConst27 * ((fSlow24 * fSlow9) * fSlow16)); + double fSlow50 = (fConst28 * ((fSlow32 * fSlow28) * fSlow16)); + double fSlow51 = (0.070180733224632072 * (fSlow37 * fSlow7)); + double fSlow52 = (fConst28 * (fSlow34 * fSlow28)); + double fSlow53 = (fConst29 * (fSlow26 * fSlow9)); + double fSlow54 = (fConst25 * (fSlow20 * fSlow10)); for (int i = 0; (i < count); i = (i + 1)) { fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow13 + (0.999 * fRec2[1])); + fRec2[0] = (fSlow18 + (0.999 * fRec2[1])); fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input9[i]); fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); - double fTemp4 = double(input10[i]); - double fTemp5 = double(input11[i]); - double fTemp6 = double(input13[i]); - double fTemp7 = double(input15[i]); - double fTemp8 = double(input1[i]); - double fTemp9 = double(input2[i]); + double fTemp4 = double(input15[i]); + double fTemp5 = double(input4[i]); + double fTemp6 = double(input8[i]); + double fTemp7 = double(input10[i]); + double fTemp8 = double(input14[i]); + double fTemp9 = double(input1[i]); double fTemp10 = double(input3[i]); - double fTemp11 = double(input6[i]); - double fTemp12 = double(input4[i]); - double fTemp13 = double(input5[i]); - double fTemp14 = double(input7[i]); - double fTemp15 = double(input8[i]); + double fTemp11 = double(input5[i]); + double fTemp12 = double(input7[i]); + double fTemp13 = double(input11[i]); + double fTemp14 = double(input13[i]); + double fTemp15 = double(input2[i]); double fTemp16 = double(input12[i]); - double fTemp17 = double(input14[i]); - double fTemp18 = ((fSlow8 * ((((fSlow8 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow29 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8)))) + (fSlow16 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow31 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))))) + (fSlow33 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (1.9364916731037085 * ((((fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12)))) + (fSlow36 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow38 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))))) + (fSlow16 * ((fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))) + (fSlow41 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17)))))))); + double fTemp17 = double(input6[i]); + double fTemp18 = ((fSlow11 * ((fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow20 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + ((fSlow21 * (((fConst7 * ((fSlow22 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5)))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow27 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8)))))) + ((fSlow29 * (((((fConst15 * ((fSlow16 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9)))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10)))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow31 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow33 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow35 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14)))))) + ((fSlow7 * ((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))) + (fSlow38 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))))) + ((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))))))); output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp18))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow42 * fTemp18))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow43 * fTemp18))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow44 * fTemp18))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow45 * fTemp18))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow46 * fTemp18))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow47 * fTemp18))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow48 * fTemp18))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow49 * fTemp18))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow51 * fTemp18))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow52 * fTemp18))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow53 * fTemp18))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow54 * fTemp18))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow55 * fTemp18))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow56 * fTemp18))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow57 * fTemp18))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow40 * fTemp18))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow41 * fTemp18))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow42 * fTemp18))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow43 * fTemp18))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow44 * fTemp18))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow45 * fTemp18))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow46 * fTemp18))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow47 * fTemp18))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow48 * fTemp18))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow49 * fTemp18))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow50 * fTemp18))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow51 * fTemp18))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow52 * fTemp18))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow53 * fTemp18))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow54 * fTemp18))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; @@ -1064,7 +1130,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1296,7 +1361,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1359,7 +1424,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1388,11 +1453,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa4.cpp b/source/HOAUGens/HOABeamDirac2Hoa4.cpp index 568f825017..b5db86bd2c 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa4.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa4.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA4" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,29 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double cos(double dummy0); -double sin(double dummy0); -double pow(double dummy0, double dummy1); double mydsp_faustpower2_f(double value) { return (value * value); -} -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - -} -double mydsp_faustpower4_f(double value) { - return (((value * value) * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -635,11 +644,59 @@ class mydsp : public dsp { double fRec0[2]; double fRec1[2]; FAUSTFLOAT fVslider0; + double fConst2; + double fConst3; + double fConst4; + double fConst5; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; double fRec2[2]; double fRec3[2]; double fRec4[2]; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; public: @@ -648,36 +705,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamDirac2HOA4"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -919,8 +976,56 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(2.5)); + fConst3 = double(tgamma(1.0)); + fConst4 = double(tgamma(5.0)); + fConst5 = sqrt((5.0 * (fConst3 / fConst4))); + fConst6 = double(tgamma(2.0)); + fConst7 = double(tgamma(6.0)); + fConst8 = sqrt((7.0 * (fConst6 / fConst7))); + fConst9 = (31.915382432114615 * fConst8); + fConst10 = (15.957691216057308 * fConst8); + fConst11 = (sqrt((9.0 * (fConst3 / double(tgamma(9.0))))) * double(tgamma(4.5))); + fConst12 = (25.532305945691693 * fConst11); + fConst13 = double(tgamma(3.0)); + fConst14 = double(tgamma(7.0)); + fConst15 = (sqrt((9.0 * (fConst13 / fConst14))) * fConst2); + fConst16 = (1.4142135623730951 * fConst15); + fConst17 = (0.70710678118654757 * fConst15); + fConst18 = (12.766152972845846 * fConst11); + fConst19 = double(tgamma(3.5)); + fConst20 = sqrt((7.0 * (fConst3 / fConst14))); + fConst21 = (6.3830764864229232 * fConst20); + fConst22 = sqrt((9.0 * (fConst6 / double(tgamma(8.0))))); + fConst23 = (44.681535404960464 * fConst22); + fConst24 = double(tgamma(1.5)); + fConst25 = sqrt((3.0 * (fConst3 / fConst13))); + fConst26 = (1.5957691216057308 * fConst25); + fConst27 = double(tgamma(4.0)); + fConst28 = sqrt((5.0 * (fConst6 / fConst27))); + fConst29 = (4.7873073648171927 * fConst28); + fConst30 = sqrt((7.0 * (fConst13 / fConst4))); + fConst31 = (0.70710678118654757 * fConst30); + fConst32 = sqrt((9.0 * (fConst27 / fConst7))); + fConst33 = (0.47140452079103168 * fConst32); + fConst34 = (0.12698727186848197 * (fConst25 * fConst24)); + fConst35 = (fConst5 * fConst2); + fConst36 = (0.50794908747392786 * fConst35); + fConst37 = (0.3809618156054459 * (fConst28 * fConst24)); + fConst38 = (0.25397454373696393 * fConst35); + fConst39 = (0.50794908747392786 * (fConst20 * fConst19)); + fConst40 = (fConst8 * fConst2); + fConst41 = (2.5397454373696391 * fConst40); + fConst42 = (0.056269769759819135 * (fConst30 * fConst24)); + fConst43 = (1.2698727186848195 * fConst40); + fConst44 = (2.0317963498957115 * fConst11); + fConst45 = (3.5556436123174948 * (fConst22 * fConst19)); + fConst46 = (0.11253953951963827 * fConst15); + fConst47 = (0.037513179839879424 * (fConst32 * fConst24)); + fConst48 = (0.056269769759819135 * fConst15); + fConst49 = (1.0158981749478557 * fConst11); } @@ -970,9 +1075,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1053,146 +1158,143 @@ class mydsp : public dsp { int iSlow4 = (fSlow0 > 0.0); double fSlow5 = (fConst0 * fSlow2); int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = double(fVslider0); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fVslider1); - double fSlow10 = (3.0 * fSlow9); - double fSlow11 = sin(fSlow10); - double fSlow12 = (2.0916500663351889 * (fSlow11 * fSlow8)); - double fSlow13 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow14 = (2.0 * fSlow9); - double fSlow15 = sin(fSlow14); - double fSlow16 = sin(fSlow7); - double fSlow17 = (5.123475382979799 * (fSlow15 * fSlow16)); - double fSlow18 = sin(fSlow9); - double fSlow19 = mydsp_faustpower2_f(fSlow16); - double fSlow20 = (5.0 * fSlow19); - double fSlow21 = (fSlow20 + -1.0); - double fSlow22 = (fSlow18 * fSlow21); - double fSlow23 = (1.6201851746019651 * fSlow22); - double fSlow24 = cos(fSlow9); - double fSlow25 = (fSlow24 * fSlow21); - double fSlow26 = (1.6201851746019651 * fSlow25); - double fSlow27 = cos(fSlow10); - double fSlow28 = mydsp_faustpower2_f(fSlow8); - double fSlow29 = (2.0916500663351889 * (fSlow27 * fSlow28)); - double fSlow30 = (4.0 * fSlow9); - double fSlow31 = sin(fSlow30); - double fSlow32 = mydsp_faustpower3_f(fSlow8); - double fSlow33 = (2.2185299186623562 * (fSlow31 * fSlow32)); - double fSlow34 = (7.0 * fSlow19); - double fSlow35 = (fSlow34 + -1.0); - double fSlow36 = (fSlow15 * fSlow35); - double fSlow37 = (1.6770509831248424 * (fSlow36 * fSlow8)); - double fSlow38 = cos(fSlow14); - double fSlow39 = (fSlow38 * fSlow35); - double fSlow40 = (1.6770509831248424 * (fSlow39 * fSlow8)); - double fSlow41 = cos(fSlow30); - double fSlow42 = (2.2185299186623562 * (fSlow41 * fSlow32)); - double fSlow43 = (fSlow20 + -3.0); - double fSlow44 = (1.3228756555322954 * fSlow43); - double fSlow45 = (fSlow38 * fSlow28); - double fSlow46 = (5.123475382979799 * fSlow45); - double fSlow47 = (fSlow11 * fSlow32); - double fSlow48 = (6.2749501990055663 * fSlow47); - double fSlow49 = (fSlow27 * fSlow32); - double fSlow50 = (6.2749501990055663 * fSlow49); - double fSlow51 = (fSlow34 + -3.0); - double fSlow52 = sin((2.0 * fSlow7)); - double fSlow53 = (1.1858541225631423 * (fSlow51 * fSlow52)); - double fSlow54 = (fSlow18 * fSlow8); - double fSlow55 = (fSlow24 * fSlow8); - double fSlow56 = ((3.0 * fSlow19) + -1.0); - double fSlow57 = (1.1180339887498949 * fSlow56); - double fSlow58 = (fSlow15 * fSlow28); - double fSlow59 = (fSlow18 * fSlow52); - double fSlow60 = (fSlow24 * fSlow52); - double fSlow61 = ((((35.0 * fSlow19) + -30.0) * fSlow19) + 3.0); - double fSlow62 = (0.375 * fSlow61); - double fSlow63 = (0.13783222385544802 * fSlow54); - double fSlow64 = (0.13783222385544802 * fSlow16); - double fSlow65 = (0.13783222385544802 * fSlow55); - double fSlow66 = (0.15410111101537496 * fSlow58); - double fSlow67 = (0.15410111101537496 * fSlow59); - double fSlow68 = (0.088970317927147144 * fSlow56); - double fSlow69 = (0.15410111101537496 * fSlow60); - double fSlow70 = (0.15410111101537496 * fSlow45); - double fSlow71 = (0.16644822363786807 * fSlow47); - double fSlow72 = (0.40771321650543829 * (fSlow58 * fSlow16)); - double fSlow73 = (0.12893023963105413 * (fSlow22 * fSlow8)); - double fSlow74 = (0.10527109983694811 * (fSlow43 * fSlow16)); - double fSlow75 = (0.12893023963105413 * (fSlow25 * fSlow8)); - double fSlow76 = (0.40771321650543829 * (fSlow45 * fSlow16)); - double fSlow77 = (0.16644822363786807 * fSlow49); - double fSlow78 = mydsp_faustpower4_f(fSlow8); - double fSlow79 = (0.17654500147618726 * (fSlow31 * fSlow78)); - double fSlow80 = (0.49934467091360413 * (fSlow47 * fSlow16)); - double fSlow81 = (0.13345547689072071 * (fSlow36 * fSlow28)); - double fSlow82 = (0.094367272695913204 * ((fSlow18 * fSlow51) * fSlow52)); - double fSlow83 = (0.029841551829730376 * fSlow61); - double fSlow84 = (0.094367272695913204 * ((fSlow24 * fSlow51) * fSlow52)); - double fSlow85 = (0.13345547689072071 * (fSlow39 * fSlow28)); - double fSlow86 = (0.49934467091360413 * (fSlow49 * fSlow16)); - double fSlow87 = (0.17654500147618726 * (fSlow41 * fSlow78)); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = mydsp_faustpower2_f(fSlow7); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = double(fVslider1); + double fSlow11 = cos(fSlow10); + double fSlow12 = sin(fSlow10); + double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); + double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow15 = mydsp_faustpower2_f(fSlow11); + double fSlow16 = ((2.0 * fSlow15) + -1.0); + double fSlow17 = (3.1915382432114616 * fSlow16); + double fSlow18 = (fSlow11 * fSlow7); + double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); + double fSlow20 = (fSlow16 * fSlow7); + double fSlow21 = (fConst10 * fSlow20); + double fSlow22 = ((4.0 * fSlow15) + -1.0); + double fSlow23 = ((fSlow22 + -1.0) * fSlow11); + double fSlow24 = (fConst12 * ((fSlow23 * fSlow9) * fSlow12)); + double fSlow25 = ((78.986541696685876 * fSlow8) + -11.283791670955125); + double fSlow26 = (fSlow25 * fSlow11); + double fSlow27 = (fConst16 * (fSlow26 * fSlow12)); + double fSlow28 = (fSlow16 * fSlow25); + double fSlow29 = (fConst17 * fSlow28); + double fSlow30 = ((2.0 * fSlow16) + -1.0); + double fSlow31 = (1.0 - (2.0 * ((1.0 - fSlow30) * fSlow15))); + double fSlow32 = (fConst18 * (fSlow31 * fSlow9)); + double fSlow33 = pow(fSlow9, 1.5); + double fSlow34 = (fConst19 * fSlow33); + double fSlow35 = (fSlow22 * fSlow12); + double fSlow36 = (fSlow30 * fSlow11); + double fSlow37 = (fSlow22 * fSlow7); + double fSlow38 = (fConst23 * (fSlow37 * fSlow12)); + double fSlow39 = (fSlow36 * fSlow7); + double fSlow40 = (fConst23 * fSlow39); + double fSlow41 = pow(fSlow9, 0.5); + double fSlow42 = (fConst24 * fSlow41); + double fSlow43 = (fConst29 * (fSlow7 * fSlow12)); + double fSlow44 = (fConst29 * fSlow18); + double fSlow45 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); + double fSlow46 = (fConst31 * (fSlow45 * fSlow12)); + double fSlow47 = (fSlow45 * fSlow11); + double fSlow48 = (fConst31 * fSlow47); + double fSlow49 = ((3.5 * fSlow45) + -13.540550005146152); + double fSlow50 = (fSlow49 * fSlow7); + double fSlow51 = (fConst33 * (fSlow50 * fSlow12)); + double fSlow52 = ((fSlow49 * fSlow11) * fSlow7); + double fSlow53 = (fConst33 * fSlow52); + double fSlow54 = ((3.0 * fSlow8) + -1.0); + double fSlow55 = ((2.5 * fSlow54) + -2.0); + double fSlow56 = (0.88191710368819687 * fSlow55); + double fSlow57 = (1.1180339887498949 * fSlow54); + double fSlow58 = ((2.333333333333333 * (fSlow55 * fSlow8)) - (1.5 * fSlow54)); + double fSlow59 = (0.75 * fSlow58); + double fSlow60 = (fConst34 * (fSlow41 * fSlow12)); + double fSlow61 = (0.13783222385544802 * fSlow7); + double fSlow62 = (fConst34 * (fSlow11 * fSlow41)); + double fSlow63 = (fConst36 * ((fSlow11 * fSlow9) * fSlow12)); + double fSlow64 = (fConst37 * ((fSlow7 * fSlow41) * fSlow12)); + double fSlow65 = (0.088970317927147144 * fSlow54); + double fSlow66 = (fConst37 * (fSlow18 * fSlow41)); + double fSlow67 = (fConst38 * (fSlow16 * fSlow9)); + double fSlow68 = (fConst39 * ((fSlow22 * fSlow33) * fSlow12)); + double fSlow69 = (fConst41 * ((fSlow18 * fSlow9) * fSlow12)); + double fSlow70 = (fConst42 * ((fSlow45 * fSlow41) * fSlow12)); + double fSlow71 = (0.070180733224632072 * (fSlow55 * fSlow7)); + double fSlow72 = (fConst42 * (fSlow47 * fSlow41)); + double fSlow73 = (fConst43 * (fSlow20 * fSlow9)); + double fSlow74 = (fConst39 * (fSlow36 * fSlow33)); + double fSlow75 = mydsp_faustpower2_f(fSlow9); + double fSlow76 = (fConst44 * ((fSlow23 * fSlow75) * fSlow12)); + double fSlow77 = (fConst45 * ((fSlow37 * fSlow33) * fSlow12)); + double fSlow78 = (fConst46 * ((fSlow26 * fSlow9) * fSlow12)); + double fSlow79 = (fConst47 * ((fSlow50 * fSlow41) * fSlow12)); + double fSlow80 = (0.059683103659460751 * fSlow58); + double fSlow81 = (fConst47 * (fSlow52 * fSlow41)); + double fSlow82 = (fConst48 * (fSlow28 * fSlow9)); + double fSlow83 = (fConst45 * (fSlow39 * fSlow33)); + double fSlow84 = (fConst49 * (fSlow31 * fSlow75)); for (int i = 0; (i < count); i = (i + 1)) { fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow13 + (0.999 * fRec2[1])); + fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); - double fTemp2 = double(input9[i]); + double fTemp2 = double(input4[i]); fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); - double fTemp4 = double(input10[i]); - double fTemp5 = double(input11[i]); - double fTemp6 = double(input13[i]); - double fTemp7 = double(input15[i]); - double fTemp8 = double(input16[i]); - double fTemp9 = double(input18[i]); - double fTemp10 = double(input22[i]); - double fTemp11 = double(input24[i]); - double fTemp12 = double(input12[i]); - double fTemp13 = double(input14[i]); - double fTemp14 = double(input17[i]); - double fTemp15 = double(input23[i]); - double fTemp16 = double(input19[i]); - double fTemp17 = double(input21[i]); - double fTemp18 = double(input1[i]); - double fTemp19 = double(input2[i]); - double fTemp20 = double(input3[i]); - double fTemp21 = double(input6[i]); - double fTemp22 = double(input4[i]); - double fTemp23 = double(input5[i]); - double fTemp24 = double(input7[i]); - double fTemp25 = double(input8[i]); + double fTemp4 = double(input8[i]); + double fTemp5 = double(input10[i]); + double fTemp6 = double(input14[i]); + double fTemp7 = double(input16[i]); + double fTemp8 = double(input18[i]); + double fTemp9 = double(input22[i]); + double fTemp10 = double(input24[i]); + double fTemp11 = double(input9[i]); + double fTemp12 = double(input15[i]); + double fTemp13 = double(input17[i]); + double fTemp14 = double(input23[i]); + double fTemp15 = double(input1[i]); + double fTemp16 = double(input3[i]); + double fTemp17 = double(input5[i]); + double fTemp18 = double(input7[i]); + double fTemp19 = double(input11[i]); + double fTemp20 = double(input13[i]); + double fTemp21 = double(input19[i]); + double fTemp22 = double(input21[i]); + double fTemp23 = double(input2[i]); + double fTemp24 = double(input12[i]); + double fTemp25 = double(input6[i]); double fTemp26 = double(input20[i]); - double fTemp27 = ((fSlow8 * ((((((((fSlow8 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow29 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow33 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow42 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11)))))) + ((fSlow16 * ((((fSlow44 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12)))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow48 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow50 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))))) + ((fSlow53 * ((fSlow18 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow54 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18)))) + (fSlow16 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow55 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))))) + (fSlow57 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (1.9364916731037085 * ((((fSlow58 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow60 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow45 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26)))))))); + double fTemp27 = ((fSlow9 * (((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow27 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow29 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow32 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10)))))) + ((fSlow34 * (((fConst21 * ((fSlow35 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11)))) + (fSlow36 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12)))))) + (fSlow38 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14)))))) + ((fSlow42 * (((((((fConst26 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))))) + (fSlow43 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow44 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow48 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))))) + (((fSlow7 * ((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23)))) + (fSlow56 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24)))))) + ((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow57 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25)))))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26)))))))); output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp27))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow63 * fTemp27))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow64 * fTemp27))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow65 * fTemp27))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow66 * fTemp27))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow67 * fTemp27))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow68 * fTemp27))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow69 * fTemp27))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow70 * fTemp27))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow71 * fTemp27))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow72 * fTemp27))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow73 * fTemp27))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow74 * fTemp27))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow75 * fTemp27))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow76 * fTemp27))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow77 * fTemp27))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow79 * fTemp27))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow80 * fTemp27))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow81 * fTemp27))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow82 * fTemp27))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow83 * fTemp27))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow84 * fTemp27))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow85 * fTemp27))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow86 * fTemp27))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow87 * fTemp27))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow60 * fTemp27))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow61 * fTemp27))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow62 * fTemp27))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow63 * fTemp27))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow64 * fTemp27))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow65 * fTemp27))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow66 * fTemp27))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow67 * fTemp27))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow68 * fTemp27))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow69 * fTemp27))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow70 * fTemp27))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow71 * fTemp27))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow72 * fTemp27))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow73 * fTemp27))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow74 * fTemp27))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow76 * fTemp27))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow77 * fTemp27))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow78 * fTemp27))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow79 * fTemp27))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow80 * fTemp27))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow81 * fTemp27))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow82 * fTemp27))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow83 * fTemp27))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow84 * fTemp27))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; @@ -1206,7 +1308,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1438,7 +1539,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1501,7 +1602,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1530,11 +1631,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamDirac2Hoa5.cpp b/source/HOAUGens/HOABeamDirac2Hoa5.cpp index 7a73a1e819..5c94984547 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa5.cpp +++ b/source/HOAUGens/HOABeamDirac2Hoa5.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA5" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,33 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double cos(double dummy0); -double sin(double dummy0); -double pow(double dummy0, double dummy1); double mydsp_faustpower2_f(double value) { return (value * value); -} -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - -} -double mydsp_faustpower4_f(double value) { - return (((value * value) * value) * value); - -} -double mydsp_faustpower5_f(double value) { - return ((((value * value) * value) * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -638,12 +643,82 @@ class mydsp : public dsp { FAUSTFLOAT fEntry0; double fRec0[2]; double fRec1[2]; + double fConst2; + double fConst3; + double fConst4; FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; double fRec2[2]; double fRec3[2]; double fRec4[2]; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; public: @@ -652,36 +727,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamDirac2HOA5"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1011,8 +1086,78 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (1.0 / fConst0); + fConst2 = double(tgamma(1.0)); + fConst3 = (sqrt((11.0 * (fConst2 / double(tgamma(11.0))))) * double(tgamma(5.5))); + fConst4 = (25.532305945691693 * fConst3); + fConst5 = double(tgamma(2.0)); + fConst6 = double(tgamma(4.5)); + fConst7 = (sqrt((11.0 * (fConst5 / double(tgamma(10.0))))) * fConst6); + fConst8 = (229.79075351122526 * fConst7); + fConst9 = (114.89537675561263 * fConst7); + fConst10 = double(tgamma(3.5)); + fConst11 = double(tgamma(7.0)); + fConst12 = sqrt((7.0 * (fConst2 / fConst11))); + fConst13 = (6.3830764864229232 * fConst12); + fConst14 = double(tgamma(8.0)); + fConst15 = sqrt((9.0 * (fConst5 / fConst14))); + fConst16 = (44.681535404960464 * fConst15); + fConst17 = double(tgamma(3.0)); + fConst18 = double(tgamma(9.0)); + fConst19 = sqrt((11.0 * (fConst17 / fConst18))); + fConst20 = (0.70710678118654757 * fConst19); + fConst21 = double(tgamma(2.5)); + fConst22 = double(tgamma(5.0)); + fConst23 = sqrt((5.0 * (fConst2 / fConst22))); + fConst24 = double(tgamma(6.0)); + fConst25 = sqrt((7.0 * (fConst5 / fConst24))); + fConst26 = (31.915382432114615 * fConst25); + fConst27 = (15.957691216057308 * fConst25); + fConst28 = (sqrt((9.0 * (fConst2 / fConst18))) * fConst6); + fConst29 = (25.532305945691693 * fConst28); + fConst30 = (sqrt((9.0 * (fConst17 / fConst11))) * fConst21); + fConst31 = (1.4142135623730951 * fConst30); + fConst32 = (0.70710678118654757 * fConst30); + fConst33 = (12.766152972845846 * fConst28); + fConst34 = double(tgamma(4.0)); + fConst35 = (sqrt((11.0 * (fConst34 / fConst14))) * fConst21); + fConst36 = (0.94280904158206336 * fConst35); + fConst37 = (0.47140452079103168 * fConst35); + fConst38 = double(tgamma(1.5)); + fConst39 = sqrt((3.0 * (fConst2 / fConst17))); + fConst40 = (1.5957691216057308 * fConst39); + fConst41 = sqrt((5.0 * (fConst5 / fConst34))); + fConst42 = (4.7873073648171927 * fConst41); + fConst43 = sqrt((7.0 * (fConst17 / fConst22))); + fConst44 = (0.70710678118654757 * fConst43); + fConst45 = sqrt((9.0 * (fConst34 / fConst24))); + fConst46 = (0.47140452079103168 * fConst45); + fConst47 = sqrt((11.0 * (fConst22 / fConst11))); + fConst48 = (0.35355339059327379 * fConst47); + fConst49 = (0.12698727186848197 * (fConst39 * fConst38)); + fConst50 = (fConst23 * fConst21); + fConst51 = (0.50794908747392786 * fConst50); + fConst52 = (0.3809618156054459 * (fConst41 * fConst38)); + fConst53 = (0.25397454373696393 * fConst50); + fConst54 = (0.50794908747392786 * (fConst12 * fConst10)); + fConst55 = (fConst25 * fConst21); + fConst56 = (2.5397454373696391 * fConst55); + fConst57 = (0.056269769759819135 * (fConst43 * fConst38)); + fConst58 = (1.2698727186848195 * fConst55); + fConst59 = (2.0317963498957115 * fConst28); + fConst60 = (3.5556436123174948 * (fConst15 * fConst10)); + fConst61 = (0.11253953951963827 * fConst30); + fConst62 = (0.037513179839879424 * (fConst45 * fConst38)); + fConst63 = (0.056269769759819135 * fConst30); + fConst64 = (1.0158981749478557 * fConst28); + fConst65 = (2.0317963498957115 * fConst3); + fConst66 = (18.286167149061402 * fConst7); + fConst67 = (0.056269769759819135 * (fConst19 * fConst10)); + fConst68 = (0.075026359679758847 * fConst35); + fConst69 = (0.028134884879909568 * (fConst47 * fConst38)); + fConst70 = (0.037513179839879424 * fConst35); + fConst71 = (9.1430835745307011 * fConst7); } @@ -1062,9 +1207,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1167,204 +1312,202 @@ class mydsp : public dsp { int iSlow4 = (fSlow0 > 0.0); double fSlow5 = (fConst0 * fSlow2); int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = double(fVslider0); - double fSlow8 = cos(fSlow7); - double fSlow9 = double(fVslider1); - double fSlow10 = (3.0 * fSlow9); - double fSlow11 = sin(fSlow10); - double fSlow12 = (2.0916500663351889 * (fSlow11 * fSlow8)); - double fSlow13 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow14 = (2.0 * fSlow9); - double fSlow15 = sin(fSlow14); - double fSlow16 = sin(fSlow7); - double fSlow17 = (5.123475382979799 * (fSlow15 * fSlow16)); - double fSlow18 = sin(fSlow9); - double fSlow19 = mydsp_faustpower2_f(fSlow16); - double fSlow20 = (5.0 * fSlow19); - double fSlow21 = (fSlow20 + -1.0); - double fSlow22 = (fSlow18 * fSlow21); - double fSlow23 = (1.6201851746019651 * fSlow22); - double fSlow24 = cos(fSlow9); - double fSlow25 = (fSlow24 * fSlow21); - double fSlow26 = (1.6201851746019651 * fSlow25); - double fSlow27 = cos(fSlow10); - double fSlow28 = mydsp_faustpower2_f(fSlow8); - double fSlow29 = (2.0916500663351889 * (fSlow27 * fSlow28)); - double fSlow30 = (4.0 * fSlow9); - double fSlow31 = sin(fSlow30); - double fSlow32 = mydsp_faustpower3_f(fSlow8); - double fSlow33 = (2.2185299186623562 * (fSlow31 * fSlow32)); - double fSlow34 = (7.0 * fSlow19); - double fSlow35 = (fSlow34 + -1.0); - double fSlow36 = (fSlow15 * fSlow35); - double fSlow37 = (1.6770509831248424 * (fSlow36 * fSlow8)); - double fSlow38 = cos(fSlow14); - double fSlow39 = (fSlow38 * fSlow35); - double fSlow40 = (1.6770509831248424 * (fSlow39 * fSlow8)); - double fSlow41 = cos(fSlow30); - double fSlow42 = (2.2185299186623562 * (fSlow41 * fSlow32)); - double fSlow43 = (5.0 * fSlow9); - double fSlow44 = sin(fSlow43); - double fSlow45 = mydsp_faustpower4_f(fSlow8); - double fSlow46 = (2.3268138086232857 * (fSlow44 * fSlow45)); - double fSlow47 = ((9.0 * fSlow19) + -1.0); - double fSlow48 = (fSlow11 * fSlow47); - double fSlow49 = (1.734304615688951 * (fSlow48 * fSlow28)); - double fSlow50 = ((((21.0 * fSlow19) + -14.0) * fSlow19) + 1.0); - double fSlow51 = (fSlow18 * fSlow50); - double fSlow52 = (1.6056540723331412 * fSlow51); - double fSlow53 = (fSlow24 * fSlow50); - double fSlow54 = (1.6056540723331412 * fSlow53); - double fSlow55 = (fSlow27 * fSlow47); - double fSlow56 = (1.734304615688951 * (fSlow55 * fSlow28)); - double fSlow57 = cos(fSlow43); - double fSlow58 = (2.3268138086232857 * (fSlow57 * fSlow45)); - double fSlow59 = (fSlow20 + -3.0); - double fSlow60 = (1.3228756555322954 * fSlow59); - double fSlow61 = (fSlow38 * fSlow28); - double fSlow62 = (5.123475382979799 * fSlow61); - double fSlow63 = (fSlow11 * fSlow32); - double fSlow64 = (6.2749501990055663 * fSlow63); - double fSlow65 = (fSlow27 * fSlow32); - double fSlow66 = (6.2749501990055663 * fSlow65); - double fSlow67 = (fSlow31 * fSlow45); - double fSlow68 = (7.3580313263807184 * fSlow67); - double fSlow69 = ((((63.0 * fSlow19) + -70.0) * fSlow19) + 15.0); - double fSlow70 = (0.41457809879442498 * fSlow69); - double fSlow71 = (fSlow41 * fSlow45); - double fSlow72 = (7.3580313263807184 * fSlow71); - double fSlow73 = (fSlow34 + -3.0); - double fSlow74 = sin((2.0 * fSlow7)); - double fSlow75 = (1.1858541225631423 * (fSlow73 * fSlow74)); - double fSlow76 = ((((35.0 * fSlow19) + -30.0) * fSlow19) + 3.0); - double fSlow77 = (0.375 * fSlow76); - double fSlow78 = (fSlow18 * fSlow8); - double fSlow79 = (fSlow24 * fSlow8); - double fSlow80 = (fSlow15 * fSlow28); - double fSlow81 = (fSlow18 * fSlow74); - double fSlow82 = (fSlow24 * fSlow74); - double fSlow83 = ((3.0 * fSlow19) + -1.0); - double fSlow84 = (fSlow80 * fSlow16); - double fSlow85 = (8.4963227339832148 * fSlow84); - double fSlow86 = (fSlow61 * fSlow16); - double fSlow87 = (8.4963227339832148 * fSlow86); - double fSlow88 = (0.13783222385544802 * fSlow78); - double fSlow89 = (0.13783222385544802 * fSlow16); - double fSlow90 = (0.13783222385544802 * fSlow79); - double fSlow91 = (0.15410111101537496 * fSlow80); - double fSlow92 = (0.15410111101537496 * fSlow81); - double fSlow93 = (0.088970317927147144 * fSlow83); - double fSlow94 = (0.15410111101537496 * fSlow82); - double fSlow95 = (0.15410111101537496 * fSlow61); - double fSlow96 = (0.16644822363786807 * fSlow63); - double fSlow97 = (0.40771321650543829 * fSlow84); - double fSlow98 = (0.12893023963105413 * (fSlow22 * fSlow8)); - double fSlow99 = (0.10527109983694811 * (fSlow59 * fSlow16)); - double fSlow100 = (0.12893023963105413 * (fSlow25 * fSlow8)); - double fSlow101 = (0.40771321650543829 * fSlow86); - double fSlow102 = (0.16644822363786807 * fSlow65); - double fSlow103 = (0.17654500147618726 * fSlow67); - double fSlow104 = (0.49934467091360413 * (fSlow63 * fSlow16)); - double fSlow105 = (0.13345547689072071 * (fSlow36 * fSlow28)); - double fSlow106 = (0.094367272695913204 * ((fSlow18 * fSlow73) * fSlow74)); - double fSlow107 = (0.029841551829730376 * fSlow76); - double fSlow108 = (0.094367272695913204 * ((fSlow24 * fSlow73) * fSlow74)); - double fSlow109 = (0.13345547689072071 * (fSlow39 * fSlow28)); - double fSlow110 = (0.49934467091360413 * (fSlow65 * fSlow16)); - double fSlow111 = (0.17654500147618726 * fSlow71); - double fSlow112 = mydsp_faustpower5_f(fSlow8); - double fSlow113 = (0.18516195964843765 * (fSlow44 * fSlow112)); - double fSlow114 = (0.58553352850925322 * (fSlow67 * fSlow16)); - double fSlow115 = (0.13801157620699323 * (fSlow48 * fSlow32)); - double fSlow116 = (0.67611588060873762 * (((fSlow15 * fSlow83) * fSlow28) * fSlow16)); - double fSlow117 = (0.12777389125372554 * (fSlow51 * fSlow8)); - double fSlow118 = (0.032991076860386437 * (fSlow69 * fSlow16)); - double fSlow119 = (0.12777389125372554 * (fSlow53 * fSlow8)); - double fSlow120 = (0.67611588060873762 * (((fSlow38 * fSlow83) * fSlow28) * fSlow16)); - double fSlow121 = (0.13801157620699323 * (fSlow55 * fSlow32)); - double fSlow122 = (0.58553352850925322 * (fSlow71 * fSlow16)); - double fSlow123 = (0.18516195964843765 * (fSlow57 * fSlow112)); + double fSlow7 = sin(double(fVslider0)); + double fSlow8 = mydsp_faustpower2_f(fSlow7); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = pow(fSlow9, 2.5); + double fSlow11 = (fConst4 * fSlow10); + double fSlow12 = double(fVslider1); + double fSlow13 = cos(fSlow12); + double fSlow14 = mydsp_faustpower2_f(fSlow13); + double fSlow15 = ((4.0 * fSlow14) + -1.0); + double fSlow16 = (fSlow15 + -1.0); + double fSlow17 = (1.0 - (4.0 * ((1.0 - fSlow16) * fSlow14))); + double fSlow18 = sin(fSlow12); + double fSlow19 = (fSlow17 * fSlow18); + double fSlow20 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow21 = ((2.0 * fSlow14) + -1.0); + double fSlow22 = ((2.0 * fSlow21) + -1.0); + double fSlow23 = (1.0 - (2.0 * ((1.0 - fSlow22) * fSlow14))); + double fSlow24 = (((2.0 * fSlow23) - fSlow22) * fSlow13); + double fSlow25 = ((3.0 * fSlow8) + -1.0); + double fSlow26 = ((2.5 * fSlow25) + -2.0); + double fSlow27 = (0.88191710368819687 * fSlow26); + double fSlow28 = (fSlow16 * fSlow13); + double fSlow29 = mydsp_faustpower2_f(fSlow9); + double fSlow30 = ((fSlow28 * fSlow29) * fSlow18); + double fSlow31 = (fConst8 * fSlow30); + double fSlow32 = ((2.333333333333333 * (fSlow26 * fSlow8)) - (1.5 * fSlow25)); + double fSlow33 = ((2.25 * fSlow32) - (1.3333333333333333 * fSlow26)); + double fSlow34 = (0.66332495807108005 * fSlow33); + double fSlow35 = (fSlow23 * fSlow29); + double fSlow36 = (fConst9 * fSlow35); + double fSlow37 = pow(fSlow9, 1.5); + double fSlow38 = (fConst10 * fSlow37); + double fSlow39 = (fSlow15 * fSlow18); + double fSlow40 = (fSlow22 * fSlow13); + double fSlow41 = (fSlow15 * fSlow7); + double fSlow42 = (fConst16 * (fSlow41 * fSlow18)); + double fSlow43 = (fSlow40 * fSlow7); + double fSlow44 = (fConst16 * fSlow43); + double fSlow45 = ((284.35155010806915 * fSlow8) + -31.594616678674353); + double fSlow46 = (fSlow15 * fSlow45); + double fSlow47 = (fConst20 * (fSlow46 * fSlow18)); + double fSlow48 = ((fSlow22 * fSlow45) * fSlow13); + double fSlow49 = (fConst20 * fSlow48); + double fSlow50 = (6.3830764864229232 * (fSlow13 * fSlow18)); + double fSlow51 = (3.1915382432114616 * fSlow21); + double fSlow52 = (fSlow13 * fSlow7); + double fSlow53 = (fConst26 * (fSlow52 * fSlow18)); + double fSlow54 = (fSlow21 * fSlow7); + double fSlow55 = (fConst27 * fSlow54); + double fSlow56 = (fConst29 * ((fSlow28 * fSlow9) * fSlow18)); + double fSlow57 = ((78.986541696685876 * fSlow8) + -11.283791670955125); + double fSlow58 = (fSlow57 * fSlow13); + double fSlow59 = (fConst31 * (fSlow58 * fSlow18)); + double fSlow60 = (fSlow21 * fSlow57); + double fSlow61 = (fConst32 * fSlow60); + double fSlow62 = (fConst33 * (fSlow23 * fSlow9)); + double fSlow63 = ((4.5 * fSlow57) + -67.702750025730751); + double fSlow64 = ((fSlow63 * fSlow13) * fSlow7); + double fSlow65 = (fConst36 * (fSlow64 * fSlow18)); + double fSlow66 = ((fSlow21 * fSlow63) * fSlow7); + double fSlow67 = (fConst37 * fSlow66); + double fSlow68 = (1.1180339887498949 * fSlow25); + double fSlow69 = (0.75 * fSlow32); + double fSlow70 = pow(fSlow9, 0.5); + double fSlow71 = (fConst38 * fSlow70); + double fSlow72 = (fConst42 * (fSlow7 * fSlow18)); + double fSlow73 = (fConst42 * fSlow52); + double fSlow74 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); + double fSlow75 = (fConst44 * (fSlow74 * fSlow18)); + double fSlow76 = (fSlow74 * fSlow13); + double fSlow77 = (fConst44 * fSlow76); + double fSlow78 = ((3.5 * fSlow74) + -13.540550005146152); + double fSlow79 = (fSlow78 * fSlow7); + double fSlow80 = (fConst46 * (fSlow79 * fSlow18)); + double fSlow81 = ((fSlow78 * fSlow13) * fSlow7); + double fSlow82 = (fConst46 * fSlow81); + double fSlow83 = ((3.0 * (fSlow78 * fSlow8)) - (2.5 * fSlow74)); + double fSlow84 = (fConst48 * (fSlow83 * fSlow18)); + double fSlow85 = (fSlow83 * fSlow13); + double fSlow86 = (fConst48 * fSlow85); + double fSlow87 = (fConst49 * (fSlow70 * fSlow18)); + double fSlow88 = (0.13783222385544802 * fSlow7); + double fSlow89 = (fConst49 * (fSlow13 * fSlow70)); + double fSlow90 = (fConst51 * ((fSlow13 * fSlow9) * fSlow18)); + double fSlow91 = (fConst52 * ((fSlow7 * fSlow70) * fSlow18)); + double fSlow92 = (0.088970317927147144 * fSlow25); + double fSlow93 = (fConst52 * (fSlow52 * fSlow70)); + double fSlow94 = (fConst53 * (fSlow21 * fSlow9)); + double fSlow95 = (fConst54 * ((fSlow15 * fSlow37) * fSlow18)); + double fSlow96 = (fConst56 * ((fSlow52 * fSlow9) * fSlow18)); + double fSlow97 = (fConst57 * ((fSlow74 * fSlow70) * fSlow18)); + double fSlow98 = (0.070180733224632072 * (fSlow26 * fSlow7)); + double fSlow99 = (fConst57 * (fSlow76 * fSlow70)); + double fSlow100 = (fConst58 * (fSlow54 * fSlow9)); + double fSlow101 = (fConst54 * (fSlow40 * fSlow37)); + double fSlow102 = (fConst59 * fSlow30); + double fSlow103 = (fConst60 * ((fSlow41 * fSlow37) * fSlow18)); + double fSlow104 = (fConst61 * ((fSlow58 * fSlow9) * fSlow18)); + double fSlow105 = (fConst62 * ((fSlow79 * fSlow70) * fSlow18)); + double fSlow106 = (0.059683103659460751 * fSlow32); + double fSlow107 = (fConst62 * (fSlow81 * fSlow70)); + double fSlow108 = (fConst63 * (fSlow60 * fSlow9)); + double fSlow109 = (fConst60 * (fSlow43 * fSlow37)); + double fSlow110 = (fConst64 * fSlow35); + double fSlow111 = (fConst65 * ((fSlow17 * fSlow10) * fSlow18)); + double fSlow112 = (fConst66 * (((fSlow28 * fSlow7) * fSlow29) * fSlow18)); + double fSlow113 = (fConst67 * ((fSlow46 * fSlow37) * fSlow18)); + double fSlow114 = (fConst68 * ((fSlow64 * fSlow9) * fSlow18)); + double fSlow115 = (fConst69 * ((fSlow83 * fSlow70) * fSlow18)); + double fSlow116 = (0.052785722976618307 * (fSlow33 * fSlow7)); + double fSlow117 = (fConst69 * (fSlow85 * fSlow70)); + double fSlow118 = (fConst70 * (fSlow66 * fSlow9)); + double fSlow119 = (fConst67 * (fSlow48 * fSlow37)); + double fSlow120 = (fConst71 * ((fSlow23 * fSlow7) * fSlow29)); + double fSlow121 = (fConst65 * (fSlow24 * fSlow10)); for (int i = 0; (i < count); i = (i + 1)) { fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow13 + (0.999 * fRec2[1])); + fRec2[0] = (fSlow20 + (0.999 * fRec2[1])); fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); - double fTemp2 = double(input9[i]); + double fTemp2 = double(input25[i]); fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); - double fTemp4 = double(input10[i]); - double fTemp5 = double(input11[i]); - double fTemp6 = double(input13[i]); - double fTemp7 = double(input15[i]); - double fTemp8 = double(input16[i]); - double fTemp9 = double(input18[i]); - double fTemp10 = double(input22[i]); - double fTemp11 = double(input24[i]); - double fTemp12 = double(input25[i]); - double fTemp13 = double(input27[i]); - double fTemp14 = double(input29[i]); - double fTemp15 = double(input31[i]); - double fTemp16 = double(input33[i]); - double fTemp17 = double(input35[i]); - double fTemp18 = double(input12[i]); + double fTemp4 = double(input35[i]); + double fTemp5 = double(input2[i]); + double fTemp6 = double(input12[i]); + double fTemp7 = double(input26[i]); + double fTemp8 = double(input30[i]); + double fTemp9 = double(input34[i]); + double fTemp10 = double(input9[i]); + double fTemp11 = double(input15[i]); + double fTemp12 = double(input17[i]); + double fTemp13 = double(input23[i]); + double fTemp14 = double(input27[i]); + double fTemp15 = double(input33[i]); + double fTemp16 = double(input4[i]); + double fTemp17 = double(input8[i]); + double fTemp18 = double(input10[i]); double fTemp19 = double(input14[i]); - double fTemp20 = double(input17[i]); - double fTemp21 = double(input23[i]); - double fTemp22 = double(input26[i]); - double fTemp23 = double(input30[i]); - double fTemp24 = double(input34[i]); - double fTemp25 = double(input19[i]); - double fTemp26 = double(input21[i]); + double fTemp20 = double(input16[i]); + double fTemp21 = double(input18[i]); + double fTemp22 = double(input22[i]); + double fTemp23 = double(input24[i]); + double fTemp24 = double(input28[i]); + double fTemp25 = double(input32[i]); + double fTemp26 = double(input6[i]); double fTemp27 = double(input20[i]); double fTemp28 = double(input1[i]); - double fTemp29 = double(input2[i]); - double fTemp30 = double(input3[i]); - double fTemp31 = double(input4[i]); - double fTemp32 = double(input5[i]); - double fTemp33 = double(input7[i]); - double fTemp34 = double(input8[i]); - double fTemp35 = double(input6[i]); - double fTemp36 = double(input28[i]); - double fTemp37 = double(input32[i]); - double fTemp38 = ((fSlow8 * ((((((((((((((fSlow8 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow29 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow33 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow42 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow49 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow52 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow54 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow56 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow58 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17)))))) + ((fSlow16 * (((((((fSlow60 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18)))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow64 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow66 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22))))) + (fSlow70 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow72 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24)))))) + (((fSlow75 * ((fSlow18 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25)))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26)))))) + ((fSlow77 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27)))) + (((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (1.7320508075688772 * (((fSlow78 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28)))) + (fSlow16 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow79 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))))) + (1.9364916731037085 * ((((fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31)))) + (fSlow81 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow82 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow61 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))))))) + (fSlow83 * (((1.1180339887498949 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35)))) + (fSlow85 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow87 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))))))); + double fTemp29 = double(input3[i]); + double fTemp30 = double(input5[i]); + double fTemp31 = double(input7[i]); + double fTemp32 = double(input11[i]); + double fTemp33 = double(input13[i]); + double fTemp34 = double(input19[i]); + double fTemp35 = double(input21[i]); + double fTemp36 = double(input29[i]); + double fTemp37 = double(input31[i]); + double fTemp38 = ((fSlow11 * ((fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + ((fSlow7 * (((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5)))) + (fSlow27 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow31 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow36 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9)))))) + ((fSlow38 * (((((fConst13 * ((fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10)))) + (fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11)))))) + (fSlow42 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow44 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow47 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow49 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))))) + ((fSlow9 * (((((((fConst21 * (((fConst23 * ((fSlow50 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17)))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow55 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19)))))) + (fSlow56 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow61 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow65 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow67 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25)))))) + ((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow69 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27))))) + (fSlow71 * (((((((((fConst40 * ((fSlow18 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28)))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29)))))) + (fSlow72 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))) + (fSlow73 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow77 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow82 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow84 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow86 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))))))))); output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp38))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow88 * fTemp38))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow89 * fTemp38))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow90 * fTemp38))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow91 * fTemp38))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow92 * fTemp38))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow93 * fTemp38))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow94 * fTemp38))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow95 * fTemp38))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow96 * fTemp38))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow97 * fTemp38))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow98 * fTemp38))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow99 * fTemp38))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow100 * fTemp38))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow101 * fTemp38))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow102 * fTemp38))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow103 * fTemp38))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow104 * fTemp38))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow105 * fTemp38))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow106 * fTemp38))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow107 * fTemp38))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow108 * fTemp38))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow109 * fTemp38))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow110 * fTemp38))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow111 * fTemp38))); - output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow113 * fTemp38))); - output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow114 * fTemp38))); - output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow115 * fTemp38))); - output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow116 * fTemp38))); - output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow117 * fTemp38))); - output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow118 * fTemp38))); - output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow119 * fTemp38))); - output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow120 * fTemp38))); - output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow121 * fTemp38))); - output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow122 * fTemp38))); - output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow123 * fTemp38))); + output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow87 * fTemp38))); + output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow88 * fTemp38))); + output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow89 * fTemp38))); + output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow90 * fTemp38))); + output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow91 * fTemp38))); + output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow92 * fTemp38))); + output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow93 * fTemp38))); + output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow94 * fTemp38))); + output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow95 * fTemp38))); + output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow96 * fTemp38))); + output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow97 * fTemp38))); + output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow98 * fTemp38))); + output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow99 * fTemp38))); + output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow100 * fTemp38))); + output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow101 * fTemp38))); + output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow102 * fTemp38))); + output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow103 * fTemp38))); + output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow104 * fTemp38))); + output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow105 * fTemp38))); + output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow106 * fTemp38))); + output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow107 * fTemp38))); + output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow108 * fTemp38))); + output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow109 * fTemp38))); + output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow110 * fTemp38))); + output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow111 * fTemp38))); + output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow112 * fTemp38))); + output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow113 * fTemp38))); + output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow114 * fTemp38))); + output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow115 * fTemp38))); + output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow116 * fTemp38))); + output31[i] = FAUSTFLOAT(((fSlow117 * fTemp38) + (iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))))); + output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow118 * fTemp38))); + output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow119 * fTemp38))); + output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow120 * fTemp38))); + output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow121 * fTemp38))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; @@ -1378,7 +1521,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1610,7 +1752,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1673,7 +1815,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1702,11 +1844,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamHCardio2HOA1.cpp b/source/HOAUGens/HOABeamHCardio2HOA1.cpp index 82c6836995..974d118292 100644 --- a/source/HOAUGens/HOABeamHCardio2HOA1.cpp +++ b/source/HOAUGens/HOABeamHCardio2HOA1.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamHCardio2HOA1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,11 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include +#include -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -612,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -619,7 +638,39 @@ class mydsp : public dsp { FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; + double fConst0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; FAUSTFLOAT fHslider2; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; int fSamplingFreq; public: @@ -628,34 +679,34 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("cijk.lib/author", "Pierre Lecomte"); + m->declare("cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("cijk.lib/license", "GPL"); + m->declare("cijk.lib/name", "Cijk matrix"); + m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/author", "Pierre Lecomte"); - m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/license", "GPL"); - m->declare("lib/cijk.lib/name", "Cijk matrix"); - m->declare("lib/cijk.lib/version", "10"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamHCardio2HOA1"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -777,6 +828,38 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + fConst0 = double(tgamma(1.5)); + fConst1 = double(tgamma(1.0)); + fConst2 = sqrt((3.0 * (fConst1 / double(tgamma(3.0))))); + fConst3 = (fConst0 * fConst2); + fConst4 = (0.39894624032434478 * fConst3); + fConst5 = (0.17730759750868944 * fConst3); + fConst6 = (double(tgamma(2.5)) * sqrt((5.0 * (fConst1 / double(tgamma(5.0)))))); + fConst7 = (0.27467957472329729 * fConst6); + fConst8 = (0.17730759750868944 * fConst2); + fConst9 = sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))); + fConst10 = (0.41201936208494599 * fConst9); + fConst11 = (0.54935914944659459 * fConst6); + fConst12 = (fConst0 * fConst9); + fConst13 = (0.41201936208494599 * fConst12); + fConst14 = (0.30902256091651653 * fConst3); + fConst15 = (0.13734193310743828 * fConst3); + fConst16 = (0.70921930945587786 * fConst6); + fConst17 = (0.53191448209190839 * fConst12); + fConst18 = (0.17841434392041153 * fConst3); + fConst19 = (0.079294439912251033 * fConst3); + fConst20 = (0.13734193310743828 * fConst2); + fConst21 = (0.53191448209190839 * fConst9); + fConst22 = (0.35460965472793893 * fConst6); + fConst23 = (0.34821994335939616 * fConst12); + fConst24 = (0.46429325781252823 * fConst6); + fConst25 = (0.073411290721777919 * fConst6); + fConst26 = (0.44046721241618542 * fConst12); + fConst27 = (0.14682258144355584 * fConst6); + fConst28 = (0.26973011046743212 * fConst12); + fConst29 = (0.23214662890626411 * fConst6); + fConst30 = (0.56864069481277157 * fConst6); + fConst31 = (0.28432034740638579 * fConst6); } @@ -804,18 +887,18 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "3", ""); ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); ui_interface->closeBox(); @@ -846,95 +929,107 @@ class mydsp : public dsp { int iSlow0 = int(double(fHslider0)); int iSlow1 = (iSlow0 >= 2); int iSlow2 = (iSlow0 >= 1); - double fSlow3 = double(fHslider1); - double fSlow4 = sin(fSlow3); - double fSlow5 = double(fHslider2); - double fSlow6 = cos(fSlow5); - double fSlow7 = (fSlow4 * fSlow6); - double fSlow8 = sin(fSlow5); - double fSlow9 = cos(fSlow3); - double fSlow10 = (fSlow9 * fSlow6); - double fSlow11 = (0.43301700000000004 * fSlow7); - double fSlow12 = ((3.0 * mydsp_faustpower2_f(fSlow8)) + -1.0); - double fSlow13 = (0.055554711935999999 * fSlow12); - double fSlow14 = (2.0 * fSlow3); - double fSlow15 = cos(fSlow14); - double fSlow16 = mydsp_faustpower2_f(fSlow6); - double fSlow17 = (fSlow15 * fSlow16); - double fSlow18 = (0.16666405622891672 * fSlow17); - double fSlow19 = (0.11112 - (fSlow13 + fSlow18)); - double fSlow20 = (0.19245000000000004 * fSlow6); - double fSlow21 = sin((2.0 * fSlow5)); - double fSlow22 = (0.16666405622891672 * fSlow21); - double fSlow23 = sin(fSlow14); - double fSlow24 = (fSlow23 * fSlow16); - double fSlow25 = (0.16666405622891672 * fSlow24); - double fSlow26 = (0.43301700000000004 * fSlow8); - double fSlow27 = (0.19245000000000004 * fSlow8); - double fSlow28 = ((0.111109299648 * fSlow12) + 0.11112); - double fSlow29 = (0.43301700000000004 * fSlow10); - double fSlow30 = (0.19245000000000004 * fSlow9); - double fSlow31 = (fSlow23 * fSlow6); - double fSlow32 = (0.16666405622891672 * fSlow31); - double fSlow33 = (fSlow9 * fSlow21); - double fSlow34 = (0.16666405622891672 * fSlow33); - double fSlow35 = (fSlow18 + (0.11112 - fSlow13)); - double fSlow36 = (0.335413669149 * fSlow6); - double fSlow37 = (0.14907119265000002 * fSlow9); - double fSlow38 = (0.2151622795194362 * fSlow31); - double fSlow39 = (0.14907119265000002 * fSlow4); - double fSlow40 = (0.14907119265000002 * fSlow8); - double fSlow41 = (0.14907119265000002 * fSlow6); - double fSlow42 = (0.2151622795194362 * fSlow21); - double fSlow43 = (0.0 - (0.193651264638 * fSlow7)); - double fSlow44 = (0.38730209625899997 * fSlow8); - double fSlow45 = (0.0 - (0.193651264638 * fSlow10)); - double fSlow46 = (0.0 - (0.086066334300000019 * fSlow7)); - double fSlow47 = (0.124224 * fSlow12); - double fSlow48 = (0.17213247615000002 * fSlow8); - double fSlow49 = (0.0 - (0.086066334300000019 * fSlow10)); - double fSlow50 = (0.0 - (0.335413669149 * fSlow7)); - double fSlow51 = (0.335413669149 * fSlow10); - double fSlow52 = (0.0 - (0.14907119265000002 * fSlow7)); - double fSlow53 = (0.2151622795194362 * (fSlow15 * fSlow6)); - double fSlow54 = (0.17251367312221164 * fSlow16); - double fSlow55 = (fSlow4 * fSlow21); - double fSlow56 = (0.089085626687999991 * fSlow12); - double fSlow57 = (0.044542895106113686 * fSlow17); - double fSlow58 = (fSlow56 + fSlow57); - double fSlow59 = (0.1781713652621752 * fSlow55); - double fSlow60 = (0.0 - (0.044542895106113686 * fSlow24)); - double fSlow61 = (0.0 - (0.10910728580834947 * fSlow55)); - double fSlow62 = (0.10910718143999999 * fSlow12); - double fSlow63 = (0.0 - (0.10910728580834947 * fSlow33)); - double fSlow64 = (0.1781713652621752 * fSlow33); - double fSlow65 = (fSlow56 - fSlow57); - double fSlow66 = (0.0 - (0.14085684693651698 * fSlow55)); - double fSlow67 = (0.0 - (0.17251367312221164 * fSlow24)); - double fSlow68 = (0.17251367312221164 * fSlow17); + double fSlow3 = sin(double(fHslider1)); + double fSlow4 = (0.43301700000000004 * fSlow3); + double fSlow5 = mydsp_faustpower2_f(fSlow3); + double fSlow6 = (1.0 - fSlow5); + double fSlow7 = pow(fSlow6, 0.5); + double fSlow8 = (fConst4 * fSlow7); + double fSlow9 = double(fHslider2); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (0.19245000000000004 * fSlow3); + double fSlow13 = (fConst5 * fSlow7); + double fSlow14 = (fSlow7 * fSlow10); + double fSlow15 = (fConst4 * fSlow14); + double fSlow16 = ((3.0 * fSlow5) + -1.0); + double fSlow17 = (0.055554711935999999 * fSlow16); + double fSlow18 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); + double fSlow19 = (fSlow18 * fSlow6); + double fSlow20 = (fConst7 * fSlow19); + double fSlow21 = (0.11112 - (fSlow17 + fSlow20)); + double fSlow22 = (fConst0 * fSlow7); + double fSlow23 = (fConst10 * fSlow3); + double fSlow24 = (fSlow11 * fSlow6); + double fSlow25 = (fConst11 * fSlow24); + double fSlow26 = ((0.111109299648 * fSlow16) + 0.11112); + double fSlow27 = (fConst13 * fSlow14); + double fSlow28 = (fSlow11 * fSlow7); + double fSlow29 = (fConst13 * fSlow28); + double fSlow30 = (fConst4 * fSlow28); + double fSlow31 = (fSlow6 * fSlow10); + double fSlow32 = (fConst11 * fSlow31); + double fSlow33 = (fSlow3 * fSlow7); + double fSlow34 = (fConst13 * fSlow33); + double fSlow35 = (fSlow20 + (0.11112 - fSlow17)); + double fSlow36 = (fConst14 * fSlow7); + double fSlow37 = (fConst15 * fSlow7); + double fSlow38 = (fConst16 * fSlow31); + double fSlow39 = (fConst15 * fSlow14); + double fSlow40 = (0.335413669149 * fSlow3); + double fSlow41 = (fConst14 * fSlow14); + double fSlow42 = (fConst17 * fSlow14); + double fSlow43 = (0.0 - (fConst18 * fSlow14)); + double fSlow44 = (0.38730209625899997 * fSlow3); + double fSlow45 = (0.0 - (fConst18 * fSlow28)); + double fSlow46 = (0.0 - (fConst19 * fSlow14)); + double fSlow47 = (0.124224 * fSlow16); + double fSlow48 = (0.17213247615000002 * fSlow3); + double fSlow49 = (0.0 - (fConst19 * fSlow28)); + double fSlow50 = (fConst14 * fSlow28); + double fSlow51 = (fConst0 * fSlow28); + double fSlow52 = (fConst21 * fSlow3); + double fSlow53 = (0.14907119265000002 * fSlow3); + double fSlow54 = (0.0 - fSlow41); + double fSlow55 = (0.0 - fSlow39); + double fSlow56 = (fConst22 * fSlow19); + double fSlow57 = (fConst15 * fSlow28); + double fSlow58 = (fConst6 * fSlow6); + double fSlow59 = (0.56864069481277157 * (fSlow11 * fSlow10)); + double fSlow60 = (0.28432034740638579 * fSlow18); + double fSlow61 = (fConst23 * fSlow33); + double fSlow62 = (fConst24 * fSlow31); + double fSlow63 = (fSlow33 * fSlow10); + double fSlow64 = (fConst23 * fSlow63); + double fSlow65 = (0.089085626687999991 * fSlow16); + double fSlow66 = (fConst25 * fSlow19); + double fSlow67 = (fSlow65 + fSlow66); + double fSlow68 = (fConst26 * fSlow63); + double fSlow69 = (fSlow24 * fSlow10); + double fSlow70 = (0.0 - (fConst27 * fSlow69)); + double fSlow71 = (0.0 - (fConst28 * fSlow63)); + double fSlow72 = (0.10910718143999999 * fSlow16); + double fSlow73 = ((fSlow11 * fSlow3) * fSlow7); + double fSlow74 = (0.0 - (fConst28 * fSlow73)); + double fSlow75 = (fConst26 * fSlow73); + double fSlow76 = (fSlow65 - fSlow66); + double fSlow77 = (fConst29 * fSlow19); + double fSlow78 = (0.0 - fSlow64); + double fSlow79 = (fConst23 * fSlow73); + double fSlow80 = (0.0 - (fConst30 * fSlow69)); + double fSlow81 = (fConst31 * fSlow19); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); - double fTemp1 = double(input1[i]); - double fTemp2 = double(input2[i]); + double fTemp1 = double(input2[i]); + double fTemp2 = double(input1[i]); double fTemp3 = double(input3[i]); - double fTemp4 = (((fSlow7 * fTemp1) + (fSlow8 * fTemp2)) + (fSlow10 * fTemp3)); - output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + (0.19245000000000004 * fTemp4)):(iSlow2?((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4)):fTemp0))); - output1[i] = FAUSTFLOAT((iSlow1?(((fSlow19 * fTemp1) + (fSlow4 * ((fSlow20 * fTemp0) + (fSlow22 * fTemp2)))) + (fSlow25 * fTemp3)):(iSlow2?((fSlow11 * fTemp0) + (0.24993000000000001 * fTemp1)):fTemp1))); - output2[i] = FAUSTFLOAT((iSlow1?((fSlow22 * ((fSlow4 * fTemp1) + (fSlow9 * fTemp3))) + ((fSlow27 * fTemp0) + (fSlow28 * fTemp2))):(iSlow2?((fSlow26 * fTemp0) + (0.24993000000000001 * fTemp2)):fTemp2))); - output3[i] = FAUSTFLOAT((iSlow1?(((fSlow6 * ((fSlow30 * fTemp0) + (fSlow32 * fTemp1))) + (fSlow34 * fTemp2)) + (fSlow35 * fTemp3)):(iSlow2?((fSlow29 * fTemp0) + (0.24993000000000001 * fTemp3)):fTemp3))); - output4[i] = FAUSTFLOAT((iSlow1?(fSlow6 * (((fSlow37 * fTemp1) + (fSlow38 * fTemp0)) + (fSlow39 * fTemp3))):(iSlow2?(fSlow36 * ((fSlow9 * fTemp1) + (fSlow4 * fTemp3))):0.0))); - double fTemp5 = ((fSlow41 * fTemp2) + (fSlow42 * fTemp0)); - output5[i] = FAUSTFLOAT((iSlow1?((fSlow40 * fTemp1) + (fSlow4 * fTemp5)):(iSlow2?(0.335413669149 * ((fSlow8 * fTemp1) + (fSlow7 * fTemp2))):0.0))); - output6[i] = FAUSTFLOAT((iSlow1?(((fSlow46 * fTemp1) + ((fSlow47 * fTemp0) + (fSlow48 * fTemp2))) + (fSlow49 * fTemp3)):(iSlow2?(((fSlow43 * fTemp1) + (fSlow44 * fTemp2)) + (fSlow45 * fTemp3)):0.0))); - output7[i] = FAUSTFLOAT((iSlow1?((fSlow9 * fTemp5) + (fSlow40 * fTemp3)):(iSlow2?(0.335413669149 * ((fSlow10 * fTemp2) + (fSlow8 * fTemp3))):0.0))); - output8[i] = FAUSTFLOAT((iSlow1?((fSlow52 * fTemp1) + (fSlow6 * ((fSlow37 * fTemp3) + (fSlow53 * fTemp0)))):(iSlow2?((fSlow50 * fTemp1) + (fSlow51 * fTemp3)):0.0))); - output9[i] = FAUSTFLOAT((iSlow1?(fSlow54 * ((fSlow23 * fTemp3) + (fSlow15 * fTemp1))):0.0)); - output10[i] = FAUSTFLOAT((iSlow1?(0.14085684693651698 * (((fSlow33 * fTemp1) + (fSlow24 * fTemp2)) + (fSlow55 * fTemp3))):0.0)); - output11[i] = FAUSTFLOAT((iSlow1?(((fSlow58 * fTemp1) + (fSlow59 * fTemp2)) + (fSlow60 * fTemp3)):0.0)); - output12[i] = FAUSTFLOAT((iSlow1?(((fSlow61 * fTemp1) + (fSlow62 * fTemp2)) + (fSlow63 * fTemp3)):0.0)); - output13[i] = FAUSTFLOAT((iSlow1?(((fSlow60 * fTemp1) + (fSlow64 * fTemp2)) + (fSlow65 * fTemp3)):0.0)); - output14[i] = FAUSTFLOAT((iSlow1?((fSlow66 * fTemp1) + (0.14085684693651698 * ((fSlow33 * fTemp3) + (fSlow17 * fTemp2)))):0.0)); - output15[i] = FAUSTFLOAT((iSlow1?((fSlow67 * fTemp1) + (fSlow68 * fTemp3)):0.0)); + double fTemp4 = ((fSlow10 * fTemp2) + (fSlow11 * fTemp3)); + output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + ((fSlow12 * fTemp1) + (fSlow13 * fTemp4))):(iSlow2?((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))):fTemp0))); + output1[i] = FAUSTFLOAT((iSlow1?((fSlow21 * fTemp2) + (fSlow10 * ((fSlow22 * ((fConst8 * fTemp0) + (fSlow23 * fTemp1))) + (fSlow25 * fTemp3)))):(iSlow2?((fSlow15 * fTemp0) + (0.24993000000000001 * fTemp2)):fTemp2))); + output2[i] = FAUSTFLOAT((iSlow1?((fSlow26 * fTemp1) + (fSlow3 * (((fSlow27 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow29 * fTemp3)))):(iSlow2?((fSlow4 * fTemp0) + (0.24993000000000001 * fTemp1)):fTemp1))); + output3[i] = FAUSTFLOAT((iSlow1?((fSlow11 * (((fSlow13 * fTemp0) + (fSlow32 * fTemp2)) + (fSlow34 * fTemp1))) + (fSlow35 * fTemp3)):(iSlow2?((fSlow30 * fTemp0) + (0.24993000000000001 * fTemp3)):fTemp3))); + output4[i] = FAUSTFLOAT((iSlow1?((fSlow11 * ((fSlow37 * fTemp2) + (fSlow38 * fTemp0))) + (fSlow39 * fTemp3)):(iSlow2?(fSlow36 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3))):0.0))); + output5[i] = FAUSTFLOAT((iSlow1?((fSlow3 * ((fSlow42 * fTemp0) + (0.14907119265000002 * fTemp2))) + (fSlow39 * fTemp1)):(iSlow2?((fSlow40 * fTemp2) + (fSlow41 * fTemp1)):0.0))); + output6[i] = FAUSTFLOAT((iSlow1?(((fSlow46 * fTemp2) + ((fSlow47 * fTemp0) + (fSlow48 * fTemp1))) + (fSlow49 * fTemp3)):(iSlow2?(((fSlow43 * fTemp2) + (fSlow44 * fTemp1)) + (fSlow45 * fTemp3)):0.0))); + output7[i] = FAUSTFLOAT((iSlow1?((fSlow51 * ((fConst20 * fTemp1) + (fSlow52 * fTemp0))) + (fSlow53 * fTemp3)):(iSlow2?((fSlow50 * fTemp1) + (fSlow40 * fTemp3)):0.0))); + output8[i] = FAUSTFLOAT((iSlow1?((fSlow55 * fTemp2) + ((fSlow56 * fTemp0) + (fSlow57 * fTemp3))):(iSlow2?((fSlow54 * fTemp2) + (fSlow50 * fTemp3)):0.0))); + output9[i] = FAUSTFLOAT((iSlow1?(fSlow58 * ((fSlow59 * fTemp3) + (fSlow60 * fTemp2))):0.0)); + output10[i] = FAUSTFLOAT((iSlow1?((fSlow11 * ((fSlow61 * fTemp2) + (fSlow62 * fTemp1))) + (fSlow64 * fTemp3)):0.0)); + output11[i] = FAUSTFLOAT((iSlow1?(((fSlow67 * fTemp2) + (fSlow68 * fTemp1)) + (fSlow70 * fTemp3)):0.0)); + output12[i] = FAUSTFLOAT((iSlow1?(((fSlow71 * fTemp2) + (fSlow72 * fTemp1)) + (fSlow74 * fTemp3)):0.0)); + output13[i] = FAUSTFLOAT((iSlow1?(((fSlow70 * fTemp2) + (fSlow75 * fTemp1)) + (fSlow76 * fTemp3)):0.0)); + output14[i] = FAUSTFLOAT((iSlow1?((fSlow77 * fTemp1) + ((fSlow78 * fTemp2) + (fSlow79 * fTemp3))):0.0)); + output15[i] = FAUSTFLOAT((iSlow1?((fSlow80 * fTemp2) + (fSlow81 * fTemp3)):0.0)); } @@ -943,7 +1038,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1175,7 +1269,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1238,7 +1332,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1267,11 +1361,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamHCardio2HOA2.cpp b/source/HOAUGens/HOABeamHCardio2HOA2.cpp index 1a17b630a7..b4968db10a 100644 --- a/source/HOAUGens/HOABeamHCardio2HOA2.cpp +++ b/source/HOAUGens/HOABeamHCardio2HOA2.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamHCardio2HOA2" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,11 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include +#include -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -612,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -619,7 +638,71 @@ class mydsp : public dsp { FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; + double fConst0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; FAUSTFLOAT fHslider2; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; int fSamplingFreq; public: @@ -628,34 +711,34 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("cijk.lib/author", "Pierre Lecomte"); + m->declare("cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("cijk.lib/license", "GPL"); + m->declare("cijk.lib/name", "Cijk matrix"); + m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/author", "Pierre Lecomte"); - m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/license", "GPL"); - m->declare("lib/cijk.lib/name", "Cijk matrix"); - m->declare("lib/cijk.lib/version", "10"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamHCardio2HOA2"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -833,6 +916,70 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + fConst0 = double(tgamma(1.5)); + fConst1 = double(tgamma(1.0)); + fConst2 = sqrt((3.0 * (fConst1 / double(tgamma(3.0))))); + fConst3 = (fConst0 * fConst2); + fConst4 = (0.39894624032434478 * fConst3); + fConst5 = (double(tgamma(2.5)) * sqrt((5.0 * (fConst1 / double(tgamma(5.0)))))); + fConst6 = (0.17730759750868944 * fConst2); + fConst7 = sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))); + fConst8 = (0.53191448209190839 * fConst7); + fConst9 = (0.17841434392041153 * fConst3); + fConst10 = (0.30902256091651653 * fConst3); + fConst11 = (0.41201936208494599 * fConst7); + fConst12 = (0.54935914944659459 * fConst5); + fConst13 = (0.27467957472329729 * fConst5); + fConst14 = (0.13734193310743828 * fConst3); + fConst15 = (0.079294439912251033 * fConst3); + fConst16 = (fConst0 * fConst7); + fConst17 = (0.41201936208494599 * fConst16); + fConst18 = (0.17730759750868944 * fConst3); + fConst19 = (0.13734193310743828 * fConst2); + fConst20 = (0.29429924039525734 * fConst7); + fConst21 = (0.70921930945587786 * fConst5); + fConst22 = (0.45310390476724288 * fConst5); + fConst23 = (0.16991369833047504 * fConst7); + fConst24 = (0.53191448209190839 * fConst16); + fConst25 = (0.19619949359683822 * fConst5); + fConst26 = (0.39239898719367644 * fConst5); + fConst27 = (0.29429924039525734 * fConst16); + fConst28 = (0.16991369833047504 * fConst16); + fConst29 = (0.22655195238362144 * fConst5); + fConst30 = (0.35460965472793893 * fConst5); + fConst31 = (0.31986871235221448 * fConst3); + fConst32 = (0.14216239476090706 * fConst3); + fConst33 = (0.26117175201329362 * fConst3); + fConst34 = (0.34821994335939616 * fConst16); + fConst35 = (0.46429325781252823 * fConst5); + fConst36 = (0.11607512793945357 * fConst3); + fConst37 = (0.082589850671945866 * fConst3); + fConst38 = (0.44046721241618542 * fConst16); + fConst39 = (0.036706218836248881 * fConst3); + fConst40 = (0.073411290721777919 * fConst5); + fConst41 = (0.14682258144355584 * fConst5); + fConst42 = (0.20230284584479297 * fConst3); + fConst43 = (0.089911441543473844 * fConst3); + fConst44 = (0.26973011046743212 * fConst16); + fConst45 = (0.28609910994747967 * fConst3); + fConst46 = (0.44046721241618542 * fConst7); + fConst47 = (0.127153838554589 * fConst2); + fConst48 = (0.11607512793945357 * fConst2); + fConst49 = (0.34821994335939616 * fConst7); + fConst50 = (0.23214662890626411 * fConst5); + fConst51 = (0.28432034740638579 * fConst5); + fConst52 = (0.56864069481277157 * fConst5); + fConst53 = (0.31787954130087376 * fConst16); + fConst54 = (0.3398279285754322 * fConst16); + fConst55 = (0.12014724747147398 * fConst16); + fConst56 = (0.080098164980982656 * fConst5); + fConst57 = (0.16019632996196531 * fConst5); + fConst58 = (0.30395136058729716 * fConst16); + fConst59 = (0.41620233757211678 * fConst16); + fConst60 = (0.21191969420058249 * fConst5); + fConst61 = (0.42383938840116497 * fConst5); + fConst62 = (0.59939953626387299 * fConst5); + fConst63 = (0.29969976813193649 * fConst5); } @@ -860,18 +1007,18 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "3", ""); ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); ui_interface->closeBox(); @@ -916,174 +1063,209 @@ class mydsp : public dsp { int iSlow0 = int(double(fHslider0)); int iSlow1 = (iSlow0 >= 2); int iSlow2 = (iSlow0 >= 1); - double fSlow3 = double(fHslider1); - double fSlow4 = sin(fSlow3); - double fSlow5 = double(fHslider2); - double fSlow6 = cos(fSlow5); - double fSlow7 = (fSlow4 * fSlow6); - double fSlow8 = sin(fSlow5); - double fSlow9 = cos(fSlow3); - double fSlow10 = (fSlow9 * fSlow6); - double fSlow11 = ((3.0 * mydsp_faustpower2_f(fSlow8)) + -1.0); - double fSlow12 = (0.124224 * fSlow11); - double fSlow13 = (2.0 * fSlow3); - double fSlow14 = sin(fSlow13); - double fSlow15 = mydsp_faustpower2_f(fSlow6); - double fSlow16 = (fSlow14 * fSlow15); - double fSlow17 = sin((2.0 * fSlow5)); - double fSlow18 = (fSlow4 * fSlow17); - double fSlow19 = (fSlow9 * fSlow17); - double fSlow20 = cos(fSlow13); - double fSlow21 = (fSlow20 * fSlow15); - double fSlow22 = (0.43301700000000004 * fSlow4); - double fSlow23 = (0.335413669149 * fSlow9); - double fSlow24 = (0.335413669149 * fSlow8); - double fSlow25 = (0.0 - (0.193651264638 * fSlow7)); - double fSlow26 = (0.0 - (0.335413669149 * fSlow7)); - double fSlow27 = (0.14907119265000002 * fSlow9); - double fSlow28 = (fSlow14 * fSlow6); - double fSlow29 = (0.16666405622891672 * fSlow28); - double fSlow30 = (0.19245000000000004 * fSlow6); - double fSlow31 = (0.16666405622891672 * fSlow17); - double fSlow32 = (0.055554711935999999 * fSlow11); - double fSlow33 = (0.16666405622891672 * fSlow21); - double fSlow34 = (0.11112 - (fSlow32 + fSlow33)); - double fSlow35 = (0.14907119265000002 * fSlow8); - double fSlow36 = (0.0 - (0.086066334300000019 * fSlow7)); - double fSlow37 = (0.0 - (0.14907119265000002 * fSlow7)); - double fSlow38 = (0.335413669149 * fSlow6); - double fSlow39 = ((0.111109299648 * fSlow11) + 0.11112); - double fSlow40 = (0.14907119265000002 * fSlow6); - double fSlow41 = (0.43301700000000004 * fSlow9); - double fSlow42 = (0.335413669149 * fSlow4); - double fSlow43 = (0.0 - (0.193651264638 * fSlow10)); - double fSlow44 = (0.0 - (0.086066334300000019 * fSlow10)); - double fSlow45 = (0.19245000000000004 * fSlow9); - double fSlow46 = (0.14907119265000002 * fSlow4); - double fSlow47 = (fSlow33 + (0.11112 - fSlow32)); - double fSlow48 = (0.11904563149935221 * fSlow17); - double fSlow49 = (0.2151622795194362 * fSlow28); - double fSlow50 = (0.079363856447999995 * fSlow11); - double fSlow51 = (0.11112 - fSlow50); - double fSlow52 = (0.0 - (0.13746223165253885 * fSlow16)); - double fSlow53 = (0.2151622795194362 * fSlow17); - double fSlow54 = (0.068731008245129663 * fSlow17); - double fSlow55 = (0.039681866111999996 * fSlow11); - double fSlow56 = (0.11904563149935221 * fSlow21); - double fSlow57 = (fSlow55 + (0.11112 - fSlow56)); - double fSlow58 = (0.0 - (0.11904563149935221 * fSlow18)); - double fSlow59 = (0.38730209625899997 * fSlow8); - double fSlow60 = (0.17213247615000002 * fSlow8); - double fSlow61 = (fSlow50 + 0.11112); - double fSlow62 = (0.0 - (0.13746223165253885 * fSlow21)); - double fSlow63 = ((fSlow55 + fSlow56) + 0.11112); - double fSlow64 = (0.335413669149 * fSlow10); - double fSlow65 = (fSlow20 * fSlow6); - double fSlow66 = (0.2151622795194362 * fSlow65); - double fSlow67 = (0.11904563149935221 * fSlow19); - double fSlow68 = (0.34718610232800001 * fSlow6); - double fSlow69 = (0.15430333080000003 * fSlow9); - double fSlow70 = (0.17251367312221164 * fSlow6); - double fSlow71 = (0.15430333080000003 * fSlow4); - double fSlow72 = (0.0 - (0.089643179340000004 * fSlow10)); - double fSlow73 = (0.35857228434300004 * fSlow8); - double fSlow74 = (0.0 - (0.039840999000000009 * fSlow10)); - double fSlow75 = (0.0 - (0.044542895106113686 * fSlow16)); - double fSlow76 = (0.089085626687999991 * fSlow11); - double fSlow77 = (0.044542895106113686 * fSlow21); - double fSlow78 = (fSlow76 + fSlow77); - double fSlow79 = (0.15936380355000002 * fSlow8); - double fSlow80 = (0.1781713652621752 * fSlow17); - double fSlow81 = (0.13801301565000001 * fSlow6); - double fSlow82 = (0.039840999000000009 * fSlow6); - double fSlow83 = (0.0 - (0.219579889581 * fSlow7)); - double fSlow84 = (0.38032316126999999 * fSlow8); - double fSlow85 = (0.0 - (0.219579889581 * fSlow10)); - double fSlow86 = (0.0 - (0.097590047850000028 * fSlow7)); - double fSlow87 = (0.0 - (0.10910728580834947 * fSlow19)); - double fSlow88 = (0.10910718143999999 * fSlow11); - double fSlow89 = (0.0 - (0.10910728580834947 * fSlow18)); - double fSlow90 = (0.16903075950000004 * fSlow8); - double fSlow91 = (0.0 - (0.097590047850000028 * fSlow10)); - double fSlow92 = (0.31053251232900003 * fSlow10); - double fSlow93 = (0.0 - (0.089643179340000004 * fSlow7)); - double fSlow94 = (0.0 - (0.039840999000000009 * fSlow7)); - double fSlow95 = (fSlow76 - fSlow77); - double fSlow96 = (0.0 - (0.28347631111800004 * fSlow7)); - double fSlow97 = (0.0 - (0.12598816230000001 * fSlow7)); - double fSlow98 = (0.0 - (0.14085684693651698 * fSlow18)); - double fSlow99 = (0.0 - (0.34718610232800001 * fSlow7)); - double fSlow100 = (0.34718610232800001 * fSlow10); - double fSlow101 = (0.17251367312221164 * fSlow65); - double fSlow102 = (0.0 - (0.17251367312221164 * fSlow16)); - double fSlow103 = (0.0 - (0.15430333080000003 * fSlow7)); - double fSlow104 = (0.18184526118496958 * fSlow15); - double fSlow105 = (0.11904563149935221 * fSlow16); - double fSlow106 = (0.068731027392000002 * fSlow11); - double fSlow107 = (0.13746223165253885 * fSlow17); - double fSlow108 = (0.0 - (0.048600210211011685 * fSlow19)); - double fSlow109 = (0.097200435264000004 * fSlow11); - double fSlow110 = (0.048600210211011685 * fSlow21); - double fSlow111 = (fSlow109 + fSlow110); - double fSlow112 = (0.0 - (0.048600210211011685 * fSlow16)); - double fSlow113 = (0.030737437765308104 * fSlow15); - double fSlow114 = (0.0 - (0.12294996622351191 * fSlow19)); - double fSlow115 = (0.0 - (0.12294996622351191 * fSlow18)); - double fSlow116 = (0.10647773203199999 * fSlow11); - double fSlow117 = (0.0 - (0.048600210211011685 * fSlow18)); - double fSlow118 = (0.16835609239505758 * fSlow19); - double fSlow119 = (fSlow109 - fSlow110); - double fSlow120 = (0.0 - (0.13746223165253885 * fSlow18)); - double fSlow121 = (0.13746223165253885 * fSlow19); - double fSlow122 = (0.0 - (0.12858399051272834 * fSlow18)); - double fSlow123 = (0.0 - (0.12858399051272834 * fSlow16)); - double fSlow124 = (0.0 - (0.18184526118496958 * fSlow16)); - double fSlow125 = (0.18184526118496958 * fSlow21); + double fSlow3 = sin(double(fHslider1)); + double fSlow4 = (0.43301700000000004 * fSlow3); + double fSlow5 = mydsp_faustpower2_f(fSlow3); + double fSlow6 = (1.0 - fSlow5); + double fSlow7 = pow(fSlow6, 0.5); + double fSlow8 = (fConst4 * fSlow7); + double fSlow9 = double(fHslider2); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (fConst5 * fSlow6); + double fSlow13 = (fSlow11 * fSlow10); + double fSlow14 = (0.70921930945587786 * fSlow13); + double fSlow15 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); + double fSlow16 = (0.35460965472793893 * fSlow15); + double fSlow17 = (fConst0 * fSlow7); + double fSlow18 = (fSlow3 * fSlow10); + double fSlow19 = (fConst8 * fSlow18); + double fSlow20 = (fSlow11 * fSlow3); + double fSlow21 = (fConst8 * fSlow20); + double fSlow22 = (0.19245000000000004 * fSlow3); + double fSlow23 = ((3.0 * fSlow5) + -1.0); + double fSlow24 = (0.124224 * fSlow23); + double fSlow25 = (fConst3 * fSlow7); + double fSlow26 = (0.39894624032434478 * fSlow10); + double fSlow27 = (0.30902256091651653 * fSlow11); + double fSlow28 = (0.335413669149 * fSlow3); + double fSlow29 = (fSlow7 * fSlow10); + double fSlow30 = (0.0 - (fConst9 * fSlow29)); + double fSlow31 = (fConst10 * fSlow29); + double fSlow32 = (0.0 - fSlow31); + double fSlow33 = (fConst11 * fSlow3); + double fSlow34 = (fSlow11 * fSlow6); + double fSlow35 = (fConst12 * fSlow34); + double fSlow36 = (0.055554711935999999 * fSlow23); + double fSlow37 = (fSlow15 * fSlow6); + double fSlow38 = (fConst13 * fSlow37); + double fSlow39 = (0.11112 - (fSlow36 + fSlow38)); + double fSlow40 = (fSlow11 * fSlow7); + double fSlow41 = (fConst14 * fSlow40); + double fSlow42 = (0.14907119265000002 * fSlow3); + double fSlow43 = (0.0 - (fConst15 * fSlow29)); + double fSlow44 = (0.0 - (fConst14 * fSlow29)); + double fSlow45 = (fConst10 * fSlow7); + double fSlow46 = (fConst17 * fSlow29); + double fSlow47 = (fConst17 * fSlow40); + double fSlow48 = ((0.111109299648 * fSlow23) + 0.11112); + double fSlow49 = (fConst14 * fSlow7); + double fSlow50 = (0.39894624032434478 * fSlow11); + double fSlow51 = (0.30902256091651653 * fSlow10); + double fSlow52 = (0.0 - (fConst9 * fSlow40)); + double fSlow53 = (0.0 - (fConst15 * fSlow40)); + double fSlow54 = (fSlow38 + (0.11112 - fSlow36)); + double fSlow55 = (fConst18 * fSlow7); + double fSlow56 = (fSlow6 * fSlow10); + double fSlow57 = (fConst12 * fSlow56); + double fSlow58 = (fSlow3 * fSlow7); + double fSlow59 = (fConst17 * fSlow58); + double fSlow60 = (fConst19 * fSlow10); + double fSlow61 = (fConst20 * fSlow20); + double fSlow62 = (fConst20 * fSlow18); + double fSlow63 = (fConst21 * fSlow56); + double fSlow64 = (0.079363856447999995 * fSlow23); + double fSlow65 = (0.11112 - fSlow64); + double fSlow66 = (fSlow34 * fSlow10); + double fSlow67 = (0.0 - (fConst22 * fSlow66)); + double fSlow68 = (fConst23 * fSlow18); + double fSlow69 = (fConst24 * fSlow29); + double fSlow70 = (0.039681866111999996 * fSlow23); + double fSlow71 = (fConst25 * fSlow37); + double fSlow72 = (fSlow70 + (0.11112 - fSlow71)); + double fSlow73 = (fConst26 * fSlow66); + double fSlow74 = (fSlow58 * fSlow10); + double fSlow75 = (0.0 - (fConst27 * fSlow74)); + double fSlow76 = (0.38730209625899997 * fSlow3); + double fSlow77 = (fConst28 * fSlow29); + double fSlow78 = (fConst28 * fSlow40); + double fSlow79 = (fSlow64 + 0.11112); + double fSlow80 = (0.0 - (fConst29 * fSlow37)); + double fSlow81 = (fConst10 * fSlow40); + double fSlow82 = (fConst8 * fSlow3); + double fSlow83 = (fConst23 * fSlow20); + double fSlow84 = ((fSlow70 + fSlow71) + 0.11112); + double fSlow85 = (fConst0 * fSlow40); + double fSlow86 = (fConst20 * fSlow3); + double fSlow87 = (fConst30 * fSlow37); + double fSlow88 = (fConst31 * fSlow7); + double fSlow89 = (0.56864069481277157 * fSlow13); + double fSlow90 = (0.28432034740638579 * fSlow15); + double fSlow91 = (fConst32 * fSlow7); + double fSlow92 = (0.28347631111800004 * fSlow3); + double fSlow93 = (fConst33 * fSlow7); + double fSlow94 = (fConst34 * fSlow58); + double fSlow95 = (fConst35 * fSlow56); + double fSlow96 = (fConst36 * fSlow7); + double fSlow97 = (fConst34 * fSlow29); + double fSlow98 = (fConst36 * fSlow29); + double fSlow99 = (0.0 - (fConst37 * fSlow40)); + double fSlow100 = (0.35857228434300004 * fSlow3); + double fSlow101 = (fConst3 * fSlow29); + double fSlow102 = (fConst38 * fSlow29); + double fSlow103 = (0.0 - (fConst39 * fSlow40)); + double fSlow104 = (0.089085626687999991 * fSlow23); + double fSlow105 = (fConst40 * fSlow37); + double fSlow106 = (fSlow104 + fSlow105); + double fSlow107 = (0.0 - (fConst41 * fSlow66)); + double fSlow108 = (0.0 - (fConst42 * fSlow29)); + double fSlow109 = (0.38032316126999999 * fSlow3); + double fSlow110 = (0.0 - (fConst42 * fSlow40)); + double fSlow111 = (0.0 - (fConst43 * fSlow29)); + double fSlow112 = (fSlow20 * fSlow7); + double fSlow113 = (0.0 - (fConst44 * fSlow112)); + double fSlow114 = (0.10910718143999999 * fSlow23); + double fSlow115 = (0.0 - (fConst44 * fSlow74)); + double fSlow116 = (0.16903075950000004 * fSlow3); + double fSlow117 = (0.0 - (fConst43 * fSlow40)); + double fSlow118 = (fConst45 * fSlow40); + double fSlow119 = (0.0 - (fConst37 * fSlow29)); + double fSlow120 = (fConst46 * fSlow3); + double fSlow121 = (0.0 - (fConst39 * fSlow29)); + double fSlow122 = (fSlow104 - fSlow105); + double fSlow123 = (0.15936380355000002 * fSlow3); + double fSlow124 = (0.0 - (fConst33 * fSlow29)); + double fSlow125 = (fConst33 * fSlow40); + double fSlow126 = (fConst49 * fSlow3); + double fSlow127 = (0.0 - fSlow98); + double fSlow128 = (fConst50 * fSlow37); + double fSlow129 = (0.0 - (fConst34 * fSlow74)); + double fSlow130 = (0.12598816230000001 * fSlow3); + double fSlow131 = (0.0 - (fConst31 * fSlow29)); + double fSlow132 = (fConst31 * fSlow40); + double fSlow133 = (0.0 - (fConst32 * fSlow29)); + double fSlow134 = (fConst51 * fSlow37); + double fSlow135 = (0.0 - (fConst52 * fSlow66)); + double fSlow136 = (fConst32 * fSlow40); + double fSlow137 = (0.29969976813193649 * fSlow15); + double fSlow138 = (0.59939953626387299 * fSlow13); + double fSlow139 = (0.42383938840116497 * fSlow13); + double fSlow140 = (0.21191969420058249 * fSlow15); + double fSlow141 = (fConst53 * fSlow58); + double fSlow142 = (fConst54 * fSlow58); + double fSlow143 = (fConst26 * fSlow56); + double fSlow144 = (0.068731027392000002 * fSlow23); + double fSlow145 = (fConst54 * fSlow74); + double fSlow146 = (fConst16 * fSlow74); + double fSlow147 = (0.0 - (fConst55 * fSlow112)); + double fSlow148 = (0.097200435264000004 * fSlow23); + double fSlow149 = (fConst56 * fSlow37); + double fSlow150 = (fSlow148 + fSlow149); + double fSlow151 = (0.0 - (fConst57 * fSlow66)); + double fSlow152 = (0.10131694289093836 * fSlow13); + double fSlow153 = (0.050658471445469179 * fSlow15); + double fSlow154 = (0.0 - (fConst58 * fSlow112)); + double fSlow155 = (0.0 - (fConst58 * fSlow74)); + double fSlow156 = (0.10647773203199999 * fSlow23); + double fSlow157 = (0.0 - (fConst55 * fSlow74)); + double fSlow158 = (fConst59 * fSlow112); + double fSlow159 = (fSlow148 - fSlow149); + double fSlow160 = (0.0 - fSlow145); + double fSlow161 = (fConst54 * fSlow112); + double fSlow162 = (fConst60 * fSlow37); + double fSlow163 = (0.0 - (fConst61 * fSlow66)); + double fSlow164 = (0.0 - (fConst53 * fSlow74)); + double fSlow165 = (fConst53 * fSlow112); + double fSlow166 = (0.0 - (fConst62 * fSlow66)); + double fSlow167 = (fConst63 * fSlow37); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); - double fTemp1 = double(input1[i]); - double fTemp2 = double(input2[i]); + double fTemp1 = double(input2[i]); + double fTemp2 = double(input1[i]); double fTemp3 = double(input3[i]); - double fTemp4 = (((fSlow7 * fTemp1) + (fSlow8 * fTemp2)) + (fSlow10 * fTemp3)); - double fTemp5 = double(input6[i]); - double fTemp6 = double(input4[i]); + double fTemp4 = ((fSlow10 * fTemp2) + (fSlow11 * fTemp3)); + double fTemp5 = double(input4[i]); + double fTemp6 = double(input8[i]); double fTemp7 = double(input5[i]); double fTemp8 = double(input7[i]); - double fTemp9 = double(input8[i]); - output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + (((0.19245000000000004 * fTemp4) + (fSlow12 * fTemp5)) + (0.2151622795194362 * ((((fSlow16 * fTemp6) + (fSlow18 * fTemp7)) + (fSlow19 * fTemp8)) + (fSlow21 * fTemp9))))):(iSlow2?((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4)):fTemp0))); - double fTemp10 = (fSlow31 * fTemp2); - output1[i] = FAUSTFLOAT((iSlow1?((((fSlow6 * ((fSlow27 * fTemp6) + (fSlow29 * fTemp3))) + ((fSlow4 * ((fSlow30 * fTemp0) + fTemp10)) + ((fSlow34 * fTemp1) + (fSlow35 * fTemp7)))) + (fSlow36 * fTemp5)) + (fSlow37 * fTemp9)):(iSlow2?((0.24993000000000001 * fTemp1) + ((((fSlow6 * ((fSlow22 * fTemp0) + (fSlow23 * fTemp6))) + (fSlow24 * fTemp7)) + (fSlow25 * fTemp5)) + (fSlow26 * fTemp9))):fTemp1))); - double fTemp11 = ((fSlow4 * fTemp7) + (fSlow9 * fTemp8)); - output2[i] = FAUSTFLOAT((iSlow1?((fSlow8 * ((0.19245000000000004 * fTemp0) + (0.17213247615000002 * fTemp5))) + ((fSlow31 * ((fSlow4 * fTemp1) + (fSlow9 * fTemp3))) + ((fSlow39 * fTemp2) + (fSlow40 * fTemp11)))):(iSlow2?((0.24993000000000001 * fTemp2) + ((fSlow8 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp5))) + (fSlow38 * fTemp11))):fTemp2))); - output3[i] = FAUSTFLOAT((iSlow1?((fSlow9 * (fTemp10 + (fSlow40 * fTemp9))) + ((fSlow44 * fTemp5) + ((fSlow6 * (((fSlow45 * fTemp0) + (fSlow29 * fTemp1)) + (fSlow46 * fTemp6))) + ((fSlow47 * fTemp3) + (fSlow35 * fTemp8))))):(iSlow2?((0.24993000000000001 * fTemp3) + ((fSlow6 * (((fSlow41 * fTemp0) + (fSlow42 * fTemp6)) + (fSlow23 * fTemp9))) + ((fSlow43 * fTemp5) + (fSlow24 * fTemp8)))):fTemp3))); - double fTemp12 = ((fSlow9 * fTemp7) + (fSlow4 * fTemp8)); - output4[i] = FAUSTFLOAT((iSlow1?((fSlow48 * fTemp12) + (((fSlow6 * (((fSlow27 * fTemp1) + (fSlow49 * fTemp0)) + (fSlow46 * fTemp3))) + (fSlow51 * fTemp6)) + (fSlow52 * fTemp5))):(iSlow2?((fSlow38 * ((fSlow9 * fTemp1) + (fSlow4 * fTemp3))) + (0.24993000000000001 * fTemp6)):fTemp6))); - double fTemp13 = (fSlow19 * fTemp6); - double fTemp14 = (fSlow16 * fTemp8); - double fTemp15 = (((fSlow40 * fTemp2) + (fSlow53 * fTemp0)) + (fSlow54 * fTemp5)); - output5[i] = FAUSTFLOAT((iSlow1?(((0.11904563149935221 * (fTemp13 + fTemp14)) + ((fSlow4 * fTemp15) + ((fSlow35 * fTemp1) + (fSlow57 * fTemp7)))) + (fSlow58 * fTemp9)):(iSlow2?((0.335413669149 * ((fSlow8 * fTemp1) + (fSlow7 * fTemp2))) + (0.24993000000000001 * fTemp7)):fTemp7))); - output6[i] = FAUSTFLOAT((iSlow1?(((fSlow54 * fTemp11) + (((((fSlow36 * fTemp1) + ((fSlow12 * fTemp0) + (fSlow60 * fTemp2))) + (fSlow44 * fTemp3)) + (fSlow52 * fTemp6)) + (fSlow61 * fTemp5))) + (fSlow62 * fTemp9)):(iSlow2?((((fSlow25 * fTemp1) + (fSlow59 * fTemp2)) + (fSlow43 * fTemp3)) + (0.24993000000000001 * fTemp5)):fTemp5))); - output7[i] = FAUSTFLOAT((iSlow1?((fSlow9 * (fTemp15 + (fSlow48 * fTemp9))) + (((fSlow35 * fTemp3) + (0.11904563149935221 * ((fSlow18 * fTemp6) + (fSlow16 * fTemp7)))) + (fSlow63 * fTemp8))):(iSlow2?((0.335413669149 * ((fSlow10 * fTemp2) + (fSlow8 * fTemp3))) + (0.24993000000000001 * fTemp8)):fTemp8))); - output8[i] = FAUSTFLOAT((iSlow1?(((fSlow62 * fTemp5) + ((fSlow58 * fTemp7) + ((fSlow6 * ((fSlow27 * fTemp3) + (fSlow66 * fTemp0))) + ((fSlow37 * fTemp1) + (fSlow67 * fTemp8))))) + (fSlow51 * fTemp9)):(iSlow2?(((fSlow26 * fTemp1) + (fSlow64 * fTemp3)) + (0.24993000000000001 * fTemp9)):fTemp9))); - output9[i] = FAUSTFLOAT((iSlow1?(fSlow6 * (((fSlow69 * fTemp6) + (fSlow70 * ((fSlow14 * fTemp3) + (fSlow20 * fTemp1)))) + (fSlow71 * fTemp9))):(iSlow2?(fSlow68 * ((fSlow9 * fTemp6) + (fSlow4 * fTemp9))):0.0))); - double fTemp16 = (((fSlow8 * fTemp6) + (fSlow10 * fTemp7)) + (fSlow7 * fTemp8)); - output10[i] = FAUSTFLOAT((iSlow1?((0.14085684693651698 * (((fSlow19 * fTemp1) + (fSlow16 * fTemp2)) + (fSlow18 * fTemp3))) + (0.12598816230000001 * fTemp16)):(iSlow2?(0.28347631111800004 * fTemp16):0.0))); - double fTemp17 = ((fSlow80 * fTemp2) + (fSlow81 * fTemp5)); - output11[i] = FAUSTFLOAT((iSlow1?(((fSlow74 * fTemp6) + ((fSlow75 * fTemp3) + ((fSlow78 * fTemp1) + (fSlow79 * fTemp7)))) + (fSlow4 * (fTemp17 + (fSlow82 * fTemp9)))):(iSlow2?(((fSlow72 * fTemp6) + (fSlow73 * fTemp7)) + (fSlow7 * ((0.31053251232900003 * fTemp5) + (0.089643179340000004 * fTemp9)))):0.0))); - output12[i] = FAUSTFLOAT((iSlow1?(((fSlow86 * fTemp7) + ((fSlow87 * fTemp3) + ((fSlow88 * fTemp2) + ((fSlow89 * fTemp1) + (fSlow90 * fTemp5))))) + (fSlow91 * fTemp8)):(iSlow2?(((fSlow83 * fTemp7) + (fSlow84 * fTemp5)) + (fSlow85 * fTemp8)):0.0))); - output13[i] = FAUSTFLOAT((iSlow1?(((fSlow9 * fTemp17) + ((fSlow94 * fTemp6) + ((fSlow95 * fTemp3) + ((fSlow75 * fTemp1) + (fSlow79 * fTemp8))))) + (fSlow74 * fTemp9)):(iSlow2?(((fSlow92 * fTemp5) + ((fSlow93 * fTemp6) + (fSlow73 * fTemp8))) + (fSlow72 * fTemp9)):0.0))); - double fTemp18 = ((fSlow10 * fTemp8) + (fSlow8 * fTemp9)); - output14[i] = FAUSTFLOAT((iSlow1?((fSlow97 * fTemp7) + ((0.14085684693651698 * ((fSlow19 * fTemp3) + (fSlow21 * fTemp2))) + ((fSlow98 * fTemp1) + (0.12598816230000001 * fTemp18)))):(iSlow2?((fSlow96 * fTemp7) + (0.28347631111800004 * fTemp18)):0.0))); - output15[i] = FAUSTFLOAT((iSlow1?((fSlow6 * ((fSlow69 * fTemp9) + (fSlow101 * fTemp3))) + ((fSlow102 * fTemp1) + (fSlow103 * fTemp6))):(iSlow2?((fSlow99 * fTemp6) + (fSlow100 * fTemp9)):0.0))); - output16[i] = FAUSTFLOAT((iSlow1?(fSlow104 * ((fSlow20 * fTemp6) + (fSlow14 * fTemp9))):0.0)); - output17[i] = FAUSTFLOAT((iSlow1?(0.12858399051272834 * ((fTemp14 + (fTemp13 + (fSlow21 * fTemp7))) + (fSlow18 * fTemp9))):0.0)); - output18[i] = FAUSTFLOAT((iSlow1?((fSlow105 * fTemp5) + ((fSlow106 * fTemp6) + (fSlow107 * fTemp12))):0.0)); - output19[i] = FAUSTFLOAT((iSlow1?((fSlow18 * ((0.16835609239505758 * fTemp5) + (0.048600210211011685 * fTemp9))) + (((fSlow108 * fTemp6) + (fSlow111 * fTemp7)) + (fSlow112 * fTemp8))):0.0)); - output20[i] = FAUSTFLOAT((iSlow1?((fSlow113 * ((fSlow14 * fTemp6) + (fSlow20 * fTemp9))) + ((fSlow114 * fTemp8) + ((fSlow115 * fTemp7) + (fSlow116 * fTemp5)))):0.0)); - output21[i] = FAUSTFLOAT((iSlow1?((((fSlow112 * fTemp7) + ((fSlow117 * fTemp6) + (fSlow118 * fTemp5))) + (fSlow119 * fTemp8)) + (fSlow108 * fTemp9)):0.0)); - output22[i] = FAUSTFLOAT((iSlow1?(((fSlow56 * fTemp5) + ((fSlow120 * fTemp7) + (fSlow121 * fTemp8))) + (fSlow106 * fTemp9)):0.0)); - output23[i] = FAUSTFLOAT((iSlow1?(((fSlow122 * fTemp6) + (fSlow123 * fTemp7)) + (0.12858399051272834 * ((fSlow19 * fTemp9) + (fSlow21 * fTemp8)))):0.0)); - output24[i] = FAUSTFLOAT((iSlow1?((fSlow124 * fTemp6) + (fSlow125 * fTemp9)):0.0)); + double fTemp9 = double(input6[i]); + output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + ((fSlow12 * ((fSlow14 * fTemp5) + (fSlow16 * fTemp6))) + ((fSlow17 * (((fConst6 * fTemp4) + (fSlow19 * fTemp7)) + (fSlow21 * fTemp8))) + ((fSlow22 * fTemp1) + (fSlow24 * fTemp9))))):(iSlow2?((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))):fTemp0))); + output1[i] = FAUSTFLOAT((iSlow1?((((fSlow10 * ((fSlow17 * ((fConst6 * fTemp0) + (fSlow33 * fTemp1))) + (fSlow35 * fTemp3))) + ((fSlow39 * fTemp2) + ((fSlow41 * fTemp5) + (fSlow42 * fTemp7)))) + (fSlow43 * fTemp9)) + (fSlow44 * fTemp6)):(iSlow2?((0.24993000000000001 * fTemp2) + ((((fSlow25 * ((fSlow26 * fTemp0) + (fSlow27 * fTemp5))) + (fSlow28 * fTemp7)) + (fSlow30 * fTemp9)) + (fSlow32 * fTemp6))):fTemp2))); + double fTemp10 = ((fSlow10 * fTemp7) + (fSlow11 * fTemp8)); + output2[i] = FAUSTFLOAT((iSlow1?((fSlow3 * ((((fSlow46 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow47 * fTemp3)) + (0.17213247615000002 * fTemp9))) + ((fSlow48 * fTemp1) + (fSlow49 * fTemp10))):(iSlow2?((0.24993000000000001 * fTemp1) + ((fSlow3 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp9))) + (fSlow45 * fTemp10))):fTemp1))); + output3[i] = FAUSTFLOAT((iSlow1?((fSlow49 * ((fSlow10 * fTemp5) + (fSlow11 * fTemp6))) + ((fSlow53 * fTemp9) + ((fSlow54 * fTemp3) + ((fSlow11 * (((fSlow55 * fTemp0) + (fSlow57 * fTemp2)) + (fSlow59 * fTemp1))) + (fSlow42 * fTemp8))))):(iSlow2?((0.24993000000000001 * fTemp3) + ((fSlow25 * (((fSlow50 * fTemp0) + (fSlow51 * fTemp5)) + (fSlow27 * fTemp6))) + ((fSlow52 * fTemp9) + (fSlow28 * fTemp8)))):fTemp3))); + output4[i] = FAUSTFLOAT((iSlow1?((fSlow17 * (((fSlow60 * fTemp3) + (fSlow61 * fTemp7)) + (fSlow62 * fTemp8))) + (((fSlow11 * ((fSlow49 * fTemp2) + (fSlow63 * fTemp0))) + (fSlow65 * fTemp5)) + (fSlow67 * fTemp9))):(iSlow2?((fSlow45 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3))) + (0.24993000000000001 * fTemp5)):fTemp5))); + output5[i] = FAUSTFLOAT((iSlow1?((((fSlow17 * (((fSlow60 * fTemp1) + (fSlow61 * fTemp5)) + (fSlow68 * fTemp9))) + ((fSlow3 * ((fSlow69 * fTemp0) + (0.14907119265000002 * fTemp2))) + (fSlow72 * fTemp7))) + (fSlow73 * fTemp8)) + (fSlow75 * fTemp6)):(iSlow2?(((fSlow28 * fTemp2) + (fSlow31 * fTemp1)) + (0.24993000000000001 * fTemp7)):fTemp7))); + output6[i] = FAUSTFLOAT((iSlow1?(((fSlow3 * (((fSlow77 * fTemp7) + (0.17213247615000002 * fTemp1)) + (fSlow78 * fTemp8))) + (((fSlow67 * fTemp5) + (((fSlow24 * fTemp0) + (fSlow43 * fTemp2)) + (fSlow53 * fTemp3))) + (fSlow79 * fTemp9))) + (fSlow80 * fTemp6)):(iSlow2?((((fSlow30 * fTemp2) + (fSlow76 * fTemp1)) + (fSlow52 * fTemp3)) + (0.24993000000000001 * fTemp9)):fTemp9))); + output7[i] = FAUSTFLOAT((iSlow1?((fSlow17 * ((((fSlow11 * ((fConst19 * fTemp1) + (fSlow82 * fTemp0))) + (fSlow62 * fTemp5)) + (fSlow83 * fTemp9)) + (fSlow61 * fTemp6))) + (((fSlow42 * fTemp3) + (fSlow73 * fTemp7)) + (fSlow84 * fTemp8))):(iSlow2?(((fSlow81 * fTemp1) + (fSlow28 * fTemp3)) + (0.24993000000000001 * fTemp8)):fTemp8))); + output8[i] = FAUSTFLOAT((iSlow1?(((fSlow85 * ((fConst19 * fTemp3) + (fSlow86 * fTemp8))) + ((fSlow80 * fTemp9) + (((fSlow87 * fTemp0) + (fSlow44 * fTemp2)) + (fSlow75 * fTemp7)))) + (fSlow65 * fTemp6)):(iSlow2?(((fSlow32 * fTemp2) + (fSlow81 * fTemp3)) + (0.24993000000000001 * fTemp6)):fTemp6))); + double fTemp11 = ((fSlow11 * fTemp5) + (fSlow10 * fTemp6)); + output9[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow89 * fTemp3) + (fSlow90 * fTemp2))) + (fSlow91 * fTemp11)):(iSlow2?(fSlow88 * fTemp11):0.0))); + output10[i] = FAUSTFLOAT((iSlow1?((fSlow11 * (((fSlow94 * fTemp2) + (fSlow95 * fTemp1)) + (fSlow96 * fTemp7))) + ((fSlow3 * ((fSlow97 * fTemp3) + (0.12598816230000001 * fTemp5))) + (fSlow98 * fTemp8))):(iSlow2?((fSlow92 * fTemp5) + (fSlow93 * ((fSlow11 * fTemp7) + (fSlow10 * fTemp8)))):0.0))); + output11[i] = FAUSTFLOAT((iSlow1?(((fSlow3 * ((fSlow102 * fTemp1) + (0.15936380355000002 * fTemp7))) + ((fSlow103 * fTemp5) + ((fSlow106 * fTemp2) + (fSlow107 * fTemp3)))) + (fSlow101 * ((0.127153838554589 * fTemp9) + (0.036706218836248881 * fTemp6)))):(iSlow2?(((fSlow99 * fTemp5) + (fSlow100 * fTemp7)) + (fSlow101 * ((0.28609910994747967 * fTemp9) + (0.082589850671945866 * fTemp6)))):0.0))); + output12[i] = FAUSTFLOAT((iSlow1?(((fSlow111 * fTemp7) + ((fSlow113 * fTemp3) + ((fSlow114 * fTemp1) + ((fSlow115 * fTemp2) + (fSlow116 * fTemp9))))) + (fSlow117 * fTemp8)):(iSlow2?(((fSlow108 * fTemp7) + (fSlow109 * fTemp9)) + (fSlow110 * fTemp8)):0.0))); + output13[i] = FAUSTFLOAT((iSlow1?(((fSlow85 * ((fSlow120 * fTemp1) + (fConst47 * fTemp9))) + ((fSlow121 * fTemp5) + ((fSlow122 * fTemp3) + ((fSlow107 * fTemp2) + (fSlow123 * fTemp8))))) + (fSlow103 * fTemp6)):(iSlow2?(((fSlow118 * fTemp9) + ((fSlow119 * fTemp5) + (fSlow100 * fTemp8))) + (fSlow99 * fTemp6)):0.0))); + output14[i] = FAUSTFLOAT((iSlow1?((fSlow85 * ((fConst48 * fTemp8) + (fSlow126 * fTemp3))) + ((fSlow127 * fTemp7) + ((fSlow128 * fTemp1) + ((fSlow129 * fTemp2) + (fSlow130 * fTemp6))))):(iSlow2?(((fSlow124 * fTemp7) + (fSlow125 * fTemp8)) + (fSlow92 * fTemp6)):0.0))); + output15[i] = FAUSTFLOAT((iSlow1?((fSlow133 * fTemp5) + ((fSlow134 * fTemp3) + ((fSlow135 * fTemp2) + (fSlow136 * fTemp6)))):(iSlow2?((fSlow131 * fTemp5) + (fSlow132 * fTemp6)):0.0))); + output16[i] = FAUSTFLOAT((iSlow1?(fSlow12 * ((fSlow137 * fTemp5) + (fSlow138 * fTemp6))):0.0)); + output17[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow139 * fTemp8) + (fSlow140 * fTemp7))) + (fSlow141 * fTemp11)):0.0)); + output18[i] = FAUSTFLOAT((iSlow1?((fSlow11 * ((fSlow142 * fTemp7) + (fSlow143 * fTemp9))) + ((fSlow144 * fTemp5) + (fSlow145 * fTemp8))):0.0)); + output19[i] = FAUSTFLOAT((iSlow1?((fSlow146 * ((0.41620233757211678 * fTemp9) + (0.12014724747147398 * fTemp6))) + (((fSlow147 * fTemp5) + (fSlow150 * fTemp7)) + (fSlow151 * fTemp8))):0.0)); + output20[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow152 * fTemp5) + (fSlow153 * fTemp6))) + ((fSlow154 * fTemp8) + ((fSlow155 * fTemp7) + (fSlow156 * fTemp9)))):0.0)); + output21[i] = FAUSTFLOAT((iSlow1?((((fSlow151 * fTemp7) + ((fSlow157 * fTemp5) + (fSlow158 * fTemp9))) + (fSlow159 * fTemp8)) + (fSlow147 * fTemp6)):0.0)); + output22[i] = FAUSTFLOAT((iSlow1?(((fSlow71 * fTemp9) + ((fSlow160 * fTemp7) + (fSlow161 * fTemp8))) + (fSlow144 * fTemp6)):0.0)); + output23[i] = FAUSTFLOAT((iSlow1?((fSlow162 * fTemp8) + ((fSlow163 * fTemp7) + ((fSlow164 * fTemp5) + (fSlow165 * fTemp6)))):0.0)); + output24[i] = FAUSTFLOAT((iSlow1?((fSlow166 * fTemp5) + (fSlow167 * fTemp6)):0.0)); } @@ -1092,7 +1274,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1324,7 +1505,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1387,7 +1568,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1416,11 +1597,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamHCardio2HOA3.cpp b/source/HOAUGens/HOABeamHCardio2HOA3.cpp index bb98820d67..884a8f944c 100644 --- a/source/HOAUGens/HOABeamHCardio2HOA3.cpp +++ b/source/HOAUGens/HOABeamHCardio2HOA3.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamHCardio2HOA3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,11 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include +#include -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -612,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -619,7 +638,121 @@ class mydsp : public dsp { FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; + double fConst0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; FAUSTFLOAT fHslider2; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; int fSamplingFreq; public: @@ -628,34 +761,34 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("cijk.lib/author", "Pierre Lecomte"); + m->declare("cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("cijk.lib/license", "GPL"); + m->declare("cijk.lib/name", "Cijk matrix"); + m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/author", "Pierre Lecomte"); - m->declare("lib/cijk.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/cijk.lib/license", "GPL"); - m->declare("lib/cijk.lib/name", "Cijk matrix"); - m->declare("lib/cijk.lib/version", "10"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamHCardio2HOA3"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -905,6 +1038,120 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + fConst0 = double(tgamma(1.5)); + fConst1 = double(tgamma(1.0)); + fConst2 = sqrt((3.0 * (fConst1 / double(tgamma(3.0))))); + fConst3 = (fConst0 * fConst2); + fConst4 = (0.39894624032434478 * fConst3); + fConst5 = (double(tgamma(2.5)) * sqrt((5.0 * (fConst1 / double(tgamma(5.0)))))); + fConst6 = (0.17730759750868944 * fConst2); + fConst7 = sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))); + fConst8 = (0.53191448209190839 * fConst7); + fConst9 = (0.17841434392041153 * fConst3); + fConst10 = (0.30902256091651653 * fConst3); + fConst11 = (0.13734193310743828 * fConst2); + fConst12 = (0.34821994335939616 * fConst7); + fConst13 = (0.28432034740638579 * fConst5); + fConst14 = (0.13734193310743828 * fConst3); + fConst15 = (0.079294439912251033 * fConst3); + fConst16 = (0.41201936208494599 * fConst7); + fConst17 = (0.54935914944659459 * fConst5); + fConst18 = (0.27467957472329729 * fConst5); + fConst19 = (0.073411290721777919 * fConst5); + fConst20 = (fConst0 * fConst7); + fConst21 = (0.26973011046743212 * fConst20); + fConst22 = (0.14682258144355584 * fConst5); + fConst23 = (0.34821994335939616 * fConst20); + fConst24 = (0.56864069481277157 * fConst5); + fConst25 = (0.44046721241618542 * fConst7); + fConst26 = (0.41201936208494599 * fConst20); + fConst27 = (0.17730759750868944 * fConst3); + fConst28 = (0.082589850671945866 * fConst3); + fConst29 = (0.31986871235221448 * fConst3); + fConst30 = (0.29429924039525734 * fConst7); + fConst31 = (0.14216239476090706 * fConst2); + fConst32 = (0.45310390476724288 * fConst5); + fConst33 = (0.70921930945587786 * fConst5); + fConst34 = (0.036706218836248881 * fConst3); + fConst35 = (0.14216239476090706 * fConst3); + fConst36 = (0.20230284584479297 * fConst3); + fConst37 = (0.26117175201329362 * fConst3); + fConst38 = (0.53191448209190839 * fConst20); + fConst39 = (0.16991369833047504 * fConst7); + fConst40 = (0.11607512793945357 * fConst2); + fConst41 = (0.29429924039525734 * fConst20); + fConst42 = (0.19619949359683822 * fConst5); + fConst43 = (0.39239898719367644 * fConst5); + fConst44 = (0.089911441543473844 * fConst3); + fConst45 = (0.11607512793945357 * fConst3); + fConst46 = (0.28609910994747967 * fConst3); + fConst47 = (0.16991369833047504 * fConst20); + fConst48 = (0.22655195238362144 * fConst5); + fConst49 = (0.127153838554589 * fConst3); + fConst50 = (0.036706218836248881 * fConst2); + fConst51 = (0.35460965472793893 * fConst5); + fConst52 = (0.28034340012861197 * fConst7); + fConst53 = (0.23640620007885615 * fConst5); + fConst54 = (0.11820310003942808 * fConst5); + fConst55 = (0.21715302348505744 * fConst7); + fConst56 = (0.46429325781252823 * fConst5); + fConst57 = (0.47281310937702176 * fConst5); + fConst58 = (0.28034340012861197 * fConst20); + fConst59 = (0.11213767920013405 * fConst7); + fConst60 = (0.44046721241618542 * fConst20); + fConst61 = (0.18311971648219821 * fConst5); + fConst62 = (0.21715302348505744 * fConst20); + fConst63 = (0.11213767920013405 * fConst20); + fConst64 = (0.23640655468851088 * fConst5); + fConst65 = (0.127153838554589 * fConst2); + fConst66 = (0.36623943296439643 * fConst5); + fConst67 = (0.23214662890626411 * fConst5); + fConst68 = (0.32573840838610657 * fConst3); + fConst69 = (0.1447711214430524 * fConst3); + fConst70 = (0.28209767915702649 * fConst3); + fConst71 = (0.31787954130087376 * fConst20); + fConst72 = (0.12537544335157685 * fConst3); + fConst73 = (0.061558601720767374 * fConst3); + fConst74 = (0.3398279285754322 * fConst20); + fConst75 = (0.10596150257755792 * fConst3); + fConst76 = (0.027359094218383301 * fConst3); + fConst77 = (0.10662277113532474 * fConst3); + fConst78 = (0.12014724747147398 * fConst20); + fConst79 = (0.080098164980982656 * fConst5); + fConst80 = (0.16019632996196531 * fConst5); + fConst81 = (0.047387405817769852 * fConst3); + fConst82 = (0.21324554227064949 * fConst3); + fConst83 = (0.094774811635539705 * fConst3); + fConst84 = (0.30395136058729716 * fConst20); + fConst85 = (0.27529923627565928 * fConst3); + fConst86 = (0.41620233757211678 * fConst7); + fConst87 = (0.12235394458243126 * fConst2); + fConst88 = (0.23841585846519298 * fConst3); + fConst89 = (0.3398279285754322 * fConst7); + fConst90 = (0.10596150257755792 * fConst2); + fConst91 = (0.12537544335157685 * fConst2); + fConst92 = (0.31787954130087376 * fConst7); + fConst93 = (0.21191969420058249 * fConst5); + fConst94 = (0.42383938840116497 * fConst5); + fConst95 = (0.59939953626387299 * fConst5); + fConst96 = (0.29969976813193649 * fConst5); + fConst97 = (0.29280934793091795 * fConst20); + fConst98 = (0.33810718522586491 * fConst20); + fConst99 = (0.084526530349225165 * fConst20); + fConst100 = (0.3273704914048397 * fConst20); + fConst101 = (0.35639617816845831 * fConst5); + fConst102 = (0.021298742387096829 * fConst5); + fConst103 = (0.15651317678313359 * fConst20); + fConst104 = (0.082489652492467883 * fConst5); + fConst105 = (0.16497930498493577 * fConst5); + fConst106 = (0.042597484774193659 * fConst5); + fConst107 = (0.31948113580645249 * fConst20); + fConst108 = (0.40411511288106022 * fConst20); + fConst109 = (0.17819808908422916 * fConst5); + fConst110 = (0.4781556584351529 * fConst5); + fConst111 = (0.23907782921757645 * fConst5); + fConst112 = (0.6172959763186826 * fConst5); + fConst113 = (0.3086479881593413 * fConst5); } @@ -932,18 +1179,18 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "3", ""); ui_interface->openHorizontalBox("Parameters"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); ui_interface->closeBox(); @@ -1006,316 +1253,345 @@ class mydsp : public dsp { int iSlow0 = int(double(fHslider0)); int iSlow1 = (iSlow0 >= 2); int iSlow2 = (iSlow0 >= 1); - double fSlow3 = double(fHslider1); - double fSlow4 = sin(fSlow3); - double fSlow5 = double(fHslider2); - double fSlow6 = cos(fSlow5); - double fSlow7 = (fSlow4 * fSlow6); - double fSlow8 = sin(fSlow5); - double fSlow9 = cos(fSlow3); - double fSlow10 = (fSlow9 * fSlow6); - double fSlow11 = ((3.0 * mydsp_faustpower2_f(fSlow8)) + -1.0); - double fSlow12 = (0.124224 * fSlow11); - double fSlow13 = (2.0 * fSlow3); - double fSlow14 = sin(fSlow13); - double fSlow15 = mydsp_faustpower2_f(fSlow6); - double fSlow16 = (fSlow14 * fSlow15); - double fSlow17 = sin((2.0 * fSlow5)); - double fSlow18 = (fSlow4 * fSlow17); - double fSlow19 = (fSlow9 * fSlow17); - double fSlow20 = cos(fSlow13); - double fSlow21 = (fSlow20 * fSlow15); - double fSlow22 = (0.43301700000000004 * fSlow4); - double fSlow23 = (0.335413669149 * fSlow9); - double fSlow24 = (0.335413669149 * fSlow8); - double fSlow25 = (0.0 - (0.193651264638 * fSlow7)); - double fSlow26 = (0.0 - (0.335413669149 * fSlow7)); - double fSlow27 = (0.14907119265000002 * fSlow9); - double fSlow28 = (fSlow14 * fSlow6); - double fSlow29 = (0.16666405622891672 * fSlow28); - double fSlow30 = (fSlow20 * fSlow6); - double fSlow31 = (0.17251367312221164 * fSlow30); - double fSlow32 = (0.0 - (0.14907119265000002 * fSlow7)); - double fSlow33 = (0.19245000000000004 * fSlow6); - double fSlow34 = (0.16666405622891672 * fSlow17); - double fSlow35 = (0.055554711935999999 * fSlow11); - double fSlow36 = (0.16666405622891672 * fSlow21); - double fSlow37 = (0.11112 - (fSlow35 + fSlow36)); - double fSlow38 = (0.14907119265000002 * fSlow8); - double fSlow39 = (0.0 - (0.086066334300000019 * fSlow7)); - double fSlow40 = (0.14085684693651698 * fSlow19); - double fSlow41 = (0.089085626687999991 * fSlow11); - double fSlow42 = (0.044542895106113686 * fSlow21); - double fSlow43 = (fSlow41 + fSlow42); - double fSlow44 = (0.0 - (0.10910728580834947 * fSlow18)); - double fSlow45 = (0.0 - (0.044542895106113686 * fSlow16)); - double fSlow46 = (0.0 - (0.14085684693651698 * fSlow18)); - double fSlow47 = (0.0 - (0.17251367312221164 * fSlow16)); - double fSlow48 = (0.335413669149 * fSlow6); - double fSlow49 = (0.14085684693651698 * fSlow28); - double fSlow50 = (0.14085684693651698 * fSlow30); - double fSlow51 = (0.1781713652621752 * fSlow4); - double fSlow52 = (0.1781713652621752 * fSlow9); - double fSlow53 = ((0.111109299648 * fSlow11) + 0.11112); - double fSlow54 = (0.10910718143999999 * fSlow11); - double fSlow55 = (0.43301700000000004 * fSlow9); - double fSlow56 = (0.335413669149 * fSlow4); - double fSlow57 = (0.0 - (0.193651264638 * fSlow10)); - double fSlow58 = (0.19245000000000004 * fSlow9); - double fSlow59 = (0.14907119265000002 * fSlow4); - double fSlow60 = (0.17251367312221164 * fSlow28); - double fSlow61 = (0.14085684693651698 * fSlow17); - double fSlow62 = (fSlow41 - fSlow42); - double fSlow63 = (0.0 - (0.10910728580834947 * fSlow19)); - double fSlow64 = (0.14907119265000002 * fSlow6); - double fSlow65 = (0.0 - (0.086066334300000019 * fSlow10)); - double fSlow66 = (fSlow36 + (0.11112 - fSlow35)); - double fSlow67 = (0.34718610232800001 * fSlow9); - double fSlow68 = (0.28347631111800004 * fSlow8); - double fSlow69 = (0.0 - (0.089643179340000004 * fSlow10)); - double fSlow70 = (0.0 - (0.089643179340000004 * fSlow7)); - double fSlow71 = (0.0 - (0.34718610232800001 * fSlow7)); - double fSlow72 = (0.2151622795194362 * fSlow28); - double fSlow73 = (0.15430333080000003 * fSlow9); - double fSlow74 = (0.11904563149935221 * fSlow17); - double fSlow75 = (0.0 - (0.13746223165253885 * fSlow16)); - double fSlow76 = (0.079363856447999995 * fSlow11); - double fSlow77 = (0.11112 - fSlow76); - double fSlow78 = (0.12598816230000001 * fSlow8); - double fSlow79 = (0.0 - (0.039840999000000009 * fSlow10)); - double fSlow80 = (0.0 - (0.039840999000000009 * fSlow7)); - double fSlow81 = (0.0 - (0.15430333080000003 * fSlow7)); - double fSlow82 = (0.28347631111800004 * fSlow10); - double fSlow83 = (0.35857228434300004 * fSlow8); - double fSlow84 = (0.0 - (0.219579889581 * fSlow7)); - double fSlow85 = (0.0 - (0.28347631111800004 * fSlow7)); - double fSlow86 = (0.0 - (0.11904563149935221 * fSlow18)); - double fSlow87 = (0.2151622795194362 * fSlow17); - double fSlow88 = (0.068731008245129663 * fSlow17); - double fSlow89 = (0.039681866111999996 * fSlow11); - double fSlow90 = (0.11904563149935221 * fSlow21); - double fSlow91 = (fSlow89 + (0.11112 - fSlow90)); - double fSlow92 = (0.12598816230000001 * fSlow10); - double fSlow93 = (0.0 - (0.097590047850000028 * fSlow7)); - double fSlow94 = (0.0 - (0.12598816230000001 * fSlow7)); - double fSlow95 = (0.31053251232900003 * fSlow6); - double fSlow96 = (0.0 - (0.13746223165253885 * fSlow21)); - double fSlow97 = (fSlow76 + 0.11112); - double fSlow98 = (0.13801301565000001 * fSlow6); - double fSlow99 = (0.28347631111800004 * fSlow6); - double fSlow100 = (0.0 - (0.219579889581 * fSlow10)); - double fSlow101 = (0.0 - (0.097590047850000028 * fSlow10)); - double fSlow102 = ((fSlow89 + fSlow90) + 0.11112); - double fSlow103 = (0.12598816230000001 * fSlow6); - double fSlow104 = (0.34718610232800001 * fSlow4); - double fSlow105 = (0.089643179340000004 * fSlow4); - double fSlow106 = (0.15430333080000003 * fSlow6); - double fSlow107 = (0.2151622795194362 * fSlow30); - double fSlow108 = (0.15430333080000003 * fSlow4); - double fSlow109 = (0.039840999000000009 * fSlow4); - double fSlow110 = (0.34718610232800001 * fSlow6); - double fSlow111 = (0.11340041877160077 * fSlow17); - double fSlow112 = (0.0 - (0.071720688119052231 * fSlow16)); - double fSlow113 = (0.17251367312221164 * fSlow6); - double fSlow114 = (0.11112 - (0.092591103744000008 * fSlow11)); - double fSlow115 = (0.0 - (0.071720688119052231 * fSlow21)); - double fSlow116 = (0.087839570289250796 * fSlow4); - double fSlow117 = (0.0 - (0.14344159140038398 * fSlow16)); - double fSlow118 = (0.0 - (0.11340041877160077 * fSlow18)); - double fSlow119 = (0.087839570289250796 * fSlow9); - double fSlow120 = (0.045360296606008023 * fSlow4); - double fSlow121 = (0.15936380355000002 * fSlow8); - double fSlow122 = (0.1781713652621752 * fSlow17); - double fSlow123 = (0.039840999000000009 * fSlow6); - double fSlow124 = (0.11110937081927783 * fSlow21); - double fSlow125 = (fSlow35 + (0.11112 - fSlow124)); - double fSlow126 = (0.0 - (0.087839570289250796 * fSlow18)); - double fSlow127 = (0.38032316126999999 * fSlow8); - double fSlow128 = (0.045360296606008023 * fSlow17); - double fSlow129 = (0.16903075950000004 * fSlow8); - double fSlow130 = ((0.074072907839999994 * fSlow11) + 0.11112); - double fSlow131 = (0.0 - (0.14344159140038398 * fSlow21)); - double fSlow132 = (0.31053251232900003 * fSlow10); - double fSlow133 = (0.087839570289250796 * fSlow17); - double fSlow134 = ((fSlow35 + fSlow124) + 0.11112); - double fSlow135 = (0.045360296606008023 * fSlow9); - double fSlow136 = (0.11110937081927783 * fSlow16); - double fSlow137 = (0.11340041877160077 * fSlow4); - double fSlow138 = (0.11340041877160077 * fSlow9); - double fSlow139 = (0.34718610232800001 * fSlow10); - double fSlow140 = (0.071720688119052231 * fSlow28); - double fSlow141 = (0.11340041877160077 * fSlow19); - double fSlow142 = (0.353557081449 * fSlow6); - double fSlow143 = (0.15713484765000002 * fSlow9); - double fSlow144 = (0.18184526118496958 * fSlow6); - double fSlow145 = (0.15713484765000002 * fSlow4); - double fSlow146 = (0.25000236495 * fSlow8); - double fSlow147 = (0.30618935181900003 * fSlow6); - double fSlow148 = (0.11111100750000003 * fSlow8); - double fSlow149 = (0.13608274215000005 * fSlow6); - double fSlow150 = (0.0 - (0.066815822151000001 * fSlow10)); - double fSlow151 = (0.32733010779299998 * fSlow8); - double fSlow152 = (0.066815822151000001 * fSlow4); - double fSlow153 = (0.0 - (0.029695612350000001 * fSlow10)); - double fSlow154 = (0.068731027392000002 * fSlow11); - double fSlow155 = (0.13746223165253885 * fSlow17); - double fSlow156 = (0.14547853605000002 * fSlow8); - double fSlow157 = (0.11501081430000001 * fSlow9); - double fSlow158 = (0.11904563149935221 * fSlow28); - double fSlow159 = (0.11501081430000001 * fSlow4); - double fSlow160 = (0.029695612350000001 * fSlow4); - double fSlow161 = (0.0 - (0.11572855643700003 * fSlow10)); - double fSlow162 = (0.365966049618 * fSlow8); - double fSlow163 = (0.0 - (0.051434379450000019 * fSlow10)); - double fSlow164 = (0.0 - (0.048600210211011685 * fSlow16)); - double fSlow165 = (0.097200435264000004 * fSlow11); - double fSlow166 = (0.048600210211011685 * fSlow21); - double fSlow167 = (fSlow165 + fSlow166); - double fSlow168 = (0.0 - (0.048600210211011685 * fSlow19)); - double fSlow169 = (0.16264988730000002 * fSlow8); - double fSlow170 = (0.13280320170000001 * fSlow6); - double fSlow171 = (0.051434379450000019 * fSlow6); - double fSlow172 = (0.0 - (0.23145711287400006 * fSlow7)); - double fSlow173 = (0.37796841482400001 * fSlow8); - double fSlow174 = (0.0 - (0.23145711287400006 * fSlow10)); - double fSlow175 = (0.0 - (0.10286875890000004 * fSlow7)); - double fSlow176 = (0.030737437765308104 * fSlow15); - double fSlow177 = (0.0 - (0.12294996622351191 * fSlow19)); - double fSlow178 = (0.0 - (0.12294996622351191 * fSlow18)); - double fSlow179 = (0.10647773203199999 * fSlow11); - double fSlow180 = (0.16798421640000002 * fSlow8); - double fSlow181 = (0.0 - (0.10286875890000004 * fSlow10)); - double fSlow182 = (0.29881030912199996 * fSlow10); - double fSlow183 = (0.0 - (0.11572855643700003 * fSlow7)); - double fSlow184 = (0.16835609239505758 * fSlow17); - double fSlow185 = (0.0 - (0.051434379450000019 * fSlow7)); - double fSlow186 = (fSlow165 - fSlow166); - double fSlow187 = (0.0 - (0.048600210211011685 * fSlow18)); - double fSlow188 = (0.0 - (0.25877702143799997 * fSlow7)); - double fSlow189 = (0.0 - (0.066815822151000001 * fSlow7)); - double fSlow190 = (0.25877702143799997 * fSlow10); - double fSlow191 = (0.11501081430000001 * fSlow6); - double fSlow192 = (0.0 - (0.11501081430000001 * fSlow7)); - double fSlow193 = (0.0 - (0.029695612350000001 * fSlow7)); - double fSlow194 = (0.0 - (0.13746223165253885 * fSlow18)); - double fSlow195 = (0.0 - (0.30618935181900003 * fSlow7)); - double fSlow196 = (0.30618935181900003 * fSlow10); - double fSlow197 = (0.0 - (0.13608274215000005 * fSlow7)); - double fSlow198 = (0.0 - (0.12858399051272834 * fSlow16)); - double fSlow199 = (0.0 - (0.12858399051272834 * fSlow18)); - double fSlow200 = (0.13608274215000005 * fSlow10); - double fSlow201 = (0.0 - (0.353557081449 * fSlow7)); - double fSlow202 = (0.353557081449 * fSlow10); - double fSlow203 = (0.18184526118496958 * fSlow30); - double fSlow204 = (0.0 - (0.18184526118496958 * fSlow16)); - double fSlow205 = (0.0 - (0.15713484765000002 * fSlow7)); - double fSlow206 = (0.18727466614636304 * fSlow15); - double fSlow207 = (0.14506240885200392 * fSlow15); - double fSlow208 = (0.11844296195441828 * fSlow17); - double fSlow209 = (0.10812313354182758 * fSlow15); - double fSlow210 = (0.055834588607999995 * fSlow11); - double fSlow211 = (0.13676618167829349 * fSlow17); - double fSlow212 = (0.0 - (0.034191437838433605 * fSlow19)); - double fSlow213 = (0.083751820800000001 * fSlow11); - double fSlow214 = (0.10812313354182758 * fSlow16); - double fSlow215 = (0.034191437838433605 * fSlow4); - double fSlow216 = (0.012923184413636137 * fSlow21); - double fSlow217 = (0.0 - (0.063310424937196505 * fSlow19)); - double fSlow218 = (0.10010255635199999 * fSlow11); - double fSlow219 = (0.05005126462409077 * fSlow21); - double fSlow220 = (fSlow218 + fSlow219); - double fSlow221 = (0.0 - (0.05005126462409077 * fSlow16)); - double fSlow222 = (0.0 - (0.012923184413636137 * fSlow16)); - double fSlow223 = (0.04086663239824459 * fSlow15); - double fSlow224 = (0.0 - (0.12923184413636135 * fSlow19)); - double fSlow225 = (0.0 - (0.12923184413636135 * fSlow18)); - double fSlow226 = (0.10551735628799999 * fSlow11); - double fSlow227 = (0.012923184413636137 * fSlow15); - double fSlow228 = (fSlow218 - fSlow219); - double fSlow229 = (0.0 - (0.063310424937196505 * fSlow18)); - double fSlow230 = (0.16346674475525791 * fSlow19); - double fSlow231 = (0.10812313354182758 * fSlow21); - double fSlow232 = (0.0 - (0.13242313106619366 * fSlow18)); - double fSlow233 = (0.0 - (0.034191437838433605 * fSlow18)); - double fSlow234 = (0.13242313106619366 * fSlow19); - double fSlow235 = (0.0 - fSlow214); - double fSlow236 = (0.0 - (0.13676618167829349 * fSlow18)); - double fSlow237 = (0.13676618167829349 * fSlow19); - double fSlow238 = (0.0 - (0.14506240885200392 * fSlow16)); - double fSlow239 = (0.0 - (0.11844296195441828 * fSlow18)); - double fSlow240 = (0.14506240885200392 * fSlow21); - double fSlow241 = (0.11844296195441828 * fSlow19); - double fSlow242 = (0.0 - (0.18727466614636304 * fSlow16)); - double fSlow243 = (0.18727466614636304 * fSlow21); + double fSlow3 = sin(double(fHslider1)); + double fSlow4 = (0.43301700000000004 * fSlow3); + double fSlow5 = mydsp_faustpower2_f(fSlow3); + double fSlow6 = (1.0 - fSlow5); + double fSlow7 = pow(fSlow6, 0.5); + double fSlow8 = (fConst4 * fSlow7); + double fSlow9 = double(fHslider2); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (fConst5 * fSlow6); + double fSlow13 = (fSlow11 * fSlow10); + double fSlow14 = (0.70921930945587786 * fSlow13); + double fSlow15 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); + double fSlow16 = (0.35460965472793893 * fSlow15); + double fSlow17 = (fConst0 * fSlow7); + double fSlow18 = (fSlow3 * fSlow10); + double fSlow19 = (fConst8 * fSlow18); + double fSlow20 = (fSlow11 * fSlow3); + double fSlow21 = (fConst8 * fSlow20); + double fSlow22 = (0.19245000000000004 * fSlow3); + double fSlow23 = ((3.0 * fSlow5) + -1.0); + double fSlow24 = (0.124224 * fSlow23); + double fSlow25 = (fConst3 * fSlow7); + double fSlow26 = (0.39894624032434478 * fSlow10); + double fSlow27 = (0.30902256091651653 * fSlow11); + double fSlow28 = (0.335413669149 * fSlow3); + double fSlow29 = (fSlow7 * fSlow10); + double fSlow30 = (0.0 - (fConst9 * fSlow29)); + double fSlow31 = (0.0 - (fConst10 * fSlow29)); + double fSlow32 = (fSlow11 * fSlow7); + double fSlow33 = (fConst0 * fSlow32); + double fSlow34 = (fConst12 * fSlow3); + double fSlow35 = (fSlow15 * fSlow6); + double fSlow36 = (fConst13 * fSlow35); + double fSlow37 = (0.0 - (fConst14 * fSlow29)); + double fSlow38 = (0.0 - (fConst15 * fSlow29)); + double fSlow39 = (fConst16 * fSlow3); + double fSlow40 = (fSlow11 * fSlow6); + double fSlow41 = (fConst17 * fSlow40); + double fSlow42 = (0.055554711935999999 * fSlow23); + double fSlow43 = (fConst18 * fSlow35); + double fSlow44 = (0.11112 - (fSlow42 + fSlow43)); + double fSlow45 = (0.14907119265000002 * fSlow3); + double fSlow46 = (0.089085626687999991 * fSlow23); + double fSlow47 = (fConst19 * fSlow35); + double fSlow48 = (fSlow46 + fSlow47); + double fSlow49 = (fSlow3 * fSlow7); + double fSlow50 = (fSlow49 * fSlow10); + double fSlow51 = (0.0 - (fConst21 * fSlow50)); + double fSlow52 = (fSlow40 * fSlow10); + double fSlow53 = (0.0 - (fConst22 * fSlow52)); + double fSlow54 = (0.0 - (fConst23 * fSlow50)); + double fSlow55 = (0.0 - (fConst24 * fSlow52)); + double fSlow56 = (fConst10 * fSlow7); + double fSlow57 = (0.46429325781252823 * fSlow13); + double fSlow58 = (0.23214662890626411 * fSlow15); + double fSlow59 = (fConst25 * fSlow18); + double fSlow60 = (fConst25 * fSlow20); + double fSlow61 = ((0.111109299648 * fSlow23) + 0.11112); + double fSlow62 = (fConst26 * fSlow29); + double fSlow63 = (fConst26 * fSlow32); + double fSlow64 = (0.10910718143999999 * fSlow23); + double fSlow65 = (0.39894624032434478 * fSlow11); + double fSlow66 = (0.30902256091651653 * fSlow10); + double fSlow67 = (0.0 - (fConst9 * fSlow32)); + double fSlow68 = (fConst12 * fSlow18); + double fSlow69 = (fConst12 * fSlow20); + double fSlow70 = (fSlow46 - fSlow47); + double fSlow71 = (fSlow20 * fSlow7); + double fSlow72 = (0.0 - (fConst21 * fSlow71)); + double fSlow73 = (fConst27 * fSlow7); + double fSlow74 = (fSlow6 * fSlow10); + double fSlow75 = (fConst17 * fSlow74); + double fSlow76 = (fConst26 * fSlow49); + double fSlow77 = (fConst24 * fSlow74); + double fSlow78 = (0.0 - (fConst15 * fSlow32)); + double fSlow79 = (fSlow43 + (0.11112 - fSlow42)); + double fSlow80 = (0.31986871235221448 * fSlow11); + double fSlow81 = (0.28347631111800004 * fSlow3); + double fSlow82 = (0.0 - (fConst28 * fSlow32)); + double fSlow83 = (0.0 - (fConst28 * fSlow29)); + double fSlow84 = (0.0 - (fConst29 * fSlow29)); + double fSlow85 = (fConst11 * fSlow10); + double fSlow86 = (fConst30 * fSlow20); + double fSlow87 = (fConst30 * fSlow18); + double fSlow88 = (fConst31 * fSlow11); + double fSlow89 = (0.0 - (fConst32 * fSlow52)); + double fSlow90 = (0.079363856447999995 * fSlow23); + double fSlow91 = (0.11112 - fSlow90); + double fSlow92 = (fConst14 * fSlow7); + double fSlow93 = (fConst33 * fSlow74); + double fSlow94 = (0.12598816230000001 * fSlow3); + double fSlow95 = (0.0 - (fConst34 * fSlow32)); + double fSlow96 = (0.0 - (fConst34 * fSlow29)); + double fSlow97 = (0.0 - (fConst35 * fSlow29)); + double fSlow98 = (0.26117175201329362 * fSlow11); + double fSlow99 = (0.0 - (fConst36 * fSlow29)); + double fSlow100 = (0.0 - (fConst37 * fSlow29)); + double fSlow101 = (fConst38 * fSlow29); + double fSlow102 = (fConst39 * fSlow18); + double fSlow103 = (fConst40 * fSlow11); + double fSlow104 = (0.0 - (fConst41 * fSlow50)); + double fSlow105 = (0.039681866111999996 * fSlow23); + double fSlow106 = (fConst42 * fSlow35); + double fSlow107 = (fSlow105 + (0.11112 - fSlow106)); + double fSlow108 = (fConst43 * fSlow52); + double fSlow109 = (0.0 - (fConst44 * fSlow29)); + double fSlow110 = (0.0 - (fConst45 * fSlow29)); + double fSlow111 = (fConst46 * fSlow7); + double fSlow112 = (fConst47 * fSlow29); + double fSlow113 = (fConst47 * fSlow32); + double fSlow114 = (0.0 - (fConst48 * fSlow35)); + double fSlow115 = (fSlow90 + 0.11112); + double fSlow116 = (fConst49 * fSlow7); + double fSlow117 = (0.26117175201329362 * fSlow10); + double fSlow118 = (0.0 - (fConst36 * fSlow32)); + double fSlow119 = (fConst8 * fSlow3); + double fSlow120 = (fConst39 * fSlow20); + double fSlow121 = (fConst40 * fSlow10); + double fSlow122 = (0.0 - (fConst44 * fSlow32)); + double fSlow123 = ((fSlow105 + fSlow106) + 0.11112); + double fSlow124 = (0.31986871235221448 * fSlow10); + double fSlow125 = (0.082589850671945866 * fSlow10); + double fSlow126 = (fConst30 * fSlow3); + double fSlow127 = (fConst31 * fSlow10); + double fSlow128 = (fConst50 * fSlow10); + double fSlow129 = (fConst51 * fSlow35); + double fSlow130 = (fConst29 * fSlow7); + double fSlow131 = (fConst52 * fSlow20); + double fSlow132 = (fConst52 * fSlow18); + double fSlow133 = (0.0 - (fConst53 * fSlow52)); + double fSlow134 = (0.56864069481277157 * fSlow13); + double fSlow135 = (0.28432034740638579 * fSlow15); + double fSlow136 = (0.11112 - (0.092591103744000008 * fSlow23)); + double fSlow137 = (0.0 - (fConst54 * fSlow35)); + double fSlow138 = (fConst37 * fSlow7); + double fSlow139 = (fConst55 * fSlow20); + double fSlow140 = (fConst55 * fSlow18); + double fSlow141 = (fConst23 * fSlow29); + double fSlow142 = (fConst23 * fSlow49); + double fSlow143 = (fConst56 * fSlow74); + double fSlow144 = (fConst45 * fSlow7); + double fSlow145 = (0.0 - (fConst57 * fSlow52)); + double fSlow146 = (0.0 - (fConst58 * fSlow50)); + double fSlow147 = (0.35857228434300004 * fSlow3); + double fSlow148 = (fConst3 * fSlow29); + double fSlow149 = (fConst5 * fSlow52); + double fSlow150 = (fConst2 * fSlow10); + double fSlow151 = (fConst59 * fSlow18); + double fSlow152 = (fConst60 * fSlow29); + double fSlow153 = (fConst61 * fSlow35); + double fSlow154 = (fSlow42 + (0.11112 - fSlow153)); + double fSlow155 = (0.0 - (fConst62 * fSlow50)); + double fSlow156 = (0.38032316126999999 * fSlow3); + double fSlow157 = (fConst63 * fSlow29); + double fSlow158 = (fConst63 * fSlow32); + double fSlow159 = ((0.074072907839999994 * fSlow23) + 0.11112); + double fSlow160 = (0.0 - (fConst64 * fSlow35)); + double fSlow161 = (fConst46 * fSlow32); + double fSlow162 = (fConst25 * fSlow3); + double fSlow163 = (fConst59 * fSlow20); + double fSlow164 = (0.15936380355000002 * fSlow3); + double fSlow165 = (fConst66 * fSlow52); + double fSlow166 = ((fSlow42 + fSlow153) + 0.11112); + double fSlow167 = (fConst37 * fSlow32); + double fSlow168 = (fConst67 * fSlow35); + double fSlow169 = (fConst29 * fSlow32); + double fSlow170 = (fConst52 * fSlow3); + double fSlow171 = (0.23640620007885615 * fSlow13); + double fSlow172 = (fConst68 * fSlow7); + double fSlow173 = (0.29969976813193649 * fSlow15); + double fSlow174 = (0.59939953626387299 * fSlow13); + double fSlow175 = (fConst69 * fSlow7); + double fSlow176 = (0.25000236495 * fSlow3); + double fSlow177 = (fConst70 * fSlow7); + double fSlow178 = (fConst71 * fSlow7); + double fSlow179 = (0.42383938840116497 * fSlow13); + double fSlow180 = (0.21191969420058249 * fSlow15); + double fSlow181 = (fConst72 * fSlow7); + double fSlow182 = (0.0 - (fConst73 * fSlow32)); + double fSlow183 = (0.32733010779299998 * fSlow3); + double fSlow184 = (0.061558601720767374 * fSlow10); + double fSlow185 = (fConst74 * fSlow49); + double fSlow186 = (fConst43 * fSlow74); + double fSlow187 = (fConst75 * fSlow7); + double fSlow188 = (fConst74 * fSlow29); + double fSlow189 = (0.068731027392000002 * fSlow23); + double fSlow190 = (0.0 - (fConst76 * fSlow32)); + double fSlow191 = (0.0 - (fConst77 * fSlow32)); + double fSlow192 = (0.365966049618 * fSlow3); + double fSlow193 = (fConst20 * fSlow29); + double fSlow194 = (0.0 - (fConst78 * fSlow71)); + double fSlow195 = (0.097200435264000004 * fSlow23); + double fSlow196 = (fConst79 * fSlow35); + double fSlow197 = (fSlow195 + fSlow196); + double fSlow198 = (0.0 - (fConst80 * fSlow52)); + double fSlow199 = (0.0 - (fConst81 * fSlow32)); + double fSlow200 = (0.0 - (fConst82 * fSlow29)); + double fSlow201 = (0.37796841482400001 * fSlow3); + double fSlow202 = (0.0 - (fConst82 * fSlow32)); + double fSlow203 = (0.0 - (fConst83 * fSlow29)); + double fSlow204 = (0.10131694289093836 * fSlow13); + double fSlow205 = (0.050658471445469179 * fSlow15); + double fSlow206 = (0.0 - (fConst84 * fSlow71)); + double fSlow207 = (0.0 - (fConst84 * fSlow50)); + double fSlow208 = (0.10647773203199999 * fSlow23); + double fSlow209 = (0.16798421640000002 * fSlow3); + double fSlow210 = (0.0 - (fConst83 * fSlow32)); + double fSlow211 = (fConst85 * fSlow32); + double fSlow212 = (0.0 - (fConst77 * fSlow29)); + double fSlow213 = (fConst86 * fSlow3); + double fSlow214 = (0.0 - (fConst81 * fSlow29)); + double fSlow215 = (fSlow195 - fSlow196); + double fSlow216 = (0.0 - (fConst78 * fSlow50)); + double fSlow217 = (0.16264988730000002 * fSlow3); + double fSlow218 = (0.0 - (fConst88 * fSlow29)); + double fSlow219 = (0.0 - (fConst73 * fSlow29)); + double fSlow220 = (fConst88 * fSlow32); + double fSlow221 = (fConst89 * fSlow3); + double fSlow222 = (0.0 - (fConst75 * fSlow29)); + double fSlow223 = (0.0 - (fConst76 * fSlow29)); + double fSlow224 = (0.0 - (fConst74 * fSlow50)); + double fSlow225 = (0.14547853605000002 * fSlow3); + double fSlow226 = (0.0 - (fConst70 * fSlow29)); + double fSlow227 = (fConst70 * fSlow32); + double fSlow228 = (fConst92 * fSlow3); + double fSlow229 = (0.0 - (fConst72 * fSlow29)); + double fSlow230 = (fConst93 * fSlow35); + double fSlow231 = (0.0 - (fConst94 * fSlow52)); + double fSlow232 = (0.0 - (fConst71 * fSlow50)); + double fSlow233 = (0.11111100750000003 * fSlow3); + double fSlow234 = (0.0 - (fConst68 * fSlow29)); + double fSlow235 = (fConst68 * fSlow32); + double fSlow236 = (0.0 - (fConst69 * fSlow29)); + double fSlow237 = (0.0 - (fConst95 * fSlow52)); + double fSlow238 = (fConst96 * fSlow35); + double fSlow239 = (fConst69 * fSlow32); + double fSlow240 = (0.3086479881593413 * fSlow15); + double fSlow241 = (0.6172959763186826 * fSlow13); + double fSlow242 = (0.23907782921757645 * fSlow15); + double fSlow243 = (0.4781556584351529 * fSlow13); + double fSlow244 = (fConst97 * fSlow49); + double fSlow245 = (fConst98 * fSlow49); + double fSlow246 = (0.055834588607999995 * fSlow23); + double fSlow247 = (0.35639617816845831 * fSlow13); + double fSlow248 = (0.17819808908422916 * fSlow15); + double fSlow249 = (0.0 - (fConst99 * fSlow71)); + double fSlow250 = (0.083751820800000001 * fSlow23); + double fSlow251 = (fConst100 * fSlow49); + double fSlow252 = (fConst101 * fSlow74); + double fSlow253 = (fConst20 * fSlow50); + double fSlow254 = (fConst102 * fSlow35); + double fSlow255 = (0.0 - (fConst103 * fSlow71)); + double fSlow256 = (0.10010255635199999 * fSlow23); + double fSlow257 = (fConst104 * fSlow35); + double fSlow258 = (fSlow256 + fSlow257); + double fSlow259 = (0.0 - (fConst105 * fSlow52)); + double fSlow260 = (0.0 - (fConst106 * fSlow52)); + double fSlow261 = (0.1347048603221927 * fSlow13); + double fSlow262 = (0.067352430161096349 * fSlow15); + double fSlow263 = (0.0 - (fConst107 * fSlow71)); + double fSlow264 = (0.0 - (fConst107 * fSlow50)); + double fSlow265 = (0.10551735628799999 * fSlow23); + double fSlow266 = (fSlow256 - fSlow257); + double fSlow267 = (fConst106 * fSlow74); + double fSlow268 = (fConst108 * fSlow49); + double fSlow269 = (0.0 - (fConst103 * fSlow50)); + double fSlow270 = (fConst109 * fSlow35); + double fSlow271 = (0.0 - (fConst100 * fSlow50)); + double fSlow272 = (0.0 - (fConst99 * fSlow50)); + double fSlow273 = (fConst100 * fSlow71); + double fSlow274 = (0.0 - (fConst101 * fSlow52)); + double fSlow275 = (0.0 - (fConst98 * fSlow50)); + double fSlow276 = (fConst98 * fSlow71); + double fSlow277 = (0.0 - (fConst110 * fSlow52)); + double fSlow278 = (0.0 - (fConst97 * fSlow50)); + double fSlow279 = (fConst111 * fSlow35); + double fSlow280 = (fConst97 * fSlow71); + double fSlow281 = (0.0 - (fConst112 * fSlow52)); + double fSlow282 = (fConst113 * fSlow35); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); - double fTemp1 = double(input1[i]); - double fTemp2 = double(input2[i]); + double fTemp1 = double(input2[i]); + double fTemp2 = double(input1[i]); double fTemp3 = double(input3[i]); - double fTemp4 = (((fSlow7 * fTemp1) + (fSlow8 * fTemp2)) + (fSlow10 * fTemp3)); - double fTemp5 = double(input6[i]); - double fTemp6 = double(input4[i]); + double fTemp4 = ((fSlow10 * fTemp2) + (fSlow11 * fTemp3)); + double fTemp5 = double(input4[i]); + double fTemp6 = double(input8[i]); double fTemp7 = double(input5[i]); double fTemp8 = double(input7[i]); - double fTemp9 = double(input8[i]); - output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + (((0.19245000000000004 * fTemp4) + (fSlow12 * fTemp5)) + (0.2151622795194362 * ((((fSlow16 * fTemp6) + (fSlow18 * fTemp7)) + (fSlow19 * fTemp8)) + (fSlow21 * fTemp9))))):(iSlow2?((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4)):fTemp0))); - double fTemp10 = double(input9[i]); - double fTemp11 = (fSlow34 * fTemp2); - double fTemp12 = double(input10[i]); - double fTemp13 = double(input11[i]); - double fTemp14 = double(input12[i]); - double fTemp15 = double(input13[i]); - double fTemp16 = double(input14[i]); - double fTemp17 = double(input15[i]); - output1[i] = FAUSTFLOAT((iSlow1?((((((((fSlow6 * (((fSlow27 * fTemp6) + (fSlow29 * fTemp3)) + (fSlow31 * fTemp10))) + ((fSlow32 * fTemp9) + (((fSlow4 * ((fSlow33 * fTemp0) + fTemp11)) + ((fSlow37 * fTemp1) + (fSlow38 * fTemp7))) + (fSlow39 * fTemp5)))) + (fSlow40 * fTemp12)) + (fSlow43 * fTemp13)) + (fSlow44 * fTemp14)) + (fSlow45 * fTemp15)) + (fSlow46 * fTemp16)) + (fSlow47 * fTemp17)):(iSlow2?((0.24993000000000001 * fTemp1) + ((((fSlow6 * ((fSlow22 * fTemp0) + (fSlow23 * fTemp6))) + (fSlow24 * fTemp7)) + (fSlow25 * fTemp5)) + (fSlow26 * fTemp9))):fTemp1))); - double fTemp18 = ((fSlow4 * fTemp7) + (fSlow9 * fTemp8)); - output2[i] = FAUSTFLOAT((iSlow1?((fSlow6 * (((0.14907119265000002 * fTemp18) + (fSlow49 * fTemp12)) + (fSlow50 * fTemp16))) + ((fSlow17 * (((0.16666405622891672 * ((fSlow4 * fTemp1) + (fSlow9 * fTemp3))) + (fSlow51 * fTemp13)) + (fSlow52 * fTemp15))) + (((fSlow53 * fTemp2) + (fSlow8 * ((0.19245000000000004 * fTemp0) + (0.17213247615000002 * fTemp5)))) + (fSlow54 * fTemp14)))):(iSlow2?((0.24993000000000001 * fTemp2) + ((fSlow8 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp5))) + (fSlow48 * fTemp18))):fTemp2))); - double fTemp19 = ((fSlow4 * fTemp12) + (fSlow9 * fTemp16)); - output3[i] = FAUSTFLOAT((iSlow1?((fSlow6 * (((((fSlow58 * fTemp0) + (fSlow29 * fTemp1)) + (fSlow59 * fTemp6)) + (fSlow60 * fTemp10)) + (fSlow31 * fTemp17))) + ((fSlow61 * fTemp19) + ((fSlow62 * fTemp15) + ((fSlow63 * fTemp14) + (((fSlow9 * (fTemp11 + (fSlow64 * fTemp9))) + ((fSlow65 * fTemp5) + ((fSlow66 * fTemp3) + (fSlow38 * fTemp8)))) + (fSlow45 * fTemp13)))))):(iSlow2?((0.24993000000000001 * fTemp3) + ((fSlow6 * (((fSlow55 * fTemp0) + (fSlow56 * fTemp6)) + (fSlow23 * fTemp9))) + ((fSlow57 * fTemp5) + (fSlow24 * fTemp8)))):fTemp3))); - double fTemp20 = ((fSlow9 * fTemp7) + (fSlow4 * fTemp8)); - output4[i] = FAUSTFLOAT((iSlow1?(((((fSlow6 * ((((fSlow27 * fTemp1) + (fSlow72 * fTemp0)) + (fSlow59 * fTemp3)) + (fSlow73 * fTemp10))) + ((fSlow74 * fTemp20) + ((fSlow75 * fTemp5) + ((fSlow77 * fTemp6) + (fSlow78 * fTemp12))))) + (fSlow79 * fTemp13)) + (fSlow80 * fTemp15)) + (fSlow81 * fTemp17)):(iSlow2?((0.24993000000000001 * fTemp6) + (((((fSlow6 * ((0.335413669149 * ((fSlow9 * fTemp1) + (fSlow4 * fTemp3))) + (fSlow67 * fTemp10))) + (fSlow68 * fTemp12)) + (fSlow69 * fTemp13)) + (fSlow70 * fTemp15)) + (fSlow71 * fTemp17))):fTemp6))); - double fTemp21 = (fSlow19 * fTemp6); - double fTemp22 = (fSlow16 * fTemp8); - double fTemp23 = (((fSlow64 * fTemp2) + (fSlow87 * fTemp0)) + (fSlow88 * fTemp5)); - output5[i] = FAUSTFLOAT((iSlow1?((((fSlow8 * ((0.14907119265000002 * fTemp1) + (0.15936380355000002 * fTemp13))) + ((fSlow86 * fTemp9) + ((0.11904563149935221 * (fTemp21 + fTemp22)) + ((fSlow4 * fTemp23) + ((fSlow91 * fTemp7) + (fSlow92 * fTemp12)))))) + (fSlow93 * fTemp14)) + (fSlow94 * fTemp16)):(iSlow2?((0.24993000000000001 * fTemp7) + (((((0.335413669149 * ((fSlow8 * fTemp1) + (fSlow7 * fTemp2))) + (fSlow82 * fTemp12)) + (fSlow83 * fTemp13)) + (fSlow84 * fTemp14)) + (fSlow85 * fTemp16))):fTemp7))); - double fTemp24 = ((fSlow4 * fTemp13) + (fSlow9 * fTemp15)); - output6[i] = FAUSTFLOAT((iSlow1?((fSlow8 * ((0.17213247615000002 * fTemp2) + (0.16903075950000004 * fTemp14))) + ((fSlow96 * fTemp9) + ((fSlow88 * fTemp18) + ((fSlow97 * fTemp5) + ((fSlow75 * fTemp6) + ((fSlow65 * fTemp3) + ((fSlow39 * fTemp1) + ((fSlow12 * fTemp0) + (fSlow98 * fTemp24))))))))):(iSlow2?((0.24993000000000001 * fTemp5) + ((fSlow95 * fTemp24) + ((fSlow8 * ((0.38730209625899997 * fTemp2) + (0.38032316126999999 * fTemp14))) + ((fSlow25 * fTemp1) + (fSlow57 * fTemp3))))):fTemp5))); - output7[i] = FAUSTFLOAT((iSlow1?((fSlow8 * ((0.14907119265000002 * fTemp3) + (0.15936380355000002 * fTemp15))) + ((fSlow101 * fTemp14) + ((fSlow9 * (fTemp23 + (fSlow74 * fTemp9))) + ((fSlow102 * fTemp8) + ((0.11904563149935221 * ((fSlow18 * fTemp6) + (fSlow16 * fTemp7))) + (fSlow103 * fTemp19)))))):(iSlow2?((0.24993000000000001 * fTemp8) + ((fSlow99 * fTemp19) + ((fSlow83 * fTemp15) + ((0.335413669149 * ((fSlow10 * fTemp2) + (fSlow8 * fTemp3))) + (fSlow100 * fTemp14))))):fTemp8))); - output8[i] = FAUSTFLOAT((iSlow1?((fSlow9 * ((fSlow74 * fTemp8) + (fSlow106 * fTemp17))) + ((fSlow79 * fTemp15) + ((fSlow6 * ((((fSlow27 * fTemp3) + (fSlow107 * fTemp0)) + (fSlow108 * fTemp10)) + (fSlow109 * fTemp13))) + ((fSlow77 * fTemp9) + ((fSlow86 * fTemp7) + ((fSlow96 * fTemp5) + ((fSlow32 * fTemp1) + (fSlow78 * fTemp16)))))))):(iSlow2?((0.24993000000000001 * fTemp9) + ((fSlow6 * ((((fSlow23 * fTemp3) + (fSlow104 * fTemp10)) + (fSlow105 * fTemp13)) + (fSlow67 * fTemp17))) + ((fSlow68 * fTemp16) + ((fSlow26 * fTemp1) + (fSlow69 * fTemp15))))):fTemp9))); - double fTemp25 = ((fSlow9 * fTemp12) + (fSlow4 * fTemp16)); - output9[i] = FAUSTFLOAT((iSlow1?((fSlow111 * fTemp25) + ((fSlow112 * fTemp15) + (((fSlow6 * (((fSlow73 * fTemp6) + (fSlow113 * ((fSlow14 * fTemp3) + (fSlow20 * fTemp1)))) + (fSlow108 * fTemp9))) + (fSlow114 * fTemp10)) + (fSlow115 * fTemp13)))):(iSlow2?((fSlow110 * ((fSlow9 * fTemp6) + (fSlow4 * fTemp9))) + (0.24993000000000001 * fTemp10)):fTemp10))); - double fTemp26 = (((fSlow8 * fTemp6) + (fSlow10 * fTemp7)) + (fSlow7 * fTemp8)); - output10[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp12) + (((fSlow17 * ((fSlow9 * ((0.11340041877160077 * fTemp10) + (0.087839570289250796 * fTemp13))) + (fSlow116 * fTemp15))) + (((0.14085684693651698 * (((fSlow19 * fTemp1) + (fSlow16 * fTemp2)) + (fSlow18 * fTemp3))) + (0.12598816230000001 * fTemp26)) + (fSlow117 * fTemp14))) + (fSlow118 * fTemp17))):(iSlow2?((0.28347631111800004 * fTemp26) + (0.24993000000000001 * fTemp12)):fTemp12))); - double fTemp27 = ((fSlow122 * fTemp2) + (fSlow98 * fTemp5)); - output11[i] = FAUSTFLOAT((iSlow1?((fSlow16 * ((0.11110937081927783 * fTemp15) + (0.071720688119052231 * fTemp17))) + (((fSlow17 * ((fSlow119 * fTemp12) + (fSlow120 * fTemp14))) + (((((fSlow79 * fTemp6) + ((fSlow45 * fTemp3) + ((fSlow43 * fTemp1) + (fSlow121 * fTemp7)))) + (fSlow4 * (fTemp27 + (fSlow123 * fTemp9)))) + (fSlow115 * fTemp10)) + (fSlow125 * fTemp13))) + (fSlow126 * fTemp16))):(iSlow2?((((fSlow69 * fTemp6) + (fSlow83 * fTemp7)) + (fSlow7 * ((0.31053251232900003 * fTemp5) + (0.089643179340000004 * fTemp9)))) + (0.24993000000000001 * fTemp13)):fTemp13))); - output12[i] = FAUSTFLOAT((iSlow1?(((fSlow128 * fTemp24) + (((fSlow101 * fTemp8) + ((fSlow93 * fTemp7) + ((fSlow63 * fTemp3) + ((fSlow54 * fTemp2) + ((fSlow44 * fTemp1) + ((fSlow117 * fTemp12) + (fSlow129 * fTemp5))))))) + (fSlow130 * fTemp14))) + (fSlow131 * fTemp16)):(iSlow2?((((fSlow84 * fTemp7) + (fSlow127 * fTemp5)) + (fSlow100 * fTemp8)) + (0.24993000000000001 * fTemp14)):fTemp14))); - output13[i] = FAUSTFLOAT((iSlow1?(((fSlow9 * (fTemp27 + (fSlow133 * fTemp16))) + ((fSlow134 * fTemp15) + ((fSlow17 * ((fSlow116 * fTemp12) + (fSlow135 * fTemp14))) + ((fSlow136 * fTemp13) + ((fSlow112 * fTemp10) + (((fSlow80 * fTemp6) + ((fSlow62 * fTemp3) + ((fSlow45 * fTemp1) + (fSlow121 * fTemp8)))) + (fSlow79 * fTemp9))))))) + (fSlow115 * fTemp17)):(iSlow2?((((fSlow132 * fTemp5) + ((fSlow70 * fTemp6) + (fSlow83 * fTemp8))) + (fSlow69 * fTemp9)) + (0.24993000000000001 * fTemp15)):fTemp15))); - double fTemp28 = ((fSlow10 * fTemp8) + (fSlow8 * fTemp9)); - output14[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp16) + (((fSlow131 * fTemp14) + (((fSlow94 * fTemp7) + ((0.14085684693651698 * ((fSlow19 * fTemp3) + (fSlow21 * fTemp2))) + ((fSlow46 * fTemp1) + (0.12598816230000001 * fTemp28)))) + (fSlow126 * fTemp13))) + (fSlow17 * (((fSlow119 * fTemp15) + (fSlow137 * fTemp10)) + (fSlow138 * fTemp17))))):(iSlow2?(((fSlow85 * fTemp7) + (0.28347631111800004 * fTemp28)) + (0.24993000000000001 * fTemp16)):fTemp16))); - output15[i] = FAUSTFLOAT((iSlow1?(((fSlow115 * fTemp15) + ((fSlow6 * (((fSlow73 * fTemp9) + (fSlow31 * fTemp3)) + (fSlow140 * fTemp13))) + ((fSlow118 * fTemp12) + ((fSlow81 * fTemp6) + ((fSlow47 * fTemp1) + (fSlow141 * fTemp16)))))) + (fSlow114 * fTemp17)):(iSlow2?(((fSlow71 * fTemp6) + (fSlow139 * fTemp9)) + (0.24993000000000001 * fTemp17)):fTemp17))); - double fTemp29 = ((fSlow9 * fTemp10) + (fSlow4 * fTemp17)); - output16[i] = FAUSTFLOAT((iSlow1?(fSlow6 * (((fSlow143 * fTemp10) + (fSlow144 * ((fSlow20 * fTemp6) + (fSlow14 * fTemp9)))) + (fSlow145 * fTemp17))):(iSlow2?(fSlow142 * fTemp29):0.0))); - output17[i] = FAUSTFLOAT((iSlow1?((0.12858399051272834 * ((fTemp22 + (fTemp21 + (fSlow21 * fTemp7))) + (fSlow18 * fTemp9))) + ((fSlow148 * fTemp10) + (fSlow149 * fTemp25))):(iSlow2?((fSlow146 * fTemp10) + (fSlow147 * fTemp25)):0.0))); - double fTemp30 = ((fSlow4 * fTemp15) + (fSlow9 * fTemp13)); - output18[i] = FAUSTFLOAT((iSlow1?(((fSlow153 * fTemp10) + ((fSlow154 * fTemp6) + ((fSlow155 * fTemp20) + (fSlow156 * fTemp12)))) + (fSlow6 * ((((fSlow157 * fTemp13) + (fSlow158 * fTemp5)) + (fSlow159 * fTemp15)) + (fSlow160 * fTemp17)))):(iSlow2?(((fSlow150 * fTemp10) + (fSlow151 * fTemp12)) + (fSlow6 * ((fSlow152 * fTemp17) + (0.25877702143799997 * fTemp30)))):0.0))); - double fTemp31 = (fSlow170 * fTemp14); - output19[i] = FAUSTFLOAT((iSlow1?(((fSlow163 * fTemp12) + ((fSlow164 * fTemp8) + ((fSlow167 * fTemp7) + ((fSlow168 * fTemp6) + (fSlow169 * fTemp13))))) + (fSlow4 * (((fSlow17 * ((0.16835609239505758 * fTemp5) + (0.048600210211011685 * fTemp9))) + fTemp31) + (fSlow171 * fTemp16)))):(iSlow2?(((fSlow161 * fTemp12) + (fSlow162 * fTemp13)) + (fSlow7 * ((0.29881030912199996 * fTemp14) + (0.11572855643700003 * fTemp16)))):0.0))); - output20[i] = FAUSTFLOAT((iSlow1?(((fSlow175 * fTemp13) + ((fSlow176 * ((fSlow14 * fTemp6) + (fSlow20 * fTemp9))) + ((fSlow177 * fTemp8) + ((fSlow178 * fTemp7) + ((fSlow179 * fTemp5) + (fSlow180 * fTemp14)))))) + (fSlow181 * fTemp15)):(iSlow2?(((fSlow172 * fTemp13) + (fSlow173 * fTemp14)) + (fSlow174 * fTemp15)):0.0))); - output21[i] = FAUSTFLOAT((iSlow1?(((fSlow9 * (fTemp31 + (fSlow184 * fTemp5))) + ((fSlow185 * fTemp12) + ((fSlow168 * fTemp9) + ((fSlow186 * fTemp8) + ((fSlow164 * fTemp7) + ((fSlow187 * fTemp6) + (fSlow169 * fTemp15))))))) + (fSlow163 * fTemp16)):(iSlow2?(((fSlow182 * fTemp14) + ((fSlow183 * fTemp12) + (fSlow162 * fTemp15))) + (fSlow161 * fTemp16)):0.0))); - output22[i] = FAUSTFLOAT((iSlow1?(((fSlow9 * ((fSlow155 * fTemp8) + (fSlow191 * fTemp15))) + ((fSlow192 * fTemp13) + ((fSlow193 * fTemp10) + ((fSlow154 * fTemp9) + ((fSlow90 * fTemp5) + ((fSlow194 * fTemp7) + (fSlow156 * fTemp16))))))) + (fSlow153 * fTemp17)):(iSlow2?(((fSlow188 * fTemp13) + ((fSlow189 * fTemp10) + ((fSlow190 * fTemp15) + (fSlow151 * fTemp16)))) + (fSlow150 * fTemp17)):0.0))); - output23[i] = FAUSTFLOAT((iSlow1?((fSlow197 * fTemp12) + ((0.12858399051272834 * ((fSlow19 * fTemp9) + (fSlow21 * fTemp8))) + ((fSlow198 * fTemp7) + ((fSlow199 * fTemp6) + ((fSlow200 * fTemp16) + (fSlow148 * fTemp17)))))):(iSlow2?(((fSlow195 * fTemp12) + (fSlow196 * fTemp16)) + (fSlow146 * fTemp17)):0.0))); - output24[i] = FAUSTFLOAT((iSlow1?((fSlow6 * ((fSlow143 * fTemp17) + (fSlow203 * fTemp9))) + ((fSlow204 * fTemp6) + (fSlow205 * fTemp10))):(iSlow2?((fSlow201 * fTemp10) + (fSlow202 * fTemp17)):0.0))); - output25[i] = FAUSTFLOAT((iSlow1?(fSlow206 * ((fSlow20 * fTemp10) + (fSlow14 * fTemp17))):0.0)); - output26[i] = FAUSTFLOAT((iSlow1?((fSlow207 * ((fSlow20 * fTemp12) + (fSlow14 * fTemp16))) + (fSlow208 * fTemp29)):0.0)); - output27[i] = FAUSTFLOAT((iSlow1?((fSlow209 * ((fSlow14 * fTemp15) + (fSlow20 * fTemp13))) + ((fSlow210 * fTemp10) + (fSlow211 * fTemp25))):0.0)); - output28[i] = FAUSTFLOAT((iSlow1?((((fSlow212 * fTemp10) + (fSlow213 * fTemp12)) + (fSlow214 * fTemp14)) + (fSlow17 * ((fSlow215 * fTemp17) + (0.13242313106619366 * fTemp30)))):0.0)); - output29[i] = FAUSTFLOAT((iSlow1?(((fSlow18 * ((0.16346674475525791 * fTemp14) + (0.063310424937196505 * fTemp16))) + ((((fSlow216 * fTemp10) + (fSlow217 * fTemp12)) + (fSlow220 * fTemp13)) + (fSlow221 * fTemp15))) + (fSlow222 * fTemp17)):0.0)); - output30[i] = FAUSTFLOAT((iSlow1?((fSlow223 * ((fSlow14 * fTemp12) + (fSlow20 * fTemp16))) + ((fSlow224 * fTemp15) + ((fSlow225 * fTemp13) + (fSlow226 * fTemp14)))):0.0)); - output31[i] = FAUSTFLOAT((iSlow1?((fSlow227 * ((fSlow14 * fTemp10) + (fSlow20 * fTemp17))) + ((fSlow217 * fTemp16) + ((fSlow228 * fTemp15) + ((fSlow221 * fTemp13) + ((fSlow229 * fTemp12) + (fSlow230 * fTemp14)))))):0.0)); - output32[i] = FAUSTFLOAT((iSlow1?((((fSlow231 * fTemp14) + ((fSlow232 * fTemp13) + ((fSlow233 * fTemp10) + (fSlow234 * fTemp15)))) + (fSlow213 * fTemp16)) + (fSlow212 * fTemp17)):0.0)); - output33[i] = FAUSTFLOAT((iSlow1?(((fSlow231 * fTemp15) + ((fSlow235 * fTemp13) + ((fSlow236 * fTemp12) + (fSlow237 * fTemp16)))) + (fSlow210 * fTemp17)):0.0)); - output34[i] = FAUSTFLOAT((iSlow1?((fSlow238 * fTemp12) + ((fSlow239 * fTemp10) + ((fSlow240 * fTemp16) + (fSlow241 * fTemp17)))):0.0)); - output35[i] = FAUSTFLOAT((iSlow1?((fSlow242 * fTemp10) + (fSlow243 * fTemp17)):0.0)); + double fTemp9 = double(input6[i]); + output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + ((fSlow12 * ((fSlow14 * fTemp5) + (fSlow16 * fTemp6))) + ((fSlow17 * (((fConst6 * fTemp4) + (fSlow19 * fTemp7)) + (fSlow21 * fTemp8))) + ((fSlow22 * fTemp1) + (fSlow24 * fTemp9))))):(iSlow2?((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))):fTemp0))); + double fTemp10 = double(input10[i]); + double fTemp11 = double(input9[i]); + double fTemp12 = double(input11[i]); + double fTemp13 = double(input12[i]); + double fTemp14 = double(input13[i]); + double fTemp15 = double(input14[i]); + double fTemp16 = double(input15[i]); + output1[i] = FAUSTFLOAT((iSlow1?(((((((fSlow33 * ((fConst11 * fTemp5) + (fSlow34 * fTemp10))) + ((fSlow36 * fTemp11) + ((fSlow37 * fTemp6) + ((fSlow38 * fTemp9) + ((fSlow10 * ((fSlow17 * ((fConst6 * fTemp0) + (fSlow39 * fTemp1))) + (fSlow41 * fTemp3))) + ((fSlow44 * fTemp2) + (fSlow45 * fTemp7))))))) + (fSlow48 * fTemp12)) + (fSlow51 * fTemp13)) + (fSlow53 * fTemp14)) + (fSlow54 * fTemp15)) + (fSlow55 * fTemp16)):(iSlow2?((0.24993000000000001 * fTemp2) + ((((fSlow25 * ((fSlow26 * fTemp0) + (fSlow27 * fTemp5))) + (fSlow28 * fTemp7)) + (fSlow30 * fTemp9)) + (fSlow31 * fTemp6))):fTemp2))); + double fTemp17 = ((fSlow10 * fTemp7) + (fSlow11 * fTemp8)); + output2[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow57 * fTemp10) + (fSlow58 * fTemp15))) + ((fSlow17 * (((fConst11 * fTemp17) + (fSlow59 * fTemp12)) + (fSlow60 * fTemp14))) + (((fSlow61 * fTemp1) + (fSlow3 * ((((fSlow62 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow63 * fTemp3)) + (0.17213247615000002 * fTemp9)))) + (fSlow64 * fTemp13)))):(iSlow2?((0.24993000000000001 * fTemp1) + ((fSlow3 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp9))) + (fSlow56 * fTemp17))):fTemp1))); + output3[i] = FAUSTFLOAT((iSlow1?(((fSlow17 * (((fConst11 * ((fSlow10 * fTemp5) + (fSlow11 * fTemp6))) + (fSlow68 * fTemp10)) + (fSlow69 * fTemp15))) + ((fSlow70 * fTemp14) + ((fSlow72 * fTemp13) + (((fSlow11 * ((((fSlow73 * fTemp0) + (fSlow75 * fTemp2)) + (fSlow76 * fTemp1)) + (fSlow77 * fTemp11))) + ((fSlow78 * fTemp9) + ((fSlow79 * fTemp3) + (fSlow45 * fTemp8)))) + (fSlow53 * fTemp12))))) + (fSlow36 * fTemp16)):(iSlow2?((0.24993000000000001 * fTemp3) + ((fSlow25 * (((fSlow65 * fTemp0) + (fSlow66 * fTemp5)) + (fSlow27 * fTemp6))) + ((fSlow67 * fTemp9) + (fSlow28 * fTemp8)))):fTemp3))); + output4[i] = FAUSTFLOAT((iSlow1?(((((fSlow17 * ((((fSlow85 * fTemp3) + (fSlow86 * fTemp7)) + (fSlow87 * fTemp8)) + (fSlow88 * fTemp11))) + ((fSlow89 * fTemp9) + ((fSlow91 * fTemp5) + ((fSlow11 * ((fSlow92 * fTemp2) + (fSlow93 * fTemp0))) + (fSlow94 * fTemp10))))) + (fSlow95 * fTemp12)) + (fSlow96 * fTemp14)) + (fSlow97 * fTemp16)):(iSlow2?((0.24993000000000001 * fTemp5) + (((((fSlow25 * ((0.30902256091651653 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3))) + (fSlow80 * fTemp11))) + (fSlow81 * fTemp10)) + (fSlow82 * fTemp12)) + (fSlow83 * fTemp14)) + (fSlow84 * fTemp16))):fTemp5))); + output5[i] = FAUSTFLOAT((iSlow1?((((fSlow3 * (((fSlow101 * fTemp0) + (0.14907119265000002 * fTemp2)) + (0.15936380355000002 * fTemp12))) + ((fSlow17 * ((((fSlow85 * fTemp1) + (fSlow86 * fTemp5)) + (fSlow102 * fTemp9)) + (fSlow103 * fTemp10))) + ((fSlow104 * fTemp6) + ((fSlow107 * fTemp7) + (fSlow108 * fTemp8))))) + (fSlow109 * fTemp13)) + (fSlow110 * fTemp15)):(iSlow2?((0.24993000000000001 * fTemp7) + ((((fSlow25 * ((fSlow66 * fTemp1) + (fSlow98 * fTemp10))) + (fSlow3 * ((0.335413669149 * fTemp2) + (0.35857228434300004 * fTemp12)))) + (fSlow99 * fTemp13)) + (fSlow100 * fTemp15))):fTemp7))); + double fTemp18 = ((fSlow10 * fTemp12) + (fSlow11 * fTemp14)); + output6[i] = FAUSTFLOAT((iSlow1?((fSlow3 * ((((fSlow112 * fTemp7) + (0.17213247615000002 * fTemp1)) + (fSlow113 * fTemp8)) + (0.16903075950000004 * fTemp13))) + ((fSlow114 * fTemp6) + ((fSlow115 * fTemp9) + ((fSlow89 * fTemp5) + ((fSlow78 * fTemp3) + ((fSlow38 * fTemp2) + ((fSlow24 * fTemp0) + (fSlow116 * fTemp18)))))))):(iSlow2?((0.24993000000000001 * fTemp9) + ((fSlow111 * fTemp18) + ((fSlow3 * ((0.38730209625899997 * fTemp1) + (0.38032316126999999 * fTemp13))) + ((fSlow30 * fTemp2) + (fSlow67 * fTemp3))))):fTemp9))); + output7[i] = FAUSTFLOAT((iSlow1?((fSlow17 * ((((((fSlow11 * ((fConst11 * fTemp1) + (fSlow119 * fTemp0))) + (fSlow87 * fTemp5)) + (fSlow120 * fTemp9)) + (fSlow86 * fTemp6)) + (fSlow121 * fTemp10)) + (fSlow103 * fTemp15))) + ((fSlow3 * ((0.14907119265000002 * fTemp3) + (0.15936380355000002 * fTemp14))) + ((fSlow122 * fTemp13) + ((fSlow108 * fTemp7) + (fSlow123 * fTemp8))))):(iSlow2?((0.24993000000000001 * fTemp8) + ((fSlow25 * (((fSlow27 * fTemp1) + (fSlow117 * fTemp10)) + (fSlow98 * fTemp15))) + ((fSlow118 * fTemp13) + (fSlow3 * ((0.335413669149 * fTemp3) + (0.35857228434300004 * fTemp14)))))):fTemp8))); + output8[i] = FAUSTFLOAT((iSlow1?((fSlow17 * ((((fSlow11 * ((fConst11 * fTemp3) + (fSlow126 * fTemp8))) + (fSlow127 * fTemp11)) + (fSlow128 * fTemp12)) + (fSlow88 * fTemp16))) + ((fSlow95 * fTemp14) + ((fSlow91 * fTemp6) + ((fSlow114 * fTemp9) + ((fSlow104 * fTemp7) + ((fSlow37 * fTemp2) + ((fSlow129 * fTemp0) + (fSlow94 * fTemp15)))))))):(iSlow2?((0.24993000000000001 * fTemp6) + ((fSlow25 * ((((fSlow27 * fTemp3) + (fSlow124 * fTemp11)) + (fSlow125 * fTemp12)) + (fSlow80 * fTemp16))) + ((fSlow81 * fTemp15) + ((fSlow31 * fTemp2) + (fSlow82 * fTemp14))))):fTemp6))); + double fTemp19 = ((fSlow11 * fTemp5) + (fSlow10 * fTemp6)); + output9[i] = FAUSTFLOAT((iSlow1?((fSlow17 * (((fSlow131 * fTemp10) + (fConst31 * fTemp19)) + (fSlow132 * fTemp15))) + ((fSlow133 * fTemp14) + (((fSlow12 * ((fSlow134 * fTemp3) + (fSlow135 * fTemp2))) + (fSlow136 * fTemp11)) + (fSlow137 * fTemp12)))):(iSlow2?((fSlow130 * fTemp19) + (0.24993000000000001 * fTemp11)):fTemp11))); + output10[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp10) + (((fSlow17 * ((((fSlow121 * fTemp8) + (fSlow131 * fTemp11)) + (fSlow139 * fTemp12)) + (fSlow140 * fTemp14))) + (((fSlow3 * ((fSlow141 * fTemp3) + (0.12598816230000001 * fTemp5))) + (fSlow11 * (((fSlow142 * fTemp2) + (fSlow143 * fTemp1)) + (fSlow144 * fTemp7)))) + (fSlow145 * fTemp13))) + (fSlow146 * fTemp16))):(iSlow2?(((fSlow81 * fTemp5) + (fSlow138 * ((fSlow11 * fTemp7) + (fSlow10 * fTemp8)))) + (0.24993000000000001 * fTemp10)):fTemp10))); + output11[i] = FAUSTFLOAT((iSlow1?((fSlow149 * ((0.36623943296439643 * fTemp14) + (0.23640620007885615 * fTemp16))) + (((fSlow17 * (((fSlow150 * ((0.127153838554589 * fTemp9) + (0.036706218836248881 * fTemp6))) + (fSlow139 * fTemp10)) + (fSlow151 * fTemp13))) + ((((fSlow3 * ((fSlow152 * fTemp1) + (0.15936380355000002 * fTemp7))) + ((fSlow95 * fTemp5) + ((fSlow48 * fTemp2) + (fSlow53 * fTemp3)))) + (fSlow137 * fTemp11)) + (fSlow154 * fTemp12))) + (fSlow155 * fTemp15))):(iSlow2?((((fSlow82 * fTemp5) + (fSlow147 * fTemp7)) + (fSlow148 * ((0.28609910994747967 * fTemp9) + (0.082589850671945866 * fTemp6)))) + (0.24993000000000001 * fTemp12)):fTemp12))); + output12[i] = FAUSTFLOAT((iSlow1?(((fSlow3 * (((fSlow157 * fTemp12) + (0.16903075950000004 * fTemp9)) + (fSlow158 * fTemp14))) + (((fSlow145 * fTemp10) + (((((fSlow51 * fTemp2) + (fSlow64 * fTemp1)) + (fSlow72 * fTemp3)) + (fSlow109 * fTemp7)) + (fSlow122 * fTemp8))) + (fSlow159 * fTemp13))) + (fSlow160 * fTemp15)):(iSlow2?((((fSlow99 * fTemp7) + (fSlow156 * fTemp9)) + (fSlow118 * fTemp8)) + (0.24993000000000001 * fTemp13)):fTemp13))); + output13[i] = FAUSTFLOAT((iSlow1?(((fSlow17 * ((((fSlow11 * ((fSlow162 * fTemp1) + (fConst65 * fTemp9))) + (fSlow140 * fTemp10)) + (fSlow163 * fTemp13)) + (fSlow139 * fTemp15))) + ((((fSlow133 * fTemp11) + (((fSlow96 * fTemp5) + ((fSlow70 * fTemp3) + ((fSlow53 * fTemp2) + (fSlow164 * fTemp8)))) + (fSlow95 * fTemp6))) + (fSlow165 * fTemp12)) + (fSlow166 * fTemp14))) + (fSlow137 * fTemp16)):(iSlow2?((((fSlow161 * fTemp9) + ((fSlow83 * fTemp5) + (fSlow147 * fTemp8))) + (fSlow82 * fTemp6)) + (0.24993000000000001 * fTemp14)):fTemp14))); + output14[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp15) + (((fSlow160 * fTemp13) + (((fSlow110 * fTemp7) + ((fSlow168 * fTemp1) + ((fSlow54 * fTemp2) + (fSlow94 * fTemp6)))) + (fSlow155 * fTemp12))) + (fSlow17 * ((((fSlow11 * ((fConst40 * fTemp8) + (fSlow34 * fTemp3))) + (fSlow132 * fTemp11)) + (fSlow139 * fTemp14)) + (fSlow131 * fTemp16))))):(iSlow2?((((fSlow100 * fTemp7) + (fSlow167 * fTemp8)) + (fSlow81 * fTemp6)) + (0.24993000000000001 * fTemp15)):fTemp15))); + output15[i] = FAUSTFLOAT((iSlow1?(((fSlow33 * ((fConst31 * fTemp6) + (fSlow170 * fTemp15))) + ((fSlow137 * fTemp14) + ((fSlow12 * ((fSlow171 * fTemp12) + (fSlow135 * fTemp3))) + ((fSlow146 * fTemp10) + ((fSlow55 * fTemp2) + (fSlow97 * fTemp5)))))) + (fSlow136 * fTemp16)):(iSlow2?(((fSlow84 * fTemp5) + (fSlow169 * fTemp6)) + (0.24993000000000001 * fTemp16)):fTemp16))); + double fTemp20 = ((fSlow11 * fTemp11) + (fSlow10 * fTemp16)); + output16[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow173 * fTemp5) + (fSlow174 * fTemp6))) + (fSlow175 * fTemp20)):(iSlow2?(fSlow172 * fTemp20):0.0))); + double fTemp21 = ((fSlow11 * fTemp10) + (fSlow10 * fTemp15)); + output17[i] = FAUSTFLOAT((iSlow1?((fSlow3 * ((fSlow178 * fTemp19) + (0.11111100750000003 * fTemp11))) + ((fSlow12 * ((fSlow179 * fTemp8) + (fSlow180 * fTemp7))) + (fSlow181 * fTemp21))):(iSlow2?((fSlow176 * fTemp11) + (fSlow177 * fTemp21)):0.0))); + output18[i] = FAUSTFLOAT((iSlow1?(((fSlow11 * (((fSlow185 * fTemp7) + (fSlow186 * fTemp9)) + (fSlow187 * fTemp12))) + ((fSlow3 * ((fSlow188 * fTemp8) + (0.14547853605000002 * fTemp10))) + ((fSlow189 * fTemp5) + (fSlow190 * fTemp11)))) + (fSlow148 * ((0.10596150257755792 * fTemp14) + (0.027359094218383301 * fTemp16)))):(iSlow2?(((fSlow182 * fTemp11) + (fSlow183 * fTemp10)) + (fSlow25 * ((fSlow184 * fTemp16) + (0.23841585846519298 * ((fSlow11 * fTemp12) + (fSlow10 * fTemp14)))))):0.0))); + output19[i] = FAUSTFLOAT((iSlow1?(((fSlow3 * ((fSlow193 * ((0.41620233757211678 * fTemp9) + (0.12014724747147398 * fTemp6))) + (0.16264988730000002 * fTemp12))) + ((((fSlow194 * fTemp5) + (fSlow197 * fTemp7)) + (fSlow198 * fTemp8)) + (fSlow199 * fTemp10))) + (fSlow148 * ((0.12235394458243126 * fTemp13) + (0.047387405817769852 * fTemp15)))):(iSlow2?(((fSlow191 * fTemp10) + (fSlow192 * fTemp12)) + (fSlow148 * ((0.27529923627565928 * fTemp13) + (0.10662277113532474 * fTemp15)))):0.0))); + output20[i] = FAUSTFLOAT((iSlow1?(((fSlow203 * fTemp12) + ((fSlow12 * ((fSlow204 * fTemp5) + (fSlow205 * fTemp6))) + ((fSlow206 * fTemp8) + ((fSlow207 * fTemp7) + ((fSlow208 * fTemp9) + (fSlow209 * fTemp13)))))) + (fSlow210 * fTemp14)):(iSlow2?(((fSlow200 * fTemp12) + (fSlow201 * fTemp13)) + (fSlow202 * fTemp14)):0.0))); + output21[i] = FAUSTFLOAT((iSlow1?(((fSlow33 * ((fSlow213 * fTemp9) + (fConst87 * fTemp13))) + ((fSlow214 * fTemp10) + ((fSlow194 * fTemp6) + ((fSlow215 * fTemp8) + ((fSlow198 * fTemp7) + ((fSlow216 * fTemp5) + (fSlow217 * fTemp14))))))) + (fSlow199 * fTemp15)):(iSlow2?(((fSlow211 * fTemp13) + ((fSlow212 * fTemp10) + (fSlow192 * fTemp14))) + (fSlow191 * fTemp15)):0.0))); + output22[i] = FAUSTFLOAT((iSlow1?(((fSlow33 * ((fSlow221 * fTemp8) + (fConst90 * fTemp14))) + ((fSlow222 * fTemp12) + ((fSlow223 * fTemp11) + ((fSlow189 * fTemp6) + ((fSlow106 * fTemp9) + ((fSlow224 * fTemp7) + (fSlow225 * fTemp15))))))) + (fSlow190 * fTemp16)):(iSlow2?(((fSlow218 * fTemp12) + ((fSlow219 * fTemp11) + ((fSlow220 * fTemp14) + (fSlow183 * fTemp15)))) + (fSlow182 * fTemp16)):0.0))); + output23[i] = FAUSTFLOAT((iSlow1?((fSlow33 * ((fConst91 * fTemp15) + (fSlow228 * fTemp6))) + ((fSlow229 * fTemp10) + ((fSlow230 * fTemp8) + ((fSlow231 * fTemp7) + ((fSlow232 * fTemp5) + (fSlow233 * fTemp16)))))):(iSlow2?(((fSlow226 * fTemp10) + (fSlow227 * fTemp15)) + (fSlow176 * fTemp16)):0.0))); + output24[i] = FAUSTFLOAT((iSlow1?((fSlow236 * fTemp11) + ((fSlow237 * fTemp5) + ((fSlow238 * fTemp6) + (fSlow239 * fTemp16)))):(iSlow2?((fSlow234 * fTemp11) + (fSlow235 * fTemp16)):0.0))); + output25[i] = FAUSTFLOAT((iSlow1?(fSlow12 * ((fSlow240 * fTemp11) + (fSlow241 * fTemp16))):0.0)); + output26[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow242 * fTemp10) + (fSlow243 * fTemp15))) + (fSlow244 * fTemp20)):0.0)); + output27[i] = FAUSTFLOAT((iSlow1?((fSlow245 * fTemp21) + ((fSlow246 * fTemp11) + (fSlow12 * ((fSlow247 * fTemp14) + (fSlow248 * fTemp12))))):0.0)); + output28[i] = FAUSTFLOAT((iSlow1?((((fSlow249 * fTemp11) + (fSlow250 * fTemp10)) + (fSlow11 * ((fSlow251 * fTemp12) + (fSlow252 * fTemp13)))) + (fSlow253 * ((0.3273704914048397 * fTemp14) + (0.084526530349225165 * fTemp16)))):0.0)); + output29[i] = FAUSTFLOAT((iSlow1?(((fSlow253 * ((0.40411511288106022 * fTemp13) + (0.15651317678313359 * fTemp15))) + ((((fSlow254 * fTemp11) + (fSlow255 * fTemp10)) + (fSlow258 * fTemp12)) + (fSlow259 * fTemp14))) + (fSlow260 * fTemp16)):0.0)); + output30[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow261 * fTemp10) + (fSlow262 * fTemp15))) + ((fSlow263 * fTemp14) + ((fSlow264 * fTemp12) + (fSlow265 * fTemp13)))):0.0)); + output31[i] = FAUSTFLOAT((iSlow1?((fSlow255 * fTemp15) + ((fSlow266 * fTemp14) + ((fSlow11 * ((fSlow267 * fTemp11) + (fSlow268 * fTemp13))) + ((fSlow259 * fTemp12) + ((fSlow269 * fTemp10) + (fSlow254 * fTemp16)))))):0.0)); + output32[i] = FAUSTFLOAT((iSlow1?((((fSlow270 * fTemp13) + ((fSlow271 * fTemp12) + ((fSlow272 * fTemp11) + (fSlow273 * fTemp14)))) + (fSlow250 * fTemp15)) + (fSlow249 * fTemp16)):0.0)); + output33[i] = FAUSTFLOAT((iSlow1?(((fSlow270 * fTemp14) + ((fSlow274 * fTemp12) + ((fSlow275 * fTemp10) + (fSlow276 * fTemp15)))) + (fSlow246 * fTemp16)):0.0)); + output34[i] = FAUSTFLOAT((iSlow1?((fSlow277 * fTemp10) + ((fSlow278 * fTemp11) + ((fSlow279 * fTemp15) + (fSlow280 * fTemp16)))):0.0)); + output35[i] = FAUSTFLOAT((iSlow1?((fSlow281 * fTemp11) + (fSlow282 * fTemp16)):0.0)); } @@ -1324,7 +1600,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1556,7 +1831,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1619,7 +1894,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1648,11 +1923,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamHCardio2Mono1.cpp b/source/HOAUGens/HOABeamHCardio2Mono1.cpp index b05bd9dc2a..52f7d3b005 100644 --- a/source/HOAUGens/HOABeamHCardio2Mono1.cpp +++ b/source/HOAUGens/HOABeamHCardio2Mono1.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOABeamHCardio2Mono1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,19 +613,24 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); -double sin(double dummy0); -double cos(double dummy0); +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -621,10 +640,11 @@ class mydsp : public dsp { double fConst0; FAUSTFLOAT fVslider0; double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fVbargraph0; + double fConst1; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; double fRec3[2]; FAUSTFLOAT fVbargraph1; double fRec4[2]; @@ -641,26 +661,26 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamHCardio2Mono1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -722,7 +742,8 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = (0.39894624032434478 * (sqrt((3.0 * (double(tgamma(1.0)) / double(tgamma(3.0))))) * double(tgamma(1.5)))); } @@ -774,9 +795,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -784,34 +805,34 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1dd3650", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a91300", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ddbb70", &fVbargraph1, -70.0, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a863b0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1de1440", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a96a50", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1de70d0", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a8bbe0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fVslider0, "2", ""); ui_interface->addVerticalSlider("Output Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "3", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "4", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); ui_interface->openHorizontalBox("Output"); ui_interface->declare(&fHbargraph0, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x1debef0", &fHbargraph0, -70.0, 6.0); + ui_interface->addHorizontalBargraph("0x3a9b5b0", &fHbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); @@ -824,27 +845,27 @@ class mydsp : public dsp { FAUSTFLOAT* input3 = inputs[3]; FAUSTFLOAT* output0 = outputs[0]; double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); - double fSlow1 = double(fVslider1); - double fSlow2 = double(fVslider2); - double fSlow3 = cos(fSlow2); - double fSlow4 = (sin(fSlow1) * fSlow3); - double fSlow5 = sin(fSlow2); - double fSlow6 = (cos(fSlow1) * fSlow3); + double fSlow1 = sin(double(fVslider1)); + double fSlow2 = (fConst1 * pow((1.0 - mydsp_faustpower2_f(fSlow1)), 0.5)); + double fSlow3 = double(fVslider2); + double fSlow4 = sin(fSlow3); + double fSlow5 = cos(fSlow3); + double fSlow6 = (0.43301700000000004 * fSlow1); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - double fTemp0 = double(input0[i]); + double fTemp0 = double(input1[i]); fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input1[i]); + double fTemp1 = double(input3[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input2[i]); + double fTemp2 = double(input0[i]); fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); fVbargraph2 = FAUSTFLOAT(fRec4[0]); - double fTemp3 = double(input3[i]); + double fTemp3 = double(input2[i]); fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = (fRec1[0] * ((0.24993000000000001 * fTemp0) + (0.43301700000000004 * (((fSlow4 * fTemp1) + (fSlow5 * fTemp2)) + (fSlow6 * fTemp3))))); + double fTemp4 = (fRec1[0] * ((fSlow2 * ((fSlow4 * fTemp0) + (fSlow5 * fTemp1))) + ((0.24993000000000001 * fTemp2) + (fSlow6 * fTemp3)))); fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fHbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp4); @@ -862,7 +883,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1094,7 +1114,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1157,7 +1177,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1186,11 +1206,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamHCardio2Mono2.cpp b/source/HOAUGens/HOABeamHCardio2Mono2.cpp index 544130632f..d20d7f3e79 100644 --- a/source/HOAUGens/HOABeamHCardio2Mono2.cpp +++ b/source/HOAUGens/HOABeamHCardio2Mono2.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOABeamHCardio2Mono2" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,15 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -616,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -626,20 +641,27 @@ class mydsp : public dsp { FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fVbargraph0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; FAUSTFLOAT fVslider2; FAUSTFLOAT fVslider3; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; double fRec3[2]; FAUSTFLOAT fVbargraph1; double fRec4[2]; FAUSTFLOAT fVbargraph2; double fRec5[2]; FAUSTFLOAT fVbargraph3; + double fConst5; double fRec6[2]; FAUSTFLOAT fVbargraph4; double fRec7[2]; FAUSTFLOAT fVbargraph5; + double fConst6; + double fConst7; double fRec8[2]; FAUSTFLOAT fVbargraph6; double fRec9[2]; @@ -656,26 +678,26 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamHCardio2Mono2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -757,7 +779,14 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.0)); + fConst2 = sqrt((3.0 * (fConst1 / double(tgamma(3.0))))); + fConst3 = double(tgamma(1.5)); + fConst4 = (0.39894624032434478 * (fConst2 * fConst3)); + fConst5 = (sqrt((5.0 * (fConst1 / double(tgamma(5.0))))) * double(tgamma(2.5))); + fConst6 = (0.17730759750868944 * fConst2); + fConst7 = (0.53191448209190839 * sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0)))))); } @@ -830,9 +859,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -840,58 +869,58 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ec8e30", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27ab680", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ed1720", &fVbargraph1, -70.0, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27a0520", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ed6ff0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27b0dd0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1edce90", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27a5d50", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ef7260", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27b8c40", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1efc8c0", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27c7560", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ee4a50", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27d3fc0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ef16d0", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27cd060", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1eeb6f0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x27bf0d0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fVslider0, "1", ""); ui_interface->addVerticalSlider("Order", &fVslider0, 1.0, 1.0, 2.0, 1.0); ui_interface->declare(&fVslider1, "2", ""); ui_interface->addVerticalSlider("Output Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "3", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider3, "4", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "3", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); ui_interface->openHorizontalBox("Output"); ui_interface->declare(&fHbargraph0, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x1f01c80", &fHbargraph0, -70.0, 6.0); + ui_interface->addHorizontalBargraph("0x27d90a0", &fHbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); @@ -910,53 +939,54 @@ class mydsp : public dsp { FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = ((int(double(fVslider0)) + -1) >= 1); double fSlow1 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow2 = double(fVslider2); - double fSlow3 = sin(fSlow2); - double fSlow4 = double(fVslider3); - double fSlow5 = cos(fSlow4); - double fSlow6 = (fSlow3 * fSlow5); - double fSlow7 = sin(fSlow4); - double fSlow8 = cos(fSlow2); - double fSlow9 = (fSlow8 * fSlow5); - double fSlow10 = (0.124224 * ((3.0 * mydsp_faustpower2_f(fSlow7)) + -1.0)); - double fSlow11 = (2.0 * fSlow2); - double fSlow12 = mydsp_faustpower2_f(fSlow5); - double fSlow13 = (cos(fSlow11) * fSlow12); - double fSlow14 = sin((2.0 * fSlow4)); - double fSlow15 = (fSlow8 * fSlow14); - double fSlow16 = (sin(fSlow11) * fSlow12); - double fSlow17 = (fSlow3 * fSlow14); + double fSlow2 = sin(double(fVslider2)); + double fSlow3 = mydsp_faustpower2_f(fSlow2); + double fSlow4 = (1.0 - fSlow3); + double fSlow5 = pow(fSlow4, 0.5); + double fSlow6 = (fConst4 * fSlow5); + double fSlow7 = double(fVslider3); + double fSlow8 = sin(fSlow7); + double fSlow9 = cos(fSlow7); + double fSlow10 = (0.43301700000000004 * fSlow2); + double fSlow11 = (fConst5 * fSlow4); + double fSlow12 = (0.70921930945587786 * (fSlow9 * fSlow8)); + double fSlow13 = (0.35460965472793893 * ((2.0 * mydsp_faustpower2_f(fSlow9)) + -1.0)); + double fSlow14 = (fConst3 * fSlow5); + double fSlow15 = (fConst7 * (fSlow2 * fSlow8)); + double fSlow16 = (fConst7 * (fSlow9 * fSlow2)); + double fSlow17 = (0.19245000000000004 * fSlow2); + double fSlow18 = (0.124224 * ((3.0 * fSlow3) + -1.0)); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow1 + (0.999 * fRec1[1])); - double fTemp0 = double(input0[i]); + double fTemp0 = double(input1[i]); fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input1[i]); + double fTemp1 = double(input3[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input2[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + double fTemp2 = ((fSlow8 * fTemp0) + (fSlow9 * fTemp1)); + double fTemp3 = double(input0[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph2 = FAUSTFLOAT(fRec4[0]); - double fTemp3 = double(input3[i]); - fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + double fTemp4 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = (((fSlow6 * fTemp1) + (fSlow7 * fTemp2)) + (fSlow9 * fTemp3)); - double fTemp5 = double(input6[i]); + double fTemp5 = double(input4[i]); fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph4 = FAUSTFLOAT(fRec6[0]); double fTemp6 = double(input8[i]); fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = double(input7[i]); + double fTemp7 = double(input5[i]); fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph6 = FAUSTFLOAT(fRec8[0]); - double fTemp8 = double(input4[i]); + double fTemp8 = double(input7[i]); fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph7 = FAUSTFLOAT(fRec9[0]); - double fTemp9 = double(input5[i]); + double fTemp9 = double(input6[i]); fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = (iSlow0?(fRec1[0] * ((((0.11112 * fTemp0) + (0.19245000000000004 * fTemp4)) + (fSlow10 * fTemp5)) + (0.2151622795194362 * ((fSlow13 * fTemp6) + ((fSlow15 * fTemp7) + ((fSlow16 * fTemp8) + (fSlow17 * fTemp9))))))):(fRec1[0] * ((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4)))); + double fTemp10 = (iSlow0?(fRec1[0] * ((fSlow11 * ((fSlow12 * fTemp5) + (fSlow13 * fTemp6))) + ((fSlow14 * (((fConst6 * fTemp2) + (fSlow15 * fTemp7)) + (fSlow16 * fTemp8))) + (((0.11112 * fTemp3) + (fSlow17 * fTemp4)) + (fSlow18 * fTemp9))))):(fRec1[0] * ((fSlow6 * fTemp2) + ((0.24993000000000001 * fTemp3) + (fSlow10 * fTemp4))))); fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fHbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp10); @@ -979,7 +1009,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1211,7 +1240,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1274,7 +1303,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1303,11 +1332,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOABeamHCardio2Mono3.cpp b/source/HOAUGens/HOABeamHCardio2Mono3.cpp index ce14ac85b9..8c48ccc90e 100644 --- a/source/HOAUGens/HOABeamHCardio2Mono3.cpp +++ b/source/HOAUGens/HOABeamHCardio2Mono3.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOABeamHCardio2Mono3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,15 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); -double sin(double dummy0); -double cos(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -616,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -626,34 +641,54 @@ class mydsp : public dsp { FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; double fRec1[2]; - double fRec2[2]; - FAUSTFLOAT fVbargraph0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; FAUSTFLOAT fVslider2; FAUSTFLOAT fVslider3; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; double fRec3[2]; FAUSTFLOAT fVbargraph1; double fRec4[2]; FAUSTFLOAT fVbargraph2; double fRec5[2]; FAUSTFLOAT fVbargraph3; + double fConst6; + double fConst7; + double fConst8; + double fConst9; double fRec6[2]; FAUSTFLOAT fVbargraph4; double fRec7[2]; FAUSTFLOAT fVbargraph5; + double fConst10; + double fConst11; + double fConst12; + double fConst13; double fRec8[2]; FAUSTFLOAT fVbargraph6; double fRec9[2]; FAUSTFLOAT fVbargraph7; double fRec10[2]; FAUSTFLOAT fVbargraph8; + double fConst14; double fRec11[2]; FAUSTFLOAT fVbargraph9; double fRec12[2]; FAUSTFLOAT fVbargraph10; + double fConst15; + double fConst16; double fRec13[2]; FAUSTFLOAT fVbargraph11; + double fConst17; double fRec14[2]; FAUSTFLOAT fVbargraph12; + double fConst18; + double fConst19; + double fConst20; double fRec15[2]; FAUSTFLOAT fVbargraph13; double fRec16[2]; @@ -670,26 +705,26 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOABeamHCardio2Mono3"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -799,7 +834,27 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.0)); + fConst2 = double(tgamma(3.0)); + fConst3 = sqrt((3.0 * (fConst1 / fConst2))); + fConst4 = double(tgamma(1.5)); + fConst5 = (0.39894624032434478 * (fConst3 * fConst4)); + fConst6 = double(tgamma(5.0)); + fConst7 = sqrt((5.0 * (fConst1 / fConst6))); + fConst8 = double(tgamma(2.5)); + fConst9 = (fConst7 * fConst8); + fConst10 = (0.17730759750868944 * fConst3); + fConst11 = double(tgamma(2.0)); + fConst12 = sqrt((5.0 * (fConst11 / double(tgamma(4.0))))); + fConst13 = (0.53191448209190839 * fConst12); + fConst14 = (0.39895565345202538 * (sqrt((7.0 * (fConst1 / double(tgamma(7.0))))) * double(tgamma(3.5)))); + fConst15 = sqrt((7.0 * (fConst11 / double(tgamma(6.0))))); + fConst16 = (1.9947782672601269 * fConst15); + fConst17 = (0.99738913363006343 * fConst15); + fConst18 = (0.099724352621138213 * fConst3); + fConst19 = (0.2991997552277591 * fConst12); + fConst20 = (0.044195655268848062 * sqrt((7.0 * (fConst2 / fConst6)))); } @@ -900,9 +955,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -910,88 +965,88 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2be1bc0", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x302b6a0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bea4b0", &fVbargraph1, -70.0, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3020540", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2befd80", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3030df0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bf5c20", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3025d70", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c10450", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3039770", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c15ab0", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3048cc0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bfda30", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3055b40", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c0a6b0", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x304e9d0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c046d0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3040020", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c1cd60", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x305e8b0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c22930", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x306d140", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c29330", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x307c9a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c3ce80", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3088f70", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c2eff0", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3082660", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c42860", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30733d0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c351d0", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3064550", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fVslider0, "1", ""); ui_interface->addVerticalSlider("Order", &fVslider0, 1.0, 1.0, 3.0, 1.0); ui_interface->declare(&fVslider1, "2", ""); ui_interface->addVerticalSlider("Output Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "3", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider3, "4", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "3", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); ui_interface->openHorizontalBox("Output"); ui_interface->declare(&fHbargraph0, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x2c47ea0", &fHbargraph0, -70.0, 6.0); + ui_interface->addHorizontalBargraph("0x308f4e0", &fHbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1019,92 +1074,99 @@ class mydsp : public dsp { int iSlow1 = (iSlow0 >= 2); int iSlow2 = (iSlow0 >= 1); double fSlow3 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow4 = double(fVslider2); - double fSlow5 = sin(fSlow4); - double fSlow6 = double(fVslider3); - double fSlow7 = cos(fSlow6); - double fSlow8 = (fSlow5 * fSlow7); - double fSlow9 = sin(fSlow6); - double fSlow10 = cos(fSlow4); - double fSlow11 = (fSlow10 * fSlow7); - double fSlow12 = mydsp_faustpower2_f(fSlow9); - double fSlow13 = ((3.0 * fSlow12) + -1.0); - double fSlow14 = (0.124224 * fSlow13); - double fSlow15 = (2.0 * fSlow4); - double fSlow16 = mydsp_faustpower2_f(fSlow7); - double fSlow17 = (cos(fSlow15) * fSlow16); - double fSlow18 = sin((2.0 * fSlow6)); - double fSlow19 = (fSlow10 * fSlow18); - double fSlow20 = sin(fSlow15); - double fSlow21 = (fSlow20 * fSlow16); - double fSlow22 = (fSlow5 * fSlow18); - double fSlow23 = (3.0 * fSlow4); - double fSlow24 = (0.130732511318436 * (sin(fSlow23) * fSlow7)); - double fSlow25 = (0.32022794552279471 * (fSlow20 * fSlow9)); - double fSlow26 = (5.0 * fSlow12); - double fSlow27 = (fSlow26 + -1.0); - double fSlow28 = (0.10126496782883505 * (fSlow5 * fSlow27)); - double fSlow29 = (0.10126496782883505 * (fSlow10 * fSlow27)); - double fSlow30 = (0.130732511318436 * (cos(fSlow23) * fSlow16)); - double fSlow31 = (0.069875499999999993 * fSlow13); - double fSlow32 = (0.082682500000000006 * (fSlow26 + -3.0)); - double fSlow33 = (0.32022794552279471 * fSlow17); + double fSlow4 = sin(double(fVslider2)); + double fSlow5 = mydsp_faustpower2_f(fSlow4); + double fSlow6 = (1.0 - fSlow5); + double fSlow7 = pow(fSlow6, 0.5); + double fSlow8 = (fConst5 * fSlow7); + double fSlow9 = double(fVslider3); + double fSlow10 = sin(fSlow9); + double fSlow11 = cos(fSlow9); + double fSlow12 = (0.43301700000000004 * fSlow4); + double fSlow13 = (fConst9 * fSlow6); + double fSlow14 = (fSlow11 * fSlow10); + double fSlow15 = (0.70921930945587786 * fSlow14); + double fSlow16 = mydsp_faustpower2_f(fSlow11); + double fSlow17 = ((2.0 * fSlow16) + -1.0); + double fSlow18 = (0.35460965472793893 * fSlow17); + double fSlow19 = (fConst4 * fSlow7); + double fSlow20 = (fSlow4 * fSlow10); + double fSlow21 = (fConst13 * fSlow20); + double fSlow22 = (fSlow11 * fSlow4); + double fSlow23 = (fConst13 * fSlow22); + double fSlow24 = (0.19245000000000004 * fSlow4); + double fSlow25 = ((3.0 * fSlow5) + -1.0); + double fSlow26 = (0.124224 * fSlow25); + double fSlow27 = (fConst14 * pow(fSlow6, 1.5)); + double fSlow28 = (((4.0 * fSlow16) + -1.0) * fSlow10); + double fSlow29 = (((2.0 * fSlow17) + -1.0) * fSlow11); + double fSlow30 = (fConst8 * fSlow6); + double fSlow31 = (0.39893300697034545 * fSlow14); + double fSlow32 = (0.19946650348517272 * fSlow17); + double fSlow33 = (fConst16 * (fSlow22 * fSlow10)); + double fSlow34 = (fConst17 * (fSlow17 * fSlow4)); + double fSlow35 = (fConst19 * fSlow20); + double fSlow36 = (fConst19 * fSlow22); + double fSlow37 = ((16.925687506432688 * fSlow5) + -3.3851375012865379); + double fSlow38 = (fConst20 * (fSlow37 * fSlow10)); + double fSlow39 = (fConst20 * (fSlow37 * fSlow11)); + double fSlow40 = (0.055121666666666666 * ((2.5 * fSlow25) + -2.0)); + double fSlow41 = (0.069875499999999993 * fSlow25); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow3 + (0.999 * fRec1[1])); - double fTemp0 = double(input0[i]); + double fTemp0 = double(input1[i]); fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input1[i]); + double fTemp1 = double(input3[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input2[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + double fTemp2 = ((fSlow10 * fTemp0) + (fSlow11 * fTemp1)); + double fTemp3 = double(input0[i]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph2 = FAUSTFLOAT(fRec4[0]); - double fTemp3 = double(input3[i]); - fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + double fTemp4 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = (((fSlow8 * fTemp1) + (fSlow9 * fTemp2)) + (fSlow11 * fTemp3)); - double fTemp5 = double(input6[i]); + double fTemp5 = double(input4[i]); fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph4 = FAUSTFLOAT(fRec6[0]); double fTemp6 = double(input8[i]); fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = double(input7[i]); + double fTemp7 = double(input5[i]); fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph6 = FAUSTFLOAT(fRec8[0]); - double fTemp8 = double(input4[i]); + double fTemp8 = double(input7[i]); fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph7 = FAUSTFLOAT(fRec9[0]); - double fTemp9 = double(input5[i]); + double fTemp9 = double(input6[i]); fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = ((fSlow17 * fTemp6) + ((fSlow19 * fTemp7) + ((fSlow21 * fTemp8) + (fSlow22 * fTemp9)))); - double fTemp11 = double(input9[i]); - fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + double fTemp10 = double(input9[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph9 = FAUSTFLOAT(fRec11[0]); - double fTemp12 = double(input10[i]); - fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + double fTemp11 = double(input15[i]); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph10 = FAUSTFLOAT(fRec12[0]); - double fTemp13 = double(input11[i]); - fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + double fTemp12 = double(input10[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph11 = FAUSTFLOAT(fRec13[0]); - double fTemp14 = double(input13[i]); - fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + double fTemp13 = double(input14[i]); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph12 = FAUSTFLOAT(fRec14[0]); - double fTemp15 = double(input15[i]); - fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + double fTemp14 = double(input11[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph13 = FAUSTFLOAT(fRec15[0]); - double fTemp16 = double(input12[i]); - fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + double fTemp15 = double(input13[i]); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph14 = FAUSTFLOAT(fRec16[0]); - double fTemp17 = double(input14[i]); - fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + double fTemp16 = double(input12[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph15 = FAUSTFLOAT(fRec17[0]); - double fTemp18 = (iSlow1?(fRec1[0] * ((fSlow7 * ((((fSlow7 * ((fSlow24 * fTemp11) + (fSlow25 * fTemp12))) + (fSlow28 * fTemp13)) + (fSlow29 * fTemp14)) + (fSlow30 * fTemp15))) + (((((0.062512799999999993 * fTemp0) + (0.108241 * fTemp4)) + (fSlow31 * fTemp5)) + (0.12102791620427908 * fTemp10)) + (fSlow9 * ((fSlow32 * fTemp16) + (fSlow33 * fTemp17)))))):(iSlow2?(fRec1[0] * ((((0.11112 * fTemp0) + (0.19245000000000004 * fTemp4)) + (fSlow14 * fTemp5)) + (0.2151622795194362 * fTemp10))):(fRec1[0] * ((0.24993000000000001 * fTemp0) + (0.43301700000000004 * fTemp4))))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + double fTemp17 = (iSlow1?(fRec1[0] * ((fSlow27 * ((fSlow28 * fTemp10) + (fSlow29 * fTemp11))) + ((fSlow30 * (((fConst7 * ((fSlow31 * fTemp5) + (fSlow32 * fTemp6))) + (fSlow33 * fTemp12)) + (fSlow34 * fTemp13))) + ((fSlow19 * (((((fConst18 * fTemp2) + (fSlow35 * fTemp7)) + (fSlow36 * fTemp8)) + (fSlow38 * fTemp14)) + (fSlow39 * fTemp15))) + ((fSlow4 * ((0.108241 * fTemp4) + (fSlow40 * fTemp16))) + ((0.062512799999999993 * fTemp3) + (fSlow41 * fTemp9))))))):(iSlow2?(fRec1[0] * ((fSlow13 * ((fSlow15 * fTemp5) + (fSlow18 * fTemp6))) + ((fSlow19 * (((fConst10 * fTemp2) + (fSlow21 * fTemp7)) + (fSlow23 * fTemp8))) + (((0.11112 * fTemp3) + (fSlow24 * fTemp4)) + (fSlow26 * fTemp9))))):(fRec1[0] * ((fSlow8 * fTemp2) + ((0.24993000000000001 * fTemp3) + (fSlow12 * fTemp4)))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fHbargraph0 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp18); + output0[i] = FAUSTFLOAT(fTemp17); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; @@ -1131,7 +1193,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1363,7 +1424,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1426,7 +1487,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1455,11 +1516,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d1.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d1.cpp new file mode 100644 index 0000000000..afded0e83d --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d1.cpp @@ -0,0 +1,1251 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnN3d2AcnSn3d1" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d1"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d1"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x20f2570", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x20fc260", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2106170", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2110160", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x20f66f0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x21007d0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x210a6e0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x21147b0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d10.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d10.cpp new file mode 100644 index 0000000000..933173f119 --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d10.cpp @@ -0,0 +1,5850 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnN3d2AcnSn3d10" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec18[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec20[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; + FAUSTFLOAT fVbargraph24; + double fRec24[2]; + FAUSTFLOAT fVbargraph25; + double fRec27[2]; + FAUSTFLOAT fVbargraph26; + double fRec26[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; + FAUSTFLOAT fVbargraph31; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fRec32[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec34[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec36[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec38[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec40[2]; + FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec42[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec44[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec46[2]; + FAUSTFLOAT fVbargraph47; + double fRec49[2]; + FAUSTFLOAT fVbargraph48; + double fRec48[2]; + FAUSTFLOAT fVbargraph49; + double fRec51[2]; + FAUSTFLOAT fVbargraph50; + double fRec50[2]; + FAUSTFLOAT fVbargraph51; + double fRec53[2]; + FAUSTFLOAT fVbargraph52; + double fRec52[2]; + FAUSTFLOAT fVbargraph53; + double fRec55[2]; + FAUSTFLOAT fVbargraph54; + double fRec54[2]; + FAUSTFLOAT fVbargraph55; + double fRec57[2]; + FAUSTFLOAT fVbargraph56; + double fRec56[2]; + FAUSTFLOAT fVbargraph57; + double fRec59[2]; + FAUSTFLOAT fVbargraph58; + double fRec58[2]; + FAUSTFLOAT fVbargraph59; + double fRec61[2]; + FAUSTFLOAT fVbargraph60; + double fRec60[2]; + FAUSTFLOAT fVbargraph61; + double fRec63[2]; + FAUSTFLOAT fVbargraph62; + double fRec62[2]; + FAUSTFLOAT fVbargraph63; + double fRec65[2]; + FAUSTFLOAT fVbargraph64; + double fRec64[2]; + FAUSTFLOAT fVbargraph65; + double fRec67[2]; + FAUSTFLOAT fVbargraph66; + double fRec66[2]; + FAUSTFLOAT fVbargraph67; + double fRec69[2]; + FAUSTFLOAT fVbargraph68; + double fRec68[2]; + FAUSTFLOAT fVbargraph69; + double fRec71[2]; + FAUSTFLOAT fVbargraph70; + double fRec70[2]; + FAUSTFLOAT fVbargraph71; + double fRec73[2]; + FAUSTFLOAT fVbargraph72; + double fRec72[2]; + FAUSTFLOAT fVbargraph73; + double fRec75[2]; + FAUSTFLOAT fVbargraph74; + double fRec74[2]; + FAUSTFLOAT fVbargraph75; + double fRec77[2]; + FAUSTFLOAT fVbargraph76; + double fRec76[2]; + FAUSTFLOAT fVbargraph77; + double fRec79[2]; + FAUSTFLOAT fVbargraph78; + double fRec78[2]; + FAUSTFLOAT fVbargraph79; + double fRec81[2]; + FAUSTFLOAT fVbargraph80; + double fRec80[2]; + FAUSTFLOAT fVbargraph81; + double fRec83[2]; + FAUSTFLOAT fVbargraph82; + double fRec82[2]; + FAUSTFLOAT fVbargraph83; + double fRec85[2]; + FAUSTFLOAT fVbargraph84; + double fRec84[2]; + FAUSTFLOAT fVbargraph85; + double fRec87[2]; + FAUSTFLOAT fVbargraph86; + double fRec86[2]; + FAUSTFLOAT fVbargraph87; + double fRec89[2]; + FAUSTFLOAT fVbargraph88; + double fRec88[2]; + FAUSTFLOAT fVbargraph89; + double fRec91[2]; + FAUSTFLOAT fVbargraph90; + double fRec90[2]; + FAUSTFLOAT fVbargraph91; + double fRec93[2]; + FAUSTFLOAT fVbargraph92; + double fRec92[2]; + FAUSTFLOAT fVbargraph93; + double fRec95[2]; + FAUSTFLOAT fVbargraph94; + double fRec94[2]; + FAUSTFLOAT fVbargraph95; + double fRec97[2]; + FAUSTFLOAT fVbargraph96; + double fRec96[2]; + FAUSTFLOAT fVbargraph97; + double fRec99[2]; + FAUSTFLOAT fVbargraph98; + double fRec98[2]; + FAUSTFLOAT fVbargraph99; + double fRec101[2]; + FAUSTFLOAT fVbargraph100; + double fRec100[2]; + FAUSTFLOAT fVbargraph101; + double fRec103[2]; + FAUSTFLOAT fVbargraph102; + double fRec102[2]; + FAUSTFLOAT fVbargraph103; + double fRec105[2]; + FAUSTFLOAT fVbargraph104; + double fRec104[2]; + FAUSTFLOAT fVbargraph105; + double fRec107[2]; + FAUSTFLOAT fVbargraph106; + double fRec106[2]; + FAUSTFLOAT fVbargraph107; + double fRec109[2]; + FAUSTFLOAT fVbargraph108; + double fRec108[2]; + FAUSTFLOAT fVbargraph109; + double fRec111[2]; + FAUSTFLOAT fVbargraph110; + double fRec110[2]; + FAUSTFLOAT fVbargraph111; + double fRec113[2]; + FAUSTFLOAT fVbargraph112; + double fRec112[2]; + FAUSTFLOAT fVbargraph113; + double fRec115[2]; + FAUSTFLOAT fVbargraph114; + double fRec114[2]; + FAUSTFLOAT fVbargraph115; + double fRec117[2]; + FAUSTFLOAT fVbargraph116; + double fRec116[2]; + FAUSTFLOAT fVbargraph117; + double fRec119[2]; + FAUSTFLOAT fVbargraph118; + double fRec118[2]; + FAUSTFLOAT fVbargraph119; + double fRec121[2]; + FAUSTFLOAT fVbargraph120; + double fRec120[2]; + FAUSTFLOAT fVbargraph121; + double fRec123[2]; + FAUSTFLOAT fVbargraph122; + double fRec122[2]; + FAUSTFLOAT fVbargraph123; + double fRec125[2]; + FAUSTFLOAT fVbargraph124; + double fRec124[2]; + FAUSTFLOAT fVbargraph125; + double fRec127[2]; + FAUSTFLOAT fVbargraph126; + double fRec126[2]; + FAUSTFLOAT fVbargraph127; + double fRec129[2]; + FAUSTFLOAT fVbargraph128; + double fRec128[2]; + FAUSTFLOAT fVbargraph129; + double fRec131[2]; + FAUSTFLOAT fVbargraph130; + double fRec130[2]; + FAUSTFLOAT fVbargraph131; + double fRec133[2]; + FAUSTFLOAT fVbargraph132; + double fRec132[2]; + FAUSTFLOAT fVbargraph133; + double fRec135[2]; + FAUSTFLOAT fVbargraph134; + double fRec134[2]; + FAUSTFLOAT fVbargraph135; + double fRec137[2]; + FAUSTFLOAT fVbargraph136; + double fRec136[2]; + FAUSTFLOAT fVbargraph137; + double fRec139[2]; + FAUSTFLOAT fVbargraph138; + double fRec138[2]; + FAUSTFLOAT fVbargraph139; + double fRec141[2]; + FAUSTFLOAT fVbargraph140; + double fRec140[2]; + FAUSTFLOAT fVbargraph141; + double fRec143[2]; + FAUSTFLOAT fVbargraph142; + double fRec142[2]; + FAUSTFLOAT fVbargraph143; + double fRec145[2]; + FAUSTFLOAT fVbargraph144; + double fRec144[2]; + FAUSTFLOAT fVbargraph145; + double fRec147[2]; + FAUSTFLOAT fVbargraph146; + double fRec146[2]; + FAUSTFLOAT fVbargraph147; + double fRec149[2]; + FAUSTFLOAT fVbargraph148; + double fRec148[2]; + FAUSTFLOAT fVbargraph149; + double fRec151[2]; + FAUSTFLOAT fVbargraph150; + double fRec150[2]; + FAUSTFLOAT fVbargraph151; + double fRec153[2]; + FAUSTFLOAT fVbargraph152; + double fRec152[2]; + FAUSTFLOAT fVbargraph153; + double fRec155[2]; + FAUSTFLOAT fVbargraph154; + double fRec154[2]; + FAUSTFLOAT fVbargraph155; + double fRec157[2]; + FAUSTFLOAT fVbargraph156; + double fRec156[2]; + FAUSTFLOAT fVbargraph157; + double fRec159[2]; + FAUSTFLOAT fVbargraph158; + double fRec158[2]; + FAUSTFLOAT fVbargraph159; + double fRec161[2]; + FAUSTFLOAT fVbargraph160; + double fRec160[2]; + FAUSTFLOAT fVbargraph161; + double fRec163[2]; + FAUSTFLOAT fVbargraph162; + double fRec162[2]; + FAUSTFLOAT fVbargraph163; + double fRec165[2]; + FAUSTFLOAT fVbargraph164; + double fRec164[2]; + FAUSTFLOAT fVbargraph165; + double fRec167[2]; + FAUSTFLOAT fVbargraph166; + double fRec166[2]; + FAUSTFLOAT fVbargraph167; + double fRec169[2]; + FAUSTFLOAT fVbargraph168; + double fRec168[2]; + FAUSTFLOAT fVbargraph169; + double fRec171[2]; + FAUSTFLOAT fVbargraph170; + double fRec170[2]; + FAUSTFLOAT fVbargraph171; + double fRec173[2]; + FAUSTFLOAT fVbargraph172; + double fRec172[2]; + FAUSTFLOAT fVbargraph173; + double fRec175[2]; + FAUSTFLOAT fVbargraph174; + double fRec174[2]; + FAUSTFLOAT fVbargraph175; + double fRec177[2]; + FAUSTFLOAT fVbargraph176; + double fRec176[2]; + FAUSTFLOAT fVbargraph177; + double fRec179[2]; + FAUSTFLOAT fVbargraph178; + double fRec178[2]; + FAUSTFLOAT fVbargraph179; + double fRec181[2]; + FAUSTFLOAT fVbargraph180; + double fRec180[2]; + FAUSTFLOAT fVbargraph181; + double fRec183[2]; + FAUSTFLOAT fVbargraph182; + double fRec182[2]; + FAUSTFLOAT fVbargraph183; + double fRec185[2]; + FAUSTFLOAT fVbargraph184; + double fRec184[2]; + FAUSTFLOAT fVbargraph185; + double fRec187[2]; + FAUSTFLOAT fVbargraph186; + double fRec186[2]; + FAUSTFLOAT fVbargraph187; + double fRec189[2]; + FAUSTFLOAT fVbargraph188; + double fRec188[2]; + FAUSTFLOAT fVbargraph189; + double fRec191[2]; + FAUSTFLOAT fVbargraph190; + double fRec190[2]; + FAUSTFLOAT fVbargraph191; + double fRec193[2]; + FAUSTFLOAT fVbargraph192; + double fRec192[2]; + FAUSTFLOAT fVbargraph193; + double fRec195[2]; + FAUSTFLOAT fVbargraph194; + double fRec194[2]; + FAUSTFLOAT fVbargraph195; + double fRec197[2]; + FAUSTFLOAT fVbargraph196; + double fRec196[2]; + FAUSTFLOAT fVbargraph197; + double fRec199[2]; + FAUSTFLOAT fVbargraph198; + double fRec198[2]; + FAUSTFLOAT fVbargraph199; + double fRec201[2]; + FAUSTFLOAT fVbargraph200; + double fRec200[2]; + FAUSTFLOAT fVbargraph201; + double fRec203[2]; + FAUSTFLOAT fVbargraph202; + double fRec202[2]; + FAUSTFLOAT fVbargraph203; + double fRec205[2]; + FAUSTFLOAT fVbargraph204; + double fRec204[2]; + FAUSTFLOAT fVbargraph205; + double fRec207[2]; + FAUSTFLOAT fVbargraph206; + double fRec206[2]; + FAUSTFLOAT fVbargraph207; + double fRec209[2]; + FAUSTFLOAT fVbargraph208; + double fRec208[2]; + FAUSTFLOAT fVbargraph209; + double fRec211[2]; + FAUSTFLOAT fVbargraph210; + double fRec210[2]; + FAUSTFLOAT fVbargraph211; + double fRec213[2]; + FAUSTFLOAT fVbargraph212; + double fRec212[2]; + FAUSTFLOAT fVbargraph213; + double fRec215[2]; + FAUSTFLOAT fVbargraph214; + double fRec214[2]; + FAUSTFLOAT fVbargraph215; + double fRec217[2]; + FAUSTFLOAT fVbargraph216; + double fRec216[2]; + FAUSTFLOAT fVbargraph217; + double fRec219[2]; + FAUSTFLOAT fVbargraph218; + double fRec218[2]; + FAUSTFLOAT fVbargraph219; + double fRec221[2]; + FAUSTFLOAT fVbargraph220; + double fRec220[2]; + FAUSTFLOAT fVbargraph221; + double fRec223[2]; + FAUSTFLOAT fVbargraph222; + double fRec222[2]; + FAUSTFLOAT fVbargraph223; + double fRec225[2]; + FAUSTFLOAT fVbargraph224; + double fRec224[2]; + FAUSTFLOAT fVbargraph225; + double fRec227[2]; + FAUSTFLOAT fVbargraph226; + double fRec226[2]; + FAUSTFLOAT fVbargraph227; + double fRec229[2]; + FAUSTFLOAT fVbargraph228; + double fRec228[2]; + FAUSTFLOAT fVbargraph229; + double fRec231[2]; + FAUSTFLOAT fVbargraph230; + double fRec230[2]; + FAUSTFLOAT fVbargraph231; + double fRec233[2]; + FAUSTFLOAT fVbargraph232; + double fRec232[2]; + FAUSTFLOAT fVbargraph233; + double fRec235[2]; + FAUSTFLOAT fVbargraph234; + double fRec234[2]; + FAUSTFLOAT fVbargraph235; + double fRec237[2]; + FAUSTFLOAT fVbargraph236; + double fRec236[2]; + FAUSTFLOAT fVbargraph237; + double fRec239[2]; + FAUSTFLOAT fVbargraph238; + double fRec238[2]; + FAUSTFLOAT fVbargraph239; + double fRec241[2]; + FAUSTFLOAT fVbargraph240; + double fRec240[2]; + FAUSTFLOAT fVbargraph241; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d10"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 121; + + } + virtual int getNumOutputs() { + return 121; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + case 100: { + rate = 1; + break; + } + case 101: { + rate = 1; + break; + } + case 102: { + rate = 1; + break; + } + case 103: { + rate = 1; + break; + } + case 104: { + rate = 1; + break; + } + case 105: { + rate = 1; + break; + } + case 106: { + rate = 1; + break; + } + case 107: { + rate = 1; + break; + } + case 108: { + rate = 1; + break; + } + case 109: { + rate = 1; + break; + } + case 110: { + rate = 1; + break; + } + case 111: { + rate = 1; + break; + } + case 112: { + rate = 1; + break; + } + case 113: { + rate = 1; + break; + } + case 114: { + rate = 1; + break; + } + case 115: { + rate = 1; + break; + } + case 116: { + rate = 1; + break; + } + case 117: { + rate = 1; + break; + } + case 118: { + rate = 1; + break; + } + case 119: { + rate = 1; + break; + } + case 120: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + case 100: { + rate = 1; + break; + } + case 101: { + rate = 1; + break; + } + case 102: { + rate = 1; + break; + } + case 103: { + rate = 1; + break; + } + case 104: { + rate = 1; + break; + } + case 105: { + rate = 1; + break; + } + case 106: { + rate = 1; + break; + } + case 107: { + rate = 1; + break; + } + case 108: { + rate = 1; + break; + } + case 109: { + rate = 1; + break; + } + case 110: { + rate = 1; + break; + } + case 111: { + rate = 1; + break; + } + case 112: { + rate = 1; + break; + } + case 113: { + rate = 1; + break; + } + case 114: { + rate = 1; + break; + } + case 115: { + rate = 1; + break; + } + case 116: { + rate = 1; + break; + } + case 117: { + rate = 1; + break; + } + case 118: { + rate = 1; + break; + } + case 119: { + rate = 1; + break; + } + case 120: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec35[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec37[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec41[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec43[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec42[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec45[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec44[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec47[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec46[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec51[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec50[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec53[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec52[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec55[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec54[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec56[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec59[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec58[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec61[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec60[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec63[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec62[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec65[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec64[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec67[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec66[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec69[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec68[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec71[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec70[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec73[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec72[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec75[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec74[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec77[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec76[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec79[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec78[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec81[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec80[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec83[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec82[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec85[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec84[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec87[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec86[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec89[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec88[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec91[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec90[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec93[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec92[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec95[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec94[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec97[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec96[l97] = 0.0; + + } + for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + fRec99[l98] = 0.0; + + } + for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + fRec98[l99] = 0.0; + + } + for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + fRec101[l100] = 0.0; + + } + for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + fRec100[l101] = 0.0; + + } + for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + fRec103[l102] = 0.0; + + } + for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + fRec102[l103] = 0.0; + + } + for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + fRec105[l104] = 0.0; + + } + for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + fRec104[l105] = 0.0; + + } + for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + fRec107[l106] = 0.0; + + } + for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + fRec106[l107] = 0.0; + + } + for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + fRec109[l108] = 0.0; + + } + for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + fRec108[l109] = 0.0; + + } + for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { + fRec111[l110] = 0.0; + + } + for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + fRec110[l111] = 0.0; + + } + for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + fRec113[l112] = 0.0; + + } + for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + fRec112[l113] = 0.0; + + } + for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + fRec115[l114] = 0.0; + + } + for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { + fRec114[l115] = 0.0; + + } + for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + fRec117[l116] = 0.0; + + } + for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + fRec116[l117] = 0.0; + + } + for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + fRec119[l118] = 0.0; + + } + for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + fRec118[l119] = 0.0; + + } + for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { + fRec121[l120] = 0.0; + + } + for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { + fRec120[l121] = 0.0; + + } + for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { + fRec123[l122] = 0.0; + + } + for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { + fRec122[l123] = 0.0; + + } + for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { + fRec125[l124] = 0.0; + + } + for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { + fRec124[l125] = 0.0; + + } + for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { + fRec127[l126] = 0.0; + + } + for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { + fRec126[l127] = 0.0; + + } + for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { + fRec129[l128] = 0.0; + + } + for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { + fRec128[l129] = 0.0; + + } + for (int l130 = 0; (l130 < 2); l130 = (l130 + 1)) { + fRec131[l130] = 0.0; + + } + for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { + fRec130[l131] = 0.0; + + } + for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { + fRec133[l132] = 0.0; + + } + for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { + fRec132[l133] = 0.0; + + } + for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { + fRec135[l134] = 0.0; + + } + for (int l135 = 0; (l135 < 2); l135 = (l135 + 1)) { + fRec134[l135] = 0.0; + + } + for (int l136 = 0; (l136 < 2); l136 = (l136 + 1)) { + fRec137[l136] = 0.0; + + } + for (int l137 = 0; (l137 < 2); l137 = (l137 + 1)) { + fRec136[l137] = 0.0; + + } + for (int l138 = 0; (l138 < 2); l138 = (l138 + 1)) { + fRec139[l138] = 0.0; + + } + for (int l139 = 0; (l139 < 2); l139 = (l139 + 1)) { + fRec138[l139] = 0.0; + + } + for (int l140 = 0; (l140 < 2); l140 = (l140 + 1)) { + fRec141[l140] = 0.0; + + } + for (int l141 = 0; (l141 < 2); l141 = (l141 + 1)) { + fRec140[l141] = 0.0; + + } + for (int l142 = 0; (l142 < 2); l142 = (l142 + 1)) { + fRec143[l142] = 0.0; + + } + for (int l143 = 0; (l143 < 2); l143 = (l143 + 1)) { + fRec142[l143] = 0.0; + + } + for (int l144 = 0; (l144 < 2); l144 = (l144 + 1)) { + fRec145[l144] = 0.0; + + } + for (int l145 = 0; (l145 < 2); l145 = (l145 + 1)) { + fRec144[l145] = 0.0; + + } + for (int l146 = 0; (l146 < 2); l146 = (l146 + 1)) { + fRec147[l146] = 0.0; + + } + for (int l147 = 0; (l147 < 2); l147 = (l147 + 1)) { + fRec146[l147] = 0.0; + + } + for (int l148 = 0; (l148 < 2); l148 = (l148 + 1)) { + fRec149[l148] = 0.0; + + } + for (int l149 = 0; (l149 < 2); l149 = (l149 + 1)) { + fRec148[l149] = 0.0; + + } + for (int l150 = 0; (l150 < 2); l150 = (l150 + 1)) { + fRec151[l150] = 0.0; + + } + for (int l151 = 0; (l151 < 2); l151 = (l151 + 1)) { + fRec150[l151] = 0.0; + + } + for (int l152 = 0; (l152 < 2); l152 = (l152 + 1)) { + fRec153[l152] = 0.0; + + } + for (int l153 = 0; (l153 < 2); l153 = (l153 + 1)) { + fRec152[l153] = 0.0; + + } + for (int l154 = 0; (l154 < 2); l154 = (l154 + 1)) { + fRec155[l154] = 0.0; + + } + for (int l155 = 0; (l155 < 2); l155 = (l155 + 1)) { + fRec154[l155] = 0.0; + + } + for (int l156 = 0; (l156 < 2); l156 = (l156 + 1)) { + fRec157[l156] = 0.0; + + } + for (int l157 = 0; (l157 < 2); l157 = (l157 + 1)) { + fRec156[l157] = 0.0; + + } + for (int l158 = 0; (l158 < 2); l158 = (l158 + 1)) { + fRec159[l158] = 0.0; + + } + for (int l159 = 0; (l159 < 2); l159 = (l159 + 1)) { + fRec158[l159] = 0.0; + + } + for (int l160 = 0; (l160 < 2); l160 = (l160 + 1)) { + fRec161[l160] = 0.0; + + } + for (int l161 = 0; (l161 < 2); l161 = (l161 + 1)) { + fRec160[l161] = 0.0; + + } + for (int l162 = 0; (l162 < 2); l162 = (l162 + 1)) { + fRec163[l162] = 0.0; + + } + for (int l163 = 0; (l163 < 2); l163 = (l163 + 1)) { + fRec162[l163] = 0.0; + + } + for (int l164 = 0; (l164 < 2); l164 = (l164 + 1)) { + fRec165[l164] = 0.0; + + } + for (int l165 = 0; (l165 < 2); l165 = (l165 + 1)) { + fRec164[l165] = 0.0; + + } + for (int l166 = 0; (l166 < 2); l166 = (l166 + 1)) { + fRec167[l166] = 0.0; + + } + for (int l167 = 0; (l167 < 2); l167 = (l167 + 1)) { + fRec166[l167] = 0.0; + + } + for (int l168 = 0; (l168 < 2); l168 = (l168 + 1)) { + fRec169[l168] = 0.0; + + } + for (int l169 = 0; (l169 < 2); l169 = (l169 + 1)) { + fRec168[l169] = 0.0; + + } + for (int l170 = 0; (l170 < 2); l170 = (l170 + 1)) { + fRec171[l170] = 0.0; + + } + for (int l171 = 0; (l171 < 2); l171 = (l171 + 1)) { + fRec170[l171] = 0.0; + + } + for (int l172 = 0; (l172 < 2); l172 = (l172 + 1)) { + fRec173[l172] = 0.0; + + } + for (int l173 = 0; (l173 < 2); l173 = (l173 + 1)) { + fRec172[l173] = 0.0; + + } + for (int l174 = 0; (l174 < 2); l174 = (l174 + 1)) { + fRec175[l174] = 0.0; + + } + for (int l175 = 0; (l175 < 2); l175 = (l175 + 1)) { + fRec174[l175] = 0.0; + + } + for (int l176 = 0; (l176 < 2); l176 = (l176 + 1)) { + fRec177[l176] = 0.0; + + } + for (int l177 = 0; (l177 < 2); l177 = (l177 + 1)) { + fRec176[l177] = 0.0; + + } + for (int l178 = 0; (l178 < 2); l178 = (l178 + 1)) { + fRec179[l178] = 0.0; + + } + for (int l179 = 0; (l179 < 2); l179 = (l179 + 1)) { + fRec178[l179] = 0.0; + + } + for (int l180 = 0; (l180 < 2); l180 = (l180 + 1)) { + fRec181[l180] = 0.0; + + } + for (int l181 = 0; (l181 < 2); l181 = (l181 + 1)) { + fRec180[l181] = 0.0; + + } + for (int l182 = 0; (l182 < 2); l182 = (l182 + 1)) { + fRec183[l182] = 0.0; + + } + for (int l183 = 0; (l183 < 2); l183 = (l183 + 1)) { + fRec182[l183] = 0.0; + + } + for (int l184 = 0; (l184 < 2); l184 = (l184 + 1)) { + fRec185[l184] = 0.0; + + } + for (int l185 = 0; (l185 < 2); l185 = (l185 + 1)) { + fRec184[l185] = 0.0; + + } + for (int l186 = 0; (l186 < 2); l186 = (l186 + 1)) { + fRec187[l186] = 0.0; + + } + for (int l187 = 0; (l187 < 2); l187 = (l187 + 1)) { + fRec186[l187] = 0.0; + + } + for (int l188 = 0; (l188 < 2); l188 = (l188 + 1)) { + fRec189[l188] = 0.0; + + } + for (int l189 = 0; (l189 < 2); l189 = (l189 + 1)) { + fRec188[l189] = 0.0; + + } + for (int l190 = 0; (l190 < 2); l190 = (l190 + 1)) { + fRec191[l190] = 0.0; + + } + for (int l191 = 0; (l191 < 2); l191 = (l191 + 1)) { + fRec190[l191] = 0.0; + + } + for (int l192 = 0; (l192 < 2); l192 = (l192 + 1)) { + fRec193[l192] = 0.0; + + } + for (int l193 = 0; (l193 < 2); l193 = (l193 + 1)) { + fRec192[l193] = 0.0; + + } + for (int l194 = 0; (l194 < 2); l194 = (l194 + 1)) { + fRec195[l194] = 0.0; + + } + for (int l195 = 0; (l195 < 2); l195 = (l195 + 1)) { + fRec194[l195] = 0.0; + + } + for (int l196 = 0; (l196 < 2); l196 = (l196 + 1)) { + fRec197[l196] = 0.0; + + } + for (int l197 = 0; (l197 < 2); l197 = (l197 + 1)) { + fRec196[l197] = 0.0; + + } + for (int l198 = 0; (l198 < 2); l198 = (l198 + 1)) { + fRec199[l198] = 0.0; + + } + for (int l199 = 0; (l199 < 2); l199 = (l199 + 1)) { + fRec198[l199] = 0.0; + + } + for (int l200 = 0; (l200 < 2); l200 = (l200 + 1)) { + fRec201[l200] = 0.0; + + } + for (int l201 = 0; (l201 < 2); l201 = (l201 + 1)) { + fRec200[l201] = 0.0; + + } + for (int l202 = 0; (l202 < 2); l202 = (l202 + 1)) { + fRec203[l202] = 0.0; + + } + for (int l203 = 0; (l203 < 2); l203 = (l203 + 1)) { + fRec202[l203] = 0.0; + + } + for (int l204 = 0; (l204 < 2); l204 = (l204 + 1)) { + fRec205[l204] = 0.0; + + } + for (int l205 = 0; (l205 < 2); l205 = (l205 + 1)) { + fRec204[l205] = 0.0; + + } + for (int l206 = 0; (l206 < 2); l206 = (l206 + 1)) { + fRec207[l206] = 0.0; + + } + for (int l207 = 0; (l207 < 2); l207 = (l207 + 1)) { + fRec206[l207] = 0.0; + + } + for (int l208 = 0; (l208 < 2); l208 = (l208 + 1)) { + fRec209[l208] = 0.0; + + } + for (int l209 = 0; (l209 < 2); l209 = (l209 + 1)) { + fRec208[l209] = 0.0; + + } + for (int l210 = 0; (l210 < 2); l210 = (l210 + 1)) { + fRec211[l210] = 0.0; + + } + for (int l211 = 0; (l211 < 2); l211 = (l211 + 1)) { + fRec210[l211] = 0.0; + + } + for (int l212 = 0; (l212 < 2); l212 = (l212 + 1)) { + fRec213[l212] = 0.0; + + } + for (int l213 = 0; (l213 < 2); l213 = (l213 + 1)) { + fRec212[l213] = 0.0; + + } + for (int l214 = 0; (l214 < 2); l214 = (l214 + 1)) { + fRec215[l214] = 0.0; + + } + for (int l215 = 0; (l215 < 2); l215 = (l215 + 1)) { + fRec214[l215] = 0.0; + + } + for (int l216 = 0; (l216 < 2); l216 = (l216 + 1)) { + fRec217[l216] = 0.0; + + } + for (int l217 = 0; (l217 < 2); l217 = (l217 + 1)) { + fRec216[l217] = 0.0; + + } + for (int l218 = 0; (l218 < 2); l218 = (l218 + 1)) { + fRec219[l218] = 0.0; + + } + for (int l219 = 0; (l219 < 2); l219 = (l219 + 1)) { + fRec218[l219] = 0.0; + + } + for (int l220 = 0; (l220 < 2); l220 = (l220 + 1)) { + fRec221[l220] = 0.0; + + } + for (int l221 = 0; (l221 < 2); l221 = (l221 + 1)) { + fRec220[l221] = 0.0; + + } + for (int l222 = 0; (l222 < 2); l222 = (l222 + 1)) { + fRec223[l222] = 0.0; + + } + for (int l223 = 0; (l223 < 2); l223 = (l223 + 1)) { + fRec222[l223] = 0.0; + + } + for (int l224 = 0; (l224 < 2); l224 = (l224 + 1)) { + fRec225[l224] = 0.0; + + } + for (int l225 = 0; (l225 < 2); l225 = (l225 + 1)) { + fRec224[l225] = 0.0; + + } + for (int l226 = 0; (l226 < 2); l226 = (l226 + 1)) { + fRec227[l226] = 0.0; + + } + for (int l227 = 0; (l227 < 2); l227 = (l227 + 1)) { + fRec226[l227] = 0.0; + + } + for (int l228 = 0; (l228 < 2); l228 = (l228 + 1)) { + fRec229[l228] = 0.0; + + } + for (int l229 = 0; (l229 < 2); l229 = (l229 + 1)) { + fRec228[l229] = 0.0; + + } + for (int l230 = 0; (l230 < 2); l230 = (l230 + 1)) { + fRec231[l230] = 0.0; + + } + for (int l231 = 0; (l231 < 2); l231 = (l231 + 1)) { + fRec230[l231] = 0.0; + + } + for (int l232 = 0; (l232 < 2); l232 = (l232 + 1)) { + fRec233[l232] = 0.0; + + } + for (int l233 = 0; (l233 < 2); l233 = (l233 + 1)) { + fRec232[l233] = 0.0; + + } + for (int l234 = 0; (l234 < 2); l234 = (l234 + 1)) { + fRec235[l234] = 0.0; + + } + for (int l235 = 0; (l235 < 2); l235 = (l235 + 1)) { + fRec234[l235] = 0.0; + + } + for (int l236 = 0; (l236 < 2); l236 = (l236 + 1)) { + fRec237[l236] = 0.0; + + } + for (int l237 = 0; (l237 < 2); l237 = (l237 + 1)) { + fRec236[l237] = 0.0; + + } + for (int l238 = 0; (l238 < 2); l238 = (l238 + 1)) { + fRec239[l238] = 0.0; + + } + for (int l239 = 0; (l239 < 2); l239 = (l239 + 1)) { + fRec238[l239] = 0.0; + + } + for (int l240 = 0; (l240 < 2); l240 = (l240 + 1)) { + fRec241[l240] = 0.0; + + } + for (int l241 = 0; (l241 < 2); l241 = (l241 + 1)) { + fRec240[l241] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d10"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38b15e0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38bb2d0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38c51e0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38cf1d0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("10"); + ui_interface->openVerticalBox("100"); + ui_interface->declare(&fVbargraph200, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d0b300", &fVbargraph200, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("101"); + ui_interface->declare(&fVbargraph202, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d153d0", &fVbargraph202, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("102"); + ui_interface->declare(&fVbargraph204, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d1f580", &fVbargraph204, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("103"); + ui_interface->declare(&fVbargraph206, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d298f0", &fVbargraph206, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("104"); + ui_interface->declare(&fVbargraph208, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d33e20", &fVbargraph208, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("105"); + ui_interface->declare(&fVbargraph210, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d3e510", &fVbargraph210, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("106"); + ui_interface->declare(&fVbargraph212, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d48dc0", &fVbargraph212, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("107"); + ui_interface->declare(&fVbargraph214, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d53830", &fVbargraph214, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("108"); + ui_interface->declare(&fVbargraph216, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d5e460", &fVbargraph216, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("109"); + ui_interface->declare(&fVbargraph218, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d69250", &fVbargraph218, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("110"); + ui_interface->declare(&fVbargraph220, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d74200", &fVbargraph220, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("111"); + ui_interface->declare(&fVbargraph222, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d7f370", &fVbargraph222, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("112"); + ui_interface->declare(&fVbargraph224, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d8a6a0", &fVbargraph224, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("113"); + ui_interface->declare(&fVbargraph226, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d95b90", &fVbargraph226, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("114"); + ui_interface->declare(&fVbargraph228, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3da1240", &fVbargraph228, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("115"); + ui_interface->declare(&fVbargraph230, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3dacab0", &fVbargraph230, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("116"); + ui_interface->declare(&fVbargraph232, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3db84e0", &fVbargraph232, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("117"); + ui_interface->declare(&fVbargraph234, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3dc40d0", &fVbargraph234, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("118"); + ui_interface->declare(&fVbargraph236, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3dcfe80", &fVbargraph236, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("119"); + ui_interface->declare(&fVbargraph238, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ddbdf0", &fVbargraph238, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("120"); + ui_interface->declare(&fVbargraph240, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3de7f20", &fVbargraph240, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38d9550", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38e3620", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38ed7d0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38f7b40", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3902070", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x390c930", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3916bc0", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3920f30", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x392b460", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3935b50", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3940400", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x394ae70", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3955c70", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39600c0", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x396a5f0", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3974ce0", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x397f590", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x398a000", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3994c30", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x399fa20", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39aa9d0", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39b5d10", &fVbargraph50, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c0320", &fVbargraph52, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39caa10", &fVbargraph54, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d52d0", &fVbargraph56, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39dfd40", &fVbargraph58, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ea970", &fVbargraph60, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39f5760", &fVbargraph62, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a00710", &fVbargraph64, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a0b880", &fVbargraph66, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a16bb0", &fVbargraph68, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a220a0", &fVbargraph70, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a2d920", &fVbargraph72, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a380f0", &fVbargraph74, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph76, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a429a0", &fVbargraph76, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph78, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a4d410", &fVbargraph78, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph80, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a58040", &fVbargraph80, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph82, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a62e30", &fVbargraph82, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph84, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a6dde0", &fVbargraph84, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph86, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a78f60", &fVbargraph86, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph88, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a84290", &fVbargraph88, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph90, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a8f780", &fVbargraph90, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph92, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a9ae30", &fVbargraph92, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph94, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa66a0", &fVbargraph94, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph96, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab20d0", &fVbargraph96, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("7"); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph98, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3abde90", &fVbargraph98, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph100, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ac8820", &fVbargraph100, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("51"); + ui_interface->declare(&fVbargraph102, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ad3290", &fVbargraph102, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("52"); + ui_interface->declare(&fVbargraph104, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3addec0", &fVbargraph104, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("53"); + ui_interface->declare(&fVbargraph106, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ae8cb0", &fVbargraph106, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("54"); + ui_interface->declare(&fVbargraph108, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3af3c60", &fVbargraph108, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("55"); + ui_interface->declare(&fVbargraph110, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3afedd0", &fVbargraph110, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("56"); + ui_interface->declare(&fVbargraph112, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b0a100", &fVbargraph112, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("57"); + ui_interface->declare(&fVbargraph114, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b155f0", &fVbargraph114, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("58"); + ui_interface->declare(&fVbargraph116, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b20ca0", &fVbargraph116, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("59"); + ui_interface->declare(&fVbargraph118, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b2c510", &fVbargraph118, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("60"); + ui_interface->declare(&fVbargraph120, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b37f40", &fVbargraph120, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("61"); + ui_interface->declare(&fVbargraph122, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b43b40", &fVbargraph122, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("62"); + ui_interface->declare(&fVbargraph124, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b4f8f0", &fVbargraph124, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("63"); + ui_interface->declare(&fVbargraph126, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b5b860", &fVbargraph126, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("8"); + ui_interface->openVerticalBox("64"); + ui_interface->declare(&fVbargraph128, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b67b60", &fVbargraph128, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("65"); + ui_interface->declare(&fVbargraph130, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b726b0", &fVbargraph130, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("66"); + ui_interface->declare(&fVbargraph132, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b7d2e0", &fVbargraph132, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("67"); + ui_interface->declare(&fVbargraph134, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b880d0", &fVbargraph134, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("68"); + ui_interface->declare(&fVbargraph136, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b93080", &fVbargraph136, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("69"); + ui_interface->declare(&fVbargraph138, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b9e1f0", &fVbargraph138, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("70"); + ui_interface->declare(&fVbargraph140, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ba9520", &fVbargraph140, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("71"); + ui_interface->declare(&fVbargraph142, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bb4a10", &fVbargraph142, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("72"); + ui_interface->declare(&fVbargraph144, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bc00c0", &fVbargraph144, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("73"); + ui_interface->declare(&fVbargraph146, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bcb930", &fVbargraph146, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("74"); + ui_interface->declare(&fVbargraph148, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bd7360", &fVbargraph148, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("75"); + ui_interface->declare(&fVbargraph150, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3be2f50", &fVbargraph150, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("76"); + ui_interface->declare(&fVbargraph152, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3beed00", &fVbargraph152, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("77"); + ui_interface->declare(&fVbargraph154, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bfac70", &fVbargraph154, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("78"); + ui_interface->declare(&fVbargraph156, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c06da0", &fVbargraph156, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("79"); + ui_interface->declare(&fVbargraph158, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c13090", &fVbargraph158, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("80"); + ui_interface->declare(&fVbargraph160, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c1f540", &fVbargraph160, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("9"); + ui_interface->openVerticalBox("81"); + ui_interface->declare(&fVbargraph162, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c2bd80", &fVbargraph162, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("82"); + ui_interface->declare(&fVbargraph164, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c36a90", &fVbargraph164, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("83"); + ui_interface->declare(&fVbargraph166, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c41880", &fVbargraph166, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("84"); + ui_interface->declare(&fVbargraph168, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c4c830", &fVbargraph168, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("85"); + ui_interface->declare(&fVbargraph170, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c579a0", &fVbargraph170, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("86"); + ui_interface->declare(&fVbargraph172, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c62cd0", &fVbargraph172, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("87"); + ui_interface->declare(&fVbargraph174, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c6e1c0", &fVbargraph174, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("88"); + ui_interface->declare(&fVbargraph176, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c79870", &fVbargraph176, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("89"); + ui_interface->declare(&fVbargraph178, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c850e0", &fVbargraph178, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("90"); + ui_interface->declare(&fVbargraph180, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c90b10", &fVbargraph180, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("91"); + ui_interface->declare(&fVbargraph182, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c9c700", &fVbargraph182, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("92"); + ui_interface->declare(&fVbargraph184, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ca84b0", &fVbargraph184, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("93"); + ui_interface->declare(&fVbargraph186, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cb4420", &fVbargraph186, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("94"); + ui_interface->declare(&fVbargraph188, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cc0550", &fVbargraph188, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("95"); + ui_interface->declare(&fVbargraph190, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ccc840", &fVbargraph190, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("96"); + ui_interface->declare(&fVbargraph192, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cd8cf0", &fVbargraph192, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("97"); + ui_interface->declare(&fVbargraph194, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ce5360", &fVbargraph194, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("98"); + ui_interface->declare(&fVbargraph196, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cf1b90", &fVbargraph196, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("99"); + ui_interface->declare(&fVbargraph198, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cfe580", &fVbargraph198, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38b5760", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38bf840", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38c9750", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38d3820", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("10"); + ui_interface->openVerticalBox("100"); + ui_interface->declare(&fVbargraph201, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d0f950", &fVbargraph201, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("101"); + ui_interface->declare(&fVbargraph203, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d19a20", &fVbargraph203, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("102"); + ui_interface->declare(&fVbargraph205, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d23cb0", &fVbargraph205, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("103"); + ui_interface->declare(&fVbargraph207, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d2e100", &fVbargraph207, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("104"); + ui_interface->declare(&fVbargraph209, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d38710", &fVbargraph209, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("105"); + ui_interface->declare(&fVbargraph211, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d42ee0", &fVbargraph211, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("106"); + ui_interface->declare(&fVbargraph213, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d4d870", &fVbargraph213, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("107"); + ui_interface->declare(&fVbargraph215, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d583c0", &fVbargraph215, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("108"); + ui_interface->declare(&fVbargraph217, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d630d0", &fVbargraph217, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("109"); + ui_interface->declare(&fVbargraph219, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d6dfa0", &fVbargraph219, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("110"); + ui_interface->declare(&fVbargraph221, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d79030", &fVbargraph221, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("111"); + ui_interface->declare(&fVbargraph223, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d84280", &fVbargraph223, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("112"); + ui_interface->declare(&fVbargraph225, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d8f690", &fVbargraph225, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("113"); + ui_interface->declare(&fVbargraph227, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d9ac60", &fVbargraph227, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("114"); + ui_interface->declare(&fVbargraph229, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3da63f0", &fVbargraph229, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("115"); + ui_interface->declare(&fVbargraph231, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3db1d40", &fVbargraph231, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("116"); + ui_interface->declare(&fVbargraph233, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3dbd850", &fVbargraph233, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("117"); + ui_interface->declare(&fVbargraph235, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3dc9520", &fVbargraph235, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("118"); + ui_interface->declare(&fVbargraph237, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3dd53b0", &fVbargraph237, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("119"); + ui_interface->declare(&fVbargraph239, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3de1400", &fVbargraph239, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("120"); + ui_interface->declare(&fVbargraph241, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ded610", &fVbargraph241, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38ddba0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38e7c70", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38f1f00", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38fc350", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3906960", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3911060", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x391b2f0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3925740", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x392fd50", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x393a520", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3944eb0", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x394fa00", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x395a480", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39648d0", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x396eee0", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39796b0", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3984040", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x398eb90", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39998a0", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39a4770", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39af800", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ba600", &fVbargraph51, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c4c10", &fVbargraph53, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39cf3e0", &fVbargraph55, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d9d80", &fVbargraph57, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e48d0", &fVbargraph59, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ef5e0", &fVbargraph61, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39fa4b0", &fVbargraph63, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a05540", &fVbargraph65, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a10790", &fVbargraph67, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a1bba0", &fVbargraph69, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a27170", &fVbargraph71, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a322f0", &fVbargraph73, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph75, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a3cac0", &fVbargraph75, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph77, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a47450", &fVbargraph77, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph79, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a51fa0", &fVbargraph79, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph81, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a5ccb0", &fVbargraph81, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph83, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a67b80", &fVbargraph83, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph85, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a72c10", &fVbargraph85, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph87, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a7de70", &fVbargraph87, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph89, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a89280", &fVbargraph89, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph91, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a94850", &fVbargraph91, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph93, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a9ffe0", &fVbargraph93, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph95, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aab930", &fVbargraph95, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph97, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab7440", &fVbargraph97, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("7"); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph99, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ac2940", &fVbargraph99, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph101, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3acd2d0", &fVbargraph101, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("51"); + ui_interface->declare(&fVbargraph103, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ad7e20", &fVbargraph103, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("52"); + ui_interface->declare(&fVbargraph105, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ae2b30", &fVbargraph105, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("53"); + ui_interface->declare(&fVbargraph107, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aeda00", &fVbargraph107, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("54"); + ui_interface->declare(&fVbargraph109, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3af8a90", &fVbargraph109, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("55"); + ui_interface->declare(&fVbargraph111, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b03ce0", &fVbargraph111, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("56"); + ui_interface->declare(&fVbargraph113, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b0f0f0", &fVbargraph113, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("57"); + ui_interface->declare(&fVbargraph115, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b1a6c0", &fVbargraph115, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("58"); + ui_interface->declare(&fVbargraph117, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b25e50", &fVbargraph117, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("59"); + ui_interface->declare(&fVbargraph119, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b317a0", &fVbargraph119, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("60"); + ui_interface->declare(&fVbargraph121, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b3d2c0", &fVbargraph121, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("61"); + ui_interface->declare(&fVbargraph123, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b48f90", &fVbargraph123, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("62"); + ui_interface->declare(&fVbargraph125, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b54e20", &fVbargraph125, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("63"); + ui_interface->declare(&fVbargraph127, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b60e70", &fVbargraph127, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("8"); + ui_interface->openVerticalBox("64"); + ui_interface->declare(&fVbargraph129, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b6c6f0", &fVbargraph129, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("65"); + ui_interface->declare(&fVbargraph131, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b77240", &fVbargraph131, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("66"); + ui_interface->declare(&fVbargraph133, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b81f50", &fVbargraph133, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("67"); + ui_interface->declare(&fVbargraph135, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b8ce20", &fVbargraph135, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("68"); + ui_interface->declare(&fVbargraph137, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b97eb0", &fVbargraph137, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("69"); + ui_interface->declare(&fVbargraph139, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ba3100", &fVbargraph139, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("70"); + ui_interface->declare(&fVbargraph141, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bae510", &fVbargraph141, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("71"); + ui_interface->declare(&fVbargraph143, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bb9ae0", &fVbargraph143, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("72"); + ui_interface->declare(&fVbargraph145, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bc5270", &fVbargraph145, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("73"); + ui_interface->declare(&fVbargraph147, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bd0bc0", &fVbargraph147, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("74"); + ui_interface->declare(&fVbargraph149, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bdc6d0", &fVbargraph149, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("75"); + ui_interface->declare(&fVbargraph151, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3be83a0", &fVbargraph151, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("76"); + ui_interface->declare(&fVbargraph153, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3bf4230", &fVbargraph153, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("77"); + ui_interface->declare(&fVbargraph155, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c00280", &fVbargraph155, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("78"); + ui_interface->declare(&fVbargraph157, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c0c490", &fVbargraph157, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("79"); + ui_interface->declare(&fVbargraph159, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c18860", &fVbargraph159, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("80"); + ui_interface->declare(&fVbargraph161, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c24df0", &fVbargraph161, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("9"); + ui_interface->openVerticalBox("81"); + ui_interface->declare(&fVbargraph163, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c309f0", &fVbargraph163, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("82"); + ui_interface->declare(&fVbargraph165, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c3b700", &fVbargraph165, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("83"); + ui_interface->declare(&fVbargraph167, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c465d0", &fVbargraph167, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("84"); + ui_interface->declare(&fVbargraph169, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c51660", &fVbargraph169, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("85"); + ui_interface->declare(&fVbargraph171, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c5c8b0", &fVbargraph171, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("86"); + ui_interface->declare(&fVbargraph173, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c67cc0", &fVbargraph173, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("87"); + ui_interface->declare(&fVbargraph175, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c73290", &fVbargraph175, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("88"); + ui_interface->declare(&fVbargraph177, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c7ea20", &fVbargraph177, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("89"); + ui_interface->declare(&fVbargraph179, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c8a370", &fVbargraph179, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("90"); + ui_interface->declare(&fVbargraph181, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3c95e80", &fVbargraph181, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("91"); + ui_interface->declare(&fVbargraph183, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ca1b50", &fVbargraph183, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("92"); + ui_interface->declare(&fVbargraph185, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cad9e0", &fVbargraph185, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("93"); + ui_interface->declare(&fVbargraph187, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cb9a30", &fVbargraph187, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("94"); + ui_interface->declare(&fVbargraph189, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cc5c40", &fVbargraph189, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("95"); + ui_interface->declare(&fVbargraph191, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cd2010", &fVbargraph191, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("96"); + ui_interface->declare(&fVbargraph193, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cde5a0", &fVbargraph193, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("97"); + ui_interface->declare(&fVbargraph195, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ceacf0", &fVbargraph195, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("98"); + ui_interface->declare(&fVbargraph197, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3cf7600", &fVbargraph197, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("99"); + ui_interface->declare(&fVbargraph199, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3d040d0", &fVbargraph199, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* input81 = inputs[81]; + FAUSTFLOAT* input82 = inputs[82]; + FAUSTFLOAT* input83 = inputs[83]; + FAUSTFLOAT* input84 = inputs[84]; + FAUSTFLOAT* input85 = inputs[85]; + FAUSTFLOAT* input86 = inputs[86]; + FAUSTFLOAT* input87 = inputs[87]; + FAUSTFLOAT* input88 = inputs[88]; + FAUSTFLOAT* input89 = inputs[89]; + FAUSTFLOAT* input90 = inputs[90]; + FAUSTFLOAT* input91 = inputs[91]; + FAUSTFLOAT* input92 = inputs[92]; + FAUSTFLOAT* input93 = inputs[93]; + FAUSTFLOAT* input94 = inputs[94]; + FAUSTFLOAT* input95 = inputs[95]; + FAUSTFLOAT* input96 = inputs[96]; + FAUSTFLOAT* input97 = inputs[97]; + FAUSTFLOAT* input98 = inputs[98]; + FAUSTFLOAT* input99 = inputs[99]; + FAUSTFLOAT* input100 = inputs[100]; + FAUSTFLOAT* input101 = inputs[101]; + FAUSTFLOAT* input102 = inputs[102]; + FAUSTFLOAT* input103 = inputs[103]; + FAUSTFLOAT* input104 = inputs[104]; + FAUSTFLOAT* input105 = inputs[105]; + FAUSTFLOAT* input106 = inputs[106]; + FAUSTFLOAT* input107 = inputs[107]; + FAUSTFLOAT* input108 = inputs[108]; + FAUSTFLOAT* input109 = inputs[109]; + FAUSTFLOAT* input110 = inputs[110]; + FAUSTFLOAT* input111 = inputs[111]; + FAUSTFLOAT* input112 = inputs[112]; + FAUSTFLOAT* input113 = inputs[113]; + FAUSTFLOAT* input114 = inputs[114]; + FAUSTFLOAT* input115 = inputs[115]; + FAUSTFLOAT* input116 = inputs[116]; + FAUSTFLOAT* input117 = inputs[117]; + FAUSTFLOAT* input118 = inputs[118]; + FAUSTFLOAT* input119 = inputs[119]; + FAUSTFLOAT* input120 = inputs[120]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + FAUSTFLOAT* output81 = outputs[81]; + FAUSTFLOAT* output82 = outputs[82]; + FAUSTFLOAT* output83 = outputs[83]; + FAUSTFLOAT* output84 = outputs[84]; + FAUSTFLOAT* output85 = outputs[85]; + FAUSTFLOAT* output86 = outputs[86]; + FAUSTFLOAT* output87 = outputs[87]; + FAUSTFLOAT* output88 = outputs[88]; + FAUSTFLOAT* output89 = outputs[89]; + FAUSTFLOAT* output90 = outputs[90]; + FAUSTFLOAT* output91 = outputs[91]; + FAUSTFLOAT* output92 = outputs[92]; + FAUSTFLOAT* output93 = outputs[93]; + FAUSTFLOAT* output94 = outputs[94]; + FAUSTFLOAT* output95 = outputs[95]; + FAUSTFLOAT* output96 = outputs[96]; + FAUSTFLOAT* output97 = outputs[97]; + FAUSTFLOAT* output98 = outputs[98]; + FAUSTFLOAT* output99 = outputs[99]; + FAUSTFLOAT* output100 = outputs[100]; + FAUSTFLOAT* output101 = outputs[101]; + FAUSTFLOAT* output102 = outputs[102]; + FAUSTFLOAT* output103 = outputs[103]; + FAUSTFLOAT* output104 = outputs[104]; + FAUSTFLOAT* output105 = outputs[105]; + FAUSTFLOAT* output106 = outputs[106]; + FAUSTFLOAT* output107 = outputs[107]; + FAUSTFLOAT* output108 = outputs[108]; + FAUSTFLOAT* output109 = outputs[109]; + FAUSTFLOAT* output110 = outputs[110]; + FAUSTFLOAT* output111 = outputs[111]; + FAUSTFLOAT* output112 = outputs[112]; + FAUSTFLOAT* output113 = outputs[113]; + FAUSTFLOAT* output114 = outputs[114]; + FAUSTFLOAT* output115 = outputs[115]; + FAUSTFLOAT* output116 = outputs[116]; + FAUSTFLOAT* output117 = outputs[117]; + FAUSTFLOAT* output118 = outputs[118]; + FAUSTFLOAT* output119 = outputs[119]; + FAUSTFLOAT* output120 = outputs[120]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = double(input8[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp18 = (0.3779644730092272 * fTemp17); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input10[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp20 = (0.3779644730092272 * fTemp19); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp22 = (0.3779644730092272 * fTemp21); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp24 = (0.3779644730092272 * fTemp23); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input13[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp26 = (0.3779644730092272 * fTemp25); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = double(input14[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp28 = (0.3779644730092272 * fTemp27); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = double(input15[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + double fTemp32 = (0.33333333333333331 * fTemp31); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph33 = FAUSTFLOAT(fRec32[0]); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph34 = FAUSTFLOAT(fRec35[0]); + double fTemp34 = (0.33333333333333331 * fTemp33); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph35 = FAUSTFLOAT(fRec34[0]); + output17[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph36 = FAUSTFLOAT(fRec37[0]); + double fTemp36 = (0.33333333333333331 * fTemp35); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph37 = FAUSTFLOAT(fRec36[0]); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph38 = FAUSTFLOAT(fRec39[0]); + double fTemp38 = (0.33333333333333331 * fTemp37); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph39 = FAUSTFLOAT(fRec38[0]); + output19[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph40 = FAUSTFLOAT(fRec41[0]); + double fTemp40 = (0.33333333333333331 * fTemp39); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph41 = FAUSTFLOAT(fRec40[0]); + output20[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph42 = FAUSTFLOAT(fRec43[0]); + double fTemp42 = (0.33333333333333331 * fTemp41); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph43 = FAUSTFLOAT(fRec42[0]); + output21[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph44 = FAUSTFLOAT(fRec45[0]); + double fTemp44 = (0.33333333333333331 * fTemp43); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph45 = FAUSTFLOAT(fRec44[0]); + output22[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph46 = FAUSTFLOAT(fRec47[0]); + double fTemp46 = (0.33333333333333331 * fTemp45); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph47 = FAUSTFLOAT(fRec46[0]); + output23[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph48 = FAUSTFLOAT(fRec49[0]); + double fTemp48 = (0.33333333333333331 * fTemp47); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph49 = FAUSTFLOAT(fRec48[0]); + output24[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = double(input25[i]); + fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph50 = FAUSTFLOAT(fRec51[0]); + double fTemp50 = (0.30151134457776363 * fTemp49); + fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph51 = FAUSTFLOAT(fRec50[0]); + output25[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = double(input26[i]); + fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph52 = FAUSTFLOAT(fRec53[0]); + double fTemp52 = (0.30151134457776363 * fTemp51); + fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph53 = FAUSTFLOAT(fRec52[0]); + output26[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = double(input27[i]); + fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph54 = FAUSTFLOAT(fRec55[0]); + double fTemp54 = (0.30151134457776363 * fTemp53); + fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph55 = FAUSTFLOAT(fRec54[0]); + output27[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = double(input28[i]); + fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph56 = FAUSTFLOAT(fRec57[0]); + double fTemp56 = (0.30151134457776363 * fTemp55); + fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph57 = FAUSTFLOAT(fRec56[0]); + output28[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = double(input29[i]); + fRec59[0] = max((fRec59[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph58 = FAUSTFLOAT(fRec59[0]); + double fTemp58 = (0.30151134457776363 * fTemp57); + fRec58[0] = max((fRec58[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph59 = FAUSTFLOAT(fRec58[0]); + output29[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = double(input30[i]); + fRec61[0] = max((fRec61[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph60 = FAUSTFLOAT(fRec61[0]); + double fTemp60 = (0.30151134457776363 * fTemp59); + fRec60[0] = max((fRec60[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph61 = FAUSTFLOAT(fRec60[0]); + output30[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = double(input31[i]); + fRec63[0] = max((fRec63[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph62 = FAUSTFLOAT(fRec63[0]); + double fTemp62 = (0.30151134457776363 * fTemp61); + fRec62[0] = max((fRec62[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph63 = FAUSTFLOAT(fRec62[0]); + output31[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = double(input32[i]); + fRec65[0] = max((fRec65[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph64 = FAUSTFLOAT(fRec65[0]); + double fTemp64 = (0.30151134457776363 * fTemp63); + fRec64[0] = max((fRec64[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph65 = FAUSTFLOAT(fRec64[0]); + output32[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = double(input33[i]); + fRec67[0] = max((fRec67[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph66 = FAUSTFLOAT(fRec67[0]); + double fTemp66 = (0.30151134457776363 * fTemp65); + fRec66[0] = max((fRec66[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph67 = FAUSTFLOAT(fRec66[0]); + output33[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = double(input34[i]); + fRec69[0] = max((fRec69[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); + fVbargraph68 = FAUSTFLOAT(fRec69[0]); + double fTemp68 = (0.30151134457776363 * fTemp67); + fRec68[0] = max((fRec68[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph69 = FAUSTFLOAT(fRec68[0]); + output34[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = double(input35[i]); + fRec71[0] = max((fRec71[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph70 = FAUSTFLOAT(fRec71[0]); + double fTemp70 = (0.30151134457776363 * fTemp69); + fRec70[0] = max((fRec70[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph71 = FAUSTFLOAT(fRec70[0]); + output35[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = double(input36[i]); + fRec73[0] = max((fRec73[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph72 = FAUSTFLOAT(fRec73[0]); + double fTemp72 = (0.27735009811261457 * fTemp71); + fRec72[0] = max((fRec72[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph73 = FAUSTFLOAT(fRec72[0]); + output36[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = double(input37[i]); + fRec75[0] = max((fRec75[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph74 = FAUSTFLOAT(fRec75[0]); + double fTemp74 = (0.27735009811261457 * fTemp73); + fRec74[0] = max((fRec74[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + fVbargraph75 = FAUSTFLOAT(fRec74[0]); + output37[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = double(input38[i]); + fRec77[0] = max((fRec77[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp75)))))); + fVbargraph76 = FAUSTFLOAT(fRec77[0]); + double fTemp76 = (0.27735009811261457 * fTemp75); + fRec76[0] = max((fRec76[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph77 = FAUSTFLOAT(fRec76[0]); + output38[i] = FAUSTFLOAT(fTemp76); + double fTemp77 = double(input39[i]); + fRec79[0] = max((fRec79[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph78 = FAUSTFLOAT(fRec79[0]); + double fTemp78 = (0.27735009811261457 * fTemp77); + fRec78[0] = max((fRec78[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph79 = FAUSTFLOAT(fRec78[0]); + output39[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = double(input40[i]); + fRec81[0] = max((fRec81[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + fVbargraph80 = FAUSTFLOAT(fRec81[0]); + double fTemp80 = (0.27735009811261457 * fTemp79); + fRec80[0] = max((fRec80[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + fVbargraph81 = FAUSTFLOAT(fRec80[0]); + output40[i] = FAUSTFLOAT(fTemp80); + double fTemp81 = double(input41[i]); + fRec83[0] = max((fRec83[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + fVbargraph82 = FAUSTFLOAT(fRec83[0]); + double fTemp82 = (0.27735009811261457 * fTemp81); + fRec82[0] = max((fRec82[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph83 = FAUSTFLOAT(fRec82[0]); + output41[i] = FAUSTFLOAT(fTemp82); + double fTemp83 = double(input42[i]); + fRec85[0] = max((fRec85[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph84 = FAUSTFLOAT(fRec85[0]); + double fTemp84 = (0.27735009811261457 * fTemp83); + fRec84[0] = max((fRec84[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph85 = FAUSTFLOAT(fRec84[0]); + output42[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = double(input43[i]); + fRec87[0] = max((fRec87[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + fVbargraph86 = FAUSTFLOAT(fRec87[0]); + double fTemp86 = (0.27735009811261457 * fTemp85); + fRec86[0] = max((fRec86[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); + fVbargraph87 = FAUSTFLOAT(fRec86[0]); + output43[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = double(input44[i]); + fRec89[0] = max((fRec89[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph88 = FAUSTFLOAT(fRec89[0]); + double fTemp88 = (0.27735009811261457 * fTemp87); + fRec88[0] = max((fRec88[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp88)))))); + fVbargraph89 = FAUSTFLOAT(fRec88[0]); + output44[i] = FAUSTFLOAT(fTemp88); + double fTemp89 = double(input45[i]); + fRec91[0] = max((fRec91[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + fVbargraph90 = FAUSTFLOAT(fRec91[0]); + double fTemp90 = (0.27735009811261457 * fTemp89); + fRec90[0] = max((fRec90[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph91 = FAUSTFLOAT(fRec90[0]); + output45[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = double(input46[i]); + fRec93[0] = max((fRec93[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph92 = FAUSTFLOAT(fRec93[0]); + double fTemp92 = (0.27735009811261457 * fTemp91); + fRec92[0] = max((fRec92[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph93 = FAUSTFLOAT(fRec92[0]); + output46[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = double(input47[i]); + fRec95[0] = max((fRec95[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph94 = FAUSTFLOAT(fRec95[0]); + double fTemp94 = (0.27735009811261457 * fTemp93); + fRec94[0] = max((fRec94[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph95 = FAUSTFLOAT(fRec94[0]); + output47[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = double(input48[i]); + fRec97[0] = max((fRec97[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph96 = FAUSTFLOAT(fRec97[0]); + double fTemp96 = (0.27735009811261457 * fTemp95); + fRec96[0] = max((fRec96[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph97 = FAUSTFLOAT(fRec96[0]); + output48[i] = FAUSTFLOAT(fTemp96); + double fTemp97 = double(input49[i]); + fRec99[0] = max((fRec99[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + fVbargraph98 = FAUSTFLOAT(fRec99[0]); + double fTemp98 = (0.2581988897471611 * fTemp97); + fRec98[0] = max((fRec98[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + fVbargraph99 = FAUSTFLOAT(fRec98[0]); + output49[i] = FAUSTFLOAT(fTemp98); + double fTemp99 = double(input50[i]); + fRec101[0] = max((fRec101[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); + fVbargraph100 = FAUSTFLOAT(fRec101[0]); + double fTemp100 = (0.2581988897471611 * fTemp99); + fRec100[0] = max((fRec100[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + fVbargraph101 = FAUSTFLOAT(fRec100[0]); + output50[i] = FAUSTFLOAT(fTemp100); + double fTemp101 = double(input51[i]); + fRec103[0] = max((fRec103[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); + fVbargraph102 = FAUSTFLOAT(fRec103[0]); + double fTemp102 = (0.2581988897471611 * fTemp101); + fRec102[0] = max((fRec102[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); + fVbargraph103 = FAUSTFLOAT(fRec102[0]); + output51[i] = FAUSTFLOAT(fTemp102); + double fTemp103 = double(input52[i]); + fRec105[0] = max((fRec105[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + fVbargraph104 = FAUSTFLOAT(fRec105[0]); + double fTemp104 = (0.2581988897471611 * fTemp103); + fRec104[0] = max((fRec104[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); + fVbargraph105 = FAUSTFLOAT(fRec104[0]); + output52[i] = FAUSTFLOAT(fTemp104); + double fTemp105 = double(input53[i]); + fRec107[0] = max((fRec107[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); + fVbargraph106 = FAUSTFLOAT(fRec107[0]); + double fTemp106 = (0.2581988897471611 * fTemp105); + fRec106[0] = max((fRec106[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); + fVbargraph107 = FAUSTFLOAT(fRec106[0]); + output53[i] = FAUSTFLOAT(fTemp106); + double fTemp107 = double(input54[i]); + fRec109[0] = max((fRec109[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); + fVbargraph108 = FAUSTFLOAT(fRec109[0]); + double fTemp108 = (0.2581988897471611 * fTemp107); + fRec108[0] = max((fRec108[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); + fVbargraph109 = FAUSTFLOAT(fRec108[0]); + output54[i] = FAUSTFLOAT(fTemp108); + double fTemp109 = double(input55[i]); + fRec111[0] = max((fRec111[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp109)))))); + fVbargraph110 = FAUSTFLOAT(fRec111[0]); + double fTemp110 = (0.2581988897471611 * fTemp109); + fRec110[0] = max((fRec110[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp110)))))); + fVbargraph111 = FAUSTFLOAT(fRec110[0]); + output55[i] = FAUSTFLOAT(fTemp110); + double fTemp111 = double(input56[i]); + fRec113[0] = max((fRec113[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp111)))))); + fVbargraph112 = FAUSTFLOAT(fRec113[0]); + double fTemp112 = (0.2581988897471611 * fTemp111); + fRec112[0] = max((fRec112[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp112)))))); + fVbargraph113 = FAUSTFLOAT(fRec112[0]); + output56[i] = FAUSTFLOAT(fTemp112); + double fTemp113 = double(input57[i]); + fRec115[0] = max((fRec115[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp113)))))); + fVbargraph114 = FAUSTFLOAT(fRec115[0]); + double fTemp114 = (0.2581988897471611 * fTemp113); + fRec114[0] = max((fRec114[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp114)))))); + fVbargraph115 = FAUSTFLOAT(fRec114[0]); + output57[i] = FAUSTFLOAT(fTemp114); + double fTemp115 = double(input58[i]); + fRec117[0] = max((fRec117[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp115)))))); + fVbargraph116 = FAUSTFLOAT(fRec117[0]); + double fTemp116 = (0.2581988897471611 * fTemp115); + fRec116[0] = max((fRec116[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp116)))))); + fVbargraph117 = FAUSTFLOAT(fRec116[0]); + output58[i] = FAUSTFLOAT(fTemp116); + double fTemp117 = double(input59[i]); + fRec119[0] = max((fRec119[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp117)))))); + fVbargraph118 = FAUSTFLOAT(fRec119[0]); + double fTemp118 = (0.2581988897471611 * fTemp117); + fRec118[0] = max((fRec118[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp118)))))); + fVbargraph119 = FAUSTFLOAT(fRec118[0]); + output59[i] = FAUSTFLOAT(fTemp118); + double fTemp119 = double(input60[i]); + fRec121[0] = max((fRec121[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp119)))))); + fVbargraph120 = FAUSTFLOAT(fRec121[0]); + double fTemp120 = (0.2581988897471611 * fTemp119); + fRec120[0] = max((fRec120[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp120)))))); + fVbargraph121 = FAUSTFLOAT(fRec120[0]); + output60[i] = FAUSTFLOAT(fTemp120); + double fTemp121 = double(input61[i]); + fRec123[0] = max((fRec123[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp121)))))); + fVbargraph122 = FAUSTFLOAT(fRec123[0]); + double fTemp122 = (0.2581988897471611 * fTemp121); + fRec122[0] = max((fRec122[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp122)))))); + fVbargraph123 = FAUSTFLOAT(fRec122[0]); + output61[i] = FAUSTFLOAT(fTemp122); + double fTemp123 = double(input62[i]); + fRec125[0] = max((fRec125[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp123)))))); + fVbargraph124 = FAUSTFLOAT(fRec125[0]); + double fTemp124 = (0.2581988897471611 * fTemp123); + fRec124[0] = max((fRec124[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp124)))))); + fVbargraph125 = FAUSTFLOAT(fRec124[0]); + output62[i] = FAUSTFLOAT(fTemp124); + double fTemp125 = double(input63[i]); + fRec127[0] = max((fRec127[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp125)))))); + fVbargraph126 = FAUSTFLOAT(fRec127[0]); + double fTemp126 = (0.2581988897471611 * fTemp125); + fRec126[0] = max((fRec126[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); + fVbargraph127 = FAUSTFLOAT(fRec126[0]); + output63[i] = FAUSTFLOAT(fTemp126); + double fTemp127 = double(input64[i]); + fRec129[0] = max((fRec129[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp127)))))); + fVbargraph128 = FAUSTFLOAT(fRec129[0]); + double fTemp128 = (0.24253562503633297 * fTemp127); + fRec128[0] = max((fRec128[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp128)))))); + fVbargraph129 = FAUSTFLOAT(fRec128[0]); + output64[i] = FAUSTFLOAT(fTemp128); + double fTemp129 = double(input65[i]); + fRec131[0] = max((fRec131[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp129)))))); + fVbargraph130 = FAUSTFLOAT(fRec131[0]); + double fTemp130 = (0.24253562503633297 * fTemp129); + fRec130[0] = max((fRec130[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp130)))))); + fVbargraph131 = FAUSTFLOAT(fRec130[0]); + output65[i] = FAUSTFLOAT(fTemp130); + double fTemp131 = double(input66[i]); + fRec133[0] = max((fRec133[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp131)))))); + fVbargraph132 = FAUSTFLOAT(fRec133[0]); + double fTemp132 = (0.24253562503633297 * fTemp131); + fRec132[0] = max((fRec132[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp132)))))); + fVbargraph133 = FAUSTFLOAT(fRec132[0]); + output66[i] = FAUSTFLOAT(fTemp132); + double fTemp133 = double(input67[i]); + fRec135[0] = max((fRec135[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp133)))))); + fVbargraph134 = FAUSTFLOAT(fRec135[0]); + double fTemp134 = (0.24253562503633297 * fTemp133); + fRec134[0] = max((fRec134[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp134)))))); + fVbargraph135 = FAUSTFLOAT(fRec134[0]); + output67[i] = FAUSTFLOAT(fTemp134); + double fTemp135 = double(input68[i]); + fRec137[0] = max((fRec137[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp135)))))); + fVbargraph136 = FAUSTFLOAT(fRec137[0]); + double fTemp136 = (0.24253562503633297 * fTemp135); + fRec136[0] = max((fRec136[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp136)))))); + fVbargraph137 = FAUSTFLOAT(fRec136[0]); + output68[i] = FAUSTFLOAT(fTemp136); + double fTemp137 = double(input69[i]); + fRec139[0] = max((fRec139[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp137)))))); + fVbargraph138 = FAUSTFLOAT(fRec139[0]); + double fTemp138 = (0.24253562503633297 * fTemp137); + fRec138[0] = max((fRec138[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp138)))))); + fVbargraph139 = FAUSTFLOAT(fRec138[0]); + output69[i] = FAUSTFLOAT(fTemp138); + double fTemp139 = double(input70[i]); + fRec141[0] = max((fRec141[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp139)))))); + fVbargraph140 = FAUSTFLOAT(fRec141[0]); + double fTemp140 = (0.24253562503633297 * fTemp139); + fRec140[0] = max((fRec140[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp140)))))); + fVbargraph141 = FAUSTFLOAT(fRec140[0]); + output70[i] = FAUSTFLOAT(fTemp140); + double fTemp141 = double(input71[i]); + fRec143[0] = max((fRec143[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp141)))))); + fVbargraph142 = FAUSTFLOAT(fRec143[0]); + double fTemp142 = (0.24253562503633297 * fTemp141); + fRec142[0] = max((fRec142[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp142)))))); + fVbargraph143 = FAUSTFLOAT(fRec142[0]); + output71[i] = FAUSTFLOAT(fTemp142); + double fTemp143 = double(input72[i]); + fRec145[0] = max((fRec145[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp143)))))); + fVbargraph144 = FAUSTFLOAT(fRec145[0]); + double fTemp144 = (0.24253562503633297 * fTemp143); + fRec144[0] = max((fRec144[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp144)))))); + fVbargraph145 = FAUSTFLOAT(fRec144[0]); + output72[i] = FAUSTFLOAT(fTemp144); + double fTemp145 = double(input73[i]); + fRec147[0] = max((fRec147[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp145)))))); + fVbargraph146 = FAUSTFLOAT(fRec147[0]); + double fTemp146 = (0.24253562503633297 * fTemp145); + fRec146[0] = max((fRec146[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp146)))))); + fVbargraph147 = FAUSTFLOAT(fRec146[0]); + output73[i] = FAUSTFLOAT(fTemp146); + double fTemp147 = double(input74[i]); + fRec149[0] = max((fRec149[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp147)))))); + fVbargraph148 = FAUSTFLOAT(fRec149[0]); + double fTemp148 = (0.24253562503633297 * fTemp147); + fRec148[0] = max((fRec148[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp148)))))); + fVbargraph149 = FAUSTFLOAT(fRec148[0]); + output74[i] = FAUSTFLOAT(fTemp148); + double fTemp149 = double(input75[i]); + fRec151[0] = max((fRec151[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp149)))))); + fVbargraph150 = FAUSTFLOAT(fRec151[0]); + double fTemp150 = (0.24253562503633297 * fTemp149); + fRec150[0] = max((fRec150[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp150)))))); + fVbargraph151 = FAUSTFLOAT(fRec150[0]); + output75[i] = FAUSTFLOAT(fTemp150); + double fTemp151 = double(input76[i]); + fRec153[0] = max((fRec153[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp151)))))); + fVbargraph152 = FAUSTFLOAT(fRec153[0]); + double fTemp152 = (0.24253562503633297 * fTemp151); + fRec152[0] = max((fRec152[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); + fVbargraph153 = FAUSTFLOAT(fRec152[0]); + output76[i] = FAUSTFLOAT(fTemp152); + double fTemp153 = double(input77[i]); + fRec155[0] = max((fRec155[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp153)))))); + fVbargraph154 = FAUSTFLOAT(fRec155[0]); + double fTemp154 = (0.24253562503633297 * fTemp153); + fRec154[0] = max((fRec154[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp154)))))); + fVbargraph155 = FAUSTFLOAT(fRec154[0]); + output77[i] = FAUSTFLOAT(fTemp154); + double fTemp155 = double(input78[i]); + fRec157[0] = max((fRec157[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); + fVbargraph156 = FAUSTFLOAT(fRec157[0]); + double fTemp156 = (0.24253562503633297 * fTemp155); + fRec156[0] = max((fRec156[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp156)))))); + fVbargraph157 = FAUSTFLOAT(fRec156[0]); + output78[i] = FAUSTFLOAT(fTemp156); + double fTemp157 = double(input79[i]); + fRec159[0] = max((fRec159[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp157)))))); + fVbargraph158 = FAUSTFLOAT(fRec159[0]); + double fTemp158 = (0.24253562503633297 * fTemp157); + fRec158[0] = max((fRec158[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp158)))))); + fVbargraph159 = FAUSTFLOAT(fRec158[0]); + output79[i] = FAUSTFLOAT(fTemp158); + double fTemp159 = double(input80[i]); + fRec161[0] = max((fRec161[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp159)))))); + fVbargraph160 = FAUSTFLOAT(fRec161[0]); + double fTemp160 = (0.24253562503633297 * fTemp159); + fRec160[0] = max((fRec160[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp160)))))); + fVbargraph161 = FAUSTFLOAT(fRec160[0]); + output80[i] = FAUSTFLOAT(fTemp160); + double fTemp161 = double(input81[i]); + fRec163[0] = max((fRec163[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp161)))))); + fVbargraph162 = FAUSTFLOAT(fRec163[0]); + double fTemp162 = (0.22941573387056174 * fTemp161); + fRec162[0] = max((fRec162[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp162)))))); + fVbargraph163 = FAUSTFLOAT(fRec162[0]); + output81[i] = FAUSTFLOAT(fTemp162); + double fTemp163 = double(input82[i]); + fRec165[0] = max((fRec165[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp163)))))); + fVbargraph164 = FAUSTFLOAT(fRec165[0]); + double fTemp164 = (0.22941573387056174 * fTemp163); + fRec164[0] = max((fRec164[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp164)))))); + fVbargraph165 = FAUSTFLOAT(fRec164[0]); + output82[i] = FAUSTFLOAT(fTemp164); + double fTemp165 = double(input83[i]); + fRec167[0] = max((fRec167[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp165)))))); + fVbargraph166 = FAUSTFLOAT(fRec167[0]); + double fTemp166 = (0.22941573387056174 * fTemp165); + fRec166[0] = max((fRec166[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp166)))))); + fVbargraph167 = FAUSTFLOAT(fRec166[0]); + output83[i] = FAUSTFLOAT(fTemp166); + double fTemp167 = double(input84[i]); + fRec169[0] = max((fRec169[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp167)))))); + fVbargraph168 = FAUSTFLOAT(fRec169[0]); + double fTemp168 = (0.22941573387056174 * fTemp167); + fRec168[0] = max((fRec168[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp168)))))); + fVbargraph169 = FAUSTFLOAT(fRec168[0]); + output84[i] = FAUSTFLOAT(fTemp168); + double fTemp169 = double(input85[i]); + fRec171[0] = max((fRec171[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp169)))))); + fVbargraph170 = FAUSTFLOAT(fRec171[0]); + double fTemp170 = (0.22941573387056174 * fTemp169); + fRec170[0] = max((fRec170[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp170)))))); + fVbargraph171 = FAUSTFLOAT(fRec170[0]); + output85[i] = FAUSTFLOAT(fTemp170); + double fTemp171 = double(input86[i]); + fRec173[0] = max((fRec173[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp171)))))); + fVbargraph172 = FAUSTFLOAT(fRec173[0]); + double fTemp172 = (0.22941573387056174 * fTemp171); + fRec172[0] = max((fRec172[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp172)))))); + fVbargraph173 = FAUSTFLOAT(fRec172[0]); + output86[i] = FAUSTFLOAT(fTemp172); + double fTemp173 = double(input87[i]); + fRec175[0] = max((fRec175[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp173)))))); + fVbargraph174 = FAUSTFLOAT(fRec175[0]); + double fTemp174 = (0.22941573387056174 * fTemp173); + fRec174[0] = max((fRec174[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp174)))))); + fVbargraph175 = FAUSTFLOAT(fRec174[0]); + output87[i] = FAUSTFLOAT(fTemp174); + double fTemp175 = double(input88[i]); + fRec177[0] = max((fRec177[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp175)))))); + fVbargraph176 = FAUSTFLOAT(fRec177[0]); + double fTemp176 = (0.22941573387056174 * fTemp175); + fRec176[0] = max((fRec176[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp176)))))); + fVbargraph177 = FAUSTFLOAT(fRec176[0]); + output88[i] = FAUSTFLOAT(fTemp176); + double fTemp177 = double(input89[i]); + fRec179[0] = max((fRec179[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp177)))))); + fVbargraph178 = FAUSTFLOAT(fRec179[0]); + double fTemp178 = (0.22941573387056174 * fTemp177); + fRec178[0] = max((fRec178[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp178)))))); + fVbargraph179 = FAUSTFLOAT(fRec178[0]); + output89[i] = FAUSTFLOAT(fTemp178); + double fTemp179 = double(input90[i]); + fRec181[0] = max((fRec181[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp179)))))); + fVbargraph180 = FAUSTFLOAT(fRec181[0]); + double fTemp180 = (0.22941573387056174 * fTemp179); + fRec180[0] = max((fRec180[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp180)))))); + fVbargraph181 = FAUSTFLOAT(fRec180[0]); + output90[i] = FAUSTFLOAT(fTemp180); + double fTemp181 = double(input91[i]); + fRec183[0] = max((fRec183[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp181)))))); + fVbargraph182 = FAUSTFLOAT(fRec183[0]); + double fTemp182 = (0.22941573387056174 * fTemp181); + fRec182[0] = max((fRec182[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp182)))))); + fVbargraph183 = FAUSTFLOAT(fRec182[0]); + output91[i] = FAUSTFLOAT(fTemp182); + double fTemp183 = double(input92[i]); + fRec185[0] = max((fRec185[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp183)))))); + fVbargraph184 = FAUSTFLOAT(fRec185[0]); + double fTemp184 = (0.22941573387056174 * fTemp183); + fRec184[0] = max((fRec184[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp184)))))); + fVbargraph185 = FAUSTFLOAT(fRec184[0]); + output92[i] = FAUSTFLOAT(fTemp184); + double fTemp185 = double(input93[i]); + fRec187[0] = max((fRec187[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp185)))))); + fVbargraph186 = FAUSTFLOAT(fRec187[0]); + double fTemp186 = (0.22941573387056174 * fTemp185); + fRec186[0] = max((fRec186[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp186)))))); + fVbargraph187 = FAUSTFLOAT(fRec186[0]); + output93[i] = FAUSTFLOAT(fTemp186); + double fTemp187 = double(input94[i]); + fRec189[0] = max((fRec189[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp187)))))); + fVbargraph188 = FAUSTFLOAT(fRec189[0]); + double fTemp188 = (0.22941573387056174 * fTemp187); + fRec188[0] = max((fRec188[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp188)))))); + fVbargraph189 = FAUSTFLOAT(fRec188[0]); + output94[i] = FAUSTFLOAT(fTemp188); + double fTemp189 = double(input95[i]); + fRec191[0] = max((fRec191[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp189)))))); + fVbargraph190 = FAUSTFLOAT(fRec191[0]); + double fTemp190 = (0.22941573387056174 * fTemp189); + fRec190[0] = max((fRec190[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp190)))))); + fVbargraph191 = FAUSTFLOAT(fRec190[0]); + output95[i] = FAUSTFLOAT(fTemp190); + double fTemp191 = double(input96[i]); + fRec193[0] = max((fRec193[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp191)))))); + fVbargraph192 = FAUSTFLOAT(fRec193[0]); + double fTemp192 = (0.22941573387056174 * fTemp191); + fRec192[0] = max((fRec192[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp192)))))); + fVbargraph193 = FAUSTFLOAT(fRec192[0]); + output96[i] = FAUSTFLOAT(fTemp192); + double fTemp193 = double(input97[i]); + fRec195[0] = max((fRec195[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp193)))))); + fVbargraph194 = FAUSTFLOAT(fRec195[0]); + double fTemp194 = (0.22941573387056174 * fTemp193); + fRec194[0] = max((fRec194[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp194)))))); + fVbargraph195 = FAUSTFLOAT(fRec194[0]); + output97[i] = FAUSTFLOAT(fTemp194); + double fTemp195 = double(input98[i]); + fRec197[0] = max((fRec197[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp195)))))); + fVbargraph196 = FAUSTFLOAT(fRec197[0]); + double fTemp196 = (0.22941573387056174 * fTemp195); + fRec196[0] = max((fRec196[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp196)))))); + fVbargraph197 = FAUSTFLOAT(fRec196[0]); + output98[i] = FAUSTFLOAT(fTemp196); + double fTemp197 = double(input99[i]); + fRec199[0] = max((fRec199[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp197)))))); + fVbargraph198 = FAUSTFLOAT(fRec199[0]); + double fTemp198 = (0.22941573387056174 * fTemp197); + fRec198[0] = max((fRec198[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp198)))))); + fVbargraph199 = FAUSTFLOAT(fRec198[0]); + output99[i] = FAUSTFLOAT(fTemp198); + double fTemp199 = double(input100[i]); + fRec201[0] = max((fRec201[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp199)))))); + fVbargraph200 = FAUSTFLOAT(fRec201[0]); + double fTemp200 = (0.21821789023599239 * fTemp199); + fRec200[0] = max((fRec200[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp200)))))); + fVbargraph201 = FAUSTFLOAT(fRec200[0]); + output100[i] = FAUSTFLOAT(fTemp200); + double fTemp201 = double(input101[i]); + fRec203[0] = max((fRec203[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp201)))))); + fVbargraph202 = FAUSTFLOAT(fRec203[0]); + double fTemp202 = (0.21821789023599239 * fTemp201); + fRec202[0] = max((fRec202[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp202)))))); + fVbargraph203 = FAUSTFLOAT(fRec202[0]); + output101[i] = FAUSTFLOAT(fTemp202); + double fTemp203 = double(input102[i]); + fRec205[0] = max((fRec205[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp203)))))); + fVbargraph204 = FAUSTFLOAT(fRec205[0]); + double fTemp204 = (0.21821789023599239 * fTemp203); + fRec204[0] = max((fRec204[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp204)))))); + fVbargraph205 = FAUSTFLOAT(fRec204[0]); + output102[i] = FAUSTFLOAT(fTemp204); + double fTemp205 = double(input103[i]); + fRec207[0] = max((fRec207[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp205)))))); + fVbargraph206 = FAUSTFLOAT(fRec207[0]); + double fTemp206 = (0.21821789023599239 * fTemp205); + fRec206[0] = max((fRec206[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp206)))))); + fVbargraph207 = FAUSTFLOAT(fRec206[0]); + output103[i] = FAUSTFLOAT(fTemp206); + double fTemp207 = double(input104[i]); + fRec209[0] = max((fRec209[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp207)))))); + fVbargraph208 = FAUSTFLOAT(fRec209[0]); + double fTemp208 = (0.21821789023599239 * fTemp207); + fRec208[0] = max((fRec208[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp208)))))); + fVbargraph209 = FAUSTFLOAT(fRec208[0]); + output104[i] = FAUSTFLOAT(fTemp208); + double fTemp209 = double(input105[i]); + fRec211[0] = max((fRec211[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp209)))))); + fVbargraph210 = FAUSTFLOAT(fRec211[0]); + double fTemp210 = (0.21821789023599239 * fTemp209); + fRec210[0] = max((fRec210[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp210)))))); + fVbargraph211 = FAUSTFLOAT(fRec210[0]); + output105[i] = FAUSTFLOAT(fTemp210); + double fTemp211 = double(input106[i]); + fRec213[0] = max((fRec213[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp211)))))); + fVbargraph212 = FAUSTFLOAT(fRec213[0]); + double fTemp212 = (0.21821789023599239 * fTemp211); + fRec212[0] = max((fRec212[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp212)))))); + fVbargraph213 = FAUSTFLOAT(fRec212[0]); + output106[i] = FAUSTFLOAT(fTemp212); + double fTemp213 = double(input107[i]); + fRec215[0] = max((fRec215[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp213)))))); + fVbargraph214 = FAUSTFLOAT(fRec215[0]); + double fTemp214 = (0.21821789023599239 * fTemp213); + fRec214[0] = max((fRec214[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp214)))))); + fVbargraph215 = FAUSTFLOAT(fRec214[0]); + output107[i] = FAUSTFLOAT(fTemp214); + double fTemp215 = double(input108[i]); + fRec217[0] = max((fRec217[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp215)))))); + fVbargraph216 = FAUSTFLOAT(fRec217[0]); + double fTemp216 = (0.21821789023599239 * fTemp215); + fRec216[0] = max((fRec216[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp216)))))); + fVbargraph217 = FAUSTFLOAT(fRec216[0]); + output108[i] = FAUSTFLOAT(fTemp216); + double fTemp217 = double(input109[i]); + fRec219[0] = max((fRec219[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp217)))))); + fVbargraph218 = FAUSTFLOAT(fRec219[0]); + double fTemp218 = (0.21821789023599239 * fTemp217); + fRec218[0] = max((fRec218[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp218)))))); + fVbargraph219 = FAUSTFLOAT(fRec218[0]); + output109[i] = FAUSTFLOAT(fTemp218); + double fTemp219 = double(input110[i]); + fRec221[0] = max((fRec221[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp219)))))); + fVbargraph220 = FAUSTFLOAT(fRec221[0]); + double fTemp220 = (0.21821789023599239 * fTemp219); + fRec220[0] = max((fRec220[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp220)))))); + fVbargraph221 = FAUSTFLOAT(fRec220[0]); + output110[i] = FAUSTFLOAT(fTemp220); + double fTemp221 = double(input111[i]); + fRec223[0] = max((fRec223[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp221)))))); + fVbargraph222 = FAUSTFLOAT(fRec223[0]); + double fTemp222 = (0.21821789023599239 * fTemp221); + fRec222[0] = max((fRec222[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp222)))))); + fVbargraph223 = FAUSTFLOAT(fRec222[0]); + output111[i] = FAUSTFLOAT(fTemp222); + double fTemp223 = double(input112[i]); + fRec225[0] = max((fRec225[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp223)))))); + fVbargraph224 = FAUSTFLOAT(fRec225[0]); + double fTemp224 = (0.21821789023599239 * fTemp223); + fRec224[0] = max((fRec224[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp224)))))); + fVbargraph225 = FAUSTFLOAT(fRec224[0]); + output112[i] = FAUSTFLOAT(fTemp224); + double fTemp225 = double(input113[i]); + fRec227[0] = max((fRec227[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp225)))))); + fVbargraph226 = FAUSTFLOAT(fRec227[0]); + double fTemp226 = (0.21821789023599239 * fTemp225); + fRec226[0] = max((fRec226[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp226)))))); + fVbargraph227 = FAUSTFLOAT(fRec226[0]); + output113[i] = FAUSTFLOAT(fTemp226); + double fTemp227 = double(input114[i]); + fRec229[0] = max((fRec229[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp227)))))); + fVbargraph228 = FAUSTFLOAT(fRec229[0]); + double fTemp228 = (0.21821789023599239 * fTemp227); + fRec228[0] = max((fRec228[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp228)))))); + fVbargraph229 = FAUSTFLOAT(fRec228[0]); + output114[i] = FAUSTFLOAT(fTemp228); + double fTemp229 = double(input115[i]); + fRec231[0] = max((fRec231[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp229)))))); + fVbargraph230 = FAUSTFLOAT(fRec231[0]); + double fTemp230 = (0.21821789023599239 * fTemp229); + fRec230[0] = max((fRec230[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp230)))))); + fVbargraph231 = FAUSTFLOAT(fRec230[0]); + output115[i] = FAUSTFLOAT(fTemp230); + double fTemp231 = double(input116[i]); + fRec233[0] = max((fRec233[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp231)))))); + fVbargraph232 = FAUSTFLOAT(fRec233[0]); + double fTemp232 = (0.21821789023599239 * fTemp231); + fRec232[0] = max((fRec232[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp232)))))); + fVbargraph233 = FAUSTFLOAT(fRec232[0]); + output116[i] = FAUSTFLOAT(fTemp232); + double fTemp233 = double(input117[i]); + fRec235[0] = max((fRec235[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp233)))))); + fVbargraph234 = FAUSTFLOAT(fRec235[0]); + double fTemp234 = (0.21821789023599239 * fTemp233); + fRec234[0] = max((fRec234[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp234)))))); + fVbargraph235 = FAUSTFLOAT(fRec234[0]); + output117[i] = FAUSTFLOAT(fTemp234); + double fTemp235 = double(input118[i]); + fRec237[0] = max((fRec237[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp235)))))); + fVbargraph236 = FAUSTFLOAT(fRec237[0]); + double fTemp236 = (0.21821789023599239 * fTemp235); + fRec236[0] = max((fRec236[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp236)))))); + fVbargraph237 = FAUSTFLOAT(fRec236[0]); + output118[i] = FAUSTFLOAT(fTemp236); + double fTemp237 = double(input119[i]); + fRec239[0] = max((fRec239[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp237)))))); + fVbargraph238 = FAUSTFLOAT(fRec239[0]); + double fTemp238 = (0.21821789023599239 * fTemp237); + fRec238[0] = max((fRec238[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp238)))))); + fVbargraph239 = FAUSTFLOAT(fRec238[0]); + output119[i] = FAUSTFLOAT(fTemp238); + double fTemp239 = double(input120[i]); + fRec241[0] = max((fRec241[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp239)))))); + fVbargraph240 = FAUSTFLOAT(fRec241[0]); + double fTemp240 = (0.21821789023599239 * fTemp239); + fRec240[0] = max((fRec240[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp240)))))); + fVbargraph241 = FAUSTFLOAT(fRec240[0]); + output120[i] = FAUSTFLOAT(fTemp240); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec25[1] = fRec25[0]; + fRec24[1] = fRec24[0]; + fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; + fRec33[1] = fRec33[0]; + fRec32[1] = fRec32[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fRec37[1] = fRec37[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; + fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec43[1] = fRec43[0]; + fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec49[1] = fRec49[0]; + fRec48[1] = fRec48[0]; + fRec51[1] = fRec51[0]; + fRec50[1] = fRec50[0]; + fRec53[1] = fRec53[0]; + fRec52[1] = fRec52[0]; + fRec55[1] = fRec55[0]; + fRec54[1] = fRec54[0]; + fRec57[1] = fRec57[0]; + fRec56[1] = fRec56[0]; + fRec59[1] = fRec59[0]; + fRec58[1] = fRec58[0]; + fRec61[1] = fRec61[0]; + fRec60[1] = fRec60[0]; + fRec63[1] = fRec63[0]; + fRec62[1] = fRec62[0]; + fRec65[1] = fRec65[0]; + fRec64[1] = fRec64[0]; + fRec67[1] = fRec67[0]; + fRec66[1] = fRec66[0]; + fRec69[1] = fRec69[0]; + fRec68[1] = fRec68[0]; + fRec71[1] = fRec71[0]; + fRec70[1] = fRec70[0]; + fRec73[1] = fRec73[0]; + fRec72[1] = fRec72[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; + fRec77[1] = fRec77[0]; + fRec76[1] = fRec76[0]; + fRec79[1] = fRec79[0]; + fRec78[1] = fRec78[0]; + fRec81[1] = fRec81[0]; + fRec80[1] = fRec80[0]; + fRec83[1] = fRec83[0]; + fRec82[1] = fRec82[0]; + fRec85[1] = fRec85[0]; + fRec84[1] = fRec84[0]; + fRec87[1] = fRec87[0]; + fRec86[1] = fRec86[0]; + fRec89[1] = fRec89[0]; + fRec88[1] = fRec88[0]; + fRec91[1] = fRec91[0]; + fRec90[1] = fRec90[0]; + fRec93[1] = fRec93[0]; + fRec92[1] = fRec92[0]; + fRec95[1] = fRec95[0]; + fRec94[1] = fRec94[0]; + fRec97[1] = fRec97[0]; + fRec96[1] = fRec96[0]; + fRec99[1] = fRec99[0]; + fRec98[1] = fRec98[0]; + fRec101[1] = fRec101[0]; + fRec100[1] = fRec100[0]; + fRec103[1] = fRec103[0]; + fRec102[1] = fRec102[0]; + fRec105[1] = fRec105[0]; + fRec104[1] = fRec104[0]; + fRec107[1] = fRec107[0]; + fRec106[1] = fRec106[0]; + fRec109[1] = fRec109[0]; + fRec108[1] = fRec108[0]; + fRec111[1] = fRec111[0]; + fRec110[1] = fRec110[0]; + fRec113[1] = fRec113[0]; + fRec112[1] = fRec112[0]; + fRec115[1] = fRec115[0]; + fRec114[1] = fRec114[0]; + fRec117[1] = fRec117[0]; + fRec116[1] = fRec116[0]; + fRec119[1] = fRec119[0]; + fRec118[1] = fRec118[0]; + fRec121[1] = fRec121[0]; + fRec120[1] = fRec120[0]; + fRec123[1] = fRec123[0]; + fRec122[1] = fRec122[0]; + fRec125[1] = fRec125[0]; + fRec124[1] = fRec124[0]; + fRec127[1] = fRec127[0]; + fRec126[1] = fRec126[0]; + fRec129[1] = fRec129[0]; + fRec128[1] = fRec128[0]; + fRec131[1] = fRec131[0]; + fRec130[1] = fRec130[0]; + fRec133[1] = fRec133[0]; + fRec132[1] = fRec132[0]; + fRec135[1] = fRec135[0]; + fRec134[1] = fRec134[0]; + fRec137[1] = fRec137[0]; + fRec136[1] = fRec136[0]; + fRec139[1] = fRec139[0]; + fRec138[1] = fRec138[0]; + fRec141[1] = fRec141[0]; + fRec140[1] = fRec140[0]; + fRec143[1] = fRec143[0]; + fRec142[1] = fRec142[0]; + fRec145[1] = fRec145[0]; + fRec144[1] = fRec144[0]; + fRec147[1] = fRec147[0]; + fRec146[1] = fRec146[0]; + fRec149[1] = fRec149[0]; + fRec148[1] = fRec148[0]; + fRec151[1] = fRec151[0]; + fRec150[1] = fRec150[0]; + fRec153[1] = fRec153[0]; + fRec152[1] = fRec152[0]; + fRec155[1] = fRec155[0]; + fRec154[1] = fRec154[0]; + fRec157[1] = fRec157[0]; + fRec156[1] = fRec156[0]; + fRec159[1] = fRec159[0]; + fRec158[1] = fRec158[0]; + fRec161[1] = fRec161[0]; + fRec160[1] = fRec160[0]; + fRec163[1] = fRec163[0]; + fRec162[1] = fRec162[0]; + fRec165[1] = fRec165[0]; + fRec164[1] = fRec164[0]; + fRec167[1] = fRec167[0]; + fRec166[1] = fRec166[0]; + fRec169[1] = fRec169[0]; + fRec168[1] = fRec168[0]; + fRec171[1] = fRec171[0]; + fRec170[1] = fRec170[0]; + fRec173[1] = fRec173[0]; + fRec172[1] = fRec172[0]; + fRec175[1] = fRec175[0]; + fRec174[1] = fRec174[0]; + fRec177[1] = fRec177[0]; + fRec176[1] = fRec176[0]; + fRec179[1] = fRec179[0]; + fRec178[1] = fRec178[0]; + fRec181[1] = fRec181[0]; + fRec180[1] = fRec180[0]; + fRec183[1] = fRec183[0]; + fRec182[1] = fRec182[0]; + fRec185[1] = fRec185[0]; + fRec184[1] = fRec184[0]; + fRec187[1] = fRec187[0]; + fRec186[1] = fRec186[0]; + fRec189[1] = fRec189[0]; + fRec188[1] = fRec188[0]; + fRec191[1] = fRec191[0]; + fRec190[1] = fRec190[0]; + fRec193[1] = fRec193[0]; + fRec192[1] = fRec192[0]; + fRec195[1] = fRec195[0]; + fRec194[1] = fRec194[0]; + fRec197[1] = fRec197[0]; + fRec196[1] = fRec196[0]; + fRec199[1] = fRec199[0]; + fRec198[1] = fRec198[0]; + fRec201[1] = fRec201[0]; + fRec200[1] = fRec200[0]; + fRec203[1] = fRec203[0]; + fRec202[1] = fRec202[0]; + fRec205[1] = fRec205[0]; + fRec204[1] = fRec204[0]; + fRec207[1] = fRec207[0]; + fRec206[1] = fRec206[0]; + fRec209[1] = fRec209[0]; + fRec208[1] = fRec208[0]; + fRec211[1] = fRec211[0]; + fRec210[1] = fRec210[0]; + fRec213[1] = fRec213[0]; + fRec212[1] = fRec212[0]; + fRec215[1] = fRec215[0]; + fRec214[1] = fRec214[0]; + fRec217[1] = fRec217[0]; + fRec216[1] = fRec216[0]; + fRec219[1] = fRec219[0]; + fRec218[1] = fRec218[0]; + fRec221[1] = fRec221[0]; + fRec220[1] = fRec220[0]; + fRec223[1] = fRec223[0]; + fRec222[1] = fRec222[0]; + fRec225[1] = fRec225[0]; + fRec224[1] = fRec224[0]; + fRec227[1] = fRec227[0]; + fRec226[1] = fRec226[0]; + fRec229[1] = fRec229[0]; + fRec228[1] = fRec228[0]; + fRec231[1] = fRec231[0]; + fRec230[1] = fRec230[0]; + fRec233[1] = fRec233[0]; + fRec232[1] = fRec232[0]; + fRec235[1] = fRec235[0]; + fRec234[1] = fRec234[0]; + fRec237[1] = fRec237[0]; + fRec236[1] = fRec236[0]; + fRec239[1] = fRec239[0]; + fRec238[1] = fRec238[0]; + fRec241[1] = fRec241[0]; + fRec240[1] = fRec240[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d2.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d2.cpp new file mode 100644 index 0000000000..35b5211c2f --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d2.cpp @@ -0,0 +1,1450 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnN3d2AcnSn3d2" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d2"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x313de60", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3147b50", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3151a60", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x315ba50", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3165dd0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x316fea0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x317a050", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31843c0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x318e8f0", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3141fe0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x314c0c0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3155fd0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31600a0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x316a420", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31744f0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x317e780", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3188bd0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31931e0", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = double(input8[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAEncLebedev261.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d3.cpp similarity index 81% rename from source/HOAUGens/HOAEncLebedev261.cpp rename to source/HOAUGens/HOAConverterAcnN3d2AcnSn3d3.cpp index fe5ef7a00a..2c4f132f7d 100644 --- a/source/HOAUGens/HOAEncLebedev261.cpp +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d3.cpp @@ -1,10 +1,11 @@ /* ------------------------------------------------------------ author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2014" +copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAEncLebedev261" +name: "HOAConverterAcnN3d2AcnSn3d3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,68 +633,70 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; double fRec1[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph0; - double fRec3[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph1; - double fRec4[2]; + double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec5[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; - double fRec6[2]; + double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec7[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec8[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph6; - double fRec9[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph7; - double fRec10[2]; + double fRec9[2]; FAUSTFLOAT fVbargraph8; - double fRec11[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph9; - double fRec12[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph10; - double fRec13[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph11; - double fRec14[2]; + double fRec13[2]; FAUSTFLOAT fVbargraph12; - double fRec15[2]; + double fRec12[2]; FAUSTFLOAT fVbargraph13; - double fRec16[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph14; - double fRec17[2]; + double fRec14[2]; FAUSTFLOAT fVbargraph15; - double fRec18[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph16; - double fRec19[2]; + double fRec16[2]; FAUSTFLOAT fVbargraph17; - double fRec20[2]; + double fRec19[2]; FAUSTFLOAT fVbargraph18; - double fRec21[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph19; - double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fVbargraph20; - double fRec23[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph21; - double fRec24[2]; + double fRec23[2]; FAUSTFLOAT fVbargraph22; - double fRec25[2]; + double fRec22[2]; FAUSTFLOAT fVbargraph23; - double fRec26[2]; + double fRec25[2]; FAUSTFLOAT fVbargraph24; - double fRec27[2]; + double fRec24[2]; FAUSTFLOAT fVbargraph25; - double fRec0[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph26; - double fRec28[2]; + double fRec26[2]; FAUSTFLOAT fVbargraph27; double fRec29[2]; FAUSTFLOAT fVbargraph28; - double fRec30[2]; + double fRec28[2]; FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; + FAUSTFLOAT fVbargraph31; public: @@ -686,40 +704,30 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAEncLebedev261"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d3"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); } virtual int getNumInputs() { - return 26; + return 16; } virtual int getNumOutputs() { - return 4; + return 16; } virtual int getInputRate(int channel) { @@ -789,71 +797,79 @@ class mydsp : public dsp { rate = 1; break; } - case 16: { + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { rate = 1; break; } - case 17: { + case 1: { rate = 1; break; } - case 18: { + case 2: { rate = 1; break; } - case 19: { + case 3: { rate = 1; break; } - case 20: { + case 4: { rate = 1; break; } - case 21: { + case 5: { rate = 1; break; } - case 22: { + case 6: { rate = 1; break; } - case 23: { + case 7: { rate = 1; break; } - case 24: { + case 8: { rate = 1; break; } - case 25: { + case 9: { rate = 1; break; } - default: { - rate = -1; + case 10: { + rate = 1; break; } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { + case 11: { rate = 1; break; } - case 1: { + case 12: { rate = 1; break; } - case 2: { + case 13: { rate = 1; break; } - case 3: { + case 14: { + rate = 1; + break; + } + case 15: { rate = 1; break; } @@ -873,12 +889,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); } @@ -888,7 +903,7 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; + fRec0[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { @@ -896,7 +911,7 @@ class mydsp : public dsp { } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; + fRec2[l3] = 0.0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { @@ -904,7 +919,7 @@ class mydsp : public dsp { } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec6[l5] = 0.0; + fRec4[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { @@ -912,7 +927,7 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { @@ -920,7 +935,7 @@ class mydsp : public dsp { } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec10[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -928,7 +943,7 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec12[l11] = 0.0; + fRec10[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -936,7 +951,7 @@ class mydsp : public dsp { } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec14[l13] = 0.0; + fRec12[l13] = 0.0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { @@ -944,7 +959,7 @@ class mydsp : public dsp { } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec16[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { @@ -952,7 +967,7 @@ class mydsp : public dsp { } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec18[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -960,7 +975,7 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec20[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { @@ -968,7 +983,7 @@ class mydsp : public dsp { } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec22[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { @@ -976,7 +991,7 @@ class mydsp : public dsp { } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec22[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { @@ -984,7 +999,7 @@ class mydsp : public dsp { } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + fRec24[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { @@ -992,19 +1007,23 @@ class mydsp : public dsp { } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec0[l27] = 0.0; + fRec26[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec28[l28] = 0.0; + fRec29[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec29[l29] = 0.0; + fRec28[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec30[l30] = 0.0; + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; } @@ -1023,146 +1042,162 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAEncLebedev261"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d3"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x337de80", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2df56e0", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3387b70", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2dfa230", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3391a80", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2df0b90", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x339ba70", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2dec040", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33a5df0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2de74f0", &fVbargraph1, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33afec0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2de28c0", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33ba070", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e32110", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33c43e0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e371b0", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33ce910", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e2d080", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33d91d0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e27ff0", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33e3460", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e22f60", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33ed7d0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e1ded0", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33f7d00", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e18e40", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34023f0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e13db0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x340cca0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e0ed20", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3417710", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e09c90", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3382000", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x338c0e0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3395ff0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e04c00", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x33a00c0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2dffb70", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e601c0", &fVbargraph24, -70.0, 6.0); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33aa440", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e65cd0", &fVbargraph25, -70.0, 6.0); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33b4510", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e5a6b0", &fVbargraph23, -70.0, 6.0); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33be7a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e54ba0", &fVbargraph22, -70.0, 6.0); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33c8bf0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e4f090", &fVbargraph21, -70.0, 6.0); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33d3200", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e49580", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e43a70", &fVbargraph19, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e3df60", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x33dd900", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33e7b90", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Outputs"); - ui_interface->openHorizontalBox("0"); - ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e6c090", &fVbargraph26, -70.0, 6.0); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33f1fe0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33fc5f0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openHorizontalBox("1"); - ui_interface->openVerticalBox("1"); + ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e752e0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3406dc0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e7bd60", &fVbargraph28, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); + ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e85a30", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3411750", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x341c2a0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fHslider0, "1", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->declare(&fHslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1185,149 +1220,165 @@ class mydsp : public dsp { FAUSTFLOAT* input13 = inputs[13]; FAUSTFLOAT* input14 = inputs[14]; FAUSTFLOAT* input15 = inputs[15]; - FAUSTFLOAT* input16 = inputs[16]; - FAUSTFLOAT* input17 = inputs[17]; - FAUSTFLOAT* input18 = inputs[18]; - FAUSTFLOAT* input19 = inputs[19]; - FAUSTFLOAT* input20 = inputs[20]; - FAUSTFLOAT* input21 = inputs[21]; - FAUSTFLOAT* input22 = inputs[22]; - FAUSTFLOAT* input23 = inputs[23]; - FAUSTFLOAT* input24 = inputs[24]; - FAUSTFLOAT* input25 = inputs[25]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - double fTemp0 = double(input5[i]); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); - fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input4[i]); + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); - fVbargraph2 = FAUSTFLOAT(fRec4[0]); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); double fTemp3 = double(input2[i]); fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); - fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = double(input0[i]); - fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph4 = FAUSTFLOAT(fRec6[0]); - double fTemp5 = double(input1[i]); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp6 = double(input17[i]); - fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph6 = FAUSTFLOAT(fRec8[0]); - double fTemp7 = double(input16[i]); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); - fVbargraph7 = FAUSTFLOAT(fRec9[0]); - double fTemp8 = double(input15[i]); - fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); - fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp9 = double(input14[i]); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph9 = FAUSTFLOAT(fRec11[0]); - double fTemp10 = double(input13[i]); - fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph10 = FAUSTFLOAT(fRec12[0]); - double fTemp11 = double(input12[i]); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph11 = FAUSTFLOAT(fRec13[0]); - double fTemp12 = double(input11[i]); - fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph12 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = double(input10[i]); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph13 = FAUSTFLOAT(fRec15[0]); - double fTemp14 = double(input9[i]); - fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph14 = FAUSTFLOAT(fRec16[0]); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); double fTemp15 = double(input8[i]); fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph15 = FAUSTFLOAT(fRec17[0]); - double fTemp16 = double(input6[i]); - fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph16 = FAUSTFLOAT(fRec18[0]); - double fTemp17 = double(input7[i]); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input9[i]); fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph17 = FAUSTFLOAT(fRec19[0]); - double fTemp18 = (fTemp14 + (fTemp15 + (fTemp16 + fTemp17))); - double fTemp19 = double(input25[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); - fVbargraph18 = FAUSTFLOAT(fRec20[0]); - double fTemp20 = double(input24[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); - fVbargraph19 = FAUSTFLOAT(fRec21[0]); - double fTemp21 = double(input23[i]); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph20 = FAUSTFLOAT(fRec22[0]); - double fTemp22 = double(input22[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph21 = FAUSTFLOAT(fRec23[0]); - double fTemp23 = double(input21[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph22 = FAUSTFLOAT(fRec24[0]); - double fTemp24 = double(input20[i]); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph23 = FAUSTFLOAT(fRec25[0]); - double fTemp25 = double(input18[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph24 = FAUSTFLOAT(fRec26[0]); - double fTemp26 = double(input19[i]); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph25 = FAUSTFLOAT(fRec27[0]); - double fTemp27 = (fTemp23 + (fTemp24 + (fTemp25 + fTemp26))); - double fTemp28 = (fRec1[0] * (((0.047619047619047623 * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + fTemp5)))))) + (0.038095238095238099 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + fTemp18)))))))))) + (0.03214285714285714 * (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + fTemp27))))))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); - fVbargraph26 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (fRec1[0] * ((((5.7138281391308437e-18 * (fTemp15 + fTemp7)) + (((1.0100716559284827e-17 * fTemp2) + (0.082478609884232251 * (fTemp3 - fTemp1))) + (0.046656947481584346 * (fTemp13 - fTemp11)))) + (0.032142857142857133 * (fTemp26 + fTemp21))) - (((0.046656947481584353 * (fTemp6 - (fTemp8 - (fTemp10 - (fTemp12 + (fTemp17 - fTemp14)))))) + (0.032142857142857126 * (fTemp20 - (fTemp22 + (fTemp25 - fTemp24))))) + (0.03214285714285714 * (fTemp23 + fTemp19))))); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph27 = FAUSTFLOAT(fRec28[0]); - output1[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fRec1[0] * ((0.082478609884232251 * (fTemp4 - fTemp0)) - ((0.046656947481584346 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 - fTemp18))))) + (0.03214285714285714 * (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 - fTemp27)))))))); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp18 = (0.3779644730092272 * fTemp17); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input10[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp20 = (0.3779644730092272 * fTemp19); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp22 = (0.3779644730092272 * fTemp21); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp24 = (0.3779644730092272 * fTemp23); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input13[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp26 = (0.3779644730092272 * fTemp25); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = double(input14[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph28 = FAUSTFLOAT(fRec29[0]); - output2[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (fRec1[0] * (((((2.8569140695654219e-18 * (fTemp17 + fTemp8)) + ((5.0503582796424135e-18 * (fTemp0 + (fTemp4 + fTemp3))) + ((0.082478609884232251 * (fTemp5 - fTemp2)) + (0.046656947481584339 * fTemp10)))) + (0.032142857142857133 * (fTemp25 + fTemp22))) + (0.032142857142857126 * (fTemp19 - (fTemp21 + (fTemp26 - fTemp23))))) - ((((0.046656947481584353 * (fTemp7 - (fTemp9 - (fTemp11 - (fTemp13 + (fTemp16 - fTemp15)))))) + ((1.5151074838927241e-17 * fTemp1) + (0.046656947481584346 * fTemp12))) + (8.570742208696266e-18 * (fTemp14 + fTemp6))) + (0.03214285714285714 * (fTemp24 + fTemp20))))); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); - fVbargraph29 = FAUSTFLOAT(fRec30[0]); - output3[i] = FAUSTFLOAT(fTemp31); + double fTemp28 = (0.3779644730092272 * fTemp27); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = double(input15[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp30); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; + fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; fRec5[1] = fRec5[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; - fRec8[1] = fRec8[0]; + fRec6[1] = fRec6[0]; fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; + fRec8[1] = fRec8[0]; fRec11[1] = fRec11[0]; - fRec12[1] = fRec12[0]; + fRec10[1] = fRec10[0]; fRec13[1] = fRec13[0]; - fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; fRec15[1] = fRec15[0]; - fRec16[1] = fRec16[0]; + fRec14[1] = fRec14[0]; fRec17[1] = fRec17[0]; - fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; + fRec18[1] = fRec18[0]; fRec21[1] = fRec21[0]; - fRec22[1] = fRec22[0]; + fRec20[1] = fRec20[0]; fRec23[1] = fRec23[0]; - fRec24[1] = fRec24[0]; + fRec22[1] = fRec22[0]; fRec25[1] = fRec25[0]; - fRec26[1] = fRec26[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; - fRec0[1] = fRec0[0]; - fRec28[1] = fRec28[0]; + fRec26[1] = fRec26[0]; fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec31[1] = fRec31[0]; fRec30[1] = fRec30[0]; } @@ -1337,7 +1388,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1569,7 +1619,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1632,7 +1682,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1661,11 +1711,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAConverter4.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d4.cpp similarity index 77% rename from source/HOAUGens/HOAConverter4.cpp rename to source/HOAUGens/HOAConverterAcnN3d2AcnSn3d4.cpp index c96fb8af06..f6d3d4b212 100644 --- a/source/HOAUGens/HOAConverter4.cpp +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d4.cpp @@ -2,9 +2,10 @@ author: "Pierre Lecomte" copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAConverter4" +name: "HOAConverterAcnN3d2AcnSn3d4" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double rint(double dummy0); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,71 +633,69 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; double fRec1[2]; FAUSTFLOAT fVbargraph0; double fRec0[2]; FAUSTFLOAT fVbargraph1; double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec4[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec2[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec6[2]; - FAUSTFLOAT fVbargraph6; double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; FAUSTFLOAT fVbargraph7; double fRec9[2]; FAUSTFLOAT fVbargraph8; - double fRec10[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph9; double fRec11[2]; FAUSTFLOAT fVbargraph10; - double fRec8[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph11; double fRec13[2]; FAUSTFLOAT fVbargraph12; - double fRec14[2]; - FAUSTFLOAT fVbargraph13; double fRec12[2]; - FAUSTFLOAT fVbargraph14; + FAUSTFLOAT fVbargraph13; double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; FAUSTFLOAT fVbargraph15; - double fRec16[2]; - FAUSTFLOAT fVbargraph16; double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; FAUSTFLOAT fVbargraph17; double fRec19[2]; FAUSTFLOAT fVbargraph18; - double fRec20[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph19; double fRec21[2]; FAUSTFLOAT fVbargraph20; - double fRec18[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph21; double fRec23[2]; FAUSTFLOAT fVbargraph22; - double fRec24[2]; - FAUSTFLOAT fVbargraph23; double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; FAUSTFLOAT fVbargraph24; - double fRec26[2]; + double fRec24[2]; FAUSTFLOAT fVbargraph25; - double fRec25[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph26; - double fRec28[2]; + double fRec26[2]; FAUSTFLOAT fVbargraph27; - double fRec27[2]; - FAUSTFLOAT fVbargraph28; double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; FAUSTFLOAT fVbargraph29; - double fRec30[2]; - FAUSTFLOAT fVbargraph30; double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; FAUSTFLOAT fVbargraph31; double fRec33[2]; FAUSTFLOAT fVbargraph32; @@ -727,20 +741,18 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAConverter4"); - m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d4"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); @@ -985,13 +997,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(1.0); - fHslider1 = FAUSTFLOAT(1.0); } @@ -1009,7 +1019,7 @@ class mydsp : public dsp { } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; + fRec2[l3] = 0.0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { @@ -1017,15 +1027,15 @@ class mydsp : public dsp { } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec4[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { @@ -1033,7 +1043,7 @@ class mydsp : public dsp { } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec10[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -1041,7 +1051,7 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec8[l11] = 0.0; + fRec10[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -1049,23 +1059,23 @@ class mydsp : public dsp { } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec14[l13] = 0.0; + fRec12[l13] = 0.0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec12[l14] = 0.0; + fRec15[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0; + fRec17[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec17[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -1073,7 +1083,7 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec20[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { @@ -1081,7 +1091,7 @@ class mydsp : public dsp { } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec18[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { @@ -1089,39 +1099,39 @@ class mydsp : public dsp { } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec22[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec22[l24] = 0.0; + fRec25[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + fRec24[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec25[l26] = 0.0; + fRec27[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec26[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec27[l28] = 0.0; + fRec29[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec29[l29] = 0.0; + fRec28[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec30[l30] = 0.0; + fRec31[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec31[l31] = 0.0; + fRec30[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { @@ -1212,242 +1222,236 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAConverter4"); - ui_interface->declare(&fHslider1, "0", ""); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fHslider0, "0", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d4"); ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("ACN N3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2afa950", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3228bb0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b079e0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32328a0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b13ca0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x323c7c0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b0d3d0", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32467b0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b2ae10", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3250b30", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b41b80", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x325ac00", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b306d0", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3264db0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b47440", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x326f120", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b36b20", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3279650", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b67060", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3283f10", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b7e150", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x328e1a0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b8fdb0", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3298510", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b6ca00", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32a2a40", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b83af0", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32ad130", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b9c610", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32b79e0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b72f30", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32c2450", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bbd4d0", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32cd250", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bc91d0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32d76a0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bd4a40", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32e1be0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2be0470", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32ec2d0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bec070", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32f6b80", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bf7e20", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x33015f0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c03d90", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x330c220", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c0fec0", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3317010", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c1c1b0", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3321fc0", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "2", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("ACN SN3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b01920", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x322cd30", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b18d60", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3236e20", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b1f2b0", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3240d30", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b250f0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x324ae00", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b3bf40", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3255180", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b4d480", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x325f250", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b53940", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32694e0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b5a480", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3273930", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b610a0", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x327df40", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b78430", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3288640", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b89fb0", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32928d0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b96380", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x329cd20", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ba2530", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32a7330", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ba9230", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32b1b00", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bb03b0", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32bc490", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bb7270", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32c6fe0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bc33d0", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32d1a60", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bceb60", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32dbec0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bda4b0", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32e64d0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2be5fd0", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32f0ca0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bf1ca0", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32fb630", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bfdb30", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3306180", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c09b80", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3310e90", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c15d90", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x331bd60", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c22160", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3326df0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1506,235 +1510,213 @@ class mydsp : public dsp { FAUSTFLOAT* output22 = outputs[22]; FAUSTFLOAT* output23 = outputs[23]; FAUSTFLOAT* output24 = outputs[24]; - int iSlow0 = int(((rint(double(fHslider0)) + (3.0 * rint(double(fHslider1)))) + -4.0)); - int iSlow1 = (iSlow0 >= 5); - int iSlow2 = (iSlow0 >= 3); - int iSlow3 = (iSlow0 >= 2); - int iSlow4 = (iSlow0 >= 7); - int iSlow5 = (iSlow0 >= 6); - int iSlow6 = (iSlow0 >= 8); - int iSlow7 = (iSlow0 >= 1); - int iSlow8 = (iSlow0 >= 4); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec1[0]); - double fTemp1 = (0.70710678118654746 * fTemp0); - double fTemp2 = (1.4142135623730951 * fTemp0); - double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph1 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = double(input1[i]); - fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph2 = FAUSTFLOAT(fRec3[0]); - double fTemp5 = (0.57735026918962584 * fTemp4); - double fTemp6 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec4[0]); - double fTemp7 = (0.57735026918962584 * fTemp6); - double fTemp8 = (1.7320508075688772 * fTemp4); - double fTemp9 = double(input2[i]); - fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph4 = FAUSTFLOAT(fRec5[0]); - double fTemp10 = (1.7320508075688772 * fTemp9); - double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph5 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.57735026918962584 * fTemp9); - double fTemp13 = (1.7320508075688772 * fTemp6); - double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); - fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph6 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); - fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph7 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = double(input4[i]); - fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph8 = FAUSTFLOAT(fRec9[0]); - double fTemp17 = double(input6[i]); - fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph9 = FAUSTFLOAT(fRec10[0]); - double fTemp18 = (0.44721359549995793 * fTemp17); - double fTemp19 = (2.2360679774997898 * fTemp16); - double fTemp20 = double(input8[i]); - fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph10 = FAUSTFLOAT(fRec11[0]); - double fTemp21 = (iSlow1?(iSlow4?(iSlow6?fTemp16:(0.86602540378443871 * fTemp20)):(iSlow5?(1.9364916731037085 * fTemp20):fTemp17)):(iSlow2?(iSlow8?fTemp16:fTemp19):(iSlow3?fTemp18:(iSlow7?(0.44721359549995793 * fTemp16):fTemp16)))); - fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph11 = FAUSTFLOAT(fRec8[0]); - output4[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = double(input5[i]); - fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph12 = FAUSTFLOAT(fRec13[0]); - double fTemp23 = double(input7[i]); - fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph13 = FAUSTFLOAT(fRec14[0]); - double fTemp24 = (iSlow1?(iSlow4?(iSlow6?fTemp22:(0.86602540378443871 * fTemp17)):(iSlow5?(1.9364916731037085 * fTemp17):(1.1547005383792515 * fTemp23))):(iSlow2?(iSlow8?fTemp22:(2.2360679774997898 * fTemp22)):(iSlow3?(0.5163977794943222 * fTemp23):(iSlow7?(0.44721359549995793 * fTemp22):fTemp22)))); - fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph14 = FAUSTFLOAT(fRec12[0]); - output5[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (iSlow1?(iSlow4?(iSlow6?fTemp17:fTemp16):(iSlow5?fTemp19:(1.1547005383792515 * fTemp22))):(iSlow2?(iSlow8?fTemp17:(2.2360679774997898 * fTemp17)):(iSlow3?(0.5163977794943222 * fTemp22):(iSlow7?fTemp18:fTemp17)))); - fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph15 = FAUSTFLOAT(fRec15[0]); - output6[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (iSlow1?(iSlow4?(iSlow6?fTemp23:(0.86602540378443871 * fTemp22)):(iSlow5?(1.9364916731037085 * fTemp22):(1.1547005383792515 * fTemp20))):(iSlow2?(iSlow8?fTemp23:(2.2360679774997898 * fTemp23)):(iSlow3?(0.5163977794943222 * fTemp20):(iSlow7?(0.44721359549995793 * fTemp23):fTemp23)))); - fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph16 = FAUSTFLOAT(fRec16[0]); - output7[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (iSlow1?(iSlow4?(iSlow6?fTemp20:(0.86602540378443871 * fTemp23)):(iSlow5?(1.9364916731037085 * fTemp23):(1.1547005383792515 * fTemp16))):(iSlow2?(iSlow8?fTemp20:(2.2360679774997898 * fTemp20)):(iSlow3?(0.5163977794943222 * fTemp16):(iSlow7?(0.44721359549995793 * fTemp20):fTemp20)))); - fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph17 = FAUSTFLOAT(fRec17[0]); - output8[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = double(input9[i]); - fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = double(input8[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph18 = FAUSTFLOAT(fRec19[0]); - double fTemp29 = double(input12[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph19 = FAUSTFLOAT(fRec20[0]); - double fTemp30 = (0.3779644730092272 * fTemp29); - double fTemp31 = (2.6457513110645907 * fTemp28); - double fTemp32 = double(input15[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + double fTemp18 = (0.3779644730092272 * fTemp17); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input10[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph20 = FAUSTFLOAT(fRec21[0]); - double fTemp33 = (iSlow1?(iSlow4?(iSlow6?fTemp28:(0.79056941504209477 * fTemp32)):(iSlow5?(2.0916500663351889 * fTemp32):fTemp29)):(iSlow2?(iSlow8?fTemp28:fTemp31):(iSlow3?fTemp30:(iSlow7?(0.3779644730092272 * fTemp28):fTemp28)))); - fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); - fVbargraph21 = FAUSTFLOAT(fRec18[0]); - output9[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = double(input10[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + double fTemp20 = (0.3779644730092272 * fTemp19); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph22 = FAUSTFLOAT(fRec23[0]); - double fTemp35 = double(input13[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); - fVbargraph23 = FAUSTFLOAT(fRec24[0]); - double fTemp36 = (iSlow1?(iSlow4?(iSlow6?fTemp34:(0.7453559924999299 * fTemp35)):(iSlow5?(1.9720265943665387 * fTemp35):(1.1858541225631423 * fTemp35))):(iSlow2?(iSlow8?fTemp34:(2.6457513110645907 * fTemp34)):(iSlow3?(0.44821072850039761 * fTemp35):(iSlow7?(0.3779644730092272 * fTemp34):fTemp34)))); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); - fVbargraph24 = FAUSTFLOAT(fRec22[0]); - output10[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = double(input11[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); - fVbargraph25 = FAUSTFLOAT(fRec26[0]); - double fTemp38 = (iSlow1?(iSlow4?(iSlow6?fTemp37:(0.84327404271156781 * fTemp37)):(iSlow5?(2.2310934040908683 * fTemp37):(1.1858541225631423 * fTemp37))):(iSlow2?(iSlow8?fTemp37:(2.6457513110645907 * fTemp37)):(iSlow3?(0.44821072850039761 * fTemp37):(iSlow7?(0.3779644730092272 * fTemp37):fTemp37)))); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); - fVbargraph26 = FAUSTFLOAT(fRec25[0]); - output11[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = double(input14[i]); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph27 = FAUSTFLOAT(fRec28[0]); - double fTemp40 = (iSlow1?(iSlow4?(iSlow6?fTemp29:fTemp28):(iSlow5?fTemp31:(1.3416407864998738 * fTemp39))):(iSlow2?(iSlow8?fTemp29:(2.6457513110645907 * fTemp29)):(iSlow3?(0.50709255283710997 * fTemp39):(iSlow7?fTemp30:fTemp29)))); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); - fVbargraph28 = FAUSTFLOAT(fRec27[0]); - output12[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (iSlow1?(iSlow4?(iSlow6?fTemp35:(0.84327404271156781 * fTemp34)):(iSlow5?(2.2310934040908683 * fTemp34):(1.3416407864998738 * fTemp34))):(iSlow2?(iSlow8?fTemp35:(2.6457513110645907 * fTemp35)):(iSlow3?(0.50709255283710997 * fTemp34):(iSlow7?(0.3779644730092272 * fTemp35):fTemp35)))); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph29 = FAUSTFLOAT(fRec29[0]); - output13[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (iSlow1?(iSlow4?(iSlow6?fTemp39:(0.7453559924999299 * fTemp29)):(iSlow5?(1.9720265943665387 * fTemp29):(1.2649110640673518 * fTemp32))):(iSlow2?(iSlow8?fTemp39:(2.6457513110645907 * fTemp39)):(iSlow3?(0.47809144373375745 * fTemp32):(iSlow7?(0.3779644730092272 * fTemp39):fTemp39)))); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); - fVbargraph30 = FAUSTFLOAT(fRec30[0]); - output14[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (iSlow1?(iSlow4?(iSlow6?fTemp32:(0.79056941504209477 * fTemp39)):(iSlow5?(2.0916500663351889 * fTemp39):(1.2649110640673518 * fTemp28))):(iSlow2?(iSlow8?fTemp32:(2.6457513110645907 * fTemp32)):(iSlow3?(0.47809144373375745 * fTemp28):(iSlow7?(0.3779644730092272 * fTemp32):fTemp32)))); - fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph31 = FAUSTFLOAT(fRec31[0]); - output15[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = double(input16[i]); - fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + double fTemp22 = (0.3779644730092272 * fTemp21); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp24 = (0.3779644730092272 * fTemp23); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input13[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp26 = (0.3779644730092272 * fTemp25); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = double(input14[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp28 = (0.3779644730092272 * fTemp27); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = double(input15[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph32 = FAUSTFLOAT(fRec33[0]); - double fTemp45 = (iSlow1?(iSlow4?(iSlow6?fTemp44:0.0):0.0):(iSlow2?(iSlow8?fTemp44:(3.0 * fTemp44)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp44):fTemp44)))); - fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + double fTemp32 = (0.33333333333333331 * fTemp31); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph33 = FAUSTFLOAT(fRec32[0]); - output16[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = double(input17[i]); - fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph34 = FAUSTFLOAT(fRec35[0]); - double fTemp47 = (iSlow1?(iSlow4?(iSlow6?fTemp46:0.0):0.0):(iSlow2?(iSlow8?fTemp46:(3.0 * fTemp46)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp46):fTemp46)))); - fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + double fTemp34 = (0.33333333333333331 * fTemp33); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph35 = FAUSTFLOAT(fRec34[0]); - output17[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = double(input18[i]); - fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + output17[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); fVbargraph36 = FAUSTFLOAT(fRec37[0]); - double fTemp49 = (iSlow1?(iSlow4?(iSlow6?fTemp48:0.0):0.0):(iSlow2?(iSlow8?fTemp48:(3.0 * fTemp48)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp48):fTemp48)))); - fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + double fTemp36 = (0.33333333333333331 * fTemp35); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph37 = FAUSTFLOAT(fRec36[0]); - output18[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = double(input19[i]); - fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph38 = FAUSTFLOAT(fRec39[0]); - double fTemp51 = (iSlow1?(iSlow4?(iSlow6?fTemp50:0.0):0.0):(iSlow2?(iSlow8?fTemp50:(3.0 * fTemp50)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp50):fTemp50)))); - fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + double fTemp38 = (0.33333333333333331 * fTemp37); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); fVbargraph39 = FAUSTFLOAT(fRec38[0]); - output19[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = double(input20[i]); - fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + output19[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph40 = FAUSTFLOAT(fRec41[0]); - double fTemp53 = (iSlow1?(iSlow4?(iSlow6?fTemp52:0.0):0.0):(iSlow2?(iSlow8?fTemp52:(3.0 * fTemp52)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp52):fTemp52)))); - fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + double fTemp40 = (0.33333333333333331 * fTemp39); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph41 = FAUSTFLOAT(fRec40[0]); - output20[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = double(input21[i]); - fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + output20[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph42 = FAUSTFLOAT(fRec43[0]); - double fTemp55 = (iSlow1?(iSlow4?(iSlow6?fTemp54:0.0):0.0):(iSlow2?(iSlow8?fTemp54:(3.0 * fTemp54)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp54):fTemp54)))); - fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + double fTemp42 = (0.33333333333333331 * fTemp41); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph43 = FAUSTFLOAT(fRec42[0]); - output21[i] = FAUSTFLOAT(fTemp55); - double fTemp56 = double(input22[i]); - fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + output21[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph44 = FAUSTFLOAT(fRec45[0]); - double fTemp57 = (iSlow1?(iSlow4?(iSlow6?fTemp56:0.0):0.0):(iSlow2?(iSlow8?fTemp56:(3.0 * fTemp56)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp56):fTemp56)))); - fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + double fTemp44 = (0.33333333333333331 * fTemp43); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph45 = FAUSTFLOAT(fRec44[0]); - output22[i] = FAUSTFLOAT(fTemp57); - double fTemp58 = double(input23[i]); - fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + output22[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph46 = FAUSTFLOAT(fRec47[0]); - double fTemp59 = (iSlow1?(iSlow4?(iSlow6?fTemp58:0.0):0.0):(iSlow2?(iSlow8?fTemp58:(3.0 * fTemp58)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp58):fTemp58)))); - fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + double fTemp46 = (0.33333333333333331 * fTemp45); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph47 = FAUSTFLOAT(fRec46[0]); - output23[i] = FAUSTFLOAT(fTemp59); - double fTemp60 = double(input24[i]); - fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + output23[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph48 = FAUSTFLOAT(fRec49[0]); - double fTemp61 = (iSlow1?(iSlow4?(iSlow6?fTemp60:0.0):0.0):(iSlow2?(iSlow8?fTemp60:(3.0 * fTemp60)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp60):fTemp60)))); - fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + double fTemp48 = (0.33333333333333331 * fTemp47); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph49 = FAUSTFLOAT(fRec48[0]); - output24[i] = FAUSTFLOAT(fTemp61); + output24[i] = FAUSTFLOAT(fTemp48); fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; - fRec11[1] = fRec11[0]; fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; fRec13[1] = fRec13[0]; - fRec14[1] = fRec14[0]; fRec12[1] = fRec12[0]; fRec15[1] = fRec15[0]; - fRec16[1] = fRec16[0]; + fRec14[1] = fRec14[0]; fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; - fRec21[1] = fRec21[0]; fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; fRec23[1] = fRec23[0]; - fRec24[1] = fRec24[0]; fRec22[1] = fRec22[0]; - fRec26[1] = fRec26[0]; fRec25[1] = fRec25[0]; - fRec28[1] = fRec28[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; fRec29[1] = fRec29[0]; - fRec30[1] = fRec30[0]; + fRec28[1] = fRec28[0]; fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; fRec33[1] = fRec33[0]; fRec32[1] = fRec32[0]; fRec35[1] = fRec35[0]; @@ -1761,7 +1743,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1993,7 +1974,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2056,7 +2037,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2085,11 +2066,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAConverter5.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d5.cpp similarity index 76% rename from source/HOAUGens/HOAConverter5.cpp rename to source/HOAUGens/HOAConverterAcnN3d2AcnSn3d5.cpp index 8e82423a66..b1aa1f3f26 100644 --- a/source/HOAUGens/HOAConverter5.cpp +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d5.cpp @@ -2,9 +2,10 @@ author: "Pierre Lecomte" copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAConverter5" +name: "HOAConverterAcnN3d2AcnSn3d5" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double rint(double dummy0); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,71 +633,69 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; double fRec1[2]; FAUSTFLOAT fVbargraph0; double fRec0[2]; FAUSTFLOAT fVbargraph1; double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec4[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec2[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec6[2]; - FAUSTFLOAT fVbargraph6; double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; FAUSTFLOAT fVbargraph7; double fRec9[2]; FAUSTFLOAT fVbargraph8; - double fRec10[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph9; double fRec11[2]; FAUSTFLOAT fVbargraph10; - double fRec8[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph11; double fRec13[2]; FAUSTFLOAT fVbargraph12; - double fRec14[2]; - FAUSTFLOAT fVbargraph13; double fRec12[2]; - FAUSTFLOAT fVbargraph14; + FAUSTFLOAT fVbargraph13; double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; FAUSTFLOAT fVbargraph15; - double fRec16[2]; - FAUSTFLOAT fVbargraph16; double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; FAUSTFLOAT fVbargraph17; double fRec19[2]; FAUSTFLOAT fVbargraph18; - double fRec20[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph19; double fRec21[2]; FAUSTFLOAT fVbargraph20; - double fRec18[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph21; double fRec23[2]; FAUSTFLOAT fVbargraph22; - double fRec24[2]; - FAUSTFLOAT fVbargraph23; double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; FAUSTFLOAT fVbargraph24; - double fRec26[2]; + double fRec24[2]; FAUSTFLOAT fVbargraph25; - double fRec25[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph26; - double fRec28[2]; + double fRec26[2]; FAUSTFLOAT fVbargraph27; - double fRec27[2]; - FAUSTFLOAT fVbargraph28; double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; FAUSTFLOAT fVbargraph29; - double fRec30[2]; - FAUSTFLOAT fVbargraph30; double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; FAUSTFLOAT fVbargraph31; double fRec33[2]; FAUSTFLOAT fVbargraph32; @@ -771,20 +785,18 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAConverter5"); - m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d5"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); @@ -1117,13 +1129,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(1.0); - fHslider1 = FAUSTFLOAT(1.0); } @@ -1141,7 +1151,7 @@ class mydsp : public dsp { } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; + fRec2[l3] = 0.0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { @@ -1149,15 +1159,15 @@ class mydsp : public dsp { } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec4[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { @@ -1165,7 +1175,7 @@ class mydsp : public dsp { } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec10[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -1173,7 +1183,7 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec8[l11] = 0.0; + fRec10[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -1181,23 +1191,23 @@ class mydsp : public dsp { } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec14[l13] = 0.0; + fRec12[l13] = 0.0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec12[l14] = 0.0; + fRec15[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0; + fRec17[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec17[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -1205,7 +1215,7 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec20[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { @@ -1213,7 +1223,7 @@ class mydsp : public dsp { } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec18[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { @@ -1221,39 +1231,39 @@ class mydsp : public dsp { } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec22[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec22[l24] = 0.0; + fRec25[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + fRec24[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec25[l26] = 0.0; + fRec27[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec26[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec27[l28] = 0.0; + fRec29[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec29[l29] = 0.0; + fRec28[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec30[l30] = 0.0; + fRec31[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec31[l31] = 0.0; + fRec30[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { @@ -1432,334 +1442,328 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAConverter5"); - ui_interface->declare(&fHslider1, "0", ""); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fHslider0, "0", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d5"); ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("ACN N3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d36450", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1d63c80", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d434e0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1d6d970", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d4f7a0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1d77880", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d48ed0", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d81870", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d66900", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1d8bbf0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d7d670", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d95cc0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d6c1c0", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d9fe70", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d82f30", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1daa1e0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d72610", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1db4710", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1da2b50", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1dbefd0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1db9c40", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dc9260", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1dcb8a0", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dd35d0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1da84f0", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dddb00", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1dbf5e0", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1de81f0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1dd8100", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1df2aa0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1daea20", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dfd510", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1df8fc0", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e08310", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e04cc0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e12760", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e10530", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e1cc90", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e1bf60", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e27380", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e27b50", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e31c30", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e33900", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e3c6a0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e3f870", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e472d0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e4b9a0", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e520c0", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e57c90", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e5d070", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); ui_interface->declare(&fVbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e64140", &fVbargraph50, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e683b0", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fVbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e6fe30", &fVbargraph52, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e729c0", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fVbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e7b860", &fVbargraph54, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e7d0b0", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fVbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e87450", &fVbargraph56, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e87960", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fVbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e93200", &fVbargraph58, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e923d0", &fVbargraph58, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fVbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e9f170", &fVbargraph60, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e9d000", &fVbargraph60, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fVbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1eab2a0", &fVbargraph62, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ea7df0", &fVbargraph62, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fVbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1eb7590", &fVbargraph64, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1eb2db0", &fVbargraph64, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fVbargraph66, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ec3a40", &fVbargraph66, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ebdf20", &fVbargraph66, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fVbargraph68, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ed00b0", &fVbargraph68, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ec9250", &fVbargraph68, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fVbargraph70, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1edc8e0", &fVbargraph70, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ed4750", &fVbargraph70, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "2", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("ACN SN3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d3d420", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1d67e00", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d54860", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d71ee0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d5ada0", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d7bdf0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d60be0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1d85ec0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d77a30", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d90240", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d88f70", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1d9a310", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d8f430", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1da45a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d95f70", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dae9f0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1d9cb90", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1db9000", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1db3f20", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dc3700", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1dc5aa0", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dcd990", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1dd1e70", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1dd7de0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1dde020", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1de23f0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1de4d20", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1decbc0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1debea0", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1df7550", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1df2d60", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e020a0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1dfeec0", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e0cb20", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e0a650", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e16f70", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e15fa0", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e21580", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e21ab0", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e2bd50", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e2d780", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e366e0", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e39610", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e41230", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e45660", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e4bf40", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e51870", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e56e10", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e5dc40", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e61ea0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); ui_interface->declare(&fVbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e69f50", &fVbargraph51, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e6cca0", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fVbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e758a0", &fVbargraph53, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e772b0", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fVbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e813b0", &fVbargraph55, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e81a80", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fVbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e8d080", &fVbargraph57, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e8c410", &fVbargraph57, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fVbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e98f10", &fVbargraph59, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1e96f60", &fVbargraph59, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fVbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ea4f60", &fVbargraph61, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ea1c70", &fVbargraph61, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fVbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1eb1170", &fVbargraph63, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1eacb40", &fVbargraph63, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fVbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ebd540", &fVbargraph65, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1eb7be0", &fVbargraph65, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fVbargraph67, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ec9ad0", &fVbargraph67, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ec2e30", &fVbargraph67, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fVbargraph69, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ed6220", &fVbargraph69, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ece240", &fVbargraph69, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fVbargraph71, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ee2b30", &fVbargraph71, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ed9820", &fVbargraph71, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1840,312 +1844,290 @@ class mydsp : public dsp { FAUSTFLOAT* output33 = outputs[33]; FAUSTFLOAT* output34 = outputs[34]; FAUSTFLOAT* output35 = outputs[35]; - int iSlow0 = int(((rint(double(fHslider0)) + (3.0 * rint(double(fHslider1)))) + -4.0)); - int iSlow1 = (iSlow0 >= 5); - int iSlow2 = (iSlow0 >= 3); - int iSlow3 = (iSlow0 >= 2); - int iSlow4 = (iSlow0 >= 7); - int iSlow5 = (iSlow0 >= 6); - int iSlow6 = (iSlow0 >= 8); - int iSlow7 = (iSlow0 >= 1); - int iSlow8 = (iSlow0 >= 4); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec1[0]); - double fTemp1 = (0.70710678118654746 * fTemp0); - double fTemp2 = (1.4142135623730951 * fTemp0); - double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph1 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = double(input1[i]); - fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph2 = FAUSTFLOAT(fRec3[0]); - double fTemp5 = (0.57735026918962584 * fTemp4); - double fTemp6 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec4[0]); - double fTemp7 = (0.57735026918962584 * fTemp6); - double fTemp8 = (1.7320508075688772 * fTemp4); - double fTemp9 = double(input2[i]); - fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph4 = FAUSTFLOAT(fRec5[0]); - double fTemp10 = (1.7320508075688772 * fTemp9); - double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph5 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.57735026918962584 * fTemp9); - double fTemp13 = (1.7320508075688772 * fTemp6); - double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); - fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph6 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); - fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph7 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = double(input4[i]); - fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph8 = FAUSTFLOAT(fRec9[0]); - double fTemp17 = double(input6[i]); - fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph9 = FAUSTFLOAT(fRec10[0]); - double fTemp18 = (0.44721359549995793 * fTemp17); - double fTemp19 = (2.2360679774997898 * fTemp16); - double fTemp20 = double(input8[i]); - fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph10 = FAUSTFLOAT(fRec11[0]); - double fTemp21 = (iSlow1?(iSlow4?(iSlow6?fTemp16:(0.86602540378443871 * fTemp20)):(iSlow5?(1.9364916731037085 * fTemp20):fTemp17)):(iSlow2?(iSlow8?fTemp16:fTemp19):(iSlow3?fTemp18:(iSlow7?(0.44721359549995793 * fTemp16):fTemp16)))); - fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph11 = FAUSTFLOAT(fRec8[0]); - output4[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = double(input5[i]); - fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph12 = FAUSTFLOAT(fRec13[0]); - double fTemp23 = double(input7[i]); - fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph13 = FAUSTFLOAT(fRec14[0]); - double fTemp24 = (iSlow1?(iSlow4?(iSlow6?fTemp22:(0.86602540378443871 * fTemp17)):(iSlow5?(1.9364916731037085 * fTemp17):(1.1547005383792515 * fTemp23))):(iSlow2?(iSlow8?fTemp22:(2.2360679774997898 * fTemp22)):(iSlow3?(0.5163977794943222 * fTemp23):(iSlow7?(0.44721359549995793 * fTemp22):fTemp22)))); - fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph14 = FAUSTFLOAT(fRec12[0]); - output5[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (iSlow1?(iSlow4?(iSlow6?fTemp17:fTemp16):(iSlow5?fTemp19:(1.1547005383792515 * fTemp22))):(iSlow2?(iSlow8?fTemp17:(2.2360679774997898 * fTemp17)):(iSlow3?(0.5163977794943222 * fTemp22):(iSlow7?fTemp18:fTemp17)))); - fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph15 = FAUSTFLOAT(fRec15[0]); - output6[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (iSlow1?(iSlow4?(iSlow6?fTemp23:(0.86602540378443871 * fTemp22)):(iSlow5?(1.9364916731037085 * fTemp22):(1.1547005383792515 * fTemp20))):(iSlow2?(iSlow8?fTemp23:(2.2360679774997898 * fTemp23)):(iSlow3?(0.5163977794943222 * fTemp20):(iSlow7?(0.44721359549995793 * fTemp23):fTemp23)))); - fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph16 = FAUSTFLOAT(fRec16[0]); - output7[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (iSlow1?(iSlow4?(iSlow6?fTemp20:(0.86602540378443871 * fTemp23)):(iSlow5?(1.9364916731037085 * fTemp23):(1.1547005383792515 * fTemp16))):(iSlow2?(iSlow8?fTemp20:(2.2360679774997898 * fTemp20)):(iSlow3?(0.5163977794943222 * fTemp16):(iSlow7?(0.44721359549995793 * fTemp20):fTemp20)))); - fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph17 = FAUSTFLOAT(fRec17[0]); - output8[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = double(input9[i]); - fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = double(input8[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph18 = FAUSTFLOAT(fRec19[0]); - double fTemp29 = double(input12[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph19 = FAUSTFLOAT(fRec20[0]); - double fTemp30 = (0.3779644730092272 * fTemp29); - double fTemp31 = (2.6457513110645907 * fTemp28); - double fTemp32 = double(input15[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + double fTemp18 = (0.3779644730092272 * fTemp17); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input10[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph20 = FAUSTFLOAT(fRec21[0]); - double fTemp33 = (iSlow1?(iSlow4?(iSlow6?fTemp28:(0.79056941504209477 * fTemp32)):(iSlow5?(2.0916500663351889 * fTemp32):fTemp29)):(iSlow2?(iSlow8?fTemp28:fTemp31):(iSlow3?fTemp30:(iSlow7?(0.3779644730092272 * fTemp28):fTemp28)))); - fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); - fVbargraph21 = FAUSTFLOAT(fRec18[0]); - output9[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = double(input10[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + double fTemp20 = (0.3779644730092272 * fTemp19); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph22 = FAUSTFLOAT(fRec23[0]); - double fTemp35 = double(input13[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); - fVbargraph23 = FAUSTFLOAT(fRec24[0]); - double fTemp36 = (iSlow1?(iSlow4?(iSlow6?fTemp34:(0.7453559924999299 * fTemp35)):(iSlow5?(1.9720265943665387 * fTemp35):(1.1858541225631423 * fTemp35))):(iSlow2?(iSlow8?fTemp34:(2.6457513110645907 * fTemp34)):(iSlow3?(0.44821072850039761 * fTemp35):(iSlow7?(0.3779644730092272 * fTemp34):fTemp34)))); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); - fVbargraph24 = FAUSTFLOAT(fRec22[0]); - output10[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = double(input11[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); - fVbargraph25 = FAUSTFLOAT(fRec26[0]); - double fTemp38 = (iSlow1?(iSlow4?(iSlow6?fTemp37:(0.84327404271156781 * fTemp37)):(iSlow5?(2.2310934040908683 * fTemp37):(1.1858541225631423 * fTemp37))):(iSlow2?(iSlow8?fTemp37:(2.6457513110645907 * fTemp37)):(iSlow3?(0.44821072850039761 * fTemp37):(iSlow7?(0.3779644730092272 * fTemp37):fTemp37)))); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); - fVbargraph26 = FAUSTFLOAT(fRec25[0]); - output11[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = double(input14[i]); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph27 = FAUSTFLOAT(fRec28[0]); - double fTemp40 = (iSlow1?(iSlow4?(iSlow6?fTemp29:fTemp28):(iSlow5?fTemp31:(1.3416407864998738 * fTemp39))):(iSlow2?(iSlow8?fTemp29:(2.6457513110645907 * fTemp29)):(iSlow3?(0.50709255283710997 * fTemp39):(iSlow7?fTemp30:fTemp29)))); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); - fVbargraph28 = FAUSTFLOAT(fRec27[0]); - output12[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (iSlow1?(iSlow4?(iSlow6?fTemp35:(0.84327404271156781 * fTemp34)):(iSlow5?(2.2310934040908683 * fTemp34):(1.3416407864998738 * fTemp34))):(iSlow2?(iSlow8?fTemp35:(2.6457513110645907 * fTemp35)):(iSlow3?(0.50709255283710997 * fTemp34):(iSlow7?(0.3779644730092272 * fTemp35):fTemp35)))); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph29 = FAUSTFLOAT(fRec29[0]); - output13[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (iSlow1?(iSlow4?(iSlow6?fTemp39:(0.7453559924999299 * fTemp29)):(iSlow5?(1.9720265943665387 * fTemp29):(1.2649110640673518 * fTemp32))):(iSlow2?(iSlow8?fTemp39:(2.6457513110645907 * fTemp39)):(iSlow3?(0.47809144373375745 * fTemp32):(iSlow7?(0.3779644730092272 * fTemp39):fTemp39)))); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); - fVbargraph30 = FAUSTFLOAT(fRec30[0]); - output14[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (iSlow1?(iSlow4?(iSlow6?fTemp32:(0.79056941504209477 * fTemp39)):(iSlow5?(2.0916500663351889 * fTemp39):(1.2649110640673518 * fTemp28))):(iSlow2?(iSlow8?fTemp32:(2.6457513110645907 * fTemp32)):(iSlow3?(0.47809144373375745 * fTemp28):(iSlow7?(0.3779644730092272 * fTemp32):fTemp32)))); - fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph31 = FAUSTFLOAT(fRec31[0]); - output15[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = double(input16[i]); - fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + double fTemp22 = (0.3779644730092272 * fTemp21); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp24 = (0.3779644730092272 * fTemp23); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input13[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp26 = (0.3779644730092272 * fTemp25); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = double(input14[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp28 = (0.3779644730092272 * fTemp27); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = double(input15[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph32 = FAUSTFLOAT(fRec33[0]); - double fTemp45 = (iSlow1?(iSlow4?(iSlow6?fTemp44:0.0):0.0):(iSlow2?(iSlow8?fTemp44:(3.0 * fTemp44)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp44):fTemp44)))); - fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + double fTemp32 = (0.33333333333333331 * fTemp31); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph33 = FAUSTFLOAT(fRec32[0]); - output16[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = double(input17[i]); - fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph34 = FAUSTFLOAT(fRec35[0]); - double fTemp47 = (iSlow1?(iSlow4?(iSlow6?fTemp46:0.0):0.0):(iSlow2?(iSlow8?fTemp46:(3.0 * fTemp46)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp46):fTemp46)))); - fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + double fTemp34 = (0.33333333333333331 * fTemp33); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph35 = FAUSTFLOAT(fRec34[0]); - output17[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = double(input18[i]); - fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + output17[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); fVbargraph36 = FAUSTFLOAT(fRec37[0]); - double fTemp49 = (iSlow1?(iSlow4?(iSlow6?fTemp48:0.0):0.0):(iSlow2?(iSlow8?fTemp48:(3.0 * fTemp48)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp48):fTemp48)))); - fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + double fTemp36 = (0.33333333333333331 * fTemp35); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph37 = FAUSTFLOAT(fRec36[0]); - output18[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = double(input19[i]); - fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph38 = FAUSTFLOAT(fRec39[0]); - double fTemp51 = (iSlow1?(iSlow4?(iSlow6?fTemp50:0.0):0.0):(iSlow2?(iSlow8?fTemp50:(3.0 * fTemp50)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp50):fTemp50)))); - fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + double fTemp38 = (0.33333333333333331 * fTemp37); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); fVbargraph39 = FAUSTFLOAT(fRec38[0]); - output19[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = double(input20[i]); - fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + output19[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph40 = FAUSTFLOAT(fRec41[0]); - double fTemp53 = (iSlow1?(iSlow4?(iSlow6?fTemp52:0.0):0.0):(iSlow2?(iSlow8?fTemp52:(3.0 * fTemp52)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp52):fTemp52)))); - fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + double fTemp40 = (0.33333333333333331 * fTemp39); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph41 = FAUSTFLOAT(fRec40[0]); - output20[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = double(input21[i]); - fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + output20[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph42 = FAUSTFLOAT(fRec43[0]); - double fTemp55 = (iSlow1?(iSlow4?(iSlow6?fTemp54:0.0):0.0):(iSlow2?(iSlow8?fTemp54:(3.0 * fTemp54)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp54):fTemp54)))); - fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + double fTemp42 = (0.33333333333333331 * fTemp41); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph43 = FAUSTFLOAT(fRec42[0]); - output21[i] = FAUSTFLOAT(fTemp55); - double fTemp56 = double(input22[i]); - fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + output21[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph44 = FAUSTFLOAT(fRec45[0]); - double fTemp57 = (iSlow1?(iSlow4?(iSlow6?fTemp56:0.0):0.0):(iSlow2?(iSlow8?fTemp56:(3.0 * fTemp56)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp56):fTemp56)))); - fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + double fTemp44 = (0.33333333333333331 * fTemp43); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph45 = FAUSTFLOAT(fRec44[0]); - output22[i] = FAUSTFLOAT(fTemp57); - double fTemp58 = double(input23[i]); - fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + output22[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph46 = FAUSTFLOAT(fRec47[0]); - double fTemp59 = (iSlow1?(iSlow4?(iSlow6?fTemp58:0.0):0.0):(iSlow2?(iSlow8?fTemp58:(3.0 * fTemp58)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp58):fTemp58)))); - fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + double fTemp46 = (0.33333333333333331 * fTemp45); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph47 = FAUSTFLOAT(fRec46[0]); - output23[i] = FAUSTFLOAT(fTemp59); - double fTemp60 = double(input24[i]); - fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + output23[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph48 = FAUSTFLOAT(fRec49[0]); - double fTemp61 = (iSlow1?(iSlow4?(iSlow6?fTemp60:0.0):0.0):(iSlow2?(iSlow8?fTemp60:(3.0 * fTemp60)):(iSlow3?0.0:(iSlow7?(0.33333333333333331 * fTemp60):fTemp60)))); - fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + double fTemp48 = (0.33333333333333331 * fTemp47); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph49 = FAUSTFLOAT(fRec48[0]); - output24[i] = FAUSTFLOAT(fTemp61); - double fTemp62 = double(input25[i]); - fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + output24[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = double(input25[i]); + fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph50 = FAUSTFLOAT(fRec51[0]); - double fTemp63 = (iSlow1?(iSlow4?(iSlow6?fTemp62:0.0):0.0):(iSlow2?(iSlow8?fTemp62:(3.3166247903553998 * fTemp62)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp62):fTemp62)))); - fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + double fTemp50 = (0.30151134457776363 * fTemp49); + fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph51 = FAUSTFLOAT(fRec50[0]); - output25[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = double(input26[i]); - fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + output25[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = double(input26[i]); + fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph52 = FAUSTFLOAT(fRec53[0]); - double fTemp65 = (iSlow1?(iSlow4?(iSlow6?fTemp64:0.0):0.0):(iSlow2?(iSlow8?fTemp64:(3.3166247903553998 * fTemp64)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp64):fTemp64)))); - fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + double fTemp52 = (0.30151134457776363 * fTemp51); + fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph53 = FAUSTFLOAT(fRec52[0]); - output26[i] = FAUSTFLOAT(fTemp65); - double fTemp66 = double(input27[i]); - fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + output26[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = double(input27[i]); + fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); fVbargraph54 = FAUSTFLOAT(fRec55[0]); - double fTemp67 = (iSlow1?(iSlow4?(iSlow6?fTemp66:0.0):0.0):(iSlow2?(iSlow8?fTemp66:(3.3166247903553998 * fTemp66)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp66):fTemp66)))); - fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); + double fTemp54 = (0.30151134457776363 * fTemp53); + fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); fVbargraph55 = FAUSTFLOAT(fRec54[0]); - output27[i] = FAUSTFLOAT(fTemp67); - double fTemp68 = double(input28[i]); - fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + output27[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = double(input28[i]); + fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); fVbargraph56 = FAUSTFLOAT(fRec57[0]); - double fTemp69 = (iSlow1?(iSlow4?(iSlow6?fTemp68:0.0):0.0):(iSlow2?(iSlow8?fTemp68:(3.3166247903553998 * fTemp68)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp68):fTemp68)))); - fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + double fTemp56 = (0.30151134457776363 * fTemp55); + fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); fVbargraph57 = FAUSTFLOAT(fRec56[0]); - output28[i] = FAUSTFLOAT(fTemp69); - double fTemp70 = double(input29[i]); - fRec59[0] = max((fRec59[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + output28[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = double(input29[i]); + fRec59[0] = max((fRec59[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); fVbargraph58 = FAUSTFLOAT(fRec59[0]); - double fTemp71 = (iSlow1?(iSlow4?(iSlow6?fTemp70:0.0):0.0):(iSlow2?(iSlow8?fTemp70:(3.3166247903553998 * fTemp70)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp70):fTemp70)))); - fRec58[0] = max((fRec58[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + double fTemp58 = (0.30151134457776363 * fTemp57); + fRec58[0] = max((fRec58[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); fVbargraph59 = FAUSTFLOAT(fRec58[0]); - output29[i] = FAUSTFLOAT(fTemp71); - double fTemp72 = double(input30[i]); - fRec61[0] = max((fRec61[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + output29[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = double(input30[i]); + fRec61[0] = max((fRec61[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); fVbargraph60 = FAUSTFLOAT(fRec61[0]); - double fTemp73 = (iSlow1?(iSlow4?(iSlow6?fTemp72:0.0):0.0):(iSlow2?(iSlow8?fTemp72:(3.3166247903553998 * fTemp72)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp72):fTemp72)))); - fRec60[0] = max((fRec60[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + double fTemp60 = (0.30151134457776363 * fTemp59); + fRec60[0] = max((fRec60[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); fVbargraph61 = FAUSTFLOAT(fRec60[0]); - output30[i] = FAUSTFLOAT(fTemp73); - double fTemp74 = double(input31[i]); - fRec63[0] = max((fRec63[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + output30[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = double(input31[i]); + fRec63[0] = max((fRec63[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); fVbargraph62 = FAUSTFLOAT(fRec63[0]); - double fTemp75 = (iSlow1?(iSlow4?(iSlow6?fTemp74:0.0):0.0):(iSlow2?(iSlow8?fTemp74:(3.3166247903553998 * fTemp74)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp74):fTemp74)))); - fRec62[0] = max((fRec62[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp75)))))); + double fTemp62 = (0.30151134457776363 * fTemp61); + fRec62[0] = max((fRec62[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); fVbargraph63 = FAUSTFLOAT(fRec62[0]); - output31[i] = FAUSTFLOAT(fTemp75); - double fTemp76 = double(input32[i]); - fRec65[0] = max((fRec65[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + output31[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = double(input32[i]); + fRec65[0] = max((fRec65[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); fVbargraph64 = FAUSTFLOAT(fRec65[0]); - double fTemp77 = (iSlow1?(iSlow4?(iSlow6?fTemp76:0.0):0.0):(iSlow2?(iSlow8?fTemp76:(3.3166247903553998 * fTemp76)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp76):fTemp76)))); - fRec64[0] = max((fRec64[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + double fTemp64 = (0.30151134457776363 * fTemp63); + fRec64[0] = max((fRec64[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); fVbargraph65 = FAUSTFLOAT(fRec64[0]); - output32[i] = FAUSTFLOAT(fTemp77); - double fTemp78 = double(input33[i]); - fRec67[0] = max((fRec67[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + output32[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = double(input33[i]); + fRec67[0] = max((fRec67[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); fVbargraph66 = FAUSTFLOAT(fRec67[0]); - double fTemp79 = (iSlow1?(iSlow4?(iSlow6?fTemp78:0.0):0.0):(iSlow2?(iSlow8?fTemp78:(3.3166247903553998 * fTemp78)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp78):fTemp78)))); - fRec66[0] = max((fRec66[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + double fTemp66 = (0.30151134457776363 * fTemp65); + fRec66[0] = max((fRec66[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); fVbargraph67 = FAUSTFLOAT(fRec66[0]); - output33[i] = FAUSTFLOAT(fTemp79); - double fTemp80 = double(input34[i]); - fRec69[0] = max((fRec69[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + output33[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = double(input34[i]); + fRec69[0] = max((fRec69[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); fVbargraph68 = FAUSTFLOAT(fRec69[0]); - double fTemp81 = (iSlow1?(iSlow4?(iSlow6?fTemp80:0.0):0.0):(iSlow2?(iSlow8?fTemp80:(3.3166247903553998 * fTemp80)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp80):fTemp80)))); - fRec68[0] = max((fRec68[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + double fTemp68 = (0.30151134457776363 * fTemp67); + fRec68[0] = max((fRec68[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); fVbargraph69 = FAUSTFLOAT(fRec68[0]); - output34[i] = FAUSTFLOAT(fTemp81); - double fTemp82 = double(input35[i]); - fRec71[0] = max((fRec71[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + output34[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = double(input35[i]); + fRec71[0] = max((fRec71[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); fVbargraph70 = FAUSTFLOAT(fRec71[0]); - double fTemp83 = (iSlow1?(iSlow4?(iSlow6?fTemp82:0.0):0.0):(iSlow2?(iSlow8?fTemp82:(3.3166247903553998 * fTemp82)):(iSlow3?0.0:(iSlow7?(0.30151134457776363 * fTemp82):fTemp82)))); - fRec70[0] = max((fRec70[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + double fTemp70 = (0.30151134457776363 * fTemp69); + fRec70[0] = max((fRec70[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); fVbargraph71 = FAUSTFLOAT(fRec70[0]); - output35[i] = FAUSTFLOAT(fTemp83); + output35[i] = FAUSTFLOAT(fTemp70); fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; - fRec11[1] = fRec11[0]; fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; fRec13[1] = fRec13[0]; - fRec14[1] = fRec14[0]; fRec12[1] = fRec12[0]; fRec15[1] = fRec15[0]; - fRec16[1] = fRec16[0]; + fRec14[1] = fRec14[0]; fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; - fRec21[1] = fRec21[0]; fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; fRec23[1] = fRec23[0]; - fRec24[1] = fRec24[0]; fRec22[1] = fRec22[0]; - fRec26[1] = fRec26[0]; fRec25[1] = fRec25[0]; - fRec28[1] = fRec28[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; fRec29[1] = fRec29[0]; - fRec30[1] = fRec30[0]; + fRec28[1] = fRec28[0]; fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; fRec33[1] = fRec33[0]; fRec32[1] = fRec32[0]; fRec35[1] = fRec35[0]; @@ -2194,7 +2176,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2426,7 +2407,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2489,7 +2470,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2518,11 +2499,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncLebedev263.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d6.cpp similarity index 52% rename from source/HOAUGens/HOAEncLebedev263.cpp rename to source/HOAUGens/HOAConverterAcnN3d2AcnSn3d6.cpp index ca6d9cb860..c4449c6732 100644 --- a/source/HOAUGens/HOAEncLebedev263.cpp +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d6.cpp @@ -1,10 +1,11 @@ /* ------------------------------------------------------------ author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2014" +copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAEncLebedev263" +name: "HOAConverterAcnN3d2AcnSn3d6" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,92 +633,202 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; double fRec1[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph0; - double fRec3[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph1; - double fRec4[2]; + double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec5[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; - double fRec6[2]; + double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec7[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec8[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph6; - double fRec9[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph7; - double fRec10[2]; + double fRec9[2]; FAUSTFLOAT fVbargraph8; - double fRec11[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph9; - double fRec12[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph10; - double fRec13[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph11; - double fRec14[2]; + double fRec13[2]; FAUSTFLOAT fVbargraph12; - double fRec15[2]; + double fRec12[2]; FAUSTFLOAT fVbargraph13; - double fRec16[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph14; - double fRec17[2]; + double fRec14[2]; FAUSTFLOAT fVbargraph15; - double fRec18[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph16; - double fRec19[2]; + double fRec16[2]; FAUSTFLOAT fVbargraph17; - double fRec20[2]; + double fRec19[2]; FAUSTFLOAT fVbargraph18; - double fRec21[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph19; - double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fVbargraph20; - double fRec23[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph21; - double fRec24[2]; + double fRec23[2]; FAUSTFLOAT fVbargraph22; - double fRec25[2]; + double fRec22[2]; FAUSTFLOAT fVbargraph23; - double fRec26[2]; + double fRec25[2]; FAUSTFLOAT fVbargraph24; - double fRec27[2]; + double fRec24[2]; FAUSTFLOAT fVbargraph25; - double fRec0[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph26; - double fRec28[2]; + double fRec26[2]; FAUSTFLOAT fVbargraph27; double fRec29[2]; FAUSTFLOAT fVbargraph28; - double fRec30[2]; + double fRec28[2]; FAUSTFLOAT fVbargraph29; double fRec31[2]; FAUSTFLOAT fVbargraph30; - double fRec32[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph31; double fRec33[2]; FAUSTFLOAT fVbargraph32; - double fRec34[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph33; double fRec35[2]; FAUSTFLOAT fVbargraph34; - double fRec36[2]; + double fRec34[2]; FAUSTFLOAT fVbargraph35; double fRec37[2]; FAUSTFLOAT fVbargraph36; - double fRec38[2]; + double fRec36[2]; FAUSTFLOAT fVbargraph37; double fRec39[2]; FAUSTFLOAT fVbargraph38; - double fRec40[2]; + double fRec38[2]; FAUSTFLOAT fVbargraph39; double fRec41[2]; FAUSTFLOAT fVbargraph40; - double fRec42[2]; + double fRec40[2]; FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec42[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec44[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec46[2]; + FAUSTFLOAT fVbargraph47; + double fRec49[2]; + FAUSTFLOAT fVbargraph48; + double fRec48[2]; + FAUSTFLOAT fVbargraph49; + double fRec51[2]; + FAUSTFLOAT fVbargraph50; + double fRec50[2]; + FAUSTFLOAT fVbargraph51; + double fRec53[2]; + FAUSTFLOAT fVbargraph52; + double fRec52[2]; + FAUSTFLOAT fVbargraph53; + double fRec55[2]; + FAUSTFLOAT fVbargraph54; + double fRec54[2]; + FAUSTFLOAT fVbargraph55; + double fRec57[2]; + FAUSTFLOAT fVbargraph56; + double fRec56[2]; + FAUSTFLOAT fVbargraph57; + double fRec59[2]; + FAUSTFLOAT fVbargraph58; + double fRec58[2]; + FAUSTFLOAT fVbargraph59; + double fRec61[2]; + FAUSTFLOAT fVbargraph60; + double fRec60[2]; + FAUSTFLOAT fVbargraph61; + double fRec63[2]; + FAUSTFLOAT fVbargraph62; + double fRec62[2]; + FAUSTFLOAT fVbargraph63; + double fRec65[2]; + FAUSTFLOAT fVbargraph64; + double fRec64[2]; + FAUSTFLOAT fVbargraph65; + double fRec67[2]; + FAUSTFLOAT fVbargraph66; + double fRec66[2]; + FAUSTFLOAT fVbargraph67; + double fRec69[2]; + FAUSTFLOAT fVbargraph68; + double fRec68[2]; + FAUSTFLOAT fVbargraph69; + double fRec71[2]; + FAUSTFLOAT fVbargraph70; + double fRec70[2]; + FAUSTFLOAT fVbargraph71; + double fRec73[2]; + FAUSTFLOAT fVbargraph72; + double fRec72[2]; + FAUSTFLOAT fVbargraph73; + double fRec75[2]; + FAUSTFLOAT fVbargraph74; + double fRec74[2]; + FAUSTFLOAT fVbargraph75; + double fRec77[2]; + FAUSTFLOAT fVbargraph76; + double fRec76[2]; + FAUSTFLOAT fVbargraph77; + double fRec79[2]; + FAUSTFLOAT fVbargraph78; + double fRec78[2]; + FAUSTFLOAT fVbargraph79; + double fRec81[2]; + FAUSTFLOAT fVbargraph80; + double fRec80[2]; + FAUSTFLOAT fVbargraph81; + double fRec83[2]; + FAUSTFLOAT fVbargraph82; + double fRec82[2]; + FAUSTFLOAT fVbargraph83; + double fRec85[2]; + FAUSTFLOAT fVbargraph84; + double fRec84[2]; + FAUSTFLOAT fVbargraph85; + double fRec87[2]; + FAUSTFLOAT fVbargraph86; + double fRec86[2]; + FAUSTFLOAT fVbargraph87; + double fRec89[2]; + FAUSTFLOAT fVbargraph88; + double fRec88[2]; + FAUSTFLOAT fVbargraph89; + double fRec91[2]; + FAUSTFLOAT fVbargraph90; + double fRec90[2]; + FAUSTFLOAT fVbargraph91; + double fRec93[2]; + FAUSTFLOAT fVbargraph92; + double fRec92[2]; + FAUSTFLOAT fVbargraph93; + double fRec95[2]; + FAUSTFLOAT fVbargraph94; + double fRec94[2]; + FAUSTFLOAT fVbargraph95; + double fRec97[2]; + FAUSTFLOAT fVbargraph96; + double fRec96[2]; + FAUSTFLOAT fVbargraph97; public: @@ -710,40 +836,30 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAEncLebedev263"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d6"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); } virtual int getNumInputs() { - return 26; + return 49; } virtual int getNumOutputs() { - return 16; + return 49; } virtual int getInputRate(int channel) { @@ -853,6 +969,98 @@ class mydsp : public dsp { rate = 1; break; } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } default: { rate = -1; break; @@ -929,202 +1137,553 @@ class mydsp : public dsp { rate = 1; break; } - default: { - rate = -1; + case 16: { + rate = 1; break; } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec35[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec37[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec41[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec43[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec42[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec45[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec44[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec47[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec46[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec51[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec50[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec53[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec52[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec55[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec54[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec56[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec59[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec58[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec61[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec60[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec63[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec62[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec65[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec64[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec67[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec66[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec69[l68] = 0.0; } - return rate; - - } - - static void classInit(int samplingFreq) { - - } - - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); - - } - - virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); - - } - - virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec1[l0] = 0.0; - - } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; - - } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec3[l2] = 0.0; - - } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; - - } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec5[l4] = 0.0; - - } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec6[l5] = 0.0; - - } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec7[l6] = 0.0; - - } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; - - } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec9[l8] = 0.0; - - } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec10[l9] = 0.0; - - } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec11[l10] = 0.0; - - } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec12[l11] = 0.0; - - } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec13[l12] = 0.0; - - } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec14[l13] = 0.0; - - } - for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec15[l14] = 0.0; - - } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec16[l15] = 0.0; - - } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec17[l16] = 0.0; - - } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec18[l17] = 0.0; - - } - for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec19[l18] = 0.0; - - } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec20[l19] = 0.0; - - } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec21[l20] = 0.0; - - } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec22[l21] = 0.0; - - } - for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec23[l22] = 0.0; - - } - for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; - - } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec25[l24] = 0.0; + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec68[l69] = 0.0; } - for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec71[l70] = 0.0; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec27[l26] = 0.0; + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec70[l71] = 0.0; } - for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec0[l27] = 0.0; + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec73[l72] = 0.0; } - for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec28[l28] = 0.0; + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec72[l73] = 0.0; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec29[l29] = 0.0; + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec75[l74] = 0.0; } - for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec30[l30] = 0.0; + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec74[l75] = 0.0; } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec31[l31] = 0.0; + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec77[l76] = 0.0; } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec32[l32] = 0.0; + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec76[l77] = 0.0; } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec33[l33] = 0.0; + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec79[l78] = 0.0; } - for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec34[l34] = 0.0; + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec78[l79] = 0.0; } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec35[l35] = 0.0; + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec81[l80] = 0.0; } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec36[l36] = 0.0; + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec80[l81] = 0.0; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec37[l37] = 0.0; + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec83[l82] = 0.0; } - for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec38[l38] = 0.0; + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec82[l83] = 0.0; } - for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec39[l39] = 0.0; + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec85[l84] = 0.0; } - for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - fRec40[l40] = 0.0; + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec84[l85] = 0.0; } - for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec41[l41] = 0.0; + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec87[l86] = 0.0; } - for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec42[l42] = 0.0; + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec86[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec89[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec88[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec91[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec90[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec93[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec92[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec95[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec94[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec97[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec96[l97] = 0.0; } @@ -1143,198 +1702,438 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAEncLebedev263"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d6"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3953b40", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39b29e0", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x395d840", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39b7530", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3967750", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39ade90", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3971740", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39a9340", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x397bac0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39a47f0", &fVbargraph1, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3985b90", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x399fbc0", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x398fd40", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39ef410", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x399a0b0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39f44a0", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39a45e0", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39ea380", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39aeea0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39e52f0", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39b9130", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39e0260", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c34a0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39db1d0", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39cd9d0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39d6140", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d80c0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39d10b0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e2970", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39cc020", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ed3e0", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39c6f90", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39f81e0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39c1f00", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a02630", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39bce70", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a0cb60", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a1d4c0", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a17250", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a22fd0", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a21b00", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a179b0", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a2c570", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a11ea0", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a371a0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a0c390", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a41f90", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a06880", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a4cf40", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a00d70", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a58280", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39fb260", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a62890", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a6cf80", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a77830", &fVbargraph56, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a822a0", &fVbargraph58, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a8ced0", &fVbargraph60, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a97cc0", &fVbargraph62, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa2c70", &fVbargraph64, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aadde0", &fVbargraph66, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab9110", &fVbargraph68, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ac4600", &fVbargraph70, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3acfe80", &fVbargraph72, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ada650", &fVbargraph74, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph76, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ae4f00", &fVbargraph76, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph78, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aef970", &fVbargraph78, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph80, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3afa5a0", &fVbargraph80, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph82, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b05390", &fVbargraph82, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph84, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b10340", &fVbargraph84, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph86, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b1b4b0", &fVbargraph86, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph88, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b267e0", &fVbargraph88, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph90, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b31cd0", &fVbargraph90, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph92, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b3d380", &fVbargraph92, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph94, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b48bf0", &fVbargraph94, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph96, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b54620", &fVbargraph96, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a295a0", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3957cc0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a33870", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3961db0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a3a920", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x396bcc0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a45670", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3975d90", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a4e700", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3980110", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a55bf0", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x398a1e0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a5ddc0", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3994470", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a66110", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x399e8c0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a6fea0", &fVbargraph34, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39a8ed0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a79910", &fVbargraph35, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39b35d0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a806f0", &fVbargraph36, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39bd860", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a88b00", &fVbargraph37, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c7cb0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a8ecb0", &fVbargraph38, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d22c0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a98000", &fVbargraph39, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39dca90", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a9ff70", &fVbargraph40, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e7420", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39f1f70", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39fc9f0", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a06e40", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a11450", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a1bc20", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aa9ba0", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a265b0", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a31100", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a3be10", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a46ce0", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a51d70", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a5cb70", &fVbargraph51, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a67180", &fVbargraph53, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a71950", &fVbargraph55, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a7c2e0", &fVbargraph57, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a86e30", &fVbargraph59, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a91b40", &fVbargraph61, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a9ca10", &fVbargraph63, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa7aa0", &fVbargraph65, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab2cf0", &fVbargraph67, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3abe100", &fVbargraph69, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ac96d0", &fVbargraph71, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ad4850", &fVbargraph73, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph75, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3adf020", &fVbargraph75, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph77, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ae99b0", &fVbargraph77, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph79, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3af4500", &fVbargraph79, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph81, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aff210", &fVbargraph81, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph83, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b0a0e0", &fVbargraph83, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph85, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b15170", &fVbargraph85, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph87, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b203c0", &fVbargraph87, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph89, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b2b7d0", &fVbargraph89, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph91, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b36da0", &fVbargraph91, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph93, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b42530", &fVbargraph93, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph95, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b4de80", &fVbargraph95, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph97, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b59990", &fVbargraph97, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fHslider0, "1", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->declare(&fHslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1367,6 +2166,29 @@ class mydsp : public dsp { FAUSTFLOAT* input23 = inputs[23]; FAUSTFLOAT* input24 = inputs[24]; FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; @@ -1383,227 +2205,480 @@ class mydsp : public dsp { FAUSTFLOAT* output13 = outputs[13]; FAUSTFLOAT* output14 = outputs[14]; FAUSTFLOAT* output15 = outputs[15]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - double fTemp0 = double(input5[i]); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); - fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input4[i]); + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); - fVbargraph2 = FAUSTFLOAT(fRec4[0]); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); double fTemp3 = double(input2[i]); fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); - fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = double(input0[i]); - fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph4 = FAUSTFLOAT(fRec6[0]); - double fTemp5 = double(input1[i]); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp6 = double(input17[i]); - fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph6 = FAUSTFLOAT(fRec8[0]); - double fTemp7 = double(input16[i]); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); - fVbargraph7 = FAUSTFLOAT(fRec9[0]); - double fTemp8 = double(input15[i]); - fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); - fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp9 = double(input14[i]); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph9 = FAUSTFLOAT(fRec11[0]); - double fTemp10 = double(input13[i]); - fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph10 = FAUSTFLOAT(fRec12[0]); - double fTemp11 = double(input12[i]); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph11 = FAUSTFLOAT(fRec13[0]); - double fTemp12 = double(input11[i]); - fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph12 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = double(input10[i]); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph13 = FAUSTFLOAT(fRec15[0]); - double fTemp14 = double(input9[i]); - fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph14 = FAUSTFLOAT(fRec16[0]); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); double fTemp15 = double(input8[i]); fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph15 = FAUSTFLOAT(fRec17[0]); - double fTemp16 = double(input6[i]); - fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph16 = FAUSTFLOAT(fRec18[0]); - double fTemp17 = double(input7[i]); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input9[i]); fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph17 = FAUSTFLOAT(fRec19[0]); - double fTemp18 = (fTemp14 + (fTemp15 + (fTemp16 + fTemp17))); - double fTemp19 = double(input25[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); - fVbargraph18 = FAUSTFLOAT(fRec20[0]); - double fTemp20 = double(input24[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); - fVbargraph19 = FAUSTFLOAT(fRec21[0]); - double fTemp21 = double(input23[i]); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph20 = FAUSTFLOAT(fRec22[0]); - double fTemp22 = double(input22[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph21 = FAUSTFLOAT(fRec23[0]); - double fTemp23 = double(input21[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph22 = FAUSTFLOAT(fRec24[0]); - double fTemp24 = double(input20[i]); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph23 = FAUSTFLOAT(fRec25[0]); - double fTemp25 = double(input18[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph24 = FAUSTFLOAT(fRec26[0]); - double fTemp26 = double(input19[i]); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph25 = FAUSTFLOAT(fRec27[0]); - double fTemp27 = (fTemp23 + (fTemp24 + (fTemp25 + fTemp26))); - double fTemp28 = (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + fTemp27)))); - double fTemp29 = (fRec1[0] * (((0.047619047619047623 * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + fTemp5)))))) + (0.038095238095238099 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + fTemp18)))))))))) + (0.03214285714285714 * fTemp28))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph26 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fTemp15 + fTemp7); - double fTemp31 = (fTemp3 - fTemp1); - double fTemp32 = (fTemp13 - fTemp11); - double fTemp33 = (fTemp26 + fTemp21); - double fTemp34 = (fTemp17 - fTemp14); - double fTemp35 = (fTemp25 - fTemp24); - double fTemp36 = (fTemp20 - (fTemp22 + fTemp35)); - double fTemp37 = (fTemp23 + fTemp19); - double fTemp38 = (fRec1[0] * ((((5.7138281391308437e-18 * fTemp30) + (((1.0100716559284827e-17 * fTemp2) + (0.082478609884232251 * fTemp31)) + (0.046656947481584346 * fTemp32))) + (0.032142857142857133 * fTemp33)) - (((0.046656947481584353 * (fTemp6 - (fTemp8 - (fTemp10 - (fTemp12 + fTemp34))))) + (0.032142857142857126 * fTemp36)) + (0.03214285714285714 * fTemp37)))); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); - fVbargraph27 = FAUSTFLOAT(fRec28[0]); - output1[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (fTemp4 - fTemp0); - double fTemp40 = (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 - fTemp18)))); - double fTemp41 = (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 - fTemp27)))); - double fTemp42 = (fRec1[0] * ((0.082478609884232251 * fTemp39) - ((0.046656947481584346 * fTemp40) + (0.03214285714285714 * fTemp41)))); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp18 = (0.3779644730092272 * fTemp17); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input10[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp20 = (0.3779644730092272 * fTemp19); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp22 = (0.3779644730092272 * fTemp21); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp24 = (0.3779644730092272 * fTemp23); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input13[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp26 = (0.3779644730092272 * fTemp25); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = double(input14[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph28 = FAUSTFLOAT(fRec29[0]); - output2[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (fTemp17 + fTemp8); - double fTemp44 = (fTemp5 - fTemp2); - double fTemp45 = (fTemp25 + fTemp22); - double fTemp46 = (fTemp26 - fTemp23); - double fTemp47 = (fTemp19 - (fTemp21 + fTemp46)); - double fTemp48 = (fTemp16 - fTemp15); - double fTemp49 = (fTemp14 + fTemp6); - double fTemp50 = (fTemp24 + fTemp20); - double fTemp51 = (fRec1[0] * (((((2.8569140695654219e-18 * fTemp43) + ((5.0503582796424135e-18 * (fTemp0 + (fTemp4 + fTemp3))) + ((0.082478609884232251 * fTemp44) + (0.046656947481584339 * fTemp10)))) + (0.032142857142857133 * fTemp45)) + (0.032142857142857126 * fTemp47)) - ((((0.046656947481584353 * (fTemp7 - (fTemp9 - (fTemp11 - (fTemp13 + fTemp48))))) + ((1.5151074838927241e-17 * fTemp1) + (0.046656947481584346 * fTemp12))) + (8.570742208696266e-18 * fTemp49)) + (0.03214285714285714 * fTemp50)))); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); - fVbargraph29 = FAUSTFLOAT(fRec30[0]); - output3[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (fTemp23 - (fTemp24 + (fTemp25 - fTemp26))); - double fTemp53 = (fRec1[0] * (((1.35515333088112e-17 * fTemp49) + (((1.1292944424009331e-17 * fTemp3) + (3.387883327202799e-17 * fTemp1)) + (4.5171777696037333e-18 * fTemp43))) - (((0.073771111356331756 * (fTemp10 - (fTemp11 + (fTemp13 - fTemp12)))) + ((2.2585888848018662e-17 * fTemp2) + (9.0343555392074667e-18 * fTemp30))) + (0.041496250137936598 * (fTemp19 - (fTemp20 - (fTemp21 - (fTemp22 - fTemp52)))))))); - fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + double fTemp28 = (0.3779644730092272 * fTemp27); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = double(input15[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph30 = FAUSTFLOAT(fRec31[0]); - output4[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = (fTemp15 - fTemp7); - double fTemp55 = (fTemp20 - (fTemp22 - fTemp35)); - double fTemp56 = (fRec1[0] * ((((9.0343555392074651e-18 * fTemp54) + (0.073771111356331756 * (fTemp6 - (fTemp8 - fTemp34)))) + (0.041496250137936612 * fTemp55)) + (0.041496250137936619 * (fTemp19 - (fTemp21 - fTemp46))))); - fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); - fVbargraph31 = FAUSTFLOAT(fRec32[0]); - output5[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (fTemp4 + fTemp0); - double fTemp58 = (fRec1[0] * (((0.021295885499997984 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + fTemp18))))) + ((0.10647942749999 * fTemp57) + (7.9795740640090912e-18 * fTemp28))) - ((0.053239713749994998 * (fTemp1 + (fTemp2 + (fTemp5 + fTemp3)))) + (0.042591770999995997 * (fTemp10 + (fTemp11 + (fTemp13 + fTemp12))))))); - fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + double fTemp30 = (0.3779644730092272 * fTemp29); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph32 = FAUSTFLOAT(fRec33[0]); - output6[i] = FAUSTFLOAT(fTemp58); - double fTemp59 = (fTemp23 - fTemp19); - double fTemp60 = (fTemp17 - fTemp8); - double fTemp61 = (fTemp14 - fTemp6); - double fTemp62 = (fTemp26 - fTemp21); - double fTemp63 = (fRec1[0] * (((0.041496250137936605 * fTemp59) + ((0.073771111356331756 * (fTemp7 - (fTemp9 - fTemp48))) + ((4.5171777696037326e-18 * fTemp60) + ((1.1292944424009331e-17 * fTemp39) + (0.041496250137936619 * fTemp55))))) - ((1.3551533308811195e-17 * fTemp61) + (0.041496250137936612 * fTemp62)))); - fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); - fVbargraph33 = FAUSTFLOAT(fRec34[0]); - output7[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (fTemp14 - (fTemp15 + (fTemp16 - fTemp17))); - double fTemp65 = (fRec1[0] * (((3.4574670604529943e-34 * fTemp57) + ((1.2704562477010493e-17 * fTemp50) + (((4.5171777696037326e-18 * fTemp13) + (2.2585888848018662e-17 * fTemp11)) + (2.5409124954020982e-18 * fTemp45)))) - ((0.036885555678165885 * (fTemp6 - (fTemp7 - (fTemp8 - (fTemp9 - fTemp64))))) + ((0.092213889195414706 * (fTemp1 - (fTemp2 + (fTemp5 - fTemp3)))) + ((((1.3551533308811195e-17 * fTemp12) + (3.1620244387226126e-17 * fTemp10)) + (7.6227374862062938e-18 * fTemp33)) + (1.7786387467814686e-17 * fTemp37)))))); - fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + double fTemp32 = (0.33333333333333331 * fTemp31); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph33 = FAUSTFLOAT(fRec32[0]); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph34 = FAUSTFLOAT(fRec35[0]); - output8[i] = FAUSTFLOAT(fTemp65); - double fTemp66 = (fTemp6 - (fTemp8 + fTemp34)); - double fTemp67 = (fRec1[0] * (((0.028171808490950564 * fTemp66) + ((0.025877458475338275 * fTemp45) + (((1.035015452839045e-17 * fTemp30) + ((0.056343616981901094 * fTemp12) + ((3.659332226676769e-17 * fTemp2) + (0.056343616981901108 * fTemp13)))) + (0.025877458475338268 * fTemp33)))) - ((0.025877458475338306 * fTemp50) + (((0.099602384111199482 * fTemp31) + ((0.056343616981901185 * fTemp11) + (0.056343616981901129 * fTemp10))) + (0.025877458475338278 * fTemp37))))); - fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); - fVbargraph35 = FAUSTFLOAT(fRec36[0]); - output9[i] = FAUSTFLOAT(fTemp67); - double fTemp68 = (fRec1[0] * ((((8.4508657845044212e-18 * fTemp60) + (2.5352597353513262e-17 * fTemp61)) + (0.063386569104638732 * (fTemp19 - (fTemp20 - (fTemp21 - (fTemp22 + fTemp52)))))) - (1.6901731569008842e-17 * fTemp54))); - fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + double fTemp34 = (0.33333333333333331 * fTemp33); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph35 = FAUSTFLOAT(fRec34[0]); + output17[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); fVbargraph36 = FAUSTFLOAT(fRec37[0]); - output10[i] = FAUSTFLOAT(fTemp68); - double fTemp69 = (fRec1[0] * (((8.0171952238258944e-18 * fTemp30) + (0.020044593143431839 * fTemp33)) - ((0.043643578047198484 * (fTemp12 - fTemp10)) + ((0.065465367070797711 * fTemp66) + (((((9.4483551814394875e-18 * fTemp2) + (0.07715167498104597 * fTemp31)) + (0.043643578047198477 * fTemp32)) + (0.020044593143431835 * fTemp36)) + (0.020044593143431842 * fTemp37)))))); - fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); - fVbargraph37 = FAUSTFLOAT(fRec38[0]); - output11[i] = FAUSTFLOAT(fTemp69); - double fTemp70 = (fRec1[0] * (((0.12598815766974242 * fTemp39) + (0.017817416127494979 * fTemp40)) + (0.032732683535398849 * fTemp41))); - fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + double fTemp36 = (0.33333333333333331 * fTemp35); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph37 = FAUSTFLOAT(fRec36[0]); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph38 = FAUSTFLOAT(fRec39[0]); - output12[i] = FAUSTFLOAT(fTemp70); - double fTemp71 = (fTemp7 - (fTemp9 + fTemp48)); - double fTemp72 = (fRec1[0] * (((1.8896710362878975e-17 * fTemp57) + ((((4.0085976119129472e-18 * fTemp43) + ((1.4172532772159232e-17 * fTemp1) + (0.043643578047198477 * fTemp12))) + (0.020044593143431839 * fTemp45)) + (0.020044593143431835 * fTemp47))) - ((0.065465367070797711 * fTemp71) + ((((0.07715167498104597 * fTemp44) + ((0.043643578047198484 * fTemp32) + ((4.7241775907197437e-18 * fTemp3) + (0.04364357804719847 * fTemp10)))) + (1.202579283573884e-17 * fTemp49)) + (0.020044593143431842 * fTemp50))))); - fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); - fVbargraph39 = FAUSTFLOAT(fRec40[0]); - output13[i] = FAUSTFLOAT(fTemp72); - double fTemp73 = (fRec1[0] * (((1.9406539740732082e-17 * (fTemp24 - fTemp20)) + (((9.1475980081561452e-34 * fTemp39) + (0.069006555934235436 * (fTemp6 - (fTemp7 - (fTemp8 - (fTemp9 + fTemp64)))))) + (3.8813079481464173e-18 * (fTemp25 - fTemp22)))) - ((1.1643923844439248e-17 * fTemp62) + (2.7169155637024915e-17 * fTemp59)))); - fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + double fTemp38 = (0.33333333333333331 * fTemp37); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph39 = FAUSTFLOAT(fRec38[0]); + output19[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph40 = FAUSTFLOAT(fRec41[0]); - output14[i] = FAUSTFLOAT(fTemp73); - double fTemp74 = (fRec1[0] * (((2.2867163770701174e-50 * fTemp57) + ((0.02587745847533824 * fTemp50) + ((1.5525231792585678e-17 * fTemp49) + ((0.099602384111199482 * fTemp44) + (((0.056343616981901032 * fTemp11) + ((5.488998340015154e-17 * fTemp1) + (0.056343616981901129 * fTemp12))) + (0.025877458475338278 * fTemp33)))))) - ((0.028171808490950564 * fTemp71) + ((0.025877458475338271 * fTemp45) + ((5.1750772641952248e-18 * fTemp43) + (((0.056343616981901094 * fTemp10) + ((1.8296661133383845e-17 * fTemp3) + (0.056343616981901101 * fTemp13))) + (0.025877458475338268 * fTemp37))))))); - fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); - fVbargraph41 = FAUSTFLOAT(fRec42[0]); - output15[i] = FAUSTFLOAT(fTemp74); + double fTemp40 = (0.33333333333333331 * fTemp39); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph41 = FAUSTFLOAT(fRec40[0]); + output20[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph42 = FAUSTFLOAT(fRec43[0]); + double fTemp42 = (0.33333333333333331 * fTemp41); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph43 = FAUSTFLOAT(fRec42[0]); + output21[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph44 = FAUSTFLOAT(fRec45[0]); + double fTemp44 = (0.33333333333333331 * fTemp43); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph45 = FAUSTFLOAT(fRec44[0]); + output22[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph46 = FAUSTFLOAT(fRec47[0]); + double fTemp46 = (0.33333333333333331 * fTemp45); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph47 = FAUSTFLOAT(fRec46[0]); + output23[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph48 = FAUSTFLOAT(fRec49[0]); + double fTemp48 = (0.33333333333333331 * fTemp47); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph49 = FAUSTFLOAT(fRec48[0]); + output24[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = double(input25[i]); + fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph50 = FAUSTFLOAT(fRec51[0]); + double fTemp50 = (0.30151134457776363 * fTemp49); + fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph51 = FAUSTFLOAT(fRec50[0]); + output25[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = double(input26[i]); + fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph52 = FAUSTFLOAT(fRec53[0]); + double fTemp52 = (0.30151134457776363 * fTemp51); + fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph53 = FAUSTFLOAT(fRec52[0]); + output26[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = double(input27[i]); + fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph54 = FAUSTFLOAT(fRec55[0]); + double fTemp54 = (0.30151134457776363 * fTemp53); + fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph55 = FAUSTFLOAT(fRec54[0]); + output27[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = double(input28[i]); + fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph56 = FAUSTFLOAT(fRec57[0]); + double fTemp56 = (0.30151134457776363 * fTemp55); + fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph57 = FAUSTFLOAT(fRec56[0]); + output28[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = double(input29[i]); + fRec59[0] = max((fRec59[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph58 = FAUSTFLOAT(fRec59[0]); + double fTemp58 = (0.30151134457776363 * fTemp57); + fRec58[0] = max((fRec58[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph59 = FAUSTFLOAT(fRec58[0]); + output29[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = double(input30[i]); + fRec61[0] = max((fRec61[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph60 = FAUSTFLOAT(fRec61[0]); + double fTemp60 = (0.30151134457776363 * fTemp59); + fRec60[0] = max((fRec60[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph61 = FAUSTFLOAT(fRec60[0]); + output30[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = double(input31[i]); + fRec63[0] = max((fRec63[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph62 = FAUSTFLOAT(fRec63[0]); + double fTemp62 = (0.30151134457776363 * fTemp61); + fRec62[0] = max((fRec62[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph63 = FAUSTFLOAT(fRec62[0]); + output31[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = double(input32[i]); + fRec65[0] = max((fRec65[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph64 = FAUSTFLOAT(fRec65[0]); + double fTemp64 = (0.30151134457776363 * fTemp63); + fRec64[0] = max((fRec64[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph65 = FAUSTFLOAT(fRec64[0]); + output32[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = double(input33[i]); + fRec67[0] = max((fRec67[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph66 = FAUSTFLOAT(fRec67[0]); + double fTemp66 = (0.30151134457776363 * fTemp65); + fRec66[0] = max((fRec66[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph67 = FAUSTFLOAT(fRec66[0]); + output33[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = double(input34[i]); + fRec69[0] = max((fRec69[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); + fVbargraph68 = FAUSTFLOAT(fRec69[0]); + double fTemp68 = (0.30151134457776363 * fTemp67); + fRec68[0] = max((fRec68[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph69 = FAUSTFLOAT(fRec68[0]); + output34[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = double(input35[i]); + fRec71[0] = max((fRec71[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph70 = FAUSTFLOAT(fRec71[0]); + double fTemp70 = (0.30151134457776363 * fTemp69); + fRec70[0] = max((fRec70[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph71 = FAUSTFLOAT(fRec70[0]); + output35[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = double(input36[i]); + fRec73[0] = max((fRec73[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph72 = FAUSTFLOAT(fRec73[0]); + double fTemp72 = (0.27735009811261457 * fTemp71); + fRec72[0] = max((fRec72[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph73 = FAUSTFLOAT(fRec72[0]); + output36[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = double(input37[i]); + fRec75[0] = max((fRec75[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph74 = FAUSTFLOAT(fRec75[0]); + double fTemp74 = (0.27735009811261457 * fTemp73); + fRec74[0] = max((fRec74[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + fVbargraph75 = FAUSTFLOAT(fRec74[0]); + output37[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = double(input38[i]); + fRec77[0] = max((fRec77[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp75)))))); + fVbargraph76 = FAUSTFLOAT(fRec77[0]); + double fTemp76 = (0.27735009811261457 * fTemp75); + fRec76[0] = max((fRec76[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph77 = FAUSTFLOAT(fRec76[0]); + output38[i] = FAUSTFLOAT(fTemp76); + double fTemp77 = double(input39[i]); + fRec79[0] = max((fRec79[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph78 = FAUSTFLOAT(fRec79[0]); + double fTemp78 = (0.27735009811261457 * fTemp77); + fRec78[0] = max((fRec78[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph79 = FAUSTFLOAT(fRec78[0]); + output39[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = double(input40[i]); + fRec81[0] = max((fRec81[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + fVbargraph80 = FAUSTFLOAT(fRec81[0]); + double fTemp80 = (0.27735009811261457 * fTemp79); + fRec80[0] = max((fRec80[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + fVbargraph81 = FAUSTFLOAT(fRec80[0]); + output40[i] = FAUSTFLOAT(fTemp80); + double fTemp81 = double(input41[i]); + fRec83[0] = max((fRec83[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + fVbargraph82 = FAUSTFLOAT(fRec83[0]); + double fTemp82 = (0.27735009811261457 * fTemp81); + fRec82[0] = max((fRec82[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph83 = FAUSTFLOAT(fRec82[0]); + output41[i] = FAUSTFLOAT(fTemp82); + double fTemp83 = double(input42[i]); + fRec85[0] = max((fRec85[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph84 = FAUSTFLOAT(fRec85[0]); + double fTemp84 = (0.27735009811261457 * fTemp83); + fRec84[0] = max((fRec84[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph85 = FAUSTFLOAT(fRec84[0]); + output42[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = double(input43[i]); + fRec87[0] = max((fRec87[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + fVbargraph86 = FAUSTFLOAT(fRec87[0]); + double fTemp86 = (0.27735009811261457 * fTemp85); + fRec86[0] = max((fRec86[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); + fVbargraph87 = FAUSTFLOAT(fRec86[0]); + output43[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = double(input44[i]); + fRec89[0] = max((fRec89[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph88 = FAUSTFLOAT(fRec89[0]); + double fTemp88 = (0.27735009811261457 * fTemp87); + fRec88[0] = max((fRec88[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp88)))))); + fVbargraph89 = FAUSTFLOAT(fRec88[0]); + output44[i] = FAUSTFLOAT(fTemp88); + double fTemp89 = double(input45[i]); + fRec91[0] = max((fRec91[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + fVbargraph90 = FAUSTFLOAT(fRec91[0]); + double fTemp90 = (0.27735009811261457 * fTemp89); + fRec90[0] = max((fRec90[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph91 = FAUSTFLOAT(fRec90[0]); + output45[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = double(input46[i]); + fRec93[0] = max((fRec93[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph92 = FAUSTFLOAT(fRec93[0]); + double fTemp92 = (0.27735009811261457 * fTemp91); + fRec92[0] = max((fRec92[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph93 = FAUSTFLOAT(fRec92[0]); + output46[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = double(input47[i]); + fRec95[0] = max((fRec95[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph94 = FAUSTFLOAT(fRec95[0]); + double fTemp94 = (0.27735009811261457 * fTemp93); + fRec94[0] = max((fRec94[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph95 = FAUSTFLOAT(fRec94[0]); + output47[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = double(input48[i]); + fRec97[0] = max((fRec97[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph96 = FAUSTFLOAT(fRec97[0]); + double fTemp96 = (0.27735009811261457 * fTemp95); + fRec96[0] = max((fRec96[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph97 = FAUSTFLOAT(fRec96[0]); + output48[i] = FAUSTFLOAT(fTemp96); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; + fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; fRec5[1] = fRec5[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; - fRec8[1] = fRec8[0]; + fRec6[1] = fRec6[0]; fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; + fRec8[1] = fRec8[0]; fRec11[1] = fRec11[0]; - fRec12[1] = fRec12[0]; + fRec10[1] = fRec10[0]; fRec13[1] = fRec13[0]; - fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; fRec15[1] = fRec15[0]; - fRec16[1] = fRec16[0]; + fRec14[1] = fRec14[0]; fRec17[1] = fRec17[0]; - fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; + fRec18[1] = fRec18[0]; fRec21[1] = fRec21[0]; - fRec22[1] = fRec22[0]; + fRec20[1] = fRec20[0]; fRec23[1] = fRec23[0]; - fRec24[1] = fRec24[0]; + fRec22[1] = fRec22[0]; fRec25[1] = fRec25[0]; - fRec26[1] = fRec26[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; - fRec0[1] = fRec0[0]; - fRec28[1] = fRec28[0]; + fRec26[1] = fRec26[0]; fRec29[1] = fRec29[0]; - fRec30[1] = fRec30[0]; + fRec28[1] = fRec28[0]; fRec31[1] = fRec31[0]; - fRec32[1] = fRec32[0]; + fRec30[1] = fRec30[0]; fRec33[1] = fRec33[0]; - fRec34[1] = fRec34[0]; + fRec32[1] = fRec32[0]; fRec35[1] = fRec35[0]; - fRec36[1] = fRec36[0]; + fRec34[1] = fRec34[0]; fRec37[1] = fRec37[0]; - fRec38[1] = fRec38[0]; + fRec36[1] = fRec36[0]; fRec39[1] = fRec39[0]; - fRec40[1] = fRec40[0]; + fRec38[1] = fRec38[0]; fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec43[1] = fRec43[0]; fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec49[1] = fRec49[0]; + fRec48[1] = fRec48[0]; + fRec51[1] = fRec51[0]; + fRec50[1] = fRec50[0]; + fRec53[1] = fRec53[0]; + fRec52[1] = fRec52[0]; + fRec55[1] = fRec55[0]; + fRec54[1] = fRec54[0]; + fRec57[1] = fRec57[0]; + fRec56[1] = fRec56[0]; + fRec59[1] = fRec59[0]; + fRec58[1] = fRec58[0]; + fRec61[1] = fRec61[0]; + fRec60[1] = fRec60[0]; + fRec63[1] = fRec63[0]; + fRec62[1] = fRec62[0]; + fRec65[1] = fRec65[0]; + fRec64[1] = fRec64[0]; + fRec67[1] = fRec67[0]; + fRec66[1] = fRec66[0]; + fRec69[1] = fRec69[0]; + fRec68[1] = fRec68[0]; + fRec71[1] = fRec71[0]; + fRec70[1] = fRec70[0]; + fRec73[1] = fRec73[0]; + fRec72[1] = fRec72[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; + fRec77[1] = fRec77[0]; + fRec76[1] = fRec76[0]; + fRec79[1] = fRec79[0]; + fRec78[1] = fRec78[0]; + fRec81[1] = fRec81[0]; + fRec80[1] = fRec80[0]; + fRec83[1] = fRec83[0]; + fRec82[1] = fRec82[0]; + fRec85[1] = fRec85[0]; + fRec84[1] = fRec84[0]; + fRec87[1] = fRec87[0]; + fRec86[1] = fRec86[0]; + fRec89[1] = fRec89[0]; + fRec88[1] = fRec88[0]; + fRec91[1] = fRec91[0]; + fRec90[1] = fRec90[0]; + fRec93[1] = fRec93[0]; + fRec92[1] = fRec92[0]; + fRec95[1] = fRec95[0]; + fRec94[1] = fRec94[0]; + fRec97[1] = fRec97[0]; + fRec96[1] = fRec96[0]; } @@ -1612,7 +2687,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1844,7 +2918,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1907,7 +2981,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1936,11 +3010,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d7.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d7.cpp new file mode 100644 index 0000000000..b756c7bde5 --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d7.cpp @@ -0,0 +1,3615 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnN3d2AcnSn3d7" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec18[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec20[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; + FAUSTFLOAT fVbargraph24; + double fRec24[2]; + FAUSTFLOAT fVbargraph25; + double fRec27[2]; + FAUSTFLOAT fVbargraph26; + double fRec26[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; + FAUSTFLOAT fVbargraph31; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fRec32[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec34[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec36[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec38[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec40[2]; + FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec42[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec44[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec46[2]; + FAUSTFLOAT fVbargraph47; + double fRec49[2]; + FAUSTFLOAT fVbargraph48; + double fRec48[2]; + FAUSTFLOAT fVbargraph49; + double fRec51[2]; + FAUSTFLOAT fVbargraph50; + double fRec50[2]; + FAUSTFLOAT fVbargraph51; + double fRec53[2]; + FAUSTFLOAT fVbargraph52; + double fRec52[2]; + FAUSTFLOAT fVbargraph53; + double fRec55[2]; + FAUSTFLOAT fVbargraph54; + double fRec54[2]; + FAUSTFLOAT fVbargraph55; + double fRec57[2]; + FAUSTFLOAT fVbargraph56; + double fRec56[2]; + FAUSTFLOAT fVbargraph57; + double fRec59[2]; + FAUSTFLOAT fVbargraph58; + double fRec58[2]; + FAUSTFLOAT fVbargraph59; + double fRec61[2]; + FAUSTFLOAT fVbargraph60; + double fRec60[2]; + FAUSTFLOAT fVbargraph61; + double fRec63[2]; + FAUSTFLOAT fVbargraph62; + double fRec62[2]; + FAUSTFLOAT fVbargraph63; + double fRec65[2]; + FAUSTFLOAT fVbargraph64; + double fRec64[2]; + FAUSTFLOAT fVbargraph65; + double fRec67[2]; + FAUSTFLOAT fVbargraph66; + double fRec66[2]; + FAUSTFLOAT fVbargraph67; + double fRec69[2]; + FAUSTFLOAT fVbargraph68; + double fRec68[2]; + FAUSTFLOAT fVbargraph69; + double fRec71[2]; + FAUSTFLOAT fVbargraph70; + double fRec70[2]; + FAUSTFLOAT fVbargraph71; + double fRec73[2]; + FAUSTFLOAT fVbargraph72; + double fRec72[2]; + FAUSTFLOAT fVbargraph73; + double fRec75[2]; + FAUSTFLOAT fVbargraph74; + double fRec74[2]; + FAUSTFLOAT fVbargraph75; + double fRec77[2]; + FAUSTFLOAT fVbargraph76; + double fRec76[2]; + FAUSTFLOAT fVbargraph77; + double fRec79[2]; + FAUSTFLOAT fVbargraph78; + double fRec78[2]; + FAUSTFLOAT fVbargraph79; + double fRec81[2]; + FAUSTFLOAT fVbargraph80; + double fRec80[2]; + FAUSTFLOAT fVbargraph81; + double fRec83[2]; + FAUSTFLOAT fVbargraph82; + double fRec82[2]; + FAUSTFLOAT fVbargraph83; + double fRec85[2]; + FAUSTFLOAT fVbargraph84; + double fRec84[2]; + FAUSTFLOAT fVbargraph85; + double fRec87[2]; + FAUSTFLOAT fVbargraph86; + double fRec86[2]; + FAUSTFLOAT fVbargraph87; + double fRec89[2]; + FAUSTFLOAT fVbargraph88; + double fRec88[2]; + FAUSTFLOAT fVbargraph89; + double fRec91[2]; + FAUSTFLOAT fVbargraph90; + double fRec90[2]; + FAUSTFLOAT fVbargraph91; + double fRec93[2]; + FAUSTFLOAT fVbargraph92; + double fRec92[2]; + FAUSTFLOAT fVbargraph93; + double fRec95[2]; + FAUSTFLOAT fVbargraph94; + double fRec94[2]; + FAUSTFLOAT fVbargraph95; + double fRec97[2]; + FAUSTFLOAT fVbargraph96; + double fRec96[2]; + FAUSTFLOAT fVbargraph97; + double fRec99[2]; + FAUSTFLOAT fVbargraph98; + double fRec98[2]; + FAUSTFLOAT fVbargraph99; + double fRec101[2]; + FAUSTFLOAT fVbargraph100; + double fRec100[2]; + FAUSTFLOAT fVbargraph101; + double fRec103[2]; + FAUSTFLOAT fVbargraph102; + double fRec102[2]; + FAUSTFLOAT fVbargraph103; + double fRec105[2]; + FAUSTFLOAT fVbargraph104; + double fRec104[2]; + FAUSTFLOAT fVbargraph105; + double fRec107[2]; + FAUSTFLOAT fVbargraph106; + double fRec106[2]; + FAUSTFLOAT fVbargraph107; + double fRec109[2]; + FAUSTFLOAT fVbargraph108; + double fRec108[2]; + FAUSTFLOAT fVbargraph109; + double fRec111[2]; + FAUSTFLOAT fVbargraph110; + double fRec110[2]; + FAUSTFLOAT fVbargraph111; + double fRec113[2]; + FAUSTFLOAT fVbargraph112; + double fRec112[2]; + FAUSTFLOAT fVbargraph113; + double fRec115[2]; + FAUSTFLOAT fVbargraph114; + double fRec114[2]; + FAUSTFLOAT fVbargraph115; + double fRec117[2]; + FAUSTFLOAT fVbargraph116; + double fRec116[2]; + FAUSTFLOAT fVbargraph117; + double fRec119[2]; + FAUSTFLOAT fVbargraph118; + double fRec118[2]; + FAUSTFLOAT fVbargraph119; + double fRec121[2]; + FAUSTFLOAT fVbargraph120; + double fRec120[2]; + FAUSTFLOAT fVbargraph121; + double fRec123[2]; + FAUSTFLOAT fVbargraph122; + double fRec122[2]; + FAUSTFLOAT fVbargraph123; + double fRec125[2]; + FAUSTFLOAT fVbargraph124; + double fRec124[2]; + FAUSTFLOAT fVbargraph125; + double fRec127[2]; + FAUSTFLOAT fVbargraph126; + double fRec126[2]; + FAUSTFLOAT fVbargraph127; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d7"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 64; + + } + virtual int getNumOutputs() { + return 64; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec35[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec37[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec41[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec43[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec42[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec45[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec44[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec47[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec46[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec51[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec50[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec53[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec52[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec55[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec54[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec56[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec59[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec58[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec61[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec60[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec63[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec62[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec65[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec64[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec67[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec66[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec69[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec68[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec71[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec70[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec73[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec72[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec75[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec74[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec77[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec76[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec79[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec78[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec81[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec80[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec83[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec82[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec85[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec84[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec87[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec86[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec89[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec88[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec91[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec90[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec93[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec92[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec95[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec94[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec97[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec96[l97] = 0.0; + + } + for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + fRec99[l98] = 0.0; + + } + for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + fRec98[l99] = 0.0; + + } + for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + fRec101[l100] = 0.0; + + } + for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + fRec100[l101] = 0.0; + + } + for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + fRec103[l102] = 0.0; + + } + for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + fRec102[l103] = 0.0; + + } + for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + fRec105[l104] = 0.0; + + } + for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + fRec104[l105] = 0.0; + + } + for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + fRec107[l106] = 0.0; + + } + for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + fRec106[l107] = 0.0; + + } + for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + fRec109[l108] = 0.0; + + } + for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + fRec108[l109] = 0.0; + + } + for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { + fRec111[l110] = 0.0; + + } + for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + fRec110[l111] = 0.0; + + } + for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + fRec113[l112] = 0.0; + + } + for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + fRec112[l113] = 0.0; + + } + for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + fRec115[l114] = 0.0; + + } + for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { + fRec114[l115] = 0.0; + + } + for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + fRec117[l116] = 0.0; + + } + for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + fRec116[l117] = 0.0; + + } + for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + fRec119[l118] = 0.0; + + } + for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + fRec118[l119] = 0.0; + + } + for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { + fRec121[l120] = 0.0; + + } + for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { + fRec120[l121] = 0.0; + + } + for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { + fRec123[l122] = 0.0; + + } + for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { + fRec122[l123] = 0.0; + + } + for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { + fRec125[l124] = 0.0; + + } + for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { + fRec124[l125] = 0.0; + + } + for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { + fRec127[l126] = 0.0; + + } + for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { + fRec126[l127] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d7"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35f9820", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3603510", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x360d420", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3617410", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3621790", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x362b860", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3635a10", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x363fd80", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x364a2b0", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3654b70", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x365ee10", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3669180", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36736b0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x367dda0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3688650", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36930c0", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x369dec0", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a8310", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36b2840", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36bcf30", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36c77e0", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36d2250", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36dce80", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36e7c70", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36f2c20", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36fdf60", &fVbargraph50, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3708570", &fVbargraph52, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3712c60", &fVbargraph54, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x371d510", &fVbargraph56, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3727f80", &fVbargraph58, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3732bb0", &fVbargraph60, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x373d9a0", &fVbargraph62, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3748950", &fVbargraph64, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3753ac0", &fVbargraph66, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x375edf0", &fVbargraph68, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x376a2e0", &fVbargraph70, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3775b60", &fVbargraph72, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3780330", &fVbargraph74, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph76, "unit", "dB"); + ui_interface->addVerticalBargraph("0x378abe0", &fVbargraph76, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph78, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3795650", &fVbargraph78, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph80, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37a0280", &fVbargraph80, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph82, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37ab070", &fVbargraph82, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph84, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37b6020", &fVbargraph84, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph86, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37c1190", &fVbargraph86, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph88, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37cc4c0", &fVbargraph88, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph90, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37d79b0", &fVbargraph90, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph92, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37e3060", &fVbargraph92, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph94, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37ee8d0", &fVbargraph94, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph96, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37fa300", &fVbargraph96, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("7"); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph98, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38060c0", &fVbargraph98, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph100, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3810a50", &fVbargraph100, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("51"); + ui_interface->declare(&fVbargraph102, "unit", "dB"); + ui_interface->addVerticalBargraph("0x381b4c0", &fVbargraph102, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("52"); + ui_interface->declare(&fVbargraph104, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38260f0", &fVbargraph104, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("53"); + ui_interface->declare(&fVbargraph106, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3830ee0", &fVbargraph106, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("54"); + ui_interface->declare(&fVbargraph108, "unit", "dB"); + ui_interface->addVerticalBargraph("0x383be90", &fVbargraph108, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("55"); + ui_interface->declare(&fVbargraph110, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3847000", &fVbargraph110, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("56"); + ui_interface->declare(&fVbargraph112, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3852330", &fVbargraph112, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("57"); + ui_interface->declare(&fVbargraph114, "unit", "dB"); + ui_interface->addVerticalBargraph("0x385d820", &fVbargraph114, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("58"); + ui_interface->declare(&fVbargraph116, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3868ed0", &fVbargraph116, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("59"); + ui_interface->declare(&fVbargraph118, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3874740", &fVbargraph118, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("60"); + ui_interface->declare(&fVbargraph120, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3880170", &fVbargraph120, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("61"); + ui_interface->declare(&fVbargraph122, "unit", "dB"); + ui_interface->addVerticalBargraph("0x388bd60", &fVbargraph122, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("62"); + ui_interface->declare(&fVbargraph124, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3897b10", &fVbargraph124, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("63"); + ui_interface->declare(&fVbargraph126, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38a3a80", &fVbargraph126, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35fd9a0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3607a80", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3611990", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x361ba60", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3625de0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x362feb0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x363a140", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3644590", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x364eba0", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36592b0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3663540", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x366d990", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3677fa0", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3682770", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x368d100", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3697c50", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36a26d0", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36acb20", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36b7130", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36c1900", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36cc290", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36d6de0", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36e1af0", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36ec9c0", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36f7a50", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3702850", &fVbargraph51, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x370ce60", &fVbargraph53, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3717630", &fVbargraph55, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3721fc0", &fVbargraph57, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x372cb10", &fVbargraph59, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3737820", &fVbargraph61, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37426f0", &fVbargraph63, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x374d780", &fVbargraph65, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37589d0", &fVbargraph67, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3763de0", &fVbargraph69, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x376f3b0", &fVbargraph71, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x377a530", &fVbargraph73, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph75, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3784d00", &fVbargraph75, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph77, "unit", "dB"); + ui_interface->addVerticalBargraph("0x378f690", &fVbargraph77, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph79, "unit", "dB"); + ui_interface->addVerticalBargraph("0x379a1e0", &fVbargraph79, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph81, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37a4ef0", &fVbargraph81, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph83, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37afdc0", &fVbargraph83, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph85, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37bae50", &fVbargraph85, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph87, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37c60a0", &fVbargraph87, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph89, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37d14b0", &fVbargraph89, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph91, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37dca80", &fVbargraph91, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph93, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37e8210", &fVbargraph93, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph95, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37f3b60", &fVbargraph95, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph97, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37ff670", &fVbargraph97, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("7"); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph99, "unit", "dB"); + ui_interface->addVerticalBargraph("0x380ab70", &fVbargraph99, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph101, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3815500", &fVbargraph101, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("51"); + ui_interface->declare(&fVbargraph103, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3820050", &fVbargraph103, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("52"); + ui_interface->declare(&fVbargraph105, "unit", "dB"); + ui_interface->addVerticalBargraph("0x382ad60", &fVbargraph105, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("53"); + ui_interface->declare(&fVbargraph107, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3835c30", &fVbargraph107, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("54"); + ui_interface->declare(&fVbargraph109, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3840cc0", &fVbargraph109, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("55"); + ui_interface->declare(&fVbargraph111, "unit", "dB"); + ui_interface->addVerticalBargraph("0x384bf10", &fVbargraph111, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("56"); + ui_interface->declare(&fVbargraph113, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3857320", &fVbargraph113, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("57"); + ui_interface->declare(&fVbargraph115, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38628f0", &fVbargraph115, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("58"); + ui_interface->declare(&fVbargraph117, "unit", "dB"); + ui_interface->addVerticalBargraph("0x386e080", &fVbargraph117, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("59"); + ui_interface->declare(&fVbargraph119, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38799d0", &fVbargraph119, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("60"); + ui_interface->declare(&fVbargraph121, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38854e0", &fVbargraph121, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("61"); + ui_interface->declare(&fVbargraph123, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38911b0", &fVbargraph123, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("62"); + ui_interface->declare(&fVbargraph125, "unit", "dB"); + ui_interface->addVerticalBargraph("0x389d040", &fVbargraph125, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("63"); + ui_interface->declare(&fVbargraph127, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38a9090", &fVbargraph127, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = double(input8[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp18 = (0.3779644730092272 * fTemp17); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input10[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp20 = (0.3779644730092272 * fTemp19); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp22 = (0.3779644730092272 * fTemp21); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp24 = (0.3779644730092272 * fTemp23); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input13[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp26 = (0.3779644730092272 * fTemp25); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = double(input14[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp28 = (0.3779644730092272 * fTemp27); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = double(input15[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + double fTemp32 = (0.33333333333333331 * fTemp31); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph33 = FAUSTFLOAT(fRec32[0]); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph34 = FAUSTFLOAT(fRec35[0]); + double fTemp34 = (0.33333333333333331 * fTemp33); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph35 = FAUSTFLOAT(fRec34[0]); + output17[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph36 = FAUSTFLOAT(fRec37[0]); + double fTemp36 = (0.33333333333333331 * fTemp35); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph37 = FAUSTFLOAT(fRec36[0]); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph38 = FAUSTFLOAT(fRec39[0]); + double fTemp38 = (0.33333333333333331 * fTemp37); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph39 = FAUSTFLOAT(fRec38[0]); + output19[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph40 = FAUSTFLOAT(fRec41[0]); + double fTemp40 = (0.33333333333333331 * fTemp39); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph41 = FAUSTFLOAT(fRec40[0]); + output20[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph42 = FAUSTFLOAT(fRec43[0]); + double fTemp42 = (0.33333333333333331 * fTemp41); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph43 = FAUSTFLOAT(fRec42[0]); + output21[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph44 = FAUSTFLOAT(fRec45[0]); + double fTemp44 = (0.33333333333333331 * fTemp43); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph45 = FAUSTFLOAT(fRec44[0]); + output22[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph46 = FAUSTFLOAT(fRec47[0]); + double fTemp46 = (0.33333333333333331 * fTemp45); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph47 = FAUSTFLOAT(fRec46[0]); + output23[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph48 = FAUSTFLOAT(fRec49[0]); + double fTemp48 = (0.33333333333333331 * fTemp47); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph49 = FAUSTFLOAT(fRec48[0]); + output24[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = double(input25[i]); + fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph50 = FAUSTFLOAT(fRec51[0]); + double fTemp50 = (0.30151134457776363 * fTemp49); + fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph51 = FAUSTFLOAT(fRec50[0]); + output25[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = double(input26[i]); + fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph52 = FAUSTFLOAT(fRec53[0]); + double fTemp52 = (0.30151134457776363 * fTemp51); + fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph53 = FAUSTFLOAT(fRec52[0]); + output26[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = double(input27[i]); + fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph54 = FAUSTFLOAT(fRec55[0]); + double fTemp54 = (0.30151134457776363 * fTemp53); + fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph55 = FAUSTFLOAT(fRec54[0]); + output27[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = double(input28[i]); + fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph56 = FAUSTFLOAT(fRec57[0]); + double fTemp56 = (0.30151134457776363 * fTemp55); + fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph57 = FAUSTFLOAT(fRec56[0]); + output28[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = double(input29[i]); + fRec59[0] = max((fRec59[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph58 = FAUSTFLOAT(fRec59[0]); + double fTemp58 = (0.30151134457776363 * fTemp57); + fRec58[0] = max((fRec58[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph59 = FAUSTFLOAT(fRec58[0]); + output29[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = double(input30[i]); + fRec61[0] = max((fRec61[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph60 = FAUSTFLOAT(fRec61[0]); + double fTemp60 = (0.30151134457776363 * fTemp59); + fRec60[0] = max((fRec60[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph61 = FAUSTFLOAT(fRec60[0]); + output30[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = double(input31[i]); + fRec63[0] = max((fRec63[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph62 = FAUSTFLOAT(fRec63[0]); + double fTemp62 = (0.30151134457776363 * fTemp61); + fRec62[0] = max((fRec62[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph63 = FAUSTFLOAT(fRec62[0]); + output31[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = double(input32[i]); + fRec65[0] = max((fRec65[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph64 = FAUSTFLOAT(fRec65[0]); + double fTemp64 = (0.30151134457776363 * fTemp63); + fRec64[0] = max((fRec64[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph65 = FAUSTFLOAT(fRec64[0]); + output32[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = double(input33[i]); + fRec67[0] = max((fRec67[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph66 = FAUSTFLOAT(fRec67[0]); + double fTemp66 = (0.30151134457776363 * fTemp65); + fRec66[0] = max((fRec66[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph67 = FAUSTFLOAT(fRec66[0]); + output33[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = double(input34[i]); + fRec69[0] = max((fRec69[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); + fVbargraph68 = FAUSTFLOAT(fRec69[0]); + double fTemp68 = (0.30151134457776363 * fTemp67); + fRec68[0] = max((fRec68[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph69 = FAUSTFLOAT(fRec68[0]); + output34[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = double(input35[i]); + fRec71[0] = max((fRec71[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph70 = FAUSTFLOAT(fRec71[0]); + double fTemp70 = (0.30151134457776363 * fTemp69); + fRec70[0] = max((fRec70[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph71 = FAUSTFLOAT(fRec70[0]); + output35[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = double(input36[i]); + fRec73[0] = max((fRec73[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph72 = FAUSTFLOAT(fRec73[0]); + double fTemp72 = (0.27735009811261457 * fTemp71); + fRec72[0] = max((fRec72[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph73 = FAUSTFLOAT(fRec72[0]); + output36[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = double(input37[i]); + fRec75[0] = max((fRec75[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph74 = FAUSTFLOAT(fRec75[0]); + double fTemp74 = (0.27735009811261457 * fTemp73); + fRec74[0] = max((fRec74[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + fVbargraph75 = FAUSTFLOAT(fRec74[0]); + output37[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = double(input38[i]); + fRec77[0] = max((fRec77[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp75)))))); + fVbargraph76 = FAUSTFLOAT(fRec77[0]); + double fTemp76 = (0.27735009811261457 * fTemp75); + fRec76[0] = max((fRec76[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph77 = FAUSTFLOAT(fRec76[0]); + output38[i] = FAUSTFLOAT(fTemp76); + double fTemp77 = double(input39[i]); + fRec79[0] = max((fRec79[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph78 = FAUSTFLOAT(fRec79[0]); + double fTemp78 = (0.27735009811261457 * fTemp77); + fRec78[0] = max((fRec78[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph79 = FAUSTFLOAT(fRec78[0]); + output39[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = double(input40[i]); + fRec81[0] = max((fRec81[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + fVbargraph80 = FAUSTFLOAT(fRec81[0]); + double fTemp80 = (0.27735009811261457 * fTemp79); + fRec80[0] = max((fRec80[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + fVbargraph81 = FAUSTFLOAT(fRec80[0]); + output40[i] = FAUSTFLOAT(fTemp80); + double fTemp81 = double(input41[i]); + fRec83[0] = max((fRec83[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + fVbargraph82 = FAUSTFLOAT(fRec83[0]); + double fTemp82 = (0.27735009811261457 * fTemp81); + fRec82[0] = max((fRec82[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph83 = FAUSTFLOAT(fRec82[0]); + output41[i] = FAUSTFLOAT(fTemp82); + double fTemp83 = double(input42[i]); + fRec85[0] = max((fRec85[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph84 = FAUSTFLOAT(fRec85[0]); + double fTemp84 = (0.27735009811261457 * fTemp83); + fRec84[0] = max((fRec84[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph85 = FAUSTFLOAT(fRec84[0]); + output42[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = double(input43[i]); + fRec87[0] = max((fRec87[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + fVbargraph86 = FAUSTFLOAT(fRec87[0]); + double fTemp86 = (0.27735009811261457 * fTemp85); + fRec86[0] = max((fRec86[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); + fVbargraph87 = FAUSTFLOAT(fRec86[0]); + output43[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = double(input44[i]); + fRec89[0] = max((fRec89[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph88 = FAUSTFLOAT(fRec89[0]); + double fTemp88 = (0.27735009811261457 * fTemp87); + fRec88[0] = max((fRec88[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp88)))))); + fVbargraph89 = FAUSTFLOAT(fRec88[0]); + output44[i] = FAUSTFLOAT(fTemp88); + double fTemp89 = double(input45[i]); + fRec91[0] = max((fRec91[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + fVbargraph90 = FAUSTFLOAT(fRec91[0]); + double fTemp90 = (0.27735009811261457 * fTemp89); + fRec90[0] = max((fRec90[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph91 = FAUSTFLOAT(fRec90[0]); + output45[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = double(input46[i]); + fRec93[0] = max((fRec93[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph92 = FAUSTFLOAT(fRec93[0]); + double fTemp92 = (0.27735009811261457 * fTemp91); + fRec92[0] = max((fRec92[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph93 = FAUSTFLOAT(fRec92[0]); + output46[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = double(input47[i]); + fRec95[0] = max((fRec95[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph94 = FAUSTFLOAT(fRec95[0]); + double fTemp94 = (0.27735009811261457 * fTemp93); + fRec94[0] = max((fRec94[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph95 = FAUSTFLOAT(fRec94[0]); + output47[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = double(input48[i]); + fRec97[0] = max((fRec97[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph96 = FAUSTFLOAT(fRec97[0]); + double fTemp96 = (0.27735009811261457 * fTemp95); + fRec96[0] = max((fRec96[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph97 = FAUSTFLOAT(fRec96[0]); + output48[i] = FAUSTFLOAT(fTemp96); + double fTemp97 = double(input49[i]); + fRec99[0] = max((fRec99[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + fVbargraph98 = FAUSTFLOAT(fRec99[0]); + double fTemp98 = (0.2581988897471611 * fTemp97); + fRec98[0] = max((fRec98[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + fVbargraph99 = FAUSTFLOAT(fRec98[0]); + output49[i] = FAUSTFLOAT(fTemp98); + double fTemp99 = double(input50[i]); + fRec101[0] = max((fRec101[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); + fVbargraph100 = FAUSTFLOAT(fRec101[0]); + double fTemp100 = (0.2581988897471611 * fTemp99); + fRec100[0] = max((fRec100[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + fVbargraph101 = FAUSTFLOAT(fRec100[0]); + output50[i] = FAUSTFLOAT(fTemp100); + double fTemp101 = double(input51[i]); + fRec103[0] = max((fRec103[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); + fVbargraph102 = FAUSTFLOAT(fRec103[0]); + double fTemp102 = (0.2581988897471611 * fTemp101); + fRec102[0] = max((fRec102[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); + fVbargraph103 = FAUSTFLOAT(fRec102[0]); + output51[i] = FAUSTFLOAT(fTemp102); + double fTemp103 = double(input52[i]); + fRec105[0] = max((fRec105[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + fVbargraph104 = FAUSTFLOAT(fRec105[0]); + double fTemp104 = (0.2581988897471611 * fTemp103); + fRec104[0] = max((fRec104[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); + fVbargraph105 = FAUSTFLOAT(fRec104[0]); + output52[i] = FAUSTFLOAT(fTemp104); + double fTemp105 = double(input53[i]); + fRec107[0] = max((fRec107[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); + fVbargraph106 = FAUSTFLOAT(fRec107[0]); + double fTemp106 = (0.2581988897471611 * fTemp105); + fRec106[0] = max((fRec106[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); + fVbargraph107 = FAUSTFLOAT(fRec106[0]); + output53[i] = FAUSTFLOAT(fTemp106); + double fTemp107 = double(input54[i]); + fRec109[0] = max((fRec109[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); + fVbargraph108 = FAUSTFLOAT(fRec109[0]); + double fTemp108 = (0.2581988897471611 * fTemp107); + fRec108[0] = max((fRec108[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); + fVbargraph109 = FAUSTFLOAT(fRec108[0]); + output54[i] = FAUSTFLOAT(fTemp108); + double fTemp109 = double(input55[i]); + fRec111[0] = max((fRec111[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp109)))))); + fVbargraph110 = FAUSTFLOAT(fRec111[0]); + double fTemp110 = (0.2581988897471611 * fTemp109); + fRec110[0] = max((fRec110[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp110)))))); + fVbargraph111 = FAUSTFLOAT(fRec110[0]); + output55[i] = FAUSTFLOAT(fTemp110); + double fTemp111 = double(input56[i]); + fRec113[0] = max((fRec113[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp111)))))); + fVbargraph112 = FAUSTFLOAT(fRec113[0]); + double fTemp112 = (0.2581988897471611 * fTemp111); + fRec112[0] = max((fRec112[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp112)))))); + fVbargraph113 = FAUSTFLOAT(fRec112[0]); + output56[i] = FAUSTFLOAT(fTemp112); + double fTemp113 = double(input57[i]); + fRec115[0] = max((fRec115[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp113)))))); + fVbargraph114 = FAUSTFLOAT(fRec115[0]); + double fTemp114 = (0.2581988897471611 * fTemp113); + fRec114[0] = max((fRec114[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp114)))))); + fVbargraph115 = FAUSTFLOAT(fRec114[0]); + output57[i] = FAUSTFLOAT(fTemp114); + double fTemp115 = double(input58[i]); + fRec117[0] = max((fRec117[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp115)))))); + fVbargraph116 = FAUSTFLOAT(fRec117[0]); + double fTemp116 = (0.2581988897471611 * fTemp115); + fRec116[0] = max((fRec116[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp116)))))); + fVbargraph117 = FAUSTFLOAT(fRec116[0]); + output58[i] = FAUSTFLOAT(fTemp116); + double fTemp117 = double(input59[i]); + fRec119[0] = max((fRec119[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp117)))))); + fVbargraph118 = FAUSTFLOAT(fRec119[0]); + double fTemp118 = (0.2581988897471611 * fTemp117); + fRec118[0] = max((fRec118[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp118)))))); + fVbargraph119 = FAUSTFLOAT(fRec118[0]); + output59[i] = FAUSTFLOAT(fTemp118); + double fTemp119 = double(input60[i]); + fRec121[0] = max((fRec121[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp119)))))); + fVbargraph120 = FAUSTFLOAT(fRec121[0]); + double fTemp120 = (0.2581988897471611 * fTemp119); + fRec120[0] = max((fRec120[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp120)))))); + fVbargraph121 = FAUSTFLOAT(fRec120[0]); + output60[i] = FAUSTFLOAT(fTemp120); + double fTemp121 = double(input61[i]); + fRec123[0] = max((fRec123[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp121)))))); + fVbargraph122 = FAUSTFLOAT(fRec123[0]); + double fTemp122 = (0.2581988897471611 * fTemp121); + fRec122[0] = max((fRec122[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp122)))))); + fVbargraph123 = FAUSTFLOAT(fRec122[0]); + output61[i] = FAUSTFLOAT(fTemp122); + double fTemp123 = double(input62[i]); + fRec125[0] = max((fRec125[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp123)))))); + fVbargraph124 = FAUSTFLOAT(fRec125[0]); + double fTemp124 = (0.2581988897471611 * fTemp123); + fRec124[0] = max((fRec124[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp124)))))); + fVbargraph125 = FAUSTFLOAT(fRec124[0]); + output62[i] = FAUSTFLOAT(fTemp124); + double fTemp125 = double(input63[i]); + fRec127[0] = max((fRec127[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp125)))))); + fVbargraph126 = FAUSTFLOAT(fRec127[0]); + double fTemp126 = (0.2581988897471611 * fTemp125); + fRec126[0] = max((fRec126[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); + fVbargraph127 = FAUSTFLOAT(fRec126[0]); + output63[i] = FAUSTFLOAT(fTemp126); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec25[1] = fRec25[0]; + fRec24[1] = fRec24[0]; + fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; + fRec33[1] = fRec33[0]; + fRec32[1] = fRec32[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fRec37[1] = fRec37[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; + fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec43[1] = fRec43[0]; + fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec49[1] = fRec49[0]; + fRec48[1] = fRec48[0]; + fRec51[1] = fRec51[0]; + fRec50[1] = fRec50[0]; + fRec53[1] = fRec53[0]; + fRec52[1] = fRec52[0]; + fRec55[1] = fRec55[0]; + fRec54[1] = fRec54[0]; + fRec57[1] = fRec57[0]; + fRec56[1] = fRec56[0]; + fRec59[1] = fRec59[0]; + fRec58[1] = fRec58[0]; + fRec61[1] = fRec61[0]; + fRec60[1] = fRec60[0]; + fRec63[1] = fRec63[0]; + fRec62[1] = fRec62[0]; + fRec65[1] = fRec65[0]; + fRec64[1] = fRec64[0]; + fRec67[1] = fRec67[0]; + fRec66[1] = fRec66[0]; + fRec69[1] = fRec69[0]; + fRec68[1] = fRec68[0]; + fRec71[1] = fRec71[0]; + fRec70[1] = fRec70[0]; + fRec73[1] = fRec73[0]; + fRec72[1] = fRec72[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; + fRec77[1] = fRec77[0]; + fRec76[1] = fRec76[0]; + fRec79[1] = fRec79[0]; + fRec78[1] = fRec78[0]; + fRec81[1] = fRec81[0]; + fRec80[1] = fRec80[0]; + fRec83[1] = fRec83[0]; + fRec82[1] = fRec82[0]; + fRec85[1] = fRec85[0]; + fRec84[1] = fRec84[0]; + fRec87[1] = fRec87[0]; + fRec86[1] = fRec86[0]; + fRec89[1] = fRec89[0]; + fRec88[1] = fRec88[0]; + fRec91[1] = fRec91[0]; + fRec90[1] = fRec90[0]; + fRec93[1] = fRec93[0]; + fRec92[1] = fRec92[0]; + fRec95[1] = fRec95[0]; + fRec94[1] = fRec94[0]; + fRec97[1] = fRec97[0]; + fRec96[1] = fRec96[0]; + fRec99[1] = fRec99[0]; + fRec98[1] = fRec98[0]; + fRec101[1] = fRec101[0]; + fRec100[1] = fRec100[0]; + fRec103[1] = fRec103[0]; + fRec102[1] = fRec102[0]; + fRec105[1] = fRec105[0]; + fRec104[1] = fRec104[0]; + fRec107[1] = fRec107[0]; + fRec106[1] = fRec106[0]; + fRec109[1] = fRec109[0]; + fRec108[1] = fRec108[0]; + fRec111[1] = fRec111[0]; + fRec110[1] = fRec110[0]; + fRec113[1] = fRec113[0]; + fRec112[1] = fRec112[0]; + fRec115[1] = fRec115[0]; + fRec114[1] = fRec114[0]; + fRec117[1] = fRec117[0]; + fRec116[1] = fRec116[0]; + fRec119[1] = fRec119[0]; + fRec118[1] = fRec118[0]; + fRec121[1] = fRec121[0]; + fRec120[1] = fRec120[0]; + fRec123[1] = fRec123[0]; + fRec122[1] = fRec122[0]; + fRec125[1] = fRec125[0]; + fRec124[1] = fRec124[0]; + fRec127[1] = fRec127[0]; + fRec126[1] = fRec126[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d8.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d8.cpp new file mode 100644 index 0000000000..c692d25f29 --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d8.cpp @@ -0,0 +1,4282 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnN3d2AcnSn3d8" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec18[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec20[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; + FAUSTFLOAT fVbargraph24; + double fRec24[2]; + FAUSTFLOAT fVbargraph25; + double fRec27[2]; + FAUSTFLOAT fVbargraph26; + double fRec26[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; + FAUSTFLOAT fVbargraph31; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fRec32[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec34[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec36[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec38[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec40[2]; + FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec42[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec44[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec46[2]; + FAUSTFLOAT fVbargraph47; + double fRec49[2]; + FAUSTFLOAT fVbargraph48; + double fRec48[2]; + FAUSTFLOAT fVbargraph49; + double fRec51[2]; + FAUSTFLOAT fVbargraph50; + double fRec50[2]; + FAUSTFLOAT fVbargraph51; + double fRec53[2]; + FAUSTFLOAT fVbargraph52; + double fRec52[2]; + FAUSTFLOAT fVbargraph53; + double fRec55[2]; + FAUSTFLOAT fVbargraph54; + double fRec54[2]; + FAUSTFLOAT fVbargraph55; + double fRec57[2]; + FAUSTFLOAT fVbargraph56; + double fRec56[2]; + FAUSTFLOAT fVbargraph57; + double fRec59[2]; + FAUSTFLOAT fVbargraph58; + double fRec58[2]; + FAUSTFLOAT fVbargraph59; + double fRec61[2]; + FAUSTFLOAT fVbargraph60; + double fRec60[2]; + FAUSTFLOAT fVbargraph61; + double fRec63[2]; + FAUSTFLOAT fVbargraph62; + double fRec62[2]; + FAUSTFLOAT fVbargraph63; + double fRec65[2]; + FAUSTFLOAT fVbargraph64; + double fRec64[2]; + FAUSTFLOAT fVbargraph65; + double fRec67[2]; + FAUSTFLOAT fVbargraph66; + double fRec66[2]; + FAUSTFLOAT fVbargraph67; + double fRec69[2]; + FAUSTFLOAT fVbargraph68; + double fRec68[2]; + FAUSTFLOAT fVbargraph69; + double fRec71[2]; + FAUSTFLOAT fVbargraph70; + double fRec70[2]; + FAUSTFLOAT fVbargraph71; + double fRec73[2]; + FAUSTFLOAT fVbargraph72; + double fRec72[2]; + FAUSTFLOAT fVbargraph73; + double fRec75[2]; + FAUSTFLOAT fVbargraph74; + double fRec74[2]; + FAUSTFLOAT fVbargraph75; + double fRec77[2]; + FAUSTFLOAT fVbargraph76; + double fRec76[2]; + FAUSTFLOAT fVbargraph77; + double fRec79[2]; + FAUSTFLOAT fVbargraph78; + double fRec78[2]; + FAUSTFLOAT fVbargraph79; + double fRec81[2]; + FAUSTFLOAT fVbargraph80; + double fRec80[2]; + FAUSTFLOAT fVbargraph81; + double fRec83[2]; + FAUSTFLOAT fVbargraph82; + double fRec82[2]; + FAUSTFLOAT fVbargraph83; + double fRec85[2]; + FAUSTFLOAT fVbargraph84; + double fRec84[2]; + FAUSTFLOAT fVbargraph85; + double fRec87[2]; + FAUSTFLOAT fVbargraph86; + double fRec86[2]; + FAUSTFLOAT fVbargraph87; + double fRec89[2]; + FAUSTFLOAT fVbargraph88; + double fRec88[2]; + FAUSTFLOAT fVbargraph89; + double fRec91[2]; + FAUSTFLOAT fVbargraph90; + double fRec90[2]; + FAUSTFLOAT fVbargraph91; + double fRec93[2]; + FAUSTFLOAT fVbargraph92; + double fRec92[2]; + FAUSTFLOAT fVbargraph93; + double fRec95[2]; + FAUSTFLOAT fVbargraph94; + double fRec94[2]; + FAUSTFLOAT fVbargraph95; + double fRec97[2]; + FAUSTFLOAT fVbargraph96; + double fRec96[2]; + FAUSTFLOAT fVbargraph97; + double fRec99[2]; + FAUSTFLOAT fVbargraph98; + double fRec98[2]; + FAUSTFLOAT fVbargraph99; + double fRec101[2]; + FAUSTFLOAT fVbargraph100; + double fRec100[2]; + FAUSTFLOAT fVbargraph101; + double fRec103[2]; + FAUSTFLOAT fVbargraph102; + double fRec102[2]; + FAUSTFLOAT fVbargraph103; + double fRec105[2]; + FAUSTFLOAT fVbargraph104; + double fRec104[2]; + FAUSTFLOAT fVbargraph105; + double fRec107[2]; + FAUSTFLOAT fVbargraph106; + double fRec106[2]; + FAUSTFLOAT fVbargraph107; + double fRec109[2]; + FAUSTFLOAT fVbargraph108; + double fRec108[2]; + FAUSTFLOAT fVbargraph109; + double fRec111[2]; + FAUSTFLOAT fVbargraph110; + double fRec110[2]; + FAUSTFLOAT fVbargraph111; + double fRec113[2]; + FAUSTFLOAT fVbargraph112; + double fRec112[2]; + FAUSTFLOAT fVbargraph113; + double fRec115[2]; + FAUSTFLOAT fVbargraph114; + double fRec114[2]; + FAUSTFLOAT fVbargraph115; + double fRec117[2]; + FAUSTFLOAT fVbargraph116; + double fRec116[2]; + FAUSTFLOAT fVbargraph117; + double fRec119[2]; + FAUSTFLOAT fVbargraph118; + double fRec118[2]; + FAUSTFLOAT fVbargraph119; + double fRec121[2]; + FAUSTFLOAT fVbargraph120; + double fRec120[2]; + FAUSTFLOAT fVbargraph121; + double fRec123[2]; + FAUSTFLOAT fVbargraph122; + double fRec122[2]; + FAUSTFLOAT fVbargraph123; + double fRec125[2]; + FAUSTFLOAT fVbargraph124; + double fRec124[2]; + FAUSTFLOAT fVbargraph125; + double fRec127[2]; + FAUSTFLOAT fVbargraph126; + double fRec126[2]; + FAUSTFLOAT fVbargraph127; + double fRec129[2]; + FAUSTFLOAT fVbargraph128; + double fRec128[2]; + FAUSTFLOAT fVbargraph129; + double fRec131[2]; + FAUSTFLOAT fVbargraph130; + double fRec130[2]; + FAUSTFLOAT fVbargraph131; + double fRec133[2]; + FAUSTFLOAT fVbargraph132; + double fRec132[2]; + FAUSTFLOAT fVbargraph133; + double fRec135[2]; + FAUSTFLOAT fVbargraph134; + double fRec134[2]; + FAUSTFLOAT fVbargraph135; + double fRec137[2]; + FAUSTFLOAT fVbargraph136; + double fRec136[2]; + FAUSTFLOAT fVbargraph137; + double fRec139[2]; + FAUSTFLOAT fVbargraph138; + double fRec138[2]; + FAUSTFLOAT fVbargraph139; + double fRec141[2]; + FAUSTFLOAT fVbargraph140; + double fRec140[2]; + FAUSTFLOAT fVbargraph141; + double fRec143[2]; + FAUSTFLOAT fVbargraph142; + double fRec142[2]; + FAUSTFLOAT fVbargraph143; + double fRec145[2]; + FAUSTFLOAT fVbargraph144; + double fRec144[2]; + FAUSTFLOAT fVbargraph145; + double fRec147[2]; + FAUSTFLOAT fVbargraph146; + double fRec146[2]; + FAUSTFLOAT fVbargraph147; + double fRec149[2]; + FAUSTFLOAT fVbargraph148; + double fRec148[2]; + FAUSTFLOAT fVbargraph149; + double fRec151[2]; + FAUSTFLOAT fVbargraph150; + double fRec150[2]; + FAUSTFLOAT fVbargraph151; + double fRec153[2]; + FAUSTFLOAT fVbargraph152; + double fRec152[2]; + FAUSTFLOAT fVbargraph153; + double fRec155[2]; + FAUSTFLOAT fVbargraph154; + double fRec154[2]; + FAUSTFLOAT fVbargraph155; + double fRec157[2]; + FAUSTFLOAT fVbargraph156; + double fRec156[2]; + FAUSTFLOAT fVbargraph157; + double fRec159[2]; + FAUSTFLOAT fVbargraph158; + double fRec158[2]; + FAUSTFLOAT fVbargraph159; + double fRec161[2]; + FAUSTFLOAT fVbargraph160; + double fRec160[2]; + FAUSTFLOAT fVbargraph161; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d8"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 81; + + } + virtual int getNumOutputs() { + return 81; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec35[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec37[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec41[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec43[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec42[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec45[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec44[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec47[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec46[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec51[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec50[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec53[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec52[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec55[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec54[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec56[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec59[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec58[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec61[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec60[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec63[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec62[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec65[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec64[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec67[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec66[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec69[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec68[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec71[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec70[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec73[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec72[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec75[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec74[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec77[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec76[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec79[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec78[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec81[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec80[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec83[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec82[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec85[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec84[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec87[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec86[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec89[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec88[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec91[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec90[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec93[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec92[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec95[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec94[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec97[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec96[l97] = 0.0; + + } + for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + fRec99[l98] = 0.0; + + } + for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + fRec98[l99] = 0.0; + + } + for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + fRec101[l100] = 0.0; + + } + for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + fRec100[l101] = 0.0; + + } + for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + fRec103[l102] = 0.0; + + } + for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + fRec102[l103] = 0.0; + + } + for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + fRec105[l104] = 0.0; + + } + for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + fRec104[l105] = 0.0; + + } + for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + fRec107[l106] = 0.0; + + } + for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + fRec106[l107] = 0.0; + + } + for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + fRec109[l108] = 0.0; + + } + for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + fRec108[l109] = 0.0; + + } + for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { + fRec111[l110] = 0.0; + + } + for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + fRec110[l111] = 0.0; + + } + for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + fRec113[l112] = 0.0; + + } + for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + fRec112[l113] = 0.0; + + } + for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + fRec115[l114] = 0.0; + + } + for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { + fRec114[l115] = 0.0; + + } + for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + fRec117[l116] = 0.0; + + } + for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + fRec116[l117] = 0.0; + + } + for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + fRec119[l118] = 0.0; + + } + for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + fRec118[l119] = 0.0; + + } + for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { + fRec121[l120] = 0.0; + + } + for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { + fRec120[l121] = 0.0; + + } + for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { + fRec123[l122] = 0.0; + + } + for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { + fRec122[l123] = 0.0; + + } + for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { + fRec125[l124] = 0.0; + + } + for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { + fRec124[l125] = 0.0; + + } + for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { + fRec127[l126] = 0.0; + + } + for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { + fRec126[l127] = 0.0; + + } + for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { + fRec129[l128] = 0.0; + + } + for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { + fRec128[l129] = 0.0; + + } + for (int l130 = 0; (l130 < 2); l130 = (l130 + 1)) { + fRec131[l130] = 0.0; + + } + for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { + fRec130[l131] = 0.0; + + } + for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { + fRec133[l132] = 0.0; + + } + for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { + fRec132[l133] = 0.0; + + } + for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { + fRec135[l134] = 0.0; + + } + for (int l135 = 0; (l135 < 2); l135 = (l135 + 1)) { + fRec134[l135] = 0.0; + + } + for (int l136 = 0; (l136 < 2); l136 = (l136 + 1)) { + fRec137[l136] = 0.0; + + } + for (int l137 = 0; (l137 < 2); l137 = (l137 + 1)) { + fRec136[l137] = 0.0; + + } + for (int l138 = 0; (l138 < 2); l138 = (l138 + 1)) { + fRec139[l138] = 0.0; + + } + for (int l139 = 0; (l139 < 2); l139 = (l139 + 1)) { + fRec138[l139] = 0.0; + + } + for (int l140 = 0; (l140 < 2); l140 = (l140 + 1)) { + fRec141[l140] = 0.0; + + } + for (int l141 = 0; (l141 < 2); l141 = (l141 + 1)) { + fRec140[l141] = 0.0; + + } + for (int l142 = 0; (l142 < 2); l142 = (l142 + 1)) { + fRec143[l142] = 0.0; + + } + for (int l143 = 0; (l143 < 2); l143 = (l143 + 1)) { + fRec142[l143] = 0.0; + + } + for (int l144 = 0; (l144 < 2); l144 = (l144 + 1)) { + fRec145[l144] = 0.0; + + } + for (int l145 = 0; (l145 < 2); l145 = (l145 + 1)) { + fRec144[l145] = 0.0; + + } + for (int l146 = 0; (l146 < 2); l146 = (l146 + 1)) { + fRec147[l146] = 0.0; + + } + for (int l147 = 0; (l147 < 2); l147 = (l147 + 1)) { + fRec146[l147] = 0.0; + + } + for (int l148 = 0; (l148 < 2); l148 = (l148 + 1)) { + fRec149[l148] = 0.0; + + } + for (int l149 = 0; (l149 < 2); l149 = (l149 + 1)) { + fRec148[l149] = 0.0; + + } + for (int l150 = 0; (l150 < 2); l150 = (l150 + 1)) { + fRec151[l150] = 0.0; + + } + for (int l151 = 0; (l151 < 2); l151 = (l151 + 1)) { + fRec150[l151] = 0.0; + + } + for (int l152 = 0; (l152 < 2); l152 = (l152 + 1)) { + fRec153[l152] = 0.0; + + } + for (int l153 = 0; (l153 < 2); l153 = (l153 + 1)) { + fRec152[l153] = 0.0; + + } + for (int l154 = 0; (l154 < 2); l154 = (l154 + 1)) { + fRec155[l154] = 0.0; + + } + for (int l155 = 0; (l155 < 2); l155 = (l155 + 1)) { + fRec154[l155] = 0.0; + + } + for (int l156 = 0; (l156 < 2); l156 = (l156 + 1)) { + fRec157[l156] = 0.0; + + } + for (int l157 = 0; (l157 < 2); l157 = (l157 + 1)) { + fRec156[l157] = 0.0; + + } + for (int l158 = 0; (l158 < 2); l158 = (l158 + 1)) { + fRec159[l158] = 0.0; + + } + for (int l159 = 0; (l159 < 2); l159 = (l159 + 1)) { + fRec158[l159] = 0.0; + + } + for (int l160 = 0; (l160 < 2); l160 = (l160 + 1)) { + fRec161[l160] = 0.0; + + } + for (int l161 = 0; (l161 < 2); l161 = (l161 + 1)) { + fRec160[l161] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d8"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37f93c0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38030b0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x380cfc0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3816fb0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3821330", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x382b400", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38355b0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x383f920", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3849e50", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3854710", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x385e9a0", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3868d10", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3873240", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x387d930", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38881e0", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3892c50", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x389da50", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38a7ea0", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38b23d0", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38bcac0", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38c7370", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38d1de0", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38dca10", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38e7800", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38f27b0", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38fdaf0", &fVbargraph50, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3908100", &fVbargraph52, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39127f0", &fVbargraph54, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x391d0a0", &fVbargraph56, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3927b10", &fVbargraph58, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3932740", &fVbargraph60, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x393d530", &fVbargraph62, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39484e0", &fVbargraph64, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3953650", &fVbargraph66, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x395e980", &fVbargraph68, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3969e70", &fVbargraph70, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39756f0", &fVbargraph72, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x397fec0", &fVbargraph74, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph76, "unit", "dB"); + ui_interface->addVerticalBargraph("0x398a770", &fVbargraph76, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph78, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39951e0", &fVbargraph78, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph80, "unit", "dB"); + ui_interface->addVerticalBargraph("0x399fe10", &fVbargraph80, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph82, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39aac00", &fVbargraph82, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph84, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39b5bb0", &fVbargraph84, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph86, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c0d20", &fVbargraph86, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph88, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39cc050", &fVbargraph88, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph90, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d7540", &fVbargraph90, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph92, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e2bf0", &fVbargraph92, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph94, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ee460", &fVbargraph94, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph96, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39f9e90", &fVbargraph96, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("7"); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph98, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a05c50", &fVbargraph98, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph100, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a105e0", &fVbargraph100, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("51"); + ui_interface->declare(&fVbargraph102, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a1b050", &fVbargraph102, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("52"); + ui_interface->declare(&fVbargraph104, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a25c80", &fVbargraph104, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("53"); + ui_interface->declare(&fVbargraph106, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a30a70", &fVbargraph106, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("54"); + ui_interface->declare(&fVbargraph108, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a3ba20", &fVbargraph108, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("55"); + ui_interface->declare(&fVbargraph110, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a46b90", &fVbargraph110, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("56"); + ui_interface->declare(&fVbargraph112, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a51ec0", &fVbargraph112, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("57"); + ui_interface->declare(&fVbargraph114, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a5d3b0", &fVbargraph114, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("58"); + ui_interface->declare(&fVbargraph116, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a68a60", &fVbargraph116, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("59"); + ui_interface->declare(&fVbargraph118, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a742d0", &fVbargraph118, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("60"); + ui_interface->declare(&fVbargraph120, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a7fd00", &fVbargraph120, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("61"); + ui_interface->declare(&fVbargraph122, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a8b8f0", &fVbargraph122, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("62"); + ui_interface->declare(&fVbargraph124, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a976a0", &fVbargraph124, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("63"); + ui_interface->declare(&fVbargraph126, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa3610", &fVbargraph126, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("8"); + ui_interface->openVerticalBox("64"); + ui_interface->declare(&fVbargraph128, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aaf910", &fVbargraph128, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("65"); + ui_interface->declare(&fVbargraph130, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aba460", &fVbargraph130, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("66"); + ui_interface->declare(&fVbargraph132, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ac5090", &fVbargraph132, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("67"); + ui_interface->declare(&fVbargraph134, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3acfe80", &fVbargraph134, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("68"); + ui_interface->declare(&fVbargraph136, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3adae30", &fVbargraph136, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("69"); + ui_interface->declare(&fVbargraph138, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ae5fb0", &fVbargraph138, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("70"); + ui_interface->declare(&fVbargraph140, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3af12e0", &fVbargraph140, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("71"); + ui_interface->declare(&fVbargraph142, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3afc7d0", &fVbargraph142, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("72"); + ui_interface->declare(&fVbargraph144, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b07e80", &fVbargraph144, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("73"); + ui_interface->declare(&fVbargraph146, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b136f0", &fVbargraph146, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("74"); + ui_interface->declare(&fVbargraph148, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b1f120", &fVbargraph148, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("75"); + ui_interface->declare(&fVbargraph150, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b2ad10", &fVbargraph150, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("76"); + ui_interface->declare(&fVbargraph152, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b36ac0", &fVbargraph152, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("77"); + ui_interface->declare(&fVbargraph154, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b42a30", &fVbargraph154, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("78"); + ui_interface->declare(&fVbargraph156, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b4eb60", &fVbargraph156, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("79"); + ui_interface->declare(&fVbargraph158, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b5ae50", &fVbargraph158, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("80"); + ui_interface->declare(&fVbargraph160, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b67310", &fVbargraph160, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37fd540", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3807620", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3811530", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x381b600", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3825980", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x382fa50", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3839ce0", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3844130", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x384e740", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3858e40", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38630d0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x386d520", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3877b30", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3882300", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x388cc90", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38977e0", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38a2260", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38ac6b0", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38b6cc0", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38c1490", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38cbe20", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38d6970", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38e1680", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38ec550", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38f75e0", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39023e0", &fVbargraph51, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x390c9f0", &fVbargraph53, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39171c0", &fVbargraph55, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3921b50", &fVbargraph57, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x392c6a0", &fVbargraph59, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39373b0", &fVbargraph61, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3942280", &fVbargraph63, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x394d310", &fVbargraph65, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3958560", &fVbargraph67, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3963970", &fVbargraph69, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x396ef40", &fVbargraph71, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x397a0c0", &fVbargraph73, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph75, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3984890", &fVbargraph75, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph77, "unit", "dB"); + ui_interface->addVerticalBargraph("0x398f220", &fVbargraph77, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph79, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3999d70", &fVbargraph79, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph81, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39a4a80", &fVbargraph81, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph83, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39af950", &fVbargraph83, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph85, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ba9e0", &fVbargraph85, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph87, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39c5c30", &fVbargraph87, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph89, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39d1040", &fVbargraph89, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph91, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39dc610", &fVbargraph91, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph93, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e7da0", &fVbargraph93, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph95, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39f36f0", &fVbargraph95, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph97, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ff200", &fVbargraph97, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("7"); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph99, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a0a700", &fVbargraph99, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph101, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a15090", &fVbargraph101, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("51"); + ui_interface->declare(&fVbargraph103, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a1fbe0", &fVbargraph103, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("52"); + ui_interface->declare(&fVbargraph105, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a2a8f0", &fVbargraph105, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("53"); + ui_interface->declare(&fVbargraph107, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a357c0", &fVbargraph107, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("54"); + ui_interface->declare(&fVbargraph109, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a40850", &fVbargraph109, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("55"); + ui_interface->declare(&fVbargraph111, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a4baa0", &fVbargraph111, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("56"); + ui_interface->declare(&fVbargraph113, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a56eb0", &fVbargraph113, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("57"); + ui_interface->declare(&fVbargraph115, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a62480", &fVbargraph115, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("58"); + ui_interface->declare(&fVbargraph117, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a6dc10", &fVbargraph117, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("59"); + ui_interface->declare(&fVbargraph119, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a79560", &fVbargraph119, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("60"); + ui_interface->declare(&fVbargraph121, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a85070", &fVbargraph121, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("61"); + ui_interface->declare(&fVbargraph123, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a90d40", &fVbargraph123, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("62"); + ui_interface->declare(&fVbargraph125, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a9cbd0", &fVbargraph125, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("63"); + ui_interface->declare(&fVbargraph127, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aa8c20", &fVbargraph127, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("8"); + ui_interface->openVerticalBox("64"); + ui_interface->declare(&fVbargraph129, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ab44a0", &fVbargraph129, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("65"); + ui_interface->declare(&fVbargraph131, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3abeff0", &fVbargraph131, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("66"); + ui_interface->declare(&fVbargraph133, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ac9d00", &fVbargraph133, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("67"); + ui_interface->declare(&fVbargraph135, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3ad4bd0", &fVbargraph135, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("68"); + ui_interface->declare(&fVbargraph137, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3adfc60", &fVbargraph137, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("69"); + ui_interface->declare(&fVbargraph139, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3aeaec0", &fVbargraph139, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("70"); + ui_interface->declare(&fVbargraph141, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3af62d0", &fVbargraph141, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("71"); + ui_interface->declare(&fVbargraph143, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b018a0", &fVbargraph143, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("72"); + ui_interface->declare(&fVbargraph145, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b0d030", &fVbargraph145, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("73"); + ui_interface->declare(&fVbargraph147, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b18980", &fVbargraph147, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("74"); + ui_interface->declare(&fVbargraph149, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b24490", &fVbargraph149, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("75"); + ui_interface->declare(&fVbargraph151, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b30160", &fVbargraph151, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("76"); + ui_interface->declare(&fVbargraph153, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b3bff0", &fVbargraph153, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("77"); + ui_interface->declare(&fVbargraph155, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b48040", &fVbargraph155, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("78"); + ui_interface->declare(&fVbargraph157, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b54250", &fVbargraph157, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("79"); + ui_interface->declare(&fVbargraph159, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b60620", &fVbargraph159, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("80"); + ui_interface->declare(&fVbargraph161, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b6cbc0", &fVbargraph161, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = double(input8[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp18 = (0.3779644730092272 * fTemp17); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input10[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp20 = (0.3779644730092272 * fTemp19); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp22 = (0.3779644730092272 * fTemp21); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp24 = (0.3779644730092272 * fTemp23); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input13[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp26 = (0.3779644730092272 * fTemp25); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = double(input14[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp28 = (0.3779644730092272 * fTemp27); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = double(input15[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + double fTemp32 = (0.33333333333333331 * fTemp31); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph33 = FAUSTFLOAT(fRec32[0]); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph34 = FAUSTFLOAT(fRec35[0]); + double fTemp34 = (0.33333333333333331 * fTemp33); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph35 = FAUSTFLOAT(fRec34[0]); + output17[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph36 = FAUSTFLOAT(fRec37[0]); + double fTemp36 = (0.33333333333333331 * fTemp35); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph37 = FAUSTFLOAT(fRec36[0]); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph38 = FAUSTFLOAT(fRec39[0]); + double fTemp38 = (0.33333333333333331 * fTemp37); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph39 = FAUSTFLOAT(fRec38[0]); + output19[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph40 = FAUSTFLOAT(fRec41[0]); + double fTemp40 = (0.33333333333333331 * fTemp39); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph41 = FAUSTFLOAT(fRec40[0]); + output20[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph42 = FAUSTFLOAT(fRec43[0]); + double fTemp42 = (0.33333333333333331 * fTemp41); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph43 = FAUSTFLOAT(fRec42[0]); + output21[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph44 = FAUSTFLOAT(fRec45[0]); + double fTemp44 = (0.33333333333333331 * fTemp43); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph45 = FAUSTFLOAT(fRec44[0]); + output22[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph46 = FAUSTFLOAT(fRec47[0]); + double fTemp46 = (0.33333333333333331 * fTemp45); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph47 = FAUSTFLOAT(fRec46[0]); + output23[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph48 = FAUSTFLOAT(fRec49[0]); + double fTemp48 = (0.33333333333333331 * fTemp47); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph49 = FAUSTFLOAT(fRec48[0]); + output24[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = double(input25[i]); + fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph50 = FAUSTFLOAT(fRec51[0]); + double fTemp50 = (0.30151134457776363 * fTemp49); + fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph51 = FAUSTFLOAT(fRec50[0]); + output25[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = double(input26[i]); + fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph52 = FAUSTFLOAT(fRec53[0]); + double fTemp52 = (0.30151134457776363 * fTemp51); + fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph53 = FAUSTFLOAT(fRec52[0]); + output26[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = double(input27[i]); + fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph54 = FAUSTFLOAT(fRec55[0]); + double fTemp54 = (0.30151134457776363 * fTemp53); + fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph55 = FAUSTFLOAT(fRec54[0]); + output27[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = double(input28[i]); + fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph56 = FAUSTFLOAT(fRec57[0]); + double fTemp56 = (0.30151134457776363 * fTemp55); + fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph57 = FAUSTFLOAT(fRec56[0]); + output28[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = double(input29[i]); + fRec59[0] = max((fRec59[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph58 = FAUSTFLOAT(fRec59[0]); + double fTemp58 = (0.30151134457776363 * fTemp57); + fRec58[0] = max((fRec58[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph59 = FAUSTFLOAT(fRec58[0]); + output29[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = double(input30[i]); + fRec61[0] = max((fRec61[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph60 = FAUSTFLOAT(fRec61[0]); + double fTemp60 = (0.30151134457776363 * fTemp59); + fRec60[0] = max((fRec60[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph61 = FAUSTFLOAT(fRec60[0]); + output30[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = double(input31[i]); + fRec63[0] = max((fRec63[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph62 = FAUSTFLOAT(fRec63[0]); + double fTemp62 = (0.30151134457776363 * fTemp61); + fRec62[0] = max((fRec62[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph63 = FAUSTFLOAT(fRec62[0]); + output31[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = double(input32[i]); + fRec65[0] = max((fRec65[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph64 = FAUSTFLOAT(fRec65[0]); + double fTemp64 = (0.30151134457776363 * fTemp63); + fRec64[0] = max((fRec64[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph65 = FAUSTFLOAT(fRec64[0]); + output32[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = double(input33[i]); + fRec67[0] = max((fRec67[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph66 = FAUSTFLOAT(fRec67[0]); + double fTemp66 = (0.30151134457776363 * fTemp65); + fRec66[0] = max((fRec66[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph67 = FAUSTFLOAT(fRec66[0]); + output33[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = double(input34[i]); + fRec69[0] = max((fRec69[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); + fVbargraph68 = FAUSTFLOAT(fRec69[0]); + double fTemp68 = (0.30151134457776363 * fTemp67); + fRec68[0] = max((fRec68[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph69 = FAUSTFLOAT(fRec68[0]); + output34[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = double(input35[i]); + fRec71[0] = max((fRec71[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph70 = FAUSTFLOAT(fRec71[0]); + double fTemp70 = (0.30151134457776363 * fTemp69); + fRec70[0] = max((fRec70[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph71 = FAUSTFLOAT(fRec70[0]); + output35[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = double(input36[i]); + fRec73[0] = max((fRec73[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph72 = FAUSTFLOAT(fRec73[0]); + double fTemp72 = (0.27735009811261457 * fTemp71); + fRec72[0] = max((fRec72[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph73 = FAUSTFLOAT(fRec72[0]); + output36[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = double(input37[i]); + fRec75[0] = max((fRec75[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph74 = FAUSTFLOAT(fRec75[0]); + double fTemp74 = (0.27735009811261457 * fTemp73); + fRec74[0] = max((fRec74[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + fVbargraph75 = FAUSTFLOAT(fRec74[0]); + output37[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = double(input38[i]); + fRec77[0] = max((fRec77[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp75)))))); + fVbargraph76 = FAUSTFLOAT(fRec77[0]); + double fTemp76 = (0.27735009811261457 * fTemp75); + fRec76[0] = max((fRec76[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph77 = FAUSTFLOAT(fRec76[0]); + output38[i] = FAUSTFLOAT(fTemp76); + double fTemp77 = double(input39[i]); + fRec79[0] = max((fRec79[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph78 = FAUSTFLOAT(fRec79[0]); + double fTemp78 = (0.27735009811261457 * fTemp77); + fRec78[0] = max((fRec78[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph79 = FAUSTFLOAT(fRec78[0]); + output39[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = double(input40[i]); + fRec81[0] = max((fRec81[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + fVbargraph80 = FAUSTFLOAT(fRec81[0]); + double fTemp80 = (0.27735009811261457 * fTemp79); + fRec80[0] = max((fRec80[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + fVbargraph81 = FAUSTFLOAT(fRec80[0]); + output40[i] = FAUSTFLOAT(fTemp80); + double fTemp81 = double(input41[i]); + fRec83[0] = max((fRec83[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + fVbargraph82 = FAUSTFLOAT(fRec83[0]); + double fTemp82 = (0.27735009811261457 * fTemp81); + fRec82[0] = max((fRec82[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph83 = FAUSTFLOAT(fRec82[0]); + output41[i] = FAUSTFLOAT(fTemp82); + double fTemp83 = double(input42[i]); + fRec85[0] = max((fRec85[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph84 = FAUSTFLOAT(fRec85[0]); + double fTemp84 = (0.27735009811261457 * fTemp83); + fRec84[0] = max((fRec84[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph85 = FAUSTFLOAT(fRec84[0]); + output42[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = double(input43[i]); + fRec87[0] = max((fRec87[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + fVbargraph86 = FAUSTFLOAT(fRec87[0]); + double fTemp86 = (0.27735009811261457 * fTemp85); + fRec86[0] = max((fRec86[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); + fVbargraph87 = FAUSTFLOAT(fRec86[0]); + output43[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = double(input44[i]); + fRec89[0] = max((fRec89[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph88 = FAUSTFLOAT(fRec89[0]); + double fTemp88 = (0.27735009811261457 * fTemp87); + fRec88[0] = max((fRec88[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp88)))))); + fVbargraph89 = FAUSTFLOAT(fRec88[0]); + output44[i] = FAUSTFLOAT(fTemp88); + double fTemp89 = double(input45[i]); + fRec91[0] = max((fRec91[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + fVbargraph90 = FAUSTFLOAT(fRec91[0]); + double fTemp90 = (0.27735009811261457 * fTemp89); + fRec90[0] = max((fRec90[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph91 = FAUSTFLOAT(fRec90[0]); + output45[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = double(input46[i]); + fRec93[0] = max((fRec93[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph92 = FAUSTFLOAT(fRec93[0]); + double fTemp92 = (0.27735009811261457 * fTemp91); + fRec92[0] = max((fRec92[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph93 = FAUSTFLOAT(fRec92[0]); + output46[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = double(input47[i]); + fRec95[0] = max((fRec95[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph94 = FAUSTFLOAT(fRec95[0]); + double fTemp94 = (0.27735009811261457 * fTemp93); + fRec94[0] = max((fRec94[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph95 = FAUSTFLOAT(fRec94[0]); + output47[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = double(input48[i]); + fRec97[0] = max((fRec97[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph96 = FAUSTFLOAT(fRec97[0]); + double fTemp96 = (0.27735009811261457 * fTemp95); + fRec96[0] = max((fRec96[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph97 = FAUSTFLOAT(fRec96[0]); + output48[i] = FAUSTFLOAT(fTemp96); + double fTemp97 = double(input49[i]); + fRec99[0] = max((fRec99[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + fVbargraph98 = FAUSTFLOAT(fRec99[0]); + double fTemp98 = (0.2581988897471611 * fTemp97); + fRec98[0] = max((fRec98[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + fVbargraph99 = FAUSTFLOAT(fRec98[0]); + output49[i] = FAUSTFLOAT(fTemp98); + double fTemp99 = double(input50[i]); + fRec101[0] = max((fRec101[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); + fVbargraph100 = FAUSTFLOAT(fRec101[0]); + double fTemp100 = (0.2581988897471611 * fTemp99); + fRec100[0] = max((fRec100[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + fVbargraph101 = FAUSTFLOAT(fRec100[0]); + output50[i] = FAUSTFLOAT(fTemp100); + double fTemp101 = double(input51[i]); + fRec103[0] = max((fRec103[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); + fVbargraph102 = FAUSTFLOAT(fRec103[0]); + double fTemp102 = (0.2581988897471611 * fTemp101); + fRec102[0] = max((fRec102[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); + fVbargraph103 = FAUSTFLOAT(fRec102[0]); + output51[i] = FAUSTFLOAT(fTemp102); + double fTemp103 = double(input52[i]); + fRec105[0] = max((fRec105[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + fVbargraph104 = FAUSTFLOAT(fRec105[0]); + double fTemp104 = (0.2581988897471611 * fTemp103); + fRec104[0] = max((fRec104[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); + fVbargraph105 = FAUSTFLOAT(fRec104[0]); + output52[i] = FAUSTFLOAT(fTemp104); + double fTemp105 = double(input53[i]); + fRec107[0] = max((fRec107[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); + fVbargraph106 = FAUSTFLOAT(fRec107[0]); + double fTemp106 = (0.2581988897471611 * fTemp105); + fRec106[0] = max((fRec106[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); + fVbargraph107 = FAUSTFLOAT(fRec106[0]); + output53[i] = FAUSTFLOAT(fTemp106); + double fTemp107 = double(input54[i]); + fRec109[0] = max((fRec109[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); + fVbargraph108 = FAUSTFLOAT(fRec109[0]); + double fTemp108 = (0.2581988897471611 * fTemp107); + fRec108[0] = max((fRec108[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); + fVbargraph109 = FAUSTFLOAT(fRec108[0]); + output54[i] = FAUSTFLOAT(fTemp108); + double fTemp109 = double(input55[i]); + fRec111[0] = max((fRec111[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp109)))))); + fVbargraph110 = FAUSTFLOAT(fRec111[0]); + double fTemp110 = (0.2581988897471611 * fTemp109); + fRec110[0] = max((fRec110[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp110)))))); + fVbargraph111 = FAUSTFLOAT(fRec110[0]); + output55[i] = FAUSTFLOAT(fTemp110); + double fTemp111 = double(input56[i]); + fRec113[0] = max((fRec113[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp111)))))); + fVbargraph112 = FAUSTFLOAT(fRec113[0]); + double fTemp112 = (0.2581988897471611 * fTemp111); + fRec112[0] = max((fRec112[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp112)))))); + fVbargraph113 = FAUSTFLOAT(fRec112[0]); + output56[i] = FAUSTFLOAT(fTemp112); + double fTemp113 = double(input57[i]); + fRec115[0] = max((fRec115[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp113)))))); + fVbargraph114 = FAUSTFLOAT(fRec115[0]); + double fTemp114 = (0.2581988897471611 * fTemp113); + fRec114[0] = max((fRec114[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp114)))))); + fVbargraph115 = FAUSTFLOAT(fRec114[0]); + output57[i] = FAUSTFLOAT(fTemp114); + double fTemp115 = double(input58[i]); + fRec117[0] = max((fRec117[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp115)))))); + fVbargraph116 = FAUSTFLOAT(fRec117[0]); + double fTemp116 = (0.2581988897471611 * fTemp115); + fRec116[0] = max((fRec116[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp116)))))); + fVbargraph117 = FAUSTFLOAT(fRec116[0]); + output58[i] = FAUSTFLOAT(fTemp116); + double fTemp117 = double(input59[i]); + fRec119[0] = max((fRec119[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp117)))))); + fVbargraph118 = FAUSTFLOAT(fRec119[0]); + double fTemp118 = (0.2581988897471611 * fTemp117); + fRec118[0] = max((fRec118[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp118)))))); + fVbargraph119 = FAUSTFLOAT(fRec118[0]); + output59[i] = FAUSTFLOAT(fTemp118); + double fTemp119 = double(input60[i]); + fRec121[0] = max((fRec121[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp119)))))); + fVbargraph120 = FAUSTFLOAT(fRec121[0]); + double fTemp120 = (0.2581988897471611 * fTemp119); + fRec120[0] = max((fRec120[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp120)))))); + fVbargraph121 = FAUSTFLOAT(fRec120[0]); + output60[i] = FAUSTFLOAT(fTemp120); + double fTemp121 = double(input61[i]); + fRec123[0] = max((fRec123[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp121)))))); + fVbargraph122 = FAUSTFLOAT(fRec123[0]); + double fTemp122 = (0.2581988897471611 * fTemp121); + fRec122[0] = max((fRec122[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp122)))))); + fVbargraph123 = FAUSTFLOAT(fRec122[0]); + output61[i] = FAUSTFLOAT(fTemp122); + double fTemp123 = double(input62[i]); + fRec125[0] = max((fRec125[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp123)))))); + fVbargraph124 = FAUSTFLOAT(fRec125[0]); + double fTemp124 = (0.2581988897471611 * fTemp123); + fRec124[0] = max((fRec124[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp124)))))); + fVbargraph125 = FAUSTFLOAT(fRec124[0]); + output62[i] = FAUSTFLOAT(fTemp124); + double fTemp125 = double(input63[i]); + fRec127[0] = max((fRec127[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp125)))))); + fVbargraph126 = FAUSTFLOAT(fRec127[0]); + double fTemp126 = (0.2581988897471611 * fTemp125); + fRec126[0] = max((fRec126[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); + fVbargraph127 = FAUSTFLOAT(fRec126[0]); + output63[i] = FAUSTFLOAT(fTemp126); + double fTemp127 = double(input64[i]); + fRec129[0] = max((fRec129[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp127)))))); + fVbargraph128 = FAUSTFLOAT(fRec129[0]); + double fTemp128 = (0.24253562503633297 * fTemp127); + fRec128[0] = max((fRec128[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp128)))))); + fVbargraph129 = FAUSTFLOAT(fRec128[0]); + output64[i] = FAUSTFLOAT(fTemp128); + double fTemp129 = double(input65[i]); + fRec131[0] = max((fRec131[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp129)))))); + fVbargraph130 = FAUSTFLOAT(fRec131[0]); + double fTemp130 = (0.24253562503633297 * fTemp129); + fRec130[0] = max((fRec130[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp130)))))); + fVbargraph131 = FAUSTFLOAT(fRec130[0]); + output65[i] = FAUSTFLOAT(fTemp130); + double fTemp131 = double(input66[i]); + fRec133[0] = max((fRec133[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp131)))))); + fVbargraph132 = FAUSTFLOAT(fRec133[0]); + double fTemp132 = (0.24253562503633297 * fTemp131); + fRec132[0] = max((fRec132[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp132)))))); + fVbargraph133 = FAUSTFLOAT(fRec132[0]); + output66[i] = FAUSTFLOAT(fTemp132); + double fTemp133 = double(input67[i]); + fRec135[0] = max((fRec135[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp133)))))); + fVbargraph134 = FAUSTFLOAT(fRec135[0]); + double fTemp134 = (0.24253562503633297 * fTemp133); + fRec134[0] = max((fRec134[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp134)))))); + fVbargraph135 = FAUSTFLOAT(fRec134[0]); + output67[i] = FAUSTFLOAT(fTemp134); + double fTemp135 = double(input68[i]); + fRec137[0] = max((fRec137[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp135)))))); + fVbargraph136 = FAUSTFLOAT(fRec137[0]); + double fTemp136 = (0.24253562503633297 * fTemp135); + fRec136[0] = max((fRec136[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp136)))))); + fVbargraph137 = FAUSTFLOAT(fRec136[0]); + output68[i] = FAUSTFLOAT(fTemp136); + double fTemp137 = double(input69[i]); + fRec139[0] = max((fRec139[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp137)))))); + fVbargraph138 = FAUSTFLOAT(fRec139[0]); + double fTemp138 = (0.24253562503633297 * fTemp137); + fRec138[0] = max((fRec138[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp138)))))); + fVbargraph139 = FAUSTFLOAT(fRec138[0]); + output69[i] = FAUSTFLOAT(fTemp138); + double fTemp139 = double(input70[i]); + fRec141[0] = max((fRec141[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp139)))))); + fVbargraph140 = FAUSTFLOAT(fRec141[0]); + double fTemp140 = (0.24253562503633297 * fTemp139); + fRec140[0] = max((fRec140[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp140)))))); + fVbargraph141 = FAUSTFLOAT(fRec140[0]); + output70[i] = FAUSTFLOAT(fTemp140); + double fTemp141 = double(input71[i]); + fRec143[0] = max((fRec143[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp141)))))); + fVbargraph142 = FAUSTFLOAT(fRec143[0]); + double fTemp142 = (0.24253562503633297 * fTemp141); + fRec142[0] = max((fRec142[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp142)))))); + fVbargraph143 = FAUSTFLOAT(fRec142[0]); + output71[i] = FAUSTFLOAT(fTemp142); + double fTemp143 = double(input72[i]); + fRec145[0] = max((fRec145[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp143)))))); + fVbargraph144 = FAUSTFLOAT(fRec145[0]); + double fTemp144 = (0.24253562503633297 * fTemp143); + fRec144[0] = max((fRec144[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp144)))))); + fVbargraph145 = FAUSTFLOAT(fRec144[0]); + output72[i] = FAUSTFLOAT(fTemp144); + double fTemp145 = double(input73[i]); + fRec147[0] = max((fRec147[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp145)))))); + fVbargraph146 = FAUSTFLOAT(fRec147[0]); + double fTemp146 = (0.24253562503633297 * fTemp145); + fRec146[0] = max((fRec146[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp146)))))); + fVbargraph147 = FAUSTFLOAT(fRec146[0]); + output73[i] = FAUSTFLOAT(fTemp146); + double fTemp147 = double(input74[i]); + fRec149[0] = max((fRec149[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp147)))))); + fVbargraph148 = FAUSTFLOAT(fRec149[0]); + double fTemp148 = (0.24253562503633297 * fTemp147); + fRec148[0] = max((fRec148[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp148)))))); + fVbargraph149 = FAUSTFLOAT(fRec148[0]); + output74[i] = FAUSTFLOAT(fTemp148); + double fTemp149 = double(input75[i]); + fRec151[0] = max((fRec151[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp149)))))); + fVbargraph150 = FAUSTFLOAT(fRec151[0]); + double fTemp150 = (0.24253562503633297 * fTemp149); + fRec150[0] = max((fRec150[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp150)))))); + fVbargraph151 = FAUSTFLOAT(fRec150[0]); + output75[i] = FAUSTFLOAT(fTemp150); + double fTemp151 = double(input76[i]); + fRec153[0] = max((fRec153[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp151)))))); + fVbargraph152 = FAUSTFLOAT(fRec153[0]); + double fTemp152 = (0.24253562503633297 * fTemp151); + fRec152[0] = max((fRec152[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); + fVbargraph153 = FAUSTFLOAT(fRec152[0]); + output76[i] = FAUSTFLOAT(fTemp152); + double fTemp153 = double(input77[i]); + fRec155[0] = max((fRec155[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp153)))))); + fVbargraph154 = FAUSTFLOAT(fRec155[0]); + double fTemp154 = (0.24253562503633297 * fTemp153); + fRec154[0] = max((fRec154[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp154)))))); + fVbargraph155 = FAUSTFLOAT(fRec154[0]); + output77[i] = FAUSTFLOAT(fTemp154); + double fTemp155 = double(input78[i]); + fRec157[0] = max((fRec157[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); + fVbargraph156 = FAUSTFLOAT(fRec157[0]); + double fTemp156 = (0.24253562503633297 * fTemp155); + fRec156[0] = max((fRec156[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp156)))))); + fVbargraph157 = FAUSTFLOAT(fRec156[0]); + output78[i] = FAUSTFLOAT(fTemp156); + double fTemp157 = double(input79[i]); + fRec159[0] = max((fRec159[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp157)))))); + fVbargraph158 = FAUSTFLOAT(fRec159[0]); + double fTemp158 = (0.24253562503633297 * fTemp157); + fRec158[0] = max((fRec158[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp158)))))); + fVbargraph159 = FAUSTFLOAT(fRec158[0]); + output79[i] = FAUSTFLOAT(fTemp158); + double fTemp159 = double(input80[i]); + fRec161[0] = max((fRec161[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp159)))))); + fVbargraph160 = FAUSTFLOAT(fRec161[0]); + double fTemp160 = (0.24253562503633297 * fTemp159); + fRec160[0] = max((fRec160[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp160)))))); + fVbargraph161 = FAUSTFLOAT(fRec160[0]); + output80[i] = FAUSTFLOAT(fTemp160); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec25[1] = fRec25[0]; + fRec24[1] = fRec24[0]; + fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; + fRec33[1] = fRec33[0]; + fRec32[1] = fRec32[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fRec37[1] = fRec37[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; + fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec43[1] = fRec43[0]; + fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec49[1] = fRec49[0]; + fRec48[1] = fRec48[0]; + fRec51[1] = fRec51[0]; + fRec50[1] = fRec50[0]; + fRec53[1] = fRec53[0]; + fRec52[1] = fRec52[0]; + fRec55[1] = fRec55[0]; + fRec54[1] = fRec54[0]; + fRec57[1] = fRec57[0]; + fRec56[1] = fRec56[0]; + fRec59[1] = fRec59[0]; + fRec58[1] = fRec58[0]; + fRec61[1] = fRec61[0]; + fRec60[1] = fRec60[0]; + fRec63[1] = fRec63[0]; + fRec62[1] = fRec62[0]; + fRec65[1] = fRec65[0]; + fRec64[1] = fRec64[0]; + fRec67[1] = fRec67[0]; + fRec66[1] = fRec66[0]; + fRec69[1] = fRec69[0]; + fRec68[1] = fRec68[0]; + fRec71[1] = fRec71[0]; + fRec70[1] = fRec70[0]; + fRec73[1] = fRec73[0]; + fRec72[1] = fRec72[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; + fRec77[1] = fRec77[0]; + fRec76[1] = fRec76[0]; + fRec79[1] = fRec79[0]; + fRec78[1] = fRec78[0]; + fRec81[1] = fRec81[0]; + fRec80[1] = fRec80[0]; + fRec83[1] = fRec83[0]; + fRec82[1] = fRec82[0]; + fRec85[1] = fRec85[0]; + fRec84[1] = fRec84[0]; + fRec87[1] = fRec87[0]; + fRec86[1] = fRec86[0]; + fRec89[1] = fRec89[0]; + fRec88[1] = fRec88[0]; + fRec91[1] = fRec91[0]; + fRec90[1] = fRec90[0]; + fRec93[1] = fRec93[0]; + fRec92[1] = fRec92[0]; + fRec95[1] = fRec95[0]; + fRec94[1] = fRec94[0]; + fRec97[1] = fRec97[0]; + fRec96[1] = fRec96[0]; + fRec99[1] = fRec99[0]; + fRec98[1] = fRec98[0]; + fRec101[1] = fRec101[0]; + fRec100[1] = fRec100[0]; + fRec103[1] = fRec103[0]; + fRec102[1] = fRec102[0]; + fRec105[1] = fRec105[0]; + fRec104[1] = fRec104[0]; + fRec107[1] = fRec107[0]; + fRec106[1] = fRec106[0]; + fRec109[1] = fRec109[0]; + fRec108[1] = fRec108[0]; + fRec111[1] = fRec111[0]; + fRec110[1] = fRec110[0]; + fRec113[1] = fRec113[0]; + fRec112[1] = fRec112[0]; + fRec115[1] = fRec115[0]; + fRec114[1] = fRec114[0]; + fRec117[1] = fRec117[0]; + fRec116[1] = fRec116[0]; + fRec119[1] = fRec119[0]; + fRec118[1] = fRec118[0]; + fRec121[1] = fRec121[0]; + fRec120[1] = fRec120[0]; + fRec123[1] = fRec123[0]; + fRec122[1] = fRec122[0]; + fRec125[1] = fRec125[0]; + fRec124[1] = fRec124[0]; + fRec127[1] = fRec127[0]; + fRec126[1] = fRec126[0]; + fRec129[1] = fRec129[0]; + fRec128[1] = fRec128[0]; + fRec131[1] = fRec131[0]; + fRec130[1] = fRec130[0]; + fRec133[1] = fRec133[0]; + fRec132[1] = fRec132[0]; + fRec135[1] = fRec135[0]; + fRec134[1] = fRec134[0]; + fRec137[1] = fRec137[0]; + fRec136[1] = fRec136[0]; + fRec139[1] = fRec139[0]; + fRec138[1] = fRec138[0]; + fRec141[1] = fRec141[0]; + fRec140[1] = fRec140[0]; + fRec143[1] = fRec143[0]; + fRec142[1] = fRec142[0]; + fRec145[1] = fRec145[0]; + fRec144[1] = fRec144[0]; + fRec147[1] = fRec147[0]; + fRec146[1] = fRec146[0]; + fRec149[1] = fRec149[0]; + fRec148[1] = fRec148[0]; + fRec151[1] = fRec151[0]; + fRec150[1] = fRec150[0]; + fRec153[1] = fRec153[0]; + fRec152[1] = fRec152[0]; + fRec155[1] = fRec155[0]; + fRec154[1] = fRec154[0]; + fRec157[1] = fRec157[0]; + fRec156[1] = fRec156[0]; + fRec159[1] = fRec159[0]; + fRec158[1] = fRec158[0]; + fRec161[1] = fRec161[0]; + fRec160[1] = fRec160[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d9.cpp b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d9.cpp new file mode 100644 index 0000000000..fbfbc108f8 --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnN3d2AcnSn3d9.cpp @@ -0,0 +1,5027 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnN3d2AcnSn3d9" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec18[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec20[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; + FAUSTFLOAT fVbargraph24; + double fRec24[2]; + FAUSTFLOAT fVbargraph25; + double fRec27[2]; + FAUSTFLOAT fVbargraph26; + double fRec26[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; + FAUSTFLOAT fVbargraph31; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fRec32[2]; + FAUSTFLOAT fVbargraph33; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fRec34[2]; + FAUSTFLOAT fVbargraph35; + double fRec37[2]; + FAUSTFLOAT fVbargraph36; + double fRec36[2]; + FAUSTFLOAT fVbargraph37; + double fRec39[2]; + FAUSTFLOAT fVbargraph38; + double fRec38[2]; + FAUSTFLOAT fVbargraph39; + double fRec41[2]; + FAUSTFLOAT fVbargraph40; + double fRec40[2]; + FAUSTFLOAT fVbargraph41; + double fRec43[2]; + FAUSTFLOAT fVbargraph42; + double fRec42[2]; + FAUSTFLOAT fVbargraph43; + double fRec45[2]; + FAUSTFLOAT fVbargraph44; + double fRec44[2]; + FAUSTFLOAT fVbargraph45; + double fRec47[2]; + FAUSTFLOAT fVbargraph46; + double fRec46[2]; + FAUSTFLOAT fVbargraph47; + double fRec49[2]; + FAUSTFLOAT fVbargraph48; + double fRec48[2]; + FAUSTFLOAT fVbargraph49; + double fRec51[2]; + FAUSTFLOAT fVbargraph50; + double fRec50[2]; + FAUSTFLOAT fVbargraph51; + double fRec53[2]; + FAUSTFLOAT fVbargraph52; + double fRec52[2]; + FAUSTFLOAT fVbargraph53; + double fRec55[2]; + FAUSTFLOAT fVbargraph54; + double fRec54[2]; + FAUSTFLOAT fVbargraph55; + double fRec57[2]; + FAUSTFLOAT fVbargraph56; + double fRec56[2]; + FAUSTFLOAT fVbargraph57; + double fRec59[2]; + FAUSTFLOAT fVbargraph58; + double fRec58[2]; + FAUSTFLOAT fVbargraph59; + double fRec61[2]; + FAUSTFLOAT fVbargraph60; + double fRec60[2]; + FAUSTFLOAT fVbargraph61; + double fRec63[2]; + FAUSTFLOAT fVbargraph62; + double fRec62[2]; + FAUSTFLOAT fVbargraph63; + double fRec65[2]; + FAUSTFLOAT fVbargraph64; + double fRec64[2]; + FAUSTFLOAT fVbargraph65; + double fRec67[2]; + FAUSTFLOAT fVbargraph66; + double fRec66[2]; + FAUSTFLOAT fVbargraph67; + double fRec69[2]; + FAUSTFLOAT fVbargraph68; + double fRec68[2]; + FAUSTFLOAT fVbargraph69; + double fRec71[2]; + FAUSTFLOAT fVbargraph70; + double fRec70[2]; + FAUSTFLOAT fVbargraph71; + double fRec73[2]; + FAUSTFLOAT fVbargraph72; + double fRec72[2]; + FAUSTFLOAT fVbargraph73; + double fRec75[2]; + FAUSTFLOAT fVbargraph74; + double fRec74[2]; + FAUSTFLOAT fVbargraph75; + double fRec77[2]; + FAUSTFLOAT fVbargraph76; + double fRec76[2]; + FAUSTFLOAT fVbargraph77; + double fRec79[2]; + FAUSTFLOAT fVbargraph78; + double fRec78[2]; + FAUSTFLOAT fVbargraph79; + double fRec81[2]; + FAUSTFLOAT fVbargraph80; + double fRec80[2]; + FAUSTFLOAT fVbargraph81; + double fRec83[2]; + FAUSTFLOAT fVbargraph82; + double fRec82[2]; + FAUSTFLOAT fVbargraph83; + double fRec85[2]; + FAUSTFLOAT fVbargraph84; + double fRec84[2]; + FAUSTFLOAT fVbargraph85; + double fRec87[2]; + FAUSTFLOAT fVbargraph86; + double fRec86[2]; + FAUSTFLOAT fVbargraph87; + double fRec89[2]; + FAUSTFLOAT fVbargraph88; + double fRec88[2]; + FAUSTFLOAT fVbargraph89; + double fRec91[2]; + FAUSTFLOAT fVbargraph90; + double fRec90[2]; + FAUSTFLOAT fVbargraph91; + double fRec93[2]; + FAUSTFLOAT fVbargraph92; + double fRec92[2]; + FAUSTFLOAT fVbargraph93; + double fRec95[2]; + FAUSTFLOAT fVbargraph94; + double fRec94[2]; + FAUSTFLOAT fVbargraph95; + double fRec97[2]; + FAUSTFLOAT fVbargraph96; + double fRec96[2]; + FAUSTFLOAT fVbargraph97; + double fRec99[2]; + FAUSTFLOAT fVbargraph98; + double fRec98[2]; + FAUSTFLOAT fVbargraph99; + double fRec101[2]; + FAUSTFLOAT fVbargraph100; + double fRec100[2]; + FAUSTFLOAT fVbargraph101; + double fRec103[2]; + FAUSTFLOAT fVbargraph102; + double fRec102[2]; + FAUSTFLOAT fVbargraph103; + double fRec105[2]; + FAUSTFLOAT fVbargraph104; + double fRec104[2]; + FAUSTFLOAT fVbargraph105; + double fRec107[2]; + FAUSTFLOAT fVbargraph106; + double fRec106[2]; + FAUSTFLOAT fVbargraph107; + double fRec109[2]; + FAUSTFLOAT fVbargraph108; + double fRec108[2]; + FAUSTFLOAT fVbargraph109; + double fRec111[2]; + FAUSTFLOAT fVbargraph110; + double fRec110[2]; + FAUSTFLOAT fVbargraph111; + double fRec113[2]; + FAUSTFLOAT fVbargraph112; + double fRec112[2]; + FAUSTFLOAT fVbargraph113; + double fRec115[2]; + FAUSTFLOAT fVbargraph114; + double fRec114[2]; + FAUSTFLOAT fVbargraph115; + double fRec117[2]; + FAUSTFLOAT fVbargraph116; + double fRec116[2]; + FAUSTFLOAT fVbargraph117; + double fRec119[2]; + FAUSTFLOAT fVbargraph118; + double fRec118[2]; + FAUSTFLOAT fVbargraph119; + double fRec121[2]; + FAUSTFLOAT fVbargraph120; + double fRec120[2]; + FAUSTFLOAT fVbargraph121; + double fRec123[2]; + FAUSTFLOAT fVbargraph122; + double fRec122[2]; + FAUSTFLOAT fVbargraph123; + double fRec125[2]; + FAUSTFLOAT fVbargraph124; + double fRec124[2]; + FAUSTFLOAT fVbargraph125; + double fRec127[2]; + FAUSTFLOAT fVbargraph126; + double fRec126[2]; + FAUSTFLOAT fVbargraph127; + double fRec129[2]; + FAUSTFLOAT fVbargraph128; + double fRec128[2]; + FAUSTFLOAT fVbargraph129; + double fRec131[2]; + FAUSTFLOAT fVbargraph130; + double fRec130[2]; + FAUSTFLOAT fVbargraph131; + double fRec133[2]; + FAUSTFLOAT fVbargraph132; + double fRec132[2]; + FAUSTFLOAT fVbargraph133; + double fRec135[2]; + FAUSTFLOAT fVbargraph134; + double fRec134[2]; + FAUSTFLOAT fVbargraph135; + double fRec137[2]; + FAUSTFLOAT fVbargraph136; + double fRec136[2]; + FAUSTFLOAT fVbargraph137; + double fRec139[2]; + FAUSTFLOAT fVbargraph138; + double fRec138[2]; + FAUSTFLOAT fVbargraph139; + double fRec141[2]; + FAUSTFLOAT fVbargraph140; + double fRec140[2]; + FAUSTFLOAT fVbargraph141; + double fRec143[2]; + FAUSTFLOAT fVbargraph142; + double fRec142[2]; + FAUSTFLOAT fVbargraph143; + double fRec145[2]; + FAUSTFLOAT fVbargraph144; + double fRec144[2]; + FAUSTFLOAT fVbargraph145; + double fRec147[2]; + FAUSTFLOAT fVbargraph146; + double fRec146[2]; + FAUSTFLOAT fVbargraph147; + double fRec149[2]; + FAUSTFLOAT fVbargraph148; + double fRec148[2]; + FAUSTFLOAT fVbargraph149; + double fRec151[2]; + FAUSTFLOAT fVbargraph150; + double fRec150[2]; + FAUSTFLOAT fVbargraph151; + double fRec153[2]; + FAUSTFLOAT fVbargraph152; + double fRec152[2]; + FAUSTFLOAT fVbargraph153; + double fRec155[2]; + FAUSTFLOAT fVbargraph154; + double fRec154[2]; + FAUSTFLOAT fVbargraph155; + double fRec157[2]; + FAUSTFLOAT fVbargraph156; + double fRec156[2]; + FAUSTFLOAT fVbargraph157; + double fRec159[2]; + FAUSTFLOAT fVbargraph158; + double fRec158[2]; + FAUSTFLOAT fVbargraph159; + double fRec161[2]; + FAUSTFLOAT fVbargraph160; + double fRec160[2]; + FAUSTFLOAT fVbargraph161; + double fRec163[2]; + FAUSTFLOAT fVbargraph162; + double fRec162[2]; + FAUSTFLOAT fVbargraph163; + double fRec165[2]; + FAUSTFLOAT fVbargraph164; + double fRec164[2]; + FAUSTFLOAT fVbargraph165; + double fRec167[2]; + FAUSTFLOAT fVbargraph166; + double fRec166[2]; + FAUSTFLOAT fVbargraph167; + double fRec169[2]; + FAUSTFLOAT fVbargraph168; + double fRec168[2]; + FAUSTFLOAT fVbargraph169; + double fRec171[2]; + FAUSTFLOAT fVbargraph170; + double fRec170[2]; + FAUSTFLOAT fVbargraph171; + double fRec173[2]; + FAUSTFLOAT fVbargraph172; + double fRec172[2]; + FAUSTFLOAT fVbargraph173; + double fRec175[2]; + FAUSTFLOAT fVbargraph174; + double fRec174[2]; + FAUSTFLOAT fVbargraph175; + double fRec177[2]; + FAUSTFLOAT fVbargraph176; + double fRec176[2]; + FAUSTFLOAT fVbargraph177; + double fRec179[2]; + FAUSTFLOAT fVbargraph178; + double fRec178[2]; + FAUSTFLOAT fVbargraph179; + double fRec181[2]; + FAUSTFLOAT fVbargraph180; + double fRec180[2]; + FAUSTFLOAT fVbargraph181; + double fRec183[2]; + FAUSTFLOAT fVbargraph182; + double fRec182[2]; + FAUSTFLOAT fVbargraph183; + double fRec185[2]; + FAUSTFLOAT fVbargraph184; + double fRec184[2]; + FAUSTFLOAT fVbargraph185; + double fRec187[2]; + FAUSTFLOAT fVbargraph186; + double fRec186[2]; + FAUSTFLOAT fVbargraph187; + double fRec189[2]; + FAUSTFLOAT fVbargraph188; + double fRec188[2]; + FAUSTFLOAT fVbargraph189; + double fRec191[2]; + FAUSTFLOAT fVbargraph190; + double fRec190[2]; + FAUSTFLOAT fVbargraph191; + double fRec193[2]; + FAUSTFLOAT fVbargraph192; + double fRec192[2]; + FAUSTFLOAT fVbargraph193; + double fRec195[2]; + FAUSTFLOAT fVbargraph194; + double fRec194[2]; + FAUSTFLOAT fVbargraph195; + double fRec197[2]; + FAUSTFLOAT fVbargraph196; + double fRec196[2]; + FAUSTFLOAT fVbargraph197; + double fRec199[2]; + FAUSTFLOAT fVbargraph198; + double fRec198[2]; + FAUSTFLOAT fVbargraph199; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2AcnSn3d9"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 100; + + } + virtual int getNumOutputs() { + return 100; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec33[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec32[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec35[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec34[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec37[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec36[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec39[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec38[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec41[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + fRec40[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec43[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + fRec42[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec45[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec44[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec47[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec46[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + fRec48[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec51[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + fRec50[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec53[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec52[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec55[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + fRec54[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec57[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec56[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec59[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + fRec58[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec61[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + fRec60[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec63[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + fRec62[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec65[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + fRec64[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec67[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + fRec66[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec69[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + fRec68[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec71[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + fRec70[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec73[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + fRec72[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec75[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec74[l75] = 0.0; + + } + for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + fRec77[l76] = 0.0; + + } + for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + fRec76[l77] = 0.0; + + } + for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + fRec79[l78] = 0.0; + + } + for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + fRec78[l79] = 0.0; + + } + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec81[l80] = 0.0; + + } + for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + fRec80[l81] = 0.0; + + } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec83[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec82[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec85[l84] = 0.0; + + } + for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + fRec84[l85] = 0.0; + + } + for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + fRec87[l86] = 0.0; + + } + for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + fRec86[l87] = 0.0; + + } + for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + fRec89[l88] = 0.0; + + } + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec88[l89] = 0.0; + + } + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec91[l90] = 0.0; + + } + for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + fRec90[l91] = 0.0; + + } + for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + fRec93[l92] = 0.0; + + } + for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + fRec92[l93] = 0.0; + + } + for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + fRec95[l94] = 0.0; + + } + for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + fRec94[l95] = 0.0; + + } + for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + fRec97[l96] = 0.0; + + } + for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + fRec96[l97] = 0.0; + + } + for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + fRec99[l98] = 0.0; + + } + for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + fRec98[l99] = 0.0; + + } + for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + fRec101[l100] = 0.0; + + } + for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + fRec100[l101] = 0.0; + + } + for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + fRec103[l102] = 0.0; + + } + for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + fRec102[l103] = 0.0; + + } + for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + fRec105[l104] = 0.0; + + } + for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + fRec104[l105] = 0.0; + + } + for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + fRec107[l106] = 0.0; + + } + for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + fRec106[l107] = 0.0; + + } + for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + fRec109[l108] = 0.0; + + } + for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + fRec108[l109] = 0.0; + + } + for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { + fRec111[l110] = 0.0; + + } + for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + fRec110[l111] = 0.0; + + } + for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + fRec113[l112] = 0.0; + + } + for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + fRec112[l113] = 0.0; + + } + for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + fRec115[l114] = 0.0; + + } + for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { + fRec114[l115] = 0.0; + + } + for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + fRec117[l116] = 0.0; + + } + for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + fRec116[l117] = 0.0; + + } + for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + fRec119[l118] = 0.0; + + } + for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + fRec118[l119] = 0.0; + + } + for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { + fRec121[l120] = 0.0; + + } + for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { + fRec120[l121] = 0.0; + + } + for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { + fRec123[l122] = 0.0; + + } + for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { + fRec122[l123] = 0.0; + + } + for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { + fRec125[l124] = 0.0; + + } + for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { + fRec124[l125] = 0.0; + + } + for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { + fRec127[l126] = 0.0; + + } + for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { + fRec126[l127] = 0.0; + + } + for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { + fRec129[l128] = 0.0; + + } + for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { + fRec128[l129] = 0.0; + + } + for (int l130 = 0; (l130 < 2); l130 = (l130 + 1)) { + fRec131[l130] = 0.0; + + } + for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { + fRec130[l131] = 0.0; + + } + for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { + fRec133[l132] = 0.0; + + } + for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { + fRec132[l133] = 0.0; + + } + for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { + fRec135[l134] = 0.0; + + } + for (int l135 = 0; (l135 < 2); l135 = (l135 + 1)) { + fRec134[l135] = 0.0; + + } + for (int l136 = 0; (l136 < 2); l136 = (l136 + 1)) { + fRec137[l136] = 0.0; + + } + for (int l137 = 0; (l137 < 2); l137 = (l137 + 1)) { + fRec136[l137] = 0.0; + + } + for (int l138 = 0; (l138 < 2); l138 = (l138 + 1)) { + fRec139[l138] = 0.0; + + } + for (int l139 = 0; (l139 < 2); l139 = (l139 + 1)) { + fRec138[l139] = 0.0; + + } + for (int l140 = 0; (l140 < 2); l140 = (l140 + 1)) { + fRec141[l140] = 0.0; + + } + for (int l141 = 0; (l141 < 2); l141 = (l141 + 1)) { + fRec140[l141] = 0.0; + + } + for (int l142 = 0; (l142 < 2); l142 = (l142 + 1)) { + fRec143[l142] = 0.0; + + } + for (int l143 = 0; (l143 < 2); l143 = (l143 + 1)) { + fRec142[l143] = 0.0; + + } + for (int l144 = 0; (l144 < 2); l144 = (l144 + 1)) { + fRec145[l144] = 0.0; + + } + for (int l145 = 0; (l145 < 2); l145 = (l145 + 1)) { + fRec144[l145] = 0.0; + + } + for (int l146 = 0; (l146 < 2); l146 = (l146 + 1)) { + fRec147[l146] = 0.0; + + } + for (int l147 = 0; (l147 < 2); l147 = (l147 + 1)) { + fRec146[l147] = 0.0; + + } + for (int l148 = 0; (l148 < 2); l148 = (l148 + 1)) { + fRec149[l148] = 0.0; + + } + for (int l149 = 0; (l149 < 2); l149 = (l149 + 1)) { + fRec148[l149] = 0.0; + + } + for (int l150 = 0; (l150 < 2); l150 = (l150 + 1)) { + fRec151[l150] = 0.0; + + } + for (int l151 = 0; (l151 < 2); l151 = (l151 + 1)) { + fRec150[l151] = 0.0; + + } + for (int l152 = 0; (l152 < 2); l152 = (l152 + 1)) { + fRec153[l152] = 0.0; + + } + for (int l153 = 0; (l153 < 2); l153 = (l153 + 1)) { + fRec152[l153] = 0.0; + + } + for (int l154 = 0; (l154 < 2); l154 = (l154 + 1)) { + fRec155[l154] = 0.0; + + } + for (int l155 = 0; (l155 < 2); l155 = (l155 + 1)) { + fRec154[l155] = 0.0; + + } + for (int l156 = 0; (l156 < 2); l156 = (l156 + 1)) { + fRec157[l156] = 0.0; + + } + for (int l157 = 0; (l157 < 2); l157 = (l157 + 1)) { + fRec156[l157] = 0.0; + + } + for (int l158 = 0; (l158 < 2); l158 = (l158 + 1)) { + fRec159[l158] = 0.0; + + } + for (int l159 = 0; (l159 < 2); l159 = (l159 + 1)) { + fRec158[l159] = 0.0; + + } + for (int l160 = 0; (l160 < 2); l160 = (l160 + 1)) { + fRec161[l160] = 0.0; + + } + for (int l161 = 0; (l161 < 2); l161 = (l161 + 1)) { + fRec160[l161] = 0.0; + + } + for (int l162 = 0; (l162 < 2); l162 = (l162 + 1)) { + fRec163[l162] = 0.0; + + } + for (int l163 = 0; (l163 < 2); l163 = (l163 + 1)) { + fRec162[l163] = 0.0; + + } + for (int l164 = 0; (l164 < 2); l164 = (l164 + 1)) { + fRec165[l164] = 0.0; + + } + for (int l165 = 0; (l165 < 2); l165 = (l165 + 1)) { + fRec164[l165] = 0.0; + + } + for (int l166 = 0; (l166 < 2); l166 = (l166 + 1)) { + fRec167[l166] = 0.0; + + } + for (int l167 = 0; (l167 < 2); l167 = (l167 + 1)) { + fRec166[l167] = 0.0; + + } + for (int l168 = 0; (l168 < 2); l168 = (l168 + 1)) { + fRec169[l168] = 0.0; + + } + for (int l169 = 0; (l169 < 2); l169 = (l169 + 1)) { + fRec168[l169] = 0.0; + + } + for (int l170 = 0; (l170 < 2); l170 = (l170 + 1)) { + fRec171[l170] = 0.0; + + } + for (int l171 = 0; (l171 < 2); l171 = (l171 + 1)) { + fRec170[l171] = 0.0; + + } + for (int l172 = 0; (l172 < 2); l172 = (l172 + 1)) { + fRec173[l172] = 0.0; + + } + for (int l173 = 0; (l173 < 2); l173 = (l173 + 1)) { + fRec172[l173] = 0.0; + + } + for (int l174 = 0; (l174 < 2); l174 = (l174 + 1)) { + fRec175[l174] = 0.0; + + } + for (int l175 = 0; (l175 < 2); l175 = (l175 + 1)) { + fRec174[l175] = 0.0; + + } + for (int l176 = 0; (l176 < 2); l176 = (l176 + 1)) { + fRec177[l176] = 0.0; + + } + for (int l177 = 0; (l177 < 2); l177 = (l177 + 1)) { + fRec176[l177] = 0.0; + + } + for (int l178 = 0; (l178 < 2); l178 = (l178 + 1)) { + fRec179[l178] = 0.0; + + } + for (int l179 = 0; (l179 < 2); l179 = (l179 + 1)) { + fRec178[l179] = 0.0; + + } + for (int l180 = 0; (l180 < 2); l180 = (l180 + 1)) { + fRec181[l180] = 0.0; + + } + for (int l181 = 0; (l181 < 2); l181 = (l181 + 1)) { + fRec180[l181] = 0.0; + + } + for (int l182 = 0; (l182 < 2); l182 = (l182 + 1)) { + fRec183[l182] = 0.0; + + } + for (int l183 = 0; (l183 < 2); l183 = (l183 + 1)) { + fRec182[l183] = 0.0; + + } + for (int l184 = 0; (l184 < 2); l184 = (l184 + 1)) { + fRec185[l184] = 0.0; + + } + for (int l185 = 0; (l185 < 2); l185 = (l185 + 1)) { + fRec184[l185] = 0.0; + + } + for (int l186 = 0; (l186 < 2); l186 = (l186 + 1)) { + fRec187[l186] = 0.0; + + } + for (int l187 = 0; (l187 < 2); l187 = (l187 + 1)) { + fRec186[l187] = 0.0; + + } + for (int l188 = 0; (l188 < 2); l188 = (l188 + 1)) { + fRec189[l188] = 0.0; + + } + for (int l189 = 0; (l189 < 2); l189 = (l189 + 1)) { + fRec188[l189] = 0.0; + + } + for (int l190 = 0; (l190 < 2); l190 = (l190 + 1)) { + fRec191[l190] = 0.0; + + } + for (int l191 = 0; (l191 < 2); l191 = (l191 + 1)) { + fRec190[l191] = 0.0; + + } + for (int l192 = 0; (l192 < 2); l192 = (l192 + 1)) { + fRec193[l192] = 0.0; + + } + for (int l193 = 0; (l193 < 2); l193 = (l193 + 1)) { + fRec192[l193] = 0.0; + + } + for (int l194 = 0; (l194 < 2); l194 = (l194 + 1)) { + fRec195[l194] = 0.0; + + } + for (int l195 = 0; (l195 < 2); l195 = (l195 + 1)) { + fRec194[l195] = 0.0; + + } + for (int l196 = 0; (l196 < 2); l196 = (l196 + 1)) { + fRec197[l196] = 0.0; + + } + for (int l197 = 0; (l197 < 2); l197 = (l197 + 1)) { + fRec196[l197] = 0.0; + + } + for (int l198 = 0; (l198 < 2); l198 = (l198 + 1)) { + fRec199[l198] = 0.0; + + } + for (int l199 = 0; (l199 < 2); l199 = (l199 + 1)) { + fRec198[l199] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnN3d2AcnSn3d9"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f37000", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f40cf0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f4ac00", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f54bf0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f5ef70", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f69040", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f731f0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f7d560", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f87a90", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f92350", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f9c5e0", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fa6950", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fb0e80", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fbb570", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fc5e20", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fd0890", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fdb690", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fe5af0", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ff0020", &fVbargraph36, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ffa710", &fVbargraph38, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3004fc0", &fVbargraph40, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x300fa30", &fVbargraph42, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x301a660", &fVbargraph44, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3025450", &fVbargraph46, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3030400", &fVbargraph48, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x303b740", &fVbargraph50, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3045d50", &fVbargraph52, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph54, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3050440", &fVbargraph54, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph56, "unit", "dB"); + ui_interface->addVerticalBargraph("0x305acf0", &fVbargraph56, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph58, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3065760", &fVbargraph58, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph60, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3070390", &fVbargraph60, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph62, "unit", "dB"); + ui_interface->addVerticalBargraph("0x307b180", &fVbargraph62, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph64, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3086130", &fVbargraph64, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph66, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30912a0", &fVbargraph66, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph68, "unit", "dB"); + ui_interface->addVerticalBargraph("0x309c5d0", &fVbargraph68, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph70, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30a7ac0", &fVbargraph70, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph72, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30b3340", &fVbargraph72, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph74, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30bdb10", &fVbargraph74, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph76, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30c83c0", &fVbargraph76, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph78, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30d2e30", &fVbargraph78, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph80, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30dda60", &fVbargraph80, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph82, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30e8850", &fVbargraph82, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph84, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30f3800", &fVbargraph84, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph86, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30fe970", &fVbargraph86, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph88, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3109ca0", &fVbargraph88, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph90, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3115190", &fVbargraph90, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph92, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3120840", &fVbargraph92, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph94, "unit", "dB"); + ui_interface->addVerticalBargraph("0x312c0b0", &fVbargraph94, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph96, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3137ae0", &fVbargraph96, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("7"); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph98, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31438a0", &fVbargraph98, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph100, "unit", "dB"); + ui_interface->addVerticalBargraph("0x314e230", &fVbargraph100, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("51"); + ui_interface->declare(&fVbargraph102, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3158ca0", &fVbargraph102, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("52"); + ui_interface->declare(&fVbargraph104, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31638d0", &fVbargraph104, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("53"); + ui_interface->declare(&fVbargraph106, "unit", "dB"); + ui_interface->addVerticalBargraph("0x316e6c0", &fVbargraph106, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("54"); + ui_interface->declare(&fVbargraph108, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3179670", &fVbargraph108, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("55"); + ui_interface->declare(&fVbargraph110, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31847e0", &fVbargraph110, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("56"); + ui_interface->declare(&fVbargraph112, "unit", "dB"); + ui_interface->addVerticalBargraph("0x318fb10", &fVbargraph112, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("57"); + ui_interface->declare(&fVbargraph114, "unit", "dB"); + ui_interface->addVerticalBargraph("0x319b000", &fVbargraph114, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("58"); + ui_interface->declare(&fVbargraph116, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31a66b0", &fVbargraph116, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("59"); + ui_interface->declare(&fVbargraph118, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31b1f30", &fVbargraph118, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("60"); + ui_interface->declare(&fVbargraph120, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31bd960", &fVbargraph120, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("61"); + ui_interface->declare(&fVbargraph122, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31c9550", &fVbargraph122, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("62"); + ui_interface->declare(&fVbargraph124, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31d5300", &fVbargraph124, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("63"); + ui_interface->declare(&fVbargraph126, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31e1270", &fVbargraph126, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("8"); + ui_interface->openVerticalBox("64"); + ui_interface->declare(&fVbargraph128, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31ed570", &fVbargraph128, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("65"); + ui_interface->declare(&fVbargraph130, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31f80c0", &fVbargraph130, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("66"); + ui_interface->declare(&fVbargraph132, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3202cf0", &fVbargraph132, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("67"); + ui_interface->declare(&fVbargraph134, "unit", "dB"); + ui_interface->addVerticalBargraph("0x320dae0", &fVbargraph134, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("68"); + ui_interface->declare(&fVbargraph136, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3218a90", &fVbargraph136, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("69"); + ui_interface->declare(&fVbargraph138, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3223c00", &fVbargraph138, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("70"); + ui_interface->declare(&fVbargraph140, "unit", "dB"); + ui_interface->addVerticalBargraph("0x322ef40", &fVbargraph140, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("71"); + ui_interface->declare(&fVbargraph142, "unit", "dB"); + ui_interface->addVerticalBargraph("0x323a430", &fVbargraph142, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("72"); + ui_interface->declare(&fVbargraph144, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3245ae0", &fVbargraph144, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("73"); + ui_interface->declare(&fVbargraph146, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3251350", &fVbargraph146, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("74"); + ui_interface->declare(&fVbargraph148, "unit", "dB"); + ui_interface->addVerticalBargraph("0x325cd80", &fVbargraph148, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("75"); + ui_interface->declare(&fVbargraph150, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3268970", &fVbargraph150, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("76"); + ui_interface->declare(&fVbargraph152, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3274720", &fVbargraph152, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("77"); + ui_interface->declare(&fVbargraph154, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3280690", &fVbargraph154, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("78"); + ui_interface->declare(&fVbargraph156, "unit", "dB"); + ui_interface->addVerticalBargraph("0x328c7c0", &fVbargraph156, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("79"); + ui_interface->declare(&fVbargraph158, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3298ac0", &fVbargraph158, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("80"); + ui_interface->declare(&fVbargraph160, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32a4f70", &fVbargraph160, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("9"); + ui_interface->openVerticalBox("81"); + ui_interface->declare(&fVbargraph162, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32b17b0", &fVbargraph162, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("82"); + ui_interface->declare(&fVbargraph164, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32bc4c0", &fVbargraph164, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("83"); + ui_interface->declare(&fVbargraph166, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32c72b0", &fVbargraph166, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("84"); + ui_interface->declare(&fVbargraph168, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32d2260", &fVbargraph168, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("85"); + ui_interface->declare(&fVbargraph170, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32dd3d0", &fVbargraph170, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("86"); + ui_interface->declare(&fVbargraph172, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32e8700", &fVbargraph172, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("87"); + ui_interface->declare(&fVbargraph174, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32f3bf0", &fVbargraph174, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("88"); + ui_interface->declare(&fVbargraph176, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32ff2a0", &fVbargraph176, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("89"); + ui_interface->declare(&fVbargraph178, "unit", "dB"); + ui_interface->addVerticalBargraph("0x330ab10", &fVbargraph178, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("90"); + ui_interface->declare(&fVbargraph180, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3316540", &fVbargraph180, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("91"); + ui_interface->declare(&fVbargraph182, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3322130", &fVbargraph182, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("92"); + ui_interface->declare(&fVbargraph184, "unit", "dB"); + ui_interface->addVerticalBargraph("0x332dee0", &fVbargraph184, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("93"); + ui_interface->declare(&fVbargraph186, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3339e50", &fVbargraph186, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("94"); + ui_interface->declare(&fVbargraph188, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3345f80", &fVbargraph188, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("95"); + ui_interface->declare(&fVbargraph190, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3352270", &fVbargraph190, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("96"); + ui_interface->declare(&fVbargraph192, "unit", "dB"); + ui_interface->addVerticalBargraph("0x335e720", &fVbargraph192, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("97"); + ui_interface->declare(&fVbargraph194, "unit", "dB"); + ui_interface->addVerticalBargraph("0x336ad90", &fVbargraph194, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("98"); + ui_interface->declare(&fVbargraph196, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33775c0", &fVbargraph196, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("99"); + ui_interface->declare(&fVbargraph198, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3383fb0", &fVbargraph198, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f3b180", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f45260", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f4f170", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f59240", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f635c0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f6d690", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f77920", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f81d70", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f8c380", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2f96a80", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fa0d10", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fab160", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fb5770", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fbff40", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fca8d0", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fd5420", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fdfeb0", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fea300", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ff4910", &fVbargraph37, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2fff0e0", &fVbargraph39, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3009a70", &fVbargraph41, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30145c0", &fVbargraph43, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x301f2d0", &fVbargraph45, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x302a1a0", &fVbargraph47, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3035230", &fVbargraph49, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3040030", &fVbargraph51, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x304a640", &fVbargraph53, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph55, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3054e10", &fVbargraph55, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph57, "unit", "dB"); + ui_interface->addVerticalBargraph("0x305f7a0", &fVbargraph57, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph59, "unit", "dB"); + ui_interface->addVerticalBargraph("0x306a2f0", &fVbargraph59, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph61, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3075000", &fVbargraph61, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph63, "unit", "dB"); + ui_interface->addVerticalBargraph("0x307fed0", &fVbargraph63, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph65, "unit", "dB"); + ui_interface->addVerticalBargraph("0x308af60", &fVbargraph65, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph67, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30961b0", &fVbargraph67, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph69, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30a15c0", &fVbargraph69, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph71, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30acb90", &fVbargraph71, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("6"); + ui_interface->openVerticalBox("36"); + ui_interface->declare(&fVbargraph73, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30b7d10", &fVbargraph73, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("37"); + ui_interface->declare(&fVbargraph75, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30c24e0", &fVbargraph75, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("38"); + ui_interface->declare(&fVbargraph77, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30cce70", &fVbargraph77, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("39"); + ui_interface->declare(&fVbargraph79, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30d79c0", &fVbargraph79, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("40"); + ui_interface->declare(&fVbargraph81, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30e26d0", &fVbargraph81, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("41"); + ui_interface->declare(&fVbargraph83, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30ed5a0", &fVbargraph83, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("42"); + ui_interface->declare(&fVbargraph85, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30f8630", &fVbargraph85, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("43"); + ui_interface->declare(&fVbargraph87, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3103880", &fVbargraph87, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("44"); + ui_interface->declare(&fVbargraph89, "unit", "dB"); + ui_interface->addVerticalBargraph("0x310ec90", &fVbargraph89, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("45"); + ui_interface->declare(&fVbargraph91, "unit", "dB"); + ui_interface->addVerticalBargraph("0x311a260", &fVbargraph91, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("46"); + ui_interface->declare(&fVbargraph93, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31259f0", &fVbargraph93, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("47"); + ui_interface->declare(&fVbargraph95, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3131340", &fVbargraph95, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("48"); + ui_interface->declare(&fVbargraph97, "unit", "dB"); + ui_interface->addVerticalBargraph("0x313ce50", &fVbargraph97, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("7"); + ui_interface->openVerticalBox("49"); + ui_interface->declare(&fVbargraph99, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3148350", &fVbargraph99, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("50"); + ui_interface->declare(&fVbargraph101, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3152ce0", &fVbargraph101, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("51"); + ui_interface->declare(&fVbargraph103, "unit", "dB"); + ui_interface->addVerticalBargraph("0x315d830", &fVbargraph103, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("52"); + ui_interface->declare(&fVbargraph105, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3168540", &fVbargraph105, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("53"); + ui_interface->declare(&fVbargraph107, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3173410", &fVbargraph107, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("54"); + ui_interface->declare(&fVbargraph109, "unit", "dB"); + ui_interface->addVerticalBargraph("0x317e4a0", &fVbargraph109, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("55"); + ui_interface->declare(&fVbargraph111, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31896f0", &fVbargraph111, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("56"); + ui_interface->declare(&fVbargraph113, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3194b00", &fVbargraph113, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("57"); + ui_interface->declare(&fVbargraph115, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31a00d0", &fVbargraph115, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("58"); + ui_interface->declare(&fVbargraph117, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31ab870", &fVbargraph117, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("59"); + ui_interface->declare(&fVbargraph119, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31b71c0", &fVbargraph119, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("60"); + ui_interface->declare(&fVbargraph121, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31c2cd0", &fVbargraph121, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("61"); + ui_interface->declare(&fVbargraph123, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31ce9a0", &fVbargraph123, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("62"); + ui_interface->declare(&fVbargraph125, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31da830", &fVbargraph125, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("63"); + ui_interface->declare(&fVbargraph127, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31e6880", &fVbargraph127, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("8"); + ui_interface->openVerticalBox("64"); + ui_interface->declare(&fVbargraph129, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31f2100", &fVbargraph129, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("65"); + ui_interface->declare(&fVbargraph131, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31fcc50", &fVbargraph131, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("66"); + ui_interface->declare(&fVbargraph133, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3207960", &fVbargraph133, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("67"); + ui_interface->declare(&fVbargraph135, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3212830", &fVbargraph135, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("68"); + ui_interface->declare(&fVbargraph137, "unit", "dB"); + ui_interface->addVerticalBargraph("0x321d8c0", &fVbargraph137, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("69"); + ui_interface->declare(&fVbargraph139, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3228b10", &fVbargraph139, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("70"); + ui_interface->declare(&fVbargraph141, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3233f30", &fVbargraph141, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("71"); + ui_interface->declare(&fVbargraph143, "unit", "dB"); + ui_interface->addVerticalBargraph("0x323f500", &fVbargraph143, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("72"); + ui_interface->declare(&fVbargraph145, "unit", "dB"); + ui_interface->addVerticalBargraph("0x324ac90", &fVbargraph145, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("73"); + ui_interface->declare(&fVbargraph147, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32565e0", &fVbargraph147, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("74"); + ui_interface->declare(&fVbargraph149, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32620f0", &fVbargraph149, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("75"); + ui_interface->declare(&fVbargraph151, "unit", "dB"); + ui_interface->addVerticalBargraph("0x326ddc0", &fVbargraph151, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("76"); + ui_interface->declare(&fVbargraph153, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3279c50", &fVbargraph153, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("77"); + ui_interface->declare(&fVbargraph155, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3285ca0", &fVbargraph155, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("78"); + ui_interface->declare(&fVbargraph157, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3291ec0", &fVbargraph157, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("79"); + ui_interface->declare(&fVbargraph159, "unit", "dB"); + ui_interface->addVerticalBargraph("0x329e290", &fVbargraph159, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("80"); + ui_interface->declare(&fVbargraph161, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32aa820", &fVbargraph161, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("9"); + ui_interface->openVerticalBox("81"); + ui_interface->declare(&fVbargraph163, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32b6420", &fVbargraph163, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("82"); + ui_interface->declare(&fVbargraph165, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32c1130", &fVbargraph165, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("83"); + ui_interface->declare(&fVbargraph167, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32cc000", &fVbargraph167, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("84"); + ui_interface->declare(&fVbargraph169, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32d7090", &fVbargraph169, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("85"); + ui_interface->declare(&fVbargraph171, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32e22e0", &fVbargraph171, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("86"); + ui_interface->declare(&fVbargraph173, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32ed6f0", &fVbargraph173, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("87"); + ui_interface->declare(&fVbargraph175, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32f8cc0", &fVbargraph175, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("88"); + ui_interface->declare(&fVbargraph177, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3304450", &fVbargraph177, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("89"); + ui_interface->declare(&fVbargraph179, "unit", "dB"); + ui_interface->addVerticalBargraph("0x330fda0", &fVbargraph179, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("90"); + ui_interface->declare(&fVbargraph181, "unit", "dB"); + ui_interface->addVerticalBargraph("0x331b8b0", &fVbargraph181, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("91"); + ui_interface->declare(&fVbargraph183, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3327580", &fVbargraph183, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("92"); + ui_interface->declare(&fVbargraph185, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3333410", &fVbargraph185, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("93"); + ui_interface->declare(&fVbargraph187, "unit", "dB"); + ui_interface->addVerticalBargraph("0x333f460", &fVbargraph187, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("94"); + ui_interface->declare(&fVbargraph189, "unit", "dB"); + ui_interface->addVerticalBargraph("0x334b670", &fVbargraph189, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("95"); + ui_interface->declare(&fVbargraph191, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3357a40", &fVbargraph191, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("96"); + ui_interface->declare(&fVbargraph193, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3363fd0", &fVbargraph193, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("97"); + ui_interface->declare(&fVbargraph195, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3370720", &fVbargraph195, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("98"); + ui_interface->declare(&fVbargraph197, "unit", "dB"); + ui_interface->addVerticalBargraph("0x337d030", &fVbargraph197, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("99"); + ui_interface->declare(&fVbargraph199, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3389b00", &fVbargraph199, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* input81 = inputs[81]; + FAUSTFLOAT* input82 = inputs[82]; + FAUSTFLOAT* input83 = inputs[83]; + FAUSTFLOAT* input84 = inputs[84]; + FAUSTFLOAT* input85 = inputs[85]; + FAUSTFLOAT* input86 = inputs[86]; + FAUSTFLOAT* input87 = inputs[87]; + FAUSTFLOAT* input88 = inputs[88]; + FAUSTFLOAT* input89 = inputs[89]; + FAUSTFLOAT* input90 = inputs[90]; + FAUSTFLOAT* input91 = inputs[91]; + FAUSTFLOAT* input92 = inputs[92]; + FAUSTFLOAT* input93 = inputs[93]; + FAUSTFLOAT* input94 = inputs[94]; + FAUSTFLOAT* input95 = inputs[95]; + FAUSTFLOAT* input96 = inputs[96]; + FAUSTFLOAT* input97 = inputs[97]; + FAUSTFLOAT* input98 = inputs[98]; + FAUSTFLOAT* input99 = inputs[99]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + FAUSTFLOAT* output81 = outputs[81]; + FAUSTFLOAT* output82 = outputs[82]; + FAUSTFLOAT* output83 = outputs[83]; + FAUSTFLOAT* output84 = outputs[84]; + FAUSTFLOAT* output85 = outputs[85]; + FAUSTFLOAT* output86 = outputs[86]; + FAUSTFLOAT* output87 = outputs[87]; + FAUSTFLOAT* output88 = outputs[88]; + FAUSTFLOAT* output89 = outputs[89]; + FAUSTFLOAT* output90 = outputs[90]; + FAUSTFLOAT* output91 = outputs[91]; + FAUSTFLOAT* output92 = outputs[92]; + FAUSTFLOAT* output93 = outputs[93]; + FAUSTFLOAT* output94 = outputs[94]; + FAUSTFLOAT* output95 = outputs[95]; + FAUSTFLOAT* output96 = outputs[96]; + FAUSTFLOAT* output97 = outputs[97]; + FAUSTFLOAT* output98 = outputs[98]; + FAUSTFLOAT* output99 = outputs[99]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp0); + double fTemp1 = double(input1[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp2 = (0.57735026918962584 * fTemp1); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input2[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp4 = (0.57735026918962584 * fTemp3); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input3[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp6 = (0.57735026918962584 * fTemp5); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input4[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp8 = (0.44721359549995793 * fTemp7); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input5[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.44721359549995793 * fTemp9); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = double(input6[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp12 = (0.44721359549995793 * fTemp11); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = double(input7[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp14 = (0.44721359549995793 * fTemp13); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = double(input8[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp16 = (0.44721359549995793 * fTemp15); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input9[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp18 = (0.3779644730092272 * fTemp17); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input10[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp20 = (0.3779644730092272 * fTemp19); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp22 = (0.3779644730092272 * fTemp21); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp24 = (0.3779644730092272 * fTemp23); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input13[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp26 = (0.3779644730092272 * fTemp25); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = double(input14[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp28 = (0.3779644730092272 * fTemp27); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = double(input15[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp30 = (0.3779644730092272 * fTemp29); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = double(input16[i]); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + double fTemp32 = (0.33333333333333331 * fTemp31); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph33 = FAUSTFLOAT(fRec32[0]); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = double(input17[i]); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph34 = FAUSTFLOAT(fRec35[0]); + double fTemp34 = (0.33333333333333331 * fTemp33); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph35 = FAUSTFLOAT(fRec34[0]); + output17[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = double(input18[i]); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph36 = FAUSTFLOAT(fRec37[0]); + double fTemp36 = (0.33333333333333331 * fTemp35); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fVbargraph37 = FAUSTFLOAT(fRec36[0]); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = double(input19[i]); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph38 = FAUSTFLOAT(fRec39[0]); + double fTemp38 = (0.33333333333333331 * fTemp37); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph39 = FAUSTFLOAT(fRec38[0]); + output19[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = double(input20[i]); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph40 = FAUSTFLOAT(fRec41[0]); + double fTemp40 = (0.33333333333333331 * fTemp39); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph41 = FAUSTFLOAT(fRec40[0]); + output20[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = double(input21[i]); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph42 = FAUSTFLOAT(fRec43[0]); + double fTemp42 = (0.33333333333333331 * fTemp41); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph43 = FAUSTFLOAT(fRec42[0]); + output21[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = double(input22[i]); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph44 = FAUSTFLOAT(fRec45[0]); + double fTemp44 = (0.33333333333333331 * fTemp43); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph45 = FAUSTFLOAT(fRec44[0]); + output22[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = double(input23[i]); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph46 = FAUSTFLOAT(fRec47[0]); + double fTemp46 = (0.33333333333333331 * fTemp45); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph47 = FAUSTFLOAT(fRec46[0]); + output23[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = double(input24[i]); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph48 = FAUSTFLOAT(fRec49[0]); + double fTemp48 = (0.33333333333333331 * fTemp47); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph49 = FAUSTFLOAT(fRec48[0]); + output24[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = double(input25[i]); + fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph50 = FAUSTFLOAT(fRec51[0]); + double fTemp50 = (0.30151134457776363 * fTemp49); + fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph51 = FAUSTFLOAT(fRec50[0]); + output25[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = double(input26[i]); + fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph52 = FAUSTFLOAT(fRec53[0]); + double fTemp52 = (0.30151134457776363 * fTemp51); + fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + fVbargraph53 = FAUSTFLOAT(fRec52[0]); + output26[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = double(input27[i]); + fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph54 = FAUSTFLOAT(fRec55[0]); + double fTemp54 = (0.30151134457776363 * fTemp53); + fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph55 = FAUSTFLOAT(fRec54[0]); + output27[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = double(input28[i]); + fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph56 = FAUSTFLOAT(fRec57[0]); + double fTemp56 = (0.30151134457776363 * fTemp55); + fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph57 = FAUSTFLOAT(fRec56[0]); + output28[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = double(input29[i]); + fRec59[0] = max((fRec59[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph58 = FAUSTFLOAT(fRec59[0]); + double fTemp58 = (0.30151134457776363 * fTemp57); + fRec58[0] = max((fRec58[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph59 = FAUSTFLOAT(fRec58[0]); + output29[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = double(input30[i]); + fRec61[0] = max((fRec61[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph60 = FAUSTFLOAT(fRec61[0]); + double fTemp60 = (0.30151134457776363 * fTemp59); + fRec60[0] = max((fRec60[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph61 = FAUSTFLOAT(fRec60[0]); + output30[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = double(input31[i]); + fRec63[0] = max((fRec63[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph62 = FAUSTFLOAT(fRec63[0]); + double fTemp62 = (0.30151134457776363 * fTemp61); + fRec62[0] = max((fRec62[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph63 = FAUSTFLOAT(fRec62[0]); + output31[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = double(input32[i]); + fRec65[0] = max((fRec65[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph64 = FAUSTFLOAT(fRec65[0]); + double fTemp64 = (0.30151134457776363 * fTemp63); + fRec64[0] = max((fRec64[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph65 = FAUSTFLOAT(fRec64[0]); + output32[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = double(input33[i]); + fRec67[0] = max((fRec67[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph66 = FAUSTFLOAT(fRec67[0]); + double fTemp66 = (0.30151134457776363 * fTemp65); + fRec66[0] = max((fRec66[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph67 = FAUSTFLOAT(fRec66[0]); + output33[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = double(input34[i]); + fRec69[0] = max((fRec69[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); + fVbargraph68 = FAUSTFLOAT(fRec69[0]); + double fTemp68 = (0.30151134457776363 * fTemp67); + fRec68[0] = max((fRec68[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph69 = FAUSTFLOAT(fRec68[0]); + output34[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = double(input35[i]); + fRec71[0] = max((fRec71[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph70 = FAUSTFLOAT(fRec71[0]); + double fTemp70 = (0.30151134457776363 * fTemp69); + fRec70[0] = max((fRec70[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph71 = FAUSTFLOAT(fRec70[0]); + output35[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = double(input36[i]); + fRec73[0] = max((fRec73[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph72 = FAUSTFLOAT(fRec73[0]); + double fTemp72 = (0.27735009811261457 * fTemp71); + fRec72[0] = max((fRec72[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph73 = FAUSTFLOAT(fRec72[0]); + output36[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = double(input37[i]); + fRec75[0] = max((fRec75[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph74 = FAUSTFLOAT(fRec75[0]); + double fTemp74 = (0.27735009811261457 * fTemp73); + fRec74[0] = max((fRec74[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + fVbargraph75 = FAUSTFLOAT(fRec74[0]); + output37[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = double(input38[i]); + fRec77[0] = max((fRec77[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp75)))))); + fVbargraph76 = FAUSTFLOAT(fRec77[0]); + double fTemp76 = (0.27735009811261457 * fTemp75); + fRec76[0] = max((fRec76[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph77 = FAUSTFLOAT(fRec76[0]); + output38[i] = FAUSTFLOAT(fTemp76); + double fTemp77 = double(input39[i]); + fRec79[0] = max((fRec79[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph78 = FAUSTFLOAT(fRec79[0]); + double fTemp78 = (0.27735009811261457 * fTemp77); + fRec78[0] = max((fRec78[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph79 = FAUSTFLOAT(fRec78[0]); + output39[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = double(input40[i]); + fRec81[0] = max((fRec81[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + fVbargraph80 = FAUSTFLOAT(fRec81[0]); + double fTemp80 = (0.27735009811261457 * fTemp79); + fRec80[0] = max((fRec80[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + fVbargraph81 = FAUSTFLOAT(fRec80[0]); + output40[i] = FAUSTFLOAT(fTemp80); + double fTemp81 = double(input41[i]); + fRec83[0] = max((fRec83[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + fVbargraph82 = FAUSTFLOAT(fRec83[0]); + double fTemp82 = (0.27735009811261457 * fTemp81); + fRec82[0] = max((fRec82[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph83 = FAUSTFLOAT(fRec82[0]); + output41[i] = FAUSTFLOAT(fTemp82); + double fTemp83 = double(input42[i]); + fRec85[0] = max((fRec85[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph84 = FAUSTFLOAT(fRec85[0]); + double fTemp84 = (0.27735009811261457 * fTemp83); + fRec84[0] = max((fRec84[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph85 = FAUSTFLOAT(fRec84[0]); + output42[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = double(input43[i]); + fRec87[0] = max((fRec87[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + fVbargraph86 = FAUSTFLOAT(fRec87[0]); + double fTemp86 = (0.27735009811261457 * fTemp85); + fRec86[0] = max((fRec86[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); + fVbargraph87 = FAUSTFLOAT(fRec86[0]); + output43[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = double(input44[i]); + fRec89[0] = max((fRec89[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph88 = FAUSTFLOAT(fRec89[0]); + double fTemp88 = (0.27735009811261457 * fTemp87); + fRec88[0] = max((fRec88[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp88)))))); + fVbargraph89 = FAUSTFLOAT(fRec88[0]); + output44[i] = FAUSTFLOAT(fTemp88); + double fTemp89 = double(input45[i]); + fRec91[0] = max((fRec91[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + fVbargraph90 = FAUSTFLOAT(fRec91[0]); + double fTemp90 = (0.27735009811261457 * fTemp89); + fRec90[0] = max((fRec90[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph91 = FAUSTFLOAT(fRec90[0]); + output45[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = double(input46[i]); + fRec93[0] = max((fRec93[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph92 = FAUSTFLOAT(fRec93[0]); + double fTemp92 = (0.27735009811261457 * fTemp91); + fRec92[0] = max((fRec92[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph93 = FAUSTFLOAT(fRec92[0]); + output46[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = double(input47[i]); + fRec95[0] = max((fRec95[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph94 = FAUSTFLOAT(fRec95[0]); + double fTemp94 = (0.27735009811261457 * fTemp93); + fRec94[0] = max((fRec94[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph95 = FAUSTFLOAT(fRec94[0]); + output47[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = double(input48[i]); + fRec97[0] = max((fRec97[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph96 = FAUSTFLOAT(fRec97[0]); + double fTemp96 = (0.27735009811261457 * fTemp95); + fRec96[0] = max((fRec96[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph97 = FAUSTFLOAT(fRec96[0]); + output48[i] = FAUSTFLOAT(fTemp96); + double fTemp97 = double(input49[i]); + fRec99[0] = max((fRec99[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + fVbargraph98 = FAUSTFLOAT(fRec99[0]); + double fTemp98 = (0.2581988897471611 * fTemp97); + fRec98[0] = max((fRec98[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + fVbargraph99 = FAUSTFLOAT(fRec98[0]); + output49[i] = FAUSTFLOAT(fTemp98); + double fTemp99 = double(input50[i]); + fRec101[0] = max((fRec101[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); + fVbargraph100 = FAUSTFLOAT(fRec101[0]); + double fTemp100 = (0.2581988897471611 * fTemp99); + fRec100[0] = max((fRec100[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + fVbargraph101 = FAUSTFLOAT(fRec100[0]); + output50[i] = FAUSTFLOAT(fTemp100); + double fTemp101 = double(input51[i]); + fRec103[0] = max((fRec103[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); + fVbargraph102 = FAUSTFLOAT(fRec103[0]); + double fTemp102 = (0.2581988897471611 * fTemp101); + fRec102[0] = max((fRec102[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); + fVbargraph103 = FAUSTFLOAT(fRec102[0]); + output51[i] = FAUSTFLOAT(fTemp102); + double fTemp103 = double(input52[i]); + fRec105[0] = max((fRec105[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + fVbargraph104 = FAUSTFLOAT(fRec105[0]); + double fTemp104 = (0.2581988897471611 * fTemp103); + fRec104[0] = max((fRec104[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); + fVbargraph105 = FAUSTFLOAT(fRec104[0]); + output52[i] = FAUSTFLOAT(fTemp104); + double fTemp105 = double(input53[i]); + fRec107[0] = max((fRec107[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); + fVbargraph106 = FAUSTFLOAT(fRec107[0]); + double fTemp106 = (0.2581988897471611 * fTemp105); + fRec106[0] = max((fRec106[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); + fVbargraph107 = FAUSTFLOAT(fRec106[0]); + output53[i] = FAUSTFLOAT(fTemp106); + double fTemp107 = double(input54[i]); + fRec109[0] = max((fRec109[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); + fVbargraph108 = FAUSTFLOAT(fRec109[0]); + double fTemp108 = (0.2581988897471611 * fTemp107); + fRec108[0] = max((fRec108[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); + fVbargraph109 = FAUSTFLOAT(fRec108[0]); + output54[i] = FAUSTFLOAT(fTemp108); + double fTemp109 = double(input55[i]); + fRec111[0] = max((fRec111[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp109)))))); + fVbargraph110 = FAUSTFLOAT(fRec111[0]); + double fTemp110 = (0.2581988897471611 * fTemp109); + fRec110[0] = max((fRec110[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp110)))))); + fVbargraph111 = FAUSTFLOAT(fRec110[0]); + output55[i] = FAUSTFLOAT(fTemp110); + double fTemp111 = double(input56[i]); + fRec113[0] = max((fRec113[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp111)))))); + fVbargraph112 = FAUSTFLOAT(fRec113[0]); + double fTemp112 = (0.2581988897471611 * fTemp111); + fRec112[0] = max((fRec112[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp112)))))); + fVbargraph113 = FAUSTFLOAT(fRec112[0]); + output56[i] = FAUSTFLOAT(fTemp112); + double fTemp113 = double(input57[i]); + fRec115[0] = max((fRec115[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp113)))))); + fVbargraph114 = FAUSTFLOAT(fRec115[0]); + double fTemp114 = (0.2581988897471611 * fTemp113); + fRec114[0] = max((fRec114[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp114)))))); + fVbargraph115 = FAUSTFLOAT(fRec114[0]); + output57[i] = FAUSTFLOAT(fTemp114); + double fTemp115 = double(input58[i]); + fRec117[0] = max((fRec117[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp115)))))); + fVbargraph116 = FAUSTFLOAT(fRec117[0]); + double fTemp116 = (0.2581988897471611 * fTemp115); + fRec116[0] = max((fRec116[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp116)))))); + fVbargraph117 = FAUSTFLOAT(fRec116[0]); + output58[i] = FAUSTFLOAT(fTemp116); + double fTemp117 = double(input59[i]); + fRec119[0] = max((fRec119[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp117)))))); + fVbargraph118 = FAUSTFLOAT(fRec119[0]); + double fTemp118 = (0.2581988897471611 * fTemp117); + fRec118[0] = max((fRec118[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp118)))))); + fVbargraph119 = FAUSTFLOAT(fRec118[0]); + output59[i] = FAUSTFLOAT(fTemp118); + double fTemp119 = double(input60[i]); + fRec121[0] = max((fRec121[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp119)))))); + fVbargraph120 = FAUSTFLOAT(fRec121[0]); + double fTemp120 = (0.2581988897471611 * fTemp119); + fRec120[0] = max((fRec120[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp120)))))); + fVbargraph121 = FAUSTFLOAT(fRec120[0]); + output60[i] = FAUSTFLOAT(fTemp120); + double fTemp121 = double(input61[i]); + fRec123[0] = max((fRec123[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp121)))))); + fVbargraph122 = FAUSTFLOAT(fRec123[0]); + double fTemp122 = (0.2581988897471611 * fTemp121); + fRec122[0] = max((fRec122[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp122)))))); + fVbargraph123 = FAUSTFLOAT(fRec122[0]); + output61[i] = FAUSTFLOAT(fTemp122); + double fTemp123 = double(input62[i]); + fRec125[0] = max((fRec125[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp123)))))); + fVbargraph124 = FAUSTFLOAT(fRec125[0]); + double fTemp124 = (0.2581988897471611 * fTemp123); + fRec124[0] = max((fRec124[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp124)))))); + fVbargraph125 = FAUSTFLOAT(fRec124[0]); + output62[i] = FAUSTFLOAT(fTemp124); + double fTemp125 = double(input63[i]); + fRec127[0] = max((fRec127[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp125)))))); + fVbargraph126 = FAUSTFLOAT(fRec127[0]); + double fTemp126 = (0.2581988897471611 * fTemp125); + fRec126[0] = max((fRec126[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); + fVbargraph127 = FAUSTFLOAT(fRec126[0]); + output63[i] = FAUSTFLOAT(fTemp126); + double fTemp127 = double(input64[i]); + fRec129[0] = max((fRec129[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp127)))))); + fVbargraph128 = FAUSTFLOAT(fRec129[0]); + double fTemp128 = (0.24253562503633297 * fTemp127); + fRec128[0] = max((fRec128[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp128)))))); + fVbargraph129 = FAUSTFLOAT(fRec128[0]); + output64[i] = FAUSTFLOAT(fTemp128); + double fTemp129 = double(input65[i]); + fRec131[0] = max((fRec131[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp129)))))); + fVbargraph130 = FAUSTFLOAT(fRec131[0]); + double fTemp130 = (0.24253562503633297 * fTemp129); + fRec130[0] = max((fRec130[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp130)))))); + fVbargraph131 = FAUSTFLOAT(fRec130[0]); + output65[i] = FAUSTFLOAT(fTemp130); + double fTemp131 = double(input66[i]); + fRec133[0] = max((fRec133[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp131)))))); + fVbargraph132 = FAUSTFLOAT(fRec133[0]); + double fTemp132 = (0.24253562503633297 * fTemp131); + fRec132[0] = max((fRec132[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp132)))))); + fVbargraph133 = FAUSTFLOAT(fRec132[0]); + output66[i] = FAUSTFLOAT(fTemp132); + double fTemp133 = double(input67[i]); + fRec135[0] = max((fRec135[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp133)))))); + fVbargraph134 = FAUSTFLOAT(fRec135[0]); + double fTemp134 = (0.24253562503633297 * fTemp133); + fRec134[0] = max((fRec134[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp134)))))); + fVbargraph135 = FAUSTFLOAT(fRec134[0]); + output67[i] = FAUSTFLOAT(fTemp134); + double fTemp135 = double(input68[i]); + fRec137[0] = max((fRec137[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp135)))))); + fVbargraph136 = FAUSTFLOAT(fRec137[0]); + double fTemp136 = (0.24253562503633297 * fTemp135); + fRec136[0] = max((fRec136[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp136)))))); + fVbargraph137 = FAUSTFLOAT(fRec136[0]); + output68[i] = FAUSTFLOAT(fTemp136); + double fTemp137 = double(input69[i]); + fRec139[0] = max((fRec139[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp137)))))); + fVbargraph138 = FAUSTFLOAT(fRec139[0]); + double fTemp138 = (0.24253562503633297 * fTemp137); + fRec138[0] = max((fRec138[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp138)))))); + fVbargraph139 = FAUSTFLOAT(fRec138[0]); + output69[i] = FAUSTFLOAT(fTemp138); + double fTemp139 = double(input70[i]); + fRec141[0] = max((fRec141[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp139)))))); + fVbargraph140 = FAUSTFLOAT(fRec141[0]); + double fTemp140 = (0.24253562503633297 * fTemp139); + fRec140[0] = max((fRec140[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp140)))))); + fVbargraph141 = FAUSTFLOAT(fRec140[0]); + output70[i] = FAUSTFLOAT(fTemp140); + double fTemp141 = double(input71[i]); + fRec143[0] = max((fRec143[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp141)))))); + fVbargraph142 = FAUSTFLOAT(fRec143[0]); + double fTemp142 = (0.24253562503633297 * fTemp141); + fRec142[0] = max((fRec142[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp142)))))); + fVbargraph143 = FAUSTFLOAT(fRec142[0]); + output71[i] = FAUSTFLOAT(fTemp142); + double fTemp143 = double(input72[i]); + fRec145[0] = max((fRec145[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp143)))))); + fVbargraph144 = FAUSTFLOAT(fRec145[0]); + double fTemp144 = (0.24253562503633297 * fTemp143); + fRec144[0] = max((fRec144[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp144)))))); + fVbargraph145 = FAUSTFLOAT(fRec144[0]); + output72[i] = FAUSTFLOAT(fTemp144); + double fTemp145 = double(input73[i]); + fRec147[0] = max((fRec147[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp145)))))); + fVbargraph146 = FAUSTFLOAT(fRec147[0]); + double fTemp146 = (0.24253562503633297 * fTemp145); + fRec146[0] = max((fRec146[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp146)))))); + fVbargraph147 = FAUSTFLOAT(fRec146[0]); + output73[i] = FAUSTFLOAT(fTemp146); + double fTemp147 = double(input74[i]); + fRec149[0] = max((fRec149[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp147)))))); + fVbargraph148 = FAUSTFLOAT(fRec149[0]); + double fTemp148 = (0.24253562503633297 * fTemp147); + fRec148[0] = max((fRec148[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp148)))))); + fVbargraph149 = FAUSTFLOAT(fRec148[0]); + output74[i] = FAUSTFLOAT(fTemp148); + double fTemp149 = double(input75[i]); + fRec151[0] = max((fRec151[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp149)))))); + fVbargraph150 = FAUSTFLOAT(fRec151[0]); + double fTemp150 = (0.24253562503633297 * fTemp149); + fRec150[0] = max((fRec150[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp150)))))); + fVbargraph151 = FAUSTFLOAT(fRec150[0]); + output75[i] = FAUSTFLOAT(fTemp150); + double fTemp151 = double(input76[i]); + fRec153[0] = max((fRec153[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp151)))))); + fVbargraph152 = FAUSTFLOAT(fRec153[0]); + double fTemp152 = (0.24253562503633297 * fTemp151); + fRec152[0] = max((fRec152[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); + fVbargraph153 = FAUSTFLOAT(fRec152[0]); + output76[i] = FAUSTFLOAT(fTemp152); + double fTemp153 = double(input77[i]); + fRec155[0] = max((fRec155[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp153)))))); + fVbargraph154 = FAUSTFLOAT(fRec155[0]); + double fTemp154 = (0.24253562503633297 * fTemp153); + fRec154[0] = max((fRec154[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp154)))))); + fVbargraph155 = FAUSTFLOAT(fRec154[0]); + output77[i] = FAUSTFLOAT(fTemp154); + double fTemp155 = double(input78[i]); + fRec157[0] = max((fRec157[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); + fVbargraph156 = FAUSTFLOAT(fRec157[0]); + double fTemp156 = (0.24253562503633297 * fTemp155); + fRec156[0] = max((fRec156[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp156)))))); + fVbargraph157 = FAUSTFLOAT(fRec156[0]); + output78[i] = FAUSTFLOAT(fTemp156); + double fTemp157 = double(input79[i]); + fRec159[0] = max((fRec159[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp157)))))); + fVbargraph158 = FAUSTFLOAT(fRec159[0]); + double fTemp158 = (0.24253562503633297 * fTemp157); + fRec158[0] = max((fRec158[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp158)))))); + fVbargraph159 = FAUSTFLOAT(fRec158[0]); + output79[i] = FAUSTFLOAT(fTemp158); + double fTemp159 = double(input80[i]); + fRec161[0] = max((fRec161[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp159)))))); + fVbargraph160 = FAUSTFLOAT(fRec161[0]); + double fTemp160 = (0.24253562503633297 * fTemp159); + fRec160[0] = max((fRec160[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp160)))))); + fVbargraph161 = FAUSTFLOAT(fRec160[0]); + output80[i] = FAUSTFLOAT(fTemp160); + double fTemp161 = double(input81[i]); + fRec163[0] = max((fRec163[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp161)))))); + fVbargraph162 = FAUSTFLOAT(fRec163[0]); + double fTemp162 = (0.22941573387056174 * fTemp161); + fRec162[0] = max((fRec162[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp162)))))); + fVbargraph163 = FAUSTFLOAT(fRec162[0]); + output81[i] = FAUSTFLOAT(fTemp162); + double fTemp163 = double(input82[i]); + fRec165[0] = max((fRec165[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp163)))))); + fVbargraph164 = FAUSTFLOAT(fRec165[0]); + double fTemp164 = (0.22941573387056174 * fTemp163); + fRec164[0] = max((fRec164[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp164)))))); + fVbargraph165 = FAUSTFLOAT(fRec164[0]); + output82[i] = FAUSTFLOAT(fTemp164); + double fTemp165 = double(input83[i]); + fRec167[0] = max((fRec167[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp165)))))); + fVbargraph166 = FAUSTFLOAT(fRec167[0]); + double fTemp166 = (0.22941573387056174 * fTemp165); + fRec166[0] = max((fRec166[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp166)))))); + fVbargraph167 = FAUSTFLOAT(fRec166[0]); + output83[i] = FAUSTFLOAT(fTemp166); + double fTemp167 = double(input84[i]); + fRec169[0] = max((fRec169[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp167)))))); + fVbargraph168 = FAUSTFLOAT(fRec169[0]); + double fTemp168 = (0.22941573387056174 * fTemp167); + fRec168[0] = max((fRec168[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp168)))))); + fVbargraph169 = FAUSTFLOAT(fRec168[0]); + output84[i] = FAUSTFLOAT(fTemp168); + double fTemp169 = double(input85[i]); + fRec171[0] = max((fRec171[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp169)))))); + fVbargraph170 = FAUSTFLOAT(fRec171[0]); + double fTemp170 = (0.22941573387056174 * fTemp169); + fRec170[0] = max((fRec170[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp170)))))); + fVbargraph171 = FAUSTFLOAT(fRec170[0]); + output85[i] = FAUSTFLOAT(fTemp170); + double fTemp171 = double(input86[i]); + fRec173[0] = max((fRec173[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp171)))))); + fVbargraph172 = FAUSTFLOAT(fRec173[0]); + double fTemp172 = (0.22941573387056174 * fTemp171); + fRec172[0] = max((fRec172[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp172)))))); + fVbargraph173 = FAUSTFLOAT(fRec172[0]); + output86[i] = FAUSTFLOAT(fTemp172); + double fTemp173 = double(input87[i]); + fRec175[0] = max((fRec175[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp173)))))); + fVbargraph174 = FAUSTFLOAT(fRec175[0]); + double fTemp174 = (0.22941573387056174 * fTemp173); + fRec174[0] = max((fRec174[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp174)))))); + fVbargraph175 = FAUSTFLOAT(fRec174[0]); + output87[i] = FAUSTFLOAT(fTemp174); + double fTemp175 = double(input88[i]); + fRec177[0] = max((fRec177[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp175)))))); + fVbargraph176 = FAUSTFLOAT(fRec177[0]); + double fTemp176 = (0.22941573387056174 * fTemp175); + fRec176[0] = max((fRec176[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp176)))))); + fVbargraph177 = FAUSTFLOAT(fRec176[0]); + output88[i] = FAUSTFLOAT(fTemp176); + double fTemp177 = double(input89[i]); + fRec179[0] = max((fRec179[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp177)))))); + fVbargraph178 = FAUSTFLOAT(fRec179[0]); + double fTemp178 = (0.22941573387056174 * fTemp177); + fRec178[0] = max((fRec178[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp178)))))); + fVbargraph179 = FAUSTFLOAT(fRec178[0]); + output89[i] = FAUSTFLOAT(fTemp178); + double fTemp179 = double(input90[i]); + fRec181[0] = max((fRec181[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp179)))))); + fVbargraph180 = FAUSTFLOAT(fRec181[0]); + double fTemp180 = (0.22941573387056174 * fTemp179); + fRec180[0] = max((fRec180[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp180)))))); + fVbargraph181 = FAUSTFLOAT(fRec180[0]); + output90[i] = FAUSTFLOAT(fTemp180); + double fTemp181 = double(input91[i]); + fRec183[0] = max((fRec183[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp181)))))); + fVbargraph182 = FAUSTFLOAT(fRec183[0]); + double fTemp182 = (0.22941573387056174 * fTemp181); + fRec182[0] = max((fRec182[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp182)))))); + fVbargraph183 = FAUSTFLOAT(fRec182[0]); + output91[i] = FAUSTFLOAT(fTemp182); + double fTemp183 = double(input92[i]); + fRec185[0] = max((fRec185[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp183)))))); + fVbargraph184 = FAUSTFLOAT(fRec185[0]); + double fTemp184 = (0.22941573387056174 * fTemp183); + fRec184[0] = max((fRec184[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp184)))))); + fVbargraph185 = FAUSTFLOAT(fRec184[0]); + output92[i] = FAUSTFLOAT(fTemp184); + double fTemp185 = double(input93[i]); + fRec187[0] = max((fRec187[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp185)))))); + fVbargraph186 = FAUSTFLOAT(fRec187[0]); + double fTemp186 = (0.22941573387056174 * fTemp185); + fRec186[0] = max((fRec186[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp186)))))); + fVbargraph187 = FAUSTFLOAT(fRec186[0]); + output93[i] = FAUSTFLOAT(fTemp186); + double fTemp187 = double(input94[i]); + fRec189[0] = max((fRec189[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp187)))))); + fVbargraph188 = FAUSTFLOAT(fRec189[0]); + double fTemp188 = (0.22941573387056174 * fTemp187); + fRec188[0] = max((fRec188[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp188)))))); + fVbargraph189 = FAUSTFLOAT(fRec188[0]); + output94[i] = FAUSTFLOAT(fTemp188); + double fTemp189 = double(input95[i]); + fRec191[0] = max((fRec191[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp189)))))); + fVbargraph190 = FAUSTFLOAT(fRec191[0]); + double fTemp190 = (0.22941573387056174 * fTemp189); + fRec190[0] = max((fRec190[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp190)))))); + fVbargraph191 = FAUSTFLOAT(fRec190[0]); + output95[i] = FAUSTFLOAT(fTemp190); + double fTemp191 = double(input96[i]); + fRec193[0] = max((fRec193[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp191)))))); + fVbargraph192 = FAUSTFLOAT(fRec193[0]); + double fTemp192 = (0.22941573387056174 * fTemp191); + fRec192[0] = max((fRec192[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp192)))))); + fVbargraph193 = FAUSTFLOAT(fRec192[0]); + output96[i] = FAUSTFLOAT(fTemp192); + double fTemp193 = double(input97[i]); + fRec195[0] = max((fRec195[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp193)))))); + fVbargraph194 = FAUSTFLOAT(fRec195[0]); + double fTemp194 = (0.22941573387056174 * fTemp193); + fRec194[0] = max((fRec194[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp194)))))); + fVbargraph195 = FAUSTFLOAT(fRec194[0]); + output97[i] = FAUSTFLOAT(fTemp194); + double fTemp195 = double(input98[i]); + fRec197[0] = max((fRec197[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp195)))))); + fVbargraph196 = FAUSTFLOAT(fRec197[0]); + double fTemp196 = (0.22941573387056174 * fTemp195); + fRec196[0] = max((fRec196[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp196)))))); + fVbargraph197 = FAUSTFLOAT(fRec196[0]); + output98[i] = FAUSTFLOAT(fTemp196); + double fTemp197 = double(input99[i]); + fRec199[0] = max((fRec199[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp197)))))); + fVbargraph198 = FAUSTFLOAT(fRec199[0]); + double fTemp198 = (0.22941573387056174 * fTemp197); + fRec198[0] = max((fRec198[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp198)))))); + fVbargraph199 = FAUSTFLOAT(fRec198[0]); + output99[i] = FAUSTFLOAT(fTemp198); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec25[1] = fRec25[0]; + fRec24[1] = fRec24[0]; + fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; + fRec33[1] = fRec33[0]; + fRec32[1] = fRec32[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fRec37[1] = fRec37[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; + fRec41[1] = fRec41[0]; + fRec40[1] = fRec40[0]; + fRec43[1] = fRec43[0]; + fRec42[1] = fRec42[0]; + fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; + fRec47[1] = fRec47[0]; + fRec46[1] = fRec46[0]; + fRec49[1] = fRec49[0]; + fRec48[1] = fRec48[0]; + fRec51[1] = fRec51[0]; + fRec50[1] = fRec50[0]; + fRec53[1] = fRec53[0]; + fRec52[1] = fRec52[0]; + fRec55[1] = fRec55[0]; + fRec54[1] = fRec54[0]; + fRec57[1] = fRec57[0]; + fRec56[1] = fRec56[0]; + fRec59[1] = fRec59[0]; + fRec58[1] = fRec58[0]; + fRec61[1] = fRec61[0]; + fRec60[1] = fRec60[0]; + fRec63[1] = fRec63[0]; + fRec62[1] = fRec62[0]; + fRec65[1] = fRec65[0]; + fRec64[1] = fRec64[0]; + fRec67[1] = fRec67[0]; + fRec66[1] = fRec66[0]; + fRec69[1] = fRec69[0]; + fRec68[1] = fRec68[0]; + fRec71[1] = fRec71[0]; + fRec70[1] = fRec70[0]; + fRec73[1] = fRec73[0]; + fRec72[1] = fRec72[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; + fRec77[1] = fRec77[0]; + fRec76[1] = fRec76[0]; + fRec79[1] = fRec79[0]; + fRec78[1] = fRec78[0]; + fRec81[1] = fRec81[0]; + fRec80[1] = fRec80[0]; + fRec83[1] = fRec83[0]; + fRec82[1] = fRec82[0]; + fRec85[1] = fRec85[0]; + fRec84[1] = fRec84[0]; + fRec87[1] = fRec87[0]; + fRec86[1] = fRec86[0]; + fRec89[1] = fRec89[0]; + fRec88[1] = fRec88[0]; + fRec91[1] = fRec91[0]; + fRec90[1] = fRec90[0]; + fRec93[1] = fRec93[0]; + fRec92[1] = fRec92[0]; + fRec95[1] = fRec95[0]; + fRec94[1] = fRec94[0]; + fRec97[1] = fRec97[0]; + fRec96[1] = fRec96[0]; + fRec99[1] = fRec99[0]; + fRec98[1] = fRec98[0]; + fRec101[1] = fRec101[0]; + fRec100[1] = fRec100[0]; + fRec103[1] = fRec103[0]; + fRec102[1] = fRec102[0]; + fRec105[1] = fRec105[0]; + fRec104[1] = fRec104[0]; + fRec107[1] = fRec107[0]; + fRec106[1] = fRec106[0]; + fRec109[1] = fRec109[0]; + fRec108[1] = fRec108[0]; + fRec111[1] = fRec111[0]; + fRec110[1] = fRec110[0]; + fRec113[1] = fRec113[0]; + fRec112[1] = fRec112[0]; + fRec115[1] = fRec115[0]; + fRec114[1] = fRec114[0]; + fRec117[1] = fRec117[0]; + fRec116[1] = fRec116[0]; + fRec119[1] = fRec119[0]; + fRec118[1] = fRec118[0]; + fRec121[1] = fRec121[0]; + fRec120[1] = fRec120[0]; + fRec123[1] = fRec123[0]; + fRec122[1] = fRec122[0]; + fRec125[1] = fRec125[0]; + fRec124[1] = fRec124[0]; + fRec127[1] = fRec127[0]; + fRec126[1] = fRec126[0]; + fRec129[1] = fRec129[0]; + fRec128[1] = fRec128[0]; + fRec131[1] = fRec131[0]; + fRec130[1] = fRec130[0]; + fRec133[1] = fRec133[0]; + fRec132[1] = fRec132[0]; + fRec135[1] = fRec135[0]; + fRec134[1] = fRec134[0]; + fRec137[1] = fRec137[0]; + fRec136[1] = fRec136[0]; + fRec139[1] = fRec139[0]; + fRec138[1] = fRec138[0]; + fRec141[1] = fRec141[0]; + fRec140[1] = fRec140[0]; + fRec143[1] = fRec143[0]; + fRec142[1] = fRec142[0]; + fRec145[1] = fRec145[0]; + fRec144[1] = fRec144[0]; + fRec147[1] = fRec147[0]; + fRec146[1] = fRec146[0]; + fRec149[1] = fRec149[0]; + fRec148[1] = fRec148[0]; + fRec151[1] = fRec151[0]; + fRec150[1] = fRec150[0]; + fRec153[1] = fRec153[0]; + fRec152[1] = fRec152[0]; + fRec155[1] = fRec155[0]; + fRec154[1] = fRec154[0]; + fRec157[1] = fRec157[0]; + fRec156[1] = fRec156[0]; + fRec159[1] = fRec159[0]; + fRec158[1] = fRec158[0]; + fRec161[1] = fRec161[0]; + fRec160[1] = fRec160[0]; + fRec163[1] = fRec163[0]; + fRec162[1] = fRec162[0]; + fRec165[1] = fRec165[0]; + fRec164[1] = fRec164[0]; + fRec167[1] = fRec167[0]; + fRec166[1] = fRec166[0]; + fRec169[1] = fRec169[0]; + fRec168[1] = fRec168[0]; + fRec171[1] = fRec171[0]; + fRec170[1] = fRec170[0]; + fRec173[1] = fRec173[0]; + fRec172[1] = fRec172[0]; + fRec175[1] = fRec175[0]; + fRec174[1] = fRec174[0]; + fRec177[1] = fRec177[0]; + fRec176[1] = fRec176[0]; + fRec179[1] = fRec179[0]; + fRec178[1] = fRec178[0]; + fRec181[1] = fRec181[0]; + fRec180[1] = fRec180[0]; + fRec183[1] = fRec183[0]; + fRec182[1] = fRec182[0]; + fRec185[1] = fRec185[0]; + fRec184[1] = fRec184[0]; + fRec187[1] = fRec187[0]; + fRec186[1] = fRec186[0]; + fRec189[1] = fRec189[0]; + fRec188[1] = fRec188[0]; + fRec191[1] = fRec191[0]; + fRec190[1] = fRec190[0]; + fRec193[1] = fRec193[0]; + fRec192[1] = fRec192[0]; + fRec195[1] = fRec195[0]; + fRec194[1] = fRec194[0]; + fRec197[1] = fRec197[0]; + fRec196[1] = fRec196[0]; + fRec199[1] = fRec199[0]; + fRec198[1] = fRec198[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverter1.cpp b/source/HOAUGens/HOAConverterAcnN3d2FuMa1.cpp similarity index 88% rename from source/HOAUGens/HOAConverter1.cpp rename to source/HOAUGens/HOAConverterAcnN3d2FuMa1.cpp index 4aca475ad7..dc97ccb3b6 100644 --- a/source/HOAUGens/HOAConverter1.cpp +++ b/source/HOAUGens/HOAConverterAcnN3d2FuMa1.cpp @@ -2,9 +2,10 @@ author: "Pierre Lecomte" copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAConverter1" +name: "HOAConverterAcnN3d2FuMa1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double rint(double dummy0); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,23 +633,21 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; double fRec1[2]; FAUSTFLOAT fVbargraph0; double fRec0[2]; FAUSTFLOAT fVbargraph1; double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec4[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec2[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec6[2]; - FAUSTFLOAT fVbargraph6; double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; FAUSTFLOAT fVbargraph7; public: @@ -643,18 +657,18 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAConverter1"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2FuMa1"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); @@ -733,13 +747,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(1.0); - fHslider1 = FAUSTFLOAT(1.0); } @@ -757,7 +769,7 @@ class mydsp : public dsp { } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; + fRec2[l3] = 0.0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { @@ -765,15 +777,15 @@ class mydsp : public dsp { } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec4[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } @@ -792,62 +804,56 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAConverter1"); - ui_interface->declare(&fHslider1, "0", ""); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fHslider0, "0", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->openVerticalBox("HOAConverterAcnN3d2FuMa1"); ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("ACN N3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39ffd30", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1c25170", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a0cdc0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c39400", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a19080", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c43310", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a127b0", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c2f250", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "2", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("FuMa"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a06d00", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1c296e0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a1e140", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c337c0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a24680", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1c3d5f0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a2a4c0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1c475e0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -864,60 +870,43 @@ class mydsp : public dsp { FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; - int iSlow0 = int(((rint(double(fHslider0)) + (3.0 * rint(double(fHslider1)))) + -4.0)); - int iSlow1 = (iSlow0 >= 5); - int iSlow2 = (iSlow0 >= 3); - int iSlow3 = (iSlow0 >= 2); - int iSlow4 = (iSlow0 >= 7); - int iSlow5 = (iSlow0 >= 6); - int iSlow6 = (iSlow0 >= 8); - int iSlow7 = (iSlow0 >= 1); - int iSlow8 = (iSlow0 >= 4); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec1[0]); double fTemp1 = (0.70710678118654746 * fTemp0); - double fTemp2 = (1.4142135623730951 * fTemp0); - double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = double(input1[i]); - fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input3[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp3 = (0.57735026918962584 * fTemp2); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); double fTemp5 = (0.57735026918962584 * fTemp4); - double fTemp6 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec4[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = double(input2[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); double fTemp7 = (0.57735026918962584 * fTemp6); - double fTemp8 = (1.7320508075688772 * fTemp4); - double fTemp9 = double(input2[i]); - fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph4 = FAUSTFLOAT(fRec5[0]); - double fTemp10 = (1.7320508075688772 * fTemp9); - double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph5 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.57735026918962584 * fTemp9); - double fTemp13 = (1.7320508075688772 * fTemp6); - double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); - fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph6 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); - fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph7 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp15); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp7); fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; } @@ -926,7 +915,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1158,7 +1146,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1221,7 +1209,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1250,11 +1238,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAConverter2.cpp b/source/HOAUGens/HOAConverterAcnN3d2FuMa2.cpp similarity index 83% rename from source/HOAUGens/HOAConverter2.cpp rename to source/HOAUGens/HOAConverterAcnN3d2FuMa2.cpp index d3b00c3e53..6cc77d8554 100644 --- a/source/HOAUGens/HOAConverter2.cpp +++ b/source/HOAUGens/HOAConverterAcnN3d2FuMa2.cpp @@ -2,9 +2,10 @@ author: "Pierre Lecomte" copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAConverter2" +name: "HOAConverterAcnN3d2FuMa2" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double rint(double dummy0); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,43 +633,41 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; double fRec1[2]; FAUSTFLOAT fVbargraph0; double fRec0[2]; FAUSTFLOAT fVbargraph1; double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec4[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec2[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec6[2]; - FAUSTFLOAT fVbargraph6; double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; FAUSTFLOAT fVbargraph7; double fRec9[2]; FAUSTFLOAT fVbargraph8; - double fRec10[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph9; double fRec11[2]; FAUSTFLOAT fVbargraph10; - double fRec8[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph11; double fRec13[2]; FAUSTFLOAT fVbargraph12; - double fRec14[2]; - FAUSTFLOAT fVbargraph13; double fRec12[2]; - FAUSTFLOAT fVbargraph14; + FAUSTFLOAT fVbargraph13; double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; FAUSTFLOAT fVbargraph15; - double fRec16[2]; - FAUSTFLOAT fVbargraph16; double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; FAUSTFLOAT fVbargraph17; public: @@ -663,18 +677,18 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAConverter2"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2FuMa2"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); @@ -793,13 +807,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(1.0); - fHslider1 = FAUSTFLOAT(1.0); } @@ -817,7 +829,7 @@ class mydsp : public dsp { } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; + fRec2[l3] = 0.0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { @@ -825,15 +837,15 @@ class mydsp : public dsp { } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec4[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { @@ -841,7 +853,7 @@ class mydsp : public dsp { } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec10[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -849,7 +861,7 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec8[l11] = 0.0; + fRec10[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -857,23 +869,23 @@ class mydsp : public dsp { } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec14[l13] = 0.0; + fRec12[l13] = 0.0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec12[l14] = 0.0; + fRec15[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0; + fRec17[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec17[l17] = 0.0; + fRec16[l17] = 0.0; } @@ -892,106 +904,100 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAConverter2"); - ui_interface->declare(&fHslider1, "0", ""); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fHslider0, "0", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->openVerticalBox("HOAConverterAcnN3d2FuMa2"); ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("ACN N3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22c44e0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2357170", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22d1570", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x236b400", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22dd840", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2375310", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22d6f70", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2361250", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22f49a0", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23a80e0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x230b710", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2393ca0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22fa260", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x237f310", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2310fd0", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2389850", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23006b0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x239dbb0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "2", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("FuMa"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22cb4b0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x235b6e0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22e2900", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23657c0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22e8e40", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x236f5f0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22eec80", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23795e0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2305ad0", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2383960", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2317010", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x238dea0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x231d4d0", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2397f70", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2324010", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23a23c0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x232ac30", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23ac3b0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1018,107 +1024,88 @@ class mydsp : public dsp { FAUSTFLOAT* output6 = outputs[6]; FAUSTFLOAT* output7 = outputs[7]; FAUSTFLOAT* output8 = outputs[8]; - int iSlow0 = int(((rint(double(fHslider0)) + (3.0 * rint(double(fHslider1)))) + -4.0)); - int iSlow1 = (iSlow0 >= 5); - int iSlow2 = (iSlow0 >= 3); - int iSlow3 = (iSlow0 >= 2); - int iSlow4 = (iSlow0 >= 7); - int iSlow5 = (iSlow0 >= 6); - int iSlow6 = (iSlow0 >= 8); - int iSlow7 = (iSlow0 >= 1); - int iSlow8 = (iSlow0 >= 4); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec1[0]); double fTemp1 = (0.70710678118654746 * fTemp0); - double fTemp2 = (1.4142135623730951 * fTemp0); - double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = double(input1[i]); - fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input3[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp3 = (0.57735026918962584 * fTemp2); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); double fTemp5 = (0.57735026918962584 * fTemp4); - double fTemp6 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec4[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = double(input2[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); double fTemp7 = (0.57735026918962584 * fTemp6); - double fTemp8 = (1.7320508075688772 * fTemp4); - double fTemp9 = double(input2[i]); - fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph4 = FAUSTFLOAT(fRec5[0]); - double fTemp10 = (1.7320508075688772 * fTemp9); - double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph5 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.57735026918962584 * fTemp9); - double fTemp13 = (1.7320508075688772 * fTemp6); - double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); - fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph6 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); - fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph7 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = double(input4[i]); - fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = double(input6[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph8 = FAUSTFLOAT(fRec9[0]); - double fTemp17 = double(input6[i]); - fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph9 = FAUSTFLOAT(fRec10[0]); - double fTemp18 = (0.44721359549995793 * fTemp17); - double fTemp19 = (2.2360679774997898 * fTemp16); - double fTemp20 = double(input8[i]); - fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + double fTemp9 = (0.44721359549995793 * fTemp8); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = double(input7[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph10 = FAUSTFLOAT(fRec11[0]); - double fTemp21 = (iSlow1?(iSlow4?(iSlow6?fTemp16:(0.86602540378443871 * fTemp20)):(iSlow5?(1.9364916731037085 * fTemp20):fTemp17)):(iSlow2?(iSlow8?fTemp16:fTemp19):(iSlow3?fTemp18:(iSlow7?(0.44721359549995793 * fTemp16):fTemp16)))); - fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph11 = FAUSTFLOAT(fRec8[0]); - output4[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = double(input5[i]); - fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + double fTemp11 = (0.5163977794943222 * fTemp10); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = double(input5[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph12 = FAUSTFLOAT(fRec13[0]); - double fTemp23 = double(input7[i]); - fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph13 = FAUSTFLOAT(fRec14[0]); - double fTemp24 = (iSlow1?(iSlow4?(iSlow6?fTemp22:(0.86602540378443871 * fTemp17)):(iSlow5?(1.9364916731037085 * fTemp17):(1.1547005383792515 * fTemp23))):(iSlow2?(iSlow8?fTemp22:(2.2360679774997898 * fTemp22)):(iSlow3?(0.5163977794943222 * fTemp23):(iSlow7?(0.44721359549995793 * fTemp22):fTemp22)))); - fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph14 = FAUSTFLOAT(fRec12[0]); - output5[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (iSlow1?(iSlow4?(iSlow6?fTemp17:fTemp16):(iSlow5?fTemp19:(1.1547005383792515 * fTemp22))):(iSlow2?(iSlow8?fTemp17:(2.2360679774997898 * fTemp17)):(iSlow3?(0.5163977794943222 * fTemp22):(iSlow7?fTemp18:fTemp17)))); - fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph15 = FAUSTFLOAT(fRec15[0]); - output6[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (iSlow1?(iSlow4?(iSlow6?fTemp23:(0.86602540378443871 * fTemp22)):(iSlow5?(1.9364916731037085 * fTemp22):(1.1547005383792515 * fTemp20))):(iSlow2?(iSlow8?fTemp23:(2.2360679774997898 * fTemp23)):(iSlow3?(0.5163977794943222 * fTemp20):(iSlow7?(0.44721359549995793 * fTemp23):fTemp23)))); - fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph16 = FAUSTFLOAT(fRec16[0]); - output7[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (iSlow1?(iSlow4?(iSlow6?fTemp20:(0.86602540378443871 * fTemp23)):(iSlow5?(1.9364916731037085 * fTemp23):(1.1547005383792515 * fTemp16))):(iSlow2?(iSlow8?fTemp20:(2.2360679774997898 * fTemp20)):(iSlow3?(0.5163977794943222 * fTemp16):(iSlow7?(0.44721359549995793 * fTemp20):fTemp20)))); - fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph17 = FAUSTFLOAT(fRec17[0]); - output8[i] = FAUSTFLOAT(fTemp27); + double fTemp13 = (0.5163977794943222 * fTemp12); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = double(input8[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp15 = (0.5163977794943222 * fTemp14); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input4[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp17 = (0.5163977794943222 * fTemp16); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp17); fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; - fRec11[1] = fRec11[0]; fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; fRec13[1] = fRec13[0]; - fRec14[1] = fRec14[0]; fRec12[1] = fRec12[0]; fRec15[1] = fRec15[0]; - fRec16[1] = fRec16[0]; + fRec14[1] = fRec14[0]; fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; } @@ -1127,7 +1114,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1359,7 +1345,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1422,7 +1408,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1451,11 +1437,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAConverter3.cpp b/source/HOAUGens/HOAConverterAcnN3d2FuMa3.cpp similarity index 79% rename from source/HOAUGens/HOAConverter3.cpp rename to source/HOAUGens/HOAConverterAcnN3d2FuMa3.cpp index 789104c2c5..8491a31417 100644 --- a/source/HOAUGens/HOAConverter3.cpp +++ b/source/HOAUGens/HOAConverterAcnN3d2FuMa3.cpp @@ -2,9 +2,10 @@ author: "Pierre Lecomte" copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAConverter3" +name: "HOAConverterAcnN3d2FuMa3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double rint(double dummy0); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,71 +633,69 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; double fRec1[2]; FAUSTFLOAT fVbargraph0; double fRec0[2]; FAUSTFLOAT fVbargraph1; double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec4[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec2[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec6[2]; - FAUSTFLOAT fVbargraph6; double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; FAUSTFLOAT fVbargraph7; double fRec9[2]; FAUSTFLOAT fVbargraph8; - double fRec10[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph9; double fRec11[2]; FAUSTFLOAT fVbargraph10; - double fRec8[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph11; double fRec13[2]; FAUSTFLOAT fVbargraph12; - double fRec14[2]; - FAUSTFLOAT fVbargraph13; double fRec12[2]; - FAUSTFLOAT fVbargraph14; + FAUSTFLOAT fVbargraph13; double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; FAUSTFLOAT fVbargraph15; - double fRec16[2]; - FAUSTFLOAT fVbargraph16; double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; FAUSTFLOAT fVbargraph17; double fRec19[2]; FAUSTFLOAT fVbargraph18; - double fRec20[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph19; double fRec21[2]; FAUSTFLOAT fVbargraph20; - double fRec18[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph21; double fRec23[2]; FAUSTFLOAT fVbargraph22; - double fRec24[2]; - FAUSTFLOAT fVbargraph23; double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; FAUSTFLOAT fVbargraph24; - double fRec26[2]; + double fRec24[2]; FAUSTFLOAT fVbargraph25; - double fRec25[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph26; - double fRec28[2]; + double fRec26[2]; FAUSTFLOAT fVbargraph27; - double fRec27[2]; - FAUSTFLOAT fVbargraph28; double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; FAUSTFLOAT fVbargraph29; - double fRec30[2]; - FAUSTFLOAT fVbargraph30; double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; FAUSTFLOAT fVbargraph31; public: @@ -691,18 +705,18 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAConverter3"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnN3d2FuMa3"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); @@ -877,13 +891,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(1.0); - fHslider1 = FAUSTFLOAT(1.0); } @@ -901,7 +913,7 @@ class mydsp : public dsp { } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; + fRec2[l3] = 0.0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { @@ -909,15 +921,15 @@ class mydsp : public dsp { } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec4[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { @@ -925,7 +937,7 @@ class mydsp : public dsp { } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec10[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -933,7 +945,7 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec8[l11] = 0.0; + fRec10[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -941,23 +953,23 @@ class mydsp : public dsp { } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec14[l13] = 0.0; + fRec12[l13] = 0.0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec12[l14] = 0.0; + fRec15[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0; + fRec17[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec17[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -965,7 +977,7 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec20[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { @@ -973,7 +985,7 @@ class mydsp : public dsp { } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec18[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { @@ -981,39 +993,39 @@ class mydsp : public dsp { } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec22[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec22[l24] = 0.0; + fRec25[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + fRec24[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec25[l26] = 0.0; + fRec27[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec26[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec27[l28] = 0.0; + fRec29[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec29[l29] = 0.0; + fRec28[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec30[l30] = 0.0; + fRec31[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec31[l31] = 0.0; + fRec30[l31] = 0.0; } @@ -1032,166 +1044,160 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAConverter3"); - ui_interface->declare(&fHslider1, "0", ""); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Input (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider1, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fHslider0, "0", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Output (1-ACN_N3D,2-ACN_SN3D, 3-FuMa)", &fHslider0, 1.0, 1.0, 3.0, 1.0); + ui_interface->openVerticalBox("HOAConverterAcnN3d2FuMa3"); ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("ACN N3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c24220", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ad9fb0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c312b0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2aee240", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c3d570", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2af8150", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c36ca0", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ae4090", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c546e0", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b2af20", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c6b450", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b16ae0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c59fa0", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b02150", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c70d10", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b0c690", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c603f0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b209f0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c90930", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b739e0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ca7a20", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b5eb10", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1cb9680", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b49ee0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c962d0", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b351d0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1cad3c0", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b3f8d0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1cc5ee0", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b54420", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c9c800", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b68f70", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "2", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("FuMa"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c2b1f0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ade520", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c42630", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ae8600", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c48b70", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2af2430", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c4e9b0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2afc420", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c65810", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b067a0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c76d50", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b10ce0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c7d210", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b1adb0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c83d50", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b25200", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1c8a970", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b2f1f0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ca1d00", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b39900", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1cb3880", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b44000", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1cbfc50", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b4e530", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ccbe00", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b58d10", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1cd2b00", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b62ec0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1cd9c80", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b6da20", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ce0b40", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b77d90", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1232,172 +1238,151 @@ class mydsp : public dsp { FAUSTFLOAT* output13 = outputs[13]; FAUSTFLOAT* output14 = outputs[14]; FAUSTFLOAT* output15 = outputs[15]; - int iSlow0 = int(((rint(double(fHslider0)) + (3.0 * rint(double(fHslider1)))) + -4.0)); - int iSlow1 = (iSlow0 >= 5); - int iSlow2 = (iSlow0 >= 3); - int iSlow3 = (iSlow0 >= 2); - int iSlow4 = (iSlow0 >= 7); - int iSlow5 = (iSlow0 >= 6); - int iSlow6 = (iSlow0 >= 8); - int iSlow7 = (iSlow0 >= 1); - int iSlow8 = (iSlow0 >= 4); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec1[0]); double fTemp1 = (0.70710678118654746 * fTemp0); - double fTemp2 = (1.4142135623730951 * fTemp0); - double fTemp3 = (iSlow1?(iSlow4?(iSlow6?fTemp0:fTemp2):(iSlow5?fTemp2:fTemp1)):(iSlow2?fTemp0:(iSlow3?fTemp1:fTemp0))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = double(input1[i]); - fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input3[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp3 = (0.57735026918962584 * fTemp2); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); double fTemp5 = (0.57735026918962584 * fTemp4); - double fTemp6 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec4[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = double(input2[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); double fTemp7 = (0.57735026918962584 * fTemp6); - double fTemp8 = (1.7320508075688772 * fTemp4); - double fTemp9 = double(input2[i]); - fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph4 = FAUSTFLOAT(fRec5[0]); - double fTemp10 = (1.7320508075688772 * fTemp9); - double fTemp11 = (iSlow1?(iSlow4?(iSlow6?fTemp4:fTemp9):(iSlow5?fTemp10:fTemp6)):(iSlow2?(iSlow8?fTemp4:fTemp8):(iSlow3?fTemp7:(iSlow7?fTemp5:fTemp4)))); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph5 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.57735026918962584 * fTemp9); - double fTemp13 = (1.7320508075688772 * fTemp6); - double fTemp14 = (iSlow1?(iSlow4?(iSlow6?fTemp9:fTemp6):(iSlow5?fTemp13:fTemp4)):(iSlow2?(iSlow8?fTemp9:fTemp10):(iSlow3?fTemp5:(iSlow7?fTemp12:fTemp9)))); - fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph6 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (iSlow1?(iSlow4?(iSlow6?fTemp6:fTemp4):(iSlow5?fTemp8:fTemp9)):(iSlow2?(iSlow8?fTemp6:fTemp13):(iSlow3?fTemp12:(iSlow7?fTemp7:fTemp6)))); - fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph7 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = double(input4[i]); - fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = double(input6[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph8 = FAUSTFLOAT(fRec9[0]); - double fTemp17 = double(input6[i]); - fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph9 = FAUSTFLOAT(fRec10[0]); - double fTemp18 = (0.44721359549995793 * fTemp17); - double fTemp19 = (2.2360679774997898 * fTemp16); - double fTemp20 = double(input8[i]); - fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + double fTemp9 = (0.44721359549995793 * fTemp8); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = double(input7[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph10 = FAUSTFLOAT(fRec11[0]); - double fTemp21 = (iSlow1?(iSlow4?(iSlow6?fTemp16:(0.86602540378443871 * fTemp20)):(iSlow5?(1.9364916731037085 * fTemp20):fTemp17)):(iSlow2?(iSlow8?fTemp16:fTemp19):(iSlow3?fTemp18:(iSlow7?(0.44721359549995793 * fTemp16):fTemp16)))); - fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph11 = FAUSTFLOAT(fRec8[0]); - output4[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = double(input5[i]); - fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + double fTemp11 = (0.5163977794943222 * fTemp10); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = double(input5[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph12 = FAUSTFLOAT(fRec13[0]); - double fTemp23 = double(input7[i]); - fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph13 = FAUSTFLOAT(fRec14[0]); - double fTemp24 = (iSlow1?(iSlow4?(iSlow6?fTemp22:(0.86602540378443871 * fTemp17)):(iSlow5?(1.9364916731037085 * fTemp17):(1.1547005383792515 * fTemp23))):(iSlow2?(iSlow8?fTemp22:(2.2360679774997898 * fTemp22)):(iSlow3?(0.5163977794943222 * fTemp23):(iSlow7?(0.44721359549995793 * fTemp22):fTemp22)))); - fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph14 = FAUSTFLOAT(fRec12[0]); - output5[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (iSlow1?(iSlow4?(iSlow6?fTemp17:fTemp16):(iSlow5?fTemp19:(1.1547005383792515 * fTemp22))):(iSlow2?(iSlow8?fTemp17:(2.2360679774997898 * fTemp17)):(iSlow3?(0.5163977794943222 * fTemp22):(iSlow7?fTemp18:fTemp17)))); - fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph15 = FAUSTFLOAT(fRec15[0]); - output6[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (iSlow1?(iSlow4?(iSlow6?fTemp23:(0.86602540378443871 * fTemp22)):(iSlow5?(1.9364916731037085 * fTemp22):(1.1547005383792515 * fTemp20))):(iSlow2?(iSlow8?fTemp23:(2.2360679774997898 * fTemp23)):(iSlow3?(0.5163977794943222 * fTemp20):(iSlow7?(0.44721359549995793 * fTemp23):fTemp23)))); - fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph16 = FAUSTFLOAT(fRec16[0]); - output7[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (iSlow1?(iSlow4?(iSlow6?fTemp20:(0.86602540378443871 * fTemp23)):(iSlow5?(1.9364916731037085 * fTemp23):(1.1547005383792515 * fTemp16))):(iSlow2?(iSlow8?fTemp20:(2.2360679774997898 * fTemp20)):(iSlow3?(0.5163977794943222 * fTemp16):(iSlow7?(0.44721359549995793 * fTemp20):fTemp20)))); - fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph17 = FAUSTFLOAT(fRec17[0]); - output8[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = double(input9[i]); - fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + double fTemp13 = (0.5163977794943222 * fTemp12); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = double(input8[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp15 = (0.5163977794943222 * fTemp14); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input4[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp17 = (0.5163977794943222 * fTemp16); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = double(input12[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph18 = FAUSTFLOAT(fRec19[0]); - double fTemp29 = double(input12[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph19 = FAUSTFLOAT(fRec20[0]); - double fTemp30 = (0.3779644730092272 * fTemp29); - double fTemp31 = (2.6457513110645907 * fTemp28); - double fTemp32 = double(input15[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + double fTemp19 = (0.3779644730092272 * fTemp18); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = double(input13[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph20 = FAUSTFLOAT(fRec21[0]); - double fTemp33 = (iSlow1?(iSlow4?(iSlow6?fTemp28:(0.79056941504209477 * fTemp32)):(iSlow5?(2.0916500663351889 * fTemp32):fTemp29)):(iSlow2?(iSlow8?fTemp28:fTemp31):(iSlow3?fTemp30:(iSlow7?(0.3779644730092272 * fTemp28):fTemp28)))); - fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); - fVbargraph21 = FAUSTFLOAT(fRec18[0]); - output9[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = double(input10[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + double fTemp21 = (0.44821072850039761 * fTemp20); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph22 = FAUSTFLOAT(fRec23[0]); - double fTemp35 = double(input13[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); - fVbargraph23 = FAUSTFLOAT(fRec24[0]); - double fTemp36 = (iSlow1?(iSlow4?(iSlow6?fTemp34:(0.7453559924999299 * fTemp35)):(iSlow5?(1.9720265943665387 * fTemp35):(1.1858541225631423 * fTemp35))):(iSlow2?(iSlow8?fTemp34:(2.6457513110645907 * fTemp34)):(iSlow3?(0.44821072850039761 * fTemp35):(iSlow7?(0.3779644730092272 * fTemp34):fTemp34)))); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); - fVbargraph24 = FAUSTFLOAT(fRec22[0]); - output10[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = double(input11[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); - fVbargraph25 = FAUSTFLOAT(fRec26[0]); - double fTemp38 = (iSlow1?(iSlow4?(iSlow6?fTemp37:(0.84327404271156781 * fTemp37)):(iSlow5?(2.2310934040908683 * fTemp37):(1.1858541225631423 * fTemp37))):(iSlow2?(iSlow8?fTemp37:(2.6457513110645907 * fTemp37)):(iSlow3?(0.44821072850039761 * fTemp37):(iSlow7?(0.3779644730092272 * fTemp37):fTemp37)))); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); - fVbargraph26 = FAUSTFLOAT(fRec25[0]); - output11[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = double(input14[i]); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph27 = FAUSTFLOAT(fRec28[0]); - double fTemp40 = (iSlow1?(iSlow4?(iSlow6?fTemp29:fTemp28):(iSlow5?fTemp31:(1.3416407864998738 * fTemp39))):(iSlow2?(iSlow8?fTemp29:(2.6457513110645907 * fTemp29)):(iSlow3?(0.50709255283710997 * fTemp39):(iSlow7?fTemp30:fTemp29)))); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); - fVbargraph28 = FAUSTFLOAT(fRec27[0]); - output12[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (iSlow1?(iSlow4?(iSlow6?fTemp35:(0.84327404271156781 * fTemp34)):(iSlow5?(2.2310934040908683 * fTemp34):(1.3416407864998738 * fTemp34))):(iSlow2?(iSlow8?fTemp35:(2.6457513110645907 * fTemp35)):(iSlow3?(0.50709255283710997 * fTemp34):(iSlow7?(0.3779644730092272 * fTemp35):fTemp35)))); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph29 = FAUSTFLOAT(fRec29[0]); - output13[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (iSlow1?(iSlow4?(iSlow6?fTemp39:(0.7453559924999299 * fTemp29)):(iSlow5?(1.9720265943665387 * fTemp29):(1.2649110640673518 * fTemp32))):(iSlow2?(iSlow8?fTemp39:(2.6457513110645907 * fTemp39)):(iSlow3?(0.47809144373375745 * fTemp32):(iSlow7?(0.3779644730092272 * fTemp39):fTemp39)))); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); - fVbargraph30 = FAUSTFLOAT(fRec30[0]); - output14[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (iSlow1?(iSlow4?(iSlow6?fTemp32:(0.79056941504209477 * fTemp39)):(iSlow5?(2.0916500663351889 * fTemp39):(1.2649110640673518 * fTemp28))):(iSlow2?(iSlow8?fTemp32:(2.6457513110645907 * fTemp32)):(iSlow3?(0.47809144373375745 * fTemp28):(iSlow7?(0.3779644730092272 * fTemp32):fTemp32)))); - fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph31 = FAUSTFLOAT(fRec31[0]); - output15[i] = FAUSTFLOAT(fTemp43); + double fTemp23 = (0.44821072850039761 * fTemp22); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = double(input14[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp25 = (0.50709255283710997 * fTemp24); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = double(input10[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp27 = (0.50709255283710997 * fTemp26); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = double(input15[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp29 = (0.47809144373375745 * fTemp28); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = double(input9[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp31 = (0.47809144373375745 * fTemp30); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp31); fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; - fRec11[1] = fRec11[0]; fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; fRec13[1] = fRec13[0]; - fRec14[1] = fRec14[0]; fRec12[1] = fRec12[0]; fRec15[1] = fRec15[0]; - fRec16[1] = fRec16[0]; + fRec14[1] = fRec14[0]; fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; - fRec21[1] = fRec21[0]; fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; fRec23[1] = fRec23[0]; - fRec24[1] = fRec24[0]; fRec22[1] = fRec22[0]; - fRec26[1] = fRec26[0]; fRec25[1] = fRec25[0]; - fRec28[1] = fRec28[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; fRec29[1] = fRec29[0]; - fRec30[1] = fRec30[0]; + fRec28[1] = fRec28[0]; fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; } @@ -1406,7 +1391,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1638,7 +1622,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1701,7 +1685,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1730,11 +1714,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAConverterAcnSn3d2FuMa1.cpp b/source/HOAUGens/HOAConverterAcnSn3d2FuMa1.cpp new file mode 100644 index 0000000000..8804007e14 --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnSn3d2FuMa1.cpp @@ -0,0 +1,1251 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnSn3d2FuMa1" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnSn3d2FuMa1"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnSn3d2FuMa1"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x360f430", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3623110", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x362cc30", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3619350", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36139a0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x361d4d0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3626f10", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3630b10", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (0.70710678118654746 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input3[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input1[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input2[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp4); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterAcnSn3d2FuMa2.cpp b/source/HOAUGens/HOAConverterAcnSn3d2FuMa2.cpp new file mode 100644 index 0000000000..bb5d96dec9 --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnSn3d2FuMa2.cpp @@ -0,0 +1,1449 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnSn3d2FuMa2" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnSn3d2FuMa2"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnSn3d2FuMa2"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b56970", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b6a640", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b74160", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b60880", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ba6580", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b92140", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b7dba0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b87cf0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b9c050", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b5aee0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b64a00", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b6e440", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b78040", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b81e00", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b8c340", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1b96410", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1ba0860", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1baa850", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (0.70710678118654746 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input3[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input1[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input2[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input6[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = double(input7[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp7 = (1.1547005383792515 * fTemp6); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = double(input5[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp9 = (1.1547005383792515 * fTemp8); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = double(input8[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp11 = (1.1547005383792515 * fTemp10); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = double(input4[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp13 = (1.1547005383792515 * fTemp12); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp13); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterAcnSn3d2FuMa3.cpp b/source/HOAUGens/HOAConverterAcnSn3d2FuMa3.cpp new file mode 100644 index 0000000000..2caf6daae7 --- /dev/null +++ b/source/HOAUGens/HOAConverterAcnSn3d2FuMa3.cpp @@ -0,0 +1,1725 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterAcnSn3d2FuMa3" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec18[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec20[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; + FAUSTFLOAT fVbargraph24; + double fRec24[2]; + FAUSTFLOAT fVbargraph25; + double fRec27[2]; + FAUSTFLOAT fVbargraph26; + double fRec26[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; + FAUSTFLOAT fVbargraph31; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterAcnSn3d2FuMa3"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterAcnSn3d2FuMa3"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30fa680", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x310e350", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3117e70", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3104590", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x314a290", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3135e50", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31218b0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x312ba00", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x313fd60", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3192780", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x317d8b0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3168c80", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3154360", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x315e670", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31731c0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3187d10", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30febf0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3108710", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3112150", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x311bd50", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3125b10", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3130050", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x313a120", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3144570", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x314e560", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31586a0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3162da0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x316d2d0", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3177ab0", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3181c60", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x318c7c0", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3196b30", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (0.70710678118654746 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input3[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input1[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input2[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input6[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = double(input7[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp7 = (1.1547005383792515 * fTemp6); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = double(input5[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp9 = (1.1547005383792515 * fTemp8); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = double(input8[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp11 = (1.1547005383792515 * fTemp10); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = double(input4[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp13 = (1.1547005383792515 * fTemp12); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = double(input12[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = double(input13[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp16 = (1.1858541225631423 * fTemp15); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp18 = (1.1858541225631423 * fTemp17); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = double(input14[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp20 = (1.3416407864998738 * fTemp19); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input10[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp22 = (1.3416407864998738 * fTemp21); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input15[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp24 = (1.2649110640673518 * fTemp23); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input9[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp26 = (1.2649110640673518 * fTemp25); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp26); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec25[1] = fRec25[0]; + fRec24[1] = fRec24[0]; + fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAEncLebedev061.cpp b/source/HOAUGens/HOAConverterFuma2AcnN3d1.cpp similarity index 85% rename from source/HOAUGens/HOAEncLebedev061.cpp rename to source/HOAUGens/HOAConverterFuma2AcnN3d1.cpp index fd8fb94c9f..865abe3395 100644 --- a/source/HOAUGens/HOAEncLebedev061.cpp +++ b/source/HOAUGens/HOAConverterFuma2AcnN3d1.cpp @@ -1,10 +1,11 @@ /* ------------------------------------------------------------ author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2014" +copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAEncLebedev061" +name: "HOAConverterFuma2AcnN3d1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,28 +633,22 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; double fRec1[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph0; - double fRec3[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph1; - double fRec4[2]; + double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec5[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; - double fRec6[2]; + double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec7[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec0[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph6; - double fRec8[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph7; - double fRec9[2]; - FAUSTFLOAT fVbargraph8; - double fRec10[2]; - FAUSTFLOAT fVbargraph9; public: @@ -646,36 +656,28 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAEncLebedev061"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterFuma2AcnN3d1"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); } virtual int getNumInputs() { - return 6; + return 4; } virtual int getNumOutputs() { @@ -701,14 +703,6 @@ class mydsp : public dsp { rate = 1; break; } - case 4: { - rate = 1; - break; - } - case 5: { - rate = 1; - break; - } default: { rate = -1; break; @@ -753,12 +747,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); } @@ -768,7 +761,7 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; + fRec0[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { @@ -776,7 +769,7 @@ class mydsp : public dsp { } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; + fRec2[l3] = 0.0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { @@ -784,7 +777,7 @@ class mydsp : public dsp { } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec6[l5] = 0.0; + fRec4[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { @@ -792,19 +785,7 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec0[l7] = 0.0; - - } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec8[l8] = 0.0; - - } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec9[l9] = 0.0; - - } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec6[l7] = 0.0; } @@ -823,66 +804,58 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAEncLebedev061"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Inputs"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31f4b70", &fVbargraph4, -70.0, 6.0); + ui_interface->openVerticalBox("HOAConverterFuma2AcnN3d1"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3115e90", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31f96c0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31f0020", &fVbargraph3, -70.0, 6.0); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3134110", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("4"); + ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31eb4d0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x311ff70", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31e6980", &fVbargraph1, -70.0, 6.0); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x312a120", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31e1d50", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN N3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31fe310", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x311a400", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3203f50", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31244e0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3209350", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x312e690", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x320f630", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3138300", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fHslider0, "1", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->declare(&fHslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); @@ -893,60 +866,47 @@ class mydsp : public dsp { FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* input2 = inputs[2]; FAUSTFLOAT* input3 = inputs[3]; - FAUSTFLOAT* input4 = inputs[4]; - FAUSTFLOAT* input5 = inputs[5]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - double fTemp0 = double(input5[i]); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); - fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input4[i]); - fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); - fVbargraph2 = FAUSTFLOAT(fRec4[0]); - double fTemp3 = double(input2[i]); - fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); - fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = double(input0[i]); - fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph4 = FAUSTFLOAT(fRec6[0]); - double fTemp5 = double(input1[i]); - fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp6 = (0.16666666666666666 * (fRec1[0] * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + fTemp5))))))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph6 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp6); - double fTemp7 = (fRec1[0] * ((3.5352507957496889e-17 * fTemp2) + (0.28867513459481287 * (fTemp3 - fTemp1)))); - fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); - fVbargraph7 = FAUSTFLOAT(fRec8[0]); - output1[i] = FAUSTFLOAT(fTemp7); - double fTemp8 = (0.28867513459481287 * (fRec1[0] * (fTemp4 - fTemp0))); - fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); - fVbargraph8 = FAUSTFLOAT(fRec9[0]); - output2[i] = FAUSTFLOAT(fTemp8); - double fTemp9 = (fRec1[0] * (((0.28867513459481287 * (fTemp5 - fTemp2)) + (1.7676253978748444e-17 * (fTemp0 + (fTemp4 + fTemp3)))) - (5.302876193624534e-17 * fTemp1))); - fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph9 = FAUSTFLOAT(fRec10[0]); - output3[i] = FAUSTFLOAT(fTemp9); + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (1.4142135623730951 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input2[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp3 = (1.7320508075688772 * fTemp2); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input3[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp5 = (1.7320508075688772 * fTemp4); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = double(input1[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp7 = (1.7320508075688772 * fTemp6); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp7); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; + fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; fRec5[1] = fRec5[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; - fRec0[1] = fRec0[0]; - fRec8[1] = fRec8[0]; - fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; + fRec6[1] = fRec6[0]; } @@ -955,7 +915,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1187,7 +1146,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1250,7 +1209,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1279,11 +1238,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAConverterFuma2AcnN3d2.cpp b/source/HOAUGens/HOAConverterFuma2AcnN3d2.cpp new file mode 100644 index 0000000000..48ae54911e --- /dev/null +++ b/source/HOAUGens/HOAConverterFuma2AcnN3d2.cpp @@ -0,0 +1,1453 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterFuma2AcnN3d2" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterFuma2AcnN3d2"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterFuma2AcnN3d2"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d64c60", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d82ef0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d6ed40", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d78ef0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2da16c0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dab5d0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d97180", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2db5940", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d8ce10", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d691d0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d732b0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d7d460", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d870e0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d91460", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d9b6f0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2da5990", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2daf980", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2db9eb0", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (1.4142135623730951 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input2[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp3 = (1.7320508075688772 * fTemp2); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input3[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp5 = (1.7320508075688772 * fTemp4); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = double(input1[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp7 = (1.7320508075688772 * fTemp6); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = double(input8[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp9 = (1.9364916731037085 * fTemp8); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = double(input6[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp11 = (1.9364916731037085 * fTemp10); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = double(input4[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp13 = (2.2360679774997898 * fTemp12); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = double(input5[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp15 = (1.9364916731037085 * fTemp14); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input7[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp17 = (1.9364916731037085 * fTemp16); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp17); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterFuma2AcnN3d3.cpp b/source/HOAUGens/HOAConverterFuma2AcnN3d3.cpp new file mode 100644 index 0000000000..c306d24599 --- /dev/null +++ b/source/HOAUGens/HOAConverterFuma2AcnN3d3.cpp @@ -0,0 +1,1730 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterFuma2AcnN3d3" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fRec18[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fRec20[2]; + FAUSTFLOAT fVbargraph21; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fRec22[2]; + FAUSTFLOAT fVbargraph23; + double fRec25[2]; + FAUSTFLOAT fVbargraph24; + double fRec24[2]; + FAUSTFLOAT fVbargraph25; + double fRec27[2]; + FAUSTFLOAT fVbargraph26; + double fRec26[2]; + FAUSTFLOAT fVbargraph27; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fRec28[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fRec30[2]; + FAUSTFLOAT fVbargraph31; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterFuma2AcnN3d3"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec19[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec21[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec23[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec22[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec25[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec24[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec27[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec26[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec29[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec28[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec31[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec30[l31] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterFuma2AcnN3d3"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34bb850", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34d9ad0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34c5930", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34cfae0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34f82b0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35021c0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34edd60", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x350c530", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34e39f0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3535db0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3540210", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x352b870", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x354a580", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3521170", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3554e30", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3516a70", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN N3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34bfdc0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34c9ea0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34d4050", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34ddcc0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34e8040", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34f22d0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x34fc580", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3506570", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3510aa0", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x351b1a0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35257c0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x352fec0", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x353a170", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x35446a0", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x354ebd0", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3559640", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (1.4142135623730951 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input2[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + double fTemp3 = (1.7320508075688772 * fTemp2); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input3[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + double fTemp5 = (1.7320508075688772 * fTemp4); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = double(input1[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + double fTemp7 = (1.7320508075688772 * fTemp6); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = double(input8[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp9 = (1.9364916731037085 * fTemp8); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = double(input6[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp11 = (1.9364916731037085 * fTemp10); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = double(input4[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + double fTemp13 = (2.2360679774997898 * fTemp12); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = double(input5[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp15 = (1.9364916731037085 * fTemp14); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input7[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp17 = (1.9364916731037085 * fTemp16); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = double(input15[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp19 = (2.0916500663351889 * fTemp18); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = double(input13[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp21 = (1.9720265943665387 * fTemp20); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp23 = (2.2310934040908683 * fTemp22); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = double(input9[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + double fTemp25 = (2.6457513110645907 * fTemp24); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = double(input10[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp27 = (2.2310934040908683 * fTemp26); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = double(input12[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + double fTemp29 = (1.9720265943665387 * fTemp28); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = double(input14[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + double fTemp31 = (2.0916500663351889 * fTemp30); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp31); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; + fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec25[1] = fRec25[0]; + fRec24[1] = fRec24[0]; + fRec27[1] = fRec27[0]; + fRec26[1] = fRec26[0]; + fRec29[1] = fRec29[0]; + fRec28[1] = fRec28[0]; + fRec31[1] = fRec31[0]; + fRec30[1] = fRec30[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterFuma2AcnSn3d1.cpp b/source/HOAUGens/HOAConverterFuma2AcnSn3d1.cpp new file mode 100644 index 0000000000..0f5328d281 --- /dev/null +++ b/source/HOAUGens/HOAConverterFuma2AcnSn3d1.cpp @@ -0,0 +1,1251 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterFuma2AcnSn3d1" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterFuma2AcnSn3d1"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterFuma2AcnSn3d1"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b32820", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b500f0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b3c730", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b464f0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b36d90", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b408b0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b4a670", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b53ef0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (1.4142135623730951 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input2[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input3[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp4); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAConverterFuma2AcnSn3d2.cpp b/source/HOAUGens/HOAConverterFuma2AcnSn3d2.cpp new file mode 100644 index 0000000000..949ae18b33 --- /dev/null +++ b/source/HOAUGens/HOAConverterFuma2AcnSn3d2.cpp @@ -0,0 +1,1449 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOAConverterFuma2AcnSn3d2" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + double fRec1[2]; + FAUSTFLOAT fVbargraph0; + double fRec0[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fRec2[2]; + FAUSTFLOAT fVbargraph3; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fRec4[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fRec6[2]; + FAUSTFLOAT fVbargraph7; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fRec8[2]; + FAUSTFLOAT fVbargraph9; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fRec10[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fRec12[2]; + FAUSTFLOAT fVbargraph13; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fRec14[2]; + FAUSTFLOAT fVbargraph15; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fRec16[2]; + FAUSTFLOAT fVbargraph17; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterFuma2AcnSn3d2"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec3[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec2[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec5[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec4[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec7[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec8[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec11[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec10[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec13[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec12[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec14[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec17[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec16[l17] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOAConverterFuma2AcnSn3d2"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e51b0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a02a80", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39ef0c0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39f8e80", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a20c90", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a2a7b0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a16920", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a34b20", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a0c5b0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39e9720", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39f3240", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39fd000", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a06880", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a10c00", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a1ae90", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a24b70", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a2eb60", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3a39090", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (1.4142135623730951 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input2[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input3[i]); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input8[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp6 = (0.86602540378443871 * fTemp5); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input6[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp8 = (0.86602540378443871 * fTemp7); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input4[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = double(input5[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp11 = (0.86602540378443871 * fTemp10); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = double(input7[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp13 = (0.86602540378443871 * fTemp12); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp13); + fRec1[1] = fRec1[0]; + fRec0[1] = fRec0[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + fRec5[1] = fRec5[0]; + fRec4[1] = fRec4[0]; + fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec9[1] = fRec9[0]; + fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; + fRec10[1] = fRec10[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fRec15[1] = fRec15[0]; + fRec14[1] = fRec14[0]; + fRec17[1] = fRec17[0]; + fRec16[1] = fRec16[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAEncLebedev262.cpp b/source/HOAUGens/HOAConverterFuma2AcnSn3d3.cpp similarity index 75% rename from source/HOAUGens/HOAEncLebedev262.cpp rename to source/HOAUGens/HOAConverterFuma2AcnSn3d3.cpp index 833e7d4be4..47aa3ce25f 100644 --- a/source/HOAUGens/HOAEncLebedev262.cpp +++ b/source/HOAUGens/HOAConverterFuma2AcnSn3d3.cpp @@ -1,10 +1,11 @@ /* ------------------------------------------------------------ author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2014" +copyright: "(c) Pierre Lecomte 2016" license: "GPL" -name: "HOAEncLebedev262" +name: "HOAConverterFuma2AcnSn3d3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -617,78 +633,70 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; - FAUSTFLOAT fHslider0; double fRec1[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph0; - double fRec3[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph1; - double fRec4[2]; + double fRec3[2]; FAUSTFLOAT fVbargraph2; - double fRec5[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph3; - double fRec6[2]; + double fRec5[2]; FAUSTFLOAT fVbargraph4; - double fRec7[2]; + double fRec4[2]; FAUSTFLOAT fVbargraph5; - double fRec8[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph6; - double fRec9[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph7; - double fRec10[2]; + double fRec9[2]; FAUSTFLOAT fVbargraph8; - double fRec11[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph9; - double fRec12[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph10; - double fRec13[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph11; - double fRec14[2]; + double fRec13[2]; FAUSTFLOAT fVbargraph12; - double fRec15[2]; + double fRec12[2]; FAUSTFLOAT fVbargraph13; - double fRec16[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph14; - double fRec17[2]; + double fRec14[2]; FAUSTFLOAT fVbargraph15; - double fRec18[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph16; - double fRec19[2]; + double fRec16[2]; FAUSTFLOAT fVbargraph17; - double fRec20[2]; + double fRec19[2]; FAUSTFLOAT fVbargraph18; - double fRec21[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph19; - double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fVbargraph20; - double fRec23[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph21; - double fRec24[2]; + double fRec23[2]; FAUSTFLOAT fVbargraph22; - double fRec25[2]; + double fRec22[2]; FAUSTFLOAT fVbargraph23; - double fRec26[2]; + double fRec25[2]; FAUSTFLOAT fVbargraph24; - double fRec27[2]; + double fRec24[2]; FAUSTFLOAT fVbargraph25; - double fRec0[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph26; - double fRec28[2]; + double fRec26[2]; FAUSTFLOAT fVbargraph27; double fRec29[2]; FAUSTFLOAT fVbargraph28; - double fRec30[2]; + double fRec28[2]; FAUSTFLOAT fVbargraph29; double fRec31[2]; FAUSTFLOAT fVbargraph30; - double fRec32[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph31; - double fRec33[2]; - FAUSTFLOAT fVbargraph32; - double fRec34[2]; - FAUSTFLOAT fVbargraph33; - double fRec35[2]; - FAUSTFLOAT fVbargraph34; public: @@ -696,40 +704,32 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOAEncLebedev262"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOAConverterFuma2AcnSn3d3"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); } virtual int getNumInputs() { - return 26; + return 16; } virtual int getNumOutputs() { - return 9; + return 16; } virtual int getInputRate(int channel) { @@ -799,91 +799,79 @@ class mydsp : public dsp { rate = 1; break; } - case 16: { - rate = 1; - break; - } - case 17: { - rate = 1; - break; - } - case 18: { - rate = 1; + default: { + rate = -1; break; } - case 19: { + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { rate = 1; break; } - case 20: { + case 1: { rate = 1; break; } - case 21: { + case 2: { rate = 1; break; } - case 22: { + case 3: { rate = 1; break; } - case 23: { + case 4: { rate = 1; break; } - case 24: { + case 5: { rate = 1; break; } - case 25: { + case 6: { rate = 1; break; } - default: { - rate = -1; - break; - } - - } - return rate; - - } - virtual int getOutputRate(int channel) { - int rate; - switch (channel) { - case 0: { + case 7: { rate = 1; break; } - case 1: { + case 8: { rate = 1; break; } - case 2: { + case 9: { rate = 1; break; } - case 3: { + case 10: { rate = 1; break; } - case 4: { + case 11: { rate = 1; break; } - case 5: { + case 12: { rate = 1; break; } - case 6: { + case 13: { rate = 1; break; } - case 7: { + case 14: { rate = 1; break; } - case 8: { + case 15: { rate = 1; break; } @@ -903,12 +891,11 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); } @@ -918,7 +905,7 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; + fRec0[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { @@ -926,7 +913,7 @@ class mydsp : public dsp { } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0; + fRec2[l3] = 0.0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { @@ -934,7 +921,7 @@ class mydsp : public dsp { } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec6[l5] = 0.0; + fRec4[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { @@ -942,7 +929,7 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { @@ -950,7 +937,7 @@ class mydsp : public dsp { } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec10[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -958,7 +945,7 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec12[l11] = 0.0; + fRec10[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { @@ -966,7 +953,7 @@ class mydsp : public dsp { } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec14[l13] = 0.0; + fRec12[l13] = 0.0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { @@ -974,7 +961,7 @@ class mydsp : public dsp { } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec16[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { @@ -982,7 +969,7 @@ class mydsp : public dsp { } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec18[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -990,7 +977,7 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec20[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { @@ -998,7 +985,7 @@ class mydsp : public dsp { } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec22[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { @@ -1006,7 +993,7 @@ class mydsp : public dsp { } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec22[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { @@ -1014,7 +1001,7 @@ class mydsp : public dsp { } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + fRec24[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { @@ -1022,39 +1009,23 @@ class mydsp : public dsp { } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec0[l27] = 0.0; + fRec26[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec28[l28] = 0.0; + fRec29[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec29[l29] = 0.0; + fRec28[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec30[l30] = 0.0; + fRec31[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec31[l31] = 0.0; - - } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec32[l32] = 0.0; - - } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec33[l33] = 0.0; - - } - for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec34[l34] = 0.0; - - } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec35[l35] = 0.0; + fRec30[l31] = 0.0; } @@ -1073,168 +1044,162 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOAEncLebedev262"); - ui_interface->declare(0, "0", ""); - ui_interface->openHorizontalBox("Inputs"); + ui_interface->openVerticalBox("HOAConverterFuma2AcnSn3d3"); + ui_interface->declare(0, "1", ""); + ui_interface->openHorizontalBox("FuMa"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30e8120", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e839d0", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31059f0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e88520", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30f2030", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e7ee80", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30fbdf0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e7a330", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3123c00", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e757e0", &fVbargraph1, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x312d720", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e70bb0", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3119890", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ec0400", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3137a90", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ec5490", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x310f520", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ebb370", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3161140", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1eb62e0", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x316b1a0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1eb1250", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3156dd0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1eac1c0", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3175510", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ea7130", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x314c6d0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ea20a0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x317fdc0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e9d010", &fVbargraph9, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e97f80", &fVbargraph8, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e92ef0", &fVbargraph7, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1e8de60", &fVbargraph6, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1eee4a0", &fVbargraph24, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ef3fb0", &fVbargraph25, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ee8990", &fVbargraph23, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ee2e80", &fVbargraph22, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1edd370", &fVbargraph21, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ed7860", &fVbargraph20, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ed1d50", &fVbargraph19, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("26"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ecc240", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3141fd0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(0, "1", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->closeBox(); + ui_interface->declare(0, "2", ""); + ui_interface->openHorizontalBox("ACN SN3D"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1efa580", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30ec690", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f04220", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30f61b0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f0aeb0", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30fff70", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f157e0", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31097f0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f1e660", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3113b70", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f25940", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x311de00", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f2db00", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3127ae0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f35610", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3131ad0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f3f190", &fVbargraph34, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x313c000", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3146700", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3150d20", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x315b420", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3165100", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x316f630", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3179b60", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31845d0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fHslider0, "1", ""); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->declare(&fHslider0, "unit", "dB"); - ui_interface->addHorizontalSlider("Gain", &fHslider0, 0.0, -10.0, 50.0, 0.10000000000000001); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1257,16 +1222,6 @@ class mydsp : public dsp { FAUSTFLOAT* input13 = inputs[13]; FAUSTFLOAT* input14 = inputs[14]; FAUSTFLOAT* input15 = inputs[15]; - FAUSTFLOAT* input16 = inputs[16]; - FAUSTFLOAT* input17 = inputs[17]; - FAUSTFLOAT* input18 = inputs[18]; - FAUSTFLOAT* input19 = inputs[19]; - FAUSTFLOAT* input20 = inputs[20]; - FAUSTFLOAT* input21 = inputs[21]; - FAUSTFLOAT* input22 = inputs[22]; - FAUSTFLOAT* input23 = inputs[23]; - FAUSTFLOAT* input24 = inputs[24]; - FAUSTFLOAT* input25 = inputs[25]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; @@ -1276,176 +1231,153 @@ class mydsp : public dsp { FAUSTFLOAT* output6 = outputs[6]; FAUSTFLOAT* output7 = outputs[7]; FAUSTFLOAT* output8 = outputs[8]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - double fTemp0 = double(input5[i]); - fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); - fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input4[i]); - fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input3[i]); - fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); - fVbargraph2 = FAUSTFLOAT(fRec4[0]); - double fTemp3 = double(input2[i]); + double fTemp0 = double(input0[i]); + fRec1[0] = max((fRec1[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec1[0]); + double fTemp1 = (1.4142135623730951 * fTemp0); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp1); + double fTemp2 = double(input2[i]); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph3 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp2); + double fTemp3 = double(input3[i]); fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); - fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = double(input0[i]); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph5 = FAUSTFLOAT(fRec4[0]); + output2[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = double(input1[i]); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph4 = FAUSTFLOAT(fRec6[0]); - double fTemp5 = double(input1[i]); - fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp6 = double(input17[i]); + fVbargraph7 = FAUSTFLOAT(fRec6[0]); + output3[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = double(input8[i]); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + double fTemp6 = (0.86602540378443871 * fTemp5); fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph6 = FAUSTFLOAT(fRec8[0]); - double fTemp7 = double(input16[i]); - fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); - fVbargraph7 = FAUSTFLOAT(fRec9[0]); - double fTemp8 = double(input15[i]); + fVbargraph9 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = double(input6[i]); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + double fTemp8 = (0.86602540378443871 * fTemp7); fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); - fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp9 = double(input14[i]); - fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph9 = FAUSTFLOAT(fRec11[0]); - double fTemp10 = double(input13[i]); - fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph10 = FAUSTFLOAT(fRec12[0]); - double fTemp11 = double(input12[i]); - fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph11 = FAUSTFLOAT(fRec13[0]); - double fTemp12 = double(input11[i]); - fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph12 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = double(input10[i]); - fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph13 = FAUSTFLOAT(fRec15[0]); - double fTemp14 = double(input9[i]); - fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph14 = FAUSTFLOAT(fRec16[0]); - double fTemp15 = double(input8[i]); - fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph15 = FAUSTFLOAT(fRec17[0]); - double fTemp16 = double(input6[i]); - fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph16 = FAUSTFLOAT(fRec18[0]); - double fTemp17 = double(input7[i]); - fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph17 = FAUSTFLOAT(fRec19[0]); - double fTemp18 = (fTemp14 + (fTemp15 + (fTemp16 + fTemp17))); - double fTemp19 = double(input25[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); - fVbargraph18 = FAUSTFLOAT(fRec20[0]); - double fTemp20 = double(input24[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); - fVbargraph19 = FAUSTFLOAT(fRec21[0]); - double fTemp21 = double(input23[i]); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph20 = FAUSTFLOAT(fRec22[0]); - double fTemp22 = double(input22[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph21 = FAUSTFLOAT(fRec23[0]); - double fTemp23 = double(input21[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph22 = FAUSTFLOAT(fRec24[0]); - double fTemp24 = double(input20[i]); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph23 = FAUSTFLOAT(fRec25[0]); - double fTemp25 = double(input18[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph24 = FAUSTFLOAT(fRec26[0]); - double fTemp26 = double(input19[i]); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph25 = FAUSTFLOAT(fRec27[0]); - double fTemp27 = (fTemp23 + (fTemp24 + (fTemp25 + fTemp26))); - double fTemp28 = (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + fTemp27)))); - double fTemp29 = (fRec1[0] * (((0.047619047619047623 * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + fTemp5)))))) + (0.038095238095238099 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + fTemp18)))))))))) + (0.03214285714285714 * fTemp28))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph26 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fTemp15 + fTemp7); - double fTemp31 = (fTemp26 + fTemp21); - double fTemp32 = (fTemp17 - fTemp14); - double fTemp33 = (fTemp25 - fTemp24); - double fTemp34 = (fTemp23 + fTemp19); - double fTemp35 = (fRec1[0] * ((((5.7138281391308437e-18 * fTemp30) + (((1.0100716559284827e-17 * fTemp2) + (0.082478609884232251 * (fTemp3 - fTemp1))) + (0.046656947481584346 * (fTemp13 - fTemp11)))) + (0.032142857142857133 * fTemp31)) - (((0.046656947481584353 * (fTemp6 - (fTemp8 - (fTemp10 - (fTemp12 + fTemp32))))) + (0.032142857142857126 * (fTemp20 - (fTemp22 + fTemp33)))) + (0.03214285714285714 * fTemp34)))); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); - fVbargraph27 = FAUSTFLOAT(fRec28[0]); - output1[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (fTemp4 - fTemp0); - double fTemp37 = (fRec1[0] * ((0.082478609884232251 * fTemp36) - ((0.046656947481584346 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 - fTemp18))))) + (0.03214285714285714 * (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 - fTemp27)))))))); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph11 = FAUSTFLOAT(fRec10[0]); + output5[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = double(input4[i]); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph13 = FAUSTFLOAT(fRec12[0]); + output6[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = double(input5[i]); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + double fTemp11 = (0.86602540378443871 * fTemp10); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph15 = FAUSTFLOAT(fRec14[0]); + output7[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = double(input7[i]); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + double fTemp13 = (0.86602540378443871 * fTemp12); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph17 = FAUSTFLOAT(fRec16[0]); + output8[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = double(input15[i]); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + double fTemp15 = (0.79056941504209477 * fTemp14); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph19 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = double(input13[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + double fTemp17 = (0.7453559924999299 * fTemp16); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph21 = FAUSTFLOAT(fRec20[0]); + output10[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = double(input11[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + double fTemp19 = (0.84327404271156781 * fTemp18); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph23 = FAUSTFLOAT(fRec22[0]); + output11[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = double(input9[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph25 = FAUSTFLOAT(fRec24[0]); + output12[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = double(input10[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + double fTemp22 = (0.84327404271156781 * fTemp21); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph27 = FAUSTFLOAT(fRec26[0]); + output13[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = double(input12[i]); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph28 = FAUSTFLOAT(fRec29[0]); - output2[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = (fTemp17 + fTemp8); - double fTemp39 = (fTemp25 + fTemp22); - double fTemp40 = (fTemp26 - fTemp23); - double fTemp41 = (fTemp16 - fTemp15); - double fTemp42 = (fTemp14 + fTemp6); - double fTemp43 = (fTemp24 + fTemp20); - double fTemp44 = (fRec1[0] * (((((2.8569140695654219e-18 * fTemp38) + ((5.0503582796424135e-18 * (fTemp0 + (fTemp4 + fTemp3))) + ((0.082478609884232251 * (fTemp5 - fTemp2)) + (0.046656947481584339 * fTemp10)))) + (0.032142857142857133 * fTemp39)) + (0.032142857142857126 * (fTemp19 - (fTemp21 + fTemp40)))) - ((((0.046656947481584353 * (fTemp7 - (fTemp9 - (fTemp11 - (fTemp13 + fTemp41))))) + ((1.5151074838927241e-17 * fTemp1) + (0.046656947481584346 * fTemp12))) + (8.570742208696266e-18 * fTemp42)) + (0.03214285714285714 * fTemp43)))); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); - fVbargraph29 = FAUSTFLOAT(fRec30[0]); - output3[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (fRec1[0] * (((1.35515333088112e-17 * fTemp42) + (((1.1292944424009331e-17 * fTemp3) + (3.387883327202799e-17 * fTemp1)) + (4.5171777696037333e-18 * fTemp38))) - (((0.073771111356331756 * (fTemp10 - (fTemp11 + (fTemp13 - fTemp12)))) + ((2.2585888848018662e-17 * fTemp2) + (9.0343555392074667e-18 * fTemp30))) + (0.041496250137936598 * (fTemp19 - (fTemp20 - (fTemp21 - (fTemp22 - (fTemp23 - (fTemp24 + (fTemp25 - fTemp26))))))))))); - fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + double fTemp24 = (0.7453559924999299 * fTemp23); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph29 = FAUSTFLOAT(fRec28[0]); + output14[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = double(input14[i]); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph30 = FAUSTFLOAT(fRec31[0]); - output4[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (fTemp20 - (fTemp22 - fTemp33)); - double fTemp47 = (fRec1[0] * ((((9.0343555392074651e-18 * (fTemp15 - fTemp7)) + (0.073771111356331756 * (fTemp6 - (fTemp8 - fTemp32)))) + (0.041496250137936612 * fTemp46)) + (0.041496250137936619 * (fTemp19 - (fTemp21 - fTemp40))))); - fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); - fVbargraph31 = FAUSTFLOAT(fRec32[0]); - output5[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (fTemp4 + fTemp0); - double fTemp49 = (fRec1[0] * (((0.021295885499997984 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + fTemp18))))) + ((0.10647942749999 * fTemp48) + (7.9795740640090912e-18 * fTemp28))) - ((0.053239713749994998 * (fTemp1 + (fTemp2 + (fTemp5 + fTemp3)))) + (0.042591770999995997 * (fTemp10 + (fTemp11 + (fTemp13 + fTemp12))))))); - fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); - fVbargraph32 = FAUSTFLOAT(fRec33[0]); - output6[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (fRec1[0] * (((0.041496250137936605 * (fTemp23 - fTemp19)) + ((0.073771111356331756 * (fTemp7 - (fTemp9 - fTemp41))) + ((4.5171777696037326e-18 * (fTemp17 - fTemp8)) + ((1.1292944424009331e-17 * fTemp36) + (0.041496250137936619 * fTemp46))))) - ((1.3551533308811195e-17 * (fTemp14 - fTemp6)) + (0.041496250137936612 * (fTemp26 - fTemp21))))); - fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); - fVbargraph33 = FAUSTFLOAT(fRec34[0]); - output7[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (fRec1[0] * (((3.4574670604529943e-34 * fTemp48) + ((1.2704562477010493e-17 * fTemp43) + (((4.5171777696037326e-18 * fTemp13) + (2.2585888848018662e-17 * fTemp11)) + (2.5409124954020982e-18 * fTemp39)))) - ((0.036885555678165885 * (fTemp6 - (fTemp7 - (fTemp8 - (fTemp9 - (fTemp14 - (fTemp15 + (fTemp16 - fTemp17)))))))) + ((0.092213889195414706 * (fTemp1 - (fTemp2 + (fTemp5 - fTemp3)))) + ((((1.3551533308811195e-17 * fTemp12) + (3.1620244387226126e-17 * fTemp10)) + (7.6227374862062938e-18 * fTemp31)) + (1.7786387467814686e-17 * fTemp34)))))); - fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); - fVbargraph34 = FAUSTFLOAT(fRec35[0]); - output8[i] = FAUSTFLOAT(fTemp51); + double fTemp26 = (0.79056941504209477 * fTemp25); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph31 = FAUSTFLOAT(fRec30[0]); + output15[i] = FAUSTFLOAT(fTemp26); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; + fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; fRec5[1] = fRec5[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec7[1] = fRec7[0]; - fRec8[1] = fRec8[0]; + fRec6[1] = fRec6[0]; fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; + fRec8[1] = fRec8[0]; fRec11[1] = fRec11[0]; - fRec12[1] = fRec12[0]; + fRec10[1] = fRec10[0]; fRec13[1] = fRec13[0]; - fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; fRec15[1] = fRec15[0]; - fRec16[1] = fRec16[0]; + fRec14[1] = fRec14[0]; fRec17[1] = fRec17[0]; - fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; + fRec18[1] = fRec18[0]; fRec21[1] = fRec21[0]; - fRec22[1] = fRec22[0]; + fRec20[1] = fRec20[0]; fRec23[1] = fRec23[0]; - fRec24[1] = fRec24[0]; + fRec22[1] = fRec22[0]; fRec25[1] = fRec25[0]; - fRec26[1] = fRec26[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; - fRec0[1] = fRec0[0]; - fRec28[1] = fRec28[0]; + fRec26[1] = fRec26[0]; fRec29[1] = fRec29[0]; - fRec30[1] = fRec30[0]; + fRec28[1] = fRec28[0]; fRec31[1] = fRec31[0]; - fRec32[1] = fRec32[0]; - fRec33[1] = fRec33[0]; - fRec34[1] = fRec34[0]; - fRec35[1] = fRec35[0]; + fRec30[1] = fRec30[0]; } @@ -1454,7 +1386,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1686,7 +1617,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1749,7 +1680,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1778,11 +1709,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecBinauralLebedev501.cpp b/source/HOAUGens/HOADecBinaural1.cpp similarity index 55% rename from source/HOAUGens/HOADecBinauralLebedev501.cpp rename to source/HOAUGens/HOADecBinaural1.cpp index c00b2c7b53..adde48bc27 100644 --- a/source/HOAUGens/HOADecBinauralLebedev501.cpp +++ b/source/HOAUGens/HOADecBinaural1.cpp @@ -2,9 +2,10 @@ author: "Pierre Lecomte" copyright: "(c) Pierre Lecomte 2015" license: "GPL)" -name: "HOADecBinauralLebedev501" +name: "HOADecBinaural1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -648,18 +664,18 @@ class mydsp : public dsp { m->declare("copyright", "(c) Pierre Lecomte 2015"); m->declare("filters.lib/name", "Faust Filters Library"); m->declare("filters.lib/version", "0.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL)"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); - m->declare("name", "HOADecBinauralLebedev501"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOADecBinaural1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); @@ -728,7 +744,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); } @@ -804,32 +820,32 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOADecBinauralLebedev501"); + ui_interface->openVerticalBox("HOADecBinaural1"); ui_interface->openHorizontalBox("Inputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x442b120", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3606590", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x4408a30", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35e5b70", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x43dcb20", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35b95d0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x43b1140", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x358e450", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fVslider1, "1", ""); @@ -844,11 +860,11 @@ class mydsp : public dsp { ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("Left"); ui_interface->declare(&fHbargraph0, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x451a1b0", &fHbargraph0, -70.0, 6.0); + ui_interface->addHorizontalBargraph("0x36f74c0", &fHbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openHorizontalBox("Right"); ui_interface->declare(&fHbargraph1, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x45cf730", &fHbargraph1, -70.0, 6.0); + ui_interface->addHorizontalBargraph("0x37aca40", &fHbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -883,11 +899,11 @@ class mydsp : public dsp { fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph3 = FAUSTFLOAT(fRec6[0]); fVec3[(IOTA & 127)] = fTemp3; - double fTemp4 = (fRec1[0] * (((2.4533100000000001e-06 * fVec0[((IOTA - 126) & 127)]) + ((1.70273e-06 * fVec0[((IOTA - 125) & 127)]) + ((8.0341699999999997e-06 * fVec0[((IOTA - 123) & 127)]) + ((3.8827600000000008e-05 * fVec0[((IOTA - 122) & 127)]) + ((0.000101833 * fVec0[((IOTA - 121) & 127)]) + ((0.000105639 * fVec0[((IOTA - 120) & 127)]) + ((3.9296600000000006e-05 * fVec0[((IOTA - 119) & 127)]) + ((3.85491e-05 * fVec0[((IOTA - 117) & 127)]) + ((0.00018456300000000003 * fVec0[((IOTA - 116) & 127)]) + ((0.000184012 * fVec0[((IOTA - 115) & 127)]) + ((0.0019589099999999999 * fVec0[((IOTA - 96) & 127)]) + ((0.0031713800000000001 * fVec0[((IOTA - 95) & 127)]) + ((0.00068253400000000005 * fVec0[((IOTA - 94) & 127)]) + ((0.00056285600000000003 * fVec0[((IOTA - 91) & 127)]) + ((0.0014036900000000002 * fVec0[((IOTA - 90) & 127)]) + ((0.00337025 * fVec0[((IOTA - 87) & 127)]) + ((0.0052786200000000004 * fVec0[((IOTA - 86) & 127)]) + ((0.0015441700000000001 * fVec0[((IOTA - 85) & 127)]) + ((0.00036768800000000002 * fVec0[((IOTA - 84) & 127)]) + ((0.00069545300000000007 * fVec0[((IOTA - 83) & 127)]) + ((0.0010311999999999999 * fVec0[((IOTA - 65) & 127)]) + ((0.00113331 * fVec0[((IOTA - 64) & 127)]) + ((0.0014698599999999999 * fVec0[((IOTA - 63) & 127)]) + ((0.0020663499999999998 * fVec0[((IOTA - 57) & 127)]) + ((0.00288332 * fVec0[((IOTA - 56) & 127)]) + ((0.0008817050000000001 * fVec0[((IOTA - 55) & 127)]) + ((0.0035919900000000002 * fVec0[((IOTA - 54) & 127)]) + ((0.0016634199999999999 * fVec0[((IOTA - 53) & 127)]) + ((0.0012247 * fVec0[((IOTA - 52) & 127)]) + ((0.00117636 * fVec0[((IOTA - 51) & 127)]) + ((0.0053477200000000003 * fVec0[((IOTA - 49) & 127)]) + ((0.00571347 * fVec0[((IOTA - 48) & 127)]) + ((0.0068109299999999998 * fVec0[((IOTA - 45) & 127)]) + ((0.00503769 * fVec0[((IOTA - 44) & 127)]) + ((0.0033690899999999999 * fVec0[((IOTA - 43) & 127)]) + ((0.0081425600000000001 * fVec0[((IOTA - 42) & 127)]) + ((0.0048383499999999999 * fVec0[((IOTA - 39) & 127)]) + ((1.73416e-05 * fVec0[((IOTA - 38) & 127)]) + ((0.0011593500000000002 * fVec0[((IOTA - 37) & 127)]) + ((0.00341282 * fVec0[((IOTA - 36) & 127)]) + ((0.0053672899999999994 * fVec0[((IOTA - 34) & 127)]) + ((0.0060068300000000003 * fVec0[((IOTA - 33) & 127)]) + ((0.036282299999999996 * fVec0[((IOTA - 30) & 127)]) + ((0.0096774400000000007 * fVec0[((IOTA - 29) & 127)]) + ((0.03066 * fVec0[((IOTA - 26) & 127)]) + ((0.0019489700000000002 * fVec0[((IOTA - 23) & 127)]) + ((9.4065400000000002e-05 * fVec0[((IOTA - 22) & 127)]) + ((0.000702438 * fVec0[((IOTA - 20) & 127)]) + ((0.0174746 * fVec0[((IOTA - 18) & 127)]) + ((0.021190899999999999 * fVec0[((IOTA - 17) & 127)]) + ((0.0025345699999999999 * fVec0[((IOTA - 16) & 127)]) + ((0.0025992000000000003 * fVec0[((IOTA - 15) & 127)]) + ((0.0061892400000000004 * fVec0[((IOTA - 13) & 127)]) + ((0.0020100199999999999 * fVec0[((IOTA - 10) & 127)]) + ((0.00148817 * fVec0[((IOTA - 8) & 127)]) + ((0.00053443399999999997 * fVec0[((IOTA - 6) & 127)]) + ((0.00069470999999999997 * fVec0[((IOTA - 4) & 127)]) + ((0.00013874000000000002 * fVec0[((IOTA - 2) & 127)]) + ((2.49699e-05 * fVec0[((IOTA - 1) & 127)]) + ((9.9362800000000004e-06 * fTemp0) + ((2.4082099999999999e-06 * fVec1[((IOTA - 126) & 127)]) + ((8.464169999999999e-06 * fVec1[((IOTA - 125) & 127)]) + ((8.8836499999999992e-06 * fVec1[((IOTA - 124) & 127)]) + ((8.7967399999999994e-06 * fVec1[((IOTA - 123) & 127)]) + ((2.4375700000000001e-05 * fVec1[((IOTA - 122) & 127)]) + ((8.0066800000000004e-05 * fVec1[((IOTA - 121) & 127)]) + ((9.9426100000000014e-05 * fVec1[((IOTA - 120) & 127)]) + ((9.0816700000000014e-05 * fVec1[((IOTA - 119) & 127)]) + ((5.80835e-05 * fVec1[((IOTA - 118) & 127)]) + ((7.7452699999999998e-05 * fVec1[((IOTA - 117) & 127)]) + ((9.5024799999999997e-07 * fVec1[((IOTA - 116) & 127)]) + ((5.1149400000000002e-05 * fVec1[((IOTA - 98) & 127)]) + ((0.00032476299999999999 * fVec1[((IOTA - 97) & 127)]) + ((0.0012872900000000002 * fVec1[((IOTA - 94) & 127)]) + ((0.0022912900000000001 * fVec1[((IOTA - 93) & 127)]) + ((0.00119739 * fVec1[((IOTA - 92) & 127)]) + ((0.00070883900000000006 * fVec0[((IOTA - 62) & 127)]) + ((0.0019518999999999999 * fVec1[((IOTA - 90) & 127)]) + ((0.0043689900000000005 * fVec1[((IOTA - 89) & 127)]) + ((0.00375801 * fVec1[((IOTA - 88) & 127)]) + ((0.0016994499999999999 * fVec1[((IOTA - 87) & 127)]) + ((0.0032713800000000004 * fVec1[((IOTA - 86) & 127)]) + ((0.0036832600000000003 * fVec1[((IOTA - 85) & 127)]) + ((0.00089328000000000009 * fVec1[((IOTA - 84) & 127)]) + ((0.00072158200000000002 * fVec1[((IOTA - 83) & 127)]) + ((0.00038337700000000001 * fVec1[((IOTA - 80) & 127)]) + ((0.0016079900000000001 * fVec1[((IOTA - 79) & 127)]) + ((0.0020680200000000003 * fVec1[((IOTA - 78) & 127)]) + ((0.00028545500000000005 * fVec1[((IOTA - 77) & 127)]) + ((0.00025900400000000002 * fVec1[((IOTA - 75) & 127)]) + ((3.3718100000000005e-05 * fVec1[((IOTA - 63) & 127)]) + ((0.0016691100000000001 * fVec1[((IOTA - 62) & 127)]) + ((0.00089519800000000015 * fVec1[((IOTA - 60) & 127)]) + ((0.00079125400000000002 * fVec1[((IOTA - 59) & 127)]) + ((0.00099548200000000001 * fVec1[((IOTA - 58) & 127)]) + ((0.0024358800000000001 * fVec1[((IOTA - 54) & 127)]) + ((0.0056765999999999995 * fVec1[((IOTA - 53) & 127)]) + ((0.0027909200000000001 * fVec1[((IOTA - 52) & 127)]) + ((0.00077908600000000012 * fVec1[((IOTA - 51) & 127)]) + ((0.0016214599999999999 * fVec1[((IOTA - 50) & 127)]) + ((0.0042173100000000002 * fVec1[((IOTA - 48) & 127)]) + ((0.0091871399999999999 * fVec1[((IOTA - 47) & 127)]) + ((0.0013077200000000001 * fVec1[((IOTA - 46) & 127)]) + ((0.0021427500000000001 * fVec1[((IOTA - 45) & 127)]) + ((0.0022329500000000005 * fVec1[((IOTA - 44) & 127)]) + ((0.0028589500000000003 * fVec1[((IOTA - 42) & 127)]) + ((0.0070971000000000003 * fVec1[((IOTA - 41) & 127)]) + ((0.0053105900000000004 * fVec1[((IOTA - 40) & 127)]) + ((0.0030150300000000001 * fVec1[((IOTA - 39) & 127)]) + ((0.00053429399999999994 * fVec1[((IOTA - 36) & 127)]) + ((0.0164669 * fVec1[((IOTA - 35) & 127)]) + ((0.0086483100000000011 * fVec1[((IOTA - 32) & 127)]) + ((0.021576300000000003 * fVec1[((IOTA - 29) & 127)]) + ((0.021685099999999999 * fVec1[((IOTA - 28) & 127)]) + ((0.0057969700000000002 * fVec1[((IOTA - 26) & 127)]) + ((0.0057622799999999998 * fVec1[((IOTA - 24) & 127)]) + ((0.0197594 * fVec1[((IOTA - 21) & 127)]) + ((0.0121098 * fVec1[((IOTA - 20) & 127)]) + ((0.032535399999999999 * fVec1[((IOTA - 17) & 127)]) + ((0.00050339700000000005 * fVec1[((IOTA - 14) & 127)]) + ((0.00086802899999999998 * fVec1[((IOTA - 13) & 127)]) + ((0.0016583500000000001 * fVec1[((IOTA - 8) & 127)]) + ((0.00031507000000000003 * fVec1[((IOTA - 5) & 127)]) + ((0.00049461800000000005 * fVec1[((IOTA - 4) & 127)]) + ((0.00015840400000000001 * fVec1[((IOTA - 2) & 127)]) + ((2.8519800000000004e-05 * fVec1[((IOTA - 1) & 127)]) + ((4.4578800000000004e-06 * fTemp1) + ((1.1796500000000001e-05 * fVec2[((IOTA - 114) & 127)]) + ((0.00041981599999999999 * fVec2[((IOTA - 107) & 127)]) + ((5.3605900000000008e-05 * fVec2[((IOTA - 105) & 127)]) + ((0.00046969700000000004 * fVec2[((IOTA - 104) & 127)]) + ((0.00047704000000000008 * fVec2[((IOTA - 103) & 127)]) + ((0.00043236800000000009 * fVec2[((IOTA - 102) & 127)]) + ((0.00070973900000000003 * fVec2[((IOTA - 101) & 127)]) + ((0.000705385 * fVec2[((IOTA - 100) & 127)]) + ((0.00045614100000000008 * fVec2[((IOTA - 99) & 127)]) + ((0.00092227100000000001 * fVec2[((IOTA - 98) & 127)]) + ((0.00081300600000000002 * fVec2[((IOTA - 97) & 127)]) + ((0.000623519 * fVec2[((IOTA - 96) & 127)]) + ((0.0013659500000000001 * fVec2[((IOTA - 95) & 127)]) + ((0.00214314 * fVec2[((IOTA - 94) & 127)]) + ((0.0016777999999999999 * fVec2[((IOTA - 93) & 127)]) + ((0.00108099 * fVec2[((IOTA - 92) & 127)]) + ((6.7984800000000007e-05 * fVec2[((IOTA - 90) & 127)]) + ((0.000264467 * fVec2[((IOTA - 89) & 127)]) + ((0.00045975200000000007 * fVec2[((IOTA - 88) & 127)]) + ((0.0013345100000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.0013671599999999999 * fVec2[((IOTA - 86) & 127)]) + ((0.00088433700000000001 * fVec2[((IOTA - 85) & 127)]) + ((0.0010498400000000002 * fVec2[((IOTA - 84) & 127)]) + ((0.00300031 * fVec2[((IOTA - 83) & 127)]) + ((0.00033132700000000002 * fVec2[((IOTA - 82) & 127)]) + ((0.0037660800000000002 * fVec1[((IOTA - 33) & 127)]) + ((2.3648600000000003e-05 * fVec2[((IOTA - 80) & 127)]) + ((0.00058793100000000009 * fVec2[((IOTA - 79) & 127)]) + ((0.0027816299999999998 * fVec2[((IOTA - 78) & 127)]) + ((0.0017765299999999999 * fVec2[((IOTA - 77) & 127)]) + ((0.00046795000000000002 * fVec2[((IOTA - 73) & 127)]) + ((0.0016152100000000002 * fVec2[((IOTA - 72) & 127)]) + ((0.00010376700000000001 * fVec2[((IOTA - 71) & 127)]) + ((0.058508199999999996 * fVec2[((IOTA - 22) & 127)]) + ((0.050635700000000006 * fVec2[((IOTA - 21) & 127)]) + ((0.041341200000000002 * fVec2[((IOTA - 20) & 127)]) + ((0.0214629 * fVec2[((IOTA - 19) & 127)]) + ((0.029345699999999999 * fVec2[((IOTA - 18) & 127)]) + ((0.088954799999999987 * fVec2[((IOTA - 17) & 127)]) + ((0.078143400000000002 * fVec2[((IOTA - 15) & 127)]) + ((0.060886200000000001 * fVec2[((IOTA - 14) & 127)]) + ((0.077131900000000003 * fVec2[((IOTA - 13) & 127)]) + ((0.090551499999999993 * fVec2[((IOTA - 12) & 127)]) + ((0.0054581200000000003 * fVec2[((IOTA - 11) & 127)]) + ((0.0018110400000000001 * fVec2[((IOTA - 9) & 127)]) + ((0.00194177 * fVec2[((IOTA - 7) & 127)]) + ((0.00114689 * fVec2[((IOTA - 5) & 127)]) + ((0.00058690300000000006 * fVec2[((IOTA - 4) & 127)]) + ((0.0012299100000000001 * fVec2[((IOTA - 3) & 127)]) + ((0.00015469 * fVec2[((IOTA - 1) & 127)]) + ((3.3955100000000003e-05 * fTemp2) + ((2.0625300000000001e-06 * fVec3[((IOTA - 126) & 127)]) + ((5.0813899999999995e-06 * fVec3[((IOTA - 125) & 127)]) + ((5.7126099999999992e-06 * fVec3[((IOTA - 124) & 127)]) + ((2.09787e-05 * fVec3[((IOTA - 123) & 127)]) + ((1.8717900000000003e-05 * fVec3[((IOTA - 122) & 127)]) + ((4.2541300000000006e-05 * fVec3[((IOTA - 121) & 127)]) + ((0.00010654600000000001 * fVec3[((IOTA - 120) & 127)]) + ((0.00016404399999999999 * fVec3[((IOTA - 119) & 127)]) + ((0.00016872499999999999 * fVec3[((IOTA - 118) & 127)]) + ((0.00025855300000000002 * fVec3[((IOTA - 117) & 127)]) + ((0.00034160000000000001 * fVec3[((IOTA - 116) & 127)]) + ((0.00045382400000000002 * fVec3[((IOTA - 115) & 127)]) + ((0.00054736599999999998 * fVec3[((IOTA - 114) & 127)]) + ((0.00053358400000000003 * fVec3[((IOTA - 113) & 127)]) + ((0.00050102000000000002 * fVec3[((IOTA - 112) & 127)]) + ((0.00067625599999999997 * fVec3[((IOTA - 111) & 127)]) + ((0.00098166300000000002 * fVec3[((IOTA - 110) & 127)]) + ((0.00083451500000000008 * fVec3[((IOTA - 109) & 127)]) + ((0.0009436510000000001 * fVec3[((IOTA - 108) & 127)]) + ((0.0012923000000000001 * fVec3[((IOTA - 107) & 127)]) + ((0.00136699 * fVec3[((IOTA - 106) & 127)]) + ((0.0014059200000000002 * fVec3[((IOTA - 105) & 127)]) + ((0.0012065399999999999 * fVec3[((IOTA - 104) & 127)]) + ((0.00185348 * fVec3[((IOTA - 103) & 127)]) + ((0.00154024 * fVec3[((IOTA - 102) & 127)]) + ((0.00087727600000000008 * fVec3[((IOTA - 101) & 127)]) + ((0.00050683400000000006 * fVec3[((IOTA - 100) & 127)]) + ((0.00061282500000000011 * fVec3[((IOTA - 99) & 127)]) + ((0.00058470199999999999 * fVec3[((IOTA - 98) & 127)]) + ((0.00054874000000000004 * fVec3[((IOTA - 96) & 127)]) + ((0.00272945 * fVec3[((IOTA - 95) & 127)]) + ((0.0021461499999999999 * fVec3[((IOTA - 94) & 127)]) + ((2.3955000000000004e-05 * fVec3[((IOTA - 93) & 127)]) + ((0.00041329900000000006 * fVec3[((IOTA - 90) & 127)]) + ((0.0037083100000000003 * fVec3[((IOTA - 87) & 127)]) + ((0.0051757600000000006 * fVec3[((IOTA - 86) & 127)]) + ((0.0016799500000000001 * fVec3[((IOTA - 85) & 127)]) + ((0.0015701700000000001 * fVec3[((IOTA - 83) & 127)]) + ((0.00056369199999999997 * fVec3[((IOTA - 82) & 127)]) + ((0.0024365300000000001 * fVec3[((IOTA - 80) & 127)]) + ((0.0041905200000000005 * fVec3[((IOTA - 79) & 127)]) + ((0.0024405 * fVec3[((IOTA - 78) & 127)]) + ((0.00082847699999999999 * fVec3[((IOTA - 77) & 127)]) + ((0.0041945800000000007 * fVec3[((IOTA - 76) & 127)]) + ((0.0063743100000000002 * fVec3[((IOTA - 75) & 127)]) + ((0.0029129100000000003 * fVec3[((IOTA - 74) & 127)]) + ((0.0030868900000000001 * fVec3[((IOTA - 73) & 127)]) + ((0.0052356299999999998 * fVec3[((IOTA - 72) & 127)]) + ((0.0032107500000000001 * fVec3[((IOTA - 71) & 127)]) + ((0.00185049 * fVec3[((IOTA - 70) & 127)]) + ((0.0014647 * fVec3[((IOTA - 69) & 127)]) + ((0.0022559300000000002 * fVec3[((IOTA - 68) & 127)]) + ((0.0034284599999999999 * fVec3[((IOTA - 67) & 127)]) + ((0.0023089200000000003 * fVec3[((IOTA - 66) & 127)]) + ((0.0027403499999999999 * fVec3[((IOTA - 65) & 127)]) + ((0.0042152999999999999 * fVec3[((IOTA - 64) & 127)]) + ((0.0062385100000000001 * fVec3[((IOTA - 63) & 127)]) + ((0.0068040700000000006 * fVec3[((IOTA - 62) & 127)]) + ((0.0035775299999999998 * fVec3[((IOTA - 61) & 127)]) + ((0.0042250600000000001 * fVec3[((IOTA - 60) & 127)]) + ((0.0031211899999999998 * fVec3[((IOTA - 59) & 127)]) + ((0.0036129299999999999 * fVec3[((IOTA - 58) & 127)]) + ((0.0050028199999999998 * fVec3[((IOTA - 57) & 127)]) + ((0.0012118500000000002 * fVec3[((IOTA - 56) & 127)]) + ((0.0012461600000000001 * fVec3[((IOTA - 55) & 127)]) + ((0.00305273 * fVec3[((IOTA - 54) & 127)]) + ((0.00325793 * fVec3[((IOTA - 53) & 127)]) + ((0.0028833999999999999 * fVec3[((IOTA - 52) & 127)]) + ((0.0036652500000000001 * fVec3[((IOTA - 51) & 127)]) + ((0.00086377000000000014 * fVec3[((IOTA - 50) & 127)]) + ((0.00175234 * fVec3[((IOTA - 49) & 127)]) + ((0.00306785 * fVec3[((IOTA - 48) & 127)]) + ((0.00250454 * fVec3[((IOTA - 46) & 127)]) + ((0.015005800000000001 * fVec3[((IOTA - 45) & 127)]) + ((0.0079248200000000008 * fVec3[((IOTA - 44) & 127)]) + ((0.0028857800000000001 * fVec3[((IOTA - 43) & 127)]) + ((0.0074329900000000004 * fVec3[((IOTA - 42) & 127)]) + ((0.0056945699999999995 * fVec3[((IOTA - 41) & 127)]) + ((0.0064973000000000001 * fVec3[((IOTA - 40) & 127)]) + ((0.011589100000000001 * fVec3[((IOTA - 39) & 127)]) + ((0.0069301900000000001 * fVec3[((IOTA - 38) & 127)]) + ((0.0079812000000000008 * fVec3[((IOTA - 37) & 127)]) + ((0.0141227 * fVec3[((IOTA - 36) & 127)]) + ((0.0044680700000000002 * fVec3[((IOTA - 35) & 127)]) + ((0.020023599999999999 * fVec3[((IOTA - 34) & 127)]) + ((0.023001999999999998 * fVec3[((IOTA - 33) & 127)]) + ((0.0057082499999999998 * fVec3[((IOTA - 32) & 127)]) + ((0.011366300000000001 * fVec3[((IOTA - 31) & 127)]) + ((0.0266261 * fVec3[((IOTA - 30) & 127)]) + ((0.0087064099999999995 * fVec3[((IOTA - 29) & 127)]) + ((0.030624600000000002 * fVec3[((IOTA - 27) & 127)]) + ((0.0528391 * fVec3[((IOTA - 26) & 127)]) + ((0.031746299999999998 * fVec3[((IOTA - 25) & 127)]) + ((((((((((((((((((((((((2.5118200000000003e-05 * fTemp3) + (0.00012370799999999999 * fVec3[((IOTA - 1) & 127)])) + (0.00096838400000000008 * fVec3[((IOTA - 3) & 127)])) + (0.00059949000000000005 * fVec3[((IOTA - 4) & 127)])) + (0.00076772799999999997 * fVec3[((IOTA - 5) & 127)])) + (0.00014117900000000001 * fVec3[((IOTA - 6) & 127)])) + (0.0018634200000000002 * fVec3[((IOTA - 7) & 127)])) + (0.00024957099999999997 * fVec3[((IOTA - 8) & 127)])) + (0.0011589199999999999 * fVec3[((IOTA - 9) & 127)])) + (0.00050879500000000004 * fVec3[((IOTA - 10) & 127)])) + (0.0036302599999999997 * fVec3[((IOTA - 11) & 127)])) + (0.056510400000000002 * fVec3[((IOTA - 12) & 127)])) + (0.049342300000000006 * fVec3[((IOTA - 13) & 127)])) + (0.0449074 * fVec3[((IOTA - 14) & 127)])) + (0.064749100000000004 * fVec3[((IOTA - 15) & 127)])) + (0.059606500000000007 * fVec3[((IOTA - 16) & 127)])) + (0.073495100000000008 * fVec3[((IOTA - 17) & 127)])) + (0.034514800000000005 * fVec3[((IOTA - 18) & 127)])) + (0.055772500000000003 * fVec3[((IOTA - 19) & 127)])) + (0.06596840000000001 * fVec3[((IOTA - 20) & 127)])) + (0.057809200000000005 * fVec3[((IOTA - 21) & 127)])) + (0.096895100000000012 * fVec3[((IOTA - 22) & 127)])) + (0.021260899999999999 * fVec3[((IOTA - 23) & 127)])) + (0.063658400000000004 * fVec2[((IOTA - 16) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((6.9716599999999994e-06 * fVec0[((IOTA - 124) & 127)]) + ((9.8485200000000004e-06 * fVec0[((IOTA - 118) & 127)]) + ((0.00010357900000000001 * fVec0[((IOTA - 114) & 127)]) + ((0.00042897299999999997 * fVec0[((IOTA - 113) & 127)]) + ((0.00029024100000000006 * fVec0[((IOTA - 112) & 127)]) + ((9.8297200000000012e-05 * fVec0[((IOTA - 111) & 127)]) + ((0.00020804999999999999 * fVec0[((IOTA - 110) & 127)]) + ((0.00054109500000000001 * fVec0[((IOTA - 109) & 127)]) + ((0.00083962700000000002 * fVec0[((IOTA - 108) & 127)]) + ((0.00056389100000000007 * fVec0[((IOTA - 107) & 127)]) + ((0.00051816800000000006 * fVec0[((IOTA - 106) & 127)]) + ((0.00065456900000000003 * fVec0[((IOTA - 105) & 127)]) + ((0.00088825400000000011 * fVec0[((IOTA - 104) & 127)]) + ((0.000446193 * fVec0[((IOTA - 103) & 127)]) + ((0.00071199100000000003 * fVec0[((IOTA - 102) & 127)]) + ((0.0012468500000000001 * fVec0[((IOTA - 101) & 127)]) + ((0.0012435300000000001 * fVec0[((IOTA - 100) & 127)]) + ((0.0010388900000000002 * fVec0[((IOTA - 99) & 127)]) + ((0.00170268 * fVec0[((IOTA - 98) & 127)]) + ((0.00126004 * fVec0[((IOTA - 97) & 127)]) + ((0.0013548899999999999 * fVec0[((IOTA - 93) & 127)]) + ((0.0020163799999999999 * fVec0[((IOTA - 92) & 127)]) + ((0.0010302600000000001 * fVec0[((IOTA - 89) & 127)]) + ((0.00142103 * fVec0[((IOTA - 88) & 127)]) + ((0.0020040399999999999 * fVec0[((IOTA - 82) & 127)]) + ((0.0030592000000000002 * fVec0[((IOTA - 81) & 127)]) + ((0.00082976100000000015 * fVec0[((IOTA - 80) & 127)]) + ((0.00083032800000000008 * fVec0[((IOTA - 79) & 127)]) + ((0.00146794 * fVec0[((IOTA - 78) & 127)]) + ((0.0029912300000000001 * fVec0[((IOTA - 77) & 127)]) + ((0.0019008400000000002 * fVec0[((IOTA - 76) & 127)]) + ((0.00032308700000000001 * fVec0[((IOTA - 75) & 127)]) + ((0.00121188 * fVec0[((IOTA - 74) & 127)]) + ((0.0015286800000000001 * fVec0[((IOTA - 73) & 127)]) + ((0.0016313200000000001 * fVec0[((IOTA - 72) & 127)]) + ((0.0019843199999999999 * fVec0[((IOTA - 71) & 127)]) + ((0.0031219500000000001 * fVec0[((IOTA - 70) & 127)]) + ((0.0017147500000000001 * fVec0[((IOTA - 69) & 127)]) + ((4.5241600000000004e-05 * fVec0[((IOTA - 68) & 127)]) + ((0.00193403 * fVec0[((IOTA - 67) & 127)]) + ((0.00103439 * fVec0[((IOTA - 66) & 127)]) + ((0.00025587599999999999 * fVec0[((IOTA - 61) & 127)]) + ((0.0014905299999999999 * fVec0[((IOTA - 60) & 127)]) + ((0.000502175 * fVec0[((IOTA - 59) & 127)]) + ((0.00055048599999999999 * fVec0[((IOTA - 58) & 127)]) + ((0.00049892100000000004 * fVec0[((IOTA - 50) & 127)]) + ((0.0029968600000000001 * fVec0[((IOTA - 47) & 127)]) + ((0.0024887899999999998 * fVec0[((IOTA - 46) & 127)]) + ((0.0030320900000000003 * fVec0[((IOTA - 41) & 127)]) + ((0.0076587399999999998 * fVec0[((IOTA - 40) & 127)]) + ((0.010064699999999999 * fVec0[((IOTA - 35) & 127)]) + ((0.030136699999999999 * fVec0[((IOTA - 32) & 127)]) + ((0.017341200000000001 * fVec0[((IOTA - 31) & 127)]) + ((0.039170099999999999 * fVec0[((IOTA - 28) & 127)]) + ((0.00031563800000000003 * fVec0[((IOTA - 27) & 127)]) + ((0.00069887100000000011 * fVec0[((IOTA - 25) & 127)]) + ((0.025458500000000002 * fVec0[((IOTA - 24) & 127)]) + ((0.0120184 * fVec0[((IOTA - 21) & 127)]) + ((0.011691100000000001 * fVec0[((IOTA - 19) & 127)]) + ((0.0053095800000000004 * fVec0[((IOTA - 14) & 127)]) + ((0.0072171800000000001 * fVec0[((IOTA - 12) & 127)]) + ((0.0030320200000000003 * fVec0[((IOTA - 11) & 127)]) + ((0.00131485 * fVec0[((IOTA - 9) & 127)]) + ((0.0011081700000000001 * fVec0[((IOTA - 7) & 127)]) + ((0.00036208399999999998 * fVec0[((IOTA - 5) & 127)]) + (((6.574880000000001e-05 * fVec1[((IOTA - 115) & 127)]) + ((7.5893800000000015e-05 * fVec1[((IOTA - 114) & 127)]) + ((0.00055035400000000008 * fVec1[((IOTA - 113) & 127)]) + ((0.00054230400000000007 * fVec1[((IOTA - 112) & 127)]) + ((0.00038862600000000004 * fVec1[((IOTA - 111) & 127)]) + ((0.00038355300000000002 * fVec1[((IOTA - 110) & 127)]) + ((0.0010789999999999999 * fVec1[((IOTA - 109) & 127)]) + ((0.00127535 * fVec1[((IOTA - 108) & 127)]) + ((0.00026040700000000004 * fVec1[((IOTA - 107) & 127)]) + ((0.00064190699999999994 * fVec1[((IOTA - 106) & 127)]) + ((0.0012643700000000001 * fVec1[((IOTA - 105) & 127)]) + ((0.0014951399999999998 * fVec1[((IOTA - 104) & 127)]) + ((0.00096466700000000011 * fVec1[((IOTA - 103) & 127)]) + ((0.00062200899999999997 * fVec1[((IOTA - 102) & 127)]) + ((0.0013151 * fVec1[((IOTA - 101) & 127)]) + ((0.00155276 * fVec1[((IOTA - 100) & 127)]) + ((0.00147963 * fVec1[((IOTA - 99) & 127)]) + ((0.0012132899999999999 * fVec1[((IOTA - 96) & 127)]) + ((0.0010497099999999999 * fVec1[((IOTA - 95) & 127)]) + ((5.4447799999999994e-06 * fVec1[((IOTA - 91) & 127)]) + ((0.00060830200000000002 * fVec1[((IOTA - 82) & 127)]) + ((0.00073753600000000001 * fVec1[((IOTA - 81) & 127)]) + ((4.1098800000000007e-05 * fVec1[((IOTA - 76) & 127)]) + ((0.00031511100000000003 * fVec1[((IOTA - 74) & 127)]) + ((0.0011385200000000001 * fVec1[((IOTA - 73) & 127)]) + ((0.0023925600000000002 * fVec1[((IOTA - 72) & 127)]) + ((0.00191902 * fVec1[((IOTA - 71) & 127)]) + ((0.00073584900000000001 * fVec1[((IOTA - 70) & 127)]) + ((0.0033698500000000002 * fVec1[((IOTA - 69) & 127)]) + ((0.0046562499999999998 * fVec1[((IOTA - 68) & 127)]) + ((0.0026088700000000001 * fVec1[((IOTA - 67) & 127)]) + ((0.0015381499999999998 * fVec1[((IOTA - 66) & 127)]) + ((0.00177024 * fVec1[((IOTA - 65) & 127)]) + ((0.0027169400000000002 * fVec1[((IOTA - 64) & 127)]) + ((0.0011334100000000001 * fVec1[((IOTA - 61) & 127)]) + ((0.0012374899999999999 * fVec1[((IOTA - 57) & 127)]) + ((0.00350462 * fVec1[((IOTA - 56) & 127)]) + ((0.00029472900000000003 * fVec1[((IOTA - 55) & 127)]) + ((0.00161133 * fVec1[((IOTA - 49) & 127)]) + ((0.0043256300000000004 * fVec1[((IOTA - 43) & 127)]) + ((0.0039263700000000002 * fVec1[((IOTA - 38) & 127)]) + ((0.0193136 * fVec1[((IOTA - 37) & 127)]) + ((0.0137585 * fVec1[((IOTA - 34) & 127)]) + ((0.016165499999999999 * fVec1[((IOTA - 31) & 127)]) + ((0.0200181 * fVec1[((IOTA - 30) & 127)]) + ((0.00436148 * fVec1[((IOTA - 27) & 127)]) + ((0.0115485 * fVec1[((IOTA - 25) & 127)]) + ((0.0032127699999999998 * fVec1[((IOTA - 23) & 127)]) + ((0.0057804000000000006 * fVec1[((IOTA - 22) & 127)]) + ((0.037111700000000004 * fVec1[((IOTA - 19) & 127)]) + ((0.014907300000000002 * fVec1[((IOTA - 18) & 127)]) + ((0.0092683000000000001 * fVec1[((IOTA - 16) & 127)]) + ((0.0158698 * fVec1[((IOTA - 15) & 127)]) + ((0.00489909 * fVec1[((IOTA - 12) & 127)]) + ((0.00036272099999999999 * fVec1[((IOTA - 11) & 127)]) + ((0.00043871700000000003 * fVec1[((IOTA - 10) & 127)]) + ((0.00018132700000000001 * fVec1[((IOTA - 9) & 127)]) + ((0.00097058900000000011 * fVec1[((IOTA - 7) & 127)]) + ((0.00016036100000000001 * fVec1[((IOTA - 6) & 127)]) + (((1.8656099999999998e-06 * fVec2[((IOTA - 126) & 127)]) + ((2.5639300000000001e-06 * fVec2[((IOTA - 125) & 127)]) + ((8.3185099999999991e-06 * fVec2[((IOTA - 124) & 127)]) + ((3.8801999999999999e-05 * fVec2[((IOTA - 123) & 127)]) + ((6.5230500000000005e-05 * fVec2[((IOTA - 122) & 127)]) + ((4.81323e-05 * fVec2[((IOTA - 121) & 127)]) + ((3.1175000000000006e-05 * fVec2[((IOTA - 120) & 127)]) + ((1.1129000000000001e-05 * fVec2[((IOTA - 119) & 127)]) + ((0.00016385400000000001 * fVec2[((IOTA - 118) & 127)]) + ((0.000137362 * fVec2[((IOTA - 117) & 127)]) + ((9.139900000000001e-05 * fVec2[((IOTA - 116) & 127)]) + ((0.00012562199999999998 * fVec2[((IOTA - 115) & 127)]) + ((0.00025063300000000005 * fVec2[((IOTA - 113) & 127)]) + ((0.000272806 * fVec2[((IOTA - 112) & 127)]) + ((0.000314307 * fVec2[((IOTA - 111) & 127)]) + ((0.00026935700000000002 * fVec2[((IOTA - 110) & 127)]) + ((0.00027303400000000002 * fVec2[((IOTA - 109) & 127)]) + ((8.74662e-06 * fVec2[((IOTA - 108) & 127)]) + ((0.00035653000000000003 * fVec2[((IOTA - 106) & 127)]) + ((0.000138672 * fVec2[((IOTA - 91) & 127)]) + ((0.0011749499999999999 * fVec2[((IOTA - 81) & 127)]) + ((0.00092974400000000003 * fVec2[((IOTA - 76) & 127)]) + ((0.00189912 * fVec2[((IOTA - 75) & 127)]) + ((0.0018498099999999999 * fVec2[((IOTA - 74) & 127)]) + ((0.00102903 * fVec2[((IOTA - 70) & 127)]) + ((0.0023879000000000001 * fVec2[((IOTA - 69) & 127)]) + ((0.0030104600000000004 * fVec2[((IOTA - 68) & 127)]) + ((0.00157916 * fVec2[((IOTA - 67) & 127)]) + ((0.0021747000000000003 * fVec2[((IOTA - 66) & 127)]) + ((0.0024374800000000001 * fVec2[((IOTA - 65) & 127)]) + ((0.0017056100000000002 * fVec2[((IOTA - 64) & 127)]) + ((0.00246014 * fVec2[((IOTA - 63) & 127)]) + ((0.0044470300000000003 * fVec2[((IOTA - 62) & 127)]) + ((0.0047484400000000005 * fVec2[((IOTA - 61) & 127)]) + ((0.0027951100000000004 * fVec2[((IOTA - 60) & 127)]) + ((0.0047547600000000002 * fVec2[((IOTA - 59) & 127)]) + ((0.0037710400000000002 * fVec2[((IOTA - 58) & 127)]) + ((0.0045419900000000001 * fVec2[((IOTA - 57) & 127)]) + ((0.010441600000000001 * fVec2[((IOTA - 56) & 127)]) + ((0.0100582 * fVec2[((IOTA - 55) & 127)]) + ((0.0076609499999999997 * fVec2[((IOTA - 54) & 127)]) + ((0.0068764300000000002 * fVec2[((IOTA - 53) & 127)]) + ((0.0095819500000000005 * fVec2[((IOTA - 52) & 127)]) + ((0.015913200000000002 * fVec2[((IOTA - 51) & 127)]) + ((0.015119400000000002 * fVec2[((IOTA - 50) & 127)]) + ((0.0128559 * fVec2[((IOTA - 49) & 127)]) + ((0.016606200000000002 * fVec2[((IOTA - 48) & 127)]) + ((0.016194200000000002 * fVec2[((IOTA - 47) & 127)]) + ((0.0116756 * fVec2[((IOTA - 46) & 127)]) + ((0.008875280000000001 * fVec2[((IOTA - 45) & 127)]) + ((0.016079200000000002 * fVec2[((IOTA - 44) & 127)]) + ((0.0188738 * fVec2[((IOTA - 43) & 127)]) + ((0.022184499999999999 * fVec2[((IOTA - 42) & 127)]) + ((0.020373700000000002 * fVec2[((IOTA - 41) & 127)]) + ((0.0086227300000000003 * fVec2[((IOTA - 40) & 127)]) + ((0.015368999999999999 * fVec2[((IOTA - 39) & 127)]) + ((0.025263300000000002 * fVec2[((IOTA - 38) & 127)]) + ((0.026966700000000003 * fVec2[((IOTA - 37) & 127)]) + ((0.023967600000000002 * fVec2[((IOTA - 36) & 127)]) + ((0.0180915 * fVec2[((IOTA - 35) & 127)]) + ((0.026436999999999999 * fVec2[((IOTA - 34) & 127)]) + ((0.035762599999999999 * fVec2[((IOTA - 33) & 127)]) + ((0.019380700000000001 * fVec2[((IOTA - 32) & 127)]) + ((0.0052166499999999998 * fVec2[((IOTA - 31) & 127)]) + ((0.012525700000000001 * fVec2[((IOTA - 30) & 127)]) + ((0.039007399999999998 * fVec2[((IOTA - 29) & 127)]) + ((0.039406500000000004 * fVec2[((IOTA - 28) & 127)]) + ((0.0160175 * fVec2[((IOTA - 27) & 127)]) + ((0.0095142000000000004 * fVec2[((IOTA - 26) & 127)]) + ((0.00060328500000000006 * fVec2[((IOTA - 25) & 127)]) + ((0.042794800000000008 * fVec2[((IOTA - 24) & 127)]) + ((0.034687500000000003 * fVec2[((IOTA - 23) & 127)]) + ((0.0011779100000000001 * fVec2[((IOTA - 10) & 127)]) + ((0.000167329 * fVec2[((IOTA - 8) & 127)]) + ((0.00041459900000000003 * fVec2[((IOTA - 6) & 127)]) + ((((((((((((0.00017378000000000001 * fVec3[((IOTA - 2) & 127)]) + (0.015415000000000002 * fVec3[((IOTA - 24) & 127)])) + (0.0114164 * fVec3[((IOTA - 28) & 127)])) + (0.0029673899999999999 * fVec3[((IOTA - 47) & 127)])) + (0.0010694400000000001 * fVec3[((IOTA - 81) & 127)])) + (0.000311911 * fVec3[((IOTA - 84) & 127)])) + (0.00141242 * fVec3[((IOTA - 88) & 127)])) + (0.00134669 * fVec3[((IOTA - 89) & 127)])) + (0.0014838199999999998 * fVec3[((IOTA - 91) & 127)])) + (0.0024969700000000003 * fVec3[((IOTA - 92) & 127)])) + (0.00054486499999999995 * fVec3[((IOTA - 97) & 127)])) + (0.00031506200000000001 * fVec2[((IOTA - 2) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00019245000000000002 * fVec1[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00017773600000000001 * fVec0[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + double fTemp4 = (fRec1[0] * (((2.4533100000000001e-06 * fVec0[((IOTA - 126) & 127)]) + ((1.70273e-06 * fVec0[((IOTA - 125) & 127)]) + ((8.0341699999999997e-06 * fVec0[((IOTA - 123) & 127)]) + ((3.8827600000000008e-05 * fVec0[((IOTA - 122) & 127)]) + ((0.000101833 * fVec0[((IOTA - 121) & 127)]) + ((0.000105639 * fVec0[((IOTA - 120) & 127)]) + ((3.9296600000000006e-05 * fVec0[((IOTA - 119) & 127)]) + ((3.85491e-05 * fVec0[((IOTA - 117) & 127)]) + ((0.00018456300000000003 * fVec0[((IOTA - 116) & 127)]) + ((0.000184012 * fVec0[((IOTA - 115) & 127)]) + ((0.0019589099999999999 * fVec0[((IOTA - 96) & 127)]) + ((0.0031713800000000001 * fVec0[((IOTA - 95) & 127)]) + ((0.00068253400000000005 * fVec0[((IOTA - 94) & 127)]) + ((0.00056285600000000003 * fVec0[((IOTA - 91) & 127)]) + ((0.0014036900000000002 * fVec0[((IOTA - 90) & 127)]) + ((0.00337025 * fVec0[((IOTA - 87) & 127)]) + ((0.0052786200000000004 * fVec0[((IOTA - 86) & 127)]) + ((0.0015441700000000001 * fVec0[((IOTA - 85) & 127)]) + ((0.00036768800000000002 * fVec0[((IOTA - 84) & 127)]) + ((0.00069545300000000007 * fVec0[((IOTA - 83) & 127)]) + ((0.0010311999999999999 * fVec0[((IOTA - 65) & 127)]) + ((0.00113331 * fVec0[((IOTA - 64) & 127)]) + ((0.0014698599999999999 * fVec0[((IOTA - 63) & 127)]) + ((0.00070883900000000006 * fVec0[((IOTA - 62) & 127)]) + ((0.0020663499999999998 * fVec0[((IOTA - 57) & 127)]) + ((0.00288332 * fVec0[((IOTA - 56) & 127)]) + ((0.0008817050000000001 * fVec0[((IOTA - 55) & 127)]) + ((0.0035919900000000002 * fVec0[((IOTA - 54) & 127)]) + ((0.0016634199999999999 * fVec0[((IOTA - 53) & 127)]) + ((0.0012247 * fVec0[((IOTA - 52) & 127)]) + ((0.00117636 * fVec0[((IOTA - 51) & 127)]) + ((0.0053477200000000003 * fVec0[((IOTA - 49) & 127)]) + ((0.00571347 * fVec0[((IOTA - 48) & 127)]) + ((0.0068109299999999998 * fVec0[((IOTA - 45) & 127)]) + ((0.00503769 * fVec0[((IOTA - 44) & 127)]) + ((0.0033690899999999999 * fVec0[((IOTA - 43) & 127)]) + ((0.0081425600000000001 * fVec0[((IOTA - 42) & 127)]) + ((0.0048383499999999999 * fVec0[((IOTA - 39) & 127)]) + ((1.73416e-05 * fVec0[((IOTA - 38) & 127)]) + ((0.0011593500000000002 * fVec0[((IOTA - 37) & 127)]) + ((0.00341282 * fVec0[((IOTA - 36) & 127)]) + ((0.0053672899999999994 * fVec0[((IOTA - 34) & 127)]) + ((0.0060068300000000003 * fVec0[((IOTA - 33) & 127)]) + ((0.036282299999999996 * fVec0[((IOTA - 30) & 127)]) + ((0.0096774400000000007 * fVec0[((IOTA - 29) & 127)]) + ((0.03066 * fVec0[((IOTA - 26) & 127)]) + ((0.00053443399999999997 * fVec0[((IOTA - 6) & 127)]) + ((0.00069470999999999997 * fVec0[((IOTA - 4) & 127)]) + ((0.00013874000000000002 * fVec0[((IOTA - 2) & 127)]) + ((2.49699e-05 * fVec0[((IOTA - 1) & 127)]) + ((9.9362800000000004e-06 * fTemp0) + ((0.0019489700000000002 * fVec0[((IOTA - 23) & 127)]) + ((9.4065400000000002e-05 * fVec0[((IOTA - 22) & 127)]) + ((0.000702438 * fVec0[((IOTA - 20) & 127)]) + ((0.0174746 * fVec0[((IOTA - 18) & 127)]) + ((0.021190899999999999 * fVec0[((IOTA - 17) & 127)]) + ((0.0025345699999999999 * fVec0[((IOTA - 16) & 127)]) + ((0.0025992000000000003 * fVec0[((IOTA - 15) & 127)]) + ((0.0061892400000000004 * fVec0[((IOTA - 13) & 127)]) + ((2.4082099999999999e-06 * fVec1[((IOTA - 126) & 127)]) + ((8.464169999999999e-06 * fVec1[((IOTA - 125) & 127)]) + ((8.8836499999999992e-06 * fVec1[((IOTA - 124) & 127)]) + ((8.7967399999999994e-06 * fVec1[((IOTA - 123) & 127)]) + ((2.4375700000000001e-05 * fVec1[((IOTA - 122) & 127)]) + ((8.0066800000000004e-05 * fVec1[((IOTA - 121) & 127)]) + ((9.9426100000000014e-05 * fVec1[((IOTA - 120) & 127)]) + ((9.0816700000000014e-05 * fVec1[((IOTA - 119) & 127)]) + ((5.80835e-05 * fVec1[((IOTA - 118) & 127)]) + ((7.7452699999999998e-05 * fVec1[((IOTA - 117) & 127)]) + ((9.5024799999999997e-07 * fVec1[((IOTA - 116) & 127)]) + ((0.0020100199999999999 * fVec0[((IOTA - 10) & 127)]) + ((0.00148817 * fVec0[((IOTA - 8) & 127)]) + ((5.1149400000000002e-05 * fVec1[((IOTA - 98) & 127)]) + ((0.00032476299999999999 * fVec1[((IOTA - 97) & 127)]) + ((0.0012872900000000002 * fVec1[((IOTA - 94) & 127)]) + ((0.0022912900000000001 * fVec1[((IOTA - 93) & 127)]) + ((0.00119739 * fVec1[((IOTA - 92) & 127)]) + ((0.0019518999999999999 * fVec1[((IOTA - 90) & 127)]) + ((0.0043689900000000005 * fVec1[((IOTA - 89) & 127)]) + ((0.00375801 * fVec1[((IOTA - 88) & 127)]) + ((0.0016994499999999999 * fVec1[((IOTA - 87) & 127)]) + ((0.0032713800000000004 * fVec1[((IOTA - 86) & 127)]) + ((0.0036832600000000003 * fVec1[((IOTA - 85) & 127)]) + ((0.00089328000000000009 * fVec1[((IOTA - 84) & 127)]) + ((0.00072158200000000002 * fVec1[((IOTA - 83) & 127)]) + ((0.00038337700000000001 * fVec1[((IOTA - 80) & 127)]) + ((0.0016079900000000001 * fVec1[((IOTA - 79) & 127)]) + ((0.0020680200000000003 * fVec1[((IOTA - 78) & 127)]) + ((0.00028545500000000005 * fVec1[((IOTA - 77) & 127)]) + ((0.00025900400000000002 * fVec1[((IOTA - 75) & 127)]) + ((3.3718100000000005e-05 * fVec1[((IOTA - 63) & 127)]) + ((0.0016691100000000001 * fVec1[((IOTA - 62) & 127)]) + ((0.00089519800000000015 * fVec1[((IOTA - 60) & 127)]) + ((0.00079125400000000002 * fVec1[((IOTA - 59) & 127)]) + ((0.00099548200000000001 * fVec1[((IOTA - 58) & 127)]) + ((0.0024358800000000001 * fVec1[((IOTA - 54) & 127)]) + ((0.0056765999999999995 * fVec1[((IOTA - 53) & 127)]) + ((0.0027909200000000001 * fVec1[((IOTA - 52) & 127)]) + ((0.00077908600000000012 * fVec1[((IOTA - 51) & 127)]) + ((0.0016214599999999999 * fVec1[((IOTA - 50) & 127)]) + ((0.0042173100000000002 * fVec1[((IOTA - 48) & 127)]) + ((0.0091871399999999999 * fVec1[((IOTA - 47) & 127)]) + ((0.0013077200000000001 * fVec1[((IOTA - 46) & 127)]) + ((0.0021427500000000001 * fVec1[((IOTA - 45) & 127)]) + ((0.0022329500000000005 * fVec1[((IOTA - 44) & 127)]) + ((0.0028589500000000003 * fVec1[((IOTA - 42) & 127)]) + ((0.0070971000000000003 * fVec1[((IOTA - 41) & 127)]) + ((0.0030150300000000001 * fVec1[((IOTA - 39) & 127)]) + ((0.00053429399999999994 * fVec1[((IOTA - 36) & 127)]) + ((0.0164669 * fVec1[((IOTA - 35) & 127)]) + ((0.0037660800000000002 * fVec1[((IOTA - 33) & 127)]) + ((0.0086483100000000011 * fVec1[((IOTA - 32) & 127)]) + ((0.021576300000000003 * fVec1[((IOTA - 29) & 127)]) + ((0.021685099999999999 * fVec1[((IOTA - 28) & 127)]) + ((0.0057969700000000002 * fVec1[((IOTA - 26) & 127)]) + ((0.0057622799999999998 * fVec1[((IOTA - 24) & 127)]) + ((0.0197594 * fVec1[((IOTA - 21) & 127)]) + ((0.0121098 * fVec1[((IOTA - 20) & 127)]) + ((0.032535399999999999 * fVec1[((IOTA - 17) & 127)]) + ((0.00050339700000000005 * fVec1[((IOTA - 14) & 127)]) + ((0.00086802899999999998 * fVec1[((IOTA - 13) & 127)]) + ((0.0016583500000000001 * fVec1[((IOTA - 8) & 127)]) + ((0.00031507000000000003 * fVec1[((IOTA - 5) & 127)]) + ((0.00049461800000000005 * fVec1[((IOTA - 4) & 127)]) + ((0.00015840400000000001 * fVec1[((IOTA - 2) & 127)]) + ((2.8519800000000004e-05 * fVec1[((IOTA - 1) & 127)]) + ((4.4578800000000004e-06 * fTemp1) + ((1.1796500000000001e-05 * fVec2[((IOTA - 114) & 127)]) + ((0.00041981599999999999 * fVec2[((IOTA - 107) & 127)]) + ((5.3605900000000008e-05 * fVec2[((IOTA - 105) & 127)]) + ((0.00046969700000000004 * fVec2[((IOTA - 104) & 127)]) + ((0.00047704000000000008 * fVec2[((IOTA - 103) & 127)]) + ((0.00043236800000000009 * fVec2[((IOTA - 102) & 127)]) + ((0.00070973900000000003 * fVec2[((IOTA - 101) & 127)]) + ((0.000705385 * fVec2[((IOTA - 100) & 127)]) + ((0.00045614100000000008 * fVec2[((IOTA - 99) & 127)]) + ((0.00092227100000000001 * fVec2[((IOTA - 98) & 127)]) + ((0.00081300600000000002 * fVec2[((IOTA - 97) & 127)]) + ((0.000623519 * fVec2[((IOTA - 96) & 127)]) + ((0.0013659500000000001 * fVec2[((IOTA - 95) & 127)]) + ((0.00214314 * fVec2[((IOTA - 94) & 127)]) + ((0.0016777999999999999 * fVec2[((IOTA - 93) & 127)]) + ((0.00108099 * fVec2[((IOTA - 92) & 127)]) + ((6.7984800000000007e-05 * fVec2[((IOTA - 90) & 127)]) + ((0.000264467 * fVec2[((IOTA - 89) & 127)]) + ((0.00045975200000000007 * fVec2[((IOTA - 88) & 127)]) + ((0.0013345100000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.0013671599999999999 * fVec2[((IOTA - 86) & 127)]) + ((0.00088433700000000001 * fVec2[((IOTA - 85) & 127)]) + ((0.0010498400000000002 * fVec2[((IOTA - 84) & 127)]) + ((0.00300031 * fVec2[((IOTA - 83) & 127)]) + ((0.00033132700000000002 * fVec2[((IOTA - 82) & 127)]) + ((0.0053105900000000004 * fVec1[((IOTA - 40) & 127)]) + ((2.3648600000000003e-05 * fVec2[((IOTA - 80) & 127)]) + ((0.00058793100000000009 * fVec2[((IOTA - 79) & 127)]) + ((0.0027816299999999998 * fVec2[((IOTA - 78) & 127)]) + ((0.0017765299999999999 * fVec2[((IOTA - 77) & 127)]) + ((0.00046795000000000002 * fVec2[((IOTA - 73) & 127)]) + ((0.0016152100000000002 * fVec2[((IOTA - 72) & 127)]) + ((0.00010376700000000001 * fVec2[((IOTA - 71) & 127)]) + ((0.058508199999999996 * fVec2[((IOTA - 22) & 127)]) + ((0.050635700000000006 * fVec2[((IOTA - 21) & 127)]) + ((0.041341200000000002 * fVec2[((IOTA - 20) & 127)]) + ((0.0214629 * fVec2[((IOTA - 19) & 127)]) + ((0.029345699999999999 * fVec2[((IOTA - 18) & 127)]) + ((0.088954799999999987 * fVec2[((IOTA - 17) & 127)]) + ((0.063658400000000004 * fVec2[((IOTA - 16) & 127)]) + ((0.078143400000000002 * fVec2[((IOTA - 15) & 127)]) + ((0.060886200000000001 * fVec2[((IOTA - 14) & 127)]) + ((0.077131900000000003 * fVec2[((IOTA - 13) & 127)]) + ((0.090551499999999993 * fVec2[((IOTA - 12) & 127)]) + ((0.0054581200000000003 * fVec2[((IOTA - 11) & 127)]) + ((0.0018110400000000001 * fVec2[((IOTA - 9) & 127)]) + ((0.00194177 * fVec2[((IOTA - 7) & 127)]) + ((2.0625300000000001e-06 * fVec3[((IOTA - 126) & 127)]) + ((5.0813899999999995e-06 * fVec3[((IOTA - 125) & 127)]) + ((5.7126099999999992e-06 * fVec3[((IOTA - 124) & 127)]) + ((0.00114689 * fVec2[((IOTA - 5) & 127)]) + ((2.09787e-05 * fVec3[((IOTA - 123) & 127)]) + ((0.00058690300000000006 * fVec2[((IOTA - 4) & 127)]) + ((1.8717900000000003e-05 * fVec3[((IOTA - 122) & 127)]) + ((4.2541300000000006e-05 * fVec3[((IOTA - 121) & 127)]) + ((0.00010654600000000001 * fVec3[((IOTA - 120) & 127)]) + ((0.00016404399999999999 * fVec3[((IOTA - 119) & 127)]) + ((0.0012299100000000001 * fVec2[((IOTA - 3) & 127)]) + ((0.00016872499999999999 * fVec3[((IOTA - 118) & 127)]) + ((0.00025855300000000002 * fVec3[((IOTA - 117) & 127)]) + ((0.00034160000000000001 * fVec3[((IOTA - 116) & 127)]) + ((0.00045382400000000002 * fVec3[((IOTA - 115) & 127)]) + ((0.00054736599999999998 * fVec3[((IOTA - 114) & 127)]) + ((0.00053358400000000003 * fVec3[((IOTA - 113) & 127)]) + ((0.00015469 * fVec2[((IOTA - 1) & 127)]) + ((0.00050102000000000002 * fVec3[((IOTA - 112) & 127)]) + ((0.00067625599999999997 * fVec3[((IOTA - 111) & 127)]) + ((0.00098166300000000002 * fVec3[((IOTA - 110) & 127)]) + ((0.00083451500000000008 * fVec3[((IOTA - 109) & 127)]) + ((0.0009436510000000001 * fVec3[((IOTA - 108) & 127)]) + ((0.0012923000000000001 * fVec3[((IOTA - 107) & 127)]) + ((0.00136699 * fVec3[((IOTA - 106) & 127)]) + ((0.0014059200000000002 * fVec3[((IOTA - 105) & 127)]) + ((0.0012065399999999999 * fVec3[((IOTA - 104) & 127)]) + ((0.00185348 * fVec3[((IOTA - 103) & 127)]) + ((0.00154024 * fVec3[((IOTA - 102) & 127)]) + ((0.00087727600000000008 * fVec3[((IOTA - 101) & 127)]) + ((0.00050683400000000006 * fVec3[((IOTA - 100) & 127)]) + ((0.00061282500000000011 * fVec3[((IOTA - 99) & 127)]) + ((0.00058470199999999999 * fVec3[((IOTA - 98) & 127)]) + ((0.00054874000000000004 * fVec3[((IOTA - 96) & 127)]) + ((0.00272945 * fVec3[((IOTA - 95) & 127)]) + ((0.0021461499999999999 * fVec3[((IOTA - 94) & 127)]) + ((2.3955000000000004e-05 * fVec3[((IOTA - 93) & 127)]) + ((0.00041329900000000006 * fVec3[((IOTA - 90) & 127)]) + ((0.0037083100000000003 * fVec3[((IOTA - 87) & 127)]) + ((0.0051757600000000006 * fVec3[((IOTA - 86) & 127)]) + ((0.0016799500000000001 * fVec3[((IOTA - 85) & 127)]) + ((0.0015701700000000001 * fVec3[((IOTA - 83) & 127)]) + ((0.00056369199999999997 * fVec3[((IOTA - 82) & 127)]) + ((0.0024365300000000001 * fVec3[((IOTA - 80) & 127)]) + ((0.0041905200000000005 * fVec3[((IOTA - 79) & 127)]) + ((0.0024405 * fVec3[((IOTA - 78) & 127)]) + ((0.00082847699999999999 * fVec3[((IOTA - 77) & 127)]) + ((0.0041945800000000007 * fVec3[((IOTA - 76) & 127)]) + ((0.0063743100000000002 * fVec3[((IOTA - 75) & 127)]) + ((0.0029129100000000003 * fVec3[((IOTA - 74) & 127)]) + ((0.0030868900000000001 * fVec3[((IOTA - 73) & 127)]) + ((0.0052356299999999998 * fVec3[((IOTA - 72) & 127)]) + ((0.0032107500000000001 * fVec3[((IOTA - 71) & 127)]) + ((0.00185049 * fVec3[((IOTA - 70) & 127)]) + ((0.0014647 * fVec3[((IOTA - 69) & 127)]) + ((0.0022559300000000002 * fVec3[((IOTA - 68) & 127)]) + ((0.0034284599999999999 * fVec3[((IOTA - 67) & 127)]) + ((0.0023089200000000003 * fVec3[((IOTA - 66) & 127)]) + ((0.0027403499999999999 * fVec3[((IOTA - 65) & 127)]) + ((0.0042152999999999999 * fVec3[((IOTA - 64) & 127)]) + ((0.0062385100000000001 * fVec3[((IOTA - 63) & 127)]) + ((0.0068040700000000006 * fVec3[((IOTA - 62) & 127)]) + ((0.0035775299999999998 * fVec3[((IOTA - 61) & 127)]) + ((0.0042250600000000001 * fVec3[((IOTA - 60) & 127)]) + ((0.0031211899999999998 * fVec3[((IOTA - 59) & 127)]) + ((0.0036129299999999999 * fVec3[((IOTA - 58) & 127)]) + ((0.0050028199999999998 * fVec3[((IOTA - 57) & 127)]) + ((0.0012118500000000002 * fVec3[((IOTA - 56) & 127)]) + ((0.0012461600000000001 * fVec3[((IOTA - 55) & 127)]) + ((0.00305273 * fVec3[((IOTA - 54) & 127)]) + ((0.00325793 * fVec3[((IOTA - 53) & 127)]) + ((0.0028833999999999999 * fVec3[((IOTA - 52) & 127)]) + ((0.0036652500000000001 * fVec3[((IOTA - 51) & 127)]) + ((0.00086377000000000014 * fVec3[((IOTA - 50) & 127)]) + ((0.00175234 * fVec3[((IOTA - 49) & 127)]) + ((0.00306785 * fVec3[((IOTA - 48) & 127)]) + ((0.00250454 * fVec3[((IOTA - 46) & 127)]) + ((0.015005800000000001 * fVec3[((IOTA - 45) & 127)]) + ((0.0079248200000000008 * fVec3[((IOTA - 44) & 127)]) + ((0.0028857800000000001 * fVec3[((IOTA - 43) & 127)]) + ((0.0074329900000000004 * fVec3[((IOTA - 42) & 127)]) + ((0.0056945699999999995 * fVec3[((IOTA - 41) & 127)]) + ((0.0064973000000000001 * fVec3[((IOTA - 40) & 127)]) + ((0.011589100000000001 * fVec3[((IOTA - 39) & 127)]) + ((0.0069301900000000001 * fVec3[((IOTA - 38) & 127)]) + ((0.0079812000000000008 * fVec3[((IOTA - 37) & 127)]) + ((0.0141227 * fVec3[((IOTA - 36) & 127)]) + ((0.0044680700000000002 * fVec3[((IOTA - 35) & 127)]) + ((0.020023599999999999 * fVec3[((IOTA - 34) & 127)]) + ((0.023001999999999998 * fVec3[((IOTA - 33) & 127)]) + ((0.0057082499999999998 * fVec3[((IOTA - 32) & 127)]) + ((0.011366300000000001 * fVec3[((IOTA - 31) & 127)]) + ((0.0266261 * fVec3[((IOTA - 30) & 127)]) + ((0.0087064099999999995 * fVec3[((IOTA - 29) & 127)]) + ((0.030624600000000002 * fVec3[((IOTA - 27) & 127)]) + ((0.0528391 * fVec3[((IOTA - 26) & 127)]) + ((0.031746299999999998 * fVec3[((IOTA - 25) & 127)]) + ((((((((((((((((((((((((2.5118200000000003e-05 * fTemp3) + (0.00012370799999999999 * fVec3[((IOTA - 1) & 127)])) + (0.00096838400000000008 * fVec3[((IOTA - 3) & 127)])) + (0.00059949000000000005 * fVec3[((IOTA - 4) & 127)])) + (0.00076772799999999997 * fVec3[((IOTA - 5) & 127)])) + (0.00014117900000000001 * fVec3[((IOTA - 6) & 127)])) + (0.0018634200000000002 * fVec3[((IOTA - 7) & 127)])) + (0.00024957099999999997 * fVec3[((IOTA - 8) & 127)])) + (0.0011589199999999999 * fVec3[((IOTA - 9) & 127)])) + (0.00050879500000000004 * fVec3[((IOTA - 10) & 127)])) + (0.0036302599999999997 * fVec3[((IOTA - 11) & 127)])) + (0.056510400000000002 * fVec3[((IOTA - 12) & 127)])) + (0.049342300000000006 * fVec3[((IOTA - 13) & 127)])) + (0.0449074 * fVec3[((IOTA - 14) & 127)])) + (0.064749100000000004 * fVec3[((IOTA - 15) & 127)])) + (0.059606500000000007 * fVec3[((IOTA - 16) & 127)])) + (0.073495100000000008 * fVec3[((IOTA - 17) & 127)])) + (0.034514800000000005 * fVec3[((IOTA - 18) & 127)])) + (0.055772500000000003 * fVec3[((IOTA - 19) & 127)])) + (0.06596840000000001 * fVec3[((IOTA - 20) & 127)])) + (0.057809200000000005 * fVec3[((IOTA - 21) & 127)])) + (0.096895100000000012 * fVec3[((IOTA - 22) & 127)])) + (0.021260899999999999 * fVec3[((IOTA - 23) & 127)])) + (3.3955100000000003e-05 * fTemp2))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((6.9716599999999994e-06 * fVec0[((IOTA - 124) & 127)]) + ((9.8485200000000004e-06 * fVec0[((IOTA - 118) & 127)]) + ((0.00010357900000000001 * fVec0[((IOTA - 114) & 127)]) + ((0.00042897299999999997 * fVec0[((IOTA - 113) & 127)]) + ((0.00029024100000000006 * fVec0[((IOTA - 112) & 127)]) + ((9.8297200000000012e-05 * fVec0[((IOTA - 111) & 127)]) + ((0.00020804999999999999 * fVec0[((IOTA - 110) & 127)]) + ((0.00054109500000000001 * fVec0[((IOTA - 109) & 127)]) + ((0.00083962700000000002 * fVec0[((IOTA - 108) & 127)]) + ((0.00056389100000000007 * fVec0[((IOTA - 107) & 127)]) + ((0.00051816800000000006 * fVec0[((IOTA - 106) & 127)]) + ((0.00065456900000000003 * fVec0[((IOTA - 105) & 127)]) + ((0.00088825400000000011 * fVec0[((IOTA - 104) & 127)]) + ((0.000446193 * fVec0[((IOTA - 103) & 127)]) + ((0.00071199100000000003 * fVec0[((IOTA - 102) & 127)]) + ((0.0012468500000000001 * fVec0[((IOTA - 101) & 127)]) + ((0.0012435300000000001 * fVec0[((IOTA - 100) & 127)]) + ((0.0010388900000000002 * fVec0[((IOTA - 99) & 127)]) + ((0.00170268 * fVec0[((IOTA - 98) & 127)]) + ((0.00126004 * fVec0[((IOTA - 97) & 127)]) + ((0.0013548899999999999 * fVec0[((IOTA - 93) & 127)]) + ((0.0020163799999999999 * fVec0[((IOTA - 92) & 127)]) + ((0.0010302600000000001 * fVec0[((IOTA - 89) & 127)]) + ((0.00142103 * fVec0[((IOTA - 88) & 127)]) + ((0.0020040399999999999 * fVec0[((IOTA - 82) & 127)]) + ((0.0030592000000000002 * fVec0[((IOTA - 81) & 127)]) + ((0.00082976100000000015 * fVec0[((IOTA - 80) & 127)]) + ((0.00083032800000000008 * fVec0[((IOTA - 79) & 127)]) + ((0.00146794 * fVec0[((IOTA - 78) & 127)]) + ((0.0029912300000000001 * fVec0[((IOTA - 77) & 127)]) + ((0.0019008400000000002 * fVec0[((IOTA - 76) & 127)]) + ((0.00032308700000000001 * fVec0[((IOTA - 75) & 127)]) + ((0.00121188 * fVec0[((IOTA - 74) & 127)]) + ((0.0015286800000000001 * fVec0[((IOTA - 73) & 127)]) + ((0.0016313200000000001 * fVec0[((IOTA - 72) & 127)]) + ((0.0019843199999999999 * fVec0[((IOTA - 71) & 127)]) + ((0.0031219500000000001 * fVec0[((IOTA - 70) & 127)]) + ((0.0017147500000000001 * fVec0[((IOTA - 69) & 127)]) + ((4.5241600000000004e-05 * fVec0[((IOTA - 68) & 127)]) + ((0.00193403 * fVec0[((IOTA - 67) & 127)]) + ((0.00103439 * fVec0[((IOTA - 66) & 127)]) + ((0.00025587599999999999 * fVec0[((IOTA - 61) & 127)]) + ((0.0014905299999999999 * fVec0[((IOTA - 60) & 127)]) + ((0.000502175 * fVec0[((IOTA - 59) & 127)]) + ((0.00055048599999999999 * fVec0[((IOTA - 58) & 127)]) + ((0.00049892100000000004 * fVec0[((IOTA - 50) & 127)]) + ((0.0029968600000000001 * fVec0[((IOTA - 47) & 127)]) + ((0.0024887899999999998 * fVec0[((IOTA - 46) & 127)]) + ((0.0030320900000000003 * fVec0[((IOTA - 41) & 127)]) + ((0.0076587399999999998 * fVec0[((IOTA - 40) & 127)]) + ((0.010064699999999999 * fVec0[((IOTA - 35) & 127)]) + ((0.030136699999999999 * fVec0[((IOTA - 32) & 127)]) + ((0.017341200000000001 * fVec0[((IOTA - 31) & 127)]) + ((0.039170099999999999 * fVec0[((IOTA - 28) & 127)]) + ((0.00031563800000000003 * fVec0[((IOTA - 27) & 127)]) + ((0.00069887100000000011 * fVec0[((IOTA - 25) & 127)]) + ((0.025458500000000002 * fVec0[((IOTA - 24) & 127)]) + ((0.0011081700000000001 * fVec0[((IOTA - 7) & 127)]) + ((0.00036208399999999998 * fVec0[((IOTA - 5) & 127)]) + ((0.00017773600000000001 * fVec0[((IOTA - 3) & 127)]) + ((0.0120184 * fVec0[((IOTA - 21) & 127)]) + ((0.011691100000000001 * fVec0[((IOTA - 19) & 127)]) + ((0.0053095800000000004 * fVec0[((IOTA - 14) & 127)]) + ((0.0072171800000000001 * fVec0[((IOTA - 12) & 127)]) + ((0.0030320200000000003 * fVec0[((IOTA - 11) & 127)]) + ((6.574880000000001e-05 * fVec1[((IOTA - 115) & 127)]) + ((7.5893800000000015e-05 * fVec1[((IOTA - 114) & 127)]) + ((0.00131485 * fVec0[((IOTA - 9) & 127)]) + ((0.00055035400000000008 * fVec1[((IOTA - 113) & 127)]) + ((0.00054230400000000007 * fVec1[((IOTA - 112) & 127)]) + ((0.00038862600000000004 * fVec1[((IOTA - 111) & 127)]) + ((0.00038355300000000002 * fVec1[((IOTA - 110) & 127)]) + ((0.0010789999999999999 * fVec1[((IOTA - 109) & 127)]) + ((0.00127535 * fVec1[((IOTA - 108) & 127)]) + ((0.00026040700000000004 * fVec1[((IOTA - 107) & 127)]) + ((0.00064190699999999994 * fVec1[((IOTA - 106) & 127)]) + ((0.0012643700000000001 * fVec1[((IOTA - 105) & 127)]) + ((0.0014951399999999998 * fVec1[((IOTA - 104) & 127)]) + ((0.00096466700000000011 * fVec1[((IOTA - 103) & 127)]) + ((0.00062200899999999997 * fVec1[((IOTA - 102) & 127)]) + ((0.0013151 * fVec1[((IOTA - 101) & 127)]) + ((0.00155276 * fVec1[((IOTA - 100) & 127)]) + ((0.00147963 * fVec1[((IOTA - 99) & 127)]) + ((0.0012132899999999999 * fVec1[((IOTA - 96) & 127)]) + ((0.0010497099999999999 * fVec1[((IOTA - 95) & 127)]) + ((5.4447799999999994e-06 * fVec1[((IOTA - 91) & 127)]) + ((0.00060830200000000002 * fVec1[((IOTA - 82) & 127)]) + ((0.00073753600000000001 * fVec1[((IOTA - 81) & 127)]) + ((4.1098800000000007e-05 * fVec1[((IOTA - 76) & 127)]) + ((0.00031511100000000003 * fVec1[((IOTA - 74) & 127)]) + ((0.0011385200000000001 * fVec1[((IOTA - 73) & 127)]) + ((0.0023925600000000002 * fVec1[((IOTA - 72) & 127)]) + ((0.00191902 * fVec1[((IOTA - 71) & 127)]) + ((0.00073584900000000001 * fVec1[((IOTA - 70) & 127)]) + ((0.0033698500000000002 * fVec1[((IOTA - 69) & 127)]) + ((0.0046562499999999998 * fVec1[((IOTA - 68) & 127)]) + ((0.0026088700000000001 * fVec1[((IOTA - 67) & 127)]) + ((0.0015381499999999998 * fVec1[((IOTA - 66) & 127)]) + ((0.00177024 * fVec1[((IOTA - 65) & 127)]) + ((0.0027169400000000002 * fVec1[((IOTA - 64) & 127)]) + ((0.0011334100000000001 * fVec1[((IOTA - 61) & 127)]) + ((0.0012374899999999999 * fVec1[((IOTA - 57) & 127)]) + ((0.00350462 * fVec1[((IOTA - 56) & 127)]) + ((0.00029472900000000003 * fVec1[((IOTA - 55) & 127)]) + ((0.00161133 * fVec1[((IOTA - 49) & 127)]) + ((0.0043256300000000004 * fVec1[((IOTA - 43) & 127)]) + ((0.0039263700000000002 * fVec1[((IOTA - 38) & 127)]) + ((0.0193136 * fVec1[((IOTA - 37) & 127)]) + ((0.0137585 * fVec1[((IOTA - 34) & 127)]) + ((0.016165499999999999 * fVec1[((IOTA - 31) & 127)]) + ((0.0200181 * fVec1[((IOTA - 30) & 127)]) + ((0.00436148 * fVec1[((IOTA - 27) & 127)]) + ((0.0115485 * fVec1[((IOTA - 25) & 127)]) + ((0.0032127699999999998 * fVec1[((IOTA - 23) & 127)]) + ((0.0057804000000000006 * fVec1[((IOTA - 22) & 127)]) + ((0.037111700000000004 * fVec1[((IOTA - 19) & 127)]) + ((0.014907300000000002 * fVec1[((IOTA - 18) & 127)]) + ((0.0092683000000000001 * fVec1[((IOTA - 16) & 127)]) + ((0.0158698 * fVec1[((IOTA - 15) & 127)]) + ((0.00489909 * fVec1[((IOTA - 12) & 127)]) + ((0.00036272099999999999 * fVec1[((IOTA - 11) & 127)]) + ((0.00043871700000000003 * fVec1[((IOTA - 10) & 127)]) + ((0.00018132700000000001 * fVec1[((IOTA - 9) & 127)]) + ((0.00097058900000000011 * fVec1[((IOTA - 7) & 127)]) + ((0.00016036100000000001 * fVec1[((IOTA - 6) & 127)]) + (((1.8656099999999998e-06 * fVec2[((IOTA - 126) & 127)]) + ((2.5639300000000001e-06 * fVec2[((IOTA - 125) & 127)]) + ((8.3185099999999991e-06 * fVec2[((IOTA - 124) & 127)]) + ((3.8801999999999999e-05 * fVec2[((IOTA - 123) & 127)]) + ((6.5230500000000005e-05 * fVec2[((IOTA - 122) & 127)]) + ((4.81323e-05 * fVec2[((IOTA - 121) & 127)]) + ((3.1175000000000006e-05 * fVec2[((IOTA - 120) & 127)]) + ((1.1129000000000001e-05 * fVec2[((IOTA - 119) & 127)]) + ((0.00016385400000000001 * fVec2[((IOTA - 118) & 127)]) + ((0.000137362 * fVec2[((IOTA - 117) & 127)]) + ((9.139900000000001e-05 * fVec2[((IOTA - 116) & 127)]) + ((0.00012562199999999998 * fVec2[((IOTA - 115) & 127)]) + ((0.00025063300000000005 * fVec2[((IOTA - 113) & 127)]) + ((0.000272806 * fVec2[((IOTA - 112) & 127)]) + ((0.000314307 * fVec2[((IOTA - 111) & 127)]) + ((0.00026935700000000002 * fVec2[((IOTA - 110) & 127)]) + ((0.00027303400000000002 * fVec2[((IOTA - 109) & 127)]) + ((8.74662e-06 * fVec2[((IOTA - 108) & 127)]) + ((0.00035653000000000003 * fVec2[((IOTA - 106) & 127)]) + ((0.000138672 * fVec2[((IOTA - 91) & 127)]) + ((0.0011749499999999999 * fVec2[((IOTA - 81) & 127)]) + ((0.00092974400000000003 * fVec2[((IOTA - 76) & 127)]) + ((0.00189912 * fVec2[((IOTA - 75) & 127)]) + ((0.0018498099999999999 * fVec2[((IOTA - 74) & 127)]) + ((0.00102903 * fVec2[((IOTA - 70) & 127)]) + ((0.0023879000000000001 * fVec2[((IOTA - 69) & 127)]) + ((0.00157916 * fVec2[((IOTA - 67) & 127)]) + ((0.0021747000000000003 * fVec2[((IOTA - 66) & 127)]) + ((0.0024374800000000001 * fVec2[((IOTA - 65) & 127)]) + ((0.0017056100000000002 * fVec2[((IOTA - 64) & 127)]) + ((0.00246014 * fVec2[((IOTA - 63) & 127)]) + ((0.0044470300000000003 * fVec2[((IOTA - 62) & 127)]) + ((0.0030104600000000004 * fVec2[((IOTA - 68) & 127)]) + ((0.0047484400000000005 * fVec2[((IOTA - 61) & 127)]) + ((0.0027951100000000004 * fVec2[((IOTA - 60) & 127)]) + ((0.0047547600000000002 * fVec2[((IOTA - 59) & 127)]) + ((0.0037710400000000002 * fVec2[((IOTA - 58) & 127)]) + ((0.0045419900000000001 * fVec2[((IOTA - 57) & 127)]) + ((0.010441600000000001 * fVec2[((IOTA - 56) & 127)]) + ((0.0100582 * fVec2[((IOTA - 55) & 127)]) + ((0.0076609499999999997 * fVec2[((IOTA - 54) & 127)]) + ((0.0068764300000000002 * fVec2[((IOTA - 53) & 127)]) + ((0.0095819500000000005 * fVec2[((IOTA - 52) & 127)]) + ((0.015913200000000002 * fVec2[((IOTA - 51) & 127)]) + ((0.015119400000000002 * fVec2[((IOTA - 50) & 127)]) + ((0.0128559 * fVec2[((IOTA - 49) & 127)]) + ((0.016606200000000002 * fVec2[((IOTA - 48) & 127)]) + ((0.016194200000000002 * fVec2[((IOTA - 47) & 127)]) + ((0.0116756 * fVec2[((IOTA - 46) & 127)]) + ((0.008875280000000001 * fVec2[((IOTA - 45) & 127)]) + ((0.016079200000000002 * fVec2[((IOTA - 44) & 127)]) + ((0.0188738 * fVec2[((IOTA - 43) & 127)]) + ((0.022184499999999999 * fVec2[((IOTA - 42) & 127)]) + ((0.020373700000000002 * fVec2[((IOTA - 41) & 127)]) + ((0.0086227300000000003 * fVec2[((IOTA - 40) & 127)]) + ((0.015368999999999999 * fVec2[((IOTA - 39) & 127)]) + ((0.025263300000000002 * fVec2[((IOTA - 38) & 127)]) + ((0.026966700000000003 * fVec2[((IOTA - 37) & 127)]) + ((0.023967600000000002 * fVec2[((IOTA - 36) & 127)]) + ((0.0180915 * fVec2[((IOTA - 35) & 127)]) + ((0.026436999999999999 * fVec2[((IOTA - 34) & 127)]) + ((0.035762599999999999 * fVec2[((IOTA - 33) & 127)]) + ((0.019380700000000001 * fVec2[((IOTA - 32) & 127)]) + ((0.0052166499999999998 * fVec2[((IOTA - 31) & 127)]) + ((0.012525700000000001 * fVec2[((IOTA - 30) & 127)]) + ((0.039007399999999998 * fVec2[((IOTA - 29) & 127)]) + ((0.039406500000000004 * fVec2[((IOTA - 28) & 127)]) + ((0.0160175 * fVec2[((IOTA - 27) & 127)]) + ((0.0095142000000000004 * fVec2[((IOTA - 26) & 127)]) + ((0.00060328500000000006 * fVec2[((IOTA - 25) & 127)]) + ((0.042794800000000008 * fVec2[((IOTA - 24) & 127)]) + ((0.034687500000000003 * fVec2[((IOTA - 23) & 127)]) + ((0.0011779100000000001 * fVec2[((IOTA - 10) & 127)]) + ((0.000167329 * fVec2[((IOTA - 8) & 127)]) + ((0.00041459900000000003 * fVec2[((IOTA - 6) & 127)]) + ((((((((((((0.00017378000000000001 * fVec3[((IOTA - 2) & 127)]) + (0.015415000000000002 * fVec3[((IOTA - 24) & 127)])) + (0.0114164 * fVec3[((IOTA - 28) & 127)])) + (0.0029673899999999999 * fVec3[((IOTA - 47) & 127)])) + (0.0010694400000000001 * fVec3[((IOTA - 81) & 127)])) + (0.000311911 * fVec3[((IOTA - 84) & 127)])) + (0.00141242 * fVec3[((IOTA - 88) & 127)])) + (0.00134669 * fVec3[((IOTA - 89) & 127)])) + (0.0014838199999999998 * fVec3[((IOTA - 91) & 127)])) + (0.0024969700000000003 * fVec3[((IOTA - 92) & 127)])) + (0.00054486499999999995 * fVec3[((IOTA - 97) & 127)])) + (0.00031506200000000001 * fVec2[((IOTA - 2) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00019245000000000002 * fVec1[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fHbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fRec1[0] * (((1.4188099999999999e-06 * fVec0[((IOTA - 126) & 127)]) + ((3.3187600000000001e-06 * fVec0[((IOTA - 125) & 127)]) + ((5.1482899999999996e-06 * fVec0[((IOTA - 124) & 127)]) + ((8.7600299999999995e-06 * fVec0[((IOTA - 123) & 127)]) + ((5.5660599999999997e-06 * fVec0[((IOTA - 122) & 127)]) + ((5.530960000000001e-05 * fVec0[((IOTA - 121) & 127)]) + ((0.00011918500000000002 * fVec0[((IOTA - 120) & 127)]) + ((9.8678100000000013e-05 * fVec0[((IOTA - 119) & 127)]) + ((4.2207000000000004e-05 * fVec0[((IOTA - 118) & 127)]) + ((3.2490500000000003e-05 * fVec0[((IOTA - 117) & 127)]) + ((0.00011697900000000002 * fVec0[((IOTA - 116) & 127)]) + ((5.6691300000000004e-05 * fVec0[((IOTA - 112) & 127)]) + ((0.000115798 * fVec0[((IOTA - 111) & 127)]) + ((0.0037339199999999999 * fVec0[((IOTA - 96) & 127)]) + ((0.0027517499999999999 * fVec0[((IOTA - 95) & 127)]) + ((0.00065997500000000004 * fVec0[((IOTA - 92) & 127)]) + ((0.0016790700000000002 * fVec0[((IOTA - 91) & 127)]) + ((0.0019817300000000001 * fVec0[((IOTA - 88) & 127)]) + ((0.0040626200000000003 * fVec0[((IOTA - 87) & 127)]) + ((0.0023261500000000004 * fVec0[((IOTA - 86) & 127)]) + ((0.0015044699999999999 * fVec0[((IOTA - 85) & 127)]) + ((0.0010922900000000001 * fVec0[((IOTA - 84) & 127)]) + ((0.0012104800000000001 * fVec0[((IOTA - 64) & 127)]) + ((0.0039074399999999999 * fVec0[((IOTA - 63) & 127)]) + ((0.00070128400000000004 * fVec0[((IOTA - 59) & 127)]) + ((0.00040873600000000004 * fVec0[((IOTA - 58) & 127)]) + ((0.0011136799999999999 * fVec0[((IOTA - 57) & 127)]) + ((0.0035448200000000002 * fVec0[((IOTA - 56) & 127)]) + ((0.0022150400000000002 * fVec0[((IOTA - 55) & 127)]) + ((3.8517100000000004e-05 * fVec0[((IOTA - 54) & 127)]) + ((0.0011952499999999999 * fVec0[((IOTA - 53) & 127)]) + ((0.00017855099999999999 * fVec0[((IOTA - 52) & 127)]) + ((0.0020778099999999998 * fVec0[((IOTA - 51) & 127)]) + ((0.0048699899999999994 * fVec0[((IOTA - 50) & 127)]) + ((0.0020168600000000001 * fVec0[((IOTA - 49) & 127)]) + ((0.0011997199999999998 * fVec0[((IOTA - 47) & 127)]) + ((0.0061526599999999999 * fVec0[((IOTA - 46) & 127)]) + ((0.0028706900000000004 * fVec0[((IOTA - 44) & 127)]) + ((0.011077500000000001 * fVec0[((IOTA - 43) & 127)]) + ((0.0022290399999999998 * fVec0[((IOTA - 42) & 127)]) + ((0.0084232300000000003 * fVec0[((IOTA - 39) & 127)]) + ((0.00127378 * fVec0[((IOTA - 38) & 127)]) + ((0.0125606 * fVec0[((IOTA - 34) & 127)]) + ((0.011542200000000001 * fVec0[((IOTA - 31) & 127)]) + ((0.024367400000000001 * fVec0[((IOTA - 30) & 127)]) + ((0.0537481 * fVec0[((IOTA - 26) & 127)]) + ((0.013059400000000001 * fVec0[((IOTA - 23) & 127)]) + ((0.021176 * fVec0[((IOTA - 22) & 127)]) + ((0.0292041 * fVec0[((IOTA - 18) & 127)]) + ((0.015611 * fVec0[((IOTA - 17) & 127)]) + ((0.0131959 * fVec0[((IOTA - 15) & 127)]) + ((0.0033820999999999999 * fVec0[((IOTA - 13) & 127)]) + ((0.00065433400000000001 * fVec0[((IOTA - 10) & 127)]) + ((0.00012754700000000002 * fVec0[((IOTA - 9) & 127)]) + ((0.00028600400000000002 * fVec0[((IOTA - 8) & 127)]) + ((0.00056964699999999995 * fVec0[((IOTA - 6) & 127)]) + ((0.00055874899999999999 * fVec0[((IOTA - 4) & 127)]) + ((0.000107706 * fVec0[((IOTA - 2) & 127)]) + ((2.3258800000000005e-05 * fVec0[((IOTA - 1) & 127)]) + ((1.5002200000000002e-05 * fTemp0) + ((1.8648999999999999e-06 * fVec1[((IOTA - 126) & 127)]) + ((1.0045e-05 * fVec1[((IOTA - 125) & 127)]) + ((1.8977800000000003e-05 * fVec1[((IOTA - 124) & 127)]) + ((1.9873400000000002e-05 * fVec1[((IOTA - 123) & 127)]) + ((3.4954000000000004e-05 * fVec1[((IOTA - 122) & 127)]) + ((9.3229500000000019e-05 * fVec1[((IOTA - 121) & 127)]) + ((0.00012240800000000001 * fVec1[((IOTA - 120) & 127)]) + ((9.5701199999999998e-05 * fVec1[((IOTA - 119) & 127)]) + ((5.5900900000000005e-05 * fVec1[((IOTA - 115) & 127)]) + ((1.9102600000000002e-05 * fVec1[((IOTA - 114) & 127)]) + (((0.000876507 * fVec1[((IOTA - 91) & 127)]) + ((0.0020406000000000001 * fVec1[((IOTA - 90) & 127)]) + ((0.0013280499999999999 * fVec1[((IOTA - 89) & 127)]) + ((0.0017303100000000001 * fVec1[((IOTA - 88) & 127)]) + ((0.0029776099999999999 * fVec1[((IOTA - 87) & 127)]) + ((0.0025195700000000001 * fVec1[((IOTA - 86) & 127)]) + ((0.0011889400000000001 * fVec1[((IOTA - 83) & 127)]) + ((0.000386788 * fVec1[((IOTA - 81) & 127)]) + ((0.00090610300000000012 * fVec1[((IOTA - 80) & 127)]) + ((0.0014508500000000001 * fVec1[((IOTA - 79) & 127)]) + ((0.00082739399999999996 * fVec1[((IOTA - 78) & 127)]) + ((0.00013990400000000002 * fVec1[((IOTA - 76) & 127)]) + ((0.00174807 * fVec1[((IOTA - 75) & 127)]) + ((0.00102092 * fVec1[((IOTA - 74) & 127)]) + ((0.00235812 * fVec1[((IOTA - 63) & 127)]) + ((0.0021519 * fVec1[((IOTA - 62) & 127)]) + ((7.6654099999999985e-06 * fVec1[((IOTA - 61) & 127)]) + ((0.0022741699999999998 * fVec1[((IOTA - 55) & 127)]) + ((0.0042530099999999998 * fVec1[((IOTA - 54) & 127)]) + ((0.0032282000000000001 * fVec1[((IOTA - 53) & 127)]) + ((0.0041592900000000004 * fVec1[((IOTA - 50) & 127)]) + ((0.0075640600000000001 * fVec1[((IOTA - 49) & 127)]) + ((0.0079603199999999999 * fVec1[((IOTA - 48) & 127)]) + ((0.0030812000000000001 * fVec1[((IOTA - 47) & 127)]) + ((0.00018497500000000001 * fVec1[((IOTA - 46) & 127)]) + ((0.00033097600000000002 * fVec1[((IOTA - 43) & 127)]) + ((0.0066906600000000002 * fVec1[((IOTA - 42) & 127)]) + ((0.0081795500000000007 * fVec1[((IOTA - 41) & 127)]) + ((0.00108066 * fVec1[((IOTA - 40) & 127)]) + ((0.0088403900000000001 * fVec1[((IOTA - 36) & 127)]) + ((0.0054466000000000002 * fVec1[((IOTA - 35) & 127)]) + ((0.033863999999999998 * fVec1[((IOTA - 29) & 127)]) + ((0.0092350000000000002 * fVec1[((IOTA - 28) & 127)]) + ((0.00053732699999999999 * fVec1[((IOTA - 26) & 127)]) + ((0.0043864799999999999 * fVec1[((IOTA - 24) & 127)]) + ((0.0027836500000000004 * fVec1[((IOTA - 23) & 127)]) + ((0.0092729000000000006 * fVec1[((IOTA - 22) & 127)]) + ((0.022299000000000003 * fVec1[((IOTA - 21) & 127)]) + ((0.0012059800000000002 * fVec1[((IOTA - 20) & 127)]) + ((0.025815500000000002 * fVec1[((IOTA - 17) & 127)]) + ((7.0800700000000008e-05 * fVec1[((IOTA - 9) & 127)]) + ((0.00076956600000000007 * fVec1[((IOTA - 8) & 127)]) + ((0.000231146 * fVec1[((IOTA - 5) & 127)]) + ((0.00014766099999999999 * fVec1[((IOTA - 4) & 127)]) + ((1.4833700000000001e-06 * fVec2[((IOTA - 126) & 127)]) + ((3.6973199999999999e-06 * fVec2[((IOTA - 125) & 127)]) + ((8.5058500000000009e-06 * fVec2[((IOTA - 124) & 127)]) + ((4.1470500000000002e-05 * fVec2[((IOTA - 123) & 127)]) + ((7.1901800000000003e-05 * fVec2[((IOTA - 122) & 127)]) + ((3.71676e-05 * fVec2[((IOTA - 121) & 127)]) + ((3.3982700000000002e-05 * fVec2[((IOTA - 119) & 127)]) + ((0.00016550199999999999 * fVec2[((IOTA - 118) & 127)]) + ((0.00015893600000000001 * fVec2[((IOTA - 117) & 127)]) + ((0.00011888700000000002 * fVec2[((IOTA - 116) & 127)]) + ((2.6751600000000003e-05 * fVec2[((IOTA - 115) & 127)]) + ((1.5261800000000004e-05 * fVec2[((IOTA - 114) & 127)]) + ((0.00030627700000000004 * fVec2[((IOTA - 113) & 127)]) + ((0.00036830800000000003 * fVec2[((IOTA - 112) & 127)]) + ((0.000251322 * fVec2[((IOTA - 111) & 127)]) + ((0.00022708 * fVec2[((IOTA - 110) & 127)]) + ((0.000239084 * fVec2[((IOTA - 109) & 127)]) + ((9.1238799999999995e-06 * fVec2[((IOTA - 108) & 127)]) + ((0.00015429699999999999 * fVec2[((IOTA - 90) & 127)]) + ((0.00021972700000000002 * fVec2[((IOTA - 89) & 127)]) + ((0.0011643300000000001 * fVec2[((IOTA - 82) & 127)]) + (((0.00065994200000000006 * fVec2[((IOTA - 77) & 127)]) + ((0.0017905 * fVec2[((IOTA - 76) & 127)]) + ((0.00015571700000000001 * fVec2[((IOTA - 71) & 127)]) + ((0.0044549899999999998 * fVec2[((IOTA - 70) & 127)]) + ((0.0039002500000000005 * fVec2[((IOTA - 69) & 127)]) + ((0.00054205300000000002 * fVec2[((IOTA - 68) & 127)]) + ((0.00164631 * fVec2[((IOTA - 67) & 127)]) + ((0.00128867 * fVec2[((IOTA - 66) & 127)]) + ((0.000377902 * fVec2[((IOTA - 65) & 127)]) + ((0.00227327 * fVec2[((IOTA - 64) & 127)]) + ((0.0030369999999999998 * fVec2[((IOTA - 63) & 127)]) + ((0.0023284899999999999 * fVec2[((IOTA - 62) & 127)]) + ((0.0020450900000000003 * fVec2[((IOTA - 61) & 127)]) + ((0.0038926099999999999 * fVec2[((IOTA - 60) & 127)]) + ((0.0051357799999999995 * fVec2[((IOTA - 59) & 127)]) + ((0.0057548899999999995 * fVec2[((IOTA - 58) & 127)]) + ((0.0110121 * fVec2[((IOTA - 57) & 127)]) + ((0.010980500000000001 * fVec2[((IOTA - 56) & 127)]) + ((0.0074067100000000004 * fVec2[((IOTA - 55) & 127)]) + ((0.0058000299999999994 * fVec2[((IOTA - 54) & 127)]) + ((0.0046881500000000003 * fVec2[((IOTA - 53) & 127)]) + ((0.0079024400000000002 * fVec2[((IOTA - 52) & 127)]) + ((0.0143637 * fVec2[((IOTA - 51) & 127)]) + ((0.018899099999999999 * fVec2[((IOTA - 50) & 127)]) + ((0.016699200000000001 * fVec2[((IOTA - 49) & 127)]) + ((0.0121522 * fVec2[((IOTA - 48) & 127)]) + ((0.011685700000000002 * fVec2[((IOTA - 47) & 127)]) + ((0.0122635 * fVec2[((IOTA - 46) & 127)]) + ((0.017027300000000002 * fVec2[((IOTA - 45) & 127)]) + ((0.019806900000000002 * fVec2[((IOTA - 44) & 127)]) + ((0.017303499999999999 * fVec2[((IOTA - 43) & 127)]) + ((0.017569399999999999 * fVec2[((IOTA - 42) & 127)]) + ((0.016072400000000001 * fVec2[((IOTA - 41) & 127)]) + ((0.0227996 * fVec2[((IOTA - 40) & 127)]) + ((0.016965000000000001 * fVec2[((IOTA - 39) & 127)]) + ((0.017693 * fVec2[((IOTA - 38) & 127)]) + ((0.033336499999999998 * fVec2[((IOTA - 37) & 127)]) + ((0.029073099999999998 * fVec2[((IOTA - 36) & 127)]) + ((0.018621700000000001 * fVec2[((IOTA - 35) & 127)]) + ((0.023295900000000001 * fVec2[((IOTA - 34) & 127)]) + ((0.030269900000000002 * fVec2[((IOTA - 33) & 127)]) + ((0.023498000000000002 * fVec2[((IOTA - 32) & 127)]) + ((0.012867100000000001 * fVec2[((IOTA - 31) & 127)]) + ((0.024658199999999998 * fVec2[((IOTA - 30) & 127)]) + ((0.033071500000000004 * fVec2[((IOTA - 29) & 127)]) + ((0.023601800000000003 * fVec2[((IOTA - 28) & 127)]) + ((0.025422899999999998 * fVec2[((IOTA - 27) & 127)]) + ((0.014210199999999999 * fVec2[((IOTA - 26) & 127)]) + ((0.010567 * fVec2[((IOTA - 25) & 127)]) + ((0.056895100000000004 * fVec2[((IOTA - 24) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((0.00105561 * fVec3[((IOTA - 7) & 127)]) + ((((((1.96889e-05 * fTemp3) + (0.00012713900000000002 * fVec3[((IOTA - 1) & 127)])) + (0.00072445800000000009 * fVec3[((IOTA - 3) & 127)])) + (0.00084005400000000002 * fVec3[((IOTA - 4) & 127)])) + (0.00078251799999999995 * fVec3[((IOTA - 5) & 127)])) + (0.00064681700000000005 * fVec3[((IOTA - 6) & 127)]))) + (0.00107368 * fVec3[((IOTA - 8) & 127)])) + (0.00055752700000000004 * fVec3[((IOTA - 9) & 127)])) + (0.0020685400000000002 * fVec3[((IOTA - 10) & 127)])) + (0.0007391530000000001 * fVec3[((IOTA - 11) & 127)])) + (0.048941400000000003 * fVec3[((IOTA - 12) & 127)])) + (0.053001199999999998 * fVec3[((IOTA - 13) & 127)])) + (0.046698700000000003 * fVec3[((IOTA - 14) & 127)])) + (0.062211200000000001 * fVec3[((IOTA - 15) & 127)])) + (0.043948600000000004 * fVec3[((IOTA - 16) & 127)])) + (0.081345899999999999 * fVec3[((IOTA - 17) & 127)])) + (0.047424299999999996 * fVec3[((IOTA - 18) & 127)])) + (0.041405900000000002 * fVec3[((IOTA - 19) & 127)])) + (0.069732299999999997 * fVec3[((IOTA - 20) & 127)])) + (0.050380599999999998 * fVec3[((IOTA - 21) & 127)])) + (0.111697 * fVec3[((IOTA - 22) & 127)])) + (0.054464300000000007 * fVec3[((IOTA - 23) & 127)])) + (0.036801199999999999 * fVec3[((IOTA - 25) & 127)])) + (0.042423700000000002 * fVec3[((IOTA - 26) & 127)])) + (0.0075229400000000005 * fVec3[((IOTA - 27) & 127)])) + (0.0123141 * fVec3[((IOTA - 28) & 127)])) + (0.0216826 * fVec3[((IOTA - 29) & 127)])) + (0.017730600000000003 * fVec3[((IOTA - 30) & 127)])) + (0.0080194200000000011 * fVec3[((IOTA - 31) & 127)])) + (0.021074000000000002 * fVec3[((IOTA - 33) & 127)])) + (0.0272114 * fVec3[((IOTA - 34) & 127)])) + (0.0056564199999999997 * fVec3[((IOTA - 35) & 127)])) + (0.010539099999999999 * fVec3[((IOTA - 36) & 127)])) + (0.0081598500000000015 * fVec3[((IOTA - 37) & 127)])) + (0.0060665699999999994 * fVec3[((IOTA - 38) & 127)])) + (0.0072938400000000002 * fVec3[((IOTA - 39) & 127)])) + (0.0014525200000000001 * fVec3[((IOTA - 40) & 127)])) + (0.0049862900000000009 * fVec3[((IOTA - 41) & 127)])) + (0.014038399999999999 * fVec3[((IOTA - 42) & 127)])) + (0.0105579 * fVec3[((IOTA - 43) & 127)])) + (0.00431154 * fVec3[((IOTA - 45) & 127)])) + (0.0084629900000000001 * fVec3[((IOTA - 46) & 127)])) + (0.0007157 * fVec3[((IOTA - 47) & 127)])) + (0.00067166600000000002 * fVec3[((IOTA - 48) & 127)])) + (0.0046483699999999998 * fVec3[((IOTA - 49) & 127)])) + (0.0014356600000000001 * fVec3[((IOTA - 50) & 127)])) + (0.00020930100000000001 * fVec3[((IOTA - 51) & 127)])) + (0.00139635 * fVec3[((IOTA - 52) & 127)])) + (0.0029229899999999999 * fVec3[((IOTA - 53) & 127)])) + (0.0042595000000000003 * fVec3[((IOTA - 54) & 127)])) + (0.0039973999999999999 * fVec3[((IOTA - 55) & 127)])) + (4.49754e-06 * fVec3[((IOTA - 56) & 127)])) + (0.00278079 * fVec3[((IOTA - 58) & 127)])) + (0.0038020800000000002 * fVec3[((IOTA - 59) & 127)])) + (0.0026122100000000002 * fVec3[((IOTA - 60) & 127)])) + (0.00338193 * fVec3[((IOTA - 61) & 127)])) + (0.0064815100000000002 * fVec3[((IOTA - 62) & 127)])) + (0.0067297599999999996 * fVec3[((IOTA - 63) & 127)])) + (0.0038801100000000004 * fVec3[((IOTA - 64) & 127)])) + (0.0029381799999999999 * fVec3[((IOTA - 65) & 127)])) + (0.0016933400000000002 * fVec3[((IOTA - 66) & 127)])) + (0.0028127900000000003 * fVec3[((IOTA - 67) & 127)])) + (0.0033726400000000001 * fVec3[((IOTA - 68) & 127)])) + (0.00072404000000000001 * fVec3[((IOTA - 70) & 127)])) + (0.0019828699999999999 * fVec3[((IOTA - 71) & 127)])) + (0.0039087499999999999 * fVec3[((IOTA - 72) & 127)])) + (0.0053022700000000004 * fVec3[((IOTA - 73) & 127)])) + (0.0036032700000000004 * fVec3[((IOTA - 74) & 127)])) + (0.0053821700000000004 * fVec3[((IOTA - 75) & 127)])) + (0.0046326400000000004 * fVec3[((IOTA - 76) & 127)])) + (0.0020199900000000002 * fVec3[((IOTA - 77) & 127)])) + (0.0020409600000000001 * fVec3[((IOTA - 78) & 127)])) + (0.00144247 * fVec3[((IOTA - 79) & 127)])) + (0.0026692399999999998 * fVec3[((IOTA - 80) & 127)])) + (0.0015368900000000002 * fVec3[((IOTA - 81) & 127)])) + (2.5156400000000002e-05 * fVec3[((IOTA - 83) & 127)])) + (0.0010550900000000001 * fVec3[((IOTA - 84) & 127)])) + (0.0017505699999999999 * fVec3[((IOTA - 85) & 127)])) + (0.0026745600000000003 * fVec3[((IOTA - 86) & 127)])) + (0.00365475 * fVec3[((IOTA - 87) & 127)])) + (0.00193882 * fVec3[((IOTA - 88) & 127)])) + (0.0033512100000000003 * fVec3[((IOTA - 95) & 127)])) + (0.0025739000000000001 * fVec3[((IOTA - 96) & 127)])) + (0.00059498000000000005 * fVec3[((IOTA - 99) & 127)])) + (0.00094503799999999993 * fVec3[((IOTA - 100) & 127)])) + (0.0013272 * fVec3[((IOTA - 101) & 127)])) + (0.00147426 * fVec3[((IOTA - 102) & 127)])) + (0.0018419899999999999 * fVec3[((IOTA - 103) & 127)])) + (0.0012236 * fVec3[((IOTA - 104) & 127)])) + (0.00100501 * fVec3[((IOTA - 105) & 127)])) + (0.0016259900000000001 * fVec3[((IOTA - 106) & 127)])) + (0.0013097499999999999 * fVec3[((IOTA - 107) & 127)])) + (0.00095978899999999995 * fVec3[((IOTA - 108) & 127)])) + (0.000779071 * fVec3[((IOTA - 109) & 127)])) + (0.00070924500000000006 * fVec3[((IOTA - 110) & 127)])) + (0.0010336799999999999 * fVec3[((IOTA - 111) & 127)])) + (0.00050421999999999999 * fVec3[((IOTA - 112) & 127)])) + (0.00042659700000000002 * fVec3[((IOTA - 113) & 127)])) + (0.00050803600000000001 * fVec3[((IOTA - 114) & 127)])) + (0.00050261399999999997 * fVec3[((IOTA - 115) & 127)])) + (0.00038352400000000005 * fVec3[((IOTA - 116) & 127)])) + (0.00016114100000000001 * fVec3[((IOTA - 117) & 127)])) + (0.00020216400000000001 * fVec3[((IOTA - 118) & 127)])) + (0.000195057 * fVec3[((IOTA - 119) & 127)])) + (0.000117308 * fVec3[((IOTA - 120) & 127)])) + (5.5996800000000006e-05 * fVec3[((IOTA - 121) & 127)])) + (7.3980599999999995e-07 * fVec3[((IOTA - 123) & 127)])) + (1.69708e-05 * fVec3[((IOTA - 124) & 127)])) + (7.1374800000000001e-06 * fVec3[((IOTA - 125) & 127)])) + (1.74779e-06 * fVec3[((IOTA - 126) & 127)])) + (0.00027516900000000002 * fVec2[((IOTA - 2) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0040393699999999996 * fVec1[((IOTA - 33) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00102589 * fVec0[((IOTA - 62) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((7.4329200000000013e-05 * fVec0[((IOTA - 115) & 127)]) + ((0.00029377599999999999 * fVec0[((IOTA - 114) & 127)]) + ((0.000280439 * fVec0[((IOTA - 113) & 127)]) + ((0.00052814500000000005 * fVec0[((IOTA - 110) & 127)]) + ((0.00070229999999999999 * fVec0[((IOTA - 109) & 127)]) + ((0.00080632699999999991 * fVec0[((IOTA - 108) & 127)]) + ((0.000643591 * fVec0[((IOTA - 107) & 127)]) + ((0.00081294000000000006 * fVec0[((IOTA - 106) & 127)]) + ((0.00082950500000000002 * fVec0[((IOTA - 105) & 127)]) + ((0.00023107600000000004 * fVec0[((IOTA - 104) & 127)]) + ((0.00064061300000000005 * fVec0[((IOTA - 103) & 127)]) + ((0.00091664000000000003 * fVec0[((IOTA - 102) & 127)]) + ((0.00073955600000000005 * fVec0[((IOTA - 101) & 127)]) + ((0.00059890600000000007 * fVec0[((IOTA - 100) & 127)]) + ((0.0013073099999999999 * fVec0[((IOTA - 99) & 127)]) + ((0.0027768799999999998 * fVec0[((IOTA - 98) & 127)]) + ((0.00040949500000000001 * fVec0[((IOTA - 97) & 127)]) + ((0.00145302 * fVec0[((IOTA - 94) & 127)]) + ((0.0022861500000000002 * fVec0[((IOTA - 93) & 127)]) + ((0.001377 * fVec0[((IOTA - 90) & 127)]) + ((0.0017080400000000001 * fVec0[((IOTA - 89) & 127)]) + ((0.00016274 * fVec0[((IOTA - 83) & 127)]) + ((0.0027307400000000002 * fVec0[((IOTA - 82) & 127)]) + ((0.0028667500000000004 * fVec0[((IOTA - 81) & 127)]) + ((0.0011399600000000002 * fVec0[((IOTA - 80) & 127)]) + ((0.00110995 * fVec0[((IOTA - 79) & 127)]) + ((0.00124602 * fVec0[((IOTA - 78) & 127)]) + ((0.00129805 * fVec0[((IOTA - 77) & 127)]) + ((0.00100318 * fVec0[((IOTA - 76) & 127)]) + ((0.0022987899999999998 * fVec0[((IOTA - 75) & 127)]) + ((0.0019049100000000001 * fVec0[((IOTA - 74) & 127)]) + ((0.00059075000000000002 * fVec0[((IOTA - 73) & 127)]) + ((0.00103864 * fVec0[((IOTA - 72) & 127)]) + ((0.0013787300000000001 * fVec0[((IOTA - 71) & 127)]) + ((0.00181733 * fVec0[((IOTA - 70) & 127)]) + ((0.00293582 * fVec0[((IOTA - 69) & 127)]) + ((0.0023355800000000003 * fVec0[((IOTA - 68) & 127)]) + ((0.0011070699999999999 * fVec0[((IOTA - 67) & 127)]) + ((0.00050953999999999995 * fVec0[((IOTA - 66) & 127)]) + ((0.00044511000000000003 * fVec0[((IOTA - 65) & 127)]) + ((0.0038312400000000001 * fVec0[((IOTA - 61) & 127)]) + ((0.0016638 * fVec0[((IOTA - 60) & 127)]) + ((0.0043739400000000006 * fVec0[((IOTA - 48) & 127)]) + ((0.0013932899999999999 * fVec0[((IOTA - 45) & 127)]) + ((0.0106382 * fVec0[((IOTA - 41) & 127)]) + ((0.0043469900000000002 * fVec0[((IOTA - 40) & 127)]) + ((0.0015759000000000001 * fVec0[((IOTA - 37) & 127)]) + ((0.0073185999999999998 * fVec0[((IOTA - 36) & 127)]) + ((0.0045973800000000007 * fVec0[((IOTA - 35) & 127)]) + ((0.013183400000000001 * fVec0[((IOTA - 33) & 127)]) + ((0.028645500000000001 * fVec0[((IOTA - 32) & 127)]) + ((0.0092487699999999999 * fVec0[((IOTA - 29) & 127)]) + ((0.039121700000000002 * fVec0[((IOTA - 28) & 127)]) + ((0.00144425 * fVec0[((IOTA - 27) & 127)]) + ((0.0060285 * fVec0[((IOTA - 25) & 127)]) + ((0.057524800000000001 * fVec0[((IOTA - 24) & 127)]) + ((0.021570599999999999 * fVec0[((IOTA - 21) & 127)]) + ((0.0014793400000000002 * fVec0[((IOTA - 20) & 127)]) + ((0.0043988899999999999 * fVec0[((IOTA - 19) & 127)]) + ((0.0073680199999999994 * fVec0[((IOTA - 16) & 127)]) + ((0.00058021900000000009 * fVec0[((IOTA - 14) & 127)]) + ((0.0037306700000000002 * fVec0[((IOTA - 12) & 127)]) + ((0.000216524 * fVec0[((IOTA - 11) & 127)]) + ((0.00050577300000000005 * fVec0[((IOTA - 7) & 127)]) + ((0.00019702400000000002 * fVec0[((IOTA - 5) & 127)]) + (((7.8904099999999995e-07 * fVec1[((IOTA - 118) & 127)]) + ((5.1851200000000009e-05 * fVec1[((IOTA - 117) & 127)]) + ((3.48346e-05 * fVec1[((IOTA - 116) & 127)]) + ((0.000263489 * fVec1[((IOTA - 113) & 127)]) + ((0.00048678400000000003 * fVec1[((IOTA - 112) & 127)]) + ((0.00066577900000000002 * fVec1[((IOTA - 111) & 127)]) + ((0.00072508600000000011 * fVec1[((IOTA - 110) & 127)]) + ((0.00094771800000000006 * fVec1[((IOTA - 109) & 127)]) + ((0.00085589900000000003 * fVec1[((IOTA - 108) & 127)]) + ((0.00097958799999999999 * fVec1[((IOTA - 107) & 127)]) + ((0.00110553 * fVec1[((IOTA - 106) & 127)]) + ((0.00082826600000000003 * fVec1[((IOTA - 105) & 127)]) + ((0.0013655500000000001 * fVec1[((IOTA - 104) & 127)]) + ((0.0018638400000000001 * fVec1[((IOTA - 103) & 127)]) + ((0.0016748900000000001 * fVec1[((IOTA - 102) & 127)]) + ((0.0013615999999999999 * fVec1[((IOTA - 101) & 127)]) + ((0.00120272 * fVec1[((IOTA - 100) & 127)]) + ((0.00103053 * fVec1[((IOTA - 99) & 127)]) + ((0.00040302800000000005 * fVec1[((IOTA - 98) & 127)]) + ((0.0012814900000000001 * fVec1[((IOTA - 97) & 127)]) + ((0.0015273399999999999 * fVec1[((IOTA - 96) & 127)]) + ((0.00046550599999999997 * fVec1[((IOTA - 95) & 127)]) + ((0.00038473700000000001 * fVec1[((IOTA - 94) & 127)]) + ((0.0010250300000000001 * fVec1[((IOTA - 93) & 127)]) + ((0.0011346700000000002 * fVec1[((IOTA - 92) & 127)]) + ((0.00043984100000000006 * fVec1[((IOTA - 85) & 127)]) + ((0.00021673800000000001 * fVec1[((IOTA - 84) & 127)]) + ((2.74177e-05 * fVec1[((IOTA - 82) & 127)]) + ((0.0010960700000000002 * fVec1[((IOTA - 77) & 127)]) + ((0.0013700399999999999 * fVec1[((IOTA - 73) & 127)]) + ((0.0030635300000000001 * fVec1[((IOTA - 72) & 127)]) + ((0.0019637600000000002 * fVec1[((IOTA - 71) & 127)]) + ((0.0018260300000000002 * fVec1[((IOTA - 70) & 127)]) + ((0.00238017 * fVec1[((IOTA - 69) & 127)]) + ((0.0031654200000000004 * fVec1[((IOTA - 68) & 127)]) + ((0.00275033 * fVec1[((IOTA - 67) & 127)]) + ((0.0016457800000000001 * fVec1[((IOTA - 66) & 127)]) + ((0.0025982900000000001 * fVec1[((IOTA - 65) & 127)]) + ((0.0013408299999999999 * fVec1[((IOTA - 64) & 127)]) + ((0.00068048499999999999 * fVec1[((IOTA - 60) & 127)]) + ((0.00122218 * fVec1[((IOTA - 59) & 127)]) + ((0.00152893 * fVec1[((IOTA - 58) & 127)]) + ((0.0022063899999999999 * fVec1[((IOTA - 57) & 127)]) + ((0.00078379700000000003 * fVec1[((IOTA - 56) & 127)]) + ((0.00022987799999999998 * fVec1[((IOTA - 52) & 127)]) + ((0.00078511300000000004 * fVec1[((IOTA - 51) & 127)]) + ((0.0012260999999999999 * fVec1[((IOTA - 45) & 127)]) + ((0.0026344099999999998 * fVec1[((IOTA - 44) & 127)]) + ((0.0038961999999999998 * fVec1[((IOTA - 39) & 127)]) + ((0.011467400000000001 * fVec1[((IOTA - 38) & 127)]) + ((0.0078678299999999993 * fVec1[((IOTA - 37) & 127)]) + ((0.0013363100000000001 * fVec1[((IOTA - 34) & 127)]) + ((0.0089890100000000004 * fVec1[((IOTA - 32) & 127)]) + ((0.0143689 * fVec1[((IOTA - 31) & 127)]) + ((0.0049334100000000001 * fVec1[((IOTA - 30) & 127)]) + ((0.019686699999999998 * fVec1[((IOTA - 27) & 127)]) + ((0.0086390499999999988 * fVec1[((IOTA - 25) & 127)]) + ((0.043355600000000001 * fVec1[((IOTA - 19) & 127)]) + ((0.00249322 * fVec1[((IOTA - 18) & 127)]) + ((0.0141169 * fVec1[((IOTA - 16) & 127)]) + ((0.0111431 * fVec1[((IOTA - 15) & 127)]) + ((0.0018486100000000001 * fVec1[((IOTA - 14) & 127)]) + ((0.000976993 * fVec1[((IOTA - 13) & 127)]) + ((0.0056459800000000001 * fVec1[((IOTA - 12) & 127)]) + ((0.00021246900000000004 * fVec1[((IOTA - 11) & 127)]) + ((0.00095016999999999996 * fVec1[((IOTA - 10) & 127)]) + ((0.0010622000000000001 * fVec1[((IOTA - 7) & 127)]) + ((0.00024919200000000002 * fVec1[((IOTA - 6) & 127)]) + ((0.00027049600000000001 * fVec1[((IOTA - 3) & 127)]) + ((5.1123399999999996e-06 * fVec1[((IOTA - 2) & 127)]) + ((3.7580000000000003e-05 * fVec1[((IOTA - 1) & 127)]) + (((2.5019199999999998e-06 * fVec2[((IOTA - 120) & 127)]) + ((0.00015476800000000001 * fVec2[((IOTA - 107) & 127)]) + ((2.3801800000000003e-05 * fVec2[((IOTA - 106) & 127)]) + ((0.00041578400000000004 * fVec2[((IOTA - 105) & 127)]) + ((0.00040693400000000007 * fVec2[((IOTA - 104) & 127)]) + ((0.00042180200000000004 * fVec2[((IOTA - 103) & 127)]) + ((0.00064933700000000005 * fVec2[((IOTA - 102) & 127)]) + ((0.0010572399999999999 * fVec2[((IOTA - 101) & 127)]) + ((0.00096599000000000012 * fVec2[((IOTA - 100) & 127)]) + ((0.00077855999999999997 * fVec2[((IOTA - 99) & 127)]) + ((0.00073777800000000002 * fVec2[((IOTA - 98) & 127)]) + ((0.00065036 * fVec2[((IOTA - 97) & 127)]) + ((0.00069698000000000004 * fVec2[((IOTA - 96) & 127)]) + ((0.0013956400000000001 * fVec2[((IOTA - 95) & 127)]) + ((0.0020596199999999999 * fVec2[((IOTA - 94) & 127)]) + ((0.0017169000000000002 * fVec2[((IOTA - 93) & 127)]) + ((0.0012716300000000002 * fVec2[((IOTA - 92) & 127)]) + ((0.00130908 * fVec2[((IOTA - 91) & 127)]) + ((0.00161012 * fVec2[((IOTA - 88) & 127)]) + ((0.0016711600000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.00075290600000000002 * fVec2[((IOTA - 86) & 127)]) + ((0.00144013 * fVec2[((IOTA - 85) & 127)]) + ((0.0021273399999999997 * fVec2[((IOTA - 84) & 127)]) + ((0.00061597300000000002 * fVec2[((IOTA - 83) & 127)]) + ((0.00011313 * fVec2[((IOTA - 81) & 127)]) + ((0.0017438199999999999 * fVec2[((IOTA - 80) & 127)]) + ((0.0024799100000000001 * fVec2[((IOTA - 79) & 127)]) + ((0.00256507 * fVec2[((IOTA - 78) & 127)]) + ((0.0011552999999999999 * fVec2[((IOTA - 75) & 127)]) + ((0.00098456699999999999 * fVec2[((IOTA - 74) & 127)]) + ((0.000597807 * fVec2[((IOTA - 73) & 127)]) + ((0.0018893200000000001 * fVec2[((IOTA - 72) & 127)]) + ((0.00092920600000000002 * fVec2[((IOTA - 23) & 127)]) + ((0.080136100000000002 * fVec2[((IOTA - 22) & 127)]) + ((0.041393800000000001 * fVec2[((IOTA - 21) & 127)]) + ((0.042661300000000006 * fVec2[((IOTA - 20) & 127)]) + ((0.0088175100000000006 * fVec2[((IOTA - 19) & 127)]) + ((0.053196100000000003 * fVec2[((IOTA - 18) & 127)]) + ((0.097787600000000002 * fVec2[((IOTA - 17) & 127)]) + ((0.077296500000000004 * fVec2[((IOTA - 15) & 127)]) + ((0.064767000000000005 * fVec2[((IOTA - 14) & 127)]) + ((0.082935599999999998 * fVec2[((IOTA - 13) & 127)]) + ((0.078489900000000001 * fVec2[((IOTA - 12) & 127)]) + ((0.00067357800000000009 * fVec2[((IOTA - 11) & 127)]) + ((0.00149621 * fVec2[((IOTA - 10) & 127)]) + ((0.00072128000000000003 * fVec2[((IOTA - 9) & 127)]) + ((0.00101019 * fVec2[((IOTA - 8) & 127)]) + ((0.000453602 * fVec2[((IOTA - 7) & 127)]) + ((0.00042969900000000002 * fVec2[((IOTA - 6) & 127)]) + ((0.0010723199999999999 * fVec2[((IOTA - 5) & 127)]) + ((0.00084950300000000004 * fVec2[((IOTA - 4) & 127)]) + ((0.00085153200000000001 * fVec2[((IOTA - 3) & 127)]) + ((0.00015027000000000001 * fVec2[((IOTA - 1) & 127)]) + ((2.4709800000000002e-05 * fTemp2) + ((1.47262e-06 * fVec3[((IOTA - 122) & 127)]) + ((0.00048385000000000002 * fVec3[((IOTA - 98) & 127)]) + ((0.00047365100000000001 * fVec3[((IOTA - 97) & 127)]) + ((9.940880000000001e-05 * fVec3[((IOTA - 94) & 127)]) + ((0.0023706000000000001 * fVec3[((IOTA - 93) & 127)]) + ((0.00196204 * fVec3[((IOTA - 92) & 127)]) + ((1.7742000000000001e-05 * fVec3[((IOTA - 91) & 127)]) + ((0.000611186 * fVec3[((IOTA - 90) & 127)]) + ((0.00087519700000000008 * fVec3[((IOTA - 89) & 127)]) + ((0.000687957 * fVec3[((IOTA - 82) & 127)]) + ((0.00036222200000000004 * fVec3[((IOTA - 69) & 127)]) + ((0.00063317100000000008 * fVec3[((IOTA - 57) & 127)]) + ((0.00092078700000000006 * fVec3[((IOTA - 44) & 127)]) + ((0.0029395300000000001 * fVec3[((IOTA - 32) & 127)]) + (((0.00016075400000000001 * fVec3[((IOTA - 2) & 127)]) + (0.021295600000000001 * fVec3[((IOTA - 24) & 127)])) + (0.040092800000000005 * fVec2[((IOTA - 16) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.0426200000000002e-05 * fTemp1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (6.4290300000000003e-05 * fVec0[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + double fTemp5 = (fRec1[0] * (((1.4188099999999999e-06 * fVec0[((IOTA - 126) & 127)]) + ((3.3187600000000001e-06 * fVec0[((IOTA - 125) & 127)]) + ((5.1482899999999996e-06 * fVec0[((IOTA - 124) & 127)]) + ((8.7600299999999995e-06 * fVec0[((IOTA - 123) & 127)]) + ((5.5660599999999997e-06 * fVec0[((IOTA - 122) & 127)]) + ((5.530960000000001e-05 * fVec0[((IOTA - 121) & 127)]) + ((0.00011918500000000002 * fVec0[((IOTA - 120) & 127)]) + ((9.8678100000000013e-05 * fVec0[((IOTA - 119) & 127)]) + ((4.2207000000000004e-05 * fVec0[((IOTA - 118) & 127)]) + ((3.2490500000000003e-05 * fVec0[((IOTA - 117) & 127)]) + ((0.00011697900000000002 * fVec0[((IOTA - 116) & 127)]) + ((5.6691300000000004e-05 * fVec0[((IOTA - 112) & 127)]) + ((0.000115798 * fVec0[((IOTA - 111) & 127)]) + ((0.0037339199999999999 * fVec0[((IOTA - 96) & 127)]) + ((0.0027517499999999999 * fVec0[((IOTA - 95) & 127)]) + ((0.00065997500000000004 * fVec0[((IOTA - 92) & 127)]) + ((0.0016790700000000002 * fVec0[((IOTA - 91) & 127)]) + ((0.0019817300000000001 * fVec0[((IOTA - 88) & 127)]) + ((0.0040626200000000003 * fVec0[((IOTA - 87) & 127)]) + ((0.0023261500000000004 * fVec0[((IOTA - 86) & 127)]) + ((0.0015044699999999999 * fVec0[((IOTA - 85) & 127)]) + ((0.0010922900000000001 * fVec0[((IOTA - 84) & 127)]) + ((0.0012104800000000001 * fVec0[((IOTA - 64) & 127)]) + ((0.0039074399999999999 * fVec0[((IOTA - 63) & 127)]) + ((0.00102589 * fVec0[((IOTA - 62) & 127)]) + ((0.00070128400000000004 * fVec0[((IOTA - 59) & 127)]) + ((0.00040873600000000004 * fVec0[((IOTA - 58) & 127)]) + ((0.0011136799999999999 * fVec0[((IOTA - 57) & 127)]) + ((0.0035448200000000002 * fVec0[((IOTA - 56) & 127)]) + ((0.0022150400000000002 * fVec0[((IOTA - 55) & 127)]) + ((3.8517100000000004e-05 * fVec0[((IOTA - 54) & 127)]) + ((0.0011952499999999999 * fVec0[((IOTA - 53) & 127)]) + ((0.00017855099999999999 * fVec0[((IOTA - 52) & 127)]) + ((0.0020778099999999998 * fVec0[((IOTA - 51) & 127)]) + ((0.0048699899999999994 * fVec0[((IOTA - 50) & 127)]) + ((0.0020168600000000001 * fVec0[((IOTA - 49) & 127)]) + ((0.0011997199999999998 * fVec0[((IOTA - 47) & 127)]) + ((0.0061526599999999999 * fVec0[((IOTA - 46) & 127)]) + ((0.0028706900000000004 * fVec0[((IOTA - 44) & 127)]) + ((0.011077500000000001 * fVec0[((IOTA - 43) & 127)]) + ((0.0022290399999999998 * fVec0[((IOTA - 42) & 127)]) + ((0.0084232300000000003 * fVec0[((IOTA - 39) & 127)]) + ((0.00127378 * fVec0[((IOTA - 38) & 127)]) + ((0.0125606 * fVec0[((IOTA - 34) & 127)]) + ((0.011542200000000001 * fVec0[((IOTA - 31) & 127)]) + ((0.024367400000000001 * fVec0[((IOTA - 30) & 127)]) + ((0.0537481 * fVec0[((IOTA - 26) & 127)]) + ((0.00056964699999999995 * fVec0[((IOTA - 6) & 127)]) + ((0.00055874899999999999 * fVec0[((IOTA - 4) & 127)]) + ((0.000107706 * fVec0[((IOTA - 2) & 127)]) + ((2.3258800000000005e-05 * fVec0[((IOTA - 1) & 127)]) + ((1.5002200000000002e-05 * fTemp0) + ((0.013059400000000001 * fVec0[((IOTA - 23) & 127)]) + ((0.021176 * fVec0[((IOTA - 22) & 127)]) + ((0.0292041 * fVec0[((IOTA - 18) & 127)]) + ((0.015611 * fVec0[((IOTA - 17) & 127)]) + ((0.0131959 * fVec0[((IOTA - 15) & 127)]) + ((0.0033820999999999999 * fVec0[((IOTA - 13) & 127)]) + ((1.8648999999999999e-06 * fVec1[((IOTA - 126) & 127)]) + ((1.0045e-05 * fVec1[((IOTA - 125) & 127)]) + ((1.8977800000000003e-05 * fVec1[((IOTA - 124) & 127)]) + ((1.9873400000000002e-05 * fVec1[((IOTA - 123) & 127)]) + ((3.4954000000000004e-05 * fVec1[((IOTA - 122) & 127)]) + ((9.3229500000000019e-05 * fVec1[((IOTA - 121) & 127)]) + ((0.00012240800000000001 * fVec1[((IOTA - 120) & 127)]) + ((9.5701199999999998e-05 * fVec1[((IOTA - 119) & 127)]) + ((5.5900900000000005e-05 * fVec1[((IOTA - 115) & 127)]) + ((1.9102600000000002e-05 * fVec1[((IOTA - 114) & 127)]) + ((0.00012754700000000002 * fVec0[((IOTA - 9) & 127)]) + ((0.00065433400000000001 * fVec0[((IOTA - 10) & 127)]) + (((0.000876507 * fVec1[((IOTA - 91) & 127)]) + ((0.0020406000000000001 * fVec1[((IOTA - 90) & 127)]) + ((0.0013280499999999999 * fVec1[((IOTA - 89) & 127)]) + ((0.0017303100000000001 * fVec1[((IOTA - 88) & 127)]) + ((0.0029776099999999999 * fVec1[((IOTA - 87) & 127)]) + ((0.0025195700000000001 * fVec1[((IOTA - 86) & 127)]) + ((0.0011889400000000001 * fVec1[((IOTA - 83) & 127)]) + ((0.000386788 * fVec1[((IOTA - 81) & 127)]) + ((0.00090610300000000012 * fVec1[((IOTA - 80) & 127)]) + ((0.0014508500000000001 * fVec1[((IOTA - 79) & 127)]) + ((0.00082739399999999996 * fVec1[((IOTA - 78) & 127)]) + ((0.00013990400000000002 * fVec1[((IOTA - 76) & 127)]) + ((0.00174807 * fVec1[((IOTA - 75) & 127)]) + ((0.00102092 * fVec1[((IOTA - 74) & 127)]) + ((0.00235812 * fVec1[((IOTA - 63) & 127)]) + ((0.0021519 * fVec1[((IOTA - 62) & 127)]) + ((7.6654099999999985e-06 * fVec1[((IOTA - 61) & 127)]) + ((0.0022741699999999998 * fVec1[((IOTA - 55) & 127)]) + ((0.0042530099999999998 * fVec1[((IOTA - 54) & 127)]) + ((0.0032282000000000001 * fVec1[((IOTA - 53) & 127)]) + ((0.0041592900000000004 * fVec1[((IOTA - 50) & 127)]) + ((0.0075640600000000001 * fVec1[((IOTA - 49) & 127)]) + ((0.0079603199999999999 * fVec1[((IOTA - 48) & 127)]) + ((0.0030812000000000001 * fVec1[((IOTA - 47) & 127)]) + ((0.00018497500000000001 * fVec1[((IOTA - 46) & 127)]) + ((0.00033097600000000002 * fVec1[((IOTA - 43) & 127)]) + ((0.0066906600000000002 * fVec1[((IOTA - 42) & 127)]) + ((0.0081795500000000007 * fVec1[((IOTA - 41) & 127)]) + ((0.0088403900000000001 * fVec1[((IOTA - 36) & 127)]) + ((0.0054466000000000002 * fVec1[((IOTA - 35) & 127)]) + ((0.0040393699999999996 * fVec1[((IOTA - 33) & 127)]) + ((0.033863999999999998 * fVec1[((IOTA - 29) & 127)]) + ((0.0092350000000000002 * fVec1[((IOTA - 28) & 127)]) + ((0.00053732699999999999 * fVec1[((IOTA - 26) & 127)]) + ((0.0043864799999999999 * fVec1[((IOTA - 24) & 127)]) + ((0.0027836500000000004 * fVec1[((IOTA - 23) & 127)]) + ((0.0092729000000000006 * fVec1[((IOTA - 22) & 127)]) + ((0.022299000000000003 * fVec1[((IOTA - 21) & 127)]) + ((0.0012059800000000002 * fVec1[((IOTA - 20) & 127)]) + ((0.025815500000000002 * fVec1[((IOTA - 17) & 127)]) + ((7.0800700000000008e-05 * fVec1[((IOTA - 9) & 127)]) + ((0.00076956600000000007 * fVec1[((IOTA - 8) & 127)]) + ((0.000231146 * fVec1[((IOTA - 5) & 127)]) + ((0.00014766099999999999 * fVec1[((IOTA - 4) & 127)]) + ((1.4833700000000001e-06 * fVec2[((IOTA - 126) & 127)]) + ((3.6973199999999999e-06 * fVec2[((IOTA - 125) & 127)]) + ((8.5058500000000009e-06 * fVec2[((IOTA - 124) & 127)]) + ((4.1470500000000002e-05 * fVec2[((IOTA - 123) & 127)]) + ((7.1901800000000003e-05 * fVec2[((IOTA - 122) & 127)]) + ((3.71676e-05 * fVec2[((IOTA - 121) & 127)]) + ((3.3982700000000002e-05 * fVec2[((IOTA - 119) & 127)]) + ((0.00016550199999999999 * fVec2[((IOTA - 118) & 127)]) + ((0.00015893600000000001 * fVec2[((IOTA - 117) & 127)]) + ((0.00011888700000000002 * fVec2[((IOTA - 116) & 127)]) + ((2.6751600000000003e-05 * fVec2[((IOTA - 115) & 127)]) + ((1.5261800000000004e-05 * fVec2[((IOTA - 114) & 127)]) + ((0.00030627700000000004 * fVec2[((IOTA - 113) & 127)]) + ((0.00036830800000000003 * fVec2[((IOTA - 112) & 127)]) + ((0.000251322 * fVec2[((IOTA - 111) & 127)]) + ((0.00022708 * fVec2[((IOTA - 110) & 127)]) + ((0.000239084 * fVec2[((IOTA - 109) & 127)]) + ((9.1238799999999995e-06 * fVec2[((IOTA - 108) & 127)]) + ((0.00015429699999999999 * fVec2[((IOTA - 90) & 127)]) + ((0.00021972700000000002 * fVec2[((IOTA - 89) & 127)]) + ((0.0011643300000000001 * fVec2[((IOTA - 82) & 127)]) + ((0.00108066 * fVec1[((IOTA - 40) & 127)]) + ((0.00065994200000000006 * fVec2[((IOTA - 77) & 127)]) + ((0.0017905 * fVec2[((IOTA - 76) & 127)]) + ((0.00015571700000000001 * fVec2[((IOTA - 71) & 127)]) + ((0.0044549899999999998 * fVec2[((IOTA - 70) & 127)]) + ((0.0039002500000000005 * fVec2[((IOTA - 69) & 127)]) + ((0.00164631 * fVec2[((IOTA - 67) & 127)]) + ((0.00128867 * fVec2[((IOTA - 66) & 127)]) + ((0.000377902 * fVec2[((IOTA - 65) & 127)]) + ((0.00227327 * fVec2[((IOTA - 64) & 127)]) + ((0.0030369999999999998 * fVec2[((IOTA - 63) & 127)]) + ((0.0023284899999999999 * fVec2[((IOTA - 62) & 127)]) + ((0.00054205300000000002 * fVec2[((IOTA - 68) & 127)]) + ((0.0020450900000000003 * fVec2[((IOTA - 61) & 127)]) + ((0.0038926099999999999 * fVec2[((IOTA - 60) & 127)]) + ((0.0051357799999999995 * fVec2[((IOTA - 59) & 127)]) + ((0.0057548899999999995 * fVec2[((IOTA - 58) & 127)]) + ((0.0110121 * fVec2[((IOTA - 57) & 127)]) + ((0.010980500000000001 * fVec2[((IOTA - 56) & 127)]) + ((0.0074067100000000004 * fVec2[((IOTA - 55) & 127)]) + ((0.0058000299999999994 * fVec2[((IOTA - 54) & 127)]) + ((0.0046881500000000003 * fVec2[((IOTA - 53) & 127)]) + ((0.0079024400000000002 * fVec2[((IOTA - 52) & 127)]) + ((0.0143637 * fVec2[((IOTA - 51) & 127)]) + ((0.018899099999999999 * fVec2[((IOTA - 50) & 127)]) + ((0.016699200000000001 * fVec2[((IOTA - 49) & 127)]) + ((0.0121522 * fVec2[((IOTA - 48) & 127)]) + ((0.011685700000000002 * fVec2[((IOTA - 47) & 127)]) + ((0.0122635 * fVec2[((IOTA - 46) & 127)]) + ((0.017027300000000002 * fVec2[((IOTA - 45) & 127)]) + ((0.019806900000000002 * fVec2[((IOTA - 44) & 127)]) + ((0.017303499999999999 * fVec2[((IOTA - 43) & 127)]) + ((0.017569399999999999 * fVec2[((IOTA - 42) & 127)]) + ((0.016072400000000001 * fVec2[((IOTA - 41) & 127)]) + ((0.0227996 * fVec2[((IOTA - 40) & 127)]) + ((0.016965000000000001 * fVec2[((IOTA - 39) & 127)]) + ((0.017693 * fVec2[((IOTA - 38) & 127)]) + ((0.033336499999999998 * fVec2[((IOTA - 37) & 127)]) + ((0.029073099999999998 * fVec2[((IOTA - 36) & 127)]) + ((0.018621700000000001 * fVec2[((IOTA - 35) & 127)]) + ((0.023295900000000001 * fVec2[((IOTA - 34) & 127)]) + ((0.030269900000000002 * fVec2[((IOTA - 33) & 127)]) + ((0.023498000000000002 * fVec2[((IOTA - 32) & 127)]) + ((0.012867100000000001 * fVec2[((IOTA - 31) & 127)]) + ((0.024658199999999998 * fVec2[((IOTA - 30) & 127)]) + ((0.033071500000000004 * fVec2[((IOTA - 29) & 127)]) + ((0.023601800000000003 * fVec2[((IOTA - 28) & 127)]) + ((0.025422899999999998 * fVec2[((IOTA - 27) & 127)]) + ((0.014210199999999999 * fVec2[((IOTA - 26) & 127)]) + ((0.010567 * fVec2[((IOTA - 25) & 127)]) + ((0.056895100000000004 * fVec2[((IOTA - 24) & 127)]) + ((1.74779e-06 * fVec3[((IOTA - 126) & 127)]) + ((7.1374800000000001e-06 * fVec3[((IOTA - 125) & 127)]) + ((1.69708e-05 * fVec3[((IOTA - 124) & 127)]) + ((7.3980599999999995e-07 * fVec3[((IOTA - 123) & 127)]) + ((5.5996800000000006e-05 * fVec3[((IOTA - 121) & 127)]) + ((0.000117308 * fVec3[((IOTA - 120) & 127)]) + ((0.000195057 * fVec3[((IOTA - 119) & 127)]) + ((0.00020216400000000001 * fVec3[((IOTA - 118) & 127)]) + ((0.00016114100000000001 * fVec3[((IOTA - 117) & 127)]) + ((0.00038352400000000005 * fVec3[((IOTA - 116) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((((((((4.49754e-06 * fVec3[((IOTA - 56) & 127)]) + ((0.0039973999999999999 * fVec3[((IOTA - 55) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((((((((1.96889e-05 * fTemp3) + (0.00012713900000000002 * fVec3[((IOTA - 1) & 127)])) + (0.00072445800000000009 * fVec3[((IOTA - 3) & 127)])) + (0.00084005400000000002 * fVec3[((IOTA - 4) & 127)])) + (0.00078251799999999995 * fVec3[((IOTA - 5) & 127)])) + (0.00064681700000000005 * fVec3[((IOTA - 6) & 127)])) + (0.00105561 * fVec3[((IOTA - 7) & 127)])) + (0.00107368 * fVec3[((IOTA - 8) & 127)])) + (0.00055752700000000004 * fVec3[((IOTA - 9) & 127)])) + (0.0020685400000000002 * fVec3[((IOTA - 10) & 127)])) + (0.0007391530000000001 * fVec3[((IOTA - 11) & 127)])) + (0.048941400000000003 * fVec3[((IOTA - 12) & 127)])) + (0.053001199999999998 * fVec3[((IOTA - 13) & 127)])) + (0.046698700000000003 * fVec3[((IOTA - 14) & 127)])) + (0.062211200000000001 * fVec3[((IOTA - 15) & 127)])) + (0.043948600000000004 * fVec3[((IOTA - 16) & 127)])) + (0.081345899999999999 * fVec3[((IOTA - 17) & 127)])) + (0.047424299999999996 * fVec3[((IOTA - 18) & 127)])) + (0.041405900000000002 * fVec3[((IOTA - 19) & 127)])) + (0.069732299999999997 * fVec3[((IOTA - 20) & 127)])) + (0.050380599999999998 * fVec3[((IOTA - 21) & 127)])) + (0.111697 * fVec3[((IOTA - 22) & 127)])) + (0.054464300000000007 * fVec3[((IOTA - 23) & 127)])) + (0.036801199999999999 * fVec3[((IOTA - 25) & 127)])) + (0.042423700000000002 * fVec3[((IOTA - 26) & 127)])) + (0.0075229400000000005 * fVec3[((IOTA - 27) & 127)])) + (0.0123141 * fVec3[((IOTA - 28) & 127)])) + (0.0216826 * fVec3[((IOTA - 29) & 127)])) + (0.017730600000000003 * fVec3[((IOTA - 30) & 127)])) + (0.0080194200000000011 * fVec3[((IOTA - 31) & 127)])) + (0.021074000000000002 * fVec3[((IOTA - 33) & 127)])) + (0.0272114 * fVec3[((IOTA - 34) & 127)])) + (0.0056564199999999997 * fVec3[((IOTA - 35) & 127)])) + (0.010539099999999999 * fVec3[((IOTA - 36) & 127)])) + (0.0081598500000000015 * fVec3[((IOTA - 37) & 127)])) + (0.0060665699999999994 * fVec3[((IOTA - 38) & 127)])) + (0.0072938400000000002 * fVec3[((IOTA - 39) & 127)])) + (0.0014525200000000001 * fVec3[((IOTA - 40) & 127)])) + (0.0049862900000000009 * fVec3[((IOTA - 41) & 127)])) + (0.014038399999999999 * fVec3[((IOTA - 42) & 127)])) + (0.0105579 * fVec3[((IOTA - 43) & 127)])) + (0.00431154 * fVec3[((IOTA - 45) & 127)])) + (0.0084629900000000001 * fVec3[((IOTA - 46) & 127)])) + (0.0007157 * fVec3[((IOTA - 47) & 127)])) + (0.00067166600000000002 * fVec3[((IOTA - 48) & 127)])) + (0.0046483699999999998 * fVec3[((IOTA - 49) & 127)])) + (0.0014356600000000001 * fVec3[((IOTA - 50) & 127)])) + (0.00020930100000000001 * fVec3[((IOTA - 51) & 127)])) + (0.00139635 * fVec3[((IOTA - 52) & 127)])) + (0.0029229899999999999 * fVec3[((IOTA - 53) & 127)])) + (0.0042595000000000003 * fVec3[((IOTA - 54) & 127)])))) + (0.00278079 * fVec3[((IOTA - 58) & 127)])) + (0.0038020800000000002 * fVec3[((IOTA - 59) & 127)])) + (0.0026122100000000002 * fVec3[((IOTA - 60) & 127)])) + (0.00338193 * fVec3[((IOTA - 61) & 127)])) + (0.0064815100000000002 * fVec3[((IOTA - 62) & 127)])) + (0.0067297599999999996 * fVec3[((IOTA - 63) & 127)])) + (0.0038801100000000004 * fVec3[((IOTA - 64) & 127)])) + (0.0029381799999999999 * fVec3[((IOTA - 65) & 127)])) + (0.0016933400000000002 * fVec3[((IOTA - 66) & 127)])) + (0.0028127900000000003 * fVec3[((IOTA - 67) & 127)])) + (0.0033726400000000001 * fVec3[((IOTA - 68) & 127)])) + (0.00072404000000000001 * fVec3[((IOTA - 70) & 127)])) + (0.0019828699999999999 * fVec3[((IOTA - 71) & 127)])) + (0.0039087499999999999 * fVec3[((IOTA - 72) & 127)])) + (0.0053022700000000004 * fVec3[((IOTA - 73) & 127)])) + (0.0036032700000000004 * fVec3[((IOTA - 74) & 127)])) + (0.0053821700000000004 * fVec3[((IOTA - 75) & 127)])) + (0.0046326400000000004 * fVec3[((IOTA - 76) & 127)])) + (0.0020199900000000002 * fVec3[((IOTA - 77) & 127)])) + (0.0020409600000000001 * fVec3[((IOTA - 78) & 127)])) + (0.00144247 * fVec3[((IOTA - 79) & 127)])) + (0.0026692399999999998 * fVec3[((IOTA - 80) & 127)])) + (0.0015368900000000002 * fVec3[((IOTA - 81) & 127)])) + (2.5156400000000002e-05 * fVec3[((IOTA - 83) & 127)])) + (0.0010550900000000001 * fVec3[((IOTA - 84) & 127)])) + (0.0017505699999999999 * fVec3[((IOTA - 85) & 127)])) + (0.0026745600000000003 * fVec3[((IOTA - 86) & 127)])) + (0.00365475 * fVec3[((IOTA - 87) & 127)])) + (0.00193882 * fVec3[((IOTA - 88) & 127)])) + (0.0033512100000000003 * fVec3[((IOTA - 95) & 127)])) + (0.0025739000000000001 * fVec3[((IOTA - 96) & 127)])) + (0.00059498000000000005 * fVec3[((IOTA - 99) & 127)])) + (0.00094503799999999993 * fVec3[((IOTA - 100) & 127)])) + (0.0013272 * fVec3[((IOTA - 101) & 127)])) + (0.00147426 * fVec3[((IOTA - 102) & 127)])) + (0.0018419899999999999 * fVec3[((IOTA - 103) & 127)])) + (0.0012236 * fVec3[((IOTA - 104) & 127)])) + (0.00100501 * fVec3[((IOTA - 105) & 127)])) + (0.0016259900000000001 * fVec3[((IOTA - 106) & 127)])) + (0.0013097499999999999 * fVec3[((IOTA - 107) & 127)])) + (0.00095978899999999995 * fVec3[((IOTA - 108) & 127)])) + (0.000779071 * fVec3[((IOTA - 109) & 127)])) + (0.00070924500000000006 * fVec3[((IOTA - 110) & 127)])) + (0.0010336799999999999 * fVec3[((IOTA - 111) & 127)])) + (0.00050421999999999999 * fVec3[((IOTA - 112) & 127)])) + (0.00042659700000000002 * fVec3[((IOTA - 113) & 127)])) + (0.00050803600000000001 * fVec3[((IOTA - 114) & 127)])) + (0.00050261399999999997 * fVec3[((IOTA - 115) & 127)])) + (0.00027516900000000002 * fVec2[((IOTA - 2) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00028600400000000002 * fVec0[((IOTA - 8) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((7.4329200000000013e-05 * fVec0[((IOTA - 115) & 127)]) + ((0.00029377599999999999 * fVec0[((IOTA - 114) & 127)]) + ((0.000280439 * fVec0[((IOTA - 113) & 127)]) + ((0.00052814500000000005 * fVec0[((IOTA - 110) & 127)]) + ((0.00070229999999999999 * fVec0[((IOTA - 109) & 127)]) + ((0.00080632699999999991 * fVec0[((IOTA - 108) & 127)]) + ((0.000643591 * fVec0[((IOTA - 107) & 127)]) + ((0.00081294000000000006 * fVec0[((IOTA - 106) & 127)]) + ((0.00082950500000000002 * fVec0[((IOTA - 105) & 127)]) + ((0.00023107600000000004 * fVec0[((IOTA - 104) & 127)]) + ((0.00064061300000000005 * fVec0[((IOTA - 103) & 127)]) + ((0.00091664000000000003 * fVec0[((IOTA - 102) & 127)]) + ((0.00073955600000000005 * fVec0[((IOTA - 101) & 127)]) + ((0.00059890600000000007 * fVec0[((IOTA - 100) & 127)]) + ((0.0013073099999999999 * fVec0[((IOTA - 99) & 127)]) + ((0.0027768799999999998 * fVec0[((IOTA - 98) & 127)]) + ((0.00040949500000000001 * fVec0[((IOTA - 97) & 127)]) + ((0.00145302 * fVec0[((IOTA - 94) & 127)]) + ((0.0022861500000000002 * fVec0[((IOTA - 93) & 127)]) + ((0.001377 * fVec0[((IOTA - 90) & 127)]) + ((0.0017080400000000001 * fVec0[((IOTA - 89) & 127)]) + ((0.00016274 * fVec0[((IOTA - 83) & 127)]) + ((0.0027307400000000002 * fVec0[((IOTA - 82) & 127)]) + ((0.0028667500000000004 * fVec0[((IOTA - 81) & 127)]) + ((0.0011399600000000002 * fVec0[((IOTA - 80) & 127)]) + ((0.00110995 * fVec0[((IOTA - 79) & 127)]) + ((0.00124602 * fVec0[((IOTA - 78) & 127)]) + ((0.00129805 * fVec0[((IOTA - 77) & 127)]) + ((0.00100318 * fVec0[((IOTA - 76) & 127)]) + ((0.0022987899999999998 * fVec0[((IOTA - 75) & 127)]) + ((0.0019049100000000001 * fVec0[((IOTA - 74) & 127)]) + ((0.00059075000000000002 * fVec0[((IOTA - 73) & 127)]) + ((0.00103864 * fVec0[((IOTA - 72) & 127)]) + ((0.0013787300000000001 * fVec0[((IOTA - 71) & 127)]) + ((0.00181733 * fVec0[((IOTA - 70) & 127)]) + ((0.00293582 * fVec0[((IOTA - 69) & 127)]) + ((0.0023355800000000003 * fVec0[((IOTA - 68) & 127)]) + ((0.0011070699999999999 * fVec0[((IOTA - 67) & 127)]) + ((0.00050953999999999995 * fVec0[((IOTA - 66) & 127)]) + ((0.00044511000000000003 * fVec0[((IOTA - 65) & 127)]) + ((0.0038312400000000001 * fVec0[((IOTA - 61) & 127)]) + ((0.0016638 * fVec0[((IOTA - 60) & 127)]) + ((0.0043739400000000006 * fVec0[((IOTA - 48) & 127)]) + ((0.0013932899999999999 * fVec0[((IOTA - 45) & 127)]) + ((0.0106382 * fVec0[((IOTA - 41) & 127)]) + ((0.0043469900000000002 * fVec0[((IOTA - 40) & 127)]) + ((0.0015759000000000001 * fVec0[((IOTA - 37) & 127)]) + ((0.0073185999999999998 * fVec0[((IOTA - 36) & 127)]) + ((0.0045973800000000007 * fVec0[((IOTA - 35) & 127)]) + ((0.013183400000000001 * fVec0[((IOTA - 33) & 127)]) + ((0.028645500000000001 * fVec0[((IOTA - 32) & 127)]) + ((0.0092487699999999999 * fVec0[((IOTA - 29) & 127)]) + ((0.039121700000000002 * fVec0[((IOTA - 28) & 127)]) + ((0.00144425 * fVec0[((IOTA - 27) & 127)]) + ((0.0060285 * fVec0[((IOTA - 25) & 127)]) + ((0.057524800000000001 * fVec0[((IOTA - 24) & 127)]) + ((0.00050577300000000005 * fVec0[((IOTA - 7) & 127)]) + ((0.00019702400000000002 * fVec0[((IOTA - 5) & 127)]) + ((6.4290300000000003e-05 * fVec0[((IOTA - 3) & 127)]) + ((0.021570599999999999 * fVec0[((IOTA - 21) & 127)]) + ((0.0014793400000000002 * fVec0[((IOTA - 20) & 127)]) + ((0.0043988899999999999 * fVec0[((IOTA - 19) & 127)]) + ((0.0073680199999999994 * fVec0[((IOTA - 16) & 127)]) + ((0.00058021900000000009 * fVec0[((IOTA - 14) & 127)]) + ((0.0037306700000000002 * fVec0[((IOTA - 12) & 127)]) + (((7.8904099999999995e-07 * fVec1[((IOTA - 118) & 127)]) + ((5.1851200000000009e-05 * fVec1[((IOTA - 117) & 127)]) + ((3.48346e-05 * fVec1[((IOTA - 116) & 127)]) + ((0.000263489 * fVec1[((IOTA - 113) & 127)]) + ((0.00048678400000000003 * fVec1[((IOTA - 112) & 127)]) + ((0.00066577900000000002 * fVec1[((IOTA - 111) & 127)]) + ((0.00072508600000000011 * fVec1[((IOTA - 110) & 127)]) + ((0.00094771800000000006 * fVec1[((IOTA - 109) & 127)]) + ((0.00085589900000000003 * fVec1[((IOTA - 108) & 127)]) + ((0.00097958799999999999 * fVec1[((IOTA - 107) & 127)]) + ((0.00110553 * fVec1[((IOTA - 106) & 127)]) + ((0.00082826600000000003 * fVec1[((IOTA - 105) & 127)]) + ((0.0013655500000000001 * fVec1[((IOTA - 104) & 127)]) + ((0.0018638400000000001 * fVec1[((IOTA - 103) & 127)]) + ((0.0016748900000000001 * fVec1[((IOTA - 102) & 127)]) + ((0.0013615999999999999 * fVec1[((IOTA - 101) & 127)]) + ((0.00120272 * fVec1[((IOTA - 100) & 127)]) + ((0.00103053 * fVec1[((IOTA - 99) & 127)]) + ((0.00040302800000000005 * fVec1[((IOTA - 98) & 127)]) + ((0.0012814900000000001 * fVec1[((IOTA - 97) & 127)]) + ((0.0015273399999999999 * fVec1[((IOTA - 96) & 127)]) + ((0.00046550599999999997 * fVec1[((IOTA - 95) & 127)]) + ((0.00038473700000000001 * fVec1[((IOTA - 94) & 127)]) + ((0.0010250300000000001 * fVec1[((IOTA - 93) & 127)]) + ((0.0011346700000000002 * fVec1[((IOTA - 92) & 127)]) + ((0.00043984100000000006 * fVec1[((IOTA - 85) & 127)]) + ((0.00021673800000000001 * fVec1[((IOTA - 84) & 127)]) + ((2.74177e-05 * fVec1[((IOTA - 82) & 127)]) + ((0.0010960700000000002 * fVec1[((IOTA - 77) & 127)]) + ((0.0013700399999999999 * fVec1[((IOTA - 73) & 127)]) + ((0.0030635300000000001 * fVec1[((IOTA - 72) & 127)]) + ((0.0019637600000000002 * fVec1[((IOTA - 71) & 127)]) + ((0.0018260300000000002 * fVec1[((IOTA - 70) & 127)]) + ((0.00238017 * fVec1[((IOTA - 69) & 127)]) + ((0.0031654200000000004 * fVec1[((IOTA - 68) & 127)]) + ((0.00275033 * fVec1[((IOTA - 67) & 127)]) + ((0.0016457800000000001 * fVec1[((IOTA - 66) & 127)]) + ((0.0025982900000000001 * fVec1[((IOTA - 65) & 127)]) + ((0.0013408299999999999 * fVec1[((IOTA - 64) & 127)]) + ((0.00068048499999999999 * fVec1[((IOTA - 60) & 127)]) + ((0.00122218 * fVec1[((IOTA - 59) & 127)]) + ((0.00152893 * fVec1[((IOTA - 58) & 127)]) + ((0.0022063899999999999 * fVec1[((IOTA - 57) & 127)]) + ((0.00078379700000000003 * fVec1[((IOTA - 56) & 127)]) + ((0.00022987799999999998 * fVec1[((IOTA - 52) & 127)]) + ((0.00078511300000000004 * fVec1[((IOTA - 51) & 127)]) + ((0.0012260999999999999 * fVec1[((IOTA - 45) & 127)]) + ((0.0026344099999999998 * fVec1[((IOTA - 44) & 127)]) + ((0.0038961999999999998 * fVec1[((IOTA - 39) & 127)]) + ((0.011467400000000001 * fVec1[((IOTA - 38) & 127)]) + ((0.0078678299999999993 * fVec1[((IOTA - 37) & 127)]) + ((0.0013363100000000001 * fVec1[((IOTA - 34) & 127)]) + ((0.0089890100000000004 * fVec1[((IOTA - 32) & 127)]) + ((0.0143689 * fVec1[((IOTA - 31) & 127)]) + ((0.0049334100000000001 * fVec1[((IOTA - 30) & 127)]) + ((0.019686699999999998 * fVec1[((IOTA - 27) & 127)]) + ((0.0086390499999999988 * fVec1[((IOTA - 25) & 127)]) + ((0.043355600000000001 * fVec1[((IOTA - 19) & 127)]) + ((0.00249322 * fVec1[((IOTA - 18) & 127)]) + ((0.0141169 * fVec1[((IOTA - 16) & 127)]) + ((0.0111431 * fVec1[((IOTA - 15) & 127)]) + ((0.0018486100000000001 * fVec1[((IOTA - 14) & 127)]) + ((0.000976993 * fVec1[((IOTA - 13) & 127)]) + ((0.0056459800000000001 * fVec1[((IOTA - 12) & 127)]) + ((0.00021246900000000004 * fVec1[((IOTA - 11) & 127)]) + ((0.00095016999999999996 * fVec1[((IOTA - 10) & 127)]) + ((0.0010622000000000001 * fVec1[((IOTA - 7) & 127)]) + ((0.00024919200000000002 * fVec1[((IOTA - 6) & 127)]) + ((0.00027049600000000001 * fVec1[((IOTA - 3) & 127)]) + ((5.1123399999999996e-06 * fVec1[((IOTA - 2) & 127)]) + ((3.7580000000000003e-05 * fVec1[((IOTA - 1) & 127)]) + (((2.5019199999999998e-06 * fVec2[((IOTA - 120) & 127)]) + ((0.00015476800000000001 * fVec2[((IOTA - 107) & 127)]) + ((2.3801800000000003e-05 * fVec2[((IOTA - 106) & 127)]) + ((0.00041578400000000004 * fVec2[((IOTA - 105) & 127)]) + ((0.00040693400000000007 * fVec2[((IOTA - 104) & 127)]) + ((0.00042180200000000004 * fVec2[((IOTA - 103) & 127)]) + ((0.00064933700000000005 * fVec2[((IOTA - 102) & 127)]) + ((0.0010572399999999999 * fVec2[((IOTA - 101) & 127)]) + ((0.00096599000000000012 * fVec2[((IOTA - 100) & 127)]) + ((0.00077855999999999997 * fVec2[((IOTA - 99) & 127)]) + ((0.00073777800000000002 * fVec2[((IOTA - 98) & 127)]) + ((0.00065036 * fVec2[((IOTA - 97) & 127)]) + ((0.00069698000000000004 * fVec2[((IOTA - 96) & 127)]) + ((0.0013956400000000001 * fVec2[((IOTA - 95) & 127)]) + ((0.0020596199999999999 * fVec2[((IOTA - 94) & 127)]) + ((0.0017169000000000002 * fVec2[((IOTA - 93) & 127)]) + ((0.0012716300000000002 * fVec2[((IOTA - 92) & 127)]) + ((0.00130908 * fVec2[((IOTA - 91) & 127)]) + ((0.00161012 * fVec2[((IOTA - 88) & 127)]) + ((0.0016711600000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.00075290600000000002 * fVec2[((IOTA - 86) & 127)]) + ((0.00144013 * fVec2[((IOTA - 85) & 127)]) + ((0.0021273399999999997 * fVec2[((IOTA - 84) & 127)]) + ((0.00061597300000000002 * fVec2[((IOTA - 83) & 127)]) + ((0.00011313 * fVec2[((IOTA - 81) & 127)]) + ((0.0017438199999999999 * fVec2[((IOTA - 80) & 127)]) + ((0.0024799100000000001 * fVec2[((IOTA - 79) & 127)]) + ((0.00256507 * fVec2[((IOTA - 78) & 127)]) + ((0.0011552999999999999 * fVec2[((IOTA - 75) & 127)]) + ((0.00098456699999999999 * fVec2[((IOTA - 74) & 127)]) + ((0.000597807 * fVec2[((IOTA - 73) & 127)]) + ((0.0018893200000000001 * fVec2[((IOTA - 72) & 127)]) + ((0.00092920600000000002 * fVec2[((IOTA - 23) & 127)]) + ((0.080136100000000002 * fVec2[((IOTA - 22) & 127)]) + ((0.041393800000000001 * fVec2[((IOTA - 21) & 127)]) + ((0.042661300000000006 * fVec2[((IOTA - 20) & 127)]) + ((0.0088175100000000006 * fVec2[((IOTA - 19) & 127)]) + ((0.053196100000000003 * fVec2[((IOTA - 18) & 127)]) + ((0.097787600000000002 * fVec2[((IOTA - 17) & 127)]) + ((0.040092800000000005 * fVec2[((IOTA - 16) & 127)]) + ((0.077296500000000004 * fVec2[((IOTA - 15) & 127)]) + ((0.064767000000000005 * fVec2[((IOTA - 14) & 127)]) + ((0.082935599999999998 * fVec2[((IOTA - 13) & 127)]) + ((0.078489900000000001 * fVec2[((IOTA - 12) & 127)]) + ((0.00067357800000000009 * fVec2[((IOTA - 11) & 127)]) + ((0.00149621 * fVec2[((IOTA - 10) & 127)]) + ((0.00072128000000000003 * fVec2[((IOTA - 9) & 127)]) + ((0.00101019 * fVec2[((IOTA - 8) & 127)]) + ((0.000453602 * fVec2[((IOTA - 7) & 127)]) + ((0.00042969900000000002 * fVec2[((IOTA - 6) & 127)]) + ((0.0010723199999999999 * fVec2[((IOTA - 5) & 127)]) + ((0.00084950300000000004 * fVec2[((IOTA - 4) & 127)]) + ((1.47262e-06 * fVec3[((IOTA - 122) & 127)]) + ((0.00085153200000000001 * fVec2[((IOTA - 3) & 127)]) + ((0.00015027000000000001 * fVec2[((IOTA - 1) & 127)]) + ((0.00048385000000000002 * fVec3[((IOTA - 98) & 127)]) + ((0.00047365100000000001 * fVec3[((IOTA - 97) & 127)]) + ((9.940880000000001e-05 * fVec3[((IOTA - 94) & 127)]) + ((0.0023706000000000001 * fVec3[((IOTA - 93) & 127)]) + ((0.00196204 * fVec3[((IOTA - 92) & 127)]) + ((1.7742000000000001e-05 * fVec3[((IOTA - 91) & 127)]) + ((0.000611186 * fVec3[((IOTA - 90) & 127)]) + ((0.00087519700000000008 * fVec3[((IOTA - 89) & 127)]) + ((0.000687957 * fVec3[((IOTA - 82) & 127)]) + ((0.00036222200000000004 * fVec3[((IOTA - 69) & 127)]) + ((0.00063317100000000008 * fVec3[((IOTA - 57) & 127)]) + ((0.00092078700000000006 * fVec3[((IOTA - 44) & 127)]) + ((0.0029395300000000001 * fVec3[((IOTA - 32) & 127)]) + (((0.00016075400000000001 * fVec3[((IOTA - 2) & 127)]) + (0.021295600000000001 * fVec3[((IOTA - 24) & 127)])) + (2.4709800000000002e-05 * fTemp2)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.0426200000000002e-05 * fTemp1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.000216524 * fVec0[((IOTA - 11) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fHbargraph1 = FAUSTFLOAT(fRec7[0]); output1[i] = FAUSTFLOAT(fTemp5); @@ -908,7 +924,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1140,7 +1155,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1203,7 +1218,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1232,11 +1247,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecBinaural2.cpp b/source/HOAUGens/HOADecBinaural2.cpp new file mode 100644 index 0000000000..68bc5f0b40 --- /dev/null +++ b/source/HOAUGens/HOADecBinaural2.cpp @@ -0,0 +1,1390 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL)" +name: "HOADecBinaural2" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + int IOTA; + double fVec0[128]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fVec1[128]; + double fRec5[2]; + FAUSTFLOAT fVbargraph2; + double fVec2[128]; + double fRec6[2]; + FAUSTFLOAT fVbargraph3; + double fVec3[128]; + double fRec7[2]; + FAUSTFLOAT fVbargraph4; + double fVec4[128]; + double fRec8[2]; + FAUSTFLOAT fVbargraph5; + double fVec5[128]; + double fRec9[2]; + FAUSTFLOAT fVbargraph6; + double fVec6[128]; + double fRec10[2]; + FAUSTFLOAT fVbargraph7; + double fVec7[128]; + double fRec11[2]; + FAUSTFLOAT fVbargraph8; + double fVec8[128]; + double fRec0[2]; + FAUSTFLOAT fHbargraph0; + double fRec12[2]; + FAUSTFLOAT fHbargraph1; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL)"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOADecBinaural2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + IOTA = 0; + for (int l3 = 0; (l3 < 128); l3 = (l3 + 1)) { + fVec0[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 128); l5 = (l5 + 1)) { + fVec1[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec5[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 128); l7 = (l7 + 1)) { + fVec2[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec6[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 128); l9 = (l9 + 1)) { + fVec3[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec7[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 128); l11 = (l11 + 1)) { + fVec4[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec8[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 128); l13 = (l13 + 1)) { + fVec5[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec9[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 128); l15 = (l15 + 1)) { + fVec6[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec10[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 128); l17 = (l17 + 1)) { + fVec7[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec11[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 128); l19 = (l19 + 1)) { + fVec8[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec0[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec12[l21] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecBinaural2"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38f5640", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38d5570", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38acb00", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3885f50", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x385caa0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38292f0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3804d10", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37d6fe0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37b3a80", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 10"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 10"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->closeBox(); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("Left"); + ui_interface->declare(&fHbargraph0, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x3acf3c0", &fHbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Right"); + ui_interface->declare(&fHbargraph1, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x3c613a0", &fHbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec3[0] = (fSlow1 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input8[i])); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + fVec0[(IOTA & 127)] = fTemp0; + double fTemp1 = (fRec3[0] * double(input7[i])); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec4[0]); + fVec1[(IOTA & 127)] = fTemp1; + double fTemp2 = (fRec3[0] * double(input6[i])); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec5[0]); + fVec2[(IOTA & 127)] = fTemp2; + double fTemp3 = (fRec3[0] * double(input5[i])); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec6[0]); + fVec3[(IOTA & 127)] = fTemp3; + double fTemp4 = (fRec3[0] * double(input4[i])); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec7[0]); + fVec4[(IOTA & 127)] = fTemp4; + double fTemp5 = (fRec3[0] * double(input3[i])); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec8[0]); + fVec5[(IOTA & 127)] = fTemp5; + double fTemp6 = (fRec3[0] * double(input2[i])); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec9[0]); + fVec6[(IOTA & 127)] = fTemp6; + double fTemp7 = (fRec3[0] * double(input1[i])); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec10[0]); + fVec7[(IOTA & 127)] = fTemp7; + double fTemp8 = (fRec3[0] * double(input0[i])); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph8 = FAUSTFLOAT(fRec11[0]); + fVec8[(IOTA & 127)] = fTemp8; + double fTemp9 = (fRec1[0] * (((1.06705e-06 * fVec0[((IOTA - 126) & 127)]) + ((3.8319600000000005e-05 * fVec0[((IOTA - 122) & 127)]) + ((5.611290000000001e-05 * fVec0[((IOTA - 121) & 127)]) + ((4.3469500000000001e-05 * fVec0[((IOTA - 120) & 127)]) + ((0.00012807300000000001 * fVec0[((IOTA - 4) & 127)]) + ((0.000378556 * fVec0[((IOTA - 2) & 127)]) + ((4.8748200000000002e-05 * fVec0[((IOTA - 117) & 127)]) + ((0.000144938 * fVec0[((IOTA - 110) & 127)]) + ((7.2644700000000013e-05 * fVec0[((IOTA - 104) & 127)]) + ((1.0278999999999999e-06 * fVec0[((IOTA - 103) & 127)]) + ((0.0011606799999999999 * fVec0[((IOTA - 96) & 127)]) + ((0.0031629900000000001 * fVec0[((IOTA - 95) & 127)]) + ((0.00078389600000000007 * fVec0[((IOTA - 94) & 127)]) + ((3.61728e-05 * fVec0[((IOTA - 91) & 127)]) + ((0.0022532999999999997 * fVec0[((IOTA - 86) & 127)]) + ((0.00078204200000000005 * fVec0[((IOTA - 79) & 127)]) + ((0.00053547700000000002 * fVec0[((IOTA - 77) & 127)]) + ((0.00089492 * fVec0[((IOTA - 76) & 127)]) + ((0.00098582100000000001 * fVec0[((IOTA - 75) & 127)]) + ((0.0010638000000000002 * fVec0[((IOTA - 74) & 127)]) + ((0.0020713300000000001 * fVec0[((IOTA - 72) & 127)]) + ((0.00287405 * fVec0[((IOTA - 71) & 127)]) + ((0.0018535400000000001 * fVec0[((IOTA - 70) & 127)]) + ((0.0024114399999999999 * fVec0[((IOTA - 69) & 127)]) + ((0.0054627 * fVec0[((IOTA - 68) & 127)]) + ((0.0053478500000000003 * fVec0[((IOTA - 67) & 127)]) + ((0.0036506200000000003 * fVec0[((IOTA - 66) & 127)]) + ((0.0039108500000000004 * fVec0[((IOTA - 65) & 127)]) + ((0.00124406 * fVec0[((IOTA - 64) & 127)]) + ((0.0026607500000000004 * fVec0[((IOTA - 10) & 127)]) + ((0.00066612700000000008 * fVec0[((IOTA - 53) & 127)]) + ((0.00021471700000000001 * fVec0[((IOTA - 42) & 127)]) + ((0.0083305600000000007 * fVec0[((IOTA - 38) & 127)]) + ((0.0016041499999999999 * fVec0[((IOTA - 34) & 127)]) + ((0.018119700000000002 * fVec0[((IOTA - 33) & 127)]) + ((0.036438700000000004 * fVec0[((IOTA - 30) & 127)]) + ((0.027385400000000001 * fVec0[((IOTA - 29) & 127)]) + ((0.0048108300000000003 * fVec0[((IOTA - 28) & 127)]) + ((0.040978300000000002 * fVec0[((IOTA - 27) & 127)]) + ((0.049985600000000005 * fVec0[((IOTA - 26) & 127)]) + ((0.038770699999999998 * fVec0[((IOTA - 24) & 127)]) + ((0.10758200000000001 * fVec0[((IOTA - 23) & 127)]) + ((0.021392099999999997 * fVec0[((IOTA - 22) & 127)]) + ((0.041771900000000008 * fVec0[((IOTA - 20) & 127)]) + ((0.055177400000000001 * fVec0[((IOTA - 19) & 127)]) + ((0.0108086 * fVec0[((IOTA - 18) & 127)]) + ((4.9495899999999995e-07 * fVec1[((IOTA - 126) & 127)]) + ((2.773e-06 * fVec1[((IOTA - 125) & 127)]) + ((5.3135e-06 * fVec1[((IOTA - 121) & 127)]) + ((0.0013556799999999999 * fVec0[((IOTA - 6) & 127)]) + ((2.8457499999999998e-06 * fVec1[((IOTA - 117) & 127)]) + ((2.4558300000000005e-05 * fVec1[((IOTA - 116) & 127)]) + ((5.2591200000000006e-05 * fVec1[((IOTA - 112) & 127)]) + ((0.00024796200000000001 * fVec1[((IOTA - 111) & 127)]) + ((0.00014221200000000001 * fVec1[((IOTA - 110) & 127)]) + ((0.00010309 * fVec1[((IOTA - 108) & 127)]) + ((0.00018337600000000001 * fVec1[((IOTA - 107) & 127)]) + ((0.00035608600000000003 * fVec1[((IOTA - 106) & 127)]) + ((0.00034403800000000002 * fVec1[((IOTA - 105) & 127)]) + ((0.00025383300000000002 * fVec1[((IOTA - 104) & 127)]) + ((0.00028535700000000003 * fVec1[((IOTA - 103) & 127)]) + ((0.00070562000000000001 * fVec1[((IOTA - 102) & 127)]) + ((0.0005151 * fVec1[((IOTA - 101) & 127)]) + ((0.00066903899999999996 * fVec0[((IOTA - 8) & 127)]) + ((0.00032077100000000002 * fVec1[((IOTA - 100) & 127)]) + ((9.0654800000000018e-05 * fVec1[((IOTA - 99) & 127)]) + ((0.00071143700000000009 * fVec1[((IOTA - 98) & 127)]) + ((0.0014366699999999999 * fVec1[((IOTA - 97) & 127)]) + ((0.00124614 * fVec1[((IOTA - 94) & 127)]) + ((0.0022713 * fVec1[((IOTA - 93) & 127)]) + ((0.00127749 * fVec1[((IOTA - 86) & 127)]) + ((0.00070097300000000003 * fVec1[((IOTA - 85) & 127)]) + ((6.2936500000000003e-05 * fVec1[((IOTA - 77) & 127)]) + ((2.0687900000000002e-05 * fVec1[((IOTA - 76) & 127)]) + ((0.00074920100000000001 * fVec1[((IOTA - 72) & 127)]) + ((0.00108661 * fVec1[((IOTA - 71) & 127)]) + ((0.00066226100000000003 * fVec1[((IOTA - 70) & 127)]) + ((0.00221192 * fVec1[((IOTA - 68) & 127)]) + ((0.0036181899999999999 * fVec1[((IOTA - 67) & 127)]) + ((3.8066800000000006e-05 * fVec1[((IOTA - 66) & 127)]) + ((2.7286800000000004e-05 * fVec1[((IOTA - 64) & 127)]) + ((0.0014662800000000001 * fVec1[((IOTA - 63) & 127)]) + ((0.0025716599999999999 * fVec1[((IOTA - 62) & 127)]) + ((0.00040080500000000001 * fVec1[((IOTA - 61) & 127)]) + ((0.0022166500000000001 * fVec1[((IOTA - 59) & 127)]) + ((0.0027539400000000003 * fVec1[((IOTA - 58) & 127)]) + ((0.000547636 * fVec1[((IOTA - 57) & 127)]) + ((0.0034324300000000002 * fVec1[((IOTA - 56) & 127)]) + ((0.0028814800000000001 * fVec1[((IOTA - 55) & 127)]) + ((0.00020467599999999999 * fVec1[((IOTA - 54) & 127)]) + ((0.0030387000000000001 * fVec1[((IOTA - 36) & 127)]) + ((0.021556799999999997 * fVec1[((IOTA - 35) & 127)]) + ((0.023527200000000002 * fVec1[((IOTA - 32) & 127)]) + ((0.0021948500000000004 * fVec1[((IOTA - 31) & 127)]) + ((0.00051807200000000006 * fVec1[((IOTA - 29) & 127)]) + ((0.024944000000000001 * fVec1[((IOTA - 26) & 127)]) + ((0.0035849099999999997 * fVec1[((IOTA - 25) & 127)]) + ((0.011300600000000001 * fVec1[((IOTA - 19) & 127)]) + ((0.0094331200000000014 * fVec1[((IOTA - 18) & 127)]) + ((0.0071840999999999997 * fVec1[((IOTA - 15) & 127)]) + ((0.00027813700000000002 * fVec1[((IOTA - 12) & 127)]) + ((0.00027818999999999999 * fVec1[((IOTA - 11) & 127)]) + ((0.00033955200000000002 * fVec1[((IOTA - 10) & 127)]) + ((0.00022609 * fVec1[((IOTA - 9) & 127)]) + ((0.00016021500000000001 * fVec1[((IOTA - 7) & 127)]) + ((0.000240886 * fVec1[((IOTA - 6) & 127)]) + ((2.4972599999999999e-05 * fVec1[((IOTA - 3) & 127)]) + ((5.2352700000000004e-05 * fVec1[((IOTA - 2) & 127)]) + ((4.2462999999999995e-06 * fTemp1) + ((0.0021549399999999997 * fVec1[((IOTA - 44) & 127)]) + ((0.0025276200000000004 * fVec1[((IOTA - 51) & 127)]) + ((0.0045955500000000003 * fVec1[((IOTA - 50) & 127)]) + ((0.0013761300000000001 * fVec1[((IOTA - 41) & 127)]) + ((0.002183 * fVec1[((IOTA - 38) & 127)]) + ((8.9630500000000016e-08 * fVec2[((IOTA - 126) & 127)]) + ((4.86084e-05 * fVec2[((IOTA - 119) & 127)]) + ((3.0215200000000005e-05 * fVec2[((IOTA - 118) & 127)]) + ((0.00010084700000000001 * fVec2[((IOTA - 110) & 127)]) + ((0.00034166200000000001 * fVec2[((IOTA - 109) & 127)]) + ((0.000204718 * fVec2[((IOTA - 108) & 127)]) + ((0.00033797299999999998 * fVec2[((IOTA - 107) & 127)]) + ((0.00045785700000000004 * fVec2[((IOTA - 106) & 127)]) + ((0.00013590400000000001 * fVec2[((IOTA - 105) & 127)]) + ((6.0929900000000008e-05 * fVec2[((IOTA - 104) & 127)]) + ((0.000208667 * fVec2[((IOTA - 102) & 127)]) + ((0.00030785900000000001 * fVec2[((IOTA - 101) & 127)]) + ((0.00026147399999999998 * fVec2[((IOTA - 100) & 127)]) + ((0.00048677700000000003 * fVec2[((IOTA - 99) & 127)]) + ((0.0012107800000000001 * fVec2[((IOTA - 98) & 127)]) + ((0.00076490500000000008 * fVec2[((IOTA - 97) & 127)]) + ((0.00058266999999999998 * fVec2[((IOTA - 94) & 127)]) + ((0.00082486899999999999 * fVec2[((IOTA - 93) & 127)]) + ((0.0011506799999999998 * fVec2[((IOTA - 92) & 127)]) + ((3.5632800000000002e-05 * fVec2[((IOTA - 91) & 127)]) + ((3.64663e-05 * fVec2[((IOTA - 90) & 127)]) + ((0.00056137899999999998 * fVec2[((IOTA - 88) & 127)]) + ((0.00015598000000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.00076870700000000009 * fVec2[((IOTA - 84) & 127)]) + ((0.0014322200000000001 * fVec2[((IOTA - 83) & 127)]) + ((0.00046067700000000005 * fVec2[((IOTA - 82) & 127)]) + ((0.00064690400000000001 * fVec2[((IOTA - 79) & 127)]) + ((0.00271718 * fVec2[((IOTA - 75) & 127)]) + ((6.2586200000000001e-05 * fVec2[((IOTA - 72) & 127)]) + ((0.00117567 * fVec2[((IOTA - 71) & 127)]) + ((0.0012521400000000001 * fVec2[((IOTA - 70) & 127)]) + ((0.00055114699999999999 * fVec2[((IOTA - 66) & 127)]) + ((0.00110439 * fVec2[((IOTA - 65) & 127)]) + ((0.0016155 * fVec2[((IOTA - 64) & 127)]) + ((0.0021511500000000001 * fVec2[((IOTA - 63) & 127)]) + ((0.0019438999999999999 * fVec2[((IOTA - 60) & 127)]) + ((0.00122438 * fVec2[((IOTA - 52) & 127)]) + ((0.0010133200000000001 * fVec2[((IOTA - 6) & 127)]) + ((0.00025746299999999998 * fVec2[((IOTA - 2) & 127)]) + ((0.052758300000000001 * fVec2[((IOTA - 25) & 127)]) + ((0.0124978 * fVec2[((IOTA - 24) & 127)]) + ((0.035996800000000002 * fVec2[((IOTA - 22) & 127)]) + ((0.013752100000000001 * fVec2[((IOTA - 21) & 127)]) + ((0.0018844000000000001 * fVec2[((IOTA - 20) & 127)]) + ((0.0448946 * fVec2[((IOTA - 19) & 127)]) + ((0.00033159299999999998 * fVec2[((IOTA - 18) & 127)]) + ((0.0070393900000000004 * fVec2[((IOTA - 39) & 127)]) + ((0.0048936500000000003 * fVec2[((IOTA - 37) & 127)]) + ((0.0095701499999999995 * fVec2[((IOTA - 36) & 127)]) + ((0.015800600000000001 * fVec2[((IOTA - 33) & 127)]) + ((0.011886499999999999 * fVec2[((IOTA - 32) & 127)]) + ((0.0058739299999999994 * fVec2[((IOTA - 30) & 127)]) + ((0.024750999999999999 * fVec2[((IOTA - 29) & 127)]) + ((0.0086730599999999998 * fVec2[((IOTA - 28) & 127)]) + ((0.023463500000000002 * fVec2[((IOTA - 26) & 127)]) + ((3.43292e-08 * fVec3[((IOTA - 126) & 127)]) + ((3.3588899999999999e-06 * fVec3[((IOTA - 125) & 127)]) + ((3.9804799999999997e-06 * fVec3[((IOTA - 124) & 127)]) + ((0.00255288 * fVec2[((IOTA - 10) & 127)]) + ((2.0105900000000003e-05 * fVec3[((IOTA - 123) & 127)]) + ((7.7608600000000008e-05 * fVec3[((IOTA - 119) & 127)]) + ((5.0789799999999999e-05 * fVec3[((IOTA - 116) & 127)]) + ((0.00020361699999999999 * fVec3[((IOTA - 115) & 127)]) + ((0.00030080800000000001 * fVec3[((IOTA - 114) & 127)]) + ((3.2623300000000003e-05 * fVec3[((IOTA - 113) & 127)]) + ((0.00026027500000000002 * fVec3[((IOTA - 110) & 127)]) + ((0.00020187200000000002 * fVec3[((IOTA - 109) & 127)]) + ((0.00040571999999999998 * fVec3[((IOTA - 108) & 127)]) + ((0.00053009599999999997 * fVec3[((IOTA - 107) & 127)]) + ((0.00050674400000000005 * fVec3[((IOTA - 106) & 127)]) + ((0.00049718700000000006 * fVec3[((IOTA - 105) & 127)]) + ((0.0011330000000000001 * fVec3[((IOTA - 104) & 127)]) + ((0.0016271899999999999 * fVec3[((IOTA - 103) & 127)]) + ((0.00069229100000000004 * fVec3[((IOTA - 102) & 127)]) + ((0.00046662400000000006 * fVec3[((IOTA - 101) & 127)]) + ((0.00069381500000000008 * fVec3[((IOTA - 100) & 127)]) + ((0.00038071900000000001 * fVec3[((IOTA - 99) & 127)]) + ((0.00084254300000000007 * fVec3[((IOTA - 98) & 127)]) + ((0.00094661300000000001 * fVec2[((IOTA - 8) & 127)]) + ((0.00156339 * fVec3[((IOTA - 97) & 127)]) + ((0.0034697200000000004 * fVec3[((IOTA - 96) & 127)]) + ((0.0030116200000000004 * fVec3[((IOTA - 95) & 127)]) + ((0.00075465500000000002 * fVec3[((IOTA - 94) & 127)]) + ((0.00068181600000000002 * fVec3[((IOTA - 93) & 127)]) + ((0.00071934100000000008 * fVec3[((IOTA - 92) & 127)]) + ((0.00040184499999999996 * fVec3[((IOTA - 91) & 127)]) + ((0.00055143000000000011 * fVec3[((IOTA - 90) & 127)]) + ((0.0016723300000000001 * fVec3[((IOTA - 89) & 127)]) + ((0.0017063 * fVec3[((IOTA - 88) & 127)]) + ((0.0013395900000000001 * fVec3[((IOTA - 87) & 127)]) + ((0.0026214800000000003 * fVec3[((IOTA - 86) & 127)]) + ((0.0034494400000000002 * fVec3[((IOTA - 85) & 127)]) + ((0.0025590399999999998 * fVec3[((IOTA - 84) & 127)]) + ((0.0014532900000000001 * fVec3[((IOTA - 83) & 127)]) + ((0.00127111 * fVec3[((IOTA - 78) & 127)]) + ((0.0011545000000000001 * fVec3[((IOTA - 77) & 127)]) + ((0.00061171300000000006 * fVec3[((IOTA - 76) & 127)]) + ((0.00020694100000000001 * fVec3[((IOTA - 75) & 127)]) + ((0.00064708400000000003 * fVec3[((IOTA - 74) & 127)]) + ((0.0010632999999999999 * fVec3[((IOTA - 73) & 127)]) + ((0.000609699 * fVec3[((IOTA - 72) & 127)]) + ((0.00058977500000000006 * fVec3[((IOTA - 71) & 127)]) + ((0.0005591420000000001 * fVec3[((IOTA - 67) & 127)]) + ((8.8419900000000004e-05 * fVec3[((IOTA - 65) & 127)]) + ((0.00150508 * fVec3[((IOTA - 64) & 127)]) + ((0.00215198 * fVec3[((IOTA - 54) & 127)]) + ((0.000219724 * fVec3[((IOTA - 52) & 127)]) + ((0.0017431900000000001 * fVec3[((IOTA - 51) & 127)]) + ((0.000292148 * fVec3[((IOTA - 49) & 127)]) + ((0.00356967 * fVec3[((IOTA - 48) & 127)]) + ((0.00055458199999999997 * fVec3[((IOTA - 47) & 127)]) + ((0.0018462400000000001 * fVec3[((IOTA - 45) & 127)]) + ((0.0038023500000000003 * fVec3[((IOTA - 42) & 127)]) + ((0.0029068700000000002 * fVec3[((IOTA - 40) & 127)]) + ((0.0047945900000000005 * fVec3[((IOTA - 39) & 127)]) + ((0.0038672100000000003 * fVec3[((IOTA - 38) & 127)]) + ((4.1971900000000004e-05 * fVec3[((IOTA - 36) & 127)]) + ((0.0060181399999999999 * fVec3[((IOTA - 35) & 127)]) + ((0.0049045500000000006 * fVec3[((IOTA - 33) & 127)]) + ((0.0091428700000000009 * fVec3[((IOTA - 32) & 127)]) + ((0.0099856200000000006 * fVec3[((IOTA - 29) & 127)]) + ((0.010922899999999999 * fVec3[((IOTA - 28) & 127)]) + ((0.0013328999999999999 * fVec3[((IOTA - 24) & 127)]) + ((0.0016006100000000001 * fVec3[((IOTA - 23) & 127)]) + ((0.0099153599999999998 * fVec3[((IOTA - 22) & 127)]) + ((0.013603000000000001 * fVec3[((IOTA - 21) & 127)]) + ((0.016723499999999999 * fVec3[((IOTA - 20) & 127)]) + ((0.045127499999999994 * fVec3[((IOTA - 17) & 127)]) + ((0.0059659600000000002 * fVec3[((IOTA - 14) & 127)]) + ((0.0027371000000000001 * fVec3[((IOTA - 13) & 127)]) + ((4.6184399999999998e-05 * fVec3[((IOTA - 10) & 127)]) + ((0.0025209700000000004 * fVec3[((IOTA - 8) & 127)]) + ((0.00036855699999999999 * fVec3[((IOTA - 6) & 127)]) + ((0.00070276500000000005 * fVec3[((IOTA - 5) & 127)]) + ((0.00090358699999999997 * fVec3[((IOTA - 4) & 127)]) + ((0.000231406 * fVec3[((IOTA - 2) & 127)]) + ((4.4178200000000003e-05 * fVec3[((IOTA - 1) & 127)]) + ((1.57811e-05 * fTemp3) + ((0.0014054500000000001 * fVec3[((IOTA - 60) & 127)]) + ((2.5137800000000002e-07 * fVec4[((IOTA - 126) & 127)]) + ((6.1820100000000001e-06 * fVec4[((IOTA - 125) & 127)]) + ((3.82797e-06 * fVec4[((IOTA - 124) & 127)]) + ((2.1185900000000001e-06 * fVec4[((IOTA - 123) & 127)]) + ((2.7248300000000001e-05 * fVec4[((IOTA - 121) & 127)]) + ((3.8722400000000007e-05 * fVec4[((IOTA - 120) & 127)]) + ((8.2140799999999984e-06 * fVec4[((IOTA - 119) & 127)]) + ((3.8470500000000004e-05 * fVec4[((IOTA - 117) & 127)]) + ((9.096330000000001e-05 * fVec4[((IOTA - 116) & 127)]) + ((8.7317000000000004e-05 * fVec4[((IOTA - 114) & 127)]) + ((0.000227166 * fVec4[((IOTA - 113) & 127)]) + ((8.3273200000000014e-05 * fVec4[((IOTA - 112) & 127)]) + ((8.2866000000000002e-05 * fVec4[((IOTA - 111) & 127)]) + ((0.00014514899999999999 * fVec4[((IOTA - 110) & 127)]) + ((0.00010655300000000001 * fVec4[((IOTA - 108) & 127)]) + ((0.00020428199999999999 * fVec4[((IOTA - 107) & 127)]) + ((5.2586900000000003e-05 * fVec4[((IOTA - 106) & 127)]) + ((0.00036701000000000003 * fVec4[((IOTA - 105) & 127)]) + ((0.00050770799999999994 * fVec4[((IOTA - 104) & 127)]) + ((0.00025426099999999998 * fVec4[((IOTA - 101) & 127)]) + ((0.00018379600000000001 * fVec4[((IOTA - 98) & 127)]) + ((0.00035138200000000002 * fVec4[((IOTA - 97) & 127)]) + ((7.6149300000000013e-05 * fVec4[((IOTA - 95) & 127)]) + ((0.0015575400000000001 * fVec4[((IOTA - 94) & 127)]) + ((0.00063264199999999999 * fVec4[((IOTA - 93) & 127)]) + ((0.00014839199999999998 * fVec4[((IOTA - 92) & 127)]) + ((0.00086251900000000007 * fVec4[((IOTA - 87) & 127)]) + ((0.0019024199999999999 * fVec4[((IOTA - 86) & 127)]) + ((0.00129144 * fVec4[((IOTA - 83) & 127)]) + ((0.00047882000000000003 * fVec4[((IOTA - 78) & 127)]) + ((0.0013118799999999999 * fVec4[((IOTA - 75) & 127)]) + ((0.0011614100000000001 * fVec4[((IOTA - 74) & 127)]) + ((0.0014712700000000002 * fVec4[((IOTA - 68) & 127)]) + ((0.0026238199999999998 * fVec4[((IOTA - 67) & 127)]) + ((8.7116700000000006e-05 * fVec4[((IOTA - 66) & 127)]) + ((0.0020513699999999998 * fVec4[((IOTA - 62) & 127)]) + ((0.00160801 * fVec4[((IOTA - 61) & 127)]) + ((0.00147938 * fVec4[((IOTA - 59) & 127)]) + ((0.00013115699999999999 * fVec4[((IOTA - 58) & 127)]) + ((0.00050519600000000007 * fVec4[((IOTA - 57) & 127)]) + ((0.0016339300000000002 * fVec4[((IOTA - 56) & 127)]) + ((0.0011073599999999999 * fVec4[((IOTA - 52) & 127)]) + ((0.0016051100000000001 * fVec4[((IOTA - 50) & 127)]) + ((0.0079808199999999996 * fVec4[((IOTA - 49) & 127)]) + ((0.00196889 * fVec4[((IOTA - 48) & 127)]) + ((0.0044432300000000003 * fVec4[((IOTA - 45) & 127)]) + ((0.000208879 * fVec4[((IOTA - 44) & 127)]) + ((0.0013145500000000001 * fVec4[((IOTA - 42) & 127)]) + ((9.226730000000001e-05 * fVec4[((IOTA - 40) & 127)]) + ((0.0053560100000000005 * fVec4[((IOTA - 39) & 127)]) + ((0.0053043999999999999 * fVec4[((IOTA - 38) & 127)]) + ((0.00291413 * fVec4[((IOTA - 37) & 127)]) + ((0.010230900000000001 * fVec4[((IOTA - 36) & 127)]) + ((0.0073240200000000005 * fVec4[((IOTA - 35) & 127)]) + ((0.0073238899999999996 * fVec4[((IOTA - 31) & 127)]) + ((0.0105234 * fVec4[((IOTA - 30) & 127)]) + ((0.0024724199999999999 * fVec4[((IOTA - 8) & 127)]) + ((0.0012886100000000001 * fVec4[((IOTA - 6) & 127)]) + ((0.00084856599999999993 * fVec4[((IOTA - 4) & 127)]) + ((0.00020222799999999999 * fVec4[((IOTA - 2) & 127)]) + ((2.0016700000000001e-05 * fVec4[((IOTA - 1) & 127)]) + ((1.4622100000000002e-05 * fTemp4) + ((0.031673199999999999 * fVec4[((IOTA - 18) & 127)]) + ((0.0274497 * fVec4[((IOTA - 17) & 127)]) + ((0.0030908899999999998 * fVec4[((IOTA - 16) & 127)]) + ((0.0103427 * fVec4[((IOTA - 15) & 127)]) + ((0.0034125200000000005 * fVec4[((IOTA - 26) & 127)]) + ((0.0069197900000000003 * fVec4[((IOTA - 25) & 127)]) + ((2.4533100000000001e-06 * fVec5[((IOTA - 126) & 127)]) + ((1.70273e-06 * fVec5[((IOTA - 125) & 127)]) + ((0.0120915 * fVec4[((IOTA - 13) & 127)]) + ((8.0341699999999997e-06 * fVec5[((IOTA - 123) & 127)]) + ((0.0038904299999999998 * fVec4[((IOTA - 10) & 127)]) + ((3.8827600000000008e-05 * fVec5[((IOTA - 122) & 127)]) + ((0.000101833 * fVec5[((IOTA - 121) & 127)]) + ((3.9296600000000006e-05 * fVec5[((IOTA - 119) & 127)]) + ((3.85491e-05 * fVec5[((IOTA - 117) & 127)]) + ((0.00018456300000000003 * fVec5[((IOTA - 116) & 127)]) + ((0.000184012 * fVec5[((IOTA - 115) & 127)]) + ((0.0019589099999999999 * fVec5[((IOTA - 96) & 127)]) + ((0.0031713800000000001 * fVec5[((IOTA - 95) & 127)]) + ((0.00068253400000000005 * fVec5[((IOTA - 94) & 127)]) + ((0.00056285600000000003 * fVec5[((IOTA - 91) & 127)]) + ((0.0014036900000000002 * fVec5[((IOTA - 90) & 127)]) + ((0.00337025 * fVec5[((IOTA - 87) & 127)]) + ((0.0052786200000000004 * fVec5[((IOTA - 86) & 127)]) + ((0.0015441700000000001 * fVec5[((IOTA - 85) & 127)]) + ((0.00036768800000000002 * fVec5[((IOTA - 84) & 127)]) + ((0.00069545300000000007 * fVec5[((IOTA - 83) & 127)]) + ((0.000105639 * fVec5[((IOTA - 120) & 127)]) + ((0.0010311999999999999 * fVec5[((IOTA - 65) & 127)]) + ((0.00113331 * fVec5[((IOTA - 64) & 127)]) + ((0.0014698599999999999 * fVec5[((IOTA - 63) & 127)]) + ((0.00070883900000000006 * fVec5[((IOTA - 62) & 127)]) + ((0.0020663499999999998 * fVec5[((IOTA - 57) & 127)]) + ((0.00288332 * fVec5[((IOTA - 56) & 127)]) + ((0.0008817050000000001 * fVec5[((IOTA - 55) & 127)]) + ((0.0035919900000000002 * fVec5[((IOTA - 54) & 127)]) + ((0.0016634199999999999 * fVec5[((IOTA - 53) & 127)]) + ((0.0012247 * fVec5[((IOTA - 52) & 127)]) + ((0.00117636 * fVec5[((IOTA - 51) & 127)]) + ((0.00571347 * fVec5[((IOTA - 48) & 127)]) + ((0.0068109299999999998 * fVec5[((IOTA - 45) & 127)]) + ((0.00503769 * fVec5[((IOTA - 44) & 127)]) + ((0.0033690899999999999 * fVec5[((IOTA - 43) & 127)]) + ((0.0081425600000000001 * fVec5[((IOTA - 42) & 127)]) + ((0.0048383499999999999 * fVec5[((IOTA - 39) & 127)]) + ((1.73416e-05 * fVec5[((IOTA - 38) & 127)]) + ((0.0011593500000000002 * fVec5[((IOTA - 37) & 127)]) + ((0.00341282 * fVec5[((IOTA - 36) & 127)]) + ((0.0053672899999999994 * fVec5[((IOTA - 34) & 127)]) + ((0.0060068300000000003 * fVec5[((IOTA - 33) & 127)]) + ((0.036282299999999996 * fVec5[((IOTA - 30) & 127)]) + ((0.0096774400000000007 * fVec5[((IOTA - 29) & 127)]) + ((0.03066 * fVec5[((IOTA - 26) & 127)]) + ((0.0019489700000000002 * fVec5[((IOTA - 23) & 127)]) + ((9.4065400000000002e-05 * fVec5[((IOTA - 22) & 127)]) + ((0.000702438 * fVec5[((IOTA - 20) & 127)]) + ((0.0174746 * fVec5[((IOTA - 18) & 127)]) + ((0.021190899999999999 * fVec5[((IOTA - 17) & 127)]) + ((0.0025345699999999999 * fVec5[((IOTA - 16) & 127)]) + ((0.0025992000000000003 * fVec5[((IOTA - 15) & 127)]) + ((0.0061892400000000004 * fVec5[((IOTA - 13) & 127)]) + ((0.0020100199999999999 * fVec5[((IOTA - 10) & 127)]) + ((0.00148817 * fVec5[((IOTA - 8) & 127)]) + ((0.00053443399999999997 * fVec5[((IOTA - 6) & 127)]) + ((0.00069470999999999997 * fVec5[((IOTA - 4) & 127)]) + ((0.00013874000000000002 * fVec5[((IOTA - 2) & 127)]) + ((2.49699e-05 * fVec5[((IOTA - 1) & 127)]) + ((9.9362800000000004e-06 * fTemp5) + ((0.0053477200000000003 * fVec5[((IOTA - 49) & 127)]) + ((2.4082099999999999e-06 * fVec6[((IOTA - 126) & 127)]) + ((8.464169999999999e-06 * fVec6[((IOTA - 125) & 127)]) + ((8.8836499999999992e-06 * fVec6[((IOTA - 124) & 127)]) + ((8.7967399999999994e-06 * fVec6[((IOTA - 123) & 127)]) + ((2.4375700000000001e-05 * fVec6[((IOTA - 122) & 127)]) + ((8.0066800000000004e-05 * fVec6[((IOTA - 121) & 127)]) + ((9.9426100000000014e-05 * fVec6[((IOTA - 120) & 127)]) + ((9.0816700000000014e-05 * fVec6[((IOTA - 119) & 127)]) + ((5.80835e-05 * fVec6[((IOTA - 118) & 127)]) + ((7.7452699999999998e-05 * fVec6[((IOTA - 117) & 127)]) + ((9.5024799999999997e-07 * fVec6[((IOTA - 116) & 127)]) + ((5.1149400000000002e-05 * fVec6[((IOTA - 98) & 127)]) + ((0.00032476299999999999 * fVec6[((IOTA - 97) & 127)]) + ((0.0012872900000000002 * fVec6[((IOTA - 94) & 127)]) + ((0.0022912900000000001 * fVec6[((IOTA - 93) & 127)]) + ((0.00119739 * fVec6[((IOTA - 92) & 127)]) + ((0.0019518999999999999 * fVec6[((IOTA - 90) & 127)]) + ((0.0043689900000000005 * fVec6[((IOTA - 89) & 127)]) + ((0.00375801 * fVec6[((IOTA - 88) & 127)]) + ((0.0016994499999999999 * fVec6[((IOTA - 87) & 127)]) + ((0.0032713800000000004 * fVec6[((IOTA - 86) & 127)]) + ((0.0036832600000000003 * fVec6[((IOTA - 85) & 127)]) + ((0.00089328000000000009 * fVec6[((IOTA - 84) & 127)]) + ((0.00072158200000000002 * fVec6[((IOTA - 83) & 127)]) + ((0.00038337700000000001 * fVec6[((IOTA - 80) & 127)]) + ((0.0016079900000000001 * fVec6[((IOTA - 79) & 127)]) + ((0.0020680200000000003 * fVec6[((IOTA - 78) & 127)]) + ((0.00028545500000000005 * fVec6[((IOTA - 77) & 127)]) + ((0.00025900400000000002 * fVec6[((IOTA - 75) & 127)]) + ((3.3718100000000005e-05 * fVec6[((IOTA - 63) & 127)]) + ((0.0016691100000000001 * fVec6[((IOTA - 62) & 127)]) + ((0.00089519800000000015 * fVec6[((IOTA - 60) & 127)]) + ((0.00079125400000000002 * fVec6[((IOTA - 59) & 127)]) + ((0.00099548200000000001 * fVec6[((IOTA - 58) & 127)]) + ((0.0024358800000000001 * fVec6[((IOTA - 54) & 127)]) + ((0.0056765999999999995 * fVec6[((IOTA - 53) & 127)]) + ((0.0027909200000000001 * fVec6[((IOTA - 52) & 127)]) + ((0.00077908600000000012 * fVec6[((IOTA - 51) & 127)]) + ((0.0016214599999999999 * fVec6[((IOTA - 50) & 127)]) + ((0.0042173100000000002 * fVec6[((IOTA - 48) & 127)]) + ((0.0091871399999999999 * fVec6[((IOTA - 47) & 127)]) + ((0.0013077200000000001 * fVec6[((IOTA - 46) & 127)]) + ((0.0021427500000000001 * fVec6[((IOTA - 45) & 127)]) + ((0.0022329500000000005 * fVec6[((IOTA - 44) & 127)]) + ((0.0028589500000000003 * fVec6[((IOTA - 42) & 127)]) + ((0.0070971000000000003 * fVec6[((IOTA - 41) & 127)]) + ((0.0053105900000000004 * fVec6[((IOTA - 40) & 127)]) + ((0.0030150300000000001 * fVec6[((IOTA - 39) & 127)]) + ((0.00053429399999999994 * fVec6[((IOTA - 36) & 127)]) + ((0.0164669 * fVec6[((IOTA - 35) & 127)]) + ((0.0037660800000000002 * fVec6[((IOTA - 33) & 127)]) + ((0.0086483100000000011 * fVec6[((IOTA - 32) & 127)]) + ((0.021576300000000003 * fVec6[((IOTA - 29) & 127)]) + ((0.021685099999999999 * fVec6[((IOTA - 28) & 127)]) + ((0.0057969700000000002 * fVec6[((IOTA - 26) & 127)]) + ((0.0057622799999999998 * fVec6[((IOTA - 24) & 127)]) + ((0.0197594 * fVec6[((IOTA - 21) & 127)]) + ((0.0121098 * fVec6[((IOTA - 20) & 127)]) + ((0.032535399999999999 * fVec6[((IOTA - 17) & 127)]) + ((0.00050339700000000005 * fVec6[((IOTA - 14) & 127)]) + ((0.00086802899999999998 * fVec6[((IOTA - 13) & 127)]) + ((0.0016583500000000001 * fVec6[((IOTA - 8) & 127)]) + ((0.00031507000000000003 * fVec6[((IOTA - 5) & 127)]) + ((0.00049461800000000005 * fVec6[((IOTA - 4) & 127)]) + ((0.00015840400000000001 * fVec6[((IOTA - 2) & 127)]) + ((2.8519800000000004e-05 * fVec6[((IOTA - 1) & 127)]) + (((1.1796500000000001e-05 * fVec7[((IOTA - 114) & 127)]) + ((0.00041981599999999999 * fVec7[((IOTA - 107) & 127)]) + ((5.3605900000000008e-05 * fVec7[((IOTA - 105) & 127)]) + ((0.00046969700000000004 * fVec7[((IOTA - 104) & 127)]) + ((0.00047704000000000008 * fVec7[((IOTA - 103) & 127)]) + ((0.00043236800000000009 * fVec7[((IOTA - 102) & 127)]) + ((0.00070973900000000003 * fVec7[((IOTA - 101) & 127)]) + ((0.000705385 * fVec7[((IOTA - 100) & 127)]) + ((0.00045614100000000008 * fVec7[((IOTA - 99) & 127)]) + ((0.00092227100000000001 * fVec7[((IOTA - 98) & 127)]) + ((0.00081300600000000002 * fVec7[((IOTA - 97) & 127)]) + ((0.000623519 * fVec7[((IOTA - 96) & 127)]) + ((0.0013659500000000001 * fVec7[((IOTA - 95) & 127)]) + ((0.00214314 * fVec7[((IOTA - 94) & 127)]) + ((0.0016777999999999999 * fVec7[((IOTA - 93) & 127)]) + ((0.00108099 * fVec7[((IOTA - 92) & 127)]) + ((0.000264467 * fVec7[((IOTA - 89) & 127)]) + ((0.00045975200000000007 * fVec7[((IOTA - 88) & 127)]) + ((0.0013345100000000001 * fVec7[((IOTA - 87) & 127)]) + ((0.0013671599999999999 * fVec7[((IOTA - 86) & 127)]) + ((0.00088433700000000001 * fVec7[((IOTA - 85) & 127)]) + ((0.0010498400000000002 * fVec7[((IOTA - 84) & 127)]) + ((0.00300031 * fVec7[((IOTA - 83) & 127)]) + ((0.00033132700000000002 * fVec7[((IOTA - 82) & 127)]) + ((2.3648600000000003e-05 * fVec7[((IOTA - 80) & 127)]) + ((0.00058793100000000009 * fVec7[((IOTA - 79) & 127)]) + ((0.0027816299999999998 * fVec7[((IOTA - 78) & 127)]) + ((0.0017765299999999999 * fVec7[((IOTA - 77) & 127)]) + ((6.7984800000000007e-05 * fVec7[((IOTA - 90) & 127)]) + ((0.00046795000000000002 * fVec7[((IOTA - 73) & 127)]) + ((0.0016152100000000002 * fVec7[((IOTA - 72) & 127)]) + ((0.00010376700000000001 * fVec7[((IOTA - 71) & 127)]) + ((0.058508199999999996 * fVec7[((IOTA - 22) & 127)]) + ((0.050635700000000006 * fVec7[((IOTA - 21) & 127)]) + ((0.041341200000000002 * fVec7[((IOTA - 20) & 127)]) + ((0.0214629 * fVec7[((IOTA - 19) & 127)]) + ((0.029345699999999999 * fVec7[((IOTA - 18) & 127)]) + ((0.088954799999999987 * fVec7[((IOTA - 17) & 127)]) + ((0.063658400000000004 * fVec7[((IOTA - 16) & 127)]) + ((0.078143400000000002 * fVec7[((IOTA - 15) & 127)]) + ((0.060886200000000001 * fVec7[((IOTA - 14) & 127)]) + ((0.077131900000000003 * fVec7[((IOTA - 13) & 127)]) + ((0.090551499999999993 * fVec7[((IOTA - 12) & 127)]) + ((0.0054581200000000003 * fVec7[((IOTA - 11) & 127)]) + ((0.0018110400000000001 * fVec7[((IOTA - 9) & 127)]) + ((0.00194177 * fVec7[((IOTA - 7) & 127)]) + ((0.00114689 * fVec7[((IOTA - 5) & 127)]) + ((0.00058690300000000006 * fVec7[((IOTA - 4) & 127)]) + ((0.0012299100000000001 * fVec7[((IOTA - 3) & 127)]) + ((0.00015469 * fVec7[((IOTA - 1) & 127)]) + ((((((((((((((((((((((((((((((((((((((0.0051757600000000006 * fVec8[((IOTA - 86) & 127)]) + ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((2.5118200000000003e-05 * fTemp8) + (0.00012370799999999999 * fVec8[((IOTA - 1) & 127)])) + (0.00096838400000000008 * fVec8[((IOTA - 3) & 127)])) + (0.00059949000000000005 * fVec8[((IOTA - 4) & 127)])) + (0.00076772799999999997 * fVec8[((IOTA - 5) & 127)])) + (0.00014117900000000001 * fVec8[((IOTA - 6) & 127)])) + (0.0018634200000000002 * fVec8[((IOTA - 7) & 127)])) + (0.00024957099999999997 * fVec8[((IOTA - 8) & 127)])) + (0.0011589199999999999 * fVec8[((IOTA - 9) & 127)])) + (0.00050879500000000004 * fVec8[((IOTA - 10) & 127)])) + (0.0036302599999999997 * fVec8[((IOTA - 11) & 127)])) + (0.056510400000000002 * fVec8[((IOTA - 12) & 127)])) + (0.049342300000000006 * fVec8[((IOTA - 13) & 127)])) + (0.0449074 * fVec8[((IOTA - 14) & 127)])) + (0.064749100000000004 * fVec8[((IOTA - 15) & 127)])) + (0.059606500000000007 * fVec8[((IOTA - 16) & 127)])) + (0.073495100000000008 * fVec8[((IOTA - 17) & 127)])) + (0.034514800000000005 * fVec8[((IOTA - 18) & 127)])) + (0.055772500000000003 * fVec8[((IOTA - 19) & 127)])) + (0.06596840000000001 * fVec8[((IOTA - 20) & 127)])) + (0.057809200000000005 * fVec8[((IOTA - 21) & 127)])) + (0.096895100000000012 * fVec8[((IOTA - 22) & 127)])) + (0.021260899999999999 * fVec8[((IOTA - 23) & 127)])) + (0.031746299999999998 * fVec8[((IOTA - 25) & 127)])) + (0.0528391 * fVec8[((IOTA - 26) & 127)])) + (0.030624600000000002 * fVec8[((IOTA - 27) & 127)])) + (0.0087064099999999995 * fVec8[((IOTA - 29) & 127)])) + (0.0266261 * fVec8[((IOTA - 30) & 127)])) + (0.011366300000000001 * fVec8[((IOTA - 31) & 127)])) + (0.0057082499999999998 * fVec8[((IOTA - 32) & 127)])) + (0.023001999999999998 * fVec8[((IOTA - 33) & 127)])) + (0.020023599999999999 * fVec8[((IOTA - 34) & 127)])) + (0.0044680700000000002 * fVec8[((IOTA - 35) & 127)])) + (0.0141227 * fVec8[((IOTA - 36) & 127)])) + (0.0079812000000000008 * fVec8[((IOTA - 37) & 127)])) + (0.0069301900000000001 * fVec8[((IOTA - 38) & 127)])) + (0.011589100000000001 * fVec8[((IOTA - 39) & 127)])) + (0.0064973000000000001 * fVec8[((IOTA - 40) & 127)])) + (0.0056945699999999995 * fVec8[((IOTA - 41) & 127)])) + (0.0074329900000000004 * fVec8[((IOTA - 42) & 127)])) + (0.0028857800000000001 * fVec8[((IOTA - 43) & 127)])) + (0.0079248200000000008 * fVec8[((IOTA - 44) & 127)])) + (0.015005800000000001 * fVec8[((IOTA - 45) & 127)])) + (0.00250454 * fVec8[((IOTA - 46) & 127)])) + (0.00306785 * fVec8[((IOTA - 48) & 127)])) + (0.00175234 * fVec8[((IOTA - 49) & 127)])) + (0.00086377000000000014 * fVec8[((IOTA - 50) & 127)])) + (0.0036652500000000001 * fVec8[((IOTA - 51) & 127)])) + (0.0028833999999999999 * fVec8[((IOTA - 52) & 127)])) + (0.00325793 * fVec8[((IOTA - 53) & 127)])) + (0.00305273 * fVec8[((IOTA - 54) & 127)])) + (0.0012461600000000001 * fVec8[((IOTA - 55) & 127)])) + (0.0012118500000000002 * fVec8[((IOTA - 56) & 127)])) + (0.0050028199999999998 * fVec8[((IOTA - 57) & 127)])) + (0.0036129299999999999 * fVec8[((IOTA - 58) & 127)])) + (0.0031211899999999998 * fVec8[((IOTA - 59) & 127)])) + (0.0042250600000000001 * fVec8[((IOTA - 60) & 127)])) + (0.0035775299999999998 * fVec8[((IOTA - 61) & 127)])) + (0.0068040700000000006 * fVec8[((IOTA - 62) & 127)])) + (0.0062385100000000001 * fVec8[((IOTA - 63) & 127)])) + (0.0042152999999999999 * fVec8[((IOTA - 64) & 127)])) + (0.0027403499999999999 * fVec8[((IOTA - 65) & 127)])) + (0.0023089200000000003 * fVec8[((IOTA - 66) & 127)])) + (0.0034284599999999999 * fVec8[((IOTA - 67) & 127)])) + (0.0022559300000000002 * fVec8[((IOTA - 68) & 127)])) + (0.0014647 * fVec8[((IOTA - 69) & 127)])) + (0.00185049 * fVec8[((IOTA - 70) & 127)])) + (0.0032107500000000001 * fVec8[((IOTA - 71) & 127)])) + (0.0052356299999999998 * fVec8[((IOTA - 72) & 127)])) + (0.0030868900000000001 * fVec8[((IOTA - 73) & 127)])) + (0.0029129100000000003 * fVec8[((IOTA - 74) & 127)])) + (0.0063743100000000002 * fVec8[((IOTA - 75) & 127)])) + (0.0041945800000000007 * fVec8[((IOTA - 76) & 127)])) + (0.00082847699999999999 * fVec8[((IOTA - 77) & 127)])) + (0.0024405 * fVec8[((IOTA - 78) & 127)])) + (0.0041905200000000005 * fVec8[((IOTA - 79) & 127)])) + (0.0024365300000000001 * fVec8[((IOTA - 80) & 127)])) + (0.00056369199999999997 * fVec8[((IOTA - 82) & 127)])) + (0.0015701700000000001 * fVec8[((IOTA - 83) & 127)])) + (0.0016799500000000001 * fVec8[((IOTA - 85) & 127)]))) + (0.0037083100000000003 * fVec8[((IOTA - 87) & 127)])) + (0.00041329900000000006 * fVec8[((IOTA - 90) & 127)])) + (2.3955000000000004e-05 * fVec8[((IOTA - 93) & 127)])) + (0.0021461499999999999 * fVec8[((IOTA - 94) & 127)])) + (0.00272945 * fVec8[((IOTA - 95) & 127)])) + (0.00054874000000000004 * fVec8[((IOTA - 96) & 127)])) + (0.00058470199999999999 * fVec8[((IOTA - 98) & 127)])) + (0.00061282500000000011 * fVec8[((IOTA - 99) & 127)])) + (0.00050683400000000006 * fVec8[((IOTA - 100) & 127)])) + (0.00087727600000000008 * fVec8[((IOTA - 101) & 127)])) + (0.00154024 * fVec8[((IOTA - 102) & 127)])) + (0.00185348 * fVec8[((IOTA - 103) & 127)])) + (0.0012065399999999999 * fVec8[((IOTA - 104) & 127)])) + (0.0014059200000000002 * fVec8[((IOTA - 105) & 127)])) + (0.00136699 * fVec8[((IOTA - 106) & 127)])) + (0.0012923000000000001 * fVec8[((IOTA - 107) & 127)])) + (0.0009436510000000001 * fVec8[((IOTA - 108) & 127)])) + (0.00083451500000000008 * fVec8[((IOTA - 109) & 127)])) + (0.00098166300000000002 * fVec8[((IOTA - 110) & 127)])) + (0.00067625599999999997 * fVec8[((IOTA - 111) & 127)])) + (0.00050102000000000002 * fVec8[((IOTA - 112) & 127)])) + (0.00053358400000000003 * fVec8[((IOTA - 113) & 127)])) + (0.00054736599999999998 * fVec8[((IOTA - 114) & 127)])) + (0.00045382400000000002 * fVec8[((IOTA - 115) & 127)])) + (0.00034160000000000001 * fVec8[((IOTA - 116) & 127)])) + (0.00025855300000000002 * fVec8[((IOTA - 117) & 127)])) + (0.00016872499999999999 * fVec8[((IOTA - 118) & 127)])) + (0.00016404399999999999 * fVec8[((IOTA - 119) & 127)])) + (0.00010654600000000001 * fVec8[((IOTA - 120) & 127)])) + (4.2541300000000006e-05 * fVec8[((IOTA - 121) & 127)])) + (1.8717900000000003e-05 * fVec8[((IOTA - 122) & 127)])) + (2.09787e-05 * fVec8[((IOTA - 123) & 127)])) + (5.7126099999999992e-06 * fVec8[((IOTA - 124) & 127)])) + (5.0813899999999995e-06 * fVec8[((IOTA - 125) & 127)])) + (2.0625300000000001e-06 * fVec8[((IOTA - 126) & 127)])) + (3.3955100000000003e-05 * fTemp7)))))))))))))))))))))))))))))))))))))))))))))))))))) + (4.4578800000000004e-06 * fTemp6)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((2.1103299999999999e-06 * fVec0[((IOTA - 125) & 127)]) + ((5.5217400000000003e-06 * fVec0[((IOTA - 124) & 127)]) + ((3.11789e-06 * fVec0[((IOTA - 123) & 127)]) + ((9.0368300000000007e-05 * fVec0[((IOTA - 119) & 127)]) + ((0.00011532 * fVec0[((IOTA - 118) & 127)]) + ((0.00074305500000000006 * fVec0[((IOTA - 5) & 127)]) + ((0.00070165199999999998 * fVec0[((IOTA - 3) & 127)]) + ((7.2115300000000004e-05 * fVec0[((IOTA - 1) & 127)]) + ((1.68655e-05 * fTemp0) + ((0.00014172800000000001 * (fVec4[((IOTA - 109) & 127)] - fVec1[((IOTA - 78) & 127)])) + ((1.9649999999999998e-06 * fVec0[((IOTA - 116) & 127)]) + ((0.00021442500000000002 * fVec0[((IOTA - 115) & 127)]) + ((0.00030905200000000004 * fVec0[((IOTA - 114) & 127)]) + ((4.7581900000000006e-05 * fVec0[((IOTA - 113) & 127)]) + ((0.00016311100000000002 * fVec0[((IOTA - 112) & 127)]) + ((0.00016924900000000001 * fVec0[((IOTA - 111) & 127)]) + ((3.0118399999999995e-06 * fVec0[((IOTA - 109) & 127)]) + ((0.00053920599999999997 * fVec0[((IOTA - 108) & 127)]) + ((0.00034291200000000001 * fVec0[((IOTA - 107) & 127)]) + ((0.00026214100000000002 * fVec0[((IOTA - 106) & 127)]) + ((0.00023320700000000001 * fVec0[((IOTA - 105) & 127)]) + ((0.00041387999999999999 * fVec0[((IOTA - 102) & 127)]) + ((0.000138245 * fVec0[((IOTA - 101) & 127)]) + ((0.000478309 * fVec0[((IOTA - 100) & 127)]) + ((0.00091847499999999998 * fVec0[((IOTA - 99) & 127)]) + ((0.0013005599999999999 * fVec0[((IOTA - 98) & 127)]) + ((0.00113754 * fVec0[((IOTA - 97) & 127)]) + ((0.0026714199999999999 * fVec0[((IOTA - 93) & 127)]) + ((0.0021342599999999998 * fVec0[((IOTA - 92) & 127)]) + ((0.00024966300000000001 * fVec0[((IOTA - 90) & 127)]) + ((0.0023507699999999999 * fVec0[((IOTA - 89) & 127)]) + ((0.0046170200000000003 * fVec0[((IOTA - 88) & 127)]) + ((0.0013482500000000001 * fVec0[((IOTA - 87) & 127)]) + ((0.0010940099999999999 * fVec0[((IOTA - 85) & 127)]) + ((0.0017591500000000001 * fVec0[((IOTA - 84) & 127)]) + ((0.00040582000000000004 * fVec0[((IOTA - 83) & 127)]) + ((0.00225807 * fVec0[((IOTA - 82) & 127)]) + ((0.00237535 * fVec0[((IOTA - 81) & 127)]) + ((0.000120611 * fVec0[((IOTA - 80) & 127)]) + ((0.00060378299999999999 * fVec0[((IOTA - 78) & 127)]) + ((0.00026133000000000005 * fVec0[((IOTA - 73) & 127)]) + ((0.0020077300000000001 * fVec0[((IOTA - 63) & 127)]) + ((0.0032089100000000001 * fVec0[((IOTA - 62) & 127)]) + ((0.0010079800000000001 * fVec0[((IOTA - 61) & 127)]) + ((0.00063087099999999997 * fVec0[((IOTA - 60) & 127)]) + ((0.0044288800000000005 * fVec0[((IOTA - 59) & 127)]) + ((0.0047678900000000003 * fVec0[((IOTA - 58) & 127)]) + ((0.0703236 * fVec0[((IOTA - 13) & 127)]) + ((0.086424600000000004 * fVec0[((IOTA - 12) & 127)]) + ((0.00526349 * fVec0[((IOTA - 11) & 127)]) + ((0.0024688500000000003 * fVec0[((IOTA - 57) & 127)]) + ((0.00277838 * fVec0[((IOTA - 56) & 127)]) + ((0.0075612199999999996 * fVec0[((IOTA - 55) & 127)]) + ((0.00761051 * fVec0[((IOTA - 54) & 127)]) + ((0.0018776900000000002 * fVec0[((IOTA - 52) & 127)]) + ((0.0082384199999999998 * fVec0[((IOTA - 51) & 127)]) + ((0.0050166199999999994 * fVec0[((IOTA - 50) & 127)]) + ((0.0032369600000000001 * fVec0[((IOTA - 49) & 127)]) + ((0.0040625900000000005 * fVec0[((IOTA - 48) & 127)]) + ((0.011856999999999999 * fVec0[((IOTA - 47) & 127)]) + ((0.0091953899999999995 * fVec0[((IOTA - 46) & 127)]) + ((0.0061361499999999999 * fVec0[((IOTA - 45) & 127)]) + ((0.015667299999999999 * fVec0[((IOTA - 44) & 127)]) + ((0.0121152 * fVec0[((IOTA - 43) & 127)]) + ((0.0102805 * fVec0[((IOTA - 41) & 127)]) + ((0.0249734 * fVec0[((IOTA - 40) & 127)]) + ((0.0028042699999999998 * fVec0[((IOTA - 39) & 127)]) + ((0.0112762 * fVec0[((IOTA - 37) & 127)]) + ((0.0070063399999999998 * fVec0[((IOTA - 36) & 127)]) + ((0.0037140800000000002 * fVec0[((IOTA - 35) & 127)]) + ((0.0077227400000000005 * fVec0[((IOTA - 32) & 127)]) + ((0.0031788599999999999 * fVec0[((IOTA - 31) & 127)]) + ((0.0055445599999999996 * fVec0[((IOTA - 25) & 127)]) + ((0.014456700000000001 * fVec0[((IOTA - 21) & 127)]) + ((0.043969699999999994 * fVec0[((IOTA - 17) & 127)]) + ((0.010103500000000001 * fVec0[((IOTA - 16) & 127)]) + ((0.026084999999999997 * fVec0[((IOTA - 15) & 127)]) + ((0.040577500000000002 * fVec0[((IOTA - 14) & 127)]) + ((6.8184199999999995e-06 * fVec1[((IOTA - 124) & 127)]) + ((9.6015999999999997e-06 * fVec1[((IOTA - 123) & 127)]) + ((0.0021171000000000002 * fVec0[((IOTA - 9) & 127)]) + ((0.00027211800000000001 * fVec0[((IOTA - 7) & 127)]) + ((2.6161300000000003e-05 * fVec1[((IOTA - 122) & 127)]) + ((7.66841e-06 * fVec1[((IOTA - 120) & 127)]) + ((9.9956200000000017e-05 * fVec1[((IOTA - 119) & 127)]) + ((9.8288800000000007e-05 * fVec1[((IOTA - 118) & 127)]) + ((0.00016569499999999999 * fVec1[((IOTA - 115) & 127)]) + ((0.000131304 * fVec1[((IOTA - 114) & 127)]) + ((7.4421400000000012e-05 * fVec1[((IOTA - 113) & 127)]) + ((9.0750500000000005e-05 * fVec1[((IOTA - 109) & 127)]) + ((0.00081881900000000014 * fVec1[((IOTA - 96) & 127)]) + ((0.0015964400000000002 * fVec1[((IOTA - 95) & 127)]) + ((3.5872199999999999e-05 * fVec1[((IOTA - 92) & 127)]) + ((0.0020068299999999998 * fVec1[((IOTA - 91) & 127)]) + ((0.00050415000000000008 * fVec1[((IOTA - 90) & 127)]) + ((0.00041316100000000005 * fVec1[((IOTA - 89) & 127)]) + ((0.0011488700000000002 * fVec1[((IOTA - 88) & 127)]) + ((0.0011271300000000001 * fVec1[((IOTA - 87) & 127)]) + ((0.0028610799999999998 * fVec1[((IOTA - 84) & 127)]) + ((0.00119961 * fVec1[((IOTA - 83) & 127)]) + ((0.0011123800000000001 * fVec1[((IOTA - 82) & 127)]) + ((0.0018691199999999999 * fVec1[((IOTA - 81) & 127)]) + ((0.0023870700000000003 * fVec1[((IOTA - 80) & 127)]) + ((0.0014690600000000001 * fVec1[((IOTA - 79) & 127)]) + ((0.00020293100000000003 * fVec1[((IOTA - 75) & 127)]) + ((0.00042256999999999999 * fVec1[((IOTA - 74) & 127)]) + ((4.8196899999999999e-05 * fVec1[((IOTA - 73) & 127)]) + ((0.00081876599999999996 * fVec1[((IOTA - 69) & 127)]) + ((0.00116132 * fVec1[((IOTA - 65) & 127)]) + ((0.0012919000000000001 * fVec1[((IOTA - 60) & 127)]) + ((0.0018522 * fVec1[((IOTA - 53) & 127)]) + ((0.0040265300000000004 * fVec1[((IOTA - 52) & 127)]) + ((0.015326500000000002 * fVec1[((IOTA - 34) & 127)]) + ((0.0039000900000000002 * fVec1[((IOTA - 33) & 127)]) + ((0.0107983 * fVec1[((IOTA - 30) & 127)]) + ((0.0016720200000000002 * fVec1[((IOTA - 28) & 127)]) + ((0.0115642 * fVec1[((IOTA - 27) & 127)]) + ((0.0083424600000000012 * fVec1[((IOTA - 24) & 127)]) + ((0.0016058699999999999 * fVec1[((IOTA - 23) & 127)]) + ((0.00574575 * fVec1[((IOTA - 22) & 127)]) + ((0.0048227900000000004 * fVec1[((IOTA - 21) & 127)]) + ((0.0053663600000000006 * fVec1[((IOTA - 20) & 127)]) + ((0.0110708 * fVec1[((IOTA - 17) & 127)]) + ((0.0074311999999999998 * fVec1[((IOTA - 16) & 127)]) + ((0.00037238400000000002 * fVec1[((IOTA - 14) & 127)]) + ((0.00252045 * fVec1[((IOTA - 13) & 127)]) + ((0.00052853700000000004 * fVec1[((IOTA - 8) & 127)]) + ((0.00017706000000000002 * fVec1[((IOTA - 5) & 127)]) + ((0.00017067000000000002 * fVec1[((IOTA - 4) & 127)]) + ((2.8269799999999997e-06 * fVec1[((IOTA - 1) & 127)]) + ((0.0045421799999999998 * fVec1[((IOTA - 46) & 127)]) + ((0.0032057800000000001 * fVec1[((IOTA - 45) & 127)]) + ((0.0098560599999999998 * fVec1[((IOTA - 43) & 127)]) + ((0.00164123 * fVec1[((IOTA - 49) & 127)]) + ((0.0035543000000000003 * fVec1[((IOTA - 48) & 127)]) + ((0.0019447000000000002 * fVec1[((IOTA - 47) & 127)]) + ((0.0014029000000000001 * fVec1[((IOTA - 39) & 127)]) + ((0.0055212400000000002 * fVec1[((IOTA - 42) & 127)]) + ((0.0039102499999999997 * fVec1[((IOTA - 40) & 127)]) + ((3.5305499999999996e-06 * fVec2[((IOTA - 125) & 127)]) + ((4.1155299999999994e-06 * fVec2[((IOTA - 124) & 127)]) + ((8.4151000000000001e-06 * fVec2[((IOTA - 123) & 127)]) + ((2.8368800000000002e-05 * fVec2[((IOTA - 122) & 127)]) + ((6.1171800000000003e-05 * fVec2[((IOTA - 121) & 127)]) + ((4.5063100000000006e-05 * fVec2[((IOTA - 120) & 127)]) + ((0.00013187999999999999 * fVec2[((IOTA - 117) & 127)]) + ((9.0214000000000001e-05 * fVec2[((IOTA - 116) & 127)]) + ((4.5684500000000006e-05 * fVec2[((IOTA - 115) & 127)]) + ((0.00010922300000000001 * fVec2[((IOTA - 114) & 127)]) + ((0.00012787900000000001 * fVec2[((IOTA - 113) & 127)]) + ((0.00010810400000000001 * fVec2[((IOTA - 112) & 127)]) + ((8.4602100000000008e-05 * fVec2[((IOTA - 111) & 127)]) + ((0.00081971100000000009 * fVec1[((IOTA - 37) & 127)]) + ((0.00014129499999999999 * fVec2[((IOTA - 103) & 127)]) + ((0.0011713800000000001 * fVec2[((IOTA - 96) & 127)]) + ((0.00048376700000000002 * fVec2[((IOTA - 95) & 127)]) + ((0.00040982500000000005 * fVec2[((IOTA - 89) & 127)]) + ((0.00192194 * fVec2[((IOTA - 86) & 127)]) + ((0.00102436 * fVec2[((IOTA - 85) & 127)]) + ((0.00100778 * fVec2[((IOTA - 81) & 127)]) + ((0.00035581800000000004 * fVec2[((IOTA - 80) & 127)]) + ((0.00108387 * fVec2[((IOTA - 78) & 127)]) + ((0.00355741 * fVec2[((IOTA - 77) & 127)]) + ((0.00203951 * fVec2[((IOTA - 76) & 127)]) + ((0.00099792900000000005 * fVec2[((IOTA - 74) & 127)]) + ((0.0044921400000000004 * fVec2[((IOTA - 73) & 127)]) + ((0.00086068200000000009 * fVec2[((IOTA - 69) & 127)]) + ((0.0026953699999999999 * fVec2[((IOTA - 68) & 127)]) + ((0.00069267700000000005 * fVec2[((IOTA - 67) & 127)]) + ((0.0014122200000000001 * fVec2[((IOTA - 62) & 127)]) + ((0.00059297400000000002 * fVec2[((IOTA - 61) & 127)]) + ((0.00053443700000000002 * fVec2[((IOTA - 59) & 127)]) + ((0.0013940900000000002 * fVec2[((IOTA - 58) & 127)]) + ((0.0012833600000000001 * fVec2[((IOTA - 57) & 127)]) + ((0.0031110899999999999 * fVec2[((IOTA - 56) & 127)]) + ((0.0050713199999999998 * fVec2[((IOTA - 55) & 127)]) + ((0.0050443700000000003 * fVec2[((IOTA - 54) & 127)]) + ((0.00419002 * fVec2[((IOTA - 53) & 127)]) + ((0.0032877399999999999 * fVec2[((IOTA - 51) & 127)]) + ((0.00909628 * fVec2[((IOTA - 50) & 127)]) + ((0.0036924600000000003 * fVec2[((IOTA - 49) & 127)]) + ((0.0046017100000000002 * fVec2[((IOTA - 48) & 127)]) + ((0.0073180300000000005 * fVec2[((IOTA - 47) & 127)]) + ((0.0070144200000000004 * fVec2[((IOTA - 46) & 127)]) + ((0.0020962000000000003 * fVec2[((IOTA - 45) & 127)]) + ((0.0052343400000000005 * fVec2[((IOTA - 44) & 127)]) + ((0.0071723899999999998 * fVec2[((IOTA - 43) & 127)]) + ((0.0036162899999999999 * fVec2[((IOTA - 42) & 127)]) + ((0.010498400000000001 * fVec2[((IOTA - 41) & 127)]) + ((0.0021260799999999998 * fVec2[((IOTA - 40) & 127)]) + ((0.00086101400000000001 * fVec2[((IOTA - 7) & 127)]) + ((0.00058492199999999998 * fVec2[((IOTA - 5) & 127)]) + ((6.7829099999999997e-06 * fVec2[((IOTA - 4) & 127)]) + ((0.00025529600000000002 * fVec2[((IOTA - 3) & 127)]) + ((2.9285600000000003e-05 * fVec2[((IOTA - 1) & 127)]) + ((3.8661599999999993e-06 * fTemp2) + ((0.0128167 * fVec2[((IOTA - 23) & 127)]) + ((0.011590800000000002 * fVec2[((IOTA - 17) & 127)]) + ((0.0065524800000000003 * fVec2[((IOTA - 38) & 127)]) + ((0.011496599999999999 * fVec2[((IOTA - 35) & 127)]) + ((0.0010427100000000001 * fVec2[((IOTA - 34) & 127)]) + ((0.0092546800000000012 * fVec2[((IOTA - 31) & 127)]) + ((0.0026388100000000001 * fVec2[((IOTA - 27) & 127)]) + ((0.0038800599999999998 * fVec2[((IOTA - 16) & 127)]) + ((0.022263399999999999 * fVec2[((IOTA - 15) & 127)]) + ((0.020153300000000002 * fVec2[((IOTA - 14) & 127)]) + ((0.042437800000000005 * fVec2[((IOTA - 13) & 127)]) + ((0.047133599999999998 * fVec2[((IOTA - 12) & 127)]) + ((0.00567696 * fVec2[((IOTA - 11) & 127)]) + ((1.70851e-05 * fVec3[((IOTA - 122) & 127)]) + ((3.0657300000000002e-05 * fVec3[((IOTA - 121) & 127)]) + ((5.3340699999999993e-07 * fVec3[((IOTA - 120) & 127)]) + ((1.03751e-05 * fVec3[((IOTA - 118) & 127)]) + ((8.3314900000000018e-05 * fVec3[((IOTA - 117) & 127)]) + ((9.1851000000000012e-05 * fVec3[((IOTA - 112) & 127)]) + ((2.7205700000000003e-05 * fVec3[((IOTA - 111) & 127)]) + ((0.00143681 * fVec2[((IOTA - 9) & 127)]) + ((0.00152143 * fVec3[((IOTA - 82) & 127)]) + ((0.0032921200000000004 * fVec3[((IOTA - 81) & 127)]) + ((0.00193753 * fVec3[((IOTA - 80) & 127)]) + ((0.00062551900000000005 * fVec3[((IOTA - 79) & 127)]) + ((0.00096127300000000012 * fVec3[((IOTA - 70) & 127)]) + ((0.0042903999999999998 * fVec3[((IOTA - 69) & 127)]) + ((0.0037726500000000002 * fVec3[((IOTA - 68) & 127)]) + ((0.00041918000000000001 * fVec3[((IOTA - 66) & 127)]) + ((0.00047510500000000003 * fVec3[((IOTA - 63) & 127)]) + ((0.0023363800000000003 * fVec3[((IOTA - 57) & 127)]) + ((0.0047624399999999997 * fVec3[((IOTA - 56) & 127)]) + ((0.00035963800000000001 * fVec3[((IOTA - 55) & 127)]) + ((0.0014325799999999999 * fVec3[((IOTA - 53) & 127)]) + ((0.0035146700000000001 * fVec3[((IOTA - 50) & 127)]) + ((0.00013482199999999999 * fVec3[((IOTA - 46) & 127)]) + ((0.0031359700000000001 * fVec3[((IOTA - 44) & 127)]) + ((0.0033774600000000001 * fVec3[((IOTA - 43) & 127)]) + ((0.00043131800000000003 * fVec3[((IOTA - 41) & 127)]) + ((0.0017748 * fVec3[((IOTA - 37) & 127)]) + ((0.0095376600000000016 * fVec3[((IOTA - 34) & 127)]) + ((0.00354222 * fVec3[((IOTA - 31) & 127)]) + ((0.0099954400000000013 * fVec3[((IOTA - 30) & 127)]) + ((0.00581921 * fVec3[((IOTA - 27) & 127)]) + ((0.00064315100000000001 * fVec3[((IOTA - 26) & 127)]) + ((0.016502200000000002 * fVec3[((IOTA - 25) & 127)]) + ((0.026153100000000002 * fVec3[((IOTA - 19) & 127)]) + ((0.015518799999999999 * fVec3[((IOTA - 18) & 127)]) + ((0.011748099999999999 * fVec3[((IOTA - 16) & 127)]) + ((0.024044800000000002 * fVec3[((IOTA - 15) & 127)]) + ((0.011073200000000002 * fVec3[((IOTA - 12) & 127)]) + ((0.00016208700000000002 * fVec3[((IOTA - 11) & 127)]) + ((0.00023927800000000002 * fVec3[((IOTA - 9) & 127)]) + ((0.00099840900000000002 * fVec3[((IOTA - 7) & 127)]) + ((0.00026075800000000004 * fVec3[((IOTA - 3) & 127)]) + ((0.0017495700000000002 * fVec3[((IOTA - 62) & 127)]) + ((0.0013881099999999999 * fVec3[((IOTA - 61) & 127)]) + ((0.00142376 * fVec3[((IOTA - 59) & 127)]) + ((9.0296599999999999e-06 * fVec4[((IOTA - 122) & 127)]) + ((1.9893500000000002e-05 * fVec4[((IOTA - 118) & 127)]) + ((3.7877500000000005e-05 * fVec4[((IOTA - 115) & 127)]) + ((0.00027007400000000003 * fVec4[((IOTA - 103) & 127)]) + ((0.00044415800000000005 * fVec4[((IOTA - 102) & 127)]) + ((0.00031515600000000003 * fVec4[((IOTA - 100) & 127)]) + ((0.00068420899999999997 * fVec4[((IOTA - 99) & 127)]) + ((0.00049268100000000002 * fVec4[((IOTA - 96) & 127)]) + ((0.0013234399999999999 * fVec3[((IOTA - 58) & 127)]) + ((0.0015305800000000001 * fVec4[((IOTA - 91) & 127)]) + ((0.0017284399999999999 * fVec4[((IOTA - 90) & 127)]) + ((0.00127253 * fVec4[((IOTA - 89) & 127)]) + ((0.00166752 * fVec4[((IOTA - 88) & 127)]) + ((0.00033490500000000003 * fVec4[((IOTA - 85) & 127)]) + ((0.0011273899999999998 * fVec4[((IOTA - 84) & 127)]) + ((6.2119200000000007e-05 * fVec4[((IOTA - 82) & 127)]) + ((0.0017261400000000001 * fVec4[((IOTA - 81) & 127)]) + ((0.00048162000000000004 * fVec4[((IOTA - 80) & 127)]) + ((0.00071563500000000006 * fVec4[((IOTA - 79) & 127)]) + ((1.14088e-05 * fVec4[((IOTA - 77) & 127)]) + ((0.0014551499999999999 * fVec4[((IOTA - 76) & 127)]) + ((0.00078290800000000002 * fVec4[((IOTA - 73) & 127)]) + ((0.0013603899999999999 * fVec4[((IOTA - 72) & 127)]) + ((0.00076972400000000006 * fVec4[((IOTA - 71) & 127)]) + ((0.0011577500000000001 * fVec4[((IOTA - 70) & 127)]) + ((0.0027559100000000003 * fVec4[((IOTA - 69) & 127)]) + ((0.0011045300000000001 * fVec4[((IOTA - 65) & 127)]) + ((0.0019003900000000001 * fVec4[((IOTA - 64) & 127)]) + ((5.8659000000000002e-05 * fVec4[((IOTA - 63) & 127)]) + ((0.00034302399999999999 * fVec4[((IOTA - 60) & 127)]) + ((0.0015042599999999999 * fVec4[((IOTA - 55) & 127)]) + ((0.0038506399999999998 * fVec4[((IOTA - 54) & 127)]) + ((0.00280679 * fVec4[((IOTA - 53) & 127)]) + ((0.00191281 * fVec4[((IOTA - 51) & 127)]) + ((0.0030454200000000001 * fVec4[((IOTA - 47) & 127)]) + ((0.0010344 * fVec4[((IOTA - 46) & 127)]) + ((0.0021753000000000002 * fVec4[((IOTA - 43) & 127)]) + ((0.00241033 * fVec4[((IOTA - 41) & 127)]) + ((0.0054447699999999998 * fVec4[((IOTA - 34) & 127)]) + ((0.0027451799999999998 * fVec4[((IOTA - 33) & 127)]) + ((0.00192986 * fVec4[((IOTA - 32) & 127)]) + ((0.0050891900000000004 * fVec4[((IOTA - 29) & 127)]) + ((0.0025108100000000005 * fVec4[((IOTA - 9) & 127)]) + ((0.00235191 * fVec4[((IOTA - 7) & 127)]) + ((0.00091979399999999993 * fVec4[((IOTA - 5) & 127)]) + ((0.00050699800000000004 * fVec4[((IOTA - 3) & 127)]) + ((0.0223719 * fVec4[((IOTA - 21) & 127)]) + ((0.0123166 * fVec4[((IOTA - 20) & 127)]) + ((0.017947399999999999 * fVec4[((IOTA - 19) & 127)]) + ((0.010143899999999999 * fVec4[((IOTA - 28) & 127)]) + ((0.0039649200000000002 * fVec4[((IOTA - 27) & 127)]) + ((0.014927200000000002 * fVec4[((IOTA - 24) & 127)]) + ((0.010792999999999999 * fVec4[((IOTA - 23) & 127)]) + ((0.008510160000000001 * fVec4[((IOTA - 22) & 127)]) + ((6.9716599999999994e-06 * fVec5[((IOTA - 124) & 127)]) + ((0.0073694100000000007 * fVec4[((IOTA - 14) & 127)]) + ((9.8485200000000004e-06 * fVec5[((IOTA - 118) & 127)]) + ((0.0142655 * fVec4[((IOTA - 12) & 127)]) + ((0.00010357900000000001 * fVec5[((IOTA - 114) & 127)]) + ((0.00042897299999999997 * fVec5[((IOTA - 113) & 127)]) + ((0.00029024100000000006 * fVec5[((IOTA - 112) & 127)]) + ((9.8297200000000012e-05 * fVec5[((IOTA - 111) & 127)]) + ((0.00020804999999999999 * fVec5[((IOTA - 110) & 127)]) + ((0.00054109500000000001 * fVec5[((IOTA - 109) & 127)]) + ((0.0067548000000000009 * fVec4[((IOTA - 11) & 127)]) + ((0.00083962700000000002 * fVec5[((IOTA - 108) & 127)]) + ((0.00056389100000000007 * fVec5[((IOTA - 107) & 127)]) + ((0.00051816800000000006 * fVec5[((IOTA - 106) & 127)]) + ((0.00065456900000000003 * fVec5[((IOTA - 105) & 127)]) + ((0.00088825400000000011 * fVec5[((IOTA - 104) & 127)]) + ((0.000446193 * fVec5[((IOTA - 103) & 127)]) + ((0.00071199100000000003 * fVec5[((IOTA - 102) & 127)]) + ((0.0012468500000000001 * fVec5[((IOTA - 101) & 127)]) + ((0.0012435300000000001 * fVec5[((IOTA - 100) & 127)]) + ((0.0010388900000000002 * fVec5[((IOTA - 99) & 127)]) + ((0.00170268 * fVec5[((IOTA - 98) & 127)]) + ((0.00126004 * fVec5[((IOTA - 97) & 127)]) + ((0.0013548899999999999 * fVec5[((IOTA - 93) & 127)]) + ((0.0020163799999999999 * fVec5[((IOTA - 92) & 127)]) + ((0.0010302600000000001 * fVec5[((IOTA - 89) & 127)]) + ((0.00142103 * fVec5[((IOTA - 88) & 127)]) + ((0.0020040399999999999 * fVec5[((IOTA - 82) & 127)]) + ((0.0030592000000000002 * fVec5[((IOTA - 81) & 127)]) + ((0.00082976100000000015 * fVec5[((IOTA - 80) & 127)]) + ((0.00083032800000000008 * fVec5[((IOTA - 79) & 127)]) + ((0.00146794 * fVec5[((IOTA - 78) & 127)]) + ((0.0029912300000000001 * fVec5[((IOTA - 77) & 127)]) + ((0.0019008400000000002 * fVec5[((IOTA - 76) & 127)]) + ((0.00032308700000000001 * fVec5[((IOTA - 75) & 127)]) + ((0.00121188 * fVec5[((IOTA - 74) & 127)]) + ((0.0015286800000000001 * fVec5[((IOTA - 73) & 127)]) + ((0.0016313200000000001 * fVec5[((IOTA - 72) & 127)]) + ((0.0019843199999999999 * fVec5[((IOTA - 71) & 127)]) + ((0.0031219500000000001 * fVec5[((IOTA - 70) & 127)]) + ((0.0017147500000000001 * fVec5[((IOTA - 69) & 127)]) + ((4.5241600000000004e-05 * fVec5[((IOTA - 68) & 127)]) + ((0.00193403 * fVec5[((IOTA - 67) & 127)]) + ((0.00103439 * fVec5[((IOTA - 66) & 127)]) + ((0.00025587599999999999 * fVec5[((IOTA - 61) & 127)]) + ((0.0014905299999999999 * fVec5[((IOTA - 60) & 127)]) + ((0.000502175 * fVec5[((IOTA - 59) & 127)]) + ((0.00055048599999999999 * fVec5[((IOTA - 58) & 127)]) + ((0.00049892100000000004 * fVec5[((IOTA - 50) & 127)]) + ((0.0029968600000000001 * fVec5[((IOTA - 47) & 127)]) + ((0.0024887899999999998 * fVec5[((IOTA - 46) & 127)]) + ((0.0030320900000000003 * fVec5[((IOTA - 41) & 127)]) + ((0.0076587399999999998 * fVec5[((IOTA - 40) & 127)]) + ((0.010064699999999999 * fVec5[((IOTA - 35) & 127)]) + ((0.030136699999999999 * fVec5[((IOTA - 32) & 127)]) + ((0.017341200000000001 * fVec5[((IOTA - 31) & 127)]) + ((0.039170099999999999 * fVec5[((IOTA - 28) & 127)]) + ((0.00031563800000000003 * fVec5[((IOTA - 27) & 127)]) + ((0.00069887100000000011 * fVec5[((IOTA - 25) & 127)]) + ((0.025458500000000002 * fVec5[((IOTA - 24) & 127)]) + ((0.0120184 * fVec5[((IOTA - 21) & 127)]) + ((0.011691100000000001 * fVec5[((IOTA - 19) & 127)]) + ((0.0053095800000000004 * fVec5[((IOTA - 14) & 127)]) + ((0.0072171800000000001 * fVec5[((IOTA - 12) & 127)]) + ((0.0030320200000000003 * fVec5[((IOTA - 11) & 127)]) + ((0.00131485 * fVec5[((IOTA - 9) & 127)]) + ((0.0011081700000000001 * fVec5[((IOTA - 7) & 127)]) + ((0.00036208399999999998 * fVec5[((IOTA - 5) & 127)]) + (((6.574880000000001e-05 * fVec6[((IOTA - 115) & 127)]) + ((7.5893800000000015e-05 * fVec6[((IOTA - 114) & 127)]) + ((0.00055035400000000008 * fVec6[((IOTA - 113) & 127)]) + ((0.00054230400000000007 * fVec6[((IOTA - 112) & 127)]) + ((0.00038862600000000004 * fVec6[((IOTA - 111) & 127)]) + ((0.00038355300000000002 * fVec6[((IOTA - 110) & 127)]) + ((0.0010789999999999999 * fVec6[((IOTA - 109) & 127)]) + ((0.00127535 * fVec6[((IOTA - 108) & 127)]) + ((0.00026040700000000004 * fVec6[((IOTA - 107) & 127)]) + ((0.00064190699999999994 * fVec6[((IOTA - 106) & 127)]) + ((0.0012643700000000001 * fVec6[((IOTA - 105) & 127)]) + ((0.0014951399999999998 * fVec6[((IOTA - 104) & 127)]) + ((0.00096466700000000011 * fVec6[((IOTA - 103) & 127)]) + ((0.00062200899999999997 * fVec6[((IOTA - 102) & 127)]) + ((0.0013151 * fVec6[((IOTA - 101) & 127)]) + ((0.00155276 * fVec6[((IOTA - 100) & 127)]) + ((0.00147963 * fVec6[((IOTA - 99) & 127)]) + ((0.0012132899999999999 * fVec6[((IOTA - 96) & 127)]) + ((0.0010497099999999999 * fVec6[((IOTA - 95) & 127)]) + ((5.4447799999999994e-06 * fVec6[((IOTA - 91) & 127)]) + ((0.00060830200000000002 * fVec6[((IOTA - 82) & 127)]) + ((0.00073753600000000001 * fVec6[((IOTA - 81) & 127)]) + ((4.1098800000000007e-05 * fVec6[((IOTA - 76) & 127)]) + ((0.0023925600000000002 * fVec6[((IOTA - 72) & 127)]) + ((0.00191902 * fVec6[((IOTA - 71) & 127)]) + ((0.00073584900000000001 * fVec6[((IOTA - 70) & 127)]) + ((0.0033698500000000002 * fVec6[((IOTA - 69) & 127)]) + ((0.0046562499999999998 * fVec6[((IOTA - 68) & 127)]) + ((0.0026088700000000001 * fVec6[((IOTA - 67) & 127)]) + ((0.0015381499999999998 * fVec6[((IOTA - 66) & 127)]) + ((0.00177024 * fVec6[((IOTA - 65) & 127)]) + ((0.0027169400000000002 * fVec6[((IOTA - 64) & 127)]) + ((0.0011385200000000001 * fVec6[((IOTA - 73) & 127)]) + ((0.0011334100000000001 * fVec6[((IOTA - 61) & 127)]) + ((0.0012374899999999999 * fVec6[((IOTA - 57) & 127)]) + ((0.00350462 * fVec6[((IOTA - 56) & 127)]) + ((0.00029472900000000003 * fVec6[((IOTA - 55) & 127)]) + ((0.00161133 * fVec6[((IOTA - 49) & 127)]) + ((0.0043256300000000004 * fVec6[((IOTA - 43) & 127)]) + ((0.0039263700000000002 * fVec6[((IOTA - 38) & 127)]) + ((0.0193136 * fVec6[((IOTA - 37) & 127)]) + ((0.0137585 * fVec6[((IOTA - 34) & 127)]) + ((0.016165499999999999 * fVec6[((IOTA - 31) & 127)]) + ((0.0200181 * fVec6[((IOTA - 30) & 127)]) + ((0.00436148 * fVec6[((IOTA - 27) & 127)]) + ((0.0115485 * fVec6[((IOTA - 25) & 127)]) + ((0.0032127699999999998 * fVec6[((IOTA - 23) & 127)]) + ((0.0057804000000000006 * fVec6[((IOTA - 22) & 127)]) + ((0.037111700000000004 * fVec6[((IOTA - 19) & 127)]) + ((0.014907300000000002 * fVec6[((IOTA - 18) & 127)]) + ((0.0092683000000000001 * fVec6[((IOTA - 16) & 127)]) + ((0.0158698 * fVec6[((IOTA - 15) & 127)]) + ((0.00489909 * fVec6[((IOTA - 12) & 127)]) + ((0.00036272099999999999 * fVec6[((IOTA - 11) & 127)]) + ((0.00043871700000000003 * fVec6[((IOTA - 10) & 127)]) + ((0.00018132700000000001 * fVec6[((IOTA - 9) & 127)]) + ((0.00097058900000000011 * fVec6[((IOTA - 7) & 127)]) + ((0.00016036100000000001 * fVec6[((IOTA - 6) & 127)]) + ((0.00019245000000000002 * fVec6[((IOTA - 3) & 127)]) + ((1.8656099999999998e-06 * fVec7[((IOTA - 126) & 127)]) + ((2.5639300000000001e-06 * fVec7[((IOTA - 125) & 127)]) + ((8.3185099999999991e-06 * fVec7[((IOTA - 124) & 127)]) + ((3.8801999999999999e-05 * fVec7[((IOTA - 123) & 127)]) + ((6.5230500000000005e-05 * fVec7[((IOTA - 122) & 127)]) + ((4.81323e-05 * fVec7[((IOTA - 121) & 127)]) + ((3.1175000000000006e-05 * fVec7[((IOTA - 120) & 127)]) + ((1.1129000000000001e-05 * fVec7[((IOTA - 119) & 127)]) + ((0.00016385400000000001 * fVec7[((IOTA - 118) & 127)]) + ((0.000137362 * fVec7[((IOTA - 117) & 127)]) + ((9.139900000000001e-05 * fVec7[((IOTA - 116) & 127)]) + ((0.00012562199999999998 * fVec7[((IOTA - 115) & 127)]) + ((0.00025063300000000005 * fVec7[((IOTA - 113) & 127)]) + ((0.000272806 * fVec7[((IOTA - 112) & 127)]) + ((0.000314307 * fVec7[((IOTA - 111) & 127)]) + ((0.00026935700000000002 * fVec7[((IOTA - 110) & 127)]) + ((0.00027303400000000002 * fVec7[((IOTA - 109) & 127)]) + ((8.74662e-06 * fVec7[((IOTA - 108) & 127)]) + ((0.00035653000000000003 * fVec7[((IOTA - 106) & 127)]) + ((0.000138672 * fVec7[((IOTA - 91) & 127)]) + (((0.0011749499999999999 * fVec7[((IOTA - 81) & 127)]) + ((0.00092974400000000003 * fVec7[((IOTA - 76) & 127)]) + ((0.00189912 * fVec7[((IOTA - 75) & 127)]) + ((0.0018498099999999999 * fVec7[((IOTA - 74) & 127)]) + ((0.00102903 * fVec7[((IOTA - 70) & 127)]) + ((0.0023879000000000001 * fVec7[((IOTA - 69) & 127)]) + ((0.0030104600000000004 * fVec7[((IOTA - 68) & 127)]) + ((0.00157916 * fVec7[((IOTA - 67) & 127)]) + ((0.0021747000000000003 * fVec7[((IOTA - 66) & 127)]) + ((0.0024374800000000001 * fVec7[((IOTA - 65) & 127)]) + ((0.0017056100000000002 * fVec7[((IOTA - 64) & 127)]) + ((0.00246014 * fVec7[((IOTA - 63) & 127)]) + ((0.0044470300000000003 * fVec7[((IOTA - 62) & 127)]) + ((0.0047484400000000005 * fVec7[((IOTA - 61) & 127)]) + ((0.0027951100000000004 * fVec7[((IOTA - 60) & 127)]) + ((0.0047547600000000002 * fVec7[((IOTA - 59) & 127)]) + ((0.0037710400000000002 * fVec7[((IOTA - 58) & 127)]) + ((0.0045419900000000001 * fVec7[((IOTA - 57) & 127)]) + ((0.010441600000000001 * fVec7[((IOTA - 56) & 127)]) + ((0.0100582 * fVec7[((IOTA - 55) & 127)]) + ((0.0076609499999999997 * fVec7[((IOTA - 54) & 127)]) + ((0.0068764300000000002 * fVec7[((IOTA - 53) & 127)]) + ((0.0095819500000000005 * fVec7[((IOTA - 52) & 127)]) + ((0.015913200000000002 * fVec7[((IOTA - 51) & 127)]) + ((0.015119400000000002 * fVec7[((IOTA - 50) & 127)]) + ((0.0128559 * fVec7[((IOTA - 49) & 127)]) + ((0.016606200000000002 * fVec7[((IOTA - 48) & 127)]) + ((0.016194200000000002 * fVec7[((IOTA - 47) & 127)]) + ((0.0116756 * fVec7[((IOTA - 46) & 127)]) + ((0.008875280000000001 * fVec7[((IOTA - 45) & 127)]) + ((0.016079200000000002 * fVec7[((IOTA - 44) & 127)]) + ((0.0188738 * fVec7[((IOTA - 43) & 127)]) + ((0.022184499999999999 * fVec7[((IOTA - 42) & 127)]) + ((0.020373700000000002 * fVec7[((IOTA - 41) & 127)]) + ((0.0086227300000000003 * fVec7[((IOTA - 40) & 127)]) + ((0.015368999999999999 * fVec7[((IOTA - 39) & 127)]) + ((0.025263300000000002 * fVec7[((IOTA - 38) & 127)]) + ((0.026966700000000003 * fVec7[((IOTA - 37) & 127)]) + ((0.023967600000000002 * fVec7[((IOTA - 36) & 127)]) + ((0.0180915 * fVec7[((IOTA - 35) & 127)]) + ((0.026436999999999999 * fVec7[((IOTA - 34) & 127)]) + ((0.035762599999999999 * fVec7[((IOTA - 33) & 127)]) + ((0.019380700000000001 * fVec7[((IOTA - 32) & 127)]) + ((0.0052166499999999998 * fVec7[((IOTA - 31) & 127)]) + ((0.012525700000000001 * fVec7[((IOTA - 30) & 127)]) + ((0.039007399999999998 * fVec7[((IOTA - 29) & 127)]) + ((0.0095142000000000004 * fVec7[((IOTA - 26) & 127)]) + ((0.00060328500000000006 * fVec7[((IOTA - 25) & 127)]) + ((0.042794800000000008 * fVec7[((IOTA - 24) & 127)]) + ((0.0160175 * fVec7[((IOTA - 27) & 127)]) + ((0.034687500000000003 * fVec7[((IOTA - 23) & 127)]) + ((0.0011779100000000001 * fVec7[((IOTA - 10) & 127)]) + ((0.000167329 * fVec7[((IOTA - 8) & 127)]) + ((0.00041459900000000003 * fVec7[((IOTA - 6) & 127)]) + ((0.00031506200000000001 * fVec7[((IOTA - 2) & 127)]) + ((0.00054486499999999995 * fVec8[((IOTA - 97) & 127)]) + ((0.0024969700000000003 * fVec8[((IOTA - 92) & 127)]) + ((0.0014838199999999998 * fVec8[((IOTA - 91) & 127)]) + ((0.00134669 * fVec8[((IOTA - 89) & 127)]) + ((0.00141242 * fVec8[((IOTA - 88) & 127)]) + (((((((0.00017378000000000001 * fVec8[((IOTA - 2) & 127)]) + (0.015415000000000002 * fVec8[((IOTA - 24) & 127)])) + (0.0114164 * fVec8[((IOTA - 28) & 127)])) + (0.0029673899999999999 * fVec8[((IOTA - 47) & 127)])) + (0.0010694400000000001 * fVec8[((IOTA - 81) & 127)])) + (0.000311911 * fVec8[((IOTA - 84) & 127)])) + (0.039406500000000004 * fVec7[((IOTA - 28) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00031511100000000003 * fVec6[((IOTA - 74) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00017773600000000001 * fVec5[((IOTA - 3) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fHbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (fRec1[0] * (((1.0336899999999999e-06 * fVec0[((IOTA - 126) & 127)]) + ((1.07578e-06 * fVec0[((IOTA - 124) & 127)]) + ((1.0896600000000002e-05 * fVec0[((IOTA - 123) & 127)]) + ((5.7825300000000005e-06 * fVec0[((IOTA - 121) & 127)]) + ((2.9587800000000002e-05 * fVec0[((IOTA - 120) & 127)]) + ((0.00031437800000000003 * fVec0[((IOTA - 2) & 127)]) + ((0.00010999399999999999 * fVec0[((IOTA - 104) & 127)]) + ((1.2511200000000001e-05 * fVec0[((IOTA - 103) & 127)]) + ((3.3373e-05 * fVec0[((IOTA - 101) & 127)]) + ((0.0022768000000000003 * fVec0[((IOTA - 96) & 127)]) + ((0.0020205099999999997 * fVec0[((IOTA - 95) & 127)]) + ((0.00027500499999999999 * fVec0[((IOTA - 91) & 127)]) + ((9.9177200000000003e-05 * fVec0[((IOTA - 87) & 127)]) + ((0.0006416280000000001 * fVec0[((IOTA - 80) & 127)]) + ((0.000129173 * fVec0[((IOTA - 79) & 127)]) + ((0.0018692700000000001 * fVec0[((IOTA - 77) & 127)]) + ((0.0010500000000000002 * fVec0[((IOTA - 76) & 127)]) + ((0.0013042499999999999 * fVec0[((IOTA - 72) & 127)]) + ((0.0025056699999999998 * fVec0[((IOTA - 71) & 127)]) + ((0.0044664700000000002 * fVec0[((IOTA - 70) & 127)]) + ((0.0047280300000000003 * fVec0[((IOTA - 69) & 127)]) + ((0.0037914799999999999 * fVec0[((IOTA - 68) & 127)]) + ((0.0063763400000000003 * fVec0[((IOTA - 67) & 127)]) + ((0.0065615300000000003 * fVec0[((IOTA - 66) & 127)]) + ((0.00222449 * fVec0[((IOTA - 65) & 127)]) + ((0.0014331000000000001 * fVec0[((IOTA - 36) & 127)]) + ((0.0043624700000000002 * fVec0[((IOTA - 34) & 127)]) + ((0.0071496000000000007 * fVec0[((IOTA - 33) & 127)]) + ((0.009442299999999999 * fVec0[((IOTA - 31) & 127)]) + ((0.041430000000000002 * fVec0[((IOTA - 30) & 127)]) + ((0.032932100000000006 * fVec0[((IOTA - 29) & 127)]) + ((0.0056186100000000004 * fVec0[((IOTA - 28) & 127)]) + ((0.024621200000000003 * fVec0[((IOTA - 27) & 127)]) + ((0.042141200000000004 * fVec0[((IOTA - 26) & 127)]) + ((0.028794800000000002 * fVec0[((IOTA - 25) & 127)]) + ((0.06345640000000001 * fVec0[((IOTA - 24) & 127)]) + ((0.07541260000000001 * fVec0[((IOTA - 23) & 127)]) + ((0.00046772600000000007 * fVec0[((IOTA - 21) & 127)]) + ((0.049093400000000002 * fVec0[((IOTA - 20) & 127)]) + ((0.054047100000000001 * fVec0[((IOTA - 19) & 127)]) + ((0.0108471 * fVec0[((IOTA - 16) & 127)]) + ((1.5753899999999999e-07 * fVec1[((IOTA - 126) & 127)]) + ((3.3066799999999999e-06 * fVec1[((IOTA - 125) & 127)]) + ((0.0010471900000000001 * fVec0[((IOTA - 7) & 127)]) + (((9.6444300000000008e-05 * fVec1[((IOTA - 110) & 127)]) + ((0.00034096799999999998 * fVec1[((IOTA - 109) & 127)]) + ((1.0190999999999999e-05 * fVec1[((IOTA - 108) & 127)]) + ((0.00023396100000000001 * fVec1[((IOTA - 106) & 127)]) + ((0.00052374700000000008 * fVec1[((IOTA - 105) & 127)]) + ((0.00036215100000000001 * fVec1[((IOTA - 104) & 127)]) + ((0.00063805800000000005 * fVec1[((IOTA - 102) & 127)]) + ((0.0011957500000000002 * fVec1[((IOTA - 101) & 127)]) + ((0.0010047600000000002 * fVec1[((IOTA - 100) & 127)]) + ((0.00095472699999999994 * fVec1[((IOTA - 99) & 127)]) + ((0.00092775000000000008 * fVec1[((IOTA - 98) & 127)]) + ((0.00122649 * fVec1[((IOTA - 97) & 127)]) + ((0.0011230999999999999 * fVec1[((IOTA - 93) & 127)]) + ((0.00125953 * fVec1[((IOTA - 92) & 127)]) + ((0.00019295400000000001 * fVec1[((IOTA - 91) & 127)]) + ((0.00055969600000000004 * fVec1[((IOTA - 89) & 127)]) + ((0.00050830900000000008 * fVec1[((IOTA - 83) & 127)]) + ((0.000103257 * fVec1[((IOTA - 76) & 127)]) + ((0.00171093 * fVec1[((IOTA - 73) & 127)]) + ((0.0020383699999999999 * fVec1[((IOTA - 72) & 127)]) + ((0.0013637999999999999 * fVec1[((IOTA - 69) & 127)]) + ((0.0024843999999999999 * fVec1[((IOTA - 68) & 127)]) + ((0.00074355600000000003 * fVec1[((IOTA - 67) & 127)]) + ((0.00089791299999999997 * fVec1[((IOTA - 65) & 127)]) + ((0.0028104300000000005 * fVec1[((IOTA - 64) & 127)]) + ((0.0015055300000000001 * fVec1[((IOTA - 63) & 127)]) + ((0.00129704 * fVec1[((IOTA - 62) & 127)]) + ((0.00045463200000000001 * fVec1[((IOTA - 61) & 127)]) + ((0.00292619 * fVec1[((IOTA - 60) & 127)]) + ((0.0039499399999999999 * fVec1[((IOTA - 59) & 127)]) + ((0.00042873700000000005 * fVec1[((IOTA - 57) & 127)]) + ((0.00077501600000000001 * fVec1[((IOTA - 56) & 127)]) + ((0.0057435900000000007 * fVec1[((IOTA - 52) & 127)]) + ((0.0177702 * fVec1[((IOTA - 36) & 127)]) + ((0.0096359600000000007 * fVec1[((IOTA - 35) & 127)]) + ((0.019155500000000002 * fVec1[((IOTA - 33) & 127)]) + ((0.019293299999999999 * fVec1[((IOTA - 32) & 127)]) + ((0.0068834500000000002 * fVec1[((IOTA - 29) & 127)]) + ((0.036199000000000002 * fVec1[((IOTA - 26) & 127)]) + ((0.028412400000000001 * fVec1[((IOTA - 23) & 127)]) + ((0.016930500000000001 * fVec1[((IOTA - 20) & 127)]) + ((0.0106017 * fVec1[((IOTA - 19) & 127)]) + ((0.000263627 * fVec1[((IOTA - 17) & 127)]) + ((0.00025129900000000002 * fVec1[((IOTA - 15) & 127)]) + ((0.00047378999999999998 * fVec1[((IOTA - 14) & 127)]) + ((0.000359551 * fVec1[((IOTA - 11) & 127)]) + ((0.00050858999999999995 * fVec1[((IOTA - 10) & 127)]) + ((0.00025865000000000003 * fVec1[((IOTA - 8) & 127)]) + ((0.00030013000000000001 * fVec1[((IOTA - 7) & 127)]) + ((0.00012962100000000001 * fVec1[((IOTA - 4) & 127)]) + ((5.1984399999999995e-06 * fVec1[((IOTA - 2) & 127)]) + ((2.0081900000000002e-05 * fVec1[((IOTA - 1) & 127)]) + ((5.35095e-06 * fTemp1) + ((0.0064549899999999999 * fVec1[((IOTA - 45) & 127)]) + ((0.0094244500000000009 * fVec1[((IOTA - 39) & 127)]) + (((6.5997900000000001e-08 * fVec2[((IOTA - 126) & 127)]) + ((2.1505000000000002e-05 * fVec2[((IOTA - 111) & 127)]) + ((0.00025875799999999999 * fVec2[((IOTA - 110) & 127)]) + ((0.00016541 * fVec2[((IOTA - 109) & 127)]) + ((0.00012994100000000001 * fVec2[((IOTA - 108) & 127)]) + ((0.000501459 * fVec2[((IOTA - 107) & 127)]) + ((0.00061807300000000002 * fVec2[((IOTA - 106) & 127)]) + ((0.00041380000000000003 * fVec2[((IOTA - 105) & 127)]) + ((4.2136500000000006e-05 * fVec2[((IOTA - 102) & 127)]) + ((1.1025e-06 * fVec2[((IOTA - 101) & 127)]) + ((0.000102185 * fVec2[((IOTA - 100) & 127)]) + ((0.0010346200000000002 * fVec2[((IOTA - 99) & 127)]) + ((0.0015065 * fVec2[((IOTA - 98) & 127)]) + ((0.00015973800000000001 * fVec2[((IOTA - 94) & 127)]) + ((0.00065440400000000003 * fVec2[((IOTA - 93) & 127)]) + ((0.00049362799999999997 * fVec2[((IOTA - 91) & 127)]) + ((0.0010192300000000001 * fVec2[((IOTA - 90) & 127)]) + ((7.1971000000000006e-05 * fVec2[((IOTA - 85) & 127)]) + ((0.00051516900000000011 * fVec2[((IOTA - 84) & 127)]) + ((0.00076406400000000006 * fVec2[((IOTA - 83) & 127)]) + ((9.4944000000000018e-05 * fVec2[((IOTA - 81) & 127)]) + ((0.00095418100000000002 * fVec2[((IOTA - 80) & 127)]) + ((0.00034814200000000002 * fVec2[((IOTA - 76) & 127)]) + ((8.0286900000000005e-05 * fVec2[((IOTA - 71) & 127)]) + ((0.00159566 * fVec2[((IOTA - 70) & 127)]) + ((1.1146700000000001e-05 * fVec2[((IOTA - 67) & 127)]) + ((0.0016114299999999999 * fVec2[((IOTA - 66) & 127)]) + ((0.0030693399999999998 * fVec2[((IOTA - 65) & 127)]) + ((0.0029336900000000001 * fVec2[((IOTA - 64) & 127)]) + ((0.00021672300000000002 * fVec2[((IOTA - 61) & 127)]) + ((0.0015251900000000001 * fVec2[((IOTA - 60) & 127)]) + ((0.00063413500000000008 * fVec2[((IOTA - 59) & 127)]) + ((0.0015717800000000001 * fVec2[((IOTA - 40) & 127)]) + ((0.00023124899999999999 * fVec2[((IOTA - 7) & 127)]) + ((0.00020135900000000002 * fVec2[((IOTA - 6) & 127)]) + ((0.00015575000000000002 * fVec2[((IOTA - 2) & 127)]) + ((0.041638400000000006 * fVec2[((IOTA - 25) & 127)]) + ((0.020153599999999997 * fVec2[((IOTA - 24) & 127)]) + ((0.00032049699999999999 * fVec2[((IOTA - 23) & 127)]) + ((0.034925999999999999 * fVec2[((IOTA - 22) & 127)]) + ((0.0069752599999999996 * fVec2[((IOTA - 21) & 127)]) + ((0.0037277 * fVec2[((IOTA - 20) & 127)]) + ((0.045202099999999995 * fVec2[((IOTA - 19) & 127)]) + ((0.0086705299999999992 * fVec2[((IOTA - 37) & 127)]) + ((0.00411948 * fVec2[((IOTA - 34) & 127)]) + ((0.0107584 * fVec2[((IOTA - 33) & 127)]) + ((0.0029588800000000001 * fVec2[((IOTA - 32) & 127)]) + ((0.0139764 * fVec2[((IOTA - 30) & 127)]) + ((0.0093965200000000002 * fVec2[((IOTA - 29) & 127)]) + ((0.016385799999999999 * fVec2[((IOTA - 28) & 127)]) + ((0.015254500000000001 * fVec2[((IOTA - 27) & 127)]) + ((0.0099207400000000008 * fVec2[((IOTA - 26) & 127)]) + ((0.00526948 * fVec2[((IOTA - 16) & 127)]) + ((7.2115600000000003e-07 * fVec3[((IOTA - 126) & 127)]) + ((0.000358363 * fVec2[((IOTA - 10) & 127)]) + ((3.4760399999999997e-08 * fVec3[((IOTA - 123) & 127)]) + ((2.0505700000000003e-05 * fVec3[((IOTA - 122) & 127)]) + ((7.2276399999999995e-06 * fVec3[((IOTA - 121) & 127)]) + ((1.3220600000000002e-05 * fVec3[((IOTA - 120) & 127)]) + ((1.2673900000000001e-05 * fVec3[((IOTA - 118) & 127)]) + ((4.4900900000000009e-05 * fVec3[((IOTA - 117) & 127)]) + ((4.1691399999999999e-05 * fVec3[((IOTA - 110) & 127)]) + ((0.00027668200000000005 * fVec3[((IOTA - 92) & 127)]) + ((0.00280241 * fVec3[((IOTA - 82) & 127)]) + ((0.0020786799999999999 * fVec3[((IOTA - 81) & 127)]) + ((0.00091981900000000011 * fVec3[((IOTA - 80) & 127)]) + ((0.0002275 * fVec3[((IOTA - 79) & 127)]) + ((7.5101900000000007e-05 * fVec3[((IOTA - 76) & 127)]) + ((0.00076943900000000002 * fVec3[((IOTA - 72) & 127)]) + ((0.00063752100000000005 * fVec3[((IOTA - 71) & 127)]) + ((0.0026788099999999998 * fVec3[((IOTA - 70) & 127)]) + ((0.0036546199999999999 * fVec3[((IOTA - 69) & 127)]) + ((7.3547000000000006e-05 * fVec3[((IOTA - 68) & 127)]) + ((0.0010616200000000001 * fVec3[((IOTA - 66) & 127)]) + ((0.00033734999999999999 * fVec3[((IOTA - 64) & 127)]) + ((0.00050336900000000004 * fVec3[((IOTA - 63) & 127)]) + ((0.0034082300000000004 * fVec3[((IOTA - 57) & 127)]) + ((0.00345985 * fVec3[((IOTA - 56) & 127)]) + ((0.00155444 * fVec3[((IOTA - 53) & 127)]) + ((0.0014091100000000001 * fVec3[((IOTA - 52) & 127)]) + ((0.0018625499999999999 * fVec3[((IOTA - 51) & 127)]) + ((0.00053192199999999999 * fVec3[((IOTA - 48) & 127)]) + ((0.000148231 * fVec3[((IOTA - 47) & 127)]) + ((0.0072206400000000004 * fVec3[((IOTA - 44) & 127)]) + ((0.0011467599999999999 * fVec3[((IOTA - 43) & 127)]) + ((0.0050838799999999998 * fVec3[((IOTA - 35) & 127)]) + ((0.013509400000000001 * fVec3[((IOTA - 32) & 127)]) + ((0.015784800000000002 * fVec3[((IOTA - 27) & 127)]) + ((0.0024348900000000003 * fVec3[((IOTA - 25) & 127)]) + ((0.0034120499999999998 * fVec3[((IOTA - 24) & 127)]) + ((0.00206245 * fVec3[((IOTA - 23) & 127)]) + ((0.036800600000000003 * fVec3[((IOTA - 19) & 127)]) + ((0.016894100000000002 * fVec3[((IOTA - 16) & 127)]) + ((0.015907999999999999 * fVec3[((IOTA - 15) & 127)]) + ((0.00139284 * fVec3[((IOTA - 13) & 127)]) + ((0.0111489 * fVec3[((IOTA - 12) & 127)]) + ((0.00048254200000000003 * fVec3[((IOTA - 10) & 127)]) + ((0.00084440200000000006 * fVec3[((IOTA - 7) & 127)]) + ((0.00014837300000000001 * fVec3[((IOTA - 3) & 127)]) + ((0.0013227800000000002 * fVec3[((IOTA - 61) & 127)]) + ((0.0013802 * fVec3[((IOTA - 60) & 127)]) + ((0.00057507100000000002 * fVec3[((IOTA - 59) & 127)]) + ((6.1446399999999998e-06 * fVec4[((IOTA - 123) & 127)]) + ((8.1741199999999999e-06 * fVec4[((IOTA - 122) & 127)]) + ((2.2315100000000003e-05 * fVec4[((IOTA - 118) & 127)]) + ((4.6366800000000005e-05 * fVec4[((IOTA - 109) & 127)]) + ((0.00015426800000000002 * fVec4[((IOTA - 108) & 127)]) + ((2.9996500000000003e-05 * fVec4[((IOTA - 104) & 127)]) + ((0.00022863600000000002 * fVec4[((IOTA - 103) & 127)]) + ((0.00013601100000000001 * fVec4[((IOTA - 101) & 127)]) + ((0.00011103000000000001 * fVec4[((IOTA - 100) & 127)]) + ((0.00055044600000000001 * fVec4[((IOTA - 98) & 127)]) + ((0.00044798200000000004 * fVec4[((IOTA - 97) & 127)]) + ((0.00032662200000000005 * fVec4[((IOTA - 96) & 127)]) + ((0.0017853699999999999 * fVec3[((IOTA - 58) & 127)]) + ((0.00065044300000000001 * fVec4[((IOTA - 92) & 127)]) + ((0.0011816700000000001 * fVec4[((IOTA - 91) & 127)]) + ((0.00100478 * fVec4[((IOTA - 90) & 127)]) + ((4.4411900000000001e-05 * fVec4[((IOTA - 89) & 127)]) + ((0.000103707 * fVec4[((IOTA - 85) & 127)]) + ((0.00012959000000000001 * fVec4[((IOTA - 84) & 127)]) + ((0.0012166300000000002 * fVec4[((IOTA - 82) & 127)]) + ((0.00073013500000000003 * fVec4[((IOTA - 81) & 127)]) + ((0.0015448500000000002 * fVec4[((IOTA - 80) & 127)]) + ((0.00109789 * fVec4[((IOTA - 79) & 127)]) + ((0.00041635900000000004 * fVec4[((IOTA - 77) & 127)]) + ((0.00033440100000000001 * fVec4[((IOTA - 74) & 127)]) + ((0.00171149 * fVec4[((IOTA - 71) & 127)]) + ((0.0032145400000000001 * fVec4[((IOTA - 70) & 127)]) + ((0.000234556 * fVec4[((IOTA - 69) & 127)]) + ((0.0009296310000000001 * fVec4[((IOTA - 67) & 127)]) + ((0.00017575500000000001 * fVec4[((IOTA - 66) & 127)]) + ((0.00098071900000000012 * fVec4[((IOTA - 64) & 127)]) + ((0.00040021800000000004 * fVec4[((IOTA - 63) & 127)]) + ((0.0020002800000000001 * fVec4[((IOTA - 61) & 127)]) + ((0.0024495200000000002 * fVec4[((IOTA - 56) & 127)]) + ((0.0022621500000000001 * fVec4[((IOTA - 55) & 127)]) + ((0.0026210900000000004 * fVec4[((IOTA - 54) & 127)]) + ((0.00107755 * fVec4[((IOTA - 53) & 127)]) + ((0.0018869100000000001 * fVec4[((IOTA - 51) & 127)]) + ((0.0016816299999999999 * fVec4[((IOTA - 48) & 127)]) + ((0.00099638500000000002 * fVec4[((IOTA - 47) & 127)]) + ((0.0034718700000000002 * fVec4[((IOTA - 43) & 127)]) + ((0.0068587300000000004 * fVec4[((IOTA - 42) & 127)]) + ((0.0058219500000000002 * fVec4[((IOTA - 34) & 127)]) + ((0.017078900000000001 * fVec4[((IOTA - 33) & 127)]) + ((0.00087088200000000001 * fVec4[((IOTA - 30) & 127)]) + ((0.027225600000000003 * fVec4[((IOTA - 29) & 127)]) + ((0.00149292 * fVec4[((IOTA - 7) & 127)]) + ((0.00062478100000000003 * fVec4[((IOTA - 5) & 127)]) + ((0.00028939400000000006 * fVec4[((IOTA - 3) & 127)]) + ((0.031593799999999998 * fVec4[((IOTA - 21) & 127)]) + ((0.0092093100000000001 * fVec4[((IOTA - 20) & 127)]) + ((0.0182515 * fVec4[((IOTA - 19) & 127)]) + ((0.0125871 * fVec4[((IOTA - 16) & 127)]) + ((0.00946403 * fVec4[((IOTA - 28) & 127)]) + ((0.0038781100000000002 * fVec4[((IOTA - 25) & 127)]) + ((0.048044200000000002 * fVec4[((IOTA - 24) & 127)]) + ((0.0047823300000000004 * fVec4[((IOTA - 23) & 127)]) + ((1.4188099999999999e-06 * fVec5[((IOTA - 126) & 127)]) + ((3.3187600000000001e-06 * fVec5[((IOTA - 125) & 127)]) + ((5.1482899999999996e-06 * fVec5[((IOTA - 124) & 127)]) + ((8.7600299999999995e-06 * fVec5[((IOTA - 123) & 127)]) + ((5.5660599999999997e-06 * fVec5[((IOTA - 122) & 127)]) + ((5.530960000000001e-05 * fVec5[((IOTA - 121) & 127)]) + ((0.0010793700000000001 * fVec4[((IOTA - 14) & 127)]) + ((9.8678100000000013e-05 * fVec5[((IOTA - 119) & 127)]) + ((4.2207000000000004e-05 * fVec5[((IOTA - 118) & 127)]) + ((3.2490500000000003e-05 * fVec5[((IOTA - 117) & 127)]) + ((0.00011697900000000002 * fVec5[((IOTA - 116) & 127)]) + ((0.0061485900000000007 * fVec4[((IOTA - 12) & 127)]) + ((5.6691300000000004e-05 * fVec5[((IOTA - 112) & 127)]) + ((0.000115798 * fVec5[((IOTA - 111) & 127)]) + (((0.0037339199999999999 * fVec5[((IOTA - 96) & 127)]) + ((0.0027517499999999999 * fVec5[((IOTA - 95) & 127)]) + ((0.00065997500000000004 * fVec5[((IOTA - 92) & 127)]) + ((0.0016790700000000002 * fVec5[((IOTA - 91) & 127)]) + ((0.0019817300000000001 * fVec5[((IOTA - 88) & 127)]) + ((0.0040626200000000003 * fVec5[((IOTA - 87) & 127)]) + ((0.0023261500000000004 * fVec5[((IOTA - 86) & 127)]) + ((0.0015044699999999999 * fVec5[((IOTA - 85) & 127)]) + ((0.0010922900000000001 * fVec5[((IOTA - 84) & 127)]) + ((0.00011918500000000002 * fVec5[((IOTA - 120) & 127)]) + ((0.0012104800000000001 * fVec5[((IOTA - 64) & 127)]) + ((0.0039074399999999999 * fVec5[((IOTA - 63) & 127)]) + ((0.00102589 * fVec5[((IOTA - 62) & 127)]) + ((0.00070128400000000004 * fVec5[((IOTA - 59) & 127)]) + ((0.00040873600000000004 * fVec5[((IOTA - 58) & 127)]) + ((0.0011136799999999999 * fVec5[((IOTA - 57) & 127)]) + ((0.0035448200000000002 * fVec5[((IOTA - 56) & 127)]) + ((0.0022150400000000002 * fVec5[((IOTA - 55) & 127)]) + ((3.8517100000000004e-05 * fVec5[((IOTA - 54) & 127)]) + ((0.0011952499999999999 * fVec5[((IOTA - 53) & 127)]) + ((0.00017855099999999999 * fVec5[((IOTA - 52) & 127)]) + ((0.0020778099999999998 * fVec5[((IOTA - 51) & 127)]) + ((0.0048699899999999994 * fVec5[((IOTA - 50) & 127)]) + ((0.0011997199999999998 * fVec5[((IOTA - 47) & 127)]) + ((0.0061526599999999999 * fVec5[((IOTA - 46) & 127)]) + ((0.0028706900000000004 * fVec5[((IOTA - 44) & 127)]) + ((0.011077500000000001 * fVec5[((IOTA - 43) & 127)]) + ((0.0022290399999999998 * fVec5[((IOTA - 42) & 127)]) + ((0.0084232300000000003 * fVec5[((IOTA - 39) & 127)]) + ((0.00127378 * fVec5[((IOTA - 38) & 127)]) + ((0.0125606 * fVec5[((IOTA - 34) & 127)]) + ((0.011542200000000001 * fVec5[((IOTA - 31) & 127)]) + ((0.024367400000000001 * fVec5[((IOTA - 30) & 127)]) + ((0.0537481 * fVec5[((IOTA - 26) & 127)]) + ((0.013059400000000001 * fVec5[((IOTA - 23) & 127)]) + ((0.021176 * fVec5[((IOTA - 22) & 127)]) + ((0.0292041 * fVec5[((IOTA - 18) & 127)]) + ((0.015611 * fVec5[((IOTA - 17) & 127)]) + ((0.0131959 * fVec5[((IOTA - 15) & 127)]) + ((0.0033820999999999999 * fVec5[((IOTA - 13) & 127)]) + ((0.00065433400000000001 * fVec5[((IOTA - 10) & 127)]) + ((0.00012754700000000002 * fVec5[((IOTA - 9) & 127)]) + ((0.00028600400000000002 * fVec5[((IOTA - 8) & 127)]) + ((0.00056964699999999995 * fVec5[((IOTA - 6) & 127)]) + ((0.00055874899999999999 * fVec5[((IOTA - 4) & 127)]) + ((0.000107706 * fVec5[((IOTA - 2) & 127)]) + ((2.3258800000000005e-05 * fVec5[((IOTA - 1) & 127)]) + ((1.5002200000000002e-05 * fTemp5) + ((0.0020168600000000001 * fVec5[((IOTA - 49) & 127)]) + ((1.8648999999999999e-06 * fVec6[((IOTA - 126) & 127)]) + ((1.0045e-05 * fVec6[((IOTA - 125) & 127)]) + ((1.8977800000000003e-05 * fVec6[((IOTA - 124) & 127)]) + ((1.9873400000000002e-05 * fVec6[((IOTA - 123) & 127)]) + ((3.4954000000000004e-05 * fVec6[((IOTA - 122) & 127)]) + ((9.3229500000000019e-05 * fVec6[((IOTA - 121) & 127)]) + ((0.00012240800000000001 * fVec6[((IOTA - 120) & 127)]) + ((9.5701199999999998e-05 * fVec6[((IOTA - 119) & 127)]) + ((5.5900900000000005e-05 * fVec6[((IOTA - 115) & 127)]) + ((1.9102600000000002e-05 * fVec6[((IOTA - 114) & 127)]) + ((0.000876507 * fVec6[((IOTA - 91) & 127)]) + ((0.0020406000000000001 * fVec6[((IOTA - 90) & 127)]) + ((0.0013280499999999999 * fVec6[((IOTA - 89) & 127)]) + ((0.0017303100000000001 * fVec6[((IOTA - 88) & 127)]) + ((0.0029776099999999999 * fVec6[((IOTA - 87) & 127)]) + ((0.0025195700000000001 * fVec6[((IOTA - 86) & 127)]) + ((0.0011889400000000001 * fVec6[((IOTA - 83) & 127)]) + ((0.000386788 * fVec6[((IOTA - 81) & 127)]) + ((0.00090610300000000012 * fVec6[((IOTA - 80) & 127)]) + ((0.0014508500000000001 * fVec6[((IOTA - 79) & 127)]) + ((0.00082739399999999996 * fVec6[((IOTA - 78) & 127)]) + ((0.00013990400000000002 * fVec6[((IOTA - 76) & 127)]) + ((0.00174807 * fVec6[((IOTA - 75) & 127)]) + ((0.00235812 * fVec6[((IOTA - 63) & 127)]) + ((0.0021519 * fVec6[((IOTA - 62) & 127)]) + ((7.6654099999999985e-06 * fVec6[((IOTA - 61) & 127)]) + ((0.0022741699999999998 * fVec6[((IOTA - 55) & 127)]) + ((0.0042530099999999998 * fVec6[((IOTA - 54) & 127)]) + ((0.0032282000000000001 * fVec6[((IOTA - 53) & 127)]) + ((0.0041592900000000004 * fVec6[((IOTA - 50) & 127)]) + ((0.0075640600000000001 * fVec6[((IOTA - 49) & 127)]) + ((0.0079603199999999999 * fVec6[((IOTA - 48) & 127)]) + ((0.0030812000000000001 * fVec6[((IOTA - 47) & 127)]) + ((0.00018497500000000001 * fVec6[((IOTA - 46) & 127)]) + ((0.00033097600000000002 * fVec6[((IOTA - 43) & 127)]) + ((0.0066906600000000002 * fVec6[((IOTA - 42) & 127)]) + ((0.0081795500000000007 * fVec6[((IOTA - 41) & 127)]) + ((0.00108066 * fVec6[((IOTA - 40) & 127)]) + ((0.0088403900000000001 * fVec6[((IOTA - 36) & 127)]) + ((0.0054466000000000002 * fVec6[((IOTA - 35) & 127)]) + ((0.0040393699999999996 * fVec6[((IOTA - 33) & 127)]) + ((0.033863999999999998 * fVec6[((IOTA - 29) & 127)]) + ((0.0092350000000000002 * fVec6[((IOTA - 28) & 127)]) + ((0.00053732699999999999 * fVec6[((IOTA - 26) & 127)]) + ((0.0043864799999999999 * fVec6[((IOTA - 24) & 127)]) + ((0.0027836500000000004 * fVec6[((IOTA - 23) & 127)]) + ((0.0092729000000000006 * fVec6[((IOTA - 22) & 127)]) + ((0.022299000000000003 * fVec6[((IOTA - 21) & 127)]) + ((0.0012059800000000002 * fVec6[((IOTA - 20) & 127)]) + ((0.025815500000000002 * fVec6[((IOTA - 17) & 127)]) + ((7.0800700000000008e-05 * fVec6[((IOTA - 9) & 127)]) + ((0.00076956600000000007 * fVec6[((IOTA - 8) & 127)]) + ((0.000231146 * fVec6[((IOTA - 5) & 127)]) + ((0.00014766099999999999 * fVec6[((IOTA - 4) & 127)]) + ((1.4833700000000001e-06 * fVec7[((IOTA - 126) & 127)]) + ((3.6973199999999999e-06 * fVec7[((IOTA - 125) & 127)]) + ((8.5058500000000009e-06 * fVec7[((IOTA - 124) & 127)]) + ((4.1470500000000002e-05 * fVec7[((IOTA - 123) & 127)]) + ((7.1901800000000003e-05 * fVec7[((IOTA - 122) & 127)]) + ((3.71676e-05 * fVec7[((IOTA - 121) & 127)]) + ((3.3982700000000002e-05 * fVec7[((IOTA - 119) & 127)]) + ((0.00016550199999999999 * fVec7[((IOTA - 118) & 127)]) + ((0.00015893600000000001 * fVec7[((IOTA - 117) & 127)]) + ((0.00011888700000000002 * fVec7[((IOTA - 116) & 127)]) + ((2.6751600000000003e-05 * fVec7[((IOTA - 115) & 127)]) + ((1.5261800000000004e-05 * fVec7[((IOTA - 114) & 127)]) + ((0.00030627700000000004 * fVec7[((IOTA - 113) & 127)]) + ((0.00036830800000000003 * fVec7[((IOTA - 112) & 127)]) + ((0.000251322 * fVec7[((IOTA - 111) & 127)]) + ((0.00022708 * fVec7[((IOTA - 110) & 127)]) + ((0.000239084 * fVec7[((IOTA - 109) & 127)]) + ((9.1238799999999995e-06 * fVec7[((IOTA - 108) & 127)]) + (((0.00021972700000000002 * fVec7[((IOTA - 89) & 127)]) + ((0.0011643300000000001 * fVec7[((IOTA - 82) & 127)]) + ((0.00065994200000000006 * fVec7[((IOTA - 77) & 127)]) + ((0.0017905 * fVec7[((IOTA - 76) & 127)]) + ((0.00015429699999999999 * fVec7[((IOTA - 90) & 127)]) + ((0.00015571700000000001 * fVec7[((IOTA - 71) & 127)]) + ((0.0044549899999999998 * fVec7[((IOTA - 70) & 127)]) + ((0.0039002500000000005 * fVec7[((IOTA - 69) & 127)]) + ((0.00054205300000000002 * fVec7[((IOTA - 68) & 127)]) + ((0.00164631 * fVec7[((IOTA - 67) & 127)]) + ((0.00128867 * fVec7[((IOTA - 66) & 127)]) + ((0.000377902 * fVec7[((IOTA - 65) & 127)]) + ((0.00227327 * fVec7[((IOTA - 64) & 127)]) + ((0.0030369999999999998 * fVec7[((IOTA - 63) & 127)]) + ((0.0023284899999999999 * fVec7[((IOTA - 62) & 127)]) + ((0.0020450900000000003 * fVec7[((IOTA - 61) & 127)]) + ((0.0038926099999999999 * fVec7[((IOTA - 60) & 127)]) + ((0.0051357799999999995 * fVec7[((IOTA - 59) & 127)]) + ((0.0057548899999999995 * fVec7[((IOTA - 58) & 127)]) + ((0.0110121 * fVec7[((IOTA - 57) & 127)]) + ((0.010980500000000001 * fVec7[((IOTA - 56) & 127)]) + ((0.0074067100000000004 * fVec7[((IOTA - 55) & 127)]) + ((0.0058000299999999994 * fVec7[((IOTA - 54) & 127)]) + ((0.0046881500000000003 * fVec7[((IOTA - 53) & 127)]) + ((0.0079024400000000002 * fVec7[((IOTA - 52) & 127)]) + ((0.0143637 * fVec7[((IOTA - 51) & 127)]) + ((0.018899099999999999 * fVec7[((IOTA - 50) & 127)]) + ((0.016699200000000001 * fVec7[((IOTA - 49) & 127)]) + ((0.0121522 * fVec7[((IOTA - 48) & 127)]) + ((0.011685700000000002 * fVec7[((IOTA - 47) & 127)]) + ((0.0122635 * fVec7[((IOTA - 46) & 127)]) + ((0.017027300000000002 * fVec7[((IOTA - 45) & 127)]) + ((0.019806900000000002 * fVec7[((IOTA - 44) & 127)]) + ((0.017303499999999999 * fVec7[((IOTA - 43) & 127)]) + ((0.017569399999999999 * fVec7[((IOTA - 42) & 127)]) + ((0.016072400000000001 * fVec7[((IOTA - 41) & 127)]) + ((0.0227996 * fVec7[((IOTA - 40) & 127)]) + ((0.016965000000000001 * fVec7[((IOTA - 39) & 127)]) + ((0.017693 * fVec7[((IOTA - 38) & 127)]) + ((0.033336499999999998 * fVec7[((IOTA - 37) & 127)]) + ((0.029073099999999998 * fVec7[((IOTA - 36) & 127)]) + ((0.018621700000000001 * fVec7[((IOTA - 35) & 127)]) + ((0.023295900000000001 * fVec7[((IOTA - 34) & 127)]) + ((0.030269900000000002 * fVec7[((IOTA - 33) & 127)]) + ((0.023498000000000002 * fVec7[((IOTA - 32) & 127)]) + ((0.012867100000000001 * fVec7[((IOTA - 31) & 127)]) + ((0.024658199999999998 * fVec7[((IOTA - 30) & 127)]) + ((0.033071500000000004 * fVec7[((IOTA - 29) & 127)]) + ((0.014210199999999999 * fVec7[((IOTA - 26) & 127)]) + ((0.010567 * fVec7[((IOTA - 25) & 127)]) + ((0.056895100000000004 * fVec7[((IOTA - 24) & 127)]) + ((0.025422899999999998 * fVec7[((IOTA - 27) & 127)]) + ((0.00027516900000000002 * fVec7[((IOTA - 2) & 127)]) + ((1.74779e-06 * fVec8[((IOTA - 126) & 127)]) + ((7.1374800000000001e-06 * fVec8[((IOTA - 125) & 127)]) + ((1.69708e-05 * fVec8[((IOTA - 124) & 127)]) + ((7.3980599999999995e-07 * fVec8[((IOTA - 123) & 127)]) + ((5.5996800000000006e-05 * fVec8[((IOTA - 121) & 127)]) + ((0.000117308 * fVec8[((IOTA - 120) & 127)]) + ((0.000195057 * fVec8[((IOTA - 119) & 127)]) + ((0.00020216400000000001 * fVec8[((IOTA - 118) & 127)]) + ((0.00016114100000000001 * fVec8[((IOTA - 117) & 127)]) + ((0.00038352400000000005 * fVec8[((IOTA - 116) & 127)]) + ((0.00050261399999999997 * fVec8[((IOTA - 115) & 127)]) + ((0.00050803600000000001 * fVec8[((IOTA - 114) & 127)]) + ((0.00042659700000000002 * fVec8[((IOTA - 113) & 127)]) + ((0.00050421999999999999 * fVec8[((IOTA - 112) & 127)]) + ((0.0010336799999999999 * fVec8[((IOTA - 111) & 127)]) + ((0.00070924500000000006 * fVec8[((IOTA - 110) & 127)]) + ((0.000779071 * fVec8[((IOTA - 109) & 127)]) + ((0.00095978899999999995 * fVec8[((IOTA - 108) & 127)]) + ((0.0013097499999999999 * fVec8[((IOTA - 107) & 127)]) + ((0.0016259900000000001 * fVec8[((IOTA - 106) & 127)]) + ((0.00100501 * fVec8[((IOTA - 105) & 127)]) + ((0.0012236 * fVec8[((IOTA - 104) & 127)]) + ((0.0018419899999999999 * fVec8[((IOTA - 103) & 127)]) + ((0.00147426 * fVec8[((IOTA - 102) & 127)]) + ((0.0013272 * fVec8[((IOTA - 101) & 127)]) + ((0.00094503799999999993 * fVec8[((IOTA - 100) & 127)]) + ((0.00059498000000000005 * fVec8[((IOTA - 99) & 127)]) + ((0.0025739000000000001 * fVec8[((IOTA - 96) & 127)]) + ((0.0033512100000000003 * fVec8[((IOTA - 95) & 127)]) + ((0.00193882 * fVec8[((IOTA - 88) & 127)]) + ((0.00365475 * fVec8[((IOTA - 87) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((0.069732299999999997 * fVec8[((IOTA - 20) & 127)]) + ((0.041405900000000002 * fVec8[((IOTA - 19) & 127)]) + ((((((((((((((((((1.96889e-05 * fTemp8) + (0.00012713900000000002 * fVec8[((IOTA - 1) & 127)])) + (0.00072445800000000009 * fVec8[((IOTA - 3) & 127)])) + (0.00084005400000000002 * fVec8[((IOTA - 4) & 127)])) + (0.00078251799999999995 * fVec8[((IOTA - 5) & 127)])) + (0.00064681700000000005 * fVec8[((IOTA - 6) & 127)])) + (0.00105561 * fVec8[((IOTA - 7) & 127)])) + (0.00107368 * fVec8[((IOTA - 8) & 127)])) + (0.00055752700000000004 * fVec8[((IOTA - 9) & 127)])) + (0.0020685400000000002 * fVec8[((IOTA - 10) & 127)])) + (0.0007391530000000001 * fVec8[((IOTA - 11) & 127)])) + (0.048941400000000003 * fVec8[((IOTA - 12) & 127)])) + (0.053001199999999998 * fVec8[((IOTA - 13) & 127)])) + (0.046698700000000003 * fVec8[((IOTA - 14) & 127)])) + (0.062211200000000001 * fVec8[((IOTA - 15) & 127)])) + (0.043948600000000004 * fVec8[((IOTA - 16) & 127)])) + (0.081345899999999999 * fVec8[((IOTA - 17) & 127)])) + (0.047424299999999996 * fVec8[((IOTA - 18) & 127)])))) + (0.050380599999999998 * fVec8[((IOTA - 21) & 127)])) + (0.111697 * fVec8[((IOTA - 22) & 127)])) + (0.054464300000000007 * fVec8[((IOTA - 23) & 127)])) + (0.036801199999999999 * fVec8[((IOTA - 25) & 127)])) + (0.042423700000000002 * fVec8[((IOTA - 26) & 127)])) + (0.0075229400000000005 * fVec8[((IOTA - 27) & 127)])) + (0.0123141 * fVec8[((IOTA - 28) & 127)])) + (0.0216826 * fVec8[((IOTA - 29) & 127)])) + (0.017730600000000003 * fVec8[((IOTA - 30) & 127)])) + (0.0080194200000000011 * fVec8[((IOTA - 31) & 127)])) + (0.021074000000000002 * fVec8[((IOTA - 33) & 127)])) + (0.0272114 * fVec8[((IOTA - 34) & 127)])) + (0.0056564199999999997 * fVec8[((IOTA - 35) & 127)])) + (0.010539099999999999 * fVec8[((IOTA - 36) & 127)])) + (0.0081598500000000015 * fVec8[((IOTA - 37) & 127)])) + (0.0060665699999999994 * fVec8[((IOTA - 38) & 127)])) + (0.0072938400000000002 * fVec8[((IOTA - 39) & 127)])) + (0.0014525200000000001 * fVec8[((IOTA - 40) & 127)])) + (0.0049862900000000009 * fVec8[((IOTA - 41) & 127)])) + (0.014038399999999999 * fVec8[((IOTA - 42) & 127)])) + (0.0105579 * fVec8[((IOTA - 43) & 127)])) + (0.00431154 * fVec8[((IOTA - 45) & 127)])) + (0.0084629900000000001 * fVec8[((IOTA - 46) & 127)])) + (0.0007157 * fVec8[((IOTA - 47) & 127)])) + (0.00067166600000000002 * fVec8[((IOTA - 48) & 127)])) + (0.0046483699999999998 * fVec8[((IOTA - 49) & 127)])) + (0.0014356600000000001 * fVec8[((IOTA - 50) & 127)])) + (0.00020930100000000001 * fVec8[((IOTA - 51) & 127)])) + (0.00139635 * fVec8[((IOTA - 52) & 127)])) + (0.0029229899999999999 * fVec8[((IOTA - 53) & 127)])) + (0.0042595000000000003 * fVec8[((IOTA - 54) & 127)])) + (0.0039973999999999999 * fVec8[((IOTA - 55) & 127)])) + (4.49754e-06 * fVec8[((IOTA - 56) & 127)])) + (0.00278079 * fVec8[((IOTA - 58) & 127)])) + (0.0038020800000000002 * fVec8[((IOTA - 59) & 127)])) + (0.0026122100000000002 * fVec8[((IOTA - 60) & 127)])) + (0.00338193 * fVec8[((IOTA - 61) & 127)])) + (0.0064815100000000002 * fVec8[((IOTA - 62) & 127)])) + (0.0067297599999999996 * fVec8[((IOTA - 63) & 127)])) + (0.0038801100000000004 * fVec8[((IOTA - 64) & 127)])) + (0.0029381799999999999 * fVec8[((IOTA - 65) & 127)])) + (0.0016933400000000002 * fVec8[((IOTA - 66) & 127)])) + (0.0028127900000000003 * fVec8[((IOTA - 67) & 127)])) + (0.0033726400000000001 * fVec8[((IOTA - 68) & 127)])) + (0.00072404000000000001 * fVec8[((IOTA - 70) & 127)])) + (0.0019828699999999999 * fVec8[((IOTA - 71) & 127)])) + (0.0039087499999999999 * fVec8[((IOTA - 72) & 127)])) + (0.0053022700000000004 * fVec8[((IOTA - 73) & 127)])) + (0.0036032700000000004 * fVec8[((IOTA - 74) & 127)])) + (0.0053821700000000004 * fVec8[((IOTA - 75) & 127)])) + (0.0046326400000000004 * fVec8[((IOTA - 76) & 127)])) + (0.0020199900000000002 * fVec8[((IOTA - 77) & 127)])) + (0.0020409600000000001 * fVec8[((IOTA - 78) & 127)])) + (0.00144247 * fVec8[((IOTA - 79) & 127)])) + (0.0026692399999999998 * fVec8[((IOTA - 80) & 127)])) + (0.0015368900000000002 * fVec8[((IOTA - 81) & 127)])) + (2.5156400000000002e-05 * fVec8[((IOTA - 83) & 127)])) + (0.0010550900000000001 * fVec8[((IOTA - 84) & 127)])) + (0.0017505699999999999 * fVec8[((IOTA - 85) & 127)])) + (0.0026745600000000003 * fVec8[((IOTA - 86) & 127)])) + (0.023601800000000003 * fVec7[((IOTA - 28) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00102092 * fVec6[((IOTA - 74) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00108131 * fVec4[((IOTA - 11) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0011423000000000002 * fVec1[((IOTA - 38) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00047446700000000006 * fVec0[((IOTA - 6) & 127)])))))))))))))))))))))))))))))))))))))))))))))) - ((9.8664600000000001e-07 * fVec0[((IOTA - 125) & 127)]) + ((6.1935700000000003e-07 * fVec0[((IOTA - 122) & 127)]) + ((4.9322600000000008e-05 * fVec0[((IOTA - 119) & 127)]) + ((6.2934400000000005e-05 * fVec0[((IOTA - 118) & 127)]) + ((0.00063438600000000002 * fVec0[((IOTA - 5) & 127)]) + ((0.00012589200000000001 * fVec0[((IOTA - 4) & 127)]) + ((0.00040925999999999999 * fVec0[((IOTA - 3) & 127)]) + ((6.4495100000000005e-05 * fVec0[((IOTA - 1) & 127)]) + ((1.3287400000000001e-05 * fTemp0) + ((0.000106835 * fVec0[((IOTA - 116) & 127)]) + ((0.00018018099999999999 * fVec0[((IOTA - 115) & 127)]) + ((0.00022798800000000001 * fVec0[((IOTA - 114) & 127)]) + ((0.000195522 * fVec0[((IOTA - 113) & 127)]) + ((4.2778300000000003e-05 * fVec0[((IOTA - 117) & 127)]) + ((0.00011808300000000001 * fVec0[((IOTA - 112) & 127)]) + ((3.4608100000000005e-05 * fVec0[((IOTA - 111) & 127)]) + ((5.723480000000001e-05 * fVec0[((IOTA - 110) & 127)]) + ((0.00010142800000000001 * fVec0[((IOTA - 109) & 127)]) + ((9.4569700000000004e-05 * fVec0[((IOTA - 108) & 127)]) + ((0.000158107 * fVec0[((IOTA - 107) & 127)]) + ((0.00070563799999999997 * fVec0[((IOTA - 106) & 127)]) + ((0.00048340500000000007 * fVec0[((IOTA - 105) & 127)]) + ((0.00023814000000000002 * fVec0[((IOTA - 102) & 127)]) + ((0.00015213499999999999 * fVec0[((IOTA - 100) & 127)]) + ((0.0010091500000000001 * fVec0[((IOTA - 99) & 127)]) + ((0.0015510600000000002 * fVec0[((IOTA - 98) & 127)]) + ((0.00028692799999999999 * fVec0[((IOTA - 97) & 127)]) + ((0.00133293 * fVec0[((IOTA - 94) & 127)]) + ((0.0028975800000000003 * fVec0[((IOTA - 93) & 127)]) + ((0.00088707100000000013 * fVec0[((IOTA - 92) & 127)]) + ((0.00187875 * fVec0[((IOTA - 90) & 127)]) + ((0.0031641300000000002 * fVec0[((IOTA - 89) & 127)]) + ((0.0018413699999999999 * fVec0[((IOTA - 88) & 127)]) + ((0.00031068799999999999 * fVec0[((IOTA - 86) & 127)]) + ((0.00097602600000000006 * fVec0[((IOTA - 85) & 127)]) + ((0.0015255399999999999 * fVec0[((IOTA - 84) & 127)]) + ((0.00237411 * fVec0[((IOTA - 83) & 127)]) + ((0.00112458 * fVec0[((IOTA - 82) & 127)]) + ((0.000380057 * fVec0[((IOTA - 81) & 127)]) + ((0.00020890300000000003 * fVec0[((IOTA - 78) & 127)]) + ((0.000712925 * fVec0[((IOTA - 75) & 127)]) + ((0.00090846500000000001 * fVec0[((IOTA - 74) & 127)]) + ((0.000274135 * fVec0[((IOTA - 73) & 127)]) + ((0.00090694700000000018 * fVec0[((IOTA - 64) & 127)]) + ((0.0024532300000000003 * fVec0[((IOTA - 63) & 127)]) + ((0.00327984 * fVec0[((IOTA - 62) & 127)]) + ((0.0016773199999999999 * fVec0[((IOTA - 61) & 127)]) + ((0.00044967800000000007 * fVec0[((IOTA - 60) & 127)]) + ((0.00165106 * fVec0[((IOTA - 59) & 127)]) + ((0.0048987900000000001 * fVec0[((IOTA - 58) & 127)]) + ((0.076845299999999991 * fVec0[((IOTA - 13) & 127)]) + ((0.074437400000000001 * fVec0[((IOTA - 12) & 127)]) + ((0.0013813599999999999 * fVec0[((IOTA - 11) & 127)]) + ((9.4869000000000016e-05 * fVec0[((IOTA - 10) & 127)]) + ((0.0034805299999999999 * fVec0[((IOTA - 57) & 127)]) + ((0.0023563100000000003 * fVec0[((IOTA - 56) & 127)]) + ((0.0045976600000000008 * fVec0[((IOTA - 55) & 127)]) + ((0.00626758 * fVec0[((IOTA - 54) & 127)]) + ((0.0026557099999999999 * fVec0[((IOTA - 53) & 127)]) + ((0.0043297500000000003 * fVec0[((IOTA - 52) & 127)]) + ((0.009209740000000001 * fVec0[((IOTA - 51) & 127)]) + ((0.0029224400000000001 * fVec0[((IOTA - 50) & 127)]) + ((0.0033351100000000001 * fVec0[((IOTA - 49) & 127)]) + ((0.010395300000000001 * fVec0[((IOTA - 48) & 127)]) + ((0.0093701299999999991 * fVec0[((IOTA - 47) & 127)]) + ((0.0063169100000000002 * fVec0[((IOTA - 46) & 127)]) + ((0.013098200000000001 * fVec0[((IOTA - 45) & 127)]) + ((0.014119 * fVec0[((IOTA - 44) & 127)]) + ((0.0021459299999999999 * fVec0[((IOTA - 43) & 127)]) + ((0.0105223 * fVec0[((IOTA - 42) & 127)]) + ((0.022465099999999998 * fVec0[((IOTA - 41) & 127)]) + ((0.0080828600000000007 * fVec0[((IOTA - 40) & 127)]) + ((0.0026383800000000001 * fVec0[((IOTA - 39) & 127)]) + ((0.0090530699999999999 * fVec0[((IOTA - 38) & 127)]) + ((0.0048908699999999994 * fVec0[((IOTA - 37) & 127)]) + ((0.0060908100000000003 * fVec0[((IOTA - 35) & 127)]) + ((0.0095365099999999998 * fVec0[((IOTA - 32) & 127)]) + ((0.00093046600000000002 * fVec0[((IOTA - 22) & 127)]) + ((0.015390200000000001 * fVec0[((IOTA - 18) & 127)]) + ((0.045964499999999998 * fVec0[((IOTA - 17) & 127)]) + ((0.028787799999999999 * fVec0[((IOTA - 15) & 127)]) + ((0.048319200000000007 * fVec0[((IOTA - 14) & 127)]) + ((7.7027e-06 * fVec1[((IOTA - 124) & 127)]) + ((1.6838600000000002e-05 * fVec1[((IOTA - 123) & 127)]) + ((0.00097653599999999996 * fVec0[((IOTA - 9) & 127)]) + ((4.9636399999999996e-06 * fVec1[((IOTA - 122) & 127)]) + ((1.9403399999999997e-06 * fVec1[((IOTA - 121) & 127)]) + ((5.28142e-05 * fVec1[((IOTA - 120) & 127)]) + ((0.00011763 * fVec1[((IOTA - 119) & 127)]) + ((0.00016574 * fVec1[((IOTA - 118) & 127)]) + ((0.00013637100000000001 * fVec1[((IOTA - 117) & 127)]) + ((9.7487500000000005e-05 * fVec1[((IOTA - 116) & 127)]) + ((2.2899500000000003e-05 * fVec1[((IOTA - 115) & 127)]) + ((1.3387100000000001e-05 * fVec1[((IOTA - 114) & 127)]) + ((8.3318600000000019e-05 * fVec1[((IOTA - 113) & 127)]) + ((0.00025527000000000004 * fVec1[((IOTA - 112) & 127)]) + ((0.00034909600000000002 * fVec1[((IOTA - 111) & 127)]) + ((0.00019374600000000001 * fVec1[((IOTA - 107) & 127)]) + ((0.00019838400000000002 * fVec1[((IOTA - 103) & 127)]) + (((0.000168486 * fVec1[((IOTA - 96) & 127)]) + ((0.0012272400000000001 * fVec1[((IOTA - 95) & 127)]) + ((0.00020233 * fVec1[((IOTA - 94) & 127)]) + ((0.00017177199999999999 * fVec1[((IOTA - 90) & 127)]) + ((0.00020847000000000004 * fVec1[((IOTA - 88) & 127)]) + ((0.0011732700000000001 * fVec1[((IOTA - 87) & 127)]) + ((0.00090841200000000004 * fVec1[((IOTA - 86) & 127)]) + ((0.0016132899999999999 * fVec1[((IOTA - 85) & 127)]) + ((0.00035920700000000001 * fVec1[((IOTA - 84) & 127)]) + ((0.00031580000000000003 * fVec1[((IOTA - 82) & 127)]) + ((0.0010732299999999999 * fVec1[((IOTA - 81) & 127)]) + ((0.00257691 * fVec1[((IOTA - 80) & 127)]) + ((0.0017717799999999999 * fVec1[((IOTA - 79) & 127)]) + ((0.000561862 * fVec1[((IOTA - 78) & 127)]) + ((0.000172719 * fVec1[((IOTA - 77) & 127)]) + ((0.0028482099999999999 * fVec1[((IOTA - 75) & 127)]) + ((0.00218125 * fVec1[((IOTA - 74) & 127)]) + ((0.00024288000000000001 * fVec1[((IOTA - 71) & 127)]) + ((0.00186575 * fVec1[((IOTA - 70) & 127)]) + ((0.000588187 * fVec1[((IOTA - 66) & 127)]) + ((0.00080033999999999997 * fVec1[((IOTA - 58) & 127)]) + ((2.5690700000000001e-05 * fVec1[((IOTA - 55) & 127)]) + ((0.00113243 * fVec1[((IOTA - 54) & 127)]) + ((0.0016462200000000001 * fVec1[((IOTA - 53) & 127)]) + ((0.027060000000000001 * fVec1[((IOTA - 34) & 127)]) + ((0.0063968899999999997 * fVec1[((IOTA - 31) & 127)]) + ((0.011650000000000001 * fVec1[((IOTA - 30) & 127)]) + ((0.0092220099999999992 * fVec1[((IOTA - 28) & 127)]) + ((0.0078633899999999996 * fVec1[((IOTA - 27) & 127)]) + ((0.029293300000000001 * fVec1[((IOTA - 25) & 127)]) + ((0.0096560400000000012 * fVec1[((IOTA - 24) & 127)]) + ((0.0144406 * fVec1[((IOTA - 22) & 127)]) + ((0.013951100000000001 * fVec1[((IOTA - 21) & 127)]) + ((0.0084374500000000009 * fVec1[((IOTA - 18) & 127)]) + ((0.0039648399999999999 * fVec1[((IOTA - 16) & 127)]) + ((0.0014542699999999999 * fVec1[((IOTA - 13) & 127)]) + ((0.00036303800000000004 * fVec1[((IOTA - 12) & 127)]) + ((0.00064008700000000001 * fVec1[((IOTA - 9) & 127)]) + ((6.501340000000001e-05 * fVec1[((IOTA - 6) & 127)]) + ((0.00011503900000000001 * fVec1[((IOTA - 5) & 127)]) + ((7.4982900000000003e-05 * fVec1[((IOTA - 3) & 127)]) + ((0.0026402700000000001 * fVec1[((IOTA - 46) & 127)]) + ((0.0042838500000000005 * fVec1[((IOTA - 44) & 127)]) + ((0.0034927700000000001 * fVec1[((IOTA - 43) & 127)]) + ((0.00086436100000000012 * fVec1[((IOTA - 51) & 127)]) + ((0.0055766799999999997 * fVec1[((IOTA - 50) & 127)]) + ((0.00392757 * fVec1[((IOTA - 49) & 127)]) + ((0.0028865100000000001 * fVec1[((IOTA - 48) & 127)]) + ((0.0056144999999999997 * fVec1[((IOTA - 47) & 127)]) + ((0.00038527200000000003 * fVec1[((IOTA - 42) & 127)]) + ((0.0065811400000000009 * fVec1[((IOTA - 41) & 127)]) + ((0.0015727 * fVec1[((IOTA - 40) & 127)]) + ((5.3978799999999999e-06 * fVec2[((IOTA - 125) & 127)]) + ((7.9125199999999989e-06 * fVec2[((IOTA - 124) & 127)]) + ((8.4929499999999997e-06 * fVec2[((IOTA - 123) & 127)]) + ((1.1654000000000001e-05 * fVec2[((IOTA - 122) & 127)]) + ((5.1085100000000003e-05 * fVec2[((IOTA - 121) & 127)]) + ((6.8685100000000004e-05 * fVec2[((IOTA - 120) & 127)]) + ((3.2896299999999998e-06 * fVec2[((IOTA - 119) & 127)]) + ((1.41509e-05 * fVec2[((IOTA - 118) & 127)]) + ((1.6980200000000004e-05 * fVec2[((IOTA - 117) & 127)]) + ((3.2223700000000001e-05 * fVec2[((IOTA - 116) & 127)]) + ((5.8471100000000003e-05 * fVec2[((IOTA - 115) & 127)]) + ((0.00010523700000000001 * fVec2[((IOTA - 114) & 127)]) + ((0.00013697000000000001 * fVec2[((IOTA - 113) & 127)]) + ((0.00010184400000000001 * fVec2[((IOTA - 112) & 127)]) + (((3.2479200000000006e-05 * fVec2[((IOTA - 104) & 127)]) + ((7.9775300000000009e-05 * fVec2[((IOTA - 103) & 127)]) + ((0.000178013 * fVec2[((IOTA - 97) & 127)]) + ((0.00096584900000000007 * fVec2[((IOTA - 96) & 127)]) + ((0.00013887600000000002 * fVec2[((IOTA - 95) & 127)]) + ((0.00019982600000000001 * fVec2[((IOTA - 92) & 127)]) + ((0.00031649800000000002 * fVec2[((IOTA - 89) & 127)]) + ((0.00037059799999999998 * fVec2[((IOTA - 88) & 127)]) + ((0.0012454300000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.00084652999999999996 * fVec2[((IOTA - 86) & 127)]) + ((0.00049063800000000005 * fVec2[((IOTA - 82) & 127)]) + ((0.0013326899999999999 * fVec2[((IOTA - 79) & 127)]) + ((0.00140716 * fVec2[((IOTA - 78) & 127)]) + ((0.00036433400000000001 * fVec2[((IOTA - 77) & 127)]) + ((0.001299 * fVec2[((IOTA - 75) & 127)]) + ((0.0033552399999999998 * fVec2[((IOTA - 74) & 127)]) + ((0.00067232300000000006 * fVec2[((IOTA - 73) & 127)]) + ((0.000145224 * fVec2[((IOTA - 72) & 127)]) + ((0.00118198 * fVec2[((IOTA - 69) & 127)]) + ((0.0029169900000000004 * fVec2[((IOTA - 68) & 127)]) + ((0.000641773 * fVec2[((IOTA - 63) & 127)]) + ((0.0019041500000000001 * fVec2[((IOTA - 62) & 127)]) + ((0.0020271300000000003 * fVec2[((IOTA - 58) & 127)]) + ((0.0037510500000000001 * fVec2[((IOTA - 57) & 127)]) + ((0.0046006600000000003 * fVec2[((IOTA - 56) & 127)]) + ((0.0050914999999999997 * fVec2[((IOTA - 55) & 127)]) + ((0.0044053800000000004 * fVec2[((IOTA - 54) & 127)]) + ((0.0011063700000000002 * fVec2[((IOTA - 53) & 127)]) + ((0.0019731900000000001 * fVec2[((IOTA - 52) & 127)]) + ((0.0069039700000000006 * fVec2[((IOTA - 51) & 127)]) + ((0.0058685200000000003 * fVec2[((IOTA - 50) & 127)]) + ((0.0061875000000000003 * fVec2[((IOTA - 49) & 127)]) + ((0.0086182900000000007 * fVec2[((IOTA - 48) & 127)]) + ((0.0051318099999999997 * fVec2[((IOTA - 47) & 127)]) + ((0.00066500800000000003 * fVec2[((IOTA - 46) & 127)]) + ((0.0054012200000000008 * fVec2[((IOTA - 45) & 127)]) + ((0.0077257100000000002 * fVec2[((IOTA - 44) & 127)]) + ((0.0049702700000000006 * fVec2[((IOTA - 43) & 127)]) + ((0.0075730000000000007 * fVec2[((IOTA - 42) & 127)]) + ((0.0060422599999999998 * fVec2[((IOTA - 41) & 127)]) + ((0.000175224 * fVec2[((IOTA - 5) & 127)]) + ((0.00022650199999999998 * fVec2[((IOTA - 4) & 127)]) + ((5.7022700000000005e-05 * fVec2[((IOTA - 3) & 127)]) + ((2.0383200000000002e-05 * fVec2[((IOTA - 1) & 127)]) + ((4.9413399999999999e-06 * fTemp2) + ((0.0126207 * fVec2[((IOTA - 18) & 127)]) + ((0.015590100000000001 * fVec2[((IOTA - 17) & 127)]) + ((0.0027149600000000002 * fVec2[((IOTA - 39) & 127)]) + ((0.00081970899999999995 * fVec2[((IOTA - 38) & 127)]) + ((5.1858400000000005e-05 * fVec2[((IOTA - 36) & 127)]) + ((0.0045739400000000003 * fVec2[((IOTA - 35) & 127)]) + ((0.00060354400000000002 * fVec2[((IOTA - 31) & 127)]) + ((0.027497799999999999 * fVec2[((IOTA - 15) & 127)]) + ((0.019302299999999998 * fVec2[((IOTA - 14) & 127)]) + ((0.044481599999999996 * fVec2[((IOTA - 13) & 127)]) + ((0.042276800000000003 * fVec2[((IOTA - 12) & 127)]) + ((0.0021177600000000002 * fVec2[((IOTA - 11) & 127)]) + ((5.7104899999999999e-06 * fVec3[((IOTA - 125) & 127)]) + ((1.32724e-05 * fVec3[((IOTA - 124) & 127)]) + ((2.9137400000000003e-05 * fVec3[((IOTA - 119) & 127)]) + ((0.00015924 * fVec3[((IOTA - 116) & 127)]) + ((7.6537400000000003e-05 * fVec3[((IOTA - 115) & 127)]) + ((6.5009300000000008e-05 * fVec3[((IOTA - 114) & 127)]) + ((3.6292700000000006e-05 * fVec3[((IOTA - 113) & 127)]) + ((2.5843400000000004e-05 * fVec3[((IOTA - 112) & 127)]) + ((0.00024267500000000003 * fVec3[((IOTA - 111) & 127)]) + ((0.00027291300000000001 * fVec2[((IOTA - 9) & 127)]) + ((0.00031903100000000006 * fVec3[((IOTA - 109) & 127)]) + ((0.00039582199999999999 * fVec3[((IOTA - 108) & 127)]) + ((0.00027277099999999999 * fVec3[((IOTA - 107) & 127)]) + ((0.00092367899999999995 * fVec3[((IOTA - 106) & 127)]) + ((0.0007145500000000001 * fVec3[((IOTA - 105) & 127)]) + ((0.000964846 * fVec3[((IOTA - 104) & 127)]) + ((0.0012146699999999999 * fVec3[((IOTA - 103) & 127)]) + ((0.00057145600000000003 * fVec3[((IOTA - 102) & 127)]) + ((0.00054242299999999999 * fVec3[((IOTA - 101) & 127)]) + ((0.00061493000000000008 * fVec3[((IOTA - 100) & 127)]) + ((0.0012203400000000001 * fVec3[((IOTA - 99) & 127)]) + ((0.0011941500000000002 * fVec3[((IOTA - 98) & 127)]) + ((6.1550000000000005e-05 * fVec2[((IOTA - 8) & 127)]) + ((0.00106711 * fVec3[((IOTA - 97) & 127)]) + ((0.00308618 * fVec3[((IOTA - 96) & 127)]) + ((0.0032894199999999999 * fVec3[((IOTA - 95) & 127)]) + ((0.00149796 * fVec3[((IOTA - 94) & 127)]) + ((0.00068249900000000004 * fVec3[((IOTA - 93) & 127)]) + ((0.00078510099999999996 * fVec3[((IOTA - 91) & 127)]) + ((0.00096550100000000012 * fVec3[((IOTA - 90) & 127)]) + ((0.00058387599999999999 * fVec3[((IOTA - 89) & 127)]) + ((0.0013118799999999999 * fVec3[((IOTA - 88) & 127)]) + ((0.0027314400000000003 * fVec3[((IOTA - 87) & 127)]) + ((0.0031734000000000003 * fVec3[((IOTA - 86) & 127)]) + ((0.0023903100000000001 * fVec3[((IOTA - 85) & 127)]) + ((0.0025833200000000001 * fVec3[((IOTA - 84) & 127)]) + ((0.00058356200000000003 * fVec3[((IOTA - 83) & 127)]) + ((0.0013939500000000001 * fVec3[((IOTA - 78) & 127)]) + ((1.7606500000000002e-05 * fVec3[((IOTA - 77) & 127)]) + ((0.0017979000000000001 * fVec3[((IOTA - 75) & 127)]) + ((0.00191797 * fVec3[((IOTA - 74) & 127)]) + ((0.00034747700000000001 * fVec3[((IOTA - 73) & 127)]) + ((0.000544179 * fVec3[((IOTA - 67) & 127)]) + ((5.63033e-05 * fVec3[((IOTA - 65) & 127)]) + ((0.00156606 * fVec3[((IOTA - 55) & 127)]) + ((0.0015830800000000002 * fVec3[((IOTA - 54) & 127)]) + ((0.0017704200000000002 * fVec3[((IOTA - 50) & 127)]) + ((0.0019330199999999999 * fVec3[((IOTA - 49) & 127)]) + ((0.00266146 * fVec3[((IOTA - 46) & 127)]) + ((0.0011897800000000001 * fVec3[((IOTA - 45) & 127)]) + ((0.00307881 * fVec3[((IOTA - 42) & 127)]) + ((0.0024114100000000001 * fVec3[((IOTA - 41) & 127)]) + ((0.0026392099999999999 * fVec3[((IOTA - 40) & 127)]) + ((0.00380796 * fVec3[((IOTA - 39) & 127)]) + ((0.000320157 * fVec3[((IOTA - 38) & 127)]) + ((0.00022045699999999999 * fVec3[((IOTA - 37) & 127)]) + ((0.0020659800000000002 * fVec3[((IOTA - 36) & 127)]) + ((0.0049689600000000006 * fVec3[((IOTA - 34) & 127)]) + ((0.0075314300000000004 * fVec3[((IOTA - 33) & 127)]) + ((0.0022648999999999998 * fVec3[((IOTA - 31) & 127)]) + ((0.00801492 * fVec3[((IOTA - 30) & 127)]) + ((0.0110397 * fVec3[((IOTA - 29) & 127)]) + ((0.0010152000000000002 * fVec3[((IOTA - 28) & 127)]) + ((0.00287375 * fVec3[((IOTA - 26) & 127)]) + ((0.0161706 * fVec3[((IOTA - 22) & 127)]) + ((0.026332300000000003 * fVec3[((IOTA - 21) & 127)]) + ((0.0079993000000000009 * fVec3[((IOTA - 20) & 127)]) + ((0.00082163500000000003 * fVec3[((IOTA - 18) & 127)]) + ((0.035125400000000001 * fVec3[((IOTA - 17) & 127)]) + ((0.0032833199999999997 * fVec3[((IOTA - 14) & 127)]) + ((0.00033950300000000006 * fVec3[((IOTA - 11) & 127)]) + ((0.00046365600000000006 * fVec3[((IOTA - 9) & 127)]) + ((0.0019217200000000002 * fVec3[((IOTA - 8) & 127)]) + ((0.00055710700000000004 * fVec3[((IOTA - 6) & 127)]) + ((0.00078591400000000008 * fVec3[((IOTA - 5) & 127)]) + ((0.00067488200000000002 * fVec3[((IOTA - 4) & 127)]) + ((0.00020588500000000003 * fVec3[((IOTA - 2) & 127)]) + ((3.4700500000000004e-05 * fVec3[((IOTA - 1) & 127)]) + ((1.2413700000000001e-05 * fTemp3) + (((4.8744899999999996e-07 * fVec4[((IOTA - 126) & 127)]) + ((3.5255099999999998e-06 * fVec4[((IOTA - 125) & 127)]) + ((3.2621699999999995e-06 * fVec4[((IOTA - 124) & 127)]) + ((4.06072e-05 * fVec4[((IOTA - 121) & 127)]) + ((6.3317800000000006e-05 * fVec4[((IOTA - 120) & 127)]) + ((3.5918100000000004e-05 * fVec4[((IOTA - 119) & 127)]) + ((2.5941400000000002e-05 * fVec4[((IOTA - 117) & 127)]) + ((8.6548500000000007e-05 * fVec4[((IOTA - 116) & 127)]) + ((5.5551700000000006e-05 * fVec4[((IOTA - 115) & 127)]) + ((3.6866300000000003e-05 * fVec4[((IOTA - 114) & 127)]) + ((4.2405400000000006e-05 * fVec4[((IOTA - 113) & 127)]) + ((8.1096800000000013e-05 * fVec4[((IOTA - 112) & 127)]) + ((4.85157e-05 * fVec4[((IOTA - 111) & 127)]) + ((7.4248300000000005e-05 * fVec4[((IOTA - 110) & 127)]) + ((6.1852800000000005e-05 * fVec4[((IOTA - 107) & 127)]) + ((0.00033669 * fVec4[((IOTA - 106) & 127)]) + ((0.00035192300000000003 * fVec4[((IOTA - 105) & 127)]) + ((0.000181368 * fVec4[((IOTA - 102) & 127)]) + ((5.5010100000000004e-05 * fVec4[((IOTA - 99) & 127)]) + ((0.000181872 * fVec4[((IOTA - 95) & 127)]) + ((0.0012472700000000002 * fVec4[((IOTA - 94) & 127)]) + ((0.0012369000000000002 * fVec4[((IOTA - 93) & 127)]) + ((0.00084541900000000014 * fVec4[((IOTA - 88) & 127)]) + ((0.00030825999999999998 * fVec4[((IOTA - 87) & 127)]) + ((0.000991956 * fVec4[((IOTA - 86) & 127)]) + ((0.00039449500000000002 * fVec4[((IOTA - 83) & 127)]) + ((0.00042647700000000008 * fVec4[((IOTA - 78) & 127)]) + ((0.00098188600000000017 * fVec4[((IOTA - 76) & 127)]) + ((0.00076287399999999997 * fVec4[((IOTA - 75) & 127)]) + ((0.00019696800000000003 * fVec4[((IOTA - 73) & 127)]) + ((0.00026003500000000004 * fVec4[((IOTA - 72) & 127)]) + ((0.000162845 * fVec4[((IOTA - 68) & 127)]) + ((0.000175864 * fVec4[((IOTA - 65) & 127)]) + ((0.00122741 * fVec4[((IOTA - 62) & 127)]) + ((0.00051085000000000008 * fVec4[((IOTA - 60) & 127)]) + ((0.0042857099999999999 * fVec4[((IOTA - 59) & 127)]) + ((0.0037509800000000001 * fVec4[((IOTA - 58) & 127)]) + ((0.0013037700000000001 * fVec4[((IOTA - 57) & 127)]) + ((0.000469171 * fVec4[((IOTA - 52) & 127)]) + ((0.0048162999999999999 * fVec4[((IOTA - 50) & 127)]) + ((0.0040944599999999994 * fVec4[((IOTA - 49) & 127)]) + ((0.0041798500000000006 * fVec4[((IOTA - 46) & 127)]) + ((0.0073487099999999996 * fVec4[((IOTA - 45) & 127)]) + ((0.0047594300000000003 * fVec4[((IOTA - 44) & 127)]) + ((0.00164357 * fVec4[((IOTA - 41) & 127)]) + ((0.0066234300000000005 * fVec4[((IOTA - 40) & 127)]) + ((0.0107364 * fVec4[((IOTA - 39) & 127)]) + ((0.0021625699999999999 * fVec4[((IOTA - 38) & 127)]) + ((0.00078494800000000005 * fVec4[((IOTA - 37) & 127)]) + ((0.008554550000000001 * fVec4[((IOTA - 36) & 127)]) + ((0.0087573399999999989 * fVec4[((IOTA - 35) & 127)]) + ((0.0022028300000000002 * fVec4[((IOTA - 32) & 127)]) + ((0.026865800000000002 * fVec4[((IOTA - 31) & 127)]) + ((6.4017400000000008e-05 * fVec4[((IOTA - 9) & 127)]) + ((0.00033249800000000003 * fVec4[((IOTA - 8) & 127)]) + ((0.00114682 * fVec4[((IOTA - 6) & 127)]) + ((0.00043610699999999998 * fVec4[((IOTA - 4) & 127)]) + ((0.000204336 * fVec4[((IOTA - 2) & 127)]) + ((2.2571e-06 * fVec4[((IOTA - 1) & 127)]) + ((1.2883700000000002e-05 * fTemp4) + ((0.044476699999999994 * fVec4[((IOTA - 18) & 127)]) + ((0.019425600000000001 * fVec4[((IOTA - 17) & 127)]) + ((0.0258357 * fVec4[((IOTA - 15) & 127)]) + ((0.0066563000000000004 * fVec4[((IOTA - 27) & 127)]) + ((0.0173968 * fVec4[((IOTA - 26) & 127)]) + ((0.0065755600000000003 * fVec4[((IOTA - 22) & 127)]) + ((0.00505303 * fVec4[((IOTA - 13) & 127)]) + (((7.4329200000000013e-05 * fVec5[((IOTA - 115) & 127)]) + ((0.00029377599999999999 * fVec5[((IOTA - 114) & 127)]) + ((0.000280439 * fVec5[((IOTA - 113) & 127)]) + ((0.00052814500000000005 * fVec5[((IOTA - 110) & 127)]) + ((0.00070229999999999999 * fVec5[((IOTA - 109) & 127)]) + ((0.00080632699999999991 * fVec5[((IOTA - 108) & 127)]) + ((0.000643591 * fVec5[((IOTA - 107) & 127)]) + ((0.00081294000000000006 * fVec5[((IOTA - 106) & 127)]) + ((0.00082950500000000002 * fVec5[((IOTA - 105) & 127)]) + ((0.00023107600000000004 * fVec5[((IOTA - 104) & 127)]) + ((0.00064061300000000005 * fVec5[((IOTA - 103) & 127)]) + ((0.00091664000000000003 * fVec5[((IOTA - 102) & 127)]) + ((0.00073955600000000005 * fVec5[((IOTA - 101) & 127)]) + ((0.00059890600000000007 * fVec5[((IOTA - 100) & 127)]) + ((0.0013073099999999999 * fVec5[((IOTA - 99) & 127)]) + ((0.0027768799999999998 * fVec5[((IOTA - 98) & 127)]) + ((0.00040949500000000001 * fVec5[((IOTA - 97) & 127)]) + ((0.00145302 * fVec5[((IOTA - 94) & 127)]) + ((0.0022861500000000002 * fVec5[((IOTA - 93) & 127)]) + ((0.001377 * fVec5[((IOTA - 90) & 127)]) + ((0.0017080400000000001 * fVec5[((IOTA - 89) & 127)]) + ((0.00016274 * fVec5[((IOTA - 83) & 127)]) + ((0.0027307400000000002 * fVec5[((IOTA - 82) & 127)]) + ((0.0028667500000000004 * fVec5[((IOTA - 81) & 127)]) + ((0.0011399600000000002 * fVec5[((IOTA - 80) & 127)]) + ((0.00110995 * fVec5[((IOTA - 79) & 127)]) + ((0.00124602 * fVec5[((IOTA - 78) & 127)]) + ((0.00129805 * fVec5[((IOTA - 77) & 127)]) + ((0.00100318 * fVec5[((IOTA - 76) & 127)]) + ((0.0022987899999999998 * fVec5[((IOTA - 75) & 127)]) + ((0.0019049100000000001 * fVec5[((IOTA - 74) & 127)]) + ((0.00059075000000000002 * fVec5[((IOTA - 73) & 127)]) + ((0.00103864 * fVec5[((IOTA - 72) & 127)]) + ((0.0013787300000000001 * fVec5[((IOTA - 71) & 127)]) + ((0.00181733 * fVec5[((IOTA - 70) & 127)]) + ((0.00293582 * fVec5[((IOTA - 69) & 127)]) + ((0.0023355800000000003 * fVec5[((IOTA - 68) & 127)]) + ((0.0011070699999999999 * fVec5[((IOTA - 67) & 127)]) + ((0.00050953999999999995 * fVec5[((IOTA - 66) & 127)]) + ((0.00044511000000000003 * fVec5[((IOTA - 65) & 127)]) + ((0.0038312400000000001 * fVec5[((IOTA - 61) & 127)]) + ((0.0016638 * fVec5[((IOTA - 60) & 127)]) + ((0.0043739400000000006 * fVec5[((IOTA - 48) & 127)]) + ((0.0013932899999999999 * fVec5[((IOTA - 45) & 127)]) + ((0.0106382 * fVec5[((IOTA - 41) & 127)]) + ((0.0043469900000000002 * fVec5[((IOTA - 40) & 127)]) + ((0.0015759000000000001 * fVec5[((IOTA - 37) & 127)]) + ((0.0073185999999999998 * fVec5[((IOTA - 36) & 127)]) + ((0.0045973800000000007 * fVec5[((IOTA - 35) & 127)]) + ((0.013183400000000001 * fVec5[((IOTA - 33) & 127)]) + ((0.028645500000000001 * fVec5[((IOTA - 32) & 127)]) + ((0.0092487699999999999 * fVec5[((IOTA - 29) & 127)]) + ((0.039121700000000002 * fVec5[((IOTA - 28) & 127)]) + ((0.00144425 * fVec5[((IOTA - 27) & 127)]) + ((0.0060285 * fVec5[((IOTA - 25) & 127)]) + ((0.057524800000000001 * fVec5[((IOTA - 24) & 127)]) + ((0.021570599999999999 * fVec5[((IOTA - 21) & 127)]) + ((0.0014793400000000002 * fVec5[((IOTA - 20) & 127)]) + ((0.0043988899999999999 * fVec5[((IOTA - 19) & 127)]) + ((0.0073680199999999994 * fVec5[((IOTA - 16) & 127)]) + ((0.00058021900000000009 * fVec5[((IOTA - 14) & 127)]) + ((0.0037306700000000002 * fVec5[((IOTA - 12) & 127)]) + ((0.000216524 * fVec5[((IOTA - 11) & 127)]) + ((0.00050577300000000005 * fVec5[((IOTA - 7) & 127)]) + ((0.00019702400000000002 * fVec5[((IOTA - 5) & 127)]) + (((7.8904099999999995e-07 * fVec6[((IOTA - 118) & 127)]) + ((5.1851200000000009e-05 * fVec6[((IOTA - 117) & 127)]) + ((3.48346e-05 * fVec6[((IOTA - 116) & 127)]) + ((0.000263489 * fVec6[((IOTA - 113) & 127)]) + ((0.00048678400000000003 * fVec6[((IOTA - 112) & 127)]) + ((0.00066577900000000002 * fVec6[((IOTA - 111) & 127)]) + ((0.00072508600000000011 * fVec6[((IOTA - 110) & 127)]) + ((0.00094771800000000006 * fVec6[((IOTA - 109) & 127)]) + ((0.00085589900000000003 * fVec6[((IOTA - 108) & 127)]) + ((0.00097958799999999999 * fVec6[((IOTA - 107) & 127)]) + ((0.00110553 * fVec6[((IOTA - 106) & 127)]) + ((0.00082826600000000003 * fVec6[((IOTA - 105) & 127)]) + ((0.0013655500000000001 * fVec6[((IOTA - 104) & 127)]) + ((0.0018638400000000001 * fVec6[((IOTA - 103) & 127)]) + ((0.0016748900000000001 * fVec6[((IOTA - 102) & 127)]) + ((0.0013615999999999999 * fVec6[((IOTA - 101) & 127)]) + ((0.00120272 * fVec6[((IOTA - 100) & 127)]) + ((0.00103053 * fVec6[((IOTA - 99) & 127)]) + ((0.00040302800000000005 * fVec6[((IOTA - 98) & 127)]) + ((0.0012814900000000001 * fVec6[((IOTA - 97) & 127)]) + ((0.0015273399999999999 * fVec6[((IOTA - 96) & 127)]) + ((0.00046550599999999997 * fVec6[((IOTA - 95) & 127)]) + ((0.00038473700000000001 * fVec6[((IOTA - 94) & 127)]) + ((0.0010250300000000001 * fVec6[((IOTA - 93) & 127)]) + ((0.0011346700000000002 * fVec6[((IOTA - 92) & 127)]) + ((0.00043984100000000006 * fVec6[((IOTA - 85) & 127)]) + ((0.00021673800000000001 * fVec6[((IOTA - 84) & 127)]) + ((2.74177e-05 * fVec6[((IOTA - 82) & 127)]) + ((0.0010960700000000002 * fVec6[((IOTA - 77) & 127)]) + ((0.0030635300000000001 * fVec6[((IOTA - 72) & 127)]) + ((0.0019637600000000002 * fVec6[((IOTA - 71) & 127)]) + ((0.0018260300000000002 * fVec6[((IOTA - 70) & 127)]) + ((0.00238017 * fVec6[((IOTA - 69) & 127)]) + ((0.0031654200000000004 * fVec6[((IOTA - 68) & 127)]) + ((0.00275033 * fVec6[((IOTA - 67) & 127)]) + ((0.0016457800000000001 * fVec6[((IOTA - 66) & 127)]) + ((0.0025982900000000001 * fVec6[((IOTA - 65) & 127)]) + ((0.0013408299999999999 * fVec6[((IOTA - 64) & 127)]) + ((0.0013700399999999999 * fVec6[((IOTA - 73) & 127)]) + ((0.00068048499999999999 * fVec6[((IOTA - 60) & 127)]) + ((0.00122218 * fVec6[((IOTA - 59) & 127)]) + ((0.00152893 * fVec6[((IOTA - 58) & 127)]) + ((0.0022063899999999999 * fVec6[((IOTA - 57) & 127)]) + ((0.00078379700000000003 * fVec6[((IOTA - 56) & 127)]) + ((0.00022987799999999998 * fVec6[((IOTA - 52) & 127)]) + ((0.00078511300000000004 * fVec6[((IOTA - 51) & 127)]) + ((0.0012260999999999999 * fVec6[((IOTA - 45) & 127)]) + ((0.0026344099999999998 * fVec6[((IOTA - 44) & 127)]) + ((0.0038961999999999998 * fVec6[((IOTA - 39) & 127)]) + ((0.011467400000000001 * fVec6[((IOTA - 38) & 127)]) + ((0.0078678299999999993 * fVec6[((IOTA - 37) & 127)]) + ((0.0013363100000000001 * fVec6[((IOTA - 34) & 127)]) + ((0.0089890100000000004 * fVec6[((IOTA - 32) & 127)]) + ((0.0143689 * fVec6[((IOTA - 31) & 127)]) + ((0.0049334100000000001 * fVec6[((IOTA - 30) & 127)]) + ((0.019686699999999998 * fVec6[((IOTA - 27) & 127)]) + ((0.0086390499999999988 * fVec6[((IOTA - 25) & 127)]) + ((0.043355600000000001 * fVec6[((IOTA - 19) & 127)]) + ((0.00249322 * fVec6[((IOTA - 18) & 127)]) + ((0.0141169 * fVec6[((IOTA - 16) & 127)]) + ((0.0111431 * fVec6[((IOTA - 15) & 127)]) + ((0.0018486100000000001 * fVec6[((IOTA - 14) & 127)]) + ((0.000976993 * fVec6[((IOTA - 13) & 127)]) + ((0.0056459800000000001 * fVec6[((IOTA - 12) & 127)]) + ((0.00021246900000000004 * fVec6[((IOTA - 11) & 127)]) + ((0.00095016999999999996 * fVec6[((IOTA - 10) & 127)]) + ((0.0010622000000000001 * fVec6[((IOTA - 7) & 127)]) + ((0.00024919200000000002 * fVec6[((IOTA - 6) & 127)]) + ((0.00027049600000000001 * fVec6[((IOTA - 3) & 127)]) + ((5.1123399999999996e-06 * fVec6[((IOTA - 2) & 127)]) + ((3.7580000000000003e-05 * fVec6[((IOTA - 1) & 127)]) + (((2.5019199999999998e-06 * fVec7[((IOTA - 120) & 127)]) + ((0.00015476800000000001 * fVec7[((IOTA - 107) & 127)]) + ((2.3801800000000003e-05 * fVec7[((IOTA - 106) & 127)]) + ((0.00041578400000000004 * fVec7[((IOTA - 105) & 127)]) + ((0.00040693400000000007 * fVec7[((IOTA - 104) & 127)]) + ((0.00042180200000000004 * fVec7[((IOTA - 103) & 127)]) + ((0.00064933700000000005 * fVec7[((IOTA - 102) & 127)]) + ((0.0010572399999999999 * fVec7[((IOTA - 101) & 127)]) + ((0.00096599000000000012 * fVec7[((IOTA - 100) & 127)]) + ((0.00077855999999999997 * fVec7[((IOTA - 99) & 127)]) + ((0.00073777800000000002 * fVec7[((IOTA - 98) & 127)]) + ((0.00065036 * fVec7[((IOTA - 97) & 127)]) + ((0.00069698000000000004 * fVec7[((IOTA - 96) & 127)]) + ((0.0013956400000000001 * fVec7[((IOTA - 95) & 127)]) + ((0.0020596199999999999 * fVec7[((IOTA - 94) & 127)]) + ((0.0017169000000000002 * fVec7[((IOTA - 93) & 127)]) + ((0.0012716300000000002 * fVec7[((IOTA - 92) & 127)]) + ((0.00130908 * fVec7[((IOTA - 91) & 127)]) + ((0.00161012 * fVec7[((IOTA - 88) & 127)]) + ((0.0016711600000000001 * fVec7[((IOTA - 87) & 127)]) + ((0.00075290600000000002 * fVec7[((IOTA - 86) & 127)]) + ((0.00144013 * fVec7[((IOTA - 85) & 127)]) + ((0.0021273399999999997 * fVec7[((IOTA - 84) & 127)]) + ((0.00061597300000000002 * fVec7[((IOTA - 83) & 127)]) + ((0.00011313 * fVec7[((IOTA - 81) & 127)]) + ((0.0017438199999999999 * fVec7[((IOTA - 80) & 127)]) + ((0.0024799100000000001 * fVec7[((IOTA - 79) & 127)]) + ((0.00256507 * fVec7[((IOTA - 78) & 127)]) + ((0.0011552999999999999 * fVec7[((IOTA - 75) & 127)]) + ((0.00098456699999999999 * fVec7[((IOTA - 74) & 127)]) + ((0.000597807 * fVec7[((IOTA - 73) & 127)]) + ((0.0018893200000000001 * fVec7[((IOTA - 72) & 127)]) + ((0.00092920600000000002 * fVec7[((IOTA - 23) & 127)]) + ((0.080136100000000002 * fVec7[((IOTA - 22) & 127)]) + ((0.041393800000000001 * fVec7[((IOTA - 21) & 127)]) + ((0.042661300000000006 * fVec7[((IOTA - 20) & 127)]) + ((0.0088175100000000006 * fVec7[((IOTA - 19) & 127)]) + ((0.053196100000000003 * fVec7[((IOTA - 18) & 127)]) + ((0.097787600000000002 * fVec7[((IOTA - 17) & 127)]) + ((0.040092800000000005 * fVec7[((IOTA - 16) & 127)]) + ((0.077296500000000004 * fVec7[((IOTA - 15) & 127)]) + ((0.064767000000000005 * fVec7[((IOTA - 14) & 127)]) + ((0.082935599999999998 * fVec7[((IOTA - 13) & 127)]) + ((0.078489900000000001 * fVec7[((IOTA - 12) & 127)]) + ((0.00067357800000000009 * fVec7[((IOTA - 11) & 127)]) + ((0.00149621 * fVec7[((IOTA - 10) & 127)]) + ((0.00072128000000000003 * fVec7[((IOTA - 9) & 127)]) + ((0.00101019 * fVec7[((IOTA - 8) & 127)]) + ((0.000453602 * fVec7[((IOTA - 7) & 127)]) + ((0.00042969900000000002 * fVec7[((IOTA - 6) & 127)]) + ((0.0010723199999999999 * fVec7[((IOTA - 5) & 127)]) + ((0.00084950300000000004 * fVec7[((IOTA - 4) & 127)]) + ((0.00085153200000000001 * fVec7[((IOTA - 3) & 127)]) + ((0.00015027000000000001 * fVec7[((IOTA - 1) & 127)]) + (((((((((((((((((0.00016075400000000001 * fVec8[((IOTA - 2) & 127)]) + (0.021295600000000001 * fVec8[((IOTA - 24) & 127)])) + (0.0029395300000000001 * fVec8[((IOTA - 32) & 127)])) + (0.00092078700000000006 * fVec8[((IOTA - 44) & 127)])) + (0.00063317100000000008 * fVec8[((IOTA - 57) & 127)])) + (0.00036222200000000004 * fVec8[((IOTA - 69) & 127)])) + (0.000687957 * fVec8[((IOTA - 82) & 127)])) + (0.00087519700000000008 * fVec8[((IOTA - 89) & 127)])) + (0.000611186 * fVec8[((IOTA - 90) & 127)])) + (1.7742000000000001e-05 * fVec8[((IOTA - 91) & 127)])) + (0.00196204 * fVec8[((IOTA - 92) & 127)])) + (0.0023706000000000001 * fVec8[((IOTA - 93) & 127)])) + (9.940880000000001e-05 * fVec8[((IOTA - 94) & 127)])) + (0.00047365100000000001 * fVec8[((IOTA - 97) & 127)])) + (0.00048385000000000002 * fVec8[((IOTA - 98) & 127)])) + (1.47262e-06 * fVec8[((IOTA - 122) & 127)])) + (2.4709800000000002e-05 * fTemp7)))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.0426200000000002e-05 * fTemp6))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (6.4290300000000003e-05 * fVec5[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00065851199999999999 * fVec4[((IOTA - 10) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0011524899999999999 * fVec3[((IOTA - 62) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0158301 * fVec1[((IOTA - 37) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00011001600000000001 * fVec0[((IOTA - 8) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fHbargraph1 = FAUSTFLOAT(fRec12[0]); + output1[i] = FAUSTFLOAT(fTemp10); + fRec1[1] = fRec1[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + IOTA = (IOTA + 1); + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; + fRec12[1] = fRec12[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOADecBinaural3.cpp b/source/HOAUGens/HOADecBinaural3.cpp new file mode 100644 index 0000000000..feda55f4e3 --- /dev/null +++ b/source/HOAUGens/HOADecBinaural3.cpp @@ -0,0 +1,1567 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL)" +name: "HOADecBinaural3" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + int IOTA; + double fVec0[128]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fVec1[128]; + double fRec5[2]; + FAUSTFLOAT fVbargraph2; + double fVec2[128]; + double fRec6[2]; + FAUSTFLOAT fVbargraph3; + double fVec3[128]; + double fRec7[2]; + FAUSTFLOAT fVbargraph4; + double fVec4[128]; + double fRec8[2]; + FAUSTFLOAT fVbargraph5; + double fVec5[128]; + double fRec9[2]; + FAUSTFLOAT fVbargraph6; + double fVec6[128]; + double fRec10[2]; + FAUSTFLOAT fVbargraph7; + double fVec7[128]; + double fRec11[2]; + FAUSTFLOAT fVbargraph8; + double fVec8[128]; + double fRec12[2]; + FAUSTFLOAT fVbargraph9; + double fVec9[128]; + double fRec13[2]; + FAUSTFLOAT fVbargraph10; + double fVec10[128]; + double fRec14[2]; + FAUSTFLOAT fVbargraph11; + double fVec11[128]; + double fRec15[2]; + FAUSTFLOAT fVbargraph12; + double fVec12[128]; + double fRec16[2]; + FAUSTFLOAT fVbargraph13; + double fVec13[128]; + double fRec17[2]; + FAUSTFLOAT fVbargraph14; + double fVec14[128]; + double fRec18[2]; + FAUSTFLOAT fVbargraph15; + double fVec15[128]; + double fRec0[2]; + FAUSTFLOAT fHbargraph0; + double fRec19[2]; + FAUSTFLOAT fHbargraph1; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL)"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOADecBinaural3"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + IOTA = 0; + for (int l3 = 0; (l3 < 128); l3 = (l3 + 1)) { + fVec0[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 128); l5 = (l5 + 1)) { + fVec1[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec5[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 128); l7 = (l7 + 1)) { + fVec2[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec6[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 128); l9 = (l9 + 1)) { + fVec3[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec7[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 128); l11 = (l11 + 1)) { + fVec4[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec8[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 128); l13 = (l13 + 1)) { + fVec5[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec9[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 128); l15 = (l15 + 1)) { + fVec6[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec10[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 128); l17 = (l17 + 1)) { + fVec7[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec11[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 128); l19 = (l19 + 1)) { + fVec8[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec12[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 128); l21 = (l21 + 1)) { + fVec9[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec13[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 128); l23 = (l23 + 1)) { + fVec10[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec14[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 128); l25 = (l25 + 1)) { + fVec11[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec15[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 128); l27 = (l27 + 1)) { + fVec12[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec16[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 128); l29 = (l29 + 1)) { + fVec13[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec17[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 128); l31 = (l31 + 1)) { + fVec14[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec18[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 128); l33 = (l33 + 1)) { + fVec15[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec0[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec19[l35] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecBinaural3"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x5671530", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x541fa40", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x562ef70", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x5608df0", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x55de970", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x55ae700", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x558aab0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x55627b0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x55435e0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x551bb50", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54f0900", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54c8730", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54a17d0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x5478040", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54244b0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x542ab30", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 10"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 10"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->closeBox(); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("Left"); + ui_interface->declare(&fHbargraph0, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x599a1f0", &fHbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Right"); + ui_interface->declare(&fHbargraph1, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x5c61110", &fHbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec3[0] = (fSlow1 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input1[i])); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + fVec0[(IOTA & 127)] = fTemp0; + double fTemp1 = (fRec3[0] * double(input14[i])); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec4[0]); + fVec1[(IOTA & 127)] = fTemp1; + double fTemp2 = (fRec3[0] * double(input15[i])); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec5[0]); + fVec2[(IOTA & 127)] = fTemp2; + double fTemp3 = (fRec3[0] * double(input13[i])); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec6[0]); + fVec3[(IOTA & 127)] = fTemp3; + double fTemp4 = (fRec3[0] * double(input12[i])); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec7[0]); + fVec4[(IOTA & 127)] = fTemp4; + double fTemp5 = (fRec3[0] * double(input11[i])); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec8[0]); + fVec5[(IOTA & 127)] = fTemp5; + double fTemp6 = (fRec3[0] * double(input10[i])); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec9[0]); + fVec6[(IOTA & 127)] = fTemp6; + double fTemp7 = (fRec3[0] * double(input9[i])); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec10[0]); + fVec7[(IOTA & 127)] = fTemp7; + double fTemp8 = (fRec3[0] * double(input8[i])); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph8 = FAUSTFLOAT(fRec11[0]); + fVec8[(IOTA & 127)] = fTemp8; + double fTemp9 = (fRec3[0] * double(input7[i])); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph9 = FAUSTFLOAT(fRec12[0]); + fVec9[(IOTA & 127)] = fTemp9; + double fTemp10 = (fRec3[0] * double(input6[i])); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph10 = FAUSTFLOAT(fRec13[0]); + fVec10[(IOTA & 127)] = fTemp10; + double fTemp11 = (fRec3[0] * double(input5[i])); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph11 = FAUSTFLOAT(fRec14[0]); + fVec11[(IOTA & 127)] = fTemp11; + double fTemp12 = (fRec3[0] * double(input4[i])); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph12 = FAUSTFLOAT(fRec15[0]); + fVec12[(IOTA & 127)] = fTemp12; + double fTemp13 = (fRec3[0] * double(input3[i])); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph13 = FAUSTFLOAT(fRec16[0]); + fVec13[(IOTA & 127)] = fTemp13; + double fTemp14 = (fRec3[0] * double(input2[i])); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph14 = FAUSTFLOAT(fRec17[0]); + fVec14[(IOTA & 127)] = fTemp14; + double fTemp15 = (fRec3[0] * double(input0[i])); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph15 = FAUSTFLOAT(fRec18[0]); + fVec15[(IOTA & 127)] = fTemp15; + double fTemp16 = (fRec1[0] * (((0.00010376700000000001 * (fVec0[((IOTA - 71) & 127)] - fVec1[((IOTA - 119) & 127)])) + ((1.4034199999999999e-06 * fVec2[((IOTA - 126) & 127)]) + ((1.2211099999999999e-06 * fVec2[((IOTA - 125) & 127)]) + ((1.2893400000000001e-05 * fVec2[((IOTA - 124) & 127)]) + ((2.6002200000000003e-05 * fVec2[((IOTA - 123) & 127)]) + ((2.6415500000000001e-05 * fVec2[((IOTA - 122) & 127)]) + ((2.8177200000000002e-05 * fVec2[((IOTA - 121) & 127)]) + ((1.2612900000000001e-05 * fVec2[((IOTA - 120) & 127)]) + ((0.00041671500000000006 * fVec2[((IOTA - 104) & 127)]) + ((0.00031062500000000003 * fVec2[((IOTA - 100) & 127)]) + ((7.3607000000000002e-05 * fVec2[((IOTA - 99) & 127)]) + ((0.00050056999999999999 * fVec2[((IOTA - 96) & 127)]) + ((0.0027204999999999998 * fVec2[((IOTA - 95) & 127)]) + ((0.0020446800000000001 * fVec2[((IOTA - 94) & 127)]) + ((8.3015299999999998e-05 * fVec2[((IOTA - 93) & 127)]) + ((0.0022225799999999996 * fVec2[((IOTA - 92) & 127)]) + ((0.0024016700000000003 * fVec2[((IOTA - 91) & 127)]) + ((0.00063865800000000006 * fVec2[((IOTA - 86) & 127)]) + ((0.00058693299999999999 * fVec2[((IOTA - 84) & 127)]) + ((0.0010148100000000001 * fVec2[((IOTA - 79) & 127)]) + ((0.00042316100000000002 * fVec2[((IOTA - 80) & 127)]) + ((0.00028691900000000001 * fVec2[((IOTA - 73) & 127)]) + ((0.0021912699999999999 * fVec2[((IOTA - 72) & 127)]) + ((0.00113353 * fVec2[((IOTA - 71) & 127)]) + ((0.000557951 * fVec2[((IOTA - 66) & 127)]) + ((0.00043863399999999997 * fVec2[((IOTA - 63) & 127)]) + ((0.00314139 * fVec2[((IOTA - 62) & 127)]) + ((0.0052284000000000002 * fVec2[((IOTA - 61) & 127)]) + ((0.0025010699999999998 * fVec2[((IOTA - 60) & 127)]) + ((0.0012393300000000001 * fVec2[((IOTA - 57) & 127)]) + ((0.0018594100000000001 * fVec2[((IOTA - 54) & 127)]) + ((0.0034922200000000003 * fVec2[((IOTA - 53) & 127)]) + ((0.00127944 * fVec2[((IOTA - 52) & 127)]) + ((0.0016422699999999999 * fVec2[((IOTA - 51) & 127)]) + ((0.00289419 * fVec2[((IOTA - 50) & 127)]) + ((0.0053105499999999998 * fVec2[((IOTA - 49) & 127)]) + ((0.0065292000000000006 * fVec2[((IOTA - 48) & 127)]) + ((0.00110392 * fVec2[((IOTA - 47) & 127)]) + ((0.0039351999999999998 * fVec2[((IOTA - 42) & 127)]) + ((0.00132128 * fVec2[((IOTA - 41) & 127)]) + ((0.0068892700000000003 * fVec2[((IOTA - 39) & 127)]) + ((0.0013770800000000001 * fVec2[((IOTA - 38) & 127)]) + ((0.031043400000000002 * fVec2[((IOTA - 30) & 127)]) + ((0.0012180400000000001 * fVec2[((IOTA - 29) & 127)]) + ((0.026485700000000001 * fVec2[((IOTA - 26) & 127)]) + ((0.026438899999999998 * fVec2[((IOTA - 23) & 127)]) + ((0.0094311100000000012 * fVec2[((IOTA - 22) & 127)]) + ((0.0253549 * fVec2[((IOTA - 21) & 127)]) + ((0.034643899999999998 * fVec2[((IOTA - 20) & 127)]) + ((0.0140976 * fVec2[((IOTA - 19) & 127)]) + ((0.00406018 * fVec2[((IOTA - 16) & 127)]) + ((0.019651700000000001 * fVec2[((IOTA - 12) & 127)]) + ((0.0098021300000000009 * fVec2[((IOTA - 11) & 127)]) + ((0.00308077 * fVec2[((IOTA - 9) & 127)]) + ((0.00323953 * fVec2[((IOTA - 7) & 127)]) + ((0.0012123500000000001 * fVec2[((IOTA - 5) & 127)]) + (((4.4620600000000002e-07 * fVec1[((IOTA - 126) & 127)]) + ((2.9040900000000002e-05 * fVec1[((IOTA - 122) & 127)]) + ((3.3390499999999998e-05 * fVec1[((IOTA - 121) & 127)]) + ((2.7818400000000001e-05 * fVec1[((IOTA - 118) & 127)]) + ((1.2691900000000001e-05 * fVec1[((IOTA - 113) & 127)]) + ((0.00037104300000000005 * fVec1[((IOTA - 111) & 127)]) + ((0.00041838800000000006 * fVec1[((IOTA - 110) & 127)]) + ((0.0025975199999999999 * fVec1[((IOTA - 92) & 127)]) + ((0.00015330900000000002 * fVec1[((IOTA - 91) & 127)]) + ((0.00154597 * fVec1[((IOTA - 89) & 127)]) + ((0.00067549000000000005 * fVec1[((IOTA - 88) & 127)]) + ((0.00107274 * fVec1[((IOTA - 85) & 127)]) + ((0.00062359600000000002 * fVec1[((IOTA - 80) & 127)]) + ((0.000178293 * fVec1[((IOTA - 79) & 127)]) + ((0.00080254300000000007 * fVec1[((IOTA - 76) & 127)]) + ((0.00065406300000000008 * fVec1[((IOTA - 68) & 127)]) + ((0.00014068899999999999 * fVec1[((IOTA - 67) & 127)]) + ((0.0019257899999999999 * fVec1[((IOTA - 65) & 127)]) + ((0.00162886 * fVec1[((IOTA - 64) & 127)]) + ((0.00050768500000000002 * fVec1[((IOTA - 63) & 127)]) + ((0.0025198 * fVec1[((IOTA - 60) & 127)]) + ((0.00117113 * fVec1[((IOTA - 59) & 127)]) + ((0.00015039900000000001 * fVec1[((IOTA - 58) & 127)]) + ((0.000455995 * fVec1[((IOTA - 56) & 127)]) + ((0.00278239 * fVec1[((IOTA - 55) & 127)]) + ((0.0010278799999999999 * fVec1[((IOTA - 54) & 127)]) + ((0.011156999999999999 * fVec1[((IOTA - 45) & 127)]) + ((0.0043641399999999999 * fVec1[((IOTA - 44) & 127)]) + ((0.0039441099999999998 * fVec1[((IOTA - 42) & 127)]) + ((0.0097659400000000007 * fVec1[((IOTA - 39) & 127)]) + ((0.0076369999999999997 * fVec1[((IOTA - 36) & 127)]) + ((0.015424400000000001 * fVec1[((IOTA - 35) & 127)]) + ((0.0018063700000000001 * fVec1[((IOTA - 32) & 127)]) + ((0.00736515 * fVec1[((IOTA - 31) & 127)]) + ((0.0126468 * fVec1[((IOTA - 30) & 127)]) + ((0.0011752499999999999 * fVec1[((IOTA - 27) & 127)]) + ((0.022162999999999999 * fVec1[((IOTA - 26) & 127)]) + ((0.0071126699999999998 * fVec1[((IOTA - 25) & 127)]) + ((0.018755900000000002 * fVec1[((IOTA - 24) & 127)]) + ((0.0013016799999999999 * fVec1[((IOTA - 23) & 127)]) + ((0.0137094 * fVec1[((IOTA - 21) & 127)]) + ((0.024051599999999999 * fVec1[((IOTA - 18) & 127)]) + ((0.015724599999999998 * fVec1[((IOTA - 15) & 127)]) + ((0.014135400000000001 * fVec1[((IOTA - 12) & 127)]) + ((0.0011849499999999999 * fVec1[((IOTA - 9) & 127)]) + ((0.00070355200000000008 * fVec1[((IOTA - 7) & 127)]) + ((5.9634000000000005e-05 * fVec1[((IOTA - 6) & 127)]) + ((0.000133299 * fVec1[((IOTA - 5) & 127)]) + ((0.00039401200000000001 * fVec1[((IOTA - 3) & 127)]) + ((3.0720999999999999e-05 * fVec1[((IOTA - 1) & 127)]) + ((8.3709499999999999e-06 * fTemp1) + ((0.0011730600000000001 * fVec1[((IOTA - 95) & 127)]) + ((0.00057686100000000002 * fVec1[((IOTA - 106) & 127)]) + ((0.00059161900000000004 * fVec1[((IOTA - 105) & 127)]) + ((0.00049454399999999997 * fVec1[((IOTA - 104) & 127)]) + ((0.00061440799999999999 * fVec1[((IOTA - 103) & 127)]) + ((0.00061735800000000003 * fVec1[((IOTA - 102) & 127)]) + ((0.000728026 * fVec1[((IOTA - 101) & 127)]) + ((0.0016346700000000002 * fVec1[((IOTA - 94) & 127)]) + ((0.00038062800000000004 * fVec1[((IOTA - 100) & 127)]) + ((0.00062138299999999998 * fVec1[((IOTA - 99) & 127)]) + ((0.00075514600000000005 * fVec1[((IOTA - 98) & 127)]) + ((0.0021457000000000004 * fVec1[((IOTA - 93) & 127)]) + ((3.0765800000000003e-05 * fVec3[((IOTA - 119) & 127)]) + ((7.0563399999999996e-05 * fVec3[((IOTA - 118) & 127)]) + ((1.38519e-05 * fVec3[((IOTA - 115) & 127)]) + ((0.00014198999999999999 * fVec3[((IOTA - 114) & 127)]) + ((9.8497200000000003e-05 * fVec3[((IOTA - 113) & 127)]) + ((0.000185267 * fVec3[((IOTA - 112) & 127)]) + ((9.1395000000000002e-05 * fVec3[((IOTA - 111) & 127)]) + ((8.0491800000000001e-05 * fVec3[((IOTA - 110) & 127)]) + ((0.00064522800000000008 * fVec3[((IOTA - 109) & 127)]) + ((0.00058569100000000005 * fVec3[((IOTA - 108) & 127)]) + ((0.00033563700000000001 * fVec3[((IOTA - 107) & 127)]) + ((0.00035424600000000001 * fVec3[((IOTA - 106) & 127)]) + ((0.00062789300000000003 * fVec3[((IOTA - 105) & 127)]) + ((0.00034429799999999999 * fVec3[((IOTA - 104) & 127)]) + ((2.9823200000000003e-05 * fVec3[((IOTA - 103) & 127)]) + ((0.00061507300000000005 * fVec3[((IOTA - 102) & 127)]) + ((0.00037771400000000002 * fVec3[((IOTA - 101) & 127)]) + ((0.00015985700000000001 * fVec3[((IOTA - 100) & 127)]) + ((0.000190946 * fVec3[((IOTA - 99) & 127)]) + ((0.00050743800000000003 * fVec3[((IOTA - 98) & 127)]) + ((0.00056488300000000007 * fVec3[((IOTA - 97) & 127)]) + ((8.1509000000000009e-05 * fVec3[((IOTA - 96) & 127)]) + ((0.00037732899999999998 * fVec3[((IOTA - 95) & 127)]) + ((0.00041022299999999998 * fVec3[((IOTA - 93) & 127)]) + ((0.00085697799999999999 * fVec3[((IOTA - 92) & 127)]) + ((0.000105676 * fVec3[((IOTA - 83) & 127)]) + ((0.00056615599999999995 * fVec3[((IOTA - 7) & 127)]) + ((0.00058234700000000009 * fVec3[((IOTA - 5) & 127)]) + ((0.00027969900000000001 * fVec3[((IOTA - 3) & 127)]) + ((4.34537e-05 * fVec3[((IOTA - 1) & 127)]) + ((0.011357900000000001 * fVec3[((IOTA - 14) & 127)]) + ((0.0037318799999999999 * fVec3[((IOTA - 12) & 127)]) + ((0.00052492499999999998 * fVec3[((IOTA - 75) & 127)]) + ((0.0022562899999999998 * fVec3[((IOTA - 74) & 127)]) + ((0.000321723 * fVec3[((IOTA - 73) & 127)]) + ((0.00080229500000000007 * fVec3[((IOTA - 72) & 127)]) + ((0.0019222600000000001 * fVec3[((IOTA - 71) & 127)]) + ((0.0028435500000000002 * fVec3[((IOTA - 70) & 127)]) + ((4.2787900000000004e-05 * fVec3[((IOTA - 69) & 127)]) + ((0.0024381200000000002 * fVec3[((IOTA - 67) & 127)]) + ((0.0023961899999999999 * fVec3[((IOTA - 66) & 127)]) + ((0.0021430799999999999 * fVec3[((IOTA - 65) & 127)]) + ((0.0030028400000000001 * fVec3[((IOTA - 64) & 127)]) + ((0.00058073100000000002 * fVec3[((IOTA - 63) & 127)]) + ((0.0017794099999999999 * fVec3[((IOTA - 51) & 127)]) + ((0.00225201 * fVec3[((IOTA - 48) & 127)]) + ((0.0035764999999999998 * fVec3[((IOTA - 47) & 127)]) + ((0.0050062100000000005 * fVec3[((IOTA - 46) & 127)]) + ((0.00090678400000000011 * fVec3[((IOTA - 45) & 127)]) + ((0.0060474300000000003 * fVec3[((IOTA - 42) & 127)]) + ((0.0049879100000000008 * fVec3[((IOTA - 41) & 127)]) + ((0.0040529299999999997 * fVec3[((IOTA - 40) & 127)]) + ((0.0083491300000000015 * fVec3[((IOTA - 39) & 127)]) + ((0.011238600000000001 * fVec3[((IOTA - 36) & 127)]) + ((7.6854400000000007e-05 * fVec3[((IOTA - 34) & 127)]) + ((0.0100301 * fVec3[((IOTA - 33) & 127)]) + ((0.0053935399999999996 * fVec3[((IOTA - 32) & 127)]) + ((0.0073630199999999996 * fVec3[((IOTA - 28) & 127)]) + ((0.016863099999999999 * fVec3[((IOTA - 27) & 127)]) + ((0.0087242399999999994 * fVec3[((IOTA - 24) & 127)]) + ((0.027741399999999999 * fVec3[((IOTA - 22) & 127)]) + ((0.0366919 * fVec3[((IOTA - 19) & 127)]) + ((0.0010972500000000001 * fVec3[((IOTA - 11) & 127)]) + ((0.00061125900000000006 * fVec3[((IOTA - 9) & 127)]) + ((7.1292100000000001e-05 * fVec4[((IOTA - 115) & 127)]) + ((6.8217500000000009e-05 * fVec3[((IOTA - 10) & 127)]) + ((0.00018952700000000002 * fVec4[((IOTA - 111) & 127)]) + ((0.00035912999999999999 * fVec4[((IOTA - 110) & 127)]) + ((0.00051251200000000002 * fVec4[((IOTA - 109) & 127)]) + ((0.00046264500000000003 * fVec4[((IOTA - 108) & 127)]) + ((0.00014609200000000001 * fVec4[((IOTA - 107) & 127)]) + ((0.000122237 * fVec4[((IOTA - 106) & 127)]) + ((2.0314199999999999e-05 * fVec4[((IOTA - 105) & 127)]) + ((3.2517300000000001e-05 * fVec4[((IOTA - 104) & 127)]) + ((7.679690000000001e-05 * fVec4[((IOTA - 103) & 127)]) + ((0.00081181999999999999 * fVec4[((IOTA - 102) & 127)]) + ((0.0010270300000000002 * fVec4[((IOTA - 101) & 127)]) + ((0.00033934900000000002 * fVec4[((IOTA - 100) & 127)]) + ((0.00067179499999999999 * fVec4[((IOTA - 99) & 127)]) + ((0.0015498300000000001 * fVec4[((IOTA - 98) & 127)]) + ((0.00193557 * fVec4[((IOTA - 97) & 127)]) + ((0.0012977900000000001 * fVec4[((IOTA - 96) & 127)]) + ((0.00173953 * fVec4[((IOTA - 92) & 127)]) + ((0.0020737100000000003 * fVec4[((IOTA - 91) & 127)]) + ((0.00132314 * fVec4[((IOTA - 90) & 127)]) + ((0.00050203100000000001 * fVec4[((IOTA - 89) & 127)]) + ((2.5817700000000002e-05 * fVec4[((IOTA - 81) & 127)]) + ((0.0008419320000000001 * fVec4[((IOTA - 80) & 127)]) + ((0.00087629800000000007 * fVec4[((IOTA - 79) & 127)]) + ((0.000245352 * fVec4[((IOTA - 70) & 127)]) + ((0.0012620800000000001 * fVec4[((IOTA - 69) & 127)]) + ((0.0023085100000000002 * fVec4[((IOTA - 68) & 127)]) + ((0.002405 * fVec4[((IOTA - 67) & 127)]) + ((0.014772 * fVec4[((IOTA - 34) & 127)]) + ((0.0058612900000000008 * fVec4[((IOTA - 31) & 127)]) + ((0.0057233800000000001 * fVec4[((IOTA - 28) & 127)]) + ((0.0152522 * fVec4[((IOTA - 27) & 127)]) + ((0.0102524 * fVec4[((IOTA - 26) & 127)]) + ((0.018531200000000001 * fVec4[((IOTA - 25) & 127)]) + ((0.044155600000000003 * fVec4[((IOTA - 22) & 127)]) + ((0.0081954799999999998 * fVec4[((IOTA - 21) & 127)]) + ((0.022452899999999998 * fVec4[((IOTA - 16) & 127)]) + ((0.0121954 * fVec4[((IOTA - 15) & 127)]) + ((0.0109563 * fVec4[((IOTA - 12) & 127)]) + ((0.00016957000000000002 * fVec4[((IOTA - 11) & 127)]) + ((0.00010783300000000001 * fVec4[((IOTA - 10) & 127)]) + ((0.00024862500000000004 * fVec4[((IOTA - 9) & 127)]) + ((0.00084071099999999995 * fVec4[((IOTA - 7) & 127)]) + ((9.0162999999999997e-05 * fVec4[((IOTA - 4) & 127)]) + ((0.00036489900000000002 * fVec4[((IOTA - 3) & 127)]) + ((4.0528500000000005e-06 * fTemp4) + ((0.00025800500000000001 * fVec4[((IOTA - 40) & 127)]) + ((0.0064505600000000001 * fVec4[((IOTA - 38) & 127)]) + ((0.0014007000000000002 * fVec4[((IOTA - 66) & 127)]) + ((0.00093808200000000002 * fVec4[((IOTA - 64) & 127)]) + ((0.0028319 * fVec4[((IOTA - 63) & 127)]) + ((0.00071589500000000003 * fVec4[((IOTA - 60) & 127)]) + ((0.0012767 * fVec4[((IOTA - 59) & 127)]) + ((0.0016556800000000001 * fVec4[((IOTA - 58) & 127)]) + ((0.0023854900000000001 * fVec4[((IOTA - 57) & 127)]) + ((0.00071006400000000005 * fVec4[((IOTA - 56) & 127)]) + ((0.0023205399999999998 * fVec4[((IOTA - 54) & 127)]) + ((0.0019624999999999998 * fVec4[((IOTA - 52) & 127)]) + ((0.0022978399999999998 * fVec4[((IOTA - 51) & 127)]) + ((0.00051752200000000008 * fVec4[((IOTA - 48) & 127)]) + ((0.0059472300000000004 * fVec4[((IOTA - 46) & 127)]) + ((0.0056101400000000004 * fVec4[((IOTA - 45) & 127)]) + ((1.16687e-06 * fVec5[((IOTA - 126) & 127)]) + ((8.0474799999999991e-06 * fVec5[((IOTA - 125) & 127)]) + ((1.1716500000000002e-05 * fVec5[((IOTA - 124) & 127)]) + ((1.6095900000000003e-05 * fVec5[((IOTA - 123) & 127)]) + ((1.2353500000000001e-05 * fVec5[((IOTA - 121) & 127)]) + ((5.0538800000000005e-05 * fVec5[((IOTA - 120) & 127)]) + ((6.90663e-05 * fVec5[((IOTA - 119) & 127)]) + ((7.1261200000000008e-05 * fVec5[((IOTA - 110) & 127)]) + ((0.00013404500000000001 * fVec5[((IOTA - 107) & 127)]) + ((0.000144139 * fVec5[((IOTA - 103) & 127)]) + ((0.00074598600000000002 * fVec5[((IOTA - 102) & 127)]) + ((0.00041806100000000001 * fVec5[((IOTA - 101) & 127)]) + ((0.00099729399999999991 * fVec5[((IOTA - 97) & 127)]) + ((0.00072742900000000003 * fVec5[((IOTA - 96) & 127)]) + ((0.00095647000000000006 * fVec5[((IOTA - 94) & 127)]) + ((0.0019078999999999999 * fVec5[((IOTA - 93) & 127)]) + ((0.00037591000000000002 * fVec5[((IOTA - 92) & 127)]) + ((0.00091705400000000015 * fVec5[((IOTA - 91) & 127)]) + ((0.0019979199999999998 * fVec5[((IOTA - 90) & 127)]) + ((0.00084190100000000004 * fVec5[((IOTA - 89) & 127)]) + ((0.00062404300000000002 * fVec5[((IOTA - 85) & 127)]) + ((0.0010226500000000002 * fVec5[((IOTA - 84) & 127)]) + ((0.00016474200000000003 * fVec5[((IOTA - 82) & 127)]) + ((0.00111031 * fVec5[((IOTA - 81) & 127)]) + ((0.0010574600000000001 * fVec5[((IOTA - 80) & 127)]) + ((0.00226954 * fVec5[((IOTA - 62) & 127)]) + ((0.0017599800000000002 * fVec5[((IOTA - 61) & 127)]) + ((0.00071835900000000001 * fVec5[((IOTA - 58) & 127)]) + ((0.0012819700000000001 * fVec5[((IOTA - 57) & 127)]) + ((0.000143156 * fVec5[((IOTA - 55) & 127)]) + ((0.00051545500000000006 * fVec5[((IOTA - 54) & 127)]) + ((0.00011347700000000001 * fVec5[((IOTA - 53) & 127)]) + ((0.00065408100000000004 * fVec5[((IOTA - 52) & 127)]) + ((0.0046855900000000008 * fVec5[((IOTA - 51) & 127)]) + ((0.0086597399999999991 * fVec5[((IOTA - 50) & 127)]) + ((0.0090186299999999997 * fVec5[((IOTA - 49) & 127)]) + ((0.00194699 * fVec5[((IOTA - 48) & 127)]) + ((0.00031685400000000004 * fVec5[((IOTA - 46) & 127)]) + ((0.0069549800000000004 * fVec5[((IOTA - 45) & 127)]) + ((0.011236100000000001 * fVec5[((IOTA - 44) & 127)]) + ((0.0059433200000000002 * fVec5[((IOTA - 43) & 127)]) + ((0.00041302300000000005 * fVec5[((IOTA - 40) & 127)]) + ((0.00281839 * fVec5[((IOTA - 39) & 127)]) + ((0.019649799999999999 * fVec5[((IOTA - 30) & 127)]) + ((0.0053291099999999997 * fVec5[((IOTA - 26) & 127)]) + ((0.0035138299999999999 * fVec5[((IOTA - 25) & 127)]) + ((0.024438399999999999 * fVec5[((IOTA - 22) & 127)]) + ((0.0101949 * fVec5[((IOTA - 21) & 127)]) + ((0.026200899999999999 * fVec5[((IOTA - 20) & 127)]) + ((0.0667629 * fVec5[((IOTA - 19) & 127)]) + ((0.0107382 * fVec5[((IOTA - 18) & 127)]) + ((0.0291912 * fVec5[((IOTA - 17) & 127)]) + ((0.029706100000000003 * fVec5[((IOTA - 16) & 127)]) + ((0.011985200000000001 * fVec5[((IOTA - 15) & 127)]) + ((0.00355895 * fVec5[((IOTA - 10) & 127)]) + ((0.0019467900000000001 * fVec5[((IOTA - 8) & 127)]) + ((0.00139101 * fVec5[((IOTA - 6) & 127)]) + ((0.00016791500000000001 * fVec5[((IOTA - 4) & 127)]) + ((0.00029155500000000004 * fVec5[((IOTA - 2) & 127)]) + ((0.000305641 * fVec5[((IOTA - 68) & 127)]) + ((0.000773294 * fVec5[((IOTA - 67) & 127)]) + ((0.0012639700000000001 * fVec5[((IOTA - 77) & 127)]) + ((0.00089859899999999993 * fVec5[((IOTA - 76) & 127)]) + ((0.00095380500000000006 * fVec5[((IOTA - 72) & 127)]) + ((1.3822700000000001e-06 * fVec6[((IOTA - 126) & 127)]) + ((4.3207799999999997e-06 * fVec6[((IOTA - 125) & 127)]) + ((7.0508400000000002e-07 * fVec6[((IOTA - 123) & 127)]) + ((8.1874899999999997e-07 * fVec6[((IOTA - 122) & 127)]) + ((4.9958900000000007e-05 * fVec6[((IOTA - 121) & 127)]) + ((4.8874300000000007e-05 * fVec6[((IOTA - 120) & 127)]) + ((3.0540600000000004e-05 * fVec6[((IOTA - 119) & 127)]) + ((8.9455700000000012e-05 * fVec6[((IOTA - 116) & 127)]) + ((7.5434700000000005e-05 * fVec6[((IOTA - 115) & 127)]) + ((0.00014591800000000001 * fVec6[((IOTA - 114) & 127)]) + ((0.00032979500000000002 * fVec6[((IOTA - 109) & 127)]) + ((0.00027301799999999998 * fVec6[((IOTA - 108) & 127)]) + ((2.9295999999999999e-06 * fVec6[((IOTA - 106) & 127)]) + ((0.00041821300000000002 * fVec6[((IOTA - 105) & 127)]) + ((0.00016436200000000001 * fVec6[((IOTA - 104) & 127)]) + ((1.0304700000000001e-05 * fVec6[((IOTA - 103) & 127)]) + ((9.9420300000000014e-05 * fVec6[((IOTA - 102) & 127)]) + ((0.000143957 * fVec6[((IOTA - 101) & 127)]) + ((0.00068593000000000007 * fVec6[((IOTA - 97) & 127)]) + ((0.0022403200000000001 * fVec6[((IOTA - 96) & 127)]) + ((0.00054845200000000005 * fVec6[((IOTA - 95) & 127)]) + ((0.0013290999999999999 * fVec6[((IOTA - 90) & 127)]) + ((0.0010531200000000001 * fVec6[((IOTA - 86) & 127)]) + ((0.00043581100000000003 * fVec6[((IOTA - 85) & 127)]) + ((0.00043643700000000002 * fVec6[((IOTA - 84) & 127)]) + ((0.00088380000000000002 * fVec6[((IOTA - 83) & 127)]) + ((0.00047224300000000001 * fVec6[((IOTA - 79) & 127)]) + ((0.00094611000000000001 * fVec6[((IOTA - 78) & 127)]) + ((0.0014756400000000001 * fVec6[((IOTA - 65) & 127)]) + ((0.0014824 * fVec6[((IOTA - 64) & 127)]) + ((0.000313016 * fVec6[((IOTA - 63) & 127)]) + ((0.00046532900000000006 * fVec6[((IOTA - 61) & 127)]) + ((0.0014774499999999999 * fVec6[((IOTA - 57) & 127)]) + ((0.0052267299999999997 * fVec6[((IOTA - 56) & 127)]) + ((0.0049627400000000002 * fVec6[((IOTA - 55) & 127)]) + ((0.00034213000000000001 * fVec6[((IOTA - 54) & 127)]) + ((0.00171871 * fVec6[((IOTA - 52) & 127)]) + ((0.00204601 * fVec6[((IOTA - 51) & 127)]) + ((0.00172897 * fVec6[((IOTA - 44) & 127)]) + ((0.0059491199999999996 * fVec6[((IOTA - 43) & 127)]) + ((0.0069924600000000007 * fVec6[((IOTA - 42) & 127)]) + ((0.0046671199999999994 * fVec6[((IOTA - 38) & 127)]) + ((0.0074278399999999998 * fVec6[((IOTA - 37) & 127)]) + ((0.0038431400000000001 * fVec6[((IOTA - 33) & 127)]) + ((0.001851 * fVec6[((IOTA - 32) & 127)]) + ((0.00023100900000000004 * fVec6[((IOTA - 31) & 127)]) + ((0.0018550299999999999 * fVec6[((IOTA - 30) & 127)]) + ((0.0068345300000000001 * fVec6[((IOTA - 29) & 127)]) + ((0.0065994599999999997 * fVec6[((IOTA - 28) & 127)]) + ((0.0086483799999999989 * fVec6[((IOTA - 26) & 127)]) + ((0.034778900000000001 * fVec6[((IOTA - 25) & 127)]) + ((0.0033660500000000002 * fVec6[((IOTA - 21) & 127)]) + ((0.0166362 * fVec6[((IOTA - 19) & 127)]) + ((0.013249500000000001 * fVec6[((IOTA - 18) & 127)]) + ((0.0149275 * fVec6[((IOTA - 15) & 127)]) + ((0.00153611 * fVec6[((IOTA - 12) & 127)]) + ((0.00022380100000000001 * fVec6[((IOTA - 11) & 127)]) + ((0.0002062 * fVec6[((IOTA - 10) & 127)]) + ((0.00029508100000000004 * fVec6[((IOTA - 9) & 127)]) + ((9.3157600000000004e-05 * fVec6[((IOTA - 7) & 127)]) + ((0.00083150800000000001 * fVec6[((IOTA - 6) & 127)]) + ((0.000139085 * fVec6[((IOTA - 3) & 127)]) + ((0.000100796 * fVec6[((IOTA - 2) & 127)]) + ((5.4869299999999995e-06 * fTemp6) + ((0.00034605900000000002 * fVec6[((IOTA - 68) & 127)]) + ((0.00166238 * fVec6[((IOTA - 67) & 127)]) + ((0.00061167100000000005 * fVec6[((IOTA - 66) & 127)]) + ((0.0029536099999999997 * fVec6[((IOTA - 75) & 127)]) + ((0.0014493400000000001 * fVec6[((IOTA - 74) & 127)]) + ((0.00033464100000000005 * fVec6[((IOTA - 71) & 127)]) + ((0.000284002 * fVec6[((IOTA - 70) & 127)]) + ((1.2067399999999999e-06 * fVec7[((IOTA - 126) & 127)]) + ((1.4484800000000001e-05 * fVec7[((IOTA - 123) & 127)]) + ((2.1146600000000005e-05 * fVec7[((IOTA - 122) & 127)]) + ((3.7560900000000002e-05 * fVec7[((IOTA - 121) & 127)]) + ((5.5921400000000003e-05 * fVec7[((IOTA - 120) & 127)]) + ((2.8070300000000005e-05 * fVec7[((IOTA - 119) & 127)]) + ((3.5723000000000003e-05 * fVec7[((IOTA - 118) & 127)]) + ((6.8163800000000006e-05 * fVec7[((IOTA - 117) & 127)]) + ((2.3925e-06 * fVec7[((IOTA - 116) & 127)]) + ((0.00014829900000000001 * fVec7[((IOTA - 108) & 127)]) + ((0.00037316500000000001 * fVec7[((IOTA - 105) & 127)]) + ((0.00039246300000000001 * fVec7[((IOTA - 104) & 127)]) + ((0.00069076200000000004 * fVec7[((IOTA - 98) & 127)]) + ((0.00059752000000000004 * fVec7[((IOTA - 97) & 127)]) + ((3.8900100000000004e-05 * fVec7[((IOTA - 96) & 127)]) + ((0.00104006 * fVec7[((IOTA - 95) & 127)]) + ((0.0024621700000000001 * fVec7[((IOTA - 94) & 127)]) + ((0.0011040900000000001 * fVec7[((IOTA - 93) & 127)]) + ((0.00025218300000000001 * fVec7[((IOTA - 92) & 127)]) + ((0.000582052 * fVec7[((IOTA - 87) & 127)]) + ((0.00181963 * fVec7[((IOTA - 86) & 127)]) + ((0.00027008400000000003 * fVec7[((IOTA - 83) & 127)]) + ((3.9284900000000001e-05 * fVec7[((IOTA - 82) & 127)]) + ((0.0023190699999999999 * fVec7[((IOTA - 78) & 127)]) + ((0.0031104100000000001 * fVec7[((IOTA - 77) & 127)]) + ((0.0018716399999999999 * fVec7[((IOTA - 76) & 127)]) + ((0.00173413 * fVec7[((IOTA - 75) & 127)]) + ((0.00046513499999999998 * fVec7[((IOTA - 74) & 127)]) + ((0.00070995800000000001 * fVec7[((IOTA - 73) & 127)]) + ((0.00136597 * fVec7[((IOTA - 72) & 127)]) + ((0.0005198920000000001 * fVec7[((IOTA - 66) & 127)]) + ((0.00252236 * fVec7[((IOTA - 65) & 127)]) + ((0.00148653 * fVec7[((IOTA - 64) & 127)]) + ((0.0031196700000000002 * fVec7[((IOTA - 54) & 127)]) + ((0.0014963299999999999 * fVec7[((IOTA - 53) & 127)]) + ((0.0021004299999999999 * fVec7[((IOTA - 52) & 127)]) + ((0.0077831999999999997 * fVec7[((IOTA - 51) & 127)]) + ((0.0044508500000000001 * fVec7[((IOTA - 50) & 127)]) + ((0.0021174599999999998 * fVec7[((IOTA - 49) & 127)]) + ((0.0040522299999999995 * fVec7[((IOTA - 48) & 127)]) + ((0.0064639199999999997 * fVec7[((IOTA - 47) & 127)]) + ((0.0059821600000000003 * fVec7[((IOTA - 46) & 127)]) + ((0.0034409700000000002 * fVec7[((IOTA - 45) & 127)]) + ((0.0067079800000000005 * fVec7[((IOTA - 44) & 127)]) + ((0.0079398100000000003 * fVec7[((IOTA - 43) & 127)]) + ((0.0101911 * fVec7[((IOTA - 42) & 127)]) + ((0.0084519999999999994 * fVec7[((IOTA - 41) & 127)]) + ((0.0027287100000000001 * fVec7[((IOTA - 40) & 127)]) + ((0.0016985100000000001 * fVec7[((IOTA - 35) & 127)]) + ((0.057691300000000001 * fVec7[((IOTA - 23) & 127)]) + ((0.016169199999999998 * fVec7[((IOTA - 22) & 127)]) + ((0.044694299999999999 * fVec7[((IOTA - 20) & 127)]) + ((0.073524500000000007 * fVec7[((IOTA - 19) & 127)]) + ((0.046224100000000004 * fVec7[((IOTA - 18) & 127)]) + ((0.039818899999999997 * fVec7[((IOTA - 16) & 127)]) + ((0.030653800000000002 * fVec7[((IOTA - 15) & 127)]) + ((0.0028312599999999999 * fVec7[((IOTA - 10) & 127)]) + ((0.00023471600000000002 * fVec7[((IOTA - 8) & 127)]) + ((0.0016646499999999999 * fVec7[((IOTA - 6) & 127)]) + ((0.00018944099999999999 * fVec7[((IOTA - 4) & 127)]) + ((0.00041035500000000005 * fVec7[((IOTA - 2) & 127)]) + ((0.00049729599999999994 * fVec7[((IOTA - 61) & 127)]) + ((0.0017160000000000001 * fVec7[((IOTA - 60) & 127)]) + ((0.000571158 * fVec7[((IOTA - 59) & 127)]) + ((1.06705e-06 * fVec8[((IOTA - 126) & 127)]) + ((3.8319600000000005e-05 * fVec8[((IOTA - 122) & 127)]) + ((5.611290000000001e-05 * fVec8[((IOTA - 121) & 127)]) + ((4.3469500000000001e-05 * fVec8[((IOTA - 120) & 127)]) + ((4.8748200000000002e-05 * fVec8[((IOTA - 117) & 127)]) + ((0.000144938 * fVec8[((IOTA - 110) & 127)]) + ((7.2644700000000013e-05 * fVec8[((IOTA - 104) & 127)]) + ((1.0278999999999999e-06 * fVec8[((IOTA - 103) & 127)]) + ((0.0011606799999999999 * fVec8[((IOTA - 96) & 127)]) + ((0.0031629900000000001 * fVec8[((IOTA - 95) & 127)]) + ((0.00078389600000000007 * fVec8[((IOTA - 94) & 127)]) + ((3.61728e-05 * fVec8[((IOTA - 91) & 127)]) + ((0.0022532999999999997 * fVec8[((IOTA - 86) & 127)]) + ((0.00053547700000000002 * fVec8[((IOTA - 77) & 127)]) + ((0.00078204200000000005 * fVec8[((IOTA - 79) & 127)]) + ((0.00089492 * fVec8[((IOTA - 76) & 127)]) + ((0.00098582100000000001 * fVec8[((IOTA - 75) & 127)]) + ((0.0010638000000000002 * fVec8[((IOTA - 74) & 127)]) + ((0.0020713300000000001 * fVec8[((IOTA - 72) & 127)]) + ((0.00287405 * fVec8[((IOTA - 71) & 127)]) + ((0.0018535400000000001 * fVec8[((IOTA - 70) & 127)]) + ((0.0024114399999999999 * fVec8[((IOTA - 69) & 127)]) + ((0.0054627 * fVec8[((IOTA - 68) & 127)]) + ((0.0053478500000000003 * fVec8[((IOTA - 67) & 127)]) + ((0.0036506200000000003 * fVec8[((IOTA - 66) & 127)]) + ((0.0039108500000000004 * fVec8[((IOTA - 65) & 127)]) + ((0.00124406 * fVec8[((IOTA - 64) & 127)]) + ((0.00066612700000000008 * fVec8[((IOTA - 53) & 127)]) + ((0.00021471700000000001 * fVec8[((IOTA - 42) & 127)]) + ((0.0083305600000000007 * fVec8[((IOTA - 38) & 127)]) + ((0.0016041499999999999 * fVec8[((IOTA - 34) & 127)]) + ((0.018119700000000002 * fVec8[((IOTA - 33) & 127)]) + ((0.036438700000000004 * fVec8[((IOTA - 30) & 127)]) + ((0.027385400000000001 * fVec8[((IOTA - 29) & 127)]) + ((0.0048108300000000003 * fVec8[((IOTA - 28) & 127)]) + ((0.040978300000000002 * fVec8[((IOTA - 27) & 127)]) + ((0.049985600000000005 * fVec8[((IOTA - 26) & 127)]) + ((0.038770699999999998 * fVec8[((IOTA - 24) & 127)]) + ((0.10758200000000001 * fVec8[((IOTA - 23) & 127)]) + ((0.021392099999999997 * fVec8[((IOTA - 22) & 127)]) + ((0.041771900000000008 * fVec8[((IOTA - 20) & 127)]) + ((0.055177400000000001 * fVec8[((IOTA - 19) & 127)]) + ((0.0108086 * fVec8[((IOTA - 18) & 127)]) + ((0.0026607500000000004 * fVec8[((IOTA - 10) & 127)]) + ((0.00066903899999999996 * fVec8[((IOTA - 8) & 127)]) + ((0.0013556799999999999 * fVec8[((IOTA - 6) & 127)]) + ((0.00012807300000000001 * fVec8[((IOTA - 4) & 127)]) + ((0.000378556 * fVec8[((IOTA - 2) & 127)]) + ((4.9495899999999995e-07 * fVec9[((IOTA - 126) & 127)]) + ((2.773e-06 * fVec9[((IOTA - 125) & 127)]) + ((5.3135e-06 * fVec9[((IOTA - 121) & 127)]) + ((2.8457499999999998e-06 * fVec9[((IOTA - 117) & 127)]) + ((2.4558300000000005e-05 * fVec9[((IOTA - 116) & 127)]) + ((5.2591200000000006e-05 * fVec9[((IOTA - 112) & 127)]) + ((0.00024796200000000001 * fVec9[((IOTA - 111) & 127)]) + ((0.00014221200000000001 * fVec9[((IOTA - 110) & 127)]) + ((0.00010309 * fVec9[((IOTA - 108) & 127)]) + ((0.00018337600000000001 * fVec9[((IOTA - 107) & 127)]) + ((0.00035608600000000003 * fVec9[((IOTA - 106) & 127)]) + ((0.00034403800000000002 * fVec9[((IOTA - 105) & 127)]) + ((0.00025383300000000002 * fVec9[((IOTA - 104) & 127)]) + ((0.00028535700000000003 * fVec9[((IOTA - 103) & 127)]) + ((0.00070562000000000001 * fVec9[((IOTA - 102) & 127)]) + ((0.0005151 * fVec9[((IOTA - 101) & 127)]) + ((0.00032077100000000002 * fVec9[((IOTA - 100) & 127)]) + ((9.0654800000000018e-05 * fVec9[((IOTA - 99) & 127)]) + ((0.00071143700000000009 * fVec9[((IOTA - 98) & 127)]) + ((0.0014366699999999999 * fVec9[((IOTA - 97) & 127)]) + ((0.00124614 * fVec9[((IOTA - 94) & 127)]) + ((0.0022713 * fVec9[((IOTA - 93) & 127)]) + ((0.00127749 * fVec9[((IOTA - 86) & 127)]) + ((6.2936500000000003e-05 * fVec9[((IOTA - 77) & 127)]) + ((2.0687900000000002e-05 * fVec9[((IOTA - 76) & 127)]) + ((0.00074920100000000001 * fVec9[((IOTA - 72) & 127)]) + ((0.00108661 * fVec9[((IOTA - 71) & 127)]) + ((0.00066226100000000003 * fVec9[((IOTA - 70) & 127)]) + ((0.00221192 * fVec9[((IOTA - 68) & 127)]) + ((0.0036181899999999999 * fVec9[((IOTA - 67) & 127)]) + ((3.8066800000000006e-05 * fVec9[((IOTA - 66) & 127)]) + ((2.7286800000000004e-05 * fVec9[((IOTA - 64) & 127)]) + ((0.0014662800000000001 * fVec9[((IOTA - 63) & 127)]) + ((0.0025716599999999999 * fVec9[((IOTA - 62) & 127)]) + ((0.00040080500000000001 * fVec9[((IOTA - 61) & 127)]) + ((0.0022166500000000001 * fVec9[((IOTA - 59) & 127)]) + ((0.0027539400000000003 * fVec9[((IOTA - 58) & 127)]) + ((0.000547636 * fVec9[((IOTA - 57) & 127)]) + ((0.0034324300000000002 * fVec9[((IOTA - 56) & 127)]) + ((0.0028814800000000001 * fVec9[((IOTA - 55) & 127)]) + ((0.00020467599999999999 * fVec9[((IOTA - 54) & 127)]) + ((0.0025276200000000004 * fVec9[((IOTA - 51) & 127)]) + ((0.0045955500000000003 * fVec9[((IOTA - 50) & 127)]) + ((0.0021549399999999997 * fVec9[((IOTA - 44) & 127)]) + ((0.0013761300000000001 * fVec9[((IOTA - 41) & 127)]) + ((0.002183 * fVec9[((IOTA - 38) & 127)]) + ((0.0030387000000000001 * fVec9[((IOTA - 36) & 127)]) + ((0.021556799999999997 * fVec9[((IOTA - 35) & 127)]) + ((0.023527200000000002 * fVec9[((IOTA - 32) & 127)]) + ((0.0021948500000000004 * fVec9[((IOTA - 31) & 127)]) + ((0.00051807200000000006 * fVec9[((IOTA - 29) & 127)]) + ((0.024944000000000001 * fVec9[((IOTA - 26) & 127)]) + ((0.0035849099999999997 * fVec9[((IOTA - 25) & 127)]) + ((0.011300600000000001 * fVec9[((IOTA - 19) & 127)]) + ((0.0094331200000000014 * fVec9[((IOTA - 18) & 127)]) + ((0.0071840999999999997 * fVec9[((IOTA - 15) & 127)]) + ((0.00027813700000000002 * fVec9[((IOTA - 12) & 127)]) + ((0.00027818999999999999 * fVec9[((IOTA - 11) & 127)]) + ((0.00033955200000000002 * fVec9[((IOTA - 10) & 127)]) + ((0.00022609 * fVec9[((IOTA - 9) & 127)]) + ((0.00016021500000000001 * fVec9[((IOTA - 7) & 127)]) + ((0.000240886 * fVec9[((IOTA - 6) & 127)]) + ((2.4972599999999999e-05 * fVec9[((IOTA - 3) & 127)]) + ((5.2352700000000004e-05 * fVec9[((IOTA - 2) & 127)]) + ((4.2462999999999995e-06 * fTemp9) + ((0.00070097300000000003 * fVec9[((IOTA - 85) & 127)]) + ((8.9630500000000016e-08 * fVec10[((IOTA - 126) & 127)]) + ((4.86084e-05 * fVec10[((IOTA - 119) & 127)]) + ((3.0215200000000005e-05 * fVec10[((IOTA - 118) & 127)]) + ((0.00010084700000000001 * fVec10[((IOTA - 110) & 127)]) + ((0.00034166200000000001 * fVec10[((IOTA - 109) & 127)]) + ((0.000204718 * fVec10[((IOTA - 108) & 127)]) + ((0.00033797299999999998 * fVec10[((IOTA - 107) & 127)]) + ((0.00045785700000000004 * fVec10[((IOTA - 106) & 127)]) + ((0.00013590400000000001 * fVec10[((IOTA - 105) & 127)]) + ((6.0929900000000008e-05 * fVec10[((IOTA - 104) & 127)]) + ((0.000208667 * fVec10[((IOTA - 102) & 127)]) + ((0.00030785900000000001 * fVec10[((IOTA - 101) & 127)]) + ((0.00026147399999999998 * fVec10[((IOTA - 100) & 127)]) + ((0.00048677700000000003 * fVec10[((IOTA - 99) & 127)]) + ((0.0012107800000000001 * fVec10[((IOTA - 98) & 127)]) + ((0.00076490500000000008 * fVec10[((IOTA - 97) & 127)]) + ((0.00058266999999999998 * fVec10[((IOTA - 94) & 127)]) + ((0.00082486899999999999 * fVec10[((IOTA - 93) & 127)]) + ((0.0011506799999999998 * fVec10[((IOTA - 92) & 127)]) + ((3.5632800000000002e-05 * fVec10[((IOTA - 91) & 127)]) + ((3.64663e-05 * fVec10[((IOTA - 90) & 127)]) + ((0.00056137899999999998 * fVec10[((IOTA - 88) & 127)]) + ((0.00015598000000000001 * fVec10[((IOTA - 87) & 127)]) + ((0.00076870700000000009 * fVec10[((IOTA - 84) & 127)]) + ((0.0014322200000000001 * fVec10[((IOTA - 83) & 127)]) + ((0.00046067700000000005 * fVec10[((IOTA - 82) & 127)]) + ((0.00064690400000000001 * fVec10[((IOTA - 79) & 127)]) + ((0.00271718 * fVec10[((IOTA - 75) & 127)]) + ((6.2586200000000001e-05 * fVec10[((IOTA - 72) & 127)]) + ((0.00117567 * fVec10[((IOTA - 71) & 127)]) + ((0.0012521400000000001 * fVec10[((IOTA - 70) & 127)]) + ((0.00055114699999999999 * fVec10[((IOTA - 66) & 127)]) + ((0.00110439 * fVec10[((IOTA - 65) & 127)]) + ((0.0016155 * fVec10[((IOTA - 64) & 127)]) + ((0.0021511500000000001 * fVec10[((IOTA - 63) & 127)]) + ((0.0019438999999999999 * fVec10[((IOTA - 60) & 127)]) + ((0.00122438 * fVec10[((IOTA - 52) & 127)]) + ((0.0070393900000000004 * fVec10[((IOTA - 39) & 127)]) + ((0.0048936500000000003 * fVec10[((IOTA - 37) & 127)]) + ((0.0095701499999999995 * fVec10[((IOTA - 36) & 127)]) + ((0.015800600000000001 * fVec10[((IOTA - 33) & 127)]) + ((0.011886499999999999 * fVec10[((IOTA - 32) & 127)]) + ((0.0058739299999999994 * fVec10[((IOTA - 30) & 127)]) + ((0.024750999999999999 * fVec10[((IOTA - 29) & 127)]) + ((0.0086730599999999998 * fVec10[((IOTA - 28) & 127)]) + ((0.023463500000000002 * fVec10[((IOTA - 26) & 127)]) + ((0.052758300000000001 * fVec10[((IOTA - 25) & 127)]) + ((0.0124978 * fVec10[((IOTA - 24) & 127)]) + ((0.035996800000000002 * fVec10[((IOTA - 22) & 127)]) + ((0.013752100000000001 * fVec10[((IOTA - 21) & 127)]) + ((0.0018844000000000001 * fVec10[((IOTA - 20) & 127)]) + ((0.0448946 * fVec10[((IOTA - 19) & 127)]) + ((0.00033159299999999998 * fVec10[((IOTA - 18) & 127)]) + ((0.00255288 * fVec10[((IOTA - 10) & 127)]) + ((0.00094661300000000001 * fVec10[((IOTA - 8) & 127)]) + ((0.0010133200000000001 * fVec10[((IOTA - 6) & 127)]) + ((0.00025746299999999998 * fVec10[((IOTA - 2) & 127)]) + ((3.43292e-08 * fVec11[((IOTA - 126) & 127)]) + ((3.3588899999999999e-06 * fVec11[((IOTA - 125) & 127)]) + ((3.9804799999999997e-06 * fVec11[((IOTA - 124) & 127)]) + ((2.0105900000000003e-05 * fVec11[((IOTA - 123) & 127)]) + ((7.7608600000000008e-05 * fVec11[((IOTA - 119) & 127)]) + ((5.0789799999999999e-05 * fVec11[((IOTA - 116) & 127)]) + ((0.00020361699999999999 * fVec11[((IOTA - 115) & 127)]) + ((0.00030080800000000001 * fVec11[((IOTA - 114) & 127)]) + ((3.2623300000000003e-05 * fVec11[((IOTA - 113) & 127)]) + ((0.00026027500000000002 * fVec11[((IOTA - 110) & 127)]) + ((0.00020187200000000002 * fVec11[((IOTA - 109) & 127)]) + ((0.00040571999999999998 * fVec11[((IOTA - 108) & 127)]) + ((0.00053009599999999997 * fVec11[((IOTA - 107) & 127)]) + ((0.00050674400000000005 * fVec11[((IOTA - 106) & 127)]) + ((0.00049718700000000006 * fVec11[((IOTA - 105) & 127)]) + ((0.0011330000000000001 * fVec11[((IOTA - 104) & 127)]) + ((0.0016271899999999999 * fVec11[((IOTA - 103) & 127)]) + ((0.00069229100000000004 * fVec11[((IOTA - 102) & 127)]) + ((0.00046662400000000006 * fVec11[((IOTA - 101) & 127)]) + ((0.00069381500000000008 * fVec11[((IOTA - 100) & 127)]) + ((0.00038071900000000001 * fVec11[((IOTA - 99) & 127)]) + ((0.00084254300000000007 * fVec11[((IOTA - 98) & 127)]) + ((0.00156339 * fVec11[((IOTA - 97) & 127)]) + ((0.0034697200000000004 * fVec11[((IOTA - 96) & 127)]) + ((0.0030116200000000004 * fVec11[((IOTA - 95) & 127)]) + ((0.00075465500000000002 * fVec11[((IOTA - 94) & 127)]) + ((0.00068181600000000002 * fVec11[((IOTA - 93) & 127)]) + ((0.00071934100000000008 * fVec11[((IOTA - 92) & 127)]) + ((0.00040184499999999996 * fVec11[((IOTA - 91) & 127)]) + ((0.00055143000000000011 * fVec11[((IOTA - 90) & 127)]) + ((0.0016723300000000001 * fVec11[((IOTA - 89) & 127)]) + ((0.0017063 * fVec11[((IOTA - 88) & 127)]) + ((0.0013395900000000001 * fVec11[((IOTA - 87) & 127)]) + ((0.0034494400000000002 * fVec11[((IOTA - 85) & 127)]) + ((0.0025590399999999998 * fVec11[((IOTA - 84) & 127)]) + ((0.0014532900000000001 * fVec11[((IOTA - 83) & 127)]) + ((0.00127111 * fVec11[((IOTA - 78) & 127)]) + ((0.0011545000000000001 * fVec11[((IOTA - 77) & 127)]) + ((0.00061171300000000006 * fVec11[((IOTA - 76) & 127)]) + ((0.00020694100000000001 * fVec11[((IOTA - 75) & 127)]) + ((0.00064708400000000003 * fVec11[((IOTA - 74) & 127)]) + ((0.0010632999999999999 * fVec11[((IOTA - 73) & 127)]) + ((0.000609699 * fVec11[((IOTA - 72) & 127)]) + ((0.00058977500000000006 * fVec11[((IOTA - 71) & 127)]) + ((0.0005591420000000001 * fVec11[((IOTA - 67) & 127)]) + ((8.8419900000000004e-05 * fVec11[((IOTA - 65) & 127)]) + ((0.00150508 * fVec11[((IOTA - 64) & 127)]) + ((0.0014054500000000001 * fVec11[((IOTA - 60) & 127)]) + ((0.00215198 * fVec11[((IOTA - 54) & 127)]) + ((0.000219724 * fVec11[((IOTA - 52) & 127)]) + ((0.0017431900000000001 * fVec11[((IOTA - 51) & 127)]) + ((0.000292148 * fVec11[((IOTA - 49) & 127)]) + ((0.00356967 * fVec11[((IOTA - 48) & 127)]) + ((0.00055458199999999997 * fVec11[((IOTA - 47) & 127)]) + ((0.0018462400000000001 * fVec11[((IOTA - 45) & 127)]) + ((0.0038023500000000003 * fVec11[((IOTA - 42) & 127)]) + ((0.0029068700000000002 * fVec11[((IOTA - 40) & 127)]) + ((0.0047945900000000005 * fVec11[((IOTA - 39) & 127)]) + ((0.0038672100000000003 * fVec11[((IOTA - 38) & 127)]) + ((4.1971900000000004e-05 * fVec11[((IOTA - 36) & 127)]) + ((0.0060181399999999999 * fVec11[((IOTA - 35) & 127)]) + ((0.0049045500000000006 * fVec11[((IOTA - 33) & 127)]) + ((0.0091428700000000009 * fVec11[((IOTA - 32) & 127)]) + ((0.0099856200000000006 * fVec11[((IOTA - 29) & 127)]) + ((0.010922899999999999 * fVec11[((IOTA - 28) & 127)]) + ((0.0013328999999999999 * fVec11[((IOTA - 24) & 127)]) + ((0.0016006100000000001 * fVec11[((IOTA - 23) & 127)]) + ((0.0099153599999999998 * fVec11[((IOTA - 22) & 127)]) + ((0.013603000000000001 * fVec11[((IOTA - 21) & 127)]) + ((0.016723499999999999 * fVec11[((IOTA - 20) & 127)]) + ((0.045127499999999994 * fVec11[((IOTA - 17) & 127)]) + ((0.0059659600000000002 * fVec11[((IOTA - 14) & 127)]) + ((0.0027371000000000001 * fVec11[((IOTA - 13) & 127)]) + ((4.6184399999999998e-05 * fVec11[((IOTA - 10) & 127)]) + ((0.0025209700000000004 * fVec11[((IOTA - 8) & 127)]) + ((0.00036855699999999999 * fVec11[((IOTA - 6) & 127)]) + ((0.00070276500000000005 * fVec11[((IOTA - 5) & 127)]) + ((0.00090358699999999997 * fVec11[((IOTA - 4) & 127)]) + ((0.000231406 * fVec11[((IOTA - 2) & 127)]) + ((4.4178200000000003e-05 * fVec11[((IOTA - 1) & 127)]) + ((1.57811e-05 * fTemp11) + ((2.5137800000000002e-07 * fVec12[((IOTA - 126) & 127)]) + ((6.1820100000000001e-06 * fVec12[((IOTA - 125) & 127)]) + ((3.82797e-06 * fVec12[((IOTA - 124) & 127)]) + ((2.1185900000000001e-06 * fVec12[((IOTA - 123) & 127)]) + ((2.7248300000000001e-05 * fVec12[((IOTA - 121) & 127)]) + ((3.8722400000000007e-05 * fVec12[((IOTA - 120) & 127)]) + ((8.2140799999999984e-06 * fVec12[((IOTA - 119) & 127)]) + ((3.8470500000000004e-05 * fVec12[((IOTA - 117) & 127)]) + ((9.096330000000001e-05 * fVec12[((IOTA - 116) & 127)]) + ((8.7317000000000004e-05 * fVec12[((IOTA - 114) & 127)]) + ((0.000227166 * fVec12[((IOTA - 113) & 127)]) + ((8.3273200000000014e-05 * fVec12[((IOTA - 112) & 127)]) + ((8.2866000000000002e-05 * fVec12[((IOTA - 111) & 127)]) + ((0.00014514899999999999 * fVec12[((IOTA - 110) & 127)]) + ((0.00010655300000000001 * fVec12[((IOTA - 108) & 127)]) + ((0.00020428199999999999 * fVec12[((IOTA - 107) & 127)]) + ((5.2586900000000003e-05 * fVec12[((IOTA - 106) & 127)]) + ((0.00036701000000000003 * fVec12[((IOTA - 105) & 127)]) + ((0.00050770799999999994 * fVec12[((IOTA - 104) & 127)]) + ((0.00025426099999999998 * fVec12[((IOTA - 101) & 127)]) + ((0.00018379600000000001 * fVec12[((IOTA - 98) & 127)]) + ((0.00035138200000000002 * fVec12[((IOTA - 97) & 127)]) + ((7.6149300000000013e-05 * fVec12[((IOTA - 95) & 127)]) + ((0.0015575400000000001 * fVec12[((IOTA - 94) & 127)]) + ((0.00063264199999999999 * fVec12[((IOTA - 93) & 127)]) + ((0.00014839199999999998 * fVec12[((IOTA - 92) & 127)]) + ((0.0026214800000000003 * fVec11[((IOTA - 86) & 127)]) + ((0.00086251900000000007 * fVec12[((IOTA - 87) & 127)]) + ((0.0019024199999999999 * fVec12[((IOTA - 86) & 127)]) + ((0.00129144 * fVec12[((IOTA - 83) & 127)]) + ((0.00047882000000000003 * fVec12[((IOTA - 78) & 127)]) + ((0.0013118799999999999 * fVec12[((IOTA - 75) & 127)]) + ((0.0011614100000000001 * fVec12[((IOTA - 74) & 127)]) + ((0.0014712700000000002 * fVec12[((IOTA - 68) & 127)]) + ((0.0026238199999999998 * fVec12[((IOTA - 67) & 127)]) + ((8.7116700000000006e-05 * fVec12[((IOTA - 66) & 127)]) + ((0.0020513699999999998 * fVec12[((IOTA - 62) & 127)]) + ((0.00160801 * fVec12[((IOTA - 61) & 127)]) + ((0.00147938 * fVec12[((IOTA - 59) & 127)]) + ((0.00013115699999999999 * fVec12[((IOTA - 58) & 127)]) + ((0.00050519600000000007 * fVec12[((IOTA - 57) & 127)]) + ((0.0016339300000000002 * fVec12[((IOTA - 56) & 127)]) + ((0.0011073599999999999 * fVec12[((IOTA - 52) & 127)]) + ((0.0016051100000000001 * fVec12[((IOTA - 50) & 127)]) + ((0.0079808199999999996 * fVec12[((IOTA - 49) & 127)]) + ((0.00196889 * fVec12[((IOTA - 48) & 127)]) + ((9.226730000000001e-05 * fVec12[((IOTA - 40) & 127)]) + ((0.0053560100000000005 * fVec12[((IOTA - 39) & 127)]) + ((0.0053043999999999999 * fVec12[((IOTA - 38) & 127)]) + ((0.00291413 * fVec12[((IOTA - 37) & 127)]) + ((0.010230900000000001 * fVec12[((IOTA - 36) & 127)]) + ((0.0073240200000000005 * fVec12[((IOTA - 35) & 127)]) + ((0.0073238899999999996 * fVec12[((IOTA - 31) & 127)]) + ((0.0105234 * fVec12[((IOTA - 30) & 127)]) + ((0.0034125200000000005 * fVec12[((IOTA - 26) & 127)]) + ((0.0069197900000000003 * fVec12[((IOTA - 25) & 127)]) + ((0.031673199999999999 * fVec12[((IOTA - 18) & 127)]) + ((0.0274497 * fVec12[((IOTA - 17) & 127)]) + ((0.0030908899999999998 * fVec12[((IOTA - 16) & 127)]) + ((0.0103427 * fVec12[((IOTA - 15) & 127)]) + ((0.0120915 * fVec12[((IOTA - 13) & 127)]) + ((0.0038904299999999998 * fVec12[((IOTA - 10) & 127)]) + ((0.0024724199999999999 * fVec12[((IOTA - 8) & 127)]) + ((0.0012886100000000001 * fVec12[((IOTA - 6) & 127)]) + ((0.00084856599999999993 * fVec12[((IOTA - 4) & 127)]) + ((0.00020222799999999999 * fVec12[((IOTA - 2) & 127)]) + ((2.0016700000000001e-05 * fVec12[((IOTA - 1) & 127)]) + ((1.4622100000000002e-05 * fTemp12) + ((0.0044432300000000003 * fVec12[((IOTA - 45) & 127)]) + ((0.000208879 * fVec12[((IOTA - 44) & 127)]) + ((2.4533100000000001e-06 * fVec13[((IOTA - 126) & 127)]) + ((1.70273e-06 * fVec13[((IOTA - 125) & 127)]) + ((8.0341699999999997e-06 * fVec13[((IOTA - 123) & 127)]) + ((3.8827600000000008e-05 * fVec13[((IOTA - 122) & 127)]) + ((0.000101833 * fVec13[((IOTA - 121) & 127)]) + ((0.000105639 * fVec13[((IOTA - 120) & 127)]) + ((3.9296600000000006e-05 * fVec13[((IOTA - 119) & 127)]) + ((0.0013145500000000001 * fVec12[((IOTA - 42) & 127)]) + ((3.85491e-05 * fVec13[((IOTA - 117) & 127)]) + ((0.00018456300000000003 * fVec13[((IOTA - 116) & 127)]) + ((0.000184012 * fVec13[((IOTA - 115) & 127)]) + ((0.0019589099999999999 * fVec13[((IOTA - 96) & 127)]) + ((0.0031713800000000001 * fVec13[((IOTA - 95) & 127)]) + ((0.00068253400000000005 * fVec13[((IOTA - 94) & 127)]) + ((0.00056285600000000003 * fVec13[((IOTA - 91) & 127)]) + ((0.0014036900000000002 * fVec13[((IOTA - 90) & 127)]) + ((0.00337025 * fVec13[((IOTA - 87) & 127)]) + ((0.0052786200000000004 * fVec13[((IOTA - 86) & 127)]) + ((0.0015441700000000001 * fVec13[((IOTA - 85) & 127)]) + ((0.00036768800000000002 * fVec13[((IOTA - 84) & 127)]) + ((0.00069545300000000007 * fVec13[((IOTA - 83) & 127)]) + ((0.0010311999999999999 * fVec13[((IOTA - 65) & 127)]) + ((0.00113331 * fVec13[((IOTA - 64) & 127)]) + ((0.0014698599999999999 * fVec13[((IOTA - 63) & 127)]) + ((0.00070883900000000006 * fVec13[((IOTA - 62) & 127)]) + ((0.0020663499999999998 * fVec13[((IOTA - 57) & 127)]) + ((0.00288332 * fVec13[((IOTA - 56) & 127)]) + ((0.0008817050000000001 * fVec13[((IOTA - 55) & 127)]) + ((0.0035919900000000002 * fVec13[((IOTA - 54) & 127)]) + ((0.0016634199999999999 * fVec13[((IOTA - 53) & 127)]) + ((0.0012247 * fVec13[((IOTA - 52) & 127)]) + ((0.00117636 * fVec13[((IOTA - 51) & 127)]) + ((0.0053477200000000003 * fVec13[((IOTA - 49) & 127)]) + ((0.00571347 * fVec13[((IOTA - 48) & 127)]) + ((0.0068109299999999998 * fVec13[((IOTA - 45) & 127)]) + ((0.00503769 * fVec13[((IOTA - 44) & 127)]) + ((0.0033690899999999999 * fVec13[((IOTA - 43) & 127)]) + ((0.0081425600000000001 * fVec13[((IOTA - 42) & 127)]) + ((0.0048383499999999999 * fVec13[((IOTA - 39) & 127)]) + ((1.73416e-05 * fVec13[((IOTA - 38) & 127)]) + ((0.0011593500000000002 * fVec13[((IOTA - 37) & 127)]) + ((0.00341282 * fVec13[((IOTA - 36) & 127)]) + ((0.0053672899999999994 * fVec13[((IOTA - 34) & 127)]) + ((0.0060068300000000003 * fVec13[((IOTA - 33) & 127)]) + ((0.036282299999999996 * fVec13[((IOTA - 30) & 127)]) + ((0.0096774400000000007 * fVec13[((IOTA - 29) & 127)]) + ((0.03066 * fVec13[((IOTA - 26) & 127)]) + ((0.0019489700000000002 * fVec13[((IOTA - 23) & 127)]) + ((9.4065400000000002e-05 * fVec13[((IOTA - 22) & 127)]) + ((0.000702438 * fVec13[((IOTA - 20) & 127)]) + ((0.0174746 * fVec13[((IOTA - 18) & 127)]) + ((0.021190899999999999 * fVec13[((IOTA - 17) & 127)]) + ((0.0025345699999999999 * fVec13[((IOTA - 16) & 127)]) + ((0.0025992000000000003 * fVec13[((IOTA - 15) & 127)]) + ((0.0061892400000000004 * fVec13[((IOTA - 13) & 127)]) + ((0.0020100199999999999 * fVec13[((IOTA - 10) & 127)]) + ((0.00148817 * fVec13[((IOTA - 8) & 127)]) + ((0.00053443399999999997 * fVec13[((IOTA - 6) & 127)]) + ((0.00069470999999999997 * fVec13[((IOTA - 4) & 127)]) + ((0.00013874000000000002 * fVec13[((IOTA - 2) & 127)]) + ((2.49699e-05 * fVec13[((IOTA - 1) & 127)]) + ((9.9362800000000004e-06 * fTemp13) + ((2.4082099999999999e-06 * fVec14[((IOTA - 126) & 127)]) + ((8.464169999999999e-06 * fVec14[((IOTA - 125) & 127)]) + ((8.8836499999999992e-06 * fVec14[((IOTA - 124) & 127)]) + ((8.7967399999999994e-06 * fVec14[((IOTA - 123) & 127)]) + ((2.4375700000000001e-05 * fVec14[((IOTA - 122) & 127)]) + ((8.0066800000000004e-05 * fVec14[((IOTA - 121) & 127)]) + ((9.9426100000000014e-05 * fVec14[((IOTA - 120) & 127)]) + ((9.0816700000000014e-05 * fVec14[((IOTA - 119) & 127)]) + ((5.80835e-05 * fVec14[((IOTA - 118) & 127)]) + ((7.7452699999999998e-05 * fVec14[((IOTA - 117) & 127)]) + ((9.5024799999999997e-07 * fVec14[((IOTA - 116) & 127)]) + ((5.1149400000000002e-05 * fVec14[((IOTA - 98) & 127)]) + ((0.00032476299999999999 * fVec14[((IOTA - 97) & 127)]) + ((0.0012872900000000002 * fVec14[((IOTA - 94) & 127)]) + ((0.0022912900000000001 * fVec14[((IOTA - 93) & 127)]) + ((0.00119739 * fVec14[((IOTA - 92) & 127)]) + ((0.0019518999999999999 * fVec14[((IOTA - 90) & 127)]) + ((0.0043689900000000005 * fVec14[((IOTA - 89) & 127)]) + ((0.00375801 * fVec14[((IOTA - 88) & 127)]) + ((0.0016994499999999999 * fVec14[((IOTA - 87) & 127)]) + ((0.0032713800000000004 * fVec14[((IOTA - 86) & 127)]) + ((0.0036832600000000003 * fVec14[((IOTA - 85) & 127)]) + ((0.00089328000000000009 * fVec14[((IOTA - 84) & 127)]) + ((0.00072158200000000002 * fVec14[((IOTA - 83) & 127)]) + ((0.00038337700000000001 * fVec14[((IOTA - 80) & 127)]) + ((0.0016079900000000001 * fVec14[((IOTA - 79) & 127)]) + ((0.0020680200000000003 * fVec14[((IOTA - 78) & 127)]) + ((0.00028545500000000005 * fVec14[((IOTA - 77) & 127)]) + ((0.00025900400000000002 * fVec14[((IOTA - 75) & 127)]) + ((3.3718100000000005e-05 * fVec14[((IOTA - 63) & 127)]) + ((0.0016691100000000001 * fVec14[((IOTA - 62) & 127)]) + ((0.00089519800000000015 * fVec14[((IOTA - 60) & 127)]) + ((0.00079125400000000002 * fVec14[((IOTA - 59) & 127)]) + ((0.00099548200000000001 * fVec14[((IOTA - 58) & 127)]) + ((0.0024358800000000001 * fVec14[((IOTA - 54) & 127)]) + ((0.0056765999999999995 * fVec14[((IOTA - 53) & 127)]) + ((0.0027909200000000001 * fVec14[((IOTA - 52) & 127)]) + ((0.00077908600000000012 * fVec14[((IOTA - 51) & 127)]) + ((0.0016214599999999999 * fVec14[((IOTA - 50) & 127)]) + ((0.0042173100000000002 * fVec14[((IOTA - 48) & 127)]) + ((0.0091871399999999999 * fVec14[((IOTA - 47) & 127)]) + ((0.0013077200000000001 * fVec14[((IOTA - 46) & 127)]) + ((0.0021427500000000001 * fVec14[((IOTA - 45) & 127)]) + ((0.0022329500000000005 * fVec14[((IOTA - 44) & 127)]) + ((0.0028589500000000003 * fVec14[((IOTA - 42) & 127)]) + ((0.0070971000000000003 * fVec14[((IOTA - 41) & 127)]) + ((0.0053105900000000004 * fVec14[((IOTA - 40) & 127)]) + ((0.0030150300000000001 * fVec14[((IOTA - 39) & 127)]) + ((0.00053429399999999994 * fVec14[((IOTA - 36) & 127)]) + ((0.0164669 * fVec14[((IOTA - 35) & 127)]) + ((0.0037660800000000002 * fVec14[((IOTA - 33) & 127)]) + ((0.0086483100000000011 * fVec14[((IOTA - 32) & 127)]) + ((0.021576300000000003 * fVec14[((IOTA - 29) & 127)]) + ((0.021685099999999999 * fVec14[((IOTA - 28) & 127)]) + ((0.0057969700000000002 * fVec14[((IOTA - 26) & 127)]) + ((0.0197594 * fVec14[((IOTA - 21) & 127)]) + ((0.0121098 * fVec14[((IOTA - 20) & 127)]) + ((0.032535399999999999 * fVec14[((IOTA - 17) & 127)]) + ((0.00050339700000000005 * fVec14[((IOTA - 14) & 127)]) + ((0.00086802899999999998 * fVec14[((IOTA - 13) & 127)]) + ((0.0016583500000000001 * fVec14[((IOTA - 8) & 127)]) + ((0.00031507000000000003 * fVec14[((IOTA - 5) & 127)]) + ((0.00049461800000000005 * fVec14[((IOTA - 4) & 127)]) + ((0.00015840400000000001 * fVec14[((IOTA - 2) & 127)]) + ((2.8519800000000004e-05 * fVec14[((IOTA - 1) & 127)]) + ((4.4578800000000004e-06 * fTemp14) + ((0.0057622799999999998 * fVec14[((IOTA - 24) & 127)]) + ((1.1796500000000001e-05 * fVec0[((IOTA - 114) & 127)]) + ((0.00041981599999999999 * fVec0[((IOTA - 107) & 127)]) + ((5.3605900000000008e-05 * fVec0[((IOTA - 105) & 127)]) + ((0.00046969700000000004 * fVec0[((IOTA - 104) & 127)]) + ((0.00047704000000000008 * fVec0[((IOTA - 103) & 127)]) + ((0.00043236800000000009 * fVec0[((IOTA - 102) & 127)]) + ((0.00070973900000000003 * fVec0[((IOTA - 101) & 127)]) + ((0.000705385 * fVec0[((IOTA - 100) & 127)]) + ((0.00045614100000000008 * fVec0[((IOTA - 99) & 127)]) + ((0.00092227100000000001 * fVec0[((IOTA - 98) & 127)]) + ((0.00081300600000000002 * fVec0[((IOTA - 97) & 127)]) + ((0.000623519 * fVec0[((IOTA - 96) & 127)]) + ((0.0013659500000000001 * fVec0[((IOTA - 95) & 127)]) + ((0.00214314 * fVec0[((IOTA - 94) & 127)]) + ((0.0016777999999999999 * fVec0[((IOTA - 93) & 127)]) + ((0.00108099 * fVec0[((IOTA - 92) & 127)]) + ((6.7984800000000007e-05 * fVec0[((IOTA - 90) & 127)]) + ((0.000264467 * fVec0[((IOTA - 89) & 127)]) + ((0.00045975200000000007 * fVec0[((IOTA - 88) & 127)]) + ((0.0013345100000000001 * fVec0[((IOTA - 87) & 127)]) + ((0.0013671599999999999 * fVec0[((IOTA - 86) & 127)]) + ((0.00088433700000000001 * fVec0[((IOTA - 85) & 127)]) + ((0.0010498400000000002 * fVec0[((IOTA - 84) & 127)]) + ((0.00300031 * fVec0[((IOTA - 83) & 127)]) + ((0.00033132700000000002 * fVec0[((IOTA - 82) & 127)]) + ((2.3648600000000003e-05 * fVec0[((IOTA - 80) & 127)]) + ((0.00058793100000000009 * fVec0[((IOTA - 79) & 127)]) + ((0.0027816299999999998 * fVec0[((IOTA - 78) & 127)]) + ((0.0017765299999999999 * fVec0[((IOTA - 77) & 127)]) + ((0.00046795000000000002 * fVec0[((IOTA - 73) & 127)]) + ((0.0016152100000000002 * fVec0[((IOTA - 72) & 127)]) + ((0.058508199999999996 * fVec0[((IOTA - 22) & 127)]) + ((0.050635700000000006 * fVec0[((IOTA - 21) & 127)]) + ((0.041341200000000002 * fVec0[((IOTA - 20) & 127)]) + ((0.0214629 * fVec0[((IOTA - 19) & 127)]) + ((0.029345699999999999 * fVec0[((IOTA - 18) & 127)]) + ((0.088954799999999987 * fVec0[((IOTA - 17) & 127)]) + ((0.063658400000000004 * fVec0[((IOTA - 16) & 127)]) + ((0.078143400000000002 * fVec0[((IOTA - 15) & 127)]) + ((0.060886200000000001 * fVec0[((IOTA - 14) & 127)]) + ((0.077131900000000003 * fVec0[((IOTA - 13) & 127)]) + ((0.090551499999999993 * fVec0[((IOTA - 12) & 127)]) + ((0.0054581200000000003 * fVec0[((IOTA - 11) & 127)]) + ((0.0018110400000000001 * fVec0[((IOTA - 9) & 127)]) + ((0.00194177 * fVec0[((IOTA - 7) & 127)]) + ((0.00114689 * fVec0[((IOTA - 5) & 127)]) + ((0.00058690300000000006 * fVec0[((IOTA - 4) & 127)]) + ((0.0012299100000000001 * fVec0[((IOTA - 3) & 127)]) + ((0.00015469 * fVec0[((IOTA - 1) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((0.0079812000000000008 * fVec15[((IOTA - 37) & 127)]) + ((0.0141227 * fVec15[((IOTA - 36) & 127)]) + ((0.0044680700000000002 * fVec15[((IOTA - 35) & 127)]) + ((0.020023599999999999 * fVec15[((IOTA - 34) & 127)]) + ((0.023001999999999998 * fVec15[((IOTA - 33) & 127)]) + ((0.0057082499999999998 * fVec15[((IOTA - 32) & 127)]) + ((0.011366300000000001 * fVec15[((IOTA - 31) & 127)]) + ((0.0266261 * fVec15[((IOTA - 30) & 127)]) + ((0.0087064099999999995 * fVec15[((IOTA - 29) & 127)]) + ((0.030624600000000002 * fVec15[((IOTA - 27) & 127)]) + ((0.0069301900000000001 * fVec15[((IOTA - 38) & 127)]) + (((((((((((((((((((((((((2.5118200000000003e-05 * fTemp15) + (0.00012370799999999999 * fVec15[((IOTA - 1) & 127)])) + (0.00096838400000000008 * fVec15[((IOTA - 3) & 127)])) + (0.00059949000000000005 * fVec15[((IOTA - 4) & 127)])) + (0.00076772799999999997 * fVec15[((IOTA - 5) & 127)])) + (0.00014117900000000001 * fVec15[((IOTA - 6) & 127)])) + (0.0018634200000000002 * fVec15[((IOTA - 7) & 127)])) + (0.00024957099999999997 * fVec15[((IOTA - 8) & 127)])) + (0.0011589199999999999 * fVec15[((IOTA - 9) & 127)])) + (0.00050879500000000004 * fVec15[((IOTA - 10) & 127)])) + (0.0036302599999999997 * fVec15[((IOTA - 11) & 127)])) + (0.056510400000000002 * fVec15[((IOTA - 12) & 127)])) + (0.049342300000000006 * fVec15[((IOTA - 13) & 127)])) + (0.0449074 * fVec15[((IOTA - 14) & 127)])) + (0.064749100000000004 * fVec15[((IOTA - 15) & 127)])) + (0.059606500000000007 * fVec15[((IOTA - 16) & 127)])) + (0.073495100000000008 * fVec15[((IOTA - 17) & 127)])) + (0.034514800000000005 * fVec15[((IOTA - 18) & 127)])) + (0.055772500000000003 * fVec15[((IOTA - 19) & 127)])) + (0.06596840000000001 * fVec15[((IOTA - 20) & 127)])) + (0.057809200000000005 * fVec15[((IOTA - 21) & 127)])) + (0.096895100000000012 * fVec15[((IOTA - 22) & 127)])) + (0.021260899999999999 * fVec15[((IOTA - 23) & 127)])) + (0.031746299999999998 * fVec15[((IOTA - 25) & 127)])) + (0.0528391 * fVec15[((IOTA - 26) & 127)]))))))))))))) + (0.011589100000000001 * fVec15[((IOTA - 39) & 127)])) + (0.0064973000000000001 * fVec15[((IOTA - 40) & 127)])) + (0.0056945699999999995 * fVec15[((IOTA - 41) & 127)])) + (0.0074329900000000004 * fVec15[((IOTA - 42) & 127)])) + (0.0028857800000000001 * fVec15[((IOTA - 43) & 127)])) + (0.0079248200000000008 * fVec15[((IOTA - 44) & 127)])) + (0.015005800000000001 * fVec15[((IOTA - 45) & 127)])) + (0.00250454 * fVec15[((IOTA - 46) & 127)])) + (0.00306785 * fVec15[((IOTA - 48) & 127)])) + (0.00175234 * fVec15[((IOTA - 49) & 127)])) + (0.00086377000000000014 * fVec15[((IOTA - 50) & 127)])) + (0.0036652500000000001 * fVec15[((IOTA - 51) & 127)])) + (0.0028833999999999999 * fVec15[((IOTA - 52) & 127)])) + (0.00325793 * fVec15[((IOTA - 53) & 127)])) + (0.00305273 * fVec15[((IOTA - 54) & 127)])) + (0.0012461600000000001 * fVec15[((IOTA - 55) & 127)])) + (0.0012118500000000002 * fVec15[((IOTA - 56) & 127)])) + (0.0050028199999999998 * fVec15[((IOTA - 57) & 127)])) + (0.0036129299999999999 * fVec15[((IOTA - 58) & 127)])) + (0.0031211899999999998 * fVec15[((IOTA - 59) & 127)])) + (0.0042250600000000001 * fVec15[((IOTA - 60) & 127)])) + (0.0035775299999999998 * fVec15[((IOTA - 61) & 127)])) + (0.0068040700000000006 * fVec15[((IOTA - 62) & 127)])) + (0.0062385100000000001 * fVec15[((IOTA - 63) & 127)])) + (0.0042152999999999999 * fVec15[((IOTA - 64) & 127)])) + (0.0027403499999999999 * fVec15[((IOTA - 65) & 127)])) + (0.0023089200000000003 * fVec15[((IOTA - 66) & 127)])) + (0.0034284599999999999 * fVec15[((IOTA - 67) & 127)])) + (0.0022559300000000002 * fVec15[((IOTA - 68) & 127)])) + (0.0014647 * fVec15[((IOTA - 69) & 127)])) + (0.00185049 * fVec15[((IOTA - 70) & 127)])) + (0.0032107500000000001 * fVec15[((IOTA - 71) & 127)])) + (0.0052356299999999998 * fVec15[((IOTA - 72) & 127)])) + (0.0030868900000000001 * fVec15[((IOTA - 73) & 127)])) + (0.0029129100000000003 * fVec15[((IOTA - 74) & 127)])) + (0.0063743100000000002 * fVec15[((IOTA - 75) & 127)])) + (0.0041945800000000007 * fVec15[((IOTA - 76) & 127)])) + (0.00082847699999999999 * fVec15[((IOTA - 77) & 127)])) + (0.0024405 * fVec15[((IOTA - 78) & 127)])) + (0.0041905200000000005 * fVec15[((IOTA - 79) & 127)])) + (0.0024365300000000001 * fVec15[((IOTA - 80) & 127)])) + (0.00056369199999999997 * fVec15[((IOTA - 82) & 127)])) + (0.0015701700000000001 * fVec15[((IOTA - 83) & 127)])) + (0.0016799500000000001 * fVec15[((IOTA - 85) & 127)])) + (0.0051757600000000006 * fVec15[((IOTA - 86) & 127)])) + (0.0037083100000000003 * fVec15[((IOTA - 87) & 127)])) + (0.00041329900000000006 * fVec15[((IOTA - 90) & 127)])) + (2.3955000000000004e-05 * fVec15[((IOTA - 93) & 127)])) + (0.0021461499999999999 * fVec15[((IOTA - 94) & 127)])) + (0.00272945 * fVec15[((IOTA - 95) & 127)])) + (0.00054874000000000004 * fVec15[((IOTA - 96) & 127)])) + (0.00058470199999999999 * fVec15[((IOTA - 98) & 127)])) + (0.00061282500000000011 * fVec15[((IOTA - 99) & 127)])) + (0.00050683400000000006 * fVec15[((IOTA - 100) & 127)])) + (0.00087727600000000008 * fVec15[((IOTA - 101) & 127)])) + (0.00154024 * fVec15[((IOTA - 102) & 127)])) + (0.00185348 * fVec15[((IOTA - 103) & 127)])) + (0.0012065399999999999 * fVec15[((IOTA - 104) & 127)])) + (0.0014059200000000002 * fVec15[((IOTA - 105) & 127)])) + (0.00136699 * fVec15[((IOTA - 106) & 127)])) + (0.0012923000000000001 * fVec15[((IOTA - 107) & 127)])) + (0.0009436510000000001 * fVec15[((IOTA - 108) & 127)])) + (0.00083451500000000008 * fVec15[((IOTA - 109) & 127)])) + (0.00098166300000000002 * fVec15[((IOTA - 110) & 127)])) + (0.00067625599999999997 * fVec15[((IOTA - 111) & 127)])) + (0.00050102000000000002 * fVec15[((IOTA - 112) & 127)])) + (0.00053358400000000003 * fVec15[((IOTA - 113) & 127)])) + (0.00054736599999999998 * fVec15[((IOTA - 114) & 127)])) + (0.00045382400000000002 * fVec15[((IOTA - 115) & 127)])) + (0.00034160000000000001 * fVec15[((IOTA - 116) & 127)])) + (0.00025855300000000002 * fVec15[((IOTA - 117) & 127)])) + (0.00016872499999999999 * fVec15[((IOTA - 118) & 127)])) + (0.00016404399999999999 * fVec15[((IOTA - 119) & 127)])) + (0.00010654600000000001 * fVec15[((IOTA - 120) & 127)])) + (4.2541300000000006e-05 * fVec15[((IOTA - 121) & 127)])) + (1.8717900000000003e-05 * fVec15[((IOTA - 122) & 127)])) + (2.09787e-05 * fVec15[((IOTA - 123) & 127)])) + (5.7126099999999992e-06 * fVec15[((IOTA - 124) & 127)])) + (5.0813899999999995e-06 * fVec15[((IOTA - 125) & 127)])) + (2.0625300000000001e-06 * fVec15[((IOTA - 126) & 127)])) + (3.3955100000000003e-05 * fTemp0))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.000682276 * fVec2[((IOTA - 3) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((6.4276900000000001e-05 * fVec2[((IOTA - 119) & 127)]) + ((9.164930000000001e-05 * fVec2[((IOTA - 118) & 127)]) + ((5.7182200000000003e-05 * fVec2[((IOTA - 117) & 127)]) + ((0.00012319500000000002 * fVec2[((IOTA - 116) & 127)]) + ((0.000211704 * fVec2[((IOTA - 115) & 127)]) + ((0.00034920800000000005 * fVec2[((IOTA - 114) & 127)]) + ((0.00033244200000000001 * fVec2[((IOTA - 113) & 127)]) + ((0.00025251100000000002 * fVec2[((IOTA - 112) & 127)]) + ((0.000318859 * fVec2[((IOTA - 111) & 127)]) + ((0.00039344000000000005 * fVec2[((IOTA - 110) & 127)]) + ((0.00033167 * fVec2[((IOTA - 109) & 127)]) + ((0.000465384 * fVec2[((IOTA - 108) & 127)]) + ((0.00039361300000000001 * fVec2[((IOTA - 107) & 127)]) + ((0.00042075400000000002 * fVec2[((IOTA - 106) & 127)]) + ((0.00037080799999999998 * fVec2[((IOTA - 105) & 127)]) + ((1.6587200000000003e-05 * fVec2[((IOTA - 103) & 127)]) + ((0.00091861900000000008 * fVec2[((IOTA - 102) & 127)]) + ((0.00025743700000000001 * fVec2[((IOTA - 101) & 127)]) + ((1.0584400000000002e-05 * fVec2[((IOTA - 98) & 127)]) + ((0.00040115600000000006 * fVec2[((IOTA - 97) & 127)]) + ((0.0014677900000000001 * fVec2[((IOTA - 90) & 127)]) + ((0.0010665400000000002 * fVec2[((IOTA - 89) & 127)]) + ((0.0011811600000000001 * fVec2[((IOTA - 88) & 127)]) + ((0.00093001200000000003 * fVec2[((IOTA - 87) & 127)]) + ((0.00025672299999999999 * fVec2[((IOTA - 85) & 127)]) + ((3.6903100000000002e-05 * fVec2[((IOTA - 83) & 127)]) + ((0.00082218600000000003 * fVec2[((IOTA - 82) & 127)]) + ((0.000382178 * fVec2[((IOTA - 81) & 127)]) + ((0.00030066700000000001 * fVec2[((IOTA - 77) & 127)]) + ((0.00056339900000000002 * fVec2[((IOTA - 78) & 127)]) + ((0.00075356000000000002 * fVec2[((IOTA - 76) & 127)]) + ((0.0017828800000000001 * fVec2[((IOTA - 75) & 127)]) + ((0.00080830800000000009 * fVec2[((IOTA - 74) & 127)]) + ((0.00187645 * fVec2[((IOTA - 70) & 127)]) + ((0.0013177900000000001 * fVec2[((IOTA - 69) & 127)]) + ((0.0026788900000000002 * fVec2[((IOTA - 68) & 127)]) + ((0.0014275899999999998 * fVec2[((IOTA - 67) & 127)]) + ((0.00077358800000000008 * fVec2[((IOTA - 65) & 127)]) + ((0.00030791900000000003 * fVec2[((IOTA - 64) & 127)]) + ((0.0018273299999999998 * fVec2[((IOTA - 59) & 127)]) + ((0.000741378 * fVec2[((IOTA - 58) & 127)]) + ((0.0021143999999999998 * fVec2[((IOTA - 56) & 127)]) + ((0.0023650199999999998 * fVec2[((IOTA - 55) & 127)]) + ((0.00137963 * fVec2[((IOTA - 46) & 127)]) + ((0.0022811300000000001 * fVec2[((IOTA - 45) & 127)]) + ((0.0077523699999999997 * fVec2[((IOTA - 44) & 127)]) + ((0.0087150300000000003 * fVec2[((IOTA - 43) & 127)]) + ((0.0035589599999999999 * fVec2[((IOTA - 40) & 127)]) + ((0.009139089999999999 * fVec2[((IOTA - 37) & 127)]) + ((0.0022023799999999999 * fVec2[((IOTA - 36) & 127)]) + ((0.00043536700000000003 * fVec2[((IOTA - 35) & 127)]) + ((0.0065159300000000005 * fVec2[((IOTA - 34) & 127)]) + ((0.0023690899999999999 * fVec2[((IOTA - 33) & 127)]) + ((0.017782599999999999 * fVec2[((IOTA - 32) & 127)]) + ((0.0058807299999999998 * fVec2[((IOTA - 31) & 127)]) + ((0.033734800000000002 * fVec2[((IOTA - 28) & 127)]) + ((0.00030687999999999999 * fVec2[((IOTA - 27) & 127)]) + ((0.027150500000000001 * fVec2[((IOTA - 25) & 127)]) + ((0.018427300000000001 * fVec2[((IOTA - 24) & 127)]) + ((0.037316000000000002 * fVec2[((IOTA - 18) & 127)]) + ((0.014252300000000001 * fVec2[((IOTA - 17) & 127)]) + ((0.019724700000000001 * fVec2[((IOTA - 15) & 127)]) + ((0.00039235000000000002 * fVec2[((IOTA - 14) & 127)]) + ((0.016522600000000002 * fVec2[((IOTA - 13) & 127)]) + ((0.0057737600000000002 * fVec2[((IOTA - 10) & 127)]) + ((0.00298131 * fVec2[((IOTA - 8) & 127)]) + ((0.0021578599999999997 * fVec2[((IOTA - 6) & 127)]) + ((0.0006632360000000001 * fVec2[((IOTA - 4) & 127)]) + ((0.00032355000000000003 * fVec2[((IOTA - 2) & 127)]) + ((4.3569800000000004e-05 * fVec2[((IOTA - 1) & 127)]) + (((7.3541399999999999e-06 * fVec1[((IOTA - 125) & 127)]) + ((1.9871400000000001e-05 * fVec1[((IOTA - 124) & 127)]) + ((1.68007e-05 * fVec1[((IOTA - 123) & 127)]) + ((4.0472700000000003e-05 * fVec1[((IOTA - 120) & 127)]) + ((2.0089899999999999e-06 * fVec1[((IOTA - 117) & 127)]) + ((9.4388500000000013e-05 * fVec1[((IOTA - 116) & 127)]) + ((4.0048000000000007e-05 * fVec1[((IOTA - 115) & 127)]) + ((0.00013508199999999999 * fVec1[((IOTA - 114) & 127)]) + ((1.4516400000000002e-05 * fVec1[((IOTA - 112) & 127)]) + ((4.0951399999999994e-06 * fVec1[((IOTA - 109) & 127)]) + ((0.00038113700000000003 * fVec1[((IOTA - 108) & 127)]) + ((0.00038692400000000002 * fVec1[((IOTA - 90) & 127)]) + ((0.0011128800000000001 * fVec1[((IOTA - 87) & 127)]) + ((0.00018401499999999999 * fVec1[((IOTA - 86) & 127)]) + ((8.3155100000000006e-05 * fVec1[((IOTA - 84) & 127)]) + ((0.00055631600000000006 * fVec1[((IOTA - 83) & 127)]) + ((0.0013639500000000001 * fVec1[((IOTA - 82) & 127)]) + ((0.0011469 * fVec1[((IOTA - 81) & 127)]) + ((0.0022757299999999997 * fVec1[((IOTA - 78) & 127)]) + ((0.00076008400000000006 * fVec1[((IOTA - 77) & 127)]) + ((0.00049322500000000002 * fVec1[((IOTA - 75) & 127)]) + ((7.2509299999999999e-06 * fVec1[((IOTA - 74) & 127)]) + ((0.00102811 * fVec1[((IOTA - 73) & 127)]) + ((0.00084844100000000013 * fVec1[((IOTA - 72) & 127)]) + ((0.00073845000000000009 * fVec1[((IOTA - 71) & 127)]) + ((0.00068371000000000003 * fVec1[((IOTA - 70) & 127)]) + ((7.2511700000000006e-05 * fVec1[((IOTA - 69) & 127)]) + ((0.00078590300000000001 * fVec1[((IOTA - 66) & 127)]) + ((0.00095934000000000015 * fVec1[((IOTA - 62) & 127)]) + ((0.000404712 * fVec1[((IOTA - 61) & 127)]) + ((0.00023097600000000001 * fVec1[((IOTA - 57) & 127)]) + ((0.00218833 * fVec1[((IOTA - 53) & 127)]) + ((0.0010072700000000002 * fVec1[((IOTA - 52) & 127)]) + ((0.00137375 * fVec1[((IOTA - 51) & 127)]) + ((0.00083448600000000006 * fVec1[((IOTA - 50) & 127)]) + ((0.00081536399999999995 * fVec1[((IOTA - 49) & 127)]) + ((0.00054543100000000008 * fVec1[((IOTA - 48) & 127)]) + ((0.0035057600000000001 * fVec1[((IOTA - 47) & 127)]) + ((0.0042825600000000004 * fVec1[((IOTA - 46) & 127)]) + ((0.0073746600000000008 * fVec1[((IOTA - 43) & 127)]) + ((0.0031813100000000001 * fVec1[((IOTA - 41) & 127)]) + ((0.0031712400000000001 * fVec1[((IOTA - 40) & 127)]) + ((0.0019387000000000002 * fVec1[((IOTA - 38) & 127)]) + ((0.010274799999999999 * fVec1[((IOTA - 37) & 127)]) + ((0.0160001 * fVec1[((IOTA - 34) & 127)]) + ((0.015218700000000002 * fVec1[((IOTA - 33) & 127)]) + ((0.0051433299999999998 * fVec1[((IOTA - 29) & 127)]) + ((0.019054000000000001 * fVec1[((IOTA - 28) & 127)]) + ((0.029220799999999998 * fVec1[((IOTA - 22) & 127)]) + ((0.019108199999999999 * fVec1[((IOTA - 20) & 127)]) + ((0.0101244 * fVec1[((IOTA - 19) & 127)]) + ((0.0243991 * fVec1[((IOTA - 17) & 127)]) + ((0.0071943800000000002 * fVec1[((IOTA - 16) & 127)]) + ((0.0065491000000000004 * fVec1[((IOTA - 14) & 127)]) + ((0.00345408 * fVec1[((IOTA - 13) & 127)]) + ((0.000172325 * fVec1[((IOTA - 11) & 127)]) + ((4.8090900000000004e-05 * fVec1[((IOTA - 10) & 127)]) + ((0.0012270600000000001 * fVec1[((IOTA - 8) & 127)]) + ((0.00054008200000000011 * fVec1[((IOTA - 4) & 127)]) + ((2.44107e-05 * fVec1[((IOTA - 2) & 127)]) + ((0.00057432400000000008 * fVec1[((IOTA - 96) & 127)]) + ((0.00025360600000000002 * fVec1[((IOTA - 107) & 127)]) + ((8.5443400000000003e-05 * fVec1[((IOTA - 97) & 127)]) + ((5.2891500000000002e-07 * fVec3[((IOTA - 126) & 127)]) + ((7.5122799999999995e-06 * fVec3[((IOTA - 125) & 127)]) + ((1.6393300000000001e-05 * fVec3[((IOTA - 124) & 127)]) + ((2.3049300000000003e-05 * fVec3[((IOTA - 123) & 127)]) + ((2.3497200000000003e-05 * fVec3[((IOTA - 122) & 127)]) + ((3.1160000000000007e-05 * fVec3[((IOTA - 121) & 127)]) + ((2.6824200000000003e-05 * fVec3[((IOTA - 120) & 127)]) + ((2.2243600000000002e-05 * fVec3[((IOTA - 117) & 127)]) + ((4.78325e-05 * fVec3[((IOTA - 116) & 127)]) + ((0.00013262100000000003 * fVec3[((IOTA - 94) & 127)]) + ((0.00061235200000000004 * fVec3[((IOTA - 91) & 127)]) + ((0.00083076200000000008 * fVec3[((IOTA - 90) & 127)]) + ((0.00094943600000000012 * fVec3[((IOTA - 89) & 127)]) + ((0.00016757299999999999 * fVec3[((IOTA - 88) & 127)]) + ((0.00022032700000000001 * fVec3[((IOTA - 87) & 127)]) + ((0.00016127700000000001 * fVec3[((IOTA - 86) & 127)]) + ((0.00191763 * fVec3[((IOTA - 85) & 127)]) + ((0.00189814 * fVec3[((IOTA - 84) & 127)]) + ((0.0011356999999999999 * fVec3[((IOTA - 82) & 127)]) + ((0.0018585000000000001 * fVec3[((IOTA - 81) & 127)]) + ((0.0012131000000000002 * fVec3[((IOTA - 80) & 127)]) + ((0.00032995300000000002 * fVec3[((IOTA - 6) & 127)]) + ((0.00050478700000000003 * fVec3[((IOTA - 4) & 127)]) + ((0.000105713 * fVec3[((IOTA - 2) & 127)]) + ((2.5231199999999997e-06 * fTemp3) + ((0.0066805500000000004 * fVec3[((IOTA - 18) & 127)]) + ((0.00678927 * fVec3[((IOTA - 17) & 127)]) + ((0.0091073999999999999 * fVec3[((IOTA - 16) & 127)]) + ((0.0130569 * fVec3[((IOTA - 15) & 127)]) + ((0.0042139100000000004 * fVec3[((IOTA - 13) & 127)]) + ((0.00025399999999999999 * fVec3[((IOTA - 79) & 127)]) + ((0.00035679200000000004 * fVec3[((IOTA - 78) & 127)]) + ((0.00097909699999999995 * fVec3[((IOTA - 77) & 127)]) + ((0.0021205199999999999 * fVec3[((IOTA - 76) & 127)]) + ((0.0008138310000000001 * fVec3[((IOTA - 68) & 127)]) + ((0.00074145100000000007 * fVec3[((IOTA - 62) & 127)]) + ((0.00047705600000000001 * fVec3[((IOTA - 61) & 127)]) + ((0.0034899700000000002 * fVec3[((IOTA - 60) & 127)]) + ((0.0025903700000000003 * fVec3[((IOTA - 59) & 127)]) + ((0.0027718299999999999 * fVec3[((IOTA - 58) & 127)]) + ((0.00315957 * fVec3[((IOTA - 57) & 127)]) + ((0.0041676700000000001 * fVec3[((IOTA - 56) & 127)]) + ((0.0040106600000000001 * fVec3[((IOTA - 55) & 127)]) + ((0.00024623100000000002 * fVec3[((IOTA - 54) & 127)]) + ((0.00327415 * fVec3[((IOTA - 53) & 127)]) + ((0.0026408399999999998 * fVec3[((IOTA - 52) & 127)]) + ((0.00050010199999999999 * fVec3[((IOTA - 50) & 127)]) + ((0.00058122499999999999 * fVec3[((IOTA - 49) & 127)]) + ((0.0072108700000000003 * fVec3[((IOTA - 44) & 127)]) + ((0.0018301400000000001 * fVec3[((IOTA - 43) & 127)]) + ((0.00058247500000000005 * fVec3[((IOTA - 38) & 127)]) + ((0.0085527399999999996 * fVec3[((IOTA - 37) & 127)]) + ((0.0064438700000000008 * fVec3[((IOTA - 35) & 127)]) + ((0.0030920700000000001 * fVec3[((IOTA - 31) & 127)]) + ((0.026311300000000003 * fVec3[((IOTA - 30) & 127)]) + ((0.0045847700000000002 * fVec3[((IOTA - 29) & 127)]) + ((0.014478500000000002 * fVec3[((IOTA - 26) & 127)]) + ((0.014742699999999999 * fVec3[((IOTA - 25) & 127)]) + ((0.0040668100000000006 * fVec3[((IOTA - 23) & 127)]) + ((0.010288200000000001 * fVec3[((IOTA - 21) & 127)]) + ((0.016673299999999999 * fVec3[((IOTA - 20) & 127)]) + ((7.5180799999999995e-07 * fVec4[((IOTA - 126) & 127)]) + ((7.4192699999999999e-06 * fVec4[((IOTA - 125) & 127)]) + ((7.8058900000000002e-06 * fVec4[((IOTA - 124) & 127)]) + ((7.6831699999999991e-06 * fVec4[((IOTA - 123) & 127)]) + ((4.3886799999999996e-07 * fVec4[((IOTA - 122) & 127)]) + ((2.5728499999999999e-05 * fVec4[((IOTA - 121) & 127)]) + ((3.8519100000000002e-06 * fVec4[((IOTA - 120) & 127)]) + ((8.4650599999999985e-06 * fVec4[((IOTA - 119) & 127)]) + ((4.1315700000000002e-05 * fVec4[((IOTA - 118) & 127)]) + ((0.00014156200000000002 * fVec4[((IOTA - 117) & 127)]) + ((0.00013138900000000001 * fVec4[((IOTA - 116) & 127)]) + ((2.3594499999999999e-05 * fVec4[((IOTA - 114) & 127)]) + ((5.5362000000000003e-05 * fVec4[((IOTA - 113) & 127)]) + ((4.5982300000000002e-05 * fVec4[((IOTA - 112) & 127)]) + ((0.00085768200000000002 * fVec3[((IOTA - 8) & 127)]) + ((0.00020877800000000001 * fVec4[((IOTA - 95) & 127)]) + ((0.0014440100000000001 * fVec4[((IOTA - 94) & 127)]) + ((7.5196800000000005e-05 * fVec4[((IOTA - 93) & 127)]) + ((0.00021774900000000002 * fVec4[((IOTA - 88) & 127)]) + ((0.00050493599999999999 * fVec4[((IOTA - 87) & 127)]) + ((0.00129094 * fVec4[((IOTA - 86) & 127)]) + ((0.00131875 * fVec4[((IOTA - 85) & 127)]) + ((0.00025035200000000002 * fVec4[((IOTA - 84) & 127)]) + ((0.0016813900000000001 * fVec4[((IOTA - 83) & 127)]) + ((0.00079413300000000004 * fVec4[((IOTA - 82) & 127)]) + ((0.00148109 * fVec4[((IOTA - 78) & 127)]) + ((0.00187816 * fVec4[((IOTA - 77) & 127)]) + ((0.0015205800000000001 * fVec4[((IOTA - 76) & 127)]) + ((0.00021227600000000001 * fVec4[((IOTA - 75) & 127)]) + ((0.00359524 * fVec4[((IOTA - 74) & 127)]) + ((0.0041234900000000005 * fVec4[((IOTA - 73) & 127)]) + ((0.00089886800000000004 * fVec4[((IOTA - 72) & 127)]) + ((0.0012871 * fVec4[((IOTA - 71) & 127)]) + ((0.0018243199999999999 * fVec4[((IOTA - 37) & 127)]) + ((0.0072907000000000007 * fVec4[((IOTA - 36) & 127)]) + ((0.0082141100000000002 * fVec4[((IOTA - 35) & 127)]) + ((0.0015148500000000001 * fVec4[((IOTA - 33) & 127)]) + ((0.0039258799999999996 * fVec4[((IOTA - 32) & 127)]) + ((0.0105468 * fVec4[((IOTA - 30) & 127)]) + ((0.0083919700000000003 * fVec4[((IOTA - 29) & 127)]) + ((0.045109500000000004 * fVec4[((IOTA - 24) & 127)]) + ((0.0130615 * fVec4[((IOTA - 23) & 127)]) + ((0.0068680599999999996 * fVec4[((IOTA - 20) & 127)]) + ((0.0158055 * fVec4[((IOTA - 19) & 127)]) + ((0.0196975 * fVec4[((IOTA - 18) & 127)]) + ((0.012670500000000001 * fVec4[((IOTA - 17) & 127)]) + ((0.017149600000000001 * fVec4[((IOTA - 14) & 127)]) + ((0.00039274200000000002 * fVec4[((IOTA - 13) & 127)]) + ((0.00063474100000000008 * fVec4[((IOTA - 8) & 127)]) + ((0.00022428400000000002 * fVec4[((IOTA - 6) & 127)]) + ((0.00061255200000000004 * fVec4[((IOTA - 5) & 127)]) + ((0.000177443 * fVec4[((IOTA - 2) & 127)]) + ((2.38744e-05 * fVec4[((IOTA - 1) & 127)]) + ((0.0036414500000000001 * fVec4[((IOTA - 42) & 127)]) + ((0.0024519899999999998 * fVec4[((IOTA - 41) & 127)]) + ((0.0018163100000000002 * fVec4[((IOTA - 65) & 127)]) + ((0.0033862499999999999 * fVec4[((IOTA - 62) & 127)]) + ((0.00095073000000000011 * fVec4[((IOTA - 61) & 127)]) + ((0.00032132100000000001 * fVec4[((IOTA - 55) & 127)]) + ((0.0011200699999999999 * fVec4[((IOTA - 53) & 127)]) + ((0.00093541399999999997 * fVec4[((IOTA - 39) & 127)]) + ((0.0028892500000000003 * fVec4[((IOTA - 50) & 127)]) + ((0.000955261 * fVec4[((IOTA - 49) & 127)]) + ((6.3343100000000014e-05 * fVec4[((IOTA - 47) & 127)]) + ((0.00694716 * fVec4[((IOTA - 44) & 127)]) + ((0.0026067200000000003 * fVec4[((IOTA - 43) & 127)]) + ((5.1650600000000005e-06 * fVec5[((IOTA - 122) & 127)]) + ((6.2288800000000013e-05 * fVec5[((IOTA - 118) & 127)]) + ((0.000107544 * fVec5[((IOTA - 117) & 127)]) + ((3.1495500000000004e-05 * fVec5[((IOTA - 116) & 127)]) + ((1.20038e-05 * fVec5[((IOTA - 115) & 127)]) + ((2.5178300000000003e-05 * fVec5[((IOTA - 114) & 127)]) + ((0.000470283 * fVec5[((IOTA - 113) & 127)]) + ((0.00042444499999999997 * fVec5[((IOTA - 112) & 127)]) + ((0.00022263799999999999 * fVec5[((IOTA - 111) & 127)]) + ((4.14666e-05 * fVec5[((IOTA - 109) & 127)]) + ((0.000344395 * fVec5[((IOTA - 108) & 127)]) + ((0.00011064600000000001 * fVec5[((IOTA - 106) & 127)]) + ((0.00030248100000000001 * fVec5[((IOTA - 105) & 127)]) + ((0.00041449600000000004 * fVec5[((IOTA - 104) & 127)]) + ((0.00012015400000000002 * fVec5[((IOTA - 100) & 127)]) + ((0.00051881099999999999 * fVec5[((IOTA - 99) & 127)]) + ((6.7970200000000002e-05 * fVec5[((IOTA - 98) & 127)]) + ((0.00034321600000000003 * fVec5[((IOTA - 95) & 127)]) + ((0.00044988999999999999 * fVec5[((IOTA - 88) & 127)]) + ((0.00256128 * fVec5[((IOTA - 87) & 127)]) + ((0.0023223300000000001 * fVec5[((IOTA - 86) & 127)]) + ((0.00014500400000000001 * fVec5[((IOTA - 83) & 127)]) + ((0.0011457399999999999 * fVec5[((IOTA - 79) & 127)]) + ((0.0017324700000000001 * fVec5[((IOTA - 63) & 127)]) + ((0.00083292900000000005 * fVec5[((IOTA - 60) & 127)]) + ((4.4803300000000005e-05 * fVec5[((IOTA - 59) & 127)]) + ((0.000591623 * fVec5[((IOTA - 56) & 127)]) + ((0.0017609399999999999 * fVec5[((IOTA - 47) & 127)]) + ((0.00027506900000000002 * fVec5[((IOTA - 42) & 127)]) + ((0.0020045600000000003 * fVec5[((IOTA - 41) & 127)]) + ((0.00894526 * fVec5[((IOTA - 38) & 127)]) + ((0.0040081499999999994 * fVec5[((IOTA - 37) & 127)]) + ((0.0022934100000000001 * fVec5[((IOTA - 36) & 127)]) + ((0.0078181599999999993 * fVec5[((IOTA - 35) & 127)]) + ((0.0060735200000000007 * fVec5[((IOTA - 34) & 127)]) + ((0.020101600000000001 * fVec5[((IOTA - 33) & 127)]) + ((0.011363099999999999 * fVec5[((IOTA - 32) & 127)]) + ((0.0048202200000000001 * fVec5[((IOTA - 31) & 127)]) + ((0.015268600000000002 * fVec5[((IOTA - 29) & 127)]) + ((0.054586100000000005 * fVec5[((IOTA - 28) & 127)]) + ((0.0076356100000000001 * fVec5[((IOTA - 27) & 127)]) + ((0.0064172300000000003 * fVec5[((IOTA - 24) & 127)]) + ((0.025168300000000001 * fVec5[((IOTA - 23) & 127)]) + ((0.0044173700000000003 * fVec5[((IOTA - 14) & 127)]) + ((0.047073999999999998 * fVec5[((IOTA - 13) & 127)]) + ((0.050409800000000005 * fVec5[((IOTA - 12) & 127)]) + ((0.0088254800000000001 * fVec5[((IOTA - 11) & 127)]) + ((0.0028401100000000003 * fVec5[((IOTA - 9) & 127)]) + ((0.0010134199999999999 * fVec5[((IOTA - 7) & 127)]) + ((0.00048772500000000005 * fVec5[((IOTA - 5) & 127)]) + ((0.00019671200000000001 * fVec5[((IOTA - 3) & 127)]) + ((1.9656400000000004e-05 * fVec5[((IOTA - 1) & 127)]) + ((1.1230600000000001e-05 * fTemp5) + ((0.00048183400000000005 * fVec5[((IOTA - 66) & 127)]) + ((0.00095134899999999999 * fVec5[((IOTA - 78) & 127)]) + ((0.00214124 * fVec5[((IOTA - 75) & 127)]) + ((0.0040635300000000001 * fVec5[((IOTA - 74) & 127)]) + ((0.00039275000000000003 * fVec5[((IOTA - 73) & 127)]) + ((0.0024424899999999999 * fVec5[((IOTA - 64) & 127)]) + ((0.0021799499999999999 * fVec5[((IOTA - 71) & 127)]) + ((0.0024713999999999999 * fVec5[((IOTA - 70) & 127)]) + ((0.00148032 * fVec5[((IOTA - 69) & 127)]) + ((1.2052900000000001e-05 * fVec6[((IOTA - 124) & 127)]) + ((7.5001999999999998e-06 * fVec6[((IOTA - 118) & 127)]) + ((3.8559700000000003e-05 * fVec6[((IOTA - 117) & 127)]) + ((0.00012688900000000001 * fVec6[((IOTA - 113) & 127)]) + ((7.1436400000000013e-05 * fVec6[((IOTA - 112) & 127)]) + ((8.3677800000000007e-05 * fVec6[((IOTA - 111) & 127)]) + ((0.000142659 * fVec6[((IOTA - 110) & 127)]) + ((0.00011731000000000001 * fVec6[((IOTA - 107) & 127)]) + ((0.00029102700000000002 * fVec6[((IOTA - 100) & 127)]) + ((0.000736785 * fVec6[((IOTA - 99) & 127)]) + ((0.00088049500000000002 * fVec6[((IOTA - 98) & 127)]) + ((0.00076679700000000005 * fVec6[((IOTA - 94) & 127)]) + ((0.0012207399999999999 * fVec6[((IOTA - 93) & 127)]) + ((0.00193305 * fVec6[((IOTA - 92) & 127)]) + ((0.00063554600000000007 * fVec6[((IOTA - 91) & 127)]) + ((0.00026668900000000002 * fVec6[((IOTA - 89) & 127)]) + ((0.00319579 * fVec6[((IOTA - 88) & 127)]) + ((0.0011806200000000001 * fVec6[((IOTA - 87) & 127)]) + ((0.00029940000000000001 * fVec6[((IOTA - 82) & 127)]) + ((0.0028643700000000002 * fVec6[((IOTA - 81) & 127)]) + ((0.0023513099999999997 * fVec6[((IOTA - 80) & 127)]) + ((0.0017465 * fVec6[((IOTA - 77) & 127)]) + ((0.00128761 * fVec6[((IOTA - 62) & 127)]) + ((0.0015227400000000001 * fVec6[((IOTA - 60) & 127)]) + ((0.00373734 * fVec6[((IOTA - 59) & 127)]) + ((0.0014280500000000002 * fVec6[((IOTA - 58) & 127)]) + ((0.0026737700000000002 * fVec6[((IOTA - 53) & 127)]) + ((0.0024428499999999999 * fVec6[((IOTA - 50) & 127)]) + ((0.0025408400000000004 * fVec6[((IOTA - 49) & 127)]) + ((0.0022300800000000002 * fVec6[((IOTA - 48) & 127)]) + ((0.00082497000000000007 * fVec6[((IOTA - 47) & 127)]) + ((0.0010773099999999999 * fVec6[((IOTA - 46) & 127)]) + ((6.9417900000000012e-05 * fVec6[((IOTA - 45) & 127)]) + ((0.0043865800000000002 * fVec6[((IOTA - 41) & 127)]) + ((0.0046617300000000002 * fVec6[((IOTA - 40) & 127)]) + ((0.0029096 * fVec6[((IOTA - 39) & 127)]) + ((0.00817616 * fVec6[((IOTA - 36) & 127)]) + ((0.0060419900000000006 * fVec6[((IOTA - 35) & 127)]) + ((0.0085528800000000006 * fVec6[((IOTA - 34) & 127)]) + ((0.030350199999999997 * fVec6[((IOTA - 27) & 127)]) + ((0.00316892 * fVec6[((IOTA - 24) & 127)]) + ((0.025193300000000002 * fVec6[((IOTA - 23) & 127)]) + ((0.0021023399999999999 * fVec6[((IOTA - 22) & 127)]) + ((0.0073916000000000008 * fVec6[((IOTA - 20) & 127)]) + ((0.017867400000000002 * fVec6[((IOTA - 17) & 127)]) + ((0.010231500000000001 * fVec6[((IOTA - 16) & 127)]) + ((0.00146583 * fVec6[((IOTA - 14) & 127)]) + ((0.0064234600000000006 * fVec6[((IOTA - 13) & 127)]) + ((0.00078510700000000006 * fVec6[((IOTA - 8) & 127)]) + ((0.00035025799999999999 * fVec6[((IOTA - 5) & 127)]) + ((0.00013798200000000001 * fVec6[((IOTA - 4) & 127)]) + ((3.8530500000000007e-05 * fVec6[((IOTA - 1) & 127)]) + ((0.00021222400000000003 * fVec6[((IOTA - 76) & 127)]) + ((0.00041598900000000002 * fVec6[((IOTA - 73) & 127)]) + ((0.00030018800000000001 * fVec6[((IOTA - 72) & 127)]) + ((0.0020025400000000001 * fVec5[((IOTA - 65) & 127)]) + ((0.00152436 * fVec6[((IOTA - 69) & 127)]) + ((1.6178099999999998e-07 * fVec7[((IOTA - 125) & 127)]) + ((1.7421599999999998e-07 * fVec7[((IOTA - 124) & 127)]) + ((0.00021674500000000001 * fVec7[((IOTA - 115) & 127)]) + ((0.00028279200000000003 * fVec7[((IOTA - 114) & 127)]) + ((5.2515800000000003e-05 * fVec7[((IOTA - 113) & 127)]) + ((0.000133249 * fVec7[((IOTA - 112) & 127)]) + ((0.00038273500000000004 * fVec7[((IOTA - 111) & 127)]) + ((0.00043214699999999997 * fVec7[((IOTA - 110) & 127)]) + ((0.00027134800000000003 * fVec7[((IOTA - 109) & 127)]) + ((3.3736500000000005e-05 * fVec7[((IOTA - 107) & 127)]) + ((6.6819399999999999e-05 * fVec7[((IOTA - 106) & 127)]) + ((0.00038405399999999999 * fVec7[((IOTA - 103) & 127)]) + ((0.0010818799999999999 * fVec7[((IOTA - 102) & 127)]) + ((0.000419827 * fVec7[((IOTA - 101) & 127)]) + ((0.000472497 * fVec7[((IOTA - 100) & 127)]) + ((0.00040792200000000007 * fVec7[((IOTA - 99) & 127)]) + ((0.0017046100000000001 * fVec7[((IOTA - 91) & 127)]) + ((0.0017854000000000001 * fVec7[((IOTA - 90) & 127)]) + ((0.000146465 * fVec7[((IOTA - 89) & 127)]) + ((0.0011246299999999999 * fVec7[((IOTA - 88) & 127)]) + ((0.000121433 * fVec7[((IOTA - 85) & 127)]) + ((0.0015572399999999999 * fVec7[((IOTA - 84) & 127)]) + ((0.00286542 * fVec7[((IOTA - 81) & 127)]) + ((0.0035030399999999998 * fVec7[((IOTA - 80) & 127)]) + ((0.0013357099999999999 * fVec7[((IOTA - 79) & 127)]) + ((0.0028925200000000004 * fVec7[((IOTA - 71) & 127)]) + ((0.00488274 * fVec7[((IOTA - 70) & 127)]) + ((0.0016347499999999999 * fVec7[((IOTA - 69) & 127)]) + ((0.0014653400000000001 * fVec7[((IOTA - 68) & 127)]) + ((0.0016001099999999999 * fVec7[((IOTA - 67) & 127)]) + ((0.0032972399999999999 * fVec7[((IOTA - 39) & 127)]) + ((0.010154000000000002 * fVec7[((IOTA - 38) & 127)]) + ((0.019400900000000002 * fVec7[((IOTA - 37) & 127)]) + ((0.0108342 * fVec7[((IOTA - 36) & 127)]) + ((0.021263200000000003 * fVec7[((IOTA - 34) & 127)]) + ((0.020498300000000001 * fVec7[((IOTA - 33) & 127)]) + ((0.0187685 * fVec7[((IOTA - 32) & 127)]) + ((0.0086318699999999998 * fVec7[((IOTA - 31) & 127)]) + ((0.0119454 * fVec7[((IOTA - 30) & 127)]) + ((0.024111899999999999 * fVec7[((IOTA - 29) & 127)]) + ((0.0154331 * fVec7[((IOTA - 28) & 127)]) + ((0.011326600000000001 * fVec7[((IOTA - 27) & 127)]) + ((0.0041025300000000001 * fVec7[((IOTA - 26) & 127)]) + ((0.035046500000000001 * fVec7[((IOTA - 25) & 127)]) + ((0.0109835 * fVec7[((IOTA - 24) & 127)]) + ((0.008624660000000001 * fVec7[((IOTA - 21) & 127)]) + ((0.0030574400000000002 * fVec7[((IOTA - 17) & 127)]) + ((0.016297900000000001 * fVec7[((IOTA - 14) & 127)]) + ((0.053418799999999995 * fVec7[((IOTA - 13) & 127)]) + ((0.071327800000000011 * fVec7[((IOTA - 12) & 127)]) + ((0.0074569299999999996 * fVec7[((IOTA - 11) & 127)]) + ((0.00196452 * fVec7[((IOTA - 9) & 127)]) + ((1.4284499999999999e-06 * fVec7[((IOTA - 7) & 127)]) + ((0.00065664800000000002 * fVec7[((IOTA - 5) & 127)]) + ((0.00033454700000000003 * fVec7[((IOTA - 3) & 127)]) + ((4.19701e-05 * fVec7[((IOTA - 1) & 127)]) + ((1.6075699999999999e-05 * fTemp7) + ((0.00045853400000000008 * fVec7[((IOTA - 58) & 127)]) + ((0.0015582 * fVec7[((IOTA - 57) & 127)]) + ((0.0015001299999999999 * fVec7[((IOTA - 56) & 127)]) + ((0.0012102200000000001 * fVec7[((IOTA - 55) & 127)]) + ((2.4437900000000002e-05 * fVec7[((IOTA - 63) & 127)]) + ((0.00012724599999999999 * fVec7[((IOTA - 62) & 127)]) + ((2.1103299999999999e-06 * fVec8[((IOTA - 125) & 127)]) + ((5.5217400000000003e-06 * fVec8[((IOTA - 124) & 127)]) + ((3.11789e-06 * fVec8[((IOTA - 123) & 127)]) + ((9.0368300000000007e-05 * fVec8[((IOTA - 119) & 127)]) + ((0.00011532 * fVec8[((IOTA - 118) & 127)]) + ((1.9649999999999998e-06 * fVec8[((IOTA - 116) & 127)]) + ((0.00021442500000000002 * fVec8[((IOTA - 115) & 127)]) + ((0.00030905200000000004 * fVec8[((IOTA - 114) & 127)]) + ((4.7581900000000006e-05 * fVec8[((IOTA - 113) & 127)]) + ((0.00016311100000000002 * fVec8[((IOTA - 112) & 127)]) + ((0.00016924900000000001 * fVec8[((IOTA - 111) & 127)]) + ((0.00014172800000000001 * (fVec12[((IOTA - 109) & 127)] - fVec9[((IOTA - 78) & 127)])) + ((0.0010940099999999999 * fVec8[((IOTA - 85) & 127)]) + ((0.0017591500000000001 * fVec8[((IOTA - 84) & 127)]) + ((0.00040582000000000004 * fVec8[((IOTA - 83) & 127)]) + ((3.0118399999999995e-06 * fVec8[((IOTA - 109) & 127)]) + ((0.00053920599999999997 * fVec8[((IOTA - 108) & 127)]) + ((0.00034291200000000001 * fVec8[((IOTA - 107) & 127)]) + ((0.00026214100000000002 * fVec8[((IOTA - 106) & 127)]) + ((0.00023320700000000001 * fVec8[((IOTA - 105) & 127)]) + ((0.00041387999999999999 * fVec8[((IOTA - 102) & 127)]) + ((0.000138245 * fVec8[((IOTA - 101) & 127)]) + ((0.000478309 * fVec8[((IOTA - 100) & 127)]) + ((0.00091847499999999998 * fVec8[((IOTA - 99) & 127)]) + ((0.0013005599999999999 * fVec8[((IOTA - 98) & 127)]) + ((0.00113754 * fVec8[((IOTA - 97) & 127)]) + ((0.0026714199999999999 * fVec8[((IOTA - 93) & 127)]) + ((0.0021342599999999998 * fVec8[((IOTA - 92) & 127)]) + ((0.00024966300000000001 * fVec8[((IOTA - 90) & 127)]) + ((0.0023507699999999999 * fVec8[((IOTA - 89) & 127)]) + ((0.0046170200000000003 * fVec8[((IOTA - 88) & 127)]) + ((0.0013482500000000001 * fVec8[((IOTA - 87) & 127)]) + ((0.00225807 * fVec8[((IOTA - 82) & 127)]) + ((0.00237535 * fVec8[((IOTA - 81) & 127)]) + ((0.000120611 * fVec8[((IOTA - 80) & 127)]) + ((0.00060378299999999999 * fVec8[((IOTA - 78) & 127)]) + ((0.00026133000000000005 * fVec8[((IOTA - 73) & 127)]) + ((0.0020077300000000001 * fVec8[((IOTA - 63) & 127)]) + ((0.0032089100000000001 * fVec8[((IOTA - 62) & 127)]) + ((0.0010079800000000001 * fVec8[((IOTA - 61) & 127)]) + ((0.00063087099999999997 * fVec8[((IOTA - 60) & 127)]) + ((0.0044288800000000005 * fVec8[((IOTA - 59) & 127)]) + ((0.0047678900000000003 * fVec8[((IOTA - 58) & 127)]) + ((0.0024688500000000003 * fVec8[((IOTA - 57) & 127)]) + ((0.00277838 * fVec8[((IOTA - 56) & 127)]) + ((0.0075612199999999996 * fVec8[((IOTA - 55) & 127)]) + ((0.00761051 * fVec8[((IOTA - 54) & 127)]) + ((0.0018776900000000002 * fVec8[((IOTA - 52) & 127)]) + ((0.0082384199999999998 * fVec8[((IOTA - 51) & 127)]) + ((0.0050166199999999994 * fVec8[((IOTA - 50) & 127)]) + ((0.0032369600000000001 * fVec8[((IOTA - 49) & 127)]) + ((0.0040625900000000005 * fVec8[((IOTA - 48) & 127)]) + ((0.011856999999999999 * fVec8[((IOTA - 47) & 127)]) + ((0.0091953899999999995 * fVec8[((IOTA - 46) & 127)]) + ((0.0061361499999999999 * fVec8[((IOTA - 45) & 127)]) + ((0.015667299999999999 * fVec8[((IOTA - 44) & 127)]) + ((0.0121152 * fVec8[((IOTA - 43) & 127)]) + ((0.0102805 * fVec8[((IOTA - 41) & 127)]) + ((0.0249734 * fVec8[((IOTA - 40) & 127)]) + ((0.0028042699999999998 * fVec8[((IOTA - 39) & 127)]) + ((0.0112762 * fVec8[((IOTA - 37) & 127)]) + ((0.0070063399999999998 * fVec8[((IOTA - 36) & 127)]) + ((0.0037140800000000002 * fVec8[((IOTA - 35) & 127)]) + ((0.0077227400000000005 * fVec8[((IOTA - 32) & 127)]) + ((0.0031788599999999999 * fVec8[((IOTA - 31) & 127)]) + ((0.0055445599999999996 * fVec8[((IOTA - 25) & 127)]) + ((0.014456700000000001 * fVec8[((IOTA - 21) & 127)]) + ((0.043969699999999994 * fVec8[((IOTA - 17) & 127)]) + ((0.010103500000000001 * fVec8[((IOTA - 16) & 127)]) + ((0.026084999999999997 * fVec8[((IOTA - 15) & 127)]) + ((0.040577500000000002 * fVec8[((IOTA - 14) & 127)]) + ((0.0703236 * fVec8[((IOTA - 13) & 127)]) + ((0.086424600000000004 * fVec8[((IOTA - 12) & 127)]) + ((0.00526349 * fVec8[((IOTA - 11) & 127)]) + ((0.0021171000000000002 * fVec8[((IOTA - 9) & 127)]) + ((0.00027211800000000001 * fVec8[((IOTA - 7) & 127)]) + ((0.00074305500000000006 * fVec8[((IOTA - 5) & 127)]) + ((0.00070165199999999998 * fVec8[((IOTA - 3) & 127)]) + ((7.2115300000000004e-05 * fVec8[((IOTA - 1) & 127)]) + (((6.8184199999999995e-06 * fVec9[((IOTA - 124) & 127)]) + ((9.6015999999999997e-06 * fVec9[((IOTA - 123) & 127)]) + ((2.6161300000000003e-05 * fVec9[((IOTA - 122) & 127)]) + ((7.66841e-06 * fVec9[((IOTA - 120) & 127)]) + ((9.9956200000000017e-05 * fVec9[((IOTA - 119) & 127)]) + ((9.8288800000000007e-05 * fVec9[((IOTA - 118) & 127)]) + ((0.00016569499999999999 * fVec9[((IOTA - 115) & 127)]) + ((0.000131304 * fVec9[((IOTA - 114) & 127)]) + ((7.4421400000000012e-05 * fVec9[((IOTA - 113) & 127)]) + ((9.0750500000000005e-05 * fVec9[((IOTA - 109) & 127)]) + ((0.00081881900000000014 * fVec9[((IOTA - 96) & 127)]) + ((0.0015964400000000002 * fVec9[((IOTA - 95) & 127)]) + ((3.5872199999999999e-05 * fVec9[((IOTA - 92) & 127)]) + ((0.0020068299999999998 * fVec9[((IOTA - 91) & 127)]) + ((0.00050415000000000008 * fVec9[((IOTA - 90) & 127)]) + ((0.00041316100000000005 * fVec9[((IOTA - 89) & 127)]) + ((0.0011488700000000002 * fVec9[((IOTA - 88) & 127)]) + ((0.0011271300000000001 * fVec9[((IOTA - 87) & 127)]) + ((0.0018691199999999999 * fVec9[((IOTA - 81) & 127)]) + ((0.0023870700000000003 * fVec9[((IOTA - 80) & 127)]) + ((0.0014690600000000001 * fVec9[((IOTA - 79) & 127)]) + ((0.00020293100000000003 * fVec9[((IOTA - 75) & 127)]) + ((0.00042256999999999999 * fVec9[((IOTA - 74) & 127)]) + ((4.8196899999999999e-05 * fVec9[((IOTA - 73) & 127)]) + ((0.00081876599999999996 * fVec9[((IOTA - 69) & 127)]) + ((0.00116132 * fVec9[((IOTA - 65) & 127)]) + ((0.0012919000000000001 * fVec9[((IOTA - 60) & 127)]) + ((0.0018522 * fVec9[((IOTA - 53) & 127)]) + ((0.0040265300000000004 * fVec9[((IOTA - 52) & 127)]) + ((0.00164123 * fVec9[((IOTA - 49) & 127)]) + ((0.0035543000000000003 * fVec9[((IOTA - 48) & 127)]) + ((0.0019447000000000002 * fVec9[((IOTA - 47) & 127)]) + ((0.0045421799999999998 * fVec9[((IOTA - 46) & 127)]) + ((0.0032057800000000001 * fVec9[((IOTA - 45) & 127)]) + ((0.0098560599999999998 * fVec9[((IOTA - 43) & 127)]) + ((0.0055212400000000002 * fVec9[((IOTA - 42) & 127)]) + ((0.0039102499999999997 * fVec9[((IOTA - 40) & 127)]) + ((0.0014029000000000001 * fVec9[((IOTA - 39) & 127)]) + ((0.00081971100000000009 * fVec9[((IOTA - 37) & 127)]) + ((0.015326500000000002 * fVec9[((IOTA - 34) & 127)]) + ((0.0039000900000000002 * fVec9[((IOTA - 33) & 127)]) + ((0.0107983 * fVec9[((IOTA - 30) & 127)]) + ((0.0016720200000000002 * fVec9[((IOTA - 28) & 127)]) + ((0.0115642 * fVec9[((IOTA - 27) & 127)]) + ((0.0083424600000000012 * fVec9[((IOTA - 24) & 127)]) + ((0.0016058699999999999 * fVec9[((IOTA - 23) & 127)]) + ((0.00574575 * fVec9[((IOTA - 22) & 127)]) + ((0.0048227900000000004 * fVec9[((IOTA - 21) & 127)]) + ((0.0053663600000000006 * fVec9[((IOTA - 20) & 127)]) + ((0.0110708 * fVec9[((IOTA - 17) & 127)]) + ((0.0074311999999999998 * fVec9[((IOTA - 16) & 127)]) + ((0.00037238400000000002 * fVec9[((IOTA - 14) & 127)]) + ((0.00252045 * fVec9[((IOTA - 13) & 127)]) + ((0.00052853700000000004 * fVec9[((IOTA - 8) & 127)]) + ((0.00017706000000000002 * fVec9[((IOTA - 5) & 127)]) + ((0.00017067000000000002 * fVec9[((IOTA - 4) & 127)]) + ((2.8269799999999997e-06 * fVec9[((IOTA - 1) & 127)]) + ((0.0028610799999999998 * fVec9[((IOTA - 84) & 127)]) + ((0.00119961 * fVec9[((IOTA - 83) & 127)]) + ((3.5305499999999996e-06 * fVec10[((IOTA - 125) & 127)]) + ((4.1155299999999994e-06 * fVec10[((IOTA - 124) & 127)]) + ((8.4151000000000001e-06 * fVec10[((IOTA - 123) & 127)]) + ((2.8368800000000002e-05 * fVec10[((IOTA - 122) & 127)]) + ((6.1171800000000003e-05 * fVec10[((IOTA - 121) & 127)]) + ((4.5063100000000006e-05 * fVec10[((IOTA - 120) & 127)]) + ((0.00013187999999999999 * fVec10[((IOTA - 117) & 127)]) + ((9.0214000000000001e-05 * fVec10[((IOTA - 116) & 127)]) + ((4.5684500000000006e-05 * fVec10[((IOTA - 115) & 127)]) + ((0.0011123800000000001 * fVec9[((IOTA - 82) & 127)]) + ((0.00010922300000000001 * fVec10[((IOTA - 114) & 127)]) + ((0.00012787900000000001 * fVec10[((IOTA - 113) & 127)]) + ((0.00010810400000000001 * fVec10[((IOTA - 112) & 127)]) + ((8.4602100000000008e-05 * fVec10[((IOTA - 111) & 127)]) + ((0.00014129499999999999 * fVec10[((IOTA - 103) & 127)]) + ((0.0011713800000000001 * fVec10[((IOTA - 96) & 127)]) + ((0.00048376700000000002 * fVec10[((IOTA - 95) & 127)]) + ((0.00040982500000000005 * fVec10[((IOTA - 89) & 127)]) + ((0.00192194 * fVec10[((IOTA - 86) & 127)]) + ((0.00102436 * fVec10[((IOTA - 85) & 127)]) + ((0.00100778 * fVec10[((IOTA - 81) & 127)]) + ((0.00035581800000000004 * fVec10[((IOTA - 80) & 127)]) + ((0.00108387 * fVec10[((IOTA - 78) & 127)]) + ((0.00355741 * fVec10[((IOTA - 77) & 127)]) + ((0.00203951 * fVec10[((IOTA - 76) & 127)]) + ((0.00099792900000000005 * fVec10[((IOTA - 74) & 127)]) + ((0.0044921400000000004 * fVec10[((IOTA - 73) & 127)]) + ((0.00086068200000000009 * fVec10[((IOTA - 69) & 127)]) + ((0.0026953699999999999 * fVec10[((IOTA - 68) & 127)]) + ((0.00069267700000000005 * fVec10[((IOTA - 67) & 127)]) + ((0.0014122200000000001 * fVec10[((IOTA - 62) & 127)]) + ((0.00059297400000000002 * fVec10[((IOTA - 61) & 127)]) + ((0.00053443700000000002 * fVec10[((IOTA - 59) & 127)]) + ((0.0013940900000000002 * fVec10[((IOTA - 58) & 127)]) + ((0.0012833600000000001 * fVec10[((IOTA - 57) & 127)]) + ((0.0031110899999999999 * fVec10[((IOTA - 56) & 127)]) + ((0.0050713199999999998 * fVec10[((IOTA - 55) & 127)]) + ((0.0050443700000000003 * fVec10[((IOTA - 54) & 127)]) + ((0.00419002 * fVec10[((IOTA - 53) & 127)]) + ((0.0032877399999999999 * fVec10[((IOTA - 51) & 127)]) + ((0.0071723899999999998 * fVec10[((IOTA - 43) & 127)]) + ((0.0036162899999999999 * fVec10[((IOTA - 42) & 127)]) + ((0.010498400000000001 * fVec10[((IOTA - 41) & 127)]) + ((0.0021260799999999998 * fVec10[((IOTA - 40) & 127)]) + ((0.0065524800000000003 * fVec10[((IOTA - 38) & 127)]) + ((0.011496599999999999 * fVec10[((IOTA - 35) & 127)]) + ((0.0010427100000000001 * fVec10[((IOTA - 34) & 127)]) + ((0.0092546800000000012 * fVec10[((IOTA - 31) & 127)]) + ((0.0026388100000000001 * fVec10[((IOTA - 27) & 127)]) + ((0.0128167 * fVec10[((IOTA - 23) & 127)]) + ((0.011590800000000002 * fVec10[((IOTA - 17) & 127)]) + ((0.0038800599999999998 * fVec10[((IOTA - 16) & 127)]) + ((0.022263399999999999 * fVec10[((IOTA - 15) & 127)]) + ((0.020153300000000002 * fVec10[((IOTA - 14) & 127)]) + ((0.042437800000000005 * fVec10[((IOTA - 13) & 127)]) + ((0.047133599999999998 * fVec10[((IOTA - 12) & 127)]) + ((0.00567696 * fVec10[((IOTA - 11) & 127)]) + ((0.00143681 * fVec10[((IOTA - 9) & 127)]) + ((0.00086101400000000001 * fVec10[((IOTA - 7) & 127)]) + ((0.00058492199999999998 * fVec10[((IOTA - 5) & 127)]) + ((6.7829099999999997e-06 * fVec10[((IOTA - 4) & 127)]) + ((0.00025529600000000002 * fVec10[((IOTA - 3) & 127)]) + ((2.9285600000000003e-05 * fVec10[((IOTA - 1) & 127)]) + ((3.8661599999999993e-06 * fTemp10) + ((0.00909628 * fVec10[((IOTA - 50) & 127)]) + ((0.0036924600000000003 * fVec10[((IOTA - 49) & 127)]) + ((0.0046017100000000002 * fVec10[((IOTA - 48) & 127)]) + ((0.0020962000000000003 * fVec10[((IOTA - 45) & 127)]) + ((0.0073180300000000005 * fVec10[((IOTA - 47) & 127)]) + ((0.0070144200000000004 * fVec10[((IOTA - 46) & 127)]) + ((1.70851e-05 * fVec11[((IOTA - 122) & 127)]) + ((3.0657300000000002e-05 * fVec11[((IOTA - 121) & 127)]) + ((5.3340699999999993e-07 * fVec11[((IOTA - 120) & 127)]) + ((0.0052343400000000005 * fVec10[((IOTA - 44) & 127)]) + ((1.03751e-05 * fVec11[((IOTA - 118) & 127)]) + ((8.3314900000000018e-05 * fVec11[((IOTA - 117) & 127)]) + ((9.1851000000000012e-05 * fVec11[((IOTA - 112) & 127)]) + ((2.7205700000000003e-05 * fVec11[((IOTA - 111) & 127)]) + ((0.00152143 * fVec11[((IOTA - 82) & 127)]) + ((0.0032921200000000004 * fVec11[((IOTA - 81) & 127)]) + ((0.00193753 * fVec11[((IOTA - 80) & 127)]) + ((0.00062551900000000005 * fVec11[((IOTA - 79) & 127)]) + ((0.00096127300000000012 * fVec11[((IOTA - 70) & 127)]) + ((0.0042903999999999998 * fVec11[((IOTA - 69) & 127)]) + ((0.0037726500000000002 * fVec11[((IOTA - 68) & 127)]) + ((0.00041918000000000001 * fVec11[((IOTA - 66) & 127)]) + ((0.00047510500000000003 * fVec11[((IOTA - 63) & 127)]) + ((0.0017495700000000002 * fVec11[((IOTA - 62) & 127)]) + ((0.0013881099999999999 * fVec11[((IOTA - 61) & 127)]) + ((0.00142376 * fVec11[((IOTA - 59) & 127)]) + ((0.0013234399999999999 * fVec11[((IOTA - 58) & 127)]) + ((0.0023363800000000003 * fVec11[((IOTA - 57) & 127)]) + ((0.0047624399999999997 * fVec11[((IOTA - 56) & 127)]) + ((0.00035963800000000001 * fVec11[((IOTA - 55) & 127)]) + ((0.0014325799999999999 * fVec11[((IOTA - 53) & 127)]) + ((0.0035146700000000001 * fVec11[((IOTA - 50) & 127)]) + ((0.00013482199999999999 * fVec11[((IOTA - 46) & 127)]) + ((0.0031359700000000001 * fVec11[((IOTA - 44) & 127)]) + ((0.0033774600000000001 * fVec11[((IOTA - 43) & 127)]) + ((0.00043131800000000003 * fVec11[((IOTA - 41) & 127)]) + ((0.0017748 * fVec11[((IOTA - 37) & 127)]) + ((0.0095376600000000016 * fVec11[((IOTA - 34) & 127)]) + ((0.00354222 * fVec11[((IOTA - 31) & 127)]) + ((0.0099954400000000013 * fVec11[((IOTA - 30) & 127)]) + ((0.00581921 * fVec11[((IOTA - 27) & 127)]) + ((0.00064315100000000001 * fVec11[((IOTA - 26) & 127)]) + ((0.016502200000000002 * fVec11[((IOTA - 25) & 127)]) + ((0.026153100000000002 * fVec11[((IOTA - 19) & 127)]) + ((0.015518799999999999 * fVec11[((IOTA - 18) & 127)]) + ((0.011748099999999999 * fVec11[((IOTA - 16) & 127)]) + ((0.024044800000000002 * fVec11[((IOTA - 15) & 127)]) + ((0.011073200000000002 * fVec11[((IOTA - 12) & 127)]) + ((0.00016208700000000002 * fVec11[((IOTA - 11) & 127)]) + ((0.00023927800000000002 * fVec11[((IOTA - 9) & 127)]) + ((0.00099840900000000002 * fVec11[((IOTA - 7) & 127)]) + ((0.00026075800000000004 * fVec11[((IOTA - 3) & 127)]) + ((9.0296599999999999e-06 * fVec12[((IOTA - 122) & 127)]) + ((1.9893500000000002e-05 * fVec12[((IOTA - 118) & 127)]) + ((3.7877500000000005e-05 * fVec12[((IOTA - 115) & 127)]) + ((0.00027007400000000003 * fVec12[((IOTA - 103) & 127)]) + ((0.00044415800000000005 * fVec12[((IOTA - 102) & 127)]) + ((0.00031515600000000003 * fVec12[((IOTA - 100) & 127)]) + ((0.00068420899999999997 * fVec12[((IOTA - 99) & 127)]) + ((0.00049268100000000002 * fVec12[((IOTA - 96) & 127)]) + ((0.0015305800000000001 * fVec12[((IOTA - 91) & 127)]) + ((0.0017284399999999999 * fVec12[((IOTA - 90) & 127)]) + ((0.00127253 * fVec12[((IOTA - 89) & 127)]) + ((0.00166752 * fVec12[((IOTA - 88) & 127)]) + ((0.00033490500000000003 * fVec12[((IOTA - 85) & 127)]) + ((0.0011273899999999998 * fVec12[((IOTA - 84) & 127)]) + ((6.2119200000000007e-05 * fVec12[((IOTA - 82) & 127)]) + ((0.0017261400000000001 * fVec12[((IOTA - 81) & 127)]) + ((0.00048162000000000004 * fVec12[((IOTA - 80) & 127)]) + ((0.00071563500000000006 * fVec12[((IOTA - 79) & 127)]) + ((1.14088e-05 * fVec12[((IOTA - 77) & 127)]) + ((0.0014551499999999999 * fVec12[((IOTA - 76) & 127)]) + ((0.00078290800000000002 * fVec12[((IOTA - 73) & 127)]) + ((0.0013603899999999999 * fVec12[((IOTA - 72) & 127)]) + ((0.00076972400000000006 * fVec12[((IOTA - 71) & 127)]) + ((0.0011577500000000001 * fVec12[((IOTA - 70) & 127)]) + ((0.0027559100000000003 * fVec12[((IOTA - 69) & 127)]) + ((0.0011045300000000001 * fVec12[((IOTA - 65) & 127)]) + ((0.0019003900000000001 * fVec12[((IOTA - 64) & 127)]) + ((5.8659000000000002e-05 * fVec12[((IOTA - 63) & 127)]) + ((0.00034302399999999999 * fVec12[((IOTA - 60) & 127)]) + ((0.0015042599999999999 * fVec12[((IOTA - 55) & 127)]) + ((0.0038506399999999998 * fVec12[((IOTA - 54) & 127)]) + ((0.00280679 * fVec12[((IOTA - 53) & 127)]) + ((0.00191281 * fVec12[((IOTA - 51) & 127)]) + ((0.0030454200000000001 * fVec12[((IOTA - 47) & 127)]) + ((0.00241033 * fVec12[((IOTA - 41) & 127)]) + ((0.0054447699999999998 * fVec12[((IOTA - 34) & 127)]) + ((0.0027451799999999998 * fVec12[((IOTA - 33) & 127)]) + ((0.00192986 * fVec12[((IOTA - 32) & 127)]) + ((0.0050891900000000004 * fVec12[((IOTA - 29) & 127)]) + ((0.010143899999999999 * fVec12[((IOTA - 28) & 127)]) + ((0.0039649200000000002 * fVec12[((IOTA - 27) & 127)]) + ((0.014927200000000002 * fVec12[((IOTA - 24) & 127)]) + ((0.010792999999999999 * fVec12[((IOTA - 23) & 127)]) + ((0.008510160000000001 * fVec12[((IOTA - 22) & 127)]) + ((0.0223719 * fVec12[((IOTA - 21) & 127)]) + ((0.0123166 * fVec12[((IOTA - 20) & 127)]) + ((0.017947399999999999 * fVec12[((IOTA - 19) & 127)]) + ((0.0073694100000000007 * fVec12[((IOTA - 14) & 127)]) + ((0.0142655 * fVec12[((IOTA - 12) & 127)]) + ((0.0067548000000000009 * fVec12[((IOTA - 11) & 127)]) + ((0.0025108100000000005 * fVec12[((IOTA - 9) & 127)]) + ((0.00235191 * fVec12[((IOTA - 7) & 127)]) + ((0.00091979399999999993 * fVec12[((IOTA - 5) & 127)]) + ((0.00050699800000000004 * fVec12[((IOTA - 3) & 127)]) + ((0.0010344 * fVec12[((IOTA - 46) & 127)]) + ((0.0021753000000000002 * fVec12[((IOTA - 43) & 127)]) + ((6.9716599999999994e-06 * fVec13[((IOTA - 124) & 127)]) + ((9.8485200000000004e-06 * fVec13[((IOTA - 118) & 127)]) + ((0.00010357900000000001 * fVec13[((IOTA - 114) & 127)]) + ((0.00042897299999999997 * fVec13[((IOTA - 113) & 127)]) + ((0.00029024100000000006 * fVec13[((IOTA - 112) & 127)]) + ((9.8297200000000012e-05 * fVec13[((IOTA - 111) & 127)]) + ((0.00020804999999999999 * fVec13[((IOTA - 110) & 127)]) + ((0.00054109500000000001 * fVec13[((IOTA - 109) & 127)]) + ((0.00083962700000000002 * fVec13[((IOTA - 108) & 127)]) + ((0.00056389100000000007 * fVec13[((IOTA - 107) & 127)]) + ((0.00051816800000000006 * fVec13[((IOTA - 106) & 127)]) + ((0.00065456900000000003 * fVec13[((IOTA - 105) & 127)]) + ((0.00088825400000000011 * fVec13[((IOTA - 104) & 127)]) + ((0.000446193 * fVec13[((IOTA - 103) & 127)]) + ((0.00071199100000000003 * fVec13[((IOTA - 102) & 127)]) + ((0.0012468500000000001 * fVec13[((IOTA - 101) & 127)]) + ((0.0012435300000000001 * fVec13[((IOTA - 100) & 127)]) + ((0.0010388900000000002 * fVec13[((IOTA - 99) & 127)]) + ((0.00170268 * fVec13[((IOTA - 98) & 127)]) + ((0.00126004 * fVec13[((IOTA - 97) & 127)]) + ((0.0013548899999999999 * fVec13[((IOTA - 93) & 127)]) + ((0.0020163799999999999 * fVec13[((IOTA - 92) & 127)]) + ((0.0010302600000000001 * fVec13[((IOTA - 89) & 127)]) + ((0.00142103 * fVec13[((IOTA - 88) & 127)]) + ((0.0020040399999999999 * fVec13[((IOTA - 82) & 127)]) + ((0.0030592000000000002 * fVec13[((IOTA - 81) & 127)]) + ((0.00082976100000000015 * fVec13[((IOTA - 80) & 127)]) + ((0.00083032800000000008 * fVec13[((IOTA - 79) & 127)]) + ((0.00146794 * fVec13[((IOTA - 78) & 127)]) + ((0.0029912300000000001 * fVec13[((IOTA - 77) & 127)]) + ((0.0019008400000000002 * fVec13[((IOTA - 76) & 127)]) + ((0.00032308700000000001 * fVec13[((IOTA - 75) & 127)]) + ((0.00121188 * fVec13[((IOTA - 74) & 127)]) + ((0.0015286800000000001 * fVec13[((IOTA - 73) & 127)]) + ((0.0016313200000000001 * fVec13[((IOTA - 72) & 127)]) + ((0.0019843199999999999 * fVec13[((IOTA - 71) & 127)]) + ((0.0017147500000000001 * fVec13[((IOTA - 69) & 127)]) + ((4.5241600000000004e-05 * fVec13[((IOTA - 68) & 127)]) + ((0.00193403 * fVec13[((IOTA - 67) & 127)]) + ((0.00103439 * fVec13[((IOTA - 66) & 127)]) + ((0.00025587599999999999 * fVec13[((IOTA - 61) & 127)]) + ((0.0014905299999999999 * fVec13[((IOTA - 60) & 127)]) + ((0.000502175 * fVec13[((IOTA - 59) & 127)]) + ((0.00055048599999999999 * fVec13[((IOTA - 58) & 127)]) + ((0.00049892100000000004 * fVec13[((IOTA - 50) & 127)]) + ((0.0029968600000000001 * fVec13[((IOTA - 47) & 127)]) + ((0.0024887899999999998 * fVec13[((IOTA - 46) & 127)]) + ((0.0030320900000000003 * fVec13[((IOTA - 41) & 127)]) + ((0.0076587399999999998 * fVec13[((IOTA - 40) & 127)]) + ((0.010064699999999999 * fVec13[((IOTA - 35) & 127)]) + ((0.030136699999999999 * fVec13[((IOTA - 32) & 127)]) + ((0.017341200000000001 * fVec13[((IOTA - 31) & 127)]) + ((0.039170099999999999 * fVec13[((IOTA - 28) & 127)]) + ((0.00031563800000000003 * fVec13[((IOTA - 27) & 127)]) + ((0.00069887100000000011 * fVec13[((IOTA - 25) & 127)]) + ((0.025458500000000002 * fVec13[((IOTA - 24) & 127)]) + ((0.0120184 * fVec13[((IOTA - 21) & 127)]) + ((0.011691100000000001 * fVec13[((IOTA - 19) & 127)]) + ((0.0053095800000000004 * fVec13[((IOTA - 14) & 127)]) + ((0.0072171800000000001 * fVec13[((IOTA - 12) & 127)]) + ((0.0030320200000000003 * fVec13[((IOTA - 11) & 127)]) + ((0.00131485 * fVec13[((IOTA - 9) & 127)]) + ((0.0011081700000000001 * fVec13[((IOTA - 7) & 127)]) + ((0.00036208399999999998 * fVec13[((IOTA - 5) & 127)]) + ((0.00017773600000000001 * fVec13[((IOTA - 3) & 127)]) + ((0.0031219500000000001 * fVec13[((IOTA - 70) & 127)]) + ((6.574880000000001e-05 * fVec14[((IOTA - 115) & 127)]) + ((7.5893800000000015e-05 * fVec14[((IOTA - 114) & 127)]) + ((0.00055035400000000008 * fVec14[((IOTA - 113) & 127)]) + ((0.00054230400000000007 * fVec14[((IOTA - 112) & 127)]) + ((0.00038862600000000004 * fVec14[((IOTA - 111) & 127)]) + ((0.00038355300000000002 * fVec14[((IOTA - 110) & 127)]) + ((0.0010789999999999999 * fVec14[((IOTA - 109) & 127)]) + ((0.00127535 * fVec14[((IOTA - 108) & 127)]) + ((0.00026040700000000004 * fVec14[((IOTA - 107) & 127)]) + ((0.00064190699999999994 * fVec14[((IOTA - 106) & 127)]) + ((0.0012643700000000001 * fVec14[((IOTA - 105) & 127)]) + ((0.0014951399999999998 * fVec14[((IOTA - 104) & 127)]) + ((0.00096466700000000011 * fVec14[((IOTA - 103) & 127)]) + ((0.00062200899999999997 * fVec14[((IOTA - 102) & 127)]) + ((0.0013151 * fVec14[((IOTA - 101) & 127)]) + ((0.00155276 * fVec14[((IOTA - 100) & 127)]) + ((0.00147963 * fVec14[((IOTA - 99) & 127)]) + ((0.0012132899999999999 * fVec14[((IOTA - 96) & 127)]) + ((5.4447799999999994e-06 * fVec14[((IOTA - 91) & 127)]) + ((0.00060830200000000002 * fVec14[((IOTA - 82) & 127)]) + ((0.00073753600000000001 * fVec14[((IOTA - 81) & 127)]) + ((4.1098800000000007e-05 * fVec14[((IOTA - 76) & 127)]) + ((0.00031511100000000003 * fVec14[((IOTA - 74) & 127)]) + ((0.0011385200000000001 * fVec14[((IOTA - 73) & 127)]) + ((0.0023925600000000002 * fVec14[((IOTA - 72) & 127)]) + ((0.00191902 * fVec14[((IOTA - 71) & 127)]) + ((0.00073584900000000001 * fVec14[((IOTA - 70) & 127)]) + ((0.0033698500000000002 * fVec14[((IOTA - 69) & 127)]) + ((0.0046562499999999998 * fVec14[((IOTA - 68) & 127)]) + ((0.0026088700000000001 * fVec14[((IOTA - 67) & 127)]) + ((0.0010497099999999999 * fVec14[((IOTA - 95) & 127)]) + ((0.0015381499999999998 * fVec14[((IOTA - 66) & 127)]) + ((0.00177024 * fVec14[((IOTA - 65) & 127)]) + ((0.0027169400000000002 * fVec14[((IOTA - 64) & 127)]) + ((0.0011334100000000001 * fVec14[((IOTA - 61) & 127)]) + ((0.0012374899999999999 * fVec14[((IOTA - 57) & 127)]) + ((0.00350462 * fVec14[((IOTA - 56) & 127)]) + ((0.00029472900000000003 * fVec14[((IOTA - 55) & 127)]) + ((0.00161133 * fVec14[((IOTA - 49) & 127)]) + ((0.0043256300000000004 * fVec14[((IOTA - 43) & 127)]) + ((0.0039263700000000002 * fVec14[((IOTA - 38) & 127)]) + ((0.0193136 * fVec14[((IOTA - 37) & 127)]) + ((0.0137585 * fVec14[((IOTA - 34) & 127)]) + ((0.016165499999999999 * fVec14[((IOTA - 31) & 127)]) + ((0.0200181 * fVec14[((IOTA - 30) & 127)]) + ((0.00436148 * fVec14[((IOTA - 27) & 127)]) + ((0.0057804000000000006 * fVec14[((IOTA - 22) & 127)]) + ((0.037111700000000004 * fVec14[((IOTA - 19) & 127)]) + ((0.014907300000000002 * fVec14[((IOTA - 18) & 127)]) + ((0.0092683000000000001 * fVec14[((IOTA - 16) & 127)]) + ((0.0158698 * fVec14[((IOTA - 15) & 127)]) + ((0.00489909 * fVec14[((IOTA - 12) & 127)]) + ((0.00036272099999999999 * fVec14[((IOTA - 11) & 127)]) + ((0.00043871700000000003 * fVec14[((IOTA - 10) & 127)]) + ((0.00018132700000000001 * fVec14[((IOTA - 9) & 127)]) + ((0.00097058900000000011 * fVec14[((IOTA - 7) & 127)]) + ((0.00016036100000000001 * fVec14[((IOTA - 6) & 127)]) + ((0.00019245000000000002 * fVec14[((IOTA - 3) & 127)]) + ((0.0115485 * fVec14[((IOTA - 25) & 127)]) + ((1.8656099999999998e-06 * fVec0[((IOTA - 126) & 127)]) + ((2.5639300000000001e-06 * fVec0[((IOTA - 125) & 127)]) + ((8.3185099999999991e-06 * fVec0[((IOTA - 124) & 127)]) + ((3.8801999999999999e-05 * fVec0[((IOTA - 123) & 127)]) + ((6.5230500000000005e-05 * fVec0[((IOTA - 122) & 127)]) + ((4.81323e-05 * fVec0[((IOTA - 121) & 127)]) + ((3.1175000000000006e-05 * fVec0[((IOTA - 120) & 127)]) + ((1.1129000000000001e-05 * fVec0[((IOTA - 119) & 127)]) + ((0.00016385400000000001 * fVec0[((IOTA - 118) & 127)]) + ((0.000137362 * fVec0[((IOTA - 117) & 127)]) + ((9.139900000000001e-05 * fVec0[((IOTA - 116) & 127)]) + ((0.00012562199999999998 * fVec0[((IOTA - 115) & 127)]) + ((0.00025063300000000005 * fVec0[((IOTA - 113) & 127)]) + ((0.000272806 * fVec0[((IOTA - 112) & 127)]) + ((0.000314307 * fVec0[((IOTA - 111) & 127)]) + ((0.00026935700000000002 * fVec0[((IOTA - 110) & 127)]) + ((0.00027303400000000002 * fVec0[((IOTA - 109) & 127)]) + ((8.74662e-06 * fVec0[((IOTA - 108) & 127)]) + ((0.0032127699999999998 * fVec14[((IOTA - 23) & 127)]) + ((0.00035653000000000003 * fVec0[((IOTA - 106) & 127)]) + ((0.000138672 * fVec0[((IOTA - 91) & 127)]) + ((0.0011749499999999999 * fVec0[((IOTA - 81) & 127)]) + ((0.00092974400000000003 * fVec0[((IOTA - 76) & 127)]) + ((0.00189912 * fVec0[((IOTA - 75) & 127)]) + ((0.0018498099999999999 * fVec0[((IOTA - 74) & 127)]) + ((0.00102903 * fVec0[((IOTA - 70) & 127)]) + ((0.0023879000000000001 * fVec0[((IOTA - 69) & 127)]) + ((0.0030104600000000004 * fVec0[((IOTA - 68) & 127)]) + ((0.00157916 * fVec0[((IOTA - 67) & 127)]) + ((0.0021747000000000003 * fVec0[((IOTA - 66) & 127)]) + ((0.0024374800000000001 * fVec0[((IOTA - 65) & 127)]) + ((0.0017056100000000002 * fVec0[((IOTA - 64) & 127)]) + ((0.00246014 * fVec0[((IOTA - 63) & 127)]) + ((0.0044470300000000003 * fVec0[((IOTA - 62) & 127)]) + ((0.0047484400000000005 * fVec0[((IOTA - 61) & 127)]) + ((0.0027951100000000004 * fVec0[((IOTA - 60) & 127)]) + ((0.0047547600000000002 * fVec0[((IOTA - 59) & 127)]) + ((0.0037710400000000002 * fVec0[((IOTA - 58) & 127)]) + ((0.0045419900000000001 * fVec0[((IOTA - 57) & 127)]) + ((0.010441600000000001 * fVec0[((IOTA - 56) & 127)]) + ((0.0100582 * fVec0[((IOTA - 55) & 127)]) + ((0.0076609499999999997 * fVec0[((IOTA - 54) & 127)]) + ((0.0068764300000000002 * fVec0[((IOTA - 53) & 127)]) + ((0.0095819500000000005 * fVec0[((IOTA - 52) & 127)]) + ((0.015913200000000002 * fVec0[((IOTA - 51) & 127)]) + ((0.015119400000000002 * fVec0[((IOTA - 50) & 127)]) + ((0.0128559 * fVec0[((IOTA - 49) & 127)]) + ((0.016606200000000002 * fVec0[((IOTA - 48) & 127)]) + ((0.016194200000000002 * fVec0[((IOTA - 47) & 127)]) + ((0.0116756 * fVec0[((IOTA - 46) & 127)]) + ((0.016079200000000002 * fVec0[((IOTA - 44) & 127)]) + ((0.0188738 * fVec0[((IOTA - 43) & 127)]) + ((0.022184499999999999 * fVec0[((IOTA - 42) & 127)]) + ((0.020373700000000002 * fVec0[((IOTA - 41) & 127)]) + ((0.0086227300000000003 * fVec0[((IOTA - 40) & 127)]) + ((0.015368999999999999 * fVec0[((IOTA - 39) & 127)]) + ((0.025263300000000002 * fVec0[((IOTA - 38) & 127)]) + ((0.026966700000000003 * fVec0[((IOTA - 37) & 127)]) + ((0.023967600000000002 * fVec0[((IOTA - 36) & 127)]) + ((0.0180915 * fVec0[((IOTA - 35) & 127)]) + ((0.026436999999999999 * fVec0[((IOTA - 34) & 127)]) + ((0.035762599999999999 * fVec0[((IOTA - 33) & 127)]) + ((0.019380700000000001 * fVec0[((IOTA - 32) & 127)]) + ((0.0052166499999999998 * fVec0[((IOTA - 31) & 127)]) + ((0.012525700000000001 * fVec0[((IOTA - 30) & 127)]) + ((0.039007399999999998 * fVec0[((IOTA - 29) & 127)]) + ((0.039406500000000004 * fVec0[((IOTA - 28) & 127)]) + ((0.0160175 * fVec0[((IOTA - 27) & 127)]) + ((0.0095142000000000004 * fVec0[((IOTA - 26) & 127)]) + ((0.00060328500000000006 * fVec0[((IOTA - 25) & 127)]) + ((0.042794800000000008 * fVec0[((IOTA - 24) & 127)]) + ((0.034687500000000003 * fVec0[((IOTA - 23) & 127)]) + ((0.0011779100000000001 * fVec0[((IOTA - 10) & 127)]) + ((0.000167329 * fVec0[((IOTA - 8) & 127)]) + ((0.00041459900000000003 * fVec0[((IOTA - 6) & 127)]) + ((0.00031506200000000001 * fVec0[((IOTA - 2) & 127)]) + ((0.00054486499999999995 * fVec15[((IOTA - 97) & 127)]) + ((0.0024969700000000003 * fVec15[((IOTA - 92) & 127)]) + ((0.0014838199999999998 * fVec15[((IOTA - 91) & 127)]) + ((0.00134669 * fVec15[((IOTA - 89) & 127)]) + ((0.00141242 * fVec15[((IOTA - 88) & 127)]) + ((0.000311911 * fVec15[((IOTA - 84) & 127)]) + ((((((0.00017378000000000001 * fVec15[((IOTA - 2) & 127)]) + (0.015415000000000002 * fVec15[((IOTA - 24) & 127)])) + (0.0114164 * fVec15[((IOTA - 28) & 127)])) + (0.0029673899999999999 * fVec15[((IOTA - 47) & 127)])) + (0.0010694400000000001 * fVec15[((IOTA - 81) & 127)])) + (0.008875280000000001 * fVec0[((IOTA - 45) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.68655e-05 * fTemp8))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (2.0610900000000003e-05 * fTemp2)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fHbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (fRec1[0] * (((9.5870599999999998e-07 * fVec2[((IOTA - 126) & 127)]) + ((6.1298299999999997e-06 * fVec2[((IOTA - 125) & 127)]) + ((1.7529100000000001e-05 * fVec2[((IOTA - 124) & 127)]) + ((1.3215300000000002e-05 * fVec2[((IOTA - 123) & 127)]) + ((3.73611e-06 * fVec2[((IOTA - 122) & 127)]) + ((1.4631700000000003e-05 * fVec2[((IOTA - 121) & 127)]) + ((7.9383399999999993e-06 * fVec2[((IOTA - 120) & 127)]) + ((0.000163275 * fVec2[((IOTA - 108) & 127)]) + ((5.2133700000000005e-05 * fVec2[((IOTA - 104) & 127)]) + ((1.7659600000000003e-05 * fVec2[((IOTA - 103) & 127)]) + ((0.00026651699999999997 * fVec2[((IOTA - 101) & 127)]) + ((0.00044441800000000003 * fVec2[((IOTA - 100) & 127)]) + ((0.000204947 * fVec2[((IOTA - 97) & 127)]) + ((0.0021076800000000002 * fVec2[((IOTA - 96) & 127)]) + ((0.0019922500000000001 * fVec2[((IOTA - 95) & 127)]) + ((0.000140679 * fVec2[((IOTA - 94) & 127)]) + ((0.0011280300000000001 * fVec2[((IOTA - 93) & 127)]) + ((0.0019903999999999998 * fVec2[((IOTA - 92) & 127)]) + ((0.000397475 * fVec2[((IOTA - 91) & 127)]) + ((0.00035911300000000004 * fVec2[((IOTA - 85) & 127)]) + ((0.000127816 * fVec2[((IOTA - 81) & 127)]) + ((0.00177585 * fVec2[((IOTA - 79) & 127)]) + ((0.0014990399999999999 * fVec2[((IOTA - 80) & 127)]) + ((5.3717400000000002e-05 * fVec2[((IOTA - 73) & 127)]) + ((0.00100658 * fVec2[((IOTA - 72) & 127)]) + ((0.00017406600000000001 * fVec2[((IOTA - 71) & 127)]) + ((0.00071912600000000005 * fVec2[((IOTA - 67) & 127)]) + ((0.00072212600000000002 * fVec2[((IOTA - 64) & 127)]) + ((0.0049928100000000003 * fVec2[((IOTA - 63) & 127)]) + ((0.0037463600000000002 * fVec2[((IOTA - 62) & 127)]) + ((0.0011032699999999999 * fVec2[((IOTA - 61) & 127)]) + ((1.5565300000000002e-05 * fVec2[((IOTA - 59) & 127)]) + ((0.0010646199999999998 * fVec2[((IOTA - 55) & 127)]) + ((0.0014746 * fVec2[((IOTA - 54) & 127)]) + ((0.0030302600000000003 * fVec2[((IOTA - 53) & 127)]) + ((0.0025201400000000001 * fVec2[((IOTA - 52) & 127)]) + ((0.0023052000000000003 * fVec2[((IOTA - 51) & 127)]) + ((0.0064089099999999994 * fVec2[((IOTA - 50) & 127)]) + ((0.0062176200000000001 * fVec2[((IOTA - 49) & 127)]) + ((0.00136571 * fVec2[((IOTA - 48) & 127)]) + ((0.000484007 * fVec2[((IOTA - 47) & 127)]) + ((0.0053646300000000004 * fVec2[((IOTA - 43) & 127)]) + ((0.00049839000000000003 * fVec2[((IOTA - 40) & 127)]) + ((0.0029793300000000001 * fVec2[((IOTA - 39) & 127)]) + ((0.00011673199999999999 * fVec2[((IOTA - 38) & 127)]) + ((0.0021503299999999998 * fVec2[((IOTA - 34) & 127)]) + ((0.0040663799999999996 * fVec2[((IOTA - 31) & 127)]) + ((0.022960699999999997 * fVec2[((IOTA - 30) & 127)]) + ((0.016656999999999998 * fVec2[((IOTA - 26) & 127)]) + ((0.026276299999999999 * fVec2[((IOTA - 23) & 127)]) + ((0.020495800000000002 * fVec2[((IOTA - 22) & 127)]) + ((0.023659500000000003 * fVec2[((IOTA - 21) & 127)]) + ((0.0210797 * fVec2[((IOTA - 20) & 127)]) + ((0.027862700000000001 * fVec2[((IOTA - 19) & 127)]) + ((0.015660400000000001 * fVec2[((IOTA - 16) & 127)]) + ((0.0069313100000000004 * fVec2[((IOTA - 12) & 127)]) + ((0.0015239000000000001 * fVec2[((IOTA - 11) & 127)]) + ((0.0018694900000000001 * fVec2[((IOTA - 7) & 127)]) + ((0.00091357700000000016 * fVec2[((IOTA - 5) & 127)]) + ((0.00034025 * fVec2[((IOTA - 3) & 127)]) + (((2.1476600000000004e-05 * fVec1[((IOTA - 122) & 127)]) + ((2.6092200000000004e-05 * fVec1[((IOTA - 121) & 127)]) + ((4.1403999999999999e-05 * fVec1[((IOTA - 116) & 127)]) + ((0.00020260300000000001 * fVec1[((IOTA - 113) & 127)]) + ((0.00014776200000000001 * fVec1[((IOTA - 112) & 127)]) + ((0.00045834100000000002 * fVec1[((IOTA - 109) & 127)]) + ((0.00029239199999999999 * fVec1[((IOTA - 108) & 127)]) + ((0.00098381599999999999 * fVec1[((IOTA - 90) & 127)]) + ((0.0011919700000000001 * fVec1[((IOTA - 89) & 127)]) + ((0.00086149400000000008 * fVec1[((IOTA - 77) & 127)]) + ((0.00058334300000000006 * fVec1[((IOTA - 76) & 127)]) + ((0.0013006599999999999 * fVec1[((IOTA - 75) & 127)]) + ((0.00041085900000000007 * fVec1[((IOTA - 71) & 127)]) + ((0.0012948999999999999 * fVec1[((IOTA - 66) & 127)]) + ((0.0018707700000000001 * fVec1[((IOTA - 65) & 127)]) + ((0.00060252200000000008 * fVec1[((IOTA - 64) & 127)]) + ((0.0005644370000000001 * fVec1[((IOTA - 62) & 127)]) + ((0.00017768299999999999 * fVec1[((IOTA - 59) & 127)]) + ((0.0039611100000000003 * fVec1[((IOTA - 58) & 127)]) + ((0.0042174700000000001 * fVec1[((IOTA - 57) & 127)]) + ((0.0044953900000000001 * fVec1[((IOTA - 56) & 127)]) + ((0.0022670200000000002 * fVec1[((IOTA - 55) & 127)]) + ((0.0021868500000000002 * fVec1[((IOTA - 52) & 127)]) + ((9.3079100000000001e-05 * fVec1[((IOTA - 51) & 127)]) + ((0.0021948699999999998 * fVec1[((IOTA - 49) & 127)]) + ((0.0045924300000000006 * fVec1[((IOTA - 46) & 127)]) + ((0.0084135899999999986 * fVec1[((IOTA - 45) & 127)]) + ((0.00067984600000000012 * fVec1[((IOTA - 40) & 127)]) + ((0.00402003 * fVec1[((IOTA - 39) & 127)]) + ((0.017721000000000001 * fVec1[((IOTA - 36) & 127)]) + ((0.0035177100000000003 * fVec1[((IOTA - 33) & 127)]) + ((0.012616499999999999 * fVec1[((IOTA - 32) & 127)]) + ((0.0087009700000000006 * fVec1[((IOTA - 31) & 127)]) + ((0.00866514 * fVec1[((IOTA - 26) & 127)]) + ((0.0044089000000000003 * fVec1[((IOTA - 25) & 127)]) + ((0.023826100000000003 * fVec1[((IOTA - 24) & 127)]) + ((0.0116758 * fVec1[((IOTA - 23) & 127)]) + ((0.0080310599999999996 * fVec1[((IOTA - 19) & 127)]) + ((0.0123386 * fVec1[((IOTA - 18) & 127)]) + ((0.0091981400000000005 * fVec1[((IOTA - 15) & 127)]) + ((0.00114058 * fVec1[((IOTA - 13) & 127)]) + ((0.0133545 * fVec1[((IOTA - 12) & 127)]) + ((0.00042513400000000003 * fVec1[((IOTA - 10) & 127)]) + ((0.00031202200000000002 * fVec1[((IOTA - 9) & 127)]) + ((0.00059449899999999996 * fVec1[((IOTA - 7) & 127)]) + ((9.0752000000000015e-05 * fVec1[((IOTA - 3) & 127)]) + ((2.8761299999999999e-06 * fVec1[((IOTA - 1) & 127)]) + ((3.51439e-07 * fTemp1) + ((0.00051877400000000006 * fVec1[((IOTA - 105) & 127)]) + ((0.00062261900000000004 * fVec1[((IOTA - 104) & 127)]) + ((0.000143232 * fVec1[((IOTA - 103) & 127)]) + ((9.2107400000000005e-05 * fVec1[((IOTA - 101) & 127)]) + ((0.000784532 * fVec1[((IOTA - 100) & 127)]) + ((0.00071355700000000008 * fVec1[((IOTA - 99) & 127)]) + ((0.00065499700000000004 * fVec1[((IOTA - 98) & 127)]) + ((0.00027689300000000001 * fVec1[((IOTA - 97) & 127)]) + ((5.6064900000000006e-05 * fVec3[((IOTA - 119) & 127)]) + ((2.9367600000000003e-05 * fVec3[((IOTA - 118) & 127)]) + ((3.3220999999999999e-05 * fVec3[((IOTA - 117) & 127)]) + ((0.00012805500000000002 * fVec3[((IOTA - 114) & 127)]) + ((0.000103477 * fVec3[((IOTA - 113) & 127)]) + ((0.00025872700000000005 * fVec3[((IOTA - 112) & 127)]) + ((0.00029786899999999998 * fVec3[((IOTA - 111) & 127)]) + ((0.00033988700000000003 * fVec3[((IOTA - 110) & 127)]) + ((9.3482300000000004e-05 * fVec3[((IOTA - 109) & 127)]) + ((0.00013677700000000001 * fVec3[((IOTA - 108) & 127)]) + ((0.00057155300000000003 * fVec3[((IOTA - 107) & 127)]) + ((0.00044084399999999997 * fVec3[((IOTA - 106) & 127)]) + ((0.00058204100000000005 * fVec3[((IOTA - 105) & 127)]) + ((0.00042623200000000002 * fVec3[((IOTA - 104) & 127)]) + ((0.00025379299999999999 * fVec3[((IOTA - 103) & 127)]) + ((0.0004933950000000001 * fVec3[((IOTA - 102) & 127)]) + ((0.00052014400000000005 * fVec3[((IOTA - 99) & 127)]) + ((0.0012122999999999999 * fVec3[((IOTA - 98) & 127)]) + ((0.00045970700000000006 * fVec3[((IOTA - 97) & 127)]) + ((0.00024474399999999997 * fVec3[((IOTA - 96) & 127)]) + ((0.00061810000000000001 * fVec3[((IOTA - 95) & 127)]) + ((4.9281200000000005e-05 * fVec3[((IOTA - 94) & 127)]) + ((0.00026790500000000003 * fVec3[((IOTA - 93) & 127)]) + ((0.00057291299999999998 * fVec3[((IOTA - 88) & 127)]) + ((0.00027621200000000002 * fVec3[((IOTA - 87) & 127)]) + ((0.0015819200000000001 * fVec3[((IOTA - 80) & 127)]) + ((0.00043852399999999998 * fVec3[((IOTA - 7) & 127)]) + ((3.5476400000000005e-05 * fVec3[((IOTA - 6) & 127)]) + ((0.00012342900000000001 * fVec3[((IOTA - 5) & 127)]) + ((0.00013495299999999999 * fVec3[((IOTA - 3) & 127)]) + ((6.5829500000000002e-06 * fVec3[((IOTA - 1) & 127)]) + ((0.00068458300000000011 * fVec3[((IOTA - 16) & 127)]) + ((0.0022406600000000002 * fVec3[((IOTA - 14) & 127)]) + ((0.00121477 * fVec3[((IOTA - 12) & 127)]) + ((0.00034622800000000002 * fVec3[((IOTA - 79) & 127)]) + ((0.0021050499999999998 * fVec3[((IOTA - 75) & 127)]) + ((0.00017197100000000001 * fVec3[((IOTA - 73) & 127)]) + ((0.00328831 * fVec3[((IOTA - 72) & 127)]) + ((0.0033849700000000002 * fVec3[((IOTA - 71) & 127)]) + ((0.00106408 * fVec3[((IOTA - 68) & 127)]) + ((0.0026545100000000001 * fVec3[((IOTA - 67) & 127)]) + ((0.0023114799999999999 * fVec3[((IOTA - 66) & 127)]) + ((0.0010799700000000002 * fVec3[((IOTA - 65) & 127)]) + ((0.000133325 * fVec3[((IOTA - 64) & 127)]) + ((0.00104922 * fVec3[((IOTA - 63) & 127)]) + ((0.00064313500000000008 * fVec3[((IOTA - 62) & 127)]) + ((0.000829111 * fVec3[((IOTA - 50) & 127)]) + ((0.0047209000000000001 * fVec3[((IOTA - 49) & 127)]) + ((0.0040045700000000007 * fVec3[((IOTA - 48) & 127)]) + ((0.0028235399999999998 * fVec3[((IOTA - 47) & 127)]) + ((0.0024041399999999999 * fVec3[((IOTA - 46) & 127)]) + ((0.00123226 * fVec3[((IOTA - 43) & 127)]) + ((0.0055503799999999997 * fVec3[((IOTA - 42) & 127)]) + ((0.0055164099999999994 * fVec3[((IOTA - 41) & 127)]) + ((0.009551539999999999 * fVec3[((IOTA - 40) & 127)]) + ((0.0071602499999999999 * fVec3[((IOTA - 37) & 127)]) + ((0.0059806600000000005 * fVec3[((IOTA - 34) & 127)]) + ((0.0033412400000000001 * fVec3[((IOTA - 33) & 127)]) + ((0.0013020600000000001 * fVec3[((IOTA - 32) & 127)]) + ((0.010603599999999999 * fVec3[((IOTA - 29) & 127)]) + ((0.0047975099999999996 * fVec3[((IOTA - 28) & 127)]) + ((0.00037618999999999999 * fVec3[((IOTA - 25) & 127)]) + ((0.025127100000000003 * fVec3[((IOTA - 24) & 127)]) + ((0.0074241100000000003 * fVec3[((IOTA - 22) & 127)]) + ((0.032307200000000001 * fVec3[((IOTA - 19) & 127)]) + ((0.00015070900000000001 * fVec3[((IOTA - 11) & 127)]) + ((2.7837800000000002e-06 * fVec4[((IOTA - 122) & 127)]) + ((8.3043399999999988e-06 * fVec4[((IOTA - 121) & 127)]) + ((5.6696200000000008e-05 * fVec4[((IOTA - 115) & 127)]) + (((0.00013219300000000001 * fVec4[((IOTA - 112) & 127)]) + ((0.00031032800000000001 * fVec4[((IOTA - 111) & 127)]) + ((0.000209402 * fVec4[((IOTA - 110) & 127)]) + ((0.000392538 * fVec4[((IOTA - 109) & 127)]) + ((0.00021252900000000001 * fVec4[((IOTA - 108) & 127)]) + ((0.00022341099999999999 * fVec4[((IOTA - 107) & 127)]) + ((0.000455971 * fVec4[((IOTA - 106) & 127)]) + ((0.00023670100000000002 * fVec4[((IOTA - 105) & 127)]) + ((9.3216599999999998e-05 * fVec4[((IOTA - 104) & 127)]) + ((0.00011625700000000002 * fVec4[((IOTA - 103) & 127)]) + ((0.00053898200000000002 * fVec4[((IOTA - 102) & 127)]) + ((0.00063969199999999997 * fVec4[((IOTA - 101) & 127)]) + ((0.00049445900000000004 * fVec4[((IOTA - 100) & 127)]) + ((0.00113736 * fVec4[((IOTA - 99) & 127)]) + ((0.0011671499999999998 * fVec4[((IOTA - 98) & 127)]) + ((0.00080747300000000007 * fVec4[((IOTA - 97) & 127)]) + ((0.00098782800000000006 * fVec4[((IOTA - 96) & 127)]) + ((0.000116086 * fVec4[((IOTA - 95) & 127)]) + ((0.0010682000000000001 * fVec4[((IOTA - 92) & 127)]) + ((0.0010581200000000001 * fVec4[((IOTA - 91) & 127)]) + ((0.00023935499999999999 * fVec4[((IOTA - 90) & 127)]) + ((6.07349e-05 * fVec4[((IOTA - 77) & 127)]) + ((0.00024441799999999999 * fVec4[((IOTA - 71) & 127)]) + ((0.0022682500000000003 * fVec4[((IOTA - 70) & 127)]) + ((0.0013828600000000001 * fVec4[((IOTA - 69) & 127)]) + ((0.00019294500000000003 * fVec4[((IOTA - 68) & 127)]) + ((0.0022136499999999997 * fVec4[((IOTA - 67) & 127)]) + ((0.007966260000000001 * fVec4[((IOTA - 35) & 127)]) + ((0.014713700000000001 * fVec4[((IOTA - 34) & 127)]) + ((0.0070875299999999999 * fVec4[((IOTA - 29) & 127)]) + ((0.014908999999999999 * fVec4[((IOTA - 28) & 127)]) + ((0.012678 * fVec4[((IOTA - 27) & 127)]) + ((0.018085500000000001 * fVec4[((IOTA - 23) & 127)]) + ((0.041963100000000003 * fVec4[((IOTA - 22) & 127)]) + ((0.023017300000000001 * fVec4[((IOTA - 16) & 127)]) + ((0.0059658100000000002 * fVec4[((IOTA - 15) & 127)]) + ((0.0035753 * fVec4[((IOTA - 13) & 127)]) + ((0.010657300000000001 * fVec4[((IOTA - 12) & 127)]) + ((0.00023747699999999999 * fVec4[((IOTA - 10) & 127)]) + ((0.00079964000000000012 * fVec4[((IOTA - 7) & 127)]) + ((0.000231547 * fVec4[((IOTA - 4) & 127)]) + ((0.00023603400000000001 * fVec4[((IOTA - 3) & 127)]) + ((3.2773799999999996e-06 * fTemp4) + ((0.0030411100000000001 * fVec4[((IOTA - 42) & 127)]) + ((0.0032564600000000001 * fVec4[((IOTA - 38) & 127)]) + ((0.0023189199999999999 * fVec4[((IOTA - 66) & 127)]) + ((0.0022684799999999998 * fVec4[((IOTA - 65) & 127)]) + ((0.00027487300000000002 * fVec4[((IOTA - 64) & 127)]) + ((0.00097751499999999998 * fVec4[((IOTA - 62) & 127)]) + ((0.00025304199999999998 * fVec4[((IOTA - 61) & 127)]) + ((0.00036951399999999999 * fVec4[((IOTA - 60) & 127)]) + ((0.0020696600000000001 * fVec4[((IOTA - 59) & 127)]) + ((0.00039934300000000003 * fVec4[((IOTA - 58) & 127)]) + ((0.00168114 * fVec4[((IOTA - 55) & 127)]) + ((0.0019406200000000001 * fVec4[((IOTA - 54) & 127)]) + ((0.0061597700000000002 * fVec4[((IOTA - 39) & 127)]) + ((0.00213182 * fVec4[((IOTA - 48) & 127)]) + ((0.0044656900000000005 * fVec4[((IOTA - 47) & 127)]) + ((0.0055347900000000004 * fVec4[((IOTA - 46) & 127)]) + ((8.1563499999999999e-05 * fVec5[((IOTA - 118) & 127)]) + ((7.0606100000000001e-05 * fVec5[((IOTA - 117) & 127)]) + ((4.6020600000000005e-05 * fVec5[((IOTA - 116) & 127)]) + ((2.3044100000000002e-05 * fVec5[((IOTA - 115) & 127)]) + ((3.8369700000000006e-05 * fVec5[((IOTA - 114) & 127)]) + ((0.00029687600000000001 * fVec5[((IOTA - 113) & 127)]) + ((0.00024899699999999999 * fVec5[((IOTA - 112) & 127)]) + ((8.0695200000000013e-05 * fVec5[((IOTA - 111) & 127)]) + ((4.5071899999999998e-05 * fVec5[((IOTA - 110) & 127)]) + ((0.00031248700000000002 * fVec5[((IOTA - 109) & 127)]) + ((0.00029415900000000005 * fVec5[((IOTA - 108) & 127)]) + ((8.8138200000000003e-05 * fVec5[((IOTA - 107) & 127)]) + ((0.00030124200000000001 * fVec5[((IOTA - 106) & 127)]) + ((4.2708300000000006e-05 * fVec5[((IOTA - 105) & 127)]) + ((6.9614300000000009e-05 * fVec5[((IOTA - 103) & 127)]) + ((0.000321589 * fVec5[((IOTA - 99) & 127)]) + ((0.00016036600000000003 * fVec5[((IOTA - 98) & 127)]) + ((0.0012729099999999999 * fVec5[((IOTA - 88) & 127)]) + ((0.0021085400000000003 * fVec5[((IOTA - 87) & 127)]) + ((0.0005086 * fVec5[((IOTA - 86) & 127)]) + ((0.00014791000000000001 * fVec5[((IOTA - 85) & 127)]) + ((0.00032534600000000001 * fVec5[((IOTA - 81) & 127)]) + ((0.00099685500000000005 * fVec5[((IOTA - 80) & 127)]) + ((0.00052548700000000005 * fVec5[((IOTA - 61) & 127)]) + ((0.00033912900000000003 * fVec5[((IOTA - 58) & 127)]) + ((0.0021074099999999997 * fVec5[((IOTA - 55) & 127)]) + ((0.0012717499999999999 * fVec5[((IOTA - 54) & 127)]) + ((0.00060490900000000005 * fVec5[((IOTA - 48) & 127)]) + ((0.0040936100000000001 * fVec5[((IOTA - 42) & 127)]) + ((0.0020292500000000002 * fVec5[((IOTA - 41) & 127)]) + ((0.0030470000000000002 * fVec5[((IOTA - 38) & 127)]) + ((0.0096155300000000006 * fVec5[((IOTA - 37) & 127)]) + ((0.00534952 * fVec5[((IOTA - 36) & 127)]) + ((0.010443599999999999 * fVec5[((IOTA - 35) & 127)]) + ((0.014278200000000001 * fVec5[((IOTA - 34) & 127)]) + ((0.007845340000000001 * fVec5[((IOTA - 33) & 127)]) + ((0.006265520000000001 * fVec5[((IOTA - 32) & 127)]) + ((0.0039480399999999999 * fVec5[((IOTA - 31) & 127)]) + ((0.030915100000000001 * fVec5[((IOTA - 29) & 127)]) + ((0.038624800000000001 * fVec5[((IOTA - 28) & 127)]) + ((0.0106274 * fVec5[((IOTA - 26) & 127)]) + ((0.0056327499999999997 * fVec5[((IOTA - 25) & 127)]) + ((0.00093373200000000005 * fVec5[((IOTA - 24) & 127)]) + ((0.0144447 * fVec5[((IOTA - 23) & 127)]) + ((0.0027656299999999998 * fVec5[((IOTA - 14) & 127)]) + ((0.048321599999999999 * fVec5[((IOTA - 13) & 127)]) + ((0.046080900000000001 * fVec5[((IOTA - 12) & 127)]) + ((0.0051723899999999998 * fVec5[((IOTA - 11) & 127)]) + ((0.0011151400000000001 * fVec5[((IOTA - 9) & 127)]) + ((0.00019390000000000002 * fVec5[((IOTA - 4) & 127)]) + ((1.3112700000000001e-05 * fTemp5) + ((0.0018384600000000001 * fVec5[((IOTA - 68) & 127)]) + ((0.00195065 * fVec5[((IOTA - 67) & 127)]) + ((0.0012429300000000002 * fVec5[((IOTA - 66) & 127)]) + ((0.00058476299999999997 * fVec5[((IOTA - 76) & 127)]) + ((0.00186454 * fVec5[((IOTA - 75) & 127)]) + ((0.0013951499999999999 * fVec5[((IOTA - 74) & 127)]) + ((0.00129178 * fVec5[((IOTA - 73) & 127)]) + ((0.0010098400000000001 * fVec5[((IOTA - 64) & 127)]) + ((0.0016883999999999998 * fVec5[((IOTA - 72) & 127)]) + ((0.0018129000000000001 * fVec5[((IOTA - 71) & 127)]) + ((2.4813999999999997e-06 * fVec6[((IOTA - 124) & 127)]) + ((1.3482700000000002e-05 * fVec6[((IOTA - 118) & 127)]) + ((6.7211899999999999e-05 * fVec6[((IOTA - 114) & 127)]) + ((0.00013360000000000002 * fVec6[((IOTA - 113) & 127)]) + ((2.4868199999999998e-07 * fVec6[((IOTA - 112) & 127)]) + ((0.00021603300000000002 * fVec6[((IOTA - 108) & 127)]) + ((0.00013044 * fVec6[((IOTA - 107) & 127)]) + ((0.00031798600000000003 * fVec6[((IOTA - 103) & 127)]) + ((2.5636600000000001e-05 * fVec6[((IOTA - 102) & 127)]) + ((0.00013589400000000001 * fVec6[((IOTA - 101) & 127)]) + ((0.000417124 * fVec6[((IOTA - 100) & 127)]) + ((0.00028324699999999998 * fVec6[((IOTA - 99) & 127)]) + ((0.00072084000000000004 * fVec6[((IOTA - 98) & 127)]) + ((0.0013214800000000001 * fVec6[((IOTA - 94) & 127)]) + ((0.00147025 * fVec6[((IOTA - 93) & 127)]) + ((0.00043513300000000004 * fVec6[((IOTA - 92) & 127)]) + ((0.00047923700000000003 * fVec6[((IOTA - 91) & 127)]) + ((0.00045356600000000003 * fVec6[((IOTA - 90) & 127)]) + ((0.0013659900000000001 * fVec6[((IOTA - 89) & 127)]) + ((0.0012231700000000002 * fVec6[((IOTA - 88) & 127)]) + ((7.6576200000000007e-05 * fVec6[((IOTA - 87) & 127)]) + ((0.00029935000000000004 * fVec6[((IOTA - 83) & 127)]) + ((0.0033423799999999998 * fVec6[((IOTA - 82) & 127)]) + ((0.00229648 * fVec6[((IOTA - 81) & 127)]) + ((0.00063050200000000002 * fVec6[((IOTA - 79) & 127)]) + ((0.00022606700000000002 * fVec6[((IOTA - 77) & 127)]) + ((0.00061629700000000003 * fVec6[((IOTA - 62) & 127)]) + ((0.0020653400000000001 * fVec6[((IOTA - 61) & 127)]) + ((0.0027092700000000002 * fVec6[((IOTA - 60) & 127)]) + ((0.00101213 * fVec6[((IOTA - 59) & 127)]) + ((9.5653400000000015e-05 * fVec6[((IOTA - 58) & 127)]) + ((0.00156251 * fVec6[((IOTA - 54) & 127)]) + ((0.00015190600000000002 * fVec6[((IOTA - 53) & 127)]) + ((0.0026093900000000001 * fVec6[((IOTA - 51) & 127)]) + ((0.0030938500000000004 * fVec6[((IOTA - 50) & 127)]) + ((0.0031350200000000001 * fVec6[((IOTA - 49) & 127)]) + ((0.0040226100000000002 * fVec6[((IOTA - 48) & 127)]) + ((0.0049862600000000002 * fVec6[((IOTA - 44) & 127)]) + ((0.0058413700000000002 * fVec6[((IOTA - 41) & 127)]) + ((0.0045412800000000008 * fVec6[((IOTA - 40) & 127)]) + ((0.0065134700000000004 * fVec6[((IOTA - 37) & 127)]) + ((0.0086880100000000012 * fVec6[((IOTA - 35) & 127)]) + ((0.0107473 * fVec6[((IOTA - 34) & 127)]) + ((0.0015977300000000001 * fVec6[((IOTA - 32) & 127)]) + ((0.0063447800000000004 * fVec6[((IOTA - 30) & 127)]) + ((0.013484899999999999 * fVec6[((IOTA - 27) & 127)]) + ((0.0020287299999999999 * fVec6[((IOTA - 25) & 127)]) + ((0.018480799999999999 * fVec6[((IOTA - 24) & 127)]) + ((0.0056198899999999998 * fVec6[((IOTA - 22) & 127)]) + ((0.017673000000000001 * fVec6[((IOTA - 21) & 127)]) + ((0.0109137 * fVec6[((IOTA - 18) & 127)]) + ((0.0020388099999999998 * fVec6[((IOTA - 17) & 127)]) + ((0.00335082 * fVec6[((IOTA - 16) & 127)]) + ((0.00123416 * fVec6[((IOTA - 14) & 127)]) + ((0.0021818300000000001 * fVec6[((IOTA - 13) & 127)]) + ((0.00012594799999999999 * fVec6[((IOTA - 12) & 127)]) + ((0.00011811100000000002 * fVec6[((IOTA - 11) & 127)]) + ((0.00098081100000000005 * fVec6[((IOTA - 9) & 127)]) + ((0.00044730900000000001 * fVec6[((IOTA - 5) & 127)]) + ((1.2689500000000001e-05 * fVec6[((IOTA - 1) & 127)]) + ((0.000166844 * fVec6[((IOTA - 67) & 127)]) + ((0.00169188 * fVec5[((IOTA - 65) & 127)]) + ((0.00043061600000000004 * fVec6[((IOTA - 70) & 127)]) + ((0.00033741000000000001 * fVec6[((IOTA - 69) & 127)]) + ((9.3007799999999994e-06 * fVec7[((IOTA - 123) & 127)]) + ((8.1740999999999985e-06 * fVec7[((IOTA - 119) & 127)]) + ((3.2763499999999999e-05 * fVec7[((IOTA - 118) & 127)]) + ((5.73293e-05 * fVec7[((IOTA - 116) & 127)]) + ((0.00023654000000000004 * fVec7[((IOTA - 115) & 127)]) + ((0.00019556700000000001 * fVec7[((IOTA - 114) & 127)]) + ((5.6889900000000006e-05 * fVec7[((IOTA - 113) & 127)]) + ((0.00024025900000000002 * fVec7[((IOTA - 112) & 127)]) + ((0.00064424100000000004 * fVec7[((IOTA - 111) & 127)]) + ((0.00037747700000000003 * fVec7[((IOTA - 110) & 127)]) + ((3.6385200000000001e-06 * fVec7[((IOTA - 108) & 127)]) + ((0.00031980600000000001 * fVec7[((IOTA - 107) & 127)]) + ((0.00046841100000000007 * fVec7[((IOTA - 104) & 127)]) + ((0.00039931500000000002 * fVec7[((IOTA - 103) & 127)]) + ((3.42585e-06 * fVec7[((IOTA - 102) & 127)]) + ((0.00028306300000000001 * fVec7[((IOTA - 101) & 127)]) + ((0.0012796000000000001 * fVec7[((IOTA - 92) & 127)]) + ((0.0028355700000000004 * fVec7[((IOTA - 91) & 127)]) + ((0.00027312000000000001 * fVec7[((IOTA - 90) & 127)]) + ((0.00081654800000000006 * fVec7[((IOTA - 85) & 127)]) + ((7.8246599999999997e-05 * fVec7[((IOTA - 84) & 127)]) + ((0.0027393600000000001 * fVec7[((IOTA - 82) & 127)]) + ((0.00270886 * fVec7[((IOTA - 81) & 127)]) + ((0.0012424999999999999 * fVec7[((IOTA - 80) & 127)]) + ((0.00085482200000000009 * fVec7[((IOTA - 79) & 127)]) + ((0.00154955 * fVec7[((IOTA - 72) & 127)]) + ((0.0022211500000000003 * fVec7[((IOTA - 71) & 127)]) + ((0.0016530499999999999 * fVec7[((IOTA - 70) & 127)]) + ((0.0011901600000000002 * fVec7[((IOTA - 69) & 127)]) + ((0.0015993299999999999 * fVec7[((IOTA - 68) & 127)]) + ((0.00083150600000000009 * fVec7[((IOTA - 67) & 127)]) + ((0.0010392999999999999 * fVec7[((IOTA - 64) & 127)]) + ((0.00199607 * fVec7[((IOTA - 54) & 127)]) + ((0.00078433799999999998 * fVec7[((IOTA - 53) & 127)]) + ((0.00289646 * fVec7[((IOTA - 41) & 127)]) + ((0.0028975399999999997 * fVec7[((IOTA - 39) & 127)]) + ((0.018965700000000002 * fVec7[((IOTA - 38) & 127)]) + ((0.0134784 * fVec7[((IOTA - 37) & 127)]) + ((0.0031132099999999999 * fVec7[((IOTA - 36) & 127)]) + ((0.0063885599999999997 * fVec7[((IOTA - 35) & 127)]) + ((0.019759800000000001 * fVec7[((IOTA - 34) & 127)]) + ((0.027778900000000002 * fVec7[((IOTA - 33) & 127)]) + ((0.025745200000000003 * fVec7[((IOTA - 32) & 127)]) + ((0.0028674200000000003 * fVec7[((IOTA - 30) & 127)]) + ((0.023753799999999999 * fVec7[((IOTA - 29) & 127)]) + ((0.020933799999999999 * fVec7[((IOTA - 28) & 127)]) + ((0.0134953 * fVec7[((IOTA - 27) & 127)]) + ((0.024289200000000004 * fVec7[((IOTA - 26) & 127)]) + ((0.0073439100000000004 * fVec7[((IOTA - 25) & 127)]) + ((0.0091244499999999992 * fVec7[((IOTA - 22) & 127)]) + ((0.027517900000000001 * fVec7[((IOTA - 14) & 127)]) + ((0.060376700000000005 * fVec7[((IOTA - 13) & 127)]) + ((0.060888600000000008 * fVec7[((IOTA - 12) & 127)]) + ((0.0051214199999999998 * fVec7[((IOTA - 11) & 127)]) + ((0.00126033 * fVec7[((IOTA - 9) & 127)]) + ((2.0820699999999999e-05 * fVec7[((IOTA - 8) & 127)]) + ((0.00053298400000000002 * fVec7[((IOTA - 5) & 127)]) + ((6.2782600000000011e-05 * fVec7[((IOTA - 4) & 127)]) + ((7.6560500000000007e-05 * fVec7[((IOTA - 3) & 127)]) + ((2.9599300000000003e-05 * fVec7[((IOTA - 1) & 127)]) + ((1.8915500000000002e-05 * fTemp7) + ((0.0019319900000000002 * fVec7[((IOTA - 58) & 127)]) + ((0.00051400900000000006 * fVec7[((IOTA - 55) & 127)]) + ((0.0012512000000000001 * fVec7[((IOTA - 63) & 127)]) + (((1.0336899999999999e-06 * fVec8[((IOTA - 126) & 127)]) + ((1.07578e-06 * fVec8[((IOTA - 124) & 127)]) + ((1.0896600000000002e-05 * fVec8[((IOTA - 123) & 127)]) + ((5.7825300000000005e-06 * fVec8[((IOTA - 121) & 127)]) + ((2.9587800000000002e-05 * fVec8[((IOTA - 120) & 127)]) + ((0.00010999399999999999 * fVec8[((IOTA - 104) & 127)]) + ((1.2511200000000001e-05 * fVec8[((IOTA - 103) & 127)]) + ((3.3373e-05 * fVec8[((IOTA - 101) & 127)]) + ((0.0022768000000000003 * fVec8[((IOTA - 96) & 127)]) + ((0.0020205099999999997 * fVec8[((IOTA - 95) & 127)]) + ((0.00027500499999999999 * fVec8[((IOTA - 91) & 127)]) + ((9.9177200000000003e-05 * fVec8[((IOTA - 87) & 127)]) + ((0.0006416280000000001 * fVec8[((IOTA - 80) & 127)]) + ((0.0018692700000000001 * fVec8[((IOTA - 77) & 127)]) + ((0.000129173 * fVec8[((IOTA - 79) & 127)]) + ((0.0010500000000000002 * fVec8[((IOTA - 76) & 127)]) + ((0.0013042499999999999 * fVec8[((IOTA - 72) & 127)]) + ((0.0025056699999999998 * fVec8[((IOTA - 71) & 127)]) + ((0.0044664700000000002 * fVec8[((IOTA - 70) & 127)]) + ((0.0047280300000000003 * fVec8[((IOTA - 69) & 127)]) + ((0.0037914799999999999 * fVec8[((IOTA - 68) & 127)]) + ((0.0063763400000000003 * fVec8[((IOTA - 67) & 127)]) + ((0.0065615300000000003 * fVec8[((IOTA - 66) & 127)]) + ((0.00222449 * fVec8[((IOTA - 65) & 127)]) + ((0.0014331000000000001 * fVec8[((IOTA - 36) & 127)]) + ((0.0043624700000000002 * fVec8[((IOTA - 34) & 127)]) + ((0.0071496000000000007 * fVec8[((IOTA - 33) & 127)]) + ((0.009442299999999999 * fVec8[((IOTA - 31) & 127)]) + ((0.041430000000000002 * fVec8[((IOTA - 30) & 127)]) + ((0.032932100000000006 * fVec8[((IOTA - 29) & 127)]) + ((0.0056186100000000004 * fVec8[((IOTA - 28) & 127)]) + ((0.024621200000000003 * fVec8[((IOTA - 27) & 127)]) + ((0.042141200000000004 * fVec8[((IOTA - 26) & 127)]) + ((0.028794800000000002 * fVec8[((IOTA - 25) & 127)]) + ((0.06345640000000001 * fVec8[((IOTA - 24) & 127)]) + ((0.07541260000000001 * fVec8[((IOTA - 23) & 127)]) + ((0.00046772600000000007 * fVec8[((IOTA - 21) & 127)]) + ((0.049093400000000002 * fVec8[((IOTA - 20) & 127)]) + ((0.054047100000000001 * fVec8[((IOTA - 19) & 127)]) + ((0.0108471 * fVec8[((IOTA - 16) & 127)]) + ((0.0010471900000000001 * fVec8[((IOTA - 7) & 127)]) + ((0.00047446700000000006 * fVec8[((IOTA - 6) & 127)]) + ((0.00031437800000000003 * fVec8[((IOTA - 2) & 127)]) + ((1.5753899999999999e-07 * fVec9[((IOTA - 126) & 127)]) + ((3.3066799999999999e-06 * fVec9[((IOTA - 125) & 127)]) + ((9.6444300000000008e-05 * fVec9[((IOTA - 110) & 127)]) + ((0.00034096799999999998 * fVec9[((IOTA - 109) & 127)]) + ((1.0190999999999999e-05 * fVec9[((IOTA - 108) & 127)]) + ((0.00023396100000000001 * fVec9[((IOTA - 106) & 127)]) + ((0.00052374700000000008 * fVec9[((IOTA - 105) & 127)]) + ((0.00036215100000000001 * fVec9[((IOTA - 104) & 127)]) + ((0.00063805800000000005 * fVec9[((IOTA - 102) & 127)]) + ((0.0011957500000000002 * fVec9[((IOTA - 101) & 127)]) + ((0.0010047600000000002 * fVec9[((IOTA - 100) & 127)]) + ((0.00095472699999999994 * fVec9[((IOTA - 99) & 127)]) + ((0.00092775000000000008 * fVec9[((IOTA - 98) & 127)]) + ((0.00122649 * fVec9[((IOTA - 97) & 127)]) + ((0.0011230999999999999 * fVec9[((IOTA - 93) & 127)]) + ((0.00125953 * fVec9[((IOTA - 92) & 127)]) + ((0.00019295400000000001 * fVec9[((IOTA - 91) & 127)]) + ((0.00055969600000000004 * fVec9[((IOTA - 89) & 127)]) + ((0.000103257 * fVec9[((IOTA - 76) & 127)]) + ((0.00171093 * fVec9[((IOTA - 73) & 127)]) + ((0.0020383699999999999 * fVec9[((IOTA - 72) & 127)]) + ((0.0013637999999999999 * fVec9[((IOTA - 69) & 127)]) + ((0.0024843999999999999 * fVec9[((IOTA - 68) & 127)]) + ((0.00074355600000000003 * fVec9[((IOTA - 67) & 127)]) + ((0.00089791299999999997 * fVec9[((IOTA - 65) & 127)]) + ((0.0028104300000000005 * fVec9[((IOTA - 64) & 127)]) + ((0.0015055300000000001 * fVec9[((IOTA - 63) & 127)]) + ((0.00129704 * fVec9[((IOTA - 62) & 127)]) + ((0.00045463200000000001 * fVec9[((IOTA - 61) & 127)]) + ((0.00292619 * fVec9[((IOTA - 60) & 127)]) + ((0.0039499399999999999 * fVec9[((IOTA - 59) & 127)]) + ((0.00042873700000000005 * fVec9[((IOTA - 57) & 127)]) + ((0.00077501600000000001 * fVec9[((IOTA - 56) & 127)]) + ((0.0057435900000000007 * fVec9[((IOTA - 52) & 127)]) + ((0.0064549899999999999 * fVec9[((IOTA - 45) & 127)]) + ((0.0094244500000000009 * fVec9[((IOTA - 39) & 127)]) + ((0.0011423000000000002 * fVec9[((IOTA - 38) & 127)]) + ((0.0177702 * fVec9[((IOTA - 36) & 127)]) + ((0.0096359600000000007 * fVec9[((IOTA - 35) & 127)]) + ((0.019155500000000002 * fVec9[((IOTA - 33) & 127)]) + ((0.019293299999999999 * fVec9[((IOTA - 32) & 127)]) + ((0.0068834500000000002 * fVec9[((IOTA - 29) & 127)]) + ((0.036199000000000002 * fVec9[((IOTA - 26) & 127)]) + ((0.028412400000000001 * fVec9[((IOTA - 23) & 127)]) + ((0.016930500000000001 * fVec9[((IOTA - 20) & 127)]) + ((0.0106017 * fVec9[((IOTA - 19) & 127)]) + ((0.000263627 * fVec9[((IOTA - 17) & 127)]) + ((0.00025129900000000002 * fVec9[((IOTA - 15) & 127)]) + ((0.00047378999999999998 * fVec9[((IOTA - 14) & 127)]) + ((0.000359551 * fVec9[((IOTA - 11) & 127)]) + ((0.00050858999999999995 * fVec9[((IOTA - 10) & 127)]) + ((0.00025865000000000003 * fVec9[((IOTA - 8) & 127)]) + ((0.00030013000000000001 * fVec9[((IOTA - 7) & 127)]) + ((0.00012962100000000001 * fVec9[((IOTA - 4) & 127)]) + ((5.1984399999999995e-06 * fVec9[((IOTA - 2) & 127)]) + ((2.0081900000000002e-05 * fVec9[((IOTA - 1) & 127)]) + ((5.35095e-06 * fTemp9) + (((6.5997900000000001e-08 * fVec10[((IOTA - 126) & 127)]) + ((2.1505000000000002e-05 * fVec10[((IOTA - 111) & 127)]) + ((0.00025875799999999999 * fVec10[((IOTA - 110) & 127)]) + ((0.00016541 * fVec10[((IOTA - 109) & 127)]) + ((0.00012994100000000001 * fVec10[((IOTA - 108) & 127)]) + ((0.000501459 * fVec10[((IOTA - 107) & 127)]) + ((0.00061807300000000002 * fVec10[((IOTA - 106) & 127)]) + ((0.00041380000000000003 * fVec10[((IOTA - 105) & 127)]) + ((4.2136500000000006e-05 * fVec10[((IOTA - 102) & 127)]) + ((1.1025e-06 * fVec10[((IOTA - 101) & 127)]) + ((0.000102185 * fVec10[((IOTA - 100) & 127)]) + ((0.0010346200000000002 * fVec10[((IOTA - 99) & 127)]) + ((0.0015065 * fVec10[((IOTA - 98) & 127)]) + ((0.00015973800000000001 * fVec10[((IOTA - 94) & 127)]) + ((0.00065440400000000003 * fVec10[((IOTA - 93) & 127)]) + ((0.00049362799999999997 * fVec10[((IOTA - 91) & 127)]) + ((0.0010192300000000001 * fVec10[((IOTA - 90) & 127)]) + ((7.1971000000000006e-05 * fVec10[((IOTA - 85) & 127)]) + ((0.00051516900000000011 * fVec10[((IOTA - 84) & 127)]) + ((0.00076406400000000006 * fVec10[((IOTA - 83) & 127)]) + ((9.4944000000000018e-05 * fVec10[((IOTA - 81) & 127)]) + ((0.00095418100000000002 * fVec10[((IOTA - 80) & 127)]) + ((0.00034814200000000002 * fVec10[((IOTA - 76) & 127)]) + ((8.0286900000000005e-05 * fVec10[((IOTA - 71) & 127)]) + ((0.00159566 * fVec10[((IOTA - 70) & 127)]) + ((1.1146700000000001e-05 * fVec10[((IOTA - 67) & 127)]) + ((0.0016114299999999999 * fVec10[((IOTA - 66) & 127)]) + ((0.0030693399999999998 * fVec10[((IOTA - 65) & 127)]) + ((0.0029336900000000001 * fVec10[((IOTA - 64) & 127)]) + ((0.00021672300000000002 * fVec10[((IOTA - 61) & 127)]) + ((0.0015251900000000001 * fVec10[((IOTA - 60) & 127)]) + ((0.00063413500000000008 * fVec10[((IOTA - 59) & 127)]) + ((0.0015717800000000001 * fVec10[((IOTA - 40) & 127)]) + ((0.0086705299999999992 * fVec10[((IOTA - 37) & 127)]) + ((0.00411948 * fVec10[((IOTA - 34) & 127)]) + ((0.0107584 * fVec10[((IOTA - 33) & 127)]) + ((0.0029588800000000001 * fVec10[((IOTA - 32) & 127)]) + ((0.0139764 * fVec10[((IOTA - 30) & 127)]) + ((0.0093965200000000002 * fVec10[((IOTA - 29) & 127)]) + ((0.016385799999999999 * fVec10[((IOTA - 28) & 127)]) + ((0.015254500000000001 * fVec10[((IOTA - 27) & 127)]) + ((0.0099207400000000008 * fVec10[((IOTA - 26) & 127)]) + ((0.041638400000000006 * fVec10[((IOTA - 25) & 127)]) + ((0.020153599999999997 * fVec10[((IOTA - 24) & 127)]) + ((0.00032049699999999999 * fVec10[((IOTA - 23) & 127)]) + ((0.034925999999999999 * fVec10[((IOTA - 22) & 127)]) + ((0.0069752599999999996 * fVec10[((IOTA - 21) & 127)]) + ((0.0037277 * fVec10[((IOTA - 20) & 127)]) + ((0.045202099999999995 * fVec10[((IOTA - 19) & 127)]) + ((0.00526948 * fVec10[((IOTA - 16) & 127)]) + ((0.000358363 * fVec10[((IOTA - 10) & 127)]) + ((0.00023124899999999999 * fVec10[((IOTA - 7) & 127)]) + ((0.00020135900000000002 * fVec10[((IOTA - 6) & 127)]) + (((7.2115600000000003e-07 * fVec11[((IOTA - 126) & 127)]) + ((3.4760399999999997e-08 * fVec11[((IOTA - 123) & 127)]) + ((2.0505700000000003e-05 * fVec11[((IOTA - 122) & 127)]) + ((7.2276399999999995e-06 * fVec11[((IOTA - 121) & 127)]) + ((1.3220600000000002e-05 * fVec11[((IOTA - 120) & 127)]) + ((1.2673900000000001e-05 * fVec11[((IOTA - 118) & 127)]) + ((4.4900900000000009e-05 * fVec11[((IOTA - 117) & 127)]) + ((4.1691399999999999e-05 * fVec11[((IOTA - 110) & 127)]) + ((0.00027668200000000005 * fVec11[((IOTA - 92) & 127)]) + ((0.00280241 * fVec11[((IOTA - 82) & 127)]) + ((0.0020786799999999999 * fVec11[((IOTA - 81) & 127)]) + ((0.00091981900000000011 * fVec11[((IOTA - 80) & 127)]) + ((0.0002275 * fVec11[((IOTA - 79) & 127)]) + ((7.5101900000000007e-05 * fVec11[((IOTA - 76) & 127)]) + ((0.00076943900000000002 * fVec11[((IOTA - 72) & 127)]) + ((0.00063752100000000005 * fVec11[((IOTA - 71) & 127)]) + ((0.0026788099999999998 * fVec11[((IOTA - 70) & 127)]) + ((0.0036546199999999999 * fVec11[((IOTA - 69) & 127)]) + ((7.3547000000000006e-05 * fVec11[((IOTA - 68) & 127)]) + ((0.0010616200000000001 * fVec11[((IOTA - 66) & 127)]) + ((0.00033734999999999999 * fVec11[((IOTA - 64) & 127)]) + ((0.00050336900000000004 * fVec11[((IOTA - 63) & 127)]) + ((0.0013227800000000002 * fVec11[((IOTA - 61) & 127)]) + ((0.0013802 * fVec11[((IOTA - 60) & 127)]) + ((0.00057507100000000002 * fVec11[((IOTA - 59) & 127)]) + ((0.0017853699999999999 * fVec11[((IOTA - 58) & 127)]) + ((0.0034082300000000004 * fVec11[((IOTA - 57) & 127)]) + ((0.00345985 * fVec11[((IOTA - 56) & 127)]) + ((0.00155444 * fVec11[((IOTA - 53) & 127)]) + ((0.0014091100000000001 * fVec11[((IOTA - 52) & 127)]) + ((0.0018625499999999999 * fVec11[((IOTA - 51) & 127)]) + ((0.00053192199999999999 * fVec11[((IOTA - 48) & 127)]) + ((0.000148231 * fVec11[((IOTA - 47) & 127)]) + ((0.0072206400000000004 * fVec11[((IOTA - 44) & 127)]) + ((0.0011467599999999999 * fVec11[((IOTA - 43) & 127)]) + ((0.0050838799999999998 * fVec11[((IOTA - 35) & 127)]) + ((0.013509400000000001 * fVec11[((IOTA - 32) & 127)]) + ((0.015784800000000002 * fVec11[((IOTA - 27) & 127)]) + ((0.0024348900000000003 * fVec11[((IOTA - 25) & 127)]) + ((0.0034120499999999998 * fVec11[((IOTA - 24) & 127)]) + ((0.00206245 * fVec11[((IOTA - 23) & 127)]) + ((0.036800600000000003 * fVec11[((IOTA - 19) & 127)]) + ((0.016894100000000002 * fVec11[((IOTA - 16) & 127)]) + ((0.015907999999999999 * fVec11[((IOTA - 15) & 127)]) + ((0.00139284 * fVec11[((IOTA - 13) & 127)]) + ((0.0111489 * fVec11[((IOTA - 12) & 127)]) + ((0.00048254200000000003 * fVec11[((IOTA - 10) & 127)]) + ((0.00084440200000000006 * fVec11[((IOTA - 7) & 127)]) + (((6.1446399999999998e-06 * fVec12[((IOTA - 123) & 127)]) + ((8.1741199999999999e-06 * fVec12[((IOTA - 122) & 127)]) + ((2.2315100000000003e-05 * fVec12[((IOTA - 118) & 127)]) + ((4.6366800000000005e-05 * fVec12[((IOTA - 109) & 127)]) + ((0.00015426800000000002 * fVec12[((IOTA - 108) & 127)]) + ((2.9996500000000003e-05 * fVec12[((IOTA - 104) & 127)]) + ((0.00022863600000000002 * fVec12[((IOTA - 103) & 127)]) + ((0.00013601100000000001 * fVec12[((IOTA - 101) & 127)]) + ((0.00011103000000000001 * fVec12[((IOTA - 100) & 127)]) + ((0.00055044600000000001 * fVec12[((IOTA - 98) & 127)]) + ((0.00044798200000000004 * fVec12[((IOTA - 97) & 127)]) + ((0.00032662200000000005 * fVec12[((IOTA - 96) & 127)]) + ((0.00065044300000000001 * fVec12[((IOTA - 92) & 127)]) + ((0.0011816700000000001 * fVec12[((IOTA - 91) & 127)]) + ((0.00100478 * fVec12[((IOTA - 90) & 127)]) + ((4.4411900000000001e-05 * fVec12[((IOTA - 89) & 127)]) + ((0.000103707 * fVec12[((IOTA - 85) & 127)]) + ((0.00012959000000000001 * fVec12[((IOTA - 84) & 127)]) + ((0.0012166300000000002 * fVec12[((IOTA - 82) & 127)]) + ((0.00073013500000000003 * fVec12[((IOTA - 81) & 127)]) + ((0.0015448500000000002 * fVec12[((IOTA - 80) & 127)]) + ((0.00109789 * fVec12[((IOTA - 79) & 127)]) + ((0.00041635900000000004 * fVec12[((IOTA - 77) & 127)]) + ((0.00033440100000000001 * fVec12[((IOTA - 74) & 127)]) + ((0.00171149 * fVec12[((IOTA - 71) & 127)]) + ((0.0032145400000000001 * fVec12[((IOTA - 70) & 127)]) + ((0.000234556 * fVec12[((IOTA - 69) & 127)]) + ((0.0009296310000000001 * fVec12[((IOTA - 67) & 127)]) + ((0.00017575500000000001 * fVec12[((IOTA - 66) & 127)]) + ((0.00098071900000000012 * fVec12[((IOTA - 64) & 127)]) + ((0.00040021800000000004 * fVec12[((IOTA - 63) & 127)]) + ((0.0020002800000000001 * fVec12[((IOTA - 61) & 127)]) + ((0.0024495200000000002 * fVec12[((IOTA - 56) & 127)]) + ((0.0022621500000000001 * fVec12[((IOTA - 55) & 127)]) + ((0.0026210900000000004 * fVec12[((IOTA - 54) & 127)]) + ((0.00107755 * fVec12[((IOTA - 53) & 127)]) + ((0.0018869100000000001 * fVec12[((IOTA - 51) & 127)]) + ((0.0016816299999999999 * fVec12[((IOTA - 48) & 127)]) + ((0.00099638500000000002 * fVec12[((IOTA - 47) & 127)]) + ((0.0058219500000000002 * fVec12[((IOTA - 34) & 127)]) + ((0.017078900000000001 * fVec12[((IOTA - 33) & 127)]) + ((0.00087088200000000001 * fVec12[((IOTA - 30) & 127)]) + ((0.027225600000000003 * fVec12[((IOTA - 29) & 127)]) + ((0.00946403 * fVec12[((IOTA - 28) & 127)]) + ((0.0038781100000000002 * fVec12[((IOTA - 25) & 127)]) + ((0.048044200000000002 * fVec12[((IOTA - 24) & 127)]) + ((0.0047823300000000004 * fVec12[((IOTA - 23) & 127)]) + ((0.031593799999999998 * fVec12[((IOTA - 21) & 127)]) + ((0.0092093100000000001 * fVec12[((IOTA - 20) & 127)]) + ((0.0182515 * fVec12[((IOTA - 19) & 127)]) + ((0.0125871 * fVec12[((IOTA - 16) & 127)]) + ((0.0010793700000000001 * fVec12[((IOTA - 14) & 127)]) + ((0.0061485900000000007 * fVec12[((IOTA - 12) & 127)]) + ((0.00108131 * fVec12[((IOTA - 11) & 127)]) + ((0.00149292 * fVec12[((IOTA - 7) & 127)]) + ((0.00062478100000000003 * fVec12[((IOTA - 5) & 127)]) + ((0.00028939400000000006 * fVec12[((IOTA - 3) & 127)]) + ((0.0034718700000000002 * fVec12[((IOTA - 43) & 127)]) + ((1.4188099999999999e-06 * fVec13[((IOTA - 126) & 127)]) + ((3.3187600000000001e-06 * fVec13[((IOTA - 125) & 127)]) + ((5.1482899999999996e-06 * fVec13[((IOTA - 124) & 127)]) + ((8.7600299999999995e-06 * fVec13[((IOTA - 123) & 127)]) + ((5.5660599999999997e-06 * fVec13[((IOTA - 122) & 127)]) + ((5.530960000000001e-05 * fVec13[((IOTA - 121) & 127)]) + ((0.00011918500000000002 * fVec13[((IOTA - 120) & 127)]) + ((9.8678100000000013e-05 * fVec13[((IOTA - 119) & 127)]) + (((4.2207000000000004e-05 * fVec13[((IOTA - 118) & 127)]) + ((3.2490500000000003e-05 * fVec13[((IOTA - 117) & 127)]) + ((0.00011697900000000002 * fVec13[((IOTA - 116) & 127)]) + ((5.6691300000000004e-05 * fVec13[((IOTA - 112) & 127)]) + ((0.000115798 * fVec13[((IOTA - 111) & 127)]) + ((0.0037339199999999999 * fVec13[((IOTA - 96) & 127)]) + ((0.0027517499999999999 * fVec13[((IOTA - 95) & 127)]) + ((0.00065997500000000004 * fVec13[((IOTA - 92) & 127)]) + ((0.0016790700000000002 * fVec13[((IOTA - 91) & 127)]) + ((0.0019817300000000001 * fVec13[((IOTA - 88) & 127)]) + ((0.0040626200000000003 * fVec13[((IOTA - 87) & 127)]) + ((0.0023261500000000004 * fVec13[((IOTA - 86) & 127)]) + ((0.0015044699999999999 * fVec13[((IOTA - 85) & 127)]) + ((0.0010922900000000001 * fVec13[((IOTA - 84) & 127)]) + ((0.0012104800000000001 * fVec13[((IOTA - 64) & 127)]) + ((0.0039074399999999999 * fVec13[((IOTA - 63) & 127)]) + ((0.00102589 * fVec13[((IOTA - 62) & 127)]) + ((0.00070128400000000004 * fVec13[((IOTA - 59) & 127)]) + ((0.00040873600000000004 * fVec13[((IOTA - 58) & 127)]) + ((0.0011136799999999999 * fVec13[((IOTA - 57) & 127)]) + ((0.0035448200000000002 * fVec13[((IOTA - 56) & 127)]) + ((0.0022150400000000002 * fVec13[((IOTA - 55) & 127)]) + ((3.8517100000000004e-05 * fVec13[((IOTA - 54) & 127)]) + ((0.0011952499999999999 * fVec13[((IOTA - 53) & 127)]) + ((0.00017855099999999999 * fVec13[((IOTA - 52) & 127)]) + ((0.0020778099999999998 * fVec13[((IOTA - 51) & 127)]) + ((0.0048699899999999994 * fVec13[((IOTA - 50) & 127)]) + ((0.0020168600000000001 * fVec13[((IOTA - 49) & 127)]) + ((0.0011997199999999998 * fVec13[((IOTA - 47) & 127)]) + ((0.0061526599999999999 * fVec13[((IOTA - 46) & 127)]) + ((0.0028706900000000004 * fVec13[((IOTA - 44) & 127)]) + ((0.011077500000000001 * fVec13[((IOTA - 43) & 127)]) + ((0.0022290399999999998 * fVec13[((IOTA - 42) & 127)]) + ((0.0084232300000000003 * fVec13[((IOTA - 39) & 127)]) + ((0.00127378 * fVec13[((IOTA - 38) & 127)]) + ((0.0125606 * fVec13[((IOTA - 34) & 127)]) + ((0.011542200000000001 * fVec13[((IOTA - 31) & 127)]) + ((0.024367400000000001 * fVec13[((IOTA - 30) & 127)]) + ((0.0537481 * fVec13[((IOTA - 26) & 127)]) + ((0.013059400000000001 * fVec13[((IOTA - 23) & 127)]) + ((0.021176 * fVec13[((IOTA - 22) & 127)]) + ((0.0292041 * fVec13[((IOTA - 18) & 127)]) + ((0.015611 * fVec13[((IOTA - 17) & 127)]) + ((0.0131959 * fVec13[((IOTA - 15) & 127)]) + ((0.0033820999999999999 * fVec13[((IOTA - 13) & 127)]) + ((0.00065433400000000001 * fVec13[((IOTA - 10) & 127)]) + ((0.00012754700000000002 * fVec13[((IOTA - 9) & 127)]) + ((0.00028600400000000002 * fVec13[((IOTA - 8) & 127)]) + ((0.00056964699999999995 * fVec13[((IOTA - 6) & 127)]) + ((0.00055874899999999999 * fVec13[((IOTA - 4) & 127)]) + ((0.000107706 * fVec13[((IOTA - 2) & 127)]) + ((2.3258800000000005e-05 * fVec13[((IOTA - 1) & 127)]) + (((1.8648999999999999e-06 * fVec14[((IOTA - 126) & 127)]) + ((1.0045e-05 * fVec14[((IOTA - 125) & 127)]) + ((1.8977800000000003e-05 * fVec14[((IOTA - 124) & 127)]) + ((1.9873400000000002e-05 * fVec14[((IOTA - 123) & 127)]) + ((3.4954000000000004e-05 * fVec14[((IOTA - 122) & 127)]) + ((9.3229500000000019e-05 * fVec14[((IOTA - 121) & 127)]) + ((0.00012240800000000001 * fVec14[((IOTA - 120) & 127)]) + ((9.5701199999999998e-05 * fVec14[((IOTA - 119) & 127)]) + ((5.5900900000000005e-05 * fVec14[((IOTA - 115) & 127)]) + ((1.9102600000000002e-05 * fVec14[((IOTA - 114) & 127)]) + ((0.000876507 * fVec14[((IOTA - 91) & 127)]) + ((0.0020406000000000001 * fVec14[((IOTA - 90) & 127)]) + ((0.0013280499999999999 * fVec14[((IOTA - 89) & 127)]) + ((0.0017303100000000001 * fVec14[((IOTA - 88) & 127)]) + ((0.0029776099999999999 * fVec14[((IOTA - 87) & 127)]) + ((0.0025195700000000001 * fVec14[((IOTA - 86) & 127)]) + ((0.0011889400000000001 * fVec14[((IOTA - 83) & 127)]) + ((0.000386788 * fVec14[((IOTA - 81) & 127)]) + ((0.00090610300000000012 * fVec14[((IOTA - 80) & 127)]) + ((0.0014508500000000001 * fVec14[((IOTA - 79) & 127)]) + ((0.00082739399999999996 * fVec14[((IOTA - 78) & 127)]) + ((0.00013990400000000002 * fVec14[((IOTA - 76) & 127)]) + ((0.00174807 * fVec14[((IOTA - 75) & 127)]) + ((0.00102092 * fVec14[((IOTA - 74) & 127)]) + ((0.00235812 * fVec14[((IOTA - 63) & 127)]) + ((0.0021519 * fVec14[((IOTA - 62) & 127)]) + ((7.6654099999999985e-06 * fVec14[((IOTA - 61) & 127)]) + ((0.0022741699999999998 * fVec14[((IOTA - 55) & 127)]) + ((0.0042530099999999998 * fVec14[((IOTA - 54) & 127)]) + ((0.0032282000000000001 * fVec14[((IOTA - 53) & 127)]) + ((0.0041592900000000004 * fVec14[((IOTA - 50) & 127)]) + ((0.0075640600000000001 * fVec14[((IOTA - 49) & 127)]) + ((0.0079603199999999999 * fVec14[((IOTA - 48) & 127)]) + ((0.0030812000000000001 * fVec14[((IOTA - 47) & 127)]) + ((0.00018497500000000001 * fVec14[((IOTA - 46) & 127)]) + ((0.00033097600000000002 * fVec14[((IOTA - 43) & 127)]) + ((0.0066906600000000002 * fVec14[((IOTA - 42) & 127)]) + ((0.0081795500000000007 * fVec14[((IOTA - 41) & 127)]) + ((0.00108066 * fVec14[((IOTA - 40) & 127)]) + ((0.0088403900000000001 * fVec14[((IOTA - 36) & 127)]) + ((0.0054466000000000002 * fVec14[((IOTA - 35) & 127)]) + ((0.0040393699999999996 * fVec14[((IOTA - 33) & 127)]) + ((0.033863999999999998 * fVec14[((IOTA - 29) & 127)]) + ((0.0092350000000000002 * fVec14[((IOTA - 28) & 127)]) + ((0.00053732699999999999 * fVec14[((IOTA - 26) & 127)]) + ((0.0092729000000000006 * fVec14[((IOTA - 22) & 127)]) + ((0.022299000000000003 * fVec14[((IOTA - 21) & 127)]) + ((0.0012059800000000002 * fVec14[((IOTA - 20) & 127)]) + ((0.025815500000000002 * fVec14[((IOTA - 17) & 127)]) + ((7.0800700000000008e-05 * fVec14[((IOTA - 9) & 127)]) + ((0.00076956600000000007 * fVec14[((IOTA - 8) & 127)]) + ((0.000231146 * fVec14[((IOTA - 5) & 127)]) + ((0.00014766099999999999 * fVec14[((IOTA - 4) & 127)]) + ((0.0043864799999999999 * fVec14[((IOTA - 24) & 127)]) + ((1.4833700000000001e-06 * fVec0[((IOTA - 126) & 127)]) + ((3.6973199999999999e-06 * fVec0[((IOTA - 125) & 127)]) + ((8.5058500000000009e-06 * fVec0[((IOTA - 124) & 127)]) + ((4.1470500000000002e-05 * fVec0[((IOTA - 123) & 127)]) + ((7.1901800000000003e-05 * fVec0[((IOTA - 122) & 127)]) + ((3.71676e-05 * fVec0[((IOTA - 121) & 127)]) + ((3.3982700000000002e-05 * fVec0[((IOTA - 119) & 127)]) + ((0.00016550199999999999 * fVec0[((IOTA - 118) & 127)]) + ((0.00015893600000000001 * fVec0[((IOTA - 117) & 127)]) + ((0.00011888700000000002 * fVec0[((IOTA - 116) & 127)]) + ((2.6751600000000003e-05 * fVec0[((IOTA - 115) & 127)]) + ((1.5261800000000004e-05 * fVec0[((IOTA - 114) & 127)]) + ((0.00030627700000000004 * fVec0[((IOTA - 113) & 127)]) + ((0.00036830800000000003 * fVec0[((IOTA - 112) & 127)]) + ((0.000251322 * fVec0[((IOTA - 111) & 127)]) + ((0.00022708 * fVec0[((IOTA - 110) & 127)]) + ((0.000239084 * fVec0[((IOTA - 109) & 127)]) + ((9.1238799999999995e-06 * fVec0[((IOTA - 108) & 127)]) + (((0.00015429699999999999 * fVec0[((IOTA - 90) & 127)]) + ((0.00021972700000000002 * fVec0[((IOTA - 89) & 127)]) + ((0.0011643300000000001 * fVec0[((IOTA - 82) & 127)]) + ((0.00065994200000000006 * fVec0[((IOTA - 77) & 127)]) + ((0.0017905 * fVec0[((IOTA - 76) & 127)]) + ((0.00015571700000000001 * fVec0[((IOTA - 71) & 127)]) + ((0.0044549899999999998 * fVec0[((IOTA - 70) & 127)]) + ((0.0039002500000000005 * fVec0[((IOTA - 69) & 127)]) + ((0.00054205300000000002 * fVec0[((IOTA - 68) & 127)]) + ((0.00164631 * fVec0[((IOTA - 67) & 127)]) + ((0.00128867 * fVec0[((IOTA - 66) & 127)]) + ((0.000377902 * fVec0[((IOTA - 65) & 127)]) + ((0.00227327 * fVec0[((IOTA - 64) & 127)]) + ((0.0030369999999999998 * fVec0[((IOTA - 63) & 127)]) + ((0.0023284899999999999 * fVec0[((IOTA - 62) & 127)]) + ((0.0020450900000000003 * fVec0[((IOTA - 61) & 127)]) + ((0.0038926099999999999 * fVec0[((IOTA - 60) & 127)]) + ((0.0051357799999999995 * fVec0[((IOTA - 59) & 127)]) + ((0.0057548899999999995 * fVec0[((IOTA - 58) & 127)]) + ((0.0110121 * fVec0[((IOTA - 57) & 127)]) + ((0.010980500000000001 * fVec0[((IOTA - 56) & 127)]) + ((0.0074067100000000004 * fVec0[((IOTA - 55) & 127)]) + ((0.0058000299999999994 * fVec0[((IOTA - 54) & 127)]) + ((0.0046881500000000003 * fVec0[((IOTA - 53) & 127)]) + ((0.0079024400000000002 * fVec0[((IOTA - 52) & 127)]) + ((0.0143637 * fVec0[((IOTA - 51) & 127)]) + ((0.018899099999999999 * fVec0[((IOTA - 50) & 127)]) + ((0.016699200000000001 * fVec0[((IOTA - 49) & 127)]) + ((0.0121522 * fVec0[((IOTA - 48) & 127)]) + ((0.011685700000000002 * fVec0[((IOTA - 47) & 127)]) + ((0.0122635 * fVec0[((IOTA - 46) & 127)]) + ((0.019806900000000002 * fVec0[((IOTA - 44) & 127)]) + ((0.017303499999999999 * fVec0[((IOTA - 43) & 127)]) + ((0.017569399999999999 * fVec0[((IOTA - 42) & 127)]) + ((0.016072400000000001 * fVec0[((IOTA - 41) & 127)]) + ((0.0227996 * fVec0[((IOTA - 40) & 127)]) + ((0.016965000000000001 * fVec0[((IOTA - 39) & 127)]) + ((0.017693 * fVec0[((IOTA - 38) & 127)]) + ((0.033336499999999998 * fVec0[((IOTA - 37) & 127)]) + ((0.029073099999999998 * fVec0[((IOTA - 36) & 127)]) + ((0.018621700000000001 * fVec0[((IOTA - 35) & 127)]) + ((0.023295900000000001 * fVec0[((IOTA - 34) & 127)]) + ((0.030269900000000002 * fVec0[((IOTA - 33) & 127)]) + ((0.023498000000000002 * fVec0[((IOTA - 32) & 127)]) + ((0.012867100000000001 * fVec0[((IOTA - 31) & 127)]) + ((0.024658199999999998 * fVec0[((IOTA - 30) & 127)]) + ((0.033071500000000004 * fVec0[((IOTA - 29) & 127)]) + ((0.023601800000000003 * fVec0[((IOTA - 28) & 127)]) + ((0.025422899999999998 * fVec0[((IOTA - 27) & 127)]) + ((0.014210199999999999 * fVec0[((IOTA - 26) & 127)]) + ((0.010567 * fVec0[((IOTA - 25) & 127)]) + ((0.056895100000000004 * fVec0[((IOTA - 24) & 127)]) + ((0.00027516900000000002 * fVec0[((IOTA - 2) & 127)]) + ((1.74779e-06 * fVec15[((IOTA - 126) & 127)]) + ((7.1374800000000001e-06 * fVec15[((IOTA - 125) & 127)]) + ((1.69708e-05 * fVec15[((IOTA - 124) & 127)]) + ((7.3980599999999995e-07 * fVec15[((IOTA - 123) & 127)]) + ((5.5996800000000006e-05 * fVec15[((IOTA - 121) & 127)]) + ((0.000117308 * fVec15[((IOTA - 120) & 127)]) + ((0.000195057 * fVec15[((IOTA - 119) & 127)]) + ((0.00020216400000000001 * fVec15[((IOTA - 118) & 127)]) + ((0.00016114100000000001 * fVec15[((IOTA - 117) & 127)]) + ((0.00038352400000000005 * fVec15[((IOTA - 116) & 127)]) + ((0.00050261399999999997 * fVec15[((IOTA - 115) & 127)]) + ((0.00050803600000000001 * fVec15[((IOTA - 114) & 127)]) + ((0.00042659700000000002 * fVec15[((IOTA - 113) & 127)]) + ((0.00050421999999999999 * fVec15[((IOTA - 112) & 127)]) + ((0.0010336799999999999 * fVec15[((IOTA - 111) & 127)]) + ((0.00070924500000000006 * fVec15[((IOTA - 110) & 127)]) + ((0.000779071 * fVec15[((IOTA - 109) & 127)]) + ((0.00095978899999999995 * fVec15[((IOTA - 108) & 127)]) + ((0.0013097499999999999 * fVec15[((IOTA - 107) & 127)]) + ((0.0016259900000000001 * fVec15[((IOTA - 106) & 127)]) + ((0.00100501 * fVec15[((IOTA - 105) & 127)]) + ((0.0012236 * fVec15[((IOTA - 104) & 127)]) + ((0.0018419899999999999 * fVec15[((IOTA - 103) & 127)]) + ((0.00147426 * fVec15[((IOTA - 102) & 127)]) + ((0.0013272 * fVec15[((IOTA - 101) & 127)]) + ((0.00094503799999999993 * fVec15[((IOTA - 100) & 127)]) + ((0.00059498000000000005 * fVec15[((IOTA - 99) & 127)]) + ((0.0025739000000000001 * fVec15[((IOTA - 96) & 127)]) + ((0.0033512100000000003 * fVec15[((IOTA - 95) & 127)]) + ((0.00193882 * fVec15[((IOTA - 88) & 127)]) + ((0.00365475 * fVec15[((IOTA - 87) & 127)]) + ((0.0026745600000000003 * fVec15[((IOTA - 86) & 127)]) + ((0.0017505699999999999 * fVec15[((IOTA - 85) & 127)]) + ((0.0010550900000000001 * fVec15[((IOTA - 84) & 127)]) + ((2.5156400000000002e-05 * fVec15[((IOTA - 83) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((0.0081598500000000015 * fVec15[((IOTA - 37) & 127)]) + ((0.010539099999999999 * fVec15[((IOTA - 36) & 127)]) + ((0.0056564199999999997 * fVec15[((IOTA - 35) & 127)]) + ((0.0272114 * fVec15[((IOTA - 34) & 127)]) + ((0.021074000000000002 * fVec15[((IOTA - 33) & 127)]) + ((0.0080194200000000011 * fVec15[((IOTA - 31) & 127)]) + ((0.017730600000000003 * fVec15[((IOTA - 30) & 127)]) + ((0.0216826 * fVec15[((IOTA - 29) & 127)]) + ((0.0123141 * fVec15[((IOTA - 28) & 127)]) + ((0.0075229400000000005 * fVec15[((IOTA - 27) & 127)]) + ((((((((((((((((((((((((((1.96889e-05 * fTemp15) + (0.00012713900000000002 * fVec15[((IOTA - 1) & 127)])) + (0.00072445800000000009 * fVec15[((IOTA - 3) & 127)])) + (0.00084005400000000002 * fVec15[((IOTA - 4) & 127)])) + (0.00078251799999999995 * fVec15[((IOTA - 5) & 127)])) + (0.00064681700000000005 * fVec15[((IOTA - 6) & 127)])) + (0.00105561 * fVec15[((IOTA - 7) & 127)])) + (0.00107368 * fVec15[((IOTA - 8) & 127)])) + (0.00055752700000000004 * fVec15[((IOTA - 9) & 127)])) + (0.0020685400000000002 * fVec15[((IOTA - 10) & 127)])) + (0.0007391530000000001 * fVec15[((IOTA - 11) & 127)])) + (0.048941400000000003 * fVec15[((IOTA - 12) & 127)])) + (0.053001199999999998 * fVec15[((IOTA - 13) & 127)])) + (0.046698700000000003 * fVec15[((IOTA - 14) & 127)])) + (0.062211200000000001 * fVec15[((IOTA - 15) & 127)])) + (0.043948600000000004 * fVec15[((IOTA - 16) & 127)])) + (0.081345899999999999 * fVec15[((IOTA - 17) & 127)])) + (0.047424299999999996 * fVec15[((IOTA - 18) & 127)])) + (0.041405900000000002 * fVec15[((IOTA - 19) & 127)])) + (0.069732299999999997 * fVec15[((IOTA - 20) & 127)])) + (0.050380599999999998 * fVec15[((IOTA - 21) & 127)])) + (0.111697 * fVec15[((IOTA - 22) & 127)])) + (0.054464300000000007 * fVec15[((IOTA - 23) & 127)])) + (0.036801199999999999 * fVec15[((IOTA - 25) & 127)])) + (0.042423700000000002 * fVec15[((IOTA - 26) & 127)])) + (0.0060665699999999994 * fVec15[((IOTA - 38) & 127)])))))))))))) + (0.0072938400000000002 * fVec15[((IOTA - 39) & 127)])) + (0.0014525200000000001 * fVec15[((IOTA - 40) & 127)])) + (0.0049862900000000009 * fVec15[((IOTA - 41) & 127)])) + (0.014038399999999999 * fVec15[((IOTA - 42) & 127)])) + (0.0105579 * fVec15[((IOTA - 43) & 127)])) + (0.00431154 * fVec15[((IOTA - 45) & 127)])) + (0.0084629900000000001 * fVec15[((IOTA - 46) & 127)])) + (0.0007157 * fVec15[((IOTA - 47) & 127)])) + (0.00067166600000000002 * fVec15[((IOTA - 48) & 127)])) + (0.0046483699999999998 * fVec15[((IOTA - 49) & 127)])) + (0.0014356600000000001 * fVec15[((IOTA - 50) & 127)])) + (0.00020930100000000001 * fVec15[((IOTA - 51) & 127)])) + (0.00139635 * fVec15[((IOTA - 52) & 127)])) + (0.0029229899999999999 * fVec15[((IOTA - 53) & 127)])) + (0.0042595000000000003 * fVec15[((IOTA - 54) & 127)])) + (0.0039973999999999999 * fVec15[((IOTA - 55) & 127)])) + (4.49754e-06 * fVec15[((IOTA - 56) & 127)])) + (0.00278079 * fVec15[((IOTA - 58) & 127)])) + (0.0038020800000000002 * fVec15[((IOTA - 59) & 127)])) + (0.0026122100000000002 * fVec15[((IOTA - 60) & 127)])) + (0.00338193 * fVec15[((IOTA - 61) & 127)])) + (0.0064815100000000002 * fVec15[((IOTA - 62) & 127)])) + (0.0067297599999999996 * fVec15[((IOTA - 63) & 127)])) + (0.0038801100000000004 * fVec15[((IOTA - 64) & 127)])) + (0.0029381799999999999 * fVec15[((IOTA - 65) & 127)])) + (0.0016933400000000002 * fVec15[((IOTA - 66) & 127)])) + (0.0028127900000000003 * fVec15[((IOTA - 67) & 127)])) + (0.0033726400000000001 * fVec15[((IOTA - 68) & 127)])) + (0.00072404000000000001 * fVec15[((IOTA - 70) & 127)])) + (0.0019828699999999999 * fVec15[((IOTA - 71) & 127)])) + (0.0039087499999999999 * fVec15[((IOTA - 72) & 127)])) + (0.0053022700000000004 * fVec15[((IOTA - 73) & 127)])) + (0.0036032700000000004 * fVec15[((IOTA - 74) & 127)])) + (0.0053821700000000004 * fVec15[((IOTA - 75) & 127)])) + (0.0046326400000000004 * fVec15[((IOTA - 76) & 127)])) + (0.0020199900000000002 * fVec15[((IOTA - 77) & 127)])) + (0.0020409600000000001 * fVec15[((IOTA - 78) & 127)])) + (0.00144247 * fVec15[((IOTA - 79) & 127)])) + (0.0026692399999999998 * fVec15[((IOTA - 80) & 127)])) + (0.0015368900000000002 * fVec15[((IOTA - 81) & 127)])) + (0.017027300000000002 * fVec0[((IOTA - 45) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0027836500000000004 * fVec14[((IOTA - 23) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.5002200000000002e-05 * fTemp13)))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0068587300000000004 * fVec12[((IOTA - 42) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00014837300000000001 * fVec11[((IOTA - 3) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00015575000000000002 * fVec10[((IOTA - 2) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00050830900000000008 * fVec9[((IOTA - 83) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0026334700000000002 * fVec7[((IOTA - 59) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.000594639 * fVec3[((IOTA - 10) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (5.4750600000000001e-07 * fVec2[((IOTA - 1) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((5.3289600000000006e-05 * fVec2[((IOTA - 119) & 127)]) + ((0.000107805 * fVec2[((IOTA - 118) & 127)]) + ((0.00016857100000000001 * fVec2[((IOTA - 117) & 127)]) + ((0.00017462800000000002 * fVec2[((IOTA - 116) & 127)]) + ((0.00020061900000000003 * fVec2[((IOTA - 115) & 127)]) + ((0.00026791400000000001 * fVec2[((IOTA - 114) & 127)]) + ((0.000214133 * fVec2[((IOTA - 113) & 127)]) + ((0.00012941499999999999 * fVec2[((IOTA - 112) & 127)]) + ((0.000341992 * fVec2[((IOTA - 111) & 127)]) + ((0.00073887099999999999 * fVec2[((IOTA - 110) & 127)]) + ((0.000178548 * fVec2[((IOTA - 109) & 127)]) + ((0.00034591100000000002 * fVec2[((IOTA - 107) & 127)]) + ((0.00056230400000000002 * fVec2[((IOTA - 106) & 127)]) + ((0.00034390400000000002 * fVec2[((IOTA - 105) & 127)]) + ((0.00040135500000000005 * fVec2[((IOTA - 102) & 127)]) + ((1.2323300000000001e-05 * fVec2[((IOTA - 99) & 127)]) + ((0.00017320599999999999 * fVec2[((IOTA - 98) & 127)]) + ((0.00137867 * fVec2[((IOTA - 90) & 127)]) + ((0.0011166000000000001 * fVec2[((IOTA - 89) & 127)]) + ((0.00077525200000000004 * fVec2[((IOTA - 88) & 127)]) + ((0.00051248299999999999 * fVec2[((IOTA - 87) & 127)]) + ((0.00034004900000000004 * fVec2[((IOTA - 86) & 127)]) + ((0.000134423 * fVec2[((IOTA - 84) & 127)]) + ((0.0011347400000000002 * fVec2[((IOTA - 83) & 127)]) + ((5.784670000000001e-05 * fVec2[((IOTA - 82) & 127)]) + ((0.0017782899999999999 * fVec2[((IOTA - 77) & 127)]) + ((0.0008637740000000001 * fVec2[((IOTA - 78) & 127)]) + ((0.00095740300000000012 * fVec2[((IOTA - 76) & 127)]) + ((0.00027913800000000001 * fVec2[((IOTA - 75) & 127)]) + ((0.000413929 * fVec2[((IOTA - 74) & 127)]) + ((0.0014493400000000001 * fVec2[((IOTA - 70) & 127)]) + ((0.0024630899999999998 * fVec2[((IOTA - 69) & 127)]) + ((0.00066884400000000004 * fVec2[((IOTA - 68) & 127)]) + ((0.0016410700000000001 * fVec2[((IOTA - 66) & 127)]) + ((0.0028929999999999997 * fVec2[((IOTA - 65) & 127)]) + ((0.00010676699999999999 * fVec2[((IOTA - 60) & 127)]) + ((0.00080710999999999999 * fVec2[((IOTA - 58) & 127)]) + ((0.0015732999999999999 * fVec2[((IOTA - 57) & 127)]) + ((0.00047008900000000003 * fVec2[((IOTA - 56) & 127)]) + ((0.00058858800000000002 * fVec2[((IOTA - 46) & 127)]) + ((0.0089012100000000014 * fVec2[((IOTA - 45) & 127)]) + ((0.0063971999999999996 * fVec2[((IOTA - 44) & 127)]) + ((0.0011654300000000001 * fVec2[((IOTA - 42) & 127)]) + ((0.0065539300000000003 * fVec2[((IOTA - 41) & 127)]) + ((0.00199292 * fVec2[((IOTA - 37) & 127)]) + ((0.0048789100000000002 * fVec2[((IOTA - 36) & 127)]) + ((0.00714622 * fVec2[((IOTA - 35) & 127)]) + ((0.0095548600000000001 * fVec2[((IOTA - 33) & 127)]) + ((0.019952500000000001 * fVec2[((IOTA - 32) & 127)]) + ((0.0029659300000000003 * fVec2[((IOTA - 29) & 127)]) + ((0.029996000000000002 * fVec2[((IOTA - 28) & 127)]) + ((0.0016475999999999999 * fVec2[((IOTA - 27) & 127)]) + ((0.0254705 * fVec2[((IOTA - 25) & 127)]) + ((0.0083854199999999993 * fVec2[((IOTA - 24) & 127)]) + ((0.039960800000000005 * fVec2[((IOTA - 18) & 127)]) + ((0.0071864600000000004 * fVec2[((IOTA - 17) & 127)]) + ((0.032838599999999996 * fVec2[((IOTA - 15) & 127)]) + ((0.00164934 * fVec2[((IOTA - 14) & 127)]) + ((0.0050885600000000007 * fVec2[((IOTA - 13) & 127)]) + ((0.00094482099999999999 * fVec2[((IOTA - 10) & 127)]) + ((7.6144500000000003e-05 * fVec2[((IOTA - 9) & 127)]) + ((0.00057894000000000001 * fVec2[((IOTA - 8) & 127)]) + ((0.00159128 * fVec2[((IOTA - 6) & 127)]) + ((0.00015391 * fVec2[((IOTA - 4) & 127)]) + ((0.00036213800000000002 * fVec2[((IOTA - 2) & 127)]) + (((3.5712499999999999e-07 * fVec1[((IOTA - 126) & 127)]) + ((1.1903999999999999e-06 * fVec1[((IOTA - 125) & 127)]) + ((9.2364300000000006e-06 * fVec1[((IOTA - 124) & 127)]) + ((7.6588799999999991e-06 * fVec1[((IOTA - 123) & 127)]) + ((8.9591899999999999e-06 * fVec1[((IOTA - 120) & 127)]) + ((8.6424300000000005e-05 * fVec1[((IOTA - 119) & 127)]) + ((7.8613700000000009e-05 * fVec1[((IOTA - 118) & 127)]) + ((4.4238600000000007e-05 * fVec1[((IOTA - 117) & 127)]) + ((5.5205099999999998e-06 * fVec1[((IOTA - 115) & 127)]) + ((6.6639900000000005e-05 * fVec1[((IOTA - 114) & 127)]) + ((0.000157369 * fVec1[((IOTA - 111) & 127)]) + ((8.3003200000000005e-05 * fVec1[((IOTA - 110) & 127)]) + ((0.00025192200000000002 * fVec1[((IOTA - 92) & 127)]) + ((0.00091703800000000001 * fVec1[((IOTA - 91) & 127)]) + ((0.0010790400000000001 * fVec1[((IOTA - 88) & 127)]) + ((0.0015949800000000002 * fVec1[((IOTA - 87) & 127)]) + ((0.0014874700000000001 * fVec1[((IOTA - 86) & 127)]) + ((0.00093692899999999997 * fVec1[((IOTA - 85) & 127)]) + ((0.0006546770000000001 * fVec1[((IOTA - 84) & 127)]) + ((0.000134809 * fVec1[((IOTA - 83) & 127)]) + ((0.00019593 * fVec1[((IOTA - 82) & 127)]) + ((0.0010831700000000001 * fVec1[((IOTA - 81) & 127)]) + ((0.00121283 * fVec1[((IOTA - 80) & 127)]) + ((0.0021823700000000003 * fVec1[((IOTA - 79) & 127)]) + ((0.00119166 * fVec1[((IOTA - 78) & 127)]) + ((0.00055397699999999999 * fVec1[((IOTA - 74) & 127)]) + ((0.0020279199999999999 * fVec1[((IOTA - 73) & 127)]) + ((0.00014092800000000002 * fVec1[((IOTA - 72) & 127)]) + ((8.5715000000000015e-05 * fVec1[((IOTA - 70) & 127)]) + ((0.00122613 * fVec1[((IOTA - 69) & 127)]) + ((0.0019218100000000001 * fVec1[((IOTA - 68) & 127)]) + ((0.00059488300000000004 * fVec1[((IOTA - 67) & 127)]) + ((0.000167615 * fVec1[((IOTA - 63) & 127)]) + ((0.00088971800000000006 * fVec1[((IOTA - 61) & 127)]) + ((0.0030282500000000001 * fVec1[((IOTA - 60) & 127)]) + ((0.0047336600000000006 * fVec1[((IOTA - 54) & 127)]) + ((0.0044919299999999999 * fVec1[((IOTA - 53) & 127)]) + ((0.0011470100000000002 * fVec1[((IOTA - 50) & 127)]) + ((0.0012055499999999999 * fVec1[((IOTA - 48) & 127)]) + ((0.0059192300000000002 * fVec1[((IOTA - 47) & 127)]) + ((0.0032900500000000001 * fVec1[((IOTA - 44) & 127)]) + ((0.00224289 * fVec1[((IOTA - 43) & 127)]) + ((0.00017730600000000001 * fVec1[((IOTA - 42) & 127)]) + ((0.0072601800000000006 * fVec1[((IOTA - 41) & 127)]) + ((0.00453353 * fVec1[((IOTA - 38) & 127)]) + ((0.00194991 * fVec1[((IOTA - 37) & 127)]) + ((0.00083337500000000002 * fVec1[((IOTA - 35) & 127)]) + ((0.0247151 * fVec1[((IOTA - 34) & 127)]) + ((0.0069191299999999999 * fVec1[((IOTA - 30) & 127)]) + ((0.0098116000000000002 * fVec1[((IOTA - 29) & 127)]) + ((0.0033760599999999997 * fVec1[((IOTA - 28) & 127)]) + ((0.0036533899999999998 * fVec1[((IOTA - 27) & 127)]) + ((0.0209074 * fVec1[((IOTA - 22) & 127)]) + ((0.0101589 * fVec1[((IOTA - 21) & 127)]) + ((0.016458299999999999 * fVec1[((IOTA - 20) & 127)]) + ((0.021493699999999998 * fVec1[((IOTA - 17) & 127)]) + ((0.0062705200000000008 * fVec1[((IOTA - 16) & 127)]) + ((0.0048823400000000006 * fVec1[((IOTA - 14) & 127)]) + ((0.00084803800000000007 * fVec1[((IOTA - 11) & 127)]) + ((0.0012552099999999999 * fVec1[((IOTA - 8) & 127)]) + ((0.00022105899999999999 * fVec1[((IOTA - 6) & 127)]) + ((0.00024554399999999999 * fVec1[((IOTA - 5) & 127)]) + ((0.00061196600000000003 * fVec1[((IOTA - 4) & 127)]) + ((0.00014579800000000002 * fVec1[((IOTA - 2) & 127)]) + ((0.00061885399999999995 * fVec1[((IOTA - 95) & 127)]) + ((0.00036137300000000001 * fVec1[((IOTA - 96) & 127)]) + ((0.000439844 * fVec1[((IOTA - 107) & 127)]) + ((0.00027481100000000002 * fVec1[((IOTA - 106) & 127)]) + ((3.2093500000000007e-05 * fVec1[((IOTA - 102) & 127)]) + ((0.00066768000000000003 * fVec1[((IOTA - 94) & 127)]) + ((1.2403399999999998e-06 * fVec3[((IOTA - 126) & 127)]) + ((6.5523199999999996e-06 * fVec3[((IOTA - 125) & 127)]) + ((7.103729999999999e-06 * fVec3[((IOTA - 124) & 127)]) + ((4.8057499999999997e-06 * fVec3[((IOTA - 123) & 127)]) + ((0.00017124500000000002 * fVec1[((IOTA - 93) & 127)]) + ((1.4907900000000002e-05 * fVec3[((IOTA - 122) & 127)]) + ((5.6678000000000002e-05 * fVec3[((IOTA - 121) & 127)]) + ((3.2618499999999999e-05 * fVec3[((IOTA - 120) & 127)]) + ((4.2858599999999997e-05 * fVec3[((IOTA - 116) & 127)]) + ((1.2154900000000001e-05 * fVec3[((IOTA - 115) & 127)]) + ((8.1906300000000006e-05 * fVec3[((IOTA - 101) & 127)]) + ((0.00050917300000000003 * fVec3[((IOTA - 100) & 127)]) + ((3.9907800000000004e-05 * fVec3[((IOTA - 92) & 127)]) + ((0.00063396999999999998 * fVec3[((IOTA - 91) & 127)]) + ((0.00126468 * fVec3[((IOTA - 90) & 127)]) + ((0.0016863 * fVec3[((IOTA - 89) & 127)]) + ((0.0009600120000000001 * fVec3[((IOTA - 86) & 127)]) + ((0.00042185499999999995 * fVec3[((IOTA - 85) & 127)]) + ((0.00064300400000000008 * fVec3[((IOTA - 84) & 127)]) + ((0.00199081 * fVec3[((IOTA - 83) & 127)]) + ((0.0032951600000000001 * fVec3[((IOTA - 82) & 127)]) + ((0.00044377400000000002 * fVec3[((IOTA - 81) & 127)]) + ((0.00023944000000000002 * fVec3[((IOTA - 4) & 127)]) + ((4.13336e-05 * fVec3[((IOTA - 2) & 127)]) + ((3.3055699999999998e-06 * fTemp3) + ((0.0062460900000000001 * fVec3[((IOTA - 18) & 127)]) + ((0.012640400000000001 * fVec3[((IOTA - 17) & 127)]) + ((0.00686843 * fVec3[((IOTA - 15) & 127)]) + ((0.0014359399999999999 * fVec3[((IOTA - 13) & 127)]) + ((0.0011996999999999999 * fVec3[((IOTA - 78) & 127)]) + ((0.0027583899999999999 * fVec3[((IOTA - 77) & 127)]) + ((0.00029621600000000002 * fVec3[((IOTA - 76) & 127)]) + ((0.00032057000000000006 * fVec3[((IOTA - 74) & 127)]) + ((0.00011427200000000001 * fVec3[((IOTA - 70) & 127)]) + ((0.0023553899999999997 * fVec3[((IOTA - 69) & 127)]) + ((0.00121634 * fVec3[((IOTA - 61) & 127)]) + ((0.0031460699999999999 * fVec3[((IOTA - 60) & 127)]) + ((0.0028280900000000001 * fVec3[((IOTA - 59) & 127)]) + ((0.0041894900000000006 * fVec3[((IOTA - 58) & 127)]) + ((0.0050431600000000005 * fVec3[((IOTA - 57) & 127)]) + ((0.00070018900000000004 * fVec3[((IOTA - 56) & 127)]) + ((0.00079562299999999997 * fVec3[((IOTA - 55) & 127)]) + ((0.0022291200000000002 * fVec3[((IOTA - 54) & 127)]) + ((0.0010627800000000001 * fVec3[((IOTA - 53) & 127)]) + ((0.0025782299999999999 * fVec3[((IOTA - 52) & 127)]) + ((0.0010116599999999999 * fVec3[((IOTA - 51) & 127)]) + ((0.0030807500000000002 * fVec3[((IOTA - 45) & 127)]) + ((0.0044340900000000008 * fVec3[((IOTA - 44) & 127)]) + ((0.0014659899999999999 * fVec3[((IOTA - 39) & 127)]) + ((0.0075921599999999997 * fVec3[((IOTA - 38) & 127)]) + ((0.0013163199999999999 * fVec3[((IOTA - 36) & 127)]) + ((0.00139712 * fVec3[((IOTA - 35) & 127)]) + ((0.020927999999999999 * fVec3[((IOTA - 31) & 127)]) + ((0.0030580300000000002 * fVec3[((IOTA - 30) & 127)]) + ((0.0031714500000000001 * fVec3[((IOTA - 27) & 127)]) + ((0.0298252 * fVec3[((IOTA - 26) & 127)]) + ((0.0033139300000000001 * fVec3[((IOTA - 23) & 127)]) + ((0.0065595499999999999 * fVec3[((IOTA - 21) & 127)]) + ((0.0090886700000000001 * fVec3[((IOTA - 20) & 127)]) + ((7.7107099999999996e-07 * fVec4[((IOTA - 126) & 127)]) + ((5.8016599999999996e-06 * fVec4[((IOTA - 125) & 127)]) + ((1.0293200000000002e-05 * fVec4[((IOTA - 124) & 127)]) + ((1.26402e-05 * fVec4[((IOTA - 123) & 127)]) + ((0.00021416200000000003 * fVec3[((IOTA - 9) & 127)]) + ((1.2875300000000002e-05 * fVec4[((IOTA - 120) & 127)]) + ((3.0919700000000001e-05 * fVec4[((IOTA - 119) & 127)]) + ((1.3730199999999999e-05 * fVec4[((IOTA - 118) & 127)]) + ((0.00010595300000000001 * fVec4[((IOTA - 117) & 127)]) + ((6.2319599999999999e-05 * fVec4[((IOTA - 116) & 127)]) + ((2.2893700000000001e-05 * fVec4[((IOTA - 114) & 127)]) + ((3.6990800000000005e-05 * fVec4[((IOTA - 113) & 127)]) + (((0.0014893700000000001 * fVec4[((IOTA - 94) & 127)]) + ((0.00075849800000000003 * fVec4[((IOTA - 93) & 127)]) + ((1.7939800000000001e-05 * fVec4[((IOTA - 89) & 127)]) + ((0.00022978000000000001 * fVec4[((IOTA - 88) & 127)]) + ((0.00040871000000000006 * fVec4[((IOTA - 87) & 127)]) + ((0.00042454500000000002 * fVec4[((IOTA - 86) & 127)]) + ((0.00052778200000000008 * fVec4[((IOTA - 85) & 127)]) + ((0.00239894 * fVec4[((IOTA - 84) & 127)]) + ((0.0029262899999999998 * fVec4[((IOTA - 83) & 127)]) + ((0.0016715800000000002 * fVec4[((IOTA - 82) & 127)]) + ((0.0011202900000000001 * fVec4[((IOTA - 81) & 127)]) + ((7.5395799999999992e-06 * fVec4[((IOTA - 80) & 127)]) + ((0.00041440900000000002 * fVec4[((IOTA - 79) & 127)]) + ((3.0152300000000003e-05 * fVec4[((IOTA - 78) & 127)]) + ((0.00071683100000000002 * fVec4[((IOTA - 76) & 127)]) + ((3.8916400000000006e-05 * fVec4[((IOTA - 75) & 127)]) + ((0.0012073799999999999 * fVec4[((IOTA - 74) & 127)]) + ((0.0031728900000000003 * fVec4[((IOTA - 73) & 127)]) + ((0.0018727100000000001 * fVec4[((IOTA - 72) & 127)]) + ((0.0085886299999999999 * fVec4[((IOTA - 37) & 127)]) + ((0.0098696699999999988 * fVec4[((IOTA - 36) & 127)]) + ((0.0081568500000000002 * fVec4[((IOTA - 33) & 127)]) + ((0.0055860800000000002 * fVec4[((IOTA - 32) & 127)]) + ((0.0076456700000000002 * fVec4[((IOTA - 31) & 127)]) + ((0.0047620600000000003 * fVec4[((IOTA - 30) & 127)]) + ((0.00244034 * fVec4[((IOTA - 26) & 127)]) + ((0.0027159100000000002 * fVec4[((IOTA - 25) & 127)]) + ((0.0355257 * fVec4[((IOTA - 24) & 127)]) + ((0.013501399999999998 * fVec4[((IOTA - 21) & 127)]) + ((0.010106800000000001 * fVec4[((IOTA - 20) & 127)]) + ((0.016007400000000001 * fVec4[((IOTA - 19) & 127)]) + ((0.020679400000000001 * fVec4[((IOTA - 18) & 127)]) + ((0.0034218899999999999 * fVec4[((IOTA - 17) & 127)]) + ((0.016782399999999999 * fVec4[((IOTA - 14) & 127)]) + ((2.9919300000000003e-05 * fVec4[((IOTA - 11) & 127)]) + ((3.3796500000000001e-05 * fVec4[((IOTA - 9) & 127)]) + ((0.00054442100000000001 * fVec4[((IOTA - 8) & 127)]) + ((0.00043977500000000005 * fVec4[((IOTA - 6) & 127)]) + ((0.00054478099999999993 * fVec4[((IOTA - 5) & 127)]) + ((0.00022437700000000002 * fVec4[((IOTA - 2) & 127)]) + ((1.9893300000000001e-05 * fVec4[((IOTA - 1) & 127)]) + ((0.0034829700000000002 * fVec4[((IOTA - 41) & 127)]) + ((0.0043833000000000006 * fVec4[((IOTA - 40) & 127)]) + ((0.00091280400000000013 * fVec4[((IOTA - 63) & 127)]) + ((0.0016841900000000001 * fVec4[((IOTA - 57) & 127)]) + ((0.0014167300000000002 * fVec4[((IOTA - 56) & 127)]) + ((8.9493100000000012e-05 * fVec4[((IOTA - 53) & 127)]) + ((0.00032871800000000003 * fVec4[((IOTA - 52) & 127)]) + ((0.00168373 * fVec4[((IOTA - 51) & 127)]) + ((0.0039323600000000002 * fVec4[((IOTA - 50) & 127)]) + ((0.00094270700000000009 * fVec4[((IOTA - 49) & 127)]) + ((0.0014762200000000001 * fVec4[((IOTA - 45) & 127)]) + ((0.0053497099999999997 * fVec4[((IOTA - 44) & 127)]) + ((0.0013171900000000002 * fVec4[((IOTA - 43) & 127)]) + ((7.4901799999999991e-07 * fVec5[((IOTA - 126) & 127)]) + ((5.2121499999999997e-06 * fVec5[((IOTA - 125) & 127)]) + ((1.5791000000000002e-05 * fVec5[((IOTA - 124) & 127)]) + ((2.1421500000000001e-05 * fVec5[((IOTA - 123) & 127)]) + ((2.2224499999999998e-06 * fVec5[((IOTA - 122) & 127)]) + ((2.15894e-05 * fVec5[((IOTA - 121) & 127)]) + ((4.67294e-05 * fVec5[((IOTA - 120) & 127)]) + ((1.9006100000000001e-05 * fVec5[((IOTA - 119) & 127)]) + ((0.00029154800000000003 * fVec5[((IOTA - 104) & 127)]) + ((0.000281437 * fVec5[((IOTA - 102) & 127)]) + ((0.000737136 * fVec5[((IOTA - 101) & 127)]) + ((0.00013028900000000001 * fVec5[((IOTA - 100) & 127)]) + ((0.00065116800000000004 * fVec5[((IOTA - 97) & 127)]) + ((0.00087714900000000003 * fVec5[((IOTA - 96) & 127)]) + ((0.00059851200000000005 * fVec5[((IOTA - 95) & 127)]) + ((0.00058117100000000001 * fVec5[((IOTA - 94) & 127)]) + ((7.4501400000000011e-05 * fVec5[((IOTA - 93) & 127)]) + ((0.00070493400000000005 * fVec5[((IOTA - 92) & 127)]) + ((0.0016990600000000001 * fVec5[((IOTA - 91) & 127)]) + ((0.00105839 * fVec5[((IOTA - 90) & 127)]) + ((0.00064867600000000005 * fVec5[((IOTA - 89) & 127)]) + ((0.00045359999999999997 * fVec5[((IOTA - 84) & 127)]) + ((0.00105405 * fVec5[((IOTA - 83) & 127)]) + ((0.00066430600000000003 * fVec5[((IOTA - 82) & 127)]) + ((1.0579500000000001e-05 * fVec5[((IOTA - 79) & 127)]) + ((9.0909400000000007e-05 * fVec5[((IOTA - 63) & 127)]) + ((7.1183600000000001e-05 * fVec5[((IOTA - 62) & 127)]) + ((0.00144718 * fVec5[((IOTA - 60) & 127)]) + ((0.0011860799999999999 * fVec5[((IOTA - 59) & 127)]) + ((0.0020690300000000003 * fVec5[((IOTA - 57) & 127)]) + ((0.0015602599999999999 * fVec5[((IOTA - 56) & 127)]) + ((0.0016904800000000001 * fVec5[((IOTA - 53) & 127)]) + ((0.00271579 * fVec5[((IOTA - 52) & 127)]) + ((0.0088627000000000011 * fVec5[((IOTA - 51) & 127)]) + ((0.00769069 * fVec5[((IOTA - 50) & 127)]) + ((0.0025811200000000001 * fVec5[((IOTA - 49) & 127)]) + ((0.0020010100000000001 * fVec5[((IOTA - 47) & 127)]) + ((0.0056659300000000004 * fVec5[((IOTA - 46) & 127)]) + ((0.0029520400000000004 * fVec5[((IOTA - 45) & 127)]) + ((0.0094207800000000001 * fVec5[((IOTA - 44) & 127)]) + ((0.0089927300000000009 * fVec5[((IOTA - 43) & 127)]) + ((0.0031344599999999999 * fVec5[((IOTA - 40) & 127)]) + ((0.0020825100000000001 * fVec5[((IOTA - 39) & 127)]) + ((0.010519000000000001 * fVec5[((IOTA - 30) & 127)]) + ((0.0133066 * fVec5[((IOTA - 27) & 127)]) + ((0.024085600000000002 * fVec5[((IOTA - 22) & 127)]) + ((0.0087774500000000009 * fVec5[((IOTA - 21) & 127)]) + ((0.0316397 * fVec5[((IOTA - 20) & 127)]) + ((0.0629913 * fVec5[((IOTA - 19) & 127)]) + ((0.00082095500000000006 * fVec5[((IOTA - 18) & 127)]) + ((0.027291599999999999 * fVec5[((IOTA - 17) & 127)]) + ((0.037210699999999999 * fVec5[((IOTA - 16) & 127)]) + ((0.00091706600000000002 * fVec5[((IOTA - 15) & 127)]) + ((0.00067622200000000009 * fVec5[((IOTA - 10) & 127)]) + ((0.00071360300000000005 * fVec5[((IOTA - 8) & 127)]) + ((0.000243654 * fVec5[((IOTA - 7) & 127)]) + ((0.00032285800000000003 * fVec5[((IOTA - 6) & 127)]) + ((0.000171535 * fVec5[((IOTA - 5) & 127)]) + ((9.1102699999999994e-07 * fVec5[((IOTA - 3) & 127)]) + ((0.000151989 * fVec5[((IOTA - 2) & 127)]) + ((7.3887899999999996e-06 * fVec5[((IOTA - 1) & 127)]) + ((0.00085561100000000005 * fVec5[((IOTA - 78) & 127)]) + ((0.00048425300000000003 * fVec5[((IOTA - 77) & 127)]) + ((0.00017929400000000001 * fVec5[((IOTA - 70) & 127)]) + ((0.0012052899999999999 * fVec5[((IOTA - 69) & 127)]) + ((6.2717999999999998e-07 * fVec6[((IOTA - 126) & 127)]) + ((3.2364399999999999e-06 * fVec6[((IOTA - 125) & 127)]) + ((8.259009999999999e-06 * fVec6[((IOTA - 123) & 127)]) + ((8.9749599999999985e-06 * fVec6[((IOTA - 122) & 127)]) + ((1.8158200000000002e-05 * fVec6[((IOTA - 121) & 127)]) + ((5.1987600000000003e-05 * fVec6[((IOTA - 120) & 127)]) + ((3.15558e-05 * fVec6[((IOTA - 119) & 127)]) + ((5.2186399999999999e-05 * fVec6[((IOTA - 117) & 127)]) + ((0.00018432800000000001 * fVec6[((IOTA - 116) & 127)]) + ((5.6034300000000007e-05 * fVec6[((IOTA - 115) & 127)]) + ((6.3985300000000012e-05 * fVec6[((IOTA - 111) & 127)]) + ((9.3386400000000004e-05 * fVec6[((IOTA - 110) & 127)]) + ((0.000174119 * fVec6[((IOTA - 109) & 127)]) + ((0.00035722100000000001 * fVec6[((IOTA - 106) & 127)]) + ((0.00040952500000000005 * fVec6[((IOTA - 105) & 127)]) + ((0.00017427299999999999 * fVec6[((IOTA - 104) & 127)]) + ((0.00071199800000000004 * fVec6[((IOTA - 97) & 127)]) + ((0.0017188800000000001 * fVec6[((IOTA - 96) & 127)]) + ((0.00054225400000000004 * fVec6[((IOTA - 95) & 127)]) + ((0.000197515 * fVec6[((IOTA - 86) & 127)]) + ((0.0015781700000000001 * fVec6[((IOTA - 85) & 127)]) + ((0.0013863900000000001 * fVec6[((IOTA - 84) & 127)]) + ((1.9453499999999999e-05 * fVec6[((IOTA - 80) & 127)]) + ((0.00084547300000000001 * fVec6[((IOTA - 78) & 127)]) + ((0.0020311800000000001 * fVec6[((IOTA - 65) & 127)]) + ((0.0011967099999999999 * fVec6[((IOTA - 64) & 127)]) + ((6.0100200000000004e-05 * fVec6[((IOTA - 63) & 127)]) + ((0.0025393899999999999 * fVec6[((IOTA - 57) & 127)]) + ((0.0044228100000000001 * fVec6[((IOTA - 56) & 127)]) + ((0.0033445299999999996 * fVec6[((IOTA - 55) & 127)]) + ((0.0038119900000000003 * fVec6[((IOTA - 52) & 127)]) + ((0.00126195 * fVec6[((IOTA - 47) & 127)]) + ((0.00358275 * fVec6[((IOTA - 46) & 127)]) + ((0.0054975199999999997 * fVec6[((IOTA - 45) & 127)]) + ((0.0039510000000000005 * fVec6[((IOTA - 43) & 127)]) + ((0.0080632699999999991 * fVec6[((IOTA - 42) & 127)]) + ((0.0029713500000000002 * fVec6[((IOTA - 39) & 127)]) + ((0.0045339300000000003 * fVec6[((IOTA - 38) & 127)]) + ((0.0034691399999999999 * fVec6[((IOTA - 36) & 127)]) + ((0.011907399999999999 * fVec6[((IOTA - 33) & 127)]) + ((0.0053706500000000003 * fVec6[((IOTA - 31) & 127)]) + ((0.00080878800000000006 * fVec6[((IOTA - 29) & 127)]) + ((0.0049867499999999999 * fVec6[((IOTA - 28) & 127)]) + ((0.0289144 * fVec6[((IOTA - 26) & 127)]) + ((0.0069377800000000002 * fVec6[((IOTA - 23) & 127)]) + ((0.015224500000000002 * fVec6[((IOTA - 20) & 127)]) + ((0.022025899999999998 * fVec6[((IOTA - 19) & 127)]) + ((0.0022348099999999998 * fVec6[((IOTA - 15) & 127)]) + ((0.00084613300000000011 * fVec6[((IOTA - 10) & 127)]) + ((0.00031658400000000002 * fVec6[((IOTA - 8) & 127)]) + ((4.6817000000000003e-05 * fVec6[((IOTA - 7) & 127)]) + ((0.00030049700000000005 * fVec6[((IOTA - 6) & 127)]) + ((0.00030608399999999998 * fVec6[((IOTA - 4) & 127)]) + ((4.2592100000000005e-06 * fVec6[((IOTA - 3) & 127)]) + ((5.0763200000000002e-05 * fVec6[((IOTA - 2) & 127)]) + ((6.9052499999999997e-06 * fTemp6) + ((0.0012562599999999999 * fVec6[((IOTA - 68) & 127)]) + ((0.0010871100000000001 * fVec6[((IOTA - 66) & 127)]) + ((0.00076569700000000008 * fVec6[((IOTA - 76) & 127)]) + ((0.0010572699999999999 * fVec6[((IOTA - 75) & 127)]) + ((7.5785200000000008e-05 * fVec6[((IOTA - 74) & 127)]) + ((0.0013651400000000001 * fVec6[((IOTA - 73) & 127)]) + ((2.74129e-05 * fVec6[((IOTA - 72) & 127)]) + ((0.00022492500000000001 * fVec6[((IOTA - 71) & 127)]) + ((9.1296399999999994e-07 * fVec7[((IOTA - 126) & 127)]) + ((3.51464e-06 * fVec7[((IOTA - 125) & 127)]) + ((2.3408799999999998e-06 * fVec7[((IOTA - 124) & 127)]) + ((1.2859600000000001e-05 * fVec7[((IOTA - 122) & 127)]) + ((6.8135399999999998e-05 * fVec7[((IOTA - 121) & 127)]) + ((7.0622400000000003e-05 * fVec7[((IOTA - 120) & 127)]) + ((4.4616900000000003e-05 * fVec7[((IOTA - 117) & 127)]) + ((0.00015610500000000002 * fVec7[((IOTA - 109) & 127)]) + ((9.1847800000000005e-05 * fVec7[((IOTA - 106) & 127)]) + ((0.00040533400000000003 * fVec7[((IOTA - 105) & 127)]) + ((8.3187099999999995e-05 * fVec7[((IOTA - 100) & 127)]) + ((7.3548200000000008e-05 * fVec7[((IOTA - 99) & 127)]) + ((0.00037095800000000001 * fVec7[((IOTA - 98) & 127)]) + ((0.0010441100000000002 * fVec7[((IOTA - 97) & 127)]) + ((0.00075582300000000009 * fVec7[((IOTA - 96) & 127)]) + ((0.00068145800000000002 * fVec7[((IOTA - 95) & 127)]) + ((0.0017419500000000001 * fVec7[((IOTA - 94) & 127)]) + ((0.0020959099999999999 * fVec7[((IOTA - 93) & 127)]) + ((0.00075253699999999995 * fVec7[((IOTA - 89) & 127)]) + ((0.00076358900000000006 * fVec7[((IOTA - 88) & 127)]) + ((0.00093791200000000006 * fVec7[((IOTA - 87) & 127)]) + ((0.00066410799999999995 * fVec7[((IOTA - 86) & 127)]) + ((2.1531600000000002e-05 * fVec7[((IOTA - 83) & 127)]) + ((0.00025595899999999999 * fVec7[((IOTA - 78) & 127)]) + ((0.0026293000000000002 * fVec7[((IOTA - 77) & 127)]) + ((0.00269454 * fVec7[((IOTA - 76) & 127)]) + ((0.00143391 * fVec7[((IOTA - 75) & 127)]) + ((0.00067648000000000003 * fVec7[((IOTA - 74) & 127)]) + ((0.000121165 * fVec7[((IOTA - 73) & 127)]) + ((0.00082825600000000009 * fVec7[((IOTA - 66) & 127)]) + ((0.00018963900000000002 * fVec7[((IOTA - 65) & 127)]) + ((0.0047187499999999999 * fVec7[((IOTA - 52) & 127)]) + ((0.0066370199999999996 * fVec7[((IOTA - 51) & 127)]) + ((0.0045751999999999998 * fVec7[((IOTA - 50) & 127)]) + ((0.0044307699999999997 * fVec7[((IOTA - 49) & 127)]) + ((0.0081759099999999998 * fVec7[((IOTA - 48) & 127)]) + ((0.0042540899999999994 * fVec7[((IOTA - 47) & 127)]) + ((0.0031707900000000002 * fVec7[((IOTA - 46) & 127)]) + ((0.0049894200000000005 * fVec7[((IOTA - 45) & 127)]) + ((0.0097648300000000004 * fVec7[((IOTA - 44) & 127)]) + ((0.0162506 * fVec7[((IOTA - 43) & 127)]) + ((0.0036288100000000001 * fVec7[((IOTA - 42) & 127)]) + ((0.0078956300000000007 * fVec7[((IOTA - 40) & 127)]) + ((0.0017256800000000001 * fVec7[((IOTA - 31) & 127)]) + ((0.027913199999999999 * fVec7[((IOTA - 24) & 127)]) + ((0.025743499999999999 * fVec7[((IOTA - 23) & 127)]) + ((0.0068529799999999998 * fVec7[((IOTA - 21) & 127)]) + ((0.063915300000000008 * fVec7[((IOTA - 20) & 127)]) + ((0.0661857 * fVec7[((IOTA - 19) & 127)]) + ((0.022665999999999999 * fVec7[((IOTA - 18) & 127)]) + ((0.00195357 * fVec7[((IOTA - 17) & 127)]) + ((0.0555369 * fVec7[((IOTA - 16) & 127)]) + ((0.027306 * fVec7[((IOTA - 15) & 127)]) + ((0.00054477599999999996 * fVec7[((IOTA - 10) & 127)]) + ((0.00092023100000000009 * fVec7[((IOTA - 7) & 127)]) + ((0.00095649800000000007 * fVec7[((IOTA - 6) & 127)]) + ((0.00031540600000000001 * fVec7[((IOTA - 2) & 127)]) + ((0.0035877300000000003 * fVec7[((IOTA - 57) & 127)]) + ((0.0028681000000000002 * fVec7[((IOTA - 56) & 127)]) + ((0.00039613000000000002 * fVec7[((IOTA - 62) & 127)]) + ((0.0029183799999999999 * fVec7[((IOTA - 61) & 127)]) + (((9.8664600000000001e-07 * fVec8[((IOTA - 125) & 127)]) + ((6.1935700000000003e-07 * fVec8[((IOTA - 122) & 127)]) + ((4.9322600000000008e-05 * fVec8[((IOTA - 119) & 127)]) + ((6.2934400000000005e-05 * fVec8[((IOTA - 118) & 127)]) + ((4.2778300000000003e-05 * fVec8[((IOTA - 117) & 127)]) + ((0.000106835 * fVec8[((IOTA - 116) & 127)]) + ((0.00018018099999999999 * fVec8[((IOTA - 115) & 127)]) + ((0.00022798800000000001 * fVec8[((IOTA - 114) & 127)]) + ((0.000195522 * fVec8[((IOTA - 113) & 127)]) + ((0.00011808300000000001 * fVec8[((IOTA - 112) & 127)]) + ((3.4608100000000005e-05 * fVec8[((IOTA - 111) & 127)]) + ((5.723480000000001e-05 * fVec8[((IOTA - 110) & 127)]) + ((0.00097602600000000006 * fVec8[((IOTA - 85) & 127)]) + ((0.0015255399999999999 * fVec8[((IOTA - 84) & 127)]) + ((0.00237411 * fVec8[((IOTA - 83) & 127)]) + ((0.00010142800000000001 * fVec8[((IOTA - 109) & 127)]) + ((9.4569700000000004e-05 * fVec8[((IOTA - 108) & 127)]) + ((0.000158107 * fVec8[((IOTA - 107) & 127)]) + ((0.00070563799999999997 * fVec8[((IOTA - 106) & 127)]) + ((0.00048340500000000007 * fVec8[((IOTA - 105) & 127)]) + ((0.00023814000000000002 * fVec8[((IOTA - 102) & 127)]) + ((0.00015213499999999999 * fVec8[((IOTA - 100) & 127)]) + ((0.0010091500000000001 * fVec8[((IOTA - 99) & 127)]) + ((0.0015510600000000002 * fVec8[((IOTA - 98) & 127)]) + ((0.00028692799999999999 * fVec8[((IOTA - 97) & 127)]) + ((0.00133293 * fVec8[((IOTA - 94) & 127)]) + ((0.0028975800000000003 * fVec8[((IOTA - 93) & 127)]) + ((0.00088707100000000013 * fVec8[((IOTA - 92) & 127)]) + ((0.00187875 * fVec8[((IOTA - 90) & 127)]) + ((0.0031641300000000002 * fVec8[((IOTA - 89) & 127)]) + ((0.0018413699999999999 * fVec8[((IOTA - 88) & 127)]) + ((0.00031068799999999999 * fVec8[((IOTA - 86) & 127)]) + ((0.00112458 * fVec8[((IOTA - 82) & 127)]) + ((0.000380057 * fVec8[((IOTA - 81) & 127)]) + ((0.00020890300000000003 * fVec8[((IOTA - 78) & 127)]) + ((0.000712925 * fVec8[((IOTA - 75) & 127)]) + ((0.00090846500000000001 * fVec8[((IOTA - 74) & 127)]) + ((0.000274135 * fVec8[((IOTA - 73) & 127)]) + ((0.00090694700000000018 * fVec8[((IOTA - 64) & 127)]) + ((0.0024532300000000003 * fVec8[((IOTA - 63) & 127)]) + ((0.00327984 * fVec8[((IOTA - 62) & 127)]) + ((0.0016773199999999999 * fVec8[((IOTA - 61) & 127)]) + ((0.00044967800000000007 * fVec8[((IOTA - 60) & 127)]) + ((0.00165106 * fVec8[((IOTA - 59) & 127)]) + ((0.0048987900000000001 * fVec8[((IOTA - 58) & 127)]) + ((0.0034805299999999999 * fVec8[((IOTA - 57) & 127)]) + ((0.0023563100000000003 * fVec8[((IOTA - 56) & 127)]) + ((0.0045976600000000008 * fVec8[((IOTA - 55) & 127)]) + ((0.00626758 * fVec8[((IOTA - 54) & 127)]) + ((0.0026557099999999999 * fVec8[((IOTA - 53) & 127)]) + ((0.0043297500000000003 * fVec8[((IOTA - 52) & 127)]) + ((0.009209740000000001 * fVec8[((IOTA - 51) & 127)]) + ((0.0029224400000000001 * fVec8[((IOTA - 50) & 127)]) + ((0.0033351100000000001 * fVec8[((IOTA - 49) & 127)]) + ((0.010395300000000001 * fVec8[((IOTA - 48) & 127)]) + ((0.0093701299999999991 * fVec8[((IOTA - 47) & 127)]) + ((0.0063169100000000002 * fVec8[((IOTA - 46) & 127)]) + ((0.013098200000000001 * fVec8[((IOTA - 45) & 127)]) + ((0.014119 * fVec8[((IOTA - 44) & 127)]) + ((0.0021459299999999999 * fVec8[((IOTA - 43) & 127)]) + ((0.0105223 * fVec8[((IOTA - 42) & 127)]) + ((0.022465099999999998 * fVec8[((IOTA - 41) & 127)]) + ((0.0080828600000000007 * fVec8[((IOTA - 40) & 127)]) + ((0.0026383800000000001 * fVec8[((IOTA - 39) & 127)]) + ((0.0090530699999999999 * fVec8[((IOTA - 38) & 127)]) + ((0.0048908699999999994 * fVec8[((IOTA - 37) & 127)]) + ((0.0060908100000000003 * fVec8[((IOTA - 35) & 127)]) + ((0.0095365099999999998 * fVec8[((IOTA - 32) & 127)]) + ((0.00093046600000000002 * fVec8[((IOTA - 22) & 127)]) + ((0.015390200000000001 * fVec8[((IOTA - 18) & 127)]) + ((0.045964499999999998 * fVec8[((IOTA - 17) & 127)]) + ((0.028787799999999999 * fVec8[((IOTA - 15) & 127)]) + ((0.048319200000000007 * fVec8[((IOTA - 14) & 127)]) + ((0.076845299999999991 * fVec8[((IOTA - 13) & 127)]) + ((0.074437400000000001 * fVec8[((IOTA - 12) & 127)]) + ((0.0013813599999999999 * fVec8[((IOTA - 11) & 127)]) + ((9.4869000000000016e-05 * fVec8[((IOTA - 10) & 127)]) + ((0.00097653599999999996 * fVec8[((IOTA - 9) & 127)]) + ((0.00011001600000000001 * fVec8[((IOTA - 8) & 127)]) + ((0.00063438600000000002 * fVec8[((IOTA - 5) & 127)]) + ((0.00012589200000000001 * fVec8[((IOTA - 4) & 127)]) + ((0.00040925999999999999 * fVec8[((IOTA - 3) & 127)]) + ((6.4495100000000005e-05 * fVec8[((IOTA - 1) & 127)]) + ((1.3287400000000001e-05 * fTemp8) + ((7.7027e-06 * fVec9[((IOTA - 124) & 127)]) + ((1.6838600000000002e-05 * fVec9[((IOTA - 123) & 127)]) + ((4.9636399999999996e-06 * fVec9[((IOTA - 122) & 127)]) + ((1.9403399999999997e-06 * fVec9[((IOTA - 121) & 127)]) + ((5.28142e-05 * fVec9[((IOTA - 120) & 127)]) + ((0.00011763 * fVec9[((IOTA - 119) & 127)]) + ((0.00016574 * fVec9[((IOTA - 118) & 127)]) + ((0.00013637100000000001 * fVec9[((IOTA - 117) & 127)]) + ((9.7487500000000005e-05 * fVec9[((IOTA - 116) & 127)]) + ((2.2899500000000003e-05 * fVec9[((IOTA - 115) & 127)]) + ((1.3387100000000001e-05 * fVec9[((IOTA - 114) & 127)]) + ((8.3318600000000019e-05 * fVec9[((IOTA - 113) & 127)]) + ((0.00025527000000000004 * fVec9[((IOTA - 112) & 127)]) + ((0.00034909600000000002 * fVec9[((IOTA - 111) & 127)]) + ((0.00019374600000000001 * fVec9[((IOTA - 107) & 127)]) + ((0.00019838400000000002 * fVec9[((IOTA - 103) & 127)]) + ((0.000168486 * fVec9[((IOTA - 96) & 127)]) + ((0.0012272400000000001 * fVec9[((IOTA - 95) & 127)]) + ((0.00020233 * fVec9[((IOTA - 94) & 127)]) + ((0.00017177199999999999 * fVec9[((IOTA - 90) & 127)]) + ((0.00020847000000000004 * fVec9[((IOTA - 88) & 127)]) + ((0.0011732700000000001 * fVec9[((IOTA - 87) & 127)]) + ((0.00090841200000000004 * fVec9[((IOTA - 86) & 127)]) + ((0.0010732299999999999 * fVec9[((IOTA - 81) & 127)]) + ((0.00257691 * fVec9[((IOTA - 80) & 127)]) + ((0.0017717799999999999 * fVec9[((IOTA - 79) & 127)]) + ((0.000561862 * fVec9[((IOTA - 78) & 127)]) + ((0.000172719 * fVec9[((IOTA - 77) & 127)]) + ((0.0028482099999999999 * fVec9[((IOTA - 75) & 127)]) + ((0.00218125 * fVec9[((IOTA - 74) & 127)]) + ((0.00024288000000000001 * fVec9[((IOTA - 71) & 127)]) + ((0.00186575 * fVec9[((IOTA - 70) & 127)]) + ((0.000588187 * fVec9[((IOTA - 66) & 127)]) + ((0.00080033999999999997 * fVec9[((IOTA - 58) & 127)]) + ((2.5690700000000001e-05 * fVec9[((IOTA - 55) & 127)]) + ((0.00113243 * fVec9[((IOTA - 54) & 127)]) + ((0.0016462200000000001 * fVec9[((IOTA - 53) & 127)]) + ((0.00086436100000000012 * fVec9[((IOTA - 51) & 127)]) + ((0.0055766799999999997 * fVec9[((IOTA - 50) & 127)]) + ((0.00392757 * fVec9[((IOTA - 49) & 127)]) + ((0.0028865100000000001 * fVec9[((IOTA - 48) & 127)]) + ((0.0056144999999999997 * fVec9[((IOTA - 47) & 127)]) + ((0.0026402700000000001 * fVec9[((IOTA - 46) & 127)]) + ((0.0042838500000000005 * fVec9[((IOTA - 44) & 127)]) + ((0.0034927700000000001 * fVec9[((IOTA - 43) & 127)]) + ((0.00038527200000000003 * fVec9[((IOTA - 42) & 127)]) + ((0.0065811400000000009 * fVec9[((IOTA - 41) & 127)]) + ((0.0015727 * fVec9[((IOTA - 40) & 127)]) + ((0.0158301 * fVec9[((IOTA - 37) & 127)]) + ((0.027060000000000001 * fVec9[((IOTA - 34) & 127)]) + ((0.0063968899999999997 * fVec9[((IOTA - 31) & 127)]) + ((0.011650000000000001 * fVec9[((IOTA - 30) & 127)]) + ((0.0092220099999999992 * fVec9[((IOTA - 28) & 127)]) + ((0.0078633899999999996 * fVec9[((IOTA - 27) & 127)]) + ((0.029293300000000001 * fVec9[((IOTA - 25) & 127)]) + ((0.0096560400000000012 * fVec9[((IOTA - 24) & 127)]) + ((0.0144406 * fVec9[((IOTA - 22) & 127)]) + ((0.013951100000000001 * fVec9[((IOTA - 21) & 127)]) + ((0.0084374500000000009 * fVec9[((IOTA - 18) & 127)]) + ((0.0039648399999999999 * fVec9[((IOTA - 16) & 127)]) + ((0.0014542699999999999 * fVec9[((IOTA - 13) & 127)]) + ((0.00036303800000000004 * fVec9[((IOTA - 12) & 127)]) + ((0.00064008700000000001 * fVec9[((IOTA - 9) & 127)]) + ((6.501340000000001e-05 * fVec9[((IOTA - 6) & 127)]) + ((0.00011503900000000001 * fVec9[((IOTA - 5) & 127)]) + ((7.4982900000000003e-05 * fVec9[((IOTA - 3) & 127)]) + ((0.0016132899999999999 * fVec9[((IOTA - 85) & 127)]) + ((0.00035920700000000001 * fVec9[((IOTA - 84) & 127)]) + ((5.3978799999999999e-06 * fVec10[((IOTA - 125) & 127)]) + ((7.9125199999999989e-06 * fVec10[((IOTA - 124) & 127)]) + ((8.4929499999999997e-06 * fVec10[((IOTA - 123) & 127)]) + ((1.1654000000000001e-05 * fVec10[((IOTA - 122) & 127)]) + ((5.1085100000000003e-05 * fVec10[((IOTA - 121) & 127)]) + ((6.8685100000000004e-05 * fVec10[((IOTA - 120) & 127)]) + ((3.2896299999999998e-06 * fVec10[((IOTA - 119) & 127)]) + ((1.41509e-05 * fVec10[((IOTA - 118) & 127)]) + ((1.6980200000000004e-05 * fVec10[((IOTA - 117) & 127)]) + ((3.2223700000000001e-05 * fVec10[((IOTA - 116) & 127)]) + ((5.8471100000000003e-05 * fVec10[((IOTA - 115) & 127)]) + ((0.00031580000000000003 * fVec9[((IOTA - 82) & 127)]) + ((0.00010523700000000001 * fVec10[((IOTA - 114) & 127)]) + ((0.00013697000000000001 * fVec10[((IOTA - 113) & 127)]) + ((0.00010184400000000001 * fVec10[((IOTA - 112) & 127)]) + ((3.2479200000000006e-05 * fVec10[((IOTA - 104) & 127)]) + ((7.9775300000000009e-05 * fVec10[((IOTA - 103) & 127)]) + ((0.000178013 * fVec10[((IOTA - 97) & 127)]) + ((0.00096584900000000007 * fVec10[((IOTA - 96) & 127)]) + ((0.00013887600000000002 * fVec10[((IOTA - 95) & 127)]) + ((0.00019982600000000001 * fVec10[((IOTA - 92) & 127)]) + ((0.00031649800000000002 * fVec10[((IOTA - 89) & 127)]) + ((0.00037059799999999998 * fVec10[((IOTA - 88) & 127)]) + ((0.0012454300000000001 * fVec10[((IOTA - 87) & 127)]) + ((0.00084652999999999996 * fVec10[((IOTA - 86) & 127)]) + ((0.00049063800000000005 * fVec10[((IOTA - 82) & 127)]) + ((0.0013326899999999999 * fVec10[((IOTA - 79) & 127)]) + ((0.00140716 * fVec10[((IOTA - 78) & 127)]) + ((0.00036433400000000001 * fVec10[((IOTA - 77) & 127)]) + ((0.001299 * fVec10[((IOTA - 75) & 127)]) + ((0.0033552399999999998 * fVec10[((IOTA - 74) & 127)]) + ((0.00067232300000000006 * fVec10[((IOTA - 73) & 127)]) + ((0.000145224 * fVec10[((IOTA - 72) & 127)]) + ((0.00118198 * fVec10[((IOTA - 69) & 127)]) + ((0.0029169900000000004 * fVec10[((IOTA - 68) & 127)]) + ((0.000641773 * fVec10[((IOTA - 63) & 127)]) + ((0.0019041500000000001 * fVec10[((IOTA - 62) & 127)]) + ((0.0020271300000000003 * fVec10[((IOTA - 58) & 127)]) + ((0.0037510500000000001 * fVec10[((IOTA - 57) & 127)]) + ((0.0046006600000000003 * fVec10[((IOTA - 56) & 127)]) + ((0.0050914999999999997 * fVec10[((IOTA - 55) & 127)]) + ((0.0044053800000000004 * fVec10[((IOTA - 54) & 127)]) + ((0.0011063700000000002 * fVec10[((IOTA - 53) & 127)]) + ((0.0019731900000000001 * fVec10[((IOTA - 52) & 127)]) + ((0.0069039700000000006 * fVec10[((IOTA - 51) & 127)]) + ((0.0049702700000000006 * fVec10[((IOTA - 43) & 127)]) + ((0.0075730000000000007 * fVec10[((IOTA - 42) & 127)]) + ((0.0060422599999999998 * fVec10[((IOTA - 41) & 127)]) + ((0.0027149600000000002 * fVec10[((IOTA - 39) & 127)]) + ((0.00081970899999999995 * fVec10[((IOTA - 38) & 127)]) + ((5.1858400000000005e-05 * fVec10[((IOTA - 36) & 127)]) + ((0.0045739400000000003 * fVec10[((IOTA - 35) & 127)]) + ((0.00060354400000000002 * fVec10[((IOTA - 31) & 127)]) + ((0.0126207 * fVec10[((IOTA - 18) & 127)]) + ((0.015590100000000001 * fVec10[((IOTA - 17) & 127)]) + ((0.027497799999999999 * fVec10[((IOTA - 15) & 127)]) + ((0.019302299999999998 * fVec10[((IOTA - 14) & 127)]) + ((0.044481599999999996 * fVec10[((IOTA - 13) & 127)]) + ((0.042276800000000003 * fVec10[((IOTA - 12) & 127)]) + ((0.0021177600000000002 * fVec10[((IOTA - 11) & 127)]) + ((0.00027291300000000001 * fVec10[((IOTA - 9) & 127)]) + ((6.1550000000000005e-05 * fVec10[((IOTA - 8) & 127)]) + ((0.000175224 * fVec10[((IOTA - 5) & 127)]) + ((0.00022650199999999998 * fVec10[((IOTA - 4) & 127)]) + ((5.7022700000000005e-05 * fVec10[((IOTA - 3) & 127)]) + ((2.0383200000000002e-05 * fVec10[((IOTA - 1) & 127)]) + ((4.9413399999999999e-06 * fTemp10) + ((0.0058685200000000003 * fVec10[((IOTA - 50) & 127)]) + ((0.0061875000000000003 * fVec10[((IOTA - 49) & 127)]) + ((0.0086182900000000007 * fVec10[((IOTA - 48) & 127)]) + ((0.0054012200000000008 * fVec10[((IOTA - 45) & 127)]) + ((0.0051318099999999997 * fVec10[((IOTA - 47) & 127)]) + ((0.00066500800000000003 * fVec10[((IOTA - 46) & 127)]) + ((5.7104899999999999e-06 * fVec11[((IOTA - 125) & 127)]) + ((1.32724e-05 * fVec11[((IOTA - 124) & 127)]) + (((2.9137400000000003e-05 * fVec11[((IOTA - 119) & 127)]) + ((0.00015924 * fVec11[((IOTA - 116) & 127)]) + ((7.6537400000000003e-05 * fVec11[((IOTA - 115) & 127)]) + ((6.5009300000000008e-05 * fVec11[((IOTA - 114) & 127)]) + ((3.6292700000000006e-05 * fVec11[((IOTA - 113) & 127)]) + ((2.5843400000000004e-05 * fVec11[((IOTA - 112) & 127)]) + ((0.00024267500000000003 * fVec11[((IOTA - 111) & 127)]) + ((0.00031903100000000006 * fVec11[((IOTA - 109) & 127)]) + ((0.00039582199999999999 * fVec11[((IOTA - 108) & 127)]) + ((0.00027277099999999999 * fVec11[((IOTA - 107) & 127)]) + ((0.00092367899999999995 * fVec11[((IOTA - 106) & 127)]) + ((0.0007145500000000001 * fVec11[((IOTA - 105) & 127)]) + ((0.000964846 * fVec11[((IOTA - 104) & 127)]) + ((0.0012146699999999999 * fVec11[((IOTA - 103) & 127)]) + ((0.00057145600000000003 * fVec11[((IOTA - 102) & 127)]) + ((0.00054242299999999999 * fVec11[((IOTA - 101) & 127)]) + ((0.00061493000000000008 * fVec11[((IOTA - 100) & 127)]) + ((0.0012203400000000001 * fVec11[((IOTA - 99) & 127)]) + ((0.0011941500000000002 * fVec11[((IOTA - 98) & 127)]) + ((0.00106711 * fVec11[((IOTA - 97) & 127)]) + ((0.00308618 * fVec11[((IOTA - 96) & 127)]) + ((0.0032894199999999999 * fVec11[((IOTA - 95) & 127)]) + ((0.00149796 * fVec11[((IOTA - 94) & 127)]) + ((0.00068249900000000004 * fVec11[((IOTA - 93) & 127)]) + ((0.00078510099999999996 * fVec11[((IOTA - 91) & 127)]) + ((0.00096550100000000012 * fVec11[((IOTA - 90) & 127)]) + ((0.00058387599999999999 * fVec11[((IOTA - 89) & 127)]) + ((0.0013118799999999999 * fVec11[((IOTA - 88) & 127)]) + ((0.0027314400000000003 * fVec11[((IOTA - 87) & 127)]) + ((0.0023903100000000001 * fVec11[((IOTA - 85) & 127)]) + ((0.0025833200000000001 * fVec11[((IOTA - 84) & 127)]) + ((0.00058356200000000003 * fVec11[((IOTA - 83) & 127)]) + ((0.0013939500000000001 * fVec11[((IOTA - 78) & 127)]) + ((1.7606500000000002e-05 * fVec11[((IOTA - 77) & 127)]) + ((0.0017979000000000001 * fVec11[((IOTA - 75) & 127)]) + ((0.00191797 * fVec11[((IOTA - 74) & 127)]) + ((0.00034747700000000001 * fVec11[((IOTA - 73) & 127)]) + ((0.000544179 * fVec11[((IOTA - 67) & 127)]) + ((5.63033e-05 * fVec11[((IOTA - 65) & 127)]) + ((0.0011524899999999999 * fVec11[((IOTA - 62) & 127)]) + ((0.00156606 * fVec11[((IOTA - 55) & 127)]) + ((0.0015830800000000002 * fVec11[((IOTA - 54) & 127)]) + ((0.0017704200000000002 * fVec11[((IOTA - 50) & 127)]) + ((0.0019330199999999999 * fVec11[((IOTA - 49) & 127)]) + ((0.00266146 * fVec11[((IOTA - 46) & 127)]) + ((0.0011897800000000001 * fVec11[((IOTA - 45) & 127)]) + ((0.00307881 * fVec11[((IOTA - 42) & 127)]) + ((0.0024114100000000001 * fVec11[((IOTA - 41) & 127)]) + ((0.0026392099999999999 * fVec11[((IOTA - 40) & 127)]) + ((0.00380796 * fVec11[((IOTA - 39) & 127)]) + ((0.000320157 * fVec11[((IOTA - 38) & 127)]) + ((0.00022045699999999999 * fVec11[((IOTA - 37) & 127)]) + ((0.0020659800000000002 * fVec11[((IOTA - 36) & 127)]) + ((0.0049689600000000006 * fVec11[((IOTA - 34) & 127)]) + ((0.0075314300000000004 * fVec11[((IOTA - 33) & 127)]) + ((0.0022648999999999998 * fVec11[((IOTA - 31) & 127)]) + ((0.00801492 * fVec11[((IOTA - 30) & 127)]) + ((0.0110397 * fVec11[((IOTA - 29) & 127)]) + ((0.0010152000000000002 * fVec11[((IOTA - 28) & 127)]) + ((0.00287375 * fVec11[((IOTA - 26) & 127)]) + ((0.0161706 * fVec11[((IOTA - 22) & 127)]) + ((0.026332300000000003 * fVec11[((IOTA - 21) & 127)]) + ((0.0079993000000000009 * fVec11[((IOTA - 20) & 127)]) + ((0.00082163500000000003 * fVec11[((IOTA - 18) & 127)]) + ((0.035125400000000001 * fVec11[((IOTA - 17) & 127)]) + ((0.0032833199999999997 * fVec11[((IOTA - 14) & 127)]) + ((0.00033950300000000006 * fVec11[((IOTA - 11) & 127)]) + ((0.00046365600000000006 * fVec11[((IOTA - 9) & 127)]) + ((0.0019217200000000002 * fVec11[((IOTA - 8) & 127)]) + ((0.00055710700000000004 * fVec11[((IOTA - 6) & 127)]) + ((0.00078591400000000008 * fVec11[((IOTA - 5) & 127)]) + ((0.00067488200000000002 * fVec11[((IOTA - 4) & 127)]) + ((0.00020588500000000003 * fVec11[((IOTA - 2) & 127)]) + ((3.4700500000000004e-05 * fVec11[((IOTA - 1) & 127)]) + ((1.2413700000000001e-05 * fTemp11) + ((4.8744899999999996e-07 * fVec12[((IOTA - 126) & 127)]) + ((3.5255099999999998e-06 * fVec12[((IOTA - 125) & 127)]) + ((3.2621699999999995e-06 * fVec12[((IOTA - 124) & 127)]) + ((4.06072e-05 * fVec12[((IOTA - 121) & 127)]) + ((6.3317800000000006e-05 * fVec12[((IOTA - 120) & 127)]) + ((3.5918100000000004e-05 * fVec12[((IOTA - 119) & 127)]) + ((2.5941400000000002e-05 * fVec12[((IOTA - 117) & 127)]) + ((8.6548500000000007e-05 * fVec12[((IOTA - 116) & 127)]) + ((5.5551700000000006e-05 * fVec12[((IOTA - 115) & 127)]) + ((3.6866300000000003e-05 * fVec12[((IOTA - 114) & 127)]) + ((4.2405400000000006e-05 * fVec12[((IOTA - 113) & 127)]) + ((8.1096800000000013e-05 * fVec12[((IOTA - 112) & 127)]) + ((4.85157e-05 * fVec12[((IOTA - 111) & 127)]) + ((7.4248300000000005e-05 * fVec12[((IOTA - 110) & 127)]) + ((6.1852800000000005e-05 * fVec12[((IOTA - 107) & 127)]) + ((0.00033669 * fVec12[((IOTA - 106) & 127)]) + ((0.00035192300000000003 * fVec12[((IOTA - 105) & 127)]) + ((0.000181368 * fVec12[((IOTA - 102) & 127)]) + ((5.5010100000000004e-05 * fVec12[((IOTA - 99) & 127)]) + ((0.000181872 * fVec12[((IOTA - 95) & 127)]) + ((0.0012472700000000002 * fVec12[((IOTA - 94) & 127)]) + ((0.0012369000000000002 * fVec12[((IOTA - 93) & 127)]) + ((0.0031734000000000003 * fVec11[((IOTA - 86) & 127)]) + ((0.00084541900000000014 * fVec12[((IOTA - 88) & 127)]) + ((0.00030825999999999998 * fVec12[((IOTA - 87) & 127)]) + ((0.000991956 * fVec12[((IOTA - 86) & 127)]) + ((0.00039449500000000002 * fVec12[((IOTA - 83) & 127)]) + ((0.00042647700000000008 * fVec12[((IOTA - 78) & 127)]) + ((0.00098188600000000017 * fVec12[((IOTA - 76) & 127)]) + ((0.00076287399999999997 * fVec12[((IOTA - 75) & 127)]) + ((0.00019696800000000003 * fVec12[((IOTA - 73) & 127)]) + ((0.00026003500000000004 * fVec12[((IOTA - 72) & 127)]) + ((0.000162845 * fVec12[((IOTA - 68) & 127)]) + ((0.000175864 * fVec12[((IOTA - 65) & 127)]) + ((0.00122741 * fVec12[((IOTA - 62) & 127)]) + ((0.00051085000000000008 * fVec12[((IOTA - 60) & 127)]) + ((0.0042857099999999999 * fVec12[((IOTA - 59) & 127)]) + ((0.0037509800000000001 * fVec12[((IOTA - 58) & 127)]) + ((0.0013037700000000001 * fVec12[((IOTA - 57) & 127)]) + ((0.000469171 * fVec12[((IOTA - 52) & 127)]) + ((0.0048162999999999999 * fVec12[((IOTA - 50) & 127)]) + ((0.0040944599999999994 * fVec12[((IOTA - 49) & 127)]) + ((0.00164357 * fVec12[((IOTA - 41) & 127)]) + ((0.0066234300000000005 * fVec12[((IOTA - 40) & 127)]) + ((0.0107364 * fVec12[((IOTA - 39) & 127)]) + ((0.0021625699999999999 * fVec12[((IOTA - 38) & 127)]) + ((0.00078494800000000005 * fVec12[((IOTA - 37) & 127)]) + ((0.008554550000000001 * fVec12[((IOTA - 36) & 127)]) + ((0.0087573399999999989 * fVec12[((IOTA - 35) & 127)]) + ((0.0022028300000000002 * fVec12[((IOTA - 32) & 127)]) + ((0.026865800000000002 * fVec12[((IOTA - 31) & 127)]) + ((0.0066563000000000004 * fVec12[((IOTA - 27) & 127)]) + ((0.0173968 * fVec12[((IOTA - 26) & 127)]) + ((0.0065755600000000003 * fVec12[((IOTA - 22) & 127)]) + ((0.044476699999999994 * fVec12[((IOTA - 18) & 127)]) + ((0.019425600000000001 * fVec12[((IOTA - 17) & 127)]) + ((0.0258357 * fVec12[((IOTA - 15) & 127)]) + ((0.00505303 * fVec12[((IOTA - 13) & 127)]) + ((0.00065851199999999999 * fVec12[((IOTA - 10) & 127)]) + ((6.4017400000000008e-05 * fVec12[((IOTA - 9) & 127)]) + ((0.00033249800000000003 * fVec12[((IOTA - 8) & 127)]) + ((0.00114682 * fVec12[((IOTA - 6) & 127)]) + ((0.00043610699999999998 * fVec12[((IOTA - 4) & 127)]) + ((0.000204336 * fVec12[((IOTA - 2) & 127)]) + ((2.2571e-06 * fVec12[((IOTA - 1) & 127)]) + ((1.2883700000000002e-05 * fTemp12) + ((0.0041798500000000006 * fVec12[((IOTA - 46) & 127)]) + ((0.0073487099999999996 * fVec12[((IOTA - 45) & 127)]) + (((7.4329200000000013e-05 * fVec13[((IOTA - 115) & 127)]) + ((0.00029377599999999999 * fVec13[((IOTA - 114) & 127)]) + ((0.000280439 * fVec13[((IOTA - 113) & 127)]) + ((0.00052814500000000005 * fVec13[((IOTA - 110) & 127)]) + ((0.00070229999999999999 * fVec13[((IOTA - 109) & 127)]) + ((0.00080632699999999991 * fVec13[((IOTA - 108) & 127)]) + ((0.000643591 * fVec13[((IOTA - 107) & 127)]) + ((0.00081294000000000006 * fVec13[((IOTA - 106) & 127)]) + ((0.00082950500000000002 * fVec13[((IOTA - 105) & 127)]) + ((0.00023107600000000004 * fVec13[((IOTA - 104) & 127)]) + ((0.00064061300000000005 * fVec13[((IOTA - 103) & 127)]) + ((0.00091664000000000003 * fVec13[((IOTA - 102) & 127)]) + ((0.00073955600000000005 * fVec13[((IOTA - 101) & 127)]) + ((0.00059890600000000007 * fVec13[((IOTA - 100) & 127)]) + ((0.0013073099999999999 * fVec13[((IOTA - 99) & 127)]) + ((0.0027768799999999998 * fVec13[((IOTA - 98) & 127)]) + ((0.00040949500000000001 * fVec13[((IOTA - 97) & 127)]) + ((0.00145302 * fVec13[((IOTA - 94) & 127)]) + ((0.0022861500000000002 * fVec13[((IOTA - 93) & 127)]) + ((0.001377 * fVec13[((IOTA - 90) & 127)]) + ((0.0017080400000000001 * fVec13[((IOTA - 89) & 127)]) + ((0.00016274 * fVec13[((IOTA - 83) & 127)]) + ((0.0027307400000000002 * fVec13[((IOTA - 82) & 127)]) + ((0.0028667500000000004 * fVec13[((IOTA - 81) & 127)]) + ((0.0011399600000000002 * fVec13[((IOTA - 80) & 127)]) + ((0.00110995 * fVec13[((IOTA - 79) & 127)]) + ((0.00124602 * fVec13[((IOTA - 78) & 127)]) + ((0.00129805 * fVec13[((IOTA - 77) & 127)]) + ((0.00100318 * fVec13[((IOTA - 76) & 127)]) + ((0.0022987899999999998 * fVec13[((IOTA - 75) & 127)]) + ((0.0019049100000000001 * fVec13[((IOTA - 74) & 127)]) + ((0.00059075000000000002 * fVec13[((IOTA - 73) & 127)]) + ((0.00103864 * fVec13[((IOTA - 72) & 127)]) + ((0.0013787300000000001 * fVec13[((IOTA - 71) & 127)]) + ((0.00293582 * fVec13[((IOTA - 69) & 127)]) + ((0.0023355800000000003 * fVec13[((IOTA - 68) & 127)]) + ((0.0011070699999999999 * fVec13[((IOTA - 67) & 127)]) + ((0.00050953999999999995 * fVec13[((IOTA - 66) & 127)]) + ((0.00044511000000000003 * fVec13[((IOTA - 65) & 127)]) + ((0.0038312400000000001 * fVec13[((IOTA - 61) & 127)]) + ((0.0016638 * fVec13[((IOTA - 60) & 127)]) + ((0.0043739400000000006 * fVec13[((IOTA - 48) & 127)]) + ((0.0013932899999999999 * fVec13[((IOTA - 45) & 127)]) + ((0.0106382 * fVec13[((IOTA - 41) & 127)]) + ((0.0043469900000000002 * fVec13[((IOTA - 40) & 127)]) + ((0.0015759000000000001 * fVec13[((IOTA - 37) & 127)]) + ((0.0073185999999999998 * fVec13[((IOTA - 36) & 127)]) + ((0.0045973800000000007 * fVec13[((IOTA - 35) & 127)]) + ((0.013183400000000001 * fVec13[((IOTA - 33) & 127)]) + ((0.028645500000000001 * fVec13[((IOTA - 32) & 127)]) + ((0.0092487699999999999 * fVec13[((IOTA - 29) & 127)]) + ((0.039121700000000002 * fVec13[((IOTA - 28) & 127)]) + ((0.00144425 * fVec13[((IOTA - 27) & 127)]) + ((0.0060285 * fVec13[((IOTA - 25) & 127)]) + ((0.057524800000000001 * fVec13[((IOTA - 24) & 127)]) + ((0.021570599999999999 * fVec13[((IOTA - 21) & 127)]) + ((0.0014793400000000002 * fVec13[((IOTA - 20) & 127)]) + ((0.0043988899999999999 * fVec13[((IOTA - 19) & 127)]) + ((0.0073680199999999994 * fVec13[((IOTA - 16) & 127)]) + ((0.00058021900000000009 * fVec13[((IOTA - 14) & 127)]) + ((0.0037306700000000002 * fVec13[((IOTA - 12) & 127)]) + ((0.000216524 * fVec13[((IOTA - 11) & 127)]) + ((0.00050577300000000005 * fVec13[((IOTA - 7) & 127)]) + ((0.00019702400000000002 * fVec13[((IOTA - 5) & 127)]) + ((6.4290300000000003e-05 * fVec13[((IOTA - 3) & 127)]) + (((7.8904099999999995e-07 * fVec14[((IOTA - 118) & 127)]) + ((5.1851200000000009e-05 * fVec14[((IOTA - 117) & 127)]) + ((3.48346e-05 * fVec14[((IOTA - 116) & 127)]) + ((0.000263489 * fVec14[((IOTA - 113) & 127)]) + ((0.00048678400000000003 * fVec14[((IOTA - 112) & 127)]) + ((0.00066577900000000002 * fVec14[((IOTA - 111) & 127)]) + ((0.00072508600000000011 * fVec14[((IOTA - 110) & 127)]) + ((0.00094771800000000006 * fVec14[((IOTA - 109) & 127)]) + ((0.00085589900000000003 * fVec14[((IOTA - 108) & 127)]) + ((0.00097958799999999999 * fVec14[((IOTA - 107) & 127)]) + ((0.00110553 * fVec14[((IOTA - 106) & 127)]) + ((0.00082826600000000003 * fVec14[((IOTA - 105) & 127)]) + ((0.0013655500000000001 * fVec14[((IOTA - 104) & 127)]) + ((0.0018638400000000001 * fVec14[((IOTA - 103) & 127)]) + ((0.0016748900000000001 * fVec14[((IOTA - 102) & 127)]) + ((0.0013615999999999999 * fVec14[((IOTA - 101) & 127)]) + ((0.00120272 * fVec14[((IOTA - 100) & 127)]) + ((0.00103053 * fVec14[((IOTA - 99) & 127)]) + ((0.00040302800000000005 * fVec14[((IOTA - 98) & 127)]) + ((0.0012814900000000001 * fVec14[((IOTA - 97) & 127)]) + ((0.0015273399999999999 * fVec14[((IOTA - 96) & 127)]) + ((0.00038473700000000001 * fVec14[((IOTA - 94) & 127)]) + ((0.0010250300000000001 * fVec14[((IOTA - 93) & 127)]) + ((0.0011346700000000002 * fVec14[((IOTA - 92) & 127)]) + ((0.00043984100000000006 * fVec14[((IOTA - 85) & 127)]) + ((0.00021673800000000001 * fVec14[((IOTA - 84) & 127)]) + ((2.74177e-05 * fVec14[((IOTA - 82) & 127)]) + ((0.0010960700000000002 * fVec14[((IOTA - 77) & 127)]) + ((0.0013700399999999999 * fVec14[((IOTA - 73) & 127)]) + ((0.0030635300000000001 * fVec14[((IOTA - 72) & 127)]) + ((0.0019637600000000002 * fVec14[((IOTA - 71) & 127)]) + ((0.0018260300000000002 * fVec14[((IOTA - 70) & 127)]) + ((0.00238017 * fVec14[((IOTA - 69) & 127)]) + ((0.0031654200000000004 * fVec14[((IOTA - 68) & 127)]) + ((0.00275033 * fVec14[((IOTA - 67) & 127)]) + ((0.00046550599999999997 * fVec14[((IOTA - 95) & 127)]) + ((0.0016457800000000001 * fVec14[((IOTA - 66) & 127)]) + ((0.0025982900000000001 * fVec14[((IOTA - 65) & 127)]) + ((0.0013408299999999999 * fVec14[((IOTA - 64) & 127)]) + ((0.00068048499999999999 * fVec14[((IOTA - 60) & 127)]) + ((0.00122218 * fVec14[((IOTA - 59) & 127)]) + ((0.00152893 * fVec14[((IOTA - 58) & 127)]) + ((0.0022063899999999999 * fVec14[((IOTA - 57) & 127)]) + ((0.00078379700000000003 * fVec14[((IOTA - 56) & 127)]) + ((0.00022987799999999998 * fVec14[((IOTA - 52) & 127)]) + ((0.00078511300000000004 * fVec14[((IOTA - 51) & 127)]) + ((0.0012260999999999999 * fVec14[((IOTA - 45) & 127)]) + ((0.0026344099999999998 * fVec14[((IOTA - 44) & 127)]) + ((0.0038961999999999998 * fVec14[((IOTA - 39) & 127)]) + ((0.011467400000000001 * fVec14[((IOTA - 38) & 127)]) + ((0.0078678299999999993 * fVec14[((IOTA - 37) & 127)]) + ((0.0013363100000000001 * fVec14[((IOTA - 34) & 127)]) + ((0.0089890100000000004 * fVec14[((IOTA - 32) & 127)]) + ((0.0143689 * fVec14[((IOTA - 31) & 127)]) + ((0.0049334100000000001 * fVec14[((IOTA - 30) & 127)]) + ((0.019686699999999998 * fVec14[((IOTA - 27) & 127)]) + ((0.043355600000000001 * fVec14[((IOTA - 19) & 127)]) + ((0.00249322 * fVec14[((IOTA - 18) & 127)]) + ((0.0141169 * fVec14[((IOTA - 16) & 127)]) + ((0.0111431 * fVec14[((IOTA - 15) & 127)]) + ((0.0018486100000000001 * fVec14[((IOTA - 14) & 127)]) + ((0.000976993 * fVec14[((IOTA - 13) & 127)]) + ((0.0056459800000000001 * fVec14[((IOTA - 12) & 127)]) + ((0.00021246900000000004 * fVec14[((IOTA - 11) & 127)]) + ((0.00095016999999999996 * fVec14[((IOTA - 10) & 127)]) + ((0.0010622000000000001 * fVec14[((IOTA - 7) & 127)]) + ((0.00024919200000000002 * fVec14[((IOTA - 6) & 127)]) + ((0.00027049600000000001 * fVec14[((IOTA - 3) & 127)]) + ((5.1123399999999996e-06 * fVec14[((IOTA - 2) & 127)]) + ((3.7580000000000003e-05 * fVec14[((IOTA - 1) & 127)]) + ((1.0426200000000002e-05 * fTemp14) + (((2.5019199999999998e-06 * fVec0[((IOTA - 120) & 127)]) + ((0.00015476800000000001 * fVec0[((IOTA - 107) & 127)]) + ((2.3801800000000003e-05 * fVec0[((IOTA - 106) & 127)]) + ((0.00041578400000000004 * fVec0[((IOTA - 105) & 127)]) + ((0.00040693400000000007 * fVec0[((IOTA - 104) & 127)]) + ((0.00042180200000000004 * fVec0[((IOTA - 103) & 127)]) + ((0.00064933700000000005 * fVec0[((IOTA - 102) & 127)]) + ((0.0010572399999999999 * fVec0[((IOTA - 101) & 127)]) + ((0.00096599000000000012 * fVec0[((IOTA - 100) & 127)]) + ((0.00077855999999999997 * fVec0[((IOTA - 99) & 127)]) + ((0.00073777800000000002 * fVec0[((IOTA - 98) & 127)]) + ((0.00065036 * fVec0[((IOTA - 97) & 127)]) + ((0.00069698000000000004 * fVec0[((IOTA - 96) & 127)]) + ((0.0013956400000000001 * fVec0[((IOTA - 95) & 127)]) + ((0.0020596199999999999 * fVec0[((IOTA - 94) & 127)]) + ((0.0017169000000000002 * fVec0[((IOTA - 93) & 127)]) + ((0.0012716300000000002 * fVec0[((IOTA - 92) & 127)]) + ((0.00130908 * fVec0[((IOTA - 91) & 127)]) + ((0.00161012 * fVec0[((IOTA - 88) & 127)]) + ((0.0016711600000000001 * fVec0[((IOTA - 87) & 127)]) + ((0.00075290600000000002 * fVec0[((IOTA - 86) & 127)]) + ((0.00144013 * fVec0[((IOTA - 85) & 127)]) + ((0.0021273399999999997 * fVec0[((IOTA - 84) & 127)]) + ((0.00061597300000000002 * fVec0[((IOTA - 83) & 127)]) + ((0.00011313 * fVec0[((IOTA - 81) & 127)]) + ((0.0017438199999999999 * fVec0[((IOTA - 80) & 127)]) + ((0.0024799100000000001 * fVec0[((IOTA - 79) & 127)]) + ((0.00256507 * fVec0[((IOTA - 78) & 127)]) + ((0.0011552999999999999 * fVec0[((IOTA - 75) & 127)]) + ((0.00098456699999999999 * fVec0[((IOTA - 74) & 127)]) + ((0.000597807 * fVec0[((IOTA - 73) & 127)]) + ((0.0018893200000000001 * fVec0[((IOTA - 72) & 127)]) + ((0.00092920600000000002 * fVec0[((IOTA - 23) & 127)]) + ((0.080136100000000002 * fVec0[((IOTA - 22) & 127)]) + ((0.041393800000000001 * fVec0[((IOTA - 21) & 127)]) + ((0.042661300000000006 * fVec0[((IOTA - 20) & 127)]) + ((0.0088175100000000006 * fVec0[((IOTA - 19) & 127)]) + ((0.053196100000000003 * fVec0[((IOTA - 18) & 127)]) + ((0.097787600000000002 * fVec0[((IOTA - 17) & 127)]) + ((0.040092800000000005 * fVec0[((IOTA - 16) & 127)]) + ((0.077296500000000004 * fVec0[((IOTA - 15) & 127)]) + ((0.064767000000000005 * fVec0[((IOTA - 14) & 127)]) + ((0.082935599999999998 * fVec0[((IOTA - 13) & 127)]) + ((0.078489900000000001 * fVec0[((IOTA - 12) & 127)]) + ((0.00067357800000000009 * fVec0[((IOTA - 11) & 127)]) + ((0.00149621 * fVec0[((IOTA - 10) & 127)]) + ((0.00072128000000000003 * fVec0[((IOTA - 9) & 127)]) + ((0.00101019 * fVec0[((IOTA - 8) & 127)]) + ((0.000453602 * fVec0[((IOTA - 7) & 127)]) + ((0.00042969900000000002 * fVec0[((IOTA - 6) & 127)]) + ((0.0010723199999999999 * fVec0[((IOTA - 5) & 127)]) + ((0.00084950300000000004 * fVec0[((IOTA - 4) & 127)]) + ((0.00085153200000000001 * fVec0[((IOTA - 3) & 127)]) + ((0.00015027000000000001 * fVec0[((IOTA - 1) & 127)]) + (((((((((((((((((0.00016075400000000001 * fVec15[((IOTA - 2) & 127)]) + (0.021295600000000001 * fVec15[((IOTA - 24) & 127)])) + (0.0029395300000000001 * fVec15[((IOTA - 32) & 127)])) + (0.00092078700000000006 * fVec15[((IOTA - 44) & 127)])) + (0.00063317100000000008 * fVec15[((IOTA - 57) & 127)])) + (0.00036222200000000004 * fVec15[((IOTA - 69) & 127)])) + (0.000687957 * fVec15[((IOTA - 82) & 127)])) + (0.00087519700000000008 * fVec15[((IOTA - 89) & 127)])) + (0.000611186 * fVec15[((IOTA - 90) & 127)])) + (1.7742000000000001e-05 * fVec15[((IOTA - 91) & 127)])) + (0.00196204 * fVec15[((IOTA - 92) & 127)])) + (0.0023706000000000001 * fVec15[((IOTA - 93) & 127)])) + (9.940880000000001e-05 * fVec15[((IOTA - 94) & 127)])) + (0.00047365100000000001 * fVec15[((IOTA - 97) & 127)])) + (0.00048385000000000002 * fVec15[((IOTA - 98) & 127)])) + (1.47262e-06 * fVec15[((IOTA - 122) & 127)])) + (2.4709800000000002e-05 * fTemp0)))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0086390499999999988 * fVec14[((IOTA - 25) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00181733 * fVec13[((IOTA - 70) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0047594300000000003 * fVec12[((IOTA - 44) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0077257100000000002 * fVec10[((IOTA - 44) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0020411800000000001 * fVec7[((IOTA - 60) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00044645700000000004 * fVec3[((IOTA - 8) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.8821400000000002e-05 * fTemp2))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fHbargraph1 = FAUSTFLOAT(fRec19[0]); + output1[i] = FAUSTFLOAT(fTemp17); + fRec1[1] = fRec1[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + IOTA = (IOTA + 1); + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec0[1] = fRec0[0]; + fRec19[1] = fRec19[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOADecBinaural4.cpp b/source/HOAUGens/HOADecBinaural4.cpp new file mode 100644 index 0000000000..77bedcf3ea --- /dev/null +++ b/source/HOAUGens/HOADecBinaural4.cpp @@ -0,0 +1,1794 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL)" +name: "HOADecBinaural4" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + int IOTA; + double fVec0[128]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fVec1[128]; + double fRec5[2]; + FAUSTFLOAT fVbargraph2; + double fVec2[128]; + double fRec6[2]; + FAUSTFLOAT fVbargraph3; + double fVec3[128]; + double fRec7[2]; + FAUSTFLOAT fVbargraph4; + double fVec4[128]; + double fRec8[2]; + FAUSTFLOAT fVbargraph5; + double fVec5[128]; + double fRec9[2]; + FAUSTFLOAT fVbargraph6; + double fVec6[128]; + double fRec10[2]; + FAUSTFLOAT fVbargraph7; + double fVec7[128]; + double fRec11[2]; + FAUSTFLOAT fVbargraph8; + double fVec8[128]; + double fRec12[2]; + FAUSTFLOAT fVbargraph9; + double fVec9[128]; + double fRec13[2]; + FAUSTFLOAT fVbargraph10; + double fVec10[128]; + double fRec14[2]; + FAUSTFLOAT fVbargraph11; + double fVec11[128]; + double fRec15[2]; + FAUSTFLOAT fVbargraph12; + double fVec12[128]; + double fRec16[2]; + FAUSTFLOAT fVbargraph13; + double fVec13[128]; + double fRec17[2]; + FAUSTFLOAT fVbargraph14; + double fVec14[128]; + double fRec18[2]; + FAUSTFLOAT fVbargraph15; + double fVec15[128]; + double fRec19[2]; + FAUSTFLOAT fVbargraph16; + double fVec16[128]; + double fRec20[2]; + FAUSTFLOAT fVbargraph17; + double fVec17[128]; + double fRec21[2]; + FAUSTFLOAT fVbargraph18; + double fVec18[128]; + double fRec22[2]; + FAUSTFLOAT fVbargraph19; + double fVec19[128]; + double fRec23[2]; + FAUSTFLOAT fVbargraph20; + double fVec20[128]; + double fRec24[2]; + FAUSTFLOAT fVbargraph21; + double fVec21[128]; + double fRec25[2]; + FAUSTFLOAT fVbargraph22; + double fVec22[128]; + double fRec26[2]; + FAUSTFLOAT fVbargraph23; + double fVec23[128]; + double fRec27[2]; + FAUSTFLOAT fVbargraph24; + double fVec24[128]; + double fRec0[2]; + FAUSTFLOAT fHbargraph0; + double fRec28[2]; + FAUSTFLOAT fHbargraph1; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL)"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOADecBinaural4"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + IOTA = 0; + for (int l3 = 0; (l3 < 128); l3 = (l3 + 1)) { + fVec0[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 128); l5 = (l5 + 1)) { + fVec1[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec5[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 128); l7 = (l7 + 1)) { + fVec2[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec6[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 128); l9 = (l9 + 1)) { + fVec3[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec7[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 128); l11 = (l11 + 1)) { + fVec4[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec8[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 128); l13 = (l13 + 1)) { + fVec5[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec9[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 128); l15 = (l15 + 1)) { + fVec6[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec10[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 128); l17 = (l17 + 1)) { + fVec7[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec11[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 128); l19 = (l19 + 1)) { + fVec8[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec12[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 128); l21 = (l21 + 1)) { + fVec9[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec13[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 128); l23 = (l23 + 1)) { + fVec10[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec14[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 128); l25 = (l25 + 1)) { + fVec11[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec15[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 128); l27 = (l27 + 1)) { + fVec12[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec16[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 128); l29 = (l29 + 1)) { + fVec13[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec17[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 128); l31 = (l31 + 1)) { + fVec14[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec18[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 128); l33 = (l33 + 1)) { + fVec15[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec19[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 128); l35 = (l35 + 1)) { + fVec16[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec20[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 128); l37 = (l37 + 1)) { + fVec17[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec21[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 128); l39 = (l39 + 1)) { + fVec18[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec22[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 128); l41 = (l41 + 1)) { + fVec19[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec23[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 128); l43 = (l43 + 1)) { + fVec20[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec24[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 128); l45 = (l45 + 1)) { + fVec21[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec25[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 128); l47 = (l47 + 1)) { + fVec22[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec26[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 128); l49 = (l49 + 1)) { + fVec23[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec27[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 128); l51 = (l51 + 1)) { + fVec24[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec0[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + fRec28[l53] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecBinaural4"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x570bba0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54c16e0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x56c8d80", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x56a3460", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x5678780", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x56486e0", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x56252f0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x55fcff0", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x55dde20", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x55b6730", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x558b1f0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x5563b00", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x553e1e0", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x55160c0", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54c7a80", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54d2960", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54a0550", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x5475fe0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x544cee0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x54128c0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x5401560", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x53d7120", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x53aea00", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x5382c20", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x535d5a0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 10"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 10"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->closeBox(); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("Left"); + ui_interface->declare(&fHbargraph0, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x5be2610", &fHbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Right"); + ui_interface->declare(&fHbargraph1, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x60358d0", &fHbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec3[0] = (fSlow1 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input24[i])); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + fVec0[(IOTA & 127)] = fTemp0; + double fTemp1 = (fRec3[0] * double(input23[i])); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec4[0]); + fVec1[(IOTA & 127)] = fTemp1; + double fTemp2 = (fRec3[0] * double(input22[i])); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec5[0]); + fVec2[(IOTA & 127)] = fTemp2; + double fTemp3 = (fRec3[0] * double(input21[i])); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec6[0]); + fVec3[(IOTA & 127)] = fTemp3; + double fTemp4 = (fRec3[0] * double(input20[i])); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec7[0]); + fVec4[(IOTA & 127)] = fTemp4; + double fTemp5 = (fRec3[0] * double(input19[i])); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec8[0]); + fVec5[(IOTA & 127)] = fTemp5; + double fTemp6 = (fRec3[0] * double(input18[i])); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec9[0]); + fVec6[(IOTA & 127)] = fTemp6; + double fTemp7 = (fRec3[0] * double(input17[i])); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec10[0]); + fVec7[(IOTA & 127)] = fTemp7; + double fTemp8 = (fRec3[0] * double(input16[i])); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph8 = FAUSTFLOAT(fRec11[0]); + fVec8[(IOTA & 127)] = fTemp8; + double fTemp9 = (fRec3[0] * double(input1[i])); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph9 = FAUSTFLOAT(fRec12[0]); + fVec9[(IOTA & 127)] = fTemp9; + double fTemp10 = (fRec3[0] * double(input14[i])); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph10 = FAUSTFLOAT(fRec13[0]); + fVec10[(IOTA & 127)] = fTemp10; + double fTemp11 = (fRec3[0] * double(input15[i])); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph11 = FAUSTFLOAT(fRec14[0]); + fVec11[(IOTA & 127)] = fTemp11; + double fTemp12 = (fRec3[0] * double(input13[i])); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph12 = FAUSTFLOAT(fRec15[0]); + fVec12[(IOTA & 127)] = fTemp12; + double fTemp13 = (fRec3[0] * double(input12[i])); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph13 = FAUSTFLOAT(fRec16[0]); + fVec13[(IOTA & 127)] = fTemp13; + double fTemp14 = (fRec3[0] * double(input11[i])); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph14 = FAUSTFLOAT(fRec17[0]); + fVec14[(IOTA & 127)] = fTemp14; + double fTemp15 = (fRec3[0] * double(input10[i])); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph15 = FAUSTFLOAT(fRec18[0]); + fVec15[(IOTA & 127)] = fTemp15; + double fTemp16 = (fRec3[0] * double(input9[i])); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph16 = FAUSTFLOAT(fRec19[0]); + fVec16[(IOTA & 127)] = fTemp16; + double fTemp17 = (fRec3[0] * double(input8[i])); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph17 = FAUSTFLOAT(fRec20[0]); + fVec17[(IOTA & 127)] = fTemp17; + double fTemp18 = (fRec3[0] * double(input7[i])); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph18 = FAUSTFLOAT(fRec21[0]); + fVec18[(IOTA & 127)] = fTemp18; + double fTemp19 = (fRec3[0] * double(input6[i])); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph19 = FAUSTFLOAT(fRec22[0]); + fVec19[(IOTA & 127)] = fTemp19; + double fTemp20 = (fRec3[0] * double(input5[i])); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph20 = FAUSTFLOAT(fRec23[0]); + fVec20[(IOTA & 127)] = fTemp20; + double fTemp21 = (fRec3[0] * double(input4[i])); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph21 = FAUSTFLOAT(fRec24[0]); + fVec21[(IOTA & 127)] = fTemp21; + double fTemp22 = (fRec3[0] * double(input3[i])); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph22 = FAUSTFLOAT(fRec25[0]); + fVec22[(IOTA & 127)] = fTemp22; + double fTemp23 = (fRec3[0] * double(input2[i])); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph23 = FAUSTFLOAT(fRec26[0]); + fVec23[(IOTA & 127)] = fTemp23; + double fTemp24 = (fRec3[0] * double(input0[i])); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph24 = FAUSTFLOAT(fRec27[0]); + fVec24[(IOTA & 127)] = fTemp24; + double fTemp25 = (fRec1[0] * (((8.8079300000000002e-07 * fVec0[((IOTA - 126) & 127)]) + ((2.3561399999999996e-06 * fVec0[((IOTA - 124) & 127)]) + ((7.3129899999999994e-06 * fVec0[((IOTA - 118) & 127)]) + ((8.74663e-05 * fVec0[((IOTA - 113) & 127)]) + ((8.9256100000000021e-05 * fVec0[((IOTA - 112) & 127)]) + ((5.0065999999999998e-05 * fVec0[((IOTA - 109) & 127)]) + ((4.0718199999999999e-05 * fVec0[((IOTA - 107) & 127)]) + ((0.000190676 * fVec0[((IOTA - 106) & 127)]) + ((6.0194500000000008e-05 * fVec0[((IOTA - 105) & 127)]) + ((0.0010829400000000001 * fVec0[((IOTA - 104) & 127)]) + ((0.00074344099999999996 * fVec0[((IOTA - 103) & 127)]) + ((0.00017791700000000001 * fVec0[((IOTA - 101) & 127)]) + ((0.00123146 * fVec0[((IOTA - 100) & 127)]) + ((0.0012094300000000001 * fVec0[((IOTA - 99) & 127)]) + ((0.00102399 * fVec0[((IOTA - 95) & 127)]) + ((0.0011951900000000001 * fVec0[((IOTA - 94) & 127)]) + ((0.0119731 * fVec0[((IOTA - 30) & 127)]) + ((0.010247200000000001 * fVec0[((IOTA - 27) & 127)]) + ((0.0162706 * fVec0[((IOTA - 26) & 127)]) + ((0.016289999999999999 * fVec0[((IOTA - 25) & 127)]) + ((0.036860799999999999 * fVec0[((IOTA - 24) & 127)]) + ((0.038006600000000001 * fVec0[((IOTA - 23) & 127)]) + ((0.019427300000000002 * fVec0[((IOTA - 22) & 127)]) + ((0.025630400000000001 * fVec0[((IOTA - 21) & 127)]) + ((0.033451700000000001 * fVec0[((IOTA - 20) & 127)]) + ((0.029137300000000001 * fVec0[((IOTA - 13) & 127)]) + ((0.048090000000000001 * fVec0[((IOTA - 12) & 127)]) + ((0.0102197 * fVec0[((IOTA - 11) & 127)]) + ((0.00102731 * fVec0[((IOTA - 9) & 127)]) + ((0.00033557999999999998 * fVec0[((IOTA - 8) & 127)]) + ((0.00072926300000000007 * fVec0[((IOTA - 7) & 127)]) + ((0.00062620699999999994 * fVec0[((IOTA - 5) & 127)]) + ((6.2166100000000008e-05 * fVec0[((IOTA - 4) & 127)]) + ((2.7781499999999998e-06 * fTemp0) + ((0.00154042 * fVec0[((IOTA - 85) & 127)]) + ((0.00182591 * fVec0[((IOTA - 84) & 127)]) + ((0.00053972300000000009 * fVec0[((IOTA - 82) & 127)]) + ((0.00184866 * fVec0[((IOTA - 81) & 127)]) + ((0.000571055 * fVec0[((IOTA - 80) & 127)]) + ((0.0019816600000000001 * fVec0[((IOTA - 77) & 127)]) + ((0.000899127 * fVec0[((IOTA - 76) & 127)]) + ((0.00072784599999999998 * fVec0[((IOTA - 72) & 127)]) + ((0.0026818300000000001 * fVec0[((IOTA - 71) & 127)]) + ((0.0017303900000000001 * fVec0[((IOTA - 70) & 127)]) + ((0.0011627499999999999 * fVec0[((IOTA - 59) & 127)]) + ((0.00114566 * fVec0[((IOTA - 58) & 127)]) + ((0.0014845699999999999 * fVec0[((IOTA - 57) & 127)]) + ((0.0018366700000000001 * fVec0[((IOTA - 56) & 127)]) + ((0.0018739399999999999 * fVec0[((IOTA - 55) & 127)]) + ((0.00044913200000000004 * fVec0[((IOTA - 54) & 127)]) + ((0.0026997300000000004 * fVec0[((IOTA - 52) & 127)]) + ((0.00353529 * fVec0[((IOTA - 51) & 127)]) + ((0.00049338800000000009 * fVec0[((IOTA - 48) & 127)]) + ((0.0045044300000000002 * fVec0[((IOTA - 47) & 127)]) + ((4.1378300000000003e-05 * fVec0[((IOTA - 46) & 127)]) + ((0.00152776 * fVec0[((IOTA - 43) & 127)]) + ((0.0051684499999999998 * fVec0[((IOTA - 42) & 127)]) + ((0.0082244100000000014 * fVec0[((IOTA - 39) & 127)]) + ((0.0018586200000000001 * fVec0[((IOTA - 38) & 127)]) + ((3.9174899999999995e-06 * fVec1[((IOTA - 124) & 127)]) + ((2.3008000000000001e-06 * fVec1[((IOTA - 123) & 127)]) + ((2.30759e-05 * fVec1[((IOTA - 122) & 127)]) + ((4.44424e-05 * fVec1[((IOTA - 117) & 127)]) + ((2.0348199999999997e-06 * fVec1[((IOTA - 115) & 127)]) + ((0.00014602200000000002 * fVec1[((IOTA - 112) & 127)]) + ((0.000200705 * fVec1[((IOTA - 111) & 127)]) + ((0.00021466900000000001 * fVec1[((IOTA - 110) & 127)]) + ((0.00019825999999999999 * fVec1[((IOTA - 106) & 127)]) + ((0.00061293399999999998 * fVec1[((IOTA - 105) & 127)]) + ((0.00028580599999999999 * fVec1[((IOTA - 104) & 127)]) + ((0.00012016899999999999 * fVec1[((IOTA - 103) & 127)]) + ((0.00028350700000000001 * fVec1[((IOTA - 102) & 127)]) + ((0.00029655200000000006 * fVec1[((IOTA - 99) & 127)]) + ((0.00078374800000000002 * fVec1[((IOTA - 98) & 127)]) + ((0.00029986299999999999 * fVec1[((IOTA - 97) & 127)]) + ((0.00067223400000000007 * fVec1[((IOTA - 94) & 127)]) + ((0.0013073300000000002 * fVec1[((IOTA - 93) & 127)]) + ((0.0013844899999999999 * fVec1[((IOTA - 92) & 127)]) + ((2.2802500000000004e-05 * fVec1[((IOTA - 47) & 127)]) + ((0.0033117200000000002 * fVec1[((IOTA - 46) & 127)]) + ((0.00077673400000000006 * fVec1[((IOTA - 45) & 127)]) + ((0.0072897299999999995 * fVec1[((IOTA - 42) & 127)]) + ((0.00136954 * fVec1[((IOTA - 41) & 127)]) + ((0.0025440700000000003 * fVec1[((IOTA - 39) & 127)]) + ((0.00062277700000000003 * fVec1[((IOTA - 37) & 127)]) + ((0.0073965899999999998 * fVec1[((IOTA - 36) & 127)]) + ((0.0019310799999999999 * fVec1[((IOTA - 35) & 127)]) + ((0.00106083 * fVec1[((IOTA - 33) & 127)]) + ((0.020638200000000002 * fVec1[((IOTA - 32) & 127)]) + ((0.00084266199999999999 * fVec1[((IOTA - 31) & 127)]) + ((0.0090219900000000006 * fVec1[((IOTA - 28) & 127)]) + ((0.0221418 * fVec1[((IOTA - 27) & 127)]) + ((0.0036234800000000001 * fVec1[((IOTA - 26) & 127)]) + ((0.0061371100000000003 * fVec1[((IOTA - 24) & 127)]) + ((0.040377299999999998 * fVec1[((IOTA - 23) & 127)]) + ((0.0047783499999999998 * fVec1[((IOTA - 20) & 127)]) + ((0.014182999999999999 * fVec1[((IOTA - 17) & 127)]) + ((0.0067481200000000007 * fVec1[((IOTA - 16) & 127)]) + ((0.0024826200000000001 * fVec1[((IOTA - 14) & 127)]) + ((0.010515500000000001 * fVec1[((IOTA - 13) & 127)]) + ((0.00032269000000000004 * fVec1[((IOTA - 10) & 127)]) + ((0.00063523900000000001 * fVec1[((IOTA - 8) & 127)]) + ((0.000129078 * fVec1[((IOTA - 7) & 127)]) + ((0.00053025000000000001 * fVec1[((IOTA - 5) & 127)]) + ((0.00020292900000000002 * fVec1[((IOTA - 4) & 127)]) + ((5.1820600000000003e-05 * fVec1[((IOTA - 1) & 127)]) + ((0.0023798400000000003 * fVec1[((IOTA - 51) & 127)]) + ((0.0024073300000000001 * fVec1[((IOTA - 50) & 127)]) + ((0.00041581000000000002 * fVec1[((IOTA - 88) & 127)]) + ((0.000846243 * fVec1[((IOTA - 85) & 127)]) + ((0.00053294300000000002 * fVec1[((IOTA - 84) & 127)]) + ((0.00060163399999999998 * fVec1[((IOTA - 80) & 127)]) + ((0.0018310100000000001 * fVec1[((IOTA - 79) & 127)]) + ((0.0015329200000000001 * fVec1[((IOTA - 74) & 127)]) + ((0.00088242499999999994 * fVec1[((IOTA - 73) & 127)]) + ((0.0012564 * fVec1[((IOTA - 69) & 127)]) + ((0.000106876 * fVec1[((IOTA - 68) & 127)]) + ((5.6309300000000007e-05 * fVec1[((IOTA - 66) & 127)]) + ((0.0022511199999999997 * fVec1[((IOTA - 65) & 127)]) + ((0.00251024 * fVec1[((IOTA - 64) & 127)]) + ((0.0033029299999999999 * fVec1[((IOTA - 61) & 127)]) + ((0.0033276300000000003 * fVec1[((IOTA - 60) & 127)]) + ((0.00121754 * fVec1[((IOTA - 55) & 127)]) + ((0.0013364400000000002 * fVec1[((IOTA - 54) & 127)]) + ((8.72722e-07 * fVec2[((IOTA - 126) & 127)]) + ((2.1165599999999999e-06 * fVec2[((IOTA - 125) & 127)]) + ((7.3710100000000001e-06 * fVec2[((IOTA - 122) & 127)]) + ((1.46484e-05 * fVec2[((IOTA - 121) & 127)]) + ((0.00012623700000000002 * fVec2[((IOTA - 112) & 127)]) + ((0.00040145799999999999 * fVec2[((IOTA - 111) & 127)]) + ((0.000414208 * fVec2[((IOTA - 110) & 127)]) + ((0.00021768299999999998 * fVec2[((IOTA - 107) & 127)]) + ((0.000541122 * fVec2[((IOTA - 106) & 127)]) + ((0.000823148 * fVec2[((IOTA - 105) & 127)]) + ((0.00019509200000000001 * fVec2[((IOTA - 103) & 127)]) + ((0.0013184900000000001 * fVec2[((IOTA - 102) & 127)]) + ((0.0010226299999999998 * fVec2[((IOTA - 101) & 127)]) + ((0.000125802 * fVec2[((IOTA - 100) & 127)]) + ((0.00083710400000000008 * fVec2[((IOTA - 99) & 127)]) + ((0.00236228 * fVec2[((IOTA - 98) & 127)]) + ((0.0017316800000000002 * fVec2[((IOTA - 97) & 127)]) + ((0.00057995900000000001 * fVec2[((IOTA - 57) & 127)]) + ((0.00115193 * fVec2[((IOTA - 56) & 127)]) + ((0.00079223400000000006 * fVec2[((IOTA - 55) & 127)]) + ((0.0061534800000000002 * fVec2[((IOTA - 52) & 127)]) + ((0.0071582199999999999 * fVec2[((IOTA - 51) & 127)]) + ((0.00165015 * fVec2[((IOTA - 50) & 127)]) + ((0.00086588999999999991 * fVec2[((IOTA - 49) & 127)]) + ((0.0062358300000000004 * fVec2[((IOTA - 48) & 127)]) + ((0.0050313800000000002 * fVec2[((IOTA - 47) & 127)]) + ((0.0031040800000000004 * fVec2[((IOTA - 46) & 127)]) + ((0.0050040100000000006 * fVec2[((IOTA - 45) & 127)]) + ((0.0027939900000000001 * fVec2[((IOTA - 44) & 127)]) + ((0.0065439699999999996 * fVec2[((IOTA - 43) & 127)]) + ((0.00124876 * fVec2[((IOTA - 42) & 127)]) + ((0.020424000000000001 * fVec2[((IOTA - 33) & 127)]) + ((0.0045740400000000006 * fVec2[((IOTA - 32) & 127)]) + ((0.0090182999999999999 * fVec2[((IOTA - 29) & 127)]) + ((0.00841159 * fVec2[((IOTA - 28) & 127)]) + ((0.046303400000000002 * fVec2[((IOTA - 25) & 127)]) + ((0.022126100000000003 * fVec2[((IOTA - 24) & 127)]) + ((0.023621 * fVec2[((IOTA - 23) & 127)]) + ((0.034497100000000003 * fVec2[((IOTA - 22) & 127)]) + ((0.019118099999999999 * fVec2[((IOTA - 21) & 127)]) + ((0.0039120300000000004 * fVec2[((IOTA - 18) & 127)]) + ((0.034787400000000003 * fVec2[((IOTA - 13) & 127)]) + ((0.032626599999999999 * fVec2[((IOTA - 12) & 127)]) + ((0.010078100000000001 * fVec2[((IOTA - 11) & 127)]) + ((0.0033341600000000001 * fVec2[((IOTA - 9) & 127)]) + ((0.00170722 * fVec2[((IOTA - 7) & 127)]) + ((0.00039425900000000005 * fVec2[((IOTA - 5) & 127)]) + ((8.8433799999999993e-06 * fVec2[((IOTA - 4) & 127)]) + ((1.19794e-06 * fVec2[((IOTA - 3) & 127)]) + ((1.7201900000000002e-05 * fTemp2) + ((0.00096430799999999998 * fVec2[((IOTA - 59) & 127)]) + ((0.00049957300000000001 * fVec2[((IOTA - 89) & 127)]) + ((0.00047812500000000003 * fVec2[((IOTA - 87) & 127)]) + ((0.00080239700000000005 * fVec2[((IOTA - 86) & 127)]) + ((0.00114842 * fVec2[((IOTA - 79) & 127)]) + ((0.00084254499999999999 * fVec2[((IOTA - 78) & 127)]) + ((0.00058521400000000002 * fVec2[((IOTA - 76) & 127)]) + ((0.0031232299999999998 * fVec2[((IOTA - 75) & 127)]) + ((0.0039299499999999998 * fVec2[((IOTA - 74) & 127)]) + ((0.00148547 * fVec2[((IOTA - 71) & 127)]) + ((0.00037265600000000002 * fVec2[((IOTA - 58) & 127)]) + ((0.0015915 * fVec2[((IOTA - 70) & 127)]) + ((0.00078234799999999998 * fVec2[((IOTA - 69) & 127)]) + ((0.00069670400000000003 * fVec2[((IOTA - 66) & 127)]) + ((1.60144e-05 * fVec3[((IOTA - 123) & 127)]) + ((3.7959300000000001e-05 * fVec3[((IOTA - 122) & 127)]) + ((1.1808799999999999e-05 * fVec3[((IOTA - 121) & 127)]) + ((5.3246100000000005e-05 * fVec3[((IOTA - 118) & 127)]) + ((4.9970700000000006e-05 * fVec3[((IOTA - 117) & 127)]) + ((6.7732400000000001e-06 * fVec3[((IOTA - 116) & 127)]) + ((0.00013832100000000001 * fVec3[((IOTA - 113) & 127)]) + ((0.00034154700000000004 * fVec3[((IOTA - 112) & 127)]) + ((5.9127099999999998e-05 * fVec3[((IOTA - 111) & 127)]) + ((1.61672e-05 * fVec3[((IOTA - 109) & 127)]) + ((0.000403428 * fVec3[((IOTA - 108) & 127)]) + ((2.9283000000000004e-05 * fVec3[((IOTA - 107) & 127)]) + ((5.6117600000000006e-05 * fVec3[((IOTA - 103) & 127)]) + ((0.00064464300000000008 * fVec3[((IOTA - 102) & 127)]) + ((6.57163e-05 * fVec3[((IOTA - 101) & 127)]) + ((0.00043101500000000003 * fVec3[((IOTA - 98) & 127)]) + ((0.00047464100000000004 * fVec3[((IOTA - 97) & 127)]) + ((0.00050108599999999998 * fVec3[((IOTA - 96) & 127)]) + ((0.00035622799999999999 * fVec3[((IOTA - 95) & 127)]) + ((0.000189175 * fVec3[((IOTA - 94) & 127)]) + ((0.000113763 * fVec3[((IOTA - 93) & 127)]) + ((0.00014460699999999999 * fVec3[((IOTA - 89) & 127)]) + ((0.00064626400000000002 * fVec3[((IOTA - 88) & 127)]) + ((0.00033219200000000003 * fVec3[((IOTA - 52) & 127)]) + ((0.00324858 * fVec3[((IOTA - 50) & 127)]) + ((0.0029808 * fVec3[((IOTA - 49) & 127)]) + ((0.00093466200000000006 * fVec3[((IOTA - 46) & 127)]) + ((0.00039698400000000002 * fVec3[((IOTA - 43) & 127)]) + ((0.00048442499999999997 * fVec3[((IOTA - 42) & 127)]) + ((0.00013193900000000003 * fVec3[((IOTA - 41) & 127)]) + ((0.00084730000000000016 * fVec3[((IOTA - 40) & 127)]) + ((0.0038824599999999999 * fVec3[((IOTA - 38) & 127)]) + ((0.0023402100000000001 * fVec3[((IOTA - 35) & 127)]) + ((0.0090115600000000001 * fVec3[((IOTA - 34) & 127)]) + ((0.0145007 * fVec3[((IOTA - 31) & 127)]) + ((0.00672019 * fVec3[((IOTA - 30) & 127)]) + ((0.019919199999999998 * fVec3[((IOTA - 27) & 127)]) + ((0.018401899999999999 * fVec3[((IOTA - 23) & 127)]) + ((0.019435299999999999 * fVec3[((IOTA - 22) & 127)]) + ((0.0052171300000000004 * fVec3[((IOTA - 20) & 127)]) + ((0.00278912 * fVec3[((IOTA - 19) & 127)]) + ((0.0067436400000000004 * fVec3[((IOTA - 17) & 127)]) + ((0.0015875500000000001 * fVec3[((IOTA - 16) & 127)]) + ((0.00088633199999999998 * fVec3[((IOTA - 14) & 127)]) + ((0.0047006599999999997 * fVec3[((IOTA - 13) & 127)]) + ((2.4513200000000001e-05 * fVec3[((IOTA - 11) & 127)]) + ((0.00016840400000000001 * fVec3[((IOTA - 10) & 127)]) + ((1.7683500000000001e-05 * fVec3[((IOTA - 8) & 127)]) + ((7.4087300000000005e-05 * fVec3[((IOTA - 7) & 127)]) + ((0.00013083600000000001 * fVec3[((IOTA - 5) & 127)]) + ((0.00014402999999999999 * fVec3[((IOTA - 4) & 127)]) + ((3.4461000000000001e-05 * fVec3[((IOTA - 1) & 127)]) + ((0.0015539499999999999 * fVec3[((IOTA - 55) & 127)]) + ((0.0034851399999999999 * fVec3[((IOTA - 54) & 127)]) + ((0.0013564600000000001 * fVec3[((IOTA - 53) & 127)]) + ((0.00034561500000000002 * fVec3[((IOTA - 87) & 127)]) + ((0.0013749000000000001 * fVec3[((IOTA - 80) & 127)]) + ((0.00137465 * fVec3[((IOTA - 79) & 127)]) + ((0.00104108 * fVec3[((IOTA - 77) & 127)]) + ((0.00091011900000000014 * fVec3[((IOTA - 76) & 127)]) + ((0.0020970900000000002 * fVec3[((IOTA - 75) & 127)]) + ((0.00061507900000000004 * fVec3[((IOTA - 74) & 127)]) + ((0.00066226900000000005 * fVec3[((IOTA - 71) & 127)]) + ((0.0048415200000000002 * fVec3[((IOTA - 70) & 127)]) + ((0.0022895300000000001 * fVec3[((IOTA - 69) & 127)]) + ((0.0025702799999999999 * fVec3[((IOTA - 65) & 127)]) + ((0.00035714999999999998 * fVec3[((IOTA - 64) & 127)]) + ((0.00088026800000000013 * fVec3[((IOTA - 61) & 127)]) + ((4.3969300000000004e-08 * fVec4[((IOTA - 126) & 127)]) + ((4.9046399999999999e-05 * fVec4[((IOTA - 121) & 127)]) + ((3.5164200000000005e-05 * fVec4[((IOTA - 120) & 127)]) + ((6.5718700000000005e-05 * fVec4[((IOTA - 113) & 127)]) + ((9.8145199999999987e-06 * fVec4[((IOTA - 104) & 127)]) + ((0.00047854099999999997 * fVec4[((IOTA - 102) & 127)]) + ((0.00058713800000000007 * fVec4[((IOTA - 101) & 127)]) + ((0.00063487900000000009 * fVec4[((IOTA - 97) & 127)]) + ((0.00084097399999999998 * fVec4[((IOTA - 96) & 127)]) + ((0.00060218900000000004 * fVec4[((IOTA - 95) & 127)]) + ((0.000719178 * fVec4[((IOTA - 94) & 127)]) + ((0.00049947400000000008 * fVec4[((IOTA - 93) & 127)]) + ((5.7074400000000004e-05 * fVec4[((IOTA - 91) & 127)]) + ((0.00063668800000000005 * fVec4[((IOTA - 90) & 127)]) + ((0.00050174400000000004 * fVec4[((IOTA - 89) & 127)]) + ((0.00104393 * fVec4[((IOTA - 85) & 127)]) + ((0.00032165200000000002 * fVec4[((IOTA - 84) & 127)]) + ((0.00130389 * fVec4[((IOTA - 81) & 127)]) + ((0.00015988800000000001 * fVec4[((IOTA - 80) & 127)]) + ((0.00030389300000000001 * fVec4[((IOTA - 77) & 127)]) + ((0.0007704150000000001 * fVec4[((IOTA - 76) & 127)]) + ((4.5806199999999998e-08 * fVec5[((IOTA - 126) & 127)]) + ((5.9764499999999998e-07 * fVec5[((IOTA - 124) & 127)]) + ((0.0033817300000000003 * fVec4[((IOTA - 14) & 127)]) + ((0.015114300000000001 * fVec4[((IOTA - 13) & 127)]) + ((0.020861999999999999 * fVec4[((IOTA - 12) & 127)]) + ((0.0053441599999999997 * fVec4[((IOTA - 11) & 127)]) + ((0.00123547 * fVec4[((IOTA - 9) & 127)]) + ((0.00040391500000000002 * fVec4[((IOTA - 7) & 127)]) + ((1.7806500000000003e-05 * fVec4[((IOTA - 6) & 127)]) + ((0.00048888700000000002 * fVec4[((IOTA - 5) & 127)]) + ((0.00015141300000000001 * fVec4[((IOTA - 3) & 127)]) + ((0.0019725599999999999 * fVec4[((IOTA - 71) & 127)]) + ((0.0010789299999999999 * fVec4[((IOTA - 70) & 127)]) + ((0.0017741899999999999 * fVec4[((IOTA - 69) & 127)]) + ((0.00083747600000000008 * fVec4[((IOTA - 66) & 127)]) + ((0.00093810300000000014 * fVec4[((IOTA - 65) & 127)]) + ((0.00207858 * fVec4[((IOTA - 64) & 127)]) + ((0.00137382 * fVec4[((IOTA - 63) & 127)]) + ((0.00029105500000000002 * fVec4[((IOTA - 62) & 127)]) + ((0.0019089600000000001 * fVec4[((IOTA - 59) & 127)]) + ((0.0028430399999999998 * fVec4[((IOTA - 58) & 127)]) + ((0.0032504600000000002 * fVec4[((IOTA - 55) & 127)]) + ((0.0033312400000000001 * fVec4[((IOTA - 54) & 127)]) + ((0.0029572000000000001 * fVec4[((IOTA - 48) & 127)]) + ((0.0024246099999999998 * fVec4[((IOTA - 47) & 127)]) + ((0.00076525699999999998 * fVec4[((IOTA - 44) & 127)]) + ((0.00030002700000000002 * fVec4[((IOTA - 43) & 127)]) + ((0.0016828099999999999 * fVec4[((IOTA - 41) & 127)]) + ((0.0073388400000000001 * fVec4[((IOTA - 40) & 127)]) + ((0.0047153500000000001 * fVec4[((IOTA - 39) & 127)]) + ((0.0065382999999999995 * fVec4[((IOTA - 35) & 127)]) + ((0.00229415 * fVec4[((IOTA - 30) & 127)]) + ((0.010495000000000001 * fVec4[((IOTA - 29) & 127)]) + ((0.026362800000000002 * fVec4[((IOTA - 28) & 127)]) + ((0.0036550699999999998 * fVec4[((IOTA - 27) & 127)]) + ((0.00058345500000000008 * fVec4[((IOTA - 26) & 127)]) + ((0.019277900000000001 * fVec4[((IOTA - 23) & 127)]) + ((0.0184233 * fVec4[((IOTA - 22) & 127)]) + ((0.027672400000000003 * fVec4[((IOTA - 21) & 127)]) + ((0.010700899999999999 * fVec4[((IOTA - 20) & 127)]) + ((0.00049956899999999995 * fVec4[((IOTA - 19) & 127)]) + ((4.5404499999999999e-06 * fVec5[((IOTA - 122) & 127)]) + ((6.2516899999999999e-06 * fVec5[((IOTA - 123) & 127)]) + ((0.017061400000000001 * fVec5[((IOTA - 12) & 127)]) + ((0.00028077500000000003 * fVec5[((IOTA - 10) & 127)]) + ((0.00020304900000000001 * fVec5[((IOTA - 9) & 127)]) + ((0.00028114900000000001 * fVec5[((IOTA - 8) & 127)]) + ((0.00075311200000000001 * fVec5[((IOTA - 7) & 127)]) + ((3.3129100000000001e-05 * fVec5[((IOTA - 107) & 127)]) + ((0.00037957800000000004 * fVec5[((IOTA - 104) & 127)]) + ((9.1390300000000012e-05 * fVec5[((IOTA - 103) & 127)]) + ((0.00012164900000000001 * fVec5[((IOTA - 102) & 127)]) + ((7.2862900000000003e-05 * fVec5[((IOTA - 100) & 127)]) + ((0.00075476100000000006 * fVec5[((IOTA - 99) & 127)]) + ((0.0011213599999999998 * fVec5[((IOTA - 98) & 127)]) + ((0.00048859700000000001 * fVec5[((IOTA - 97) & 127)]) + ((0.00057772600000000009 * fVec5[((IOTA - 96) & 127)]) + ((0.0010992299999999999 * fVec5[((IOTA - 95) & 127)]) + ((0.00136867 * fVec5[((IOTA - 94) & 127)]) + ((0.0024769499999999999 * fVec5[((IOTA - 93) & 127)]) + ((0.0017141299999999999 * fVec5[((IOTA - 92) & 127)]) + ((0.00099528400000000014 * fVec5[((IOTA - 91) & 127)]) + ((0.00072564299999999999 * fVec5[((IOTA - 90) & 127)]) + ((0.00049014600000000001 * fVec5[((IOTA - 89) & 127)]) + ((0.00028476100000000002 * fVec5[((IOTA - 88) & 127)]) + ((5.4113300000000009e-05 * fVec5[((IOTA - 85) & 127)]) + ((0.00064926500000000011 * fVec5[((IOTA - 84) & 127)]) + ((0.00090145900000000007 * fVec5[((IOTA - 83) & 127)]) + ((0.00074948899999999999 * fVec5[((IOTA - 82) & 127)]) + ((0.00034548700000000001 * fVec5[((IOTA - 78) & 127)]) + ((0.0015595699999999999 * fVec5[((IOTA - 72) & 127)]) + ((0.00125158 * fVec5[((IOTA - 71) & 127)]) + ((0.0020382500000000001 * fVec5[((IOTA - 70) & 127)]) + ((0.0018769700000000002 * fVec5[((IOTA - 69) & 127)]) + ((0.00043826000000000005 * fVec5[((IOTA - 64) & 127)]) + ((0.00192213 * fVec5[((IOTA - 63) & 127)]) + ((0.0040995700000000003 * fVec5[((IOTA - 59) & 127)]) + ((0.0060987200000000002 * fVec5[((IOTA - 58) & 127)]) + ((0.0022176000000000001 * fVec5[((IOTA - 57) & 127)]) + ((0.00212824 * fVec5[((IOTA - 54) & 127)]) + ((0.0032781899999999998 * fVec5[((IOTA - 53) & 127)]) + ((9.5596100000000004e-05 * fVec5[((IOTA - 50) & 127)]) + ((0.0014545300000000001 * fVec5[((IOTA - 46) & 127)]) + ((0.0038625300000000003 * fVec5[((IOTA - 45) & 127)]) + ((0.0017145699999999999 * fVec5[((IOTA - 44) & 127)]) + ((0.0079508400000000007 * fVec5[((IOTA - 41) & 127)]) + ((0.009358169999999999 * fVec5[((IOTA - 40) & 127)]) + ((0.0094388700000000002 * fVec5[((IOTA - 32) & 127)]) + ((0.0081053099999999993 * fVec5[((IOTA - 31) & 127)]) + ((0.0247297 * fVec5[((IOTA - 27) & 127)]) + ((0.019441400000000001 * fVec5[((IOTA - 26) & 127)]) + ((0.0026723599999999999 * fVec5[((IOTA - 25) & 127)]) + ((0.00037799999999999997 * fVec5[((IOTA - 3) & 127)]) + ((0.000467777 * fVec5[((IOTA - 4) & 127)]) + ((1.3991200000000001e-05 * fTemp5) + ((0.074936900000000001 * fVec5[((IOTA - 22) & 127)]) + ((0.0218175 * fVec5[((IOTA - 21) & 127)]) + ((0.014052500000000001 * fVec5[((IOTA - 17) & 127)]) + ((0.032805500000000001 * fVec5[((IOTA - 16) & 127)]) + ((0.00195027 * fVec5[((IOTA - 15) & 127)]) + ((1.1421399999999999e-06 * fVec6[((IOTA - 126) & 127)]) + ((6.1312800000000004e-06 * fVec6[((IOTA - 125) & 127)]) + ((1.8821000000000002e-05 * fVec6[((IOTA - 121) & 127)]) + ((3.69637e-05 * fVec6[((IOTA - 120) & 127)]) + ((0.00019845400000000001 * fVec6[((IOTA - 116) & 127)]) + ((1.2745400000000002e-05 * fVec6[((IOTA - 112) & 127)]) + ((0.000173661 * fVec6[((IOTA - 111) & 127)]) + ((3.7430900000000001e-05 * fVec6[((IOTA - 110) & 127)]) + ((3.8990300000000005e-05 * fVec6[((IOTA - 108) & 127)]) + ((0.00024954200000000006 * fVec6[((IOTA - 107) & 127)]) + ((0.00027521800000000003 * fVec6[((IOTA - 106) & 127)]) + ((3.6057999999999998e-06 * fVec6[((IOTA - 105) & 127)]) + ((0.00029303599999999999 * fVec6[((IOTA - 103) & 127)]) + ((0.00076291800000000002 * fVec6[((IOTA - 102) & 127)]) + ((0.00051647800000000001 * fVec6[((IOTA - 101) & 127)]) + ((0.00040501500000000005 * fVec6[((IOTA - 97) & 127)]) + ((0.00046903899999999998 * fVec6[((IOTA - 94) & 127)]) + ((0.0023897499999999999 * fVec6[((IOTA - 93) & 127)]) + ((0.00074860400000000004 * fVec6[((IOTA - 90) & 127)]) + ((0.00089415600000000012 * fVec6[((IOTA - 89) & 127)]) + ((2.9381300000000003e-05 * fVec6[((IOTA - 88) & 127)]) + ((0.0013978900000000002 * fVec6[((IOTA - 85) & 127)]) + ((0.00145937 * fVec6[((IOTA - 84) & 127)]) + ((0.0012423599999999999 * fVec6[((IOTA - 81) & 127)]) + ((0.00270412 * fVec6[((IOTA - 80) & 127)]) + ((0.0023507600000000003 * fVec6[((IOTA - 79) & 127)]) + ((0.0022935899999999999 * fVec6[((IOTA - 75) & 127)]) + ((0.00059835300000000004 * fVec6[((IOTA - 74) & 127)]) + ((0.00030100100000000001 * fVec6[((IOTA - 68) & 127)]) + ((0.00073815999999999997 * fVec6[((IOTA - 67) & 127)]) + ((6.6901800000000004e-05 * fVec6[((IOTA - 62) & 127)]) + ((0.00028901300000000002 * fVec6[((IOTA - 61) & 127)]) + ((0.00109084 * fVec6[((IOTA - 59) & 127)]) + ((0.00178498 * fVec6[((IOTA - 58) & 127)]) + ((0.00151166 * fVec6[((IOTA - 57) & 127)]) + ((0.0025656400000000001 * fVec6[((IOTA - 56) & 127)]) + ((0.00030762600000000003 * fVec6[((IOTA - 55) & 127)]) + ((0.0020867200000000002 * fVec6[((IOTA - 54) & 127)]) + ((0.0025482200000000003 * fVec6[((IOTA - 53) & 127)]) + ((0.00167453 * fVec6[((IOTA - 52) & 127)]) + ((0.0023747 * fVec6[((IOTA - 51) & 127)]) + ((0.0022410199999999998 * fVec6[((IOTA - 50) & 127)]) + ((0.0055318300000000006 * fVec6[((IOTA - 46) & 127)]) + ((0.0023482899999999998 * fVec6[((IOTA - 45) & 127)]) + ((0.0034206599999999998 * fVec6[((IOTA - 42) & 127)]) + ((0.00188773 * fVec6[((IOTA - 41) & 127)]) + ((0.00072377599999999998 * fVec6[((IOTA - 39) & 127)]) + ((0.0024612599999999998 * fVec6[((IOTA - 38) & 127)]) + ((0.0033621900000000001 * fVec6[((IOTA - 37) & 127)]) + ((0.0033196100000000002 * fVec6[((IOTA - 36) & 127)]) + ((0.013694999999999999 * fVec6[((IOTA - 33) & 127)]) + ((0.012183600000000001 * fVec6[((IOTA - 32) & 127)]) + ((0.0070372400000000002 * fVec6[((IOTA - 29) & 127)]) + ((0.0085312900000000004 * fVec6[((IOTA - 28) & 127)]) + ((0.034597700000000002 * fVec6[((IOTA - 27) & 127)]) + ((0.016548 * fVec6[((IOTA - 23) & 127)]) + ((0.036212899999999999 * fVec6[((IOTA - 22) & 127)]) + ((0.061774100000000005 * fVec6[((IOTA - 19) & 127)]) + ((0.019317500000000001 * fVec6[((IOTA - 14) & 127)]) + ((0.0043390899999999994 * fVec6[((IOTA - 12) & 127)]) + ((0.0015058000000000001 * fVec6[((IOTA - 11) & 127)]) + ((0.00027456800000000005 * fVec6[((IOTA - 10) & 127)]) + ((0.00045164799999999997 * fVec6[((IOTA - 9) & 127)]) + ((0.00077579600000000004 * fVec6[((IOTA - 7) & 127)]) + ((0.00115678 * fVec6[((IOTA - 5) & 127)]) + ((0.000375048 * fVec6[((IOTA - 3) & 127)]) + ((5.7016799999999999e-05 * fVec6[((IOTA - 1) & 127)]) + ((1.28309e-06 * fVec7[((IOTA - 126) & 127)]) + ((2.87072e-06 * fVec7[((IOTA - 125) & 127)]) + ((1.3474999999999998e-06 * fVec7[((IOTA - 123) & 127)]) + ((3.5239900000000001e-05 * fVec7[((IOTA - 122) & 127)]) + ((1.4600800000000001e-05 * fVec7[((IOTA - 121) & 127)]) + ((5.8902200000000007e-05 * fVec7[((IOTA - 117) & 127)]) + ((7.3645299999999999e-06 * fVec7[((IOTA - 116) & 127)]) + ((0.000124213 * fVec7[((IOTA - 110) & 127)]) + ((6.7869599999999998e-05 * fVec7[((IOTA - 109) & 127)]) + ((0.000275636 * fVec7[((IOTA - 108) & 127)]) + ((0.0018574600000000002 * fVec7[((IOTA - 86) & 127)]) + ((0.0024842200000000001 * fVec7[((IOTA - 85) & 127)]) + ((2.4123700000000004e-05 * fVec7[((IOTA - 84) & 127)]) + ((0.00024932600000000002 * fVec7[((IOTA - 83) & 127)]) + ((0.00045661800000000005 * fVec7[((IOTA - 79) & 127)]) + ((0.00079671800000000008 * fVec7[((IOTA - 78) & 127)]) + ((0.00239427 * fVec7[((IOTA - 77) & 127)]) + ((0.0023235999999999999 * fVec7[((IOTA - 76) & 127)]) + ((0.0025652599999999998 * fVec7[((IOTA - 75) & 127)]) + ((0.0022557499999999999 * fVec7[((IOTA - 74) & 127)]) + ((0.000148732 * fVec7[((IOTA - 73) & 127)]) + ((0.000211924 * fVec7[((IOTA - 68) & 127)]) + ((0.0036126499999999998 * fVec7[((IOTA - 67) & 127)]) + ((4.2760100000000004e-05 * fVec7[((IOTA - 66) & 127)]) + ((0.00138174 * fVec7[((IOTA - 65) & 127)]) + ((0.00104509 * fVec7[((IOTA - 64) & 127)]) + ((4.0581600000000005e-05 * fVec7[((IOTA - 63) & 127)]) + ((0.0013407899999999999 * fVec7[((IOTA - 62) & 127)]) + ((0.0018573200000000002 * fVec7[((IOTA - 61) & 127)]) + ((0.00175925 * fVec7[((IOTA - 60) & 127)]) + ((0.00085908300000000007 * fVec7[((IOTA - 51) & 127)]) + ((0.0041468100000000008 * fVec7[((IOTA - 50) & 127)]) + ((0.00258888 * fVec7[((IOTA - 49) & 127)]) + ((0.0016738 * fVec7[((IOTA - 48) & 127)]) + ((0.0027436699999999997 * fVec7[((IOTA - 47) & 127)]) + ((0.0057636700000000003 * fVec7[((IOTA - 42) & 127)]) + ((0.00084519300000000016 * fVec7[((IOTA - 41) & 127)]) + ((0.0065382800000000005 * fVec7[((IOTA - 37) & 127)]) + ((0.0033053900000000001 * fVec7[((IOTA - 35) & 127)]) + ((0.013110500000000001 * fVec7[((IOTA - 32) & 127)]) + ((0.0012610900000000001 * fVec7[((IOTA - 30) & 127)]) + ((0.0011880900000000002 * fVec7[((IOTA - 27) & 127)]) + ((0.012572000000000002 * fVec7[((IOTA - 26) & 127)]) + ((0.0013604799999999998 * fVec7[((IOTA - 24) & 127)]) + ((0.0029567700000000001 * fVec7[((IOTA - 23) & 127)]) + ((0.0026263800000000002 * fVec7[((IOTA - 22) & 127)]) + ((0.021428799999999998 * fVec7[((IOTA - 21) & 127)]) + ((0.036144099999999998 * fVec7[((IOTA - 18) & 127)]) + ((0.0041613600000000002 * fVec7[((IOTA - 15) & 127)]) + ((0.012642199999999999 * fVec7[((IOTA - 12) & 127)]) + ((0.00039501900000000003 * fVec7[((IOTA - 10) & 127)]) + ((0.0015795300000000002 * fVec7[((IOTA - 9) & 127)]) + ((0.00049500200000000003 * fVec7[((IOTA - 6) & 127)]) + ((0.00057567300000000007 * fVec7[((IOTA - 5) & 127)]) + ((0.00027081499999999999 * fVec7[((IOTA - 3) & 127)]) + ((7.1774599999999992e-06 * fVec7[((IOTA - 2) & 127)]) + ((1.2802800000000002e-05 * fVec7[((IOTA - 1) & 127)]) + ((3.72465e-06 * fTemp7) + ((0.00017397199999999999 * fVec7[((IOTA - 91) & 127)]) + ((0.0019107600000000001 * fVec7[((IOTA - 89) & 127)]) + ((0.00037599500000000001 * fVec7[((IOTA - 105) & 127)]) + ((0.00024762699999999999 * fVec7[((IOTA - 104) & 127)]) + ((0.000109887 * fVec7[((IOTA - 103) & 127)]) + ((0.00031391399999999999 * fVec7[((IOTA - 101) & 127)]) + ((0.0005165250000000001 * fVec7[((IOTA - 100) & 127)]) + ((3.8421000000000004e-05 * fVec7[((IOTA - 98) & 127)]) + ((0.00116917 * fVec7[((IOTA - 97) & 127)]) + ((0.0024624500000000001 * fVec7[((IOTA - 90) & 127)]) + ((0.0020289700000000002 * fVec7[((IOTA - 96) & 127)]) + ((0.00126756 * fVec7[((IOTA - 95) & 127)]) + ((1.07446e-06 * fVec8[((IOTA - 125) & 127)]) + ((9.5882799999999996e-06 * fVec8[((IOTA - 124) & 127)]) + ((8.4472900000000006e-06 * fVec8[((IOTA - 123) & 127)]) + ((9.2338799999999984e-06 * fVec8[((IOTA - 121) & 127)]) + ((1.7718900000000001e-05 * fVec8[((IOTA - 120) & 127)]) + ((7.1736100000000013e-05 * fVec8[((IOTA - 117) & 127)]) + ((3.1738400000000003e-06 * fVec8[((IOTA - 116) & 127)]) + ((9.0475300000000011e-05 * fVec8[((IOTA - 112) & 127)]) + ((0.00015947800000000001 * fVec8[((IOTA - 111) & 127)]) + ((0.00017410300000000002 * fVec8[((IOTA - 107) & 127)]) + ((0.00022612700000000001 * fVec8[((IOTA - 106) & 127)]) + ((9.8550200000000011e-05 * fVec8[((IOTA - 105) & 127)]) + ((0.00026838000000000003 * fVec8[((IOTA - 104) & 127)]) + ((0.00025552300000000001 * fVec8[((IOTA - 103) & 127)]) + ((0.00062636099999999998 * fVec8[((IOTA - 99) & 127)]) + ((0.00118519 * fVec8[((IOTA - 98) & 127)]) + ((0.00090719900000000003 * fVec8[((IOTA - 95) & 127)]) + ((0.00178987 * fVec8[((IOTA - 94) & 127)]) + ((0.00072873000000000002 * fVec8[((IOTA - 93) & 127)]) + ((0.00205112 * fVec8[((IOTA - 86) & 127)]) + ((0.00221638 * fVec8[((IOTA - 85) & 127)]) + ((0.0010048800000000001 * fVec8[((IOTA - 84) & 127)]) + ((0.00078622900000000005 * fVec8[((IOTA - 80) & 127)]) + ((0.0013969 * fVec8[((IOTA - 77) & 127)]) + ((0.0015445700000000001 * fVec8[((IOTA - 76) & 127)]) + ((3.0230399999999999e-06 * fVec8[((IOTA - 75) & 127)]) + ((0.00099086200000000012 * fVec8[((IOTA - 45) & 127)]) + ((0.0033490500000000001 * fVec8[((IOTA - 44) & 127)]) + ((0.00158416 * fVec8[((IOTA - 43) & 127)]) + ((0.0036774399999999997 * fVec8[((IOTA - 42) & 127)]) + ((0.00271587 * fVec8[((IOTA - 40) & 127)]) + ((0.0054552100000000003 * fVec8[((IOTA - 39) & 127)]) + ((0.0091737099999999999 * fVec8[((IOTA - 36) & 127)]) + ((0.013223499999999999 * fVec8[((IOTA - 35) & 127)]) + ((0.00116439 * fVec8[((IOTA - 34) & 127)]) + ((0.028504700000000001 * fVec8[((IOTA - 31) & 127)]) + ((0.0322688 * fVec8[((IOTA - 30) & 127)]) + ((0.010072300000000001 * fVec8[((IOTA - 26) & 127)]) + ((0.0049182499999999999 * fVec8[((IOTA - 23) & 127)]) + ((0.025481600000000004 * fVec8[((IOTA - 21) & 127)]) + ((0.042283299999999996 * fVec8[((IOTA - 20) & 127)]) + ((0.0102863 * fVec8[((IOTA - 19) & 127)]) + ((0.0085219000000000007 * fVec8[((IOTA - 17) & 127)]) + ((0.022074799999999999 * fVec8[((IOTA - 16) & 127)]) + ((0.023820100000000004 * fVec8[((IOTA - 12) & 127)]) + ((0.011093200000000001 * fVec8[((IOTA - 11) & 127)]) + ((0.0033972199999999998 * fVec8[((IOTA - 9) & 127)]) + ((0.00352222 * fVec8[((IOTA - 7) & 127)]) + ((0.0012450900000000001 * fVec8[((IOTA - 5) & 127)]) + ((0.00077165999999999997 * fVec8[((IOTA - 3) & 127)]) + ((0.0010502300000000001 * fVec8[((IOTA - 50) & 127)]) + ((0.0027733100000000002 * fVec8[((IOTA - 49) & 127)]) + ((0.00010376700000000001 * (fVec9[((IOTA - 71) & 127)] - fVec10[((IOTA - 119) & 127)])) + ((0.0021940599999999998 * fVec8[((IOTA - 68) & 127)]) + ((0.0055132499999999999 * fVec8[((IOTA - 67) & 127)]) + ((0.0050680600000000001 * fVec8[((IOTA - 66) & 127)]) + ((0.00140544 * fVec8[((IOTA - 65) & 127)]) + ((0.00038257900000000002 * fVec8[((IOTA - 63) & 127)]) + ((0.00150672 * fVec8[((IOTA - 62) & 127)]) + ((0.00084151500000000014 * fVec8[((IOTA - 48) & 127)]) + ((0.0023892500000000003 * fVec8[((IOTA - 54) & 127)]) + ((1.4034199999999999e-06 * fVec11[((IOTA - 126) & 127)]) + ((1.2211099999999999e-06 * fVec11[((IOTA - 125) & 127)]) + ((1.2893400000000001e-05 * fVec11[((IOTA - 124) & 127)]) + ((2.6002200000000003e-05 * fVec11[((IOTA - 123) & 127)]) + ((2.6415500000000001e-05 * fVec11[((IOTA - 122) & 127)]) + ((2.8177200000000002e-05 * fVec11[((IOTA - 121) & 127)]) + ((1.2612900000000001e-05 * fVec11[((IOTA - 120) & 127)]) + ((0.00041671500000000006 * fVec11[((IOTA - 104) & 127)]) + ((0.00031062500000000003 * fVec11[((IOTA - 100) & 127)]) + ((7.3607000000000002e-05 * fVec11[((IOTA - 99) & 127)]) + ((0.00050056999999999999 * fVec11[((IOTA - 96) & 127)]) + ((0.0027204999999999998 * fVec11[((IOTA - 95) & 127)]) + ((0.0020446800000000001 * fVec11[((IOTA - 94) & 127)]) + ((8.3015299999999998e-05 * fVec11[((IOTA - 93) & 127)]) + ((0.0022225799999999996 * fVec11[((IOTA - 92) & 127)]) + ((0.0024016700000000003 * fVec11[((IOTA - 91) & 127)]) + ((0.00063865800000000006 * fVec11[((IOTA - 86) & 127)]) + ((0.00058693299999999999 * fVec11[((IOTA - 84) & 127)]) + ((0.00042316100000000002 * fVec11[((IOTA - 80) & 127)]) + ((0.0010148100000000001 * fVec11[((IOTA - 79) & 127)]) + ((0.00028691900000000001 * fVec11[((IOTA - 73) & 127)]) + ((0.0021912699999999999 * fVec11[((IOTA - 72) & 127)]) + ((0.00113353 * fVec11[((IOTA - 71) & 127)]) + ((0.000557951 * fVec11[((IOTA - 66) & 127)]) + ((0.00043863399999999997 * fVec11[((IOTA - 63) & 127)]) + ((0.00314139 * fVec11[((IOTA - 62) & 127)]) + ((0.0052284000000000002 * fVec11[((IOTA - 61) & 127)]) + ((0.0025010699999999998 * fVec11[((IOTA - 60) & 127)]) + ((0.0012393300000000001 * fVec11[((IOTA - 57) & 127)]) + ((0.0018594100000000001 * fVec11[((IOTA - 54) & 127)]) + ((0.0034922200000000003 * fVec11[((IOTA - 53) & 127)]) + ((0.00127944 * fVec11[((IOTA - 52) & 127)]) + ((0.0016422699999999999 * fVec11[((IOTA - 51) & 127)]) + ((0.00289419 * fVec11[((IOTA - 50) & 127)]) + ((0.0053105499999999998 * fVec11[((IOTA - 49) & 127)]) + ((0.0065292000000000006 * fVec11[((IOTA - 48) & 127)]) + ((0.00110392 * fVec11[((IOTA - 47) & 127)]) + ((0.0039351999999999998 * fVec11[((IOTA - 42) & 127)]) + ((0.00132128 * fVec11[((IOTA - 41) & 127)]) + ((0.0068892700000000003 * fVec11[((IOTA - 39) & 127)]) + ((0.0013770800000000001 * fVec11[((IOTA - 38) & 127)]) + ((0.031043400000000002 * fVec11[((IOTA - 30) & 127)]) + ((0.0012180400000000001 * fVec11[((IOTA - 29) & 127)]) + ((0.026485700000000001 * fVec11[((IOTA - 26) & 127)]) + ((0.026438899999999998 * fVec11[((IOTA - 23) & 127)]) + ((0.0094311100000000012 * fVec11[((IOTA - 22) & 127)]) + ((0.0253549 * fVec11[((IOTA - 21) & 127)]) + ((0.034643899999999998 * fVec11[((IOTA - 20) & 127)]) + ((0.0140976 * fVec11[((IOTA - 19) & 127)]) + ((0.00406018 * fVec11[((IOTA - 16) & 127)]) + ((0.019651700000000001 * fVec11[((IOTA - 12) & 127)]) + ((0.0098021300000000009 * fVec11[((IOTA - 11) & 127)]) + ((0.00308077 * fVec11[((IOTA - 9) & 127)]) + ((0.00323953 * fVec11[((IOTA - 7) & 127)]) + ((0.0012123500000000001 * fVec11[((IOTA - 5) & 127)]) + (((4.4620600000000002e-07 * fVec10[((IOTA - 126) & 127)]) + ((2.9040900000000002e-05 * fVec10[((IOTA - 122) & 127)]) + ((3.3390499999999998e-05 * fVec10[((IOTA - 121) & 127)]) + ((2.7818400000000001e-05 * fVec10[((IOTA - 118) & 127)]) + ((1.2691900000000001e-05 * fVec10[((IOTA - 113) & 127)]) + ((0.00037104300000000005 * fVec10[((IOTA - 111) & 127)]) + ((0.00041838800000000006 * fVec10[((IOTA - 110) & 127)]) + ((0.00057686100000000002 * fVec10[((IOTA - 106) & 127)]) + ((0.00059161900000000004 * fVec10[((IOTA - 105) & 127)]) + ((0.00049454399999999997 * fVec10[((IOTA - 104) & 127)]) + ((0.00061440799999999999 * fVec10[((IOTA - 103) & 127)]) + ((0.00061735800000000003 * fVec10[((IOTA - 102) & 127)]) + ((0.000728026 * fVec10[((IOTA - 101) & 127)]) + ((0.00038062800000000004 * fVec10[((IOTA - 100) & 127)]) + ((0.00062138299999999998 * fVec10[((IOTA - 99) & 127)]) + ((0.00075514600000000005 * fVec10[((IOTA - 98) & 127)]) + ((0.0011730600000000001 * fVec10[((IOTA - 95) & 127)]) + ((0.0016346700000000002 * fVec10[((IOTA - 94) & 127)]) + ((0.0021457000000000004 * fVec10[((IOTA - 93) & 127)]) + ((0.0025975199999999999 * fVec10[((IOTA - 92) & 127)]) + ((0.00015330900000000002 * fVec10[((IOTA - 91) & 127)]) + ((0.00154597 * fVec10[((IOTA - 89) & 127)]) + ((0.00067549000000000005 * fVec10[((IOTA - 88) & 127)]) + ((0.00107274 * fVec10[((IOTA - 85) & 127)]) + ((0.0025198 * fVec10[((IOTA - 60) & 127)]) + ((0.00117113 * fVec10[((IOTA - 59) & 127)]) + ((0.00015039900000000001 * fVec10[((IOTA - 58) & 127)]) + ((0.000455995 * fVec10[((IOTA - 56) & 127)]) + ((0.00278239 * fVec10[((IOTA - 55) & 127)]) + ((0.0010278799999999999 * fVec10[((IOTA - 54) & 127)]) + ((0.011156999999999999 * fVec10[((IOTA - 45) & 127)]) + ((0.0043641399999999999 * fVec10[((IOTA - 44) & 127)]) + ((0.0039441099999999998 * fVec10[((IOTA - 42) & 127)]) + ((0.0097659400000000007 * fVec10[((IOTA - 39) & 127)]) + ((0.0076369999999999997 * fVec10[((IOTA - 36) & 127)]) + ((0.015424400000000001 * fVec10[((IOTA - 35) & 127)]) + ((0.0018063700000000001 * fVec10[((IOTA - 32) & 127)]) + ((0.00736515 * fVec10[((IOTA - 31) & 127)]) + ((0.0126468 * fVec10[((IOTA - 30) & 127)]) + ((0.0011752499999999999 * fVec10[((IOTA - 27) & 127)]) + ((0.022162999999999999 * fVec10[((IOTA - 26) & 127)]) + ((0.0071126699999999998 * fVec10[((IOTA - 25) & 127)]) + ((0.018755900000000002 * fVec10[((IOTA - 24) & 127)]) + ((0.0013016799999999999 * fVec10[((IOTA - 23) & 127)]) + ((0.0137094 * fVec10[((IOTA - 21) & 127)]) + ((0.024051599999999999 * fVec10[((IOTA - 18) & 127)]) + ((0.015724599999999998 * fVec10[((IOTA - 15) & 127)]) + ((0.014135400000000001 * fVec10[((IOTA - 12) & 127)]) + ((0.0011849499999999999 * fVec10[((IOTA - 9) & 127)]) + ((0.00070355200000000008 * fVec10[((IOTA - 7) & 127)]) + ((5.9634000000000005e-05 * fVec10[((IOTA - 6) & 127)]) + ((0.000133299 * fVec10[((IOTA - 5) & 127)]) + ((0.00039401200000000001 * fVec10[((IOTA - 3) & 127)]) + ((3.0720999999999999e-05 * fVec10[((IOTA - 1) & 127)]) + ((8.3709499999999999e-06 * fTemp10) + ((0.0019257899999999999 * fVec10[((IOTA - 65) & 127)]) + ((0.00162886 * fVec10[((IOTA - 64) & 127)]) + ((0.00050768500000000002 * fVec10[((IOTA - 63) & 127)]) + ((0.00062359600000000002 * fVec10[((IOTA - 80) & 127)]) + ((0.000178293 * fVec10[((IOTA - 79) & 127)]) + ((0.00080254300000000007 * fVec10[((IOTA - 76) & 127)]) + ((0.00065406300000000008 * fVec10[((IOTA - 68) & 127)]) + ((0.00014068899999999999 * fVec10[((IOTA - 67) & 127)]) + ((3.0765800000000003e-05 * fVec12[((IOTA - 119) & 127)]) + ((7.0563399999999996e-05 * fVec12[((IOTA - 118) & 127)]) + ((1.38519e-05 * fVec12[((IOTA - 115) & 127)]) + ((0.00014198999999999999 * fVec12[((IOTA - 114) & 127)]) + ((9.8497200000000003e-05 * fVec12[((IOTA - 113) & 127)]) + ((0.000185267 * fVec12[((IOTA - 112) & 127)]) + ((9.1395000000000002e-05 * fVec12[((IOTA - 111) & 127)]) + ((8.0491800000000001e-05 * fVec12[((IOTA - 110) & 127)]) + ((0.00064522800000000008 * fVec12[((IOTA - 109) & 127)]) + ((0.00058569100000000005 * fVec12[((IOTA - 108) & 127)]) + ((0.00033563700000000001 * fVec12[((IOTA - 107) & 127)]) + ((0.00035424600000000001 * fVec12[((IOTA - 106) & 127)]) + ((0.000105676 * fVec12[((IOTA - 83) & 127)]) + ((0.00052492499999999998 * fVec12[((IOTA - 75) & 127)]) + ((0.0022562899999999998 * fVec12[((IOTA - 74) & 127)]) + ((0.000321723 * fVec12[((IOTA - 73) & 127)]) + ((0.00080229500000000007 * fVec12[((IOTA - 72) & 127)]) + ((0.0019222600000000001 * fVec12[((IOTA - 71) & 127)]) + ((0.0028435500000000002 * fVec12[((IOTA - 70) & 127)]) + ((4.2787900000000004e-05 * fVec12[((IOTA - 69) & 127)]) + ((0.0024381200000000002 * fVec12[((IOTA - 67) & 127)]) + ((0.0023961899999999999 * fVec12[((IOTA - 66) & 127)]) + ((0.0021430799999999999 * fVec12[((IOTA - 65) & 127)]) + ((0.0030028400000000001 * fVec12[((IOTA - 64) & 127)]) + ((0.00058073100000000002 * fVec12[((IOTA - 63) & 127)]) + ((0.0017794099999999999 * fVec12[((IOTA - 51) & 127)]) + ((0.00225201 * fVec12[((IOTA - 48) & 127)]) + ((0.0035764999999999998 * fVec12[((IOTA - 47) & 127)]) + ((0.0050062100000000005 * fVec12[((IOTA - 46) & 127)]) + ((0.00090678400000000011 * fVec12[((IOTA - 45) & 127)]) + ((0.0060474300000000003 * fVec12[((IOTA - 42) & 127)]) + ((0.0049879100000000008 * fVec12[((IOTA - 41) & 127)]) + ((0.0040529299999999997 * fVec12[((IOTA - 40) & 127)]) + ((0.0083491300000000015 * fVec12[((IOTA - 39) & 127)]) + ((0.011238600000000001 * fVec12[((IOTA - 36) & 127)]) + ((7.6854400000000007e-05 * fVec12[((IOTA - 34) & 127)]) + ((0.0100301 * fVec12[((IOTA - 33) & 127)]) + ((0.0053935399999999996 * fVec12[((IOTA - 32) & 127)]) + ((0.0073630199999999996 * fVec12[((IOTA - 28) & 127)]) + ((0.016863099999999999 * fVec12[((IOTA - 27) & 127)]) + ((0.0087242399999999994 * fVec12[((IOTA - 24) & 127)]) + ((0.027741399999999999 * fVec12[((IOTA - 22) & 127)]) + ((0.0366919 * fVec12[((IOTA - 19) & 127)]) + ((0.011357900000000001 * fVec12[((IOTA - 14) & 127)]) + ((0.0037318799999999999 * fVec12[((IOTA - 12) & 127)]) + ((0.0010972500000000001 * fVec12[((IOTA - 11) & 127)]) + ((6.8217500000000009e-05 * fVec12[((IOTA - 10) & 127)]) + ((0.00061125900000000006 * fVec12[((IOTA - 9) & 127)]) + ((0.00056615599999999995 * fVec12[((IOTA - 7) & 127)]) + ((0.00058234700000000009 * fVec12[((IOTA - 5) & 127)]) + ((0.00027969900000000001 * fVec12[((IOTA - 3) & 127)]) + ((4.34537e-05 * fVec12[((IOTA - 1) & 127)]) + ((0.00041022299999999998 * fVec12[((IOTA - 93) & 127)]) + ((0.00062789300000000003 * fVec12[((IOTA - 105) & 127)]) + ((0.00034429799999999999 * fVec12[((IOTA - 104) & 127)]) + ((2.9823200000000003e-05 * fVec12[((IOTA - 103) & 127)]) + ((0.00061507300000000005 * fVec12[((IOTA - 102) & 127)]) + ((0.00037771400000000002 * fVec12[((IOTA - 101) & 127)]) + ((0.00015985700000000001 * fVec12[((IOTA - 100) & 127)]) + ((0.000190946 * fVec12[((IOTA - 99) & 127)]) + ((0.00050743800000000003 * fVec12[((IOTA - 98) & 127)]) + ((0.00056488300000000007 * fVec12[((IOTA - 97) & 127)]) + ((8.1509000000000009e-05 * fVec12[((IOTA - 96) & 127)]) + ((0.00037732899999999998 * fVec12[((IOTA - 95) & 127)]) + ((0.00085697799999999999 * fVec12[((IOTA - 92) & 127)]) + ((7.1292100000000001e-05 * fVec13[((IOTA - 115) & 127)]) + ((0.00018952700000000002 * fVec13[((IOTA - 111) & 127)]) + ((0.00035912999999999999 * fVec13[((IOTA - 110) & 127)]) + ((0.00051251200000000002 * fVec13[((IOTA - 109) & 127)]) + ((0.00046264500000000003 * fVec13[((IOTA - 108) & 127)]) + ((0.00014609200000000001 * fVec13[((IOTA - 107) & 127)]) + ((0.000122237 * fVec13[((IOTA - 106) & 127)]) + ((2.0314199999999999e-05 * fVec13[((IOTA - 105) & 127)]) + ((3.2517300000000001e-05 * fVec13[((IOTA - 104) & 127)]) + ((7.679690000000001e-05 * fVec13[((IOTA - 103) & 127)]) + ((0.00081181999999999999 * fVec13[((IOTA - 102) & 127)]) + ((0.0010270300000000002 * fVec13[((IOTA - 101) & 127)]) + ((0.00033934900000000002 * fVec13[((IOTA - 100) & 127)]) + ((0.00067179499999999999 * fVec13[((IOTA - 99) & 127)]) + ((0.0015498300000000001 * fVec13[((IOTA - 98) & 127)]) + ((0.00193557 * fVec13[((IOTA - 97) & 127)]) + ((0.0012977900000000001 * fVec13[((IOTA - 96) & 127)]) + ((0.00173953 * fVec13[((IOTA - 92) & 127)]) + ((0.0020737100000000003 * fVec13[((IOTA - 91) & 127)]) + ((0.00132314 * fVec13[((IOTA - 90) & 127)]) + ((0.00050203100000000001 * fVec13[((IOTA - 89) & 127)]) + ((2.5817700000000002e-05 * fVec13[((IOTA - 81) & 127)]) + ((0.0008419320000000001 * fVec13[((IOTA - 80) & 127)]) + ((0.00087629800000000007 * fVec13[((IOTA - 79) & 127)]) + ((0.000245352 * fVec13[((IOTA - 70) & 127)]) + ((0.0012620800000000001 * fVec13[((IOTA - 69) & 127)]) + ((0.0023085100000000002 * fVec13[((IOTA - 68) & 127)]) + ((0.002405 * fVec13[((IOTA - 67) & 127)]) + ((0.022452899999999998 * fVec13[((IOTA - 16) & 127)]) + ((0.0121954 * fVec13[((IOTA - 15) & 127)]) + ((0.0109563 * fVec13[((IOTA - 12) & 127)]) + ((0.00016957000000000002 * fVec13[((IOTA - 11) & 127)]) + ((0.00010783300000000001 * fVec13[((IOTA - 10) & 127)]) + ((0.00024862500000000004 * fVec13[((IOTA - 9) & 127)]) + ((0.00084071099999999995 * fVec13[((IOTA - 7) & 127)]) + ((9.0162999999999997e-05 * fVec13[((IOTA - 4) & 127)]) + ((0.00036489900000000002 * fVec13[((IOTA - 3) & 127)]) + ((4.0528500000000005e-06 * fTemp13) + ((0.0057233800000000001 * fVec13[((IOTA - 28) & 127)]) + ((0.0152522 * fVec13[((IOTA - 27) & 127)]) + ((0.0102524 * fVec13[((IOTA - 26) & 127)]) + ((0.018531200000000001 * fVec13[((IOTA - 25) & 127)]) + ((0.044155600000000003 * fVec13[((IOTA - 22) & 127)]) + ((0.0014007000000000002 * fVec13[((IOTA - 66) & 127)]) + ((0.00093808200000000002 * fVec13[((IOTA - 64) & 127)]) + ((0.0028319 * fVec13[((IOTA - 63) & 127)]) + ((0.00071589500000000003 * fVec13[((IOTA - 60) & 127)]) + ((0.0012767 * fVec13[((IOTA - 59) & 127)]) + ((0.0016556800000000001 * fVec13[((IOTA - 58) & 127)]) + ((0.0023854900000000001 * fVec13[((IOTA - 57) & 127)]) + ((0.00071006400000000005 * fVec13[((IOTA - 56) & 127)]) + ((0.0023205399999999998 * fVec13[((IOTA - 54) & 127)]) + ((0.0019624999999999998 * fVec13[((IOTA - 52) & 127)]) + ((0.0022978399999999998 * fVec13[((IOTA - 51) & 127)]) + ((0.00051752200000000008 * fVec13[((IOTA - 48) & 127)]) + ((0.0059472300000000004 * fVec13[((IOTA - 46) & 127)]) + ((0.0056101400000000004 * fVec13[((IOTA - 45) & 127)]) + ((0.00025800500000000001 * fVec13[((IOTA - 40) & 127)]) + ((0.0064505600000000001 * fVec13[((IOTA - 38) & 127)]) + ((0.014772 * fVec13[((IOTA - 34) & 127)]) + ((0.0058612900000000008 * fVec13[((IOTA - 31) & 127)]) + ((1.16687e-06 * fVec14[((IOTA - 126) & 127)]) + ((8.0474799999999991e-06 * fVec14[((IOTA - 125) & 127)]) + ((1.1716500000000002e-05 * fVec14[((IOTA - 124) & 127)]) + ((1.6095900000000003e-05 * fVec14[((IOTA - 123) & 127)]) + ((1.2353500000000001e-05 * fVec14[((IOTA - 121) & 127)]) + ((5.0538800000000005e-05 * fVec14[((IOTA - 120) & 127)]) + ((6.90663e-05 * fVec14[((IOTA - 119) & 127)]) + ((0.0081954799999999998 * fVec13[((IOTA - 21) & 127)]) + ((7.1261200000000008e-05 * fVec14[((IOTA - 110) & 127)]) + ((0.00013404500000000001 * fVec14[((IOTA - 107) & 127)]) + ((0.000144139 * fVec14[((IOTA - 103) & 127)]) + ((0.00074598600000000002 * fVec14[((IOTA - 102) & 127)]) + ((0.00041806100000000001 * fVec14[((IOTA - 101) & 127)]) + ((0.00099729399999999991 * fVec14[((IOTA - 97) & 127)]) + ((0.00072742900000000003 * fVec14[((IOTA - 96) & 127)]) + ((0.00095647000000000006 * fVec14[((IOTA - 94) & 127)]) + ((0.0019078999999999999 * fVec14[((IOTA - 93) & 127)]) + ((0.00037591000000000002 * fVec14[((IOTA - 92) & 127)]) + ((0.00091705400000000015 * fVec14[((IOTA - 91) & 127)]) + ((0.0019979199999999998 * fVec14[((IOTA - 90) & 127)]) + ((0.00084190100000000004 * fVec14[((IOTA - 89) & 127)]) + ((0.00062404300000000002 * fVec14[((IOTA - 85) & 127)]) + ((0.0010226500000000002 * fVec14[((IOTA - 84) & 127)]) + ((0.00016474200000000003 * fVec14[((IOTA - 82) & 127)]) + ((0.00111031 * fVec14[((IOTA - 81) & 127)]) + ((0.0010574600000000001 * fVec14[((IOTA - 80) & 127)]) + ((0.0012639700000000001 * fVec14[((IOTA - 77) & 127)]) + ((0.00089859899999999993 * fVec14[((IOTA - 76) & 127)]) + ((0.00095380500000000006 * fVec14[((IOTA - 72) & 127)]) + ((0.0069549800000000004 * fVec14[((IOTA - 45) & 127)]) + ((0.011236100000000001 * fVec14[((IOTA - 44) & 127)]) + ((0.0059433200000000002 * fVec14[((IOTA - 43) & 127)]) + ((0.00041302300000000005 * fVec14[((IOTA - 40) & 127)]) + ((0.00281839 * fVec14[((IOTA - 39) & 127)]) + ((0.019649799999999999 * fVec14[((IOTA - 30) & 127)]) + ((0.0053291099999999997 * fVec14[((IOTA - 26) & 127)]) + ((0.0035138299999999999 * fVec14[((IOTA - 25) & 127)]) + ((0.024438399999999999 * fVec14[((IOTA - 22) & 127)]) + ((0.0101949 * fVec14[((IOTA - 21) & 127)]) + ((0.026200899999999999 * fVec14[((IOTA - 20) & 127)]) + ((0.0667629 * fVec14[((IOTA - 19) & 127)]) + ((0.0107382 * fVec14[((IOTA - 18) & 127)]) + ((0.0291912 * fVec14[((IOTA - 17) & 127)]) + ((0.029706100000000003 * fVec14[((IOTA - 16) & 127)]) + ((0.011985200000000001 * fVec14[((IOTA - 15) & 127)]) + ((0.00355895 * fVec14[((IOTA - 10) & 127)]) + ((0.0019467900000000001 * fVec14[((IOTA - 8) & 127)]) + ((0.00139101 * fVec14[((IOTA - 6) & 127)]) + ((0.00016791500000000001 * fVec14[((IOTA - 4) & 127)]) + ((0.00029155500000000004 * fVec14[((IOTA - 2) & 127)]) + ((0.0046855900000000008 * fVec14[((IOTA - 51) & 127)]) + ((0.0086597399999999991 * fVec14[((IOTA - 50) & 127)]) + ((0.0090186299999999997 * fVec14[((IOTA - 49) & 127)]) + ((0.000305641 * fVec14[((IOTA - 68) & 127)]) + ((0.000773294 * fVec14[((IOTA - 67) & 127)]) + ((0.00226954 * fVec14[((IOTA - 62) & 127)]) + ((0.0017599800000000002 * fVec14[((IOTA - 61) & 127)]) + ((0.00194699 * fVec14[((IOTA - 48) & 127)]) + ((0.00071835900000000001 * fVec14[((IOTA - 58) & 127)]) + ((0.0012819700000000001 * fVec14[((IOTA - 57) & 127)]) + ((0.000143156 * fVec14[((IOTA - 55) & 127)]) + ((0.00051545500000000006 * fVec14[((IOTA - 54) & 127)]) + ((0.00011347700000000001 * fVec14[((IOTA - 53) & 127)]) + ((0.00065408100000000004 * fVec14[((IOTA - 52) & 127)]) + ((1.3822700000000001e-06 * fVec15[((IOTA - 126) & 127)]) + ((4.3207799999999997e-06 * fVec15[((IOTA - 125) & 127)]) + ((7.0508400000000002e-07 * fVec15[((IOTA - 123) & 127)]) + ((8.1874899999999997e-07 * fVec15[((IOTA - 122) & 127)]) + ((4.9958900000000007e-05 * fVec15[((IOTA - 121) & 127)]) + ((0.00031685400000000004 * fVec14[((IOTA - 46) & 127)]) + ((4.8874300000000007e-05 * fVec15[((IOTA - 120) & 127)]) + ((3.0540600000000004e-05 * fVec15[((IOTA - 119) & 127)]) + ((8.9455700000000012e-05 * fVec15[((IOTA - 116) & 127)]) + ((7.5434700000000005e-05 * fVec15[((IOTA - 115) & 127)]) + ((0.00014591800000000001 * fVec15[((IOTA - 114) & 127)]) + ((0.00032979500000000002 * fVec15[((IOTA - 109) & 127)]) + ((0.00027301799999999998 * fVec15[((IOTA - 108) & 127)]) + ((2.9295999999999999e-06 * fVec15[((IOTA - 106) & 127)]) + ((0.00041821300000000002 * fVec15[((IOTA - 105) & 127)]) + ((0.00016436200000000001 * fVec15[((IOTA - 104) & 127)]) + ((1.0304700000000001e-05 * fVec15[((IOTA - 103) & 127)]) + ((9.9420300000000014e-05 * fVec15[((IOTA - 102) & 127)]) + ((0.000143957 * fVec15[((IOTA - 101) & 127)]) + ((0.00068593000000000007 * fVec15[((IOTA - 97) & 127)]) + ((0.0022403200000000001 * fVec15[((IOTA - 96) & 127)]) + ((0.00054845200000000005 * fVec15[((IOTA - 95) & 127)]) + ((0.0013290999999999999 * fVec15[((IOTA - 90) & 127)]) + ((0.0010531200000000001 * fVec15[((IOTA - 86) & 127)]) + ((0.00043581100000000003 * fVec15[((IOTA - 85) & 127)]) + ((0.00043643700000000002 * fVec15[((IOTA - 84) & 127)]) + ((0.00088380000000000002 * fVec15[((IOTA - 83) & 127)]) + ((0.00047224300000000001 * fVec15[((IOTA - 79) & 127)]) + ((0.00094611000000000001 * fVec15[((IOTA - 78) & 127)]) + ((0.0029536099999999997 * fVec15[((IOTA - 75) & 127)]) + ((0.0014493400000000001 * fVec15[((IOTA - 74) & 127)]) + ((0.0052267299999999997 * fVec15[((IOTA - 56) & 127)]) + ((0.0049627400000000002 * fVec15[((IOTA - 55) & 127)]) + ((0.00034213000000000001 * fVec15[((IOTA - 54) & 127)]) + ((0.00171871 * fVec15[((IOTA - 52) & 127)]) + ((0.00204601 * fVec15[((IOTA - 51) & 127)]) + ((0.00172897 * fVec15[((IOTA - 44) & 127)]) + ((0.0059491199999999996 * fVec15[((IOTA - 43) & 127)]) + ((0.0069924600000000007 * fVec15[((IOTA - 42) & 127)]) + ((0.0046671199999999994 * fVec15[((IOTA - 38) & 127)]) + ((0.0074278399999999998 * fVec15[((IOTA - 37) & 127)]) + ((0.0038431400000000001 * fVec15[((IOTA - 33) & 127)]) + ((0.001851 * fVec15[((IOTA - 32) & 127)]) + ((0.00023100900000000004 * fVec15[((IOTA - 31) & 127)]) + ((0.0018550299999999999 * fVec15[((IOTA - 30) & 127)]) + ((0.0068345300000000001 * fVec15[((IOTA - 29) & 127)]) + ((0.0065994599999999997 * fVec15[((IOTA - 28) & 127)]) + ((0.0086483799999999989 * fVec15[((IOTA - 26) & 127)]) + ((0.034778900000000001 * fVec15[((IOTA - 25) & 127)]) + ((0.0033660500000000002 * fVec15[((IOTA - 21) & 127)]) + ((0.0166362 * fVec15[((IOTA - 19) & 127)]) + ((0.013249500000000001 * fVec15[((IOTA - 18) & 127)]) + ((0.0149275 * fVec15[((IOTA - 15) & 127)]) + ((0.00153611 * fVec15[((IOTA - 12) & 127)]) + ((0.00022380100000000001 * fVec15[((IOTA - 11) & 127)]) + ((0.0002062 * fVec15[((IOTA - 10) & 127)]) + ((0.00029508100000000004 * fVec15[((IOTA - 9) & 127)]) + ((9.3157600000000004e-05 * fVec15[((IOTA - 7) & 127)]) + ((0.00083150800000000001 * fVec15[((IOTA - 6) & 127)]) + ((0.000139085 * fVec15[((IOTA - 3) & 127)]) + ((0.000100796 * fVec15[((IOTA - 2) & 127)]) + ((5.4869299999999995e-06 * fTemp15) + ((0.00046532900000000006 * fVec15[((IOTA - 61) & 127)]) + ((0.00033464100000000005 * fVec15[((IOTA - 71) & 127)]) + ((0.000284002 * fVec15[((IOTA - 70) & 127)]) + ((0.00034605900000000002 * fVec15[((IOTA - 68) & 127)]) + ((0.00166238 * fVec15[((IOTA - 67) & 127)]) + ((0.00061167100000000005 * fVec15[((IOTA - 66) & 127)]) + ((0.0014756400000000001 * fVec15[((IOTA - 65) & 127)]) + ((0.0014824 * fVec15[((IOTA - 64) & 127)]) + ((0.000313016 * fVec15[((IOTA - 63) & 127)]) + ((0.0014774499999999999 * fVec15[((IOTA - 57) & 127)]) + ((1.2067399999999999e-06 * fVec16[((IOTA - 126) & 127)]) + ((1.4484800000000001e-05 * fVec16[((IOTA - 123) & 127)]) + ((2.1146600000000005e-05 * fVec16[((IOTA - 122) & 127)]) + ((3.7560900000000002e-05 * fVec16[((IOTA - 121) & 127)]) + ((5.5921400000000003e-05 * fVec16[((IOTA - 120) & 127)]) + ((2.8070300000000005e-05 * fVec16[((IOTA - 119) & 127)]) + ((3.5723000000000003e-05 * fVec16[((IOTA - 118) & 127)]) + ((6.8163800000000006e-05 * fVec16[((IOTA - 117) & 127)]) + ((2.3925e-06 * fVec16[((IOTA - 116) & 127)]) + ((0.00014829900000000001 * fVec16[((IOTA - 108) & 127)]) + ((0.00037316500000000001 * fVec16[((IOTA - 105) & 127)]) + ((0.00039246300000000001 * fVec16[((IOTA - 104) & 127)]) + ((0.00069076200000000004 * fVec16[((IOTA - 98) & 127)]) + ((0.00059752000000000004 * fVec16[((IOTA - 97) & 127)]) + ((3.8900100000000004e-05 * fVec16[((IOTA - 96) & 127)]) + ((0.00104006 * fVec16[((IOTA - 95) & 127)]) + ((0.0024621700000000001 * fVec16[((IOTA - 94) & 127)]) + ((0.0011040900000000001 * fVec16[((IOTA - 93) & 127)]) + ((0.00025218300000000001 * fVec16[((IOTA - 92) & 127)]) + ((0.000582052 * fVec16[((IOTA - 87) & 127)]) + ((0.00181963 * fVec16[((IOTA - 86) & 127)]) + ((0.00027008400000000003 * fVec16[((IOTA - 83) & 127)]) + ((3.9284900000000001e-05 * fVec16[((IOTA - 82) & 127)]) + ((0.0023190699999999999 * fVec16[((IOTA - 78) & 127)]) + ((0.0031104100000000001 * fVec16[((IOTA - 77) & 127)]) + ((0.0018716399999999999 * fVec16[((IOTA - 76) & 127)]) + ((0.00173413 * fVec16[((IOTA - 75) & 127)]) + ((0.00046513499999999998 * fVec16[((IOTA - 74) & 127)]) + ((0.00070995800000000001 * fVec16[((IOTA - 73) & 127)]) + ((0.00136597 * fVec16[((IOTA - 72) & 127)]) + ((0.0005198920000000001 * fVec16[((IOTA - 66) & 127)]) + ((0.00252236 * fVec16[((IOTA - 65) & 127)]) + ((0.00148653 * fVec16[((IOTA - 64) & 127)]) + ((0.00049729599999999994 * fVec16[((IOTA - 61) & 127)]) + ((0.0017160000000000001 * fVec16[((IOTA - 60) & 127)]) + ((0.000571158 * fVec16[((IOTA - 59) & 127)]) + ((0.0027287100000000001 * fVec16[((IOTA - 40) & 127)]) + ((0.0016985100000000001 * fVec16[((IOTA - 35) & 127)]) + ((0.057691300000000001 * fVec16[((IOTA - 23) & 127)]) + ((0.016169199999999998 * fVec16[((IOTA - 22) & 127)]) + ((0.044694299999999999 * fVec16[((IOTA - 20) & 127)]) + ((0.073524500000000007 * fVec16[((IOTA - 19) & 127)]) + ((0.046224100000000004 * fVec16[((IOTA - 18) & 127)]) + ((0.039818899999999997 * fVec16[((IOTA - 16) & 127)]) + ((0.030653800000000002 * fVec16[((IOTA - 15) & 127)]) + ((0.0028312599999999999 * fVec16[((IOTA - 10) & 127)]) + ((0.00023471600000000002 * fVec16[((IOTA - 8) & 127)]) + ((0.0016646499999999999 * fVec16[((IOTA - 6) & 127)]) + ((0.00018944099999999999 * fVec16[((IOTA - 4) & 127)]) + ((0.00041035500000000005 * fVec16[((IOTA - 2) & 127)]) + ((0.0040522299999999995 * fVec16[((IOTA - 48) & 127)]) + ((0.0064639199999999997 * fVec16[((IOTA - 47) & 127)]) + ((0.0059821600000000003 * fVec16[((IOTA - 46) & 127)]) + ((0.0034409700000000002 * fVec16[((IOTA - 45) & 127)]) + ((0.0067079800000000005 * fVec16[((IOTA - 44) & 127)]) + ((0.0101911 * fVec16[((IOTA - 42) & 127)]) + ((0.0031196700000000002 * fVec16[((IOTA - 54) & 127)]) + ((0.0014963299999999999 * fVec16[((IOTA - 53) & 127)]) + ((0.0021004299999999999 * fVec16[((IOTA - 52) & 127)]) + ((0.0077831999999999997 * fVec16[((IOTA - 51) & 127)]) + ((0.0044508500000000001 * fVec16[((IOTA - 50) & 127)]) + ((0.0021174599999999998 * fVec16[((IOTA - 49) & 127)]) + ((0.0084519999999999994 * fVec16[((IOTA - 41) & 127)]) + ((0.0079398100000000003 * fVec16[((IOTA - 43) & 127)]) + ((1.06705e-06 * fVec17[((IOTA - 126) & 127)]) + ((3.8319600000000005e-05 * fVec17[((IOTA - 122) & 127)]) + ((5.611290000000001e-05 * fVec17[((IOTA - 121) & 127)]) + ((4.3469500000000001e-05 * fVec17[((IOTA - 120) & 127)]) + ((4.8748200000000002e-05 * fVec17[((IOTA - 117) & 127)]) + ((0.000144938 * fVec17[((IOTA - 110) & 127)]) + ((0.00078204200000000005 * fVec17[((IOTA - 79) & 127)]) + ((0.00053547700000000002 * fVec17[((IOTA - 77) & 127)]) + ((0.00089492 * fVec17[((IOTA - 76) & 127)]) + ((1.0278999999999999e-06 * fVec17[((IOTA - 103) & 127)]) + ((7.2644700000000013e-05 * fVec17[((IOTA - 104) & 127)]) + ((0.0011606799999999999 * fVec17[((IOTA - 96) & 127)]) + ((0.0031629900000000001 * fVec17[((IOTA - 95) & 127)]) + ((0.00078389600000000007 * fVec17[((IOTA - 94) & 127)]) + ((3.61728e-05 * fVec17[((IOTA - 91) & 127)]) + ((0.0022532999999999997 * fVec17[((IOTA - 86) & 127)]) + ((0.00098582100000000001 * fVec17[((IOTA - 75) & 127)]) + ((0.0010638000000000002 * fVec17[((IOTA - 74) & 127)]) + ((0.0020713300000000001 * fVec17[((IOTA - 72) & 127)]) + ((0.00287405 * fVec17[((IOTA - 71) & 127)]) + ((0.0018535400000000001 * fVec17[((IOTA - 70) & 127)]) + ((0.0024114399999999999 * fVec17[((IOTA - 69) & 127)]) + ((0.0054627 * fVec17[((IOTA - 68) & 127)]) + ((0.0053478500000000003 * fVec17[((IOTA - 67) & 127)]) + ((0.0036506200000000003 * fVec17[((IOTA - 66) & 127)]) + ((0.0039108500000000004 * fVec17[((IOTA - 65) & 127)]) + ((0.00124406 * fVec17[((IOTA - 64) & 127)]) + ((0.00066612700000000008 * fVec17[((IOTA - 53) & 127)]) + ((0.00021471700000000001 * fVec17[((IOTA - 42) & 127)]) + ((0.0083305600000000007 * fVec17[((IOTA - 38) & 127)]) + ((0.0016041499999999999 * fVec17[((IOTA - 34) & 127)]) + ((0.018119700000000002 * fVec17[((IOTA - 33) & 127)]) + ((0.036438700000000004 * fVec17[((IOTA - 30) & 127)]) + ((0.027385400000000001 * fVec17[((IOTA - 29) & 127)]) + ((0.0048108300000000003 * fVec17[((IOTA - 28) & 127)]) + ((0.040978300000000002 * fVec17[((IOTA - 27) & 127)]) + ((0.049985600000000005 * fVec17[((IOTA - 26) & 127)]) + ((0.038770699999999998 * fVec17[((IOTA - 24) & 127)]) + ((0.10758200000000001 * fVec17[((IOTA - 23) & 127)]) + ((0.021392099999999997 * fVec17[((IOTA - 22) & 127)]) + ((0.041771900000000008 * fVec17[((IOTA - 20) & 127)]) + ((0.055177400000000001 * fVec17[((IOTA - 19) & 127)]) + ((0.0108086 * fVec17[((IOTA - 18) & 127)]) + ((0.0026607500000000004 * fVec17[((IOTA - 10) & 127)]) + ((0.00066903899999999996 * fVec17[((IOTA - 8) & 127)]) + ((0.0013556799999999999 * fVec17[((IOTA - 6) & 127)]) + ((0.00012807300000000001 * fVec17[((IOTA - 4) & 127)]) + ((0.000378556 * fVec17[((IOTA - 2) & 127)]) + ((4.9495899999999995e-07 * fVec18[((IOTA - 126) & 127)]) + ((2.773e-06 * fVec18[((IOTA - 125) & 127)]) + ((5.3135e-06 * fVec18[((IOTA - 121) & 127)]) + ((2.8457499999999998e-06 * fVec18[((IOTA - 117) & 127)]) + ((2.4558300000000005e-05 * fVec18[((IOTA - 116) & 127)]) + ((5.2591200000000006e-05 * fVec18[((IOTA - 112) & 127)]) + ((0.00024796200000000001 * fVec18[((IOTA - 111) & 127)]) + ((0.00014221200000000001 * fVec18[((IOTA - 110) & 127)]) + ((0.00010309 * fVec18[((IOTA - 108) & 127)]) + ((0.00018337600000000001 * fVec18[((IOTA - 107) & 127)]) + ((0.00035608600000000003 * fVec18[((IOTA - 106) & 127)]) + ((0.00034403800000000002 * fVec18[((IOTA - 105) & 127)]) + ((0.00025383300000000002 * fVec18[((IOTA - 104) & 127)]) + ((0.00028535700000000003 * fVec18[((IOTA - 103) & 127)]) + ((0.00070562000000000001 * fVec18[((IOTA - 102) & 127)]) + ((0.0005151 * fVec18[((IOTA - 101) & 127)]) + ((0.00032077100000000002 * fVec18[((IOTA - 100) & 127)]) + ((9.0654800000000018e-05 * fVec18[((IOTA - 99) & 127)]) + ((0.00071143700000000009 * fVec18[((IOTA - 98) & 127)]) + ((0.0014366699999999999 * fVec18[((IOTA - 97) & 127)]) + ((0.00124614 * fVec18[((IOTA - 94) & 127)]) + ((0.0022713 * fVec18[((IOTA - 93) & 127)]) + ((0.00127749 * fVec18[((IOTA - 86) & 127)]) + ((6.2936500000000003e-05 * fVec18[((IOTA - 77) & 127)]) + ((2.0687900000000002e-05 * fVec18[((IOTA - 76) & 127)]) + ((0.00074920100000000001 * fVec18[((IOTA - 72) & 127)]) + ((0.00108661 * fVec18[((IOTA - 71) & 127)]) + ((0.00066226100000000003 * fVec18[((IOTA - 70) & 127)]) + ((0.00221192 * fVec18[((IOTA - 68) & 127)]) + ((0.0036181899999999999 * fVec18[((IOTA - 67) & 127)]) + ((3.8066800000000006e-05 * fVec18[((IOTA - 66) & 127)]) + ((2.7286800000000004e-05 * fVec18[((IOTA - 64) & 127)]) + ((0.0014662800000000001 * fVec18[((IOTA - 63) & 127)]) + ((0.0025716599999999999 * fVec18[((IOTA - 62) & 127)]) + ((0.00040080500000000001 * fVec18[((IOTA - 61) & 127)]) + ((0.0022166500000000001 * fVec18[((IOTA - 59) & 127)]) + ((0.0027539400000000003 * fVec18[((IOTA - 58) & 127)]) + ((0.000547636 * fVec18[((IOTA - 57) & 127)]) + ((0.0034324300000000002 * fVec18[((IOTA - 56) & 127)]) + ((0.0028814800000000001 * fVec18[((IOTA - 55) & 127)]) + ((0.00020467599999999999 * fVec18[((IOTA - 54) & 127)]) + ((0.0025276200000000004 * fVec18[((IOTA - 51) & 127)]) + ((0.0045955500000000003 * fVec18[((IOTA - 50) & 127)]) + ((0.0021549399999999997 * fVec18[((IOTA - 44) & 127)]) + ((0.0013761300000000001 * fVec18[((IOTA - 41) & 127)]) + ((0.002183 * fVec18[((IOTA - 38) & 127)]) + ((0.0030387000000000001 * fVec18[((IOTA - 36) & 127)]) + ((0.021556799999999997 * fVec18[((IOTA - 35) & 127)]) + ((0.023527200000000002 * fVec18[((IOTA - 32) & 127)]) + ((0.0021948500000000004 * fVec18[((IOTA - 31) & 127)]) + ((0.00051807200000000006 * fVec18[((IOTA - 29) & 127)]) + ((0.024944000000000001 * fVec18[((IOTA - 26) & 127)]) + ((0.0035849099999999997 * fVec18[((IOTA - 25) & 127)]) + ((0.011300600000000001 * fVec18[((IOTA - 19) & 127)]) + ((0.0094331200000000014 * fVec18[((IOTA - 18) & 127)]) + ((0.0071840999999999997 * fVec18[((IOTA - 15) & 127)]) + ((0.00027813700000000002 * fVec18[((IOTA - 12) & 127)]) + ((0.00027818999999999999 * fVec18[((IOTA - 11) & 127)]) + ((0.00033955200000000002 * fVec18[((IOTA - 10) & 127)]) + ((0.00022609 * fVec18[((IOTA - 9) & 127)]) + ((0.00016021500000000001 * fVec18[((IOTA - 7) & 127)]) + ((0.000240886 * fVec18[((IOTA - 6) & 127)]) + ((2.4972599999999999e-05 * fVec18[((IOTA - 3) & 127)]) + ((5.2352700000000004e-05 * fVec18[((IOTA - 2) & 127)]) + ((4.2462999999999995e-06 * fTemp18) + ((0.00070097300000000003 * fVec18[((IOTA - 85) & 127)]) + ((8.9630500000000016e-08 * fVec19[((IOTA - 126) & 127)]) + ((4.86084e-05 * fVec19[((IOTA - 119) & 127)]) + ((3.0215200000000005e-05 * fVec19[((IOTA - 118) & 127)]) + ((0.00010084700000000001 * fVec19[((IOTA - 110) & 127)]) + ((0.00034166200000000001 * fVec19[((IOTA - 109) & 127)]) + ((0.000204718 * fVec19[((IOTA - 108) & 127)]) + ((0.00033797299999999998 * fVec19[((IOTA - 107) & 127)]) + ((0.00045785700000000004 * fVec19[((IOTA - 106) & 127)]) + ((0.00013590400000000001 * fVec19[((IOTA - 105) & 127)]) + ((6.0929900000000008e-05 * fVec19[((IOTA - 104) & 127)]) + ((0.000208667 * fVec19[((IOTA - 102) & 127)]) + ((0.00030785900000000001 * fVec19[((IOTA - 101) & 127)]) + ((0.00026147399999999998 * fVec19[((IOTA - 100) & 127)]) + ((0.00048677700000000003 * fVec19[((IOTA - 99) & 127)]) + ((0.0012107800000000001 * fVec19[((IOTA - 98) & 127)]) + ((0.00076490500000000008 * fVec19[((IOTA - 97) & 127)]) + ((0.00058266999999999998 * fVec19[((IOTA - 94) & 127)]) + ((0.00082486899999999999 * fVec19[((IOTA - 93) & 127)]) + ((0.0011506799999999998 * fVec19[((IOTA - 92) & 127)]) + ((3.5632800000000002e-05 * fVec19[((IOTA - 91) & 127)]) + ((3.64663e-05 * fVec19[((IOTA - 90) & 127)]) + ((0.00056137899999999998 * fVec19[((IOTA - 88) & 127)]) + ((0.00015598000000000001 * fVec19[((IOTA - 87) & 127)]) + ((0.00076870700000000009 * fVec19[((IOTA - 84) & 127)]) + ((0.0014322200000000001 * fVec19[((IOTA - 83) & 127)]) + ((0.00046067700000000005 * fVec19[((IOTA - 82) & 127)]) + ((0.00064690400000000001 * fVec19[((IOTA - 79) & 127)]) + ((0.00271718 * fVec19[((IOTA - 75) & 127)]) + ((6.2586200000000001e-05 * fVec19[((IOTA - 72) & 127)]) + ((0.00117567 * fVec19[((IOTA - 71) & 127)]) + ((0.0012521400000000001 * fVec19[((IOTA - 70) & 127)]) + ((0.00055114699999999999 * fVec19[((IOTA - 66) & 127)]) + ((0.00110439 * fVec19[((IOTA - 65) & 127)]) + ((0.0016155 * fVec19[((IOTA - 64) & 127)]) + ((0.0021511500000000001 * fVec19[((IOTA - 63) & 127)]) + ((0.0019438999999999999 * fVec19[((IOTA - 60) & 127)]) + ((0.0070393900000000004 * fVec19[((IOTA - 39) & 127)]) + ((0.0048936500000000003 * fVec19[((IOTA - 37) & 127)]) + ((0.0095701499999999995 * fVec19[((IOTA - 36) & 127)]) + ((0.015800600000000001 * fVec19[((IOTA - 33) & 127)]) + ((0.011886499999999999 * fVec19[((IOTA - 32) & 127)]) + ((0.0058739299999999994 * fVec19[((IOTA - 30) & 127)]) + ((0.024750999999999999 * fVec19[((IOTA - 29) & 127)]) + ((0.0086730599999999998 * fVec19[((IOTA - 28) & 127)]) + ((0.023463500000000002 * fVec19[((IOTA - 26) & 127)]) + ((0.052758300000000001 * fVec19[((IOTA - 25) & 127)]) + ((0.0124978 * fVec19[((IOTA - 24) & 127)]) + ((0.035996800000000002 * fVec19[((IOTA - 22) & 127)]) + ((0.013752100000000001 * fVec19[((IOTA - 21) & 127)]) + ((0.0018844000000000001 * fVec19[((IOTA - 20) & 127)]) + ((0.0448946 * fVec19[((IOTA - 19) & 127)]) + ((0.00033159299999999998 * fVec19[((IOTA - 18) & 127)]) + ((0.00255288 * fVec19[((IOTA - 10) & 127)]) + ((0.00094661300000000001 * fVec19[((IOTA - 8) & 127)]) + ((0.0010133200000000001 * fVec19[((IOTA - 6) & 127)]) + ((0.00025746299999999998 * fVec19[((IOTA - 2) & 127)]) + ((3.43292e-08 * fVec20[((IOTA - 126) & 127)]) + ((3.3588899999999999e-06 * fVec20[((IOTA - 125) & 127)]) + ((0.00122438 * fVec19[((IOTA - 52) & 127)]) + ((3.9804799999999997e-06 * fVec20[((IOTA - 124) & 127)]) + ((2.0105900000000003e-05 * fVec20[((IOTA - 123) & 127)]) + ((7.7608600000000008e-05 * fVec20[((IOTA - 119) & 127)]) + ((5.0789799999999999e-05 * fVec20[((IOTA - 116) & 127)]) + ((0.00020361699999999999 * fVec20[((IOTA - 115) & 127)]) + ((0.00030080800000000001 * fVec20[((IOTA - 114) & 127)]) + ((3.2623300000000003e-05 * fVec20[((IOTA - 113) & 127)]) + ((0.00026027500000000002 * fVec20[((IOTA - 110) & 127)]) + ((0.00020187200000000002 * fVec20[((IOTA - 109) & 127)]) + ((0.00040571999999999998 * fVec20[((IOTA - 108) & 127)]) + ((0.00053009599999999997 * fVec20[((IOTA - 107) & 127)]) + ((0.00050674400000000005 * fVec20[((IOTA - 106) & 127)]) + ((0.00049718700000000006 * fVec20[((IOTA - 105) & 127)]) + ((0.0011330000000000001 * fVec20[((IOTA - 104) & 127)]) + ((0.0016271899999999999 * fVec20[((IOTA - 103) & 127)]) + ((0.00069229100000000004 * fVec20[((IOTA - 102) & 127)]) + ((0.00046662400000000006 * fVec20[((IOTA - 101) & 127)]) + ((0.00069381500000000008 * fVec20[((IOTA - 100) & 127)]) + ((0.00038071900000000001 * fVec20[((IOTA - 99) & 127)]) + ((0.00084254300000000007 * fVec20[((IOTA - 98) & 127)]) + ((0.00156339 * fVec20[((IOTA - 97) & 127)]) + ((0.0034697200000000004 * fVec20[((IOTA - 96) & 127)]) + ((0.0030116200000000004 * fVec20[((IOTA - 95) & 127)]) + ((0.00075465500000000002 * fVec20[((IOTA - 94) & 127)]) + ((0.00068181600000000002 * fVec20[((IOTA - 93) & 127)]) + ((0.00071934100000000008 * fVec20[((IOTA - 92) & 127)]) + ((0.00040184499999999996 * fVec20[((IOTA - 91) & 127)]) + ((0.00055143000000000011 * fVec20[((IOTA - 90) & 127)]) + ((0.0016723300000000001 * fVec20[((IOTA - 89) & 127)]) + ((0.0017063 * fVec20[((IOTA - 88) & 127)]) + ((0.0013395900000000001 * fVec20[((IOTA - 87) & 127)]) + ((0.0026214800000000003 * fVec20[((IOTA - 86) & 127)]) + ((0.0034494400000000002 * fVec20[((IOTA - 85) & 127)]) + ((0.0025590399999999998 * fVec20[((IOTA - 84) & 127)]) + ((0.0014532900000000001 * fVec20[((IOTA - 83) & 127)]) + ((0.00127111 * fVec20[((IOTA - 78) & 127)]) + ((0.0011545000000000001 * fVec20[((IOTA - 77) & 127)]) + ((0.00061171300000000006 * fVec20[((IOTA - 76) & 127)]) + ((0.00020694100000000001 * fVec20[((IOTA - 75) & 127)]) + ((0.00064708400000000003 * fVec20[((IOTA - 74) & 127)]) + ((0.0010632999999999999 * fVec20[((IOTA - 73) & 127)]) + ((0.000609699 * fVec20[((IOTA - 72) & 127)]) + ((0.00058977500000000006 * fVec20[((IOTA - 71) & 127)]) + ((0.0005591420000000001 * fVec20[((IOTA - 67) & 127)]) + ((8.8419900000000004e-05 * fVec20[((IOTA - 65) & 127)]) + ((0.00150508 * fVec20[((IOTA - 64) & 127)]) + ((0.0014054500000000001 * fVec20[((IOTA - 60) & 127)]) + ((0.00215198 * fVec20[((IOTA - 54) & 127)]) + ((0.000219724 * fVec20[((IOTA - 52) & 127)]) + ((0.0017431900000000001 * fVec20[((IOTA - 51) & 127)]) + ((0.000292148 * fVec20[((IOTA - 49) & 127)]) + ((0.00356967 * fVec20[((IOTA - 48) & 127)]) + ((0.00055458199999999997 * fVec20[((IOTA - 47) & 127)]) + ((0.0018462400000000001 * fVec20[((IOTA - 45) & 127)]) + ((0.0038023500000000003 * fVec20[((IOTA - 42) & 127)]) + ((0.0029068700000000002 * fVec20[((IOTA - 40) & 127)]) + ((0.0047945900000000005 * fVec20[((IOTA - 39) & 127)]) + ((0.0038672100000000003 * fVec20[((IOTA - 38) & 127)]) + ((4.1971900000000004e-05 * fVec20[((IOTA - 36) & 127)]) + ((0.0060181399999999999 * fVec20[((IOTA - 35) & 127)]) + ((4.6184399999999998e-05 * fVec20[((IOTA - 10) & 127)]) + ((0.0025209700000000004 * fVec20[((IOTA - 8) & 127)]) + ((0.00036855699999999999 * fVec20[((IOTA - 6) & 127)]) + ((0.00070276500000000005 * fVec20[((IOTA - 5) & 127)]) + ((0.00090358699999999997 * fVec20[((IOTA - 4) & 127)]) + ((0.000231406 * fVec20[((IOTA - 2) & 127)]) + ((4.4178200000000003e-05 * fVec20[((IOTA - 1) & 127)]) + ((1.57811e-05 * fTemp20) + ((0.0013328999999999999 * fVec20[((IOTA - 24) & 127)]) + ((0.0016006100000000001 * fVec20[((IOTA - 23) & 127)]) + ((0.0099153599999999998 * fVec20[((IOTA - 22) & 127)]) + ((0.013603000000000001 * fVec20[((IOTA - 21) & 127)]) + ((0.016723499999999999 * fVec20[((IOTA - 20) & 127)]) + ((0.0049045500000000006 * fVec20[((IOTA - 33) & 127)]) + ((0.0091428700000000009 * fVec20[((IOTA - 32) & 127)]) + ((0.0099856200000000006 * fVec20[((IOTA - 29) & 127)]) + ((0.010922899999999999 * fVec20[((IOTA - 28) & 127)]) + ((0.045127499999999994 * fVec20[((IOTA - 17) & 127)]) + ((2.5137800000000002e-07 * fVec21[((IOTA - 126) & 127)]) + ((6.1820100000000001e-06 * fVec21[((IOTA - 125) & 127)]) + ((3.82797e-06 * fVec21[((IOTA - 124) & 127)]) + ((2.1185900000000001e-06 * fVec21[((IOTA - 123) & 127)]) + ((2.7248300000000001e-05 * fVec21[((IOTA - 121) & 127)]) + ((3.8722400000000007e-05 * fVec21[((IOTA - 120) & 127)]) + ((8.2140799999999984e-06 * fVec21[((IOTA - 119) & 127)]) + ((0.0059659600000000002 * fVec20[((IOTA - 14) & 127)]) + ((3.8470500000000004e-05 * fVec21[((IOTA - 117) & 127)]) + ((9.096330000000001e-05 * fVec21[((IOTA - 116) & 127)]) + ((8.7317000000000004e-05 * fVec21[((IOTA - 114) & 127)]) + ((0.000227166 * fVec21[((IOTA - 113) & 127)]) + ((8.3273200000000014e-05 * fVec21[((IOTA - 112) & 127)]) + ((8.2866000000000002e-05 * fVec21[((IOTA - 111) & 127)]) + ((0.00014514899999999999 * fVec21[((IOTA - 110) & 127)]) + ((0.0027371000000000001 * fVec20[((IOTA - 13) & 127)]) + ((0.00010655300000000001 * fVec21[((IOTA - 108) & 127)]) + ((0.00020428199999999999 * fVec21[((IOTA - 107) & 127)]) + ((5.2586900000000003e-05 * fVec21[((IOTA - 106) & 127)]) + ((0.00036701000000000003 * fVec21[((IOTA - 105) & 127)]) + ((0.00050770799999999994 * fVec21[((IOTA - 104) & 127)]) + ((0.00025426099999999998 * fVec21[((IOTA - 101) & 127)]) + ((0.00018379600000000001 * fVec21[((IOTA - 98) & 127)]) + ((0.00035138200000000002 * fVec21[((IOTA - 97) & 127)]) + ((7.6149300000000013e-05 * fVec21[((IOTA - 95) & 127)]) + ((0.0015575400000000001 * fVec21[((IOTA - 94) & 127)]) + ((0.00063264199999999999 * fVec21[((IOTA - 93) & 127)]) + ((0.00014839199999999998 * fVec21[((IOTA - 92) & 127)]) + ((0.00086251900000000007 * fVec21[((IOTA - 87) & 127)]) + ((0.0019024199999999999 * fVec21[((IOTA - 86) & 127)]) + ((0.00129144 * fVec21[((IOTA - 83) & 127)]) + ((0.00047882000000000003 * fVec21[((IOTA - 78) & 127)]) + ((0.0013118799999999999 * fVec21[((IOTA - 75) & 127)]) + ((0.0011614100000000001 * fVec21[((IOTA - 74) & 127)]) + ((0.0014712700000000002 * fVec21[((IOTA - 68) & 127)]) + ((0.0026238199999999998 * fVec21[((IOTA - 67) & 127)]) + ((8.7116700000000006e-05 * fVec21[((IOTA - 66) & 127)]) + ((0.0020513699999999998 * fVec21[((IOTA - 62) & 127)]) + ((0.00160801 * fVec21[((IOTA - 61) & 127)]) + ((0.0016339300000000002 * fVec21[((IOTA - 56) & 127)]) + ((0.0011073599999999999 * fVec21[((IOTA - 52) & 127)]) + ((0.0016051100000000001 * fVec21[((IOTA - 50) & 127)]) + ((0.0079808199999999996 * fVec21[((IOTA - 49) & 127)]) + ((0.00196889 * fVec21[((IOTA - 48) & 127)]) + ((0.0044432300000000003 * fVec21[((IOTA - 45) & 127)]) + ((0.000208879 * fVec21[((IOTA - 44) & 127)]) + ((0.0013145500000000001 * fVec21[((IOTA - 42) & 127)]) + ((9.226730000000001e-05 * fVec21[((IOTA - 40) & 127)]) + ((0.0053560100000000005 * fVec21[((IOTA - 39) & 127)]) + ((0.0053043999999999999 * fVec21[((IOTA - 38) & 127)]) + ((0.00291413 * fVec21[((IOTA - 37) & 127)]) + ((0.010230900000000001 * fVec21[((IOTA - 36) & 127)]) + ((0.0073240200000000005 * fVec21[((IOTA - 35) & 127)]) + ((0.0073238899999999996 * fVec21[((IOTA - 31) & 127)]) + ((0.0105234 * fVec21[((IOTA - 30) & 127)]) + ((0.0034125200000000005 * fVec21[((IOTA - 26) & 127)]) + ((0.0069197900000000003 * fVec21[((IOTA - 25) & 127)]) + ((0.031673199999999999 * fVec21[((IOTA - 18) & 127)]) + ((0.0274497 * fVec21[((IOTA - 17) & 127)]) + ((0.0030908899999999998 * fVec21[((IOTA - 16) & 127)]) + ((0.0103427 * fVec21[((IOTA - 15) & 127)]) + ((0.0120915 * fVec21[((IOTA - 13) & 127)]) + ((0.0038904299999999998 * fVec21[((IOTA - 10) & 127)]) + ((0.0024724199999999999 * fVec21[((IOTA - 8) & 127)]) + ((0.0012886100000000001 * fVec21[((IOTA - 6) & 127)]) + ((0.00084856599999999993 * fVec21[((IOTA - 4) & 127)]) + ((0.00020222799999999999 * fVec21[((IOTA - 2) & 127)]) + ((2.0016700000000001e-05 * fVec21[((IOTA - 1) & 127)]) + ((1.4622100000000002e-05 * fTemp21) + ((0.00147938 * fVec21[((IOTA - 59) & 127)]) + ((0.00013115699999999999 * fVec21[((IOTA - 58) & 127)]) + ((2.4533100000000001e-06 * fVec22[((IOTA - 126) & 127)]) + ((1.70273e-06 * fVec22[((IOTA - 125) & 127)]) + ((8.0341699999999997e-06 * fVec22[((IOTA - 123) & 127)]) + ((3.8827600000000008e-05 * fVec22[((IOTA - 122) & 127)]) + ((0.000101833 * fVec22[((IOTA - 121) & 127)]) + ((0.000105639 * fVec22[((IOTA - 120) & 127)]) + ((3.9296600000000006e-05 * fVec22[((IOTA - 119) & 127)]) + ((3.85491e-05 * fVec22[((IOTA - 117) & 127)]) + ((0.00018456300000000003 * fVec22[((IOTA - 116) & 127)]) + ((0.000184012 * fVec22[((IOTA - 115) & 127)]) + ((0.0019589099999999999 * fVec22[((IOTA - 96) & 127)]) + ((0.0031713800000000001 * fVec22[((IOTA - 95) & 127)]) + ((0.00068253400000000005 * fVec22[((IOTA - 94) & 127)]) + ((0.00050519600000000007 * fVec21[((IOTA - 57) & 127)]) + ((0.00056285600000000003 * fVec22[((IOTA - 91) & 127)]) + ((0.0014036900000000002 * fVec22[((IOTA - 90) & 127)]) + ((0.00337025 * fVec22[((IOTA - 87) & 127)]) + ((0.0052786200000000004 * fVec22[((IOTA - 86) & 127)]) + ((0.0015441700000000001 * fVec22[((IOTA - 85) & 127)]) + ((0.00036768800000000002 * fVec22[((IOTA - 84) & 127)]) + ((0.00069545300000000007 * fVec22[((IOTA - 83) & 127)]) + ((0.0010311999999999999 * fVec22[((IOTA - 65) & 127)]) + ((0.00113331 * fVec22[((IOTA - 64) & 127)]) + ((0.0014698599999999999 * fVec22[((IOTA - 63) & 127)]) + ((0.00070883900000000006 * fVec22[((IOTA - 62) & 127)]) + ((0.0020663499999999998 * fVec22[((IOTA - 57) & 127)]) + ((0.00288332 * fVec22[((IOTA - 56) & 127)]) + ((0.0008817050000000001 * fVec22[((IOTA - 55) & 127)]) + ((0.0035919900000000002 * fVec22[((IOTA - 54) & 127)]) + ((0.0016634199999999999 * fVec22[((IOTA - 53) & 127)]) + ((0.0012247 * fVec22[((IOTA - 52) & 127)]) + ((0.00117636 * fVec22[((IOTA - 51) & 127)]) + ((0.0053477200000000003 * fVec22[((IOTA - 49) & 127)]) + ((0.00571347 * fVec22[((IOTA - 48) & 127)]) + ((0.0068109299999999998 * fVec22[((IOTA - 45) & 127)]) + ((0.00503769 * fVec22[((IOTA - 44) & 127)]) + ((0.0033690899999999999 * fVec22[((IOTA - 43) & 127)]) + ((0.0081425600000000001 * fVec22[((IOTA - 42) & 127)]) + ((0.0048383499999999999 * fVec22[((IOTA - 39) & 127)]) + ((1.73416e-05 * fVec22[((IOTA - 38) & 127)]) + ((0.0011593500000000002 * fVec22[((IOTA - 37) & 127)]) + ((0.00341282 * fVec22[((IOTA - 36) & 127)]) + ((0.0053672899999999994 * fVec22[((IOTA - 34) & 127)]) + ((0.0060068300000000003 * fVec22[((IOTA - 33) & 127)]) + ((0.036282299999999996 * fVec22[((IOTA - 30) & 127)]) + ((0.0096774400000000007 * fVec22[((IOTA - 29) & 127)]) + ((0.03066 * fVec22[((IOTA - 26) & 127)]) + ((0.0020100199999999999 * fVec22[((IOTA - 10) & 127)]) + ((0.00148817 * fVec22[((IOTA - 8) & 127)]) + ((0.00053443399999999997 * fVec22[((IOTA - 6) & 127)]) + ((0.00069470999999999997 * fVec22[((IOTA - 4) & 127)]) + ((0.00013874000000000002 * fVec22[((IOTA - 2) & 127)]) + ((2.49699e-05 * fVec22[((IOTA - 1) & 127)]) + ((9.9362800000000004e-06 * fTemp22) + ((0.0019489700000000002 * fVec22[((IOTA - 23) & 127)]) + ((9.4065400000000002e-05 * fVec22[((IOTA - 22) & 127)]) + ((0.000702438 * fVec22[((IOTA - 20) & 127)]) + ((0.0174746 * fVec22[((IOTA - 18) & 127)]) + ((0.021190899999999999 * fVec22[((IOTA - 17) & 127)]) + ((0.0025345699999999999 * fVec22[((IOTA - 16) & 127)]) + ((0.0025992000000000003 * fVec22[((IOTA - 15) & 127)]) + ((2.4082099999999999e-06 * fVec23[((IOTA - 126) & 127)]) + ((8.464169999999999e-06 * fVec23[((IOTA - 125) & 127)]) + ((8.8836499999999992e-06 * fVec23[((IOTA - 124) & 127)]) + ((8.7967399999999994e-06 * fVec23[((IOTA - 123) & 127)]) + ((2.4375700000000001e-05 * fVec23[((IOTA - 122) & 127)]) + ((8.0066800000000004e-05 * fVec23[((IOTA - 121) & 127)]) + ((9.9426100000000014e-05 * fVec23[((IOTA - 120) & 127)]) + ((9.0816700000000014e-05 * fVec23[((IOTA - 119) & 127)]) + ((5.80835e-05 * fVec23[((IOTA - 118) & 127)]) + ((7.7452699999999998e-05 * fVec23[((IOTA - 117) & 127)]) + ((9.5024799999999997e-07 * fVec23[((IOTA - 116) & 127)]) + ((5.1149400000000002e-05 * fVec23[((IOTA - 98) & 127)]) + ((0.00032476299999999999 * fVec23[((IOTA - 97) & 127)]) + ((0.0012872900000000002 * fVec23[((IOTA - 94) & 127)]) + ((0.0022912900000000001 * fVec23[((IOTA - 93) & 127)]) + ((0.00119739 * fVec23[((IOTA - 92) & 127)]) + ((0.0019518999999999999 * fVec23[((IOTA - 90) & 127)]) + ((0.0043689900000000005 * fVec23[((IOTA - 89) & 127)]) + ((0.00375801 * fVec23[((IOTA - 88) & 127)]) + ((0.0016994499999999999 * fVec23[((IOTA - 87) & 127)]) + ((0.0032713800000000004 * fVec23[((IOTA - 86) & 127)]) + ((0.0036832600000000003 * fVec23[((IOTA - 85) & 127)]) + ((0.00089328000000000009 * fVec23[((IOTA - 84) & 127)]) + ((0.00072158200000000002 * fVec23[((IOTA - 83) & 127)]) + ((0.00038337700000000001 * fVec23[((IOTA - 80) & 127)]) + ((0.0016079900000000001 * fVec23[((IOTA - 79) & 127)]) + ((0.0020680200000000003 * fVec23[((IOTA - 78) & 127)]) + ((0.00028545500000000005 * fVec23[((IOTA - 77) & 127)]) + ((0.00025900400000000002 * fVec23[((IOTA - 75) & 127)]) + ((0.0061892400000000004 * fVec22[((IOTA - 13) & 127)]) + ((3.3718100000000005e-05 * fVec23[((IOTA - 63) & 127)]) + ((0.0016691100000000001 * fVec23[((IOTA - 62) & 127)]) + ((0.00089519800000000015 * fVec23[((IOTA - 60) & 127)]) + ((0.00079125400000000002 * fVec23[((IOTA - 59) & 127)]) + ((0.00099548200000000001 * fVec23[((IOTA - 58) & 127)]) + ((0.0024358800000000001 * fVec23[((IOTA - 54) & 127)]) + ((0.0056765999999999995 * fVec23[((IOTA - 53) & 127)]) + ((0.0027909200000000001 * fVec23[((IOTA - 52) & 127)]) + ((0.00077908600000000012 * fVec23[((IOTA - 51) & 127)]) + ((0.0016214599999999999 * fVec23[((IOTA - 50) & 127)]) + ((0.0042173100000000002 * fVec23[((IOTA - 48) & 127)]) + ((0.0091871399999999999 * fVec23[((IOTA - 47) & 127)]) + ((0.0013077200000000001 * fVec23[((IOTA - 46) & 127)]) + ((0.0021427500000000001 * fVec23[((IOTA - 45) & 127)]) + ((0.0022329500000000005 * fVec23[((IOTA - 44) & 127)]) + ((0.0028589500000000003 * fVec23[((IOTA - 42) & 127)]) + ((0.0070971000000000003 * fVec23[((IOTA - 41) & 127)]) + ((0.0053105900000000004 * fVec23[((IOTA - 40) & 127)]) + ((0.00053429399999999994 * fVec23[((IOTA - 36) & 127)]) + ((0.0164669 * fVec23[((IOTA - 35) & 127)]) + ((0.0037660800000000002 * fVec23[((IOTA - 33) & 127)]) + ((0.0086483100000000011 * fVec23[((IOTA - 32) & 127)]) + ((0.021576300000000003 * fVec23[((IOTA - 29) & 127)]) + ((0.021685099999999999 * fVec23[((IOTA - 28) & 127)]) + ((0.0057969700000000002 * fVec23[((IOTA - 26) & 127)]) + ((0.0057622799999999998 * fVec23[((IOTA - 24) & 127)]) + ((0.0197594 * fVec23[((IOTA - 21) & 127)]) + ((0.0121098 * fVec23[((IOTA - 20) & 127)]) + ((0.032535399999999999 * fVec23[((IOTA - 17) & 127)]) + ((0.00050339700000000005 * fVec23[((IOTA - 14) & 127)]) + ((0.00086802899999999998 * fVec23[((IOTA - 13) & 127)]) + ((0.0016583500000000001 * fVec23[((IOTA - 8) & 127)]) + ((0.00031507000000000003 * fVec23[((IOTA - 5) & 127)]) + ((0.00049461800000000005 * fVec23[((IOTA - 4) & 127)]) + ((0.00015840400000000001 * fVec23[((IOTA - 2) & 127)]) + ((2.8519800000000004e-05 * fVec23[((IOTA - 1) & 127)]) + ((4.4578800000000004e-06 * fTemp23) + ((1.1796500000000001e-05 * fVec9[((IOTA - 114) & 127)]) + ((0.0030150300000000001 * fVec23[((IOTA - 39) & 127)]) + ((0.00041981599999999999 * fVec9[((IOTA - 107) & 127)]) + ((5.3605900000000008e-05 * fVec9[((IOTA - 105) & 127)]) + ((0.00046969700000000004 * fVec9[((IOTA - 104) & 127)]) + ((0.00047704000000000008 * fVec9[((IOTA - 103) & 127)]) + ((0.00043236800000000009 * fVec9[((IOTA - 102) & 127)]) + ((0.00070973900000000003 * fVec9[((IOTA - 101) & 127)]) + ((0.000705385 * fVec9[((IOTA - 100) & 127)]) + ((0.00045614100000000008 * fVec9[((IOTA - 99) & 127)]) + ((0.00092227100000000001 * fVec9[((IOTA - 98) & 127)]) + ((0.00081300600000000002 * fVec9[((IOTA - 97) & 127)]) + ((0.000623519 * fVec9[((IOTA - 96) & 127)]) + ((0.0013659500000000001 * fVec9[((IOTA - 95) & 127)]) + ((0.00214314 * fVec9[((IOTA - 94) & 127)]) + ((0.0016777999999999999 * fVec9[((IOTA - 93) & 127)]) + ((0.00108099 * fVec9[((IOTA - 92) & 127)]) + ((6.7984800000000007e-05 * fVec9[((IOTA - 90) & 127)]) + ((0.000264467 * fVec9[((IOTA - 89) & 127)]) + ((0.00045975200000000007 * fVec9[((IOTA - 88) & 127)]) + ((0.0013345100000000001 * fVec9[((IOTA - 87) & 127)]) + ((0.0013671599999999999 * fVec9[((IOTA - 86) & 127)]) + ((0.00088433700000000001 * fVec9[((IOTA - 85) & 127)]) + ((0.0010498400000000002 * fVec9[((IOTA - 84) & 127)]) + ((0.00300031 * fVec9[((IOTA - 83) & 127)]) + ((0.00033132700000000002 * fVec9[((IOTA - 82) & 127)]) + ((2.3648600000000003e-05 * fVec9[((IOTA - 80) & 127)]) + ((0.00058793100000000009 * fVec9[((IOTA - 79) & 127)]) + ((0.0027816299999999998 * fVec9[((IOTA - 78) & 127)]) + ((0.0017765299999999999 * fVec9[((IOTA - 77) & 127)]) + ((0.00046795000000000002 * fVec9[((IOTA - 73) & 127)]) + ((0.0016152100000000002 * fVec9[((IOTA - 72) & 127)]) + ((0.058508199999999996 * fVec9[((IOTA - 22) & 127)]) + ((0.050635700000000006 * fVec9[((IOTA - 21) & 127)]) + ((0.041341200000000002 * fVec9[((IOTA - 20) & 127)]) + ((0.0214629 * fVec9[((IOTA - 19) & 127)]) + ((0.029345699999999999 * fVec9[((IOTA - 18) & 127)]) + ((0.088954799999999987 * fVec9[((IOTA - 17) & 127)]) + ((0.063658400000000004 * fVec9[((IOTA - 16) & 127)]) + ((0.078143400000000002 * fVec9[((IOTA - 15) & 127)]) + ((0.060886200000000001 * fVec9[((IOTA - 14) & 127)]) + ((0.077131900000000003 * fVec9[((IOTA - 13) & 127)]) + ((0.090551499999999993 * fVec9[((IOTA - 12) & 127)]) + ((0.0054581200000000003 * fVec9[((IOTA - 11) & 127)]) + ((0.0018110400000000001 * fVec9[((IOTA - 9) & 127)]) + ((0.00194177 * fVec9[((IOTA - 7) & 127)]) + ((0.00114689 * fVec9[((IOTA - 5) & 127)]) + ((0.00058690300000000006 * fVec9[((IOTA - 4) & 127)]) + ((0.0012299100000000001 * fVec9[((IOTA - 3) & 127)]) + ((0.00015469 * fVec9[((IOTA - 1) & 127)]) + (((((((1.8717900000000003e-05 * fVec24[((IOTA - 122) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((0.00305273 * fVec24[((IOTA - 54) & 127)]) + ((0.00325793 * fVec24[((IOTA - 53) & 127)]) + ((0.0028833999999999999 * fVec24[((IOTA - 52) & 127)]) + ((0.0036652500000000001 * fVec24[((IOTA - 51) & 127)]) + ((0.00086377000000000014 * fVec24[((IOTA - 50) & 127)]) + ((0.0012461600000000001 * fVec24[((IOTA - 55) & 127)]) + ((((((((((((((((((((((((((((((((((((((((((((((2.5118200000000003e-05 * fTemp24) + (0.00012370799999999999 * fVec24[((IOTA - 1) & 127)])) + (0.00096838400000000008 * fVec24[((IOTA - 3) & 127)])) + (0.00059949000000000005 * fVec24[((IOTA - 4) & 127)])) + (0.00076772799999999997 * fVec24[((IOTA - 5) & 127)])) + (0.00014117900000000001 * fVec24[((IOTA - 6) & 127)])) + (0.0018634200000000002 * fVec24[((IOTA - 7) & 127)])) + (0.00024957099999999997 * fVec24[((IOTA - 8) & 127)])) + (0.0011589199999999999 * fVec24[((IOTA - 9) & 127)])) + (0.00050879500000000004 * fVec24[((IOTA - 10) & 127)])) + (0.0036302599999999997 * fVec24[((IOTA - 11) & 127)])) + (0.056510400000000002 * fVec24[((IOTA - 12) & 127)])) + (0.049342300000000006 * fVec24[((IOTA - 13) & 127)])) + (0.0449074 * fVec24[((IOTA - 14) & 127)])) + (0.064749100000000004 * fVec24[((IOTA - 15) & 127)])) + (0.059606500000000007 * fVec24[((IOTA - 16) & 127)])) + (0.073495100000000008 * fVec24[((IOTA - 17) & 127)])) + (0.034514800000000005 * fVec24[((IOTA - 18) & 127)])) + (0.055772500000000003 * fVec24[((IOTA - 19) & 127)])) + (0.06596840000000001 * fVec24[((IOTA - 20) & 127)])) + (0.057809200000000005 * fVec24[((IOTA - 21) & 127)])) + (0.096895100000000012 * fVec24[((IOTA - 22) & 127)])) + (0.021260899999999999 * fVec24[((IOTA - 23) & 127)])) + (0.031746299999999998 * fVec24[((IOTA - 25) & 127)])) + (0.0528391 * fVec24[((IOTA - 26) & 127)])) + (0.030624600000000002 * fVec24[((IOTA - 27) & 127)])) + (0.0087064099999999995 * fVec24[((IOTA - 29) & 127)])) + (0.0266261 * fVec24[((IOTA - 30) & 127)])) + (0.011366300000000001 * fVec24[((IOTA - 31) & 127)])) + (0.0057082499999999998 * fVec24[((IOTA - 32) & 127)])) + (0.023001999999999998 * fVec24[((IOTA - 33) & 127)])) + (0.020023599999999999 * fVec24[((IOTA - 34) & 127)])) + (0.0044680700000000002 * fVec24[((IOTA - 35) & 127)])) + (0.0141227 * fVec24[((IOTA - 36) & 127)])) + (0.0079812000000000008 * fVec24[((IOTA - 37) & 127)])) + (0.0069301900000000001 * fVec24[((IOTA - 38) & 127)])) + (0.011589100000000001 * fVec24[((IOTA - 39) & 127)])) + (0.0064973000000000001 * fVec24[((IOTA - 40) & 127)])) + (0.0056945699999999995 * fVec24[((IOTA - 41) & 127)])) + (0.0074329900000000004 * fVec24[((IOTA - 42) & 127)])) + (0.0028857800000000001 * fVec24[((IOTA - 43) & 127)])) + (0.0079248200000000008 * fVec24[((IOTA - 44) & 127)])) + (0.015005800000000001 * fVec24[((IOTA - 45) & 127)])) + (0.00250454 * fVec24[((IOTA - 46) & 127)])) + (0.00306785 * fVec24[((IOTA - 48) & 127)])) + (0.00175234 * fVec24[((IOTA - 49) & 127)])))))))) + (0.0012118500000000002 * fVec24[((IOTA - 56) & 127)])) + (0.0050028199999999998 * fVec24[((IOTA - 57) & 127)])) + (0.0036129299999999999 * fVec24[((IOTA - 58) & 127)])) + (0.0031211899999999998 * fVec24[((IOTA - 59) & 127)])) + (0.0042250600000000001 * fVec24[((IOTA - 60) & 127)])) + (0.0035775299999999998 * fVec24[((IOTA - 61) & 127)])) + (0.0068040700000000006 * fVec24[((IOTA - 62) & 127)])) + (0.0062385100000000001 * fVec24[((IOTA - 63) & 127)])) + (0.0042152999999999999 * fVec24[((IOTA - 64) & 127)])) + (0.0027403499999999999 * fVec24[((IOTA - 65) & 127)])) + (0.0023089200000000003 * fVec24[((IOTA - 66) & 127)])) + (0.0034284599999999999 * fVec24[((IOTA - 67) & 127)])) + (0.0022559300000000002 * fVec24[((IOTA - 68) & 127)])) + (0.0014647 * fVec24[((IOTA - 69) & 127)])) + (0.00185049 * fVec24[((IOTA - 70) & 127)])) + (0.0032107500000000001 * fVec24[((IOTA - 71) & 127)])) + (0.0052356299999999998 * fVec24[((IOTA - 72) & 127)])) + (0.0030868900000000001 * fVec24[((IOTA - 73) & 127)])) + (0.0029129100000000003 * fVec24[((IOTA - 74) & 127)])) + (0.0063743100000000002 * fVec24[((IOTA - 75) & 127)])) + (0.0041945800000000007 * fVec24[((IOTA - 76) & 127)])) + (0.00082847699999999999 * fVec24[((IOTA - 77) & 127)])) + (0.0024405 * fVec24[((IOTA - 78) & 127)])) + (0.0041905200000000005 * fVec24[((IOTA - 79) & 127)])) + (0.0024365300000000001 * fVec24[((IOTA - 80) & 127)])) + (0.00056369199999999997 * fVec24[((IOTA - 82) & 127)])) + (0.0015701700000000001 * fVec24[((IOTA - 83) & 127)])) + (0.0016799500000000001 * fVec24[((IOTA - 85) & 127)])) + (0.0051757600000000006 * fVec24[((IOTA - 86) & 127)])) + (0.0037083100000000003 * fVec24[((IOTA - 87) & 127)])) + (0.00041329900000000006 * fVec24[((IOTA - 90) & 127)])) + (2.3955000000000004e-05 * fVec24[((IOTA - 93) & 127)])) + (0.0021461499999999999 * fVec24[((IOTA - 94) & 127)])) + (0.00272945 * fVec24[((IOTA - 95) & 127)])) + (0.00054874000000000004 * fVec24[((IOTA - 96) & 127)])) + (0.00058470199999999999 * fVec24[((IOTA - 98) & 127)])) + (0.00061282500000000011 * fVec24[((IOTA - 99) & 127)])) + (0.00050683400000000006 * fVec24[((IOTA - 100) & 127)])) + (0.00087727600000000008 * fVec24[((IOTA - 101) & 127)])) + (0.00154024 * fVec24[((IOTA - 102) & 127)])) + (0.00185348 * fVec24[((IOTA - 103) & 127)])) + (0.0012065399999999999 * fVec24[((IOTA - 104) & 127)])) + (0.0014059200000000002 * fVec24[((IOTA - 105) & 127)])) + (0.00136699 * fVec24[((IOTA - 106) & 127)])) + (0.0012923000000000001 * fVec24[((IOTA - 107) & 127)])) + (0.0009436510000000001 * fVec24[((IOTA - 108) & 127)])) + (0.00083451500000000008 * fVec24[((IOTA - 109) & 127)])) + (0.00098166300000000002 * fVec24[((IOTA - 110) & 127)])) + (0.00067625599999999997 * fVec24[((IOTA - 111) & 127)])) + (0.00050102000000000002 * fVec24[((IOTA - 112) & 127)])) + (0.00053358400000000003 * fVec24[((IOTA - 113) & 127)])) + (0.00054736599999999998 * fVec24[((IOTA - 114) & 127)])) + (0.00045382400000000002 * fVec24[((IOTA - 115) & 127)])) + (0.00034160000000000001 * fVec24[((IOTA - 116) & 127)])) + (0.00025855300000000002 * fVec24[((IOTA - 117) & 127)])) + (0.00016872499999999999 * fVec24[((IOTA - 118) & 127)])) + (0.00016404399999999999 * fVec24[((IOTA - 119) & 127)])) + (0.00010654600000000001 * fVec24[((IOTA - 120) & 127)])) + (4.2541300000000006e-05 * fVec24[((IOTA - 121) & 127)]))) + (2.09787e-05 * fVec24[((IOTA - 123) & 127)])) + (5.7126099999999992e-06 * fVec24[((IOTA - 124) & 127)])) + (5.0813899999999995e-06 * fVec24[((IOTA - 125) & 127)])) + (2.0625300000000001e-06 * fVec24[((IOTA - 126) & 127)])) + (3.3955100000000003e-05 * fTemp9))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.000682276 * fVec11[((IOTA - 3) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((1.4376099999999999e-07 * fVec0[((IOTA - 125) & 127)]) + ((8.1478800000000007e-06 * fVec0[((IOTA - 123) & 127)]) + ((3.5912700000000006e-05 * fVec0[((IOTA - 122) & 127)]) + ((6.3930200000000007e-05 * fVec0[((IOTA - 121) & 127)]) + ((9.5050500000000014e-05 * fVec0[((IOTA - 120) & 127)]) + ((2.4284e-05 * fVec0[((IOTA - 119) & 127)]) + ((0.00017088300000000001 * fVec0[((IOTA - 117) & 127)]) + ((0.000201394 * fVec0[((IOTA - 116) & 127)]) + ((0.00020405400000000001 * fVec0[((IOTA - 115) & 127)]) + ((1.0287e-05 * fVec0[((IOTA - 114) & 127)]) + ((1.34228e-05 * fVec0[((IOTA - 111) & 127)]) + ((0.000166584 * fVec0[((IOTA - 110) & 127)]) + ((0.00053367400000000004 * fVec0[((IOTA - 108) & 127)]) + ((0.00010277700000000001 * fVec0[((IOTA - 102) & 127)]) + ((0.00011668700000000002 * fVec0[((IOTA - 98) & 127)]) + ((0.00096910600000000007 * fVec0[((IOTA - 97) & 127)]) + ((0.00064723500000000002 * fVec0[((IOTA - 96) & 127)]) + ((0.00037608900000000002 * fVec0[((IOTA - 93) & 127)]) + ((0.0107335 * fVec0[((IOTA - 32) & 127)]) + ((0.0074136300000000009 * fVec0[((IOTA - 31) & 127)]) + ((0.0046591599999999999 * fVec0[((IOTA - 29) & 127)]) + ((0.015947700000000002 * fVec0[((IOTA - 28) & 127)]) + ((0.025441699999999998 * fVec0[((IOTA - 19) & 127)]) + ((0.060181899999999997 * fVec0[((IOTA - 18) & 127)]) + ((0.0165282 * fVec0[((IOTA - 17) & 127)]) + ((0.056723499999999996 * fVec0[((IOTA - 16) & 127)]) + ((0.059615000000000001 * fVec0[((IOTA - 15) & 127)]) + ((0.0024382600000000003 * fVec0[((IOTA - 14) & 127)]) + ((0.0031914500000000002 * fVec0[((IOTA - 10) & 127)]) + ((0.0013724499999999999 * fVec0[((IOTA - 6) & 127)]) + ((3.9424800000000002e-05 * fVec0[((IOTA - 3) & 127)]) + ((0.00042801200000000002 * fVec0[((IOTA - 2) & 127)]) + ((2.8233900000000001e-05 * fVec0[((IOTA - 1) & 127)]) + ((0.008696849999999999 * fVec0[((IOTA - 37) & 127)]) + ((0.013909899999999999 * fVec0[((IOTA - 36) & 127)]) + ((0.010920000000000001 * fVec0[((IOTA - 35) & 127)]) + ((0.0067972900000000001 * fVec0[((IOTA - 34) & 127)]) + ((9.292850000000001e-05 * fVec0[((IOTA - 92) & 127)]) + ((0.0010366800000000001 * fVec0[((IOTA - 91) & 127)]) + ((0.0025010200000000001 * fVec0[((IOTA - 90) & 127)]) + ((0.000177073 * fVec0[((IOTA - 89) & 127)]) + ((0.00052927500000000006 * fVec0[((IOTA - 88) & 127)]) + ((0.0019501599999999998 * fVec0[((IOTA - 87) & 127)]) + ((0.00075808200000000009 * fVec0[((IOTA - 86) & 127)]) + ((4.6523100000000002e-05 * fVec0[((IOTA - 83) & 127)]) + ((0.00108943 * fVec0[((IOTA - 79) & 127)]) + ((0.00032896000000000005 * fVec0[((IOTA - 78) & 127)]) + ((0.0012591099999999999 * fVec0[((IOTA - 75) & 127)]) + ((8.8494799999999998e-05 * fVec0[((IOTA - 74) & 127)]) + ((0.00045897600000000005 * fVec0[((IOTA - 73) & 127)]) + ((0.00083460199999999994 * fVec0[((IOTA - 69) & 127)]) + ((0.0018953800000000001 * fVec0[((IOTA - 68) & 127)]) + ((0.00183186 * fVec0[((IOTA - 67) & 127)]) + ((0.0014255700000000001 * fVec0[((IOTA - 66) & 127)]) + ((0.000195193 * fVec0[((IOTA - 65) & 127)]) + ((0.0004124 * fVec0[((IOTA - 64) & 127)]) + ((0.00143402 * fVec0[((IOTA - 63) & 127)]) + ((0.00115475 * fVec0[((IOTA - 62) & 127)]) + ((0.00150633 * fVec0[((IOTA - 61) & 127)]) + ((0.0016002799999999999 * fVec0[((IOTA - 60) & 127)]) + ((0.0077661499999999994 * fVec0[((IOTA - 33) & 127)]) + ((0.0021894599999999998 * fVec0[((IOTA - 53) & 127)]) + ((0.0011194900000000001 * fVec0[((IOTA - 50) & 127)]) + ((0.0011283899999999999 * fVec0[((IOTA - 49) & 127)]) + ((0.0025925100000000001 * fVec0[((IOTA - 45) & 127)]) + ((0.0021516 * fVec0[((IOTA - 44) & 127)]) + ((0.005077410000000001 * fVec0[((IOTA - 41) & 127)]) + ((0.0023729100000000002 * fVec0[((IOTA - 40) & 127)]) + ((8.7939299999999991e-07 * fVec1[((IOTA - 126) & 127)]) + ((5.4800099999999999e-06 * fVec1[((IOTA - 125) & 127)]) + ((1.7206200000000001e-05 * fVec1[((IOTA - 121) & 127)]) + ((6.7243000000000007e-05 * fVec1[((IOTA - 120) & 127)]) + ((8.7255500000000012e-05 * fVec1[((IOTA - 119) & 127)]) + ((1.6624399999999998e-06 * fVec1[((IOTA - 118) & 127)]) + ((0.000144194 * fVec1[((IOTA - 116) & 127)]) + ((0.00014439500000000002 * fVec1[((IOTA - 114) & 127)]) + ((0.00015184500000000001 * fVec1[((IOTA - 113) & 127)]) + ((2.34313e-05 * fVec1[((IOTA - 109) & 127)]) + ((0.00042287999999999999 * fVec1[((IOTA - 108) & 127)]) + ((0.00030992900000000002 * fVec1[((IOTA - 107) & 127)]) + ((0.00020482300000000003 * fVec1[((IOTA - 101) & 127)]) + ((0.000300542 * fVec1[((IOTA - 100) & 127)]) + ((0.00086114700000000015 * fVec1[((IOTA - 96) & 127)]) + ((0.00020261300000000003 * fVec1[((IOTA - 95) & 127)]) + ((0.00029358500000000002 * fVec1[((IOTA - 91) & 127)]) + ((0.0041496700000000003 * fVec1[((IOTA - 48) & 127)]) + ((0.0086446200000000004 * fVec1[((IOTA - 44) & 127)]) + ((0.0062203400000000004 * fVec1[((IOTA - 43) & 127)]) + ((0.0029795799999999999 * fVec1[((IOTA - 40) & 127)]) + ((0.0012590699999999999 * fVec1[((IOTA - 38) & 127)]) + ((0.0154334 * fVec1[((IOTA - 34) & 127)]) + ((0.018936700000000001 * fVec1[((IOTA - 30) & 127)]) + ((0.0049586700000000001 * fVec1[((IOTA - 29) & 127)]) + ((0.046698000000000003 * fVec1[((IOTA - 25) & 127)]) + ((0.010134700000000002 * fVec1[((IOTA - 22) & 127)]) + ((0.013995500000000001 * fVec1[((IOTA - 21) & 127)]) + ((0.0044761200000000001 * fVec1[((IOTA - 19) & 127)]) + ((0.0098600600000000004 * fVec1[((IOTA - 18) & 127)]) + ((0.020147700000000001 * fVec1[((IOTA - 15) & 127)]) + ((0.00239529 * fVec1[((IOTA - 12) & 127)]) + ((0.00075913900000000004 * fVec1[((IOTA - 11) & 127)]) + ((0.00060334500000000003 * fVec1[((IOTA - 9) & 127)]) + ((0.00095772900000000005 * fVec1[((IOTA - 6) & 127)]) + ((0.00013332900000000001 * fVec1[((IOTA - 3) & 127)]) + ((0.00011180900000000001 * fVec1[((IOTA - 2) & 127)]) + ((7.1409999999999997e-07 * fTemp1) + ((0.0042629599999999997 * fVec1[((IOTA - 53) & 127)]) + ((0.00357925 * fVec1[((IOTA - 52) & 127)]) + ((0.00121156 * fVec1[((IOTA - 49) & 127)]) + ((0.001897 * fVec1[((IOTA - 90) & 127)]) + ((0.00011857899999999999 * fVec1[((IOTA - 89) & 127)]) + ((0.00093195400000000003 * fVec1[((IOTA - 87) & 127)]) + ((0.00086698299999999999 * fVec1[((IOTA - 86) & 127)]) + ((0.00190189 * fVec1[((IOTA - 83) & 127)]) + ((0.0015840700000000001 * fVec1[((IOTA - 82) & 127)]) + ((0.00062755200000000008 * fVec1[((IOTA - 81) & 127)]) + ((0.0021193000000000002 * fVec1[((IOTA - 78) & 127)]) + ((0.0025810200000000003 * fVec1[((IOTA - 77) & 127)]) + ((2.1180200000000001e-05 * fVec1[((IOTA - 76) & 127)]) + ((0.00014521 * fVec1[((IOTA - 75) & 127)]) + ((9.0364000000000018e-05 * fVec1[((IOTA - 72) & 127)]) + ((0.00108413 * fVec1[((IOTA - 71) & 127)]) + ((0.000361035 * fVec1[((IOTA - 70) & 127)]) + ((0.00084564900000000008 * fVec1[((IOTA - 67) & 127)]) + ((0.00059175800000000006 * fVec1[((IOTA - 63) & 127)]) + ((0.00054578800000000007 * fVec1[((IOTA - 62) & 127)]) + ((0.00023921600000000002 * fVec1[((IOTA - 59) & 127)]) + ((0.00085691700000000001 * fVec1[((IOTA - 58) & 127)]) + ((0.00016994800000000001 * fVec1[((IOTA - 57) & 127)]) + ((8.2977300000000009e-05 * fVec1[((IOTA - 56) & 127)]) + ((1.00244e-05 * fVec2[((IOTA - 124) & 127)]) + ((2.4757200000000001e-05 * fVec2[((IOTA - 123) & 127)]) + ((2.0122300000000002e-05 * fVec2[((IOTA - 120) & 127)]) + ((7.8952500000000007e-05 * fVec2[((IOTA - 119) & 127)]) + ((5.0735200000000009e-05 * fVec2[((IOTA - 118) & 127)]) + ((2.5488499999999997e-06 * fVec2[((IOTA - 117) & 127)]) + ((5.9800600000000005e-05 * fVec2[((IOTA - 116) & 127)]) + ((0.000105037 * fVec2[((IOTA - 115) & 127)]) + ((0.00025922800000000002 * fVec2[((IOTA - 114) & 127)]) + ((0.00015691000000000001 * fVec2[((IOTA - 113) & 127)]) + ((0.00026635300000000004 * fVec2[((IOTA - 109) & 127)]) + ((0.00011445900000000001 * fVec2[((IOTA - 108) & 127)]) + ((0.000136272 * fVec2[((IOTA - 104) & 127)]) + ((0.00016330100000000003 * fVec2[((IOTA - 96) & 127)]) + ((7.4505200000000006e-05 * fVec2[((IOTA - 95) & 127)]) + ((0.00031864099999999999 * fVec2[((IOTA - 94) & 127)]) + ((0.0011613700000000001 * fVec2[((IOTA - 93) & 127)]) + ((0.00081929099999999999 * fVec2[((IOTA - 54) & 127)]) + ((0.000429732 * fVec2[((IOTA - 53) & 127)]) + ((0.0050749500000000008 * fVec2[((IOTA - 41) & 127)]) + ((0.0062304400000000003 * fVec2[((IOTA - 40) & 127)]) + ((0.0051450200000000001 * fVec2[((IOTA - 39) & 127)]) + ((0.0054617399999999997 * fVec2[((IOTA - 38) & 127)]) + ((0.013412900000000002 * fVec2[((IOTA - 37) & 127)]) + ((0.0083610900000000016 * fVec2[((IOTA - 36) & 127)]) + ((0.032106300000000004 * fVec2[((IOTA - 35) & 127)]) + ((0.013874800000000001 * fVec2[((IOTA - 34) & 127)]) + ((0.015102899999999999 * fVec2[((IOTA - 31) & 127)]) + ((0.00959986 * fVec2[((IOTA - 30) & 127)]) + ((0.0127315 * fVec2[((IOTA - 27) & 127)]) + ((0.0078796999999999999 * fVec2[((IOTA - 26) & 127)]) + ((0.0209115 * fVec2[((IOTA - 20) & 127)]) + ((0.024721300000000002 * fVec2[((IOTA - 19) & 127)]) + ((0.033460299999999998 * fVec2[((IOTA - 17) & 127)]) + ((0.019325600000000002 * fVec2[((IOTA - 16) & 127)]) + ((0.048091999999999996 * fVec2[((IOTA - 15) & 127)]) + ((0.023035199999999999 * fVec2[((IOTA - 14) & 127)]) + ((0.0040449700000000002 * fVec2[((IOTA - 10) & 127)]) + ((0.0018601700000000002 * fVec2[((IOTA - 8) & 127)]) + ((0.00110994 * fVec2[((IOTA - 6) & 127)]) + ((0.000373285 * fVec2[((IOTA - 2) & 127)]) + ((4.2016200000000006e-05 * fVec2[((IOTA - 1) & 127)]) + ((0.0036430799999999999 * fVec2[((IOTA - 61) & 127)]) + ((0.00123704 * fVec2[((IOTA - 60) & 127)]) + ((0.0020936499999999999 * fVec2[((IOTA - 92) & 127)]) + ((0.00292779 * fVec2[((IOTA - 91) & 127)]) + ((0.00011911400000000001 * fVec2[((IOTA - 90) & 127)]) + ((0.00026815200000000002 * fVec2[((IOTA - 88) & 127)]) + ((0.0022168700000000001 * fVec2[((IOTA - 85) & 127)]) + ((0.00236279 * fVec2[((IOTA - 84) & 127)]) + ((0.00133927 * fVec2[((IOTA - 83) & 127)]) + ((0.0036129700000000001 * fVec2[((IOTA - 82) & 127)]) + ((0.00258392 * fVec2[((IOTA - 81) & 127)]) + ((0.00076553699999999994 * fVec2[((IOTA - 80) & 127)]) + ((0.00052649700000000001 * fVec2[((IOTA - 77) & 127)]) + ((0.00065805200000000001 * fVec2[((IOTA - 73) & 127)]) + ((0.0019009700000000001 * fVec2[((IOTA - 72) & 127)]) + ((0.00040585399999999998 * fVec2[((IOTA - 68) & 127)]) + ((0.00056621899999999997 * fVec2[((IOTA - 67) & 127)]) + ((0.00100438 * fVec2[((IOTA - 65) & 127)]) + ((0.00106258 * fVec2[((IOTA - 64) & 127)]) + ((0.00075541200000000001 * fVec2[((IOTA - 63) & 127)]) + ((0.0041593900000000007 * fVec2[((IOTA - 62) & 127)]) + ((4.9133300000000002e-07 * fVec3[((IOTA - 126) & 127)]) + ((1.3759399999999999e-06 * fVec3[((IOTA - 125) & 127)]) + ((1.05587e-07 * fVec3[((IOTA - 124) & 127)]) + ((4.21833e-05 * fVec3[((IOTA - 120) & 127)]) + ((1.23038e-06 * fVec3[((IOTA - 119) & 127)]) + ((0.00012532099999999999 * fVec3[((IOTA - 115) & 127)]) + ((9.7130800000000002e-05 * fVec3[((IOTA - 114) & 127)]) + ((0.00033839299999999998 * fVec3[((IOTA - 110) & 127)]) + ((0.00029385700000000002 * fVec3[((IOTA - 106) & 127)]) + ((0.00033615499999999998 * fVec3[((IOTA - 105) & 127)]) + ((0.00047366300000000004 * fVec3[((IOTA - 104) & 127)]) + ((0.00063192000000000012 * fVec3[((IOTA - 100) & 127)]) + ((0.00026227100000000001 * fVec3[((IOTA - 99) & 127)]) + ((0.00090633300000000005 * fVec3[((IOTA - 92) & 127)]) + ((0.00112509 * fVec3[((IOTA - 91) & 127)]) + ((0.00062542600000000011 * fVec3[((IOTA - 90) & 127)]) + ((0.0013347700000000001 * fVec3[((IOTA - 51) & 127)]) + ((0.00071260200000000001 * fVec3[((IOTA - 48) & 127)]) + ((0.000302236 * fVec3[((IOTA - 47) & 127)]) + ((0.00032389000000000002 * fVec3[((IOTA - 45) & 127)]) + ((0.0039772100000000001 * fVec3[((IOTA - 44) & 127)]) + ((0.0039344899999999997 * fVec3[((IOTA - 39) & 127)]) + ((0.0028605000000000002 * fVec3[((IOTA - 37) & 127)]) + ((0.0056457300000000007 * fVec3[((IOTA - 36) & 127)]) + ((0.013276099999999999 * fVec3[((IOTA - 33) & 127)]) + ((0.0069491600000000002 * fVec3[((IOTA - 32) & 127)]) + ((0.0046345700000000002 * fVec3[((IOTA - 29) & 127)]) + ((0.0063826300000000002 * fVec3[((IOTA - 28) & 127)]) + ((0.0061617600000000005 * fVec3[((IOTA - 26) & 127)]) + ((0.0090629600000000001 * fVec3[((IOTA - 25) & 127)]) + ((0.016456200000000001 * fVec3[((IOTA - 24) & 127)]) + ((0.030671 * fVec3[((IOTA - 21) & 127)]) + ((0.0035630700000000002 * fVec3[((IOTA - 18) & 127)]) + ((0.0074771200000000003 * fVec3[((IOTA - 15) & 127)]) + ((0.00190957 * fVec3[((IOTA - 12) & 127)]) + ((0.00021257400000000001 * fVec3[((IOTA - 9) & 127)]) + ((0.00024266000000000001 * fVec3[((IOTA - 6) & 127)]) + ((2.0019800000000001e-05 * fVec3[((IOTA - 3) & 127)]) + ((0.00011068 * fVec3[((IOTA - 2) & 127)]) + ((5.2308799999999996e-06 * fTemp3) + ((0.0012169300000000002 * fVec3[((IOTA - 86) & 127)]) + ((0.00184891 * fVec3[((IOTA - 85) & 127)]) + ((6.1678400000000002e-05 * fVec3[((IOTA - 84) & 127)]) + ((0.00028041100000000005 * fVec3[((IOTA - 83) & 127)]) + ((0.00021002299999999999 * fVec3[((IOTA - 82) & 127)]) + ((7.4171300000000013e-05 * fVec3[((IOTA - 81) & 127)]) + ((2.6719199999999999e-06 * fVec3[((IOTA - 78) & 127)]) + ((0.0027959399999999998 * fVec3[((IOTA - 73) & 127)]) + ((0.0025147900000000003 * fVec3[((IOTA - 72) & 127)]) + ((0.0026507900000000001 * fVec3[((IOTA - 68) & 127)]) + ((0.0024592200000000002 * fVec3[((IOTA - 67) & 127)]) + ((0.00046335100000000003 * fVec3[((IOTA - 66) & 127)]) + ((0.00364205 * fVec3[((IOTA - 63) & 127)]) + ((0.0030474500000000002 * fVec3[((IOTA - 62) & 127)]) + ((8.9896500000000002e-05 * fVec3[((IOTA - 60) & 127)]) + ((0.0020873300000000001 * fVec3[((IOTA - 59) & 127)]) + ((0.00024737200000000004 * fVec3[((IOTA - 58) & 127)]) + ((0.00011431100000000001 * fVec3[((IOTA - 57) & 127)]) + ((0.0012573 * fVec3[((IOTA - 56) & 127)]) + ((1.4991799999999998e-06 * fVec4[((IOTA - 125) & 127)]) + ((4.4237300000000001e-06 * fVec4[((IOTA - 124) & 127)]) + ((2.5857400000000001e-05 * fVec4[((IOTA - 123) & 127)]) + ((4.8271399999999998e-08 * fVec4[((IOTA - 122) & 127)]) + ((0.00011086600000000001 * fVec4[((IOTA - 119) & 127)]) + ((0.00015923000000000001 * fVec4[((IOTA - 118) & 127)]) + ((0.00011133200000000001 * fVec4[((IOTA - 117) & 127)]) + ((9.1368399999999998e-05 * fVec4[((IOTA - 116) & 127)]) + ((6.9587500000000004e-05 * fVec4[((IOTA - 115) & 127)]) + ((7.9531300000000002e-05 * fVec4[((IOTA - 114) & 127)]) + ((0.000108869 * fVec4[((IOTA - 112) & 127)]) + ((5.3145400000000008e-05 * fVec4[((IOTA - 111) & 127)]) + ((0.00020724900000000003 * fVec4[((IOTA - 110) & 127)]) + ((0.000477114 * fVec4[((IOTA - 109) & 127)]) + ((0.00047335500000000001 * fVec4[((IOTA - 108) & 127)]) + ((0.00010935600000000001 * fVec4[((IOTA - 107) & 127)]) + ((0.00010925100000000001 * fVec4[((IOTA - 106) & 127)]) + ((0.00010986800000000001 * fVec4[((IOTA - 105) & 127)]) + ((0.00016840900000000001 * fVec4[((IOTA - 103) & 127)]) + ((9.6088500000000014e-05 * fVec4[((IOTA - 100) & 127)]) + ((0.00035324200000000003 * fVec4[((IOTA - 99) & 127)]) + ((0.00022054700000000003 * fVec4[((IOTA - 98) & 127)]) + ((7.9619000000000011e-05 * fVec4[((IOTA - 92) & 127)]) + ((0.00074820700000000008 * fVec4[((IOTA - 88) & 127)]) + ((0.00070991400000000007 * fVec4[((IOTA - 87) & 127)]) + ((0.00011130500000000002 * fVec4[((IOTA - 86) & 127)]) + ((0.0015851900000000002 * fVec4[((IOTA - 83) & 127)]) + ((9.2806400000000006e-05 * fVec4[((IOTA - 82) & 127)]) + ((0.00087703300000000004 * fVec4[((IOTA - 79) & 127)]) + ((0.00051777699999999997 * fVec4[((IOTA - 78) & 127)]) + ((0.00056143600000000001 * fVec4[((IOTA - 75) & 127)]) + ((0.0023187400000000001 * fVec4[((IOTA - 74) & 127)]) + ((0.0031101499999999999 * fVec4[((IOTA - 73) & 127)]) + ((6.6465099999999999e-07 * fVec4[((IOTA - 72) & 127)]) + ((0.0012871 * (fVec13[((IOTA - 71) & 127)] + fVec6[((IOTA - 99) & 127)])) + ((4.5172800000000002e-06 * fVec5[((IOTA - 125) & 127)]) + ((0.012665200000000001 * fVec4[((IOTA - 15) & 127)]) + ((0.0015061500000000002 * fVec4[((IOTA - 10) & 127)]) + ((0.00144769 * fVec4[((IOTA - 8) & 127)]) + ((2.8000400000000004e-05 * fVec4[((IOTA - 4) & 127)]) + ((0.00010043500000000001 * fVec4[((IOTA - 2) & 127)]) + ((5.0228400000000009e-05 * fVec4[((IOTA - 1) & 127)]) + ((1.0378400000000002e-05 * fTemp4) + ((0.00063152 * fVec4[((IOTA - 68) & 127)]) + ((0.00098431600000000005 * fVec4[((IOTA - 67) & 127)]) + ((0.0038434100000000002 * fVec4[((IOTA - 61) & 127)]) + ((0.0041785800000000003 * fVec4[((IOTA - 60) & 127)]) + ((8.6446799999999994e-05 * fVec4[((IOTA - 57) & 127)]) + ((0.00041971200000000004 * fVec4[((IOTA - 56) & 127)]) + ((0.00029838900000000003 * fVec4[((IOTA - 53) & 127)]) + ((0.0023647999999999998 * fVec4[((IOTA - 52) & 127)]) + ((0.0017983599999999999 * fVec4[((IOTA - 51) & 127)]) + ((0.0016364700000000001 * fVec4[((IOTA - 50) & 127)]) + ((0.0019431000000000001 * fVec4[((IOTA - 49) & 127)]) + ((0.00046590600000000003 * fVec4[((IOTA - 46) & 127)]) + ((0.0049145100000000004 * fVec4[((IOTA - 45) & 127)]) + ((0.0057126900000000003 * fVec4[((IOTA - 42) & 127)]) + ((0.0036100900000000003 * fVec4[((IOTA - 38) & 127)]) + ((0.0049432400000000007 * fVec4[((IOTA - 37) & 127)]) + ((0.0021107399999999998 * fVec4[((IOTA - 36) & 127)]) + ((0.0158944 * fVec4[((IOTA - 34) & 127)]) + ((0.012282700000000001 * fVec4[((IOTA - 33) & 127)]) + ((0.0089261400000000008 * fVec4[((IOTA - 32) & 127)]) + ((0.010118799999999999 * fVec4[((IOTA - 31) & 127)]) + ((0.0067020700000000001 * fVec4[((IOTA - 25) & 127)]) + ((0.0038775400000000005 * fVec4[((IOTA - 24) & 127)]) + ((0.0083579500000000011 * fVec4[((IOTA - 18) & 127)]) + ((0.0467927 * fVec4[((IOTA - 17) & 127)]) + ((0.041578400000000001 * fVec4[((IOTA - 16) & 127)]) + ((0.000117855 * fVec5[((IOTA - 117) & 127)]) + ((8.6228999999999984e-06 * fVec5[((IOTA - 121) & 127)]) + ((2.5498900000000001e-05 * fVec5[((IOTA - 119) & 127)]) + ((1.7197000000000002e-05 * fVec5[((IOTA - 120) & 127)]) + ((8.5473100000000007e-05 * fVec5[((IOTA - 118) & 127)]) + ((7.3769200000000005e-05 * fVec5[((IOTA - 116) & 127)]) + ((0.00010326400000000001 * fVec5[((IOTA - 115) & 127)]) + ((0.00014698200000000001 * fVec5[((IOTA - 114) & 127)]) + ((0.0105468 * (fVec13[((IOTA - 30) & 127)] - fVec7[((IOTA - 36) & 127)])) + ((0.034808400000000003 * fVec5[((IOTA - 14) & 127)]) + ((0.00097944700000000004 * fVec5[((IOTA - 13) & 127)]) + ((0.00034398499999999999 * fVec5[((IOTA - 11) & 127)]) + ((0.000116408 * fVec5[((IOTA - 113) & 127)]) + ((0.000116085 * fVec5[((IOTA - 112) & 127)]) + ((0.00012234100000000001 * fVec5[((IOTA - 111) & 127)]) + ((0.000291422 * fVec5[((IOTA - 110) & 127)]) + ((0.000101234 * fVec5[((IOTA - 109) & 127)]) + ((7.1704400000000004e-05 * fVec5[((IOTA - 108) & 127)]) + ((0.00017227900000000001 * fVec5[((IOTA - 106) & 127)]) + ((3.7385200000000002e-05 * fVec5[((IOTA - 105) & 127)]) + ((3.3625200000000005e-05 * fVec5[((IOTA - 101) & 127)]) + ((0.00036650100000000003 * fVec5[((IOTA - 87) & 127)]) + ((0.00082134800000000007 * fVec5[((IOTA - 86) & 127)]) + ((0.00047874499999999998 * fVec5[((IOTA - 81) & 127)]) + ((0.00093322400000000008 * fVec5[((IOTA - 80) & 127)]) + ((0.00072557100000000005 * fVec5[((IOTA - 79) & 127)]) + ((0.00086647800000000006 * fVec5[((IOTA - 77) & 127)]) + ((0.0024717699999999999 * fVec5[((IOTA - 76) & 127)]) + ((0.0011910600000000001 * fVec5[((IOTA - 75) & 127)]) + ((0.0017428699999999999 * fVec5[((IOTA - 74) & 127)]) + ((0.00125607 * fVec5[((IOTA - 73) & 127)]) + ((0.0028972500000000001 * fVec5[((IOTA - 68) & 127)]) + ((0.0039274399999999999 * fVec5[((IOTA - 67) & 127)]) + ((0.0012032799999999999 * fVec5[((IOTA - 66) & 127)]) + ((0.00069639100000000009 * fVec5[((IOTA - 65) & 127)]) + ((0.00067604500000000001 * fVec5[((IOTA - 62) & 127)]) + ((0.0020319800000000001 * fVec5[((IOTA - 61) & 127)]) + ((0.00030454800000000003 * fVec5[((IOTA - 60) & 127)]) + ((0.0027795100000000002 * fVec5[((IOTA - 56) & 127)]) + ((0.0040064599999999999 * fVec5[((IOTA - 55) & 127)]) + ((0.000117291 * fVec5[((IOTA - 52) & 127)]) + ((0.00024379400000000003 * fVec5[((IOTA - 51) & 127)]) + ((0.0021186500000000001 * fVec5[((IOTA - 49) & 127)]) + ((0.0035641600000000002 * fVec5[((IOTA - 48) & 127)]) + ((0.0032654700000000004 * fVec5[((IOTA - 47) & 127)]) + ((0.0054786700000000006 * fVec5[((IOTA - 43) & 127)]) + ((0.0027334600000000001 * fVec5[((IOTA - 42) & 127)]) + ((0.00072778400000000009 * fVec5[((IOTA - 39) & 127)]) + ((0.00847557 * fVec5[((IOTA - 38) & 127)]) + ((0.00445628 * fVec5[((IOTA - 37) & 127)]) + ((0.00091977900000000002 * fVec5[((IOTA - 36) & 127)]) + ((0.0015551999999999999 * fVec5[((IOTA - 35) & 127)]) + ((0.00075433100000000001 * fVec5[((IOTA - 34) & 127)]) + ((0.0018697900000000001 * fVec5[((IOTA - 33) & 127)]) + ((0.012971699999999999 * fVec5[((IOTA - 30) & 127)]) + ((0.0192195 * fVec5[((IOTA - 29) & 127)]) + ((0.0029063700000000001 * fVec5[((IOTA - 28) & 127)]) + ((0.00023681100000000002 * fVec5[((IOTA - 2) & 127)]) + ((1.9032200000000001e-05 * fVec5[((IOTA - 1) & 127)]) + ((0.00042503099999999998 * fVec5[((IOTA - 6) & 127)]) + ((0.00057029400000000005 * fVec5[((IOTA - 5) & 127)]) + ((0.053502300000000003 * fVec5[((IOTA - 24) & 127)]) + ((0.0063730200000000001 * fVec5[((IOTA - 23) & 127)]) + ((0.018845400000000002 * fVec5[((IOTA - 20) & 127)]) + ((0.040491700000000005 * fVec5[((IOTA - 19) & 127)]) + ((0.0282654 * fVec5[((IOTA - 18) & 127)]) + ((5.0096100000000001e-06 * fVec6[((IOTA - 124) & 127)]) + ((1.3386700000000002e-05 * fVec6[((IOTA - 123) & 127)]) + ((3.2443100000000001e-05 * fVec6[((IOTA - 122) & 127)]) + ((1.76768e-05 * fVec6[((IOTA - 119) & 127)]) + ((8.9263899999999998e-05 * fVec6[((IOTA - 118) & 127)]) + ((2.6721800000000002e-05 * fVec6[((IOTA - 117) & 127)]) + ((8.7643399999999995e-06 * fVec6[((IOTA - 115) & 127)]) + ((3.1741700000000001e-05 * fVec6[((IOTA - 114) & 127)]) + ((5.6021400000000005e-05 * fVec6[((IOTA - 113) & 127)]) + ((5.941340000000001e-05 * fVec6[((IOTA - 109) & 127)]) + ((0.00014551400000000002 * fVec6[((IOTA - 104) & 127)]) + ((0.00041534500000000007 * fVec6[((IOTA - 100) & 127)]) + ((0.00081397000000000001 * fVec6[((IOTA - 98) & 127)]) + ((7.5796499999999995e-06 * fVec6[((IOTA - 96) & 127)]) + ((0.00142954 * fVec6[((IOTA - 95) & 127)]) + ((0.00067267800000000001 * fVec6[((IOTA - 92) & 127)]) + ((0.0012544500000000001 * fVec6[((IOTA - 91) & 127)]) + ((0.0026229399999999998 * fVec6[((IOTA - 87) & 127)]) + ((0.0012076299999999999 * fVec6[((IOTA - 86) & 127)]) + ((1.6765800000000001e-05 * fVec6[((IOTA - 83) & 127)]) + ((0.00011319699999999999 * fVec6[((IOTA - 82) & 127)]) + ((0.0013973899999999999 * fVec6[((IOTA - 78) & 127)]) + ((0.0037434500000000002 * fVec6[((IOTA - 77) & 127)]) + ((0.00103739 * fVec6[((IOTA - 76) & 127)]) + ((0.00042959699999999999 * fVec6[((IOTA - 73) & 127)]) + ((0.00143001 * fVec6[((IOTA - 72) & 127)]) + ((0.0028124000000000001 * fVec6[((IOTA - 71) & 127)]) + ((0.00084889100000000006 * fVec6[((IOTA - 70) & 127)]) + ((0.00046814600000000007 * fVec6[((IOTA - 69) & 127)]) + ((8.3187000000000002e-05 * fVec6[((IOTA - 66) & 127)]) + ((0.00060605399999999997 * fVec6[((IOTA - 65) & 127)]) + ((0.00097613699999999997 * fVec6[((IOTA - 64) & 127)]) + ((0.00086599699999999997 * fVec6[((IOTA - 63) & 127)]) + ((0.0017292799999999999 * fVec6[((IOTA - 60) & 127)]) + ((0.0022722300000000001 * fVec6[((IOTA - 49) & 127)]) + ((0.0068404800000000003 * fVec6[((IOTA - 48) & 127)]) + ((0.00110702 * fVec6[((IOTA - 47) & 127)]) + ((0.00757838 * fVec6[((IOTA - 44) & 127)]) + ((0.0057198600000000002 * fVec6[((IOTA - 43) & 127)]) + ((0.0029618999999999999 * fVec6[((IOTA - 40) & 127)]) + ((0.0140448 * fVec6[((IOTA - 35) & 127)]) + ((0.0041036900000000001 * fVec6[((IOTA - 34) & 127)]) + ((0.013145800000000001 * fVec6[((IOTA - 31) & 127)]) + ((0.019920400000000001 * fVec6[((IOTA - 30) & 127)]) + ((0.0094601700000000004 * fVec6[((IOTA - 26) & 127)]) + ((0.056288999999999999 * fVec6[((IOTA - 25) & 127)]) + ((0.0019233 * fVec6[((IOTA - 24) & 127)]) + ((0.0252123 * fVec6[((IOTA - 21) & 127)]) + ((0.0254109 * fVec6[((IOTA - 20) & 127)]) + ((0.0034647700000000003 * fVec6[((IOTA - 18) & 127)]) + ((0.00594964 * fVec6[((IOTA - 17) & 127)]) + ((0.0161029 * fVec6[((IOTA - 16) & 127)]) + ((0.023348800000000003 * fVec6[((IOTA - 15) & 127)]) + ((0.0063743300000000001 * fVec6[((IOTA - 13) & 127)]) + ((0.0015232900000000001 * fVec6[((IOTA - 8) & 127)]) + ((0.00059566400000000009 * fVec6[((IOTA - 6) & 127)]) + ((0.00061765500000000005 * fVec6[((IOTA - 4) & 127)]) + ((0.00018629400000000002 * fVec6[((IOTA - 2) & 127)]) + ((1.14319e-05 * fTemp6) + ((5.4508599999999995e-06 * fVec7[((IOTA - 124) & 127)]) + ((2.3097900000000001e-05 * fVec7[((IOTA - 120) & 127)]) + ((9.5084400000000014e-05 * fVec7[((IOTA - 119) & 127)]) + ((4.7070600000000003e-05 * fVec7[((IOTA - 118) & 127)]) + ((1.9151600000000001e-05 * fVec7[((IOTA - 115) & 127)]) + ((0.000213902 * fVec7[((IOTA - 114) & 127)]) + ((4.3982700000000002e-05 * fVec7[((IOTA - 113) & 127)]) + ((8.4208499999999999e-05 * fVec7[((IOTA - 112) & 127)]) + ((0.000313663 * fVec7[((IOTA - 111) & 127)]) + ((0.000107876 * fVec7[((IOTA - 107) & 127)]) + ((0.00014932900000000002 * fVec7[((IOTA - 106) & 127)]) + ((0.0015988 * fVec7[((IOTA - 88) & 127)]) + ((0.0012366600000000001 * fVec7[((IOTA - 87) & 127)]) + ((0.0011569899999999999 * fVec7[((IOTA - 82) & 127)]) + ((0.0022012100000000003 * fVec7[((IOTA - 81) & 127)]) + ((0.00012976 * fVec7[((IOTA - 80) & 127)]) + ((0.0010910800000000001 * fVec7[((IOTA - 72) & 127)]) + ((8.9774699999999996e-06 * fVec7[((IOTA - 71) & 127)]) + ((0.0018817999999999999 * fVec7[((IOTA - 70) & 127)]) + ((0.0061321300000000004 * fVec7[((IOTA - 69) & 127)]) + ((0.00048287699999999999 * fVec7[((IOTA - 59) & 127)]) + ((0.0018291900000000001 * fVec7[((IOTA - 58) & 127)]) + ((0.0024737499999999998 * fVec7[((IOTA - 57) & 127)]) + ((0.0019971400000000001 * fVec7[((IOTA - 56) & 127)]) + ((0.00122024 * fVec7[((IOTA - 55) & 127)]) + ((0.0039290200000000001 * fVec7[((IOTA - 54) & 127)]) + ((0.0016456699999999999 * fVec7[((IOTA - 53) & 127)]) + ((0.00022187000000000002 * fVec7[((IOTA - 52) & 127)]) + ((0.0013776999999999999 * fVec7[((IOTA - 46) & 127)]) + ((0.00103326 * fVec7[((IOTA - 45) & 127)]) + ((0.0032352400000000003 * fVec7[((IOTA - 44) & 127)]) + ((0.0038521000000000002 * fVec7[((IOTA - 43) & 127)]) + ((0.010049600000000001 * fVec7[((IOTA - 40) & 127)]) + ((0.0061998300000000008 * fVec7[((IOTA - 39) & 127)]) + ((0.00020778699999999999 * fVec7[((IOTA - 38) & 127)]) + ((0.014879400000000001 * fVec7[((IOTA - 34) & 127)]) + ((0.00030624 * fVec7[((IOTA - 33) & 127)]) + ((0.0023475600000000003 * fVec7[((IOTA - 31) & 127)]) + ((0.0038550100000000003 * fVec7[((IOTA - 29) & 127)]) + ((0.0096461900000000007 * fVec7[((IOTA - 28) & 127)]) + ((0.0037454299999999997 * fVec7[((IOTA - 25) & 127)]) + ((0.0237126 * fVec7[((IOTA - 20) & 127)]) + ((0.017540800000000002 * fVec7[((IOTA - 19) & 127)]) + ((0.00192268 * fVec7[((IOTA - 17) & 127)]) + ((0.030162100000000001 * fVec7[((IOTA - 16) & 127)]) + ((0.0031064899999999999 * fVec7[((IOTA - 14) & 127)]) + ((0.0034641700000000004 * fVec7[((IOTA - 13) & 127)]) + ((0.00109278 * fVec7[((IOTA - 11) & 127)]) + ((0.00052972100000000003 * fVec7[((IOTA - 8) & 127)]) + ((0.000247311 * fVec7[((IOTA - 7) & 127)]) + ((0.00027904300000000003 * fVec7[((IOTA - 4) & 127)]) + ((0.00051962299999999998 * fVec7[((IOTA - 92) & 127)]) + ((0.00049481000000000004 * fVec7[((IOTA - 102) & 127)]) + ((0.00013896900000000002 * fVec7[((IOTA - 99) & 127)]) + ((0.000204095 * fVec7[((IOTA - 94) & 127)]) + ((0.0014644900000000001 * fVec7[((IOTA - 93) & 127)]) + ((8.3471200000000004e-08 * fVec8[((IOTA - 126) & 127)]) + ((9.3807100000000005e-06 * fVec8[((IOTA - 122) & 127)]) + ((6.6623900000000011e-05 * fVec8[((IOTA - 119) & 127)]) + ((6.1216400000000006e-05 * fVec8[((IOTA - 118) & 127)]) + ((6.7144700000000015e-05 * fVec8[((IOTA - 115) & 127)]) + ((0.000206061 * fVec8[((IOTA - 114) & 127)]) + ((0.00013795600000000001 * fVec8[((IOTA - 113) & 127)]) + ((4.38894e-05 * fVec8[((IOTA - 110) & 127)]) + ((0.00041225500000000004 * fVec8[((IOTA - 109) & 127)]) + ((0.000227209 * fVec8[((IOTA - 108) & 127)]) + ((0.00066430000000000005 * fVec8[((IOTA - 102) & 127)]) + ((0.00093781400000000003 * fVec8[((IOTA - 101) & 127)]) + ((0.00076159100000000005 * fVec8[((IOTA - 100) & 127)]) + ((0.00054271000000000007 * fVec8[((IOTA - 97) & 127)]) + ((0.00084564100000000006 * fVec8[((IOTA - 96) & 127)]) + ((0.000247972 * fVec8[((IOTA - 92) & 127)]) + ((0.0013567100000000001 * fVec8[((IOTA - 91) & 127)]) + ((0.00179301 * fVec8[((IOTA - 90) & 127)]) + ((0.00014971799999999999 * fVec8[((IOTA - 89) & 127)]) + ((0.0013197300000000001 * fVec8[((IOTA - 88) & 127)]) + ((0.00037485000000000003 * fVec8[((IOTA - 87) & 127)]) + ((0.00075088100000000012 * fVec8[((IOTA - 83) & 127)]) + ((0.000650408 * fVec8[((IOTA - 82) & 127)]) + ((4.1789000000000003e-05 * fVec8[((IOTA - 81) & 127)]) + ((0.00031279000000000002 * fVec8[((IOTA - 79) & 127)]) + ((0.00085027700000000009 * fVec8[((IOTA - 78) & 127)]) + ((0.0010684900000000001 * fVec8[((IOTA - 74) & 127)]) + ((0.00076376900000000008 * fVec8[((IOTA - 73) & 127)]) + ((0.0021818499999999999 * fVec8[((IOTA - 41) & 127)]) + ((0.013751599999999999 * fVec8[((IOTA - 38) & 127)]) + ((0.014187399999999999 * fVec8[((IOTA - 37) & 127)]) + ((0.0066966600000000001 * fVec8[((IOTA - 33) & 127)]) + ((0.0104107 * fVec8[((IOTA - 32) & 127)]) + ((0.015792199999999999 * fVec8[((IOTA - 29) & 127)]) + ((0.022154199999999999 * fVec8[((IOTA - 28) & 127)]) + ((0.0038254399999999998 * fVec8[((IOTA - 27) & 127)]) + ((0.028354799999999999 * fVec8[((IOTA - 25) & 127)]) + ((0.022252200000000003 * fVec8[((IOTA - 24) & 127)]) + ((0.0121111 * fVec8[((IOTA - 22) & 127)]) + ((0.032235100000000003 * fVec8[((IOTA - 18) & 127)]) + ((0.026861600000000003 * fVec8[((IOTA - 15) & 127)]) + ((0.017621899999999999 * fVec8[((IOTA - 14) & 127)]) + ((0.019559200000000002 * fVec8[((IOTA - 13) & 127)]) + ((0.0067998500000000005 * fVec8[((IOTA - 10) & 127)]) + ((0.00264073 * fVec8[((IOTA - 8) & 127)]) + ((0.0024590700000000003 * fVec8[((IOTA - 6) & 127)]) + ((0.00038372900000000003 * fVec8[((IOTA - 4) & 127)]) + ((0.000334903 * fVec8[((IOTA - 2) & 127)]) + ((5.3094000000000004e-05 * fVec8[((IOTA - 1) & 127)]) + ((2.1262000000000001e-05 * fTemp8) + ((0.0068894500000000001 * fVec8[((IOTA - 52) & 127)]) + ((0.000667396 * fVec8[((IOTA - 51) & 127)]) + ((0.00041839399999999999 * fVec8[((IOTA - 72) & 127)]) + ((6.3069200000000003e-05 * fVec8[((IOTA - 71) & 127)]) + ((0.00096322300000000003 * fVec8[((IOTA - 70) & 127)]) + ((0.00189788 * fVec8[((IOTA - 69) & 127)]) + ((0.00096244300000000011 * fVec8[((IOTA - 64) & 127)]) + ((0.00089314900000000009 * fVec8[((IOTA - 61) & 127)]) + ((0.00179447 * fVec8[((IOTA - 60) & 127)]) + ((0.000388658 * fVec8[((IOTA - 59) & 127)]) + ((0.00198825 * fVec8[((IOTA - 58) & 127)]) + ((0.0035999199999999999 * fVec8[((IOTA - 57) & 127)]) + ((0.0053912600000000001 * fVec8[((IOTA - 56) & 127)]) + ((0.00022144200000000003 * fVec8[((IOTA - 47) & 127)]) + ((0.00070796200000000002 * fVec8[((IOTA - 46) & 127)]) + ((0.0028989900000000002 * fVec8[((IOTA - 55) & 127)]) + ((0.0030239099999999999 * fVec8[((IOTA - 53) & 127)]) + ((6.4276900000000001e-05 * fVec11[((IOTA - 119) & 127)]) + ((9.164930000000001e-05 * fVec11[((IOTA - 118) & 127)]) + ((5.7182200000000003e-05 * fVec11[((IOTA - 117) & 127)]) + ((0.00012319500000000002 * fVec11[((IOTA - 116) & 127)]) + ((0.000211704 * fVec11[((IOTA - 115) & 127)]) + ((0.00034920800000000005 * fVec11[((IOTA - 114) & 127)]) + ((0.00033244200000000001 * fVec11[((IOTA - 113) & 127)]) + ((0.00025251100000000002 * fVec11[((IOTA - 112) & 127)]) + ((0.000318859 * fVec11[((IOTA - 111) & 127)]) + ((0.00039344000000000005 * fVec11[((IOTA - 110) & 127)]) + ((0.00033167 * fVec11[((IOTA - 109) & 127)]) + ((0.000465384 * fVec11[((IOTA - 108) & 127)]) + ((0.00039361300000000001 * fVec11[((IOTA - 107) & 127)]) + ((0.00042075400000000002 * fVec11[((IOTA - 106) & 127)]) + ((0.00037080799999999998 * fVec11[((IOTA - 105) & 127)]) + ((1.6587200000000003e-05 * fVec11[((IOTA - 103) & 127)]) + ((0.00091861900000000008 * fVec11[((IOTA - 102) & 127)]) + ((0.00025743700000000001 * fVec11[((IOTA - 101) & 127)]) + ((1.0584400000000002e-05 * fVec11[((IOTA - 98) & 127)]) + ((0.00040115600000000006 * fVec11[((IOTA - 97) & 127)]) + ((0.0014677900000000001 * fVec11[((IOTA - 90) & 127)]) + ((0.0010665400000000002 * fVec11[((IOTA - 89) & 127)]) + ((0.0011811600000000001 * fVec11[((IOTA - 88) & 127)]) + ((0.00093001200000000003 * fVec11[((IOTA - 87) & 127)]) + ((0.00025672299999999999 * fVec11[((IOTA - 85) & 127)]) + ((3.6903100000000002e-05 * fVec11[((IOTA - 83) & 127)]) + ((0.00082218600000000003 * fVec11[((IOTA - 82) & 127)]) + ((0.000382178 * fVec11[((IOTA - 81) & 127)]) + ((0.00056339900000000002 * fVec11[((IOTA - 78) & 127)]) + ((0.00030066700000000001 * fVec11[((IOTA - 77) & 127)]) + ((0.00075356000000000002 * fVec11[((IOTA - 76) & 127)]) + ((0.0017828800000000001 * fVec11[((IOTA - 75) & 127)]) + ((0.00080830800000000009 * fVec11[((IOTA - 74) & 127)]) + ((0.00187645 * fVec11[((IOTA - 70) & 127)]) + ((0.0013177900000000001 * fVec11[((IOTA - 69) & 127)]) + ((0.0026788900000000002 * fVec11[((IOTA - 68) & 127)]) + ((0.0014275899999999998 * fVec11[((IOTA - 67) & 127)]) + ((0.00077358800000000008 * fVec11[((IOTA - 65) & 127)]) + ((0.00030791900000000003 * fVec11[((IOTA - 64) & 127)]) + ((0.0018273299999999998 * fVec11[((IOTA - 59) & 127)]) + ((0.000741378 * fVec11[((IOTA - 58) & 127)]) + ((0.0021143999999999998 * fVec11[((IOTA - 56) & 127)]) + ((0.0023650199999999998 * fVec11[((IOTA - 55) & 127)]) + ((0.00137963 * fVec11[((IOTA - 46) & 127)]) + ((0.0022811300000000001 * fVec11[((IOTA - 45) & 127)]) + ((0.0077523699999999997 * fVec11[((IOTA - 44) & 127)]) + ((0.0087150300000000003 * fVec11[((IOTA - 43) & 127)]) + ((0.0035589599999999999 * fVec11[((IOTA - 40) & 127)]) + ((0.009139089999999999 * fVec11[((IOTA - 37) & 127)]) + ((0.0022023799999999999 * fVec11[((IOTA - 36) & 127)]) + ((0.00043536700000000003 * fVec11[((IOTA - 35) & 127)]) + ((0.0065159300000000005 * fVec11[((IOTA - 34) & 127)]) + ((0.0023690899999999999 * fVec11[((IOTA - 33) & 127)]) + ((0.017782599999999999 * fVec11[((IOTA - 32) & 127)]) + ((0.0058807299999999998 * fVec11[((IOTA - 31) & 127)]) + ((0.033734800000000002 * fVec11[((IOTA - 28) & 127)]) + ((0.00030687999999999999 * fVec11[((IOTA - 27) & 127)]) + ((0.027150500000000001 * fVec11[((IOTA - 25) & 127)]) + ((0.018427300000000001 * fVec11[((IOTA - 24) & 127)]) + ((0.037316000000000002 * fVec11[((IOTA - 18) & 127)]) + ((0.014252300000000001 * fVec11[((IOTA - 17) & 127)]) + ((0.019724700000000001 * fVec11[((IOTA - 15) & 127)]) + ((0.00039235000000000002 * fVec11[((IOTA - 14) & 127)]) + ((0.016522600000000002 * fVec11[((IOTA - 13) & 127)]) + ((0.0057737600000000002 * fVec11[((IOTA - 10) & 127)]) + ((0.00298131 * fVec11[((IOTA - 8) & 127)]) + ((0.0021578599999999997 * fVec11[((IOTA - 6) & 127)]) + ((0.0006632360000000001 * fVec11[((IOTA - 4) & 127)]) + ((0.00032355000000000003 * fVec11[((IOTA - 2) & 127)]) + ((4.3569800000000004e-05 * fVec11[((IOTA - 1) & 127)]) + ((2.0610900000000003e-05 * fTemp11) + ((7.3541399999999999e-06 * fVec10[((IOTA - 125) & 127)]) + ((1.9871400000000001e-05 * fVec10[((IOTA - 124) & 127)]) + ((1.68007e-05 * fVec10[((IOTA - 123) & 127)]) + ((4.0472700000000003e-05 * fVec10[((IOTA - 120) & 127)]) + ((2.0089899999999999e-06 * fVec10[((IOTA - 117) & 127)]) + ((9.4388500000000013e-05 * fVec10[((IOTA - 116) & 127)]) + ((4.0048000000000007e-05 * fVec10[((IOTA - 115) & 127)]) + ((0.00013508199999999999 * fVec10[((IOTA - 114) & 127)]) + ((1.4516400000000002e-05 * fVec10[((IOTA - 112) & 127)]) + ((4.0951399999999994e-06 * fVec10[((IOTA - 109) & 127)]) + ((0.00038113700000000003 * fVec10[((IOTA - 108) & 127)]) + ((0.00025360600000000002 * fVec10[((IOTA - 107) & 127)]) + ((8.5443400000000003e-05 * fVec10[((IOTA - 97) & 127)]) + ((0.00057432400000000008 * fVec10[((IOTA - 96) & 127)]) + ((0.00038692400000000002 * fVec10[((IOTA - 90) & 127)]) + ((0.0011128800000000001 * fVec10[((IOTA - 87) & 127)]) + ((0.00018401499999999999 * fVec10[((IOTA - 86) & 127)]) + ((8.3155100000000006e-05 * fVec10[((IOTA - 84) & 127)]) + ((0.000404712 * fVec10[((IOTA - 61) & 127)]) + ((0.00023097600000000001 * fVec10[((IOTA - 57) & 127)]) + ((0.00218833 * fVec10[((IOTA - 53) & 127)]) + ((0.0010072700000000002 * fVec10[((IOTA - 52) & 127)]) + ((0.00137375 * fVec10[((IOTA - 51) & 127)]) + ((0.00083448600000000006 * fVec10[((IOTA - 50) & 127)]) + ((0.00081536399999999995 * fVec10[((IOTA - 49) & 127)]) + ((0.00054543100000000008 * fVec10[((IOTA - 48) & 127)]) + ((0.0035057600000000001 * fVec10[((IOTA - 47) & 127)]) + ((0.0042825600000000004 * fVec10[((IOTA - 46) & 127)]) + ((0.0073746600000000008 * fVec10[((IOTA - 43) & 127)]) + ((0.0031813100000000001 * fVec10[((IOTA - 41) & 127)]) + ((0.0031712400000000001 * fVec10[((IOTA - 40) & 127)]) + ((0.0019387000000000002 * fVec10[((IOTA - 38) & 127)]) + ((0.010274799999999999 * fVec10[((IOTA - 37) & 127)]) + ((0.0160001 * fVec10[((IOTA - 34) & 127)]) + ((0.015218700000000002 * fVec10[((IOTA - 33) & 127)]) + ((0.0051433299999999998 * fVec10[((IOTA - 29) & 127)]) + ((0.019054000000000001 * fVec10[((IOTA - 28) & 127)]) + ((0.029220799999999998 * fVec10[((IOTA - 22) & 127)]) + ((0.019108199999999999 * fVec10[((IOTA - 20) & 127)]) + ((0.0101244 * fVec10[((IOTA - 19) & 127)]) + ((0.0243991 * fVec10[((IOTA - 17) & 127)]) + ((0.0071943800000000002 * fVec10[((IOTA - 16) & 127)]) + ((0.0065491000000000004 * fVec10[((IOTA - 14) & 127)]) + ((0.00345408 * fVec10[((IOTA - 13) & 127)]) + ((0.000172325 * fVec10[((IOTA - 11) & 127)]) + ((4.8090900000000004e-05 * fVec10[((IOTA - 10) & 127)]) + ((0.0012270600000000001 * fVec10[((IOTA - 8) & 127)]) + ((0.00054008200000000011 * fVec10[((IOTA - 4) & 127)]) + ((2.44107e-05 * fVec10[((IOTA - 2) & 127)]) + ((0.00055631600000000006 * fVec10[((IOTA - 83) & 127)]) + ((0.0013639500000000001 * fVec10[((IOTA - 82) & 127)]) + ((0.0011469 * fVec10[((IOTA - 81) & 127)]) + ((0.0022757299999999997 * fVec10[((IOTA - 78) & 127)]) + ((0.00076008400000000006 * fVec10[((IOTA - 77) & 127)]) + ((0.00049322500000000002 * fVec10[((IOTA - 75) & 127)]) + ((7.2509299999999999e-06 * fVec10[((IOTA - 74) & 127)]) + ((0.00102811 * fVec10[((IOTA - 73) & 127)]) + ((0.00084844100000000013 * fVec10[((IOTA - 72) & 127)]) + ((0.00073845000000000009 * fVec10[((IOTA - 71) & 127)]) + ((0.00068371000000000003 * fVec10[((IOTA - 70) & 127)]) + ((7.2511700000000006e-05 * fVec10[((IOTA - 69) & 127)]) + ((0.00078590300000000001 * fVec10[((IOTA - 66) & 127)]) + ((5.2891500000000002e-07 * fVec12[((IOTA - 126) & 127)]) + ((7.5122799999999995e-06 * fVec12[((IOTA - 125) & 127)]) + ((1.6393300000000001e-05 * fVec12[((IOTA - 124) & 127)]) + ((2.3049300000000003e-05 * fVec12[((IOTA - 123) & 127)]) + ((2.3497200000000003e-05 * fVec12[((IOTA - 122) & 127)]) + ((3.1160000000000007e-05 * fVec12[((IOTA - 121) & 127)]) + ((2.6824200000000003e-05 * fVec12[((IOTA - 120) & 127)]) + ((2.2243600000000002e-05 * fVec12[((IOTA - 117) & 127)]) + ((4.78325e-05 * fVec12[((IOTA - 116) & 127)]) + ((0.00083076200000000008 * fVec12[((IOTA - 90) & 127)]) + ((0.00094943600000000012 * fVec12[((IOTA - 89) & 127)]) + ((0.00016757299999999999 * fVec12[((IOTA - 88) & 127)]) + ((0.00022032700000000001 * fVec12[((IOTA - 87) & 127)]) + ((0.00016127700000000001 * fVec12[((IOTA - 86) & 127)]) + ((0.00191763 * fVec12[((IOTA - 85) & 127)]) + ((0.00189814 * fVec12[((IOTA - 84) & 127)]) + ((0.0011356999999999999 * fVec12[((IOTA - 82) & 127)]) + ((0.0018585000000000001 * fVec12[((IOTA - 81) & 127)]) + ((0.0012131000000000002 * fVec12[((IOTA - 80) & 127)]) + ((0.00025399999999999999 * fVec12[((IOTA - 79) & 127)]) + ((0.00035679200000000004 * fVec12[((IOTA - 78) & 127)]) + ((0.00097909699999999995 * fVec12[((IOTA - 77) & 127)]) + ((0.0021205199999999999 * fVec12[((IOTA - 76) & 127)]) + ((0.0008138310000000001 * fVec12[((IOTA - 68) & 127)]) + ((0.00074145100000000007 * fVec12[((IOTA - 62) & 127)]) + ((0.00047705600000000001 * fVec12[((IOTA - 61) & 127)]) + ((0.0034899700000000002 * fVec12[((IOTA - 60) & 127)]) + ((0.0025903700000000003 * fVec12[((IOTA - 59) & 127)]) + ((0.0027718299999999999 * fVec12[((IOTA - 58) & 127)]) + ((0.00315957 * fVec12[((IOTA - 57) & 127)]) + ((0.0041676700000000001 * fVec12[((IOTA - 56) & 127)]) + ((0.0040106600000000001 * fVec12[((IOTA - 55) & 127)]) + ((0.00024623100000000002 * fVec12[((IOTA - 54) & 127)]) + ((0.00327415 * fVec12[((IOTA - 53) & 127)]) + ((0.0026408399999999998 * fVec12[((IOTA - 52) & 127)]) + ((0.00050010199999999999 * fVec12[((IOTA - 50) & 127)]) + ((0.00058122499999999999 * fVec12[((IOTA - 49) & 127)]) + ((0.0072108700000000003 * fVec12[((IOTA - 44) & 127)]) + ((0.0018301400000000001 * fVec12[((IOTA - 43) & 127)]) + ((0.00058247500000000005 * fVec12[((IOTA - 38) & 127)]) + ((0.0085527399999999996 * fVec12[((IOTA - 37) & 127)]) + ((0.0064438700000000008 * fVec12[((IOTA - 35) & 127)]) + ((0.0030920700000000001 * fVec12[((IOTA - 31) & 127)]) + ((0.026311300000000003 * fVec12[((IOTA - 30) & 127)]) + ((0.0045847700000000002 * fVec12[((IOTA - 29) & 127)]) + ((0.014478500000000002 * fVec12[((IOTA - 26) & 127)]) + ((0.014742699999999999 * fVec12[((IOTA - 25) & 127)]) + ((0.0040668100000000006 * fVec12[((IOTA - 23) & 127)]) + ((0.010288200000000001 * fVec12[((IOTA - 21) & 127)]) + ((0.016673299999999999 * fVec12[((IOTA - 20) & 127)]) + ((0.0066805500000000004 * fVec12[((IOTA - 18) & 127)]) + ((0.00678927 * fVec12[((IOTA - 17) & 127)]) + ((0.0091073999999999999 * fVec12[((IOTA - 16) & 127)]) + ((0.0130569 * fVec12[((IOTA - 15) & 127)]) + ((0.0042139100000000004 * fVec12[((IOTA - 13) & 127)]) + ((0.00085768200000000002 * fVec12[((IOTA - 8) & 127)]) + ((0.00032995300000000002 * fVec12[((IOTA - 6) & 127)]) + ((0.00050478700000000003 * fVec12[((IOTA - 4) & 127)]) + ((0.000105713 * fVec12[((IOTA - 2) & 127)]) + ((2.5231199999999997e-06 * fTemp12) + ((0.00013262100000000003 * fVec12[((IOTA - 94) & 127)]) + ((0.00095934000000000015 * fVec10[((IOTA - 62) & 127)]) + ((7.5180799999999995e-07 * fVec13[((IOTA - 126) & 127)]) + ((7.4192699999999999e-06 * fVec13[((IOTA - 125) & 127)]) + ((7.8058900000000002e-06 * fVec13[((IOTA - 124) & 127)]) + ((7.6831699999999991e-06 * fVec13[((IOTA - 123) & 127)]) + ((4.3886799999999996e-07 * fVec13[((IOTA - 122) & 127)]) + ((2.5728499999999999e-05 * fVec13[((IOTA - 121) & 127)]) + ((3.8519100000000002e-06 * fVec13[((IOTA - 120) & 127)]) + ((8.4650599999999985e-06 * fVec13[((IOTA - 119) & 127)]) + ((4.1315700000000002e-05 * fVec13[((IOTA - 118) & 127)]) + ((0.00014156200000000002 * fVec13[((IOTA - 117) & 127)]) + ((0.00013138900000000001 * fVec13[((IOTA - 116) & 127)]) + ((2.3594499999999999e-05 * fVec13[((IOTA - 114) & 127)]) + ((5.5362000000000003e-05 * fVec13[((IOTA - 113) & 127)]) + ((4.5982300000000002e-05 * fVec13[((IOTA - 112) & 127)]) + ((0.00020877800000000001 * fVec13[((IOTA - 95) & 127)]) + ((0.0014440100000000001 * fVec13[((IOTA - 94) & 127)]) + ((0.00061235200000000004 * fVec12[((IOTA - 91) & 127)]) + ((7.5196800000000005e-05 * fVec13[((IOTA - 93) & 127)]) + ((0.00021774900000000002 * fVec13[((IOTA - 88) & 127)]) + ((0.00050493599999999999 * fVec13[((IOTA - 87) & 127)]) + ((0.00129094 * fVec13[((IOTA - 86) & 127)]) + ((0.00131875 * fVec13[((IOTA - 85) & 127)]) + ((0.00025035200000000002 * fVec13[((IOTA - 84) & 127)]) + ((0.0016813900000000001 * fVec13[((IOTA - 83) & 127)]) + ((0.00079413300000000004 * fVec13[((IOTA - 82) & 127)]) + ((0.00148109 * fVec13[((IOTA - 78) & 127)]) + ((0.00187816 * fVec13[((IOTA - 77) & 127)]) + ((0.0015205800000000001 * fVec13[((IOTA - 76) & 127)]) + ((0.00021227600000000001 * fVec13[((IOTA - 75) & 127)]) + ((0.00359524 * fVec13[((IOTA - 74) & 127)]) + ((0.0041234900000000005 * fVec13[((IOTA - 73) & 127)]) + ((0.00089886800000000004 * fVec13[((IOTA - 72) & 127)]) + ((0.0068680599999999996 * fVec13[((IOTA - 20) & 127)]) + ((0.0158055 * fVec13[((IOTA - 19) & 127)]) + ((0.0196975 * fVec13[((IOTA - 18) & 127)]) + ((0.012670500000000001 * fVec13[((IOTA - 17) & 127)]) + ((0.017149600000000001 * fVec13[((IOTA - 14) & 127)]) + ((0.00039274200000000002 * fVec13[((IOTA - 13) & 127)]) + ((0.00063474100000000008 * fVec13[((IOTA - 8) & 127)]) + ((0.00022428400000000002 * fVec13[((IOTA - 6) & 127)]) + ((0.00061255200000000004 * fVec13[((IOTA - 5) & 127)]) + ((0.000177443 * fVec13[((IOTA - 2) & 127)]) + ((2.38744e-05 * fVec13[((IOTA - 1) & 127)]) + ((0.045109500000000004 * fVec13[((IOTA - 24) & 127)]) + ((0.0018163100000000002 * fVec13[((IOTA - 65) & 127)]) + ((0.0033862499999999999 * fVec13[((IOTA - 62) & 127)]) + ((0.00095073000000000011 * fVec13[((IOTA - 61) & 127)]) + ((0.00032132100000000001 * fVec13[((IOTA - 55) & 127)]) + ((0.0011200699999999999 * fVec13[((IOTA - 53) & 127)]) + ((0.0028892500000000003 * fVec13[((IOTA - 50) & 127)]) + ((0.000955261 * fVec13[((IOTA - 49) & 127)]) + ((6.3343100000000014e-05 * fVec13[((IOTA - 47) & 127)]) + ((0.00694716 * fVec13[((IOTA - 44) & 127)]) + ((0.0026067200000000003 * fVec13[((IOTA - 43) & 127)]) + ((0.0036414500000000001 * fVec13[((IOTA - 42) & 127)]) + ((0.0024519899999999998 * fVec13[((IOTA - 41) & 127)]) + ((0.00093541399999999997 * fVec13[((IOTA - 39) & 127)]) + ((0.0018243199999999999 * fVec13[((IOTA - 37) & 127)]) + ((0.0072907000000000007 * fVec13[((IOTA - 36) & 127)]) + ((0.0082141100000000002 * fVec13[((IOTA - 35) & 127)]) + ((0.0015148500000000001 * fVec13[((IOTA - 33) & 127)]) + ((0.0039258799999999996 * fVec13[((IOTA - 32) & 127)]) + ((0.0083919700000000003 * fVec13[((IOTA - 29) & 127)]) + ((5.1650600000000005e-06 * fVec14[((IOTA - 122) & 127)]) + ((0.0130615 * fVec13[((IOTA - 23) & 127)]) + ((6.2288800000000013e-05 * fVec14[((IOTA - 118) & 127)]) + ((0.000107544 * fVec14[((IOTA - 117) & 127)]) + ((3.1495500000000004e-05 * fVec14[((IOTA - 116) & 127)]) + ((1.20038e-05 * fVec14[((IOTA - 115) & 127)]) + ((2.5178300000000003e-05 * fVec14[((IOTA - 114) & 127)]) + ((0.000470283 * fVec14[((IOTA - 113) & 127)]) + ((0.00042444499999999997 * fVec14[((IOTA - 112) & 127)]) + ((0.00022263799999999999 * fVec14[((IOTA - 111) & 127)]) + ((4.14666e-05 * fVec14[((IOTA - 109) & 127)]) + ((0.000344395 * fVec14[((IOTA - 108) & 127)]) + ((0.00011064600000000001 * fVec14[((IOTA - 106) & 127)]) + ((0.00030248100000000001 * fVec14[((IOTA - 105) & 127)]) + ((0.00041449600000000004 * fVec14[((IOTA - 104) & 127)]) + ((0.00012015400000000002 * fVec14[((IOTA - 100) & 127)]) + ((0.00051881099999999999 * fVec14[((IOTA - 99) & 127)]) + ((6.7970200000000002e-05 * fVec14[((IOTA - 98) & 127)]) + ((0.00034321600000000003 * fVec14[((IOTA - 95) & 127)]) + ((0.00044988999999999999 * fVec14[((IOTA - 88) & 127)]) + ((0.00256128 * fVec14[((IOTA - 87) & 127)]) + ((0.0023223300000000001 * fVec14[((IOTA - 86) & 127)]) + ((0.00014500400000000001 * fVec14[((IOTA - 83) & 127)]) + ((0.0011457399999999999 * fVec14[((IOTA - 79) & 127)]) + ((0.00095134899999999999 * fVec14[((IOTA - 78) & 127)]) + ((0.00214124 * fVec14[((IOTA - 75) & 127)]) + ((0.0040635300000000001 * fVec14[((IOTA - 74) & 127)]) + ((0.00039275000000000003 * fVec14[((IOTA - 73) & 127)]) + ((0.0021799499999999999 * fVec14[((IOTA - 71) & 127)]) + ((0.0024713999999999999 * fVec14[((IOTA - 70) & 127)]) + ((0.00148032 * fVec14[((IOTA - 69) & 127)]) + ((0.00027506900000000002 * fVec14[((IOTA - 42) & 127)]) + ((0.0020045600000000003 * fVec14[((IOTA - 41) & 127)]) + ((0.00894526 * fVec14[((IOTA - 38) & 127)]) + ((0.0040081499999999994 * fVec14[((IOTA - 37) & 127)]) + ((0.0022934100000000001 * fVec14[((IOTA - 36) & 127)]) + ((0.0078181599999999993 * fVec14[((IOTA - 35) & 127)]) + ((0.0060735200000000007 * fVec14[((IOTA - 34) & 127)]) + ((0.020101600000000001 * fVec14[((IOTA - 33) & 127)]) + ((0.011363099999999999 * fVec14[((IOTA - 32) & 127)]) + ((0.0048202200000000001 * fVec14[((IOTA - 31) & 127)]) + ((0.015268600000000002 * fVec14[((IOTA - 29) & 127)]) + ((0.054586100000000005 * fVec14[((IOTA - 28) & 127)]) + ((0.0076356100000000001 * fVec14[((IOTA - 27) & 127)]) + ((0.0064172300000000003 * fVec14[((IOTA - 24) & 127)]) + ((0.025168300000000001 * fVec14[((IOTA - 23) & 127)]) + ((0.0044173700000000003 * fVec14[((IOTA - 14) & 127)]) + ((0.047073999999999998 * fVec14[((IOTA - 13) & 127)]) + ((0.050409800000000005 * fVec14[((IOTA - 12) & 127)]) + ((0.0088254800000000001 * fVec14[((IOTA - 11) & 127)]) + ((0.0028401100000000003 * fVec14[((IOTA - 9) & 127)]) + ((0.0010134199999999999 * fVec14[((IOTA - 7) & 127)]) + ((0.00048772500000000005 * fVec14[((IOTA - 5) & 127)]) + ((0.00019671200000000001 * fVec14[((IOTA - 3) & 127)]) + ((1.9656400000000004e-05 * fVec14[((IOTA - 1) & 127)]) + ((1.1230600000000001e-05 * fTemp14) + ((0.0017609399999999999 * fVec14[((IOTA - 47) & 127)]) + ((0.00048183400000000005 * fVec14[((IOTA - 66) & 127)]) + ((0.0020025400000000001 * fVec14[((IOTA - 65) & 127)]) + ((0.0024424899999999999 * fVec14[((IOTA - 64) & 127)]) + ((0.0017324700000000001 * fVec14[((IOTA - 63) & 127)]) + ((0.00083292900000000005 * fVec14[((IOTA - 60) & 127)]) + ((4.4803300000000005e-05 * fVec14[((IOTA - 59) & 127)]) + ((0.000591623 * fVec14[((IOTA - 56) & 127)]) + ((1.2052900000000001e-05 * fVec15[((IOTA - 124) & 127)]) + ((7.5001999999999998e-06 * fVec15[((IOTA - 118) & 127)]) + ((3.8559700000000003e-05 * fVec15[((IOTA - 117) & 127)]) + ((0.00012688900000000001 * fVec15[((IOTA - 113) & 127)]) + ((7.1436400000000013e-05 * fVec15[((IOTA - 112) & 127)]) + ((8.3677800000000007e-05 * fVec15[((IOTA - 111) & 127)]) + ((0.000142659 * fVec15[((IOTA - 110) & 127)]) + ((0.00011731000000000001 * fVec15[((IOTA - 107) & 127)]) + ((0.00029102700000000002 * fVec15[((IOTA - 100) & 127)]) + ((0.000736785 * fVec15[((IOTA - 99) & 127)]) + ((0.00088049500000000002 * fVec15[((IOTA - 98) & 127)]) + ((0.00076679700000000005 * fVec15[((IOTA - 94) & 127)]) + ((0.0012207399999999999 * fVec15[((IOTA - 93) & 127)]) + ((0.00193305 * fVec15[((IOTA - 92) & 127)]) + ((0.00063554600000000007 * fVec15[((IOTA - 91) & 127)]) + ((0.00026668900000000002 * fVec15[((IOTA - 89) & 127)]) + ((0.00319579 * fVec15[((IOTA - 88) & 127)]) + ((0.0011806200000000001 * fVec15[((IOTA - 87) & 127)]) + ((0.00029940000000000001 * fVec15[((IOTA - 82) & 127)]) + ((0.0028643700000000002 * fVec15[((IOTA - 81) & 127)]) + ((0.0023513099999999997 * fVec15[((IOTA - 80) & 127)]) + ((0.0017465 * fVec15[((IOTA - 77) & 127)]) + ((0.00021222400000000003 * fVec15[((IOTA - 76) & 127)]) + ((0.00041598900000000002 * fVec15[((IOTA - 73) & 127)]) + ((0.00030018800000000001 * fVec15[((IOTA - 72) & 127)]) + ((0.0026737700000000002 * fVec15[((IOTA - 53) & 127)]) + ((0.0024428499999999999 * fVec15[((IOTA - 50) & 127)]) + ((0.0025408400000000004 * fVec15[((IOTA - 49) & 127)]) + ((0.0022300800000000002 * fVec15[((IOTA - 48) & 127)]) + ((0.00082497000000000007 * fVec15[((IOTA - 47) & 127)]) + ((0.0010773099999999999 * fVec15[((IOTA - 46) & 127)]) + ((6.9417900000000012e-05 * fVec15[((IOTA - 45) & 127)]) + ((0.0043865800000000002 * fVec15[((IOTA - 41) & 127)]) + ((0.0046617300000000002 * fVec15[((IOTA - 40) & 127)]) + ((0.0029096 * fVec15[((IOTA - 39) & 127)]) + ((0.00817616 * fVec15[((IOTA - 36) & 127)]) + ((0.0060419900000000006 * fVec15[((IOTA - 35) & 127)]) + ((0.0085528800000000006 * fVec15[((IOTA - 34) & 127)]) + ((0.030350199999999997 * fVec15[((IOTA - 27) & 127)]) + ((0.00316892 * fVec15[((IOTA - 24) & 127)]) + ((0.025193300000000002 * fVec15[((IOTA - 23) & 127)]) + ((0.0021023399999999999 * fVec15[((IOTA - 22) & 127)]) + ((0.0073916000000000008 * fVec15[((IOTA - 20) & 127)]) + ((0.017867400000000002 * fVec15[((IOTA - 17) & 127)]) + ((0.010231500000000001 * fVec15[((IOTA - 16) & 127)]) + ((0.00146583 * fVec15[((IOTA - 14) & 127)]) + ((0.0064234600000000006 * fVec15[((IOTA - 13) & 127)]) + ((0.00078510700000000006 * fVec15[((IOTA - 8) & 127)]) + ((0.00035025799999999999 * fVec15[((IOTA - 5) & 127)]) + ((0.00013798200000000001 * fVec15[((IOTA - 4) & 127)]) + ((3.8530500000000007e-05 * fVec15[((IOTA - 1) & 127)]) + ((0.0015227400000000001 * fVec15[((IOTA - 60) & 127)]) + ((0.00373734 * fVec15[((IOTA - 59) & 127)]) + ((0.0014280500000000002 * fVec15[((IOTA - 58) & 127)]) + ((0.00152436 * fVec15[((IOTA - 69) & 127)]) + ((0.00128761 * fVec15[((IOTA - 62) & 127)]) + ((1.6178099999999998e-07 * fVec16[((IOTA - 125) & 127)]) + ((1.7421599999999998e-07 * fVec16[((IOTA - 124) & 127)]) + ((0.00021674500000000001 * fVec16[((IOTA - 115) & 127)]) + ((0.00028279200000000003 * fVec16[((IOTA - 114) & 127)]) + ((5.2515800000000003e-05 * fVec16[((IOTA - 113) & 127)]) + ((0.000133249 * fVec16[((IOTA - 112) & 127)]) + ((0.00038273500000000004 * fVec16[((IOTA - 111) & 127)]) + ((0.00043214699999999997 * fVec16[((IOTA - 110) & 127)]) + ((0.00027134800000000003 * fVec16[((IOTA - 109) & 127)]) + ((3.3736500000000005e-05 * fVec16[((IOTA - 107) & 127)]) + ((6.6819399999999999e-05 * fVec16[((IOTA - 106) & 127)]) + ((0.00038405399999999999 * fVec16[((IOTA - 103) & 127)]) + ((0.0010818799999999999 * fVec16[((IOTA - 102) & 127)]) + ((0.000419827 * fVec16[((IOTA - 101) & 127)]) + ((0.000472497 * fVec16[((IOTA - 100) & 127)]) + ((0.00040792200000000007 * fVec16[((IOTA - 99) & 127)]) + ((0.0017046100000000001 * fVec16[((IOTA - 91) & 127)]) + ((0.0017854000000000001 * fVec16[((IOTA - 90) & 127)]) + ((0.000146465 * fVec16[((IOTA - 89) & 127)]) + ((0.0011246299999999999 * fVec16[((IOTA - 88) & 127)]) + ((0.000121433 * fVec16[((IOTA - 85) & 127)]) + ((0.0015572399999999999 * fVec16[((IOTA - 84) & 127)]) + ((0.00286542 * fVec16[((IOTA - 81) & 127)]) + ((0.0035030399999999998 * fVec16[((IOTA - 80) & 127)]) + ((0.0013357099999999999 * fVec16[((IOTA - 79) & 127)]) + ((0.0028925200000000004 * fVec16[((IOTA - 71) & 127)]) + ((0.00488274 * fVec16[((IOTA - 70) & 127)]) + ((0.0016347499999999999 * fVec16[((IOTA - 69) & 127)]) + ((0.0014653400000000001 * fVec16[((IOTA - 68) & 127)]) + ((0.0016001099999999999 * fVec16[((IOTA - 67) & 127)]) + ((2.4437900000000002e-05 * fVec16[((IOTA - 63) & 127)]) + ((0.00012724599999999999 * fVec16[((IOTA - 62) & 127)]) + ((0.00045853400000000008 * fVec16[((IOTA - 58) & 127)]) + ((0.0015582 * fVec16[((IOTA - 57) & 127)]) + ((0.0032972399999999999 * fVec16[((IOTA - 39) & 127)]) + ((0.010154000000000002 * fVec16[((IOTA - 38) & 127)]) + ((0.019400900000000002 * fVec16[((IOTA - 37) & 127)]) + ((0.0108342 * fVec16[((IOTA - 36) & 127)]) + ((0.021263200000000003 * fVec16[((IOTA - 34) & 127)]) + ((0.020498300000000001 * fVec16[((IOTA - 33) & 127)]) + ((0.0187685 * fVec16[((IOTA - 32) & 127)]) + ((0.0086318699999999998 * fVec16[((IOTA - 31) & 127)]) + ((0.0119454 * fVec16[((IOTA - 30) & 127)]) + ((0.024111899999999999 * fVec16[((IOTA - 29) & 127)]) + ((0.0154331 * fVec16[((IOTA - 28) & 127)]) + ((0.011326600000000001 * fVec16[((IOTA - 27) & 127)]) + ((0.0041025300000000001 * fVec16[((IOTA - 26) & 127)]) + ((0.035046500000000001 * fVec16[((IOTA - 25) & 127)]) + ((0.0109835 * fVec16[((IOTA - 24) & 127)]) + ((0.008624660000000001 * fVec16[((IOTA - 21) & 127)]) + ((0.0030574400000000002 * fVec16[((IOTA - 17) & 127)]) + ((0.016297900000000001 * fVec16[((IOTA - 14) & 127)]) + ((0.053418799999999995 * fVec16[((IOTA - 13) & 127)]) + ((0.071327800000000011 * fVec16[((IOTA - 12) & 127)]) + ((0.0074569299999999996 * fVec16[((IOTA - 11) & 127)]) + ((0.00196452 * fVec16[((IOTA - 9) & 127)]) + ((1.4284499999999999e-06 * fVec16[((IOTA - 7) & 127)]) + ((0.00065664800000000002 * fVec16[((IOTA - 5) & 127)]) + ((0.00033454700000000003 * fVec16[((IOTA - 3) & 127)]) + ((4.19701e-05 * fVec16[((IOTA - 1) & 127)]) + ((1.6075699999999999e-05 * fTemp16) + ((0.0015001299999999999 * fVec16[((IOTA - 56) & 127)]) + ((0.0012102200000000001 * fVec16[((IOTA - 55) & 127)]) + ((2.1103299999999999e-06 * fVec17[((IOTA - 125) & 127)]) + ((5.5217400000000003e-06 * fVec17[((IOTA - 124) & 127)]) + ((3.11789e-06 * fVec17[((IOTA - 123) & 127)]) + ((9.0368300000000007e-05 * fVec17[((IOTA - 119) & 127)]) + ((0.00011532 * fVec17[((IOTA - 118) & 127)]) + ((1.9649999999999998e-06 * fVec17[((IOTA - 116) & 127)]) + ((0.00021442500000000002 * fVec17[((IOTA - 115) & 127)]) + ((0.00030905200000000004 * fVec17[((IOTA - 114) & 127)]) + ((4.7581900000000006e-05 * fVec17[((IOTA - 113) & 127)]) + ((0.00016311100000000002 * fVec17[((IOTA - 112) & 127)]) + ((0.00016924900000000001 * fVec17[((IOTA - 111) & 127)]) + ((3.0118399999999995e-06 * fVec17[((IOTA - 109) & 127)]) + ((0.00053920599999999997 * fVec17[((IOTA - 108) & 127)]) + ((0.00034291200000000001 * fVec17[((IOTA - 107) & 127)]) + ((0.00026214100000000002 * fVec17[((IOTA - 106) & 127)]) + ((0.00014172800000000001 * (fVec21[((IOTA - 109) & 127)] - fVec18[((IOTA - 78) & 127)])) + ((0.00060378299999999999 * fVec17[((IOTA - 78) & 127)]) + ((0.00041387999999999999 * fVec17[((IOTA - 102) & 127)]) + ((0.000138245 * fVec17[((IOTA - 101) & 127)]) + ((0.000478309 * fVec17[((IOTA - 100) & 127)]) + ((0.00091847499999999998 * fVec17[((IOTA - 99) & 127)]) + ((0.0013005599999999999 * fVec17[((IOTA - 98) & 127)]) + ((0.00113754 * fVec17[((IOTA - 97) & 127)]) + ((0.0026714199999999999 * fVec17[((IOTA - 93) & 127)]) + ((0.00023320700000000001 * fVec17[((IOTA - 105) & 127)]) + ((0.0021342599999999998 * fVec17[((IOTA - 92) & 127)]) + ((0.00024966300000000001 * fVec17[((IOTA - 90) & 127)]) + ((0.0023507699999999999 * fVec17[((IOTA - 89) & 127)]) + ((0.0046170200000000003 * fVec17[((IOTA - 88) & 127)]) + ((0.0013482500000000001 * fVec17[((IOTA - 87) & 127)]) + ((0.0010940099999999999 * fVec17[((IOTA - 85) & 127)]) + ((0.0017591500000000001 * fVec17[((IOTA - 84) & 127)]) + ((0.00040582000000000004 * fVec17[((IOTA - 83) & 127)]) + ((0.00225807 * fVec17[((IOTA - 82) & 127)]) + ((0.00237535 * fVec17[((IOTA - 81) & 127)]) + ((0.000120611 * fVec17[((IOTA - 80) & 127)]) + ((0.00026133000000000005 * fVec17[((IOTA - 73) & 127)]) + ((0.0020077300000000001 * fVec17[((IOTA - 63) & 127)]) + ((0.0032089100000000001 * fVec17[((IOTA - 62) & 127)]) + ((0.0010079800000000001 * fVec17[((IOTA - 61) & 127)]) + ((0.00063087099999999997 * fVec17[((IOTA - 60) & 127)]) + ((0.0044288800000000005 * fVec17[((IOTA - 59) & 127)]) + ((0.0047678900000000003 * fVec17[((IOTA - 58) & 127)]) + ((0.0024688500000000003 * fVec17[((IOTA - 57) & 127)]) + ((0.00277838 * fVec17[((IOTA - 56) & 127)]) + ((0.0075612199999999996 * fVec17[((IOTA - 55) & 127)]) + ((0.00761051 * fVec17[((IOTA - 54) & 127)]) + ((0.0018776900000000002 * fVec17[((IOTA - 52) & 127)]) + ((0.0082384199999999998 * fVec17[((IOTA - 51) & 127)]) + ((0.0050166199999999994 * fVec17[((IOTA - 50) & 127)]) + ((0.0032369600000000001 * fVec17[((IOTA - 49) & 127)]) + ((0.0040625900000000005 * fVec17[((IOTA - 48) & 127)]) + ((0.011856999999999999 * fVec17[((IOTA - 47) & 127)]) + ((0.0091953899999999995 * fVec17[((IOTA - 46) & 127)]) + ((0.0061361499999999999 * fVec17[((IOTA - 45) & 127)]) + ((0.015667299999999999 * fVec17[((IOTA - 44) & 127)]) + ((0.0121152 * fVec17[((IOTA - 43) & 127)]) + ((0.0102805 * fVec17[((IOTA - 41) & 127)]) + ((0.0249734 * fVec17[((IOTA - 40) & 127)]) + ((0.0028042699999999998 * fVec17[((IOTA - 39) & 127)]) + ((0.0112762 * fVec17[((IOTA - 37) & 127)]) + ((0.0070063399999999998 * fVec17[((IOTA - 36) & 127)]) + ((0.0037140800000000002 * fVec17[((IOTA - 35) & 127)]) + ((0.0077227400000000005 * fVec17[((IOTA - 32) & 127)]) + ((0.0031788599999999999 * fVec17[((IOTA - 31) & 127)]) + ((0.0055445599999999996 * fVec17[((IOTA - 25) & 127)]) + ((0.014456700000000001 * fVec17[((IOTA - 21) & 127)]) + ((0.043969699999999994 * fVec17[((IOTA - 17) & 127)]) + ((0.010103500000000001 * fVec17[((IOTA - 16) & 127)]) + ((0.026084999999999997 * fVec17[((IOTA - 15) & 127)]) + ((0.040577500000000002 * fVec17[((IOTA - 14) & 127)]) + ((0.0703236 * fVec17[((IOTA - 13) & 127)]) + ((0.086424600000000004 * fVec17[((IOTA - 12) & 127)]) + ((0.00526349 * fVec17[((IOTA - 11) & 127)]) + ((0.0021171000000000002 * fVec17[((IOTA - 9) & 127)]) + ((0.00027211800000000001 * fVec17[((IOTA - 7) & 127)]) + ((0.00074305500000000006 * fVec17[((IOTA - 5) & 127)]) + ((0.00070165199999999998 * fVec17[((IOTA - 3) & 127)]) + ((7.2115300000000004e-05 * fVec17[((IOTA - 1) & 127)]) + (((6.8184199999999995e-06 * fVec18[((IOTA - 124) & 127)]) + ((9.6015999999999997e-06 * fVec18[((IOTA - 123) & 127)]) + ((2.6161300000000003e-05 * fVec18[((IOTA - 122) & 127)]) + ((7.66841e-06 * fVec18[((IOTA - 120) & 127)]) + ((9.9956200000000017e-05 * fVec18[((IOTA - 119) & 127)]) + ((9.8288800000000007e-05 * fVec18[((IOTA - 118) & 127)]) + ((0.00016569499999999999 * fVec18[((IOTA - 115) & 127)]) + ((0.000131304 * fVec18[((IOTA - 114) & 127)]) + ((7.4421400000000012e-05 * fVec18[((IOTA - 113) & 127)]) + ((9.0750500000000005e-05 * fVec18[((IOTA - 109) & 127)]) + ((0.00081881900000000014 * fVec18[((IOTA - 96) & 127)]) + ((0.0015964400000000002 * fVec18[((IOTA - 95) & 127)]) + ((3.5872199999999999e-05 * fVec18[((IOTA - 92) & 127)]) + ((0.0020068299999999998 * fVec18[((IOTA - 91) & 127)]) + ((0.00050415000000000008 * fVec18[((IOTA - 90) & 127)]) + ((0.00041316100000000005 * fVec18[((IOTA - 89) & 127)]) + ((0.0011488700000000002 * fVec18[((IOTA - 88) & 127)]) + ((0.0011271300000000001 * fVec18[((IOTA - 87) & 127)]) + ((0.0018691199999999999 * fVec18[((IOTA - 81) & 127)]) + ((0.0023870700000000003 * fVec18[((IOTA - 80) & 127)]) + ((0.0014690600000000001 * fVec18[((IOTA - 79) & 127)]) + ((0.00020293100000000003 * fVec18[((IOTA - 75) & 127)]) + ((0.00042256999999999999 * fVec18[((IOTA - 74) & 127)]) + ((4.8196899999999999e-05 * fVec18[((IOTA - 73) & 127)]) + ((0.00081876599999999996 * fVec18[((IOTA - 69) & 127)]) + ((0.00116132 * fVec18[((IOTA - 65) & 127)]) + ((0.0012919000000000001 * fVec18[((IOTA - 60) & 127)]) + ((0.0018522 * fVec18[((IOTA - 53) & 127)]) + ((0.0040265300000000004 * fVec18[((IOTA - 52) & 127)]) + ((0.00164123 * fVec18[((IOTA - 49) & 127)]) + ((0.0035543000000000003 * fVec18[((IOTA - 48) & 127)]) + ((0.0019447000000000002 * fVec18[((IOTA - 47) & 127)]) + ((0.0045421799999999998 * fVec18[((IOTA - 46) & 127)]) + ((0.0032057800000000001 * fVec18[((IOTA - 45) & 127)]) + ((0.0098560599999999998 * fVec18[((IOTA - 43) & 127)]) + ((0.0055212400000000002 * fVec18[((IOTA - 42) & 127)]) + ((0.0039102499999999997 * fVec18[((IOTA - 40) & 127)]) + ((0.0014029000000000001 * fVec18[((IOTA - 39) & 127)]) + ((0.00081971100000000009 * fVec18[((IOTA - 37) & 127)]) + ((0.015326500000000002 * fVec18[((IOTA - 34) & 127)]) + ((0.0039000900000000002 * fVec18[((IOTA - 33) & 127)]) + ((0.0107983 * fVec18[((IOTA - 30) & 127)]) + ((0.0016720200000000002 * fVec18[((IOTA - 28) & 127)]) + ((0.0115642 * fVec18[((IOTA - 27) & 127)]) + ((0.0083424600000000012 * fVec18[((IOTA - 24) & 127)]) + ((0.0016058699999999999 * fVec18[((IOTA - 23) & 127)]) + ((0.00574575 * fVec18[((IOTA - 22) & 127)]) + ((0.0048227900000000004 * fVec18[((IOTA - 21) & 127)]) + ((0.0053663600000000006 * fVec18[((IOTA - 20) & 127)]) + ((0.0110708 * fVec18[((IOTA - 17) & 127)]) + ((0.0074311999999999998 * fVec18[((IOTA - 16) & 127)]) + ((0.00037238400000000002 * fVec18[((IOTA - 14) & 127)]) + ((0.00252045 * fVec18[((IOTA - 13) & 127)]) + ((0.00052853700000000004 * fVec18[((IOTA - 8) & 127)]) + ((0.00017706000000000002 * fVec18[((IOTA - 5) & 127)]) + ((0.00017067000000000002 * fVec18[((IOTA - 4) & 127)]) + ((2.8269799999999997e-06 * fVec18[((IOTA - 1) & 127)]) + ((0.0028610799999999998 * fVec18[((IOTA - 84) & 127)]) + ((0.00119961 * fVec18[((IOTA - 83) & 127)]) + ((3.5305499999999996e-06 * fVec19[((IOTA - 125) & 127)]) + ((4.1155299999999994e-06 * fVec19[((IOTA - 124) & 127)]) + ((8.4151000000000001e-06 * fVec19[((IOTA - 123) & 127)]) + ((2.8368800000000002e-05 * fVec19[((IOTA - 122) & 127)]) + ((6.1171800000000003e-05 * fVec19[((IOTA - 121) & 127)]) + ((4.5063100000000006e-05 * fVec19[((IOTA - 120) & 127)]) + ((0.00013187999999999999 * fVec19[((IOTA - 117) & 127)]) + ((9.0214000000000001e-05 * fVec19[((IOTA - 116) & 127)]) + ((4.5684500000000006e-05 * fVec19[((IOTA - 115) & 127)]) + ((0.00010922300000000001 * fVec19[((IOTA - 114) & 127)]) + ((0.00012787900000000001 * fVec19[((IOTA - 113) & 127)]) + ((0.00010810400000000001 * fVec19[((IOTA - 112) & 127)]) + ((8.4602100000000008e-05 * fVec19[((IOTA - 111) & 127)]) + ((0.00014129499999999999 * fVec19[((IOTA - 103) & 127)]) + ((0.0011123800000000001 * fVec18[((IOTA - 82) & 127)]) + ((0.0011713800000000001 * fVec19[((IOTA - 96) & 127)]) + ((0.00048376700000000002 * fVec19[((IOTA - 95) & 127)]) + ((0.00040982500000000005 * fVec19[((IOTA - 89) & 127)]) + ((0.00192194 * fVec19[((IOTA - 86) & 127)]) + ((0.00102436 * fVec19[((IOTA - 85) & 127)]) + ((0.00100778 * fVec19[((IOTA - 81) & 127)]) + ((0.00035581800000000004 * fVec19[((IOTA - 80) & 127)]) + ((0.00108387 * fVec19[((IOTA - 78) & 127)]) + ((0.00355741 * fVec19[((IOTA - 77) & 127)]) + ((0.00203951 * fVec19[((IOTA - 76) & 127)]) + ((0.00099792900000000005 * fVec19[((IOTA - 74) & 127)]) + ((0.0044921400000000004 * fVec19[((IOTA - 73) & 127)]) + ((0.00086068200000000009 * fVec19[((IOTA - 69) & 127)]) + ((0.0026953699999999999 * fVec19[((IOTA - 68) & 127)]) + ((0.00069267700000000005 * fVec19[((IOTA - 67) & 127)]) + ((0.0014122200000000001 * fVec19[((IOTA - 62) & 127)]) + ((0.00059297400000000002 * fVec19[((IOTA - 61) & 127)]) + ((0.00053443700000000002 * fVec19[((IOTA - 59) & 127)]) + ((0.0013940900000000002 * fVec19[((IOTA - 58) & 127)]) + ((0.00909628 * fVec19[((IOTA - 50) & 127)]) + ((0.0036924600000000003 * fVec19[((IOTA - 49) & 127)]) + ((0.0046017100000000002 * fVec19[((IOTA - 48) & 127)]) + ((0.0073180300000000005 * fVec19[((IOTA - 47) & 127)]) + ((0.0070144200000000004 * fVec19[((IOTA - 46) & 127)]) + ((0.0020962000000000003 * fVec19[((IOTA - 45) & 127)]) + ((0.0052343400000000005 * fVec19[((IOTA - 44) & 127)]) + ((0.0071723899999999998 * fVec19[((IOTA - 43) & 127)]) + ((0.0036162899999999999 * fVec19[((IOTA - 42) & 127)]) + ((0.010498400000000001 * fVec19[((IOTA - 41) & 127)]) + ((0.0021260799999999998 * fVec19[((IOTA - 40) & 127)]) + ((0.0065524800000000003 * fVec19[((IOTA - 38) & 127)]) + ((0.011496599999999999 * fVec19[((IOTA - 35) & 127)]) + ((0.0010427100000000001 * fVec19[((IOTA - 34) & 127)]) + ((0.0092546800000000012 * fVec19[((IOTA - 31) & 127)]) + ((0.0026388100000000001 * fVec19[((IOTA - 27) & 127)]) + ((0.0128167 * fVec19[((IOTA - 23) & 127)]) + ((0.011590800000000002 * fVec19[((IOTA - 17) & 127)]) + ((0.0038800599999999998 * fVec19[((IOTA - 16) & 127)]) + ((0.022263399999999999 * fVec19[((IOTA - 15) & 127)]) + ((0.020153300000000002 * fVec19[((IOTA - 14) & 127)]) + ((0.042437800000000005 * fVec19[((IOTA - 13) & 127)]) + ((0.047133599999999998 * fVec19[((IOTA - 12) & 127)]) + ((0.00567696 * fVec19[((IOTA - 11) & 127)]) + ((0.00143681 * fVec19[((IOTA - 9) & 127)]) + ((0.00086101400000000001 * fVec19[((IOTA - 7) & 127)]) + ((0.00058492199999999998 * fVec19[((IOTA - 5) & 127)]) + ((6.7829099999999997e-06 * fVec19[((IOTA - 4) & 127)]) + ((0.00025529600000000002 * fVec19[((IOTA - 3) & 127)]) + ((2.9285600000000003e-05 * fVec19[((IOTA - 1) & 127)]) + ((3.8661599999999993e-06 * fTemp19) + ((0.0012833600000000001 * fVec19[((IOTA - 57) & 127)]) + ((0.0031110899999999999 * fVec19[((IOTA - 56) & 127)]) + ((0.0050713199999999998 * fVec19[((IOTA - 55) & 127)]) + ((0.0050443700000000003 * fVec19[((IOTA - 54) & 127)]) + ((0.00419002 * fVec19[((IOTA - 53) & 127)]) + ((1.70851e-05 * fVec20[((IOTA - 122) & 127)]) + ((3.0657300000000002e-05 * fVec20[((IOTA - 121) & 127)]) + ((5.3340699999999993e-07 * fVec20[((IOTA - 120) & 127)]) + ((1.03751e-05 * fVec20[((IOTA - 118) & 127)]) + ((0.0032877399999999999 * fVec19[((IOTA - 51) & 127)]) + ((8.3314900000000018e-05 * fVec20[((IOTA - 117) & 127)]) + ((9.1851000000000012e-05 * fVec20[((IOTA - 112) & 127)]) + ((2.7205700000000003e-05 * fVec20[((IOTA - 111) & 127)]) + ((0.00152143 * fVec20[((IOTA - 82) & 127)]) + ((0.0032921200000000004 * fVec20[((IOTA - 81) & 127)]) + ((0.00193753 * fVec20[((IOTA - 80) & 127)]) + ((0.00062551900000000005 * fVec20[((IOTA - 79) & 127)]) + ((0.00096127300000000012 * fVec20[((IOTA - 70) & 127)]) + ((0.0042903999999999998 * fVec20[((IOTA - 69) & 127)]) + ((0.0037726500000000002 * fVec20[((IOTA - 68) & 127)]) + ((0.00041918000000000001 * fVec20[((IOTA - 66) & 127)]) + ((0.00047510500000000003 * fVec20[((IOTA - 63) & 127)]) + ((0.0017495700000000002 * fVec20[((IOTA - 62) & 127)]) + ((0.0013881099999999999 * fVec20[((IOTA - 61) & 127)]) + ((0.00142376 * fVec20[((IOTA - 59) & 127)]) + ((0.0013234399999999999 * fVec20[((IOTA - 58) & 127)]) + ((0.0023363800000000003 * fVec20[((IOTA - 57) & 127)]) + ((0.0047624399999999997 * fVec20[((IOTA - 56) & 127)]) + ((0.00035963800000000001 * fVec20[((IOTA - 55) & 127)]) + ((0.0014325799999999999 * fVec20[((IOTA - 53) & 127)]) + ((0.0035146700000000001 * fVec20[((IOTA - 50) & 127)]) + ((0.00013482199999999999 * fVec20[((IOTA - 46) & 127)]) + ((0.0031359700000000001 * fVec20[((IOTA - 44) & 127)]) + ((0.0033774600000000001 * fVec20[((IOTA - 43) & 127)]) + ((0.00043131800000000003 * fVec20[((IOTA - 41) & 127)]) + ((0.0017748 * fVec20[((IOTA - 37) & 127)]) + ((0.0095376600000000016 * fVec20[((IOTA - 34) & 127)]) + ((0.011073200000000002 * fVec20[((IOTA - 12) & 127)]) + ((0.00016208700000000002 * fVec20[((IOTA - 11) & 127)]) + ((0.00023927800000000002 * fVec20[((IOTA - 9) & 127)]) + ((0.00099840900000000002 * fVec20[((IOTA - 7) & 127)]) + ((0.00026075800000000004 * fVec20[((IOTA - 3) & 127)]) + ((0.026153100000000002 * fVec20[((IOTA - 19) & 127)]) + ((0.00354222 * fVec20[((IOTA - 31) & 127)]) + ((0.0099954400000000013 * fVec20[((IOTA - 30) & 127)]) + ((0.00581921 * fVec20[((IOTA - 27) & 127)]) + ((0.00064315100000000001 * fVec20[((IOTA - 26) & 127)]) + ((0.016502200000000002 * fVec20[((IOTA - 25) & 127)]) + ((0.015518799999999999 * fVec20[((IOTA - 18) & 127)]) + ((0.011748099999999999 * fVec20[((IOTA - 16) & 127)]) + ((0.024044800000000002 * fVec20[((IOTA - 15) & 127)]) + ((9.0296599999999999e-06 * fVec21[((IOTA - 122) & 127)]) + ((1.9893500000000002e-05 * fVec21[((IOTA - 118) & 127)]) + ((3.7877500000000005e-05 * fVec21[((IOTA - 115) & 127)]) + ((0.00027007400000000003 * fVec21[((IOTA - 103) & 127)]) + ((0.00044415800000000005 * fVec21[((IOTA - 102) & 127)]) + ((0.00031515600000000003 * fVec21[((IOTA - 100) & 127)]) + ((0.00068420899999999997 * fVec21[((IOTA - 99) & 127)]) + ((0.00049268100000000002 * fVec21[((IOTA - 96) & 127)]) + ((0.0015305800000000001 * fVec21[((IOTA - 91) & 127)]) + ((0.0017284399999999999 * fVec21[((IOTA - 90) & 127)]) + ((0.00127253 * fVec21[((IOTA - 89) & 127)]) + ((0.00166752 * fVec21[((IOTA - 88) & 127)]) + ((0.00033490500000000003 * fVec21[((IOTA - 85) & 127)]) + ((0.0011273899999999998 * fVec21[((IOTA - 84) & 127)]) + ((6.2119200000000007e-05 * fVec21[((IOTA - 82) & 127)]) + ((0.0017261400000000001 * fVec21[((IOTA - 81) & 127)]) + ((0.00048162000000000004 * fVec21[((IOTA - 80) & 127)]) + ((0.00071563500000000006 * fVec21[((IOTA - 79) & 127)]) + ((1.14088e-05 * fVec21[((IOTA - 77) & 127)]) + ((0.0014551499999999999 * fVec21[((IOTA - 76) & 127)]) + ((0.00078290800000000002 * fVec21[((IOTA - 73) & 127)]) + ((0.0013603899999999999 * fVec21[((IOTA - 72) & 127)]) + ((0.00076972400000000006 * fVec21[((IOTA - 71) & 127)]) + ((0.0011577500000000001 * fVec21[((IOTA - 70) & 127)]) + ((0.0027559100000000003 * fVec21[((IOTA - 69) & 127)]) + ((0.0011045300000000001 * fVec21[((IOTA - 65) & 127)]) + ((0.0019003900000000001 * fVec21[((IOTA - 64) & 127)]) + ((5.8659000000000002e-05 * fVec21[((IOTA - 63) & 127)]) + ((0.00034302399999999999 * fVec21[((IOTA - 60) & 127)]) + ((0.0015042599999999999 * fVec21[((IOTA - 55) & 127)]) + ((0.0038506399999999998 * fVec21[((IOTA - 54) & 127)]) + ((0.00280679 * fVec21[((IOTA - 53) & 127)]) + ((0.00191281 * fVec21[((IOTA - 51) & 127)]) + ((0.0030454200000000001 * fVec21[((IOTA - 47) & 127)]) + ((0.0010344 * fVec21[((IOTA - 46) & 127)]) + ((0.0021753000000000002 * fVec21[((IOTA - 43) & 127)]) + ((0.00241033 * fVec21[((IOTA - 41) & 127)]) + ((0.0054447699999999998 * fVec21[((IOTA - 34) & 127)]) + ((0.0027451799999999998 * fVec21[((IOTA - 33) & 127)]) + ((0.00192986 * fVec21[((IOTA - 32) & 127)]) + ((0.0050891900000000004 * fVec21[((IOTA - 29) & 127)]) + ((0.010143899999999999 * fVec21[((IOTA - 28) & 127)]) + ((0.0039649200000000002 * fVec21[((IOTA - 27) & 127)]) + ((0.014927200000000002 * fVec21[((IOTA - 24) & 127)]) + ((0.010792999999999999 * fVec21[((IOTA - 23) & 127)]) + ((0.008510160000000001 * fVec21[((IOTA - 22) & 127)]) + ((0.0223719 * fVec21[((IOTA - 21) & 127)]) + ((0.0123166 * fVec21[((IOTA - 20) & 127)]) + ((0.017947399999999999 * fVec21[((IOTA - 19) & 127)]) + ((0.0073694100000000007 * fVec21[((IOTA - 14) & 127)]) + ((0.0142655 * fVec21[((IOTA - 12) & 127)]) + ((0.0067548000000000009 * fVec21[((IOTA - 11) & 127)]) + ((0.0025108100000000005 * fVec21[((IOTA - 9) & 127)]) + ((0.00235191 * fVec21[((IOTA - 7) & 127)]) + ((0.00091979399999999993 * fVec21[((IOTA - 5) & 127)]) + (((6.9716599999999994e-06 * fVec22[((IOTA - 124) & 127)]) + ((9.8485200000000004e-06 * fVec22[((IOTA - 118) & 127)]) + ((0.00010357900000000001 * fVec22[((IOTA - 114) & 127)]) + ((0.00042897299999999997 * fVec22[((IOTA - 113) & 127)]) + ((0.00029024100000000006 * fVec22[((IOTA - 112) & 127)]) + ((9.8297200000000012e-05 * fVec22[((IOTA - 111) & 127)]) + ((0.00020804999999999999 * fVec22[((IOTA - 110) & 127)]) + ((0.00054109500000000001 * fVec22[((IOTA - 109) & 127)]) + ((0.00083962700000000002 * fVec22[((IOTA - 108) & 127)]) + ((0.00056389100000000007 * fVec22[((IOTA - 107) & 127)]) + ((0.00051816800000000006 * fVec22[((IOTA - 106) & 127)]) + ((0.00065456900000000003 * fVec22[((IOTA - 105) & 127)]) + ((0.00088825400000000011 * fVec22[((IOTA - 104) & 127)]) + ((0.000446193 * fVec22[((IOTA - 103) & 127)]) + ((0.00071199100000000003 * fVec22[((IOTA - 102) & 127)]) + ((0.0012468500000000001 * fVec22[((IOTA - 101) & 127)]) + ((0.0012435300000000001 * fVec22[((IOTA - 100) & 127)]) + ((0.0010388900000000002 * fVec22[((IOTA - 99) & 127)]) + ((0.00170268 * fVec22[((IOTA - 98) & 127)]) + ((0.00126004 * fVec22[((IOTA - 97) & 127)]) + ((0.0013548899999999999 * fVec22[((IOTA - 93) & 127)]) + ((0.0020163799999999999 * fVec22[((IOTA - 92) & 127)]) + ((0.0010302600000000001 * fVec22[((IOTA - 89) & 127)]) + ((0.00142103 * fVec22[((IOTA - 88) & 127)]) + ((0.0020040399999999999 * fVec22[((IOTA - 82) & 127)]) + ((0.0030592000000000002 * fVec22[((IOTA - 81) & 127)]) + ((0.00082976100000000015 * fVec22[((IOTA - 80) & 127)]) + ((0.00083032800000000008 * fVec22[((IOTA - 79) & 127)]) + ((0.00146794 * fVec22[((IOTA - 78) & 127)]) + ((0.0029912300000000001 * fVec22[((IOTA - 77) & 127)]) + ((0.0019008400000000002 * fVec22[((IOTA - 76) & 127)]) + ((0.00032308700000000001 * fVec22[((IOTA - 75) & 127)]) + ((0.00121188 * fVec22[((IOTA - 74) & 127)]) + ((0.0015286800000000001 * fVec22[((IOTA - 73) & 127)]) + ((0.0016313200000000001 * fVec22[((IOTA - 72) & 127)]) + ((0.0019843199999999999 * fVec22[((IOTA - 71) & 127)]) + ((0.0031219500000000001 * fVec22[((IOTA - 70) & 127)]) + ((0.0017147500000000001 * fVec22[((IOTA - 69) & 127)]) + ((4.5241600000000004e-05 * fVec22[((IOTA - 68) & 127)]) + ((0.00193403 * fVec22[((IOTA - 67) & 127)]) + ((0.00103439 * fVec22[((IOTA - 66) & 127)]) + ((0.00025587599999999999 * fVec22[((IOTA - 61) & 127)]) + ((0.0014905299999999999 * fVec22[((IOTA - 60) & 127)]) + ((0.000502175 * fVec22[((IOTA - 59) & 127)]) + ((0.00055048599999999999 * fVec22[((IOTA - 58) & 127)]) + ((0.00049892100000000004 * fVec22[((IOTA - 50) & 127)]) + ((0.0029968600000000001 * fVec22[((IOTA - 47) & 127)]) + ((0.0024887899999999998 * fVec22[((IOTA - 46) & 127)]) + ((0.0030320900000000003 * fVec22[((IOTA - 41) & 127)]) + ((0.0076587399999999998 * fVec22[((IOTA - 40) & 127)]) + ((0.010064699999999999 * fVec22[((IOTA - 35) & 127)]) + ((0.030136699999999999 * fVec22[((IOTA - 32) & 127)]) + ((0.017341200000000001 * fVec22[((IOTA - 31) & 127)]) + ((0.039170099999999999 * fVec22[((IOTA - 28) & 127)]) + ((0.00031563800000000003 * fVec22[((IOTA - 27) & 127)]) + ((0.0030320200000000003 * fVec22[((IOTA - 11) & 127)]) + ((0.00131485 * fVec22[((IOTA - 9) & 127)]) + ((0.0011081700000000001 * fVec22[((IOTA - 7) & 127)]) + ((0.00036208399999999998 * fVec22[((IOTA - 5) & 127)]) + ((0.00017773600000000001 * fVec22[((IOTA - 3) & 127)]) + ((0.00069887100000000011 * fVec22[((IOTA - 25) & 127)]) + ((0.025458500000000002 * fVec22[((IOTA - 24) & 127)]) + ((0.0120184 * fVec22[((IOTA - 21) & 127)]) + ((0.011691100000000001 * fVec22[((IOTA - 19) & 127)]) + ((0.0053095800000000004 * fVec22[((IOTA - 14) & 127)]) + ((6.574880000000001e-05 * fVec23[((IOTA - 115) & 127)]) + ((0.0072171800000000001 * fVec22[((IOTA - 12) & 127)]) + ((7.5893800000000015e-05 * fVec23[((IOTA - 114) & 127)]) + ((0.00055035400000000008 * fVec23[((IOTA - 113) & 127)]) + ((0.00054230400000000007 * fVec23[((IOTA - 112) & 127)]) + ((0.00038862600000000004 * fVec23[((IOTA - 111) & 127)]) + ((0.00038355300000000002 * fVec23[((IOTA - 110) & 127)]) + ((0.0010789999999999999 * fVec23[((IOTA - 109) & 127)]) + ((0.00127535 * fVec23[((IOTA - 108) & 127)]) + ((0.00026040700000000004 * fVec23[((IOTA - 107) & 127)]) + ((0.00064190699999999994 * fVec23[((IOTA - 106) & 127)]) + ((0.0012643700000000001 * fVec23[((IOTA - 105) & 127)]) + ((0.0014951399999999998 * fVec23[((IOTA - 104) & 127)]) + ((0.00096466700000000011 * fVec23[((IOTA - 103) & 127)]) + ((0.00062200899999999997 * fVec23[((IOTA - 102) & 127)]) + ((0.0013151 * fVec23[((IOTA - 101) & 127)]) + ((0.00155276 * fVec23[((IOTA - 100) & 127)]) + ((0.00147963 * fVec23[((IOTA - 99) & 127)]) + ((0.0012132899999999999 * fVec23[((IOTA - 96) & 127)]) + ((0.0010497099999999999 * fVec23[((IOTA - 95) & 127)]) + ((5.4447799999999994e-06 * fVec23[((IOTA - 91) & 127)]) + ((0.00060830200000000002 * fVec23[((IOTA - 82) & 127)]) + ((0.00073753600000000001 * fVec23[((IOTA - 81) & 127)]) + ((4.1098800000000007e-05 * fVec23[((IOTA - 76) & 127)]) + ((0.00031511100000000003 * fVec23[((IOTA - 74) & 127)]) + ((0.0011385200000000001 * fVec23[((IOTA - 73) & 127)]) + ((0.0023925600000000002 * fVec23[((IOTA - 72) & 127)]) + ((0.00191902 * fVec23[((IOTA - 71) & 127)]) + ((0.00073584900000000001 * fVec23[((IOTA - 70) & 127)]) + ((0.0033698500000000002 * fVec23[((IOTA - 69) & 127)]) + ((0.0046562499999999998 * fVec23[((IOTA - 68) & 127)]) + ((0.0026088700000000001 * fVec23[((IOTA - 67) & 127)]) + ((0.0015381499999999998 * fVec23[((IOTA - 66) & 127)]) + ((0.00177024 * fVec23[((IOTA - 65) & 127)]) + ((0.0027169400000000002 * fVec23[((IOTA - 64) & 127)]) + ((0.0011334100000000001 * fVec23[((IOTA - 61) & 127)]) + ((0.0012374899999999999 * fVec23[((IOTA - 57) & 127)]) + ((0.00350462 * fVec23[((IOTA - 56) & 127)]) + ((0.00029472900000000003 * fVec23[((IOTA - 55) & 127)]) + ((0.00161133 * fVec23[((IOTA - 49) & 127)]) + ((0.0043256300000000004 * fVec23[((IOTA - 43) & 127)]) + ((0.0039263700000000002 * fVec23[((IOTA - 38) & 127)]) + ((0.0193136 * fVec23[((IOTA - 37) & 127)]) + ((0.0137585 * fVec23[((IOTA - 34) & 127)]) + ((0.016165499999999999 * fVec23[((IOTA - 31) & 127)]) + ((0.0200181 * fVec23[((IOTA - 30) & 127)]) + ((0.00436148 * fVec23[((IOTA - 27) & 127)]) + ((0.0115485 * fVec23[((IOTA - 25) & 127)]) + ((0.0032127699999999998 * fVec23[((IOTA - 23) & 127)]) + ((0.0057804000000000006 * fVec23[((IOTA - 22) & 127)]) + ((0.037111700000000004 * fVec23[((IOTA - 19) & 127)]) + ((0.014907300000000002 * fVec23[((IOTA - 18) & 127)]) + ((0.0092683000000000001 * fVec23[((IOTA - 16) & 127)]) + ((0.0158698 * fVec23[((IOTA - 15) & 127)]) + ((0.00489909 * fVec23[((IOTA - 12) & 127)]) + ((0.00036272099999999999 * fVec23[((IOTA - 11) & 127)]) + ((0.00043871700000000003 * fVec23[((IOTA - 10) & 127)]) + ((0.00018132700000000001 * fVec23[((IOTA - 9) & 127)]) + ((0.00097058900000000011 * fVec23[((IOTA - 7) & 127)]) + ((0.00016036100000000001 * fVec23[((IOTA - 6) & 127)]) + (((1.8656099999999998e-06 * fVec9[((IOTA - 126) & 127)]) + ((2.5639300000000001e-06 * fVec9[((IOTA - 125) & 127)]) + ((8.3185099999999991e-06 * fVec9[((IOTA - 124) & 127)]) + ((3.8801999999999999e-05 * fVec9[((IOTA - 123) & 127)]) + ((6.5230500000000005e-05 * fVec9[((IOTA - 122) & 127)]) + ((4.81323e-05 * fVec9[((IOTA - 121) & 127)]) + ((3.1175000000000006e-05 * fVec9[((IOTA - 120) & 127)]) + ((1.1129000000000001e-05 * fVec9[((IOTA - 119) & 127)]) + ((0.00016385400000000001 * fVec9[((IOTA - 118) & 127)]) + ((0.000137362 * fVec9[((IOTA - 117) & 127)]) + ((9.139900000000001e-05 * fVec9[((IOTA - 116) & 127)]) + ((0.00012562199999999998 * fVec9[((IOTA - 115) & 127)]) + ((0.00025063300000000005 * fVec9[((IOTA - 113) & 127)]) + ((0.000272806 * fVec9[((IOTA - 112) & 127)]) + ((0.000314307 * fVec9[((IOTA - 111) & 127)]) + ((0.00026935700000000002 * fVec9[((IOTA - 110) & 127)]) + ((0.00027303400000000002 * fVec9[((IOTA - 109) & 127)]) + ((8.74662e-06 * fVec9[((IOTA - 108) & 127)]) + ((0.00035653000000000003 * fVec9[((IOTA - 106) & 127)]) + ((0.000138672 * fVec9[((IOTA - 91) & 127)]) + ((0.0011749499999999999 * fVec9[((IOTA - 81) & 127)]) + ((0.00092974400000000003 * fVec9[((IOTA - 76) & 127)]) + ((0.00189912 * fVec9[((IOTA - 75) & 127)]) + ((0.0018498099999999999 * fVec9[((IOTA - 74) & 127)]) + ((0.00102903 * fVec9[((IOTA - 70) & 127)]) + ((0.0023879000000000001 * fVec9[((IOTA - 69) & 127)]) + ((0.0030104600000000004 * fVec9[((IOTA - 68) & 127)]) + ((0.00157916 * fVec9[((IOTA - 67) & 127)]) + ((0.0021747000000000003 * fVec9[((IOTA - 66) & 127)]) + ((0.0024374800000000001 * fVec9[((IOTA - 65) & 127)]) + ((0.0017056100000000002 * fVec9[((IOTA - 64) & 127)]) + ((0.00246014 * fVec9[((IOTA - 63) & 127)]) + ((0.0044470300000000003 * fVec9[((IOTA - 62) & 127)]) + ((0.0047484400000000005 * fVec9[((IOTA - 61) & 127)]) + ((0.0027951100000000004 * fVec9[((IOTA - 60) & 127)]) + ((0.0037710400000000002 * fVec9[((IOTA - 58) & 127)]) + ((0.0045419900000000001 * fVec9[((IOTA - 57) & 127)]) + ((0.010441600000000001 * fVec9[((IOTA - 56) & 127)]) + ((0.0100582 * fVec9[((IOTA - 55) & 127)]) + ((0.0076609499999999997 * fVec9[((IOTA - 54) & 127)]) + ((0.0068764300000000002 * fVec9[((IOTA - 53) & 127)]) + ((0.0095819500000000005 * fVec9[((IOTA - 52) & 127)]) + ((0.015913200000000002 * fVec9[((IOTA - 51) & 127)]) + ((0.015119400000000002 * fVec9[((IOTA - 50) & 127)]) + ((0.0128559 * fVec9[((IOTA - 49) & 127)]) + ((0.016606200000000002 * fVec9[((IOTA - 48) & 127)]) + ((0.016194200000000002 * fVec9[((IOTA - 47) & 127)]) + ((0.0116756 * fVec9[((IOTA - 46) & 127)]) + ((0.008875280000000001 * fVec9[((IOTA - 45) & 127)]) + ((0.016079200000000002 * fVec9[((IOTA - 44) & 127)]) + ((0.0188738 * fVec9[((IOTA - 43) & 127)]) + ((0.022184499999999999 * fVec9[((IOTA - 42) & 127)]) + ((0.020373700000000002 * fVec9[((IOTA - 41) & 127)]) + ((0.0086227300000000003 * fVec9[((IOTA - 40) & 127)]) + ((0.015368999999999999 * fVec9[((IOTA - 39) & 127)]) + ((0.025263300000000002 * fVec9[((IOTA - 38) & 127)]) + ((0.026966700000000003 * fVec9[((IOTA - 37) & 127)]) + ((0.023967600000000002 * fVec9[((IOTA - 36) & 127)]) + ((0.0180915 * fVec9[((IOTA - 35) & 127)]) + ((0.026436999999999999 * fVec9[((IOTA - 34) & 127)]) + ((0.035762599999999999 * fVec9[((IOTA - 33) & 127)]) + ((0.019380700000000001 * fVec9[((IOTA - 32) & 127)]) + ((0.0052166499999999998 * fVec9[((IOTA - 31) & 127)]) + ((0.012525700000000001 * fVec9[((IOTA - 30) & 127)]) + ((0.039007399999999998 * fVec9[((IOTA - 29) & 127)]) + ((0.039406500000000004 * fVec9[((IOTA - 28) & 127)]) + ((0.0160175 * fVec9[((IOTA - 27) & 127)]) + ((0.0095142000000000004 * fVec9[((IOTA - 26) & 127)]) + ((0.00060328500000000006 * fVec9[((IOTA - 25) & 127)]) + ((0.042794800000000008 * fVec9[((IOTA - 24) & 127)]) + ((0.034687500000000003 * fVec9[((IOTA - 23) & 127)]) + ((0.0011779100000000001 * fVec9[((IOTA - 10) & 127)]) + ((0.000167329 * fVec9[((IOTA - 8) & 127)]) + ((0.00041459900000000003 * fVec9[((IOTA - 6) & 127)]) + ((0.00031506200000000001 * fVec9[((IOTA - 2) & 127)]) + ((0.00054486499999999995 * fVec24[((IOTA - 97) & 127)]) + ((0.0024969700000000003 * fVec24[((IOTA - 92) & 127)]) + ((0.0014838199999999998 * fVec24[((IOTA - 91) & 127)]) + ((0.00134669 * fVec24[((IOTA - 89) & 127)]) + ((0.00141242 * fVec24[((IOTA - 88) & 127)]) + ((0.000311911 * fVec24[((IOTA - 84) & 127)]) + ((0.0010694400000000001 * fVec24[((IOTA - 81) & 127)]) + (((((0.00017378000000000001 * fVec24[((IOTA - 2) & 127)]) + (0.015415000000000002 * fVec24[((IOTA - 24) & 127)])) + (0.0114164 * fVec24[((IOTA - 28) & 127)])) + (0.0029673899999999999 * fVec24[((IOTA - 47) & 127)])) + (0.0047547600000000002 * fVec9[((IOTA - 59) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00019245000000000002 * fVec23[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00050699800000000004 * fVec21[((IOTA - 3) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.68655e-05 * fTemp17))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fHbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (fRec1[0] * ((((8.7891600000000009e-07 * fVec0[((IOTA - 126) & 127)]) + ((2.13798e-06 * fVec0[((IOTA - 125) & 127)]) + ((3.8383899999999997e-06 * fVec0[((IOTA - 124) & 127)]) + ((5.9589300000000002e-05 * fVec0[((IOTA - 114) & 127)]) + ((6.5764600000000004e-05 * fVec0[((IOTA - 113) & 127)]) + ((0.00021162899999999999 * fVec0[((IOTA - 112) & 127)]) + ((4.5487700000000008e-05 * fVec0[((IOTA - 109) & 127)]) + ((4.3592100000000006e-05 * fVec0[((IOTA - 107) & 127)]) + ((0.000224978 * fVec0[((IOTA - 105) & 127)]) + ((0.00052132399999999998 * fVec0[((IOTA - 104) & 127)]) + ((0.00048330599999999997 * fVec0[((IOTA - 103) & 127)]) + ((0.00071050799999999999 * fVec0[((IOTA - 102) & 127)]) + ((0.00063433500000000009 * fVec0[((IOTA - 101) & 127)]) + ((0.00044372900000000002 * fVec0[((IOTA - 100) & 127)]) + ((0.000330823 * fVec0[((IOTA - 99) & 127)]) + ((0.00039405700000000001 * fVec0[((IOTA - 98) & 127)]) + ((4.5460600000000003e-05 * fVec0[((IOTA - 97) & 127)]) + ((0.0005875600000000001 * fVec0[((IOTA - 95) & 127)]) + ((7.4827500000000015e-05 * fVec0[((IOTA - 94) & 127)]) + ((((((((((((((((((((0.00074562900000000004 * fVec0[((IOTA - 86) & 127)]) + ((0.0020883 * fVec0[((IOTA - 85) & 127)]) + ((0.0010964799999999999 * fVec0[((IOTA - 84) & 127)]) + ((0.00030719900000000002 * fVec0[((IOTA - 83) & 127)]) + ((0.00081686200000000012 * fVec0[((IOTA - 82) & 127)]) + ((0.00092738999999999994 * fVec0[((IOTA - 81) & 127)]) + ((0.0012767800000000001 * fVec0[((IOTA - 79) & 127)]) + ((0.0012493700000000001 * fVec0[((IOTA - 78) & 127)]) + ((0.00032623600000000004 * fVec0[((IOTA - 76) & 127)]) + ((0.00127728 * fVec0[((IOTA - 73) & 127)]) + ((0.00294839 * fVec0[((IOTA - 72) & 127)]) + ((0.0012133199999999999 * fVec0[((IOTA - 71) & 127)]) + ((0.00090787099999999998 * fVec0[((IOTA - 59) & 127)]) + ((6.1440200000000009e-05 * fVec0[((IOTA - 58) & 127)]) + ((0.000132287 * fVec0[((IOTA - 57) & 127)]) + ((0.00017799499999999999 * fVec0[((IOTA - 55) & 127)]) + ((1.8103599999999998e-06 * fVec0[((IOTA - 53) & 127)]) + ((0.0035657499999999999 * fVec0[((IOTA - 52) & 127)]) + ((0.00186571 * fVec0[((IOTA - 51) & 127)]) + ((0.00106006 * fVec0[((IOTA - 49) & 127)]) + ((0.00134358 * fVec0[((IOTA - 48) & 127)]) + ((0.0065925900000000006 * fVec0[((IOTA - 47) & 127)]) + ((0.0032892700000000004 * fVec0[((IOTA - 46) & 127)]) + ((0.00571376 * fVec0[((IOTA - 43) & 127)]) + ((0.0031513300000000004 * fVec0[((IOTA - 42) & 127)]) + ((8.3406000000000007e-05 * fVec0[((IOTA - 40) & 127)]) + ((0.0083352199999999991 * fVec0[((IOTA - 39) & 127)]) + ((0.0021927500000000003 * fVec0[((IOTA - 38) & 127)]) + ((2.3535099999999999e-06 * fVec1[((IOTA - 125) & 127)]) + ((6.8823199999999997e-07 * fVec1[((IOTA - 124) & 127)]) + ((1.7898600000000002e-05 * fVec1[((IOTA - 113) & 127)]) + ((0.00023630399999999998 * fVec1[((IOTA - 109) & 127)]) + ((0.00012162599999999999 * fVec1[((IOTA - 108) & 127)]) + ((0.000113249 * fVec1[((IOTA - 106) & 127)]) + ((0.00024597200000000001 * fVec1[((IOTA - 105) & 127)]) + ((0.000398374 * fVec1[((IOTA - 104) & 127)]) + ((0.00061746999999999995 * fVec1[((IOTA - 103) & 127)]) + ((5.8344399999999994e-07 * fVec1[((IOTA - 102) & 127)]) + ((8.2155600000000003e-06 * fVec1[((IOTA - 100) & 127)]) + ((0.00080468499999999997 * fVec1[((IOTA - 99) & 127)]) + ((0.00094507800000000002 * fVec1[((IOTA - 98) & 127)]) + ((0.00045216100000000002 * fVec1[((IOTA - 97) & 127)]) + ((0.00031561499999999999 * fVec1[((IOTA - 96) & 127)]) + ((0.00047134100000000001 * fVec1[((IOTA - 95) & 127)]) + ((0.00069274800000000008 * fVec1[((IOTA - 94) & 127)]) + ((0.0014052000000000001 * fVec1[((IOTA - 93) & 127)]) + ((0.00040994799999999999 * fVec1[((IOTA - 92) & 127)]) + ((0.0034650500000000003 * fVec1[((IOTA - 46) & 127)]) + ((0.0047482499999999999 * fVec1[((IOTA - 45) & 127)]) + ((0.0070738099999999998 * fVec1[((IOTA - 42) & 127)]) + ((0.0044454100000000003 * fVec1[((IOTA - 40) & 127)]) + ((0.0047369300000000003 * fVec1[((IOTA - 39) & 127)]) + ((0.011450700000000001 * fVec1[((IOTA - 36) & 127)]) + ((0.017145500000000001 * fVec1[((IOTA - 33) & 127)]) + ((0.0023752499999999998 * fVec1[((IOTA - 32) & 127)]) + ((0.0079500400000000002 * fVec1[((IOTA - 30) & 127)]) + ((0.010459599999999999 * fVec1[((IOTA - 29) & 127)]) + ((0.0025976200000000001 * fVec1[((IOTA - 27) & 127)]) + ((0.016936400000000001 * fVec1[((IOTA - 24) & 127)]) + ((0.0285481 * fVec1[((IOTA - 23) & 127)]) + ((0.012527699999999999 * fVec1[((IOTA - 21) & 127)]) + ((0.0068624900000000006 * fVec1[((IOTA - 20) & 127)]) + ((0.0059164899999999999 * fVec1[((IOTA - 18) & 127)]) + ((0.0054672200000000001 * fVec1[((IOTA - 17) & 127)]) + ((0.0048873499999999995 * fVec1[((IOTA - 14) & 127)]) + ((0.0016455200000000001 * fVec1[((IOTA - 13) & 127)]) + ((0.000402347 * fVec1[((IOTA - 12) & 127)]) + ((0.00052282000000000001 * fVec1[((IOTA - 11) & 127)]) + ((0.00052120499999999995 * fVec1[((IOTA - 9) & 127)]) + ((0.00038794200000000001 * fVec1[((IOTA - 7) & 127)]) + ((0.00069996900000000005 * fVec1[((IOTA - 5) & 127)]) + ((4.2711400000000006e-05 * fVec1[((IOTA - 1) & 127)]) + ((0.0030267599999999999 * fVec1[((IOTA - 52) & 127)]) + ((0.00017370600000000001 * fVec1[((IOTA - 49) & 127)]) + ((0.0011113 * fVec1[((IOTA - 90) & 127)]) + ((0.00094376900000000001 * fVec1[((IOTA - 89) & 127)]) + ((2.9439099999999997e-06 * fVec1[((IOTA - 86) & 127)]) + ((0.000122065 * fVec1[((IOTA - 85) & 127)]) + ((0.00070423299999999996 * fVec1[((IOTA - 82) & 127)]) + ((0.00072425400000000002 * fVec1[((IOTA - 81) & 127)]) + ((0.00091705600000000008 * fVec1[((IOTA - 80) & 127)]) + ((0.0013588599999999999 * fVec1[((IOTA - 68) & 127)]) + ((0.0019555700000000002 * fVec1[((IOTA - 67) & 127)]) + ((0.0022902399999999998 * fVec1[((IOTA - 66) & 127)]) + ((0.00089318700000000004 * fVec1[((IOTA - 65) & 127)]) + ((0.00055652499999999999 * fVec1[((IOTA - 64) & 127)]) + ((0.0013175300000000001 * fVec1[((IOTA - 63) & 127)]) + ((0.0026977899999999998 * fVec1[((IOTA - 62) & 127)]) + ((0.0050601500000000002 * fVec1[((IOTA - 61) & 127)]) + ((0.00138116 * fVec1[((IOTA - 60) & 127)]) + ((1.2439699999999999e-06 * fVec2[((IOTA - 126) & 127)]) + ((0.00047993200000000003 * fVec2[((IOTA - 111) & 127)]) + ((0.00064053100000000006 * fVec2[((IOTA - 110) & 127)]) + ((0.00079346300000000011 * fVec2[((IOTA - 107) & 127)]) + ((0.00071335300000000012 * fVec2[((IOTA - 106) & 127)]) + ((0.00039982700000000006 * fVec2[((IOTA - 105) & 127)]) + ((0.00059741799999999995 * fVec2[((IOTA - 103) & 127)]) + ((0.00146408 * fVec2[((IOTA - 102) & 127)]) + ((0.000423628 * fVec2[((IOTA - 101) & 127)]) + ((0.00085437899999999995 * fVec2[((IOTA - 99) & 127)]) + ((0.0018223600000000001 * fVec2[((IOTA - 98) & 127)]) + ((0.0014952799999999999 * fVec2[((IOTA - 97) & 127)]) + ((1.0971399999999999e-06 * fVec2[((IOTA - 96) & 127)]) + ((0.00025442800000000001 * fVec2[((IOTA - 95) & 127)]) + ((0.0020445400000000001 * fVec2[((IOTA - 54) & 127)]) + ((0.0029146700000000003 * fVec2[((IOTA - 53) & 127)]) + ((0.0050671200000000005 * fVec2[((IOTA - 52) & 127)]) + ((0.0055215200000000002 * fVec2[((IOTA - 51) & 127)]) + ((0.00247781 * fVec2[((IOTA - 50) & 127)]) + ((0.0028622500000000002 * fVec2[((IOTA - 49) & 127)]) + ((0.0043047199999999997 * fVec2[((IOTA - 48) & 127)]) + ((0.0050508000000000003 * fVec2[((IOTA - 47) & 127)]) + ((0.0046696999999999997 * fVec2[((IOTA - 46) & 127)]) + ((0.0063979799999999993 * fVec2[((IOTA - 45) & 127)]) + ((0.0023229500000000003 * fVec2[((IOTA - 44) & 127)]) + ((0.0018713100000000002 * fVec2[((IOTA - 42) & 127)]) + ((0.0013015000000000001 * fVec2[((IOTA - 33) & 127)]) + ((0.0059736599999999996 * fVec2[((IOTA - 32) & 127)]) + ((0.00466849 * fVec2[((IOTA - 29) & 127)]) + ((0.0129721 * fVec2[((IOTA - 26) & 127)]) + ((0.033185600000000003 * fVec2[((IOTA - 25) & 127)]) + ((0.0144081 * fVec2[((IOTA - 24) & 127)]) + ((0.037911500000000001 * fVec2[((IOTA - 23) & 127)]) + ((0.042685100000000004 * fVec2[((IOTA - 22) & 127)]) + ((0.0139343 * fVec2[((IOTA - 21) & 127)]) + ((0.0146813 * fVec2[((IOTA - 18) & 127)]) + ((0.035285799999999999 * fVec2[((IOTA - 13) & 127)]) + ((0.029631599999999998 * fVec2[((IOTA - 12) & 127)]) + ((0.0080319299999999996 * fVec2[((IOTA - 11) & 127)]) + ((0.0023853500000000001 * fVec2[((IOTA - 9) & 127)]) + ((0.00110753 * fVec2[((IOTA - 7) & 127)]) + ((7.2946600000000004e-05 * fVec2[((IOTA - 5) & 127)]) + ((9.9022600000000003e-05 * fVec2[((IOTA - 4) & 127)]) + ((2.4865500000000001e-05 * fTemp2) + ((0.00141333 * fVec2[((IOTA - 59) & 127)]) + ((0.00043207300000000005 * fVec2[((IOTA - 87) & 127)]) + ((0.00011911000000000002 * fVec2[((IOTA - 86) & 127)]) + ((0.0010146599999999999 * fVec2[((IOTA - 78) & 127)]) + ((0.0022639300000000004 * fVec2[((IOTA - 77) & 127)]) + ((0.0023445299999999996 * fVec2[((IOTA - 76) & 127)]) + ((0.00117332 * fVec2[((IOTA - 75) & 127)]) + ((0.00012271000000000002 * fVec2[((IOTA - 73) & 127)]) + ((0.0012369900000000001 * fVec2[((IOTA - 72) & 127)]) + ((0.0012845700000000001 * fVec2[((IOTA - 71) & 127)]) + ((0.0020734499999999997 * fVec2[((IOTA - 70) & 127)]) + ((0.00071453400000000007 * fVec2[((IOTA - 69) & 127)]) + ((0.0025929000000000004 * fVec2[((IOTA - 66) & 127)]) + ((5.33039e-06 * fVec3[((IOTA - 124) & 127)]) + ((2.5657100000000002e-05 * fVec3[((IOTA - 123) & 127)]) + ((3.6885000000000003e-05 * fVec3[((IOTA - 122) & 127)]) + ((6.3795399999999999e-06 * fVec3[((IOTA - 121) & 127)]) + ((9.4831099999999997e-06 * fVec3[((IOTA - 115) & 127)]) + ((2.9261400000000004e-05 * fVec3[((IOTA - 114) & 127)]) + ((0.000131404 * fVec3[((IOTA - 113) & 127)]) + ((0.00013365499999999999 * fVec3[((IOTA - 112) & 127)]) + ((4.31971e-05 * fVec3[((IOTA - 109) & 127)]) + ((0.00012369400000000001 * fVec3[((IOTA - 108) & 127)]) + ((0.00019079900000000001 * fVec3[((IOTA - 100) & 127)]) + ((5.9783799999999997e-06 * fVec3[((IOTA - 98) & 127)]) + ((0.0012019699999999999 * fVec3[((IOTA - 97) & 127)]) + ((0.0020851700000000003 * fVec3[((IOTA - 96) & 127)]) + ((0.00026872700000000002 * fVec3[((IOTA - 92) & 127)]) + ((0.00087657299999999996 * fVec3[((IOTA - 91) & 127)]) + ((0.000467904 * fVec3[((IOTA - 90) & 127)]) + ((0.0022150300000000002 * fVec3[((IOTA - 52) & 127)]) + ((0.0012555400000000001 * fVec3[((IOTA - 51) & 127)]) + ((0.0035995400000000005 * fVec3[((IOTA - 48) & 127)]) + ((0.00089967400000000016 * fVec3[((IOTA - 45) & 127)]) + ((0.00088876600000000004 * fVec3[((IOTA - 43) & 127)]) + ((0.0011795500000000001 * fVec3[((IOTA - 42) & 127)]) + ((0.0046426699999999998 * fVec3[((IOTA - 39) & 127)]) + ((0.0016583300000000002 * fVec3[((IOTA - 38) & 127)]) + ((0.0051621699999999998 * fVec3[((IOTA - 36) & 127)]) + ((0.0080632599999999992 * fVec3[((IOTA - 35) & 127)]) + ((0.00157599 * fVec3[((IOTA - 32) & 127)]) + ((0.015070099999999999 * fVec3[((IOTA - 31) & 127)]) + ((0.00011657599999999999 * fVec3[((IOTA - 29) & 127)]) + ((0.00174132 * fVec3[((IOTA - 27) & 127)]) + ((0.0013890300000000001 * fVec3[((IOTA - 25) & 127)]) + ((8.8277000000000009e-05 * fVec3[((IOTA - 24) & 127)]) + ((0.015129699999999999 * fVec3[((IOTA - 22) & 127)]) + ((0.0037970199999999999 * fVec3[((IOTA - 19) & 127)]) + ((0.0040573900000000001 * fVec3[((IOTA - 17) & 127)]) + ((0.0014204600000000001 * fVec3[((IOTA - 14) & 127)]) + ((0.0013988000000000002 * fVec3[((IOTA - 13) & 127)]) + ((0.00012460800000000001 * fVec3[((IOTA - 11) & 127)]) + ((5.5101800000000008e-05 * fVec3[((IOTA - 9) & 127)]) + ((0.00012828900000000002 * fVec3[((IOTA - 7) & 127)]) + ((0.00014925 * fVec3[((IOTA - 5) & 127)]) + ((4.5166200000000001e-05 * fVec3[((IOTA - 3) & 127)]) + ((1.5119900000000001e-05 * fVec3[((IOTA - 1) & 127)]) + ((0.00492437 * fVec3[((IOTA - 55) & 127)]) + ((0.0013854399999999999 * fVec3[((IOTA - 54) & 127)]) + ((0.00017813400000000001 * fVec3[((IOTA - 84) & 127)]) + ((0.00078785699999999999 * fVec3[((IOTA - 83) & 127)]) + ((0.00058893599999999997 * fVec3[((IOTA - 82) & 127)]) + ((0.00123329 * fVec3[((IOTA - 79) & 127)]) + ((0.00205091 * fVec3[((IOTA - 78) & 127)]) + ((0.00098058400000000006 * fVec3[((IOTA - 77) & 127)]) + ((0.0011948000000000002 * fVec3[((IOTA - 72) & 127)]) + ((0.0011723900000000002 * fVec3[((IOTA - 71) & 127)]) + ((0.00025078000000000004 * fVec3[((IOTA - 70) & 127)]) + ((0.000315598 * fVec3[((IOTA - 69) & 127)]) + ((0.00034212800000000003 * fVec3[((IOTA - 68) & 127)]) + ((0.00010491900000000002 * fVec3[((IOTA - 67) & 127)]) + ((0.0012219899999999998 * fVec3[((IOTA - 61) & 127)]) + ((4.8898900000000001e-07 * fVec4[((IOTA - 126) & 127)]) + ((6.8207099999999996e-06 * fVec4[((IOTA - 123) & 127)]) + ((4.3675400000000005e-05 * fVec4[((IOTA - 122) & 127)]) + ((2.5023000000000001e-05 * fVec4[((IOTA - 121) & 127)]) + ((3.1796299999999999e-05 * fVec4[((IOTA - 113) & 127)]) + ((1.2067000000000002e-05 * fVec4[((IOTA - 112) & 127)]) + ((2.4852899999999999e-06 * fVec4[((IOTA - 107) & 127)]) + ((0.00010799700000000002 * fVec4[((IOTA - 105) & 127)]) + ((0.00045528000000000007 * fVec4[((IOTA - 104) & 127)]) + ((0.000126907 * fVec4[((IOTA - 103) & 127)]) + ((0.00017260300000000001 * fVec4[((IOTA - 102) & 127)]) + ((0.00014158200000000001 * fVec4[((IOTA - 98) & 127)]) + ((0.00150157 * fVec4[((IOTA - 97) & 127)]) + ((0.0011047400000000001 * fVec4[((IOTA - 96) & 127)]) + ((0.00044206500000000006 * fVec4[((IOTA - 94) & 127)]) + ((0.000917368 * fVec4[((IOTA - 93) & 127)]) + ((0.00129043 * fVec4[((IOTA - 92) & 127)]) + ((0.00084990400000000018 * fVec4[((IOTA - 91) & 127)]) + ((0.00034780400000000001 * fVec4[((IOTA - 87) & 127)]) + ((0.00075464000000000011 * fVec4[((IOTA - 86) & 127)]) + ((0.00109117 * fVec4[((IOTA - 82) & 127)]) + ((0.0015208400000000001 * fVec4[((IOTA - 81) & 127)]) + ((0.00035611100000000005 * fVec4[((IOTA - 80) & 127)]) + ((0.0013705 * fVec4[((IOTA - 77) & 127)]) + ((0.000211399 * fVec4[((IOTA - 76) & 127)]) + ((0.0014127 * fVec4[((IOTA - 72) & 127)]) + ((4.1167199999999996e-06 * fVec5[((IOTA - 125) & 127)]) + ((5.7300899999999997e-06 * fVec5[((IOTA - 124) & 127)]) + ((0.0145401 * fVec4[((IOTA - 13) & 127)]) + ((0.020249199999999998 * fVec4[((IOTA - 12) & 127)]) + ((0.0040707800000000004 * fVec4[((IOTA - 11) & 127)]) + ((4.0082300000000008e-05 * fVec4[((IOTA - 10) & 127)]) + ((0.00078458800000000002 * fVec4[((IOTA - 6) & 127)]) + ((0.00028978000000000001 * fVec4[((IOTA - 4) & 127)]) + ((9.0877899999999989e-06 * fVec4[((IOTA - 3) & 127)]) + ((0.0018515900000000002 * fVec4[((IOTA - 70) & 127)]) + ((0.0030167600000000003 * fVec4[((IOTA - 69) & 127)]) + ((0.00050696599999999997 * fVec4[((IOTA - 65) & 127)]) + ((0.0010659000000000001 * fVec4[((IOTA - 64) & 127)]) + ((0.0010421499999999999 * fVec4[((IOTA - 63) & 127)]) + ((0.00084516700000000008 * fVec4[((IOTA - 57) & 127)]) + ((0.0042148799999999998 * fVec4[((IOTA - 56) & 127)]) + ((0.0036031800000000001 * fVec4[((IOTA - 55) & 127)]) + ((0.0012747400000000001 * fVec4[((IOTA - 54) & 127)]) + ((0.00022847000000000001 * fVec4[((IOTA - 53) & 127)]) + ((0.0010076 * fVec4[((IOTA - 50) & 127)]) + ((0.00686201 * fVec4[((IOTA - 49) & 127)]) + ((0.0037995999999999998 * fVec4[((IOTA - 48) & 127)]) + ((0.00010534699999999999 * fVec4[((IOTA - 44) & 127)]) + ((0.0061074099999999997 * fVec4[((IOTA - 41) & 127)]) + ((0.0060289400000000009 * fVec4[((IOTA - 40) & 127)]) + ((0.00066093200000000003 * fVec4[((IOTA - 37) & 127)]) + ((0.0062985100000000002 * fVec4[((IOTA - 36) & 127)]) + ((0.0052902100000000001 * fVec4[((IOTA - 30) & 127)]) + ((0.023343600000000003 * fVec4[((IOTA - 29) & 127)]) + ((0.026311200000000003 * fVec4[((IOTA - 28) & 127)]) + ((0.00744592 * fVec4[((IOTA - 25) & 127)]) + ((0.00080698399999999996 * fVec4[((IOTA - 24) & 127)]) + ((0.012177400000000001 * fVec4[((IOTA - 23) & 127)]) + ((0.026490900000000001 * fVec4[((IOTA - 22) & 127)]) + ((0.022836200000000001 * fVec4[((IOTA - 21) & 127)]) + (((3.4589100000000004e-05 * fVec5[((IOTA - 117) & 127)]) + ((1.3577100000000001e-05 * fVec5[((IOTA - 121) & 127)]) + ((7.6923100000000002e-05 * fVec5[((IOTA - 119) & 127)]) + ((7.4281200000000003e-05 * fVec5[((IOTA - 120) & 127)]) + ((7.485010000000001e-05 * fVec5[((IOTA - 118) & 127)]) + ((9.5211100000000014e-05 * fVec5[((IOTA - 116) & 127)]) + ((0.00016010899999999999 * fVec5[((IOTA - 115) & 127)]) + ((0.00013675699999999999 * fVec5[((IOTA - 114) & 127)]) + ((0.036143599999999998 * fVec5[((IOTA - 14) & 127)]) + ((0.00068993700000000006 * fVec5[((IOTA - 11) & 127)]) + ((3.2388600000000004e-05 * fVec5[((IOTA - 9) & 127)]) + ((4.7910900000000002e-05 * fVec5[((IOTA - 113) & 127)]) + ((4.5599000000000002e-05 * fVec5[((IOTA - 112) & 127)]) + ((0.00032256200000000003 * fVec5[((IOTA - 111) & 127)]) + ((0.00023359100000000003 * fVec5[((IOTA - 110) & 127)]) + ((0.00010394399999999999 * fVec5[((IOTA - 109) & 127)]) + ((0.00035927000000000002 * fVec5[((IOTA - 108) & 127)]) + ((6.2289100000000006e-05 * fVec5[((IOTA - 107) & 127)]) + ((0.00036134400000000004 * fVec5[((IOTA - 103) & 127)]) + ((0.00019419100000000003 * fVec5[((IOTA - 102) & 127)]) + ((5.45233e-05 * fVec5[((IOTA - 89) & 127)]) + ((0.00018564400000000003 * fVec5[((IOTA - 88) & 127)]) + ((0.00029846800000000003 * fVec5[((IOTA - 87) & 127)]) + ((0.00062323900000000004 * fVec5[((IOTA - 84) & 127)]) + ((0.0013928100000000002 * fVec5[((IOTA - 83) & 127)]) + ((0.00042248700000000004 * fVec5[((IOTA - 82) & 127)]) + ((0.00082889300000000014 * fVec5[((IOTA - 79) & 127)]) + ((0.0018016099999999999 * fVec5[((IOTA - 78) & 127)]) + ((0.0015986000000000002 * fVec5[((IOTA - 77) & 127)]) + ((0.0015950599999999999 * fVec5[((IOTA - 76) & 127)]) + ((0.0018363100000000001 * fVec5[((IOTA - 75) & 127)]) + ((0.0016406599999999999 * fVec5[((IOTA - 74) & 127)]) + ((7.6211099999999999e-08 * fVec5[((IOTA - 69) & 127)]) + ((0.0022540800000000003 * fVec5[((IOTA - 68) & 127)]) + ((0.0010342000000000001 * fVec5[((IOTA - 67) & 127)]) + ((0.0019980200000000001 * fVec5[((IOTA - 66) & 127)]) + ((0.0010956399999999999 * fVec5[((IOTA - 65) & 127)]) + ((0.0011518100000000001 * fVec5[((IOTA - 63) & 127)]) + ((0.00180572 * fVec5[((IOTA - 62) & 127)]) + ((0.0018522499999999999 * fVec5[((IOTA - 57) & 127)]) + ((0.0018557900000000002 * fVec5[((IOTA - 56) & 127)]) + ((0.000176202 * fVec5[((IOTA - 55) & 127)]) + ((0.00050791400000000004 * fVec5[((IOTA - 52) & 127)]) + ((0.0046477599999999999 * fVec5[((IOTA - 51) & 127)]) + ((0.0021174599999999998 * fVec5[((IOTA - 50) & 127)]) + ((0.00082403999999999995 * fVec5[((IOTA - 47) & 127)]) + ((0.00163053 * fVec5[((IOTA - 46) & 127)]) + ((0.0040141600000000001 * fVec5[((IOTA - 45) & 127)]) + ((0.0028585699999999999 * fVec5[((IOTA - 39) & 127)]) + ((0.011163900000000001 * fVec5[((IOTA - 38) & 127)]) + ((0.0048144299999999998 * fVec5[((IOTA - 37) & 127)]) + ((0.0019228799999999999 * fVec5[((IOTA - 36) & 127)]) + ((0.00066510000000000007 * fVec5[((IOTA - 33) & 127)]) + ((0.00064387999999999999 * fVec5[((IOTA - 32) & 127)]) + ((0.00039120300000000002 * fVec5[((IOTA - 31) & 127)]) + ((0.0092074099999999992 * fVec5[((IOTA - 30) & 127)]) + ((0.0078471500000000007 * fVec5[((IOTA - 29) & 127)]) + ((0.0090147300000000003 * fVec5[((IOTA - 25) & 127)]) + ((0.00028735700000000002 * fVec5[((IOTA - 2) & 127)]) + ((0.00049999799999999998 * fVec5[((IOTA - 6) & 127)]) + ((0.00052553599999999995 * fVec5[((IOTA - 5) & 127)]) + ((0.035113600000000002 * fVec5[((IOTA - 24) & 127)]) + ((0.0135645 * fVec5[((IOTA - 21) & 127)]) + ((0.0189946 * fVec5[((IOTA - 20) & 127)]) + ((0.039244899999999999 * fVec5[((IOTA - 19) & 127)]) + ((0.021826400000000003 * fVec5[((IOTA - 18) & 127)]) + (((3.2544599999999997e-06 * fVec6[((IOTA - 124) & 127)]) + ((3.8028799999999999e-06 * fVec6[((IOTA - 123) & 127)]) + ((6.0437600000000006e-05 * fVec6[((IOTA - 120) & 127)]) + ((5.5343300000000003e-05 * fVec6[((IOTA - 119) & 127)]) + ((6.5355e-05 * fVec6[((IOTA - 118) & 127)]) + ((6.3452000000000002e-05 * fVec6[((IOTA - 115) & 127)]) + ((5.9620899999999994e-06 * fVec6[((IOTA - 113) & 127)]) + ((0.00025618100000000002 * fVec6[((IOTA - 108) & 127)]) + ((0.000179366 * fVec6[((IOTA - 107) & 127)]) + ((2.8330700000000003e-05 * fVec6[((IOTA - 106) & 127)]) + ((0.00036564200000000001 * fVec6[((IOTA - 103) & 127)]) + ((0.000109181 * fVec6[((IOTA - 100) & 127)]) + ((0.00078636400000000001 * fVec6[((IOTA - 99) & 127)]) + ((0.000743967 * fVec6[((IOTA - 98) & 127)]) + ((4.1273200000000003e-05 * fVec6[((IOTA - 97) & 127)]) + ((8.4906400000000018e-05 * fVec6[((IOTA - 96) & 127)]) + ((0.00042730800000000005 * fVec6[((IOTA - 95) & 127)]) + ((0.00056384700000000002 * fVec6[((IOTA - 94) & 127)]) + ((0.000318167 * fVec6[((IOTA - 90) & 127)]) + ((6.7318100000000002e-05 * fVec6[((IOTA - 89) & 127)]) + ((0.00077448100000000004 * fVec6[((IOTA - 88) & 127)]) + ((0.0011397200000000001 * fVec6[((IOTA - 87) & 127)]) + ((0.00015226400000000002 * fVec6[((IOTA - 85) & 127)]) + ((0.000103558 * fVec6[((IOTA - 79) & 127)]) + ((0.00040236000000000004 * fVec6[((IOTA - 78) & 127)]) + ((0.0011149 * fVec6[((IOTA - 77) & 127)]) + ((0.000534539 * fVec6[((IOTA - 76) & 127)]) + ((0.00076731800000000012 * fVec6[((IOTA - 75) & 127)]) + ((0.0011365400000000001 * fVec6[((IOTA - 72) & 127)]) + ((0.0037275299999999997 * fVec6[((IOTA - 71) & 127)]) + ((0.0027207099999999999 * fVec6[((IOTA - 70) & 127)]) + ((8.9040400000000016e-05 * fVec6[((IOTA - 69) & 127)]) + ((0.0014650000000000002 * fVec6[((IOTA - 66) & 127)]) + ((0.0024605 * fVec6[((IOTA - 65) & 127)]) + ((0.00052620800000000001 * fVec6[((IOTA - 64) & 127)]) + ((5.8486300000000003e-05 * fVec6[((IOTA - 61) & 127)]) + ((4.1022400000000002e-05 * fVec6[((IOTA - 58) & 127)]) + ((0.00059072699999999998 * fVec6[((IOTA - 52) & 127)]) + ((0.00052352400000000004 * fVec6[((IOTA - 51) & 127)]) + ((0.0020931500000000002 * fVec6[((IOTA - 48) & 127)]) + ((0.000447298 * fVec6[((IOTA - 47) & 127)]) + ((0.0040422200000000009 * fVec6[((IOTA - 45) & 127)]) + ((0.0032565800000000002 * fVec6[((IOTA - 44) & 127)]) + ((0.00596175 * fVec6[((IOTA - 42) & 127)]) + ((0.00171053 * fVec6[((IOTA - 41) & 127)]) + ((0.0071582299999999998 * fVec6[((IOTA - 38) & 127)]) + ((0.00084393100000000013 * fVec6[((IOTA - 37) & 127)]) + ((0.0030441299999999999 * fVec6[((IOTA - 35) & 127)]) + ((0.00048408199999999999 * fVec6[((IOTA - 32) & 127)]) + ((0.0246952 * fVec6[((IOTA - 31) & 127)]) + ((0.00017484299999999999 * fVec6[((IOTA - 30) & 127)]) + ((0.0312594 * fVec6[((IOTA - 26) & 127)]) + ((0.030204100000000001 * fVec6[((IOTA - 25) & 127)]) + ((0.032309299999999999 * fVec6[((IOTA - 21) & 127)]) + ((0.0073979500000000004 * fVec6[((IOTA - 20) & 127)]) + ((0.0027315100000000004 * fVec6[((IOTA - 18) & 127)]) + ((0.018365599999999999 * fVec6[((IOTA - 17) & 127)]) + ((0.0015812600000000001 * fVec6[((IOTA - 16) & 127)]) + ((0.0087116199999999998 * fVec6[((IOTA - 15) & 127)]) + ((0.0022679900000000001 * fVec6[((IOTA - 13) & 127)]) + ((0.00070895599999999995 * fVec6[((IOTA - 9) & 127)]) + ((0.00092257999999999999 * fVec6[((IOTA - 8) & 127)]) + ((0.000218614 * fVec6[((IOTA - 4) & 127)]) + ((7.8113100000000009e-05 * fVec6[((IOTA - 2) & 127)]) + (((4.2449800000000001e-05 * fVec7[((IOTA - 122) & 127)]) + ((1.68101e-05 * fVec7[((IOTA - 119) & 127)]) + ((1.08625e-05 * fVec7[((IOTA - 118) & 127)]) + ((0.00011037300000000001 * fVec7[((IOTA - 117) & 127)]) + ((7.9807499999999998e-05 * fVec7[((IOTA - 116) & 127)]) + ((9.6142299999999996e-05 * fVec7[((IOTA - 115) & 127)]) + ((7.7893600000000009e-05 * fVec7[((IOTA - 114) & 127)]) + ((7.9137900000000007e-05 * fVec7[((IOTA - 113) & 127)]) + ((0.00027298900000000001 * fVec7[((IOTA - 112) & 127)]) + ((1.22163e-05 * fVec7[((IOTA - 111) & 127)]) + ((3.4997699999999999e-05 * fVec7[((IOTA - 109) & 127)]) + ((4.7484800000000003e-05 * fVec7[((IOTA - 107) & 127)]) + ((0.00087555499999999997 * fVec7[((IOTA - 83) & 127)]) + ((0.00096178600000000006 * fVec7[((IOTA - 82) & 127)]) + ((0.00052484900000000008 * fVec7[((IOTA - 79) & 127)]) + ((0.000623567 * fVec7[((IOTA - 73) & 127)]) + ((0.00193418 * fVec7[((IOTA - 72) & 127)]) + ((0.0016586399999999999 * fVec7[((IOTA - 71) & 127)]) + ((0.0018386700000000001 * fVec7[((IOTA - 70) & 127)]) + ((0.00112042 * fVec7[((IOTA - 69) & 127)]) + ((0.0025244099999999999 * fVec7[((IOTA - 58) & 127)]) + ((0.0019192800000000002 * fVec7[((IOTA - 57) & 127)]) + ((0.0017400500000000001 * fVec7[((IOTA - 56) & 127)]) + ((0.0029806699999999999 * fVec7[((IOTA - 55) & 127)]) + ((0.0029504500000000003 * fVec7[((IOTA - 54) & 127)]) + ((0.0010499700000000001 * fVec7[((IOTA - 53) & 127)]) + ((4.1037600000000008e-05 * fVec7[((IOTA - 47) & 127)]) + ((0.0034572400000000003 * fVec7[((IOTA - 46) & 127)]) + ((0.0049149900000000002 * fVec7[((IOTA - 45) & 127)]) + ((0.00099377100000000006 * fVec7[((IOTA - 44) & 127)]) + ((0.0055609300000000004 * fVec7[((IOTA - 41) & 127)]) + ((0.011276600000000001 * fVec7[((IOTA - 40) & 127)]) + ((0.0057774999999999996 * fVec7[((IOTA - 39) & 127)]) + ((0.00788494 * fVec7[((IOTA - 35) & 127)]) + ((0.0050277900000000007 * fVec7[((IOTA - 34) & 127)]) + ((0.0038421800000000002 * fVec7[((IOTA - 32) & 127)]) + ((0.0149585 * fVec7[((IOTA - 29) & 127)]) + ((0.0036836899999999999 * fVec7[((IOTA - 27) & 127)]) + ((0.0022655599999999998 * fVec7[((IOTA - 26) & 127)]) + ((0.010108799999999999 * fVec7[((IOTA - 21) & 127)]) + ((0.022015099999999999 * fVec7[((IOTA - 20) & 127)]) + ((0.0082101299999999995 * fVec7[((IOTA - 17) & 127)]) + ((0.031857000000000003 * fVec7[((IOTA - 16) & 127)]) + ((0.00150281 * fVec7[((IOTA - 14) & 127)]) + ((0.00129228 * fVec7[((IOTA - 11) & 127)]) + ((0.00066836900000000004 * fVec7[((IOTA - 8) & 127)]) + ((8.8393099999999999e-05 * fVec7[((IOTA - 7) & 127)]) + ((0.00018522700000000002 * fVec7[((IOTA - 4) & 127)]) + ((4.6479600000000008e-05 * fVec7[((IOTA - 104) & 127)]) + ((0.000136606 * fVec7[((IOTA - 102) & 127)]) + ((0.00045482200000000002 * fVec7[((IOTA - 94) & 127)]) + ((0.00052650300000000011 * fVec7[((IOTA - 93) & 127)]) + ((2.2013400000000002e-05 * fVec8[((IOTA - 123) & 127)]) + ((7.0854499999999992e-06 * fVec8[((IOTA - 122) & 127)]) + ((3.0611000000000002e-05 * fVec8[((IOTA - 119) & 127)]) + ((8.0809800000000007e-05 * fVec8[((IOTA - 118) & 127)]) + ((1.71501e-05 * fVec8[((IOTA - 117) & 127)]) + ((6.3156600000000004e-05 * fVec8[((IOTA - 116) & 127)]) + ((2.5417499999999998e-06 * fVec8[((IOTA - 115) & 127)]) + ((2.1439300000000003e-05 * fVec8[((IOTA - 114) & 127)]) + ((2.5039900000000001e-05 * fVec8[((IOTA - 112) & 127)]) + ((0.000135007 * fVec8[((IOTA - 111) & 127)]) + ((6.3145400000000007e-05 * fVec8[((IOTA - 110) & 127)]) + ((0.00030512000000000003 * fVec8[((IOTA - 107) & 127)]) + ((9.1568200000000002e-05 * fVec8[((IOTA - 104) & 127)]) + ((0.00027613699999999998 * fVec8[((IOTA - 103) & 127)]) + ((0.00026536499999999999 * fVec8[((IOTA - 102) & 127)]) + ((0.00032241399999999998 * fVec8[((IOTA - 101) & 127)]) + ((0.00033567700000000005 * fVec8[((IOTA - 100) & 127)]) + ((6.1251899999999995e-06 * fVec8[((IOTA - 98) & 127)]) + ((0.0013563000000000002 * fVec8[((IOTA - 92) & 127)]) + ((0.0023668200000000004 * fVec8[((IOTA - 91) & 127)]) + ((0.0019167099999999999 * fVec8[((IOTA - 90) & 127)]) + ((0.00056512500000000009 * fVec8[((IOTA - 89) & 127)]) + ((0.00127944 * fVec8[((IOTA - 82) & 127)]) + ((0.00074675200000000005 * fVec8[((IOTA - 75) & 127)]) + ((0.0023775100000000002 * fVec8[((IOTA - 74) & 127)]) + ((0.0018128 * fVec8[((IOTA - 73) & 127)]) + ((0.0052337399999999997 * fVec8[((IOTA - 45) & 127)]) + ((0.0035233400000000002 * fVec8[((IOTA - 42) & 127)]) + ((0.00121233 * fVec8[((IOTA - 41) & 127)]) + ((0.00227231 * fVec8[((IOTA - 39) & 127)]) + ((0.012740800000000002 * fVec8[((IOTA - 38) & 127)]) + ((0.0058576800000000005 * fVec8[((IOTA - 37) & 127)]) + ((0.0072504600000000002 * fVec8[((IOTA - 34) & 127)]) + ((0.0079654100000000009 * fVec8[((IOTA - 33) & 127)]) + ((0.036658400000000001 * fVec8[((IOTA - 29) & 127)]) + ((0.0144063 * fVec8[((IOTA - 28) & 127)]) + ((0.0062073700000000002 * fVec8[((IOTA - 26) & 127)]) + ((0.037012400000000001 * fVec8[((IOTA - 25) & 127)]) + ((0.032690700000000003 * fVec8[((IOTA - 24) & 127)]) + ((0.00109545 * fVec8[((IOTA - 23) & 127)]) + ((0.0227166 * fVec8[((IOTA - 18) & 127)]) + ((0.0331264 * fVec8[((IOTA - 15) & 127)]) + ((0.0084816100000000005 * fVec8[((IOTA - 14) & 127)]) + ((0.0045181400000000004 * fVec8[((IOTA - 13) & 127)]) + ((0.0016828300000000002 * fVec8[((IOTA - 10) & 127)]) + ((0.00032086300000000001 * fVec8[((IOTA - 8) & 127)]) + ((0.00149577 * fVec8[((IOTA - 6) & 127)]) + ((0.00035434000000000003 * fVec8[((IOTA - 2) & 127)]) + ((2.4763900000000002e-05 * fTemp8) + ((0.0010571299999999999 * fVec8[((IOTA - 52) & 127)]) + ((0.00038515400000000002 * fVec8[((IOTA - 49) & 127)]) + ((0.000439049 * fVec8[((IOTA - 72) & 127)]) + ((0.0010578600000000001 * fVec8[((IOTA - 71) & 127)]) + ((0.0026522400000000002 * fVec8[((IOTA - 70) & 127)]) + ((0.00100471 * fVec8[((IOTA - 65) & 127)]) + ((0.00031719000000000002 * fVec8[((IOTA - 62) & 127)]) + ((0.00152038 * fVec8[((IOTA - 61) & 127)]) + ((0.0014213100000000001 * fVec8[((IOTA - 60) & 127)]) + ((0.0028660199999999999 * fVec8[((IOTA - 59) & 127)]) + ((0.0060551399999999997 * fVec8[((IOTA - 58) & 127)]) + ((0.0037266199999999999 * fVec8[((IOTA - 57) & 127)]) + ((0.0018872400000000001 * fVec8[((IOTA - 56) & 127)]) + ((0.00068895700000000002 * fVec8[((IOTA - 48) & 127)]) + ((0.00260297 * fVec8[((IOTA - 46) & 127)]) + ((0.0037507199999999999 * fVec8[((IOTA - 55) & 127)]) + ((0.0022728499999999999 * fVec8[((IOTA - 54) & 127)]) + ((0.0037854500000000001 * fVec8[((IOTA - 53) & 127)]) + ((9.5870599999999998e-07 * fVec11[((IOTA - 126) & 127)]) + ((6.1298299999999997e-06 * fVec11[((IOTA - 125) & 127)]) + ((1.7529100000000001e-05 * fVec11[((IOTA - 124) & 127)]) + ((1.3215300000000002e-05 * fVec11[((IOTA - 123) & 127)]) + ((3.73611e-06 * fVec11[((IOTA - 122) & 127)]) + ((1.4631700000000003e-05 * fVec11[((IOTA - 121) & 127)]) + ((7.9383399999999993e-06 * fVec11[((IOTA - 120) & 127)]) + ((0.000163275 * fVec11[((IOTA - 108) & 127)]) + ((5.2133700000000005e-05 * fVec11[((IOTA - 104) & 127)]) + ((1.7659600000000003e-05 * fVec11[((IOTA - 103) & 127)]) + ((0.00026651699999999997 * fVec11[((IOTA - 101) & 127)]) + ((0.00044441800000000003 * fVec11[((IOTA - 100) & 127)]) + ((0.000204947 * fVec11[((IOTA - 97) & 127)]) + ((0.0021076800000000002 * fVec11[((IOTA - 96) & 127)]) + ((0.0019922500000000001 * fVec11[((IOTA - 95) & 127)]) + ((0.000140679 * fVec11[((IOTA - 94) & 127)]) + ((0.0011280300000000001 * fVec11[((IOTA - 93) & 127)]) + ((0.0019903999999999998 * fVec11[((IOTA - 92) & 127)]) + ((0.000397475 * fVec11[((IOTA - 91) & 127)]) + ((0.00035911300000000004 * fVec11[((IOTA - 85) & 127)]) + ((0.000127816 * fVec11[((IOTA - 81) & 127)]) + ((0.0014990399999999999 * fVec11[((IOTA - 80) & 127)]) + ((0.00177585 * fVec11[((IOTA - 79) & 127)]) + ((5.3717400000000002e-05 * fVec11[((IOTA - 73) & 127)]) + ((0.00100658 * fVec11[((IOTA - 72) & 127)]) + ((0.00017406600000000001 * fVec11[((IOTA - 71) & 127)]) + ((0.00071912600000000005 * fVec11[((IOTA - 67) & 127)]) + ((0.00072212600000000002 * fVec11[((IOTA - 64) & 127)]) + ((0.0049928100000000003 * fVec11[((IOTA - 63) & 127)]) + ((0.0037463600000000002 * fVec11[((IOTA - 62) & 127)]) + ((0.0011032699999999999 * fVec11[((IOTA - 61) & 127)]) + ((1.5565300000000002e-05 * fVec11[((IOTA - 59) & 127)]) + ((0.0010646199999999998 * fVec11[((IOTA - 55) & 127)]) + ((0.0014746 * fVec11[((IOTA - 54) & 127)]) + ((0.0030302600000000003 * fVec11[((IOTA - 53) & 127)]) + ((0.0025201400000000001 * fVec11[((IOTA - 52) & 127)]) + ((0.0023052000000000003 * fVec11[((IOTA - 51) & 127)]) + ((0.0064089099999999994 * fVec11[((IOTA - 50) & 127)]) + ((0.0062176200000000001 * fVec11[((IOTA - 49) & 127)]) + ((0.00136571 * fVec11[((IOTA - 48) & 127)]) + ((0.000484007 * fVec11[((IOTA - 47) & 127)]) + ((0.0053646300000000004 * fVec11[((IOTA - 43) & 127)]) + ((0.00049839000000000003 * fVec11[((IOTA - 40) & 127)]) + ((0.0029793300000000001 * fVec11[((IOTA - 39) & 127)]) + ((0.00011673199999999999 * fVec11[((IOTA - 38) & 127)]) + ((0.0021503299999999998 * fVec11[((IOTA - 34) & 127)]) + ((0.0040663799999999996 * fVec11[((IOTA - 31) & 127)]) + ((0.022960699999999997 * fVec11[((IOTA - 30) & 127)]) + ((0.016656999999999998 * fVec11[((IOTA - 26) & 127)]) + ((0.026276299999999999 * fVec11[((IOTA - 23) & 127)]) + ((0.020495800000000002 * fVec11[((IOTA - 22) & 127)]) + ((0.023659500000000003 * fVec11[((IOTA - 21) & 127)]) + ((0.0210797 * fVec11[((IOTA - 20) & 127)]) + ((0.027862700000000001 * fVec11[((IOTA - 19) & 127)]) + ((0.015660400000000001 * fVec11[((IOTA - 16) & 127)]) + ((0.0069313100000000004 * fVec11[((IOTA - 12) & 127)]) + ((0.0015239000000000001 * fVec11[((IOTA - 11) & 127)]) + ((0.0018694900000000001 * fVec11[((IOTA - 7) & 127)]) + ((0.00091357700000000016 * fVec11[((IOTA - 5) & 127)]) + ((0.00034025 * fVec11[((IOTA - 3) & 127)]) + (((2.1476600000000004e-05 * fVec10[((IOTA - 122) & 127)]) + ((2.6092200000000004e-05 * fVec10[((IOTA - 121) & 127)]) + ((4.1403999999999999e-05 * fVec10[((IOTA - 116) & 127)]) + ((0.00020260300000000001 * fVec10[((IOTA - 113) & 127)]) + ((0.00014776200000000001 * fVec10[((IOTA - 112) & 127)]) + ((0.00045834100000000002 * fVec10[((IOTA - 109) & 127)]) + ((0.00029239199999999999 * fVec10[((IOTA - 108) & 127)]) + ((0.00051877400000000006 * fVec10[((IOTA - 105) & 127)]) + ((0.00062261900000000004 * fVec10[((IOTA - 104) & 127)]) + ((0.000143232 * fVec10[((IOTA - 103) & 127)]) + ((9.2107400000000005e-05 * fVec10[((IOTA - 101) & 127)]) + ((0.000784532 * fVec10[((IOTA - 100) & 127)]) + ((0.00071355700000000008 * fVec10[((IOTA - 99) & 127)]) + ((0.00065499700000000004 * fVec10[((IOTA - 98) & 127)]) + ((0.00027689300000000001 * fVec10[((IOTA - 97) & 127)]) + ((0.00098381599999999999 * fVec10[((IOTA - 90) & 127)]) + ((0.0011919700000000001 * fVec10[((IOTA - 89) & 127)]) + ((0.00017768299999999999 * fVec10[((IOTA - 59) & 127)]) + ((0.0039611100000000003 * fVec10[((IOTA - 58) & 127)]) + ((0.0042174700000000001 * fVec10[((IOTA - 57) & 127)]) + ((0.0044953900000000001 * fVec10[((IOTA - 56) & 127)]) + ((0.0022670200000000002 * fVec10[((IOTA - 55) & 127)]) + ((0.0021868500000000002 * fVec10[((IOTA - 52) & 127)]) + ((9.3079100000000001e-05 * fVec10[((IOTA - 51) & 127)]) + ((0.0021948699999999998 * fVec10[((IOTA - 49) & 127)]) + ((0.0045924300000000006 * fVec10[((IOTA - 46) & 127)]) + ((0.0084135899999999986 * fVec10[((IOTA - 45) & 127)]) + ((0.00067984600000000012 * fVec10[((IOTA - 40) & 127)]) + ((0.00402003 * fVec10[((IOTA - 39) & 127)]) + ((0.017721000000000001 * fVec10[((IOTA - 36) & 127)]) + ((0.0035177100000000003 * fVec10[((IOTA - 33) & 127)]) + ((0.012616499999999999 * fVec10[((IOTA - 32) & 127)]) + ((0.0087009700000000006 * fVec10[((IOTA - 31) & 127)]) + ((0.00866514 * fVec10[((IOTA - 26) & 127)]) + ((0.0044089000000000003 * fVec10[((IOTA - 25) & 127)]) + ((0.023826100000000003 * fVec10[((IOTA - 24) & 127)]) + ((0.0116758 * fVec10[((IOTA - 23) & 127)]) + ((0.0080310599999999996 * fVec10[((IOTA - 19) & 127)]) + ((0.0123386 * fVec10[((IOTA - 18) & 127)]) + ((0.0091981400000000005 * fVec10[((IOTA - 15) & 127)]) + ((0.00114058 * fVec10[((IOTA - 13) & 127)]) + ((0.0133545 * fVec10[((IOTA - 12) & 127)]) + ((0.00042513400000000003 * fVec10[((IOTA - 10) & 127)]) + ((0.00031202200000000002 * fVec10[((IOTA - 9) & 127)]) + ((0.00059449899999999996 * fVec10[((IOTA - 7) & 127)]) + ((9.0752000000000015e-05 * fVec10[((IOTA - 3) & 127)]) + ((2.8761299999999999e-06 * fVec10[((IOTA - 1) & 127)]) + ((3.51439e-07 * fTemp10) + ((0.0018707700000000001 * fVec10[((IOTA - 65) & 127)]) + ((0.00060252200000000008 * fVec10[((IOTA - 64) & 127)]) + ((0.00086149400000000008 * fVec10[((IOTA - 77) & 127)]) + ((0.00058334300000000006 * fVec10[((IOTA - 76) & 127)]) + ((0.0013006599999999999 * fVec10[((IOTA - 75) & 127)]) + ((0.00041085900000000007 * fVec10[((IOTA - 71) & 127)]) + ((0.0012948999999999999 * fVec10[((IOTA - 66) & 127)]) + ((5.6064900000000006e-05 * fVec12[((IOTA - 119) & 127)]) + ((2.9367600000000003e-05 * fVec12[((IOTA - 118) & 127)]) + ((3.3220999999999999e-05 * fVec12[((IOTA - 117) & 127)]) + ((0.00012805500000000002 * fVec12[((IOTA - 114) & 127)]) + ((0.000103477 * fVec12[((IOTA - 113) & 127)]) + ((0.00025872700000000005 * fVec12[((IOTA - 112) & 127)]) + ((0.00029786899999999998 * fVec12[((IOTA - 111) & 127)]) + ((0.00033988700000000003 * fVec12[((IOTA - 110) & 127)]) + ((9.3482300000000004e-05 * fVec12[((IOTA - 109) & 127)]) + ((0.00013677700000000001 * fVec12[((IOTA - 108) & 127)]) + ((0.00057155300000000003 * fVec12[((IOTA - 107) & 127)]) + ((0.00044084399999999997 * fVec12[((IOTA - 106) & 127)]) + ((0.00057291299999999998 * fVec12[((IOTA - 88) & 127)]) + ((0.00027621200000000002 * fVec12[((IOTA - 87) & 127)]) + ((0.0015819200000000001 * fVec12[((IOTA - 80) & 127)]) + ((0.00034622800000000002 * fVec12[((IOTA - 79) & 127)]) + ((0.0021050499999999998 * fVec12[((IOTA - 75) & 127)]) + ((0.00017197100000000001 * fVec12[((IOTA - 73) & 127)]) + ((0.00328831 * fVec12[((IOTA - 72) & 127)]) + ((0.0033849700000000002 * fVec12[((IOTA - 71) & 127)]) + ((0.00106408 * fVec12[((IOTA - 68) & 127)]) + ((0.0026545100000000001 * fVec12[((IOTA - 67) & 127)]) + ((0.0023114799999999999 * fVec12[((IOTA - 66) & 127)]) + ((0.0010799700000000002 * fVec12[((IOTA - 65) & 127)]) + ((0.000133325 * fVec12[((IOTA - 64) & 127)]) + ((0.00104922 * fVec12[((IOTA - 63) & 127)]) + ((0.00064313500000000008 * fVec12[((IOTA - 62) & 127)]) + ((0.000829111 * fVec12[((IOTA - 50) & 127)]) + ((0.0047209000000000001 * fVec12[((IOTA - 49) & 127)]) + ((0.0040045700000000007 * fVec12[((IOTA - 48) & 127)]) + ((0.0028235399999999998 * fVec12[((IOTA - 47) & 127)]) + ((0.0024041399999999999 * fVec12[((IOTA - 46) & 127)]) + ((0.00123226 * fVec12[((IOTA - 43) & 127)]) + ((0.0055503799999999997 * fVec12[((IOTA - 42) & 127)]) + ((0.0055164099999999994 * fVec12[((IOTA - 41) & 127)]) + ((0.009551539999999999 * fVec12[((IOTA - 40) & 127)]) + ((0.0071602499999999999 * fVec12[((IOTA - 37) & 127)]) + ((0.0059806600000000005 * fVec12[((IOTA - 34) & 127)]) + ((0.0033412400000000001 * fVec12[((IOTA - 33) & 127)]) + ((0.0013020600000000001 * fVec12[((IOTA - 32) & 127)]) + ((0.010603599999999999 * fVec12[((IOTA - 29) & 127)]) + ((0.0047975099999999996 * fVec12[((IOTA - 28) & 127)]) + ((0.00037618999999999999 * fVec12[((IOTA - 25) & 127)]) + ((0.025127100000000003 * fVec12[((IOTA - 24) & 127)]) + ((0.0074241100000000003 * fVec12[((IOTA - 22) & 127)]) + ((0.032307200000000001 * fVec12[((IOTA - 19) & 127)]) + ((0.00068458300000000011 * fVec12[((IOTA - 16) & 127)]) + ((0.0022406600000000002 * fVec12[((IOTA - 14) & 127)]) + ((0.00121477 * fVec12[((IOTA - 12) & 127)]) + ((0.00015070900000000001 * fVec12[((IOTA - 11) & 127)]) + ((0.000594639 * fVec12[((IOTA - 10) & 127)]) + ((0.00043852399999999998 * fVec12[((IOTA - 7) & 127)]) + ((3.5476400000000005e-05 * fVec12[((IOTA - 6) & 127)]) + ((0.00012342900000000001 * fVec12[((IOTA - 5) & 127)]) + ((0.00013495299999999999 * fVec12[((IOTA - 3) & 127)]) + ((6.5829500000000002e-06 * fVec12[((IOTA - 1) & 127)]) + ((4.9281200000000005e-05 * fVec12[((IOTA - 94) & 127)]) + ((0.00026790500000000003 * fVec12[((IOTA - 93) & 127)]) + ((0.00058204100000000005 * fVec12[((IOTA - 105) & 127)]) + ((0.00042623200000000002 * fVec12[((IOTA - 104) & 127)]) + ((0.00025379299999999999 * fVec12[((IOTA - 103) & 127)]) + ((0.0004933950000000001 * fVec12[((IOTA - 102) & 127)]) + ((0.00052014400000000005 * fVec12[((IOTA - 99) & 127)]) + (((0.0012122999999999999 * fVec12[((IOTA - 98) & 127)]) + ((0.00045970700000000006 * fVec12[((IOTA - 97) & 127)]) + ((0.00024474399999999997 * fVec12[((IOTA - 96) & 127)]) + ((0.00061810000000000001 * fVec12[((IOTA - 95) & 127)]) + ((2.7837800000000002e-06 * fVec13[((IOTA - 122) & 127)]) + ((8.3043399999999988e-06 * fVec13[((IOTA - 121) & 127)]) + ((5.6696200000000008e-05 * fVec13[((IOTA - 115) & 127)]) + ((0.00013219300000000001 * fVec13[((IOTA - 112) & 127)]) + ((0.00031032800000000001 * fVec13[((IOTA - 111) & 127)]) + ((0.000209402 * fVec13[((IOTA - 110) & 127)]) + ((0.000392538 * fVec13[((IOTA - 109) & 127)]) + ((0.00021252900000000001 * fVec13[((IOTA - 108) & 127)]) + ((0.00022341099999999999 * fVec13[((IOTA - 107) & 127)]) + ((0.000455971 * fVec13[((IOTA - 106) & 127)]) + ((0.00023670100000000002 * fVec13[((IOTA - 105) & 127)]) + ((9.3216599999999998e-05 * fVec13[((IOTA - 104) & 127)]) + ((0.00011625700000000002 * fVec13[((IOTA - 103) & 127)]) + ((0.00053898200000000002 * fVec13[((IOTA - 102) & 127)]) + ((0.00063969199999999997 * fVec13[((IOTA - 101) & 127)]) + ((0.00049445900000000004 * fVec13[((IOTA - 100) & 127)]) + ((0.00113736 * fVec13[((IOTA - 99) & 127)]) + ((0.0011671499999999998 * fVec13[((IOTA - 98) & 127)]) + ((0.00080747300000000007 * fVec13[((IOTA - 97) & 127)]) + ((0.00098782800000000006 * fVec13[((IOTA - 96) & 127)]) + ((0.000116086 * fVec13[((IOTA - 95) & 127)]) + ((0.0010682000000000001 * fVec13[((IOTA - 92) & 127)]) + ((0.0010581200000000001 * fVec13[((IOTA - 91) & 127)]) + ((0.00023935499999999999 * fVec13[((IOTA - 90) & 127)]) + ((6.07349e-05 * fVec13[((IOTA - 77) & 127)]) + ((0.00024441799999999999 * fVec13[((IOTA - 71) & 127)]) + ((0.0022682500000000003 * fVec13[((IOTA - 70) & 127)]) + ((0.0013828600000000001 * fVec13[((IOTA - 69) & 127)]) + ((0.00019294500000000003 * fVec13[((IOTA - 68) & 127)]) + ((0.0022136499999999997 * fVec13[((IOTA - 67) & 127)]) + ((0.023017300000000001 * fVec13[((IOTA - 16) & 127)]) + ((0.0059658100000000002 * fVec13[((IOTA - 15) & 127)]) + ((0.0035753 * fVec13[((IOTA - 13) & 127)]) + ((0.010657300000000001 * fVec13[((IOTA - 12) & 127)]) + ((0.00023747699999999999 * fVec13[((IOTA - 10) & 127)]) + ((0.00079964000000000012 * fVec13[((IOTA - 7) & 127)]) + ((0.000231547 * fVec13[((IOTA - 4) & 127)]) + ((0.00023603400000000001 * fVec13[((IOTA - 3) & 127)]) + ((3.2773799999999996e-06 * fTemp13) + ((0.014908999999999999 * fVec13[((IOTA - 28) & 127)]) + ((0.012678 * fVec13[((IOTA - 27) & 127)]) + ((0.041963100000000003 * fVec13[((IOTA - 22) & 127)]) + ((0.0023189199999999999 * fVec13[((IOTA - 66) & 127)]) + ((0.0022684799999999998 * fVec13[((IOTA - 65) & 127)]) + ((0.00027487300000000002 * fVec13[((IOTA - 64) & 127)]) + ((0.00097751499999999998 * fVec13[((IOTA - 62) & 127)]) + ((0.00025304199999999998 * fVec13[((IOTA - 61) & 127)]) + ((0.00036951399999999999 * fVec13[((IOTA - 60) & 127)]) + ((0.0020696600000000001 * fVec13[((IOTA - 59) & 127)]) + ((0.00039934300000000003 * fVec13[((IOTA - 58) & 127)]) + ((0.00168114 * fVec13[((IOTA - 55) & 127)]) + ((0.0019406200000000001 * fVec13[((IOTA - 54) & 127)]) + ((0.00213182 * fVec13[((IOTA - 48) & 127)]) + ((0.0044656900000000005 * fVec13[((IOTA - 47) & 127)]) + ((0.0055347900000000004 * fVec13[((IOTA - 46) & 127)]) + ((0.0030411100000000001 * fVec13[((IOTA - 42) & 127)]) + ((0.0061597700000000002 * fVec13[((IOTA - 39) & 127)]) + ((0.0032564600000000001 * fVec13[((IOTA - 38) & 127)]) + ((0.007966260000000001 * fVec13[((IOTA - 35) & 127)]) + ((0.014713700000000001 * fVec13[((IOTA - 34) & 127)]) + ((0.0070875299999999999 * fVec13[((IOTA - 29) & 127)]) + (((8.1563499999999999e-05 * fVec14[((IOTA - 118) & 127)]) + ((7.0606100000000001e-05 * fVec14[((IOTA - 117) & 127)]) + ((4.6020600000000005e-05 * fVec14[((IOTA - 116) & 127)]) + ((2.3044100000000002e-05 * fVec14[((IOTA - 115) & 127)]) + ((3.8369700000000006e-05 * fVec14[((IOTA - 114) & 127)]) + ((0.00029687600000000001 * fVec14[((IOTA - 113) & 127)]) + ((0.00024899699999999999 * fVec14[((IOTA - 112) & 127)]) + ((8.0695200000000013e-05 * fVec14[((IOTA - 111) & 127)]) + ((4.5071899999999998e-05 * fVec14[((IOTA - 110) & 127)]) + ((0.00031248700000000002 * fVec14[((IOTA - 109) & 127)]) + ((0.00029415900000000005 * fVec14[((IOTA - 108) & 127)]) + ((8.8138200000000003e-05 * fVec14[((IOTA - 107) & 127)]) + ((0.00030124200000000001 * fVec14[((IOTA - 106) & 127)]) + ((4.2708300000000006e-05 * fVec14[((IOTA - 105) & 127)]) + ((6.9614300000000009e-05 * fVec14[((IOTA - 103) & 127)]) + ((0.000321589 * fVec14[((IOTA - 99) & 127)]) + ((0.00016036600000000003 * fVec14[((IOTA - 98) & 127)]) + ((0.0012729099999999999 * fVec14[((IOTA - 88) & 127)]) + ((0.0021085400000000003 * fVec14[((IOTA - 87) & 127)]) + ((0.0005086 * fVec14[((IOTA - 86) & 127)]) + ((0.00014791000000000001 * fVec14[((IOTA - 85) & 127)]) + ((0.00032534600000000001 * fVec14[((IOTA - 81) & 127)]) + ((0.00099685500000000005 * fVec14[((IOTA - 80) & 127)]) + ((0.00058476299999999997 * fVec14[((IOTA - 76) & 127)]) + ((0.00186454 * fVec14[((IOTA - 75) & 127)]) + ((0.0013951499999999999 * fVec14[((IOTA - 74) & 127)]) + ((0.00129178 * fVec14[((IOTA - 73) & 127)]) + ((0.0016883999999999998 * fVec14[((IOTA - 72) & 127)]) + ((0.0018129000000000001 * fVec14[((IOTA - 71) & 127)]) + ((0.0040936100000000001 * fVec14[((IOTA - 42) & 127)]) + ((0.0020292500000000002 * fVec14[((IOTA - 41) & 127)]) + ((0.0030470000000000002 * fVec14[((IOTA - 38) & 127)]) + ((0.0096155300000000006 * fVec14[((IOTA - 37) & 127)]) + ((0.00534952 * fVec14[((IOTA - 36) & 127)]) + ((0.010443599999999999 * fVec14[((IOTA - 35) & 127)]) + ((0.014278200000000001 * fVec14[((IOTA - 34) & 127)]) + ((0.007845340000000001 * fVec14[((IOTA - 33) & 127)]) + ((0.006265520000000001 * fVec14[((IOTA - 32) & 127)]) + ((0.0039480399999999999 * fVec14[((IOTA - 31) & 127)]) + ((0.030915100000000001 * fVec14[((IOTA - 29) & 127)]) + ((0.038624800000000001 * fVec14[((IOTA - 28) & 127)]) + ((0.0106274 * fVec14[((IOTA - 26) & 127)]) + ((0.0056327499999999997 * fVec14[((IOTA - 25) & 127)]) + ((0.00093373200000000005 * fVec14[((IOTA - 24) & 127)]) + ((0.0144447 * fVec14[((IOTA - 23) & 127)]) + ((0.0027656299999999998 * fVec14[((IOTA - 14) & 127)]) + ((0.048321599999999999 * fVec14[((IOTA - 13) & 127)]) + ((0.046080900000000001 * fVec14[((IOTA - 12) & 127)]) + ((0.0051723899999999998 * fVec14[((IOTA - 11) & 127)]) + ((0.0011151400000000001 * fVec14[((IOTA - 9) & 127)]) + ((0.00019390000000000002 * fVec14[((IOTA - 4) & 127)]) + ((1.3112700000000001e-05 * fTemp14) + ((0.0018384600000000001 * fVec14[((IOTA - 68) & 127)]) + ((0.00195065 * fVec14[((IOTA - 67) & 127)]) + ((0.0012429300000000002 * fVec14[((IOTA - 66) & 127)]) + ((0.00169188 * fVec14[((IOTA - 65) & 127)]) + ((0.0010098400000000001 * fVec14[((IOTA - 64) & 127)]) + ((0.00052548700000000005 * fVec14[((IOTA - 61) & 127)]) + ((0.00060490900000000005 * fVec14[((IOTA - 48) & 127)]) + ((0.00033912900000000003 * fVec14[((IOTA - 58) & 127)]) + ((0.0021074099999999997 * fVec14[((IOTA - 55) & 127)]) + ((0.0012717499999999999 * fVec14[((IOTA - 54) & 127)]) + ((2.4813999999999997e-06 * fVec15[((IOTA - 124) & 127)]) + ((1.3482700000000002e-05 * fVec15[((IOTA - 118) & 127)]) + ((6.7211899999999999e-05 * fVec15[((IOTA - 114) & 127)]) + ((0.00013360000000000002 * fVec15[((IOTA - 113) & 127)]) + ((2.4868199999999998e-07 * fVec15[((IOTA - 112) & 127)]) + ((0.00021603300000000002 * fVec15[((IOTA - 108) & 127)]) + ((0.00013044 * fVec15[((IOTA - 107) & 127)]) + ((0.00031798600000000003 * fVec15[((IOTA - 103) & 127)]) + ((2.5636600000000001e-05 * fVec15[((IOTA - 102) & 127)]) + ((0.00013589400000000001 * fVec15[((IOTA - 101) & 127)]) + ((0.000417124 * fVec15[((IOTA - 100) & 127)]) + ((0.00028324699999999998 * fVec15[((IOTA - 99) & 127)]) + ((0.00072084000000000004 * fVec15[((IOTA - 98) & 127)]) + ((0.0013214800000000001 * fVec15[((IOTA - 94) & 127)]) + ((0.00147025 * fVec15[((IOTA - 93) & 127)]) + ((0.00043513300000000004 * fVec15[((IOTA - 92) & 127)]) + ((0.00047923700000000003 * fVec15[((IOTA - 91) & 127)]) + ((0.00045356600000000003 * fVec15[((IOTA - 90) & 127)]) + ((0.0013659900000000001 * fVec15[((IOTA - 89) & 127)]) + ((0.0012231700000000002 * fVec15[((IOTA - 88) & 127)]) + ((7.6576200000000007e-05 * fVec15[((IOTA - 87) & 127)]) + ((0.00029935000000000004 * fVec15[((IOTA - 83) & 127)]) + ((0.0033423799999999998 * fVec15[((IOTA - 82) & 127)]) + ((0.00229648 * fVec15[((IOTA - 81) & 127)]) + ((0.00063050200000000002 * fVec15[((IOTA - 79) & 127)]) + ((0.00022606700000000002 * fVec15[((IOTA - 77) & 127)]) + ((0.00156251 * fVec15[((IOTA - 54) & 127)]) + ((0.00015190600000000002 * fVec15[((IOTA - 53) & 127)]) + ((0.0026093900000000001 * fVec15[((IOTA - 51) & 127)]) + ((0.0030938500000000004 * fVec15[((IOTA - 50) & 127)]) + ((0.0031350200000000001 * fVec15[((IOTA - 49) & 127)]) + ((0.0040226100000000002 * fVec15[((IOTA - 48) & 127)]) + ((0.0049862600000000002 * fVec15[((IOTA - 44) & 127)]) + ((0.0058413700000000002 * fVec15[((IOTA - 41) & 127)]) + ((0.0045412800000000008 * fVec15[((IOTA - 40) & 127)]) + ((0.0065134700000000004 * fVec15[((IOTA - 37) & 127)]) + ((0.0086880100000000012 * fVec15[((IOTA - 35) & 127)]) + ((0.0107473 * fVec15[((IOTA - 34) & 127)]) + ((0.0015977300000000001 * fVec15[((IOTA - 32) & 127)]) + ((0.0063447800000000004 * fVec15[((IOTA - 30) & 127)]) + ((0.013484899999999999 * fVec15[((IOTA - 27) & 127)]) + ((0.0020287299999999999 * fVec15[((IOTA - 25) & 127)]) + ((0.018480799999999999 * fVec15[((IOTA - 24) & 127)]) + ((0.0056198899999999998 * fVec15[((IOTA - 22) & 127)]) + ((0.017673000000000001 * fVec15[((IOTA - 21) & 127)]) + ((0.0109137 * fVec15[((IOTA - 18) & 127)]) + ((0.0020388099999999998 * fVec15[((IOTA - 17) & 127)]) + ((0.00335082 * fVec15[((IOTA - 16) & 127)]) + ((0.00123416 * fVec15[((IOTA - 14) & 127)]) + ((0.0021818300000000001 * fVec15[((IOTA - 13) & 127)]) + ((0.00012594799999999999 * fVec15[((IOTA - 12) & 127)]) + ((0.00011811100000000002 * fVec15[((IOTA - 11) & 127)]) + ((0.00098081100000000005 * fVec15[((IOTA - 9) & 127)]) + ((0.00044730900000000001 * fVec15[((IOTA - 5) & 127)]) + ((1.2689500000000001e-05 * fVec15[((IOTA - 1) & 127)]) + ((0.0020653400000000001 * fVec15[((IOTA - 61) & 127)]) + ((0.0027092700000000002 * fVec15[((IOTA - 60) & 127)]) + ((0.00101213 * fVec15[((IOTA - 59) & 127)]) + ((9.5653400000000015e-05 * fVec15[((IOTA - 58) & 127)]) + ((0.00043061600000000004 * fVec15[((IOTA - 70) & 127)]) + ((0.00033741000000000001 * fVec15[((IOTA - 69) & 127)]) + ((0.000166844 * fVec15[((IOTA - 67) & 127)]) + ((0.00061629700000000003 * fVec15[((IOTA - 62) & 127)]) + ((9.3007799999999994e-06 * fVec16[((IOTA - 123) & 127)]) + ((8.1740999999999985e-06 * fVec16[((IOTA - 119) & 127)]) + ((3.2763499999999999e-05 * fVec16[((IOTA - 118) & 127)]) + ((5.73293e-05 * fVec16[((IOTA - 116) & 127)]) + ((0.00023654000000000004 * fVec16[((IOTA - 115) & 127)]) + ((0.00019556700000000001 * fVec16[((IOTA - 114) & 127)]) + ((5.6889900000000006e-05 * fVec16[((IOTA - 113) & 127)]) + ((0.00024025900000000002 * fVec16[((IOTA - 112) & 127)]) + ((0.00064424100000000004 * fVec16[((IOTA - 111) & 127)]) + ((0.00037747700000000003 * fVec16[((IOTA - 110) & 127)]) + ((3.6385200000000001e-06 * fVec16[((IOTA - 108) & 127)]) + ((0.00031980600000000001 * fVec16[((IOTA - 107) & 127)]) + ((0.00046841100000000007 * fVec16[((IOTA - 104) & 127)]) + ((0.00039931500000000002 * fVec16[((IOTA - 103) & 127)]) + ((3.42585e-06 * fVec16[((IOTA - 102) & 127)]) + ((0.00028306300000000001 * fVec16[((IOTA - 101) & 127)]) + ((0.0012796000000000001 * fVec16[((IOTA - 92) & 127)]) + ((0.0028355700000000004 * fVec16[((IOTA - 91) & 127)]) + ((0.00027312000000000001 * fVec16[((IOTA - 90) & 127)]) + ((0.00081654800000000006 * fVec16[((IOTA - 85) & 127)]) + ((7.8246599999999997e-05 * fVec16[((IOTA - 84) & 127)]) + ((0.0027393600000000001 * fVec16[((IOTA - 82) & 127)]) + ((0.00270886 * fVec16[((IOTA - 81) & 127)]) + ((0.0012424999999999999 * fVec16[((IOTA - 80) & 127)]) + ((0.00085482200000000009 * fVec16[((IOTA - 79) & 127)]) + ((0.00154955 * fVec16[((IOTA - 72) & 127)]) + ((0.0022211500000000003 * fVec16[((IOTA - 71) & 127)]) + ((0.0016530499999999999 * fVec16[((IOTA - 70) & 127)]) + ((0.0011901600000000002 * fVec16[((IOTA - 69) & 127)]) + ((0.0015993299999999999 * fVec16[((IOTA - 68) & 127)]) + ((0.00083150600000000009 * fVec16[((IOTA - 67) & 127)]) + ((0.0010392999999999999 * fVec16[((IOTA - 64) & 127)]) + ((0.0012512000000000001 * fVec16[((IOTA - 63) & 127)]) + ((0.0026334700000000002 * fVec16[((IOTA - 59) & 127)]) + ((0.0019319900000000002 * fVec16[((IOTA - 58) & 127)]) + ((0.0028975399999999997 * fVec16[((IOTA - 39) & 127)]) + ((0.018965700000000002 * fVec16[((IOTA - 38) & 127)]) + ((0.0134784 * fVec16[((IOTA - 37) & 127)]) + ((0.0031132099999999999 * fVec16[((IOTA - 36) & 127)]) + ((0.0063885599999999997 * fVec16[((IOTA - 35) & 127)]) + ((0.019759800000000001 * fVec16[((IOTA - 34) & 127)]) + ((0.027778900000000002 * fVec16[((IOTA - 33) & 127)]) + ((0.025745200000000003 * fVec16[((IOTA - 32) & 127)]) + ((0.0028674200000000003 * fVec16[((IOTA - 30) & 127)]) + ((0.023753799999999999 * fVec16[((IOTA - 29) & 127)]) + ((0.020933799999999999 * fVec16[((IOTA - 28) & 127)]) + ((0.0134953 * fVec16[((IOTA - 27) & 127)]) + ((0.024289200000000004 * fVec16[((IOTA - 26) & 127)]) + ((0.0073439100000000004 * fVec16[((IOTA - 25) & 127)]) + ((0.0091244499999999992 * fVec16[((IOTA - 22) & 127)]) + ((0.027517900000000001 * fVec16[((IOTA - 14) & 127)]) + ((0.060376700000000005 * fVec16[((IOTA - 13) & 127)]) + ((0.060888600000000008 * fVec16[((IOTA - 12) & 127)]) + ((0.0051214199999999998 * fVec16[((IOTA - 11) & 127)]) + ((0.00126033 * fVec16[((IOTA - 9) & 127)]) + ((2.0820699999999999e-05 * fVec16[((IOTA - 8) & 127)]) + ((0.00053298400000000002 * fVec16[((IOTA - 5) & 127)]) + ((6.2782600000000011e-05 * fVec16[((IOTA - 4) & 127)]) + ((7.6560500000000007e-05 * fVec16[((IOTA - 3) & 127)]) + ((2.9599300000000003e-05 * fVec16[((IOTA - 1) & 127)]) + ((1.8915500000000002e-05 * fTemp16) + ((0.00051400900000000006 * fVec16[((IOTA - 55) & 127)]) + ((0.00199607 * fVec16[((IOTA - 54) & 127)]) + ((0.00078433799999999998 * fVec16[((IOTA - 53) & 127)]) + (((1.0336899999999999e-06 * fVec17[((IOTA - 126) & 127)]) + ((1.07578e-06 * fVec17[((IOTA - 124) & 127)]) + ((1.0896600000000002e-05 * fVec17[((IOTA - 123) & 127)]) + ((5.7825300000000005e-06 * fVec17[((IOTA - 121) & 127)]) + ((2.9587800000000002e-05 * fVec17[((IOTA - 120) & 127)]) + ((0.000129173 * fVec17[((IOTA - 79) & 127)]) + ((0.0018692700000000001 * fVec17[((IOTA - 77) & 127)]) + ((0.0010500000000000002 * fVec17[((IOTA - 76) & 127)]) + ((1.2511200000000001e-05 * fVec17[((IOTA - 103) & 127)]) + ((3.3373e-05 * fVec17[((IOTA - 101) & 127)]) + ((0.00010999399999999999 * fVec17[((IOTA - 104) & 127)]) + ((0.0022768000000000003 * fVec17[((IOTA - 96) & 127)]) + ((0.0020205099999999997 * fVec17[((IOTA - 95) & 127)]) + ((0.00027500499999999999 * fVec17[((IOTA - 91) & 127)]) + ((9.9177200000000003e-05 * fVec17[((IOTA - 87) & 127)]) + ((0.0006416280000000001 * fVec17[((IOTA - 80) & 127)]) + ((0.0013042499999999999 * fVec17[((IOTA - 72) & 127)]) + ((0.0025056699999999998 * fVec17[((IOTA - 71) & 127)]) + ((0.0044664700000000002 * fVec17[((IOTA - 70) & 127)]) + ((0.0047280300000000003 * fVec17[((IOTA - 69) & 127)]) + ((0.0037914799999999999 * fVec17[((IOTA - 68) & 127)]) + ((0.0063763400000000003 * fVec17[((IOTA - 67) & 127)]) + ((0.0065615300000000003 * fVec17[((IOTA - 66) & 127)]) + ((0.00222449 * fVec17[((IOTA - 65) & 127)]) + ((0.0014331000000000001 * fVec17[((IOTA - 36) & 127)]) + ((0.0043624700000000002 * fVec17[((IOTA - 34) & 127)]) + ((0.0071496000000000007 * fVec17[((IOTA - 33) & 127)]) + ((0.009442299999999999 * fVec17[((IOTA - 31) & 127)]) + ((0.041430000000000002 * fVec17[((IOTA - 30) & 127)]) + ((0.032932100000000006 * fVec17[((IOTA - 29) & 127)]) + ((0.0056186100000000004 * fVec17[((IOTA - 28) & 127)]) + ((0.024621200000000003 * fVec17[((IOTA - 27) & 127)]) + ((0.042141200000000004 * fVec17[((IOTA - 26) & 127)]) + ((0.028794800000000002 * fVec17[((IOTA - 25) & 127)]) + ((0.06345640000000001 * fVec17[((IOTA - 24) & 127)]) + ((0.07541260000000001 * fVec17[((IOTA - 23) & 127)]) + ((0.00046772600000000007 * fVec17[((IOTA - 21) & 127)]) + ((0.049093400000000002 * fVec17[((IOTA - 20) & 127)]) + ((0.054047100000000001 * fVec17[((IOTA - 19) & 127)]) + ((0.0108471 * fVec17[((IOTA - 16) & 127)]) + ((0.0010471900000000001 * fVec17[((IOTA - 7) & 127)]) + ((0.00047446700000000006 * fVec17[((IOTA - 6) & 127)]) + (((1.5753899999999999e-07 * fVec18[((IOTA - 126) & 127)]) + ((3.3066799999999999e-06 * fVec18[((IOTA - 125) & 127)]) + ((9.6444300000000008e-05 * fVec18[((IOTA - 110) & 127)]) + ((0.00034096799999999998 * fVec18[((IOTA - 109) & 127)]) + ((1.0190999999999999e-05 * fVec18[((IOTA - 108) & 127)]) + ((0.00023396100000000001 * fVec18[((IOTA - 106) & 127)]) + ((0.00052374700000000008 * fVec18[((IOTA - 105) & 127)]) + ((0.00036215100000000001 * fVec18[((IOTA - 104) & 127)]) + ((0.00063805800000000005 * fVec18[((IOTA - 102) & 127)]) + ((0.0011957500000000002 * fVec18[((IOTA - 101) & 127)]) + ((0.0010047600000000002 * fVec18[((IOTA - 100) & 127)]) + ((0.00095472699999999994 * fVec18[((IOTA - 99) & 127)]) + ((0.00092775000000000008 * fVec18[((IOTA - 98) & 127)]) + ((0.00122649 * fVec18[((IOTA - 97) & 127)]) + ((0.0011230999999999999 * fVec18[((IOTA - 93) & 127)]) + ((0.00125953 * fVec18[((IOTA - 92) & 127)]) + ((0.00019295400000000001 * fVec18[((IOTA - 91) & 127)]) + ((0.00055969600000000004 * fVec18[((IOTA - 89) & 127)]) + ((0.000103257 * fVec18[((IOTA - 76) & 127)]) + ((0.00171093 * fVec18[((IOTA - 73) & 127)]) + ((0.0020383699999999999 * fVec18[((IOTA - 72) & 127)]) + ((0.0013637999999999999 * fVec18[((IOTA - 69) & 127)]) + ((0.0024843999999999999 * fVec18[((IOTA - 68) & 127)]) + ((0.00074355600000000003 * fVec18[((IOTA - 67) & 127)]) + ((0.00089791299999999997 * fVec18[((IOTA - 65) & 127)]) + ((0.0028104300000000005 * fVec18[((IOTA - 64) & 127)]) + ((0.0015055300000000001 * fVec18[((IOTA - 63) & 127)]) + ((0.00129704 * fVec18[((IOTA - 62) & 127)]) + ((0.00045463200000000001 * fVec18[((IOTA - 61) & 127)]) + ((0.00292619 * fVec18[((IOTA - 60) & 127)]) + ((0.0039499399999999999 * fVec18[((IOTA - 59) & 127)]) + ((0.00042873700000000005 * fVec18[((IOTA - 57) & 127)]) + ((0.00077501600000000001 * fVec18[((IOTA - 56) & 127)]) + ((0.0057435900000000007 * fVec18[((IOTA - 52) & 127)]) + ((0.0064549899999999999 * fVec18[((IOTA - 45) & 127)]) + ((0.0094244500000000009 * fVec18[((IOTA - 39) & 127)]) + ((0.0011423000000000002 * fVec18[((IOTA - 38) & 127)]) + ((0.0177702 * fVec18[((IOTA - 36) & 127)]) + ((0.0096359600000000007 * fVec18[((IOTA - 35) & 127)]) + ((0.019155500000000002 * fVec18[((IOTA - 33) & 127)]) + ((0.019293299999999999 * fVec18[((IOTA - 32) & 127)]) + ((0.0068834500000000002 * fVec18[((IOTA - 29) & 127)]) + ((0.036199000000000002 * fVec18[((IOTA - 26) & 127)]) + ((0.028412400000000001 * fVec18[((IOTA - 23) & 127)]) + ((0.016930500000000001 * fVec18[((IOTA - 20) & 127)]) + ((0.0106017 * fVec18[((IOTA - 19) & 127)]) + ((0.000263627 * fVec18[((IOTA - 17) & 127)]) + ((0.00025129900000000002 * fVec18[((IOTA - 15) & 127)]) + ((0.00047378999999999998 * fVec18[((IOTA - 14) & 127)]) + ((0.000359551 * fVec18[((IOTA - 11) & 127)]) + ((0.00050858999999999995 * fVec18[((IOTA - 10) & 127)]) + ((0.00025865000000000003 * fVec18[((IOTA - 8) & 127)]) + ((0.00030013000000000001 * fVec18[((IOTA - 7) & 127)]) + ((0.00012962100000000001 * fVec18[((IOTA - 4) & 127)]) + ((5.1984399999999995e-06 * fVec18[((IOTA - 2) & 127)]) + ((2.0081900000000002e-05 * fVec18[((IOTA - 1) & 127)]) + ((5.35095e-06 * fTemp18) + (((6.5997900000000001e-08 * fVec19[((IOTA - 126) & 127)]) + ((2.1505000000000002e-05 * fVec19[((IOTA - 111) & 127)]) + ((0.00025875799999999999 * fVec19[((IOTA - 110) & 127)]) + ((0.00016541 * fVec19[((IOTA - 109) & 127)]) + ((0.00012994100000000001 * fVec19[((IOTA - 108) & 127)]) + ((0.000501459 * fVec19[((IOTA - 107) & 127)]) + ((0.00061807300000000002 * fVec19[((IOTA - 106) & 127)]) + ((0.00041380000000000003 * fVec19[((IOTA - 105) & 127)]) + ((4.2136500000000006e-05 * fVec19[((IOTA - 102) & 127)]) + ((1.1025e-06 * fVec19[((IOTA - 101) & 127)]) + ((0.000102185 * fVec19[((IOTA - 100) & 127)]) + ((0.0010346200000000002 * fVec19[((IOTA - 99) & 127)]) + ((0.0015065 * fVec19[((IOTA - 98) & 127)]) + ((0.00015973800000000001 * fVec19[((IOTA - 94) & 127)]) + ((0.00065440400000000003 * fVec19[((IOTA - 93) & 127)]) + ((0.00049362799999999997 * fVec19[((IOTA - 91) & 127)]) + ((0.0010192300000000001 * fVec19[((IOTA - 90) & 127)]) + ((7.1971000000000006e-05 * fVec19[((IOTA - 85) & 127)]) + ((0.00051516900000000011 * fVec19[((IOTA - 84) & 127)]) + ((0.00076406400000000006 * fVec19[((IOTA - 83) & 127)]) + ((9.4944000000000018e-05 * fVec19[((IOTA - 81) & 127)]) + ((0.00095418100000000002 * fVec19[((IOTA - 80) & 127)]) + ((0.00034814200000000002 * fVec19[((IOTA - 76) & 127)]) + ((8.0286900000000005e-05 * fVec19[((IOTA - 71) & 127)]) + ((0.00159566 * fVec19[((IOTA - 70) & 127)]) + ((1.1146700000000001e-05 * fVec19[((IOTA - 67) & 127)]) + ((0.0016114299999999999 * fVec19[((IOTA - 66) & 127)]) + ((0.0030693399999999998 * fVec19[((IOTA - 65) & 127)]) + ((0.0029336900000000001 * fVec19[((IOTA - 64) & 127)]) + ((0.00021672300000000002 * fVec19[((IOTA - 61) & 127)]) + ((0.0015251900000000001 * fVec19[((IOTA - 60) & 127)]) + ((0.00063413500000000008 * fVec19[((IOTA - 59) & 127)]) + ((0.0015717800000000001 * fVec19[((IOTA - 40) & 127)]) + ((0.0086705299999999992 * fVec19[((IOTA - 37) & 127)]) + ((0.00411948 * fVec19[((IOTA - 34) & 127)]) + ((0.0107584 * fVec19[((IOTA - 33) & 127)]) + ((0.0029588800000000001 * fVec19[((IOTA - 32) & 127)]) + ((0.0139764 * fVec19[((IOTA - 30) & 127)]) + ((0.0093965200000000002 * fVec19[((IOTA - 29) & 127)]) + ((0.016385799999999999 * fVec19[((IOTA - 28) & 127)]) + ((0.015254500000000001 * fVec19[((IOTA - 27) & 127)]) + ((0.0099207400000000008 * fVec19[((IOTA - 26) & 127)]) + ((0.041638400000000006 * fVec19[((IOTA - 25) & 127)]) + ((0.020153599999999997 * fVec19[((IOTA - 24) & 127)]) + ((0.00032049699999999999 * fVec19[((IOTA - 23) & 127)]) + ((0.034925999999999999 * fVec19[((IOTA - 22) & 127)]) + ((0.0069752599999999996 * fVec19[((IOTA - 21) & 127)]) + ((0.0037277 * fVec19[((IOTA - 20) & 127)]) + ((0.045202099999999995 * fVec19[((IOTA - 19) & 127)]) + ((0.00526948 * fVec19[((IOTA - 16) & 127)]) + ((0.000358363 * fVec19[((IOTA - 10) & 127)]) + ((0.00023124899999999999 * fVec19[((IOTA - 7) & 127)]) + ((0.00020135900000000002 * fVec19[((IOTA - 6) & 127)]) + (((7.2115600000000003e-07 * fVec20[((IOTA - 126) & 127)]) + ((3.4760399999999997e-08 * fVec20[((IOTA - 123) & 127)]) + ((2.0505700000000003e-05 * fVec20[((IOTA - 122) & 127)]) + ((7.2276399999999995e-06 * fVec20[((IOTA - 121) & 127)]) + ((1.3220600000000002e-05 * fVec20[((IOTA - 120) & 127)]) + ((1.2673900000000001e-05 * fVec20[((IOTA - 118) & 127)]) + ((4.4900900000000009e-05 * fVec20[((IOTA - 117) & 127)]) + ((4.1691399999999999e-05 * fVec20[((IOTA - 110) & 127)]) + ((0.00027668200000000005 * fVec20[((IOTA - 92) & 127)]) + ((0.00280241 * fVec20[((IOTA - 82) & 127)]) + ((0.0020786799999999999 * fVec20[((IOTA - 81) & 127)]) + ((0.00091981900000000011 * fVec20[((IOTA - 80) & 127)]) + ((0.0002275 * fVec20[((IOTA - 79) & 127)]) + ((7.5101900000000007e-05 * fVec20[((IOTA - 76) & 127)]) + ((0.00076943900000000002 * fVec20[((IOTA - 72) & 127)]) + ((0.00063752100000000005 * fVec20[((IOTA - 71) & 127)]) + ((0.0026788099999999998 * fVec20[((IOTA - 70) & 127)]) + ((0.0036546199999999999 * fVec20[((IOTA - 69) & 127)]) + ((7.3547000000000006e-05 * fVec20[((IOTA - 68) & 127)]) + ((0.0010616200000000001 * fVec20[((IOTA - 66) & 127)]) + ((0.00033734999999999999 * fVec20[((IOTA - 64) & 127)]) + ((0.00050336900000000004 * fVec20[((IOTA - 63) & 127)]) + ((0.0013227800000000002 * fVec20[((IOTA - 61) & 127)]) + ((0.0013802 * fVec20[((IOTA - 60) & 127)]) + ((0.00057507100000000002 * fVec20[((IOTA - 59) & 127)]) + ((0.0017853699999999999 * fVec20[((IOTA - 58) & 127)]) + ((0.0034082300000000004 * fVec20[((IOTA - 57) & 127)]) + ((0.00345985 * fVec20[((IOTA - 56) & 127)]) + ((0.00155444 * fVec20[((IOTA - 53) & 127)]) + ((0.0014091100000000001 * fVec20[((IOTA - 52) & 127)]) + ((0.0018625499999999999 * fVec20[((IOTA - 51) & 127)]) + ((0.00053192199999999999 * fVec20[((IOTA - 48) & 127)]) + ((0.000148231 * fVec20[((IOTA - 47) & 127)]) + ((0.0072206400000000004 * fVec20[((IOTA - 44) & 127)]) + ((0.0011467599999999999 * fVec20[((IOTA - 43) & 127)]) + ((0.0050838799999999998 * fVec20[((IOTA - 35) & 127)]) + ((0.0111489 * fVec20[((IOTA - 12) & 127)]) + ((0.00048254200000000003 * fVec20[((IOTA - 10) & 127)]) + ((0.00084440200000000006 * fVec20[((IOTA - 7) & 127)]) + ((0.00014837300000000001 * fVec20[((IOTA - 3) & 127)]) + ((0.0034120499999999998 * fVec20[((IOTA - 24) & 127)]) + ((0.00206245 * fVec20[((IOTA - 23) & 127)]) + ((0.036800600000000003 * fVec20[((IOTA - 19) & 127)]) + ((0.013509400000000001 * fVec20[((IOTA - 32) & 127)]) + ((0.015784800000000002 * fVec20[((IOTA - 27) & 127)]) + ((0.0024348900000000003 * fVec20[((IOTA - 25) & 127)]) + ((0.016894100000000002 * fVec20[((IOTA - 16) & 127)]) + ((0.015907999999999999 * fVec20[((IOTA - 15) & 127)]) + ((6.1446399999999998e-06 * fVec21[((IOTA - 123) & 127)]) + ((8.1741199999999999e-06 * fVec21[((IOTA - 122) & 127)]) + ((2.2315100000000003e-05 * fVec21[((IOTA - 118) & 127)]) + (((4.6366800000000005e-05 * fVec21[((IOTA - 109) & 127)]) + ((0.00015426800000000002 * fVec21[((IOTA - 108) & 127)]) + ((2.9996500000000003e-05 * fVec21[((IOTA - 104) & 127)]) + ((0.00022863600000000002 * fVec21[((IOTA - 103) & 127)]) + ((0.00013601100000000001 * fVec21[((IOTA - 101) & 127)]) + ((0.00011103000000000001 * fVec21[((IOTA - 100) & 127)]) + ((0.00055044600000000001 * fVec21[((IOTA - 98) & 127)]) + ((0.00044798200000000004 * fVec21[((IOTA - 97) & 127)]) + ((0.00032662200000000005 * fVec21[((IOTA - 96) & 127)]) + ((0.00065044300000000001 * fVec21[((IOTA - 92) & 127)]) + ((0.0011816700000000001 * fVec21[((IOTA - 91) & 127)]) + ((0.00100478 * fVec21[((IOTA - 90) & 127)]) + ((4.4411900000000001e-05 * fVec21[((IOTA - 89) & 127)]) + ((0.000103707 * fVec21[((IOTA - 85) & 127)]) + ((0.00012959000000000001 * fVec21[((IOTA - 84) & 127)]) + ((0.0012166300000000002 * fVec21[((IOTA - 82) & 127)]) + ((0.00073013500000000003 * fVec21[((IOTA - 81) & 127)]) + ((0.0015448500000000002 * fVec21[((IOTA - 80) & 127)]) + ((0.00109789 * fVec21[((IOTA - 79) & 127)]) + ((0.00041635900000000004 * fVec21[((IOTA - 77) & 127)]) + ((0.00033440100000000001 * fVec21[((IOTA - 74) & 127)]) + ((0.00171149 * fVec21[((IOTA - 71) & 127)]) + ((0.0032145400000000001 * fVec21[((IOTA - 70) & 127)]) + ((0.000234556 * fVec21[((IOTA - 69) & 127)]) + ((0.0009296310000000001 * fVec21[((IOTA - 67) & 127)]) + ((0.00017575500000000001 * fVec21[((IOTA - 66) & 127)]) + ((0.00098071900000000012 * fVec21[((IOTA - 64) & 127)]) + ((0.00040021800000000004 * fVec21[((IOTA - 63) & 127)]) + ((0.0020002800000000001 * fVec21[((IOTA - 61) & 127)]) + ((0.0024495200000000002 * fVec21[((IOTA - 56) & 127)]) + ((0.0022621500000000001 * fVec21[((IOTA - 55) & 127)]) + ((0.0026210900000000004 * fVec21[((IOTA - 54) & 127)]) + ((0.00107755 * fVec21[((IOTA - 53) & 127)]) + ((0.0018869100000000001 * fVec21[((IOTA - 51) & 127)]) + ((0.0016816299999999999 * fVec21[((IOTA - 48) & 127)]) + ((0.00099638500000000002 * fVec21[((IOTA - 47) & 127)]) + ((0.0034718700000000002 * fVec21[((IOTA - 43) & 127)]) + ((0.0068587300000000004 * fVec21[((IOTA - 42) & 127)]) + ((0.0058219500000000002 * fVec21[((IOTA - 34) & 127)]) + ((0.017078900000000001 * fVec21[((IOTA - 33) & 127)]) + ((0.00087088200000000001 * fVec21[((IOTA - 30) & 127)]) + ((0.027225600000000003 * fVec21[((IOTA - 29) & 127)]) + ((0.00946403 * fVec21[((IOTA - 28) & 127)]) + ((0.0038781100000000002 * fVec21[((IOTA - 25) & 127)]) + ((0.048044200000000002 * fVec21[((IOTA - 24) & 127)]) + ((0.0047823300000000004 * fVec21[((IOTA - 23) & 127)]) + ((0.031593799999999998 * fVec21[((IOTA - 21) & 127)]) + ((0.0092093100000000001 * fVec21[((IOTA - 20) & 127)]) + ((0.0182515 * fVec21[((IOTA - 19) & 127)]) + ((0.0125871 * fVec21[((IOTA - 16) & 127)]) + ((0.0010793700000000001 * fVec21[((IOTA - 14) & 127)]) + ((0.0061485900000000007 * fVec21[((IOTA - 12) & 127)]) + ((0.00108131 * fVec21[((IOTA - 11) & 127)]) + ((0.00149292 * fVec21[((IOTA - 7) & 127)]) + ((0.00062478100000000003 * fVec21[((IOTA - 5) & 127)]) + (((1.4188099999999999e-06 * fVec22[((IOTA - 126) & 127)]) + ((3.3187600000000001e-06 * fVec22[((IOTA - 125) & 127)]) + ((5.1482899999999996e-06 * fVec22[((IOTA - 124) & 127)]) + ((8.7600299999999995e-06 * fVec22[((IOTA - 123) & 127)]) + ((5.5660599999999997e-06 * fVec22[((IOTA - 122) & 127)]) + ((5.530960000000001e-05 * fVec22[((IOTA - 121) & 127)]) + ((0.00011918500000000002 * fVec22[((IOTA - 120) & 127)]) + ((9.8678100000000013e-05 * fVec22[((IOTA - 119) & 127)]) + ((4.2207000000000004e-05 * fVec22[((IOTA - 118) & 127)]) + ((3.2490500000000003e-05 * fVec22[((IOTA - 117) & 127)]) + ((0.00011697900000000002 * fVec22[((IOTA - 116) & 127)]) + ((5.6691300000000004e-05 * fVec22[((IOTA - 112) & 127)]) + ((0.000115798 * fVec22[((IOTA - 111) & 127)]) + ((0.0037339199999999999 * fVec22[((IOTA - 96) & 127)]) + ((0.0027517499999999999 * fVec22[((IOTA - 95) & 127)]) + ((0.00065997500000000004 * fVec22[((IOTA - 92) & 127)]) + ((0.0016790700000000002 * fVec22[((IOTA - 91) & 127)]) + ((0.0019817300000000001 * fVec22[((IOTA - 88) & 127)]) + ((0.0040626200000000003 * fVec22[((IOTA - 87) & 127)]) + ((0.0023261500000000004 * fVec22[((IOTA - 86) & 127)]) + ((0.0015044699999999999 * fVec22[((IOTA - 85) & 127)]) + ((0.0010922900000000001 * fVec22[((IOTA - 84) & 127)]) + ((0.0012104800000000001 * fVec22[((IOTA - 64) & 127)]) + ((0.0039074399999999999 * fVec22[((IOTA - 63) & 127)]) + ((0.00102589 * fVec22[((IOTA - 62) & 127)]) + ((0.00070128400000000004 * fVec22[((IOTA - 59) & 127)]) + ((0.00040873600000000004 * fVec22[((IOTA - 58) & 127)]) + ((0.0011136799999999999 * fVec22[((IOTA - 57) & 127)]) + ((0.0035448200000000002 * fVec22[((IOTA - 56) & 127)]) + ((0.0022150400000000002 * fVec22[((IOTA - 55) & 127)]) + ((3.8517100000000004e-05 * fVec22[((IOTA - 54) & 127)]) + ((0.0011952499999999999 * fVec22[((IOTA - 53) & 127)]) + ((0.00017855099999999999 * fVec22[((IOTA - 52) & 127)]) + ((0.0020778099999999998 * fVec22[((IOTA - 51) & 127)]) + ((0.0048699899999999994 * fVec22[((IOTA - 50) & 127)]) + ((0.0020168600000000001 * fVec22[((IOTA - 49) & 127)]) + ((0.0011997199999999998 * fVec22[((IOTA - 47) & 127)]) + ((0.0061526599999999999 * fVec22[((IOTA - 46) & 127)]) + ((0.0028706900000000004 * fVec22[((IOTA - 44) & 127)]) + ((0.011077500000000001 * fVec22[((IOTA - 43) & 127)]) + ((0.0022290399999999998 * fVec22[((IOTA - 42) & 127)]) + ((0.0084232300000000003 * fVec22[((IOTA - 39) & 127)]) + ((0.00127378 * fVec22[((IOTA - 38) & 127)]) + ((0.0125606 * fVec22[((IOTA - 34) & 127)]) + ((0.011542200000000001 * fVec22[((IOTA - 31) & 127)]) + ((0.024367400000000001 * fVec22[((IOTA - 30) & 127)]) + ((0.0537481 * fVec22[((IOTA - 26) & 127)]) + ((0.00065433400000000001 * fVec22[((IOTA - 10) & 127)]) + ((0.00012754700000000002 * fVec22[((IOTA - 9) & 127)]) + ((0.00028600400000000002 * fVec22[((IOTA - 8) & 127)]) + ((0.00056964699999999995 * fVec22[((IOTA - 6) & 127)]) + ((0.00055874899999999999 * fVec22[((IOTA - 4) & 127)]) + ((0.000107706 * fVec22[((IOTA - 2) & 127)]) + ((2.3258800000000005e-05 * fVec22[((IOTA - 1) & 127)]) + ((1.5002200000000002e-05 * fTemp22) + ((0.013059400000000001 * fVec22[((IOTA - 23) & 127)]) + ((0.021176 * fVec22[((IOTA - 22) & 127)]) + ((0.0292041 * fVec22[((IOTA - 18) & 127)]) + ((0.015611 * fVec22[((IOTA - 17) & 127)]) + ((0.0131959 * fVec22[((IOTA - 15) & 127)]) + ((1.8648999999999999e-06 * fVec23[((IOTA - 126) & 127)]) + ((1.0045e-05 * fVec23[((IOTA - 125) & 127)]) + ((1.8977800000000003e-05 * fVec23[((IOTA - 124) & 127)]) + ((1.9873400000000002e-05 * fVec23[((IOTA - 123) & 127)]) + ((3.4954000000000004e-05 * fVec23[((IOTA - 122) & 127)]) + ((9.3229500000000019e-05 * fVec23[((IOTA - 121) & 127)]) + ((0.00012240800000000001 * fVec23[((IOTA - 120) & 127)]) + ((9.5701199999999998e-05 * fVec23[((IOTA - 119) & 127)]) + ((5.5900900000000005e-05 * fVec23[((IOTA - 115) & 127)]) + ((1.9102600000000002e-05 * fVec23[((IOTA - 114) & 127)]) + ((0.000876507 * fVec23[((IOTA - 91) & 127)]) + ((0.0020406000000000001 * fVec23[((IOTA - 90) & 127)]) + ((0.0013280499999999999 * fVec23[((IOTA - 89) & 127)]) + ((0.0017303100000000001 * fVec23[((IOTA - 88) & 127)]) + ((0.0029776099999999999 * fVec23[((IOTA - 87) & 127)]) + ((0.0025195700000000001 * fVec23[((IOTA - 86) & 127)]) + ((0.0011889400000000001 * fVec23[((IOTA - 83) & 127)]) + ((0.000386788 * fVec23[((IOTA - 81) & 127)]) + ((0.00090610300000000012 * fVec23[((IOTA - 80) & 127)]) + ((0.0014508500000000001 * fVec23[((IOTA - 79) & 127)]) + ((0.00082739399999999996 * fVec23[((IOTA - 78) & 127)]) + ((0.00013990400000000002 * fVec23[((IOTA - 76) & 127)]) + ((0.00174807 * fVec23[((IOTA - 75) & 127)]) + ((0.00102092 * fVec23[((IOTA - 74) & 127)]) + (((0.00235812 * fVec23[((IOTA - 63) & 127)]) + ((0.0021519 * fVec23[((IOTA - 62) & 127)]) + ((7.6654099999999985e-06 * fVec23[((IOTA - 61) & 127)]) + ((0.0022741699999999998 * fVec23[((IOTA - 55) & 127)]) + ((0.0042530099999999998 * fVec23[((IOTA - 54) & 127)]) + ((0.0032282000000000001 * fVec23[((IOTA - 53) & 127)]) + ((0.0041592900000000004 * fVec23[((IOTA - 50) & 127)]) + ((0.0075640600000000001 * fVec23[((IOTA - 49) & 127)]) + ((0.0079603199999999999 * fVec23[((IOTA - 48) & 127)]) + ((0.0030812000000000001 * fVec23[((IOTA - 47) & 127)]) + ((0.00018497500000000001 * fVec23[((IOTA - 46) & 127)]) + ((0.00033097600000000002 * fVec23[((IOTA - 43) & 127)]) + ((0.0066906600000000002 * fVec23[((IOTA - 42) & 127)]) + ((0.0081795500000000007 * fVec23[((IOTA - 41) & 127)]) + ((0.00108066 * fVec23[((IOTA - 40) & 127)]) + ((0.0088403900000000001 * fVec23[((IOTA - 36) & 127)]) + ((0.0054466000000000002 * fVec23[((IOTA - 35) & 127)]) + ((0.0040393699999999996 * fVec23[((IOTA - 33) & 127)]) + ((0.033863999999999998 * fVec23[((IOTA - 29) & 127)]) + ((0.0092350000000000002 * fVec23[((IOTA - 28) & 127)]) + ((0.00053732699999999999 * fVec23[((IOTA - 26) & 127)]) + ((0.0043864799999999999 * fVec23[((IOTA - 24) & 127)]) + ((0.0027836500000000004 * fVec23[((IOTA - 23) & 127)]) + ((0.0092729000000000006 * fVec23[((IOTA - 22) & 127)]) + ((0.022299000000000003 * fVec23[((IOTA - 21) & 127)]) + ((0.0012059800000000002 * fVec23[((IOTA - 20) & 127)]) + ((0.025815500000000002 * fVec23[((IOTA - 17) & 127)]) + ((7.0800700000000008e-05 * fVec23[((IOTA - 9) & 127)]) + ((0.00076956600000000007 * fVec23[((IOTA - 8) & 127)]) + ((0.000231146 * fVec23[((IOTA - 5) & 127)]) + (((1.4833700000000001e-06 * fVec9[((IOTA - 126) & 127)]) + ((3.6973199999999999e-06 * fVec9[((IOTA - 125) & 127)]) + ((8.5058500000000009e-06 * fVec9[((IOTA - 124) & 127)]) + ((4.1470500000000002e-05 * fVec9[((IOTA - 123) & 127)]) + ((7.1901800000000003e-05 * fVec9[((IOTA - 122) & 127)]) + ((3.71676e-05 * fVec9[((IOTA - 121) & 127)]) + ((3.3982700000000002e-05 * fVec9[((IOTA - 119) & 127)]) + ((0.00016550199999999999 * fVec9[((IOTA - 118) & 127)]) + ((0.00015893600000000001 * fVec9[((IOTA - 117) & 127)]) + ((0.00011888700000000002 * fVec9[((IOTA - 116) & 127)]) + ((2.6751600000000003e-05 * fVec9[((IOTA - 115) & 127)]) + ((1.5261800000000004e-05 * fVec9[((IOTA - 114) & 127)]) + ((0.00030627700000000004 * fVec9[((IOTA - 113) & 127)]) + ((0.00036830800000000003 * fVec9[((IOTA - 112) & 127)]) + ((0.000251322 * fVec9[((IOTA - 111) & 127)]) + ((0.00022708 * fVec9[((IOTA - 110) & 127)]) + ((0.000239084 * fVec9[((IOTA - 109) & 127)]) + ((9.1238799999999995e-06 * fVec9[((IOTA - 108) & 127)]) + ((0.00015429699999999999 * fVec9[((IOTA - 90) & 127)]) + ((0.00021972700000000002 * fVec9[((IOTA - 89) & 127)]) + ((0.0011643300000000001 * fVec9[((IOTA - 82) & 127)]) + ((0.00065994200000000006 * fVec9[((IOTA - 77) & 127)]) + ((0.0017905 * fVec9[((IOTA - 76) & 127)]) + ((0.00015571700000000001 * fVec9[((IOTA - 71) & 127)]) + ((0.0044549899999999998 * fVec9[((IOTA - 70) & 127)]) + ((0.0039002500000000005 * fVec9[((IOTA - 69) & 127)]) + ((0.00054205300000000002 * fVec9[((IOTA - 68) & 127)]) + ((0.00164631 * fVec9[((IOTA - 67) & 127)]) + ((0.00128867 * fVec9[((IOTA - 66) & 127)]) + ((0.000377902 * fVec9[((IOTA - 65) & 127)]) + ((0.00227327 * fVec9[((IOTA - 64) & 127)]) + ((0.0030369999999999998 * fVec9[((IOTA - 63) & 127)]) + ((0.0023284899999999999 * fVec9[((IOTA - 62) & 127)]) + ((0.0020450900000000003 * fVec9[((IOTA - 61) & 127)]) + ((0.0038926099999999999 * fVec9[((IOTA - 60) & 127)]) + ((0.0057548899999999995 * fVec9[((IOTA - 58) & 127)]) + ((0.0110121 * fVec9[((IOTA - 57) & 127)]) + ((0.010980500000000001 * fVec9[((IOTA - 56) & 127)]) + ((0.0074067100000000004 * fVec9[((IOTA - 55) & 127)]) + ((0.0058000299999999994 * fVec9[((IOTA - 54) & 127)]) + ((0.0046881500000000003 * fVec9[((IOTA - 53) & 127)]) + ((0.0079024400000000002 * fVec9[((IOTA - 52) & 127)]) + ((0.0143637 * fVec9[((IOTA - 51) & 127)]) + ((0.018899099999999999 * fVec9[((IOTA - 50) & 127)]) + ((0.016699200000000001 * fVec9[((IOTA - 49) & 127)]) + ((0.0121522 * fVec9[((IOTA - 48) & 127)]) + ((0.011685700000000002 * fVec9[((IOTA - 47) & 127)]) + ((0.0122635 * fVec9[((IOTA - 46) & 127)]) + ((0.017027300000000002 * fVec9[((IOTA - 45) & 127)]) + ((0.019806900000000002 * fVec9[((IOTA - 44) & 127)]) + ((0.017303499999999999 * fVec9[((IOTA - 43) & 127)]) + ((0.017569399999999999 * fVec9[((IOTA - 42) & 127)]) + ((0.016072400000000001 * fVec9[((IOTA - 41) & 127)]) + ((0.0227996 * fVec9[((IOTA - 40) & 127)]) + ((0.016965000000000001 * fVec9[((IOTA - 39) & 127)]) + ((0.017693 * fVec9[((IOTA - 38) & 127)]) + ((0.033336499999999998 * fVec9[((IOTA - 37) & 127)]) + ((0.029073099999999998 * fVec9[((IOTA - 36) & 127)]) + ((0.018621700000000001 * fVec9[((IOTA - 35) & 127)]) + ((0.023295900000000001 * fVec9[((IOTA - 34) & 127)]) + ((0.030269900000000002 * fVec9[((IOTA - 33) & 127)]) + ((0.023498000000000002 * fVec9[((IOTA - 32) & 127)]) + ((0.012867100000000001 * fVec9[((IOTA - 31) & 127)]) + ((0.024658199999999998 * fVec9[((IOTA - 30) & 127)]) + ((0.033071500000000004 * fVec9[((IOTA - 29) & 127)]) + ((0.023601800000000003 * fVec9[((IOTA - 28) & 127)]) + ((0.025422899999999998 * fVec9[((IOTA - 27) & 127)]) + ((0.014210199999999999 * fVec9[((IOTA - 26) & 127)]) + ((0.010567 * fVec9[((IOTA - 25) & 127)]) + ((0.056895100000000004 * fVec9[((IOTA - 24) & 127)]) + ((0.00027516900000000002 * fVec9[((IOTA - 2) & 127)]) + ((1.74779e-06 * fVec24[((IOTA - 126) & 127)]) + ((7.1374800000000001e-06 * fVec24[((IOTA - 125) & 127)]) + ((1.69708e-05 * fVec24[((IOTA - 124) & 127)]) + ((7.3980599999999995e-07 * fVec24[((IOTA - 123) & 127)]) + ((5.5996800000000006e-05 * fVec24[((IOTA - 121) & 127)]) + ((0.000117308 * fVec24[((IOTA - 120) & 127)]) + ((0.000195057 * fVec24[((IOTA - 119) & 127)]) + ((0.00020216400000000001 * fVec24[((IOTA - 118) & 127)]) + ((0.00016114100000000001 * fVec24[((IOTA - 117) & 127)]) + ((0.00038352400000000005 * fVec24[((IOTA - 116) & 127)]) + ((0.00050261399999999997 * fVec24[((IOTA - 115) & 127)]) + ((0.00050803600000000001 * fVec24[((IOTA - 114) & 127)]) + ((0.00042659700000000002 * fVec24[((IOTA - 113) & 127)]) + ((0.00050421999999999999 * fVec24[((IOTA - 112) & 127)]) + ((0.0010336799999999999 * fVec24[((IOTA - 111) & 127)]) + ((0.00070924500000000006 * fVec24[((IOTA - 110) & 127)]) + ((0.000779071 * fVec24[((IOTA - 109) & 127)]) + ((0.00095978899999999995 * fVec24[((IOTA - 108) & 127)]) + ((0.0013097499999999999 * fVec24[((IOTA - 107) & 127)]) + ((0.0016259900000000001 * fVec24[((IOTA - 106) & 127)]) + ((0.00100501 * fVec24[((IOTA - 105) & 127)]) + ((0.0012236 * fVec24[((IOTA - 104) & 127)]) + ((0.0018419899999999999 * fVec24[((IOTA - 103) & 127)]) + ((0.00147426 * fVec24[((IOTA - 102) & 127)]) + ((0.0013272 * fVec24[((IOTA - 101) & 127)]) + ((0.00094503799999999993 * fVec24[((IOTA - 100) & 127)]) + ((0.00059498000000000005 * fVec24[((IOTA - 99) & 127)]) + ((0.0025739000000000001 * fVec24[((IOTA - 96) & 127)]) + ((0.0033512100000000003 * fVec24[((IOTA - 95) & 127)]) + ((0.00193882 * fVec24[((IOTA - 88) & 127)]) + ((0.00365475 * fVec24[((IOTA - 87) & 127)]) + ((0.0026745600000000003 * fVec24[((IOTA - 86) & 127)]) + ((0.0017505699999999999 * fVec24[((IOTA - 85) & 127)]) + ((0.0010550900000000001 * fVec24[((IOTA - 84) & 127)]) + ((2.5156400000000002e-05 * fVec24[((IOTA - 83) & 127)]) + ((0.0015368900000000002 * fVec24[((IOTA - 81) & 127)]) + ((0.0026692399999999998 * fVec24[((IOTA - 80) & 127)]) + ((0.00144247 * fVec24[((IOTA - 79) & 127)]) + ((0.0020409600000000001 * fVec24[((IOTA - 78) & 127)]) + ((0.0020199900000000002 * fVec24[((IOTA - 77) & 127)]) + ((0.0046326400000000004 * fVec24[((IOTA - 76) & 127)]) + ((0.0053821700000000004 * fVec24[((IOTA - 75) & 127)]) + ((0.0036032700000000004 * fVec24[((IOTA - 74) & 127)]) + ((0.0053022700000000004 * fVec24[((IOTA - 73) & 127)]) + ((0.0039087499999999999 * fVec24[((IOTA - 72) & 127)]) + ((0.0019828699999999999 * fVec24[((IOTA - 71) & 127)]) + ((0.00072404000000000001 * fVec24[((IOTA - 70) & 127)]) + ((0.0033726400000000001 * fVec24[((IOTA - 68) & 127)]) + ((0.0028127900000000003 * fVec24[((IOTA - 67) & 127)]) + ((0.0016933400000000002 * fVec24[((IOTA - 66) & 127)]) + ((0.0029381799999999999 * fVec24[((IOTA - 65) & 127)]) + ((0.0038801100000000004 * fVec24[((IOTA - 64) & 127)]) + ((0.0067297599999999996 * fVec24[((IOTA - 63) & 127)]) + ((0.0064815100000000002 * fVec24[((IOTA - 62) & 127)]) + ((0.00338193 * fVec24[((IOTA - 61) & 127)]) + ((0.0026122100000000002 * fVec24[((IOTA - 60) & 127)]) + ((0.0038020800000000002 * fVec24[((IOTA - 59) & 127)]) + ((0.00278079 * fVec24[((IOTA - 58) & 127)]) + ((4.49754e-06 * fVec24[((IOTA - 56) & 127)]) + ((0.0042595000000000003 * fVec24[((IOTA - 54) & 127)]) + ((0.0029229899999999999 * fVec24[((IOTA - 53) & 127)]) + ((0.00139635 * fVec24[((IOTA - 52) & 127)]) + ((0.00020930100000000001 * fVec24[((IOTA - 51) & 127)]) + ((0.0014356600000000001 * fVec24[((IOTA - 50) & 127)]) + ((0.0039973999999999999 * fVec24[((IOTA - 55) & 127)]) + ((0.0046483699999999998 * fVec24[((IOTA - 49) & 127)]) + ((0.00067166600000000002 * fVec24[((IOTA - 48) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((1.96889e-05 * fTemp24) + (0.00012713900000000002 * fVec24[((IOTA - 1) & 127)])) + (0.00072445800000000009 * fVec24[((IOTA - 3) & 127)])) + (0.00084005400000000002 * fVec24[((IOTA - 4) & 127)])) + (0.00078251799999999995 * fVec24[((IOTA - 5) & 127)])) + (0.00064681700000000005 * fVec24[((IOTA - 6) & 127)])) + (0.00105561 * fVec24[((IOTA - 7) & 127)])) + (0.00107368 * fVec24[((IOTA - 8) & 127)])) + (0.00055752700000000004 * fVec24[((IOTA - 9) & 127)])) + (0.0020685400000000002 * fVec24[((IOTA - 10) & 127)])) + (0.0007391530000000001 * fVec24[((IOTA - 11) & 127)])) + (0.048941400000000003 * fVec24[((IOTA - 12) & 127)])) + (0.053001199999999998 * fVec24[((IOTA - 13) & 127)])) + (0.046698700000000003 * fVec24[((IOTA - 14) & 127)])) + (0.062211200000000001 * fVec24[((IOTA - 15) & 127)])) + (0.043948600000000004 * fVec24[((IOTA - 16) & 127)])) + (0.081345899999999999 * fVec24[((IOTA - 17) & 127)])) + (0.047424299999999996 * fVec24[((IOTA - 18) & 127)])) + (0.041405900000000002 * fVec24[((IOTA - 19) & 127)])) + (0.069732299999999997 * fVec24[((IOTA - 20) & 127)])) + (0.050380599999999998 * fVec24[((IOTA - 21) & 127)])) + (0.111697 * fVec24[((IOTA - 22) & 127)])) + (0.054464300000000007 * fVec24[((IOTA - 23) & 127)])) + (0.036801199999999999 * fVec24[((IOTA - 25) & 127)])) + (0.042423700000000002 * fVec24[((IOTA - 26) & 127)])) + (0.0075229400000000005 * fVec24[((IOTA - 27) & 127)])) + (0.0123141 * fVec24[((IOTA - 28) & 127)])) + (0.0216826 * fVec24[((IOTA - 29) & 127)])) + (0.017730600000000003 * fVec24[((IOTA - 30) & 127)])) + (0.0080194200000000011 * fVec24[((IOTA - 31) & 127)])) + (0.021074000000000002 * fVec24[((IOTA - 33) & 127)])) + (0.0272114 * fVec24[((IOTA - 34) & 127)])) + (0.0056564199999999997 * fVec24[((IOTA - 35) & 127)])) + (0.010539099999999999 * fVec24[((IOTA - 36) & 127)])) + (0.0081598500000000015 * fVec24[((IOTA - 37) & 127)])) + (0.0060665699999999994 * fVec24[((IOTA - 38) & 127)])) + (0.0072938400000000002 * fVec24[((IOTA - 39) & 127)])) + (0.0014525200000000001 * fVec24[((IOTA - 40) & 127)])) + (0.0049862900000000009 * fVec24[((IOTA - 41) & 127)])) + (0.014038399999999999 * fVec24[((IOTA - 42) & 127)])) + (0.0105579 * fVec24[((IOTA - 43) & 127)])) + (0.00431154 * fVec24[((IOTA - 45) & 127)])) + (0.0084629900000000001 * fVec24[((IOTA - 46) & 127)])) + (0.0007157 * fVec24[((IOTA - 47) & 127)])) + (0.0051357799999999995 * fVec9[((IOTA - 59) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00014766099999999999 * fVec23[((IOTA - 4) & 127)])))))))))))))))))))))))))))))))) + (0.0033820999999999999 * fVec22[((IOTA - 13) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00028939400000000006 * fVec21[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00139284 * fVec20[((IOTA - 13) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00015575000000000002 * fVec19[((IOTA - 2) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00050830900000000008 * fVec18[((IOTA - 83) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00031437800000000003 * fVec17[((IOTA - 2) & 127)])))))))))))))))))))))))))))))))))))))))))))) + (0.00289646 * fVec16[((IOTA - 41) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.018085500000000001 * fVec13[((IOTA - 23) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0005644370000000001 * fVec10[((IOTA - 62) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (5.4750600000000001e-07 * fVec11[((IOTA - 1) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (8.4675399999999992e-06 * fTemp6)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0050167000000000007 * fVec5[((IOTA - 15) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.018413300000000001 * fVec4[((IOTA - 20) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (9.3501200000000002e-06 * fTemp0)) + (0.00026734600000000001 * fVec0[((IOTA - 4) & 127)])) + (0.0006046230000000001 * fVec0[((IOTA - 5) & 127)])) + (0.000116198 * fVec0[((IOTA - 7) & 127)])) + (0.00021498000000000001 * fVec0[((IOTA - 8) & 127)])) + (0.00102728 * fVec0[((IOTA - 9) & 127)])) + (0.0096909700000000001 * fVec0[((IOTA - 11) & 127)])) + (0.040782800000000001 * fVec0[((IOTA - 12) & 127)])) + (0.035763900000000001 * fVec0[((IOTA - 13) & 127)])) + (0.0082633600000000008 * fVec0[((IOTA - 14) & 127)])) + (0.0053294199999999996 * fVec0[((IOTA - 20) & 127)])) + (0.021568500000000001 * fVec0[((IOTA - 21) & 127)])) + (0.053170500000000002 * fVec0[((IOTA - 22) & 127)])) + (0.054135099999999998 * fVec0[((IOTA - 23) & 127)])) + (0.011376599999999999 * fVec0[((IOTA - 25) & 127)])) + (0.032389800000000003 * fVec0[((IOTA - 26) & 127)])) + (0.0037881900000000003 * fVec0[((IOTA - 27) & 127)])) + (0.013483499999999999 * fVec0[((IOTA - 30) & 127)]))))))))))))))))))))) + (0.00049059500000000003 * (fVec2[((IOTA - 81) & 127)] - fVec1[((IOTA - 75) & 127)]))) - ((0.0013939500000000001 * (fVec20[((IOTA - 78) & 127)] - fVec2[((IOTA - 58) & 127)])) + ((0.011907399999999999 * (fVec15[((IOTA - 33) & 127)] + fVec7[((IOTA - 23) & 127)])) + ((1.5865800000000003e-05 * fVec0[((IOTA - 123) & 127)]) + ((3.3133000000000003e-05 * fVec0[((IOTA - 122) & 127)]) + ((7.6978800000000009e-05 * fVec0[((IOTA - 121) & 127)]) + ((6.9207600000000005e-05 * fVec0[((IOTA - 120) & 127)]) + ((3.4888e-06 * fVec0[((IOTA - 119) & 127)]) + ((5.6830400000000004e-05 * fVec0[((IOTA - 118) & 127)]) + ((0.00013956500000000002 * fVec0[((IOTA - 117) & 127)]) + ((0.000268843 * fVec0[((IOTA - 116) & 127)]) + ((0.00016843600000000003 * fVec0[((IOTA - 115) & 127)]) + ((0.00010568 * fVec0[((IOTA - 111) & 127)]) + ((0.00025351300000000002 * fVec0[((IOTA - 110) & 127)]) + ((0.00015057400000000003 * fVec0[((IOTA - 108) & 127)]) + ((4.4610300000000002e-05 * fVec0[((IOTA - 106) & 127)]) + ((0.000116422 * fVec0[((IOTA - 96) & 127)]) + ((0.00045103200000000003 * fVec0[((IOTA - 93) & 127)]) + (((((((((((((((((0.012866299999999999 * fVec0[((IOTA - 37) & 127)]) + ((0.018287600000000001 * fVec0[((IOTA - 36) & 127)]) + ((0.0067883699999999993 * fVec0[((IOTA - 35) & 127)]) + ((0.0035579800000000001 * fVec0[((IOTA - 34) & 127)]) + ((0.000522489 * fVec0[((IOTA - 92) & 127)]) + ((0.0012505699999999999 * fVec0[((IOTA - 91) & 127)]) + ((0.0011286 * fVec0[((IOTA - 90) & 127)]) + ((0.00076078500000000004 * fVec0[((IOTA - 89) & 127)]) + ((0.0018710199999999999 * fVec0[((IOTA - 88) & 127)]) + ((0.0019413400000000002 * fVec0[((IOTA - 87) & 127)]) + ((1.9325300000000003e-05 * fVec0[((IOTA - 80) & 127)]) + ((0.000110683 * fVec0[((IOTA - 77) & 127)]) + ((0.00090340100000000007 * fVec0[((IOTA - 75) & 127)]) + ((0.00063188700000000003 * fVec0[((IOTA - 74) & 127)]) + ((0.0015169699999999999 * fVec0[((IOTA - 70) & 127)]) + ((0.00228896 * fVec0[((IOTA - 69) & 127)]) + ((0.0018415700000000001 * fVec0[((IOTA - 68) & 127)]) + ((0.000677036 * fVec0[((IOTA - 67) & 127)]) + ((0.00070188499999999997 * fVec0[((IOTA - 66) & 127)]) + ((6.0076500000000007e-05 * fVec0[((IOTA - 65) & 127)]) + ((0.00053549200000000004 * fVec0[((IOTA - 64) & 127)]) + ((0.0012484900000000001 * fVec0[((IOTA - 63) & 127)]) + ((0.00010081100000000001 * fVec0[((IOTA - 62) & 127)]) + ((0.0010030500000000001 * fVec0[((IOTA - 61) & 127)]) + ((0.00019151300000000001 * fVec0[((IOTA - 60) & 127)]) + (((0.00012409699999999999 * fVec0[((IOTA - 56) & 127)]) + ((0.00034672200000000005 * fVec0[((IOTA - 54) & 127)]) + ((0.00149271 * fVec0[((IOTA - 50) & 127)]) + ((0.0057374000000000001 * fVec0[((IOTA - 45) & 127)]) + ((0.0043065899999999999 * fVec0[((IOTA - 44) & 127)]) + ((0.0057909800000000003 * fVec0[((IOTA - 41) & 127)]) + ((1.47788e-07 * fVec1[((IOTA - 126) & 127)]) + ((4.2830899999999998e-06 * fVec1[((IOTA - 123) & 127)]) + ((1.5180600000000002e-05 * fVec1[((IOTA - 122) & 127)]) + ((5.7183599999999999e-05 * fVec1[((IOTA - 121) & 127)]) + ((3.7596900000000006e-05 * fVec1[((IOTA - 120) & 127)]) + ((5.5951800000000002e-05 * fVec1[((IOTA - 119) & 127)]) + ((4.1282200000000003e-05 * fVec1[((IOTA - 118) & 127)]) + ((8.3589400000000017e-05 * fVec1[((IOTA - 117) & 127)]) + ((0.00011071500000000001 * fVec1[((IOTA - 116) & 127)]) + ((6.9900900000000014e-05 * fVec1[((IOTA - 115) & 127)]) + ((0.00020505 * fVec1[((IOTA - 114) & 127)]) + ((9.7282700000000016e-05 * fVec1[((IOTA - 112) & 127)]) + ((0.00035981700000000001 * fVec1[((IOTA - 111) & 127)]) + ((0.00022261899999999999 * fVec1[((IOTA - 110) & 127)]) + ((0.00027634500000000005 * fVec1[((IOTA - 107) & 127)]) + ((0.00035780099999999998 * fVec1[((IOTA - 101) & 127)]) + ((0.00071558799999999997 * fVec1[((IOTA - 91) & 127)]) + ((0.00188966 * fVec1[((IOTA - 48) & 127)]) + ((0.00393443 * fVec1[((IOTA - 47) & 127)]) + ((0.0088357600000000015 * fVec1[((IOTA - 44) & 127)]) + ((0.00144816 * fVec1[((IOTA - 43) & 127)]) + ((0.0053719000000000006 * fVec1[((IOTA - 41) & 127)]) + ((0.0057588200000000004 * fVec1[((IOTA - 38) & 127)]) + ((0.0038469899999999998 * fVec1[((IOTA - 37) & 127)]) + ((0.0020671499999999998 * fVec1[((IOTA - 35) & 127)]) + ((0.0158868 * fVec1[((IOTA - 34) & 127)]) + ((0.016835300000000001 * fVec1[((IOTA - 31) & 127)]) + ((0.0075965400000000006 * fVec1[((IOTA - 28) & 127)]) + ((0.0061243800000000004 * fVec1[((IOTA - 26) & 127)]) + ((0.024267400000000001 * fVec1[((IOTA - 25) & 127)]) + ((0.022247599999999999 * fVec1[((IOTA - 22) & 127)]) + ((0.025193300000000002 * fVec1[((IOTA - 19) & 127)]) + ((0.00116489 * fVec1[((IOTA - 16) & 127)]) + ((0.0071606500000000002 * fVec1[((IOTA - 15) & 127)]) + ((0.00099201300000000014 * fVec1[((IOTA - 10) & 127)]) + ((2.56811e-05 * fVec1[((IOTA - 8) & 127)]) + ((0.000660455 * fVec1[((IOTA - 6) & 127)]) + ((0.00016602900000000002 * fVec1[((IOTA - 4) & 127)]) + ((4.0803300000000003e-05 * fVec1[((IOTA - 3) & 127)]) + ((7.5886399999999999e-05 * fVec1[((IOTA - 2) & 127)]) + ((9.9447399999999992e-06 * fTemp1) + ((0.00093411100000000006 * fVec1[((IOTA - 53) & 127)]) + ((0.0024952400000000001 * fVec1[((IOTA - 51) & 127)]) + ((0.0034762300000000003 * fVec1[((IOTA - 50) & 127)]) + ((0.00124285 * fVec1[((IOTA - 88) & 127)]) + ((0.00034728 * fVec1[((IOTA - 87) & 127)]) + ((0.00092678400000000005 * fVec1[((IOTA - 84) & 127)]) + ((0.0016128900000000001 * fVec1[((IOTA - 83) & 127)]) + ((0.00063472000000000008 * fVec1[((IOTA - 79) & 127)]) + ((0.0027100900000000001 * fVec1[((IOTA - 78) & 127)]) + ((0.00108501 * fVec1[((IOTA - 77) & 127)]) + ((0.00066758699999999998 * fVec1[((IOTA - 76) & 127)]) + ((0.00036076100000000002 * fVec1[((IOTA - 74) & 127)]) + ((0.0013523700000000001 * fVec1[((IOTA - 73) & 127)]) + ((0.0010234199999999999 * fVec1[((IOTA - 72) & 127)]) + ((0.00051179399999999999 * fVec1[((IOTA - 71) & 127)]) + ((0.0010446200000000002 * fVec1[((IOTA - 70) & 127)]) + ((0.00024338600000000003 * fVec1[((IOTA - 69) & 127)]) + ((0.00132391 * fVec1[((IOTA - 59) & 127)]) + ((0.0030292000000000001 * fVec1[((IOTA - 58) & 127)]) + ((0.00167037 * fVec1[((IOTA - 57) & 127)]) + ((0.00015749700000000001 * fVec1[((IOTA - 56) & 127)]) + ((0.00023174299999999999 * fVec1[((IOTA - 55) & 127)]) + (((2.1436099999999995e-06 * fVec2[((IOTA - 125) & 127)]) + ((9.3152500000000003e-06 * fVec2[((IOTA - 124) & 127)]) + ((8.1889299999999992e-06 * fVec2[((IOTA - 123) & 127)]) + ((1.74931e-05 * fVec2[((IOTA - 122) & 127)]) + ((2.2752300000000002e-05 * fVec2[((IOTA - 121) & 127)]) + ((1.2775900000000001e-05 * fVec2[((IOTA - 120) & 127)]) + ((4.7892300000000002e-05 * fVec2[((IOTA - 119) & 127)]) + ((1.7953800000000001e-05 * fVec2[((IOTA - 118) & 127)]) + ((5.4085200000000009e-05 * fVec2[((IOTA - 117) & 127)]) + ((0.000145382 * fVec2[((IOTA - 116) & 127)]) + ((1.3354200000000001e-06 * fVec2[((IOTA - 115) & 127)]) + ((7.4177099999999998e-05 * fVec2[((IOTA - 114) & 127)]) + ((0.000238922 * fVec2[((IOTA - 113) & 127)]) + ((9.5068000000000005e-05 * fVec2[((IOTA - 112) & 127)]) + ((0.00035358399999999999 * fVec2[((IOTA - 109) & 127)]) + ((4.61018e-05 * fVec2[((IOTA - 108) & 127)]) + ((3.6978000000000004e-05 * fVec2[((IOTA - 104) & 127)]) + ((0.00016568300000000002 * fVec2[((IOTA - 100) & 127)]) + ((0.00126296 * fVec2[((IOTA - 94) & 127)]) + ((0.0035651700000000003 * fVec2[((IOTA - 93) & 127)]) + ((0.00034114600000000002 * fVec2[((IOTA - 57) & 127)]) + ((0.00087139800000000001 * fVec2[((IOTA - 56) & 127)]) + ((3.7472300000000004e-05 * fVec2[((IOTA - 55) & 127)]) + ((0.00035147300000000004 * fVec2[((IOTA - 43) & 127)]) + ((0.0054228599999999998 * fVec2[((IOTA - 41) & 127)]) + ((0.00555617 * fVec2[((IOTA - 40) & 127)]) + ((0.00149051 * fVec2[((IOTA - 39) & 127)]) + ((0.0066379000000000004 * fVec2[((IOTA - 38) & 127)]) + ((0.023168899999999999 * fVec2[((IOTA - 37) & 127)]) + ((0.022447100000000001 * fVec2[((IOTA - 36) & 127)]) + ((0.0076363300000000002 * fVec2[((IOTA - 35) & 127)]) + ((0.00533637 * fVec2[((IOTA - 34) & 127)]) + ((0.0032469800000000004 * fVec2[((IOTA - 31) & 127)]) + ((0.0052128300000000008 * fVec2[((IOTA - 30) & 127)]) + ((0.00172566 * fVec2[((IOTA - 28) & 127)]) + ((0.018620600000000001 * fVec2[((IOTA - 27) & 127)]) + ((0.0399341 * fVec2[((IOTA - 20) & 127)]) + ((0.0157208 * fVec2[((IOTA - 19) & 127)]) + ((0.037496399999999999 * fVec2[((IOTA - 17) & 127)]) + ((0.026212800000000001 * fVec2[((IOTA - 16) & 127)]) + ((0.042901499999999995 * fVec2[((IOTA - 15) & 127)]) + ((0.020667000000000001 * fVec2[((IOTA - 14) & 127)]) + ((0.0017872699999999999 * fVec2[((IOTA - 10) & 127)]) + ((0.0012646299999999999 * fVec2[((IOTA - 8) & 127)]) + ((0.00051453000000000002 * fVec2[((IOTA - 6) & 127)]) + ((0.000140598 * fVec2[((IOTA - 3) & 127)]) + ((0.00031664699999999998 * fVec2[((IOTA - 2) & 127)]) + ((5.2325000000000005e-05 * fVec2[((IOTA - 1) & 127)]) + ((0.00257216 * fVec2[((IOTA - 61) & 127)]) + ((0.00089788499999999996 * fVec2[((IOTA - 60) & 127)]) + ((0.00191836 * fVec2[((IOTA - 92) & 127)]) + ((0.00036924600000000005 * fVec2[((IOTA - 91) & 127)]) + ((0.00064602799999999999 * fVec2[((IOTA - 90) & 127)]) + ((0.0010497700000000002 * fVec2[((IOTA - 89) & 127)]) + ((8.767989999999999e-06 * fVec2[((IOTA - 88) & 127)]) + ((0.00110188 * fVec2[((IOTA - 85) & 127)]) + ((0.0028700499999999999 * fVec2[((IOTA - 84) & 127)]) + ((0.0032637399999999998 * fVec2[((IOTA - 83) & 127)]) + ((0.00124704 * fVec2[((IOTA - 82) & 127)]) + ((0.00038958100000000001 * fVec2[((IOTA - 80) & 127)]) + ((0.00067759099999999996 * fVec2[((IOTA - 79) & 127)]) + ((0.00096400700000000001 * fVec2[((IOTA - 74) & 127)]) + ((0.0012385999999999999 * fVec2[((IOTA - 68) & 127)]) + ((0.00042248599999999997 * fVec2[((IOTA - 67) & 127)]) + ((0.00026454499999999998 * fVec2[((IOTA - 65) & 127)]) + ((0.0036227100000000003 * fVec2[((IOTA - 64) & 127)]) + ((0.0037377299999999999 * fVec2[((IOTA - 63) & 127)]) + ((0.0043915100000000004 * fVec2[((IOTA - 62) & 127)]) + ((5.8891899999999998e-07 * fVec3[((IOTA - 126) & 127)]) + ((1.5362e-06 * fVec3[((IOTA - 125) & 127)]) + ((5.0275400000000003e-05 * fVec3[((IOTA - 120) & 127)]) + ((3.1142400000000002e-05 * fVec3[((IOTA - 119) & 127)]) + ((2.6072899999999997e-06 * fVec3[((IOTA - 118) & 127)]) + ((5.3306300000000008e-05 * fVec3[((IOTA - 117) & 127)]) + ((1.7970700000000001e-05 * fVec3[((IOTA - 116) & 127)]) + ((0.00026641600000000001 * fVec3[((IOTA - 111) & 127)]) + ((0.00038083300000000002 * fVec3[((IOTA - 110) & 127)]) + ((0.00026763500000000001 * fVec3[((IOTA - 107) & 127)]) + ((0.00025283000000000006 * fVec3[((IOTA - 106) & 127)]) + ((4.3015400000000008e-05 * fVec3[((IOTA - 105) & 127)]) + ((0.00010684300000000001 * fVec3[((IOTA - 104) & 127)]) + ((5.1774199999999995e-06 * fVec3[((IOTA - 103) & 127)]) + ((0.000256214 * fVec3[((IOTA - 102) & 127)]) + ((7.3338599999999996e-05 * fVec3[((IOTA - 101) & 127)]) + ((7.9560600000000005e-05 * fVec3[((IOTA - 99) & 127)]) + ((6.534720000000001e-05 * fVec3[((IOTA - 95) & 127)]) + ((0.0016416599999999999 * fVec3[((IOTA - 94) & 127)]) + ((0.00116942 * fVec3[((IOTA - 93) & 127)]) + ((0.00010716300000000002 * fVec3[((IOTA - 89) & 127)]) + ((0.00023784200000000004 * fVec3[((IOTA - 88) & 127)]) + ((0.00023227000000000002 * fVec3[((IOTA - 50) & 127)]) + ((0.0011046700000000001 * fVec3[((IOTA - 49) & 127)]) + ((0.0017173400000000001 * fVec3[((IOTA - 47) & 127)]) + ((0.00096283600000000012 * fVec3[((IOTA - 46) & 127)]) + ((0.0020164800000000002 * fVec3[((IOTA - 44) & 127)]) + ((0.00034979300000000004 * fVec3[((IOTA - 41) & 127)]) + ((0.0033543900000000001 * fVec3[((IOTA - 40) & 127)]) + ((0.013240500000000001 * fVec3[((IOTA - 37) & 127)]) + ((0.0071675799999999998 * fVec3[((IOTA - 34) & 127)]) + ((0.0098981 * fVec3[((IOTA - 33) & 127)]) + ((0.00136287 * fVec3[((IOTA - 30) & 127)]) + ((0.00092559700000000001 * fVec3[((IOTA - 28) & 127)]) + ((0.0086453599999999995 * fVec3[((IOTA - 26) & 127)]) + ((0.0019909900000000002 * fVec3[((IOTA - 23) & 127)]) + ((0.013336300000000001 * fVec3[((IOTA - 21) & 127)]) + ((0.00016282300000000001 * fVec3[((IOTA - 20) & 127)]) + ((0.0033735599999999998 * fVec3[((IOTA - 18) & 127)]) + ((0.0013478399999999999 * fVec3[((IOTA - 16) & 127)]) + ((0.0024369399999999999 * fVec3[((IOTA - 15) & 127)]) + ((0.00048140299999999999 * fVec3[((IOTA - 12) & 127)]) + ((8.5212199999999997e-05 * fVec3[((IOTA - 10) & 127)]) + ((0.00015997100000000002 * fVec3[((IOTA - 8) & 127)]) + ((4.6397800000000005e-05 * fVec3[((IOTA - 6) & 127)]) + ((6.0256600000000009e-05 * fVec3[((IOTA - 4) & 127)]) + ((8.9622000000000004e-05 * fVec3[((IOTA - 2) & 127)]) + ((1.7245599999999999e-06 * fTemp3) + ((0.0007085180000000001 * fVec3[((IOTA - 53) & 127)]) + ((0.00029830299999999998 * fVec3[((IOTA - 87) & 127)]) + ((0.0011921100000000001 * fVec3[((IOTA - 86) & 127)]) + ((0.00036025800000000002 * fVec3[((IOTA - 85) & 127)]) + ((0.00132245 * fVec3[((IOTA - 81) & 127)]) + ((7.4600700000000006e-05 * fVec3[((IOTA - 80) & 127)]) + ((0.00135154 * fVec3[((IOTA - 76) & 127)]) + ((9.0714300000000007e-05 * fVec3[((IOTA - 75) & 127)]) + ((0.00046037299999999998 * fVec3[((IOTA - 74) & 127)]) + ((0.00032999100000000002 * fVec3[((IOTA - 73) & 127)]) + ((8.8671600000000007e-05 * fVec3[((IOTA - 66) & 127)]) + ((0.00071361900000000008 * fVec3[((IOTA - 65) & 127)]) + ((0.0021665299999999998 * fVec3[((IOTA - 64) & 127)]) + ((0.0028213700000000001 * fVec3[((IOTA - 63) & 127)]) + ((0.00086561800000000018 * fVec3[((IOTA - 62) & 127)]) + ((0.00109522 * fVec3[((IOTA - 60) & 127)]) + ((0.0027684799999999998 * fVec3[((IOTA - 59) & 127)]) + ((0.00027406100000000003 * fVec3[((IOTA - 58) & 127)]) + ((0.0011284799999999998 * fVec3[((IOTA - 57) & 127)]) + ((0.00017831100000000001 * fVec3[((IOTA - 56) & 127)]) + ((4.0112199999999995e-06 * fVec4[((IOTA - 125) & 127)]) + ((1.5117400000000002e-05 * fVec4[((IOTA - 124) & 127)]) + ((4.3721500000000005e-05 * fVec4[((IOTA - 120) & 127)]) + ((0.00015560700000000002 * fVec4[((IOTA - 119) & 127)]) + ((7.9108900000000011e-05 * fVec4[((IOTA - 118) & 127)]) + ((5.5350100000000004e-05 * fVec4[((IOTA - 117) & 127)]) + ((0.000188798 * fVec4[((IOTA - 116) & 127)]) + ((0.00014338299999999999 * fVec4[((IOTA - 115) & 127)]) + ((0.000132352 * fVec4[((IOTA - 114) & 127)]) + ((0.00038088800000000002 * fVec4[((IOTA - 111) & 127)]) + ((0.00029129200000000002 * fVec4[((IOTA - 110) & 127)]) + ((0.00042473900000000004 * fVec4[((IOTA - 109) & 127)]) + ((0.00039000200000000002 * fVec4[((IOTA - 108) & 127)]) + ((0.00037496900000000006 * fVec4[((IOTA - 106) & 127)]) + ((0.000122187 * fVec4[((IOTA - 101) & 127)]) + ((5.0613000000000005e-05 * fVec4[((IOTA - 100) & 127)]) + ((0.00034352299999999998 * fVec4[((IOTA - 99) & 127)]) + ((8.3557300000000007e-05 * fVec4[((IOTA - 95) & 127)]) + ((3.1251799999999998e-05 * fVec4[((IOTA - 90) & 127)]) + ((0.00081126199999999999 * fVec4[((IOTA - 89) & 127)]) + ((0.0010102899999999998 * fVec4[((IOTA - 88) & 127)]) + ((0.00016769199999999999 * fVec4[((IOTA - 85) & 127)]) + ((0.0023454999999999999 * fVec4[((IOTA - 84) & 127)]) + ((0.0020901600000000002 * fVec4[((IOTA - 83) & 127)]) + ((0.00077017200000000007 * fVec4[((IOTA - 79) & 127)]) + ((0.000728887 * fVec4[((IOTA - 78) & 127)]) + ((0.0021097199999999998 * fVec4[((IOTA - 75) & 127)]) + ((0.0025037600000000003 * fVec4[((IOTA - 74) & 127)]) + ((0.00040049300000000003 * fVec4[((IOTA - 73) & 127)]) + ((2.3934399999999998e-07 * fVec5[((IOTA - 126) & 127)]) + ((0.0014058600000000001 * fVec4[((IOTA - 15) & 127)]) + ((0.00187744 * fVec4[((IOTA - 14) & 127)]) + ((0.00024379800000000001 * fVec4[((IOTA - 9) & 127)]) + ((0.00038353700000000004 * fVec4[((IOTA - 8) & 127)]) + ((0.00030841899999999999 * fVec4[((IOTA - 7) & 127)]) + ((0.000199779 * fVec4[((IOTA - 5) & 127)]) + ((6.6441500000000004e-05 * fVec4[((IOTA - 2) & 127)]) + ((8.8823800000000002e-05 * fVec4[((IOTA - 1) & 127)]) + ((1.1196600000000002e-05 * fTemp4) + ((0.000236257 * fVec4[((IOTA - 71) & 127)]) + ((0.00080940200000000008 * fVec4[((IOTA - 68) & 127)]) + ((0.0014248099999999999 * fVec4[((IOTA - 67) & 127)]) + ((0.00051849200000000006 * fVec4[((IOTA - 66) & 127)]) + ((0.0012237400000000001 * fVec4[((IOTA - 62) & 127)]) + ((0.0028021500000000002 * fVec4[((IOTA - 61) & 127)]) + ((0.00089523300000000005 * fVec4[((IOTA - 60) & 127)]) + ((0.00083918999999999997 * fVec4[((IOTA - 59) & 127)]) + ((0.00050695199999999997 * fVec4[((IOTA - 58) & 127)]) + ((0.0034605500000000002 * fVec4[((IOTA - 52) & 127)]) + ((0.0048647899999999999 * fVec4[((IOTA - 51) & 127)]) + ((0.00157369 * fVec4[((IOTA - 47) & 127)]) + ((0.0028187400000000001 * fVec4[((IOTA - 46) & 127)]) + ((0.0046525800000000008 * fVec4[((IOTA - 45) & 127)]) + ((0.00020012 * fVec4[((IOTA - 43) & 127)]) + ((0.00347263 * fVec4[((IOTA - 42) & 127)]) + ((0.0063060700000000004 * fVec4[((IOTA - 39) & 127)]) + ((0.00608021 * fVec4[((IOTA - 38) & 127)]) + ((0.0032300599999999999 * fVec4[((IOTA - 35) & 127)]) + ((0.0153619 * fVec4[((IOTA - 34) & 127)]) + ((0.0075184400000000004 * fVec4[((IOTA - 33) & 127)]) + ((0.016116399999999999 * fVec4[((IOTA - 32) & 127)]) + ((0.0087108600000000008 * fVec4[((IOTA - 31) & 127)]) + ((0.011844500000000001 * fVec4[((IOTA - 27) & 127)]) + ((0.0088785800000000005 * fVec4[((IOTA - 26) & 127)]) + ((0.0071259000000000001 * fVec4[((IOTA - 19) & 127)]) + ((0.020032899999999999 * fVec4[((IOTA - 18) & 127)]) + ((0.041877400000000002 * fVec4[((IOTA - 17) & 127)]) + ((0.040486800000000003 * fVec4[((IOTA - 16) & 127)]) + ((3.0383900000000002e-05 * fVec5[((IOTA - 122) & 127)]) + ((1.2420800000000001e-05 * fVec5[((IOTA - 123) & 127)]) + ((0.0042459100000000003 * fVec5[((IOTA - 13) & 127)]) + ((0.017260600000000001 * fVec5[((IOTA - 12) & 127)]) + ((0.000626824 * fVec5[((IOTA - 10) & 127)]) + ((0.00043621100000000004 * fVec5[((IOTA - 8) & 127)]) + ((0.00071821400000000011 * fVec5[((IOTA - 7) & 127)]) + ((0.00014400599999999999 * fVec5[((IOTA - 106) & 127)]) + ((0.00056116599999999999 * fVec5[((IOTA - 105) & 127)]) + ((0.00043078500000000004 * fVec5[((IOTA - 104) & 127)]) + ((0.00016122200000000001 * fVec5[((IOTA - 101) & 127)]) + ((0.00032777300000000001 * fVec5[((IOTA - 100) & 127)]) + ((0.00086172699999999996 * fVec5[((IOTA - 99) & 127)]) + ((0.00116818 * fVec5[((IOTA - 98) & 127)]) + ((0.00088091000000000016 * fVec5[((IOTA - 97) & 127)]) + ((0.0006577480000000001 * fVec5[((IOTA - 96) & 127)]) + ((0.00066074500000000002 * fVec5[((IOTA - 95) & 127)]) + ((0.0018925399999999998 * fVec5[((IOTA - 94) & 127)]) + ((0.0023709600000000001 * fVec5[((IOTA - 93) & 127)]) + ((0.0009980639999999999 * fVec5[((IOTA - 92) & 127)]) + ((0.0012026699999999999 * fVec5[((IOTA - 91) & 127)]) + ((0.00057528899999999999 * fVec5[((IOTA - 90) & 127)]) + ((0.0011426300000000002 * fVec5[((IOTA - 86) & 127)]) + ((0.0012205 * fVec5[((IOTA - 85) & 127)]) + ((0.0013112 * fVec5[((IOTA - 81) & 127)]) + ((0.00133194 * fVec5[((IOTA - 80) & 127)]) + ((0.0011322700000000001 * fVec5[((IOTA - 73) & 127)]) + ((0.00181778 * fVec5[((IOTA - 72) & 127)]) + ((0.00071619100000000003 * fVec5[((IOTA - 71) & 127)]) + ((0.0016215200000000002 * fVec5[((IOTA - 70) & 127)]) + ((0.00066023199999999996 * fVec5[((IOTA - 64) & 127)]) + ((0.00109943 * fVec5[((IOTA - 61) & 127)]) + ((0.0031036200000000001 * fVec5[((IOTA - 60) & 127)]) + ((0.0042161500000000001 * fVec5[((IOTA - 59) & 127)]) + ((0.0025095600000000001 * fVec5[((IOTA - 58) & 127)]) + ((0.0032661999999999999 * fVec5[((IOTA - 54) & 127)]) + ((0.0034819399999999998 * fVec5[((IOTA - 53) & 127)]) + ((0.00163773 * fVec5[((IOTA - 49) & 127)]) + ((0.00127327 * fVec5[((IOTA - 48) & 127)]) + ((0.0010735900000000001 * fVec5[((IOTA - 44) & 127)]) + ((0.0025665700000000002 * fVec5[((IOTA - 43) & 127)]) + ((0.0028225600000000004 * fVec5[((IOTA - 42) & 127)]) + ((0.0053647900000000004 * fVec5[((IOTA - 41) & 127)]) + ((0.0047349100000000002 * fVec5[((IOTA - 40) & 127)]) + ((0.0038553600000000004 * fVec5[((IOTA - 35) & 127)]) + ((0.0039412199999999996 * fVec5[((IOTA - 34) & 127)]) + ((0.0124636 * fVec5[((IOTA - 28) & 127)]) + ((0.0117299 * fVec5[((IOTA - 27) & 127)]) + ((0.00123668 * fVec5[((IOTA - 26) & 127)]) + ((0.00020408400000000002 * fVec5[((IOTA - 3) & 127)]) + ((0.00064994100000000002 * fVec5[((IOTA - 4) & 127)]) + ((1.6051900000000001e-05 * fTemp5) + ((5.0749199999999992e-06 * fVec5[((IOTA - 1) & 127)]) + ((0.037707000000000004 * fVec5[((IOTA - 23) & 127)]) + ((0.063962000000000005 * fVec5[((IOTA - 22) & 127)]) + ((0.023310000000000001 * fVec5[((IOTA - 17) & 127)]) + ((0.028106900000000001 * fVec5[((IOTA - 16) & 127)]) + ((3.1669099999999999e-07 * fVec6[((IOTA - 126) & 127)]) + ((1.6687399999999998e-06 * fVec6[((IOTA - 125) & 127)]) + ((1.28328e-05 * fVec6[((IOTA - 122) & 127)]) + ((1.7308800000000003e-05 * fVec6[((IOTA - 121) & 127)]) + ((4.9074099999999998e-05 * fVec6[((IOTA - 117) & 127)]) + ((2.5899899999999999e-05 * fVec6[((IOTA - 116) & 127)]) + ((0.00011491000000000001 * fVec6[((IOTA - 114) & 127)]) + ((8.8784300000000003e-05 * fVec6[((IOTA - 112) & 127)]) + ((7.9503400000000002e-05 * fVec6[((IOTA - 111) & 127)]) + ((8.1492400000000013e-05 * fVec6[((IOTA - 110) & 127)]) + ((9.1673400000000002e-05 * fVec6[((IOTA - 109) & 127)]) + ((0.00025111700000000003 * fVec6[((IOTA - 105) & 127)]) + ((0.00018673 * fVec6[((IOTA - 104) & 127)]) + ((0.00071093600000000001 * fVec6[((IOTA - 102) & 127)]) + ((0.00104291 * fVec6[((IOTA - 101) & 127)]) + ((0.00012821000000000002 * fVec6[((IOTA - 93) & 127)]) + ((0.00085017999999999997 * fVec6[((IOTA - 92) & 127)]) + ((0.000712106 * fVec6[((IOTA - 91) & 127)]) + ((0.00071435800000000001 * fVec6[((IOTA - 86) & 127)]) + ((0.00037586100000000001 * fVec6[((IOTA - 84) & 127)]) + ((0.0012874099999999999 * fVec6[((IOTA - 83) & 127)]) + ((0.0014784800000000001 * fVec6[((IOTA - 82) & 127)]) + ((0.00193484 * fVec6[((IOTA - 81) & 127)]) + ((0.00029607 * fVec6[((IOTA - 80) & 127)]) + ((0.00071585700000000008 * fVec6[((IOTA - 74) & 127)]) + ((0.0023252199999999998 * fVec6[((IOTA - 73) & 127)]) + ((0.0013749300000000001 * fVec6[((IOTA - 68) & 127)]) + ((0.00058439199999999998 * fVec6[((IOTA - 67) & 127)]) + ((0.0011591100000000001 * fVec6[((IOTA - 63) & 127)]) + ((0.00056720100000000003 * fVec6[((IOTA - 62) & 127)]) + ((0.0020986799999999999 * fVec6[((IOTA - 60) & 127)]) + ((0.00155243 * fVec6[((IOTA - 59) & 127)]) + ((3.2355100000000005e-05 * fVec6[((IOTA - 57) & 127)]) + ((0.00057845500000000007 * fVec6[((IOTA - 56) & 127)]) + ((0.00150241 * fVec6[((IOTA - 55) & 127)]) + ((0.00172704 * fVec6[((IOTA - 54) & 127)]) + ((0.0023094999999999999 * fVec6[((IOTA - 53) & 127)]) + ((0.0013355600000000002 * fVec6[((IOTA - 50) & 127)]) + ((0.0016919000000000001 * fVec6[((IOTA - 49) & 127)]) + ((0.0041987500000000002 * fVec6[((IOTA - 46) & 127)]) + ((0.0013185600000000001 * fVec6[((IOTA - 43) & 127)]) + ((0.0045889699999999995 * fVec6[((IOTA - 40) & 127)]) + ((0.00114539 * fVec6[((IOTA - 39) & 127)]) + ((0.0121855 * fVec6[((IOTA - 36) & 127)]) + ((0.00058276900000000002 * fVec6[((IOTA - 34) & 127)]) + ((0.0107633 * fVec6[((IOTA - 33) & 127)]) + ((0.013816500000000001 * fVec6[((IOTA - 29) & 127)]) + ((0.00604938 * fVec6[((IOTA - 28) & 127)]) + ((0.020943 * fVec6[((IOTA - 27) & 127)]) + ((0.013073399999999999 * fVec6[((IOTA - 24) & 127)]) + ((0.0144256 * fVec6[((IOTA - 23) & 127)]) + ((0.013579000000000001 * fVec6[((IOTA - 22) & 127)]) + ((0.058097799999999998 * fVec6[((IOTA - 19) & 127)]) + ((0.00473027 * fVec6[((IOTA - 14) & 127)]) + ((0.00083837600000000005 * fVec6[((IOTA - 12) & 127)]) + ((0.00052448499999999999 * fVec6[((IOTA - 11) & 127)]) + ((0.0012249000000000001 * fVec6[((IOTA - 10) & 127)]) + ((0.00056178000000000001 * fVec6[((IOTA - 7) & 127)]) + ((4.4565200000000005e-05 * fVec6[((IOTA - 6) & 127)]) + ((0.00026242200000000006 * fVec6[((IOTA - 5) & 127)]) + ((0.00017666400000000001 * fVec6[((IOTA - 3) & 127)]) + ((3.9999700000000003e-05 * fVec6[((IOTA - 1) & 127)]) + ((1.42182e-06 * fVec7[((IOTA - 126) & 127)]) + ((3.38734e-06 * fVec7[((IOTA - 125) & 127)]) + ((3.55566e-07 * fVec7[((IOTA - 124) & 127)]) + ((1.54209e-06 * fVec7[((IOTA - 123) & 127)]) + ((1.0269900000000001e-05 * fVec7[((IOTA - 121) & 127)]) + ((5.1458800000000003e-05 * fVec7[((IOTA - 120) & 127)]) + ((9.7858700000000005e-05 * fVec7[((IOTA - 110) & 127)]) + ((0.00024103300000000001 * fVec7[((IOTA - 108) & 127)]) + ((4.9494600000000006e-05 * fVec7[((IOTA - 106) & 127)]) + ((9.2560700000000003e-05 * fVec7[((IOTA - 88) & 127)]) + ((0.00030100299999999999 * fVec7[((IOTA - 87) & 127)]) + ((0.00050179800000000002 * fVec7[((IOTA - 86) & 127)]) + ((0.00149106 * fVec7[((IOTA - 85) & 127)]) + ((0.00071892899999999999 * fVec7[((IOTA - 84) & 127)]) + ((0.00048326599999999999 * fVec7[((IOTA - 81) & 127)]) + ((0.00072090700000000001 * fVec7[((IOTA - 80) & 127)]) + ((0.00023854600000000002 * fVec7[((IOTA - 78) & 127)]) + ((0.0014875400000000001 * fVec7[((IOTA - 77) & 127)]) + ((0.0033493400000000001 * fVec7[((IOTA - 76) & 127)]) + ((0.0031260400000000001 * fVec7[((IOTA - 75) & 127)]) + ((0.00083117599999999999 * fVec7[((IOTA - 74) & 127)]) + ((0.00045545999999999998 * fVec7[((IOTA - 68) & 127)]) + ((0.0010428 * fVec7[((IOTA - 67) & 127)]) + ((0.0019296000000000001 * fVec7[((IOTA - 66) & 127)]) + ((0.00020463 * fVec7[((IOTA - 65) & 127)]) + ((0.0010030900000000001 * fVec7[((IOTA - 64) & 127)]) + ((0.00166927 * fVec7[((IOTA - 63) & 127)]) + ((0.00022598400000000001 * fVec7[((IOTA - 62) & 127)]) + ((0.00060200900000000003 * fVec7[((IOTA - 61) & 127)]) + ((0.00083492200000000009 * fVec7[((IOTA - 60) & 127)]) + ((9.2360600000000005e-05 * fVec7[((IOTA - 59) & 127)]) + ((0.00095314700000000011 * fVec7[((IOTA - 52) & 127)]) + ((0.00228246 * fVec7[((IOTA - 51) & 127)]) + ((0.0043644199999999999 * fVec7[((IOTA - 50) & 127)]) + ((0.0053697700000000003 * fVec7[((IOTA - 49) & 127)]) + ((0.0012248000000000001 * fVec7[((IOTA - 48) & 127)]) + ((0.0058665100000000001 * fVec7[((IOTA - 43) & 127)]) + ((0.0019103500000000001 * fVec7[((IOTA - 42) & 127)]) + ((0.0091888300000000003 * fVec7[((IOTA - 38) & 127)]) + ((0.0083688600000000005 * fVec7[((IOTA - 37) & 127)]) + ((0.0049278500000000001 * fVec7[((IOTA - 36) & 127)]) + ((0.0073932900000000003 * fVec7[((IOTA - 33) & 127)]) + ((0.00548534 * fVec7[((IOTA - 31) & 127)]) + ((0.0028647 * fVec7[((IOTA - 30) & 127)]) + ((0.0077168700000000007 * fVec7[((IOTA - 28) & 127)]) + ((0.0097574199999999993 * fVec7[((IOTA - 25) & 127)]) + ((0.0053800000000000002 * fVec7[((IOTA - 24) & 127)]) + ((0.0060703699999999994 * fVec7[((IOTA - 22) & 127)]) + ((0.0074193800000000006 * fVec7[((IOTA - 19) & 127)]) + ((0.0303129 * fVec7[((IOTA - 18) & 127)]) + ((0.00060355100000000002 * fVec7[((IOTA - 15) & 127)]) + ((0.00046831500000000007 * fVec7[((IOTA - 13) & 127)]) + ((0.012178800000000002 * fVec7[((IOTA - 12) & 127)]) + ((0.0012102200000000001 * fVec7[((IOTA - 10) & 127)]) + ((0.00099936700000000014 * fVec7[((IOTA - 9) & 127)]) + ((0.00060848900000000004 * fVec7[((IOTA - 6) & 127)]) + ((0.00037949199999999999 * fVec7[((IOTA - 5) & 127)]) + ((0.00016164900000000001 * fVec7[((IOTA - 3) & 127)]) + ((4.3842899999999996e-07 * fVec7[((IOTA - 2) & 127)]) + ((2.52175e-05 * fVec7[((IOTA - 1) & 127)]) + ((1.1251800000000001e-05 * fTemp7) + ((0.000547987 * fVec7[((IOTA - 92) & 127)]) + ((0.00076694000000000013 * fVec7[((IOTA - 91) & 127)]) + ((0.000164878 * fVec7[((IOTA - 89) & 127)]) + ((4.0191900000000004e-05 * fVec7[((IOTA - 105) & 127)]) + ((4.5314599999999995e-06 * fVec7[((IOTA - 103) & 127)]) + ((0.00025367800000000002 * fVec7[((IOTA - 101) & 127)]) + ((0.000293212 * fVec7[((IOTA - 100) & 127)]) + ((0.00039481299999999999 * fVec7[((IOTA - 99) & 127)]) + ((0.00059363700000000005 * fVec7[((IOTA - 98) & 127)]) + ((0.00084704300000000012 * fVec7[((IOTA - 97) & 127)]) + ((0.00094673100000000003 * fVec7[((IOTA - 90) & 127)]) + ((0.0015023899999999999 * fVec7[((IOTA - 96) & 127)]) + ((0.00124766 * fVec7[((IOTA - 95) & 127)]) + ((1.99452e-07 * fVec8[((IOTA - 126) & 127)]) + ((5.9452600000000002e-06 * fVec8[((IOTA - 125) & 127)]) + ((4.5447499999999991e-06 * fVec8[((IOTA - 124) & 127)]) + ((3.63984e-05 * fVec8[((IOTA - 121) & 127)]) + ((7.7160200000000014e-05 * fVec8[((IOTA - 120) & 127)]) + ((8.9261199999999998e-05 * fVec8[((IOTA - 113) & 127)]) + ((0.00032315499999999999 * fVec8[((IOTA - 109) & 127)]) + ((0.00016531600000000001 * fVec8[((IOTA - 108) & 127)]) + ((4.6986800000000009e-05 * fVec8[((IOTA - 106) & 127)]) + ((0.00025181600000000003 * fVec8[((IOTA - 105) & 127)]) + ((9.0767900000000016e-05 * fVec8[((IOTA - 99) & 127)]) + ((0.00023176100000000003 * fVec8[((IOTA - 97) & 127)]) + ((0.00080298400000000008 * fVec8[((IOTA - 96) & 127)]) + ((0.00069823599999999997 * fVec8[((IOTA - 95) & 127)]) + ((0.00077859999999999995 * fVec8[((IOTA - 94) & 127)]) + ((0.0010210200000000001 * fVec8[((IOTA - 93) & 127)]) + ((0.00051142200000000009 * fVec8[((IOTA - 88) & 127)]) + ((0.00065435200000000008 * fVec8[((IOTA - 87) & 127)]) + ((0.00128331 * fVec8[((IOTA - 86) & 127)]) + ((0.00044122600000000002 * fVec8[((IOTA - 85) & 127)]) + ((0.00109859 * fVec8[((IOTA - 84) & 127)]) + ((0.00048614699999999998 * fVec8[((IOTA - 83) & 127)]) + ((0.00056543900000000005 * fVec8[((IOTA - 81) & 127)]) + ((0.00042531800000000005 * fVec8[((IOTA - 80) & 127)]) + ((0.00037687700000000002 * fVec8[((IOTA - 79) & 127)]) + ((0.00153375 * fVec8[((IOTA - 78) & 127)]) + ((0.0010877699999999998 * fVec8[((IOTA - 77) & 127)]) + ((0.0010103800000000002 * fVec8[((IOTA - 76) & 127)]) + ((0.00253834 * fVec8[((IOTA - 44) & 127)]) + ((0.0083012099999999998 * fVec8[((IOTA - 43) & 127)]) + ((0.0117918 * fVec8[((IOTA - 40) & 127)]) + ((0.0095889700000000005 * fVec8[((IOTA - 36) & 127)]) + ((0.0071901300000000003 * fVec8[((IOTA - 35) & 127)]) + ((0.0060223199999999994 * fVec8[((IOTA - 32) & 127)]) + ((0.045109799999999999 * fVec8[((IOTA - 31) & 127)]) + ((0.0208799 * fVec8[((IOTA - 30) & 127)]) + ((0.017652600000000001 * fVec8[((IOTA - 27) & 127)]) + ((0.017632800000000001 * fVec8[((IOTA - 22) & 127)]) + ((0.017422800000000002 * fVec8[((IOTA - 21) & 127)]) + ((0.022197600000000001 * fVec8[((IOTA - 20) & 127)]) + ((0.019054700000000001 * fVec8[((IOTA - 19) & 127)]) + ((0.016357099999999999 * fVec8[((IOTA - 17) & 127)]) + ((0.020028999999999998 * fVec8[((IOTA - 16) & 127)]) + ((0.0078711900000000001 * fVec8[((IOTA - 12) & 127)]) + ((0.0014582099999999999 * fVec8[((IOTA - 11) & 127)]) + ((0.00062471599999999999 * fVec8[((IOTA - 9) & 127)]) + ((0.00162677 * fVec8[((IOTA - 7) & 127)]) + ((0.00116299 * fVec8[((IOTA - 5) & 127)]) + ((8.6241699999999998e-05 * fVec8[((IOTA - 4) & 127)]) + ((0.00039905000000000002 * fVec8[((IOTA - 3) & 127)]) + ((4.7087999999999997e-06 * fVec8[((IOTA - 1) & 127)]) + ((0.00464818 * fVec8[((IOTA - 51) & 127)]) + ((0.0030283900000000002 * fVec8[((IOTA - 50) & 127)]) + ((0.00079149500000000002 * fVec8[((IOTA - 69) & 127)]) + ((0.0059246500000000001 * fVec8[((IOTA - 68) & 127)]) + ((0.0068489100000000006 * fVec8[((IOTA - 67) & 127)]) + ((0.0030456500000000004 * fVec8[((IOTA - 66) & 127)]) + ((0.0024000200000000001 * fVec8[((IOTA - 64) & 127)]) + ((0.0039972499999999999 * fVec8[((IOTA - 63) & 127)]) + ((0.00066394700000000002 * fVec8[((IOTA - 47) & 127)]) + ((5.3289600000000006e-05 * fVec11[((IOTA - 119) & 127)]) + ((0.000107805 * fVec11[((IOTA - 118) & 127)]) + ((0.00016857100000000001 * fVec11[((IOTA - 117) & 127)]) + ((0.00017462800000000002 * fVec11[((IOTA - 116) & 127)]) + ((0.00020061900000000003 * fVec11[((IOTA - 115) & 127)]) + ((0.00026791400000000001 * fVec11[((IOTA - 114) & 127)]) + ((0.000214133 * fVec11[((IOTA - 113) & 127)]) + ((0.00012941499999999999 * fVec11[((IOTA - 112) & 127)]) + ((0.000341992 * fVec11[((IOTA - 111) & 127)]) + ((0.00073887099999999999 * fVec11[((IOTA - 110) & 127)]) + ((0.000178548 * fVec11[((IOTA - 109) & 127)]) + ((0.00034591100000000002 * fVec11[((IOTA - 107) & 127)]) + ((0.00056230400000000002 * fVec11[((IOTA - 106) & 127)]) + ((0.00034390400000000002 * fVec11[((IOTA - 105) & 127)]) + ((0.00040135500000000005 * fVec11[((IOTA - 102) & 127)]) + ((1.2323300000000001e-05 * fVec11[((IOTA - 99) & 127)]) + ((0.00017320599999999999 * fVec11[((IOTA - 98) & 127)]) + ((0.00137867 * fVec11[((IOTA - 90) & 127)]) + ((0.0011166000000000001 * fVec11[((IOTA - 89) & 127)]) + ((0.00077525200000000004 * fVec11[((IOTA - 88) & 127)]) + ((0.00051248299999999999 * fVec11[((IOTA - 87) & 127)]) + ((0.00034004900000000004 * fVec11[((IOTA - 86) & 127)]) + ((0.000134423 * fVec11[((IOTA - 84) & 127)]) + ((0.0011347400000000002 * fVec11[((IOTA - 83) & 127)]) + ((5.784670000000001e-05 * fVec11[((IOTA - 82) & 127)]) + ((0.0008637740000000001 * fVec11[((IOTA - 78) & 127)]) + ((0.0017782899999999999 * fVec11[((IOTA - 77) & 127)]) + ((0.00095740300000000012 * fVec11[((IOTA - 76) & 127)]) + ((0.00027913800000000001 * fVec11[((IOTA - 75) & 127)]) + ((0.000413929 * fVec11[((IOTA - 74) & 127)]) + ((0.0014493400000000001 * fVec11[((IOTA - 70) & 127)]) + ((0.0024630899999999998 * fVec11[((IOTA - 69) & 127)]) + ((0.00066884400000000004 * fVec11[((IOTA - 68) & 127)]) + ((0.0016410700000000001 * fVec11[((IOTA - 66) & 127)]) + ((0.0028929999999999997 * fVec11[((IOTA - 65) & 127)]) + ((0.00010676699999999999 * fVec11[((IOTA - 60) & 127)]) + ((0.00080710999999999999 * fVec11[((IOTA - 58) & 127)]) + ((0.0015732999999999999 * fVec11[((IOTA - 57) & 127)]) + ((0.00047008900000000003 * fVec11[((IOTA - 56) & 127)]) + ((0.00058858800000000002 * fVec11[((IOTA - 46) & 127)]) + ((0.0089012100000000014 * fVec11[((IOTA - 45) & 127)]) + ((0.0063971999999999996 * fVec11[((IOTA - 44) & 127)]) + ((0.0011654300000000001 * fVec11[((IOTA - 42) & 127)]) + ((0.0065539300000000003 * fVec11[((IOTA - 41) & 127)]) + ((0.00199292 * fVec11[((IOTA - 37) & 127)]) + ((0.0048789100000000002 * fVec11[((IOTA - 36) & 127)]) + ((0.00714622 * fVec11[((IOTA - 35) & 127)]) + ((0.0095548600000000001 * fVec11[((IOTA - 33) & 127)]) + ((0.019952500000000001 * fVec11[((IOTA - 32) & 127)]) + ((0.0029659300000000003 * fVec11[((IOTA - 29) & 127)]) + ((0.029996000000000002 * fVec11[((IOTA - 28) & 127)]) + ((0.0016475999999999999 * fVec11[((IOTA - 27) & 127)]) + ((0.0254705 * fVec11[((IOTA - 25) & 127)]) + ((0.0083854199999999993 * fVec11[((IOTA - 24) & 127)]) + ((0.039960800000000005 * fVec11[((IOTA - 18) & 127)]) + ((0.0071864600000000004 * fVec11[((IOTA - 17) & 127)]) + ((0.032838599999999996 * fVec11[((IOTA - 15) & 127)]) + ((0.00164934 * fVec11[((IOTA - 14) & 127)]) + ((0.0050885600000000007 * fVec11[((IOTA - 13) & 127)]) + ((0.00094482099999999999 * fVec11[((IOTA - 10) & 127)]) + ((7.6144500000000003e-05 * fVec11[((IOTA - 9) & 127)]) + ((0.00057894000000000001 * fVec11[((IOTA - 8) & 127)]) + ((0.00159128 * fVec11[((IOTA - 6) & 127)]) + ((0.00015391 * fVec11[((IOTA - 4) & 127)]) + ((0.00036213800000000002 * fVec11[((IOTA - 2) & 127)]) + ((1.8821400000000002e-05 * fTemp11) + ((3.5712499999999999e-07 * fVec10[((IOTA - 126) & 127)]) + ((1.1903999999999999e-06 * fVec10[((IOTA - 125) & 127)]) + ((9.2364300000000006e-06 * fVec10[((IOTA - 124) & 127)]) + ((7.6588799999999991e-06 * fVec10[((IOTA - 123) & 127)]) + ((8.9591899999999999e-06 * fVec10[((IOTA - 120) & 127)]) + ((8.6424300000000005e-05 * fVec10[((IOTA - 119) & 127)]) + ((7.8613700000000009e-05 * fVec10[((IOTA - 118) & 127)]) + ((4.4238600000000007e-05 * fVec10[((IOTA - 117) & 127)]) + ((5.5205099999999998e-06 * fVec10[((IOTA - 115) & 127)]) + ((6.6639900000000005e-05 * fVec10[((IOTA - 114) & 127)]) + ((0.000157369 * fVec10[((IOTA - 111) & 127)]) + ((8.3003200000000005e-05 * fVec10[((IOTA - 110) & 127)]) + ((0.000439844 * fVec10[((IOTA - 107) & 127)]) + ((0.00027481100000000002 * fVec10[((IOTA - 106) & 127)]) + ((3.2093500000000007e-05 * fVec10[((IOTA - 102) & 127)]) + ((0.00036137300000000001 * fVec10[((IOTA - 96) & 127)]) + ((0.00061885399999999995 * fVec10[((IOTA - 95) & 127)]) + ((0.00066768000000000003 * fVec10[((IOTA - 94) & 127)]) + ((0.00017124500000000002 * fVec10[((IOTA - 93) & 127)]) + ((0.00025192200000000002 * fVec10[((IOTA - 92) & 127)]) + ((0.00091703800000000001 * fVec10[((IOTA - 91) & 127)]) + ((0.0010790400000000001 * fVec10[((IOTA - 88) & 127)]) + ((0.0015949800000000002 * fVec10[((IOTA - 87) & 127)]) + ((0.0014874700000000001 * fVec10[((IOTA - 86) & 127)]) + ((0.00093692899999999997 * fVec10[((IOTA - 85) & 127)]) + ((0.0006546770000000001 * fVec10[((IOTA - 84) & 127)]) + ((0.00088971800000000006 * fVec10[((IOTA - 61) & 127)]) + ((0.0030282500000000001 * fVec10[((IOTA - 60) & 127)]) + ((0.0047336600000000006 * fVec10[((IOTA - 54) & 127)]) + ((0.0044919299999999999 * fVec10[((IOTA - 53) & 127)]) + ((0.0011470100000000002 * fVec10[((IOTA - 50) & 127)]) + ((0.0012055499999999999 * fVec10[((IOTA - 48) & 127)]) + ((0.0059192300000000002 * fVec10[((IOTA - 47) & 127)]) + ((0.0032900500000000001 * fVec10[((IOTA - 44) & 127)]) + ((0.00224289 * fVec10[((IOTA - 43) & 127)]) + ((0.00017730600000000001 * fVec10[((IOTA - 42) & 127)]) + ((0.0072601800000000006 * fVec10[((IOTA - 41) & 127)]) + ((0.00453353 * fVec10[((IOTA - 38) & 127)]) + ((0.00194991 * fVec10[((IOTA - 37) & 127)]) + ((0.00083337500000000002 * fVec10[((IOTA - 35) & 127)]) + ((0.0247151 * fVec10[((IOTA - 34) & 127)]) + ((0.0069191299999999999 * fVec10[((IOTA - 30) & 127)]) + ((0.0098116000000000002 * fVec10[((IOTA - 29) & 127)]) + ((0.0033760599999999997 * fVec10[((IOTA - 28) & 127)]) + ((0.0036533899999999998 * fVec10[((IOTA - 27) & 127)]) + ((0.0209074 * fVec10[((IOTA - 22) & 127)]) + ((0.0101589 * fVec10[((IOTA - 21) & 127)]) + ((0.016458299999999999 * fVec10[((IOTA - 20) & 127)]) + ((0.021493699999999998 * fVec10[((IOTA - 17) & 127)]) + ((0.0062705200000000008 * fVec10[((IOTA - 16) & 127)]) + ((0.0048823400000000006 * fVec10[((IOTA - 14) & 127)]) + ((0.00084803800000000007 * fVec10[((IOTA - 11) & 127)]) + ((0.0012552099999999999 * fVec10[((IOTA - 8) & 127)]) + ((0.00022105899999999999 * fVec10[((IOTA - 6) & 127)]) + ((0.00024554399999999999 * fVec10[((IOTA - 5) & 127)]) + ((0.00061196600000000003 * fVec10[((IOTA - 4) & 127)]) + ((0.00014579800000000002 * fVec10[((IOTA - 2) & 127)]) + ((0.000167615 * fVec10[((IOTA - 63) & 127)]) + ((0.000134809 * fVec10[((IOTA - 83) & 127)]) + ((0.00019593 * fVec10[((IOTA - 82) & 127)]) + ((0.0010831700000000001 * fVec10[((IOTA - 81) & 127)]) + ((0.00121283 * fVec10[((IOTA - 80) & 127)]) + ((0.0021823700000000003 * fVec10[((IOTA - 79) & 127)]) + ((0.00119166 * fVec10[((IOTA - 78) & 127)]) + ((0.00055397699999999999 * fVec10[((IOTA - 74) & 127)]) + ((0.0020279199999999999 * fVec10[((IOTA - 73) & 127)]) + ((0.00014092800000000002 * fVec10[((IOTA - 72) & 127)]) + ((8.5715000000000015e-05 * fVec10[((IOTA - 70) & 127)]) + ((0.00122613 * fVec10[((IOTA - 69) & 127)]) + ((0.0019218100000000001 * fVec10[((IOTA - 68) & 127)]) + ((0.00059488300000000004 * fVec10[((IOTA - 67) & 127)]) + ((1.2403399999999998e-06 * fVec12[((IOTA - 126) & 127)]) + ((6.5523199999999996e-06 * fVec12[((IOTA - 125) & 127)]) + ((7.103729999999999e-06 * fVec12[((IOTA - 124) & 127)]) + ((4.8057499999999997e-06 * fVec12[((IOTA - 123) & 127)]) + ((1.4907900000000002e-05 * fVec12[((IOTA - 122) & 127)]) + ((5.6678000000000002e-05 * fVec12[((IOTA - 121) & 127)]) + ((3.2618499999999999e-05 * fVec12[((IOTA - 120) & 127)]) + ((4.2858599999999997e-05 * fVec12[((IOTA - 116) & 127)]) + ((1.2154900000000001e-05 * fVec12[((IOTA - 115) & 127)]) + ((0.00126468 * fVec12[((IOTA - 90) & 127)]) + ((0.0016863 * fVec12[((IOTA - 89) & 127)]) + ((0.0009600120000000001 * fVec12[((IOTA - 86) & 127)]) + ((0.00042185499999999995 * fVec12[((IOTA - 85) & 127)]) + ((0.00064300400000000008 * fVec12[((IOTA - 84) & 127)]) + ((0.00199081 * fVec12[((IOTA - 83) & 127)]) + ((0.0032951600000000001 * fVec12[((IOTA - 82) & 127)]) + ((0.00044377400000000002 * fVec12[((IOTA - 81) & 127)]) + ((0.0011996999999999999 * fVec12[((IOTA - 78) & 127)]) + ((0.0027583899999999999 * fVec12[((IOTA - 77) & 127)]) + ((0.00029621600000000002 * fVec12[((IOTA - 76) & 127)]) + ((0.00032057000000000006 * fVec12[((IOTA - 74) & 127)]) + ((0.00011427200000000001 * fVec12[((IOTA - 70) & 127)]) + ((0.0023553899999999997 * fVec12[((IOTA - 69) & 127)]) + ((0.00121634 * fVec12[((IOTA - 61) & 127)]) + ((0.0031460699999999999 * fVec12[((IOTA - 60) & 127)]) + ((0.0028280900000000001 * fVec12[((IOTA - 59) & 127)]) + ((0.0041894900000000006 * fVec12[((IOTA - 58) & 127)]) + ((0.0050431600000000005 * fVec12[((IOTA - 57) & 127)]) + ((0.00070018900000000004 * fVec12[((IOTA - 56) & 127)]) + ((0.00079562299999999997 * fVec12[((IOTA - 55) & 127)]) + ((0.0022291200000000002 * fVec12[((IOTA - 54) & 127)]) + ((0.0010627800000000001 * fVec12[((IOTA - 53) & 127)]) + ((0.0025782299999999999 * fVec12[((IOTA - 52) & 127)]) + ((0.0010116599999999999 * fVec12[((IOTA - 51) & 127)]) + ((0.0030807500000000002 * fVec12[((IOTA - 45) & 127)]) + ((0.0044340900000000008 * fVec12[((IOTA - 44) & 127)]) + ((0.0014659899999999999 * fVec12[((IOTA - 39) & 127)]) + ((0.0075921599999999997 * fVec12[((IOTA - 38) & 127)]) + ((0.0013163199999999999 * fVec12[((IOTA - 36) & 127)]) + ((0.00139712 * fVec12[((IOTA - 35) & 127)]) + ((0.020927999999999999 * fVec12[((IOTA - 31) & 127)]) + ((0.0030580300000000002 * fVec12[((IOTA - 30) & 127)]) + ((0.0031714500000000001 * fVec12[((IOTA - 27) & 127)]) + ((0.0298252 * fVec12[((IOTA - 26) & 127)]) + ((0.0033139300000000001 * fVec12[((IOTA - 23) & 127)]) + ((0.0065595499999999999 * fVec12[((IOTA - 21) & 127)]) + ((0.0090886700000000001 * fVec12[((IOTA - 20) & 127)]) + ((0.0062460900000000001 * fVec12[((IOTA - 18) & 127)]) + ((0.012640400000000001 * fVec12[((IOTA - 17) & 127)]) + ((0.00686843 * fVec12[((IOTA - 15) & 127)]) + ((0.0014359399999999999 * fVec12[((IOTA - 13) & 127)]) + ((0.00021416200000000003 * fVec12[((IOTA - 9) & 127)]) + ((0.00044645700000000004 * fVec12[((IOTA - 8) & 127)]) + ((0.00023944000000000002 * fVec12[((IOTA - 4) & 127)]) + ((4.13336e-05 * fVec12[((IOTA - 2) & 127)]) + ((3.3055699999999998e-06 * fTemp12) + ((8.1906300000000006e-05 * fVec12[((IOTA - 101) & 127)]) + ((0.00050917300000000003 * fVec12[((IOTA - 100) & 127)]) + ((7.7107099999999996e-07 * fVec13[((IOTA - 126) & 127)]) + ((5.8016599999999996e-06 * fVec13[((IOTA - 125) & 127)]) + ((1.0293200000000002e-05 * fVec13[((IOTA - 124) & 127)]) + ((1.26402e-05 * fVec13[((IOTA - 123) & 127)]) + ((3.9907800000000004e-05 * fVec12[((IOTA - 92) & 127)]) + ((1.2875300000000002e-05 * fVec13[((IOTA - 120) & 127)]) + ((3.0919700000000001e-05 * fVec13[((IOTA - 119) & 127)]) + ((1.3730199999999999e-05 * fVec13[((IOTA - 118) & 127)]) + ((0.00010595300000000001 * fVec13[((IOTA - 117) & 127)]) + ((6.2319599999999999e-05 * fVec13[((IOTA - 116) & 127)]) + ((2.2893700000000001e-05 * fVec13[((IOTA - 114) & 127)]) + ((3.6990800000000005e-05 * fVec13[((IOTA - 113) & 127)]) + ((0.0014893700000000001 * fVec13[((IOTA - 94) & 127)]) + ((0.00063396999999999998 * fVec12[((IOTA - 91) & 127)]) + ((0.00075849800000000003 * fVec13[((IOTA - 93) & 127)]) + ((1.7939800000000001e-05 * fVec13[((IOTA - 89) & 127)]) + ((0.00022978000000000001 * fVec13[((IOTA - 88) & 127)]) + ((0.00040871000000000006 * fVec13[((IOTA - 87) & 127)]) + ((0.00042454500000000002 * fVec13[((IOTA - 86) & 127)]) + ((0.00052778200000000008 * fVec13[((IOTA - 85) & 127)]) + ((0.00239894 * fVec13[((IOTA - 84) & 127)]) + ((0.0029262899999999998 * fVec13[((IOTA - 83) & 127)]) + ((0.0016715800000000002 * fVec13[((IOTA - 82) & 127)]) + ((0.0011202900000000001 * fVec13[((IOTA - 81) & 127)]) + ((7.5395799999999992e-06 * fVec13[((IOTA - 80) & 127)]) + ((0.00041440900000000002 * fVec13[((IOTA - 79) & 127)]) + ((3.0152300000000003e-05 * fVec13[((IOTA - 78) & 127)]) + ((0.00071683100000000002 * fVec13[((IOTA - 76) & 127)]) + ((3.8916400000000006e-05 * fVec13[((IOTA - 75) & 127)]) + ((0.0012073799999999999 * fVec13[((IOTA - 74) & 127)]) + ((0.0031728900000000003 * fVec13[((IOTA - 73) & 127)]) + ((0.0018727100000000001 * fVec13[((IOTA - 72) & 127)]) + ((0.010106800000000001 * fVec13[((IOTA - 20) & 127)]) + ((0.016007400000000001 * fVec13[((IOTA - 19) & 127)]) + ((0.020679400000000001 * fVec13[((IOTA - 18) & 127)]) + ((0.0034218899999999999 * fVec13[((IOTA - 17) & 127)]) + ((0.016782399999999999 * fVec13[((IOTA - 14) & 127)]) + ((2.9919300000000003e-05 * fVec13[((IOTA - 11) & 127)]) + ((3.3796500000000001e-05 * fVec13[((IOTA - 9) & 127)]) + ((0.00054442100000000001 * fVec13[((IOTA - 8) & 127)]) + ((0.00043977500000000005 * fVec13[((IOTA - 6) & 127)]) + ((0.00054478099999999993 * fVec13[((IOTA - 5) & 127)]) + ((0.00022437700000000002 * fVec13[((IOTA - 2) & 127)]) + ((1.9893300000000001e-05 * fVec13[((IOTA - 1) & 127)]) + ((0.00244034 * fVec13[((IOTA - 26) & 127)]) + ((0.0027159100000000002 * fVec13[((IOTA - 25) & 127)]) + ((0.0355257 * fVec13[((IOTA - 24) & 127)]) + ((0.00091280400000000013 * fVec13[((IOTA - 63) & 127)]) + ((0.0016841900000000001 * fVec13[((IOTA - 57) & 127)]) + ((0.0014167300000000002 * fVec13[((IOTA - 56) & 127)]) + ((8.9493100000000012e-05 * fVec13[((IOTA - 53) & 127)]) + ((0.00032871800000000003 * fVec13[((IOTA - 52) & 127)]) + ((0.00168373 * fVec13[((IOTA - 51) & 127)]) + ((0.0039323600000000002 * fVec13[((IOTA - 50) & 127)]) + ((0.00094270700000000009 * fVec13[((IOTA - 49) & 127)]) + ((0.0014762200000000001 * fVec13[((IOTA - 45) & 127)]) + ((0.0053497099999999997 * fVec13[((IOTA - 44) & 127)]) + ((0.0013171900000000002 * fVec13[((IOTA - 43) & 127)]) + ((0.0034829700000000002 * fVec13[((IOTA - 41) & 127)]) + ((0.0043833000000000006 * fVec13[((IOTA - 40) & 127)]) + ((0.0085886299999999999 * fVec13[((IOTA - 37) & 127)]) + ((0.0098696699999999988 * fVec13[((IOTA - 36) & 127)]) + ((0.0081568500000000002 * fVec13[((IOTA - 33) & 127)]) + ((0.0055860800000000002 * fVec13[((IOTA - 32) & 127)]) + ((0.0076456700000000002 * fVec13[((IOTA - 31) & 127)]) + ((0.0047620600000000003 * fVec13[((IOTA - 30) & 127)]) + ((7.4901799999999991e-07 * fVec14[((IOTA - 126) & 127)]) + ((5.2121499999999997e-06 * fVec14[((IOTA - 125) & 127)]) + ((1.5791000000000002e-05 * fVec14[((IOTA - 124) & 127)]) + ((2.1421500000000001e-05 * fVec14[((IOTA - 123) & 127)]) + ((2.2224499999999998e-06 * fVec14[((IOTA - 122) & 127)]) + ((2.15894e-05 * fVec14[((IOTA - 121) & 127)]) + ((4.67294e-05 * fVec14[((IOTA - 120) & 127)]) + ((1.9006100000000001e-05 * fVec14[((IOTA - 119) & 127)]) + ((0.013501399999999998 * fVec13[((IOTA - 21) & 127)]) + ((0.00029154800000000003 * fVec14[((IOTA - 104) & 127)]) + ((0.000281437 * fVec14[((IOTA - 102) & 127)]) + ((0.000737136 * fVec14[((IOTA - 101) & 127)]) + ((0.00013028900000000001 * fVec14[((IOTA - 100) & 127)]) + ((0.00065116800000000004 * fVec14[((IOTA - 97) & 127)]) + ((0.00087714900000000003 * fVec14[((IOTA - 96) & 127)]) + ((0.00059851200000000005 * fVec14[((IOTA - 95) & 127)]) + ((0.00058117100000000001 * fVec14[((IOTA - 94) & 127)]) + ((7.4501400000000011e-05 * fVec14[((IOTA - 93) & 127)]) + ((0.00070493400000000005 * fVec14[((IOTA - 92) & 127)]) + ((0.0016990600000000001 * fVec14[((IOTA - 91) & 127)]) + ((0.00105839 * fVec14[((IOTA - 90) & 127)]) + ((0.00064867600000000005 * fVec14[((IOTA - 89) & 127)]) + ((0.00045359999999999997 * fVec14[((IOTA - 84) & 127)]) + ((0.00105405 * fVec14[((IOTA - 83) & 127)]) + ((0.00066430600000000003 * fVec14[((IOTA - 82) & 127)]) + ((1.0579500000000001e-05 * fVec14[((IOTA - 79) & 127)]) + ((0.00085561100000000005 * fVec14[((IOTA - 78) & 127)]) + ((0.00048425300000000003 * fVec14[((IOTA - 77) & 127)]) + ((0.00017929400000000001 * fVec14[((IOTA - 70) & 127)]) + ((0.0012052899999999999 * fVec14[((IOTA - 69) & 127)]) + ((0.0029520400000000004 * fVec14[((IOTA - 45) & 127)]) + ((0.0094207800000000001 * fVec14[((IOTA - 44) & 127)]) + ((0.0089927300000000009 * fVec14[((IOTA - 43) & 127)]) + ((0.0031344599999999999 * fVec14[((IOTA - 40) & 127)]) + ((0.0020825100000000001 * fVec14[((IOTA - 39) & 127)]) + ((0.010519000000000001 * fVec14[((IOTA - 30) & 127)]) + ((0.0133066 * fVec14[((IOTA - 27) & 127)]) + ((0.024085600000000002 * fVec14[((IOTA - 22) & 127)]) + ((0.0087774500000000009 * fVec14[((IOTA - 21) & 127)]) + ((0.0316397 * fVec14[((IOTA - 20) & 127)]) + ((0.0629913 * fVec14[((IOTA - 19) & 127)]) + ((0.00082095500000000006 * fVec14[((IOTA - 18) & 127)]) + ((0.027291599999999999 * fVec14[((IOTA - 17) & 127)]) + ((0.037210699999999999 * fVec14[((IOTA - 16) & 127)]) + ((0.00091706600000000002 * fVec14[((IOTA - 15) & 127)]) + ((0.00067622200000000009 * fVec14[((IOTA - 10) & 127)]) + ((0.00071360300000000005 * fVec14[((IOTA - 8) & 127)]) + ((0.000243654 * fVec14[((IOTA - 7) & 127)]) + ((0.00032285800000000003 * fVec14[((IOTA - 6) & 127)]) + ((0.000171535 * fVec14[((IOTA - 5) & 127)]) + ((9.1102699999999994e-07 * fVec14[((IOTA - 3) & 127)]) + ((0.000151989 * fVec14[((IOTA - 2) & 127)]) + ((7.3887899999999996e-06 * fVec14[((IOTA - 1) & 127)]) + ((0.0088627000000000011 * fVec14[((IOTA - 51) & 127)]) + ((0.00769069 * fVec14[((IOTA - 50) & 127)]) + ((0.0025811200000000001 * fVec14[((IOTA - 49) & 127)]) + ((0.0020010100000000001 * fVec14[((IOTA - 47) & 127)]) + ((9.0909400000000007e-05 * fVec14[((IOTA - 63) & 127)]) + ((7.1183600000000001e-05 * fVec14[((IOTA - 62) & 127)]) + ((0.00144718 * fVec14[((IOTA - 60) & 127)]) + ((0.0011860799999999999 * fVec14[((IOTA - 59) & 127)]) + ((0.0020690300000000003 * fVec14[((IOTA - 57) & 127)]) + ((0.0015602599999999999 * fVec14[((IOTA - 56) & 127)]) + ((0.0016904800000000001 * fVec14[((IOTA - 53) & 127)]) + ((0.00271579 * fVec14[((IOTA - 52) & 127)]) + ((6.2717999999999998e-07 * fVec15[((IOTA - 126) & 127)]) + ((3.2364399999999999e-06 * fVec15[((IOTA - 125) & 127)]) + ((8.259009999999999e-06 * fVec15[((IOTA - 123) & 127)]) + ((8.9749599999999985e-06 * fVec15[((IOTA - 122) & 127)]) + ((1.8158200000000002e-05 * fVec15[((IOTA - 121) & 127)]) + ((0.0056659300000000004 * fVec14[((IOTA - 46) & 127)]) + ((5.1987600000000003e-05 * fVec15[((IOTA - 120) & 127)]) + ((3.15558e-05 * fVec15[((IOTA - 119) & 127)]) + ((5.2186399999999999e-05 * fVec15[((IOTA - 117) & 127)]) + ((0.00018432800000000001 * fVec15[((IOTA - 116) & 127)]) + ((5.6034300000000007e-05 * fVec15[((IOTA - 115) & 127)]) + ((6.3985300000000012e-05 * fVec15[((IOTA - 111) & 127)]) + ((9.3386400000000004e-05 * fVec15[((IOTA - 110) & 127)]) + ((0.000174119 * fVec15[((IOTA - 109) & 127)]) + ((0.00035722100000000001 * fVec15[((IOTA - 106) & 127)]) + ((0.00040952500000000005 * fVec15[((IOTA - 105) & 127)]) + ((0.00017427299999999999 * fVec15[((IOTA - 104) & 127)]) + ((0.00071199800000000004 * fVec15[((IOTA - 97) & 127)]) + ((0.0017188800000000001 * fVec15[((IOTA - 96) & 127)]) + ((0.00054225400000000004 * fVec15[((IOTA - 95) & 127)]) + ((0.000197515 * fVec15[((IOTA - 86) & 127)]) + ((0.0015781700000000001 * fVec15[((IOTA - 85) & 127)]) + ((0.0013863900000000001 * fVec15[((IOTA - 84) & 127)]) + ((1.9453499999999999e-05 * fVec15[((IOTA - 80) & 127)]) + ((0.00084547300000000001 * fVec15[((IOTA - 78) & 127)]) + ((0.00076569700000000008 * fVec15[((IOTA - 76) & 127)]) + ((0.0010572699999999999 * fVec15[((IOTA - 75) & 127)]) + ((7.5785200000000008e-05 * fVec15[((IOTA - 74) & 127)]) + ((0.0013651400000000001 * fVec15[((IOTA - 73) & 127)]) + ((2.74129e-05 * fVec15[((IOTA - 72) & 127)]) + ((0.0044228100000000001 * fVec15[((IOTA - 56) & 127)]) + ((0.0033445299999999996 * fVec15[((IOTA - 55) & 127)]) + ((0.0038119900000000003 * fVec15[((IOTA - 52) & 127)]) + ((0.00126195 * fVec15[((IOTA - 47) & 127)]) + ((0.00358275 * fVec15[((IOTA - 46) & 127)]) + ((0.0054975199999999997 * fVec15[((IOTA - 45) & 127)]) + ((0.0039510000000000005 * fVec15[((IOTA - 43) & 127)]) + ((0.0080632699999999991 * fVec15[((IOTA - 42) & 127)]) + ((0.0029713500000000002 * fVec15[((IOTA - 39) & 127)]) + ((0.0045339300000000003 * fVec15[((IOTA - 38) & 127)]) + ((0.0034691399999999999 * fVec15[((IOTA - 36) & 127)]) + ((0.0053706500000000003 * fVec15[((IOTA - 31) & 127)]) + ((0.00080878800000000006 * fVec15[((IOTA - 29) & 127)]) + ((0.0049867499999999999 * fVec15[((IOTA - 28) & 127)]) + ((0.0289144 * fVec15[((IOTA - 26) & 127)]) + ((0.0069377800000000002 * fVec15[((IOTA - 23) & 127)]) + ((0.015224500000000002 * fVec15[((IOTA - 20) & 127)]) + ((0.022025899999999998 * fVec15[((IOTA - 19) & 127)]) + ((0.0022348099999999998 * fVec15[((IOTA - 15) & 127)]) + ((0.00084613300000000011 * fVec15[((IOTA - 10) & 127)]) + ((0.00031658400000000002 * fVec15[((IOTA - 8) & 127)]) + ((4.6817000000000003e-05 * fVec15[((IOTA - 7) & 127)]) + ((0.00030049700000000005 * fVec15[((IOTA - 6) & 127)]) + ((0.00030608399999999998 * fVec15[((IOTA - 4) & 127)]) + ((4.2592100000000005e-06 * fVec15[((IOTA - 3) & 127)]) + ((5.0763200000000002e-05 * fVec15[((IOTA - 2) & 127)]) + ((6.9052499999999997e-06 * fTemp15) + ((0.00022492500000000001 * fVec15[((IOTA - 71) & 127)]) + ((0.0012562599999999999 * fVec15[((IOTA - 68) & 127)]) + ((0.0010871100000000001 * fVec15[((IOTA - 66) & 127)]) + ((0.0020311800000000001 * fVec15[((IOTA - 65) & 127)]) + ((0.0011967099999999999 * fVec15[((IOTA - 64) & 127)]) + ((6.0100200000000004e-05 * fVec15[((IOTA - 63) & 127)]) + ((0.0025393899999999999 * fVec15[((IOTA - 57) & 127)]) + ((9.1296399999999994e-07 * fVec16[((IOTA - 126) & 127)]) + ((3.51464e-06 * fVec16[((IOTA - 125) & 127)]) + ((2.3408799999999998e-06 * fVec16[((IOTA - 124) & 127)]) + ((1.2859600000000001e-05 * fVec16[((IOTA - 122) & 127)]) + ((6.8135399999999998e-05 * fVec16[((IOTA - 121) & 127)]) + ((7.0622400000000003e-05 * fVec16[((IOTA - 120) & 127)]) + ((4.4616900000000003e-05 * fVec16[((IOTA - 117) & 127)]) + ((0.00015610500000000002 * fVec16[((IOTA - 109) & 127)]) + ((9.1847800000000005e-05 * fVec16[((IOTA - 106) & 127)]) + ((0.00040533400000000003 * fVec16[((IOTA - 105) & 127)]) + ((8.3187099999999995e-05 * fVec16[((IOTA - 100) & 127)]) + ((7.3548200000000008e-05 * fVec16[((IOTA - 99) & 127)]) + ((0.00037095800000000001 * fVec16[((IOTA - 98) & 127)]) + ((0.0010441100000000002 * fVec16[((IOTA - 97) & 127)]) + ((0.00075582300000000009 * fVec16[((IOTA - 96) & 127)]) + ((0.00068145800000000002 * fVec16[((IOTA - 95) & 127)]) + ((0.0017419500000000001 * fVec16[((IOTA - 94) & 127)]) + ((0.0020959099999999999 * fVec16[((IOTA - 93) & 127)]) + ((0.00075253699999999995 * fVec16[((IOTA - 89) & 127)]) + ((0.00076358900000000006 * fVec16[((IOTA - 88) & 127)]) + ((0.00093791200000000006 * fVec16[((IOTA - 87) & 127)]) + ((0.00066410799999999995 * fVec16[((IOTA - 86) & 127)]) + ((2.1531600000000002e-05 * fVec16[((IOTA - 83) & 127)]) + ((0.00025595899999999999 * fVec16[((IOTA - 78) & 127)]) + ((0.0026293000000000002 * fVec16[((IOTA - 77) & 127)]) + ((0.00269454 * fVec16[((IOTA - 76) & 127)]) + ((0.00143391 * fVec16[((IOTA - 75) & 127)]) + ((0.00067648000000000003 * fVec16[((IOTA - 74) & 127)]) + ((0.000121165 * fVec16[((IOTA - 73) & 127)]) + ((0.00082825600000000009 * fVec16[((IOTA - 66) & 127)]) + ((0.00018963900000000002 * fVec16[((IOTA - 65) & 127)]) + ((0.00039613000000000002 * fVec16[((IOTA - 62) & 127)]) + ((0.0029183799999999999 * fVec16[((IOTA - 61) & 127)]) + ((0.0020411800000000001 * fVec16[((IOTA - 60) & 127)]) + ((0.0035877300000000003 * fVec16[((IOTA - 57) & 127)]) + ((0.0078956300000000007 * fVec16[((IOTA - 40) & 127)]) + ((0.0017256800000000001 * fVec16[((IOTA - 31) & 127)]) + ((0.027913199999999999 * fVec16[((IOTA - 24) & 127)]) + ((0.025743499999999999 * fVec16[((IOTA - 23) & 127)]) + ((0.0068529799999999998 * fVec16[((IOTA - 21) & 127)]) + ((0.063915300000000008 * fVec16[((IOTA - 20) & 127)]) + ((0.0661857 * fVec16[((IOTA - 19) & 127)]) + ((0.022665999999999999 * fVec16[((IOTA - 18) & 127)]) + ((0.00195357 * fVec16[((IOTA - 17) & 127)]) + ((0.0555369 * fVec16[((IOTA - 16) & 127)]) + ((0.027306 * fVec16[((IOTA - 15) & 127)]) + ((0.00054477599999999996 * fVec16[((IOTA - 10) & 127)]) + ((0.00092023100000000009 * fVec16[((IOTA - 7) & 127)]) + ((0.00095649800000000007 * fVec16[((IOTA - 6) & 127)]) + ((0.00031540600000000001 * fVec16[((IOTA - 2) & 127)]) + ((0.0081759099999999998 * fVec16[((IOTA - 48) & 127)]) + ((0.0042540899999999994 * fVec16[((IOTA - 47) & 127)]) + ((0.0031707900000000002 * fVec16[((IOTA - 46) & 127)]) + ((0.0049894200000000005 * fVec16[((IOTA - 45) & 127)]) + ((0.0097648300000000004 * fVec16[((IOTA - 44) & 127)]) + ((0.0036288100000000001 * fVec16[((IOTA - 42) & 127)]) + ((0.0028681000000000002 * fVec16[((IOTA - 56) & 127)]) + ((0.0047187499999999999 * fVec16[((IOTA - 52) & 127)]) + ((0.0066370199999999996 * fVec16[((IOTA - 51) & 127)]) + ((0.0045751999999999998 * fVec16[((IOTA - 50) & 127)]) + ((0.0044307699999999997 * fVec16[((IOTA - 49) & 127)]) + ((0.0162506 * fVec16[((IOTA - 43) & 127)]) + ((9.8664600000000001e-07 * fVec17[((IOTA - 125) & 127)]) + ((6.1935700000000003e-07 * fVec17[((IOTA - 122) & 127)]) + ((4.9322600000000008e-05 * fVec17[((IOTA - 119) & 127)]) + ((6.2934400000000005e-05 * fVec17[((IOTA - 118) & 127)]) + ((4.2778300000000003e-05 * fVec17[((IOTA - 117) & 127)]) + ((0.000106835 * fVec17[((IOTA - 116) & 127)]) + ((0.00018018099999999999 * fVec17[((IOTA - 115) & 127)]) + ((0.00022798800000000001 * fVec17[((IOTA - 114) & 127)]) + ((0.000195522 * fVec17[((IOTA - 113) & 127)]) + ((0.00011808300000000001 * fVec17[((IOTA - 112) & 127)]) + ((3.4608100000000005e-05 * fVec17[((IOTA - 111) & 127)]) + ((5.723480000000001e-05 * fVec17[((IOTA - 110) & 127)]) + ((0.00010142800000000001 * fVec17[((IOTA - 109) & 127)]) + ((9.4569700000000004e-05 * fVec17[((IOTA - 108) & 127)]) + ((0.000158107 * fVec17[((IOTA - 107) & 127)]) + ((0.00070563799999999997 * fVec17[((IOTA - 106) & 127)]) + ((0.00020890300000000003 * fVec17[((IOTA - 78) & 127)]) + ((0.00023814000000000002 * fVec17[((IOTA - 102) & 127)]) + ((0.00015213499999999999 * fVec17[((IOTA - 100) & 127)]) + ((0.0010091500000000001 * fVec17[((IOTA - 99) & 127)]) + ((0.0015510600000000002 * fVec17[((IOTA - 98) & 127)]) + ((0.00028692799999999999 * fVec17[((IOTA - 97) & 127)]) + ((0.00133293 * fVec17[((IOTA - 94) & 127)]) + ((0.0028975800000000003 * fVec17[((IOTA - 93) & 127)]) + ((0.00048340500000000007 * fVec17[((IOTA - 105) & 127)]) + ((0.00088707100000000013 * fVec17[((IOTA - 92) & 127)]) + ((0.00187875 * fVec17[((IOTA - 90) & 127)]) + ((0.0031641300000000002 * fVec17[((IOTA - 89) & 127)]) + ((0.0018413699999999999 * fVec17[((IOTA - 88) & 127)]) + ((0.00031068799999999999 * fVec17[((IOTA - 86) & 127)]) + ((0.00097602600000000006 * fVec17[((IOTA - 85) & 127)]) + ((0.0015255399999999999 * fVec17[((IOTA - 84) & 127)]) + ((0.00237411 * fVec17[((IOTA - 83) & 127)]) + ((0.00112458 * fVec17[((IOTA - 82) & 127)]) + ((0.000380057 * fVec17[((IOTA - 81) & 127)]) + ((0.000712925 * fVec17[((IOTA - 75) & 127)]) + ((0.00090846500000000001 * fVec17[((IOTA - 74) & 127)]) + ((0.000274135 * fVec17[((IOTA - 73) & 127)]) + ((0.00090694700000000018 * fVec17[((IOTA - 64) & 127)]) + ((0.0024532300000000003 * fVec17[((IOTA - 63) & 127)]) + ((0.00327984 * fVec17[((IOTA - 62) & 127)]) + ((0.0016773199999999999 * fVec17[((IOTA - 61) & 127)]) + ((0.00044967800000000007 * fVec17[((IOTA - 60) & 127)]) + ((0.00165106 * fVec17[((IOTA - 59) & 127)]) + ((0.0048987900000000001 * fVec17[((IOTA - 58) & 127)]) + ((0.0034805299999999999 * fVec17[((IOTA - 57) & 127)]) + ((0.0023563100000000003 * fVec17[((IOTA - 56) & 127)]) + ((0.0045976600000000008 * fVec17[((IOTA - 55) & 127)]) + ((0.00626758 * fVec17[((IOTA - 54) & 127)]) + ((0.0026557099999999999 * fVec17[((IOTA - 53) & 127)]) + ((0.0043297500000000003 * fVec17[((IOTA - 52) & 127)]) + ((0.009209740000000001 * fVec17[((IOTA - 51) & 127)]) + ((0.0029224400000000001 * fVec17[((IOTA - 50) & 127)]) + ((0.0033351100000000001 * fVec17[((IOTA - 49) & 127)]) + ((0.010395300000000001 * fVec17[((IOTA - 48) & 127)]) + ((0.0093701299999999991 * fVec17[((IOTA - 47) & 127)]) + ((0.0063169100000000002 * fVec17[((IOTA - 46) & 127)]) + ((0.013098200000000001 * fVec17[((IOTA - 45) & 127)]) + ((0.014119 * fVec17[((IOTA - 44) & 127)]) + ((0.0021459299999999999 * fVec17[((IOTA - 43) & 127)]) + ((0.0105223 * fVec17[((IOTA - 42) & 127)]) + ((0.022465099999999998 * fVec17[((IOTA - 41) & 127)]) + ((0.0080828600000000007 * fVec17[((IOTA - 40) & 127)]) + ((0.0026383800000000001 * fVec17[((IOTA - 39) & 127)]) + ((0.0090530699999999999 * fVec17[((IOTA - 38) & 127)]) + ((0.0048908699999999994 * fVec17[((IOTA - 37) & 127)]) + ((0.0060908100000000003 * fVec17[((IOTA - 35) & 127)]) + ((0.0095365099999999998 * fVec17[((IOTA - 32) & 127)]) + ((0.00093046600000000002 * fVec17[((IOTA - 22) & 127)]) + ((0.015390200000000001 * fVec17[((IOTA - 18) & 127)]) + ((0.045964499999999998 * fVec17[((IOTA - 17) & 127)]) + ((0.028787799999999999 * fVec17[((IOTA - 15) & 127)]) + ((0.048319200000000007 * fVec17[((IOTA - 14) & 127)]) + ((0.076845299999999991 * fVec17[((IOTA - 13) & 127)]) + ((0.074437400000000001 * fVec17[((IOTA - 12) & 127)]) + ((0.0013813599999999999 * fVec17[((IOTA - 11) & 127)]) + ((9.4869000000000016e-05 * fVec17[((IOTA - 10) & 127)]) + ((0.00097653599999999996 * fVec17[((IOTA - 9) & 127)]) + ((0.00011001600000000001 * fVec17[((IOTA - 8) & 127)]) + ((0.00063438600000000002 * fVec17[((IOTA - 5) & 127)]) + ((0.00012589200000000001 * fVec17[((IOTA - 4) & 127)]) + ((0.00040925999999999999 * fVec17[((IOTA - 3) & 127)]) + ((6.4495100000000005e-05 * fVec17[((IOTA - 1) & 127)]) + ((1.3287400000000001e-05 * fTemp17) + ((7.7027e-06 * fVec18[((IOTA - 124) & 127)]) + ((1.6838600000000002e-05 * fVec18[((IOTA - 123) & 127)]) + ((4.9636399999999996e-06 * fVec18[((IOTA - 122) & 127)]) + ((1.9403399999999997e-06 * fVec18[((IOTA - 121) & 127)]) + ((5.28142e-05 * fVec18[((IOTA - 120) & 127)]) + ((0.00011763 * fVec18[((IOTA - 119) & 127)]) + ((0.00016574 * fVec18[((IOTA - 118) & 127)]) + ((0.00013637100000000001 * fVec18[((IOTA - 117) & 127)]) + ((9.7487500000000005e-05 * fVec18[((IOTA - 116) & 127)]) + ((2.2899500000000003e-05 * fVec18[((IOTA - 115) & 127)]) + ((1.3387100000000001e-05 * fVec18[((IOTA - 114) & 127)]) + ((8.3318600000000019e-05 * fVec18[((IOTA - 113) & 127)]) + ((0.00025527000000000004 * fVec18[((IOTA - 112) & 127)]) + ((0.00034909600000000002 * fVec18[((IOTA - 111) & 127)]) + ((0.00019374600000000001 * fVec18[((IOTA - 107) & 127)]) + ((0.00019838400000000002 * fVec18[((IOTA - 103) & 127)]) + ((0.000168486 * fVec18[((IOTA - 96) & 127)]) + ((0.0012272400000000001 * fVec18[((IOTA - 95) & 127)]) + ((0.00020233 * fVec18[((IOTA - 94) & 127)]) + ((0.00017177199999999999 * fVec18[((IOTA - 90) & 127)]) + ((0.00020847000000000004 * fVec18[((IOTA - 88) & 127)]) + ((0.0011732700000000001 * fVec18[((IOTA - 87) & 127)]) + ((0.00090841200000000004 * fVec18[((IOTA - 86) & 127)]) + ((0.0010732299999999999 * fVec18[((IOTA - 81) & 127)]) + ((0.00257691 * fVec18[((IOTA - 80) & 127)]) + ((0.0017717799999999999 * fVec18[((IOTA - 79) & 127)]) + ((0.000561862 * fVec18[((IOTA - 78) & 127)]) + ((0.000172719 * fVec18[((IOTA - 77) & 127)]) + ((0.0028482099999999999 * fVec18[((IOTA - 75) & 127)]) + ((0.00218125 * fVec18[((IOTA - 74) & 127)]) + ((0.00024288000000000001 * fVec18[((IOTA - 71) & 127)]) + ((0.00186575 * fVec18[((IOTA - 70) & 127)]) + ((0.000588187 * fVec18[((IOTA - 66) & 127)]) + ((0.00080033999999999997 * fVec18[((IOTA - 58) & 127)]) + ((2.5690700000000001e-05 * fVec18[((IOTA - 55) & 127)]) + ((0.00113243 * fVec18[((IOTA - 54) & 127)]) + ((0.0016462200000000001 * fVec18[((IOTA - 53) & 127)]) + ((0.00086436100000000012 * fVec18[((IOTA - 51) & 127)]) + ((0.0055766799999999997 * fVec18[((IOTA - 50) & 127)]) + ((0.00392757 * fVec18[((IOTA - 49) & 127)]) + ((0.0028865100000000001 * fVec18[((IOTA - 48) & 127)]) + ((0.0056144999999999997 * fVec18[((IOTA - 47) & 127)]) + ((0.0026402700000000001 * fVec18[((IOTA - 46) & 127)]) + ((0.0042838500000000005 * fVec18[((IOTA - 44) & 127)]) + ((0.0034927700000000001 * fVec18[((IOTA - 43) & 127)]) + ((0.00038527200000000003 * fVec18[((IOTA - 42) & 127)]) + ((0.0065811400000000009 * fVec18[((IOTA - 41) & 127)]) + ((0.0015727 * fVec18[((IOTA - 40) & 127)]) + ((0.0158301 * fVec18[((IOTA - 37) & 127)]) + ((0.027060000000000001 * fVec18[((IOTA - 34) & 127)]) + ((0.0063968899999999997 * fVec18[((IOTA - 31) & 127)]) + ((0.011650000000000001 * fVec18[((IOTA - 30) & 127)]) + ((0.0092220099999999992 * fVec18[((IOTA - 28) & 127)]) + ((0.0078633899999999996 * fVec18[((IOTA - 27) & 127)]) + ((0.029293300000000001 * fVec18[((IOTA - 25) & 127)]) + ((0.0096560400000000012 * fVec18[((IOTA - 24) & 127)]) + ((0.0144406 * fVec18[((IOTA - 22) & 127)]) + ((0.013951100000000001 * fVec18[((IOTA - 21) & 127)]) + ((0.0084374500000000009 * fVec18[((IOTA - 18) & 127)]) + ((0.0039648399999999999 * fVec18[((IOTA - 16) & 127)]) + ((0.0014542699999999999 * fVec18[((IOTA - 13) & 127)]) + ((0.00036303800000000004 * fVec18[((IOTA - 12) & 127)]) + ((0.00064008700000000001 * fVec18[((IOTA - 9) & 127)]) + ((6.501340000000001e-05 * fVec18[((IOTA - 6) & 127)]) + ((0.00011503900000000001 * fVec18[((IOTA - 5) & 127)]) + ((7.4982900000000003e-05 * fVec18[((IOTA - 3) & 127)]) + ((0.0016132899999999999 * fVec18[((IOTA - 85) & 127)]) + ((0.00035920700000000001 * fVec18[((IOTA - 84) & 127)]) + ((5.3978799999999999e-06 * fVec19[((IOTA - 125) & 127)]) + ((7.9125199999999989e-06 * fVec19[((IOTA - 124) & 127)]) + ((8.4929499999999997e-06 * fVec19[((IOTA - 123) & 127)]) + ((1.1654000000000001e-05 * fVec19[((IOTA - 122) & 127)]) + ((5.1085100000000003e-05 * fVec19[((IOTA - 121) & 127)]) + ((6.8685100000000004e-05 * fVec19[((IOTA - 120) & 127)]) + ((3.2896299999999998e-06 * fVec19[((IOTA - 119) & 127)]) + ((1.41509e-05 * fVec19[((IOTA - 118) & 127)]) + ((1.6980200000000004e-05 * fVec19[((IOTA - 117) & 127)]) + ((3.2223700000000001e-05 * fVec19[((IOTA - 116) & 127)]) + ((5.8471100000000003e-05 * fVec19[((IOTA - 115) & 127)]) + ((0.00010523700000000001 * fVec19[((IOTA - 114) & 127)]) + ((0.00013697000000000001 * fVec19[((IOTA - 113) & 127)]) + ((0.00010184400000000001 * fVec19[((IOTA - 112) & 127)]) + ((3.2479200000000006e-05 * fVec19[((IOTA - 104) & 127)]) + ((7.9775300000000009e-05 * fVec19[((IOTA - 103) & 127)]) + ((0.00031580000000000003 * fVec18[((IOTA - 82) & 127)]) + ((0.000178013 * fVec19[((IOTA - 97) & 127)]) + ((0.00096584900000000007 * fVec19[((IOTA - 96) & 127)]) + ((0.00013887600000000002 * fVec19[((IOTA - 95) & 127)]) + ((0.00019982600000000001 * fVec19[((IOTA - 92) & 127)]) + ((0.00031649800000000002 * fVec19[((IOTA - 89) & 127)]) + ((0.00037059799999999998 * fVec19[((IOTA - 88) & 127)]) + ((0.0012454300000000001 * fVec19[((IOTA - 87) & 127)]) + ((0.00084652999999999996 * fVec19[((IOTA - 86) & 127)]) + ((0.00049063800000000005 * fVec19[((IOTA - 82) & 127)]) + ((0.0013326899999999999 * fVec19[((IOTA - 79) & 127)]) + ((0.00140716 * fVec19[((IOTA - 78) & 127)]) + ((0.00036433400000000001 * fVec19[((IOTA - 77) & 127)]) + ((0.001299 * fVec19[((IOTA - 75) & 127)]) + ((0.0033552399999999998 * fVec19[((IOTA - 74) & 127)]) + ((0.00067232300000000006 * fVec19[((IOTA - 73) & 127)]) + ((0.000145224 * fVec19[((IOTA - 72) & 127)]) + ((0.00118198 * fVec19[((IOTA - 69) & 127)]) + ((0.0029169900000000004 * fVec19[((IOTA - 68) & 127)]) + ((0.000641773 * fVec19[((IOTA - 63) & 127)]) + ((0.0019041500000000001 * fVec19[((IOTA - 62) & 127)]) + ((0.0020271300000000003 * fVec19[((IOTA - 58) & 127)]) + ((0.0058685200000000003 * fVec19[((IOTA - 50) & 127)]) + ((0.0061875000000000003 * fVec19[((IOTA - 49) & 127)]) + ((0.0086182900000000007 * fVec19[((IOTA - 48) & 127)]) + ((0.0051318099999999997 * fVec19[((IOTA - 47) & 127)]) + ((0.00066500800000000003 * fVec19[((IOTA - 46) & 127)]) + ((0.0054012200000000008 * fVec19[((IOTA - 45) & 127)]) + ((0.0077257100000000002 * fVec19[((IOTA - 44) & 127)]) + ((0.0049702700000000006 * fVec19[((IOTA - 43) & 127)]) + ((0.0075730000000000007 * fVec19[((IOTA - 42) & 127)]) + ((0.0060422599999999998 * fVec19[((IOTA - 41) & 127)]) + ((0.0027149600000000002 * fVec19[((IOTA - 39) & 127)]) + ((0.00081970899999999995 * fVec19[((IOTA - 38) & 127)]) + ((5.1858400000000005e-05 * fVec19[((IOTA - 36) & 127)]) + ((0.0045739400000000003 * fVec19[((IOTA - 35) & 127)]) + ((0.00060354400000000002 * fVec19[((IOTA - 31) & 127)]) + ((0.0126207 * fVec19[((IOTA - 18) & 127)]) + ((0.015590100000000001 * fVec19[((IOTA - 17) & 127)]) + ((0.027497799999999999 * fVec19[((IOTA - 15) & 127)]) + ((0.019302299999999998 * fVec19[((IOTA - 14) & 127)]) + ((0.044481599999999996 * fVec19[((IOTA - 13) & 127)]) + ((0.042276800000000003 * fVec19[((IOTA - 12) & 127)]) + ((0.0021177600000000002 * fVec19[((IOTA - 11) & 127)]) + ((0.00027291300000000001 * fVec19[((IOTA - 9) & 127)]) + ((6.1550000000000005e-05 * fVec19[((IOTA - 8) & 127)]) + ((0.000175224 * fVec19[((IOTA - 5) & 127)]) + ((0.00022650199999999998 * fVec19[((IOTA - 4) & 127)]) + ((5.7022700000000005e-05 * fVec19[((IOTA - 3) & 127)]) + ((2.0383200000000002e-05 * fVec19[((IOTA - 1) & 127)]) + ((4.9413399999999999e-06 * fTemp19) + ((0.0037510500000000001 * fVec19[((IOTA - 57) & 127)]) + ((0.0046006600000000003 * fVec19[((IOTA - 56) & 127)]) + ((0.0050914999999999997 * fVec19[((IOTA - 55) & 127)]) + ((0.0044053800000000004 * fVec19[((IOTA - 54) & 127)]) + ((0.0011063700000000002 * fVec19[((IOTA - 53) & 127)]) + ((5.7104899999999999e-06 * fVec20[((IOTA - 125) & 127)]) + ((0.0019731900000000001 * fVec19[((IOTA - 52) & 127)]) + ((1.32724e-05 * fVec20[((IOTA - 124) & 127)]) + ((2.9137400000000003e-05 * fVec20[((IOTA - 119) & 127)]) + ((0.0069039700000000006 * fVec19[((IOTA - 51) & 127)]) + ((0.00015924 * fVec20[((IOTA - 116) & 127)]) + ((7.6537400000000003e-05 * fVec20[((IOTA - 115) & 127)]) + ((6.5009300000000008e-05 * fVec20[((IOTA - 114) & 127)]) + ((3.6292700000000006e-05 * fVec20[((IOTA - 113) & 127)]) + ((2.5843400000000004e-05 * fVec20[((IOTA - 112) & 127)]) + ((0.00024267500000000003 * fVec20[((IOTA - 111) & 127)]) + ((0.00031903100000000006 * fVec20[((IOTA - 109) & 127)]) + ((0.00039582199999999999 * fVec20[((IOTA - 108) & 127)]) + ((0.00027277099999999999 * fVec20[((IOTA - 107) & 127)]) + ((0.00092367899999999995 * fVec20[((IOTA - 106) & 127)]) + ((0.0007145500000000001 * fVec20[((IOTA - 105) & 127)]) + ((0.000964846 * fVec20[((IOTA - 104) & 127)]) + ((0.0012146699999999999 * fVec20[((IOTA - 103) & 127)]) + ((0.00057145600000000003 * fVec20[((IOTA - 102) & 127)]) + ((0.00054242299999999999 * fVec20[((IOTA - 101) & 127)]) + ((0.00061493000000000008 * fVec20[((IOTA - 100) & 127)]) + ((0.0012203400000000001 * fVec20[((IOTA - 99) & 127)]) + ((0.0011941500000000002 * fVec20[((IOTA - 98) & 127)]) + ((0.00106711 * fVec20[((IOTA - 97) & 127)]) + ((0.00308618 * fVec20[((IOTA - 96) & 127)]) + ((0.0032894199999999999 * fVec20[((IOTA - 95) & 127)]) + ((0.00149796 * fVec20[((IOTA - 94) & 127)]) + ((0.00068249900000000004 * fVec20[((IOTA - 93) & 127)]) + ((0.00078510099999999996 * fVec20[((IOTA - 91) & 127)]) + ((0.00096550100000000012 * fVec20[((IOTA - 90) & 127)]) + ((0.00058387599999999999 * fVec20[((IOTA - 89) & 127)]) + ((0.0013118799999999999 * fVec20[((IOTA - 88) & 127)]) + ((0.0027314400000000003 * fVec20[((IOTA - 87) & 127)]) + ((0.0031734000000000003 * fVec20[((IOTA - 86) & 127)]) + ((0.0023903100000000001 * fVec20[((IOTA - 85) & 127)]) + ((0.0025833200000000001 * fVec20[((IOTA - 84) & 127)]) + ((0.00058356200000000003 * fVec20[((IOTA - 83) & 127)]) + ((1.7606500000000002e-05 * fVec20[((IOTA - 77) & 127)]) + ((0.0017979000000000001 * fVec20[((IOTA - 75) & 127)]) + ((0.00191797 * fVec20[((IOTA - 74) & 127)]) + ((0.00034747700000000001 * fVec20[((IOTA - 73) & 127)]) + ((0.000544179 * fVec20[((IOTA - 67) & 127)]) + ((5.63033e-05 * fVec20[((IOTA - 65) & 127)]) + ((0.0011524899999999999 * fVec20[((IOTA - 62) & 127)]) + ((0.00156606 * fVec20[((IOTA - 55) & 127)]) + ((0.0015830800000000002 * fVec20[((IOTA - 54) & 127)]) + ((0.0017704200000000002 * fVec20[((IOTA - 50) & 127)]) + ((0.0019330199999999999 * fVec20[((IOTA - 49) & 127)]) + ((0.00266146 * fVec20[((IOTA - 46) & 127)]) + ((0.0011897800000000001 * fVec20[((IOTA - 45) & 127)]) + ((0.00307881 * fVec20[((IOTA - 42) & 127)]) + ((0.0024114100000000001 * fVec20[((IOTA - 41) & 127)]) + ((0.0026392099999999999 * fVec20[((IOTA - 40) & 127)]) + ((0.00380796 * fVec20[((IOTA - 39) & 127)]) + ((0.000320157 * fVec20[((IOTA - 38) & 127)]) + ((0.00022045699999999999 * fVec20[((IOTA - 37) & 127)]) + ((0.0020659800000000002 * fVec20[((IOTA - 36) & 127)]) + ((0.0049689600000000006 * fVec20[((IOTA - 34) & 127)]) + ((0.00033950300000000006 * fVec20[((IOTA - 11) & 127)]) + ((0.00046365600000000006 * fVec20[((IOTA - 9) & 127)]) + ((0.0019217200000000002 * fVec20[((IOTA - 8) & 127)]) + ((0.00055710700000000004 * fVec20[((IOTA - 6) & 127)]) + ((0.00078591400000000008 * fVec20[((IOTA - 5) & 127)]) + ((0.00067488200000000002 * fVec20[((IOTA - 4) & 127)]) + ((0.00020588500000000003 * fVec20[((IOTA - 2) & 127)]) + ((3.4700500000000004e-05 * fVec20[((IOTA - 1) & 127)]) + ((1.2413700000000001e-05 * fTemp20) + ((0.0161706 * fVec20[((IOTA - 22) & 127)]) + ((0.026332300000000003 * fVec20[((IOTA - 21) & 127)]) + ((0.0079993000000000009 * fVec20[((IOTA - 20) & 127)]) + ((0.0075314300000000004 * fVec20[((IOTA - 33) & 127)]) + ((0.0022648999999999998 * fVec20[((IOTA - 31) & 127)]) + ((0.00801492 * fVec20[((IOTA - 30) & 127)]) + ((0.0110397 * fVec20[((IOTA - 29) & 127)]) + ((0.0010152000000000002 * fVec20[((IOTA - 28) & 127)]) + ((0.00287375 * fVec20[((IOTA - 26) & 127)]) + ((0.00082163500000000003 * fVec20[((IOTA - 18) & 127)]) + ((0.035125400000000001 * fVec20[((IOTA - 17) & 127)]) + ((4.8744899999999996e-07 * fVec21[((IOTA - 126) & 127)]) + ((3.5255099999999998e-06 * fVec21[((IOTA - 125) & 127)]) + ((3.2621699999999995e-06 * fVec21[((IOTA - 124) & 127)]) + ((4.06072e-05 * fVec21[((IOTA - 121) & 127)]) + ((6.3317800000000006e-05 * fVec21[((IOTA - 120) & 127)]) + ((3.5918100000000004e-05 * fVec21[((IOTA - 119) & 127)]) + (((2.5941400000000002e-05 * fVec21[((IOTA - 117) & 127)]) + ((8.6548500000000007e-05 * fVec21[((IOTA - 116) & 127)]) + ((5.5551700000000006e-05 * fVec21[((IOTA - 115) & 127)]) + ((3.6866300000000003e-05 * fVec21[((IOTA - 114) & 127)]) + ((4.2405400000000006e-05 * fVec21[((IOTA - 113) & 127)]) + ((8.1096800000000013e-05 * fVec21[((IOTA - 112) & 127)]) + ((4.85157e-05 * fVec21[((IOTA - 111) & 127)]) + ((7.4248300000000005e-05 * fVec21[((IOTA - 110) & 127)]) + ((6.1852800000000005e-05 * fVec21[((IOTA - 107) & 127)]) + ((0.00033669 * fVec21[((IOTA - 106) & 127)]) + ((0.00035192300000000003 * fVec21[((IOTA - 105) & 127)]) + ((0.000181368 * fVec21[((IOTA - 102) & 127)]) + ((5.5010100000000004e-05 * fVec21[((IOTA - 99) & 127)]) + ((0.000181872 * fVec21[((IOTA - 95) & 127)]) + ((0.0012472700000000002 * fVec21[((IOTA - 94) & 127)]) + ((0.0012369000000000002 * fVec21[((IOTA - 93) & 127)]) + ((0.00084541900000000014 * fVec21[((IOTA - 88) & 127)]) + ((0.00030825999999999998 * fVec21[((IOTA - 87) & 127)]) + ((0.000991956 * fVec21[((IOTA - 86) & 127)]) + ((0.00039449500000000002 * fVec21[((IOTA - 83) & 127)]) + ((0.00042647700000000008 * fVec21[((IOTA - 78) & 127)]) + ((0.00098188600000000017 * fVec21[((IOTA - 76) & 127)]) + ((0.00076287399999999997 * fVec21[((IOTA - 75) & 127)]) + ((0.00019696800000000003 * fVec21[((IOTA - 73) & 127)]) + ((0.00026003500000000004 * fVec21[((IOTA - 72) & 127)]) + ((0.000162845 * fVec21[((IOTA - 68) & 127)]) + ((0.000175864 * fVec21[((IOTA - 65) & 127)]) + ((0.00122741 * fVec21[((IOTA - 62) & 127)]) + ((0.00051085000000000008 * fVec21[((IOTA - 60) & 127)]) + ((0.000469171 * fVec21[((IOTA - 52) & 127)]) + ((0.0048162999999999999 * fVec21[((IOTA - 50) & 127)]) + ((0.0040944599999999994 * fVec21[((IOTA - 49) & 127)]) + ((0.0041798500000000006 * fVec21[((IOTA - 46) & 127)]) + ((0.0073487099999999996 * fVec21[((IOTA - 45) & 127)]) + ((0.0047594300000000003 * fVec21[((IOTA - 44) & 127)]) + ((0.00164357 * fVec21[((IOTA - 41) & 127)]) + ((0.0066234300000000005 * fVec21[((IOTA - 40) & 127)]) + ((0.0107364 * fVec21[((IOTA - 39) & 127)]) + ((0.0021625699999999999 * fVec21[((IOTA - 38) & 127)]) + ((0.00078494800000000005 * fVec21[((IOTA - 37) & 127)]) + ((0.008554550000000001 * fVec21[((IOTA - 36) & 127)]) + ((0.0087573399999999989 * fVec21[((IOTA - 35) & 127)]) + ((0.0022028300000000002 * fVec21[((IOTA - 32) & 127)]) + ((0.026865800000000002 * fVec21[((IOTA - 31) & 127)]) + ((0.0066563000000000004 * fVec21[((IOTA - 27) & 127)]) + ((0.0173968 * fVec21[((IOTA - 26) & 127)]) + ((0.0065755600000000003 * fVec21[((IOTA - 22) & 127)]) + ((0.044476699999999994 * fVec21[((IOTA - 18) & 127)]) + ((0.019425600000000001 * fVec21[((IOTA - 17) & 127)]) + ((0.0258357 * fVec21[((IOTA - 15) & 127)]) + ((0.00505303 * fVec21[((IOTA - 13) & 127)]) + ((0.00065851199999999999 * fVec21[((IOTA - 10) & 127)]) + ((6.4017400000000008e-05 * fVec21[((IOTA - 9) & 127)]) + ((0.00033249800000000003 * fVec21[((IOTA - 8) & 127)]) + ((0.00114682 * fVec21[((IOTA - 6) & 127)]) + ((0.00043610699999999998 * fVec21[((IOTA - 4) & 127)]) + ((0.000204336 * fVec21[((IOTA - 2) & 127)]) + ((2.2571e-06 * fVec21[((IOTA - 1) & 127)]) + ((1.2883700000000002e-05 * fTemp21) + ((0.0042857099999999999 * fVec21[((IOTA - 59) & 127)]) + ((0.0037509800000000001 * fVec21[((IOTA - 58) & 127)]) + ((7.4329200000000013e-05 * fVec22[((IOTA - 115) & 127)]) + ((0.00029377599999999999 * fVec22[((IOTA - 114) & 127)]) + ((0.000280439 * fVec22[((IOTA - 113) & 127)]) + ((0.00052814500000000005 * fVec22[((IOTA - 110) & 127)]) + ((0.00070229999999999999 * fVec22[((IOTA - 109) & 127)]) + ((0.00080632699999999991 * fVec22[((IOTA - 108) & 127)]) + ((0.000643591 * fVec22[((IOTA - 107) & 127)]) + ((0.00081294000000000006 * fVec22[((IOTA - 106) & 127)]) + ((0.00082950500000000002 * fVec22[((IOTA - 105) & 127)]) + ((0.00023107600000000004 * fVec22[((IOTA - 104) & 127)]) + ((0.00064061300000000005 * fVec22[((IOTA - 103) & 127)]) + ((0.00091664000000000003 * fVec22[((IOTA - 102) & 127)]) + ((0.00073955600000000005 * fVec22[((IOTA - 101) & 127)]) + ((0.00059890600000000007 * fVec22[((IOTA - 100) & 127)]) + ((0.0013073099999999999 * fVec22[((IOTA - 99) & 127)]) + ((0.0027768799999999998 * fVec22[((IOTA - 98) & 127)]) + ((0.00040949500000000001 * fVec22[((IOTA - 97) & 127)]) + ((0.00145302 * fVec22[((IOTA - 94) & 127)]) + (((0.0022861500000000002 * fVec22[((IOTA - 93) & 127)]) + ((0.001377 * fVec22[((IOTA - 90) & 127)]) + ((0.0017080400000000001 * fVec22[((IOTA - 89) & 127)]) + ((0.00016274 * fVec22[((IOTA - 83) & 127)]) + ((0.0027307400000000002 * fVec22[((IOTA - 82) & 127)]) + ((0.0028667500000000004 * fVec22[((IOTA - 81) & 127)]) + ((0.0011399600000000002 * fVec22[((IOTA - 80) & 127)]) + ((0.00110995 * fVec22[((IOTA - 79) & 127)]) + ((0.00124602 * fVec22[((IOTA - 78) & 127)]) + ((0.00129805 * fVec22[((IOTA - 77) & 127)]) + ((0.00100318 * fVec22[((IOTA - 76) & 127)]) + ((0.0022987899999999998 * fVec22[((IOTA - 75) & 127)]) + ((0.0019049100000000001 * fVec22[((IOTA - 74) & 127)]) + ((0.00059075000000000002 * fVec22[((IOTA - 73) & 127)]) + ((0.00103864 * fVec22[((IOTA - 72) & 127)]) + ((0.0013787300000000001 * fVec22[((IOTA - 71) & 127)]) + ((0.00181733 * fVec22[((IOTA - 70) & 127)]) + ((0.00293582 * fVec22[((IOTA - 69) & 127)]) + ((0.0023355800000000003 * fVec22[((IOTA - 68) & 127)]) + ((0.0011070699999999999 * fVec22[((IOTA - 67) & 127)]) + ((0.00050953999999999995 * fVec22[((IOTA - 66) & 127)]) + ((0.00044511000000000003 * fVec22[((IOTA - 65) & 127)]) + ((0.0038312400000000001 * fVec22[((IOTA - 61) & 127)]) + ((0.0016638 * fVec22[((IOTA - 60) & 127)]) + ((0.0043739400000000006 * fVec22[((IOTA - 48) & 127)]) + ((0.0013932899999999999 * fVec22[((IOTA - 45) & 127)]) + ((0.0106382 * fVec22[((IOTA - 41) & 127)]) + ((0.0043469900000000002 * fVec22[((IOTA - 40) & 127)]) + ((0.0015759000000000001 * fVec22[((IOTA - 37) & 127)]) + ((0.0073185999999999998 * fVec22[((IOTA - 36) & 127)]) + ((0.0045973800000000007 * fVec22[((IOTA - 35) & 127)]) + ((0.013183400000000001 * fVec22[((IOTA - 33) & 127)]) + ((0.028645500000000001 * fVec22[((IOTA - 32) & 127)]) + ((0.0092487699999999999 * fVec22[((IOTA - 29) & 127)]) + ((0.039121700000000002 * fVec22[((IOTA - 28) & 127)]) + ((0.00144425 * fVec22[((IOTA - 27) & 127)]) + ((0.000216524 * fVec22[((IOTA - 11) & 127)]) + ((0.00050577300000000005 * fVec22[((IOTA - 7) & 127)]) + ((0.00019702400000000002 * fVec22[((IOTA - 5) & 127)]) + ((6.4290300000000003e-05 * fVec22[((IOTA - 3) & 127)]) + ((0.0060285 * fVec22[((IOTA - 25) & 127)]) + ((0.057524800000000001 * fVec22[((IOTA - 24) & 127)]) + ((0.021570599999999999 * fVec22[((IOTA - 21) & 127)]) + ((0.0014793400000000002 * fVec22[((IOTA - 20) & 127)]) + ((0.0043988899999999999 * fVec22[((IOTA - 19) & 127)]) + ((0.0073680199999999994 * fVec22[((IOTA - 16) & 127)]) + ((0.00058021900000000009 * fVec22[((IOTA - 14) & 127)]) + ((7.8904099999999995e-07 * fVec23[((IOTA - 118) & 127)]) + ((5.1851200000000009e-05 * fVec23[((IOTA - 117) & 127)]) + ((3.48346e-05 * fVec23[((IOTA - 116) & 127)]) + (((0.000263489 * fVec23[((IOTA - 113) & 127)]) + ((0.00048678400000000003 * fVec23[((IOTA - 112) & 127)]) + ((0.00066577900000000002 * fVec23[((IOTA - 111) & 127)]) + ((0.00072508600000000011 * fVec23[((IOTA - 110) & 127)]) + ((0.00094771800000000006 * fVec23[((IOTA - 109) & 127)]) + ((0.00085589900000000003 * fVec23[((IOTA - 108) & 127)]) + ((0.00097958799999999999 * fVec23[((IOTA - 107) & 127)]) + ((0.00110553 * fVec23[((IOTA - 106) & 127)]) + ((0.00082826600000000003 * fVec23[((IOTA - 105) & 127)]) + ((0.0013655500000000001 * fVec23[((IOTA - 104) & 127)]) + ((0.0018638400000000001 * fVec23[((IOTA - 103) & 127)]) + ((0.0016748900000000001 * fVec23[((IOTA - 102) & 127)]) + ((0.0013615999999999999 * fVec23[((IOTA - 101) & 127)]) + ((0.00120272 * fVec23[((IOTA - 100) & 127)]) + ((0.00103053 * fVec23[((IOTA - 99) & 127)]) + ((0.00040302800000000005 * fVec23[((IOTA - 98) & 127)]) + ((0.0012814900000000001 * fVec23[((IOTA - 97) & 127)]) + ((0.0015273399999999999 * fVec23[((IOTA - 96) & 127)]) + ((0.00046550599999999997 * fVec23[((IOTA - 95) & 127)]) + ((0.00038473700000000001 * fVec23[((IOTA - 94) & 127)]) + ((0.0010250300000000001 * fVec23[((IOTA - 93) & 127)]) + ((0.0011346700000000002 * fVec23[((IOTA - 92) & 127)]) + ((0.00043984100000000006 * fVec23[((IOTA - 85) & 127)]) + ((0.00021673800000000001 * fVec23[((IOTA - 84) & 127)]) + ((2.74177e-05 * fVec23[((IOTA - 82) & 127)]) + ((0.0010960700000000002 * fVec23[((IOTA - 77) & 127)]) + ((0.0013700399999999999 * fVec23[((IOTA - 73) & 127)]) + ((0.0030635300000000001 * fVec23[((IOTA - 72) & 127)]) + ((0.0019637600000000002 * fVec23[((IOTA - 71) & 127)]) + ((0.0018260300000000002 * fVec23[((IOTA - 70) & 127)]) + ((0.00238017 * fVec23[((IOTA - 69) & 127)]) + ((0.0031654200000000004 * fVec23[((IOTA - 68) & 127)]) + ((0.00275033 * fVec23[((IOTA - 67) & 127)]) + ((0.0016457800000000001 * fVec23[((IOTA - 66) & 127)]) + ((0.0025982900000000001 * fVec23[((IOTA - 65) & 127)]) + ((0.0013408299999999999 * fVec23[((IOTA - 64) & 127)]) + ((0.00068048499999999999 * fVec23[((IOTA - 60) & 127)]) + ((0.00122218 * fVec23[((IOTA - 59) & 127)]) + ((0.00152893 * fVec23[((IOTA - 58) & 127)]) + ((0.0022063899999999999 * fVec23[((IOTA - 57) & 127)]) + ((0.00078379700000000003 * fVec23[((IOTA - 56) & 127)]) + ((0.00022987799999999998 * fVec23[((IOTA - 52) & 127)]) + ((0.00078511300000000004 * fVec23[((IOTA - 51) & 127)]) + ((0.0012260999999999999 * fVec23[((IOTA - 45) & 127)]) + ((0.0026344099999999998 * fVec23[((IOTA - 44) & 127)]) + ((0.011467400000000001 * fVec23[((IOTA - 38) & 127)]) + ((0.0078678299999999993 * fVec23[((IOTA - 37) & 127)]) + ((0.0013363100000000001 * fVec23[((IOTA - 34) & 127)]) + ((0.0089890100000000004 * fVec23[((IOTA - 32) & 127)]) + ((0.0143689 * fVec23[((IOTA - 31) & 127)]) + ((0.0049334100000000001 * fVec23[((IOTA - 30) & 127)]) + ((0.019686699999999998 * fVec23[((IOTA - 27) & 127)]) + ((0.0086390499999999988 * fVec23[((IOTA - 25) & 127)]) + ((0.043355600000000001 * fVec23[((IOTA - 19) & 127)]) + ((0.00249322 * fVec23[((IOTA - 18) & 127)]) + ((0.0141169 * fVec23[((IOTA - 16) & 127)]) + ((0.0111431 * fVec23[((IOTA - 15) & 127)]) + ((0.0018486100000000001 * fVec23[((IOTA - 14) & 127)]) + ((0.000976993 * fVec23[((IOTA - 13) & 127)]) + ((0.0056459800000000001 * fVec23[((IOTA - 12) & 127)]) + ((0.00021246900000000004 * fVec23[((IOTA - 11) & 127)]) + ((0.00095016999999999996 * fVec23[((IOTA - 10) & 127)]) + ((0.0010622000000000001 * fVec23[((IOTA - 7) & 127)]) + ((0.00024919200000000002 * fVec23[((IOTA - 6) & 127)]) + ((0.00027049600000000001 * fVec23[((IOTA - 3) & 127)]) + ((5.1123399999999996e-06 * fVec23[((IOTA - 2) & 127)]) + ((3.7580000000000003e-05 * fVec23[((IOTA - 1) & 127)]) + ((1.0426200000000002e-05 * fTemp23) + ((2.5019199999999998e-06 * fVec9[((IOTA - 120) & 127)]) + (((0.00015476800000000001 * fVec9[((IOTA - 107) & 127)]) + ((2.3801800000000003e-05 * fVec9[((IOTA - 106) & 127)]) + ((0.00041578400000000004 * fVec9[((IOTA - 105) & 127)]) + ((0.00040693400000000007 * fVec9[((IOTA - 104) & 127)]) + ((0.00042180200000000004 * fVec9[((IOTA - 103) & 127)]) + ((0.00064933700000000005 * fVec9[((IOTA - 102) & 127)]) + ((0.0010572399999999999 * fVec9[((IOTA - 101) & 127)]) + ((0.00096599000000000012 * fVec9[((IOTA - 100) & 127)]) + ((0.00077855999999999997 * fVec9[((IOTA - 99) & 127)]) + ((0.00073777800000000002 * fVec9[((IOTA - 98) & 127)]) + ((0.00065036 * fVec9[((IOTA - 97) & 127)]) + ((0.00069698000000000004 * fVec9[((IOTA - 96) & 127)]) + ((0.0013956400000000001 * fVec9[((IOTA - 95) & 127)]) + ((0.0020596199999999999 * fVec9[((IOTA - 94) & 127)]) + ((0.0017169000000000002 * fVec9[((IOTA - 93) & 127)]) + ((0.0012716300000000002 * fVec9[((IOTA - 92) & 127)]) + ((0.00130908 * fVec9[((IOTA - 91) & 127)]) + ((0.00161012 * fVec9[((IOTA - 88) & 127)]) + ((0.0016711600000000001 * fVec9[((IOTA - 87) & 127)]) + ((0.00075290600000000002 * fVec9[((IOTA - 86) & 127)]) + ((0.00144013 * fVec9[((IOTA - 85) & 127)]) + ((0.0021273399999999997 * fVec9[((IOTA - 84) & 127)]) + ((0.00061597300000000002 * fVec9[((IOTA - 83) & 127)]) + ((0.00011313 * fVec9[((IOTA - 81) & 127)]) + ((0.0017438199999999999 * fVec9[((IOTA - 80) & 127)]) + ((0.0024799100000000001 * fVec9[((IOTA - 79) & 127)]) + ((0.00256507 * fVec9[((IOTA - 78) & 127)]) + ((0.0011552999999999999 * fVec9[((IOTA - 75) & 127)]) + ((0.00098456699999999999 * fVec9[((IOTA - 74) & 127)]) + ((0.000597807 * fVec9[((IOTA - 73) & 127)]) + ((0.0018893200000000001 * fVec9[((IOTA - 72) & 127)]) + ((0.00092920600000000002 * fVec9[((IOTA - 23) & 127)]) + ((0.080136100000000002 * fVec9[((IOTA - 22) & 127)]) + ((0.041393800000000001 * fVec9[((IOTA - 21) & 127)]) + ((0.042661300000000006 * fVec9[((IOTA - 20) & 127)]) + ((0.0088175100000000006 * fVec9[((IOTA - 19) & 127)]) + ((0.053196100000000003 * fVec9[((IOTA - 18) & 127)]) + ((0.097787600000000002 * fVec9[((IOTA - 17) & 127)]) + ((0.040092800000000005 * fVec9[((IOTA - 16) & 127)]) + ((0.077296500000000004 * fVec9[((IOTA - 15) & 127)]) + ((0.064767000000000005 * fVec9[((IOTA - 14) & 127)]) + ((0.082935599999999998 * fVec9[((IOTA - 13) & 127)]) + ((0.078489900000000001 * fVec9[((IOTA - 12) & 127)]) + ((0.00067357800000000009 * fVec9[((IOTA - 11) & 127)]) + ((0.00149621 * fVec9[((IOTA - 10) & 127)]) + ((0.00072128000000000003 * fVec9[((IOTA - 9) & 127)]) + ((0.00101019 * fVec9[((IOTA - 8) & 127)]) + ((0.000453602 * fVec9[((IOTA - 7) & 127)]) + ((0.00042969900000000002 * fVec9[((IOTA - 6) & 127)]) + ((0.0010723199999999999 * fVec9[((IOTA - 5) & 127)]) + ((0.00084950300000000004 * fVec9[((IOTA - 4) & 127)]) + ((0.00085153200000000001 * fVec9[((IOTA - 3) & 127)]) + ((0.00015027000000000001 * fVec9[((IOTA - 1) & 127)]) + (((((((((((((((((0.00016075400000000001 * fVec24[((IOTA - 2) & 127)]) + (0.021295600000000001 * fVec24[((IOTA - 24) & 127)])) + (0.0029395300000000001 * fVec24[((IOTA - 32) & 127)])) + (0.00092078700000000006 * fVec24[((IOTA - 44) & 127)])) + (0.00063317100000000008 * fVec24[((IOTA - 57) & 127)])) + (0.00036222200000000004 * fVec24[((IOTA - 69) & 127)])) + (0.000687957 * fVec24[((IOTA - 82) & 127)])) + (0.00087519700000000008 * fVec24[((IOTA - 89) & 127)])) + (0.000611186 * fVec24[((IOTA - 90) & 127)])) + (1.7742000000000001e-05 * fVec24[((IOTA - 91) & 127)])) + (0.00196204 * fVec24[((IOTA - 92) & 127)])) + (0.0023706000000000001 * fVec24[((IOTA - 93) & 127)])) + (9.940880000000001e-05 * fVec24[((IOTA - 94) & 127)])) + (0.00047365100000000001 * fVec24[((IOTA - 97) & 127)])) + (0.00048385000000000002 * fVec24[((IOTA - 98) & 127)])) + (1.47262e-06 * fVec24[((IOTA - 122) & 127)])) + (2.4709800000000002e-05 * fTemp9))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0038961999999999998 * fVec23[((IOTA - 39) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0037306700000000002 * fVec22[((IOTA - 12) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0013037700000000001 * fVec21[((IOTA - 57) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0032833199999999997 * fVec20[((IOTA - 14) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0010645800000000001 * fVec1[((IOTA - 54) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0069054599999999995 * fVec0[((IOTA - 33) & 127)]))))))))))))))))))))))))))) + (5.3508699999999998e-05 * fVec0[((IOTA - 1) & 127)])) + (0.000365476 * fVec0[((IOTA - 2) & 127)])) + (0.00024512500000000001 * fVec0[((IOTA - 3) & 127)])) + (0.00087751800000000009 * fVec0[((IOTA - 6) & 127)])) + (0.0019139999999999999 * fVec0[((IOTA - 10) & 127)])) + (0.058634600000000002 * fVec0[((IOTA - 15) & 127)])) + (0.066181599999999993 * fVec0[((IOTA - 16) & 127)])) + (0.023976299999999999 * fVec0[((IOTA - 17) & 127)])) + (0.043427500000000001 * fVec0[((IOTA - 18) & 127)])) + (0.023037200000000004 * fVec0[((IOTA - 19) & 127)])) + (0.00437594 * fVec0[((IOTA - 24) & 127)])) + (0.0069729000000000006 * fVec0[((IOTA - 28) & 127)])) + (0.0082814200000000011 * fVec0[((IOTA - 29) & 127)])) + (0.0090924899999999999 * fVec0[((IOTA - 31) & 127)])) + (0.014528600000000001 * fVec0[((IOTA - 32) & 127)]))))))))))))))))))))); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fHbargraph1 = FAUSTFLOAT(fRec28[0]); + output1[i] = FAUSTFLOAT(fTemp26); + fRec1[1] = fRec1[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + IOTA = (IOTA + 1); + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec0[1] = fRec0[0]; + fRec28[1] = fRec28[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOADecBinaural5.cpp b/source/HOAUGens/HOADecBinaural5.cpp new file mode 100644 index 0000000000..267ea62a92 --- /dev/null +++ b/source/HOAUGens/HOADecBinaural5.cpp @@ -0,0 +1,2071 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL)" +name: "HOADecBinaural5" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + int fSamplingFreq; + double fConst0; + FAUSTFLOAT fVslider0; + double fRec1[2]; + FAUSTFLOAT fVslider1; + double fRec3[2]; + double fRec2[2]; + FAUSTFLOAT fVbargraph0; + int IOTA; + double fVec0[128]; + double fRec4[2]; + FAUSTFLOAT fVbargraph1; + double fVec1[128]; + double fRec5[2]; + FAUSTFLOAT fVbargraph2; + double fVec2[128]; + double fRec6[2]; + FAUSTFLOAT fVbargraph3; + double fVec3[128]; + double fRec7[2]; + FAUSTFLOAT fVbargraph4; + double fVec4[128]; + double fRec8[2]; + FAUSTFLOAT fVbargraph5; + double fVec5[128]; + double fRec9[2]; + FAUSTFLOAT fVbargraph6; + double fVec6[128]; + double fRec10[2]; + FAUSTFLOAT fVbargraph7; + double fVec7[128]; + double fRec11[2]; + FAUSTFLOAT fVbargraph8; + double fVec8[128]; + double fRec12[2]; + FAUSTFLOAT fVbargraph9; + double fVec9[128]; + double fRec13[2]; + FAUSTFLOAT fVbargraph10; + double fVec10[128]; + double fRec14[2]; + FAUSTFLOAT fVbargraph11; + double fVec11[128]; + double fRec15[2]; + FAUSTFLOAT fVbargraph12; + double fVec12[128]; + double fRec16[2]; + FAUSTFLOAT fVbargraph13; + double fVec13[128]; + double fRec17[2]; + FAUSTFLOAT fVbargraph14; + double fVec14[128]; + double fRec18[2]; + FAUSTFLOAT fVbargraph15; + double fVec15[128]; + double fRec19[2]; + FAUSTFLOAT fVbargraph16; + double fVec16[128]; + double fRec20[2]; + FAUSTFLOAT fVbargraph17; + double fVec17[128]; + double fRec21[2]; + FAUSTFLOAT fVbargraph18; + double fVec18[128]; + double fRec22[2]; + FAUSTFLOAT fVbargraph19; + double fVec19[128]; + double fRec23[2]; + FAUSTFLOAT fVbargraph20; + double fVec20[128]; + double fRec24[2]; + FAUSTFLOAT fVbargraph21; + double fVec21[128]; + double fRec25[2]; + FAUSTFLOAT fVbargraph22; + double fVec22[128]; + double fRec26[2]; + FAUSTFLOAT fVbargraph23; + double fVec23[128]; + double fRec27[2]; + FAUSTFLOAT fVbargraph24; + double fVec24[128]; + double fRec28[2]; + FAUSTFLOAT fVbargraph25; + double fVec25[128]; + double fRec29[2]; + FAUSTFLOAT fVbargraph26; + double fVec26[128]; + double fRec30[2]; + FAUSTFLOAT fVbargraph27; + double fVec27[128]; + double fRec31[2]; + FAUSTFLOAT fVbargraph28; + double fVec28[128]; + double fRec32[2]; + FAUSTFLOAT fVbargraph29; + double fVec29[128]; + double fRec33[2]; + FAUSTFLOAT fVbargraph30; + double fVec30[128]; + double fRec34[2]; + FAUSTFLOAT fVbargraph31; + double fVec31[128]; + double fRec35[2]; + FAUSTFLOAT fVbargraph32; + double fVec32[128]; + double fRec36[2]; + FAUSTFLOAT fVbargraph33; + double fVec33[128]; + double fRec37[2]; + FAUSTFLOAT fVbargraph34; + double fVec34[128]; + double fRec38[2]; + FAUSTFLOAT fVbargraph35; + double fVec35[128]; + double fRec0[2]; + FAUSTFLOAT fHbargraph0; + double fRec39[2]; + FAUSTFLOAT fHbargraph1; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/version", "0.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("license", "GPL)"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOADecBinaural5"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.0"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 36; + + } + virtual int getNumOutputs() { + return 2; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(0.0); + fVslider1 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec3[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + IOTA = 0; + for (int l3 = 0; (l3 < 128); l3 = (l3 + 1)) { + fVec0[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 128); l5 = (l5 + 1)) { + fVec1[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec5[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 128); l7 = (l7 + 1)) { + fVec2[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec6[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 128); l9 = (l9 + 1)) { + fVec3[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec7[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 128); l11 = (l11 + 1)) { + fVec4[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec8[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 128); l13 = (l13 + 1)) { + fVec5[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec9[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 128); l15 = (l15 + 1)) { + fVec6[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec10[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 128); l17 = (l17 + 1)) { + fVec7[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec11[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 128); l19 = (l19 + 1)) { + fVec8[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec12[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 128); l21 = (l21 + 1)) { + fVec9[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec13[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 128); l23 = (l23 + 1)) { + fVec10[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec14[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 128); l25 = (l25 + 1)) { + fVec11[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec15[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 128); l27 = (l27 + 1)) { + fVec12[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec16[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 128); l29 = (l29 + 1)) { + fVec13[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec17[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 128); l31 = (l31 + 1)) { + fVec14[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec18[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 128); l33 = (l33 + 1)) { + fVec15[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec19[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 128); l35 = (l35 + 1)) { + fVec16[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec20[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 128); l37 = (l37 + 1)) { + fVec17[l37] = 0.0; + + } + for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + fRec21[l38] = 0.0; + + } + for (int l39 = 0; (l39 < 128); l39 = (l39 + 1)) { + fVec18[l39] = 0.0; + + } + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec22[l40] = 0.0; + + } + for (int l41 = 0; (l41 < 128); l41 = (l41 + 1)) { + fVec19[l41] = 0.0; + + } + for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + fRec23[l42] = 0.0; + + } + for (int l43 = 0; (l43 < 128); l43 = (l43 + 1)) { + fVec20[l43] = 0.0; + + } + for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + fRec24[l44] = 0.0; + + } + for (int l45 = 0; (l45 < 128); l45 = (l45 + 1)) { + fVec21[l45] = 0.0; + + } + for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + fRec25[l46] = 0.0; + + } + for (int l47 = 0; (l47 < 128); l47 = (l47 + 1)) { + fVec22[l47] = 0.0; + + } + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec26[l48] = 0.0; + + } + for (int l49 = 0; (l49 < 128); l49 = (l49 + 1)) { + fVec23[l49] = 0.0; + + } + for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + fRec27[l50] = 0.0; + + } + for (int l51 = 0; (l51 < 128); l51 = (l51 + 1)) { + fVec24[l51] = 0.0; + + } + for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + fRec28[l52] = 0.0; + + } + for (int l53 = 0; (l53 < 128); l53 = (l53 + 1)) { + fVec25[l53] = 0.0; + + } + for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + fRec29[l54] = 0.0; + + } + for (int l55 = 0; (l55 < 128); l55 = (l55 + 1)) { + fVec26[l55] = 0.0; + + } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec30[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 128); l57 = (l57 + 1)) { + fVec27[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec31[l58] = 0.0; + + } + for (int l59 = 0; (l59 < 128); l59 = (l59 + 1)) { + fVec28[l59] = 0.0; + + } + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fRec32[l60] = 0.0; + + } + for (int l61 = 0; (l61 < 128); l61 = (l61 + 1)) { + fVec29[l61] = 0.0; + + } + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec33[l62] = 0.0; + + } + for (int l63 = 0; (l63 < 128); l63 = (l63 + 1)) { + fVec30[l63] = 0.0; + + } + for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + fRec34[l64] = 0.0; + + } + for (int l65 = 0; (l65 < 128); l65 = (l65 + 1)) { + fVec31[l65] = 0.0; + + } + for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + fRec35[l66] = 0.0; + + } + for (int l67 = 0; (l67 < 128); l67 = (l67 + 1)) { + fVec32[l67] = 0.0; + + } + for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + fRec36[l68] = 0.0; + + } + for (int l69 = 0; (l69 < 128); l69 = (l69 + 1)) { + fVec33[l69] = 0.0; + + } + for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + fRec37[l70] = 0.0; + + } + for (int l71 = 0; (l71 < 128); l71 = (l71 + 1)) { + fVec34[l71] = 0.0; + + } + for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + fRec38[l72] = 0.0; + + } + for (int l73 = 0; (l73 < 128); l73 = (l73 + 1)) { + fVec35[l73] = 0.0; + + } + for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + fRec0[l74] = 0.0; + + } + for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + fRec39[l75] = 0.0; + + } + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOADecBinaural5"); + ui_interface->openHorizontalBox("Inputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x82e5490", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x80b05e0", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x82a3be0", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x827da60", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x8253e40", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7d815c0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7dfa3b0", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x81e42d0", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x81c5010", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x819c780", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x81719c0", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x814a1f0", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7e0f390", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x8103770", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x80b6980", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x80bed90", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x808d110", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x8062bb0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x801bd60", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x800d3e0", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7feea70", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7fc5120", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f9de00", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f75dd0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f513b0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f2b4f0", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7f01e80", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7edbc20", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7eb2ff0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7e8afc0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7e15810", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7e00750", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7e1ca80", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7d86030", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7d8aba0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x7d8f5b0", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->declare(&fVslider1, "1", ""); + ui_interface->declare(&fVslider1, "osc", "/levelin -10 10"); + ui_interface->declare(&fVslider1, "unit", "dB"); + ui_interface->addVerticalSlider("Inputs Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->declare(&fVslider0, "osc", "/levelout -10 10"); + ui_interface->declare(&fVslider0, "unit", "dB"); + ui_interface->addVerticalSlider("Outputs Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->closeBox(); + ui_interface->openVerticalBox("Outputs"); + ui_interface->openHorizontalBox("Left"); + ui_interface->declare(&fHbargraph0, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x89c2d10", &fHbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("Right"); + ui_interface->declare(&fHbargraph1, "unit", "dB"); + ui_interface->addHorizontalBargraph("0x8ffa690", &fHbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); + for (int i = 0; (i < count); i = (i + 1)) { + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec3[0] = (fSlow1 + (0.999 * fRec3[1])); + double fTemp0 = (fRec3[0] * double(input5[i])); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); + fVbargraph0 = FAUSTFLOAT(fRec2[0]); + fVec0[(IOTA & 127)] = fTemp0; + double fTemp1 = (fRec3[0] * double(input33[i])); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); + fVbargraph1 = FAUSTFLOAT(fRec4[0]); + fVec1[(IOTA & 127)] = fTemp1; + double fTemp2 = (fRec3[0] * double(input34[i])); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); + fVbargraph2 = FAUSTFLOAT(fRec5[0]); + fVec2[(IOTA & 127)] = fTemp2; + double fTemp3 = (fRec3[0] * double(input35[i])); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph3 = FAUSTFLOAT(fRec6[0]); + fVec3[(IOTA & 127)] = fTemp3; + double fTemp4 = (fRec3[0] * double(input6[i])); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph4 = FAUSTFLOAT(fRec7[0]); + fVec4[(IOTA & 127)] = fTemp4; + double fTemp5 = (fRec3[0] * double(input31[i])); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph5 = FAUSTFLOAT(fRec8[0]); + fVec5[(IOTA & 127)] = fTemp5; + double fTemp6 = (fRec3[0] * double(input12[i])); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph6 = FAUSTFLOAT(fRec9[0]); + fVec6[(IOTA & 127)] = fTemp6; + double fTemp7 = (fRec3[0] * double(input30[i])); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph7 = FAUSTFLOAT(fRec10[0]); + fVec7[(IOTA & 127)] = fTemp7; + double fTemp8 = (fRec3[0] * double(input32[i])); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph8 = FAUSTFLOAT(fRec11[0]); + fVec8[(IOTA & 127)] = fTemp8; + double fTemp9 = (fRec3[0] * double(input29[i])); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph9 = FAUSTFLOAT(fRec12[0]); + fVec9[(IOTA & 127)] = fTemp9; + double fTemp10 = (fRec3[0] * double(input28[i])); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph10 = FAUSTFLOAT(fRec13[0]); + fVec10[(IOTA & 127)] = fTemp10; + double fTemp11 = (fRec3[0] * double(input27[i])); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph11 = FAUSTFLOAT(fRec14[0]); + fVec11[(IOTA & 127)] = fTemp11; + double fTemp12 = (fRec3[0] * double(input26[i])); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph12 = FAUSTFLOAT(fRec15[0]); + fVec12[(IOTA & 127)] = fTemp12; + double fTemp13 = (fRec3[0] * double(input25[i])); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph13 = FAUSTFLOAT(fRec16[0]); + fVec13[(IOTA & 127)] = fTemp13; + double fTemp14 = (fRec3[0] * double(input24[i])); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph14 = FAUSTFLOAT(fRec17[0]); + fVec14[(IOTA & 127)] = fTemp14; + double fTemp15 = (fRec3[0] * double(input23[i])); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph15 = FAUSTFLOAT(fRec18[0]); + fVec15[(IOTA & 127)] = fTemp15; + double fTemp16 = (fRec3[0] * double(input22[i])); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph16 = FAUSTFLOAT(fRec19[0]); + fVec16[(IOTA & 127)] = fTemp16; + double fTemp17 = (fRec3[0] * double(input21[i])); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph17 = FAUSTFLOAT(fRec20[0]); + fVec17[(IOTA & 127)] = fTemp17; + double fTemp18 = (fRec3[0] * double(input20[i])); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph18 = FAUSTFLOAT(fRec21[0]); + fVec18[(IOTA & 127)] = fTemp18; + double fTemp19 = (fRec3[0] * double(input19[i])); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph19 = FAUSTFLOAT(fRec22[0]); + fVec19[(IOTA & 127)] = fTemp19; + double fTemp20 = (fRec3[0] * double(input18[i])); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph20 = FAUSTFLOAT(fRec23[0]); + fVec20[(IOTA & 127)] = fTemp20; + double fTemp21 = (fRec3[0] * double(input17[i])); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph21 = FAUSTFLOAT(fRec24[0]); + fVec21[(IOTA & 127)] = fTemp21; + double fTemp22 = (fRec3[0] * double(input16[i])); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph22 = FAUSTFLOAT(fRec25[0]); + fVec22[(IOTA & 127)] = fTemp22; + double fTemp23 = (fRec3[0] * double(input1[i])); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph23 = FAUSTFLOAT(fRec26[0]); + fVec23[(IOTA & 127)] = fTemp23; + double fTemp24 = (fRec3[0] * double(input14[i])); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph24 = FAUSTFLOAT(fRec27[0]); + fVec24[(IOTA & 127)] = fTemp24; + double fTemp25 = (fRec3[0] * double(input15[i])); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph25 = FAUSTFLOAT(fRec28[0]); + fVec25[(IOTA & 127)] = fTemp25; + double fTemp26 = (fRec3[0] * double(input13[i])); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph26 = FAUSTFLOAT(fRec29[0]); + fVec26[(IOTA & 127)] = fTemp26; + double fTemp27 = (fRec3[0] * double(input11[i])); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph27 = FAUSTFLOAT(fRec30[0]); + fVec27[(IOTA & 127)] = fTemp27; + double fTemp28 = (fRec3[0] * double(input10[i])); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph28 = FAUSTFLOAT(fRec31[0]); + fVec28[(IOTA & 127)] = fTemp28; + double fTemp29 = (fRec3[0] * double(input9[i])); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph29 = FAUSTFLOAT(fRec32[0]); + fVec29[(IOTA & 127)] = fTemp29; + double fTemp30 = (fRec3[0] * double(input8[i])); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph30 = FAUSTFLOAT(fRec33[0]); + fVec30[(IOTA & 127)] = fTemp30; + double fTemp31 = (fRec3[0] * double(input7[i])); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph31 = FAUSTFLOAT(fRec34[0]); + fVec31[(IOTA & 127)] = fTemp31; + double fTemp32 = (fRec3[0] * double(input4[i])); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph32 = FAUSTFLOAT(fRec35[0]); + fVec32[(IOTA & 127)] = fTemp32; + double fTemp33 = (fRec3[0] * double(input3[i])); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph33 = FAUSTFLOAT(fRec36[0]); + fVec33[(IOTA & 127)] = fTemp33; + double fTemp34 = (fRec3[0] * double(input2[i])); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph34 = FAUSTFLOAT(fRec37[0]); + fVec34[(IOTA & 127)] = fTemp34; + double fTemp35 = (fRec3[0] * double(input0[i])); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph35 = FAUSTFLOAT(fRec38[0]); + fVec35[(IOTA & 127)] = fTemp35; + double fTemp36 = (fRec1[0] * (((0.013603000000000001 * (fVec0[((IOTA - 21) & 127)] + fVec1[((IOTA - 36) & 127)])) + ((7.2609999999999996e-06 * fVec2[((IOTA - 124) & 127)]) + ((4.1597499999999996e-07 * fVec3[((IOTA - 126) & 127)]) + ((1.8790599999999999e-06 * fVec3[((IOTA - 122) & 127)]) + ((1.1066300000000001e-05 * fVec3[((IOTA - 119) & 127)]) + ((3.9484900000000005e-05 * fVec3[((IOTA - 118) & 127)]) + ((0.00013015800000000001 * fVec3[((IOTA - 113) & 127)]) + ((0.00014394700000000001 * fVec3[((IOTA - 112) & 127)]) + ((0.00022738500000000001 * fVec3[((IOTA - 109) & 127)]) + ((0.000184131 * fVec3[((IOTA - 108) & 127)]) + ((6.5695100000000007e-05 * fVec3[((IOTA - 107) & 127)]) + ((0.00057914199999999994 * fVec3[((IOTA - 104) & 127)]) + ((0.00021256499999999998 * fVec3[((IOTA - 103) & 127)]) + ((0.00016072600000000001 * fVec3[((IOTA - 101) & 127)]) + ((0.00099578800000000006 * fVec3[((IOTA - 100) & 127)]) + ((0.000329446 * fVec3[((IOTA - 99) & 127)]) + ((0.00057130400000000002 * fVec3[((IOTA - 97) & 127)]) + ((0.00056901300000000005 * fVec3[((IOTA - 94) & 127)]) + ((0.00057574700000000004 * fVec3[((IOTA - 93) & 127)]) + ((0.00074504200000000001 * fVec3[((IOTA - 92) & 127)]) + ((0.00123606 * fVec3[((IOTA - 89) & 127)]) + ((0.00082906200000000009 * fVec3[((IOTA - 88) & 127)]) + ((0.00026738900000000004 * fVec3[((IOTA - 85) & 127)]) + ((0.00035377299999999999 * fVec3[((IOTA - 84) & 127)]) + ((0.00011509799999999999 * fVec3[((IOTA - 83) & 127)]) + ((0.00083287999999999993 * fVec3[((IOTA - 82) & 127)]) + ((0.00100113 * fVec3[((IOTA - 81) & 127)]) + ((2.2775000000000001e-05 * fVec3[((IOTA - 80) & 127)]) + ((0.00039397500000000002 * fVec3[((IOTA - 79) & 127)]) + ((0.00067154300000000003 * fVec3[((IOTA - 75) & 127)]) + ((0.000406358 * fVec3[((IOTA - 71) & 127)]) + ((0.00041196100000000002 * fVec3[((IOTA - 68) & 127)]) + ((0.0020567600000000004 * fVec3[((IOTA - 67) & 127)]) + ((0.00065071700000000009 * fVec3[((IOTA - 66) & 127)]) + ((0.00064656900000000005 * fVec3[((IOTA - 65) & 127)]) + ((0.00080278000000000001 * fVec3[((IOTA - 60) & 127)]) + ((0.00011049000000000001 * fVec3[((IOTA - 57) & 127)]) + ((0.0027250800000000004 * fVec3[((IOTA - 56) & 127)]) + ((0.0028610300000000001 * fVec3[((IOTA - 55) & 127)]) + ((0.0012185900000000001 * fVec3[((IOTA - 50) & 127)]) + ((1.5504900000000001e-05 * fVec3[((IOTA - 49) & 127)]) + ((0.00172276 * fVec3[((IOTA - 48) & 127)]) + ((0.00219258 * fVec3[((IOTA - 47) & 127)]) + ((0.0050693000000000005 * fVec3[((IOTA - 45) & 127)]) + ((0.0038866299999999999 * fVec3[((IOTA - 44) & 127)]) + ((0.0025448800000000002 * fVec3[((IOTA - 43) & 127)]) + ((0.0031647300000000001 * fVec3[((IOTA - 42) & 127)]) + ((0.0017989500000000001 * fVec3[((IOTA - 38) & 127)]) + ((0.0080778499999999993 * fVec3[((IOTA - 35) & 127)]) + ((0.00048733100000000003 * fVec3[((IOTA - 33) & 127)]) + ((0.0038437199999999997 * fVec3[((IOTA - 32) & 127)]) + ((0.0048765500000000003 * fVec3[((IOTA - 26) & 127)]) + ((0.049832400000000006 * fVec3[((IOTA - 23) & 127)]) + ((0.049451700000000001 * fVec3[((IOTA - 22) & 127)]) + ((0.021755200000000002 * fVec3[((IOTA - 18) & 127)]) + ((0.029326899999999999 * fVec3[((IOTA - 15) & 127)]) + ((0.035047600000000005 * fVec3[((IOTA - 14) & 127)]) + ((0.020263300000000001 * fVec3[((IOTA - 13) & 127)]) + ((0.0065366499999999998 * fVec3[((IOTA - 10) & 127)]) + ((0.00210005 * fVec3[((IOTA - 8) & 127)]) + ((0.0025905300000000002 * fVec3[((IOTA - 6) & 127)]) + ((0.00019429700000000001 * fVec3[((IOTA - 4) & 127)]) + ((0.00013310400000000002 * fVec3[((IOTA - 2) & 127)]) + ((1.9185300000000001e-05 * fVec3[((IOTA - 1) & 127)]) + (((5.9961100000000004e-05 * fVec2[((IOTA - 118) & 127)]) + ((7.3244600000000007e-05 * fVec2[((IOTA - 115) & 127)]) + ((2.0171700000000002e-05 * fVec2[((IOTA - 113) & 127)]) + (((0.00015535900000000001 * fVec2[((IOTA - 111) & 127)]) + ((0.00053629700000000003 * fVec2[((IOTA - 110) & 127)]) + ((0.00048390300000000005 * fVec2[((IOTA - 109) & 127)]) + ((0.00074196000000000006 * fVec2[((IOTA - 106) & 127)]) + ((0.00057640399999999998 * fVec2[((IOTA - 105) & 127)]) + ((0.00010493 * fVec2[((IOTA - 104) & 127)]) + ((0.00023300800000000002 * fVec2[((IOTA - 103) & 127)]) + ((0.000995192 * fVec2[((IOTA - 102) & 127)]) + ((0.00062893200000000002 * fVec2[((IOTA - 101) & 127)]) + ((0.00050440599999999999 * fVec2[((IOTA - 99) & 127)]) + ((0.00069202100000000002 * fVec2[((IOTA - 98) & 127)]) + ((0.00092695799999999997 * fVec2[((IOTA - 95) & 127)]) + ((0.000167942 * fVec2[((IOTA - 94) & 127)]) + ((0.0013624400000000001 * fVec2[((IOTA - 92) & 127)]) + ((0.0019414100000000002 * fVec2[((IOTA - 91) & 127)]) + ((0.00165866 * fVec2[((IOTA - 88) & 127)]) + ((0.0026041200000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.00014658300000000002 * fVec2[((IOTA - 82) & 127)]) + ((0.0011611800000000002 * fVec2[((IOTA - 81) & 127)]) + ((0.0010899900000000001 * fVec2[((IOTA - 80) & 127)]) + ((0.00094991200000000002 * fVec2[((IOTA - 79) & 127)]) + ((0.0015641000000000001 * fVec2[((IOTA - 78) & 127)]) + ((0.00045640700000000004 * fVec2[((IOTA - 77) & 127)]) + ((0.00042805600000000006 * fVec2[((IOTA - 74) & 127)]) + ((0.0016342099999999999 * fVec2[((IOTA - 73) & 127)]) + ((0.0031345000000000001 * fVec2[((IOTA - 69) & 127)]) + ((0.0014858800000000002 * fVec2[((IOTA - 68) & 127)]) + ((0.000144275 * fVec2[((IOTA - 67) & 127)]) + ((0.0024759400000000003 * fVec2[((IOTA - 66) & 127)]) + ((0.0035671400000000003 * fVec2[((IOTA - 62) & 127)]) + ((0.0027542000000000001 * fVec2[((IOTA - 61) & 127)]) + ((0.00089494500000000007 * fVec2[((IOTA - 60) & 127)]) + ((0.0012555700000000001 * fVec2[((IOTA - 59) & 127)]) + ((0.0010056700000000002 * fVec2[((IOTA - 55) & 127)]) + ((0.00058800500000000006 * fVec2[((IOTA - 54) & 127)]) + ((0.0041120999999999996 * fVec2[((IOTA - 49) & 127)]) + ((0.00010049300000000002 * fVec2[((IOTA - 48) & 127)]) + ((0.00060031400000000001 * fVec2[((IOTA - 46) & 127)]) + ((0.0011542099999999999 * fVec2[((IOTA - 45) & 127)]) + ((0.00092823899999999997 * fVec2[((IOTA - 43) & 127)]) + ((0.0101335 * fVec2[((IOTA - 42) & 127)]) + ((0.00091382600000000007 * fVec2[((IOTA - 41) & 127)]) + ((0.00128385 * fVec2[((IOTA - 39) & 127)]) + ((0.014247900000000001 * fVec2[((IOTA - 36) & 127)]) + ((0.0092913700000000002 * fVec2[((IOTA - 35) & 127)]) + ((0.018629699999999999 * fVec2[((IOTA - 31) & 127)]) + ((0.016535299999999999 * fVec2[((IOTA - 30) & 127)]) + ((0.0121183 * fVec2[((IOTA - 26) & 127)]) + ((0.017029000000000002 * fVec2[((IOTA - 24) & 127)]) + ((0.0099882500000000006 * fVec2[((IOTA - 23) & 127)]) + ((0.0024332300000000002 * fVec2[((IOTA - 21) & 127)]) + ((0.0216451 * fVec2[((IOTA - 20) & 127)]) + ((0.040556000000000002 * fVec2[((IOTA - 16) & 127)]) + ((0.00239814 * fVec2[((IOTA - 15) & 127)]) + ((0.0024948600000000002 * fVec2[((IOTA - 13) & 127)]) + ((0.000641677 * fVec2[((IOTA - 8) & 127)]) + ((0.00107489 * fVec2[((IOTA - 7) & 127)]) + ((0.00040000700000000002 * fVec2[((IOTA - 4) & 127)]) + ((1.1487900000000001e-05 * fVec2[((IOTA - 3) & 127)]) + ((3.1915800000000004e-05 * fVec2[((IOTA - 2) & 127)]) + ((3.5268499999999998e-07 * fVec2[((IOTA - 1) & 127)]) + (((0.00066595000000000011 * fVec1[((IOTA - 101) & 127)]) + ((8.0990199999999996e-05 * fVec1[((IOTA - 100) & 127)]) + ((0.00035469700000000001 * fVec1[((IOTA - 99) & 127)]) + ((0.00099614600000000005 * fVec1[((IOTA - 98) & 127)]) + ((0.00010470500000000001 * fVec1[((IOTA - 94) & 127)]) + ((0.00091987500000000012 * fVec1[((IOTA - 90) & 127)]) + ((0.00050879600000000005 * fVec1[((IOTA - 89) & 127)]) + ((0.00109914 * fVec1[((IOTA - 86) & 127)]) + ((0.00054998800000000006 * fVec1[((IOTA - 81) & 127)]) + ((0.00063005199999999998 * fVec1[((IOTA - 79) & 127)]) + ((0.00240705 * fVec1[((IOTA - 78) & 127)]) + ((0.0028402500000000003 * fVec1[((IOTA - 77) & 127)]) + ((0.0020358999999999998 * fVec1[((IOTA - 76) & 127)]) + ((0.00037087099999999999 * fVec1[((IOTA - 73) & 127)]) + ((0.00078916399999999997 * fVec1[((IOTA - 72) & 127)]) + ((0.00109212 * fVec1[((IOTA - 69) & 127)]) + ((0.0021674400000000001 * fVec1[((IOTA - 68) & 127)]) + ((0.0025459300000000001 * fVec1[((IOTA - 67) & 127)]) + ((0.0027579900000000001 * fVec1[((IOTA - 66) & 127)]) + ((0.00097928000000000012 * fVec1[((IOTA - 63) & 127)]) + ((0.00024169800000000002 * fVec1[((IOTA - 62) & 127)]) + ((0.0020687100000000001 * fVec1[((IOTA - 58) & 127)]) + ((0.0032992300000000002 * fVec1[((IOTA - 57) & 127)]) + ((0.0012276400000000001 * fVec1[((IOTA - 56) & 127)]) + ((0.0047411899999999993 * fVec1[((IOTA - 51) & 127)]) + ((0.0021280299999999999 * fVec1[((IOTA - 50) & 127)]) + ((0.00047240100000000001 * fVec1[((IOTA - 49) & 127)]) + ((0.0050889400000000001 * fVec1[((IOTA - 48) & 127)]) + ((0.0039216600000000004 * fVec1[((IOTA - 45) & 127)]) + ((0.0038515899999999998 * fVec1[((IOTA - 44) & 127)]) + ((0.0034045999999999998 * fVec1[((IOTA - 43) & 127)]) + ((0.00027787000000000005 * fVec1[((IOTA - 38) & 127)]) + ((0.000595796 * fVec1[((IOTA - 35) & 127)]) + ((0.0075479399999999995 * fVec1[((IOTA - 33) & 127)]) + ((0.0092621500000000002 * fVec1[((IOTA - 31) & 127)]) + ((0.0035737 * fVec1[((IOTA - 30) & 127)]) + ((0.00578605 * fVec1[((IOTA - 26) & 127)]) + ((0.059789399999999999 * fVec1[((IOTA - 25) & 127)]) + ((0.0097282899999999988 * fVec1[((IOTA - 24) & 127)]) + ((0.024477200000000001 * fVec1[((IOTA - 21) & 127)]) + ((0.018019900000000002 * fVec1[((IOTA - 20) & 127)]) + ((0.0026775799999999997 * fVec1[((IOTA - 17) & 127)]) + ((0.012747999999999999 * fVec1[((IOTA - 16) & 127)]) + ((0.018762600000000001 * fVec1[((IOTA - 15) & 127)]) + ((0.0048380300000000001 * fVec1[((IOTA - 13) & 127)]) + ((0.00128688 * fVec1[((IOTA - 8) & 127)]) + ((0.00053300299999999999 * fVec1[((IOTA - 6) & 127)]) + ((0.00029594900000000005 * fVec1[((IOTA - 4) & 127)]) + ((0.000120349 * fVec1[((IOTA - 2) & 127)]) + ((1.2679400000000001e-05 * fTemp1) + ((0.000204718 * (fVec4[((IOTA - 108) & 127)] - fVec5[((IOTA - 111) & 127)])) + ((2.5295200000000005e-05 * fVec1[((IOTA - 119) & 127)]) + ((7.9016800000000006e-05 * fVec1[((IOTA - 118) & 127)]) + ((3.9434700000000004e-05 * fVec1[((IOTA - 117) & 127)]) + ((2.0117200000000001e-05 * fVec1[((IOTA - 115) & 127)]) + ((0.000135399 * fVec1[((IOTA - 114) & 127)]) + ((0.00016193200000000002 * fVec1[((IOTA - 113) & 127)]) + ((0.000112188 * fVec1[((IOTA - 111) & 127)]) + ((0.00046164100000000005 * fVec1[((IOTA - 110) & 127)]) + ((0.00023653499999999998 * fVec1[((IOTA - 109) & 127)]) + ((0.00017757400000000003 * fVec1[((IOTA - 108) & 127)]) + ((5.4962800000000002e-05 * fVec1[((IOTA - 107) & 127)]) + ((0.00016055900000000001 * fVec1[((IOTA - 106) & 127)]) + ((0.00017919300000000002 * fVec1[((IOTA - 105) & 127)]) + ((1.4088300000000002e-05 * fVec1[((IOTA - 122) & 127)]) + ((7.1672200000000003e-06 * fVec1[((IOTA - 121) & 127)]) + ((0.0102524 * (fVec6[((IOTA - 26) & 127)] + fVec7[((IOTA - 18) & 127)])) + ((0.00029946900000000002 * fVec1[((IOTA - 102) & 127)]) + ((2.83422e-06 * fVec8[((IOTA - 125) & 127)]) + ((5.5335299999999992e-06 * fVec8[((IOTA - 121) & 127)]) + ((3.0215600000000003e-05 * fVec8[((IOTA - 118) & 127)]) + ((7.7583400000000007e-05 * fVec8[((IOTA - 117) & 127)]) + ((0.00025878700000000001 * fVec8[((IOTA - 111) & 127)]) + ((0.00028758400000000002 * fVec8[((IOTA - 110) & 127)]) + ((5.4718800000000002e-05 * fVec8[((IOTA - 109) & 127)]) + ((1.1273200000000002e-05 * fVec8[((IOTA - 108) & 127)]) + ((0.000325624 * fVec8[((IOTA - 106) & 127)]) + ((0.00018603700000000001 * fVec8[((IOTA - 105) & 127)]) + ((0.00046106800000000008 * fVec8[((IOTA - 103) & 127)]) + ((0.0012277499999999999 * fVec8[((IOTA - 102) & 127)]) + ((0.00075551100000000005 * fVec8[((IOTA - 101) & 127)]) + ((0.00027916900000000001 * fVec8[((IOTA - 100) & 127)]) + ((0.00034185200000000002 * fVec8[((IOTA - 99) & 127)]) + ((0.000452311 * fVec8[((IOTA - 98) & 127)]) + ((0.000139927 * fVec8[((IOTA - 97) & 127)]) + ((0.00056378000000000005 * fVec8[((IOTA - 96) & 127)]) + ((0.0019755300000000001 * fVec8[((IOTA - 95) & 127)]) + ((0.0015109100000000001 * fVec8[((IOTA - 94) & 127)]) + ((0.00039070400000000002 * fVec8[((IOTA - 93) & 127)]) + ((0.00046127000000000006 * fVec8[((IOTA - 91) & 127)]) + ((0.00094780500000000002 * fVec8[((IOTA - 88) & 127)]) + ((0.0032023000000000004 * fVec8[((IOTA - 87) & 127)]) + ((0.0019245600000000001 * fVec8[((IOTA - 86) & 127)]) + ((0.00061178000000000003 * fVec8[((IOTA - 83) & 127)]) + ((6.4463999999999998e-05 * fVec8[((IOTA - 82) & 127)]) + ((0.00014697899999999999 * fVec8[((IOTA - 81) & 127)]) + ((0.00024922099999999999 * fVec8[((IOTA - 77) & 127)]) + ((0.0013547000000000001 * fVec8[((IOTA - 76) & 127)]) + ((0.0017048 * fVec8[((IOTA - 75) & 127)]) + ((6.4220800000000007e-05 * fVec8[((IOTA - 74) & 127)]) + ((0.00059747199999999993 * fVec8[((IOTA - 71) & 127)]) + ((0.00107515 * fVec8[((IOTA - 70) & 127)]) + ((0.0017238400000000001 * fVec8[((IOTA - 69) & 127)]) + ((0.0022913100000000004 * fVec8[((IOTA - 68) & 127)]) + ((0.00053714799999999999 * fVec8[((IOTA - 67) & 127)]) + ((0.00011855000000000001 * fVec8[((IOTA - 65) & 127)]) + ((0.00052593900000000001 * fVec8[((IOTA - 61) & 127)]) + ((0.0014249900000000001 * fVec8[((IOTA - 57) & 127)]) + ((0.0036127500000000001 * fVec8[((IOTA - 56) & 127)]) + ((0.00090169900000000006 * fVec8[((IOTA - 55) & 127)]) + ((0.0038923199999999999 * fVec8[((IOTA - 50) & 127)]) + ((0.0045109299999999998 * fVec8[((IOTA - 49) & 127)]) + ((0.0097302499999999993 * fVec8[((IOTA - 44) & 127)]) + ((0.0090814900000000011 * fVec8[((IOTA - 43) & 127)]) + ((0.00028542000000000004 * fVec8[((IOTA - 42) & 127)]) + ((0.0020694099999999998 * fVec8[((IOTA - 39) & 127)]) + ((0.0090991500000000003 * fVec8[((IOTA - 38) & 127)]) + ((0.0012552500000000001 * fVec8[((IOTA - 37) & 127)]) + ((0.007511320000000001 * fVec8[((IOTA - 35) & 127)]) + ((0.022220300000000002 * fVec8[((IOTA - 31) & 127)]) + ((0.0138099 * fVec8[((IOTA - 30) & 127)]) + ((0.00318798 * fVec8[((IOTA - 26) & 127)]) + ((0.033351600000000002 * fVec8[((IOTA - 25) & 127)]) + ((0.029861800000000001 * fVec8[((IOTA - 24) & 127)]) + ((0.026114099999999998 * fVec8[((IOTA - 20) & 127)]) + ((0.036668100000000002 * fVec8[((IOTA - 19) & 127)]) + ((0.014710300000000001 * fVec8[((IOTA - 18) & 127)]) + ((0.0096699899999999998 * fVec8[((IOTA - 15) & 127)]) + ((0.0375927 * fVec8[((IOTA - 14) & 127)]) + ((0.0017399100000000001 * fVec8[((IOTA - 13) & 127)]) + ((0.00051784600000000008 * fVec8[((IOTA - 11) & 127)]) + ((0.00036456600000000003 * fVec8[((IOTA - 9) & 127)]) + ((0.00075119100000000012 * fVec8[((IOTA - 6) & 127)]) + ((0.000498891 * fVec8[((IOTA - 5) & 127)]) + ((0.00024446599999999999 * fVec8[((IOTA - 2) & 127)]) + ((6.0936200000000001e-05 * fVec8[((IOTA - 1) & 127)]) + ((1.26382e-07 * fVec5[((IOTA - 126) & 127)]) + ((2.5084200000000001e-06 * fVec5[((IOTA - 125) & 127)]) + ((5.2377200000000004e-06 * fVec5[((IOTA - 124) & 127)]) + ((7.843189999999999e-06 * fVec5[((IOTA - 123) & 127)]) + ((3.1262900000000002e-05 * fVec5[((IOTA - 122) & 127)]) + ((5.0188800000000003e-05 * fVec5[((IOTA - 121) & 127)]) + ((1.2448200000000002e-05 * fVec5[((IOTA - 120) & 127)]) + ((2.6150300000000003e-05 * fVec5[((IOTA - 113) & 127)]) + ((6.9454600000000004e-05 * fVec5[((IOTA - 107) & 127)]) + ((7.6502700000000002e-05 * fVec5[((IOTA - 101) & 127)]) + ((0.000186045 * fVec5[((IOTA - 100) & 127)]) + ((0.00088429199999999996 * fVec5[((IOTA - 99) & 127)]) + ((0.0015707 * fVec5[((IOTA - 98) & 127)]) + ((0.00018468800000000002 * fVec5[((IOTA - 97) & 127)]) + ((0.00098621800000000008 * fVec5[((IOTA - 95) & 127)]) + ((0.00090474700000000012 * fVec5[((IOTA - 94) & 127)]) + ((0.000159872 * fVec5[((IOTA - 93) & 127)]) + ((0.00056933899999999998 * fVec5[((IOTA - 92) & 127)]) + ((0.00185798 * fVec5[((IOTA - 91) & 127)]) + ((0.00189 * fVec5[((IOTA - 90) & 127)]) + ((0.000117786 * fVec5[((IOTA - 89) & 127)]) + ((0.00125928 * fVec5[((IOTA - 86) & 127)]) + ((2.8444500000000005e-05 * fVec5[((IOTA - 85) & 127)]) + ((0.00083294400000000007 * fVec5[((IOTA - 80) & 127)]) + ((0.0016764500000000001 * fVec5[((IOTA - 79) & 127)]) + ((0.0013962900000000001 * fVec5[((IOTA - 78) & 127)]) + ((0.00111758 * fVec5[((IOTA - 77) & 127)]) + ((0.00045391500000000005 * fVec5[((IOTA - 71) & 127)]) + ((0.000148803 * fVec5[((IOTA - 70) & 127)]) + ((0.0011753800000000002 * fVec5[((IOTA - 68) & 127)]) + ((0.0018962900000000001 * fVec5[((IOTA - 67) & 127)]) + ((0.0014613100000000002 * fVec5[((IOTA - 66) & 127)]) + ((0.0017970900000000001 * fVec5[((IOTA - 65) & 127)]) + ((0.0015315300000000001 * fVec5[((IOTA - 64) & 127)]) + ((0.0007421070000000001 * fVec5[((IOTA - 56) & 127)]) + ((0.00097520700000000007 * fVec5[((IOTA - 55) & 127)]) + ((0.0037838799999999999 * fVec5[((IOTA - 53) & 127)]) + ((0.00698747 * fVec5[((IOTA - 52) & 127)]) + ((0.0027626199999999999 * fVec5[((IOTA - 51) & 127)]) + ((0.0018685000000000002 * fVec5[((IOTA - 50) & 127)]) + ((0.00096042799999999993 * fVec5[((IOTA - 49) & 127)]) + ((0.0020852000000000002 * fVec5[((IOTA - 48) & 127)]) + ((0.000149424 * fVec5[((IOTA - 47) & 127)]) + ((0.0016588400000000002 * fVec5[((IOTA - 46) & 127)]) + ((0.00091880400000000017 * fVec5[((IOTA - 45) & 127)]) + ((0.00130451 * fVec5[((IOTA - 44) & 127)]) + ((0.0068212999999999998 * fVec5[((IOTA - 37) & 127)]) + ((0.00105405 * fVec5[((IOTA - 34) & 127)]) + ((0.0048931899999999995 * fVec5[((IOTA - 33) & 127)]) + ((0.00611832 * fVec5[((IOTA - 32) & 127)]) + ((0.00102206 * fVec5[((IOTA - 30) & 127)]) + ((0.0060025299999999998 * fVec5[((IOTA - 29) & 127)]) + ((0.026557499999999998 * fVec5[((IOTA - 25) & 127)]) + ((0.016024799999999999 * fVec5[((IOTA - 21) & 127)]) + ((0.024778500000000002 * fVec5[((IOTA - 20) & 127)]) + ((0.00506151 * fVec5[((IOTA - 17) & 127)]) + ((0.013812 * fVec5[((IOTA - 16) & 127)]) + ((0.0140754 * fVec5[((IOTA - 15) & 127)]) + ((0.00200059 * fVec5[((IOTA - 13) & 127)]) + ((3.0679800000000004e-05 * fVec5[((IOTA - 12) & 127)]) + ((0.00092361100000000007 * fVec5[((IOTA - 11) & 127)]) + ((0.000181232 * fVec5[((IOTA - 9) & 127)]) + ((0.00059467900000000008 * fVec5[((IOTA - 8) & 127)]) + ((7.6133200000000012e-05 * fVec5[((IOTA - 7) & 127)]) + ((7.5538900000000003e-05 * fVec5[((IOTA - 6) & 127)]) + ((0.00033447000000000001 * fVec5[((IOTA - 4) & 127)]) + ((2.2306500000000001e-05 * fVec5[((IOTA - 2) & 127)]) + ((1.01157e-06 * fTemp5) + ((6.6843999999999997e-07 * fVec7[((IOTA - 124) & 127)]) + ((4.8642500000000001e-06 * fVec7[((IOTA - 122) & 127)]) + ((3.7498900000000008e-05 * fVec7[((IOTA - 121) & 127)]) + ((3.5998700000000005e-05 * fVec7[((IOTA - 120) & 127)]) + ((0.00095904600000000007 * fVec7[((IOTA - 46) & 127)]) + ((0.0037653400000000003 * fVec7[((IOTA - 43) & 127)]) + ((0.0084534499999999995 * fVec7[((IOTA - 39) & 127)]) + ((0.0082750199999999993 * fVec7[((IOTA - 38) & 127)]) + ((0.00081858699999999996 * fVec7[((IOTA - 37) & 127)]) + ((0.0071382800000000003 * fVec7[((IOTA - 34) & 127)]) + ((0.0143394 * fVec7[((IOTA - 33) & 127)]) + ((0.010370600000000001 * fVec7[((IOTA - 30) & 127)]) + ((0.0011209800000000002 * fVec7[((IOTA - 29) & 127)]) + ((0.0024934200000000001 * fVec7[((IOTA - 26) & 127)]) + ((0.013645400000000002 * fVec7[((IOTA - 25) & 127)]) + ((0.0093267300000000001 * fVec7[((IOTA - 24) & 127)]) + ((0.0010391600000000001 * fVec7[((IOTA - 23) & 127)]) + ((0.013693200000000001 * fVec7[((IOTA - 21) & 127)]) + ((0.026419100000000001 * fVec7[((IOTA - 20) & 127)]) + ((0.0052816599999999997 * fVec7[((IOTA - 19) & 127)]) + ((0.0099079700000000003 * fVec7[((IOTA - 15) & 127)]) + ((0.0311939 * fVec7[((IOTA - 14) & 127)]) + ((0.0014727 * fVec7[((IOTA - 13) & 127)]) + ((0.00053649699999999993 * fVec7[((IOTA - 11) & 127)]) + ((0.000604741 * fVec7[((IOTA - 9) & 127)]) + ((0.00032760500000000002 * fVec7[((IOTA - 6) & 127)]) + ((0.00039869100000000001 * fVec7[((IOTA - 5) & 127)]) + ((0.00021179100000000002 * fVec7[((IOTA - 2) & 127)]) + ((6.6060299999999995e-06 * fVec7[((IOTA - 1) & 127)]) + ((4.4068199999999999e-05 * fVec7[((IOTA - 49) & 127)]) + ((0.00193187 * fVec7[((IOTA - 48) & 127)]) + ((9.3157099999999996e-05 * fVec7[((IOTA - 116) & 127)]) + ((0.00015893600000000001 * fVec7[((IOTA - 115) & 127)]) + ((4.8178400000000006e-05 * fVec7[((IOTA - 111) & 127)]) + ((0.00019388300000000003 * fVec7[((IOTA - 108) & 127)]) + ((8.075270000000001e-05 * fVec7[((IOTA - 102) & 127)]) + ((0.00035262600000000004 * fVec7[((IOTA - 99) & 127)]) + ((0.00033993400000000002 * fVec7[((IOTA - 98) & 127)]) + ((0.00077320100000000005 * fVec7[((IOTA - 94) & 127)]) + ((0.0017218500000000002 * fVec7[((IOTA - 93) & 127)]) + ((0.0012217599999999999 * fVec7[((IOTA - 92) & 127)]) + ((0.00028683100000000003 * fVec7[((IOTA - 88) & 127)]) + ((0.00061147200000000006 * fVec7[((IOTA - 87) & 127)]) + ((4.3723599999999996e-06 * fVec7[((IOTA - 84) & 127)]) + ((0.0018051600000000001 * fVec7[((IOTA - 83) & 127)]) + ((0.00139346 * fVec7[((IOTA - 82) & 127)]) + ((0.00143457 * fVec7[((IOTA - 79) & 127)]) + ((0.00059460700000000003 * fVec7[((IOTA - 78) & 127)]) + ((0.0010948899999999998 * fVec7[((IOTA - 75) & 127)]) + ((0.00070570300000000002 * fVec7[((IOTA - 72) & 127)]) + ((0.00073311000000000003 * fVec7[((IOTA - 71) & 127)]) + ((0.0013571100000000001 * fVec7[((IOTA - 69) & 127)]) + ((0.0014804200000000001 * fVec7[((IOTA - 68) & 127)]) + ((0.00195075 * fVec7[((IOTA - 65) & 127)]) + ((0.0018251999999999999 * fVec7[((IOTA - 64) & 127)]) + ((0.0019702999999999999 * fVec7[((IOTA - 57) & 127)]) + ((0.0014399 * fVec7[((IOTA - 56) & 127)]) + ((0.0012466299999999999 * fVec7[((IOTA - 53) & 127)]) + ((0.00280423 * fVec7[((IOTA - 52) & 127)]) + ((0.00060468100000000003 * fVec7[((IOTA - 51) & 127)]) + ((1.0928e-07 * fVec9[((IOTA - 126) & 127)]) + ((5.4454700000000002e-06 * fVec9[((IOTA - 124) & 127)]) + ((5.9020799999999992e-06 * fVec9[((IOTA - 123) & 127)]) + ((3.0095900000000004e-05 * fVec9[((IOTA - 122) & 127)]) + ((7.1112499999999999e-06 * fVec9[((IOTA - 121) & 127)]) + ((8.7983600000000016e-05 * fVec9[((IOTA - 118) & 127)]) + ((7.5496100000000004e-05 * fVec9[((IOTA - 117) & 127)]) + ((0.00076466500000000009 * fVec9[((IOTA - 57) & 127)]) + ((0.0023379199999999998 * fVec9[((IOTA - 56) & 127)]) + ((0.00074370100000000004 * fVec9[((IOTA - 55) & 127)]) + ((0.00012815799999999999 * fVec9[((IOTA - 48) & 127)]) + ((0.0035424300000000001 * fVec9[((IOTA - 47) & 127)]) + ((0.0032092900000000001 * fVec9[((IOTA - 46) & 127)]) + ((0.0028615699999999999 * fVec9[((IOTA - 45) & 127)]) + ((0.0057087800000000001 * fVec9[((IOTA - 42) & 127)]) + ((0.0084345599999999989 * fVec9[((IOTA - 41) & 127)]) + ((0.0040366099999999995 * fVec9[((IOTA - 36) & 127)]) + ((0.0069023500000000007 * fVec9[((IOTA - 35) & 127)]) + ((0.0065296299999999998 * fVec9[((IOTA - 34) & 127)]) + ((0.0044332599999999996 * fVec9[((IOTA - 33) & 127)]) + ((0.010555300000000002 * fVec9[((IOTA - 32) & 127)]) + ((0.0089396400000000004 * fVec9[((IOTA - 31) & 127)]) + ((0.0086035499999999997 * fVec9[((IOTA - 30) & 127)]) + ((0.0064883900000000001 * fVec9[((IOTA - 23) & 127)]) + ((0.039212699999999996 * fVec9[((IOTA - 22) & 127)]) + ((0.042623499999999995 * fVec9[((IOTA - 21) & 127)]) + ((0.025846499999999998 * fVec9[((IOTA - 20) & 127)]) + ((0.029899200000000001 * fVec9[((IOTA - 19) & 127)]) + ((0.0029874700000000003 * fVec9[((IOTA - 14) & 127)]) + ((0.010756 * fVec9[((IOTA - 12) & 127)]) + ((0.0070991099999999996 * fVec9[((IOTA - 11) & 127)]) + ((0.0013702900000000001 * fVec9[((IOTA - 9) & 127)]) + ((0.00081733800000000003 * fVec9[((IOTA - 7) & 127)]) + ((0.00083112799999999999 * fVec9[((IOTA - 6) & 127)]) + ((0.00032748300000000005 * fVec9[((IOTA - 5) & 127)]) + ((0.00078052999999999998 * fVec9[((IOTA - 63) & 127)]) + ((0.0011785699999999999 * fVec9[((IOTA - 62) & 127)]) + ((0.00011532300000000001 * fVec9[((IOTA - 113) & 127)]) + ((0.000114784 * fVec9[((IOTA - 112) & 127)]) + ((0.00022094800000000003 * fVec9[((IOTA - 111) & 127)]) + ((3.11603e-05 * fVec9[((IOTA - 110) & 127)]) + ((7.629300000000001e-05 * fVec9[((IOTA - 109) & 127)]) + ((8.7761800000000004e-05 * fVec9[((IOTA - 108) & 127)]) + ((0.000129107 * fVec9[((IOTA - 106) & 127)]) + ((0.00014790700000000002 * fVec9[((IOTA - 105) & 127)]) + ((0.000179094 * fVec9[((IOTA - 104) & 127)]) + ((0.0017678000000000001 * fVec9[((IOTA - 98) & 127)]) + ((0.00076420300000000008 * fVec9[((IOTA - 97) & 127)]) + ((0.0014221699999999999 * fVec9[((IOTA - 95) & 127)]) + ((0.0014204300000000001 * fVec9[((IOTA - 94) & 127)]) + ((0.00026099700000000001 * fVec9[((IOTA - 93) & 127)]) + ((0.0015267500000000001 * fVec9[((IOTA - 87) & 127)]) + ((0.0025674000000000001 * fVec9[((IOTA - 86) & 127)]) + ((0.0020047300000000001 * fVec9[((IOTA - 85) & 127)]) + ((0.00030755700000000002 * fVec9[((IOTA - 84) & 127)]) + ((3.2680800000000001e-05 * fVec9[((IOTA - 80) & 127)]) + ((0.00095345499999999997 * fVec9[((IOTA - 79) & 127)]) + ((0.0012025200000000001 * fVec9[((IOTA - 76) & 127)]) + ((0.00092701100000000015 * fVec9[((IOTA - 75) & 127)]) + ((4.1599100000000006e-05 * fVec9[((IOTA - 71) & 127)]) + ((0.0014544500000000001 * fVec9[((IOTA - 70) & 127)]) + ((0.0018527300000000001 * fVec9[((IOTA - 69) & 127)]) + ((9.4559900000000009e-05 * fVec9[((IOTA - 67) & 127)]) + ((0.0039955199999999998 * fVec9[((IOTA - 66) & 127)]) + ((0.00067061599999999996 * fVec9[((IOTA - 65) & 127)]) + ((5.0701899999999997e-07 * fVec10[((IOTA - 126) & 127)]) + ((6.5806299999999997e-06 * fVec10[((IOTA - 119) & 127)]) + ((2.5601699999999999e-05 * fVec10[((IOTA - 118) & 127)]) + ((0.00076725300000000008 * fVec10[((IOTA - 68) & 127)]) + ((0.0019781200000000003 * fVec10[((IOTA - 67) & 127)]) + ((0.00014541100000000002 * fVec10[((IOTA - 66) & 127)]) + ((0.00135169 * fVec10[((IOTA - 65) & 127)]) + ((0.0045255499999999997 * fVec10[((IOTA - 64) & 127)]) + ((0.0031505000000000001 * fVec10[((IOTA - 63) & 127)]) + ((0.0020048800000000001 * fVec10[((IOTA - 62) & 127)]) + ((0.0026610100000000001 * fVec10[((IOTA - 61) & 127)]) + ((0.0031940499999999999 * fVec10[((IOTA - 60) & 127)]) + ((0.0027235599999999999 * fVec10[((IOTA - 59) & 127)]) + ((0.0014989200000000002 * fVec10[((IOTA - 48) & 127)]) + ((0.00035501400000000001 * fVec10[((IOTA - 47) & 127)]) + ((0.00053073400000000005 * fVec10[((IOTA - 44) & 127)]) + ((0.00018177000000000002 * fVec10[((IOTA - 43) & 127)]) + ((0.00022923800000000002 * fVec10[((IOTA - 42) & 127)]) + ((0.0039643000000000005 * fVec10[((IOTA - 41) & 127)]) + ((0.0020238499999999998 * fVec10[((IOTA - 40) & 127)]) + ((0.0027395200000000001 * fVec10[((IOTA - 37) & 127)]) + ((0.0066015900000000001 * fVec10[((IOTA - 36) & 127)]) + ((0.0045629199999999998 * fVec10[((IOTA - 35) & 127)]) + ((0.00132022 * fVec10[((IOTA - 32) & 127)]) + ((0.0062597399999999997 * fVec10[((IOTA - 31) & 127)]) + ((0.0056072600000000002 * fVec10[((IOTA - 27) & 127)]) + ((0.0028673099999999997 * fVec10[((IOTA - 25) & 127)]) + ((0.019039799999999999 * fVec10[((IOTA - 23) & 127)]) + ((0.017118299999999999 * fVec10[((IOTA - 22) & 127)]) + ((0.0062560200000000002 * fVec10[((IOTA - 20) & 127)]) + ((0.020002100000000002 * fVec10[((IOTA - 19) & 127)]) + ((0.0041887600000000006 * fVec10[((IOTA - 17) & 127)]) + ((0.0014716100000000001 * fVec10[((IOTA - 14) & 127)]) + ((0.0090645100000000013 * fVec10[((IOTA - 13) & 127)]) + ((0.00086152300000000011 * fVec10[((IOTA - 10) & 127)]) + ((8.9981100000000001e-06 * fVec10[((IOTA - 8) & 127)]) + ((0.00017556200000000001 * fVec10[((IOTA - 7) & 127)]) + ((0.000124945 * fVec10[((IOTA - 5) & 127)]) + ((0.00016682200000000001 * fVec10[((IOTA - 4) & 127)]) + ((6.6630700000000012e-05 * fVec10[((IOTA - 1) & 127)]) + ((4.9924900000000007e-05 * fVec10[((IOTA - 114) & 127)]) + ((2.4116600000000002e-05 * fVec10[((IOTA - 113) & 127)]) + ((0.000123721 * fVec10[((IOTA - 112) & 127)]) + ((0.00017926800000000001 * fVec10[((IOTA - 111) & 127)]) + ((5.1830600000000005e-05 * fVec10[((IOTA - 109) & 127)]) + ((2.1457400000000002e-05 * fVec10[((IOTA - 108) & 127)]) + ((0.000127255 * fVec10[((IOTA - 107) & 127)]) + ((0.00017192499999999999 * fVec10[((IOTA - 106) & 127)]) + ((0.000196808 * fVec10[((IOTA - 105) & 127)]) + ((0.000165983 * fVec10[((IOTA - 103) & 127)]) + ((0.00045185199999999998 * fVec10[((IOTA - 102) & 127)]) + ((0.00019163000000000001 * fVec10[((IOTA - 101) & 127)]) + ((7.4874400000000003e-05 * fVec10[((IOTA - 98) & 127)]) + ((0.00068954300000000004 * fVec10[((IOTA - 95) & 127)]) + ((0.00019426900000000001 * fVec10[((IOTA - 94) & 127)]) + ((0.00036535500000000004 * fVec10[((IOTA - 93) & 127)]) + ((0.00113838 * fVec10[((IOTA - 92) & 127)]) + ((0.00135228 * fVec10[((IOTA - 91) & 127)]) + ((0.00061579300000000011 * fVec10[((IOTA - 90) & 127)]) + ((3.3239100000000005e-05 * fVec10[((IOTA - 87) & 127)]) + ((0.00027159100000000001 * fVec10[((IOTA - 86) & 127)]) + ((0.00083452999999999999 * fVec10[((IOTA - 83) & 127)]) + ((0.00051736399999999997 * fVec10[((IOTA - 82) & 127)]) + ((0.00092786600000000006 * fVec10[((IOTA - 80) & 127)]) + ((0.00187605 * fVec10[((IOTA - 79) & 127)]) + ((0.00014753499999999999 * fVec10[((IOTA - 78) & 127)]) + ((2.0620400000000002e-06 * fVec11[((IOTA - 126) & 127)]) + ((4.3651699999999997e-06 * fVec11[((IOTA - 125) & 127)]) + ((9.8025599999999989e-06 * fVec11[((IOTA - 123) & 127)]) + ((4.5363300000000005e-06 * fVec11[((IOTA - 120) & 127)]) + ((7.2638200000000005e-05 * fVec11[((IOTA - 117) & 127)]) + ((0.00026698599999999998 * fVec11[((IOTA - 116) & 127)]) + ((2.7375100000000002e-05 * fVec11[((IOTA - 115) & 127)]) + ((0.0016614500000000001 * fVec11[((IOTA - 66) & 127)]) + ((0.0026933400000000002 * fVec11[((IOTA - 65) & 127)]) + ((0.0033985199999999999 * fVec11[((IOTA - 64) & 127)]) + ((0.0054209699999999998 * fVec11[((IOTA - 63) & 127)]) + ((0.0038534000000000003 * fVec11[((IOTA - 62) & 127)]) + ((0.00150731 * fVec11[((IOTA - 61) & 127)]) + ((0.00172416 * fVec11[((IOTA - 60) & 127)]) + ((5.7417900000000005e-05 * fVec11[((IOTA - 58) & 127)]) + ((0.00292822 * fVec11[((IOTA - 54) & 127)]) + ((0.00231401 * fVec11[((IOTA - 53) & 127)]) + ((0.0034388399999999999 * fVec11[((IOTA - 45) & 127)]) + ((0.0031324200000000003 * fVec11[((IOTA - 44) & 127)]) + ((0.0097209400000000008 * fVec11[((IOTA - 41) & 127)]) + ((0.0084834000000000003 * fVec11[((IOTA - 40) & 127)]) + ((0.0055612700000000001 * fVec11[((IOTA - 39) & 127)]) + ((0.0021108199999999998 * fVec11[((IOTA - 38) & 127)]) + ((0.0155897 * fVec11[((IOTA - 37) & 127)]) + ((0.0193621 * fVec11[((IOTA - 36) & 127)]) + ((0.0023860600000000002 * fVec11[((IOTA - 35) & 127)]) + ((0.0080486600000000009 * fVec11[((IOTA - 30) & 127)]) + ((0.012241800000000001 * fVec11[((IOTA - 26) & 127)]) + ((0.00871626 * fVec11[((IOTA - 22) & 127)]) + ((0.034405700000000004 * fVec11[((IOTA - 21) & 127)]) + ((0.0063924000000000003 * fVec11[((IOTA - 20) & 127)]) + ((0.022591999999999998 * fVec11[((IOTA - 19) & 127)]) + ((0.026366200000000003 * fVec11[((IOTA - 18) & 127)]) + ((0.0176843 * fVec11[((IOTA - 16) & 127)]) + ((0.025000600000000001 * fVec11[((IOTA - 13) & 127)]) + ((0.0184747 * fVec11[((IOTA - 12) & 127)]) + ((0.0127194 * fVec11[((IOTA - 11) & 127)]) + ((0.0029847899999999998 * fVec11[((IOTA - 9) & 127)]) + ((0.0020377999999999998 * fVec11[((IOTA - 7) & 127)]) + ((0.00042369400000000001 * fVec11[((IOTA - 5) & 127)]) + ((0.00073914 * fVec11[((IOTA - 4) & 127)]) + ((0.00028138600000000001 * fVec11[((IOTA - 3) & 127)]) + ((8.5198599999999984e-06 * fTemp11) + ((0.00020037400000000002 * fVec11[((IOTA - 112) & 127)]) + ((0.00027241800000000002 * fVec11[((IOTA - 111) & 127)]) + ((0.00014274500000000003 * fVec11[((IOTA - 105) & 127)]) + ((2.8564700000000001e-05 * fVec11[((IOTA - 103) & 127)]) + ((0.000335003 * fVec11[((IOTA - 102) & 127)]) + ((0.000159333 * fVec11[((IOTA - 101) & 127)]) + ((0.00193815 * fVec11[((IOTA - 94) & 127)]) + ((0.00248299 * fVec11[((IOTA - 93) & 127)]) + ((0.00032790100000000002 * fVec11[((IOTA - 92) & 127)]) + ((0.000935657 * fVec11[((IOTA - 90) & 127)]) + ((0.00115957 * fVec11[((IOTA - 85) & 127)]) + ((0.0014868800000000001 * fVec11[((IOTA - 84) & 127)]) + ((0.0011174100000000001 * fVec11[((IOTA - 83) & 127)]) + ((0.00071595500000000011 * fVec11[((IOTA - 82) & 127)]) + ((0.00084476400000000002 * fVec11[((IOTA - 81) & 127)]) + ((0.0011752900000000001 * fVec11[((IOTA - 80) & 127)]) + ((0.00022800300000000001 * fVec11[((IOTA - 79) & 127)]) + ((5.6292200000000003e-05 * fVec11[((IOTA - 76) & 127)]) + ((0.0021444000000000003 * fVec11[((IOTA - 75) & 127)]) + ((4.0625199999999998e-07 * fVec12[((IOTA - 126) & 127)]) + ((6.5155300000000006e-08 * fVec12[((IOTA - 125) & 127)]) + ((4.2651e-06 * fVec12[((IOTA - 124) & 127)]) + ((1.7069900000000001e-05 * fVec12[((IOTA - 123) & 127)]) + ((2.37743e-05 * fVec12[((IOTA - 122) & 127)]) + ((4.763620000000001e-05 * fVec12[((IOTA - 121) & 127)]) + ((3.0153800000000003e-05 * fVec12[((IOTA - 120) & 127)]) + ((9.3094800000000015e-05 * fVec12[((IOTA - 117) & 127)]) + ((4.1650900000000005e-05 * fVec12[((IOTA - 116) & 127)]) + ((6.2211499999999999e-05 * fVec12[((IOTA - 115) & 127)]) + ((6.6434300000000015e-05 * fVec12[((IOTA - 114) & 127)]) + ((0.00017708100000000002 * fVec12[((IOTA - 111) & 127)]) + ((0.000302894 * fVec12[((IOTA - 110) & 127)]) + ((2.8490500000000004e-05 * fVec12[((IOTA - 109) & 127)]) + ((6.4782800000000006e-05 * fVec12[((IOTA - 105) & 127)]) + ((0.0031248600000000001 * fVec12[((IOTA - 33) & 127)]) + ((0.010657700000000001 * fVec12[((IOTA - 32) & 127)]) + ((0.0123298 * fVec12[((IOTA - 29) & 127)]) + ((0.023814399999999999 * fVec12[((IOTA - 28) & 127)]) + ((0.015685999999999999 * fVec12[((IOTA - 24) & 127)]) + ((0.026830500000000004 * fVec12[((IOTA - 23) & 127)]) + ((0.0044038100000000002 * fVec12[((IOTA - 20) & 127)]) + ((0.025842800000000003 * fVec12[((IOTA - 19) & 127)]) + ((0.0039745500000000003 * fVec12[((IOTA - 17) & 127)]) + ((0.0027138700000000002 * fVec12[((IOTA - 14) & 127)]) + ((0.0139846 * fVec12[((IOTA - 13) & 127)]) + ((0.0013470200000000002 * fVec12[((IOTA - 10) & 127)]) + ((0.00043533500000000002 * fVec12[((IOTA - 8) & 127)]) + ((8.6044500000000013e-05 * fVec12[((IOTA - 7) & 127)]) + ((0.000319706 * fVec12[((IOTA - 5) & 127)]) + ((0.00024937100000000002 * fVec12[((IOTA - 4) & 127)]) + ((5.3838100000000009e-05 * fVec12[((IOTA - 1) & 127)]) + ((2.6819199999999998e-06 * fTemp12) + ((0.0091450500000000001 * fVec12[((IOTA - 38) & 127)]) + ((0.00768047 * fVec12[((IOTA - 37) & 127)]) + ((0.0010365700000000001 * fVec12[((IOTA - 96) & 127)]) + ((0.00162586 * fVec12[((IOTA - 95) & 127)]) + ((0.00062772300000000006 * fVec12[((IOTA - 92) & 127)]) + ((0.00042317400000000007 * fVec12[((IOTA - 91) & 127)]) + ((0.0007219450000000001 * fVec12[((IOTA - 86) & 127)]) + ((0.00095599600000000008 * fVec12[((IOTA - 85) & 127)]) + ((0.0013169100000000001 * fVec12[((IOTA - 84) & 127)]) + ((0.000376642 * fVec12[((IOTA - 83) & 127)]) + ((5.7134700000000007e-05 * fVec12[((IOTA - 82) & 127)]) + ((0.00077003500000000008 * fVec12[((IOTA - 81) & 127)]) + ((0.00087973800000000013 * fVec12[((IOTA - 80) & 127)]) + ((0.00032809400000000002 * fVec12[((IOTA - 79) & 127)]) + ((0.0026185600000000002 * fVec12[((IOTA - 78) & 127)]) + ((0.0028955700000000001 * fVec12[((IOTA - 77) & 127)]) + ((0.00038572900000000002 * fVec12[((IOTA - 74) & 127)]) + ((0.00085528000000000004 * fVec12[((IOTA - 73) & 127)]) + ((0.0005309300000000001 * fVec12[((IOTA - 70) & 127)]) + ((0.0037638799999999998 * fVec12[((IOTA - 69) & 127)]) + ((0.0018805400000000002 * fVec12[((IOTA - 65) & 127)]) + ((0.00082699499999999997 * fVec12[((IOTA - 64) & 127)]) + ((0.00056278600000000002 * fVec12[((IOTA - 62) & 127)]) + ((0.0029268000000000002 * fVec12[((IOTA - 61) & 127)]) + ((0.00299716 * fVec12[((IOTA - 60) & 127)]) + ((7.7010600000000011e-05 * fVec12[((IOTA - 56) & 127)]) + ((0.00037668800000000002 * fVec12[((IOTA - 52) & 127)]) + ((0.00122064 * fVec12[((IOTA - 51) & 127)]) + ((0.000190838 * fVec12[((IOTA - 49) & 127)]) + ((0.00077671800000000003 * fVec12[((IOTA - 48) & 127)]) + ((0.00607597 * fVec12[((IOTA - 47) & 127)]) + ((0.0014073800000000002 * fVec12[((IOTA - 46) & 127)]) + ((0.0031471900000000002 * fVec12[((IOTA - 44) & 127)]) + ((0.0043989099999999998 * fVec12[((IOTA - 43) & 127)]) + ((0.0034855200000000002 * fVec12[((IOTA - 42) & 127)]) + ((9.49831e-07 * fVec13[((IOTA - 126) & 127)]) + ((3.1931999999999998e-06 * fVec13[((IOTA - 125) & 127)]) + ((5.5764699999999995e-06 * fVec13[((IOTA - 124) & 127)]) + ((1.0968800000000001e-07 * fVec13[((IOTA - 123) & 127)]) + ((0.0014048700000000001 * fVec13[((IOTA - 7) & 127)]) + ((0.00036872500000000003 * fVec13[((IOTA - 5) & 127)]) + ((0.000105049 * fVec13[((IOTA - 4) & 127)]) + ((0.00164861 * fVec13[((IOTA - 13) & 127)]) + ((0.022289900000000001 * fVec13[((IOTA - 12) & 127)]) + ((0.012312099999999999 * fVec13[((IOTA - 11) & 127)]) + ((0.00071207799999999999 * fVec13[((IOTA - 9) & 127)]) + ((0.000462468 * fVec13[((IOTA - 8) & 127)]) + ((2.12878e-05 * fVec13[((IOTA - 121) & 127)]) + ((8.7920300000000006e-05 * fVec13[((IOTA - 113) & 127)]) + ((0.00016192500000000002 * fVec13[((IOTA - 112) & 127)]) + ((0.00036806100000000004 * fVec13[((IOTA - 111) & 127)]) + ((0.00033710000000000001 * fVec13[((IOTA - 110) & 127)]) + ((4.8992500000000009e-05 * fVec13[((IOTA - 109) & 127)]) + ((0.00022824300000000002 * fVec13[((IOTA - 107) & 127)]) + ((0.00058892300000000009 * fVec13[((IOTA - 106) & 127)]) + ((0.00025375400000000002 * fVec13[((IOTA - 103) & 127)]) + ((0.00094852700000000001 * fVec13[((IOTA - 99) & 127)]) + ((0.00093470300000000005 * fVec13[((IOTA - 98) & 127)]) + ((0.0026319900000000003 * fVec13[((IOTA - 95) & 127)]) + ((0.0026384300000000002 * fVec13[((IOTA - 94) & 127)]) + ((0.00073298899999999997 * fVec13[((IOTA - 93) & 127)]) + ((0.00015313300000000001 * fVec13[((IOTA - 89) & 127)]) + ((0.00095595100000000002 * fVec13[((IOTA - 84) & 127)]) + ((0.00027629299999999999 * fVec13[((IOTA - 82) & 127)]) + ((0.0031433800000000003 * fVec13[((IOTA - 81) & 127)]) + ((0.0029007100000000004 * fVec13[((IOTA - 80) & 127)]) + ((0.0015954299999999999 * fVec13[((IOTA - 77) & 127)]) + ((0.0028552399999999998 * fVec13[((IOTA - 76) & 127)]) + ((0.0042386799999999999 * fVec13[((IOTA - 69) & 127)]) + ((0.0019517800000000002 * fVec13[((IOTA - 65) & 127)]) + ((0.0014053899999999999 * fVec13[((IOTA - 64) & 127)]) + ((0.00086168600000000018 * fVec13[((IOTA - 63) & 127)]) + ((0.0048033500000000005 * fVec13[((IOTA - 62) & 127)]) + ((0.0029130099999999997 * fVec13[((IOTA - 61) & 127)]) + ((0.00047407800000000001 * fVec13[((IOTA - 54) & 127)]) + ((0.00202768 * fVec13[((IOTA - 53) & 127)]) + ((3.5748100000000004e-05 * fVec13[((IOTA - 50) & 127)]) + ((0.0030451499999999999 * fVec13[((IOTA - 46) & 127)]) + ((0.0027342900000000003 * fVec13[((IOTA - 44) & 127)]) + ((0.00039842200000000006 * fVec13[((IOTA - 43) & 127)]) + ((0.0057944000000000008 * fVec13[((IOTA - 42) & 127)]) + ((0.0023061699999999997 * fVec13[((IOTA - 41) & 127)]) + ((0.009425300000000001 * fVec13[((IOTA - 39) & 127)]) + ((0.0020945399999999998 * fVec13[((IOTA - 38) & 127)]) + ((0.0029420500000000003 * fVec13[((IOTA - 36) & 127)]) + ((0.0185694 * fVec13[((IOTA - 35) & 127)]) + ((0.0113855 * fVec13[((IOTA - 34) & 127)]) + ((0.00026793500000000002 * fVec13[((IOTA - 33) & 127)]) + ((0.0051319800000000004 * fVec13[((IOTA - 32) & 127)]) + ((0.012179199999999999 * fVec13[((IOTA - 31) & 127)]) + ((0.012681100000000001 * fVec13[((IOTA - 24) & 127)]) + ((0.045592300000000002 * fVec13[((IOTA - 23) & 127)]) + ((0.015610000000000001 * fVec13[((IOTA - 22) & 127)]) + ((0.0327345 * fVec13[((IOTA - 21) & 127)]) + ((0.084608899999999987 * fVec13[((IOTA - 20) & 127)]) + ((0.024154900000000003 * fVec13[((IOTA - 19) & 127)]) + ((8.8079300000000002e-07 * fVec14[((IOTA - 126) & 127)]) + ((2.3561399999999996e-06 * fVec14[((IOTA - 124) & 127)]) + ((7.3129899999999994e-06 * fVec14[((IOTA - 118) & 127)]) + ((8.74663e-05 * fVec14[((IOTA - 113) & 127)]) + ((8.9256100000000021e-05 * fVec14[((IOTA - 112) & 127)]) + ((5.0065999999999998e-05 * fVec14[((IOTA - 109) & 127)]) + ((4.0718199999999999e-05 * fVec14[((IOTA - 107) & 127)]) + ((0.000190676 * fVec14[((IOTA - 106) & 127)]) + ((6.0194500000000008e-05 * fVec14[((IOTA - 105) & 127)]) + ((0.0010829400000000001 * fVec14[((IOTA - 104) & 127)]) + ((0.00074344099999999996 * fVec14[((IOTA - 103) & 127)]) + ((0.00017791700000000001 * fVec14[((IOTA - 101) & 127)]) + ((0.00123146 * fVec14[((IOTA - 100) & 127)]) + ((0.0012094300000000001 * fVec14[((IOTA - 99) & 127)]) + ((0.010247200000000001 * fVec14[((IOTA - 27) & 127)]) + ((0.0162706 * fVec14[((IOTA - 26) & 127)]) + ((0.016289999999999999 * fVec14[((IOTA - 25) & 127)]) + ((0.036860799999999999 * fVec14[((IOTA - 24) & 127)]) + ((0.038006600000000001 * fVec14[((IOTA - 23) & 127)]) + ((0.019427300000000002 * fVec14[((IOTA - 22) & 127)]) + ((0.025630400000000001 * fVec14[((IOTA - 21) & 127)]) + ((0.033451700000000001 * fVec14[((IOTA - 20) & 127)]) + ((0.029137300000000001 * fVec14[((IOTA - 13) & 127)]) + ((0.048090000000000001 * fVec14[((IOTA - 12) & 127)]) + ((0.0102197 * fVec14[((IOTA - 11) & 127)]) + ((0.00102731 * fVec14[((IOTA - 9) & 127)]) + ((0.00033557999999999998 * fVec14[((IOTA - 8) & 127)]) + ((0.00072926300000000007 * fVec14[((IOTA - 7) & 127)]) + ((0.00062620699999999994 * fVec14[((IOTA - 5) & 127)]) + ((6.2166100000000008e-05 * fVec14[((IOTA - 4) & 127)]) + ((2.7781499999999998e-06 * fTemp14) + ((0.0119731 * fVec14[((IOTA - 30) & 127)]) + ((0.00102399 * fVec14[((IOTA - 95) & 127)]) + ((0.0011951900000000001 * fVec14[((IOTA - 94) & 127)]) + ((0.00154042 * fVec14[((IOTA - 85) & 127)]) + ((0.00182591 * fVec14[((IOTA - 84) & 127)]) + ((0.00053972300000000009 * fVec14[((IOTA - 82) & 127)]) + ((0.00184866 * fVec14[((IOTA - 81) & 127)]) + ((0.000571055 * fVec14[((IOTA - 80) & 127)]) + ((0.0019816600000000001 * fVec14[((IOTA - 77) & 127)]) + ((0.000899127 * fVec14[((IOTA - 76) & 127)]) + ((0.00072784599999999998 * fVec14[((IOTA - 72) & 127)]) + ((0.0026818300000000001 * fVec14[((IOTA - 71) & 127)]) + ((0.0017303900000000001 * fVec14[((IOTA - 70) & 127)]) + ((0.0011627499999999999 * fVec14[((IOTA - 59) & 127)]) + ((0.00114566 * fVec14[((IOTA - 58) & 127)]) + ((0.0014845699999999999 * fVec14[((IOTA - 57) & 127)]) + ((0.0018366700000000001 * fVec14[((IOTA - 56) & 127)]) + ((0.0018739399999999999 * fVec14[((IOTA - 55) & 127)]) + ((0.00044913200000000004 * fVec14[((IOTA - 54) & 127)]) + ((0.0026997300000000004 * fVec14[((IOTA - 52) & 127)]) + ((0.00353529 * fVec14[((IOTA - 51) & 127)]) + ((0.00049338800000000009 * fVec14[((IOTA - 48) & 127)]) + ((0.0045044300000000002 * fVec14[((IOTA - 47) & 127)]) + ((4.1378300000000003e-05 * fVec14[((IOTA - 46) & 127)]) + ((0.00152776 * fVec14[((IOTA - 43) & 127)]) + ((0.0051684499999999998 * fVec14[((IOTA - 42) & 127)]) + ((0.0082244100000000014 * fVec14[((IOTA - 39) & 127)]) + ((0.0018586200000000001 * fVec14[((IOTA - 38) & 127)]) + ((3.9174899999999995e-06 * fVec15[((IOTA - 124) & 127)]) + ((2.3008000000000001e-06 * fVec15[((IOTA - 123) & 127)]) + ((2.30759e-05 * fVec15[((IOTA - 122) & 127)]) + ((4.44424e-05 * fVec15[((IOTA - 117) & 127)]) + ((2.0348199999999997e-06 * fVec15[((IOTA - 115) & 127)]) + ((0.00014602200000000002 * fVec15[((IOTA - 112) & 127)]) + ((0.000200705 * fVec15[((IOTA - 111) & 127)]) + ((0.00021466900000000001 * fVec15[((IOTA - 110) & 127)]) + ((0.00019825999999999999 * fVec15[((IOTA - 106) & 127)]) + ((0.00061293399999999998 * fVec15[((IOTA - 105) & 127)]) + ((0.00028580599999999999 * fVec15[((IOTA - 104) & 127)]) + ((0.00012016899999999999 * fVec15[((IOTA - 103) & 127)]) + ((5.1820600000000003e-05 * fVec15[((IOTA - 1) & 127)]) + ((0.014182999999999999 * fVec15[((IOTA - 17) & 127)]) + ((0.0067481200000000007 * fVec15[((IOTA - 16) & 127)]) + ((0.0024826200000000001 * fVec15[((IOTA - 14) & 127)]) + ((0.010515500000000001 * fVec15[((IOTA - 13) & 127)]) + ((0.00032269000000000004 * fVec15[((IOTA - 10) & 127)]) + ((0.00063523900000000001 * fVec15[((IOTA - 8) & 127)]) + ((0.000129078 * fVec15[((IOTA - 7) & 127)]) + ((0.00053025000000000001 * fVec15[((IOTA - 5) & 127)]) + ((0.00020292900000000002 * fVec15[((IOTA - 4) & 127)]) + ((0.00028350700000000001 * fVec15[((IOTA - 102) & 127)]) + ((0.00029655200000000006 * fVec15[((IOTA - 99) & 127)]) + ((0.00078374800000000002 * fVec15[((IOTA - 98) & 127)]) + ((0.00029986299999999999 * fVec15[((IOTA - 97) & 127)]) + ((0.00067223400000000007 * fVec15[((IOTA - 94) & 127)]) + ((0.0013073300000000002 * fVec15[((IOTA - 93) & 127)]) + ((0.0013844899999999999 * fVec15[((IOTA - 92) & 127)]) + ((0.00041581000000000002 * fVec15[((IOTA - 88) & 127)]) + ((0.000846243 * fVec15[((IOTA - 85) & 127)]) + ((0.00053294300000000002 * fVec15[((IOTA - 84) & 127)]) + ((0.00060163399999999998 * fVec15[((IOTA - 80) & 127)]) + ((0.0018310100000000001 * fVec15[((IOTA - 79) & 127)]) + ((0.0015329200000000001 * fVec15[((IOTA - 74) & 127)]) + ((0.00088242499999999994 * fVec15[((IOTA - 73) & 127)]) + ((0.0012564 * fVec15[((IOTA - 69) & 127)]) + ((0.000106876 * fVec15[((IOTA - 68) & 127)]) + ((5.6309300000000007e-05 * fVec15[((IOTA - 66) & 127)]) + ((0.0022511199999999997 * fVec15[((IOTA - 65) & 127)]) + ((0.00251024 * fVec15[((IOTA - 64) & 127)]) + ((0.0033029299999999999 * fVec15[((IOTA - 61) & 127)]) + ((0.0033276300000000003 * fVec15[((IOTA - 60) & 127)]) + ((0.00121754 * fVec15[((IOTA - 55) & 127)]) + ((0.0013364400000000002 * fVec15[((IOTA - 54) & 127)]) + ((0.0023798400000000003 * fVec15[((IOTA - 51) & 127)]) + ((0.0024073300000000001 * fVec15[((IOTA - 50) & 127)]) + ((2.2802500000000004e-05 * fVec15[((IOTA - 47) & 127)]) + ((0.0033117200000000002 * fVec15[((IOTA - 46) & 127)]) + ((0.00077673400000000006 * fVec15[((IOTA - 45) & 127)]) + ((0.0072897299999999995 * fVec15[((IOTA - 42) & 127)]) + ((0.00136954 * fVec15[((IOTA - 41) & 127)]) + ((0.0025440700000000003 * fVec15[((IOTA - 39) & 127)]) + ((0.00062277700000000003 * fVec15[((IOTA - 37) & 127)]) + ((0.0073965899999999998 * fVec15[((IOTA - 36) & 127)]) + ((0.0019310799999999999 * fVec15[((IOTA - 35) & 127)]) + ((0.00106083 * fVec15[((IOTA - 33) & 127)]) + ((0.020638200000000002 * fVec15[((IOTA - 32) & 127)]) + ((0.00084266199999999999 * fVec15[((IOTA - 31) & 127)]) + ((0.0090219900000000006 * fVec15[((IOTA - 28) & 127)]) + ((0.0221418 * fVec15[((IOTA - 27) & 127)]) + ((0.0036234800000000001 * fVec15[((IOTA - 26) & 127)]) + ((0.0061371100000000003 * fVec15[((IOTA - 24) & 127)]) + ((0.040377299999999998 * fVec15[((IOTA - 23) & 127)]) + ((0.0047783499999999998 * fVec15[((IOTA - 20) & 127)]) + ((8.72722e-07 * fVec16[((IOTA - 126) & 127)]) + ((2.1165599999999999e-06 * fVec16[((IOTA - 125) & 127)]) + ((7.3710100000000001e-06 * fVec16[((IOTA - 122) & 127)]) + ((1.46484e-05 * fVec16[((IOTA - 121) & 127)]) + ((0.00012623700000000002 * fVec16[((IOTA - 112) & 127)]) + ((0.00049957300000000001 * fVec16[((IOTA - 89) & 127)]) + ((0.00047812500000000003 * fVec16[((IOTA - 87) & 127)]) + ((0.00080239700000000005 * fVec16[((IOTA - 86) & 127)]) + ((0.00114842 * fVec16[((IOTA - 79) & 127)]) + ((0.00084254499999999999 * fVec16[((IOTA - 78) & 127)]) + ((0.00058521400000000002 * fVec16[((IOTA - 76) & 127)]) + ((0.0031232299999999998 * fVec16[((IOTA - 75) & 127)]) + ((0.0039299499999999998 * fVec16[((IOTA - 74) & 127)]) + ((0.00148547 * fVec16[((IOTA - 71) & 127)]) + ((0.0015915 * fVec16[((IOTA - 70) & 127)]) + ((0.00078234799999999998 * fVec16[((IOTA - 69) & 127)]) + ((0.00069670400000000003 * fVec16[((IOTA - 66) & 127)]) + ((0.00096430799999999998 * fVec16[((IOTA - 59) & 127)]) + ((0.00037265600000000002 * fVec16[((IOTA - 58) & 127)]) + ((0.00057995900000000001 * fVec16[((IOTA - 57) & 127)]) + ((0.00115193 * fVec16[((IOTA - 56) & 127)]) + ((0.00079223400000000006 * fVec16[((IOTA - 55) & 127)]) + ((0.0061534800000000002 * fVec16[((IOTA - 52) & 127)]) + ((0.0071582199999999999 * fVec16[((IOTA - 51) & 127)]) + ((0.00165015 * fVec16[((IOTA - 50) & 127)]) + ((0.00086588999999999991 * fVec16[((IOTA - 49) & 127)]) + ((0.0062358300000000004 * fVec16[((IOTA - 48) & 127)]) + ((0.0050313800000000002 * fVec16[((IOTA - 47) & 127)]) + ((0.0031040800000000004 * fVec16[((IOTA - 46) & 127)]) + ((0.0050040100000000006 * fVec16[((IOTA - 45) & 127)]) + ((0.0027939900000000001 * fVec16[((IOTA - 44) & 127)]) + ((0.0065439699999999996 * fVec16[((IOTA - 43) & 127)]) + ((0.00124876 * fVec16[((IOTA - 42) & 127)]) + ((0.020424000000000001 * fVec16[((IOTA - 33) & 127)]) + ((0.0045740400000000006 * fVec16[((IOTA - 32) & 127)]) + ((0.0090182999999999999 * fVec16[((IOTA - 29) & 127)]) + ((0.00841159 * fVec16[((IOTA - 28) & 127)]) + ((0.046303400000000002 * fVec16[((IOTA - 25) & 127)]) + ((0.022126100000000003 * fVec16[((IOTA - 24) & 127)]) + ((0.023621 * fVec16[((IOTA - 23) & 127)]) + ((0.034497100000000003 * fVec16[((IOTA - 22) & 127)]) + ((0.019118099999999999 * fVec16[((IOTA - 21) & 127)]) + ((0.0039120300000000004 * fVec16[((IOTA - 18) & 127)]) + ((0.034787400000000003 * fVec16[((IOTA - 13) & 127)]) + ((0.032626599999999999 * fVec16[((IOTA - 12) & 127)]) + ((0.010078100000000001 * fVec16[((IOTA - 11) & 127)]) + ((0.0033341600000000001 * fVec16[((IOTA - 9) & 127)]) + ((0.00170722 * fVec16[((IOTA - 7) & 127)]) + ((0.00039425900000000005 * fVec16[((IOTA - 5) & 127)]) + ((8.8433799999999993e-06 * fVec16[((IOTA - 4) & 127)]) + ((1.19794e-06 * fVec16[((IOTA - 3) & 127)]) + ((1.7201900000000002e-05 * fTemp16) + ((0.00040145799999999999 * fVec16[((IOTA - 111) & 127)]) + ((0.000414208 * fVec16[((IOTA - 110) & 127)]) + ((0.00021768299999999998 * fVec16[((IOTA - 107) & 127)]) + ((0.000541122 * fVec16[((IOTA - 106) & 127)]) + ((0.000823148 * fVec16[((IOTA - 105) & 127)]) + ((0.00019509200000000001 * fVec16[((IOTA - 103) & 127)]) + ((0.0013184900000000001 * fVec16[((IOTA - 102) & 127)]) + ((0.0010226299999999998 * fVec16[((IOTA - 101) & 127)]) + ((0.000125802 * fVec16[((IOTA - 100) & 127)]) + ((0.00083710400000000008 * fVec16[((IOTA - 99) & 127)]) + ((0.00236228 * fVec16[((IOTA - 98) & 127)]) + ((0.0017316800000000002 * fVec16[((IOTA - 97) & 127)]) + ((1.60144e-05 * fVec17[((IOTA - 123) & 127)]) + ((3.7959300000000001e-05 * fVec17[((IOTA - 122) & 127)]) + ((1.1808799999999999e-05 * fVec17[((IOTA - 121) & 127)]) + ((5.3246100000000005e-05 * fVec17[((IOTA - 118) & 127)]) + ((4.9970700000000006e-05 * fVec17[((IOTA - 117) & 127)]) + ((6.7732400000000001e-06 * fVec17[((IOTA - 116) & 127)]) + ((0.00013832100000000001 * fVec17[((IOTA - 113) & 127)]) + ((0.00034154700000000004 * fVec17[((IOTA - 112) & 127)]) + ((5.9127099999999998e-05 * fVec17[((IOTA - 111) & 127)]) + ((1.61672e-05 * fVec17[((IOTA - 109) & 127)]) + ((0.000403428 * fVec17[((IOTA - 108) & 127)]) + ((2.9283000000000004e-05 * fVec17[((IOTA - 107) & 127)]) + ((0.0013749000000000001 * fVec17[((IOTA - 80) & 127)]) + ((0.00137465 * fVec17[((IOTA - 79) & 127)]) + ((0.00104108 * fVec17[((IOTA - 77) & 127)]) + ((0.00091011900000000014 * fVec17[((IOTA - 76) & 127)]) + ((0.0020970900000000002 * fVec17[((IOTA - 75) & 127)]) + ((0.00061507900000000004 * fVec17[((IOTA - 74) & 127)]) + ((0.00066226900000000005 * fVec17[((IOTA - 71) & 127)]) + ((0.0048415200000000002 * fVec17[((IOTA - 70) & 127)]) + ((0.0022895300000000001 * fVec17[((IOTA - 69) & 127)]) + ((0.0025702799999999999 * fVec17[((IOTA - 65) & 127)]) + ((0.00035714999999999998 * fVec17[((IOTA - 64) & 127)]) + ((0.00088026800000000013 * fVec17[((IOTA - 61) & 127)]) + ((0.0015539499999999999 * fVec17[((IOTA - 55) & 127)]) + ((0.0034851399999999999 * fVec17[((IOTA - 54) & 127)]) + ((0.0013564600000000001 * fVec17[((IOTA - 53) & 127)]) + ((0.00033219200000000003 * fVec17[((IOTA - 52) & 127)]) + ((0.00324858 * fVec17[((IOTA - 50) & 127)]) + ((0.0029808 * fVec17[((IOTA - 49) & 127)]) + ((0.00093466200000000006 * fVec17[((IOTA - 46) & 127)]) + ((0.00039698400000000002 * fVec17[((IOTA - 43) & 127)]) + ((0.00048442499999999997 * fVec17[((IOTA - 42) & 127)]) + ((0.00013193900000000003 * fVec17[((IOTA - 41) & 127)]) + ((0.00084730000000000016 * fVec17[((IOTA - 40) & 127)]) + ((0.0038824599999999999 * fVec17[((IOTA - 38) & 127)]) + ((0.0023402100000000001 * fVec17[((IOTA - 35) & 127)]) + ((0.0090115600000000001 * fVec17[((IOTA - 34) & 127)]) + ((0.0145007 * fVec17[((IOTA - 31) & 127)]) + ((0.00672019 * fVec17[((IOTA - 30) & 127)]) + ((0.019919199999999998 * fVec17[((IOTA - 27) & 127)]) + ((0.018401899999999999 * fVec17[((IOTA - 23) & 127)]) + ((0.019435299999999999 * fVec17[((IOTA - 22) & 127)]) + ((0.0052171300000000004 * fVec17[((IOTA - 20) & 127)]) + ((0.00278912 * fVec17[((IOTA - 19) & 127)]) + ((0.0067436400000000004 * fVec17[((IOTA - 17) & 127)]) + ((0.0015875500000000001 * fVec17[((IOTA - 16) & 127)]) + ((0.00088633199999999998 * fVec17[((IOTA - 14) & 127)]) + ((0.0047006599999999997 * fVec17[((IOTA - 13) & 127)]) + ((2.4513200000000001e-05 * fVec17[((IOTA - 11) & 127)]) + ((0.00016840400000000001 * fVec17[((IOTA - 10) & 127)]) + ((1.7683500000000001e-05 * fVec17[((IOTA - 8) & 127)]) + ((7.4087300000000005e-05 * fVec17[((IOTA - 7) & 127)]) + ((0.00013083600000000001 * fVec17[((IOTA - 5) & 127)]) + ((0.00014402999999999999 * fVec17[((IOTA - 4) & 127)]) + ((3.4461000000000001e-05 * fVec17[((IOTA - 1) & 127)]) + ((5.6117600000000006e-05 * fVec17[((IOTA - 103) & 127)]) + ((0.00064464300000000008 * fVec17[((IOTA - 102) & 127)]) + ((6.57163e-05 * fVec17[((IOTA - 101) & 127)]) + ((0.00043101500000000003 * fVec17[((IOTA - 98) & 127)]) + ((0.00047464100000000004 * fVec17[((IOTA - 97) & 127)]) + ((0.00050108599999999998 * fVec17[((IOTA - 96) & 127)]) + ((0.00035622799999999999 * fVec17[((IOTA - 95) & 127)]) + ((0.000189175 * fVec17[((IOTA - 94) & 127)]) + ((0.000113763 * fVec17[((IOTA - 93) & 127)]) + ((0.00014460699999999999 * fVec17[((IOTA - 89) & 127)]) + ((0.00064626400000000002 * fVec17[((IOTA - 88) & 127)]) + ((0.00034561500000000002 * fVec17[((IOTA - 87) & 127)]) + ((4.3969300000000004e-08 * fVec18[((IOTA - 126) & 127)]) + ((4.9046399999999999e-05 * fVec18[((IOTA - 121) & 127)]) + ((3.5164200000000005e-05 * fVec18[((IOTA - 120) & 127)]) + ((6.5718700000000005e-05 * fVec18[((IOTA - 113) & 127)]) + ((9.8145199999999987e-06 * fVec18[((IOTA - 104) & 127)]) + ((0.00047854099999999997 * fVec18[((IOTA - 102) & 127)]) + ((0.00058713800000000007 * fVec18[((IOTA - 101) & 127)]) + ((0.00063487900000000009 * fVec18[((IOTA - 97) & 127)]) + ((0.00084097399999999998 * fVec18[((IOTA - 96) & 127)]) + ((0.00060218900000000004 * fVec18[((IOTA - 95) & 127)]) + ((0.000719178 * fVec18[((IOTA - 94) & 127)]) + ((0.00049947400000000008 * fVec18[((IOTA - 93) & 127)]) + ((5.7074400000000004e-05 * fVec18[((IOTA - 91) & 127)]) + ((0.00063668800000000005 * fVec18[((IOTA - 90) & 127)]) + ((0.00050174400000000004 * fVec18[((IOTA - 89) & 127)]) + ((0.00104393 * fVec18[((IOTA - 85) & 127)]) + ((0.00032165200000000002 * fVec18[((IOTA - 84) & 127)]) + ((0.0032504600000000002 * fVec18[((IOTA - 55) & 127)]) + ((0.0033312400000000001 * fVec18[((IOTA - 54) & 127)]) + ((0.0029572000000000001 * fVec18[((IOTA - 48) & 127)]) + ((0.0024246099999999998 * fVec18[((IOTA - 47) & 127)]) + ((0.00076525699999999998 * fVec18[((IOTA - 44) & 127)]) + ((0.00030002700000000002 * fVec18[((IOTA - 43) & 127)]) + ((0.0016828099999999999 * fVec18[((IOTA - 41) & 127)]) + ((0.0073388400000000001 * fVec18[((IOTA - 40) & 127)]) + ((0.0047153500000000001 * fVec18[((IOTA - 39) & 127)]) + ((0.0065382999999999995 * fVec18[((IOTA - 35) & 127)]) + ((0.00229415 * fVec18[((IOTA - 30) & 127)]) + ((0.010495000000000001 * fVec18[((IOTA - 29) & 127)]) + ((0.026362800000000002 * fVec18[((IOTA - 28) & 127)]) + ((0.0036550699999999998 * fVec18[((IOTA - 27) & 127)]) + ((0.00058345500000000008 * fVec18[((IOTA - 26) & 127)]) + ((0.019277900000000001 * fVec18[((IOTA - 23) & 127)]) + ((0.0184233 * fVec18[((IOTA - 22) & 127)]) + ((0.027672400000000003 * fVec18[((IOTA - 21) & 127)]) + ((0.010700899999999999 * fVec18[((IOTA - 20) & 127)]) + ((0.00049956899999999995 * fVec18[((IOTA - 19) & 127)]) + ((0.0033817300000000003 * fVec18[((IOTA - 14) & 127)]) + ((0.015114300000000001 * fVec18[((IOTA - 13) & 127)]) + ((0.020861999999999999 * fVec18[((IOTA - 12) & 127)]) + ((0.0053441599999999997 * fVec18[((IOTA - 11) & 127)]) + ((0.00123547 * fVec18[((IOTA - 9) & 127)]) + ((0.00040391500000000002 * fVec18[((IOTA - 7) & 127)]) + ((1.7806500000000003e-05 * fVec18[((IOTA - 6) & 127)]) + ((0.00048888700000000002 * fVec18[((IOTA - 5) & 127)]) + ((0.00015141300000000001 * fVec18[((IOTA - 3) & 127)]) + ((0.00029105500000000002 * fVec18[((IOTA - 62) & 127)]) + ((4.5806199999999998e-08 * fVec19[((IOTA - 126) & 127)]) + ((0.00130389 * fVec18[((IOTA - 81) & 127)]) + ((0.00015988800000000001 * fVec18[((IOTA - 80) & 127)]) + ((0.00030389300000000001 * fVec18[((IOTA - 77) & 127)]) + ((0.0007704150000000001 * fVec18[((IOTA - 76) & 127)]) + ((0.0019725599999999999 * fVec18[((IOTA - 71) & 127)]) + ((0.0010789299999999999 * fVec18[((IOTA - 70) & 127)]) + ((0.0017741899999999999 * fVec18[((IOTA - 69) & 127)]) + ((0.00083747600000000008 * fVec18[((IOTA - 66) & 127)]) + ((0.00093810300000000014 * fVec18[((IOTA - 65) & 127)]) + ((0.00207858 * fVec18[((IOTA - 64) & 127)]) + ((0.00137382 * fVec18[((IOTA - 63) & 127)]) + ((0.0019089600000000001 * fVec18[((IOTA - 59) & 127)]) + ((0.0028430399999999998 * fVec18[((IOTA - 58) & 127)]) + ((0.000467777 * fVec19[((IOTA - 4) & 127)]) + ((0.00037799999999999997 * fVec19[((IOTA - 3) & 127)]) + ((1.3991200000000001e-05 * fTemp19) + ((0.019317500000000001 * fVec20[((IOTA - 14) & 127)]) + ((0.0043390899999999994 * fVec20[((IOTA - 12) & 127)]) + ((0.0015058000000000001 * fVec20[((IOTA - 11) & 127)]) + ((0.00027456800000000005 * fVec20[((IOTA - 10) & 127)]) + ((0.00045164799999999997 * fVec20[((IOTA - 9) & 127)]) + ((0.00077579600000000004 * fVec20[((IOTA - 7) & 127)]) + ((0.00115678 * fVec20[((IOTA - 5) & 127)]) + ((0.000375048 * fVec20[((IOTA - 3) & 127)]) + ((5.7016799999999999e-05 * fVec20[((IOTA - 1) & 127)]) + ((5.9764499999999998e-07 * fVec19[((IOTA - 124) & 127)]) + ((6.2516899999999999e-06 * fVec19[((IOTA - 123) & 127)]) + ((4.5404499999999999e-06 * fVec19[((IOTA - 122) & 127)]) + ((3.3129100000000001e-05 * fVec19[((IOTA - 107) & 127)]) + ((0.00037957800000000004 * fVec19[((IOTA - 104) & 127)]) + ((9.1390300000000012e-05 * fVec19[((IOTA - 103) & 127)]) + ((0.00012164900000000001 * fVec19[((IOTA - 102) & 127)]) + ((7.2862900000000003e-05 * fVec19[((IOTA - 100) & 127)]) + ((0.00075476100000000006 * fVec19[((IOTA - 99) & 127)]) + ((0.0011213599999999998 * fVec19[((IOTA - 98) & 127)]) + ((0.00048859700000000001 * fVec19[((IOTA - 97) & 127)]) + ((0.00057772600000000009 * fVec19[((IOTA - 96) & 127)]) + ((0.0010992299999999999 * fVec19[((IOTA - 95) & 127)]) + ((0.00136867 * fVec19[((IOTA - 94) & 127)]) + ((0.0024769499999999999 * fVec19[((IOTA - 93) & 127)]) + ((0.0017141299999999999 * fVec19[((IOTA - 92) & 127)]) + ((0.00099528400000000014 * fVec19[((IOTA - 91) & 127)]) + ((0.00072564299999999999 * fVec19[((IOTA - 90) & 127)]) + ((0.00049014600000000001 * fVec19[((IOTA - 89) & 127)]) + ((0.00028476100000000002 * fVec19[((IOTA - 88) & 127)]) + ((5.4113300000000009e-05 * fVec19[((IOTA - 85) & 127)]) + ((0.00064926500000000011 * fVec19[((IOTA - 84) & 127)]) + ((0.00090145900000000007 * fVec19[((IOTA - 83) & 127)]) + ((0.00074948899999999999 * fVec19[((IOTA - 82) & 127)]) + ((0.00034548700000000001 * fVec19[((IOTA - 78) & 127)]) + ((0.0015595699999999999 * fVec19[((IOTA - 72) & 127)]) + ((0.00125158 * fVec19[((IOTA - 71) & 127)]) + ((0.0020382500000000001 * fVec19[((IOTA - 70) & 127)]) + ((0.0018769700000000002 * fVec19[((IOTA - 69) & 127)]) + ((0.00043826000000000005 * fVec19[((IOTA - 64) & 127)]) + ((0.00192213 * fVec19[((IOTA - 63) & 127)]) + ((0.0040995700000000003 * fVec19[((IOTA - 59) & 127)]) + ((0.0060987200000000002 * fVec19[((IOTA - 58) & 127)]) + ((0.0022176000000000001 * fVec19[((IOTA - 57) & 127)]) + ((0.00212824 * fVec19[((IOTA - 54) & 127)]) + ((0.0032781899999999998 * fVec19[((IOTA - 53) & 127)]) + ((9.5596100000000004e-05 * fVec19[((IOTA - 50) & 127)]) + ((0.0014545300000000001 * fVec19[((IOTA - 46) & 127)]) + ((0.0038625300000000003 * fVec19[((IOTA - 45) & 127)]) + ((0.0017145699999999999 * fVec19[((IOTA - 44) & 127)]) + ((0.0079508400000000007 * fVec19[((IOTA - 41) & 127)]) + ((0.009358169999999999 * fVec19[((IOTA - 40) & 127)]) + ((0.0094388700000000002 * fVec19[((IOTA - 32) & 127)]) + ((0.0081053099999999993 * fVec19[((IOTA - 31) & 127)]) + ((0.0247297 * fVec19[((IOTA - 27) & 127)]) + ((0.019441400000000001 * fVec19[((IOTA - 26) & 127)]) + ((0.0026723599999999999 * fVec19[((IOTA - 25) & 127)]) + ((0.074936900000000001 * fVec19[((IOTA - 22) & 127)]) + ((0.0218175 * fVec19[((IOTA - 21) & 127)]) + ((0.014052500000000001 * fVec19[((IOTA - 17) & 127)]) + ((0.032805500000000001 * fVec19[((IOTA - 16) & 127)]) + ((0.00195027 * fVec19[((IOTA - 15) & 127)]) + ((0.017061400000000001 * fVec19[((IOTA - 12) & 127)]) + ((0.00028077500000000003 * fVec19[((IOTA - 10) & 127)]) + ((0.00020304900000000001 * fVec19[((IOTA - 9) & 127)]) + ((0.00028114900000000001 * fVec19[((IOTA - 8) & 127)]) + ((0.00075311200000000001 * fVec19[((IOTA - 7) & 127)]) + ((1.1421399999999999e-06 * fVec20[((IOTA - 126) & 127)]) + ((6.1312800000000004e-06 * fVec20[((IOTA - 125) & 127)]) + ((1.8821000000000002e-05 * fVec20[((IOTA - 121) & 127)]) + ((3.69637e-05 * fVec20[((IOTA - 120) & 127)]) + ((0.00019845400000000001 * fVec20[((IOTA - 116) & 127)]) + ((1.2745400000000002e-05 * fVec20[((IOTA - 112) & 127)]) + ((0.000173661 * fVec20[((IOTA - 111) & 127)]) + ((3.7430900000000001e-05 * fVec20[((IOTA - 110) & 127)]) + ((3.8990300000000005e-05 * fVec20[((IOTA - 108) & 127)]) + ((0.00024954200000000006 * fVec20[((IOTA - 107) & 127)]) + ((0.00027521800000000003 * fVec20[((IOTA - 106) & 127)]) + ((3.6057999999999998e-06 * fVec20[((IOTA - 105) & 127)]) + ((0.00029303599999999999 * fVec20[((IOTA - 103) & 127)]) + ((0.00076291800000000002 * fVec20[((IOTA - 102) & 127)]) + ((0.00051647800000000001 * fVec20[((IOTA - 101) & 127)]) + ((0.061774100000000005 * fVec20[((IOTA - 19) & 127)]) + ((0.00040501500000000005 * fVec20[((IOTA - 97) & 127)]) + ((0.00046903899999999998 * fVec20[((IOTA - 94) & 127)]) + ((0.0023897499999999999 * fVec20[((IOTA - 93) & 127)]) + ((0.00074860400000000004 * fVec20[((IOTA - 90) & 127)]) + ((0.00089415600000000012 * fVec20[((IOTA - 89) & 127)]) + ((2.9381300000000003e-05 * fVec20[((IOTA - 88) & 127)]) + ((0.0013978900000000002 * fVec20[((IOTA - 85) & 127)]) + ((0.00145937 * fVec20[((IOTA - 84) & 127)]) + ((0.0012423599999999999 * fVec20[((IOTA - 81) & 127)]) + ((0.00270412 * fVec20[((IOTA - 80) & 127)]) + ((0.0023507600000000003 * fVec20[((IOTA - 79) & 127)]) + ((0.0022935899999999999 * fVec20[((IOTA - 75) & 127)]) + ((0.00059835300000000004 * fVec20[((IOTA - 74) & 127)]) + ((0.00030100100000000001 * fVec20[((IOTA - 68) & 127)]) + ((0.00073815999999999997 * fVec20[((IOTA - 67) & 127)]) + ((6.6901800000000004e-05 * fVec20[((IOTA - 62) & 127)]) + ((0.00028901300000000002 * fVec20[((IOTA - 61) & 127)]) + ((0.00109084 * fVec20[((IOTA - 59) & 127)]) + ((0.00178498 * fVec20[((IOTA - 58) & 127)]) + ((0.00151166 * fVec20[((IOTA - 57) & 127)]) + ((0.0025656400000000001 * fVec20[((IOTA - 56) & 127)]) + ((0.00030762600000000003 * fVec20[((IOTA - 55) & 127)]) + ((0.0020867200000000002 * fVec20[((IOTA - 54) & 127)]) + ((0.0025482200000000003 * fVec20[((IOTA - 53) & 127)]) + ((0.00167453 * fVec20[((IOTA - 52) & 127)]) + ((0.0023747 * fVec20[((IOTA - 51) & 127)]) + ((0.0022410199999999998 * fVec20[((IOTA - 50) & 127)]) + ((0.0055318300000000006 * fVec20[((IOTA - 46) & 127)]) + ((0.0023482899999999998 * fVec20[((IOTA - 45) & 127)]) + ((0.0034206599999999998 * fVec20[((IOTA - 42) & 127)]) + ((0.00188773 * fVec20[((IOTA - 41) & 127)]) + ((0.00072377599999999998 * fVec20[((IOTA - 39) & 127)]) + ((0.0024612599999999998 * fVec20[((IOTA - 38) & 127)]) + ((0.0033621900000000001 * fVec20[((IOTA - 37) & 127)]) + ((0.0033196100000000002 * fVec20[((IOTA - 36) & 127)]) + ((0.013694999999999999 * fVec20[((IOTA - 33) & 127)]) + ((0.012183600000000001 * fVec20[((IOTA - 32) & 127)]) + ((0.0070372400000000002 * fVec20[((IOTA - 29) & 127)]) + ((0.0085312900000000004 * fVec20[((IOTA - 28) & 127)]) + ((0.034597700000000002 * fVec20[((IOTA - 27) & 127)]) + ((0.016548 * fVec20[((IOTA - 23) & 127)]) + ((0.036212899999999999 * fVec20[((IOTA - 22) & 127)]) + ((1.28309e-06 * fVec21[((IOTA - 126) & 127)]) + ((2.87072e-06 * fVec21[((IOTA - 125) & 127)]) + ((1.3474999999999998e-06 * fVec21[((IOTA - 123) & 127)]) + ((3.5239900000000001e-05 * fVec21[((IOTA - 122) & 127)]) + ((1.4600800000000001e-05 * fVec21[((IOTA - 121) & 127)]) + ((5.8902200000000007e-05 * fVec21[((IOTA - 117) & 127)]) + ((7.3645299999999999e-06 * fVec21[((IOTA - 116) & 127)]) + ((0.000124213 * fVec21[((IOTA - 110) & 127)]) + ((6.7869599999999998e-05 * fVec21[((IOTA - 109) & 127)]) + ((0.000275636 * fVec21[((IOTA - 108) & 127)]) + ((0.00037599500000000001 * fVec21[((IOTA - 105) & 127)]) + ((0.00024762699999999999 * fVec21[((IOTA - 104) & 127)]) + ((0.000109887 * fVec21[((IOTA - 103) & 127)]) + ((0.00031391399999999999 * fVec21[((IOTA - 101) & 127)]) + ((0.0005165250000000001 * fVec21[((IOTA - 100) & 127)]) + ((3.8421000000000004e-05 * fVec21[((IOTA - 98) & 127)]) + ((0.00116917 * fVec21[((IOTA - 97) & 127)]) + ((0.0020289700000000002 * fVec21[((IOTA - 96) & 127)]) + ((0.00126756 * fVec21[((IOTA - 95) & 127)]) + ((0.00017397199999999999 * fVec21[((IOTA - 91) & 127)]) + ((0.0024624500000000001 * fVec21[((IOTA - 90) & 127)]) + ((0.0019107600000000001 * fVec21[((IOTA - 89) & 127)]) + ((0.0018574600000000002 * fVec21[((IOTA - 86) & 127)]) + ((0.0024842200000000001 * fVec21[((IOTA - 85) & 127)]) + ((2.4123700000000004e-05 * fVec21[((IOTA - 84) & 127)]) + ((0.00024932600000000002 * fVec21[((IOTA - 83) & 127)]) + ((0.00045661800000000005 * fVec21[((IOTA - 79) & 127)]) + ((0.00079671800000000008 * fVec21[((IOTA - 78) & 127)]) + ((0.00239427 * fVec21[((IOTA - 77) & 127)]) + ((0.0023235999999999999 * fVec21[((IOTA - 76) & 127)]) + ((0.0025652599999999998 * fVec21[((IOTA - 75) & 127)]) + ((0.036144099999999998 * fVec21[((IOTA - 18) & 127)]) + ((0.0041613600000000002 * fVec21[((IOTA - 15) & 127)]) + ((0.012642199999999999 * fVec21[((IOTA - 12) & 127)]) + ((0.00039501900000000003 * fVec21[((IOTA - 10) & 127)]) + ((0.0015795300000000002 * fVec21[((IOTA - 9) & 127)]) + ((0.00049500200000000003 * fVec21[((IOTA - 6) & 127)]) + ((0.00057567300000000007 * fVec21[((IOTA - 5) & 127)]) + ((0.00027081499999999999 * fVec21[((IOTA - 3) & 127)]) + ((7.1774599999999992e-06 * fVec21[((IOTA - 2) & 127)]) + ((1.2802800000000002e-05 * fVec21[((IOTA - 1) & 127)]) + ((3.72465e-06 * fTemp21) + ((0.012572000000000002 * fVec21[((IOTA - 26) & 127)]) + ((0.0013604799999999998 * fVec21[((IOTA - 24) & 127)]) + ((0.0029567700000000001 * fVec21[((IOTA - 23) & 127)]) + ((0.0026263800000000002 * fVec21[((IOTA - 22) & 127)]) + ((0.021428799999999998 * fVec21[((IOTA - 21) & 127)]) + ((0.0022557499999999999 * fVec21[((IOTA - 74) & 127)]) + ((0.000148732 * fVec21[((IOTA - 73) & 127)]) + ((0.000211924 * fVec21[((IOTA - 68) & 127)]) + ((0.0036126499999999998 * fVec21[((IOTA - 67) & 127)]) + ((4.2760100000000004e-05 * fVec21[((IOTA - 66) & 127)]) + ((0.00138174 * fVec21[((IOTA - 65) & 127)]) + ((0.00104509 * fVec21[((IOTA - 64) & 127)]) + ((4.0581600000000005e-05 * fVec21[((IOTA - 63) & 127)]) + ((0.0013407899999999999 * fVec21[((IOTA - 62) & 127)]) + ((0.0018573200000000002 * fVec21[((IOTA - 61) & 127)]) + ((0.00175925 * fVec21[((IOTA - 60) & 127)]) + ((0.00085908300000000007 * fVec21[((IOTA - 51) & 127)]) + ((0.0041468100000000008 * fVec21[((IOTA - 50) & 127)]) + ((0.00258888 * fVec21[((IOTA - 49) & 127)]) + ((0.0016738 * fVec21[((IOTA - 48) & 127)]) + ((0.0027436699999999997 * fVec21[((IOTA - 47) & 127)]) + ((0.0057636700000000003 * fVec21[((IOTA - 42) & 127)]) + ((0.00084519300000000016 * fVec21[((IOTA - 41) & 127)]) + ((0.0065382800000000005 * fVec21[((IOTA - 37) & 127)]) + ((0.0033053900000000001 * fVec21[((IOTA - 35) & 127)]) + ((0.013110500000000001 * fVec21[((IOTA - 32) & 127)]) + ((0.0012610900000000001 * fVec21[((IOTA - 30) & 127)]) + ((0.0011880900000000002 * fVec21[((IOTA - 27) & 127)]) + ((1.07446e-06 * fVec22[((IOTA - 125) & 127)]) + ((9.5882799999999996e-06 * fVec22[((IOTA - 124) & 127)]) + ((8.4472900000000006e-06 * fVec22[((IOTA - 123) & 127)]) + ((9.2338799999999984e-06 * fVec22[((IOTA - 121) & 127)]) + ((1.7718900000000001e-05 * fVec22[((IOTA - 120) & 127)]) + ((7.1736100000000013e-05 * fVec22[((IOTA - 117) & 127)]) + ((3.1738400000000003e-06 * fVec22[((IOTA - 116) & 127)]) + ((9.0475300000000011e-05 * fVec22[((IOTA - 112) & 127)]) + ((0.00015947800000000001 * fVec22[((IOTA - 111) & 127)]) + ((0.00017410300000000002 * fVec22[((IOTA - 107) & 127)]) + ((0.00022612700000000001 * fVec22[((IOTA - 106) & 127)]) + ((9.8550200000000011e-05 * fVec22[((IOTA - 105) & 127)]) + ((0.00026838000000000003 * fVec22[((IOTA - 104) & 127)]) + ((0.00025552300000000001 * fVec22[((IOTA - 103) & 127)]) + ((0.00062636099999999998 * fVec22[((IOTA - 99) & 127)]) + ((0.00118519 * fVec22[((IOTA - 98) & 127)]) + ((0.00090719900000000003 * fVec22[((IOTA - 95) & 127)]) + ((0.00178987 * fVec22[((IOTA - 94) & 127)]) + ((0.00072873000000000002 * fVec22[((IOTA - 93) & 127)]) + ((0.0021940599999999998 * fVec22[((IOTA - 68) & 127)]) + ((0.0055132499999999999 * fVec22[((IOTA - 67) & 127)]) + ((0.0050680600000000001 * fVec22[((IOTA - 66) & 127)]) + ((0.00140544 * fVec22[((IOTA - 65) & 127)]) + ((0.00038257900000000002 * fVec22[((IOTA - 63) & 127)]) + ((0.00150672 * fVec22[((IOTA - 62) & 127)]) + ((0.0023892500000000003 * fVec22[((IOTA - 54) & 127)]) + ((0.0010502300000000001 * fVec22[((IOTA - 50) & 127)]) + ((0.0027733100000000002 * fVec22[((IOTA - 49) & 127)]) + ((0.00084151500000000014 * fVec22[((IOTA - 48) & 127)]) + ((0.00099086200000000012 * fVec22[((IOTA - 45) & 127)]) + ((0.0033490500000000001 * fVec22[((IOTA - 44) & 127)]) + ((0.00158416 * fVec22[((IOTA - 43) & 127)]) + ((0.0036774399999999997 * fVec22[((IOTA - 42) & 127)]) + ((0.00271587 * fVec22[((IOTA - 40) & 127)]) + ((0.0054552100000000003 * fVec22[((IOTA - 39) & 127)]) + ((0.0091737099999999999 * fVec22[((IOTA - 36) & 127)]) + ((0.013223499999999999 * fVec22[((IOTA - 35) & 127)]) + ((0.00116439 * fVec22[((IOTA - 34) & 127)]) + ((0.028504700000000001 * fVec22[((IOTA - 31) & 127)]) + ((0.0322688 * fVec22[((IOTA - 30) & 127)]) + ((0.010072300000000001 * fVec22[((IOTA - 26) & 127)]) + ((0.0049182499999999999 * fVec22[((IOTA - 23) & 127)]) + ((0.025481600000000004 * fVec22[((IOTA - 21) & 127)]) + ((0.042283299999999996 * fVec22[((IOTA - 20) & 127)]) + ((0.0102863 * fVec22[((IOTA - 19) & 127)]) + ((0.0085219000000000007 * fVec22[((IOTA - 17) & 127)]) + ((0.022074799999999999 * fVec22[((IOTA - 16) & 127)]) + ((0.023820100000000004 * fVec22[((IOTA - 12) & 127)]) + ((0.011093200000000001 * fVec22[((IOTA - 11) & 127)]) + ((0.0033972199999999998 * fVec22[((IOTA - 9) & 127)]) + ((0.00352222 * fVec22[((IOTA - 7) & 127)]) + ((0.0012450900000000001 * fVec22[((IOTA - 5) & 127)]) + ((0.00077165999999999997 * fVec22[((IOTA - 3) & 127)]) + ((0.0013969 * fVec22[((IOTA - 77) & 127)]) + ((0.0015445700000000001 * fVec22[((IOTA - 76) & 127)]) + ((0.00205112 * fVec22[((IOTA - 86) & 127)]) + ((0.00010376700000000001 * (fVec23[((IOTA - 71) & 127)] - fVec24[((IOTA - 119) & 127)])) + ((0.00221638 * fVec22[((IOTA - 85) & 127)]) + ((0.0010048800000000001 * fVec22[((IOTA - 84) & 127)]) + ((0.00078622900000000005 * fVec22[((IOTA - 80) & 127)]) + ((1.4034199999999999e-06 * fVec25[((IOTA - 126) & 127)]) + ((1.2211099999999999e-06 * fVec25[((IOTA - 125) & 127)]) + ((1.2893400000000001e-05 * fVec25[((IOTA - 124) & 127)]) + ((2.6002200000000003e-05 * fVec25[((IOTA - 123) & 127)]) + ((2.6415500000000001e-05 * fVec25[((IOTA - 122) & 127)]) + ((2.8177200000000002e-05 * fVec25[((IOTA - 121) & 127)]) + ((1.2612900000000001e-05 * fVec25[((IOTA - 120) & 127)]) + ((3.0230399999999999e-06 * fVec22[((IOTA - 75) & 127)]) + ((0.00041671500000000006 * fVec25[((IOTA - 104) & 127)]) + ((0.00031062500000000003 * fVec25[((IOTA - 100) & 127)]) + ((7.3607000000000002e-05 * fVec25[((IOTA - 99) & 127)]) + ((0.00050056999999999999 * fVec25[((IOTA - 96) & 127)]) + ((0.0027204999999999998 * fVec25[((IOTA - 95) & 127)]) + ((0.0020446800000000001 * fVec25[((IOTA - 94) & 127)]) + ((8.3015299999999998e-05 * fVec25[((IOTA - 93) & 127)]) + ((0.0022225799999999996 * fVec25[((IOTA - 92) & 127)]) + ((0.0024016700000000003 * fVec25[((IOTA - 91) & 127)]) + ((0.00063865800000000006 * fVec25[((IOTA - 86) & 127)]) + ((0.00058693299999999999 * fVec25[((IOTA - 84) & 127)]) + ((0.00042316100000000002 * fVec25[((IOTA - 80) & 127)]) + ((0.0010148100000000001 * fVec25[((IOTA - 79) & 127)]) + ((0.00028691900000000001 * fVec25[((IOTA - 73) & 127)]) + ((0.0021912699999999999 * fVec25[((IOTA - 72) & 127)]) + ((0.00113353 * fVec25[((IOTA - 71) & 127)]) + ((0.000557951 * fVec25[((IOTA - 66) & 127)]) + ((0.00043863399999999997 * fVec25[((IOTA - 63) & 127)]) + ((0.00314139 * fVec25[((IOTA - 62) & 127)]) + ((0.0052284000000000002 * fVec25[((IOTA - 61) & 127)]) + ((0.0025010699999999998 * fVec25[((IOTA - 60) & 127)]) + ((0.0012393300000000001 * fVec25[((IOTA - 57) & 127)]) + ((0.0018594100000000001 * fVec25[((IOTA - 54) & 127)]) + ((0.0034922200000000003 * fVec25[((IOTA - 53) & 127)]) + ((0.00127944 * fVec25[((IOTA - 52) & 127)]) + ((0.0016422699999999999 * fVec25[((IOTA - 51) & 127)]) + ((0.00289419 * fVec25[((IOTA - 50) & 127)]) + ((0.0053105499999999998 * fVec25[((IOTA - 49) & 127)]) + ((0.0065292000000000006 * fVec25[((IOTA - 48) & 127)]) + ((0.00110392 * fVec25[((IOTA - 47) & 127)]) + ((0.0039351999999999998 * fVec25[((IOTA - 42) & 127)]) + ((0.00132128 * fVec25[((IOTA - 41) & 127)]) + ((0.0068892700000000003 * fVec25[((IOTA - 39) & 127)]) + ((0.0013770800000000001 * fVec25[((IOTA - 38) & 127)]) + ((0.031043400000000002 * fVec25[((IOTA - 30) & 127)]) + ((0.0012180400000000001 * fVec25[((IOTA - 29) & 127)]) + ((0.026485700000000001 * fVec25[((IOTA - 26) & 127)]) + ((0.026438899999999998 * fVec25[((IOTA - 23) & 127)]) + ((0.0094311100000000012 * fVec25[((IOTA - 22) & 127)]) + ((0.0253549 * fVec25[((IOTA - 21) & 127)]) + ((0.034643899999999998 * fVec25[((IOTA - 20) & 127)]) + ((0.0140976 * fVec25[((IOTA - 19) & 127)]) + ((0.00406018 * fVec25[((IOTA - 16) & 127)]) + ((0.019651700000000001 * fVec25[((IOTA - 12) & 127)]) + ((0.0098021300000000009 * fVec25[((IOTA - 11) & 127)]) + ((0.00308077 * fVec25[((IOTA - 9) & 127)]) + ((0.00323953 * fVec25[((IOTA - 7) & 127)]) + ((0.0012123500000000001 * fVec25[((IOTA - 5) & 127)]) + ((0.000682276 * fVec25[((IOTA - 3) & 127)]) + ((4.4620600000000002e-07 * fVec24[((IOTA - 126) & 127)]) + ((2.9040900000000002e-05 * fVec24[((IOTA - 122) & 127)]) + ((3.3390499999999998e-05 * fVec24[((IOTA - 121) & 127)]) + ((2.7818400000000001e-05 * fVec24[((IOTA - 118) & 127)]) + ((1.2691900000000001e-05 * fVec24[((IOTA - 113) & 127)]) + ((0.00037104300000000005 * fVec24[((IOTA - 111) & 127)]) + ((0.00041838800000000006 * fVec24[((IOTA - 110) & 127)]) + ((0.00057686100000000002 * fVec24[((IOTA - 106) & 127)]) + ((0.00059161900000000004 * fVec24[((IOTA - 105) & 127)]) + ((0.00049454399999999997 * fVec24[((IOTA - 104) & 127)]) + ((0.00107274 * fVec24[((IOTA - 85) & 127)]) + ((0.00062359600000000002 * fVec24[((IOTA - 80) & 127)]) + ((0.000178293 * fVec24[((IOTA - 79) & 127)]) + ((0.00080254300000000007 * fVec24[((IOTA - 76) & 127)]) + ((0.00065406300000000008 * fVec24[((IOTA - 68) & 127)]) + ((0.00014068899999999999 * fVec24[((IOTA - 67) & 127)]) + ((0.0019257899999999999 * fVec24[((IOTA - 65) & 127)]) + ((0.00162886 * fVec24[((IOTA - 64) & 127)]) + ((0.00050768500000000002 * fVec24[((IOTA - 63) & 127)]) + ((0.0025198 * fVec24[((IOTA - 60) & 127)]) + ((0.00117113 * fVec24[((IOTA - 59) & 127)]) + ((0.00015039900000000001 * fVec24[((IOTA - 58) & 127)]) + ((0.000455995 * fVec24[((IOTA - 56) & 127)]) + ((0.00278239 * fVec24[((IOTA - 55) & 127)]) + ((0.0010278799999999999 * fVec24[((IOTA - 54) & 127)]) + ((0.011156999999999999 * fVec24[((IOTA - 45) & 127)]) + ((0.0043641399999999999 * fVec24[((IOTA - 44) & 127)]) + ((0.0039441099999999998 * fVec24[((IOTA - 42) & 127)]) + ((0.0097659400000000007 * fVec24[((IOTA - 39) & 127)]) + ((0.0076369999999999997 * fVec24[((IOTA - 36) & 127)]) + ((0.015424400000000001 * fVec24[((IOTA - 35) & 127)]) + ((0.0018063700000000001 * fVec24[((IOTA - 32) & 127)]) + ((0.00736515 * fVec24[((IOTA - 31) & 127)]) + ((0.0126468 * fVec24[((IOTA - 30) & 127)]) + ((0.0011752499999999999 * fVec24[((IOTA - 27) & 127)]) + ((0.022162999999999999 * fVec24[((IOTA - 26) & 127)]) + ((0.0071126699999999998 * fVec24[((IOTA - 25) & 127)]) + ((0.018755900000000002 * fVec24[((IOTA - 24) & 127)]) + ((0.0013016799999999999 * fVec24[((IOTA - 23) & 127)]) + ((0.0137094 * fVec24[((IOTA - 21) & 127)]) + ((0.024051599999999999 * fVec24[((IOTA - 18) & 127)]) + ((0.015724599999999998 * fVec24[((IOTA - 15) & 127)]) + ((0.014135400000000001 * fVec24[((IOTA - 12) & 127)]) + ((0.0011849499999999999 * fVec24[((IOTA - 9) & 127)]) + ((0.00070355200000000008 * fVec24[((IOTA - 7) & 127)]) + ((5.9634000000000005e-05 * fVec24[((IOTA - 6) & 127)]) + ((0.000133299 * fVec24[((IOTA - 5) & 127)]) + ((0.00039401200000000001 * fVec24[((IOTA - 3) & 127)]) + ((3.0720999999999999e-05 * fVec24[((IOTA - 1) & 127)]) + ((8.3709499999999999e-06 * fTemp24) + ((0.00154597 * fVec24[((IOTA - 89) & 127)]) + ((0.00061440799999999999 * fVec24[((IOTA - 103) & 127)]) + ((0.00061735800000000003 * fVec24[((IOTA - 102) & 127)]) + ((0.000728026 * fVec24[((IOTA - 101) & 127)]) + ((0.00038062800000000004 * fVec24[((IOTA - 100) & 127)]) + ((0.00062138299999999998 * fVec24[((IOTA - 99) & 127)]) + ((0.00075514600000000005 * fVec24[((IOTA - 98) & 127)]) + ((0.00067549000000000005 * fVec24[((IOTA - 88) & 127)]) + ((0.0011730600000000001 * fVec24[((IOTA - 95) & 127)]) + ((0.0016346700000000002 * fVec24[((IOTA - 94) & 127)]) + ((0.0021457000000000004 * fVec24[((IOTA - 93) & 127)]) + ((0.0025975199999999999 * fVec24[((IOTA - 92) & 127)]) + ((0.00015330900000000002 * fVec24[((IOTA - 91) & 127)]) + ((3.0765800000000003e-05 * fVec26[((IOTA - 119) & 127)]) + ((7.0563399999999996e-05 * fVec26[((IOTA - 118) & 127)]) + ((1.38519e-05 * fVec26[((IOTA - 115) & 127)]) + ((0.00014198999999999999 * fVec26[((IOTA - 114) & 127)]) + ((9.8497200000000003e-05 * fVec26[((IOTA - 113) & 127)]) + ((0.000185267 * fVec26[((IOTA - 112) & 127)]) + ((9.1395000000000002e-05 * fVec26[((IOTA - 111) & 127)]) + ((8.0491800000000001e-05 * fVec26[((IOTA - 110) & 127)]) + ((0.00064522800000000008 * fVec26[((IOTA - 109) & 127)]) + ((0.00058569100000000005 * fVec26[((IOTA - 108) & 127)]) + ((0.00033563700000000001 * fVec26[((IOTA - 107) & 127)]) + ((0.00035424600000000001 * fVec26[((IOTA - 106) & 127)]) + ((0.00062789300000000003 * fVec26[((IOTA - 105) & 127)]) + ((0.00034429799999999999 * fVec26[((IOTA - 104) & 127)]) + ((2.9823200000000003e-05 * fVec26[((IOTA - 103) & 127)]) + ((0.00061507300000000005 * fVec26[((IOTA - 102) & 127)]) + ((0.00037771400000000002 * fVec26[((IOTA - 101) & 127)]) + ((0.00015985700000000001 * fVec26[((IOTA - 100) & 127)]) + ((0.000190946 * fVec26[((IOTA - 99) & 127)]) + ((0.00050743800000000003 * fVec26[((IOTA - 98) & 127)]) + ((0.00056488300000000007 * fVec26[((IOTA - 97) & 127)]) + ((8.1509000000000009e-05 * fVec26[((IOTA - 96) & 127)]) + ((0.00037732899999999998 * fVec26[((IOTA - 95) & 127)]) + ((0.00041022299999999998 * fVec26[((IOTA - 93) & 127)]) + ((0.00085697799999999999 * fVec26[((IOTA - 92) & 127)]) + ((0.011357900000000001 * fVec26[((IOTA - 14) & 127)]) + ((0.0037318799999999999 * fVec26[((IOTA - 12) & 127)]) + ((0.0010972500000000001 * fVec26[((IOTA - 11) & 127)]) + ((6.8217500000000009e-05 * fVec26[((IOTA - 10) & 127)]) + ((0.00061125900000000006 * fVec26[((IOTA - 9) & 127)]) + ((0.00056615599999999995 * fVec26[((IOTA - 7) & 127)]) + ((0.00058234700000000009 * fVec26[((IOTA - 5) & 127)]) + ((0.000105676 * fVec26[((IOTA - 83) & 127)]) + ((0.00052492499999999998 * fVec26[((IOTA - 75) & 127)]) + ((0.0022562899999999998 * fVec26[((IOTA - 74) & 127)]) + ((0.000321723 * fVec26[((IOTA - 73) & 127)]) + ((0.00080229500000000007 * fVec26[((IOTA - 72) & 127)]) + ((0.0019222600000000001 * fVec26[((IOTA - 71) & 127)]) + ((0.0028435500000000002 * fVec26[((IOTA - 70) & 127)]) + ((4.2787900000000004e-05 * fVec26[((IOTA - 69) & 127)]) + ((0.0024381200000000002 * fVec26[((IOTA - 67) & 127)]) + ((0.0023961899999999999 * fVec26[((IOTA - 66) & 127)]) + ((0.0021430799999999999 * fVec26[((IOTA - 65) & 127)]) + ((0.0030028400000000001 * fVec26[((IOTA - 64) & 127)]) + ((0.00058073100000000002 * fVec26[((IOTA - 63) & 127)]) + ((0.0017794099999999999 * fVec26[((IOTA - 51) & 127)]) + ((0.00225201 * fVec26[((IOTA - 48) & 127)]) + ((0.0035764999999999998 * fVec26[((IOTA - 47) & 127)]) + ((0.0050062100000000005 * fVec26[((IOTA - 46) & 127)]) + ((0.00090678400000000011 * fVec26[((IOTA - 45) & 127)]) + ((0.0060474300000000003 * fVec26[((IOTA - 42) & 127)]) + ((0.0049879100000000008 * fVec26[((IOTA - 41) & 127)]) + ((0.0040529299999999997 * fVec26[((IOTA - 40) & 127)]) + ((0.0083491300000000015 * fVec26[((IOTA - 39) & 127)]) + ((0.011238600000000001 * fVec26[((IOTA - 36) & 127)]) + ((7.6854400000000007e-05 * fVec26[((IOTA - 34) & 127)]) + ((0.0100301 * fVec26[((IOTA - 33) & 127)]) + ((0.0053935399999999996 * fVec26[((IOTA - 32) & 127)]) + ((0.0073630199999999996 * fVec26[((IOTA - 28) & 127)]) + ((0.016863099999999999 * fVec26[((IOTA - 27) & 127)]) + ((0.0087242399999999994 * fVec26[((IOTA - 24) & 127)]) + ((0.027741399999999999 * fVec26[((IOTA - 22) & 127)]) + ((0.0366919 * fVec26[((IOTA - 19) & 127)]) + ((0.00027969900000000001 * fVec26[((IOTA - 3) & 127)]) + ((7.1292100000000001e-05 * fVec6[((IOTA - 115) & 127)]) + ((0.00018952700000000002 * fVec6[((IOTA - 111) & 127)]) + ((0.00035912999999999999 * fVec6[((IOTA - 110) & 127)]) + ((0.00051251200000000002 * fVec6[((IOTA - 109) & 127)]) + ((0.00046264500000000003 * fVec6[((IOTA - 108) & 127)]) + ((0.00014609200000000001 * fVec6[((IOTA - 107) & 127)]) + ((0.000122237 * fVec6[((IOTA - 106) & 127)]) + ((2.0314199999999999e-05 * fVec6[((IOTA - 105) & 127)]) + ((3.2517300000000001e-05 * fVec6[((IOTA - 104) & 127)]) + ((7.679690000000001e-05 * fVec6[((IOTA - 103) & 127)]) + ((0.00081181999999999999 * fVec6[((IOTA - 102) & 127)]) + ((0.0010270300000000002 * fVec6[((IOTA - 101) & 127)]) + ((0.00033934900000000002 * fVec6[((IOTA - 100) & 127)]) + ((0.00067179499999999999 * fVec6[((IOTA - 99) & 127)]) + ((0.0015498300000000001 * fVec6[((IOTA - 98) & 127)]) + ((0.00193557 * fVec6[((IOTA - 97) & 127)]) + ((0.0012977900000000001 * fVec6[((IOTA - 96) & 127)]) + ((0.00173953 * fVec6[((IOTA - 92) & 127)]) + ((0.0020737100000000003 * fVec6[((IOTA - 91) & 127)]) + ((0.00132314 * fVec6[((IOTA - 90) & 127)]) + ((0.00050203100000000001 * fVec6[((IOTA - 89) & 127)]) + ((4.34537e-05 * fVec26[((IOTA - 1) & 127)]) + ((2.5817700000000002e-05 * fVec6[((IOTA - 81) & 127)]) + ((0.0008419320000000001 * fVec6[((IOTA - 80) & 127)]) + ((0.00087629800000000007 * fVec6[((IOTA - 79) & 127)]) + ((4.0528500000000005e-06 * fTemp6) + ((0.022452899999999998 * fVec6[((IOTA - 16) & 127)]) + ((0.0121954 * fVec6[((IOTA - 15) & 127)]) + ((0.0109563 * fVec6[((IOTA - 12) & 127)]) + ((0.00016957000000000002 * fVec6[((IOTA - 11) & 127)]) + ((0.00010783300000000001 * fVec6[((IOTA - 10) & 127)]) + ((0.00024862500000000004 * fVec6[((IOTA - 9) & 127)]) + ((0.00084071099999999995 * fVec6[((IOTA - 7) & 127)]) + ((0.000245352 * fVec6[((IOTA - 70) & 127)]) + ((0.0012620800000000001 * fVec6[((IOTA - 69) & 127)]) + ((0.0023085100000000002 * fVec6[((IOTA - 68) & 127)]) + ((0.002405 * fVec6[((IOTA - 67) & 127)]) + ((0.0014007000000000002 * fVec6[((IOTA - 66) & 127)]) + ((0.00093808200000000002 * fVec6[((IOTA - 64) & 127)]) + ((0.0028319 * fVec6[((IOTA - 63) & 127)]) + ((0.00071589500000000003 * fVec6[((IOTA - 60) & 127)]) + ((0.0012767 * fVec6[((IOTA - 59) & 127)]) + ((0.0016556800000000001 * fVec6[((IOTA - 58) & 127)]) + ((0.0023854900000000001 * fVec6[((IOTA - 57) & 127)]) + ((0.00071006400000000005 * fVec6[((IOTA - 56) & 127)]) + ((0.0023205399999999998 * fVec6[((IOTA - 54) & 127)]) + ((0.0019624999999999998 * fVec6[((IOTA - 52) & 127)]) + ((0.0022978399999999998 * fVec6[((IOTA - 51) & 127)]) + ((0.00051752200000000008 * fVec6[((IOTA - 48) & 127)]) + ((0.0059472300000000004 * fVec6[((IOTA - 46) & 127)]) + ((0.0056101400000000004 * fVec6[((IOTA - 45) & 127)]) + ((0.00025800500000000001 * fVec6[((IOTA - 40) & 127)]) + ((0.0064505600000000001 * fVec6[((IOTA - 38) & 127)]) + ((0.014772 * fVec6[((IOTA - 34) & 127)]) + ((0.0058612900000000008 * fVec6[((IOTA - 31) & 127)]) + ((0.0057233800000000001 * fVec6[((IOTA - 28) & 127)]) + ((0.0152522 * fVec6[((IOTA - 27) & 127)]) + ((0.018531200000000001 * fVec6[((IOTA - 25) & 127)]) + ((0.044155600000000003 * fVec6[((IOTA - 22) & 127)]) + ((0.0081954799999999998 * fVec6[((IOTA - 21) & 127)]) + ((1.16687e-06 * fVec27[((IOTA - 126) & 127)]) + ((8.0474799999999991e-06 * fVec27[((IOTA - 125) & 127)]) + ((1.1716500000000002e-05 * fVec27[((IOTA - 124) & 127)]) + ((1.6095900000000003e-05 * fVec27[((IOTA - 123) & 127)]) + ((1.2353500000000001e-05 * fVec27[((IOTA - 121) & 127)]) + ((5.0538800000000005e-05 * fVec27[((IOTA - 120) & 127)]) + ((6.90663e-05 * fVec27[((IOTA - 119) & 127)]) + ((7.1261200000000008e-05 * fVec27[((IOTA - 110) & 127)]) + ((0.00013404500000000001 * fVec27[((IOTA - 107) & 127)]) + ((9.0162999999999997e-05 * fVec6[((IOTA - 4) & 127)]) + ((0.000144139 * fVec27[((IOTA - 103) & 127)]) + ((0.00074598600000000002 * fVec27[((IOTA - 102) & 127)]) + ((0.00041806100000000001 * fVec27[((IOTA - 101) & 127)]) + ((0.00036489900000000002 * fVec6[((IOTA - 3) & 127)]) + ((0.00099729399999999991 * fVec27[((IOTA - 97) & 127)]) + ((0.00072742900000000003 * fVec27[((IOTA - 96) & 127)]) + ((0.00095647000000000006 * fVec27[((IOTA - 94) & 127)]) + ((0.0019078999999999999 * fVec27[((IOTA - 93) & 127)]) + ((0.00037591000000000002 * fVec27[((IOTA - 92) & 127)]) + ((0.00091705400000000015 * fVec27[((IOTA - 91) & 127)]) + ((0.0019979199999999998 * fVec27[((IOTA - 90) & 127)]) + ((0.00084190100000000004 * fVec27[((IOTA - 89) & 127)]) + ((0.00062404300000000002 * fVec27[((IOTA - 85) & 127)]) + ((0.0010226500000000002 * fVec27[((IOTA - 84) & 127)]) + ((0.00016474200000000003 * fVec27[((IOTA - 82) & 127)]) + ((0.00111031 * fVec27[((IOTA - 81) & 127)]) + ((0.0010574600000000001 * fVec27[((IOTA - 80) & 127)]) + ((0.0012639700000000001 * fVec27[((IOTA - 77) & 127)]) + ((0.00089859899999999993 * fVec27[((IOTA - 76) & 127)]) + ((0.00095380500000000006 * fVec27[((IOTA - 72) & 127)]) + ((0.000305641 * fVec27[((IOTA - 68) & 127)]) + ((0.000773294 * fVec27[((IOTA - 67) & 127)]) + ((0.00226954 * fVec27[((IOTA - 62) & 127)]) + ((0.026200899999999999 * fVec27[((IOTA - 20) & 127)]) + ((0.0667629 * fVec27[((IOTA - 19) & 127)]) + ((0.0107382 * fVec27[((IOTA - 18) & 127)]) + ((0.0291912 * fVec27[((IOTA - 17) & 127)]) + ((0.029706100000000003 * fVec27[((IOTA - 16) & 127)]) + ((0.011985200000000001 * fVec27[((IOTA - 15) & 127)]) + ((0.00355895 * fVec27[((IOTA - 10) & 127)]) + ((0.0019467900000000001 * fVec27[((IOTA - 8) & 127)]) + ((0.00139101 * fVec27[((IOTA - 6) & 127)]) + ((0.00016791500000000001 * fVec27[((IOTA - 4) & 127)]) + ((0.00029155500000000004 * fVec27[((IOTA - 2) & 127)]) + ((0.0053291099999999997 * fVec27[((IOTA - 26) & 127)]) + ((0.0035138299999999999 * fVec27[((IOTA - 25) & 127)]) + ((0.0017599800000000002 * fVec27[((IOTA - 61) & 127)]) + ((0.00071835900000000001 * fVec27[((IOTA - 58) & 127)]) + ((0.0012819700000000001 * fVec27[((IOTA - 57) & 127)]) + ((0.000143156 * fVec27[((IOTA - 55) & 127)]) + ((0.00051545500000000006 * fVec27[((IOTA - 54) & 127)]) + ((0.00011347700000000001 * fVec27[((IOTA - 53) & 127)]) + ((0.00065408100000000004 * fVec27[((IOTA - 52) & 127)]) + ((0.0046855900000000008 * fVec27[((IOTA - 51) & 127)]) + ((0.0086597399999999991 * fVec27[((IOTA - 50) & 127)]) + ((0.0090186299999999997 * fVec27[((IOTA - 49) & 127)]) + ((0.00194699 * fVec27[((IOTA - 48) & 127)]) + ((0.00031685400000000004 * fVec27[((IOTA - 46) & 127)]) + ((0.0069549800000000004 * fVec27[((IOTA - 45) & 127)]) + ((0.011236100000000001 * fVec27[((IOTA - 44) & 127)]) + ((0.0059433200000000002 * fVec27[((IOTA - 43) & 127)]) + ((0.00041302300000000005 * fVec27[((IOTA - 40) & 127)]) + ((0.00281839 * fVec27[((IOTA - 39) & 127)]) + ((0.019649799999999999 * fVec27[((IOTA - 30) & 127)]) + ((1.3822700000000001e-06 * fVec28[((IOTA - 126) & 127)]) + ((4.3207799999999997e-06 * fVec28[((IOTA - 125) & 127)]) + ((7.0508400000000002e-07 * fVec28[((IOTA - 123) & 127)]) + ((0.024438399999999999 * fVec27[((IOTA - 22) & 127)]) + ((8.1874899999999997e-07 * fVec28[((IOTA - 122) & 127)]) + ((4.9958900000000007e-05 * fVec28[((IOTA - 121) & 127)]) + ((4.8874300000000007e-05 * fVec28[((IOTA - 120) & 127)]) + ((0.0101949 * fVec27[((IOTA - 21) & 127)]) + ((3.0540600000000004e-05 * fVec28[((IOTA - 119) & 127)]) + ((8.9455700000000012e-05 * fVec28[((IOTA - 116) & 127)]) + ((7.5434700000000005e-05 * fVec28[((IOTA - 115) & 127)]) + ((0.00014591800000000001 * fVec28[((IOTA - 114) & 127)]) + ((0.00032979500000000002 * fVec28[((IOTA - 109) & 127)]) + ((0.00027301799999999998 * fVec28[((IOTA - 108) & 127)]) + ((2.9295999999999999e-06 * fVec28[((IOTA - 106) & 127)]) + ((0.00041821300000000002 * fVec28[((IOTA - 105) & 127)]) + ((0.00016436200000000001 * fVec28[((IOTA - 104) & 127)]) + ((1.0304700000000001e-05 * fVec28[((IOTA - 103) & 127)]) + ((9.9420300000000014e-05 * fVec28[((IOTA - 102) & 127)]) + ((0.000143957 * fVec28[((IOTA - 101) & 127)]) + ((0.00068593000000000007 * fVec28[((IOTA - 97) & 127)]) + ((0.0022403200000000001 * fVec28[((IOTA - 96) & 127)]) + ((0.00054845200000000005 * fVec28[((IOTA - 95) & 127)]) + ((0.0013290999999999999 * fVec28[((IOTA - 90) & 127)]) + ((0.0010531200000000001 * fVec28[((IOTA - 86) & 127)]) + ((0.00043581100000000003 * fVec28[((IOTA - 85) & 127)]) + ((0.00043643700000000002 * fVec28[((IOTA - 84) & 127)]) + ((0.00088380000000000002 * fVec28[((IOTA - 83) & 127)]) + ((0.00047224300000000001 * fVec28[((IOTA - 79) & 127)]) + ((0.00094611000000000001 * fVec28[((IOTA - 78) & 127)]) + ((0.0029536099999999997 * fVec28[((IOTA - 75) & 127)]) + ((0.0014493400000000001 * fVec28[((IOTA - 74) & 127)]) + ((0.00033464100000000005 * fVec28[((IOTA - 71) & 127)]) + ((0.000284002 * fVec28[((IOTA - 70) & 127)]) + ((0.00034605900000000002 * fVec28[((IOTA - 68) & 127)]) + ((0.00166238 * fVec28[((IOTA - 67) & 127)]) + ((0.00061167100000000005 * fVec28[((IOTA - 66) & 127)]) + ((0.0014756400000000001 * fVec28[((IOTA - 65) & 127)]) + ((0.0014824 * fVec28[((IOTA - 64) & 127)]) + ((0.000313016 * fVec28[((IOTA - 63) & 127)]) + ((0.0038431400000000001 * fVec28[((IOTA - 33) & 127)]) + ((0.001851 * fVec28[((IOTA - 32) & 127)]) + ((0.00023100900000000004 * fVec28[((IOTA - 31) & 127)]) + ((0.0018550299999999999 * fVec28[((IOTA - 30) & 127)]) + ((0.0068345300000000001 * fVec28[((IOTA - 29) & 127)]) + ((0.0065994599999999997 * fVec28[((IOTA - 28) & 127)]) + ((0.0086483799999999989 * fVec28[((IOTA - 26) & 127)]) + ((0.034778900000000001 * fVec28[((IOTA - 25) & 127)]) + ((0.0033660500000000002 * fVec28[((IOTA - 21) & 127)]) + ((0.0166362 * fVec28[((IOTA - 19) & 127)]) + ((0.013249500000000001 * fVec28[((IOTA - 18) & 127)]) + ((0.0149275 * fVec28[((IOTA - 15) & 127)]) + ((0.00153611 * fVec28[((IOTA - 12) & 127)]) + ((0.00022380100000000001 * fVec28[((IOTA - 11) & 127)]) + ((0.0002062 * fVec28[((IOTA - 10) & 127)]) + ((0.00029508100000000004 * fVec28[((IOTA - 9) & 127)]) + ((9.3157600000000004e-05 * fVec28[((IOTA - 7) & 127)]) + ((0.00083150800000000001 * fVec28[((IOTA - 6) & 127)]) + ((0.000139085 * fVec28[((IOTA - 3) & 127)]) + ((0.000100796 * fVec28[((IOTA - 2) & 127)]) + ((5.4869299999999995e-06 * fTemp28) + ((0.0069924600000000007 * fVec28[((IOTA - 42) & 127)]) + ((0.00046532900000000006 * fVec28[((IOTA - 61) & 127)]) + ((0.0014774499999999999 * fVec28[((IOTA - 57) & 127)]) + ((0.0052267299999999997 * fVec28[((IOTA - 56) & 127)]) + ((0.0049627400000000002 * fVec28[((IOTA - 55) & 127)]) + ((0.00034213000000000001 * fVec28[((IOTA - 54) & 127)]) + ((0.00171871 * fVec28[((IOTA - 52) & 127)]) + ((0.00204601 * fVec28[((IOTA - 51) & 127)]) + ((0.00172897 * fVec28[((IOTA - 44) & 127)]) + ((0.0059491199999999996 * fVec28[((IOTA - 43) & 127)]) + ((1.2067399999999999e-06 * fVec29[((IOTA - 126) & 127)]) + ((1.4484800000000001e-05 * fVec29[((IOTA - 123) & 127)]) + ((2.1146600000000005e-05 * fVec29[((IOTA - 122) & 127)]) + ((3.7560900000000002e-05 * fVec29[((IOTA - 121) & 127)]) + ((5.5921400000000003e-05 * fVec29[((IOTA - 120) & 127)]) + ((2.8070300000000005e-05 * fVec29[((IOTA - 119) & 127)]) + ((3.5723000000000003e-05 * fVec29[((IOTA - 118) & 127)]) + ((6.8163800000000006e-05 * fVec29[((IOTA - 117) & 127)]) + ((2.3925e-06 * fVec29[((IOTA - 116) & 127)]) + ((0.0046671199999999994 * fVec28[((IOTA - 38) & 127)]) + ((0.00014829900000000001 * fVec29[((IOTA - 108) & 127)]) + ((0.00037316500000000001 * fVec29[((IOTA - 105) & 127)]) + ((0.00039246300000000001 * fVec29[((IOTA - 104) & 127)]) + ((0.0074278399999999998 * fVec28[((IOTA - 37) & 127)]) + ((0.00069076200000000004 * fVec29[((IOTA - 98) & 127)]) + ((0.00059752000000000004 * fVec29[((IOTA - 97) & 127)]) + ((3.8900100000000004e-05 * fVec29[((IOTA - 96) & 127)]) + ((0.00104006 * fVec29[((IOTA - 95) & 127)]) + ((0.0024621700000000001 * fVec29[((IOTA - 94) & 127)]) + ((0.0011040900000000001 * fVec29[((IOTA - 93) & 127)]) + ((0.00025218300000000001 * fVec29[((IOTA - 92) & 127)]) + ((0.000582052 * fVec29[((IOTA - 87) & 127)]) + ((0.00181963 * fVec29[((IOTA - 86) & 127)]) + ((0.00027008400000000003 * fVec29[((IOTA - 83) & 127)]) + ((3.9284900000000001e-05 * fVec29[((IOTA - 82) & 127)]) + ((0.0023190699999999999 * fVec29[((IOTA - 78) & 127)]) + ((0.0031104100000000001 * fVec29[((IOTA - 77) & 127)]) + ((0.0018716399999999999 * fVec29[((IOTA - 76) & 127)]) + ((0.00173413 * fVec29[((IOTA - 75) & 127)]) + ((0.00046513499999999998 * fVec29[((IOTA - 74) & 127)]) + ((0.00070995800000000001 * fVec29[((IOTA - 73) & 127)]) + ((0.00136597 * fVec29[((IOTA - 72) & 127)]) + ((0.0005198920000000001 * fVec29[((IOTA - 66) & 127)]) + ((0.00252236 * fVec29[((IOTA - 65) & 127)]) + ((0.00148653 * fVec29[((IOTA - 64) & 127)]) + ((0.00049729599999999994 * fVec29[((IOTA - 61) & 127)]) + ((0.0017160000000000001 * fVec29[((IOTA - 60) & 127)]) + ((0.000571158 * fVec29[((IOTA - 59) & 127)]) + ((0.0016985100000000001 * fVec29[((IOTA - 35) & 127)]) + ((0.057691300000000001 * fVec29[((IOTA - 23) & 127)]) + ((0.016169199999999998 * fVec29[((IOTA - 22) & 127)]) + ((0.044694299999999999 * fVec29[((IOTA - 20) & 127)]) + ((0.073524500000000007 * fVec29[((IOTA - 19) & 127)]) + ((0.046224100000000004 * fVec29[((IOTA - 18) & 127)]) + ((0.039818899999999997 * fVec29[((IOTA - 16) & 127)]) + ((0.030653800000000002 * fVec29[((IOTA - 15) & 127)]) + ((0.0028312599999999999 * fVec29[((IOTA - 10) & 127)]) + ((0.00023471600000000002 * fVec29[((IOTA - 8) & 127)]) + ((0.0016646499999999999 * fVec29[((IOTA - 6) & 127)]) + ((0.00018944099999999999 * fVec29[((IOTA - 4) & 127)]) + ((0.00041035500000000005 * fVec29[((IOTA - 2) & 127)]) + ((0.0101911 * fVec29[((IOTA - 42) & 127)]) + ((0.0084519999999999994 * fVec29[((IOTA - 41) & 127)]) + ((0.0027287100000000001 * fVec29[((IOTA - 40) & 127)]) + ((0.0031196700000000002 * fVec29[((IOTA - 54) & 127)]) + ((0.0014963299999999999 * fVec29[((IOTA - 53) & 127)]) + ((0.0021004299999999999 * fVec29[((IOTA - 52) & 127)]) + ((0.0077831999999999997 * fVec29[((IOTA - 51) & 127)]) + ((0.0044508500000000001 * fVec29[((IOTA - 50) & 127)]) + ((0.0021174599999999998 * fVec29[((IOTA - 49) & 127)]) + ((0.0040522299999999995 * fVec29[((IOTA - 48) & 127)]) + ((0.0064639199999999997 * fVec29[((IOTA - 47) & 127)]) + ((0.0059821600000000003 * fVec29[((IOTA - 46) & 127)]) + ((0.0034409700000000002 * fVec29[((IOTA - 45) & 127)]) + ((0.0067079800000000005 * fVec29[((IOTA - 44) & 127)]) + ((0.0079398100000000003 * fVec29[((IOTA - 43) & 127)]) + ((1.06705e-06 * fVec30[((IOTA - 126) & 127)]) + ((3.8319600000000005e-05 * fVec30[((IOTA - 122) & 127)]) + ((5.611290000000001e-05 * fVec30[((IOTA - 121) & 127)]) + ((4.3469500000000001e-05 * fVec30[((IOTA - 120) & 127)]) + ((4.8748200000000002e-05 * fVec30[((IOTA - 117) & 127)]) + ((0.000144938 * fVec30[((IOTA - 110) & 127)]) + ((0.00089492 * fVec30[((IOTA - 76) & 127)]) + ((0.00098582100000000001 * fVec30[((IOTA - 75) & 127)]) + ((0.0010638000000000002 * fVec30[((IOTA - 74) & 127)]) + ((7.2644700000000013e-05 * fVec30[((IOTA - 104) & 127)]) + ((1.0278999999999999e-06 * fVec30[((IOTA - 103) & 127)]) + ((0.0011606799999999999 * fVec30[((IOTA - 96) & 127)]) + ((0.0031629900000000001 * fVec30[((IOTA - 95) & 127)]) + ((0.00078389600000000007 * fVec30[((IOTA - 94) & 127)]) + ((3.61728e-05 * fVec30[((IOTA - 91) & 127)]) + ((0.0022532999999999997 * fVec30[((IOTA - 86) & 127)]) + ((0.00078204200000000005 * fVec30[((IOTA - 79) & 127)]) + ((0.00053547700000000002 * fVec30[((IOTA - 77) & 127)]) + ((0.0020713300000000001 * fVec30[((IOTA - 72) & 127)]) + ((0.0018535400000000001 * fVec30[((IOTA - 70) & 127)]) + ((0.00287405 * fVec30[((IOTA - 71) & 127)]) + ((0.0024114399999999999 * fVec30[((IOTA - 69) & 127)]) + ((0.0054627 * fVec30[((IOTA - 68) & 127)]) + ((0.0053478500000000003 * fVec30[((IOTA - 67) & 127)]) + ((0.0013556799999999999 * fVec30[((IOTA - 6) & 127)]) + ((0.00012807300000000001 * fVec30[((IOTA - 4) & 127)]) + ((0.000378556 * fVec30[((IOTA - 2) & 127)]) + ((0.0036506200000000003 * fVec30[((IOTA - 66) & 127)]) + ((0.0039108500000000004 * fVec30[((IOTA - 65) & 127)]) + ((0.00124406 * fVec30[((IOTA - 64) & 127)]) + ((0.00066612700000000008 * fVec30[((IOTA - 53) & 127)]) + ((0.00021471700000000001 * fVec30[((IOTA - 42) & 127)]) + ((0.0083305600000000007 * fVec30[((IOTA - 38) & 127)]) + ((0.0016041499999999999 * fVec30[((IOTA - 34) & 127)]) + ((0.018119700000000002 * fVec30[((IOTA - 33) & 127)]) + ((0.036438700000000004 * fVec30[((IOTA - 30) & 127)]) + ((0.027385400000000001 * fVec30[((IOTA - 29) & 127)]) + ((0.0048108300000000003 * fVec30[((IOTA - 28) & 127)]) + ((0.040978300000000002 * fVec30[((IOTA - 27) & 127)]) + ((0.049985600000000005 * fVec30[((IOTA - 26) & 127)]) + ((0.038770699999999998 * fVec30[((IOTA - 24) & 127)]) + ((0.10758200000000001 * fVec30[((IOTA - 23) & 127)]) + ((0.021392099999999997 * fVec30[((IOTA - 22) & 127)]) + ((0.041771900000000008 * fVec30[((IOTA - 20) & 127)]) + ((0.055177400000000001 * fVec30[((IOTA - 19) & 127)]) + ((0.0108086 * fVec30[((IOTA - 18) & 127)]) + ((0.0026607500000000004 * fVec30[((IOTA - 10) & 127)]) + ((0.00066903899999999996 * fVec30[((IOTA - 8) & 127)]) + ((4.9495899999999995e-07 * fVec31[((IOTA - 126) & 127)]) + ((2.773e-06 * fVec31[((IOTA - 125) & 127)]) + ((5.3135e-06 * fVec31[((IOTA - 121) & 127)]) + ((2.8457499999999998e-06 * fVec31[((IOTA - 117) & 127)]) + ((2.4558300000000005e-05 * fVec31[((IOTA - 116) & 127)]) + ((5.2591200000000006e-05 * fVec31[((IOTA - 112) & 127)]) + ((0.00024796200000000001 * fVec31[((IOTA - 111) & 127)]) + ((0.00014221200000000001 * fVec31[((IOTA - 110) & 127)]) + ((0.00010309 * fVec31[((IOTA - 108) & 127)]) + ((0.00018337600000000001 * fVec31[((IOTA - 107) & 127)]) + ((0.00035608600000000003 * fVec31[((IOTA - 106) & 127)]) + ((0.00034403800000000002 * fVec31[((IOTA - 105) & 127)]) + ((0.00025383300000000002 * fVec31[((IOTA - 104) & 127)]) + ((0.00028535700000000003 * fVec31[((IOTA - 103) & 127)]) + ((0.00070562000000000001 * fVec31[((IOTA - 102) & 127)]) + ((0.0005151 * fVec31[((IOTA - 101) & 127)]) + ((0.00032077100000000002 * fVec31[((IOTA - 100) & 127)]) + ((9.0654800000000018e-05 * fVec31[((IOTA - 99) & 127)]) + ((0.00071143700000000009 * fVec31[((IOTA - 98) & 127)]) + ((0.0014366699999999999 * fVec31[((IOTA - 97) & 127)]) + ((0.00124614 * fVec31[((IOTA - 94) & 127)]) + ((0.0022713 * fVec31[((IOTA - 93) & 127)]) + ((0.00127749 * fVec31[((IOTA - 86) & 127)]) + ((0.00070097300000000003 * fVec31[((IOTA - 85) & 127)]) + ((6.2936500000000003e-05 * fVec31[((IOTA - 77) & 127)]) + ((2.0687900000000002e-05 * fVec31[((IOTA - 76) & 127)]) + ((0.00074920100000000001 * fVec31[((IOTA - 72) & 127)]) + ((0.00108661 * fVec31[((IOTA - 71) & 127)]) + ((0.00066226100000000003 * fVec31[((IOTA - 70) & 127)]) + ((0.00221192 * fVec31[((IOTA - 68) & 127)]) + ((0.0036181899999999999 * fVec31[((IOTA - 67) & 127)]) + ((3.8066800000000006e-05 * fVec31[((IOTA - 66) & 127)]) + ((2.7286800000000004e-05 * fVec31[((IOTA - 64) & 127)]) + ((0.0014662800000000001 * fVec31[((IOTA - 63) & 127)]) + ((0.0025716599999999999 * fVec31[((IOTA - 62) & 127)]) + ((0.00040080500000000001 * fVec31[((IOTA - 61) & 127)]) + ((0.0022166500000000001 * fVec31[((IOTA - 59) & 127)]) + ((0.0027539400000000003 * fVec31[((IOTA - 58) & 127)]) + ((0.000547636 * fVec31[((IOTA - 57) & 127)]) + ((0.0034324300000000002 * fVec31[((IOTA - 56) & 127)]) + ((0.0028814800000000001 * fVec31[((IOTA - 55) & 127)]) + ((0.00020467599999999999 * fVec31[((IOTA - 54) & 127)]) + ((0.0025276200000000004 * fVec31[((IOTA - 51) & 127)]) + ((0.0045955500000000003 * fVec31[((IOTA - 50) & 127)]) + ((0.0021549399999999997 * fVec31[((IOTA - 44) & 127)]) + ((0.00027813700000000002 * fVec31[((IOTA - 12) & 127)]) + ((0.00027818999999999999 * fVec31[((IOTA - 11) & 127)]) + ((0.00033955200000000002 * fVec31[((IOTA - 10) & 127)]) + ((0.00022609 * fVec31[((IOTA - 9) & 127)]) + ((0.00016021500000000001 * fVec31[((IOTA - 7) & 127)]) + ((0.000240886 * fVec31[((IOTA - 6) & 127)]) + ((2.4972599999999999e-05 * fVec31[((IOTA - 3) & 127)]) + ((5.2352700000000004e-05 * fVec31[((IOTA - 2) & 127)]) + ((4.2462999999999995e-06 * fTemp31) + ((0.011300600000000001 * fVec31[((IOTA - 19) & 127)]) + ((0.0094331200000000014 * fVec31[((IOTA - 18) & 127)]) + ((0.0013761300000000001 * fVec31[((IOTA - 41) & 127)]) + ((0.002183 * fVec31[((IOTA - 38) & 127)]) + ((0.0030387000000000001 * fVec31[((IOTA - 36) & 127)]) + ((0.021556799999999997 * fVec31[((IOTA - 35) & 127)]) + ((0.023527200000000002 * fVec31[((IOTA - 32) & 127)]) + ((0.0021948500000000004 * fVec31[((IOTA - 31) & 127)]) + ((0.00051807200000000006 * fVec31[((IOTA - 29) & 127)]) + ((0.024944000000000001 * fVec31[((IOTA - 26) & 127)]) + ((0.0035849099999999997 * fVec31[((IOTA - 25) & 127)]) + ((8.9630500000000016e-08 * fVec4[((IOTA - 126) & 127)]) + ((4.86084e-05 * fVec4[((IOTA - 119) & 127)]) + ((3.0215200000000005e-05 * fVec4[((IOTA - 118) & 127)]) + ((0.0071840999999999997 * fVec31[((IOTA - 15) & 127)]) + ((0.00010084700000000001 * fVec4[((IOTA - 110) & 127)]) + ((0.00034166200000000001 * fVec4[((IOTA - 109) & 127)]) + ((0.00033797299999999998 * fVec4[((IOTA - 107) & 127)]) + ((0.00045785700000000004 * fVec4[((IOTA - 106) & 127)]) + ((0.00013590400000000001 * fVec4[((IOTA - 105) & 127)]) + ((6.0929900000000008e-05 * fVec4[((IOTA - 104) & 127)]) + ((0.000208667 * fVec4[((IOTA - 102) & 127)]) + ((0.00030785900000000001 * fVec4[((IOTA - 101) & 127)]) + ((0.00026147399999999998 * fVec4[((IOTA - 100) & 127)]) + ((0.00048677700000000003 * fVec4[((IOTA - 99) & 127)]) + ((0.0012107800000000001 * fVec4[((IOTA - 98) & 127)]) + ((0.00076490500000000008 * fVec4[((IOTA - 97) & 127)]) + ((0.00058266999999999998 * fVec4[((IOTA - 94) & 127)]) + ((0.00082486899999999999 * fVec4[((IOTA - 93) & 127)]) + ((0.0011506799999999998 * fVec4[((IOTA - 92) & 127)]) + ((3.5632800000000002e-05 * fVec4[((IOTA - 91) & 127)]) + ((3.64663e-05 * fVec4[((IOTA - 90) & 127)]) + ((0.00056137899999999998 * fVec4[((IOTA - 88) & 127)]) + ((0.00015598000000000001 * fVec4[((IOTA - 87) & 127)]) + ((0.00076870700000000009 * fVec4[((IOTA - 84) & 127)]) + ((0.0014322200000000001 * fVec4[((IOTA - 83) & 127)]) + ((0.00046067700000000005 * fVec4[((IOTA - 82) & 127)]) + ((0.00064690400000000001 * fVec4[((IOTA - 79) & 127)]) + ((6.2586200000000001e-05 * fVec4[((IOTA - 72) & 127)]) + ((0.00117567 * fVec4[((IOTA - 71) & 127)]) + ((0.0012521400000000001 * fVec4[((IOTA - 70) & 127)]) + ((0.00055114699999999999 * fVec4[((IOTA - 66) & 127)]) + ((0.00110439 * fVec4[((IOTA - 65) & 127)]) + ((0.0016155 * fVec4[((IOTA - 64) & 127)]) + ((0.0021511500000000001 * fVec4[((IOTA - 63) & 127)]) + ((0.0019438999999999999 * fVec4[((IOTA - 60) & 127)]) + ((0.00122438 * fVec4[((IOTA - 52) & 127)]) + ((0.0070393900000000004 * fVec4[((IOTA - 39) & 127)]) + ((0.0048936500000000003 * fVec4[((IOTA - 37) & 127)]) + ((0.0095701499999999995 * fVec4[((IOTA - 36) & 127)]) + ((0.015800600000000001 * fVec4[((IOTA - 33) & 127)]) + ((0.011886499999999999 * fVec4[((IOTA - 32) & 127)]) + ((0.0058739299999999994 * fVec4[((IOTA - 30) & 127)]) + ((0.024750999999999999 * fVec4[((IOTA - 29) & 127)]) + ((0.0086730599999999998 * fVec4[((IOTA - 28) & 127)]) + ((0.023463500000000002 * fVec4[((IOTA - 26) & 127)]) + ((0.052758300000000001 * fVec4[((IOTA - 25) & 127)]) + ((0.0124978 * fVec4[((IOTA - 24) & 127)]) + ((0.035996800000000002 * fVec4[((IOTA - 22) & 127)]) + ((0.013752100000000001 * fVec4[((IOTA - 21) & 127)]) + ((0.0018844000000000001 * fVec4[((IOTA - 20) & 127)]) + ((0.0448946 * fVec4[((IOTA - 19) & 127)]) + ((0.00033159299999999998 * fVec4[((IOTA - 18) & 127)]) + ((0.00255288 * fVec4[((IOTA - 10) & 127)]) + ((0.00094661300000000001 * fVec4[((IOTA - 8) & 127)]) + ((0.0010133200000000001 * fVec4[((IOTA - 6) & 127)]) + ((0.00025746299999999998 * fVec4[((IOTA - 2) & 127)]) + ((0.00271718 * fVec4[((IOTA - 75) & 127)]) + ((3.43292e-08 * fVec0[((IOTA - 126) & 127)]) + ((3.3588899999999999e-06 * fVec0[((IOTA - 125) & 127)]) + ((3.9804799999999997e-06 * fVec0[((IOTA - 124) & 127)]) + ((2.0105900000000003e-05 * fVec0[((IOTA - 123) & 127)]) + ((7.7608600000000008e-05 * fVec0[((IOTA - 119) & 127)]) + ((5.0789799999999999e-05 * fVec0[((IOTA - 116) & 127)]) + ((0.00020361699999999999 * fVec0[((IOTA - 115) & 127)]) + ((0.00030080800000000001 * fVec0[((IOTA - 114) & 127)]) + ((3.2623300000000003e-05 * fVec0[((IOTA - 113) & 127)]) + ((0.00026027500000000002 * fVec0[((IOTA - 110) & 127)]) + ((0.00020187200000000002 * fVec0[((IOTA - 109) & 127)]) + ((0.00040571999999999998 * fVec0[((IOTA - 108) & 127)]) + ((0.00053009599999999997 * fVec0[((IOTA - 107) & 127)]) + ((0.00050674400000000005 * fVec0[((IOTA - 106) & 127)]) + ((0.00049718700000000006 * fVec0[((IOTA - 105) & 127)]) + ((0.0011330000000000001 * fVec0[((IOTA - 104) & 127)]) + ((0.0016271899999999999 * fVec0[((IOTA - 103) & 127)]) + ((0.00069229100000000004 * fVec0[((IOTA - 102) & 127)]) + ((0.00046662400000000006 * fVec0[((IOTA - 101) & 127)]) + ((0.00069381500000000008 * fVec0[((IOTA - 100) & 127)]) + ((0.00038071900000000001 * fVec0[((IOTA - 99) & 127)]) + ((0.00084254300000000007 * fVec0[((IOTA - 98) & 127)]) + ((0.00156339 * fVec0[((IOTA - 97) & 127)]) + ((0.0034697200000000004 * fVec0[((IOTA - 96) & 127)]) + ((0.0030116200000000004 * fVec0[((IOTA - 95) & 127)]) + ((0.00075465500000000002 * fVec0[((IOTA - 94) & 127)]) + ((0.00068181600000000002 * fVec0[((IOTA - 93) & 127)]) + ((0.00071934100000000008 * fVec0[((IOTA - 92) & 127)]) + ((0.00040184499999999996 * fVec0[((IOTA - 91) & 127)]) + ((0.00055143000000000011 * fVec0[((IOTA - 90) & 127)]) + ((0.0016723300000000001 * fVec0[((IOTA - 89) & 127)]) + ((0.0017063 * fVec0[((IOTA - 88) & 127)]) + ((0.0013395900000000001 * fVec0[((IOTA - 87) & 127)]) + ((0.0026214800000000003 * fVec0[((IOTA - 86) & 127)]) + ((0.0034494400000000002 * fVec0[((IOTA - 85) & 127)]) + ((0.0025590399999999998 * fVec0[((IOTA - 84) & 127)]) + ((0.0014532900000000001 * fVec0[((IOTA - 83) & 127)]) + ((0.00127111 * fVec0[((IOTA - 78) & 127)]) + ((0.0011545000000000001 * fVec0[((IOTA - 77) & 127)]) + ((0.00061171300000000006 * fVec0[((IOTA - 76) & 127)]) + ((0.00020694100000000001 * fVec0[((IOTA - 75) & 127)]) + ((0.00064708400000000003 * fVec0[((IOTA - 74) & 127)]) + ((0.0010632999999999999 * fVec0[((IOTA - 73) & 127)]) + ((0.000609699 * fVec0[((IOTA - 72) & 127)]) + ((0.00058977500000000006 * fVec0[((IOTA - 71) & 127)]) + ((0.0005591420000000001 * fVec0[((IOTA - 67) & 127)]) + ((8.8419900000000004e-05 * fVec0[((IOTA - 65) & 127)]) + ((0.00150508 * fVec0[((IOTA - 64) & 127)]) + ((0.0014054500000000001 * fVec0[((IOTA - 60) & 127)]) + ((0.00215198 * fVec0[((IOTA - 54) & 127)]) + ((0.000219724 * fVec0[((IOTA - 52) & 127)]) + ((0.0017431900000000001 * fVec0[((IOTA - 51) & 127)]) + ((0.000292148 * fVec0[((IOTA - 49) & 127)]) + ((0.00356967 * fVec0[((IOTA - 48) & 127)]) + ((0.00055458199999999997 * fVec0[((IOTA - 47) & 127)]) + ((0.0018462400000000001 * fVec0[((IOTA - 45) & 127)]) + ((0.0038023500000000003 * fVec0[((IOTA - 42) & 127)]) + ((0.0029068700000000002 * fVec0[((IOTA - 40) & 127)]) + ((0.0099856200000000006 * fVec0[((IOTA - 29) & 127)]) + ((0.010922899999999999 * fVec0[((IOTA - 28) & 127)]) + ((0.0013328999999999999 * fVec0[((IOTA - 24) & 127)]) + ((0.0016006100000000001 * fVec0[((IOTA - 23) & 127)]) + ((0.0099153599999999998 * fVec0[((IOTA - 22) & 127)]) + ((0.016723499999999999 * fVec0[((IOTA - 20) & 127)]) + ((0.045127499999999994 * fVec0[((IOTA - 17) & 127)]) + ((0.0059659600000000002 * fVec0[((IOTA - 14) & 127)]) + ((0.0027371000000000001 * fVec0[((IOTA - 13) & 127)]) + ((4.6184399999999998e-05 * fVec0[((IOTA - 10) & 127)]) + ((0.0025209700000000004 * fVec0[((IOTA - 8) & 127)]) + ((0.00036855699999999999 * fVec0[((IOTA - 6) & 127)]) + ((0.00070276500000000005 * fVec0[((IOTA - 5) & 127)]) + ((0.00090358699999999997 * fVec0[((IOTA - 4) & 127)]) + ((0.000231406 * fVec0[((IOTA - 2) & 127)]) + ((4.4178200000000003e-05 * fVec0[((IOTA - 1) & 127)]) + ((1.57811e-05 * fTemp0) + ((0.0047945900000000005 * fVec0[((IOTA - 39) & 127)]) + ((0.0038672100000000003 * fVec0[((IOTA - 38) & 127)]) + ((4.1971900000000004e-05 * fVec0[((IOTA - 36) & 127)]) + ((0.0060181399999999999 * fVec0[((IOTA - 35) & 127)]) + ((0.0049045500000000006 * fVec0[((IOTA - 33) & 127)]) + ((0.0091428700000000009 * fVec0[((IOTA - 32) & 127)]) + ((2.5137800000000002e-07 * fVec32[((IOTA - 126) & 127)]) + ((6.1820100000000001e-06 * fVec32[((IOTA - 125) & 127)]) + ((3.82797e-06 * fVec32[((IOTA - 124) & 127)]) + ((2.1185900000000001e-06 * fVec32[((IOTA - 123) & 127)]) + ((2.7248300000000001e-05 * fVec32[((IOTA - 121) & 127)]) + ((3.8722400000000007e-05 * fVec32[((IOTA - 120) & 127)]) + ((8.2140799999999984e-06 * fVec32[((IOTA - 119) & 127)]) + ((3.8470500000000004e-05 * fVec32[((IOTA - 117) & 127)]) + ((9.096330000000001e-05 * fVec32[((IOTA - 116) & 127)]) + ((8.7317000000000004e-05 * fVec32[((IOTA - 114) & 127)]) + ((0.000227166 * fVec32[((IOTA - 113) & 127)]) + ((8.3273200000000014e-05 * fVec32[((IOTA - 112) & 127)]) + ((8.2866000000000002e-05 * fVec32[((IOTA - 111) & 127)]) + ((0.00014514899999999999 * fVec32[((IOTA - 110) & 127)]) + ((0.00010655300000000001 * fVec32[((IOTA - 108) & 127)]) + ((0.00020428199999999999 * fVec32[((IOTA - 107) & 127)]) + ((5.2586900000000003e-05 * fVec32[((IOTA - 106) & 127)]) + ((0.00036701000000000003 * fVec32[((IOTA - 105) & 127)]) + ((0.00050770799999999994 * fVec32[((IOTA - 104) & 127)]) + ((0.00025426099999999998 * fVec32[((IOTA - 101) & 127)]) + ((0.00018379600000000001 * fVec32[((IOTA - 98) & 127)]) + ((0.00035138200000000002 * fVec32[((IOTA - 97) & 127)]) + ((7.6149300000000013e-05 * fVec32[((IOTA - 95) & 127)]) + ((0.0015575400000000001 * fVec32[((IOTA - 94) & 127)]) + ((0.00063264199999999999 * fVec32[((IOTA - 93) & 127)]) + ((0.00014839199999999998 * fVec32[((IOTA - 92) & 127)]) + ((0.00086251900000000007 * fVec32[((IOTA - 87) & 127)]) + ((0.0019024199999999999 * fVec32[((IOTA - 86) & 127)]) + ((0.00129144 * fVec32[((IOTA - 83) & 127)]) + ((0.00047882000000000003 * fVec32[((IOTA - 78) & 127)]) + ((0.0013118799999999999 * fVec32[((IOTA - 75) & 127)]) + ((0.0011614100000000001 * fVec32[((IOTA - 74) & 127)]) + ((0.0014712700000000002 * fVec32[((IOTA - 68) & 127)]) + ((0.0026238199999999998 * fVec32[((IOTA - 67) & 127)]) + ((0.0020513699999999998 * fVec32[((IOTA - 62) & 127)]) + ((0.00160801 * fVec32[((IOTA - 61) & 127)]) + ((0.00147938 * fVec32[((IOTA - 59) & 127)]) + ((0.00013115699999999999 * fVec32[((IOTA - 58) & 127)]) + ((0.00050519600000000007 * fVec32[((IOTA - 57) & 127)]) + ((0.0016339300000000002 * fVec32[((IOTA - 56) & 127)]) + ((0.0011073599999999999 * fVec32[((IOTA - 52) & 127)]) + ((0.0016051100000000001 * fVec32[((IOTA - 50) & 127)]) + ((0.0079808199999999996 * fVec32[((IOTA - 49) & 127)]) + ((0.00196889 * fVec32[((IOTA - 48) & 127)]) + ((0.0044432300000000003 * fVec32[((IOTA - 45) & 127)]) + ((0.000208879 * fVec32[((IOTA - 44) & 127)]) + ((0.0013145500000000001 * fVec32[((IOTA - 42) & 127)]) + ((9.226730000000001e-05 * fVec32[((IOTA - 40) & 127)]) + ((0.0053560100000000005 * fVec32[((IOTA - 39) & 127)]) + ((0.0053043999999999999 * fVec32[((IOTA - 38) & 127)]) + ((0.00291413 * fVec32[((IOTA - 37) & 127)]) + ((0.010230900000000001 * fVec32[((IOTA - 36) & 127)]) + ((0.0073240200000000005 * fVec32[((IOTA - 35) & 127)]) + ((0.0073238899999999996 * fVec32[((IOTA - 31) & 127)]) + ((0.0105234 * fVec32[((IOTA - 30) & 127)]) + ((0.0034125200000000005 * fVec32[((IOTA - 26) & 127)]) + ((0.0069197900000000003 * fVec32[((IOTA - 25) & 127)]) + ((0.031673199999999999 * fVec32[((IOTA - 18) & 127)]) + ((0.0274497 * fVec32[((IOTA - 17) & 127)]) + ((0.0030908899999999998 * fVec32[((IOTA - 16) & 127)]) + ((0.0103427 * fVec32[((IOTA - 15) & 127)]) + ((0.0120915 * fVec32[((IOTA - 13) & 127)]) + ((0.0038904299999999998 * fVec32[((IOTA - 10) & 127)]) + ((0.0024724199999999999 * fVec32[((IOTA - 8) & 127)]) + ((0.0012886100000000001 * fVec32[((IOTA - 6) & 127)]) + ((0.00084856599999999993 * fVec32[((IOTA - 4) & 127)]) + ((0.00020222799999999999 * fVec32[((IOTA - 2) & 127)]) + ((2.0016700000000001e-05 * fVec32[((IOTA - 1) & 127)]) + ((1.4622100000000002e-05 * fTemp32) + ((2.4533100000000001e-06 * fVec33[((IOTA - 126) & 127)]) + ((1.70273e-06 * fVec33[((IOTA - 125) & 127)]) + ((8.0341699999999997e-06 * fVec33[((IOTA - 123) & 127)]) + ((3.8827600000000008e-05 * fVec33[((IOTA - 122) & 127)]) + ((0.000101833 * fVec33[((IOTA - 121) & 127)]) + ((0.000105639 * fVec33[((IOTA - 120) & 127)]) + ((3.9296600000000006e-05 * fVec33[((IOTA - 119) & 127)]) + ((8.7116700000000006e-05 * fVec32[((IOTA - 66) & 127)]) + ((3.85491e-05 * fVec33[((IOTA - 117) & 127)]) + ((0.00018456300000000003 * fVec33[((IOTA - 116) & 127)]) + ((0.000184012 * fVec33[((IOTA - 115) & 127)]) + ((0.0019589099999999999 * fVec33[((IOTA - 96) & 127)]) + ((0.0031713800000000001 * fVec33[((IOTA - 95) & 127)]) + ((0.00068253400000000005 * fVec33[((IOTA - 94) & 127)]) + ((0.00056285600000000003 * fVec33[((IOTA - 91) & 127)]) + ((0.0014036900000000002 * fVec33[((IOTA - 90) & 127)]) + ((0.00337025 * fVec33[((IOTA - 87) & 127)]) + ((0.0052786200000000004 * fVec33[((IOTA - 86) & 127)]) + ((0.0015441700000000001 * fVec33[((IOTA - 85) & 127)]) + ((0.00036768800000000002 * fVec33[((IOTA - 84) & 127)]) + ((0.00069545300000000007 * fVec33[((IOTA - 83) & 127)]) + ((0.0010311999999999999 * fVec33[((IOTA - 65) & 127)]) + ((0.00113331 * fVec33[((IOTA - 64) & 127)]) + ((0.0014698599999999999 * fVec33[((IOTA - 63) & 127)]) + ((0.00070883900000000006 * fVec33[((IOTA - 62) & 127)]) + ((0.0020663499999999998 * fVec33[((IOTA - 57) & 127)]) + ((0.00288332 * fVec33[((IOTA - 56) & 127)]) + ((0.0008817050000000001 * fVec33[((IOTA - 55) & 127)]) + ((0.0035919900000000002 * fVec33[((IOTA - 54) & 127)]) + ((0.0016634199999999999 * fVec33[((IOTA - 53) & 127)]) + ((0.0012247 * fVec33[((IOTA - 52) & 127)]) + ((0.00117636 * fVec33[((IOTA - 51) & 127)]) + ((0.0053477200000000003 * fVec33[((IOTA - 49) & 127)]) + ((0.00571347 * fVec33[((IOTA - 48) & 127)]) + ((0.0068109299999999998 * fVec33[((IOTA - 45) & 127)]) + ((0.00503769 * fVec33[((IOTA - 44) & 127)]) + ((0.0033690899999999999 * fVec33[((IOTA - 43) & 127)]) + ((0.0081425600000000001 * fVec33[((IOTA - 42) & 127)]) + ((0.0048383499999999999 * fVec33[((IOTA - 39) & 127)]) + ((1.73416e-05 * fVec33[((IOTA - 38) & 127)]) + ((0.0011593500000000002 * fVec33[((IOTA - 37) & 127)]) + ((0.00341282 * fVec33[((IOTA - 36) & 127)]) + ((0.0053672899999999994 * fVec33[((IOTA - 34) & 127)]) + ((0.0060068300000000003 * fVec33[((IOTA - 33) & 127)]) + ((0.036282299999999996 * fVec33[((IOTA - 30) & 127)]) + ((0.0096774400000000007 * fVec33[((IOTA - 29) & 127)]) + ((0.0174746 * fVec33[((IOTA - 18) & 127)]) + ((0.021190899999999999 * fVec33[((IOTA - 17) & 127)]) + ((0.0025345699999999999 * fVec33[((IOTA - 16) & 127)]) + ((0.0025992000000000003 * fVec33[((IOTA - 15) & 127)]) + ((0.0061892400000000004 * fVec33[((IOTA - 13) & 127)]) + ((0.0020100199999999999 * fVec33[((IOTA - 10) & 127)]) + ((0.00148817 * fVec33[((IOTA - 8) & 127)]) + ((0.00053443399999999997 * fVec33[((IOTA - 6) & 127)]) + ((0.00069470999999999997 * fVec33[((IOTA - 4) & 127)]) + ((0.00013874000000000002 * fVec33[((IOTA - 2) & 127)]) + ((2.49699e-05 * fVec33[((IOTA - 1) & 127)]) + ((9.9362800000000004e-06 * fTemp33) + ((0.03066 * fVec33[((IOTA - 26) & 127)]) + ((0.0019489700000000002 * fVec33[((IOTA - 23) & 127)]) + ((0.000702438 * fVec33[((IOTA - 20) & 127)]) + ((9.4065400000000002e-05 * fVec33[((IOTA - 22) & 127)]) + ((2.4082099999999999e-06 * fVec34[((IOTA - 126) & 127)]) + ((8.464169999999999e-06 * fVec34[((IOTA - 125) & 127)]) + ((8.8836499999999992e-06 * fVec34[((IOTA - 124) & 127)]) + ((8.7967399999999994e-06 * fVec34[((IOTA - 123) & 127)]) + ((2.4375700000000001e-05 * fVec34[((IOTA - 122) & 127)]) + ((8.0066800000000004e-05 * fVec34[((IOTA - 121) & 127)]) + ((9.9426100000000014e-05 * fVec34[((IOTA - 120) & 127)]) + ((9.0816700000000014e-05 * fVec34[((IOTA - 119) & 127)]) + ((5.80835e-05 * fVec34[((IOTA - 118) & 127)]) + ((7.7452699999999998e-05 * fVec34[((IOTA - 117) & 127)]) + ((9.5024799999999997e-07 * fVec34[((IOTA - 116) & 127)]) + ((5.1149400000000002e-05 * fVec34[((IOTA - 98) & 127)]) + ((0.00032476299999999999 * fVec34[((IOTA - 97) & 127)]) + ((0.0012872900000000002 * fVec34[((IOTA - 94) & 127)]) + ((0.0022912900000000001 * fVec34[((IOTA - 93) & 127)]) + ((0.00119739 * fVec34[((IOTA - 92) & 127)]) + ((0.0019518999999999999 * fVec34[((IOTA - 90) & 127)]) + ((0.0043689900000000005 * fVec34[((IOTA - 89) & 127)]) + ((0.00375801 * fVec34[((IOTA - 88) & 127)]) + ((0.0016994499999999999 * fVec34[((IOTA - 87) & 127)]) + ((0.0032713800000000004 * fVec34[((IOTA - 86) & 127)]) + ((0.0036832600000000003 * fVec34[((IOTA - 85) & 127)]) + ((0.00089328000000000009 * fVec34[((IOTA - 84) & 127)]) + ((0.00072158200000000002 * fVec34[((IOTA - 83) & 127)]) + ((0.00038337700000000001 * fVec34[((IOTA - 80) & 127)]) + ((0.0016079900000000001 * fVec34[((IOTA - 79) & 127)]) + ((0.0020680200000000003 * fVec34[((IOTA - 78) & 127)]) + ((0.00028545500000000005 * fVec34[((IOTA - 77) & 127)]) + ((0.00025900400000000002 * fVec34[((IOTA - 75) & 127)]) + ((3.3718100000000005e-05 * fVec34[((IOTA - 63) & 127)]) + ((0.0016691100000000001 * fVec34[((IOTA - 62) & 127)]) + ((0.00089519800000000015 * fVec34[((IOTA - 60) & 127)]) + ((0.00079125400000000002 * fVec34[((IOTA - 59) & 127)]) + ((0.00099548200000000001 * fVec34[((IOTA - 58) & 127)]) + ((0.0024358800000000001 * fVec34[((IOTA - 54) & 127)]) + ((0.0056765999999999995 * fVec34[((IOTA - 53) & 127)]) + ((0.0027909200000000001 * fVec34[((IOTA - 52) & 127)]) + ((0.00077908600000000012 * fVec34[((IOTA - 51) & 127)]) + ((0.0016214599999999999 * fVec34[((IOTA - 50) & 127)]) + ((0.0042173100000000002 * fVec34[((IOTA - 48) & 127)]) + ((0.0091871399999999999 * fVec34[((IOTA - 47) & 127)]) + ((0.0022329500000000005 * fVec34[((IOTA - 44) & 127)]) + ((0.0028589500000000003 * fVec34[((IOTA - 42) & 127)]) + ((0.0021427500000000001 * fVec34[((IOTA - 45) & 127)]) + ((0.0070971000000000003 * fVec34[((IOTA - 41) & 127)]) + ((0.0053105900000000004 * fVec34[((IOTA - 40) & 127)]) + ((0.0030150300000000001 * fVec34[((IOTA - 39) & 127)]) + ((0.00053429399999999994 * fVec34[((IOTA - 36) & 127)]) + ((0.0164669 * fVec34[((IOTA - 35) & 127)]) + ((0.0037660800000000002 * fVec34[((IOTA - 33) & 127)]) + ((0.0086483100000000011 * fVec34[((IOTA - 32) & 127)]) + ((0.021576300000000003 * fVec34[((IOTA - 29) & 127)]) + ((0.021685099999999999 * fVec34[((IOTA - 28) & 127)]) + ((0.0057969700000000002 * fVec34[((IOTA - 26) & 127)]) + ((0.0057622799999999998 * fVec34[((IOTA - 24) & 127)]) + ((0.0197594 * fVec34[((IOTA - 21) & 127)]) + ((0.0121098 * fVec34[((IOTA - 20) & 127)]) + ((0.032535399999999999 * fVec34[((IOTA - 17) & 127)]) + ((0.00050339700000000005 * fVec34[((IOTA - 14) & 127)]) + ((0.00086802899999999998 * fVec34[((IOTA - 13) & 127)]) + ((0.0016583500000000001 * fVec34[((IOTA - 8) & 127)]) + ((0.00031507000000000003 * fVec34[((IOTA - 5) & 127)]) + ((0.00049461800000000005 * fVec34[((IOTA - 4) & 127)]) + ((0.00015840400000000001 * fVec34[((IOTA - 2) & 127)]) + ((2.8519800000000004e-05 * fVec34[((IOTA - 1) & 127)]) + ((4.4578800000000004e-06 * fTemp34) + ((0.0013077200000000001 * fVec34[((IOTA - 46) & 127)]) + ((1.1796500000000001e-05 * fVec23[((IOTA - 114) & 127)]) + ((0.00041981599999999999 * fVec23[((IOTA - 107) & 127)]) + ((5.3605900000000008e-05 * fVec23[((IOTA - 105) & 127)]) + ((0.00046969700000000004 * fVec23[((IOTA - 104) & 127)]) + ((0.00047704000000000008 * fVec23[((IOTA - 103) & 127)]) + ((0.00043236800000000009 * fVec23[((IOTA - 102) & 127)]) + ((0.00070973900000000003 * fVec23[((IOTA - 101) & 127)]) + ((0.000705385 * fVec23[((IOTA - 100) & 127)]) + ((0.00045614100000000008 * fVec23[((IOTA - 99) & 127)]) + ((0.00092227100000000001 * fVec23[((IOTA - 98) & 127)]) + ((0.00081300600000000002 * fVec23[((IOTA - 97) & 127)]) + ((0.000623519 * fVec23[((IOTA - 96) & 127)]) + ((0.0013659500000000001 * fVec23[((IOTA - 95) & 127)]) + ((0.00214314 * fVec23[((IOTA - 94) & 127)]) + ((0.0016777999999999999 * fVec23[((IOTA - 93) & 127)]) + ((0.00108099 * fVec23[((IOTA - 92) & 127)]) + ((6.7984800000000007e-05 * fVec23[((IOTA - 90) & 127)]) + ((0.000264467 * fVec23[((IOTA - 89) & 127)]) + ((0.00045975200000000007 * fVec23[((IOTA - 88) & 127)]) + ((0.0013345100000000001 * fVec23[((IOTA - 87) & 127)]) + ((0.0013671599999999999 * fVec23[((IOTA - 86) & 127)]) + ((0.00088433700000000001 * fVec23[((IOTA - 85) & 127)]) + ((0.0010498400000000002 * fVec23[((IOTA - 84) & 127)]) + ((0.00300031 * fVec23[((IOTA - 83) & 127)]) + ((0.00033132700000000002 * fVec23[((IOTA - 82) & 127)]) + ((2.3648600000000003e-05 * fVec23[((IOTA - 80) & 127)]) + ((0.00058793100000000009 * fVec23[((IOTA - 79) & 127)]) + ((0.0027816299999999998 * fVec23[((IOTA - 78) & 127)]) + ((0.0017765299999999999 * fVec23[((IOTA - 77) & 127)]) + ((0.00046795000000000002 * fVec23[((IOTA - 73) & 127)]) + ((0.0016152100000000002 * fVec23[((IOTA - 72) & 127)]) + ((0.058508199999999996 * fVec23[((IOTA - 22) & 127)]) + ((0.050635700000000006 * fVec23[((IOTA - 21) & 127)]) + ((0.041341200000000002 * fVec23[((IOTA - 20) & 127)]) + ((0.0214629 * fVec23[((IOTA - 19) & 127)]) + ((0.029345699999999999 * fVec23[((IOTA - 18) & 127)]) + ((0.088954799999999987 * fVec23[((IOTA - 17) & 127)]) + ((0.063658400000000004 * fVec23[((IOTA - 16) & 127)]) + ((0.078143400000000002 * fVec23[((IOTA - 15) & 127)]) + ((0.060886200000000001 * fVec23[((IOTA - 14) & 127)]) + ((0.077131900000000003 * fVec23[((IOTA - 13) & 127)]) + ((0.090551499999999993 * fVec23[((IOTA - 12) & 127)]) + ((0.0054581200000000003 * fVec23[((IOTA - 11) & 127)]) + ((0.00114689 * fVec23[((IOTA - 5) & 127)]) + ((0.00058690300000000006 * fVec23[((IOTA - 4) & 127)]) + ((0.0012299100000000001 * fVec23[((IOTA - 3) & 127)]) + ((0.00015469 * fVec23[((IOTA - 1) & 127)]) + ((3.3955100000000003e-05 * fTemp23) + ((2.0625300000000001e-06 * fVec35[((IOTA - 126) & 127)]) + ((5.0813899999999995e-06 * fVec35[((IOTA - 125) & 127)]) + ((5.7126099999999992e-06 * fVec35[((IOTA - 124) & 127)]) + ((0.0018110400000000001 * fVec23[((IOTA - 9) & 127)]) + ((2.09787e-05 * fVec35[((IOTA - 123) & 127)]) + ((1.8717900000000003e-05 * fVec35[((IOTA - 122) & 127)]) + ((4.2541300000000006e-05 * fVec35[((IOTA - 121) & 127)]) + ((0.00010654600000000001 * fVec35[((IOTA - 120) & 127)]) + ((0.00016404399999999999 * fVec35[((IOTA - 119) & 127)]) + ((0.00016872499999999999 * fVec35[((IOTA - 118) & 127)]) + ((0.00025855300000000002 * fVec35[((IOTA - 117) & 127)]) + ((0.00034160000000000001 * fVec35[((IOTA - 116) & 127)]) + ((0.00045382400000000002 * fVec35[((IOTA - 115) & 127)]) + ((0.00054736599999999998 * fVec35[((IOTA - 114) & 127)]) + ((0.00053358400000000003 * fVec35[((IOTA - 113) & 127)]) + ((0.00050102000000000002 * fVec35[((IOTA - 112) & 127)]) + ((0.00067625599999999997 * fVec35[((IOTA - 111) & 127)]) + ((0.00098166300000000002 * fVec35[((IOTA - 110) & 127)]) + ((0.00083451500000000008 * fVec35[((IOTA - 109) & 127)]) + ((0.0009436510000000001 * fVec35[((IOTA - 108) & 127)]) + ((0.0012923000000000001 * fVec35[((IOTA - 107) & 127)]) + ((0.00136699 * fVec35[((IOTA - 106) & 127)]) + ((0.0014059200000000002 * fVec35[((IOTA - 105) & 127)]) + ((0.0012065399999999999 * fVec35[((IOTA - 104) & 127)]) + ((0.00185348 * fVec35[((IOTA - 103) & 127)]) + ((0.00154024 * fVec35[((IOTA - 102) & 127)]) + ((0.00087727600000000008 * fVec35[((IOTA - 101) & 127)]) + ((0.00050683400000000006 * fVec35[((IOTA - 100) & 127)]) + ((0.00061282500000000011 * fVec35[((IOTA - 99) & 127)]) + ((0.00058470199999999999 * fVec35[((IOTA - 98) & 127)]) + ((0.00054874000000000004 * fVec35[((IOTA - 96) & 127)]) + ((0.00272945 * fVec35[((IOTA - 95) & 127)]) + ((0.0021461499999999999 * fVec35[((IOTA - 94) & 127)]) + ((2.3955000000000004e-05 * fVec35[((IOTA - 93) & 127)]) + ((0.00041329900000000006 * fVec35[((IOTA - 90) & 127)]) + ((0.0037083100000000003 * fVec35[((IOTA - 87) & 127)]) + ((0.0051757600000000006 * fVec35[((IOTA - 86) & 127)]) + ((0.0016799500000000001 * fVec35[((IOTA - 85) & 127)]) + ((0.0015701700000000001 * fVec35[((IOTA - 83) & 127)]) + ((0.00056369199999999997 * fVec35[((IOTA - 82) & 127)]) + ((0.0024365300000000001 * fVec35[((IOTA - 80) & 127)]) + ((0.0041905200000000005 * fVec35[((IOTA - 79) & 127)]) + ((0.0024405 * fVec35[((IOTA - 78) & 127)]) + ((0.00082847699999999999 * fVec35[((IOTA - 77) & 127)]) + ((0.0041945800000000007 * fVec35[((IOTA - 76) & 127)]) + ((0.0063743100000000002 * fVec35[((IOTA - 75) & 127)]) + ((0.0029129100000000003 * fVec35[((IOTA - 74) & 127)]) + ((0.0030868900000000001 * fVec35[((IOTA - 73) & 127)]) + ((0.0052356299999999998 * fVec35[((IOTA - 72) & 127)]) + ((0.0032107500000000001 * fVec35[((IOTA - 71) & 127)]) + ((0.00185049 * fVec35[((IOTA - 70) & 127)]) + ((0.0014647 * fVec35[((IOTA - 69) & 127)]) + ((0.0022559300000000002 * fVec35[((IOTA - 68) & 127)]) + ((0.0034284599999999999 * fVec35[((IOTA - 67) & 127)]) + ((0.0023089200000000003 * fVec35[((IOTA - 66) & 127)]) + ((0.0027403499999999999 * fVec35[((IOTA - 65) & 127)]) + ((0.0042152999999999999 * fVec35[((IOTA - 64) & 127)]) + ((0.0062385100000000001 * fVec35[((IOTA - 63) & 127)]) + ((0.0068040700000000006 * fVec35[((IOTA - 62) & 127)]) + ((0.0035775299999999998 * fVec35[((IOTA - 61) & 127)]) + ((0.0042250600000000001 * fVec35[((IOTA - 60) & 127)]) + ((0.0031211899999999998 * fVec35[((IOTA - 59) & 127)]) + ((0.0036129299999999999 * fVec35[((IOTA - 58) & 127)]) + ((0.0050028199999999998 * fVec35[((IOTA - 57) & 127)]) + ((0.0012118500000000002 * fVec35[((IOTA - 56) & 127)]) + ((0.0012461600000000001 * fVec35[((IOTA - 55) & 127)]) + ((0.00305273 * fVec35[((IOTA - 54) & 127)]) + ((0.00325793 * fVec35[((IOTA - 53) & 127)]) + ((0.0028833999999999999 * fVec35[((IOTA - 52) & 127)]) + ((0.0036652500000000001 * fVec35[((IOTA - 51) & 127)]) + ((0.00086377000000000014 * fVec35[((IOTA - 50) & 127)]) + ((0.00175234 * fVec35[((IOTA - 49) & 127)]) + ((0.00306785 * fVec35[((IOTA - 48) & 127)]) + ((0.00250454 * fVec35[((IOTA - 46) & 127)]) + ((0.015005800000000001 * fVec35[((IOTA - 45) & 127)]) + ((0.0079248200000000008 * fVec35[((IOTA - 44) & 127)]) + ((0.0028857800000000001 * fVec35[((IOTA - 43) & 127)]) + ((0.0074329900000000004 * fVec35[((IOTA - 42) & 127)]) + ((0.0056945699999999995 * fVec35[((IOTA - 41) & 127)]) + ((0.0064973000000000001 * fVec35[((IOTA - 40) & 127)]) + ((0.011589100000000001 * fVec35[((IOTA - 39) & 127)]) + ((0.0069301900000000001 * fVec35[((IOTA - 38) & 127)]) + ((0.0079812000000000008 * fVec35[((IOTA - 37) & 127)]) + ((0.0141227 * fVec35[((IOTA - 36) & 127)]) + ((0.0044680700000000002 * fVec35[((IOTA - 35) & 127)]) + ((0.020023599999999999 * fVec35[((IOTA - 34) & 127)]) + ((0.023001999999999998 * fVec35[((IOTA - 33) & 127)]) + ((0.0057082499999999998 * fVec35[((IOTA - 32) & 127)]) + ((0.011366300000000001 * fVec35[((IOTA - 31) & 127)]) + ((0.0266261 * fVec35[((IOTA - 30) & 127)]) + ((0.0087064099999999995 * fVec35[((IOTA - 29) & 127)]) + ((0.030624600000000002 * fVec35[((IOTA - 27) & 127)]) + ((0.0528391 * fVec35[((IOTA - 26) & 127)]) + ((0.031746299999999998 * fVec35[((IOTA - 25) & 127)]) + ((((((((((((((((((((((((2.5118200000000003e-05 * fTemp35) + (0.00012370799999999999 * fVec35[((IOTA - 1) & 127)])) + (0.00096838400000000008 * fVec35[((IOTA - 3) & 127)])) + (0.00059949000000000005 * fVec35[((IOTA - 4) & 127)])) + (0.00076772799999999997 * fVec35[((IOTA - 5) & 127)])) + (0.00014117900000000001 * fVec35[((IOTA - 6) & 127)])) + (0.0018634200000000002 * fVec35[((IOTA - 7) & 127)])) + (0.00024957099999999997 * fVec35[((IOTA - 8) & 127)])) + (0.0011589199999999999 * fVec35[((IOTA - 9) & 127)])) + (0.00050879500000000004 * fVec35[((IOTA - 10) & 127)])) + (0.0036302599999999997 * fVec35[((IOTA - 11) & 127)])) + (0.056510400000000002 * fVec35[((IOTA - 12) & 127)])) + (0.049342300000000006 * fVec35[((IOTA - 13) & 127)])) + (0.0449074 * fVec35[((IOTA - 14) & 127)])) + (0.064749100000000004 * fVec35[((IOTA - 15) & 127)])) + (0.059606500000000007 * fVec35[((IOTA - 16) & 127)])) + (0.073495100000000008 * fVec35[((IOTA - 17) & 127)])) + (0.034514800000000005 * fVec35[((IOTA - 18) & 127)])) + (0.055772500000000003 * fVec35[((IOTA - 19) & 127)])) + (0.06596840000000001 * fVec35[((IOTA - 20) & 127)])) + (0.057809200000000005 * fVec35[((IOTA - 21) & 127)])) + (0.096895100000000012 * fVec35[((IOTA - 22) & 127)])) + (0.021260899999999999 * fVec35[((IOTA - 23) & 127)])) + (0.00194177 * fVec23[((IOTA - 7) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (8.1495099999999995e-06 * fTemp2))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (5.6033000000000004e-05 * fVec2[((IOTA - 112) & 127)]))))) + (5.4062099999999999e-06 * fTemp3)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((0.0017748 * (fVec0[((IOTA - 37) & 127)] - fVec2[((IOTA - 11) & 127)])) + ((1.2428099999999998e-06 * fVec2[((IOTA - 126) & 127)]) + ((3.2792599999999998e-06 * fVec2[((IOTA - 125) & 127)]) + ((2.2750200000000001e-05 * fVec2[((IOTA - 123) & 127)]) + ((4.2331799999999998e-06 * fVec2[((IOTA - 122) & 127)]) + ((1.1368e-07 * fVec3[((IOTA - 125) & 127)]) + ((1.0452899999999999e-06 * fVec3[((IOTA - 124) & 127)]) + ((8.8748199999999998e-06 * fVec3[((IOTA - 123) & 127)]) + ((3.0136000000000001e-05 * fVec3[((IOTA - 121) & 127)]) + ((5.1785900000000002e-05 * fVec3[((IOTA - 120) & 127)]) + ((4.6594100000000008e-05 * fVec3[((IOTA - 117) & 127)]) + ((4.237040000000001e-05 * fVec3[((IOTA - 116) & 127)]) + ((7.5302800000000007e-05 * fVec3[((IOTA - 115) & 127)]) + ((0.00015921899999999999 * fVec3[((IOTA - 114) & 127)]) + ((0.00029620800000000001 * fVec3[((IOTA - 111) & 127)]) + ((0.00010367800000000001 * fVec3[((IOTA - 110) & 127)]) + ((0.000257395 * fVec3[((IOTA - 106) & 127)]) + ((0.00022867000000000002 * fVec3[((IOTA - 105) & 127)]) + ((0.00059618500000000005 * fVec3[((IOTA - 102) & 127)]) + ((5.3153400000000005e-05 * fVec3[((IOTA - 98) & 127)]) + ((0.00050300500000000005 * fVec3[((IOTA - 96) & 127)]) + ((0.00089824300000000017 * fVec3[((IOTA - 95) & 127)]) + ((0.00071672300000000006 * fVec3[((IOTA - 91) & 127)]) + ((0.00087084 * fVec3[((IOTA - 90) & 127)]) + ((0.00066567000000000004 * fVec3[((IOTA - 87) & 127)]) + ((0.00063050300000000003 * fVec3[((IOTA - 86) & 127)]) + ((0.00036544600000000001 * fVec3[((IOTA - 78) & 127)]) + ((0.0005348620000000001 * fVec3[((IOTA - 77) & 127)]) + ((0.00011637300000000001 * fVec3[((IOTA - 76) & 127)]) + ((0.00062500400000000008 * fVec3[((IOTA - 74) & 127)]) + ((0.0030246700000000001 * fVec3[((IOTA - 73) & 127)]) + ((5.18251e-05 * fVec3[((IOTA - 72) & 127)]) + ((0.00104465 * fVec3[((IOTA - 70) & 127)]) + ((0.00068156400000000006 * fVec3[((IOTA - 69) & 127)]) + ((0.00091668200000000004 * fVec3[((IOTA - 64) & 127)]) + ((0.0014250000000000001 * fVec3[((IOTA - 63) & 127)]) + ((0.00084994200000000012 * fVec3[((IOTA - 62) & 127)]) + ((0.0013655200000000001 * fVec3[((IOTA - 61) & 127)]) + ((0.00027888500000000004 * fVec3[((IOTA - 59) & 127)]) + ((0.00086320200000000009 * fVec3[((IOTA - 58) & 127)]) + ((0.0014153 * fVec3[((IOTA - 54) & 127)]) + ((0.0045418999999999998 * fVec3[((IOTA - 53) & 127)]) + ((0.00384556 * fVec3[((IOTA - 52) & 127)]) + ((0.000366072 * fVec3[((IOTA - 51) & 127)]) + ((0.0014374700000000002 * fVec3[((IOTA - 46) & 127)]) + ((0.00033874399999999998 * fVec3[((IOTA - 41) & 127)]) + ((0.00030484800000000003 * fVec3[((IOTA - 40) & 127)]) + ((0.0048036700000000003 * fVec3[((IOTA - 39) & 127)]) + ((0.00164291 * fVec3[((IOTA - 37) & 127)]) + ((0.00249059 * fVec3[((IOTA - 36) & 127)]) + ((0.0017187699999999999 * fVec3[((IOTA - 34) & 127)]) + ((0.014106700000000002 * fVec3[((IOTA - 31) & 127)]) + ((0.0034631599999999998 * fVec3[((IOTA - 30) & 127)]) + ((0.00122021 * fVec3[((IOTA - 29) & 127)]) + ((0.0144908 * fVec3[((IOTA - 28) & 127)]) + ((0.0051645099999999998 * fVec3[((IOTA - 27) & 127)]) + ((0.0019336899999999998 * fVec3[((IOTA - 25) & 127)]) + ((0.015479700000000001 * fVec3[((IOTA - 24) & 127)]) + ((0.028817700000000002 * fVec3[((IOTA - 21) & 127)]) + ((0.027774999999999998 * fVec3[((IOTA - 20) & 127)]) + ((0.0095242599999999997 * fVec3[((IOTA - 19) & 127)]) + ((0.0279913 * fVec3[((IOTA - 17) & 127)]) + ((0.0417492 * fVec3[((IOTA - 16) & 127)]) + ((0.026455700000000002 * fVec3[((IOTA - 12) & 127)]) + ((0.0106439 * fVec3[((IOTA - 11) & 127)]) + ((0.0028387799999999999 * fVec3[((IOTA - 9) & 127)]) + ((0.0027678799999999999 * fVec3[((IOTA - 7) & 127)]) + ((0.00059594300000000004 * fVec3[((IOTA - 5) & 127)]) + (((5.3590300000000001e-05 * fVec2[((IOTA - 120) & 127)]) + (((0.00014028700000000001 * fVec2[((IOTA - 116) & 127)]) + ((1.5673600000000002e-05 * fVec2[((IOTA - 117) & 127)]) + ((4.8999100000000003e-05 * fVec2[((IOTA - 114) & 127)]) + ((1.5814299999999998e-06 * fVec2[((IOTA - 119) & 127)]) + ((0.00050147500000000003 * fVec2[((IOTA - 108) & 127)]) + ((0.00022363300000000002 * fVec2[((IOTA - 107) & 127)]) + ((0.00033507799999999999 * fVec2[((IOTA - 100) & 127)]) + ((0.00011688400000000001 * fVec2[((IOTA - 97) & 127)]) + ((0.00021406600000000001 * fVec2[((IOTA - 96) & 127)]) + ((0.000297423 * fVec2[((IOTA - 93) & 127)]) + ((0.0015387000000000001 * fVec2[((IOTA - 90) & 127)]) + ((0.00186258 * fVec2[((IOTA - 89) & 127)]) + ((0.00084719700000000005 * fVec2[((IOTA - 86) & 127)]) + ((0.00233796 * fVec2[((IOTA - 85) & 127)]) + ((0.00012764500000000002 * fVec2[((IOTA - 84) & 127)]) + ((0.00021616300000000004 * fVec2[((IOTA - 83) & 127)]) + ((0.0024212699999999997 * fVec2[((IOTA - 76) & 127)]) + ((0.0028761400000000001 * fVec2[((IOTA - 75) & 127)]) + ((0.00043300400000000007 * fVec2[((IOTA - 72) & 127)]) + ((0.0024417599999999999 * fVec2[((IOTA - 71) & 127)]) + ((0.00075618700000000007 * fVec2[((IOTA - 70) & 127)]) + ((0.0017281500000000001 * fVec2[((IOTA - 65) & 127)]) + ((0.0051248600000000002 * fVec2[((IOTA - 64) & 127)]) + ((0.00047788000000000008 * fVec2[((IOTA - 63) & 127)]) + ((0.00093317700000000009 * fVec2[((IOTA - 58) & 127)]) + ((0.0021754500000000002 * fVec2[((IOTA - 57) & 127)]) + ((0.00054847800000000003 * fVec2[((IOTA - 56) & 127)]) + ((0.0027896000000000002 * fVec2[((IOTA - 53) & 127)]) + ((0.0026196700000000002 * fVec2[((IOTA - 52) & 127)]) + ((0.0031945100000000002 * fVec2[((IOTA - 51) & 127)]) + ((0.0014128300000000001 * fVec2[((IOTA - 50) & 127)]) + ((0.0013778600000000001 * fVec2[((IOTA - 47) & 127)]) + ((0.0024624100000000004 * fVec2[((IOTA - 44) & 127)]) + ((0.0041832300000000005 * fVec2[((IOTA - 40) & 127)]) + ((0.0042394400000000006 * fVec2[((IOTA - 38) & 127)]) + ((0.0079954099999999997 * fVec2[((IOTA - 37) & 127)]) + ((0.0063875200000000007 * fVec2[((IOTA - 34) & 127)]) + ((0.0162934 * fVec2[((IOTA - 33) & 127)]) + ((0.0146474 * fVec2[((IOTA - 32) & 127)]) + ((0.00101902 * fVec2[((IOTA - 29) & 127)]) + ((0.0168571 * fVec2[((IOTA - 28) & 127)]) + ((0.00062889200000000004 * fVec2[((IOTA - 27) & 127)]) + ((0.0076468400000000002 * fVec2[((IOTA - 25) & 127)]) + ((0.033886800000000002 * fVec2[((IOTA - 22) & 127)]) + ((0.0071410200000000005 * fVec2[((IOTA - 19) & 127)]) + ((0.036717600000000003 * fVec2[((IOTA - 18) & 127)]) + ((0.0076565000000000001 * fVec2[((IOTA - 17) & 127)]) + ((0.00298 * fVec2[((IOTA - 14) & 127)]) + ((0.0069646600000000001 * fVec2[((IOTA - 12) & 127)]) + ((0.00068874700000000008 * fVec2[((IOTA - 10) & 127)]) + ((0.00090127200000000005 * fVec2[((IOTA - 9) & 127)]) + ((0.00070176899999999998 * fVec2[((IOTA - 6) & 127)]) + ((0.00027111300000000002 * fVec2[((IOTA - 5) & 127)]) + ((0.00022685700000000001 * fVec1[((IOTA - 97) & 127)]) + ((0.0021709200000000002 * fVec1[((IOTA - 96) & 127)]) + ((0.00085764700000000012 * fVec1[((IOTA - 95) & 127)]) + ((0.00082614900000000009 * fVec1[((IOTA - 93) & 127)]) + ((0.00159165 * fVec1[((IOTA - 92) & 127)]) + ((0.00034550500000000002 * fVec1[((IOTA - 91) & 127)]) + ((0.00033078400000000004 * fVec1[((IOTA - 88) & 127)]) + ((0.00027603000000000003 * fVec1[((IOTA - 87) & 127)]) + ((0.00029228900000000005 * fVec1[((IOTA - 85) & 127)]) + ((0.00243838 * fVec1[((IOTA - 84) & 127)]) + ((0.0026374200000000001 * fVec1[((IOTA - 83) & 127)]) + ((0.00136692 * fVec1[((IOTA - 82) & 127)]) + ((0.00084570000000000012 * fVec1[((IOTA - 80) & 127)]) + ((0.00036336300000000001 * fVec1[((IOTA - 75) & 127)]) + ((0.00011652400000000001 * fVec1[((IOTA - 74) & 127)]) + ((0.00032160799999999997 * fVec1[((IOTA - 71) & 127)]) + ((0.00053794599999999998 * fVec1[((IOTA - 70) & 127)]) + ((0.00088611199999999999 * fVec1[((IOTA - 65) & 127)]) + ((0.0026223600000000002 * fVec1[((IOTA - 64) & 127)]) + ((0.0030361699999999999 * fVec1[((IOTA - 61) & 127)]) + ((0.0051482099999999994 * fVec1[((IOTA - 60) & 127)]) + ((0.0038286600000000002 * fVec1[((IOTA - 59) & 127)]) + ((0.0013894299999999999 * fVec1[((IOTA - 55) & 127)]) + ((0.00247795 * fVec1[((IOTA - 54) & 127)]) + ((0.0029021699999999999 * fVec1[((IOTA - 53) & 127)]) + ((0.0021600199999999999 * fVec1[((IOTA - 52) & 127)]) + ((0.0043512100000000003 * fVec1[((IOTA - 47) & 127)]) + ((0.0027352400000000003 * fVec1[((IOTA - 46) & 127)]) + ((0.010442 * fVec1[((IOTA - 42) & 127)]) + ((0.0069286199999999999 * fVec1[((IOTA - 41) & 127)]) + ((0.000433275 * fVec1[((IOTA - 40) & 127)]) + ((0.0015492300000000002 * fVec1[((IOTA - 39) & 127)]) + ((0.0029692899999999999 * fVec1[((IOTA - 37) & 127)]) + ((0.0062910800000000001 * fVec1[((IOTA - 34) & 127)]) + ((9.2176700000000001e-05 * fVec1[((IOTA - 32) & 127)]) + ((0.013434 * fVec1[((IOTA - 29) & 127)]) + ((0.012582400000000001 * fVec1[((IOTA - 28) & 127)]) + ((0.027007300000000001 * fVec1[((IOTA - 27) & 127)]) + ((0.027768000000000001 * fVec1[((IOTA - 23) & 127)]) + ((0.023543700000000001 * fVec1[((IOTA - 22) & 127)]) + ((0.048374199999999999 * fVec1[((IOTA - 19) & 127)]) + ((0.00038413800000000001 * fVec1[((IOTA - 18) & 127)]) + ((0.015292399999999999 * fVec1[((IOTA - 14) & 127)]) + ((0.0027435599999999999 * fVec1[((IOTA - 12) & 127)]) + ((0.00111859 * fVec1[((IOTA - 11) & 127)]) + ((0.000236882 * fVec1[((IOTA - 10) & 127)]) + ((0.00018073699999999999 * fVec1[((IOTA - 9) & 127)]) + ((0.00055218400000000005 * fVec1[((IOTA - 7) & 127)]) + ((0.00102578 * fVec1[((IOTA - 5) & 127)]) + ((0.00032584900000000002 * fVec1[((IOTA - 3) & 127)]) + ((3.7578000000000005e-05 * fVec1[((IOTA - 1) & 127)]) + ((0.00015806700000000002 * fVec1[((IOTA - 116) & 127)]) + ((3.3061900000000003e-05 * fVec1[((IOTA - 112) & 127)]) + ((5.8162399999999989e-07 * fVec1[((IOTA - 126) & 127)]) + ((4.8020300000000003e-06 * fVec1[((IOTA - 125) & 127)]) + ((2.7363e-06 * fVec1[((IOTA - 124) & 127)]) + ((1.1707000000000002e-05 * fVec1[((IOTA - 123) & 127)]) + ((1.4182800000000001e-05 * fVec1[((IOTA - 120) & 127)]) + ((1.8906799999999998e-07 * fVec8[((IOTA - 126) & 127)]) + ((2.2341899999999999e-06 * fVec8[((IOTA - 124) & 127)]) + ((7.2523899999999995e-06 * fVec8[((IOTA - 123) & 127)]) + ((1.1632800000000002e-05 * fVec8[((IOTA - 122) & 127)]) + ((1.2815000000000002e-05 * fVec8[((IOTA - 120) & 127)]) + ((4.3870300000000006e-05 * fVec8[((IOTA - 119) & 127)]) + ((2.12418e-05 * fVec8[((IOTA - 116) & 127)]) + ((6.3248200000000002e-05 * fVec8[((IOTA - 115) & 127)]) + ((7.2504899999999996e-06 * fVec8[((IOTA - 114) & 127)]) + ((5.3088699999999999e-05 * fVec8[((IOTA - 113) & 127)]) + ((4.6409099999999998e-06 * fVec8[((IOTA - 112) & 127)]) + ((1.0132900000000001e-05 * fVec8[((IOTA - 107) & 127)]) + ((0.00031120300000000002 * fVec8[((IOTA - 104) & 127)]) + ((0.00046980700000000004 * fVec8[((IOTA - 92) & 127)]) + ((0.00077178399999999997 * fVec8[((IOTA - 90) & 127)]) + ((0.0025545300000000002 * fVec8[((IOTA - 89) & 127)]) + ((0.0023083399999999999 * fVec8[((IOTA - 85) & 127)]) + ((0.0020812000000000001 * fVec8[((IOTA - 84) & 127)]) + ((0.0011864500000000001 * fVec8[((IOTA - 80) & 127)]) + ((0.0015861600000000001 * fVec8[((IOTA - 79) & 127)]) + ((0.00033844000000000002 * fVec8[((IOTA - 78) & 127)]) + ((0.00081387199999999999 * fVec8[((IOTA - 73) & 127)]) + ((0.00030503100000000004 * fVec8[((IOTA - 72) & 127)]) + ((0.00086728400000000007 * fVec8[((IOTA - 66) & 127)]) + ((0.00066844099999999998 * fVec8[((IOTA - 64) & 127)]) + ((0.0017065600000000002 * fVec8[((IOTA - 63) & 127)]) + ((7.9880600000000002e-05 * fVec8[((IOTA - 62) & 127)]) + ((0.00058366500000000003 * fVec8[((IOTA - 60) & 127)]) + ((0.0029923200000000001 * fVec8[((IOTA - 59) & 127)]) + ((0.0022988700000000002 * fVec8[((IOTA - 58) & 127)]) + ((0.0025412900000000003 * fVec8[((IOTA - 54) & 127)]) + ((0.00019665700000000001 * fVec8[((IOTA - 53) & 127)]) + ((0.00046025400000000006 * fVec8[((IOTA - 52) & 127)]) + ((0.0031450100000000002 * fVec8[((IOTA - 51) & 127)]) + ((0.0030871599999999998 * fVec8[((IOTA - 48) & 127)]) + ((0.0037002100000000002 * fVec8[((IOTA - 47) & 127)]) + ((0.0072840600000000002 * fVec8[((IOTA - 46) & 127)]) + ((0.0018587199999999999 * fVec8[((IOTA - 45) & 127)]) + ((0.011697200000000001 * fVec8[((IOTA - 41) & 127)]) + ((0.0054248200000000003 * fVec8[((IOTA - 40) & 127)]) + ((0.0036415000000000002 * fVec8[((IOTA - 36) & 127)]) + ((0.00321032 * fVec8[((IOTA - 34) & 127)]) + ((0.015532600000000001 * fVec8[((IOTA - 33) & 127)]) + ((0.00040727700000000005 * fVec8[((IOTA - 32) & 127)]) + ((0.0077309000000000006 * fVec8[((IOTA - 29) & 127)]) + ((0.018899300000000001 * fVec8[((IOTA - 28) & 127)]) + ((0.0098889300000000006 * fVec8[((IOTA - 27) & 127)]) + ((0.025709399999999997 * fVec8[((IOTA - 23) & 127)]) + ((0.054097699999999999 * fVec8[((IOTA - 22) & 127)]) + ((0.018824199999999999 * fVec8[((IOTA - 21) & 127)]) + ((0.029708399999999999 * fVec8[((IOTA - 17) & 127)]) + ((0.034653099999999999 * fVec8[((IOTA - 16) & 127)]) + ((0.015179700000000001 * fVec8[((IOTA - 12) & 127)]) + ((0.00027971300000000001 * fVec8[((IOTA - 10) & 127)]) + ((0.00033160200000000001 * fVec8[((IOTA - 8) & 127)]) + ((0.000311959 * fVec8[((IOTA - 7) & 127)]) + ((0.00044927400000000005 * fVec8[((IOTA - 4) & 127)]) + ((0.00017586500000000001 * fVec8[((IOTA - 3) & 127)]) + ((4.4886200000000002e-06 * fTemp8) + ((0.00029661500000000002 * fVec1[((IOTA - 104) & 127)]) + ((0.00067222099999999997 * fVec1[((IOTA - 103) & 127)]) + ((1.9648800000000001e-05 * fVec5[((IOTA - 119) & 127)]) + ((1.2491699999999999e-05 * fVec5[((IOTA - 118) & 127)]) + ((4.4503500000000005e-05 * fVec5[((IOTA - 117) & 127)]) + ((0.00021195100000000002 * fVec5[((IOTA - 116) & 127)]) + ((0.00016203300000000001 * fVec5[((IOTA - 115) & 127)]) + ((5.6872700000000002e-05 * fVec5[((IOTA - 114) & 127)]) + ((0.00010308 * fVec5[((IOTA - 112) & 127)]) + ((0.000208731 * fVec5[((IOTA - 110) & 127)]) + ((0.00068960199999999999 * fVec5[((IOTA - 109) & 127)]) + ((0.00054645700000000008 * fVec5[((IOTA - 108) & 127)]) + ((1.8441200000000002e-05 * fVec5[((IOTA - 106) & 127)]) + ((0.00042357400000000002 * fVec5[((IOTA - 105) & 127)]) + ((0.00048893999999999999 * fVec5[((IOTA - 104) & 127)]) + ((0.00024845100000000001 * fVec5[((IOTA - 103) & 127)]) + ((0.00017894900000000002 * fVec5[((IOTA - 102) & 127)]) + ((6.7516100000000002e-05 * fVec5[((IOTA - 96) & 127)]) + ((0.0017108000000000002 * fVec5[((IOTA - 88) & 127)]) + ((1.1331800000000002e-05 * fVec5[((IOTA - 87) & 127)]) + ((0.00113013 * fVec5[((IOTA - 84) & 127)]) + ((0.00176922 * fVec5[((IOTA - 83) & 127)]) + ((0.00098374200000000012 * fVec5[((IOTA - 82) & 127)]) + ((0.00096988900000000015 * fVec5[((IOTA - 81) & 127)]) + ((0.00041691500000000002 * fVec5[((IOTA - 76) & 127)]) + ((0.00136177 * fVec5[((IOTA - 75) & 127)]) + ((0.0035581200000000001 * fVec5[((IOTA - 74) & 127)]) + ((0.0032476200000000001 * fVec5[((IOTA - 73) & 127)]) + ((0.00082674300000000001 * fVec5[((IOTA - 72) & 127)]) + ((0.00010392300000000001 * fVec5[((IOTA - 69) & 127)]) + ((0.0010315600000000002 * fVec5[((IOTA - 63) & 127)]) + ((0.00066618000000000005 * fVec5[((IOTA - 62) & 127)]) + ((0.00066067299999999997 * fVec5[((IOTA - 61) & 127)]) + ((0.0030366200000000003 * fVec5[((IOTA - 60) & 127)]) + ((0.0055067099999999997 * fVec5[((IOTA - 59) & 127)]) + ((0.0033698399999999998 * fVec5[((IOTA - 58) & 127)]) + ((0.0012369500000000001 * fVec5[((IOTA - 57) & 127)]) + ((0.0022778900000000003 * fVec5[((IOTA - 54) & 127)]) + ((0.00048077500000000007 * fVec5[((IOTA - 43) & 127)]) + ((0.0046110700000000001 * fVec5[((IOTA - 42) & 127)]) + ((7.870070000000001e-05 * fVec5[((IOTA - 41) & 127)]) + ((0.00054999000000000009 * fVec5[((IOTA - 40) & 127)]) + ((0.0054236100000000006 * fVec5[((IOTA - 39) & 127)]) + ((0.0029943300000000003 * fVec5[((IOTA - 38) & 127)]) + ((0.0020941000000000002 * fVec5[((IOTA - 36) & 127)]) + ((0.0054747700000000003 * fVec5[((IOTA - 35) & 127)]) + ((0.0093895800000000015 * fVec5[((IOTA - 31) & 127)]) + ((0.0073566900000000008 * fVec5[((IOTA - 28) & 127)]) + ((0.011920200000000001 * fVec5[((IOTA - 27) & 127)]) + ((0.00161714 * fVec5[((IOTA - 26) & 127)]) + ((0.0065279500000000002 * fVec5[((IOTA - 24) & 127)]) + ((0.0057281199999999997 * fVec5[((IOTA - 23) & 127)]) + ((0.0025077799999999998 * fVec5[((IOTA - 22) & 127)]) + ((0.045951700000000005 * fVec5[((IOTA - 19) & 127)]) + ((0.0098139500000000001 * fVec5[((IOTA - 18) & 127)]) + ((0.016422000000000003 * fVec5[((IOTA - 14) & 127)]) + ((0.00114539 * fVec5[((IOTA - 10) & 127)]) + ((0.00066453400000000004 * fVec5[((IOTA - 5) & 127)]) + ((0.00014704800000000002 * fVec5[((IOTA - 3) & 127)]) + ((4.0382500000000002e-05 * fVec5[((IOTA - 1) & 127)]) + ((3.5565599999999999e-07 * fVec7[((IOTA - 126) & 127)]) + ((9.1062700000000002e-07 * fVec7[((IOTA - 125) & 127)]) + ((2.0649599999999999e-06 * fVec7[((IOTA - 123) & 127)]) + ((5.8832200000000002e-05 * fVec7[((IOTA - 119) & 127)]) + ((7.1316900000000002e-05 * fVec7[((IOTA - 118) & 127)]) + ((3.4692600000000001e-05 * fVec7[((IOTA - 117) & 127)]) + ((0.0010377400000000001 * fVec7[((IOTA - 45) & 127)]) + ((0.00037675000000000002 * fVec7[((IOTA - 44) & 127)]) + ((0.0017432399999999999 * fVec7[((IOTA - 42) & 127)]) + ((0.0029357799999999998 * fVec7[((IOTA - 41) & 127)]) + ((0.0046570400000000003 * fVec7[((IOTA - 40) & 127)]) + ((0.0064433700000000003 * fVec7[((IOTA - 36) & 127)]) + ((0.015688299999999999 * fVec7[((IOTA - 35) & 127)]) + ((0.0057866300000000001 * fVec7[((IOTA - 32) & 127)]) + ((0.012194400000000001 * fVec7[((IOTA - 31) & 127)]) + ((0.00023795899999999999 * fVec7[((IOTA - 28) & 127)]) + ((0.011861500000000001 * fVec7[((IOTA - 27) & 127)]) + ((0.048998699999999999 * fVec7[((IOTA - 22) & 127)]) + ((0.030317300000000002 * fVec7[((IOTA - 17) & 127)]) + ((0.023401399999999999 * fVec7[((IOTA - 16) & 127)]) + ((0.012933500000000001 * fVec7[((IOTA - 12) & 127)]) + ((0.0010612900000000001 * fVec7[((IOTA - 10) & 127)]) + ((0.00051073000000000004 * fVec7[((IOTA - 8) & 127)]) + ((0.00014768800000000001 * fVec7[((IOTA - 7) & 127)]) + ((0.00039946100000000004 * fVec7[((IOTA - 4) & 127)]) + ((0.00024617900000000002 * fVec7[((IOTA - 3) & 127)]) + ((1.1803900000000002e-05 * fTemp7) + ((0.00017110399999999999 * fVec7[((IOTA - 50) & 127)]) + ((1.1923800000000001e-05 * fVec7[((IOTA - 114) & 127)]) + ((8.9486099999999998e-07 * fVec7[((IOTA - 113) & 127)]) + ((6.4856699999999999e-05 * fVec7[((IOTA - 112) & 127)]) + ((0.000116221 * fVec7[((IOTA - 110) & 127)]) + ((6.72879e-06 * fVec7[((IOTA - 109) & 127)]) + ((0.000139837 * fVec7[((IOTA - 107) & 127)]) + ((7.9662500000000005e-05 * fVec7[((IOTA - 106) & 127)]) + ((0.000187727 * fVec7[((IOTA - 105) & 127)]) + ((0.000111947 * fVec7[((IOTA - 104) & 127)]) + ((1.6833800000000001e-05 * fVec7[((IOTA - 103) & 127)]) + ((7.8021400000000005e-05 * fVec7[((IOTA - 101) & 127)]) + ((0.00011700200000000002 * fVec7[((IOTA - 100) & 127)]) + ((0.00034809100000000003 * fVec7[((IOTA - 97) & 127)]) + ((0.00090964500000000016 * fVec7[((IOTA - 96) & 127)]) + ((0.00037990800000000004 * fVec7[((IOTA - 95) & 127)]) + ((9.2039500000000012e-05 * fVec7[((IOTA - 91) & 127)]) + ((0.00096732800000000005 * fVec7[((IOTA - 90) & 127)]) + ((0.00085248300000000002 * fVec7[((IOTA - 89) & 127)]) + ((0.0022487200000000001 * fVec7[((IOTA - 86) & 127)]) + ((0.0029242599999999997 * fVec7[((IOTA - 85) & 127)]) + ((0.00076865199999999999 * fVec7[((IOTA - 81) & 127)]) + ((0.00052445300000000003 * fVec7[((IOTA - 80) & 127)]) + ((0.00253659 * fVec7[((IOTA - 77) & 127)]) + ((0.00094093900000000001 * fVec7[((IOTA - 76) & 127)]) + ((7.3089300000000012e-05 * fVec7[((IOTA - 74) & 127)]) + ((0.00048837800000000003 * fVec7[((IOTA - 73) & 127)]) + ((0.00076806500000000007 * fVec7[((IOTA - 70) & 127)]) + ((0.000529127 * fVec7[((IOTA - 67) & 127)]) + ((0.00043313100000000006 * fVec7[((IOTA - 66) & 127)]) + ((0.00102227 * fVec7[((IOTA - 63) & 127)]) + ((0.00052528399999999999 * fVec7[((IOTA - 62) & 127)]) + ((0.00028461500000000005 * fVec7[((IOTA - 61) & 127)]) + ((0.00198759 * fVec7[((IOTA - 60) & 127)]) + ((0.0035936800000000001 * fVec7[((IOTA - 59) & 127)]) + ((0.0011111599999999999 * fVec7[((IOTA - 58) & 127)]) + ((0.0017386600000000002 * fVec7[((IOTA - 55) & 127)]) + ((0.0049311700000000003 * fVec7[((IOTA - 54) & 127)]) + ((2.1148099999999999e-06 * fVec9[((IOTA - 125) & 127)]) + ((4.5711199999999997e-05 * fVec9[((IOTA - 120) & 127)]) + ((5.42298e-05 * fVec9[((IOTA - 119) & 127)]) + ((0.00012083100000000001 * fVec9[((IOTA - 116) & 127)]) + ((6.27218e-05 * fVec9[((IOTA - 115) & 127)]) + ((0.00046964499999999998 * fVec9[((IOTA - 60) & 127)]) + ((0.00026329700000000001 * fVec9[((IOTA - 59) & 127)]) + ((0.0018275600000000002 * fVec9[((IOTA - 58) & 127)]) + ((0.00041102400000000001 * fVec9[((IOTA - 54) & 127)]) + ((0.0017007000000000001 * fVec9[((IOTA - 53) & 127)]) + ((0.00231387 * fVec9[((IOTA - 52) & 127)]) + ((0.0020779000000000001 * fVec9[((IOTA - 51) & 127)]) + ((0.0056022199999999998 * fVec9[((IOTA - 50) & 127)]) + ((0.00582607 * fVec9[((IOTA - 49) & 127)]) + ((0.00160081 * fVec9[((IOTA - 44) & 127)]) + ((0.00104407 * fVec9[((IOTA - 43) & 127)]) + ((0.0031685799999999998 * fVec9[((IOTA - 40) & 127)]) + ((0.00018332 * fVec9[((IOTA - 39) & 127)]) + ((0.00093215100000000009 * fVec9[((IOTA - 38) & 127)]) + ((0.0043404200000000002 * fVec9[((IOTA - 37) & 127)]) + ((0.0217894 * fVec9[((IOTA - 29) & 127)]) + ((0.026517200000000001 * fVec9[((IOTA - 28) & 127)]) + ((0.0168554 * fVec9[((IOTA - 27) & 127)]) + ((0.034177300000000001 * fVec9[((IOTA - 26) & 127)]) + ((0.0135478 * fVec9[((IOTA - 25) & 127)]) + ((0.00166423 * fVec9[((IOTA - 24) & 127)]) + ((0.0070665800000000003 * fVec9[((IOTA - 18) & 127)]) + ((0.047048 * fVec9[((IOTA - 17) & 127)]) + ((0.035346299999999997 * fVec9[((IOTA - 16) & 127)]) + ((0.0090231900000000004 * fVec9[((IOTA - 15) & 127)]) + ((0.0019528099999999999 * fVec9[((IOTA - 13) & 127)]) + ((0.0017446 * fVec9[((IOTA - 10) & 127)]) + ((0.00085654100000000005 * fVec9[((IOTA - 8) & 127)]) + ((0.00029337100000000001 * fVec9[((IOTA - 4) & 127)]) + ((1.06294e-05 * fVec9[((IOTA - 3) & 127)]) + ((0.000184408 * fVec9[((IOTA - 2) & 127)]) + ((0.00015656399999999999 * fVec9[((IOTA - 1) & 127)]) + ((2.1814200000000002e-05 * fTemp9) + ((1.5246800000000001e-05 * fVec9[((IOTA - 64) & 127)]) + ((9.5111100000000012e-05 * fVec9[((IOTA - 114) & 127)]) + ((0.00119035 * fVec7[((IOTA - 47) & 127)]) + ((0.000189154 * fVec9[((IOTA - 107) & 127)]) + ((0.000288454 * fVec9[((IOTA - 103) & 127)]) + ((0.00041850399999999999 * fVec9[((IOTA - 102) & 127)]) + ((0.00075451800000000003 * fVec9[((IOTA - 101) & 127)]) + ((0.0020261699999999999 * fVec9[((IOTA - 100) & 127)]) + ((0.00020092800000000001 * fVec9[((IOTA - 99) & 127)]) + ((0.00012133300000000001 * fVec9[((IOTA - 96) & 127)]) + ((0.000197653 * fVec9[((IOTA - 92) & 127)]) + ((0.0019592500000000001 * fVec9[((IOTA - 91) & 127)]) + ((0.0028519500000000002 * fVec9[((IOTA - 90) & 127)]) + ((0.0009232200000000001 * fVec9[((IOTA - 89) & 127)]) + ((0.00045499500000000003 * fVec9[((IOTA - 88) & 127)]) + ((0.000257292 * fVec9[((IOTA - 61) & 127)]) + ((0.00030183100000000002 * fVec9[((IOTA - 83) & 127)]) + ((0.00077060400000000004 * fVec9[((IOTA - 82) & 127)]) + ((0.0027795899999999998 * fVec9[((IOTA - 81) & 127)]) + ((0.00026032400000000004 * fVec9[((IOTA - 78) & 127)]) + ((0.00027182400000000005 * fVec9[((IOTA - 77) & 127)]) + ((0.0014794700000000001 * fVec9[((IOTA - 74) & 127)]) + ((0.0025902300000000002 * fVec9[((IOTA - 73) & 127)]) + ((0.0010700099999999999 * fVec9[((IOTA - 72) & 127)]) + ((0.0025843200000000002 * fVec9[((IOTA - 68) & 127)]) + ((1.86267e-06 * fVec10[((IOTA - 125) & 127)]) + ((6.4027499999999998e-06 * fVec10[((IOTA - 124) & 127)]) + ((6.23026e-06 * fVec10[((IOTA - 123) & 127)]) + ((4.4934200000000006e-06 * fVec10[((IOTA - 122) & 127)]) + ((7.2155799999999994e-06 * fVec10[((IOTA - 121) & 127)]) + ((2.3816400000000001e-05 * fVec10[((IOTA - 120) & 127)]) + ((2.3560099999999999e-07 * fVec10[((IOTA - 117) & 127)]) + ((1.7756400000000002e-05 * fVec10[((IOTA - 116) & 127)]) + ((0.0020163700000000004 * fVec10[((IOTA - 69) & 127)]) + ((0.0018022100000000001 * fVec10[((IOTA - 58) & 127)]) + ((0.0023103600000000005 * fVec10[((IOTA - 57) & 127)]) + ((0.00047002600000000002 * fVec10[((IOTA - 56) & 127)]) + ((0.00015724700000000001 * fVec10[((IOTA - 55) & 127)]) + ((0.00197986 * fVec10[((IOTA - 54) & 127)]) + ((0.0019755700000000003 * fVec10[((IOTA - 53) & 127)]) + ((0.0019031 * fVec10[((IOTA - 52) & 127)]) + ((0.0029535300000000002 * fVec10[((IOTA - 51) & 127)]) + ((0.000293281 * fVec10[((IOTA - 50) & 127)]) + ((0.00083629000000000006 * fVec10[((IOTA - 49) & 127)]) + ((0.00080509699999999995 * fVec10[((IOTA - 46) & 127)]) + ((0.00107051 * fVec10[((IOTA - 45) & 127)]) + ((0.0043877100000000004 * fVec10[((IOTA - 39) & 127)]) + ((0.0045821500000000001 * fVec10[((IOTA - 38) & 127)]) + ((0.00332504 * fVec10[((IOTA - 34) & 127)]) + ((0.011030700000000001 * fVec10[((IOTA - 33) & 127)]) + ((0.0011568400000000001 * fVec10[((IOTA - 30) & 127)]) + ((0.0010033099999999999 * fVec10[((IOTA - 29) & 127)]) + ((0.00042573700000000003 * fVec10[((IOTA - 28) & 127)]) + ((0.0094138900000000011 * fVec10[((IOTA - 26) & 127)]) + ((0.0098732500000000001 * fVec10[((IOTA - 24) & 127)]) + ((0.045702 * fVec10[((IOTA - 21) & 127)]) + ((0.0024935999999999999 * fVec10[((IOTA - 18) & 127)]) + ((0.00150782 * fVec10[((IOTA - 16) & 127)]) + ((0.013101799999999999 * fVec10[((IOTA - 15) & 127)]) + ((0.0027409999999999999 * fVec10[((IOTA - 12) & 127)]) + ((0.00055052599999999997 * fVec10[((IOTA - 11) & 127)]) + ((0.00048923200000000003 * fVec10[((IOTA - 9) & 127)]) + ((0.00026322800000000001 * fVec10[((IOTA - 6) & 127)]) + ((1.6040700000000004e-05 * fVec10[((IOTA - 3) & 127)]) + ((9.3217400000000013e-05 * fVec10[((IOTA - 2) & 127)]) + ((2.45111e-06 * fTemp10) + ((0.0015908299999999999 * fVec10[((IOTA - 72) & 127)]) + ((0.00049188300000000003 * fVec10[((IOTA - 71) & 127)]) + ((7.1048099999999992e-06 * fVec10[((IOTA - 115) & 127)]) + ((2.4848500000000001e-05 * fVec10[((IOTA - 110) & 127)]) + ((2.6001400000000005e-05 * fVec10[((IOTA - 104) & 127)]) + ((0.000221859 * fVec10[((IOTA - 100) & 127)]) + ((8.8924299999999998e-05 * fVec10[((IOTA - 99) & 127)]) + ((0.00043673000000000003 * fVec10[((IOTA - 97) & 127)]) + ((0.00010927100000000002 * fVec10[((IOTA - 96) & 127)]) + ((0.00097867000000000006 * fVec10[((IOTA - 70) & 127)]) + ((0.00090132600000000015 * fVec10[((IOTA - 89) & 127)]) + ((0.0012884700000000001 * fVec10[((IOTA - 88) & 127)]) + ((0.00056446700000000003 * fVec10[((IOTA - 85) & 127)]) + ((0.00095815500000000003 * fVec10[((IOTA - 84) & 127)]) + ((0.0017296600000000001 * fVec10[((IOTA - 81) & 127)]) + ((0.00094508800000000007 * fVec10[((IOTA - 77) & 127)]) + ((0.0019108700000000001 * fVec10[((IOTA - 76) & 127)]) + ((0.0015422700000000001 * fVec10[((IOTA - 75) & 127)]) + ((0.0025803099999999997 * fVec10[((IOTA - 74) & 127)]) + ((0.00278685 * fVec10[((IOTA - 73) & 127)]) + ((8.4868299999999985e-06 * fVec11[((IOTA - 124) & 127)]) + ((3.6957699999999999e-06 * fVec11[((IOTA - 122) & 127)]) + ((5.4636899999999996e-07 * fVec11[((IOTA - 121) & 127)]) + ((2.65182e-05 * fVec11[((IOTA - 119) & 127)]) + ((2.0308900000000001e-05 * fVec11[((IOTA - 118) & 127)]) + ((8.8809400000000011e-05 * fVec11[((IOTA - 114) & 127)]) + ((0.0011165799999999998 * fVec11[((IOTA - 68) & 127)]) + ((0.000148438 * fVec11[((IOTA - 67) & 127)]) + ((0.000184167 * fVec11[((IOTA - 59) & 127)]) + ((0.0011947399999999999 * fVec11[((IOTA - 57) & 127)]) + ((0.0030093800000000003 * fVec11[((IOTA - 56) & 127)]) + ((0.0013871700000000001 * fVec11[((IOTA - 55) & 127)]) + ((0.0059715699999999998 * fVec11[((IOTA - 52) & 127)]) + ((0.0053548799999999994 * fVec11[((IOTA - 51) & 127)]) + ((0.0034850300000000001 * fVec11[((IOTA - 50) & 127)]) + ((0.0025893600000000002 * fVec11[((IOTA - 49) & 127)]) + ((0.00153152 * fVec11[((IOTA - 48) & 127)]) + ((0.0085296599999999997 * fVec11[((IOTA - 47) & 127)]) + ((0.00362372 * fVec11[((IOTA - 46) & 127)]) + ((0.0061227299999999998 * fVec11[((IOTA - 43) & 127)]) + ((0.0031509299999999997 * fVec11[((IOTA - 42) & 127)]) + ((0.0086731099999999995 * fVec11[((IOTA - 34) & 127)]) + ((0.013334800000000001 * fVec11[((IOTA - 33) & 127)]) + ((0.017021599999999998 * fVec11[((IOTA - 32) & 127)]) + ((0.0074226800000000001 * fVec11[((IOTA - 31) & 127)]) + ((0.000158395 * fVec11[((IOTA - 29) & 127)]) + ((0.018246599999999998 * fVec11[((IOTA - 28) & 127)]) + ((0.0076219700000000005 * fVec11[((IOTA - 27) & 127)]) + ((0.0033454299999999999 * fVec11[((IOTA - 25) & 127)]) + ((0.020070100000000004 * fVec11[((IOTA - 24) & 127)]) + ((0.0109569 * fVec11[((IOTA - 23) & 127)]) + ((0.0090998300000000015 * fVec11[((IOTA - 17) & 127)]) + ((0.068287199999999992 * fVec11[((IOTA - 15) & 127)]) + ((0.046937899999999998 * fVec11[((IOTA - 14) & 127)]) + ((0.00520434 * fVec11[((IOTA - 10) & 127)]) + ((0.00229203 * fVec11[((IOTA - 8) & 127)]) + ((0.0020673400000000004 * fVec11[((IOTA - 6) & 127)]) + ((0.000157615 * fVec11[((IOTA - 2) & 127)]) + ((7.7455400000000011e-05 * fVec11[((IOTA - 1) & 127)]) + ((0.00058499699999999997 * fVec11[((IOTA - 72) & 127)]) + ((0.0026133899999999997 * fVec11[((IOTA - 71) & 127)]) + ((0.0012246500000000001 * fVec11[((IOTA - 70) & 127)]) + ((2.7376100000000004e-05 * fVec11[((IOTA - 113) & 127)]) + ((0.00013539800000000001 * fVec11[((IOTA - 110) & 127)]) + ((0.00025329700000000004 * fVec11[((IOTA - 109) & 127)]) + ((8.0048000000000003e-05 * fVec11[((IOTA - 108) & 127)]) + ((0.00024979000000000001 * fVec11[((IOTA - 107) & 127)]) + ((8.0692100000000013e-05 * fVec11[((IOTA - 106) & 127)]) + ((6.9954200000000002e-05 * fVec11[((IOTA - 104) & 127)]) + ((0.00043472999999999998 * fVec11[((IOTA - 100) & 127)]) + ((0.00125786 * fVec11[((IOTA - 99) & 127)]) + ((0.00087608300000000005 * fVec11[((IOTA - 98) & 127)]) + ((0.00045076799999999999 * fVec11[((IOTA - 97) & 127)]) + ((0.0009407450000000001 * fVec11[((IOTA - 96) & 127)]) + ((7.2771700000000007e-05 * fVec11[((IOTA - 95) & 127)]) + ((0.00040108800000000002 * fVec11[((IOTA - 91) & 127)]) + ((0.00116978 * fVec11[((IOTA - 69) & 127)]) + ((0.00025533199999999999 * fVec11[((IOTA - 89) & 127)]) + ((0.0011332599999999999 * fVec11[((IOTA - 88) & 127)]) + ((0.00220769 * fVec11[((IOTA - 87) & 127)]) + ((0.00109252 * fVec11[((IOTA - 86) & 127)]) + ((0.0028984100000000001 * fVec11[((IOTA - 78) & 127)]) + ((0.0035086900000000001 * fVec11[((IOTA - 77) & 127)]) + ((0.00075599999999999994 * fVec11[((IOTA - 74) & 127)]) + ((0.00029284900000000003 * fVec11[((IOTA - 73) & 127)]) + ((4.9866200000000007e-05 * fVec12[((IOTA - 119) & 127)]) + ((1.3841300000000002e-05 * fVec12[((IOTA - 118) & 127)]) + ((8.8019800000000014e-05 * fVec12[((IOTA - 113) & 127)]) + ((0.00017122700000000001 * fVec12[((IOTA - 112) & 127)]) + ((0.00034470100000000005 * fVec12[((IOTA - 108) & 127)]) + ((0.00055969699999999995 * fVec12[((IOTA - 107) & 127)]) + ((0.000235777 * fVec12[((IOTA - 106) & 127)]) + ((0.00054745600000000009 * fVec12[((IOTA - 104) & 127)]) + ((0.00286586 * fVec12[((IOTA - 34) & 127)]) + ((0.0097399199999999991 * fVec12[((IOTA - 31) & 127)]) + ((0.0174139 * fVec12[((IOTA - 30) & 127)]) + ((0.0072416499999999996 * fVec12[((IOTA - 27) & 127)]) + ((0.0127638 * fVec12[((IOTA - 26) & 127)]) + ((0.013886600000000001 * fVec12[((IOTA - 25) & 127)]) + ((0.0135128 * fVec12[((IOTA - 22) & 127)]) + ((0.031943700000000005 * fVec12[((IOTA - 21) & 127)]) + ((0.0042885500000000003 * fVec12[((IOTA - 18) & 127)]) + ((0.0005030770000000001 * fVec12[((IOTA - 16) & 127)]) + ((0.023001900000000002 * fVec12[((IOTA - 15) & 127)]) + ((0.0026751100000000001 * fVec12[((IOTA - 12) & 127)]) + ((0.0017721800000000002 * fVec12[((IOTA - 11) & 127)]) + ((0.0011451499999999999 * fVec12[((IOTA - 9) & 127)]) + ((0.00051771 * fVec12[((IOTA - 6) & 127)]) + ((0.00014284300000000003 * fVec12[((IOTA - 3) & 127)]) + ((7.4740900000000015e-05 * fVec12[((IOTA - 2) & 127)]) + ((0.0090965500000000001 * fVec12[((IOTA - 40) & 127)]) + ((0.0041563499999999996 * fVec12[((IOTA - 39) & 127)]) + ((0.0039647500000000004 * fVec12[((IOTA - 35) & 127)]) + ((0.010624 * fVec12[((IOTA - 36) & 127)]) + ((0.00057874299999999994 * fVec12[((IOTA - 103) & 127)]) + ((0.000227309 * fVec12[((IOTA - 102) & 127)]) + ((3.6224500000000005e-05 * fVec12[((IOTA - 101) & 127)]) + ((0.00086194799999999997 * fVec12[((IOTA - 100) & 127)]) + ((0.0010124999999999999 * fVec12[((IOTA - 99) & 127)]) + ((0.00091063799999999996 * fVec12[((IOTA - 98) & 127)]) + ((0.00095056999999999997 * fVec12[((IOTA - 97) & 127)]) + ((0.0008587130000000001 * fVec12[((IOTA - 94) & 127)]) + ((0.00067170500000000009 * fVec12[((IOTA - 93) & 127)]) + ((0.00075180100000000008 * fVec12[((IOTA - 90) & 127)]) + ((0.00103283 * fVec12[((IOTA - 89) & 127)]) + ((0.0016084700000000001 * fVec12[((IOTA - 88) & 127)]) + ((0.00040337199999999999 * fVec12[((IOTA - 87) & 127)]) + ((0.00023788700000000002 * fVec12[((IOTA - 76) & 127)]) + ((0.0024309800000000001 * fVec12[((IOTA - 75) & 127)]) + ((0.00240843 * fVec12[((IOTA - 72) & 127)]) + ((0.00300154 * fVec12[((IOTA - 71) & 127)]) + ((0.00151366 * fVec12[((IOTA - 68) & 127)]) + ((0.0039051800000000003 * fVec12[((IOTA - 67) & 127)]) + ((0.00049316099999999999 * fVec12[((IOTA - 66) & 127)]) + ((0.0010486899999999999 * fVec12[((IOTA - 63) & 127)]) + ((0.0013206299999999999 * fVec12[((IOTA - 59) & 127)]) + ((0.0020385799999999999 * fVec12[((IOTA - 58) & 127)]) + ((0.0011936899999999999 * fVec12[((IOTA - 57) & 127)]) + ((0.0019159900000000002 * fVec12[((IOTA - 55) & 127)]) + ((0.0034757899999999999 * fVec12[((IOTA - 54) & 127)]) + ((0.00039412900000000001 * fVec12[((IOTA - 53) & 127)]) + ((0.000223711 * fVec12[((IOTA - 50) & 127)]) + ((0.0059973599999999993 * fVec12[((IOTA - 45) & 127)]) + ((0.0010137600000000001 * fVec12[((IOTA - 41) & 127)]) + ((0.00060801600000000007 * fVec13[((IOTA - 6) & 127)]) + ((0.00021328700000000002 * fVec13[((IOTA - 3) & 127)]) + ((0.00033479199999999999 * fVec13[((IOTA - 2) & 127)]) + ((0.000128761 * fVec13[((IOTA - 1) & 127)]) + ((1.7026300000000003e-05 * fTemp13) + ((0.033199200000000005 * fVec13[((IOTA - 16) & 127)]) + ((0.046417300000000002 * fVec13[((IOTA - 15) & 127)]) + ((0.0099304299999999988 * fVec13[((IOTA - 14) & 127)]) + ((0.0035106700000000005 * fVec13[((IOTA - 10) & 127)]) + ((3.2580099999999998e-06 * fVec13[((IOTA - 122) & 127)]) + ((1.0567100000000001e-05 * fVec13[((IOTA - 120) & 127)]) + ((7.0646400000000002e-05 * fVec13[((IOTA - 119) & 127)]) + ((3.3377400000000003e-05 * fVec13[((IOTA - 118) & 127)]) + ((6.1289000000000002e-05 * fVec13[((IOTA - 117) & 127)]) + ((7.6744800000000011e-05 * fVec13[((IOTA - 116) & 127)]) + ((4.9172100000000003e-05 * fVec13[((IOTA - 115) & 127)]) + ((0.00010500799999999999 * fVec13[((IOTA - 114) & 127)]) + ((0.000353326 * fVec13[((IOTA - 108) & 127)]) + ((0.00033907700000000002 * fVec13[((IOTA - 105) & 127)]) + ((0.000432335 * fVec13[((IOTA - 104) & 127)]) + ((0.00038982200000000001 * fVec13[((IOTA - 102) & 127)]) + ((0.0011551700000000001 * fVec13[((IOTA - 101) & 127)]) + ((0.00092970300000000004 * fVec13[((IOTA - 100) & 127)]) + ((0.0014948399999999999 * fVec13[((IOTA - 97) & 127)]) + ((0.00059560100000000007 * fVec13[((IOTA - 96) & 127)]) + ((0.0021927800000000001 * fVec13[((IOTA - 92) & 127)]) + ((0.0017762400000000001 * fVec13[((IOTA - 91) & 127)]) + ((0.00084165100000000012 * fVec13[((IOTA - 90) & 127)]) + ((9.7980900000000016e-05 * fVec13[((IOTA - 88) & 127)]) + ((0.00035080200000000005 * fVec13[((IOTA - 87) & 127)]) + ((0.00050089500000000001 * fVec13[((IOTA - 86) & 127)]) + ((2.7396400000000004e-05 * fVec13[((IOTA - 85) & 127)]) + ((0.00066409100000000001 * fVec13[((IOTA - 83) & 127)]) + ((0.00066246499999999999 * fVec13[((IOTA - 79) & 127)]) + ((0.0016256900000000002 * fVec13[((IOTA - 78) & 127)]) + ((0.00221456 * fVec13[((IOTA - 75) & 127)]) + ((0.00234322 * fVec13[((IOTA - 74) & 127)]) + ((0.00072881600000000008 * fVec13[((IOTA - 73) & 127)]) + ((0.00284673 * fVec13[((IOTA - 72) & 127)]) + ((0.0044685800000000006 * fVec13[((IOTA - 71) & 127)]) + ((0.00059245800000000003 * fVec13[((IOTA - 70) & 127)]) + ((0.00023620999999999999 * fVec13[((IOTA - 68) & 127)]) + ((0.0024370400000000001 * fVec13[((IOTA - 67) & 127)]) + ((0.00027835400000000003 * fVec13[((IOTA - 66) & 127)]) + ((0.000384313 * fVec13[((IOTA - 60) & 127)]) + ((0.0024406500000000004 * fVec13[((IOTA - 59) & 127)]) + ((0.000127928 * fVec13[((IOTA - 58) & 127)]) + ((0.00012639700000000002 * fVec13[((IOTA - 57) & 127)]) + ((0.00244481 * fVec13[((IOTA - 56) & 127)]) + ((0.00051237899999999998 * fVec13[((IOTA - 55) & 127)]) + ((0.0021171799999999998 * fVec13[((IOTA - 52) & 127)]) + ((0.0037207400000000002 * fVec13[((IOTA - 51) & 127)]) + ((0.0014084900000000001 * fVec13[((IOTA - 49) & 127)]) + ((0.0075305299999999997 * fVec13[((IOTA - 48) & 127)]) + ((0.0024861100000000001 * fVec13[((IOTA - 47) & 127)]) + ((0.00011863999999999999 * fVec13[((IOTA - 45) & 127)]) + ((1.55259e-05 * fVec13[((IOTA - 40) & 127)]) + ((0.00128371 * fVec13[((IOTA - 37) & 127)]) + ((0.0096779899999999992 * fVec13[((IOTA - 30) & 127)]) + ((0.0453053 * fVec13[((IOTA - 29) & 127)]) + ((0.032010799999999999 * fVec13[((IOTA - 28) & 127)]) + ((0.020813500000000002 * fVec13[((IOTA - 27) & 127)]) + ((0.024042900000000002 * fVec13[((IOTA - 26) & 127)]) + ((0.030081000000000004 * fVec13[((IOTA - 25) & 127)]) + ((0.048124599999999997 * fVec13[((IOTA - 18) & 127)]) + ((0.0129798 * fVec13[((IOTA - 17) & 127)]) + ((1.4376099999999999e-07 * fVec14[((IOTA - 125) & 127)]) + ((8.1478800000000007e-06 * fVec14[((IOTA - 123) & 127)]) + ((3.5912700000000006e-05 * fVec14[((IOTA - 122) & 127)]) + ((6.3930200000000007e-05 * fVec14[((IOTA - 121) & 127)]) + ((9.5050500000000014e-05 * fVec14[((IOTA - 120) & 127)]) + ((2.4284e-05 * fVec14[((IOTA - 119) & 127)]) + ((0.00017088300000000001 * fVec14[((IOTA - 117) & 127)]) + ((0.000201394 * fVec14[((IOTA - 116) & 127)]) + ((0.00020405400000000001 * fVec14[((IOTA - 115) & 127)]) + ((1.0287e-05 * fVec14[((IOTA - 114) & 127)]) + ((1.34228e-05 * fVec14[((IOTA - 111) & 127)]) + ((0.000166584 * fVec14[((IOTA - 110) & 127)]) + ((0.00053367400000000004 * fVec14[((IOTA - 108) & 127)]) + ((0.00010277700000000001 * fVec14[((IOTA - 102) & 127)]) + ((0.00011668700000000002 * fVec14[((IOTA - 98) & 127)]) + ((0.00096910600000000007 * fVec14[((IOTA - 97) & 127)]) + ((0.015947700000000002 * fVec14[((IOTA - 28) & 127)]) + ((0.025441699999999998 * fVec14[((IOTA - 19) & 127)]) + ((0.060181899999999997 * fVec14[((IOTA - 18) & 127)]) + ((0.0165282 * fVec14[((IOTA - 17) & 127)]) + ((0.056723499999999996 * fVec14[((IOTA - 16) & 127)]) + ((0.059615000000000001 * fVec14[((IOTA - 15) & 127)]) + ((0.0024382600000000003 * fVec14[((IOTA - 14) & 127)]) + ((0.0031914500000000002 * fVec14[((IOTA - 10) & 127)]) + ((0.0013724499999999999 * fVec14[((IOTA - 6) & 127)]) + ((3.9424800000000002e-05 * fVec14[((IOTA - 3) & 127)]) + ((0.00042801200000000002 * fVec14[((IOTA - 2) & 127)]) + ((2.8233900000000001e-05 * fVec14[((IOTA - 1) & 127)]) + ((0.0067972900000000001 * fVec14[((IOTA - 34) & 127)]) + ((0.0077661499999999994 * fVec14[((IOTA - 33) & 127)]) + ((0.0107335 * fVec14[((IOTA - 32) & 127)]) + ((0.0074136300000000009 * fVec14[((IOTA - 31) & 127)]) + ((0.00064723500000000002 * fVec14[((IOTA - 96) & 127)]) + ((0.00037608900000000002 * fVec14[((IOTA - 93) & 127)]) + ((9.292850000000001e-05 * fVec14[((IOTA - 92) & 127)]) + ((0.0010366800000000001 * fVec14[((IOTA - 91) & 127)]) + ((0.0025010200000000001 * fVec14[((IOTA - 90) & 127)]) + ((0.000177073 * fVec14[((IOTA - 89) & 127)]) + ((0.00052927500000000006 * fVec14[((IOTA - 88) & 127)]) + ((0.0019501599999999998 * fVec14[((IOTA - 87) & 127)]) + ((0.00075808200000000009 * fVec14[((IOTA - 86) & 127)]) + ((4.6523100000000002e-05 * fVec14[((IOTA - 83) & 127)]) + ((0.00108943 * fVec14[((IOTA - 79) & 127)]) + ((0.00032896000000000005 * fVec14[((IOTA - 78) & 127)]) + ((0.0012591099999999999 * fVec14[((IOTA - 75) & 127)]) + ((8.8494799999999998e-05 * fVec14[((IOTA - 74) & 127)]) + ((0.00045897600000000005 * fVec14[((IOTA - 73) & 127)]) + ((0.00083460199999999994 * fVec14[((IOTA - 69) & 127)]) + ((0.0018953800000000001 * fVec14[((IOTA - 68) & 127)]) + ((0.00183186 * fVec14[((IOTA - 67) & 127)]) + ((0.0014255700000000001 * fVec14[((IOTA - 66) & 127)]) + ((0.000195193 * fVec14[((IOTA - 65) & 127)]) + ((0.0004124 * fVec14[((IOTA - 64) & 127)]) + ((0.00143402 * fVec14[((IOTA - 63) & 127)]) + ((0.00115475 * fVec14[((IOTA - 62) & 127)]) + ((0.00150633 * fVec14[((IOTA - 61) & 127)]) + ((0.0016002799999999999 * fVec14[((IOTA - 60) & 127)]) + ((0.0046591599999999999 * fVec14[((IOTA - 29) & 127)]) + ((0.0021894599999999998 * fVec14[((IOTA - 53) & 127)]) + ((0.0011194900000000001 * fVec14[((IOTA - 50) & 127)]) + ((0.0011283899999999999 * fVec14[((IOTA - 49) & 127)]) + ((0.0025925100000000001 * fVec14[((IOTA - 45) & 127)]) + ((0.0021516 * fVec14[((IOTA - 44) & 127)]) + ((0.005077410000000001 * fVec14[((IOTA - 41) & 127)]) + ((0.0023729100000000002 * fVec14[((IOTA - 40) & 127)]) + ((0.008696849999999999 * fVec14[((IOTA - 37) & 127)]) + ((0.013909899999999999 * fVec14[((IOTA - 36) & 127)]) + ((0.010920000000000001 * fVec14[((IOTA - 35) & 127)]) + ((8.7939299999999991e-07 * fVec15[((IOTA - 126) & 127)]) + ((5.4800099999999999e-06 * fVec15[((IOTA - 125) & 127)]) + ((1.7206200000000001e-05 * fVec15[((IOTA - 121) & 127)]) + ((6.7243000000000007e-05 * fVec15[((IOTA - 120) & 127)]) + ((8.7255500000000012e-05 * fVec15[((IOTA - 119) & 127)]) + ((1.6624399999999998e-06 * fVec15[((IOTA - 118) & 127)]) + ((0.000144194 * fVec15[((IOTA - 116) & 127)]) + ((0.00014439500000000002 * fVec15[((IOTA - 114) & 127)]) + ((0.00015184500000000001 * fVec15[((IOTA - 113) & 127)]) + ((2.34313e-05 * fVec15[((IOTA - 109) & 127)]) + ((0.00042287999999999999 * fVec15[((IOTA - 108) & 127)]) + ((0.00030992900000000002 * fVec15[((IOTA - 107) & 127)]) + ((0.00013332900000000001 * fVec15[((IOTA - 3) & 127)]) + ((0.00011180900000000001 * fVec15[((IOTA - 2) & 127)]) + ((7.1409999999999997e-07 * fTemp15) + ((0.020147700000000001 * fVec15[((IOTA - 15) & 127)]) + ((0.00239529 * fVec15[((IOTA - 12) & 127)]) + ((0.00075913900000000004 * fVec15[((IOTA - 11) & 127)]) + ((0.00060334500000000003 * fVec15[((IOTA - 9) & 127)]) + ((0.00095772900000000005 * fVec15[((IOTA - 6) & 127)]) + ((0.00020482300000000003 * fVec15[((IOTA - 101) & 127)]) + ((0.000300542 * fVec15[((IOTA - 100) & 127)]) + ((0.00086114700000000015 * fVec15[((IOTA - 96) & 127)]) + ((0.00020261300000000003 * fVec15[((IOTA - 95) & 127)]) + ((0.00029358500000000002 * fVec15[((IOTA - 91) & 127)]) + ((0.001897 * fVec15[((IOTA - 90) & 127)]) + ((0.00011857899999999999 * fVec15[((IOTA - 89) & 127)]) + ((0.00093195400000000003 * fVec15[((IOTA - 87) & 127)]) + ((0.00086698299999999999 * fVec15[((IOTA - 86) & 127)]) + ((0.00190189 * fVec15[((IOTA - 83) & 127)]) + ((0.0015840700000000001 * fVec15[((IOTA - 82) & 127)]) + ((0.00062755200000000008 * fVec15[((IOTA - 81) & 127)]) + ((0.0021193000000000002 * fVec15[((IOTA - 78) & 127)]) + ((0.0025810200000000003 * fVec15[((IOTA - 77) & 127)]) + ((2.1180200000000001e-05 * fVec15[((IOTA - 76) & 127)]) + ((0.00014521 * fVec15[((IOTA - 75) & 127)]) + ((9.0364000000000018e-05 * fVec15[((IOTA - 72) & 127)]) + ((0.00108413 * fVec15[((IOTA - 71) & 127)]) + ((0.000361035 * fVec15[((IOTA - 70) & 127)]) + ((0.00084564900000000008 * fVec15[((IOTA - 67) & 127)]) + ((0.00059175800000000006 * fVec15[((IOTA - 63) & 127)]) + ((0.00054578800000000007 * fVec15[((IOTA - 62) & 127)]) + ((0.00023921600000000002 * fVec15[((IOTA - 59) & 127)]) + ((0.00085691700000000001 * fVec15[((IOTA - 58) & 127)]) + ((0.00016994800000000001 * fVec15[((IOTA - 57) & 127)]) + ((8.2977300000000009e-05 * fVec15[((IOTA - 56) & 127)]) + ((0.0042629599999999997 * fVec15[((IOTA - 53) & 127)]) + ((0.00357925 * fVec15[((IOTA - 52) & 127)]) + ((0.00121156 * fVec15[((IOTA - 49) & 127)]) + ((0.0041496700000000003 * fVec15[((IOTA - 48) & 127)]) + ((0.0086446200000000004 * fVec15[((IOTA - 44) & 127)]) + ((0.0062203400000000004 * fVec15[((IOTA - 43) & 127)]) + ((0.0029795799999999999 * fVec15[((IOTA - 40) & 127)]) + ((0.0012590699999999999 * fVec15[((IOTA - 38) & 127)]) + ((0.0154334 * fVec15[((IOTA - 34) & 127)]) + ((0.018936700000000001 * fVec15[((IOTA - 30) & 127)]) + ((0.0049586700000000001 * fVec15[((IOTA - 29) & 127)]) + ((0.046698000000000003 * fVec15[((IOTA - 25) & 127)]) + ((0.010134700000000002 * fVec15[((IOTA - 22) & 127)]) + ((0.013995500000000001 * fVec15[((IOTA - 21) & 127)]) + ((0.0044761200000000001 * fVec15[((IOTA - 19) & 127)]) + ((0.0098600600000000004 * fVec15[((IOTA - 18) & 127)]) + ((1.00244e-05 * fVec16[((IOTA - 124) & 127)]) + ((2.4757200000000001e-05 * fVec16[((IOTA - 123) & 127)]) + ((2.0122300000000002e-05 * fVec16[((IOTA - 120) & 127)]) + ((7.8952500000000007e-05 * fVec16[((IOTA - 119) & 127)]) + ((5.0735200000000009e-05 * fVec16[((IOTA - 118) & 127)]) + ((2.5488499999999997e-06 * fVec16[((IOTA - 117) & 127)]) + ((5.9800600000000005e-05 * fVec16[((IOTA - 116) & 127)]) + ((0.000105037 * fVec16[((IOTA - 115) & 127)]) + ((0.00025922800000000002 * fVec16[((IOTA - 114) & 127)]) + ((0.00015691000000000001 * fVec16[((IOTA - 113) & 127)]) + ((0.00011911400000000001 * fVec16[((IOTA - 90) & 127)]) + ((0.00026815200000000002 * fVec16[((IOTA - 88) & 127)]) + ((0.0022168700000000001 * fVec16[((IOTA - 85) & 127)]) + ((0.00236279 * fVec16[((IOTA - 84) & 127)]) + ((0.00133927 * fVec16[((IOTA - 83) & 127)]) + ((0.0036129700000000001 * fVec16[((IOTA - 82) & 127)]) + ((0.00258392 * fVec16[((IOTA - 81) & 127)]) + ((0.00076553699999999994 * fVec16[((IOTA - 80) & 127)]) + ((0.00052649700000000001 * fVec16[((IOTA - 77) & 127)]) + ((0.00065805200000000001 * fVec16[((IOTA - 73) & 127)]) + ((0.0019009700000000001 * fVec16[((IOTA - 72) & 127)]) + ((0.00040585399999999998 * fVec16[((IOTA - 68) & 127)]) + ((0.00056621899999999997 * fVec16[((IOTA - 67) & 127)]) + ((0.00100438 * fVec16[((IOTA - 65) & 127)]) + ((0.00106258 * fVec16[((IOTA - 64) & 127)]) + ((0.00075541200000000001 * fVec16[((IOTA - 63) & 127)]) + ((0.0041593900000000007 * fVec16[((IOTA - 62) & 127)]) + ((0.0036430799999999999 * fVec16[((IOTA - 61) & 127)]) + ((0.00123704 * fVec16[((IOTA - 60) & 127)]) + ((0.00081929099999999999 * fVec16[((IOTA - 54) & 127)]) + ((0.000429732 * fVec16[((IOTA - 53) & 127)]) + ((0.0050749500000000008 * fVec16[((IOTA - 41) & 127)]) + ((0.0062304400000000003 * fVec16[((IOTA - 40) & 127)]) + ((0.0051450200000000001 * fVec16[((IOTA - 39) & 127)]) + ((0.0054617399999999997 * fVec16[((IOTA - 38) & 127)]) + ((0.013412900000000002 * fVec16[((IOTA - 37) & 127)]) + ((0.0083610900000000016 * fVec16[((IOTA - 36) & 127)]) + ((0.032106300000000004 * fVec16[((IOTA - 35) & 127)]) + ((0.013874800000000001 * fVec16[((IOTA - 34) & 127)]) + ((0.015102899999999999 * fVec16[((IOTA - 31) & 127)]) + ((0.00959986 * fVec16[((IOTA - 30) & 127)]) + ((0.0127315 * fVec16[((IOTA - 27) & 127)]) + ((0.0078796999999999999 * fVec16[((IOTA - 26) & 127)]) + ((0.0209115 * fVec16[((IOTA - 20) & 127)]) + ((0.024721300000000002 * fVec16[((IOTA - 19) & 127)]) + ((0.033460299999999998 * fVec16[((IOTA - 17) & 127)]) + ((0.019325600000000002 * fVec16[((IOTA - 16) & 127)]) + ((0.048091999999999996 * fVec16[((IOTA - 15) & 127)]) + ((0.023035199999999999 * fVec16[((IOTA - 14) & 127)]) + ((0.0040449700000000002 * fVec16[((IOTA - 10) & 127)]) + ((0.0018601700000000002 * fVec16[((IOTA - 8) & 127)]) + ((0.00110994 * fVec16[((IOTA - 6) & 127)]) + ((0.000373285 * fVec16[((IOTA - 2) & 127)]) + ((4.2016200000000006e-05 * fVec16[((IOTA - 1) & 127)]) + ((0.0020936499999999999 * fVec16[((IOTA - 92) & 127)]) + ((0.0011613700000000001 * fVec16[((IOTA - 93) & 127)]) + ((0.00292779 * fVec16[((IOTA - 91) & 127)]) + ((0.00026635300000000004 * fVec16[((IOTA - 109) & 127)]) + ((0.00011445900000000001 * fVec16[((IOTA - 108) & 127)]) + ((0.000136272 * fVec16[((IOTA - 104) & 127)]) + ((0.00016330100000000003 * fVec16[((IOTA - 96) & 127)]) + ((7.4505200000000006e-05 * fVec16[((IOTA - 95) & 127)]) + ((0.00031864099999999999 * fVec16[((IOTA - 94) & 127)]) + ((4.9133300000000002e-07 * fVec17[((IOTA - 126) & 127)]) + ((1.3759399999999999e-06 * fVec17[((IOTA - 125) & 127)]) + ((1.05587e-07 * fVec17[((IOTA - 124) & 127)]) + ((4.21833e-05 * fVec17[((IOTA - 120) & 127)]) + ((1.23038e-06 * fVec17[((IOTA - 119) & 127)]) + ((0.00012532099999999999 * fVec17[((IOTA - 115) & 127)]) + ((9.7130800000000002e-05 * fVec17[((IOTA - 114) & 127)]) + ((0.00033839299999999998 * fVec17[((IOTA - 110) & 127)]) + ((0.00029385700000000002 * fVec17[((IOTA - 106) & 127)]) + ((0.00033615499999999998 * fVec17[((IOTA - 105) & 127)]) + ((7.4171300000000013e-05 * fVec17[((IOTA - 81) & 127)]) + ((2.6719199999999999e-06 * fVec17[((IOTA - 78) & 127)]) + ((0.0027959399999999998 * fVec17[((IOTA - 73) & 127)]) + ((0.0025147900000000003 * fVec17[((IOTA - 72) & 127)]) + ((0.0026507900000000001 * fVec17[((IOTA - 68) & 127)]) + ((0.0024592200000000002 * fVec17[((IOTA - 67) & 127)]) + ((0.00046335100000000003 * fVec17[((IOTA - 66) & 127)]) + ((0.00364205 * fVec17[((IOTA - 63) & 127)]) + ((0.0030474500000000002 * fVec17[((IOTA - 62) & 127)]) + ((8.9896500000000002e-05 * fVec17[((IOTA - 60) & 127)]) + ((0.0020873300000000001 * fVec17[((IOTA - 59) & 127)]) + ((0.00024737200000000004 * fVec17[((IOTA - 58) & 127)]) + ((0.00011431100000000001 * fVec17[((IOTA - 57) & 127)]) + ((0.0012573 * fVec17[((IOTA - 56) & 127)]) + ((0.0013347700000000001 * fVec17[((IOTA - 51) & 127)]) + ((0.00071260200000000001 * fVec17[((IOTA - 48) & 127)]) + ((0.000302236 * fVec17[((IOTA - 47) & 127)]) + ((0.00032389000000000002 * fVec17[((IOTA - 45) & 127)]) + ((0.0039772100000000001 * fVec17[((IOTA - 44) & 127)]) + ((0.0039344899999999997 * fVec17[((IOTA - 39) & 127)]) + ((0.0028605000000000002 * fVec17[((IOTA - 37) & 127)]) + ((0.0056457300000000007 * fVec17[((IOTA - 36) & 127)]) + ((0.013276099999999999 * fVec17[((IOTA - 33) & 127)]) + ((0.0069491600000000002 * fVec17[((IOTA - 32) & 127)]) + ((0.0046345700000000002 * fVec17[((IOTA - 29) & 127)]) + ((0.0063826300000000002 * fVec17[((IOTA - 28) & 127)]) + ((0.0061617600000000005 * fVec17[((IOTA - 26) & 127)]) + ((0.0090629600000000001 * fVec17[((IOTA - 25) & 127)]) + ((0.016456200000000001 * fVec17[((IOTA - 24) & 127)]) + ((0.030671 * fVec17[((IOTA - 21) & 127)]) + ((0.0035630700000000002 * fVec17[((IOTA - 18) & 127)]) + ((0.0074771200000000003 * fVec17[((IOTA - 15) & 127)]) + ((0.00190957 * fVec17[((IOTA - 12) & 127)]) + ((0.00021257400000000001 * fVec17[((IOTA - 9) & 127)]) + ((0.00024266000000000001 * fVec17[((IOTA - 6) & 127)]) + ((2.0019800000000001e-05 * fVec17[((IOTA - 3) & 127)]) + ((0.00011068 * fVec17[((IOTA - 2) & 127)]) + ((5.2308799999999996e-06 * fTemp17) + ((0.00184891 * fVec17[((IOTA - 85) & 127)]) + ((6.1678400000000002e-05 * fVec17[((IOTA - 84) & 127)]) + ((0.00021002299999999999 * fVec17[((IOTA - 82) & 127)]) + ((0.00047366300000000004 * fVec17[((IOTA - 104) & 127)]) + ((0.00063192000000000012 * fVec17[((IOTA - 100) & 127)]) + ((0.00026227100000000001 * fVec17[((IOTA - 99) & 127)]) + ((0.00090633300000000005 * fVec17[((IOTA - 92) & 127)]) + ((0.00112509 * fVec17[((IOTA - 91) & 127)]) + ((0.00062542600000000011 * fVec17[((IOTA - 90) & 127)]) + ((0.00028041100000000005 * fVec17[((IOTA - 83) & 127)]) + ((0.0012169300000000002 * fVec17[((IOTA - 86) & 127)]) + ((1.4991799999999998e-06 * fVec18[((IOTA - 125) & 127)]) + ((4.4237300000000001e-06 * fVec18[((IOTA - 124) & 127)]) + ((2.5857400000000001e-05 * fVec18[((IOTA - 123) & 127)]) + ((4.8271399999999998e-08 * fVec18[((IOTA - 122) & 127)]) + ((0.00011086600000000001 * fVec18[((IOTA - 119) & 127)]) + ((0.00015923000000000001 * fVec18[((IOTA - 118) & 127)]) + ((0.00011133200000000001 * fVec18[((IOTA - 117) & 127)]) + ((9.1368399999999998e-05 * fVec18[((IOTA - 116) & 127)]) + ((6.9587500000000004e-05 * fVec18[((IOTA - 115) & 127)]) + ((7.9531300000000002e-05 * fVec18[((IOTA - 114) & 127)]) + ((0.000108869 * fVec18[((IOTA - 112) & 127)]) + ((5.3145400000000008e-05 * fVec18[((IOTA - 111) & 127)]) + ((0.00020724900000000003 * fVec18[((IOTA - 110) & 127)]) + ((0.000477114 * fVec18[((IOTA - 109) & 127)]) + ((0.00047335500000000001 * fVec18[((IOTA - 108) & 127)]) + ((0.00010935600000000001 * fVec18[((IOTA - 107) & 127)]) + ((0.00010925100000000001 * fVec18[((IOTA - 106) & 127)]) + ((0.00010986800000000001 * fVec18[((IOTA - 105) & 127)]) + ((0.00016840900000000001 * fVec18[((IOTA - 103) & 127)]) + ((9.6088500000000014e-05 * fVec18[((IOTA - 100) & 127)]) + ((0.00035324200000000003 * fVec18[((IOTA - 99) & 127)]) + ((0.00022054700000000003 * fVec18[((IOTA - 98) & 127)]) + ((7.9619000000000011e-05 * fVec18[((IOTA - 92) & 127)]) + ((0.00074820700000000008 * fVec18[((IOTA - 88) & 127)]) + ((0.00070991400000000007 * fVec18[((IOTA - 87) & 127)]) + ((0.00011130500000000002 * fVec18[((IOTA - 86) & 127)]) + ((0.00029838900000000003 * fVec18[((IOTA - 53) & 127)]) + ((0.0023647999999999998 * fVec18[((IOTA - 52) & 127)]) + ((0.0017983599999999999 * fVec18[((IOTA - 51) & 127)]) + ((0.0016364700000000001 * fVec18[((IOTA - 50) & 127)]) + ((0.0019431000000000001 * fVec18[((IOTA - 49) & 127)]) + ((0.00046590600000000003 * fVec18[((IOTA - 46) & 127)]) + ((0.0049145100000000004 * fVec18[((IOTA - 45) & 127)]) + ((0.0057126900000000003 * fVec18[((IOTA - 42) & 127)]) + ((0.0036100900000000003 * fVec18[((IOTA - 38) & 127)]) + ((0.0049432400000000007 * fVec18[((IOTA - 37) & 127)]) + ((0.0021107399999999998 * fVec18[((IOTA - 36) & 127)]) + ((0.0158944 * fVec18[((IOTA - 34) & 127)]) + ((0.012282700000000001 * fVec18[((IOTA - 33) & 127)]) + ((0.0089261400000000008 * fVec18[((IOTA - 32) & 127)]) + ((0.010118799999999999 * fVec18[((IOTA - 31) & 127)]) + ((0.0067020700000000001 * fVec18[((IOTA - 25) & 127)]) + ((0.0038775400000000005 * fVec18[((IOTA - 24) & 127)]) + ((0.0083579500000000011 * fVec18[((IOTA - 18) & 127)]) + ((0.0467927 * fVec18[((IOTA - 17) & 127)]) + ((0.041578400000000001 * fVec18[((IOTA - 16) & 127)]) + ((0.012665200000000001 * fVec18[((IOTA - 15) & 127)]) + ((0.0015061500000000002 * fVec18[((IOTA - 10) & 127)]) + ((0.00144769 * fVec18[((IOTA - 8) & 127)]) + ((2.8000400000000004e-05 * fVec18[((IOTA - 4) & 127)]) + ((0.00010043500000000001 * fVec18[((IOTA - 2) & 127)]) + ((5.0228400000000009e-05 * fVec18[((IOTA - 1) & 127)]) + ((1.0378400000000002e-05 * fTemp18) + ((0.0038434100000000002 * fVec18[((IOTA - 61) & 127)]) + ((0.0041785800000000003 * fVec18[((IOTA - 60) & 127)]) + ((0.0012871 * (fVec6[((IOTA - 71) & 127)] + fVec20[((IOTA - 99) & 127)])) + ((4.5172800000000002e-06 * fVec19[((IOTA - 125) & 127)]) + ((0.0015851900000000002 * fVec18[((IOTA - 83) & 127)]) + ((9.2806400000000006e-05 * fVec18[((IOTA - 82) & 127)]) + ((0.00087703300000000004 * fVec18[((IOTA - 79) & 127)]) + ((0.00051777699999999997 * fVec18[((IOTA - 78) & 127)]) + ((0.00056143600000000001 * fVec18[((IOTA - 75) & 127)]) + ((0.0023187400000000001 * fVec18[((IOTA - 74) & 127)]) + ((0.0031101499999999999 * fVec18[((IOTA - 73) & 127)]) + ((6.6465099999999999e-07 * fVec18[((IOTA - 72) & 127)]) + ((0.00063152 * fVec18[((IOTA - 68) & 127)]) + ((0.00098431600000000005 * fVec18[((IOTA - 67) & 127)]) + ((0.00041971200000000004 * fVec18[((IOTA - 56) & 127)]) + ((8.6446799999999994e-05 * fVec18[((IOTA - 57) & 127)]) + ((0.00023681100000000002 * fVec19[((IOTA - 2) & 127)]) + ((1.9032200000000001e-05 * fVec19[((IOTA - 1) & 127)]) + ((0.0034647700000000003 * fVec20[((IOTA - 18) & 127)]) + ((0.00594964 * fVec20[((IOTA - 17) & 127)]) + ((0.0161029 * fVec20[((IOTA - 16) & 127)]) + ((0.023348800000000003 * fVec20[((IOTA - 15) & 127)]) + ((0.0063743300000000001 * fVec20[((IOTA - 13) & 127)]) + ((0.0015232900000000001 * fVec20[((IOTA - 8) & 127)]) + ((0.00059566400000000009 * fVec20[((IOTA - 6) & 127)]) + ((0.00061765500000000005 * fVec20[((IOTA - 4) & 127)]) + ((0.00018629400000000002 * fVec20[((IOTA - 2) & 127)]) + ((1.14319e-05 * fTemp20) + ((0.0105468 * (fVec6[((IOTA - 30) & 127)] - fVec21[((IOTA - 36) & 127)])) + ((8.6228999999999984e-06 * fVec19[((IOTA - 121) & 127)]) + ((1.7197000000000002e-05 * fVec19[((IOTA - 120) & 127)]) + ((2.5498900000000001e-05 * fVec19[((IOTA - 119) & 127)]) + ((8.5473100000000007e-05 * fVec19[((IOTA - 118) & 127)]) + ((0.000117855 * fVec19[((IOTA - 117) & 127)]) + ((7.3769200000000005e-05 * fVec19[((IOTA - 116) & 127)]) + ((0.00010326400000000001 * fVec19[((IOTA - 115) & 127)]) + ((0.00014698200000000001 * fVec19[((IOTA - 114) & 127)]) + ((0.000116408 * fVec19[((IOTA - 113) & 127)]) + ((0.000116085 * fVec19[((IOTA - 112) & 127)]) + ((0.00012234100000000001 * fVec19[((IOTA - 111) & 127)]) + ((0.000291422 * fVec19[((IOTA - 110) & 127)]) + ((0.000101234 * fVec19[((IOTA - 109) & 127)]) + ((7.1704400000000004e-05 * fVec19[((IOTA - 108) & 127)]) + ((0.00017227900000000001 * fVec19[((IOTA - 106) & 127)]) + ((3.7385200000000002e-05 * fVec19[((IOTA - 105) & 127)]) + ((3.3625200000000005e-05 * fVec19[((IOTA - 101) & 127)]) + ((0.00036650100000000003 * fVec19[((IOTA - 87) & 127)]) + ((0.00082134800000000007 * fVec19[((IOTA - 86) & 127)]) + ((0.00047874499999999998 * fVec19[((IOTA - 81) & 127)]) + ((0.00093322400000000008 * fVec19[((IOTA - 80) & 127)]) + ((0.00072557100000000005 * fVec19[((IOTA - 79) & 127)]) + ((0.00086647800000000006 * fVec19[((IOTA - 77) & 127)]) + ((0.0024717699999999999 * fVec19[((IOTA - 76) & 127)]) + ((0.0011910600000000001 * fVec19[((IOTA - 75) & 127)]) + ((0.0017428699999999999 * fVec19[((IOTA - 74) & 127)]) + ((0.00125607 * fVec19[((IOTA - 73) & 127)]) + ((0.0028972500000000001 * fVec19[((IOTA - 68) & 127)]) + ((0.0039274399999999999 * fVec19[((IOTA - 67) & 127)]) + ((0.0012032799999999999 * fVec19[((IOTA - 66) & 127)]) + ((0.00069639100000000009 * fVec19[((IOTA - 65) & 127)]) + ((0.00067604500000000001 * fVec19[((IOTA - 62) & 127)]) + ((0.0020319800000000001 * fVec19[((IOTA - 61) & 127)]) + ((0.00030454800000000003 * fVec19[((IOTA - 60) & 127)]) + ((0.0027795100000000002 * fVec19[((IOTA - 56) & 127)]) + ((0.0040064599999999999 * fVec19[((IOTA - 55) & 127)]) + ((0.000117291 * fVec19[((IOTA - 52) & 127)]) + ((0.00024379400000000003 * fVec19[((IOTA - 51) & 127)]) + ((0.0021186500000000001 * fVec19[((IOTA - 49) & 127)]) + ((0.0035641600000000002 * fVec19[((IOTA - 48) & 127)]) + ((0.0032654700000000004 * fVec19[((IOTA - 47) & 127)]) + ((0.0054786700000000006 * fVec19[((IOTA - 43) & 127)]) + ((0.0027334600000000001 * fVec19[((IOTA - 42) & 127)]) + ((0.00072778400000000009 * fVec19[((IOTA - 39) & 127)]) + ((0.00847557 * fVec19[((IOTA - 38) & 127)]) + ((0.00445628 * fVec19[((IOTA - 37) & 127)]) + ((0.00091977900000000002 * fVec19[((IOTA - 36) & 127)]) + ((0.0015551999999999999 * fVec19[((IOTA - 35) & 127)]) + ((0.00075433100000000001 * fVec19[((IOTA - 34) & 127)]) + ((0.0018697900000000001 * fVec19[((IOTA - 33) & 127)]) + ((0.012971699999999999 * fVec19[((IOTA - 30) & 127)]) + ((0.0192195 * fVec19[((IOTA - 29) & 127)]) + ((0.0029063700000000001 * fVec19[((IOTA - 28) & 127)]) + ((0.053502300000000003 * fVec19[((IOTA - 24) & 127)]) + ((0.0063730200000000001 * fVec19[((IOTA - 23) & 127)]) + ((0.018845400000000002 * fVec19[((IOTA - 20) & 127)]) + ((0.040491700000000005 * fVec19[((IOTA - 19) & 127)]) + ((0.0282654 * fVec19[((IOTA - 18) & 127)]) + ((0.034808400000000003 * fVec19[((IOTA - 14) & 127)]) + ((0.00097944700000000004 * fVec19[((IOTA - 13) & 127)]) + ((0.00034398499999999999 * fVec19[((IOTA - 11) & 127)]) + ((0.00042503099999999998 * fVec19[((IOTA - 6) & 127)]) + ((0.00057029400000000005 * fVec19[((IOTA - 5) & 127)]) + ((5.0096100000000001e-06 * fVec20[((IOTA - 124) & 127)]) + ((1.3386700000000002e-05 * fVec20[((IOTA - 123) & 127)]) + ((3.2443100000000001e-05 * fVec20[((IOTA - 122) & 127)]) + ((1.76768e-05 * fVec20[((IOTA - 119) & 127)]) + ((8.9263899999999998e-05 * fVec20[((IOTA - 118) & 127)]) + ((2.6721800000000002e-05 * fVec20[((IOTA - 117) & 127)]) + ((8.7643399999999995e-06 * fVec20[((IOTA - 115) & 127)]) + ((3.1741700000000001e-05 * fVec20[((IOTA - 114) & 127)]) + ((5.6021400000000005e-05 * fVec20[((IOTA - 113) & 127)]) + ((5.941340000000001e-05 * fVec20[((IOTA - 109) & 127)]) + ((0.00014551400000000002 * fVec20[((IOTA - 104) & 127)]) + ((0.00041534500000000007 * fVec20[((IOTA - 100) & 127)]) + ((0.0252123 * fVec20[((IOTA - 21) & 127)]) + ((0.0254109 * fVec20[((IOTA - 20) & 127)]) + ((0.00081397000000000001 * fVec20[((IOTA - 98) & 127)]) + ((7.5796499999999995e-06 * fVec20[((IOTA - 96) & 127)]) + ((0.00142954 * fVec20[((IOTA - 95) & 127)]) + ((0.00067267800000000001 * fVec20[((IOTA - 92) & 127)]) + ((0.0012544500000000001 * fVec20[((IOTA - 91) & 127)]) + ((0.0026229399999999998 * fVec20[((IOTA - 87) & 127)]) + ((0.0012076299999999999 * fVec20[((IOTA - 86) & 127)]) + ((1.6765800000000001e-05 * fVec20[((IOTA - 83) & 127)]) + ((0.00011319699999999999 * fVec20[((IOTA - 82) & 127)]) + ((0.0013973899999999999 * fVec20[((IOTA - 78) & 127)]) + ((0.0037434500000000002 * fVec20[((IOTA - 77) & 127)]) + ((0.00103739 * fVec20[((IOTA - 76) & 127)]) + ((0.00042959699999999999 * fVec20[((IOTA - 73) & 127)]) + ((0.00143001 * fVec20[((IOTA - 72) & 127)]) + ((0.0028124000000000001 * fVec20[((IOTA - 71) & 127)]) + ((0.00084889100000000006 * fVec20[((IOTA - 70) & 127)]) + ((0.00046814600000000007 * fVec20[((IOTA - 69) & 127)]) + ((8.3187000000000002e-05 * fVec20[((IOTA - 66) & 127)]) + ((0.00060605399999999997 * fVec20[((IOTA - 65) & 127)]) + ((0.00097613699999999997 * fVec20[((IOTA - 64) & 127)]) + ((0.00086599699999999997 * fVec20[((IOTA - 63) & 127)]) + ((0.0017292799999999999 * fVec20[((IOTA - 60) & 127)]) + ((0.0022722300000000001 * fVec20[((IOTA - 49) & 127)]) + ((0.0068404800000000003 * fVec20[((IOTA - 48) & 127)]) + ((0.00110702 * fVec20[((IOTA - 47) & 127)]) + ((0.00757838 * fVec20[((IOTA - 44) & 127)]) + ((0.0057198600000000002 * fVec20[((IOTA - 43) & 127)]) + ((0.0029618999999999999 * fVec20[((IOTA - 40) & 127)]) + ((0.0140448 * fVec20[((IOTA - 35) & 127)]) + ((0.0041036900000000001 * fVec20[((IOTA - 34) & 127)]) + ((0.013145800000000001 * fVec20[((IOTA - 31) & 127)]) + ((0.019920400000000001 * fVec20[((IOTA - 30) & 127)]) + ((0.0094601700000000004 * fVec20[((IOTA - 26) & 127)]) + ((0.056288999999999999 * fVec20[((IOTA - 25) & 127)]) + ((0.0019233 * fVec20[((IOTA - 24) & 127)]) + ((5.4508599999999995e-06 * fVec21[((IOTA - 124) & 127)]) + ((2.3097900000000001e-05 * fVec21[((IOTA - 120) & 127)]) + ((9.5084400000000014e-05 * fVec21[((IOTA - 119) & 127)]) + ((4.7070600000000003e-05 * fVec21[((IOTA - 118) & 127)]) + ((1.9151600000000001e-05 * fVec21[((IOTA - 115) & 127)]) + ((0.000213902 * fVec21[((IOTA - 114) & 127)]) + ((4.3982700000000002e-05 * fVec21[((IOTA - 113) & 127)]) + ((8.4208499999999999e-05 * fVec21[((IOTA - 112) & 127)]) + ((0.000313663 * fVec21[((IOTA - 111) & 127)]) + ((0.000107876 * fVec21[((IOTA - 107) & 127)]) + ((0.00014932900000000002 * fVec21[((IOTA - 106) & 127)]) + ((0.00049481000000000004 * fVec21[((IOTA - 102) & 127)]) + ((0.00013896900000000002 * fVec21[((IOTA - 99) & 127)]) + ((0.000204095 * fVec21[((IOTA - 94) & 127)]) + ((0.0014644900000000001 * fVec21[((IOTA - 93) & 127)]) + ((0.00051962299999999998 * fVec21[((IOTA - 92) & 127)]) + ((0.0015988 * fVec21[((IOTA - 88) & 127)]) + ((0.0012366600000000001 * fVec21[((IOTA - 87) & 127)]) + ((0.0011569899999999999 * fVec21[((IOTA - 82) & 127)]) + ((0.0022012100000000003 * fVec21[((IOTA - 81) & 127)]) + ((0.00012976 * fVec21[((IOTA - 80) & 127)]) + ((0.00192268 * fVec21[((IOTA - 17) & 127)]) + ((0.030162100000000001 * fVec21[((IOTA - 16) & 127)]) + ((0.0031064899999999999 * fVec21[((IOTA - 14) & 127)]) + ((0.0034641700000000004 * fVec21[((IOTA - 13) & 127)]) + ((0.00109278 * fVec21[((IOTA - 11) & 127)]) + ((0.00052972100000000003 * fVec21[((IOTA - 8) & 127)]) + ((0.000247311 * fVec21[((IOTA - 7) & 127)]) + ((0.00027904300000000003 * fVec21[((IOTA - 4) & 127)]) + ((0.0037454299999999997 * fVec21[((IOTA - 25) & 127)]) + ((0.0010910800000000001 * fVec21[((IOTA - 72) & 127)]) + ((8.9774699999999996e-06 * fVec21[((IOTA - 71) & 127)]) + ((0.0018817999999999999 * fVec21[((IOTA - 70) & 127)]) + ((0.0061321300000000004 * fVec21[((IOTA - 69) & 127)]) + ((0.00048287699999999999 * fVec21[((IOTA - 59) & 127)]) + ((0.0018291900000000001 * fVec21[((IOTA - 58) & 127)]) + ((0.0024737499999999998 * fVec21[((IOTA - 57) & 127)]) + ((0.0019971400000000001 * fVec21[((IOTA - 56) & 127)]) + ((0.00122024 * fVec21[((IOTA - 55) & 127)]) + ((0.0039290200000000001 * fVec21[((IOTA - 54) & 127)]) + ((0.0016456699999999999 * fVec21[((IOTA - 53) & 127)]) + ((0.00022187000000000002 * fVec21[((IOTA - 52) & 127)]) + ((0.0013776999999999999 * fVec21[((IOTA - 46) & 127)]) + ((0.00103326 * fVec21[((IOTA - 45) & 127)]) + ((0.0032352400000000003 * fVec21[((IOTA - 44) & 127)]) + ((0.0038521000000000002 * fVec21[((IOTA - 43) & 127)]) + ((0.0237126 * fVec21[((IOTA - 20) & 127)]) + ((0.017540800000000002 * fVec21[((IOTA - 19) & 127)]) + ((0.010049600000000001 * fVec21[((IOTA - 40) & 127)]) + ((0.0061998300000000008 * fVec21[((IOTA - 39) & 127)]) + ((0.00020778699999999999 * fVec21[((IOTA - 38) & 127)]) + ((0.014879400000000001 * fVec21[((IOTA - 34) & 127)]) + ((0.00030624 * fVec21[((IOTA - 33) & 127)]) + ((0.0023475600000000003 * fVec21[((IOTA - 31) & 127)]) + ((0.0038550100000000003 * fVec21[((IOTA - 29) & 127)]) + ((0.0096461900000000007 * fVec21[((IOTA - 28) & 127)]) + ((8.3471200000000004e-08 * fVec22[((IOTA - 126) & 127)]) + ((9.3807100000000005e-06 * fVec22[((IOTA - 122) & 127)]) + ((6.6623900000000011e-05 * fVec22[((IOTA - 119) & 127)]) + ((6.1216400000000006e-05 * fVec22[((IOTA - 118) & 127)]) + ((6.7144700000000015e-05 * fVec22[((IOTA - 115) & 127)]) + ((0.000206061 * fVec22[((IOTA - 114) & 127)]) + ((0.00013795600000000001 * fVec22[((IOTA - 113) & 127)]) + ((4.38894e-05 * fVec22[((IOTA - 110) & 127)]) + ((0.00041225500000000004 * fVec22[((IOTA - 109) & 127)]) + ((0.000227209 * fVec22[((IOTA - 108) & 127)]) + ((0.00066430000000000005 * fVec22[((IOTA - 102) & 127)]) + ((0.00093781400000000003 * fVec22[((IOTA - 101) & 127)]) + ((0.00076159100000000005 * fVec22[((IOTA - 100) & 127)]) + ((0.00054271000000000007 * fVec22[((IOTA - 97) & 127)]) + ((0.00084564100000000006 * fVec22[((IOTA - 96) & 127)]) + ((0.000247972 * fVec22[((IOTA - 92) & 127)]) + ((0.0010684900000000001 * fVec22[((IOTA - 74) & 127)]) + ((0.00076376900000000008 * fVec22[((IOTA - 73) & 127)]) + ((0.00041839399999999999 * fVec22[((IOTA - 72) & 127)]) + ((6.3069200000000003e-05 * fVec22[((IOTA - 71) & 127)]) + ((0.00096322300000000003 * fVec22[((IOTA - 70) & 127)]) + ((0.00189788 * fVec22[((IOTA - 69) & 127)]) + ((0.00096244300000000011 * fVec22[((IOTA - 64) & 127)]) + ((0.00089314900000000009 * fVec22[((IOTA - 61) & 127)]) + ((0.00179447 * fVec22[((IOTA - 60) & 127)]) + ((0.000388658 * fVec22[((IOTA - 59) & 127)]) + ((0.00198825 * fVec22[((IOTA - 58) & 127)]) + ((0.0035999199999999999 * fVec22[((IOTA - 57) & 127)]) + ((0.0053912600000000001 * fVec22[((IOTA - 56) & 127)]) + ((0.0028989900000000002 * fVec22[((IOTA - 55) & 127)]) + ((0.0030239099999999999 * fVec22[((IOTA - 53) & 127)]) + ((0.0068894500000000001 * fVec22[((IOTA - 52) & 127)]) + ((0.000667396 * fVec22[((IOTA - 51) & 127)]) + ((0.00022144200000000003 * fVec22[((IOTA - 47) & 127)]) + ((0.00070796200000000002 * fVec22[((IOTA - 46) & 127)]) + ((0.0021818499999999999 * fVec22[((IOTA - 41) & 127)]) + ((0.013751599999999999 * fVec22[((IOTA - 38) & 127)]) + ((0.014187399999999999 * fVec22[((IOTA - 37) & 127)]) + ((0.0066966600000000001 * fVec22[((IOTA - 33) & 127)]) + ((0.0104107 * fVec22[((IOTA - 32) & 127)]) + ((0.015792199999999999 * fVec22[((IOTA - 29) & 127)]) + ((0.022154199999999999 * fVec22[((IOTA - 28) & 127)]) + ((0.0038254399999999998 * fVec22[((IOTA - 27) & 127)]) + ((0.028354799999999999 * fVec22[((IOTA - 25) & 127)]) + ((0.022252200000000003 * fVec22[((IOTA - 24) & 127)]) + ((0.0121111 * fVec22[((IOTA - 22) & 127)]) + ((0.032235100000000003 * fVec22[((IOTA - 18) & 127)]) + ((0.026861600000000003 * fVec22[((IOTA - 15) & 127)]) + ((0.017621899999999999 * fVec22[((IOTA - 14) & 127)]) + ((0.019559200000000002 * fVec22[((IOTA - 13) & 127)]) + ((0.0067998500000000005 * fVec22[((IOTA - 10) & 127)]) + ((0.00264073 * fVec22[((IOTA - 8) & 127)]) + ((0.0024590700000000003 * fVec22[((IOTA - 6) & 127)]) + ((0.00038372900000000003 * fVec22[((IOTA - 4) & 127)]) + ((0.000334903 * fVec22[((IOTA - 2) & 127)]) + ((5.3094000000000004e-05 * fVec22[((IOTA - 1) & 127)]) + ((2.1262000000000001e-05 * fTemp22) + ((0.00085027700000000009 * fVec22[((IOTA - 78) & 127)]) + ((0.0013567100000000001 * fVec22[((IOTA - 91) & 127)]) + ((0.00179301 * fVec22[((IOTA - 90) & 127)]) + ((0.00014971799999999999 * fVec22[((IOTA - 89) & 127)]) + ((0.0013197300000000001 * fVec22[((IOTA - 88) & 127)]) + ((0.00037485000000000003 * fVec22[((IOTA - 87) & 127)]) + ((0.00075088100000000012 * fVec22[((IOTA - 83) & 127)]) + ((0.000650408 * fVec22[((IOTA - 82) & 127)]) + ((4.1789000000000003e-05 * fVec22[((IOTA - 81) & 127)]) + ((0.00031279000000000002 * fVec22[((IOTA - 79) & 127)]) + ((6.4276900000000001e-05 * fVec25[((IOTA - 119) & 127)]) + ((9.164930000000001e-05 * fVec25[((IOTA - 118) & 127)]) + ((5.7182200000000003e-05 * fVec25[((IOTA - 117) & 127)]) + ((0.00012319500000000002 * fVec25[((IOTA - 116) & 127)]) + ((0.000211704 * fVec25[((IOTA - 115) & 127)]) + ((0.00034920800000000005 * fVec25[((IOTA - 114) & 127)]) + ((0.00033244200000000001 * fVec25[((IOTA - 113) & 127)]) + ((0.00025251100000000002 * fVec25[((IOTA - 112) & 127)]) + ((0.000318859 * fVec25[((IOTA - 111) & 127)]) + ((0.00039344000000000005 * fVec25[((IOTA - 110) & 127)]) + ((0.00033167 * fVec25[((IOTA - 109) & 127)]) + ((0.000465384 * fVec25[((IOTA - 108) & 127)]) + ((0.00039361300000000001 * fVec25[((IOTA - 107) & 127)]) + ((0.00042075400000000002 * fVec25[((IOTA - 106) & 127)]) + ((0.00037080799999999998 * fVec25[((IOTA - 105) & 127)]) + ((1.6587200000000003e-05 * fVec25[((IOTA - 103) & 127)]) + ((0.00091861900000000008 * fVec25[((IOTA - 102) & 127)]) + ((0.00025743700000000001 * fVec25[((IOTA - 101) & 127)]) + ((1.0584400000000002e-05 * fVec25[((IOTA - 98) & 127)]) + ((0.00040115600000000006 * fVec25[((IOTA - 97) & 127)]) + ((0.0014677900000000001 * fVec25[((IOTA - 90) & 127)]) + ((0.0010665400000000002 * fVec25[((IOTA - 89) & 127)]) + ((0.0011811600000000001 * fVec25[((IOTA - 88) & 127)]) + ((0.00093001200000000003 * fVec25[((IOTA - 87) & 127)]) + ((0.00025672299999999999 * fVec25[((IOTA - 85) & 127)]) + ((3.6903100000000002e-05 * fVec25[((IOTA - 83) & 127)]) + ((0.00082218600000000003 * fVec25[((IOTA - 82) & 127)]) + ((0.000382178 * fVec25[((IOTA - 81) & 127)]) + ((0.00056339900000000002 * fVec25[((IOTA - 78) & 127)]) + ((0.00030066700000000001 * fVec25[((IOTA - 77) & 127)]) + ((0.00075356000000000002 * fVec25[((IOTA - 76) & 127)]) + ((0.0017828800000000001 * fVec25[((IOTA - 75) & 127)]) + ((0.00080830800000000009 * fVec25[((IOTA - 74) & 127)]) + ((0.00187645 * fVec25[((IOTA - 70) & 127)]) + ((0.0013177900000000001 * fVec25[((IOTA - 69) & 127)]) + ((0.0026788900000000002 * fVec25[((IOTA - 68) & 127)]) + ((0.0014275899999999998 * fVec25[((IOTA - 67) & 127)]) + ((0.00077358800000000008 * fVec25[((IOTA - 65) & 127)]) + ((0.00030791900000000003 * fVec25[((IOTA - 64) & 127)]) + ((0.0018273299999999998 * fVec25[((IOTA - 59) & 127)]) + ((0.000741378 * fVec25[((IOTA - 58) & 127)]) + ((0.0021143999999999998 * fVec25[((IOTA - 56) & 127)]) + ((0.0023650199999999998 * fVec25[((IOTA - 55) & 127)]) + ((0.00137963 * fVec25[((IOTA - 46) & 127)]) + ((0.0022811300000000001 * fVec25[((IOTA - 45) & 127)]) + ((0.0077523699999999997 * fVec25[((IOTA - 44) & 127)]) + ((0.0087150300000000003 * fVec25[((IOTA - 43) & 127)]) + ((0.0035589599999999999 * fVec25[((IOTA - 40) & 127)]) + ((0.009139089999999999 * fVec25[((IOTA - 37) & 127)]) + ((0.0022023799999999999 * fVec25[((IOTA - 36) & 127)]) + ((0.00043536700000000003 * fVec25[((IOTA - 35) & 127)]) + ((0.0065159300000000005 * fVec25[((IOTA - 34) & 127)]) + ((0.0023690899999999999 * fVec25[((IOTA - 33) & 127)]) + ((0.017782599999999999 * fVec25[((IOTA - 32) & 127)]) + ((0.0058807299999999998 * fVec25[((IOTA - 31) & 127)]) + ((0.033734800000000002 * fVec25[((IOTA - 28) & 127)]) + ((0.00030687999999999999 * fVec25[((IOTA - 27) & 127)]) + ((0.027150500000000001 * fVec25[((IOTA - 25) & 127)]) + ((0.018427300000000001 * fVec25[((IOTA - 24) & 127)]) + ((0.037316000000000002 * fVec25[((IOTA - 18) & 127)]) + ((0.014252300000000001 * fVec25[((IOTA - 17) & 127)]) + ((0.019724700000000001 * fVec25[((IOTA - 15) & 127)]) + ((0.00039235000000000002 * fVec25[((IOTA - 14) & 127)]) + ((0.016522600000000002 * fVec25[((IOTA - 13) & 127)]) + ((0.0057737600000000002 * fVec25[((IOTA - 10) & 127)]) + ((0.00298131 * fVec25[((IOTA - 8) & 127)]) + ((0.0021578599999999997 * fVec25[((IOTA - 6) & 127)]) + ((0.0006632360000000001 * fVec25[((IOTA - 4) & 127)]) + ((0.00032355000000000003 * fVec25[((IOTA - 2) & 127)]) + ((4.3569800000000004e-05 * fVec25[((IOTA - 1) & 127)]) + ((2.0610900000000003e-05 * fTemp25) + ((7.3541399999999999e-06 * fVec24[((IOTA - 125) & 127)]) + ((1.9871400000000001e-05 * fVec24[((IOTA - 124) & 127)]) + ((1.68007e-05 * fVec24[((IOTA - 123) & 127)]) + ((4.0472700000000003e-05 * fVec24[((IOTA - 120) & 127)]) + ((2.0089899999999999e-06 * fVec24[((IOTA - 117) & 127)]) + ((9.4388500000000013e-05 * fVec24[((IOTA - 116) & 127)]) + ((4.0048000000000007e-05 * fVec24[((IOTA - 115) & 127)]) + ((0.00013508199999999999 * fVec24[((IOTA - 114) & 127)]) + ((1.4516400000000002e-05 * fVec24[((IOTA - 112) & 127)]) + ((4.0951399999999994e-06 * fVec24[((IOTA - 109) & 127)]) + ((0.00038113700000000003 * fVec24[((IOTA - 108) & 127)]) + ((0.00025360600000000002 * fVec24[((IOTA - 107) & 127)]) + ((0.00018401499999999999 * fVec24[((IOTA - 86) & 127)]) + ((8.3155100000000006e-05 * fVec24[((IOTA - 84) & 127)]) + ((0.00055631600000000006 * fVec24[((IOTA - 83) & 127)]) + ((0.0013639500000000001 * fVec24[((IOTA - 82) & 127)]) + ((0.0011469 * fVec24[((IOTA - 81) & 127)]) + ((0.0022757299999999997 * fVec24[((IOTA - 78) & 127)]) + ((0.00076008400000000006 * fVec24[((IOTA - 77) & 127)]) + ((0.00049322500000000002 * fVec24[((IOTA - 75) & 127)]) + ((7.2509299999999999e-06 * fVec24[((IOTA - 74) & 127)]) + ((0.00102811 * fVec24[((IOTA - 73) & 127)]) + ((0.00084844100000000013 * fVec24[((IOTA - 72) & 127)]) + ((0.00073845000000000009 * fVec24[((IOTA - 71) & 127)]) + ((0.00068371000000000003 * fVec24[((IOTA - 70) & 127)]) + ((7.2511700000000006e-05 * fVec24[((IOTA - 69) & 127)]) + ((0.00078590300000000001 * fVec24[((IOTA - 66) & 127)]) + ((0.00095934000000000015 * fVec24[((IOTA - 62) & 127)]) + ((0.000404712 * fVec24[((IOTA - 61) & 127)]) + ((0.00023097600000000001 * fVec24[((IOTA - 57) & 127)]) + ((0.00218833 * fVec24[((IOTA - 53) & 127)]) + ((0.0010072700000000002 * fVec24[((IOTA - 52) & 127)]) + ((0.00137375 * fVec24[((IOTA - 51) & 127)]) + ((0.00083448600000000006 * fVec24[((IOTA - 50) & 127)]) + ((0.00081536399999999995 * fVec24[((IOTA - 49) & 127)]) + ((0.00054543100000000008 * fVec24[((IOTA - 48) & 127)]) + ((0.0035057600000000001 * fVec24[((IOTA - 47) & 127)]) + ((0.0042825600000000004 * fVec24[((IOTA - 46) & 127)]) + ((0.0073746600000000008 * fVec24[((IOTA - 43) & 127)]) + ((0.0031813100000000001 * fVec24[((IOTA - 41) & 127)]) + ((0.0031712400000000001 * fVec24[((IOTA - 40) & 127)]) + ((0.0019387000000000002 * fVec24[((IOTA - 38) & 127)]) + ((0.010274799999999999 * fVec24[((IOTA - 37) & 127)]) + ((0.0160001 * fVec24[((IOTA - 34) & 127)]) + ((0.015218700000000002 * fVec24[((IOTA - 33) & 127)]) + ((0.0051433299999999998 * fVec24[((IOTA - 29) & 127)]) + ((0.019054000000000001 * fVec24[((IOTA - 28) & 127)]) + ((0.029220799999999998 * fVec24[((IOTA - 22) & 127)]) + ((0.019108199999999999 * fVec24[((IOTA - 20) & 127)]) + ((0.0101244 * fVec24[((IOTA - 19) & 127)]) + ((0.0243991 * fVec24[((IOTA - 17) & 127)]) + ((0.0071943800000000002 * fVec24[((IOTA - 16) & 127)]) + ((0.0065491000000000004 * fVec24[((IOTA - 14) & 127)]) + ((0.00345408 * fVec24[((IOTA - 13) & 127)]) + ((0.000172325 * fVec24[((IOTA - 11) & 127)]) + ((4.8090900000000004e-05 * fVec24[((IOTA - 10) & 127)]) + ((0.0012270600000000001 * fVec24[((IOTA - 8) & 127)]) + ((0.00054008200000000011 * fVec24[((IOTA - 4) & 127)]) + ((2.44107e-05 * fVec24[((IOTA - 2) & 127)]) + ((0.00038692400000000002 * fVec24[((IOTA - 90) & 127)]) + ((8.5443400000000003e-05 * fVec24[((IOTA - 97) & 127)]) + ((0.00057432400000000008 * fVec24[((IOTA - 96) & 127)]) + ((5.2891500000000002e-07 * fVec26[((IOTA - 126) & 127)]) + ((7.5122799999999995e-06 * fVec26[((IOTA - 125) & 127)]) + ((1.6393300000000001e-05 * fVec26[((IOTA - 124) & 127)]) + ((2.3049300000000003e-05 * fVec26[((IOTA - 123) & 127)]) + ((2.3497200000000003e-05 * fVec26[((IOTA - 122) & 127)]) + ((3.1160000000000007e-05 * fVec26[((IOTA - 121) & 127)]) + ((2.6824200000000003e-05 * fVec26[((IOTA - 120) & 127)]) + ((2.2243600000000002e-05 * fVec26[((IOTA - 117) & 127)]) + ((4.78325e-05 * fVec26[((IOTA - 116) & 127)]) + ((0.0011128800000000001 * fVec24[((IOTA - 87) & 127)]) + ((0.00013262100000000003 * fVec26[((IOTA - 94) & 127)]) + ((0.00061235200000000004 * fVec26[((IOTA - 91) & 127)]) + ((0.00083076200000000008 * fVec26[((IOTA - 90) & 127)]) + ((0.00094943600000000012 * fVec26[((IOTA - 89) & 127)]) + ((0.00016757299999999999 * fVec26[((IOTA - 88) & 127)]) + ((0.00022032700000000001 * fVec26[((IOTA - 87) & 127)]) + ((0.00016127700000000001 * fVec26[((IOTA - 86) & 127)]) + ((0.00678927 * fVec26[((IOTA - 17) & 127)]) + ((0.0091073999999999999 * fVec26[((IOTA - 16) & 127)]) + ((0.0130569 * fVec26[((IOTA - 15) & 127)]) + ((0.0042139100000000004 * fVec26[((IOTA - 13) & 127)]) + ((0.00085768200000000002 * fVec26[((IOTA - 8) & 127)]) + ((0.00032995300000000002 * fVec26[((IOTA - 6) & 127)]) + ((0.00189814 * fVec26[((IOTA - 84) & 127)]) + ((0.0011356999999999999 * fVec26[((IOTA - 82) & 127)]) + ((0.0018585000000000001 * fVec26[((IOTA - 81) & 127)]) + ((0.0012131000000000002 * fVec26[((IOTA - 80) & 127)]) + ((0.00025399999999999999 * fVec26[((IOTA - 79) & 127)]) + ((0.00035679200000000004 * fVec26[((IOTA - 78) & 127)]) + ((0.00097909699999999995 * fVec26[((IOTA - 77) & 127)]) + ((0.0021205199999999999 * fVec26[((IOTA - 76) & 127)]) + ((0.00191763 * fVec26[((IOTA - 85) & 127)]) + ((0.0008138310000000001 * fVec26[((IOTA - 68) & 127)]) + ((0.00074145100000000007 * fVec26[((IOTA - 62) & 127)]) + ((0.00047705600000000001 * fVec26[((IOTA - 61) & 127)]) + ((0.0034899700000000002 * fVec26[((IOTA - 60) & 127)]) + ((0.0025903700000000003 * fVec26[((IOTA - 59) & 127)]) + ((0.0027718299999999999 * fVec26[((IOTA - 58) & 127)]) + ((0.00315957 * fVec26[((IOTA - 57) & 127)]) + ((0.0041676700000000001 * fVec26[((IOTA - 56) & 127)]) + ((0.0040106600000000001 * fVec26[((IOTA - 55) & 127)]) + ((0.00024623100000000002 * fVec26[((IOTA - 54) & 127)]) + ((0.00327415 * fVec26[((IOTA - 53) & 127)]) + ((0.0026408399999999998 * fVec26[((IOTA - 52) & 127)]) + ((0.00050010199999999999 * fVec26[((IOTA - 50) & 127)]) + ((0.00058122499999999999 * fVec26[((IOTA - 49) & 127)]) + ((0.0072108700000000003 * fVec26[((IOTA - 44) & 127)]) + ((0.0018301400000000001 * fVec26[((IOTA - 43) & 127)]) + ((0.00058247500000000005 * fVec26[((IOTA - 38) & 127)]) + ((0.0085527399999999996 * fVec26[((IOTA - 37) & 127)]) + ((0.0064438700000000008 * fVec26[((IOTA - 35) & 127)]) + ((0.0030920700000000001 * fVec26[((IOTA - 31) & 127)]) + ((0.026311300000000003 * fVec26[((IOTA - 30) & 127)]) + ((0.0045847700000000002 * fVec26[((IOTA - 29) & 127)]) + ((0.014478500000000002 * fVec26[((IOTA - 26) & 127)]) + ((0.014742699999999999 * fVec26[((IOTA - 25) & 127)]) + ((0.0040668100000000006 * fVec26[((IOTA - 23) & 127)]) + ((0.010288200000000001 * fVec26[((IOTA - 21) & 127)]) + ((0.016673299999999999 * fVec26[((IOTA - 20) & 127)]) + ((0.0066805500000000004 * fVec26[((IOTA - 18) & 127)]) + ((7.5180799999999995e-07 * fVec6[((IOTA - 126) & 127)]) + ((7.4192699999999999e-06 * fVec6[((IOTA - 125) & 127)]) + ((7.8058900000000002e-06 * fVec6[((IOTA - 124) & 127)]) + ((0.00050478700000000003 * fVec26[((IOTA - 4) & 127)]) + ((7.6831699999999991e-06 * fVec6[((IOTA - 123) & 127)]) + ((4.3886799999999996e-07 * fVec6[((IOTA - 122) & 127)]) + ((2.5728499999999999e-05 * fVec6[((IOTA - 121) & 127)]) + ((3.8519100000000002e-06 * fVec6[((IOTA - 120) & 127)]) + ((8.4650599999999985e-06 * fVec6[((IOTA - 119) & 127)]) + ((4.1315700000000002e-05 * fVec6[((IOTA - 118) & 127)]) + ((0.00014156200000000002 * fVec6[((IOTA - 117) & 127)]) + ((0.00013138900000000001 * fVec6[((IOTA - 116) & 127)]) + ((2.3594499999999999e-05 * fVec6[((IOTA - 114) & 127)]) + ((5.5362000000000003e-05 * fVec6[((IOTA - 113) & 127)]) + ((4.5982300000000002e-05 * fVec6[((IOTA - 112) & 127)]) + ((2.5231199999999997e-06 * fTemp26) + ((0.00020877800000000001 * fVec6[((IOTA - 95) & 127)]) + ((0.0014440100000000001 * fVec6[((IOTA - 94) & 127)]) + ((0.000105713 * fVec26[((IOTA - 2) & 127)]) + ((7.5196800000000005e-05 * fVec6[((IOTA - 93) & 127)]) + ((0.00021774900000000002 * fVec6[((IOTA - 88) & 127)]) + ((0.00050493599999999999 * fVec6[((IOTA - 87) & 127)]) + ((0.00129094 * fVec6[((IOTA - 86) & 127)]) + ((0.00131875 * fVec6[((IOTA - 85) & 127)]) + ((0.00025035200000000002 * fVec6[((IOTA - 84) & 127)]) + ((0.0016813900000000001 * fVec6[((IOTA - 83) & 127)]) + ((0.00079413300000000004 * fVec6[((IOTA - 82) & 127)]) + ((0.00148109 * fVec6[((IOTA - 78) & 127)]) + ((0.00187816 * fVec6[((IOTA - 77) & 127)]) + ((0.000177443 * fVec6[((IOTA - 2) & 127)]) + ((2.38744e-05 * fVec6[((IOTA - 1) & 127)]) + ((0.012670500000000001 * fVec6[((IOTA - 17) & 127)]) + ((0.017149600000000001 * fVec6[((IOTA - 14) & 127)]) + ((0.00039274200000000002 * fVec6[((IOTA - 13) & 127)]) + ((0.00063474100000000008 * fVec6[((IOTA - 8) & 127)]) + ((0.0015205800000000001 * fVec6[((IOTA - 76) & 127)]) + ((0.00021227600000000001 * fVec6[((IOTA - 75) & 127)]) + ((0.00359524 * fVec6[((IOTA - 74) & 127)]) + ((0.0041234900000000005 * fVec6[((IOTA - 73) & 127)]) + ((0.00089886800000000004 * fVec6[((IOTA - 72) & 127)]) + ((0.0018163100000000002 * fVec6[((IOTA - 65) & 127)]) + ((0.0033862499999999999 * fVec6[((IOTA - 62) & 127)]) + ((0.00095073000000000011 * fVec6[((IOTA - 61) & 127)]) + ((0.00032132100000000001 * fVec6[((IOTA - 55) & 127)]) + ((0.0011200699999999999 * fVec6[((IOTA - 53) & 127)]) + ((0.0028892500000000003 * fVec6[((IOTA - 50) & 127)]) + ((0.000955261 * fVec6[((IOTA - 49) & 127)]) + ((6.3343100000000014e-05 * fVec6[((IOTA - 47) & 127)]) + ((0.00694716 * fVec6[((IOTA - 44) & 127)]) + ((0.0026067200000000003 * fVec6[((IOTA - 43) & 127)]) + ((0.0036414500000000001 * fVec6[((IOTA - 42) & 127)]) + ((0.0024519899999999998 * fVec6[((IOTA - 41) & 127)]) + ((0.00093541399999999997 * fVec6[((IOTA - 39) & 127)]) + ((0.0018243199999999999 * fVec6[((IOTA - 37) & 127)]) + ((0.0072907000000000007 * fVec6[((IOTA - 36) & 127)]) + ((0.0082141100000000002 * fVec6[((IOTA - 35) & 127)]) + ((0.0015148500000000001 * fVec6[((IOTA - 33) & 127)]) + ((0.0039258799999999996 * fVec6[((IOTA - 32) & 127)]) + ((0.0083919700000000003 * fVec6[((IOTA - 29) & 127)]) + ((0.045109500000000004 * fVec6[((IOTA - 24) & 127)]) + ((0.0130615 * fVec6[((IOTA - 23) & 127)]) + ((0.0068680599999999996 * fVec6[((IOTA - 20) & 127)]) + ((0.0158055 * fVec6[((IOTA - 19) & 127)]) + ((0.0196975 * fVec6[((IOTA - 18) & 127)]) + ((0.00022428400000000002 * fVec6[((IOTA - 6) & 127)]) + ((0.00061255200000000004 * fVec6[((IOTA - 5) & 127)]) + ((5.1650600000000005e-06 * fVec27[((IOTA - 122) & 127)]) + ((6.2288800000000013e-05 * fVec27[((IOTA - 118) & 127)]) + ((0.000107544 * fVec27[((IOTA - 117) & 127)]) + ((3.1495500000000004e-05 * fVec27[((IOTA - 116) & 127)]) + ((1.20038e-05 * fVec27[((IOTA - 115) & 127)]) + ((2.5178300000000003e-05 * fVec27[((IOTA - 114) & 127)]) + ((0.000470283 * fVec27[((IOTA - 113) & 127)]) + ((0.00042444499999999997 * fVec27[((IOTA - 112) & 127)]) + ((0.00022263799999999999 * fVec27[((IOTA - 111) & 127)]) + ((4.14666e-05 * fVec27[((IOTA - 109) & 127)]) + ((0.000344395 * fVec27[((IOTA - 108) & 127)]) + ((0.00011064600000000001 * fVec27[((IOTA - 106) & 127)]) + ((0.00030248100000000001 * fVec27[((IOTA - 105) & 127)]) + ((0.00041449600000000004 * fVec27[((IOTA - 104) & 127)]) + ((0.00012015400000000002 * fVec27[((IOTA - 100) & 127)]) + ((0.00051881099999999999 * fVec27[((IOTA - 99) & 127)]) + ((6.7970200000000002e-05 * fVec27[((IOTA - 98) & 127)]) + ((0.00034321600000000003 * fVec27[((IOTA - 95) & 127)]) + ((0.00044988999999999999 * fVec27[((IOTA - 88) & 127)]) + ((0.00256128 * fVec27[((IOTA - 87) & 127)]) + ((0.0023223300000000001 * fVec27[((IOTA - 86) & 127)]) + ((0.00014500400000000001 * fVec27[((IOTA - 83) & 127)]) + ((0.0011457399999999999 * fVec27[((IOTA - 79) & 127)]) + ((0.00095134899999999999 * fVec27[((IOTA - 78) & 127)]) + ((0.00214124 * fVec27[((IOTA - 75) & 127)]) + ((0.0040635300000000001 * fVec27[((IOTA - 74) & 127)]) + ((0.00039275000000000003 * fVec27[((IOTA - 73) & 127)]) + ((0.0021799499999999999 * fVec27[((IOTA - 71) & 127)]) + ((0.0024713999999999999 * fVec27[((IOTA - 70) & 127)]) + ((0.00148032 * fVec27[((IOTA - 69) & 127)]) + ((0.00048183400000000005 * fVec27[((IOTA - 66) & 127)]) + ((0.0020025400000000001 * fVec27[((IOTA - 65) & 127)]) + ((0.0024424899999999999 * fVec27[((IOTA - 64) & 127)]) + ((0.0017324700000000001 * fVec27[((IOTA - 63) & 127)]) + ((0.0044173700000000003 * fVec27[((IOTA - 14) & 127)]) + ((0.047073999999999998 * fVec27[((IOTA - 13) & 127)]) + ((0.050409800000000005 * fVec27[((IOTA - 12) & 127)]) + ((0.0088254800000000001 * fVec27[((IOTA - 11) & 127)]) + ((0.0028401100000000003 * fVec27[((IOTA - 9) & 127)]) + ((0.0010134199999999999 * fVec27[((IOTA - 7) & 127)]) + ((0.00048772500000000005 * fVec27[((IOTA - 5) & 127)]) + ((0.00019671200000000001 * fVec27[((IOTA - 3) & 127)]) + ((1.9656400000000004e-05 * fVec27[((IOTA - 1) & 127)]) + ((1.1230600000000001e-05 * fTemp27) + ((0.054586100000000005 * fVec27[((IOTA - 28) & 127)]) + ((0.0076356100000000001 * fVec27[((IOTA - 27) & 127)]) + ((0.0064172300000000003 * fVec27[((IOTA - 24) & 127)]) + ((0.025168300000000001 * fVec27[((IOTA - 23) & 127)]) + ((0.00083292900000000005 * fVec27[((IOTA - 60) & 127)]) + ((4.4803300000000005e-05 * fVec27[((IOTA - 59) & 127)]) + ((0.000591623 * fVec27[((IOTA - 56) & 127)]) + ((0.0017609399999999999 * fVec27[((IOTA - 47) & 127)]) + ((0.00027506900000000002 * fVec27[((IOTA - 42) & 127)]) + ((0.0020045600000000003 * fVec27[((IOTA - 41) & 127)]) + ((0.00894526 * fVec27[((IOTA - 38) & 127)]) + ((0.0040081499999999994 * fVec27[((IOTA - 37) & 127)]) + ((0.0022934100000000001 * fVec27[((IOTA - 36) & 127)]) + ((0.0078181599999999993 * fVec27[((IOTA - 35) & 127)]) + ((0.0060735200000000007 * fVec27[((IOTA - 34) & 127)]) + ((0.020101600000000001 * fVec27[((IOTA - 33) & 127)]) + ((0.011363099999999999 * fVec27[((IOTA - 32) & 127)]) + ((0.0048202200000000001 * fVec27[((IOTA - 31) & 127)]) + ((0.015268600000000002 * fVec27[((IOTA - 29) & 127)]) + ((1.2052900000000001e-05 * fVec28[((IOTA - 124) & 127)]) + ((7.5001999999999998e-06 * fVec28[((IOTA - 118) & 127)]) + ((3.8559700000000003e-05 * fVec28[((IOTA - 117) & 127)]) + ((0.00012688900000000001 * fVec28[((IOTA - 113) & 127)]) + ((7.1436400000000013e-05 * fVec28[((IOTA - 112) & 127)]) + ((8.3677800000000007e-05 * fVec28[((IOTA - 111) & 127)]) + ((0.000142659 * fVec28[((IOTA - 110) & 127)]) + ((0.00011731000000000001 * fVec28[((IOTA - 107) & 127)]) + ((0.00029102700000000002 * fVec28[((IOTA - 100) & 127)]) + ((0.000736785 * fVec28[((IOTA - 99) & 127)]) + ((0.00088049500000000002 * fVec28[((IOTA - 98) & 127)]) + ((0.00076679700000000005 * fVec28[((IOTA - 94) & 127)]) + ((0.0012207399999999999 * fVec28[((IOTA - 93) & 127)]) + ((0.00193305 * fVec28[((IOTA - 92) & 127)]) + ((0.00063554600000000007 * fVec28[((IOTA - 91) & 127)]) + ((0.00026668900000000002 * fVec28[((IOTA - 89) & 127)]) + ((0.00319579 * fVec28[((IOTA - 88) & 127)]) + ((0.0011806200000000001 * fVec28[((IOTA - 87) & 127)]) + ((0.00029940000000000001 * fVec28[((IOTA - 82) & 127)]) + ((0.0028643700000000002 * fVec28[((IOTA - 81) & 127)]) + ((0.0023513099999999997 * fVec28[((IOTA - 80) & 127)]) + ((0.0017465 * fVec28[((IOTA - 77) & 127)]) + ((0.00021222400000000003 * fVec28[((IOTA - 76) & 127)]) + ((0.00041598900000000002 * fVec28[((IOTA - 73) & 127)]) + ((0.00030018800000000001 * fVec28[((IOTA - 72) & 127)]) + ((0.00152436 * fVec28[((IOTA - 69) & 127)]) + ((0.00128761 * fVec28[((IOTA - 62) & 127)]) + ((0.00817616 * fVec28[((IOTA - 36) & 127)]) + ((0.0060419900000000006 * fVec28[((IOTA - 35) & 127)]) + ((0.0085528800000000006 * fVec28[((IOTA - 34) & 127)]) + ((0.030350199999999997 * fVec28[((IOTA - 27) & 127)]) + ((0.00316892 * fVec28[((IOTA - 24) & 127)]) + ((0.025193300000000002 * fVec28[((IOTA - 23) & 127)]) + ((0.0021023399999999999 * fVec28[((IOTA - 22) & 127)]) + ((0.0073916000000000008 * fVec28[((IOTA - 20) & 127)]) + ((0.017867400000000002 * fVec28[((IOTA - 17) & 127)]) + ((0.010231500000000001 * fVec28[((IOTA - 16) & 127)]) + ((0.00146583 * fVec28[((IOTA - 14) & 127)]) + ((0.0064234600000000006 * fVec28[((IOTA - 13) & 127)]) + ((0.00078510700000000006 * fVec28[((IOTA - 8) & 127)]) + ((0.00035025799999999999 * fVec28[((IOTA - 5) & 127)]) + ((0.00013798200000000001 * fVec28[((IOTA - 4) & 127)]) + ((3.8530500000000007e-05 * fVec28[((IOTA - 1) & 127)]) + ((0.0043865800000000002 * fVec28[((IOTA - 41) & 127)]) + ((0.0046617300000000002 * fVec28[((IOTA - 40) & 127)]) + ((0.0029096 * fVec28[((IOTA - 39) & 127)]) + ((0.0015227400000000001 * fVec28[((IOTA - 60) & 127)]) + ((0.00373734 * fVec28[((IOTA - 59) & 127)]) + ((0.0014280500000000002 * fVec28[((IOTA - 58) & 127)]) + ((0.0026737700000000002 * fVec28[((IOTA - 53) & 127)]) + ((0.0024428499999999999 * fVec28[((IOTA - 50) & 127)]) + ((0.0025408400000000004 * fVec28[((IOTA - 49) & 127)]) + ((0.0022300800000000002 * fVec28[((IOTA - 48) & 127)]) + ((0.00082497000000000007 * fVec28[((IOTA - 47) & 127)]) + ((0.0010773099999999999 * fVec28[((IOTA - 46) & 127)]) + ((6.9417900000000012e-05 * fVec28[((IOTA - 45) & 127)]) + ((1.6178099999999998e-07 * fVec29[((IOTA - 125) & 127)]) + ((1.7421599999999998e-07 * fVec29[((IOTA - 124) & 127)]) + ((0.00021674500000000001 * fVec29[((IOTA - 115) & 127)]) + ((0.00028279200000000003 * fVec29[((IOTA - 114) & 127)]) + ((5.2515800000000003e-05 * fVec29[((IOTA - 113) & 127)]) + ((0.000133249 * fVec29[((IOTA - 112) & 127)]) + ((0.00038273500000000004 * fVec29[((IOTA - 111) & 127)]) + ((0.00043214699999999997 * fVec29[((IOTA - 110) & 127)]) + ((0.00027134800000000003 * fVec29[((IOTA - 109) & 127)]) + ((3.3736500000000005e-05 * fVec29[((IOTA - 107) & 127)]) + ((6.6819399999999999e-05 * fVec29[((IOTA - 106) & 127)]) + ((0.00038405399999999999 * fVec29[((IOTA - 103) & 127)]) + ((0.0010818799999999999 * fVec29[((IOTA - 102) & 127)]) + ((0.000419827 * fVec29[((IOTA - 101) & 127)]) + ((0.000472497 * fVec29[((IOTA - 100) & 127)]) + ((0.00040792200000000007 * fVec29[((IOTA - 99) & 127)]) + ((0.0017046100000000001 * fVec29[((IOTA - 91) & 127)]) + ((0.0017854000000000001 * fVec29[((IOTA - 90) & 127)]) + ((0.000146465 * fVec29[((IOTA - 89) & 127)]) + ((0.0011246299999999999 * fVec29[((IOTA - 88) & 127)]) + ((0.000121433 * fVec29[((IOTA - 85) & 127)]) + ((0.0015572399999999999 * fVec29[((IOTA - 84) & 127)]) + ((0.00286542 * fVec29[((IOTA - 81) & 127)]) + ((0.0035030399999999998 * fVec29[((IOTA - 80) & 127)]) + ((0.0013357099999999999 * fVec29[((IOTA - 79) & 127)]) + ((0.0028925200000000004 * fVec29[((IOTA - 71) & 127)]) + ((0.00488274 * fVec29[((IOTA - 70) & 127)]) + ((0.0016347499999999999 * fVec29[((IOTA - 69) & 127)]) + ((0.0014653400000000001 * fVec29[((IOTA - 68) & 127)]) + ((0.0016001099999999999 * fVec29[((IOTA - 67) & 127)]) + ((2.4437900000000002e-05 * fVec29[((IOTA - 63) & 127)]) + ((0.00012724599999999999 * fVec29[((IOTA - 62) & 127)]) + ((0.019400900000000002 * fVec29[((IOTA - 37) & 127)]) + ((0.0108342 * fVec29[((IOTA - 36) & 127)]) + ((0.021263200000000003 * fVec29[((IOTA - 34) & 127)]) + ((0.020498300000000001 * fVec29[((IOTA - 33) & 127)]) + ((0.0187685 * fVec29[((IOTA - 32) & 127)]) + ((0.0086318699999999998 * fVec29[((IOTA - 31) & 127)]) + ((0.0119454 * fVec29[((IOTA - 30) & 127)]) + ((0.024111899999999999 * fVec29[((IOTA - 29) & 127)]) + ((0.0154331 * fVec29[((IOTA - 28) & 127)]) + ((0.011326600000000001 * fVec29[((IOTA - 27) & 127)]) + ((0.0041025300000000001 * fVec29[((IOTA - 26) & 127)]) + ((0.035046500000000001 * fVec29[((IOTA - 25) & 127)]) + ((0.0109835 * fVec29[((IOTA - 24) & 127)]) + ((0.008624660000000001 * fVec29[((IOTA - 21) & 127)]) + ((0.0030574400000000002 * fVec29[((IOTA - 17) & 127)]) + ((0.016297900000000001 * fVec29[((IOTA - 14) & 127)]) + ((0.053418799999999995 * fVec29[((IOTA - 13) & 127)]) + ((0.071327800000000011 * fVec29[((IOTA - 12) & 127)]) + ((0.0074569299999999996 * fVec29[((IOTA - 11) & 127)]) + ((0.00196452 * fVec29[((IOTA - 9) & 127)]) + ((1.4284499999999999e-06 * fVec29[((IOTA - 7) & 127)]) + ((0.00065664800000000002 * fVec29[((IOTA - 5) & 127)]) + ((0.00033454700000000003 * fVec29[((IOTA - 3) & 127)]) + ((4.19701e-05 * fVec29[((IOTA - 1) & 127)]) + ((1.6075699999999999e-05 * fTemp29) + ((0.0032972399999999999 * fVec29[((IOTA - 39) & 127)]) + ((0.010154000000000002 * fVec29[((IOTA - 38) & 127)]) + ((0.00045853400000000008 * fVec29[((IOTA - 58) & 127)]) + ((0.0015582 * fVec29[((IOTA - 57) & 127)]) + ((0.0015001299999999999 * fVec29[((IOTA - 56) & 127)]) + ((0.0012102200000000001 * fVec29[((IOTA - 55) & 127)]) + ((2.1103299999999999e-06 * fVec30[((IOTA - 125) & 127)]) + ((5.5217400000000003e-06 * fVec30[((IOTA - 124) & 127)]) + ((3.11789e-06 * fVec30[((IOTA - 123) & 127)]) + ((9.0368300000000007e-05 * fVec30[((IOTA - 119) & 127)]) + ((0.00011532 * fVec30[((IOTA - 118) & 127)]) + ((1.9649999999999998e-06 * fVec30[((IOTA - 116) & 127)]) + ((0.00021442500000000002 * fVec30[((IOTA - 115) & 127)]) + ((0.00030905200000000004 * fVec30[((IOTA - 114) & 127)]) + ((4.7581900000000006e-05 * fVec30[((IOTA - 113) & 127)]) + ((0.00016311100000000002 * fVec30[((IOTA - 112) & 127)]) + ((0.00016924900000000001 * fVec30[((IOTA - 111) & 127)]) + ((3.0118399999999995e-06 * fVec30[((IOTA - 109) & 127)]) + ((0.00014172800000000001 * (fVec32[((IOTA - 109) & 127)] - fVec31[((IOTA - 78) & 127)])) + ((0.00026133000000000005 * fVec30[((IOTA - 73) & 127)]) + ((0.00034291200000000001 * fVec30[((IOTA - 107) & 127)]) + ((0.00026214100000000002 * fVec30[((IOTA - 106) & 127)]) + ((0.00023320700000000001 * fVec30[((IOTA - 105) & 127)]) + ((0.00041387999999999999 * fVec30[((IOTA - 102) & 127)]) + ((0.000138245 * fVec30[((IOTA - 101) & 127)]) + ((0.000478309 * fVec30[((IOTA - 100) & 127)]) + ((0.00053920599999999997 * fVec30[((IOTA - 108) & 127)]) + ((0.00091847499999999998 * fVec30[((IOTA - 99) & 127)]) + ((0.0013005599999999999 * fVec30[((IOTA - 98) & 127)]) + ((0.00113754 * fVec30[((IOTA - 97) & 127)]) + ((0.0026714199999999999 * fVec30[((IOTA - 93) & 127)]) + ((0.0021342599999999998 * fVec30[((IOTA - 92) & 127)]) + ((0.00024966300000000001 * fVec30[((IOTA - 90) & 127)]) + ((0.0023507699999999999 * fVec30[((IOTA - 89) & 127)]) + ((0.0046170200000000003 * fVec30[((IOTA - 88) & 127)]) + ((0.0013482500000000001 * fVec30[((IOTA - 87) & 127)]) + ((0.0010940099999999999 * fVec30[((IOTA - 85) & 127)]) + ((0.0017591500000000001 * fVec30[((IOTA - 84) & 127)]) + ((0.00040582000000000004 * fVec30[((IOTA - 83) & 127)]) + ((0.00225807 * fVec30[((IOTA - 82) & 127)]) + ((0.00237535 * fVec30[((IOTA - 81) & 127)]) + ((0.000120611 * fVec30[((IOTA - 80) & 127)]) + ((0.00060378299999999999 * fVec30[((IOTA - 78) & 127)]) + ((0.00074305500000000006 * fVec30[((IOTA - 5) & 127)]) + ((0.00070165199999999998 * fVec30[((IOTA - 3) & 127)]) + ((7.2115300000000004e-05 * fVec30[((IOTA - 1) & 127)]) + ((1.68655e-05 * fTemp30) + ((0.0020077300000000001 * fVec30[((IOTA - 63) & 127)]) + ((0.0032089100000000001 * fVec30[((IOTA - 62) & 127)]) + ((0.0010079800000000001 * fVec30[((IOTA - 61) & 127)]) + ((0.00063087099999999997 * fVec30[((IOTA - 60) & 127)]) + ((0.0044288800000000005 * fVec30[((IOTA - 59) & 127)]) + ((0.0047678900000000003 * fVec30[((IOTA - 58) & 127)]) + ((0.0024688500000000003 * fVec30[((IOTA - 57) & 127)]) + ((0.00277838 * fVec30[((IOTA - 56) & 127)]) + ((0.0075612199999999996 * fVec30[((IOTA - 55) & 127)]) + ((0.00761051 * fVec30[((IOTA - 54) & 127)]) + ((0.0018776900000000002 * fVec30[((IOTA - 52) & 127)]) + ((0.0082384199999999998 * fVec30[((IOTA - 51) & 127)]) + ((0.0050166199999999994 * fVec30[((IOTA - 50) & 127)]) + ((0.0032369600000000001 * fVec30[((IOTA - 49) & 127)]) + ((0.0040625900000000005 * fVec30[((IOTA - 48) & 127)]) + ((0.011856999999999999 * fVec30[((IOTA - 47) & 127)]) + ((0.0091953899999999995 * fVec30[((IOTA - 46) & 127)]) + ((0.0061361499999999999 * fVec30[((IOTA - 45) & 127)]) + ((0.015667299999999999 * fVec30[((IOTA - 44) & 127)]) + ((0.0121152 * fVec30[((IOTA - 43) & 127)]) + ((0.0102805 * fVec30[((IOTA - 41) & 127)]) + ((0.0249734 * fVec30[((IOTA - 40) & 127)]) + ((0.0028042699999999998 * fVec30[((IOTA - 39) & 127)]) + ((0.0112762 * fVec30[((IOTA - 37) & 127)]) + ((0.0070063399999999998 * fVec30[((IOTA - 36) & 127)]) + ((0.0037140800000000002 * fVec30[((IOTA - 35) & 127)]) + ((0.0077227400000000005 * fVec30[((IOTA - 32) & 127)]) + ((0.0031788599999999999 * fVec30[((IOTA - 31) & 127)]) + ((0.0055445599999999996 * fVec30[((IOTA - 25) & 127)]) + ((0.014456700000000001 * fVec30[((IOTA - 21) & 127)]) + ((0.043969699999999994 * fVec30[((IOTA - 17) & 127)]) + ((0.010103500000000001 * fVec30[((IOTA - 16) & 127)]) + ((0.026084999999999997 * fVec30[((IOTA - 15) & 127)]) + ((0.040577500000000002 * fVec30[((IOTA - 14) & 127)]) + ((0.0703236 * fVec30[((IOTA - 13) & 127)]) + ((0.086424600000000004 * fVec30[((IOTA - 12) & 127)]) + ((0.00526349 * fVec30[((IOTA - 11) & 127)]) + ((0.0021171000000000002 * fVec30[((IOTA - 9) & 127)]) + ((0.00027211800000000001 * fVec30[((IOTA - 7) & 127)]) + ((6.8184199999999995e-06 * fVec31[((IOTA - 124) & 127)]) + ((9.6015999999999997e-06 * fVec31[((IOTA - 123) & 127)]) + ((2.6161300000000003e-05 * fVec31[((IOTA - 122) & 127)]) + ((7.66841e-06 * fVec31[((IOTA - 120) & 127)]) + ((9.9956200000000017e-05 * fVec31[((IOTA - 119) & 127)]) + ((9.8288800000000007e-05 * fVec31[((IOTA - 118) & 127)]) + ((0.00016569499999999999 * fVec31[((IOTA - 115) & 127)]) + ((0.000131304 * fVec31[((IOTA - 114) & 127)]) + ((7.4421400000000012e-05 * fVec31[((IOTA - 113) & 127)]) + ((9.0750500000000005e-05 * fVec31[((IOTA - 109) & 127)]) + ((0.00081881900000000014 * fVec31[((IOTA - 96) & 127)]) + ((0.0015964400000000002 * fVec31[((IOTA - 95) & 127)]) + ((3.5872199999999999e-05 * fVec31[((IOTA - 92) & 127)]) + ((0.0020068299999999998 * fVec31[((IOTA - 91) & 127)]) + ((0.00050415000000000008 * fVec31[((IOTA - 90) & 127)]) + ((0.00041316100000000005 * fVec31[((IOTA - 89) & 127)]) + ((0.0011488700000000002 * fVec31[((IOTA - 88) & 127)]) + ((0.0011271300000000001 * fVec31[((IOTA - 87) & 127)]) + ((0.0028610799999999998 * fVec31[((IOTA - 84) & 127)]) + ((0.00119961 * fVec31[((IOTA - 83) & 127)]) + ((0.0011123800000000001 * fVec31[((IOTA - 82) & 127)]) + ((0.0018691199999999999 * fVec31[((IOTA - 81) & 127)]) + ((0.0023870700000000003 * fVec31[((IOTA - 80) & 127)]) + ((0.0014690600000000001 * fVec31[((IOTA - 79) & 127)]) + ((0.00020293100000000003 * fVec31[((IOTA - 75) & 127)]) + ((0.00042256999999999999 * fVec31[((IOTA - 74) & 127)]) + ((4.8196899999999999e-05 * fVec31[((IOTA - 73) & 127)]) + ((0.00081876599999999996 * fVec31[((IOTA - 69) & 127)]) + ((0.00116132 * fVec31[((IOTA - 65) & 127)]) + ((0.0012919000000000001 * fVec31[((IOTA - 60) & 127)]) + ((0.0018522 * fVec31[((IOTA - 53) & 127)]) + ((0.0040265300000000004 * fVec31[((IOTA - 52) & 127)]) + ((0.00164123 * fVec31[((IOTA - 49) & 127)]) + ((0.0035543000000000003 * fVec31[((IOTA - 48) & 127)]) + ((0.0019447000000000002 * fVec31[((IOTA - 47) & 127)]) + ((0.0045421799999999998 * fVec31[((IOTA - 46) & 127)]) + ((0.0032057800000000001 * fVec31[((IOTA - 45) & 127)]) + ((0.0098560599999999998 * fVec31[((IOTA - 43) & 127)]) + ((0.00252045 * fVec31[((IOTA - 13) & 127)]) + ((0.00052853700000000004 * fVec31[((IOTA - 8) & 127)]) + ((0.00017706000000000002 * fVec31[((IOTA - 5) & 127)]) + ((0.00017067000000000002 * fVec31[((IOTA - 4) & 127)]) + ((2.8269799999999997e-06 * fVec31[((IOTA - 1) & 127)]) + ((0.00574575 * fVec31[((IOTA - 22) & 127)]) + ((0.0048227900000000004 * fVec31[((IOTA - 21) & 127)]) + ((0.0053663600000000006 * fVec31[((IOTA - 20) & 127)]) + ((0.0110708 * fVec31[((IOTA - 17) & 127)]) + ((0.0055212400000000002 * fVec31[((IOTA - 42) & 127)]) + ((0.0039102499999999997 * fVec31[((IOTA - 40) & 127)]) + ((0.0014029000000000001 * fVec31[((IOTA - 39) & 127)]) + ((0.00081971100000000009 * fVec31[((IOTA - 37) & 127)]) + ((0.015326500000000002 * fVec31[((IOTA - 34) & 127)]) + ((0.0039000900000000002 * fVec31[((IOTA - 33) & 127)]) + ((0.0107983 * fVec31[((IOTA - 30) & 127)]) + ((0.0016720200000000002 * fVec31[((IOTA - 28) & 127)]) + ((0.0115642 * fVec31[((IOTA - 27) & 127)]) + ((0.0083424600000000012 * fVec31[((IOTA - 24) & 127)]) + ((0.0016058699999999999 * fVec31[((IOTA - 23) & 127)]) + ((3.5305499999999996e-06 * fVec4[((IOTA - 125) & 127)]) + ((4.1155299999999994e-06 * fVec4[((IOTA - 124) & 127)]) + ((0.0074311999999999998 * fVec31[((IOTA - 16) & 127)]) + ((8.4151000000000001e-06 * fVec4[((IOTA - 123) & 127)]) + ((2.8368800000000002e-05 * fVec4[((IOTA - 122) & 127)]) + ((6.1171800000000003e-05 * fVec4[((IOTA - 121) & 127)]) + ((4.5063100000000006e-05 * fVec4[((IOTA - 120) & 127)]) + ((0.00013187999999999999 * fVec4[((IOTA - 117) & 127)]) + ((9.0214000000000001e-05 * fVec4[((IOTA - 116) & 127)]) + ((4.5684500000000006e-05 * fVec4[((IOTA - 115) & 127)]) + ((0.00037238400000000002 * fVec31[((IOTA - 14) & 127)]) + ((0.00010922300000000001 * fVec4[((IOTA - 114) & 127)]) + ((0.00012787900000000001 * fVec4[((IOTA - 113) & 127)]) + ((0.00010810400000000001 * fVec4[((IOTA - 112) & 127)]) + ((8.4602100000000008e-05 * fVec4[((IOTA - 111) & 127)]) + ((0.00014129499999999999 * fVec4[((IOTA - 103) & 127)]) + ((0.0011713800000000001 * fVec4[((IOTA - 96) & 127)]) + ((0.00048376700000000002 * fVec4[((IOTA - 95) & 127)]) + ((0.00040982500000000005 * fVec4[((IOTA - 89) & 127)]) + ((0.00192194 * fVec4[((IOTA - 86) & 127)]) + ((0.00102436 * fVec4[((IOTA - 85) & 127)]) + ((0.00100778 * fVec4[((IOTA - 81) & 127)]) + ((0.00035581800000000004 * fVec4[((IOTA - 80) & 127)]) + ((0.00108387 * fVec4[((IOTA - 78) & 127)]) + ((0.0044921400000000004 * fVec4[((IOTA - 73) & 127)]) + ((0.00086068200000000009 * fVec4[((IOTA - 69) & 127)]) + ((0.0026953699999999999 * fVec4[((IOTA - 68) & 127)]) + ((0.00069267700000000005 * fVec4[((IOTA - 67) & 127)]) + ((0.0014122200000000001 * fVec4[((IOTA - 62) & 127)]) + ((0.00059297400000000002 * fVec4[((IOTA - 61) & 127)]) + ((0.00053443700000000002 * fVec4[((IOTA - 59) & 127)]) + ((0.0013940900000000002 * fVec4[((IOTA - 58) & 127)]) + ((0.0012833600000000001 * fVec4[((IOTA - 57) & 127)]) + ((0.0031110899999999999 * fVec4[((IOTA - 56) & 127)]) + ((0.0050713199999999998 * fVec4[((IOTA - 55) & 127)]) + ((0.0050443700000000003 * fVec4[((IOTA - 54) & 127)]) + ((0.00419002 * fVec4[((IOTA - 53) & 127)]) + ((0.0032877399999999999 * fVec4[((IOTA - 51) & 127)]) + ((0.00909628 * fVec4[((IOTA - 50) & 127)]) + ((0.0036924600000000003 * fVec4[((IOTA - 49) & 127)]) + ((0.0046017100000000002 * fVec4[((IOTA - 48) & 127)]) + ((0.0073180300000000005 * fVec4[((IOTA - 47) & 127)]) + ((0.0070144200000000004 * fVec4[((IOTA - 46) & 127)]) + ((0.0020962000000000003 * fVec4[((IOTA - 45) & 127)]) + ((0.0052343400000000005 * fVec4[((IOTA - 44) & 127)]) + ((0.0071723899999999998 * fVec4[((IOTA - 43) & 127)]) + ((0.0036162899999999999 * fVec4[((IOTA - 42) & 127)]) + ((0.010498400000000001 * fVec4[((IOTA - 41) & 127)]) + ((0.0021260799999999998 * fVec4[((IOTA - 40) & 127)]) + ((0.0065524800000000003 * fVec4[((IOTA - 38) & 127)]) + ((0.011496599999999999 * fVec4[((IOTA - 35) & 127)]) + ((0.0010427100000000001 * fVec4[((IOTA - 34) & 127)]) + ((0.0092546800000000012 * fVec4[((IOTA - 31) & 127)]) + ((0.0026388100000000001 * fVec4[((IOTA - 27) & 127)]) + ((0.0128167 * fVec4[((IOTA - 23) & 127)]) + ((0.011590800000000002 * fVec4[((IOTA - 17) & 127)]) + ((0.0038800599999999998 * fVec4[((IOTA - 16) & 127)]) + ((0.022263399999999999 * fVec4[((IOTA - 15) & 127)]) + ((0.020153300000000002 * fVec4[((IOTA - 14) & 127)]) + ((0.042437800000000005 * fVec4[((IOTA - 13) & 127)]) + ((0.047133599999999998 * fVec4[((IOTA - 12) & 127)]) + ((0.00567696 * fVec4[((IOTA - 11) & 127)]) + ((0.00143681 * fVec4[((IOTA - 9) & 127)]) + ((0.00086101400000000001 * fVec4[((IOTA - 7) & 127)]) + ((0.00058492199999999998 * fVec4[((IOTA - 5) & 127)]) + ((6.7829099999999997e-06 * fVec4[((IOTA - 4) & 127)]) + ((0.00025529600000000002 * fVec4[((IOTA - 3) & 127)]) + ((2.9285600000000003e-05 * fVec4[((IOTA - 1) & 127)]) + ((3.8661599999999993e-06 * fTemp4) + ((0.00355741 * fVec4[((IOTA - 77) & 127)]) + ((0.00203951 * fVec4[((IOTA - 76) & 127)]) + ((1.70851e-05 * fVec0[((IOTA - 122) & 127)]) + ((3.0657300000000002e-05 * fVec0[((IOTA - 121) & 127)]) + ((0.00099792900000000005 * fVec4[((IOTA - 74) & 127)]) + ((5.3340699999999993e-07 * fVec0[((IOTA - 120) & 127)]) + ((1.03751e-05 * fVec0[((IOTA - 118) & 127)]) + ((8.3314900000000018e-05 * fVec0[((IOTA - 117) & 127)]) + ((9.1851000000000012e-05 * fVec0[((IOTA - 112) & 127)]) + ((2.7205700000000003e-05 * fVec0[((IOTA - 111) & 127)]) + ((0.00152143 * fVec0[((IOTA - 82) & 127)]) + ((0.0032921200000000004 * fVec0[((IOTA - 81) & 127)]) + ((0.00193753 * fVec0[((IOTA - 80) & 127)]) + ((0.00062551900000000005 * fVec0[((IOTA - 79) & 127)]) + ((0.00096127300000000012 * fVec0[((IOTA - 70) & 127)]) + ((0.0042903999999999998 * fVec0[((IOTA - 69) & 127)]) + ((0.0037726500000000002 * fVec0[((IOTA - 68) & 127)]) + ((0.00041918000000000001 * fVec0[((IOTA - 66) & 127)]) + ((0.00047510500000000003 * fVec0[((IOTA - 63) & 127)]) + ((0.0017495700000000002 * fVec0[((IOTA - 62) & 127)]) + ((0.0013881099999999999 * fVec0[((IOTA - 61) & 127)]) + ((0.00142376 * fVec0[((IOTA - 59) & 127)]) + ((0.0013234399999999999 * fVec0[((IOTA - 58) & 127)]) + ((0.0023363800000000003 * fVec0[((IOTA - 57) & 127)]) + ((0.0047624399999999997 * fVec0[((IOTA - 56) & 127)]) + ((0.00035963800000000001 * fVec0[((IOTA - 55) & 127)]) + ((0.0014325799999999999 * fVec0[((IOTA - 53) & 127)]) + ((0.0035146700000000001 * fVec0[((IOTA - 50) & 127)]) + ((0.00013482199999999999 * fVec0[((IOTA - 46) & 127)]) + ((0.0031359700000000001 * fVec0[((IOTA - 44) & 127)]) + ((0.0033774600000000001 * fVec0[((IOTA - 43) & 127)]) + ((0.00043131800000000003 * fVec0[((IOTA - 41) & 127)]) + ((0.00581921 * fVec0[((IOTA - 27) & 127)]) + ((0.00064315100000000001 * fVec0[((IOTA - 26) & 127)]) + ((0.016502200000000002 * fVec0[((IOTA - 25) & 127)]) + ((0.026153100000000002 * fVec0[((IOTA - 19) & 127)]) + ((0.015518799999999999 * fVec0[((IOTA - 18) & 127)]) + ((0.011748099999999999 * fVec0[((IOTA - 16) & 127)]) + ((0.024044800000000002 * fVec0[((IOTA - 15) & 127)]) + ((0.011073200000000002 * fVec0[((IOTA - 12) & 127)]) + ((0.00016208700000000002 * fVec0[((IOTA - 11) & 127)]) + ((0.00023927800000000002 * fVec0[((IOTA - 9) & 127)]) + ((0.00099840900000000002 * fVec0[((IOTA - 7) & 127)]) + ((0.00026075800000000004 * fVec0[((IOTA - 3) & 127)]) + ((0.0095376600000000016 * fVec0[((IOTA - 34) & 127)]) + ((0.00354222 * fVec0[((IOTA - 31) & 127)]) + ((9.0296599999999999e-06 * fVec32[((IOTA - 122) & 127)]) + ((1.9893500000000002e-05 * fVec32[((IOTA - 118) & 127)]) + ((3.7877500000000005e-05 * fVec32[((IOTA - 115) & 127)]) + ((0.00027007400000000003 * fVec32[((IOTA - 103) & 127)]) + ((0.00044415800000000005 * fVec32[((IOTA - 102) & 127)]) + ((0.00031515600000000003 * fVec32[((IOTA - 100) & 127)]) + ((0.00068420899999999997 * fVec32[((IOTA - 99) & 127)]) + ((0.00049268100000000002 * fVec32[((IOTA - 96) & 127)]) + ((0.0099954400000000013 * fVec0[((IOTA - 30) & 127)]) + ((0.0015305800000000001 * fVec32[((IOTA - 91) & 127)]) + ((0.0017284399999999999 * fVec32[((IOTA - 90) & 127)]) + ((0.00127253 * fVec32[((IOTA - 89) & 127)]) + ((0.00166752 * fVec32[((IOTA - 88) & 127)]) + ((0.00033490500000000003 * fVec32[((IOTA - 85) & 127)]) + ((0.0011273899999999998 * fVec32[((IOTA - 84) & 127)]) + ((6.2119200000000007e-05 * fVec32[((IOTA - 82) & 127)]) + ((0.0017261400000000001 * fVec32[((IOTA - 81) & 127)]) + ((0.00048162000000000004 * fVec32[((IOTA - 80) & 127)]) + ((0.00071563500000000006 * fVec32[((IOTA - 79) & 127)]) + ((1.14088e-05 * fVec32[((IOTA - 77) & 127)]) + ((0.0014551499999999999 * fVec32[((IOTA - 76) & 127)]) + ((0.00078290800000000002 * fVec32[((IOTA - 73) & 127)]) + ((0.0013603899999999999 * fVec32[((IOTA - 72) & 127)]) + ((0.00076972400000000006 * fVec32[((IOTA - 71) & 127)]) + ((0.0011577500000000001 * fVec32[((IOTA - 70) & 127)]) + ((0.0027559100000000003 * fVec32[((IOTA - 69) & 127)]) + ((0.0011045300000000001 * fVec32[((IOTA - 65) & 127)]) + ((0.0019003900000000001 * fVec32[((IOTA - 64) & 127)]) + ((5.8659000000000002e-05 * fVec32[((IOTA - 63) & 127)]) + ((0.00034302399999999999 * fVec32[((IOTA - 60) & 127)]) + ((0.0015042599999999999 * fVec32[((IOTA - 55) & 127)]) + ((0.0038506399999999998 * fVec32[((IOTA - 54) & 127)]) + ((0.00280679 * fVec32[((IOTA - 53) & 127)]) + ((0.00191281 * fVec32[((IOTA - 51) & 127)]) + ((0.0030454200000000001 * fVec32[((IOTA - 47) & 127)]) + ((0.0010344 * fVec32[((IOTA - 46) & 127)]) + ((0.0021753000000000002 * fVec32[((IOTA - 43) & 127)]) + ((0.00241033 * fVec32[((IOTA - 41) & 127)]) + ((0.0054447699999999998 * fVec32[((IOTA - 34) & 127)]) + ((0.0027451799999999998 * fVec32[((IOTA - 33) & 127)]) + ((0.00192986 * fVec32[((IOTA - 32) & 127)]) + ((0.0050891900000000004 * fVec32[((IOTA - 29) & 127)]) + ((0.010143899999999999 * fVec32[((IOTA - 28) & 127)]) + ((0.0039649200000000002 * fVec32[((IOTA - 27) & 127)]) + ((0.014927200000000002 * fVec32[((IOTA - 24) & 127)]) + ((0.010792999999999999 * fVec32[((IOTA - 23) & 127)]) + ((0.008510160000000001 * fVec32[((IOTA - 22) & 127)]) + ((0.0223719 * fVec32[((IOTA - 21) & 127)]) + ((0.0123166 * fVec32[((IOTA - 20) & 127)]) + ((0.017947399999999999 * fVec32[((IOTA - 19) & 127)]) + ((0.0073694100000000007 * fVec32[((IOTA - 14) & 127)]) + ((0.0142655 * fVec32[((IOTA - 12) & 127)]) + ((0.0067548000000000009 * fVec32[((IOTA - 11) & 127)]) + ((0.0025108100000000005 * fVec32[((IOTA - 9) & 127)]) + ((0.00235191 * fVec32[((IOTA - 7) & 127)]) + ((0.00091979399999999993 * fVec32[((IOTA - 5) & 127)]) + (((6.9716599999999994e-06 * fVec33[((IOTA - 124) & 127)]) + ((9.8485200000000004e-06 * fVec33[((IOTA - 118) & 127)]) + ((0.00010357900000000001 * fVec33[((IOTA - 114) & 127)]) + ((0.00042897299999999997 * fVec33[((IOTA - 113) & 127)]) + ((0.00029024100000000006 * fVec33[((IOTA - 112) & 127)]) + ((9.8297200000000012e-05 * fVec33[((IOTA - 111) & 127)]) + ((0.00020804999999999999 * fVec33[((IOTA - 110) & 127)]) + ((0.00054109500000000001 * fVec33[((IOTA - 109) & 127)]) + ((0.00083962700000000002 * fVec33[((IOTA - 108) & 127)]) + ((0.00056389100000000007 * fVec33[((IOTA - 107) & 127)]) + ((0.00051816800000000006 * fVec33[((IOTA - 106) & 127)]) + ((0.00065456900000000003 * fVec33[((IOTA - 105) & 127)]) + ((0.00088825400000000011 * fVec33[((IOTA - 104) & 127)]) + ((0.000446193 * fVec33[((IOTA - 103) & 127)]) + ((0.00071199100000000003 * fVec33[((IOTA - 102) & 127)]) + ((0.0012468500000000001 * fVec33[((IOTA - 101) & 127)]) + ((0.0012435300000000001 * fVec33[((IOTA - 100) & 127)]) + ((0.0010388900000000002 * fVec33[((IOTA - 99) & 127)]) + ((0.00170268 * fVec33[((IOTA - 98) & 127)]) + ((0.00126004 * fVec33[((IOTA - 97) & 127)]) + ((0.0013548899999999999 * fVec33[((IOTA - 93) & 127)]) + ((0.0020163799999999999 * fVec33[((IOTA - 92) & 127)]) + ((0.0010302600000000001 * fVec33[((IOTA - 89) & 127)]) + ((0.00142103 * fVec33[((IOTA - 88) & 127)]) + ((0.0020040399999999999 * fVec33[((IOTA - 82) & 127)]) + ((0.0030592000000000002 * fVec33[((IOTA - 81) & 127)]) + ((0.00082976100000000015 * fVec33[((IOTA - 80) & 127)]) + ((0.00083032800000000008 * fVec33[((IOTA - 79) & 127)]) + ((0.00146794 * fVec33[((IOTA - 78) & 127)]) + ((0.0029912300000000001 * fVec33[((IOTA - 77) & 127)]) + ((0.0019008400000000002 * fVec33[((IOTA - 76) & 127)]) + ((0.00032308700000000001 * fVec33[((IOTA - 75) & 127)]) + ((0.00121188 * fVec33[((IOTA - 74) & 127)]) + ((0.0015286800000000001 * fVec33[((IOTA - 73) & 127)]) + ((0.0016313200000000001 * fVec33[((IOTA - 72) & 127)]) + ((0.0019843199999999999 * fVec33[((IOTA - 71) & 127)]) + ((0.0031219500000000001 * fVec33[((IOTA - 70) & 127)]) + ((0.0017147500000000001 * fVec33[((IOTA - 69) & 127)]) + ((4.5241600000000004e-05 * fVec33[((IOTA - 68) & 127)]) + ((0.00193403 * fVec33[((IOTA - 67) & 127)]) + ((0.00103439 * fVec33[((IOTA - 66) & 127)]) + ((0.00025587599999999999 * fVec33[((IOTA - 61) & 127)]) + ((0.0014905299999999999 * fVec33[((IOTA - 60) & 127)]) + ((0.000502175 * fVec33[((IOTA - 59) & 127)]) + ((0.00055048599999999999 * fVec33[((IOTA - 58) & 127)]) + ((0.00049892100000000004 * fVec33[((IOTA - 50) & 127)]) + ((0.0029968600000000001 * fVec33[((IOTA - 47) & 127)]) + ((0.0024887899999999998 * fVec33[((IOTA - 46) & 127)]) + ((0.0030320900000000003 * fVec33[((IOTA - 41) & 127)]) + ((0.0076587399999999998 * fVec33[((IOTA - 40) & 127)]) + ((0.010064699999999999 * fVec33[((IOTA - 35) & 127)]) + ((0.030136699999999999 * fVec33[((IOTA - 32) & 127)]) + ((0.017341200000000001 * fVec33[((IOTA - 31) & 127)]) + ((0.0053095800000000004 * fVec33[((IOTA - 14) & 127)]) + ((0.0072171800000000001 * fVec33[((IOTA - 12) & 127)]) + ((0.0030320200000000003 * fVec33[((IOTA - 11) & 127)]) + ((0.00131485 * fVec33[((IOTA - 9) & 127)]) + ((0.0011081700000000001 * fVec33[((IOTA - 7) & 127)]) + ((0.00036208399999999998 * fVec33[((IOTA - 5) & 127)]) + ((0.00017773600000000001 * fVec33[((IOTA - 3) & 127)]) + ((0.039170099999999999 * fVec33[((IOTA - 28) & 127)]) + ((0.00031563800000000003 * fVec33[((IOTA - 27) & 127)]) + ((0.00069887100000000011 * fVec33[((IOTA - 25) & 127)]) + ((0.025458500000000002 * fVec33[((IOTA - 24) & 127)]) + ((0.0120184 * fVec33[((IOTA - 21) & 127)]) + ((6.574880000000001e-05 * fVec34[((IOTA - 115) & 127)]) + ((0.011691100000000001 * fVec33[((IOTA - 19) & 127)]) + ((7.5893800000000015e-05 * fVec34[((IOTA - 114) & 127)]) + ((0.00055035400000000008 * fVec34[((IOTA - 113) & 127)]) + ((0.00054230400000000007 * fVec34[((IOTA - 112) & 127)]) + ((0.00038862600000000004 * fVec34[((IOTA - 111) & 127)]) + ((0.00038355300000000002 * fVec34[((IOTA - 110) & 127)]) + ((0.0010789999999999999 * fVec34[((IOTA - 109) & 127)]) + ((0.00127535 * fVec34[((IOTA - 108) & 127)]) + ((0.00026040700000000004 * fVec34[((IOTA - 107) & 127)]) + ((0.00064190699999999994 * fVec34[((IOTA - 106) & 127)]) + ((0.0012643700000000001 * fVec34[((IOTA - 105) & 127)]) + ((0.0014951399999999998 * fVec34[((IOTA - 104) & 127)]) + ((0.00096466700000000011 * fVec34[((IOTA - 103) & 127)]) + ((0.00062200899999999997 * fVec34[((IOTA - 102) & 127)]) + ((0.0013151 * fVec34[((IOTA - 101) & 127)]) + ((0.00155276 * fVec34[((IOTA - 100) & 127)]) + ((0.00147963 * fVec34[((IOTA - 99) & 127)]) + ((0.0012132899999999999 * fVec34[((IOTA - 96) & 127)]) + ((0.0010497099999999999 * fVec34[((IOTA - 95) & 127)]) + ((5.4447799999999994e-06 * fVec34[((IOTA - 91) & 127)]) + ((0.00060830200000000002 * fVec34[((IOTA - 82) & 127)]) + ((0.00073753600000000001 * fVec34[((IOTA - 81) & 127)]) + ((4.1098800000000007e-05 * fVec34[((IOTA - 76) & 127)]) + ((0.00031511100000000003 * fVec34[((IOTA - 74) & 127)]) + ((0.0011385200000000001 * fVec34[((IOTA - 73) & 127)]) + ((0.0023925600000000002 * fVec34[((IOTA - 72) & 127)]) + ((0.00191902 * fVec34[((IOTA - 71) & 127)]) + ((0.00073584900000000001 * fVec34[((IOTA - 70) & 127)]) + ((0.0033698500000000002 * fVec34[((IOTA - 69) & 127)]) + ((0.0046562499999999998 * fVec34[((IOTA - 68) & 127)]) + ((0.0026088700000000001 * fVec34[((IOTA - 67) & 127)]) + ((0.0015381499999999998 * fVec34[((IOTA - 66) & 127)]) + ((0.00177024 * fVec34[((IOTA - 65) & 127)]) + ((0.0027169400000000002 * fVec34[((IOTA - 64) & 127)]) + ((0.0011334100000000001 * fVec34[((IOTA - 61) & 127)]) + ((0.0012374899999999999 * fVec34[((IOTA - 57) & 127)]) + ((0.00350462 * fVec34[((IOTA - 56) & 127)]) + ((0.00029472900000000003 * fVec34[((IOTA - 55) & 127)]) + ((0.00161133 * fVec34[((IOTA - 49) & 127)]) + ((0.0043256300000000004 * fVec34[((IOTA - 43) & 127)]) + ((0.0039263700000000002 * fVec34[((IOTA - 38) & 127)]) + ((0.0193136 * fVec34[((IOTA - 37) & 127)]) + ((0.0137585 * fVec34[((IOTA - 34) & 127)]) + ((0.016165499999999999 * fVec34[((IOTA - 31) & 127)]) + ((0.0200181 * fVec34[((IOTA - 30) & 127)]) + ((0.00436148 * fVec34[((IOTA - 27) & 127)]) + ((0.0115485 * fVec34[((IOTA - 25) & 127)]) + ((0.0032127699999999998 * fVec34[((IOTA - 23) & 127)]) + ((0.0057804000000000006 * fVec34[((IOTA - 22) & 127)]) + ((0.037111700000000004 * fVec34[((IOTA - 19) & 127)]) + ((0.014907300000000002 * fVec34[((IOTA - 18) & 127)]) + ((0.0092683000000000001 * fVec34[((IOTA - 16) & 127)]) + ((0.0158698 * fVec34[((IOTA - 15) & 127)]) + ((0.00489909 * fVec34[((IOTA - 12) & 127)]) + ((0.00036272099999999999 * fVec34[((IOTA - 11) & 127)]) + ((0.00043871700000000003 * fVec34[((IOTA - 10) & 127)]) + ((0.00018132700000000001 * fVec34[((IOTA - 9) & 127)]) + ((0.00097058900000000011 * fVec34[((IOTA - 7) & 127)]) + ((0.00016036100000000001 * fVec34[((IOTA - 6) & 127)]) + (((1.8656099999999998e-06 * fVec23[((IOTA - 126) & 127)]) + ((2.5639300000000001e-06 * fVec23[((IOTA - 125) & 127)]) + ((8.3185099999999991e-06 * fVec23[((IOTA - 124) & 127)]) + ((3.8801999999999999e-05 * fVec23[((IOTA - 123) & 127)]) + ((6.5230500000000005e-05 * fVec23[((IOTA - 122) & 127)]) + ((4.81323e-05 * fVec23[((IOTA - 121) & 127)]) + ((3.1175000000000006e-05 * fVec23[((IOTA - 120) & 127)]) + ((1.1129000000000001e-05 * fVec23[((IOTA - 119) & 127)]) + ((0.00016385400000000001 * fVec23[((IOTA - 118) & 127)]) + ((0.000137362 * fVec23[((IOTA - 117) & 127)]) + ((9.139900000000001e-05 * fVec23[((IOTA - 116) & 127)]) + ((0.00012562199999999998 * fVec23[((IOTA - 115) & 127)]) + ((0.00025063300000000005 * fVec23[((IOTA - 113) & 127)]) + ((0.000272806 * fVec23[((IOTA - 112) & 127)]) + ((0.000314307 * fVec23[((IOTA - 111) & 127)]) + ((0.00026935700000000002 * fVec23[((IOTA - 110) & 127)]) + ((0.00027303400000000002 * fVec23[((IOTA - 109) & 127)]) + ((8.74662e-06 * fVec23[((IOTA - 108) & 127)]) + ((0.00035653000000000003 * fVec23[((IOTA - 106) & 127)]) + ((0.000138672 * fVec23[((IOTA - 91) & 127)]) + ((0.0011749499999999999 * fVec23[((IOTA - 81) & 127)]) + ((0.00092974400000000003 * fVec23[((IOTA - 76) & 127)]) + ((0.00189912 * fVec23[((IOTA - 75) & 127)]) + ((0.0018498099999999999 * fVec23[((IOTA - 74) & 127)]) + ((0.00102903 * fVec23[((IOTA - 70) & 127)]) + ((0.0023879000000000001 * fVec23[((IOTA - 69) & 127)]) + ((0.0030104600000000004 * fVec23[((IOTA - 68) & 127)]) + ((0.00157916 * fVec23[((IOTA - 67) & 127)]) + ((0.0021747000000000003 * fVec23[((IOTA - 66) & 127)]) + ((0.0024374800000000001 * fVec23[((IOTA - 65) & 127)]) + ((0.0017056100000000002 * fVec23[((IOTA - 64) & 127)]) + ((0.00246014 * fVec23[((IOTA - 63) & 127)]) + ((0.0044470300000000003 * fVec23[((IOTA - 62) & 127)]) + ((0.0047484400000000005 * fVec23[((IOTA - 61) & 127)]) + ((0.0027951100000000004 * fVec23[((IOTA - 60) & 127)]) + ((0.0047547600000000002 * fVec23[((IOTA - 59) & 127)]) + ((0.0037710400000000002 * fVec23[((IOTA - 58) & 127)]) + ((0.0045419900000000001 * fVec23[((IOTA - 57) & 127)]) + ((0.010441600000000001 * fVec23[((IOTA - 56) & 127)]) + ((0.0100582 * fVec23[((IOTA - 55) & 127)]) + ((0.0076609499999999997 * fVec23[((IOTA - 54) & 127)]) + ((0.0068764300000000002 * fVec23[((IOTA - 53) & 127)]) + ((0.0095819500000000005 * fVec23[((IOTA - 52) & 127)]) + ((0.015913200000000002 * fVec23[((IOTA - 51) & 127)]) + ((0.015119400000000002 * fVec23[((IOTA - 50) & 127)]) + ((0.0128559 * fVec23[((IOTA - 49) & 127)]) + ((0.016606200000000002 * fVec23[((IOTA - 48) & 127)]) + ((0.016194200000000002 * fVec23[((IOTA - 47) & 127)]) + ((0.0116756 * fVec23[((IOTA - 46) & 127)]) + ((0.008875280000000001 * fVec23[((IOTA - 45) & 127)]) + ((0.016079200000000002 * fVec23[((IOTA - 44) & 127)]) + ((0.0188738 * fVec23[((IOTA - 43) & 127)]) + ((0.022184499999999999 * fVec23[((IOTA - 42) & 127)]) + ((0.020373700000000002 * fVec23[((IOTA - 41) & 127)]) + ((0.0086227300000000003 * fVec23[((IOTA - 40) & 127)]) + ((0.015368999999999999 * fVec23[((IOTA - 39) & 127)]) + ((0.025263300000000002 * fVec23[((IOTA - 38) & 127)]) + ((0.026966700000000003 * fVec23[((IOTA - 37) & 127)]) + ((0.023967600000000002 * fVec23[((IOTA - 36) & 127)]) + ((0.0180915 * fVec23[((IOTA - 35) & 127)]) + ((0.026436999999999999 * fVec23[((IOTA - 34) & 127)]) + ((0.035762599999999999 * fVec23[((IOTA - 33) & 127)]) + ((0.019380700000000001 * fVec23[((IOTA - 32) & 127)]) + ((0.0052166499999999998 * fVec23[((IOTA - 31) & 127)]) + ((0.012525700000000001 * fVec23[((IOTA - 30) & 127)]) + ((0.039007399999999998 * fVec23[((IOTA - 29) & 127)]) + ((0.039406500000000004 * fVec23[((IOTA - 28) & 127)]) + ((0.0160175 * fVec23[((IOTA - 27) & 127)]) + ((0.0095142000000000004 * fVec23[((IOTA - 26) & 127)]) + ((0.00060328500000000006 * fVec23[((IOTA - 25) & 127)]) + ((0.042794800000000008 * fVec23[((IOTA - 24) & 127)]) + ((0.034687500000000003 * fVec23[((IOTA - 23) & 127)]) + ((0.0011779100000000001 * fVec23[((IOTA - 10) & 127)]) + ((0.00041459900000000003 * fVec23[((IOTA - 6) & 127)]) + ((0.00031506200000000001 * fVec23[((IOTA - 2) & 127)]) + ((((((((((((0.00017378000000000001 * fVec35[((IOTA - 2) & 127)]) + (0.015415000000000002 * fVec35[((IOTA - 24) & 127)])) + (0.0114164 * fVec35[((IOTA - 28) & 127)])) + (0.0029673899999999999 * fVec35[((IOTA - 47) & 127)])) + (0.0010694400000000001 * fVec35[((IOTA - 81) & 127)])) + (0.000311911 * fVec35[((IOTA - 84) & 127)])) + (0.00141242 * fVec35[((IOTA - 88) & 127)])) + (0.00134669 * fVec35[((IOTA - 89) & 127)])) + (0.0014838199999999998 * fVec35[((IOTA - 91) & 127)])) + (0.0024969700000000003 * fVec35[((IOTA - 92) & 127)])) + (0.00054486499999999995 * fVec35[((IOTA - 97) & 127)])) + (0.000167329 * fVec23[((IOTA - 8) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00019245000000000002 * fVec34[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00050699800000000004 * fVec32[((IOTA - 3) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (2.3397700000000005e-05 * fVec2[((IOTA - 121) & 127)]))) + (0.00093209300000000016 * fVec3[((IOTA - 3) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + fHbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (fRec1[0] * (((0.0012133199999999999 * (fVec14[((IOTA - 71) & 127)] + fVec1[((IOTA - 52) & 127)])) + ((0.00049059500000000003 * (fVec16[((IOTA - 81) & 127)] - fVec15[((IOTA - 75) & 127)])) + ((5.2298199999999994e-07 * fVec2[((IOTA - 125) & 127)]) + ((4.9010699999999996e-07 * fVec3[((IOTA - 126) & 127)]) + ((5.3679899999999996e-07 * fVec3[((IOTA - 125) & 127)]) + ((0.00016007900000000001 * fVec3[((IOTA - 113) & 127)]) + ((0.00010256700000000001 * fVec3[((IOTA - 112) & 127)]) + ((0.00012329500000000002 * fVec3[((IOTA - 109) & 127)]) + ((0.00024529 * fVec3[((IOTA - 108) & 127)]) + ((0.000116481 * fVec3[((IOTA - 107) & 127)]) + ((0.00031804700000000001 * fVec3[((IOTA - 104) & 127)]) + ((0.00031549700000000003 * fVec3[((IOTA - 103) & 127)]) + ((7.5432800000000007e-05 * fVec3[((IOTA - 102) & 127)]) + ((0.00045955200000000001 * fVec3[((IOTA - 101) & 127)]) + ((0.00062797000000000005 * fVec3[((IOTA - 100) & 127)]) + ((0.00034837500000000005 * fVec3[((IOTA - 99) & 127)]) + ((0.00034092200000000001 * fVec3[((IOTA - 98) & 127)]) + ((0.00028357800000000004 * fVec3[((IOTA - 97) & 127)]) + ((0.00064725700000000004 * fVec3[((IOTA - 96) & 127)]) + ((0.00045720700000000006 * fVec3[((IOTA - 95) & 127)]) + ((0.00045935800000000004 * fVec3[((IOTA - 93) & 127)]) + ((0.00079472899999999999 * fVec3[((IOTA - 89) & 127)]) + ((0.00048970299999999997 * fVec3[((IOTA - 88) & 127)]) + ((0.00139777 * fVec3[((IOTA - 85) & 127)]) + ((0.00060715599999999997 * fVec3[((IOTA - 84) & 127)]) + ((0.00029701599999999999 * fVec3[((IOTA - 81) & 127)]) + ((0.00034235100000000002 * fVec3[((IOTA - 80) & 127)]) + ((0.00028653700000000001 * fVec3[((IOTA - 77) & 127)]) + ((0.0014116000000000001 * fVec3[((IOTA - 76) & 127)]) + ((0.00137812 * fVec3[((IOTA - 75) & 127)]) + ((0.0012998700000000001 * fVec3[((IOTA - 72) & 127)]) + ((0.00042063000000000002 * fVec3[((IOTA - 70) & 127)]) + ((0.00079169700000000006 * fVec3[((IOTA - 69) & 127)]) + ((0.0012782400000000001 * fVec3[((IOTA - 61) & 127)]) + ((0.0018483200000000001 * fVec3[((IOTA - 60) & 127)]) + ((0.0022960400000000001 * fVec3[((IOTA - 57) & 127)]) + ((0.0058707500000000001 * fVec3[((IOTA - 56) & 127)]) + ((0.0018583900000000001 * fVec3[((IOTA - 55) & 127)]) + ((0.0022279499999999998 * fVec3[((IOTA - 51) & 127)]) + ((0.00329707 * fVec3[((IOTA - 47) & 127)]) + ((0.00064256900000000006 * fVec3[((IOTA - 46) & 127)]) + ((0.00077027599999999997 * fVec3[((IOTA - 44) & 127)]) + ((0.0069703400000000002 * fVec3[((IOTA - 43) & 127)]) + ((0.0029865499999999997 * fVec3[((IOTA - 42) & 127)]) + ((0.00066859100000000006 * fVec3[((IOTA - 40) & 127)]) + ((0.0054219300000000002 * fVec3[((IOTA - 39) & 127)]) + ((0.0032567799999999999 * fVec3[((IOTA - 36) & 127)]) + ((0.0090969899999999992 * fVec3[((IOTA - 35) & 127)]) + ((0.0028999400000000002 * fVec3[((IOTA - 34) & 127)]) + ((0.0041598900000000003 * fVec3[((IOTA - 30) & 127)]) + ((0.00281423 * fVec3[((IOTA - 26) & 127)]) + ((0.0114492 * fVec3[((IOTA - 24) & 127)]) + ((0.062921400000000002 * fVec3[((IOTA - 23) & 127)]) + ((0.009939410000000001 * fVec3[((IOTA - 22) & 127)]) + ((0.0082256800000000008 * fVec3[((IOTA - 19) & 127)]) + ((0.0072763699999999999 * fVec3[((IOTA - 18) & 127)]) + ((0.029352299999999998 * fVec3[((IOTA - 15) & 127)]) + ((0.0164873 * fVec3[((IOTA - 14) & 127)]) + ((0.00271609 * fVec3[((IOTA - 13) & 127)]) + ((0.0020980300000000003 * fVec3[((IOTA - 10) & 127)]) + ((0.00161338 * fVec3[((IOTA - 6) & 127)]) + ((0.00010617300000000001 * fVec3[((IOTA - 2) & 127)]) + (((2.4710700000000004e-05 * fVec2[((IOTA - 118) & 127)]) + ((9.6095799999999989e-06 * fVec2[((IOTA - 116) & 127)]) + ((1.5763499999999999e-05 * fVec2[((IOTA - 115) & 127)]) + ((3.0402900000000003e-05 * fVec2[((IOTA - 117) & 127)]) + ((0.00018143200000000001 * fVec2[((IOTA - 113) & 127)]) + ((0.00020251500000000001 * fVec2[((IOTA - 112) & 127)]) + ((0.00047742500000000007 * fVec2[((IOTA - 109) & 127)]) + ((6.9920100000000002e-05 * fVec2[((IOTA - 108) & 127)]) + ((0.00010837000000000002 * fVec2[((IOTA - 106) & 127)]) + ((0.00021159599999999998 * fVec2[((IOTA - 105) & 127)]) + ((0.00044150600000000004 * fVec2[((IOTA - 104) & 127)]) + ((0.00030981600000000003 * fVec2[((IOTA - 103) & 127)]) + ((0.00021886600000000001 * fVec2[((IOTA - 102) & 127)]) + ((7.3603400000000008e-05 * fVec2[((IOTA - 100) & 127)]) + ((0.00027642300000000003 * fVec2[((IOTA - 99) & 127)]) + ((0.00028442500000000004 * fVec2[((IOTA - 96) & 127)]) + ((0.00026061299999999998 * fVec2[((IOTA - 90) & 127)]) + ((0.0012727999999999999 * fVec2[((IOTA - 89) & 127)]) + ((0.0015695100000000001 * fVec2[((IOTA - 82) & 127)]) + ((0.000297595 * fVec2[((IOTA - 80) & 127)]) + ((0.0015193100000000001 * fVec2[((IOTA - 79) & 127)]) + ((8.17245e-06 * fVec2[((IOTA - 78) & 127)]) + ((5.1462500000000001e-06 * fVec2[((IOTA - 76) & 127)]) + ((0.00020189900000000001 * fVec2[((IOTA - 74) & 127)]) + ((0.00123554 * fVec2[((IOTA - 70) & 127)]) + ((0.0038251800000000001 * fVec2[((IOTA - 69) & 127)]) + ((0.0011616500000000002 * fVec2[((IOTA - 68) & 127)]) + ((0.0021885900000000002 * fVec2[((IOTA - 63) & 127)]) + ((0.0026820200000000002 * fVec2[((IOTA - 62) & 127)]) + ((0.00016043700000000001 * fVec2[((IOTA - 60) & 127)]) + ((0.00080700599999999998 * fVec2[((IOTA - 59) & 127)]) + ((0.00208479 * fVec2[((IOTA - 56) & 127)]) + ((0.00079029400000000009 * fVec2[((IOTA - 55) & 127)]) + ((0.0018815500000000001 * fVec2[((IOTA - 50) & 127)]) + ((0.0039224999999999998 * fVec2[((IOTA - 49) & 127)]) + ((0.0023459100000000001 * fVec2[((IOTA - 48) & 127)]) + ((0.0058526400000000001 * fVec2[((IOTA - 43) & 127)]) + ((0.00758612 * fVec2[((IOTA - 42) & 127)]) + ((0.0059286199999999999 * fVec2[((IOTA - 37) & 127)]) + ((0.018901899999999999 * fVec2[((IOTA - 36) & 127)]) + ((0.0061276900000000007 * fVec2[((IOTA - 32) & 127)]) + ((0.0082786999999999999 * fVec2[((IOTA - 31) & 127)]) + ((0.0030943999999999998 * fVec2[((IOTA - 30) & 127)]) + ((0.0026460699999999999 * fVec2[((IOTA - 29) & 127)]) + ((0.013392500000000002 * fVec2[((IOTA - 26) & 127)]) + ((0.013666300000000001 * fVec2[((IOTA - 24) & 127)]) + ((0.013813599999999999 * fVec2[((IOTA - 23) & 127)]) + ((0.028074400000000003 * fVec2[((IOTA - 21) & 127)]) + ((0.021535099999999998 * fVec2[((IOTA - 20) & 127)]) + ((0.0026271699999999999 * fVec2[((IOTA - 17) & 127)]) + ((0.042756999999999996 * fVec2[((IOTA - 16) & 127)]) + ((0.0031149699999999999 * fVec2[((IOTA - 15) & 127)]) + ((0.00153082 * fVec2[((IOTA - 11) & 127)]) + ((0.00074648599999999998 * fVec2[((IOTA - 8) & 127)]) + ((0.00059798700000000002 * fVec2[((IOTA - 7) & 127)]) + (((((0.00050637700000000002 * fVec1[((IOTA - 95) & 127)]) + ((((((((((((((((((((((((((((((((((((((((((((((((((((4.7473200000000005e-05 * fVec1[((IOTA - 119) & 127)]) + ((8.2700800000000006e-05 * fVec1[((IOTA - 118) & 127)]) + (((((((((3.7857500000000001e-06 * fVec1[((IOTA - 124) & 127)]) + ((6.9760599999999997e-06 * fVec1[((IOTA - 123) & 127)]) + ((9.5422300000000003e-06 * fVec1[((IOTA - 122) & 127)]) + ((8.2385099999999998e-07 * fVec1[((IOTA - 121) & 127)]) + ((((((((((5.1372500000000003e-05 * fVec8[((IOTA - 114) & 127)]) + ((1.7389700000000001e-05 * fVec8[((IOTA - 112) & 127)]) + ((0.00029880500000000002 * fVec8[((IOTA - 109) & 127)]) + (((0.00022300300000000002 * fVec8[((IOTA - 105) & 127)]) + ((0.00055241200000000006 * fVec8[((IOTA - 104) & 127)]) + ((0.00033970199999999999 * fVec8[((IOTA - 103) & 127)]) + ((((0.00034907699999999999 * fVec8[((IOTA - 98) & 127)]) + ((((((((((((((((((((((((((((((((((((((((((((((((((((0.00010801200000000001 * fVec1[((IOTA - 103) & 127)]) + ((1.2372700000000001e-07 * fVec5[((IOTA - 126) & 127)]) + ((3.1280100000000006e-05 * fVec5[((IOTA - 123) & 127)]) + ((6.3623500000000005e-05 * fVec5[((IOTA - 122) & 127)]) + ((2.7187600000000004e-05 * fVec5[((IOTA - 121) & 127)]) + ((3.0087400000000003e-05 * fVec5[((IOTA - 118) & 127)]) + ((0.00039033699999999999 * fVec5[((IOTA - 101) & 127)]) + ((0.00072547200000000001 * fVec5[((IOTA - 100) & 127)]) + ((0.00061035800000000008 * fVec5[((IOTA - 99) & 127)]) + ((0.00059681000000000003 * fVec5[((IOTA - 98) & 127)]) + ((0.0013495600000000001 * fVec5[((IOTA - 97) & 127)]) + ((0.00072111400000000002 * fVec5[((IOTA - 96) & 127)]) + ((0.00033368300000000004 * fVec5[((IOTA - 94) & 127)]) + ((0.00074977799999999999 * fVec5[((IOTA - 93) & 127)]) + ((0.0019814300000000002 * fVec5[((IOTA - 92) & 127)]) + ((0.00220104 * fVec5[((IOTA - 91) & 127)]) + ((0.0010971900000000001 * fVec5[((IOTA - 90) & 127)]) + ((((((((((0.0015209100000000001 * fVec5[((IOTA - 70) & 127)]) + ((((((((((((((((((((((((((((((((((((1.8801499999999999e-06 * fVec7[((IOTA - 125) & 127)]) + ((2.86475e-06 * fVec7[((IOTA - 121) & 127)]) + ((4.5437300000000006e-05 * fVec7[((IOTA - 120) & 127)]) + ((3.7167200000000006e-05 * fVec7[((IOTA - 119) & 127)]) + ((0.0025962800000000003 * fVec7[((IOTA - 46) & 127)]) + ((0.00094216599999999992 * fVec7[((IOTA - 45) & 127)]) + ((0.00087447600000000001 * fVec7[((IOTA - 44) & 127)]) + ((0.00090515300000000001 * fVec7[((IOTA - 41) & 127)]) + ((0.00946257 * fVec7[((IOTA - 40) & 127)]) + ((0.0057508300000000002 * fVec7[((IOTA - 39) & 127)]) + ((0.00092223200000000004 * fVec7[((IOTA - 35) & 127)]) + ((0.013826099999999999 * fVec7[((IOTA - 34) & 127)]) + ((0.010905700000000001 * fVec7[((IOTA - 30) & 127)]) + ((0.0063115899999999997 * fVec7[((IOTA - 28) & 127)]) + ((0.000688129 * fVec7[((IOTA - 27) & 127)]) + ((0.0080507100000000009 * fVec7[((IOTA - 26) & 127)]) + ((0.011200099999999999 * fVec7[((IOTA - 25) & 127)]) + ((0.032943199999999999 * fVec7[((IOTA - 21) & 127)]) + ((0.0176399 * fVec7[((IOTA - 20) & 127)]) + ((0.0044134300000000003 * fVec7[((IOTA - 18) & 127)]) + ((0.013648499999999999 * fVec7[((IOTA - 15) & 127)]) + ((0.033771500000000003 * fVec7[((IOTA - 14) & 127)]) + ((0.00106518 * fVec7[((IOTA - 11) & 127)]) + ((0.00109752 * fVec7[((IOTA - 9) & 127)]) + ((0.00024148299999999999 * fVec7[((IOTA - 6) & 127)]) + ((0.00050002000000000011 * fVec7[((IOTA - 5) & 127)]) + ((0.000269518 * fVec7[((IOTA - 2) & 127)]) + ((7.6205500000000001e-05 * fVec7[((IOTA - 116) & 127)]) + ((0.00011034900000000001 * fVec7[((IOTA - 115) & 127)]) + ((1.0490900000000001e-05 * fVec7[((IOTA - 114) & 127)]) + ((0.00033708200000000005 * fVec7[((IOTA - 111) & 127)]) + ((0.00014544100000000001 * fVec7[((IOTA - 110) & 127)]) + ((9.5426400000000019e-05 * fVec7[((IOTA - 106) & 127)]) + ((1.21443e-05 * fVec7[((IOTA - 104) & 127)]) + ((0.00030771299999999999 * fVec7[((IOTA - 102) & 127)]) + ((0.000179626 * fVec7[((IOTA - 101) & 127)]) + ((0.0012725800000000002 * fVec7[((IOTA - 95) & 127)]) + ((0.00097590299999999997 * fVec7[((IOTA - 94) & 127)]) + ((0.00050777799999999996 * fVec7[((IOTA - 93) & 127)]) + ((0.00052255599999999998 * fVec7[((IOTA - 92) & 127)]) + ((0.000196801 * fVec7[((IOTA - 88) & 127)]) + ((0.00032958500000000002 * fVec7[((IOTA - 87) & 127)]) + ((0.00048037700000000004 * fVec7[((IOTA - 86) & 127)]) + ((0.0016631100000000002 * fVec7[((IOTA - 79) & 127)]) + ((0.0012850399999999999 * fVec7[((IOTA - 78) & 127)]) + ((0.00047741400000000001 * fVec7[((IOTA - 76) & 127)]) + ((0.00086772500000000007 * fVec7[((IOTA - 75) & 127)]) + ((0.00018961800000000001 * fVec7[((IOTA - 74) & 127)]) + ((0.00034060800000000006 * fVec7[((IOTA - 72) & 127)]) + ((0.0014475 * fVec7[((IOTA - 71) & 127)]) + ((0.0018212299999999999 * fVec7[((IOTA - 70) & 127)]) + ((0.0031428600000000004 * fVec7[((IOTA - 67) & 127)]) + ((0.0064321500000000002 * fVec7[((IOTA - 66) & 127)]) + ((0.0039660099999999998 * fVec7[((IOTA - 65) & 127)]) + ((0.0008650550000000001 * fVec7[((IOTA - 61) & 127)]) + ((0.0027378300000000001 * fVec7[((IOTA - 53) & 127)]) + ((0.0026139900000000001 * fVec7[((IOTA - 52) & 127)]) + ((0.00078646200000000003 * fVec7[((IOTA - 51) & 127)]) + ((6.2225900000000003e-05 * fVec9[((IOTA - 117) & 127)]) + ((6.4000199999999998e-05 * fVec9[((IOTA - 116) & 127)]) + ((1.55277e-05 * fVec9[((IOTA - 115) & 127)]) + ((0.00075748000000000005 * fVec9[((IOTA - 59) & 127)]) + ((0.00142515 * fVec9[((IOTA - 58) & 127)]) + ((0.00273609 * fVec9[((IOTA - 53) & 127)]) + ((0.0016491499999999998 * fVec9[((IOTA - 52) & 127)]) + ((0.00303536 * fVec9[((IOTA - 51) & 127)]) + ((0.0066745500000000004 * fVec9[((IOTA - 50) & 127)]) + ((0.0023904999999999998 * fVec9[((IOTA - 49) & 127)]) + ((0.00042790200000000002 * fVec9[((IOTA - 46) & 127)]) + ((0.0016112800000000001 * fVec9[((IOTA - 45) & 127)]) + ((0.0016677299999999999 * fVec9[((IOTA - 44) & 127)]) + ((0.0035765799999999998 * fVec9[((IOTA - 40) & 127)]) + ((0.00286477 * fVec9[((IOTA - 39) & 127)]) + ((0.00067609400000000002 * fVec9[((IOTA - 37) & 127)]) + ((0.0041627900000000004 * fVec9[((IOTA - 36) & 127)]) + ((0.017109099999999999 * fVec9[((IOTA - 29) & 127)]) + ((0.021511700000000002 * fVec9[((IOTA - 28) & 127)]) + ((0.030071000000000001 * fVec9[((IOTA - 27) & 127)]) + ((0.041622700000000006 * fVec9[((IOTA - 26) & 127)]) + ((0.0069335600000000001 * fVec9[((IOTA - 25) & 127)]) + ((0.0270782 * fVec9[((IOTA - 18) & 127)]) + ((0.039712700000000004 * fVec9[((IOTA - 17) & 127)]) + ((0.030031400000000003 * fVec9[((IOTA - 16) & 127)]) + ((0.00052651599999999998 * fVec9[((IOTA - 15) & 127)]) + ((0.00392377 * fVec9[((IOTA - 14) & 127)]) + ((0.0035166300000000002 * fVec9[((IOTA - 13) & 127)]) + ((0.00075928600000000008 * fVec9[((IOTA - 10) & 127)]) + ((0.00033872000000000004 * fVec9[((IOTA - 5) & 127)]) + ((0.00016066400000000001 * fVec9[((IOTA - 3) & 127)]) + ((0.00018682000000000003 * fVec9[((IOTA - 2) & 127)]) + ((0.00020279900000000001 * fVec9[((IOTA - 1) & 127)]) + ((1.7251399999999999e-05 * fTemp9) + ((2.3037100000000003e-05 * fVec9[((IOTA - 63) & 127)]) + ((8.4839600000000007e-05 * fVec9[((IOTA - 114) & 127)]) + ((4.4167100000000006e-05 * fVec9[((IOTA - 113) & 127)]) + ((0.00475582 * fVec7[((IOTA - 47) & 127)]) + ((3.2060500000000002e-05 * fVec9[((IOTA - 110) & 127)]) + ((0.000112602 * fVec9[((IOTA - 108) & 127)]) + ((1.7491000000000002e-05 * fVec9[((IOTA - 107) & 127)]) + ((0.00075613700000000004 * fVec9[((IOTA - 103) & 127)]) + ((0.0007542060000000001 * fVec9[((IOTA - 102) & 127)]) + ((0.00098607899999999995 * fVec9[((IOTA - 101) & 127)]) + ((0.0010969700000000001 * fVec9[((IOTA - 100) & 127)]) + ((7.8230200000000002e-05 * fVec9[((IOTA - 99) & 127)]) + ((9.2514000000000016e-05 * fVec9[((IOTA - 94) & 127)]) + ((0.00053345900000000002 * fVec9[((IOTA - 92) & 127)]) + ((0.0020748199999999998 * fVec9[((IOTA - 91) & 127)]) + ((0.0015876900000000001 * fVec9[((IOTA - 90) & 127)]) + ((0.00011153500000000001 * fVec9[((IOTA - 89) & 127)]) + ((0.00046845299999999997 * fVec9[((IOTA - 84) & 127)]) + ((0.00086976600000000012 * fVec9[((IOTA - 83) & 127)]) + ((0.00230627 * fVec9[((IOTA - 82) & 127)]) + ((0.00198928 * fVec9[((IOTA - 81) & 127)]) + ((0.00011933700000000001 * fVec9[((IOTA - 75) & 127)]) + ((0.0018365300000000001 * fVec9[((IOTA - 74) & 127)]) + ((0.0018139200000000001 * fVec9[((IOTA - 73) & 127)]) + ((0.0024437400000000002 * fVec9[((IOTA - 68) & 127)]) + ((2.2443800000000004e-05 * fVec9[((IOTA - 67) & 127)]) + ((4.5497699999999996e-06 * fVec10[((IOTA - 125) & 127)]) + ((7.5675299999999995e-06 * fVec10[((IOTA - 124) & 127)]) + ((2.6879600000000003e-05 * fVec10[((IOTA - 121) & 127)]) + ((4.6292799999999998e-05 * fVec10[((IOTA - 120) & 127)]) + ((0.00010061500000000001 * fVec10[((IOTA - 116) & 127)]) + ((0.00201564 * fVec10[((IOTA - 69) & 127)]) + ((0.0011886300000000002 * fVec10[((IOTA - 58) & 127)]) + ((0.00077164300000000003 * fVec10[((IOTA - 57) & 127)]) + ((0.00049624800000000002 * fVec10[((IOTA - 56) & 127)]) + ((0.0030874799999999997 * fVec10[((IOTA - 55) & 127)]) + ((0.0021949399999999998 * fVec10[((IOTA - 54) & 127)]) + ((0.0010828400000000001 * fVec10[((IOTA - 53) & 127)]) + ((0.0010153900000000001 * fVec10[((IOTA - 52) & 127)]) + ((0.00128692 * fVec10[((IOTA - 51) & 127)]) + ((0.0016323399999999999 * fVec10[((IOTA - 50) & 127)]) + ((0.00075240799999999998 * fVec10[((IOTA - 49) & 127)]) + ((0.00092245300000000005 * fVec10[((IOTA - 47) & 127)]) + ((0.0017931100000000001 * fVec10[((IOTA - 46) & 127)]) + ((0.0007471750000000001 * fVec10[((IOTA - 45) & 127)]) + ((0.00051067700000000007 * fVec10[((IOTA - 43) & 127)]) + ((0.0014619100000000001 * fVec10[((IOTA - 42) & 127)]) + ((0.0044955800000000008 * fVec10[((IOTA - 39) & 127)]) + ((0.0021450200000000001 * fVec10[((IOTA - 38) & 127)]) + ((0.0014973 * fVec10[((IOTA - 35) & 127)]) + ((0.0082343699999999995 * fVec10[((IOTA - 34) & 127)]) + ((0.0040986399999999997 * fVec10[((IOTA - 33) & 127)]) + ((0.011162700000000001 * fVec10[((IOTA - 30) & 127)]) + ((0.00346101 * fVec10[((IOTA - 29) & 127)]) + ((0.000302305 * fVec10[((IOTA - 27) & 127)]) + ((0.00492144 * fVec10[((IOTA - 26) & 127)]) + ((0.0030501999999999999 * fVec10[((IOTA - 24) & 127)]) + ((0.00073979700000000005 * fVec10[((IOTA - 23) & 127)]) + ((0.0221686 * fVec10[((IOTA - 21) & 127)]) + ((0.0085520800000000001 * fVec10[((IOTA - 18) & 127)]) + ((0.0047510700000000005 * fVec10[((IOTA - 16) & 127)]) + ((0.0076238799999999995 * fVec10[((IOTA - 15) & 127)]) + ((0.00012743000000000002 * fVec10[((IOTA - 12) & 127)]) + ((0.00010937100000000001 * fVec10[((IOTA - 9) & 127)]) + ((0.00020908600000000004 * fVec10[((IOTA - 6) & 127)]) + ((4.7766400000000011e-05 * fVec10[((IOTA - 4) & 127)]) + ((4.8072300000000004e-05 * fVec10[((IOTA - 2) & 127)]) + ((4.4257099999999997e-06 * fTemp10) + ((0.00098654899999999998 * fVec10[((IOTA - 71) & 127)]) + ((2.7254400000000001e-05 * fVec10[((IOTA - 115) & 127)]) + ((8.944870000000001e-05 * fVec10[((IOTA - 111) & 127)]) + ((0.00012954900000000002 * fVec10[((IOTA - 108) & 127)]) + ((0.00022061000000000002 * fVec10[((IOTA - 103) & 127)]) + ((0.00037079399999999997 * fVec10[((IOTA - 100) & 127)]) + ((0.00051272299999999998 * fVec10[((IOTA - 99) & 127)]) + ((0.00038258600000000003 * fVec10[((IOTA - 95) & 127)]) + ((8.2812900000000015e-05 * fVec10[((IOTA - 94) & 127)]) + ((0.0027608300000000001 * fVec10[((IOTA - 70) & 127)]) + ((0.00030423900000000004 * fVec10[((IOTA - 89) & 127)]) + ((0.00083367799999999991 * fVec10[((IOTA - 88) & 127)]) + ((0.00088518799999999997 * fVec10[((IOTA - 87) & 127)]) + ((0.00014659800000000001 * fVec10[((IOTA - 86) & 127)]) + ((0.00021570500000000001 * fVec10[((IOTA - 84) & 127)]) + ((0.0013572500000000002 * fVec10[((IOTA - 83) & 127)]) + ((0.0010737000000000001 * fVec10[((IOTA - 82) & 127)]) + ((0.0012087000000000001 * fVec10[((IOTA - 77) & 127)]) + ((0.0016850599999999999 * fVec10[((IOTA - 76) & 127)]) + ((0.0021331399999999999 * fVec10[((IOTA - 75) & 127)]) + ((0.0048056599999999998 * fVec10[((IOTA - 74) & 127)]) + ((0.00126592 * fVec10[((IOTA - 73) & 127)]) + ((3.7160099999999995e-06 * fVec11[((IOTA - 124) & 127)]) + ((8.5845599999999997e-06 * fVec11[((IOTA - 122) & 127)]) + ((3.7165799999999998e-07 * fVec11[((IOTA - 121) & 127)]) + ((1.64162e-06 * fVec11[((IOTA - 120) & 127)]) + ((4.2956600000000001e-05 * fVec11[((IOTA - 118) & 127)]) + ((3.4676399999999999e-05 * fVec11[((IOTA - 117) & 127)]) + ((0.00061609800000000004 * fVec11[((IOTA - 68) & 127)]) + ((0.00082633100000000014 * fVec11[((IOTA - 61) & 127)]) + ((0.0013798999999999999 * fVec11[((IOTA - 60) & 127)]) + ((0.0020596899999999999 * fVec11[((IOTA - 57) & 127)]) + ((0.0010143999999999999 * fVec11[((IOTA - 56) & 127)]) + ((0.0032089699999999998 * fVec11[((IOTA - 52) & 127)]) + ((0.0061142000000000002 * fVec11[((IOTA - 51) & 127)]) + ((0.0024907200000000001 * fVec11[((IOTA - 50) & 127)]) + ((0.0034285800000000001 * fVec11[((IOTA - 49) & 127)]) + ((0.0070378800000000007 * fVec11[((IOTA - 48) & 127)]) + ((0.0087433800000000002 * fVec11[((IOTA - 47) & 127)]) + ((0.0040170900000000001 * fVec11[((IOTA - 44) & 127)]) + ((0.0021569699999999998 * fVec11[((IOTA - 43) & 127)]) + ((0.0118508 * fVec11[((IOTA - 34) & 127)]) + ((0.011241000000000001 * fVec11[((IOTA - 33) & 127)]) + ((0.00427576 * fVec11[((IOTA - 32) & 127)]) + ((0.012546699999999999 * fVec11[((IOTA - 31) & 127)]) + ((0.00167917 * fVec11[((IOTA - 30) & 127)]) + ((0.0028046799999999999 * fVec11[((IOTA - 29) & 127)]) + ((0.023972300000000002 * fVec11[((IOTA - 28) & 127)]) + ((0.025418900000000001 * fVec11[((IOTA - 25) & 127)]) + ((0.036758700000000005 * fVec11[((IOTA - 24) & 127)]) + ((0.0094883599999999995 * fVec11[((IOTA - 23) & 127)]) + ((0.030652200000000001 * fVec11[((IOTA - 20) & 127)]) + ((0.019792300000000002 * fVec11[((IOTA - 17) & 127)]) + ((0.074180800000000005 * fVec11[((IOTA - 15) & 127)]) + ((0.039634599999999999 * fVec11[((IOTA - 14) & 127)]) + ((0.0036891799999999998 * fVec11[((IOTA - 10) & 127)]) + ((0.0026538200000000003 * fVec11[((IOTA - 8) & 127)]) + ((0.0018822300000000001 * fVec11[((IOTA - 6) & 127)]) + ((0.00023555400000000002 * fVec11[((IOTA - 2) & 127)]) + ((5.9274000000000002e-05 * fVec11[((IOTA - 1) & 127)]) + ((0.00128951 * fVec11[((IOTA - 72) & 127)]) + ((0.00063230399999999998 * fVec11[((IOTA - 71) & 127)]) + ((0.00104743 * fVec11[((IOTA - 70) & 127)]) + ((0.00019604 * fVec11[((IOTA - 109) & 127)]) + ((0.00013709400000000001 * fVec11[((IOTA - 108) & 127)]) + ((0.00021278000000000003 * fVec11[((IOTA - 107) & 127)]) + ((0.000177257 * fVec11[((IOTA - 106) & 127)]) + ((1.3509400000000001e-05 * fVec11[((IOTA - 103) & 127)]) + ((0.00028317500000000004 * fVec11[((IOTA - 100) & 127)]) + ((0.0010204299999999999 * fVec11[((IOTA - 99) & 127)]) + ((0.00083823700000000003 * fVec11[((IOTA - 98) & 127)]) + ((0.00095599300000000003 * fVec11[((IOTA - 97) & 127)]) + ((0.00073841100000000002 * fVec11[((IOTA - 90) & 127)]) + ((0.0017069399999999999 * fVec11[((IOTA - 69) & 127)]) + ((0.0017065600000000002 * fVec11[((IOTA - 89) & 127)]) + ((0.00082051300000000004 * fVec11[((IOTA - 88) & 127)]) + ((0.000130195 * fVec11[((IOTA - 87) & 127)]) + ((0.00015612699999999999 * fVec11[((IOTA - 86) & 127)]) + ((0.00052182200000000002 * fVec11[((IOTA - 85) & 127)]) + ((0.0018906000000000001 * fVec11[((IOTA - 80) & 127)]) + ((0.0022695099999999998 * fVec11[((IOTA - 79) & 127)]) + ((0.0011883900000000001 * fVec11[((IOTA - 78) & 127)]) + ((0.00081579000000000005 * fVec11[((IOTA - 77) & 127)]) + ((0.0005847640000000001 * fVec11[((IOTA - 76) & 127)]) + ((5.2538300000000005e-05 * fVec12[((IOTA - 117) & 127)]) + ((9.9222000000000006e-05 * fVec12[((IOTA - 113) & 127)]) + ((0.000120834 * fVec12[((IOTA - 112) & 127)]) + ((0.00032393100000000001 * fVec12[((IOTA - 108) & 127)]) + ((0.00049770700000000001 * fVec12[((IOTA - 107) & 127)]) + ((0.00021051600000000003 * fVec12[((IOTA - 106) & 127)]) + ((0.00054882499999999996 * fVec12[((IOTA - 105) & 127)]) + ((0.00033593400000000003 * fVec12[((IOTA - 104) & 127)]) + ((0.0050464000000000004 * fVec12[((IOTA - 34) & 127)]) + ((0.0016620900000000002 * fVec12[((IOTA - 32) & 127)]) + ((0.0091001899999999993 * fVec12[((IOTA - 31) & 127)]) + ((0.0086900200000000014 * fVec12[((IOTA - 27) & 127)]) + ((0.0025605699999999999 * fVec12[((IOTA - 25) & 127)]) + ((0.0343884 * fVec12[((IOTA - 22) & 127)]) + ((0.0039259000000000004 * fVec12[((IOTA - 21) & 127)]) + ((0.0066841400000000007 * fVec12[((IOTA - 19) & 127)]) + ((0.00452054 * fVec12[((IOTA - 18) & 127)]) + ((0.0064993800000000008 * fVec12[((IOTA - 16) & 127)]) + ((0.0139144 * fVec12[((IOTA - 15) & 127)]) + ((0.00063756100000000003 * fVec12[((IOTA - 10) & 127)]) + ((0.00019982100000000001 * fVec12[((IOTA - 9) & 127)]) + ((0.00061146700000000009 * fVec12[((IOTA - 6) & 127)]) + ((6.9460300000000005e-06 * fVec12[((IOTA - 4) & 127)]) + ((8.9573699999999999e-05 * fVec12[((IOTA - 3) & 127)]) + ((1.7425400000000001e-05 * fVec12[((IOTA - 2) & 127)]) + ((1.2426000000000001e-05 * fTemp12) + ((0.0009923550000000001 * fVec12[((IOTA - 40) & 127)]) + ((0.00091611500000000001 * fVec12[((IOTA - 39) & 127)]) + ((0.0050600599999999999 * fVec12[((IOTA - 35) & 127)]) + ((0.00025844700000000003 * fVec12[((IOTA - 36) & 127)]) + ((0.000195336 * fVec12[((IOTA - 102) & 127)]) + ((0.00050333699999999997 * fVec12[((IOTA - 101) & 127)]) + ((0.00094140900000000004 * fVec12[((IOTA - 100) & 127)]) + ((0.00095396900000000004 * fVec12[((IOTA - 99) & 127)]) + ((0.00098442100000000008 * fVec12[((IOTA - 98) & 127)]) + ((0.00038126300000000001 * fVec12[((IOTA - 97) & 127)]) + ((0.00026112299999999999 * fVec12[((IOTA - 94) & 127)]) + ((0.00050703100000000002 * fVec12[((IOTA - 93) & 127)]) + ((0.00074057800000000009 * fVec12[((IOTA - 89) & 127)]) + ((0.00179612 * fVec12[((IOTA - 88) & 127)]) + ((0.00076789300000000007 * fVec12[((IOTA - 87) & 127)]) + ((0.00039971500000000003 * fVec12[((IOTA - 83) & 127)]) + ((0.0027544000000000002 * fVec12[((IOTA - 75) & 127)]) + ((0.0006000580000000001 * fVec12[((IOTA - 74) & 127)]) + ((0.0020230000000000001 * fVec12[((IOTA - 72) & 127)]) + ((0.00025677799999999999 * fVec12[((IOTA - 71) & 127)]) + ((0.00088973999999999998 * fVec12[((IOTA - 69) & 127)]) + ((0.0017349500000000001 * fVec12[((IOTA - 68) & 127)]) + ((0.00090262100000000015 * fVec12[((IOTA - 67) & 127)]) + ((0.0011930899999999999 * fVec12[((IOTA - 59) & 127)]) + ((0.00101278 * fVec12[((IOTA - 58) & 127)]) + ((0.0017261400000000001 * fVec12[((IOTA - 56) & 127)]) + ((0.0038630600000000002 * fVec12[((IOTA - 55) & 127)]) + ((6.30711e-05 * fVec12[((IOTA - 54) & 127)]) + ((0.0018780100000000001 * fVec12[((IOTA - 52) & 127)]) + ((0.00034529899999999997 * fVec12[((IOTA - 46) & 127)]) + ((0.00093084299999999999 * fVec12[((IOTA - 45) & 127)]) + ((0.0019572999999999999 * fVec12[((IOTA - 42) & 127)]) + ((0.0019534999999999999 * fVec12[((IOTA - 41) & 127)]) + ((0.00045993600000000004 * fVec13[((IOTA - 6) & 127)]) + ((0.000291907 * fVec13[((IOTA - 3) & 127)]) + ((0.00029861600000000003 * fVec13[((IOTA - 2) & 127)]) + ((0.000146899 * fVec13[((IOTA - 1) & 127)]) + ((1.7574500000000003e-05 * fTemp13) + ((0.034952499999999997 * fVec13[((IOTA - 16) & 127)]) + ((0.049422800000000003 * fVec13[((IOTA - 15) & 127)]) + ((0.0046001599999999998 * fVec13[((IOTA - 14) & 127)]) + ((0.0033411400000000003 * fVec13[((IOTA - 10) & 127)]) + ((9.0339799999999988e-06 * fVec13[((IOTA - 122) & 127)]) + ((1.1963999999999999e-05 * fVec13[((IOTA - 121) & 127)]) + ((4.4093400000000007e-05 * fVec13[((IOTA - 119) & 127)]) + ((4.0827600000000009e-05 * fVec13[((IOTA - 118) & 127)]) + ((2.2890000000000003e-05 * fVec13[((IOTA - 117) & 127)]) + ((8.0226800000000002e-05 * fVec13[((IOTA - 116) & 127)]) + ((7.3188700000000013e-05 * fVec13[((IOTA - 115) & 127)]) + ((6.1088199999999996e-05 * fVec13[((IOTA - 114) & 127)]) + ((2.9869500000000006e-05 * fVec13[((IOTA - 108) & 127)]) + ((6.3848399999999997e-06 * fVec13[((IOTA - 107) & 127)]) + ((0.000123289 * fVec13[((IOTA - 106) & 127)]) + ((0.00024978799999999997 * fVec13[((IOTA - 105) & 127)]) + ((0.000131514 * fVec13[((IOTA - 104) & 127)]) + ((0.00063336600000000001 * fVec13[((IOTA - 101) & 127)]) + ((0.0010492399999999999 * fVec13[((IOTA - 100) & 127)]) + ((0.00070518200000000005 * fVec13[((IOTA - 93) & 127)]) + ((0.00199563 * fVec13[((IOTA - 92) & 127)]) + ((0.000946998 * fVec13[((IOTA - 91) & 127)]) + ((3.0889300000000003e-05 * fVec13[((IOTA - 90) & 127)]) + ((0.0010462800000000001 * fVec13[((IOTA - 88) & 127)]) + ((0.0011994800000000002 * fVec13[((IOTA - 87) & 127)]) + ((0.00035223700000000004 * fVec13[((IOTA - 84) & 127)]) + ((0.00028803899999999997 * fVec13[((IOTA - 83) & 127)]) + ((0.000115759 * fVec13[((IOTA - 80) & 127)]) + ((0.000974996 * fVec13[((IOTA - 79) & 127)]) + ((0.00029525600000000003 * fVec13[((IOTA - 76) & 127)]) + ((0.0031206000000000003 * fVec13[((IOTA - 75) & 127)]) + ((0.0010051399999999999 * fVec13[((IOTA - 74) & 127)]) + ((2.0701900000000002e-05 * fVec13[((IOTA - 73) & 127)]) + ((0.00348921 * fVec13[((IOTA - 72) & 127)]) + ((0.0035248100000000002 * fVec13[((IOTA - 71) & 127)]) + ((0.0020746099999999997 * fVec13[((IOTA - 68) & 127)]) + ((0.0009994540000000001 * fVec13[((IOTA - 67) & 127)]) + ((2.3077000000000003e-05 * fVec13[((IOTA - 59) & 127)]) + ((0.00188758 * fVec13[((IOTA - 58) & 127)]) + ((0.00246043 * fVec13[((IOTA - 57) & 127)]) + ((0.0034086400000000001 * fVec13[((IOTA - 56) & 127)]) + ((0.000130247 * fVec13[((IOTA - 55) & 127)]) + ((0.00181967 * fVec13[((IOTA - 52) & 127)]) + ((0.0024710800000000001 * fVec13[((IOTA - 51) & 127)]) + ((0.00375698 * fVec13[((IOTA - 50) & 127)]) + ((0.0049808300000000003 * fVec13[((IOTA - 49) & 127)]) + ((0.0029275000000000004 * fVec13[((IOTA - 48) & 127)]) + ((0.00043671900000000002 * fVec13[((IOTA - 46) & 127)]) + ((0.0023742299999999997 * fVec13[((IOTA - 42) & 127)]) + ((0.0095164399999999993 * fVec13[((IOTA - 38) & 127)]) + ((0.011094 * fVec13[((IOTA - 37) & 127)]) + ((0.0052607699999999997 * fVec13[((IOTA - 32) & 127)]) + ((0.053353600000000001 * fVec13[((IOTA - 29) & 127)]) + ((0.0300478 * fVec13[((IOTA - 28) & 127)]) + ((0.0155105 * fVec13[((IOTA - 27) & 127)]) + ((0.023786000000000002 * fVec13[((IOTA - 26) & 127)]) + ((0.025571299999999998 * fVec13[((IOTA - 25) & 127)]) + ((0.009493109999999999 * fVec13[((IOTA - 24) & 127)]) + ((0.041311500000000001 * fVec13[((IOTA - 18) & 127)]) + ((0.016981400000000001 * fVec13[((IOTA - 17) & 127)]) + ((8.7891600000000009e-07 * fVec14[((IOTA - 126) & 127)]) + ((2.13798e-06 * fVec14[((IOTA - 125) & 127)]) + ((3.8383899999999997e-06 * fVec14[((IOTA - 124) & 127)]) + ((5.9589300000000002e-05 * fVec14[((IOTA - 114) & 127)]) + ((6.5764600000000004e-05 * fVec14[((IOTA - 113) & 127)]) + ((0.00021162899999999999 * fVec14[((IOTA - 112) & 127)]) + ((4.5487700000000008e-05 * fVec14[((IOTA - 109) & 127)]) + ((4.3592100000000006e-05 * fVec14[((IOTA - 107) & 127)]) + ((0.000224978 * fVec14[((IOTA - 105) & 127)]) + ((0.00052132399999999998 * fVec14[((IOTA - 104) & 127)]) + ((0.00048330599999999997 * fVec14[((IOTA - 103) & 127)]) + ((0.00071050799999999999 * fVec14[((IOTA - 102) & 127)]) + ((0.00063433500000000009 * fVec14[((IOTA - 101) & 127)]) + ((0.00044372900000000002 * fVec14[((IOTA - 100) & 127)]) + ((0.000330823 * fVec14[((IOTA - 99) & 127)]) + ((0.00039405700000000001 * fVec14[((IOTA - 98) & 127)]) + ((4.5460600000000003e-05 * fVec14[((IOTA - 97) & 127)]) + ((0.0037881900000000003 * fVec14[((IOTA - 27) & 127)]) + ((0.032389800000000003 * fVec14[((IOTA - 26) & 127)]) + ((0.011376599999999999 * fVec14[((IOTA - 25) & 127)]) + ((0.054135099999999998 * fVec14[((IOTA - 23) & 127)]) + ((0.053170500000000002 * fVec14[((IOTA - 22) & 127)]) + ((0.021568500000000001 * fVec14[((IOTA - 21) & 127)]) + ((0.0053294199999999996 * fVec14[((IOTA - 20) & 127)]) + ((0.0082633600000000008 * fVec14[((IOTA - 14) & 127)]) + ((0.035763900000000001 * fVec14[((IOTA - 13) & 127)]) + ((0.040782800000000001 * fVec14[((IOTA - 12) & 127)]) + ((0.0096909700000000001 * fVec14[((IOTA - 11) & 127)]) + ((0.00102728 * fVec14[((IOTA - 9) & 127)]) + ((0.00021498000000000001 * fVec14[((IOTA - 8) & 127)]) + ((0.000116198 * fVec14[((IOTA - 7) & 127)]) + ((0.0006046230000000001 * fVec14[((IOTA - 5) & 127)]) + ((0.00026734600000000001 * fVec14[((IOTA - 4) & 127)]) + ((9.3501200000000002e-06 * fTemp14) + ((0.013483499999999999 * fVec14[((IOTA - 30) & 127)]) + ((0.0005875600000000001 * fVec14[((IOTA - 95) & 127)]) + ((7.4827500000000015e-05 * fVec14[((IOTA - 94) & 127)]) + ((0.00074562900000000004 * fVec14[((IOTA - 86) & 127)]) + ((0.0020883 * fVec14[((IOTA - 85) & 127)]) + ((0.0010964799999999999 * fVec14[((IOTA - 84) & 127)]) + ((0.00030719900000000002 * fVec14[((IOTA - 83) & 127)]) + ((0.00081686200000000012 * fVec14[((IOTA - 82) & 127)]) + ((0.00092738999999999994 * fVec14[((IOTA - 81) & 127)]) + ((0.0012767800000000001 * fVec14[((IOTA - 79) & 127)]) + ((0.0012493700000000001 * fVec14[((IOTA - 78) & 127)]) + ((0.00032623600000000004 * fVec14[((IOTA - 76) & 127)]) + ((0.00127728 * fVec14[((IOTA - 73) & 127)]) + ((0.00294839 * fVec14[((IOTA - 72) & 127)]) + ((0.00090787099999999998 * fVec14[((IOTA - 59) & 127)]) + ((6.1440200000000009e-05 * fVec14[((IOTA - 58) & 127)]) + ((0.000132287 * fVec14[((IOTA - 57) & 127)]) + ((0.00017799499999999999 * fVec14[((IOTA - 55) & 127)]) + ((1.8103599999999998e-06 * fVec14[((IOTA - 53) & 127)]) + ((0.0035657499999999999 * fVec14[((IOTA - 52) & 127)]) + ((0.00186571 * fVec14[((IOTA - 51) & 127)]) + ((0.00106006 * fVec14[((IOTA - 49) & 127)]) + ((0.00134358 * fVec14[((IOTA - 48) & 127)]) + ((0.0065925900000000006 * fVec14[((IOTA - 47) & 127)]) + ((0.0032892700000000004 * fVec14[((IOTA - 46) & 127)]) + ((0.00571376 * fVec14[((IOTA - 43) & 127)]) + ((((((2.3535099999999999e-06 * fVec15[((IOTA - 125) & 127)]) + ((6.8823199999999997e-07 * fVec15[((IOTA - 124) & 127)]) + ((1.7898600000000002e-05 * fVec15[((IOTA - 113) & 127)]) + ((0.00023630399999999998 * fVec15[((IOTA - 109) & 127)]) + ((0.00012162599999999999 * fVec15[((IOTA - 108) & 127)]) + ((0.000113249 * fVec15[((IOTA - 106) & 127)]) + ((0.00024597200000000001 * fVec15[((IOTA - 105) & 127)]) + ((0.000398374 * fVec15[((IOTA - 104) & 127)]) + ((0.00061746999999999995 * fVec15[((IOTA - 103) & 127)]) + ((4.2711400000000006e-05 * fVec15[((IOTA - 1) & 127)]) + ((0.0054672200000000001 * fVec15[((IOTA - 17) & 127)]) + ((0.0048873499999999995 * fVec15[((IOTA - 14) & 127)]) + ((0.0016455200000000001 * fVec15[((IOTA - 13) & 127)]) + ((0.000402347 * fVec15[((IOTA - 12) & 127)]) + ((0.00052282000000000001 * fVec15[((IOTA - 11) & 127)]) + ((0.00052120499999999995 * fVec15[((IOTA - 9) & 127)]) + ((0.00038794200000000001 * fVec15[((IOTA - 7) & 127)]) + ((0.00069996900000000005 * fVec15[((IOTA - 5) & 127)]) + ((5.8344399999999994e-07 * fVec15[((IOTA - 102) & 127)]) + ((8.2155600000000003e-06 * fVec15[((IOTA - 100) & 127)]) + ((0.00080468499999999997 * fVec15[((IOTA - 99) & 127)]) + ((0.00094507800000000002 * fVec15[((IOTA - 98) & 127)]) + ((0.00045216100000000002 * fVec15[((IOTA - 97) & 127)]) + ((0.00031561499999999999 * fVec15[((IOTA - 96) & 127)]) + ((0.00047134100000000001 * fVec15[((IOTA - 95) & 127)]) + ((0.00069274800000000008 * fVec15[((IOTA - 94) & 127)]) + ((0.0014052000000000001 * fVec15[((IOTA - 93) & 127)]) + ((0.00040994799999999999 * fVec15[((IOTA - 92) & 127)]) + ((0.0011113 * fVec15[((IOTA - 90) & 127)]) + ((0.00094376900000000001 * fVec15[((IOTA - 89) & 127)]) + ((2.9439099999999997e-06 * fVec15[((IOTA - 86) & 127)]) + ((0.000122065 * fVec15[((IOTA - 85) & 127)]) + ((0.00070423299999999996 * fVec15[((IOTA - 82) & 127)]) + ((0.00072425400000000002 * fVec15[((IOTA - 81) & 127)]) + ((0.00091705600000000008 * fVec15[((IOTA - 80) & 127)]) + ((0.0013588599999999999 * fVec15[((IOTA - 68) & 127)]) + ((0.0019555700000000002 * fVec15[((IOTA - 67) & 127)]) + ((0.0022902399999999998 * fVec15[((IOTA - 66) & 127)]) + ((0.00089318700000000004 * fVec15[((IOTA - 65) & 127)]) + ((0.00055652499999999999 * fVec15[((IOTA - 64) & 127)]) + ((0.0013175300000000001 * fVec15[((IOTA - 63) & 127)]) + ((0.0026977899999999998 * fVec15[((IOTA - 62) & 127)]) + ((0.0050601500000000002 * fVec15[((IOTA - 61) & 127)]) + ((0.00138116 * fVec15[((IOTA - 60) & 127)]) + ((0.0030267599999999999 * fVec15[((IOTA - 52) & 127)]) + ((0.00017370600000000001 * fVec15[((IOTA - 49) & 127)]) + ((0.0034650500000000003 * fVec15[((IOTA - 46) & 127)]) + ((0.0047482499999999999 * fVec15[((IOTA - 45) & 127)]) + ((0.0070738099999999998 * fVec15[((IOTA - 42) & 127)]) + ((0.0044454100000000003 * fVec15[((IOTA - 40) & 127)]) + ((0.0047369300000000003 * fVec15[((IOTA - 39) & 127)]) + ((0.011450700000000001 * fVec15[((IOTA - 36) & 127)]) + ((0.017145500000000001 * fVec15[((IOTA - 33) & 127)]) + ((0.0023752499999999998 * fVec15[((IOTA - 32) & 127)]) + ((0.0079500400000000002 * fVec15[((IOTA - 30) & 127)]) + ((0.010459599999999999 * fVec15[((IOTA - 29) & 127)]) + ((0.0025976200000000001 * fVec15[((IOTA - 27) & 127)]) + ((0.016936400000000001 * fVec15[((IOTA - 24) & 127)]) + ((0.0285481 * fVec15[((IOTA - 23) & 127)]) + ((0.012527699999999999 * fVec15[((IOTA - 21) & 127)]) + ((0.0068624900000000006 * fVec15[((IOTA - 20) & 127)]) + ((0.0059164899999999999 * fVec15[((IOTA - 18) & 127)]) + ((1.2439699999999999e-06 * fVec16[((IOTA - 126) & 127)]) + ((0.00043207300000000005 * fVec16[((IOTA - 87) & 127)]) + ((0.00011911000000000002 * fVec16[((IOTA - 86) & 127)]) + ((0.0010146599999999999 * fVec16[((IOTA - 78) & 127)]) + ((0.0022639300000000004 * fVec16[((IOTA - 77) & 127)]) + ((0.0023445299999999996 * fVec16[((IOTA - 76) & 127)]) + ((0.00117332 * fVec16[((IOTA - 75) & 127)]) + ((0.00012271000000000002 * fVec16[((IOTA - 73) & 127)]) + ((0.0012369900000000001 * fVec16[((IOTA - 72) & 127)]) + ((0.0012845700000000001 * fVec16[((IOTA - 71) & 127)]) + ((0.0020734499999999997 * fVec16[((IOTA - 70) & 127)]) + ((0.00071453400000000007 * fVec16[((IOTA - 69) & 127)]) + ((0.0025929000000000004 * fVec16[((IOTA - 66) & 127)]) + ((0.00141333 * fVec16[((IOTA - 59) & 127)]) + ((0.0020445400000000001 * fVec16[((IOTA - 54) & 127)]) + ((0.0029146700000000003 * fVec16[((IOTA - 53) & 127)]) + ((0.0050671200000000005 * fVec16[((IOTA - 52) & 127)]) + ((0.0055215200000000002 * fVec16[((IOTA - 51) & 127)]) + ((0.00247781 * fVec16[((IOTA - 50) & 127)]) + ((0.0028622500000000002 * fVec16[((IOTA - 49) & 127)]) + ((0.0043047199999999997 * fVec16[((IOTA - 48) & 127)]) + ((0.0050508000000000003 * fVec16[((IOTA - 47) & 127)]) + ((0.0046696999999999997 * fVec16[((IOTA - 46) & 127)]) + ((0.0063979799999999993 * fVec16[((IOTA - 45) & 127)]) + ((0.0023229500000000003 * fVec16[((IOTA - 44) & 127)]) + ((0.0018713100000000002 * fVec16[((IOTA - 42) & 127)]) + ((0.0013015000000000001 * fVec16[((IOTA - 33) & 127)]) + ((0.0059736599999999996 * fVec16[((IOTA - 32) & 127)]) + ((0.00466849 * fVec16[((IOTA - 29) & 127)]) + ((0.0129721 * fVec16[((IOTA - 26) & 127)]) + ((0.033185600000000003 * fVec16[((IOTA - 25) & 127)]) + ((0.0144081 * fVec16[((IOTA - 24) & 127)]) + ((0.037911500000000001 * fVec16[((IOTA - 23) & 127)]) + ((0.042685100000000004 * fVec16[((IOTA - 22) & 127)]) + ((0.0139343 * fVec16[((IOTA - 21) & 127)]) + ((0.0146813 * fVec16[((IOTA - 18) & 127)]) + ((0.035285799999999999 * fVec16[((IOTA - 13) & 127)]) + ((0.029631599999999998 * fVec16[((IOTA - 12) & 127)]) + ((0.0080319299999999996 * fVec16[((IOTA - 11) & 127)]) + ((0.0023853500000000001 * fVec16[((IOTA - 9) & 127)]) + ((0.00110753 * fVec16[((IOTA - 7) & 127)]) + ((7.2946600000000004e-05 * fVec16[((IOTA - 5) & 127)]) + ((9.9022600000000003e-05 * fVec16[((IOTA - 4) & 127)]) + ((2.4865500000000001e-05 * fTemp16) + ((0.00047993200000000003 * fVec16[((IOTA - 111) & 127)]) + ((0.00064053100000000006 * fVec16[((IOTA - 110) & 127)]) + ((0.00079346300000000011 * fVec16[((IOTA - 107) & 127)]) + ((0.00071335300000000012 * fVec16[((IOTA - 106) & 127)]) + ((0.00039982700000000006 * fVec16[((IOTA - 105) & 127)]) + ((0.00059741799999999995 * fVec16[((IOTA - 103) & 127)]) + ((0.00146408 * fVec16[((IOTA - 102) & 127)]) + ((0.000423628 * fVec16[((IOTA - 101) & 127)]) + ((0.00085437899999999995 * fVec16[((IOTA - 99) & 127)]) + ((0.0018223600000000001 * fVec16[((IOTA - 98) & 127)]) + ((0.0014952799999999999 * fVec16[((IOTA - 97) & 127)]) + ((1.0971399999999999e-06 * fVec16[((IOTA - 96) & 127)]) + ((0.00025442800000000001 * fVec16[((IOTA - 95) & 127)]) + ((5.33039e-06 * fVec17[((IOTA - 124) & 127)]) + ((2.5657100000000002e-05 * fVec17[((IOTA - 123) & 127)]) + ((3.6885000000000003e-05 * fVec17[((IOTA - 122) & 127)]) + ((6.3795399999999999e-06 * fVec17[((IOTA - 121) & 127)]) + ((9.4831099999999997e-06 * fVec17[((IOTA - 115) & 127)]) + ((2.9261400000000004e-05 * fVec17[((IOTA - 114) & 127)]) + ((0.000131404 * fVec17[((IOTA - 113) & 127)]) + ((0.00013365499999999999 * fVec17[((IOTA - 112) & 127)]) + ((4.31971e-05 * fVec17[((IOTA - 109) & 127)]) + ((0.00012369400000000001 * fVec17[((IOTA - 108) & 127)]) + ((0.00123329 * fVec17[((IOTA - 79) & 127)]) + ((0.00205091 * fVec17[((IOTA - 78) & 127)]) + ((0.00098058400000000006 * fVec17[((IOTA - 77) & 127)]) + ((0.0011948000000000002 * fVec17[((IOTA - 72) & 127)]) + ((0.0011723900000000002 * fVec17[((IOTA - 71) & 127)]) + ((0.00025078000000000004 * fVec17[((IOTA - 70) & 127)]) + ((0.000315598 * fVec17[((IOTA - 69) & 127)]) + ((0.00034212800000000003 * fVec17[((IOTA - 68) & 127)]) + ((0.00010491900000000002 * fVec17[((IOTA - 67) & 127)]) + ((0.0012219899999999998 * fVec17[((IOTA - 61) & 127)]) + ((0.00492437 * fVec17[((IOTA - 55) & 127)]) + ((0.0013854399999999999 * fVec17[((IOTA - 54) & 127)]) + ((0.0022150300000000002 * fVec17[((IOTA - 52) & 127)]) + ((0.0012555400000000001 * fVec17[((IOTA - 51) & 127)]) + ((0.0035995400000000005 * fVec17[((IOTA - 48) & 127)]) + ((0.00089967400000000016 * fVec17[((IOTA - 45) & 127)]) + ((0.00088876600000000004 * fVec17[((IOTA - 43) & 127)]) + ((0.0011795500000000001 * fVec17[((IOTA - 42) & 127)]) + ((0.0046426699999999998 * fVec17[((IOTA - 39) & 127)]) + ((0.0016583300000000002 * fVec17[((IOTA - 38) & 127)]) + ((0.0051621699999999998 * fVec17[((IOTA - 36) & 127)]) + ((0.0080632599999999992 * fVec17[((IOTA - 35) & 127)]) + ((0.00157599 * fVec17[((IOTA - 32) & 127)]) + ((0.015070099999999999 * fVec17[((IOTA - 31) & 127)]) + ((0.00011657599999999999 * fVec17[((IOTA - 29) & 127)]) + ((0.00174132 * fVec17[((IOTA - 27) & 127)]) + ((0.0013890300000000001 * fVec17[((IOTA - 25) & 127)]) + ((8.8277000000000009e-05 * fVec17[((IOTA - 24) & 127)]) + ((0.015129699999999999 * fVec17[((IOTA - 22) & 127)]) + ((0.0037970199999999999 * fVec17[((IOTA - 19) & 127)]) + ((0.0040573900000000001 * fVec17[((IOTA - 17) & 127)]) + ((0.0014204600000000001 * fVec17[((IOTA - 14) & 127)]) + ((0.0013988000000000002 * fVec17[((IOTA - 13) & 127)]) + ((0.00012460800000000001 * fVec17[((IOTA - 11) & 127)]) + ((5.5101800000000008e-05 * fVec17[((IOTA - 9) & 127)]) + ((0.00012828900000000002 * fVec17[((IOTA - 7) & 127)]) + ((0.00014925 * fVec17[((IOTA - 5) & 127)]) + ((4.5166200000000001e-05 * fVec17[((IOTA - 3) & 127)]) + ((1.5119900000000001e-05 * fVec17[((IOTA - 1) & 127)]) + ((0.00017813400000000001 * fVec17[((IOTA - 84) & 127)]) + ((0.00058893599999999997 * fVec17[((IOTA - 82) & 127)]) + ((0.00019079900000000001 * fVec17[((IOTA - 100) & 127)]) + ((5.9783799999999997e-06 * fVec17[((IOTA - 98) & 127)]) + ((0.0012019699999999999 * fVec17[((IOTA - 97) & 127)]) + ((0.0020851700000000003 * fVec17[((IOTA - 96) & 127)]) + ((0.00026872700000000002 * fVec17[((IOTA - 92) & 127)]) + ((0.00087657299999999996 * fVec17[((IOTA - 91) & 127)]) + ((0.000467904 * fVec17[((IOTA - 90) & 127)]) + ((0.00078785699999999999 * fVec17[((IOTA - 83) & 127)]) + ((4.8898900000000001e-07 * fVec18[((IOTA - 126) & 127)]) + ((6.8207099999999996e-06 * fVec18[((IOTA - 123) & 127)]) + ((4.3675400000000005e-05 * fVec18[((IOTA - 122) & 127)]) + ((2.5023000000000001e-05 * fVec18[((IOTA - 121) & 127)]) + ((3.1796299999999999e-05 * fVec18[((IOTA - 113) & 127)]) + ((1.2067000000000002e-05 * fVec18[((IOTA - 112) & 127)]) + ((2.4852899999999999e-06 * fVec18[((IOTA - 107) & 127)]) + ((0.00010799700000000002 * fVec18[((IOTA - 105) & 127)]) + ((0.00045528000000000007 * fVec18[((IOTA - 104) & 127)]) + ((0.000126907 * fVec18[((IOTA - 103) & 127)]) + ((0.00017260300000000001 * fVec18[((IOTA - 102) & 127)]) + ((0.00014158200000000001 * fVec18[((IOTA - 98) & 127)]) + ((0.00150157 * fVec18[((IOTA - 97) & 127)]) + ((0.0011047400000000001 * fVec18[((IOTA - 96) & 127)]) + ((0.00044206500000000006 * fVec18[((IOTA - 94) & 127)]) + ((0.000917368 * fVec18[((IOTA - 93) & 127)]) + ((0.00129043 * fVec18[((IOTA - 92) & 127)]) + ((0.00084990400000000018 * fVec18[((IOTA - 91) & 127)]) + ((0.00034780400000000001 * fVec18[((IOTA - 87) & 127)]) + ((0.00075464000000000011 * fVec18[((IOTA - 86) & 127)]) + ((0.0036031800000000001 * fVec18[((IOTA - 55) & 127)]) + ((0.0012747400000000001 * fVec18[((IOTA - 54) & 127)]) + ((0.00022847000000000001 * fVec18[((IOTA - 53) & 127)]) + ((0.0010076 * fVec18[((IOTA - 50) & 127)]) + ((0.00686201 * fVec18[((IOTA - 49) & 127)]) + ((0.0037995999999999998 * fVec18[((IOTA - 48) & 127)]) + ((0.00010534699999999999 * fVec18[((IOTA - 44) & 127)]) + ((0.0061074099999999997 * fVec18[((IOTA - 41) & 127)]) + ((0.0060289400000000009 * fVec18[((IOTA - 40) & 127)]) + ((0.00066093200000000003 * fVec18[((IOTA - 37) & 127)]) + ((0.0062985100000000002 * fVec18[((IOTA - 36) & 127)]) + ((0.0052902100000000001 * fVec18[((IOTA - 30) & 127)]) + ((0.023343600000000003 * fVec18[((IOTA - 29) & 127)]) + ((0.026311200000000003 * fVec18[((IOTA - 28) & 127)]) + ((0.00744592 * fVec18[((IOTA - 25) & 127)]) + ((0.00080698399999999996 * fVec18[((IOTA - 24) & 127)]) + ((0.012177400000000001 * fVec18[((IOTA - 23) & 127)]) + ((0.026490900000000001 * fVec18[((IOTA - 22) & 127)]) + ((0.022836200000000001 * fVec18[((IOTA - 21) & 127)]) + ((0.018413300000000001 * fVec18[((IOTA - 20) & 127)]) + ((0.0145401 * fVec18[((IOTA - 13) & 127)]) + ((0.020249199999999998 * fVec18[((IOTA - 12) & 127)]) + ((0.0040707800000000004 * fVec18[((IOTA - 11) & 127)]) + ((4.0082300000000008e-05 * fVec18[((IOTA - 10) & 127)]) + ((0.00078458800000000002 * fVec18[((IOTA - 6) & 127)]) + ((0.00028978000000000001 * fVec18[((IOTA - 4) & 127)]) + ((9.0877899999999989e-06 * fVec18[((IOTA - 3) & 127)]) + ((4.1167199999999996e-06 * fVec19[((IOTA - 125) & 127)]) + ((0.00109117 * fVec18[((IOTA - 82) & 127)]) + ((0.0015208400000000001 * fVec18[((IOTA - 81) & 127)]) + ((0.00035611100000000005 * fVec18[((IOTA - 80) & 127)]) + ((0.0013705 * fVec18[((IOTA - 77) & 127)]) + ((0.000211399 * fVec18[((IOTA - 76) & 127)]) + ((0.0014127 * fVec18[((IOTA - 72) & 127)]) + ((0.0018515900000000002 * fVec18[((IOTA - 70) & 127)]) + ((0.0030167600000000003 * fVec18[((IOTA - 69) & 127)]) + ((0.00050696599999999997 * fVec18[((IOTA - 65) & 127)]) + ((0.0010659000000000001 * fVec18[((IOTA - 64) & 127)]) + ((0.0010421499999999999 * fVec18[((IOTA - 63) & 127)]) + ((0.0042148799999999998 * fVec18[((IOTA - 56) & 127)]) + ((0.00084516700000000008 * fVec18[((IOTA - 57) & 127)]) + ((0.00028735700000000002 * fVec19[((IOTA - 2) & 127)]) + ((0.0027315100000000004 * fVec20[((IOTA - 18) & 127)]) + ((0.018365599999999999 * fVec20[((IOTA - 17) & 127)]) + ((0.0015812600000000001 * fVec20[((IOTA - 16) & 127)]) + ((0.0087116199999999998 * fVec20[((IOTA - 15) & 127)]) + ((0.0022679900000000001 * fVec20[((IOTA - 13) & 127)]) + ((0.00070895599999999995 * fVec20[((IOTA - 9) & 127)]) + ((0.00092257999999999999 * fVec20[((IOTA - 8) & 127)]) + ((0.000218614 * fVec20[((IOTA - 4) & 127)]) + ((7.8113100000000009e-05 * fVec20[((IOTA - 2) & 127)]) + ((8.4675399999999992e-06 * fTemp20) + ((5.7300899999999997e-06 * fVec19[((IOTA - 124) & 127)]) + ((1.3577100000000001e-05 * fVec19[((IOTA - 121) & 127)]) + ((7.4281200000000003e-05 * fVec19[((IOTA - 120) & 127)]) + ((7.6923100000000002e-05 * fVec19[((IOTA - 119) & 127)]) + ((7.485010000000001e-05 * fVec19[((IOTA - 118) & 127)]) + ((3.4589100000000004e-05 * fVec19[((IOTA - 117) & 127)]) + ((9.5211100000000014e-05 * fVec19[((IOTA - 116) & 127)]) + ((0.00016010899999999999 * fVec19[((IOTA - 115) & 127)]) + ((0.00013675699999999999 * fVec19[((IOTA - 114) & 127)]) + ((4.7910900000000002e-05 * fVec19[((IOTA - 113) & 127)]) + ((4.5599000000000002e-05 * fVec19[((IOTA - 112) & 127)]) + ((0.00032256200000000003 * fVec19[((IOTA - 111) & 127)]) + ((0.00023359100000000003 * fVec19[((IOTA - 110) & 127)]) + ((0.00010394399999999999 * fVec19[((IOTA - 109) & 127)]) + ((0.00035927000000000002 * fVec19[((IOTA - 108) & 127)]) + ((6.2289100000000006e-05 * fVec19[((IOTA - 107) & 127)]) + ((0.00036134400000000004 * fVec19[((IOTA - 103) & 127)]) + ((0.00019419100000000003 * fVec19[((IOTA - 102) & 127)]) + ((5.45233e-05 * fVec19[((IOTA - 89) & 127)]) + ((0.00018564400000000003 * fVec19[((IOTA - 88) & 127)]) + ((0.00029846800000000003 * fVec19[((IOTA - 87) & 127)]) + ((0.00062323900000000004 * fVec19[((IOTA - 84) & 127)]) + ((0.0013928100000000002 * fVec19[((IOTA - 83) & 127)]) + ((0.00042248700000000004 * fVec19[((IOTA - 82) & 127)]) + ((0.00082889300000000014 * fVec19[((IOTA - 79) & 127)]) + ((0.0018016099999999999 * fVec19[((IOTA - 78) & 127)]) + ((0.0015986000000000002 * fVec19[((IOTA - 77) & 127)]) + ((0.0015950599999999999 * fVec19[((IOTA - 76) & 127)]) + ((0.0018363100000000001 * fVec19[((IOTA - 75) & 127)]) + ((0.0016406599999999999 * fVec19[((IOTA - 74) & 127)]) + ((7.6211099999999999e-08 * fVec19[((IOTA - 69) & 127)]) + ((0.0022540800000000003 * fVec19[((IOTA - 68) & 127)]) + ((0.0010342000000000001 * fVec19[((IOTA - 67) & 127)]) + ((0.0019980200000000001 * fVec19[((IOTA - 66) & 127)]) + ((0.0010956399999999999 * fVec19[((IOTA - 65) & 127)]) + ((0.0011518100000000001 * fVec19[((IOTA - 63) & 127)]) + ((0.00180572 * fVec19[((IOTA - 62) & 127)]) + ((0.0018522499999999999 * fVec19[((IOTA - 57) & 127)]) + ((0.0018557900000000002 * fVec19[((IOTA - 56) & 127)]) + ((0.000176202 * fVec19[((IOTA - 55) & 127)]) + ((0.00050791400000000004 * fVec19[((IOTA - 52) & 127)]) + ((0.0046477599999999999 * fVec19[((IOTA - 51) & 127)]) + ((0.0021174599999999998 * fVec19[((IOTA - 50) & 127)]) + ((0.00082403999999999995 * fVec19[((IOTA - 47) & 127)]) + ((0.00163053 * fVec19[((IOTA - 46) & 127)]) + ((0.0040141600000000001 * fVec19[((IOTA - 45) & 127)]) + ((0.0028585699999999999 * fVec19[((IOTA - 39) & 127)]) + ((0.011163900000000001 * fVec19[((IOTA - 38) & 127)]) + ((0.0048144299999999998 * fVec19[((IOTA - 37) & 127)]) + ((0.0019228799999999999 * fVec19[((IOTA - 36) & 127)]) + ((0.00066510000000000007 * fVec19[((IOTA - 33) & 127)]) + ((0.00064387999999999999 * fVec19[((IOTA - 32) & 127)]) + ((0.00039120300000000002 * fVec19[((IOTA - 31) & 127)]) + ((0.0092074099999999992 * fVec19[((IOTA - 30) & 127)]) + ((0.0078471500000000007 * fVec19[((IOTA - 29) & 127)]) + ((0.0090147300000000003 * fVec19[((IOTA - 25) & 127)]) + ((0.035113600000000002 * fVec19[((IOTA - 24) & 127)]) + ((0.0135645 * fVec19[((IOTA - 21) & 127)]) + ((0.0189946 * fVec19[((IOTA - 20) & 127)]) + ((0.039244899999999999 * fVec19[((IOTA - 19) & 127)]) + ((0.021826400000000003 * fVec19[((IOTA - 18) & 127)]) + ((0.0050167000000000007 * fVec19[((IOTA - 15) & 127)]) + ((0.036143599999999998 * fVec19[((IOTA - 14) & 127)]) + ((0.00068993700000000006 * fVec19[((IOTA - 11) & 127)]) + ((3.2388600000000004e-05 * fVec19[((IOTA - 9) & 127)]) + ((0.00049999799999999998 * fVec19[((IOTA - 6) & 127)]) + (((3.2544599999999997e-06 * fVec20[((IOTA - 124) & 127)]) + ((3.8028799999999999e-06 * fVec20[((IOTA - 123) & 127)]) + ((6.0437600000000006e-05 * fVec20[((IOTA - 120) & 127)]) + ((5.5343300000000003e-05 * fVec20[((IOTA - 119) & 127)]) + ((6.5355e-05 * fVec20[((IOTA - 118) & 127)]) + ((6.3452000000000002e-05 * fVec20[((IOTA - 115) & 127)]) + ((5.9620899999999994e-06 * fVec20[((IOTA - 113) & 127)]) + ((0.00025618100000000002 * fVec20[((IOTA - 108) & 127)]) + ((0.000179366 * fVec20[((IOTA - 107) & 127)]) + ((2.8330700000000003e-05 * fVec20[((IOTA - 106) & 127)]) + ((0.00036564200000000001 * fVec20[((IOTA - 103) & 127)]) + ((0.000109181 * fVec20[((IOTA - 100) & 127)]) + ((0.00078636400000000001 * fVec20[((IOTA - 99) & 127)]) + ((0.032309299999999999 * fVec20[((IOTA - 21) & 127)]) + ((0.0073979500000000004 * fVec20[((IOTA - 20) & 127)]) + ((0.000743967 * fVec20[((IOTA - 98) & 127)]) + ((4.1273200000000003e-05 * fVec20[((IOTA - 97) & 127)]) + ((8.4906400000000018e-05 * fVec20[((IOTA - 96) & 127)]) + ((0.00042730800000000005 * fVec20[((IOTA - 95) & 127)]) + ((0.00056384700000000002 * fVec20[((IOTA - 94) & 127)]) + ((0.000318167 * fVec20[((IOTA - 90) & 127)]) + ((6.7318100000000002e-05 * fVec20[((IOTA - 89) & 127)]) + ((0.00077448100000000004 * fVec20[((IOTA - 88) & 127)]) + ((0.0011397200000000001 * fVec20[((IOTA - 87) & 127)]) + ((0.00015226400000000002 * fVec20[((IOTA - 85) & 127)]) + ((0.000103558 * fVec20[((IOTA - 79) & 127)]) + ((0.00040236000000000004 * fVec20[((IOTA - 78) & 127)]) + ((0.0011149 * fVec20[((IOTA - 77) & 127)]) + ((0.000534539 * fVec20[((IOTA - 76) & 127)]) + ((0.00076731800000000012 * fVec20[((IOTA - 75) & 127)]) + ((0.0011365400000000001 * fVec20[((IOTA - 72) & 127)]) + ((0.0037275299999999997 * fVec20[((IOTA - 71) & 127)]) + ((0.0027207099999999999 * fVec20[((IOTA - 70) & 127)]) + ((8.9040400000000016e-05 * fVec20[((IOTA - 69) & 127)]) + ((0.0014650000000000002 * fVec20[((IOTA - 66) & 127)]) + ((0.0024605 * fVec20[((IOTA - 65) & 127)]) + ((0.00052620800000000001 * fVec20[((IOTA - 64) & 127)]) + ((5.8486300000000003e-05 * fVec20[((IOTA - 61) & 127)]) + ((4.1022400000000002e-05 * fVec20[((IOTA - 58) & 127)]) + ((0.00059072699999999998 * fVec20[((IOTA - 52) & 127)]) + ((0.00052352400000000004 * fVec20[((IOTA - 51) & 127)]) + ((0.0020931500000000002 * fVec20[((IOTA - 48) & 127)]) + ((0.000447298 * fVec20[((IOTA - 47) & 127)]) + ((0.0040422200000000009 * fVec20[((IOTA - 45) & 127)]) + ((0.0032565800000000002 * fVec20[((IOTA - 44) & 127)]) + ((0.00596175 * fVec20[((IOTA - 42) & 127)]) + ((0.00171053 * fVec20[((IOTA - 41) & 127)]) + ((0.0071582299999999998 * fVec20[((IOTA - 38) & 127)]) + ((0.00084393100000000013 * fVec20[((IOTA - 37) & 127)]) + ((0.0030441299999999999 * fVec20[((IOTA - 35) & 127)]) + ((0.00048408199999999999 * fVec20[((IOTA - 32) & 127)]) + ((0.0246952 * fVec20[((IOTA - 31) & 127)]) + ((0.00017484299999999999 * fVec20[((IOTA - 30) & 127)]) + ((0.0312594 * fVec20[((IOTA - 26) & 127)]) + (((4.2449800000000001e-05 * fVec21[((IOTA - 122) & 127)]) + ((1.68101e-05 * fVec21[((IOTA - 119) & 127)]) + ((1.08625e-05 * fVec21[((IOTA - 118) & 127)]) + ((0.00011037300000000001 * fVec21[((IOTA - 117) & 127)]) + ((7.9807499999999998e-05 * fVec21[((IOTA - 116) & 127)]) + ((9.6142299999999996e-05 * fVec21[((IOTA - 115) & 127)]) + ((7.7893600000000009e-05 * fVec21[((IOTA - 114) & 127)]) + ((7.9137900000000007e-05 * fVec21[((IOTA - 113) & 127)]) + ((0.00027298900000000001 * fVec21[((IOTA - 112) & 127)]) + ((1.22163e-05 * fVec21[((IOTA - 111) & 127)]) + ((3.4997699999999999e-05 * fVec21[((IOTA - 109) & 127)]) + ((4.7484800000000003e-05 * fVec21[((IOTA - 107) & 127)]) + ((4.6479600000000008e-05 * fVec21[((IOTA - 104) & 127)]) + ((0.000136606 * fVec21[((IOTA - 102) & 127)]) + ((0.00045482200000000002 * fVec21[((IOTA - 94) & 127)]) + ((0.00052650300000000011 * fVec21[((IOTA - 93) & 127)]) + ((0.00087555499999999997 * fVec21[((IOTA - 83) & 127)]) + ((0.00096178600000000006 * fVec21[((IOTA - 82) & 127)]) + ((0.00052484900000000008 * fVec21[((IOTA - 79) & 127)]) + ((0.0082101299999999995 * fVec21[((IOTA - 17) & 127)]) + ((0.031857000000000003 * fVec21[((IOTA - 16) & 127)]) + ((0.00150281 * fVec21[((IOTA - 14) & 127)]) + ((0.00129228 * fVec21[((IOTA - 11) & 127)]) + ((0.00066836900000000004 * fVec21[((IOTA - 8) & 127)]) + ((8.8393099999999999e-05 * fVec21[((IOTA - 7) & 127)]) + ((0.00018522700000000002 * fVec21[((IOTA - 4) & 127)]) + ((0.0022655599999999998 * fVec21[((IOTA - 26) & 127)]) + ((0.010108799999999999 * fVec21[((IOTA - 21) & 127)]) + ((0.000623567 * fVec21[((IOTA - 73) & 127)]) + ((0.00193418 * fVec21[((IOTA - 72) & 127)]) + ((0.0016586399999999999 * fVec21[((IOTA - 71) & 127)]) + ((0.0018386700000000001 * fVec21[((IOTA - 70) & 127)]) + ((0.00112042 * fVec21[((IOTA - 69) & 127)]) + ((0.0025244099999999999 * fVec21[((IOTA - 58) & 127)]) + ((0.0019192800000000002 * fVec21[((IOTA - 57) & 127)]) + ((0.0017400500000000001 * fVec21[((IOTA - 56) & 127)]) + ((0.0029806699999999999 * fVec21[((IOTA - 55) & 127)]) + ((0.0029504500000000003 * fVec21[((IOTA - 54) & 127)]) + ((0.0010499700000000001 * fVec21[((IOTA - 53) & 127)]) + ((4.1037600000000008e-05 * fVec21[((IOTA - 47) & 127)]) + ((0.0034572400000000003 * fVec21[((IOTA - 46) & 127)]) + ((0.0049149900000000002 * fVec21[((IOTA - 45) & 127)]) + ((0.00099377100000000006 * fVec21[((IOTA - 44) & 127)]) + ((0.022015099999999999 * fVec21[((IOTA - 20) & 127)]) + ((0.0055609300000000004 * fVec21[((IOTA - 41) & 127)]) + ((0.011276600000000001 * fVec21[((IOTA - 40) & 127)]) + ((0.0057774999999999996 * fVec21[((IOTA - 39) & 127)]) + ((0.00788494 * fVec21[((IOTA - 35) & 127)]) + ((0.0050277900000000007 * fVec21[((IOTA - 34) & 127)]) + ((0.0038421800000000002 * fVec21[((IOTA - 32) & 127)]) + ((0.0149585 * fVec21[((IOTA - 29) & 127)]) + ((0.0036836899999999999 * fVec21[((IOTA - 27) & 127)]) + ((2.2013400000000002e-05 * fVec22[((IOTA - 123) & 127)]) + ((7.0854499999999992e-06 * fVec22[((IOTA - 122) & 127)]) + ((3.0611000000000002e-05 * fVec22[((IOTA - 119) & 127)]) + ((8.0809800000000007e-05 * fVec22[((IOTA - 118) & 127)]) + ((1.71501e-05 * fVec22[((IOTA - 117) & 127)]) + ((6.3156600000000004e-05 * fVec22[((IOTA - 116) & 127)]) + ((2.5417499999999998e-06 * fVec22[((IOTA - 115) & 127)]) + ((2.1439300000000003e-05 * fVec22[((IOTA - 114) & 127)]) + ((2.5039900000000001e-05 * fVec22[((IOTA - 112) & 127)]) + ((0.000135007 * fVec22[((IOTA - 111) & 127)]) + ((6.3145400000000007e-05 * fVec22[((IOTA - 110) & 127)]) + ((0.00030512000000000003 * fVec22[((IOTA - 107) & 127)]) + ((9.1568200000000002e-05 * fVec22[((IOTA - 104) & 127)]) + ((0.00027613699999999998 * fVec22[((IOTA - 103) & 127)]) + ((0.00026536499999999999 * fVec22[((IOTA - 102) & 127)]) + ((0.00032241399999999998 * fVec22[((IOTA - 101) & 127)]) + ((0.00033567700000000005 * fVec22[((IOTA - 100) & 127)]) + ((6.1251899999999995e-06 * fVec22[((IOTA - 98) & 127)]) + ((0.0013563000000000002 * fVec22[((IOTA - 92) & 127)]) + ((0.0023775100000000002 * fVec22[((IOTA - 74) & 127)]) + ((0.0018128 * fVec22[((IOTA - 73) & 127)]) + ((0.000439049 * fVec22[((IOTA - 72) & 127)]) + ((0.0010578600000000001 * fVec22[((IOTA - 71) & 127)]) + ((0.0026522400000000002 * fVec22[((IOTA - 70) & 127)]) + ((0.00100471 * fVec22[((IOTA - 65) & 127)]) + ((0.00031719000000000002 * fVec22[((IOTA - 62) & 127)]) + ((0.00152038 * fVec22[((IOTA - 61) & 127)]) + ((0.0014213100000000001 * fVec22[((IOTA - 60) & 127)]) + ((0.0028660199999999999 * fVec22[((IOTA - 59) & 127)]) + ((0.0060551399999999997 * fVec22[((IOTA - 58) & 127)]) + ((0.0037266199999999999 * fVec22[((IOTA - 57) & 127)]) + ((0.0018872400000000001 * fVec22[((IOTA - 56) & 127)]) + ((0.0037507199999999999 * fVec22[((IOTA - 55) & 127)]) + ((0.0022728499999999999 * fVec22[((IOTA - 54) & 127)]) + ((0.0037854500000000001 * fVec22[((IOTA - 53) & 127)]) + ((0.0010571299999999999 * fVec22[((IOTA - 52) & 127)]) + ((0.00038515400000000002 * fVec22[((IOTA - 49) & 127)]) + ((0.00068895700000000002 * fVec22[((IOTA - 48) & 127)]) + ((0.00260297 * fVec22[((IOTA - 46) & 127)]) + ((0.0052337399999999997 * fVec22[((IOTA - 45) & 127)]) + ((0.0035233400000000002 * fVec22[((IOTA - 42) & 127)]) + ((0.00121233 * fVec22[((IOTA - 41) & 127)]) + ((0.00227231 * fVec22[((IOTA - 39) & 127)]) + ((0.012740800000000002 * fVec22[((IOTA - 38) & 127)]) + ((0.0058576800000000005 * fVec22[((IOTA - 37) & 127)]) + ((0.0072504600000000002 * fVec22[((IOTA - 34) & 127)]) + ((0.0079654100000000009 * fVec22[((IOTA - 33) & 127)]) + ((0.036658400000000001 * fVec22[((IOTA - 29) & 127)]) + ((0.0144063 * fVec22[((IOTA - 28) & 127)]) + ((0.0062073700000000002 * fVec22[((IOTA - 26) & 127)]) + ((0.037012400000000001 * fVec22[((IOTA - 25) & 127)]) + ((0.032690700000000003 * fVec22[((IOTA - 24) & 127)]) + ((0.00109545 * fVec22[((IOTA - 23) & 127)]) + ((0.0227166 * fVec22[((IOTA - 18) & 127)]) + ((0.0331264 * fVec22[((IOTA - 15) & 127)]) + ((0.0084816100000000005 * fVec22[((IOTA - 14) & 127)]) + ((0.0045181400000000004 * fVec22[((IOTA - 13) & 127)]) + ((0.0016828300000000002 * fVec22[((IOTA - 10) & 127)]) + ((0.00032086300000000001 * fVec22[((IOTA - 8) & 127)]) + ((0.00149577 * fVec22[((IOTA - 6) & 127)]) + ((0.00035434000000000003 * fVec22[((IOTA - 2) & 127)]) + ((2.4763900000000002e-05 * fTemp22) + ((0.0023668200000000004 * fVec22[((IOTA - 91) & 127)]) + ((0.0019167099999999999 * fVec22[((IOTA - 90) & 127)]) + ((0.00056512500000000009 * fVec22[((IOTA - 89) & 127)]) + ((0.00127944 * fVec22[((IOTA - 82) & 127)]) + ((9.5870599999999998e-07 * fVec25[((IOTA - 126) & 127)]) + ((6.1298299999999997e-06 * fVec25[((IOTA - 125) & 127)]) + ((1.7529100000000001e-05 * fVec25[((IOTA - 124) & 127)]) + ((1.3215300000000002e-05 * fVec25[((IOTA - 123) & 127)]) + ((3.73611e-06 * fVec25[((IOTA - 122) & 127)]) + ((1.4631700000000003e-05 * fVec25[((IOTA - 121) & 127)]) + ((7.9383399999999993e-06 * fVec25[((IOTA - 120) & 127)]) + ((0.00074675200000000005 * fVec22[((IOTA - 75) & 127)]) + ((0.000163275 * fVec25[((IOTA - 108) & 127)]) + ((5.2133700000000005e-05 * fVec25[((IOTA - 104) & 127)]) + ((1.7659600000000003e-05 * fVec25[((IOTA - 103) & 127)]) + ((0.00026651699999999997 * fVec25[((IOTA - 101) & 127)]) + ((0.00044441800000000003 * fVec25[((IOTA - 100) & 127)]) + ((0.000204947 * fVec25[((IOTA - 97) & 127)]) + ((0.0021076800000000002 * fVec25[((IOTA - 96) & 127)]) + ((0.0019922500000000001 * fVec25[((IOTA - 95) & 127)]) + ((0.000140679 * fVec25[((IOTA - 94) & 127)]) + ((0.0011280300000000001 * fVec25[((IOTA - 93) & 127)]) + ((0.0019903999999999998 * fVec25[((IOTA - 92) & 127)]) + ((0.000397475 * fVec25[((IOTA - 91) & 127)]) + ((0.00035911300000000004 * fVec25[((IOTA - 85) & 127)]) + ((0.000127816 * fVec25[((IOTA - 81) & 127)]) + ((0.0014990399999999999 * fVec25[((IOTA - 80) & 127)]) + ((0.00177585 * fVec25[((IOTA - 79) & 127)]) + ((5.3717400000000002e-05 * fVec25[((IOTA - 73) & 127)]) + ((0.00100658 * fVec25[((IOTA - 72) & 127)]) + ((0.00017406600000000001 * fVec25[((IOTA - 71) & 127)]) + ((0.00071912600000000005 * fVec25[((IOTA - 67) & 127)]) + ((0.00072212600000000002 * fVec25[((IOTA - 64) & 127)]) + ((0.0049928100000000003 * fVec25[((IOTA - 63) & 127)]) + ((0.0037463600000000002 * fVec25[((IOTA - 62) & 127)]) + ((0.0011032699999999999 * fVec25[((IOTA - 61) & 127)]) + ((1.5565300000000002e-05 * fVec25[((IOTA - 59) & 127)]) + ((0.0010646199999999998 * fVec25[((IOTA - 55) & 127)]) + ((0.0014746 * fVec25[((IOTA - 54) & 127)]) + ((0.0030302600000000003 * fVec25[((IOTA - 53) & 127)]) + ((0.0025201400000000001 * fVec25[((IOTA - 52) & 127)]) + ((0.0023052000000000003 * fVec25[((IOTA - 51) & 127)]) + ((0.0064089099999999994 * fVec25[((IOTA - 50) & 127)]) + ((0.0062176200000000001 * fVec25[((IOTA - 49) & 127)]) + ((0.00136571 * fVec25[((IOTA - 48) & 127)]) + ((0.000484007 * fVec25[((IOTA - 47) & 127)]) + ((0.0053646300000000004 * fVec25[((IOTA - 43) & 127)]) + ((0.00049839000000000003 * fVec25[((IOTA - 40) & 127)]) + ((0.0029793300000000001 * fVec25[((IOTA - 39) & 127)]) + ((0.00011673199999999999 * fVec25[((IOTA - 38) & 127)]) + ((0.0021503299999999998 * fVec25[((IOTA - 34) & 127)]) + ((0.0040663799999999996 * fVec25[((IOTA - 31) & 127)]) + ((0.022960699999999997 * fVec25[((IOTA - 30) & 127)]) + ((0.016656999999999998 * fVec25[((IOTA - 26) & 127)]) + ((0.026276299999999999 * fVec25[((IOTA - 23) & 127)]) + ((0.020495800000000002 * fVec25[((IOTA - 22) & 127)]) + ((0.023659500000000003 * fVec25[((IOTA - 21) & 127)]) + ((0.0210797 * fVec25[((IOTA - 20) & 127)]) + ((0.027862700000000001 * fVec25[((IOTA - 19) & 127)]) + ((0.015660400000000001 * fVec25[((IOTA - 16) & 127)]) + ((0.0069313100000000004 * fVec25[((IOTA - 12) & 127)]) + ((0.0015239000000000001 * fVec25[((IOTA - 11) & 127)]) + ((0.0018694900000000001 * fVec25[((IOTA - 7) & 127)]) + ((0.00091357700000000016 * fVec25[((IOTA - 5) & 127)]) + ((0.00034025 * fVec25[((IOTA - 3) & 127)]) + (((2.1476600000000004e-05 * fVec24[((IOTA - 122) & 127)]) + ((2.6092200000000004e-05 * fVec24[((IOTA - 121) & 127)]) + ((4.1403999999999999e-05 * fVec24[((IOTA - 116) & 127)]) + ((0.00020260300000000001 * fVec24[((IOTA - 113) & 127)]) + ((0.00014776200000000001 * fVec24[((IOTA - 112) & 127)]) + ((0.00045834100000000002 * fVec24[((IOTA - 109) & 127)]) + ((0.00029239199999999999 * fVec24[((IOTA - 108) & 127)]) + ((0.00051877400000000006 * fVec24[((IOTA - 105) & 127)]) + ((0.00062261900000000004 * fVec24[((IOTA - 104) & 127)]) + ((0.00086149400000000008 * fVec24[((IOTA - 77) & 127)]) + ((0.00058334300000000006 * fVec24[((IOTA - 76) & 127)]) + ((0.0013006599999999999 * fVec24[((IOTA - 75) & 127)]) + ((0.00041085900000000007 * fVec24[((IOTA - 71) & 127)]) + ((0.0012948999999999999 * fVec24[((IOTA - 66) & 127)]) + ((0.0018707700000000001 * fVec24[((IOTA - 65) & 127)]) + ((0.00060252200000000008 * fVec24[((IOTA - 64) & 127)]) + ((0.0005644370000000001 * fVec24[((IOTA - 62) & 127)]) + ((0.00017768299999999999 * fVec24[((IOTA - 59) & 127)]) + ((0.0039611100000000003 * fVec24[((IOTA - 58) & 127)]) + ((0.0042174700000000001 * fVec24[((IOTA - 57) & 127)]) + ((0.0044953900000000001 * fVec24[((IOTA - 56) & 127)]) + ((0.0022670200000000002 * fVec24[((IOTA - 55) & 127)]) + ((0.0021868500000000002 * fVec24[((IOTA - 52) & 127)]) + ((9.3079100000000001e-05 * fVec24[((IOTA - 51) & 127)]) + ((0.0021948699999999998 * fVec24[((IOTA - 49) & 127)]) + ((0.0045924300000000006 * fVec24[((IOTA - 46) & 127)]) + ((0.0084135899999999986 * fVec24[((IOTA - 45) & 127)]) + ((0.00067984600000000012 * fVec24[((IOTA - 40) & 127)]) + ((0.00402003 * fVec24[((IOTA - 39) & 127)]) + ((0.017721000000000001 * fVec24[((IOTA - 36) & 127)]) + ((0.0035177100000000003 * fVec24[((IOTA - 33) & 127)]) + ((0.012616499999999999 * fVec24[((IOTA - 32) & 127)]) + ((0.0087009700000000006 * fVec24[((IOTA - 31) & 127)]) + ((0.00866514 * fVec24[((IOTA - 26) & 127)]) + ((0.0044089000000000003 * fVec24[((IOTA - 25) & 127)]) + ((0.023826100000000003 * fVec24[((IOTA - 24) & 127)]) + ((0.0116758 * fVec24[((IOTA - 23) & 127)]) + ((0.0080310599999999996 * fVec24[((IOTA - 19) & 127)]) + ((0.0123386 * fVec24[((IOTA - 18) & 127)]) + ((0.0091981400000000005 * fVec24[((IOTA - 15) & 127)]) + ((0.00114058 * fVec24[((IOTA - 13) & 127)]) + ((0.0133545 * fVec24[((IOTA - 12) & 127)]) + ((0.00042513400000000003 * fVec24[((IOTA - 10) & 127)]) + ((0.00031202200000000002 * fVec24[((IOTA - 9) & 127)]) + ((0.00059449899999999996 * fVec24[((IOTA - 7) & 127)]) + ((9.0752000000000015e-05 * fVec24[((IOTA - 3) & 127)]) + ((2.8761299999999999e-06 * fVec24[((IOTA - 1) & 127)]) + ((3.51439e-07 * fTemp24) + ((0.0011919700000000001 * fVec24[((IOTA - 89) & 127)]) + ((0.00098381599999999999 * fVec24[((IOTA - 90) & 127)]) + ((0.000143232 * fVec24[((IOTA - 103) & 127)]) + ((9.2107400000000005e-05 * fVec24[((IOTA - 101) & 127)]) + ((0.000784532 * fVec24[((IOTA - 100) & 127)]) + ((0.00071355700000000008 * fVec24[((IOTA - 99) & 127)]) + ((0.00065499700000000004 * fVec24[((IOTA - 98) & 127)]) + ((0.00027689300000000001 * fVec24[((IOTA - 97) & 127)]) + ((5.6064900000000006e-05 * fVec26[((IOTA - 119) & 127)]) + ((2.9367600000000003e-05 * fVec26[((IOTA - 118) & 127)]) + ((3.3220999999999999e-05 * fVec26[((IOTA - 117) & 127)]) + ((0.00012805500000000002 * fVec26[((IOTA - 114) & 127)]) + ((0.000103477 * fVec26[((IOTA - 113) & 127)]) + ((0.00025872700000000005 * fVec26[((IOTA - 112) & 127)]) + ((0.00029786899999999998 * fVec26[((IOTA - 111) & 127)]) + ((0.00033988700000000003 * fVec26[((IOTA - 110) & 127)]) + ((9.3482300000000004e-05 * fVec26[((IOTA - 109) & 127)]) + ((0.00013677700000000001 * fVec26[((IOTA - 108) & 127)]) + ((0.00057155300000000003 * fVec26[((IOTA - 107) & 127)]) + ((0.00044084399999999997 * fVec26[((IOTA - 106) & 127)]) + ((0.00058204100000000005 * fVec26[((IOTA - 105) & 127)]) + ((0.00042623200000000002 * fVec26[((IOTA - 104) & 127)]) + ((0.00025379299999999999 * fVec26[((IOTA - 103) & 127)]) + ((0.0004933950000000001 * fVec26[((IOTA - 102) & 127)]) + ((0.00052014400000000005 * fVec26[((IOTA - 99) & 127)]) + ((0.0012122999999999999 * fVec26[((IOTA - 98) & 127)]) + ((0.00045970700000000006 * fVec26[((IOTA - 97) & 127)]) + ((0.00024474399999999997 * fVec26[((IOTA - 96) & 127)]) + ((0.00061810000000000001 * fVec26[((IOTA - 95) & 127)]) + ((4.9281200000000005e-05 * fVec26[((IOTA - 94) & 127)]) + ((0.00026790500000000003 * fVec26[((IOTA - 93) & 127)]) + ((0.00057291299999999998 * fVec26[((IOTA - 88) & 127)]) + ((0.00027621200000000002 * fVec26[((IOTA - 87) & 127)]) + ((0.00068458300000000011 * fVec26[((IOTA - 16) & 127)]) + ((0.0022406600000000002 * fVec26[((IOTA - 14) & 127)]) + ((0.00121477 * fVec26[((IOTA - 12) & 127)]) + ((0.00015070900000000001 * fVec26[((IOTA - 11) & 127)]) + ((0.000594639 * fVec26[((IOTA - 10) & 127)]) + ((0.00043852399999999998 * fVec26[((IOTA - 7) & 127)]) + ((3.5476400000000005e-05 * fVec26[((IOTA - 6) & 127)]) + ((0.00012342900000000001 * fVec26[((IOTA - 5) & 127)]) + ((0.0015819200000000001 * fVec26[((IOTA - 80) & 127)]) + ((0.00034622800000000002 * fVec26[((IOTA - 79) & 127)]) + ((0.0021050499999999998 * fVec26[((IOTA - 75) & 127)]) + ((0.00017197100000000001 * fVec26[((IOTA - 73) & 127)]) + ((0.00328831 * fVec26[((IOTA - 72) & 127)]) + ((0.0033849700000000002 * fVec26[((IOTA - 71) & 127)]) + ((0.00106408 * fVec26[((IOTA - 68) & 127)]) + ((0.0026545100000000001 * fVec26[((IOTA - 67) & 127)]) + ((0.0023114799999999999 * fVec26[((IOTA - 66) & 127)]) + ((0.0010799700000000002 * fVec26[((IOTA - 65) & 127)]) + ((0.000133325 * fVec26[((IOTA - 64) & 127)]) + ((0.00104922 * fVec26[((IOTA - 63) & 127)]) + ((0.00064313500000000008 * fVec26[((IOTA - 62) & 127)]) + ((0.000829111 * fVec26[((IOTA - 50) & 127)]) + ((0.0047209000000000001 * fVec26[((IOTA - 49) & 127)]) + ((0.0040045700000000007 * fVec26[((IOTA - 48) & 127)]) + ((0.0028235399999999998 * fVec26[((IOTA - 47) & 127)]) + ((0.0024041399999999999 * fVec26[((IOTA - 46) & 127)]) + ((0.00123226 * fVec26[((IOTA - 43) & 127)]) + ((0.0055503799999999997 * fVec26[((IOTA - 42) & 127)]) + ((0.0055164099999999994 * fVec26[((IOTA - 41) & 127)]) + ((0.009551539999999999 * fVec26[((IOTA - 40) & 127)]) + ((0.0071602499999999999 * fVec26[((IOTA - 37) & 127)]) + ((0.0059806600000000005 * fVec26[((IOTA - 34) & 127)]) + ((0.0033412400000000001 * fVec26[((IOTA - 33) & 127)]) + ((0.0013020600000000001 * fVec26[((IOTA - 32) & 127)]) + ((0.010603599999999999 * fVec26[((IOTA - 29) & 127)]) + ((0.0047975099999999996 * fVec26[((IOTA - 28) & 127)]) + ((0.00037618999999999999 * fVec26[((IOTA - 25) & 127)]) + ((0.025127100000000003 * fVec26[((IOTA - 24) & 127)]) + ((0.0074241100000000003 * fVec26[((IOTA - 22) & 127)]) + ((0.032307200000000001 * fVec26[((IOTA - 19) & 127)]) + ((2.7837800000000002e-06 * fVec6[((IOTA - 122) & 127)]) + ((0.00013495299999999999 * fVec26[((IOTA - 3) & 127)]) + ((8.3043399999999988e-06 * fVec6[((IOTA - 121) & 127)]) + ((5.6696200000000008e-05 * fVec6[((IOTA - 115) & 127)]) + ((0.00013219300000000001 * fVec6[((IOTA - 112) & 127)]) + ((0.00031032800000000001 * fVec6[((IOTA - 111) & 127)]) + ((0.000209402 * fVec6[((IOTA - 110) & 127)]) + ((0.000392538 * fVec6[((IOTA - 109) & 127)]) + ((0.00021252900000000001 * fVec6[((IOTA - 108) & 127)]) + ((0.00022341099999999999 * fVec6[((IOTA - 107) & 127)]) + ((0.000455971 * fVec6[((IOTA - 106) & 127)]) + ((0.00023670100000000002 * fVec6[((IOTA - 105) & 127)]) + ((9.3216599999999998e-05 * fVec6[((IOTA - 104) & 127)]) + ((0.00011625700000000002 * fVec6[((IOTA - 103) & 127)]) + ((0.00053898200000000002 * fVec6[((IOTA - 102) & 127)]) + ((0.00063969199999999997 * fVec6[((IOTA - 101) & 127)]) + ((0.00049445900000000004 * fVec6[((IOTA - 100) & 127)]) + ((0.00113736 * fVec6[((IOTA - 99) & 127)]) + ((0.0011671499999999998 * fVec6[((IOTA - 98) & 127)]) + ((0.00080747300000000007 * fVec6[((IOTA - 97) & 127)]) + ((0.00098782800000000006 * fVec6[((IOTA - 96) & 127)]) + ((0.000116086 * fVec6[((IOTA - 95) & 127)]) + ((0.0010682000000000001 * fVec6[((IOTA - 92) & 127)]) + ((0.0010581200000000001 * fVec6[((IOTA - 91) & 127)]) + ((0.00023935499999999999 * fVec6[((IOTA - 90) & 127)]) + (((6.07349e-05 * fVec6[((IOTA - 77) & 127)]) + ((3.2773799999999996e-06 * fTemp6) + ((0.023017300000000001 * fVec6[((IOTA - 16) & 127)]) + ((0.0059658100000000002 * fVec6[((IOTA - 15) & 127)]) + ((0.0035753 * fVec6[((IOTA - 13) & 127)]) + ((0.010657300000000001 * fVec6[((IOTA - 12) & 127)]) + ((0.00023747699999999999 * fVec6[((IOTA - 10) & 127)]) + ((0.00079964000000000012 * fVec6[((IOTA - 7) & 127)]) + ((0.00024441799999999999 * fVec6[((IOTA - 71) & 127)]) + ((0.0022682500000000003 * fVec6[((IOTA - 70) & 127)]) + ((0.0013828600000000001 * fVec6[((IOTA - 69) & 127)]) + ((0.00019294500000000003 * fVec6[((IOTA - 68) & 127)]) + ((0.0022136499999999997 * fVec6[((IOTA - 67) & 127)]) + ((0.0023189199999999999 * fVec6[((IOTA - 66) & 127)]) + ((0.0022684799999999998 * fVec6[((IOTA - 65) & 127)]) + ((0.00027487300000000002 * fVec6[((IOTA - 64) & 127)]) + ((0.00097751499999999998 * fVec6[((IOTA - 62) & 127)]) + ((0.00025304199999999998 * fVec6[((IOTA - 61) & 127)]) + ((0.00036951399999999999 * fVec6[((IOTA - 60) & 127)]) + ((0.0020696600000000001 * fVec6[((IOTA - 59) & 127)]) + ((0.00039934300000000003 * fVec6[((IOTA - 58) & 127)]) + ((0.00168114 * fVec6[((IOTA - 55) & 127)]) + ((0.0019406200000000001 * fVec6[((IOTA - 54) & 127)]) + ((0.00213182 * fVec6[((IOTA - 48) & 127)]) + ((0.0044656900000000005 * fVec6[((IOTA - 47) & 127)]) + ((0.0055347900000000004 * fVec6[((IOTA - 46) & 127)]) + ((0.0030411100000000001 * fVec6[((IOTA - 42) & 127)]) + ((0.0061597700000000002 * fVec6[((IOTA - 39) & 127)]) + ((0.0032564600000000001 * fVec6[((IOTA - 38) & 127)]) + ((0.007966260000000001 * fVec6[((IOTA - 35) & 127)]) + ((0.014713700000000001 * fVec6[((IOTA - 34) & 127)]) + ((0.0070875299999999999 * fVec6[((IOTA - 29) & 127)]) + ((0.014908999999999999 * fVec6[((IOTA - 28) & 127)]) + ((0.012678 * fVec6[((IOTA - 27) & 127)]) + ((0.018085500000000001 * fVec6[((IOTA - 23) & 127)]) + ((0.041963100000000003 * fVec6[((IOTA - 22) & 127)]) + ((8.1563499999999999e-05 * fVec27[((IOTA - 118) & 127)]) + ((7.0606100000000001e-05 * fVec27[((IOTA - 117) & 127)]) + ((4.6020600000000005e-05 * fVec27[((IOTA - 116) & 127)]) + ((2.3044100000000002e-05 * fVec27[((IOTA - 115) & 127)]) + ((3.8369700000000006e-05 * fVec27[((IOTA - 114) & 127)]) + ((0.00029687600000000001 * fVec27[((IOTA - 113) & 127)]) + ((0.00024899699999999999 * fVec27[((IOTA - 112) & 127)]) + ((8.0695200000000013e-05 * fVec27[((IOTA - 111) & 127)]) + ((4.5071899999999998e-05 * fVec27[((IOTA - 110) & 127)]) + ((0.00031248700000000002 * fVec27[((IOTA - 109) & 127)]) + ((0.00029415900000000005 * fVec27[((IOTA - 108) & 127)]) + ((8.8138200000000003e-05 * fVec27[((IOTA - 107) & 127)]) + ((0.00030124200000000001 * fVec27[((IOTA - 106) & 127)]) + ((4.2708300000000006e-05 * fVec27[((IOTA - 105) & 127)]) + ((0.000231547 * fVec6[((IOTA - 4) & 127)]) + ((6.9614300000000009e-05 * fVec27[((IOTA - 103) & 127)]) + ((0.000321589 * fVec27[((IOTA - 99) & 127)]) + (((0.00016036600000000003 * fVec27[((IOTA - 98) & 127)]) + ((0.0012729099999999999 * fVec27[((IOTA - 88) & 127)]) + ((0.0021085400000000003 * fVec27[((IOTA - 87) & 127)]) + ((0.0005086 * fVec27[((IOTA - 86) & 127)]) + ((0.00014791000000000001 * fVec27[((IOTA - 85) & 127)]) + ((0.00032534600000000001 * fVec27[((IOTA - 81) & 127)]) + ((0.00099685500000000005 * fVec27[((IOTA - 80) & 127)]) + ((0.00058476299999999997 * fVec27[((IOTA - 76) & 127)]) + ((0.00186454 * fVec27[((IOTA - 75) & 127)]) + ((0.0013951499999999999 * fVec27[((IOTA - 74) & 127)]) + ((0.00129178 * fVec27[((IOTA - 73) & 127)]) + ((0.0016883999999999998 * fVec27[((IOTA - 72) & 127)]) + ((0.0018129000000000001 * fVec27[((IOTA - 71) & 127)]) + ((0.0018384600000000001 * fVec27[((IOTA - 68) & 127)]) + ((0.00195065 * fVec27[((IOTA - 67) & 127)]) + ((0.0012429300000000002 * fVec27[((IOTA - 66) & 127)]) + ((0.00169188 * fVec27[((IOTA - 65) & 127)]) + ((0.0010098400000000001 * fVec27[((IOTA - 64) & 127)]) + ((0.0027656299999999998 * fVec27[((IOTA - 14) & 127)]) + ((0.048321599999999999 * fVec27[((IOTA - 13) & 127)]) + ((0.046080900000000001 * fVec27[((IOTA - 12) & 127)]) + ((0.0051723899999999998 * fVec27[((IOTA - 11) & 127)]) + ((0.0011151400000000001 * fVec27[((IOTA - 9) & 127)]) + ((0.00019390000000000002 * fVec27[((IOTA - 4) & 127)]) + ((1.3112700000000001e-05 * fTemp27) + ((0.038624800000000001 * fVec27[((IOTA - 28) & 127)]) + ((0.0106274 * fVec27[((IOTA - 26) & 127)]) + ((0.0056327499999999997 * fVec27[((IOTA - 25) & 127)]) + ((0.00093373200000000005 * fVec27[((IOTA - 24) & 127)]) + ((0.0144447 * fVec27[((IOTA - 23) & 127)]) + ((0.00052548700000000005 * fVec27[((IOTA - 61) & 127)]) + ((0.00033912900000000003 * fVec27[((IOTA - 58) & 127)]) + ((0.0021074099999999997 * fVec27[((IOTA - 55) & 127)]) + ((0.0012717499999999999 * fVec27[((IOTA - 54) & 127)]) + ((0.00060490900000000005 * fVec27[((IOTA - 48) & 127)]) + ((0.0040936100000000001 * fVec27[((IOTA - 42) & 127)]) + ((0.0020292500000000002 * fVec27[((IOTA - 41) & 127)]) + ((0.0030470000000000002 * fVec27[((IOTA - 38) & 127)]) + ((0.0096155300000000006 * fVec27[((IOTA - 37) & 127)]) + ((0.00534952 * fVec27[((IOTA - 36) & 127)]) + ((0.010443599999999999 * fVec27[((IOTA - 35) & 127)]) + ((0.014278200000000001 * fVec27[((IOTA - 34) & 127)]) + ((0.007845340000000001 * fVec27[((IOTA - 33) & 127)]) + ((0.006265520000000001 * fVec27[((IOTA - 32) & 127)]) + ((0.0039480399999999999 * fVec27[((IOTA - 31) & 127)]) + (((2.4813999999999997e-06 * fVec28[((IOTA - 124) & 127)]) + ((1.3482700000000002e-05 * fVec28[((IOTA - 118) & 127)]) + ((6.7211899999999999e-05 * fVec28[((IOTA - 114) & 127)]) + ((0.00013360000000000002 * fVec28[((IOTA - 113) & 127)]) + ((2.4868199999999998e-07 * fVec28[((IOTA - 112) & 127)]) + ((0.00021603300000000002 * fVec28[((IOTA - 108) & 127)]) + ((0.00013044 * fVec28[((IOTA - 107) & 127)]) + ((0.00031798600000000003 * fVec28[((IOTA - 103) & 127)]) + ((2.5636600000000001e-05 * fVec28[((IOTA - 102) & 127)]) + ((0.00013589400000000001 * fVec28[((IOTA - 101) & 127)]) + ((0.000417124 * fVec28[((IOTA - 100) & 127)]) + ((0.00028324699999999998 * fVec28[((IOTA - 99) & 127)]) + ((0.00072084000000000004 * fVec28[((IOTA - 98) & 127)]) + ((0.0013214800000000001 * fVec28[((IOTA - 94) & 127)]) + ((0.00147025 * fVec28[((IOTA - 93) & 127)]) + ((0.00043513300000000004 * fVec28[((IOTA - 92) & 127)]) + ((0.00047923700000000003 * fVec28[((IOTA - 91) & 127)]) + ((0.00045356600000000003 * fVec28[((IOTA - 90) & 127)]) + ((0.0013659900000000001 * fVec28[((IOTA - 89) & 127)]) + ((0.0012231700000000002 * fVec28[((IOTA - 88) & 127)]) + ((7.6576200000000007e-05 * fVec28[((IOTA - 87) & 127)]) + ((0.00029935000000000004 * fVec28[((IOTA - 83) & 127)]) + ((0.0033423799999999998 * fVec28[((IOTA - 82) & 127)]) + ((0.00229648 * fVec28[((IOTA - 81) & 127)]) + ((0.00063050200000000002 * fVec28[((IOTA - 79) & 127)]) + ((0.00022606700000000002 * fVec28[((IOTA - 77) & 127)]) + ((0.00043061600000000004 * fVec28[((IOTA - 70) & 127)]) + ((0.00033741000000000001 * fVec28[((IOTA - 69) & 127)]) + ((0.000166844 * fVec28[((IOTA - 67) & 127)]) + ((0.00061629700000000003 * fVec28[((IOTA - 62) & 127)]) + ((0.0086880100000000012 * fVec28[((IOTA - 35) & 127)]) + ((0.0107473 * fVec28[((IOTA - 34) & 127)]) + ((0.0015977300000000001 * fVec28[((IOTA - 32) & 127)]) + ((0.0063447800000000004 * fVec28[((IOTA - 30) & 127)]) + ((0.013484899999999999 * fVec28[((IOTA - 27) & 127)]) + ((0.0020287299999999999 * fVec28[((IOTA - 25) & 127)]) + ((0.018480799999999999 * fVec28[((IOTA - 24) & 127)]) + ((0.0056198899999999998 * fVec28[((IOTA - 22) & 127)]) + ((0.017673000000000001 * fVec28[((IOTA - 21) & 127)]) + ((0.0109137 * fVec28[((IOTA - 18) & 127)]) + ((0.0020388099999999998 * fVec28[((IOTA - 17) & 127)]) + ((0.00335082 * fVec28[((IOTA - 16) & 127)]) + ((0.00123416 * fVec28[((IOTA - 14) & 127)]) + ((0.0021818300000000001 * fVec28[((IOTA - 13) & 127)]) + ((0.00012594799999999999 * fVec28[((IOTA - 12) & 127)]) + ((0.00011811100000000002 * fVec28[((IOTA - 11) & 127)]) + ((0.00098081100000000005 * fVec28[((IOTA - 9) & 127)]) + ((0.00044730900000000001 * fVec28[((IOTA - 5) & 127)]) + ((1.2689500000000001e-05 * fVec28[((IOTA - 1) & 127)]) + ((0.0058413700000000002 * fVec28[((IOTA - 41) & 127)]) + ((0.0045412800000000008 * fVec28[((IOTA - 40) & 127)]) + ((0.0020653400000000001 * fVec28[((IOTA - 61) & 127)]) + ((0.0027092700000000002 * fVec28[((IOTA - 60) & 127)]) + ((0.00101213 * fVec28[((IOTA - 59) & 127)]) + ((9.5653400000000015e-05 * fVec28[((IOTA - 58) & 127)]) + ((0.00156251 * fVec28[((IOTA - 54) & 127)]) + ((0.00015190600000000002 * fVec28[((IOTA - 53) & 127)]) + ((0.0026093900000000001 * fVec28[((IOTA - 51) & 127)]) + ((0.0030938500000000004 * fVec28[((IOTA - 50) & 127)]) + ((0.0031350200000000001 * fVec28[((IOTA - 49) & 127)]) + ((0.0040226100000000002 * fVec28[((IOTA - 48) & 127)]) + ((0.0049862600000000002 * fVec28[((IOTA - 44) & 127)]) + ((9.3007799999999994e-06 * fVec29[((IOTA - 123) & 127)]) + ((8.1740999999999985e-06 * fVec29[((IOTA - 119) & 127)]) + ((3.2763499999999999e-05 * fVec29[((IOTA - 118) & 127)]) + ((5.73293e-05 * fVec29[((IOTA - 116) & 127)]) + ((0.00023654000000000004 * fVec29[((IOTA - 115) & 127)]) + ((0.00019556700000000001 * fVec29[((IOTA - 114) & 127)]) + ((5.6889900000000006e-05 * fVec29[((IOTA - 113) & 127)]) + ((0.00024025900000000002 * fVec29[((IOTA - 112) & 127)]) + ((0.00064424100000000004 * fVec29[((IOTA - 111) & 127)]) + ((0.00037747700000000003 * fVec29[((IOTA - 110) & 127)]) + ((3.6385200000000001e-06 * fVec29[((IOTA - 108) & 127)]) + ((0.00031980600000000001 * fVec29[((IOTA - 107) & 127)]) + ((0.00046841100000000007 * fVec29[((IOTA - 104) & 127)]) + ((0.00039931500000000002 * fVec29[((IOTA - 103) & 127)]) + ((3.42585e-06 * fVec29[((IOTA - 102) & 127)]) + ((0.00028306300000000001 * fVec29[((IOTA - 101) & 127)]) + ((0.0065134700000000004 * fVec28[((IOTA - 37) & 127)]) + ((0.0012796000000000001 * fVec29[((IOTA - 92) & 127)]) + ((0.0028355700000000004 * fVec29[((IOTA - 91) & 127)]) + ((0.00027312000000000001 * fVec29[((IOTA - 90) & 127)]) + ((0.00081654800000000006 * fVec29[((IOTA - 85) & 127)]) + ((7.8246599999999997e-05 * fVec29[((IOTA - 84) & 127)]) + ((0.0027393600000000001 * fVec29[((IOTA - 82) & 127)]) + ((0.00270886 * fVec29[((IOTA - 81) & 127)]) + ((0.0012424999999999999 * fVec29[((IOTA - 80) & 127)]) + ((0.00085482200000000009 * fVec29[((IOTA - 79) & 127)]) + ((0.00154955 * fVec29[((IOTA - 72) & 127)]) + ((0.0022211500000000003 * fVec29[((IOTA - 71) & 127)]) + ((0.0016530499999999999 * fVec29[((IOTA - 70) & 127)]) + ((0.0011901600000000002 * fVec29[((IOTA - 69) & 127)]) + ((0.0015993299999999999 * fVec29[((IOTA - 68) & 127)]) + ((0.00083150600000000009 * fVec29[((IOTA - 67) & 127)]) + ((0.0010392999999999999 * fVec29[((IOTA - 64) & 127)]) + ((0.0012512000000000001 * fVec29[((IOTA - 63) & 127)]) + ((0.0026334700000000002 * fVec29[((IOTA - 59) & 127)]) + ((0.0134784 * fVec29[((IOTA - 37) & 127)]) + ((0.0031132099999999999 * fVec29[((IOTA - 36) & 127)]) + ((0.0063885599999999997 * fVec29[((IOTA - 35) & 127)]) + ((0.019759800000000001 * fVec29[((IOTA - 34) & 127)]) + ((0.027778900000000002 * fVec29[((IOTA - 33) & 127)]) + ((0.025745200000000003 * fVec29[((IOTA - 32) & 127)]) + ((0.0028674200000000003 * fVec29[((IOTA - 30) & 127)]) + ((0.023753799999999999 * fVec29[((IOTA - 29) & 127)]) + ((0.020933799999999999 * fVec29[((IOTA - 28) & 127)]) + ((0.0134953 * fVec29[((IOTA - 27) & 127)]) + ((0.024289200000000004 * fVec29[((IOTA - 26) & 127)]) + ((0.0073439100000000004 * fVec29[((IOTA - 25) & 127)]) + ((0.0091244499999999992 * fVec29[((IOTA - 22) & 127)]) + ((0.027517900000000001 * fVec29[((IOTA - 14) & 127)]) + ((0.060376700000000005 * fVec29[((IOTA - 13) & 127)]) + ((0.060888600000000008 * fVec29[((IOTA - 12) & 127)]) + ((0.0051214199999999998 * fVec29[((IOTA - 11) & 127)]) + ((0.00126033 * fVec29[((IOTA - 9) & 127)]) + ((2.0820699999999999e-05 * fVec29[((IOTA - 8) & 127)]) + ((0.00053298400000000002 * fVec29[((IOTA - 5) & 127)]) + ((6.2782600000000011e-05 * fVec29[((IOTA - 4) & 127)]) + ((7.6560500000000007e-05 * fVec29[((IOTA - 3) & 127)]) + ((2.9599300000000003e-05 * fVec29[((IOTA - 1) & 127)]) + ((1.8915500000000002e-05 * fTemp29) + ((0.00289646 * fVec29[((IOTA - 41) & 127)]) + ((0.0028975399999999997 * fVec29[((IOTA - 39) & 127)]) + ((0.018965700000000002 * fVec29[((IOTA - 38) & 127)]) + ((0.0019319900000000002 * fVec29[((IOTA - 58) & 127)]) + ((0.00051400900000000006 * fVec29[((IOTA - 55) & 127)]) + ((0.00199607 * fVec29[((IOTA - 54) & 127)]) + (((1.0336899999999999e-06 * fVec30[((IOTA - 126) & 127)]) + ((1.07578e-06 * fVec30[((IOTA - 124) & 127)]) + ((1.0896600000000002e-05 * fVec30[((IOTA - 123) & 127)]) + ((5.7825300000000005e-06 * fVec30[((IOTA - 121) & 127)]) + ((2.9587800000000002e-05 * fVec30[((IOTA - 120) & 127)]) + ((0.0010500000000000002 * fVec30[((IOTA - 76) & 127)]) + ((0.00010999399999999999 * fVec30[((IOTA - 104) & 127)]) + ((1.2511200000000001e-05 * fVec30[((IOTA - 103) & 127)]) + ((3.3373e-05 * fVec30[((IOTA - 101) & 127)]) + ((0.0022768000000000003 * fVec30[((IOTA - 96) & 127)]) + ((0.0020205099999999997 * fVec30[((IOTA - 95) & 127)]) + ((0.00027500499999999999 * fVec30[((IOTA - 91) & 127)]) + ((9.9177200000000003e-05 * fVec30[((IOTA - 87) & 127)]) + ((0.0006416280000000001 * fVec30[((IOTA - 80) & 127)]) + ((0.000129173 * fVec30[((IOTA - 79) & 127)]) + ((0.0018692700000000001 * fVec30[((IOTA - 77) & 127)]) + ((0.0013042499999999999 * fVec30[((IOTA - 72) & 127)]) + ((0.0044664700000000002 * fVec30[((IOTA - 70) & 127)]) + ((0.0025056699999999998 * fVec30[((IOTA - 71) & 127)]) + ((0.0047280300000000003 * fVec30[((IOTA - 69) & 127)]) + ((0.0037914799999999999 * fVec30[((IOTA - 68) & 127)]) + ((0.0063763400000000003 * fVec30[((IOTA - 67) & 127)]) + ((0.00047446700000000006 * fVec30[((IOTA - 6) & 127)]) + ((0.00031437800000000003 * fVec30[((IOTA - 2) & 127)]) + ((0.0065615300000000003 * fVec30[((IOTA - 66) & 127)]) + ((0.00222449 * fVec30[((IOTA - 65) & 127)]) + ((0.0014331000000000001 * fVec30[((IOTA - 36) & 127)]) + ((0.0043624700000000002 * fVec30[((IOTA - 34) & 127)]) + ((0.0071496000000000007 * fVec30[((IOTA - 33) & 127)]) + ((0.009442299999999999 * fVec30[((IOTA - 31) & 127)]) + ((0.041430000000000002 * fVec30[((IOTA - 30) & 127)]) + ((0.032932100000000006 * fVec30[((IOTA - 29) & 127)]) + ((0.0056186100000000004 * fVec30[((IOTA - 28) & 127)]) + ((0.024621200000000003 * fVec30[((IOTA - 27) & 127)]) + ((0.042141200000000004 * fVec30[((IOTA - 26) & 127)]) + ((0.028794800000000002 * fVec30[((IOTA - 25) & 127)]) + ((0.06345640000000001 * fVec30[((IOTA - 24) & 127)]) + ((0.07541260000000001 * fVec30[((IOTA - 23) & 127)]) + ((0.00046772600000000007 * fVec30[((IOTA - 21) & 127)]) + ((0.049093400000000002 * fVec30[((IOTA - 20) & 127)]) + ((0.054047100000000001 * fVec30[((IOTA - 19) & 127)]) + ((0.0108471 * fVec30[((IOTA - 16) & 127)]) + (((1.5753899999999999e-07 * fVec31[((IOTA - 126) & 127)]) + ((3.3066799999999999e-06 * fVec31[((IOTA - 125) & 127)]) + ((9.6444300000000008e-05 * fVec31[((IOTA - 110) & 127)]) + ((0.00034096799999999998 * fVec31[((IOTA - 109) & 127)]) + ((1.0190999999999999e-05 * fVec31[((IOTA - 108) & 127)]) + ((0.00023396100000000001 * fVec31[((IOTA - 106) & 127)]) + ((0.00052374700000000008 * fVec31[((IOTA - 105) & 127)]) + ((0.00036215100000000001 * fVec31[((IOTA - 104) & 127)]) + ((0.00063805800000000005 * fVec31[((IOTA - 102) & 127)]) + ((0.0011957500000000002 * fVec31[((IOTA - 101) & 127)]) + ((0.0010047600000000002 * fVec31[((IOTA - 100) & 127)]) + ((0.00095472699999999994 * fVec31[((IOTA - 99) & 127)]) + ((0.00092775000000000008 * fVec31[((IOTA - 98) & 127)]) + ((0.00122649 * fVec31[((IOTA - 97) & 127)]) + ((0.0011230999999999999 * fVec31[((IOTA - 93) & 127)]) + ((0.00125953 * fVec31[((IOTA - 92) & 127)]) + ((0.00019295400000000001 * fVec31[((IOTA - 91) & 127)]) + ((0.00055969600000000004 * fVec31[((IOTA - 89) & 127)]) + ((0.00050830900000000008 * fVec31[((IOTA - 83) & 127)]) + ((0.000103257 * fVec31[((IOTA - 76) & 127)]) + ((0.00171093 * fVec31[((IOTA - 73) & 127)]) + ((0.0020383699999999999 * fVec31[((IOTA - 72) & 127)]) + ((0.0013637999999999999 * fVec31[((IOTA - 69) & 127)]) + ((0.0024843999999999999 * fVec31[((IOTA - 68) & 127)]) + ((0.00074355600000000003 * fVec31[((IOTA - 67) & 127)]) + ((0.00089791299999999997 * fVec31[((IOTA - 65) & 127)]) + ((0.0028104300000000005 * fVec31[((IOTA - 64) & 127)]) + ((0.0015055300000000001 * fVec31[((IOTA - 63) & 127)]) + ((0.00129704 * fVec31[((IOTA - 62) & 127)]) + ((0.00045463200000000001 * fVec31[((IOTA - 61) & 127)]) + ((0.00292619 * fVec31[((IOTA - 60) & 127)]) + ((0.0039499399999999999 * fVec31[((IOTA - 59) & 127)]) + ((0.00042873700000000005 * fVec31[((IOTA - 57) & 127)]) + ((0.00077501600000000001 * fVec31[((IOTA - 56) & 127)]) + ((0.0057435900000000007 * fVec31[((IOTA - 52) & 127)]) + ((0.0064549899999999999 * fVec31[((IOTA - 45) & 127)]) + ((0.000359551 * fVec31[((IOTA - 11) & 127)]) + ((0.00050858999999999995 * fVec31[((IOTA - 10) & 127)]) + ((0.00025865000000000003 * fVec31[((IOTA - 8) & 127)]) + ((0.00030013000000000001 * fVec31[((IOTA - 7) & 127)]) + ((0.00012962100000000001 * fVec31[((IOTA - 4) & 127)]) + ((5.1984399999999995e-06 * fVec31[((IOTA - 2) & 127)]) + ((2.0081900000000002e-05 * fVec31[((IOTA - 1) & 127)]) + ((5.35095e-06 * fTemp31) + ((0.016930500000000001 * fVec31[((IOTA - 20) & 127)]) + ((0.0106017 * fVec31[((IOTA - 19) & 127)]) + ((0.000263627 * fVec31[((IOTA - 17) & 127)]) + ((0.0094244500000000009 * fVec31[((IOTA - 39) & 127)]) + ((0.0011423000000000002 * fVec31[((IOTA - 38) & 127)]) + ((0.0177702 * fVec31[((IOTA - 36) & 127)]) + ((0.0096359600000000007 * fVec31[((IOTA - 35) & 127)]) + ((0.019155500000000002 * fVec31[((IOTA - 33) & 127)]) + ((0.019293299999999999 * fVec31[((IOTA - 32) & 127)]) + ((0.0068834500000000002 * fVec31[((IOTA - 29) & 127)]) + ((0.036199000000000002 * fVec31[((IOTA - 26) & 127)]) + ((0.028412400000000001 * fVec31[((IOTA - 23) & 127)]) + ((6.5997900000000001e-08 * fVec4[((IOTA - 126) & 127)]) + ((0.00025129900000000002 * fVec31[((IOTA - 15) & 127)]) + (((2.1505000000000002e-05 * fVec4[((IOTA - 111) & 127)]) + ((0.00025875799999999999 * fVec4[((IOTA - 110) & 127)]) + ((0.00016541 * fVec4[((IOTA - 109) & 127)]) + ((0.00012994100000000001 * fVec4[((IOTA - 108) & 127)]) + ((0.000501459 * fVec4[((IOTA - 107) & 127)]) + ((0.00061807300000000002 * fVec4[((IOTA - 106) & 127)]) + ((0.00041380000000000003 * fVec4[((IOTA - 105) & 127)]) + ((4.2136500000000006e-05 * fVec4[((IOTA - 102) & 127)]) + ((1.1025e-06 * fVec4[((IOTA - 101) & 127)]) + ((0.000102185 * fVec4[((IOTA - 100) & 127)]) + ((0.0010346200000000002 * fVec4[((IOTA - 99) & 127)]) + ((0.0015065 * fVec4[((IOTA - 98) & 127)]) + ((0.00015973800000000001 * fVec4[((IOTA - 94) & 127)]) + ((0.00065440400000000003 * fVec4[((IOTA - 93) & 127)]) + ((0.00049362799999999997 * fVec4[((IOTA - 91) & 127)]) + ((0.0010192300000000001 * fVec4[((IOTA - 90) & 127)]) + ((7.1971000000000006e-05 * fVec4[((IOTA - 85) & 127)]) + ((0.00051516900000000011 * fVec4[((IOTA - 84) & 127)]) + ((0.00076406400000000006 * fVec4[((IOTA - 83) & 127)]) + ((9.4944000000000018e-05 * fVec4[((IOTA - 81) & 127)]) + ((0.00095418100000000002 * fVec4[((IOTA - 80) & 127)]) + ((8.0286900000000005e-05 * fVec4[((IOTA - 71) & 127)]) + ((0.00159566 * fVec4[((IOTA - 70) & 127)]) + ((1.1146700000000001e-05 * fVec4[((IOTA - 67) & 127)]) + ((0.0016114299999999999 * fVec4[((IOTA - 66) & 127)]) + ((0.0030693399999999998 * fVec4[((IOTA - 65) & 127)]) + ((0.0029336900000000001 * fVec4[((IOTA - 64) & 127)]) + ((0.00021672300000000002 * fVec4[((IOTA - 61) & 127)]) + ((0.0015251900000000001 * fVec4[((IOTA - 60) & 127)]) + ((0.00063413500000000008 * fVec4[((IOTA - 59) & 127)]) + ((0.0015717800000000001 * fVec4[((IOTA - 40) & 127)]) + ((0.0086705299999999992 * fVec4[((IOTA - 37) & 127)]) + ((0.00411948 * fVec4[((IOTA - 34) & 127)]) + ((0.0107584 * fVec4[((IOTA - 33) & 127)]) + ((0.0029588800000000001 * fVec4[((IOTA - 32) & 127)]) + ((0.0139764 * fVec4[((IOTA - 30) & 127)]) + ((0.0093965200000000002 * fVec4[((IOTA - 29) & 127)]) + ((0.016385799999999999 * fVec4[((IOTA - 28) & 127)]) + ((0.015254500000000001 * fVec4[((IOTA - 27) & 127)]) + ((0.0099207400000000008 * fVec4[((IOTA - 26) & 127)]) + ((0.041638400000000006 * fVec4[((IOTA - 25) & 127)]) + ((0.020153599999999997 * fVec4[((IOTA - 24) & 127)]) + ((0.00032049699999999999 * fVec4[((IOTA - 23) & 127)]) + ((0.034925999999999999 * fVec4[((IOTA - 22) & 127)]) + ((0.0069752599999999996 * fVec4[((IOTA - 21) & 127)]) + ((0.0037277 * fVec4[((IOTA - 20) & 127)]) + ((0.045202099999999995 * fVec4[((IOTA - 19) & 127)]) + ((0.00526948 * fVec4[((IOTA - 16) & 127)]) + ((0.000358363 * fVec4[((IOTA - 10) & 127)]) + ((0.00023124899999999999 * fVec4[((IOTA - 7) & 127)]) + ((0.00020135900000000002 * fVec4[((IOTA - 6) & 127)]) + ((0.00015575000000000002 * fVec4[((IOTA - 2) & 127)]) + (((7.2115600000000003e-07 * fVec0[((IOTA - 126) & 127)]) + ((3.4760399999999997e-08 * fVec0[((IOTA - 123) & 127)]) + ((2.0505700000000003e-05 * fVec0[((IOTA - 122) & 127)]) + ((7.2276399999999995e-06 * fVec0[((IOTA - 121) & 127)]) + ((1.3220600000000002e-05 * fVec0[((IOTA - 120) & 127)]) + ((1.2673900000000001e-05 * fVec0[((IOTA - 118) & 127)]) + ((4.4900900000000009e-05 * fVec0[((IOTA - 117) & 127)]) + ((4.1691399999999999e-05 * fVec0[((IOTA - 110) & 127)]) + ((0.00027668200000000005 * fVec0[((IOTA - 92) & 127)]) + ((0.00280241 * fVec0[((IOTA - 82) & 127)]) + ((0.0020786799999999999 * fVec0[((IOTA - 81) & 127)]) + ((0.00091981900000000011 * fVec0[((IOTA - 80) & 127)]) + ((0.0002275 * fVec0[((IOTA - 79) & 127)]) + ((7.5101900000000007e-05 * fVec0[((IOTA - 76) & 127)]) + ((0.00076943900000000002 * fVec0[((IOTA - 72) & 127)]) + ((0.00063752100000000005 * fVec0[((IOTA - 71) & 127)]) + ((0.0026788099999999998 * fVec0[((IOTA - 70) & 127)]) + ((0.0036546199999999999 * fVec0[((IOTA - 69) & 127)]) + ((7.3547000000000006e-05 * fVec0[((IOTA - 68) & 127)]) + ((0.0010616200000000001 * fVec0[((IOTA - 66) & 127)]) + ((0.00033734999999999999 * fVec0[((IOTA - 64) & 127)]) + ((0.00050336900000000004 * fVec0[((IOTA - 63) & 127)]) + ((0.0013227800000000002 * fVec0[((IOTA - 61) & 127)]) + ((0.0013802 * fVec0[((IOTA - 60) & 127)]) + ((0.00057507100000000002 * fVec0[((IOTA - 59) & 127)]) + ((0.0017853699999999999 * fVec0[((IOTA - 58) & 127)]) + ((0.0034082300000000004 * fVec0[((IOTA - 57) & 127)]) + ((0.00345985 * fVec0[((IOTA - 56) & 127)]) + ((0.00155444 * fVec0[((IOTA - 53) & 127)]) + ((0.0014091100000000001 * fVec0[((IOTA - 52) & 127)]) + ((0.0018625499999999999 * fVec0[((IOTA - 51) & 127)]) + ((0.00053192199999999999 * fVec0[((IOTA - 48) & 127)]) + ((0.000148231 * fVec0[((IOTA - 47) & 127)]) + ((0.0072206400000000004 * fVec0[((IOTA - 44) & 127)]) + ((0.0011467599999999999 * fVec0[((IOTA - 43) & 127)]) + ((0.015784800000000002 * fVec0[((IOTA - 27) & 127)]) + ((0.0024348900000000003 * fVec0[((IOTA - 25) & 127)]) + ((0.0034120499999999998 * fVec0[((IOTA - 24) & 127)]) + ((0.00206245 * fVec0[((IOTA - 23) & 127)]) + ((0.036800600000000003 * fVec0[((IOTA - 19) & 127)]) + ((0.016894100000000002 * fVec0[((IOTA - 16) & 127)]) + ((0.015907999999999999 * fVec0[((IOTA - 15) & 127)]) + ((0.00139284 * fVec0[((IOTA - 13) & 127)]) + ((0.0111489 * fVec0[((IOTA - 12) & 127)]) + ((0.00048254200000000003 * fVec0[((IOTA - 10) & 127)]) + ((0.00084440200000000006 * fVec0[((IOTA - 7) & 127)]) + ((0.00014837300000000001 * fVec0[((IOTA - 3) & 127)]) + ((0.0050838799999999998 * fVec0[((IOTA - 35) & 127)]) + (((6.1446399999999998e-06 * fVec32[((IOTA - 123) & 127)]) + ((8.1741199999999999e-06 * fVec32[((IOTA - 122) & 127)]) + ((2.2315100000000003e-05 * fVec32[((IOTA - 118) & 127)]) + ((4.6366800000000005e-05 * fVec32[((IOTA - 109) & 127)]) + ((0.00015426800000000002 * fVec32[((IOTA - 108) & 127)]) + ((2.9996500000000003e-05 * fVec32[((IOTA - 104) & 127)]) + ((0.00022863600000000002 * fVec32[((IOTA - 103) & 127)]) + ((0.00013601100000000001 * fVec32[((IOTA - 101) & 127)]) + ((0.00011103000000000001 * fVec32[((IOTA - 100) & 127)]) + ((0.00055044600000000001 * fVec32[((IOTA - 98) & 127)]) + ((0.00044798200000000004 * fVec32[((IOTA - 97) & 127)]) + ((0.00032662200000000005 * fVec32[((IOTA - 96) & 127)]) + ((0.00065044300000000001 * fVec32[((IOTA - 92) & 127)]) + ((0.0011816700000000001 * fVec32[((IOTA - 91) & 127)]) + ((0.00100478 * fVec32[((IOTA - 90) & 127)]) + ((4.4411900000000001e-05 * fVec32[((IOTA - 89) & 127)]) + ((0.000103707 * fVec32[((IOTA - 85) & 127)]) + ((0.00012959000000000001 * fVec32[((IOTA - 84) & 127)]) + ((0.0012166300000000002 * fVec32[((IOTA - 82) & 127)]) + ((0.00073013500000000003 * fVec32[((IOTA - 81) & 127)]) + ((0.0015448500000000002 * fVec32[((IOTA - 80) & 127)]) + ((0.00109789 * fVec32[((IOTA - 79) & 127)]) + ((0.00041635900000000004 * fVec32[((IOTA - 77) & 127)]) + ((0.00033440100000000001 * fVec32[((IOTA - 74) & 127)]) + ((0.00171149 * fVec32[((IOTA - 71) & 127)]) + ((0.0032145400000000001 * fVec32[((IOTA - 70) & 127)]) + ((0.000234556 * fVec32[((IOTA - 69) & 127)]) + ((0.0009296310000000001 * fVec32[((IOTA - 67) & 127)]) + ((0.00098071900000000012 * fVec32[((IOTA - 64) & 127)]) + ((0.00040021800000000004 * fVec32[((IOTA - 63) & 127)]) + ((0.0020002800000000001 * fVec32[((IOTA - 61) & 127)]) + ((0.0024495200000000002 * fVec32[((IOTA - 56) & 127)]) + ((0.0022621500000000001 * fVec32[((IOTA - 55) & 127)]) + ((0.0026210900000000004 * fVec32[((IOTA - 54) & 127)]) + ((0.00107755 * fVec32[((IOTA - 53) & 127)]) + ((0.0018869100000000001 * fVec32[((IOTA - 51) & 127)]) + ((0.0016816299999999999 * fVec32[((IOTA - 48) & 127)]) + ((0.00099638500000000002 * fVec32[((IOTA - 47) & 127)]) + ((0.0034718700000000002 * fVec32[((IOTA - 43) & 127)]) + ((0.0068587300000000004 * fVec32[((IOTA - 42) & 127)]) + ((0.0058219500000000002 * fVec32[((IOTA - 34) & 127)]) + ((0.017078900000000001 * fVec32[((IOTA - 33) & 127)]) + ((0.00087088200000000001 * fVec32[((IOTA - 30) & 127)]) + ((0.027225600000000003 * fVec32[((IOTA - 29) & 127)]) + ((0.00946403 * fVec32[((IOTA - 28) & 127)]) + ((0.0038781100000000002 * fVec32[((IOTA - 25) & 127)]) + ((0.048044200000000002 * fVec32[((IOTA - 24) & 127)]) + ((0.0047823300000000004 * fVec32[((IOTA - 23) & 127)]) + ((0.031593799999999998 * fVec32[((IOTA - 21) & 127)]) + ((0.0092093100000000001 * fVec32[((IOTA - 20) & 127)]) + ((0.0182515 * fVec32[((IOTA - 19) & 127)]) + ((0.0125871 * fVec32[((IOTA - 16) & 127)]) + ((0.0010793700000000001 * fVec32[((IOTA - 14) & 127)]) + ((0.0061485900000000007 * fVec32[((IOTA - 12) & 127)]) + ((0.00108131 * fVec32[((IOTA - 11) & 127)]) + ((0.00149292 * fVec32[((IOTA - 7) & 127)]) + ((0.00062478100000000003 * fVec32[((IOTA - 5) & 127)]) + ((0.00028939400000000006 * fVec32[((IOTA - 3) & 127)]) + ((1.4188099999999999e-06 * fVec33[((IOTA - 126) & 127)]) + ((3.3187600000000001e-06 * fVec33[((IOTA - 125) & 127)]) + ((5.1482899999999996e-06 * fVec33[((IOTA - 124) & 127)]) + ((8.7600299999999995e-06 * fVec33[((IOTA - 123) & 127)]) + ((5.5660599999999997e-06 * fVec33[((IOTA - 122) & 127)]) + ((5.530960000000001e-05 * fVec33[((IOTA - 121) & 127)]) + ((0.00011918500000000002 * fVec33[((IOTA - 120) & 127)]) + ((9.8678100000000013e-05 * fVec33[((IOTA - 119) & 127)]) + (((4.2207000000000004e-05 * fVec33[((IOTA - 118) & 127)]) + ((3.2490500000000003e-05 * fVec33[((IOTA - 117) & 127)]) + ((0.00011697900000000002 * fVec33[((IOTA - 116) & 127)]) + ((5.6691300000000004e-05 * fVec33[((IOTA - 112) & 127)]) + ((0.000115798 * fVec33[((IOTA - 111) & 127)]) + ((0.0037339199999999999 * fVec33[((IOTA - 96) & 127)]) + ((0.0027517499999999999 * fVec33[((IOTA - 95) & 127)]) + ((0.00065997500000000004 * fVec33[((IOTA - 92) & 127)]) + ((0.0016790700000000002 * fVec33[((IOTA - 91) & 127)]) + ((0.0019817300000000001 * fVec33[((IOTA - 88) & 127)]) + ((0.0040626200000000003 * fVec33[((IOTA - 87) & 127)]) + ((0.0023261500000000004 * fVec33[((IOTA - 86) & 127)]) + ((0.0015044699999999999 * fVec33[((IOTA - 85) & 127)]) + ((0.0010922900000000001 * fVec33[((IOTA - 84) & 127)]) + ((0.0012104800000000001 * fVec33[((IOTA - 64) & 127)]) + ((0.0039074399999999999 * fVec33[((IOTA - 63) & 127)]) + ((0.00102589 * fVec33[((IOTA - 62) & 127)]) + ((0.00070128400000000004 * fVec33[((IOTA - 59) & 127)]) + ((0.00040873600000000004 * fVec33[((IOTA - 58) & 127)]) + ((0.0011136799999999999 * fVec33[((IOTA - 57) & 127)]) + ((0.0035448200000000002 * fVec33[((IOTA - 56) & 127)]) + ((0.0022150400000000002 * fVec33[((IOTA - 55) & 127)]) + ((3.8517100000000004e-05 * fVec33[((IOTA - 54) & 127)]) + ((0.0011952499999999999 * fVec33[((IOTA - 53) & 127)]) + ((0.00017855099999999999 * fVec33[((IOTA - 52) & 127)]) + ((0.0020778099999999998 * fVec33[((IOTA - 51) & 127)]) + ((0.0048699899999999994 * fVec33[((IOTA - 50) & 127)]) + ((0.0020168600000000001 * fVec33[((IOTA - 49) & 127)]) + ((0.0011997199999999998 * fVec33[((IOTA - 47) & 127)]) + ((0.0061526599999999999 * fVec33[((IOTA - 46) & 127)]) + ((0.0028706900000000004 * fVec33[((IOTA - 44) & 127)]) + ((0.011077500000000001 * fVec33[((IOTA - 43) & 127)]) + ((0.0022290399999999998 * fVec33[((IOTA - 42) & 127)]) + ((0.0084232300000000003 * fVec33[((IOTA - 39) & 127)]) + ((0.00127378 * fVec33[((IOTA - 38) & 127)]) + ((0.0125606 * fVec33[((IOTA - 34) & 127)]) + ((0.011542200000000001 * fVec33[((IOTA - 31) & 127)]) + ((0.024367400000000001 * fVec33[((IOTA - 30) & 127)]) + ((0.0292041 * fVec33[((IOTA - 18) & 127)]) + ((0.015611 * fVec33[((IOTA - 17) & 127)]) + ((0.0131959 * fVec33[((IOTA - 15) & 127)]) + ((0.0033820999999999999 * fVec33[((IOTA - 13) & 127)]) + ((0.00065433400000000001 * fVec33[((IOTA - 10) & 127)]) + ((0.00012754700000000002 * fVec33[((IOTA - 9) & 127)]) + ((0.00028600400000000002 * fVec33[((IOTA - 8) & 127)]) + ((0.00056964699999999995 * fVec33[((IOTA - 6) & 127)]) + ((0.00055874899999999999 * fVec33[((IOTA - 4) & 127)]) + ((0.000107706 * fVec33[((IOTA - 2) & 127)]) + ((2.3258800000000005e-05 * fVec33[((IOTA - 1) & 127)]) + ((1.5002200000000002e-05 * fTemp33) + ((0.0537481 * fVec33[((IOTA - 26) & 127)]) + ((0.013059400000000001 * fVec33[((IOTA - 23) & 127)]) + (((1.8648999999999999e-06 * fVec34[((IOTA - 126) & 127)]) + ((1.0045e-05 * fVec34[((IOTA - 125) & 127)]) + ((1.8977800000000003e-05 * fVec34[((IOTA - 124) & 127)]) + ((1.9873400000000002e-05 * fVec34[((IOTA - 123) & 127)]) + ((3.4954000000000004e-05 * fVec34[((IOTA - 122) & 127)]) + ((9.3229500000000019e-05 * fVec34[((IOTA - 121) & 127)]) + ((0.00012240800000000001 * fVec34[((IOTA - 120) & 127)]) + ((9.5701199999999998e-05 * fVec34[((IOTA - 119) & 127)]) + ((5.5900900000000005e-05 * fVec34[((IOTA - 115) & 127)]) + ((1.9102600000000002e-05 * fVec34[((IOTA - 114) & 127)]) + ((0.000876507 * fVec34[((IOTA - 91) & 127)]) + ((0.0020406000000000001 * fVec34[((IOTA - 90) & 127)]) + ((0.0013280499999999999 * fVec34[((IOTA - 89) & 127)]) + ((0.0017303100000000001 * fVec34[((IOTA - 88) & 127)]) + ((0.0029776099999999999 * fVec34[((IOTA - 87) & 127)]) + ((0.0025195700000000001 * fVec34[((IOTA - 86) & 127)]) + ((0.0011889400000000001 * fVec34[((IOTA - 83) & 127)]) + ((0.000386788 * fVec34[((IOTA - 81) & 127)]) + ((0.00090610300000000012 * fVec34[((IOTA - 80) & 127)]) + ((0.0014508500000000001 * fVec34[((IOTA - 79) & 127)]) + ((0.00082739399999999996 * fVec34[((IOTA - 78) & 127)]) + ((0.00013990400000000002 * fVec34[((IOTA - 76) & 127)]) + ((0.00174807 * fVec34[((IOTA - 75) & 127)]) + ((0.00102092 * fVec34[((IOTA - 74) & 127)]) + ((0.00235812 * fVec34[((IOTA - 63) & 127)]) + ((0.0021519 * fVec34[((IOTA - 62) & 127)]) + ((7.6654099999999985e-06 * fVec34[((IOTA - 61) & 127)]) + ((0.0022741699999999998 * fVec34[((IOTA - 55) & 127)]) + ((0.0042530099999999998 * fVec34[((IOTA - 54) & 127)]) + ((0.0032282000000000001 * fVec34[((IOTA - 53) & 127)]) + ((0.0041592900000000004 * fVec34[((IOTA - 50) & 127)]) + ((0.0075640600000000001 * fVec34[((IOTA - 49) & 127)]) + ((0.0079603199999999999 * fVec34[((IOTA - 48) & 127)]) + ((0.0030812000000000001 * fVec34[((IOTA - 47) & 127)]) + ((0.00033097600000000002 * fVec34[((IOTA - 43) & 127)]) + ((0.0066906600000000002 * fVec34[((IOTA - 42) & 127)]) + ((0.0081795500000000007 * fVec34[((IOTA - 41) & 127)]) + ((0.00108066 * fVec34[((IOTA - 40) & 127)]) + ((0.0088403900000000001 * fVec34[((IOTA - 36) & 127)]) + ((0.0054466000000000002 * fVec34[((IOTA - 35) & 127)]) + ((0.0040393699999999996 * fVec34[((IOTA - 33) & 127)]) + ((0.033863999999999998 * fVec34[((IOTA - 29) & 127)]) + ((0.0092350000000000002 * fVec34[((IOTA - 28) & 127)]) + ((0.00053732699999999999 * fVec34[((IOTA - 26) & 127)]) + ((0.0043864799999999999 * fVec34[((IOTA - 24) & 127)]) + ((0.0027836500000000004 * fVec34[((IOTA - 23) & 127)]) + ((0.0092729000000000006 * fVec34[((IOTA - 22) & 127)]) + ((0.022299000000000003 * fVec34[((IOTA - 21) & 127)]) + ((0.0012059800000000002 * fVec34[((IOTA - 20) & 127)]) + ((0.025815500000000002 * fVec34[((IOTA - 17) & 127)]) + ((7.0800700000000008e-05 * fVec34[((IOTA - 9) & 127)]) + ((0.00076956600000000007 * fVec34[((IOTA - 8) & 127)]) + ((0.000231146 * fVec34[((IOTA - 5) & 127)]) + ((0.00014766099999999999 * fVec34[((IOTA - 4) & 127)]) + (((1.4833700000000001e-06 * fVec23[((IOTA - 126) & 127)]) + ((3.6973199999999999e-06 * fVec23[((IOTA - 125) & 127)]) + ((8.5058500000000009e-06 * fVec23[((IOTA - 124) & 127)]) + ((4.1470500000000002e-05 * fVec23[((IOTA - 123) & 127)]) + ((7.1901800000000003e-05 * fVec23[((IOTA - 122) & 127)]) + ((3.71676e-05 * fVec23[((IOTA - 121) & 127)]) + ((3.3982700000000002e-05 * fVec23[((IOTA - 119) & 127)]) + ((0.00016550199999999999 * fVec23[((IOTA - 118) & 127)]) + ((0.00015893600000000001 * fVec23[((IOTA - 117) & 127)]) + ((0.00011888700000000002 * fVec23[((IOTA - 116) & 127)]) + ((2.6751600000000003e-05 * fVec23[((IOTA - 115) & 127)]) + ((1.5261800000000004e-05 * fVec23[((IOTA - 114) & 127)]) + ((0.00030627700000000004 * fVec23[((IOTA - 113) & 127)]) + ((0.00036830800000000003 * fVec23[((IOTA - 112) & 127)]) + ((0.000251322 * fVec23[((IOTA - 111) & 127)]) + ((0.00022708 * fVec23[((IOTA - 110) & 127)]) + ((0.000239084 * fVec23[((IOTA - 109) & 127)]) + ((9.1238799999999995e-06 * fVec23[((IOTA - 108) & 127)]) + ((0.00015429699999999999 * fVec23[((IOTA - 90) & 127)]) + ((0.00021972700000000002 * fVec23[((IOTA - 89) & 127)]) + ((0.0011643300000000001 * fVec23[((IOTA - 82) & 127)]) + ((0.00065994200000000006 * fVec23[((IOTA - 77) & 127)]) + ((0.0017905 * fVec23[((IOTA - 76) & 127)]) + ((0.00015571700000000001 * fVec23[((IOTA - 71) & 127)]) + ((0.0044549899999999998 * fVec23[((IOTA - 70) & 127)]) + ((0.0039002500000000005 * fVec23[((IOTA - 69) & 127)]) + ((0.00054205300000000002 * fVec23[((IOTA - 68) & 127)]) + ((0.00164631 * fVec23[((IOTA - 67) & 127)]) + ((0.00128867 * fVec23[((IOTA - 66) & 127)]) + ((0.000377902 * fVec23[((IOTA - 65) & 127)]) + ((0.00227327 * fVec23[((IOTA - 64) & 127)]) + ((0.0030369999999999998 * fVec23[((IOTA - 63) & 127)]) + ((0.0023284899999999999 * fVec23[((IOTA - 62) & 127)]) + ((0.0020450900000000003 * fVec23[((IOTA - 61) & 127)]) + ((0.0038926099999999999 * fVec23[((IOTA - 60) & 127)]) + ((0.0051357799999999995 * fVec23[((IOTA - 59) & 127)]) + ((0.0057548899999999995 * fVec23[((IOTA - 58) & 127)]) + ((0.0110121 * fVec23[((IOTA - 57) & 127)]) + ((0.010980500000000001 * fVec23[((IOTA - 56) & 127)]) + ((0.0074067100000000004 * fVec23[((IOTA - 55) & 127)]) + ((0.0058000299999999994 * fVec23[((IOTA - 54) & 127)]) + ((0.0046881500000000003 * fVec23[((IOTA - 53) & 127)]) + ((0.0079024400000000002 * fVec23[((IOTA - 52) & 127)]) + ((0.0143637 * fVec23[((IOTA - 51) & 127)]) + ((0.018899099999999999 * fVec23[((IOTA - 50) & 127)]) + ((0.016699200000000001 * fVec23[((IOTA - 49) & 127)]) + ((0.0121522 * fVec23[((IOTA - 48) & 127)]) + ((0.011685700000000002 * fVec23[((IOTA - 47) & 127)]) + ((0.0122635 * fVec23[((IOTA - 46) & 127)]) + ((0.017027300000000002 * fVec23[((IOTA - 45) & 127)]) + ((0.019806900000000002 * fVec23[((IOTA - 44) & 127)]) + ((0.017303499999999999 * fVec23[((IOTA - 43) & 127)]) + ((0.017569399999999999 * fVec23[((IOTA - 42) & 127)]) + ((0.016072400000000001 * fVec23[((IOTA - 41) & 127)]) + ((0.0227996 * fVec23[((IOTA - 40) & 127)]) + ((0.016965000000000001 * fVec23[((IOTA - 39) & 127)]) + ((0.017693 * fVec23[((IOTA - 38) & 127)]) + ((0.033336499999999998 * fVec23[((IOTA - 37) & 127)]) + ((0.029073099999999998 * fVec23[((IOTA - 36) & 127)]) + ((0.018621700000000001 * fVec23[((IOTA - 35) & 127)]) + ((0.023295900000000001 * fVec23[((IOTA - 34) & 127)]) + ((0.030269900000000002 * fVec23[((IOTA - 33) & 127)]) + ((0.023498000000000002 * fVec23[((IOTA - 32) & 127)]) + ((0.012867100000000001 * fVec23[((IOTA - 31) & 127)]) + ((0.024658199999999998 * fVec23[((IOTA - 30) & 127)]) + ((0.033071500000000004 * fVec23[((IOTA - 29) & 127)]) + ((0.023601800000000003 * fVec23[((IOTA - 28) & 127)]) + ((0.025422899999999998 * fVec23[((IOTA - 27) & 127)]) + ((0.014210199999999999 * fVec23[((IOTA - 26) & 127)]) + ((0.010567 * fVec23[((IOTA - 25) & 127)]) + ((0.056895100000000004 * fVec23[((IOTA - 24) & 127)]) + ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((1.96889e-05 * fTemp35) + (0.00012713900000000002 * fVec35[((IOTA - 1) & 127)])) + (0.00072445800000000009 * fVec35[((IOTA - 3) & 127)])) + (0.00084005400000000002 * fVec35[((IOTA - 4) & 127)])) + (0.00078251799999999995 * fVec35[((IOTA - 5) & 127)])) + (0.00064681700000000005 * fVec35[((IOTA - 6) & 127)])) + (0.00105561 * fVec35[((IOTA - 7) & 127)])) + (0.00107368 * fVec35[((IOTA - 8) & 127)])) + (0.00055752700000000004 * fVec35[((IOTA - 9) & 127)])) + (0.0020685400000000002 * fVec35[((IOTA - 10) & 127)])) + (0.0007391530000000001 * fVec35[((IOTA - 11) & 127)])) + (0.048941400000000003 * fVec35[((IOTA - 12) & 127)])) + (0.053001199999999998 * fVec35[((IOTA - 13) & 127)])) + (0.046698700000000003 * fVec35[((IOTA - 14) & 127)])) + (0.062211200000000001 * fVec35[((IOTA - 15) & 127)])) + (0.043948600000000004 * fVec35[((IOTA - 16) & 127)])) + (0.081345899999999999 * fVec35[((IOTA - 17) & 127)])) + (0.047424299999999996 * fVec35[((IOTA - 18) & 127)])) + (0.041405900000000002 * fVec35[((IOTA - 19) & 127)])) + (0.069732299999999997 * fVec35[((IOTA - 20) & 127)])) + (0.050380599999999998 * fVec35[((IOTA - 21) & 127)])) + (0.111697 * fVec35[((IOTA - 22) & 127)])) + (0.054464300000000007 * fVec35[((IOTA - 23) & 127)])) + (0.036801199999999999 * fVec35[((IOTA - 25) & 127)])) + (0.042423700000000002 * fVec35[((IOTA - 26) & 127)])) + (0.0075229400000000005 * fVec35[((IOTA - 27) & 127)])) + (0.0123141 * fVec35[((IOTA - 28) & 127)])) + (0.0216826 * fVec35[((IOTA - 29) & 127)])) + (0.017730600000000003 * fVec35[((IOTA - 30) & 127)])) + (0.0080194200000000011 * fVec35[((IOTA - 31) & 127)])) + (0.021074000000000002 * fVec35[((IOTA - 33) & 127)])) + (0.0272114 * fVec35[((IOTA - 34) & 127)])) + (0.0056564199999999997 * fVec35[((IOTA - 35) & 127)])) + (0.010539099999999999 * fVec35[((IOTA - 36) & 127)])) + (0.0081598500000000015 * fVec35[((IOTA - 37) & 127)])) + (0.0060665699999999994 * fVec35[((IOTA - 38) & 127)])) + (0.0072938400000000002 * fVec35[((IOTA - 39) & 127)])) + (0.0014525200000000001 * fVec35[((IOTA - 40) & 127)])) + (0.0049862900000000009 * fVec35[((IOTA - 41) & 127)])) + (0.014038399999999999 * fVec35[((IOTA - 42) & 127)])) + (0.0105579 * fVec35[((IOTA - 43) & 127)])) + (0.00431154 * fVec35[((IOTA - 45) & 127)])) + (0.0084629900000000001 * fVec35[((IOTA - 46) & 127)])) + (0.0007157 * fVec35[((IOTA - 47) & 127)])) + (0.00067166600000000002 * fVec35[((IOTA - 48) & 127)])) + (0.0046483699999999998 * fVec35[((IOTA - 49) & 127)])) + (0.0014356600000000001 * fVec35[((IOTA - 50) & 127)])) + (0.00020930100000000001 * fVec35[((IOTA - 51) & 127)])) + (0.00139635 * fVec35[((IOTA - 52) & 127)])) + (0.0029229899999999999 * fVec35[((IOTA - 53) & 127)])) + (0.0042595000000000003 * fVec35[((IOTA - 54) & 127)])) + (0.0039973999999999999 * fVec35[((IOTA - 55) & 127)])) + (4.49754e-06 * fVec35[((IOTA - 56) & 127)])) + (0.00278079 * fVec35[((IOTA - 58) & 127)])) + (0.0038020800000000002 * fVec35[((IOTA - 59) & 127)])) + (0.0026122100000000002 * fVec35[((IOTA - 60) & 127)])) + (0.00338193 * fVec35[((IOTA - 61) & 127)])) + (0.0064815100000000002 * fVec35[((IOTA - 62) & 127)])) + (0.0067297599999999996 * fVec35[((IOTA - 63) & 127)])) + (0.0038801100000000004 * fVec35[((IOTA - 64) & 127)])) + (0.0029381799999999999 * fVec35[((IOTA - 65) & 127)])) + (0.0016933400000000002 * fVec35[((IOTA - 66) & 127)])) + (0.0028127900000000003 * fVec35[((IOTA - 67) & 127)])) + (0.0033726400000000001 * fVec35[((IOTA - 68) & 127)])) + (0.00072404000000000001 * fVec35[((IOTA - 70) & 127)])) + (0.0019828699999999999 * fVec35[((IOTA - 71) & 127)])) + (0.0039087499999999999 * fVec35[((IOTA - 72) & 127)])) + (0.0053022700000000004 * fVec35[((IOTA - 73) & 127)])) + (0.0036032700000000004 * fVec35[((IOTA - 74) & 127)])) + (0.0053821700000000004 * fVec35[((IOTA - 75) & 127)])) + (0.0046326400000000004 * fVec35[((IOTA - 76) & 127)])) + (0.0020199900000000002 * fVec35[((IOTA - 77) & 127)])) + (0.0020409600000000001 * fVec35[((IOTA - 78) & 127)])) + (0.00144247 * fVec35[((IOTA - 79) & 127)])) + (0.0026692399999999998 * fVec35[((IOTA - 80) & 127)])) + (0.0015368900000000002 * fVec35[((IOTA - 81) & 127)])) + (2.5156400000000002e-05 * fVec35[((IOTA - 83) & 127)])) + (0.0010550900000000001 * fVec35[((IOTA - 84) & 127)])) + (0.0017505699999999999 * fVec35[((IOTA - 85) & 127)])) + (0.0026745600000000003 * fVec35[((IOTA - 86) & 127)])) + (0.00365475 * fVec35[((IOTA - 87) & 127)])) + (0.00193882 * fVec35[((IOTA - 88) & 127)])) + (0.0033512100000000003 * fVec35[((IOTA - 95) & 127)])) + (0.0025739000000000001 * fVec35[((IOTA - 96) & 127)])) + (0.00059498000000000005 * fVec35[((IOTA - 99) & 127)])) + (0.00094503799999999993 * fVec35[((IOTA - 100) & 127)])) + (0.0013272 * fVec35[((IOTA - 101) & 127)])) + (0.00147426 * fVec35[((IOTA - 102) & 127)])) + (0.0018419899999999999 * fVec35[((IOTA - 103) & 127)])) + (0.0012236 * fVec35[((IOTA - 104) & 127)])) + (0.00100501 * fVec35[((IOTA - 105) & 127)])) + (0.0016259900000000001 * fVec35[((IOTA - 106) & 127)])) + (0.0013097499999999999 * fVec35[((IOTA - 107) & 127)])) + (0.00095978899999999995 * fVec35[((IOTA - 108) & 127)])) + (0.000779071 * fVec35[((IOTA - 109) & 127)])) + (0.00070924500000000006 * fVec35[((IOTA - 110) & 127)])) + (0.0010336799999999999 * fVec35[((IOTA - 111) & 127)])) + (0.00050421999999999999 * fVec35[((IOTA - 112) & 127)])) + (0.00042659700000000002 * fVec35[((IOTA - 113) & 127)])) + (0.00050803600000000001 * fVec35[((IOTA - 114) & 127)])) + (0.00050261399999999997 * fVec35[((IOTA - 115) & 127)])) + (0.00038352400000000005 * fVec35[((IOTA - 116) & 127)])) + (0.00016114100000000001 * fVec35[((IOTA - 117) & 127)])) + (0.00020216400000000001 * fVec35[((IOTA - 118) & 127)])) + (0.000195057 * fVec35[((IOTA - 119) & 127)])) + (0.000117308 * fVec35[((IOTA - 120) & 127)])) + (5.5996800000000006e-05 * fVec35[((IOTA - 121) & 127)])) + (7.3980599999999995e-07 * fVec35[((IOTA - 123) & 127)])) + (1.69708e-05 * fVec35[((IOTA - 124) & 127)])) + (7.1374800000000001e-06 * fVec35[((IOTA - 125) & 127)])) + (1.74779e-06 * fVec35[((IOTA - 126) & 127)])) + (0.00027516900000000002 * fVec23[((IOTA - 2) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00018497500000000001 * fVec34[((IOTA - 46) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.021176 * fVec33[((IOTA - 22) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00017575500000000001 * fVec32[((IOTA - 66) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.013509400000000001 * fVec0[((IOTA - 32) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00034814200000000002 * fVec4[((IOTA - 76) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00047378999999999998 * fVec31[((IOTA - 14) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0010471900000000001 * fVec30[((IOTA - 7) & 127)])))))))))))))))))))))))))))))))))))))))))))) + (0.00078433799999999998 * fVec29[((IOTA - 53) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.030915100000000001 * fVec27[((IOTA - 29) & 127)]))))))))))))))))))))))))))))))))))))))))))))))) + (0.00023603400000000001 * fVec6[((IOTA - 3) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (6.5829500000000002e-06 * fVec26[((IOTA - 1) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (5.4750600000000001e-07 * fVec25[((IOTA - 1) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.030204100000000001 * fVec20[((IOTA - 25) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00052553599999999995 * fVec19[((IOTA - 5) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0021927500000000003 * fVec14[((IOTA - 38) & 127)])) + (0.0083352199999999991 * fVec14[((IOTA - 39) & 127)])) + (8.3406000000000007e-05 * fVec14[((IOTA - 40) & 127)])) + (0.0031513300000000004 * fVec14[((IOTA - 42) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (3.6319699999999997e-06 * fTemp5)) + (2.4576800000000002e-05 * fVec5[((IOTA - 2) & 127)])) + (0.00015069900000000002 * fVec5[((IOTA - 4) & 127)])) + (0.00060193700000000009 * fVec5[((IOTA - 8) & 127)])) + (0.000675301 * fVec5[((IOTA - 9) & 127)])) + (0.0011334299999999999 * fVec5[((IOTA - 12) & 127)])) + (0.00047542500000000002 * fVec5[((IOTA - 13) & 127)])) + (0.0059456100000000005 * fVec5[((IOTA - 16) & 127)])) + (0.0126277 * fVec5[((IOTA - 17) & 127)])) + (0.0025068899999999999 * fVec5[((IOTA - 18) & 127)])) + (0.0385717 * fVec5[((IOTA - 21) & 127)])) + (0.0170557 * fVec5[((IOTA - 25) & 127)])) + (0.0126768 * fVec5[((IOTA - 26) & 127)])) + (0.0115049 * fVec5[((IOTA - 30) & 127)])) + (0.0055829800000000004 * fVec5[((IOTA - 33) & 127)])) + (0.0064408899999999995 * fVec5[((IOTA - 34) & 127)])) + (0.000104873 * fVec5[((IOTA - 35) & 127)])) + (0.0071838199999999996 * fVec5[((IOTA - 37) & 127)])) + (0.0011544700000000001 * fVec5[((IOTA - 44) & 127)])) + (0.00097338799999999994 * fVec5[((IOTA - 45) & 127)])) + (0.0016260699999999999 * fVec5[((IOTA - 46) & 127)])) + (0.0020304099999999999 * fVec5[((IOTA - 47) & 127)])) + (0.0019771099999999998 * fVec5[((IOTA - 49) & 127)])) + (0.00125431 * fVec5[((IOTA - 50) & 127)])) + (0.0019231300000000001 * fVec5[((IOTA - 51) & 127)])) + (0.0029441700000000003 * fVec5[((IOTA - 52) & 127)])) + (0.0050931100000000005 * fVec5[((IOTA - 53) & 127)])) + (0.00340691 * fVec5[((IOTA - 54) & 127)])) + (0.00037213200000000001 * fVec5[((IOTA - 57) & 127)])) + (0.000706466 * fVec5[((IOTA - 63) & 127)])) + (0.00020927699999999998 * fVec5[((IOTA - 64) & 127)])) + (0.0028972400000000001 * fVec5[((IOTA - 66) & 127)])) + (0.0038660999999999999 * fVec5[((IOTA - 67) & 127)])) + (0.00062221300000000004 * fVec5[((IOTA - 68) & 127)]))) + (2.1830800000000001e-05 * fVec5[((IOTA - 71) & 127)])) + (0.00124657 * fVec5[((IOTA - 77) & 127)])) + (0.0012989399999999999 * fVec5[((IOTA - 78) & 127)])) + (0.00069349199999999998 * fVec5[((IOTA - 79) & 127)])) + (0.0013639300000000002 * fVec5[((IOTA - 80) & 127)])) + (0.00042755500000000004 * fVec5[((IOTA - 81) & 127)])) + (0.00055465799999999997 * fVec5[((IOTA - 86) & 127)])) + (0.00059551999999999999 * fVec5[((IOTA - 87) & 127)]))))))))))))))))))) + (1.02701e-05 * fVec8[((IOTA - 1) & 127)])) + (0.00014154700000000001 * fVec8[((IOTA - 2) & 127)])) + (0.00046685400000000005 * fVec8[((IOTA - 5) & 127)])) + (0.00035533899999999998 * fVec8[((IOTA - 6) & 127)])) + (0.00086630000000000008 * fVec8[((IOTA - 9) & 127)])) + (0.00099208 * fVec8[((IOTA - 11) & 127)])) + (0.039329700000000002 * fVec8[((IOTA - 14) & 127)])) + (0.0149163 * fVec8[((IOTA - 15) & 127)])) + (0.0064296300000000004 * fVec8[((IOTA - 18) & 127)])) + (0.035226500000000001 * fVec8[((IOTA - 19) & 127)])) + (0.0130171 * fVec8[((IOTA - 20) & 127)])) + (0.0061437900000000005 * fVec8[((IOTA - 21) & 127)])) + (0.0102132 * fVec8[((IOTA - 24) & 127)])) + (0.024535600000000001 * fVec8[((IOTA - 25) & 127)])) + (0.020671599999999998 * fVec8[((IOTA - 26) & 127)])) + (0.023538899999999998 * fVec8[((IOTA - 31) & 127)])) + (0.011447000000000001 * fVec8[((IOTA - 32) & 127)])) + (0.0032104900000000003 * fVec8[((IOTA - 36) & 127)])) + (0.0094747700000000004 * fVec8[((IOTA - 38) & 127)])) + (0.0010198799999999999 * fVec8[((IOTA - 39) & 127)])) + (0.0027844300000000001 * fVec8[((IOTA - 43) & 127)])) + (0.0067384899999999998 * fVec8[((IOTA - 44) & 127)])) + (0.0032535099999999998 * fVec8[((IOTA - 45) & 127)])) + (0.00141698 * fVec8[((IOTA - 48) & 127)])) + (0.0024531600000000002 * fVec8[((IOTA - 50) & 127)])) + (0.0045924500000000005 * fVec8[((IOTA - 51) & 127)])) + (0.0022929000000000001 * fVec8[((IOTA - 52) & 127)])) + (0.000275949 * fVec8[((IOTA - 55) & 127)])) + (0.0032251900000000002 * fVec8[((IOTA - 56) & 127)])) + (0.0035572200000000003 * fVec8[((IOTA - 57) & 127)])) + (0.0024816700000000001 * fVec8[((IOTA - 58) & 127)])) + (0.0008441150000000001 * fVec8[((IOTA - 64) & 127)])) + (0.00126202 * fVec8[((IOTA - 65) & 127)])) + (4.5858600000000002e-06 * fVec8[((IOTA - 66) & 127)])) + (0.00012734500000000001 * fVec8[((IOTA - 67) & 127)])) + (0.00078859399999999999 * fVec8[((IOTA - 70) & 127)])) + (0.0027678099999999999 * fVec8[((IOTA - 71) & 127)])) + (0.00243735 * fVec8[((IOTA - 72) & 127)])) + (0.0010027700000000001 * fVec8[((IOTA - 75) & 127)])) + (0.00079166000000000002 * fVec8[((IOTA - 76) & 127)])) + (0.00167515 * fVec8[((IOTA - 77) & 127)])) + (0.00021579799999999998 * fVec8[((IOTA - 78) & 127)])) + (0.00032569200000000004 * fVec8[((IOTA - 82) & 127)])) + (0.00095692800000000001 * fVec8[((IOTA - 83) & 127)])) + (2.0754000000000002e-05 * fVec8[((IOTA - 84) & 127)])) + (0.00018321300000000002 * fVec8[((IOTA - 87) & 127)])) + (0.00085020799999999998 * fVec8[((IOTA - 88) & 127)])) + (0.00109749 * fVec8[((IOTA - 95) & 127)])) + (0.0013883300000000001 * fVec8[((IOTA - 96) & 127)])) + (0.00038612800000000001 * fVec8[((IOTA - 97) & 127)]))) + (0.00014013400000000001 * fVec8[((IOTA - 99) & 127)])) + (0.00037413600000000001 * fVec8[((IOTA - 100) & 127)]))))) + (0.00049498900000000004 * fVec8[((IOTA - 108) & 127)]))))) + (0.00021690700000000002 * fVec8[((IOTA - 115) & 127)])) + (0.00011256800000000001 * fVec8[((IOTA - 116) & 127)])) + (3.56627e-05 * fVec8[((IOTA - 121) & 127)])) + (7.3778699999999997e-06 * fVec8[((IOTA - 122) & 127)])) + (3.6607499999999997e-07 * fVec8[((IOTA - 123) & 127)])) + (2.7659199999999998e-06 * fVec8[((IOTA - 124) & 127)])) + (3.8413599999999999e-06 * fVec8[((IOTA - 125) & 127)])) + (0.00050295899999999998 * fVec1[((IOTA - 102) & 127)])))))) + (0.00034800800000000002 * fVec1[((IOTA - 106) & 127)])) + (0.00076432900000000012 * fVec1[((IOTA - 107) & 127)])) + (0.000187338 * fVec1[((IOTA - 110) & 127)])) + (0.00062120000000000003 * fVec1[((IOTA - 111) & 127)])) + (0.00025635600000000001 * fVec1[((IOTA - 112) & 127)])) + (2.3915799999999999e-05 * fVec1[((IOTA - 113) & 127)])) + (8.1593800000000005e-06 * fVec1[((IOTA - 115) & 127)])))) + (1.0137500000000001e-05 * fTemp1)) + (4.6548500000000003e-05 * fVec1[((IOTA - 2) & 127)])) + (0.00088798200000000005 * fVec1[((IOTA - 8) & 127)])) + (0.00069891699999999996 * fVec1[((IOTA - 9) & 127)])) + (0.00181913 * fVec1[((IOTA - 13) & 127)])) + (0.0054863400000000001 * fVec1[((IOTA - 15) & 127)])) + (0.0019924000000000001 * fVec1[((IOTA - 16) & 127)])) + (0.013652599999999999 * fVec1[((IOTA - 17) & 127)])) + (0.00159373 * fVec1[((IOTA - 20) & 127)])) + (0.036081500000000002 * fVec1[((IOTA - 21) & 127)])) + (0.0030950299999999999 * fVec1[((IOTA - 24) & 127)])) + (0.037774599999999998 * fVec1[((IOTA - 25) & 127)])) + (0.028828200000000002 * fVec1[((IOTA - 26) & 127)])) + (0.000204141 * fVec1[((IOTA - 29) & 127)])) + (0.0042742800000000001 * fVec1[((IOTA - 31) & 127)])) + (0.0089989399999999987 * fVec1[((IOTA - 32) & 127)])) + (0.0068589700000000007 * fVec1[((IOTA - 33) & 127)])) + (0.0060432200000000002 * fVec1[((IOTA - 34) & 127)])) + (0.0039135200000000002 * fVec1[((IOTA - 36) & 127)])) + (0.00316628 * fVec1[((IOTA - 37) & 127)])) + (0.00133088 * fVec1[((IOTA - 38) & 127)])) + (0.00039082200000000003 * fVec1[((IOTA - 39) & 127)])) + (0.00158516 * fVec1[((IOTA - 44) & 127)])) + (0.0065423600000000005 * fVec1[((IOTA - 45) & 127)])) + (0.00189017 * fVec1[((IOTA - 46) & 127)])) + (0.00057413199999999998 * fVec1[((IOTA - 50) & 127)])) + (0.0020712 * fVec1[((IOTA - 51) & 127)])) + (0.0018052900000000002 * fVec1[((IOTA - 53) & 127)])) + (0.0023703500000000002 * fVec1[((IOTA - 57) & 127)])) + (0.0036706899999999999 * fVec1[((IOTA - 58) & 127)])) + (0.00030227500000000002 * fVec1[((IOTA - 59) & 127)])) + (9.7681400000000017e-05 * fVec1[((IOTA - 63) & 127)])) + (0.00059178400000000004 * fVec1[((IOTA - 64) & 127)])) + (0.00086177900000000002 * fVec1[((IOTA - 65) & 127)])) + (0.00143107 * fVec1[((IOTA - 66) & 127)])) + (0.00028822199999999998 * fVec1[((IOTA - 67) & 127)])) + (0.0016012900000000002 * fVec1[((IOTA - 69) & 127)])) + (0.0020469400000000001 * fVec1[((IOTA - 70) & 127)])) + (0.00059196600000000009 * fVec1[((IOTA - 71) & 127)])) + (0.00073552900000000007 * fVec1[((IOTA - 72) & 127)])) + (0.000178321 * fVec1[((IOTA - 73) & 127)])) + (0.00043909900000000009 * fVec1[((IOTA - 74) & 127)])) + (0.00043622600000000001 * fVec1[((IOTA - 76) & 127)])) + (0.0027763100000000001 * fVec1[((IOTA - 77) & 127)])) + (0.0030928000000000001 * fVec1[((IOTA - 78) & 127)])) + (0.00262714 * fVec1[((IOTA - 79) & 127)])) + (0.00047957900000000005 * fVec1[((IOTA - 82) & 127)])) + (0.0010505599999999999 * fVec1[((IOTA - 86) & 127)])) + (0.00060150800000000006 * fVec1[((IOTA - 90) & 127)])) + (0.0015832200000000002 * fVec1[((IOTA - 91) & 127)]))) + (0.00063118199999999999 * fVec1[((IOTA - 98) & 127)])) + (0.000225169 * fVec1[((IOTA - 99) & 127)])) + (0.00029375200000000004 * fVec2[((IOTA - 4) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.1276500000000001e-05 * fTemp3)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - ((0.019952500000000001 * (fVec25[((IOTA - 32) & 127)] + fVec13[((IOTA - 19) & 127)])) + ((0.0013939500000000001 * (fVec0[((IOTA - 78) & 127)] - fVec16[((IOTA - 58) & 127)])) + ((0.011907399999999999 * (fVec28[((IOTA - 33) & 127)] + fVec21[((IOTA - 23) & 127)])) + ((3.5387599999999999e-07 * fVec2[((IOTA - 126) & 127)]) + ((1.7257199999999999e-07 * fVec2[((IOTA - 124) & 127)]) + ((1.0509000000000001e-05 * fVec2[((IOTA - 123) & 127)]) + ((2.64133e-07 * fVec2[((IOTA - 122) & 127)]) + ((1.88962e-06 * fVec3[((IOTA - 124) & 127)]) + ((1.2972200000000001e-05 * fVec3[((IOTA - 123) & 127)]) + ((1.0935700000000001e-05 * fVec3[((IOTA - 122) & 127)]) + ((1.8612200000000001e-05 * fVec3[((IOTA - 121) & 127)]) + ((3.9623600000000005e-05 * fVec3[((IOTA - 120) & 127)]) + ((6.4674599999999999e-05 * fVec3[((IOTA - 119) & 127)]) + ((3.9744300000000005e-05 * fVec3[((IOTA - 118) & 127)]) + ((6.1891600000000009e-05 * fVec3[((IOTA - 117) & 127)]) + ((0.00013154600000000002 * fVec3[((IOTA - 116) & 127)]) + ((0.00014730600000000002 * fVec3[((IOTA - 115) & 127)]) + ((7.1850599999999999e-05 * fVec3[((IOTA - 114) & 127)]) + ((0.00018714500000000003 * fVec3[((IOTA - 111) & 127)]) + ((0.00013017200000000001 * fVec3[((IOTA - 110) & 127)]) + ((0.00016379800000000002 * fVec3[((IOTA - 106) & 127)]) + ((6.8155400000000015e-05 * fVec3[((IOTA - 105) & 127)]) + ((0.000356807 * fVec3[((IOTA - 94) & 127)]) + ((0.00010998000000000001 * fVec3[((IOTA - 92) & 127)]) + ((0.00137693 * fVec3[((IOTA - 91) & 127)]) + ((0.00038515799999999997 * fVec3[((IOTA - 90) & 127)]) + ((0.0013470000000000001 * fVec3[((IOTA - 87) & 127)]) + ((0.000719942 * fVec3[((IOTA - 86) & 127)]) + ((0.00032487800000000002 * fVec3[((IOTA - 83) & 127)]) + ((3.1829800000000005e-05 * fVec3[((IOTA - 82) & 127)]) + ((0.0013521000000000002 * fVec3[((IOTA - 79) & 127)]) + ((0.0020066400000000001 * fVec3[((IOTA - 78) & 127)]) + ((0.0012834600000000002 * fVec3[((IOTA - 74) & 127)]) + ((0.0013223400000000002 * fVec3[((IOTA - 73) & 127)]) + ((0.00066997600000000008 * fVec3[((IOTA - 71) & 127)]) + ((0.00028885500000000003 * fVec3[((IOTA - 68) & 127)]) + ((0.00049617300000000004 * fVec3[((IOTA - 67) & 127)]) + ((0.00035371400000000004 * fVec3[((IOTA - 66) & 127)]) + ((0.00021810000000000002 * fVec3[((IOTA - 65) & 127)]) + ((0.00046019100000000004 * fVec3[((IOTA - 64) & 127)]) + ((0.00115073 * fVec3[((IOTA - 63) & 127)]) + ((0.00097666000000000007 * fVec3[((IOTA - 62) & 127)]) + ((0.00151538 * fVec3[((IOTA - 59) & 127)]) + ((0.00084158200000000001 * fVec3[((IOTA - 58) & 127)]) + ((0.0053566900000000008 * fVec3[((IOTA - 54) & 127)]) + ((0.0056201200000000002 * fVec3[((IOTA - 53) & 127)]) + ((0.0026897799999999997 * fVec3[((IOTA - 52) & 127)]) + ((8.6894300000000006e-05 * fVec3[((IOTA - 50) & 127)]) + ((0.0021847699999999999 * fVec3[((IOTA - 49) & 127)]) + ((0.000149884 * fVec3[((IOTA - 48) & 127)]) + ((0.0011263499999999999 * fVec3[((IOTA - 45) & 127)]) + ((0.00509335 * fVec3[((IOTA - 41) & 127)]) + ((0.0011182499999999999 * fVec3[((IOTA - 38) & 127)]) + ((0.0016788300000000001 * fVec3[((IOTA - 37) & 127)]) + ((0.008711700000000001 * fVec3[((IOTA - 33) & 127)]) + ((0.0095986700000000001 * fVec3[((IOTA - 32) & 127)]) + ((0.0029319899999999998 * fVec3[((IOTA - 31) & 127)]) + ((0.0060741800000000002 * fVec3[((IOTA - 29) & 127)]) + ((0.012128399999999999 * fVec3[((IOTA - 28) & 127)]) + ((0.022111800000000001 * fVec3[((IOTA - 27) & 127)]) + ((0.0070419100000000002 * fVec3[((IOTA - 25) & 127)]) + ((0.025463 * fVec3[((IOTA - 21) & 127)]) + ((0.0094445700000000011 * fVec3[((IOTA - 20) & 127)]) + ((0.040986200000000007 * fVec3[((IOTA - 17) & 127)]) + ((0.0232394 * fVec3[((IOTA - 16) & 127)]) + ((0.0092197700000000004 * fVec3[((IOTA - 12) & 127)]) + ((0.00099274799999999989 * fVec3[((IOTA - 11) & 127)]) + ((0.00090807000000000008 * fVec3[((IOTA - 9) & 127)]) + ((1.3656800000000001e-05 * fVec3[((IOTA - 8) & 127)]) + ((0.00047334800000000006 * fVec3[((IOTA - 7) & 127)]) + ((0.00056994300000000006 * fVec3[((IOTA - 5) & 127)]) + ((0.00016988300000000001 * fVec3[((IOTA - 4) & 127)]) + ((0.000533286 * fVec3[((IOTA - 3) & 127)]) + (((6.0561999999999997e-06 * fVec2[((IOTA - 120) & 127)]) + ((1.85995e-05 * fVec2[((IOTA - 121) & 127)]) + ((1.31045e-05 * fVec2[((IOTA - 114) & 127)]) + ((7.8594199999999994e-06 * fVec2[((IOTA - 119) & 127)]) + ((0.000108287 * fVec2[((IOTA - 111) & 127)]) + ((8.0248799999999996e-05 * fVec2[((IOTA - 110) & 127)]) + ((0.00010179300000000001 * fVec2[((IOTA - 107) & 127)]) + ((6.9430699999999999e-05 * fVec2[((IOTA - 101) & 127)]) + ((0.00037864900000000005 * fVec2[((IOTA - 98) & 127)]) + ((0.00031944200000000002 * fVec2[((IOTA - 97) & 127)]) + ((0.00063309400000000006 * fVec2[((IOTA - 95) & 127)]) + ((0.00154521 * fVec2[((IOTA - 94) & 127)]) + ((0.00032423500000000003 * fVec2[((IOTA - 93) & 127)]) + ((0.00040066800000000002 * fVec2[((IOTA - 92) & 127)]) + ((0.0011881600000000002 * fVec2[((IOTA - 91) & 127)]) + ((0.00014360999999999999 * fVec2[((IOTA - 88) & 127)]) + ((0.0012552500000000001 * fVec2[((IOTA - 87) & 127)]) + ((0.0011276200000000002 * fVec2[((IOTA - 86) & 127)]) + ((0.0013305999999999999 * fVec2[((IOTA - 85) & 127)]) + ((0.00220105 * fVec2[((IOTA - 84) & 127)]) + ((0.00028070500000000002 * fVec2[((IOTA - 83) & 127)]) + ((0.00019803400000000001 * fVec2[((IOTA - 81) & 127)]) + ((0.000719536 * fVec2[((IOTA - 77) & 127)]) + ((0.00023482 * fVec2[((IOTA - 75) & 127)]) + ((0.00053795000000000004 * fVec2[((IOTA - 73) & 127)]) + ((0.00141146 * fVec2[((IOTA - 72) & 127)]) + ((0.00095293700000000005 * fVec2[((IOTA - 71) & 127)]) + ((0.0013829300000000001 * fVec2[((IOTA - 67) & 127)]) + ((0.0024797400000000002 * fVec2[((IOTA - 66) & 127)]) + ((0.0021595200000000003 * fVec2[((IOTA - 65) & 127)]) + ((0.00055027799999999997 * fVec2[((IOTA - 64) & 127)]) + ((0.00037787200000000002 * fVec2[((IOTA - 61) & 127)]) + ((0.0017943199999999999 * fVec2[((IOTA - 58) & 127)]) + ((0.00043604399999999996 * fVec2[((IOTA - 57) & 127)]) + ((0.0030510400000000001 * fVec2[((IOTA - 54) & 127)]) + ((0.0032679499999999999 * fVec2[((IOTA - 53) & 127)]) + ((0.0016038300000000001 * fVec2[((IOTA - 52) & 127)]) + ((0.0023069200000000001 * fVec2[((IOTA - 51) & 127)]) + ((0.00023969600000000002 * fVec2[((IOTA - 47) & 127)]) + ((0.0012663199999999998 * fVec2[((IOTA - 46) & 127)]) + ((0.0024327299999999997 * fVec2[((IOTA - 45) & 127)]) + ((0.0029054900000000002 * fVec2[((IOTA - 44) & 127)]) + ((0.0022215600000000005 * fVec2[((IOTA - 41) & 127)]) + ((0.0013207500000000001 * fVec2[((IOTA - 40) & 127)]) + ((0.0072914300000000007 * fVec2[((IOTA - 39) & 127)]) + ((0.00412913 * fVec2[((IOTA - 38) & 127)]) + ((0.0036310699999999997 * fVec2[((IOTA - 35) & 127)]) + ((0.024170899999999999 * fVec2[((IOTA - 34) & 127)]) + ((0.0017220500000000001 * fVec2[((IOTA - 33) & 127)]) + ((0.0122118 * fVec2[((IOTA - 28) & 127)]) + ((0.00166183 * fVec2[((IOTA - 27) & 127)]) + ((0.019867699999999999 * fVec2[((IOTA - 25) & 127)]) + ((0.0369366 * fVec2[((IOTA - 22) & 127)]) + ((0.032542599999999998 * fVec2[((IOTA - 19) & 127)]) + ((0.034134699999999997 * fVec2[((IOTA - 18) & 127)]) + ((0.0042810899999999995 * fVec2[((IOTA - 14) & 127)]) + ((0.00041230200000000008 * fVec2[((IOTA - 13) & 127)]) + ((0.0064589699999999996 * fVec2[((IOTA - 12) & 127)]) + ((0.0015071799999999999 * fVec2[((IOTA - 10) & 127)]) + ((0.00079139900000000003 * fVec2[((IOTA - 9) & 127)]) + ((0.00093245700000000003 * fVec2[((IOTA - 6) & 127)]) + ((0.00020629700000000001 * fVec2[((IOTA - 5) & 127)]) + ((0.00015997800000000002 * fVec2[((IOTA - 3) & 127)]) + ((5.5292199999999999e-05 * fVec2[((IOTA - 2) & 127)]) + ((4.2160500000000004e-05 * fVec2[((IOTA - 1) & 127)]) + ((((((0.00089910999999999995 * fVec1[((IOTA - 96) & 127)]) + ((((0.00082320800000000008 * fVec1[((IOTA - 92) & 127)]) + ((0.00056911199999999998 * fVec1[((IOTA - 89) & 127)]) + ((((((((((((((((((((((((((((((((((((((((((1.3101100000000002e-05 * fVec1[((IOTA - 117) & 127)]) + (((((((7.8918999999999994e-07 * fVec1[((IOTA - 126) & 127)]) + ((1.43513e-06 * fVec1[((IOTA - 125) & 127)]) + ((2.0324300000000002e-06 * fVec1[((IOTA - 120) & 127)]) + (((((((3.3404600000000002e-05 * fVec8[((IOTA - 113) & 127)]) + (((0.00018796700000000001 * fVec8[((IOTA - 110) & 127)]) + (((((((((((((((((((((((((((((((((((((((((((((((((((((((3.3095899999999998e-06 * fVec5[((IOTA - 125) & 127)]) + ((4.7186399999999994e-07 * fVec5[((IOTA - 124) & 127)]) + ((7.4174700000000007e-05 * fVec5[((IOTA - 120) & 127)]) + ((7.7359000000000003e-05 * fVec5[((IOTA - 119) & 127)]) + ((6.394730000000001e-05 * fVec5[((IOTA - 117) & 127)]) + ((0.00017427100000000001 * fVec5[((IOTA - 116) & 127)]) + ((0.00012311099999999999 * fVec5[((IOTA - 115) & 127)]) + ((7.1814100000000008e-05 * fVec5[((IOTA - 114) & 127)]) + ((1.4596900000000001e-05 * fVec5[((IOTA - 113) & 127)]) + ((0.00024714399999999998 * fVec5[((IOTA - 112) & 127)]) + ((0.00046465699999999999 * fVec5[((IOTA - 111) & 127)]) + ((0.000294806 * fVec5[((IOTA - 110) & 127)]) + ((0.00024303000000000001 * fVec5[((IOTA - 109) & 127)]) + ((0.00020111799999999999 * fVec5[((IOTA - 108) & 127)]) + ((4.3534300000000008e-05 * fVec5[((IOTA - 107) & 127)]) + ((0.000132294 * fVec5[((IOTA - 106) & 127)]) + ((0.00023640900000000001 * fVec5[((IOTA - 105) & 127)]) + ((0.00030904199999999999 * fVec5[((IOTA - 104) & 127)]) + ((0.00048926600000000003 * fVec5[((IOTA - 103) & 127)]) + ((0.00014898900000000001 * fVec5[((IOTA - 102) & 127)]) + ((0.00036149400000000002 * fVec5[((IOTA - 95) & 127)]) + ((0.00048925400000000006 * fVec5[((IOTA - 89) & 127)]) + ((0.00118464 * fVec5[((IOTA - 88) & 127)]) + ((0.00070410700000000004 * fVec5[((IOTA - 85) & 127)]) + ((0.0024227599999999999 * fVec5[((IOTA - 84) & 127)]) + ((0.00265679 * fVec5[((IOTA - 83) & 127)]) + ((0.00053618700000000004 * fVec5[((IOTA - 82) & 127)]) + ((0.00093539700000000003 * fVec5[((IOTA - 76) & 127)]) + ((0.0022656299999999998 * fVec5[((IOTA - 75) & 127)]) + ((0.0033662499999999999 * fVec5[((IOTA - 74) & 127)]) + ((0.0013667 * fVec5[((IOTA - 73) & 127)]) + ((0.0013000100000000001 * fVec5[((IOTA - 72) & 127)]) + ((0.00085172299999999998 * fVec5[((IOTA - 69) & 127)]) + ((0.00092161000000000012 * fVec5[((IOTA - 65) & 127)]) + ((0.00096749600000000009 * fVec5[((IOTA - 62) & 127)]) + ((0.00208793 * fVec5[((IOTA - 61) & 127)]) + ((0.0039472500000000002 * fVec5[((IOTA - 60) & 127)]) + ((0.0035667300000000002 * fVec5[((IOTA - 59) & 127)]) + ((0.0015280199999999999 * fVec5[((IOTA - 58) & 127)]) + ((0.00135731 * fVec5[((IOTA - 56) & 127)]) + ((0.0024045100000000003 * fVec5[((IOTA - 55) & 127)]) + ((0.00179843 * fVec5[((IOTA - 48) & 127)]) + ((0.00093652300000000009 * fVec5[((IOTA - 43) & 127)]) + ((0.00062249400000000002 * fVec5[((IOTA - 42) & 127)]) + ((0.0034119799999999998 * fVec5[((IOTA - 41) & 127)]) + ((0.00098740600000000013 * fVec5[((IOTA - 40) & 127)]) + ((0.0055919800000000007 * fVec5[((IOTA - 39) & 127)]) + ((0.0010025500000000001 * fVec5[((IOTA - 38) & 127)]) + ((0.00663592 * fVec5[((IOTA - 36) & 127)]) + ((0.0047425499999999999 * fVec5[((IOTA - 32) & 127)]) + ((0.0062932100000000005 * fVec5[((IOTA - 31) & 127)]) + ((0.010758799999999999 * fVec5[((IOTA - 29) & 127)]) + ((0.0038245200000000001 * fVec5[((IOTA - 28) & 127)]) + ((0.0112476 * fVec5[((IOTA - 27) & 127)]) + ((0.016027 * fVec5[((IOTA - 24) & 127)]) + ((0.0046430400000000002 * fVec5[((IOTA - 23) & 127)]) + ((0.0042897200000000003 * fVec5[((IOTA - 22) & 127)]) + ((0.00073910200000000005 * fVec5[((IOTA - 20) & 127)]) + ((0.043083799999999998 * fVec5[((IOTA - 19) & 127)]) + ((0.00064792100000000009 * fVec5[((IOTA - 15) & 127)]) + ((0.0040079500000000006 * fVec5[((IOTA - 14) & 127)]) + ((0.00044004100000000001 * fVec5[((IOTA - 11) & 127)]) + ((0.00087964000000000011 * fVec5[((IOTA - 10) & 127)]) + ((0.000268464 * fVec5[((IOTA - 7) & 127)]) + ((0.00026824800000000001 * fVec5[((IOTA - 6) & 127)]) + ((8.4505199999999992e-05 * fVec5[((IOTA - 5) & 127)]) + ((0.000134394 * fVec5[((IOTA - 3) & 127)]) + (((1.6301099999999998e-07 * fVec7[((IOTA - 126) & 127)]) + ((3.7258200000000002e-07 * fVec7[((IOTA - 124) & 127)]) + ((1.4570900000000001e-05 * fVec7[((IOTA - 123) & 127)]) + ((1.0674400000000001e-05 * fVec7[((IOTA - 122) & 127)]) + ((6.8187499999999997e-06 * fVec7[((IOTA - 118) & 127)]) + ((1.22155e-05 * fVec7[((IOTA - 117) & 127)]) + ((0.0043432500000000008 * fVec7[((IOTA - 43) & 127)]) + ((0.0026580699999999998 * fVec7[((IOTA - 42) & 127)]) + ((0.00046081399999999998 * fVec7[((IOTA - 38) & 127)]) + ((0.000349336 * fVec7[((IOTA - 37) & 127)]) + ((0.017148099999999999 * fVec7[((IOTA - 36) & 127)]) + ((0.0011150800000000001 * fVec7[((IOTA - 33) & 127)]) + ((0.0037448400000000001 * fVec7[((IOTA - 32) & 127)]) + ((0.0050101600000000005 * fVec7[((IOTA - 31) & 127)]) + ((0.014650700000000001 * fVec7[((IOTA - 29) & 127)]) + ((0.0095669599999999994 * fVec7[((IOTA - 24) & 127)]) + ((0.0066888099999999999 * fVec7[((IOTA - 23) & 127)]) + ((0.0362081 * fVec7[((IOTA - 22) & 127)]) + ((0.0014289800000000001 * fVec7[((IOTA - 19) & 127)]) + ((0.034642600000000003 * fVec7[((IOTA - 17) & 127)]) + ((0.015890000000000001 * fVec7[((IOTA - 16) & 127)]) + ((0.0022824399999999997 * fVec7[((IOTA - 13) & 127)]) + ((0.0135867 * fVec7[((IOTA - 12) & 127)]) + ((0.00120929 * fVec7[((IOTA - 10) & 127)]) + ((0.00068705900000000006 * fVec7[((IOTA - 8) & 127)]) + ((4.5115800000000004e-06 * fVec7[((IOTA - 7) & 127)]) + ((0.00045277399999999997 * fVec7[((IOTA - 4) & 127)]) + ((0.000126525 * fVec7[((IOTA - 3) & 127)]) + ((5.86263e-06 * fVec7[((IOTA - 1) & 127)]) + ((1.0597700000000002e-05 * fTemp7) + ((0.0039060700000000002 * fVec7[((IOTA - 50) & 127)]) + ((0.00260247 * fVec7[((IOTA - 49) & 127)]) + ((0.00248036 * fVec7[((IOTA - 48) & 127)]) + ((0.000175064 * fVec7[((IOTA - 113) & 127)]) + ((1.3098900000000001e-05 * fVec7[((IOTA - 112) & 127)]) + ((4.29445e-06 * fVec7[((IOTA - 109) & 127)]) + ((0.00026637400000000005 * fVec7[((IOTA - 108) & 127)]) + ((6.0177699999999998e-05 * fVec7[((IOTA - 107) & 127)]) + ((3.2786800000000003e-05 * fVec7[((IOTA - 105) & 127)]) + ((2.6471800000000001e-06 * fVec7[((IOTA - 103) & 127)]) + ((0.00017389 * fVec7[((IOTA - 100) & 127)]) + ((0.00025139699999999999 * fVec7[((IOTA - 99) & 127)]) + ((0.00061095100000000009 * fVec7[((IOTA - 98) & 127)]) + ((0.0010470500000000001 * fVec7[((IOTA - 97) & 127)]) + ((0.00048894300000000004 * fVec7[((IOTA - 96) & 127)]) + ((0.00089744900000000003 * fVec7[((IOTA - 91) & 127)]) + ((0.0015826800000000002 * fVec7[((IOTA - 90) & 127)]) + ((0.00059544000000000003 * fVec7[((IOTA - 89) & 127)]) + ((0.00041056299999999997 * fVec7[((IOTA - 85) & 127)]) + ((0.0018416800000000001 * fVec7[((IOTA - 84) & 127)]) + ((0.0019494400000000002 * fVec7[((IOTA - 83) & 127)]) + ((0.00045673100000000004 * fVec7[((IOTA - 82) & 127)]) + ((0.00017357700000000001 * fVec7[((IOTA - 81) & 127)]) + ((7.5409600000000011e-05 * fVec7[((IOTA - 80) & 127)]) + ((3.4814800000000004e-05 * fVec7[((IOTA - 77) & 127)]) + ((0.00077242300000000005 * fVec7[((IOTA - 73) & 127)]) + ((0.00099550199999999989 * fVec7[((IOTA - 69) & 127)]) + ((0.0017788900000000002 * fVec7[((IOTA - 68) & 127)]) + ((0.0013746100000000001 * fVec7[((IOTA - 64) & 127)]) + ((0.00280854 * fVec7[((IOTA - 63) & 127)]) + ((0.00039799099999999999 * fVec7[((IOTA - 62) & 127)]) + ((0.00034907800000000001 * fVec7[((IOTA - 60) & 127)]) + ((0.0013482700000000002 * fVec7[((IOTA - 59) & 127)]) + ((0.0013237000000000001 * fVec7[((IOTA - 58) & 127)]) + ((0.00276925 * fVec7[((IOTA - 57) & 127)]) + ((0.0042720800000000001 * fVec7[((IOTA - 56) & 127)]) + ((0.0044575300000000003 * fVec7[((IOTA - 55) & 127)]) + ((0.00051885799999999997 * fVec7[((IOTA - 54) & 127)]) + ((4.6913299999999994e-07 * fVec9[((IOTA - 126) & 127)]) + ((3.87501e-06 * fVec9[((IOTA - 125) & 127)]) + ((5.002449999999999e-06 * fVec9[((IOTA - 124) & 127)]) + ((3.9637299999999994e-06 * fVec9[((IOTA - 123) & 127)]) + ((9.1651900000000009e-06 * fVec9[((IOTA - 122) & 127)]) + ((1.4090200000000001e-05 * fVec9[((IOTA - 121) & 127)]) + ((7.5314999999999998e-06 * fVec9[((IOTA - 120) & 127)]) + ((4.5760099999999997e-06 * fVec9[((IOTA - 119) & 127)]) + ((7.1657300000000003e-05 * fVec9[((IOTA - 118) & 127)]) + ((0.00062549000000000003 * fVec9[((IOTA - 60) & 127)]) + ((0.00020057500000000001 * fVec9[((IOTA - 57) & 127)]) + ((0.00034310999999999999 * fVec9[((IOTA - 56) & 127)]) + ((0.0011041099999999999 * fVec9[((IOTA - 55) & 127)]) + ((0.00027130399999999999 * fVec9[((IOTA - 54) & 127)]) + ((0.00447439 * fVec9[((IOTA - 48) & 127)]) + ((0.0048625600000000001 * fVec9[((IOTA - 47) & 127)]) + ((0.0040076400000000007 * fVec9[((IOTA - 43) & 127)]) + ((0.0092723200000000006 * fVec9[((IOTA - 42) & 127)]) + ((0.0024687199999999998 * fVec9[((IOTA - 41) & 127)]) + ((0.0021369100000000001 * fVec9[((IOTA - 38) & 127)]) + ((0.0107259 * fVec9[((IOTA - 35) & 127)]) + ((0.0107476 * fVec9[((IOTA - 34) & 127)]) + ((0.0022086499999999999 * fVec9[((IOTA - 33) & 127)]) + ((0.0098775700000000004 * fVec9[((IOTA - 32) & 127)]) + ((0.0118732 * fVec9[((IOTA - 31) & 127)]) + ((0.0052917800000000003 * fVec9[((IOTA - 30) & 127)]) + ((0.0050746000000000003 * fVec9[((IOTA - 24) & 127)]) + ((0.0089725199999999995 * fVec9[((IOTA - 23) & 127)]) + ((0.044024900000000006 * fVec9[((IOTA - 22) & 127)]) + ((0.039155500000000003 * fVec9[((IOTA - 21) & 127)]) + ((0.037087799999999997 * fVec9[((IOTA - 20) & 127)]) + ((0.017778200000000001 * fVec9[((IOTA - 19) & 127)]) + ((0.011974100000000001 * fVec9[((IOTA - 12) & 127)]) + ((0.0073849099999999997 * fVec9[((IOTA - 11) & 127)]) + ((7.1621100000000004e-05 * fVec9[((IOTA - 9) & 127)]) + ((0.00019713 * fVec9[((IOTA - 8) & 127)]) + ((0.00036027699999999999 * fVec9[((IOTA - 7) & 127)]) + ((0.0012823400000000001 * fVec9[((IOTA - 6) & 127)]) + ((4.5651900000000001e-06 * fVec9[((IOTA - 4) & 127)]) + ((0.00185713 * fVec9[((IOTA - 64) & 127)]) + ((0.00040374999999999997 * fVec9[((IOTA - 62) & 127)]) + ((8.9802400000000006e-05 * fVec9[((IOTA - 112) & 127)]) + ((0.00021085600000000004 * fVec9[((IOTA - 111) & 127)]) + ((0.00018475699999999999 * fVec9[((IOTA - 109) & 127)]) + ((0.000471096 * fVec9[((IOTA - 106) & 127)]) + ((0.00047116600000000002 * fVec9[((IOTA - 105) & 127)]) + ((2.0109e-05 * fVec9[((IOTA - 104) & 127)]) + ((0.000713545 * fVec9[((IOTA - 98) & 127)]) + ((0.0010885700000000001 * fVec9[((IOTA - 97) & 127)]) + ((0.0018384899999999999 * fVec9[((IOTA - 96) & 127)]) + ((0.00138243 * fVec9[((IOTA - 95) & 127)]) + ((0.000109815 * fVec9[((IOTA - 93) & 127)]) + ((0.00094006000000000016 * fVec9[((IOTA - 88) & 127)]) + ((0.0011530800000000001 * fVec9[((IOTA - 87) & 127)]) + ((0.00094841900000000004 * fVec9[((IOTA - 86) & 127)]) + ((0.00065421300000000006 * fVec9[((IOTA - 85) & 127)]) + ((0.00025139500000000001 * fVec9[((IOTA - 61) & 127)]) + ((0.0004991240000000001 * fVec9[((IOTA - 80) & 127)]) + ((0.00065653400000000007 * fVec9[((IOTA - 79) & 127)]) + ((0.00054983199999999999 * fVec9[((IOTA - 78) & 127)]) + ((0.0020529700000000003 * fVec9[((IOTA - 77) & 127)]) + ((0.0026922199999999999 * fVec9[((IOTA - 76) & 127)]) + ((0.00027834600000000001 * fVec9[((IOTA - 72) & 127)]) + ((0.000385146 * fVec9[((IOTA - 71) & 127)]) + ((0.0014043900000000002 * fVec9[((IOTA - 70) & 127)]) + ((0.00036717 * fVec9[((IOTA - 69) & 127)]) + ((0.00046783600000000001 * fVec9[((IOTA - 66) & 127)]) + ((0.0017735000000000001 * fVec9[((IOTA - 65) & 127)]) + ((4.9855999999999993e-07 * fVec10[((IOTA - 126) & 127)]) + ((3.50232e-06 * fVec10[((IOTA - 123) & 127)]) + ((1.4280600000000002e-05 * fVec10[((IOTA - 122) & 127)]) + ((1.4047300000000002e-05 * fVec10[((IOTA - 119) & 127)]) + ((4.6408600000000002e-05 * fVec10[((IOTA - 118) & 127)]) + ((5.87972e-05 * fVec10[((IOTA - 117) & 127)]) + ((0.0012798899999999999 * fVec10[((IOTA - 68) & 127)]) + ((0.0018695900000000002 * fVec10[((IOTA - 67) & 127)]) + ((0.00186269 * fVec10[((IOTA - 66) & 127)]) + ((0.0026860300000000003 * fVec10[((IOTA - 65) & 127)]) + ((0.0032383700000000004 * fVec10[((IOTA - 64) & 127)]) + ((0.00279993 * fVec10[((IOTA - 63) & 127)]) + ((0.0019108400000000002 * fVec10[((IOTA - 62) & 127)]) + ((0.0026381999999999998 * fVec10[((IOTA - 61) & 127)]) + ((0.0026963499999999997 * fVec10[((IOTA - 60) & 127)]) + ((0.00086811600000000005 * fVec10[((IOTA - 59) & 127)]) + ((0.0024559999999999998 * fVec10[((IOTA - 48) & 127)]) + ((0.00250409 * fVec10[((IOTA - 44) & 127)]) + ((0.0036837900000000002 * fVec10[((IOTA - 41) & 127)]) + ((0.0024353000000000001 * fVec10[((IOTA - 40) & 127)]) + ((0.0075394699999999995 * fVec10[((IOTA - 37) & 127)]) + ((0.0044009499999999998 * fVec10[((IOTA - 36) & 127)]) + ((0.0072411400000000001 * fVec10[((IOTA - 32) & 127)]) + ((0.0075611899999999998 * fVec10[((IOTA - 31) & 127)]) + ((0.0048946199999999997 * fVec10[((IOTA - 28) & 127)]) + ((0.0098907100000000005 * fVec10[((IOTA - 25) & 127)]) + ((0.0060862800000000003 * fVec10[((IOTA - 22) & 127)]) + ((0.013805099999999999 * fVec10[((IOTA - 20) & 127)]) + ((0.010487100000000001 * fVec10[((IOTA - 19) & 127)]) + ((0.0070100300000000004 * fVec10[((IOTA - 17) & 127)]) + ((0.0041332800000000005 * fVec10[((IOTA - 14) & 127)]) + ((0.00164412 * fVec10[((IOTA - 13) & 127)]) + ((0.00029239700000000001 * fVec10[((IOTA - 11) & 127)]) + ((1.1881600000000002e-05 * fVec10[((IOTA - 10) & 127)]) + ((2.8156500000000004e-05 * fVec10[((IOTA - 8) & 127)]) + ((0.00014026000000000002 * fVec10[((IOTA - 7) & 127)]) + ((0.00022704600000000001 * fVec10[((IOTA - 5) & 127)]) + ((7.3559200000000005e-05 * fVec10[((IOTA - 3) & 127)]) + ((5.2513899999999999e-05 * fVec10[((IOTA - 1) & 127)]) + ((0.00087314000000000011 * fVec10[((IOTA - 72) & 127)]) + ((0.00016971900000000001 * fVec10[((IOTA - 114) & 127)]) + ((0.000160941 * fVec10[((IOTA - 113) & 127)]) + ((9.4163700000000008e-05 * fVec10[((IOTA - 112) & 127)]) + ((0.00011364000000000002 * fVec10[((IOTA - 110) & 127)]) + ((1.29874e-06 * fVec10[((IOTA - 109) & 127)]) + ((0.00019798300000000002 * fVec10[((IOTA - 107) & 127)]) + ((0.00029092600000000005 * fVec10[((IOTA - 106) & 127)]) + ((0.000558027 * fVec10[((IOTA - 105) & 127)]) + ((6.9544300000000004e-05 * fVec10[((IOTA - 104) & 127)]) + ((0.00037840699999999998 * fVec10[((IOTA - 102) & 127)]) + ((0.00017562900000000001 * fVec10[((IOTA - 101) & 127)]) + ((8.1890699999999998e-05 * fVec10[((IOTA - 98) & 127)]) + ((0.000828216 * fVec10[((IOTA - 97) & 127)]) + ((7.2374799999999997e-05 * fVec10[((IOTA - 96) & 127)]) + ((0.00053566200000000012 * fVec10[((IOTA - 93) & 127)]) + ((0.00132091 * fVec10[((IOTA - 92) & 127)]) + ((0.00085476600000000008 * fVec10[((IOTA - 91) & 127)]) + ((0.00039815900000000003 * fVec10[((IOTA - 90) & 127)]) + ((0.00078330700000000001 * fVec10[((IOTA - 85) & 127)]) + ((0.0010126200000000001 * fVec10[((IOTA - 81) & 127)]) + ((0.00177717 * fVec10[((IOTA - 80) & 127)]) + ((0.00075712800000000003 * fVec10[((IOTA - 79) & 127)]) + ((0.00049644899999999994 * fVec10[((IOTA - 78) & 127)]) + ((8.3132699999999988e-07 * fVec11[((IOTA - 126) & 127)]) + ((8.32524e-07 * fVec11[((IOTA - 125) & 127)]) + ((3.6526999999999999e-07 * fVec11[((IOTA - 123) & 127)]) + ((7.4674300000000003e-06 * fVec11[((IOTA - 119) & 127)]) + ((0.000100599 * fVec11[((IOTA - 116) & 127)]) + ((0.00018938700000000001 * fVec11[((IOTA - 115) & 127)]) + ((0.00015979300000000001 * fVec11[((IOTA - 114) & 127)]) + ((0.000207328 * fVec11[((IOTA - 67) & 127)]) + ((0.0021144200000000001 * fVec11[((IOTA - 66) & 127)]) + ((0.00111618 * fVec11[((IOTA - 65) & 127)]) + ((0.0027910400000000003 * fVec11[((IOTA - 64) & 127)]) + ((0.0056323800000000002 * fVec11[((IOTA - 63) & 127)]) + ((0.0021717500000000001 * fVec11[((IOTA - 62) & 127)]) + ((0.00153181 * fVec11[((IOTA - 59) & 127)]) + ((0.0024682100000000002 * fVec11[((IOTA - 58) & 127)]) + ((0.0013744400000000002 * fVec11[((IOTA - 55) & 127)]) + ((0.00065952400000000009 * fVec11[((IOTA - 54) & 127)]) + ((0.00066730700000000001 * fVec11[((IOTA - 53) & 127)]) + ((0.0020160500000000001 * fVec11[((IOTA - 46) & 127)]) + ((0.0047180700000000004 * fVec11[((IOTA - 45) & 127)]) + ((0.0042019000000000006 * fVec11[((IOTA - 42) & 127)]) + ((0.0019727600000000001 * fVec11[((IOTA - 41) & 127)]) + ((0.0070614800000000002 * fVec11[((IOTA - 40) & 127)]) + ((0.012130500000000001 * fVec11[((IOTA - 39) & 127)]) + ((0.0089114199999999998 * fVec11[((IOTA - 38) & 127)]) + ((0.012699700000000001 * fVec11[((IOTA - 37) & 127)]) + ((0.011447799999999999 * fVec11[((IOTA - 36) & 127)]) + ((0.00061176199999999996 * fVec11[((IOTA - 35) & 127)]) + ((0.020701200000000003 * fVec11[((IOTA - 27) & 127)]) + ((0.017392399999999999 * fVec11[((IOTA - 26) & 127)]) + ((0.044909400000000002 * fVec11[((IOTA - 22) & 127)]) + ((0.036347600000000001 * fVec11[((IOTA - 21) & 127)]) + ((0.037415699999999996 * fVec11[((IOTA - 19) & 127)]) + ((0.046260099999999998 * fVec11[((IOTA - 18) & 127)]) + ((0.0097333599999999999 * fVec11[((IOTA - 16) & 127)]) + ((0.026032199999999998 * fVec11[((IOTA - 13) & 127)]) + ((0.016245099999999998 * fVec11[((IOTA - 12) & 127)]) + ((0.011957800000000001 * fVec11[((IOTA - 11) & 127)]) + ((0.0030688399999999998 * fVec11[((IOTA - 9) & 127)]) + ((0.00171357 * fVec11[((IOTA - 7) & 127)]) + ((0.000715845 * fVec11[((IOTA - 5) & 127)]) + ((0.00059789399999999996 * fVec11[((IOTA - 4) & 127)]) + ((0.00035335000000000005 * fVec11[((IOTA - 3) & 127)]) + ((1.0056300000000001e-05 * fTemp11) + ((1.4028600000000002e-05 * fVec11[((IOTA - 113) & 127)]) + ((9.5528500000000005e-05 * fVec11[((IOTA - 112) & 127)]) + ((0.000254403 * fVec11[((IOTA - 111) & 127)]) + ((3.8387300000000004e-05 * fVec11[((IOTA - 110) & 127)]) + ((0.00027903300000000004 * fVec11[((IOTA - 105) & 127)]) + ((0.00027494299999999999 * fVec11[((IOTA - 104) & 127)]) + ((0.000190144 * fVec11[((IOTA - 102) & 127)]) + ((0.00053989800000000003 * fVec11[((IOTA - 101) & 127)]) + ((0.00018442000000000003 * fVec11[((IOTA - 96) & 127)]) + ((0.0010822799999999999 * fVec11[((IOTA - 95) & 127)]) + ((0.000120732 * fVec11[((IOTA - 94) & 127)]) + ((0.00043210699999999999 * fVec11[((IOTA - 93) & 127)]) + ((0.00070196899999999999 * fVec11[((IOTA - 92) & 127)]) + ((0.00041614100000000003 * fVec11[((IOTA - 91) & 127)]) + ((0.00112341 * fVec11[((IOTA - 84) & 127)]) + ((0.0028764799999999998 * fVec11[((IOTA - 83) & 127)]) + ((0.0023685999999999998 * fVec11[((IOTA - 82) & 127)]) + ((0.00041246200000000005 * fVec11[((IOTA - 81) & 127)]) + ((0.0011269000000000001 * fVec11[((IOTA - 75) & 127)]) + ((0.00144309 * fVec11[((IOTA - 74) & 127)]) + (((6.4160099999999995e-07 * fVec12[((IOTA - 126) & 127)]) + ((6.5399499999999997e-07 * fVec12[((IOTA - 125) & 127)]) + ((4.0178399999999993e-06 * fVec12[((IOTA - 124) & 127)]) + ((6.9574199999999994e-06 * fVec12[((IOTA - 123) & 127)]) + ((2.1448200000000002e-05 * fVec12[((IOTA - 122) & 127)]) + ((4.1371800000000003e-05 * fVec12[((IOTA - 121) & 127)]) + ((2.2406299999999999e-05 * fVec12[((IOTA - 120) & 127)]) + ((1.58565e-05 * fVec12[((IOTA - 119) & 127)]) + ((1.5899000000000001e-05 * fVec12[((IOTA - 118) & 127)]) + ((3.8585699999999999e-05 * fVec12[((IOTA - 116) & 127)]) + ((8.8055400000000011e-05 * fVec12[((IOTA - 115) & 127)]) + ((5.2838100000000005e-05 * fVec12[((IOTA - 114) & 127)]) + ((0.00015411999999999999 * fVec12[((IOTA - 111) & 127)]) + ((2.2778299999999998e-05 * fVec12[((IOTA - 110) & 127)]) + ((9.8318499999999997e-05 * fVec12[((IOTA - 109) & 127)]) + ((0.00667199 * fVec12[((IOTA - 33) & 127)]) + ((0.0092429299999999999 * fVec12[((IOTA - 30) & 127)]) + ((0.0064707699999999998 * fVec12[((IOTA - 29) & 127)]) + ((0.0021991000000000003 * fVec12[((IOTA - 28) & 127)]) + ((0.00014088400000000003 * fVec12[((IOTA - 26) & 127)]) + ((0.0017641899999999999 * fVec12[((IOTA - 24) & 127)]) + ((0.024507300000000003 * fVec12[((IOTA - 23) & 127)]) + ((0.028314100000000002 * fVec12[((IOTA - 20) & 127)]) + ((0.0084666200000000011 * fVec12[((IOTA - 17) & 127)]) + ((0.0079231200000000005 * fVec12[((IOTA - 14) & 127)]) + ((0.0012615600000000001 * fVec12[((IOTA - 13) & 127)]) + ((0.0010508900000000001 * fVec12[((IOTA - 12) & 127)]) + ((0.00028143800000000001 * fVec12[((IOTA - 11) & 127)]) + ((0.00030371700000000001 * fVec12[((IOTA - 8) & 127)]) + ((0.00022810600000000003 * fVec12[((IOTA - 7) & 127)]) + ((0.00055799799999999998 * fVec12[((IOTA - 5) & 127)]) + ((4.7708800000000006e-05 * fVec12[((IOTA - 1) & 127)]) + ((0.0024287200000000001 * fVec12[((IOTA - 38) & 127)]) + ((0.00017214300000000001 * fVec12[((IOTA - 37) & 127)]) + ((0.00012489399999999999 * fVec12[((IOTA - 103) & 127)]) + ((0.00067140100000000007 * fVec12[((IOTA - 96) & 127)]) + ((0.00070487200000000005 * fVec12[((IOTA - 95) & 127)]) + ((0.00015813099999999999 * fVec12[((IOTA - 92) & 127)]) + ((0.00052452300000000005 * fVec12[((IOTA - 91) & 127)]) + ((0.000208784 * fVec12[((IOTA - 90) & 127)]) + ((0.00092574600000000008 * fVec12[((IOTA - 86) & 127)]) + ((0.0020186799999999997 * fVec12[((IOTA - 85) & 127)]) + ((0.0010764800000000001 * fVec12[((IOTA - 84) & 127)]) + ((3.5108400000000004e-05 * fVec12[((IOTA - 82) & 127)]) + ((0.00024882700000000002 * fVec12[((IOTA - 81) & 127)]) + ((0.00071957500000000008 * fVec12[((IOTA - 80) & 127)]) + ((0.0015043999999999999 * fVec12[((IOTA - 79) & 127)]) + ((0.0022789299999999998 * fVec12[((IOTA - 78) & 127)]) + ((0.0027959500000000002 * fVec12[((IOTA - 77) & 127)]) + ((0.00051197700000000005 * fVec12[((IOTA - 76) & 127)]) + ((0.00026544400000000004 * fVec12[((IOTA - 73) & 127)]) + ((0.00050830099999999996 * fVec12[((IOTA - 70) & 127)]) + ((0.0006250810000000001 * fVec12[((IOTA - 66) & 127)]) + ((4.9838300000000007e-05 * fVec12[((IOTA - 65) & 127)]) + ((0.00045048300000000006 * fVec12[((IOTA - 64) & 127)]) + ((0.00086288599999999999 * fVec12[((IOTA - 63) & 127)]) + ((0.00059936800000000008 * fVec12[((IOTA - 62) & 127)]) + ((0.0024784299999999998 * fVec12[((IOTA - 61) & 127)]) + ((0.0013091800000000001 * fVec12[((IOTA - 60) & 127)]) + ((2.8726200000000003e-05 * fVec12[((IOTA - 57) & 127)]) + ((0.00095517500000000006 * fVec12[((IOTA - 53) & 127)]) + ((0.000341713 * fVec12[((IOTA - 51) & 127)]) + ((0.00096935900000000004 * fVec12[((IOTA - 50) & 127)]) + ((0.0014495199999999999 * fVec12[((IOTA - 49) & 127)]) + ((0.0014898400000000001 * fVec12[((IOTA - 48) & 127)]) + ((0.0021659299999999999 * fVec12[((IOTA - 47) & 127)]) + ((0.0041707000000000003 * fVec12[((IOTA - 44) & 127)]) + (((1.06573e-06 * fVec13[((IOTA - 126) & 127)]) + ((7.9130000000000003e-06 * fVec13[((IOTA - 125) & 127)]) + ((1.11533e-05 * fVec13[((IOTA - 124) & 127)]) + ((7.879419999999999e-07 * fVec13[((IOTA - 123) & 127)]) + ((0.00105671 * fVec13[((IOTA - 7) & 127)]) + ((0.00050579800000000001 * fVec13[((IOTA - 5) & 127)]) + ((0.000136334 * fVec13[((IOTA - 4) & 127)]) + ((0.0055327599999999994 * fVec13[((IOTA - 13) & 127)]) + ((0.019557600000000001 * fVec13[((IOTA - 12) & 127)]) + ((0.013523700000000001 * fVec13[((IOTA - 11) & 127)]) + ((0.00111838 * fVec13[((IOTA - 9) & 127)]) + ((0.00037129600000000002 * fVec13[((IOTA - 8) & 127)]) + ((1.0373300000000001e-05 * fVec13[((IOTA - 120) & 127)]) + ((4.1348700000000006e-05 * fVec13[((IOTA - 113) & 127)]) + ((0.00021077300000000001 * fVec13[((IOTA - 112) & 127)]) + ((0.00029117200000000002 * fVec13[((IOTA - 111) & 127)]) + ((6.1881300000000007e-05 * fVec13[((IOTA - 110) & 127)]) + ((7.7441300000000014e-05 * fVec13[((IOTA - 109) & 127)]) + ((6.0216300000000008e-05 * fVec13[((IOTA - 103) & 127)]) + ((0.00012581500000000001 * fVec13[((IOTA - 102) & 127)]) + ((7.0025300000000002e-05 * fVec13[((IOTA - 99) & 127)]) + ((0.00066286199999999996 * fVec13[((IOTA - 98) & 127)]) + ((9.3832500000000013e-05 * fVec13[((IOTA - 97) & 127)]) + ((0.00058996000000000005 * fVec13[((IOTA - 96) & 127)]) + ((0.0019117200000000002 * fVec13[((IOTA - 95) & 127)]) + ((0.00096887299999999998 * fVec13[((IOTA - 94) & 127)]) + ((0.00068554300000000005 * fVec13[((IOTA - 89) & 127)]) + ((0.0015192199999999999 * fVec13[((IOTA - 86) & 127)]) + ((0.00088183900000000015 * fVec13[((IOTA - 85) & 127)]) + ((0.0013959600000000001 * fVec13[((IOTA - 82) & 127)]) + ((0.0020842900000000004 * fVec13[((IOTA - 81) & 127)]) + ((0.0021536300000000001 * fVec13[((IOTA - 78) & 127)]) + ((0.0032852899999999997 * fVec13[((IOTA - 77) & 127)]) + ((0.00209749 * fVec13[((IOTA - 70) & 127)]) + ((0.00127137 * fVec13[((IOTA - 69) & 127)]) + ((0.00045627100000000001 * fVec13[((IOTA - 66) & 127)]) + ((0.0018730800000000001 * fVec13[((IOTA - 65) & 127)]) + ((0.0019614799999999998 * fVec13[((IOTA - 64) & 127)]) + ((0.0024225800000000001 * fVec13[((IOTA - 63) & 127)]) + ((0.0025499699999999999 * fVec13[((IOTA - 62) & 127)]) + ((0.00086850000000000013 * fVec13[((IOTA - 61) & 127)]) + ((0.0013203800000000001 * fVec13[((IOTA - 60) & 127)]) + ((0.0028012499999999999 * fVec13[((IOTA - 54) & 127)]) + ((0.00090830500000000009 * fVec13[((IOTA - 53) & 127)]) + ((0.00097509099999999998 * fVec13[((IOTA - 47) & 127)]) + ((0.0013267800000000001 * fVec13[((IOTA - 45) & 127)]) + ((0.0033277000000000003 * fVec13[((IOTA - 44) & 127)]) + ((0.0045936600000000003 * fVec13[((IOTA - 43) & 127)]) + ((0.0021596799999999998 * fVec13[((IOTA - 41) & 127)]) + ((0.017120300000000001 * fVec13[((IOTA - 40) & 127)]) + ((0.0063158000000000008 * fVec13[((IOTA - 39) & 127)]) + ((0.014149700000000001 * fVec13[((IOTA - 36) & 127)]) + ((0.020176400000000001 * fVec13[((IOTA - 35) & 127)]) + ((0.0059566600000000008 * fVec13[((IOTA - 34) & 127)]) + ((0.0072458499999999999 * fVec13[((IOTA - 33) & 127)]) + ((0.013193999999999999 * fVec13[((IOTA - 31) & 127)]) + ((0.0032949700000000004 * fVec13[((IOTA - 30) & 127)]) + ((0.038218000000000002 * fVec13[((IOTA - 23) & 127)]) + ((0.046904000000000001 * fVec13[((IOTA - 22) & 127)]) + ((0.042610000000000002 * fVec13[((IOTA - 21) & 127)]) + ((0.060833700000000004 * fVec13[((IOTA - 20) & 127)]) + ((1.5865800000000003e-05 * fVec14[((IOTA - 123) & 127)]) + ((3.3133000000000003e-05 * fVec14[((IOTA - 122) & 127)]) + ((7.6978800000000009e-05 * fVec14[((IOTA - 121) & 127)]) + ((6.9207600000000005e-05 * fVec14[((IOTA - 120) & 127)]) + ((3.4888e-06 * fVec14[((IOTA - 119) & 127)]) + ((5.6830400000000004e-05 * fVec14[((IOTA - 118) & 127)]) + ((0.00013956500000000002 * fVec14[((IOTA - 117) & 127)]) + ((0.000268843 * fVec14[((IOTA - 116) & 127)]) + ((0.00016843600000000003 * fVec14[((IOTA - 115) & 127)]) + ((0.00010568 * fVec14[((IOTA - 111) & 127)]) + ((0.00025351300000000002 * fVec14[((IOTA - 110) & 127)]) + ((0.00015057400000000003 * fVec14[((IOTA - 108) & 127)]) + ((4.4610300000000002e-05 * fVec14[((IOTA - 106) & 127)]) + ((0.0069729000000000006 * fVec14[((IOTA - 28) & 127)]) + ((0.00437594 * fVec14[((IOTA - 24) & 127)]) + ((0.023037200000000004 * fVec14[((IOTA - 19) & 127)]) + ((0.043427500000000001 * fVec14[((IOTA - 18) & 127)]) + ((0.023976299999999999 * fVec14[((IOTA - 17) & 127)]) + ((0.066181599999999993 * fVec14[((IOTA - 16) & 127)]) + ((0.058634600000000002 * fVec14[((IOTA - 15) & 127)]) + ((0.0019139999999999999 * fVec14[((IOTA - 10) & 127)]) + ((0.00087751800000000009 * fVec14[((IOTA - 6) & 127)]) + ((0.00024512500000000001 * fVec14[((IOTA - 3) & 127)]) + ((0.000365476 * fVec14[((IOTA - 2) & 127)]) + ((5.3508699999999998e-05 * fVec14[((IOTA - 1) & 127)]) + ((0.0035579800000000001 * fVec14[((IOTA - 34) & 127)]) + ((0.0069054599999999995 * fVec14[((IOTA - 33) & 127)]) + ((0.014528600000000001 * fVec14[((IOTA - 32) & 127)]) + ((0.0090924899999999999 * fVec14[((IOTA - 31) & 127)]) + ((0.000116422 * fVec14[((IOTA - 96) & 127)]) + ((0.00045103200000000003 * fVec14[((IOTA - 93) & 127)]) + ((0.000522489 * fVec14[((IOTA - 92) & 127)]) + ((0.0012505699999999999 * fVec14[((IOTA - 91) & 127)]) + ((0.0011286 * fVec14[((IOTA - 90) & 127)]) + ((0.00076078500000000004 * fVec14[((IOTA - 89) & 127)]) + ((0.0018710199999999999 * fVec14[((IOTA - 88) & 127)]) + ((0.0019413400000000002 * fVec14[((IOTA - 87) & 127)]) + ((1.9325300000000003e-05 * fVec14[((IOTA - 80) & 127)]) + ((0.000110683 * fVec14[((IOTA - 77) & 127)]) + ((0.00090340100000000007 * fVec14[((IOTA - 75) & 127)]) + ((0.00063188700000000003 * fVec14[((IOTA - 74) & 127)]) + ((0.0015169699999999999 * fVec14[((IOTA - 70) & 127)]) + ((0.00228896 * fVec14[((IOTA - 69) & 127)]) + ((0.0018415700000000001 * fVec14[((IOTA - 68) & 127)]) + ((0.000677036 * fVec14[((IOTA - 67) & 127)]) + ((0.00070188499999999997 * fVec14[((IOTA - 66) & 127)]) + ((6.0076500000000007e-05 * fVec14[((IOTA - 65) & 127)]) + ((0.00053549200000000004 * fVec14[((IOTA - 64) & 127)]) + ((0.0012484900000000001 * fVec14[((IOTA - 63) & 127)]) + ((0.00010081100000000001 * fVec14[((IOTA - 62) & 127)]) + ((0.0010030500000000001 * fVec14[((IOTA - 61) & 127)]) + ((0.00019151300000000001 * fVec14[((IOTA - 60) & 127)]) + ((0.0082814200000000011 * fVec14[((IOTA - 29) & 127)]) + ((0.00012409699999999999 * fVec14[((IOTA - 56) & 127)]) + ((0.00034672200000000005 * fVec14[((IOTA - 54) & 127)]) + ((0.00149271 * fVec14[((IOTA - 50) & 127)]) + ((0.0057374000000000001 * fVec14[((IOTA - 45) & 127)]) + ((0.0043065899999999999 * fVec14[((IOTA - 44) & 127)]) + ((0.0057909800000000003 * fVec14[((IOTA - 41) & 127)]) + ((0.012866299999999999 * fVec14[((IOTA - 37) & 127)]) + ((0.018287600000000001 * fVec14[((IOTA - 36) & 127)]) + ((0.0067883699999999993 * fVec14[((IOTA - 35) & 127)]) + ((1.47788e-07 * fVec15[((IOTA - 126) & 127)]) + ((4.2830899999999998e-06 * fVec15[((IOTA - 123) & 127)]) + ((1.5180600000000002e-05 * fVec15[((IOTA - 122) & 127)]) + ((5.7183599999999999e-05 * fVec15[((IOTA - 121) & 127)]) + ((3.7596900000000006e-05 * fVec15[((IOTA - 120) & 127)]) + ((5.5951800000000002e-05 * fVec15[((IOTA - 119) & 127)]) + ((4.1282200000000003e-05 * fVec15[((IOTA - 118) & 127)]) + ((8.3589400000000017e-05 * fVec15[((IOTA - 117) & 127)]) + ((0.00011071500000000001 * fVec15[((IOTA - 116) & 127)]) + ((6.9900900000000014e-05 * fVec15[((IOTA - 115) & 127)]) + ((0.00020505 * fVec15[((IOTA - 114) & 127)]) + ((9.7282700000000016e-05 * fVec15[((IOTA - 112) & 127)]) + ((0.00035981700000000001 * fVec15[((IOTA - 111) & 127)]) + ((0.00022261899999999999 * fVec15[((IOTA - 110) & 127)]) + ((0.00027634500000000005 * fVec15[((IOTA - 107) & 127)]) + ((4.0803300000000003e-05 * fVec15[((IOTA - 3) & 127)]) + ((7.5886399999999999e-05 * fVec15[((IOTA - 2) & 127)]) + ((9.9447399999999992e-06 * fTemp15) + ((0.00116489 * fVec15[((IOTA - 16) & 127)]) + ((0.0071606500000000002 * fVec15[((IOTA - 15) & 127)]) + ((0.00099201300000000014 * fVec15[((IOTA - 10) & 127)]) + ((2.56811e-05 * fVec15[((IOTA - 8) & 127)]) + ((0.000660455 * fVec15[((IOTA - 6) & 127)]) + ((0.00016602900000000002 * fVec15[((IOTA - 4) & 127)]) + ((0.00035780099999999998 * fVec15[((IOTA - 101) & 127)]) + ((0.00071558799999999997 * fVec15[((IOTA - 91) & 127)]) + ((0.00124285 * fVec15[((IOTA - 88) & 127)]) + ((0.00034728 * fVec15[((IOTA - 87) & 127)]) + ((0.00092678400000000005 * fVec15[((IOTA - 84) & 127)]) + ((0.0016128900000000001 * fVec15[((IOTA - 83) & 127)]) + ((0.00063472000000000008 * fVec15[((IOTA - 79) & 127)]) + ((0.0027100900000000001 * fVec15[((IOTA - 78) & 127)]) + ((0.00108501 * fVec15[((IOTA - 77) & 127)]) + ((0.00066758699999999998 * fVec15[((IOTA - 76) & 127)]) + ((0.00036076100000000002 * fVec15[((IOTA - 74) & 127)]) + ((0.0013523700000000001 * fVec15[((IOTA - 73) & 127)]) + ((0.0010234199999999999 * fVec15[((IOTA - 72) & 127)]) + ((0.00051179399999999999 * fVec15[((IOTA - 71) & 127)]) + ((0.0010446200000000002 * fVec15[((IOTA - 70) & 127)]) + ((0.00024338600000000003 * fVec15[((IOTA - 69) & 127)]) + ((0.00132391 * fVec15[((IOTA - 59) & 127)]) + ((0.0030292000000000001 * fVec15[((IOTA - 58) & 127)]) + ((0.00167037 * fVec15[((IOTA - 57) & 127)]) + ((0.00015749700000000001 * fVec15[((IOTA - 56) & 127)]) + ((0.00023174299999999999 * fVec15[((IOTA - 55) & 127)]) + ((0.0010645800000000001 * fVec15[((IOTA - 54) & 127)]) + ((0.00093411100000000006 * fVec15[((IOTA - 53) & 127)]) + ((0.0024952400000000001 * fVec15[((IOTA - 51) & 127)]) + ((0.0034762300000000003 * fVec15[((IOTA - 50) & 127)]) + ((0.00188966 * fVec15[((IOTA - 48) & 127)]) + ((0.00393443 * fVec15[((IOTA - 47) & 127)]) + ((0.0088357600000000015 * fVec15[((IOTA - 44) & 127)]) + ((0.00144816 * fVec15[((IOTA - 43) & 127)]) + ((0.0053719000000000006 * fVec15[((IOTA - 41) & 127)]) + ((0.0057588200000000004 * fVec15[((IOTA - 38) & 127)]) + ((0.0038469899999999998 * fVec15[((IOTA - 37) & 127)]) + ((0.0020671499999999998 * fVec15[((IOTA - 35) & 127)]) + ((0.0158868 * fVec15[((IOTA - 34) & 127)]) + ((0.016835300000000001 * fVec15[((IOTA - 31) & 127)]) + ((0.0075965400000000006 * fVec15[((IOTA - 28) & 127)]) + ((0.0061243800000000004 * fVec15[((IOTA - 26) & 127)]) + ((0.024267400000000001 * fVec15[((IOTA - 25) & 127)]) + ((0.022247599999999999 * fVec15[((IOTA - 22) & 127)]) + ((0.025193300000000002 * fVec15[((IOTA - 19) & 127)]) + ((2.1436099999999995e-06 * fVec16[((IOTA - 125) & 127)]) + ((9.3152500000000003e-06 * fVec16[((IOTA - 124) & 127)]) + ((8.1889299999999992e-06 * fVec16[((IOTA - 123) & 127)]) + ((1.74931e-05 * fVec16[((IOTA - 122) & 127)]) + ((2.2752300000000002e-05 * fVec16[((IOTA - 121) & 127)]) + ((1.2775900000000001e-05 * fVec16[((IOTA - 120) & 127)]) + ((4.7892300000000002e-05 * fVec16[((IOTA - 119) & 127)]) + ((1.7953800000000001e-05 * fVec16[((IOTA - 118) & 127)]) + ((5.4085200000000009e-05 * fVec16[((IOTA - 117) & 127)]) + ((0.000145382 * fVec16[((IOTA - 116) & 127)]) + ((1.3354200000000001e-06 * fVec16[((IOTA - 115) & 127)]) + ((7.4177099999999998e-05 * fVec16[((IOTA - 114) & 127)]) + ((0.000238922 * fVec16[((IOTA - 113) & 127)]) + ((9.5068000000000005e-05 * fVec16[((IOTA - 112) & 127)]) + ((0.00064602799999999999 * fVec16[((IOTA - 90) & 127)]) + ((0.0010497700000000002 * fVec16[((IOTA - 89) & 127)]) + ((8.767989999999999e-06 * fVec16[((IOTA - 88) & 127)]) + ((0.00110188 * fVec16[((IOTA - 85) & 127)]) + ((0.0028700499999999999 * fVec16[((IOTA - 84) & 127)]) + ((0.0032637399999999998 * fVec16[((IOTA - 83) & 127)]) + ((0.00124704 * fVec16[((IOTA - 82) & 127)]) + ((0.00038958100000000001 * fVec16[((IOTA - 80) & 127)]) + ((0.00067759099999999996 * fVec16[((IOTA - 79) & 127)]) + ((0.00096400700000000001 * fVec16[((IOTA - 74) & 127)]) + ((0.0012385999999999999 * fVec16[((IOTA - 68) & 127)]) + ((0.00042248599999999997 * fVec16[((IOTA - 67) & 127)]) + ((0.00026454499999999998 * fVec16[((IOTA - 65) & 127)]) + ((0.0036227100000000003 * fVec16[((IOTA - 64) & 127)]) + ((0.0037377299999999999 * fVec16[((IOTA - 63) & 127)]) + ((0.0043915100000000004 * fVec16[((IOTA - 62) & 127)]) + ((0.00257216 * fVec16[((IOTA - 61) & 127)]) + ((0.00089788499999999996 * fVec16[((IOTA - 60) & 127)]) + ((0.00034114600000000002 * fVec16[((IOTA - 57) & 127)]) + ((0.00087139800000000001 * fVec16[((IOTA - 56) & 127)]) + ((3.7472300000000004e-05 * fVec16[((IOTA - 55) & 127)]) + ((0.00035147300000000004 * fVec16[((IOTA - 43) & 127)]) + ((0.0054228599999999998 * fVec16[((IOTA - 41) & 127)]) + ((0.00555617 * fVec16[((IOTA - 40) & 127)]) + ((0.00149051 * fVec16[((IOTA - 39) & 127)]) + ((0.0066379000000000004 * fVec16[((IOTA - 38) & 127)]) + ((0.023168899999999999 * fVec16[((IOTA - 37) & 127)]) + ((0.022447100000000001 * fVec16[((IOTA - 36) & 127)]) + ((0.0076363300000000002 * fVec16[((IOTA - 35) & 127)]) + ((0.00533637 * fVec16[((IOTA - 34) & 127)]) + ((0.0032469800000000004 * fVec16[((IOTA - 31) & 127)]) + ((0.0052128300000000008 * fVec16[((IOTA - 30) & 127)]) + ((0.00172566 * fVec16[((IOTA - 28) & 127)]) + ((0.018620600000000001 * fVec16[((IOTA - 27) & 127)]) + ((0.0399341 * fVec16[((IOTA - 20) & 127)]) + ((0.0157208 * fVec16[((IOTA - 19) & 127)]) + ((0.037496399999999999 * fVec16[((IOTA - 17) & 127)]) + ((0.026212800000000001 * fVec16[((IOTA - 16) & 127)]) + ((0.042901499999999995 * fVec16[((IOTA - 15) & 127)]) + ((0.020667000000000001 * fVec16[((IOTA - 14) & 127)]) + ((0.0017872699999999999 * fVec16[((IOTA - 10) & 127)]) + ((0.0012646299999999999 * fVec16[((IOTA - 8) & 127)]) + ((0.00051453000000000002 * fVec16[((IOTA - 6) & 127)]) + ((0.000140598 * fVec16[((IOTA - 3) & 127)]) + ((0.00031664699999999998 * fVec16[((IOTA - 2) & 127)]) + ((5.2325000000000005e-05 * fVec16[((IOTA - 1) & 127)]) + ((0.00191836 * fVec16[((IOTA - 92) & 127)]) + ((0.0035651700000000003 * fVec16[((IOTA - 93) & 127)]) + ((0.00036924600000000005 * fVec16[((IOTA - 91) & 127)]) + ((0.00035358399999999999 * fVec16[((IOTA - 109) & 127)]) + ((4.61018e-05 * fVec16[((IOTA - 108) & 127)]) + ((3.6978000000000004e-05 * fVec16[((IOTA - 104) & 127)]) + ((0.00016568300000000002 * fVec16[((IOTA - 100) & 127)]) + ((0.00126296 * fVec16[((IOTA - 94) & 127)]) + ((5.8891899999999998e-07 * fVec17[((IOTA - 126) & 127)]) + ((1.5362e-06 * fVec17[((IOTA - 125) & 127)]) + ((5.0275400000000003e-05 * fVec17[((IOTA - 120) & 127)]) + ((3.1142400000000002e-05 * fVec17[((IOTA - 119) & 127)]) + ((2.6072899999999997e-06 * fVec17[((IOTA - 118) & 127)]) + ((5.3306300000000008e-05 * fVec17[((IOTA - 117) & 127)]) + ((1.7970700000000001e-05 * fVec17[((IOTA - 116) & 127)]) + ((0.00026641600000000001 * fVec17[((IOTA - 111) & 127)]) + ((0.00038083300000000002 * fVec17[((IOTA - 110) & 127)]) + ((0.00026763500000000001 * fVec17[((IOTA - 107) & 127)]) + ((0.00025283000000000006 * fVec17[((IOTA - 106) & 127)]) + ((4.3015400000000008e-05 * fVec17[((IOTA - 105) & 127)]) + ((0.00132245 * fVec17[((IOTA - 81) & 127)]) + ((7.4600700000000006e-05 * fVec17[((IOTA - 80) & 127)]) + ((0.00135154 * fVec17[((IOTA - 76) & 127)]) + ((9.0714300000000007e-05 * fVec17[((IOTA - 75) & 127)]) + ((0.00046037299999999998 * fVec17[((IOTA - 74) & 127)]) + ((0.00032999100000000002 * fVec17[((IOTA - 73) & 127)]) + ((8.8671600000000007e-05 * fVec17[((IOTA - 66) & 127)]) + ((0.00071361900000000008 * fVec17[((IOTA - 65) & 127)]) + ((0.0021665299999999998 * fVec17[((IOTA - 64) & 127)]) + ((0.0028213700000000001 * fVec17[((IOTA - 63) & 127)]) + ((0.00086561800000000018 * fVec17[((IOTA - 62) & 127)]) + ((0.00109522 * fVec17[((IOTA - 60) & 127)]) + ((0.0027684799999999998 * fVec17[((IOTA - 59) & 127)]) + ((0.00027406100000000003 * fVec17[((IOTA - 58) & 127)]) + ((0.0011284799999999998 * fVec17[((IOTA - 57) & 127)]) + ((0.00017831100000000001 * fVec17[((IOTA - 56) & 127)]) + ((0.0007085180000000001 * fVec17[((IOTA - 53) & 127)]) + ((0.00023227000000000002 * fVec17[((IOTA - 50) & 127)]) + ((0.0011046700000000001 * fVec17[((IOTA - 49) & 127)]) + ((0.0017173400000000001 * fVec17[((IOTA - 47) & 127)]) + ((0.00096283600000000012 * fVec17[((IOTA - 46) & 127)]) + ((0.0020164800000000002 * fVec17[((IOTA - 44) & 127)]) + ((0.00034979300000000004 * fVec17[((IOTA - 41) & 127)]) + ((0.0033543900000000001 * fVec17[((IOTA - 40) & 127)]) + ((0.013240500000000001 * fVec17[((IOTA - 37) & 127)]) + ((0.0071675799999999998 * fVec17[((IOTA - 34) & 127)]) + ((0.0098981 * fVec17[((IOTA - 33) & 127)]) + ((0.00136287 * fVec17[((IOTA - 30) & 127)]) + ((0.00092559700000000001 * fVec17[((IOTA - 28) & 127)]) + ((0.0086453599999999995 * fVec17[((IOTA - 26) & 127)]) + ((0.0019909900000000002 * fVec17[((IOTA - 23) & 127)]) + ((0.013336300000000001 * fVec17[((IOTA - 21) & 127)]) + ((0.00016282300000000001 * fVec17[((IOTA - 20) & 127)]) + ((0.0033735599999999998 * fVec17[((IOTA - 18) & 127)]) + ((0.0013478399999999999 * fVec17[((IOTA - 16) & 127)]) + ((0.0024369399999999999 * fVec17[((IOTA - 15) & 127)]) + ((0.00048140299999999999 * fVec17[((IOTA - 12) & 127)]) + ((8.5212199999999997e-05 * fVec17[((IOTA - 10) & 127)]) + ((0.00015997100000000002 * fVec17[((IOTA - 8) & 127)]) + ((4.6397800000000005e-05 * fVec17[((IOTA - 6) & 127)]) + ((6.0256600000000009e-05 * fVec17[((IOTA - 4) & 127)]) + ((8.9622000000000004e-05 * fVec17[((IOTA - 2) & 127)]) + ((1.7245599999999999e-06 * fTemp17) + ((0.00036025800000000002 * fVec17[((IOTA - 85) & 127)]) + ((0.00010684300000000001 * fVec17[((IOTA - 104) & 127)]) + ((5.1774199999999995e-06 * fVec17[((IOTA - 103) & 127)]) + ((0.000256214 * fVec17[((IOTA - 102) & 127)]) + ((7.3338599999999996e-05 * fVec17[((IOTA - 101) & 127)]) + ((7.9560600000000005e-05 * fVec17[((IOTA - 99) & 127)]) + ((6.534720000000001e-05 * fVec17[((IOTA - 95) & 127)]) + ((0.0016416599999999999 * fVec17[((IOTA - 94) & 127)]) + ((0.00116942 * fVec17[((IOTA - 93) & 127)]) + ((0.00010716300000000002 * fVec17[((IOTA - 89) & 127)]) + ((0.00023784200000000004 * fVec17[((IOTA - 88) & 127)]) + ((0.00029830299999999998 * fVec17[((IOTA - 87) & 127)]) + ((0.0011921100000000001 * fVec17[((IOTA - 86) & 127)]) + ((4.0112199999999995e-06 * fVec18[((IOTA - 125) & 127)]) + ((1.5117400000000002e-05 * fVec18[((IOTA - 124) & 127)]) + ((4.3721500000000005e-05 * fVec18[((IOTA - 120) & 127)]) + ((0.00015560700000000002 * fVec18[((IOTA - 119) & 127)]) + ((7.9108900000000011e-05 * fVec18[((IOTA - 118) & 127)]) + ((5.5350100000000004e-05 * fVec18[((IOTA - 117) & 127)]) + ((0.000188798 * fVec18[((IOTA - 116) & 127)]) + ((0.00014338299999999999 * fVec18[((IOTA - 115) & 127)]) + ((0.000132352 * fVec18[((IOTA - 114) & 127)]) + ((0.00038088800000000002 * fVec18[((IOTA - 111) & 127)]) + ((0.00029129200000000002 * fVec18[((IOTA - 110) & 127)]) + ((0.00042473900000000004 * fVec18[((IOTA - 109) & 127)]) + ((0.00039000200000000002 * fVec18[((IOTA - 108) & 127)]) + ((0.00037496900000000006 * fVec18[((IOTA - 106) & 127)]) + ((0.000122187 * fVec18[((IOTA - 101) & 127)]) + ((5.0613000000000005e-05 * fVec18[((IOTA - 100) & 127)]) + ((0.00034352299999999998 * fVec18[((IOTA - 99) & 127)]) + ((8.3557300000000007e-05 * fVec18[((IOTA - 95) & 127)]) + ((3.1251799999999998e-05 * fVec18[((IOTA - 90) & 127)]) + ((0.00081126199999999999 * fVec18[((IOTA - 89) & 127)]) + ((0.0010102899999999998 * fVec18[((IOTA - 88) & 127)]) + ((0.00016769199999999999 * fVec18[((IOTA - 85) & 127)]) + ((0.0023454999999999999 * fVec18[((IOTA - 84) & 127)]) + ((0.0034605500000000002 * fVec18[((IOTA - 52) & 127)]) + ((0.0048647899999999999 * fVec18[((IOTA - 51) & 127)]) + ((0.00157369 * fVec18[((IOTA - 47) & 127)]) + ((0.0028187400000000001 * fVec18[((IOTA - 46) & 127)]) + ((0.0046525800000000008 * fVec18[((IOTA - 45) & 127)]) + ((0.00020012 * fVec18[((IOTA - 43) & 127)]) + ((0.00347263 * fVec18[((IOTA - 42) & 127)]) + ((0.0063060700000000004 * fVec18[((IOTA - 39) & 127)]) + ((0.00608021 * fVec18[((IOTA - 38) & 127)]) + ((0.0032300599999999999 * fVec18[((IOTA - 35) & 127)]) + ((0.0153619 * fVec18[((IOTA - 34) & 127)]) + ((0.0075184400000000004 * fVec18[((IOTA - 33) & 127)]) + ((0.016116399999999999 * fVec18[((IOTA - 32) & 127)]) + ((0.0087108600000000008 * fVec18[((IOTA - 31) & 127)]) + ((0.011844500000000001 * fVec18[((IOTA - 27) & 127)]) + ((0.0088785800000000005 * fVec18[((IOTA - 26) & 127)]) + ((0.0071259000000000001 * fVec18[((IOTA - 19) & 127)]) + ((0.020032899999999999 * fVec18[((IOTA - 18) & 127)]) + ((0.041877400000000002 * fVec18[((IOTA - 17) & 127)]) + ((0.040486800000000003 * fVec18[((IOTA - 16) & 127)]) + ((0.0014058600000000001 * fVec18[((IOTA - 15) & 127)]) + ((0.00187744 * fVec18[((IOTA - 14) & 127)]) + ((0.00024379800000000001 * fVec18[((IOTA - 9) & 127)]) + ((0.00038353700000000004 * fVec18[((IOTA - 8) & 127)]) + ((0.00030841899999999999 * fVec18[((IOTA - 7) & 127)]) + ((0.000199779 * fVec18[((IOTA - 5) & 127)]) + ((6.6441500000000004e-05 * fVec18[((IOTA - 2) & 127)]) + ((8.8823800000000002e-05 * fVec18[((IOTA - 1) & 127)]) + ((1.1196600000000002e-05 * fTemp18) + ((0.0012237400000000001 * fVec18[((IOTA - 62) & 127)]) + ((0.0028021500000000002 * fVec18[((IOTA - 61) & 127)]) + ((0.00089523300000000005 * fVec18[((IOTA - 60) & 127)]) + ((2.3934399999999998e-07 * fVec19[((IOTA - 126) & 127)]) + ((0.0020901600000000002 * fVec18[((IOTA - 83) & 127)]) + ((0.00077017200000000007 * fVec18[((IOTA - 79) & 127)]) + ((0.000728887 * fVec18[((IOTA - 78) & 127)]) + ((0.0021097199999999998 * fVec18[((IOTA - 75) & 127)]) + ((0.0025037600000000003 * fVec18[((IOTA - 74) & 127)]) + ((0.00040049300000000003 * fVec18[((IOTA - 73) & 127)]) + ((0.000236257 * fVec18[((IOTA - 71) & 127)]) + ((0.00080940200000000008 * fVec18[((IOTA - 68) & 127)]) + ((0.0014248099999999999 * fVec18[((IOTA - 67) & 127)]) + ((0.00051849200000000006 * fVec18[((IOTA - 66) & 127)]) + ((0.00083918999999999997 * fVec18[((IOTA - 59) & 127)]) + ((0.00050695199999999997 * fVec18[((IOTA - 58) & 127)]) + ((0.00064994100000000002 * fVec19[((IOTA - 4) & 127)]) + ((0.00020408400000000002 * fVec19[((IOTA - 3) & 127)]) + ((5.0749199999999992e-06 * fVec19[((IOTA - 1) & 127)]) + ((1.6051900000000001e-05 * fTemp19) + ((0.00473027 * fVec20[((IOTA - 14) & 127)]) + ((0.00083837600000000005 * fVec20[((IOTA - 12) & 127)]) + ((0.00052448499999999999 * fVec20[((IOTA - 11) & 127)]) + ((0.0012249000000000001 * fVec20[((IOTA - 10) & 127)]) + ((0.00056178000000000001 * fVec20[((IOTA - 7) & 127)]) + ((4.4565200000000005e-05 * fVec20[((IOTA - 6) & 127)]) + ((0.00026242200000000006 * fVec20[((IOTA - 5) & 127)]) + ((0.00017666400000000001 * fVec20[((IOTA - 3) & 127)]) + ((3.9999700000000003e-05 * fVec20[((IOTA - 1) & 127)]) + ((1.2420800000000001e-05 * fVec19[((IOTA - 123) & 127)]) + ((3.0383900000000002e-05 * fVec19[((IOTA - 122) & 127)]) + ((0.00014400599999999999 * fVec19[((IOTA - 106) & 127)]) + ((0.00056116599999999999 * fVec19[((IOTA - 105) & 127)]) + ((0.00043078500000000004 * fVec19[((IOTA - 104) & 127)]) + ((0.00016122200000000001 * fVec19[((IOTA - 101) & 127)]) + ((0.00032777300000000001 * fVec19[((IOTA - 100) & 127)]) + ((0.00086172699999999996 * fVec19[((IOTA - 99) & 127)]) + ((0.00116818 * fVec19[((IOTA - 98) & 127)]) + ((0.00088091000000000016 * fVec19[((IOTA - 97) & 127)]) + ((0.0006577480000000001 * fVec19[((IOTA - 96) & 127)]) + ((0.00066074500000000002 * fVec19[((IOTA - 95) & 127)]) + ((0.0018925399999999998 * fVec19[((IOTA - 94) & 127)]) + ((0.0023709600000000001 * fVec19[((IOTA - 93) & 127)]) + ((0.0009980639999999999 * fVec19[((IOTA - 92) & 127)]) + ((0.0012026699999999999 * fVec19[((IOTA - 91) & 127)]) + ((0.00057528899999999999 * fVec19[((IOTA - 90) & 127)]) + ((0.0011426300000000002 * fVec19[((IOTA - 86) & 127)]) + ((0.0012205 * fVec19[((IOTA - 85) & 127)]) + ((0.0013112 * fVec19[((IOTA - 81) & 127)]) + ((0.00133194 * fVec19[((IOTA - 80) & 127)]) + ((0.0011322700000000001 * fVec19[((IOTA - 73) & 127)]) + ((0.00181778 * fVec19[((IOTA - 72) & 127)]) + ((0.00071619100000000003 * fVec19[((IOTA - 71) & 127)]) + ((0.0016215200000000002 * fVec19[((IOTA - 70) & 127)]) + ((0.00066023199999999996 * fVec19[((IOTA - 64) & 127)]) + ((0.00109943 * fVec19[((IOTA - 61) & 127)]) + ((0.0031036200000000001 * fVec19[((IOTA - 60) & 127)]) + ((0.0042161500000000001 * fVec19[((IOTA - 59) & 127)]) + ((0.0025095600000000001 * fVec19[((IOTA - 58) & 127)]) + ((0.0032661999999999999 * fVec19[((IOTA - 54) & 127)]) + ((0.0034819399999999998 * fVec19[((IOTA - 53) & 127)]) + ((0.00163773 * fVec19[((IOTA - 49) & 127)]) + ((0.00127327 * fVec19[((IOTA - 48) & 127)]) + ((0.0010735900000000001 * fVec19[((IOTA - 44) & 127)]) + ((0.0025665700000000002 * fVec19[((IOTA - 43) & 127)]) + ((0.0028225600000000004 * fVec19[((IOTA - 42) & 127)]) + ((0.0053647900000000004 * fVec19[((IOTA - 41) & 127)]) + ((0.0047349100000000002 * fVec19[((IOTA - 40) & 127)]) + ((0.0038553600000000004 * fVec19[((IOTA - 35) & 127)]) + ((0.0039412199999999996 * fVec19[((IOTA - 34) & 127)]) + ((0.0124636 * fVec19[((IOTA - 28) & 127)]) + ((0.0117299 * fVec19[((IOTA - 27) & 127)]) + ((0.00123668 * fVec19[((IOTA - 26) & 127)]) + ((0.037707000000000004 * fVec19[((IOTA - 23) & 127)]) + ((0.063962000000000005 * fVec19[((IOTA - 22) & 127)]) + ((0.023310000000000001 * fVec19[((IOTA - 17) & 127)]) + ((0.028106900000000001 * fVec19[((IOTA - 16) & 127)]) + ((0.0042459100000000003 * fVec19[((IOTA - 13) & 127)]) + ((0.017260600000000001 * fVec19[((IOTA - 12) & 127)]) + ((0.000626824 * fVec19[((IOTA - 10) & 127)]) + ((0.00043621100000000004 * fVec19[((IOTA - 8) & 127)]) + ((0.00071821400000000011 * fVec19[((IOTA - 7) & 127)]) + ((3.1669099999999999e-07 * fVec20[((IOTA - 126) & 127)]) + ((1.6687399999999998e-06 * fVec20[((IOTA - 125) & 127)]) + ((1.28328e-05 * fVec20[((IOTA - 122) & 127)]) + ((1.7308800000000003e-05 * fVec20[((IOTA - 121) & 127)]) + ((4.9074099999999998e-05 * fVec20[((IOTA - 117) & 127)]) + ((2.5899899999999999e-05 * fVec20[((IOTA - 116) & 127)]) + ((0.00011491000000000001 * fVec20[((IOTA - 114) & 127)]) + ((8.8784300000000003e-05 * fVec20[((IOTA - 112) & 127)]) + ((7.9503400000000002e-05 * fVec20[((IOTA - 111) & 127)]) + ((8.1492400000000013e-05 * fVec20[((IOTA - 110) & 127)]) + ((9.1673400000000002e-05 * fVec20[((IOTA - 109) & 127)]) + ((0.00025111700000000003 * fVec20[((IOTA - 105) & 127)]) + ((0.00018673 * fVec20[((IOTA - 104) & 127)]) + ((0.00071093600000000001 * fVec20[((IOTA - 102) & 127)]) + ((0.00104291 * fVec20[((IOTA - 101) & 127)]) + ((0.058097799999999998 * fVec20[((IOTA - 19) & 127)]) + ((0.00012821000000000002 * fVec20[((IOTA - 93) & 127)]) + ((0.00085017999999999997 * fVec20[((IOTA - 92) & 127)]) + ((0.000712106 * fVec20[((IOTA - 91) & 127)]) + ((0.00071435800000000001 * fVec20[((IOTA - 86) & 127)]) + ((0.00037586100000000001 * fVec20[((IOTA - 84) & 127)]) + ((0.0012874099999999999 * fVec20[((IOTA - 83) & 127)]) + ((0.0014784800000000001 * fVec20[((IOTA - 82) & 127)]) + ((0.00193484 * fVec20[((IOTA - 81) & 127)]) + ((0.00029607 * fVec20[((IOTA - 80) & 127)]) + ((0.00071585700000000008 * fVec20[((IOTA - 74) & 127)]) + ((0.0023252199999999998 * fVec20[((IOTA - 73) & 127)]) + ((0.0013749300000000001 * fVec20[((IOTA - 68) & 127)]) + ((0.00058439199999999998 * fVec20[((IOTA - 67) & 127)]) + ((0.0011591100000000001 * fVec20[((IOTA - 63) & 127)]) + ((0.00056720100000000003 * fVec20[((IOTA - 62) & 127)]) + ((0.0020986799999999999 * fVec20[((IOTA - 60) & 127)]) + ((0.00155243 * fVec20[((IOTA - 59) & 127)]) + ((3.2355100000000005e-05 * fVec20[((IOTA - 57) & 127)]) + ((0.00057845500000000007 * fVec20[((IOTA - 56) & 127)]) + ((0.00150241 * fVec20[((IOTA - 55) & 127)]) + ((0.00172704 * fVec20[((IOTA - 54) & 127)]) + ((0.0023094999999999999 * fVec20[((IOTA - 53) & 127)]) + ((0.0013355600000000002 * fVec20[((IOTA - 50) & 127)]) + ((0.0016919000000000001 * fVec20[((IOTA - 49) & 127)]) + ((0.0041987500000000002 * fVec20[((IOTA - 46) & 127)]) + ((0.0013185600000000001 * fVec20[((IOTA - 43) & 127)]) + ((0.0045889699999999995 * fVec20[((IOTA - 40) & 127)]) + ((0.00114539 * fVec20[((IOTA - 39) & 127)]) + ((0.0121855 * fVec20[((IOTA - 36) & 127)]) + ((0.00058276900000000002 * fVec20[((IOTA - 34) & 127)]) + ((0.0107633 * fVec20[((IOTA - 33) & 127)]) + ((0.013816500000000001 * fVec20[((IOTA - 29) & 127)]) + ((0.00604938 * fVec20[((IOTA - 28) & 127)]) + ((0.020943 * fVec20[((IOTA - 27) & 127)]) + ((0.013073399999999999 * fVec20[((IOTA - 24) & 127)]) + ((0.0144256 * fVec20[((IOTA - 23) & 127)]) + ((0.013579000000000001 * fVec20[((IOTA - 22) & 127)]) + ((1.42182e-06 * fVec21[((IOTA - 126) & 127)]) + ((3.38734e-06 * fVec21[((IOTA - 125) & 127)]) + ((3.55566e-07 * fVec21[((IOTA - 124) & 127)]) + ((1.54209e-06 * fVec21[((IOTA - 123) & 127)]) + ((1.0269900000000001e-05 * fVec21[((IOTA - 121) & 127)]) + ((5.1458800000000003e-05 * fVec21[((IOTA - 120) & 127)]) + ((9.7858700000000005e-05 * fVec21[((IOTA - 110) & 127)]) + ((0.00024103300000000001 * fVec21[((IOTA - 108) & 127)]) + ((4.9494600000000006e-05 * fVec21[((IOTA - 106) & 127)]) + ((4.0191900000000004e-05 * fVec21[((IOTA - 105) & 127)]) + ((4.5314599999999995e-06 * fVec21[((IOTA - 103) & 127)]) + ((0.00025367800000000002 * fVec21[((IOTA - 101) & 127)]) + ((0.000293212 * fVec21[((IOTA - 100) & 127)]) + ((0.00039481299999999999 * fVec21[((IOTA - 99) & 127)]) + ((0.00059363700000000005 * fVec21[((IOTA - 98) & 127)]) + ((0.00084704300000000012 * fVec21[((IOTA - 97) & 127)]) + ((0.0015023899999999999 * fVec21[((IOTA - 96) & 127)]) + ((0.00124766 * fVec21[((IOTA - 95) & 127)]) + ((0.000547987 * fVec21[((IOTA - 92) & 127)]) + ((0.00076694000000000013 * fVec21[((IOTA - 91) & 127)]) + ((0.00094673100000000003 * fVec21[((IOTA - 90) & 127)]) + ((0.000164878 * fVec21[((IOTA - 89) & 127)]) + ((9.2560700000000003e-05 * fVec21[((IOTA - 88) & 127)]) + ((0.00030100299999999999 * fVec21[((IOTA - 87) & 127)]) + ((0.00050179800000000002 * fVec21[((IOTA - 86) & 127)]) + ((0.00149106 * fVec21[((IOTA - 85) & 127)]) + ((0.00071892899999999999 * fVec21[((IOTA - 84) & 127)]) + ((0.00048326599999999999 * fVec21[((IOTA - 81) & 127)]) + ((0.00072090700000000001 * fVec21[((IOTA - 80) & 127)]) + ((0.00023854600000000002 * fVec21[((IOTA - 78) & 127)]) + ((0.0014875400000000001 * fVec21[((IOTA - 77) & 127)]) + ((0.0033493400000000001 * fVec21[((IOTA - 76) & 127)]) + ((0.0031260400000000001 * fVec21[((IOTA - 75) & 127)]) + ((0.0303129 * fVec21[((IOTA - 18) & 127)]) + ((0.00060355100000000002 * fVec21[((IOTA - 15) & 127)]) + ((0.00046831500000000007 * fVec21[((IOTA - 13) & 127)]) + ((0.012178800000000002 * fVec21[((IOTA - 12) & 127)]) + ((0.0012102200000000001 * fVec21[((IOTA - 10) & 127)]) + ((0.00099936700000000014 * fVec21[((IOTA - 9) & 127)]) + ((0.00060848900000000004 * fVec21[((IOTA - 6) & 127)]) + ((0.00037949199999999999 * fVec21[((IOTA - 5) & 127)]) + ((0.00016164900000000001 * fVec21[((IOTA - 3) & 127)]) + ((4.3842899999999996e-07 * fVec21[((IOTA - 2) & 127)]) + ((2.52175e-05 * fVec21[((IOTA - 1) & 127)]) + ((1.1251800000000001e-05 * fTemp21) + ((0.0097574199999999993 * fVec21[((IOTA - 25) & 127)]) + ((0.0053800000000000002 * fVec21[((IOTA - 24) & 127)]) + ((0.0060703699999999994 * fVec21[((IOTA - 22) & 127)]) + ((0.00083117599999999999 * fVec21[((IOTA - 74) & 127)]) + ((0.00045545999999999998 * fVec21[((IOTA - 68) & 127)]) + ((0.0010428 * fVec21[((IOTA - 67) & 127)]) + ((0.0019296000000000001 * fVec21[((IOTA - 66) & 127)]) + ((0.00020463 * fVec21[((IOTA - 65) & 127)]) + ((0.0010030900000000001 * fVec21[((IOTA - 64) & 127)]) + ((0.00166927 * fVec21[((IOTA - 63) & 127)]) + ((0.00022598400000000001 * fVec21[((IOTA - 62) & 127)]) + ((0.00060200900000000003 * fVec21[((IOTA - 61) & 127)]) + ((0.00083492200000000009 * fVec21[((IOTA - 60) & 127)]) + ((9.2360600000000005e-05 * fVec21[((IOTA - 59) & 127)]) + ((0.00095314700000000011 * fVec21[((IOTA - 52) & 127)]) + ((0.00228246 * fVec21[((IOTA - 51) & 127)]) + ((0.0043644199999999999 * fVec21[((IOTA - 50) & 127)]) + ((0.0053697700000000003 * fVec21[((IOTA - 49) & 127)]) + ((0.0012248000000000001 * fVec21[((IOTA - 48) & 127)]) + ((0.0058665100000000001 * fVec21[((IOTA - 43) & 127)]) + ((0.0074193800000000006 * fVec21[((IOTA - 19) & 127)]) + ((0.0019103500000000001 * fVec21[((IOTA - 42) & 127)]) + ((0.0091888300000000003 * fVec21[((IOTA - 38) & 127)]) + ((0.0083688600000000005 * fVec21[((IOTA - 37) & 127)]) + ((0.0049278500000000001 * fVec21[((IOTA - 36) & 127)]) + ((0.0073932900000000003 * fVec21[((IOTA - 33) & 127)]) + ((0.00548534 * fVec21[((IOTA - 31) & 127)]) + ((0.0028647 * fVec21[((IOTA - 30) & 127)]) + ((0.0077168700000000007 * fVec21[((IOTA - 28) & 127)]) + ((1.99452e-07 * fVec22[((IOTA - 126) & 127)]) + ((5.9452600000000002e-06 * fVec22[((IOTA - 125) & 127)]) + ((4.5447499999999991e-06 * fVec22[((IOTA - 124) & 127)]) + ((3.63984e-05 * fVec22[((IOTA - 121) & 127)]) + ((7.7160200000000014e-05 * fVec22[((IOTA - 120) & 127)]) + ((8.9261199999999998e-05 * fVec22[((IOTA - 113) & 127)]) + ((0.00032315499999999999 * fVec22[((IOTA - 109) & 127)]) + ((0.00016531600000000001 * fVec22[((IOTA - 108) & 127)]) + ((4.6986800000000009e-05 * fVec22[((IOTA - 106) & 127)]) + ((0.00025181600000000003 * fVec22[((IOTA - 105) & 127)]) + ((9.0767900000000016e-05 * fVec22[((IOTA - 99) & 127)]) + ((0.00023176100000000003 * fVec22[((IOTA - 97) & 127)]) + ((0.00080298400000000008 * fVec22[((IOTA - 96) & 127)]) + ((0.00069823599999999997 * fVec22[((IOTA - 95) & 127)]) + ((0.00077859999999999995 * fVec22[((IOTA - 94) & 127)]) + ((0.0010210200000000001 * fVec22[((IOTA - 93) & 127)]) + ((0.00079149500000000002 * fVec22[((IOTA - 69) & 127)]) + ((0.0059246500000000001 * fVec22[((IOTA - 68) & 127)]) + ((0.0068489100000000006 * fVec22[((IOTA - 67) & 127)]) + ((0.0030456500000000004 * fVec22[((IOTA - 66) & 127)]) + ((0.0024000200000000001 * fVec22[((IOTA - 64) & 127)]) + ((0.0039972499999999999 * fVec22[((IOTA - 63) & 127)]) + ((0.00464818 * fVec22[((IOTA - 51) & 127)]) + ((0.0030283900000000002 * fVec22[((IOTA - 50) & 127)]) + ((0.00066394700000000002 * fVec22[((IOTA - 47) & 127)]) + ((0.00253834 * fVec22[((IOTA - 44) & 127)]) + ((0.0083012099999999998 * fVec22[((IOTA - 43) & 127)]) + ((0.0117918 * fVec22[((IOTA - 40) & 127)]) + ((0.0095889700000000005 * fVec22[((IOTA - 36) & 127)]) + ((0.0071901300000000003 * fVec22[((IOTA - 35) & 127)]) + ((0.0060223199999999994 * fVec22[((IOTA - 32) & 127)]) + ((0.045109799999999999 * fVec22[((IOTA - 31) & 127)]) + ((0.0208799 * fVec22[((IOTA - 30) & 127)]) + ((0.017652600000000001 * fVec22[((IOTA - 27) & 127)]) + ((0.017632800000000001 * fVec22[((IOTA - 22) & 127)]) + ((0.017422800000000002 * fVec22[((IOTA - 21) & 127)]) + ((0.022197600000000001 * fVec22[((IOTA - 20) & 127)]) + ((0.019054700000000001 * fVec22[((IOTA - 19) & 127)]) + ((0.016357099999999999 * fVec22[((IOTA - 17) & 127)]) + ((0.020028999999999998 * fVec22[((IOTA - 16) & 127)]) + ((0.0078711900000000001 * fVec22[((IOTA - 12) & 127)]) + ((0.0014582099999999999 * fVec22[((IOTA - 11) & 127)]) + ((0.00062471599999999999 * fVec22[((IOTA - 9) & 127)]) + ((0.00162677 * fVec22[((IOTA - 7) & 127)]) + ((0.00116299 * fVec22[((IOTA - 5) & 127)]) + ((8.6241699999999998e-05 * fVec22[((IOTA - 4) & 127)]) + ((0.00039905000000000002 * fVec22[((IOTA - 3) & 127)]) + ((4.7087999999999997e-06 * fVec22[((IOTA - 1) & 127)]) + ((0.00153375 * fVec22[((IOTA - 78) & 127)]) + ((0.0010877699999999998 * fVec22[((IOTA - 77) & 127)]) + ((0.0010103800000000002 * fVec22[((IOTA - 76) & 127)]) + ((0.00051142200000000009 * fVec22[((IOTA - 88) & 127)]) + ((0.00065435200000000008 * fVec22[((IOTA - 87) & 127)]) + ((0.00128331 * fVec22[((IOTA - 86) & 127)]) + ((0.00044122600000000002 * fVec22[((IOTA - 85) & 127)]) + ((0.00109859 * fVec22[((IOTA - 84) & 127)]) + ((0.00048614699999999998 * fVec22[((IOTA - 83) & 127)]) + ((0.00056543900000000005 * fVec22[((IOTA - 81) & 127)]) + ((0.00042531800000000005 * fVec22[((IOTA - 80) & 127)]) + ((0.00037687700000000002 * fVec22[((IOTA - 79) & 127)]) + ((5.3289600000000006e-05 * fVec25[((IOTA - 119) & 127)]) + ((0.000107805 * fVec25[((IOTA - 118) & 127)]) + ((0.00016857100000000001 * fVec25[((IOTA - 117) & 127)]) + ((0.00017462800000000002 * fVec25[((IOTA - 116) & 127)]) + ((0.00020061900000000003 * fVec25[((IOTA - 115) & 127)]) + ((0.00026791400000000001 * fVec25[((IOTA - 114) & 127)]) + ((0.000214133 * fVec25[((IOTA - 113) & 127)]) + ((0.00012941499999999999 * fVec25[((IOTA - 112) & 127)]) + ((0.000341992 * fVec25[((IOTA - 111) & 127)]) + ((0.00073887099999999999 * fVec25[((IOTA - 110) & 127)]) + ((0.000178548 * fVec25[((IOTA - 109) & 127)]) + ((0.00034591100000000002 * fVec25[((IOTA - 107) & 127)]) + ((0.00056230400000000002 * fVec25[((IOTA - 106) & 127)]) + ((0.00034390400000000002 * fVec25[((IOTA - 105) & 127)]) + ((0.00040135500000000005 * fVec25[((IOTA - 102) & 127)]) + ((1.2323300000000001e-05 * fVec25[((IOTA - 99) & 127)]) + ((0.00017320599999999999 * fVec25[((IOTA - 98) & 127)]) + ((0.00137867 * fVec25[((IOTA - 90) & 127)]) + ((0.0011166000000000001 * fVec25[((IOTA - 89) & 127)]) + ((0.00077525200000000004 * fVec25[((IOTA - 88) & 127)]) + ((0.00051248299999999999 * fVec25[((IOTA - 87) & 127)]) + ((0.00034004900000000004 * fVec25[((IOTA - 86) & 127)]) + ((0.000134423 * fVec25[((IOTA - 84) & 127)]) + ((0.0011347400000000002 * fVec25[((IOTA - 83) & 127)]) + ((5.784670000000001e-05 * fVec25[((IOTA - 82) & 127)]) + ((0.0008637740000000001 * fVec25[((IOTA - 78) & 127)]) + ((0.0017782899999999999 * fVec25[((IOTA - 77) & 127)]) + ((0.00095740300000000012 * fVec25[((IOTA - 76) & 127)]) + ((0.00027913800000000001 * fVec25[((IOTA - 75) & 127)]) + ((0.000413929 * fVec25[((IOTA - 74) & 127)]) + ((0.0014493400000000001 * fVec25[((IOTA - 70) & 127)]) + ((0.0024630899999999998 * fVec25[((IOTA - 69) & 127)]) + ((0.00066884400000000004 * fVec25[((IOTA - 68) & 127)]) + ((0.0016410700000000001 * fVec25[((IOTA - 66) & 127)]) + ((0.0028929999999999997 * fVec25[((IOTA - 65) & 127)]) + ((0.00010676699999999999 * fVec25[((IOTA - 60) & 127)]) + ((0.00080710999999999999 * fVec25[((IOTA - 58) & 127)]) + ((0.0015732999999999999 * fVec25[((IOTA - 57) & 127)]) + ((0.00047008900000000003 * fVec25[((IOTA - 56) & 127)]) + ((0.00058858800000000002 * fVec25[((IOTA - 46) & 127)]) + ((0.0089012100000000014 * fVec25[((IOTA - 45) & 127)]) + ((0.0063971999999999996 * fVec25[((IOTA - 44) & 127)]) + ((0.0011654300000000001 * fVec25[((IOTA - 42) & 127)]) + ((0.0065539300000000003 * fVec25[((IOTA - 41) & 127)]) + ((0.00199292 * fVec25[((IOTA - 37) & 127)]) + ((0.0048789100000000002 * fVec25[((IOTA - 36) & 127)]) + ((0.00714622 * fVec25[((IOTA - 35) & 127)]) + ((0.0095548600000000001 * fVec25[((IOTA - 33) & 127)]) + ((0.0029659300000000003 * fVec25[((IOTA - 29) & 127)]) + ((0.029996000000000002 * fVec25[((IOTA - 28) & 127)]) + ((0.0016475999999999999 * fVec25[((IOTA - 27) & 127)]) + ((0.0254705 * fVec25[((IOTA - 25) & 127)]) + ((0.0083854199999999993 * fVec25[((IOTA - 24) & 127)]) + ((0.039960800000000005 * fVec25[((IOTA - 18) & 127)]) + ((0.0071864600000000004 * fVec25[((IOTA - 17) & 127)]) + ((0.032838599999999996 * fVec25[((IOTA - 15) & 127)]) + ((0.00164934 * fVec25[((IOTA - 14) & 127)]) + ((0.0050885600000000007 * fVec25[((IOTA - 13) & 127)]) + ((0.00094482099999999999 * fVec25[((IOTA - 10) & 127)]) + ((7.6144500000000003e-05 * fVec25[((IOTA - 9) & 127)]) + ((0.00057894000000000001 * fVec25[((IOTA - 8) & 127)]) + ((0.00159128 * fVec25[((IOTA - 6) & 127)]) + ((0.00015391 * fVec25[((IOTA - 4) & 127)]) + ((0.00036213800000000002 * fVec25[((IOTA - 2) & 127)]) + ((1.8821400000000002e-05 * fTemp25) + ((3.5712499999999999e-07 * fVec24[((IOTA - 126) & 127)]) + ((1.1903999999999999e-06 * fVec24[((IOTA - 125) & 127)]) + ((9.2364300000000006e-06 * fVec24[((IOTA - 124) & 127)]) + ((7.6588799999999991e-06 * fVec24[((IOTA - 123) & 127)]) + ((8.9591899999999999e-06 * fVec24[((IOTA - 120) & 127)]) + ((8.6424300000000005e-05 * fVec24[((IOTA - 119) & 127)]) + ((7.8613700000000009e-05 * fVec24[((IOTA - 118) & 127)]) + ((4.4238600000000007e-05 * fVec24[((IOTA - 117) & 127)]) + ((5.5205099999999998e-06 * fVec24[((IOTA - 115) & 127)]) + ((6.6639900000000005e-05 * fVec24[((IOTA - 114) & 127)]) + ((0.000157369 * fVec24[((IOTA - 111) & 127)]) + ((8.3003200000000005e-05 * fVec24[((IOTA - 110) & 127)]) + ((0.000439844 * fVec24[((IOTA - 107) & 127)]) + ((0.00027481100000000002 * fVec24[((IOTA - 106) & 127)]) + ((0.0014874700000000001 * fVec24[((IOTA - 86) & 127)]) + ((0.00093692899999999997 * fVec24[((IOTA - 85) & 127)]) + ((0.0006546770000000001 * fVec24[((IOTA - 84) & 127)]) + ((0.000134809 * fVec24[((IOTA - 83) & 127)]) + ((0.00019593 * fVec24[((IOTA - 82) & 127)]) + ((0.0010831700000000001 * fVec24[((IOTA - 81) & 127)]) + ((0.00121283 * fVec24[((IOTA - 80) & 127)]) + ((0.0021823700000000003 * fVec24[((IOTA - 79) & 127)]) + ((0.00119166 * fVec24[((IOTA - 78) & 127)]) + ((0.00055397699999999999 * fVec24[((IOTA - 74) & 127)]) + ((0.0020279199999999999 * fVec24[((IOTA - 73) & 127)]) + ((0.00014092800000000002 * fVec24[((IOTA - 72) & 127)]) + ((8.5715000000000015e-05 * fVec24[((IOTA - 70) & 127)]) + ((0.00122613 * fVec24[((IOTA - 69) & 127)]) + ((0.0019218100000000001 * fVec24[((IOTA - 68) & 127)]) + ((0.00059488300000000004 * fVec24[((IOTA - 67) & 127)]) + ((0.000167615 * fVec24[((IOTA - 63) & 127)]) + ((0.00088971800000000006 * fVec24[((IOTA - 61) & 127)]) + ((0.0030282500000000001 * fVec24[((IOTA - 60) & 127)]) + ((0.0047336600000000006 * fVec24[((IOTA - 54) & 127)]) + ((0.0044919299999999999 * fVec24[((IOTA - 53) & 127)]) + ((0.0011470100000000002 * fVec24[((IOTA - 50) & 127)]) + ((0.0012055499999999999 * fVec24[((IOTA - 48) & 127)]) + ((0.0059192300000000002 * fVec24[((IOTA - 47) & 127)]) + ((0.0032900500000000001 * fVec24[((IOTA - 44) & 127)]) + ((0.00224289 * fVec24[((IOTA - 43) & 127)]) + ((0.00017730600000000001 * fVec24[((IOTA - 42) & 127)]) + ((0.0072601800000000006 * fVec24[((IOTA - 41) & 127)]) + ((0.00453353 * fVec24[((IOTA - 38) & 127)]) + ((0.00194991 * fVec24[((IOTA - 37) & 127)]) + ((0.00083337500000000002 * fVec24[((IOTA - 35) & 127)]) + ((0.0247151 * fVec24[((IOTA - 34) & 127)]) + ((0.0069191299999999999 * fVec24[((IOTA - 30) & 127)]) + ((0.0098116000000000002 * fVec24[((IOTA - 29) & 127)]) + ((0.0033760599999999997 * fVec24[((IOTA - 28) & 127)]) + ((0.0036533899999999998 * fVec24[((IOTA - 27) & 127)]) + ((0.0209074 * fVec24[((IOTA - 22) & 127)]) + ((0.0101589 * fVec24[((IOTA - 21) & 127)]) + ((0.016458299999999999 * fVec24[((IOTA - 20) & 127)]) + ((0.021493699999999998 * fVec24[((IOTA - 17) & 127)]) + ((0.0062705200000000008 * fVec24[((IOTA - 16) & 127)]) + ((0.0048823400000000006 * fVec24[((IOTA - 14) & 127)]) + ((0.00084803800000000007 * fVec24[((IOTA - 11) & 127)]) + ((0.0012552099999999999 * fVec24[((IOTA - 8) & 127)]) + ((0.00022105899999999999 * fVec24[((IOTA - 6) & 127)]) + ((0.00024554399999999999 * fVec24[((IOTA - 5) & 127)]) + ((0.00061196600000000003 * fVec24[((IOTA - 4) & 127)]) + ((0.00014579800000000002 * fVec24[((IOTA - 2) & 127)]) + ((3.2093500000000007e-05 * fVec24[((IOTA - 102) & 127)]) + ((0.00036137300000000001 * fVec24[((IOTA - 96) & 127)]) + ((0.0010790400000000001 * fVec24[((IOTA - 88) & 127)]) + ((0.00061885399999999995 * fVec24[((IOTA - 95) & 127)]) + ((0.00066768000000000003 * fVec24[((IOTA - 94) & 127)]) + ((0.00017124500000000002 * fVec24[((IOTA - 93) & 127)]) + ((0.00025192200000000002 * fVec24[((IOTA - 92) & 127)]) + ((0.00091703800000000001 * fVec24[((IOTA - 91) & 127)]) + ((1.2403399999999998e-06 * fVec26[((IOTA - 126) & 127)]) + ((6.5523199999999996e-06 * fVec26[((IOTA - 125) & 127)]) + ((7.103729999999999e-06 * fVec26[((IOTA - 124) & 127)]) + ((4.8057499999999997e-06 * fVec26[((IOTA - 123) & 127)]) + ((1.4907900000000002e-05 * fVec26[((IOTA - 122) & 127)]) + ((5.6678000000000002e-05 * fVec26[((IOTA - 121) & 127)]) + ((3.2618499999999999e-05 * fVec26[((IOTA - 120) & 127)]) + ((4.2858599999999997e-05 * fVec26[((IOTA - 116) & 127)]) + ((1.2154900000000001e-05 * fVec26[((IOTA - 115) & 127)]) + ((8.1906300000000006e-05 * fVec26[((IOTA - 101) & 127)]) + ((0.0015949800000000002 * fVec24[((IOTA - 87) & 127)]) + ((0.00050917300000000003 * fVec26[((IOTA - 100) & 127)]) + ((3.9907800000000004e-05 * fVec26[((IOTA - 92) & 127)]) + ((0.00063396999999999998 * fVec26[((IOTA - 91) & 127)]) + ((0.00126468 * fVec26[((IOTA - 90) & 127)]) + ((0.0016863 * fVec26[((IOTA - 89) & 127)]) + ((0.0009600120000000001 * fVec26[((IOTA - 86) & 127)]) + ((0.012640400000000001 * fVec26[((IOTA - 17) & 127)]) + ((0.00686843 * fVec26[((IOTA - 15) & 127)]) + ((0.0014359399999999999 * fVec26[((IOTA - 13) & 127)]) + ((0.00021416200000000003 * fVec26[((IOTA - 9) & 127)]) + ((0.00044645700000000004 * fVec26[((IOTA - 8) & 127)]) + ((0.00064300400000000008 * fVec26[((IOTA - 84) & 127)]) + ((0.00199081 * fVec26[((IOTA - 83) & 127)]) + ((0.0032951600000000001 * fVec26[((IOTA - 82) & 127)]) + ((0.00044377400000000002 * fVec26[((IOTA - 81) & 127)]) + ((0.0011996999999999999 * fVec26[((IOTA - 78) & 127)]) + ((0.0027583899999999999 * fVec26[((IOTA - 77) & 127)]) + ((0.00029621600000000002 * fVec26[((IOTA - 76) & 127)]) + ((0.00042185499999999995 * fVec26[((IOTA - 85) & 127)]) + ((0.00032057000000000006 * fVec26[((IOTA - 74) & 127)]) + ((0.00011427200000000001 * fVec26[((IOTA - 70) & 127)]) + ((0.0023553899999999997 * fVec26[((IOTA - 69) & 127)]) + ((0.00121634 * fVec26[((IOTA - 61) & 127)]) + ((0.0031460699999999999 * fVec26[((IOTA - 60) & 127)]) + ((0.0028280900000000001 * fVec26[((IOTA - 59) & 127)]) + ((0.0041894900000000006 * fVec26[((IOTA - 58) & 127)]) + ((0.0050431600000000005 * fVec26[((IOTA - 57) & 127)]) + ((0.00070018900000000004 * fVec26[((IOTA - 56) & 127)]) + ((0.00079562299999999997 * fVec26[((IOTA - 55) & 127)]) + ((0.0022291200000000002 * fVec26[((IOTA - 54) & 127)]) + ((0.0010627800000000001 * fVec26[((IOTA - 53) & 127)]) + ((0.0025782299999999999 * fVec26[((IOTA - 52) & 127)]) + ((0.0010116599999999999 * fVec26[((IOTA - 51) & 127)]) + ((0.0030807500000000002 * fVec26[((IOTA - 45) & 127)]) + ((0.0044340900000000008 * fVec26[((IOTA - 44) & 127)]) + ((0.0014659899999999999 * fVec26[((IOTA - 39) & 127)]) + ((0.0075921599999999997 * fVec26[((IOTA - 38) & 127)]) + ((0.0013163199999999999 * fVec26[((IOTA - 36) & 127)]) + ((0.00139712 * fVec26[((IOTA - 35) & 127)]) + ((0.020927999999999999 * fVec26[((IOTA - 31) & 127)]) + ((0.0030580300000000002 * fVec26[((IOTA - 30) & 127)]) + ((0.0031714500000000001 * fVec26[((IOTA - 27) & 127)]) + ((0.0298252 * fVec26[((IOTA - 26) & 127)]) + ((0.0033139300000000001 * fVec26[((IOTA - 23) & 127)]) + ((0.0065595499999999999 * fVec26[((IOTA - 21) & 127)]) + ((0.0090886700000000001 * fVec26[((IOTA - 20) & 127)]) + ((0.0062460900000000001 * fVec26[((IOTA - 18) & 127)]) + ((7.7107099999999996e-07 * fVec6[((IOTA - 126) & 127)]) + ((5.8016599999999996e-06 * fVec6[((IOTA - 125) & 127)]) + ((1.0293200000000002e-05 * fVec6[((IOTA - 124) & 127)]) + ((0.00023944000000000002 * fVec26[((IOTA - 4) & 127)]) + ((1.26402e-05 * fVec6[((IOTA - 123) & 127)]) + ((1.2875300000000002e-05 * fVec6[((IOTA - 120) & 127)]) + ((3.0919700000000001e-05 * fVec6[((IOTA - 119) & 127)]) + ((1.3730199999999999e-05 * fVec6[((IOTA - 118) & 127)]) + ((0.00010595300000000001 * fVec6[((IOTA - 117) & 127)]) + ((6.2319599999999999e-05 * fVec6[((IOTA - 116) & 127)]) + ((2.2893700000000001e-05 * fVec6[((IOTA - 114) & 127)]) + ((3.6990800000000005e-05 * fVec6[((IOTA - 113) & 127)]) + ((3.3055699999999998e-06 * fTemp26) + ((0.0014893700000000001 * fVec6[((IOTA - 94) & 127)]) + ((4.13336e-05 * fVec26[((IOTA - 2) & 127)]) + ((0.00075849800000000003 * fVec6[((IOTA - 93) & 127)]) + ((1.7939800000000001e-05 * fVec6[((IOTA - 89) & 127)]) + ((0.00022978000000000001 * fVec6[((IOTA - 88) & 127)]) + ((0.00040871000000000006 * fVec6[((IOTA - 87) & 127)]) + ((0.00042454500000000002 * fVec6[((IOTA - 86) & 127)]) + ((0.00052778200000000008 * fVec6[((IOTA - 85) & 127)]) + ((0.00239894 * fVec6[((IOTA - 84) & 127)]) + ((0.0029262899999999998 * fVec6[((IOTA - 83) & 127)]) + ((0.0016715800000000002 * fVec6[((IOTA - 82) & 127)]) + ((0.0011202900000000001 * fVec6[((IOTA - 81) & 127)]) + ((7.5395799999999992e-06 * fVec6[((IOTA - 80) & 127)]) + ((0.00041440900000000002 * fVec6[((IOTA - 79) & 127)]) + ((3.0152300000000003e-05 * fVec6[((IOTA - 78) & 127)]) + ((0.00022437700000000002 * fVec6[((IOTA - 2) & 127)]) + ((1.9893300000000001e-05 * fVec6[((IOTA - 1) & 127)]) + ((0.0034218899999999999 * fVec6[((IOTA - 17) & 127)]) + ((0.016782399999999999 * fVec6[((IOTA - 14) & 127)]) + ((2.9919300000000003e-05 * fVec6[((IOTA - 11) & 127)]) + ((3.3796500000000001e-05 * fVec6[((IOTA - 9) & 127)]) + ((0.00054442100000000001 * fVec6[((IOTA - 8) & 127)]) + ((0.00071683100000000002 * fVec6[((IOTA - 76) & 127)]) + ((3.8916400000000006e-05 * fVec6[((IOTA - 75) & 127)]) + ((0.0012073799999999999 * fVec6[((IOTA - 74) & 127)]) + ((0.0031728900000000003 * fVec6[((IOTA - 73) & 127)]) + ((0.0018727100000000001 * fVec6[((IOTA - 72) & 127)]) + ((0.00091280400000000013 * fVec6[((IOTA - 63) & 127)]) + ((0.0016841900000000001 * fVec6[((IOTA - 57) & 127)]) + ((0.0014167300000000002 * fVec6[((IOTA - 56) & 127)]) + ((8.9493100000000012e-05 * fVec6[((IOTA - 53) & 127)]) + ((0.00032871800000000003 * fVec6[((IOTA - 52) & 127)]) + ((0.00168373 * fVec6[((IOTA - 51) & 127)]) + ((0.0039323600000000002 * fVec6[((IOTA - 50) & 127)]) + ((0.00094270700000000009 * fVec6[((IOTA - 49) & 127)]) + ((0.0014762200000000001 * fVec6[((IOTA - 45) & 127)]) + ((0.0053497099999999997 * fVec6[((IOTA - 44) & 127)]) + ((0.0013171900000000002 * fVec6[((IOTA - 43) & 127)]) + ((0.0034829700000000002 * fVec6[((IOTA - 41) & 127)]) + ((0.0043833000000000006 * fVec6[((IOTA - 40) & 127)]) + ((0.0085886299999999999 * fVec6[((IOTA - 37) & 127)]) + ((0.0098696699999999988 * fVec6[((IOTA - 36) & 127)]) + ((0.0081568500000000002 * fVec6[((IOTA - 33) & 127)]) + ((0.0055860800000000002 * fVec6[((IOTA - 32) & 127)]) + ((0.0076456700000000002 * fVec6[((IOTA - 31) & 127)]) + ((0.0047620600000000003 * fVec6[((IOTA - 30) & 127)]) + ((0.00244034 * fVec6[((IOTA - 26) & 127)]) + ((0.0027159100000000002 * fVec6[((IOTA - 25) & 127)]) + ((0.0355257 * fVec6[((IOTA - 24) & 127)]) + ((0.013501399999999998 * fVec6[((IOTA - 21) & 127)]) + ((0.010106800000000001 * fVec6[((IOTA - 20) & 127)]) + ((0.016007400000000001 * fVec6[((IOTA - 19) & 127)]) + ((0.020679400000000001 * fVec6[((IOTA - 18) & 127)]) + ((7.4901799999999991e-07 * fVec27[((IOTA - 126) & 127)]) + ((5.2121499999999997e-06 * fVec27[((IOTA - 125) & 127)]) + ((0.00043977500000000005 * fVec6[((IOTA - 6) & 127)]) + ((1.5791000000000002e-05 * fVec27[((IOTA - 124) & 127)]) + ((0.00054478099999999993 * fVec6[((IOTA - 5) & 127)]) + ((2.1421500000000001e-05 * fVec27[((IOTA - 123) & 127)]) + ((2.2224499999999998e-06 * fVec27[((IOTA - 122) & 127)]) + ((2.15894e-05 * fVec27[((IOTA - 121) & 127)]) + ((4.67294e-05 * fVec27[((IOTA - 120) & 127)]) + ((1.9006100000000001e-05 * fVec27[((IOTA - 119) & 127)]) + ((0.00029154800000000003 * fVec27[((IOTA - 104) & 127)]) + ((0.000281437 * fVec27[((IOTA - 102) & 127)]) + ((0.000737136 * fVec27[((IOTA - 101) & 127)]) + ((0.00013028900000000001 * fVec27[((IOTA - 100) & 127)]) + ((0.00065116800000000004 * fVec27[((IOTA - 97) & 127)]) + ((0.00087714900000000003 * fVec27[((IOTA - 96) & 127)]) + ((0.00059851200000000005 * fVec27[((IOTA - 95) & 127)]) + ((0.00058117100000000001 * fVec27[((IOTA - 94) & 127)]) + ((7.4501400000000011e-05 * fVec27[((IOTA - 93) & 127)]) + ((0.00070493400000000005 * fVec27[((IOTA - 92) & 127)]) + ((0.0016990600000000001 * fVec27[((IOTA - 91) & 127)]) + ((0.00105839 * fVec27[((IOTA - 90) & 127)]) + ((0.00064867600000000005 * fVec27[((IOTA - 89) & 127)]) + ((0.00045359999999999997 * fVec27[((IOTA - 84) & 127)]) + ((0.00105405 * fVec27[((IOTA - 83) & 127)]) + ((0.00066430600000000003 * fVec27[((IOTA - 82) & 127)]) + ((1.0579500000000001e-05 * fVec27[((IOTA - 79) & 127)]) + ((0.00085561100000000005 * fVec27[((IOTA - 78) & 127)]) + ((0.00048425300000000003 * fVec27[((IOTA - 77) & 127)]) + ((0.00017929400000000001 * fVec27[((IOTA - 70) & 127)]) + ((0.0012052899999999999 * fVec27[((IOTA - 69) & 127)]) + ((9.0909400000000007e-05 * fVec27[((IOTA - 63) & 127)]) + ((7.1183600000000001e-05 * fVec27[((IOTA - 62) & 127)]) + ((0.0316397 * fVec27[((IOTA - 20) & 127)]) + ((0.0629913 * fVec27[((IOTA - 19) & 127)]) + ((0.00082095500000000006 * fVec27[((IOTA - 18) & 127)]) + ((0.027291599999999999 * fVec27[((IOTA - 17) & 127)]) + ((0.037210699999999999 * fVec27[((IOTA - 16) & 127)]) + ((0.00091706600000000002 * fVec27[((IOTA - 15) & 127)]) + ((0.00067622200000000009 * fVec27[((IOTA - 10) & 127)]) + ((0.00071360300000000005 * fVec27[((IOTA - 8) & 127)]) + ((0.000243654 * fVec27[((IOTA - 7) & 127)]) + ((0.00032285800000000003 * fVec27[((IOTA - 6) & 127)]) + ((0.000171535 * fVec27[((IOTA - 5) & 127)]) + ((9.1102699999999994e-07 * fVec27[((IOTA - 3) & 127)]) + ((0.000151989 * fVec27[((IOTA - 2) & 127)]) + ((7.3887899999999996e-06 * fVec27[((IOTA - 1) & 127)]) + ((0.0133066 * fVec27[((IOTA - 27) & 127)]) + ((0.00144718 * fVec27[((IOTA - 60) & 127)]) + ((0.0011860799999999999 * fVec27[((IOTA - 59) & 127)]) + ((0.0020690300000000003 * fVec27[((IOTA - 57) & 127)]) + ((0.0015602599999999999 * fVec27[((IOTA - 56) & 127)]) + ((0.0016904800000000001 * fVec27[((IOTA - 53) & 127)]) + ((0.00271579 * fVec27[((IOTA - 52) & 127)]) + ((0.0088627000000000011 * fVec27[((IOTA - 51) & 127)]) + ((0.00769069 * fVec27[((IOTA - 50) & 127)]) + ((0.0025811200000000001 * fVec27[((IOTA - 49) & 127)]) + ((0.0020010100000000001 * fVec27[((IOTA - 47) & 127)]) + ((0.0056659300000000004 * fVec27[((IOTA - 46) & 127)]) + ((0.0029520400000000004 * fVec27[((IOTA - 45) & 127)]) + ((0.0094207800000000001 * fVec27[((IOTA - 44) & 127)]) + ((0.0089927300000000009 * fVec27[((IOTA - 43) & 127)]) + ((0.0031344599999999999 * fVec27[((IOTA - 40) & 127)]) + ((0.0020825100000000001 * fVec27[((IOTA - 39) & 127)]) + ((0.010519000000000001 * fVec27[((IOTA - 30) & 127)]) + ((6.2717999999999998e-07 * fVec28[((IOTA - 126) & 127)]) + ((3.2364399999999999e-06 * fVec28[((IOTA - 125) & 127)]) + ((8.259009999999999e-06 * fVec28[((IOTA - 123) & 127)]) + ((0.024085600000000002 * fVec27[((IOTA - 22) & 127)]) + ((8.9749599999999985e-06 * fVec28[((IOTA - 122) & 127)]) + ((1.8158200000000002e-05 * fVec28[((IOTA - 121) & 127)]) + ((5.1987600000000003e-05 * fVec28[((IOTA - 120) & 127)]) + ((0.0087774500000000009 * fVec27[((IOTA - 21) & 127)]) + ((3.15558e-05 * fVec28[((IOTA - 119) & 127)]) + ((5.2186399999999999e-05 * fVec28[((IOTA - 117) & 127)]) + ((0.00018432800000000001 * fVec28[((IOTA - 116) & 127)]) + ((5.6034300000000007e-05 * fVec28[((IOTA - 115) & 127)]) + ((6.3985300000000012e-05 * fVec28[((IOTA - 111) & 127)]) + ((9.3386400000000004e-05 * fVec28[((IOTA - 110) & 127)]) + ((0.000174119 * fVec28[((IOTA - 109) & 127)]) + ((0.00035722100000000001 * fVec28[((IOTA - 106) & 127)]) + ((0.00040952500000000005 * fVec28[((IOTA - 105) & 127)]) + ((0.00017427299999999999 * fVec28[((IOTA - 104) & 127)]) + ((0.00071199800000000004 * fVec28[((IOTA - 97) & 127)]) + ((0.0017188800000000001 * fVec28[((IOTA - 96) & 127)]) + ((0.00054225400000000004 * fVec28[((IOTA - 95) & 127)]) + ((0.000197515 * fVec28[((IOTA - 86) & 127)]) + ((0.0015781700000000001 * fVec28[((IOTA - 85) & 127)]) + ((0.0013863900000000001 * fVec28[((IOTA - 84) & 127)]) + ((1.9453499999999999e-05 * fVec28[((IOTA - 80) & 127)]) + ((0.00084547300000000001 * fVec28[((IOTA - 78) & 127)]) + ((0.00076569700000000008 * fVec28[((IOTA - 76) & 127)]) + ((0.0010572699999999999 * fVec28[((IOTA - 75) & 127)]) + ((7.5785200000000008e-05 * fVec28[((IOTA - 74) & 127)]) + ((0.0013651400000000001 * fVec28[((IOTA - 73) & 127)]) + ((2.74129e-05 * fVec28[((IOTA - 72) & 127)]) + ((0.00022492500000000001 * fVec28[((IOTA - 71) & 127)]) + ((0.0012562599999999999 * fVec28[((IOTA - 68) & 127)]) + ((0.0010871100000000001 * fVec28[((IOTA - 66) & 127)]) + ((0.0020311800000000001 * fVec28[((IOTA - 65) & 127)]) + ((0.0011967099999999999 * fVec28[((IOTA - 64) & 127)]) + ((6.0100200000000004e-05 * fVec28[((IOTA - 63) & 127)]) + ((0.0034691399999999999 * fVec28[((IOTA - 36) & 127)]) + ((0.0053706500000000003 * fVec28[((IOTA - 31) & 127)]) + ((0.00080878800000000006 * fVec28[((IOTA - 29) & 127)]) + ((0.0049867499999999999 * fVec28[((IOTA - 28) & 127)]) + ((0.0289144 * fVec28[((IOTA - 26) & 127)]) + ((0.0069377800000000002 * fVec28[((IOTA - 23) & 127)]) + ((0.015224500000000002 * fVec28[((IOTA - 20) & 127)]) + ((0.022025899999999998 * fVec28[((IOTA - 19) & 127)]) + ((0.0022348099999999998 * fVec28[((IOTA - 15) & 127)]) + ((0.00084613300000000011 * fVec28[((IOTA - 10) & 127)]) + ((0.00031658400000000002 * fVec28[((IOTA - 8) & 127)]) + ((4.6817000000000003e-05 * fVec28[((IOTA - 7) & 127)]) + ((0.00030049700000000005 * fVec28[((IOTA - 6) & 127)]) + ((0.00030608399999999998 * fVec28[((IOTA - 4) & 127)]) + ((4.2592100000000005e-06 * fVec28[((IOTA - 3) & 127)]) + ((5.0763200000000002e-05 * fVec28[((IOTA - 2) & 127)]) + ((6.9052499999999997e-06 * fTemp28) + ((0.0080632699999999991 * fVec28[((IOTA - 42) & 127)]) + ((0.0029713500000000002 * fVec28[((IOTA - 39) & 127)]) + ((0.0025393899999999999 * fVec28[((IOTA - 57) & 127)]) + ((0.0044228100000000001 * fVec28[((IOTA - 56) & 127)]) + ((0.0033445299999999996 * fVec28[((IOTA - 55) & 127)]) + ((0.0038119900000000003 * fVec28[((IOTA - 52) & 127)]) + ((0.00126195 * fVec28[((IOTA - 47) & 127)]) + ((0.00358275 * fVec28[((IOTA - 46) & 127)]) + ((0.0054975199999999997 * fVec28[((IOTA - 45) & 127)]) + ((0.0039510000000000005 * fVec28[((IOTA - 43) & 127)]) + ((9.1296399999999994e-07 * fVec29[((IOTA - 126) & 127)]) + ((3.51464e-06 * fVec29[((IOTA - 125) & 127)]) + ((2.3408799999999998e-06 * fVec29[((IOTA - 124) & 127)]) + ((1.2859600000000001e-05 * fVec29[((IOTA - 122) & 127)]) + ((6.8135399999999998e-05 * fVec29[((IOTA - 121) & 127)]) + ((7.0622400000000003e-05 * fVec29[((IOTA - 120) & 127)]) + ((4.4616900000000003e-05 * fVec29[((IOTA - 117) & 127)]) + ((0.0045339300000000003 * fVec28[((IOTA - 38) & 127)]) + ((0.00015610500000000002 * fVec29[((IOTA - 109) & 127)]) + ((9.1847800000000005e-05 * fVec29[((IOTA - 106) & 127)]) + ((0.00040533400000000003 * fVec29[((IOTA - 105) & 127)]) + ((8.3187099999999995e-05 * fVec29[((IOTA - 100) & 127)]) + ((7.3548200000000008e-05 * fVec29[((IOTA - 99) & 127)]) + ((0.00037095800000000001 * fVec29[((IOTA - 98) & 127)]) + ((0.0010441100000000002 * fVec29[((IOTA - 97) & 127)]) + ((0.00075582300000000009 * fVec29[((IOTA - 96) & 127)]) + ((0.00068145800000000002 * fVec29[((IOTA - 95) & 127)]) + ((0.0017419500000000001 * fVec29[((IOTA - 94) & 127)]) + ((0.0020959099999999999 * fVec29[((IOTA - 93) & 127)]) + ((0.00075253699999999995 * fVec29[((IOTA - 89) & 127)]) + ((0.00076358900000000006 * fVec29[((IOTA - 88) & 127)]) + ((0.00093791200000000006 * fVec29[((IOTA - 87) & 127)]) + ((0.00066410799999999995 * fVec29[((IOTA - 86) & 127)]) + ((2.1531600000000002e-05 * fVec29[((IOTA - 83) & 127)]) + ((0.00025595899999999999 * fVec29[((IOTA - 78) & 127)]) + ((0.0026293000000000002 * fVec29[((IOTA - 77) & 127)]) + ((0.00269454 * fVec29[((IOTA - 76) & 127)]) + ((0.00143391 * fVec29[((IOTA - 75) & 127)]) + ((0.00067648000000000003 * fVec29[((IOTA - 74) & 127)]) + ((0.000121165 * fVec29[((IOTA - 73) & 127)]) + ((0.00082825600000000009 * fVec29[((IOTA - 66) & 127)]) + ((0.00018963900000000002 * fVec29[((IOTA - 65) & 127)]) + ((0.00039613000000000002 * fVec29[((IOTA - 62) & 127)]) + ((0.0029183799999999999 * fVec29[((IOTA - 61) & 127)]) + ((0.0020411800000000001 * fVec29[((IOTA - 60) & 127)]) + ((0.0017256800000000001 * fVec29[((IOTA - 31) & 127)]) + ((0.027913199999999999 * fVec29[((IOTA - 24) & 127)]) + ((0.025743499999999999 * fVec29[((IOTA - 23) & 127)]) + ((0.0068529799999999998 * fVec29[((IOTA - 21) & 127)]) + ((0.063915300000000008 * fVec29[((IOTA - 20) & 127)]) + ((0.0661857 * fVec29[((IOTA - 19) & 127)]) + ((0.022665999999999999 * fVec29[((IOTA - 18) & 127)]) + ((0.00195357 * fVec29[((IOTA - 17) & 127)]) + ((0.0555369 * fVec29[((IOTA - 16) & 127)]) + ((0.027306 * fVec29[((IOTA - 15) & 127)]) + ((0.00054477599999999996 * fVec29[((IOTA - 10) & 127)]) + ((0.00092023100000000009 * fVec29[((IOTA - 7) & 127)]) + ((0.00095649800000000007 * fVec29[((IOTA - 6) & 127)]) + ((0.00031540600000000001 * fVec29[((IOTA - 2) & 127)]) + ((0.0036288100000000001 * fVec29[((IOTA - 42) & 127)]) + ((0.0078956300000000007 * fVec29[((IOTA - 40) & 127)]) + ((0.0035877300000000003 * fVec29[((IOTA - 57) & 127)]) + ((0.0028681000000000002 * fVec29[((IOTA - 56) & 127)]) + ((0.0047187499999999999 * fVec29[((IOTA - 52) & 127)]) + ((0.0066370199999999996 * fVec29[((IOTA - 51) & 127)]) + ((0.0045751999999999998 * fVec29[((IOTA - 50) & 127)]) + ((0.0044307699999999997 * fVec29[((IOTA - 49) & 127)]) + ((0.0081759099999999998 * fVec29[((IOTA - 48) & 127)]) + ((0.0042540899999999994 * fVec29[((IOTA - 47) & 127)]) + ((0.0031707900000000002 * fVec29[((IOTA - 46) & 127)]) + ((0.0049894200000000005 * fVec29[((IOTA - 45) & 127)]) + ((0.0097648300000000004 * fVec29[((IOTA - 44) & 127)]) + ((0.0162506 * fVec29[((IOTA - 43) & 127)]) + ((9.8664600000000001e-07 * fVec30[((IOTA - 125) & 127)]) + ((6.1935700000000003e-07 * fVec30[((IOTA - 122) & 127)]) + ((4.9322600000000008e-05 * fVec30[((IOTA - 119) & 127)]) + ((6.2934400000000005e-05 * fVec30[((IOTA - 118) & 127)]) + ((4.2778300000000003e-05 * fVec30[((IOTA - 117) & 127)]) + ((0.000106835 * fVec30[((IOTA - 116) & 127)]) + ((0.00018018099999999999 * fVec30[((IOTA - 115) & 127)]) + ((0.00022798800000000001 * fVec30[((IOTA - 114) & 127)]) + ((0.000195522 * fVec30[((IOTA - 113) & 127)]) + ((0.00011808300000000001 * fVec30[((IOTA - 112) & 127)]) + ((3.4608100000000005e-05 * fVec30[((IOTA - 111) & 127)]) + ((5.723480000000001e-05 * fVec30[((IOTA - 110) & 127)]) + ((0.00010142800000000001 * fVec30[((IOTA - 109) & 127)]) + ((0.000712925 * fVec30[((IOTA - 75) & 127)]) + ((0.00090846500000000001 * fVec30[((IOTA - 74) & 127)]) + ((0.000274135 * fVec30[((IOTA - 73) & 127)]) + ((0.000158107 * fVec30[((IOTA - 107) & 127)]) + ((0.00070563799999999997 * fVec30[((IOTA - 106) & 127)]) + ((0.00048340500000000007 * fVec30[((IOTA - 105) & 127)]) + ((0.00023814000000000002 * fVec30[((IOTA - 102) & 127)]) + ((0.00015213499999999999 * fVec30[((IOTA - 100) & 127)]) + ((9.4569700000000004e-05 * fVec30[((IOTA - 108) & 127)]) + ((0.0010091500000000001 * fVec30[((IOTA - 99) & 127)]) + ((0.0015510600000000002 * fVec30[((IOTA - 98) & 127)]) + ((0.00028692799999999999 * fVec30[((IOTA - 97) & 127)]) + ((0.00133293 * fVec30[((IOTA - 94) & 127)]) + ((0.0028975800000000003 * fVec30[((IOTA - 93) & 127)]) + ((0.00088707100000000013 * fVec30[((IOTA - 92) & 127)]) + ((0.00187875 * fVec30[((IOTA - 90) & 127)]) + ((0.0031641300000000002 * fVec30[((IOTA - 89) & 127)]) + ((0.0018413699999999999 * fVec30[((IOTA - 88) & 127)]) + ((0.00031068799999999999 * fVec30[((IOTA - 86) & 127)]) + ((0.00097602600000000006 * fVec30[((IOTA - 85) & 127)]) + ((0.0015255399999999999 * fVec30[((IOTA - 84) & 127)]) + ((0.00237411 * fVec30[((IOTA - 83) & 127)]) + ((0.00112458 * fVec30[((IOTA - 82) & 127)]) + ((0.000380057 * fVec30[((IOTA - 81) & 127)]) + ((0.00020890300000000003 * fVec30[((IOTA - 78) & 127)]) + ((0.00063438600000000002 * fVec30[((IOTA - 5) & 127)]) + ((0.00012589200000000001 * fVec30[((IOTA - 4) & 127)]) + ((0.00040925999999999999 * fVec30[((IOTA - 3) & 127)]) + ((6.4495100000000005e-05 * fVec30[((IOTA - 1) & 127)]) + ((1.3287400000000001e-05 * fTemp30) + ((0.00090694700000000018 * fVec30[((IOTA - 64) & 127)]) + ((0.0024532300000000003 * fVec30[((IOTA - 63) & 127)]) + ((0.00327984 * fVec30[((IOTA - 62) & 127)]) + ((0.0016773199999999999 * fVec30[((IOTA - 61) & 127)]) + ((0.00044967800000000007 * fVec30[((IOTA - 60) & 127)]) + ((0.00165106 * fVec30[((IOTA - 59) & 127)]) + ((0.0048987900000000001 * fVec30[((IOTA - 58) & 127)]) + ((0.0034805299999999999 * fVec30[((IOTA - 57) & 127)]) + ((0.0023563100000000003 * fVec30[((IOTA - 56) & 127)]) + ((0.0045976600000000008 * fVec30[((IOTA - 55) & 127)]) + ((0.00626758 * fVec30[((IOTA - 54) & 127)]) + ((0.0026557099999999999 * fVec30[((IOTA - 53) & 127)]) + ((0.0043297500000000003 * fVec30[((IOTA - 52) & 127)]) + ((0.009209740000000001 * fVec30[((IOTA - 51) & 127)]) + ((0.0029224400000000001 * fVec30[((IOTA - 50) & 127)]) + ((0.0033351100000000001 * fVec30[((IOTA - 49) & 127)]) + ((0.010395300000000001 * fVec30[((IOTA - 48) & 127)]) + ((0.0093701299999999991 * fVec30[((IOTA - 47) & 127)]) + ((0.0063169100000000002 * fVec30[((IOTA - 46) & 127)]) + ((0.013098200000000001 * fVec30[((IOTA - 45) & 127)]) + ((0.014119 * fVec30[((IOTA - 44) & 127)]) + ((0.0021459299999999999 * fVec30[((IOTA - 43) & 127)]) + ((0.0105223 * fVec30[((IOTA - 42) & 127)]) + ((0.022465099999999998 * fVec30[((IOTA - 41) & 127)]) + ((0.0080828600000000007 * fVec30[((IOTA - 40) & 127)]) + ((0.0026383800000000001 * fVec30[((IOTA - 39) & 127)]) + ((0.0090530699999999999 * fVec30[((IOTA - 38) & 127)]) + ((0.0048908699999999994 * fVec30[((IOTA - 37) & 127)]) + ((0.0060908100000000003 * fVec30[((IOTA - 35) & 127)]) + ((0.0095365099999999998 * fVec30[((IOTA - 32) & 127)]) + ((0.00093046600000000002 * fVec30[((IOTA - 22) & 127)]) + ((0.015390200000000001 * fVec30[((IOTA - 18) & 127)]) + ((0.045964499999999998 * fVec30[((IOTA - 17) & 127)]) + ((0.028787799999999999 * fVec30[((IOTA - 15) & 127)]) + ((0.048319200000000007 * fVec30[((IOTA - 14) & 127)]) + ((0.076845299999999991 * fVec30[((IOTA - 13) & 127)]) + ((0.074437400000000001 * fVec30[((IOTA - 12) & 127)]) + ((0.0013813599999999999 * fVec30[((IOTA - 11) & 127)]) + ((9.4869000000000016e-05 * fVec30[((IOTA - 10) & 127)]) + ((0.00097653599999999996 * fVec30[((IOTA - 9) & 127)]) + ((0.00011001600000000001 * fVec30[((IOTA - 8) & 127)]) + ((7.7027e-06 * fVec31[((IOTA - 124) & 127)]) + ((1.6838600000000002e-05 * fVec31[((IOTA - 123) & 127)]) + ((4.9636399999999996e-06 * fVec31[((IOTA - 122) & 127)]) + ((1.9403399999999997e-06 * fVec31[((IOTA - 121) & 127)]) + ((5.28142e-05 * fVec31[((IOTA - 120) & 127)]) + ((0.00011763 * fVec31[((IOTA - 119) & 127)]) + ((0.00016574 * fVec31[((IOTA - 118) & 127)]) + ((0.00013637100000000001 * fVec31[((IOTA - 117) & 127)]) + ((9.7487500000000005e-05 * fVec31[((IOTA - 116) & 127)]) + ((2.2899500000000003e-05 * fVec31[((IOTA - 115) & 127)]) + ((1.3387100000000001e-05 * fVec31[((IOTA - 114) & 127)]) + ((8.3318600000000019e-05 * fVec31[((IOTA - 113) & 127)]) + ((0.00025527000000000004 * fVec31[((IOTA - 112) & 127)]) + ((0.00034909600000000002 * fVec31[((IOTA - 111) & 127)]) + ((0.00019374600000000001 * fVec31[((IOTA - 107) & 127)]) + ((0.00019838400000000002 * fVec31[((IOTA - 103) & 127)]) + ((0.000168486 * fVec31[((IOTA - 96) & 127)]) + ((0.0012272400000000001 * fVec31[((IOTA - 95) & 127)]) + ((0.00020233 * fVec31[((IOTA - 94) & 127)]) + ((0.00017177199999999999 * fVec31[((IOTA - 90) & 127)]) + ((0.00020847000000000004 * fVec31[((IOTA - 88) & 127)]) + ((0.0011732700000000001 * fVec31[((IOTA - 87) & 127)]) + ((0.00090841200000000004 * fVec31[((IOTA - 86) & 127)]) + ((0.0016132899999999999 * fVec31[((IOTA - 85) & 127)]) + ((0.00035920700000000001 * fVec31[((IOTA - 84) & 127)]) + ((0.00031580000000000003 * fVec31[((IOTA - 82) & 127)]) + ((0.0010732299999999999 * fVec31[((IOTA - 81) & 127)]) + ((0.00257691 * fVec31[((IOTA - 80) & 127)]) + ((0.0017717799999999999 * fVec31[((IOTA - 79) & 127)]) + ((0.000561862 * fVec31[((IOTA - 78) & 127)]) + ((0.000172719 * fVec31[((IOTA - 77) & 127)]) + ((0.0028482099999999999 * fVec31[((IOTA - 75) & 127)]) + ((0.00218125 * fVec31[((IOTA - 74) & 127)]) + ((0.00024288000000000001 * fVec31[((IOTA - 71) & 127)]) + ((0.00186575 * fVec31[((IOTA - 70) & 127)]) + ((0.000588187 * fVec31[((IOTA - 66) & 127)]) + ((0.00080033999999999997 * fVec31[((IOTA - 58) & 127)]) + ((2.5690700000000001e-05 * fVec31[((IOTA - 55) & 127)]) + ((0.00113243 * fVec31[((IOTA - 54) & 127)]) + ((0.0016462200000000001 * fVec31[((IOTA - 53) & 127)]) + ((0.00086436100000000012 * fVec31[((IOTA - 51) & 127)]) + ((0.0055766799999999997 * fVec31[((IOTA - 50) & 127)]) + ((0.00392757 * fVec31[((IOTA - 49) & 127)]) + ((0.0028865100000000001 * fVec31[((IOTA - 48) & 127)]) + ((0.0056144999999999997 * fVec31[((IOTA - 47) & 127)]) + ((0.0026402700000000001 * fVec31[((IOTA - 46) & 127)]) + ((0.0042838500000000005 * fVec31[((IOTA - 44) & 127)]) + ((0.0034927700000000001 * fVec31[((IOTA - 43) & 127)]) + ((0.0014542699999999999 * fVec31[((IOTA - 13) & 127)]) + ((0.00036303800000000004 * fVec31[((IOTA - 12) & 127)]) + ((0.00064008700000000001 * fVec31[((IOTA - 9) & 127)]) + ((6.501340000000001e-05 * fVec31[((IOTA - 6) & 127)]) + ((0.00011503900000000001 * fVec31[((IOTA - 5) & 127)]) + ((7.4982900000000003e-05 * fVec31[((IOTA - 3) & 127)]) + ((0.0144406 * fVec31[((IOTA - 22) & 127)]) + ((0.013951100000000001 * fVec31[((IOTA - 21) & 127)]) + ((0.0084374500000000009 * fVec31[((IOTA - 18) & 127)]) + ((0.00038527200000000003 * fVec31[((IOTA - 42) & 127)]) + ((0.0065811400000000009 * fVec31[((IOTA - 41) & 127)]) + ((0.0015727 * fVec31[((IOTA - 40) & 127)]) + ((0.0158301 * fVec31[((IOTA - 37) & 127)]) + ((0.027060000000000001 * fVec31[((IOTA - 34) & 127)]) + ((0.0063968899999999997 * fVec31[((IOTA - 31) & 127)]) + ((0.011650000000000001 * fVec31[((IOTA - 30) & 127)]) + ((0.0092220099999999992 * fVec31[((IOTA - 28) & 127)]) + ((0.0078633899999999996 * fVec31[((IOTA - 27) & 127)]) + ((0.029293300000000001 * fVec31[((IOTA - 25) & 127)]) + ((0.0096560400000000012 * fVec31[((IOTA - 24) & 127)]) + ((5.3978799999999999e-06 * fVec4[((IOTA - 125) & 127)]) + ((7.9125199999999989e-06 * fVec4[((IOTA - 124) & 127)]) + ((0.0039648399999999999 * fVec31[((IOTA - 16) & 127)]) + ((8.4929499999999997e-06 * fVec4[((IOTA - 123) & 127)]) + ((1.1654000000000001e-05 * fVec4[((IOTA - 122) & 127)]) + ((5.1085100000000003e-05 * fVec4[((IOTA - 121) & 127)]) + ((6.8685100000000004e-05 * fVec4[((IOTA - 120) & 127)]) + ((3.2896299999999998e-06 * fVec4[((IOTA - 119) & 127)]) + ((1.41509e-05 * fVec4[((IOTA - 118) & 127)]) + ((1.6980200000000004e-05 * fVec4[((IOTA - 117) & 127)]) + ((3.2223700000000001e-05 * fVec4[((IOTA - 116) & 127)]) + ((5.8471100000000003e-05 * fVec4[((IOTA - 115) & 127)]) + ((0.00010523700000000001 * fVec4[((IOTA - 114) & 127)]) + ((0.00013697000000000001 * fVec4[((IOTA - 113) & 127)]) + ((0.00010184400000000001 * fVec4[((IOTA - 112) & 127)]) + ((3.2479200000000006e-05 * fVec4[((IOTA - 104) & 127)]) + ((7.9775300000000009e-05 * fVec4[((IOTA - 103) & 127)]) + ((0.000178013 * fVec4[((IOTA - 97) & 127)]) + ((0.00096584900000000007 * fVec4[((IOTA - 96) & 127)]) + ((0.00013887600000000002 * fVec4[((IOTA - 95) & 127)]) + ((0.00019982600000000001 * fVec4[((IOTA - 92) & 127)]) + ((0.00031649800000000002 * fVec4[((IOTA - 89) & 127)]) + ((0.00037059799999999998 * fVec4[((IOTA - 88) & 127)]) + ((0.0012454300000000001 * fVec4[((IOTA - 87) & 127)]) + ((0.00084652999999999996 * fVec4[((IOTA - 86) & 127)]) + ((0.00049063800000000005 * fVec4[((IOTA - 82) & 127)]) + ((0.0013326899999999999 * fVec4[((IOTA - 79) & 127)]) + ((0.00140716 * fVec4[((IOTA - 78) & 127)]) + ((0.00067232300000000006 * fVec4[((IOTA - 73) & 127)]) + ((0.000145224 * fVec4[((IOTA - 72) & 127)]) + ((0.00118198 * fVec4[((IOTA - 69) & 127)]) + ((0.0029169900000000004 * fVec4[((IOTA - 68) & 127)]) + ((0.000641773 * fVec4[((IOTA - 63) & 127)]) + ((0.0019041500000000001 * fVec4[((IOTA - 62) & 127)]) + ((0.0020271300000000003 * fVec4[((IOTA - 58) & 127)]) + ((0.0037510500000000001 * fVec4[((IOTA - 57) & 127)]) + ((0.0046006600000000003 * fVec4[((IOTA - 56) & 127)]) + ((0.0050914999999999997 * fVec4[((IOTA - 55) & 127)]) + ((0.0044053800000000004 * fVec4[((IOTA - 54) & 127)]) + ((0.0011063700000000002 * fVec4[((IOTA - 53) & 127)]) + ((0.0019731900000000001 * fVec4[((IOTA - 52) & 127)]) + ((0.0069039700000000006 * fVec4[((IOTA - 51) & 127)]) + ((0.0058685200000000003 * fVec4[((IOTA - 50) & 127)]) + ((0.0061875000000000003 * fVec4[((IOTA - 49) & 127)]) + ((0.0086182900000000007 * fVec4[((IOTA - 48) & 127)]) + ((0.0051318099999999997 * fVec4[((IOTA - 47) & 127)]) + ((0.00066500800000000003 * fVec4[((IOTA - 46) & 127)]) + ((0.0054012200000000008 * fVec4[((IOTA - 45) & 127)]) + ((0.0077257100000000002 * fVec4[((IOTA - 44) & 127)]) + ((0.0049702700000000006 * fVec4[((IOTA - 43) & 127)]) + ((0.0075730000000000007 * fVec4[((IOTA - 42) & 127)]) + ((0.0060422599999999998 * fVec4[((IOTA - 41) & 127)]) + ((0.0027149600000000002 * fVec4[((IOTA - 39) & 127)]) + ((0.00081970899999999995 * fVec4[((IOTA - 38) & 127)]) + ((5.1858400000000005e-05 * fVec4[((IOTA - 36) & 127)]) + ((0.0045739400000000003 * fVec4[((IOTA - 35) & 127)]) + ((0.00060354400000000002 * fVec4[((IOTA - 31) & 127)]) + ((0.0126207 * fVec4[((IOTA - 18) & 127)]) + ((0.015590100000000001 * fVec4[((IOTA - 17) & 127)]) + ((0.027497799999999999 * fVec4[((IOTA - 15) & 127)]) + ((0.019302299999999998 * fVec4[((IOTA - 14) & 127)]) + ((0.044481599999999996 * fVec4[((IOTA - 13) & 127)]) + ((0.042276800000000003 * fVec4[((IOTA - 12) & 127)]) + ((0.0021177600000000002 * fVec4[((IOTA - 11) & 127)]) + ((0.00027291300000000001 * fVec4[((IOTA - 9) & 127)]) + ((6.1550000000000005e-05 * fVec4[((IOTA - 8) & 127)]) + ((0.000175224 * fVec4[((IOTA - 5) & 127)]) + ((0.00022650199999999998 * fVec4[((IOTA - 4) & 127)]) + ((5.7022700000000005e-05 * fVec4[((IOTA - 3) & 127)]) + ((2.0383200000000002e-05 * fVec4[((IOTA - 1) & 127)]) + ((4.9413399999999999e-06 * fTemp4) + ((0.001299 * fVec4[((IOTA - 75) & 127)]) + ((0.00036433400000000001 * fVec4[((IOTA - 77) & 127)]) + ((5.7104899999999999e-06 * fVec0[((IOTA - 125) & 127)]) + ((1.32724e-05 * fVec0[((IOTA - 124) & 127)]) + ((0.0033552399999999998 * fVec4[((IOTA - 74) & 127)]) + ((2.9137400000000003e-05 * fVec0[((IOTA - 119) & 127)]) + ((0.00015924 * fVec0[((IOTA - 116) & 127)]) + ((7.6537400000000003e-05 * fVec0[((IOTA - 115) & 127)]) + ((6.5009300000000008e-05 * fVec0[((IOTA - 114) & 127)]) + ((3.6292700000000006e-05 * fVec0[((IOTA - 113) & 127)]) + ((2.5843400000000004e-05 * fVec0[((IOTA - 112) & 127)]) + ((0.00024267500000000003 * fVec0[((IOTA - 111) & 127)]) + ((0.00031903100000000006 * fVec0[((IOTA - 109) & 127)]) + ((0.00039582199999999999 * fVec0[((IOTA - 108) & 127)]) + ((0.00027277099999999999 * fVec0[((IOTA - 107) & 127)]) + ((0.00092367899999999995 * fVec0[((IOTA - 106) & 127)]) + ((0.0007145500000000001 * fVec0[((IOTA - 105) & 127)]) + ((0.000964846 * fVec0[((IOTA - 104) & 127)]) + ((0.0012146699999999999 * fVec0[((IOTA - 103) & 127)]) + ((0.00057145600000000003 * fVec0[((IOTA - 102) & 127)]) + ((0.00054242299999999999 * fVec0[((IOTA - 101) & 127)]) + ((0.00061493000000000008 * fVec0[((IOTA - 100) & 127)]) + ((0.0012203400000000001 * fVec0[((IOTA - 99) & 127)]) + ((0.0011941500000000002 * fVec0[((IOTA - 98) & 127)]) + ((0.00106711 * fVec0[((IOTA - 97) & 127)]) + ((0.00308618 * fVec0[((IOTA - 96) & 127)]) + ((0.0032894199999999999 * fVec0[((IOTA - 95) & 127)]) + ((0.00149796 * fVec0[((IOTA - 94) & 127)]) + ((0.00068249900000000004 * fVec0[((IOTA - 93) & 127)]) + ((0.00078510099999999996 * fVec0[((IOTA - 91) & 127)]) + ((0.00096550100000000012 * fVec0[((IOTA - 90) & 127)]) + ((0.00058387599999999999 * fVec0[((IOTA - 89) & 127)]) + ((0.0013118799999999999 * fVec0[((IOTA - 88) & 127)]) + ((0.0027314400000000003 * fVec0[((IOTA - 87) & 127)]) + ((0.0031734000000000003 * fVec0[((IOTA - 86) & 127)]) + ((0.0023903100000000001 * fVec0[((IOTA - 85) & 127)]) + ((0.0025833200000000001 * fVec0[((IOTA - 84) & 127)]) + ((0.00058356200000000003 * fVec0[((IOTA - 83) & 127)]) + ((1.7606500000000002e-05 * fVec0[((IOTA - 77) & 127)]) + ((0.0017979000000000001 * fVec0[((IOTA - 75) & 127)]) + ((0.00191797 * fVec0[((IOTA - 74) & 127)]) + ((0.00034747700000000001 * fVec0[((IOTA - 73) & 127)]) + ((0.000544179 * fVec0[((IOTA - 67) & 127)]) + ((5.63033e-05 * fVec0[((IOTA - 65) & 127)]) + ((0.0011524899999999999 * fVec0[((IOTA - 62) & 127)]) + ((0.00156606 * fVec0[((IOTA - 55) & 127)]) + ((0.0015830800000000002 * fVec0[((IOTA - 54) & 127)]) + ((0.0017704200000000002 * fVec0[((IOTA - 50) & 127)]) + ((0.0019330199999999999 * fVec0[((IOTA - 49) & 127)]) + ((0.00266146 * fVec0[((IOTA - 46) & 127)]) + ((0.0011897800000000001 * fVec0[((IOTA - 45) & 127)]) + ((0.00307881 * fVec0[((IOTA - 42) & 127)]) + ((0.0024114100000000001 * fVec0[((IOTA - 41) & 127)]) + ((0.0026392099999999999 * fVec0[((IOTA - 40) & 127)]) + ((0.0110397 * fVec0[((IOTA - 29) & 127)]) + ((0.0010152000000000002 * fVec0[((IOTA - 28) & 127)]) + ((0.00287375 * fVec0[((IOTA - 26) & 127)]) + ((0.0161706 * fVec0[((IOTA - 22) & 127)]) + ((0.026332300000000003 * fVec0[((IOTA - 21) & 127)]) + ((0.0079993000000000009 * fVec0[((IOTA - 20) & 127)]) + ((0.00082163500000000003 * fVec0[((IOTA - 18) & 127)]) + ((0.035125400000000001 * fVec0[((IOTA - 17) & 127)]) + ((0.0032833199999999997 * fVec0[((IOTA - 14) & 127)]) + ((0.00033950300000000006 * fVec0[((IOTA - 11) & 127)]) + ((0.00046365600000000006 * fVec0[((IOTA - 9) & 127)]) + ((0.0019217200000000002 * fVec0[((IOTA - 8) & 127)]) + ((0.00055710700000000004 * fVec0[((IOTA - 6) & 127)]) + ((0.00078591400000000008 * fVec0[((IOTA - 5) & 127)]) + ((0.00067488200000000002 * fVec0[((IOTA - 4) & 127)]) + ((0.00020588500000000003 * fVec0[((IOTA - 2) & 127)]) + ((3.4700500000000004e-05 * fVec0[((IOTA - 1) & 127)]) + ((1.2413700000000001e-05 * fTemp0) + ((0.00380796 * fVec0[((IOTA - 39) & 127)]) + ((0.000320157 * fVec0[((IOTA - 38) & 127)]) + ((0.00022045699999999999 * fVec0[((IOTA - 37) & 127)]) + ((0.0020659800000000002 * fVec0[((IOTA - 36) & 127)]) + ((0.0049689600000000006 * fVec0[((IOTA - 34) & 127)]) + ((0.0075314300000000004 * fVec0[((IOTA - 33) & 127)]) + ((4.8744899999999996e-07 * fVec32[((IOTA - 126) & 127)]) + ((3.5255099999999998e-06 * fVec32[((IOTA - 125) & 127)]) + ((3.2621699999999995e-06 * fVec32[((IOTA - 124) & 127)]) + ((0.0022648999999999998 * fVec0[((IOTA - 31) & 127)]) + ((4.06072e-05 * fVec32[((IOTA - 121) & 127)]) + ((6.3317800000000006e-05 * fVec32[((IOTA - 120) & 127)]) + ((3.5918100000000004e-05 * fVec32[((IOTA - 119) & 127)]) + ((2.5941400000000002e-05 * fVec32[((IOTA - 117) & 127)]) + ((8.6548500000000007e-05 * fVec32[((IOTA - 116) & 127)]) + ((5.5551700000000006e-05 * fVec32[((IOTA - 115) & 127)]) + ((3.6866300000000003e-05 * fVec32[((IOTA - 114) & 127)]) + ((4.2405400000000006e-05 * fVec32[((IOTA - 113) & 127)]) + ((8.1096800000000013e-05 * fVec32[((IOTA - 112) & 127)]) + ((4.85157e-05 * fVec32[((IOTA - 111) & 127)]) + ((7.4248300000000005e-05 * fVec32[((IOTA - 110) & 127)]) + ((6.1852800000000005e-05 * fVec32[((IOTA - 107) & 127)]) + ((0.00033669 * fVec32[((IOTA - 106) & 127)]) + ((0.00035192300000000003 * fVec32[((IOTA - 105) & 127)]) + ((0.000181368 * fVec32[((IOTA - 102) & 127)]) + ((5.5010100000000004e-05 * fVec32[((IOTA - 99) & 127)]) + ((0.000181872 * fVec32[((IOTA - 95) & 127)]) + ((0.0012472700000000002 * fVec32[((IOTA - 94) & 127)]) + (((0.0012369000000000002 * fVec32[((IOTA - 93) & 127)]) + ((0.00084541900000000014 * fVec32[((IOTA - 88) & 127)]) + ((0.00030825999999999998 * fVec32[((IOTA - 87) & 127)]) + ((0.000991956 * fVec32[((IOTA - 86) & 127)]) + ((0.00039449500000000002 * fVec32[((IOTA - 83) & 127)]) + ((0.00042647700000000008 * fVec32[((IOTA - 78) & 127)]) + ((0.00098188600000000017 * fVec32[((IOTA - 76) & 127)]) + ((0.00076287399999999997 * fVec32[((IOTA - 75) & 127)]) + ((0.00019696800000000003 * fVec32[((IOTA - 73) & 127)]) + ((0.00026003500000000004 * fVec32[((IOTA - 72) & 127)]) + ((0.000162845 * fVec32[((IOTA - 68) & 127)]) + ((0.000175864 * fVec32[((IOTA - 65) & 127)]) + ((0.00122741 * fVec32[((IOTA - 62) & 127)]) + ((0.00051085000000000008 * fVec32[((IOTA - 60) & 127)]) + ((0.0042857099999999999 * fVec32[((IOTA - 59) & 127)]) + ((0.0037509800000000001 * fVec32[((IOTA - 58) & 127)]) + ((0.0013037700000000001 * fVec32[((IOTA - 57) & 127)]) + ((0.000469171 * fVec32[((IOTA - 52) & 127)]) + ((0.0048162999999999999 * fVec32[((IOTA - 50) & 127)]) + ((0.0040944599999999994 * fVec32[((IOTA - 49) & 127)]) + ((0.0041798500000000006 * fVec32[((IOTA - 46) & 127)]) + ((0.0073487099999999996 * fVec32[((IOTA - 45) & 127)]) + ((0.0047594300000000003 * fVec32[((IOTA - 44) & 127)]) + ((0.00164357 * fVec32[((IOTA - 41) & 127)]) + ((0.0066234300000000005 * fVec32[((IOTA - 40) & 127)]) + ((0.0107364 * fVec32[((IOTA - 39) & 127)]) + ((0.0021625699999999999 * fVec32[((IOTA - 38) & 127)]) + ((0.00078494800000000005 * fVec32[((IOTA - 37) & 127)]) + ((0.008554550000000001 * fVec32[((IOTA - 36) & 127)]) + ((0.0087573399999999989 * fVec32[((IOTA - 35) & 127)]) + ((0.0022028300000000002 * fVec32[((IOTA - 32) & 127)]) + ((0.026865800000000002 * fVec32[((IOTA - 31) & 127)]) + ((0.0066563000000000004 * fVec32[((IOTA - 27) & 127)]) + ((0.0173968 * fVec32[((IOTA - 26) & 127)]) + ((0.0065755600000000003 * fVec32[((IOTA - 22) & 127)]) + ((0.044476699999999994 * fVec32[((IOTA - 18) & 127)]) + ((0.019425600000000001 * fVec32[((IOTA - 17) & 127)]) + ((0.0258357 * fVec32[((IOTA - 15) & 127)]) + ((0.00505303 * fVec32[((IOTA - 13) & 127)]) + ((0.00065851199999999999 * fVec32[((IOTA - 10) & 127)]) + ((6.4017400000000008e-05 * fVec32[((IOTA - 9) & 127)]) + ((0.00033249800000000003 * fVec32[((IOTA - 8) & 127)]) + ((0.00114682 * fVec32[((IOTA - 6) & 127)]) + ((0.00043610699999999998 * fVec32[((IOTA - 4) & 127)]) + ((0.000204336 * fVec32[((IOTA - 2) & 127)]) + ((2.2571e-06 * fVec32[((IOTA - 1) & 127)]) + (((7.4329200000000013e-05 * fVec33[((IOTA - 115) & 127)]) + ((0.00029377599999999999 * fVec33[((IOTA - 114) & 127)]) + ((0.000280439 * fVec33[((IOTA - 113) & 127)]) + ((0.00052814500000000005 * fVec33[((IOTA - 110) & 127)]) + ((0.00070229999999999999 * fVec33[((IOTA - 109) & 127)]) + ((0.00080632699999999991 * fVec33[((IOTA - 108) & 127)]) + ((0.000643591 * fVec33[((IOTA - 107) & 127)]) + ((0.00081294000000000006 * fVec33[((IOTA - 106) & 127)]) + ((0.00082950500000000002 * fVec33[((IOTA - 105) & 127)]) + ((0.00023107600000000004 * fVec33[((IOTA - 104) & 127)]) + ((0.00064061300000000005 * fVec33[((IOTA - 103) & 127)]) + ((0.00091664000000000003 * fVec33[((IOTA - 102) & 127)]) + ((0.00073955600000000005 * fVec33[((IOTA - 101) & 127)]) + ((0.00059890600000000007 * fVec33[((IOTA - 100) & 127)]) + ((0.0013073099999999999 * fVec33[((IOTA - 99) & 127)]) + ((0.0027768799999999998 * fVec33[((IOTA - 98) & 127)]) + ((0.00040949500000000001 * fVec33[((IOTA - 97) & 127)]) + ((0.00145302 * fVec33[((IOTA - 94) & 127)]) + ((0.0022861500000000002 * fVec33[((IOTA - 93) & 127)]) + ((0.001377 * fVec33[((IOTA - 90) & 127)]) + ((0.0017080400000000001 * fVec33[((IOTA - 89) & 127)]) + ((0.00016274 * fVec33[((IOTA - 83) & 127)]) + ((0.0027307400000000002 * fVec33[((IOTA - 82) & 127)]) + ((0.0028667500000000004 * fVec33[((IOTA - 81) & 127)]) + ((0.0011399600000000002 * fVec33[((IOTA - 80) & 127)]) + ((0.00110995 * fVec33[((IOTA - 79) & 127)]) + ((0.00124602 * fVec33[((IOTA - 78) & 127)]) + ((0.00129805 * fVec33[((IOTA - 77) & 127)]) + ((0.00100318 * fVec33[((IOTA - 76) & 127)]) + ((0.0022987899999999998 * fVec33[((IOTA - 75) & 127)]) + ((0.0019049100000000001 * fVec33[((IOTA - 74) & 127)]) + ((0.00059075000000000002 * fVec33[((IOTA - 73) & 127)]) + ((0.00103864 * fVec33[((IOTA - 72) & 127)]) + ((0.0013787300000000001 * fVec33[((IOTA - 71) & 127)]) + ((0.00181733 * fVec33[((IOTA - 70) & 127)]) + ((0.00293582 * fVec33[((IOTA - 69) & 127)]) + ((0.0023355800000000003 * fVec33[((IOTA - 68) & 127)]) + ((0.0011070699999999999 * fVec33[((IOTA - 67) & 127)]) + ((0.00050953999999999995 * fVec33[((IOTA - 66) & 127)]) + ((0.00044511000000000003 * fVec33[((IOTA - 65) & 127)]) + ((0.0038312400000000001 * fVec33[((IOTA - 61) & 127)]) + ((0.0016638 * fVec33[((IOTA - 60) & 127)]) + ((0.0043739400000000006 * fVec33[((IOTA - 48) & 127)]) + ((0.0013932899999999999 * fVec33[((IOTA - 45) & 127)]) + ((0.0106382 * fVec33[((IOTA - 41) & 127)]) + ((0.0043469900000000002 * fVec33[((IOTA - 40) & 127)]) + ((0.0015759000000000001 * fVec33[((IOTA - 37) & 127)]) + ((0.0073185999999999998 * fVec33[((IOTA - 36) & 127)]) + ((0.0045973800000000007 * fVec33[((IOTA - 35) & 127)]) + ((0.013183400000000001 * fVec33[((IOTA - 33) & 127)]) + ((0.028645500000000001 * fVec33[((IOTA - 32) & 127)]) + ((0.0092487699999999999 * fVec33[((IOTA - 29) & 127)]) + ((0.0073680199999999994 * fVec33[((IOTA - 16) & 127)]) + ((0.00058021900000000009 * fVec33[((IOTA - 14) & 127)]) + ((0.0037306700000000002 * fVec33[((IOTA - 12) & 127)]) + ((0.000216524 * fVec33[((IOTA - 11) & 127)]) + ((0.00050577300000000005 * fVec33[((IOTA - 7) & 127)]) + ((0.00019702400000000002 * fVec33[((IOTA - 5) & 127)]) + ((6.4290300000000003e-05 * fVec33[((IOTA - 3) & 127)]) + ((0.039121700000000002 * fVec33[((IOTA - 28) & 127)]) + ((0.00144425 * fVec33[((IOTA - 27) & 127)]) + ((0.0060285 * fVec33[((IOTA - 25) & 127)]) + ((0.057524800000000001 * fVec33[((IOTA - 24) & 127)]) + ((0.0014793400000000002 * fVec33[((IOTA - 20) & 127)]) + ((0.021570599999999999 * fVec33[((IOTA - 21) & 127)]) + ((7.8904099999999995e-07 * fVec34[((IOTA - 118) & 127)]) + ((5.1851200000000009e-05 * fVec34[((IOTA - 117) & 127)]) + ((3.48346e-05 * fVec34[((IOTA - 116) & 127)]) + (((0.000263489 * fVec34[((IOTA - 113) & 127)]) + ((0.00048678400000000003 * fVec34[((IOTA - 112) & 127)]) + ((0.00066577900000000002 * fVec34[((IOTA - 111) & 127)]) + ((0.00072508600000000011 * fVec34[((IOTA - 110) & 127)]) + ((0.00094771800000000006 * fVec34[((IOTA - 109) & 127)]) + ((0.00085589900000000003 * fVec34[((IOTA - 108) & 127)]) + ((0.00097958799999999999 * fVec34[((IOTA - 107) & 127)]) + ((0.00110553 * fVec34[((IOTA - 106) & 127)]) + ((0.00082826600000000003 * fVec34[((IOTA - 105) & 127)]) + ((0.0013655500000000001 * fVec34[((IOTA - 104) & 127)]) + ((0.0018638400000000001 * fVec34[((IOTA - 103) & 127)]) + ((0.0016748900000000001 * fVec34[((IOTA - 102) & 127)]) + ((0.0013615999999999999 * fVec34[((IOTA - 101) & 127)]) + ((0.00120272 * fVec34[((IOTA - 100) & 127)]) + ((0.00103053 * fVec34[((IOTA - 99) & 127)]) + ((0.00040302800000000005 * fVec34[((IOTA - 98) & 127)]) + ((0.0012814900000000001 * fVec34[((IOTA - 97) & 127)]) + ((0.0015273399999999999 * fVec34[((IOTA - 96) & 127)]) + ((0.00046550599999999997 * fVec34[((IOTA - 95) & 127)]) + ((0.00038473700000000001 * fVec34[((IOTA - 94) & 127)]) + ((0.0010250300000000001 * fVec34[((IOTA - 93) & 127)]) + ((0.0011346700000000002 * fVec34[((IOTA - 92) & 127)]) + ((0.00043984100000000006 * fVec34[((IOTA - 85) & 127)]) + ((0.00021673800000000001 * fVec34[((IOTA - 84) & 127)]) + ((2.74177e-05 * fVec34[((IOTA - 82) & 127)]) + ((0.0010960700000000002 * fVec34[((IOTA - 77) & 127)]) + ((0.0013700399999999999 * fVec34[((IOTA - 73) & 127)]) + ((0.0030635300000000001 * fVec34[((IOTA - 72) & 127)]) + ((0.0019637600000000002 * fVec34[((IOTA - 71) & 127)]) + ((0.0018260300000000002 * fVec34[((IOTA - 70) & 127)]) + ((0.00238017 * fVec34[((IOTA - 69) & 127)]) + ((0.0031654200000000004 * fVec34[((IOTA - 68) & 127)]) + ((0.00275033 * fVec34[((IOTA - 67) & 127)]) + ((0.0016457800000000001 * fVec34[((IOTA - 66) & 127)]) + ((0.0025982900000000001 * fVec34[((IOTA - 65) & 127)]) + ((0.0013408299999999999 * fVec34[((IOTA - 64) & 127)]) + ((0.00068048499999999999 * fVec34[((IOTA - 60) & 127)]) + ((0.00122218 * fVec34[((IOTA - 59) & 127)]) + ((0.00152893 * fVec34[((IOTA - 58) & 127)]) + ((0.0022063899999999999 * fVec34[((IOTA - 57) & 127)]) + ((0.00078379700000000003 * fVec34[((IOTA - 56) & 127)]) + ((0.00022987799999999998 * fVec34[((IOTA - 52) & 127)]) + ((0.00078511300000000004 * fVec34[((IOTA - 51) & 127)]) + ((0.0026344099999999998 * fVec34[((IOTA - 44) & 127)]) + ((0.0012260999999999999 * fVec34[((IOTA - 45) & 127)]) + ((0.0038961999999999998 * fVec34[((IOTA - 39) & 127)]) + ((0.011467400000000001 * fVec34[((IOTA - 38) & 127)]) + ((0.0078678299999999993 * fVec34[((IOTA - 37) & 127)]) + ((0.0013363100000000001 * fVec34[((IOTA - 34) & 127)]) + ((0.0089890100000000004 * fVec34[((IOTA - 32) & 127)]) + ((0.0143689 * fVec34[((IOTA - 31) & 127)]) + ((0.0049334100000000001 * fVec34[((IOTA - 30) & 127)]) + ((0.019686699999999998 * fVec34[((IOTA - 27) & 127)]) + ((0.0086390499999999988 * fVec34[((IOTA - 25) & 127)]) + ((0.043355600000000001 * fVec34[((IOTA - 19) & 127)]) + ((0.00249322 * fVec34[((IOTA - 18) & 127)]) + ((0.0141169 * fVec34[((IOTA - 16) & 127)]) + ((0.0111431 * fVec34[((IOTA - 15) & 127)]) + ((0.0018486100000000001 * fVec34[((IOTA - 14) & 127)]) + ((0.000976993 * fVec34[((IOTA - 13) & 127)]) + ((0.0056459800000000001 * fVec34[((IOTA - 12) & 127)]) + ((0.00021246900000000004 * fVec34[((IOTA - 11) & 127)]) + ((0.00095016999999999996 * fVec34[((IOTA - 10) & 127)]) + ((0.0010622000000000001 * fVec34[((IOTA - 7) & 127)]) + ((0.00024919200000000002 * fVec34[((IOTA - 6) & 127)]) + ((0.00027049600000000001 * fVec34[((IOTA - 3) & 127)]) + ((5.1123399999999996e-06 * fVec34[((IOTA - 2) & 127)]) + ((3.7580000000000003e-05 * fVec34[((IOTA - 1) & 127)]) + (((2.5019199999999998e-06 * fVec23[((IOTA - 120) & 127)]) + ((0.00015476800000000001 * fVec23[((IOTA - 107) & 127)]) + ((2.3801800000000003e-05 * fVec23[((IOTA - 106) & 127)]) + ((0.00041578400000000004 * fVec23[((IOTA - 105) & 127)]) + ((0.00040693400000000007 * fVec23[((IOTA - 104) & 127)]) + ((0.00042180200000000004 * fVec23[((IOTA - 103) & 127)]) + ((0.00064933700000000005 * fVec23[((IOTA - 102) & 127)]) + ((0.0010572399999999999 * fVec23[((IOTA - 101) & 127)]) + ((0.00096599000000000012 * fVec23[((IOTA - 100) & 127)]) + ((0.00077855999999999997 * fVec23[((IOTA - 99) & 127)]) + ((0.00073777800000000002 * fVec23[((IOTA - 98) & 127)]) + ((0.00065036 * fVec23[((IOTA - 97) & 127)]) + ((0.00069698000000000004 * fVec23[((IOTA - 96) & 127)]) + ((0.0013956400000000001 * fVec23[((IOTA - 95) & 127)]) + ((0.0020596199999999999 * fVec23[((IOTA - 94) & 127)]) + ((0.0017169000000000002 * fVec23[((IOTA - 93) & 127)]) + ((0.0012716300000000002 * fVec23[((IOTA - 92) & 127)]) + ((0.00130908 * fVec23[((IOTA - 91) & 127)]) + ((0.00161012 * fVec23[((IOTA - 88) & 127)]) + ((0.0016711600000000001 * fVec23[((IOTA - 87) & 127)]) + ((0.00075290600000000002 * fVec23[((IOTA - 86) & 127)]) + ((0.00144013 * fVec23[((IOTA - 85) & 127)]) + ((0.0021273399999999997 * fVec23[((IOTA - 84) & 127)]) + ((0.00061597300000000002 * fVec23[((IOTA - 83) & 127)]) + ((0.00011313 * fVec23[((IOTA - 81) & 127)]) + ((0.0017438199999999999 * fVec23[((IOTA - 80) & 127)]) + ((0.0024799100000000001 * fVec23[((IOTA - 79) & 127)]) + ((0.00256507 * fVec23[((IOTA - 78) & 127)]) + ((0.0011552999999999999 * fVec23[((IOTA - 75) & 127)]) + ((0.00098456699999999999 * fVec23[((IOTA - 74) & 127)]) + ((0.000597807 * fVec23[((IOTA - 73) & 127)]) + ((0.0018893200000000001 * fVec23[((IOTA - 72) & 127)]) + ((0.00092920600000000002 * fVec23[((IOTA - 23) & 127)]) + ((0.080136100000000002 * fVec23[((IOTA - 22) & 127)]) + ((0.041393800000000001 * fVec23[((IOTA - 21) & 127)]) + ((0.042661300000000006 * fVec23[((IOTA - 20) & 127)]) + ((0.0088175100000000006 * fVec23[((IOTA - 19) & 127)]) + ((0.053196100000000003 * fVec23[((IOTA - 18) & 127)]) + ((0.097787600000000002 * fVec23[((IOTA - 17) & 127)]) + ((0.040092800000000005 * fVec23[((IOTA - 16) & 127)]) + ((0.077296500000000004 * fVec23[((IOTA - 15) & 127)]) + ((0.064767000000000005 * fVec23[((IOTA - 14) & 127)]) + ((0.082935599999999998 * fVec23[((IOTA - 13) & 127)]) + ((0.078489900000000001 * fVec23[((IOTA - 12) & 127)]) + ((0.00067357800000000009 * fVec23[((IOTA - 11) & 127)]) + ((0.00149621 * fVec23[((IOTA - 10) & 127)]) + ((0.00042969900000000002 * fVec23[((IOTA - 6) & 127)]) + ((0.0010723199999999999 * fVec23[((IOTA - 5) & 127)]) + ((0.00084950300000000004 * fVec23[((IOTA - 4) & 127)]) + ((0.00085153200000000001 * fVec23[((IOTA - 3) & 127)]) + ((0.00015027000000000001 * fVec23[((IOTA - 1) & 127)]) + ((2.4709800000000002e-05 * fTemp23) + ((0.00072128000000000003 * fVec23[((IOTA - 9) & 127)]) + ((1.47262e-06 * fVec35[((IOTA - 122) & 127)]) + ((0.00101019 * fVec23[((IOTA - 8) & 127)]) + ((0.00048385000000000002 * fVec35[((IOTA - 98) & 127)]) + ((0.00047365100000000001 * fVec35[((IOTA - 97) & 127)]) + ((9.940880000000001e-05 * fVec35[((IOTA - 94) & 127)]) + ((0.0023706000000000001 * fVec35[((IOTA - 93) & 127)]) + ((0.00196204 * fVec35[((IOTA - 92) & 127)]) + ((1.7742000000000001e-05 * fVec35[((IOTA - 91) & 127)]) + ((0.000611186 * fVec35[((IOTA - 90) & 127)]) + ((0.00087519700000000008 * fVec35[((IOTA - 89) & 127)]) + ((0.000687957 * fVec35[((IOTA - 82) & 127)]) + ((0.00036222200000000004 * fVec35[((IOTA - 69) & 127)]) + ((0.00063317100000000008 * fVec35[((IOTA - 57) & 127)]) + ((0.00092078700000000006 * fVec35[((IOTA - 44) & 127)]) + ((0.0029395300000000001 * fVec35[((IOTA - 32) & 127)]) + (((0.00016075400000000001 * fVec35[((IOTA - 2) & 127)]) + (0.021295600000000001 * fVec35[((IOTA - 24) & 127)])) + (0.000453602 * fVec23[((IOTA - 7) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.0426200000000002e-05 * fTemp34)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0043988899999999999 * fVec33[((IOTA - 19) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (1.2883700000000002e-05 * fTemp32)))))))))))))))))))))))))))))))))))))))))))))))) + (0.00801492 * fVec0[((IOTA - 30) & 127)])))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.0028022999999999998 * fVec12[((IOTA - 43) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00054976200000000008 * fVec11[((IOTA - 73) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (4.1789300000000003e-05 * fVec5[((IOTA - 1) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (0.00068792700000000007 * fVec1[((IOTA - 104) & 127)])) + (1.5164000000000001e-05 * fTemp8)) + (7.7678700000000006e-05 * fVec8[((IOTA - 3) & 127)])) + (0.00090468899999999997 * fVec8[((IOTA - 4) & 127)])) + (0.000187639 * fVec8[((IOTA - 7) & 127)])) + (0.0011105499999999999 * fVec8[((IOTA - 8) & 127)])) + (0.00082252200000000001 * fVec8[((IOTA - 10) & 127)])) + (0.017012799999999998 * fVec8[((IOTA - 12) & 127)])) + (0.0015720700000000001 * fVec8[((IOTA - 13) & 127)])) + (0.0279797 * fVec8[((IOTA - 16) & 127)])) + (0.035551199999999998 * fVec8[((IOTA - 17) & 127)])) + (0.020256099999999999 * fVec8[((IOTA - 22) & 127)])) + (0.051921400000000006 * fVec8[((IOTA - 23) & 127)])) + (0.0015102899999999999 * fVec8[((IOTA - 27) & 127)])) + (0.022164000000000003 * fVec8[((IOTA - 28) & 127)])) + (0.0091192499999999989 * fVec8[((IOTA - 29) & 127)])) + (0.0086269100000000015 * fVec8[((IOTA - 30) & 127)])) + (0.0013155900000000002 * fVec8[((IOTA - 33) & 127)])) + (0.010338400000000001 * fVec8[((IOTA - 34) & 127)])) + (0.00148828 * fVec8[((IOTA - 35) & 127)])) + (0.0027003000000000001 * fVec8[((IOTA - 37) & 127)])) + (0.0051550500000000004 * fVec8[((IOTA - 40) & 127)])) + (0.0041224 * fVec8[((IOTA - 41) & 127)])) + (0.0065710400000000002 * fVec8[((IOTA - 42) & 127)])) + (0.0043966300000000003 * fVec8[((IOTA - 46) & 127)])) + (0.0056671100000000004 * fVec8[((IOTA - 47) & 127)])) + (0.0016789400000000001 * fVec8[((IOTA - 49) & 127)])) + (0.0031687199999999999 * fVec8[((IOTA - 53) & 127)])) + (0.0042774800000000002 * fVec8[((IOTA - 54) & 127)])) + (0.0011170899999999998 * fVec8[((IOTA - 59) & 127)])) + (0.0035176000000000001 * fVec8[((IOTA - 60) & 127)])) + (0.0031331699999999998 * fVec8[((IOTA - 61) & 127)])) + (0.0017230000000000001 * fVec8[((IOTA - 62) & 127)])) + (0.00086360499999999993 * fVec8[((IOTA - 63) & 127)])) + (0.00065914000000000001 * fVec8[((IOTA - 68) & 127)])) + (0.00017622000000000002 * fVec8[((IOTA - 69) & 127)])) + (0.0021645100000000001 * fVec8[((IOTA - 73) & 127)])) + (0.0017008700000000002 * fVec8[((IOTA - 74) & 127)])) + (0.00099123000000000006 * fVec8[((IOTA - 79) & 127)])) + (0.0015633400000000001 * fVec8[((IOTA - 80) & 127)])) + (0.0016834100000000002 * fVec8[((IOTA - 81) & 127)])) + (0.0019089600000000001 * fVec8[((IOTA - 85) & 127)])) + (0.0026431700000000002 * fVec8[((IOTA - 86) & 127)])) + (0.00055522299999999998 * fVec8[((IOTA - 89) & 127)])) + (0.00096544800000000004 * fVec8[((IOTA - 90) & 127)])) + (0.0008723750000000001 * fVec8[((IOTA - 91) & 127)])) + (0.0014547099999999999 * fVec8[((IOTA - 92) & 127)])) + (0.0022558699999999997 * fVec8[((IOTA - 93) & 127)])) + (0.00103743 * fVec8[((IOTA - 94) & 127)])) + (2.5623399999999999e-05 * fVec8[((IOTA - 101) & 127)])) + (0.00023747600000000003 * fVec8[((IOTA - 102) & 127)])) + (0.00024076900000000003 * fVec8[((IOTA - 106) & 127)])) + (0.000123724 * fVec8[((IOTA - 107) & 127)]))) + (0.00014623200000000002 * fVec8[((IOTA - 111) & 127)]))) + (7.6359300000000013e-05 * fVec8[((IOTA - 117) & 127)])) + (6.9852400000000009e-05 * fVec8[((IOTA - 118) & 127)])) + (8.6907400000000001e-05 * fVec8[((IOTA - 119) & 127)])) + (2.7445000000000002e-05 * fVec8[((IOTA - 120) & 127)])) + (6.72085e-07 * fVec8[((IOTA - 126) & 127)]))))) + (0.00054595800000000003 * fVec1[((IOTA - 105) & 127)])) + (1.32916e-05 * fVec1[((IOTA - 108) & 127)])) + (0.00045154600000000004 * fVec1[((IOTA - 109) & 127)])) + (2.3009600000000001e-05 * fVec1[((IOTA - 114) & 127)])) + (2.4779700000000003e-05 * fVec1[((IOTA - 116) & 127)]))) + (2.4981100000000004e-05 * fVec1[((IOTA - 1) & 127)])) + (0.00022937200000000001 * fVec1[((IOTA - 3) & 127)])) + (6.8870100000000003e-05 * fVec1[((IOTA - 4) & 127)])) + (0.00039071400000000001 * fVec1[((IOTA - 5) & 127)])) + (0.00010729800000000002 * fVec1[((IOTA - 6) & 127)])) + (0.00036562800000000006 * fVec1[((IOTA - 7) & 127)])) + (0.0008645949999999999 * fVec1[((IOTA - 10) & 127)])) + (0.00051593500000000003 * fVec1[((IOTA - 11) & 127)])) + (0.00030434100000000002 * fVec1[((IOTA - 12) & 127)])) + (0.00417119 * fVec1[((IOTA - 14) & 127)])) + (0.0010287299999999998 * fVec1[((IOTA - 18) & 127)])) + (0.046834800000000003 * fVec1[((IOTA - 19) & 127)])) + (0.0094234200000000001 * fVec1[((IOTA - 22) & 127)])) + (0.0229176 * fVec1[((IOTA - 23) & 127)])) + (0.031733500000000005 * fVec1[((IOTA - 27) & 127)])) + (0.016254900000000003 * fVec1[((IOTA - 28) & 127)])) + (0.018438099999999999 * fVec1[((IOTA - 30) & 127)])) + (0.0039525800000000007 * fVec1[((IOTA - 35) & 127)])) + (0.0034817900000000002 * fVec1[((IOTA - 40) & 127)])) + (0.00261772 * fVec1[((IOTA - 41) & 127)])) + (0.0055836599999999998 * fVec1[((IOTA - 42) & 127)])) + (0.0047687700000000003 * fVec1[((IOTA - 43) & 127)])) + (0.0033062999999999999 * fVec1[((IOTA - 47) & 127)])) + (8.1561000000000014e-05 * fVec1[((IOTA - 48) & 127)])) + (0.00010383899999999999 * fVec1[((IOTA - 49) & 127)])) + (0.00231329 * fVec1[((IOTA - 54) & 127)])) + (0.00380022 * fVec1[((IOTA - 55) & 127)])) + (0.00145005 * fVec1[((IOTA - 56) & 127)])) + (0.0049128000000000002 * fVec1[((IOTA - 60) & 127)])) + (0.0051586600000000007 * fVec1[((IOTA - 61) & 127)])) + (0.00135669 * fVec1[((IOTA - 62) & 127)])) + (0.00100629 * fVec1[((IOTA - 68) & 127)])) + (0.00095442699999999999 * fVec1[((IOTA - 75) & 127)])) + (0.00135578 * fVec1[((IOTA - 80) & 127)])) + (0.0010853799999999999 * fVec1[((IOTA - 81) & 127)])) + (0.0017822599999999999 * fVec1[((IOTA - 83) & 127)])) + (0.0031738700000000001 * fVec1[((IOTA - 84) & 127)])) + (0.00179845 * fVec1[((IOTA - 85) & 127)])) + (2.9923200000000002e-05 * fVec1[((IOTA - 87) & 127)])) + (0.0010355099999999999 * fVec1[((IOTA - 88) & 127)])))) + (0.0019918900000000001 * fVec1[((IOTA - 93) & 127)])) + (0.00024809000000000002 * fVec1[((IOTA - 94) & 127)]))) + (0.00040513600000000001 * fVec1[((IOTA - 97) & 127)])) + (0.00030835500000000001 * fVec1[((IOTA - 100) & 127)])) + (0.00035096200000000002 * fVec1[((IOTA - 101) & 127)])) + (4.2307499999999993e-06 * fTemp2))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + (3.6591100000000003e-05 * fVec3[((IOTA - 1) & 127)]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fHbargraph1 = FAUSTFLOAT(fRec39[0]); + output1[i] = FAUSTFLOAT(fTemp37); + fRec1[1] = fRec1[0]; + fRec3[1] = fRec3[0]; + fRec2[1] = fRec2[0]; + IOTA = (IOTA + 1); + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec0[1] = fRec0[0]; + fRec39[1] = fRec39[0]; + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOADecLebedev061.cpp b/source/HOAUGens/HOADecLebedev061.cpp index 32e07b87c5..7d6bde67d0 100644 --- a/source/HOAUGens/HOADecLebedev061.cpp +++ b/source/HOAUGens/HOADecLebedev061.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev061" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,20 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -632,13 +649,15 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fRec0[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec10[2]; double fRec9[2]; double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fVbargraph2; - double fRec0[2]; FAUSTFLOAT fVbargraph3; - double fRec10[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph4; double fRec14[2]; double fRec13[2]; @@ -646,6 +665,7 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph5; double fRec11[2]; FAUSTFLOAT fVbargraph6; + double fConst6; double fRec15[2]; FAUSTFLOAT fVbargraph7; double fRec16[2]; @@ -660,36 +680,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev061"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -771,10 +791,13 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); + fConst4 = (double(tgamma(1.5)) * sqrt((3.0 * (double(tgamma(1.0)) / double(tgamma(3.0)))))); + fConst5 = (0.26596152026762176 * fConst4); + fConst6 = (0.0 - (1.5957691216057308 * fConst4)); } @@ -812,23 +835,23 @@ class mydsp : public dsp { } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec9[l6] = 0.0; + fRec0[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec9[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec0[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec7[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { @@ -875,9 +898,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -887,21 +910,21 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e3ed10", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3af6c80", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e670c0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b20c20", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e4a000", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b01da0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e539a0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b12a80", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -922,34 +945,34 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-6"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph3, "osc", "/output1"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e58860", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3b06c60", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph4, "osc", "/output2"); + ui_interface->declare(&fVbargraph4, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e5dbd0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b17730", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph6, "osc", "/output3"); + ui_interface->declare(&fVbargraph6, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e6c0d0", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b25630", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph7, "osc", "/output4"); + ui_interface->declare(&fVbargraph7, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e71500", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b2b180", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph8, "osc", "/output5"); + ui_interface->declare(&fVbargraph8, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e76bd0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b30680", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph9, "osc", "/output6"); + ui_interface->declare(&fVbargraph9, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2e7bdf0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b358a0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -990,57 +1013,53 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.28867513459481287 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); - fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow7 * ((fSlow3 * fTemp5) - (fSlow8 * fRec9[0]))); - double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); - fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (1.7676253978748444e-17 * fTemp6); - double fTemp8 = (fRec1[0] * ((fTemp1 + fTemp4) + fTemp7)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); - fVbargraph3 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp8); - double fTemp9 = (0.28867513459481287 * fTemp6); - double fTemp10 = (fRec1[0] * (fTemp1 + fTemp9)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph4 = FAUSTFLOAT(fRec10[0]); - output1[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fRec3[0] * double(input1[i])); + double fTemp5 = (fRec1[0] * (fTemp1 + fTemp4)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (fRec3[0] * double(input3[i])); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec9[0] = (fSlow7 * ((fSlow3 * fTemp6) - (fSlow8 * fRec10[0]))); + double fTemp7 = (fRec9[0] + (fSlow4 * fTemp6)); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph3 = FAUSTFLOAT(fRec8[0]); + double fTemp8 = (fRec1[0] * (fTemp1 + (fConst5 * fTemp7))); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph4 = FAUSTFLOAT(fRec7[0]); + output1[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (fRec3[0] * double(input1[i])); fRec14[0] = (fRec14[1] + fRec13[1]); - fRec13[0] = (fSlow7 * ((fSlow3 * fTemp11) - (fSlow8 * fRec14[0]))); - double fTemp12 = (fRec13[0] + (fSlow4 * fTemp11)); - fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fRec13[0] = (fSlow7 * ((fSlow3 * fTemp9) - (fSlow8 * fRec14[0]))); + double fTemp10 = (fRec13[0] + (fSlow4 * fTemp9)); + fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph5 = FAUSTFLOAT(fRec12[0]); - double fTemp13 = (0.28867513459481287 * fTemp12); - double fTemp14 = (fTemp1 + fTemp7); - double fTemp15 = (fRec1[0] * (fTemp13 + fTemp14)); - fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + double fTemp11 = (fRec1[0] * (fTemp1 + (fConst5 * fTemp10))); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph6 = FAUSTFLOAT(fRec11[0]); - output2[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (fRec1[0] * ((fTemp1 + (3.5352507957496889e-17 * fTemp12)) - fTemp9)); - fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + output2[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.16666666666666666 * (fRec1[0] * (fTemp0 + (fConst6 * fTemp7)))); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph7 = FAUSTFLOAT(fRec15[0]); - output3[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fRec1[0] * (fTemp1 - (fTemp13 + (5.302876193624534e-17 * fTemp6)))); - fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + output3[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.16666666666666666 * (fRec1[0] * (fTemp0 + (fConst6 * fTemp10)))); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph8 = FAUSTFLOAT(fRec16[0]); - output4[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (fRec1[0] * (fTemp14 - fTemp4)); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + output4[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (fRec1[0] * (fTemp1 - fTemp4)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph9 = FAUSTFLOAT(fRec17[0]); - output5[i] = FAUSTFLOAT(fTemp18); + output5[i] = FAUSTFLOAT(fTemp14); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; fRec6[1] = fRec6[0]; fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; + fRec0[1] = fRec0[0]; + fRec10[1] = fRec10[0]; fRec9[1] = fRec9[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec0[1] = fRec0[0]; - fRec10[1] = fRec10[0]; fRec14[1] = fRec14[0]; fRec13[1] = fRec13[0]; fRec12[1] = fRec12[0]; @@ -1056,7 +1075,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1288,7 +1306,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1351,7 +1369,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1380,11 +1398,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecLebedev261.cpp b/source/HOAUGens/HOADecLebedev261.cpp index 5466a83851..c0400492ef 100644 --- a/source/HOAUGens/HOADecLebedev261.cpp +++ b/source/HOAUGens/HOADecLebedev261.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev261" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,20 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -632,13 +649,15 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fRec0[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec10[2]; double fRec9[2]; double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fVbargraph2; - double fRec0[2]; FAUSTFLOAT fVbargraph3; - double fRec10[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph4; double fRec14[2]; double fRec13[2]; @@ -646,26 +665,32 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph5; double fRec11[2]; FAUSTFLOAT fVbargraph6; + double fConst6; double fRec15[2]; FAUSTFLOAT fVbargraph7; double fRec16[2]; FAUSTFLOAT fVbargraph8; double fRec17[2]; FAUSTFLOAT fVbargraph9; + double fConst7; double fRec18[2]; FAUSTFLOAT fVbargraph10; double fRec19[2]; FAUSTFLOAT fVbargraph11; + double fConst8; double fRec20[2]; FAUSTFLOAT fVbargraph12; double fRec21[2]; FAUSTFLOAT fVbargraph13; double fRec22[2]; FAUSTFLOAT fVbargraph14; + double fConst9; double fRec23[2]; FAUSTFLOAT fVbargraph15; + double fConst10; double fRec24[2]; FAUSTFLOAT fVbargraph16; + double fConst11; double fRec25[2]; FAUSTFLOAT fVbargraph17; double fRec26[2]; @@ -678,10 +703,14 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph21; double fRec30[2]; FAUSTFLOAT fVbargraph22; + double fConst12; + double fConst13; double fRec31[2]; FAUSTFLOAT fVbargraph23; + double fConst14; double fRec32[2]; FAUSTFLOAT fVbargraph24; + double fConst15; double fRec33[2]; FAUSTFLOAT fVbargraph25; double fRec34[2]; @@ -700,36 +729,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev261"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -891,10 +920,22 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); + fConst4 = (double(tgamma(1.5)) * sqrt((3.0 * (double(tgamma(1.0)) / double(tgamma(3.0)))))); + fConst5 = (0.07598900579074909 * fConst4); + fConst6 = (0.0 - (1.5957691216057308 * fConst4)); + fConst7 = (0.042985873032210013 * fConst4); + fConst8 = (0.0 - (1.1283791670955128 * fConst4)); + fConst9 = (0.0 - (1.1283791670955126 * fConst4)); + fConst10 = (0.0 - (1.128379167095513 * fConst4)); + fConst11 = (0.042985873032209999 * fConst4); + fConst12 = (0.02961378424040018 * fConst4); + fConst13 = (0.0 - (0.92131773192356115 * fConst4)); + fConst14 = (0.0 - (0.92131773192356148 * fConst4)); + fConst15 = (0.029613784240400173 * fConst4); } @@ -932,23 +973,23 @@ class mydsp : public dsp { } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec9[l6] = 0.0; + fRec0[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec9[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec0[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec7[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { @@ -1075,9 +1116,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1087,21 +1128,21 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x234dab0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20e0fa0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2375e60", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x210af40", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2358da0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20ec0c0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2362740", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x20fcda0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1122,136 +1163,136 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-outs/2"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph3, "osc", "/output1"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2367600", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x20f0f80", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph4, "osc", "/output2"); + ui_interface->declare(&fVbargraph4, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x236c970", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2101a50", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph6, "osc", "/output3"); + ui_interface->declare(&fVbargraph6, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x237ae70", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x210f950", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph7, "osc", "/output4"); + ui_interface->declare(&fVbargraph7, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23802a0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x21154a0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph8, "osc", "/output5"); + ui_interface->declare(&fVbargraph8, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2385970", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x211a9a0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph9, "osc", "/output6"); + ui_interface->declare(&fVbargraph9, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x238ab90", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x211fbc0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph10, "osc", "/output7"); + ui_interface->declare(&fVbargraph10, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23913c0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x21268d0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph11, "osc", "/output8"); + ui_interface->declare(&fVbargraph11, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2397330", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x212c0a0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph12, "osc", "/output9"); + ui_interface->declare(&fVbargraph12, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x239cf90", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2132600", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph13, "osc", "/output10"); + ui_interface->declare(&fVbargraph13, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23a2cd0", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2138350", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph14, "osc", "/output11"); + ui_interface->declare(&fVbargraph14, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23a8b30", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x213e320", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph15, "osc", "/output12"); + ui_interface->declare(&fVbargraph15, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23ae650", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2144910", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph16, "osc", "/output13"); + ui_interface->declare(&fVbargraph16, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23b4070", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x214b1c0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph17, "osc", "/output14"); + ui_interface->declare(&fVbargraph17, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23b9f20", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2151910", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph18, "osc", "/output15"); + ui_interface->declare(&fVbargraph18, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23bef80", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2156b50", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph19, "osc", "/output16"); + ui_interface->declare(&fVbargraph19, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23c43a0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x215bd90", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph20, "osc", "/output17"); + ui_interface->declare(&fVbargraph20, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23c98a0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2160ed0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph21, "osc", "/output18"); + ui_interface->declare(&fVbargraph21, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23cee80", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x21660f0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph22, "osc", "/output19"); + ui_interface->declare(&fVbargraph22, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23d5890", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x216c8c0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph23, "osc", "/output20"); + ui_interface->declare(&fVbargraph23, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23db630", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2173610", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph24, "osc", "/output21"); + ui_interface->declare(&fVbargraph24, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23e10f0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x217a140", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph25, "osc", "/output22"); + ui_interface->declare(&fVbargraph25, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23e6e40", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2180b10", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph26, "osc", "/output23"); + ui_interface->declare(&fVbargraph26, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23ecca0", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2186760", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph27, "osc", "/output24"); + ui_interface->declare(&fVbargraph27, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23f25e0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x218c280", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph28, "osc", "/output25"); + ui_interface->declare(&fVbargraph28, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23f8420", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2191e80", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph29, "osc", "/output26"); + ui_interface->declare(&fVbargraph29, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23fe100", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2197b60", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1312,156 +1353,149 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.082478609884232251 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); - fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow7 * ((fSlow3 * fTemp5) - (fSlow8 * fRec9[0]))); - double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); - fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (5.0503582796424135e-18 * fTemp6); - double fTemp8 = (fRec1[0] * ((fTemp1 + fTemp4) + fTemp7)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); - fVbargraph3 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp8); - double fTemp9 = (0.082478609884232251 * fTemp6); - double fTemp10 = (fRec1[0] * (fTemp1 + fTemp9)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph4 = FAUSTFLOAT(fRec10[0]); - output1[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fRec3[0] * double(input1[i])); + double fTemp5 = (fRec1[0] * (fTemp1 + fTemp4)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (fRec3[0] * double(input3[i])); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec9[0] = (fSlow7 * ((fSlow3 * fTemp6) - (fSlow8 * fRec10[0]))); + double fTemp7 = (fRec9[0] + (fSlow4 * fTemp6)); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph3 = FAUSTFLOAT(fRec8[0]); + double fTemp8 = (fRec1[0] * (fTemp1 + (fConst5 * fTemp7))); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph4 = FAUSTFLOAT(fRec7[0]); + output1[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (fRec3[0] * double(input1[i])); fRec14[0] = (fRec14[1] + fRec13[1]); - fRec13[0] = (fSlow7 * ((fSlow3 * fTemp11) - (fSlow8 * fRec14[0]))); - double fTemp12 = (fRec13[0] + (fSlow4 * fTemp11)); - fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fRec13[0] = (fSlow7 * ((fSlow3 * fTemp9) - (fSlow8 * fRec14[0]))); + double fTemp10 = (fRec13[0] + (fSlow4 * fTemp9)); + fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph5 = FAUSTFLOAT(fRec12[0]); - double fTemp13 = (0.082478609884232251 * fTemp12); - double fTemp14 = (fTemp1 + fTemp7); - double fTemp15 = (fRec1[0] * (fTemp13 + fTemp14)); - fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + double fTemp11 = (fRec1[0] * (fTemp1 + (fConst5 * fTemp10))); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph6 = FAUSTFLOAT(fRec11[0]); - output2[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (fRec1[0] * ((fTemp1 + (1.0100716559284827e-17 * fTemp12)) - fTemp9)); - fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + output2[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.047619047619047623 * (fRec1[0] * (fTemp0 + (fConst6 * fTemp7)))); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph7 = FAUSTFLOAT(fRec15[0]); - output3[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fRec1[0] * (fTemp1 - (fTemp13 + (1.5151074838927241e-17 * fTemp6)))); - fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + output3[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.047619047619047623 * (fRec1[0] * (fTemp0 + (fConst6 * fTemp10)))); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph8 = FAUSTFLOAT(fRec16[0]); - output4[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (fRec1[0] * (fTemp14 - fTemp4)); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + output4[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (fRec1[0] * (fTemp1 - fTemp4)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph9 = FAUSTFLOAT(fRec17[0]); - output5[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.038095238095238099 * fTemp0); - double fTemp20 = (0.046656947481584346 * fTemp3); - double fTemp21 = (fTemp19 + fTemp20); - double fTemp22 = (0.046656947481584353 * fTemp6); - double fTemp23 = (fRec1[0] * (fTemp21 + fTemp22)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + output5[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.038095238095238099 * fTemp0); + double fTemp16 = (0.046656947481584346 * fTemp3); + double fTemp17 = (fTemp15 + fTemp16); + double fTemp18 = (fConst7 * fTemp7); + double fTemp19 = (fRec1[0] * (fTemp17 + fTemp18)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph10 = FAUSTFLOAT(fRec18[0]); - output6[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.046656947481584353 * fTemp12); - double fTemp25 = (2.8569140695654219e-18 * fTemp6); - double fTemp26 = (fRec1[0] * (fTemp24 + (fTemp21 + fTemp25))); - fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + output6[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (fConst7 * fTemp10); + double fTemp21 = (fRec1[0] * (fTemp17 + fTemp20)); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph11 = FAUSTFLOAT(fRec19[0]); - output7[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (5.7138281391308437e-18 * fTemp12); - double fTemp28 = (fRec1[0] * ((fTemp21 + fTemp27) - fTemp22)); - fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + output7[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.038095238095238099 * (fTemp0 + (fConst8 * fTemp7))); + double fTemp23 = (fRec1[0] * (fTemp16 + fTemp22)); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph12 = FAUSTFLOAT(fRec20[0]); - output8[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (8.570742208696266e-18 * fTemp6); - double fTemp30 = (fRec1[0] * (fTemp21 - (fTemp24 + fTemp29))); - fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + output8[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.038095238095238099 * (fTemp0 + (fConst8 * fTemp10))); + double fTemp25 = (fRec1[0] * (fTemp16 + fTemp24)); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph13 = FAUSTFLOAT(fRec21[0]); - output9[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.046656947481584346 * fTemp12); - double fTemp32 = (fTemp19 + fTemp22); - double fTemp33 = (fRec1[0] * (fTemp31 + fTemp32)); - fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + output9[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (fRec1[0] * (fTemp15 + (fConst4 * ((0.042985873032210013 * fTemp7) + (0.042985873032210006 * fTemp10))))); + fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph14 = FAUSTFLOAT(fRec22[0]); - output10[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (fRec1[0] * ((fTemp19 + fTemp24) - (0.046656947481584346 * fTemp6))); - fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + output10[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (fRec1[0] * (fTemp20 + (0.038095238095238099 * (fTemp0 + (fConst9 * fTemp7))))); + fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph15 = FAUSTFLOAT(fRec23[0]); - output11[i] = FAUSTFLOAT(fTemp34); - double fTemp35 = (fRec1[0] * (fTemp19 - (fTemp22 + fTemp31))); - fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + output11[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.038095238095238099 * (fRec1[0] * ((fTemp0 + (fConst9 * fTemp10)) + (fConst10 * fTemp7)))); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph16 = FAUSTFLOAT(fRec24[0]); - output12[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (fRec1[0] * ((fTemp19 + (0.046656947481584339 * fTemp6)) - fTemp24)); - fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + output12[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (fRec1[0] * ((0.038095238095238099 * (fTemp0 + (fConst10 * fTemp10))) + (fConst11 * fTemp7))); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph17 = FAUSTFLOAT(fRec25[0]); - output13[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = (fRec1[0] * (fTemp32 - fTemp20)); - fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + output13[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fRec1[0] * ((fTemp15 + fTemp18) - fTemp16)); + fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph18 = FAUSTFLOAT(fRec26[0]); - output14[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = (fRec1[0] * ((fTemp24 + (fTemp19 + fTemp25)) - fTemp20)); - fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + output14[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fRec1[0] * ((fTemp15 + fTemp20) - fTemp16)); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph19 = FAUSTFLOAT(fRec27[0]); - output15[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (fRec1[0] * ((fTemp19 + fTemp27) - (fTemp20 + fTemp22))); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + output15[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (fRec1[0] * (fTemp22 - fTemp16)); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph20 = FAUSTFLOAT(fRec28[0]); - output16[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (fRec1[0] * (fTemp19 - (fTemp24 + (fTemp20 + fTemp29)))); - fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (fRec1[0] * (fTemp24 - fTemp16)); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph21 = FAUSTFLOAT(fRec29[0]); - output17[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (fTemp0 + fTemp3); - double fTemp42 = (0.03214285714285714 * fTemp41); - double fTemp43 = (0.032142857142857126 * fTemp12); - double fTemp44 = (fTemp43 + (0.032142857142857133 * fTemp6)); - double fTemp45 = (fRec1[0] * (fTemp42 + fTemp44)); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + output17[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (fTemp0 + fTemp3); + double fTemp35 = (fConst4 * ((0.02961378424040018 * fTemp7) + (0.029613784240400176 * fTemp10))); + double fTemp36 = (fRec1[0] * ((0.03214285714285714 * fTemp34) + fTemp35)); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph22 = FAUSTFLOAT(fRec30[0]); - output18[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (0.032142857142857133 * fTemp12); - double fTemp47 = (0.032142857142857126 * fTemp6); - double fTemp48 = (fRec1[0] * ((fTemp42 + fTemp46) - fTemp47)); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (fConst12 * fTemp10); + double fTemp38 = (fConst13 * fTemp7); + double fTemp39 = (fRec1[0] * (fTemp37 + (0.03214285714285714 * (fTemp34 + fTemp38)))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph23 = FAUSTFLOAT(fRec31[0]); - output19[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (fRec1[0] * (0.0 - (fTemp43 + (0.03214285714285714 * (fTemp6 - fTemp41))))); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + output19[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (fTemp0 + (fConst13 * fTemp10)); + double fTemp41 = (fConst14 * fTemp7); + double fTemp42 = (0.03214285714285714 * (fRec1[0] * ((fTemp3 + fTemp40) + fTemp41))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph24 = FAUSTFLOAT(fRec32[0]); - output20[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (fTemp0 - fTemp12); - double fTemp51 = (fRec1[0] * (fTemp47 + (0.03214285714285714 * (fTemp3 + fTemp50)))); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + output20[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (fTemp0 + (fConst14 * fTemp10)); + double fTemp44 = (fConst15 * fTemp7); + double fTemp45 = (fRec1[0] * ((0.03214285714285714 * (fTemp3 + fTemp43)) + fTemp44)); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph25 = FAUSTFLOAT(fRec33[0]); - output21[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (fTemp0 - fTemp3); - double fTemp53 = (0.03214285714285714 * fTemp52); - double fTemp54 = (fRec1[0] * (fTemp44 + fTemp53)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + output21[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (fTemp0 - fTemp3); + double fTemp47 = (fRec1[0] * (fTemp35 + (0.03214285714285714 * fTemp46))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph26 = FAUSTFLOAT(fRec34[0]); - output22[i] = FAUSTFLOAT(fTemp54); - double fTemp55 = (fRec1[0] * ((fTemp46 + fTemp53) - fTemp47)); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + output22[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (fRec1[0] * (fTemp37 + (0.03214285714285714 * (fTemp38 + fTemp46)))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph27 = FAUSTFLOAT(fRec35[0]); - output23[i] = FAUSTFLOAT(fTemp55); - double fTemp56 = (fRec1[0] * (0.0 - (fTemp43 + (0.03214285714285714 * (fTemp6 - fTemp52))))); - fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + output23[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.03214285714285714 * (fRec1[0] * (fTemp41 - (fTemp3 - fTemp40)))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph28 = FAUSTFLOAT(fRec36[0]); - output24[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (fRec1[0] * (fTemp47 - (0.03214285714285714 * (fTemp3 - fTemp50)))); - fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + output24[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (fRec1[0] * (fTemp44 - (0.03214285714285714 * (fTemp3 - fTemp43)))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph29 = FAUSTFLOAT(fRec37[0]); - output25[i] = FAUSTFLOAT(fTemp57); + output25[i] = FAUSTFLOAT(fTemp50); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; fRec6[1] = fRec6[0]; fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; + fRec0[1] = fRec0[0]; + fRec10[1] = fRec10[0]; fRec9[1] = fRec9[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec0[1] = fRec0[0]; - fRec10[1] = fRec10[0]; fRec14[1] = fRec14[0]; fRec13[1] = fRec13[0]; fRec12[1] = fRec12[0]; @@ -1497,7 +1531,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1729,7 +1762,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1792,7 +1825,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1821,11 +1854,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecLebedev262.cpp b/source/HOAUGens/HOADecLebedev262.cpp index c512fd2899..976b59f635 100644 --- a/source/HOAUGens/HOADecLebedev262.cpp +++ b/source/HOAUGens/HOADecLebedev262.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev262" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -614,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -636,91 +653,136 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fConst4; + double fConst5; double fRec9[2]; + double fRec10[2]; double fRec8[2]; double fRec7[2]; FAUSTFLOAT fVbargraph2; - double fConst4; - double fConst5; - double fRec12[2]; - double fRec13[2]; - double fRec11[2]; - double fRec10[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph3; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; double fRec14[2]; + double fRec13[2]; + double fRec12[2]; FAUSTFLOAT fVbargraph4; - double fRec20[2]; - double fRec21[2]; - double fRec19[2]; + double fConst11; + double fConst12; + double fRec17[2]; double fRec18[2]; + double fRec16[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph5; - double fRec0[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph6; double fRec22[2]; + double fRec21[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph7; - double fRec26[2]; - double fRec25[2]; - double fRec24[2]; + double fConst13; + double fRec19[2]; FAUSTFLOAT fVbargraph8; + double fConst14; + double fRec23[2]; + FAUSTFLOAT fVbargraph9; + double fRec24[2]; + FAUSTFLOAT fVbargraph10; + double fRec25[2]; + FAUSTFLOAT fVbargraph11; + double fConst15; + double fConst16; + double fConst17; double fRec29[2]; double fRec30[2]; double fRec28[2]; double fRec27[2]; - FAUSTFLOAT fVbargraph9; - double fRec23[2]; - FAUSTFLOAT fVbargraph10; - double fRec31[2]; - FAUSTFLOAT fVbargraph11; - double fRec32[2]; FAUSTFLOAT fVbargraph12; - double fRec33[2]; + double fConst18; + double fRec26[2]; FAUSTFLOAT fVbargraph13; + double fConst19; double fRec34[2]; + double fRec35[2]; + double fRec33[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph14; - double fRec38[2]; - double fRec39[2]; - double fRec37[2]; - double fRec36[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph15; - double fRec35[2]; + double fConst20; + double fConst21; + double fConst22; + double fRec36[2]; FAUSTFLOAT fVbargraph16; - double fRec40[2]; + double fRec37[2]; FAUSTFLOAT fVbargraph17; double fRec41[2]; - FAUSTFLOAT fVbargraph18; double fRec42[2]; + double fRec40[2]; + double fRec39[2]; + FAUSTFLOAT fVbargraph18; + double fRec38[2]; FAUSTFLOAT fVbargraph19; + double fConst23; + double fConst24; + double fConst25; double fRec43[2]; FAUSTFLOAT fVbargraph20; + double fConst26; double fRec44[2]; FAUSTFLOAT fVbargraph21; + double fConst27; + double fConst28; double fRec45[2]; FAUSTFLOAT fVbargraph22; + double fConst29; + double fConst30; double fRec46[2]; FAUSTFLOAT fVbargraph23; double fRec47[2]; FAUSTFLOAT fVbargraph24; + double fConst31; double fRec48[2]; FAUSTFLOAT fVbargraph25; double fRec49[2]; FAUSTFLOAT fVbargraph26; + double fConst32; + double fConst33; double fRec50[2]; FAUSTFLOAT fVbargraph27; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; double fRec51[2]; FAUSTFLOAT fVbargraph28; + double fConst39; + double fConst40; double fRec52[2]; FAUSTFLOAT fVbargraph29; + double fConst41; + double fConst42; + double fConst43; double fRec53[2]; FAUSTFLOAT fVbargraph30; + double fConst44; + double fConst45; double fRec54[2]; FAUSTFLOAT fVbargraph31; + double fConst46; + double fConst47; double fRec55[2]; FAUSTFLOAT fVbargraph32; + double fConst48; double fRec56[2]; FAUSTFLOAT fVbargraph33; + double fConst49; + double fConst50; double fRec57[2]; FAUSTFLOAT fVbargraph34; @@ -731,36 +793,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev262"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -942,12 +1004,57 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); fConst4 = (510.0 / fConst0); fConst5 = (1020.0 / fConst0); + fConst6 = double(tgamma(1.5)); + fConst7 = double(tgamma(1.0)); + fConst8 = sqrt((3.0 * (fConst7 / double(tgamma(3.0))))); + fConst9 = (fConst6 * fConst8); + fConst10 = (0.07598900579074909 * fConst9); + fConst11 = (double(tgamma(2.5)) * sqrt((5.0 * (fConst7 / double(tgamma(5.0)))))); + fConst12 = (0.15197801158149818 * fConst11); + fConst13 = (0.0 - (3.1915382432114616 * fConst11)); + fConst14 = (0.0 - (1.5957691216057308 * fConst9)); + fConst15 = (0.042985873032210013 * fConst8); + fConst16 = sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))); + fConst17 = (0.091186806948898899 * fConst16); + fConst18 = (0.06079120463259928 * fConst11); + fConst19 = (0.0 - (1.595769121605731 * fConst11)); + fConst20 = (0.0 - (1.1283791670955128 * fConst9)); + fConst21 = (fConst6 * fConst16); + fConst22 = (0.0 - (2.3936536824085959 * fConst21)); + fConst23 = (0.042985873032210013 * fConst9); + fConst24 = (0.0 - (1.1283791670955126 * fConst9)); + fConst25 = (0.0 - (7.0866384831701748e-16 * fConst11)); + fConst26 = (0.0 - (1.128379167095513 * fConst9)); + fConst27 = (0.042985873032209999 * fConst9); + fConst28 = (0.0 - (1.417327696634035e-15 * fConst11)); + fConst29 = (fConst16 * (0.0 - (1.6925687506432687 * fConst6))); + fConst30 = (0.053874802376117914 * fConst29); + fConst31 = (0.0 - (1.4142135623730951 * fConst29)); + fConst32 = (0.051292578908755625 * fConst16); + fConst33 = (0.051292578908755639 * fConst16); + fConst34 = (0.02961378424040018 * fConst8); + fConst35 = (0.0 - (0.92131773192356115 * fConst9)); + fConst36 = (0.0 - (2.1276921621409737 * fConst11)); + fConst37 = (0.0 - (1.5957691216057308 * fConst21)); + fConst38 = (0.0 - (4.7244256554467816e-16 * fConst11)); + fConst39 = (0.0 - (0.92131773192356148 * fConst9)); + fConst40 = (0.0 - (1.5957691216057313 * fConst21)); + fConst41 = (0.0 - (9.4488513108935631e-16 * fConst11)); + fConst42 = (0.029613784240400173 * fConst8); + fConst43 = (0.051292578908755618 * fConst16); + fConst44 = (fConst16 * (0.0 - (1.5957691216057308 * fConst6))); + fConst45 = (0.032142857142857147 * fConst44); + fConst46 = (0.02961378424040018 * fConst9); + fConst47 = (0.0 - fConst44); + fConst48 = (0.0 - (1.0000000000000002 * fConst44)); + fConst49 = (0.029613784240400173 * fConst9); + fConst50 = (0.032142857142857133 * fConst44); } @@ -989,31 +1096,31 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec8[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec7[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec13[l10] = 0.0; + fRec0[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec11[l11] = 0.0; + fRec14[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec10[l12] = 0.0; + fRec13[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec16[l13] = 0.0; + fRec12[l13] = 0.0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { @@ -1021,47 +1128,47 @@ class mydsp : public dsp { } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec18[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec14[l16] = 0.0; + fRec16[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec20[l17] = 0.0; + fRec15[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec21[l18] = 0.0; + fRec11[l18] = 0.0; } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec19[l19] = 0.0; + fRec22[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec18[l20] = 0.0; + fRec21[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec0[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec22[l22] = 0.0; + fRec19[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec26[l23] = 0.0; + fRec23[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec25[l24] = 0.0; + fRec24[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec24[l25] = 0.0; + fRec25[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { @@ -1081,15 +1188,15 @@ class mydsp : public dsp { } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec23[l30] = 0.0; + fRec26[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec31[l31] = 0.0; + fRec34[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec32[l32] = 0.0; + fRec35[l32] = 0.0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { @@ -1097,15 +1204,15 @@ class mydsp : public dsp { } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec34[l34] = 0.0; + fRec32[l34] = 0.0; } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec38[l35] = 0.0; + fRec31[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec39[l36] = 0.0; + fRec36[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { @@ -1113,11 +1220,11 @@ class mydsp : public dsp { } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec36[l38] = 0.0; + fRec41[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec35[l39] = 0.0; + fRec42[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { @@ -1125,11 +1232,11 @@ class mydsp : public dsp { } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec41[l41] = 0.0; + fRec39[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec42[l42] = 0.0; + fRec38[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { @@ -1208,9 +1315,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1220,43 +1327,43 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f5e600", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x276db00", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fad280", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27b4b40", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f69b00", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2778e30", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f734a0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2798bc0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fb87b0", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x280c4a0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fe1e70", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27ecbb0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f81d40", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27876d0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f8d3d0", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27d8ee0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f98a60", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x27a5f10", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1277,136 +1384,136 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-outs/2"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph6, "osc", "/output1"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1f9dae0", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x278c670", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph7, "osc", "/output2"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fa3d90", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "osc", "/output2 -70 6"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27ab650", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph10, "osc", "/output3"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fbd820", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "osc", "/output3 -70 6"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27ba7d0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph11, "osc", "/output4"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fc35a0", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "osc", "/output4 -70 6"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27c06e0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph12, "osc", "/output5"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fc9400", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "osc", "/output5 -70 6"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27c5fa0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph13, "osc", "/output6"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fcebc0", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "osc", "/output6 -70 6"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27cb3a0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph14, "osc", "/output7"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fd6910", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "osc", "/output7 -70 6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27e01c0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph16, "osc", "/output8"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fe8cc0", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "osc", "/output8 -70 6"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27f2030", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph17, "osc", "/output9"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1fefe50", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output9 -70 6"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27f9740", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph18, "osc", "/output10"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ff6e90", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output10 -70 6"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x27ffa30", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph19, "osc", "/output11"); + ui_interface->declare(&fVbargraph19, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x1ffde20", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2811af0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph20, "osc", "/output12"); + ui_interface->declare(&fVbargraph20, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x20040c0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2819e10", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph21, "osc", "/output13"); + ui_interface->declare(&fVbargraph21, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x200a260", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x28215a0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph22, "osc", "/output14"); + ui_interface->declare(&fVbargraph22, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2010a60", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2828d60", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph23, "osc", "/output15"); + ui_interface->declare(&fVbargraph23, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2016060", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x282fa80", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph24, "osc", "/output16"); + ui_interface->declare(&fVbargraph24, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x201bde0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2835260", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph25, "osc", "/output17"); + ui_interface->declare(&fVbargraph25, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2021e50", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x283b5f0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph26, "osc", "/output18"); + ui_interface->declare(&fVbargraph26, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2027bb0", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2841170", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph27, "osc", "/output19"); + ui_interface->declare(&fVbargraph27, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2030be0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x284a6b0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph28, "osc", "/output20"); + ui_interface->declare(&fVbargraph28, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2038080", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x28541d0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph29, "osc", "/output21"); + ui_interface->declare(&fVbargraph29, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x203e820", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x285ce60", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph30, "osc", "/output22"); + ui_interface->declare(&fVbargraph30, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2045c60", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x28658b0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph31, "osc", "/output23"); + ui_interface->declare(&fVbargraph31, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x204c420", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x286d1d0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph32, "osc", "/output24"); + ui_interface->declare(&fVbargraph32, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x20526c0", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2874610", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph33, "osc", "/output25"); + ui_interface->declare(&fVbargraph33, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2058c20", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x287b640", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph34, "osc", "/output26"); + ui_interface->declare(&fVbargraph34, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x205f080", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2882db0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1477,211 +1584,186 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.082478609884232251 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); + double fTemp5 = (fRec3[0] * double(input6[i])); fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow8 * ((fSlow3 * fTemp5) - (fSlow9 * fRec9[0]))); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec8[0] = (fSlow11 * ((fSlow3 * fTemp5) - ((fSlow13 * fRec9[0]) + (fSlow12 * fRec10[0])))); double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (5.0503582796424135e-18 * fTemp6); - double fTemp8 = (fRec3[0] * double(input6[i])); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec13[0] = (fRec13[1] + fRec12[1]); - fRec11[0] = (fSlow11 * ((fSlow3 * fTemp8) - ((fSlow13 * fRec12[0]) + (fSlow12 * fRec13[0])))); - double fTemp9 = (fRec11[0] + (fSlow4 * fTemp8)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = (0.10647942749999 * fTemp9); - double fTemp11 = (fRec3[0] * double(input7[i])); - fRec16[0] = (fRec16[1] + fRec15[1]); + double fTemp7 = (0.10647942749999 * fTemp6); + double fTemp8 = (fRec1[0] * ((fTemp1 + fTemp4) + fTemp7)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph3 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (fRec3[0] * double(input3[i])); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec13[0] = (fSlow8 * ((fSlow3 * fTemp9) - (fSlow9 * fRec14[0]))); + double fTemp10 = (fRec13[0] + (fSlow4 * fTemp9)); + fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph4 = FAUSTFLOAT(fRec12[0]); + double fTemp11 = (fRec3[0] * double(input8[i])); fRec17[0] = (fRec17[1] + fRec16[1]); - fRec15[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec16[0]) + (fSlow12 * fRec17[0])))); - double fTemp12 = (fRec15[0] + (fSlow4 * fTemp11)); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph4 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = (1.1292944424009331e-17 * fTemp12); - double fTemp14 = (fRec3[0] * double(input8[i])); - fRec20[0] = (fRec20[1] + fRec19[1]); - fRec21[0] = (fRec21[1] + fRec20[1]); - fRec19[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec20[0]) + (fSlow12 * fRec21[0])))); - double fTemp15 = (fRec19[0] + (fSlow4 * fTemp14)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph5 = FAUSTFLOAT(fRec18[0]); - double fTemp16 = (3.4574670604529943e-34 * fTemp15); - double fTemp17 = (fRec1[0] * (((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph6 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.082478609884232251 * fTemp6); - double fTemp19 = (0.092213889195414706 * fTemp15); - double fTemp20 = (0.053239713749994998 * fTemp9); - double fTemp21 = (fRec1[0] * (((fTemp1 + fTemp18) + fTemp19) - fTemp20)); - fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph7 = FAUSTFLOAT(fRec22[0]); - output1[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (fRec3[0] * double(input1[i])); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec25[0] = (fSlow8 * ((fSlow3 * fTemp22) - (fSlow9 * fRec26[0]))); - double fTemp23 = (fRec25[0] + (fSlow4 * fTemp22)); - fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph8 = FAUSTFLOAT(fRec24[0]); - double fTemp24 = (0.082478609884232251 * fTemp23); - double fTemp25 = (fTemp1 + fTemp7); - double fTemp26 = (fRec3[0] * double(input4[i])); + fRec18[0] = (fRec18[1] + fRec17[1]); + fRec16[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec17[0]) + (fSlow12 * fRec18[0])))); + double fTemp12 = (fRec16[0] + (fSlow4 * fTemp11)); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph5 = FAUSTFLOAT(fRec15[0]); + double fTemp13 = (fConst12 * fTemp12); + double fTemp14 = (0.053239713749994998 * fTemp6); + double fTemp15 = (fRec1[0] * (((fTemp1 + (fConst10 * fTemp10)) + fTemp13) - fTemp14)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph6 = FAUSTFLOAT(fRec11[0]); + output1[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (fRec3[0] * double(input1[i])); + fRec22[0] = (fRec22[1] + fRec21[1]); + fRec21[0] = (fSlow8 * ((fSlow3 * fTemp16) - (fSlow9 * fRec22[0]))); + double fTemp17 = (fRec21[0] + (fSlow4 * fTemp16)); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph7 = FAUSTFLOAT(fRec20[0]); + double fTemp18 = (fConst13 * fTemp12); + double fTemp19 = (fRec1[0] * (((fConst10 * fTemp17) + (0.047619047619047623 * (fTemp0 + fTemp18))) - fTemp14)); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph8 = FAUSTFLOAT(fRec19[0]); + output2[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (fRec1[0] * ((fTemp13 + (0.047619047619047623 * (fTemp0 + (fConst14 * fTemp10)))) - fTemp14)); + fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph9 = FAUSTFLOAT(fRec23[0]); + output3[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (fRec1[0] * ((0.047619047619047623 * (fTemp18 + (fTemp0 + (fConst14 * fTemp17)))) - fTemp14)); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph10 = FAUSTFLOAT(fRec24[0]); + output4[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (fRec1[0] * ((fTemp1 + fTemp7) - fTemp4)); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph11 = FAUSTFLOAT(fRec25[0]); + output5[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (fRec3[0] * double(input7[i])); fRec29[0] = (fRec29[1] + fRec28[1]); fRec30[0] = (fRec30[1] + fRec29[1]); - fRec28[0] = (fSlow11 * ((fSlow3 * fTemp26) - ((fSlow13 * fRec29[0]) + (fSlow12 * fRec30[0])))); - double fTemp27 = (fRec28[0] + (fSlow4 * fTemp26)); - fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph9 = FAUSTFLOAT(fRec27[0]); - double fTemp28 = (fRec1[0] * (((fTemp24 + fTemp25) + (1.1292944424009331e-17 * fTemp27)) - (fTemp20 + fTemp19))); - fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); - fVbargraph10 = FAUSTFLOAT(fRec23[0]); - output2[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (fRec1[0] * (((1.0100716559284827e-17 * fTemp23) + (fTemp1 + fTemp19)) - ((2.2585888848018662e-17 * fTemp27) + (fTemp18 + fTemp20)))); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph11 = FAUSTFLOAT(fRec31[0]); - output3[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fRec1[0] * ((fTemp1 + (3.387883327202799e-17 * fTemp27)) - (fTemp24 + (fTemp19 + (fTemp20 + (1.5151074838927241e-17 * fTemp6)))))); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph12 = FAUSTFLOAT(fRec32[0]); - output4[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (fRec1[0] * ((fTemp16 + (fTemp10 + fTemp25)) - (fTemp4 + fTemp13))); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); - fVbargraph13 = FAUSTFLOAT(fRec33[0]); - output5[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (0.038095238095238099 * fTemp0); - double fTemp33 = (0.046656947481584346 * fTemp3); - double fTemp34 = (fTemp32 + fTemp33); - double fTemp35 = (0.046656947481584353 * fTemp6); - double fTemp36 = (0.021295885499997984 * fTemp9); - double fTemp37 = (0.073771111356331756 * fTemp12); - double fTemp38 = (0.036885555678165885 * fTemp15); - double fTemp39 = (fRec1[0] * ((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph14 = FAUSTFLOAT(fRec34[0]); - output6[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (fRec3[0] * double(input5[i])); - fRec38[0] = (fRec38[1] + fRec37[1]); - fRec39[0] = (fRec39[1] + fRec38[1]); - fRec37[0] = (fSlow11 * ((fSlow3 * fTemp40) - ((fSlow13 * fRec38[0]) + (fSlow12 * fRec39[0])))); - double fTemp41 = (fRec37[0] + (fSlow4 * fTemp40)); - fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph15 = FAUSTFLOAT(fRec36[0]); - double fTemp42 = (0.073771111356331756 * fTemp41); - double fTemp43 = (4.5171777696037333e-18 * fTemp27); - double fTemp44 = (0.046656947481584353 * fTemp23); - double fTemp45 = (2.8569140695654219e-18 * fTemp6); - double fTemp46 = (4.5171777696037326e-18 * fTemp12); - double fTemp47 = (fRec1[0] * ((fTemp42 + (fTemp43 + (fTemp44 + ((fTemp36 + (fTemp34 + fTemp45)) + fTemp46)))) - fTemp38)); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); - fVbargraph16 = FAUSTFLOAT(fRec35[0]); - output7[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (9.0343555392074651e-18 * fTemp41); - double fTemp49 = (5.7138281391308437e-18 * fTemp23); - double fTemp50 = (fTemp34 + fTemp36); - double fTemp51 = (9.0343555392074667e-18 * fTemp27); - double fTemp52 = (fRec1[0] * ((fTemp48 + (fTemp49 + (fTemp38 + fTemp50))) - (fTemp51 + (fTemp35 + fTemp37)))); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); - fVbargraph17 = FAUSTFLOAT(fRec40[0]); - output8[i] = FAUSTFLOAT(fTemp52); - double fTemp53 = (1.35515333088112e-17 * fTemp27); - double fTemp54 = (8.570742208696266e-18 * fTemp6); - double fTemp55 = (1.3551533308811195e-17 * fTemp12); - double fTemp56 = (fRec1[0] * ((fTemp50 + fTemp53) - (fTemp42 + (fTemp44 + (fTemp38 + (fTemp54 + fTemp55)))))); - fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); - fVbargraph18 = FAUSTFLOAT(fRec41[0]); - output9[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (0.073771111356331756 * fTemp27); - double fTemp58 = (0.046656947481584346 * fTemp23); - double fTemp59 = (fTemp32 + fTemp35); - double fTemp60 = (0.042591770999995997 * fTemp9); - double fTemp61 = (fRec1[0] * ((fTemp57 + (fTemp58 + (fTemp59 + (4.5171777696037326e-18 * fTemp15)))) - fTemp60)); - fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); - fVbargraph19 = FAUSTFLOAT(fRec42[0]); - output10[i] = FAUSTFLOAT(fTemp61); - double fTemp62 = (fRec1[0] * ((fTemp32 + fTemp44) - (fTemp57 + ((fTemp60 + (0.046656947481584346 * fTemp6)) + (1.3551533308811195e-17 * fTemp15))))); - fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fRec28[0] = (fSlow11 * ((fSlow3 * fTemp23) - ((fSlow13 * fRec29[0]) + (fSlow12 * fRec30[0])))); + double fTemp24 = (fRec28[0] + (fSlow4 * fTemp23)); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph12 = FAUSTFLOAT(fRec27[0]); + double fTemp25 = (0.038095238095238099 * fTemp0); + double fTemp26 = (0.046656947481584346 * fTemp3); + double fTemp27 = (0.021295885499997991 * fTemp6); + double fTemp28 = (fConst18 * fTemp12); + double fTemp29 = (fRec1[0] * ((fConst6 * ((fConst15 * fTemp10) + (fConst17 * fTemp24))) + (((fTemp25 + fTemp26) + fTemp27) + fTemp28))); + fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph13 = FAUSTFLOAT(fRec26[0]); + output6[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fConst19 * fTemp12); + double fTemp31 = (0.038095238095238099 * (fTemp0 + fTemp30)); + double fTemp32 = (fRec3[0] * double(input5[i])); + fRec34[0] = (fRec34[1] + fRec33[1]); + fRec35[0] = (fRec35[1] + fRec34[1]); + fRec33[0] = (fSlow11 * ((fSlow3 * fTemp32) - ((fSlow13 * fRec34[0]) + (fSlow12 * fRec35[0])))); + double fTemp33 = (fRec33[0] + (fSlow4 * fTemp32)); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph14 = FAUSTFLOAT(fRec32[0]); + double fTemp34 = (fTemp26 + fTemp27); + double fTemp35 = (fRec1[0] * (fTemp31 + ((fConst6 * ((fConst15 * fTemp17) + (fConst17 * fTemp33))) + fTemp34))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph15 = FAUSTFLOAT(fRec31[0]); + output7[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (fTemp0 + (fConst20 * fTemp10)); + double fTemp37 = (fRec1[0] * ((0.038095238095238099 * (fTemp36 + (fConst22 * fTemp24))) + (fTemp28 + fTemp34))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph16 = FAUSTFLOAT(fRec36[0]); + output8[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (fTemp0 + (fConst20 * fTemp17)); + double fTemp39 = (fRec1[0] * (fTemp34 + (0.038095238095238099 * (fTemp30 + (fTemp38 + (fConst22 * fTemp33)))))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph17 = FAUSTFLOAT(fRec37[0]); + output9[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (fRec3[0] * double(input4[i])); + fRec41[0] = (fRec41[1] + fRec40[1]); + fRec42[0] = (fRec42[1] + fRec41[1]); + fRec40[0] = (fSlow11 * ((fSlow3 * fTemp40) - ((fSlow13 * fRec41[0]) + (fSlow12 * fRec42[0])))); + double fTemp41 = (fRec40[0] + (fSlow4 * fTemp40)); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph18 = FAUSTFLOAT(fRec39[0]); + double fTemp42 = (0.042591770999995997 * fTemp6); + double fTemp43 = (fRec1[0] * (((fTemp25 + (fConst9 * ((0.042985873032210013 * fTemp10) + (0.042985873032210006 * fTemp17)))) + (fConst11 * ((2.6996718031124477e-17 * fTemp12) + (0.12158240926519855 * fTemp41)))) - fTemp42)); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph19 = FAUSTFLOAT(fRec38[0]); + output10[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (fConst23 * fTemp17); + double fTemp45 = (fConst13 * fTemp41); + double fTemp46 = (fRec1[0] * ((fTemp44 + (0.038095238095238099 * (((fTemp0 + (fConst24 * fTemp10)) + fTemp45) + (fConst25 * fTemp12)))) - fTemp42)); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph20 = FAUSTFLOAT(fRec43[0]); - output11[i] = FAUSTFLOAT(fTemp62); - double fTemp63 = (fRec1[0] * ((fTemp57 + (fTemp32 + (2.2585888848018662e-17 * fTemp15))) - (fTemp58 + (fTemp35 + fTemp60)))); - fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + output11[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (fRec1[0] * (((0.038095238095238099 * ((fTemp0 + (fConst24 * fTemp17)) + (fConst26 * fTemp10))) + (fConst11 * ((5.3993436062248954e-17 * fTemp12) + (0.12158240926519859 * fTemp41)))) - fTemp42)); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph21 = FAUSTFLOAT(fRec44[0]); - output12[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (fRec1[0] * ((fTemp32 + (0.046656947481584339 * fTemp6)) - (fTemp57 + (fTemp44 + (fTemp60 + (3.1620244387226126e-17 * fTemp15)))))); - fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + output12[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (fRec1[0] * (((fConst27 * fTemp10) + (0.038095238095238099 * ((fTemp45 + (fTemp0 + (fConst26 * fTemp17))) + (fConst28 * fTemp12)))) - fTemp42)); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph22 = FAUSTFLOAT(fRec45[0]); - output13[i] = FAUSTFLOAT(fTemp64); - double fTemp65 = (fRec1[0] * ((fTemp38 + (fTemp36 + fTemp59)) - (fTemp33 + fTemp37))); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + output13[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (fRec1[0] * (((fConst30 * fTemp24) + (fTemp28 + ((fConst23 * fTemp10) + (fTemp25 + fTemp27)))) - fTemp26)); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph23 = FAUSTFLOAT(fRec46[0]); - output14[i] = FAUSTFLOAT(fTemp65); - double fTemp66 = (fRec1[0] * ((fTemp43 + (fTemp44 + (fTemp36 + (fTemp32 + fTemp45)))) - (fTemp42 + (fTemp38 + (fTemp33 + fTemp46))))); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + output14[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (fRec1[0] * (((fConst30 * fTemp33) + (fTemp31 + (fTemp27 + fTemp44))) - fTemp26)); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph24 = FAUSTFLOAT(fRec47[0]); - output15[i] = FAUSTFLOAT(fTemp66); - double fTemp67 = (fTemp32 + fTemp36); - double fTemp68 = (fRec1[0] * ((fTemp49 + (fTemp38 + (fTemp37 + fTemp67))) - (fTemp48 + (fTemp51 + (fTemp33 + fTemp35))))); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + output15[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (fRec1[0] * (((0.038095238095238099 * (fTemp36 + (fConst31 * fTemp24))) + (fTemp27 + fTemp28)) - fTemp26)); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph25 = FAUSTFLOAT(fRec48[0]); - output16[i] = FAUSTFLOAT(fTemp68); - double fTemp69 = (fRec1[0] * ((fTemp42 + (fTemp53 + (fTemp55 + fTemp67))) - (fTemp44 + (fTemp38 + (fTemp33 + fTemp54))))); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + output16[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (fRec1[0] * ((fTemp27 + (0.038095238095238099 * (fTemp30 + (fTemp38 + (fConst31 * fTemp33))))) - fTemp26)); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph26 = FAUSTFLOAT(fRec49[0]); - output17[i] = FAUSTFLOAT(fTemp69); - double fTemp70 = (fTemp0 + fTemp3); - double fTemp71 = (0.03214285714285714 * fTemp70); - double fTemp72 = (0.041496250137936612 * fTemp41); - double fTemp73 = (0.041496250137936598 * fTemp27); - double fTemp74 = (0.032142857142857126 * fTemp23); - double fTemp75 = (7.9795740640090912e-18 * fTemp9); - double fTemp76 = ((0.032142857142857133 * fTemp6) + fTemp75); - double fTemp77 = (0.041496250137936619 * fTemp12); - double fTemp78 = (2.5409124954020982e-18 * fTemp15); - double fTemp79 = (fRec1[0] * (fTemp71 + (fTemp72 + (fTemp73 + (fTemp74 + ((fTemp76 + fTemp77) + fTemp78)))))); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + output17[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (fConst11 * ((1.518565389250751e-17 * fTemp12) + (0.068390105211674143 * fTemp41))); + double fTemp54 = ((0.02961378424040018 * fTemp10) + (0.029613784240400176 * fTemp17)); + double fTemp55 = (fTemp0 + fTemp3); + double fTemp56 = (7.9795740640090912e-18 * fTemp6); + double fTemp57 = (fRec1[0] * (fTemp53 + ((fConst6 * (((fConst8 * fTemp54) + (fConst32 * fTemp33)) + (fConst33 * fTemp24))) + ((0.03214285714285714 * fTemp55) + fTemp56)))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); fVbargraph27 = FAUSTFLOAT(fRec50[0]); - output18[i] = FAUSTFLOAT(fTemp79); - double fTemp80 = (0.041496250137936619 * fTemp41); - double fTemp81 = (0.032142857142857133 * fTemp23); - double fTemp82 = (0.032142857142857126 * fTemp6); - double fTemp83 = (0.041496250137936612 * fTemp12); - double fTemp84 = (7.6227374862062938e-18 * fTemp15); - double fTemp85 = (fRec1[0] * ((fTemp71 + (fTemp80 + (fTemp75 + fTemp81))) - (fTemp73 + ((fTemp82 + fTemp83) + fTemp84)))); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + output18[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (fConst35 * fTemp10); + double fTemp59 = (fConst36 * fTemp41); + double fTemp60 = (fConst38 * fTemp12); + double fTemp61 = (fRec1[0] * ((fTemp56 + (fConst6 * ((fConst34 * fTemp17) + (fConst33 * fTemp33)))) + (0.03214285714285714 * ((((fTemp55 + fTemp58) + fTemp59) + (fConst37 * fTemp24)) + fTemp60)))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); fVbargraph28 = FAUSTFLOAT(fRec51[0]); - output19[i] = FAUSTFLOAT(fTemp85); - double fTemp86 = (1.2704562477010493e-17 * fTemp15); - double fTemp87 = (fRec1[0] * ((fTemp73 + (fTemp75 + fTemp86)) - ((0.03214285714285714 * (fTemp6 - fTemp70)) + (fTemp72 + (fTemp74 + fTemp77))))); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + output19[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (fConst11 * ((3.037130778501502e-17 * fTemp12) + (0.068390105211674157 * fTemp41))); + double fTemp63 = (fTemp0 + (fConst35 * fTemp17)); + double fTemp64 = (fConst39 * fTemp10); + double fTemp65 = (fRec1[0] * (fTemp62 + (fTemp56 + (0.03214285714285714 * ((((fTemp3 + fTemp63) + fTemp64) + (fConst37 * fTemp33)) + (fConst40 * fTemp24)))))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); fVbargraph29 = FAUSTFLOAT(fRec52[0]); - output20[i] = FAUSTFLOAT(fTemp87); - double fTemp88 = (fTemp0 - fTemp23); - double fTemp89 = (fTemp75 + fTemp82); - double fTemp90 = (0.041496250137936605 * fTemp12); - double fTemp91 = (1.7786387467814686e-17 * fTemp15); - double fTemp92 = (fRec1[0] * (((0.03214285714285714 * (fTemp3 + fTemp88)) + (fTemp89 + fTemp90)) - (fTemp80 + (fTemp73 + fTemp91)))); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + output20[i] = FAUSTFLOAT(fTemp65); + double fTemp66 = (fTemp0 + (fConst39 * fTemp17)); + double fTemp67 = (fConst41 * fTemp12); + double fTemp68 = (fRec1[0] * ((0.03214285714285714 * (((fTemp59 + (fTemp3 + fTemp66)) + (fConst40 * fTemp33)) + fTemp67)) + (fTemp56 + (fConst6 * ((fConst42 * fTemp10) + (fConst43 * fTemp24)))))); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); fVbargraph30 = FAUSTFLOAT(fRec53[0]); - output21[i] = FAUSTFLOAT(fTemp92); - double fTemp93 = (fTemp0 - fTemp3); - double fTemp94 = (0.03214285714285714 * fTemp93); - double fTemp95 = (fRec1[0] * ((fTemp94 + (fTemp73 + (fTemp74 + (fTemp76 + fTemp78)))) - (fTemp72 + fTemp77))); - fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + output21[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = (fTemp0 - fTemp3); + double fTemp70 = (fRec1[0] * ((fConst45 * fTemp24) + ((0.03214285714285714 * (fTemp69 + (fConst44 * fTemp33))) + (fTemp53 + ((fConst9 * fTemp54) + fTemp56))))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); fVbargraph31 = FAUSTFLOAT(fRec54[0]); - output22[i] = FAUSTFLOAT(fTemp95); - double fTemp96 = (fRec1[0] * ((fTemp94 + (fTemp81 + (fTemp75 + fTemp83))) - (fTemp80 + (fTemp73 + (fTemp82 + fTemp84))))); - fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + output22[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = (fRec1[0] * (((fConst45 * fTemp33) + (fTemp56 + (fConst46 * fTemp17))) + (0.03214285714285714 * (fTemp60 + ((fTemp59 + (fTemp58 + fTemp69)) + (fConst47 * fTemp24)))))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); fVbargraph32 = FAUSTFLOAT(fRec55[0]); - output23[i] = FAUSTFLOAT(fTemp96); - double fTemp97 = (fRec1[0] * ((fTemp72 + (fTemp73 + (fTemp86 + (fTemp75 + fTemp77)))) - (fTemp74 + (0.03214285714285714 * (fTemp6 - fTemp93))))); - fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + output23[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = (fRec1[0] * ((0.03214285714285714 * (((fTemp64 - (fTemp3 - fTemp63)) + (fConst47 * fTemp33)) + (fConst48 * fTemp24))) + (fTemp56 + fTemp62))); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); fVbargraph33 = FAUSTFLOAT(fRec56[0]); - output24[i] = FAUSTFLOAT(fTemp97); - double fTemp98 = (fRec1[0] * ((fTemp80 + fTemp89) - ((0.03214285714285714 * (fTemp3 - fTemp88)) + (fTemp73 + (fTemp90 + fTemp91))))); - fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + output24[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = (fRec1[0] * (((fTemp56 + (fConst49 * fTemp10)) + (fConst50 * fTemp24)) + (0.03214285714285714 * (fTemp67 + ((fTemp59 - (fTemp3 - fTemp66)) + (fConst48 * fTemp33)))))); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); fVbargraph34 = FAUSTFLOAT(fRec57[0]); - output25[i] = FAUSTFLOAT(fTemp98); + output25[i] = FAUSTFLOAT(fTemp73); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; @@ -1689,42 +1771,42 @@ class mydsp : public dsp { fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec12[1] = fRec12[0]; + fRec0[1] = fRec0[0]; + fRec14[1] = fRec14[0]; fRec13[1] = fRec13[0]; - fRec11[1] = fRec11[0]; - fRec10[1] = fRec10[0]; - fRec16[1] = fRec16[0]; + fRec12[1] = fRec12[0]; fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; fRec15[1] = fRec15[0]; - fRec14[1] = fRec14[0]; - fRec20[1] = fRec20[0]; + fRec11[1] = fRec11[0]; + fRec22[1] = fRec22[0]; fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; fRec19[1] = fRec19[0]; - fRec18[1] = fRec18[0]; - fRec0[1] = fRec0[0]; - fRec22[1] = fRec22[0]; - fRec26[1] = fRec26[0]; - fRec25[1] = fRec25[0]; + fRec23[1] = fRec23[0]; fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; fRec29[1] = fRec29[0]; fRec30[1] = fRec30[0]; fRec28[1] = fRec28[0]; fRec27[1] = fRec27[0]; - fRec23[1] = fRec23[0]; - fRec31[1] = fRec31[0]; - fRec32[1] = fRec32[0]; - fRec33[1] = fRec33[0]; + fRec26[1] = fRec26[0]; fRec34[1] = fRec34[0]; - fRec38[1] = fRec38[0]; - fRec39[1] = fRec39[0]; - fRec37[1] = fRec37[0]; - fRec36[1] = fRec36[0]; fRec35[1] = fRec35[0]; - fRec40[1] = fRec40[0]; + fRec33[1] = fRec33[0]; + fRec32[1] = fRec32[0]; + fRec31[1] = fRec31[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; fRec41[1] = fRec41[0]; fRec42[1] = fRec42[0]; + fRec40[1] = fRec40[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; fRec43[1] = fRec43[0]; fRec44[1] = fRec44[0]; fRec45[1] = fRec45[0]; @@ -1748,7 +1830,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1980,7 +2061,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2043,7 +2124,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2072,11 +2153,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecLebedev263.cpp b/source/HOAUGens/HOADecLebedev263.cpp index 25bd300a4a..eaad18ce5f 100644 --- a/source/HOAUGens/HOADecLebedev263.cpp +++ b/source/HOAUGens/HOADecLebedev263.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev263" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -614,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -636,144 +653,256 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fConst4; + double fConst5; double fRec9[2]; + double fRec10[2]; double fRec8[2]; double fRec7[2]; FAUSTFLOAT fVbargraph2; - double fConst4; - double fConst5; - double fRec12[2]; + double fConst6; + double fConst7; + double fConst8; + double fRec14[2]; + double fRec15[2]; double fRec13[2]; + double fConst9; + double fRec16[2]; + double fRec12[2]; double fRec11[2]; - double fRec10[2]; FAUSTFLOAT fVbargraph3; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; - double fRec14[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph4; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; double fRec20[2]; - double fRec21[2]; double fRec19[2]; double fRec18[2]; FAUSTFLOAT fVbargraph5; - double fConst6; - double fConst7; - double fConst8; - double fRec25[2]; - double fRec26[2]; - double fRec24[2]; - double fConst9; - double fRec27[2]; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; double fRec23[2]; + double fRec24[2]; double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fVbargraph6; - double fRec31[2]; - double fRec32[2]; - double fRec30[2]; - double fRec33[2]; - double fRec29[2]; + double fConst21; + double fConst22; + double fConst23; double fRec28[2]; + double fRec29[2]; + double fRec27[2]; + double fRec30[2]; + double fRec26[2]; + double fRec25[2]; FAUSTFLOAT fVbargraph7; - double fRec37[2]; - double fRec38[2]; - double fRec36[2]; - double fRec39[2]; - double fRec35[2]; + double fConst24; + double fConst25; double fRec34[2]; + double fRec35[2]; + double fRec33[2]; + double fRec36[2]; + double fRec32[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph8; - double fRec43[2]; - double fRec44[2]; - double fRec42[2]; - double fRec45[2]; - double fRec41[2]; - double fRec40[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph9; - double fRec0[2]; + double fRec40[2]; + double fRec39[2]; + double fRec38[2]; FAUSTFLOAT fVbargraph10; + double fConst26; + double fConst27; + double fRec44[2]; + double fRec45[2]; + double fRec43[2]; double fRec46[2]; + double fRec42[2]; + double fRec41[2]; FAUSTFLOAT fVbargraph11; double fRec50[2]; + double fRec51[2]; double fRec49[2]; + double fRec52[2]; double fRec48[2]; + double fRec47[2]; FAUSTFLOAT fVbargraph12; + double fRec37[2]; + FAUSTFLOAT fVbargraph13; + double fConst28; + double fConst29; double fRec53[2]; + FAUSTFLOAT fVbargraph14; double fRec54[2]; - double fRec52[2]; - double fRec51[2]; - FAUSTFLOAT fVbargraph13; - double fRec58[2]; + FAUSTFLOAT fVbargraph15; + double fRec55[2]; + FAUSTFLOAT fVbargraph16; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fRec60[2]; + double fRec61[2]; double fRec59[2]; + double fRec62[2]; + double fRec58[2]; double fRec57[2]; - double fRec60[2]; - double fRec56[2]; - double fRec55[2]; - FAUSTFLOAT fVbargraph14; - double fRec64[2]; + FAUSTFLOAT fVbargraph17; + double fConst34; + double fConst35; + double fConst36; double fRec65[2]; - double fRec63[2]; double fRec66[2]; - double fRec62[2]; - double fRec61[2]; - FAUSTFLOAT fVbargraph15; - double fRec47[2]; - FAUSTFLOAT fVbargraph16; - double fRec67[2]; - FAUSTFLOAT fVbargraph17; - double fRec68[2]; + double fRec64[2]; + double fRec63[2]; FAUSTFLOAT fVbargraph18; - double fRec69[2]; + double fConst37; + double fConst38; + double fRec56[2]; FAUSTFLOAT fVbargraph19; + double fConst39; + double fConst40; + double fConst41; + double fConst42; double fRec70[2]; + double fRec71[2]; + double fRec69[2]; + double fRec68[2]; FAUSTFLOAT fVbargraph20; - double fRec74[2]; - double fRec75[2]; - double fRec73[2]; - double fRec72[2]; + double fRec67[2]; FAUSTFLOAT fVbargraph21; - double fRec79[2]; - double fRec80[2]; - double fRec78[2]; - double fRec81[2]; - double fRec77[2]; - double fRec76[2]; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fRec72[2]; FAUSTFLOAT fVbargraph22; - double fRec71[2]; + double fRec73[2]; FAUSTFLOAT fVbargraph23; - double fRec82[2]; + double fConst48; + double fRec77[2]; + double fRec78[2]; + double fRec76[2]; + double fRec75[2]; FAUSTFLOAT fVbargraph24; - double fRec83[2]; + double fConst49; + double fRec74[2]; FAUSTFLOAT fVbargraph25; - double fRec84[2]; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fRec79[2]; FAUSTFLOAT fVbargraph26; - double fRec85[2]; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fRec80[2]; FAUSTFLOAT fVbargraph27; - double fRec86[2]; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fRec81[2]; FAUSTFLOAT fVbargraph28; - double fRec87[2]; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fRec82[2]; FAUSTFLOAT fVbargraph29; - double fRec88[2]; + double fConst70; + double fConst71; + double fRec83[2]; FAUSTFLOAT fVbargraph30; - double fRec89[2]; + double fConst72; + double fConst73; + double fConst74; + double fRec84[2]; FAUSTFLOAT fVbargraph31; - double fRec90[2]; + double fRec85[2]; FAUSTFLOAT fVbargraph32; + double fConst75; + double fConst76; + double fRec90[2]; double fRec91[2]; - FAUSTFLOAT fVbargraph33; + double fRec89[2]; double fRec92[2]; + double fRec88[2]; + double fRec87[2]; + FAUSTFLOAT fVbargraph33; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fRec86[2]; FAUSTFLOAT fVbargraph34; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; double fRec93[2]; FAUSTFLOAT fVbargraph35; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; double fRec94[2]; FAUSTFLOAT fVbargraph36; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; double fRec95[2]; FAUSTFLOAT fVbargraph37; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; double fRec96[2]; FAUSTFLOAT fVbargraph38; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; double fRec97[2]; FAUSTFLOAT fVbargraph39; + double fConst116; + double fConst117; double fRec98[2]; FAUSTFLOAT fVbargraph40; + double fConst118; + double fConst119; + double fConst120; + double fConst121; double fRec99[2]; FAUSTFLOAT fVbargraph41; @@ -784,36 +913,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev263"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1023,7 +1152,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); @@ -1033,6 +1162,118 @@ class mydsp : public dsp { fConst7 = (625.22848971356643 / fConst0); fConst8 = (1250.4569794271329 / fConst0); fConst9 = (789.54302057287055 / fConst0); + fConst10 = double(tgamma(1.5)); + fConst11 = double(tgamma(1.0)); + fConst12 = double(tgamma(3.0)); + fConst13 = sqrt((3.0 * (fConst11 / fConst12))); + fConst14 = (fConst10 * fConst13); + fConst15 = (0.07598900579074909 * fConst14); + fConst16 = double(tgamma(2.5)); + fConst17 = double(tgamma(5.0)); + fConst18 = sqrt((5.0 * (fConst11 / fConst17))); + fConst19 = (fConst16 * fConst18); + fConst20 = (0.15197801158149818 * fConst19); + fConst21 = sqrt((7.0 * (fConst12 / fConst17))); + fConst22 = (fConst21 * (0.0 - (3.3851375012865379 * fConst10))); + fConst23 = (0.033671751485073696 * fConst22); + fConst24 = (double(tgamma(3.5)) * sqrt((7.0 * (fConst11 / double(tgamma(7.0)))))); + fConst25 = (0.30395602316299636 * fConst24); + fConst26 = (0.0 - (3.1915382432114616 * fConst19)); + fConst27 = (0.0 - (6.3830764864229232 * fConst24)); + fConst28 = (0.0 - (1.5957691216057308 * fConst14)); + fConst29 = (0.0 - (0.70710678118654757 * fConst22)); + fConst30 = (0.06079120463259928 * fConst18); + fConst31 = double(tgamma(2.0)); + fConst32 = sqrt((7.0 * (fConst31 / double(tgamma(6.0))))); + fConst33 = (0.2149293651610501 * fConst32); + fConst34 = (0.042985873032210013 * fConst13); + fConst35 = sqrt((5.0 * (fConst31 / double(tgamma(4.0))))); + fConst36 = (0.091186806948898899 * fConst35); + fConst37 = (0.09671821432247249 * fConst21); + fConst38 = (0.08597174606442004 * fConst24); + fConst39 = (0.0 - (1.595769121605731 * fConst19)); + fConst40 = (0.0 - (2.256758334191026 * fConst24)); + fConst41 = (fConst16 * fConst32); + fConst42 = (0.0 - (5.6418958354775643 * fConst41)); + fConst43 = (0.0 - (1.1283791670955128 * fConst14)); + fConst44 = (fConst10 * fConst35); + fConst45 = (0.0 - (2.3936536824085959 * fConst44)); + fConst46 = (fConst10 * fConst21); + fConst47 = (0.0 - (2.5388531259649025 * fConst46)); + fConst48 = (0.0 - (4.5135166683820485 * fConst24)); + fConst49 = (0.17194349212884008 * fConst24); + fConst50 = (0.042985873032210013 * fConst14); + fConst51 = (0.019047619047619053 * fConst22); + fConst52 = (0.0 - (1.1283791670955126 * fConst14)); + fConst53 = (0.0 - (7.0866384831701748e-16 * fConst19)); + fConst54 = (0.0 - (0.5 * fConst22)); + fConst55 = (0.0 - (1.128379167095513 * fConst14)); + fConst56 = (0.0 - (4.5135166683820547 * fConst24)); + fConst57 = (0.0 - (0.50000000000000011 * fConst22)); + fConst58 = (0.17194349212883991 * fConst24); + fConst59 = (0.042985873032209999 * fConst14); + fConst60 = (0.019047619047619046 * fConst22); + fConst61 = (0.0 - (1.417327696634035e-15 * fConst19)); + fConst62 = (0.0 - (4.5135166683820476 * fConst24)); + fConst63 = (0.0 - (4.5135166683820538 * fConst24)); + fConst64 = (0.0 - (1.6925687506432687 * fConst10)); + fConst65 = (fConst35 * fConst64); + fConst66 = (fConst32 * (0.0 - (3.9894228040143274 * fConst16))); + fConst67 = (fConst21 * (0.0 - ((3.5355339059327373 * fConst64) + (2.3936536824085963 * fConst10)))); + fConst68 = (0.026937401188058957 * fConst67); + fConst69 = (0.06079120463259928 * fConst19); + fConst70 = (0.0 - (1.4142135623730951 * fConst66)); + fConst71 = (0.053874802376117914 * fConst65); + fConst72 = (0.053874802376117914 * fConst66); + fConst73 = (0.0 - (1.4142135623730951 * fConst65)); + fConst74 = (0.0 - (0.70710678118654757 * fConst67)); + fConst75 = (0.0 - (2.4568472851294949 * fConst24)); + fConst76 = (0.19742522826933454 * fConst32); + fConst77 = (4.3837206813298509e-17 * fConst32); + fConst78 = (0.078970091307733831 * fConst24); + fConst79 = (0.051292578908755625 * fConst35); + fConst80 = (0.051292578908755639 * fConst35); + fConst81 = (0.02961378424040019 * fConst21); + fConst82 = (0.029613784240400197 * fConst21); + fConst83 = (0.0 - (0.92131773192356115 * fConst14)); + fConst84 = (0.0 - (2.1276921621409737 * fConst19)); + fConst85 = (0.0 - (1.5957691216057308 * fConst44)); + fConst86 = (0.0 - (4.7244256554467816e-16 * fConst19)); + fConst87 = (0.0 - (6.1421182128237417 * fConst41)); + fConst88 = (0.0 - (0.92131773192356159 * fConst46)); + fConst89 = (0.0 - (1.3638242119692871e-15 * fConst41)); + fConst90 = (0.02961378424040018 * fConst13); + fConst91 = (0.19742522826933459 * fConst32); + fConst92 = (8.7674413626597019e-17 * fConst32); + fConst93 = (0.0 - (0.92131773192356148 * fConst14)); + fConst94 = (0.0 - (1.5957691216057313 * fConst44)); + fConst95 = (0.0 - (2.456847285129498 * fConst24)); + fConst96 = (0.0 - (0.92131773192356192 * fConst46)); + fConst97 = (0.078970091307733734 * fConst24); + fConst98 = (0.029613784240400173 * fConst13); + fConst99 = (0.051292578908755618 * fConst35); + fConst100 = (0.029613784240400187 * fConst21); + fConst101 = (0.0 - (9.4488513108935631e-16 * fConst19)); + fConst102 = (0.0 - (2.456847285129494 * fConst24)); + fConst103 = (0.0 - (2.7276484239385742e-15 * fConst41)); + fConst104 = (0.0 - (2.4568472851294976 * fConst24)); + fConst105 = (0.0 - (1.5957691216057308 * fConst10)); + fConst106 = (fConst105 * fConst35); + fConst107 = (fConst32 * (0.0 - (4.3431334391370653 * fConst16))); + fConst108 = (fConst21 * (0.0 - ((2.8867513459481291 * fConst105) + (2.7639531957706835 * fConst10)))); + fConst109 = (0.032142857142857147 * fConst106); + fConst110 = (0.0 - fConst106); + fConst111 = (0.0 - (1.4142135623730951 * fConst107)); + fConst112 = (0.0 - (0.5 * fConst108)); + fConst113 = (0.0 - (3.1401849173675503e-16 * fConst107)); + fConst114 = (0.016071428571428573 * fConst108); + fConst115 = (0.02961378424040018 * fConst14); + fConst116 = (0.0 - (1.0000000000000002 * fConst106)); + fConst117 = (0.0 - (0.50000000000000011 * fConst108)); + fConst118 = (0.032142857142857133 * fConst106); + fConst119 = (0.029613784240400173 * fConst14); + fConst120 = (0.016071428571428566 * fConst108); + fConst121 = (0.0 - (6.2803698347351007e-16 * fConst107)); } @@ -1074,27 +1315,27 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec8[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec7[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec13[l10] = 0.0; + fRec14[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec11[l11] = 0.0; + fRec15[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec10[l12] = 0.0; + fRec13[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -1102,15 +1343,15 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec17[l14] = 0.0; + fRec12[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec11[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec14[l16] = 0.0; + fRec0[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { @@ -1118,91 +1359,91 @@ class mydsp : public dsp { } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec21[l18] = 0.0; + fRec19[l18] = 0.0; } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec19[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec18[l20] = 0.0; + fRec23[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec25[l21] = 0.0; + fRec24[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec26[l22] = 0.0; + fRec22[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec21[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec27[l24] = 0.0; + fRec28[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec23[l25] = 0.0; + fRec29[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec22[l26] = 0.0; + fRec27[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec31[l27] = 0.0; + fRec30[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec32[l28] = 0.0; + fRec26[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec30[l29] = 0.0; + fRec25[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec33[l30] = 0.0; + fRec34[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec29[l31] = 0.0; + fRec35[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec28[l32] = 0.0; + fRec33[l32] = 0.0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec37[l33] = 0.0; + fRec36[l33] = 0.0; } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec38[l34] = 0.0; + fRec32[l34] = 0.0; } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec36[l35] = 0.0; + fRec31[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec39[l36] = 0.0; + fRec17[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec35[l37] = 0.0; + fRec40[l37] = 0.0; } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec34[l38] = 0.0; + fRec39[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec43[l39] = 0.0; + fRec38[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { @@ -1210,31 +1451,31 @@ class mydsp : public dsp { } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec42[l41] = 0.0; + fRec45[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec45[l42] = 0.0; + fRec43[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec41[l43] = 0.0; + fRec46[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec40[l44] = 0.0; + fRec42[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fRec0[l45] = 0.0; + fRec41[l45] = 0.0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec46[l46] = 0.0; + fRec50[l46] = 0.0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec50[l47] = 0.0; + fRec51[l47] = 0.0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { @@ -1242,59 +1483,59 @@ class mydsp : public dsp { } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec48[l49] = 0.0; + fRec52[l49] = 0.0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - fRec53[l50] = 0.0; + fRec48[l50] = 0.0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { - fRec54[l51] = 0.0; + fRec47[l51] = 0.0; } for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { - fRec52[l52] = 0.0; + fRec37[l52] = 0.0; } for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { - fRec51[l53] = 0.0; + fRec53[l53] = 0.0; } for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { - fRec58[l54] = 0.0; + fRec54[l54] = 0.0; } for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { - fRec59[l55] = 0.0; + fRec55[l55] = 0.0; } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec57[l56] = 0.0; + fRec60[l56] = 0.0; } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec60[l57] = 0.0; + fRec61[l57] = 0.0; } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec56[l58] = 0.0; + fRec59[l58] = 0.0; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { - fRec55[l59] = 0.0; + fRec62[l59] = 0.0; } for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { - fRec64[l60] = 0.0; + fRec58[l60] = 0.0; } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - fRec65[l61] = 0.0; + fRec57[l61] = 0.0; } for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { - fRec63[l62] = 0.0; + fRec65[l62] = 0.0; } for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { @@ -1302,23 +1543,23 @@ class mydsp : public dsp { } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - fRec62[l64] = 0.0; + fRec64[l64] = 0.0; } for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { - fRec61[l65] = 0.0; + fRec63[l65] = 0.0; } for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fRec47[l66] = 0.0; + fRec56[l66] = 0.0; } for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - fRec67[l67] = 0.0; + fRec70[l67] = 0.0; } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { - fRec68[l68] = 0.0; + fRec71[l68] = 0.0; } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { @@ -1326,15 +1567,15 @@ class mydsp : public dsp { } for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { - fRec70[l70] = 0.0; + fRec68[l70] = 0.0; } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec74[l71] = 0.0; + fRec67[l71] = 0.0; } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { - fRec75[l72] = 0.0; + fRec72[l72] = 0.0; } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { @@ -1342,35 +1583,35 @@ class mydsp : public dsp { } for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { - fRec72[l74] = 0.0; + fRec77[l74] = 0.0; } for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { - fRec79[l75] = 0.0; + fRec78[l75] = 0.0; } for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { - fRec80[l76] = 0.0; + fRec76[l76] = 0.0; } for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { - fRec78[l77] = 0.0; + fRec75[l77] = 0.0; } for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { - fRec81[l78] = 0.0; + fRec74[l78] = 0.0; } for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { - fRec77[l79] = 0.0; + fRec79[l79] = 0.0; } for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { - fRec76[l80] = 0.0; + fRec80[l80] = 0.0; } for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { - fRec71[l81] = 0.0; + fRec81[l81] = 0.0; } for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { @@ -1390,31 +1631,31 @@ class mydsp : public dsp { } for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { - fRec86[l86] = 0.0; + fRec90[l86] = 0.0; } for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { - fRec87[l87] = 0.0; + fRec91[l87] = 0.0; } for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { - fRec88[l88] = 0.0; + fRec89[l88] = 0.0; } for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { - fRec89[l89] = 0.0; + fRec92[l89] = 0.0; } for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { - fRec90[l90] = 0.0; + fRec88[l90] = 0.0; } for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { - fRec91[l91] = 0.0; + fRec87[l91] = 0.0; } for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { - fRec92[l92] = 0.0; + fRec86[l92] = 0.0; } for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { @@ -1461,9 +1702,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1473,73 +1714,73 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2273800", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a7fb90", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2302590", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2afb2c0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x227ed00", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a8aec0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22886a0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2abdb10", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x230dac0", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b89c50", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2359380", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b66e60", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2296f40", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a99760", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22a25d0", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b4f970", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22adc60", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2acb760", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x231c0f0", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b0ac20", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2367ad0", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bdea90", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x232a830", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b196f0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22c0820", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2aac240", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22cf3f0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2adbf40", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22ddfc0", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b41db0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22ecc70", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2aec6e0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1560,136 +1801,136 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-outs/2"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph10, "osc", "/output1"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22f1eb0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ab12c0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph11, "osc", "/output2"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22f90a0", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "osc", "/output2 -70 6"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2af1dd0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph16, "osc", "/output3"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2330970", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "osc", "/output3 -70 6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b1e740", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph17, "osc", "/output4"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23375d0", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "osc", "/output4 -70 6"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b256c0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph18, "osc", "/output5"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x233e310", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "osc", "/output5 -70 6"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b2b700", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph19, "osc", "/output6"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2344250", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output6 -70 6"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b30ce0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph20, "osc", "/output7"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x234de20", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output7 -70 6"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b58030", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph23, "osc", "/output8"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2370c40", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "osc", "/output8 -70 6"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b6c490", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph24, "osc", "/output9"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2379c30", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "osc", "/output9 -70 6"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b754e0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph25, "osc", "/output10"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2382910", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output10 -70 6"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b7c360", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph26, "osc", "/output11"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x238b140", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output11 -70 6"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b90a20", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph27, "osc", "/output12"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23926d0", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output12 -70 6"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b9ac00", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph28, "osc", "/output13"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2399590", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "osc", "/output13 -70 6"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ba4960", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 14-26"); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph29, "osc", "/output14"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23a0ac0", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output14 -70 6"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bae6f0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph30, "osc", "/output15"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23a6680", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output15 -70 6"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bb8840", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph31, "osc", "/output16"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23acf60", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "osc", "/output16 -70 6"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bbfb90", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph32, "osc", "/output17"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23b3cf0", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph31, "osc", "/output17 -70 6"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bc72b0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph33, "osc", "/output18"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23ba770", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph32, "osc", "/output18 -70 6"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bcd5b0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph34, "osc", "/output19"); + ui_interface->declare(&fVbargraph34, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23c6d00", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2be9be0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph35, "osc", "/output20"); + ui_interface->declare(&fVbargraph35, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23d07e0", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bf7200", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph36, "osc", "/output21"); + ui_interface->declare(&fVbargraph36, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23d93a0", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c042e0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph37, "osc", "/output22"); + ui_interface->declare(&fVbargraph37, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23e2690", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c10950", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph38, "osc", "/output23"); + ui_interface->declare(&fVbargraph38, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23e9b70", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c1c430", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph39, "osc", "/output24"); + ui_interface->declare(&fVbargraph39, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23f0b30", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c26770", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph40, "osc", "/output25"); + ui_interface->declare(&fVbargraph40, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23f7db0", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c2f8e0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph41, "osc", "/output26"); + ui_interface->declare(&fVbargraph41, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23fef30", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c390d0", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1772,320 +2013,269 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.082478609884232251 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); + double fTemp5 = (fRec3[0] * double(input6[i])); fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow8 * ((fSlow3 * fTemp5) - (fSlow9 * fRec9[0]))); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec8[0] = (fSlow11 * ((fSlow3 * fTemp5) - ((fSlow13 * fRec9[0]) + (fSlow12 * fRec10[0])))); double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (5.0503582796424135e-18 * fTemp6); - double fTemp8 = (fRec3[0] * double(input6[i])); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec13[0] = (fRec13[1] + fRec12[1]); - fRec11[0] = (fSlow11 * ((fSlow3 * fTemp8) - ((fSlow13 * fRec12[0]) + (fSlow12 * fRec13[0])))); - double fTemp9 = (fRec11[0] + (fSlow4 * fTemp8)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = (0.10647942749999 * fTemp9); - double fTemp11 = (fRec3[0] * double(input7[i])); - fRec16[0] = (fRec16[1] + fRec15[1]); - fRec17[0] = (fRec17[1] + fRec16[1]); - fRec15[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec16[0]) + (fSlow12 * fRec17[0])))); - double fTemp12 = (fRec15[0] + (fSlow4 * fTemp11)); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph4 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = (1.1292944424009331e-17 * fTemp12); - double fTemp14 = (fRec3[0] * double(input8[i])); + double fTemp7 = (0.10647942749999 * fTemp6); + double fTemp8 = (fRec3[0] * double(input12[i])); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec15[0] = (fRec15[1] + fRec14[1]); + fRec13[0] = (fSlow15 * ((fSlow3 * fTemp8) - ((fSlow17 * fRec14[0]) + (fSlow16 * fRec15[0])))); + fRec16[0] = (fRec16[1] + fRec12[1]); + fRec12[0] = (fSlow14 * (fRec13[0] - (fSlow18 * fRec16[0]))); + double fTemp9 = (fRec12[0] + (fSlow4 * fTemp8)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph3 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.12598815766974242 * fTemp9); + double fTemp11 = (fRec1[0] * (((fTemp1 + fTemp4) + fTemp7) + fTemp10)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph4 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (fRec3[0] * double(input3[i])); fRec20[0] = (fRec20[1] + fRec19[1]); - fRec21[0] = (fRec21[1] + fRec20[1]); - fRec19[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec20[0]) + (fSlow12 * fRec21[0])))); - double fTemp15 = (fRec19[0] + (fSlow4 * fTemp14)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fRec19[0] = (fSlow8 * ((fSlow3 * fTemp12) - (fSlow9 * fRec20[0]))); + double fTemp13 = (fRec19[0] + (fSlow4 * fTemp12)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph5 = FAUSTFLOAT(fRec18[0]); - double fTemp16 = (3.4574670604529943e-34 * fTemp15); - double fTemp17 = (fRec3[0] * double(input12[i])); - fRec25[0] = (fRec25[1] + fRec24[1]); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec24[0] = (fSlow15 * ((fSlow3 * fTemp17) - ((fSlow17 * fRec25[0]) + (fSlow16 * fRec26[0])))); - fRec27[0] = (fRec27[1] + fRec23[1]); - fRec23[0] = (fSlow14 * (fRec24[0] - (fSlow18 * fRec27[0]))); - double fTemp18 = (fRec23[0] + (fSlow4 * fTemp17)); - fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); - fVbargraph6 = FAUSTFLOAT(fRec22[0]); - double fTemp19 = (0.12598815766974242 * fTemp18); - double fTemp20 = (fRec3[0] * double(input13[i])); - fRec31[0] = (fRec31[1] + fRec30[1]); - fRec32[0] = (fRec32[1] + fRec31[1]); - fRec30[0] = (fSlow15 * ((fSlow3 * fTemp20) - ((fSlow17 * fRec31[0]) + (fSlow16 * fRec32[0])))); - fRec33[0] = (fRec33[1] + fRec29[1]); - fRec29[0] = (fSlow14 * (fRec30[0] - (fSlow18 * fRec33[0]))); - double fTemp21 = (fRec29[0] + (fSlow4 * fTemp20)); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph7 = FAUSTFLOAT(fRec28[0]); - double fTemp22 = (1.8896710362878975e-17 * fTemp21); - double fTemp23 = (fRec3[0] * double(input14[i])); - fRec37[0] = (fRec37[1] + fRec36[1]); - fRec38[0] = (fRec38[1] + fRec37[1]); - fRec36[0] = (fSlow15 * ((fSlow3 * fTemp23) - ((fSlow17 * fRec37[0]) + (fSlow16 * fRec38[0])))); - fRec39[0] = (fRec39[1] + fRec35[1]); - fRec35[0] = (fSlow14 * (fRec36[0] - (fSlow18 * fRec39[0]))); - double fTemp24 = (fRec35[0] + (fSlow4 * fTemp23)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph8 = FAUSTFLOAT(fRec34[0]); - double fTemp25 = (9.1475980081561452e-34 * fTemp24); - double fTemp26 = (fRec3[0] * double(input15[i])); - fRec43[0] = (fRec43[1] + fRec42[1]); + double fTemp14 = (fRec3[0] * double(input8[i])); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec24[0] = (fRec24[1] + fRec23[1]); + fRec22[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec23[0]) + (fSlow12 * fRec24[0])))); + double fTemp15 = (fRec22[0] + (fSlow4 * fTemp14)); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph6 = FAUSTFLOAT(fRec21[0]); + double fTemp16 = (fConst20 * fTemp15); + double fTemp17 = (fRec3[0] * double(input13[i])); + fRec28[0] = (fRec28[1] + fRec27[1]); + fRec29[0] = (fRec29[1] + fRec28[1]); + fRec27[0] = (fSlow15 * ((fSlow3 * fTemp17) - ((fSlow17 * fRec28[0]) + (fSlow16 * fRec29[0])))); + fRec30[0] = (fRec30[1] + fRec26[1]); + fRec26[0] = (fSlow14 * (fRec27[0] - (fSlow18 * fRec30[0]))); + double fTemp18 = (fRec26[0] + (fSlow4 * fTemp17)); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph7 = FAUSTFLOAT(fRec25[0]); + double fTemp19 = (fRec3[0] * double(input15[i])); + fRec34[0] = (fRec34[1] + fRec33[1]); + fRec35[0] = (fRec35[1] + fRec34[1]); + fRec33[0] = (fSlow15 * ((fSlow3 * fTemp19) - ((fSlow17 * fRec34[0]) + (fSlow16 * fRec35[0])))); + fRec36[0] = (fRec36[1] + fRec32[1]); + fRec32[0] = (fSlow14 * (fRec33[0] - (fSlow18 * fRec36[0]))); + double fTemp20 = (fRec32[0] + (fSlow4 * fTemp19)); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph8 = FAUSTFLOAT(fRec31[0]); + double fTemp21 = (0.053239713749994998 * fTemp6); + double fTemp22 = (fRec1[0] * (((((fTemp1 + (fConst15 * fTemp13)) + fTemp16) + (fConst23 * fTemp18)) + (fConst25 * fTemp20)) - fTemp21)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph9 = FAUSTFLOAT(fRec17[0]); + output1[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (fRec3[0] * double(input1[i])); + fRec40[0] = (fRec40[1] + fRec39[1]); + fRec39[0] = (fSlow8 * ((fSlow3 * fTemp23) - (fSlow9 * fRec40[0]))); + double fTemp24 = (fRec39[0] + (fSlow4 * fTemp23)); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph10 = FAUSTFLOAT(fRec38[0]); + double fTemp25 = (fConst26 * fTemp15); + double fTemp26 = (fRec3[0] * double(input9[i])); fRec44[0] = (fRec44[1] + fRec43[1]); - fRec42[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec43[0]) + (fSlow16 * fRec44[0])))); - fRec45[0] = (fRec45[1] + fRec41[1]); - fRec41[0] = (fSlow14 * (fRec42[0] - (fSlow18 * fRec45[0]))); - double fTemp27 = (fRec41[0] + (fSlow4 * fTemp26)); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph9 = FAUSTFLOAT(fRec40[0]); - double fTemp28 = (2.2867163770701174e-50 * fTemp27); - double fTemp29 = (fRec1[0] * (((((((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16) + fTemp19) + fTemp22) + fTemp25) + fTemp28)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph10 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.082478609884232251 * fTemp6); - double fTemp31 = (0.092213889195414706 * fTemp15); - double fTemp32 = (0.099602384111199482 * fTemp27); - double fTemp33 = (0.053239713749994998 * fTemp9); - double fTemp34 = (0.07715167498104597 * fTemp21); - double fTemp35 = (fRec1[0] * ((((fTemp1 + fTemp30) + fTemp31) + fTemp32) - (fTemp33 + fTemp34))); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); - fVbargraph11 = FAUSTFLOAT(fRec46[0]); - output1[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (fRec3[0] * double(input1[i])); + fRec45[0] = (fRec45[1] + fRec44[1]); + fRec43[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec44[0]) + (fSlow16 * fRec45[0])))); + fRec46[0] = (fRec46[1] + fRec42[1]); + fRec42[0] = (fSlow14 * (fRec43[0] - (fSlow18 * fRec46[0]))); + double fTemp27 = (fRec42[0] + (fSlow4 * fTemp26)); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph11 = FAUSTFLOAT(fRec41[0]); + double fTemp28 = (fRec3[0] * double(input11[i])); fRec50[0] = (fRec50[1] + fRec49[1]); - fRec49[0] = (fSlow8 * ((fSlow3 * fTemp36) - (fSlow9 * fRec50[0]))); - double fTemp37 = (fRec49[0] + (fSlow4 * fTemp36)); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); - fVbargraph12 = FAUSTFLOAT(fRec48[0]); - double fTemp38 = (0.082478609884232251 * fTemp37); - double fTemp39 = (fTemp1 + fTemp7); - double fTemp40 = (fRec3[0] * double(input4[i])); - fRec53[0] = (fRec53[1] + fRec52[1]); - fRec54[0] = (fRec54[1] + fRec53[1]); - fRec52[0] = (fSlow11 * ((fSlow3 * fTemp40) - ((fSlow13 * fRec53[0]) + (fSlow12 * fRec54[0])))); - double fTemp41 = (fRec52[0] + (fSlow4 * fTemp40)); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph13 = FAUSTFLOAT(fRec51[0]); - double fTemp42 = (fRec3[0] * double(input9[i])); - fRec58[0] = (fRec58[1] + fRec57[1]); - fRec59[0] = (fRec59[1] + fRec58[1]); - fRec57[0] = (fSlow15 * ((fSlow3 * fTemp42) - ((fSlow17 * fRec58[0]) + (fSlow16 * fRec59[0])))); - fRec60[0] = (fRec60[1] + fRec56[1]); - fRec56[0] = (fSlow14 * (fRec57[0] - (fSlow18 * fRec60[0]))); - double fTemp43 = (fRec56[0] + (fSlow4 * fTemp42)); - fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph14 = FAUSTFLOAT(fRec55[0]); - double fTemp44 = (0.099602384111199482 * fTemp43); - double fTemp45 = (fRec3[0] * double(input11[i])); - fRec64[0] = (fRec64[1] + fRec63[1]); + fRec51[0] = (fRec51[1] + fRec50[1]); + fRec49[0] = (fSlow15 * ((fSlow3 * fTemp28) - ((fSlow17 * fRec50[0]) + (fSlow16 * fRec51[0])))); + fRec52[0] = (fRec52[1] + fRec48[1]); + fRec48[0] = (fSlow14 * (fRec49[0] - (fSlow18 * fRec52[0]))); + double fTemp29 = (fRec48[0] + (fSlow4 * fTemp28)); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph12 = FAUSTFLOAT(fRec47[0]); + double fTemp30 = (fRec1[0] * ((((fConst15 * fTemp24) + (0.047619047619047623 * ((fTemp0 + fTemp25) + (fConst27 * fTemp27)))) + (fConst23 * fTemp29)) - fTemp21)); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph13 = FAUSTFLOAT(fRec37[0]); + output2[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fRec1[0] * ((fTemp16 + (0.047619047619047623 * (((fTemp0 + (fConst28 * fTemp13)) + (fConst29 * fTemp18)) + (fConst27 * fTemp20)))) - fTemp21)); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph14 = FAUSTFLOAT(fRec53[0]); + output3[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (fRec1[0] * (((fConst25 * fTemp27) + (0.047619047619047623 * ((fTemp25 + (fTemp0 + (fConst28 * fTemp24))) + (fConst29 * fTemp29)))) - fTemp21)); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph15 = FAUSTFLOAT(fRec54[0]); + output4[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (fRec1[0] * ((fTemp1 + fTemp7) - (fTemp4 + fTemp10))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph16 = FAUSTFLOAT(fRec55[0]); + output5[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (fRec3[0] * double(input14[i])); + fRec60[0] = (fRec60[1] + fRec59[1]); + fRec61[0] = (fRec61[1] + fRec60[1]); + fRec59[0] = (fSlow15 * ((fSlow3 * fTemp34) - ((fSlow17 * fRec60[0]) + (fSlow16 * fRec61[0])))); + fRec62[0] = (fRec62[1] + fRec58[1]); + fRec58[0] = (fSlow14 * (fRec59[0] - (fSlow18 * fRec62[0]))); + double fTemp35 = (fRec58[0] + (fSlow4 * fTemp34)); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph17 = FAUSTFLOAT(fRec57[0]); + double fTemp36 = (fConst16 * ((fConst30 * fTemp15) + (fConst33 * fTemp35))); + double fTemp37 = (fRec3[0] * double(input7[i])); fRec65[0] = (fRec65[1] + fRec64[1]); - fRec63[0] = (fSlow15 * ((fSlow3 * fTemp45) - ((fSlow17 * fRec64[0]) + (fSlow16 * fRec65[0])))); - fRec66[0] = (fRec66[1] + fRec62[1]); - fRec62[0] = (fSlow14 * (fRec63[0] - (fSlow18 * fRec66[0]))); - double fTemp46 = (fRec62[0] + (fSlow4 * fTemp45)); - fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); - fVbargraph15 = FAUSTFLOAT(fRec61[0]); - double fTemp47 = (0.07715167498104597 * fTemp46); - double fTemp48 = (fRec1[0] * (((fTemp38 + fTemp39) + (1.1292944424009331e-17 * fTemp41)) - (fTemp44 + (fTemp47 + (((fTemp33 + fTemp31) + (4.7241775907197437e-18 * fTemp21)) + (1.8296661133383845e-17 * fTemp27)))))); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); - fVbargraph16 = FAUSTFLOAT(fRec47[0]); - output2[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (fRec1[0] * (((3.659332226676769e-17 * fTemp43) + ((1.0100716559284827e-17 * fTemp37) + (fTemp34 + (fTemp1 + fTemp31)))) - ((2.2585888848018662e-17 * fTemp41) + ((9.4483551814394875e-18 * fTemp46) + (fTemp32 + (fTemp30 + fTemp33)))))); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); - fVbargraph17 = FAUSTFLOAT(fRec67[0]); - output3[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (fRec1[0] * ((fTemp44 + ((3.387883327202799e-17 * fTemp41) + (fTemp47 + ((fTemp1 + (1.4172532772159232e-17 * fTemp21)) + (5.488998340015154e-17 * fTemp27))))) - (fTemp38 + (fTemp31 + (fTemp33 + (1.5151074838927241e-17 * fTemp6)))))); + fRec66[0] = (fRec66[1] + fRec65[1]); + fRec64[0] = (fSlow11 * ((fSlow3 * fTemp37) - ((fSlow13 * fRec65[0]) + (fSlow12 * fRec66[0])))); + double fTemp38 = (fRec64[0] + (fSlow4 * fTemp37)); + fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph18 = FAUSTFLOAT(fRec63[0]); + double fTemp39 = (0.038095238095238099 * fTemp0); + double fTemp40 = (0.046656947481584346 * fTemp3); + double fTemp41 = (0.021295885499997991 * fTemp6); + double fTemp42 = (fConst38 * fTemp20); + double fTemp43 = (0.017817416127494972 * fTemp9); + double fTemp44 = (fRec1[0] * ((fTemp36 + ((fConst10 * (((fConst34 * fTemp13) + (fConst36 * fTemp38)) + (fConst37 * fTemp18))) + (((fTemp39 + fTemp40) + fTemp41) + fTemp42))) - fTemp43)); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph19 = FAUSTFLOAT(fRec56[0]); + output6[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (fConst39 * fTemp15); + double fTemp46 = ((fTemp0 + fTemp45) + (fConst40 * fTemp27)); + double fTemp47 = (fConst42 * fTemp35); + double fTemp48 = (fTemp40 + fTemp41); + double fTemp49 = (fRec3[0] * double(input5[i])); + fRec70[0] = (fRec70[1] + fRec69[1]); + fRec71[0] = (fRec71[1] + fRec70[1]); + fRec69[0] = (fSlow11 * ((fSlow3 * fTemp49) - ((fSlow13 * fRec70[0]) + (fSlow12 * fRec71[0])))); + double fTemp50 = (fRec69[0] + (fSlow4 * fTemp49)); fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); - fVbargraph18 = FAUSTFLOAT(fRec68[0]); - output4[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (fRec1[0] * ((fTemp28 + (fTemp22 + (fTemp16 + (fTemp10 + fTemp39)))) - (fTemp25 + (fTemp19 + (fTemp4 + fTemp13))))); - fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); - fVbargraph19 = FAUSTFLOAT(fRec69[0]); - output5[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (0.038095238095238099 * fTemp0); - double fTemp53 = (0.046656947481584346 * fTemp3); - double fTemp54 = (fTemp52 + fTemp53); - double fTemp55 = (0.046656947481584353 * fTemp6); - double fTemp56 = (0.021295885499997984 * fTemp9); - double fTemp57 = (0.073771111356331756 * fTemp12); - double fTemp58 = (0.036885555678165885 * fTemp15); - double fTemp59 = (0.065465367070797711 * fTemp21); - double fTemp60 = (0.069006555934235436 * fTemp24); - double fTemp61 = (0.028171808490950564 * fTemp27); - double fTemp62 = (0.017817416127494979 * fTemp18); - double fTemp63 = (fRec1[0] * ((((((((fTemp54 + fTemp55) + fTemp56) + fTemp57) + fTemp58) + fTemp59) + fTemp60) + fTemp61) - fTemp62)); - fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); - fVbargraph20 = FAUSTFLOAT(fRec70[0]); - output6[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (fRec3[0] * double(input5[i])); - fRec74[0] = (fRec74[1] + fRec73[1]); - fRec75[0] = (fRec75[1] + fRec74[1]); - fRec73[0] = (fSlow11 * ((fSlow3 * fTemp64) - ((fSlow13 * fRec74[0]) + (fSlow12 * fRec75[0])))); - double fTemp65 = (fRec73[0] + (fSlow4 * fTemp64)); - fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); - fVbargraph21 = FAUSTFLOAT(fRec72[0]); - double fTemp66 = (0.073771111356331756 * fTemp65); - double fTemp67 = (fRec3[0] * double(input10[i])); - fRec79[0] = (fRec79[1] + fRec78[1]); - fRec80[0] = (fRec80[1] + fRec79[1]); - fRec78[0] = (fSlow15 * ((fSlow3 * fTemp67) - ((fSlow17 * fRec79[0]) + (fSlow16 * fRec80[0])))); - fRec81[0] = (fRec81[1] + fRec77[1]); - fRec77[0] = (fSlow14 * (fRec78[0] - (fSlow18 * fRec81[0]))); - double fTemp68 = (fRec77[0] + (fSlow4 * fTemp67)); - fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); - fVbargraph22 = FAUSTFLOAT(fRec76[0]); - double fTemp69 = (8.4508657845044212e-18 * fTemp68); - double fTemp70 = (4.5171777696037333e-18 * fTemp41); - double fTemp71 = (0.046656947481584353 * fTemp37); - double fTemp72 = (0.065465367070797711 * fTemp46); - double fTemp73 = (2.8569140695654219e-18 * fTemp6); - double fTemp74 = (4.5171777696037326e-18 * fTemp12); - double fTemp75 = (4.0085976119129472e-18 * fTemp21); - double fTemp76 = (0.028171808490950564 * fTemp43); - double fTemp77 = (5.1750772641952248e-18 * fTemp27); - double fTemp78 = (fRec1[0] * ((fTemp66 + (fTemp69 + (fTemp70 + (fTemp71 + (fTemp72 + (((fTemp56 + (fTemp54 + fTemp73)) + fTemp74) + fTemp75)))))) - (fTemp76 + ((fTemp60 + (fTemp58 + fTemp62)) + fTemp77)))); - fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); - fVbargraph23 = FAUSTFLOAT(fRec71[0]); - output7[i] = FAUSTFLOAT(fTemp78); - double fTemp79 = (9.0343555392074651e-18 * fTemp65); - double fTemp80 = (1.035015452839045e-17 * fTemp43); - double fTemp81 = (5.7138281391308437e-18 * fTemp37); - double fTemp82 = (8.0171952238258944e-18 * fTemp46); - double fTemp83 = (fTemp54 + fTemp56); - double fTemp84 = (1.6901731569008842e-17 * fTemp68); - double fTemp85 = (9.0343555392074667e-18 * fTemp41); - double fTemp86 = (fRec1[0] * ((fTemp79 + (fTemp80 + (fTemp81 + (fTemp82 + (fTemp60 + (fTemp58 + fTemp83)))))) - (fTemp84 + (fTemp85 + (fTemp61 + (fTemp59 + (fTemp62 + (fTemp55 + fTemp57)))))))); - fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); - fVbargraph24 = FAUSTFLOAT(fRec82[0]); - output8[i] = FAUSTFLOAT(fTemp86); - double fTemp87 = (2.5352597353513262e-17 * fTemp68); - double fTemp88 = (1.35515333088112e-17 * fTemp41); - double fTemp89 = (1.5525231792585678e-17 * fTemp27); - double fTemp90 = (8.570742208696266e-18 * fTemp6); - double fTemp91 = (1.3551533308811195e-17 * fTemp12); - double fTemp92 = (1.202579283573884e-17 * fTemp21); - double fTemp93 = (fRec1[0] * ((fTemp87 + (fTemp76 + (fTemp88 + (fTemp83 + fTemp89)))) - (fTemp66 + (fTemp71 + (fTemp72 + (fTemp60 + ((fTemp62 + (fTemp58 + (fTemp90 + fTemp91))) + fTemp92))))))); - fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); - fVbargraph25 = FAUSTFLOAT(fRec83[0]); - output9[i] = FAUSTFLOAT(fTemp93); - double fTemp94 = (0.073771111356331756 * fTemp41); - double fTemp95 = (0.046656947481584346 * fTemp37); - double fTemp96 = (fTemp52 + fTemp55); - double fTemp97 = (0.043643578047198477 * fTemp46); - double fTemp98 = (0.042591770999995997 * fTemp9); - double fTemp99 = (0.043643578047198484 * fTemp21); - double fTemp100 = (fRec1[0] * (((fTemp94 + (fTemp95 + (fTemp96 + (4.5171777696037326e-18 * fTemp15)))) + (0.056343616981901108 * fTemp43)) - (fTemp97 + ((fTemp98 + fTemp99) + (0.056343616981901101 * fTemp27))))); - fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); - fVbargraph26 = FAUSTFLOAT(fRec84[0]); - output10[i] = FAUSTFLOAT(fTemp100); - double fTemp101 = (0.043643578047198484 * fTemp46); - double fTemp102 = (fRec1[0] * (((0.056343616981901094 * fTemp43) + (fTemp71 + ((fTemp52 + (0.043643578047198477 * fTemp21)) + (0.056343616981901129 * fTemp27)))) - (fTemp94 + (((fTemp98 + (0.046656947481584346 * fTemp6)) + (1.3551533308811195e-17 * fTemp15)) + fTemp101)))); - fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); - fVbargraph27 = FAUSTFLOAT(fRec85[0]); - output11[i] = FAUSTFLOAT(fTemp102); - double fTemp103 = (fRec1[0] * ((fTemp94 + (fTemp97 + ((fTemp99 + (fTemp52 + (2.2585888848018662e-17 * fTemp15))) + (0.056343616981901032 * fTemp27)))) - ((fTemp95 + (fTemp55 + fTemp98)) + (0.056343616981901185 * fTemp43)))); - fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); - fVbargraph28 = FAUSTFLOAT(fRec86[0]); - output12[i] = FAUSTFLOAT(fTemp103); - double fTemp104 = (fRec1[0] * ((fTemp101 + (fTemp52 + (0.046656947481584339 * fTemp6))) - ((0.056343616981901129 * fTemp43) + (fTemp94 + (fTemp71 + (((fTemp98 + (3.1620244387226126e-17 * fTemp15)) + (0.04364357804719847 * fTemp21)) + (0.056343616981901094 * fTemp27))))))); - fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); - fVbargraph29 = FAUSTFLOAT(fRec87[0]); - output13[i] = FAUSTFLOAT(fTemp104); - double fTemp105 = (fRec1[0] * ((fTemp61 + (fTemp59 + (fTemp62 + (fTemp58 + (fTemp56 + fTemp96))))) - (fTemp60 + (fTemp53 + fTemp57)))); - fRec88[0] = max((fRec88[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); - fVbargraph30 = FAUSTFLOAT(fRec88[0]); - output14[i] = FAUSTFLOAT(fTemp105); - double fTemp106 = (fRec1[0] * ((fTemp70 + (fTemp71 + (fTemp72 + (fTemp60 + (fTemp75 + (fTemp62 + (fTemp56 + (fTemp52 + fTemp73)))))))) - (fTemp66 + (fTemp69 + (fTemp76 + (fTemp77 + (fTemp58 + (fTemp53 + fTemp74)))))))); - fRec89[0] = max((fRec89[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); - fVbargraph31 = FAUSTFLOAT(fRec89[0]); - output15[i] = FAUSTFLOAT(fTemp106); - double fTemp107 = (fTemp52 + fTemp56); - double fTemp108 = (fRec1[0] * ((fTemp84 + (fTemp80 + (fTemp81 + (fTemp82 + (fTemp62 + (fTemp58 + (fTemp57 + fTemp107))))))) - (fTemp79 + (fTemp85 + (fTemp61 + (fTemp60 + (fTemp59 + (fTemp53 + fTemp55)))))))); - fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); - fVbargraph32 = FAUSTFLOAT(fRec90[0]); - output16[i] = FAUSTFLOAT(fTemp108); - double fTemp109 = (fRec1[0] * ((fTemp66 + (fTemp76 + (fTemp88 + (fTemp89 + (fTemp60 + (fTemp62 + (fTemp91 + fTemp107))))))) - (fTemp87 + (fTemp71 + (fTemp72 + (fTemp92 + (fTemp58 + (fTemp53 + fTemp90)))))))); - fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp109)))))); - fVbargraph33 = FAUSTFLOAT(fRec91[0]); - output17[i] = FAUSTFLOAT(fTemp109); - double fTemp110 = (fTemp0 + fTemp3); - double fTemp111 = (0.03214285714285714 * fTemp110); - double fTemp112 = (0.041496250137936612 * fTemp65); - double fTemp113 = (0.063386569104638732 * fTemp68); - double fTemp114 = (0.025877458475338275 * fTemp43); - double fTemp115 = (0.041496250137936598 * fTemp41); - double fTemp116 = (0.032142857142857126 * fTemp37); - double fTemp117 = (0.020044593143431835 * fTemp46); - double fTemp118 = (7.9795740640090912e-18 * fTemp9); - double fTemp119 = ((0.032142857142857133 * fTemp6) + fTemp118); - double fTemp120 = (0.041496250137936619 * fTemp12); - double fTemp121 = (2.5409124954020982e-18 * fTemp15); - double fTemp122 = (0.020044593143431839 * fTemp21); - double fTemp123 = (3.8813079481464173e-18 * fTemp24); - double fTemp124 = (0.032732683535398849 * fTemp18); - double fTemp125 = (0.025877458475338271 * fTemp27); - double fTemp126 = (fRec1[0] * ((fTemp111 + (fTemp112 + (fTemp113 + (fTemp114 + (fTemp115 + (fTemp116 + (fTemp117 + ((((fTemp119 + fTemp120) + fTemp121) + fTemp122) + fTemp123)))))))) - (fTemp124 + fTemp125))); - fRec92[0] = max((fRec92[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); - fVbargraph34 = FAUSTFLOAT(fRec92[0]); - output18[i] = FAUSTFLOAT(fTemp126); - double fTemp127 = (0.041496250137936619 * fTemp65); - double fTemp128 = (0.025877458475338268 * fTemp43); - double fTemp129 = (0.032142857142857133 * fTemp37); - double fTemp130 = (0.020044593143431839 * fTemp46); - double fTemp131 = (0.025877458475338278 * fTemp27); - double fTemp132 = (0.032142857142857126 * fTemp6); - double fTemp133 = (0.041496250137936612 * fTemp12); - double fTemp134 = (7.6227374862062938e-18 * fTemp15); - double fTemp135 = (0.020044593143431835 * fTemp21); - double fTemp136 = (1.1643923844439248e-17 * fTemp24); - double fTemp137 = (fRec1[0] * ((fTemp111 + (fTemp127 + (fTemp128 + (fTemp129 + (fTemp130 + (fTemp118 + fTemp131)))))) - (fTemp113 + (fTemp115 + (((fTemp124 + ((fTemp132 + fTemp133) + fTemp134)) + fTemp135) + fTemp136))))); - fRec93[0] = max((fRec93[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp137)))))); + fVbargraph20 = FAUSTFLOAT(fRec68[0]); + double fTemp51 = (fRec1[0] * (((0.038095238095238099 * (fTemp46 + fTemp47)) + (fTemp48 + (fConst10 * (((fConst34 * fTemp24) + (fConst36 * fTemp50)) + (fConst37 * fTemp29))))) - fTemp43)); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph21 = FAUSTFLOAT(fRec67[0]); + output7[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (fTemp0 + (fConst43 * fTemp13)); + double fTemp53 = (fConst40 * fTemp20); + double fTemp54 = (fRec1[0] * (((fTemp36 + fTemp48) + (0.038095238095238099 * (((fTemp52 + (fConst45 * fTemp38)) + (fConst47 * fTemp18)) + fTemp53))) - fTemp43)); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph22 = FAUSTFLOAT(fRec72[0]); + output8[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (fConst38 * fTemp27); + double fTemp56 = (fTemp0 + (fConst43 * fTemp24)); + double fTemp57 = (fRec1[0] * (((fTemp48 + fTemp55) + (0.038095238095238099 * (fTemp47 + ((fTemp45 + (fTemp56 + (fConst45 * fTemp50))) + (fConst47 * fTemp29))))) - fTemp43)); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph23 = FAUSTFLOAT(fRec73[0]); + output9[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (fRec3[0] * double(input4[i])); + fRec77[0] = (fRec77[1] + fRec76[1]); + fRec78[0] = (fRec78[1] + fRec77[1]); + fRec76[0] = (fSlow11 * ((fSlow3 * fTemp58) - ((fSlow13 * fRec77[0]) + (fSlow12 * fRec78[0])))); + double fTemp59 = (fRec76[0] + (fSlow4 * fTemp58)); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph24 = FAUSTFLOAT(fRec75[0]); + double fTemp60 = (0.042591770999995997 * fTemp6); + double fTemp61 = (fRec1[0] * (((0.038095238095238099 * (fTemp0 + (fConst48 * fTemp20))) + ((fConst22 * ((0.019047619047619053 * fTemp18) + (0.019047619047619049 * fTemp29))) + ((fConst19 * ((2.6996718031124477e-17 * fTemp15) + (0.12158240926519855 * fTemp59))) + ((fConst14 * ((0.042985873032210013 * fTemp13) + (0.042985873032210006 * fTemp24))) + (fConst49 * fTemp27))))) - fTemp60)); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph25 = FAUSTFLOAT(fRec74[0]); + output10[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (fConst50 * fTemp24); + double fTemp63 = (fConst26 * fTemp59); + double fTemp64 = (fRec1[0] * (((fConst24 * ((0.17194349212884008 * fTemp20) + (0.17194349212883997 * fTemp27))) + ((fTemp62 + (fConst51 * fTemp29)) + (0.038095238095238099 * ((((fTemp0 + (fConst52 * fTemp13)) + fTemp63) + (fConst53 * fTemp15)) + (fConst54 * fTemp18))))) - fTemp60)); + fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph26 = FAUSTFLOAT(fRec79[0]); + output11[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = (fRec1[0] * (((0.038095238095238099 * (((((fTemp0 + (fConst52 * fTemp24)) + (fConst55 * fTemp13)) + (fConst56 * fTemp27)) + (fConst54 * fTemp29)) + (fConst57 * fTemp18))) + ((fConst19 * ((5.3993436062248954e-17 * fTemp15) + (0.12158240926519859 * fTemp59))) + (fConst58 * fTemp20))) - fTemp60)); + fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph27 = FAUSTFLOAT(fRec80[0]); + output12[i] = FAUSTFLOAT(fTemp65); + double fTemp66 = (fRec1[0] * ((((fConst59 * fTemp13) + (fConst60 * fTemp18)) + (0.038095238095238099 * (((((fTemp63 + (fTemp0 + (fConst55 * fTemp24))) + (fConst61 * fTemp15)) + (fConst62 * fTemp27)) + (fConst57 * fTemp29)) + (fConst63 * fTemp20)))) - fTemp60)); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph28 = FAUSTFLOAT(fRec81[0]); + output13[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = (fConst69 * fTemp15); + double fTemp68 = (fRec1[0] * (((0.053874802376117914 * ((fConst65 * fTemp38) + (fConst66 * fTemp35))) + ((fConst68 * fTemp18) + (fTemp42 + (fTemp67 + ((fConst50 * fTemp13) + (fTemp43 + (fTemp39 + fTemp41))))))) - fTemp40)); + fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph29 = FAUSTFLOAT(fRec82[0]); + output14[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = (fConst70 * fTemp35); + double fTemp70 = (fTemp41 + fTemp43); + double fTemp71 = (fRec1[0] * (((0.038095238095238099 * (fTemp46 + fTemp69)) + ((fConst68 * fTemp29) + ((fConst71 * fTemp50) + (fTemp62 + fTemp70)))) - fTemp40)); + fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph30 = FAUSTFLOAT(fRec83[0]); + output15[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = (fRec1[0] * ((((fConst72 * fTemp35) + (fTemp67 + fTemp70)) + (0.038095238095238099 * (fTemp53 + ((fTemp52 + (fConst73 * fTemp38)) + (fConst74 * fTemp18))))) - fTemp40)); + fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph31 = FAUSTFLOAT(fRec84[0]); + output16[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = (fRec1[0] * (((fTemp55 + fTemp70) + (0.038095238095238099 * (fTemp69 + ((fTemp45 + (fTemp56 + (fConst73 * fTemp50))) + (fConst74 * fTemp29))))) - fTemp40)); + fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph32 = FAUSTFLOAT(fRec85[0]); + output17[i] = FAUSTFLOAT(fTemp73); + double fTemp74 = (fTemp0 + fTemp3); + double fTemp75 = (fConst75 * fTemp20); + double fTemp76 = ((1.518565389250751e-17 * fTemp15) + (0.068390105211674143 * fTemp59)); + double fTemp77 = (fRec3[0] * double(input10[i])); + fRec90[0] = (fRec90[1] + fRec89[1]); + fRec91[0] = (fRec91[1] + fRec90[1]); + fRec89[0] = (fSlow15 * ((fSlow3 * fTemp77) - ((fSlow17 * fRec90[0]) + (fSlow16 * fRec91[0])))); + fRec92[0] = (fRec92[1] + fRec88[1]); + fRec88[0] = (fSlow14 * (fRec89[0] - (fSlow18 * fRec92[0]))); + double fTemp78 = (fRec88[0] + (fSlow4 * fTemp77)); + fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph33 = FAUSTFLOAT(fRec87[0]); + double fTemp79 = (7.9795740640090912e-18 * fTemp6); + double fTemp80 = (fConst78 * fTemp27); + double fTemp81 = ((0.02961378424040018 * fTemp13) + (0.029613784240400176 * fTemp24)); + double fTemp82 = (0.032732683535398849 * fTemp9); + double fTemp83 = (fRec1[0] * (((0.03214285714285714 * (fTemp74 + fTemp75)) + ((fConst16 * (((fConst18 * fTemp76) + (fConst76 * fTemp78)) + (fConst77 * fTemp35))) + ((fTemp79 + fTemp80) + (fConst10 * (((((fConst13 * fTemp81) + (fConst79 * fTemp50)) + (fConst80 * fTemp38)) + (fConst81 * fTemp29)) + (fConst82 * fTemp18)))))) - fTemp82)); + fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph34 = FAUSTFLOAT(fRec86[0]); + output18[i] = FAUSTFLOAT(fTemp83); + double fTemp84 = (fConst24 * ((0.078970091307733831 * fTemp20) + (0.078970091307733761 * fTemp27))); + double fTemp85 = (fConst83 * fTemp13); + double fTemp86 = (fConst84 * fTemp59); + double fTemp87 = (fConst86 * fTemp15); + double fTemp88 = (fConst87 * fTemp78); + double fTemp89 = (fRec1[0] * ((fTemp84 + ((0.03214285714285714 * (((((((fTemp74 + fTemp85) + fTemp86) + (fConst85 * fTemp38)) + fTemp87) + fTemp88) + (fConst88 * fTemp18)) + (fConst89 * fTemp35))) + (fTemp79 + (fConst10 * (((fConst90 * fTemp24) + (fConst80 * fTemp50)) + (fConst82 * fTemp29)))))) - fTemp82)); + fRec93[0] = max((fRec93[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); fVbargraph35 = FAUSTFLOAT(fRec93[0]); - output19[i] = FAUSTFLOAT(fTemp137); - double fTemp138 = (1.2704562477010493e-17 * fTemp15); - double fTemp139 = (1.9406539740732082e-17 * fTemp24); - double fTemp140 = (0.02587745847533824 * fTemp27); - double fTemp141 = (0.025877458475338306 * fTemp43); - double fTemp142 = (0.020044593143431842 * fTemp21); - double fTemp143 = (fRec1[0] * ((fTemp113 + (fTemp115 + (((fTemp118 + fTemp138) + fTemp139) + fTemp140))) - ((0.03214285714285714 * (fTemp6 - fTemp110)) + (fTemp112 + (fTemp141 + (fTemp116 + (fTemp117 + ((fTemp120 + fTemp124) + fTemp142)))))))); - fRec94[0] = max((fRec94[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp143)))))); + output19[i] = FAUSTFLOAT(fTemp89); + double fTemp90 = ((3.037130778501502e-17 * fTemp15) + (0.068390105211674157 * fTemp59)); + double fTemp91 = (fTemp0 + (fConst83 * fTemp24)); + double fTemp92 = (fConst93 * fTemp13); + double fTemp93 = (fConst95 * fTemp27); + double fTemp94 = (fConst97 * fTemp20); + double fTemp95 = (fRec1[0] * (((fConst16 * (((fConst18 * fTemp90) + (fConst91 * fTemp78)) + (fConst92 * fTemp35))) + ((0.03214285714285714 * (((((((fTemp3 + fTemp91) + fTemp92) + (fConst85 * fTemp50)) + (fConst94 * fTemp38)) + fTemp93) + (fConst88 * fTemp29)) + (fConst96 * fTemp18))) + (fTemp79 + fTemp94))) - fTemp82)); + fRec94[0] = max((fRec94[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); fVbargraph36 = FAUSTFLOAT(fRec94[0]); - output20[i] = FAUSTFLOAT(fTemp143); - double fTemp144 = (fTemp0 - fTemp37); - double fTemp145 = (fTemp118 + fTemp132); - double fTemp146 = (0.041496250137936605 * fTemp12); - double fTemp147 = (0.025877458475338278 * fTemp43); - double fTemp148 = (0.020044593143431842 * fTemp46); - double fTemp149 = (1.7786387467814686e-17 * fTemp15); - double fTemp150 = (2.7169155637024915e-17 * fTemp24); - double fTemp151 = (0.025877458475338268 * fTemp27); - double fTemp152 = (fRec1[0] * (((0.03214285714285714 * (fTemp3 + fTemp144)) + (fTemp135 + (fTemp145 + fTemp146))) - (fTemp127 + (fTemp113 + (fTemp147 + (fTemp115 + (fTemp148 + (((fTemp124 + fTemp149) + fTemp150) + fTemp151)))))))); - fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); + output20[i] = FAUSTFLOAT(fTemp95); + double fTemp96 = (fTemp0 + (fConst93 * fTemp24)); + double fTemp97 = (fConst101 * fTemp15); + double fTemp98 = (fConst102 * fTemp27); + double fTemp99 = (fConst104 * fTemp20); + double fTemp100 = (fRec1[0] * (((fTemp79 + (fConst10 * (((fConst98 * fTemp13) + (fConst99 * fTemp38)) + (fConst100 * fTemp18)))) + (0.03214285714285714 * ((((fTemp88 + ((((fTemp86 + (fTemp3 + fTemp96)) + (fConst94 * fTemp50)) + fTemp97) + fTemp98)) + (fConst96 * fTemp29)) + (fConst103 * fTemp35)) + fTemp99))) - fTemp82)); + fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); fVbargraph37 = FAUSTFLOAT(fRec95[0]); - output21[i] = FAUSTFLOAT(fTemp152); - double fTemp153 = (fTemp0 - fTemp3); - double fTemp154 = (0.03214285714285714 * fTemp153); - double fTemp155 = (fRec1[0] * ((fTemp154 + (fTemp114 + (fTemp115 + (fTemp116 + (fTemp117 + (fTemp122 + (fTemp124 + (fTemp119 + fTemp121)))))))) - (fTemp112 + (fTemp113 + (fTemp125 + (fTemp120 + fTemp123)))))); - fRec96[0] = max((fRec96[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); + output21[i] = FAUSTFLOAT(fTemp100); + double fTemp101 = (fTemp0 - fTemp3); + double fTemp102 = (fTemp79 + fTemp82); + double fTemp103 = (fRec1[0] * ((0.03214285714285714 * (fTemp75 + (fTemp101 + (fConst106 * fTemp50)))) + ((fConst107 * ((1.0093451520109982e-17 * fTemp35) + (0.045456864504849481 * fTemp78))) + ((fConst108 * ((0.016071428571428573 * fTemp18) + (0.01607142857142857 * fTemp29))) + ((fConst109 * fTemp38) + ((fConst19 * fTemp76) + ((fConst14 * fTemp81) + (fTemp80 + fTemp102)))))))); + fRec96[0] = max((fRec96[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); fVbargraph38 = FAUSTFLOAT(fRec96[0]); - output22[i] = FAUSTFLOAT(fTemp155); - double fTemp156 = (fRec1[0] * ((fTemp154 + (fTemp113 + (fTemp128 + (fTemp129 + (fTemp130 + (fTemp131 + (fTemp136 + (fTemp124 + (fTemp118 + fTemp133))))))))) - (fTemp127 + (fTemp115 + (fTemp135 + (fTemp132 + fTemp134)))))); - fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp156)))))); + output22[i] = FAUSTFLOAT(fTemp103); + double fTemp104 = (fConst111 * fTemp78); + double fTemp105 = (fRec1[0] * ((0.03214285714285714 * ((((fTemp87 + ((fTemp86 + (fTemp85 + fTemp101)) + (fConst110 * fTemp38))) + fTemp104) + (fConst112 * fTemp18)) + (fConst113 * fTemp35))) + ((fConst114 * fTemp29) + ((fConst109 * fTemp50) + (fTemp84 + ((fConst115 * fTemp24) + fTemp102)))))); + fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); fVbargraph39 = FAUSTFLOAT(fRec97[0]); - output23[i] = FAUSTFLOAT(fTemp156); - double fTemp157 = (fRec1[0] * ((fTemp112 + (fTemp115 + (fTemp140 + (fTemp124 + (fTemp138 + (fTemp118 + fTemp120)))))) - ((0.03214285714285714 * (fTemp6 - fTemp153)) + (fTemp113 + (fTemp141 + (fTemp116 + (fTemp117 + (fTemp142 + fTemp139)))))))); - fRec98[0] = max((fRec98[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp157)))))); + output23[i] = FAUSTFLOAT(fTemp105); + double fTemp106 = (fRec1[0] * ((fConst107 * ((2.0186903040219964e-17 * fTemp35) + (0.045456864504849488 * fTemp78))) + ((0.03214285714285714 * (((fTemp93 + (((fTemp92 - (fTemp3 - fTemp91)) + (fConst110 * fTemp50)) + (fConst116 * fTemp38))) + (fConst112 * fTemp29)) + (fConst117 * fTemp18))) + ((fConst19 * fTemp90) + (fTemp94 + fTemp102))))); + fRec98[0] = max((fRec98[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); fVbargraph40 = FAUSTFLOAT(fRec98[0]); - output24[i] = FAUSTFLOAT(fTemp157); - double fTemp158 = (fRec1[0] * ((fTemp127 + (fTemp113 + (fTemp150 + (fTemp135 + (fTemp124 + fTemp145))))) - ((0.03214285714285714 * (fTemp3 - fTemp144)) + (fTemp147 + (fTemp115 + (fTemp148 + (fTemp151 + (fTemp146 + fTemp149)))))))); - fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp158)))))); + output24[i] = FAUSTFLOAT(fTemp106); + double fTemp107 = (fRec1[0] * ((((fConst118 * fTemp38) + ((fConst119 * fTemp13) + fTemp102)) + (fConst120 * fTemp18)) + (0.03214285714285714 * (fTemp99 + (((fTemp104 + (fTemp98 + (fTemp97 + ((fTemp86 - (fTemp3 - fTemp96)) + (fConst116 * fTemp50))))) + (fConst117 * fTemp29)) + (fConst121 * fTemp35)))))); + fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); fVbargraph41 = FAUSTFLOAT(fRec99[0]); - output25[i] = FAUSTFLOAT(fTemp158); + output25[i] = FAUSTFLOAT(fTemp107); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; @@ -2093,92 +2283,92 @@ class mydsp : public dsp { fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec12[1] = fRec12[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; fRec13[1] = fRec13[0]; - fRec11[1] = fRec11[0]; - fRec10[1] = fRec10[0]; fRec16[1] = fRec16[0]; - fRec17[1] = fRec17[0]; - fRec15[1] = fRec15[0]; - fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; fRec20[1] = fRec20[0]; - fRec21[1] = fRec21[0]; fRec19[1] = fRec19[0]; fRec18[1] = fRec18[0]; - fRec25[1] = fRec25[0]; - fRec26[1] = fRec26[0]; - fRec24[1] = fRec24[0]; - fRec27[1] = fRec27[0]; fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; fRec22[1] = fRec22[0]; - fRec31[1] = fRec31[0]; - fRec32[1] = fRec32[0]; + fRec21[1] = fRec21[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec27[1] = fRec27[0]; fRec30[1] = fRec30[0]; + fRec26[1] = fRec26[0]; + fRec25[1] = fRec25[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; fRec33[1] = fRec33[0]; - fRec29[1] = fRec29[0]; - fRec28[1] = fRec28[0]; - fRec37[1] = fRec37[0]; - fRec38[1] = fRec38[0]; fRec36[1] = fRec36[0]; + fRec32[1] = fRec32[0]; + fRec31[1] = fRec31[0]; + fRec17[1] = fRec17[0]; + fRec40[1] = fRec40[0]; fRec39[1] = fRec39[0]; - fRec35[1] = fRec35[0]; - fRec34[1] = fRec34[0]; - fRec43[1] = fRec43[0]; + fRec38[1] = fRec38[0]; fRec44[1] = fRec44[0]; - fRec42[1] = fRec42[0]; fRec45[1] = fRec45[0]; - fRec41[1] = fRec41[0]; - fRec40[1] = fRec40[0]; - fRec0[1] = fRec0[0]; + fRec43[1] = fRec43[0]; fRec46[1] = fRec46[0]; + fRec42[1] = fRec42[0]; + fRec41[1] = fRec41[0]; fRec50[1] = fRec50[0]; + fRec51[1] = fRec51[0]; fRec49[1] = fRec49[0]; + fRec52[1] = fRec52[0]; fRec48[1] = fRec48[0]; + fRec47[1] = fRec47[0]; + fRec37[1] = fRec37[0]; fRec53[1] = fRec53[0]; fRec54[1] = fRec54[0]; - fRec52[1] = fRec52[0]; - fRec51[1] = fRec51[0]; - fRec58[1] = fRec58[0]; + fRec55[1] = fRec55[0]; + fRec60[1] = fRec60[0]; + fRec61[1] = fRec61[0]; fRec59[1] = fRec59[0]; + fRec62[1] = fRec62[0]; + fRec58[1] = fRec58[0]; fRec57[1] = fRec57[0]; - fRec60[1] = fRec60[0]; - fRec56[1] = fRec56[0]; - fRec55[1] = fRec55[0]; - fRec64[1] = fRec64[0]; fRec65[1] = fRec65[0]; - fRec63[1] = fRec63[0]; fRec66[1] = fRec66[0]; - fRec62[1] = fRec62[0]; - fRec61[1] = fRec61[0]; - fRec47[1] = fRec47[0]; - fRec67[1] = fRec67[0]; - fRec68[1] = fRec68[0]; - fRec69[1] = fRec69[0]; + fRec64[1] = fRec64[0]; + fRec63[1] = fRec63[0]; + fRec56[1] = fRec56[0]; fRec70[1] = fRec70[0]; - fRec74[1] = fRec74[0]; - fRec75[1] = fRec75[0]; - fRec73[1] = fRec73[0]; + fRec71[1] = fRec71[0]; + fRec69[1] = fRec69[0]; + fRec68[1] = fRec68[0]; + fRec67[1] = fRec67[0]; fRec72[1] = fRec72[0]; + fRec73[1] = fRec73[0]; + fRec77[1] = fRec77[0]; + fRec78[1] = fRec78[0]; + fRec76[1] = fRec76[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; fRec79[1] = fRec79[0]; fRec80[1] = fRec80[0]; - fRec78[1] = fRec78[0]; fRec81[1] = fRec81[0]; - fRec77[1] = fRec77[0]; - fRec76[1] = fRec76[0]; - fRec71[1] = fRec71[0]; fRec82[1] = fRec82[0]; fRec83[1] = fRec83[0]; fRec84[1] = fRec84[0]; fRec85[1] = fRec85[0]; - fRec86[1] = fRec86[0]; - fRec87[1] = fRec87[0]; - fRec88[1] = fRec88[0]; - fRec89[1] = fRec89[0]; fRec90[1] = fRec90[0]; fRec91[1] = fRec91[0]; + fRec89[1] = fRec89[0]; fRec92[1] = fRec92[0]; + fRec88[1] = fRec88[0]; + fRec87[1] = fRec87[0]; + fRec86[1] = fRec86[0]; fRec93[1] = fRec93[0]; fRec94[1] = fRec94[0]; fRec95[1] = fRec95[0]; @@ -2194,7 +2384,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2426,7 +2615,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2489,7 +2678,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2518,11 +2707,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecLebedev501.cpp b/source/HOAUGens/HOADecLebedev501.cpp index 075eda60ba..bf399ca356 100644 --- a/source/HOAUGens/HOADecLebedev501.cpp +++ b/source/HOAUGens/HOADecLebedev501.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev501" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,20 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -632,13 +649,15 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fRec0[2]; + FAUSTFLOAT fVbargraph2; + double fConst4; + double fConst5; + double fRec10[2]; double fRec9[2]; double fRec8[2]; - double fRec7[2]; - FAUSTFLOAT fVbargraph2; - double fRec0[2]; FAUSTFLOAT fVbargraph3; - double fRec10[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph4; double fRec14[2]; double fRec13[2]; @@ -646,26 +665,32 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph5; double fRec11[2]; FAUSTFLOAT fVbargraph6; + double fConst6; double fRec15[2]; FAUSTFLOAT fVbargraph7; double fRec16[2]; FAUSTFLOAT fVbargraph8; double fRec17[2]; FAUSTFLOAT fVbargraph9; + double fConst7; double fRec18[2]; FAUSTFLOAT fVbargraph10; double fRec19[2]; FAUSTFLOAT fVbargraph11; + double fConst8; double fRec20[2]; FAUSTFLOAT fVbargraph12; double fRec21[2]; FAUSTFLOAT fVbargraph13; double fRec22[2]; FAUSTFLOAT fVbargraph14; + double fConst9; double fRec23[2]; FAUSTFLOAT fVbargraph15; + double fConst10; double fRec24[2]; FAUSTFLOAT fVbargraph16; + double fConst11; double fRec25[2]; FAUSTFLOAT fVbargraph17; double fRec26[2]; @@ -678,10 +703,14 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph21; double fRec30[2]; FAUSTFLOAT fVbargraph22; + double fConst12; + double fConst13; double fRec31[2]; FAUSTFLOAT fVbargraph23; + double fConst14; double fRec32[2]; FAUSTFLOAT fVbargraph24; + double fConst15; double fRec33[2]; FAUSTFLOAT fVbargraph25; double fRec34[2]; @@ -694,26 +723,41 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph29; double fRec38[2]; FAUSTFLOAT fVbargraph30; + double fConst16; + double fConst17; double fRec39[2]; FAUSTFLOAT fVbargraph31; + double fConst18; double fRec40[2]; FAUSTFLOAT fVbargraph32; + double fConst19; double fRec41[2]; FAUSTFLOAT fVbargraph33; double fRec42[2]; FAUSTFLOAT fVbargraph34; double fRec43[2]; FAUSTFLOAT fVbargraph35; + double fConst20; + double fConst21; double fRec44[2]; FAUSTFLOAT fVbargraph36; + double fConst22; + double fConst23; double fRec45[2]; FAUSTFLOAT fVbargraph37; + double fConst24; + double fConst25; double fRec46[2]; FAUSTFLOAT fVbargraph38; + double fConst26; double fRec47[2]; FAUSTFLOAT fVbargraph39; + double fConst27; + double fConst28; double fRec48[2]; FAUSTFLOAT fVbargraph40; + double fConst29; + double fConst30; double fRec49[2]; FAUSTFLOAT fVbargraph41; double fRec50[2]; @@ -748,36 +792,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev501"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1035,10 +1079,37 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); + fConst4 = (double(tgamma(1.5)) * sqrt((3.0 * (double(tgamma(1.0)) / double(tgamma(3.0)))))); + fConst5 = (0.02026373487753309 * fConst4); + fConst6 = (0.0 - (1.5957691216057308 * fConst4)); + fConst7 = (0.025473109945013343 * fConst4); + fConst8 = (0.0 - (1.1283791670955128 * fConst4)); + fConst9 = (0.0 - (1.1283791670955126 * fConst4)); + fConst10 = (0.0 - (1.128379167095513 * fConst4)); + fConst11 = (0.025473109945013332 * fConst4); + fConst12 = (0.019434045907762623 * fConst4); + fConst13 = (0.0 - (0.92131773192356115 * fConst4)); + fConst14 = (0.0 - (0.92131773192356148 * fConst4)); + fConst15 = (0.019434045907762616 * fConst4); + fConst16 = (0.0 - (0.48114249349102017 * fConst4)); + fConst17 = (0.0097062489627452973 * fConst4); + fConst18 = (0.0 - (0.48114249349102034 * fConst4)); + fConst19 = (0.0097062489627452939 * fConst4); + fConst20 = (0.0 - (0.48114249349102062 * fConst4)); + fConst21 = (0.029118746888235927 * fConst4); + fConst22 = (0.0 - (1.443427480473062 * fConst4)); + fConst23 = (0.0097062489627453216 * fConst4); + fConst24 = (0.0 - (0.48114249349102112 * fConst4)); + fConst25 = (0.0 - (1.4434274804730622 * fConst4)); + fConst26 = (0.0 - (0.48114249349102095 * fConst4)); + fConst27 = (0.0 - (1.4434274804730625 * fConst4)); + fConst28 = (0.0097062489627453008 * fConst4); + fConst29 = (0.0 - (0.48114249349102228 * fConst4)); + fConst30 = (0.029118746888235913 * fConst4); } @@ -1076,23 +1147,23 @@ class mydsp : public dsp { } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec9[l6] = 0.0; + fRec0[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec9[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec0[l9] = 0.0; + fRec8[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec7[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { @@ -1315,9 +1386,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1327,21 +1398,21 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a3be40", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39641e0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a641f0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x398e180", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a47130", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x396f300", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a50ad0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x397ffe0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1362,256 +1433,256 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph3, "osc", "/output1"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a55990", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39741c0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph4, "osc", "/output2"); + ui_interface->declare(&fVbargraph4, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a5ad00", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3984c90", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph6, "osc", "/output3"); + ui_interface->declare(&fVbargraph6, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a69200", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3992b90", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph7, "osc", "/output4"); + ui_interface->declare(&fVbargraph7, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a6e630", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39986e0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph8, "osc", "/output5"); + ui_interface->declare(&fVbargraph8, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a73d00", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x399dbe0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph9, "osc", "/output6"); + ui_interface->declare(&fVbargraph9, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a78f20", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39a2e00", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph10, "osc", "/output7"); + ui_interface->declare(&fVbargraph10, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a7f750", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39a9b10", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph11, "osc", "/output8"); + ui_interface->declare(&fVbargraph11, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a856c0", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39af2e0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph12, "osc", "/output9"); + ui_interface->declare(&fVbargraph12, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a8b320", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39b5840", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph13, "osc", "/output10"); + ui_interface->declare(&fVbargraph13, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a91060", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39bb590", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph14, "osc", "/output11"); + ui_interface->declare(&fVbargraph14, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a96ec0", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39c1560", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph15, "osc", "/output12"); + ui_interface->declare(&fVbargraph15, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a9c9e0", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39c7b50", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph16, "osc", "/output13"); + ui_interface->declare(&fVbargraph16, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aa2400", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39ce400", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph17, "osc", "/output14"); + ui_interface->declare(&fVbargraph17, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aa82b0", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39d4b50", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph18, "osc", "/output15"); + ui_interface->declare(&fVbargraph18, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aadcb0", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39da740", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph19, "osc", "/output16"); + ui_interface->declare(&fVbargraph19, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ab3b50", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39e0400", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph20, "osc", "/output17"); + ui_interface->declare(&fVbargraph20, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ab9ad0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39e5fc0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph21, "osc", "/output18"); + ui_interface->declare(&fVbargraph21, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3abfb30", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39ebc60", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph22, "osc", "/output19"); + ui_interface->declare(&fVbargraph22, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ac6fc0", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39f2eb0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph23, "osc", "/output20"); + ui_interface->declare(&fVbargraph23, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3acd7e0", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39fa680", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph24, "osc", "/output21"); + ui_interface->declare(&fVbargraph24, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ad3d20", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a01c30", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph25, "osc", "/output22"); + ui_interface->declare(&fVbargraph25, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3adaab0", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a09080", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph26, "osc", "/output23"); + ui_interface->declare(&fVbargraph26, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ae1390", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a0f750", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph27, "osc", "/output24"); + ui_interface->declare(&fVbargraph27, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ae7750", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a15cf0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph28, "osc", "/output25"); + ui_interface->declare(&fVbargraph28, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aee010", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a1c370", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph29, "osc", "/output26"); + ui_interface->declare(&fVbargraph29, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3af4770", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a22ad0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph30, "osc", "/output27"); + ui_interface->declare(&fVbargraph30, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3afaee0", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a295c0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph31, "osc", "/output28"); + ui_interface->declare(&fVbargraph31, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b00510", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a30170", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph32, "osc", "/output29"); + ui_interface->declare(&fVbargraph32, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b061e0", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a36710", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph33, "osc", "/output30"); + ui_interface->declare(&fVbargraph33, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b0bf90", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a3cd60", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph34, "osc", "/output31"); + ui_interface->declare(&fVbargraph34, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b129a0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a43740", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph35, "osc", "/output32"); + ui_interface->declare(&fVbargraph35, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b18910", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a49850", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph36, "osc", "/output33"); + ui_interface->declare(&fVbargraph36, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b1e570", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a50a30", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph37, "osc", "/output34"); + ui_interface->declare(&fVbargraph37, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b242b0", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a57cf0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph38, "osc", "/output35"); + ui_interface->declare(&fVbargraph38, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b2a0d0", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a5f0c0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph39, "osc", "/output36"); + ui_interface->declare(&fVbargraph39, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b2ffd0", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a65c80", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph40, "osc", "/output37"); + ui_interface->declare(&fVbargraph40, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b35fb0", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a6d1e0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph41, "osc", "/output38"); + ui_interface->declare(&fVbargraph41, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b3c630", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a74820", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph42, "osc", "/output39"); + ui_interface->declare(&fVbargraph42, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b423f0", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a7a400", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph43, "osc", "/output40"); + ui_interface->declare(&fVbargraph43, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b48290", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a800c0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph44, "osc", "/output41"); + ui_interface->declare(&fVbargraph44, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b4e210", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a85e60", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph45, "osc", "/output42"); + ui_interface->declare(&fVbargraph45, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b54480", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a8bce0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph46, "osc", "/output43"); + ui_interface->declare(&fVbargraph46, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b5a3e0", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a91a60", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph47, "osc", "/output44"); + ui_interface->declare(&fVbargraph47, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b60600", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a978c0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph48, "osc", "/output45"); + ui_interface->declare(&fVbargraph48, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b66900", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a9d9e0", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph49, "osc", "/output46"); + ui_interface->declare(&fVbargraph49, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b6cce0", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3aa3be0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph50, "osc", "/output47"); + ui_interface->declare(&fVbargraph50, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b72fc0", &fVbargraph50, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3aa9ec0", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph51, "osc", "/output48"); + ui_interface->declare(&fVbargraph51, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b79380", &fVbargraph51, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3ab0280", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph52, "osc", "/output49"); + ui_interface->declare(&fVbargraph52, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b7fa00", &fVbargraph52, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3ab6540", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph53, "osc", "/output50"); + ui_interface->declare(&fVbargraph53, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b86160", &fVbargraph53, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3abcac0", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1696,276 +1767,267 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.021994295969128601 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); - fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow7 * ((fSlow3 * fTemp5) - (fSlow8 * fRec9[0]))); - double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); - fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (1.3467622079046435e-18 * fTemp6); - double fTemp8 = (fRec1[0] * ((fTemp1 + fTemp4) + fTemp7)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); - fVbargraph3 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp8); - double fTemp9 = (0.021994295969128601 * fTemp6); - double fTemp10 = (fRec1[0] * (fTemp1 + fTemp9)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph4 = FAUSTFLOAT(fRec10[0]); - output1[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fRec3[0] * double(input1[i])); + double fTemp5 = (fRec1[0] * (fTemp1 + fTemp4)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (fRec3[0] * double(input3[i])); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec9[0] = (fSlow7 * ((fSlow3 * fTemp6) - (fSlow8 * fRec10[0]))); + double fTemp7 = (fRec9[0] + (fSlow4 * fTemp6)); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph3 = FAUSTFLOAT(fRec8[0]); + double fTemp8 = (fRec1[0] * (fTemp1 + (fConst5 * fTemp7))); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph4 = FAUSTFLOAT(fRec7[0]); + output1[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (fRec3[0] * double(input1[i])); fRec14[0] = (fRec14[1] + fRec13[1]); - fRec13[0] = (fSlow7 * ((fSlow3 * fTemp11) - (fSlow8 * fRec14[0]))); - double fTemp12 = (fRec13[0] + (fSlow4 * fTemp11)); - fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fRec13[0] = (fSlow7 * ((fSlow3 * fTemp9) - (fSlow8 * fRec14[0]))); + double fTemp10 = (fRec13[0] + (fSlow4 * fTemp9)); + fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph5 = FAUSTFLOAT(fRec12[0]); - double fTemp13 = (0.021994295969128601 * fTemp12); - double fTemp14 = (fTemp1 + fTemp7); - double fTemp15 = (fRec1[0] * (fTemp13 + fTemp14)); - fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + double fTemp11 = (fRec1[0] * (fTemp1 + (fConst5 * fTemp10))); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph6 = FAUSTFLOAT(fRec11[0]); - output2[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (fRec1[0] * ((fTemp1 + (2.6935244158092871e-18 * fTemp12)) - fTemp9)); - fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + output2[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.012698412698412698 * (fRec1[0] * (fTemp0 + (fConst6 * fTemp7)))); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph7 = FAUSTFLOAT(fRec15[0]); - output3[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fRec1[0] * (fTemp1 - (fTemp13 + (4.0402866237139308e-18 * fTemp6)))); - fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + output3[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.012698412698412698 * (fRec1[0] * (fTemp0 + (fConst6 * fTemp10)))); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph8 = FAUSTFLOAT(fRec16[0]); - output4[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (fRec1[0] * (fTemp14 - fTemp4)); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + output4[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (fRec1[0] * (fTemp1 - fTemp4)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph9 = FAUSTFLOAT(fRec17[0]); - output5[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.022574955908289243 * fTemp0); - double fTemp20 = (0.027648561470568499 * fTemp3); - double fTemp21 = (fTemp19 + fTemp20); - double fTemp22 = (0.027648561470568506 * fTemp6); - double fTemp23 = (fRec1[0] * (fTemp21 + fTemp22)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + output5[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.022574955908289243 * fTemp0); + double fTemp16 = (0.027648561470568499 * fTemp3); + double fTemp17 = (fTemp15 + fTemp16); + double fTemp18 = (fConst7 * fTemp7); + double fTemp19 = (fRec1[0] * (fTemp17 + fTemp18)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph10 = FAUSTFLOAT(fRec18[0]); - output6[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.027648561470568506 * fTemp12); - double fTemp25 = (1.6929861152980278e-18 * fTemp6); - double fTemp26 = (fRec1[0] * (fTemp24 + (fTemp21 + fTemp25))); - fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + output6[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (fConst7 * fTemp10); + double fTemp21 = (fRec1[0] * (fTemp17 + fTemp20)); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph11 = FAUSTFLOAT(fRec19[0]); - output7[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (3.3859722305960555e-18 * fTemp12); - double fTemp28 = (fRec1[0] * ((fTemp21 + fTemp27) - fTemp22)); - fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + output7[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.022574955908289243 * (fTemp0 + (fConst8 * fTemp7))); + double fTemp23 = (fRec1[0] * (fTemp16 + fTemp22)); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph12 = FAUSTFLOAT(fRec20[0]); - output8[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (5.0789583458940831e-18 * fTemp6); - double fTemp30 = (fRec1[0] * (fTemp21 - (fTemp24 + fTemp29))); - fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + output8[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.022574955908289243 * (fTemp0 + (fConst8 * fTemp10))); + double fTemp25 = (fRec1[0] * (fTemp16 + fTemp24)); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph13 = FAUSTFLOAT(fRec21[0]); - output9[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.027648561470568499 * fTemp12); - double fTemp32 = (fTemp19 + fTemp22); - double fTemp33 = (fRec1[0] * (fTemp31 + fTemp32)); - fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + output9[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (fRec1[0] * (fTemp15 + (fConst4 * ((0.025473109945013343 * fTemp7) + (0.025473109945013336 * fTemp10))))); + fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph14 = FAUSTFLOAT(fRec22[0]); - output10[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (fRec1[0] * ((fTemp19 + fTemp24) - (0.027648561470568499 * fTemp6))); - fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + output10[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (fRec1[0] * (fTemp20 + (0.022574955908289243 * (fTemp0 + (fConst9 * fTemp7))))); + fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph15 = FAUSTFLOAT(fRec23[0]); - output11[i] = FAUSTFLOAT(fTemp34); - double fTemp35 = (fRec1[0] * (fTemp19 - (fTemp22 + fTemp31))); - fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + output11[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.022574955908289243 * (fRec1[0] * ((fTemp0 + (fConst9 * fTemp10)) + (fConst10 * fTemp7)))); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph16 = FAUSTFLOAT(fRec24[0]); - output12[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (fRec1[0] * ((fTemp19 + (0.027648561470568496 * fTemp6)) - fTemp24)); - fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + output12[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (fRec1[0] * ((0.022574955908289243 * (fTemp0 + (fConst10 * fTemp10))) + (fConst11 * fTemp7))); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph17 = FAUSTFLOAT(fRec25[0]); - output13[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = (fRec1[0] * (fTemp32 - fTemp20)); - fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + output13[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fRec1[0] * ((fTemp15 + fTemp18) - fTemp16)); + fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph18 = FAUSTFLOAT(fRec26[0]); - output14[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = (fRec1[0] * ((fTemp24 + (fTemp19 + fTemp25)) - fTemp20)); - fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + output14[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fRec1[0] * ((fTemp15 + fTemp20) - fTemp16)); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph19 = FAUSTFLOAT(fRec27[0]); - output15[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (fRec1[0] * ((fTemp19 + fTemp27) - (fTemp20 + fTemp22))); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + output15[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (fRec1[0] * (fTemp22 - fTemp16)); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph20 = FAUSTFLOAT(fRec28[0]); - output16[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (fRec1[0] * (fTemp19 - (fTemp24 + (fTemp20 + fTemp29)))); - fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + output16[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (fRec1[0] * (fTemp24 - fTemp16)); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph21 = FAUSTFLOAT(fRec29[0]); - output17[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (fTemp0 + fTemp3); - double fTemp42 = (0.021093750000000001 * fTemp41); - double fTemp43 = (0.021093749999999994 * fTemp12); - double fTemp44 = (fTemp43 + (0.021093749999999998 * fTemp6)); - double fTemp45 = (fRec1[0] * (fTemp42 + fTemp44)); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + output17[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (fTemp0 + fTemp3); + double fTemp35 = (fConst4 * ((0.019434045907762623 * fTemp7) + (0.019434045907762619 * fTemp10))); + double fTemp36 = (fRec1[0] * ((0.021093750000000001 * fTemp34) + fTemp35)); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph22 = FAUSTFLOAT(fRec30[0]); - output18[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (0.021093749999999998 * fTemp12); - double fTemp47 = (0.021093749999999994 * fTemp6); - double fTemp48 = (fRec1[0] * ((fTemp42 + fTemp46) - fTemp47)); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + output18[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (fConst12 * fTemp10); + double fTemp38 = (fConst13 * fTemp7); + double fTemp39 = (fRec1[0] * (fTemp37 + (0.021093750000000001 * (fTemp34 + fTemp38)))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph23 = FAUSTFLOAT(fRec31[0]); - output19[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (fRec1[0] * (0.0 - (fTemp43 + (0.021093750000000001 * (fTemp6 - fTemp41))))); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + output19[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (fTemp0 + (fConst13 * fTemp10)); + double fTemp41 = (fConst14 * fTemp7); + double fTemp42 = (0.021093750000000001 * (fRec1[0] * ((fTemp3 + fTemp40) + fTemp41))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph24 = FAUSTFLOAT(fRec32[0]); - output20[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (fTemp0 - fTemp12); - double fTemp51 = (0.021093749999999991 * fTemp6); - double fTemp52 = (fRec1[0] * ((0.021093750000000001 * (fTemp3 + fTemp50)) + fTemp51)); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + output20[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (fTemp0 + (fConst14 * fTemp10)); + double fTemp44 = (fConst15 * fTemp7); + double fTemp45 = (fRec1[0] * ((0.021093750000000001 * (fTemp3 + fTemp43)) + fTemp44)); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph25 = FAUSTFLOAT(fRec33[0]); - output21[i] = FAUSTFLOAT(fTemp52); - double fTemp53 = (fTemp0 - fTemp3); - double fTemp54 = (0.021093750000000001 * fTemp53); - double fTemp55 = (fRec1[0] * (fTemp44 + fTemp54)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + output21[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (fTemp0 - fTemp3); + double fTemp47 = (fRec1[0] * (fTemp35 + (0.021093750000000001 * fTemp46))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph26 = FAUSTFLOAT(fRec34[0]); - output22[i] = FAUSTFLOAT(fTemp55); - double fTemp56 = (fRec1[0] * ((fTemp46 + fTemp54) - fTemp47)); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + output22[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (fRec1[0] * (fTemp37 + (0.021093750000000001 * (fTemp38 + fTemp46)))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph27 = FAUSTFLOAT(fRec35[0]); - output23[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (fRec1[0] * (0.0 - (fTemp43 + (0.021093750000000001 * (fTemp6 - fTemp53))))); - fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + output23[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.021093750000000001 * (fRec1[0] * (fTemp41 - (fTemp3 - fTemp40)))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph28 = FAUSTFLOAT(fRec36[0]); - output24[i] = FAUSTFLOAT(fTemp57); - double fTemp58 = (fRec1[0] * (fTemp51 - (0.021093750000000001 * (fTemp3 - fTemp50)))); - fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + output24[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (fRec1[0] * (fTemp44 - (0.021093750000000001 * (fTemp3 - fTemp43)))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph29 = FAUSTFLOAT(fRec37[0]); - output25[i] = FAUSTFLOAT(fTemp58); - double fTemp59 = (0.02017333553791887 * fTemp0); - double fTemp60 = (0.031605542669238249 * fTemp3); - double fTemp61 = (fTemp59 + fTemp60); - double fTemp62 = (0.010535180889746065 * (fTemp6 + fTemp12)); - double fTemp63 = (fRec1[0] * (fTemp61 + fTemp62)); - fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + output25[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * fTemp0); + double fTemp52 = (0.031605542669238249 * fTemp3); + double fTemp53 = (fConst4 * ((0.0097062489627452956 * fTemp7) + (0.0097062489627452973 * fTemp10))); + double fTemp54 = (fRec1[0] * ((fTemp51 + fTemp52) + fTemp53)); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); fVbargraph30 = FAUSTFLOAT(fRec38[0]); - output26[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (0.010535180889746065 * (fTemp6 - fTemp12)); - double fTemp65 = (fRec1[0] * (fTemp61 - fTemp64)); - fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + output26[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (0.02017333553791887 * (fTemp0 + (fConst16 * fTemp7))); + double fTemp56 = (fConst17 * fTemp10); + double fTemp57 = (fRec1[0] * (fTemp55 + (fTemp56 + fTemp52))); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); fVbargraph31 = FAUSTFLOAT(fRec39[0]); - output27[i] = FAUSTFLOAT(fTemp65); - double fTemp66 = (0.010535180889746065 * fTemp12); - double fTemp67 = (0.010535180889746067 * fTemp6); - double fTemp68 = (fRec1[0] * (fTemp61 - (fTemp66 + fTemp67))); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + output27[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (0.02017333553791887 * ((fTemp0 + (fConst16 * fTemp10)) + (fConst18 * fTemp7))); + double fTemp59 = (fRec1[0] * (fTemp52 + fTemp58)); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); fVbargraph32 = FAUSTFLOAT(fRec40[0]); - output28[i] = FAUSTFLOAT(fTemp68); - double fTemp69 = (0.010535180889746063 * fTemp6); - double fTemp70 = (0.010535180889746067 * fTemp12); - double fTemp71 = (fRec1[0] * ((fTemp61 + fTemp69) - fTemp70)); - fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + output28[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = (0.02017333553791887 * (fTemp0 + (fConst18 * fTemp10))); + double fTemp61 = (fConst19 * fTemp7); + double fTemp62 = (fRec1[0] * (fTemp60 + (fTemp52 + fTemp61))); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); fVbargraph33 = FAUSTFLOAT(fRec41[0]); - output29[i] = FAUSTFLOAT(fTemp71); - double fTemp72 = (0.010535180889746094 * fTemp12); - double fTemp73 = (0.010535180889746075 * fTemp3); - double fTemp74 = (fTemp59 + fTemp73); - double fTemp75 = (0.031605542669238242 * fTemp6); - double fTemp76 = (fRec1[0] * (fTemp72 + (fTemp74 + fTemp75))); - fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + output29[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = (0.010535180889746075 * fTemp3); + double fTemp64 = (fTemp51 + fTemp63); + double fTemp65 = (fConst4 * ((0.029118746888235916 * fTemp7) + (0.0097062489627453199 * fTemp10))); + double fTemp66 = (fRec1[0] * (fTemp64 + fTemp65)); + fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); fVbargraph34 = FAUSTFLOAT(fRec42[0]); - output30[i] = FAUSTFLOAT(fTemp76); - double fTemp77 = (0.031605542669238242 * fTemp12); - double fTemp78 = (0.010535180889746081 * fTemp6); - double fTemp79 = (fRec1[0] * (fTemp77 + (fTemp74 + fTemp78))); - fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + output30[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = (fConst4 * ((0.0097062489627453077 * fTemp7) + (0.029118746888235923 * fTemp10))); + double fTemp68 = (fRec1[0] * (fTemp64 + fTemp67)); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); fVbargraph35 = FAUSTFLOAT(fRec43[0]); - output31[i] = FAUSTFLOAT(fTemp79); - double fTemp80 = (0.010535180889746079 * fTemp6); - double fTemp81 = (fRec1[0] * ((fTemp74 + fTemp77) - fTemp80)); - fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + output31[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = (0.02017333553791887 * (fTemp0 + (fConst20 * fTemp7))); + double fTemp70 = (fConst21 * fTemp10); + double fTemp71 = (fRec1[0] * (fTemp69 + (fTemp63 + fTemp70))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); fVbargraph36 = FAUSTFLOAT(fRec44[0]); - output32[i] = FAUSTFLOAT(fTemp81); - double fTemp82 = (0.010535180889746096 * fTemp12); - double fTemp83 = (fRec1[0] * ((fTemp74 + fTemp82) - fTemp75)); - fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + output32[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = (0.02017333553791887 * (fTemp0 + (fConst22 * fTemp7))); + double fTemp73 = (fConst23 * fTemp10); + double fTemp74 = (fRec1[0] * (fTemp72 + (fTemp63 + fTemp73))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); fVbargraph37 = FAUSTFLOAT(fRec45[0]); - output33[i] = FAUSTFLOAT(fTemp83); - double fTemp84 = (0.010535180889746089 * fTemp12); - double fTemp85 = (fRec1[0] * (fTemp74 - (fTemp75 + fTemp84))); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + output33[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = (0.02017333553791887 * ((fTemp0 + (fConst24 * fTemp10)) + (fConst25 * fTemp7))); + double fTemp76 = (fRec1[0] * (fTemp63 + fTemp75)); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); fVbargraph38 = FAUSTFLOAT(fRec46[0]); - output34[i] = FAUSTFLOAT(fTemp85); - double fTemp86 = (0.010535180889746086 * fTemp6); - double fTemp87 = (fRec1[0] * (fTemp74 - (fTemp77 + fTemp86))); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + output34[i] = FAUSTFLOAT(fTemp76); + double fTemp77 = (0.02017333553791887 * ((fTemp0 + (fConst25 * fTemp10)) + (fConst26 * fTemp7))); + double fTemp78 = (fRec1[0] * (fTemp63 + fTemp77)); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); fVbargraph39 = FAUSTFLOAT(fRec47[0]); - output35[i] = FAUSTFLOAT(fTemp87); - double fTemp88 = (0.010535180889746074 * fTemp6); - double fTemp89 = (fRec1[0] * ((fTemp74 + fTemp88) - fTemp77)); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + output35[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = (0.02017333553791887 * (fTemp0 + (fConst27 * fTemp10))); + double fTemp80 = (fConst28 * fTemp7); + double fTemp81 = (fRec1[0] * (fTemp79 + (fTemp63 + fTemp80))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); fVbargraph40 = FAUSTFLOAT(fRec48[0]); - output36[i] = FAUSTFLOAT(fTemp89); - double fTemp90 = (0.031605542669238228 * fTemp6); - double fTemp91 = (0.010535180889746113 * fTemp12); - double fTemp92 = (fRec1[0] * ((fTemp74 + fTemp90) - fTemp91)); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + output36[i] = FAUSTFLOAT(fTemp81); + double fTemp82 = (0.02017333553791887 * (fTemp0 + (fConst29 * fTemp10))); + double fTemp83 = (fConst30 * fTemp7); + double fTemp84 = (fRec1[0] * (fTemp82 + (fTemp63 + fTemp83))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); fVbargraph41 = FAUSTFLOAT(fRec49[0]); - output37[i] = FAUSTFLOAT(fTemp92); - double fTemp93 = (fRec1[0] * ((fTemp72 + (fTemp59 + fTemp75)) - fTemp73)); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + output37[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = (fRec1[0] * ((fTemp51 + fTemp65) - fTemp63)); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); fVbargraph42 = FAUSTFLOAT(fRec50[0]); - output38[i] = FAUSTFLOAT(fTemp93); - double fTemp94 = (fRec1[0] * ((fTemp77 + (fTemp59 + fTemp78)) - fTemp73)); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + output38[i] = FAUSTFLOAT(fTemp85); + double fTemp86 = (fRec1[0] * ((fTemp51 + fTemp67) - fTemp63)); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); fVbargraph43 = FAUSTFLOAT(fRec51[0]); - output39[i] = FAUSTFLOAT(fTemp94); - double fTemp95 = (fRec1[0] * ((fTemp59 + fTemp77) - (fTemp73 + fTemp80))); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + output39[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = (fRec1[0] * ((fTemp70 + fTemp69) - fTemp63)); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); fVbargraph44 = FAUSTFLOAT(fRec52[0]); - output40[i] = FAUSTFLOAT(fTemp95); - double fTemp96 = (fTemp73 + fTemp75); - double fTemp97 = (fRec1[0] * ((fTemp59 + fTemp82) - fTemp96)); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + output40[i] = FAUSTFLOAT(fTemp87); + double fTemp88 = (fRec1[0] * ((fTemp73 + fTemp72) - fTemp63)); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp88)))))); fVbargraph45 = FAUSTFLOAT(fRec53[0]); - output41[i] = FAUSTFLOAT(fTemp97); - double fTemp98 = (fRec1[0] * (fTemp59 - (fTemp84 + fTemp96))); - fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + output41[i] = FAUSTFLOAT(fTemp88); + double fTemp89 = (fRec1[0] * (fTemp75 - fTemp63)); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); fVbargraph46 = FAUSTFLOAT(fRec54[0]); - output42[i] = FAUSTFLOAT(fTemp98); - double fTemp99 = (fRec1[0] * (fTemp59 - (fTemp77 + (fTemp73 + fTemp86)))); - fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); + output42[i] = FAUSTFLOAT(fTemp89); + double fTemp90 = (fRec1[0] * (fTemp77 - fTemp63)); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); fVbargraph47 = FAUSTFLOAT(fRec55[0]); - output43[i] = FAUSTFLOAT(fTemp99); - double fTemp100 = (fRec1[0] * ((fTemp59 + fTemp88) - (fTemp73 + fTemp77))); - fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + output43[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = (fRec1[0] * ((fTemp79 + fTemp80) - fTemp63)); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); fVbargraph48 = FAUSTFLOAT(fRec56[0]); - output44[i] = FAUSTFLOAT(fTemp100); - double fTemp101 = (fRec1[0] * ((fTemp59 + fTemp90) - (fTemp73 + fTemp91))); - fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); + output44[i] = FAUSTFLOAT(fTemp91); + double fTemp92 = (fRec1[0] * ((fTemp82 + fTemp83) - fTemp63)); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); fVbargraph49 = FAUSTFLOAT(fRec57[0]); - output45[i] = FAUSTFLOAT(fTemp101); - double fTemp102 = (fRec1[0] * ((fTemp59 + fTemp62) - fTemp60)); - fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); + output45[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = (fRec1[0] * ((fTemp51 + fTemp53) - fTemp52)); + fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); fVbargraph50 = FAUSTFLOAT(fRec58[0]); - output46[i] = FAUSTFLOAT(fTemp102); - double fTemp103 = (fRec1[0] * (fTemp59 - (fTemp60 + fTemp64))); - fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + output46[i] = FAUSTFLOAT(fTemp93); + double fTemp94 = (fRec1[0] * ((fTemp56 + fTemp55) - fTemp52)); + fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); fVbargraph51 = FAUSTFLOAT(fRec59[0]); - output47[i] = FAUSTFLOAT(fTemp103); - double fTemp104 = (fRec1[0] * (fTemp59 - (fTemp66 + (fTemp60 + fTemp67)))); - fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); + output47[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = (fRec1[0] * (fTemp58 - fTemp52)); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); fVbargraph52 = FAUSTFLOAT(fRec60[0]); - output48[i] = FAUSTFLOAT(fTemp104); - double fTemp105 = (fRec1[0] * ((fTemp59 + fTemp69) - (fTemp60 + fTemp70))); - fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); + output48[i] = FAUSTFLOAT(fTemp95); + double fTemp96 = (fRec1[0] * ((fTemp60 + fTemp61) - fTemp52)); + fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); fVbargraph53 = FAUSTFLOAT(fRec61[0]); - output49[i] = FAUSTFLOAT(fTemp105); + output49[i] = FAUSTFLOAT(fTemp96); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; fRec6[1] = fRec6[0]; fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; + fRec0[1] = fRec0[0]; + fRec10[1] = fRec10[0]; fRec9[1] = fRec9[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec0[1] = fRec0[0]; - fRec10[1] = fRec10[0]; fRec14[1] = fRec14[0]; fRec13[1] = fRec13[0]; fRec12[1] = fRec12[0]; @@ -2025,7 +2087,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2257,7 +2318,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2320,7 +2381,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2349,11 +2410,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecLebedev502.cpp b/source/HOAUGens/HOADecLebedev502.cpp index 1f67ecccdd..94cbd48eb8 100644 --- a/source/HOAUGens/HOADecLebedev502.cpp +++ b/source/HOAUGens/HOADecLebedev502.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev502" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -614,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -636,139 +653,257 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fConst4; + double fConst5; double fRec9[2]; + double fRec10[2]; double fRec8[2]; double fRec7[2]; FAUSTFLOAT fVbargraph2; - double fConst4; - double fConst5; - double fRec12[2]; - double fRec13[2]; - double fRec11[2]; - double fRec10[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph3; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; double fRec14[2]; + double fRec13[2]; + double fRec12[2]; FAUSTFLOAT fVbargraph4; - double fRec20[2]; - double fRec21[2]; - double fRec19[2]; + double fConst11; + double fConst12; + double fRec17[2]; double fRec18[2]; + double fRec16[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph5; - double fRec0[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph6; double fRec22[2]; + double fRec21[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph7; - double fRec26[2]; - double fRec25[2]; - double fRec24[2]; + double fConst13; + double fRec19[2]; FAUSTFLOAT fVbargraph8; + double fConst14; + double fRec23[2]; + FAUSTFLOAT fVbargraph9; + double fRec24[2]; + FAUSTFLOAT fVbargraph10; + double fRec25[2]; + FAUSTFLOAT fVbargraph11; + double fConst15; + double fConst16; + double fConst17; double fRec29[2]; double fRec30[2]; double fRec28[2]; double fRec27[2]; - FAUSTFLOAT fVbargraph9; - double fRec23[2]; - FAUSTFLOAT fVbargraph10; - double fRec31[2]; - FAUSTFLOAT fVbargraph11; - double fRec32[2]; FAUSTFLOAT fVbargraph12; - double fRec33[2]; + double fConst18; + double fRec26[2]; FAUSTFLOAT fVbargraph13; + double fConst19; double fRec34[2]; + double fRec35[2]; + double fRec33[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph14; - double fRec38[2]; - double fRec39[2]; - double fRec37[2]; - double fRec36[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph15; - double fRec35[2]; + double fConst20; + double fConst21; + double fConst22; + double fRec36[2]; FAUSTFLOAT fVbargraph16; - double fRec40[2]; + double fRec37[2]; FAUSTFLOAT fVbargraph17; double fRec41[2]; - FAUSTFLOAT fVbargraph18; double fRec42[2]; + double fRec40[2]; + double fRec39[2]; + FAUSTFLOAT fVbargraph18; + double fRec38[2]; FAUSTFLOAT fVbargraph19; + double fConst23; + double fConst24; + double fConst25; double fRec43[2]; FAUSTFLOAT fVbargraph20; + double fConst26; double fRec44[2]; FAUSTFLOAT fVbargraph21; + double fConst27; + double fConst28; double fRec45[2]; FAUSTFLOAT fVbargraph22; + double fConst29; + double fConst30; double fRec46[2]; FAUSTFLOAT fVbargraph23; double fRec47[2]; FAUSTFLOAT fVbargraph24; + double fConst31; double fRec48[2]; FAUSTFLOAT fVbargraph25; double fRec49[2]; FAUSTFLOAT fVbargraph26; + double fConst32; double fRec50[2]; FAUSTFLOAT fVbargraph27; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; double fRec51[2]; FAUSTFLOAT fVbargraph28; + double fConst38; + double fConst39; double fRec52[2]; FAUSTFLOAT fVbargraph29; + double fConst40; + double fConst41; + double fConst42; double fRec53[2]; FAUSTFLOAT fVbargraph30; + double fConst43; + double fConst44; double fRec54[2]; FAUSTFLOAT fVbargraph31; + double fConst45; + double fConst46; double fRec55[2]; FAUSTFLOAT fVbargraph32; + double fConst47; double fRec56[2]; FAUSTFLOAT fVbargraph33; + double fConst48; + double fConst49; double fRec57[2]; FAUSTFLOAT fVbargraph34; + double fConst50; + double fConst51; + double fConst52; + double fConst53; double fRec58[2]; FAUSTFLOAT fVbargraph35; + double fConst54; + double fConst55; + double fConst56; + double fConst57; double fRec59[2]; FAUSTFLOAT fVbargraph36; + double fConst58; + double fConst59; double fRec60[2]; FAUSTFLOAT fVbargraph37; + double fConst60; + double fConst61; + double fConst62; double fRec61[2]; FAUSTFLOAT fVbargraph38; + double fConst63; + double fConst64; double fRec62[2]; FAUSTFLOAT fVbargraph39; + double fConst65; + double fConst66; + double fConst67; + double fConst68; double fRec63[2]; FAUSTFLOAT fVbargraph40; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; double fRec64[2]; FAUSTFLOAT fVbargraph41; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; double fRec65[2]; FAUSTFLOAT fVbargraph42; + double fConst81; + double fConst82; + double fConst83; + double fConst84; double fRec66[2]; FAUSTFLOAT fVbargraph43; + double fConst85; + double fConst86; + double fConst87; + double fConst88; double fRec67[2]; FAUSTFLOAT fVbargraph44; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; double fRec68[2]; FAUSTFLOAT fVbargraph45; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; double fRec69[2]; FAUSTFLOAT fVbargraph46; + double fConst101; double fRec70[2]; FAUSTFLOAT fVbargraph47; double fRec71[2]; FAUSTFLOAT fVbargraph48; + double fConst102; + double fConst103; + double fConst104; double fRec72[2]; FAUSTFLOAT fVbargraph49; + double fConst105; + double fConst106; + double fConst107; double fRec73[2]; FAUSTFLOAT fVbargraph50; + double fConst108; + double fConst109; double fRec74[2]; FAUSTFLOAT fVbargraph51; + double fConst110; double fRec75[2]; FAUSTFLOAT fVbargraph52; + double fConst111; + double fConst112; + double fConst113; double fRec76[2]; FAUSTFLOAT fVbargraph53; + double fConst114; + double fConst115; + double fConst116; double fRec77[2]; FAUSTFLOAT fVbargraph54; + double fConst117; double fRec78[2]; FAUSTFLOAT fVbargraph55; + double fConst118; + double fConst119; + double fConst120; double fRec79[2]; FAUSTFLOAT fVbargraph56; + double fConst121; double fRec80[2]; FAUSTFLOAT fVbargraph57; + double fConst122; + double fConst123; double fRec81[2]; FAUSTFLOAT fVbargraph58; @@ -779,36 +914,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev502"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1086,12 +1221,130 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); fConst4 = (510.0 / fConst0); fConst5 = (1020.0 / fConst0); + fConst6 = double(tgamma(1.5)); + fConst7 = double(tgamma(1.0)); + fConst8 = sqrt((3.0 * (fConst7 / double(tgamma(3.0))))); + fConst9 = (fConst6 * fConst8); + fConst10 = (0.02026373487753309 * fConst9); + fConst11 = (double(tgamma(2.5)) * sqrt((5.0 * (fConst7 / double(tgamma(5.0)))))); + fConst12 = (0.04052746975506618 * fConst11); + fConst13 = (0.0 - (3.1915382432114616 * fConst11)); + fConst14 = (0.0 - (1.5957691216057308 * fConst9)); + fConst15 = (0.025473109945013343 * fConst8); + fConst16 = sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))); + fConst17 = (0.054036626340088233 * fConst16); + fConst18 = (0.036024417560058836 * fConst11); + fConst19 = (0.0 - (1.595769121605731 * fConst11)); + fConst20 = (0.0 - (1.1283791670955128 * fConst9)); + fConst21 = (fConst6 * fConst16); + fConst22 = (0.0 - (2.3936536824085959 * fConst21)); + fConst23 = (0.025473109945013343 * fConst9); + fConst24 = (0.0 - (1.1283791670955126 * fConst9)); + fConst25 = (0.0 - (7.0866384831701748e-16 * fConst11)); + fConst26 = (0.0 - (1.128379167095513 * fConst9)); + fConst27 = (0.025473109945013332 * fConst9); + fConst28 = (0.0 - (1.417327696634035e-15 * fConst11)); + fConst29 = (fConst16 * (0.0 - (1.6925687506432687 * fConst6))); + fConst30 = (0.031925808815477283 * fConst29); + fConst31 = (0.0 - (1.4142135623730951 * fConst29)); + fConst32 = (0.033660754908870889 * fConst16); + fConst33 = (0.019434045907762623 * fConst8); + fConst34 = (0.0 - (0.92131773192356115 * fConst9)); + fConst35 = (0.0 - (2.1276921621409737 * fConst11)); + fConst36 = (0.0 - (1.5957691216057308 * fConst21)); + fConst37 = (0.0 - (4.7244256554467816e-16 * fConst11)); + fConst38 = (0.0 - (0.92131773192356148 * fConst9)); + fConst39 = (0.0 - (1.5957691216057313 * fConst21)); + fConst40 = (0.0 - (9.4488513108935631e-16 * fConst11)); + fConst41 = (0.033660754908870882 * fConst16); + fConst42 = (0.019434045907762616 * fConst8); + fConst43 = (fConst16 * (0.0 - (1.5957691216057308 * fConst6))); + fConst44 = (0.021093750000000005 * fConst43); + fConst45 = (0.019434045907762623 * fConst9); + fConst46 = (0.0 - fConst43); + fConst47 = (0.0 - (1.0000000000000002 * fConst43)); + fConst48 = (0.019434045907762616 * fConst9); + fConst49 = (0.021093749999999998 * fConst43); + fConst50 = (0.0 - (1.2884797242127563e-16 * fConst11)); + fConst51 = (0.026338897580074728 * fConst16); + fConst52 = (0.026338897580074724 * fConst16); + fConst53 = (0.011706176702255417 * fConst11); + fConst54 = (0.0097062489627452973 * fConst8); + fConst55 = (0.0 - (0.48114249349102017 * fConst9)); + fConst56 = (0.0 - (0.58027968058390089 * fConst11)); + fConst57 = (0.0 - (1.3056292813137786 * fConst21)); + fConst58 = (0.0 - (0.48114249349102034 * fConst9)); + fConst59 = (0.0 - (1.3056292813137791 * fConst21)); + fConst60 = (0.0 - (2.5769594484255127e-16 * fConst11)); + fConst61 = (0.0097062489627452939 * fConst8); + fConst62 = (0.026338897580074721 * fConst16); + fConst63 = (0.0087796325266915921 * fConst16); + fConst64 = (0.026338897580074738 * fConst16); + fConst65 = (0.0 - (2.3211187223356089 * fConst11)); + fConst66 = (0.026338897580074742 * fConst16); + fConst67 = (0.0087796325266915817 * fConst16); + fConst68 = (0.035118530106766334 * fConst11); + fConst69 = (0.029118746888235927 * fConst8); + fConst70 = (0.026338897580074745 * fConst16); + fConst71 = (0.0 - (0.48114249349102062 * fConst9)); + fConst72 = (0.0 - (1.7408390417517061 * fConst11)); + fConst73 = (0.0 - (0.43520976043792636 * fConst21)); + fConst74 = (0.0 - (2.3211187223356093 * fConst11)); + fConst75 = (0.0 - (1.443427480473062 * fConst9)); + fConst76 = (0.0 - (1.7408390417517088 * fConst11)); + fConst77 = (0.0 - (1.3056292813137793 * fConst21)); + fConst78 = (0.0097062489627453216 * fConst8); + fConst79 = (0.0087796325266915939 * fConst16); + fConst80 = (0.046824706809021746 * fConst11); + fConst81 = (0.0 - (0.48114249349102112 * fConst9)); + fConst82 = (0.0 - (1.4434274804730622 * fConst9)); + fConst83 = (0.0 - (0.43520976043792686 * fConst21)); + fConst84 = (0.0 - (1.3056292813137795 * fConst21)); + fConst85 = (0.035118530106766348 * fConst11); + fConst86 = (0.0 - (0.48114249349102095 * fConst9)); + fConst87 = (0.0 - (0.4352097604379267 * fConst21)); + fConst88 = (0.0 - (2.3211187223356085 * fConst11)); + fConst89 = (0.0 - (1.4434274804730625 * fConst9)); + fConst90 = (0.0 - (1.7408390417517057 * fConst11)); + fConst91 = (0.0 - (1.3056292813137798 * fConst21)); + fConst92 = (0.0 - (2.3211187223356098 * fConst11)); + fConst93 = (0.0097062489627453008 * fConst8); + fConst94 = (0.0087796325266915748 * fConst16); + fConst95 = (0.029118746888235913 * fConst8); + fConst96 = (0.026338897580074731 * fConst16); + fConst97 = (0.0 - (0.48114249349102228 * fConst9)); + fConst98 = (0.0 - (1.7408390417517114 * fConst11)); + fConst99 = (0.0 - (0.43520976043792792 * fConst21)); + fConst100 = (0.046824706809021698 * fConst11); + fConst101 = (fConst16 * (0.0 - (0.97315860881060223 * fConst6))); + fConst102 = (0.029118746888235927 * fConst9); + fConst103 = (0.027065369757419331 * fConst101); + fConst104 = (0.0 - (0.44721359549995782 * fConst101)); + fConst105 = (0.0 - (1.3416407864998736 * fConst101)); + fConst106 = (0.0090217899191397891 * fConst101); + fConst107 = (0.0097062489627453216 * fConst9); + fConst108 = (0.0 - (0.44721359549995832 * fConst101)); + fConst109 = (0.0 - (1.3416407864998738 * fConst101)); + fConst110 = (0.0 - (0.44721359549995815 * fConst101)); + fConst111 = (0.0097062489627453008 * fConst9); + fConst112 = (0.00902178991913977 * fConst101); + fConst113 = (0.0 - (1.3416407864998741 * fConst101)); + fConst114 = (0.0 - (0.44721359549995937 * fConst101)); + fConst115 = (0.027065369757419321 * fConst101); + fConst116 = (0.029118746888235913 * fConst9); + fConst117 = (fConst16 * (0.0 - (1.3056292813137786 * fConst6))); + fConst118 = (0.020173335537918873 * fConst117); + fConst119 = (0.0097062489627452973 * fConst9); + fConst120 = (0.0 - fConst117); + fConst121 = (0.0 - (1.0000000000000002 * fConst117)); + fConst122 = (0.0097062489627452939 * fConst9); + fConst123 = (0.020173335537918866 * fConst117); } @@ -1133,31 +1386,31 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec8[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec7[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec13[l10] = 0.0; + fRec0[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec11[l11] = 0.0; + fRec14[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec10[l12] = 0.0; + fRec13[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec16[l13] = 0.0; + fRec12[l13] = 0.0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { @@ -1165,47 +1418,47 @@ class mydsp : public dsp { } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec18[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec14[l16] = 0.0; + fRec16[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec20[l17] = 0.0; + fRec15[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec21[l18] = 0.0; + fRec11[l18] = 0.0; } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec19[l19] = 0.0; + fRec22[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec18[l20] = 0.0; + fRec21[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec0[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec22[l22] = 0.0; + fRec19[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec26[l23] = 0.0; + fRec23[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec25[l24] = 0.0; + fRec24[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec24[l25] = 0.0; + fRec25[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { @@ -1225,15 +1478,15 @@ class mydsp : public dsp { } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec23[l30] = 0.0; + fRec26[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec31[l31] = 0.0; + fRec34[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec32[l32] = 0.0; + fRec35[l32] = 0.0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { @@ -1241,15 +1494,15 @@ class mydsp : public dsp { } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec34[l34] = 0.0; + fRec32[l34] = 0.0; } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec38[l35] = 0.0; + fRec31[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec39[l36] = 0.0; + fRec36[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { @@ -1257,11 +1510,11 @@ class mydsp : public dsp { } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec36[l38] = 0.0; + fRec41[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec35[l39] = 0.0; + fRec42[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { @@ -1269,11 +1522,11 @@ class mydsp : public dsp { } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec41[l41] = 0.0; + fRec39[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec42[l42] = 0.0; + fRec38[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { @@ -1448,9 +1701,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1460,43 +1713,43 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35b4ab0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1f3d870", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3603730", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f848b0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35bffb0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1f48ba0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35c9950", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f68930", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x360ec60", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fdc210", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3638320", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fbc910", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35d81f0", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f57440", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35e3880", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fa8c50", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35eef10", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1f75c80", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1517,256 +1770,256 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph6, "osc", "/output1"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35f3f90", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f5c3e0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph7, "osc", "/output2"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35fa240", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "osc", "/output2 -70 6"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f7b3c0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph10, "osc", "/output3"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3613cd0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "osc", "/output3 -70 6"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f8a540", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph11, "osc", "/output4"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3619a50", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "osc", "/output4 -70 6"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f90450", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph12, "osc", "/output5"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x361f8b0", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "osc", "/output5 -70 6"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f95d10", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph13, "osc", "/output6"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3625070", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "osc", "/output6 -70 6"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1f9b110", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph14, "osc", "/output7"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x362cdc0", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "osc", "/output7 -70 6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1faff20", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph16, "osc", "/output8"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x363f170", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "osc", "/output8 -70 6"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fc1d90", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph17, "osc", "/output9"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3646300", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output9 -70 6"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fc94a0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph18, "osc", "/output10"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x364d340", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output10 -70 6"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x1fcf7a0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph19, "osc", "/output11"); + ui_interface->declare(&fVbargraph19, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36542d0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1fe1860", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph20, "osc", "/output12"); + ui_interface->declare(&fVbargraph20, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x365a570", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1fe9b80", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph21, "osc", "/output13"); + ui_interface->declare(&fVbargraph21, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36608e0", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ff1310", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph22, "osc", "/output14"); + ui_interface->declare(&fVbargraph22, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36670e0", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x1ff8ad0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph23, "osc", "/output15"); + ui_interface->declare(&fVbargraph23, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x366d080", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2000190", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph24, "osc", "/output16"); + ui_interface->declare(&fVbargraph24, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3673880", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20063f0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph25, "osc", "/output17"); + ui_interface->declare(&fVbargraph25, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x367a370", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x200d200", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph26, "osc", "/output18"); + ui_interface->declare(&fVbargraph26, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3680b50", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2013800", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph27, "osc", "/output19"); + ui_interface->declare(&fVbargraph27, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x368a600", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x201d320", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph28, "osc", "/output20"); + ui_interface->declare(&fVbargraph28, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3692520", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20276e0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph29, "osc", "/output21"); + ui_interface->declare(&fVbargraph29, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3699740", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2030df0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph30, "osc", "/output22"); + ui_interface->declare(&fVbargraph30, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36a19b0", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x203a2c0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph31, "osc", "/output23"); + ui_interface->declare(&fVbargraph31, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36a8bf0", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2042660", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph32, "osc", "/output24"); + ui_interface->declare(&fVbargraph32, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36af910", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x204a520", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph33, "osc", "/output25"); + ui_interface->declare(&fVbargraph33, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36b68f0", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2051fd0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph34, "osc", "/output26"); + ui_interface->declare(&fVbargraph34, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36bd7d0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x205a1c0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph35, "osc", "/output27"); + ui_interface->declare(&fVbargraph35, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36c61b0", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2064a70", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph36, "osc", "/output28"); + ui_interface->declare(&fVbargraph36, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36cc910", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x206d520", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph37, "osc", "/output29"); + ui_interface->declare(&fVbargraph37, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36d3cd0", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2075a40", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph38, "osc", "/output30"); + ui_interface->declare(&fVbargraph38, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36db350", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x207df30", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph39, "osc", "/output31"); + ui_interface->declare(&fVbargraph39, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36e4380", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2087860", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph40, "osc", "/output32"); + ui_interface->declare(&fVbargraph40, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36ec350", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2091110", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph41, "osc", "/output33"); + ui_interface->declare(&fVbargraph41, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36f3e40", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x209b730", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph42, "osc", "/output34"); + ui_interface->declare(&fVbargraph42, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36fb830", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20a5a20", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph43, "osc", "/output35"); + ui_interface->declare(&fVbargraph43, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3703300", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20af840", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph44, "osc", "/output36"); + ui_interface->declare(&fVbargraph44, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x370aca0", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20b9190", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph45, "osc", "/output37"); + ui_interface->declare(&fVbargraph45, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3712550", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20c3b30", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph46, "osc", "/output38"); + ui_interface->declare(&fVbargraph46, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x371ac30", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20ce370", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph47, "osc", "/output39"); + ui_interface->declare(&fVbargraph47, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3721560", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20d5ee0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph48, "osc", "/output40"); + ui_interface->declare(&fVbargraph48, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3727b80", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20dcc60", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph49, "osc", "/output41"); + ui_interface->declare(&fVbargraph49, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x372e460", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20e4ba0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph50, "osc", "/output42"); + ui_interface->declare(&fVbargraph50, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3735030", &fVbargraph50, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20ecbc0", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph51, "osc", "/output43"); + ui_interface->declare(&fVbargraph51, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x373b710", &fVbargraph51, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20f4660", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph52, "osc", "/output44"); + ui_interface->declare(&fVbargraph52, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3742290", &fVbargraph52, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x20fbad0", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph53, "osc", "/output45"); + ui_interface->declare(&fVbargraph53, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3748d10", &fVbargraph53, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2103d90", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph54, "osc", "/output46"); + ui_interface->declare(&fVbargraph54, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x374f870", &fVbargraph54, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x210c130", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph55, "osc", "/output47"); + ui_interface->declare(&fVbargraph55, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37564e0", &fVbargraph55, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2113de0", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph56, "osc", "/output48"); + ui_interface->declare(&fVbargraph56, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x375ce40", &fVbargraph56, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x211bfa0", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph57, "osc", "/output49"); + ui_interface->declare(&fVbargraph57, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3763c40", &fVbargraph57, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x21236a0", &fVbargraph57, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph58, "osc", "/output50"); + ui_interface->declare(&fVbargraph58, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x376ad00", &fVbargraph58, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x212b6b0", &fVbargraph58, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1861,376 +2114,319 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.021994295969128601 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); + double fTemp5 = (fRec3[0] * double(input6[i])); fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow8 * ((fSlow3 * fTemp5) - (fSlow9 * fRec9[0]))); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec8[0] = (fSlow11 * ((fSlow3 * fTemp5) - ((fSlow13 * fRec9[0]) + (fSlow12 * fRec10[0])))); double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (1.3467622079046435e-18 * fTemp6); - double fTemp8 = (fRec3[0] * double(input6[i])); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec13[0] = (fRec13[1] + fRec12[1]); - fRec11[0] = (fSlow11 * ((fSlow3 * fTemp8) - ((fSlow13 * fRec12[0]) + (fSlow12 * fRec13[0])))); - double fTemp9 = (fRec11[0] + (fSlow4 * fTemp8)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = (0.028394513999997331 * fTemp9); - double fTemp11 = (fRec3[0] * double(input7[i])); - fRec16[0] = (fRec16[1] + fRec15[1]); + double fTemp7 = (0.028394513999997331 * fTemp6); + double fTemp8 = (fRec1[0] * ((fTemp1 + fTemp4) + fTemp7)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph3 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (fRec3[0] * double(input3[i])); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec13[0] = (fSlow8 * ((fSlow3 * fTemp9) - (fSlow9 * fRec14[0]))); + double fTemp10 = (fRec13[0] + (fSlow4 * fTemp9)); + fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph4 = FAUSTFLOAT(fRec12[0]); + double fTemp11 = (fRec3[0] * double(input8[i])); fRec17[0] = (fRec17[1] + fRec16[1]); - fRec15[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec16[0]) + (fSlow12 * fRec17[0])))); - double fTemp12 = (fRec15[0] + (fSlow4 * fTemp11)); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph4 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = (3.0114518464024883e-18 * fTemp12); - double fTemp14 = (fRec3[0] * double(input8[i])); - fRec20[0] = (fRec20[1] + fRec19[1]); - fRec21[0] = (fRec21[1] + fRec20[1]); - fRec19[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec20[0]) + (fSlow12 * fRec21[0])))); - double fTemp15 = (fRec19[0] + (fSlow4 * fTemp14)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph5 = FAUSTFLOAT(fRec18[0]); - double fTemp16 = (9.2199121612079837e-35 * fTemp15); - double fTemp17 = (fRec1[0] * (((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph6 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.021994295969128601 * fTemp6); - double fTemp19 = (0.024590370452110585 * fTemp15); - double fTemp20 = (0.014197256999998666 * fTemp9); - double fTemp21 = (fRec1[0] * (((fTemp1 + fTemp18) + fTemp19) - fTemp20)); - fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph7 = FAUSTFLOAT(fRec22[0]); - output1[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (fRec3[0] * double(input1[i])); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec25[0] = (fSlow8 * ((fSlow3 * fTemp22) - (fSlow9 * fRec26[0]))); - double fTemp23 = (fRec25[0] + (fSlow4 * fTemp22)); - fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph8 = FAUSTFLOAT(fRec24[0]); - double fTemp24 = (0.021994295969128601 * fTemp23); - double fTemp25 = (fTemp1 + fTemp7); - double fTemp26 = (fRec3[0] * double(input4[i])); + fRec18[0] = (fRec18[1] + fRec17[1]); + fRec16[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec17[0]) + (fSlow12 * fRec18[0])))); + double fTemp12 = (fRec16[0] + (fSlow4 * fTemp11)); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph5 = FAUSTFLOAT(fRec15[0]); + double fTemp13 = (fConst12 * fTemp12); + double fTemp14 = (0.014197256999998666 * fTemp6); + double fTemp15 = (fRec1[0] * (((fTemp1 + (fConst10 * fTemp10)) + fTemp13) - fTemp14)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph6 = FAUSTFLOAT(fRec11[0]); + output1[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (fRec3[0] * double(input1[i])); + fRec22[0] = (fRec22[1] + fRec21[1]); + fRec21[0] = (fSlow8 * ((fSlow3 * fTemp16) - (fSlow9 * fRec22[0]))); + double fTemp17 = (fRec21[0] + (fSlow4 * fTemp16)); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph7 = FAUSTFLOAT(fRec20[0]); + double fTemp18 = (fConst13 * fTemp12); + double fTemp19 = (fRec1[0] * (((fConst10 * fTemp17) + (0.012698412698412698 * (fTemp0 + fTemp18))) - fTemp14)); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph8 = FAUSTFLOAT(fRec19[0]); + output2[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (fRec1[0] * ((fTemp13 + (0.012698412698412698 * (fTemp0 + (fConst14 * fTemp10)))) - fTemp14)); + fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph9 = FAUSTFLOAT(fRec23[0]); + output3[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (fRec1[0] * ((0.012698412698412698 * (fTemp18 + (fTemp0 + (fConst14 * fTemp17)))) - fTemp14)); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph10 = FAUSTFLOAT(fRec24[0]); + output4[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (fRec1[0] * ((fTemp1 + fTemp7) - fTemp4)); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph11 = FAUSTFLOAT(fRec25[0]); + output5[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (fRec3[0] * double(input7[i])); fRec29[0] = (fRec29[1] + fRec28[1]); fRec30[0] = (fRec30[1] + fRec29[1]); - fRec28[0] = (fSlow11 * ((fSlow3 * fTemp26) - ((fSlow13 * fRec29[0]) + (fSlow12 * fRec30[0])))); - double fTemp27 = (fRec28[0] + (fSlow4 * fTemp26)); - fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph9 = FAUSTFLOAT(fRec27[0]); - double fTemp28 = (fRec1[0] * (((fTemp24 + fTemp25) + (3.0114518464024883e-18 * fTemp27)) - (fTemp20 + fTemp19))); - fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); - fVbargraph10 = FAUSTFLOAT(fRec23[0]); - output2[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (fRec1[0] * (((2.6935244158092871e-18 * fTemp23) + (fTemp1 + fTemp19)) - ((6.0229036928049765e-18 * fTemp27) + (fTemp18 + fTemp20)))); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph11 = FAUSTFLOAT(fRec31[0]); - output3[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fRec1[0] * ((fTemp1 + (9.0343555392074636e-18 * fTemp27)) - (fTemp24 + (fTemp19 + (fTemp20 + (4.0402866237139308e-18 * fTemp6)))))); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph12 = FAUSTFLOAT(fRec32[0]); - output4[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (fRec1[0] * ((fTemp16 + (fTemp10 + fTemp25)) - (fTemp4 + fTemp13))); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); - fVbargraph13 = FAUSTFLOAT(fRec33[0]); - output5[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (0.022574955908289243 * fTemp0); - double fTemp33 = (0.027648561470568499 * fTemp3); - double fTemp34 = (fTemp32 + fTemp33); - double fTemp35 = (0.027648561470568506 * fTemp6); - double fTemp36 = (0.012619783999998805 * fTemp9); - double fTemp37 = (0.043716214137085485 * fTemp12); - double fTemp38 = (0.021858107068542749 * fTemp15); - double fTemp39 = (fRec1[0] * ((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph14 = FAUSTFLOAT(fRec34[0]); - output6[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (fRec3[0] * double(input5[i])); - fRec38[0] = (fRec38[1] + fRec37[1]); - fRec39[0] = (fRec39[1] + fRec38[1]); - fRec37[0] = (fSlow11 * ((fSlow3 * fTemp40) - ((fSlow13 * fRec38[0]) + (fSlow12 * fRec39[0])))); - double fTemp41 = (fRec37[0] + (fSlow4 * fTemp40)); - fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph15 = FAUSTFLOAT(fRec36[0]); - double fTemp42 = (0.043716214137085485 * fTemp41); - double fTemp43 = (2.6768460856911014e-18 * fTemp27); - double fTemp44 = (0.027648561470568506 * fTemp23); - double fTemp45 = (1.6929861152980278e-18 * fTemp6); - double fTemp46 = (2.6768460856911007e-18 * fTemp12); - double fTemp47 = (fRec1[0] * ((fTemp42 + (fTemp43 + (fTemp44 + ((fTemp36 + (fTemp34 + fTemp45)) + fTemp46)))) - fTemp38)); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); - fVbargraph16 = FAUSTFLOAT(fRec35[0]); - output7[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (5.3536921713822013e-18 * fTemp41); - double fTemp49 = (3.3859722305960555e-18 * fTemp23); - double fTemp50 = (fTemp34 + fTemp36); - double fTemp51 = (5.3536921713822029e-18 * fTemp27); - double fTemp52 = (fRec1[0] * ((fTemp48 + (fTemp49 + (fTemp38 + fTemp50))) - (fTemp51 + (fTemp35 + fTemp37)))); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); - fVbargraph17 = FAUSTFLOAT(fRec40[0]); - output8[i] = FAUSTFLOAT(fTemp52); - double fTemp53 = (8.0305382570733035e-18 * fTemp27); - double fTemp54 = (5.0789583458940831e-18 * fTemp6); - double fTemp55 = (8.0305382570733005e-18 * fTemp12); - double fTemp56 = (fRec1[0] * ((fTemp50 + fTemp53) - (fTemp42 + (fTemp44 + (fTemp38 + (fTemp54 + fTemp55)))))); - fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); - fVbargraph18 = FAUSTFLOAT(fRec41[0]); - output9[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (0.043716214137085485 * fTemp27); - double fTemp58 = (0.027648561470568499 * fTemp23); - double fTemp59 = (fTemp32 + fTemp35); - double fTemp60 = (0.025239567999997631 * fTemp9); - double fTemp61 = (fRec1[0] * ((fTemp57 + (fTemp58 + (fTemp59 + (2.6768460856911007e-18 * fTemp15)))) - fTemp60)); - fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); - fVbargraph19 = FAUSTFLOAT(fRec42[0]); - output10[i] = FAUSTFLOAT(fTemp61); - double fTemp62 = (fRec1[0] * ((fTemp32 + fTemp44) - (fTemp57 + ((fTemp60 + (0.027648561470568499 * fTemp6)) + (8.0305382570733005e-18 * fTemp15))))); - fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fRec28[0] = (fSlow11 * ((fSlow3 * fTemp23) - ((fSlow13 * fRec29[0]) + (fSlow12 * fRec30[0])))); + double fTemp24 = (fRec28[0] + (fSlow4 * fTemp23)); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph12 = FAUSTFLOAT(fRec27[0]); + double fTemp25 = (0.022574955908289243 * fTemp0); + double fTemp26 = (0.027648561470568499 * fTemp3); + double fTemp27 = (0.01261978399999881 * fTemp6); + double fTemp28 = (fConst18 * fTemp12); + double fTemp29 = (fRec1[0] * ((fConst6 * ((fConst15 * fTemp10) + (fConst17 * fTemp24))) + (((fTemp25 + fTemp26) + fTemp27) + fTemp28))); + fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph13 = FAUSTFLOAT(fRec26[0]); + output6[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fConst19 * fTemp12); + double fTemp31 = (0.022574955908289243 * (fTemp0 + fTemp30)); + double fTemp32 = (fRec3[0] * double(input5[i])); + fRec34[0] = (fRec34[1] + fRec33[1]); + fRec35[0] = (fRec35[1] + fRec34[1]); + fRec33[0] = (fSlow11 * ((fSlow3 * fTemp32) - ((fSlow13 * fRec34[0]) + (fSlow12 * fRec35[0])))); + double fTemp33 = (fRec33[0] + (fSlow4 * fTemp32)); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph14 = FAUSTFLOAT(fRec32[0]); + double fTemp34 = (fTemp26 + fTemp27); + double fTemp35 = (fRec1[0] * (fTemp31 + ((fConst6 * ((fConst15 * fTemp17) + (fConst17 * fTemp33))) + fTemp34))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph15 = FAUSTFLOAT(fRec31[0]); + output7[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (fTemp0 + (fConst20 * fTemp10)); + double fTemp37 = (fRec1[0] * ((0.022574955908289243 * (fTemp36 + (fConst22 * fTemp24))) + (fTemp28 + fTemp34))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph16 = FAUSTFLOAT(fRec36[0]); + output8[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (fTemp0 + (fConst20 * fTemp17)); + double fTemp39 = (fRec1[0] * (fTemp34 + (0.022574955908289243 * (fTemp30 + (fTemp38 + (fConst22 * fTemp33)))))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph17 = FAUSTFLOAT(fRec37[0]); + output9[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (fRec3[0] * double(input4[i])); + fRec41[0] = (fRec41[1] + fRec40[1]); + fRec42[0] = (fRec42[1] + fRec41[1]); + fRec40[0] = (fSlow11 * ((fSlow3 * fTemp40) - ((fSlow13 * fRec41[0]) + (fSlow12 * fRec42[0])))); + double fTemp41 = (fRec40[0] + (fSlow4 * fTemp40)); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph18 = FAUSTFLOAT(fRec39[0]); + double fTemp42 = (0.025239567999997631 * fTemp6); + double fTemp43 = (fRec1[0] * (((fTemp25 + (fConst9 * ((0.025473109945013343 * fTemp10) + (0.025473109945013336 * fTemp17)))) + (fConst11 * ((1.5998055129555246e-17 * fTemp12) + (0.072048835120117657 * fTemp41)))) - fTemp42)); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph19 = FAUSTFLOAT(fRec38[0]); + output10[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (fConst23 * fTemp17); + double fTemp45 = (fConst13 * fTemp41); + double fTemp46 = (fRec1[0] * ((fTemp44 + (0.022574955908289243 * (((fTemp0 + (fConst24 * fTemp10)) + fTemp45) + (fConst25 * fTemp12)))) - fTemp42)); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph20 = FAUSTFLOAT(fRec43[0]); - output11[i] = FAUSTFLOAT(fTemp62); - double fTemp63 = (fRec1[0] * ((fTemp57 + (fTemp32 + (1.3384230428455503e-17 * fTemp15))) - (fTemp58 + (fTemp35 + fTemp60)))); - fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + output11[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (fRec1[0] * (((0.022574955908289243 * ((fTemp0 + (fConst24 * fTemp17)) + (fConst26 * fTemp10))) + (fConst11 * ((3.1996110259110492e-17 * fTemp12) + (0.072048835120117671 * fTemp41)))) - fTemp42)); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph21 = FAUSTFLOAT(fRec44[0]); - output12[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (fRec1[0] * ((fTemp32 + (0.027648561470568496 * fTemp6)) - (fTemp57 + (fTemp44 + (fTemp60 + (1.8737922599837705e-17 * fTemp15)))))); - fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + output12[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (fRec1[0] * (((fConst27 * fTemp10) + (0.022574955908289243 * ((fTemp45 + (fTemp0 + (fConst26 * fTemp17))) + (fConst28 * fTemp12)))) - fTemp42)); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph22 = FAUSTFLOAT(fRec45[0]); - output13[i] = FAUSTFLOAT(fTemp64); - double fTemp65 = (fRec1[0] * ((fTemp38 + (fTemp36 + fTemp59)) - (fTemp33 + fTemp37))); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + output13[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (fRec1[0] * (((fConst30 * fTemp24) + (fTemp28 + ((fConst23 * fTemp10) + (fTemp25 + fTemp27)))) - fTemp26)); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph23 = FAUSTFLOAT(fRec46[0]); - output14[i] = FAUSTFLOAT(fTemp65); - double fTemp66 = (fRec1[0] * ((fTemp43 + (fTemp44 + (fTemp36 + (fTemp32 + fTemp45)))) - (fTemp42 + (fTemp38 + (fTemp33 + fTemp46))))); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + output14[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (fRec1[0] * (((fConst30 * fTemp33) + (fTemp31 + (fTemp27 + fTemp44))) - fTemp26)); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph24 = FAUSTFLOAT(fRec47[0]); - output15[i] = FAUSTFLOAT(fTemp66); - double fTemp67 = (fTemp32 + fTemp36); - double fTemp68 = (fRec1[0] * ((fTemp49 + (fTemp38 + (fTemp37 + fTemp67))) - (fTemp48 + (fTemp51 + (fTemp33 + fTemp35))))); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + output15[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (fRec1[0] * (((0.022574955908289243 * (fTemp36 + (fConst31 * fTemp24))) + (fTemp27 + fTemp28)) - fTemp26)); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph25 = FAUSTFLOAT(fRec48[0]); - output16[i] = FAUSTFLOAT(fTemp68); - double fTemp69 = (fRec1[0] * ((fTemp42 + (fTemp53 + (fTemp55 + fTemp67))) - (fTemp44 + (fTemp38 + (fTemp33 + fTemp54))))); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + output16[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (fRec1[0] * ((fTemp27 + (0.022574955908289243 * (fTemp30 + (fTemp38 + (fConst31 * fTemp33))))) - fTemp26)); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph26 = FAUSTFLOAT(fRec49[0]); - output17[i] = FAUSTFLOAT(fTemp69); - double fTemp70 = (fTemp0 + fTemp3); - double fTemp71 = (0.021093750000000001 * fTemp70); - double fTemp72 = (0.027231914153020904 * fTemp41); - double fTemp73 = (0.027231914153020897 * fTemp27); - double fTemp74 = (0.021093749999999994 * fTemp23); - double fTemp75 = (5.236595479505967e-18 * fTemp9); - double fTemp76 = ((0.021093749999999998 * fTemp6) + fTemp75); - double fTemp77 = (0.027231914153020911 * fTemp12); - double fTemp78 = (1.6674738251076273e-18 * fTemp15); - double fTemp79 = (fRec1[0] * (fTemp71 + (fTemp72 + (fTemp73 + (fTemp74 + ((fTemp76 + fTemp77) + fTemp78)))))); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + output17[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (fConst11 * ((9.9655853669580557e-18 * fTemp12) + (0.044881006545161167 * fTemp41))); + double fTemp54 = ((0.019434045907762623 * fTemp10) + (0.019434045907762619 * fTemp17)); + double fTemp55 = (fConst32 * fTemp33); + double fTemp56 = (fTemp0 + fTemp3); + double fTemp57 = (5.236595479505967e-18 * fTemp6); + double fTemp58 = (fRec1[0] * (fTemp53 + ((fConst6 * (((fConst8 * fTemp54) + fTemp55) + (fConst32 * fTemp24))) + ((0.021093750000000001 * fTemp56) + fTemp57)))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); fVbargraph27 = FAUSTFLOAT(fRec50[0]); - output18[i] = FAUSTFLOAT(fTemp79); - double fTemp80 = (0.027231914153020911 * fTemp41); - double fTemp81 = (0.021093749999999998 * fTemp23); - double fTemp82 = (0.021093749999999994 * fTemp6); - double fTemp83 = (0.027231914153020904 * fTemp12); - double fTemp84 = (5.0024214753228816e-18 * fTemp15); - double fTemp85 = (fRec1[0] * ((fTemp71 + (fTemp80 + (fTemp75 + fTemp81))) - (fTemp73 + ((fTemp82 + fTemp83) + fTemp84)))); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + output18[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = (fConst34 * fTemp10); + double fTemp60 = (fConst35 * fTemp41); + double fTemp61 = (fConst37 * fTemp12); + double fTemp62 = (fRec1[0] * ((fTemp57 + (fConst6 * (fTemp55 + (fConst33 * fTemp17)))) + (0.021093750000000001 * ((((fTemp56 + fTemp59) + fTemp60) + (fConst36 * fTemp24)) + fTemp61)))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); fVbargraph28 = FAUSTFLOAT(fRec51[0]); - output19[i] = FAUSTFLOAT(fTemp85); - double fTemp86 = (8.3373691255381378e-18 * fTemp15); - double fTemp87 = (fRec1[0] * ((fTemp73 + (fTemp75 + fTemp86)) - ((0.021093750000000001 * (fTemp6 - fTemp70)) + (fTemp72 + (fTemp74 + fTemp77))))); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + output19[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = (fConst11 * ((1.9931170733916111e-17 * fTemp12) + (0.044881006545161174 * fTemp41))); + double fTemp64 = (fTemp0 + (fConst34 * fTemp17)); + double fTemp65 = (fConst38 * fTemp10); + double fTemp66 = (fRec1[0] * (fTemp63 + (fTemp57 + (0.021093750000000001 * ((((fTemp3 + fTemp64) + fTemp65) + (fConst36 * fTemp33)) + (fConst39 * fTemp24)))))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); fVbargraph29 = FAUSTFLOAT(fRec52[0]); - output20[i] = FAUSTFLOAT(fTemp87); - double fTemp88 = (fTemp0 - fTemp23); - double fTemp89 = (fTemp75 + (0.021093749999999991 * fTemp6)); - double fTemp90 = (0.027231914153020901 * fTemp12); - double fTemp91 = (1.167231677575339e-17 * fTemp15); - double fTemp92 = (fRec1[0] * (((0.021093750000000001 * (fTemp3 + fTemp88)) + (fTemp89 + fTemp90)) - (fTemp80 + (fTemp73 + fTemp91)))); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + output20[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = (fTemp0 + (fConst38 * fTemp17)); + double fTemp68 = (fConst40 * fTemp12); + double fTemp69 = (fRec1[0] * ((0.021093750000000001 * (((fTemp60 + (fTemp3 + fTemp67)) + (fConst39 * fTemp33)) + fTemp68)) + (fTemp57 + (fConst6 * ((fConst41 * fTemp24) + (fConst42 * fTemp10)))))); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); fVbargraph30 = FAUSTFLOAT(fRec53[0]); - output21[i] = FAUSTFLOAT(fTemp92); - double fTemp93 = (fTemp0 - fTemp3); - double fTemp94 = (0.021093750000000001 * fTemp93); - double fTemp95 = (fRec1[0] * ((fTemp94 + (fTemp73 + (fTemp74 + (fTemp76 + fTemp78)))) - (fTemp72 + fTemp77))); - fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + output21[i] = FAUSTFLOAT(fTemp69); + double fTemp70 = (fTemp0 - fTemp3); + double fTemp71 = (fRec1[0] * ((fConst44 * fTemp24) + ((0.021093750000000001 * (fTemp70 + (fConst43 * fTemp33))) + (fTemp53 + ((fConst9 * fTemp54) + fTemp57))))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); fVbargraph31 = FAUSTFLOAT(fRec54[0]); - output22[i] = FAUSTFLOAT(fTemp95); - double fTemp96 = (fRec1[0] * ((fTemp94 + (fTemp81 + (fTemp75 + fTemp83))) - (fTemp80 + (fTemp73 + (fTemp82 + fTemp84))))); - fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + output22[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = (fRec1[0] * (((fConst44 * fTemp33) + (fTemp57 + (fConst45 * fTemp17))) + (0.021093750000000001 * (fTemp61 + ((fTemp60 + (fTemp59 + fTemp70)) + (fConst46 * fTemp24)))))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); fVbargraph32 = FAUSTFLOAT(fRec55[0]); - output23[i] = FAUSTFLOAT(fTemp96); - double fTemp97 = (fRec1[0] * ((fTemp72 + (fTemp73 + (fTemp86 + (fTemp75 + fTemp77)))) - (fTemp74 + (0.021093750000000001 * (fTemp6 - fTemp93))))); - fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + output23[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = (fRec1[0] * ((0.021093750000000001 * (((fTemp65 - (fTemp3 - fTemp64)) + (fConst46 * fTemp33)) + (fConst47 * fTemp24))) + (fTemp57 + fTemp63))); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); fVbargraph33 = FAUSTFLOAT(fRec56[0]); - output24[i] = FAUSTFLOAT(fTemp97); - double fTemp98 = (fRec1[0] * ((fTemp80 + fTemp89) - ((0.021093750000000001 * (fTemp3 - fTemp88)) + (fTemp73 + (fTemp90 + fTemp91))))); - fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + output24[i] = FAUSTFLOAT(fTemp73); + double fTemp74 = (fRec1[0] * (((fTemp57 + (fConst48 * fTemp10)) + (fConst49 * fTemp24)) + (0.021093750000000001 * (fTemp68 + ((fTemp60 - (fTemp3 - fTemp67)) + (fConst47 * fTemp33)))))); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); fVbargraph34 = FAUSTFLOAT(fRec57[0]); - output25[i] = FAUSTFLOAT(fTemp98); - double fTemp99 = (0.021308452520676528 * (fTemp12 + fTemp41)); - double fTemp100 = (0.010535180889746065 * (fTemp6 + fTemp23)); - double fTemp101 = (0.0071028175068921654 * fTemp27); - double fTemp102 = (0.02017333553791887 * fTemp0); - double fTemp103 = (0.031605542669238249 * fTemp3); - double fTemp104 = (fTemp102 + fTemp103); - double fTemp105 = (0.032806508796871948 * fTemp9); - double fTemp106 = (fTemp104 + fTemp105); - double fTemp107 = (1.1422201709353029e-18 * fTemp15); - double fTemp108 = (fRec1[0] * ((fTemp99 + (fTemp100 + (fTemp101 + fTemp106))) - fTemp107)); - fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); + output25[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = (fConst50 * fTemp12); + double fTemp76 = (0.02017333553791887 * (fTemp0 + fTemp75)); + double fTemp77 = ((0.0097062489627452956 * fTemp10) + (0.0097062489627452973 * fTemp17)); + double fTemp78 = (fConst51 * fTemp33); + double fTemp79 = (fConst53 * fTemp41); + double fTemp80 = (0.031605542669238249 * fTemp3); + double fTemp81 = (0.032806508796871948 * fTemp6); + double fTemp82 = (fTemp80 + fTemp81); + double fTemp83 = (fRec1[0] * (fTemp76 + ((fConst6 * (((fConst8 * fTemp77) + fTemp78) + (fConst52 * fTemp24))) + (fTemp79 + fTemp82)))); + fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); fVbargraph35 = FAUSTFLOAT(fRec58[0]); - output26[i] = FAUSTFLOAT(fTemp108); - double fTemp109 = (0.021308452520676528 * (fTemp12 - fTemp41)); - double fTemp110 = (0.010535180889746065 * (fTemp6 - fTemp23)); - double fTemp111 = (1.3047664087114909e-18 * fTemp15); - double fTemp112 = (fRec1[0] * (fTemp106 - (fTemp109 + (fTemp110 + (fTemp101 + fTemp111))))); - fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp112)))))); + output26[i] = FAUSTFLOAT(fTemp83); + double fTemp84 = (fConst56 * fTemp41); + double fTemp85 = ((fTemp0 + (fConst55 * fTemp10)) + fTemp84); + double fTemp86 = (fRec1[0] * ((fTemp82 + (fConst6 * (fTemp78 + (fConst54 * fTemp17)))) + (0.02017333553791887 * (fTemp75 + (fTemp85 + (fConst57 * fTemp24)))))); + fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); fVbargraph36 = FAUSTFLOAT(fRec59[0]); - output27[i] = FAUSTFLOAT(fTemp112); - double fTemp113 = (2.1746106811858183e-18 * fTemp15); - double fTemp114 = (0.021308452520676528 * fTemp41); - double fTemp115 = (0.010535180889746065 * fTemp23); - double fTemp116 = (0.010535180889746067 * fTemp6); - double fTemp117 = (0.021308452520676532 * fTemp12); - double fTemp118 = (fRec1[0] * ((fTemp101 + (fTemp106 + fTemp113)) - (fTemp114 + (fTemp115 + (fTemp116 + fTemp117))))); - fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp118)))))); + output27[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = (fConst11 * ((5.19858676206982e-18 * fTemp12) + (0.011706176702255421 * fTemp41))); + double fTemp88 = ((fTemp0 + (fConst55 * fTemp17)) + (fConst58 * fTemp10)); + double fTemp89 = (fRec1[0] * (fTemp87 + (fTemp82 + (0.02017333553791887 * ((fTemp88 + (fConst57 * fTemp33)) + (fConst59 * fTemp24)))))); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); fVbargraph37 = FAUSTFLOAT(fRec60[0]); - output28[i] = FAUSTFLOAT(fTemp118); - double fTemp119 = (0.010535180889746063 * fTemp6); - double fTemp120 = (0.021308452520676525 * fTemp12); - double fTemp121 = (0.021308452520676532 * fTemp41); - double fTemp122 = (0.010535180889746067 * fTemp23); - double fTemp123 = (3.0444549536601452e-18 * fTemp15); - double fTemp124 = (fRec1[0] * (((fTemp105 + (fTemp104 + fTemp119)) + fTemp120) - (fTemp121 + (fTemp101 + (fTemp122 + fTemp123))))); - fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp124)))))); + output28[i] = FAUSTFLOAT(fTemp89); + double fTemp90 = (fTemp84 + (fTemp0 + (fConst58 * fTemp17))); + double fTemp91 = (fConst60 * fTemp12); + double fTemp92 = (fRec1[0] * ((0.02017333553791887 * ((fTemp90 + (fConst59 * fTemp33)) + fTemp91)) + (fTemp82 + (fConst6 * ((fConst61 * fTemp10) + (fConst62 * fTemp24)))))); + fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); fVbargraph38 = FAUSTFLOAT(fRec61[0]); - output29[i] = FAUSTFLOAT(fTemp124); - double fTemp125 = (0.0071028175068921914 * fTemp41); - double fTemp126 = (0.021308452520676577 * fTemp27); - double fTemp127 = (0.010535180889746094 * fTemp23); - double fTemp128 = (0.010535180889746075 * fTemp3); - double fTemp129 = (fTemp102 + fTemp128); - double fTemp130 = (0.031605542669238242 * fTemp6); - double fTemp131 = (0.021308452520676542 * fTemp12); - double fTemp132 = (0.028411270027568724 * fTemp15); - double fTemp133 = (0.01640325439843596 * fTemp9); - double fTemp134 = (fRec1[0] * ((fTemp125 + (fTemp126 + (fTemp127 + (((fTemp129 + fTemp130) + fTemp131) + fTemp132)))) - fTemp133)); - fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp134)))))); + output29[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = (fConst11 * ((0.046824706809021746 * fTemp12) + (0.035118530106766375 * fTemp41))); + double fTemp94 = (0.02017333553791887 * fTemp0); + double fTemp95 = (0.010535180889746075 * fTemp3); + double fTemp96 = ((0.029118746888235916 * fTemp10) + (0.0097062489627453199 * fTemp17)); + double fTemp97 = (0.01640325439843596 * fTemp6); + double fTemp98 = (fRec1[0] * ((fTemp93 + ((fTemp94 + fTemp95) + (fConst6 * (((fConst8 * fTemp96) + (fConst63 * fTemp33)) + (fConst64 * fTemp24))))) - fTemp97)); + fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); fVbargraph39 = FAUSTFLOAT(fRec62[0]); - output30[i] = FAUSTFLOAT(fTemp134); - double fTemp135 = (0.021308452520676546 * fTemp41); - double fTemp136 = (0.021308452520676556 * fTemp27); - double fTemp137 = (0.031605542669238242 * fTemp23); - double fTemp138 = (0.010535180889746081 * fTemp6); - double fTemp139 = (0.0071028175068921827 * fTemp12); - double fTemp140 = (0.028411270027568741 * fTemp15); - double fTemp141 = (fRec1[0] * ((fTemp135 + (fTemp136 + (fTemp137 + ((fTemp129 + fTemp138) + fTemp139)))) - (fTemp133 + fTemp140))); - fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp141)))))); + output30[i] = FAUSTFLOAT(fTemp98); + double fTemp99 = (0.02017333553791887 * (fTemp0 + (fConst65 * fTemp12))); + double fTemp100 = ((0.0097062489627453077 * fTemp10) + (0.029118746888235923 * fTemp17)); + double fTemp101 = (fConst68 * fTemp41); + double fTemp102 = (fRec1[0] * ((fTemp99 + ((fConst6 * (((fConst8 * fTemp100) + (fConst66 * fTemp33)) + (fConst67 * fTemp24))) + (fTemp95 + fTemp101))) - fTemp97)); + fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); fVbargraph40 = FAUSTFLOAT(fRec63[0]); - output31[i] = FAUSTFLOAT(fTemp141); - double fTemp142 = (0.021308452520676553 * fTemp41); - double fTemp143 = (0.021308452520676546 * fTemp27); - double fTemp144 = (0.010535180889746079 * fTemp6); - double fTemp145 = (0.007102817506892181 * fTemp12); - double fTemp146 = (0.028411270027568745 * fTemp15); - double fTemp147 = (fRec1[0] * (((fTemp129 + fTemp137) + fTemp142) - (fTemp143 + (((fTemp133 + fTemp144) + fTemp145) + fTemp146)))); - fRec64[0] = max((fRec64[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp147)))))); + output31[i] = FAUSTFLOAT(fTemp102); + double fTemp103 = ((fTemp0 + (fConst71 * fTemp10)) + (fConst72 * fTemp41)); + double fTemp104 = (fConst74 * fTemp12); + double fTemp105 = (fRec1[0] * (((fTemp95 + (fConst6 * ((fConst69 * fTemp17) + (fConst70 * fTemp33)))) + (0.02017333553791887 * ((fTemp103 + (fConst73 * fTemp24)) + fTemp104))) - fTemp97)); + fRec64[0] = max((fRec64[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); fVbargraph41 = FAUSTFLOAT(fRec64[0]); - output32[i] = FAUSTFLOAT(fTemp147); - double fTemp148 = (0.0071028175068921931 * fTemp41); - double fTemp149 = (0.010535180889746096 * fTemp23); - double fTemp150 = (0.028411270027568717 * fTemp15); - double fTemp151 = (0.021308452520676584 * fTemp27); - double fTemp152 = (fTemp130 + fTemp133); - double fTemp153 = (fRec1[0] * ((fTemp148 + (fTemp149 + (fTemp129 + fTemp150))) - (fTemp151 + (fTemp131 + fTemp152)))); - fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp153)))))); + output32[i] = FAUSTFLOAT(fTemp105); + double fTemp106 = ((fTemp0 + (fConst75 * fTemp10)) + (fConst76 * fTemp41)); + double fTemp107 = (fConst80 * fTemp12); + double fTemp108 = (fRec1[0] * (((0.02017333553791887 * (fTemp106 + (fConst77 * fTemp24))) + ((fConst6 * ((fConst78 * fTemp17) + (fConst79 * fTemp33))) + (fTemp95 + fTemp107))) - fTemp97)); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); fVbargraph42 = FAUSTFLOAT(fRec65[0]); - output33[i] = FAUSTFLOAT(fTemp153); - double fTemp154 = (0.02130845252067657 * fTemp27); - double fTemp155 = (0.028411270027568731 * fTemp15); - double fTemp156 = (0.0071028175068921871 * fTemp41); - double fTemp157 = (0.010535180889746089 * fTemp23); - double fTemp158 = (0.021308452520676546 * fTemp12); - double fTemp159 = (fRec1[0] * ((fTemp154 + (fTemp129 + fTemp155)) - (fTemp156 + (fTemp157 + (fTemp152 + fTemp158))))); - fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp159)))))); + output33[i] = FAUSTFLOAT(fTemp108); + double fTemp109 = (fConst11 * ((0.046824706809021774 * fTemp12) + (0.035118530106766362 * fTemp41))); + double fTemp110 = ((fTemp0 + (fConst81 * fTemp17)) + (fConst82 * fTemp10)); + double fTemp111 = (fRec1[0] * ((fTemp109 + (fTemp95 + (0.02017333553791887 * ((fTemp110 + (fConst83 * fTemp33)) + (fConst84 * fTemp24))))) - fTemp97)); + fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp111)))))); fVbargraph43 = FAUSTFLOAT(fRec66[0]); - output34[i] = FAUSTFLOAT(fTemp159); - double fTemp160 = (0.021308452520676563 * fTemp27); - double fTemp161 = (0.010535180889746086 * fTemp6); - double fTemp162 = (0.0071028175068921853 * fTemp12); - double fTemp163 = (0.028411270027568734 * fTemp15); - double fTemp164 = (fRec1[0] * ((fTemp129 + fTemp160) - (fTemp135 + (fTemp137 + (((fTemp133 + fTemp161) + fTemp162) + fTemp163))))); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp164)))))); + output34[i] = FAUSTFLOAT(fTemp111); + double fTemp112 = (fConst85 * fTemp41); + double fTemp113 = ((fTemp0 + (fConst82 * fTemp17)) + (fConst86 * fTemp10)); + double fTemp114 = (fConst88 * fTemp12); + double fTemp115 = (fRec1[0] * (((fTemp95 + fTemp112) + (0.02017333553791887 * (((fTemp113 + (fConst84 * fTemp33)) + (fConst87 * fTemp24)) + fTemp114))) - fTemp97)); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp115)))))); fVbargraph44 = FAUSTFLOAT(fRec67[0]); - output35[i] = FAUSTFLOAT(fTemp164); - double fTemp165 = (0.010535180889746074 * fTemp6); - double fTemp166 = (0.0071028175068921775 * fTemp12); - double fTemp167 = (0.021308452520676542 * fTemp27); - double fTemp168 = (0.028411270027568748 * fTemp15); - double fTemp169 = (fRec1[0] * (((fTemp129 + fTemp165) + fTemp166) - (fTemp142 + (fTemp167 + (fTemp137 + (fTemp133 + fTemp168)))))); - fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp169)))))); + output35[i] = FAUSTFLOAT(fTemp115); + double fTemp116 = ((fTemp0 + (fConst89 * fTemp17)) + (fConst90 * fTemp41)); + double fTemp117 = (fConst92 * fTemp12); + double fTemp118 = (fRec1[0] * (((0.02017333553791887 * ((fTemp116 + (fConst91 * fTemp33)) + fTemp117)) + (fTemp95 + (fConst6 * ((fConst93 * fTemp10) + (fConst94 * fTemp24))))) - fTemp97)); + fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp118)))))); fVbargraph45 = FAUSTFLOAT(fRec68[0]); - output36[i] = FAUSTFLOAT(fTemp169); - double fTemp170 = (0.031605542669238228 * fTemp6); - double fTemp171 = (0.021308452520676539 * fTemp12); - double fTemp172 = (0.028411270027568696 * fTemp15); - double fTemp173 = (0.0071028175068922053 * fTemp41); - double fTemp174 = (0.021308452520676618 * fTemp27); - double fTemp175 = (0.010535180889746113 * fTemp23); - double fTemp176 = (fRec1[0] * ((((fTemp129 + fTemp170) + fTemp171) + fTemp172) - (fTemp173 + (fTemp174 + (fTemp133 + fTemp175))))); - fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp176)))))); + output36[i] = FAUSTFLOAT(fTemp118); + double fTemp119 = ((fTemp0 + (fConst97 * fTemp17)) + (fConst98 * fTemp41)); + double fTemp120 = (fConst100 * fTemp12); + double fTemp121 = (fRec1[0] * (((fConst6 * ((fConst95 * fTemp10) + (fConst96 * fTemp24))) + ((0.02017333553791887 * (fTemp119 + (fConst99 * fTemp33))) + (fTemp95 + fTemp120))) - fTemp97)); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp121)))))); fVbargraph46 = FAUSTFLOAT(fRec69[0]); - output37[i] = FAUSTFLOAT(fTemp176); - double fTemp177 = (fTemp128 + fTemp133); - double fTemp178 = (fRec1[0] * ((fTemp126 + (fTemp127 + (fTemp132 + (fTemp102 + fTemp130)))) - (fTemp125 + (fTemp131 + fTemp177)))); - fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp178)))))); + output37[i] = FAUSTFLOAT(fTemp121); + double fTemp122 = (fTemp95 + fTemp97); + double fTemp123 = (fRec1[0] * (((fConst101 * ((0.027065369757419324 * fTemp24) + (0.0090217899191397874 * fTemp33))) + (fTemp93 + (fTemp94 + (fConst9 * fTemp96)))) - fTemp122)); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp123)))))); fVbargraph47 = FAUSTFLOAT(fRec70[0]); - output38[i] = FAUSTFLOAT(fTemp178); - double fTemp179 = (fRec1[0] * ((fTemp136 + (fTemp137 + (fTemp102 + fTemp138))) - (fTemp135 + (fTemp140 + (fTemp139 + fTemp177))))); - fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp179)))))); + output38[i] = FAUSTFLOAT(fTemp123); + double fTemp124 = (fRec1[0] * (((fConst101 * ((0.009021789919139777 * fTemp24) + (0.027065369757419327 * fTemp33))) + (fTemp99 + ((fConst9 * fTemp100) + fTemp101))) - fTemp122)); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp124)))))); fVbargraph48 = FAUSTFLOAT(fRec71[0]); - output39[i] = FAUSTFLOAT(fTemp179); - double fTemp180 = (fRec1[0] * ((fTemp137 + (fTemp102 + fTemp145)) - (fTemp142 + (fTemp143 + (fTemp146 + (fTemp133 + (fTemp128 + fTemp144))))))); - fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp180)))))); + output39[i] = FAUSTFLOAT(fTemp124); + double fTemp125 = (fRec1[0] * ((((fConst102 * fTemp17) + (fConst103 * fTemp33)) + (0.02017333553791887 * (fTemp104 + (fTemp103 + (fConst104 * fTemp24))))) - fTemp122)); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp125)))))); fVbargraph49 = FAUSTFLOAT(fRec72[0]); - output40[i] = FAUSTFLOAT(fTemp180); - double fTemp181 = (fTemp133 + (fTemp128 + fTemp130)); - double fTemp182 = (fRec1[0] * ((fTemp149 + (fTemp150 + (fTemp102 + fTemp131))) - (fTemp148 + (fTemp151 + fTemp181)))); - fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp182)))))); + output40[i] = FAUSTFLOAT(fTemp125); + double fTemp126 = (fRec1[0] * (((0.02017333553791887 * (fTemp106 + (fConst105 * fTemp24))) + ((fConst106 * fTemp33) + (fTemp107 + (fConst107 * fTemp17)))) - fTemp122)); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); fVbargraph50 = FAUSTFLOAT(fRec73[0]); - output41[i] = FAUSTFLOAT(fTemp182); - double fTemp183 = (fRec1[0] * ((fTemp156 + (fTemp154 + (fTemp155 + (fTemp102 + fTemp158)))) - (fTemp157 + fTemp181))); - fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp183)))))); + output41[i] = FAUSTFLOAT(fTemp126); + double fTemp127 = (fRec1[0] * ((fTemp109 + (0.02017333553791887 * ((fTemp110 + (fConst108 * fTemp33)) + (fConst109 * fTemp24)))) - fTemp122)); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp127)))))); fVbargraph51 = FAUSTFLOAT(fRec74[0]); - output42[i] = FAUSTFLOAT(fTemp183); - double fTemp184 = (fRec1[0] * ((fTemp135 + (fTemp160 + (fTemp102 + fTemp162))) - (fTemp137 + (fTemp163 + (fTemp133 + (fTemp128 + fTemp161)))))); - fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp184)))))); + output42[i] = FAUSTFLOAT(fTemp127); + double fTemp128 = (fRec1[0] * ((fTemp112 + (0.02017333553791887 * (fTemp114 + ((fTemp113 + (fConst109 * fTemp33)) + (fConst110 * fTemp24))))) - fTemp122)); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp128)))))); fVbargraph52 = FAUSTFLOAT(fRec75[0]); - output43[i] = FAUSTFLOAT(fTemp184); - double fTemp185 = (fRec1[0] * ((fTemp142 + (fTemp102 + fTemp165)) - (fTemp167 + (fTemp137 + (fTemp168 + (fTemp166 + fTemp177)))))); - fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp185)))))); + output43[i] = FAUSTFLOAT(fTemp128); + double fTemp129 = (fRec1[0] * ((((fConst111 * fTemp10) + (fConst112 * fTemp24)) + (0.02017333553791887 * (fTemp117 + (fTemp116 + (fConst113 * fTemp33))))) - fTemp122)); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp129)))))); fVbargraph53 = FAUSTFLOAT(fRec76[0]); - output44[i] = FAUSTFLOAT(fTemp185); - double fTemp186 = (fRec1[0] * ((fTemp173 + (fTemp172 + (fTemp102 + fTemp170))) - (fTemp174 + (fTemp175 + (fTemp171 + fTemp177))))); - fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp186)))))); + output44[i] = FAUSTFLOAT(fTemp129); + double fTemp130 = (fRec1[0] * (((0.02017333553791887 * (fTemp119 + (fConst114 * fTemp33))) + ((fConst115 * fTemp24) + ((fConst116 * fTemp10) + fTemp120))) - fTemp122)); + fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp130)))))); fVbargraph54 = FAUSTFLOAT(fRec77[0]); - output45[i] = FAUSTFLOAT(fTemp186); - double fTemp187 = (fTemp102 + fTemp105); - double fTemp188 = (fRec1[0] * ((fTemp100 + (fTemp101 + fTemp187)) - (fTemp99 + (fTemp103 + fTemp107)))); - fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp188)))))); + output45[i] = FAUSTFLOAT(fTemp130); + double fTemp131 = (fRec1[0] * (((fConst117 * ((0.02017333553791887 * fTemp24) + (0.020173335537918873 * fTemp33))) + (fTemp76 + ((fConst9 * fTemp77) + (fTemp79 + fTemp81)))) - fTemp80)); + fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp131)))))); fVbargraph55 = FAUSTFLOAT(fRec78[0]); - output46[i] = FAUSTFLOAT(fTemp188); - double fTemp189 = (fRec1[0] * ((fTemp109 + fTemp187) - (fTemp110 + (fTemp101 + (fTemp103 + fTemp111))))); - fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp189)))))); + output46[i] = FAUSTFLOAT(fTemp131); + double fTemp132 = (fRec1[0] * ((((fConst118 * fTemp33) + ((fConst119 * fTemp17) + fTemp81)) + (0.02017333553791887 * (fTemp75 + (fTemp85 + (fConst120 * fTemp24))))) - fTemp80)); + fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp132)))))); fVbargraph56 = FAUSTFLOAT(fRec79[0]); - output47[i] = FAUSTFLOAT(fTemp189); - double fTemp190 = (fRec1[0] * ((fTemp114 + (fTemp101 + (fTemp113 + (fTemp117 + fTemp187)))) - (fTemp115 + (fTemp103 + fTemp116)))); - fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp190)))))); + output47[i] = FAUSTFLOAT(fTemp132); + double fTemp133 = (fRec1[0] * (((0.02017333553791887 * ((fTemp88 + (fConst120 * fTemp33)) + (fConst121 * fTemp24))) + (fTemp81 + fTemp87)) - fTemp80)); + fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp133)))))); fVbargraph57 = FAUSTFLOAT(fRec80[0]); - output48[i] = FAUSTFLOAT(fTemp190); - double fTemp191 = (fRec1[0] * ((fTemp121 + (fTemp105 + (fTemp102 + fTemp119))) - (fTemp101 + (fTemp122 + (fTemp123 + (fTemp103 + fTemp120)))))); - fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp191)))))); + output48[i] = FAUSTFLOAT(fTemp133); + double fTemp134 = (fRec1[0] * ((((fTemp81 + (fConst122 * fTemp10)) + (fConst123 * fTemp24)) + (0.02017333553791887 * (fTemp91 + (fTemp90 + (fConst121 * fTemp33))))) - fTemp80)); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp134)))))); fVbargraph58 = FAUSTFLOAT(fRec81[0]); - output49[i] = FAUSTFLOAT(fTemp191); + output49[i] = FAUSTFLOAT(fTemp134); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; @@ -2238,42 +2434,42 @@ class mydsp : public dsp { fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec12[1] = fRec12[0]; + fRec0[1] = fRec0[0]; + fRec14[1] = fRec14[0]; fRec13[1] = fRec13[0]; - fRec11[1] = fRec11[0]; - fRec10[1] = fRec10[0]; - fRec16[1] = fRec16[0]; + fRec12[1] = fRec12[0]; fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; fRec15[1] = fRec15[0]; - fRec14[1] = fRec14[0]; - fRec20[1] = fRec20[0]; + fRec11[1] = fRec11[0]; + fRec22[1] = fRec22[0]; fRec21[1] = fRec21[0]; + fRec20[1] = fRec20[0]; fRec19[1] = fRec19[0]; - fRec18[1] = fRec18[0]; - fRec0[1] = fRec0[0]; - fRec22[1] = fRec22[0]; - fRec26[1] = fRec26[0]; - fRec25[1] = fRec25[0]; + fRec23[1] = fRec23[0]; fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; fRec29[1] = fRec29[0]; fRec30[1] = fRec30[0]; fRec28[1] = fRec28[0]; fRec27[1] = fRec27[0]; - fRec23[1] = fRec23[0]; - fRec31[1] = fRec31[0]; - fRec32[1] = fRec32[0]; - fRec33[1] = fRec33[0]; + fRec26[1] = fRec26[0]; fRec34[1] = fRec34[0]; - fRec38[1] = fRec38[0]; - fRec39[1] = fRec39[0]; - fRec37[1] = fRec37[0]; - fRec36[1] = fRec36[0]; fRec35[1] = fRec35[0]; - fRec40[1] = fRec40[0]; + fRec33[1] = fRec33[0]; + fRec32[1] = fRec32[0]; + fRec31[1] = fRec31[0]; + fRec36[1] = fRec36[0]; + fRec37[1] = fRec37[0]; fRec41[1] = fRec41[0]; fRec42[1] = fRec42[0]; + fRec40[1] = fRec40[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; fRec43[1] = fRec43[0]; fRec44[1] = fRec44[0]; fRec45[1] = fRec45[0]; @@ -2321,7 +2517,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2553,7 +2748,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2616,7 +2811,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2645,11 +2840,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecLebedev503.cpp b/source/HOAUGens/HOADecLebedev503.cpp index 22d7c1fe3a..f49d287abb 100644 --- a/source/HOAUGens/HOADecLebedev503.cpp +++ b/source/HOAUGens/HOADecLebedev503.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev503" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -614,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -636,192 +653,474 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fConst4; + double fConst5; double fRec9[2]; + double fRec10[2]; double fRec8[2]; double fRec7[2]; FAUSTFLOAT fVbargraph2; - double fConst4; - double fConst5; - double fRec12[2]; + double fConst6; + double fConst7; + double fConst8; + double fRec14[2]; + double fRec15[2]; double fRec13[2]; + double fConst9; + double fRec16[2]; + double fRec12[2]; double fRec11[2]; - double fRec10[2]; FAUSTFLOAT fVbargraph3; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; - double fRec14[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph4; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; double fRec20[2]; - double fRec21[2]; double fRec19[2]; double fRec18[2]; FAUSTFLOAT fVbargraph5; - double fConst6; - double fConst7; - double fConst8; - double fRec25[2]; - double fRec26[2]; - double fRec24[2]; - double fConst9; - double fRec27[2]; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; double fRec23[2]; + double fRec24[2]; double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fVbargraph6; - double fRec31[2]; - double fRec32[2]; - double fRec30[2]; - double fRec33[2]; - double fRec29[2]; + double fConst21; + double fConst22; + double fConst23; double fRec28[2]; + double fRec29[2]; + double fRec27[2]; + double fRec30[2]; + double fRec26[2]; + double fRec25[2]; FAUSTFLOAT fVbargraph7; - double fRec37[2]; - double fRec38[2]; - double fRec36[2]; - double fRec39[2]; - double fRec35[2]; + double fConst24; + double fConst25; double fRec34[2]; + double fRec35[2]; + double fRec33[2]; + double fRec36[2]; + double fRec32[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph8; - double fRec43[2]; - double fRec44[2]; - double fRec42[2]; - double fRec45[2]; - double fRec41[2]; - double fRec40[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph9; - double fRec0[2]; + double fRec40[2]; + double fRec39[2]; + double fRec38[2]; FAUSTFLOAT fVbargraph10; + double fConst26; + double fConst27; + double fRec44[2]; + double fRec45[2]; + double fRec43[2]; double fRec46[2]; + double fRec42[2]; + double fRec41[2]; FAUSTFLOAT fVbargraph11; double fRec50[2]; + double fRec51[2]; double fRec49[2]; + double fRec52[2]; double fRec48[2]; + double fRec47[2]; FAUSTFLOAT fVbargraph12; + double fRec37[2]; + FAUSTFLOAT fVbargraph13; + double fConst28; + double fConst29; double fRec53[2]; + FAUSTFLOAT fVbargraph14; double fRec54[2]; - double fRec52[2]; - double fRec51[2]; - FAUSTFLOAT fVbargraph13; - double fRec58[2]; + FAUSTFLOAT fVbargraph15; + double fRec55[2]; + FAUSTFLOAT fVbargraph16; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fRec60[2]; + double fRec61[2]; double fRec59[2]; + double fRec62[2]; + double fRec58[2]; double fRec57[2]; - double fRec60[2]; - double fRec56[2]; - double fRec55[2]; - FAUSTFLOAT fVbargraph14; - double fRec64[2]; + FAUSTFLOAT fVbargraph17; + double fConst34; + double fConst35; + double fConst36; double fRec65[2]; - double fRec63[2]; double fRec66[2]; - double fRec62[2]; - double fRec61[2]; - FAUSTFLOAT fVbargraph15; - double fRec47[2]; - FAUSTFLOAT fVbargraph16; - double fRec67[2]; - FAUSTFLOAT fVbargraph17; - double fRec68[2]; + double fRec64[2]; + double fRec63[2]; FAUSTFLOAT fVbargraph18; - double fRec69[2]; + double fConst37; + double fConst38; + double fRec56[2]; FAUSTFLOAT fVbargraph19; + double fConst39; + double fConst40; + double fConst41; + double fConst42; double fRec70[2]; + double fRec71[2]; + double fRec69[2]; + double fRec68[2]; FAUSTFLOAT fVbargraph20; - double fRec74[2]; - double fRec75[2]; - double fRec73[2]; - double fRec72[2]; + double fRec67[2]; FAUSTFLOAT fVbargraph21; - double fRec79[2]; - double fRec80[2]; - double fRec78[2]; - double fRec81[2]; - double fRec77[2]; - double fRec76[2]; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fRec72[2]; FAUSTFLOAT fVbargraph22; - double fRec71[2]; + double fRec73[2]; FAUSTFLOAT fVbargraph23; - double fRec82[2]; + double fConst48; + double fRec77[2]; + double fRec78[2]; + double fRec76[2]; + double fRec75[2]; FAUSTFLOAT fVbargraph24; - double fRec83[2]; + double fConst49; + double fRec74[2]; FAUSTFLOAT fVbargraph25; - double fRec84[2]; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fRec79[2]; FAUSTFLOAT fVbargraph26; - double fRec85[2]; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fRec80[2]; FAUSTFLOAT fVbargraph27; - double fRec86[2]; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fRec81[2]; FAUSTFLOAT fVbargraph28; - double fRec87[2]; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fRec82[2]; FAUSTFLOAT fVbargraph29; - double fRec88[2]; + double fConst70; + double fConst71; + double fRec83[2]; FAUSTFLOAT fVbargraph30; - double fRec89[2]; + double fConst72; + double fConst73; + double fConst74; + double fRec84[2]; FAUSTFLOAT fVbargraph31; - double fRec90[2]; + double fRec85[2]; FAUSTFLOAT fVbargraph32; + double fConst75; + double fConst76; + double fRec90[2]; double fRec91[2]; - FAUSTFLOAT fVbargraph33; + double fRec89[2]; double fRec92[2]; + double fRec88[2]; + double fRec87[2]; + FAUSTFLOAT fVbargraph33; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fRec86[2]; FAUSTFLOAT fVbargraph34; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; double fRec93[2]; FAUSTFLOAT fVbargraph35; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; double fRec94[2]; FAUSTFLOAT fVbargraph36; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; double fRec95[2]; FAUSTFLOAT fVbargraph37; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; double fRec96[2]; FAUSTFLOAT fVbargraph38; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; double fRec97[2]; FAUSTFLOAT fVbargraph39; + double fConst115; + double fConst116; double fRec98[2]; FAUSTFLOAT fVbargraph40; + double fConst117; + double fConst118; + double fConst119; + double fConst120; double fRec99[2]; FAUSTFLOAT fVbargraph41; + double fConst121; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; double fRec100[2]; FAUSTFLOAT fVbargraph42; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fConst136; double fRec101[2]; FAUSTFLOAT fVbargraph43; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; double fRec102[2]; FAUSTFLOAT fVbargraph44; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; double fRec103[2]; FAUSTFLOAT fVbargraph45; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; double fRec104[2]; FAUSTFLOAT fVbargraph46; + double fConst156; + double fConst157; + double fConst158; + double fConst159; + double fConst160; + double fConst161; + double fConst162; + double fConst163; double fRec105[2]; FAUSTFLOAT fVbargraph47; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; double fRec106[2]; FAUSTFLOAT fVbargraph48; + double fConst176; + double fConst177; + double fConst178; + double fConst179; + double fConst180; + double fConst181; + double fConst182; + double fConst183; + double fConst184; + double fConst185; + double fConst186; double fRec107[2]; FAUSTFLOAT fVbargraph49; + double fConst187; + double fConst188; + double fConst189; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + double fConst196; double fRec108[2]; FAUSTFLOAT fVbargraph50; + double fConst197; + double fConst198; + double fConst199; + double fConst200; + double fConst201; + double fConst202; + double fConst203; double fRec109[2]; FAUSTFLOAT fVbargraph51; + double fConst204; + double fConst205; + double fConst206; + double fConst207; + double fConst208; + double fConst209; + double fConst210; + double fConst211; + double fConst212; + double fConst213; + double fConst214; + double fConst215; double fRec110[2]; FAUSTFLOAT fVbargraph52; + double fConst216; + double fConst217; + double fConst218; + double fConst219; + double fConst220; + double fConst221; + double fConst222; + double fConst223; + double fConst224; + double fConst225; + double fConst226; + double fConst227; double fRec111[2]; FAUSTFLOAT fVbargraph53; + double fConst228; + double fConst229; + double fConst230; + double fConst231; double fRec112[2]; FAUSTFLOAT fVbargraph54; + double fConst232; + double fConst233; + double fConst234; double fRec113[2]; FAUSTFLOAT fVbargraph55; + double fConst235; + double fConst236; + double fConst237; + double fConst238; + double fConst239; + double fConst240; double fRec114[2]; FAUSTFLOAT fVbargraph56; + double fConst241; + double fConst242; + double fConst243; + double fConst244; + double fConst245; + double fConst246; + double fConst247; + double fConst248; double fRec115[2]; FAUSTFLOAT fVbargraph57; + double fConst249; + double fConst250; + double fConst251; + double fConst252; double fRec116[2]; FAUSTFLOAT fVbargraph58; + double fConst253; + double fConst254; + double fConst255; + double fConst256; + double fConst257; double fRec117[2]; FAUSTFLOAT fVbargraph59; + double fConst258; + double fConst259; + double fConst260; + double fConst261; + double fConst262; + double fConst263; + double fConst264; double fRec118[2]; FAUSTFLOAT fVbargraph60; + double fConst265; + double fConst266; + double fConst267; + double fConst268; + double fConst269; + double fConst270; + double fConst271; + double fConst272; double fRec119[2]; FAUSTFLOAT fVbargraph61; + double fConst273; + double fConst274; + double fConst275; + double fConst276; + double fConst277; + double fConst278; + double fConst279; double fRec120[2]; FAUSTFLOAT fVbargraph62; + double fConst280; + double fConst281; + double fConst282; + double fConst283; + double fConst284; + double fConst285; double fRec121[2]; FAUSTFLOAT fVbargraph63; + double fConst286; + double fConst287; double fRec122[2]; FAUSTFLOAT fVbargraph64; + double fConst288; + double fConst289; + double fConst290; + double fConst291; double fRec123[2]; FAUSTFLOAT fVbargraph65; @@ -832,36 +1131,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev503"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1167,7 +1466,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); @@ -1177,6 +1476,288 @@ class mydsp : public dsp { fConst7 = (625.22848971356643 / fConst0); fConst8 = (1250.4569794271329 / fConst0); fConst9 = (789.54302057287055 / fConst0); + fConst10 = double(tgamma(1.5)); + fConst11 = double(tgamma(1.0)); + fConst12 = double(tgamma(3.0)); + fConst13 = sqrt((3.0 * (fConst11 / fConst12))); + fConst14 = (fConst10 * fConst13); + fConst15 = (0.02026373487753309 * fConst14); + fConst16 = double(tgamma(2.5)); + fConst17 = double(tgamma(5.0)); + fConst18 = sqrt((5.0 * (fConst11 / fConst17))); + fConst19 = (fConst16 * fConst18); + fConst20 = (0.04052746975506618 * fConst19); + fConst21 = sqrt((7.0 * (fConst12 / fConst17))); + fConst22 = ((0.0 - (3.3851375012865379 * fConst10)) * fConst21); + fConst23 = (0.0089791337293529845 * fConst22); + fConst24 = (double(tgamma(3.5)) * sqrt((7.0 * (fConst11 / double(tgamma(7.0)))))); + fConst25 = (0.081054939510132359 * fConst24); + fConst26 = (0.0 - (3.1915382432114616 * fConst19)); + fConst27 = (0.0 - (6.3830764864229232 * fConst24)); + fConst28 = (0.0 - (1.5957691216057308 * fConst14)); + fConst29 = (0.0 - (0.70710678118654757 * fConst22)); + fConst30 = (0.036024417560058836 * fConst18); + fConst31 = double(tgamma(2.0)); + fConst32 = sqrt((7.0 * (fConst31 / double(tgamma(6.0))))); + fConst33 = (0.12736554972506672 * fConst32); + fConst34 = (0.025473109945013343 * fConst13); + fConst35 = sqrt((5.0 * (fConst31 / double(tgamma(4.0))))); + fConst36 = (0.054036626340088233 * fConst35); + fConst37 = (0.057314497376279992 * fConst21); + fConst38 = (0.050946219890026692 * fConst24); + fConst39 = (0.0 - (1.595769121605731 * fConst19)); + fConst40 = (0.0 - (2.256758334191026 * fConst24)); + fConst41 = (fConst16 * fConst32); + fConst42 = (0.0 - (5.6418958354775643 * fConst41)); + fConst43 = (0.0 - (1.1283791670955128 * fConst14)); + fConst44 = (fConst10 * fConst35); + fConst45 = (0.0 - (2.3936536824085959 * fConst44)); + fConst46 = (fConst10 * fConst21); + fConst47 = (0.0 - (2.5388531259649025 * fConst46)); + fConst48 = (0.0 - (4.5135166683820485 * fConst24)); + fConst49 = (0.10189243978005338 * fConst24); + fConst50 = (0.025473109945013343 * fConst14); + fConst51 = (0.011287477954144623 * fConst22); + fConst52 = (0.0 - (1.1283791670955126 * fConst14)); + fConst53 = (0.0 - (7.0866384831701748e-16 * fConst19)); + fConst54 = (0.0 - (0.5 * fConst22)); + fConst55 = (0.0 - (1.128379167095513 * fConst14)); + fConst56 = (0.0 - (4.5135166683820547 * fConst24)); + fConst57 = (0.0 - (0.50000000000000011 * fConst22)); + fConst58 = (0.10189243978005329 * fConst24); + fConst59 = (0.025473109945013332 * fConst14); + fConst60 = (0.01128747795414462 * fConst22); + fConst61 = (0.0 - (1.417327696634035e-15 * fConst19)); + fConst62 = (0.0 - (4.5135166683820476 * fConst24)); + fConst63 = (0.0 - (4.5135166683820538 * fConst24)); + fConst64 = (0.0 - (1.6925687506432687 * fConst10)); + fConst65 = (fConst64 * fConst35); + fConst66 = ((0.0 - (3.9894228040143274 * fConst16)) * fConst32); + fConst67 = ((0.0 - ((3.5355339059327373 * fConst64) + (2.3936536824085963 * fConst10))) * fConst21); + fConst68 = (0.015962904407738641 * fConst67); + fConst69 = (0.036024417560058836 * fConst19); + fConst70 = (0.0 - (1.4142135623730951 * fConst66)); + fConst71 = (0.031925808815477283 * fConst65); + fConst72 = (0.031925808815477283 * fConst66); + fConst73 = (0.0 - (1.4142135623730951 * fConst65)); + fConst74 = (0.0 - (0.70710678118654757 * fConst67)); + fConst75 = (0.0 - (2.4568472851294949 * fConst24)); + fConst76 = (0.12956030605175081 * fConst32); + fConst77 = (2.8768166971227152e-17 * fConst32); + fConst78 = (0.051824122420700336 * fConst24); + fConst79 = (0.033660754908870889 * fConst35); + fConst80 = (0.019434045907762629 * fConst21); + fConst81 = (0.019434045907762633 * fConst21); + fConst82 = (0.0 - (0.92131773192356115 * fConst14)); + fConst83 = (0.0 - (2.1276921621409737 * fConst19)); + fConst84 = (0.0 - (1.5957691216057308 * fConst44)); + fConst85 = (0.0 - (4.7244256554467816e-16 * fConst19)); + fConst86 = (0.0 - (6.1421182128237417 * fConst41)); + fConst87 = (0.0 - (0.92131773192356159 * fConst46)); + fConst88 = (0.0 - (1.3638242119692871e-15 * fConst41)); + fConst89 = (0.019434045907762623 * fConst13); + fConst90 = (0.12956030605175084 * fConst32); + fConst91 = (5.7536333942454304e-17 * fConst32); + fConst92 = (0.0 - (0.92131773192356148 * fConst14)); + fConst93 = (0.0 - (1.5957691216057313 * fConst44)); + fConst94 = (0.0 - (2.456847285129498 * fConst24)); + fConst95 = (0.0 - (0.92131773192356192 * fConst46)); + fConst96 = (0.051824122420700267 * fConst24); + fConst97 = (0.019434045907762616 * fConst13); + fConst98 = (0.033660754908870882 * fConst35); + fConst99 = (0.019434045907762626 * fConst21); + fConst100 = (0.0 - (9.4488513108935631e-16 * fConst19)); + fConst101 = (0.0 - (2.456847285129494 * fConst24)); + fConst102 = (0.0 - (2.7276484239385742e-15 * fConst41)); + fConst103 = (0.0 - (2.4568472851294976 * fConst24)); + fConst104 = (0.0 - (1.5957691216057308 * fConst10)); + fConst105 = (fConst104 * fConst35); + fConst106 = ((0.0 - (4.3431334391370653 * fConst16)) * fConst32); + fConst107 = ((0.0 - ((2.8867513459481291 * fConst104) + (2.7639531957706835 * fConst10))) * fConst21); + fConst108 = (0.021093750000000005 * fConst105); + fConst109 = (0.0 - fConst105); + fConst110 = (0.0 - (1.4142135623730951 * fConst106)); + fConst111 = (0.0 - (0.5 * fConst107)); + fConst112 = (0.0 - (3.1401849173675503e-16 * fConst106)); + fConst113 = (0.010546875000000002 * fConst107); + fConst114 = (0.019434045907762623 * fConst14); + fConst115 = (0.0 - (1.0000000000000002 * fConst105)); + fConst116 = (0.0 - (0.50000000000000011 * fConst107)); + fConst117 = (0.021093749999999998 * fConst105); + fConst118 = (0.019434045907762616 * fConst14); + fConst119 = (0.010546874999999999 * fConst107); + fConst120 = (0.0 - (6.2803698347351007e-16 * fConst106)); + fConst121 = (0.026338897580074728 * fConst35); + fConst122 = (0.026338897580074724 * fConst35); + fConst123 = (0.045001699736364593 * fConst21); + fConst124 = (0.045001699736364587 * fConst21); + fConst125 = (0.052943176160428845 * fConst32); + fConst126 = (0.011706176702255417 * fConst18); + fConst127 = (0.0070590901547238332 * fConst24); + fConst128 = (0.0 - (1.2884797242127563e-16 * fConst19)); + fConst129 = (0.0 - (5.8273688116286149e-16 * fConst41)); + fConst130 = (0.0 - (0.34992181344801404 * fConst24)); + fConst131 = (0.0 - (0.48114249349102017 * fConst14)); + fConst132 = (0.0 - (0.58027968058390089 * fConst19)); + fConst133 = (0.0 - (1.3056292813137786 * fConst44)); + fConst134 = (0.0 - (2.624413600860108 * fConst41)); + fConst135 = (0.0 - (2.230751560731095 * fConst46)); + fConst136 = (0.0097062489627452973 * fConst13); + fConst137 = (0.052943176160428852 * fConst32); + fConst138 = (2.3511493268037518e-17 * fConst32); + fConst139 = (0.0 - (0.48114249349102034 * fConst14)); + fConst140 = (0.0 - (1.3056292813137791 * fConst44)); + fConst141 = (0.0 - (0.34992181344801421 * fConst24)); + fConst142 = (0.0 - (2.2307515607310959 * fConst46)); + fConst143 = (0.0070590901547238306 * fConst24); + fConst144 = (0.0097062489627452939 * fConst13); + fConst145 = (0.026338897580074721 * fConst35); + fConst146 = (0.045001699736364573 * fConst21); + fConst147 = (0.0 - (2.5769594484255127e-16 * fConst19)); + fConst148 = (0.0 - (0.34992181344801365 * fConst24)); + fConst149 = (0.0 - (1.165473762325723e-15 * fConst41)); + fConst150 = (0.0 - (0.34992181344801415 * fConst24)); + fConst151 = (0.052943176160428991 * fConst32); + fConst152 = (0.070590901547238516 * fConst32); + fConst153 = (0.0087796325266915921 * fConst35); + fConst154 = (0.026338897580074738 * fConst35); + fConst155 = (fConst21 * (0.0 - (1.7605101637794649 * fConst10))); + fConst156 = (0.052943176160428929 * fConst32); + fConst157 = (0.035118530106766334 * fConst18); + fConst158 = (0.026338897580074742 * fConst35); + fConst159 = (0.0087796325266915817 * fConst35); + fConst160 = (0.0 - (2.3211187223356089 * fConst19)); + fConst161 = (0.0 - (3.1492963210321352 * fConst24)); + fConst162 = (0.0 - (3.4992181344801496 * fConst41)); + fConst163 = (0.0 - (4.548983574824196 * fConst24)); + fConst164 = (0.0 - (0.48114249349102062 * fConst14)); + fConst165 = (0.0 - (1.7408390417517061 * fConst19)); + fConst166 = (0.0 - (0.43520976043792636 * fConst44)); + fConst167 = (0.0 - (2.3211187223356093 * fConst19)); + fConst168 = (0.0 - (3.1492963210321379 * fConst24)); + fConst169 = (0.0 - (2.6244136008601116 * fConst41)); + fConst170 = (0.0 - (0.22360679774997891 * fConst155)); + fConst171 = (0.0 - (3.4992181344801501 * fConst41)); + fConst172 = (0.029118746888235927 * fConst13); + fConst173 = (0.026338897580074745 * fConst35); + fConst174 = (0.013532684878709665 * fConst155); + fConst175 = (0.09176817201141016 * fConst24); + fConst176 = (0.0 - (1.443427480473062 * fConst14)); + fConst177 = (0.0 - (1.7408390417517088 * fConst19)); + fConst178 = (0.0 - (1.3056292813137793 * fConst44)); + fConst179 = (0.0 - (2.6244136008601155 * fConst41)); + fConst180 = (0.0 - (0.67082039324993681 * fConst155)); + fConst181 = (0.0 - (3.1492963210321285 * fConst24)); + fConst182 = (0.046824706809021746 * fConst18); + fConst183 = (0.0097062489627453216 * fConst13); + fConst184 = (0.0087796325266915939 * fConst35); + fConst185 = (0.0045108949595698946 * fConst155); + fConst186 = (0.091768172011410271 * fConst24); + fConst187 = (0.0 - (0.48114249349102112 * fConst14)); + fConst188 = (0.0 - (1.4434274804730622 * fConst14)); + fConst189 = (0.0 - (0.43520976043792686 * fConst44)); + fConst190 = (0.0 - (1.3056292813137795 * fConst44)); + fConst191 = (0.0 - (4.5489835748241987 * fConst24)); + fConst192 = (0.0 - (0.22360679774997916 * fConst155)); + fConst193 = (0.0 - (0.67082039324993692 * fConst155)); + fConst194 = (0.0 - (3.1492963210321339 * fConst24)); + fConst195 = (0.052943176160428963 * fConst32); + fConst196 = (0.070590901547238558 * fConst32); + fConst197 = (0.0 - (0.48114249349102095 * fConst14)); + fConst198 = (0.0 - (0.4352097604379267 * fConst44)); + fConst199 = (0.0 - (2.3211187223356085 * fConst19)); + fConst200 = (0.0 - (0.22360679774997907 * fConst155)); + fConst201 = (0.0 - (3.4992181344801487 * fConst41)); + fConst202 = (0.052943176160428942 * fConst32); + fConst203 = (0.035118530106766348 * fConst18); + fConst204 = (0.0097062489627453008 * fConst13); + fConst205 = (0.0087796325266915748 * fConst35); + fConst206 = (0.063531811392514792 * fConst24); + fConst207 = (0.004510894959569885 * fConst155); + fConst208 = (0.0 - (1.4434274804730625 * fConst14)); + fConst209 = (0.0 - (1.7408390417517057 * fConst19)); + fConst210 = (0.0 - (1.3056292813137798 * fConst44)); + fConst211 = (0.0 - (2.3211187223356098 * fConst19)); + fConst212 = (0.0 - (2.6244136008601107 * fConst41)); + fConst213 = (0.0 - (0.67082039324993703 * fConst155)); + fConst214 = (0.0 - (3.4992181344801505 * fConst41)); + fConst215 = (0.0 - (4.5489835748241934 * fConst24)); + fConst216 = (0.046824706809021698 * fConst18); + fConst217 = (0.07059090154723846 * fConst32); + fConst218 = (0.0 - (0.48114249349102228 * fConst14)); + fConst219 = (0.0 - (1.7408390417517114 * fConst19)); + fConst220 = (0.0 - (0.43520976043792792 * fConst44)); + fConst221 = (0.0 - (4.5489835748242058 * fConst24)); + fConst222 = (0.0 - (2.6244136008601191 * fConst41)); + fConst223 = (0.0 - (0.22360679774997969 * fConst155)); + fConst224 = (0.029118746888235913 * fConst13); + fConst225 = (0.026338897580074731 * fConst35); + fConst226 = (0.01353268487870966 * fConst155); + fConst227 = (0.063531811392514445 * fConst24); + fConst228 = (fConst32 * (0.0 - (3.0929010896773175 * fConst16))); + fConst229 = (0.0 - (0.97315860881060223 * fConst10)); + fConst230 = (fConst21 * (0.0 - ((1.5075567228888176 * fConst229) + (3.2276019669290172 * fConst10)))); + fConst231 = (fConst35 * fConst229); + fConst232 = (0.017117642829616801 * fConst228); + fConst233 = (0.035118530106766334 * fConst19); + fConst234 = (0.0 - (1.1313708498984762 * fConst228)); + fConst235 = (0.0 - (0.44721359549995782 * fConst231)); + fConst236 = (0.0 - (0.84852813742385691 * fConst228)); + fConst237 = (0.0 - (0.22360679774997891 * fConst230)); + fConst238 = (0.013532684878709665 * fConst230); + fConst239 = (0.027065369757419331 * fConst231); + fConst240 = (0.029118746888235927 * fConst14); + fConst241 = (0.022823523772822384 * fConst228); + fConst242 = (0.0045108949595698946 * fConst230); + fConst243 = (0.0090217899191397891 * fConst231); + fConst244 = (0.0097062489627453216 * fConst14); + fConst245 = (0.046824706809021746 * fConst19); + fConst246 = (0.0 - (1.3416407864998736 * fConst231)); + fConst247 = (0.0 - (0.84852813742385813 * fConst228)); + fConst248 = (0.0 - (0.67082039324993681 * fConst230)); + fConst249 = (0.0 - (0.44721359549995832 * fConst231)); + fConst250 = (0.0 - (1.3416407864998738 * fConst231)); + fConst251 = (0.0 - (0.22360679774997916 * fConst230)); + fConst252 = (0.0 - (0.67082039324993692 * fConst230)); + fConst253 = (0.0 - (0.44721359549995815 * fConst231)); + fConst254 = (0.0 - (0.22360679774997907 * fConst230)); + fConst255 = (0.0 - (1.1313708498984758 * fConst228)); + fConst256 = (0.017117642829616808 * fConst228); + fConst257 = (0.035118530106766348 * fConst19); + fConst258 = (0.00902178991913977 * fConst231); + fConst259 = (0.0097062489627453008 * fConst14); + fConst260 = (0.004510894959569885 * fConst230); + fConst261 = (0.0 - (1.3416407864998741 * fConst231)); + fConst262 = (0.0 - (0.84852813742385658 * fConst228)); + fConst263 = (0.0 - (0.67082039324993703 * fConst230)); + fConst264 = (0.0 - (1.1313708498984765 * fConst228)); + fConst265 = (0.0 - (0.44721359549995937 * fConst231)); + fConst266 = (0.0 - (0.84852813742385946 * fConst228)); + fConst267 = (0.0 - (0.22360679774997969 * fConst230)); + fConst268 = (0.022823523772822367 * fConst228); + fConst269 = (0.01353268487870966 * fConst230); + fConst270 = (0.027065369757419321 * fConst231); + fConst271 = (0.046824706809021698 * fConst19); + fConst272 = (0.029118746888235913 * fConst14); + fConst273 = (0.0 - (1.3056292813137786 * fConst10)); + fConst274 = (fConst21 * (0.0 - ((4.5226701686664557 * fConst273) + (1.4434274804730605 * fConst10)))); + fConst275 = (fConst32 * (0.0 - (1.8557406538063874 * fConst16))); + fConst276 = (0.028529404716028006 * fConst275); + fConst277 = (fConst273 * fConst35); + fConst278 = (0.011706176702255417 * fConst19); + fConst279 = (0.0 - (3.1401849173675503e-16 * fConst275)); + fConst280 = (0.0 - fConst277); + fConst281 = (0.0 - (1.4142135623730951 * fConst275)); + fConst282 = (0.0 - (0.5 * fConst274)); + fConst283 = (0.010086667768959437 * fConst274); + fConst284 = (0.020173335537918873 * fConst277); + fConst285 = (0.0097062489627452973 * fConst14); + fConst286 = (0.0 - (1.0000000000000002 * fConst277)); + fConst287 = (0.0 - (0.50000000000000011 * fConst274)); + fConst288 = (0.0097062489627452939 * fConst14); + fConst289 = (0.020173335537918866 * fConst277); + fConst290 = (0.010086667768959433 * fConst274); + fConst291 = (0.0 - (6.2803698347351007e-16 * fConst275)); } @@ -1218,27 +1799,27 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec8[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec7[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec13[l10] = 0.0; + fRec14[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec11[l11] = 0.0; + fRec15[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec10[l12] = 0.0; + fRec13[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -1246,15 +1827,15 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec17[l14] = 0.0; + fRec12[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec11[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec14[l16] = 0.0; + fRec0[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { @@ -1262,91 +1843,91 @@ class mydsp : public dsp { } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec21[l18] = 0.0; + fRec19[l18] = 0.0; } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec19[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec18[l20] = 0.0; + fRec23[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec25[l21] = 0.0; + fRec24[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec26[l22] = 0.0; + fRec22[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec21[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec27[l24] = 0.0; + fRec28[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec23[l25] = 0.0; + fRec29[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec22[l26] = 0.0; + fRec27[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec31[l27] = 0.0; + fRec30[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec32[l28] = 0.0; + fRec26[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec30[l29] = 0.0; + fRec25[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec33[l30] = 0.0; + fRec34[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec29[l31] = 0.0; + fRec35[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec28[l32] = 0.0; + fRec33[l32] = 0.0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec37[l33] = 0.0; + fRec36[l33] = 0.0; } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec38[l34] = 0.0; + fRec32[l34] = 0.0; } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec36[l35] = 0.0; + fRec31[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec39[l36] = 0.0; + fRec17[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec35[l37] = 0.0; + fRec40[l37] = 0.0; } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec34[l38] = 0.0; + fRec39[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec43[l39] = 0.0; + fRec38[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { @@ -1354,31 +1935,31 @@ class mydsp : public dsp { } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec42[l41] = 0.0; + fRec45[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec45[l42] = 0.0; + fRec43[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec41[l43] = 0.0; + fRec46[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec40[l44] = 0.0; + fRec42[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fRec0[l45] = 0.0; + fRec41[l45] = 0.0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec46[l46] = 0.0; + fRec50[l46] = 0.0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec50[l47] = 0.0; + fRec51[l47] = 0.0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { @@ -1386,59 +1967,59 @@ class mydsp : public dsp { } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec48[l49] = 0.0; + fRec52[l49] = 0.0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - fRec53[l50] = 0.0; + fRec48[l50] = 0.0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { - fRec54[l51] = 0.0; + fRec47[l51] = 0.0; } for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { - fRec52[l52] = 0.0; + fRec37[l52] = 0.0; } for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { - fRec51[l53] = 0.0; + fRec53[l53] = 0.0; } for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { - fRec58[l54] = 0.0; + fRec54[l54] = 0.0; } for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { - fRec59[l55] = 0.0; + fRec55[l55] = 0.0; } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec57[l56] = 0.0; + fRec60[l56] = 0.0; } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec60[l57] = 0.0; + fRec61[l57] = 0.0; } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec56[l58] = 0.0; + fRec59[l58] = 0.0; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { - fRec55[l59] = 0.0; + fRec62[l59] = 0.0; } for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { - fRec64[l60] = 0.0; + fRec58[l60] = 0.0; } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - fRec65[l61] = 0.0; + fRec57[l61] = 0.0; } for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { - fRec63[l62] = 0.0; + fRec65[l62] = 0.0; } for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { @@ -1446,23 +2027,23 @@ class mydsp : public dsp { } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - fRec62[l64] = 0.0; + fRec64[l64] = 0.0; } for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { - fRec61[l65] = 0.0; + fRec63[l65] = 0.0; } for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fRec47[l66] = 0.0; + fRec56[l66] = 0.0; } for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - fRec67[l67] = 0.0; + fRec70[l67] = 0.0; } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { - fRec68[l68] = 0.0; + fRec71[l68] = 0.0; } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { @@ -1470,15 +2051,15 @@ class mydsp : public dsp { } for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { - fRec70[l70] = 0.0; + fRec68[l70] = 0.0; } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec74[l71] = 0.0; + fRec67[l71] = 0.0; } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { - fRec75[l72] = 0.0; + fRec72[l72] = 0.0; } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { @@ -1486,35 +2067,35 @@ class mydsp : public dsp { } for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { - fRec72[l74] = 0.0; + fRec77[l74] = 0.0; } for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { - fRec79[l75] = 0.0; + fRec78[l75] = 0.0; } for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { - fRec80[l76] = 0.0; + fRec76[l76] = 0.0; } for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { - fRec78[l77] = 0.0; + fRec75[l77] = 0.0; } for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { - fRec81[l78] = 0.0; + fRec74[l78] = 0.0; } for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { - fRec77[l79] = 0.0; + fRec79[l79] = 0.0; } for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { - fRec76[l80] = 0.0; + fRec80[l80] = 0.0; } for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { - fRec71[l81] = 0.0; + fRec81[l81] = 0.0; } for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { @@ -1534,31 +2115,31 @@ class mydsp : public dsp { } for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { - fRec86[l86] = 0.0; + fRec90[l86] = 0.0; } for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { - fRec87[l87] = 0.0; + fRec91[l87] = 0.0; } for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { - fRec88[l88] = 0.0; + fRec89[l88] = 0.0; } for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { - fRec89[l89] = 0.0; + fRec92[l89] = 0.0; } for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { - fRec90[l90] = 0.0; + fRec88[l90] = 0.0; } for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { - fRec91[l91] = 0.0; + fRec87[l91] = 0.0; } for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { - fRec92[l92] = 0.0; + fRec86[l92] = 0.0; } for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { @@ -1701,9 +2282,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1713,73 +2294,73 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39b2f00", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x22a9a70", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a41ca0", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23251a0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39be400", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x22b4da0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39c7da0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22e79f0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a4d1d0", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23b3b30", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a98a90", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2390d40", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39d6640", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22c3640", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39e1cd0", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2379850", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39ed360", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22f5640", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a5b800", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2334b00", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aa71e0", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x240bd10", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a69f40", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23435d0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x39fff30", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22d6120", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a0eb00", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2305e20", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a1d6d0", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x236bc90", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a2c380", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23165c0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1800,256 +2381,256 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph10, "osc", "/output1"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a315c0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x22db1a0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph11, "osc", "/output2"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a387b0", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "osc", "/output2 -70 6"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x231bcb0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph16, "osc", "/output3"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a70080", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "osc", "/output3 -70 6"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2348620", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph17, "osc", "/output4"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a76ce0", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "osc", "/output4 -70 6"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x234f5a0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph18, "osc", "/output5"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a7da20", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "osc", "/output5 -70 6"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23555e0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph19, "osc", "/output6"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a83960", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output6 -70 6"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x235abc0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph20, "osc", "/output7"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a8d530", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output7 -70 6"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2381f10", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph23, "osc", "/output8"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ab0350", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "osc", "/output8 -70 6"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2396370", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph24, "osc", "/output9"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ab9340", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "osc", "/output9 -70 6"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x239f3c0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph25, "osc", "/output10"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ac2020", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output10 -70 6"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23a6240", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph26, "osc", "/output11"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aca4a0", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output11 -70 6"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23ba900", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph27, "osc", "/output12"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ad1a30", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output12 -70 6"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23c4ae0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph28, "osc", "/output13"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ad8ac0", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "osc", "/output13 -70 6"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23ce840", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph29, "osc", "/output14"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3adfff0", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output14 -70 6"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23d85d0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph30, "osc", "/output15"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ae6550", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output15 -70 6"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e30c0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph31, "osc", "/output16"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aed8b0", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "osc", "/output16 -70 6"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23eae90", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph32, "osc", "/output17"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3af50c0", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph31, "osc", "/output17 -70 6"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f3030", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph33, "osc", "/output18"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3afc5c0", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph32, "osc", "/output18 -70 6"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f9db0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph34, "osc", "/output19"); + ui_interface->declare(&fVbargraph34, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b095d0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24169c0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph35, "osc", "/output20"); + ui_interface->declare(&fVbargraph35, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b13960", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2424880", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph36, "osc", "/output21"); + ui_interface->declare(&fVbargraph36, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b1cfa0", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24323e0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph37, "osc", "/output22"); + ui_interface->declare(&fVbargraph37, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b26cd0", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x243f4d0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph38, "osc", "/output23"); + ui_interface->declare(&fVbargraph38, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b2ec30", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x244ba30", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph39, "osc", "/output24"); + ui_interface->declare(&fVbargraph39, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b36670", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24567f0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph40, "osc", "/output25"); + ui_interface->declare(&fVbargraph40, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b3e370", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24603e0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph41, "osc", "/output26"); + ui_interface->declare(&fVbargraph41, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b45f70", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x246a650", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph42, "osc", "/output27"); + ui_interface->declare(&fVbargraph42, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b520c0", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x247a1d0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph43, "osc", "/output28"); + ui_interface->declare(&fVbargraph43, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b59ee0", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24858f0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph44, "osc", "/output29"); + ui_interface->declare(&fVbargraph44, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b63ab0", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2492080", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph45, "osc", "/output30"); + ui_interface->declare(&fVbargraph45, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b6d5a0", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x249dfb0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph46, "osc", "/output31"); + ui_interface->declare(&fVbargraph46, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b79d40", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24ac450", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph47, "osc", "/output32"); + ui_interface->declare(&fVbargraph47, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b84ae0", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24b9e70", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph48, "osc", "/output33"); + ui_interface->declare(&fVbargraph48, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b8efb0", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24c9050", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph49, "osc", "/output34"); + ui_interface->declare(&fVbargraph49, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b98dc0", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24d7400", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph50, "osc", "/output35"); + ui_interface->declare(&fVbargraph50, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ba3270", &fVbargraph50, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24e5fc0", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph51, "osc", "/output36"); + ui_interface->declare(&fVbargraph51, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bad030", &fVbargraph51, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24f2f80", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph52, "osc", "/output37"); + ui_interface->declare(&fVbargraph52, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bb72c0", &fVbargraph52, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25024e0", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph53, "osc", "/output38"); + ui_interface->declare(&fVbargraph53, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bc2760", &fVbargraph53, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2511670", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph54, "osc", "/output39"); + ui_interface->declare(&fVbargraph54, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bc9db0", &fVbargraph54, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x251c660", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph55, "osc", "/output40"); + ui_interface->declare(&fVbargraph55, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bd10f0", &fVbargraph55, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2525d30", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph56, "osc", "/output41"); + ui_interface->declare(&fVbargraph56, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bd86f0", &fVbargraph56, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2530420", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph57, "osc", "/output42"); + ui_interface->declare(&fVbargraph57, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bdffe0", &fVbargraph57, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x253b970", &fVbargraph57, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph58, "osc", "/output43"); + ui_interface->declare(&fVbargraph58, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3be73e0", &fVbargraph58, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2545e50", &fVbargraph58, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph59, "osc", "/output44"); + ui_interface->declare(&fVbargraph59, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3beec80", &fVbargraph59, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2550300", &fVbargraph59, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph60, "osc", "/output45"); + ui_interface->declare(&fVbargraph60, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bf6420", &fVbargraph60, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x255b840", &fVbargraph60, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph61, "osc", "/output46"); + ui_interface->declare(&fVbargraph61, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bfdca0", &fVbargraph61, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25672e0", &fVbargraph61, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph62, "osc", "/output47"); + ui_interface->declare(&fVbargraph62, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3c05630", &fVbargraph62, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2574270", &fVbargraph62, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph63, "osc", "/output48"); + ui_interface->declare(&fVbargraph63, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3c0ccb0", &fVbargraph63, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x257e860", &fVbargraph63, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph64, "osc", "/output49"); + ui_interface->declare(&fVbargraph64, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3c147d0", &fVbargraph64, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25880a0", &fVbargraph64, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph65, "osc", "/output50"); + ui_interface->declare(&fVbargraph65, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3c1c5b0", &fVbargraph65, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2591f60", &fVbargraph65, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -2156,547 +2737,430 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.021994295969128601 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); + double fTemp5 = (fRec3[0] * double(input6[i])); fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow8 * ((fSlow3 * fTemp5) - (fSlow9 * fRec9[0]))); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec8[0] = (fSlow11 * ((fSlow3 * fTemp5) - ((fSlow13 * fRec9[0]) + (fSlow12 * fRec10[0])))); double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (1.3467622079046435e-18 * fTemp6); - double fTemp8 = (fRec3[0] * double(input6[i])); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec13[0] = (fRec13[1] + fRec12[1]); - fRec11[0] = (fSlow11 * ((fSlow3 * fTemp8) - ((fSlow13 * fRec12[0]) + (fSlow12 * fRec13[0])))); - double fTemp9 = (fRec11[0] + (fSlow4 * fTemp8)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = (0.028394513999997331 * fTemp9); - double fTemp11 = (fRec3[0] * double(input7[i])); - fRec16[0] = (fRec16[1] + fRec15[1]); - fRec17[0] = (fRec17[1] + fRec16[1]); - fRec15[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec16[0]) + (fSlow12 * fRec17[0])))); - double fTemp12 = (fRec15[0] + (fSlow4 * fTemp11)); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph4 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = (3.0114518464024883e-18 * fTemp12); - double fTemp14 = (fRec3[0] * double(input8[i])); + double fTemp7 = (0.028394513999997331 * fTemp6); + double fTemp8 = (fRec3[0] * double(input12[i])); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec15[0] = (fRec15[1] + fRec14[1]); + fRec13[0] = (fSlow15 * ((fSlow3 * fTemp8) - ((fSlow17 * fRec14[0]) + (fSlow16 * fRec15[0])))); + fRec16[0] = (fRec16[1] + fRec12[1]); + fRec12[0] = (fSlow14 * (fRec13[0] - (fSlow18 * fRec16[0]))); + double fTemp9 = (fRec12[0] + (fSlow4 * fTemp8)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph3 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.033596842045264641 * fTemp9); + double fTemp11 = (fRec1[0] * (((fTemp1 + fTemp4) + fTemp7) + fTemp10)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph4 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (fRec3[0] * double(input3[i])); fRec20[0] = (fRec20[1] + fRec19[1]); - fRec21[0] = (fRec21[1] + fRec20[1]); - fRec19[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec20[0]) + (fSlow12 * fRec21[0])))); - double fTemp15 = (fRec19[0] + (fSlow4 * fTemp14)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fRec19[0] = (fSlow8 * ((fSlow3 * fTemp12) - (fSlow9 * fRec20[0]))); + double fTemp13 = (fRec19[0] + (fSlow4 * fTemp12)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph5 = FAUSTFLOAT(fRec18[0]); - double fTemp16 = (9.2199121612079837e-35 * fTemp15); - double fTemp17 = (fRec3[0] * double(input12[i])); - fRec25[0] = (fRec25[1] + fRec24[1]); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec24[0] = (fSlow15 * ((fSlow3 * fTemp17) - ((fSlow17 * fRec25[0]) + (fSlow16 * fRec26[0])))); - fRec27[0] = (fRec27[1] + fRec23[1]); - fRec23[0] = (fSlow14 * (fRec24[0] - (fSlow18 * fRec27[0]))); - double fTemp18 = (fRec23[0] + (fSlow4 * fTemp17)); - fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); - fVbargraph6 = FAUSTFLOAT(fRec22[0]); - double fTemp19 = (0.033596842045264641 * fTemp18); - double fTemp20 = (fRec3[0] * double(input13[i])); - fRec31[0] = (fRec31[1] + fRec30[1]); - fRec32[0] = (fRec32[1] + fRec31[1]); - fRec30[0] = (fSlow15 * ((fSlow3 * fTemp20) - ((fSlow17 * fRec31[0]) + (fSlow16 * fRec32[0])))); - fRec33[0] = (fRec33[1] + fRec29[1]); - fRec29[0] = (fSlow14 * (fRec30[0] - (fSlow18 * fRec33[0]))); - double fTemp21 = (fRec29[0] + (fSlow4 * fTemp20)); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph7 = FAUSTFLOAT(fRec28[0]); - double fTemp22 = (5.0391227634343926e-18 * fTemp21); - double fTemp23 = (fRec3[0] * double(input14[i])); - fRec37[0] = (fRec37[1] + fRec36[1]); - fRec38[0] = (fRec38[1] + fRec37[1]); - fRec36[0] = (fSlow15 * ((fSlow3 * fTemp23) - ((fSlow17 * fRec37[0]) + (fSlow16 * fRec38[0])))); - fRec39[0] = (fRec39[1] + fRec35[1]); - fRec35[0] = (fSlow14 * (fRec36[0] - (fSlow18 * fRec39[0]))); - double fTemp24 = (fRec35[0] + (fSlow4 * fTemp23)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph8 = FAUSTFLOAT(fRec34[0]); - double fTemp25 = (2.4393594688416384e-34 * fTemp24); - double fTemp26 = (fRec3[0] * double(input15[i])); - fRec43[0] = (fRec43[1] + fRec42[1]); + double fTemp14 = (fRec3[0] * double(input8[i])); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec24[0] = (fRec24[1] + fRec23[1]); + fRec22[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec23[0]) + (fSlow12 * fRec24[0])))); + double fTemp15 = (fRec22[0] + (fSlow4 * fTemp14)); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph6 = FAUSTFLOAT(fRec21[0]); + double fTemp16 = (fConst20 * fTemp15); + double fTemp17 = (fRec3[0] * double(input13[i])); + fRec28[0] = (fRec28[1] + fRec27[1]); + fRec29[0] = (fRec29[1] + fRec28[1]); + fRec27[0] = (fSlow15 * ((fSlow3 * fTemp17) - ((fSlow17 * fRec28[0]) + (fSlow16 * fRec29[0])))); + fRec30[0] = (fRec30[1] + fRec26[1]); + fRec26[0] = (fSlow14 * (fRec27[0] - (fSlow18 * fRec30[0]))); + double fTemp18 = (fRec26[0] + (fSlow4 * fTemp17)); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph7 = FAUSTFLOAT(fRec25[0]); + double fTemp19 = (fRec3[0] * double(input15[i])); + fRec34[0] = (fRec34[1] + fRec33[1]); + fRec35[0] = (fRec35[1] + fRec34[1]); + fRec33[0] = (fSlow15 * ((fSlow3 * fTemp19) - ((fSlow17 * fRec34[0]) + (fSlow16 * fRec35[0])))); + fRec36[0] = (fRec36[1] + fRec32[1]); + fRec32[0] = (fSlow14 * (fRec33[0] - (fSlow18 * fRec36[0]))); + double fTemp20 = (fRec32[0] + (fSlow4 * fTemp19)); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph8 = FAUSTFLOAT(fRec31[0]); + double fTemp21 = (0.014197256999998666 * fTemp6); + double fTemp22 = (fRec1[0] * (((((fTemp1 + (fConst15 * fTemp13)) + fTemp16) + (fConst23 * fTemp18)) + (fConst25 * fTemp20)) - fTemp21)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph9 = FAUSTFLOAT(fRec17[0]); + output1[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (fRec3[0] * double(input1[i])); + fRec40[0] = (fRec40[1] + fRec39[1]); + fRec39[0] = (fSlow8 * ((fSlow3 * fTemp23) - (fSlow9 * fRec40[0]))); + double fTemp24 = (fRec39[0] + (fSlow4 * fTemp23)); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph10 = FAUSTFLOAT(fRec38[0]); + double fTemp25 = (fConst26 * fTemp15); + double fTemp26 = (fRec3[0] * double(input9[i])); fRec44[0] = (fRec44[1] + fRec43[1]); - fRec42[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec43[0]) + (fSlow16 * fRec44[0])))); - fRec45[0] = (fRec45[1] + fRec41[1]); - fRec41[0] = (fSlow14 * (fRec42[0] - (fSlow18 * fRec45[0]))); - double fTemp27 = (fRec41[0] + (fSlow4 * fTemp26)); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph9 = FAUSTFLOAT(fRec40[0]); - double fTemp28 = (6.0979103388536467e-51 * fTemp27); - double fTemp29 = (fRec1[0] * (((((((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16) + fTemp19) + fTemp22) + fTemp25) + fTemp28)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph10 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.021994295969128601 * fTemp6); - double fTemp31 = (0.024590370452110585 * fTemp15); - double fTemp32 = (0.026560635762986527 * fTemp27); - double fTemp33 = (0.014197256999998666 * fTemp9); - double fTemp34 = (0.020573779994945588 * fTemp21); - double fTemp35 = (fRec1[0] * ((((fTemp1 + fTemp30) + fTemp31) + fTemp32) - (fTemp33 + fTemp34))); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); - fVbargraph11 = FAUSTFLOAT(fRec46[0]); - output1[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (fRec3[0] * double(input1[i])); + fRec45[0] = (fRec45[1] + fRec44[1]); + fRec43[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec44[0]) + (fSlow16 * fRec45[0])))); + fRec46[0] = (fRec46[1] + fRec42[1]); + fRec42[0] = (fSlow14 * (fRec43[0] - (fSlow18 * fRec46[0]))); + double fTemp27 = (fRec42[0] + (fSlow4 * fTemp26)); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph11 = FAUSTFLOAT(fRec41[0]); + double fTemp28 = (fRec3[0] * double(input11[i])); fRec50[0] = (fRec50[1] + fRec49[1]); - fRec49[0] = (fSlow8 * ((fSlow3 * fTemp36) - (fSlow9 * fRec50[0]))); - double fTemp37 = (fRec49[0] + (fSlow4 * fTemp36)); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); - fVbargraph12 = FAUSTFLOAT(fRec48[0]); - double fTemp38 = (0.021994295969128601 * fTemp37); - double fTemp39 = (fTemp1 + fTemp7); - double fTemp40 = (fRec3[0] * double(input4[i])); - fRec53[0] = (fRec53[1] + fRec52[1]); - fRec54[0] = (fRec54[1] + fRec53[1]); - fRec52[0] = (fSlow11 * ((fSlow3 * fTemp40) - ((fSlow13 * fRec53[0]) + (fSlow12 * fRec54[0])))); - double fTemp41 = (fRec52[0] + (fSlow4 * fTemp40)); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph13 = FAUSTFLOAT(fRec51[0]); - double fTemp42 = (fRec3[0] * double(input9[i])); - fRec58[0] = (fRec58[1] + fRec57[1]); - fRec59[0] = (fRec59[1] + fRec58[1]); - fRec57[0] = (fSlow15 * ((fSlow3 * fTemp42) - ((fSlow17 * fRec58[0]) + (fSlow16 * fRec59[0])))); - fRec60[0] = (fRec60[1] + fRec56[1]); - fRec56[0] = (fSlow14 * (fRec57[0] - (fSlow18 * fRec60[0]))); - double fTemp43 = (fRec56[0] + (fSlow4 * fTemp42)); - fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph14 = FAUSTFLOAT(fRec55[0]); - double fTemp44 = (0.026560635762986527 * fTemp43); - double fTemp45 = (fRec3[0] * double(input11[i])); - fRec64[0] = (fRec64[1] + fRec63[1]); + fRec51[0] = (fRec51[1] + fRec50[1]); + fRec49[0] = (fSlow15 * ((fSlow3 * fTemp28) - ((fSlow17 * fRec50[0]) + (fSlow16 * fRec51[0])))); + fRec52[0] = (fRec52[1] + fRec48[1]); + fRec48[0] = (fSlow14 * (fRec49[0] - (fSlow18 * fRec52[0]))); + double fTemp29 = (fRec48[0] + (fSlow4 * fTemp28)); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph12 = FAUSTFLOAT(fRec47[0]); + double fTemp30 = (fRec1[0] * ((((fConst15 * fTemp24) + (0.012698412698412698 * ((fTemp0 + fTemp25) + (fConst27 * fTemp27)))) + (fConst23 * fTemp29)) - fTemp21)); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph13 = FAUSTFLOAT(fRec37[0]); + output2[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fRec1[0] * ((fTemp16 + (0.012698412698412698 * (((fTemp0 + (fConst28 * fTemp13)) + (fConst29 * fTemp18)) + (fConst27 * fTemp20)))) - fTemp21)); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph14 = FAUSTFLOAT(fRec53[0]); + output3[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (fRec1[0] * (((fConst25 * fTemp27) + (0.012698412698412698 * ((fTemp25 + (fTemp0 + (fConst28 * fTemp24))) + (fConst29 * fTemp29)))) - fTemp21)); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph15 = FAUSTFLOAT(fRec54[0]); + output4[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (fRec1[0] * ((fTemp1 + fTemp7) - (fTemp4 + fTemp10))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph16 = FAUSTFLOAT(fRec55[0]); + output5[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (fRec3[0] * double(input14[i])); + fRec60[0] = (fRec60[1] + fRec59[1]); + fRec61[0] = (fRec61[1] + fRec60[1]); + fRec59[0] = (fSlow15 * ((fSlow3 * fTemp34) - ((fSlow17 * fRec60[0]) + (fSlow16 * fRec61[0])))); + fRec62[0] = (fRec62[1] + fRec58[1]); + fRec58[0] = (fSlow14 * (fRec59[0] - (fSlow18 * fRec62[0]))); + double fTemp35 = (fRec58[0] + (fSlow4 * fTemp34)); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph17 = FAUSTFLOAT(fRec57[0]); + double fTemp36 = (fConst16 * ((fConst30 * fTemp15) + (fConst33 * fTemp35))); + double fTemp37 = (fRec3[0] * double(input7[i])); fRec65[0] = (fRec65[1] + fRec64[1]); - fRec63[0] = (fSlow15 * ((fSlow3 * fTemp45) - ((fSlow17 * fRec64[0]) + (fSlow16 * fRec65[0])))); - fRec66[0] = (fRec66[1] + fRec62[1]); - fRec62[0] = (fSlow14 * (fRec63[0] - (fSlow18 * fRec66[0]))); - double fTemp46 = (fRec62[0] + (fSlow4 * fTemp45)); - fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); - fVbargraph15 = FAUSTFLOAT(fRec61[0]); - double fTemp47 = (0.020573779994945588 * fTemp46); - double fTemp48 = (fRec1[0] * (((fTemp38 + fTemp39) + (3.0114518464024883e-18 * fTemp41)) - (fTemp44 + (fTemp47 + (((fTemp33 + fTemp31) + (1.2597806908585981e-18 * fTemp21)) + (4.879109635569025e-18 * fTemp27)))))); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); - fVbargraph16 = FAUSTFLOAT(fRec47[0]); - output2[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (fRec1[0] * (((9.7582192711380499e-18 * fTemp43) + ((2.6935244158092871e-18 * fTemp37) + (fTemp34 + (fTemp1 + fTemp31)))) - ((6.0229036928049765e-18 * fTemp41) + ((2.5195613817171963e-18 * fTemp46) + (fTemp32 + (fTemp30 + fTemp33)))))); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); - fVbargraph17 = FAUSTFLOAT(fRec67[0]); - output3[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (fRec1[0] * ((fTemp44 + ((9.0343555392074636e-18 * fTemp41) + (fTemp47 + ((fTemp1 + (3.7793420725757941e-18 * fTemp21)) + (1.4637328906707076e-17 * fTemp27))))) - (fTemp38 + (fTemp31 + (fTemp33 + (4.0402866237139308e-18 * fTemp6)))))); + fRec66[0] = (fRec66[1] + fRec65[1]); + fRec64[0] = (fSlow11 * ((fSlow3 * fTemp37) - ((fSlow13 * fRec65[0]) + (fSlow12 * fRec66[0])))); + double fTemp38 = (fRec64[0] + (fSlow4 * fTemp37)); + fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph18 = FAUSTFLOAT(fRec63[0]); + double fTemp39 = (0.022574955908289243 * fTemp0); + double fTemp40 = (0.027648561470568499 * fTemp3); + double fTemp41 = (0.01261978399999881 * fTemp6); + double fTemp42 = (fConst38 * fTemp20); + double fTemp43 = (0.010558468816293317 * fTemp9); + double fTemp44 = (fRec1[0] * ((fTemp36 + ((fConst10 * (((fConst34 * fTemp13) + (fConst36 * fTemp38)) + (fConst37 * fTemp18))) + (((fTemp39 + fTemp40) + fTemp41) + fTemp42))) - fTemp43)); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph19 = FAUSTFLOAT(fRec56[0]); + output6[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (fConst39 * fTemp15); + double fTemp46 = ((fTemp0 + fTemp45) + (fConst40 * fTemp27)); + double fTemp47 = (fConst42 * fTemp35); + double fTemp48 = (fTemp40 + fTemp41); + double fTemp49 = (fRec3[0] * double(input5[i])); + fRec70[0] = (fRec70[1] + fRec69[1]); + fRec71[0] = (fRec71[1] + fRec70[1]); + fRec69[0] = (fSlow11 * ((fSlow3 * fTemp49) - ((fSlow13 * fRec70[0]) + (fSlow12 * fRec71[0])))); + double fTemp50 = (fRec69[0] + (fSlow4 * fTemp49)); fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); - fVbargraph18 = FAUSTFLOAT(fRec68[0]); - output4[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (fRec1[0] * ((fTemp28 + (fTemp22 + (fTemp16 + (fTemp10 + fTemp39)))) - (fTemp25 + (fTemp19 + (fTemp4 + fTemp13))))); - fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); - fVbargraph19 = FAUSTFLOAT(fRec69[0]); - output5[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (0.022574955908289243 * fTemp0); - double fTemp53 = (0.027648561470568499 * fTemp3); - double fTemp54 = (fTemp52 + fTemp53); - double fTemp55 = (0.027648561470568506 * fTemp6); - double fTemp56 = (0.012619783999998805 * fTemp9); - double fTemp57 = (0.043716214137085485 * fTemp12); - double fTemp58 = (0.021858107068542749 * fTemp15); - double fTemp59 = (0.038794291597509752 * fTemp21); - double fTemp60 = (0.04089277388695433 * fTemp24); - double fTemp61 = (0.016694405031674409 * fTemp27); - double fTemp62 = (0.010558468816293319 * fTemp18); - double fTemp63 = (fRec1[0] * ((((((((fTemp54 + fTemp55) + fTemp56) + fTemp57) + fTemp58) + fTemp59) + fTemp60) + fTemp61) - fTemp62)); - fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); - fVbargraph20 = FAUSTFLOAT(fRec70[0]); - output6[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (fRec3[0] * double(input5[i])); - fRec74[0] = (fRec74[1] + fRec73[1]); - fRec75[0] = (fRec75[1] + fRec74[1]); - fRec73[0] = (fSlow11 * ((fSlow3 * fTemp64) - ((fSlow13 * fRec74[0]) + (fSlow12 * fRec75[0])))); - double fTemp65 = (fRec73[0] + (fSlow4 * fTemp64)); - fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); - fVbargraph21 = FAUSTFLOAT(fRec72[0]); - double fTemp66 = (0.043716214137085485 * fTemp65); - double fTemp67 = (fRec3[0] * double(input10[i])); - fRec79[0] = (fRec79[1] + fRec78[1]); - fRec80[0] = (fRec80[1] + fRec79[1]); - fRec78[0] = (fSlow15 * ((fSlow3 * fTemp67) - ((fSlow17 * fRec79[0]) + (fSlow16 * fRec80[0])))); - fRec81[0] = (fRec81[1] + fRec77[1]); - fRec77[0] = (fSlow14 * (fRec78[0] - (fSlow18 * fRec81[0]))); - double fTemp68 = (fRec77[0] + (fSlow4 * fTemp67)); - fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); - fVbargraph22 = FAUSTFLOAT(fRec76[0]); - double fTemp69 = (5.0079204648915091e-18 * fTemp68); - double fTemp70 = (2.6768460856911014e-18 * fTemp41); - double fTemp71 = (0.027648561470568506 * fTemp37); - double fTemp72 = (0.038794291597509752 * fTemp46); - double fTemp73 = (1.6929861152980278e-18 * fTemp6); - double fTemp74 = (2.6768460856911007e-18 * fTemp12); - double fTemp75 = (2.3754652515039685e-18 * fTemp21); - double fTemp76 = (0.016694405031674409 * fTemp43); - double fTemp77 = (3.0667124528564294e-18 * fTemp27); - double fTemp78 = (fRec1[0] * ((fTemp66 + (fTemp69 + (fTemp70 + (fTemp71 + (fTemp72 + (((fTemp56 + (fTemp54 + fTemp73)) + fTemp74) + fTemp75)))))) - (fTemp76 + ((fTemp60 + (fTemp58 + fTemp62)) + fTemp77)))); - fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); - fVbargraph23 = FAUSTFLOAT(fRec71[0]); - output7[i] = FAUSTFLOAT(fTemp78); - double fTemp79 = (5.3536921713822013e-18 * fTemp65); - double fTemp80 = (6.1334249057128588e-18 * fTemp43); - double fTemp81 = (3.3859722305960555e-18 * fTemp37); - double fTemp82 = (4.7509305030079371e-18 * fTemp46); - double fTemp83 = (fTemp54 + fTemp56); - double fTemp84 = (1.0015840929783018e-17 * fTemp68); - double fTemp85 = (5.3536921713822029e-18 * fTemp41); - double fTemp86 = (fRec1[0] * ((fTemp79 + (fTemp80 + (fTemp81 + (fTemp82 + (fTemp60 + (fTemp58 + fTemp83)))))) - (fTemp84 + (fTemp85 + (fTemp61 + (fTemp59 + (fTemp62 + (fTemp55 + fTemp57)))))))); - fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); - fVbargraph24 = FAUSTFLOAT(fRec82[0]); - output8[i] = FAUSTFLOAT(fTemp86); - double fTemp87 = (1.5023761394674526e-17 * fTemp68); - double fTemp88 = (8.0305382570733035e-18 * fTemp41); - double fTemp89 = (9.2001373585692901e-18 * fTemp27); - double fTemp90 = (5.0789583458940831e-18 * fTemp6); - double fTemp91 = (8.0305382570733005e-18 * fTemp12); - double fTemp92 = (7.1263957545119048e-18 * fTemp21); - double fTemp93 = (fRec1[0] * ((fTemp87 + (fTemp76 + (fTemp88 + (fTemp83 + fTemp89)))) - (fTemp66 + (fTemp71 + (fTemp72 + (fTemp60 + ((fTemp62 + (fTemp58 + (fTemp90 + fTemp91))) + fTemp92))))))); - fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); - fVbargraph25 = FAUSTFLOAT(fRec83[0]); - output9[i] = FAUSTFLOAT(fTemp93); - double fTemp94 = (0.043716214137085485 * fTemp41); - double fTemp95 = (0.027648561470568499 * fTemp37); - double fTemp96 = (fTemp52 + fTemp55); - double fTemp97 = (0.025862861065006505 * fTemp46); - double fTemp98 = (0.025239567999997631 * fTemp9); - double fTemp99 = (0.025862861065006511 * fTemp21); - double fTemp100 = (fRec1[0] * ((fTemp94 + (fTemp95 + (fTemp96 + (2.6768460856911007e-18 * fTemp15)))) - ((fTemp97 + (fTemp98 + fTemp99)) + (0.033388810063348803 * (fTemp27 - fTemp43))))); - fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); - fVbargraph26 = FAUSTFLOAT(fRec84[0]); - output10[i] = FAUSTFLOAT(fTemp100); - double fTemp101 = (0.025862861065006511 * fTemp46); - double fTemp102 = (fRec1[0] * (((0.033388810063348796 * fTemp43) + (fTemp71 + ((fTemp52 + (0.025862861065006505 * fTemp21)) + (0.033388810063348817 * fTemp27)))) - (fTemp94 + (((fTemp98 + (0.027648561470568499 * fTemp6)) + (8.0305382570733005e-18 * fTemp15)) + fTemp101)))); - fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); - fVbargraph27 = FAUSTFLOAT(fRec85[0]); - output11[i] = FAUSTFLOAT(fTemp102); - double fTemp103 = (fRec1[0] * ((fTemp94 + (fTemp97 + ((fTemp99 + (fTemp52 + (1.3384230428455503e-17 * fTemp15))) + (0.033388810063348762 * fTemp27)))) - ((fTemp95 + (fTemp55 + fTemp98)) + (0.033388810063348852 * fTemp43)))); - fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); - fVbargraph28 = FAUSTFLOAT(fRec86[0]); - output12[i] = FAUSTFLOAT(fTemp103); - double fTemp104 = (fRec1[0] * ((fTemp101 + (fTemp52 + (0.027648561470568496 * fTemp6))) - ((0.033388810063348817 * fTemp43) + (fTemp94 + (fTemp71 + (((fTemp98 + (1.8737922599837705e-17 * fTemp15)) + (0.025862861065006501 * fTemp21)) + (0.033388810063348796 * fTemp27))))))); - fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); - fVbargraph29 = FAUSTFLOAT(fRec87[0]); - output13[i] = FAUSTFLOAT(fTemp104); - double fTemp105 = (fRec1[0] * ((fTemp61 + (fTemp59 + (fTemp62 + (fTemp58 + (fTemp56 + fTemp96))))) - (fTemp60 + (fTemp53 + fTemp57)))); - fRec88[0] = max((fRec88[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); - fVbargraph30 = FAUSTFLOAT(fRec88[0]); - output14[i] = FAUSTFLOAT(fTemp105); - double fTemp106 = (fRec1[0] * ((fTemp70 + (fTemp71 + (fTemp72 + (fTemp60 + (fTemp75 + (fTemp62 + (fTemp56 + (fTemp52 + fTemp73)))))))) - (fTemp66 + (fTemp69 + (fTemp76 + (fTemp77 + (fTemp58 + (fTemp53 + fTemp74)))))))); - fRec89[0] = max((fRec89[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); - fVbargraph31 = FAUSTFLOAT(fRec89[0]); - output15[i] = FAUSTFLOAT(fTemp106); - double fTemp107 = (fTemp52 + fTemp56); - double fTemp108 = (fRec1[0] * ((fTemp84 + (fTemp80 + (fTemp81 + (fTemp82 + (fTemp62 + (fTemp58 + (fTemp57 + fTemp107))))))) - (fTemp79 + (fTemp85 + (fTemp61 + (fTemp60 + (fTemp59 + (fTemp53 + fTemp55)))))))); - fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); - fVbargraph32 = FAUSTFLOAT(fRec90[0]); - output16[i] = FAUSTFLOAT(fTemp108); - double fTemp109 = (fRec1[0] * ((fTemp66 + (fTemp76 + (fTemp88 + (fTemp89 + (fTemp60 + (fTemp62 + (fTemp91 + fTemp107))))))) - (fTemp87 + (fTemp71 + (fTemp72 + (fTemp92 + (fTemp58 + (fTemp53 + fTemp90)))))))); - fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp109)))))); - fVbargraph33 = FAUSTFLOAT(fRec91[0]); - output17[i] = FAUSTFLOAT(fTemp109); - double fTemp110 = (fTemp0 + fTemp3); - double fTemp111 = (0.021093750000000001 * fTemp110); - double fTemp112 = (0.027231914153020904 * fTemp65); - double fTemp113 = (0.041597435974919175 * fTemp68); - double fTemp114 = (0.016982082124440745 * fTemp43); - double fTemp115 = (0.027231914153020897 * fTemp41); - double fTemp116 = (0.021093749999999994 * fTemp37); - double fTemp117 = (0.013154264250377145 * fTemp46); - double fTemp118 = (5.236595479505967e-18 * fTemp9); - double fTemp119 = ((0.021093749999999998 * fTemp6) + fTemp118); - double fTemp120 = (0.027231914153020911 * fTemp12); - double fTemp121 = (1.6674738251076273e-18 * fTemp15); - double fTemp122 = (0.013154264250377147 * fTemp21); - double fTemp123 = (2.5471083409710867e-18 * fTemp24); - double fTemp124 = (0.021480823570105497 * fTemp18); - double fTemp125 = (0.016982082124440741 * fTemp27); - double fTemp126 = (fRec1[0] * ((fTemp111 + (fTemp112 + (fTemp113 + (fTemp114 + (fTemp115 + (fTemp116 + (fTemp117 + ((((fTemp119 + fTemp120) + fTemp121) + fTemp122) + fTemp123)))))))) - (fTemp124 + fTemp125))); - fRec92[0] = max((fRec92[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); - fVbargraph34 = FAUSTFLOAT(fRec92[0]); - output18[i] = FAUSTFLOAT(fTemp126); - double fTemp127 = (0.027231914153020911 * fTemp65); - double fTemp128 = (0.016982082124440741 * fTemp43); - double fTemp129 = (0.021093749999999998 * fTemp37); - double fTemp130 = (0.013154264250377147 * fTemp46); - double fTemp131 = (0.016982082124440748 * fTemp27); - double fTemp132 = (0.021093749999999994 * fTemp6); - double fTemp133 = (0.027231914153020904 * fTemp12); - double fTemp134 = (5.0024214753228816e-18 * fTemp15); - double fTemp135 = (0.013154264250377145 * fTemp21); - double fTemp136 = (7.6413250229132581e-18 * fTemp24); - double fTemp137 = (fRec1[0] * ((fTemp111 + (fTemp127 + (fTemp128 + (fTemp129 + (fTemp130 + (fTemp118 + fTemp131)))))) - (fTemp113 + (fTemp115 + (((fTemp124 + ((fTemp132 + fTemp133) + fTemp134)) + fTemp135) + fTemp136))))); - fRec93[0] = max((fRec93[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp137)))))); + fVbargraph20 = FAUSTFLOAT(fRec68[0]); + double fTemp51 = (fRec1[0] * (((0.022574955908289243 * (fTemp46 + fTemp47)) + (fTemp48 + (fConst10 * (((fConst34 * fTemp24) + (fConst36 * fTemp50)) + (fConst37 * fTemp29))))) - fTemp43)); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph21 = FAUSTFLOAT(fRec67[0]); + output7[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (fTemp0 + (fConst43 * fTemp13)); + double fTemp53 = (fConst40 * fTemp20); + double fTemp54 = (fRec1[0] * (((fTemp36 + fTemp48) + (0.022574955908289243 * (((fTemp52 + (fConst45 * fTemp38)) + (fConst47 * fTemp18)) + fTemp53))) - fTemp43)); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph22 = FAUSTFLOAT(fRec72[0]); + output8[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (fConst38 * fTemp27); + double fTemp56 = (fTemp0 + (fConst43 * fTemp24)); + double fTemp57 = (fRec1[0] * (((fTemp48 + fTemp55) + (0.022574955908289243 * (fTemp47 + ((fTemp45 + (fTemp56 + (fConst45 * fTemp50))) + (fConst47 * fTemp29))))) - fTemp43)); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph23 = FAUSTFLOAT(fRec73[0]); + output9[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (fRec3[0] * double(input4[i])); + fRec77[0] = (fRec77[1] + fRec76[1]); + fRec78[0] = (fRec78[1] + fRec77[1]); + fRec76[0] = (fSlow11 * ((fSlow3 * fTemp58) - ((fSlow13 * fRec77[0]) + (fSlow12 * fRec78[0])))); + double fTemp59 = (fRec76[0] + (fSlow4 * fTemp58)); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph24 = FAUSTFLOAT(fRec75[0]); + double fTemp60 = (0.025239567999997631 * fTemp6); + double fTemp61 = (fRec1[0] * (((0.022574955908289243 * (fTemp0 + (fConst48 * fTemp20))) + ((fConst22 * ((0.011287477954144623 * fTemp18) + (0.011287477954144622 * fTemp29))) + ((fConst19 * ((1.5998055129555246e-17 * fTemp15) + (0.072048835120117657 * fTemp59))) + ((fConst14 * ((0.025473109945013343 * fTemp13) + (0.025473109945013336 * fTemp24))) + (fConst49 * fTemp27))))) - fTemp60)); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph25 = FAUSTFLOAT(fRec74[0]); + output10[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (fConst50 * fTemp24); + double fTemp63 = (fConst26 * fTemp59); + double fTemp64 = (fRec1[0] * (((fConst24 * ((0.10189243978005338 * fTemp20) + (0.1018924397800533 * fTemp27))) + ((fTemp62 + (fConst51 * fTemp29)) + (0.022574955908289243 * ((((fTemp0 + (fConst52 * fTemp13)) + fTemp63) + (fConst53 * fTemp15)) + (fConst54 * fTemp18))))) - fTemp60)); + fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph26 = FAUSTFLOAT(fRec79[0]); + output11[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = (fRec1[0] * (((0.022574955908289243 * (((((fTemp0 + (fConst52 * fTemp24)) + (fConst55 * fTemp13)) + (fConst56 * fTemp27)) + (fConst54 * fTemp29)) + (fConst57 * fTemp18))) + ((fConst19 * ((3.1996110259110492e-17 * fTemp15) + (0.072048835120117671 * fTemp59))) + (fConst58 * fTemp20))) - fTemp60)); + fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph27 = FAUSTFLOAT(fRec80[0]); + output12[i] = FAUSTFLOAT(fTemp65); + double fTemp66 = (fRec1[0] * ((((fConst59 * fTemp13) + (fConst60 * fTemp18)) + (0.022574955908289243 * (((((fTemp63 + (fTemp0 + (fConst55 * fTemp24))) + (fConst61 * fTemp15)) + (fConst62 * fTemp27)) + (fConst57 * fTemp29)) + (fConst63 * fTemp20)))) - fTemp60)); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph28 = FAUSTFLOAT(fRec81[0]); + output13[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = (fConst69 * fTemp15); + double fTemp68 = (fRec1[0] * (((0.031925808815477283 * ((fConst65 * fTemp38) + (fConst66 * fTemp35))) + ((fConst68 * fTemp18) + (fTemp42 + (fTemp67 + ((fConst50 * fTemp13) + (fTemp43 + (fTemp39 + fTemp41))))))) - fTemp40)); + fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph29 = FAUSTFLOAT(fRec82[0]); + output14[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = (fConst70 * fTemp35); + double fTemp70 = (fTemp41 + fTemp43); + double fTemp71 = (fRec1[0] * (((0.022574955908289243 * (fTemp46 + fTemp69)) + ((fConst68 * fTemp29) + ((fConst71 * fTemp50) + (fTemp62 + fTemp70)))) - fTemp40)); + fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph30 = FAUSTFLOAT(fRec83[0]); + output15[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = (fRec1[0] * ((((fConst72 * fTemp35) + (fTemp67 + fTemp70)) + (0.022574955908289243 * (fTemp53 + ((fTemp52 + (fConst73 * fTemp38)) + (fConst74 * fTemp18))))) - fTemp40)); + fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); + fVbargraph31 = FAUSTFLOAT(fRec84[0]); + output16[i] = FAUSTFLOAT(fTemp72); + double fTemp73 = (fRec1[0] * (((fTemp55 + fTemp70) + (0.022574955908289243 * (fTemp69 + ((fTemp45 + (fTemp56 + (fConst73 * fTemp50))) + (fConst74 * fTemp29))))) - fTemp40)); + fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph32 = FAUSTFLOAT(fRec85[0]); + output17[i] = FAUSTFLOAT(fTemp73); + double fTemp74 = (fTemp0 + fTemp3); + double fTemp75 = (fConst75 * fTemp20); + double fTemp76 = ((9.9655853669580557e-18 * fTemp15) + (0.044881006545161167 * fTemp59)); + double fTemp77 = (fRec3[0] * double(input10[i])); + fRec90[0] = (fRec90[1] + fRec89[1]); + fRec91[0] = (fRec91[1] + fRec90[1]); + fRec89[0] = (fSlow15 * ((fSlow3 * fTemp77) - ((fSlow17 * fRec90[0]) + (fSlow16 * fRec91[0])))); + fRec92[0] = (fRec92[1] + fRec88[1]); + fRec88[0] = (fSlow14 * (fRec89[0] - (fSlow18 * fRec92[0]))); + double fTemp78 = (fRec88[0] + (fSlow4 * fTemp77)); + fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph33 = FAUSTFLOAT(fRec87[0]); + double fTemp79 = (5.236595479505967e-18 * fTemp6); + double fTemp80 = (fConst78 * fTemp27); + double fTemp81 = ((0.019434045907762623 * fTemp13) + (0.019434045907762619 * fTemp24)); + double fTemp82 = (fConst79 * fTemp50); + double fTemp83 = (0.021480823570105497 * fTemp9); + double fTemp84 = (fRec1[0] * (((0.021093750000000001 * (fTemp74 + fTemp75)) + ((fConst16 * (((fConst18 * fTemp76) + (fConst76 * fTemp78)) + (fConst77 * fTemp35))) + ((fTemp79 + fTemp80) + (fConst10 * (((((fConst13 * fTemp81) + fTemp82) + (fConst79 * fTemp38)) + (fConst80 * fTemp29)) + (fConst81 * fTemp18)))))) - fTemp83)); + fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph34 = FAUSTFLOAT(fRec86[0]); + output18[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = (fConst24 * ((0.051824122420700336 * fTemp20) + (0.051824122420700287 * fTemp27))); + double fTemp86 = (fConst82 * fTemp13); + double fTemp87 = (fConst83 * fTemp59); + double fTemp88 = (fConst85 * fTemp15); + double fTemp89 = (fConst86 * fTemp78); + double fTemp90 = (fRec1[0] * ((fTemp85 + ((0.021093750000000001 * (((((((fTemp74 + fTemp86) + fTemp87) + (fConst84 * fTemp38)) + fTemp88) + fTemp89) + (fConst87 * fTemp18)) + (fConst88 * fTemp35))) + (fTemp79 + (fConst10 * ((fTemp82 + (fConst89 * fTemp24)) + (fConst81 * fTemp29)))))) - fTemp83)); + fRec93[0] = max((fRec93[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); fVbargraph35 = FAUSTFLOAT(fRec93[0]); - output19[i] = FAUSTFLOAT(fTemp137); - double fTemp138 = (8.3373691255381378e-18 * fTemp15); - double fTemp139 = (1.2735541704855431e-17 * fTemp24); - double fTemp140 = (0.016982082124440721 * fTemp27); - double fTemp141 = (0.016982082124440766 * fTemp43); - double fTemp142 = (0.013154264250377148 * fTemp21); - double fTemp143 = (fRec1[0] * ((fTemp113 + (fTemp115 + (((fTemp118 + fTemp138) + fTemp139) + fTemp140))) - ((0.021093750000000001 * (fTemp6 - fTemp110)) + (fTemp112 + (fTemp141 + (fTemp116 + (fTemp117 + ((fTemp120 + fTemp124) + fTemp142)))))))); - fRec94[0] = max((fRec94[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp143)))))); + output19[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = ((1.9931170733916111e-17 * fTemp15) + (0.044881006545161174 * fTemp59)); + double fTemp92 = (fTemp0 + (fConst82 * fTemp24)); + double fTemp93 = (fConst92 * fTemp13); + double fTemp94 = (fConst94 * fTemp27); + double fTemp95 = (fConst96 * fTemp20); + double fTemp96 = (fRec1[0] * (((fConst16 * (((fConst18 * fTemp91) + (fConst90 * fTemp78)) + (fConst91 * fTemp35))) + ((0.021093750000000001 * (((((((fTemp3 + fTemp92) + fTemp93) + (fConst84 * fTemp50)) + (fConst93 * fTemp38)) + fTemp94) + (fConst87 * fTemp29)) + (fConst95 * fTemp18))) + (fTemp79 + fTemp95))) - fTemp83)); + fRec94[0] = max((fRec94[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); fVbargraph36 = FAUSTFLOAT(fRec94[0]); - output20[i] = FAUSTFLOAT(fTemp143); - double fTemp144 = (fTemp0 - fTemp37); - double fTemp145 = (fTemp118 + (0.021093749999999991 * fTemp6)); - double fTemp146 = (0.027231914153020901 * fTemp12); - double fTemp147 = (0.016982082124440748 * fTemp43); - double fTemp148 = (0.013154264250377148 * fTemp46); - double fTemp149 = (1.167231677575339e-17 * fTemp15); - double fTemp150 = (1.7829758386797603e-17 * fTemp24); - double fTemp151 = (fRec1[0] * (((0.021093750000000001 * (fTemp3 + fTemp144)) + (fTemp135 + (fTemp145 + fTemp146))) - (fTemp127 + (fTemp113 + (fTemp147 + (fTemp115 + (fTemp148 + (fTemp125 + ((fTemp124 + fTemp149) + fTemp150))))))))); - fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp151)))))); + output20[i] = FAUSTFLOAT(fTemp96); + double fTemp97 = (fTemp0 + (fConst92 * fTemp24)); + double fTemp98 = (fConst100 * fTemp15); + double fTemp99 = (fConst101 * fTemp27); + double fTemp100 = (fConst103 * fTemp20); + double fTemp101 = (fRec1[0] * (((fTemp79 + (fConst10 * (((fConst97 * fTemp13) + (fConst98 * fTemp38)) + (fConst99 * fTemp18)))) + (0.021093750000000001 * ((((fTemp89 + ((((fTemp87 + (fTemp3 + fTemp97)) + (fConst93 * fTemp50)) + fTemp98) + fTemp99)) + (fConst95 * fTemp29)) + (fConst102 * fTemp35)) + fTemp100))) - fTemp83)); + fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); fVbargraph37 = FAUSTFLOAT(fRec95[0]); - output21[i] = FAUSTFLOAT(fTemp151); - double fTemp152 = (fTemp0 - fTemp3); - double fTemp153 = (0.021093750000000001 * fTemp152); - double fTemp154 = (fRec1[0] * ((fTemp153 + (fTemp114 + (fTemp115 + (fTemp116 + (fTemp117 + (fTemp122 + (fTemp124 + (fTemp119 + fTemp121)))))))) - (fTemp112 + (fTemp113 + (fTemp125 + (fTemp120 + fTemp123)))))); - fRec96[0] = max((fRec96[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp154)))))); + output21[i] = FAUSTFLOAT(fTemp101); + double fTemp102 = (fTemp0 - fTemp3); + double fTemp103 = (fTemp79 + fTemp83); + double fTemp104 = (fRec1[0] * ((0.021093750000000001 * (fTemp75 + (fTemp102 + (fConst105 * fTemp50)))) + ((fConst106 * ((6.6238275600721768e-18 * fTemp35) + (0.029831067331307477 * fTemp78))) + ((fConst107 * ((0.010546875000000002 * fTemp18) + (0.010546875000000001 * fTemp29))) + ((fConst108 * fTemp38) + ((fConst19 * fTemp76) + ((fConst14 * fTemp81) + (fTemp80 + fTemp103)))))))); + fRec96[0] = max((fRec96[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); fVbargraph38 = FAUSTFLOAT(fRec96[0]); - output22[i] = FAUSTFLOAT(fTemp154); - double fTemp155 = (fRec1[0] * ((fTemp153 + (fTemp113 + (fTemp128 + (fTemp129 + (fTemp130 + (fTemp131 + (fTemp136 + (fTemp124 + (fTemp118 + fTemp133))))))))) - (fTemp127 + (fTemp115 + (fTemp135 + (fTemp132 + fTemp134)))))); - fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); + output22[i] = FAUSTFLOAT(fTemp104); + double fTemp105 = (fConst110 * fTemp78); + double fTemp106 = (fRec1[0] * ((0.021093750000000001 * ((((fTemp88 + ((fTemp87 + (fTemp86 + fTemp102)) + (fConst109 * fTemp38))) + fTemp105) + (fConst111 * fTemp18)) + (fConst112 * fTemp35))) + ((fConst113 * fTemp29) + ((fConst108 * fTemp50) + (fTemp85 + ((fConst114 * fTemp24) + fTemp103)))))); + fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); fVbargraph39 = FAUSTFLOAT(fRec97[0]); - output23[i] = FAUSTFLOAT(fTemp155); - double fTemp156 = (fRec1[0] * ((fTemp112 + (fTemp115 + (fTemp140 + (fTemp124 + (fTemp138 + (fTemp118 + fTemp120)))))) - ((0.021093750000000001 * (fTemp6 - fTemp152)) + (fTemp113 + (fTemp141 + (fTemp116 + (fTemp117 + (fTemp142 + fTemp139)))))))); - fRec98[0] = max((fRec98[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp156)))))); + output23[i] = FAUSTFLOAT(fTemp106); + double fTemp107 = (fRec1[0] * ((fConst106 * ((1.3247655120144354e-17 * fTemp35) + (0.029831067331307481 * fTemp78))) + ((0.021093750000000001 * (((fTemp94 + (((fTemp93 - (fTemp3 - fTemp92)) + (fConst109 * fTemp50)) + (fConst115 * fTemp38))) + (fConst111 * fTemp29)) + (fConst116 * fTemp18))) + ((fConst19 * fTemp91) + (fTemp95 + fTemp103))))); + fRec98[0] = max((fRec98[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); fVbargraph40 = FAUSTFLOAT(fRec98[0]); - output24[i] = FAUSTFLOAT(fTemp156); - double fTemp157 = (fRec1[0] * ((fTemp127 + (fTemp113 + (fTemp150 + (fTemp135 + (fTemp124 + fTemp145))))) - ((0.021093750000000001 * (fTemp3 - fTemp144)) + (fTemp147 + (fTemp115 + (fTemp148 + (fTemp125 + (fTemp146 + fTemp149)))))))); - fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp157)))))); + output24[i] = FAUSTFLOAT(fTemp107); + double fTemp108 = (fRec1[0] * ((((fConst117 * fTemp38) + ((fConst118 * fTemp13) + fTemp103)) + (fConst119 * fTemp18)) + (0.021093750000000001 * (fTemp100 + (((fTemp105 + (fTemp99 + (fTemp98 + ((fTemp87 - (fTemp3 - fTemp97)) + (fConst115 * fTemp50))))) + (fConst116 * fTemp29)) + (fConst120 * fTemp35)))))); + fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); fVbargraph41 = FAUSTFLOAT(fRec99[0]); - output25[i] = FAUSTFLOAT(fTemp157); - double fTemp158 = (0.021308452520676528 * (fTemp12 + fTemp65)); - double fTemp159 = (0.010535180889746065 * (fTemp6 + fTemp37)); - double fTemp160 = (0.016998264729033836 * fTemp68); - double fTemp161 = (0.0023131708388267431 * fTemp43); - double fTemp162 = (0.0071028175068921654 * fTemp41); - double fTemp163 = (0.030460165261409405 * fTemp46); - double fTemp164 = (0.02017333553791887 * fTemp0); - double fTemp165 = (0.031605542669238249 * fTemp3); - double fTemp166 = (fTemp164 + fTemp165); - double fTemp167 = (0.032806508796871948 * fTemp9); - double fTemp168 = (fTemp166 + fTemp167); - double fTemp169 = (0.0263335984839893 * fTemp18); - double fTemp170 = (fTemp168 + fTemp169); - double fTemp171 = (0.030460165261409402 * fTemp21); - double fTemp172 = (1.1422201709353029e-18 * fTemp15); - double fTemp173 = (2.7335294515958808e-18 * fTemp24); - double fTemp174 = (0.0023131708388267449 * fTemp27); - double fTemp175 = (fRec1[0] * ((fTemp158 + (fTemp159 + (fTemp160 + (fTemp161 + (fTemp162 + (fTemp163 + (fTemp170 + fTemp171))))))) - ((fTemp172 + fTemp173) + fTemp174))); - fRec100[0] = max((fRec100[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp175)))))); + output25[i] = FAUSTFLOAT(fTemp108); + double fTemp109 = ((0.0097062489627452956 * fTemp13) + (0.0097062489627452973 * fTemp24)); + double fTemp110 = (fConst121 * fTemp50); + double fTemp111 = (fConst123 * fTemp29); + double fTemp112 = (fConst127 * fTemp27); + double fTemp113 = (0.031605542669238249 * fTemp3); + double fTemp114 = (0.032806508796871948 * fTemp6); + double fTemp115 = (0.026333598483989317 * fTemp9); + double fTemp116 = ((fTemp113 + fTemp114) + fTemp115); + double fTemp117 = (fConst128 * fTemp15); + double fTemp118 = (fTemp0 + fTemp117); + double fTemp119 = (fConst129 * fTemp35); + double fTemp120 = (fConst130 * fTemp20); + double fTemp121 = (fRec1[0] * (((fConst10 * (((((fConst13 * fTemp109) + fTemp110) + (fConst122 * fTemp38)) + fTemp111) + (fConst124 * fTemp18))) + ((fConst16 * ((fConst125 * fTemp78) + (fConst126 * fTemp59))) + (fTemp112 + fTemp116))) + (0.02017333553791887 * ((fTemp118 + fTemp119) + fTemp120)))); + fRec100[0] = max((fRec100[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp121)))))); fVbargraph42 = FAUSTFLOAT(fRec100[0]); - output26[i] = FAUSTFLOAT(fTemp175); - double fTemp176 = (0.0023131708388267444 * fTemp27); - double fTemp177 = (0.021308452520676528 * (fTemp12 - fTemp65)); - double fTemp178 = (0.010535180889746065 * (fTemp6 - fTemp37)); - double fTemp179 = (1.3047664087114909e-18 * fTemp15); - double fTemp180 = (3.1225305737205953e-18 * fTemp24); - double fTemp181 = (fRec1[0] * ((fTemp161 + (fTemp163 + (fTemp170 + fTemp176))) - (fTemp177 + (fTemp178 + (fTemp160 + (fTemp162 + ((fTemp171 + fTemp179) + fTemp180))))))); - fRec101[0] = max((fRec101[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp181)))))); + output26[i] = FAUSTFLOAT(fTemp121); + double fTemp122 = (fConst24 * ((0.0070590901547238384 * fTemp20) + (0.0070590901547238332 * fTemp27))); + double fTemp123 = (fConst132 * fTemp59); + double fTemp124 = ((fTemp0 + (fConst131 * fTemp13)) + fTemp123); + double fTemp125 = (fConst134 * fTemp78); + double fTemp126 = (fRec1[0] * (fTemp122 + ((0.02017333553791887 * (fTemp119 + (((fTemp117 + (fTemp124 + (fConst133 * fTemp38))) + fTemp125) + (fConst135 * fTemp18)))) + (fTemp116 + (fConst10 * (fTemp111 + (fTemp110 + (fConst136 * fTemp24)))))))); + fRec101[0] = max((fRec101[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); fVbargraph43 = FAUSTFLOAT(fRec101[0]); - output27[i] = FAUSTFLOAT(fTemp181); - double fTemp182 = (2.1746106811858183e-18 * fTemp15); - double fTemp183 = (5.2042176228676594e-18 * fTemp24); - double fTemp184 = (0.0023131708388267409 * fTemp27); - double fTemp185 = (0.021308452520676528 * fTemp65); - double fTemp186 = (0.002313170838826747 * fTemp43); - double fTemp187 = (0.010535180889746065 * fTemp37); - double fTemp188 = (0.030460165261409402 * fTemp46); - double fTemp189 = (0.010535180889746067 * fTemp6); - double fTemp190 = (0.021308452520676532 * fTemp12); - double fTemp191 = (0.030460165261409412 * fTemp21); - double fTemp192 = (fRec1[0] * ((fTemp160 + (fTemp162 + (((fTemp169 + (fTemp168 + fTemp182)) + fTemp183) + fTemp184))) - (fTemp185 + (fTemp186 + (fTemp187 + (fTemp188 + ((fTemp189 + fTemp190) + fTemp191))))))); - fRec102[0] = max((fRec102[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp192)))))); + output27[i] = FAUSTFLOAT(fTemp126); + double fTemp127 = ((5.19858676206982e-18 * fTemp15) + (0.011706176702255421 * fTemp59)); + double fTemp128 = ((fTemp0 + (fConst131 * fTemp24)) + (fConst139 * fTemp13)); + double fTemp129 = (fConst141 * fTemp27); + double fTemp130 = (fConst143 * fTemp20); + double fTemp131 = (fRec1[0] * ((fConst16 * (((fConst18 * fTemp127) + (fConst137 * fTemp78)) + (fConst138 * fTemp35))) + ((0.02017333553791887 * (((((fTemp128 + (fConst133 * fTemp50)) + (fConst140 * fTemp38)) + fTemp129) + (fConst135 * fTemp29)) + (fConst142 * fTemp18))) + (fTemp116 + fTemp130)))); + fRec102[0] = max((fRec102[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp131)))))); fVbargraph44 = FAUSTFLOAT(fRec102[0]); - output28[i] = FAUSTFLOAT(fTemp192); - double fTemp193 = (0.010535180889746063 * fTemp6); - double fTemp194 = (0.021308452520676525 * fTemp12); - double fTemp195 = (0.030460165261409398 * fTemp21); - double fTemp196 = (0.021308452520676532 * fTemp65); - double fTemp197 = (0.0023131708388267444 * fTemp43); - double fTemp198 = (0.010535180889746067 * fTemp37); - double fTemp199 = (0.030460165261409412 * fTemp46); - double fTemp200 = (3.0444549536601452e-18 * fTemp15); - double fTemp201 = (7.2859046720147234e-18 * fTemp24); - double fTemp202 = (0.0023131708388267431 * fTemp27); - double fTemp203 = (fRec1[0] * (((fTemp169 + ((fTemp167 + (fTemp166 + fTemp193)) + fTemp194)) + fTemp195) - (fTemp196 + (fTemp160 + (fTemp197 + (fTemp162 + (fTemp198 + (fTemp199 + ((fTemp200 + fTemp201) + fTemp202))))))))); - fRec103[0] = max((fRec103[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp203)))))); + output28[i] = FAUSTFLOAT(fTemp131); + double fTemp132 = (fTemp123 + (fTemp0 + (fConst139 * fTemp24))); + double fTemp133 = (fConst147 * fTemp15); + double fTemp134 = (fConst148 * fTemp27); + double fTemp135 = (fConst150 * fTemp20); + double fTemp136 = (fRec1[0] * ((fTemp116 + (fConst10 * (((fConst144 * fTemp13) + (fConst145 * fTemp38)) + (fConst146 * fTemp18)))) + (0.02017333553791887 * ((((fTemp125 + (((fTemp132 + (fConst140 * fTemp50)) + fTemp133) + fTemp134)) + (fConst142 * fTemp29)) + (fConst149 * fTemp35)) + fTemp135)))); + fRec103[0] = max((fRec103[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp136)))))); fVbargraph45 = FAUSTFLOAT(fRec103[0]); - output29[i] = FAUSTFLOAT(fTemp203); - double fTemp204 = (0.0071028175068921914 * fTemp65); - double fTemp205 = (0.016998264729033888 * fTemp68); - double fTemp206 = (0.030071220904747824 * fTemp43); - double fTemp207 = (0.021308452520676577 * fTemp41); - double fTemp208 = (0.010535180889746094 * fTemp37); - double fTemp209 = (0.010535180889746075 * fTemp3); - double fTemp210 = (fTemp164 + fTemp209); - double fTemp211 = (0.031605542669238242 * fTemp6); - double fTemp212 = (0.021308452520676542 * fTemp12); - double fTemp213 = (0.028411270027568724 * fTemp15); - double fTemp214 = (0.022664352972045144 * fTemp24); - double fTemp215 = (0.020818537549440738 * fTemp27); - double fTemp216 = (0.0053753232814252047 * fTemp46); - double fTemp217 = (0.01640325439843596 * fTemp9); - double fTemp218 = (0.020481687709769415 * fTemp18); - double fTemp219 = (fTemp217 + fTemp218); - double fTemp220 = (0.016125969844275591 * fTemp21); - double fTemp221 = (fRec1[0] * ((fTemp204 + (fTemp205 + (fTemp206 + (fTemp207 + (fTemp208 + (((((fTemp210 + fTemp211) + fTemp212) + fTemp213) + fTemp214) + fTemp215)))))) - (fTemp216 + (fTemp219 + fTemp220)))); - fRec104[0] = max((fRec104[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp221)))))); + output29[i] = FAUSTFLOAT(fTemp136); + double fTemp137 = (fConst24 * ((0.063531811392514598 * fTemp20) + (0.091768172011410243 * fTemp27))); + double fTemp138 = ((0.046824706809021746 * fTemp15) + (0.035118530106766375 * fTemp59)); + double fTemp139 = (fConst152 * fTemp35); + double fTemp140 = (0.02017333553791887 * fTemp0); + double fTemp141 = (0.010535180889746075 * fTemp3); + double fTemp142 = ((0.029118746888235916 * fTemp13) + (0.0097062489627453199 * fTemp24)); + double fTemp143 = ((0.013532684878709662 * fTemp18) + (0.0045108949595698937 * fTemp29)); + double fTemp144 = (0.01640325439843596 * fTemp6); + double fTemp145 = (0.020481687709769415 * fTemp9); + double fTemp146 = (fTemp144 + fTemp145); + double fTemp147 = (fRec1[0] * ((fTemp137 + ((fConst16 * (((fConst18 * fTemp138) + (fConst151 * fTemp78)) + fTemp139)) + (((fTemp140 + fTemp141) + (fConst10 * (((fConst13 * fTemp142) + (fConst153 * fTemp50)) + (fConst154 * fTemp38)))) + (fConst155 * fTemp143)))) - fTemp146)); + fRec104[0] = max((fRec104[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp147)))))); fVbargraph46 = FAUSTFLOAT(fRec104[0]); - output30[i] = FAUSTFLOAT(fTemp221); - double fTemp222 = (0.021308452520676546 * fTemp65); - double fTemp223 = (0.021308452520676556 * fTemp41); - double fTemp224 = (0.031605542669238242 * fTemp37); - double fTemp225 = (0.010535180889746081 * fTemp6); - double fTemp226 = (0.0071028175068921827 * fTemp12); - double fTemp227 = (0.016998264729033867 * fTemp68); - double fTemp228 = (0.020818537549440783 * fTemp43); - double fTemp229 = (0.016125969844275591 * fTemp46); - double fTemp230 = (0.028411270027568741 * fTemp15); - double fTemp231 = (0.0053753232814251978 * fTemp21); - double fTemp232 = (0.022664352972045162 * fTemp24); - double fTemp233 = (0.030071220904747797 * fTemp27); - double fTemp234 = (fRec1[0] * ((fTemp222 + ((fTemp223 + (fTemp224 + ((fTemp210 + fTemp225) + fTemp226))) + fTemp227)) - (fTemp228 + (fTemp229 + ((((fTemp218 + (fTemp217 + fTemp230)) + fTemp231) + fTemp232) + fTemp233))))); - fRec105[0] = max((fRec105[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp234)))))); + output30[i] = FAUSTFLOAT(fTemp147); + double fTemp148 = ((0.0045108949595698885 * fTemp18) + (0.013532684878709664 * fTemp29)); + double fTemp149 = ((0.0097062489627453077 * fTemp13) + (0.029118746888235923 * fTemp24)); + double fTemp150 = ((fTemp0 + (fConst160 * fTemp15)) + (fConst161 * fTemp27)); + double fTemp151 = (fConst163 * fTemp20); + double fTemp152 = (fRec1[0] * ((((fConst155 * fTemp148) + ((fConst16 * ((fConst156 * fTemp78) + (fConst157 * fTemp59))) + (fTemp141 + (fConst10 * (((fConst13 * fTemp149) + (fConst158 * fTemp50)) + (fConst159 * fTemp38)))))) + (0.02017333553791887 * ((fTemp150 + (fConst162 * fTemp35)) + fTemp151))) - fTemp146)); + fRec105[0] = max((fRec105[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); fVbargraph47 = FAUSTFLOAT(fRec105[0]); - output31[i] = FAUSTFLOAT(fTemp234); - double fTemp235 = (0.021308452520676553 * fTemp65); - double fTemp236 = (0.0053753232814251969 * fTemp21); - double fTemp237 = (0.03007122090474779 * fTemp27); - double fTemp238 = (0.016998264729033864 * fTemp68); - double fTemp239 = (0.02081853754944079 * fTemp43); - double fTemp240 = (0.021308452520676546 * fTemp41); - double fTemp241 = (0.016125969844275594 * fTemp46); - double fTemp242 = (0.010535180889746079 * fTemp6); - double fTemp243 = (0.007102817506892181 * fTemp12); - double fTemp244 = (0.028411270027568745 * fTemp15); - double fTemp245 = (fRec1[0] * ((fTemp235 + (fTemp224 + ((fTemp210 + fTemp236) + fTemp237))) - (fTemp238 + (fTemp239 + (fTemp240 + (fTemp241 + (fTemp232 + (fTemp218 + (((fTemp217 + fTemp242) + fTemp243) + fTemp244))))))))); - fRec106[0] = max((fRec106[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp245)))))); + output31[i] = FAUSTFLOAT(fTemp152); + double fTemp153 = ((fTemp0 + (fConst164 * fTemp13)) + (fConst165 * fTemp59)); + double fTemp154 = (fConst167 * fTemp15); + double fTemp155 = (fConst168 * fTemp27); + double fTemp156 = (fConst175 * fTemp20); + double fTemp157 = (fRec1[0] * (((0.02017333553791887 * ((((((fTemp153 + (fConst166 * fTemp38)) + fTemp154) + fTemp155) + (fConst169 * fTemp78)) + (fConst170 * fTemp18)) + (fConst171 * fTemp35))) + ((fConst10 * ((fConst172 * fTemp24) + (fConst173 * fTemp50))) + ((fConst174 * fTemp29) + (fTemp141 + fTemp156)))) - fTemp146)); + fRec106[0] = max((fRec106[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp157)))))); fVbargraph48 = FAUSTFLOAT(fRec106[0]); - output32[i] = FAUSTFLOAT(fTemp245); - double fTemp246 = (0.0071028175068921931 * fTemp65); - double fTemp247 = (0.030071220904747838 * fTemp43); - double fTemp248 = (0.010535180889746096 * fTemp37); - double fTemp249 = (0.028411270027568717 * fTemp15); - double fTemp250 = (0.022664352972045138 * fTemp24); - double fTemp251 = (0.021308452520676584 * fTemp41); - double fTemp252 = (0.0053753232814252056 * fTemp46); - double fTemp253 = (fTemp211 + fTemp217); - double fTemp254 = (0.020818537549440724 * fTemp27); - double fTemp255 = (fRec1[0] * ((fTemp246 + (fTemp247 + (fTemp248 + ((fTemp220 + (fTemp210 + fTemp249)) + fTemp250)))) - (fTemp205 + (fTemp251 + (fTemp252 + ((fTemp218 + (fTemp212 + fTemp253)) + fTemp254)))))); - fRec107[0] = max((fRec107[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp255)))))); + output32[i] = FAUSTFLOAT(fTemp157); + double fTemp158 = ((fTemp0 + (fConst176 * fTemp13)) + (fConst177 * fTemp59)); + double fTemp159 = (fConst181 * fTemp20); + double fTemp160 = (fConst186 * fTemp27); + double fTemp161 = (fRec1[0] * (((0.02017333553791887 * ((((fTemp158 + (fConst178 * fTemp38)) + (fConst179 * fTemp78)) + (fConst180 * fTemp18)) + fTemp159)) + ((fConst16 * (fTemp139 + (fConst182 * fTemp15))) + ((fConst10 * ((fConst183 * fTemp24) + (fConst184 * fTemp50))) + ((fConst185 * fTemp29) + (fTemp141 + fTemp160))))) - fTemp146)); + fRec107[0] = max((fRec107[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp161)))))); fVbargraph49 = FAUSTFLOAT(fRec107[0]); - output33[i] = FAUSTFLOAT(fTemp255); - double fTemp256 = (0.016998264729033881 * fTemp68); - double fTemp257 = (0.02130845252067657 * fTemp41); - double fTemp258 = (0.0053753232814252021 * fTemp46); - double fTemp259 = (0.028411270027568731 * fTemp15); - double fTemp260 = (0.022664352972045151 * fTemp24); - double fTemp261 = (0.0071028175068921871 * fTemp65); - double fTemp262 = (0.030071220904747821 * fTemp43); - double fTemp263 = (0.010535180889746089 * fTemp37); - double fTemp264 = (0.021308452520676546 * fTemp12); - double fTemp265 = (0.020818537549440744 * fTemp27); - double fTemp266 = (fRec1[0] * ((fTemp256 + (fTemp257 + (fTemp258 + ((fTemp220 + (fTemp210 + fTemp259)) + fTemp260)))) - (fTemp261 + (fTemp262 + (fTemp263 + ((fTemp218 + (fTemp253 + fTemp264)) + fTemp265)))))); - fRec108[0] = max((fRec108[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp266)))))); + output33[i] = FAUSTFLOAT(fTemp161); + double fTemp162 = ((fTemp0 + (fConst187 * fTemp24)) + (fConst188 * fTemp13)); + double fTemp163 = (fConst191 * fTemp27); + double fTemp164 = (fConst194 * fTemp20); + double fTemp165 = ((0.046824706809021774 * fTemp15) + (0.035118530106766362 * fTemp59)); + double fTemp166 = (fRec1[0] * (((0.02017333553791887 * ((((((fTemp162 + (fConst189 * fTemp50)) + (fConst190 * fTemp38)) + fTemp163) + (fConst192 * fTemp29)) + (fConst193 * fTemp18)) + fTemp164)) + (fTemp141 + (fConst16 * (((fConst18 * fTemp165) + (fConst195 * fTemp78)) + (fConst196 * fTemp35))))) - fTemp146)); + fRec108[0] = max((fRec108[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp166)))))); fVbargraph50 = FAUSTFLOAT(fRec108[0]); - output34[i] = FAUSTFLOAT(fTemp266); - double fTemp267 = (0.016998264729033874 * fTemp68); - double fTemp268 = (0.020818537549440772 * fTemp43); - double fTemp269 = (0.021308452520676563 * fTemp41); - double fTemp270 = (0.0053753232814252004 * fTemp21); - double fTemp271 = (0.0300712209047478 * fTemp27); - double fTemp272 = (0.010535180889746086 * fTemp6); - double fTemp273 = (0.0071028175068921853 * fTemp12); - double fTemp274 = (0.028411270027568734 * fTemp15); - double fTemp275 = (fRec1[0] * ((fTemp267 + (fTemp268 + (fTemp269 + (fTemp229 + ((fTemp210 + fTemp270) + fTemp271))))) - (fTemp222 + (fTemp224 + (fTemp260 + (fTemp218 + (((fTemp217 + fTemp272) + fTemp273) + fTemp274))))))); - fRec109[0] = max((fRec109[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp275)))))); + output34[i] = FAUSTFLOAT(fTemp166); + double fTemp167 = (fConst24 * ((0.091768172011410187 * fTemp20) + (0.063531811392514695 * fTemp27))); + double fTemp168 = ((fTemp0 + (fConst188 * fTemp24)) + (fConst197 * fTemp13)); + double fTemp169 = (fConst199 * fTemp15); + double fTemp170 = (fRec1[0] * ((fTemp167 + ((0.02017333553791887 * ((((((fTemp168 + (fConst190 * fTemp50)) + (fConst198 * fTemp38)) + fTemp169) + (fConst193 * fTemp29)) + (fConst200 * fTemp18)) + (fConst201 * fTemp35))) + (fTemp141 + (fConst16 * ((fConst202 * fTemp78) + (fConst203 * fTemp59)))))) - fTemp146)); + fRec109[0] = max((fRec109[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp170)))))); fVbargraph51 = FAUSTFLOAT(fRec109[0]); - output35[i] = FAUSTFLOAT(fTemp275); - double fTemp276 = (0.020818537549440803 * fTemp43); - double fTemp277 = (0.010535180889746074 * fTemp6); - double fTemp278 = (0.0071028175068921775 * fTemp12); - double fTemp279 = (0.016998264729033857 * fTemp68); - double fTemp280 = (0.021308452520676542 * fTemp41); - double fTemp281 = (0.030071220904747779 * fTemp27); - double fTemp282 = (0.028411270027568748 * fTemp15); - double fTemp283 = (0.0053753232814251943 * fTemp21); - double fTemp284 = (0.022664352972045165 * fTemp24); - double fTemp285 = (fRec1[0] * ((fTemp276 + (fTemp241 + ((fTemp210 + fTemp277) + fTemp278))) - (fTemp235 + (fTemp279 + (fTemp280 + (fTemp224 + (fTemp281 + (((fTemp218 + (fTemp217 + fTemp282)) + fTemp283) + fTemp284)))))))); - fRec110[0] = max((fRec110[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp285)))))); + output35[i] = FAUSTFLOAT(fTemp170); + double fTemp171 = (fConst206 * fTemp27); + double fTemp172 = ((fTemp0 + (fConst208 * fTemp24)) + (fConst209 * fTemp59)); + double fTemp173 = (fConst211 * fTemp15); + double fTemp174 = (fConst215 * fTemp20); + double fTemp175 = (fRec1[0] * ((((fConst10 * ((fConst204 * fTemp13) + (fConst205 * fTemp38))) + ((fTemp141 + fTemp171) + (fConst207 * fTemp18))) + (0.02017333553791887 * ((((((fTemp172 + (fConst210 * fTemp50)) + fTemp173) + (fConst212 * fTemp78)) + (fConst213 * fTemp29)) + (fConst214 * fTemp35)) + fTemp174))) - fTemp146)); + fRec110[0] = max((fRec110[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp175)))))); fVbargraph52 = FAUSTFLOAT(fRec110[0]); - output36[i] = FAUSTFLOAT(fTemp285); - double fTemp286 = (0.0053753232814252143 * fTemp46); - double fTemp287 = (0.031605542669238228 * fTemp6); - double fTemp288 = (0.021308452520676539 * fTemp12); - double fTemp289 = (0.028411270027568696 * fTemp15); - double fTemp290 = (0.02266435297204512 * fTemp24); - double fTemp291 = (0.02081853754944071 * fTemp27); - double fTemp292 = (0.0071028175068922053 * fTemp65); - double fTemp293 = (0.016998264729033919 * fTemp68); - double fTemp294 = (0.030071220904747842 * fTemp43); - double fTemp295 = (0.021308452520676618 * fTemp41); - double fTemp296 = (0.010535180889746113 * fTemp37); - double fTemp297 = (0.016125969844275587 * fTemp21); - double fTemp298 = (fRec1[0] * ((fTemp286 + (((((fTemp210 + fTemp287) + fTemp288) + fTemp289) + fTemp290) + fTemp291)) - (fTemp292 + (fTemp293 + (fTemp294 + (fTemp295 + (fTemp296 + (fTemp219 + fTemp297)))))))); - fRec111[0] = max((fRec111[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp298)))))); + output36[i] = FAUSTFLOAT(fTemp175); + double fTemp176 = ((fTemp0 + (fConst218 * fTemp24)) + (fConst219 * fTemp59)); + double fTemp177 = (fConst221 * fTemp27); + double fTemp178 = (fConst227 * fTemp20); + double fTemp179 = (fRec1[0] * (((fConst16 * ((fConst216 * fTemp15) + (fConst217 * fTemp35))) + ((0.02017333553791887 * ((((fTemp176 + (fConst220 * fTemp50)) + fTemp177) + (fConst222 * fTemp78)) + (fConst223 * fTemp29))) + ((fConst10 * ((fConst224 * fTemp13) + (fConst225 * fTemp38))) + ((fConst226 * fTemp18) + (fTemp141 + fTemp178))))) - fTemp146)); + fRec111[0] = max((fRec111[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp179)))))); fVbargraph53 = FAUSTFLOAT(fRec111[0]); - output37[i] = FAUSTFLOAT(fTemp298); - double fTemp299 = (fTemp209 + fTemp217); - double fTemp300 = (fRec1[0] * ((fTemp206 + (fTemp207 + (fTemp208 + (fTemp215 + (fTemp218 + (fTemp213 + (fTemp164 + fTemp211))))))) - (fTemp204 + (fTemp205 + (fTemp216 + (fTemp214 + (fTemp220 + (fTemp212 + fTemp299)))))))); - fRec112[0] = max((fRec112[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp300)))))); + output37[i] = FAUSTFLOAT(fTemp179); + double fTemp180 = (fTemp141 + fTemp144); + double fTemp181 = (fRec1[0] * (((fConst228 * ((0.022823523772822384 * fTemp35) + (0.017117642829616822 * fTemp78))) + ((fConst230 * fTemp143) + ((fConst231 * ((0.027065369757419324 * fTemp38) + (0.0090217899191397874 * fTemp50))) + (fTemp137 + ((fConst19 * fTemp138) + ((fConst14 * fTemp142) + (fTemp140 + fTemp145))))))) - fTemp180)); + fRec112[0] = max((fRec112[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp181)))))); fVbargraph54 = FAUSTFLOAT(fRec112[0]); - output38[i] = FAUSTFLOAT(fTemp300); - double fTemp301 = (fRec1[0] * ((fTemp223 + (fTemp224 + (fTemp232 + (fTemp218 + (fTemp164 + fTemp225))))) - (fTemp222 + (fTemp227 + (fTemp228 + (fTemp229 + (fTemp233 + (fTemp231 + (fTemp230 + (fTemp226 + fTemp299)))))))))); - fRec113[0] = max((fRec113[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp301)))))); + output38[i] = FAUSTFLOAT(fTemp181); + double fTemp182 = (fConst234 * fTemp35); + double fTemp183 = (fRec1[0] * ((((fConst230 * fTemp148) + ((fConst231 * ((0.009021789919139777 * fTemp38) + (0.027065369757419327 * fTemp50))) + ((fConst232 * fTemp78) + ((fConst14 * fTemp149) + (fTemp145 + (fConst233 * fTemp59)))))) + (0.02017333553791887 * (fTemp151 + (fTemp150 + fTemp182)))) - fTemp180)); + fRec113[0] = max((fRec113[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp183)))))); fVbargraph55 = FAUSTFLOAT(fRec113[0]); - output39[i] = FAUSTFLOAT(fTemp301); - double fTemp302 = (fRec1[0] * ((fTemp238 + (fTemp224 + (fTemp237 + (fTemp232 + (fTemp236 + (fTemp218 + (fTemp164 + fTemp243))))))) - (fTemp235 + (fTemp239 + (fTemp240 + (fTemp241 + (fTemp244 + (fTemp217 + (fTemp209 + fTemp242))))))))); - fRec114[0] = max((fRec114[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp302)))))); + output39[i] = FAUSTFLOAT(fTemp183); + double fTemp184 = (fRec1[0] * (((0.02017333553791887 * (fTemp182 + (((fTemp155 + (fTemp154 + (fTemp153 + (fConst235 * fTemp38)))) + (fConst236 * fTemp78)) + (fConst237 * fTemp18)))) + ((fConst238 * fTemp29) + ((fConst239 * fTemp50) + ((fConst240 * fTemp24) + (fTemp145 + fTemp156))))) - fTemp180)); + fRec114[0] = max((fRec114[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp184)))))); fVbargraph56 = FAUSTFLOAT(fRec114[0]); - output40[i] = FAUSTFLOAT(fTemp302); - double fTemp303 = (fTemp217 + (fTemp209 + fTemp211)); - double fTemp304 = (fRec1[0] * ((fTemp205 + (fTemp247 + (fTemp248 + (fTemp220 + (fTemp218 + (fTemp249 + (fTemp164 + fTemp212))))))) - (fTemp246 + (fTemp251 + (fTemp252 + (fTemp254 + (fTemp250 + fTemp303))))))); - fRec115[0] = max((fRec115[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp304)))))); + output40[i] = FAUSTFLOAT(fTemp184); + double fTemp185 = (fRec1[0] * ((((fConst241 * fTemp35) + ((fConst242 * fTemp29) + ((fConst243 * fTemp50) + (fTemp160 + ((fConst244 * fTemp24) + ((fConst245 * fTemp15) + fTemp145)))))) + (0.02017333553791887 * (fTemp159 + (((fTemp158 + (fConst246 * fTemp38)) + (fConst247 * fTemp78)) + (fConst248 * fTemp18))))) - fTemp180)); + fRec115[0] = max((fRec115[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp185)))))); fVbargraph57 = FAUSTFLOAT(fRec115[0]); - output41[i] = FAUSTFLOAT(fTemp304); - double fTemp305 = (fRec1[0] * ((fTemp261 + (fTemp257 + (fTemp258 + (fTemp220 + (fTemp218 + (fTemp259 + (fTemp164 + fTemp264))))))) - (fTemp256 + (fTemp262 + (fTemp263 + (fTemp265 + (fTemp260 + fTemp303))))))); - fRec116[0] = max((fRec116[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp305)))))); + output41[i] = FAUSTFLOAT(fTemp185); + double fTemp186 = (fRec1[0] * (((0.02017333553791887 * (fTemp164 + (((fTemp163 + ((fTemp162 + (fConst249 * fTemp50)) + (fConst250 * fTemp38))) + (fConst251 * fTemp29)) + (fConst252 * fTemp18)))) + ((fTemp145 + (fConst19 * fTemp165)) + (fConst228 * ((0.022823523772822398 * fTemp35) + (0.017117642829616815 * fTemp78))))) - fTemp180)); + fRec116[0] = max((fRec116[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp186)))))); fVbargraph58 = FAUSTFLOAT(fRec116[0]); - output42[i] = FAUSTFLOAT(fTemp305); - double fTemp306 = (fRec1[0] * ((fTemp222 + (fTemp268 + (fTemp269 + (fTemp229 + (fTemp271 + (fTemp260 + (fTemp270 + (fTemp218 + (fTemp164 + fTemp273))))))))) - (fTemp267 + (fTemp224 + (fTemp274 + (fTemp217 + (fTemp209 + fTemp272))))))); - fRec117[0] = max((fRec117[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp306)))))); + output42[i] = FAUSTFLOAT(fTemp186); + double fTemp187 = (fRec1[0] * (((0.02017333553791887 * ((((fTemp169 + ((fTemp168 + (fConst250 * fTemp50)) + (fConst253 * fTemp38))) + (fConst252 * fTemp29)) + (fConst254 * fTemp18)) + (fConst255 * fTemp35))) + ((fConst256 * fTemp78) + (fTemp167 + (fTemp145 + (fConst257 * fTemp59))))) - fTemp180)); + fRec117[0] = max((fRec117[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp187)))))); fVbargraph59 = FAUSTFLOAT(fRec117[0]); - output43[i] = FAUSTFLOAT(fTemp306); - double fTemp307 = (fRec1[0] * ((fTemp235 + (fTemp279 + (fTemp276 + (fTemp241 + (fTemp284 + (fTemp218 + (fTemp164 + fTemp277))))))) - (fTemp280 + (fTemp224 + (fTemp281 + (fTemp283 + (fTemp282 + (fTemp278 + fTemp299)))))))); - fRec118[0] = max((fRec118[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp307)))))); + output43[i] = FAUSTFLOAT(fTemp187); + double fTemp188 = (fRec1[0] * (((((fConst258 * fTemp38) + (fTemp171 + (fTemp145 + (fConst259 * fTemp13)))) + (fConst260 * fTemp18)) + (0.02017333553791887 * (fTemp174 + ((((fTemp173 + (fTemp172 + (fConst261 * fTemp50))) + (fConst262 * fTemp78)) + (fConst263 * fTemp29)) + (fConst264 * fTemp35))))) - fTemp180)); + fRec118[0] = max((fRec118[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp188)))))); fVbargraph60 = FAUSTFLOAT(fRec118[0]); - output44[i] = FAUSTFLOAT(fTemp307); - double fTemp308 = (fRec1[0] * ((fTemp292 + (fTemp293 + (fTemp286 + (fTemp291 + (fTemp218 + (fTemp289 + (fTemp164 + fTemp287))))))) - (fTemp294 + (fTemp295 + (fTemp296 + (fTemp290 + (fTemp297 + (fTemp288 + fTemp299)))))))); - fRec119[0] = max((fRec119[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp308)))))); + output44[i] = FAUSTFLOAT(fTemp188); + double fTemp189 = (fRec1[0] * (((0.02017333553791887 * (((fTemp177 + (fTemp176 + (fConst265 * fTemp50))) + (fConst266 * fTemp78)) + (fConst267 * fTemp29))) + ((fConst268 * fTemp35) + ((fConst269 * fTemp18) + ((fConst270 * fTemp38) + (fTemp178 + ((fConst271 * fTemp15) + (fTemp145 + (fConst272 * fTemp13)))))))) - fTemp180)); + fRec119[0] = max((fRec119[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp189)))))); fVbargraph61 = FAUSTFLOAT(fRec119[0]); - output45[i] = FAUSTFLOAT(fTemp308); - double fTemp309 = (fTemp164 + fTemp167); - double fTemp310 = (fRec1[0] * ((fTemp159 + (fTemp161 + (fTemp162 + (fTemp163 + (fTemp173 + (fTemp171 + fTemp309)))))) - (fTemp158 + (fTemp160 + (fTemp174 + (fTemp169 + (fTemp165 + fTemp172))))))); - fRec120[0] = max((fRec120[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp310)))))); + output45[i] = FAUSTFLOAT(fTemp189); + double fTemp190 = (fConst279 * fTemp35); + double fTemp191 = (fTemp113 + fTemp115); + double fTemp192 = (fRec1[0] * ((((fConst274 * ((0.010086667768959435 * fTemp18) + (0.010086667768959437 * fTemp29))) + ((fConst276 * fTemp78) + ((fConst277 * ((0.02017333553791887 * fTemp38) + (0.020173335537918873 * fTemp50))) + ((fConst14 * fTemp109) + ((fConst278 * fTemp59) + (fTemp114 + fTemp112)))))) + (0.02017333553791887 * (fTemp120 + (fTemp118 + fTemp190)))) - fTemp191)); + fRec120[0] = max((fRec120[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp192)))))); fVbargraph62 = FAUSTFLOAT(fRec120[0]); - output46[i] = FAUSTFLOAT(fTemp310); - double fTemp311 = (fRec1[0] * ((fTemp177 + (fTemp160 + (fTemp161 + (fTemp163 + (fTemp176 + (fTemp180 + fTemp309)))))) - (fTemp178 + (fTemp162 + (fTemp171 + (fTemp169 + (fTemp165 + fTemp179))))))); - fRec121[0] = max((fRec121[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp311)))))); + output46[i] = FAUSTFLOAT(fTemp192); + double fTemp193 = (fConst281 * fTemp78); + double fTemp194 = (fRec1[0] * (((0.02017333553791887 * (fTemp190 + (((fTemp117 + (fTemp124 + (fConst280 * fTemp38))) + fTemp193) + (fConst282 * fTemp18)))) + ((fConst283 * fTemp29) + ((fConst284 * fTemp50) + (fTemp122 + ((fConst285 * fTemp24) + fTemp114))))) - fTemp191)); + fRec121[0] = max((fRec121[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp194)))))); fVbargraph63 = FAUSTFLOAT(fRec121[0]); - output47[i] = FAUSTFLOAT(fTemp311); - double fTemp312 = (fRec1[0] * ((fTemp185 + (fTemp162 + (fTemp184 + (fTemp182 + (fTemp190 + fTemp309))))) - (fTemp160 + (fTemp186 + (fTemp187 + (fTemp188 + (fTemp183 + (fTemp191 + (fTemp169 + (fTemp165 + fTemp189)))))))))); - fRec122[0] = max((fRec122[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp312)))))); + output47[i] = FAUSTFLOAT(fTemp194); + double fTemp195 = (fRec1[0] * (((fConst275 * ((1.2669600797833527e-17 * fTemp35) + (0.028529404716028009 * fTemp78))) + ((0.02017333553791887 * (((fTemp129 + ((fTemp128 + (fConst280 * fTemp50)) + (fConst286 * fTemp38))) + (fConst282 * fTemp29)) + (fConst287 * fTemp18))) + ((fConst19 * fTemp127) + (fTemp114 + fTemp130)))) - fTemp191)); + fRec122[0] = max((fRec122[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp195)))))); fVbargraph64 = FAUSTFLOAT(fRec122[0]); - output48[i] = FAUSTFLOAT(fTemp312); - double fTemp313 = (fRec1[0] * ((fTemp196 + (fTemp160 + (fTemp201 + (fTemp195 + (fTemp167 + (fTemp164 + fTemp193)))))) - (fTemp197 + (fTemp162 + (fTemp198 + (fTemp199 + (fTemp202 + (fTemp169 + (fTemp200 + (fTemp165 + fTemp194)))))))))); - fRec123[0] = max((fRec123[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp313)))))); + output48[i] = FAUSTFLOAT(fTemp195); + double fTemp196 = (fRec1[0] * (((((fTemp114 + (fConst288 * fTemp13)) + (fConst289 * fTemp38)) + (fConst290 * fTemp18)) + (0.02017333553791887 * (fTemp135 + (((fTemp193 + (fTemp134 + (fTemp133 + (fTemp132 + (fConst286 * fTemp50))))) + (fConst287 * fTemp29)) + (fConst291 * fTemp35))))) - fTemp191)); + fRec123[0] = max((fRec123[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp196)))))); fVbargraph65 = FAUSTFLOAT(fRec123[0]); - output49[i] = FAUSTFLOAT(fTemp313); + output49[i] = FAUSTFLOAT(fTemp196); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; @@ -2704,92 +3168,92 @@ class mydsp : public dsp { fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec12[1] = fRec12[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; fRec13[1] = fRec13[0]; - fRec11[1] = fRec11[0]; - fRec10[1] = fRec10[0]; fRec16[1] = fRec16[0]; - fRec17[1] = fRec17[0]; - fRec15[1] = fRec15[0]; - fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; fRec20[1] = fRec20[0]; - fRec21[1] = fRec21[0]; fRec19[1] = fRec19[0]; fRec18[1] = fRec18[0]; - fRec25[1] = fRec25[0]; - fRec26[1] = fRec26[0]; - fRec24[1] = fRec24[0]; - fRec27[1] = fRec27[0]; fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; fRec22[1] = fRec22[0]; - fRec31[1] = fRec31[0]; - fRec32[1] = fRec32[0]; + fRec21[1] = fRec21[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec27[1] = fRec27[0]; fRec30[1] = fRec30[0]; + fRec26[1] = fRec26[0]; + fRec25[1] = fRec25[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; fRec33[1] = fRec33[0]; - fRec29[1] = fRec29[0]; - fRec28[1] = fRec28[0]; - fRec37[1] = fRec37[0]; - fRec38[1] = fRec38[0]; fRec36[1] = fRec36[0]; + fRec32[1] = fRec32[0]; + fRec31[1] = fRec31[0]; + fRec17[1] = fRec17[0]; + fRec40[1] = fRec40[0]; fRec39[1] = fRec39[0]; - fRec35[1] = fRec35[0]; - fRec34[1] = fRec34[0]; - fRec43[1] = fRec43[0]; + fRec38[1] = fRec38[0]; fRec44[1] = fRec44[0]; - fRec42[1] = fRec42[0]; fRec45[1] = fRec45[0]; - fRec41[1] = fRec41[0]; - fRec40[1] = fRec40[0]; - fRec0[1] = fRec0[0]; + fRec43[1] = fRec43[0]; fRec46[1] = fRec46[0]; + fRec42[1] = fRec42[0]; + fRec41[1] = fRec41[0]; fRec50[1] = fRec50[0]; + fRec51[1] = fRec51[0]; fRec49[1] = fRec49[0]; + fRec52[1] = fRec52[0]; fRec48[1] = fRec48[0]; + fRec47[1] = fRec47[0]; + fRec37[1] = fRec37[0]; fRec53[1] = fRec53[0]; fRec54[1] = fRec54[0]; - fRec52[1] = fRec52[0]; - fRec51[1] = fRec51[0]; - fRec58[1] = fRec58[0]; + fRec55[1] = fRec55[0]; + fRec60[1] = fRec60[0]; + fRec61[1] = fRec61[0]; fRec59[1] = fRec59[0]; + fRec62[1] = fRec62[0]; + fRec58[1] = fRec58[0]; fRec57[1] = fRec57[0]; - fRec60[1] = fRec60[0]; - fRec56[1] = fRec56[0]; - fRec55[1] = fRec55[0]; - fRec64[1] = fRec64[0]; fRec65[1] = fRec65[0]; - fRec63[1] = fRec63[0]; fRec66[1] = fRec66[0]; - fRec62[1] = fRec62[0]; - fRec61[1] = fRec61[0]; - fRec47[1] = fRec47[0]; - fRec67[1] = fRec67[0]; - fRec68[1] = fRec68[0]; - fRec69[1] = fRec69[0]; + fRec64[1] = fRec64[0]; + fRec63[1] = fRec63[0]; + fRec56[1] = fRec56[0]; fRec70[1] = fRec70[0]; - fRec74[1] = fRec74[0]; - fRec75[1] = fRec75[0]; - fRec73[1] = fRec73[0]; + fRec71[1] = fRec71[0]; + fRec69[1] = fRec69[0]; + fRec68[1] = fRec68[0]; + fRec67[1] = fRec67[0]; fRec72[1] = fRec72[0]; + fRec73[1] = fRec73[0]; + fRec77[1] = fRec77[0]; + fRec78[1] = fRec78[0]; + fRec76[1] = fRec76[0]; + fRec75[1] = fRec75[0]; + fRec74[1] = fRec74[0]; fRec79[1] = fRec79[0]; fRec80[1] = fRec80[0]; - fRec78[1] = fRec78[0]; fRec81[1] = fRec81[0]; - fRec77[1] = fRec77[0]; - fRec76[1] = fRec76[0]; - fRec71[1] = fRec71[0]; fRec82[1] = fRec82[0]; fRec83[1] = fRec83[0]; fRec84[1] = fRec84[0]; fRec85[1] = fRec85[0]; - fRec86[1] = fRec86[0]; - fRec87[1] = fRec87[0]; - fRec88[1] = fRec88[0]; - fRec89[1] = fRec89[0]; fRec90[1] = fRec90[0]; fRec91[1] = fRec91[0]; + fRec89[1] = fRec89[0]; fRec92[1] = fRec92[0]; + fRec88[1] = fRec88[0]; + fRec87[1] = fRec87[0]; + fRec86[1] = fRec86[0]; fRec93[1] = fRec93[0]; fRec94[1] = fRec94[0]; fRec95[1] = fRec95[0]; @@ -2829,7 +3293,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -3061,7 +3524,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -3124,7 +3587,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -3153,11 +3616,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecLebedev504.cpp b/source/HOAUGens/HOADecLebedev504.cpp index 89695a4cd2..3e3a757e3c 100644 --- a/source/HOAUGens/HOADecLebedev504.cpp +++ b/source/HOAUGens/HOADecLebedev504.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev504" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -614,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -636,168 +653,234 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fConst4; + double fConst5; double fRec9[2]; + double fRec10[2]; double fRec8[2]; double fRec7[2]; FAUSTFLOAT fVbargraph2; - double fConst4; - double fConst5; - double fRec12[2]; + double fConst6; + double fConst7; + double fConst8; + double fRec14[2]; + double fRec15[2]; double fRec13[2]; + double fConst9; + double fRec16[2]; + double fRec12[2]; double fRec11[2]; - double fRec10[2]; FAUSTFLOAT fVbargraph3; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; - double fRec14[2]; - FAUSTFLOAT fVbargraph4; + double fConst10; + double fConst11; + double fConst12; double fRec20[2]; double fRec21[2]; double fRec19[2]; + double fConst13; + double fRec22[2]; + double fRec23[2]; double fRec18[2]; + double fRec17[2]; + FAUSTFLOAT fVbargraph4; + double fRec0[2]; FAUSTFLOAT fVbargraph5; - double fConst6; - double fConst7; - double fConst8; - double fRec25[2]; - double fRec26[2]; - double fRec24[2]; - double fConst9; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fRec28[2]; + double fRec29[2]; double fRec27[2]; - double fRec23[2]; - double fRec22[2]; - FAUSTFLOAT fVbargraph6; - double fRec31[2]; - double fRec32[2]; double fRec30[2]; + double fRec26[2]; + double fRec25[2]; + FAUSTFLOAT fVbargraph6; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fRec34[2]; + double fRec35[2]; double fRec33[2]; - double fRec29[2]; - double fRec28[2]; - FAUSTFLOAT fVbargraph7; - double fRec37[2]; - double fRec38[2]; double fRec36[2]; + double fRec37[2]; + double fRec32[2]; + double fRec31[2]; + FAUSTFLOAT fVbargraph7; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fRec41[2]; + double fRec42[2]; + double fRec40[2]; + double fRec43[2]; double fRec39[2]; - double fRec35[2]; - double fRec34[2]; + double fRec38[2]; FAUSTFLOAT fVbargraph8; - double fRec43[2]; - double fRec44[2]; - double fRec42[2]; + double fConst28; + double fConst29; + double fConst30; + double fRec46[2]; + double fRec47[2]; double fRec45[2]; - double fRec41[2]; - double fRec40[2]; + double fRec44[2]; FAUSTFLOAT fVbargraph9; - double fConst10; - double fConst11; - double fConst12; - double fRec49[2]; + double fConst31; + double fConst32; + double fConst33; double fRec50[2]; + double fRec49[2]; double fRec48[2]; - double fConst13; - double fRec51[2]; - double fRec52[2]; - double fRec47[2]; - double fRec46[2]; FAUSTFLOAT fVbargraph10; - double fRec56[2]; - double fRec57[2]; - double fRec55[2]; - double fRec58[2]; - double fRec59[2]; + double fConst34; + double fConst35; double fRec54[2]; + double fRec55[2]; double fRec53[2]; + double fRec56[2]; + double fRec57[2]; + double fRec52[2]; + double fRec51[2]; FAUSTFLOAT fVbargraph11; - double fRec63[2]; - double fRec64[2]; + double fRec24[2]; + FAUSTFLOAT fVbargraph12; + double fConst36; + double fConst37; double fRec62[2]; - double fRec65[2]; - double fRec66[2]; + double fRec63[2]; double fRec61[2]; + double fRec64[2]; double fRec60[2]; - FAUSTFLOAT fVbargraph12; - double fRec70[2]; - double fRec71[2]; - double fRec69[2]; - double fRec72[2]; - double fRec73[2]; + double fRec59[2]; + FAUSTFLOAT fVbargraph13; + double fConst38; + double fConst39; double fRec68[2]; + double fRec69[2]; double fRec67[2]; - FAUSTFLOAT fVbargraph13; - double fRec77[2]; - double fRec78[2]; - double fRec76[2]; - double fRec79[2]; - double fRec80[2]; - double fRec75[2]; - double fRec74[2]; + double fRec70[2]; + double fRec66[2]; + double fRec65[2]; FAUSTFLOAT fVbargraph14; - double fRec0[2]; + double fRec73[2]; + double fRec72[2]; + double fRec71[2]; FAUSTFLOAT fVbargraph15; - double fRec81[2]; + double fRec58[2]; FAUSTFLOAT fVbargraph16; - double fRec85[2]; - double fRec86[2]; - double fRec84[2]; - double fRec83[2]; + double fConst40; + double fConst41; + double fConst42; + double fRec74[2]; FAUSTFLOAT fVbargraph17; - double fRec89[2]; + double fRec75[2]; + FAUSTFLOAT fVbargraph18; + double fRec76[2]; + FAUSTFLOAT fVbargraph19; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fRec81[2]; + double fRec82[2]; + double fRec80[2]; + double fRec83[2]; + double fRec84[2]; + double fRec79[2]; + double fRec78[2]; + FAUSTFLOAT fVbargraph20; + double fConst47; + double fConst48; + double fConst49; + double fConst50; double fRec88[2]; + double fRec89[2]; double fRec87[2]; - FAUSTFLOAT fVbargraph18; + double fRec90[2]; + double fRec86[2]; + double fRec85[2]; + FAUSTFLOAT fVbargraph21; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; double fRec93[2]; double fRec94[2]; double fRec92[2]; - double fRec95[2]; - double fRec96[2]; double fRec91[2]; - double fRec90[2]; - FAUSTFLOAT fVbargraph19; - double fRec100[2]; - double fRec101[2]; - double fRec99[2]; - double fRec102[2]; + FAUSTFLOAT fVbargraph22; + double fConst56; + double fConst57; + double fConst58; double fRec98[2]; + double fRec99[2]; double fRec97[2]; - FAUSTFLOAT fVbargraph20; + double fRec100[2]; + double fRec101[2]; + double fRec96[2]; + double fRec95[2]; + FAUSTFLOAT fVbargraph23; + double fConst59; + double fRec77[2]; + FAUSTFLOAT fVbargraph24; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; double fRec106[2]; double fRec107[2]; double fRec105[2]; double fRec108[2]; + double fRec109[2]; double fRec104[2]; double fRec103[2]; - FAUSTFLOAT fVbargraph21; + FAUSTFLOAT fVbargraph25; + double fConst66; + double fConst67; double fRec112[2]; double fRec113[2]; double fRec111[2]; - double fRec114[2]; - double fRec115[2]; double fRec110[2]; - double fRec109[2]; - FAUSTFLOAT fVbargraph22; - double fRec82[2]; - FAUSTFLOAT fVbargraph23; - double fRec116[2]; - FAUSTFLOAT fVbargraph24; + FAUSTFLOAT fVbargraph26; double fRec117[2]; - FAUSTFLOAT fVbargraph25; double fRec118[2]; - FAUSTFLOAT fVbargraph26; + double fRec116[2]; double fRec119[2]; + double fRec120[2]; + double fRec115[2]; + double fRec114[2]; FAUSTFLOAT fVbargraph27; - double fRec123[2]; - double fRec124[2]; - double fRec122[2]; - double fRec121[2]; + double fRec102[2]; FAUSTFLOAT fVbargraph28; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fRec121[2]; + FAUSTFLOAT fVbargraph29; + double fRec122[2]; + FAUSTFLOAT fVbargraph30; + double fConst75; + double fConst76; + double fRec127[2]; double fRec128[2]; + double fRec126[2]; double fRec129[2]; - double fRec127[2]; double fRec130[2]; - double fRec126[2]; double fRec125[2]; - FAUSTFLOAT fVbargraph29; + double fRec124[2]; + FAUSTFLOAT fVbargraph31; + double fConst77; double fRec134[2]; double fRec135[2]; double fRec133[2]; @@ -805,99 +888,539 @@ class mydsp : public dsp { double fRec137[2]; double fRec132[2]; double fRec131[2]; - FAUSTFLOAT fVbargraph30; - double fRec141[2]; - double fRec142[2]; + FAUSTFLOAT fVbargraph32; double fRec140[2]; - double fRec143[2]; - double fRec144[2]; + double fRec141[2]; double fRec139[2]; double fRec138[2]; - FAUSTFLOAT fVbargraph31; - double fRec120[2]; - FAUSTFLOAT fVbargraph32; - double fRec145[2]; FAUSTFLOAT fVbargraph33; - double fRec146[2]; + double fConst78; + double fRec123[2]; FAUSTFLOAT fVbargraph34; - double fRec147[2]; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fRec142[2]; FAUSTFLOAT fVbargraph35; - double fRec148[2]; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fRec143[2]; FAUSTFLOAT fVbargraph36; - double fRec149[2]; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fRec144[2]; FAUSTFLOAT fVbargraph37; - double fRec150[2]; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fRec145[2]; FAUSTFLOAT fVbargraph38; - double fRec151[2]; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fRec146[2]; FAUSTFLOAT fVbargraph39; - double fRec152[2]; + double fConst116; + double fConst117; + double fConst118; + double fConst119; + double fConst120; + double fRec147[2]; FAUSTFLOAT fVbargraph40; - double fRec153[2]; + double fConst121; + double fRec148[2]; FAUSTFLOAT fVbargraph41; + double fConst122; + double fRec153[2]; double fRec154[2]; - FAUSTFLOAT fVbargraph42; + double fRec152[2]; double fRec155[2]; + double fRec151[2]; + double fRec150[2]; + FAUSTFLOAT fVbargraph42; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fRec149[2]; FAUSTFLOAT fVbargraph43; + double fConst136; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; double fRec156[2]; FAUSTFLOAT fVbargraph44; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fConst157; + double fConst158; + double fConst159; + double fConst160; + double fConst161; + double fConst162; + double fConst163; double fRec157[2]; FAUSTFLOAT fVbargraph45; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; double fRec158[2]; FAUSTFLOAT fVbargraph46; + double fConst176; + double fConst177; + double fConst178; + double fConst179; + double fConst180; + double fConst181; + double fConst182; + double fConst183; + double fConst184; + double fConst185; + double fConst186; + double fConst187; + double fConst188; double fRec159[2]; FAUSTFLOAT fVbargraph47; + double fConst189; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + double fConst196; + double fConst197; + double fConst198; double fRec160[2]; FAUSTFLOAT fVbargraph48; + double fConst199; + double fConst200; + double fConst201; + double fConst202; + double fConst203; + double fConst204; double fRec161[2]; FAUSTFLOAT fVbargraph49; + double fConst205; + double fConst206; + double fConst207; + double fConst208; + double fConst209; + double fConst210; + double fConst211; + double fConst212; double fRec162[2]; FAUSTFLOAT fVbargraph50; + double fConst213; + double fConst214; + double fConst215; + double fConst216; + double fConst217; + double fConst218; + double fConst219; + double fConst220; + double fConst221; + double fConst222; + double fConst223; + double fConst224; + double fConst225; + double fConst226; + double fConst227; + double fConst228; + double fConst229; + double fConst230; double fRec163[2]; FAUSTFLOAT fVbargraph51; + double fConst231; + double fConst232; + double fConst233; + double fConst234; + double fConst235; + double fConst236; + double fConst237; + double fConst238; + double fConst239; + double fConst240; double fRec164[2]; FAUSTFLOAT fVbargraph52; + double fConst241; + double fConst242; + double fConst243; + double fConst244; + double fConst245; + double fConst246; + double fConst247; + double fConst248; + double fConst249; + double fConst250; + double fConst251; + double fConst252; + double fConst253; double fRec165[2]; FAUSTFLOAT fVbargraph53; + double fConst254; + double fConst255; + double fConst256; + double fConst257; + double fConst258; + double fConst259; + double fConst260; + double fConst261; + double fConst262; + double fConst263; + double fConst264; + double fConst265; double fRec166[2]; FAUSTFLOAT fVbargraph54; + double fConst266; + double fConst267; + double fConst268; + double fConst269; + double fConst270; + double fConst271; + double fConst272; + double fConst273; + double fConst274; + double fConst275; double fRec167[2]; FAUSTFLOAT fVbargraph55; + double fConst276; + double fConst277; + double fConst278; + double fConst279; + double fConst280; + double fConst281; + double fConst282; + double fConst283; + double fConst284; + double fConst285; + double fConst286; + double fConst287; + double fConst288; + double fConst289; double fRec168[2]; FAUSTFLOAT fVbargraph56; + double fConst290; + double fConst291; + double fConst292; + double fConst293; + double fConst294; + double fConst295; + double fConst296; + double fConst297; + double fConst298; + double fConst299; + double fConst300; + double fConst301; + double fConst302; + double fConst303; + double fConst304; + double fConst305; + double fConst306; double fRec169[2]; FAUSTFLOAT fVbargraph57; + double fConst307; + double fConst308; + double fConst309; + double fConst310; + double fConst311; + double fConst312; + double fConst313; + double fConst314; + double fConst315; + double fConst316; + double fConst317; + double fConst318; + double fConst319; + double fConst320; + double fConst321; + double fConst322; + double fConst323; + double fConst324; + double fConst325; double fRec170[2]; FAUSTFLOAT fVbargraph58; + double fConst326; + double fConst327; + double fConst328; + double fConst329; + double fConst330; + double fConst331; + double fConst332; + double fConst333; + double fConst334; + double fConst335; + double fConst336; + double fConst337; + double fConst338; + double fConst339; double fRec171[2]; FAUSTFLOAT fVbargraph59; + double fConst340; + double fConst341; + double fConst342; + double fConst343; + double fConst344; + double fConst345; + double fConst346; + double fConst347; + double fConst348; + double fConst349; + double fConst350; + double fConst351; + double fConst352; + double fConst353; double fRec172[2]; FAUSTFLOAT fVbargraph60; + double fConst354; + double fConst355; + double fConst356; + double fConst357; + double fConst358; + double fConst359; + double fConst360; + double fConst361; + double fConst362; + double fConst363; + double fConst364; + double fConst365; + double fConst366; + double fConst367; + double fConst368; + double fConst369; + double fConst370; + double fConst371; double fRec173[2]; FAUSTFLOAT fVbargraph61; + double fConst372; + double fConst373; + double fConst374; + double fConst375; + double fConst376; + double fConst377; + double fConst378; + double fConst379; + double fConst380; + double fConst381; + double fConst382; + double fConst383; + double fConst384; + double fConst385; + double fConst386; + double fConst387; + double fConst388; + double fConst389; + double fConst390; + double fConst391; double fRec174[2]; FAUSTFLOAT fVbargraph62; + double fConst392; + double fConst393; + double fConst394; + double fConst395; + double fConst396; + double fConst397; + double fConst398; + double fConst399; + double fConst400; double fRec175[2]; FAUSTFLOAT fVbargraph63; + double fConst401; + double fConst402; + double fConst403; + double fConst404; + double fConst405; + double fConst406; + double fConst407; double fRec176[2]; FAUSTFLOAT fVbargraph64; + double fConst408; + double fConst409; + double fConst410; + double fConst411; + double fConst412; + double fConst413; + double fConst414; + double fConst415; + double fConst416; + double fConst417; + double fConst418; + double fConst419; double fRec177[2]; FAUSTFLOAT fVbargraph65; + double fConst420; + double fConst421; + double fConst422; + double fConst423; + double fConst424; + double fConst425; + double fConst426; + double fConst427; + double fConst428; + double fConst429; + double fConst430; + double fConst431; + double fConst432; + double fConst433; + double fConst434; double fRec178[2]; FAUSTFLOAT fVbargraph66; + double fConst435; + double fConst436; + double fConst437; + double fConst438; + double fConst439; + double fConst440; + double fConst441; + double fConst442; double fRec179[2]; FAUSTFLOAT fVbargraph67; + double fConst443; + double fConst444; + double fConst445; + double fConst446; + double fConst447; + double fConst448; + double fConst449; + double fConst450; double fRec180[2]; FAUSTFLOAT fVbargraph68; + double fConst451; + double fConst452; + double fConst453; + double fConst454; + double fConst455; + double fConst456; + double fConst457; + double fConst458; + double fConst459; + double fConst460; + double fConst461; + double fConst462; + double fConst463; + double fConst464; double fRec181[2]; FAUSTFLOAT fVbargraph69; + double fConst465; + double fConst466; + double fConst467; + double fConst468; + double fConst469; + double fConst470; + double fConst471; + double fConst472; + double fConst473; + double fConst474; + double fConst475; + double fConst476; + double fConst477; + double fConst478; + double fConst479; double fRec182[2]; FAUSTFLOAT fVbargraph70; + double fConst480; + double fConst481; + double fConst482; + double fConst483; + double fConst484; + double fConst485; + double fConst486; + double fConst487; + double fConst488; + double fConst489; + double fConst490; + double fConst491; + double fConst492; + double fConst493; + double fConst494; + double fConst495; + double fConst496; double fRec183[2]; FAUSTFLOAT fVbargraph71; + double fConst497; + double fConst498; + double fConst499; + double fConst500; + double fConst501; + double fConst502; + double fConst503; + double fConst504; + double fConst505; double fRec184[2]; FAUSTFLOAT fVbargraph72; + double fConst506; + double fConst507; + double fConst508; + double fConst509; + double fConst510; + double fConst511; double fRec185[2]; FAUSTFLOAT fVbargraph73; + double fConst512; + double fConst513; + double fConst514; + double fConst515; + double fConst516; + double fConst517; + double fConst518; + double fConst519; double fRec186[2]; FAUSTFLOAT fVbargraph74; @@ -908,36 +1431,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev504"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1279,7 +1802,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); @@ -1293,6 +1816,512 @@ class mydsp : public dsp { fConst11 = (715.28839504107589 / fConst0); fConst12 = (1430.5767900821518 / fConst0); fConst13 = (1969.4232099178482 / fConst0); + fConst14 = double(tgamma(1.5)); + fConst15 = double(tgamma(3.0)); + fConst16 = double(tgamma(5.0)); + fConst17 = sqrt((7.0 * (fConst15 / fConst16))); + fConst18 = ((0.0 - (3.3851375012865379 * fConst14)) * fConst17); + fConst19 = double(tgamma(2.5)); + fConst20 = double(tgamma(7.0)); + fConst21 = sqrt((9.0 * (fConst15 / fConst20))); + fConst22 = ((0.0 - (11.283791670955125 * fConst19)) * fConst21); + fConst23 = double(tgamma(3.5)); + fConst24 = double(tgamma(1.0)); + fConst25 = sqrt((7.0 * (fConst24 / fConst20))); + fConst26 = (fConst23 * fConst25); + fConst27 = (0.081054939510132359 * fConst26); + fConst28 = sqrt((5.0 * (fConst24 / fConst16))); + fConst29 = (fConst19 * fConst28); + fConst30 = (0.04052746975506618 * fConst29); + fConst31 = sqrt((3.0 * (fConst24 / fConst15))); + fConst32 = (fConst14 * fConst31); + fConst33 = (0.02026373487753309 * fConst32); + fConst34 = (double(tgamma(4.5)) * sqrt((9.0 * (fConst24 / double(tgamma(9.0)))))); + fConst35 = (0.16210987902026472 * fConst34); + fConst36 = (0.0 - (3.1915382432114616 * fConst29)); + fConst37 = (0.0 - (6.3830764864229232 * fConst26)); + fConst38 = (0.0 - (0.70710678118654757 * fConst22)); + fConst39 = (0.0089791337293529845 * fConst18); + fConst40 = (0.0 - (1.5957691216057308 * fConst32)); + fConst41 = (0.0 - (0.70710678118654757 * fConst18)); + fConst42 = (0.0089791337293529845 * fConst22); + fConst43 = (0.050946219890026692 * fConst25); + fConst44 = double(tgamma(2.0)); + fConst45 = sqrt((9.0 * (fConst44 / double(tgamma(8.0))))); + fConst46 = (0.25217092292041182 * fConst45); + fConst47 = (0.036024417560058836 * fConst28); + fConst48 = double(tgamma(6.0)); + fConst49 = sqrt((7.0 * (fConst44 / fConst48))); + fConst50 = (0.12736554972506672 * fConst49); + fConst51 = (0.22515260975036763 * fConst21); + fConst52 = (0.025473109945013343 * fConst31); + fConst53 = double(tgamma(4.0)); + fConst54 = sqrt((5.0 * (fConst44 / fConst53))); + fConst55 = (0.054036626340088233 * fConst54); + fConst56 = (0.057314497376279992 * fConst17); + fConst57 = sqrt((9.0 * (fConst53 / fConst48))); + fConst58 = (0.02251526097503671 * fConst57); + fConst59 = (0.072048835120117685 * fConst34); + fConst60 = (0.0 - (1.595769121605731 * fConst29)); + fConst61 = (0.0 - (2.256758334191026 * fConst26)); + fConst62 = (fConst19 * fConst49); + fConst63 = (0.0 - (5.6418958354775643 * fConst62)); + fConst64 = (fConst23 * fConst45); + fConst65 = (0.0 - (11.170383851240118 * fConst64)); + fConst66 = (fConst19 * fConst21); + fConst67 = (0.0 - (9.9735570100358153 * fConst66)); + fConst68 = (0.0 - (1.1283791670955128 * fConst32)); + fConst69 = (fConst14 * fConst54); + fConst70 = (0.0 - (2.3936536824085959 * fConst69)); + fConst71 = (fConst14 * fConst17); + fConst72 = (0.0 - (2.5388531259649025 * fConst71)); + fConst73 = (fConst14 * fConst57); + fConst74 = (0.0 - (0.99735570100357918 * fConst73)); + fConst75 = (0.0 - (4.5135166683820485 * fConst26)); + fConst76 = (0.0 - (12.766152972845845 * fConst34)); + fConst77 = (1.3574799921485692e-16 * fConst34); + fConst78 = (0.10189243978005338 * fConst26); + fConst79 = (1.3574799921485695e-16 * fConst34); + fConst80 = (0.011287477954144623 * fConst18); + fConst81 = (0.025473109945013343 * fConst32); + fConst82 = (0.0 - (1.1283791670955126 * fConst32)); + fConst83 = (0.0 - (7.0866384831701748e-16 * fConst29)); + fConst84 = (0.0 - (0.5 * fConst18)); + fConst85 = (0.0 - (1.5700924586837752e-16 * fConst22)); + fConst86 = (0.0 - (12.766152972845846 * fConst34)); + fConst87 = (0.0 - (1.128379167095513 * fConst32)); + fConst88 = (0.0 - (4.5135166683820547 * fConst26)); + fConst89 = (0.0 - (0.50000000000000011 * fConst18)); + fConst90 = (2.7149599842971385e-16 * fConst34); + fConst91 = (0.10189243978005329 * fConst26); + fConst92 = (2.714959984297139e-16 * fConst34); + fConst93 = (0.01128747795414462 * fConst18); + fConst94 = (0.025473109945013332 * fConst32); + fConst95 = (0.0 - (1.417327696634035e-15 * fConst29)); + fConst96 = (0.0 - (4.5135166683820476 * fConst26)); + fConst97 = (0.0 - (4.5135166683820538 * fConst26)); + fConst98 = (0.0 - (3.1401849173675503e-16 * fConst22)); + fConst99 = (0.0 - (1.6925687506432687 * fConst14)); + fConst100 = (fConst99 * fConst54); + fConst101 = (0.0 - (3.9894228040143274 * fConst19)); + fConst102 = (fConst101 * fConst49); + fConst103 = ((0.0 - (7.898654169668589 * fConst23)) * fConst45); + fConst104 = (0.0 - ((3.5355339059327373 * fConst99) + (2.3936536824085963 * fConst14))); + fConst105 = (fConst104 * fConst17); + fConst106 = ((0.0 - ((4.9497474683058318 * fConst101) + (5.6418958354775643 * fConst19))) * fConst21); + fConst107 = ((0.0 - ((2.4748737341529159 * fConst104) + (4.0 * fConst99))) * fConst57); + fConst108 = (0.010641936271825759 * fConst107); + fConst109 = (0.050946219890026692 * fConst26); + fConst110 = (0.036024417560058836 * fConst29); + fConst111 = (0.0 - (1.4142135623730951 * fConst102)); + fConst112 = (0.0 - (1.4142135623730951 * fConst103)); + fConst113 = (0.0 - (0.70710678118654757 * fConst106)); + fConst114 = (0.015962904407738641 * fConst105); + fConst115 = (0.031925808815477283 * fConst100); + fConst116 = (0.0 - (1.4142135623730951 * fConst100)); + fConst117 = (0.0 - (0.70710678118654757 * fConst105)); + fConst118 = (0.0 - (0.47140452079103168 * fConst107)); + fConst119 = (0.015962904407738641 * fConst106); + fConst120 = (0.031925808815477283 * fConst102); + fConst121 = (0.031925808815477283 * fConst103); + fConst122 = (0.12956030605175081 * fConst49); + fConst123 = (2.8768166971227152e-17 * fConst49); + fConst124 = (0.14960335515053727 * fConst21); + fConst125 = (3.3218617889860196e-17 * fConst21); + fConst126 = ((0.0 - (2.6596152026762163 * fConst14)) * fConst57); + fConst127 = (0.051824122420700336 * fConst25); + fConst128 = (0.20944469721075218 * fConst45); + fConst129 = (0.033660754908870889 * fConst54); + fConst130 = (0.019434045907762629 * fConst17); + fConst131 = (0.019434045907762633 * fConst17); + fConst132 = (5.6373863931755746e-17 * fConst34); + fConst133 = (0.0 - (2.4568472851294949 * fConst26)); + fConst134 = (0.0 - (9.929230089991206 * fConst64)); + fConst135 = (0.0 - (5.6738457657092614 * fConst34)); + fConst136 = (0.0 - (0.92131773192356115 * fConst32)); + fConst137 = (0.0 - (2.1276921621409737 * fConst29)); + fConst138 = (0.0 - (1.5957691216057308 * fConst69)); + fConst139 = (0.0 - (4.7244256554467816e-16 * fConst29)); + fConst140 = (0.0 - (6.1421182128237417 * fConst62)); + fConst141 = (0.0 - (0.92131773192356159 * fConst71)); + fConst142 = (0.0 - (1.3638242119692871e-15 * fConst62)); + fConst143 = (0.0 - (7.0923072071365816 * fConst66)); + fConst144 = (0.0 - (0.33333333333333331 * fConst126)); + fConst145 = (0.0 - (1.5748085518155944e-15 * fConst66)); + fConst146 = (0.0 - (5.6738457657092622 * fConst34)); + fConst147 = (0.019434045907762623 * fConst31); + fConst148 = (5.6373863931755758e-17 * fConst34); + fConst149 = (0.007031250000000001 * fConst126); + fConst150 = (0.20944469721075201 * fConst45); + fConst151 = (0.0 - (0.92131773192356148 * fConst32)); + fConst152 = (0.0 - (1.5957691216057313 * fConst69)); + fConst153 = (0.0 - (2.456847285129498 * fConst26)); + fConst154 = (0.0 - (0.92131773192356192 * fConst71)); + fConst155 = (0.0 - (9.9292300899912185 * fConst64)); + fConst156 = (0.0 - (0.33333333333333343 * fConst126)); + fConst157 = (0.051824122420700267 * fConst25); + fConst158 = (0.20944469721075193 * fConst45); + fConst159 = (0.12956030605175084 * fConst49); + fConst160 = (5.7536333942454304e-17 * fConst49); + fConst161 = (0.14960335515053733 * fConst21); + fConst162 = (6.6437235779720392e-17 * fConst21); + fConst163 = (1.1274772786351149e-16 * fConst34); + fConst164 = (0.019434045907762616 * fConst31); + fConst165 = (0.033660754908870882 * fConst54); + fConst166 = (0.019434045907762626 * fConst17); + fConst167 = (1.1274772786351152e-16 * fConst34); + fConst168 = (0.0070312499999999993 * fConst126); + fConst169 = (0.0 - (9.4488513108935631e-16 * fConst29)); + fConst170 = (0.0 - (2.456847285129494 * fConst26)); + fConst171 = (0.0 - (2.7276484239385742e-15 * fConst62)); + fConst172 = (0.0 - (2.4568472851294976 * fConst26)); + fConst173 = (0.0 - (9.9292300899912025 * fConst64)); + fConst174 = (0.0 - (3.1496171036311889e-15 * fConst66)); + fConst175 = (0.0 - (9.9292300899912167 * fConst64)); + fConst176 = (0.0 - (4.3431334391370653 * fConst19)); + fConst177 = ((0.0 - ((4.0414518843273806 * fConst176) + (7.5225277806367483 * fConst19))) * fConst21); + fConst178 = (0.0 - (1.5957691216057308 * fConst14)); + fConst179 = (0.0 - ((2.8867513459481291 * fConst178) + (2.7639531957706835 * fConst14))); + fConst180 = ((0.0 - ((2.0207259421636903 * fConst179) + (4.0 * fConst178))) * fConst57); + fConst181 = (fConst176 * fConst49); + fConst182 = (fConst179 * fConst17); + fConst183 = (fConst178 * fConst54); + fConst184 = (0.021093750000000005 * fConst183); + fConst185 = (0.051824122420700336 * fConst26); + fConst186 = ((0.0 - (9.9292300899912096 * fConst23)) * fConst45); + fConst187 = (0.021093750000000012 * fConst186); + fConst188 = (0.0 - (0.99999999999999967 * fConst186)); + fConst189 = (0.0 - fConst183); + fConst190 = (0.0 - (1.4142135623730951 * fConst181)); + fConst191 = (0.0 - (0.5 * fConst182)); + fConst192 = (0.0 - (3.1401849173675503e-16 * fConst181)); + fConst193 = (0.0 - (0.70710678118654757 * fConst177)); + fConst194 = (0.0 - (0.33333333333333331 * fConst180)); + fConst195 = (0.0 - (1.5700924586837752e-16 * fConst177)); + fConst196 = (0.010546875000000002 * fConst182); + fConst197 = (0.019434045907762623 * fConst32); + fConst198 = (0.007031250000000001 * fConst180); + fConst199 = (0.0 - (1.0000000000000002 * fConst183)); + fConst200 = (0.0 - (0.50000000000000011 * fConst182)); + fConst201 = (0.0 - (1.0000000000000009 * fConst186)); + fConst202 = (0.0 - (0.33333333333333343 * fConst180)); + fConst203 = (0.051824122420700267 * fConst26); + fConst204 = (0.021093749999999988 * fConst186); + fConst205 = (0.010546874999999999 * fConst182); + fConst206 = (0.021093749999999998 * fConst183); + fConst207 = (0.019434045907762616 * fConst32); + fConst208 = (0.0070312499999999993 * fConst180); + fConst209 = (0.0 - (6.2803698347351007e-16 * fConst181)); + fConst210 = (0.0 - (0.99999999999999933 * fConst186)); + fConst211 = (0.0 - (3.1401849173675503e-16 * fConst177)); + fConst212 = (0.0 - (1.0000000000000007 * fConst186)); + fConst213 = (0.026338897580074728 * fConst54); + fConst214 = (0.026338897580074724 * fConst54); + fConst215 = (0.045001699736364593 * fConst17); + fConst216 = (0.045001699736364587 * fConst17); + fConst217 = (0.059861130863806261 * fConst57); + fConst218 = (0.059861130863806254 * fConst57); + fConst219 = (0.052943176160428845 * fConst49); + fConst220 = (0.011706176702255417 * fConst28); + fConst221 = (0.13834572466301867 * fConst21); + fConst222 = (0.0070590901547238332 * fConst25); + fConst223 = (0.044696311044975172 * fConst45); + fConst224 = (0.0 - (1.2884797242127563e-16 * fConst29)); + fConst225 = (0.0 - (5.8273688116286149e-16 * fConst62)); + fConst226 = (0.0 - (0.34992181344801404 * fConst26)); + fConst227 = (0.0 - (1.9878387281720961e-16 * fConst34)); + fConst228 = (0.0 - (1.522748764978713e-15 * fConst66)); + fConst229 = (0.0 - (2.2156133258658022 * fConst64)); + fConst230 = (0.0 - (0.42202158587919975 * fConst34)); + fConst231 = (0.0 - (0.48114249349102017 * fConst32)); + fConst232 = (0.0 - (0.58027968058390089 * fConst29)); + fConst233 = (0.0 - (1.3056292813137786 * fConst69)); + fConst234 = (0.0 - (2.624413600860108 * fConst62)); + fConst235 = (0.0 - (2.230751560731095 * fConst71)); + fConst236 = (0.0 - (6.8578507705370146 * fConst66)); + fConst237 = (0.0 - (2.9673392757131363 * fConst73)); + fConst238 = (0.044696311044975207 * fConst45); + fConst239 = (0.0097062489627452973 * fConst31); + fConst240 = (4.0101337658685596e-18 * fConst34); + fConst241 = (0.0 - (0.48114249349102034 * fConst32)); + fConst242 = (0.0 - (1.3056292813137791 * fConst69)); + fConst243 = (0.0 - (0.34992181344801421 * fConst26)); + fConst244 = (0.0 - (2.2307515607310959 * fConst71)); + fConst245 = (0.0 - (2.2156133258658035 * fConst64)); + fConst246 = (0.0 - (2.9673392757131376 * fConst73)); + fConst247 = (0.0070590901547238306 * fConst25); + fConst248 = (0.044696311044975165 * fConst45); + fConst249 = (0.052943176160428852 * fConst49); + fConst250 = (2.3511493268037518e-17 * fConst49); + fConst251 = (0.1383457246630187 * fConst21); + fConst252 = (6.1437843551734282e-17 * fConst21); + fConst253 = (8.0202675317371177e-18 * fConst34); + fConst254 = (8.0202675317371192e-18 * fConst34); + fConst255 = (0.0097062489627452939 * fConst31); + fConst256 = (0.026338897580074721 * fConst54); + fConst257 = (0.045001699736364573 * fConst17); + fConst258 = (0.05986113086380624 * fConst57); + fConst259 = (0.0 - (2.5769594484255127e-16 * fConst29)); + fConst260 = (0.0 - (0.34992181344801365 * fConst26)); + fConst261 = (0.0 - (1.165473762325723e-15 * fConst62)); + fConst262 = (0.0 - (0.34992181344801415 * fConst26)); + fConst263 = (0.0 - (2.2156133258658 * fConst64)); + fConst264 = (0.0 - (3.0454975299574259e-15 * fConst66)); + fConst265 = (0.0 - (2.2156133258658031 * fConst64)); + fConst266 = (0.19368401452822653 * fConst45); + fConst267 = (0.13408893313492565 * fConst45); + fConst268 = ((0.0 - (3.7301790647785582 * fConst19)) * fConst21); + fConst269 = (0.0 - (1.7605101637794649 * fConst14)); + fConst270 = (((1.0552897060221724 * fConst269) - (3.8926344352424089 * fConst14)) * fConst57); + fConst271 = (0.052943176160428991 * fConst49); + fConst272 = (0.070590901547238516 * fConst49); + fConst273 = (fConst269 * fConst17); + fConst274 = (0.0087796325266915921 * fConst54); + fConst275 = (0.026338897580074738 * fConst54); + fConst276 = (0.0 - (2.3211187223356089 * fConst29)); + fConst277 = (0.0 - (3.1492963210321352 * fConst26)); + fConst278 = (0.0 - (3.4992181344801496 * fConst62)); + fConst279 = (0.0 - (4.548983574824196 * fConst26)); + fConst280 = (0.0 - (10.128518061100836 * fConst34)); + fConst281 = (0.0 - (6.6468399775974225 * fConst64)); + fConst282 = (0.0 - (0.56568542494923812 * fConst268)); + fConst283 = (0.0 - (9.600991078751834 * fConst64)); + fConst284 = (0.052943176160428929 * fConst49); + fConst285 = (0.035118530106766334 * fConst28); + fConst286 = (0.026338897580074742 * fConst54); + fConst287 = (0.0087796325266915817 * fConst54); + fConst288 = (0.0085588214148084006 * fConst268); + fConst289 = (0.059595081393300449 * fConst34); + fConst290 = (0.09176817201141016 * fConst25); + fConst291 = (0.19368401452822634 * fConst45); + fConst292 = (0.0 - (0.48114249349102062 * fConst32)); + fConst293 = (0.0 - (1.7408390417517061 * fConst29)); + fConst294 = (0.0 - (0.43520976043792636 * fConst69)); + fConst295 = (0.0 - (2.3211187223356093 * fConst29)); + fConst296 = (0.0 - (3.1492963210321379 * fConst26)); + fConst297 = (0.0 - (2.6244136008601116 * fConst62)); + fConst298 = (0.0 - (0.22360679774997891 * fConst273)); + fConst299 = (0.0 - (3.4992181344801501 * fConst62)); + fConst300 = (0.0 - (6.6468399775974278 * fConst64)); + fConst301 = (0.0 - (0.42426406871192845 * fConst268)); + fConst302 = (0.0 - (0.14907119849998593 * fConst270)); + fConst303 = (0.029118746888235927 * fConst31); + fConst304 = (0.026338897580074745 * fConst54); + fConst305 = (0.009021789919139777 * fConst270); + fConst306 = (0.013532684878709665 * fConst273); + fConst307 = (0.0 - (6.6468399775974083 * fConst64)); + fConst308 = (0.0 - (1.443427480473062 * fConst32)); + fConst309 = (0.0 - (1.7408390417517088 * fConst29)); + fConst310 = (0.0 - (1.3056292813137793 * fConst69)); + fConst311 = (0.0 - (2.6244136008601155 * fConst62)); + fConst312 = (0.0 - (0.67082039324993681 * fConst273)); + fConst313 = (0.0 - (3.1492963210321285 * fConst26)); + fConst314 = (0.0 - (10.128518061100845 * fConst34)); + fConst315 = (0.0 - (0.42426406871192907 * fConst268)); + fConst316 = (0.0 - (0.44721359549995787 * fConst270)); + fConst317 = (0.091768172011410271 * fConst25); + fConst318 = (0.19368401452822659 * fConst45); + fConst319 = (0.046824706809021746 * fConst28); + fConst320 = (0.0097062489627453216 * fConst31); + fConst321 = (0.0087796325266915939 * fConst54); + fConst322 = (0.011411761886411192 * fConst268); + fConst323 = (0.0030072633063799293 * fConst270); + fConst324 = (0.0045108949595698946 * fConst273); + fConst325 = (0.059595081393300019 * fConst34); + fConst326 = (0.0 - (0.48114249349102112 * fConst32)); + fConst327 = (0.0 - (1.4434274804730622 * fConst32)); + fConst328 = (0.0 - (0.43520976043792686 * fConst69)); + fConst329 = (0.0 - (1.3056292813137795 * fConst69)); + fConst330 = (0.0 - (4.5489835748241987 * fConst26)); + fConst331 = (0.0 - (0.22360679774997916 * fConst273)); + fConst332 = (0.0 - (0.67082039324993692 * fConst273)); + fConst333 = (0.0 - (3.1492963210321339 * fConst26)); + fConst334 = (0.0 - (9.6009910787518393 * fConst64)); + fConst335 = (0.0 - (0.1490711984999861 * fConst270)); + fConst336 = (0.0 - (0.44721359549995793 * fConst270)); + fConst337 = (0.0 - (6.6468399775974198 * fConst64)); + fConst338 = (0.052943176160428963 * fConst49); + fConst339 = (0.070590901547238558 * fConst49); + fConst340 = (0.13408893313492587 * fConst45); + fConst341 = (0.19368401452822642 * fConst45); + fConst342 = (0.0 - (0.48114249349102095 * fConst32)); + fConst343 = (0.0 - (0.4352097604379267 * fConst69)); + fConst344 = (0.0 - (2.3211187223356085 * fConst29)); + fConst345 = (0.0 - (0.22360679774997907 * fConst273)); + fConst346 = (0.0 - (3.4992181344801487 * fConst62)); + fConst347 = (0.0 - (10.12851806110084 * fConst34)); + fConst348 = (0.0 - (0.14907119849998604 * fConst270)); + fConst349 = (0.0 - (0.5656854249492379 * fConst268)); + fConst350 = (0.052943176160428942 * fConst49); + fConst351 = (0.035118530106766348 * fConst28); + fConst352 = (0.0085588214148084041 * fConst268); + fConst353 = (0.059595081393300338 * fConst34); + fConst354 = (0.0 - (3.4992181344801505 * fConst62)); + fConst355 = (0.0 - (1.4434274804730625 * fConst32)); + fConst356 = (0.0 - (1.7408390417517057 * fConst29)); + fConst357 = (0.0 - (1.3056292813137798 * fConst69)); + fConst358 = (0.0 - (2.3211187223356098 * fConst29)); + fConst359 = (0.0 - (2.6244136008601107 * fConst62)); + fConst360 = (0.0 - (0.67082039324993703 * fConst273)); + fConst361 = (0.0 - (4.5489835748241934 * fConst26)); + fConst362 = (0.0 - (0.42426406871192829 * fConst268)); + fConst363 = (0.0 - (0.44721359549995798 * fConst270)); + fConst364 = (0.0 - (0.56568542494923824 * fConst268)); + fConst365 = (0.0 - (9.6009910787518287 * fConst64)); + fConst366 = (0.063531811392514792 * fConst25); + fConst367 = (0.13408893313492612 * fConst45); + fConst368 = (0.0097062489627453008 * fConst31); + fConst369 = (0.0087796325266915748 * fConst54); + fConst370 = (0.0030072633063799232 * fConst270); + fConst371 = (0.004510894959569885 * fConst273); + fConst372 = (0.063531811392514445 * fConst25); + fConst373 = (0.13408893313492534 * fConst45); + fConst374 = (0.0 - (0.48114249349102228 * fConst32)); + fConst375 = (0.0 - (1.7408390417517114 * fConst29)); + fConst376 = (0.0 - (0.43520976043792792 * fConst69)); + fConst377 = (0.0 - (4.5489835748242058 * fConst26)); + fConst378 = (0.0 - (2.6244136008601191 * fConst62)); + fConst379 = (0.0 - (0.22360679774997969 * fConst273)); + fConst380 = (0.0 - (10.12851806110085 * fConst34)); + fConst381 = (0.0 - (9.6009910787518553 * fConst64)); + fConst382 = (0.0 - (0.42426406871192973 * fConst268)); + fConst383 = (0.0 - (0.14907119849998646 * fConst270)); + fConst384 = (0.046824706809021698 * fConst28); + fConst385 = (0.07059090154723846 * fConst49); + fConst386 = (0.029118746888235913 * fConst31); + fConst387 = (0.026338897580074731 * fConst54); + fConst388 = (0.011411761886411183 * fConst268); + fConst389 = (0.0090217899191397718 * fConst270); + fConst390 = (0.01353268487870966 * fConst273); + fConst391 = (0.059595081393299554 * fConst34); + fConst392 = (fConst45 * (0.0 - (8.2571033474838984 * fConst23))); + fConst393 = (0.0 - (3.0929010896773175 * fConst19)); + fConst394 = (fConst21 * (0.0 - ((2.1105794120443448 * fConst393) + (10.257992428141025 * fConst19)))); + fConst395 = (0.0 - (0.97315860881060223 * fConst14)); + fConst396 = (0.0 - ((1.5075567228888176 * fConst395) + (3.2276019669290172 * fConst14))); + fConst397 = (fConst57 * (0.0 - ((1.0552897060221724 * fConst396) + (4.0 * fConst395)))); + fConst398 = (fConst49 * fConst393); + fConst399 = (fConst17 * fConst396); + fConst400 = (fConst54 * fConst395); + fConst401 = (0.0 - (1.1313708498984762 * fConst398)); + fConst402 = (0.0 - (0.80498447189992428 * fConst392)); + fConst403 = (0.0 - (0.56568542494923812 * fConst394)); + fConst404 = (0.0 - (1.1627553482998907 * fConst392)); + fConst405 = (0.0085588214148084006 * fConst394); + fConst406 = (0.017117642829616801 * fConst398); + fConst407 = (0.035118530106766334 * fConst29); + fConst408 = (0.0 - (0.44721359549995782 * fConst400)); + fConst409 = (0.0 - (0.84852813742385691 * fConst398)); + fConst410 = (0.0 - (0.22360679774997891 * fConst399)); + fConst411 = (0.0 - (0.80498447189992484 * fConst392)); + fConst412 = (0.0 - (0.42426406871192845 * fConst394)); + fConst413 = (0.0 - (0.14907119849998593 * fConst397)); + fConst414 = (0.023456653789763415 * fConst392); + fConst415 = (0.009021789919139777 * fConst397); + fConst416 = (0.013532684878709665 * fConst399); + fConst417 = (0.027065369757419331 * fConst400); + fConst418 = (0.029118746888235927 * fConst32); + fConst419 = (0.09176817201141016 * fConst26); + fConst420 = (0.0 - (1.3416407864998736 * fConst400)); + fConst421 = (0.0 - (0.84852813742385813 * fConst398)); + fConst422 = (0.0 - (0.67082039324993681 * fConst399)); + fConst423 = (0.0 - (0.42426406871192907 * fConst394)); + fConst424 = (0.0 - (0.44721359549995787 * fConst397)); + fConst425 = (0.0 - (0.8049844718999225 * fConst392)); + fConst426 = (0.011411761886411192 * fConst394); + fConst427 = (0.0030072633063799293 * fConst397); + fConst428 = (0.02345665378976344 * fConst392); + fConst429 = (0.022823523772822384 * fConst398); + fConst430 = (0.0045108949595698946 * fConst399); + fConst431 = (0.0090217899191397891 * fConst400); + fConst432 = (0.091768172011410271 * fConst26); + fConst433 = (0.0097062489627453216 * fConst32); + fConst434 = (0.046824706809021746 * fConst29); + fConst435 = (0.0 - (0.22360679774997916 * fConst399)); + fConst436 = (0.0 - (0.44721359549995832 * fConst400)); + fConst437 = (0.0 - (1.3416407864998738 * fConst400)); + fConst438 = (0.0 - (0.67082039324993692 * fConst399)); + fConst439 = (0.0 - (1.1627553482998914 * fConst392)); + fConst440 = (0.0 - (0.1490711984999861 * fConst397)); + fConst441 = (0.0 - (0.44721359549995793 * fConst397)); + fConst442 = (0.0 - (0.80498447189992395 * fConst392)); + fConst443 = (0.0 - (0.44721359549995815 * fConst400)); + fConst444 = (0.0 - (0.22360679774997907 * fConst399)); + fConst445 = (0.0 - (1.1313708498984758 * fConst398)); + fConst446 = (0.0 - (0.14907119849998604 * fConst397)); + fConst447 = (0.0 - (0.5656854249492379 * fConst394)); + fConst448 = (0.0085588214148084041 * fConst394); + fConst449 = (0.017117642829616808 * fConst398); + fConst450 = (0.035118530106766348 * fConst29); + fConst451 = (0.0 - (1.3416407864998741 * fConst400)); + fConst452 = (0.0 - (0.84852813742385658 * fConst398)); + fConst453 = (0.0 - (0.67082039324993703 * fConst399)); + fConst454 = (0.0 - (1.1313708498984765 * fConst398)); + fConst455 = (0.0 - (0.42426406871192829 * fConst394)); + fConst456 = (0.0 - (0.44721359549995798 * fConst397)); + fConst457 = (0.0 - (0.56568542494923824 * fConst394)); + fConst458 = (0.0 - (1.1627553482998902 * fConst392)); + fConst459 = (0.0030072633063799232 * fConst397); + fConst460 = (0.016239221854451615 * fConst392); + fConst461 = (0.004510894959569885 * fConst399); + fConst462 = (0.00902178991913977 * fConst400); + fConst463 = (0.063531811392514792 * fConst26); + fConst464 = (0.0097062489627453008 * fConst32); + fConst465 = (0.0 - (0.44721359549995937 * fConst400)); + fConst466 = (0.0 - (0.84852813742385946 * fConst398)); + fConst467 = (0.0 - (0.22360679774997969 * fConst399)); + fConst468 = (0.0 - (1.1627553482998934 * fConst392)); + fConst469 = (0.0 - (0.42426406871192973 * fConst394)); + fConst470 = (0.0 - (0.14907119849998646 * fConst397)); + fConst471 = (0.016239221854451522 * fConst392); + fConst472 = (0.011411761886411183 * fConst394); + fConst473 = (0.0090217899191397718 * fConst397); + fConst474 = (0.022823523772822367 * fConst398); + fConst475 = (0.01353268487870966 * fConst399); + fConst476 = (0.027065369757419321 * fConst400); + fConst477 = (0.063531811392514445 * fConst26); + fConst478 = (0.046824706809021698 * fConst29); + fConst479 = (0.029118746888235913 * fConst32); + fConst480 = (0.0 - (1.3056292813137786 * fConst14)); + fConst481 = (0.0 - ((4.5226701686664557 * fConst480) + (1.4434274804730605 * fConst14))); + fConst482 = (fConst57 * (0.0 - ((3.1658691180665191 * fConst481) + (4.0 * fConst480)))); + fConst483 = (0.0 - (1.8557406538063874 * fConst19)); + fConst484 = (fConst21 * (0.0 - ((6.3317382361330381 * fConst483) + (2.0515984856282001 * fConst19)))); + fConst485 = (0.014264702358014003 * fConst484); + fConst486 = (fConst45 * (0.0 - (2.2156133258658013 * fConst23))); + fConst487 = (0.020173335537918863 * fConst486); + fConst488 = (fConst481 * fConst17); + fConst489 = (fConst483 * fConst49); + fConst490 = (0.028529404716028006 * fConst489); + fConst491 = (fConst480 * fConst54); + fConst492 = (0.011706176702255417 * fConst29); + fConst493 = (0.0070590901547238332 * fConst26); + fConst494 = (0.0 - (3.1401849173675503e-16 * fConst489)); + fConst495 = (0.0 - (1.5700924586837752e-16 * fConst484)); + fConst496 = (0.0 - (1.0000000000000004 * fConst486)); + fConst497 = (0.0 - fConst491); + fConst498 = (0.0 - (1.4142135623730951 * fConst489)); + fConst499 = (0.0 - (0.5 * fConst488)); + fConst500 = (0.0 - (0.70710678118654757 * fConst484)); + fConst501 = (0.0 - (0.33333333333333331 * fConst482)); + fConst502 = (0.0067244451793062911 * fConst482); + fConst503 = (0.010086667768959437 * fConst488); + fConst504 = (0.020173335537918873 * fConst491); + fConst505 = (0.0097062489627452973 * fConst32); + fConst506 = (0.0 - (1.0000000000000002 * fConst491)); + fConst507 = (0.0 - (0.50000000000000011 * fConst488)); + fConst508 = (0.0 - (1.0000000000000009 * fConst486)); + fConst509 = (0.0 - (0.33333333333333343 * fConst482)); + fConst510 = (0.0070590901547238306 * fConst26); + fConst511 = (0.020173335537918856 * fConst486); + fConst512 = (0.010086667768959433 * fConst488); + fConst513 = (0.020173335537918866 * fConst491); + fConst514 = (0.0097062489627452939 * fConst32); + fConst515 = (0.0067244451793062885 * fConst482); + fConst516 = (0.0 - (6.2803698347351007e-16 * fConst489)); + fConst517 = (0.0 - (0.99999999999999933 * fConst486)); + fConst518 = (0.0 - (3.1401849173675503e-16 * fConst484)); + fConst519 = (0.0 - (1.0000000000000007 * fConst486)); } @@ -1334,27 +2363,27 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec8[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec7[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec13[l10] = 0.0; + fRec14[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec11[l11] = 0.0; + fRec15[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec10[l12] = 0.0; + fRec13[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -1362,183 +2391,183 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec17[l14] = 0.0; + fRec12[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec11[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec14[l16] = 0.0; + fRec20[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec20[l17] = 0.0; + fRec21[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec21[l18] = 0.0; + fRec19[l18] = 0.0; } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec19[l19] = 0.0; + fRec22[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec18[l20] = 0.0; + fRec23[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec25[l21] = 0.0; + fRec18[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec26[l22] = 0.0; + fRec17[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec0[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec27[l24] = 0.0; + fRec28[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec23[l25] = 0.0; + fRec29[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec22[l26] = 0.0; + fRec27[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec31[l27] = 0.0; + fRec30[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec32[l28] = 0.0; + fRec26[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec30[l29] = 0.0; + fRec25[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec33[l30] = 0.0; + fRec34[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec29[l31] = 0.0; + fRec35[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec28[l32] = 0.0; + fRec33[l32] = 0.0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec37[l33] = 0.0; + fRec36[l33] = 0.0; } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec38[l34] = 0.0; + fRec37[l34] = 0.0; } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec36[l35] = 0.0; + fRec32[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec39[l36] = 0.0; + fRec31[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec35[l37] = 0.0; + fRec41[l37] = 0.0; } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec34[l38] = 0.0; + fRec42[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec43[l39] = 0.0; + fRec40[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - fRec44[l40] = 0.0; + fRec43[l40] = 0.0; } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec42[l41] = 0.0; + fRec39[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec45[l42] = 0.0; + fRec38[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec41[l43] = 0.0; + fRec46[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec40[l44] = 0.0; + fRec47[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fRec49[l45] = 0.0; + fRec45[l45] = 0.0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec50[l46] = 0.0; + fRec44[l46] = 0.0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec48[l47] = 0.0; + fRec50[l47] = 0.0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fRec51[l48] = 0.0; + fRec49[l48] = 0.0; } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec52[l49] = 0.0; + fRec48[l49] = 0.0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - fRec47[l50] = 0.0; + fRec54[l50] = 0.0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { - fRec46[l51] = 0.0; + fRec55[l51] = 0.0; } for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { - fRec56[l52] = 0.0; + fRec53[l52] = 0.0; } for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { - fRec57[l53] = 0.0; + fRec56[l53] = 0.0; } for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { - fRec55[l54] = 0.0; + fRec57[l54] = 0.0; } for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { - fRec58[l55] = 0.0; + fRec52[l55] = 0.0; } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec59[l56] = 0.0; + fRec51[l56] = 0.0; } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec54[l57] = 0.0; + fRec24[l57] = 0.0; } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec53[l58] = 0.0; + fRec62[l58] = 0.0; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { @@ -1546,43 +2575,43 @@ class mydsp : public dsp { } for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { - fRec64[l60] = 0.0; + fRec61[l60] = 0.0; } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - fRec62[l61] = 0.0; + fRec64[l61] = 0.0; } for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { - fRec65[l62] = 0.0; + fRec60[l62] = 0.0; } for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { - fRec66[l63] = 0.0; + fRec59[l63] = 0.0; } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - fRec61[l64] = 0.0; + fRec68[l64] = 0.0; } for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { - fRec60[l65] = 0.0; + fRec69[l65] = 0.0; } for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fRec70[l66] = 0.0; + fRec67[l66] = 0.0; } for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - fRec71[l67] = 0.0; + fRec70[l67] = 0.0; } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { - fRec69[l68] = 0.0; + fRec66[l68] = 0.0; } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { - fRec72[l69] = 0.0; + fRec65[l69] = 0.0; } for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { @@ -1590,127 +2619,127 @@ class mydsp : public dsp { } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec68[l71] = 0.0; + fRec72[l71] = 0.0; } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { - fRec67[l72] = 0.0; + fRec71[l72] = 0.0; } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { - fRec77[l73] = 0.0; + fRec58[l73] = 0.0; } for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { - fRec78[l74] = 0.0; + fRec74[l74] = 0.0; } for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { - fRec76[l75] = 0.0; + fRec75[l75] = 0.0; } for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { - fRec79[l76] = 0.0; + fRec76[l76] = 0.0; } for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { - fRec80[l77] = 0.0; + fRec81[l77] = 0.0; } for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { - fRec75[l78] = 0.0; + fRec82[l78] = 0.0; } for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { - fRec74[l79] = 0.0; + fRec80[l79] = 0.0; } for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { - fRec0[l80] = 0.0; + fRec83[l80] = 0.0; } for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { - fRec81[l81] = 0.0; + fRec84[l81] = 0.0; } for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { - fRec85[l82] = 0.0; + fRec79[l82] = 0.0; } for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { - fRec86[l83] = 0.0; + fRec78[l83] = 0.0; } for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { - fRec84[l84] = 0.0; + fRec88[l84] = 0.0; } for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { - fRec83[l85] = 0.0; + fRec89[l85] = 0.0; } for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { - fRec89[l86] = 0.0; + fRec87[l86] = 0.0; } for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { - fRec88[l87] = 0.0; + fRec90[l87] = 0.0; } for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { - fRec87[l88] = 0.0; + fRec86[l88] = 0.0; } for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { - fRec93[l89] = 0.0; + fRec85[l89] = 0.0; } for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { - fRec94[l90] = 0.0; + fRec93[l90] = 0.0; } for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { - fRec92[l91] = 0.0; + fRec94[l91] = 0.0; } for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { - fRec95[l92] = 0.0; + fRec92[l92] = 0.0; } for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { - fRec96[l93] = 0.0; + fRec91[l93] = 0.0; } for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { - fRec91[l94] = 0.0; + fRec98[l94] = 0.0; } for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { - fRec90[l95] = 0.0; + fRec99[l95] = 0.0; } for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { - fRec100[l96] = 0.0; + fRec97[l96] = 0.0; } for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { - fRec101[l97] = 0.0; + fRec100[l97] = 0.0; } for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { - fRec99[l98] = 0.0; + fRec101[l98] = 0.0; } for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { - fRec102[l99] = 0.0; + fRec96[l99] = 0.0; } for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { - fRec98[l100] = 0.0; + fRec95[l100] = 0.0; } for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { - fRec97[l101] = 0.0; + fRec77[l101] = 0.0; } for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { @@ -1730,67 +2759,67 @@ class mydsp : public dsp { } for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { - fRec104[l106] = 0.0; + fRec109[l106] = 0.0; } for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { - fRec103[l107] = 0.0; + fRec104[l107] = 0.0; } for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { - fRec112[l108] = 0.0; + fRec103[l108] = 0.0; } for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { - fRec113[l109] = 0.0; + fRec112[l109] = 0.0; } for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { - fRec111[l110] = 0.0; + fRec113[l110] = 0.0; } for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { - fRec114[l111] = 0.0; + fRec111[l111] = 0.0; } for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { - fRec115[l112] = 0.0; + fRec110[l112] = 0.0; } for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { - fRec110[l113] = 0.0; + fRec117[l113] = 0.0; } for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { - fRec109[l114] = 0.0; + fRec118[l114] = 0.0; } for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { - fRec82[l115] = 0.0; + fRec116[l115] = 0.0; } for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { - fRec116[l116] = 0.0; + fRec119[l116] = 0.0; } for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { - fRec117[l117] = 0.0; + fRec120[l117] = 0.0; } for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { - fRec118[l118] = 0.0; + fRec115[l118] = 0.0; } for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { - fRec119[l119] = 0.0; + fRec114[l119] = 0.0; } for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { - fRec123[l120] = 0.0; + fRec102[l120] = 0.0; } for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { - fRec124[l121] = 0.0; + fRec121[l121] = 0.0; } for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { @@ -1798,7 +2827,7 @@ class mydsp : public dsp { } for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { - fRec121[l123] = 0.0; + fRec127[l123] = 0.0; } for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { @@ -1806,11 +2835,11 @@ class mydsp : public dsp { } for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { - fRec129[l125] = 0.0; + fRec126[l125] = 0.0; } for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { - fRec127[l126] = 0.0; + fRec129[l126] = 0.0; } for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { @@ -1818,11 +2847,11 @@ class mydsp : public dsp { } for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { - fRec126[l128] = 0.0; + fRec125[l128] = 0.0; } for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { - fRec125[l129] = 0.0; + fRec124[l129] = 0.0; } for (int l130 = 0; (l130 < 2); l130 = (l130 + 1)) { @@ -1854,35 +2883,35 @@ class mydsp : public dsp { } for (int l137 = 0; (l137 < 2); l137 = (l137 + 1)) { - fRec141[l137] = 0.0; + fRec140[l137] = 0.0; } for (int l138 = 0; (l138 < 2); l138 = (l138 + 1)) { - fRec142[l138] = 0.0; + fRec141[l138] = 0.0; } for (int l139 = 0; (l139 < 2); l139 = (l139 + 1)) { - fRec140[l139] = 0.0; + fRec139[l139] = 0.0; } for (int l140 = 0; (l140 < 2); l140 = (l140 + 1)) { - fRec143[l140] = 0.0; + fRec138[l140] = 0.0; } for (int l141 = 0; (l141 < 2); l141 = (l141 + 1)) { - fRec144[l141] = 0.0; + fRec123[l141] = 0.0; } for (int l142 = 0; (l142 < 2); l142 = (l142 + 1)) { - fRec139[l142] = 0.0; + fRec142[l142] = 0.0; } for (int l143 = 0; (l143 < 2); l143 = (l143 + 1)) { - fRec138[l143] = 0.0; + fRec143[l143] = 0.0; } for (int l144 = 0; (l144 < 2); l144 = (l144 + 1)) { - fRec120[l144] = 0.0; + fRec144[l144] = 0.0; } for (int l145 = 0; (l145 < 2); l145 = (l145 + 1)) { @@ -1902,31 +2931,31 @@ class mydsp : public dsp { } for (int l149 = 0; (l149 < 2); l149 = (l149 + 1)) { - fRec149[l149] = 0.0; + fRec153[l149] = 0.0; } for (int l150 = 0; (l150 < 2); l150 = (l150 + 1)) { - fRec150[l150] = 0.0; + fRec154[l150] = 0.0; } for (int l151 = 0; (l151 < 2); l151 = (l151 + 1)) { - fRec151[l151] = 0.0; + fRec152[l151] = 0.0; } for (int l152 = 0; (l152 < 2); l152 = (l152 + 1)) { - fRec152[l152] = 0.0; + fRec155[l152] = 0.0; } for (int l153 = 0; (l153 < 2); l153 = (l153 + 1)) { - fRec153[l153] = 0.0; + fRec151[l153] = 0.0; } for (int l154 = 0; (l154 < 2); l154 = (l154 + 1)) { - fRec154[l154] = 0.0; + fRec150[l154] = 0.0; } for (int l155 = 0; (l155 < 2); l155 = (l155 + 1)) { - fRec155[l155] = 0.0; + fRec149[l155] = 0.0; } for (int l156 = 0; (l156 < 2); l156 = (l156 + 1)) { @@ -2069,9 +3098,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -2081,111 +3110,111 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x354ece0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3770610", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3641f60", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3845f80", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x355a1e0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x377b940", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3563b80", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3804730", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3638b80", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3924110", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36b4090", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38cc830", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3572420", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x378a1e0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x357dab0", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3890f30", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3589140", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37f9960", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3661460", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x382cd50", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36c27e0", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x398afa0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x366fba0", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x383c9e0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x359bd00", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x379ccc0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35aa8d0", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37c9090", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35b94a0", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3882600", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35c8150", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37ecfd0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3652e50", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3917ec0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36e7c60", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38bfd40", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3681080", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3907150", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36d35c0", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38dcc70", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35dd810", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37b21c0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35ee0d0", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38a2ee0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35fe990", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37dbc70", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x360f330", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38717a0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x361fdb0", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3817660", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -2206,256 +3235,256 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph15, "osc", "/output1"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36251b0", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37b7320", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph16, "osc", "/output2"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x362da80", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "osc", "/output2 -70 6"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x381d040", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph23, "osc", "/output3"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3686570", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output3 -70 6"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x384b320", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph24, "osc", "/output4"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x368e2a0", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "osc", "/output4 -70 6"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3852d30", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph25, "osc", "/output5"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36960a0", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "osc", "/output5 -70 6"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3859130", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph26, "osc", "/output6"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x369c940", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "osc", "/output6 -70 6"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x385e8f0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph27, "osc", "/output7"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36a8b30", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "osc", "/output7 -70 6"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38ab880", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph32, "osc", "/output8"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36ee670", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "osc", "/output8 -70 6"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38e2910", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph33, "osc", "/output9"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36f9880", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "osc", "/output9 -70 6"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38eceb0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph34, "osc", "/output10"); - ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3704d40", &fVbargraph34, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "osc", "/output10 -70 6"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38f4660", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph35, "osc", "/output11"); - ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x370f3c0", &fVbargraph35, -70.0, 6.0); + ui_interface->declare(&fVbargraph34, "osc", "/output11 -70 6"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x392ba40", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph36, "osc", "/output12"); - ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3717a10", &fVbargraph36, -70.0, 6.0); + ui_interface->declare(&fVbargraph35, "osc", "/output12 -70 6"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39389b0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph37, "osc", "/output13"); - ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x371fb60", &fVbargraph37, -70.0, 6.0); + ui_interface->declare(&fVbargraph36, "osc", "/output13 -70 6"); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3944240", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph38, "osc", "/output14"); - ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3728150", &fVbargraph38, -70.0, 6.0); + ui_interface->declare(&fVbargraph37, "osc", "/output14 -70 6"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x394fc90", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph39, "osc", "/output15"); - ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x372f010", &fVbargraph39, -70.0, 6.0); + ui_interface->declare(&fVbargraph38, "osc", "/output15 -70 6"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x395ef80", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph40, "osc", "/output16"); - ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3737270", &fVbargraph40, -70.0, 6.0); + ui_interface->declare(&fVbargraph39, "osc", "/output16 -70 6"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x39691b0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph41, "osc", "/output17"); - ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x373f7c0", &fVbargraph41, -70.0, 6.0); + ui_interface->declare(&fVbargraph40, "osc", "/output17 -70 6"); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3972c80", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph42, "osc", "/output18"); - ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3747be0", &fVbargraph42, -70.0, 6.0); + ui_interface->declare(&fVbargraph41, "osc", "/output18 -70 6"); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x397a860", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph43, "osc", "/output19"); + ui_interface->declare(&fVbargraph43, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3758910", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x399dd50", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph44, "osc", "/output20"); + ui_interface->declare(&fVbargraph44, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37656b0", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39b1660", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph45, "osc", "/output21"); + ui_interface->declare(&fVbargraph45, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3771cc0", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39c3aa0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph46, "osc", "/output22"); + ui_interface->declare(&fVbargraph46, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x377e620", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39d4e50", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph47, "osc", "/output23"); + ui_interface->declare(&fVbargraph47, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37872c0", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39e7650", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph48, "osc", "/output24"); + ui_interface->declare(&fVbargraph48, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x378fa40", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x39f5e80", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph49, "osc", "/output25"); + ui_interface->declare(&fVbargraph49, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3798660", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a03600", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph50, "osc", "/output26"); + ui_interface->declare(&fVbargraph50, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37a1340", &fVbargraph50, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a11090", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph51, "osc", "/output27"); + ui_interface->declare(&fVbargraph51, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37b1930", &fVbargraph51, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a27a50", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph52, "osc", "/output28"); + ui_interface->declare(&fVbargraph52, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37bbf30", &fVbargraph52, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a36d30", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph53, "osc", "/output29"); + ui_interface->declare(&fVbargraph53, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37c8ac0", &fVbargraph53, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a47f60", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph54, "osc", "/output30"); + ui_interface->declare(&fVbargraph54, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37d4fb0", &fVbargraph54, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a58310", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph55, "osc", "/output31"); + ui_interface->declare(&fVbargraph55, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37e5bf0", &fVbargraph55, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a6d140", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph56, "osc", "/output32"); + ui_interface->declare(&fVbargraph56, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37f4870", &fVbargraph56, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a80a60", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph57, "osc", "/output33"); + ui_interface->declare(&fVbargraph57, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3802660", &fVbargraph57, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3a947f0", &fVbargraph57, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph58, "osc", "/output34"); + ui_interface->declare(&fVbargraph58, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x380f210", &fVbargraph58, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3aa8870", &fVbargraph58, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph59, "osc", "/output35"); + ui_interface->declare(&fVbargraph59, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x381ce10", &fVbargraph59, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3abc160", &fVbargraph59, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph60, "osc", "/output36"); + ui_interface->declare(&fVbargraph60, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3829f30", &fVbargraph60, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3aceab0", &fVbargraph60, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph61, "osc", "/output37"); + ui_interface->declare(&fVbargraph61, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3837ae0", &fVbargraph61, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3ae3690", &fVbargraph61, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph62, "osc", "/output38"); + ui_interface->declare(&fVbargraph62, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3846e60", &fVbargraph62, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3af8890", &fVbargraph62, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph63, "osc", "/output39"); + ui_interface->declare(&fVbargraph63, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x384f590", &fVbargraph63, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b080f0", &fVbargraph63, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph64, "osc", "/output40"); + ui_interface->declare(&fVbargraph64, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x38579b0", &fVbargraph64, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b15050", &fVbargraph64, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph65, "osc", "/output41"); + ui_interface->declare(&fVbargraph65, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3860090", &fVbargraph65, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b23740", &fVbargraph65, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph66, "osc", "/output42"); + ui_interface->declare(&fVbargraph66, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph66, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3868a60", &fVbargraph66, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b33530", &fVbargraph66, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph67, "osc", "/output43"); + ui_interface->declare(&fVbargraph67, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph67, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3870f40", &fVbargraph67, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b40ee0", &fVbargraph67, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph68, "osc", "/output44"); + ui_interface->declare(&fVbargraph68, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph68, "unit", "dB"); - ui_interface->addVerticalBargraph("0x38798c0", &fVbargraph68, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b4e850", &fVbargraph68, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph69, "osc", "/output45"); + ui_interface->declare(&fVbargraph69, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph69, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3882140", &fVbargraph69, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b5e690", &fVbargraph69, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph70, "osc", "/output46"); + ui_interface->declare(&fVbargraph70, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph70, "unit", "dB"); - ui_interface->addVerticalBargraph("0x388aaa0", &fVbargraph70, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b6e9d0", &fVbargraph70, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph71, "osc", "/output47"); + ui_interface->declare(&fVbargraph71, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph71, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3893510", &fVbargraph71, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b83380", &fVbargraph71, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph72, "osc", "/output48"); + ui_interface->declare(&fVbargraph72, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph72, "unit", "dB"); - ui_interface->addVerticalBargraph("0x389bc70", &fVbargraph72, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b90c90", &fVbargraph72, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph73, "osc", "/output49"); + ui_interface->declare(&fVbargraph73, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph73, "unit", "dB"); - ui_interface->addVerticalBargraph("0x38a4870", &fVbargraph73, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3b9e040", &fVbargraph73, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph74, "osc", "/output50"); + ui_interface->declare(&fVbargraph74, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph74, "unit", "dB"); - ui_interface->addVerticalBargraph("0x38ad730", &fVbargraph74, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3bab370", &fVbargraph74, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -2577,771 +3606,571 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.021994295969128601 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); + double fTemp5 = (fRec3[0] * double(input6[i])); fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow8 * ((fSlow3 * fTemp5) - (fSlow9 * fRec9[0]))); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec8[0] = (fSlow11 * ((fSlow3 * fTemp5) - ((fSlow13 * fRec9[0]) + (fSlow12 * fRec10[0])))); double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (1.3467622079046435e-18 * fTemp6); - double fTemp8 = (fRec3[0] * double(input6[i])); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec13[0] = (fRec13[1] + fRec12[1]); - fRec11[0] = (fSlow11 * ((fSlow3 * fTemp8) - ((fSlow13 * fRec12[0]) + (fSlow12 * fRec13[0])))); - double fTemp9 = (fRec11[0] + (fSlow4 * fTemp8)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = (0.028394513999997331 * fTemp9); - double fTemp11 = (fRec3[0] * double(input7[i])); - fRec16[0] = (fRec16[1] + fRec15[1]); - fRec17[0] = (fRec17[1] + fRec16[1]); - fRec15[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec16[0]) + (fSlow12 * fRec17[0])))); - double fTemp12 = (fRec15[0] + (fSlow4 * fTemp11)); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph4 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = (3.0114518464024883e-18 * fTemp12); - double fTemp14 = (fRec3[0] * double(input8[i])); + double fTemp7 = (0.028394513999997331 * fTemp6); + double fTemp8 = (fRec3[0] * double(input12[i])); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec15[0] = (fRec15[1] + fRec14[1]); + fRec13[0] = (fSlow15 * ((fSlow3 * fTemp8) - ((fSlow17 * fRec14[0]) + (fSlow16 * fRec15[0])))); + fRec16[0] = (fRec16[1] + fRec12[1]); + fRec12[0] = (fSlow14 * (fRec13[0] - (fSlow18 * fRec16[0]))); + double fTemp9 = (fRec12[0] + (fSlow4 * fTemp8)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph3 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.033596842045264641 * fTemp9); + double fTemp11 = (fRec3[0] * double(input20[i])); fRec20[0] = (fRec20[1] + fRec19[1]); fRec21[0] = (fRec21[1] + fRec20[1]); - fRec19[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec20[0]) + (fSlow12 * fRec21[0])))); - double fTemp15 = (fRec19[0] + (fSlow4 * fTemp14)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph5 = FAUSTFLOAT(fRec18[0]); - double fTemp16 = (9.2199121612079837e-35 * fTemp15); - double fTemp17 = (fRec3[0] * double(input12[i])); - fRec25[0] = (fRec25[1] + fRec24[1]); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec24[0] = (fSlow15 * ((fSlow3 * fTemp17) - ((fSlow17 * fRec25[0]) + (fSlow16 * fRec26[0])))); - fRec27[0] = (fRec27[1] + fRec23[1]); - fRec23[0] = (fSlow14 * (fRec24[0] - (fSlow18 * fRec27[0]))); - double fTemp18 = (fRec23[0] + (fSlow4 * fTemp17)); - fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); - fVbargraph6 = FAUSTFLOAT(fRec22[0]); - double fTemp19 = (0.033596842045264641 * fTemp18); - double fTemp20 = (fRec3[0] * double(input13[i])); - fRec31[0] = (fRec31[1] + fRec30[1]); - fRec32[0] = (fRec32[1] + fRec31[1]); - fRec30[0] = (fSlow15 * ((fSlow3 * fTemp20) - ((fSlow17 * fRec31[0]) + (fSlow16 * fRec32[0])))); - fRec33[0] = (fRec33[1] + fRec29[1]); - fRec29[0] = (fSlow14 * (fRec30[0] - (fSlow18 * fRec33[0]))); - double fTemp21 = (fRec29[0] + (fSlow4 * fTemp20)); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph7 = FAUSTFLOAT(fRec28[0]); - double fTemp22 = (5.0391227634343926e-18 * fTemp21); - double fTemp23 = (fRec3[0] * double(input14[i])); + fRec19[0] = (fSlow20 * ((fSlow3 * fTemp11) - ((fSlow22 * fRec20[0]) + (fSlow21 * fRec21[0])))); + fRec22[0] = (fRec22[1] + fRec18[1]); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec18[0] = (fSlow19 * (fRec19[0] - ((fSlow24 * fRec22[0]) + (fSlow23 * fRec23[0])))); + double fTemp12 = (fRec18[0] + (fSlow4 * fTemp11)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph4 = FAUSTFLOAT(fRec17[0]); + double fTemp13 = (0.038095238095238099 * fTemp12); + double fTemp14 = (fRec1[0] * ((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph5 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (fRec3[0] * double(input13[i])); + fRec28[0] = (fRec28[1] + fRec27[1]); + fRec29[0] = (fRec29[1] + fRec28[1]); + fRec27[0] = (fSlow15 * ((fSlow3 * fTemp15) - ((fSlow17 * fRec28[0]) + (fSlow16 * fRec29[0])))); + fRec30[0] = (fRec30[1] + fRec26[1]); + fRec26[0] = (fSlow14 * (fRec27[0] - (fSlow18 * fRec30[0]))); + double fTemp16 = (fRec26[0] + (fSlow4 * fTemp15)); + fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph6 = FAUSTFLOAT(fRec25[0]); + double fTemp17 = (fRec3[0] * double(input22[i])); + fRec34[0] = (fRec34[1] + fRec33[1]); + fRec35[0] = (fRec35[1] + fRec34[1]); + fRec33[0] = (fSlow20 * ((fSlow3 * fTemp17) - ((fSlow22 * fRec34[0]) + (fSlow21 * fRec35[0])))); + fRec36[0] = (fRec32[1] + fRec36[1]); fRec37[0] = (fRec37[1] + fRec36[1]); - fRec38[0] = (fRec38[1] + fRec37[1]); - fRec36[0] = (fSlow15 * ((fSlow3 * fTemp23) - ((fSlow17 * fRec37[0]) + (fSlow16 * fRec38[0])))); - fRec39[0] = (fRec39[1] + fRec35[1]); - fRec35[0] = (fSlow14 * (fRec36[0] - (fSlow18 * fRec39[0]))); - double fTemp24 = (fRec35[0] + (fSlow4 * fTemp23)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph8 = FAUSTFLOAT(fRec34[0]); - double fTemp25 = (2.4393594688416384e-34 * fTemp24); - double fTemp26 = (fRec3[0] * double(input15[i])); - fRec43[0] = (fRec43[1] + fRec42[1]); - fRec44[0] = (fRec44[1] + fRec43[1]); - fRec42[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec43[0]) + (fSlow16 * fRec44[0])))); - fRec45[0] = (fRec45[1] + fRec41[1]); - fRec41[0] = (fSlow14 * (fRec42[0] - (fSlow18 * fRec45[0]))); - double fTemp27 = (fRec41[0] + (fSlow4 * fTemp26)); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph9 = FAUSTFLOAT(fRec40[0]); - double fTemp28 = (6.0979103388536467e-51 * fTemp27); - double fTemp29 = (fRec3[0] * double(input20[i])); - fRec49[0] = (fRec49[1] + fRec48[1]); + fRec32[0] = (fSlow19 * (fRec33[0] - ((fSlow24 * fRec36[0]) + (fSlow23 * fRec37[0])))); + double fTemp18 = (fRec32[0] + (fSlow4 * fTemp17)); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph7 = FAUSTFLOAT(fRec31[0]); + double fTemp19 = (fRec3[0] * double(input15[i])); + fRec41[0] = (fRec41[1] + fRec40[1]); + fRec42[0] = (fRec42[1] + fRec41[1]); + fRec40[0] = (fSlow15 * ((fSlow3 * fTemp19) - ((fSlow17 * fRec41[0]) + (fSlow16 * fRec42[0])))); + fRec43[0] = (fRec43[1] + fRec39[1]); + fRec39[0] = (fSlow14 * (fRec40[0] - (fSlow18 * fRec43[0]))); + double fTemp20 = (fRec39[0] + (fSlow4 * fTemp19)); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph8 = FAUSTFLOAT(fRec38[0]); + double fTemp21 = (fRec3[0] * double(input8[i])); + fRec46[0] = (fRec46[1] + fRec45[1]); + fRec47[0] = (fRec47[1] + fRec46[1]); + fRec45[0] = (fSlow11 * ((fSlow3 * fTemp21) - ((fSlow13 * fRec46[0]) + (fSlow12 * fRec47[0])))); + double fTemp22 = (fRec45[0] + (fSlow4 * fTemp21)); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph9 = FAUSTFLOAT(fRec44[0]); + double fTemp23 = (fConst30 * fTemp22); + double fTemp24 = (fRec3[0] * double(input3[i])); fRec50[0] = (fRec50[1] + fRec49[1]); - fRec48[0] = (fSlow20 * ((fSlow3 * fTemp29) - ((fSlow22 * fRec49[0]) + (fSlow21 * fRec50[0])))); - fRec51[0] = (fRec51[1] + fRec47[1]); - fRec52[0] = (fRec52[1] + fRec51[1]); - fRec47[0] = (fSlow19 * (fRec48[0] - ((fSlow24 * fRec51[0]) + (fSlow23 * fRec52[0])))); - double fTemp30 = (fRec47[0] + (fSlow4 * fTemp29)); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph10 = FAUSTFLOAT(fRec46[0]); - double fTemp31 = (0.038095238095238099 * fTemp30); - double fTemp32 = (fRec3[0] * double(input21[i])); - fRec56[0] = (fRec56[1] + fRec55[1]); + fRec49[0] = (fSlow8 * ((fSlow3 * fTemp24) - (fSlow9 * fRec50[0]))); + double fTemp25 = (fRec49[0] + (fSlow4 * fTemp24)); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph10 = FAUSTFLOAT(fRec48[0]); + double fTemp26 = (0.014285714285714285 * fTemp12); + double fTemp27 = (fRec3[0] * double(input24[i])); + fRec54[0] = (fRec54[1] + fRec53[1]); + fRec55[0] = (fRec55[1] + fRec54[1]); + fRec53[0] = (fSlow20 * ((fSlow3 * fTemp27) - ((fSlow22 * fRec54[0]) + (fSlow21 * fRec55[0])))); + fRec56[0] = (fRec56[1] + fRec52[1]); fRec57[0] = (fRec57[1] + fRec56[1]); - fRec55[0] = (fSlow20 * ((fSlow3 * fTemp32) - ((fSlow22 * fRec56[0]) + (fSlow21 * fRec57[0])))); - fRec58[0] = (fRec58[1] + fRec54[1]); - fRec59[0] = (fRec59[1] + fRec58[1]); - fRec54[0] = (fSlow19 * (fRec55[0] - ((fSlow24 * fRec58[0]) + (fSlow23 * fRec59[0])))); - double fTemp33 = (fRec54[0] + (fSlow4 * fTemp32)); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); - fVbargraph11 = FAUSTFLOAT(fRec53[0]); - double fTemp34 = (7.3765204086483564e-18 * fTemp33); - double fTemp35 = (fRec3[0] * double(input22[i])); + fRec52[0] = (fSlow19 * (fRec53[0] - ((fSlow24 * fRec56[0]) + (fSlow23 * fRec57[0])))); + double fTemp28 = (fRec52[0] + (fSlow4 * fTemp27)); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph11 = FAUSTFLOAT(fRec51[0]); + double fTemp29 = (fConst35 * fTemp28); + double fTemp30 = (0.014197256999998666 * fTemp6); + double fTemp31 = (fRec1[0] * ((((0.0089791337293529845 * ((fConst18 * fTemp16) + (fConst22 * fTemp18))) + ((fConst27 * fTemp20) + (fTemp23 + ((fConst33 * fTemp25) + (fTemp1 + fTemp26))))) + fTemp29) - fTemp30)); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph12 = FAUSTFLOAT(fRec24[0]); + output1[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (fConst36 * fTemp22); + double fTemp33 = (fRec3[0] * double(input9[i])); + fRec62[0] = (fRec62[1] + fRec61[1]); fRec63[0] = (fRec63[1] + fRec62[1]); - fRec64[0] = (fRec64[1] + fRec63[1]); - fRec62[0] = (fSlow20 * ((fSlow3 * fTemp35) - ((fSlow22 * fRec63[0]) + (fSlow21 * fRec64[0])))); - fRec65[0] = (fRec65[1] + fRec61[1]); - fRec66[0] = (fRec66[1] + fRec65[1]); - fRec61[0] = (fSlow19 * (fRec62[0] - ((fSlow24 * fRec65[0]) + (fSlow23 * fRec66[0])))); - double fTemp36 = (fRec61[0] + (fSlow4 * fTemp35)); - fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); - fVbargraph12 = FAUSTFLOAT(fRec60[0]); - double fTemp37 = (4.7908068913603203e-34 * fTemp36); - double fTemp38 = (fRec3[0] * double(input23[i])); - fRec70[0] = (fRec70[1] + fRec69[1]); - fRec71[0] = (fRec71[1] + fRec70[1]); - fRec69[0] = (fSlow20 * ((fSlow3 * fTemp38) - ((fSlow22 * fRec70[0]) + (fSlow21 * fRec71[0])))); - fRec72[0] = (fRec72[1] + fRec68[1]); + fRec61[0] = (fSlow15 * ((fSlow3 * fTemp33) - ((fSlow17 * fRec62[0]) + (fSlow16 * fRec63[0])))); + fRec64[0] = (fRec64[1] + fRec60[1]); + fRec60[0] = (fSlow14 * (fRec61[0] - (fSlow18 * fRec64[0]))); + double fTemp34 = (fRec60[0] + (fSlow4 * fTemp33)); + fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph13 = FAUSTFLOAT(fRec59[0]); + double fTemp35 = (fConst38 * fTemp18); + double fTemp36 = (fRec3[0] * double(input11[i])); + fRec68[0] = (fRec68[1] + fRec67[1]); + fRec69[0] = (fRec69[1] + fRec68[1]); + fRec67[0] = (fSlow15 * ((fSlow3 * fTemp36) - ((fSlow17 * fRec68[0]) + (fSlow16 * fRec69[0])))); + fRec70[0] = (fRec70[1] + fRec66[1]); + fRec66[0] = (fSlow14 * (fRec67[0] - (fSlow18 * fRec70[0]))); + double fTemp37 = (fRec66[0] + (fSlow4 * fTemp36)); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph14 = FAUSTFLOAT(fRec65[0]); + double fTemp38 = (fRec3[0] * double(input1[i])); fRec73[0] = (fRec73[1] + fRec72[1]); - fRec68[0] = (fSlow19 * (fRec69[0] - ((fSlow24 * fRec72[0]) + (fSlow23 * fRec73[0])))); - double fTemp39 = (fRec68[0] + (fSlow4 * fTemp38)); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph13 = FAUSTFLOAT(fRec67[0]); - double fTemp40 = (1.8293731016560941e-50 * fTemp39); - double fTemp41 = (fRec3[0] * double(input24[i])); - fRec77[0] = (fRec77[1] + fRec76[1]); - fRec78[0] = (fRec78[1] + fRec77[1]); - fRec76[0] = (fSlow20 * ((fSlow3 * fTemp41) - ((fSlow22 * fRec77[0]) + (fSlow21 * fRec78[0])))); - fRec79[0] = (fRec79[1] + fRec75[1]); - fRec80[0] = (fRec80[1] + fRec79[1]); - fRec75[0] = (fSlow19 * (fRec76[0] - ((fSlow24 * fRec79[0]) + (fSlow23 * fRec80[0])))); - double fTemp42 = (fRec75[0] + (fSlow4 * fTemp41)); + fRec72[0] = (fSlow8 * ((fSlow3 * fTemp38) - (fSlow9 * fRec73[0]))); + double fTemp39 = (fRec72[0] + (fSlow4 * fTemp38)); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph15 = FAUSTFLOAT(fRec71[0]); + double fTemp40 = (fTemp26 + fTemp29); + double fTemp41 = (fRec1[0] * (((0.012698412698412698 * (((fTemp0 + fTemp32) + (fConst37 * fTemp34)) + fTemp35)) + ((fConst39 * fTemp37) + ((fConst33 * fTemp39) + fTemp40))) - fTemp30)); + fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph16 = FAUSTFLOAT(fRec58[0]); + output2[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (fRec1[0] * (((0.012698412698412698 * (((fTemp0 + (fConst40 * fTemp25)) + (fConst41 * fTemp16)) + (fConst37 * fTemp20))) + (fTemp29 + ((fConst42 * fTemp18) + (fTemp23 + fTemp26)))) - fTemp30)); fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); - fVbargraph14 = FAUSTFLOAT(fRec74[0]); - double fTemp43 = (3.9603917912335094e-67 * fTemp42); - double fTemp44 = (fRec1[0] * ((((((((((((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16) + fTemp19) + fTemp22) + fTemp25) + fTemp28) + fTemp31) + fTemp34) + fTemp37) + fTemp40) + fTemp43)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); - fVbargraph15 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (0.021994295969128601 * fTemp6); - double fTemp46 = (0.024590370452110585 * fTemp15); - double fTemp47 = (0.026560635762986527 * fTemp27); - double fTemp48 = (0.014285714285714285 * fTemp30); - double fTemp49 = (0.028171808490950554 * fTemp42); - double fTemp50 = (0.014197256999998666 * fTemp9); - double fTemp51 = (0.020573779994945588 * fTemp21); - double fTemp52 = (0.021295885499997998 * fTemp36); - double fTemp53 = (fRec1[0] * ((((((fTemp1 + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) - ((fTemp50 + fTemp51) + fTemp52))); - fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); - fVbargraph16 = FAUSTFLOAT(fRec81[0]); - output1[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = (fRec3[0] * double(input4[i])); - fRec85[0] = (fRec85[1] + fRec84[1]); - fRec86[0] = (fRec86[1] + fRec85[1]); - fRec84[0] = (fSlow11 * ((fSlow3 * fTemp54) - ((fSlow13 * fRec85[0]) + (fSlow12 * fRec86[0])))); - double fTemp55 = (fRec84[0] + (fSlow4 * fTemp54)); - fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); - fVbargraph17 = FAUSTFLOAT(fRec83[0]); - double fTemp56 = (fRec3[0] * double(input1[i])); + fVbargraph17 = FAUSTFLOAT(fRec74[0]); + output3[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (fRec1[0] * (((0.012698412698412698 * (fTemp35 + ((fTemp32 + (fTemp0 + (fConst40 * fTemp39))) + (fConst41 * fTemp37)))) + (fTemp40 + (fConst27 * fTemp34))) - fTemp30)); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph18 = FAUSTFLOAT(fRec75[0]); + output4[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (fRec1[0] * ((fTemp13 + (fTemp1 + fTemp7)) - (fTemp4 + fTemp10))); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph19 = FAUSTFLOAT(fRec76[0]); + output5[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (fRec3[0] * double(input23[i])); + fRec81[0] = (fRec81[1] + fRec80[1]); + fRec82[0] = (fRec82[1] + fRec81[1]); + fRec80[0] = (fSlow20 * ((fSlow3 * fTemp45) - ((fSlow22 * fRec81[0]) + (fSlow21 * fRec82[0])))); + fRec83[0] = (fRec83[1] + fRec79[1]); + fRec84[0] = (fRec84[1] + fRec83[1]); + fRec79[0] = (fSlow19 * (fRec80[0] - ((fSlow24 * fRec83[0]) + (fSlow23 * fRec84[0])))); + double fTemp46 = (fRec79[0] + (fSlow4 * fTemp45)); + fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph20 = FAUSTFLOAT(fRec78[0]); + double fTemp47 = (fRec3[0] * double(input14[i])); + fRec88[0] = (fRec88[1] + fRec87[1]); fRec89[0] = (fRec89[1] + fRec88[1]); - fRec88[0] = (fSlow8 * ((fSlow3 * fTemp56) - (fSlow9 * fRec89[0]))); - double fTemp57 = (fRec88[0] + (fSlow4 * fTemp56)); - fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); - fVbargraph18 = FAUSTFLOAT(fRec87[0]); - double fTemp58 = (0.021994295969128601 * fTemp57); - double fTemp59 = (fTemp1 + fTemp7); - double fTemp60 = (fRec3[0] * double(input16[i])); + fRec87[0] = (fSlow15 * ((fSlow3 * fTemp47) - ((fSlow17 * fRec88[0]) + (fSlow16 * fRec89[0])))); + fRec90[0] = (fRec90[1] + fRec86[1]); + fRec86[0] = (fSlow14 * (fRec87[0] - (fSlow18 * fRec90[0]))); + double fTemp48 = (fRec86[0] + (fSlow4 * fTemp47)); + fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph21 = FAUSTFLOAT(fRec85[0]); + double fTemp49 = (fConst19 * (((fConst47 * fTemp22) + (fConst50 * fTemp48)) + (fConst51 * fTemp18))); + double fTemp50 = (fRec3[0] * double(input7[i])); fRec93[0] = (fRec93[1] + fRec92[1]); fRec94[0] = (fRec94[1] + fRec93[1]); - fRec92[0] = (fSlow20 * ((fSlow3 * fTemp60) - ((fSlow22 * fRec93[0]) + (fSlow21 * fRec94[0])))); - fRec95[0] = (fRec95[1] + fRec91[1]); - fRec96[0] = (fRec96[1] + fRec95[1]); - fRec91[0] = (fSlow19 * (fRec92[0] - ((fSlow24 * fRec95[0]) + (fSlow23 * fRec96[0])))); - double fTemp61 = (fRec91[0] + (fSlow4 * fTemp60)); - fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); - fVbargraph19 = FAUSTFLOAT(fRec90[0]); - double fTemp62 = (fRec3[0] * double(input9[i])); - fRec100[0] = (fRec100[1] + fRec99[1]); + fRec92[0] = (fSlow11 * ((fSlow3 * fTemp50) - ((fSlow13 * fRec93[0]) + (fSlow12 * fRec94[0])))); + double fTemp51 = (fRec92[0] + (fSlow4 * fTemp50)); + fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + fVbargraph22 = FAUSTFLOAT(fRec91[0]); + double fTemp52 = (fRec3[0] * double(input21[i])); + fRec98[0] = (fRec98[1] + fRec97[1]); + fRec99[0] = (fRec99[1] + fRec98[1]); + fRec97[0] = (fSlow20 * ((fSlow3 * fTemp52) - ((fSlow22 * fRec98[0]) + (fSlow21 * fRec99[0])))); + fRec100[0] = (fRec100[1] + fRec96[1]); fRec101[0] = (fRec101[1] + fRec100[1]); - fRec99[0] = (fSlow15 * ((fSlow3 * fTemp62) - ((fSlow17 * fRec100[0]) + (fSlow16 * fRec101[0])))); - fRec102[0] = (fRec102[1] + fRec98[1]); - fRec98[0] = (fSlow14 * (fRec99[0] - (fSlow18 * fRec102[0]))); - double fTemp63 = (fRec98[0] + (fSlow4 * fTemp62)); - fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); - fVbargraph20 = FAUSTFLOAT(fRec97[0]); - double fTemp64 = (0.026560635762986527 * fTemp63); - double fTemp65 = (fRec3[0] * double(input11[i])); + fRec96[0] = (fSlow19 * (fRec97[0] - ((fSlow24 * fRec100[0]) + (fSlow23 * fRec101[0])))); + double fTemp53 = (fRec96[0] + (fSlow4 * fTemp52)); + fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph23 = FAUSTFLOAT(fRec95[0]); + double fTemp54 = (0.022574955908289243 * fTemp0); + double fTemp55 = (0.027648561470568499 * fTemp3); + double fTemp56 = (0.01261978399999881 * fTemp6); + double fTemp57 = (fConst59 * fTemp28); + double fTemp58 = (0.010558468816293317 * fTemp9); + double fTemp59 = (0.027513227513227514 * fTemp12); + double fTemp60 = (fTemp58 + fTemp59); + double fTemp61 = (fRec1[0] * (((fConst23 * ((fConst43 * fTemp20) + (fConst46 * fTemp46))) + (fTemp49 + ((fConst14 * ((((fConst52 * fTemp25) + (fConst55 * fTemp51)) + (fConst56 * fTemp16)) + (fConst58 * fTemp53))) + (((fTemp54 + fTemp55) + fTemp56) + fTemp57)))) - fTemp60)); + fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph24 = FAUSTFLOAT(fRec77[0]); + output6[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (fConst60 * fTemp22); + double fTemp63 = ((fTemp0 + fTemp62) + (fConst61 * fTemp34)); + double fTemp64 = (fConst63 * fTemp48); + double fTemp65 = (fRec3[0] * double(input17[i])); fRec106[0] = (fRec106[1] + fRec105[1]); fRec107[0] = (fRec107[1] + fRec106[1]); - fRec105[0] = (fSlow15 * ((fSlow3 * fTemp65) - ((fSlow17 * fRec106[0]) + (fSlow16 * fRec107[0])))); + fRec105[0] = (fSlow20 * ((fSlow3 * fTemp65) - ((fSlow22 * fRec106[0]) + (fSlow21 * fRec107[0])))); fRec108[0] = (fRec108[1] + fRec104[1]); - fRec104[0] = (fSlow14 * (fRec105[0] - (fSlow18 * fRec108[0]))); + fRec109[0] = (fRec109[1] + fRec108[1]); + fRec104[0] = (fSlow19 * (fRec105[0] - ((fSlow24 * fRec108[0]) + (fSlow23 * fRec109[0])))); double fTemp66 = (fRec104[0] + (fSlow4 * fTemp65)); fRec103[0] = max((fRec103[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); - fVbargraph21 = FAUSTFLOAT(fRec103[0]); - double fTemp67 = (0.020573779994945588 * fTemp66); - double fTemp68 = (fRec3[0] * double(input18[i])); + fVbargraph25 = FAUSTFLOAT(fRec103[0]); + double fTemp67 = (fConst67 * fTemp18); + double fTemp68 = (fRec3[0] * double(input5[i])); fRec112[0] = (fRec112[1] + fRec111[1]); fRec113[0] = (fRec113[1] + fRec112[1]); - fRec111[0] = (fSlow20 * ((fSlow3 * fTemp68) - ((fSlow22 * fRec112[0]) + (fSlow21 * fRec113[0])))); - fRec114[0] = (fRec114[1] + fRec110[1]); - fRec115[0] = (fRec115[1] + fRec114[1]); - fRec110[0] = (fSlow19 * (fRec111[0] - ((fSlow24 * fRec114[0]) + (fSlow23 * fRec115[0])))); - double fTemp69 = (fRec110[0] + (fSlow4 * fTemp68)); - fRec109[0] = max((fRec109[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); - fVbargraph22 = FAUSTFLOAT(fRec109[0]); - double fTemp70 = (fRec1[0] * (((3.0114518464024883e-18 * fTemp55) + (fTemp58 + (fTemp49 + (fTemp52 + (fTemp48 + fTemp59))))) - ((6.9001030189269641e-18 * fTemp61) + (fTemp64 + ((fTemp67 + (((fTemp50 + fTemp46) + (1.2597806908585981e-18 * fTemp21)) + (4.879109635569025e-18 * fTemp27))) + (2.607993801258108e-18 * fTemp69)))))); - fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); - fVbargraph23 = FAUSTFLOAT(fRec82[0]); - output2[i] = FAUSTFLOAT(fTemp70); - double fTemp71 = (fRec1[0] * (((9.7582192711380499e-18 * fTemp63) + ((2.6935244158092871e-18 * fTemp57) + ((5.2159876025162161e-18 * fTemp69) + (fTemp49 + (fTemp48 + (fTemp51 + (fTemp1 + fTemp46))))))) - ((1.3800206037853928e-17 * fTemp61) + ((6.0229036928049765e-18 * fTemp55) + ((2.5195613817171963e-18 * fTemp66) + (fTemp52 + (fTemp47 + (fTemp45 + fTemp50)))))))); - fRec116[0] = max((fRec116[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); - fVbargraph24 = FAUSTFLOAT(fRec116[0]); - output3[i] = FAUSTFLOAT(fTemp71); - double fTemp72 = (fRec1[0] * ((fTemp64 + ((9.0343555392074636e-18 * fTemp55) + (fTemp67 + (fTemp49 + (fTemp52 + (fTemp48 + ((fTemp1 + (3.7793420725757941e-18 * fTemp21)) + (1.4637328906707076e-17 * fTemp27)))))))) - ((2.0700309056780893e-17 * fTemp61) + (fTemp58 + ((fTemp46 + (fTemp50 + (4.0402866237139308e-18 * fTemp6))) + (7.823981403774323e-18 * fTemp69)))))); - fRec117[0] = max((fRec117[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp72)))))); - fVbargraph25 = FAUSTFLOAT(fRec117[0]); - output4[i] = FAUSTFLOAT(fTemp72); - double fTemp73 = (fRec1[0] * ((fTemp43 + (fTemp37 + (fTemp31 + (fTemp28 + (fTemp22 + (fTemp16 + (fTemp10 + fTemp59))))))) - (fTemp40 + (fTemp34 + (fTemp25 + (fTemp19 + (fTemp4 + fTemp13))))))); - fRec118[0] = max((fRec118[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); - fVbargraph26 = FAUSTFLOAT(fRec118[0]); - output5[i] = FAUSTFLOAT(fTemp73); - double fTemp74 = (0.022574955908289243 * fTemp0); - double fTemp75 = (0.027648561470568499 * fTemp3); - double fTemp76 = (fTemp74 + fTemp75); - double fTemp77 = (0.027648561470568506 * fTemp6); - double fTemp78 = (0.012619783999998805 * fTemp9); - double fTemp79 = (0.043716214137085485 * fTemp12); - double fTemp80 = (0.021858107068542749 * fTemp15); - double fTemp81 = (0.038794291597509752 * fTemp21); - double fTemp82 = (0.04089277388695433 * fTemp24); - double fTemp83 = (0.016694405031674409 * fTemp27); - double fTemp84 = (0.013385302265262959 * fTemp33); - double fTemp85 = (0.047324189999995547 * fTemp36); - double fTemp86 = (0.035414181017315374 * fTemp39); - double fTemp87 = (0.012520803773755805 * fTemp42); - double fTemp88 = (0.010558468816293319 * fTemp18); - double fTemp89 = (0.027513227513227514 * fTemp30); - double fTemp90 = (fRec1[0] * ((((((((((((fTemp76 + fTemp77) + fTemp78) + fTemp79) + fTemp80) + fTemp81) + fTemp82) + fTemp83) + fTemp84) + fTemp85) + fTemp86) + fTemp87) - (fTemp88 + fTemp89))); - fRec119[0] = max((fRec119[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); - fVbargraph27 = FAUSTFLOAT(fRec119[0]); - output6[i] = FAUSTFLOAT(fTemp90); - double fTemp91 = (fRec3[0] * double(input5[i])); - fRec123[0] = (fRec123[1] + fRec122[1]); - fRec124[0] = (fRec124[1] + fRec123[1]); - fRec122[0] = (fSlow11 * ((fSlow3 * fTemp91) - ((fSlow13 * fRec123[0]) + (fSlow12 * fRec124[0])))); - double fTemp92 = (fRec122[0] + (fSlow4 * fTemp91)); - fRec121[0] = max((fRec121[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); - fVbargraph28 = FAUSTFLOAT(fRec121[0]); - double fTemp93 = (0.043716214137085485 * fTemp92); - double fTemp94 = (fRec3[0] * double(input10[i])); + fRec111[0] = (fSlow11 * ((fSlow3 * fTemp68) - ((fSlow13 * fRec112[0]) + (fSlow12 * fRec113[0])))); + double fTemp69 = (fRec111[0] + (fSlow4 * fTemp68)); + fRec110[0] = max((fRec110[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph26 = FAUSTFLOAT(fRec110[0]); + double fTemp70 = (fRec3[0] * double(input19[i])); + fRec117[0] = (fRec117[1] + fRec116[1]); + fRec118[0] = (fRec118[1] + fRec117[1]); + fRec116[0] = (fSlow20 * ((fSlow3 * fTemp70) - ((fSlow22 * fRec117[0]) + (fSlow21 * fRec118[0])))); + fRec119[0] = (fRec119[1] + fRec115[1]); + fRec120[0] = (fRec120[1] + fRec119[1]); + fRec115[0] = (fSlow19 * (fRec116[0] - ((fSlow24 * fRec119[0]) + (fSlow23 * fRec120[0])))); + double fTemp71 = (fRec115[0] + (fSlow4 * fTemp70)); + fRec114[0] = max((fRec114[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph27 = FAUSTFLOAT(fRec114[0]); + double fTemp72 = (fTemp57 + (fTemp55 + fTemp56)); + double fTemp73 = (fRec1[0] * (((0.022574955908289243 * (((fTemp63 + fTemp64) + (fConst65 * fTemp66)) + fTemp67)) + ((fConst14 * ((((fConst52 * fTemp39) + (fConst55 * fTemp69)) + (fConst56 * fTemp37)) + (fConst58 * fTemp71))) + fTemp72)) - fTemp60)); + fRec102[0] = max((fRec102[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph28 = FAUSTFLOAT(fRec102[0]); + output7[i] = FAUSTFLOAT(fTemp73); + double fTemp74 = (fTemp0 + (fConst68 * fTemp25)); + double fTemp75 = (fConst61 * fTemp20); + double fTemp76 = (fRec1[0] * (((0.022574955908289243 * (((((fTemp74 + (fConst70 * fTemp51)) + (fConst72 * fTemp16)) + fTemp75) + (fConst74 * fTemp53)) + (fConst65 * fTemp46))) + (fTemp49 + fTemp72)) - fTemp60)); + fRec121[0] = max((fRec121[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph29 = FAUSTFLOAT(fRec121[0]); + output8[i] = FAUSTFLOAT(fTemp76); + double fTemp77 = (fTemp0 + (fConst68 * fTemp39)); + double fTemp78 = (fRec1[0] * (((0.022574955908289243 * (fTemp67 + ((fTemp64 + ((fTemp62 + (fTemp77 + (fConst70 * fTemp69))) + (fConst72 * fTemp37))) + (fConst74 * fTemp71)))) + (fTemp72 + (fConst23 * ((fConst43 * fTemp34) + (fConst46 * fTemp66))))) - fTemp60)); + fRec122[0] = max((fRec122[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph30 = FAUSTFLOAT(fRec122[0]); + output9[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = (fRec3[0] * double(input18[i])); + fRec127[0] = (fRec127[1] + fRec126[1]); fRec128[0] = (fRec128[1] + fRec127[1]); - fRec129[0] = (fRec129[1] + fRec128[1]); - fRec127[0] = (fSlow15 * ((fSlow3 * fTemp94) - ((fSlow17 * fRec128[0]) + (fSlow16 * fRec129[0])))); - fRec130[0] = (fRec130[1] + fRec126[1]); - fRec126[0] = (fSlow14 * (fRec127[0] - (fSlow18 * fRec130[0]))); - double fTemp95 = (fRec126[0] + (fSlow4 * fTemp94)); - fRec125[0] = max((fRec125[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); - fVbargraph29 = FAUSTFLOAT(fRec125[0]); - double fTemp96 = (5.0079204648915091e-18 * fTemp95); - double fTemp97 = (2.6768460856911014e-18 * fTemp55); - double fTemp98 = (0.027648561470568506 * fTemp57); - double fTemp99 = (fRec3[0] * double(input19[i])); + fRec126[0] = (fSlow20 * ((fSlow3 * fTemp79) - ((fSlow22 * fRec127[0]) + (fSlow21 * fRec128[0])))); + fRec129[0] = (fRec129[1] + fRec125[1]); + fRec130[0] = (fRec130[1] + fRec129[1]); + fRec125[0] = (fSlow19 * (fRec126[0] - ((fSlow24 * fRec129[0]) + (fSlow23 * fRec130[0])))); + double fTemp80 = (fRec125[0] + (fSlow4 * fTemp79)); + fRec124[0] = max((fRec124[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + fVbargraph31 = FAUSTFLOAT(fRec124[0]); + double fTemp81 = (fRec3[0] * double(input16[i])); fRec134[0] = (fRec134[1] + fRec133[1]); fRec135[0] = (fRec135[1] + fRec134[1]); - fRec133[0] = (fSlow20 * ((fSlow3 * fTemp99) - ((fSlow22 * fRec134[0]) + (fSlow21 * fRec135[0])))); + fRec133[0] = (fSlow20 * ((fSlow3 * fTemp81) - ((fSlow22 * fRec134[0]) + (fSlow21 * fRec135[0])))); fRec136[0] = (fRec136[1] + fRec132[1]); fRec137[0] = (fRec137[1] + fRec136[1]); fRec132[0] = (fSlow19 * (fRec133[0] - ((fSlow24 * fRec136[0]) + (fSlow23 * fRec137[0])))); - double fTemp100 = (fRec132[0] + (fSlow4 * fTemp99)); - fRec131[0] = max((fRec131[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); - fVbargraph30 = FAUSTFLOAT(fRec131[0]); - double fTemp101 = (0.013385302265262959 * fTemp100); - double fTemp102 = (5.7955417805735729e-18 * fTemp69); - double fTemp103 = (0.038794291597509752 * fTemp66); - double fTemp104 = (1.6929861152980278e-18 * fTemp6); - double fTemp105 = (2.6768460856911007e-18 * fTemp12); - double fTemp106 = (2.3754652515039685e-18 * fTemp21); - double fTemp107 = (8.1961337873870493e-19 * fTemp33); - double fTemp108 = (3.0667124528564294e-18 * (fTemp27 + fTemp61)); - double fTemp109 = (fRec3[0] * double(input17[i])); + double fTemp82 = (fRec132[0] + (fSlow4 * fTemp81)); + fRec131[0] = max((fRec131[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph32 = FAUSTFLOAT(fRec131[0]); + double fTemp83 = (fRec3[0] * double(input4[i])); + fRec140[0] = (fRec140[1] + fRec139[1]); fRec141[0] = (fRec141[1] + fRec140[1]); - fRec142[0] = (fRec142[1] + fRec141[1]); - fRec140[0] = (fSlow20 * ((fSlow3 * fTemp109) - ((fSlow22 * fRec141[0]) + (fSlow21 * fRec142[0])))); - fRec143[0] = (fRec143[1] + fRec139[1]); - fRec144[0] = (fRec144[1] + fRec143[1]); - fRec139[0] = (fSlow19 * (fRec140[0] - ((fSlow24 * fRec143[0]) + (fSlow23 * fRec144[0])))); - double fTemp110 = (fRec139[0] + (fSlow4 * fTemp109)); - fRec138[0] = max((fRec138[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp110)))))); - fVbargraph31 = FAUSTFLOAT(fRec138[0]); - double fTemp111 = (0.035414181017315374 * fTemp110); - double fTemp112 = (0.016694405031674409 * fTemp63); - double fTemp113 = (6.5054795140920346e-18 * fTemp39); - double fTemp114 = (fRec1[0] * ((fTemp93 + (fTemp96 + (fTemp97 + (fTemp98 + (fTemp101 + (fTemp102 + (fTemp103 + (fTemp87 + ((((fTemp78 + (fTemp76 + fTemp104)) + fTemp105) + fTemp106) + fTemp107))))))))) - (fTemp108 + (fTemp111 + (fTemp112 + ((fTemp85 + (fTemp89 + (fTemp82 + (fTemp80 + fTemp88)))) + fTemp113)))))); - fRec120[0] = max((fRec120[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp114)))))); - fVbargraph32 = FAUSTFLOAT(fRec120[0]); - output7[i] = FAUSTFLOAT(fTemp114); - double fTemp115 = (6.1334249057128588e-18 * (fTemp63 - fTemp61)); - double fTemp116 = (5.3536921713822013e-18 * fTemp92); - double fTemp117 = (1.3010959028184069e-17 * fTemp110); - double fTemp118 = (3.3859722305960555e-18 * fTemp57); - double fTemp119 = (1.6392267574774099e-18 * fTemp100); - double fTemp120 = (4.7509305030079371e-18 * fTemp66); - double fTemp121 = (fTemp76 + fTemp78); - double fTemp122 = (1.0015840929783018e-17 * fTemp95); - double fTemp123 = (5.3536921713822029e-18 * fTemp55); - double fTemp124 = (1.1591083561147146e-17 * fTemp69); - double fTemp125 = (fRec1[0] * ((fTemp115 + (fTemp116 + (fTemp117 + (fTemp118 + (fTemp119 + (fTemp120 + (fTemp87 + (fTemp85 + (fTemp82 + (fTemp80 + fTemp121)))))))))) - (fTemp122 + (fTemp123 + (fTemp124 + (fTemp86 + (fTemp84 + (fTemp89 + (fTemp83 + (fTemp81 + (fTemp88 + (fTemp77 + fTemp79)))))))))))); - fRec145[0] = max((fRec145[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp125)))))); - fVbargraph33 = FAUSTFLOAT(fRec145[0]); - output8[i] = FAUSTFLOAT(fTemp125); - double fTemp126 = (1.5023761394674526e-17 * fTemp95); - double fTemp127 = (8.0305382570733035e-18 * fTemp55); - double fTemp128 = (1.7386625341720719e-17 * fTemp69); - double fTemp129 = (9.2001373585692901e-18 * fTemp27); - double fTemp130 = (1.9516438542276106e-17 * fTemp39); - double fTemp131 = (9.200137358569287e-18 * fTemp61); - double fTemp132 = (5.0789583458940831e-18 * fTemp6); - double fTemp133 = (8.0305382570733005e-18 * fTemp12); - double fTemp134 = (7.1263957545119048e-18 * fTemp21); - double fTemp135 = (2.4588401362161147e-18 * fTemp33); - double fTemp136 = (fRec1[0] * ((fTemp126 + (fTemp111 + (fTemp112 + (fTemp127 + (fTemp128 + (fTemp87 + ((fTemp121 + fTemp129) + fTemp130))))))) - (fTemp93 + (fTemp131 + (fTemp98 + (fTemp101 + (fTemp103 + (fTemp85 + ((fTemp89 + (fTemp82 + ((fTemp88 + (fTemp80 + (fTemp132 + fTemp133))) + fTemp134))) + fTemp135))))))))); - fRec146[0] = max((fRec146[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp136)))))); - fVbargraph34 = FAUSTFLOAT(fRec146[0]); - output9[i] = FAUSTFLOAT(fTemp136); - double fTemp137 = (0.043716214137085485 * fTemp55); - double fTemp138 = (0.027648561470568499 * fTemp57); - double fTemp139 = (fTemp74 + fTemp77); - double fTemp140 = (0.025396825396825397 * fTemp30); - double fTemp141 = (0.037859351999996446 * fTemp69); - double fTemp142 = (0.025862861065006505 * fTemp66); - double fTemp143 = (0.025239567999997631 * fTemp9); - double fTemp144 = (0.025862861065006511 * fTemp21); - double fTemp145 = (0.050083215095023212 * fTemp42); - double fTemp146 = (fRec1[0] * (((6.133424905712858e-18 * fTemp61) + (fTemp137 + (fTemp138 + ((fTemp139 + (2.6768460856911007e-18 * fTemp15)) + fTemp140)))) - ((0.033388810063348803 * (fTemp27 - fTemp63)) + (fTemp141 + (fTemp142 + (((fTemp143 + fTemp144) + (2.3182167122294292e-18 * fTemp36)) + fTemp145)))))); - fRec147[0] = max((fRec147[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp146)))))); - fVbargraph35 = FAUSTFLOAT(fRec147[0]); - output10[i] = FAUSTFLOAT(fTemp146); - double fTemp147 = (0.025862861065006511 * fTemp66); - double fTemp148 = (fRec1[0] * (((1.8400274717138574e-17 * fTemp61) + ((0.033388810063348796 * fTemp63) + (fTemp98 + (fTemp141 + ((fTemp140 + ((fTemp74 + (0.025862861065006505 * fTemp21)) + (0.033388810063348817 * fTemp27))) + (6.9546501366882881e-18 * fTemp36)))))) - (fTemp137 + (fTemp147 + (fTemp145 + ((fTemp143 + (0.027648561470568499 * fTemp6)) + (8.0305382570733005e-18 * fTemp15))))))); - fRec148[0] = max((fRec148[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp148)))))); - fVbargraph36 = FAUSTFLOAT(fRec148[0]); - output11[i] = FAUSTFLOAT(fTemp148); - double fTemp149 = (fRec1[0] * (((3.0667124528564293e-17 * fTemp61) + (fTemp137 + (fTemp142 + (fTemp140 + ((fTemp144 + (fTemp74 + (1.3384230428455503e-17 * fTemp15))) + (0.033388810063348762 * fTemp27)))))) - ((0.033388810063348852 * fTemp63) + (fTemp138 + (fTemp141 + (fTemp145 + ((fTemp77 + fTemp143) + (1.1591083561147147e-17 * fTemp36)))))))); - fRec149[0] = max((fRec149[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp149)))))); - fVbargraph37 = FAUSTFLOAT(fRec149[0]); - output12[i] = FAUSTFLOAT(fTemp149); - double fTemp150 = (fRec1[0] * (((4.2933974339990009e-17 * fTemp61) + (fTemp141 + (fTemp147 + ((fTemp140 + (fTemp74 + (0.027648561470568496 * fTemp6))) + (1.6227516985606004e-17 * fTemp36))))) - ((0.033388810063348817 * fTemp63) + (fTemp137 + (fTemp98 + (fTemp145 + (((fTemp143 + (1.8737922599837705e-17 * fTemp15)) + (0.025862861065006501 * fTemp21)) + (0.033388810063348796 * fTemp27)))))))); - fRec150[0] = max((fRec150[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp150)))))); - fVbargraph38 = FAUSTFLOAT(fRec150[0]); - output13[i] = FAUSTFLOAT(fTemp150); - double fTemp151 = (fRec1[0] * ((fTemp87 + (fTemp85 + (fTemp83 + (fTemp81 + (fTemp88 + (fTemp80 + (fTemp78 + fTemp139))))))) - (fTemp86 + (fTemp84 + (fTemp89 + (fTemp82 + (fTemp75 + fTemp79))))))); - fRec151[0] = max((fRec151[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp151)))))); - fVbargraph39 = FAUSTFLOAT(fRec151[0]); - output14[i] = FAUSTFLOAT(fTemp151); - double fTemp152 = (fRec1[0] * ((fTemp111 + (fTemp97 + (fTemp98 + (fTemp102 + (fTemp103 + (fTemp87 + (fTemp113 + (fTemp82 + (fTemp106 + (fTemp88 + (fTemp78 + (fTemp74 + fTemp104)))))))))))) - (fTemp108 + (fTemp93 + (fTemp96 + (fTemp112 + (fTemp101 + (fTemp85 + (fTemp107 + (fTemp89 + (fTemp80 + (fTemp75 + fTemp105)))))))))))); - fRec152[0] = max((fRec152[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); - fVbargraph40 = FAUSTFLOAT(fRec152[0]); - output15[i] = FAUSTFLOAT(fTemp152); - double fTemp153 = (fTemp74 + fTemp78); - double fTemp154 = (fRec1[0] * ((fTemp115 + (fTemp122 + (fTemp118 + (fTemp120 + (fTemp87 + (fTemp86 + (fTemp85 + (fTemp84 + (fTemp88 + (fTemp80 + (fTemp79 + fTemp153))))))))))) - (fTemp116 + (fTemp117 + (fTemp123 + (fTemp119 + (fTemp124 + (fTemp89 + (fTemp83 + (fTemp82 + (fTemp81 + (fTemp75 + fTemp77)))))))))))); - fRec153[0] = max((fRec153[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp154)))))); - fVbargraph41 = FAUSTFLOAT(fRec153[0]); - output16[i] = FAUSTFLOAT(fTemp154); - double fTemp155 = (fRec1[0] * ((fTemp93 + (fTemp112 + (fTemp127 + (fTemp101 + (fTemp128 + (fTemp87 + (fTemp135 + (fTemp129 + (fTemp82 + (fTemp88 + (fTemp133 + fTemp153))))))))))) - (fTemp126 + (fTemp111 + (fTemp131 + (fTemp98 + (fTemp103 + (fTemp130 + (fTemp85 + (fTemp89 + (fTemp134 + (fTemp80 + (fTemp75 + fTemp132))))))))))))); - fRec154[0] = max((fRec154[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); - fVbargraph42 = FAUSTFLOAT(fRec154[0]); - output17[i] = FAUSTFLOAT(fTemp155); - double fTemp156 = (fTemp0 + fTemp3); - double fTemp157 = (0.021093750000000001 * fTemp156); - double fTemp158 = (0.027231914153020904 * fTemp92); - double fTemp159 = (0.041597435974919175 * fTemp95); - double fTemp160 = (0.029413829057838591 * fTemp110); - double fTemp161 = (2.5471083409710855e-18 * fTemp61); - double fTemp162 = (0.016982082124440745 * fTemp63); - double fTemp163 = (0.027231914153020897 * fTemp55); - double fTemp164 = (0.021093749999999994 * fTemp57); - double fTemp165 = (0.031444705933590805 * fTemp69); - double fTemp166 = (0.013154264250377145 * fTemp66); - double fTemp167 = (5.236595479505967e-18 * fTemp9); - double fTemp168 = ((0.021093749999999998 * fTemp6) + fTemp167); - double fTemp169 = (0.027231914153020911 * fTemp12); - double fTemp170 = (1.6674738251076273e-18 * fTemp15); - double fTemp171 = (0.013154264250377147 * fTemp21); - double fTemp172 = (2.5471083409710867e-18 * fTemp24); - double fTemp173 = (1.9254329235850881e-18 * fTemp36); - double fTemp174 = (0.01111738239902945 * (fTemp33 + fTemp100)); - double fTemp175 = (0.021480823570105497 * fTemp18); - double fTemp176 = (0.016982082124440741 * fTemp27); - double fTemp177 = (0.024609375000000013 * fTemp30); - double fTemp178 = (0.029413829057838584 * fTemp39); - double fTemp179 = (0.020798717987459581 * fTemp42); - double fTemp180 = (fRec1[0] * ((fTemp157 + (fTemp158 + (fTemp159 + (fTemp160 + (fTemp161 + (fTemp162 + (fTemp163 + (fTemp164 + (fTemp165 + (fTemp166 + (((((fTemp168 + fTemp169) + fTemp170) + fTemp171) + fTemp172) + fTemp173))))))))))) - (fTemp174 + ((((fTemp175 + fTemp176) + fTemp177) + fTemp178) + fTemp179)))); - fRec155[0] = max((fRec155[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp180)))))); - fVbargraph43 = FAUSTFLOAT(fRec155[0]); - output18[i] = FAUSTFLOAT(fTemp180); - double fTemp181 = (0.01111738239902945 * (fTemp33 - fTemp100)); - double fTemp182 = (0.027231914153020911 * fTemp92); - double fTemp183 = (0.02941382905783858 * fTemp110); - double fTemp184 = (7.6413250229132566e-18 * fTemp61); - double fTemp185 = (0.016982082124440741 * fTemp63); - double fTemp186 = (0.021093749999999998 * fTemp57); - double fTemp187 = (0.013154264250377147 * fTemp66); - double fTemp188 = (0.016982082124440748 * fTemp27); - double fTemp189 = (0.029413829057838594 * fTemp39); - double fTemp190 = (0.021093749999999994 * fTemp6); - double fTemp191 = (0.027231914153020904 * fTemp12); - double fTemp192 = (5.0024214753228816e-18 * fTemp15); - double fTemp193 = (0.013154264250377145 * fTemp21); - double fTemp194 = (7.6413250229132581e-18 * fTemp24); - double fTemp195 = (5.7762987707552641e-18 * fTemp36); - double fTemp196 = (fRec1[0] * ((fTemp181 + (fTemp157 + (fTemp182 + (fTemp183 + (fTemp184 + (fTemp185 + (fTemp186 + (fTemp187 + ((fTemp167 + fTemp188) + fTemp189))))))))) - (fTemp159 + (fTemp163 + (fTemp165 + (fTemp179 + ((fTemp177 + (((fTemp175 + ((fTemp190 + fTemp191) + fTemp192)) + fTemp193) + fTemp194)) + fTemp195))))))); - fRec156[0] = max((fRec156[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp196)))))); + fRec139[0] = (fSlow11 * ((fSlow3 * fTemp83) - ((fSlow13 * fRec140[0]) + (fSlow12 * fRec141[0])))); + double fTemp84 = (fRec139[0] + (fSlow4 * fTemp83)); + fRec138[0] = max((fRec138[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph33 = FAUSTFLOAT(fRec138[0]); + double fTemp85 = (0.025396825396825397 * fTemp12); + double fTemp86 = (0.025239567999997631 * fTemp6); + double fTemp87 = (fRec1[0] * (((0.022574955908289243 * ((fTemp0 + (fConst75 * fTemp20)) + (fConst76 * fTemp28))) + ((fConst22 * ((3.5444768026723675e-18 * fTemp18) + (0.015962904407738641 * fTemp80))) + ((fConst77 * fTemp82) + ((fConst18 * ((0.011287477954144623 * fTemp16) + (0.011287477954144622 * fTemp37))) + ((fConst29 * ((1.5998055129555246e-17 * fTemp22) + (0.072048835120117657 * fTemp84))) + ((fConst32 * ((0.025473109945013343 * fTemp25) + (0.025473109945013336 * fTemp39))) + ((fConst78 * fTemp34) + fTemp85))))))) - fTemp86)); + fRec123[0] = max((fRec123[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph34 = FAUSTFLOAT(fRec123[0]); + output10[i] = FAUSTFLOAT(fTemp87); + double fTemp88 = (fConst81 * fTemp39); + double fTemp89 = (fConst36 * fTemp84); + double fTemp90 = (fConst38 * fTemp80); + double fTemp91 = (fConst86 * fTemp28); + double fTemp92 = (fRec1[0] * ((((fConst26 * ((0.10189243978005338 * fTemp20) + (0.1018924397800533 * fTemp34))) + ((fConst79 * fTemp82) + ((fConst80 * fTemp37) + (fTemp88 + fTemp85)))) + (0.022574955908289243 * (((((((fTemp0 + (fConst82 * fTemp25)) + fTemp89) + (fConst83 * fTemp22)) + (fConst84 * fTemp16)) + fTemp90) + (fConst85 * fTemp18)) + fTemp91))) - fTemp86)); + fRec142[0] = max((fRec142[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph35 = FAUSTFLOAT(fRec142[0]); + output11[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = (fRec1[0] * (((0.022574955908289243 * (fTemp91 + (((((fTemp0 + (fConst82 * fTemp39)) + (fConst87 * fTemp25)) + (fConst88 * fTemp34)) + (fConst84 * fTemp37)) + (fConst89 * fTemp16)))) + ((fConst22 * ((7.088953605344735e-18 * fTemp18) + (0.015962904407738645 * fTemp80))) + ((fConst29 * ((3.1996110259110492e-17 * fTemp22) + (0.072048835120117671 * fTemp84))) + ((fConst90 * fTemp82) + (fTemp85 + (fConst91 * fTemp20)))))) - fTemp86)); + fRec143[0] = max((fRec143[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph36 = FAUSTFLOAT(fRec143[0]); + output12[i] = FAUSTFLOAT(fTemp93); + double fTemp94 = (fRec1[0] * ((((fConst92 * fTemp82) + ((fConst93 * fTemp16) + (fTemp85 + (fConst94 * fTemp25)))) + (0.022574955908289243 * (fTemp91 + ((fTemp90 + (((((fTemp89 + (fTemp0 + (fConst87 * fTemp39))) + (fConst95 * fTemp22)) + (fConst96 * fTemp34)) + (fConst89 * fTemp37)) + (fConst97 * fTemp20))) + (fConst98 * fTemp18))))) - fTemp86)); + fRec144[0] = max((fRec144[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph37 = FAUSTFLOAT(fRec144[0]); + output13[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = (fConst110 * fTemp22); + double fTemp96 = (fTemp55 + fTemp59); + double fTemp97 = (fRec1[0] * (((0.031925808815477283 * (((fConst100 * fTemp51) + (fConst102 * fTemp48)) + (fConst103 * fTemp46))) + ((0.015962904407738641 * ((fConst105 * fTemp16) + (fConst106 * fTemp18))) + ((fConst108 * fTemp53) + (fTemp57 + ((fConst109 * fTemp20) + (fTemp95 + ((fConst81 * fTemp25) + (fTemp58 + (fTemp54 + fTemp56))))))))) - fTemp96)); + fRec145[0] = max((fRec145[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + fVbargraph38 = FAUSTFLOAT(fRec145[0]); + output14[i] = FAUSTFLOAT(fTemp97); + double fTemp98 = (fConst111 * fTemp48); + double fTemp99 = (fConst113 * fTemp18); + double fTemp100 = (fTemp56 + fTemp58); + double fTemp101 = (fTemp57 + fTemp100); + double fTemp102 = (fRec1[0] * (((0.022574955908289243 * (((fTemp63 + fTemp98) + (fConst112 * fTemp66)) + fTemp99)) + ((fConst108 * fTemp71) + ((fConst114 * fTemp37) + ((fConst115 * fTemp69) + (fTemp88 + fTemp101))))) - fTemp96)); + fRec146[0] = max((fRec146[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); + fVbargraph39 = FAUSTFLOAT(fRec146[0]); + output15[i] = FAUSTFLOAT(fTemp102); + double fTemp103 = (fRec1[0] * (((0.022574955908289243 * (((fTemp75 + ((fTemp74 + (fConst116 * fTemp51)) + (fConst117 * fTemp16))) + (fConst118 * fTemp53)) + (fConst112 * fTemp46))) + ((fConst119 * fTemp18) + ((fConst120 * fTemp48) + (fTemp57 + (fTemp95 + fTemp100))))) - fTemp96)); + fRec147[0] = max((fRec147[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + fVbargraph40 = FAUSTFLOAT(fRec147[0]); + output16[i] = FAUSTFLOAT(fTemp103); + double fTemp104 = (fRec1[0] * (((0.022574955908289243 * (fTemp99 + ((fTemp98 + ((fTemp62 + (fTemp77 + (fConst116 * fTemp69))) + (fConst117 * fTemp37))) + (fConst118 * fTemp71)))) + ((fConst121 * fTemp66) + ((fConst109 * fTemp34) + fTemp101))) - fTemp96)); + fRec148[0] = max((fRec148[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); + fVbargraph41 = FAUSTFLOAT(fRec148[0]); + output17[i] = FAUSTFLOAT(fTemp104); + double fTemp105 = ((9.9655853669580557e-18 * fTemp22) + (0.044881006545161167 * fTemp84)); + double fTemp106 = (fRec3[0] * double(input10[i])); + fRec153[0] = (fRec153[1] + fRec152[1]); + fRec154[0] = (fRec154[1] + fRec153[1]); + fRec152[0] = (fSlow15 * ((fSlow3 * fTemp106) - ((fSlow17 * fRec153[0]) + (fSlow16 * fRec154[0])))); + fRec155[0] = (fRec155[1] + fRec151[1]); + fRec151[0] = (fSlow14 * (fRec152[0] - (fSlow18 * fRec155[0]))); + double fTemp107 = (fRec151[0] + (fSlow4 * fTemp106)); + fRec150[0] = max((fRec150[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); + fVbargraph42 = FAUSTFLOAT(fRec150[0]); + double fTemp108 = ((0.007031250000000001 * fTemp53) + (0.0070312500000000002 * fTemp71)); + double fTemp109 = ((0.019434045907762623 * fTemp25) + (0.019434045907762619 * fTemp39)); + double fTemp110 = (fConst129 * fTemp69); + double fTemp111 = (5.236595479505967e-18 * fTemp6); + double fTemp112 = (fConst132 * fTemp82); + double fTemp113 = (fTemp0 + fTemp3); + double fTemp114 = (fConst133 * fTemp20); + double fTemp115 = (fConst135 * fTemp28); + double fTemp116 = (0.021480823570105497 * fTemp9); + double fTemp117 = (0.024609375000000006 * fTemp12); + double fTemp118 = (fTemp116 + fTemp117); + double fTemp119 = (fRec1[0] * ((((fConst19 * (((((fConst28 * fTemp105) + (fConst122 * fTemp107)) + (fConst123 * fTemp48)) + (fConst124 * fTemp80)) + (fConst125 * fTemp18))) + ((fConst126 * fTemp108) + ((fConst23 * ((fConst127 * fTemp34) + (fConst128 * fTemp66))) + ((fConst14 * (((((fConst31 * fTemp109) + fTemp110) + (fConst129 * fTemp51)) + (fConst130 * fTemp37)) + (fConst131 * fTemp16))) + (fTemp111 + fTemp112))))) + (0.021093750000000001 * (((fTemp113 + fTemp114) + (fConst134 * fTemp46)) + fTemp115))) - fTemp118)); + fRec149[0] = max((fRec149[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp119)))))); + fVbargraph43 = FAUSTFLOAT(fRec149[0]); + output18[i] = FAUSTFLOAT(fTemp119); + double fTemp120 = (fConst136 * fTemp25); + double fTemp121 = (fConst137 * fTemp84); + double fTemp122 = (fConst139 * fTemp22); + double fTemp123 = (fConst140 * fTemp107); + double fTemp124 = (fConst143 * fTemp80); + double fTemp125 = (fConst146 * fTemp28); + double fTemp126 = (fConst148 * fTemp82); + double fTemp127 = ((0.051824122420700336 * fTemp20) + (0.051824122420700287 * fTemp34)); + double fTemp128 = (fRec1[0] * (((0.021093750000000001 * (((((((((((fTemp113 + fTemp120) + fTemp121) + (fConst138 * fTemp51)) + fTemp122) + fTemp123) + (fConst141 * fTemp16)) + (fConst142 * fTemp48)) + fTemp124) + (fConst144 * fTemp53)) + (fConst145 * fTemp18)) + fTemp125)) + (((fConst14 * ((fTemp110 + (fConst147 * fTemp39)) + (fConst131 * fTemp37))) + ((fTemp111 + fTemp126) + (fConst149 * fTemp71))) + (fConst23 * (((fConst25 * fTemp127) + (fConst150 * fTemp66)) + (fConst128 * fTemp46))))) - fTemp118)); + fRec156[0] = max((fRec156[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp128)))))); fVbargraph44 = FAUSTFLOAT(fRec156[0]); - output19[i] = FAUSTFLOAT(fTemp196); - double fTemp197 = (1.2735541704855428e-17 * fTemp61); - double fTemp198 = (0.01111738239902945 * fTemp100); - double fTemp199 = (8.3373691255381378e-18 * fTemp15); - double fTemp200 = (1.2735541704855431e-17 * fTemp24); - double fTemp201 = (0.016982082124440721 * fTemp27); - double fTemp202 = (0.011117382399029452 * fTemp33); - double fTemp203 = (9.6271646179254396e-18 * fTemp36); - double fTemp204 = (0.029413829057838549 * fTemp39); - double fTemp205 = (0.029413829057838629 * fTemp110); - double fTemp206 = (0.016982082124440766 * fTemp63); - double fTemp207 = (0.013154264250377148 * fTemp21); - double fTemp208 = (fRec1[0] * ((fTemp159 + (fTemp197 + (fTemp163 + (fTemp198 + (fTemp165 + ((((((fTemp167 + fTemp199) + fTemp200) + fTemp201) + fTemp202) + fTemp203) + fTemp204)))))) - ((0.021093750000000001 * (fTemp6 - fTemp156)) + (fTemp158 + (fTemp205 + (fTemp206 + (fTemp164 + (fTemp166 + (fTemp179 + (fTemp177 + ((fTemp169 + fTemp175) + fTemp207))))))))))); - fRec157[0] = max((fRec157[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp208)))))); + output19[i] = FAUSTFLOAT(fTemp128); + double fTemp129 = (fTemp0 + (fConst136 * fTemp39)); + double fTemp130 = (fConst151 * fTemp25); + double fTemp131 = (fConst153 * fTemp34); + double fTemp132 = ((1.9931170733916111e-17 * fTemp22) + (0.044881006545161174 * fTemp84)); + double fTemp133 = (fConst163 * fTemp82); + double fTemp134 = (fRec1[0] * (((0.021093750000000001 * (fTemp125 + ((((((((((fTemp3 + fTemp129) + fTemp130) + (fConst138 * fTemp69)) + (fConst152 * fTemp51)) + fTemp131) + (fConst141 * fTemp37)) + (fConst154 * fTemp16)) + (fConst155 * fTemp66)) + (fConst144 * fTemp71)) + (fConst156 * fTemp53)))) + ((fConst23 * ((fConst157 * fTemp20) + (fConst158 * fTemp46))) + ((fConst19 * (((((fConst28 * fTemp132) + (fConst159 * fTemp107)) + (fConst160 * fTemp48)) + (fConst161 * fTemp80)) + (fConst162 * fTemp18))) + (fTemp111 + fTemp133)))) - fTemp118)); + fRec157[0] = max((fRec157[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp134)))))); fVbargraph45 = FAUSTFLOAT(fRec157[0]); - output20[i] = FAUSTFLOAT(fTemp208); - double fTemp209 = (fTemp0 - fTemp57); - double fTemp210 = (1.7829758386797597e-17 * fTemp61); - double fTemp211 = (fTemp167 + (0.021093749999999991 * fTemp6)); - double fTemp212 = (0.027231914153020901 * fTemp12); - double fTemp213 = (0.011117382399029452 * fTemp100); - double fTemp214 = (0.029413829057838594 * fTemp110); - double fTemp215 = (0.016982082124440748 * fTemp63); - double fTemp216 = (0.013154264250377148 * fTemp66); - double fTemp217 = (1.167231677575339e-17 * fTemp15); - double fTemp218 = (1.7829758386797603e-17 * fTemp24); - double fTemp219 = (0.011117382399029449 * fTemp33); - double fTemp220 = (1.3478030465095617e-17 * fTemp36); - double fTemp221 = (0.02941382905783858 * fTemp39); - double fTemp222 = (fRec1[0] * (((0.021093750000000001 * (fTemp3 + fTemp209)) + (fTemp210 + ((fTemp193 + (fTemp211 + fTemp212)) + fTemp213))) - (fTemp182 + (fTemp159 + (fTemp214 + (fTemp215 + (fTemp163 + (fTemp165 + (fTemp216 + (fTemp179 + ((((fTemp177 + (fTemp176 + ((fTemp175 + fTemp217) + fTemp218))) + fTemp219) + fTemp220) + fTemp221))))))))))); - fRec158[0] = max((fRec158[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp222)))))); + output20[i] = FAUSTFLOAT(fTemp134); + double fTemp135 = (fConst167 * fTemp82); + double fTemp136 = (fTemp0 + (fConst151 * fTemp39)); + double fTemp137 = (fConst169 * fTemp22); + double fTemp138 = (fConst170 * fTemp34); + double fTemp139 = (fConst172 * fTemp20); + double fTemp140 = (fRec1[0] * ((((fConst14 * (((fConst164 * fTemp25) + (fConst165 * fTemp51)) + (fConst166 * fTemp16))) + ((fTemp111 + fTemp135) + (fConst168 * fTemp53))) + (0.021093750000000001 * (fTemp125 + ((((fTemp124 + (((((fTemp123 + ((((fTemp121 + (fTemp3 + fTemp136)) + (fConst152 * fTemp69)) + fTemp137) + fTemp138)) + (fConst154 * fTemp37)) + (fConst171 * fTemp48)) + fTemp139) + (fConst173 * fTemp66))) + (fConst156 * fTemp71)) + (fConst174 * fTemp18)) + (fConst175 * fTemp46))))) - fTemp118)); + fRec158[0] = max((fRec158[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp140)))))); fVbargraph46 = FAUSTFLOAT(fRec158[0]); - output21[i] = FAUSTFLOAT(fTemp222); - double fTemp223 = (fTemp0 - fTemp3); - double fTemp224 = (0.021093750000000001 * fTemp223); - double fTemp225 = (fRec1[0] * ((fTemp224 + (fTemp174 + (fTemp161 + (fTemp162 + (fTemp163 + (fTemp164 + (fTemp165 + (fTemp166 + (fTemp178 + (fTemp173 + (fTemp171 + (fTemp175 + (fTemp168 + fTemp170))))))))))))) - (fTemp158 + (fTemp159 + (fTemp160 + (fTemp179 + (fTemp177 + (fTemp176 + (fTemp169 + fTemp172))))))))); - fRec159[0] = max((fRec159[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp225)))))); + output21[i] = FAUSTFLOAT(fTemp140); + double fTemp141 = (fTemp111 + fTemp116); + double fTemp142 = (fTemp0 - fTemp3); + double fTemp143 = (fRec1[0] * ((((fConst177 * ((3.3119137800360884e-18 * fTemp18) + (0.014915533665653739 * fTemp80))) + ((fConst180 * fTemp108) + (((fConst181 * ((6.6238275600721768e-18 * fTemp48) + (0.029831067331307477 * fTemp107))) + ((fConst182 * ((0.010546875000000002 * fTemp16) + (0.010546875000000001 * fTemp37))) + ((fConst184 * fTemp51) + ((fConst29 * fTemp105) + ((fConst32 * fTemp109) + (fTemp112 + ((fConst185 * fTemp34) + fTemp141))))))) + (fConst187 * fTemp66)))) + (0.021093750000000001 * (fTemp115 + ((fTemp114 + (fTemp142 + (fConst183 * fTemp69))) + (fConst188 * fTemp46))))) - fTemp117)); + fRec159[0] = max((fRec159[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp143)))))); fVbargraph47 = FAUSTFLOAT(fRec159[0]); - output22[i] = FAUSTFLOAT(fTemp225); - double fTemp226 = (fRec1[0] * ((fTemp224 + (fTemp159 + (fTemp184 + (fTemp185 + (fTemp186 + (fTemp187 + (fTemp188 + (fTemp194 + (fTemp175 + (fTemp167 + fTemp191)))))))))) - (fTemp181 + (fTemp182 + (fTemp183 + (fTemp163 + (fTemp165 + (fTemp179 + (fTemp189 + (fTemp195 + (fTemp177 + (fTemp193 + (fTemp190 + fTemp192))))))))))))); - fRec160[0] = max((fRec160[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp226)))))); + output22[i] = FAUSTFLOAT(fTemp143); + double fTemp144 = (fConst190 * fTemp107); + double fTemp145 = (fConst193 * fTemp80); + double fTemp146 = (fRec1[0] * (((0.021093750000000001 * (fTemp125 + (((((((fTemp122 + ((fTemp121 + (fTemp120 + fTemp142)) + (fConst189 * fTemp51))) + fTemp144) + (fConst191 * fTemp16)) + (fConst192 * fTemp48)) + fTemp145) + (fConst194 * fTemp53)) + (fConst195 * fTemp18)))) + ((fConst186 * ((0.021093749999999994 * fTemp66) + (0.021093750000000012 * fTemp46))) + (((fConst196 * fTemp37) + ((fConst184 * fTemp69) + ((fConst26 * fTemp127) + (fTemp126 + ((fConst197 * fTemp39) + fTemp141))))) + (fConst198 * fTemp71)))) - fTemp117)); + fRec160[0] = max((fRec160[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp146)))))); fVbargraph48 = FAUSTFLOAT(fRec160[0]); - output23[i] = FAUSTFLOAT(fTemp226); - double fTemp227 = (fRec1[0] * ((fTemp158 + (fTemp205 + (fTemp197 + (fTemp163 + (fTemp165 + (fTemp203 + (fTemp201 + (fTemp175 + (fTemp199 + (fTemp167 + fTemp169)))))))))) - ((0.021093750000000001 * (fTemp6 - fTemp223)) + (fTemp159 + (fTemp206 + (fTemp164 + (fTemp198 + (fTemp166 + (fTemp179 + (fTemp204 + (fTemp202 + (fTemp177 + (fTemp207 + fTemp200))))))))))))); - fRec161[0] = max((fRec161[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp227)))))); + output23[i] = FAUSTFLOAT(fTemp146); + double fTemp147 = (fRec1[0] * (((0.021093750000000001 * (fTemp125 + ((((((fTemp131 + (((fTemp130 - (fTemp3 - fTemp129)) + (fConst189 * fTemp69)) + (fConst199 * fTemp51))) + (fConst191 * fTemp37)) + (fConst200 * fTemp16)) + (fConst201 * fTemp66)) + (fConst194 * fTemp71)) + (fConst202 * fTemp53)))) + ((fConst177 * ((6.6238275600721768e-18 * fTemp18) + (0.01491553366565374 * fTemp80))) + ((fConst181 * ((1.3247655120144354e-17 * fTemp48) + (0.029831067331307481 * fTemp107))) + (((fConst29 * fTemp132) + (fTemp133 + ((fConst203 * fTemp20) + fTemp141))) + (fConst204 * fTemp46))))) - fTemp117)); + fRec161[0] = max((fRec161[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp147)))))); fVbargraph49 = FAUSTFLOAT(fRec161[0]); - output24[i] = FAUSTFLOAT(fTemp227); - double fTemp228 = (fRec1[0] * ((fTemp182 + (fTemp159 + (fTemp214 + (fTemp210 + (fTemp221 + (fTemp219 + (fTemp218 + (fTemp193 + (fTemp175 + fTemp211))))))))) - ((0.021093750000000001 * (fTemp3 - fTemp209)) + (fTemp215 + (fTemp163 + (fTemp213 + (fTemp165 + (fTemp216 + (fTemp179 + (fTemp220 + (fTemp177 + (fTemp176 + (fTemp212 + fTemp217))))))))))))); - fRec162[0] = max((fRec162[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp228)))))); + output24[i] = FAUSTFLOAT(fTemp147); + double fTemp148 = (fRec1[0] * (((((fConst205 * fTemp16) + ((fConst206 * fTemp51) + (fTemp135 + ((fConst207 * fTemp25) + fTemp141)))) + (fConst208 * fTemp53)) + (0.021093750000000001 * (fTemp125 + ((((fTemp145 + ((fTemp139 + (((fTemp144 + (fTemp138 + (fTemp137 + ((fTemp121 - (fTemp3 - fTemp136)) + (fConst199 * fTemp69))))) + (fConst200 * fTemp37)) + (fConst209 * fTemp48))) + (fConst210 * fTemp66))) + (fConst202 * fTemp71)) + (fConst211 * fTemp18)) + (fConst212 * fTemp46))))) - fTemp117)); + fRec162[0] = max((fRec162[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp148)))))); fVbargraph50 = FAUSTFLOAT(fRec162[0]); - output25[i] = FAUSTFLOAT(fTemp228); - double fTemp229 = (0.021308452520676528 * (fTemp12 + fTemp92)); - double fTemp230 = (0.010535180889746065 * (fTemp6 + fTemp57)); - double fTemp231 = (0.016998264729033836 * fTemp95); - double fTemp232 = (0.0062770252486745223 * fTemp110); - double fTemp233 = (0.0023131708388267431 * fTemp63); - double fTemp234 = (0.0071028175068921654 * fTemp55); - double fTemp235 = (0.035587388102713349 * fTemp100); - double fTemp236 = (0.02907849643359095 * fTemp69); - double fTemp237 = (0.030460165261409405 * fTemp66); - double fTemp238 = (0.02017333553791887 * fTemp0); - double fTemp239 = (0.031605542669238249 * fTemp3); - double fTemp240 = (fTemp238 + fTemp239); - double fTemp241 = (0.032806508796871948 * fTemp9); - double fTemp242 = (fTemp240 + fTemp241); - double fTemp243 = (0.0263335984839893 * fTemp18); - double fTemp244 = (fTemp242 + fTemp243); - double fTemp245 = (0.030460165261409402 * fTemp21); - double fTemp246 = (0.014254712301587407 * fTemp30); - double fTemp247 = (0.035587388102713342 * fTemp33); - double fTemp248 = (4.7584639941967359e-19 * fTemp61); - double fTemp249 = (1.1422201709353029e-18 * fTemp15); - double fTemp250 = (2.7335294515958808e-18 * fTemp24); - double fTemp251 = (0.0023131708388267449 * fTemp27); - double fTemp252 = (4.6761788733398907e-18 * fTemp36); - double fTemp253 = (0.0062770252486745275 * fTemp39); - double fTemp254 = (0.0014795090396723079 * fTemp42); - double fTemp255 = (fRec1[0] * ((fTemp229 + (fTemp230 + (fTemp231 + (fTemp232 + (fTemp233 + (fTemp234 + (fTemp235 + (fTemp236 + (fTemp237 + (((fTemp244 + fTemp245) + fTemp246) + fTemp247)))))))))) - (fTemp248 + (((((fTemp249 + fTemp250) + fTemp251) + fTemp252) + fTemp253) + fTemp254)))); - fRec163[0] = max((fRec163[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp255)))))); + output25[i] = FAUSTFLOAT(fTemp148); + double fTemp149 = ((0.0097062489627452956 * fTemp25) + (0.0097062489627452973 * fTemp39)); + double fTemp150 = (fConst213 * fTemp69); + double fTemp151 = (fConst215 * fTemp37); + double fTemp152 = (fConst217 * fTemp71); + double fTemp153 = (fConst223 * fTemp66); + double fTemp154 = (0.031605542669238249 * fTemp3); + double fTemp155 = (0.032806508796871948 * fTemp6); + double fTemp156 = (0.026333598483989317 * fTemp9); + double fTemp157 = (0.0142547123015874 * fTemp12); + double fTemp158 = (((fTemp154 + fTemp155) + fTemp156) + fTemp157); + double fTemp159 = (fConst224 * fTemp22); + double fTemp160 = (fTemp0 + fTemp159); + double fTemp161 = (fConst225 * fTemp48); + double fTemp162 = (fConst226 * fTemp20); + double fTemp163 = (fConst227 * fTemp82); + double fTemp164 = (fConst228 * fTemp18); + double fTemp165 = (fConst230 * fTemp28); + double fTemp166 = (fRec1[0] * (((fConst14 * (((((((fConst31 * fTemp149) + fTemp150) + (fConst214 * fTemp51)) + fTemp151) + (fConst216 * fTemp16)) + fTemp152) + (fConst218 * fTemp53))) + ((fConst19 * (((fConst219 * fTemp107) + (fConst220 * fTemp84)) + (fConst221 * fTemp80))) + ((fConst23 * ((fConst222 * fTemp34) + fTemp153)) + fTemp158))) + (0.02017333553791887 * ((((((fTemp160 + fTemp161) + fTemp162) + fTemp163) + fTemp164) + (fConst229 * fTemp46)) + fTemp165)))); + fRec163[0] = max((fRec163[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp166)))))); fVbargraph51 = FAUSTFLOAT(fRec163[0]); - output26[i] = FAUSTFLOAT(fTemp255); - double fTemp256 = (0.0062770252486745231 * fTemp110); - double fTemp257 = (5.4356280292327993e-19 * fTemp61); - double fTemp258 = (0.0023131708388267444 * fTemp27); - double fTemp259 = (0.0062770252486745266 * fTemp39); - double fTemp260 = (0.021308452520676528 * (fTemp12 - fTemp92)); - double fTemp261 = (0.010535180889746065 * (fTemp6 - fTemp57)); - double fTemp262 = (1.3047664087114909e-18 * fTemp15); - double fTemp263 = (3.1225305737205953e-18 * fTemp24); - double fTemp264 = (5.3416331372122328e-18 * fTemp36); - double fTemp265 = (fRec1[0] * ((fTemp256 + (fTemp257 + (fTemp233 + (fTemp235 + (fTemp237 + ((fTemp246 + (fTemp244 + fTemp258)) + fTemp259)))))) - (fTemp260 + (fTemp261 + (fTemp231 + (fTemp234 + (fTemp236 + (fTemp254 + ((fTemp247 + ((fTemp245 + fTemp262) + fTemp263)) + fTemp264))))))))); - fRec164[0] = max((fRec164[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp265)))))); + output26[i] = FAUSTFLOAT(fTemp166); + double fTemp167 = (fConst232 * fTemp84); + double fTemp168 = ((fTemp0 + (fConst231 * fTemp25)) + fTemp167); + double fTemp169 = (fConst234 * fTemp107); + double fTemp170 = (fConst236 * fTemp80); + double fTemp171 = ((0.0070590901547238384 * fTemp20) + (0.0070590901547238332 * fTemp34)); + double fTemp172 = (fConst240 * fTemp82); + double fTemp173 = (fRec1[0] * ((0.02017333553791887 * (fTemp165 + (fTemp164 + (((fTemp161 + (((fTemp159 + (fTemp168 + (fConst233 * fTemp51))) + fTemp169) + (fConst235 * fTemp16))) + fTemp170) + (fConst237 * fTemp53))))) + ((fConst23 * ((fTemp153 + (fConst25 * fTemp171)) + (fConst238 * fTemp46))) + ((fConst14 * (fTemp152 + (fTemp151 + (fTemp150 + (fConst239 * fTemp39))))) + (fTemp158 + fTemp172))))); + fRec164[0] = max((fRec164[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp173)))))); fVbargraph52 = FAUSTFLOAT(fRec164[0]); - output27[i] = FAUSTFLOAT(fTemp265); - double fTemp266 = (9.0593800487213328e-19 * fTemp61); - double fTemp267 = (2.1746106811858183e-18 * fTemp15); - double fTemp268 = (5.2042176228676594e-18 * fTemp24); - double fTemp269 = (0.0023131708388267409 * fTemp27); - double fTemp270 = (8.902721895353721e-18 * fTemp36); - double fTemp271 = (0.0062770252486745171 * fTemp39); - double fTemp272 = (0.021308452520676528 * fTemp92); - double fTemp273 = (0.0062770252486745335 * fTemp110); - double fTemp274 = (0.002313170838826747 * fTemp63); - double fTemp275 = (0.010535180889746065 * fTemp57); - double fTemp276 = (0.035587388102713342 * fTemp100); - double fTemp277 = (0.030460165261409402 * fTemp66); - double fTemp278 = (0.010535180889746067 * fTemp6); - double fTemp279 = (0.021308452520676532 * fTemp12); - double fTemp280 = (0.030460165261409412 * fTemp21); - double fTemp281 = (0.035587388102713349 * fTemp33); - double fTemp282 = (fRec1[0] * ((fTemp231 + (fTemp266 + (fTemp234 + (fTemp236 + (((fTemp246 + (((fTemp243 + (fTemp242 + fTemp267)) + fTemp268) + fTemp269)) + fTemp270) + fTemp271))))) - (fTemp272 + (fTemp273 + (fTemp274 + (fTemp275 + (fTemp276 + (fTemp277 + (fTemp254 + (((fTemp278 + fTemp279) + fTemp280) + fTemp281)))))))))); - fRec165[0] = max((fRec165[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp282)))))); + output27[i] = FAUSTFLOAT(fTemp173); + double fTemp174 = ((fTemp0 + (fConst231 * fTemp39)) + (fConst241 * fTemp25)); + double fTemp175 = (fConst243 * fTemp34); + double fTemp176 = ((5.19858676206982e-18 * fTemp22) + (0.011706176702255421 * fTemp84)); + double fTemp177 = (fConst253 * fTemp82); + double fTemp178 = (fRec1[0] * ((0.02017333553791887 * (fTemp165 + ((((((((fTemp174 + (fConst233 * fTemp69)) + (fConst242 * fTemp51)) + fTemp175) + (fConst235 * fTemp37)) + (fConst244 * fTemp16)) + (fConst245 * fTemp66)) + (fConst237 * fTemp71)) + (fConst246 * fTemp53)))) + ((fConst23 * ((fConst247 * fTemp20) + (fConst248 * fTemp46))) + ((fConst19 * (((((fConst28 * fTemp176) + (fConst249 * fTemp107)) + (fConst250 * fTemp48)) + (fConst251 * fTemp80)) + (fConst252 * fTemp18))) + (fTemp158 + fTemp177))))); + fRec165[0] = max((fRec165[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp178)))))); fVbargraph53 = FAUSTFLOAT(fRec165[0]); - output28[i] = FAUSTFLOAT(fTemp282); - double fTemp283 = (1.2683132068209864e-18 * fTemp61); - double fTemp284 = (0.010535180889746063 * fTemp6); - double fTemp285 = (0.021308452520676525 * fTemp12); - double fTemp286 = (0.030460165261409398 * fTemp21); - double fTemp287 = (0.035587388102713335 * fTemp33); - double fTemp288 = (0.021308452520676532 * fTemp92); - double fTemp289 = (0.0062770252486745266 * fTemp110); - double fTemp290 = (0.0023131708388267444 * fTemp63); - double fTemp291 = (0.010535180889746067 * fTemp57); - double fTemp292 = (0.030460165261409412 * fTemp66); - double fTemp293 = (3.0444549536601452e-18 * fTemp15); - double fTemp294 = (7.2859046720147234e-18 * fTemp24); - double fTemp295 = (0.0023131708388267431 * fTemp27); - double fTemp296 = (1.246381065349521e-17 * fTemp36); - double fTemp297 = (0.0062770252486745231 * fTemp39); - double fTemp298 = (fRec1[0] * ((fTemp283 + ((fTemp246 + ((fTemp243 + ((fTemp241 + (fTemp240 + fTemp284)) + fTemp285)) + fTemp286)) + fTemp287)) - (fTemp288 + (fTemp231 + (fTemp289 + (fTemp290 + (fTemp234 + (fTemp291 + (fTemp235 + (fTemp236 + (fTemp292 + (fTemp254 + ((((fTemp293 + fTemp294) + fTemp295) + fTemp296) + fTemp297))))))))))))); - fRec166[0] = max((fRec166[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp298)))))); + output28[i] = FAUSTFLOAT(fTemp178); + double fTemp179 = (fConst254 * fTemp82); + double fTemp180 = (fTemp167 + (fTemp0 + (fConst241 * fTemp39))); + double fTemp181 = (fConst259 * fTemp22); + double fTemp182 = (fConst260 * fTemp34); + double fTemp183 = (fConst262 * fTemp20); + double fTemp184 = (fRec1[0] * (((fTemp158 + fTemp179) + (fConst14 * ((((fConst255 * fTemp25) + (fConst256 * fTemp51)) + (fConst257 * fTemp16)) + (fConst258 * fTemp53)))) + (0.02017333553791887 * (fTemp165 + ((((fTemp170 + (((((fTemp169 + (((fTemp180 + (fConst242 * fTemp69)) + fTemp181) + fTemp182)) + (fConst244 * fTemp37)) + (fConst261 * fTemp48)) + fTemp183) + (fConst263 * fTemp66))) + (fConst246 * fTemp71)) + (fConst264 * fTemp18)) + (fConst265 * fTemp46)))))); + fRec166[0] = max((fRec166[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp184)))))); fVbargraph54 = FAUSTFLOAT(fRec166[0]); - output29[i] = FAUSTFLOAT(fTemp298); - double fTemp299 = (0.0071028175068921914 * fTemp92); - double fTemp300 = (0.016998264729033888 * fTemp95); - double fTemp301 = (0.027200442744256398 * fTemp110); - double fTemp302 = (0.035508216952135616 * fTemp61); - double fTemp303 = (0.030071220904747824 * fTemp63); - double fTemp304 = (0.021308452520676577 * fTemp55); - double fTemp305 = (0.010535180889746094 * fTemp57); - double fTemp306 = (0.010535180889746075 * fTemp3); - double fTemp307 = (fTemp238 + fTemp306); - double fTemp308 = (0.031605542669238242 * fTemp6); - double fTemp309 = (0.021308452520676542 * fTemp12); - double fTemp310 = (0.028411270027568724 * fTemp15); - double fTemp311 = (0.022664352972045144 * fTemp24); - double fTemp312 = (0.020818537549440738 * fTemp27); - double fTemp313 = (0.0042514054232804356 * fTemp30); - double fTemp314 = (0.018831075746023603 * fTemp39); - double fTemp315 = (0.010356563277706152 * fTemp42); - double fTemp316 = (0.010280801007450534 * fTemp100); - double fTemp317 = (0.006710422253905635 * fTemp69); - double fTemp318 = (0.0053753232814252047 * fTemp66); - double fTemp319 = (0.01640325439843596 * fTemp9); - double fTemp320 = (0.020481687709769415 * fTemp18); - double fTemp321 = (fTemp319 + fTemp320); - double fTemp322 = (0.016125969844275591 * fTemp21); - double fTemp323 = (0.030842403022351559 * fTemp33); - double fTemp324 = (0.0089472296718741632 * fTemp36); - double fTemp325 = (fRec1[0] * ((fTemp299 + (fTemp300 + (fTemp301 + (fTemp302 + (fTemp303 + (fTemp304 + (fTemp305 + ((((((((fTemp307 + fTemp308) + fTemp309) + fTemp310) + fTemp311) + fTemp312) + fTemp313) + fTemp314) + fTemp315)))))))) - (fTemp316 + (fTemp317 + (fTemp318 + (((fTemp321 + fTemp322) + fTemp323) + fTemp324)))))); - fRec167[0] = max((fRec167[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp325)))))); + output29[i] = FAUSTFLOAT(fTemp184); + double fTemp185 = (0.20432599334845877 * fTemp82); + double fTemp186 = (fConst34 * ((0.059595081393300019 * fTemp28) + fTemp185)); + double fTemp187 = ((0.063531811392514598 * fTemp20) + (0.091768172011410243 * fTemp34)); + double fTemp188 = ((0.011411761886411192 * fTemp18) + (0.008558821414808411 * fTemp80)); + double fTemp189 = ((0.0090217899191397753 * fTemp53) + (0.0030072633063799288 * fTemp71)); + double fTemp190 = ((0.046824706809021746 * fTemp22) + (0.035118530106766375 * fTemp84)); + double fTemp191 = (fConst272 * fTemp48); + double fTemp192 = ((0.013532684878709662 * fTemp16) + (0.0045108949595698937 * fTemp37)); + double fTemp193 = ((0.029118746888235916 * fTemp25) + (0.0097062489627453199 * fTemp39)); + double fTemp194 = (0.02017333553791887 * fTemp0); + double fTemp195 = (0.010535180889746075 * fTemp3); + double fTemp196 = (0.0042514054232804339 * fTemp12); + double fTemp197 = (0.01640325439843596 * fTemp6); + double fTemp198 = (0.020481687709769415 * fTemp9); + double fTemp199 = (fTemp197 + fTemp198); + double fTemp200 = (fRec1[0] * ((fTemp186 + ((fConst23 * (((fConst25 * fTemp187) + (fConst266 * fTemp66)) + (fConst267 * fTemp46))) + ((fConst268 * fTemp188) + ((fConst270 * fTemp189) + ((fConst19 * (((fConst28 * fTemp190) + (fConst271 * fTemp107)) + fTemp191)) + ((fConst273 * fTemp192) + ((fConst14 * (((fConst31 * fTemp193) + (fConst274 * fTemp69)) + (fConst275 * fTemp51))) + ((fTemp194 + fTemp195) + fTemp196)))))))) - fTemp199)); + fRec167[0] = max((fRec167[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp200)))))); fVbargraph55 = FAUSTFLOAT(fRec167[0]); - output30[i] = FAUSTFLOAT(fTemp325); - double fTemp326 = (0.021308452520676546 * fTemp92); - double fTemp327 = (0.016998264729033867 * fTemp95); - double fTemp328 = (0.021308452520676556 * fTemp55); - double fTemp329 = (0.031605542669238242 * fTemp57); - double fTemp330 = (0.010535180889746081 * fTemp6); - double fTemp331 = (0.0071028175068921827 * fTemp12); - double fTemp332 = (0.0089472296718741701 * fTemp36); - double fTemp333 = (0.010356563277706217 * fTemp42); - double fTemp334 = (0.018831075746023641 * fTemp110); - double fTemp335 = (0.035508216952135595 * fTemp61); - double fTemp336 = (0.020818537549440783 * fTemp63); - double fTemp337 = (0.030842403022351562 * fTemp100); - double fTemp338 = (0.0067104222539056272 * fTemp69); - double fTemp339 = (0.016125969844275591 * fTemp66); - double fTemp340 = (0.028411270027568741 * fTemp15); - double fTemp341 = (0.0053753232814251978 * fTemp21); - double fTemp342 = (0.022664352972045162 * fTemp24); - double fTemp343 = (0.030071220904747797 * fTemp27); - double fTemp344 = (0.010280801007450522 * fTemp33); - double fTemp345 = (0.027200442744256374 * fTemp39); - double fTemp346 = (fRec1[0] * ((fTemp326 + (fTemp327 + (fTemp328 + (fTemp329 + (((fTemp313 + ((fTemp307 + fTemp330) + fTemp331)) + fTemp332) + fTemp333))))) - (fTemp334 + (fTemp335 + (fTemp336 + (fTemp337 + (fTemp338 + (fTemp339 + ((((((fTemp320 + (fTemp319 + fTemp340)) + fTemp341) + fTemp342) + fTemp343) + fTemp344) + fTemp345))))))))); - fRec168[0] = max((fRec168[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp346)))))); + output30[i] = FAUSTFLOAT(fTemp200); + double fTemp201 = ((fTemp0 + (fConst276 * fTemp22)) + (fConst277 * fTemp34)); + double fTemp202 = (fConst279 * fTemp20); + double fTemp203 = (fConst280 * fTemp82); + double fTemp204 = (fConst282 * fTemp18); + double fTemp205 = ((0.0030072633063799254 * fTemp53) + (0.0090217899191397753 * fTemp71)); + double fTemp206 = ((0.0045108949595698885 * fTemp16) + (0.013532684878709664 * fTemp37)); + double fTemp207 = ((0.0097062489627453077 * fTemp25) + (0.029118746888235923 * fTemp39)); + double fTemp208 = (fTemp195 + fTemp196); + double fTemp209 = (fConst289 * fTemp28); + double fTemp210 = (fRec1[0] * (((0.02017333553791887 * ((((((fTemp201 + (fConst278 * fTemp48)) + fTemp202) + fTemp203) + (fConst281 * fTemp66)) + fTemp204) + (fConst283 * fTemp46))) + ((fConst270 * fTemp205) + ((fConst273 * fTemp206) + ((fConst19 * ((fConst284 * fTemp107) + (fConst285 * fTemp84))) + ((fConst14 * (((fConst31 * fTemp207) + (fConst286 * fTemp69)) + (fConst287 * fTemp51))) + ((fConst288 * fTemp80) + (fTemp208 + fTemp209))))))) - fTemp199)); + fRec168[0] = max((fRec168[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp210)))))); fVbargraph56 = FAUSTFLOAT(fRec168[0]); - output31[i] = FAUSTFLOAT(fTemp346); - double fTemp347 = (0.021308452520676553 * fTemp92); - double fTemp348 = (0.0067104222539056254 * fTemp69); - double fTemp349 = (0.0053753232814251969 * fTemp21); - double fTemp350 = (0.03007122090474779 * fTemp27); - double fTemp351 = (0.010280801007450517 * fTemp33); - double fTemp352 = (0.0089472296718741719 * fTemp36); - double fTemp353 = (0.027200442744256363 * fTemp39); - double fTemp354 = (0.010356563277706232 * fTemp42); - double fTemp355 = (0.016998264729033864 * fTemp95); - double fTemp356 = (0.018831075746023648 * fTemp110); - double fTemp357 = (0.02081853754944079 * fTemp63); - double fTemp358 = (0.021308452520676546 * fTemp55); - double fTemp359 = (0.016125969844275594 * fTemp66); - double fTemp360 = (0.010535180889746079 * fTemp6); - double fTemp361 = (0.007102817506892181 * fTemp12); - double fTemp362 = (0.028411270027568745 * fTemp15); - double fTemp363 = (0.030842403022351569 * fTemp100); - double fTemp364 = (fRec1[0] * ((fTemp347 + (fTemp335 + (fTemp329 + (fTemp348 + (((((fTemp313 + ((fTemp307 + fTemp349) + fTemp350)) + fTemp351) + fTemp352) + fTemp353) + fTemp354))))) - (fTemp355 + (fTemp356 + (fTemp357 + (fTemp358 + ((fTemp359 + (fTemp342 + (fTemp320 + (((fTemp319 + fTemp360) + fTemp361) + fTemp362)))) + fTemp363))))))); - fRec169[0] = max((fRec169[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp364)))))); + output31[i] = FAUSTFLOAT(fTemp210); + double fTemp211 = (fConst34 * ((0.059595081393300539 * fTemp28) + (0.20432599334845869 * fTemp82))); + double fTemp212 = ((fTemp0 + (fConst292 * fTemp25)) + (fConst293 * fTemp84)); + double fTemp213 = (fConst295 * fTemp22); + double fTemp214 = (fConst296 * fTemp34); + double fTemp215 = (fRec1[0] * ((fTemp211 + ((fConst23 * ((fConst290 * fTemp20) + (fConst291 * fTemp46))) + ((0.02017333553791887 * (fTemp204 + (((((((((fTemp212 + (fConst294 * fTemp51)) + fTemp213) + fTemp214) + (fConst297 * fTemp107)) + (fConst298 * fTemp16)) + (fConst299 * fTemp48)) + (fConst300 * fTemp66)) + (fConst301 * fTemp80)) + (fConst302 * fTemp53)))) + ((fConst14 * ((fConst303 * fTemp39) + (fConst304 * fTemp69))) + ((fConst305 * fTemp71) + (fTemp208 + (fConst306 * fTemp37))))))) - fTemp199)); + fRec169[0] = max((fRec169[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp215)))))); fVbargraph57 = FAUSTFLOAT(fRec169[0]); - output32[i] = FAUSTFLOAT(fTemp364); - double fTemp365 = (0.0071028175068921931 * fTemp92); - double fTemp366 = (0.027200442744256408 * fTemp110); - double fTemp367 = (0.030071220904747838 * fTemp63); - double fTemp368 = (0.010535180889746096 * fTemp57); - double fTemp369 = (0.0067104222539056367 * fTemp69); - double fTemp370 = (0.028411270027568717 * fTemp15); - double fTemp371 = (0.022664352972045138 * fTemp24); - double fTemp372 = (0.010356563277706145 * fTemp42); - double fTemp373 = (0.021308452520676584 * fTemp55); - double fTemp374 = (0.010280801007450538 * fTemp100); - double fTemp375 = (0.0053753232814252056 * fTemp66); - double fTemp376 = (fTemp308 + fTemp319); - double fTemp377 = (0.020818537549440724 * fTemp27); - double fTemp378 = (0.018831075746023586 * fTemp39); - double fTemp379 = (fRec1[0] * ((fTemp365 + (fTemp366 + (fTemp367 + (fTemp368 + (fTemp369 + ((fTemp323 + (fTemp313 + ((fTemp322 + (fTemp307 + fTemp370)) + fTemp371))) + fTemp372)))))) - (fTemp300 + (fTemp302 + (fTemp373 + (fTemp374 + (fTemp375 + ((fTemp324 + ((fTemp320 + (fTemp309 + fTemp376)) + fTemp377)) + fTemp378)))))))); - fRec170[0] = max((fRec170[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp379)))))); + output32[i] = FAUSTFLOAT(fTemp215); + double fTemp216 = ((fTemp0 + (fConst308 * fTemp25)) + (fConst309 * fTemp84)); + double fTemp217 = (fConst313 * fTemp20); + double fTemp218 = (fConst314 * fTemp82); + double fTemp219 = (fConst325 * fTemp28); + double fTemp220 = (fRec1[0] * (((0.02017333553791887 * ((fConst307 * fTemp46) + (((((((fTemp216 + (fConst310 * fTemp51)) + (fConst311 * fTemp107)) + (fConst312 * fTemp16)) + fTemp217) + fTemp218) + (fConst315 * fTemp80)) + (fConst316 * fTemp53)))) + ((fConst23 * ((fConst317 * fTemp34) + (fConst318 * fTemp66))) + ((fConst19 * (fTemp191 + (fConst319 * fTemp22))) + ((fConst14 * ((fConst320 * fTemp39) + (fConst321 * fTemp69))) + ((fConst322 * fTemp18) + ((fConst323 * fTemp71) + ((fConst324 * fTemp37) + (fTemp219 + fTemp208)))))))) - fTemp199)); + fRec170[0] = max((fRec170[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp220)))))); fVbargraph58 = FAUSTFLOAT(fRec170[0]); - output33[i] = FAUSTFLOAT(fTemp379); - double fTemp380 = (0.016998264729033881 * fTemp95); - double fTemp381 = (0.035508216952135609 * fTemp61); - double fTemp382 = (0.02130845252067657 * fTemp55); - double fTemp383 = (0.010280801007450529 * fTemp100); - double fTemp384 = (0.0053753232814252021 * fTemp66); - double fTemp385 = (0.028411270027568731 * fTemp15); - double fTemp386 = (0.022664352972045151 * fTemp24); - double fTemp387 = (0.030842403022351562 * fTemp33); - double fTemp388 = (0.010356563277706178 * fTemp42); - double fTemp389 = (0.0071028175068921871 * fTemp92); - double fTemp390 = (0.030071220904747821 * fTemp63); - double fTemp391 = (0.010535180889746089 * fTemp57); - double fTemp392 = (0.0067104222539056315 * fTemp69); - double fTemp393 = (0.021308452520676546 * fTemp12); - double fTemp394 = (0.020818537549440744 * fTemp27); - double fTemp395 = (0.0089472296718741667 * fTemp36); - double fTemp396 = (0.01883107574602361 * fTemp39); - double fTemp397 = (fRec1[0] * ((fTemp380 + (fTemp381 + (fTemp382 + (fTemp383 + (fTemp384 + (((fTemp313 + ((fTemp322 + (fTemp307 + fTemp385)) + fTemp386)) + fTemp387) + fTemp388)))))) - (fTemp389 + (fTemp301 + (fTemp390 + (fTemp391 + (fTemp392 + ((((fTemp320 + (fTemp376 + fTemp393)) + fTemp394) + fTemp395) + fTemp396)))))))); - fRec171[0] = max((fRec171[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp397)))))); + output33[i] = FAUSTFLOAT(fTemp220); + double fTemp221 = (fConst34 * (fTemp185 + (0.059595081393300352 * fTemp28))); + double fTemp222 = ((fTemp0 + (fConst326 * fTemp39)) + (fConst327 * fTemp25)); + double fTemp223 = (fConst330 * fTemp34); + double fTemp224 = (fConst333 * fTemp20); + double fTemp225 = ((0.011411761886411199 * fTemp18) + (0.0085588214148084076 * fTemp80)); + double fTemp226 = ((0.046824706809021774 * fTemp22) + (0.035118530106766362 * fTemp84)); + double fTemp227 = (fRec1[0] * ((fTemp221 + ((0.02017333553791887 * ((((((((((fTemp222 + (fConst328 * fTemp69)) + (fConst329 * fTemp51)) + fTemp223) + (fConst331 * fTemp37)) + (fConst332 * fTemp16)) + fTemp224) + (fConst334 * fTemp66)) + (fConst335 * fTemp71)) + (fConst336 * fTemp53)) + (fConst337 * fTemp46))) + ((fConst268 * fTemp225) + (fTemp208 + (fConst19 * (((fConst28 * fTemp226) + (fConst338 * fTemp107)) + (fConst339 * fTemp48))))))) - fTemp199)); + fRec171[0] = max((fRec171[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp227)))))); fVbargraph59 = FAUSTFLOAT(fRec171[0]); - output34[i] = FAUSTFLOAT(fTemp397); - double fTemp398 = (0.016998264729033874 * fTemp95); - double fTemp399 = (0.018831075746023631 * fTemp110); - double fTemp400 = (0.020818537549440772 * fTemp63); - double fTemp401 = (0.021308452520676563 * fTemp55); - double fTemp402 = (0.0053753232814252004 * fTemp21); - double fTemp403 = (0.0300712209047478 * fTemp27); - double fTemp404 = (0.010280801007450525 * fTemp33); - double fTemp405 = (0.0089472296718741684 * fTemp36); - double fTemp406 = (0.027200442744256377 * fTemp39); - double fTemp407 = (0.010356563277706199 * fTemp42); - double fTemp408 = (0.010535180889746086 * fTemp6); - double fTemp409 = (0.0071028175068921853 * fTemp12); - double fTemp410 = (0.028411270027568734 * fTemp15); - double fTemp411 = (0.0067104222539056298 * fTemp69); - double fTemp412 = (fRec1[0] * ((fTemp398 + (fTemp399 + (fTemp400 + (fTemp401 + (fTemp337 + (fTemp339 + (((((fTemp313 + ((fTemp307 + fTemp402) + fTemp403)) + fTemp404) + fTemp405) + fTemp406) + fTemp407))))))) - (fTemp326 + (fTemp381 + (fTemp329 + ((fTemp386 + (fTemp320 + (((fTemp319 + fTemp408) + fTemp409) + fTemp410))) + fTemp411)))))); - fRec172[0] = max((fRec172[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp412)))))); + output34[i] = FAUSTFLOAT(fTemp227); + double fTemp228 = ((0.091768172011410187 * fTemp20) + (0.063531811392514695 * fTemp34)); + double fTemp229 = ((fTemp0 + (fConst327 * fTemp39)) + (fConst342 * fTemp25)); + double fTemp230 = (fConst344 * fTemp22); + double fTemp231 = (fConst347 * fTemp82); + double fTemp232 = (fConst353 * fTemp28); + double fTemp233 = (fRec1[0] * (((fConst23 * (((fConst25 * fTemp228) + (fConst340 * fTemp66)) + (fConst341 * fTemp46))) + ((0.02017333553791887 * ((((((((((fTemp229 + (fConst329 * fTemp69)) + (fConst343 * fTemp51)) + fTemp230) + (fConst332 * fTemp37)) + (fConst345 * fTemp16)) + (fConst346 * fTemp48)) + fTemp231) + (fConst336 * fTemp71)) + (fConst348 * fTemp53)) + (fConst349 * fTemp18))) + ((fConst19 * ((fConst350 * fTemp107) + (fConst351 * fTemp84))) + ((fConst352 * fTemp80) + (fTemp208 + fTemp232))))) - fTemp199)); + fRec172[0] = max((fRec172[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp233)))))); fVbargraph60 = FAUSTFLOAT(fRec172[0]); - output35[i] = FAUSTFLOAT(fTemp412); - double fTemp413 = (0.018831075746023662 * fTemp110); - double fTemp414 = (0.035508216952135588 * fTemp61); - double fTemp415 = (0.020818537549440803 * fTemp63); - double fTemp416 = (0.0067104222539056237 * fTemp69); - double fTemp417 = (0.010535180889746074 * fTemp6); - double fTemp418 = (0.0071028175068921775 * fTemp12); - double fTemp419 = (0.0089472296718741736 * fTemp36); - double fTemp420 = (0.010356563277706251 * fTemp42); - double fTemp421 = (0.016998264729033857 * fTemp95); - double fTemp422 = (0.021308452520676542 * fTemp55); - double fTemp423 = (0.028411270027568748 * fTemp15); - double fTemp424 = (0.0053753232814251943 * fTemp21); - double fTemp425 = (0.022664352972045165 * fTemp24); - double fTemp426 = (0.030071220904747779 * fTemp27); - double fTemp427 = (0.010280801007450515 * fTemp33); - double fTemp428 = (0.027200442744256356 * fTemp39); - double fTemp429 = (fRec1[0] * ((fTemp413 + (fTemp414 + (fTemp415 + (fTemp363 + (fTemp416 + (fTemp359 + (((fTemp313 + ((fTemp307 + fTemp417) + fTemp418)) + fTemp419) + fTemp420))))))) - (fTemp347 + (fTemp421 + (fTemp422 + (fTemp329 + ((((((fTemp320 + (fTemp319 + fTemp423)) + fTemp424) + fTemp425) + fTemp426) + fTemp427) + fTemp428))))))); - fRec173[0] = max((fRec173[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp429)))))); + output35[i] = FAUSTFLOAT(fTemp233); + double fTemp234 = (fConst34 * ((0.059595081393300636 * fTemp28) + (0.20432599334845863 * fTemp82))); + double fTemp235 = ((fTemp0 + (fConst355 * fTemp39)) + (fConst356 * fTemp84)); + double fTemp236 = (fConst358 * fTemp22); + double fTemp237 = (fConst361 * fTemp20); + double fTemp238 = (fRec1[0] * ((fTemp234 + ((0.02017333553791887 * (((((((fConst354 * fTemp48) + ((((fTemp235 + (fConst357 * fTemp69)) + fTemp236) + (fConst359 * fTemp107)) + (fConst360 * fTemp37))) + fTemp237) + (fConst362 * fTemp80)) + (fConst363 * fTemp71)) + (fConst364 * fTemp18)) + (fConst365 * fTemp46))) + ((fConst23 * ((fConst366 * fTemp34) + (fConst367 * fTemp66))) + ((fConst14 * ((fConst368 * fTemp25) + (fConst369 * fTemp51))) + ((fConst370 * fTemp53) + (fTemp208 + (fConst371 * fTemp16))))))) - fTemp199)); + fRec173[0] = max((fRec173[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp238)))))); fVbargraph61 = FAUSTFLOAT(fRec173[0]); - output36[i] = FAUSTFLOAT(fTemp429); - double fTemp430 = (0.010280801007450555 * fTemp100); - double fTemp431 = (0.0067104222539056471 * fTemp69); - double fTemp432 = (0.0053753232814252143 * fTemp66); - double fTemp433 = (0.031605542669238228 * fTemp6); - double fTemp434 = (0.021308452520676539 * fTemp12); - double fTemp435 = (0.028411270027568696 * fTemp15); - double fTemp436 = (0.02266435297204512 * fTemp24); - double fTemp437 = (0.02081853754944071 * fTemp27); - double fTemp438 = (0.018831075746023575 * fTemp39); - double fTemp439 = (0.010356563277706064 * fTemp42); - double fTemp440 = (0.0071028175068922053 * fTemp92); - double fTemp441 = (0.016998264729033919 * fTemp95); - double fTemp442 = (0.027200442744256415 * fTemp110); - double fTemp443 = (0.035508216952135643 * fTemp61); - double fTemp444 = (0.030071220904747842 * fTemp63); - double fTemp445 = (0.021308452520676618 * fTemp55); - double fTemp446 = (0.010535180889746113 * fTemp57); - double fTemp447 = (0.016125969844275587 * fTemp21); - double fTemp448 = (0.030842403022351552 * fTemp33); - double fTemp449 = (0.0089472296718741563 * fTemp36); - double fTemp450 = (fRec1[0] * ((fTemp430 + (fTemp431 + (fTemp432 + (((fTemp313 + (((((fTemp307 + fTemp433) + fTemp434) + fTemp435) + fTemp436) + fTemp437)) + fTemp438) + fTemp439)))) - (fTemp440 + (fTemp441 + (fTemp442 + (fTemp443 + (fTemp444 + (fTemp445 + (fTemp446 + (((fTemp321 + fTemp447) + fTemp448) + fTemp449)))))))))); - fRec174[0] = max((fRec174[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp450)))))); + output36[i] = FAUSTFLOAT(fTemp238); + double fTemp239 = ((fTemp0 + (fConst374 * fTemp39)) + (fConst375 * fTemp84)); + double fTemp240 = (fConst377 * fTemp34); + double fTemp241 = (fConst380 * fTemp82); + double fTemp242 = (fConst391 * fTemp28); + double fTemp243 = (fRec1[0] * (((fConst23 * ((fConst372 * fTemp20) + (fConst373 * fTemp46))) + ((0.02017333553791887 * ((((((((fTemp239 + (fConst376 * fTemp69)) + fTemp240) + (fConst378 * fTemp107)) + (fConst379 * fTemp37)) + fTemp241) + (fConst381 * fTemp66)) + (fConst382 * fTemp80)) + (fConst383 * fTemp71))) + ((fConst19 * ((fConst384 * fTemp22) + (fConst385 * fTemp48))) + ((fConst14 * ((fConst386 * fTemp25) + (fConst387 * fTemp51))) + ((fConst388 * fTemp18) + ((fConst389 * fTemp53) + ((fConst390 * fTemp16) + (fTemp208 + fTemp242)))))))) - fTemp199)); + fRec174[0] = max((fRec174[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp243)))))); fVbargraph62 = FAUSTFLOAT(fRec174[0]); - output37[i] = FAUSTFLOAT(fTemp450); - double fTemp451 = (fTemp306 + fTemp319); - double fTemp452 = (fRec1[0] * ((fTemp302 + (fTemp303 + (fTemp304 + (fTemp305 + (fTemp316 + (fTemp315 + (fTemp323 + (fTemp313 + (fTemp312 + (fTemp320 + (fTemp310 + (fTemp238 + fTemp308)))))))))))) - (fTemp299 + (fTemp300 + (fTemp301 + (fTemp317 + (fTemp318 + (fTemp314 + (fTemp324 + (fTemp311 + (fTemp322 + (fTemp309 + fTemp451)))))))))))); - fRec175[0] = max((fRec175[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp452)))))); + output37[i] = FAUSTFLOAT(fTemp243); + double fTemp244 = (fTemp195 + fTemp197); + double fTemp245 = (fRec1[0] * (((fConst392 * ((0.023456653789763436 * fTemp66) + (0.01623922185445156 * fTemp46))) + ((fConst394 * fTemp188) + ((fConst397 * fTemp189) + ((fConst398 * ((0.022823523772822384 * fTemp48) + (0.017117642829616822 * fTemp107))) + ((fConst399 * fTemp192) + ((fConst400 * ((0.027065369757419324 * fTemp51) + (0.0090217899191397874 * fTemp69))) + (fTemp186 + ((fConst26 * fTemp187) + ((fConst29 * fTemp190) + ((fConst32 * fTemp193) + (fTemp196 + (fTemp194 + fTemp198)))))))))))) - fTemp244)); + fRec175[0] = max((fRec175[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp245)))))); fVbargraph63 = FAUSTFLOAT(fRec175[0]); - output38[i] = FAUSTFLOAT(fTemp452); - double fTemp453 = (fRec1[0] * ((fTemp334 + (fTemp328 + (fTemp329 + (fTemp337 + (fTemp333 + (fTemp345 + (fTemp332 + (fTemp344 + (fTemp313 + (fTemp342 + (fTemp320 + (fTemp238 + fTemp330)))))))))))) - (fTemp326 + (fTemp327 + (fTemp335 + (fTemp336 + (fTemp338 + (fTemp339 + (fTemp343 + (fTemp341 + (fTemp340 + (fTemp331 + fTemp451)))))))))))); - fRec176[0] = max((fRec176[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp453)))))); + output38[i] = FAUSTFLOAT(fTemp245); + double fTemp246 = (fConst401 * fTemp48); + double fTemp247 = (fConst403 * fTemp18); + double fTemp248 = (fTemp198 + fTemp196); + double fTemp249 = (fRec1[0] * (((0.02017333553791887 * ((((fTemp203 + (fTemp202 + (fTemp201 + fTemp246))) + (fConst402 * fTemp66)) + fTemp247) + (fConst404 * fTemp46))) + ((fConst397 * fTemp205) + ((fConst399 * fTemp206) + ((fConst400 * ((0.009021789919139777 * fTemp51) + (0.027065369757419327 * fTemp69))) + ((fConst405 * fTemp80) + ((fConst406 * fTemp107) + ((fConst32 * fTemp207) + ((fConst407 * fTemp84) + (fTemp209 + fTemp248))))))))) - fTemp244)); + fRec176[0] = max((fRec176[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp249)))))); fVbargraph64 = FAUSTFLOAT(fRec176[0]); - output39[i] = FAUSTFLOAT(fTemp453); - double fTemp454 = (fRec1[0] * ((fTemp355 + (fTemp356 + (fTemp335 + (fTemp329 + (fTemp363 + (fTemp348 + (fTemp354 + (fTemp352 + (fTemp313 + (fTemp350 + (fTemp342 + (fTemp349 + (fTemp320 + (fTemp238 + fTemp361)))))))))))))) - (fTemp347 + (fTemp357 + (fTemp358 + (fTemp359 + (fTemp353 + (fTemp351 + (fTemp362 + (fTemp319 + (fTemp306 + fTemp360))))))))))); - fRec177[0] = max((fRec177[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp454)))))); + output39[i] = FAUSTFLOAT(fTemp249); + double fTemp250 = (fRec1[0] * (((0.02017333553791887 * (fTemp247 + ((((fTemp246 + (((fTemp214 + (fTemp213 + (fTemp212 + (fConst408 * fTemp51)))) + (fConst409 * fTemp107)) + (fConst410 * fTemp16))) + (fConst411 * fTemp66)) + (fConst412 * fTemp80)) + (fConst413 * fTemp53)))) + ((fConst414 * fTemp46) + ((fConst415 * fTemp71) + ((fConst416 * fTemp37) + ((fConst417 * fTemp69) + (fTemp211 + ((fConst418 * fTemp39) + ((fConst419 * fTemp20) + fTemp248)))))))) - fTemp244)); + fRec177[0] = max((fRec177[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp250)))))); fVbargraph65 = FAUSTFLOAT(fRec177[0]); - output40[i] = FAUSTFLOAT(fTemp454); - double fTemp455 = (fTemp319 + (fTemp306 + fTemp308)); - double fTemp456 = (fRec1[0] * ((fTemp300 + (fTemp367 + (fTemp368 + (fTemp374 + (fTemp369 + (fTemp372 + (fTemp378 + (fTemp313 + (fTemp322 + (fTemp320 + (fTemp370 + (fTemp238 + fTemp309)))))))))))) - (fTemp365 + (fTemp366 + (fTemp302 + (fTemp373 + (fTemp375 + (fTemp324 + (fTemp323 + (fTemp377 + (fTemp371 + fTemp455))))))))))); - fRec178[0] = max((fRec178[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp456)))))); + output40[i] = FAUSTFLOAT(fTemp250); + double fTemp251 = (fRec1[0] * (((0.02017333553791887 * ((((fTemp218 + (fTemp217 + (((fTemp216 + (fConst420 * fTemp51)) + (fConst421 * fTemp107)) + (fConst422 * fTemp16)))) + (fConst423 * fTemp80)) + (fConst424 * fTemp53)) + (fConst425 * fTemp46))) + ((fConst426 * fTemp18) + ((fConst427 * fTemp71) + ((fConst428 * fTemp66) + ((fConst429 * fTemp48) + ((fConst430 * fTemp37) + ((fConst431 * fTemp69) + ((fConst432 * fTemp34) + ((fConst433 * fTemp39) + (fTemp219 + ((fConst434 * fTemp22) + fTemp248))))))))))) - fTemp244)); + fRec178[0] = max((fRec178[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp251)))))); fVbargraph66 = FAUSTFLOAT(fRec178[0]); - output41[i] = FAUSTFLOAT(fTemp456); - double fTemp457 = (fRec1[0] * ((fTemp389 + (fTemp301 + (fTemp381 + (fTemp382 + (fTemp384 + (fTemp388 + (fTemp396 + (fTemp313 + (fTemp322 + (fTemp320 + (fTemp385 + (fTemp238 + fTemp393)))))))))))) - (fTemp380 + (fTemp390 + (fTemp391 + (fTemp383 + (fTemp392 + (fTemp395 + (fTemp387 + (fTemp394 + (fTemp386 + fTemp455))))))))))); - fRec179[0] = max((fRec179[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp457)))))); + output41[i] = FAUSTFLOAT(fTemp251); + double fTemp252 = (fRec1[0] * (((0.02017333553791887 * (((((fTemp224 + (((fConst435 * fTemp37) + (fTemp223 + ((fTemp222 + (fConst436 * fTemp69)) + (fConst437 * fTemp51)))) + (fConst438 * fTemp16))) + (fConst439 * fTemp66)) + (fConst440 * fTemp71)) + (fConst441 * fTemp53)) + (fConst442 * fTemp46))) + ((fConst394 * fTemp225) + ((fConst398 * ((0.022823523772822398 * fTemp48) + (0.017117642829616815 * fTemp107))) + (fTemp221 + ((fConst29 * fTemp226) + fTemp248))))) - fTemp244)); + fRec179[0] = max((fRec179[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp252)))))); fVbargraph67 = FAUSTFLOAT(fRec179[0]); - output42[i] = FAUSTFLOAT(fTemp457); - double fTemp458 = (fRec1[0] * ((fTemp326 + (fTemp400 + (fTemp401 + (fTemp339 + (fTemp407 + (fTemp405 + (fTemp313 + (fTemp403 + (fTemp386 + (fTemp402 + (fTemp320 + (fTemp238 + fTemp409)))))))))))) - (fTemp398 + (fTemp399 + (fTemp381 + (fTemp329 + (fTemp337 + (fTemp411 + (fTemp406 + (fTemp404 + (fTemp410 + (fTemp319 + (fTemp306 + fTemp408))))))))))))); - fRec180[0] = max((fRec180[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp458)))))); + output42[i] = FAUSTFLOAT(fTemp252); + double fTemp253 = (fRec1[0] * (((fConst392 * ((0.016239221854451587 * fTemp66) + (0.023456653789763426 * fTemp46))) + ((0.02017333553791887 * ((((fTemp231 + ((((fTemp230 + ((fTemp229 + (fConst437 * fTemp69)) + (fConst443 * fTemp51))) + (fConst438 * fTemp37)) + (fConst444 * fTemp16)) + (fConst445 * fTemp48))) + (fConst441 * fTemp71)) + (fConst446 * fTemp53)) + (fConst447 * fTemp18))) + ((fConst448 * fTemp80) + ((fConst449 * fTemp107) + ((fConst26 * fTemp228) + ((fConst450 * fTemp84) + (fTemp232 + fTemp248))))))) - fTemp244)); + fRec180[0] = max((fRec180[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp253)))))); fVbargraph68 = FAUSTFLOAT(fRec180[0]); - output43[i] = FAUSTFLOAT(fTemp458); - double fTemp459 = (fRec1[0] * ((fTemp347 + (fTemp421 + (fTemp414 + (fTemp415 + (fTemp416 + (fTemp359 + (fTemp420 + (fTemp428 + (fTemp419 + (fTemp427 + (fTemp313 + (fTemp425 + (fTemp320 + (fTemp238 + fTemp417)))))))))))))) - (fTemp413 + (fTemp422 + (fTemp329 + (fTemp363 + (fTemp426 + (fTemp424 + (fTemp423 + (fTemp418 + fTemp451)))))))))); - fRec181[0] = max((fRec181[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp459)))))); + output43[i] = FAUSTFLOAT(fTemp253); + double fTemp254 = (fRec1[0] * (((0.02017333553791887 * (((((fTemp237 + ((((fTemp236 + (fTemp235 + (fConst451 * fTemp69))) + (fConst452 * fTemp107)) + (fConst453 * fTemp37)) + (fConst454 * fTemp48))) + (fConst455 * fTemp80)) + (fConst456 * fTemp71)) + (fConst457 * fTemp18)) + (fConst458 * fTemp46))) + ((fConst459 * fTemp53) + ((fConst460 * fTemp66) + ((fConst461 * fTemp16) + ((fConst462 * fTemp51) + (fTemp234 + ((fConst463 * fTemp34) + ((fConst464 * fTemp25) + fTemp248)))))))) - fTemp244)); + fRec181[0] = max((fRec181[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp254)))))); fVbargraph69 = FAUSTFLOAT(fRec181[0]); - output44[i] = FAUSTFLOAT(fTemp459); - double fTemp460 = (fRec1[0] * ((fTemp440 + (fTemp441 + (fTemp442 + (fTemp431 + (fTemp432 + (fTemp439 + (fTemp448 + (fTemp313 + (fTemp437 + (fTemp320 + (fTemp435 + (fTemp238 + fTemp433)))))))))))) - (fTemp443 + (fTemp444 + (fTemp445 + (fTemp446 + (fTemp430 + (fTemp438 + (fTemp449 + (fTemp436 + (fTemp447 + (fTemp434 + fTemp451)))))))))))); - fRec182[0] = max((fRec182[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp460)))))); + output44[i] = FAUSTFLOAT(fTemp254); + double fTemp255 = (fRec1[0] * (((0.02017333553791887 * ((((fTemp241 + (((fTemp240 + (fTemp239 + (fConst465 * fTemp69))) + (fConst466 * fTemp107)) + (fConst467 * fTemp37))) + (fConst468 * fTemp66)) + (fConst469 * fTemp80)) + (fConst470 * fTemp71))) + ((fConst471 * fTemp46) + ((fConst472 * fTemp18) + ((fConst473 * fTemp53) + ((fConst474 * fTemp48) + ((fConst475 * fTemp16) + ((fConst476 * fTemp51) + (fTemp242 + ((fConst477 * fTemp20) + ((fConst478 * fTemp22) + ((fConst479 * fTemp25) + fTemp248))))))))))) - fTemp244)); + fRec182[0] = max((fRec182[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp255)))))); fVbargraph70 = FAUSTFLOAT(fRec182[0]); - output45[i] = FAUSTFLOAT(fTemp460); - double fTemp461 = (fTemp238 + fTemp241); - double fTemp462 = (fRec1[0] * ((fTemp230 + (fTemp233 + (fTemp234 + (fTemp236 + (fTemp237 + (fTemp253 + (fTemp246 + (fTemp250 + (fTemp245 + fTemp461))))))))) - (fTemp229 + (fTemp231 + (fTemp232 + (fTemp248 + (fTemp235 + (fTemp254 + (fTemp252 + (fTemp247 + (fTemp251 + (fTemp243 + (fTemp239 + fTemp249))))))))))))); - fRec183[0] = max((fRec183[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp462)))))); + output45[i] = FAUSTFLOAT(fTemp255); + double fTemp256 = (fTemp155 + fTemp157); + double fTemp257 = (fConst494 * fTemp48); + double fTemp258 = (fConst495 * fTemp18); + double fTemp259 = (fTemp154 + fTemp156); + double fTemp260 = (fRec1[0] * ((((fConst482 * ((0.0067244451793062893 * fTemp53) + (0.0067244451793062911 * fTemp71))) + ((fConst485 * fTemp80) + ((fConst487 * fTemp66) + ((fConst488 * ((0.010086667768959435 * fTemp16) + (0.010086667768959437 * fTemp37))) + ((fConst490 * fTemp107) + ((fConst491 * ((0.02017333553791887 * fTemp51) + (0.020173335537918873 * fTemp69))) + ((fConst32 * fTemp149) + ((fConst492 * fTemp84) + ((fConst493 * fTemp34) + fTemp256))))))))) + (0.02017333553791887 * (fTemp165 + (((fTemp163 + (fTemp162 + (fTemp160 + fTemp257))) + fTemp258) + (fConst496 * fTemp46))))) - fTemp259)); + fRec183[0] = max((fRec183[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp260)))))); fVbargraph71 = FAUSTFLOAT(fRec183[0]); - output46[i] = FAUSTFLOAT(fTemp462); - double fTemp463 = (fRec1[0] * ((fTemp260 + (fTemp231 + (fTemp257 + (fTemp233 + (fTemp237 + (fTemp247 + (fTemp246 + (fTemp258 + (fTemp263 + fTemp461))))))))) - (fTemp261 + (fTemp256 + (fTemp234 + (fTemp235 + (fTemp236 + (fTemp254 + (fTemp259 + (fTemp264 + (fTemp245 + (fTemp243 + (fTemp239 + fTemp262))))))))))))); - fRec184[0] = max((fRec184[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp463)))))); + output46[i] = FAUSTFLOAT(fTemp260); + double fTemp261 = (fConst498 * fTemp107); + double fTemp262 = (fConst500 * fTemp80); + double fTemp263 = (fRec1[0] * (((0.02017333553791887 * (fTemp165 + (fTemp258 + (((fTemp257 + (((fTemp159 + (fTemp168 + (fConst497 * fTemp51))) + fTemp261) + (fConst499 * fTemp16))) + fTemp262) + (fConst501 * fTemp53))))) + ((fConst486 * ((0.020173335537918863 * fTemp66) + (0.02017333553791888 * fTemp46))) + ((fConst502 * fTemp71) + ((fConst503 * fTemp37) + ((fConst504 * fTemp69) + ((fConst26 * fTemp171) + (fTemp172 + ((fConst505 * fTemp39) + fTemp256)))))))) - fTemp259)); + fRec184[0] = max((fRec184[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp263)))))); fVbargraph72 = FAUSTFLOAT(fRec184[0]); - output47[i] = FAUSTFLOAT(fTemp463); - double fTemp464 = (fRec1[0] * ((fTemp272 + (fTemp273 + (fTemp266 + (fTemp234 + (fTemp276 + (fTemp236 + (fTemp270 + (fTemp281 + (fTemp246 + (fTemp269 + (fTemp267 + (fTemp279 + fTemp461)))))))))))) - (fTemp231 + (fTemp274 + (fTemp275 + (fTemp277 + (fTemp254 + (fTemp271 + (fTemp268 + (fTemp280 + (fTemp243 + (fTemp239 + fTemp278)))))))))))); - fRec185[0] = max((fRec185[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp464)))))); + output47[i] = FAUSTFLOAT(fTemp263); + double fTemp264 = (fRec1[0] * (((0.02017333553791887 * (fTemp165 + ((((((fTemp175 + ((fTemp174 + (fConst497 * fTemp69)) + (fConst506 * fTemp51))) + (fConst499 * fTemp37)) + (fConst507 * fTemp16)) + (fConst508 * fTemp66)) + (fConst501 * fTemp71)) + (fConst509 * fTemp53)))) + ((fConst484 * ((6.3348003989167635e-18 * fTemp18) + (0.014264702358014004 * fTemp80))) + ((fConst489 * ((1.2669600797833527e-17 * fTemp48) + (0.028529404716028009 * fTemp107))) + (((fConst29 * fTemp176) + (fTemp177 + ((fConst510 * fTemp20) + fTemp256))) + (fConst511 * fTemp46))))) - fTemp259)); + fRec185[0] = max((fRec185[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp264)))))); fVbargraph73 = FAUSTFLOAT(fRec185[0]); - output48[i] = FAUSTFLOAT(fTemp464); - double fTemp465 = (fRec1[0] * ((fTemp288 + (fTemp231 + (fTemp289 + (fTemp283 + (fTemp235 + (fTemp297 + (fTemp246 + (fTemp294 + (fTemp286 + (fTemp241 + (fTemp238 + fTemp284))))))))))) - (fTemp290 + (fTemp234 + (fTemp291 + (fTemp236 + (fTemp292 + (fTemp254 + (fTemp296 + (fTemp287 + (fTemp295 + (fTemp243 + (fTemp293 + (fTemp239 + fTemp285)))))))))))))); - fRec186[0] = max((fRec186[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp465)))))); + output48[i] = FAUSTFLOAT(fTemp264); + double fTemp265 = (fRec1[0] * (((((fConst512 * fTemp16) + ((fConst513 * fTemp51) + (fTemp179 + ((fConst514 * fTemp25) + fTemp256)))) + (fConst515 * fTemp53)) + (0.02017333553791887 * (fTemp165 + ((((fTemp262 + ((fTemp183 + (((fTemp261 + (fTemp182 + (fTemp181 + (fTemp180 + (fConst506 * fTemp69))))) + (fConst507 * fTemp37)) + (fConst516 * fTemp48))) + (fConst517 * fTemp66))) + (fConst509 * fTemp71)) + (fConst518 * fTemp18)) + (fConst519 * fTemp46))))) - fTemp259)); + fRec186[0] = max((fRec186[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp265)))))); fVbargraph74 = FAUSTFLOAT(fRec186[0]); - output49[i] = FAUSTFLOAT(fTemp465); + output49[i] = FAUSTFLOAT(fTemp265); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; @@ -3349,129 +4178,129 @@ class mydsp : public dsp { fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec12[1] = fRec12[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; fRec13[1] = fRec13[0]; - fRec11[1] = fRec11[0]; - fRec10[1] = fRec10[0]; fRec16[1] = fRec16[0]; - fRec17[1] = fRec17[0]; - fRec15[1] = fRec15[0]; - fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec11[1] = fRec11[0]; fRec20[1] = fRec20[0]; fRec21[1] = fRec21[0]; fRec19[1] = fRec19[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; fRec18[1] = fRec18[0]; - fRec25[1] = fRec25[0]; - fRec26[1] = fRec26[0]; - fRec24[1] = fRec24[0]; + fRec17[1] = fRec17[0]; + fRec0[1] = fRec0[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; fRec27[1] = fRec27[0]; - fRec23[1] = fRec23[0]; - fRec22[1] = fRec22[0]; - fRec31[1] = fRec31[0]; - fRec32[1] = fRec32[0]; fRec30[1] = fRec30[0]; + fRec26[1] = fRec26[0]; + fRec25[1] = fRec25[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; fRec33[1] = fRec33[0]; - fRec29[1] = fRec29[0]; - fRec28[1] = fRec28[0]; - fRec37[1] = fRec37[0]; - fRec38[1] = fRec38[0]; fRec36[1] = fRec36[0]; - fRec39[1] = fRec39[0]; - fRec35[1] = fRec35[0]; - fRec34[1] = fRec34[0]; - fRec43[1] = fRec43[0]; - fRec44[1] = fRec44[0]; - fRec42[1] = fRec42[0]; - fRec45[1] = fRec45[0]; + fRec37[1] = fRec37[0]; + fRec32[1] = fRec32[0]; + fRec31[1] = fRec31[0]; fRec41[1] = fRec41[0]; + fRec42[1] = fRec42[0]; fRec40[1] = fRec40[0]; - fRec49[1] = fRec49[0]; + fRec43[1] = fRec43[0]; + fRec39[1] = fRec39[0]; + fRec38[1] = fRec38[0]; + fRec46[1] = fRec46[0]; + fRec47[1] = fRec47[0]; + fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; fRec50[1] = fRec50[0]; + fRec49[1] = fRec49[0]; fRec48[1] = fRec48[0]; - fRec51[1] = fRec51[0]; - fRec52[1] = fRec52[0]; - fRec47[1] = fRec47[0]; - fRec46[1] = fRec46[0]; - fRec56[1] = fRec56[0]; - fRec57[1] = fRec57[0]; - fRec55[1] = fRec55[0]; - fRec58[1] = fRec58[0]; - fRec59[1] = fRec59[0]; fRec54[1] = fRec54[0]; + fRec55[1] = fRec55[0]; fRec53[1] = fRec53[0]; - fRec63[1] = fRec63[0]; - fRec64[1] = fRec64[0]; + fRec56[1] = fRec56[0]; + fRec57[1] = fRec57[0]; + fRec52[1] = fRec52[0]; + fRec51[1] = fRec51[0]; + fRec24[1] = fRec24[0]; fRec62[1] = fRec62[0]; - fRec65[1] = fRec65[0]; - fRec66[1] = fRec66[0]; + fRec63[1] = fRec63[0]; fRec61[1] = fRec61[0]; + fRec64[1] = fRec64[0]; fRec60[1] = fRec60[0]; - fRec70[1] = fRec70[0]; - fRec71[1] = fRec71[0]; - fRec69[1] = fRec69[0]; - fRec72[1] = fRec72[0]; - fRec73[1] = fRec73[0]; + fRec59[1] = fRec59[0]; fRec68[1] = fRec68[0]; + fRec69[1] = fRec69[0]; fRec67[1] = fRec67[0]; - fRec77[1] = fRec77[0]; - fRec78[1] = fRec78[0]; - fRec76[1] = fRec76[0]; - fRec79[1] = fRec79[0]; - fRec80[1] = fRec80[0]; - fRec75[1] = fRec75[0]; + fRec70[1] = fRec70[0]; + fRec66[1] = fRec66[0]; + fRec65[1] = fRec65[0]; + fRec73[1] = fRec73[0]; + fRec72[1] = fRec72[0]; + fRec71[1] = fRec71[0]; + fRec58[1] = fRec58[0]; fRec74[1] = fRec74[0]; - fRec0[1] = fRec0[0]; + fRec75[1] = fRec75[0]; + fRec76[1] = fRec76[0]; fRec81[1] = fRec81[0]; - fRec85[1] = fRec85[0]; - fRec86[1] = fRec86[0]; - fRec84[1] = fRec84[0]; + fRec82[1] = fRec82[0]; + fRec80[1] = fRec80[0]; fRec83[1] = fRec83[0]; - fRec89[1] = fRec89[0]; + fRec84[1] = fRec84[0]; + fRec79[1] = fRec79[0]; + fRec78[1] = fRec78[0]; fRec88[1] = fRec88[0]; + fRec89[1] = fRec89[0]; fRec87[1] = fRec87[0]; + fRec90[1] = fRec90[0]; + fRec86[1] = fRec86[0]; + fRec85[1] = fRec85[0]; fRec93[1] = fRec93[0]; fRec94[1] = fRec94[0]; fRec92[1] = fRec92[0]; - fRec95[1] = fRec95[0]; - fRec96[1] = fRec96[0]; fRec91[1] = fRec91[0]; - fRec90[1] = fRec90[0]; - fRec100[1] = fRec100[0]; - fRec101[1] = fRec101[0]; - fRec99[1] = fRec99[0]; - fRec102[1] = fRec102[0]; fRec98[1] = fRec98[0]; + fRec99[1] = fRec99[0]; fRec97[1] = fRec97[0]; + fRec100[1] = fRec100[0]; + fRec101[1] = fRec101[0]; + fRec96[1] = fRec96[0]; + fRec95[1] = fRec95[0]; + fRec77[1] = fRec77[0]; fRec106[1] = fRec106[0]; fRec107[1] = fRec107[0]; fRec105[1] = fRec105[0]; fRec108[1] = fRec108[0]; + fRec109[1] = fRec109[0]; fRec104[1] = fRec104[0]; fRec103[1] = fRec103[0]; fRec112[1] = fRec112[0]; fRec113[1] = fRec113[0]; fRec111[1] = fRec111[0]; - fRec114[1] = fRec114[0]; - fRec115[1] = fRec115[0]; fRec110[1] = fRec110[0]; - fRec109[1] = fRec109[0]; - fRec82[1] = fRec82[0]; - fRec116[1] = fRec116[0]; fRec117[1] = fRec117[0]; fRec118[1] = fRec118[0]; + fRec116[1] = fRec116[0]; fRec119[1] = fRec119[0]; - fRec123[1] = fRec123[0]; - fRec124[1] = fRec124[0]; - fRec122[1] = fRec122[0]; + fRec120[1] = fRec120[0]; + fRec115[1] = fRec115[0]; + fRec114[1] = fRec114[0]; + fRec102[1] = fRec102[0]; fRec121[1] = fRec121[0]; + fRec122[1] = fRec122[0]; + fRec127[1] = fRec127[0]; fRec128[1] = fRec128[0]; + fRec126[1] = fRec126[0]; fRec129[1] = fRec129[0]; - fRec127[1] = fRec127[0]; fRec130[1] = fRec130[0]; - fRec126[1] = fRec126[0]; fRec125[1] = fRec125[0]; + fRec124[1] = fRec124[0]; fRec134[1] = fRec134[0]; fRec135[1] = fRec135[0]; fRec133[1] = fRec133[0]; @@ -3479,25 +4308,25 @@ class mydsp : public dsp { fRec137[1] = fRec137[0]; fRec132[1] = fRec132[0]; fRec131[1] = fRec131[0]; + fRec140[1] = fRec140[0]; fRec141[1] = fRec141[0]; + fRec139[1] = fRec139[0]; + fRec138[1] = fRec138[0]; + fRec123[1] = fRec123[0]; fRec142[1] = fRec142[0]; - fRec140[1] = fRec140[0]; fRec143[1] = fRec143[0]; fRec144[1] = fRec144[0]; - fRec139[1] = fRec139[0]; - fRec138[1] = fRec138[0]; - fRec120[1] = fRec120[0]; fRec145[1] = fRec145[0]; fRec146[1] = fRec146[0]; fRec147[1] = fRec147[0]; fRec148[1] = fRec148[0]; - fRec149[1] = fRec149[0]; - fRec150[1] = fRec150[0]; - fRec151[1] = fRec151[0]; - fRec152[1] = fRec152[0]; fRec153[1] = fRec153[0]; fRec154[1] = fRec154[0]; + fRec152[1] = fRec152[0]; fRec155[1] = fRec155[0]; + fRec151[1] = fRec151[0]; + fRec150[1] = fRec150[0]; + fRec149[1] = fRec149[0]; fRec156[1] = fRec156[0]; fRec157[1] = fRec157[0]; fRec158[1] = fRec158[0]; @@ -3537,7 +4366,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -3769,7 +4597,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -3832,7 +4660,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -3861,11 +4689,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecLebedev505.cpp b/source/HOAUGens/HOADecLebedev505.cpp index d5522afb80..8026aff74a 100644 --- a/source/HOAUGens/HOADecLebedev505.cpp +++ b/source/HOAUGens/HOADecLebedev505.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOADecLebedev505" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,12 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); @@ -614,6 +627,10 @@ double mydsp_faustpower2_f(double value) { #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -636,384 +653,1184 @@ class mydsp : public dsp { double fRec5[2]; double fRec4[2]; FAUSTFLOAT fVbargraph1; + double fConst4; + double fConst5; double fRec9[2]; + double fRec10[2]; double fRec8[2]; double fRec7[2]; FAUSTFLOAT fVbargraph2; - double fConst4; - double fConst5; - double fRec12[2]; + double fConst6; + double fConst7; + double fConst8; + double fRec14[2]; + double fRec15[2]; double fRec13[2]; + double fConst9; + double fRec16[2]; + double fRec12[2]; double fRec11[2]; - double fRec10[2]; FAUSTFLOAT fVbargraph3; - double fRec16[2]; - double fRec17[2]; - double fRec15[2]; - double fRec14[2]; - FAUSTFLOAT fVbargraph4; + double fConst10; + double fConst11; + double fConst12; double fRec20[2]; double fRec21[2]; double fRec19[2]; + double fConst13; + double fRec22[2]; + double fRec23[2]; double fRec18[2]; - FAUSTFLOAT fVbargraph5; - double fConst6; - double fConst7; - double fConst8; - double fRec25[2]; - double fRec26[2]; - double fRec24[2]; - double fConst9; + double fRec17[2]; + FAUSTFLOAT fVbargraph4; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fRec28[2]; + double fRec29[2]; double fRec27[2]; - double fRec23[2]; - double fRec22[2]; - FAUSTFLOAT fVbargraph6; + double fConst18; + double fRec30[2]; double fRec31[2]; + double fRec26[2]; + double fConst19; double fRec32[2]; - double fRec30[2]; - double fRec33[2]; - double fRec29[2]; - double fRec28[2]; - FAUSTFLOAT fVbargraph7; + double fRec25[2]; + double fRec24[2]; + FAUSTFLOAT fVbargraph5; + double fRec0[2]; + FAUSTFLOAT fVbargraph6; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; double fRec37[2]; double fRec38[2]; double fRec36[2]; double fRec39[2]; double fRec35[2]; double fRec34[2]; - FAUSTFLOAT fVbargraph8; + FAUSTFLOAT fVbargraph7; + double fConst26; + double fConst27; + double fConst28; + double fConst29; double fRec43[2]; double fRec44[2]; double fRec42[2]; double fRec45[2]; + double fRec46[2]; double fRec41[2]; double fRec40[2]; - FAUSTFLOAT fVbargraph9; - double fConst10; - double fConst11; - double fConst12; - double fRec49[2]; - double fRec50[2]; - double fRec48[2]; - double fConst13; + FAUSTFLOAT fVbargraph8; + double fConst30; + double fConst31; + double fConst32; + double fConst33; double fRec51[2]; double fRec52[2]; - double fRec47[2]; - double fRec46[2]; - FAUSTFLOAT fVbargraph10; - double fRec56[2]; - double fRec57[2]; + double fRec50[2]; + double fRec53[2]; + double fRec54[2]; + double fRec49[2]; double fRec55[2]; - double fRec58[2]; + double fRec48[2]; + double fRec47[2]; + FAUSTFLOAT fVbargraph9; + double fConst34; + double fConst35; + double fConst36; + double fRec60[2]; + double fRec61[2]; double fRec59[2]; - double fRec54[2]; - double fRec53[2]; - FAUSTFLOAT fVbargraph11; + double fRec62[2]; double fRec63[2]; + double fRec58[2]; double fRec64[2]; - double fRec62[2]; - double fRec65[2]; - double fRec66[2]; - double fRec61[2]; - double fRec60[2]; - FAUSTFLOAT fVbargraph12; - double fRec70[2]; - double fRec71[2]; - double fRec69[2]; - double fRec72[2]; - double fRec73[2]; + double fRec57[2]; + double fRec56[2]; + FAUSTFLOAT fVbargraph10; + double fConst37; + double fConst38; + double fConst39; + double fConst40; double fRec68[2]; + double fRec69[2]; double fRec67[2]; - FAUSTFLOAT fVbargraph13; + double fRec70[2]; + double fRec66[2]; + double fRec65[2]; + FAUSTFLOAT fVbargraph11; + double fConst41; + double fConst42; + double fConst43; + double fRec73[2]; + double fRec74[2]; + double fRec72[2]; + double fRec71[2]; + FAUSTFLOAT fVbargraph12; + double fConst44; + double fConst45; + double fConst46; double fRec77[2]; - double fRec78[2]; double fRec76[2]; - double fRec79[2]; - double fRec80[2]; double fRec75[2]; - double fRec74[2]; - FAUSTFLOAT fVbargraph14; - double fConst14; - double fConst15; - double fConst16; - double fConst17; - double fRec85[2]; - double fRec86[2]; - double fRec84[2]; - double fConst18; - double fRec87[2]; - double fRec88[2]; + FAUSTFLOAT fVbargraph13; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fRec81[2]; + double fRec82[2]; + double fRec80[2]; double fRec83[2]; - double fConst19; + double fRec84[2]; + double fRec79[2]; + double fRec78[2]; + FAUSTFLOAT fVbargraph14; + double fConst51; + double fConst52; double fRec89[2]; - double fRec82[2]; - double fRec81[2]; - FAUSTFLOAT fVbargraph15; - double fRec94[2]; - double fRec95[2]; - double fRec93[2]; - double fRec96[2]; - double fRec97[2]; - double fRec92[2]; - double fRec98[2]; - double fRec91[2]; double fRec90[2]; + double fRec88[2]; + double fRec91[2]; + double fRec92[2]; + double fRec87[2]; + double fRec93[2]; + double fRec86[2]; + double fRec85[2]; + FAUSTFLOAT fVbargraph15; + double fRec33[2]; FAUSTFLOAT fVbargraph16; - double fRec103[2]; - double fRec104[2]; - double fRec102[2]; + double fConst53; + double fConst54; + double fRec98[2]; + double fRec99[2]; + double fRec97[2]; + double fRec100[2]; + double fRec96[2]; + double fRec95[2]; + FAUSTFLOAT fVbargraph17; + double fConst55; + double fConst56; double fRec105[2]; double fRec106[2]; - double fRec101[2]; + double fRec104[2]; double fRec107[2]; - double fRec100[2]; - double fRec99[2]; - FAUSTFLOAT fVbargraph17; - double fRec112[2]; + double fRec108[2]; + double fRec103[2]; + double fRec109[2]; + double fRec102[2]; + double fRec101[2]; + FAUSTFLOAT fVbargraph18; + double fConst57; double fRec113[2]; - double fRec111[2]; double fRec114[2]; + double fRec112[2]; double fRec115[2]; + double fRec111[2]; double fRec110[2]; + FAUSTFLOAT fVbargraph19; + double fRec118[2]; + double fRec117[2]; double fRec116[2]; - double fRec109[2]; - double fRec108[2]; - FAUSTFLOAT fVbargraph18; - double fRec121[2]; - double fRec122[2]; - double fRec120[2]; + FAUSTFLOAT fVbargraph20; double fRec123[2]; double fRec124[2]; - double fRec119[2]; + double fRec122[2]; double fRec125[2]; - double fRec118[2]; - double fRec117[2]; - FAUSTFLOAT fVbargraph19; - double fRec130[2]; - double fRec131[2]; - double fRec129[2]; + double fRec126[2]; + double fRec121[2]; + double fRec127[2]; + double fRec120[2]; + double fRec119[2]; + FAUSTFLOAT fVbargraph21; double fRec132[2]; double fRec133[2]; - double fRec128[2]; + double fRec131[2]; double fRec134[2]; - double fRec127[2]; - double fRec126[2]; - FAUSTFLOAT fVbargraph20; - double fRec0[2]; - FAUSTFLOAT fVbargraph21; double fRec135[2]; + double fRec130[2]; + double fRec136[2]; + double fRec129[2]; + double fRec128[2]; FAUSTFLOAT fVbargraph22; - double fRec141[2]; - double fRec142[2]; - double fRec140[2]; - double fRec143[2]; - double fRec144[2]; - double fRec139[2]; - double fRec145[2]; - double fRec138[2]; - double fRec137[2]; + double fRec94[2]; FAUSTFLOAT fVbargraph23; - double fRec150[2]; - double fRec151[2]; - double fRec149[2]; - double fRec152[2]; - double fRec153[2]; - double fRec148[2]; - double fRec154[2]; - double fRec147[2]; - double fRec146[2]; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fRec137[2]; FAUSTFLOAT fVbargraph24; - double fRec157[2]; - double fRec158[2]; - double fRec156[2]; - double fRec155[2]; + double fConst63; + double fRec138[2]; FAUSTFLOAT fVbargraph25; - double fRec161[2]; + double fRec139[2]; + FAUSTFLOAT fVbargraph26; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fRec145[2]; + double fRec146[2]; + double fRec144[2]; + double fRec147[2]; + double fRec148[2]; + double fRec143[2]; + double fRec149[2]; + double fRec142[2]; + double fRec141[2]; + FAUSTFLOAT fVbargraph27; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fRec153[2]; + double fRec154[2]; + double fRec152[2]; + double fRec155[2]; + double fRec156[2]; + double fRec151[2]; + double fRec150[2]; + FAUSTFLOAT fVbargraph28; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; double fRec160[2]; + double fRec161[2]; double fRec159[2]; - FAUSTFLOAT fVbargraph26; - double fRec166[2]; + double fRec162[2]; + double fRec158[2]; + double fRec157[2]; + FAUSTFLOAT fVbargraph29; + double fConst77; + double fConst78; + double fConst79; + double fConst80; double fRec167[2]; - double fRec165[2]; double fRec168[2]; + double fRec166[2]; double fRec169[2]; - double fRec164[2]; double fRec170[2]; + double fRec165[2]; + double fRec171[2]; + double fRec164[2]; double fRec163[2]; - double fRec162[2]; - FAUSTFLOAT fVbargraph27; + FAUSTFLOAT fVbargraph30; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; double fRec174[2]; double fRec175[2]; double fRec173[2]; - double fRec176[2]; - double fRec177[2]; double fRec172[2]; - double fRec171[2]; - FAUSTFLOAT fVbargraph28; - double fRec181[2]; - double fRec182[2]; - double fRec180[2]; - double fRec183[2]; + FAUSTFLOAT fVbargraph31; + double fConst86; + double fConst87; + double fConst88; double fRec179[2]; + double fRec180[2]; double fRec178[2]; - FAUSTFLOAT fVbargraph29; + double fRec181[2]; + double fRec182[2]; + double fRec177[2]; + double fRec176[2]; + FAUSTFLOAT fVbargraph32; + double fConst89; + double fRec140[2]; + FAUSTFLOAT fVbargraph33; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; double fRec187[2]; double fRec188[2]; double fRec186[2]; double fRec189[2]; + double fRec190[2]; double fRec185[2]; double fRec184[2]; - FAUSTFLOAT fVbargraph30; + FAUSTFLOAT fVbargraph34; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; double fRec193[2]; double fRec194[2]; double fRec192[2]; - double fRec195[2]; - double fRec196[2]; double fRec191[2]; - double fRec190[2]; - FAUSTFLOAT fVbargraph31; - double fRec136[2]; - FAUSTFLOAT fVbargraph32; - double fRec197[2]; - FAUSTFLOAT fVbargraph33; + FAUSTFLOAT fVbargraph35; double fRec198[2]; - FAUSTFLOAT fVbargraph34; double fRec199[2]; - FAUSTFLOAT fVbargraph35; + double fRec197[2]; double fRec200[2]; + double fRec201[2]; + double fRec196[2]; + double fRec195[2]; FAUSTFLOAT fVbargraph36; - double fRec204[2]; - double fRec205[2]; - double fRec203[2]; - double fRec202[2]; + double fRec183[2]; FAUSTFLOAT fVbargraph37; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fRec202[2]; + FAUSTFLOAT fVbargraph38; + double fRec203[2]; + FAUSTFLOAT fVbargraph39; + double fRec208[2]; double fRec209[2]; + double fRec207[2]; double fRec210[2]; - double fRec208[2]; double fRec211[2]; - double fRec207[2]; double fRec206[2]; - FAUSTFLOAT fVbargraph38; + double fRec205[2]; + FAUSTFLOAT fVbargraph40; + double fConst111; + double fRec215[2]; double fRec216[2]; + double fRec214[2]; double fRec217[2]; - double fRec215[2]; double fRec218[2]; - double fRec219[2]; - double fRec214[2]; - double fRec220[2]; double fRec213[2]; double fRec212[2]; - FAUSTFLOAT fVbargraph39; + FAUSTFLOAT fVbargraph41; + double fRec221[2]; + double fRec222[2]; + double fRec220[2]; + double fRec219[2]; + FAUSTFLOAT fVbargraph42; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fRec204[2]; + FAUSTFLOAT fVbargraph43; + double fConst119; + double fConst120; + double fConst121; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fRec223[2]; + FAUSTFLOAT fVbargraph44; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fConst136; + double fConst137; + double fConst138; double fRec224[2]; + FAUSTFLOAT fVbargraph45; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; double fRec225[2]; - double fRec223[2]; + FAUSTFLOAT fVbargraph46; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fConst157; + double fConst158; + double fConst159; + double fConst160; + double fConst161; + double fConst162; + double fConst163; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; double fRec226[2]; + FAUSTFLOAT fVbargraph47; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; + double fConst176; + double fConst177; double fRec227[2]; - double fRec222[2]; - double fRec221[2]; - FAUSTFLOAT fVbargraph40; - double fRec232[2]; - double fRec233[2]; - double fRec231[2]; + FAUSTFLOAT fVbargraph48; + double fConst178; + double fConst179; + double fConst180; + double fConst181; + double fConst182; + double fConst183; + double fRec228[2]; + FAUSTFLOAT fVbargraph49; + double fConst184; + double fRec229[2]; + FAUSTFLOAT fVbargraph50; + double fConst185; double fRec234[2]; double fRec235[2]; - double fRec230[2]; + double fRec233[2]; double fRec236[2]; - double fRec229[2]; - double fRec228[2]; - FAUSTFLOAT fVbargraph41; - double fRec240[2]; + double fRec232[2]; + double fRec231[2]; + FAUSTFLOAT fVbargraph51; + double fConst186; + double fConst187; + double fConst188; + double fConst189; double fRec241[2]; - double fRec239[2]; double fRec242[2]; + double fRec240[2]; double fRec243[2]; - double fRec238[2]; - double fRec237[2]; - FAUSTFLOAT fVbargraph42; - double fRec201[2]; - FAUSTFLOAT fVbargraph43; double fRec244[2]; - FAUSTFLOAT fVbargraph44; + double fRec239[2]; double fRec245[2]; - FAUSTFLOAT fVbargraph45; - double fRec246[2]; - FAUSTFLOAT fVbargraph46; - double fRec247[2]; - FAUSTFLOAT fVbargraph47; - double fRec248[2]; - FAUSTFLOAT fVbargraph48; - double fRec249[2]; - FAUSTFLOAT fVbargraph49; + double fRec238[2]; + double fRec237[2]; + FAUSTFLOAT fVbargraph52; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + double fConst196; + double fConst197; double fRec250[2]; - FAUSTFLOAT fVbargraph50; double fRec251[2]; - FAUSTFLOAT fVbargraph51; + double fRec249[2]; double fRec252[2]; - FAUSTFLOAT fVbargraph52; double fRec253[2]; - FAUSTFLOAT fVbargraph53; + double fRec248[2]; double fRec254[2]; + double fRec247[2]; + double fRec246[2]; + FAUSTFLOAT fVbargraph53; + double fConst198; + double fConst199; + double fConst200; + double fConst201; + double fConst202; + double fConst203; + double fConst204; + double fConst205; + double fConst206; + double fConst207; + double fConst208; + double fConst209; + double fRec230[2]; FAUSTFLOAT fVbargraph54; + double fConst210; + double fConst211; + double fConst212; + double fConst213; + double fConst214; + double fConst215; + double fConst216; + double fConst217; + double fConst218; + double fConst219; + double fConst220; + double fConst221; + double fConst222; + double fConst223; + double fConst224; + double fConst225; + double fConst226; + double fConst227; + double fConst228; + double fConst229; + double fConst230; + double fConst231; + double fConst232; + double fConst233; double fRec255[2]; FAUSTFLOAT fVbargraph55; + double fConst234; + double fConst235; + double fConst236; + double fConst237; + double fConst238; + double fConst239; + double fConst240; + double fConst241; + double fConst242; + double fConst243; + double fConst244; + double fConst245; + double fConst246; + double fConst247; + double fConst248; + double fConst249; + double fConst250; + double fConst251; + double fConst252; double fRec256[2]; FAUSTFLOAT fVbargraph56; + double fConst253; + double fConst254; + double fConst255; + double fConst256; + double fConst257; + double fConst258; + double fConst259; + double fConst260; + double fConst261; + double fConst262; + double fConst263; + double fConst264; + double fConst265; + double fConst266; + double fConst267; + double fConst268; + double fConst269; + double fConst270; + double fConst271; double fRec257[2]; FAUSTFLOAT fVbargraph57; + double fConst272; + double fConst273; + double fConst274; + double fConst275; + double fConst276; + double fConst277; + double fConst278; + double fConst279; + double fConst280; + double fConst281; + double fConst282; + double fConst283; + double fConst284; + double fConst285; + double fConst286; + double fConst287; + double fConst288; + double fConst289; + double fConst290; + double fConst291; + double fConst292; + double fConst293; + double fConst294; + double fConst295; + double fConst296; double fRec258[2]; FAUSTFLOAT fVbargraph58; + double fConst297; + double fConst298; + double fConst299; + double fConst300; + double fConst301; + double fConst302; + double fConst303; + double fConst304; + double fConst305; + double fConst306; + double fConst307; + double fConst308; + double fConst309; + double fConst310; + double fConst311; + double fConst312; double fRec259[2]; FAUSTFLOAT fVbargraph59; + double fConst313; + double fConst314; + double fConst315; + double fConst316; + double fConst317; + double fConst318; + double fConst319; + double fConst320; + double fConst321; + double fConst322; + double fConst323; double fRec260[2]; FAUSTFLOAT fVbargraph60; + double fConst324; + double fConst325; + double fConst326; + double fConst327; + double fConst328; + double fConst329; + double fConst330; + double fConst331; + double fConst332; + double fConst333; + double fConst334; + double fConst335; + double fConst336; double fRec261[2]; FAUSTFLOAT fVbargraph61; + double fConst337; + double fConst338; + double fConst339; + double fConst340; + double fConst341; + double fConst342; + double fConst343; + double fConst344; + double fConst345; + double fConst346; + double fConst347; + double fConst348; + double fConst349; + double fConst350; + double fConst351; + double fConst352; + double fConst353; + double fConst354; + double fConst355; + double fConst356; + double fConst357; + double fConst358; + double fConst359; + double fConst360; + double fConst361; + double fConst362; + double fConst363; + double fConst364; double fRec262[2]; FAUSTFLOAT fVbargraph62; + double fConst365; + double fConst366; + double fConst367; + double fConst368; + double fConst369; + double fConst370; + double fConst371; + double fConst372; + double fConst373; + double fConst374; + double fConst375; + double fConst376; + double fConst377; + double fConst378; + double fConst379; + double fConst380; double fRec263[2]; FAUSTFLOAT fVbargraph63; + double fConst381; + double fConst382; + double fConst383; + double fConst384; + double fConst385; + double fConst386; + double fConst387; + double fConst388; + double fConst389; + double fConst390; + double fConst391; + double fConst392; + double fConst393; + double fConst394; + double fConst395; + double fConst396; + double fConst397; + double fConst398; + double fConst399; double fRec264[2]; FAUSTFLOAT fVbargraph64; + double fConst400; + double fConst401; + double fConst402; + double fConst403; + double fConst404; + double fConst405; + double fConst406; + double fConst407; + double fConst408; + double fConst409; + double fConst410; + double fConst411; + double fConst412; + double fConst413; + double fConst414; + double fConst415; + double fConst416; + double fConst417; double fRec265[2]; FAUSTFLOAT fVbargraph65; + double fConst418; + double fConst419; + double fConst420; + double fConst421; + double fConst422; + double fConst423; + double fConst424; + double fConst425; + double fConst426; + double fConst427; + double fConst428; + double fConst429; + double fConst430; + double fConst431; + double fConst432; + double fConst433; + double fConst434; + double fConst435; + double fConst436; double fRec266[2]; FAUSTFLOAT fVbargraph66; + double fConst437; + double fConst438; + double fConst439; + double fConst440; + double fConst441; + double fConst442; + double fConst443; + double fConst444; + double fConst445; + double fConst446; + double fConst447; + double fConst448; + double fConst449; + double fConst450; + double fConst451; + double fConst452; + double fConst453; + double fConst454; + double fConst455; + double fConst456; + double fConst457; + double fConst458; double fRec267[2]; FAUSTFLOAT fVbargraph67; + double fConst459; + double fConst460; + double fConst461; + double fConst462; + double fConst463; + double fConst464; + double fConst465; + double fConst466; + double fConst467; + double fConst468; + double fConst469; + double fConst470; + double fConst471; + double fConst472; + double fConst473; + double fConst474; + double fConst475; + double fConst476; + double fConst477; + double fConst478; + double fConst479; + double fConst480; + double fConst481; + double fConst482; + double fConst483; + double fConst484; + double fConst485; double fRec268[2]; FAUSTFLOAT fVbargraph68; + double fConst486; + double fConst487; + double fConst488; + double fConst489; + double fConst490; + double fConst491; + double fConst492; + double fConst493; + double fConst494; + double fConst495; + double fConst496; + double fConst497; + double fConst498; + double fConst499; + double fConst500; + double fConst501; + double fConst502; + double fConst503; + double fConst504; + double fConst505; + double fConst506; + double fConst507; + double fConst508; + double fConst509; + double fConst510; + double fConst511; double fRec269[2]; FAUSTFLOAT fVbargraph69; + double fConst512; + double fConst513; + double fConst514; + double fConst515; + double fConst516; + double fConst517; + double fConst518; + double fConst519; + double fConst520; + double fConst521; + double fConst522; + double fConst523; + double fConst524; + double fConst525; + double fConst526; + double fConst527; + double fConst528; + double fConst529; + double fConst530; + double fConst531; + double fConst532; double fRec270[2]; FAUSTFLOAT fVbargraph70; + double fConst533; + double fConst534; + double fConst535; + double fConst536; + double fConst537; + double fConst538; + double fConst539; + double fConst540; + double fConst541; + double fConst542; + double fConst543; + double fConst544; + double fConst545; + double fConst546; + double fConst547; + double fConst548; + double fConst549; + double fConst550; + double fConst551; + double fConst552; double fRec271[2]; FAUSTFLOAT fVbargraph71; + double fConst553; + double fConst554; + double fConst555; + double fConst556; + double fConst557; + double fConst558; + double fConst559; + double fConst560; + double fConst561; + double fConst562; + double fConst563; + double fConst564; + double fConst565; + double fConst566; + double fConst567; + double fConst568; + double fConst569; + double fConst570; + double fConst571; + double fConst572; + double fConst573; + double fConst574; + double fConst575; + double fConst576; + double fConst577; + double fConst578; double fRec272[2]; FAUSTFLOAT fVbargraph72; + double fConst579; + double fConst580; + double fConst581; + double fConst582; + double fConst583; + double fConst584; + double fConst585; + double fConst586; + double fConst587; + double fConst588; + double fConst589; + double fConst590; + double fConst591; + double fConst592; + double fConst593; + double fConst594; + double fConst595; + double fConst596; + double fConst597; + double fConst598; + double fConst599; + double fConst600; + double fConst601; + double fConst602; + double fConst603; + double fConst604; + double fConst605; + double fConst606; + double fConst607; + double fConst608; double fRec273[2]; FAUSTFLOAT fVbargraph73; + double fConst609; + double fConst610; + double fConst611; + double fConst612; + double fConst613; + double fConst614; + double fConst615; + double fConst616; + double fConst617; + double fConst618; + double fConst619; + double fConst620; + double fConst621; + double fConst622; + double fConst623; + double fConst624; double fRec274[2]; FAUSTFLOAT fVbargraph74; + double fConst625; + double fConst626; + double fConst627; + double fConst628; + double fConst629; + double fConst630; + double fConst631; + double fConst632; + double fConst633; + double fConst634; + double fConst635; + double fConst636; + double fConst637; + double fConst638; double fRec275[2]; FAUSTFLOAT fVbargraph75; + double fConst639; + double fConst640; + double fConst641; + double fConst642; + double fConst643; + double fConst644; + double fConst645; + double fConst646; + double fConst647; + double fConst648; + double fConst649; + double fConst650; + double fConst651; + double fConst652; + double fConst653; + double fConst654; + double fConst655; + double fConst656; double fRec276[2]; FAUSTFLOAT fVbargraph76; + double fConst657; + double fConst658; + double fConst659; + double fConst660; + double fConst661; + double fConst662; + double fConst663; + double fConst664; + double fConst665; + double fConst666; + double fConst667; + double fConst668; + double fConst669; + double fConst670; + double fConst671; + double fConst672; + double fConst673; + double fConst674; + double fConst675; + double fConst676; + double fConst677; + double fConst678; + double fConst679; + double fConst680; double fRec277[2]; FAUSTFLOAT fVbargraph77; + double fConst681; + double fConst682; + double fConst683; + double fConst684; + double fConst685; + double fConst686; + double fConst687; + double fConst688; + double fConst689; + double fConst690; + double fConst691; + double fConst692; double fRec278[2]; FAUSTFLOAT fVbargraph78; + double fConst693; + double fConst694; + double fConst695; + double fConst696; + double fConst697; + double fConst698; + double fConst699; + double fConst700; + double fConst701; + double fConst702; + double fConst703; + double fConst704; + double fConst705; + double fConst706; double fRec279[2]; FAUSTFLOAT fVbargraph79; + double fConst707; + double fConst708; + double fConst709; + double fConst710; + double fConst711; + double fConst712; + double fConst713; + double fConst714; + double fConst715; + double fConst716; + double fConst717; + double fConst718; + double fConst719; + double fConst720; + double fConst721; + double fConst722; + double fConst723; + double fConst724; + double fConst725; + double fConst726; double fRec280[2]; FAUSTFLOAT fVbargraph80; + double fConst727; + double fConst728; + double fConst729; + double fConst730; + double fConst731; + double fConst732; + double fConst733; + double fConst734; + double fConst735; + double fConst736; + double fConst737; + double fConst738; + double fConst739; + double fConst740; + double fConst741; + double fConst742; + double fConst743; + double fConst744; + double fConst745; + double fConst746; + double fConst747; + double fConst748; + double fConst749; + double fConst750; double fRec281[2]; FAUSTFLOAT fVbargraph81; + double fConst751; + double fConst752; + double fConst753; + double fConst754; + double fConst755; + double fConst756; + double fConst757; + double fConst758; + double fConst759; + double fConst760; + double fConst761; + double fConst762; + double fConst763; + double fConst764; + double fConst765; + double fConst766; + double fConst767; + double fConst768; + double fConst769; + double fConst770; + double fConst771; + double fConst772; + double fConst773; + double fConst774; + double fConst775; + double fConst776; + double fConst777; + double fConst778; + double fConst779; + double fConst780; double fRec282[2]; FAUSTFLOAT fVbargraph82; + double fConst781; + double fConst782; + double fConst783; + double fConst784; + double fConst785; + double fConst786; + double fConst787; + double fConst788; + double fConst789; + double fConst790; + double fConst791; + double fConst792; + double fConst793; + double fConst794; double fRec283[2]; FAUSTFLOAT fVbargraph83; + double fConst795; + double fConst796; + double fConst797; + double fConst798; + double fConst799; + double fConst800; + double fConst801; + double fConst802; + double fConst803; + double fConst804; + double fConst805; double fRec284[2]; FAUSTFLOAT fVbargraph84; + double fConst806; + double fConst807; + double fConst808; + double fConst809; + double fConst810; + double fConst811; + double fConst812; + double fConst813; + double fConst814; + double fConst815; + double fConst816; + double fConst817; + double fConst818; + double fConst819; double fRec285[2]; FAUSTFLOAT fVbargraph85; @@ -1024,36 +1841,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOADecLebedev505"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1439,7 +2256,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (170.0 / fConst0); fConst3 = (340.0 / fConst0); @@ -1459,6 +2276,806 @@ class mydsp : public dsp { fConst17 = (1580.7785261635288 / fConst0); fConst18 = (2279.3303514244003 / fConst0); fConst19 = (1239.8911224120607 / fConst0); + fConst20 = double(tgamma(1.5)); + fConst21 = (0.0 - (3.3851375012865379 * fConst20)); + fConst22 = double(tgamma(3.0)); + fConst23 = double(tgamma(5.0)); + fConst24 = sqrt((7.0 * (fConst22 / fConst23))); + fConst25 = (fConst21 * fConst24); + fConst26 = double(tgamma(2.5)); + fConst27 = double(tgamma(7.0)); + fConst28 = sqrt((9.0 * (fConst22 / fConst27))); + fConst29 = ((0.0 - (11.283791670955125 * fConst26)) * fConst28); + fConst30 = double(tgamma(3.5)); + fConst31 = double(tgamma(9.0)); + fConst32 = sqrt((11.0 * (fConst22 / fConst31))); + fConst33 = ((0.0 - (31.594616678674353 * fConst30)) * fConst32); + fConst34 = sqrt((11.0 * (fConst23 / fConst27))); + fConst35 = ((0.0 - (2.5 * fConst21)) * fConst34); + fConst36 = (0.0044895668646764923 * fConst35); + fConst37 = double(tgamma(1.0)); + fConst38 = sqrt((7.0 * (fConst37 / fConst27))); + fConst39 = (fConst30 * fConst38); + fConst40 = (0.081054939510132359 * fConst39); + fConst41 = sqrt((5.0 * (fConst37 / fConst23))); + fConst42 = (fConst26 * fConst41); + fConst43 = (0.04052746975506618 * fConst42); + fConst44 = sqrt((3.0 * (fConst37 / fConst22))); + fConst45 = (fConst20 * fConst44); + fConst46 = (0.02026373487753309 * fConst45); + fConst47 = double(tgamma(4.5)); + fConst48 = sqrt((9.0 * (fConst37 / fConst31))); + fConst49 = (fConst47 * fConst48); + fConst50 = (0.16210987902026472 * fConst49); + fConst51 = (double(tgamma(5.5)) * sqrt((11.0 * (fConst37 / double(tgamma(11.0)))))); + fConst52 = (0.32421975804052944 * fConst51); + fConst53 = (0.0 - (3.1915382432114616 * fConst42)); + fConst54 = (0.0 - (6.3830764864229232 * fConst39)); + fConst55 = (0.0 - (0.70710678118654757 * fConst29)); + fConst56 = (0.0 - (0.70710678118654757 * fConst33)); + fConst57 = (0.0089791337293529845 * fConst25); + fConst58 = (0.0089791337293529845 * fConst29); + fConst59 = (0.0 - (1.5957691216057308 * fConst45)); + fConst60 = (0.0 - (0.70710678118654757 * fConst25)); + fConst61 = (0.0 - (0.35355339059327379 * fConst35)); + fConst62 = (0.0 - (25.532305945691693 * fConst51)); + fConst63 = (0.0089791337293529845 * fConst33); + fConst64 = (0.072048835120117685 * fConst48); + fConst65 = double(tgamma(2.0)); + fConst66 = sqrt((11.0 * (fConst65 / double(tgamma(10.0))))); + fConst67 = (0.45851597901024027 * fConst66); + fConst68 = (0.050946219890026692 * fConst38); + fConst69 = double(tgamma(8.0)); + fConst70 = sqrt((9.0 * (fConst65 / fConst69))); + fConst71 = (0.25217092292041182 * fConst70); + fConst72 = (0.62409119365282684 * fConst32); + fConst73 = (0.036024417560058836 * fConst41); + fConst74 = double(tgamma(6.0)); + fConst75 = sqrt((7.0 * (fConst65 / fConst74))); + fConst76 = (0.12736554972506672 * fConst75); + fConst77 = (0.22515260975036763 * fConst28); + fConst78 = double(tgamma(4.0)); + fConst79 = sqrt((11.0 * (fConst78 / fConst69))); + fConst80 = (0.22288971201886659 * fConst79); + fConst81 = ((0.0 - (4.4881006545161242 * fConst20)) * fConst34); + fConst82 = (0.0079814522038693207 * fConst81); + fConst83 = (0.025473109945013343 * fConst44); + fConst84 = sqrt((5.0 * (fConst65 / fConst78))); + fConst85 = (0.054036626340088233 * fConst84); + fConst86 = (0.057314497376279992 * fConst24); + fConst87 = sqrt((9.0 * (fConst78 / fConst74))); + fConst88 = (0.02251526097503671 * fConst87); + fConst89 = (0.10189243978005341 * fConst51); + fConst90 = (0.0 - (1.595769121605731 * fConst42)); + fConst91 = (0.0 - (2.256758334191026 * fConst39)); + fConst92 = (fConst26 * fConst75); + fConst93 = (0.0 - (5.6418958354775643 * fConst92)); + fConst94 = (fConst30 * fConst70); + fConst95 = (0.0 - (11.170383851240118 * fConst94)); + fConst96 = (fConst26 * fConst28); + fConst97 = (0.0 - (9.9735570100358153 * fConst96)); + fConst98 = (fConst30 * fConst32); + fConst99 = (0.0 - (27.645289593840062 * fConst98)); + fConst100 = (fConst26 * fConst79); + fConst101 = (0.0 - (9.8733177120857309 * fConst100)); + fConst102 = (0.0 - (1.1283791670955128 * fConst45)); + fConst103 = (fConst20 * fConst84); + fConst104 = (0.0 - (2.3936536824085959 * fConst103)); + fConst105 = (fConst20 * fConst24); + fConst106 = (0.0 - (2.5388531259649025 * fConst105)); + fConst107 = (fConst20 * fConst87); + fConst108 = (0.0 - (0.99735570100357918 * fConst107)); + fConst109 = (0.0 - (0.35355339059327379 * fConst81)); + fConst110 = (0.0 - (4.5135166683820529 * fConst51)); + fConst111 = (1.3574799921485692e-16 * fConst49); + fConst112 = (0.10189243978005338 * fConst39); + fConst113 = (0.011287477954144627 * fConst33); + fConst114 = (0.0 - (4.5135166683820485 * fConst39)); + fConst115 = (0.0 - (12.766152972845845 * fConst49)); + fConst116 = (0.0 - (18.054066673528194 * fConst51)); + fConst117 = (0.0 - (0.49999999999999983 * fConst33)); + fConst118 = (0.0 - (18.054066673528208 * fConst51)); + fConst119 = (0.0 - (1.1283791670955126 * fConst45)); + fConst120 = (0.0 - (7.0866384831701748e-16 * fConst42)); + fConst121 = (0.0 - (0.5 * fConst25)); + fConst122 = (0.0 - (1.5700924586837752e-16 * fConst29)); + fConst123 = (0.0 - (12.766152972845846 * fConst49)); + fConst124 = (0.0 - (18.054066673528212 * fConst51)); + fConst125 = (0.0 - (0.25 * fConst35)); + fConst126 = (1.3574799921485695e-16 * fConst49); + fConst127 = (0.0056437389770723117 * fConst35); + fConst128 = (0.011287477954144623 * fConst25); + fConst129 = (0.025473109945013343 * fConst45); + fConst130 = (0.4075697591202132 * fConst51); + fConst131 = (0.0 - (1.128379167095513 * fConst45)); + fConst132 = (0.0 - (4.5135166683820547 * fConst39)); + fConst133 = (0.0 - (0.50000000000000011 * fConst25)); + fConst134 = (0.0 - (0.50000000000000044 * fConst33)); + fConst135 = (0.0 - (0.25000000000000006 * fConst35)); + fConst136 = (2.7149599842971385e-16 * fConst49); + fConst137 = (0.10189243978005329 * fConst39); + fConst138 = (0.011287477954144615 * fConst33); + fConst139 = (2.714959984297139e-16 * fConst49); + fConst140 = (0.40756975912021387 * fConst51); + fConst141 = (0.01128747795414462 * fConst25); + fConst142 = (0.025473109945013332 * fConst45); + fConst143 = (0.0056437389770723099 * fConst35); + fConst144 = (0.0 - (1.417327696634035e-15 * fConst42)); + fConst145 = (0.0 - (4.5135166683820476 * fConst39)); + fConst146 = (0.0 - (4.5135166683820538 * fConst39)); + fConst147 = (0.0 - (3.1401849173675503e-16 * fConst29)); + fConst148 = (0.0 - (0.49999999999999967 * fConst33)); + fConst149 = (0.0 - (0.50000000000000033 * fConst33)); + fConst150 = (0.0 - (18.05406667352818 * fConst51)); + fConst151 = (0.0 - (1.6925687506432687 * fConst20)); + fConst152 = (fConst151 * fConst84); + fConst153 = (0.0 - (3.9894228040143274 * fConst26)); + fConst154 = (fConst153 * fConst75); + fConst155 = (0.0 - (7.898654169668589 * fConst30)); + fConst156 = (fConst155 * fConst70); + fConst157 = ((0.0 - (14.361922094451582 * fConst47)) * fConst66); + fConst158 = (0.0 - ((3.5355339059327373 * fConst151) + (2.3936536824085963 * fConst20))); + fConst159 = (fConst158 * fConst24); + fConst160 = (0.0 - ((4.9497474683058318 * fConst153) + (5.6418958354775643 * fConst26))); + fConst161 = (fConst160 * fConst28); + fConst162 = ((0.0 - ((6.3639610306789276 * fConst155) + (11.170383851240119 * fConst30))) * fConst32); + fConst163 = (0.0 - ((2.4748737341529159 * fConst158) + (4.0 * fConst151))); + fConst164 = (fConst163 * fConst87); + fConst165 = ((0.0 - ((3.1819805153394638 * fConst160) + (6.0 * fConst153))) * fConst79); + fConst166 = ((0.0 - ((2.1213203435596424 * fConst163) + (2.5 * fConst158))) * fConst34); + fConst167 = (0.0079814522038693207 * fConst166); + fConst168 = (0.072048835120117685 * fConst49); + fConst169 = (0.050946219890026692 * fConst39); + fConst170 = (0.036024417560058836 * fConst42); + fConst171 = (0.0 - (1.4142135623730951 * fConst154)); + fConst172 = (0.0 - (1.4142135623730951 * fConst156)); + fConst173 = (0.0 - (0.70710678118654757 * fConst161)); + fConst174 = (0.0 - (0.70710678118654757 * fConst162)); + fConst175 = (0.0 - (0.47140452079103168 * fConst165)); + fConst176 = (0.010641936271825759 * fConst164); + fConst177 = (0.015962904407738641 * fConst159); + fConst178 = (0.0 - (1.4142135623730951 * fConst152)); + fConst179 = (0.0 - (0.70710678118654757 * fConst159)); + fConst180 = (0.0 - (0.47140452079103168 * fConst164)); + fConst181 = (0.0 - (0.35355339059327379 * fConst166)); + fConst182 = (0.010641936271825759 * fConst165); + fConst183 = (0.015962904407738641 * fConst161); + fConst184 = (0.015962904407738641 * fConst162); + fConst185 = (0.12956030605175081 * fConst75); + fConst186 = (2.8768166971227152e-17 * fConst75); + fConst187 = (0.14960335515053727 * fConst28); + fConst188 = (3.3218617889860196e-17 * fConst28); + fConst189 = (1.0598124096115483e-16 * fConst79); + fConst190 = (2.3532562778684169e-32 * fConst79); + fConst191 = (0.0 - (2.6596152026762163 * fConst20)); + fConst192 = (((1.7320508075688776 * fConst191) - (4.6065886596178087 * fConst20)) * fConst34); + fConst193 = (0.051824122420700336 * fConst38); + fConst194 = (0.20944469721075218 * fConst70); + fConst195 = (0.36276885694490241 * fConst32); + fConst196 = (5.6373863931755746e-17 * fConst48); + fConst197 = (2.9292718964632671e-16 * fConst66); + fConst198 = (fConst191 * fConst87); + fConst199 = (0.033660754908870889 * fConst84); + fConst200 = (0.019434045907762629 * fConst24); + fConst201 = (0.019434045907762633 * fConst24); + fConst202 = (0.0 - (2.4568472851294949 * fConst39)); + fConst203 = (0.0 - (9.929230089991206 * fConst94)); + fConst204 = (0.0 - (5.6738457657092614 * fConst49)); + fConst205 = (0.0 - (6.5515927603453177 * fConst51)); + fConst206 = (0.0 - (17.197930995906468 * fConst98)); + fConst207 = (fConst47 * fConst66); + fConst208 = (0.0 - (29.482167421553953 * fConst207)); + fConst209 = (0.0 - (6.551592760345323 * fConst51)); + fConst210 = (0.0 - (0.92131773192356115 * fConst45)); + fConst211 = (0.0 - (2.1276921621409737 * fConst42)); + fConst212 = (0.0 - (1.5957691216057308 * fConst103)); + fConst213 = (0.0 - (4.7244256554467816e-16 * fConst42)); + fConst214 = (0.0 - (6.1421182128237417 * fConst92)); + fConst215 = (0.0 - (0.92131773192356159 * fConst105)); + fConst216 = (0.0 - (1.3638242119692871e-15 * fConst92)); + fConst217 = (0.0 - (7.0923072071365816 * fConst96)); + fConst218 = (0.0 - (0.33333333333333331 * fConst198)); + fConst219 = (0.0 - (1.5748085518155944e-15 * fConst96)); + fConst220 = (0.0 - (5.6738457657092622 * fConst49)); + fConst221 = (0.0 - (6.5515927603453248 * fConst51)); + fConst222 = (0.0 - (5.0242958677880805e-15 * fConst100)); + fConst223 = (0.0 - (0.25 * fConst192)); + fConst224 = (0.0 - (1.1156177909894717e-30 * fConst100)); + fConst225 = (0.0 - (29.482167421553957 * fConst207)); + fConst226 = (0.20944469721075201 * fConst70); + fConst227 = (0.36276885694490207 * fConst32); + fConst228 = (5.6373863931755758e-17 * fConst48); + fConst229 = (2.9292718964632676e-16 * fConst66); + fConst230 = (0.019434045907762623 * fConst44); + fConst231 = (0.0052734375000000012 * fConst192); + fConst232 = (0.007031250000000001 * fConst198); + fConst233 = (0.13819765978853404 * fConst51); + fConst234 = (0.0 - (0.92131773192356148 * fConst45)); + fConst235 = (0.0 - (1.5957691216057313 * fConst103)); + fConst236 = (0.0 - (2.456847285129498 * fConst39)); + fConst237 = (0.0 - (0.92131773192356192 * fConst105)); + fConst238 = (0.0 - (9.9292300899912185 * fConst94)); + fConst239 = (0.0 - (0.33333333333333343 * fConst198)); + fConst240 = (0.0 - (17.197930995906489 * fConst98)); + fConst241 = (0.0 - (0.25000000000000006 * fConst192)); + fConst242 = (0.051824122420700267 * fConst38); + fConst243 = (0.20944469721075193 * fConst70); + fConst244 = (0.36276885694490202 * fConst32); + fConst245 = (0.12956030605175084 * fConst75); + fConst246 = (5.7536333942454304e-17 * fConst75); + fConst247 = (0.14960335515053733 * fConst28); + fConst248 = (6.6437235779720392e-17 * fConst28); + fConst249 = (1.0598124096115484e-16 * fConst79); + fConst250 = (4.7065125557368339e-32 * fConst79); + fConst251 = (1.1274772786351149e-16 * fConst48); + fConst252 = (5.8585437929265342e-16 * fConst66); + fConst253 = (1.1274772786351152e-16 * fConst48); + fConst254 = (5.8585437929265352e-16 * fConst66); + fConst255 = (0.019434045907762616 * fConst44); + fConst256 = (0.033660754908870882 * fConst84); + fConst257 = (0.019434045907762626 * fConst24); + fConst258 = (0.0070312499999999993 * fConst198); + fConst259 = (0.13819765978853429 * fConst51); + fConst260 = (0.0052734374999999995 * fConst192); + fConst261 = (0.0 - (9.4488513108935631e-16 * fConst42)); + fConst262 = (0.0 - (2.456847285129494 * fConst39)); + fConst263 = (0.0 - (2.7276484239385742e-15 * fConst92)); + fConst264 = (0.0 - (2.4568472851294976 * fConst39)); + fConst265 = (0.0 - (9.9292300899912025 * fConst94)); + fConst266 = (0.0 - (3.1496171036311889e-15 * fConst96)); + fConst267 = (0.0 - (9.9292300899912167 * fConst94)); + fConst268 = (0.0 - (17.197930995906464 * fConst98)); + fConst269 = (0.0 - (2.2312355819789434e-30 * fConst100)); + fConst270 = (0.0 - (17.197930995906486 * fConst98)); + fConst271 = (0.0 - (6.5515927603453132 * fConst51)); + fConst272 = (0.0 - (4.3431334391370653 * fConst26)); + fConst273 = (0.0 - ((4.0414518843273806 * fConst272) + (7.5225277806367483 * fConst26))); + fConst274 = ((0.0 - ((2.5980762113533165 * fConst273) + (6.0 * fConst272))) * fConst79); + fConst275 = (0.0 - (1.5957691216057308 * fConst20)); + fConst276 = (0.0 - ((2.8867513459481291 * fConst275) + (2.7639531957706835 * fConst20))); + fConst277 = (0.0 - ((2.0207259421636903 * fConst276) + (4.0 * fConst275))); + fConst278 = ((0.0 - ((1.7320508075688776 * fConst277) + (2.5 * fConst276))) * fConst34); + fConst279 = (0.0 - (9.9292300899912096 * fConst30)); + fConst280 = ((0.0 - ((5.1961524227066329 * fConst279) + (17.197930995906471 * fConst30))) * fConst32); + fConst281 = (0.010546875000000006 * fConst280); + fConst282 = ((0.0 - (20.847040507857912 * fConst47)) * fConst66); + fConst283 = (1.405126015541214e-17 * fConst282); + fConst284 = (fConst273 * fConst28); + fConst285 = (fConst277 * fConst87); + fConst286 = (fConst279 * fConst70); + fConst287 = (0.021093750000000012 * fConst286); + fConst288 = (fConst272 * fConst75); + fConst289 = (fConst276 * fConst24); + fConst290 = (fConst275 * fConst84); + fConst291 = (0.021093750000000005 * fConst290); + fConst292 = (5.6373863931755746e-17 * fConst49); + fConst293 = (0.051824122420700336 * fConst39); + fConst294 = (0.0 - (0.99999999999999967 * fConst286)); + fConst295 = (0.0 - (0.49999999999999983 * fConst280)); + fConst296 = (0.0 - (1.4142135623730949 * fConst282)); + fConst297 = (0.0 - fConst290); + fConst298 = (0.0 - (1.4142135623730951 * fConst288)); + fConst299 = (0.0 - (0.5 * fConst289)); + fConst300 = (0.0 - (3.1401849173675503e-16 * fConst288)); + fConst301 = (0.0 - (0.70710678118654757 * fConst284)); + fConst302 = (0.0 - (0.33333333333333331 * fConst285)); + fConst303 = (0.0 - (1.5700924586837752e-16 * fConst284)); + fConst304 = (0.0 - (0.47140452079103168 * fConst274)); + fConst305 = (0.0 - (0.25 * fConst278)); + fConst306 = (0.0 - (1.0467283057891834e-16 * fConst274)); + fConst307 = (0.0 - (1.4142135623730951 * fConst282)); + fConst308 = (0.0052734375000000012 * fConst278); + fConst309 = (0.007031250000000001 * fConst285); + fConst310 = (0.010546875000000002 * fConst289); + fConst311 = (5.6373863931755758e-17 * fConst49); + fConst312 = (0.019434045907762623 * fConst45); + fConst313 = (0.0 - (1.0000000000000002 * fConst290)); + fConst314 = (0.0 - (0.50000000000000011 * fConst289)); + fConst315 = (0.0 - (1.0000000000000009 * fConst286)); + fConst316 = (0.0 - (0.33333333333333343 * fConst285)); + fConst317 = (0.0 - (0.50000000000000044 * fConst280)); + fConst318 = (0.0 - (0.25000000000000006 * fConst278)); + fConst319 = (0.010546874999999994 * fConst280); + fConst320 = (0.021093749999999988 * fConst286); + fConst321 = (2.810252031082428e-17 * fConst282); + fConst322 = (1.1274772786351149e-16 * fConst49); + fConst323 = (0.051824122420700267 * fConst39); + fConst324 = (0.0070312499999999993 * fConst285); + fConst325 = (0.010546874999999999 * fConst289); + fConst326 = (0.021093749999999998 * fConst290); + fConst327 = (1.1274772786351152e-16 * fConst49); + fConst328 = (0.019434045907762616 * fConst45); + fConst329 = (0.0052734374999999995 * fConst278); + fConst330 = (0.0 - (6.2803698347351007e-16 * fConst288)); + fConst331 = (0.0 - (0.99999999999999933 * fConst286)); + fConst332 = (0.0 - (3.1401849173675503e-16 * fConst284)); + fConst333 = (0.0 - (1.0000000000000007 * fConst286)); + fConst334 = (0.0 - (0.49999999999999967 * fConst280)); + fConst335 = (0.0 - (2.0934566115783667e-16 * fConst274)); + fConst336 = (0.0 - (0.50000000000000033 * fConst280)); + fConst337 = (0.026338897580074728 * fConst84); + fConst338 = (0.026338897580074724 * fConst84); + fConst339 = (0.045001699736364593 * fConst24); + fConst340 = (0.045001699736364587 * fConst24); + fConst341 = (0.059861130863806261 * fConst87); + fConst342 = (0.059861130863806254 * fConst87); + fConst343 = (0.065577343198713223 * fConst34); + fConst344 = (0.065577343198713209 * fConst34); + fConst345 = (0.052943176160428845 * fConst75); + fConst346 = (0.011706176702255417 * fConst41); + fConst347 = (0.13834572466301867 * fConst28); + fConst348 = (0.26952889681672887 * fConst79); + fConst349 = (0.0070590901547238332 * fConst38); + fConst350 = (0.044696311044975172 * fConst70); + fConst351 = (0.15722518980975816 * fConst32); + fConst352 = (0.0 - (1.2884797242127563e-16 * fConst42)); + fConst353 = (0.0 - (5.8273688116286149e-16 * fConst92)); + fConst354 = (0.0 - (0.34992181344801404 * fConst39)); + fConst355 = (0.0 - (1.9878387281720961e-16 * fConst49)); + fConst356 = (0.0 - (1.522748764978713e-15 * fConst96)); + fConst357 = (0.0 - (2.2156133258658022 * fConst94)); + fConst358 = (0.0 - (0.42202158587919975 * fConst49)); + fConst359 = (0.0 - (0.25448859159855519 * fConst51)); + fConst360 = (0.0 - (1.6182610048842852e-15 * fConst207)); + fConst361 = (0.0 - (2.9666604859200243e-15 * fConst100)); + fConst362 = (0.0 - (7.7937131177057708 * fConst98)); + fConst363 = (0.0 - (3.4355959865804975 * fConst207)); + fConst364 = (0.0 - (0.25448859159855491 * fConst51)); + fConst365 = (0.0 - (0.48114249349102017 * fConst45)); + fConst366 = (0.0 - (0.58027968058390089 * fConst42)); + fConst367 = (0.0 - (1.3056292813137786 * fConst103)); + fConst368 = (0.0 - (2.624413600860108 * fConst92)); + fConst369 = (0.0 - (2.230751560731095 * fConst105)); + fConst370 = (0.0 - (6.8578507705370146 * fConst96)); + fConst371 = (0.0 - (2.9673392757131363 * fConst107)); + fConst372 = (0.0 - (13.360651058924196 * fConst100)); + fConst373 = (fConst20 * fConst34); + fConst374 = (0.0 - (3.2506941192471897 * fConst373)); + fConst375 = (0.044696311044975207 * fConst70); + fConst376 = (0.1572251898097583 * fConst32); + fConst377 = (0.0097062489627452973 * fConst44); + fConst378 = (4.0101337658685596e-18 * fConst48); + fConst379 = (3.2645722239460454e-17 * fConst66); + fConst380 = (0.0051338837488900495 * fConst51); + fConst381 = (0.0 - (0.48114249349102034 * fConst45)); + fConst382 = (0.0 - (1.3056292813137791 * fConst103)); + fConst383 = (0.0 - (0.34992181344801421 * fConst39)); + fConst384 = (0.0 - (2.2307515607310959 * fConst105)); + fConst385 = (0.0 - (2.2156133258658035 * fConst94)); + fConst386 = (0.0 - (2.9673392757131376 * fConst107)); + fConst387 = (0.0 - (7.7937131177057752 * fConst98)); + fConst388 = (0.0 - (3.2506941192471905 * fConst373)); + fConst389 = (0.0070590901547238306 * fConst38); + fConst390 = (0.044696311044975165 * fConst70); + fConst391 = (0.15722518980975814 * fConst32); + fConst392 = (0.052943176160428852 * fConst75); + fConst393 = (2.3511493268037518e-17 * fConst75); + fConst394 = (0.1383457246630187 * fConst28); + fConst395 = (6.1437843551734282e-17 * fConst28); + fConst396 = (0.26952889681672892 * fConst79); + fConst397 = (1.1969487481910018e-16 * fConst79); + fConst398 = (8.0202675317371177e-18 * fConst48); + fConst399 = (6.5291444478920883e-17 * fConst66); + fConst400 = (0.0097062489627452939 * fConst44); + fConst401 = (0.026338897580074721 * fConst84); + fConst402 = (0.045001699736364573 * fConst24); + fConst403 = (0.05986113086380624 * fConst87); + fConst404 = (0.0051338837488900581 * fConst51); + fConst405 = (8.0202675317371192e-18 * fConst48); + fConst406 = (6.5291444478920908e-17 * fConst66); + fConst407 = (0.0 - (2.5769594484255127e-16 * fConst42)); + fConst408 = (0.0 - (0.34992181344801365 * fConst39)); + fConst409 = (0.0 - (1.165473762325723e-15 * fConst92)); + fConst410 = (0.0 - (0.34992181344801415 * fConst39)); + fConst411 = (0.0 - (2.2156133258658 * fConst94)); + fConst412 = (0.0 - (3.0454975299574259e-15 * fConst96)); + fConst413 = (0.0 - (2.2156133258658031 * fConst94)); + fConst414 = (0.0 - (7.7937131177057628 * fConst98)); + fConst415 = (0.0 - (5.9333209718400486e-15 * fConst100)); + fConst416 = (0.0 - (7.7937131177057735 * fConst98)); + fConst417 = (0.0 - (0.25448859159855475 * fConst51)); + fConst418 = (0.0 - (0.76346577479571942 * fConst51)); + fConst419 = (0.55445944488012866 * fConst66); + fConst420 = (0.1617173380900363 * fConst66); + fConst421 = ((0.0 - (4.979220665234859 * fConst30)) * fConst32); + fConst422 = (0.0 - (3.7301790647785582 * fConst26)); + fConst423 = (((1.3568010505999357 * fConst422) - (18.557406538063905 * fConst26)) * fConst79); + fConst424 = (0.0 - (1.7605101637794649 * fConst20)); + fConst425 = ((1.0552897060221724 * fConst424) - (3.8926344352424089 * fConst20)); + fConst426 = (((0.90453403373329044 * fConst425) - (2.5 * fConst424)) * fConst34); + fConst427 = (0.19368401452822653 * fConst70); + fConst428 = (0.13408893313492565 * fConst70); + fConst429 = (fConst422 * fConst28); + fConst430 = (fConst425 * fConst87); + fConst431 = (0.052943176160428991 * fConst75); + fConst432 = (0.070590901547238516 * fConst75); + fConst433 = (fConst424 * fConst24); + fConst434 = (0.0087796325266915921 * fConst84); + fConst435 = (0.026338897580074738 * fConst84); + fConst436 = (0.40557681616231633 * fConst51); + fConst437 = (0.059595081393300449 * fConst48); + fConst438 = (0.16171733809003749 * fConst66); + fConst439 = (0.0 - (2.3211187223356089 * fConst42)); + fConst440 = (0.0 - (3.1492963210321352 * fConst39)); + fConst441 = (0.0 - (3.4992181344801496 * fConst92)); + fConst442 = (0.0 - (4.548983574824196 * fConst39)); + fConst443 = (0.0 - (10.128518061100836 * fConst49)); + fConst444 = (0.0 - (6.6468399775974225 * fConst94)); + fConst445 = (0.0 - (0.56568542494923812 * fConst429)); + fConst446 = (0.0 - (9.600991078751834 * fConst94)); + fConst447 = (0.0 - (0.76346577479567002 * fConst51)); + fConst448 = (0.0 - (27.484767892644079 * fConst207)); + fConst449 = (0.0 - (0.40249223594996214 * fConst421)); + fConst450 = (0.0 - (0.37712361663282534 * fConst423)); + fConst451 = (0.0 - (0.58137767414994534 * fConst421)); + fConst452 = (0.052943176160428929 * fConst75); + fConst453 = (0.035118530106766334 * fConst41); + fConst454 = (0.026338897580074742 * fConst84); + fConst455 = (0.0087796325266915817 * fConst84); + fConst456 = (0.0057058809432056004 * fConst423); + fConst457 = (0.0085588214148084006 * fConst429); + fConst458 = (0.40557681616231639 * fConst51); + fConst459 = (0.0 - (0.48114249349102062 * fConst45)); + fConst460 = (0.0 - (1.7408390417517061 * fConst42)); + fConst461 = (0.0 - (0.43520976043792636 * fConst103)); + fConst462 = (0.0 - (2.3211187223356093 * fConst42)); + fConst463 = (0.0 - (3.1492963210321379 * fConst39)); + fConst464 = (0.0 - (2.6244136008601116 * fConst92)); + fConst465 = (0.0 - (0.22360679774997891 * fConst433)); + fConst466 = (0.0 - (3.4992181344801501 * fConst92)); + fConst467 = (0.0 - (6.6468399775974278 * fConst94)); + fConst468 = (0.0 - (0.42426406871192845 * fConst429)); + fConst469 = (0.0 - (0.14907119849998593 * fConst430)); + fConst470 = (0.0 - (0.76346577479565958 * fConst51)); + fConst471 = (0.0 - (0.40249223594996242 * fConst421)); + fConst472 = (0.0 - (0.28284271247461895 * fConst423)); + fConst473 = (0.0 - (0.11180339887498945 * fConst426)); + fConst474 = (0.0 - (0.3771236166328254 * fConst423)); + fConst475 = (0.0 - (20.104598736285961 * fConst51)); + fConst476 = (0.09176817201141016 * fConst38); + fConst477 = (0.19368401452822634 * fConst70); + fConst478 = (0.029118746888235927 * fConst44); + fConst479 = (0.026338897580074745 * fConst84); + fConst480 = (0.0067663424393548327 * fConst426); + fConst481 = (0.009021789919139777 * fConst430); + fConst482 = (0.013532684878709665 * fConst433); + fConst483 = (0.011728326894881708 * fConst421); + fConst484 = (0.55445944488012844 * fConst66); + fConst485 = (0.16171733809003774 * fConst66); + fConst486 = (0.059595081393300019 * fConst48); + fConst487 = (0.0 - (1.443427480473062 * fConst45)); + fConst488 = (0.0 - (1.7408390417517088 * fConst42)); + fConst489 = (0.0 - (1.3056292813137793 * fConst103)); + fConst490 = (0.0 - (2.6244136008601155 * fConst92)); + fConst491 = (0.0 - (0.67082039324993681 * fConst433)); + fConst492 = (0.0 - (3.1492963210321285 * fConst39)); + fConst493 = (0.0 - (10.128518061100845 * fConst49)); + fConst494 = (0.0 - (0.42426406871192907 * fConst429)); + fConst495 = (0.0 - (0.44721359549995787 * fConst430)); + fConst496 = (0.0 - (6.6468399775974083 * fConst94)); + fConst497 = (0.0 - (27.484767892644101 * fConst207)); + fConst498 = (0.0 - (0.28284271247461934 * fConst423)); + fConst499 = (0.0 - (0.3354101966249684 * fConst426)); + fConst500 = (0.0 - (0.40249223594996125 * fConst421)); + fConst501 = (0.091768172011410271 * fConst38); + fConst502 = (0.19368401452822659 * fConst70); + fConst503 = (0.046824706809021746 * fConst41); + fConst504 = (0.0097062489627453216 * fConst44); + fConst505 = (0.0087796325266915939 * fConst84); + fConst506 = (0.007607841257607462 * fConst423); + fConst507 = (0.0022554474797849473 * fConst426); + fConst508 = (0.01172832689488172 * fConst421); + fConst509 = (0.011411761886411192 * fConst429); + fConst510 = (0.0030072633063799293 * fConst430); + fConst511 = (0.0045108949595698946 * fConst433); + fConst512 = (0.16171733809003719 * fConst66); + fConst513 = (0.0 - (0.48114249349102112 * fConst45)); + fConst514 = (0.0 - (1.4434274804730622 * fConst45)); + fConst515 = (0.0 - (0.43520976043792686 * fConst103)); + fConst516 = (0.0 - (1.3056292813137795 * fConst103)); + fConst517 = (0.0 - (4.5489835748241987 * fConst39)); + fConst518 = (0.0 - (0.22360679774997916 * fConst433)); + fConst519 = (0.0 - (0.67082039324993692 * fConst433)); + fConst520 = (0.0 - (3.1492963210321339 * fConst39)); + fConst521 = (0.0 - (9.6009910787518393 * fConst94)); + fConst522 = (0.0 - (0.1490711984999861 * fConst430)); + fConst523 = (0.0 - (0.44721359549995793 * fConst430)); + fConst524 = (0.0 - (6.6468399775974198 * fConst94)); + fConst525 = (0.0 - (20.104598736285965 * fConst51)); + fConst526 = (0.0 - (0.58137767414994568 * fConst421)); + fConst527 = (0.0 - (0.11180339887498958 * fConst426)); + fConst528 = (0.0 - (0.33541019662496846 * fConst426)); + fConst529 = (0.0 - (0.40249223594996197 * fConst421)); + fConst530 = (0.052943176160428963 * fConst75); + fConst531 = (0.070590901547238558 * fConst75); + fConst532 = (0.01540165124667044 * fConst51); + fConst533 = (0.0 - (0.48114249349102095 * fConst45)); + fConst534 = (0.0 - (0.4352097604379267 * fConst103)); + fConst535 = (0.0 - (2.3211187223356085 * fConst42)); + fConst536 = (0.0 - (0.22360679774997907 * fConst433)); + fConst537 = (0.0 - (3.4992181344801487 * fConst92)); + fConst538 = (0.0 - (10.12851806110084 * fConst49)); + fConst539 = (0.0 - (0.14907119849998604 * fConst430)); + fConst540 = (0.0 - (0.5656854249492379 * fConst429)); + fConst541 = (0.0 - (27.484767892644086 * fConst207)); + fConst542 = (0.0 - (0.11180339887498954 * fConst426)); + fConst543 = (0.0 - (0.37712361663282523 * fConst423)); + fConst544 = (0.059595081393300338 * fConst48); + fConst545 = (0.16171733809003716 * fConst66); + fConst546 = (0.052943176160428942 * fConst75); + fConst547 = (0.035118530106766348 * fConst41); + fConst548 = (0.19368401452822642 * fConst70); + fConst549 = (0.13408893313492587 * fConst70); + fConst550 = (0.005705880943205603 * fConst423); + fConst551 = (0.0085588214148084041 * fConst429); + fConst552 = (0.015401651246670513 * fConst51); + fConst553 = (0.55445944488012833 * fConst66); + fConst554 = (0.16171733809003799 * fConst66); + fConst555 = (0.0 - (1.4434274804730625 * fConst45)); + fConst556 = (0.0 - (1.7408390417517057 * fConst42)); + fConst557 = (0.0 - (1.3056292813137798 * fConst103)); + fConst558 = (0.0 - (2.3211187223356098 * fConst42)); + fConst559 = (0.0 - (2.6244136008601107 * fConst92)); + fConst560 = (0.0 - (0.67082039324993703 * fConst433)); + fConst561 = (0.0 - (3.4992181344801505 * fConst92)); + fConst562 = (0.0 - (4.5489835748241934 * fConst39)); + fConst563 = (0.0 - (0.42426406871192829 * fConst429)); + fConst564 = (0.0 - (0.44721359549995798 * fConst430)); + fConst565 = (0.0 - (0.56568542494923824 * fConst429)); + fConst566 = (0.0 - (9.6009910787518287 * fConst94)); + fConst567 = (0.0 - (0.28284271247461884 * fConst423)); + fConst568 = (0.0 - (0.33541019662496852 * fConst426)); + fConst569 = (0.0 - (0.37712361663282545 * fConst423)); + fConst570 = (0.0 - (0.58137767414994512 * fConst421)); + fConst571 = (0.063531811392514792 * fConst38); + fConst572 = (0.13408893313492612 * fConst70); + fConst573 = (0.0097062489627453008 * fConst44); + fConst574 = (0.0087796325266915748 * fConst84); + fConst575 = (0.0022554474797849425 * fConst426); + fConst576 = (0.0081196109272258076 * fConst421); + fConst577 = (0.0030072633063799232 * fConst430); + fConst578 = (0.004510894959569885 * fConst433); + fConst579 = (0.0 - (0.48114249349102228 * fConst45)); + fConst580 = (0.0 - (1.7408390417517114 * fConst42)); + fConst581 = (0.0 - (0.43520976043792792 * fConst103)); + fConst582 = (0.0 - (4.5489835748242058 * fConst39)); + fConst583 = (0.0 - (2.6244136008601191 * fConst92)); + fConst584 = (0.0 - (0.22360679774997969 * fConst433)); + fConst585 = (0.0 - (10.12851806110085 * fConst49)); + fConst586 = (0.0 - (9.6009910787518553 * fConst94)); + fConst587 = (0.0 - (0.42426406871192973 * fConst429)); + fConst588 = (0.0 - (0.14907119849998646 * fConst430)); + fConst589 = (0.0 - (20.104598736285954 * fConst51)); + fConst590 = (0.0 - (27.484767892644118 * fConst207)); + fConst591 = (0.0 - (0.58137767414994668 * fConst421)); + fConst592 = (0.0 - (0.28284271247461978 * fConst423)); + fConst593 = (0.0 - (0.11180339887498984 * fConst426)); + fConst594 = (0.0 - (0.76346577479577982 * fConst51)); + fConst595 = (0.059595081393299554 * fConst48); + fConst596 = (0.16171733809003505 * fConst66); + fConst597 = (0.063531811392514445 * fConst38); + fConst598 = (0.13408893313492534 * fConst70); + fConst599 = (0.046824706809021698 * fConst41); + fConst600 = (0.07059090154723846 * fConst75); + fConst601 = (0.029118746888235913 * fConst44); + fConst602 = (0.026338897580074731 * fConst84); + fConst603 = (0.0081196109272257608 * fConst421); + fConst604 = (0.0076078412576074551 * fConst423); + fConst605 = (0.0067663424393548301 * fConst426); + fConst606 = (0.011411761886411183 * fConst429); + fConst607 = (0.0090217899191397718 * fConst430); + fConst608 = (0.01353268487870966 * fConst433); + fConst609 = (0.0 - (8.2571033474838984 * fConst30)); + fConst610 = (fConst32 * (0.0 - ((2.7136021011998714 * fConst609) + (27.385713658791659 * fConst30)))); + fConst611 = (0.0 - (3.0929010896773175 * fConst26)); + fConst612 = (0.0 - ((2.1105794120443448 * fConst611) + (10.257992428141025 * fConst26))); + fConst613 = (fConst79 * (0.0 - ((1.3568010505999357 * fConst612) + (6.0 * fConst611)))); + fConst614 = (0.0 - (0.97315860881060223 * fConst20)); + fConst615 = (0.0 - ((1.5075567228888176 * fConst614) + (3.2276019669290172 * fConst20))); + fConst616 = (0.0 - ((1.0552897060221724 * fConst615) + (4.0 * fConst614))); + fConst617 = (fConst34 * (0.0 - ((0.90453403373329044 * fConst616) + (2.5 * fConst615)))); + fConst618 = (fConst70 * fConst609); + fConst619 = (fConst28 * fConst612); + fConst620 = (fConst87 * fConst616); + fConst621 = (fConst75 * fConst611); + fConst622 = (fConst24 * fConst615); + fConst623 = (fConst84 * fConst614); + fConst624 = (fConst66 * (0.0 - (20.244443496069714 * fConst47))); + fConst625 = (0.0 - (1.1313708498984762 * fConst621)); + fConst626 = (0.0 - (0.80498447189992428 * fConst618)); + fConst627 = (0.0 - (0.56568542494923812 * fConst619)); + fConst628 = (0.0 - (1.1627553482998907 * fConst618)); + fConst629 = (0.0 - (1.3576450198781711 * fConst624)); + fConst630 = (0.0 - (0.40249223594996214 * fConst610)); + fConst631 = (0.0 - (0.37712361663282534 * fConst613)); + fConst632 = (0.0 - (0.58137767414994534 * fConst610)); + fConst633 = (0.007988233320487842 * fConst624); + fConst634 = (0.0057058809432056004 * fConst613); + fConst635 = (0.0085588214148084006 * fConst619); + fConst636 = (0.017117642829616801 * fConst621); + fConst637 = (0.035118530106766334 * fConst42); + fConst638 = (0.059595081393300449 * fConst49); + fConst639 = (0.0 - (0.44721359549995782 * fConst623)); + fConst640 = (0.0 - (0.84852813742385691 * fConst621)); + fConst641 = (0.0 - (0.22360679774997891 * fConst622)); + fConst642 = (0.0 - (0.80498447189992484 * fConst618)); + fConst643 = (0.0 - (0.42426406871192845 * fConst619)); + fConst644 = (0.0 - (0.14907119849998593 * fConst620)); + fConst645 = (0.0 - (0.40249223594996242 * fConst610)); + fConst646 = (0.0 - (0.28284271247461895 * fConst613)); + fConst647 = (0.0 - (0.11180339887498945 * fConst617)); + fConst648 = (0.0 - (0.3771236166328254 * fConst613)); + fConst649 = (0.011728326894881708 * fConst610); + fConst650 = (0.023456653789763415 * fConst618); + fConst651 = (0.009021789919139777 * fConst620); + fConst652 = (0.013532684878709665 * fConst622); + fConst653 = (0.027065369757419331 * fConst623); + fConst654 = (0.029118746888235927 * fConst45); + fConst655 = (0.09176817201141016 * fConst39); + fConst656 = (0.0067663424393548327 * fConst617); + fConst657 = (0.0 - (1.3416407864998736 * fConst623)); + fConst658 = (0.0 - (0.84852813742385813 * fConst621)); + fConst659 = (0.0 - (0.67082039324993681 * fConst622)); + fConst660 = (0.0 - (0.42426406871192907 * fConst619)); + fConst661 = (0.0 - (0.44721359549995787 * fConst620)); + fConst662 = (0.0 - (0.8049844718999225 * fConst618)); + fConst663 = (0.0 - (1.3576450198781722 * fConst624)); + fConst664 = (0.0 - (0.28284271247461934 * fConst613)); + fConst665 = (0.0 - (0.3354101966249684 * fConst617)); + fConst666 = (0.0 - (0.40249223594996125 * fConst610)); + fConst667 = (0.0079882333204877847 * fConst624); + fConst668 = (0.007607841257607462 * fConst613); + fConst669 = (0.0022554474797849473 * fConst617); + fConst670 = (0.01172832689488172 * fConst610); + fConst671 = (0.011411761886411192 * fConst619); + fConst672 = (0.0030072633063799293 * fConst620); + fConst673 = (0.02345665378976344 * fConst618); + fConst674 = (0.022823523772822384 * fConst621); + fConst675 = (0.0045108949595698946 * fConst622); + fConst676 = (0.0090217899191397891 * fConst623); + fConst677 = (0.091768172011410271 * fConst39); + fConst678 = (0.0097062489627453216 * fConst45); + fConst679 = (0.059595081393300019 * fConst49); + fConst680 = (0.046824706809021746 * fConst42); + fConst681 = (0.0 - (0.44721359549995832 * fConst623)); + fConst682 = (0.0 - (1.3416407864998738 * fConst623)); + fConst683 = (0.0 - (0.22360679774997916 * fConst622)); + fConst684 = (0.0 - (0.67082039324993692 * fConst622)); + fConst685 = (0.0 - (1.1627553482998914 * fConst618)); + fConst686 = (0.0 - (0.1490711984999861 * fConst620)); + fConst687 = (0.0 - (0.44721359549995793 * fConst620)); + fConst688 = (0.0 - (0.80498447189992395 * fConst618)); + fConst689 = (0.0 - (0.58137767414994568 * fConst610)); + fConst690 = (0.0 - (0.11180339887498958 * fConst617)); + fConst691 = (0.0 - (0.33541019662496846 * fConst617)); + fConst692 = (0.0 - (0.40249223594996197 * fConst610)); + fConst693 = (0.0 - (0.44721359549995815 * fConst623)); + fConst694 = (0.0 - (0.22360679774997907 * fConst622)); + fConst695 = (0.0 - (1.1313708498984758 * fConst621)); + fConst696 = (0.0 - (0.14907119849998604 * fConst620)); + fConst697 = (0.0 - (0.5656854249492379 * fConst619)); + fConst698 = (0.0 - (1.3576450198781715 * fConst624)); + fConst699 = (0.0 - (0.11180339887498954 * fConst617)); + fConst700 = (0.0 - (0.37712361663282523 * fConst613)); + fConst701 = (0.0085588214148084041 * fConst619); + fConst702 = (0.017117642829616808 * fConst621); + fConst703 = (0.035118530106766348 * fConst42); + fConst704 = (0.059595081393300338 * fConst49); + fConst705 = (0.005705880943205603 * fConst613); + fConst706 = (0.0079882333204878263 * fConst624); + fConst707 = (0.0 - (1.3416407864998741 * fConst623)); + fConst708 = (0.0 - (0.84852813742385658 * fConst621)); + fConst709 = (0.0 - (0.67082039324993703 * fConst622)); + fConst710 = (0.0 - (1.1313708498984765 * fConst621)); + fConst711 = (0.0 - (0.42426406871192829 * fConst619)); + fConst712 = (0.0 - (0.44721359549995798 * fConst620)); + fConst713 = (0.0 - (0.56568542494923824 * fConst619)); + fConst714 = (0.0 - (1.1627553482998902 * fConst618)); + fConst715 = (0.0 - (0.28284271247461884 * fConst613)); + fConst716 = (0.0 - (0.33541019662496852 * fConst617)); + fConst717 = (0.0 - (0.37712361663282545 * fConst613)); + fConst718 = (0.0 - (0.58137767414994512 * fConst610)); + fConst719 = (0.0022554474797849425 * fConst617); + fConst720 = (0.0081196109272258076 * fConst610); + fConst721 = (0.0030072633063799232 * fConst620); + fConst722 = (0.016239221854451615 * fConst618); + fConst723 = (0.004510894959569885 * fConst622); + fConst724 = (0.00902178991913977 * fConst623); + fConst725 = (0.063531811392514792 * fConst39); + fConst726 = (0.0097062489627453008 * fConst45); + fConst727 = (0.016239221854451522 * fConst618); + fConst728 = (0.011411761886411183 * fConst619); + fConst729 = (0.0090217899191397718 * fConst620); + fConst730 = (0.022823523772822367 * fConst621); + fConst731 = (0.01353268487870966 * fConst622); + fConst732 = (0.027065369757419321 * fConst623); + fConst733 = (0.059595081393299554 * fConst49); + fConst734 = (0.063531811392514445 * fConst39); + fConst735 = (0.046824706809021698 * fConst42); + fConst736 = (0.029118746888235913 * fConst45); + fConst737 = (0.0067663424393548301 * fConst617); + fConst738 = (0.0076078412576074551 * fConst613); + fConst739 = (0.0081196109272257608 * fConst610); + fConst740 = (0.0079882333204877223 * fConst624); + fConst741 = (0.0 - (0.44721359549995937 * fConst623)); + fConst742 = (0.0 - (0.84852813742385946 * fConst621)); + fConst743 = (0.0 - (0.22360679774997969 * fConst622)); + fConst744 = (0.0 - (1.1627553482998934 * fConst618)); + fConst745 = (0.0 - (0.42426406871192973 * fConst619)); + fConst746 = (0.0 - (0.14907119849998646 * fConst620)); + fConst747 = (0.0 - (1.3576450198781731 * fConst624)); + fConst748 = (0.0 - (0.58137767414994668 * fConst610)); + fConst749 = (0.0 - (0.28284271247461978 * fConst613)); + fConst750 = (0.0 - (0.11180339887498984 * fConst617)); + fConst751 = (0.0 - (1.3056292813137786 * fConst20)); + fConst752 = (0.0 - ((4.5226701686664557 * fConst751) + (1.4434274804730605 * fConst20))); + fConst753 = (0.0 - ((3.1658691180665191 * fConst752) + (4.0 * fConst751))); + fConst754 = (fConst34 * (0.0 - ((2.7136021011998732 * fConst753) + (2.5 * fConst752)))); + fConst755 = (0.0 - (1.8557406538063874 * fConst26)); + fConst756 = (0.0 - ((6.3317382361330381 * fConst755) + (2.0515984856282001 * fConst26))); + fConst757 = (fConst79 * (0.0 - ((4.0704031517998098 * fConst756) + (6.0 * fConst755)))); + fConst758 = (0.009509801572009334 * fConst757); + fConst759 = (0.0 - (2.2156133258658013 * fConst30)); + fConst760 = (fConst32 * (0.0 - ((8.1408063035996197 * fConst759) + (2.449452694136097 * fConst30)))); + fConst761 = (0.010086667768959431 * fConst760); + fConst762 = (fConst753 * fConst87); + fConst763 = (fConst756 * fConst28); + fConst764 = (0.014264702358014003 * fConst763); + fConst765 = (fConst759 * fConst70); + fConst766 = (0.020173335537918863 * fConst765); + fConst767 = (fConst752 * fConst24); + fConst768 = (fConst755 * fConst75); + fConst769 = (0.028529404716028006 * fConst768); + fConst770 = (fConst751 * fConst84); + fConst771 = (0.011706176702255417 * fConst42); + fConst772 = (0.0070590901547238332 * fConst39); + fConst773 = (0.0 - (3.1401849173675503e-16 * fConst768)); + fConst774 = (0.0 - (1.5700924586837752e-16 * fConst763)); + fConst775 = (0.0 - (1.0000000000000004 * fConst765)); + fConst776 = (fConst66 * (0.0 - (2.4293332195283566 * fConst47))); + fConst777 = (0.0 - (6.6613381477509402e-16 * fConst776)); + fConst778 = (0.0 - (1.0467283057891834e-16 * fConst757)); + fConst779 = (0.0 - (0.50000000000000022 * fConst760)); + fConst780 = (0.0 - (1.4142135623730951 * fConst776)); + fConst781 = (0.0 - fConst770); + fConst782 = (0.0 - (1.4142135623730951 * fConst768)); + fConst783 = (0.0 - (0.5 * fConst767)); + fConst784 = (0.0 - (0.70710678118654757 * fConst763)); + fConst785 = (0.0 - (0.33333333333333331 * fConst762)); + fConst786 = (0.0 - (0.47140452079103168 * fConst757)); + fConst787 = (0.0 - (0.25 * fConst754)); + fConst788 = (1.343814095861187e-17 * fConst776); + fConst789 = (0.0050433338844797183 * fConst754); + fConst790 = (0.0067244451793062911 * fConst762); + fConst791 = (0.010086667768959437 * fConst767); + fConst792 = (0.020173335537918873 * fConst770); + fConst793 = (4.0101337658685596e-18 * fConst49); + fConst794 = (0.0097062489627452973 * fConst45); + fConst795 = (0.0 - (1.0000000000000002 * fConst770)); + fConst796 = (0.0 - (0.50000000000000011 * fConst767)); + fConst797 = (0.0 - (1.0000000000000009 * fConst765)); + fConst798 = (0.0 - (0.33333333333333343 * fConst762)); + fConst799 = (0.0 - (0.50000000000000044 * fConst760)); + fConst800 = (0.0 - (0.25000000000000006 * fConst754)); + fConst801 = (0.010086667768959428 * fConst760); + fConst802 = (2.6876281917223736e-17 * fConst776); + fConst803 = (0.020173335537918856 * fConst765); + fConst804 = (8.0202675317371177e-18 * fConst49); + fConst805 = (0.0070590901547238306 * fConst39); + fConst806 = (2.6876281917223739e-17 * fConst776); + fConst807 = (0.0067244451793062885 * fConst762); + fConst808 = (0.010086667768959433 * fConst767); + fConst809 = (0.020173335537918866 * fConst770); + fConst810 = (8.0202675317371192e-18 * fConst49); + fConst811 = (0.0097062489627452939 * fConst45); + fConst812 = (0.0050433338844797166 * fConst754); + fConst813 = (0.0 - (6.2803698347351007e-16 * fConst768)); + fConst814 = (0.0 - (0.99999999999999933 * fConst765)); + fConst815 = (0.0 - (3.1401849173675503e-16 * fConst763)); + fConst816 = (0.0 - (1.0000000000000007 * fConst765)); + fConst817 = (0.0 - (0.49999999999999967 * fConst760)); + fConst818 = (0.0 - (2.0934566115783667e-16 * fConst757)); + fConst819 = (0.0 - (0.50000000000000033 * fConst760)); } @@ -1500,27 +3117,27 @@ class mydsp : public dsp { } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec8[l7] = 0.0; + fRec10[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec7[l8] = 0.0; + fRec8[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0; + fRec7[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec13[l10] = 0.0; + fRec14[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec11[l11] = 0.0; + fRec15[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec10[l12] = 0.0; + fRec13[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -1528,55 +3145,55 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec17[l14] = 0.0; + fRec12[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0; + fRec11[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec14[l16] = 0.0; + fRec20[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec20[l17] = 0.0; + fRec21[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec21[l18] = 0.0; + fRec19[l18] = 0.0; } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec19[l19] = 0.0; + fRec22[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec18[l20] = 0.0; + fRec23[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec25[l21] = 0.0; + fRec18[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec26[l22] = 0.0; + fRec17[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec24[l23] = 0.0; + fRec28[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec27[l24] = 0.0; + fRec29[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec23[l25] = 0.0; + fRec27[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec22[l26] = 0.0; + fRec30[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { @@ -1584,23 +3201,23 @@ class mydsp : public dsp { } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec32[l28] = 0.0; + fRec26[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec30[l29] = 0.0; + fRec32[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec33[l30] = 0.0; + fRec25[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec29[l31] = 0.0; + fRec24[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec28[l32] = 0.0; + fRec0[l32] = 0.0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { @@ -1644,67 +3261,67 @@ class mydsp : public dsp { } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec41[l43] = 0.0; + fRec46[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec40[l44] = 0.0; + fRec41[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fRec49[l45] = 0.0; + fRec40[l45] = 0.0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec50[l46] = 0.0; + fRec51[l46] = 0.0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec48[l47] = 0.0; + fRec52[l47] = 0.0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fRec51[l48] = 0.0; + fRec50[l48] = 0.0; } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec52[l49] = 0.0; + fRec53[l49] = 0.0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - fRec47[l50] = 0.0; + fRec54[l50] = 0.0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { - fRec46[l51] = 0.0; + fRec49[l51] = 0.0; } for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { - fRec56[l52] = 0.0; + fRec55[l52] = 0.0; } for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { - fRec57[l53] = 0.0; + fRec48[l53] = 0.0; } for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { - fRec55[l54] = 0.0; + fRec47[l54] = 0.0; } for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { - fRec58[l55] = 0.0; + fRec60[l55] = 0.0; } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec59[l56] = 0.0; + fRec61[l56] = 0.0; } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec54[l57] = 0.0; + fRec59[l57] = 0.0; } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec53[l58] = 0.0; + fRec62[l58] = 0.0; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { @@ -1712,43 +3329,43 @@ class mydsp : public dsp { } for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { - fRec64[l60] = 0.0; + fRec58[l60] = 0.0; } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - fRec62[l61] = 0.0; + fRec64[l61] = 0.0; } for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { - fRec65[l62] = 0.0; + fRec57[l62] = 0.0; } for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { - fRec66[l63] = 0.0; + fRec56[l63] = 0.0; } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - fRec61[l64] = 0.0; + fRec68[l64] = 0.0; } for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { - fRec60[l65] = 0.0; + fRec69[l65] = 0.0; } for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fRec70[l66] = 0.0; + fRec67[l66] = 0.0; } for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - fRec71[l67] = 0.0; + fRec70[l67] = 0.0; } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { - fRec69[l68] = 0.0; + fRec66[l68] = 0.0; } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { - fRec72[l69] = 0.0; + fRec65[l69] = 0.0; } for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { @@ -1756,19 +3373,19 @@ class mydsp : public dsp { } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec68[l71] = 0.0; + fRec74[l71] = 0.0; } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { - fRec67[l72] = 0.0; + fRec72[l72] = 0.0; } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { - fRec77[l73] = 0.0; + fRec71[l73] = 0.0; } for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { - fRec78[l74] = 0.0; + fRec77[l74] = 0.0; } for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { @@ -1776,139 +3393,139 @@ class mydsp : public dsp { } for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { - fRec79[l76] = 0.0; + fRec75[l76] = 0.0; } for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { - fRec80[l77] = 0.0; + fRec81[l77] = 0.0; } for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { - fRec75[l78] = 0.0; + fRec82[l78] = 0.0; } for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { - fRec74[l79] = 0.0; + fRec80[l79] = 0.0; } for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { - fRec85[l80] = 0.0; + fRec83[l80] = 0.0; } for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { - fRec86[l81] = 0.0; + fRec84[l81] = 0.0; } for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { - fRec84[l82] = 0.0; + fRec79[l82] = 0.0; } for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { - fRec87[l83] = 0.0; + fRec78[l83] = 0.0; } for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { - fRec88[l84] = 0.0; + fRec89[l84] = 0.0; } for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { - fRec83[l85] = 0.0; + fRec90[l85] = 0.0; } for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { - fRec89[l86] = 0.0; + fRec88[l86] = 0.0; } for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { - fRec82[l87] = 0.0; + fRec91[l87] = 0.0; } for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { - fRec81[l88] = 0.0; + fRec92[l88] = 0.0; } for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { - fRec94[l89] = 0.0; + fRec87[l89] = 0.0; } for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { - fRec95[l90] = 0.0; + fRec93[l90] = 0.0; } for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { - fRec93[l91] = 0.0; + fRec86[l91] = 0.0; } for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { - fRec96[l92] = 0.0; + fRec85[l92] = 0.0; } for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { - fRec97[l93] = 0.0; + fRec33[l93] = 0.0; } for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { - fRec92[l94] = 0.0; + fRec98[l94] = 0.0; } for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { - fRec98[l95] = 0.0; + fRec99[l95] = 0.0; } for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { - fRec91[l96] = 0.0; + fRec97[l96] = 0.0; } for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { - fRec90[l97] = 0.0; + fRec100[l97] = 0.0; } for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { - fRec103[l98] = 0.0; + fRec96[l98] = 0.0; } for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { - fRec104[l99] = 0.0; + fRec95[l99] = 0.0; } for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { - fRec102[l100] = 0.0; + fRec105[l100] = 0.0; } for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { - fRec105[l101] = 0.0; + fRec106[l101] = 0.0; } for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { - fRec106[l102] = 0.0; + fRec104[l102] = 0.0; } for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { - fRec101[l103] = 0.0; + fRec107[l103] = 0.0; } for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { - fRec107[l104] = 0.0; + fRec108[l104] = 0.0; } for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { - fRec100[l105] = 0.0; + fRec103[l105] = 0.0; } for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { - fRec99[l106] = 0.0; + fRec109[l106] = 0.0; } for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { - fRec112[l107] = 0.0; + fRec102[l107] = 0.0; } for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { - fRec113[l108] = 0.0; + fRec101[l108] = 0.0; } for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { - fRec111[l109] = 0.0; + fRec113[l109] = 0.0; } for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { @@ -1916,155 +3533,155 @@ class mydsp : public dsp { } for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { - fRec115[l111] = 0.0; + fRec112[l111] = 0.0; } for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { - fRec110[l112] = 0.0; + fRec115[l112] = 0.0; } for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { - fRec116[l113] = 0.0; + fRec111[l113] = 0.0; } for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { - fRec109[l114] = 0.0; + fRec110[l114] = 0.0; } for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { - fRec108[l115] = 0.0; + fRec118[l115] = 0.0; } for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { - fRec121[l116] = 0.0; + fRec117[l116] = 0.0; } for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { - fRec122[l117] = 0.0; + fRec116[l117] = 0.0; } for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { - fRec120[l118] = 0.0; + fRec123[l118] = 0.0; } for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { - fRec123[l119] = 0.0; + fRec124[l119] = 0.0; } for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { - fRec124[l120] = 0.0; + fRec122[l120] = 0.0; } for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { - fRec119[l121] = 0.0; + fRec125[l121] = 0.0; } for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { - fRec125[l122] = 0.0; + fRec126[l122] = 0.0; } for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { - fRec118[l123] = 0.0; + fRec121[l123] = 0.0; } for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { - fRec117[l124] = 0.0; + fRec127[l124] = 0.0; } for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { - fRec130[l125] = 0.0; + fRec120[l125] = 0.0; } for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { - fRec131[l126] = 0.0; + fRec119[l126] = 0.0; } for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { - fRec129[l127] = 0.0; + fRec132[l127] = 0.0; } for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { - fRec132[l128] = 0.0; + fRec133[l128] = 0.0; } for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { - fRec133[l129] = 0.0; + fRec131[l129] = 0.0; } for (int l130 = 0; (l130 < 2); l130 = (l130 + 1)) { - fRec128[l130] = 0.0; + fRec134[l130] = 0.0; } for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { - fRec134[l131] = 0.0; + fRec135[l131] = 0.0; } for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { - fRec127[l132] = 0.0; + fRec130[l132] = 0.0; } for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { - fRec126[l133] = 0.0; + fRec136[l133] = 0.0; } for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { - fRec0[l134] = 0.0; + fRec129[l134] = 0.0; } for (int l135 = 0; (l135 < 2); l135 = (l135 + 1)) { - fRec135[l135] = 0.0; + fRec128[l135] = 0.0; } for (int l136 = 0; (l136 < 2); l136 = (l136 + 1)) { - fRec141[l136] = 0.0; + fRec94[l136] = 0.0; } for (int l137 = 0; (l137 < 2); l137 = (l137 + 1)) { - fRec142[l137] = 0.0; + fRec137[l137] = 0.0; } for (int l138 = 0; (l138 < 2); l138 = (l138 + 1)) { - fRec140[l138] = 0.0; + fRec138[l138] = 0.0; } for (int l139 = 0; (l139 < 2); l139 = (l139 + 1)) { - fRec143[l139] = 0.0; + fRec139[l139] = 0.0; } for (int l140 = 0; (l140 < 2); l140 = (l140 + 1)) { - fRec144[l140] = 0.0; + fRec145[l140] = 0.0; } for (int l141 = 0; (l141 < 2); l141 = (l141 + 1)) { - fRec139[l141] = 0.0; + fRec146[l141] = 0.0; } for (int l142 = 0; (l142 < 2); l142 = (l142 + 1)) { - fRec145[l142] = 0.0; + fRec144[l142] = 0.0; } for (int l143 = 0; (l143 < 2); l143 = (l143 + 1)) { - fRec138[l143] = 0.0; + fRec147[l143] = 0.0; } for (int l144 = 0; (l144 < 2); l144 = (l144 + 1)) { - fRec137[l144] = 0.0; + fRec148[l144] = 0.0; } for (int l145 = 0; (l145 < 2); l145 = (l145 + 1)) { - fRec150[l145] = 0.0; + fRec143[l145] = 0.0; } for (int l146 = 0; (l146 < 2); l146 = (l146 + 1)) { - fRec151[l146] = 0.0; + fRec149[l146] = 0.0; } for (int l147 = 0; (l147 < 2); l147 = (l147 + 1)) { - fRec149[l147] = 0.0; + fRec142[l147] = 0.0; } for (int l148 = 0; (l148 < 2); l148 = (l148 + 1)) { - fRec152[l148] = 0.0; + fRec141[l148] = 0.0; } for (int l149 = 0; (l149 < 2); l149 = (l149 + 1)) { @@ -2072,51 +3689,51 @@ class mydsp : public dsp { } for (int l150 = 0; (l150 < 2); l150 = (l150 + 1)) { - fRec148[l150] = 0.0; + fRec154[l150] = 0.0; } for (int l151 = 0; (l151 < 2); l151 = (l151 + 1)) { - fRec154[l151] = 0.0; + fRec152[l151] = 0.0; } for (int l152 = 0; (l152 < 2); l152 = (l152 + 1)) { - fRec147[l152] = 0.0; + fRec155[l152] = 0.0; } for (int l153 = 0; (l153 < 2); l153 = (l153 + 1)) { - fRec146[l153] = 0.0; + fRec156[l153] = 0.0; } for (int l154 = 0; (l154 < 2); l154 = (l154 + 1)) { - fRec157[l154] = 0.0; + fRec151[l154] = 0.0; } for (int l155 = 0; (l155 < 2); l155 = (l155 + 1)) { - fRec158[l155] = 0.0; + fRec150[l155] = 0.0; } for (int l156 = 0; (l156 < 2); l156 = (l156 + 1)) { - fRec156[l156] = 0.0; + fRec160[l156] = 0.0; } for (int l157 = 0; (l157 < 2); l157 = (l157 + 1)) { - fRec155[l157] = 0.0; + fRec161[l157] = 0.0; } for (int l158 = 0; (l158 < 2); l158 = (l158 + 1)) { - fRec161[l158] = 0.0; + fRec159[l158] = 0.0; } for (int l159 = 0; (l159 < 2); l159 = (l159 + 1)) { - fRec160[l159] = 0.0; + fRec162[l159] = 0.0; } for (int l160 = 0; (l160 < 2); l160 = (l160 + 1)) { - fRec159[l160] = 0.0; + fRec158[l160] = 0.0; } for (int l161 = 0; (l161 < 2); l161 = (l161 + 1)) { - fRec166[l161] = 0.0; + fRec157[l161] = 0.0; } for (int l162 = 0; (l162 < 2); l162 = (l162 + 1)) { @@ -2124,11 +3741,11 @@ class mydsp : public dsp { } for (int l163 = 0; (l163 < 2); l163 = (l163 + 1)) { - fRec165[l163] = 0.0; + fRec168[l163] = 0.0; } for (int l164 = 0; (l164 < 2); l164 = (l164 + 1)) { - fRec168[l164] = 0.0; + fRec166[l164] = 0.0; } for (int l165 = 0; (l165 < 2); l165 = (l165 + 1)) { @@ -2136,71 +3753,71 @@ class mydsp : public dsp { } for (int l166 = 0; (l166 < 2); l166 = (l166 + 1)) { - fRec164[l166] = 0.0; + fRec170[l166] = 0.0; } for (int l167 = 0; (l167 < 2); l167 = (l167 + 1)) { - fRec170[l167] = 0.0; + fRec165[l167] = 0.0; } for (int l168 = 0; (l168 < 2); l168 = (l168 + 1)) { - fRec163[l168] = 0.0; + fRec171[l168] = 0.0; } for (int l169 = 0; (l169 < 2); l169 = (l169 + 1)) { - fRec162[l169] = 0.0; + fRec164[l169] = 0.0; } for (int l170 = 0; (l170 < 2); l170 = (l170 + 1)) { - fRec174[l170] = 0.0; + fRec163[l170] = 0.0; } for (int l171 = 0; (l171 < 2); l171 = (l171 + 1)) { - fRec175[l171] = 0.0; + fRec174[l171] = 0.0; } for (int l172 = 0; (l172 < 2); l172 = (l172 + 1)) { - fRec173[l172] = 0.0; + fRec175[l172] = 0.0; } for (int l173 = 0; (l173 < 2); l173 = (l173 + 1)) { - fRec176[l173] = 0.0; + fRec173[l173] = 0.0; } for (int l174 = 0; (l174 < 2); l174 = (l174 + 1)) { - fRec177[l174] = 0.0; + fRec172[l174] = 0.0; } for (int l175 = 0; (l175 < 2); l175 = (l175 + 1)) { - fRec172[l175] = 0.0; + fRec179[l175] = 0.0; } for (int l176 = 0; (l176 < 2); l176 = (l176 + 1)) { - fRec171[l176] = 0.0; + fRec180[l176] = 0.0; } for (int l177 = 0; (l177 < 2); l177 = (l177 + 1)) { - fRec181[l177] = 0.0; + fRec178[l177] = 0.0; } for (int l178 = 0; (l178 < 2); l178 = (l178 + 1)) { - fRec182[l178] = 0.0; + fRec181[l178] = 0.0; } for (int l179 = 0; (l179 < 2); l179 = (l179 + 1)) { - fRec180[l179] = 0.0; + fRec182[l179] = 0.0; } for (int l180 = 0; (l180 < 2); l180 = (l180 + 1)) { - fRec183[l180] = 0.0; + fRec177[l180] = 0.0; } for (int l181 = 0; (l181 < 2); l181 = (l181 + 1)) { - fRec179[l181] = 0.0; + fRec176[l181] = 0.0; } for (int l182 = 0; (l182 < 2); l182 = (l182 + 1)) { - fRec178[l182] = 0.0; + fRec140[l182] = 0.0; } for (int l183 = 0; (l183 < 2); l183 = (l183 + 1)) { @@ -2220,67 +3837,67 @@ class mydsp : public dsp { } for (int l187 = 0; (l187 < 2); l187 = (l187 + 1)) { - fRec185[l187] = 0.0; + fRec190[l187] = 0.0; } for (int l188 = 0; (l188 < 2); l188 = (l188 + 1)) { - fRec184[l188] = 0.0; + fRec185[l188] = 0.0; } for (int l189 = 0; (l189 < 2); l189 = (l189 + 1)) { - fRec193[l189] = 0.0; + fRec184[l189] = 0.0; } for (int l190 = 0; (l190 < 2); l190 = (l190 + 1)) { - fRec194[l190] = 0.0; + fRec193[l190] = 0.0; } for (int l191 = 0; (l191 < 2); l191 = (l191 + 1)) { - fRec192[l191] = 0.0; + fRec194[l191] = 0.0; } for (int l192 = 0; (l192 < 2); l192 = (l192 + 1)) { - fRec195[l192] = 0.0; + fRec192[l192] = 0.0; } for (int l193 = 0; (l193 < 2); l193 = (l193 + 1)) { - fRec196[l193] = 0.0; + fRec191[l193] = 0.0; } for (int l194 = 0; (l194 < 2); l194 = (l194 + 1)) { - fRec191[l194] = 0.0; + fRec198[l194] = 0.0; } for (int l195 = 0; (l195 < 2); l195 = (l195 + 1)) { - fRec190[l195] = 0.0; + fRec199[l195] = 0.0; } for (int l196 = 0; (l196 < 2); l196 = (l196 + 1)) { - fRec136[l196] = 0.0; + fRec197[l196] = 0.0; } for (int l197 = 0; (l197 < 2); l197 = (l197 + 1)) { - fRec197[l197] = 0.0; + fRec200[l197] = 0.0; } for (int l198 = 0; (l198 < 2); l198 = (l198 + 1)) { - fRec198[l198] = 0.0; + fRec201[l198] = 0.0; } for (int l199 = 0; (l199 < 2); l199 = (l199 + 1)) { - fRec199[l199] = 0.0; + fRec196[l199] = 0.0; } for (int l200 = 0; (l200 < 2); l200 = (l200 + 1)) { - fRec200[l200] = 0.0; + fRec195[l200] = 0.0; } for (int l201 = 0; (l201 < 2); l201 = (l201 + 1)) { - fRec204[l201] = 0.0; + fRec183[l201] = 0.0; } for (int l202 = 0; (l202 < 2); l202 = (l202 + 1)) { - fRec205[l202] = 0.0; + fRec202[l202] = 0.0; } for (int l203 = 0; (l203 < 2); l203 = (l203 + 1)) { @@ -2288,7 +3905,7 @@ class mydsp : public dsp { } for (int l204 = 0; (l204 < 2); l204 = (l204 + 1)) { - fRec202[l204] = 0.0; + fRec208[l204] = 0.0; } for (int l205 = 0; (l205 < 2); l205 = (l205 + 1)) { @@ -2296,11 +3913,11 @@ class mydsp : public dsp { } for (int l206 = 0; (l206 < 2); l206 = (l206 + 1)) { - fRec210[l206] = 0.0; + fRec207[l206] = 0.0; } for (int l207 = 0; (l207 < 2); l207 = (l207 + 1)) { - fRec208[l207] = 0.0; + fRec210[l207] = 0.0; } for (int l208 = 0; (l208 < 2); l208 = (l208 + 1)) { @@ -2308,87 +3925,87 @@ class mydsp : public dsp { } for (int l209 = 0; (l209 < 2); l209 = (l209 + 1)) { - fRec207[l209] = 0.0; + fRec206[l209] = 0.0; } for (int l210 = 0; (l210 < 2); l210 = (l210 + 1)) { - fRec206[l210] = 0.0; + fRec205[l210] = 0.0; } for (int l211 = 0; (l211 < 2); l211 = (l211 + 1)) { - fRec216[l211] = 0.0; + fRec215[l211] = 0.0; } for (int l212 = 0; (l212 < 2); l212 = (l212 + 1)) { - fRec217[l212] = 0.0; + fRec216[l212] = 0.0; } for (int l213 = 0; (l213 < 2); l213 = (l213 + 1)) { - fRec215[l213] = 0.0; + fRec214[l213] = 0.0; } for (int l214 = 0; (l214 < 2); l214 = (l214 + 1)) { - fRec218[l214] = 0.0; + fRec217[l214] = 0.0; } for (int l215 = 0; (l215 < 2); l215 = (l215 + 1)) { - fRec219[l215] = 0.0; + fRec218[l215] = 0.0; } for (int l216 = 0; (l216 < 2); l216 = (l216 + 1)) { - fRec214[l216] = 0.0; + fRec213[l216] = 0.0; } for (int l217 = 0; (l217 < 2); l217 = (l217 + 1)) { - fRec220[l217] = 0.0; + fRec212[l217] = 0.0; } for (int l218 = 0; (l218 < 2); l218 = (l218 + 1)) { - fRec213[l218] = 0.0; + fRec221[l218] = 0.0; } for (int l219 = 0; (l219 < 2); l219 = (l219 + 1)) { - fRec212[l219] = 0.0; + fRec222[l219] = 0.0; } for (int l220 = 0; (l220 < 2); l220 = (l220 + 1)) { - fRec224[l220] = 0.0; + fRec220[l220] = 0.0; } for (int l221 = 0; (l221 < 2); l221 = (l221 + 1)) { - fRec225[l221] = 0.0; + fRec219[l221] = 0.0; } for (int l222 = 0; (l222 < 2); l222 = (l222 + 1)) { - fRec223[l222] = 0.0; + fRec204[l222] = 0.0; } for (int l223 = 0; (l223 < 2); l223 = (l223 + 1)) { - fRec226[l223] = 0.0; + fRec223[l223] = 0.0; } for (int l224 = 0; (l224 < 2); l224 = (l224 + 1)) { - fRec227[l224] = 0.0; + fRec224[l224] = 0.0; } for (int l225 = 0; (l225 < 2); l225 = (l225 + 1)) { - fRec222[l225] = 0.0; + fRec225[l225] = 0.0; } for (int l226 = 0; (l226 < 2); l226 = (l226 + 1)) { - fRec221[l226] = 0.0; + fRec226[l226] = 0.0; } for (int l227 = 0; (l227 < 2); l227 = (l227 + 1)) { - fRec232[l227] = 0.0; + fRec227[l227] = 0.0; } for (int l228 = 0; (l228 < 2); l228 = (l228 + 1)) { - fRec233[l228] = 0.0; + fRec228[l228] = 0.0; } for (int l229 = 0; (l229 < 2); l229 = (l229 + 1)) { - fRec231[l229] = 0.0; + fRec229[l229] = 0.0; } for (int l230 = 0; (l230 < 2); l230 = (l230 + 1)) { @@ -2400,7 +4017,7 @@ class mydsp : public dsp { } for (int l232 = 0; (l232 < 2); l232 = (l232 + 1)) { - fRec230[l232] = 0.0; + fRec233[l232] = 0.0; } for (int l233 = 0; (l233 < 2); l233 = (l233 + 1)) { @@ -2408,87 +4025,87 @@ class mydsp : public dsp { } for (int l234 = 0; (l234 < 2); l234 = (l234 + 1)) { - fRec229[l234] = 0.0; + fRec232[l234] = 0.0; } for (int l235 = 0; (l235 < 2); l235 = (l235 + 1)) { - fRec228[l235] = 0.0; + fRec231[l235] = 0.0; } for (int l236 = 0; (l236 < 2); l236 = (l236 + 1)) { - fRec240[l236] = 0.0; + fRec241[l236] = 0.0; } for (int l237 = 0; (l237 < 2); l237 = (l237 + 1)) { - fRec241[l237] = 0.0; + fRec242[l237] = 0.0; } for (int l238 = 0; (l238 < 2); l238 = (l238 + 1)) { - fRec239[l238] = 0.0; + fRec240[l238] = 0.0; } for (int l239 = 0; (l239 < 2); l239 = (l239 + 1)) { - fRec242[l239] = 0.0; + fRec243[l239] = 0.0; } for (int l240 = 0; (l240 < 2); l240 = (l240 + 1)) { - fRec243[l240] = 0.0; + fRec244[l240] = 0.0; } for (int l241 = 0; (l241 < 2); l241 = (l241 + 1)) { - fRec238[l241] = 0.0; + fRec239[l241] = 0.0; } for (int l242 = 0; (l242 < 2); l242 = (l242 + 1)) { - fRec237[l242] = 0.0; + fRec245[l242] = 0.0; } for (int l243 = 0; (l243 < 2); l243 = (l243 + 1)) { - fRec201[l243] = 0.0; + fRec238[l243] = 0.0; } for (int l244 = 0; (l244 < 2); l244 = (l244 + 1)) { - fRec244[l244] = 0.0; + fRec237[l244] = 0.0; } for (int l245 = 0; (l245 < 2); l245 = (l245 + 1)) { - fRec245[l245] = 0.0; + fRec250[l245] = 0.0; } for (int l246 = 0; (l246 < 2); l246 = (l246 + 1)) { - fRec246[l246] = 0.0; + fRec251[l246] = 0.0; } for (int l247 = 0; (l247 < 2); l247 = (l247 + 1)) { - fRec247[l247] = 0.0; + fRec249[l247] = 0.0; } for (int l248 = 0; (l248 < 2); l248 = (l248 + 1)) { - fRec248[l248] = 0.0; + fRec252[l248] = 0.0; } for (int l249 = 0; (l249 < 2); l249 = (l249 + 1)) { - fRec249[l249] = 0.0; + fRec253[l249] = 0.0; } for (int l250 = 0; (l250 < 2); l250 = (l250 + 1)) { - fRec250[l250] = 0.0; + fRec248[l250] = 0.0; } for (int l251 = 0; (l251 < 2); l251 = (l251 + 1)) { - fRec251[l251] = 0.0; + fRec254[l251] = 0.0; } for (int l252 = 0; (l252 < 2); l252 = (l252 + 1)) { - fRec252[l252] = 0.0; + fRec247[l252] = 0.0; } for (int l253 = 0; (l253 < 2); l253 = (l253 + 1)) { - fRec253[l253] = 0.0; + fRec246[l253] = 0.0; } for (int l254 = 0; (l254 < 2); l254 = (l254 + 1)) { - fRec254[l254] = 0.0; + fRec230[l254] = 0.0; } for (int l255 = 0; (l255 < 2); l255 = (l255 + 1)) { @@ -2631,9 +4248,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -2643,157 +4260,157 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30a7140", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x28d0380", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32410d0", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a150e0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30b2640", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x28db6b0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30bbfe0", &fVbargraph2, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29a99e0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3237cf0", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph42, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b4f7d0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32ce850", &fVbargraph37, -70.0, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2af6230", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30ca880", &fVbargraph3, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28e9f50", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30d5f10", &fVbargraph4, -70.0, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ab76c0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30e15a0", &fVbargraph5, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x299ec10", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3275670", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29e7e50", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32dcfa0", &fVbargraph38, -70.0, 6.0); + ui_interface->declare(&fVbargraph51, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bd13a0", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3283db0", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a0bb40", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30f4160", &fVbargraph6, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x28fca30", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3102d30", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2943580", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3111900", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a92a70", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31205b0", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2992280", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3267060", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b43580", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x332b260", &fVbargraph42, -70.0, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ae7030", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32952a0", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b32810", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3301e70", &fVbargraph40, -70.0, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b06670", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3135c70", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2911f30", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3146530", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ac9670", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3156df0", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2956160", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3167790", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a811a0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3178210", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29bc810", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x322c850", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a28ab0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x331ac70", &fVbargraph41, -70.0, 6.0); + ui_interface->declare(&fVbargraph53, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c00a60", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3254500", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29fcbb0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32f17a0", &fVbargraph39, -70.0, 6.0); + ui_interface->declare(&fVbargraph52, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2be7040", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3218ee0", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a3c5d0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3192850", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x292c2d0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31a6650", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2981b80", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31ba460", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2aa8bf0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31ce340", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x296c460", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31e2300", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a6def0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31f63a0", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29d27b0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -2814,256 +4431,256 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph21, "osc", "/output1"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31fb960", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "osc", "/output1 -70 6"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2931510", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph22, "osc", "/output2"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3205910", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "osc", "/output2 -70 6"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x29d8140", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph32, "osc", "/output3"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x329a790", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "osc", "/output3 -70 6"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a418c0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph33, "osc", "/output4"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32a3b00", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "osc", "/output4 -70 6"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a4aff0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph34, "osc", "/output5"); - ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32acf50", &fVbargraph34, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "osc", "/output5 -70 6"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a52410", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph35, "osc", "/output6"); - ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32b4340", &fVbargraph35, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "osc", "/output6 -70 6"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2a57db0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph36, "osc", "/output7"); - ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32c32f0", &fVbargraph36, -70.0, 6.0); + ui_interface->declare(&fVbargraph33, "osc", "/output7 -70 6"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ad2b70", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph43, "osc", "/output8"); - ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3333900", &fVbargraph43, -70.0, 6.0); + ui_interface->declare(&fVbargraph37, "osc", "/output8 -70 6"); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b0cac0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph44, "osc", "/output9"); - ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3341c70", &fVbargraph44, -70.0, 6.0); + ui_interface->declare(&fVbargraph38, "osc", "/output9 -70 6"); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b18fa0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph45, "osc", "/output10"); - ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3350290", &fVbargraph45, -70.0, 6.0); + ui_interface->declare(&fVbargraph39, "osc", "/output10 -70 6"); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b21860", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph46, "osc", "/output11"); - ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x335ce90", &fVbargraph46, -70.0, 6.0); + ui_interface->declare(&fVbargraph43, "osc", "/output11 -70 6"); + ui_interface->declare(&fVbargraph43, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b5c9c0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph47, "osc", "/output12"); - ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33674b0", &fVbargraph47, -70.0, 6.0); + ui_interface->declare(&fVbargraph44, "osc", "/output12 -70 6"); + ui_interface->declare(&fVbargraph44, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b6d0d0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph48, "osc", "/output13"); - ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3370c60", &fVbargraph48, -70.0, 6.0); + ui_interface->declare(&fVbargraph45, "osc", "/output13 -70 6"); + ui_interface->declare(&fVbargraph45, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b7bdf0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph49, "osc", "/output14"); - ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x337ac60", &fVbargraph49, -70.0, 6.0); + ui_interface->declare(&fVbargraph46, "osc", "/output14 -70 6"); + ui_interface->declare(&fVbargraph46, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2b8b520", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph50, "osc", "/output15"); - ui_interface->declare(&fVbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3382660", &fVbargraph50, -70.0, 6.0); + ui_interface->declare(&fVbargraph47, "osc", "/output15 -70 6"); + ui_interface->declare(&fVbargraph47, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ba0b50", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph51, "osc", "/output16"); - ui_interface->declare(&fVbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x338bd60", &fVbargraph51, -70.0, 6.0); + ui_interface->declare(&fVbargraph48, "osc", "/output16 -70 6"); + ui_interface->declare(&fVbargraph48, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bad260", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph52, "osc", "/output17"); - ui_interface->declare(&fVbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3395750", &fVbargraph52, -70.0, 6.0); + ui_interface->declare(&fVbargraph49, "osc", "/output17 -70 6"); + ui_interface->declare(&fVbargraph49, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bb8180", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph53, "osc", "/output18"); - ui_interface->declare(&fVbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x339f010", &fVbargraph53, -70.0, 6.0); + ui_interface->declare(&fVbargraph50, "osc", "/output18 -70 6"); + ui_interface->declare(&fVbargraph50, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bc0c60", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph54, "osc", "/output19"); + ui_interface->declare(&fVbargraph54, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33b5120", &fVbargraph54, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c13c10", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph55, "osc", "/output20"); + ui_interface->declare(&fVbargraph55, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33c5dc0", &fVbargraph55, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c2e680", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph56, "osc", "/output21"); + ui_interface->declare(&fVbargraph56, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33d5ee0", &fVbargraph56, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c46090", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph57, "osc", "/output22"); + ui_interface->declare(&fVbargraph57, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph57, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33e6570", &fVbargraph57, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c5cff0", &fVbargraph57, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph58, "osc", "/output23"); + ui_interface->declare(&fVbargraph58, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph58, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33f06b0", &fVbargraph58, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c78370", &fVbargraph58, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph59, "osc", "/output24"); + ui_interface->declare(&fVbargraph59, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph59, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33fa2d0", &fVbargraph59, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c8bd40", &fVbargraph59, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph60, "osc", "/output25"); + ui_interface->declare(&fVbargraph60, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph60, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3404390", &fVbargraph60, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c9dcb0", &fVbargraph60, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("Outputs 26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph61, "osc", "/output26"); + ui_interface->declare(&fVbargraph61, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph61, "unit", "dB"); - ui_interface->addVerticalBargraph("0x340e350", &fVbargraph61, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2caf470", &fVbargraph61, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph62, "osc", "/output27"); + ui_interface->declare(&fVbargraph62, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph62, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3423b60", &fVbargraph62, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2cce860", &fVbargraph62, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph63, "osc", "/output28"); + ui_interface->declare(&fVbargraph63, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph63, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3431100", &fVbargraph63, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ce2640", &fVbargraph63, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph64, "osc", "/output29"); + ui_interface->declare(&fVbargraph64, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph64, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34419d0", &fVbargraph64, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2cf9030", &fVbargraph64, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph65, "osc", "/output30"); + ui_interface->declare(&fVbargraph65, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph65, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3451640", &fVbargraph65, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2d0e720", &fVbargraph65, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph66, "osc", "/output31"); + ui_interface->declare(&fVbargraph66, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph66, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34674a0", &fVbargraph66, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2d2c9c0", &fVbargraph66, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph67, "osc", "/output32"); + ui_interface->declare(&fVbargraph67, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph67, "unit", "dB"); - ui_interface->addVerticalBargraph("0x347a9e0", &fVbargraph67, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2d46ef0", &fVbargraph67, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph68, "osc", "/output33"); + ui_interface->declare(&fVbargraph68, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph68, "unit", "dB"); - ui_interface->addVerticalBargraph("0x348ce70", &fVbargraph68, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2d626a0", &fVbargraph68, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph69, "osc", "/output34"); + ui_interface->declare(&fVbargraph69, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph69, "unit", "dB"); - ui_interface->addVerticalBargraph("0x349d540", &fVbargraph69, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2d7c490", &fVbargraph69, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph70, "osc", "/output35"); + ui_interface->declare(&fVbargraph70, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph70, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34aea90", &fVbargraph70, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2d96700", &fVbargraph70, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph71, "osc", "/output36"); + ui_interface->declare(&fVbargraph71, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph71, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34bfc90", &fVbargraph71, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2daea80", &fVbargraph71, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph72, "osc", "/output37"); + ui_interface->declare(&fVbargraph72, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph72, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34d1910", &fVbargraph72, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2dca200", &fVbargraph72, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph73, "osc", "/output38"); + ui_interface->declare(&fVbargraph73, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph73, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34e5ab0", &fVbargraph73, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2de6dd0", &fVbargraph73, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph74, "osc", "/output39"); + ui_interface->declare(&fVbargraph74, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph74, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34ef680", &fVbargraph74, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2dfc640", &fVbargraph74, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph75, "osc", "/output40"); + ui_interface->declare(&fVbargraph75, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph75, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34f8f40", &fVbargraph75, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2e0e050", &fVbargraph75, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph76, "osc", "/output41"); + ui_interface->declare(&fVbargraph76, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph76, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3502ac0", &fVbargraph76, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2e216a0", &fVbargraph76, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph77, "osc", "/output42"); + ui_interface->declare(&fVbargraph77, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph77, "unit", "dB"); - ui_interface->addVerticalBargraph("0x350c930", &fVbargraph77, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2e36d00", &fVbargraph77, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph78, "osc", "/output43"); + ui_interface->declare(&fVbargraph78, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph78, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35162b0", &fVbargraph78, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2e484d0", &fVbargraph78, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph79, "osc", "/output44"); + ui_interface->declare(&fVbargraph79, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph79, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35200d0", &fVbargraph79, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2e5a5c0", &fVbargraph79, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph80, "osc", "/output45"); + ui_interface->declare(&fVbargraph80, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph80, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3529df0", &fVbargraph80, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2e6f180", &fVbargraph80, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph81, "osc", "/output46"); + ui_interface->declare(&fVbargraph81, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph81, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3533bf0", &fVbargraph81, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2e850e0", &fVbargraph81, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph82, "osc", "/output47"); + ui_interface->declare(&fVbargraph82, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph82, "unit", "dB"); - ui_interface->addVerticalBargraph("0x353db00", &fVbargraph82, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ea36f0", &fVbargraph82, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph83, "osc", "/output48"); + ui_interface->declare(&fVbargraph83, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph83, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3547710", &fVbargraph83, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2eb5450", &fVbargraph83, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph84, "osc", "/output49"); + ui_interface->declare(&fVbargraph84, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph84, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35517b0", &fVbargraph84, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ec6de0", &fVbargraph84, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph85, "osc", "/output50"); + ui_interface->declare(&fVbargraph85, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph85, "unit", "dB"); - ui_interface->addVerticalBargraph("0x355bb10", &fVbargraph85, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ed8890", &fVbargraph85, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -3204,1077 +4821,756 @@ class mydsp : public dsp { fRec4[0] = max((fRec4[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph1 = FAUSTFLOAT(fRec4[0]); double fTemp4 = (0.021994295969128601 * fTemp3); - double fTemp5 = (fRec3[0] * double(input3[i])); + double fTemp5 = (fRec3[0] * double(input6[i])); fRec9[0] = (fRec9[1] + fRec8[1]); - fRec8[0] = (fSlow8 * ((fSlow3 * fTemp5) - (fSlow9 * fRec9[0]))); + fRec10[0] = (fRec10[1] + fRec9[1]); + fRec8[0] = (fSlow11 * ((fSlow3 * fTemp5) - ((fSlow13 * fRec9[0]) + (fSlow12 * fRec10[0])))); double fTemp6 = (fRec8[0] + (fSlow4 * fTemp5)); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph2 = FAUSTFLOAT(fRec7[0]); - double fTemp7 = (1.3467622079046435e-18 * fTemp6); - double fTemp8 = (fRec3[0] * double(input6[i])); - fRec12[0] = (fRec12[1] + fRec11[1]); - fRec13[0] = (fRec13[1] + fRec12[1]); - fRec11[0] = (fSlow11 * ((fSlow3 * fTemp8) - ((fSlow13 * fRec12[0]) + (fSlow12 * fRec13[0])))); - double fTemp9 = (fRec11[0] + (fSlow4 * fTemp8)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = (0.028394513999997331 * fTemp9); - double fTemp11 = (fRec3[0] * double(input7[i])); - fRec16[0] = (fRec16[1] + fRec15[1]); - fRec17[0] = (fRec17[1] + fRec16[1]); - fRec15[0] = (fSlow11 * ((fSlow3 * fTemp11) - ((fSlow13 * fRec16[0]) + (fSlow12 * fRec17[0])))); - double fTemp12 = (fRec15[0] + (fSlow4 * fTemp11)); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph4 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = (3.0114518464024883e-18 * fTemp12); - double fTemp14 = (fRec3[0] * double(input8[i])); + double fTemp7 = (0.028394513999997331 * fTemp6); + double fTemp8 = (fRec3[0] * double(input12[i])); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec15[0] = (fRec15[1] + fRec14[1]); + fRec13[0] = (fSlow15 * ((fSlow3 * fTemp8) - ((fSlow17 * fRec14[0]) + (fSlow16 * fRec15[0])))); + fRec16[0] = (fRec16[1] + fRec12[1]); + fRec12[0] = (fSlow14 * (fRec13[0] - (fSlow18 * fRec16[0]))); + double fTemp9 = (fRec12[0] + (fSlow4 * fTemp8)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph3 = FAUSTFLOAT(fRec11[0]); + double fTemp10 = (0.033596842045264641 * fTemp9); + double fTemp11 = (fRec3[0] * double(input20[i])); fRec20[0] = (fRec20[1] + fRec19[1]); fRec21[0] = (fRec21[1] + fRec20[1]); - fRec19[0] = (fSlow11 * ((fSlow3 * fTemp14) - ((fSlow13 * fRec20[0]) + (fSlow12 * fRec21[0])))); - double fTemp15 = (fRec19[0] + (fSlow4 * fTemp14)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); - fVbargraph5 = FAUSTFLOAT(fRec18[0]); - double fTemp16 = (9.2199121612079837e-35 * fTemp15); - double fTemp17 = (fRec3[0] * double(input12[i])); - fRec25[0] = (fRec25[1] + fRec24[1]); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec24[0] = (fSlow15 * ((fSlow3 * fTemp17) - ((fSlow17 * fRec25[0]) + (fSlow16 * fRec26[0])))); - fRec27[0] = (fRec27[1] + fRec23[1]); - fRec23[0] = (fSlow14 * (fRec24[0] - (fSlow18 * fRec27[0]))); - double fTemp18 = (fRec23[0] + (fSlow4 * fTemp17)); - fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); - fVbargraph6 = FAUSTFLOAT(fRec22[0]); - double fTemp19 = (0.033596842045264641 * fTemp18); - double fTemp20 = (fRec3[0] * double(input13[i])); + fRec19[0] = (fSlow20 * ((fSlow3 * fTemp11) - ((fSlow22 * fRec20[0]) + (fSlow21 * fRec21[0])))); + fRec22[0] = (fRec22[1] + fRec18[1]); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec18[0] = (fSlow19 * (fRec19[0] - ((fSlow24 * fRec22[0]) + (fSlow23 * fRec23[0])))); + double fTemp12 = (fRec18[0] + (fSlow4 * fTemp11)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph4 = FAUSTFLOAT(fRec17[0]); + double fTemp13 = (0.038095238095238099 * fTemp12); + double fTemp14 = (fRec3[0] * double(input30[i])); + fRec28[0] = (fRec28[1] + fRec27[1]); + fRec29[0] = (fRec29[1] + fRec28[1]); + fRec27[0] = (fSlow27 * ((fSlow3 * fTemp14) - ((fSlow29 * fRec28[0]) + (fSlow28 * fRec29[0])))); + fRec30[0] = (fRec30[1] + fRec26[1]); fRec31[0] = (fRec31[1] + fRec30[1]); - fRec32[0] = (fRec32[1] + fRec31[1]); - fRec30[0] = (fSlow15 * ((fSlow3 * fTemp20) - ((fSlow17 * fRec31[0]) + (fSlow16 * fRec32[0])))); - fRec33[0] = (fRec33[1] + fRec29[1]); - fRec29[0] = (fSlow14 * (fRec30[0] - (fSlow18 * fRec33[0]))); - double fTemp21 = (fRec29[0] + (fSlow4 * fTemp20)); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph7 = FAUSTFLOAT(fRec28[0]); - double fTemp22 = (5.0391227634343926e-18 * fTemp21); - double fTemp23 = (fRec3[0] * double(input14[i])); + fRec26[0] = (fSlow26 * (fRec27[0] - ((fSlow31 * fRec30[0]) + (fSlow30 * fRec31[0])))); + fRec32[0] = (fRec32[1] + fRec25[1]); + fRec25[0] = (fSlow25 * (fRec26[0] - (fSlow32 * fRec32[0]))); + double fTemp15 = (fRec25[0] + (fSlow4 * fTemp14)); + fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fVbargraph5 = FAUSTFLOAT(fRec24[0]); + double fTemp16 = (0.042115870353719366 * fTemp15); + double fTemp17 = (fRec1[0] * (((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16)); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph6 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (fRec3[0] * double(input13[i])); fRec37[0] = (fRec37[1] + fRec36[1]); fRec38[0] = (fRec38[1] + fRec37[1]); - fRec36[0] = (fSlow15 * ((fSlow3 * fTemp23) - ((fSlow17 * fRec37[0]) + (fSlow16 * fRec38[0])))); + fRec36[0] = (fSlow15 * ((fSlow3 * fTemp18) - ((fSlow17 * fRec37[0]) + (fSlow16 * fRec38[0])))); fRec39[0] = (fRec39[1] + fRec35[1]); fRec35[0] = (fSlow14 * (fRec36[0] - (fSlow18 * fRec39[0]))); - double fTemp24 = (fRec35[0] + (fSlow4 * fTemp23)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph8 = FAUSTFLOAT(fRec34[0]); - double fTemp25 = (2.4393594688416384e-34 * fTemp24); - double fTemp26 = (fRec3[0] * double(input15[i])); + double fTemp19 = (fRec35[0] + (fSlow4 * fTemp18)); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph7 = FAUSTFLOAT(fRec34[0]); + double fTemp20 = (fRec3[0] * double(input22[i])); fRec43[0] = (fRec43[1] + fRec42[1]); fRec44[0] = (fRec44[1] + fRec43[1]); - fRec42[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec43[0]) + (fSlow16 * fRec44[0])))); + fRec42[0] = (fSlow20 * ((fSlow3 * fTemp20) - ((fSlow22 * fRec43[0]) + (fSlow21 * fRec44[0])))); fRec45[0] = (fRec45[1] + fRec41[1]); - fRec41[0] = (fSlow14 * (fRec42[0] - (fSlow18 * fRec45[0]))); - double fTemp27 = (fRec41[0] + (fSlow4 * fTemp26)); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph9 = FAUSTFLOAT(fRec40[0]); - double fTemp28 = (6.0979103388536467e-51 * fTemp27); - double fTemp29 = (fRec3[0] * double(input20[i])); - fRec49[0] = (fRec49[1] + fRec48[1]); - fRec50[0] = (fRec50[1] + fRec49[1]); - fRec48[0] = (fSlow20 * ((fSlow3 * fTemp29) - ((fSlow22 * fRec49[0]) + (fSlow21 * fRec50[0])))); - fRec51[0] = (fRec51[1] + fRec47[1]); + fRec46[0] = (fRec46[1] + fRec45[1]); + fRec41[0] = (fSlow19 * (fRec42[0] - ((fSlow24 * fRec45[0]) + (fSlow23 * fRec46[0])))); + double fTemp21 = (fRec41[0] + (fSlow4 * fTemp20)); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph8 = FAUSTFLOAT(fRec40[0]); + double fTemp22 = (fRec3[0] * double(input33[i])); + fRec51[0] = (fRec51[1] + fRec50[1]); fRec52[0] = (fRec52[1] + fRec51[1]); - fRec47[0] = (fSlow19 * (fRec48[0] - ((fSlow24 * fRec51[0]) + (fSlow23 * fRec52[0])))); - double fTemp30 = (fRec47[0] + (fSlow4 * fTemp29)); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph10 = FAUSTFLOAT(fRec46[0]); - double fTemp31 = (0.038095238095238099 * fTemp30); - double fTemp32 = (fRec3[0] * double(input21[i])); - fRec56[0] = (fRec56[1] + fRec55[1]); - fRec57[0] = (fRec57[1] + fRec56[1]); - fRec55[0] = (fSlow20 * ((fSlow3 * fTemp32) - ((fSlow22 * fRec56[0]) + (fSlow21 * fRec57[0])))); - fRec58[0] = (fRec58[1] + fRec54[1]); - fRec59[0] = (fRec59[1] + fRec58[1]); - fRec54[0] = (fSlow19 * (fRec55[0] - ((fSlow24 * fRec58[0]) + (fSlow23 * fRec59[0])))); - double fTemp33 = (fRec54[0] + (fSlow4 * fTemp32)); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); - fVbargraph11 = FAUSTFLOAT(fRec53[0]); - double fTemp34 = (7.3765204086483564e-18 * fTemp33); - double fTemp35 = (fRec3[0] * double(input22[i])); + fRec50[0] = (fSlow27 * ((fSlow3 * fTemp22) - ((fSlow29 * fRec51[0]) + (fSlow28 * fRec52[0])))); + fRec53[0] = (fRec53[1] + fRec49[1]); + fRec54[0] = (fRec54[1] + fRec53[1]); + fRec49[0] = (fSlow26 * (fRec50[0] - ((fSlow31 * fRec53[0]) + (fSlow30 * fRec54[0])))); + fRec55[0] = (fRec55[1] + fRec48[1]); + fRec48[0] = (fSlow25 * (fRec49[0] - (fSlow32 * fRec55[0]))); + double fTemp23 = (fRec48[0] + (fSlow4 * fTemp22)); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph9 = FAUSTFLOAT(fRec47[0]); + double fTemp24 = (fRec3[0] * double(input31[i])); + fRec60[0] = (fRec60[1] + fRec59[1]); + fRec61[0] = (fRec61[1] + fRec60[1]); + fRec59[0] = (fSlow27 * ((fSlow3 * fTemp24) - ((fSlow29 * fRec60[0]) + (fSlow28 * fRec61[0])))); + fRec62[0] = (fRec62[1] + fRec58[1]); fRec63[0] = (fRec63[1] + fRec62[1]); - fRec64[0] = (fRec64[1] + fRec63[1]); - fRec62[0] = (fSlow20 * ((fSlow3 * fTemp35) - ((fSlow22 * fRec63[0]) + (fSlow21 * fRec64[0])))); - fRec65[0] = (fRec65[1] + fRec61[1]); - fRec66[0] = (fRec66[1] + fRec65[1]); - fRec61[0] = (fSlow19 * (fRec62[0] - ((fSlow24 * fRec65[0]) + (fSlow23 * fRec66[0])))); - double fTemp36 = (fRec61[0] + (fSlow4 * fTemp35)); - fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); - fVbargraph12 = FAUSTFLOAT(fRec60[0]); - double fTemp37 = (4.7908068913603203e-34 * fTemp36); - double fTemp38 = (fRec3[0] * double(input23[i])); - fRec70[0] = (fRec70[1] + fRec69[1]); - fRec71[0] = (fRec71[1] + fRec70[1]); - fRec69[0] = (fSlow20 * ((fSlow3 * fTemp38) - ((fSlow22 * fRec70[0]) + (fSlow21 * fRec71[0])))); - fRec72[0] = (fRec72[1] + fRec68[1]); + fRec58[0] = (fSlow26 * (fRec59[0] - ((fSlow31 * fRec62[0]) + (fSlow30 * fRec63[0])))); + fRec64[0] = (fRec64[1] + fRec57[1]); + fRec57[0] = (fSlow25 * (fRec58[0] - (fSlow32 * fRec64[0]))); + double fTemp25 = (fRec57[0] + (fSlow4 * fTemp24)); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph10 = FAUSTFLOAT(fRec56[0]); + double fTemp26 = (fRec3[0] * double(input15[i])); + fRec68[0] = (fRec68[1] + fRec67[1]); + fRec69[0] = (fRec69[1] + fRec68[1]); + fRec67[0] = (fSlow15 * ((fSlow3 * fTemp26) - ((fSlow17 * fRec68[0]) + (fSlow16 * fRec69[0])))); + fRec70[0] = (fRec70[1] + fRec66[1]); + fRec66[0] = (fSlow14 * (fRec67[0] - (fSlow18 * fRec70[0]))); + double fTemp27 = (fRec66[0] + (fSlow4 * fTemp26)); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph11 = FAUSTFLOAT(fRec65[0]); + double fTemp28 = (fRec3[0] * double(input8[i])); fRec73[0] = (fRec73[1] + fRec72[1]); - fRec68[0] = (fSlow19 * (fRec69[0] - ((fSlow24 * fRec72[0]) + (fSlow23 * fRec73[0])))); - double fTemp39 = (fRec68[0] + (fSlow4 * fTemp38)); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph13 = FAUSTFLOAT(fRec67[0]); - double fTemp40 = (1.8293731016560941e-50 * fTemp39); - double fTemp41 = (fRec3[0] * double(input24[i])); + fRec74[0] = (fRec74[1] + fRec73[1]); + fRec72[0] = (fSlow11 * ((fSlow3 * fTemp28) - ((fSlow13 * fRec73[0]) + (fSlow12 * fRec74[0])))); + double fTemp29 = (fRec72[0] + (fSlow4 * fTemp28)); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph12 = FAUSTFLOAT(fRec71[0]); + double fTemp30 = (fConst43 * fTemp29); + double fTemp31 = (fRec3[0] * double(input3[i])); fRec77[0] = (fRec77[1] + fRec76[1]); - fRec78[0] = (fRec78[1] + fRec77[1]); - fRec76[0] = (fSlow20 * ((fSlow3 * fTemp41) - ((fSlow22 * fRec77[0]) + (fSlow21 * fRec78[0])))); - fRec79[0] = (fRec79[1] + fRec75[1]); - fRec80[0] = (fRec80[1] + fRec79[1]); - fRec75[0] = (fSlow19 * (fRec76[0] - ((fSlow24 * fRec79[0]) + (fSlow23 * fRec80[0])))); - double fTemp42 = (fRec75[0] + (fSlow4 * fTemp41)); - fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); - fVbargraph14 = FAUSTFLOAT(fRec74[0]); - double fTemp43 = (3.9603917912335094e-67 * fTemp42); - double fTemp44 = (fRec3[0] * double(input30[i])); - fRec85[0] = (fRec85[1] + fRec84[1]); - fRec86[0] = (fRec86[1] + fRec85[1]); - fRec84[0] = (fSlow27 * ((fSlow3 * fTemp44) - ((fSlow29 * fRec85[0]) + (fSlow28 * fRec86[0])))); - fRec87[0] = (fRec87[1] + fRec83[1]); - fRec88[0] = (fRec88[1] + fRec87[1]); - fRec83[0] = (fSlow26 * (fRec84[0] - ((fSlow31 * fRec87[0]) + (fSlow30 * fRec88[0])))); - fRec89[0] = (fRec89[1] + fRec82[1]); - fRec82[0] = (fSlow25 * (fRec83[0] - (fSlow32 * fRec89[0]))); - double fTemp45 = (fRec82[0] + (fSlow4 * fTemp44)); - fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); - fVbargraph15 = FAUSTFLOAT(fRec81[0]); - double fTemp46 = (0.042115870353719366 * fTemp45); - double fTemp47 = (fRec3[0] * double(input31[i])); - fRec94[0] = (fRec94[1] + fRec93[1]); - fRec95[0] = (fRec95[1] + fRec94[1]); - fRec93[0] = (fSlow27 * ((fSlow3 * fTemp47) - ((fSlow29 * fRec94[0]) + (fSlow28 * fRec95[0])))); - fRec96[0] = (fRec96[1] + fRec92[1]); - fRec97[0] = (fRec97[1] + fRec96[1]); - fRec92[0] = (fSlow26 * (fRec93[0] - ((fSlow31 * fRec96[0]) + (fSlow30 * fRec97[0])))); - fRec98[0] = (fRec98[1] + fRec91[1]); - fRec91[0] = (fSlow25 * (fRec92[0] - (fSlow32 * fRec98[0]))); - double fTemp48 = (fRec91[0] + (fSlow4 * fTemp47)); - fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); - fVbargraph16 = FAUSTFLOAT(fRec90[0]); - double fTemp49 = (9.9878558487400326e-18 * fTemp48); - double fTemp50 = (fRec3[0] * double(input32[i])); - fRec103[0] = (fRec103[1] + fRec102[1]); - fRec104[0] = (fRec104[1] + fRec103[1]); - fRec102[0] = (fSlow27 * ((fSlow3 * fTemp50) - ((fSlow29 * fRec103[0]) + (fSlow28 * fRec104[0])))); - fRec105[0] = (fRec105[1] + fRec101[1]); + fRec76[0] = (fSlow8 * ((fSlow3 * fTemp31) - (fSlow9 * fRec77[0]))); + double fTemp32 = (fRec76[0] + (fSlow4 * fTemp31)); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph13 = FAUSTFLOAT(fRec75[0]); + double fTemp33 = (0.014285714285714285 * fTemp12); + double fTemp34 = (fRec3[0] * double(input24[i])); + fRec81[0] = (fRec81[1] + fRec80[1]); + fRec82[0] = (fRec82[1] + fRec81[1]); + fRec80[0] = (fSlow20 * ((fSlow3 * fTemp34) - ((fSlow22 * fRec81[0]) + (fSlow21 * fRec82[0])))); + fRec83[0] = (fRec83[1] + fRec79[1]); + fRec84[0] = (fRec84[1] + fRec83[1]); + fRec79[0] = (fSlow19 * (fRec80[0] - ((fSlow24 * fRec83[0]) + (fSlow23 * fRec84[0])))); + double fTemp35 = (fRec79[0] + (fSlow4 * fTemp34)); + fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph14 = FAUSTFLOAT(fRec78[0]); + double fTemp36 = (fConst50 * fTemp35); + double fTemp37 = (fRec3[0] * double(input35[i])); + fRec89[0] = (fRec89[1] + fRec88[1]); + fRec90[0] = (fRec90[1] + fRec89[1]); + fRec88[0] = (fSlow27 * ((fSlow3 * fTemp37) - ((fSlow29 * fRec89[0]) + (fSlow28 * fRec90[0])))); + fRec91[0] = (fRec91[1] + fRec87[1]); + fRec92[0] = (fRec92[1] + fRec91[1]); + fRec87[0] = (fSlow26 * (fRec88[0] - ((fSlow31 * fRec91[0]) + (fSlow30 * fRec92[0])))); + fRec93[0] = (fRec93[1] + fRec86[1]); + fRec86[0] = (fSlow25 * (fRec87[0] - (fSlow32 * fRec93[0]))); + double fTemp38 = (fRec86[0] + (fSlow4 * fTemp37)); + fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph15 = FAUSTFLOAT(fRec85[0]); + double fTemp39 = (0.014197256999998666 * fTemp6); + double fTemp40 = (fRec1[0] * ((((0.0089791337293529845 * (((fConst25 * fTemp19) + (fConst29 * fTemp21)) + (fConst33 * fTemp23))) + ((fConst36 * fTemp25) + (((fConst40 * fTemp27) + (fTemp30 + ((fConst46 * fTemp32) + (fTemp1 + fTemp33)))) + fTemp36))) + (fConst52 * fTemp38)) - fTemp39)); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph16 = FAUSTFLOAT(fRec33[0]); + output1[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (fConst53 * fTemp29); + double fTemp42 = (fRec3[0] * double(input9[i])); + fRec98[0] = (fRec98[1] + fRec97[1]); + fRec99[0] = (fRec99[1] + fRec98[1]); + fRec97[0] = (fSlow15 * ((fSlow3 * fTemp42) - ((fSlow17 * fRec98[0]) + (fSlow16 * fRec99[0])))); + fRec100[0] = (fRec100[1] + fRec96[1]); + fRec96[0] = (fSlow14 * (fRec97[0] - (fSlow18 * fRec100[0]))); + double fTemp43 = (fRec96[0] + (fSlow4 * fTemp42)); + fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph17 = FAUSTFLOAT(fRec95[0]); + double fTemp44 = (fConst55 * fTemp21); + double fTemp45 = (fRec3[0] * double(input27[i])); + fRec105[0] = (fRec105[1] + fRec104[1]); fRec106[0] = (fRec106[1] + fRec105[1]); - fRec101[0] = (fSlow26 * (fRec102[0] - ((fSlow31 * fRec105[0]) + (fSlow30 * fRec106[0])))); - fRec107[0] = (fRec107[1] + fRec100[1]); - fRec100[0] = (fSlow25 * (fRec101[0] - (fSlow32 * fRec107[0]))); - double fTemp51 = (fRec100[0] + (fSlow4 * fTemp50)); - fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); - fVbargraph17 = FAUSTFLOAT(fRec99[0]); - double fTemp52 = (8.0904400869483595e-34 * fTemp51); - double fTemp53 = (fRec3[0] * double(input33[i])); - fRec112[0] = (fRec112[1] + fRec111[1]); + fRec104[0] = (fSlow27 * ((fSlow3 * fTemp45) - ((fSlow29 * fRec105[0]) + (fSlow28 * fRec106[0])))); + fRec107[0] = (fRec107[1] + fRec103[1]); + fRec108[0] = (fRec108[1] + fRec107[1]); + fRec103[0] = (fSlow26 * (fRec104[0] - ((fSlow31 * fRec107[0]) + (fSlow30 * fRec108[0])))); + fRec109[0] = (fRec109[1] + fRec102[1]); + fRec102[0] = (fSlow25 * (fRec103[0] - (fSlow32 * fRec109[0]))); + double fTemp46 = (fRec102[0] + (fSlow4 * fTemp45)); + fRec101[0] = max((fRec101[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph18 = FAUSTFLOAT(fRec101[0]); + double fTemp47 = (fRec3[0] * double(input11[i])); fRec113[0] = (fRec113[1] + fRec112[1]); - fRec111[0] = (fSlow27 * ((fSlow3 * fTemp53) - ((fSlow29 * fRec112[0]) + (fSlow28 * fRec113[0])))); - fRec114[0] = (fRec114[1] + fRec110[1]); - fRec115[0] = (fRec115[1] + fRec114[1]); - fRec110[0] = (fSlow26 * (fRec111[0] - ((fSlow31 * fRec114[0]) + (fSlow30 * fRec115[0])))); - fRec116[0] = (fRec116[1] + fRec109[1]); - fRec109[0] = (fSlow25 * (fRec110[0] - (fSlow32 * fRec116[0]))); - double fTemp54 = (fRec109[0] + (fSlow4 * fTemp53)); - fRec108[0] = max((fRec108[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); - fVbargraph18 = FAUSTFLOAT(fRec108[0]); - double fTemp55 = (4.0448961198413007e-50 * fTemp54); - double fTemp56 = (fRec3[0] * double(input34[i])); - fRec121[0] = (fRec121[1] + fRec120[1]); - fRec122[0] = (fRec122[1] + fRec121[1]); - fRec120[0] = (fSlow27 * ((fSlow3 * fTemp56) - ((fSlow29 * fRec121[0]) + (fSlow28 * fRec122[0])))); - fRec123[0] = (fRec123[1] + fRec119[1]); + fRec114[0] = (fRec114[1] + fRec113[1]); + fRec112[0] = (fSlow15 * ((fSlow3 * fTemp47) - ((fSlow17 * fRec113[0]) + (fSlow16 * fRec114[0])))); + fRec115[0] = (fRec115[1] + fRec111[1]); + fRec111[0] = (fSlow14 * (fRec112[0] - (fSlow18 * fRec115[0]))); + double fTemp48 = (fRec111[0] + (fSlow4 * fTemp47)); + fRec110[0] = max((fRec110[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph19 = FAUSTFLOAT(fRec110[0]); + double fTemp49 = (fRec3[0] * double(input1[i])); + fRec118[0] = (fRec118[1] + fRec117[1]); + fRec117[0] = (fSlow8 * ((fSlow3 * fTemp49) - (fSlow9 * fRec118[0]))); + double fTemp50 = (fRec117[0] + (fSlow4 * fTemp49)); + fRec116[0] = max((fRec116[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph20 = FAUSTFLOAT(fRec116[0]); + double fTemp51 = (fTemp33 + fTemp36); + double fTemp52 = (fRec3[0] * double(input25[i])); + fRec123[0] = (fRec123[1] + fRec122[1]); fRec124[0] = (fRec124[1] + fRec123[1]); - fRec119[0] = (fSlow26 * (fRec120[0] - ((fSlow31 * fRec123[0]) + (fSlow30 * fRec124[0])))); - fRec125[0] = (fRec125[1] + fRec118[1]); - fRec118[0] = (fSlow25 * (fRec119[0] - (fSlow32 * fRec125[0]))); - double fTemp57 = (fRec118[0] + (fSlow4 * fTemp56)); - fRec117[0] = max((fRec117[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); - fVbargraph19 = FAUSTFLOAT(fRec117[0]); - double fTemp58 = (1.3135133594325083e-66 * fTemp57); - double fTemp59 = (fRec3[0] * double(input35[i])); - fRec130[0] = (fRec130[1] + fRec129[1]); - fRec131[0] = (fRec131[1] + fRec130[1]); - fRec129[0] = (fSlow27 * ((fSlow3 * fTemp59) - ((fSlow29 * fRec130[0]) + (fSlow28 * fRec131[0])))); - fRec132[0] = (fRec132[1] + fRec128[1]); + fRec122[0] = (fSlow27 * ((fSlow3 * fTemp52) - ((fSlow29 * fRec123[0]) + (fSlow28 * fRec124[0])))); + fRec125[0] = (fRec125[1] + fRec121[1]); + fRec126[0] = (fRec126[1] + fRec125[1]); + fRec121[0] = (fSlow26 * (fRec122[0] - ((fSlow31 * fRec125[0]) + (fSlow30 * fRec126[0])))); + fRec127[0] = (fRec127[1] + fRec120[1]); + fRec120[0] = (fSlow25 * (fRec121[0] - (fSlow32 * fRec127[0]))); + double fTemp53 = (fRec120[0] + (fSlow4 * fTemp52)); + fRec119[0] = max((fRec119[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph21 = FAUSTFLOAT(fRec119[0]); + double fTemp54 = (fRec3[0] * double(input29[i])); + fRec132[0] = (fRec132[1] + fRec131[1]); fRec133[0] = (fRec133[1] + fRec132[1]); - fRec128[0] = (fSlow26 * (fRec129[0] - ((fSlow31 * fRec132[0]) + (fSlow30 * fRec133[0])))); - fRec134[0] = (fRec134[1] + fRec127[1]); - fRec127[0] = (fSlow25 * (fRec128[0] - (fSlow32 * fRec134[0]))); - double fTemp60 = (fRec127[0] + (fSlow4 * fTemp59)); - fRec126[0] = max((fRec126[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); - fVbargraph20 = FAUSTFLOAT(fRec126[0]); - double fTemp61 = (2.5434040020076175e-83 * fTemp60); - double fTemp62 = (fRec1[0] * ((((((((((((((((((((fTemp1 + fTemp4) + fTemp7) + fTemp10) + fTemp13) + fTemp16) + fTemp19) + fTemp22) + fTemp25) + fTemp28) + fTemp31) + fTemp34) + fTemp37) + fTemp40) + fTemp43) + fTemp46) + fTemp49) + fTemp52) + fTemp55) + fTemp58) + fTemp61)); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); - fVbargraph21 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp62); - double fTemp63 = (0.021994295969128601 * fTemp6); - double fTemp64 = (0.024590370452110585 * fTemp15); - double fTemp65 = (0.026560635762986527 * fTemp27); - double fTemp66 = (0.014285714285714285 * fTemp30); - double fTemp67 = (0.028171808490950554 * fTemp42); - double fTemp68 = (0.020389258061373223 * fTemp48); - double fTemp69 = (0.029546842014263944 * fTemp60); - double fTemp70 = (0.014197256999998666 * fTemp9); - double fTemp71 = (0.020573779994945588 * fTemp21); - double fTemp72 = (0.021295885499997998 * fTemp36); - double fTemp73 = (0.022022915754780329 * fTemp54); - double fTemp74 = (fRec1[0] * ((((((((fTemp1 + fTemp63) + fTemp64) + fTemp65) + fTemp66) + fTemp67) + fTemp68) + fTemp69) - (((fTemp70 + fTemp71) + fTemp72) + fTemp73))); - fRec135[0] = max((fRec135[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); - fVbargraph22 = FAUSTFLOAT(fRec135[0]); - output1[i] = FAUSTFLOAT(fTemp74); - double fTemp75 = (fRec3[0] * double(input29[i])); - fRec141[0] = (fRec141[1] + fRec140[1]); - fRec142[0] = (fRec142[1] + fRec141[1]); - fRec140[0] = (fSlow27 * ((fSlow3 * fTemp75) - ((fSlow29 * fRec141[0]) + (fSlow28 * fRec142[0])))); - fRec143[0] = (fRec143[1] + fRec139[1]); - fRec144[0] = (fRec144[1] + fRec143[1]); - fRec139[0] = (fSlow26 * (fRec140[0] - ((fSlow31 * fRec143[0]) + (fSlow30 * fRec144[0])))); - fRec145[0] = (fRec145[1] + fRec138[1]); - fRec138[0] = (fSlow25 * (fRec139[0] - (fSlow32 * fRec145[0]))); - double fTemp76 = (fRec138[0] + (fSlow4 * fTemp75)); - fRec137[0] = max((fRec137[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); - fVbargraph23 = FAUSTFLOAT(fRec137[0]); - double fTemp77 = (0.020389258061373223 * fTemp76); - double fTemp78 = (fRec3[0] * double(input25[i])); - fRec150[0] = (fRec150[1] + fRec149[1]); - fRec151[0] = (fRec151[1] + fRec150[1]); - fRec149[0] = (fSlow27 * ((fSlow3 * fTemp78) - ((fSlow29 * fRec150[0]) + (fSlow28 * fRec151[0])))); - fRec152[0] = (fRec152[1] + fRec148[1]); + fRec131[0] = (fSlow27 * ((fSlow3 * fTemp54) - ((fSlow29 * fRec132[0]) + (fSlow28 * fRec133[0])))); + fRec134[0] = (fRec134[1] + fRec130[1]); + fRec135[0] = (fRec135[1] + fRec134[1]); + fRec130[0] = (fSlow26 * (fRec131[0] - ((fSlow31 * fRec134[0]) + (fSlow30 * fRec135[0])))); + fRec136[0] = (fRec136[1] + fRec129[1]); + fRec129[0] = (fSlow25 * (fRec130[0] - (fSlow32 * fRec136[0]))); + double fTemp55 = (fRec129[0] + (fSlow4 * fTemp54)); + fRec128[0] = max((fRec128[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph22 = FAUSTFLOAT(fRec128[0]); + double fTemp56 = (fRec1[0] * ((((0.012698412698412698 * ((((fTemp0 + fTemp41) + (fConst54 * fTemp43)) + fTemp44) + (fConst56 * fTemp46))) + (((fConst57 * fTemp48) + ((fConst46 * fTemp50) + fTemp51)) + (fConst52 * fTemp53))) + (fConst36 * fTemp55)) - fTemp39)); + fRec94[0] = max((fRec94[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph23 = FAUSTFLOAT(fRec94[0]); + output2[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (fRec1[0] * (((fTemp36 + ((fConst58 * fTemp21) + (fTemp30 + fTemp33))) + (0.012698412698412698 * ((((((fTemp0 + (fConst59 * fTemp32)) + (fConst60 * fTemp19)) + (fConst54 * fTemp27)) + (fConst61 * fTemp25)) + (fConst56 * fTemp23)) + (fConst62 * fTemp38)))) - fTemp39)); + fRec137[0] = max((fRec137[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph24 = FAUSTFLOAT(fRec137[0]); + output3[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (fRec1[0] * (((0.012698412698412698 * (((fTemp44 + ((fTemp41 + (fTemp0 + (fConst59 * fTemp50))) + (fConst60 * fTemp48))) + (fConst62 * fTemp53)) + (fConst61 * fTemp55))) + ((fTemp51 + (fConst40 * fTemp43)) + (fConst63 * fTemp46))) - fTemp39)); + fRec138[0] = max((fRec138[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph25 = FAUSTFLOAT(fRec138[0]); + output4[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = (fRec1[0] * ((fTemp13 + (fTemp1 + fTemp7)) - (fTemp16 + (fTemp4 + fTemp10)))); + fRec139[0] = max((fRec139[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph26 = FAUSTFLOAT(fRec139[0]); + output5[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = (fRec3[0] * double(input34[i])); + fRec145[0] = (fRec145[1] + fRec144[1]); + fRec146[0] = (fRec146[1] + fRec145[1]); + fRec144[0] = (fSlow27 * ((fSlow3 * fTemp60) - ((fSlow29 * fRec145[0]) + (fSlow28 * fRec146[0])))); + fRec147[0] = (fRec147[1] + fRec143[1]); + fRec148[0] = (fRec148[1] + fRec147[1]); + fRec143[0] = (fSlow26 * (fRec144[0] - ((fSlow31 * fRec147[0]) + (fSlow30 * fRec148[0])))); + fRec149[0] = (fRec149[1] + fRec142[1]); + fRec142[0] = (fSlow25 * (fRec143[0] - (fSlow32 * fRec149[0]))); + double fTemp61 = (fRec142[0] + (fSlow4 * fTemp60)); + fRec141[0] = max((fRec141[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph27 = FAUSTFLOAT(fRec141[0]); + double fTemp62 = (fConst47 * ((fConst64 * fTemp35) + (fConst67 * fTemp61))); + double fTemp63 = (fRec3[0] * double(input23[i])); fRec153[0] = (fRec153[1] + fRec152[1]); - fRec148[0] = (fSlow26 * (fRec149[0] - ((fSlow31 * fRec152[0]) + (fSlow30 * fRec153[0])))); - fRec154[0] = (fRec154[1] + fRec147[1]); - fRec147[0] = (fSlow25 * (fRec148[0] - (fSlow32 * fRec154[0]))); - double fTemp79 = (fRec147[0] + (fSlow4 * fTemp78)); - fRec146[0] = max((fRec146[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); - fVbargraph24 = FAUSTFLOAT(fRec146[0]); - double fTemp80 = (0.029546842014263944 * fTemp79); - double fTemp81 = (fRec3[0] * double(input4[i])); - fRec157[0] = (fRec157[1] + fRec156[1]); - fRec158[0] = (fRec158[1] + fRec157[1]); - fRec156[0] = (fSlow11 * ((fSlow3 * fTemp81) - ((fSlow13 * fRec157[0]) + (fSlow12 * fRec158[0])))); - double fTemp82 = (fRec156[0] + (fSlow4 * fTemp81)); - fRec155[0] = max((fRec155[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); - fVbargraph25 = FAUSTFLOAT(fRec155[0]); - double fTemp83 = (fRec3[0] * double(input1[i])); + fRec154[0] = (fRec154[1] + fRec153[1]); + fRec152[0] = (fSlow20 * ((fSlow3 * fTemp63) - ((fSlow22 * fRec153[0]) + (fSlow21 * fRec154[0])))); + fRec155[0] = (fRec155[1] + fRec151[1]); + fRec156[0] = (fRec156[1] + fRec155[1]); + fRec151[0] = (fSlow19 * (fRec152[0] - ((fSlow24 * fRec155[0]) + (fSlow23 * fRec156[0])))); + double fTemp64 = (fRec151[0] + (fSlow4 * fTemp63)); + fRec150[0] = max((fRec150[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph28 = FAUSTFLOAT(fRec150[0]); + double fTemp65 = (fRec3[0] * double(input14[i])); + fRec160[0] = (fRec160[1] + fRec159[1]); fRec161[0] = (fRec161[1] + fRec160[1]); - fRec160[0] = (fSlow8 * ((fSlow3 * fTemp83) - (fSlow9 * fRec161[0]))); - double fTemp84 = (fRec160[0] + (fSlow4 * fTemp83)); - fRec159[0] = max((fRec159[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); - fVbargraph26 = FAUSTFLOAT(fRec159[0]); - double fTemp85 = (0.021994295969128601 * fTemp84); - double fTemp86 = (fRec3[0] * double(input27[i])); - fRec166[0] = (fRec166[1] + fRec165[1]); + fRec159[0] = (fSlow15 * ((fSlow3 * fTemp65) - ((fSlow17 * fRec160[0]) + (fSlow16 * fRec161[0])))); + fRec162[0] = (fRec162[1] + fRec158[1]); + fRec158[0] = (fSlow14 * (fRec159[0] - (fSlow18 * fRec162[0]))); + double fTemp66 = (fRec158[0] + (fSlow4 * fTemp65)); + fRec157[0] = max((fRec157[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph29 = FAUSTFLOAT(fRec157[0]); + double fTemp67 = (fRec3[0] * double(input32[i])); fRec167[0] = (fRec167[1] + fRec166[1]); - fRec165[0] = (fSlow27 * ((fSlow3 * fTemp86) - ((fSlow29 * fRec166[0]) + (fSlow28 * fRec167[0])))); - fRec168[0] = (fRec168[1] + fRec164[1]); - fRec169[0] = (fRec169[1] + fRec168[1]); - fRec164[0] = (fSlow26 * (fRec165[0] - ((fSlow31 * fRec168[0]) + (fSlow30 * fRec169[0])))); - fRec170[0] = (fRec170[1] + fRec163[1]); - fRec163[0] = (fSlow25 * (fRec164[0] - (fSlow32 * fRec170[0]))); - double fTemp87 = (fRec163[0] + (fSlow4 * fTemp86)); - fRec162[0] = max((fRec162[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); - fVbargraph27 = FAUSTFLOAT(fRec162[0]); - double fTemp88 = (0.022022915754780329 * fTemp87); - double fTemp89 = (fTemp1 + fTemp7); - double fTemp90 = (fRec3[0] * double(input16[i])); + fRec168[0] = (fRec168[1] + fRec167[1]); + fRec166[0] = (fSlow27 * ((fSlow3 * fTemp67) - ((fSlow29 * fRec167[0]) + (fSlow28 * fRec168[0])))); + fRec169[0] = (fRec169[1] + fRec165[1]); + fRec170[0] = (fRec170[1] + fRec169[1]); + fRec165[0] = (fSlow26 * (fRec166[0] - ((fSlow31 * fRec169[0]) + (fSlow30 * fRec170[0])))); + fRec171[0] = (fRec171[1] + fRec164[1]); + fRec164[0] = (fSlow25 * (fRec165[0] - (fSlow32 * fRec171[0]))); + double fTemp68 = (fRec164[0] + (fSlow4 * fTemp67)); + fRec163[0] = max((fRec163[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph30 = FAUSTFLOAT(fRec163[0]); + double fTemp69 = (fConst26 * ((((fConst73 * fTemp29) + (fConst76 * fTemp66)) + (fConst77 * fTemp21)) + (fConst80 * fTemp68))); + double fTemp70 = (fRec3[0] * double(input7[i])); fRec174[0] = (fRec174[1] + fRec173[1]); fRec175[0] = (fRec175[1] + fRec174[1]); - fRec173[0] = (fSlow20 * ((fSlow3 * fTemp90) - ((fSlow22 * fRec174[0]) + (fSlow21 * fRec175[0])))); - fRec176[0] = (fRec176[1] + fRec172[1]); - fRec177[0] = (fRec177[1] + fRec176[1]); - fRec172[0] = (fSlow19 * (fRec173[0] - ((fSlow24 * fRec176[0]) + (fSlow23 * fRec177[0])))); - double fTemp91 = (fRec172[0] + (fSlow4 * fTemp90)); - fRec171[0] = max((fRec171[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); - fVbargraph28 = FAUSTFLOAT(fRec171[0]); - double fTemp92 = (fRec3[0] * double(input9[i])); - fRec181[0] = (fRec181[1] + fRec180[1]); + fRec173[0] = (fSlow11 * ((fSlow3 * fTemp70) - ((fSlow13 * fRec174[0]) + (fSlow12 * fRec175[0])))); + double fTemp71 = (fRec173[0] + (fSlow4 * fTemp70)); + fRec172[0] = max((fRec172[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph31 = FAUSTFLOAT(fRec172[0]); + double fTemp72 = (fRec3[0] * double(input21[i])); + fRec179[0] = (fRec179[1] + fRec178[1]); + fRec180[0] = (fRec180[1] + fRec179[1]); + fRec178[0] = (fSlow20 * ((fSlow3 * fTemp72) - ((fSlow22 * fRec179[0]) + (fSlow21 * fRec180[0])))); + fRec181[0] = (fRec181[1] + fRec177[1]); fRec182[0] = (fRec182[1] + fRec181[1]); - fRec180[0] = (fSlow15 * ((fSlow3 * fTemp92) - ((fSlow17 * fRec181[0]) + (fSlow16 * fRec182[0])))); - fRec183[0] = (fRec183[1] + fRec179[1]); - fRec179[0] = (fSlow14 * (fRec180[0] - (fSlow18 * fRec183[0]))); - double fTemp93 = (fRec179[0] + (fSlow4 * fTemp92)); - fRec178[0] = max((fRec178[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); - fVbargraph29 = FAUSTFLOAT(fRec178[0]); - double fTemp94 = (0.026560635762986527 * fTemp93); - double fTemp95 = (fRec3[0] * double(input11[i])); + fRec177[0] = (fSlow19 * (fRec178[0] - ((fSlow24 * fRec181[0]) + (fSlow23 * fRec182[0])))); + double fTemp73 = (fRec177[0] + (fSlow4 * fTemp72)); + fRec176[0] = max((fRec176[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph32 = FAUSTFLOAT(fRec176[0]); + double fTemp74 = (0.022574955908289243 * fTemp0); + double fTemp75 = (0.027648561470568499 * fTemp3); + double fTemp76 = (0.01261978399999881 * fTemp6); + double fTemp77 = (fConst89 * fTemp38); + double fTemp78 = (0.010558468816293317 * fTemp9); + double fTemp79 = (0.027513227513227514 * fTemp12); + double fTemp80 = (0.028125949882539081 * fTemp15); + double fTemp81 = ((fTemp78 + fTemp79) + fTemp80); + double fTemp82 = (fRec1[0] * ((fTemp62 + ((fConst30 * (((fConst68 * fTemp27) + (fConst71 * fTemp64)) + (fConst72 * fTemp23))) + (fTemp69 + ((fConst82 * fTemp25) + ((fConst20 * ((((fConst83 * fTemp32) + (fConst85 * fTemp71)) + (fConst86 * fTemp19)) + (fConst88 * fTemp73))) + (((fTemp74 + fTemp75) + fTemp76) + fTemp77)))))) - fTemp81)); + fRec140[0] = max((fRec140[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph33 = FAUSTFLOAT(fRec140[0]); + output6[i] = FAUSTFLOAT(fTemp82); + double fTemp83 = (fConst90 * fTemp29); + double fTemp84 = ((fTemp0 + fTemp83) + (fConst91 * fTemp43)); + double fTemp85 = (fConst93 * fTemp66); + double fTemp86 = (fRec3[0] * double(input17[i])); fRec187[0] = (fRec187[1] + fRec186[1]); fRec188[0] = (fRec188[1] + fRec187[1]); - fRec186[0] = (fSlow15 * ((fSlow3 * fTemp95) - ((fSlow17 * fRec187[0]) + (fSlow16 * fRec188[0])))); + fRec186[0] = (fSlow20 * ((fSlow3 * fTemp86) - ((fSlow22 * fRec187[0]) + (fSlow21 * fRec188[0])))); fRec189[0] = (fRec189[1] + fRec185[1]); - fRec185[0] = (fSlow14 * (fRec186[0] - (fSlow18 * fRec189[0]))); - double fTemp96 = (fRec185[0] + (fSlow4 * fTemp95)); - fRec184[0] = max((fRec184[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); - fVbargraph30 = FAUSTFLOAT(fRec184[0]); - double fTemp97 = (0.020573779994945588 * fTemp96); - double fTemp98 = (fRec3[0] * double(input18[i])); + fRec190[0] = (fRec190[1] + fRec189[1]); + fRec185[0] = (fSlow19 * (fRec186[0] - ((fSlow24 * fRec189[0]) + (fSlow23 * fRec190[0])))); + double fTemp87 = (fRec185[0] + (fSlow4 * fTemp86)); + fRec184[0] = max((fRec184[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph34 = FAUSTFLOAT(fRec184[0]); + double fTemp88 = (fConst97 * fTemp21); + double fTemp89 = (fConst101 * fTemp68); + double fTemp90 = (fRec3[0] * double(input5[i])); fRec193[0] = (fRec193[1] + fRec192[1]); fRec194[0] = (fRec194[1] + fRec193[1]); - fRec192[0] = (fSlow20 * ((fSlow3 * fTemp98) - ((fSlow22 * fRec193[0]) + (fSlow21 * fRec194[0])))); - fRec195[0] = (fRec195[1] + fRec191[1]); - fRec196[0] = (fRec196[1] + fRec195[1]); - fRec191[0] = (fSlow19 * (fRec192[0] - ((fSlow24 * fRec195[0]) + (fSlow23 * fRec196[0])))); - double fTemp99 = (fRec191[0] + (fSlow4 * fTemp98)); - fRec190[0] = max((fRec190[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); - fVbargraph31 = FAUSTFLOAT(fRec190[0]); - double fTemp100 = (fRec1[0] * ((fTemp77 + (fTemp80 + ((3.0114518464024883e-18 * fTemp82) + (fTemp85 + (fTemp88 + ((((fTemp67 + (fTemp72 + (fTemp66 + fTemp89))) + (1.2484819810925041e-18 * fTemp48)) + (4.0455439930475322e-18 * fTemp54)) + (9.0461113744202184e-18 * fTemp60))))))) - ((6.9001030189269641e-18 * fTemp91) + (fTemp94 + ((fTemp97 + (((fTemp70 + fTemp64) + (1.2597806908585981e-18 * fTemp21)) + (4.879109635569025e-18 * fTemp27))) + (2.607993801258108e-18 * fTemp99)))))); - fRec136[0] = max((fRec136[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); - fVbargraph32 = FAUSTFLOAT(fRec136[0]); - output2[i] = FAUSTFLOAT(fTemp100); - double fTemp101 = (fRec1[0] * (((2.4969639621850082e-18 * fTemp76) + ((1.8092222748840437e-17 * fTemp79) + ((9.7582192711380499e-18 * fTemp93) + ((2.6935244158092871e-18 * fTemp84) + ((5.2159876025162161e-18 * fTemp99) + (fTemp73 + (fTemp67 + (fTemp66 + (fTemp71 + (fTemp1 + fTemp64)))))))))) - ((1.3800206037853928e-17 * fTemp91) + ((6.0229036928049765e-18 * fTemp82) + ((8.0910879860950644e-18 * fTemp87) + ((2.5195613817171963e-18 * fTemp96) + (fTemp69 + (fTemp68 + (fTemp72 + (fTemp65 + (fTemp63 + fTemp70))))))))))); - fRec197[0] = max((fRec197[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); - fVbargraph33 = FAUSTFLOAT(fRec197[0]); - output3[i] = FAUSTFLOAT(fTemp101); - double fTemp102 = (fRec1[0] * ((fTemp94 + ((9.0343555392074636e-18 * fTemp82) + (fTemp97 + (fTemp67 + (fTemp72 + (fTemp66 + ((fTemp1 + (3.7793420725757941e-18 * fTemp21)) + (1.4637328906707076e-17 * fTemp27)))))))) - (fTemp77 + (fTemp80 + ((2.0700309056780893e-17 * fTemp91) + (fTemp85 + (fTemp88 + ((7.823981403774323e-18 * fTemp99) + ((((fTemp64 + (fTemp70 + (4.0402866237139308e-18 * fTemp6))) + (3.745445943277512e-18 * fTemp48)) + (1.2136631979142595e-17 * fTemp54)) + (7.962406901797708e-17 * fTemp60)))))))))); - fRec198[0] = max((fRec198[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); - fVbargraph34 = FAUSTFLOAT(fRec198[0]); - output4[i] = FAUSTFLOAT(fTemp102); - double fTemp103 = (fRec1[0] * ((fTemp61 + (fTemp55 + (fTemp49 + (fTemp43 + (fTemp37 + (fTemp31 + (fTemp28 + (fTemp22 + (fTemp16 + (fTemp10 + fTemp89)))))))))) - (fTemp58 + (fTemp52 + (fTemp46 + (fTemp40 + (fTemp34 + (fTemp25 + (fTemp19 + (fTemp4 + fTemp13)))))))))); - fRec199[0] = max((fRec199[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); - fVbargraph35 = FAUSTFLOAT(fRec199[0]); - output5[i] = FAUSTFLOAT(fTemp103); - double fTemp104 = (0.022574955908289243 * fTemp0); - double fTemp105 = (0.027648561470568499 * fTemp3); - double fTemp106 = (fTemp104 + fTemp105); - double fTemp107 = (0.027648561470568506 * fTemp6); - double fTemp108 = (0.012619783999998805 * fTemp9); - double fTemp109 = (0.043716214137085485 * fTemp12); - double fTemp110 = (0.021858107068542749 * fTemp15); - double fTemp111 = (0.038794291597509752 * fTemp21); - double fTemp112 = (0.04089277388695433 * fTemp24); - double fTemp113 = (0.016694405031674409 * fTemp27); - double fTemp114 = (0.013385302265262959 * fTemp33); - double fTemp115 = (0.047324189999995547 * fTemp36); - double fTemp116 = (0.035414181017315374 * fTemp39); - double fTemp117 = (0.012520803773755805 * fTemp42); - double fTemp118 = (0.033906496904967637 * fTemp51); - double fTemp119 = (0.048447942889749587 * fTemp54); - double fTemp120 = (0.029363887673040441 * fTemp57); - double fTemp121 = (0.0092856766004149483 * fTemp60); - double fTemp122 = (0.010558468816293319 * fTemp18); - double fTemp123 = (0.027513227513227514 * fTemp30); - double fTemp124 = (0.028125949882539081 * fTemp45); - double fTemp125 = (0.01922317685141265 * fTemp48); - double fTemp126 = (fRec1[0] * ((((((((((((((((fTemp106 + fTemp107) + fTemp108) + fTemp109) + fTemp110) + fTemp111) + fTemp112) + fTemp113) + fTemp114) + fTemp115) + fTemp116) + fTemp117) + fTemp118) + fTemp119) + fTemp120) + fTemp121) - (((fTemp122 + fTemp123) + fTemp124) + fTemp125))); - fRec200[0] = max((fRec200[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp126)))))); - fVbargraph36 = FAUSTFLOAT(fRec200[0]); - output6[i] = FAUSTFLOAT(fTemp126); - double fTemp127 = (fRec3[0] * double(input5[i])); - fRec204[0] = (fRec204[1] + fRec203[1]); - fRec205[0] = (fRec205[1] + fRec204[1]); - fRec203[0] = (fSlow11 * ((fSlow3 * fTemp127) - ((fSlow13 * fRec204[0]) + (fSlow12 * fRec205[0])))); - double fTemp128 = (fRec203[0] + (fSlow4 * fTemp127)); - fRec202[0] = max((fRec202[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp128)))))); - fVbargraph37 = FAUSTFLOAT(fRec202[0]); - double fTemp129 = (0.043716214137085485 * fTemp128); - double fTemp130 = (fRec3[0] * double(input10[i])); + fRec192[0] = (fSlow11 * ((fSlow3 * fTemp90) - ((fSlow13 * fRec193[0]) + (fSlow12 * fRec194[0])))); + double fTemp91 = (fRec192[0] + (fSlow4 * fTemp90)); + fRec191[0] = max((fRec191[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph35 = FAUSTFLOAT(fRec191[0]); + double fTemp92 = (fRec3[0] * double(input19[i])); + fRec198[0] = (fRec198[1] + fRec197[1]); + fRec199[0] = (fRec199[1] + fRec198[1]); + fRec197[0] = (fSlow20 * ((fSlow3 * fTemp92) - ((fSlow22 * fRec198[0]) + (fSlow21 * fRec199[0])))); + fRec200[0] = (fRec200[1] + fRec196[1]); + fRec201[0] = (fRec201[1] + fRec200[1]); + fRec196[0] = (fSlow19 * (fRec197[0] - ((fSlow24 * fRec200[0]) + (fSlow23 * fRec201[0])))); + double fTemp93 = (fRec196[0] + (fSlow4 * fTemp92)); + fRec195[0] = max((fRec195[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph36 = FAUSTFLOAT(fRec195[0]); + double fTemp94 = (fTemp75 + fTemp76); + double fTemp95 = (fConst89 * fTemp53); + double fTemp96 = (fRec1[0] * (((0.022574955908289243 * (((((fTemp84 + fTemp85) + (fConst95 * fTemp87)) + fTemp88) + (fConst99 * fTemp46)) + fTemp89)) + ((fConst82 * fTemp55) + ((fConst20 * ((((fConst83 * fTemp50) + (fConst85 * fTemp91)) + (fConst86 * fTemp48)) + (fConst88 * fTemp93))) + (fTemp62 + (fTemp94 + fTemp95))))) - fTemp81)); + fRec183[0] = max((fRec183[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph37 = FAUSTFLOAT(fRec183[0]); + output7[i] = FAUSTFLOAT(fTemp96); + double fTemp97 = (fTemp0 + (fConst102 * fTemp32)); + double fTemp98 = (fConst91 * fTemp27); + double fTemp99 = (fConst110 * fTemp38); + double fTemp100 = (fRec1[0] * (((fTemp62 + (fTemp69 + fTemp94)) + (0.022574955908289243 * ((((((((fTemp97 + (fConst104 * fTemp71)) + (fConst106 * fTemp19)) + fTemp98) + (fConst108 * fTemp73)) + (fConst95 * fTemp64)) + (fConst109 * fTemp25)) + (fConst99 * fTemp23)) + fTemp99))) - fTemp81)); + fRec202[0] = max((fRec202[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + fVbargraph38 = FAUSTFLOAT(fRec202[0]); + output8[i] = FAUSTFLOAT(fTemp100); + double fTemp101 = (fTemp0 + (fConst102 * fTemp50)); + double fTemp102 = (fConst110 * fTemp53); + double fTemp103 = (fRec1[0] * (((0.022574955908289243 * (fTemp89 + (((fTemp88 + ((fTemp85 + ((fTemp83 + (fTemp101 + (fConst104 * fTemp91))) + (fConst106 * fTemp48))) + (fConst108 * fTemp93))) + fTemp102) + (fConst109 * fTemp55)))) + ((fConst30 * (((fConst68 * fTemp43) + (fConst71 * fTemp87)) + (fConst72 * fTemp46))) + (fTemp62 + fTemp94))) - fTemp81)); + fRec203[0] = max((fRec203[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + fVbargraph39 = FAUSTFLOAT(fRec203[0]); + output9[i] = FAUSTFLOAT(fTemp103); + double fTemp104 = (fRec3[0] * double(input18[i])); + fRec208[0] = (fRec208[1] + fRec207[1]); fRec209[0] = (fRec209[1] + fRec208[1]); - fRec210[0] = (fRec210[1] + fRec209[1]); - fRec208[0] = (fSlow15 * ((fSlow3 * fTemp130) - ((fSlow17 * fRec209[0]) + (fSlow16 * fRec210[0])))); - fRec211[0] = (fRec211[1] + fRec207[1]); - fRec207[0] = (fSlow14 * (fRec208[0] - (fSlow18 * fRec211[0]))); - double fTemp131 = (fRec207[0] + (fSlow4 * fTemp130)); - fRec206[0] = max((fRec206[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp131)))))); - fVbargraph38 = FAUSTFLOAT(fRec206[0]); - double fTemp132 = (5.0079204648915091e-18 * fTemp131); - double fTemp133 = (0.0092856766004149483 * fTemp79); - double fTemp134 = (2.6768460856911014e-18 * fTemp82); - double fTemp135 = (0.027648561470568506 * fTemp84); - double fTemp136 = (fRec3[0] * double(input28[i])); + fRec207[0] = (fSlow20 * ((fSlow3 * fTemp104) - ((fSlow22 * fRec208[0]) + (fSlow21 * fRec209[0])))); + fRec210[0] = (fRec210[1] + fRec206[1]); + fRec211[0] = (fRec211[1] + fRec210[1]); + fRec206[0] = (fSlow19 * (fRec207[0] - ((fSlow24 * fRec210[0]) + (fSlow23 * fRec211[0])))); + double fTemp105 = (fRec206[0] + (fSlow4 * fTemp104)); + fRec205[0] = max((fRec205[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); + fVbargraph40 = FAUSTFLOAT(fRec205[0]); + double fTemp106 = (fRec3[0] * double(input16[i])); + fRec215[0] = (fRec215[1] + fRec214[1]); fRec216[0] = (fRec216[1] + fRec215[1]); - fRec217[0] = (fRec217[1] + fRec216[1]); - fRec215[0] = (fSlow27 * ((fSlow3 * fTemp136) - ((fSlow29 * fRec216[0]) + (fSlow28 * fRec217[0])))); - fRec218[0] = (fRec218[1] + fRec214[1]); - fRec219[0] = (fRec219[1] + fRec218[1]); - fRec214[0] = (fSlow26 * (fRec215[0] - ((fSlow31 * fRec218[0]) + (fSlow30 * fRec219[0])))); - fRec220[0] = (fRec220[1] + fRec213[1]); - fRec213[0] = (fSlow25 * (fRec214[0] - (fSlow32 * fRec220[0]))); - double fTemp137 = (fRec213[0] + (fSlow4 * fTemp136)); - fRec212[0] = max((fRec212[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp137)))))); - fVbargraph39 = FAUSTFLOAT(fRec212[0]); - double fTemp138 = (4.1523482904968253e-18 * fTemp137); - double fTemp139 = (fRec3[0] * double(input19[i])); - fRec224[0] = (fRec224[1] + fRec223[1]); - fRec225[0] = (fRec225[1] + fRec224[1]); - fRec223[0] = (fSlow20 * ((fSlow3 * fTemp139) - ((fSlow22 * fRec224[0]) + (fSlow21 * fRec225[0])))); - fRec226[0] = (fRec226[1] + fRec222[1]); - fRec227[0] = (fRec227[1] + fRec226[1]); - fRec222[0] = (fSlow19 * (fRec223[0] - ((fSlow24 * fRec226[0]) + (fSlow23 * fRec227[0])))); - double fTemp140 = (fRec222[0] + (fSlow4 * fTemp139)); - fRec221[0] = max((fRec221[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp140)))))); - fVbargraph40 = FAUSTFLOAT(fRec221[0]); - double fTemp141 = (0.013385302265262959 * fTemp140); - double fTemp142 = (5.7955417805735729e-18 * fTemp99); - double fTemp143 = (0.038794291597509752 * fTemp96); - double fTemp144 = (1.6929861152980278e-18 * fTemp6); - double fTemp145 = (2.6768460856911007e-18 * fTemp12); - double fTemp146 = (2.3754652515039685e-18 * fTemp21); - double fTemp147 = (8.1961337873870493e-19 * fTemp33); - double fTemp148 = (2.8429185316539108e-18 * fTemp60); - double fTemp149 = (3.0667124528564294e-18 * (fTemp27 + fTemp91)); - double fTemp150 = (0.01922317685141265 * fTemp76); - double fTemp151 = (fRec3[0] * double(input26[i])); - fRec232[0] = (fRec232[1] + fRec231[1]); - fRec233[0] = (fRec233[1] + fRec232[1]); - fRec231[0] = (fSlow27 * ((fSlow3 * fTemp151) - ((fSlow29 * fRec232[0]) + (fSlow28 * fRec233[0])))); - fRec234[0] = (fRec234[1] + fRec230[1]); + fRec214[0] = (fSlow20 * ((fSlow3 * fTemp106) - ((fSlow22 * fRec215[0]) + (fSlow21 * fRec216[0])))); + fRec217[0] = (fRec217[1] + fRec213[1]); + fRec218[0] = (fRec218[1] + fRec217[1]); + fRec213[0] = (fSlow19 * (fRec214[0] - ((fSlow24 * fRec217[0]) + (fSlow23 * fRec218[0])))); + double fTemp107 = (fRec213[0] + (fSlow4 * fTemp106)); + fRec212[0] = max((fRec212[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); + fVbargraph41 = FAUSTFLOAT(fRec212[0]); + double fTemp108 = (fRec3[0] * double(input4[i])); + fRec221[0] = (fRec221[1] + fRec220[1]); + fRec222[0] = (fRec222[1] + fRec221[1]); + fRec220[0] = (fSlow11 * ((fSlow3 * fTemp108) - ((fSlow13 * fRec221[0]) + (fSlow12 * fRec222[0])))); + double fTemp109 = (fRec220[0] + (fSlow4 * fTemp108)); + fRec219[0] = max((fRec219[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp109)))))); + fVbargraph42 = FAUSTFLOAT(fRec219[0]); + double fTemp110 = (0.025396825396825397 * fTemp12); + double fTemp111 = (0.025239567999997631 * fTemp6); + double fTemp112 = (fRec1[0] * (((((fConst29 * ((3.5444768026723675e-18 * fTemp21) + (0.015962904407738641 * fTemp105))) + ((fConst111 * fTemp107) + ((fConst25 * ((0.011287477954144623 * fTemp19) + (0.011287477954144622 * fTemp48))) + ((fConst42 * ((1.5998055129555246e-17 * fTemp29) + (0.072048835120117657 * fTemp109))) + ((fConst45 * ((0.025473109945013343 * fTemp32) + (0.025473109945013336 * fTemp50))) + (((fConst112 * fTemp43) + fTemp110) + (fConst113 * fTemp46))))))) + (fConst35 * ((0.0056437389770723117 * fTemp25) + (0.0056437389770723108 * fTemp55)))) + (0.022574955908289243 * (((((fTemp0 + (fConst114 * fTemp27)) + (fConst115 * fTemp35)) + (fConst116 * fTemp53)) + (fConst117 * fTemp23)) + (fConst118 * fTemp38)))) - fTemp111)); + fRec204[0] = max((fRec204[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp112)))))); + fVbargraph43 = FAUSTFLOAT(fRec204[0]); + output10[i] = FAUSTFLOAT(fTemp112); + double fTemp113 = (fConst53 * fTemp109); + double fTemp114 = (fConst55 * fTemp105); + double fTemp115 = (fConst123 * fTemp35); + double fTemp116 = (fConst129 * fTemp50); + double fTemp117 = (fRec1[0] * (((fConst33 * ((0.011287477954144627 * fTemp23) + (0.011287477954144618 * fTemp46))) + ((0.022574955908289243 * (((((((((fTemp0 + (fConst119 * fTemp32)) + fTemp113) + (fConst120 * fTemp29)) + (fConst121 * fTemp19)) + fTemp114) + (fConst122 * fTemp21)) + fTemp115) + (fConst124 * fTemp53)) + (fConst125 * fTemp25))) + ((fConst39 * ((0.10189243978005338 * fTemp27) + (0.1018924397800533 * fTemp43))) + ((fConst126 * fTemp107) + ((fConst127 * fTemp55) + ((fConst128 * fTemp48) + (fTemp116 + (fTemp110 + (fConst130 * fTemp38))))))))) - fTemp111)); + fRec223[0] = max((fRec223[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp117)))))); + fVbargraph44 = FAUSTFLOAT(fRec223[0]); + output11[i] = FAUSTFLOAT(fTemp117); + double fTemp118 = (fRec1[0] * (((fConst51 * ((0.40756975912021387 * fTemp38) + (0.40756975912021298 * fTemp53))) + ((0.022574955908289243 * ((((fTemp115 + (((((fTemp0 + (fConst119 * fTemp50)) + (fConst131 * fTemp32)) + (fConst132 * fTemp43)) + (fConst121 * fTemp48)) + (fConst133 * fTemp19))) + (fConst134 * fTemp46)) + (fConst125 * fTemp55)) + (fConst135 * fTemp25))) + ((fConst29 * ((7.088953605344735e-18 * fTemp21) + (0.015962904407738645 * fTemp105))) + ((fConst42 * ((3.1996110259110492e-17 * fTemp29) + (0.072048835120117671 * fTemp109))) + ((fConst136 * fTemp107) + ((fTemp110 + (fConst137 * fTemp27)) + (fConst138 * fTemp23))))))) - fTemp111)); + fRec224[0] = max((fRec224[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp118)))))); + fVbargraph45 = FAUSTFLOAT(fRec224[0]); + output12[i] = FAUSTFLOAT(fTemp118); + double fTemp119 = (fRec1[0] * ((((fConst139 * fTemp107) + ((fConst140 * fTemp53) + (((fConst141 * fTemp19) + (fTemp110 + (fConst142 * fTemp32))) + (fConst143 * fTemp25)))) + (0.022574955908289243 * (((((fTemp115 + ((fTemp114 + (((((fTemp113 + (fTemp0 + (fConst131 * fTemp50))) + (fConst144 * fTemp29)) + (fConst145 * fTemp43)) + (fConst133 * fTemp48)) + (fConst146 * fTemp27))) + (fConst147 * fTemp21))) + (fConst148 * fTemp46)) + (fConst135 * fTemp55)) + (fConst149 * fTemp23)) + (fConst150 * fTemp38)))) - fTemp111)); + fRec225[0] = max((fRec225[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp119)))))); + fVbargraph46 = FAUSTFLOAT(fRec225[0]); + output13[i] = FAUSTFLOAT(fTemp119); + double fTemp120 = (fConst154 * fTemp66); + double fTemp121 = (fConst157 * fTemp61); + double fTemp122 = (fConst168 * fTemp35); + double fTemp123 = (fConst170 * fTemp29); + double fTemp124 = (fTemp75 + fTemp79); + double fTemp125 = (fRec1[0] * (((0.031925808815477283 * ((((fConst152 * fTemp71) + fTemp120) + (fConst156 * fTemp64)) + fTemp121)) + ((0.015962904407738641 * (((fConst159 * fTemp19) + (fConst161 * fTemp21)) + (fConst162 * fTemp23))) + ((0.010641936271825759 * ((fConst164 * fTemp73) + (fConst165 * fTemp68))) + ((fConst167 * fTemp25) + (fTemp77 + (fTemp122 + ((fConst169 * fTemp27) + (fTemp123 + ((fConst129 * fTemp32) + (fTemp80 + (fTemp78 + (fTemp74 + fTemp76)))))))))))) - fTemp124)); + fRec226[0] = max((fRec226[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp125)))))); + fVbargraph47 = FAUSTFLOAT(fRec226[0]); + output14[i] = FAUSTFLOAT(fTemp125); + double fTemp126 = (fConst171 * fTemp66); + double fTemp127 = (fConst173 * fTemp21); + double fTemp128 = (fConst175 * fTemp68); + double fTemp129 = (fTemp80 + (fTemp76 + fTemp78)); + double fTemp130 = (fTemp122 + fTemp129); + double fTemp131 = (fRec1[0] * (((0.031925808815477283 * (fTemp121 + (fConst152 * fTemp91))) + ((0.022574955908289243 * (((((fTemp84 + fTemp126) + (fConst172 * fTemp87)) + fTemp127) + (fConst174 * fTemp46)) + fTemp128)) + ((fConst167 * fTemp55) + ((fConst176 * fTemp93) + ((fConst177 * fTemp48) + (fTemp95 + (fTemp116 + fTemp130))))))) - fTemp124)); + fRec227[0] = max((fRec227[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp131)))))); + fVbargraph48 = FAUSTFLOAT(fRec227[0]); + output15[i] = FAUSTFLOAT(fTemp131); + double fTemp132 = (fRec1[0] * (((0.022574955908289243 * (fTemp99 + (((((fTemp98 + ((fTemp97 + (fConst178 * fTemp71)) + (fConst179 * fTemp19))) + (fConst180 * fTemp73)) + (fConst172 * fTemp64)) + (fConst181 * fTemp25)) + (fConst174 * fTemp23)))) + ((0.031925808815477283 * (fTemp120 + fTemp121)) + ((fConst182 * fTemp68) + ((fConst183 * fTemp21) + (fTemp122 + (fTemp123 + fTemp129)))))) - fTemp124)); + fRec228[0] = max((fRec228[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp132)))))); + fVbargraph49 = FAUSTFLOAT(fRec228[0]); + output16[i] = FAUSTFLOAT(fTemp132); + double fTemp133 = (fRec1[0] * (((0.031925808815477283 * (fTemp121 + (fConst156 * fTemp87))) + ((0.022574955908289243 * (fTemp128 + ((fTemp102 + (fTemp127 + ((fTemp126 + ((fTemp83 + (fTemp101 + (fConst178 * fTemp91))) + (fConst179 * fTemp48))) + (fConst180 * fTemp93)))) + (fConst181 * fTemp55)))) + ((fConst184 * fTemp46) + ((fConst169 * fTemp43) + fTemp130)))) - fTemp124)); + fRec229[0] = max((fRec229[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp133)))))); + fVbargraph50 = FAUSTFLOAT(fRec229[0]); + output17[i] = FAUSTFLOAT(fTemp133); + double fTemp134 = ((9.9655853669580557e-18 * fTemp29) + (0.044881006545161167 * fTemp109)); + double fTemp135 = (fRec3[0] * double(input10[i])); + fRec234[0] = (fRec234[1] + fRec233[1]); fRec235[0] = (fRec235[1] + fRec234[1]); - fRec230[0] = (fSlow26 * (fRec231[0] - ((fSlow31 * fRec234[0]) + (fSlow30 * fRec235[0])))); - fRec236[0] = (fRec236[1] + fRec229[1]); - fRec229[0] = (fSlow25 * (fRec230[0] - (fSlow32 * fRec236[0]))); - double fTemp152 = (fRec229[0] + (fSlow4 * fTemp151)); - fRec228[0] = max((fRec228[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp152)))))); - fVbargraph41 = FAUSTFLOAT(fRec228[0]); - double fTemp153 = (7.1920782098622802e-18 * fTemp152); - double fTemp154 = (fRec3[0] * double(input17[i])); - fRec240[0] = (fRec240[1] + fRec239[1]); + fRec233[0] = (fSlow15 * ((fSlow3 * fTemp135) - ((fSlow17 * fRec234[0]) + (fSlow16 * fRec235[0])))); + fRec236[0] = (fRec236[1] + fRec232[1]); + fRec232[0] = (fSlow14 * (fRec233[0] - (fSlow18 * fRec236[0]))); + double fTemp136 = (fRec232[0] + (fSlow4 * fTemp135)); + fRec231[0] = max((fRec231[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp136)))))); + fVbargraph51 = FAUSTFLOAT(fRec231[0]); + double fTemp137 = (fRec3[0] * double(input28[i])); fRec241[0] = (fRec241[1] + fRec240[1]); - fRec239[0] = (fSlow20 * ((fSlow3 * fTemp154) - ((fSlow22 * fRec240[0]) + (fSlow21 * fRec241[0])))); - fRec242[0] = (fRec242[1] + fRec238[1]); - fRec243[0] = (fRec243[1] + fRec242[1]); - fRec238[0] = (fSlow19 * (fRec239[0] - ((fSlow24 * fRec242[0]) + (fSlow23 * fRec243[0])))); - double fTemp155 = (fRec238[0] + (fSlow4 * fTemp154)); - fRec237[0] = max((fRec237[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); - fVbargraph42 = FAUSTFLOAT(fRec237[0]); - double fTemp156 = (0.035414181017315374 * fTemp155); - double fTemp157 = (0.016694405031674409 * fTemp93); - double fTemp158 = (0.048447942889749587 * fTemp87); - double fTemp159 = (6.5054795140920346e-18 * fTemp39); - double fTemp160 = (1.1770801000262998e-18 * fTemp48); - double fTemp161 = (8.8997427277808398e-18 * fTemp54); - double fTemp162 = (fRec1[0] * ((fTemp129 + (fTemp132 + (fTemp133 + (fTemp134 + (fTemp135 + (fTemp138 + (fTemp141 + (fTemp142 + (fTemp143 + ((fTemp120 + (fTemp117 + ((((fTemp108 + (fTemp106 + fTemp144)) + fTemp145) + fTemp146) + fTemp147))) + fTemp148)))))))))) - (fTemp149 + (fTemp150 + (fTemp153 + (fTemp156 + (fTemp157 + (fTemp158 + ((fTemp118 + ((fTemp124 + ((fTemp115 + (fTemp123 + (fTemp112 + (fTemp110 + fTemp122)))) + fTemp159)) + fTemp160)) + fTemp161))))))))); - fRec201[0] = max((fRec201[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp162)))))); - fVbargraph43 = FAUSTFLOAT(fRec201[0]); - output7[i] = FAUSTFLOAT(fTemp162); - double fTemp163 = (6.1334249057128588e-18 * (fTemp93 - fTemp91)); - double fTemp164 = (5.3536921713822013e-18 * fTemp128); - double fTemp165 = (5.6858370633078216e-18 * fTemp79); - double fTemp166 = (1.3010959028184069e-17 * fTemp155); - double fTemp167 = (3.3859722305960555e-18 * fTemp84); - double fTemp168 = (1.779948545556168e-17 * fTemp87); - double fTemp169 = (1.6392267574774099e-18 * fTemp140); - double fTemp170 = (4.7509305030079371e-18 * fTemp96); - double fTemp171 = (fTemp106 + fTemp108); - double fTemp172 = (1.0015840929783018e-17 * fTemp131); - double fTemp173 = (2.3541602000525996e-18 * fTemp76); - double fTemp174 = (1.438415641972456e-17 * fTemp152); - double fTemp175 = (5.3536921713822029e-18 * fTemp82); - double fTemp176 = (8.3046965809936507e-18 * fTemp137); - double fTemp177 = (1.1591083561147146e-17 * fTemp99); - double fTemp178 = (fRec1[0] * ((fTemp163 + (fTemp164 + (fTemp165 + (fTemp166 + (fTemp167 + (fTemp168 + (fTemp169 + (fTemp170 + (fTemp120 + (fTemp118 + (fTemp125 + (fTemp117 + (fTemp115 + (fTemp112 + (fTemp110 + fTemp171))))))))))))))) - (fTemp172 + (fTemp173 + (fTemp174 + (fTemp175 + (fTemp176 + (fTemp177 + (fTemp121 + (fTemp119 + (fTemp124 + (fTemp116 + (fTemp114 + (fTemp123 + (fTemp113 + (fTemp111 + (fTemp122 + (fTemp107 + fTemp109)))))))))))))))))); - fRec244[0] = max((fRec244[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp178)))))); - fVbargraph44 = FAUSTFLOAT(fRec244[0]); - output8[i] = FAUSTFLOAT(fTemp178); - double fTemp179 = (1.5023761394674526e-17 * fTemp131); - double fTemp180 = (8.0305382570733035e-18 * fTemp82); - double fTemp181 = (1.2457044871490476e-17 * fTemp137); - double fTemp182 = (1.7386625341720719e-17 * fTemp99); - double fTemp183 = (9.2001373585692901e-18 * fTemp27); - double fTemp184 = (1.9516438542276106e-17 * fTemp39); - double fTemp185 = (3.5312403000788995e-18 * fTemp48); - double fTemp186 = (2.6699228183342524e-17 * fTemp54); - double fTemp187 = (2.1576234629586837e-17 * fTemp152); - double fTemp188 = (9.200137358569287e-18 * fTemp91); - double fTemp189 = (5.0789583458940831e-18 * fTemp6); - double fTemp190 = (8.0305382570733005e-18 * fTemp12); - double fTemp191 = (7.1263957545119048e-18 * fTemp21); - double fTemp192 = (2.4588401362161147e-18 * fTemp33); - double fTemp193 = (2.5023430732567692e-17 * fTemp60); - double fTemp194 = (fRec1[0] * ((fTemp179 + (fTemp150 + (fTemp156 + (fTemp157 + (fTemp180 + (fTemp181 + (fTemp158 + (fTemp182 + (fTemp120 + (((fTemp117 + ((fTemp171 + fTemp183) + fTemp184)) + fTemp185) + fTemp186)))))))))) - (fTemp129 + (fTemp187 + (fTemp133 + (fTemp188 + (fTemp135 + (fTemp141 + (fTemp143 + ((fTemp118 + (fTemp124 + (fTemp115 + ((fTemp123 + (fTemp112 + ((fTemp122 + (fTemp110 + (fTemp189 + fTemp190))) + fTemp191))) + fTemp192)))) + fTemp193)))))))))); - fRec245[0] = max((fRec245[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp194)))))); - fVbargraph45 = FAUSTFLOAT(fRec245[0]); - output9[i] = FAUSTFLOAT(fTemp194); - double fTemp195 = (0.025630902468550196 * fTemp76); - double fTemp196 = (0.043716214137085485 * fTemp82); - double fTemp197 = (0.027648561470568499 * fTemp84); - double fTemp198 = (fTemp104 + fTemp107); - double fTemp199 = (0.025396825396825397 * fTemp30); - double fTemp200 = (0.025630902468550199 * fTemp48); - double fTemp201 = (0.037859351999996446 * fTemp99); - double fTemp202 = (0.025862861065006505 * fTemp96); - double fTemp203 = (0.025239567999997631 * fTemp9); - double fTemp204 = (0.025862861065006511 * fTemp21); - double fTemp205 = (0.050083215095023212 * fTemp42); - double fTemp206 = (fRec1[0] * ((fTemp195 + ((6.133424905712858e-18 * fTemp91) + (fTemp196 + (fTemp197 + ((((fTemp198 + (2.6768460856911007e-18 * fTemp15)) + fTemp199) + fTemp200) + (0.027684538794142621 * fTemp54)))))) - ((0.033388810063348803 * (fTemp27 - fTemp93)) + ((0.037142706401659779 * fTemp79) + ((0.027684538794142628 * fTemp87) + (fTemp201 + (fTemp202 + ((((fTemp203 + fTemp204) + (2.3182167122294292e-18 * fTemp36)) + fTemp205) + (0.037142706401659786 * fTemp60))))))))); - fRec246[0] = max((fRec246[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp206)))))); - fVbargraph46 = FAUSTFLOAT(fRec246[0]); - output10[i] = FAUSTFLOAT(fTemp206); - double fTemp207 = (0.025630902468550199 * fTemp76); - double fTemp208 = (0.025862861065006511 * fTemp96); - double fTemp209 = (fRec1[0] * ((fTemp207 + ((1.8400274717138574e-17 * fTemp91) + ((0.033388810063348796 * fTemp93) + (fTemp135 + (fTemp201 + (((fTemp199 + ((fTemp104 + (0.025862861065006505 * fTemp21)) + (0.033388810063348817 * fTemp27))) + (6.9546501366882881e-18 * fTemp36)) + (0.037142706401659731 * fTemp60))))))) - ((0.037142706401659828 * fTemp79) + (fTemp196 + ((0.027684538794142618 * fTemp87) + (fTemp208 + (((fTemp205 + ((fTemp203 + (0.027648561470568499 * fTemp6)) + (8.0305382570733005e-18 * fTemp15))) + (0.025630902468550196 * fTemp48)) + (0.027684538794142632 * fTemp54)))))))); - fRec247[0] = max((fRec247[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp209)))))); - fVbargraph47 = FAUSTFLOAT(fRec247[0]); - output11[i] = FAUSTFLOAT(fTemp209); - double fTemp210 = (fRec1[0] * (((0.037142706401659786 * fTemp79) + ((3.0667124528564293e-17 * fTemp91) + (fTemp196 + ((0.027684538794142663 * fTemp87) + (fTemp202 + ((fTemp199 + ((fTemp204 + (fTemp104 + (1.3384230428455503e-17 * fTemp15))) + (0.033388810063348762 * fTemp27))) + (0.037142706401659779 * fTemp60))))))) - (fTemp195 + ((0.033388810063348852 * fTemp93) + (fTemp197 + (fTemp201 + ((fTemp200 + (fTemp205 + ((fTemp107 + fTemp203) + (1.1591083561147147e-17 * fTemp36)))) + (0.027684538794142587 * fTemp54)))))))); - fRec248[0] = max((fRec248[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp210)))))); - fVbargraph48 = FAUSTFLOAT(fRec248[0]); - output12[i] = FAUSTFLOAT(fTemp210); - double fTemp211 = (fRec1[0] * (((0.037142706401659856 * fTemp79) + ((4.2933974339990009e-17 * fTemp91) + ((0.027684538794142632 * fTemp87) + (fTemp201 + (fTemp208 + ((((fTemp199 + (fTemp104 + (0.027648561470568496 * fTemp6))) + (1.6227516985606004e-17 * fTemp36)) + (0.025630902468550189 * fTemp48)) + (0.027684538794142618 * fTemp54))))))) - (fTemp207 + ((0.033388810063348817 * fTemp93) + (fTemp196 + (fTemp135 + ((fTemp205 + (((fTemp203 + (1.8737922599837705e-17 * fTemp15)) + (0.025862861065006501 * fTemp21)) + (0.033388810063348796 * fTemp27))) + (0.03714270640165971 * fTemp60)))))))); - fRec249[0] = max((fRec249[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp211)))))); - fVbargraph49 = FAUSTFLOAT(fRec249[0]); - output13[i] = FAUSTFLOAT(fTemp211); - double fTemp212 = (fRec1[0] * ((fTemp121 + (fTemp119 + (fTemp124 + (fTemp117 + (fTemp115 + (fTemp113 + (fTemp111 + (fTemp122 + (fTemp110 + (fTemp108 + fTemp198)))))))))) - (fTemp120 + (fTemp118 + (fTemp125 + (fTemp116 + (fTemp114 + (fTemp123 + (fTemp112 + (fTemp105 + fTemp109)))))))))); - fRec250[0] = max((fRec250[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp212)))))); - fVbargraph50 = FAUSTFLOAT(fRec250[0]); - output14[i] = FAUSTFLOAT(fTemp212); - double fTemp213 = (fRec1[0] * ((fTemp153 + (fTemp133 + (fTemp156 + (fTemp134 + (fTemp135 + (fTemp142 + (fTemp143 + (fTemp148 + (fTemp118 + (fTemp124 + (fTemp117 + (fTemp159 + (fTemp112 + (fTemp146 + (fTemp122 + (fTemp108 + (fTemp104 + fTemp144))))))))))))))))) - (fTemp149 + (fTemp129 + (fTemp132 + (fTemp150 + (fTemp157 + (fTemp138 + (fTemp158 + (fTemp141 + (fTemp120 + (fTemp161 + (fTemp160 + (fTemp115 + (fTemp147 + (fTemp123 + (fTemp110 + (fTemp105 + fTemp145)))))))))))))))))); - fRec251[0] = max((fRec251[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp213)))))); - fVbargraph51 = FAUSTFLOAT(fRec251[0]); - output15[i] = FAUSTFLOAT(fTemp213); - double fTemp214 = (fTemp104 + fTemp108); - double fTemp215 = (fRec1[0] * ((fTemp163 + (fTemp172 + (fTemp174 + (fTemp165 + (fTemp167 + (fTemp176 + (fTemp168 + (fTemp170 + (fTemp125 + (fTemp124 + (fTemp117 + (fTemp116 + (fTemp115 + (fTemp114 + (fTemp122 + (fTemp110 + (fTemp109 + fTemp214))))))))))))))))) - (fTemp164 + (fTemp173 + (fTemp166 + (fTemp175 + (fTemp169 + (fTemp177 + (fTemp121 + (fTemp120 + (fTemp119 + (fTemp118 + (fTemp123 + (fTemp113 + (fTemp112 + (fTemp111 + (fTemp105 + fTemp107))))))))))))))))); - fRec252[0] = max((fRec252[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp215)))))); - fVbargraph52 = FAUSTFLOAT(fRec252[0]); - output16[i] = FAUSTFLOAT(fTemp215); - double fTemp216 = (fRec1[0] * ((fTemp129 + (fTemp150 + (fTemp187 + (fTemp157 + (fTemp180 + (fTemp158 + (fTemp141 + (fTemp182 + (fTemp186 + (fTemp118 + (fTemp185 + (fTemp124 + (fTemp117 + (fTemp192 + (fTemp183 + (fTemp112 + (fTemp122 + (fTemp190 + fTemp214)))))))))))))))))) - (fTemp179 + (fTemp133 + (fTemp156 + (fTemp188 + (fTemp135 + (fTemp181 + (fTemp143 + (fTemp193 + (fTemp120 + (fTemp184 + (fTemp115 + (fTemp123 + (fTemp191 + (fTemp110 + (fTemp105 + fTemp189))))))))))))))))); - fRec253[0] = max((fRec253[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp216)))))); - fVbargraph53 = FAUSTFLOAT(fRec253[0]); - output17[i] = FAUSTFLOAT(fTemp216); - double fTemp217 = (fTemp0 + fTemp3); - double fTemp218 = (0.021093750000000001 * fTemp217); - double fTemp219 = (0.027231914153020904 * fTemp128); - double fTemp220 = (0.041597435974919175 * fTemp131); - double fTemp221 = (4.8773411440759829e-18 * fTemp152); - double fTemp222 = (0.029413829057838591 * fTemp155); - double fTemp223 = (2.5471083409710855e-18 * fTemp91); - double fTemp224 = (0.016982082124440745 * fTemp93); - double fTemp225 = (0.027231914153020897 * fTemp82); - double fTemp226 = (0.021093749999999994 * fTemp84); - double fTemp227 = (1.5316979614614479e-17 * fTemp137); - double fTemp228 = (0.028161597282885743 * fTemp87); - double fTemp229 = (0.031444705933590805 * fTemp99); - double fTemp230 = (0.013154264250377145 * fTemp96); - double fTemp231 = (5.236595479505967e-18 * fTemp9); - double fTemp232 = ((0.021093749999999998 * fTemp6) + fTemp231); - double fTemp233 = (0.027231914153020911 * fTemp12); - double fTemp234 = (1.6674738251076273e-18 * fTemp15); - double fTemp235 = (0.013154264250377147 * fTemp21); - double fTemp236 = (2.5471083409710867e-18 * fTemp24); - double fTemp237 = (1.9254329235850881e-18 * fTemp36); - double fTemp238 = (9.3789450288214403e-34 * fTemp51); - double fTemp239 = (0.01111738239902945 * (fTemp33 + fTemp140)); - double fTemp240 = (0.026072572806195678 * fTemp76); - double fTemp241 = (0.012594249175901169 * fTemp79); - double fTemp242 = (0.021480823570105497 * fTemp18); - double fTemp243 = (0.016982082124440741 * fTemp27); - double fTemp244 = (0.024609375000000013 * fTemp30); - double fTemp245 = (0.029413829057838584 * fTemp39); - double fTemp246 = (0.020798717987459581 * fTemp42); - double fTemp247 = (0.0067319093514117785 * fTemp45); - double fTemp248 = (0.026072572806195685 * fTemp48); - double fTemp249 = (0.028161597282885739 * fTemp54); - double fTemp250 = (0.039826512815546306 * fTemp57); - double fTemp251 = (0.012594249175901174 * fTemp60); - double fTemp252 = (fRec1[0] * ((fTemp218 + (fTemp219 + (fTemp220 + (fTemp221 + (fTemp222 + (fTemp223 + (fTemp224 + (fTemp225 + (fTemp226 + (fTemp227 + (fTemp228 + (fTemp229 + (fTemp230 + ((((((fTemp232 + fTemp233) + fTemp234) + fTemp235) + fTemp236) + fTemp237) + fTemp238)))))))))))))) - (fTemp239 + (fTemp240 + (fTemp241 + (((((((((fTemp242 + fTemp243) + fTemp244) + fTemp245) + fTemp246) + fTemp247) + fTemp248) + fTemp249) + fTemp250) + fTemp251)))))); - fRec254[0] = max((fRec254[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp252)))))); - fVbargraph54 = FAUSTFLOAT(fRec254[0]); - output18[i] = FAUSTFLOAT(fTemp252); - double fTemp253 = (0.01111738239902945 * (fTemp33 - fTemp140)); - double fTemp254 = (0.027231914153020911 * fTemp128); - double fTemp255 = (1.4632023432227946e-17 * fTemp152); - double fTemp256 = (0.02941382905783858 * fTemp155); - double fTemp257 = (7.6413250229132566e-18 * fTemp91); - double fTemp258 = (0.016982082124440741 * fTemp93); - double fTemp259 = (0.021093749999999998 * fTemp84); - double fTemp260 = (0.028161597282885732 * fTemp87); - double fTemp261 = (0.013154264250377147 * fTemp96); - double fTemp262 = (0.016982082124440748 * fTemp27); - double fTemp263 = (0.029413829057838594 * fTemp39); - double fTemp264 = (0.026072572806195678 * fTemp48); - double fTemp265 = (0.028161597282885746 * fTemp54); - double fTemp266 = (0.012594249175901155 * fTemp60); - double fTemp267 = (0.026072572806195685 * fTemp76); - double fTemp268 = (0.012594249175901188 * fTemp79); - double fTemp269 = (0.021093749999999994 * fTemp6); - double fTemp270 = (0.027231914153020904 * fTemp12); - double fTemp271 = (5.0024214753228816e-18 * fTemp15); - double fTemp272 = (0.013154264250377145 * fTemp21); - double fTemp273 = (7.6413250229132581e-18 * fTemp24); - double fTemp274 = (5.7762987707552641e-18 * fTemp36); - double fTemp275 = (2.8136835086464319e-33 * fTemp51); - double fTemp276 = (fRec1[0] * ((fTemp253 + (fTemp218 + (fTemp254 + (fTemp255 + (fTemp256 + (fTemp257 + (fTemp258 + (fTemp259 + (fTemp260 + (fTemp261 + (((((fTemp231 + fTemp262) + fTemp263) + fTemp264) + fTemp265) + fTemp266))))))))))) - (fTemp220 + (fTemp267 + (fTemp268 + (fTemp225 + (fTemp227 + (fTemp229 + (fTemp250 + ((fTemp247 + (fTemp246 + ((fTemp244 + (((fTemp242 + ((fTemp269 + fTemp270) + fTemp271)) + fTemp272) + fTemp273)) + fTemp274))) + fTemp275)))))))))); - fRec255[0] = max((fRec255[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp276)))))); + fRec242[0] = (fRec242[1] + fRec241[1]); + fRec240[0] = (fSlow27 * ((fSlow3 * fTemp137) - ((fSlow29 * fRec241[0]) + (fSlow28 * fRec242[0])))); + fRec243[0] = (fRec243[1] + fRec239[1]); + fRec244[0] = (fRec244[1] + fRec243[1]); + fRec239[0] = (fSlow26 * (fRec240[0] - ((fSlow31 * fRec243[0]) + (fSlow30 * fRec244[0])))); + fRec245[0] = (fRec245[1] + fRec238[1]); + fRec238[0] = (fSlow25 * (fRec239[0] - (fSlow32 * fRec245[0]))); + double fTemp138 = (fRec238[0] + (fSlow4 * fTemp137)); + fRec237[0] = max((fRec237[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp138)))))); + fVbargraph52 = FAUSTFLOAT(fRec237[0]); + double fTemp139 = ((0.0052734375000000012 * fTemp25) + (0.0052734375000000003 * fTemp55)); + double fTemp140 = (fRec3[0] * double(input26[i])); + fRec250[0] = (fRec250[1] + fRec249[1]); + fRec251[0] = (fRec251[1] + fRec250[1]); + fRec249[0] = (fSlow27 * ((fSlow3 * fTemp140) - ((fSlow29 * fRec250[0]) + (fSlow28 * fRec251[0])))); + fRec252[0] = (fRec252[1] + fRec248[1]); + fRec253[0] = (fRec253[1] + fRec252[1]); + fRec248[0] = (fSlow26 * (fRec249[0] - ((fSlow31 * fRec252[0]) + (fSlow30 * fRec253[0])))); + fRec254[0] = (fRec254[1] + fRec247[1]); + fRec247[0] = (fSlow25 * (fRec248[0] - (fSlow32 * fRec254[0]))); + double fTemp141 = (fRec247[0] + (fSlow4 * fTemp140)); + fRec246[0] = max((fRec246[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp141)))))); + fVbargraph53 = FAUSTFLOAT(fRec246[0]); + double fTemp142 = ((0.007031250000000001 * fTemp73) + (0.0070312500000000002 * fTemp93)); + double fTemp143 = (5.236595479505967e-18 * fTemp6); + double fTemp144 = ((0.019434045907762623 * fTemp32) + (0.019434045907762619 * fTemp50)); + double fTemp145 = (fConst199 * fTemp91); + double fTemp146 = (fTemp0 + fTemp3); + double fTemp147 = (fConst202 * fTemp27); + double fTemp148 = (fConst204 * fTemp35); + double fTemp149 = (fConst205 * fTemp53); + double fTemp150 = (fConst209 * fTemp38); + double fTemp151 = (0.021480823570105497 * fTemp9); + double fTemp152 = (0.024609375000000006 * fTemp12); + double fTemp153 = (0.006731909351411762 * fTemp15); + double fTemp154 = ((fTemp151 + fTemp152) + fTemp153); + double fTemp155 = (fRec1[0] * ((((fConst26 * (((((((fConst41 * fTemp134) + (fConst185 * fTemp136)) + (fConst186 * fTemp66)) + (fConst187 * fTemp105)) + (fConst188 * fTemp21)) + (fConst189 * fTemp138)) + (fConst190 * fTemp68))) + ((fConst192 * fTemp139) + ((fConst30 * (((fConst193 * fTemp43) + (fConst194 * fTemp87)) + (fConst195 * fTemp46))) + ((fConst47 * ((fConst196 * fTemp107) + (fConst197 * fTemp141))) + ((fConst198 * fTemp142) + (fTemp143 + (fConst20 * (((((fConst44 * fTemp144) + fTemp145) + (fConst199 * fTemp71)) + (fConst200 * fTemp48)) + (fConst201 * fTemp19))))))))) + (0.021093750000000001 * (((((((fTemp146 + fTemp147) + (fConst203 * fTemp64)) + fTemp148) + fTemp149) + (fConst206 * fTemp23)) + (fConst208 * fTemp61)) + fTemp150))) - fTemp154)); + fRec230[0] = max((fRec230[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp155)))))); + fVbargraph54 = FAUSTFLOAT(fRec230[0]); + output18[i] = FAUSTFLOAT(fTemp155); + double fTemp156 = (fConst210 * fTemp32); + double fTemp157 = (fConst211 * fTemp109); + double fTemp158 = (fConst213 * fTemp29); + double fTemp159 = (fConst214 * fTemp136); + double fTemp160 = (fConst217 * fTemp105); + double fTemp161 = (fConst220 * fTemp35); + double fTemp162 = (fConst221 * fTemp53); + double fTemp163 = (fConst222 * fTemp138); + double fTemp164 = (fConst225 * fTemp61); + double fTemp165 = ((0.051824122420700336 * fTemp27) + (0.051824122420700287 * fTemp43)); + double fTemp166 = (fConst233 * fTemp38); + double fTemp167 = (fRec1[0] * (((0.021093750000000001 * ((((((((((((((((fTemp146 + fTemp156) + fTemp157) + (fConst212 * fTemp71)) + fTemp158) + fTemp159) + (fConst215 * fTemp19)) + (fConst216 * fTemp66)) + fTemp160) + (fConst218 * fTemp73)) + (fConst219 * fTemp21)) + fTemp161) + fTemp162) + fTemp163) + (fConst223 * fTemp25)) + (fConst224 * fTemp68)) + fTemp164)) + ((fConst30 * (((((fConst38 * fTemp165) + (fConst226 * fTemp87)) + (fConst194 * fTemp64)) + (fConst227 * fTemp46)) + (fConst195 * fTemp23))) + ((fConst47 * ((fConst228 * fTemp107) + (fConst229 * fTemp141))) + ((fConst20 * ((fTemp145 + (fConst230 * fTemp50)) + (fConst201 * fTemp48))) + ((fConst231 * fTemp55) + ((fConst232 * fTemp93) + (fTemp143 + fTemp166))))))) - fTemp154)); + fRec255[0] = max((fRec255[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp167)))))); fVbargraph55 = FAUSTFLOAT(fRec255[0]); - output19[i] = FAUSTFLOAT(fTemp276); - double fTemp277 = (2.4386705720379917e-17 * fTemp152); - double fTemp278 = (0.012594249175901172 * fTemp79); - double fTemp279 = (1.2735541704855428e-17 * fTemp91); - double fTemp280 = (0.01111738239902945 * fTemp140); - double fTemp281 = (8.3373691255381378e-18 * fTemp15); - double fTemp282 = (1.2735541704855431e-17 * fTemp24); - double fTemp283 = (0.016982082124440721 * fTemp27); - double fTemp284 = (0.011117382399029452 * fTemp33); - double fTemp285 = (9.6271646179254396e-18 * fTemp36); - double fTemp286 = (0.029413829057838549 * fTemp39); - double fTemp287 = (0.026072572806195689 * fTemp48); - double fTemp288 = (4.6894725144107197e-33 * fTemp51); - double fTemp289 = (0.028161597282885704 * fTemp54); - double fTemp290 = (0.012594249175901169 * fTemp60); - double fTemp291 = (0.029413829057838629 * fTemp155); - double fTemp292 = (0.016982082124440766 * fTemp93); - double fTemp293 = (0.028161597282885781 * fTemp87); - double fTemp294 = (0.013154264250377148 * fTemp21); - double fTemp295 = (fRec1[0] * ((fTemp220 + (fTemp240 + (fTemp277 + (fTemp278 + (fTemp279 + (fTemp225 + (fTemp227 + (fTemp280 + (fTemp229 + ((((((((((fTemp231 + fTemp281) + fTemp282) + fTemp283) + fTemp284) + fTemp285) + fTemp286) + fTemp287) + fTemp288) + fTemp289) + fTemp290)))))))))) - ((0.021093750000000001 * (fTemp6 - fTemp217)) + (fTemp219 + (fTemp291 + (fTemp292 + (fTemp226 + (fTemp293 + (fTemp230 + (fTemp250 + (fTemp247 + (fTemp246 + (fTemp244 + ((fTemp233 + fTemp242) + fTemp294)))))))))))))); - fRec256[0] = max((fRec256[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp295)))))); + output19[i] = FAUSTFLOAT(fTemp167); + double fTemp168 = (fConst51 * ((0.13819765978853429 * fTemp38) + (0.13819765978853399 * fTemp53))); + double fTemp169 = (fTemp0 + (fConst210 * fTemp50)); + double fTemp170 = (fConst234 * fTemp32); + double fTemp171 = (fConst236 * fTemp43); + double fTemp172 = ((1.9931170733916111e-17 * fTemp29) + (0.044881006545161174 * fTemp109)); + double fTemp173 = (fRec1[0] * ((fTemp168 + ((0.021093750000000001 * (fTemp164 + ((((fTemp161 + ((((((((((fTemp3 + fTemp169) + fTemp170) + (fConst212 * fTemp91)) + (fConst235 * fTemp71)) + fTemp171) + (fConst215 * fTemp48)) + (fConst237 * fTemp19)) + (fConst238 * fTemp87)) + (fConst218 * fTemp93)) + (fConst239 * fTemp73))) + (fConst240 * fTemp46)) + (fConst223 * fTemp55)) + (fConst241 * fTemp25)))) + ((fConst30 * (((fConst242 * fTemp27) + (fConst243 * fTemp64)) + (fConst244 * fTemp23))) + ((fConst26 * (((((((fConst41 * fTemp172) + (fConst245 * fTemp136)) + (fConst246 * fTemp66)) + (fConst247 * fTemp105)) + (fConst248 * fTemp21)) + (fConst249 * fTemp138)) + (fConst250 * fTemp68))) + (fTemp143 + (fConst47 * ((fConst251 * fTemp107) + (fConst252 * fTemp141)))))))) - fTemp154)); + fRec256[0] = max((fRec256[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp173)))))); fVbargraph56 = FAUSTFLOAT(fRec256[0]); - output20[i] = FAUSTFLOAT(fTemp295); - double fTemp296 = (fTemp0 - fTemp84); - double fTemp297 = (1.7829758386797597e-17 * fTemp91); - double fTemp298 = (fTemp231 + (0.021093749999999991 * fTemp6)); - double fTemp299 = (0.027231914153020901 * fTemp12); - double fTemp300 = (0.011117382399029452 * fTemp140); - double fTemp301 = (0.012594249175901195 * fTemp79); - double fTemp302 = (3.4141388008531875e-17 * fTemp152); - double fTemp303 = (0.026072572806195689 * fTemp76); - double fTemp304 = (0.029413829057838594 * fTemp155); - double fTemp305 = (0.016982082124440748 * fTemp93); - double fTemp306 = (0.028161597282885746 * fTemp87); - double fTemp307 = (0.013154264250377148 * fTemp96); - double fTemp308 = (1.167231677575339e-17 * fTemp15); - double fTemp309 = (1.7829758386797603e-17 * fTemp24); - double fTemp310 = (0.011117382399029449 * fTemp33); - double fTemp311 = (1.3478030465095617e-17 * fTemp36); - double fTemp312 = (0.02941382905783858 * fTemp39); - double fTemp313 = (0.026072572806195675 * fTemp48); - double fTemp314 = (6.5652615201750074e-33 * fTemp51); - double fTemp315 = (0.028161597282885732 * fTemp54); - double fTemp316 = (0.012594249175901146 * fTemp60); - double fTemp317 = (fRec1[0] * (((0.021093750000000001 * (fTemp3 + fTemp296)) + ((((fTemp297 + ((fTemp272 + (fTemp298 + fTemp299)) + fTemp300)) + fTemp301) + fTemp302) + fTemp303)) - (fTemp254 + (fTemp220 + (fTemp304 + (fTemp305 + (fTemp225 + (fTemp227 + (fTemp306 + (fTemp229 + (fTemp307 + ((fTemp250 + ((((fTemp247 + (fTemp246 + ((((fTemp244 + (fTemp243 + ((fTemp242 + fTemp308) + fTemp309))) + fTemp310) + fTemp311) + fTemp312))) + fTemp313) + fTemp314) + fTemp315)) + fTemp316)))))))))))); - fRec257[0] = max((fRec257[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp317)))))); + output20[i] = FAUSTFLOAT(fTemp173); + double fTemp174 = (fConst259 * fTemp53); + double fTemp175 = (fTemp0 + (fConst234 * fTemp50)); + double fTemp176 = (fConst261 * fTemp29); + double fTemp177 = (fConst262 * fTemp43); + double fTemp178 = (fConst264 * fTemp27); + double fTemp179 = (fConst271 * fTemp38); + double fTemp180 = (fRec1[0] * ((((fConst47 * ((fConst253 * fTemp107) + (fConst254 * fTemp141))) + ((fConst20 * (((fConst255 * fTemp32) + (fConst256 * fTemp71)) + (fConst257 * fTemp19))) + (((fConst258 * fTemp73) + (fTemp143 + fTemp174)) + (fConst260 * fTemp25)))) + (0.021093750000000001 * ((fTemp164 + ((((fTemp163 + ((fTemp161 + ((((fTemp160 + (((((fTemp159 + ((((fTemp157 + (fTemp3 + fTemp175)) + (fConst235 * fTemp91)) + fTemp176) + fTemp177)) + (fConst237 * fTemp48)) + (fConst263 * fTemp66)) + fTemp178) + (fConst265 * fTemp87))) + (fConst239 * fTemp93)) + (fConst266 * fTemp21)) + (fConst267 * fTemp64))) + (fConst268 * fTemp46))) + (fConst241 * fTemp55)) + (fConst269 * fTemp68)) + (fConst270 * fTemp23))) + fTemp179))) - fTemp154)); + fRec257[0] = max((fRec257[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp180)))))); fVbargraph57 = FAUSTFLOAT(fRec257[0]); - output21[i] = FAUSTFLOAT(fTemp317); - double fTemp318 = (fTemp0 - fTemp3); - double fTemp319 = (0.021093750000000001 * fTemp318); - double fTemp320 = (fRec1[0] * ((fTemp319 + (fTemp239 + (fTemp223 + (fTemp224 + (fTemp225 + (fTemp226 + (fTemp228 + (fTemp229 + (fTemp230 + (fTemp250 + (fTemp247 + (fTemp245 + (fTemp237 + (fTemp235 + (fTemp242 + (fTemp232 + fTemp234)))))))))))))))) - (fTemp219 + (fTemp220 + (fTemp240 + (fTemp221 + (fTemp241 + (fTemp222 + (fTemp227 + (fTemp251 + (fTemp249 + (fTemp238 + (fTemp248 + (fTemp246 + (fTemp244 + (fTemp243 + (fTemp233 + fTemp236))))))))))))))))); - fRec258[0] = max((fRec258[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp320)))))); + output21[i] = FAUSTFLOAT(fTemp180); + double fTemp181 = (fConst283 * fTemp141); + double fTemp182 = (fTemp153 + (fTemp143 + fTemp151)); + double fTemp183 = (fTemp0 - fTemp3); + double fTemp184 = (fRec1[0] * ((((fConst274 * ((2.2079425200240589e-18 * fTemp68) + (0.0099436891104358258 * fTemp138))) + ((fConst278 * fTemp139) + ((fConst281 * fTemp46) + (fTemp181 + ((fConst284 * ((3.3119137800360884e-18 * fTemp21) + (0.014915533665653739 * fTemp105))) + ((fConst285 * fTemp142) + ((fConst287 * fTemp87) + ((fConst288 * ((6.6238275600721768e-18 * fTemp66) + (0.029831067331307477 * fTemp136))) + ((fConst289 * ((0.010546875000000002 * fTemp19) + (0.010546875000000001 * fTemp48))) + ((fConst291 * fTemp71) + ((fConst42 * fTemp134) + ((fConst45 * fTemp144) + ((fConst292 * fTemp107) + ((fConst293 * fTemp43) + fTemp182)))))))))))))) + (0.021093750000000001 * (fTemp150 + (((fTemp149 + (fTemp148 + ((fTemp147 + (fTemp183 + (fConst290 * fTemp91))) + (fConst294 * fTemp64)))) + (fConst295 * fTemp23)) + (fConst296 * fTemp61))))) - fTemp152)); + fRec258[0] = max((fRec258[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp184)))))); fVbargraph58 = FAUSTFLOAT(fRec258[0]); - output22[i] = FAUSTFLOAT(fTemp320); - double fTemp321 = (fRec1[0] * ((fTemp319 + (fTemp220 + (fTemp257 + (fTemp258 + (fTemp259 + (fTemp227 + (fTemp260 + (fTemp261 + (fTemp266 + (fTemp250 + (fTemp265 + (fTemp275 + (fTemp264 + (fTemp247 + (fTemp262 + (fTemp273 + (fTemp242 + (fTemp231 + fTemp270)))))))))))))))))) - (fTemp253 + (fTemp254 + (fTemp267 + (fTemp255 + (fTemp268 + (fTemp256 + (fTemp225 + (fTemp229 + (fTemp246 + (fTemp263 + (fTemp274 + (fTemp244 + (fTemp272 + (fTemp269 + fTemp271)))))))))))))))); - fRec259[0] = max((fRec259[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp321)))))); + output22[i] = FAUSTFLOAT(fTemp184); + double fTemp185 = (fConst298 * fTemp136); + double fTemp186 = (fConst301 * fTemp105); + double fTemp187 = (fConst304 * fTemp138); + double fTemp188 = (fConst307 * fTemp61); + double fTemp189 = (fRec1[0] * (((0.021093750000000001 * (((((fTemp162 + (fTemp161 + (((((((fTemp158 + ((fTemp157 + (fTemp156 + fTemp183)) + (fConst297 * fTemp71))) + fTemp185) + (fConst299 * fTemp19)) + (fConst300 * fTemp66)) + fTemp186) + (fConst302 * fTemp73)) + (fConst303 * fTemp21)))) + fTemp187) + (fConst305 * fTemp25)) + (fConst306 * fTemp68)) + fTemp188)) + ((fConst280 * ((0.010546875000000006 * fTemp23) + (0.010546874999999997 * fTemp46))) + ((fConst286 * ((0.021093749999999994 * fTemp87) + (0.021093750000000012 * fTemp64))) + ((fConst308 * fTemp55) + (fTemp181 + ((fConst309 * fTemp93) + ((fConst310 * fTemp48) + ((fConst291 * fTemp91) + ((fConst39 * fTemp165) + ((fConst311 * fTemp107) + ((fConst312 * fTemp50) + (fTemp166 + fTemp182)))))))))))) - fTemp152)); + fRec259[0] = max((fRec259[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp189)))))); fVbargraph59 = FAUSTFLOAT(fRec259[0]); - output23[i] = FAUSTFLOAT(fTemp321); - double fTemp322 = (fRec1[0] * ((fTemp219 + (fTemp240 + (fTemp278 + (fTemp291 + (fTemp279 + (fTemp225 + (fTemp229 + (fTemp290 + (fTemp250 + (fTemp289 + (fTemp287 + (fTemp247 + (fTemp285 + (fTemp283 + (fTemp242 + (fTemp281 + (fTemp231 + fTemp233))))))))))))))))) - ((0.021093750000000001 * (fTemp6 - fTemp318)) + (fTemp220 + (fTemp277 + (fTemp292 + (fTemp226 + (fTemp227 + (fTemp293 + (fTemp280 + (fTemp230 + (fTemp288 + (fTemp246 + (fTemp286 + (fTemp284 + (fTemp244 + (fTemp294 + fTemp282))))))))))))))))); - fRec260[0] = max((fRec260[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp322)))))); + output23[i] = FAUSTFLOAT(fTemp189); + double fTemp190 = (fConst321 * fTemp141); + double fTemp191 = (fRec1[0] * (((0.021093750000000001 * (fTemp188 + ((((fTemp161 + ((((((fTemp171 + (((fTemp170 - (fTemp3 - fTemp169)) + (fConst297 * fTemp91)) + (fConst313 * fTemp71))) + (fConst299 * fTemp48)) + (fConst314 * fTemp19)) + (fConst315 * fTemp87)) + (fConst302 * fTemp93)) + (fConst316 * fTemp73))) + (fConst317 * fTemp46)) + (fConst305 * fTemp55)) + (fConst318 * fTemp25)))) + ((fConst274 * ((4.4158850400481179e-18 * fTemp68) + (0.0099436891104358275 * fTemp138))) + ((fConst284 * ((6.6238275600721768e-18 * fTemp21) + (0.01491553366565374 * fTemp105))) + ((fConst288 * ((1.3247655120144354e-17 * fTemp66) + (0.029831067331307481 * fTemp136))) + ((fConst319 * fTemp23) + ((fConst320 * fTemp64) + (fTemp190 + (fTemp168 + ((fConst42 * fTemp172) + ((fConst322 * fTemp107) + ((fConst323 * fTemp27) + fTemp182))))))))))) - fTemp152)); + fRec260[0] = max((fRec260[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp191)))))); fVbargraph60 = FAUSTFLOAT(fRec260[0]); - output24[i] = FAUSTFLOAT(fTemp322); - double fTemp323 = (fRec1[0] * ((fTemp254 + (fTemp220 + (fTemp303 + (fTemp301 + (fTemp304 + (fTemp297 + (fTemp227 + (fTemp250 + (fTemp314 + (fTemp247 + (fTemp312 + (fTemp310 + (fTemp309 + (fTemp272 + (fTemp242 + fTemp298))))))))))))))) - ((0.021093750000000001 * (fTemp3 - fTemp296)) + (fTemp302 + (fTemp305 + (fTemp225 + (fTemp306 + (fTemp300 + (fTemp229 + (fTemp307 + (fTemp316 + (fTemp315 + (fTemp313 + (fTemp246 + (fTemp311 + (fTemp244 + (fTemp243 + (fTemp299 + fTemp308)))))))))))))))))); - fRec261[0] = max((fRec261[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp323)))))); + output24[i] = FAUSTFLOAT(fTemp191); + double fTemp192 = (fRec1[0] * ((((fTemp190 + ((fConst324 * fTemp73) + ((fConst325 * fTemp19) + ((fConst326 * fTemp71) + ((fConst327 * fTemp107) + (fTemp174 + ((fConst328 * fTemp32) + fTemp182))))))) + (fConst329 * fTemp25)) + (0.021093750000000001 * (fTemp179 + (fTemp188 + ((((fTemp187 + ((fTemp161 + ((((fTemp186 + ((fTemp178 + (((fTemp185 + (fTemp177 + (fTemp176 + ((fTemp157 - (fTemp3 - fTemp175)) + (fConst313 * fTemp91))))) + (fConst314 * fTemp48)) + (fConst330 * fTemp66))) + (fConst331 * fTemp87))) + (fConst316 * fTemp93)) + (fConst332 * fTemp21)) + (fConst333 * fTemp64))) + (fConst334 * fTemp46))) + (fConst318 * fTemp55)) + (fConst335 * fTemp68)) + (fConst336 * fTemp23)))))) - fTemp152)); + fRec261[0] = max((fRec261[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp192)))))); fVbargraph61 = FAUSTFLOAT(fRec261[0]); - output25[i] = FAUSTFLOAT(fTemp323); - double fTemp324 = (0.021308452520676528 * (fTemp12 + fTemp128)); - double fTemp325 = (0.010535180889746065 * (fTemp6 + fTemp84)); - double fTemp326 = (0.016998264729033836 * fTemp131); - double fTemp327 = (0.035191232193238609 * fTemp76); - double fTemp328 = (0.0062770252486745223 * fTemp155); - double fTemp329 = (0.0023131708388267431 * fTemp93); - double fTemp330 = (0.0071028175068921654 * fTemp82); - double fTemp331 = (0.041001357231518168 * fTemp137); - double fTemp332 = (0.012205326872422687 * fTemp87); - double fTemp333 = (0.035587388102713349 * fTemp140); - double fTemp334 = (0.02907849643359095 * fTemp99); - double fTemp335 = (0.030460165261409405 * fTemp96); - double fTemp336 = (0.02017333553791887 * fTemp0); - double fTemp337 = (0.031605542669238249 * fTemp3); - double fTemp338 = (fTemp336 + fTemp337); - double fTemp339 = (0.032806508796871948 * fTemp9); - double fTemp340 = (fTemp338 + fTemp339); - double fTemp341 = (0.0263335984839893 * fTemp18); - double fTemp342 = (fTemp340 + fTemp341); - double fTemp343 = (0.030460165261409402 * fTemp21); - double fTemp344 = (0.014254712301587407 * fTemp30); - double fTemp345 = (0.035587388102713342 * fTemp33); - double fTemp346 = (0.035191232193238602 * fTemp48); - double fTemp347 = (1.427539198259021e-18 * fTemp152); - double fTemp348 = (0.00046786183841729075 * fTemp79); - double fTemp349 = (4.7584639941967359e-19 * fTemp91); - double fTemp350 = (1.1422201709353029e-18 * fTemp15); - double fTemp351 = (2.7335294515958808e-18 * fTemp24); - double fTemp352 = (0.0023131708388267449 * fTemp27); - double fTemp353 = (4.6761788733398907e-18 * fTemp36); - double fTemp354 = (0.0062770252486745275 * fTemp39); - double fTemp355 = (0.0014795090396723079 * fTemp42); - double fTemp356 = (0.00075024801587290956 * fTemp45); - double fTemp357 = (6.5935211231487317e-18 * fTemp51); - double fTemp358 = (0.012205326872422696 * fTemp54); - double fTemp359 = (0.0044385271190169251 * fTemp57); - double fTemp360 = (0.00046786183841729048 * fTemp60); - double fTemp361 = (fRec1[0] * ((fTemp324 + (fTemp325 + (fTemp326 + (fTemp327 + (fTemp328 + (fTemp329 + (fTemp330 + (fTemp331 + (fTemp332 + (fTemp333 + (fTemp334 + (fTemp335 + ((((fTemp342 + fTemp343) + fTemp344) + fTemp345) + fTemp346))))))))))))) - (fTemp347 + (fTemp348 + (fTemp349 + ((((((((((fTemp350 + fTemp351) + fTemp352) + fTemp353) + fTemp354) + fTemp355) + fTemp356) + fTemp357) + fTemp358) + fTemp359) + fTemp360)))))); - fRec262[0] = max((fRec262[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp361)))))); + output25[i] = FAUSTFLOAT(fTemp192); + double fTemp193 = ((0.0097062489627452956 * fTemp32) + (0.0097062489627452973 * fTemp50)); + double fTemp194 = (fConst337 * fTemp91); + double fTemp195 = (fConst339 * fTemp48); + double fTemp196 = (fConst341 * fTemp93); + double fTemp197 = (fConst343 * fTemp55); + double fTemp198 = (fConst344 * fTemp25); + double fTemp199 = (0.031605542669238249 * fTemp3); + double fTemp200 = (0.032806508796871948 * fTemp6); + double fTemp201 = (0.026333598483989317 * fTemp9); + double fTemp202 = (0.0142547123015874 * fTemp12); + double fTemp203 = (((fTemp199 + fTemp200) + fTemp201) + fTemp202); + double fTemp204 = (fConst350 * fTemp87); + double fTemp205 = (fConst351 * fTemp46); + double fTemp206 = (fConst352 * fTemp29); + double fTemp207 = (fTemp0 + fTemp206); + double fTemp208 = (fConst353 * fTemp66); + double fTemp209 = (fConst354 * fTemp27); + double fTemp210 = (fConst355 * fTemp107); + double fTemp211 = (fConst356 * fTemp21); + double fTemp212 = (fConst358 * fTemp35); + double fTemp213 = (fConst359 * fTemp53); + double fTemp214 = (fConst361 * fTemp68); + double fTemp215 = (fConst363 * fTemp61); + double fTemp216 = (fConst364 * fTemp38); + double fTemp217 = (0.0007502480158728946 * fTemp15); + double fTemp218 = (fRec1[0] * ((((fConst20 * (((((((((fConst44 * fTemp193) + fTemp194) + (fConst338 * fTemp71)) + fTemp195) + (fConst340 * fTemp19)) + fTemp196) + (fConst342 * fTemp73)) + fTemp197) + fTemp198)) + ((fConst26 * ((((fConst345 * fTemp136) + (fConst346 * fTemp109)) + (fConst347 * fTemp105)) + (fConst348 * fTemp138))) + (fTemp203 + (fConst30 * (((fConst349 * fTemp43) + fTemp204) + fTemp205))))) + (0.02017333553791887 * ((((((((((((fTemp207 + fTemp208) + fTemp209) + fTemp210) + fTemp211) + (fConst357 * fTemp64)) + fTemp212) + fTemp213) + (fConst360 * fTemp141)) + fTemp214) + (fConst362 * fTemp23)) + fTemp215) + fTemp216))) - fTemp217)); + fRec262[0] = max((fRec262[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp218)))))); fVbargraph62 = FAUSTFLOAT(fRec262[0]); - output26[i] = FAUSTFLOAT(fTemp361); - double fTemp362 = (1.63068840876984e-18 * fTemp152); - double fTemp363 = (0.0062770252486745231 * fTemp155); - double fTemp364 = (5.4356280292327993e-19 * fTemp91); - double fTemp365 = (0.012205326872422689 * fTemp87); - double fTemp366 = (0.0023131708388267444 * fTemp27); - double fTemp367 = (0.0062770252486745266 * fTemp39); - double fTemp368 = (0.00046786183841728994 * fTemp60); - double fTemp369 = (0.021308452520676528 * (fTemp12 - fTemp128)); - double fTemp370 = (0.010535180889746065 * (fTemp6 - fTemp84)); - double fTemp371 = (0.00046786183841729124 * fTemp79); - double fTemp372 = (1.3047664087114909e-18 * fTemp15); - double fTemp373 = (3.1225305737205953e-18 * fTemp24); - double fTemp374 = (5.3416331372122328e-18 * fTemp36); - double fTemp375 = (7.5318271341413852e-18 * fTemp51); - double fTemp376 = (fRec1[0] * ((fTemp327 + (fTemp362 + (fTemp363 + (fTemp364 + (fTemp329 + (fTemp365 + (fTemp333 + (fTemp335 + ((fTemp358 + ((fTemp344 + (fTemp342 + fTemp366)) + fTemp367)) + fTemp368))))))))) - (fTemp369 + (fTemp370 + (fTemp326 + (fTemp371 + (fTemp330 + (fTemp331 + (fTemp334 + (fTemp359 + ((fTemp346 + (fTemp356 + (fTemp355 + ((fTemp345 + ((fTemp343 + fTemp372) + fTemp373)) + fTemp374)))) + fTemp375))))))))))); - fRec263[0] = max((fRec263[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp376)))))); + output26[i] = FAUSTFLOAT(fTemp218); + double fTemp219 = (fConst366 * fTemp109); + double fTemp220 = ((fTemp0 + (fConst365 * fTemp32)) + fTemp219); + double fTemp221 = (fConst368 * fTemp136); + double fTemp222 = (fConst370 * fTemp105); + double fTemp223 = (fConst372 * fTemp138); + double fTemp224 = ((0.0070590901547238384 * fTemp27) + (0.0070590901547238332 * fTemp43)); + double fTemp225 = (fConst380 * fTemp38); + double fTemp226 = (fRec1[0] * (((0.02017333553791887 * (fTemp215 + (fTemp214 + (((fTemp213 + (fTemp212 + (fTemp211 + (((fTemp208 + (((fTemp206 + (fTemp220 + (fConst367 * fTemp71))) + fTemp221) + (fConst369 * fTemp19))) + fTemp222) + (fConst371 * fTemp73))))) + fTemp223) + (fConst374 * fTemp25))))) + ((fConst30 * ((fTemp205 + ((fTemp204 + (fConst38 * fTemp224)) + (fConst375 * fTemp64))) + (fConst376 * fTemp23))) + ((fConst20 * (fTemp197 + (fTemp196 + (fTemp195 + (fTemp194 + (fConst377 * fTemp50)))))) + ((fConst47 * ((fConst378 * fTemp107) + (fConst379 * fTemp141))) + (fTemp203 + fTemp225))))) - fTemp217)); + fRec263[0] = max((fRec263[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp226)))))); fVbargraph63 = FAUSTFLOAT(fRec263[0]); - output27[i] = FAUSTFLOAT(fTemp376); - double fTemp377 = (2.7178140146164e-18 * fTemp152); - double fTemp378 = (0.00046786183841729064 * fTemp79); - double fTemp379 = (9.0593800487213328e-19 * fTemp91); - double fTemp380 = (2.1746106811858183e-18 * fTemp15); - double fTemp381 = (5.2042176228676594e-18 * fTemp24); - double fTemp382 = (0.0023131708388267409 * fTemp27); - double fTemp383 = (8.902721895353721e-18 * fTemp36); - double fTemp384 = (0.0062770252486745171 * fTemp39); - double fTemp385 = (1.2553045223568977e-17 * fTemp51); - double fTemp386 = (0.012205326872422675 * fTemp54); - double fTemp387 = (0.00046786183841729053 * fTemp60); - double fTemp388 = (0.021308452520676528 * fTemp128); - double fTemp389 = (0.035191232193238602 * fTemp76); - double fTemp390 = (0.0062770252486745335 * fTemp155); - double fTemp391 = (0.002313170838826747 * fTemp93); - double fTemp392 = (0.010535180889746065 * fTemp84); - double fTemp393 = (0.012205326872422709 * fTemp87); - double fTemp394 = (0.035587388102713342 * fTemp140); - double fTemp395 = (0.030460165261409402 * fTemp96); - double fTemp396 = (0.010535180889746067 * fTemp6); - double fTemp397 = (0.021308452520676532 * fTemp12); - double fTemp398 = (0.030460165261409412 * fTemp21); - double fTemp399 = (0.035587388102713349 * fTemp33); - double fTemp400 = (0.035191232193238609 * fTemp48); - double fTemp401 = (fRec1[0] * ((fTemp326 + (fTemp377 + (fTemp378 + (fTemp379 + (fTemp330 + (fTemp331 + (fTemp334 + ((((((fTemp344 + (((fTemp341 + (fTemp340 + fTemp380)) + fTemp381) + fTemp382)) + fTemp383) + fTemp384) + fTemp385) + fTemp386) + fTemp387)))))))) - (fTemp388 + (fTemp389 + (fTemp390 + (fTemp391 + (fTemp392 + (fTemp393 + (fTemp394 + (fTemp395 + (fTemp359 + ((fTemp356 + (fTemp355 + (((fTemp396 + fTemp397) + fTemp398) + fTemp399))) + fTemp400)))))))))))); - fRec264[0] = max((fRec264[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp401)))))); + output27[i] = FAUSTFLOAT(fTemp226); + double fTemp227 = (fConst51 * ((0.0051338837488900581 * fTemp38) + (0.0051338837488900469 * fTemp53))); + double fTemp228 = ((fTemp0 + (fConst365 * fTemp50)) + (fConst381 * fTemp32)); + double fTemp229 = (fConst383 * fTemp43); + double fTemp230 = ((5.19858676206982e-18 * fTemp29) + (0.011706176702255421 * fTemp109)); + double fTemp231 = (fRec1[0] * ((fTemp227 + ((0.02017333553791887 * (fTemp215 + ((((fTemp212 + ((((((((fTemp228 + (fConst367 * fTemp91)) + (fConst382 * fTemp71)) + fTemp229) + (fConst369 * fTemp48)) + (fConst384 * fTemp19)) + (fConst385 * fTemp87)) + (fConst371 * fTemp93)) + (fConst386 * fTemp73))) + (fConst387 * fTemp46)) + (fConst374 * fTemp55)) + (fConst388 * fTemp25)))) + ((fConst30 * (((fConst389 * fTemp27) + (fConst390 * fTemp64)) + (fConst391 * fTemp23))) + ((fConst26 * (((((((fConst41 * fTemp230) + (fConst392 * fTemp136)) + (fConst393 * fTemp66)) + (fConst394 * fTemp105)) + (fConst395 * fTemp21)) + (fConst396 * fTemp138)) + (fConst397 * fTemp68))) + (fTemp203 + (fConst47 * ((fConst398 * fTemp107) + (fConst399 * fTemp141)))))))) - fTemp217)); + fRec264[0] = max((fRec264[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp231)))))); fVbargraph64 = FAUSTFLOAT(fRec264[0]); - output28[i] = FAUSTFLOAT(fTemp401); - double fTemp402 = (3.8049396204629603e-18 * fTemp152); - double fTemp403 = (0.00046786183841729151 * fTemp79); - double fTemp404 = (1.2683132068209864e-18 * fTemp91); - double fTemp405 = (0.010535180889746063 * fTemp6); - double fTemp406 = (0.021308452520676525 * fTemp12); - double fTemp407 = (0.030460165261409398 * fTemp21); - double fTemp408 = (0.035587388102713335 * fTemp33); - double fTemp409 = (0.035191232193238595 * fTemp48); - double fTemp410 = (0.021308452520676532 * fTemp128); - double fTemp411 = (0.0062770252486745266 * fTemp155); - double fTemp412 = (0.0023131708388267444 * fTemp93); - double fTemp413 = (0.010535180889746067 * fTemp84); - double fTemp414 = (0.012205326872422696 * fTemp87); - double fTemp415 = (0.030460165261409412 * fTemp96); - double fTemp416 = (3.0444549536601452e-18 * fTemp15); - double fTemp417 = (7.2859046720147234e-18 * fTemp24); - double fTemp418 = (0.0023131708388267431 * fTemp27); - double fTemp419 = (1.246381065349521e-17 * fTemp36); - double fTemp420 = (0.0062770252486745231 * fTemp39); - double fTemp421 = (1.7574263312996565e-17 * fTemp51); - double fTemp422 = (0.012205326872422689 * fTemp54); - double fTemp423 = (0.00046786183841728967 * fTemp60); - double fTemp424 = (fRec1[0] * ((fTemp402 + (fTemp403 + (fTemp404 + (((fTemp344 + ((fTemp341 + ((fTemp339 + (fTemp338 + fTemp405)) + fTemp406)) + fTemp407)) + fTemp408) + fTemp409)))) - (fTemp410 + (fTemp326 + (fTemp327 + (fTemp411 + (fTemp412 + (fTemp330 + (fTemp413 + (fTemp331 + (fTemp414 + (fTemp333 + (fTemp334 + (fTemp415 + ((fTemp359 + (((fTemp356 + (fTemp355 + ((((fTemp416 + fTemp417) + fTemp418) + fTemp419) + fTemp420))) + fTemp421) + fTemp422)) + fTemp423))))))))))))))); - fRec265[0] = max((fRec265[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp424)))))); + output28[i] = FAUSTFLOAT(fTemp231); + double fTemp232 = (fConst404 * fTemp53); + double fTemp233 = (fTemp219 + (fTemp0 + (fConst381 * fTemp50))); + double fTemp234 = (fConst407 * fTemp29); + double fTemp235 = (fConst408 * fTemp43); + double fTemp236 = (fConst410 * fTemp27); + double fTemp237 = (fConst417 * fTemp38); + double fTemp238 = (fRec1[0] * ((((fConst20 * (fTemp198 + ((((fConst400 * fTemp32) + (fConst401 * fTemp71)) + (fConst402 * fTemp19)) + (fConst403 * fTemp73)))) + ((fTemp203 + fTemp232) + (fConst47 * ((fConst405 * fTemp107) + (fConst406 * fTemp141))))) + (0.02017333553791887 * ((fTemp215 + ((((fTemp223 + ((fTemp212 + ((((fTemp222 + (((((fTemp221 + (((fTemp233 + (fConst382 * fTemp91)) + fTemp234) + fTemp235)) + (fConst384 * fTemp48)) + (fConst409 * fTemp66)) + fTemp236) + (fConst411 * fTemp87))) + (fConst386 * fTemp93)) + (fConst412 * fTemp21)) + (fConst413 * fTemp64))) + (fConst414 * fTemp46))) + (fConst388 * fTemp55)) + (fConst415 * fTemp68)) + (fConst416 * fTemp23))) + fTemp237))) - fTemp217)); + fRec265[0] = max((fRec265[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp238)))))); fVbargraph65 = FAUSTFLOAT(fRec265[0]); - output29[i] = FAUSTFLOAT(fTemp424); - double fTemp425 = (0.0071028175068921914 * fTemp128); - double fTemp426 = (0.016998264729033888 * fTemp131); - double fTemp427 = (0.035508216952135595 * fTemp152); - double fTemp428 = (0.036961085234966218 * fTemp79); - double fTemp429 = (0.027200442744256398 * fTemp155); - double fTemp430 = (0.035508216952135616 * fTemp91); - double fTemp431 = (0.030071220904747824 * fTemp93); - double fTemp432 = (0.021308452520676577 * fTemp82); - double fTemp433 = (0.010535180889746094 * fTemp84); - double fTemp434 = (0.010535180889746075 * fTemp3); - double fTemp435 = (fTemp336 + fTemp434); - double fTemp436 = (0.031605542669238242 * fTemp6); - double fTemp437 = (0.021308452520676542 * fTemp12); - double fTemp438 = (0.028411270027568724 * fTemp15); - double fTemp439 = (0.022664352972045144 * fTemp24); - double fTemp440 = (0.020818537549440738 * fTemp27); - double fTemp441 = (0.0042514054232804356 * fTemp30); - double fTemp442 = (0.018831075746023603 * fTemp39); - double fTemp443 = (0.010356563277706152 * fTemp42); - double fTemp444 = (0.023090966710758377 * fTemp45); - double fTemp445 = (0.010356563277706147 * fTemp57); - double fTemp446 = (0.00096856602366710964 * fTemp76); - double fTemp447 = (0.020500678615759143 * fTemp137); - double fTemp448 = (0.0045334071240427497 * fTemp87); - double fTemp449 = (0.010280801007450534 * fTemp140); - double fTemp450 = (0.006710422253905635 * fTemp99); - double fTemp451 = (0.0053753232814252047 * fTemp96); - double fTemp452 = (0.01640325439843596 * fTemp9); - double fTemp453 = (0.020481687709769415 * fTemp18); - double fTemp454 = (fTemp452 + fTemp453); - double fTemp455 = (0.016125969844275591 * fTemp21); - double fTemp456 = (0.030842403022351559 * fTemp33); - double fTemp457 = (0.0089472296718741632 * fTemp36); - double fTemp458 = (0.0029056980710013246 * fTemp48); - double fTemp459 = (0.027334238154345478 * fTemp51); - double fTemp460 = (0.0031385126243372789 * fTemp54); - double fTemp461 = (0.0014035855152519602 * fTemp60); - double fTemp462 = (fRec1[0] * ((fTemp425 + (fTemp426 + (fTemp427 + (fTemp428 + (fTemp429 + (fTemp430 + (fTemp431 + (fTemp432 + (fTemp433 + ((((((((((fTemp435 + fTemp436) + fTemp437) + fTemp438) + fTemp439) + fTemp440) + fTemp441) + fTemp442) + fTemp443) + fTemp444) + fTemp445)))))))))) - (fTemp446 + (fTemp447 + (fTemp448 + (fTemp449 + (fTemp450 + (fTemp451 + (((((((fTemp454 + fTemp455) + fTemp456) + fTemp457) + fTemp458) + fTemp459) + fTemp460) + fTemp461))))))))); - fRec266[0] = max((fRec266[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp462)))))); + output29[i] = FAUSTFLOAT(fTemp238); + double fTemp239 = (0.02017333553791887 * (fTemp0 + (fConst418 * fTemp38))); + double fTemp240 = (0.20432599334845877 * fTemp107); + double fTemp241 = ((0.059595081393300019 * fTemp35) + fTemp240); + double fTemp242 = (fConst419 * fTemp141); + double fTemp243 = (fConst420 * fTemp61); + double fTemp244 = ((0.0081196109272257799 * fTemp23) + (0.011728326894881718 * fTemp46)); + double fTemp245 = ((0.007607841257607462 * fTemp68) + (0.0057058809432056056 * fTemp138)); + double fTemp246 = ((0.006766342439354831 * fTemp25) + (0.0022554474797849468 * fTemp55)); + double fTemp247 = ((0.063531811392514598 * fTemp27) + (0.091768172011410243 * fTemp43)); + double fTemp248 = ((0.011411761886411192 * fTemp21) + (0.008558821414808411 * fTemp105)); + double fTemp249 = ((0.0090217899191397753 * fTemp73) + (0.0030072633063799288 * fTemp93)); + double fTemp250 = ((0.046824706809021746 * fTemp29) + (0.035118530106766375 * fTemp109)); + double fTemp251 = (fConst432 * fTemp66); + double fTemp252 = ((0.013532684878709662 * fTemp19) + (0.0045108949595698937 * fTemp48)); + double fTemp253 = ((0.029118746888235916 * fTemp32) + (0.0097062489627453199 * fTemp50)); + double fTemp254 = (fConst436 * fTemp53); + double fTemp255 = (0.02309096671075838 * fTemp15); + double fTemp256 = (0.010535180889746075 * fTemp3); + double fTemp257 = (0.0042514054232804339 * fTemp12); + double fTemp258 = (fTemp255 + (fTemp256 + fTemp257)); + double fTemp259 = (0.01640325439843596 * fTemp6); + double fTemp260 = (0.020481687709769415 * fTemp9); + double fTemp261 = (fTemp259 + fTemp260); + double fTemp262 = (fRec1[0] * ((fTemp239 + ((fConst47 * (((fConst48 * fTemp241) + fTemp242) + fTemp243)) + ((fConst421 * fTemp244) + ((fConst423 * fTemp245) + ((fConst426 * fTemp246) + ((fConst30 * (((fConst38 * fTemp247) + (fConst427 * fTemp87)) + (fConst428 * fTemp64))) + ((fConst429 * fTemp248) + ((fConst430 * fTemp249) + ((fConst26 * (((fConst41 * fTemp250) + (fConst431 * fTemp136)) + fTemp251)) + ((fConst433 * fTemp252) + ((fConst20 * (((fConst44 * fTemp253) + (fConst434 * fTemp91)) + (fConst435 * fTemp71))) + (fTemp254 + fTemp258)))))))))))) - fTemp261)); + fRec266[0] = max((fRec266[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp262)))))); fVbargraph66 = FAUSTFLOAT(fRec266[0]); - output30[i] = FAUSTFLOAT(fTemp462); - double fTemp463 = (0.021308452520676546 * fTemp128); - double fTemp464 = (0.016998264729033867 * fTemp131); - double fTemp465 = (0.021308452520676556 * fTemp82); - double fTemp466 = (0.031605542669238242 * fTemp84); - double fTemp467 = (0.0031385126243372858 * fTemp87); - double fTemp468 = (0.010535180889746081 * fTemp6); - double fTemp469 = (0.0071028175068921827 * fTemp12); - double fTemp470 = (0.0089472296718741701 * fTemp36); - double fTemp471 = (0.010356563277706217 * fTemp42); - double fTemp472 = (0.027334238154345495 * fTemp51); - double fTemp473 = (0.0045334071240427463 * fTemp54); - double fTemp474 = (0.010356563277706213 * fTemp57); - double fTemp475 = (0.036961085234966218 * fTemp60); - double fTemp476 = (0.0029056980710013254 * fTemp76); - double fTemp477 = (0.035508216952135581 * fTemp152); - double fTemp478 = (0.0014035855152518815 * fTemp79); - double fTemp479 = (0.018831075746023641 * fTemp155); - double fTemp480 = (0.035508216952135595 * fTemp91); - double fTemp481 = (0.020818537549440783 * fTemp93); - double fTemp482 = (0.020500678615759119 * fTemp137); - double fTemp483 = (0.030842403022351562 * fTemp140); - double fTemp484 = (0.0067104222539056272 * fTemp99); - double fTemp485 = (0.016125969844275591 * fTemp96); - double fTemp486 = (0.028411270027568741 * fTemp15); - double fTemp487 = (0.0053753232814251978 * fTemp21); - double fTemp488 = (0.022664352972045162 * fTemp24); - double fTemp489 = (0.030071220904747797 * fTemp27); - double fTemp490 = (0.010280801007450522 * fTemp33); - double fTemp491 = (0.027200442744256374 * fTemp39); - double fTemp492 = (0.00096856602366710855 * fTemp48); - double fTemp493 = (fRec1[0] * ((fTemp463 + (fTemp464 + (fTemp465 + (fTemp466 + (fTemp467 + (((((fTemp444 + (((fTemp441 + ((fTemp435 + fTemp468) + fTemp469)) + fTemp470) + fTemp471)) + fTemp472) + fTemp473) + fTemp474) + fTemp475)))))) - (fTemp476 + (fTemp477 + (fTemp478 + (fTemp479 + (fTemp480 + (fTemp481 + (fTemp482 + (fTemp483 + (fTemp484 + (fTemp485 + (((((((fTemp453 + (fTemp452 + fTemp486)) + fTemp487) + fTemp488) + fTemp489) + fTemp490) + fTemp491) + fTemp492))))))))))))); - fRec267[0] = max((fRec267[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp493)))))); + output30[i] = FAUSTFLOAT(fTemp262); + double fTemp263 = ((fTemp0 + (fConst439 * fTemp29)) + (fConst440 * fTemp43)); + double fTemp264 = (fConst442 * fTemp27); + double fTemp265 = (fConst443 * fTemp107); + double fTemp266 = (fConst445 * fTemp21); + double fTemp267 = (fConst447 * fTemp53); + double fTemp268 = ((0.0022554474797849442 * fTemp25) + (0.0067663424393548319 * fTemp55)); + double fTemp269 = ((0.0030072633063799254 * fTemp73) + (0.0090217899191397753 * fTemp93)); + double fTemp270 = ((0.0045108949595698885 * fTemp19) + (0.013532684878709664 * fTemp48)); + double fTemp271 = ((0.0097062489627453077 * fTemp32) + (0.029118746888235923 * fTemp50)); + double fTemp272 = (fConst458 * fTemp38); + double fTemp273 = (fRec1[0] * (((fConst47 * ((fConst437 * fTemp35) + (fConst438 * fTemp61))) + ((0.02017333553791887 * (((((((((((fTemp263 + (fConst441 * fTemp66)) + fTemp264) + fTemp265) + (fConst444 * fTemp87)) + fTemp266) + (fConst446 * fTemp64)) + fTemp267) + (fConst448 * fTemp141)) + (fConst449 * fTemp46)) + (fConst450 * fTemp68)) + (fConst451 * fTemp23))) + ((fConst426 * fTemp268) + ((fConst430 * fTemp269) + ((fConst433 * fTemp270) + ((fConst26 * ((fConst452 * fTemp136) + (fConst453 * fTemp109))) + ((fConst20 * (((fConst44 * fTemp271) + (fConst454 * fTemp91)) + (fConst455 * fTemp71))) + ((fConst456 * fTemp138) + ((fConst457 * fTemp105) + (fTemp258 + fTemp272)))))))))) - fTemp261)); + fRec267[0] = max((fRec267[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp273)))))); fVbargraph67 = FAUSTFLOAT(fRec267[0]); - output31[i] = FAUSTFLOAT(fTemp493); - double fTemp494 = (0.021308452520676553 * fTemp128); - double fTemp495 = (0.035508216952135574 * fTemp152); - double fTemp496 = (0.020500678615759112 * fTemp137); - double fTemp497 = (0.0031385126243372867 * fTemp87); - double fTemp498 = (0.0067104222539056254 * fTemp99); - double fTemp499 = (0.0053753232814251969 * fTemp21); - double fTemp500 = (0.03007122090474779 * fTemp27); - double fTemp501 = (0.010280801007450517 * fTemp33); - double fTemp502 = (0.0089472296718741719 * fTemp36); - double fTemp503 = (0.027200442744256363 * fTemp39); - double fTemp504 = (0.010356563277706232 * fTemp42); - double fTemp505 = (0.00096856602366710812 * fTemp48); - double fTemp506 = (0.027334238154345498 * fTemp51); - double fTemp507 = (0.010356563277706229 * fTemp57); - double fTemp508 = (0.016998264729033864 * fTemp131); - double fTemp509 = (0.0029056980710013259 * fTemp76); - double fTemp510 = (0.0014035855152518585 * fTemp79); - double fTemp511 = (0.018831075746023648 * fTemp155); - double fTemp512 = (0.02081853754944079 * fTemp93); - double fTemp513 = (0.021308452520676546 * fTemp82); - double fTemp514 = (0.030842403022351569 * fTemp140); - double fTemp515 = (0.016125969844275594 * fTemp96); - double fTemp516 = (0.010535180889746079 * fTemp6); - double fTemp517 = (0.007102817506892181 * fTemp12); - double fTemp518 = (0.028411270027568745 * fTemp15); - double fTemp519 = (0.0045334071240427445 * fTemp54); - double fTemp520 = (fRec1[0] * ((fTemp494 + (fTemp495 + (fTemp480 + (fTemp466 + (fTemp496 + (fTemp497 + (fTemp498 + ((((fTemp444 + (((((fTemp441 + ((fTemp435 + fTemp499) + fTemp500)) + fTemp501) + fTemp502) + fTemp503) + fTemp504)) + fTemp505) + fTemp506) + fTemp507)))))))) - (fTemp508 + (fTemp509 + (fTemp510 + (fTemp511 + (fTemp512 + (fTemp513 + (fTemp514 + (fTemp515 + (fTemp475 + ((fTemp488 + (fTemp453 + (((fTemp452 + fTemp516) + fTemp517) + fTemp518))) + fTemp519)))))))))))); - fRec268[0] = max((fRec268[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp520)))))); + output31[i] = FAUSTFLOAT(fTemp273); + double fTemp274 = ((fTemp0 + (fConst459 * fTemp32)) + (fConst460 * fTemp109)); + double fTemp275 = (fConst462 * fTemp29); + double fTemp276 = (fConst463 * fTemp43); + double fTemp277 = (fConst470 * fTemp53); + double fTemp278 = (fConst475 * fTemp38); + double fTemp279 = ((0.059595081393300539 * fTemp35) + (0.20432599334845869 * fTemp107)); + double fTemp280 = (fRec1[0] * (((0.02017333553791887 * (((((((fTemp266 + (((((((((fTemp274 + (fConst461 * fTemp71)) + fTemp275) + fTemp276) + (fConst464 * fTemp136)) + (fConst465 * fTemp19)) + (fConst466 * fTemp66)) + (fConst467 * fTemp87)) + (fConst468 * fTemp105)) + (fConst469 * fTemp73))) + fTemp277) + (fConst471 * fTemp46)) + (fConst472 * fTemp138)) + (fConst473 * fTemp25)) + (fConst474 * fTemp68)) + fTemp278)) + (((fConst30 * ((fConst476 * fTemp27) + (fConst477 * fTemp64))) + ((fConst20 * ((fConst478 * fTemp50) + (fConst479 * fTemp91))) + (((fConst480 * fTemp55) + ((fConst481 * fTemp93) + (fTemp258 + (fConst482 * fTemp48)))) + (fConst483 * fTemp23)))) + (fConst47 * (((fConst48 * fTemp279) + (fConst484 * fTemp141)) + (fConst485 * fTemp61))))) - fTemp261)); + fRec268[0] = max((fRec268[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp280)))))); fVbargraph68 = FAUSTFLOAT(fRec268[0]); - output32[i] = FAUSTFLOAT(fTemp520); - double fTemp521 = (0.0071028175068921931 * fTemp128); - double fTemp522 = (0.027200442744256408 * fTemp155); - double fTemp523 = (0.030071220904747838 * fTemp93); - double fTemp524 = (0.010535180889746096 * fTemp84); - double fTemp525 = (0.020500678615759146 * fTemp137); - double fTemp526 = (0.0067104222539056367 * fTemp99); - double fTemp527 = (0.028411270027568717 * fTemp15); - double fTemp528 = (0.022664352972045138 * fTemp24); - double fTemp529 = (0.010356563277706145 * fTemp42); - double fTemp530 = (0.0031385126243372767 * fTemp54); - double fTemp531 = (0.01035656327770614 * fTemp57); - double fTemp532 = (0.0014035855152519582 * fTemp60); - double fTemp533 = (0.00096856602366710996 * fTemp76); - double fTemp534 = (0.021308452520676584 * fTemp82); - double fTemp535 = (0.0045334071240427515 * fTemp87); - double fTemp536 = (0.010280801007450538 * fTemp140); - double fTemp537 = (0.0053753232814252056 * fTemp96); - double fTemp538 = (fTemp436 + fTemp452); - double fTemp539 = (0.020818537549440724 * fTemp27); - double fTemp540 = (0.018831075746023586 * fTemp39); - double fTemp541 = (0.027334238154345474 * fTemp51); - double fTemp542 = (fRec1[0] * ((fTemp521 + (fTemp428 + (fTemp522 + (fTemp523 + (fTemp524 + (fTemp525 + (fTemp526 + ((((fTemp458 + (fTemp444 + ((fTemp456 + (fTemp441 + ((fTemp455 + (fTemp435 + fTemp527)) + fTemp528))) + fTemp529))) + fTemp530) + fTemp531) + fTemp532)))))))) - (fTemp426 + (fTemp533 + (fTemp427 + (fTemp430 + (fTemp534 + (fTemp535 + (fTemp536 + (fTemp537 + (((fTemp457 + ((fTemp453 + (fTemp437 + fTemp538)) + fTemp539)) + fTemp540) + fTemp541))))))))))); - fRec269[0] = max((fRec269[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp542)))))); + output32[i] = FAUSTFLOAT(fTemp280); + double fTemp281 = (fConst51 * ((0.015401651246671252 * fTemp38) + (0.40557681616231639 * fTemp53))); + double fTemp282 = ((fTemp0 + (fConst487 * fTemp32)) + (fConst488 * fTemp109)); + double fTemp283 = (fConst492 * fTemp27); + double fTemp284 = (fConst493 * fTemp107); + double fTemp285 = (fRec1[0] * ((fTemp281 + ((fConst47 * (fTemp243 + (fConst486 * fTemp35))) + ((0.02017333553791887 * ((((((((((((fTemp282 + (fConst489 * fTemp71)) + (fConst490 * fTemp136)) + (fConst491 * fTemp19)) + fTemp283) + fTemp284) + (fConst494 * fTemp105)) + (fConst495 * fTemp73)) + (fConst496 * fTemp64)) + (fConst497 * fTemp141)) + (fConst498 * fTemp138)) + (fConst499 * fTemp25)) + (fConst500 * fTemp23))) + ((fConst30 * ((fConst501 * fTemp43) + (fConst502 * fTemp87))) + ((fConst26 * (fTemp251 + (fConst503 * fTemp29))) + ((fConst20 * ((fConst504 * fTemp50) + (fConst505 * fTemp91))) + ((fConst506 * fTemp68) + ((fConst507 * fTemp55) + ((fConst508 * fTemp46) + ((fConst509 * fTemp21) + ((fConst510 * fTemp93) + (fTemp258 + (fConst511 * fTemp48))))))))))))) - fTemp261)); + fRec269[0] = max((fRec269[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp285)))))); fVbargraph69 = FAUSTFLOAT(fRec269[0]); - output33[i] = FAUSTFLOAT(fTemp542); - double fTemp543 = (0.016998264729033881 * fTemp131); - double fTemp544 = (0.0009685660236671092 * fTemp76); - double fTemp545 = (0.035508216952135609 * fTemp91); - double fTemp546 = (0.02130845252067657 * fTemp82); - double fTemp547 = (0.010280801007450529 * fTemp140); - double fTemp548 = (0.0053753232814252021 * fTemp96); - double fTemp549 = (0.028411270027568731 * fTemp15); - double fTemp550 = (0.022664352972045151 * fTemp24); - double fTemp551 = (0.030842403022351562 * fTemp33); - double fTemp552 = (0.010356563277706178 * fTemp42); - double fTemp553 = (0.0029056980710013254 * fTemp48); - double fTemp554 = (0.0031385126243372802 * fTemp54); - double fTemp555 = (0.010356563277706175 * fTemp57); - double fTemp556 = (0.0014035855152519131 * fTemp60); - double fTemp557 = (0.0071028175068921871 * fTemp128); - double fTemp558 = (0.030071220904747821 * fTemp93); - double fTemp559 = (0.010535180889746089 * fTemp84); - double fTemp560 = (0.020500678615759133 * fTemp137); - double fTemp561 = (0.0067104222539056315 * fTemp99); - double fTemp562 = (0.021308452520676546 * fTemp12); - double fTemp563 = (0.020818537549440744 * fTemp27); - double fTemp564 = (0.0089472296718741667 * fTemp36); - double fTemp565 = (0.01883107574602361 * fTemp39); - double fTemp566 = (0.027334238154345481 * fTemp51); - double fTemp567 = (fRec1[0] * ((fTemp543 + (fTemp544 + (fTemp427 + (fTemp545 + (fTemp546 + (fTemp448 + (fTemp547 + (fTemp548 + (((((fTemp444 + (((fTemp441 + ((fTemp455 + (fTemp435 + fTemp549)) + fTemp550)) + fTemp551) + fTemp552)) + fTemp553) + fTemp554) + fTemp555) + fTemp556))))))))) - (fTemp557 + (fTemp428 + (fTemp429 + (fTemp558 + (fTemp559 + (fTemp560 + (fTemp561 + (((((fTemp453 + (fTemp538 + fTemp562)) + fTemp563) + fTemp564) + fTemp565) + fTemp566)))))))))); - fRec270[0] = max((fRec270[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp567)))))); + output33[i] = FAUSTFLOAT(fTemp285); + double fTemp286 = (fTemp240 + (0.059595081393300352 * fTemp35)); + double fTemp287 = ((fTemp0 + (fConst513 * fTemp50)) + (fConst514 * fTemp32)); + double fTemp288 = (fConst517 * fTemp43); + double fTemp289 = (fConst520 * fTemp27); + double fTemp290 = (fConst525 * fTemp53); + double fTemp291 = ((0.0076078412576074646 * fTemp68) + (0.0057058809432056047 * fTemp138)); + double fTemp292 = ((0.011411761886411199 * fTemp21) + (0.0085588214148084076 * fTemp105)); + double fTemp293 = ((0.046824706809021774 * fTemp29) + (0.035118530106766362 * fTemp109)); + double fTemp294 = (fConst532 * fTemp38); + double fTemp295 = (fRec1[0] * (((fConst47 * ((fTemp242 + (fConst48 * fTemp286)) + (fConst512 * fTemp61))) + ((0.02017333553791887 * (((((((((((((((fTemp287 + (fConst515 * fTemp91)) + (fConst516 * fTemp71)) + fTemp288) + (fConst518 * fTemp48)) + (fConst519 * fTemp19)) + fTemp289) + (fConst521 * fTemp87)) + (fConst522 * fTemp93)) + (fConst523 * fTemp73)) + (fConst524 * fTemp64)) + fTemp290) + (fConst526 * fTemp46)) + (fConst527 * fTemp55)) + (fConst528 * fTemp25)) + (fConst529 * fTemp23))) + ((fConst423 * fTemp291) + ((fConst429 * fTemp292) + ((fConst26 * (((fConst41 * fTemp293) + (fConst530 * fTemp136)) + (fConst531 * fTemp66))) + (fTemp258 + fTemp294)))))) - fTemp261)); + fRec270[0] = max((fRec270[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp295)))))); fVbargraph70 = FAUSTFLOAT(fRec270[0]); - output34[i] = FAUSTFLOAT(fTemp567); - double fTemp568 = (0.016998264729033874 * fTemp131); - double fTemp569 = (0.001403585515251904 * fTemp79); - double fTemp570 = (0.018831075746023631 * fTemp155); - double fTemp571 = (0.020818537549440772 * fTemp93); - double fTemp572 = (0.021308452520676563 * fTemp82); - double fTemp573 = (0.0053753232814252004 * fTemp21); - double fTemp574 = (0.0300712209047478 * fTemp27); - double fTemp575 = (0.010280801007450525 * fTemp33); - double fTemp576 = (0.0089472296718741684 * fTemp36); - double fTemp577 = (0.027200442744256377 * fTemp39); - double fTemp578 = (0.010356563277706199 * fTemp42); - double fTemp579 = (0.00096856602366710877 * fTemp48); - double fTemp580 = (0.027334238154345485 * fTemp51); - double fTemp581 = (0.010356563277706192 * fTemp57); - double fTemp582 = (0.035508216952135588 * fTemp152); - double fTemp583 = (0.020500678615759129 * fTemp137); - double fTemp584 = (0.0031385126243372841 * fTemp87); - double fTemp585 = (0.0067104222539056298 * fTemp99); - double fTemp586 = (0.010535180889746086 * fTemp6); - double fTemp587 = (0.0071028175068921853 * fTemp12); - double fTemp588 = (0.028411270027568734 * fTemp15); - double fTemp589 = (0.0045334071240427471 * fTemp54); - double fTemp590 = (fRec1[0] * ((fTemp568 + (fTemp476 + (fTemp569 + (fTemp570 + (fTemp571 + (fTemp572 + (fTemp483 + (fTemp485 + ((((fTemp444 + (((((fTemp441 + ((fTemp435 + fTemp573) + fTemp574)) + fTemp575) + fTemp576) + fTemp577) + fTemp578)) + fTemp579) + fTemp580) + fTemp581))))))))) - (fTemp463 + (fTemp582 + (fTemp545 + (fTemp466 + (fTemp583 + (fTemp584 + (fTemp585 + (fTemp475 + ((fTemp550 + (fTemp453 + (((fTemp452 + fTemp586) + fTemp587) + fTemp588))) + fTemp589))))))))))); - fRec271[0] = max((fRec271[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp590)))))); + output34[i] = FAUSTFLOAT(fTemp295); + double fTemp296 = ((fTemp0 + (fConst514 * fTemp50)) + (fConst533 * fTemp32)); + double fTemp297 = (fConst535 * fTemp29); + double fTemp298 = (fConst538 * fTemp107); + double fTemp299 = ((0.011728326894881713 * fTemp23) + (0.0081196109272257937 * fTemp46)); + double fTemp300 = ((0.091768172011410187 * fTemp27) + (0.063531811392514695 * fTemp43)); + double fTemp301 = (fConst552 * fTemp53); + double fTemp302 = (fRec1[0] * (((0.02017333553791887 * (fTemp278 + ((((((((((((((fTemp296 + (fConst516 * fTemp91)) + (fConst534 * fTemp71)) + fTemp297) + (fConst519 * fTemp48)) + (fConst536 * fTemp19)) + (fConst537 * fTemp66)) + fTemp298) + (fConst523 * fTemp93)) + (fConst539 * fTemp73)) + (fConst540 * fTemp21)) + (fConst541 * fTemp141)) + (fConst528 * fTemp55)) + (fConst542 * fTemp25)) + (fConst543 * fTemp68)))) + ((fConst47 * ((fConst544 * fTemp35) + (fConst545 * fTemp61))) + ((fConst421 * fTemp299) + ((fConst26 * ((fConst546 * fTemp136) + (fConst547 * fTemp109))) + ((fConst30 * ((fConst548 * fTemp64) + ((fConst38 * fTemp300) + (fConst549 * fTemp87)))) + ((fConst550 * fTemp138) + ((fConst551 * fTemp105) + (fTemp258 + fTemp301)))))))) - fTemp261)); + fRec271[0] = max((fRec271[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp302)))))); fVbargraph71 = FAUSTFLOAT(fRec271[0]); - output35[i] = FAUSTFLOAT(fTemp590); - double fTemp591 = (0.035508216952135567 * fTemp152); - double fTemp592 = (0.0014035855152518362 * fTemp79); - double fTemp593 = (0.018831075746023662 * fTemp155); - double fTemp594 = (0.035508216952135588 * fTemp91); - double fTemp595 = (0.020818537549440803 * fTemp93); - double fTemp596 = (0.020500678615759105 * fTemp137); - double fTemp597 = (0.0067104222539056237 * fTemp99); - double fTemp598 = (0.010535180889746074 * fTemp6); - double fTemp599 = (0.0071028175068921775 * fTemp12); - double fTemp600 = (0.0089472296718741736 * fTemp36); - double fTemp601 = (0.010356563277706251 * fTemp42); - double fTemp602 = (0.027334238154345505 * fTemp51); - double fTemp603 = (0.0045334071240427437 * fTemp54); - double fTemp604 = (0.010356563277706246 * fTemp57); - double fTemp605 = (0.016998264729033857 * fTemp131); - double fTemp606 = (0.021308452520676542 * fTemp82); - double fTemp607 = (0.0031385126243372885 * fTemp87); - double fTemp608 = (0.028411270027568748 * fTemp15); - double fTemp609 = (0.0053753232814251943 * fTemp21); - double fTemp610 = (0.022664352972045165 * fTemp24); - double fTemp611 = (0.030071220904747779 * fTemp27); - double fTemp612 = (0.010280801007450515 * fTemp33); - double fTemp613 = (0.027200442744256356 * fTemp39); - double fTemp614 = (0.00096856602366710779 * fTemp48); - double fTemp615 = (fRec1[0] * ((fTemp509 + (fTemp591 + (fTemp592 + (fTemp593 + (fTemp594 + (fTemp595 + (fTemp596 + (fTemp514 + (fTemp597 + (fTemp515 + (fTemp475 + ((((fTemp444 + (((fTemp441 + ((fTemp435 + fTemp598) + fTemp599)) + fTemp600) + fTemp601)) + fTemp602) + fTemp603) + fTemp604)))))))))))) - (fTemp494 + (fTemp605 + (fTemp606 + (fTemp466 + (fTemp607 + (((((((fTemp453 + (fTemp452 + fTemp608)) + fTemp609) + fTemp610) + fTemp611) + fTemp612) + fTemp613) + fTemp614)))))))); - fRec272[0] = max((fRec272[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp615)))))); + output35[i] = FAUSTFLOAT(fTemp302); + double fTemp303 = (fConst51 * ((0.40557681616231639 * fTemp38) + (0.015401651246669784 * fTemp53))); + double fTemp304 = ((0.059595081393300636 * fTemp35) + (0.20432599334845863 * fTemp107)); + double fTemp305 = ((fTemp0 + (fConst555 * fTemp50)) + (fConst556 * fTemp109)); + double fTemp306 = (fConst558 * fTemp29); + double fTemp307 = (fConst562 * fTemp27); + double fTemp308 = (fRec1[0] * ((fTemp303 + ((fConst47 * (((fConst48 * fTemp304) + (fConst553 * fTemp141)) + (fConst554 * fTemp61))) + ((0.02017333553791887 * ((((((((((((((fTemp305 + (fConst557 * fTemp91)) + fTemp306) + (fConst559 * fTemp136)) + (fConst560 * fTemp48)) + (fConst561 * fTemp66)) + fTemp307) + (fConst563 * fTemp105)) + (fConst564 * fTemp93)) + (fConst565 * fTemp21)) + (fConst566 * fTemp64)) + (fConst567 * fTemp138)) + (fConst568 * fTemp55)) + (fConst569 * fTemp68)) + (fConst570 * fTemp23))) + ((fConst30 * ((fConst571 * fTemp43) + (fConst572 * fTemp87))) + ((fConst20 * ((fConst573 * fTemp32) + (fConst574 * fTemp71))) + ((fConst575 * fTemp25) + ((fConst576 * fTemp46) + ((fConst577 * fTemp73) + (fTemp258 + (fConst578 * fTemp19)))))))))) - fTemp261)); + fRec272[0] = max((fRec272[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp308)))))); fVbargraph72 = FAUSTFLOAT(fRec272[0]); - output36[i] = FAUSTFLOAT(fTemp615); - double fTemp616 = (0.00096856602366711159 * fTemp76); - double fTemp617 = (0.020500678615759181 * fTemp137); - double fTemp618 = (0.0045334071240427532 * fTemp87); - double fTemp619 = (0.010280801007450555 * fTemp140); - double fTemp620 = (0.0067104222539056471 * fTemp99); - double fTemp621 = (0.0053753232814252143 * fTemp96); - double fTemp622 = (0.031605542669238228 * fTemp6); - double fTemp623 = (0.021308452520676539 * fTemp12); - double fTemp624 = (0.028411270027568696 * fTemp15); - double fTemp625 = (0.02266435297204512 * fTemp24); - double fTemp626 = (0.02081853754944071 * fTemp27); - double fTemp627 = (0.018831075746023575 * fTemp39); - double fTemp628 = (0.010356563277706064 * fTemp42); - double fTemp629 = (0.01035656327770606 * fTemp57); - double fTemp630 = (0.0071028175068922053 * fTemp128); - double fTemp631 = (0.016998264729033919 * fTemp131); - double fTemp632 = (0.035508216952135623 * fTemp152); - double fTemp633 = (0.036961085234966211 * fTemp79); - double fTemp634 = (0.027200442744256415 * fTemp155); - double fTemp635 = (0.035508216952135643 * fTemp91); - double fTemp636 = (0.030071220904747842 * fTemp93); - double fTemp637 = (0.021308452520676618 * fTemp82); - double fTemp638 = (0.010535180889746113 * fTemp84); - double fTemp639 = (0.016125969844275587 * fTemp21); - double fTemp640 = (0.030842403022351552 * fTemp33); - double fTemp641 = (0.0089472296718741563 * fTemp36); - double fTemp642 = (0.0029056980710013241 * fTemp48); - double fTemp643 = (0.02733423815434545 * fTemp51); - double fTemp644 = (0.0031385126243372746 * fTemp54); - double fTemp645 = (0.0014035855152521122 * fTemp60); - double fTemp646 = (fRec1[0] * ((fTemp616 + (fTemp617 + (fTemp618 + (fTemp619 + (fTemp620 + (fTemp621 + ((fTemp444 + (((fTemp441 + (((((fTemp435 + fTemp622) + fTemp623) + fTemp624) + fTemp625) + fTemp626)) + fTemp627) + fTemp628)) + fTemp629))))))) - (fTemp630 + (fTemp631 + (fTemp632 + (fTemp633 + (fTemp634 + (fTemp635 + (fTemp636 + (fTemp637 + (fTemp638 + (((((((fTemp454 + fTemp639) + fTemp640) + fTemp641) + fTemp642) + fTemp643) + fTemp644) + fTemp645)))))))))))); - fRec273[0] = max((fRec273[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp646)))))); + output36[i] = FAUSTFLOAT(fTemp308); + double fTemp309 = ((fTemp0 + (fConst579 * fTemp50)) + (fConst580 * fTemp109)); + double fTemp310 = (fConst582 * fTemp43); + double fTemp311 = (fConst585 * fTemp107); + double fTemp312 = (fConst589 * fTemp53); + double fTemp313 = (fConst594 * fTemp38); + double fTemp314 = (fRec1[0] * (((0.02017333553791887 * ((((((((((((((fTemp309 + (fConst581 * fTemp91)) + fTemp310) + (fConst583 * fTemp136)) + (fConst584 * fTemp48)) + fTemp311) + (fConst586 * fTemp87)) + (fConst587 * fTemp105)) + (fConst588 * fTemp93)) + fTemp312) + (fConst590 * fTemp141)) + (fConst591 * fTemp46)) + (fConst592 * fTemp138)) + (fConst593 * fTemp55)) + fTemp313)) + ((fConst47 * ((fConst595 * fTemp35) + (fConst596 * fTemp61))) + ((fConst30 * ((fConst597 * fTemp27) + (fConst598 * fTemp64))) + ((fConst26 * ((fConst599 * fTemp29) + (fConst600 * fTemp66))) + ((fConst20 * ((fConst601 * fTemp32) + (fConst602 * fTemp71))) + ((fConst603 * fTemp23) + ((fConst604 * fTemp68) + ((fConst605 * fTemp25) + ((fConst606 * fTemp21) + ((fConst607 * fTemp73) + (fTemp258 + (fConst608 * fTemp19)))))))))))) - fTemp261)); + fRec273[0] = max((fRec273[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp314)))))); fVbargraph73 = FAUSTFLOAT(fRec273[0]); - output37[i] = FAUSTFLOAT(fTemp646); - double fTemp647 = (fTemp434 + fTemp452); - double fTemp648 = (fRec1[0] * ((fTemp428 + (fTemp430 + (fTemp431 + (fTemp432 + (fTemp433 + (fTemp447 + (fTemp449 + (fTemp459 + (fTemp443 + (fTemp456 + (fTemp441 + (fTemp440 + (fTemp453 + (fTemp438 + (fTemp336 + fTemp436))))))))))))))) - (fTemp425 + (fTemp426 + (fTemp446 + (fTemp427 + (fTemp429 + (fTemp448 + (fTemp450 + (fTemp451 + (fTemp461 + (fTemp445 + (fTemp460 + (fTemp458 + (fTemp444 + (fTemp442 + (fTemp457 + (fTemp439 + (fTemp455 + (fTemp437 + fTemp647)))))))))))))))))))); - fRec274[0] = max((fRec274[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp648)))))); + output37[i] = FAUSTFLOAT(fTemp314); + double fTemp315 = (fTemp260 + fTemp257); + double fTemp316 = (0.027388228527386899 * fTemp141); + double fTemp317 = (fTemp255 + (fTemp256 + fTemp259)); + double fTemp318 = (fRec1[0] * ((((fConst610 * fTemp244) + ((fConst613 * fTemp245) + ((fConst617 * fTemp246) + ((fConst618 * ((0.023456653789763436 * fTemp87) + (0.01623922185445156 * fTemp64))) + ((fConst619 * fTemp248) + ((fConst620 * fTemp249) + ((fConst621 * ((0.022823523772822384 * fTemp66) + (0.017117642829616822 * fTemp136))) + ((fConst622 * fTemp252) + ((fConst623 * ((0.027065369757419324 * fTemp71) + (0.0090217899191397874 * fTemp91))) + (fTemp239 + ((fConst49 * fTemp241) + ((fConst39 * fTemp247) + ((fConst42 * fTemp250) + ((fConst45 * fTemp253) + (fTemp254 + fTemp315))))))))))))))) + (fConst624 * (fTemp316 + (0.0079882333204877847 * fTemp61)))) - fTemp317)); + fRec274[0] = max((fRec274[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp318)))))); fVbargraph74 = FAUSTFLOAT(fRec274[0]); - output38[i] = FAUSTFLOAT(fTemp648); - double fTemp649 = (fRec1[0] * ((fTemp477 + (fTemp479 + (fTemp465 + (fTemp466 + (fTemp482 + (fTemp467 + (fTemp483 + (fTemp475 + (fTemp473 + (fTemp471 + (fTemp491 + (fTemp470 + (fTemp490 + (fTemp441 + (fTemp488 + (fTemp453 + (fTemp336 + fTemp468))))))))))))))))) - (fTemp463 + (fTemp464 + (fTemp476 + (fTemp478 + (fTemp480 + (fTemp481 + (fTemp484 + (fTemp485 + (fTemp474 + (fTemp472 + (fTemp492 + (fTemp444 + (fTemp489 + (fTemp487 + (fTemp486 + (fTemp469 + fTemp647)))))))))))))))))); - fRec275[0] = max((fRec275[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp649)))))); + output38[i] = FAUSTFLOAT(fTemp318); + double fTemp319 = (fConst625 * fTemp66); + double fTemp320 = (fConst627 * fTemp21); + double fTemp321 = (fRec1[0] * (((0.02017333553791887 * (((((fTemp267 + ((((fTemp265 + (fTemp264 + (fTemp263 + fTemp319))) + (fConst626 * fTemp87)) + fTemp320) + (fConst628 * fTemp64))) + (fConst629 * fTemp141)) + (fConst630 * fTemp46)) + (fConst631 * fTemp68)) + (fConst632 * fTemp23))) + ((fConst617 * fTemp268) + ((fConst620 * fTemp269) + ((fConst622 * fTemp270) + ((fConst623 * ((0.009021789919139777 * fTemp71) + (0.027065369757419327 * fTemp91))) + ((fConst633 * fTemp61) + ((fConst634 * fTemp138) + ((fConst635 * fTemp105) + ((fConst636 * fTemp136) + ((fConst45 * fTemp271) + ((fConst637 * fTemp109) + (fTemp272 + ((fConst638 * fTemp35) + fTemp315))))))))))))) - fTemp317)); + fRec275[0] = max((fRec275[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp321)))))); fVbargraph75 = FAUSTFLOAT(fRec275[0]); - output39[i] = FAUSTFLOAT(fTemp649); - double fTemp650 = (fRec1[0] * ((fTemp508 + (fTemp511 + (fTemp480 + (fTemp466 + (fTemp497 + (fTemp514 + (fTemp498 + (fTemp505 + (fTemp504 + (fTemp502 + (fTemp441 + (fTemp500 + (fTemp488 + (fTemp499 + (fTemp453 + (fTemp336 + fTemp517)))))))))))))))) - (fTemp494 + (fTemp509 + (fTemp495 + (fTemp510 + (fTemp512 + (fTemp513 + (fTemp496 + (fTemp515 + (fTemp475 + (fTemp507 + (fTemp519 + (fTemp506 + (fTemp444 + (fTemp503 + (fTemp501 + (fTemp518 + (fTemp452 + (fTemp434 + fTemp516)))))))))))))))))))); - fRec276[0] = max((fRec276[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp650)))))); + output39[i] = FAUSTFLOAT(fTemp321); + double fTemp322 = (fRec1[0] * (((0.02017333553791887 * (fTemp278 + (((((fTemp277 + (fTemp320 + ((((fTemp319 + (((fTemp276 + (fTemp275 + (fTemp274 + (fConst639 * fTemp71)))) + (fConst640 * fTemp136)) + (fConst641 * fTemp19))) + (fConst642 * fTemp87)) + (fConst643 * fTemp105)) + (fConst644 * fTemp73)))) + (fConst645 * fTemp46)) + (fConst646 * fTemp138)) + (fConst647 * fTemp25)) + (fConst648 * fTemp68)))) + ((fConst624 * ((0.027388228527386888 * fTemp141) + (0.0079882333204878541 * fTemp61))) + ((fConst649 * fTemp23) + (((fConst650 * fTemp64) + ((fConst651 * fTemp93) + ((fConst652 * fTemp48) + ((fConst653 * fTemp91) + ((fConst49 * fTemp279) + ((fConst654 * fTemp50) + ((fConst655 * fTemp27) + fTemp315))))))) + (fConst656 * fTemp55))))) - fTemp317)); + fRec276[0] = max((fRec276[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp322)))))); fVbargraph76 = FAUSTFLOAT(fRec276[0]); - output40[i] = FAUSTFLOAT(fTemp650); - double fTemp651 = (fTemp452 + (fTemp434 + fTemp436)); - double fTemp652 = (fRec1[0] * ((fTemp426 + (fTemp427 + (fTemp428 + (fTemp523 + (fTemp524 + (fTemp536 + (fTemp526 + (fTemp532 + (fTemp530 + (fTemp541 + (fTemp458 + (fTemp529 + (fTemp540 + (fTemp441 + (fTemp455 + (fTemp453 + (fTemp527 + (fTemp336 + fTemp437)))))))))))))))))) - (fTemp521 + (fTemp533 + (fTemp522 + (fTemp430 + (fTemp534 + (fTemp525 + (fTemp535 + (fTemp537 + (fTemp531 + (fTemp444 + (fTemp457 + (fTemp456 + (fTemp539 + (fTemp528 + fTemp651)))))))))))))))); - fRec277[0] = max((fRec277[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp652)))))); + output40[i] = FAUSTFLOAT(fTemp322); + double fTemp323 = (fRec1[0] * (((0.02017333553791887 * ((((((((fTemp284 + (fTemp283 + (((fTemp282 + (fConst657 * fTemp71)) + (fConst658 * fTemp136)) + (fConst659 * fTemp19)))) + (fConst660 * fTemp105)) + (fConst661 * fTemp73)) + (fConst662 * fTemp64)) + (fConst663 * fTemp141)) + (fConst664 * fTemp138)) + (fConst665 * fTemp25)) + (fConst666 * fTemp23))) + ((fConst667 * fTemp61) + ((fConst668 * fTemp68) + ((fConst669 * fTemp55) + ((fConst670 * fTemp46) + ((fConst671 * fTemp21) + ((fConst672 * fTemp93) + ((fConst673 * fTemp87) + ((fConst674 * fTemp66) + ((fConst675 * fTemp48) + ((fConst676 * fTemp91) + (fTemp281 + ((fConst677 * fTemp43) + ((fConst678 * fTemp50) + ((fConst679 * fTemp35) + ((fConst680 * fTemp29) + fTemp315)))))))))))))))) - fTemp317)); + fRec277[0] = max((fRec277[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp323)))))); fVbargraph77 = FAUSTFLOAT(fRec277[0]); - output41[i] = FAUSTFLOAT(fTemp652); - double fTemp653 = (fRec1[0] * ((fTemp557 + (fTemp544 + (fTemp429 + (fTemp545 + (fTemp546 + (fTemp560 + (fTemp448 + (fTemp548 + (fTemp556 + (fTemp554 + (fTemp566 + (fTemp553 + (fTemp552 + (fTemp565 + (fTemp441 + (fTemp455 + (fTemp453 + (fTemp549 + (fTemp336 + fTemp562))))))))))))))))))) - (fTemp543 + (fTemp427 + (fTemp428 + (fTemp558 + (fTemp559 + (fTemp547 + (fTemp561 + (fTemp555 + (fTemp444 + (fTemp564 + (fTemp551 + (fTemp563 + (fTemp550 + fTemp651))))))))))))))); - fRec278[0] = max((fRec278[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp653)))))); + output41[i] = FAUSTFLOAT(fTemp323); + double fTemp324 = (fRec1[0] * (((fConst624 * (fTemp316 + (0.0079882333204878298 * fTemp61))) + ((0.02017333553791887 * (((((fTemp290 + (((((fTemp289 + (((fTemp288 + ((fTemp287 + (fConst681 * fTemp91)) + (fConst682 * fTemp71))) + (fConst683 * fTemp48)) + (fConst684 * fTemp19))) + (fConst685 * fTemp87)) + (fConst686 * fTemp93)) + (fConst687 * fTemp73)) + (fConst688 * fTemp64))) + (fConst689 * fTemp46)) + (fConst690 * fTemp55)) + (fConst691 * fTemp25)) + (fConst692 * fTemp23))) + ((fConst613 * fTemp291) + ((fConst619 * fTemp292) + ((fConst621 * ((0.022823523772822398 * fTemp66) + (0.017117642829616815 * fTemp136))) + ((fConst49 * fTemp286) + ((fConst42 * fTemp293) + (fTemp294 + fTemp315)))))))) - fTemp317)); + fRec278[0] = max((fRec278[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp324)))))); fVbargraph78 = FAUSTFLOAT(fRec278[0]); - output42[i] = FAUSTFLOAT(fTemp653); - double fTemp654 = (fRec1[0] * ((fTemp463 + (fTemp476 + (fTemp582 + (fTemp569 + (fTemp571 + (fTemp572 + (fTemp583 + (fTemp485 + (fTemp579 + (fTemp578 + (fTemp576 + (fTemp441 + (fTemp574 + (fTemp550 + (fTemp573 + (fTemp453 + (fTemp336 + fTemp587))))))))))))))))) - (fTemp568 + (fTemp570 + (fTemp545 + (fTemp466 + (fTemp584 + (fTemp483 + (fTemp585 + (fTemp475 + (fTemp581 + (fTemp589 + (fTemp580 + (fTemp444 + (fTemp577 + (fTemp575 + (fTemp588 + (fTemp452 + (fTemp434 + fTemp586))))))))))))))))))); - fRec279[0] = max((fRec279[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp654)))))); + output42[i] = FAUSTFLOAT(fTemp324); + double fTemp325 = (fRec1[0] * (((0.02017333553791887 * (fTemp278 + ((((((((fTemp298 + ((((fTemp297 + ((fTemp296 + (fConst682 * fTemp91)) + (fConst693 * fTemp71))) + (fConst684 * fTemp48)) + (fConst694 * fTemp19)) + (fConst695 * fTemp66))) + (fConst687 * fTemp93)) + (fConst696 * fTemp73)) + (fConst697 * fTemp21)) + (fConst698 * fTemp141)) + (fConst691 * fTemp55)) + (fConst699 * fTemp25)) + (fConst700 * fTemp68)))) + ((fConst610 * fTemp299) + ((fConst618 * ((0.016239221854451587 * fTemp87) + (0.023456653789763426 * fTemp64))) + ((((fConst701 * fTemp105) + ((fConst702 * fTemp136) + ((fConst39 * fTemp300) + ((fConst703 * fTemp109) + (fTemp301 + ((fConst704 * fTemp35) + fTemp315)))))) + (fConst705 * fTemp138)) + (fConst706 * fTemp61))))) - fTemp317)); + fRec279[0] = max((fRec279[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp325)))))); fVbargraph79 = FAUSTFLOAT(fRec279[0]); - output43[i] = FAUSTFLOAT(fTemp654); - double fTemp655 = (fRec1[0] * ((fTemp494 + (fTemp605 + (fTemp509 + (fTemp592 + (fTemp594 + (fTemp595 + (fTemp597 + (fTemp515 + (fTemp475 + (fTemp603 + (fTemp601 + (fTemp613 + (fTemp600 + (fTemp612 + (fTemp441 + (fTemp610 + (fTemp453 + (fTemp336 + fTemp598)))))))))))))))))) - (fTemp591 + (fTemp593 + (fTemp606 + (fTemp466 + (fTemp596 + (fTemp607 + (fTemp514 + (fTemp604 + (fTemp602 + (fTemp614 + (fTemp444 + (fTemp611 + (fTemp609 + (fTemp608 + (fTemp599 + fTemp647))))))))))))))))); - fRec280[0] = max((fRec280[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp655)))))); + output43[i] = FAUSTFLOAT(fTemp325); + double fTemp326 = (fRec1[0] * (((fConst624 * ((0.027388228527386878 * fTemp141) + (0.007988233320487868 * fTemp61))) + ((0.02017333553791887 * (((((((((fTemp307 + ((((fTemp306 + (fTemp305 + (fConst707 * fTemp91))) + (fConst708 * fTemp136)) + (fConst709 * fTemp48)) + (fConst710 * fTemp66))) + (fConst711 * fTemp105)) + (fConst712 * fTemp93)) + (fConst713 * fTemp21)) + (fConst714 * fTemp64)) + (fConst715 * fTemp138)) + (fConst716 * fTemp55)) + (fConst717 * fTemp68)) + (fConst718 * fTemp23))) + ((fConst719 * fTemp25) + ((fConst720 * fTemp46) + ((fConst721 * fTemp73) + ((fConst722 * fTemp87) + ((fConst723 * fTemp19) + ((fConst724 * fTemp71) + (fTemp303 + ((fConst49 * fTemp304) + ((fConst725 * fTemp43) + ((fConst726 * fTemp32) + fTemp315)))))))))))) - fTemp317)); + fRec280[0] = max((fRec280[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp326)))))); fVbargraph80 = FAUSTFLOAT(fRec280[0]); - output44[i] = FAUSTFLOAT(fTemp655); - double fTemp656 = (fRec1[0] * ((fTemp630 + (fTemp631 + (fTemp616 + (fTemp632 + (fTemp634 + (fTemp618 + (fTemp620 + (fTemp621 + (fTemp643 + (fTemp628 + (fTemp640 + (fTemp441 + (fTemp626 + (fTemp453 + (fTemp624 + (fTemp336 + fTemp622)))))))))))))))) - (fTemp633 + (fTemp635 + (fTemp636 + (fTemp637 + (fTemp638 + (fTemp617 + (fTemp619 + (fTemp645 + (fTemp629 + (fTemp644 + (fTemp642 + (fTemp444 + (fTemp627 + (fTemp641 + (fTemp625 + (fTemp639 + (fTemp623 + fTemp647))))))))))))))))))); - fRec281[0] = max((fRec281[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp656)))))); + output44[i] = FAUSTFLOAT(fTemp326); + double fTemp327 = (fRec1[0] * ((((((((fConst727 * fTemp64) + ((fConst728 * fTemp21) + ((fConst729 * fTemp73) + ((fConst730 * fTemp66) + ((fConst731 * fTemp19) + ((fConst732 * fTemp71) + ((fConst733 * fTemp35) + ((fConst734 * fTemp27) + ((fConst735 * fTemp29) + ((fConst736 * fTemp32) + fTemp315)))))))))) + (fConst737 * fTemp25)) + (fConst738 * fTemp68)) + (fConst739 * fTemp23)) + (fConst740 * fTemp61)) + (0.02017333553791887 * (fTemp313 + (((((fTemp312 + ((((fTemp311 + (((fTemp310 + (fTemp309 + (fConst741 * fTemp91))) + (fConst742 * fTemp136)) + (fConst743 * fTemp48))) + (fConst744 * fTemp87)) + (fConst745 * fTemp105)) + (fConst746 * fTemp93))) + (fConst747 * fTemp141)) + (fConst748 * fTemp46)) + (fConst749 * fTemp138)) + (fConst750 * fTemp55))))) - fTemp317)); + fRec281[0] = max((fRec281[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp327)))))); fVbargraph81 = FAUSTFLOAT(fRec281[0]); - output45[i] = FAUSTFLOAT(fTemp656); - double fTemp657 = (fTemp336 + fTemp339); - double fTemp658 = (fRec1[0] * ((fTemp325 + (fTemp327 + (fTemp347 + (fTemp329 + (fTemp330 + (fTemp332 + (fTemp334 + (fTemp335 + (fTemp359 + (fTemp357 + (fTemp346 + (fTemp356 + (fTemp354 + (fTemp344 + (fTemp351 + (fTemp343 + fTemp657)))))))))))))))) - (fTemp324 + (fTemp326 + (fTemp348 + (fTemp328 + (fTemp349 + (fTemp331 + (fTemp333 + (fTemp360 + (fTemp358 + (fTemp355 + (fTemp353 + (fTemp345 + (fTemp352 + (fTemp341 + (fTemp337 + fTemp350))))))))))))))))); - fRec282[0] = max((fRec282[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp658)))))); + output45[i] = FAUSTFLOAT(fTemp327); + double fTemp328 = (fTemp217 + (fTemp200 + fTemp202)); + double fTemp329 = (fConst773 * fTemp66); + double fTemp330 = (fConst774 * fTemp21); + double fTemp331 = (fConst778 * fTemp68); + double fTemp332 = (fConst780 * fTemp61); + double fTemp333 = (fTemp199 + fTemp201); + double fTemp334 = (fRec1[0] * ((((fConst754 * ((0.0050433338844797174 * fTemp25) + (0.0050433338844797183 * fTemp55))) + ((fConst758 * fTemp138) + ((fConst761 * fTemp46) + ((fConst762 * ((0.0067244451793062893 * fTemp73) + (0.0067244451793062911 * fTemp93))) + ((fConst764 * fTemp105) + ((fConst766 * fTemp87) + ((fConst767 * ((0.010086667768959435 * fTemp19) + (0.010086667768959437 * fTemp48))) + ((fConst769 * fTemp136) + ((fConst770 * ((0.02017333553791887 * fTemp71) + (0.020173335537918873 * fTemp91))) + ((fConst45 * fTemp193) + ((fConst771 * fTemp109) + ((fConst772 * fTemp43) + fTemp328)))))))))))) + (0.02017333553791887 * (fTemp216 + (((((fTemp213 + (fTemp212 + (((fTemp210 + (fTemp209 + (fTemp207 + fTemp329))) + fTemp330) + (fConst775 * fTemp64)))) + (fConst777 * fTemp141)) + fTemp331) + (fConst779 * fTemp23)) + fTemp332)))) - fTemp333)); + fRec282[0] = max((fRec282[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp334)))))); fVbargraph82 = FAUSTFLOAT(fRec282[0]); - output46[i] = FAUSTFLOAT(fTemp658); - double fTemp659 = (fRec1[0] * ((fTemp369 + (fTemp326 + (fTemp327 + (fTemp364 + (fTemp329 + (fTemp331 + (fTemp365 + (fTemp335 + (fTemp368 + (fTemp359 + (fTemp358 + (fTemp375 + (fTemp356 + (fTemp345 + (fTemp344 + (fTemp366 + (fTemp373 + fTemp657))))))))))))))))) - (fTemp370 + (fTemp362 + (fTemp371 + (fTemp363 + (fTemp330 + (fTemp333 + (fTemp334 + (fTemp346 + (fTemp355 + (fTemp367 + (fTemp374 + (fTemp343 + (fTemp341 + (fTemp337 + fTemp372)))))))))))))))); - fRec283[0] = max((fRec283[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp659)))))); + output46[i] = FAUSTFLOAT(fTemp334); + double fTemp335 = (fConst782 * fTemp136); + double fTemp336 = (fConst784 * fTemp105); + double fTemp337 = (fConst786 * fTemp138); + double fTemp338 = (fRec1[0] * (((0.02017333553791887 * (fTemp332 + (fTemp331 + (((fTemp213 + (fTemp212 + (fTemp330 + (((fTemp329 + (((fTemp206 + (fTemp220 + (fConst781 * fTemp71))) + fTemp335) + (fConst783 * fTemp19))) + fTemp336) + (fConst785 * fTemp73))))) + fTemp337) + (fConst787 * fTemp25))))) + ((fConst760 * ((0.01008666776895944 * fTemp23) + (0.010086667768959431 * fTemp46))) + ((fConst788 * fTemp141) + ((fConst765 * ((0.020173335537918863 * fTemp87) + (0.02017333553791888 * fTemp64))) + ((fConst789 * fTemp55) + ((fConst790 * fTemp93) + ((fConst791 * fTemp48) + ((fConst792 * fTemp91) + ((fConst39 * fTemp224) + ((fConst793 * fTemp107) + ((fConst794 * fTemp50) + (fTemp225 + fTemp328)))))))))))) - fTemp333)); + fRec283[0] = max((fRec283[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp338)))))); fVbargraph83 = FAUSTFLOAT(fRec283[0]); - output47[i] = FAUSTFLOAT(fTemp659); - double fTemp660 = (fRec1[0] * ((fTemp388 + (fTemp378 + (fTemp390 + (fTemp379 + (fTemp330 + (fTemp394 + (fTemp334 + (fTemp387 + (fTemp359 + (fTemp386 + (fTemp356 + (fTemp383 + (fTemp399 + (fTemp344 + (fTemp382 + (fTemp380 + (fTemp397 + fTemp657))))))))))))))))) - (fTemp326 + (fTemp389 + (fTemp377 + (fTemp391 + (fTemp392 + (fTemp331 + (fTemp393 + (fTemp395 + (fTemp385 + (fTemp400 + (fTemp355 + (fTemp384 + (fTemp381 + (fTemp398 + (fTemp341 + (fTemp337 + fTemp396)))))))))))))))))); - fRec284[0] = max((fRec284[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp660)))))); + output47[i] = FAUSTFLOAT(fTemp338); + double fTemp339 = (fRec1[0] * (((0.02017333553791887 * (fTemp332 + ((((fTemp212 + ((((((fTemp229 + ((fTemp228 + (fConst781 * fTemp91)) + (fConst795 * fTemp71))) + (fConst783 * fTemp48)) + (fConst796 * fTemp19)) + (fConst797 * fTemp87)) + (fConst785 * fTemp93)) + (fConst798 * fTemp73))) + (fConst799 * fTemp46)) + (fConst787 * fTemp55)) + (fConst800 * fTemp25)))) + ((fConst757 * ((4.2232002659445085e-18 * fTemp68) + (0.0095098015720093357 * fTemp138))) + ((fConst763 * ((6.3348003989167635e-18 * fTemp21) + (0.014264702358014004 * fTemp105))) + ((fConst768 * ((1.2669600797833527e-17 * fTemp66) + (0.028529404716028009 * fTemp136))) + ((fConst801 * fTemp23) + ((fConst802 * fTemp141) + ((fConst803 * fTemp64) + (fTemp227 + ((fConst42 * fTemp230) + ((fConst804 * fTemp107) + ((fConst805 * fTemp27) + fTemp328))))))))))) - fTemp333)); + fRec284[0] = max((fRec284[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp339)))))); fVbargraph84 = FAUSTFLOAT(fRec284[0]); - output48[i] = FAUSTFLOAT(fTemp660); - double fTemp661 = (fRec1[0] * ((fTemp410 + (fTemp326 + (fTemp403 + (fTemp411 + (fTemp404 + (fTemp331 + (fTemp333 + (fTemp359 + (fTemp421 + (fTemp409 + (fTemp356 + (fTemp420 + (fTemp344 + (fTemp417 + (fTemp407 + (fTemp339 + (fTemp336 + fTemp405))))))))))))))))) - (fTemp327 + (fTemp402 + (fTemp412 + (fTemp330 + (fTemp413 + (fTemp414 + (fTemp334 + (fTemp415 + (fTemp423 + (fTemp422 + (fTemp355 + (fTemp419 + (fTemp408 + (fTemp418 + (fTemp341 + (fTemp416 + (fTemp337 + fTemp406))))))))))))))))))); - fRec285[0] = max((fRec285[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp661)))))); + output48[i] = FAUSTFLOAT(fTemp339); + double fTemp340 = (fRec1[0] * ((((fConst806 * fTemp141) + (((fConst807 * fTemp73) + ((fConst808 * fTemp19) + ((fConst809 * fTemp71) + ((fConst810 * fTemp107) + (fTemp232 + ((fConst811 * fTemp32) + fTemp328)))))) + (fConst812 * fTemp25))) + (0.02017333553791887 * (fTemp237 + (fTemp332 + ((((fTemp337 + ((fTemp212 + ((((fTemp336 + ((fTemp236 + (((fTemp335 + (fTemp235 + (fTemp234 + (fTemp233 + (fConst795 * fTemp91))))) + (fConst796 * fTemp48)) + (fConst813 * fTemp66))) + (fConst814 * fTemp87))) + (fConst798 * fTemp93)) + (fConst815 * fTemp21)) + (fConst816 * fTemp64))) + (fConst817 * fTemp46))) + (fConst800 * fTemp55)) + (fConst818 * fTemp68)) + (fConst819 * fTemp23)))))) - fTemp333)); + fRec285[0] = max((fRec285[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp340)))))); fVbargraph85 = FAUSTFLOAT(fRec285[0]); - output49[i] = FAUSTFLOAT(fTemp661); + output49[i] = FAUSTFLOAT(fTemp340); fRec1[1] = fRec1[0]; fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; @@ -4282,32 +5578,32 @@ class mydsp : public dsp { fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec12[1] = fRec12[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; fRec13[1] = fRec13[0]; - fRec11[1] = fRec11[0]; - fRec10[1] = fRec10[0]; fRec16[1] = fRec16[0]; - fRec17[1] = fRec17[0]; - fRec15[1] = fRec15[0]; - fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec11[1] = fRec11[0]; fRec20[1] = fRec20[0]; fRec21[1] = fRec21[0]; fRec19[1] = fRec19[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; fRec18[1] = fRec18[0]; - fRec25[1] = fRec25[0]; - fRec26[1] = fRec26[0]; - fRec24[1] = fRec24[0]; + fRec17[1] = fRec17[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; fRec27[1] = fRec27[0]; - fRec23[1] = fRec23[0]; - fRec22[1] = fRec22[0]; + fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; + fRec26[1] = fRec26[0]; fRec32[1] = fRec32[0]; - fRec30[1] = fRec30[0]; - fRec33[1] = fRec33[0]; - fRec29[1] = fRec29[0]; - fRec28[1] = fRec28[0]; + fRec25[1] = fRec25[0]; + fRec24[1] = fRec24[0]; + fRec0[1] = fRec0[0]; fRec37[1] = fRec37[0]; fRec38[1] = fRec38[0]; fRec36[1] = fRec36[0]; @@ -4318,218 +5614,218 @@ class mydsp : public dsp { fRec44[1] = fRec44[0]; fRec42[1] = fRec42[0]; fRec45[1] = fRec45[0]; + fRec46[1] = fRec46[0]; fRec41[1] = fRec41[0]; fRec40[1] = fRec40[0]; - fRec49[1] = fRec49[0]; - fRec50[1] = fRec50[0]; - fRec48[1] = fRec48[0]; fRec51[1] = fRec51[0]; fRec52[1] = fRec52[0]; - fRec47[1] = fRec47[0]; - fRec46[1] = fRec46[0]; - fRec56[1] = fRec56[0]; - fRec57[1] = fRec57[0]; + fRec50[1] = fRec50[0]; + fRec53[1] = fRec53[0]; + fRec54[1] = fRec54[0]; + fRec49[1] = fRec49[0]; fRec55[1] = fRec55[0]; - fRec58[1] = fRec58[0]; + fRec48[1] = fRec48[0]; + fRec47[1] = fRec47[0]; + fRec60[1] = fRec60[0]; + fRec61[1] = fRec61[0]; fRec59[1] = fRec59[0]; - fRec54[1] = fRec54[0]; - fRec53[1] = fRec53[0]; + fRec62[1] = fRec62[0]; fRec63[1] = fRec63[0]; + fRec58[1] = fRec58[0]; fRec64[1] = fRec64[0]; - fRec62[1] = fRec62[0]; - fRec65[1] = fRec65[0]; - fRec66[1] = fRec66[0]; - fRec61[1] = fRec61[0]; - fRec60[1] = fRec60[0]; - fRec70[1] = fRec70[0]; - fRec71[1] = fRec71[0]; - fRec69[1] = fRec69[0]; - fRec72[1] = fRec72[0]; - fRec73[1] = fRec73[0]; + fRec57[1] = fRec57[0]; + fRec56[1] = fRec56[0]; fRec68[1] = fRec68[0]; + fRec69[1] = fRec69[0]; fRec67[1] = fRec67[0]; + fRec70[1] = fRec70[0]; + fRec66[1] = fRec66[0]; + fRec65[1] = fRec65[0]; + fRec73[1] = fRec73[0]; + fRec74[1] = fRec74[0]; + fRec72[1] = fRec72[0]; + fRec71[1] = fRec71[0]; fRec77[1] = fRec77[0]; - fRec78[1] = fRec78[0]; fRec76[1] = fRec76[0]; - fRec79[1] = fRec79[0]; - fRec80[1] = fRec80[0]; fRec75[1] = fRec75[0]; - fRec74[1] = fRec74[0]; - fRec85[1] = fRec85[0]; - fRec86[1] = fRec86[0]; - fRec84[1] = fRec84[0]; - fRec87[1] = fRec87[0]; - fRec88[1] = fRec88[0]; + fRec81[1] = fRec81[0]; + fRec82[1] = fRec82[0]; + fRec80[1] = fRec80[0]; fRec83[1] = fRec83[0]; + fRec84[1] = fRec84[0]; + fRec79[1] = fRec79[0]; + fRec78[1] = fRec78[0]; fRec89[1] = fRec89[0]; - fRec82[1] = fRec82[0]; - fRec81[1] = fRec81[0]; - fRec94[1] = fRec94[0]; - fRec95[1] = fRec95[0]; - fRec93[1] = fRec93[0]; - fRec96[1] = fRec96[0]; - fRec97[1] = fRec97[0]; + fRec90[1] = fRec90[0]; + fRec88[1] = fRec88[0]; + fRec91[1] = fRec91[0]; fRec92[1] = fRec92[0]; + fRec87[1] = fRec87[0]; + fRec93[1] = fRec93[0]; + fRec86[1] = fRec86[0]; + fRec85[1] = fRec85[0]; + fRec33[1] = fRec33[0]; fRec98[1] = fRec98[0]; - fRec91[1] = fRec91[0]; - fRec90[1] = fRec90[0]; - fRec103[1] = fRec103[0]; - fRec104[1] = fRec104[0]; - fRec102[1] = fRec102[0]; + fRec99[1] = fRec99[0]; + fRec97[1] = fRec97[0]; + fRec100[1] = fRec100[0]; + fRec96[1] = fRec96[0]; + fRec95[1] = fRec95[0]; fRec105[1] = fRec105[0]; fRec106[1] = fRec106[0]; - fRec101[1] = fRec101[0]; + fRec104[1] = fRec104[0]; fRec107[1] = fRec107[0]; - fRec100[1] = fRec100[0]; - fRec99[1] = fRec99[0]; - fRec112[1] = fRec112[0]; + fRec108[1] = fRec108[0]; + fRec103[1] = fRec103[0]; + fRec109[1] = fRec109[0]; + fRec102[1] = fRec102[0]; + fRec101[1] = fRec101[0]; fRec113[1] = fRec113[0]; - fRec111[1] = fRec111[0]; fRec114[1] = fRec114[0]; + fRec112[1] = fRec112[0]; fRec115[1] = fRec115[0]; + fRec111[1] = fRec111[0]; fRec110[1] = fRec110[0]; + fRec118[1] = fRec118[0]; + fRec117[1] = fRec117[0]; fRec116[1] = fRec116[0]; - fRec109[1] = fRec109[0]; - fRec108[1] = fRec108[0]; - fRec121[1] = fRec121[0]; - fRec122[1] = fRec122[0]; - fRec120[1] = fRec120[0]; fRec123[1] = fRec123[0]; fRec124[1] = fRec124[0]; - fRec119[1] = fRec119[0]; + fRec122[1] = fRec122[0]; fRec125[1] = fRec125[0]; - fRec118[1] = fRec118[0]; - fRec117[1] = fRec117[0]; - fRec130[1] = fRec130[0]; - fRec131[1] = fRec131[0]; - fRec129[1] = fRec129[0]; + fRec126[1] = fRec126[0]; + fRec121[1] = fRec121[0]; + fRec127[1] = fRec127[0]; + fRec120[1] = fRec120[0]; + fRec119[1] = fRec119[0]; fRec132[1] = fRec132[0]; fRec133[1] = fRec133[0]; - fRec128[1] = fRec128[0]; + fRec131[1] = fRec131[0]; fRec134[1] = fRec134[0]; - fRec127[1] = fRec127[0]; - fRec126[1] = fRec126[0]; - fRec0[1] = fRec0[0]; fRec135[1] = fRec135[0]; - fRec141[1] = fRec141[0]; - fRec142[1] = fRec142[0]; - fRec140[1] = fRec140[0]; - fRec143[1] = fRec143[0]; - fRec144[1] = fRec144[0]; + fRec130[1] = fRec130[0]; + fRec136[1] = fRec136[0]; + fRec129[1] = fRec129[0]; + fRec128[1] = fRec128[0]; + fRec94[1] = fRec94[0]; + fRec137[1] = fRec137[0]; + fRec138[1] = fRec138[0]; fRec139[1] = fRec139[0]; fRec145[1] = fRec145[0]; - fRec138[1] = fRec138[0]; - fRec137[1] = fRec137[0]; - fRec150[1] = fRec150[0]; - fRec151[1] = fRec151[0]; + fRec146[1] = fRec146[0]; + fRec144[1] = fRec144[0]; + fRec147[1] = fRec147[0]; + fRec148[1] = fRec148[0]; + fRec143[1] = fRec143[0]; fRec149[1] = fRec149[0]; - fRec152[1] = fRec152[0]; + fRec142[1] = fRec142[0]; + fRec141[1] = fRec141[0]; fRec153[1] = fRec153[0]; - fRec148[1] = fRec148[0]; fRec154[1] = fRec154[0]; - fRec147[1] = fRec147[0]; - fRec146[1] = fRec146[0]; - fRec157[1] = fRec157[0]; - fRec158[1] = fRec158[0]; - fRec156[1] = fRec156[0]; + fRec152[1] = fRec152[0]; fRec155[1] = fRec155[0]; - fRec161[1] = fRec161[0]; + fRec156[1] = fRec156[0]; + fRec151[1] = fRec151[0]; + fRec150[1] = fRec150[0]; fRec160[1] = fRec160[0]; + fRec161[1] = fRec161[0]; fRec159[1] = fRec159[0]; - fRec166[1] = fRec166[0]; + fRec162[1] = fRec162[0]; + fRec158[1] = fRec158[0]; + fRec157[1] = fRec157[0]; fRec167[1] = fRec167[0]; - fRec165[1] = fRec165[0]; fRec168[1] = fRec168[0]; + fRec166[1] = fRec166[0]; fRec169[1] = fRec169[0]; - fRec164[1] = fRec164[0]; fRec170[1] = fRec170[0]; + fRec165[1] = fRec165[0]; + fRec171[1] = fRec171[0]; + fRec164[1] = fRec164[0]; fRec163[1] = fRec163[0]; - fRec162[1] = fRec162[0]; fRec174[1] = fRec174[0]; fRec175[1] = fRec175[0]; fRec173[1] = fRec173[0]; - fRec176[1] = fRec176[0]; - fRec177[1] = fRec177[0]; fRec172[1] = fRec172[0]; - fRec171[1] = fRec171[0]; - fRec181[1] = fRec181[0]; - fRec182[1] = fRec182[0]; - fRec180[1] = fRec180[0]; - fRec183[1] = fRec183[0]; fRec179[1] = fRec179[0]; + fRec180[1] = fRec180[0]; fRec178[1] = fRec178[0]; + fRec181[1] = fRec181[0]; + fRec182[1] = fRec182[0]; + fRec177[1] = fRec177[0]; + fRec176[1] = fRec176[0]; + fRec140[1] = fRec140[0]; fRec187[1] = fRec187[0]; fRec188[1] = fRec188[0]; fRec186[1] = fRec186[0]; fRec189[1] = fRec189[0]; + fRec190[1] = fRec190[0]; fRec185[1] = fRec185[0]; fRec184[1] = fRec184[0]; fRec193[1] = fRec193[0]; fRec194[1] = fRec194[0]; fRec192[1] = fRec192[0]; - fRec195[1] = fRec195[0]; - fRec196[1] = fRec196[0]; fRec191[1] = fRec191[0]; - fRec190[1] = fRec190[0]; - fRec136[1] = fRec136[0]; - fRec197[1] = fRec197[0]; fRec198[1] = fRec198[0]; fRec199[1] = fRec199[0]; + fRec197[1] = fRec197[0]; fRec200[1] = fRec200[0]; - fRec204[1] = fRec204[0]; - fRec205[1] = fRec205[0]; - fRec203[1] = fRec203[0]; + fRec201[1] = fRec201[0]; + fRec196[1] = fRec196[0]; + fRec195[1] = fRec195[0]; + fRec183[1] = fRec183[0]; fRec202[1] = fRec202[0]; + fRec203[1] = fRec203[0]; + fRec208[1] = fRec208[0]; fRec209[1] = fRec209[0]; + fRec207[1] = fRec207[0]; fRec210[1] = fRec210[0]; - fRec208[1] = fRec208[0]; fRec211[1] = fRec211[0]; - fRec207[1] = fRec207[0]; fRec206[1] = fRec206[0]; + fRec205[1] = fRec205[0]; + fRec215[1] = fRec215[0]; fRec216[1] = fRec216[0]; + fRec214[1] = fRec214[0]; fRec217[1] = fRec217[0]; - fRec215[1] = fRec215[0]; fRec218[1] = fRec218[0]; - fRec219[1] = fRec219[0]; - fRec214[1] = fRec214[0]; - fRec220[1] = fRec220[0]; fRec213[1] = fRec213[0]; fRec212[1] = fRec212[0]; + fRec221[1] = fRec221[0]; + fRec222[1] = fRec222[0]; + fRec220[1] = fRec220[0]; + fRec219[1] = fRec219[0]; + fRec204[1] = fRec204[0]; + fRec223[1] = fRec223[0]; fRec224[1] = fRec224[0]; fRec225[1] = fRec225[0]; - fRec223[1] = fRec223[0]; fRec226[1] = fRec226[0]; fRec227[1] = fRec227[0]; - fRec222[1] = fRec222[0]; - fRec221[1] = fRec221[0]; - fRec232[1] = fRec232[0]; - fRec233[1] = fRec233[0]; - fRec231[1] = fRec231[0]; + fRec228[1] = fRec228[0]; + fRec229[1] = fRec229[0]; fRec234[1] = fRec234[0]; fRec235[1] = fRec235[0]; - fRec230[1] = fRec230[0]; + fRec233[1] = fRec233[0]; fRec236[1] = fRec236[0]; - fRec229[1] = fRec229[0]; - fRec228[1] = fRec228[0]; - fRec240[1] = fRec240[0]; + fRec232[1] = fRec232[0]; + fRec231[1] = fRec231[0]; fRec241[1] = fRec241[0]; - fRec239[1] = fRec239[0]; fRec242[1] = fRec242[0]; + fRec240[1] = fRec240[0]; fRec243[1] = fRec243[0]; - fRec238[1] = fRec238[0]; - fRec237[1] = fRec237[0]; - fRec201[1] = fRec201[0]; fRec244[1] = fRec244[0]; + fRec239[1] = fRec239[0]; fRec245[1] = fRec245[0]; - fRec246[1] = fRec246[0]; - fRec247[1] = fRec247[0]; - fRec248[1] = fRec248[0]; - fRec249[1] = fRec249[0]; + fRec238[1] = fRec238[0]; + fRec237[1] = fRec237[0]; fRec250[1] = fRec250[0]; fRec251[1] = fRec251[0]; + fRec249[1] = fRec249[0]; fRec252[1] = fRec252[0]; fRec253[1] = fRec253[0]; + fRec248[1] = fRec248[0]; fRec254[1] = fRec254[0]; + fRec247[1] = fRec247[0]; + fRec246[1] = fRec246[0]; + fRec230[1] = fRec230[0]; fRec255[1] = fRec255[0]; fRec256[1] = fRec256[0]; fRec257[1] = fRec257[0]; @@ -4569,7 +5865,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -4801,7 +6096,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -4864,7 +6159,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -4893,11 +6188,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOADecoderLebedev50Binaural1.cpp b/source/HOAUGens/HOADecoderLebedev50Binaural1.cpp deleted file mode 100644 index ec15ad61f8..0000000000 --- a/source/HOAUGens/HOADecoderLebedev50Binaural1.cpp +++ /dev/null @@ -1,2657 +0,0 @@ -//---------------------------------------------------------- -// name: "HOADecoderLebedev50Binaural1" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL)" -// copyright: "(c) Pierre Lecomte 2015" -// -// Code generated with Faust 0.12.0 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" -#endif - -#include -#include -#include -#include - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** - * DSP memory manager. - */ - -struct dsp_memory_manager { - - virtual ~dsp_memory_manager() {} - - virtual void* allocate(size_t size) = 0; - virtual void destroy(void* ptr) = 0; - -}; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the ui_interface parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** - * Global init, calls the following methods: - * - static class 'classInit': static tables initialization - * - 'instanceInit': constants and instance state initialization - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** - * Init instance state - * - * @param samplingRate - the sampling rate in Hertz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** - * Init instance constant state - * - * @param samplingRate - the sampling rate in Hertz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with successive in/out audio buffers. - * - * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation: alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { fDSP->metadata(m); } - // Beware: subclasses usually have to overload the two 'compute' methods - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __UI_H__ -#define __UI_H__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust DSP User Interface - * User Interface as expected by the buildUserInterface() method of a DSP. - * This abstract class contains only the method that the Faust compiler can - * generate to describe a DSP user interface. - ******************************************************************************/ - -struct Soundfile; - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- soundfiles - - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 - #define FAUST_EXPORT __attribute__((visibility("default"))) -#else - #define FAUST_EXPORT SC_API_EXPORT -#endif - -#ifdef WIN32 - #define STRDUP _strdup -#else - #define STRDUP strdup -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fTempPerm0; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fTempPerm1; - int IOTA; - double fVec0[128]; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; - double fTempPerm8; - double fTempPerm9; - double fTempPerm10; - double fTempPerm11; - double fTempPerm12; - double fTempPerm13; - double fTempPerm14; - double fTempPerm15; - double fTempPerm16; - double fTempPerm17; - double fTempPerm18; - double fTempPerm19; - double fTempPerm20; - double fTempPerm21; - double fTempPerm22; - double fTempPerm23; - double fTempPerm24; - double fTempPerm25; - double fTempPerm26; - double fTempPerm27; - double fTempPerm28; - double fTempPerm29; - double fTempPerm30; - double fTempPerm31; - double fTempPerm32; - double fTempPerm33; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fTempPerm34; - double fVec1[128]; - double fTempPerm35; - double fTempPerm36; - double fTempPerm37; - double fTempPerm38; - double fTempPerm39; - double fTempPerm40; - double fTempPerm41; - double fTempPerm42; - double fTempPerm43; - double fTempPerm44; - double fTempPerm45; - double fTempPerm46; - double fTempPerm47; - double fTempPerm48; - double fTempPerm49; - double fTempPerm50; - double fTempPerm51; - double fTempPerm52; - double fTempPerm53; - double fTempPerm54; - double fTempPerm55; - double fTempPerm56; - double fTempPerm57; - double fTempPerm58; - double fTempPerm59; - double fTempPerm60; - double fTempPerm61; - double fRec5[2]; - FAUSTFLOAT fbargraph2; - double fTempPerm62; - double fVec2[128]; - double fTempPerm63; - double fTempPerm64; - double fTempPerm65; - double fTempPerm66; - double fTempPerm67; - double fTempPerm68; - double fTempPerm69; - double fTempPerm70; - double fTempPerm71; - double fTempPerm72; - double fTempPerm73; - double fTempPerm74; - double fTempPerm75; - double fTempPerm76; - double fTempPerm77; - double fTempPerm78; - double fTempPerm79; - double fTempPerm80; - double fTempPerm81; - double fTempPerm82; - double fTempPerm83; - double fTempPerm84; - double fTempPerm85; - double fTempPerm86; - double fTempPerm87; - double fTempPerm88; - double fTempPerm89; - double fTempPerm90; - double fTempPerm91; - double fTempPerm92; - double fTempPerm93; - double fTempPerm94; - double fTempPerm95; - double fTempPerm96; - double fTempPerm97; - double fTempPerm98; - double fTempPerm99; - double fTempPerm100; - double fTempPerm101; - double fTempPerm102; - double fTempPerm103; - double fTempPerm104; - double fTempPerm105; - double fTempPerm106; - double fTempPerm107; - double fTempPerm108; - double fTempPerm109; - double fTempPerm110; - double fTempPerm111; - double fTempPerm112; - double fTempPerm113; - double fTempPerm114; - double fTempPerm115; - double fTempPerm116; - double fTempPerm117; - double fTempPerm118; - double fTempPerm119; - double fTempPerm120; - double fTempPerm121; - double fTempPerm122; - double fTempPerm123; - double fTempPerm124; - double fTempPerm125; - double fTempPerm126; - double fTempPerm127; - double fTempPerm128; - double fTempPerm129; - double fTempPerm130; - double fTempPerm131; - double fTempPerm132; - double fTempPerm133; - double fTempPerm134; - double fTempPerm135; - double fTempPerm136; - double fRec6[2]; - FAUSTFLOAT fbargraph3; - double fTempPerm137; - double fVec3[128]; - double fTempPerm138; - double fTempPerm139; - double fTempPerm140; - double fTempPerm141; - double fTempPerm142; - double fTempPerm143; - double fTempPerm144; - double fTempPerm145; - double fTempPerm146; - double fTempPerm147; - double fTempPerm148; - double fTempPerm149; - double fTempPerm150; - double fTempPerm151; - double fTempPerm152; - double fTempPerm153; - double fTempPerm154; - double fTempPerm155; - double fTempPerm156; - double fTempPerm157; - double fTempPerm158; - double fTempPerm159; - double fTempPerm160; - double fTempPerm161; - double fTempPerm162; - double fTempPerm163; - double fTempPerm164; - double fTempPerm165; - double fTempPerm166; - double fTempPerm167; - double fTempPerm168; - double fTempPerm169; - double fTempPerm170; - double fTempPerm171; - double fTempPerm172; - double fTempPerm173; - double fTempPerm174; - double fTempPerm175; - double fTempPerm176; - double fTempPerm177; - double fTempPerm178; - double fTempPerm179; - double fTempPerm180; - double fTempPerm181; - double fTempPerm182; - double fTempPerm183; - double fTempPerm184; - double fTempPerm185; - double fTempPerm186; - double fTempPerm187; - double fTempPerm188; - double fTempPerm189; - double fTempPerm190; - double fTempPerm191; - double fTempPerm192; - double fTempPerm193; - double fTempPerm194; - double fTempPerm195; - double fTempPerm196; - double fTempPerm197; - double fTempPerm198; - double fTempPerm199; - double fTempPerm200; - double fTempPerm201; - double fTempPerm202; - double fTempPerm203; - double fTempPerm204; - double fTempPerm205; - double fTempPerm206; - double fTempPerm207; - double fTempPerm208; - double fTempPerm209; - double fTempPerm210; - double fTempPerm211; - double fTempPerm212; - double fTempPerm213; - double fTempPerm214; - double fTempPerm215; - double fTempPerm216; - double fTempPerm217; - double fTempPerm218; - double fTempPerm219; - double fTempPerm220; - double fTempPerm221; - double fTempPerm222; - double fTempPerm223; - double fTempPerm224; - double fTempPerm225; - double fTempPerm226; - double fTempPerm227; - double fTempPerm228; - double fTempPerm229; - double fTempPerm230; - double fTempPerm231; - double fTempPerm232; - double fTempPerm233; - double fTempPerm234; - double fTempPerm235; - double fTempPerm236; - double fTempPerm237; - double fTempPerm238; - double fTempPerm239; - double fTempPerm240; - double fTempPerm241; - double fTempPerm242; - double fTempPerm243; - double fTempPerm244; - double fTempPerm245; - double fTempPerm246; - double fTempPerm247; - double fTempPerm248; - double fTempPerm249; - double fTempPerm250; - double fTempPerm251; - double fTempPerm252; - double fTempPerm253; - double fTempPerm254; - double fTempPerm255; - double fTempPerm256; - double fTempPerm257; - double fTempPerm258; - double fTempPerm259; - double fTempPerm260; - double fTempPerm261; - double fTempPerm262; - double fTempPerm263; - double fTempPerm264; - double fTempPerm265; - double fTempPerm266; - double fTempPerm267; - double fTempPerm268; - double fTempPerm269; - double fTempPerm270; - double fTempPerm271; - double fTempPerm272; - double fTempPerm273; - double fTempPerm274; - double fTempPerm275; - double fTempPerm276; - double fTempPerm277; - double fTempPerm278; - double fTempPerm279; - double fTempPerm280; - double fTempPerm281; - double fTempPerm282; - double fTempPerm283; - double fTempPerm284; - double fTempPerm285; - double fTempPerm286; - double fTempPerm287; - double fTempPerm288; - double fTempPerm289; - double fTempPerm290; - double fTempPerm291; - double fTempPerm292; - double fTempPerm293; - double fTempPerm294; - double fTempPerm295; - double fTempPerm296; - double fTempPerm297; - double fTempPerm298; - double fTempPerm299; - double fTempPerm300; - double fTempPerm301; - double fTempPerm302; - double fTempPerm303; - double fTempPerm304; - double fTempPerm305; - double fTempPerm306; - double fTempPerm307; - double fTempPerm308; - double fTempPerm309; - double fTempPerm310; - double fTempPerm311; - double fTempPerm312; - double fTempPerm313; - double fTempPerm314; - double fTempPerm315; - double fTempPerm316; - double fTempPerm317; - double fTempPerm318; - double fTempPerm319; - double fTempPerm320; - double fTempPerm321; - double fTempPerm322; - double fTempPerm323; - double fTempPerm324; - double fTempPerm325; - double fTempPerm326; - double fTempPerm327; - double fTempPerm328; - double fTempPerm329; - double fTempPerm330; - double fTempPerm331; - double fTempPerm332; - double fTempPerm333; - double fTempPerm334; - double fTempPerm335; - double fTempPerm336; - double fTempPerm337; - double fTempPerm338; - double fTempPerm339; - double fTempPerm340; - double fTempPerm341; - double fTempPerm342; - double fTempPerm343; - double fTempPerm344; - double fTempPerm345; - double fTempPerm346; - double fTempPerm347; - double fTempPerm348; - double fTempPerm349; - double fTempPerm350; - double fTempPerm351; - double fTempPerm352; - double fTempPerm353; - double fTempPerm354; - double fTempPerm355; - double fTempPerm356; - double fTempPerm357; - double fTempPerm358; - double fTempPerm359; - double fTempPerm360; - double fTempPerm361; - double fTempPerm362; - double fTempPerm363; - double fTempPerm364; - double fTempPerm365; - double fTempPerm366; - double fTempPerm367; - double fTempPerm368; - double fTempPerm369; - double fTempPerm370; - double fTempPerm371; - double fTempPerm372; - double fTempPerm373; - double fTempPerm374; - double fTempPerm375; - double fTempPerm376; - double fTempPerm377; - double fTempPerm378; - double fTempPerm379; - double fTempPerm380; - double fTempPerm381; - double fTempPerm382; - double fTempPerm383; - double fTempPerm384; - double fTempPerm385; - double fTempPerm386; - double fTempPerm387; - double fTempPerm388; - double fTempPerm389; - double fTempPerm390; - double fTempPerm391; - double fTempPerm392; - double fTempPerm393; - double fTempPerm394; - double fTempPerm395; - double fTempPerm396; - double fTempPerm397; - double fTempPerm398; - double fTempPerm399; - double fTempPerm400; - double fTempPerm401; - double fTempPerm402; - double fTempPerm403; - double fTempPerm404; - double fTempPerm405; - double fTempPerm406; - double fTempPerm407; - double fTempPerm408; - double fTempPerm409; - double fTempPerm410; - double fTempPerm411; - double fTempPerm412; - double fTempPerm413; - double fTempPerm414; - double fTempPerm415; - double fTempPerm416; - double fTempPerm417; - double fTempPerm418; - double fTempPerm419; - double fTempPerm420; - double fTempPerm421; - double fTempPerm422; - double fTempPerm423; - double fTempPerm424; - double fTempPerm425; - double fTempPerm426; - double fTempPerm427; - double fTempPerm428; - double fTempPerm429; - double fTempPerm430; - double fTempPerm431; - double fTempPerm432; - double fTempPerm433; - double fTempPerm434; - double fTempPerm435; - double fTempPerm436; - double fTempPerm437; - double fTempPerm438; - double fTempPerm439; - double fTempPerm440; - double fTempPerm441; - double fTempPerm442; - double fTempPerm443; - double fTempPerm444; - double fTempPerm445; - double fTempPerm446; - double fTempPerm447; - double fTempPerm448; - double fTempPerm449; - double fTempPerm450; - double fTempPerm451; - double fTempPerm452; - double fTempPerm453; - double fTempPerm454; - double fTempPerm455; - double fTempPerm456; - double fTempPerm457; - double fTempPerm458; - double fTempPerm459; - double fTempPerm460; - double fTempPerm461; - double fTempPerm462; - double fTempPerm463; - double fTempPerm464; - double fTempPerm465; - double fTempPerm466; - double fTempPerm467; - double fTempPerm468; - double fTempPerm469; - double fTempPerm470; - double fTempPerm471; - double fTempPerm472; - double fTempPerm473; - double fTempPerm474; - double fTempPerm475; - double fTempPerm476; - double fTempPerm477; - double fTempPerm478; - double fTempPerm479; - double fTempPerm480; - double fTempPerm481; - double fTempPerm482; - double fTempPerm483; - double fTempPerm484; - double fTempPerm485; - double fTempPerm486; - double fTempPerm487; - double fTempPerm488; - double fTempPerm489; - double fTempPerm490; - double fTempPerm491; - double fTempPerm492; - double fTempPerm493; - double fTempPerm494; - double fTempPerm495; - double fTempPerm496; - double fTempPerm497; - double fTempPerm498; - double fTempPerm499; - double fTempPerm500; - double fTempPerm501; - double fTempPerm502; - double fTempPerm503; - double fTempPerm504; - double fTempPerm505; - double fTempPerm506; - double fTempPerm507; - double fTempPerm508; - double fTempPerm509; - double fTempPerm510; - double fTempPerm511; - double fTempPerm512; - double fRec0[2]; - FAUSTFLOAT fbargraph4; - double fTempPerm513; - double fRec7[2]; - FAUSTFLOAT fbargraph5; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOADecoderLebedev50Binaural1"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL)"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("gui.lib/name", "GUI Library"); - m->declare("gui.lib/version", "1.0"); - m->declare("gui.lib/author", "Pierre Lecomte"); - m->declare("gui.lib/license", "GPL"); - m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("signals.lib/version", "0.0"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); - } - - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 2; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; - fTempPerm8 = 0; - fTempPerm9 = 0; - fTempPerm10 = 0; - fTempPerm11 = 0; - fTempPerm12 = 0; - fTempPerm13 = 0; - fTempPerm14 = 0; - fTempPerm15 = 0; - fTempPerm16 = 0; - fTempPerm17 = 0; - fTempPerm18 = 0; - fTempPerm19 = 0; - fTempPerm20 = 0; - fTempPerm21 = 0; - fTempPerm22 = 0; - fTempPerm23 = 0; - fTempPerm24 = 0; - fTempPerm25 = 0; - fTempPerm26 = 0; - fTempPerm27 = 0; - fTempPerm28 = 0; - fTempPerm29 = 0; - fTempPerm30 = 0; - fTempPerm31 = 0; - fTempPerm32 = 0; - fTempPerm33 = 0; - fTempPerm34 = 0; - fTempPerm35 = 0; - fTempPerm36 = 0; - fTempPerm37 = 0; - fTempPerm38 = 0; - fTempPerm39 = 0; - fTempPerm40 = 0; - fTempPerm41 = 0; - fTempPerm42 = 0; - fTempPerm43 = 0; - fTempPerm44 = 0; - fTempPerm45 = 0; - fTempPerm46 = 0; - fTempPerm47 = 0; - fTempPerm48 = 0; - fTempPerm49 = 0; - fTempPerm50 = 0; - fTempPerm51 = 0; - fTempPerm52 = 0; - fTempPerm53 = 0; - fTempPerm54 = 0; - fTempPerm55 = 0; - fTempPerm56 = 0; - fTempPerm57 = 0; - fTempPerm58 = 0; - fTempPerm59 = 0; - fTempPerm60 = 0; - fTempPerm61 = 0; - fTempPerm62 = 0; - fTempPerm63 = 0; - fTempPerm64 = 0; - fTempPerm65 = 0; - fTempPerm66 = 0; - fTempPerm67 = 0; - fTempPerm68 = 0; - fTempPerm69 = 0; - fTempPerm70 = 0; - fTempPerm71 = 0; - fTempPerm72 = 0; - fTempPerm73 = 0; - fTempPerm74 = 0; - fTempPerm75 = 0; - fTempPerm76 = 0; - fTempPerm77 = 0; - fTempPerm78 = 0; - fTempPerm79 = 0; - fTempPerm80 = 0; - fTempPerm81 = 0; - fTempPerm82 = 0; - fTempPerm83 = 0; - fTempPerm84 = 0; - fTempPerm85 = 0; - fTempPerm86 = 0; - fTempPerm87 = 0; - fTempPerm88 = 0; - fTempPerm89 = 0; - fTempPerm90 = 0; - fTempPerm91 = 0; - fTempPerm92 = 0; - fTempPerm93 = 0; - fTempPerm94 = 0; - fTempPerm95 = 0; - fTempPerm96 = 0; - fTempPerm97 = 0; - fTempPerm98 = 0; - fTempPerm99 = 0; - fTempPerm100 = 0; - fTempPerm101 = 0; - fTempPerm102 = 0; - fTempPerm103 = 0; - fTempPerm104 = 0; - fTempPerm105 = 0; - fTempPerm106 = 0; - fTempPerm107 = 0; - fTempPerm108 = 0; - fTempPerm109 = 0; - fTempPerm110 = 0; - fTempPerm111 = 0; - fTempPerm112 = 0; - fTempPerm113 = 0; - fTempPerm114 = 0; - fTempPerm115 = 0; - fTempPerm116 = 0; - fTempPerm117 = 0; - fTempPerm118 = 0; - fTempPerm119 = 0; - fTempPerm120 = 0; - fTempPerm121 = 0; - fTempPerm122 = 0; - fTempPerm123 = 0; - fTempPerm124 = 0; - fTempPerm125 = 0; - fTempPerm126 = 0; - fTempPerm127 = 0; - fTempPerm128 = 0; - fTempPerm129 = 0; - fTempPerm130 = 0; - fTempPerm131 = 0; - fTempPerm132 = 0; - fTempPerm133 = 0; - fTempPerm134 = 0; - fTempPerm135 = 0; - fTempPerm136 = 0; - fTempPerm137 = 0; - fTempPerm138 = 0; - fTempPerm139 = 0; - fTempPerm140 = 0; - fTempPerm141 = 0; - fTempPerm142 = 0; - fTempPerm143 = 0; - fTempPerm144 = 0; - fTempPerm145 = 0; - fTempPerm146 = 0; - fTempPerm147 = 0; - fTempPerm148 = 0; - fTempPerm149 = 0; - fTempPerm150 = 0; - fTempPerm151 = 0; - fTempPerm152 = 0; - fTempPerm153 = 0; - fTempPerm154 = 0; - fTempPerm155 = 0; - fTempPerm156 = 0; - fTempPerm157 = 0; - fTempPerm158 = 0; - fTempPerm159 = 0; - fTempPerm160 = 0; - fTempPerm161 = 0; - fTempPerm162 = 0; - fTempPerm163 = 0; - fTempPerm164 = 0; - fTempPerm165 = 0; - fTempPerm166 = 0; - fTempPerm167 = 0; - fTempPerm168 = 0; - fTempPerm169 = 0; - fTempPerm170 = 0; - fTempPerm171 = 0; - fTempPerm172 = 0; - fTempPerm173 = 0; - fTempPerm174 = 0; - fTempPerm175 = 0; - fTempPerm176 = 0; - fTempPerm177 = 0; - fTempPerm178 = 0; - fTempPerm179 = 0; - fTempPerm180 = 0; - fTempPerm181 = 0; - fTempPerm182 = 0; - fTempPerm183 = 0; - fTempPerm184 = 0; - fTempPerm185 = 0; - fTempPerm186 = 0; - fTempPerm187 = 0; - fTempPerm188 = 0; - fTempPerm189 = 0; - fTempPerm190 = 0; - fTempPerm191 = 0; - fTempPerm192 = 0; - fTempPerm193 = 0; - fTempPerm194 = 0; - fTempPerm195 = 0; - fTempPerm196 = 0; - fTempPerm197 = 0; - fTempPerm198 = 0; - fTempPerm199 = 0; - fTempPerm200 = 0; - fTempPerm201 = 0; - fTempPerm202 = 0; - fTempPerm203 = 0; - fTempPerm204 = 0; - fTempPerm205 = 0; - fTempPerm206 = 0; - fTempPerm207 = 0; - fTempPerm208 = 0; - fTempPerm209 = 0; - fTempPerm210 = 0; - fTempPerm211 = 0; - fTempPerm212 = 0; - fTempPerm213 = 0; - fTempPerm214 = 0; - fTempPerm215 = 0; - fTempPerm216 = 0; - fTempPerm217 = 0; - fTempPerm218 = 0; - fTempPerm219 = 0; - fTempPerm220 = 0; - fTempPerm221 = 0; - fTempPerm222 = 0; - fTempPerm223 = 0; - fTempPerm224 = 0; - fTempPerm225 = 0; - fTempPerm226 = 0; - fTempPerm227 = 0; - fTempPerm228 = 0; - fTempPerm229 = 0; - fTempPerm230 = 0; - fTempPerm231 = 0; - fTempPerm232 = 0; - fTempPerm233 = 0; - fTempPerm234 = 0; - fTempPerm235 = 0; - fTempPerm236 = 0; - fTempPerm237 = 0; - fTempPerm238 = 0; - fTempPerm239 = 0; - fTempPerm240 = 0; - fTempPerm241 = 0; - fTempPerm242 = 0; - fTempPerm243 = 0; - fTempPerm244 = 0; - fTempPerm245 = 0; - fTempPerm246 = 0; - fTempPerm247 = 0; - fTempPerm248 = 0; - fTempPerm249 = 0; - fTempPerm250 = 0; - fTempPerm251 = 0; - fTempPerm252 = 0; - fTempPerm253 = 0; - fTempPerm254 = 0; - fTempPerm255 = 0; - fTempPerm256 = 0; - fTempPerm257 = 0; - fTempPerm258 = 0; - fTempPerm259 = 0; - fTempPerm260 = 0; - fTempPerm261 = 0; - fTempPerm262 = 0; - fTempPerm263 = 0; - fTempPerm264 = 0; - fTempPerm265 = 0; - fTempPerm266 = 0; - fTempPerm267 = 0; - fTempPerm268 = 0; - fTempPerm269 = 0; - fTempPerm270 = 0; - fTempPerm271 = 0; - fTempPerm272 = 0; - fTempPerm273 = 0; - fTempPerm274 = 0; - fTempPerm275 = 0; - fTempPerm276 = 0; - fTempPerm277 = 0; - fTempPerm278 = 0; - fTempPerm279 = 0; - fTempPerm280 = 0; - fTempPerm281 = 0; - fTempPerm282 = 0; - fTempPerm283 = 0; - fTempPerm284 = 0; - fTempPerm285 = 0; - fTempPerm286 = 0; - fTempPerm287 = 0; - fTempPerm288 = 0; - fTempPerm289 = 0; - fTempPerm290 = 0; - fTempPerm291 = 0; - fTempPerm292 = 0; - fTempPerm293 = 0; - fTempPerm294 = 0; - fTempPerm295 = 0; - fTempPerm296 = 0; - fTempPerm297 = 0; - fTempPerm298 = 0; - fTempPerm299 = 0; - fTempPerm300 = 0; - fTempPerm301 = 0; - fTempPerm302 = 0; - fTempPerm303 = 0; - fTempPerm304 = 0; - fTempPerm305 = 0; - fTempPerm306 = 0; - fTempPerm307 = 0; - fTempPerm308 = 0; - fTempPerm309 = 0; - fTempPerm310 = 0; - fTempPerm311 = 0; - fTempPerm312 = 0; - fTempPerm313 = 0; - fTempPerm314 = 0; - fTempPerm315 = 0; - fTempPerm316 = 0; - fTempPerm317 = 0; - fTempPerm318 = 0; - fTempPerm319 = 0; - fTempPerm320 = 0; - fTempPerm321 = 0; - fTempPerm322 = 0; - fTempPerm323 = 0; - fTempPerm324 = 0; - fTempPerm325 = 0; - fTempPerm326 = 0; - fTempPerm327 = 0; - fTempPerm328 = 0; - fTempPerm329 = 0; - fTempPerm330 = 0; - fTempPerm331 = 0; - fTempPerm332 = 0; - fTempPerm333 = 0; - fTempPerm334 = 0; - fTempPerm335 = 0; - fTempPerm336 = 0; - fTempPerm337 = 0; - fTempPerm338 = 0; - fTempPerm339 = 0; - fTempPerm340 = 0; - fTempPerm341 = 0; - fTempPerm342 = 0; - fTempPerm343 = 0; - fTempPerm344 = 0; - fTempPerm345 = 0; - fTempPerm346 = 0; - fTempPerm347 = 0; - fTempPerm348 = 0; - fTempPerm349 = 0; - fTempPerm350 = 0; - fTempPerm351 = 0; - fTempPerm352 = 0; - fTempPerm353 = 0; - fTempPerm354 = 0; - fTempPerm355 = 0; - fTempPerm356 = 0; - fTempPerm357 = 0; - fTempPerm358 = 0; - fTempPerm359 = 0; - fTempPerm360 = 0; - fTempPerm361 = 0; - fTempPerm362 = 0; - fTempPerm363 = 0; - fTempPerm364 = 0; - fTempPerm365 = 0; - fTempPerm366 = 0; - fTempPerm367 = 0; - fTempPerm368 = 0; - fTempPerm369 = 0; - fTempPerm370 = 0; - fTempPerm371 = 0; - fTempPerm372 = 0; - fTempPerm373 = 0; - fTempPerm374 = 0; - fTempPerm375 = 0; - fTempPerm376 = 0; - fTempPerm377 = 0; - fTempPerm378 = 0; - fTempPerm379 = 0; - fTempPerm380 = 0; - fTempPerm381 = 0; - fTempPerm382 = 0; - fTempPerm383 = 0; - fTempPerm384 = 0; - fTempPerm385 = 0; - fTempPerm386 = 0; - fTempPerm387 = 0; - fTempPerm388 = 0; - fTempPerm389 = 0; - fTempPerm390 = 0; - fTempPerm391 = 0; - fTempPerm392 = 0; - fTempPerm393 = 0; - fTempPerm394 = 0; - fTempPerm395 = 0; - fTempPerm396 = 0; - fTempPerm397 = 0; - fTempPerm398 = 0; - fTempPerm399 = 0; - fTempPerm400 = 0; - fTempPerm401 = 0; - fTempPerm402 = 0; - fTempPerm403 = 0; - fTempPerm404 = 0; - fTempPerm405 = 0; - fTempPerm406 = 0; - fTempPerm407 = 0; - fTempPerm408 = 0; - fTempPerm409 = 0; - fTempPerm410 = 0; - fTempPerm411 = 0; - fTempPerm412 = 0; - fTempPerm413 = 0; - fTempPerm414 = 0; - fTempPerm415 = 0; - fTempPerm416 = 0; - fTempPerm417 = 0; - fTempPerm418 = 0; - fTempPerm419 = 0; - fTempPerm420 = 0; - fTempPerm421 = 0; - fTempPerm422 = 0; - fTempPerm423 = 0; - fTempPerm424 = 0; - fTempPerm425 = 0; - fTempPerm426 = 0; - fTempPerm427 = 0; - fTempPerm428 = 0; - fTempPerm429 = 0; - fTempPerm430 = 0; - fTempPerm431 = 0; - fTempPerm432 = 0; - fTempPerm433 = 0; - fTempPerm434 = 0; - fTempPerm435 = 0; - fTempPerm436 = 0; - fTempPerm437 = 0; - fTempPerm438 = 0; - fTempPerm439 = 0; - fTempPerm440 = 0; - fTempPerm441 = 0; - fTempPerm442 = 0; - fTempPerm443 = 0; - fTempPerm444 = 0; - fTempPerm445 = 0; - fTempPerm446 = 0; - fTempPerm447 = 0; - fTempPerm448 = 0; - fTempPerm449 = 0; - fTempPerm450 = 0; - fTempPerm451 = 0; - fTempPerm452 = 0; - fTempPerm453 = 0; - fTempPerm454 = 0; - fTempPerm455 = 0; - fTempPerm456 = 0; - fTempPerm457 = 0; - fTempPerm458 = 0; - fTempPerm459 = 0; - fTempPerm460 = 0; - fTempPerm461 = 0; - fTempPerm462 = 0; - fTempPerm463 = 0; - fTempPerm464 = 0; - fTempPerm465 = 0; - fTempPerm466 = 0; - fTempPerm467 = 0; - fTempPerm468 = 0; - fTempPerm469 = 0; - fTempPerm470 = 0; - fTempPerm471 = 0; - fTempPerm472 = 0; - fTempPerm473 = 0; - fTempPerm474 = 0; - fTempPerm475 = 0; - fTempPerm476 = 0; - fTempPerm477 = 0; - fTempPerm478 = 0; - fTempPerm479 = 0; - fTempPerm480 = 0; - fTempPerm481 = 0; - fTempPerm482 = 0; - fTempPerm483 = 0; - fTempPerm484 = 0; - fTempPerm485 = 0; - fTempPerm486 = 0; - fTempPerm487 = 0; - fTempPerm488 = 0; - fTempPerm489 = 0; - fTempPerm490 = 0; - fTempPerm491 = 0; - fTempPerm492 = 0; - fTempPerm493 = 0; - fTempPerm494 = 0; - fTempPerm495 = 0; - fTempPerm496 = 0; - fTempPerm497 = 0; - fTempPerm498 = 0; - fTempPerm499 = 0; - fTempPerm500 = 0; - fTempPerm501 = 0; - fTempPerm502 = 0; - fTempPerm503 = 0; - fTempPerm504 = 0; - fTempPerm505 = 0; - fTempPerm506 = 0; - fTempPerm507 = 0; - fTempPerm508 = 0; - fTempPerm509 = 0; - fTempPerm510 = 0; - fTempPerm511 = 0; - fTempPerm512 = 0; - fTempPerm513 = 0; - } - virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - IOTA = 0; - for (int i=0; i<128; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<128; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<128; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<128; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOADecoderLebedev50Binaural1"); - ui_interface->openHorizontalBox("Inputs"); - ui_interface->openHorizontalBox("0"); - ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbe77630060", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("1"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbe7753eb50", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbe77536ed0", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fbe7762b4e0", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 10"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 1e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 10"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 1e+01, 0.1); - ui_interface->closeBox(); - ui_interface->openVerticalBox("Outputs"); - ui_interface->openHorizontalBox("Left"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x7fbe77492670", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("Right"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x7fbe774a3a50", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - //LoopGraphScalar - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = STRDUP(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable* ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - FAUST_EXPORT int api_version(void); -#endif - FAUST_EXPORT void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - size_t numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i = 0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp* tmp_dsp = new FAUSTCLASS; - tmp_dsp->metadata(&meta); - delete tmp_dsp; - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -#ifdef SUPERNOVA -extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } -#else -extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } -#endif - -// EOF diff --git a/source/HOAUGens/HOADecoderLebedev50Binaural2.cpp b/source/HOAUGens/HOADecoderLebedev50Binaural2.cpp deleted file mode 100644 index 8aeddec84f..0000000000 --- a/source/HOAUGens/HOADecoderLebedev50Binaural2.cpp +++ /dev/null @@ -1,4649 +0,0 @@ -//---------------------------------------------------------- -// name: "HOADecoderLebedev50Binaural2" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL)" -// copyright: "(c) Pierre Lecomte 2015" -// -// Code generated with Faust 0.12.0 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" -#endif - -#include -#include -#include -#include - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** - * DSP memory manager. - */ - -struct dsp_memory_manager { - - virtual ~dsp_memory_manager() {} - - virtual void* allocate(size_t size) = 0; - virtual void destroy(void* ptr) = 0; - -}; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the ui_interface parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** - * Global init, calls the following methods: - * - static class 'classInit': static tables initialization - * - 'instanceInit': constants and instance state initialization - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** - * Init instance state - * - * @param samplingRate - the sampling rate in Hertz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** - * Init instance constant state - * - * @param samplingRate - the sampling rate in Hertz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with successive in/out audio buffers. - * - * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation: alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { fDSP->metadata(m); } - // Beware: subclasses usually have to overload the two 'compute' methods - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __UI_H__ -#define __UI_H__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust DSP User Interface - * User Interface as expected by the buildUserInterface() method of a DSP. - * This abstract class contains only the method that the Faust compiler can - * generate to describe a DSP user interface. - ******************************************************************************/ - -struct Soundfile; - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- soundfiles - - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 - #define FAUST_EXPORT __attribute__((visibility("default"))) -#else - #define FAUST_EXPORT SC_API_EXPORT -#endif - -#ifdef WIN32 - #define STRDUP _strdup -#else - #define STRDUP strdup -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fTempPerm0; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fTempPerm1; - int IOTA; - double fVec0[128]; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; - double fTempPerm8; - double fTempPerm9; - double fTempPerm10; - double fTempPerm11; - double fTempPerm12; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fTempPerm13; - double fVec1[128]; - double fTempPerm14; - double fTempPerm15; - double fTempPerm16; - double fTempPerm17; - double fTempPerm18; - double fTempPerm19; - double fTempPerm20; - double fTempPerm21; - double fTempPerm22; - double fTempPerm23; - double fTempPerm24; - double fTempPerm25; - double fTempPerm26; - double fTempPerm27; - double fTempPerm28; - double fTempPerm29; - double fTempPerm30; - double fTempPerm31; - double fRec5[2]; - FAUSTFLOAT fbargraph2; - double fTempPerm32; - double fVec2[128]; - double fTempPerm33; - double fTempPerm34; - double fTempPerm35; - double fTempPerm36; - double fTempPerm37; - double fTempPerm38; - double fTempPerm39; - double fTempPerm40; - double fTempPerm41; - double fTempPerm42; - double fTempPerm43; - double fRec6[2]; - FAUSTFLOAT fbargraph3; - double fTempPerm44; - double fVec3[128]; - double fTempPerm45; - double fTempPerm46; - double fTempPerm47; - double fTempPerm48; - double fTempPerm49; - double fTempPerm50; - double fTempPerm51; - double fTempPerm52; - double fTempPerm53; - double fTempPerm54; - double fTempPerm55; - double fTempPerm56; - double fTempPerm57; - double fTempPerm58; - double fTempPerm59; - double fTempPerm60; - double fTempPerm61; - double fTempPerm62; - double fTempPerm63; - double fTempPerm64; - double fTempPerm65; - double fTempPerm66; - double fTempPerm67; - double fTempPerm68; - double fTempPerm69; - double fTempPerm70; - double fTempPerm71; - double fTempPerm72; - double fTempPerm73; - double fTempPerm74; - double fTempPerm75; - double fTempPerm76; - double fTempPerm77; - double fTempPerm78; - double fTempPerm79; - double fTempPerm80; - double fTempPerm81; - double fTempPerm82; - double fTempPerm83; - double fTempPerm84; - double fTempPerm85; - double fTempPerm86; - double fTempPerm87; - double fTempPerm88; - double fTempPerm89; - double fTempPerm90; - double fTempPerm91; - double fTempPerm92; - double fTempPerm93; - double fTempPerm94; - double fTempPerm95; - double fTempPerm96; - double fTempPerm97; - double fTempPerm98; - double fTempPerm99; - double fTempPerm100; - double fTempPerm101; - double fTempPerm102; - double fTempPerm103; - double fTempPerm104; - double fTempPerm105; - double fTempPerm106; - double fTempPerm107; - double fTempPerm108; - double fTempPerm109; - double fTempPerm110; - double fTempPerm111; - double fTempPerm112; - double fTempPerm113; - double fTempPerm114; - double fTempPerm115; - double fRec7[2]; - FAUSTFLOAT fbargraph4; - double fTempPerm116; - double fVec4[128]; - double fTempPerm117; - double fTempPerm118; - double fTempPerm119; - double fTempPerm120; - double fTempPerm121; - double fTempPerm122; - double fTempPerm123; - double fTempPerm124; - double fTempPerm125; - double fRec8[2]; - FAUSTFLOAT fbargraph5; - double fTempPerm126; - double fVec5[128]; - double fTempPerm127; - double fTempPerm128; - double fTempPerm129; - double fTempPerm130; - double fTempPerm131; - double fTempPerm132; - double fTempPerm133; - double fTempPerm134; - double fTempPerm135; - double fTempPerm136; - double fTempPerm137; - double fTempPerm138; - double fTempPerm139; - double fTempPerm140; - double fTempPerm141; - double fTempPerm142; - double fRec9[2]; - FAUSTFLOAT fbargraph6; - double fTempPerm143; - double fVec6[128]; - double fTempPerm144; - double fTempPerm145; - double fTempPerm146; - double fTempPerm147; - double fTempPerm148; - double fTempPerm149; - double fTempPerm150; - double fTempPerm151; - double fTempPerm152; - double fTempPerm153; - double fTempPerm154; - double fTempPerm155; - double fTempPerm156; - double fTempPerm157; - double fTempPerm158; - double fTempPerm159; - double fTempPerm160; - double fRec10[2]; - FAUSTFLOAT fbargraph7; - double fTempPerm161; - double fVec7[128]; - double fTempPerm162; - double fTempPerm163; - double fTempPerm164; - double fTempPerm165; - double fTempPerm166; - double fTempPerm167; - double fTempPerm168; - double fTempPerm169; - double fTempPerm170; - double fTempPerm171; - double fTempPerm172; - double fTempPerm173; - double fTempPerm174; - double fTempPerm175; - double fTempPerm176; - double fTempPerm177; - double fTempPerm178; - double fTempPerm179; - double fTempPerm180; - double fTempPerm181; - double fTempPerm182; - double fTempPerm183; - double fTempPerm184; - double fTempPerm185; - double fTempPerm186; - double fTempPerm187; - double fTempPerm188; - double fTempPerm189; - double fTempPerm190; - double fTempPerm191; - double fTempPerm192; - double fTempPerm193; - double fTempPerm194; - double fTempPerm195; - double fTempPerm196; - double fTempPerm197; - double fTempPerm198; - double fTempPerm199; - double fTempPerm200; - double fTempPerm201; - double fTempPerm202; - double fTempPerm203; - double fTempPerm204; - double fTempPerm205; - double fTempPerm206; - double fTempPerm207; - double fTempPerm208; - double fTempPerm209; - double fTempPerm210; - double fTempPerm211; - double fTempPerm212; - double fTempPerm213; - double fTempPerm214; - double fTempPerm215; - double fTempPerm216; - double fTempPerm217; - double fTempPerm218; - double fTempPerm219; - double fTempPerm220; - double fTempPerm221; - double fTempPerm222; - double fTempPerm223; - double fTempPerm224; - double fTempPerm225; - double fTempPerm226; - double fTempPerm227; - double fTempPerm228; - double fTempPerm229; - double fTempPerm230; - double fTempPerm231; - double fTempPerm232; - double fTempPerm233; - double fTempPerm234; - double fTempPerm235; - double fTempPerm236; - double fTempPerm237; - double fTempPerm238; - double fTempPerm239; - double fTempPerm240; - double fTempPerm241; - double fTempPerm242; - double fTempPerm243; - double fTempPerm244; - double fTempPerm245; - double fTempPerm246; - double fTempPerm247; - double fTempPerm248; - double fTempPerm249; - double fTempPerm250; - double fTempPerm251; - double fTempPerm252; - double fTempPerm253; - double fTempPerm254; - double fTempPerm255; - double fTempPerm256; - double fTempPerm257; - double fTempPerm258; - double fTempPerm259; - double fTempPerm260; - double fTempPerm261; - double fTempPerm262; - double fTempPerm263; - double fTempPerm264; - double fTempPerm265; - double fTempPerm266; - double fTempPerm267; - double fTempPerm268; - double fTempPerm269; - double fTempPerm270; - double fTempPerm271; - double fTempPerm272; - double fTempPerm273; - double fTempPerm274; - double fTempPerm275; - double fTempPerm276; - double fTempPerm277; - double fTempPerm278; - double fTempPerm279; - double fTempPerm280; - double fTempPerm281; - double fTempPerm282; - double fTempPerm283; - double fTempPerm284; - double fTempPerm285; - double fTempPerm286; - double fTempPerm287; - double fTempPerm288; - double fTempPerm289; - double fTempPerm290; - double fTempPerm291; - double fTempPerm292; - double fTempPerm293; - double fTempPerm294; - double fTempPerm295; - double fTempPerm296; - double fTempPerm297; - double fTempPerm298; - double fTempPerm299; - double fTempPerm300; - double fTempPerm301; - double fTempPerm302; - double fTempPerm303; - double fTempPerm304; - double fTempPerm305; - double fTempPerm306; - double fTempPerm307; - double fRec11[2]; - FAUSTFLOAT fbargraph8; - double fTempPerm308; - double fVec8[128]; - double fTempPerm309; - double fTempPerm310; - double fTempPerm311; - double fTempPerm312; - double fTempPerm313; - double fTempPerm314; - double fTempPerm315; - double fTempPerm316; - double fTempPerm317; - double fTempPerm318; - double fTempPerm319; - double fTempPerm320; - double fTempPerm321; - double fTempPerm322; - double fTempPerm323; - double fTempPerm324; - double fTempPerm325; - double fTempPerm326; - double fTempPerm327; - double fTempPerm328; - double fTempPerm329; - double fTempPerm330; - double fTempPerm331; - double fTempPerm332; - double fTempPerm333; - double fTempPerm334; - double fTempPerm335; - double fTempPerm336; - double fTempPerm337; - double fTempPerm338; - double fTempPerm339; - double fTempPerm340; - double fTempPerm341; - double fTempPerm342; - double fTempPerm343; - double fTempPerm344; - double fTempPerm345; - double fTempPerm346; - double fTempPerm347; - double fTempPerm348; - double fTempPerm349; - double fTempPerm350; - double fTempPerm351; - double fTempPerm352; - double fTempPerm353; - double fTempPerm354; - double fTempPerm355; - double fTempPerm356; - double fTempPerm357; - double fTempPerm358; - double fTempPerm359; - double fTempPerm360; - double fTempPerm361; - double fTempPerm362; - double fTempPerm363; - double fTempPerm364; - double fTempPerm365; - double fTempPerm366; - double fTempPerm367; - double fTempPerm368; - double fTempPerm369; - double fTempPerm370; - double fTempPerm371; - double fTempPerm372; - double fTempPerm373; - double fTempPerm374; - double fTempPerm375; - double fTempPerm376; - double fTempPerm377; - double fTempPerm378; - double fTempPerm379; - double fTempPerm380; - double fTempPerm381; - double fTempPerm382; - double fTempPerm383; - double fTempPerm384; - double fTempPerm385; - double fTempPerm386; - double fTempPerm387; - double fTempPerm388; - double fTempPerm389; - double fTempPerm390; - double fTempPerm391; - double fTempPerm392; - double fTempPerm393; - double fTempPerm394; - double fTempPerm395; - double fTempPerm396; - double fTempPerm397; - double fTempPerm398; - double fTempPerm399; - double fTempPerm400; - double fTempPerm401; - double fTempPerm402; - double fTempPerm403; - double fTempPerm404; - double fTempPerm405; - double fTempPerm406; - double fTempPerm407; - double fTempPerm408; - double fTempPerm409; - double fTempPerm410; - double fTempPerm411; - double fTempPerm412; - double fTempPerm413; - double fTempPerm414; - double fTempPerm415; - double fTempPerm416; - double fTempPerm417; - double fTempPerm418; - double fTempPerm419; - double fTempPerm420; - double fTempPerm421; - double fTempPerm422; - double fTempPerm423; - double fTempPerm424; - double fTempPerm425; - double fTempPerm426; - double fTempPerm427; - double fTempPerm428; - double fTempPerm429; - double fTempPerm430; - double fTempPerm431; - double fTempPerm432; - double fTempPerm433; - double fTempPerm434; - double fTempPerm435; - double fTempPerm436; - double fTempPerm437; - double fTempPerm438; - double fTempPerm439; - double fTempPerm440; - double fTempPerm441; - double fTempPerm442; - double fTempPerm443; - double fTempPerm444; - double fTempPerm445; - double fTempPerm446; - double fTempPerm447; - double fTempPerm448; - double fTempPerm449; - double fTempPerm450; - double fTempPerm451; - double fTempPerm452; - double fTempPerm453; - double fTempPerm454; - double fTempPerm455; - double fTempPerm456; - double fTempPerm457; - double fTempPerm458; - double fTempPerm459; - double fTempPerm460; - double fTempPerm461; - double fTempPerm462; - double fTempPerm463; - double fTempPerm464; - double fTempPerm465; - double fTempPerm466; - double fTempPerm467; - double fTempPerm468; - double fTempPerm469; - double fTempPerm470; - double fTempPerm471; - double fTempPerm472; - double fTempPerm473; - double fTempPerm474; - double fTempPerm475; - double fTempPerm476; - double fTempPerm477; - double fTempPerm478; - double fTempPerm479; - double fTempPerm480; - double fTempPerm481; - double fTempPerm482; - double fTempPerm483; - double fTempPerm484; - double fTempPerm485; - double fTempPerm486; - double fTempPerm487; - double fTempPerm488; - double fTempPerm489; - double fTempPerm490; - double fTempPerm491; - double fTempPerm492; - double fTempPerm493; - double fTempPerm494; - double fTempPerm495; - double fTempPerm496; - double fTempPerm497; - double fTempPerm498; - double fTempPerm499; - double fTempPerm500; - double fTempPerm501; - double fTempPerm502; - double fTempPerm503; - double fTempPerm504; - double fTempPerm505; - double fTempPerm506; - double fTempPerm507; - double fTempPerm508; - double fTempPerm509; - double fTempPerm510; - double fTempPerm511; - double fTempPerm512; - double fTempPerm513; - double fTempPerm514; - double fTempPerm515; - double fTempPerm516; - double fTempPerm517; - double fTempPerm518; - double fTempPerm519; - double fTempPerm520; - double fTempPerm521; - double fTempPerm522; - double fTempPerm523; - double fTempPerm524; - double fTempPerm525; - double fTempPerm526; - double fTempPerm527; - double fTempPerm528; - double fTempPerm529; - double fTempPerm530; - double fTempPerm531; - double fTempPerm532; - double fTempPerm533; - double fTempPerm534; - double fTempPerm535; - double fTempPerm536; - double fTempPerm537; - double fTempPerm538; - double fTempPerm539; - double fTempPerm540; - double fTempPerm541; - double fTempPerm542; - double fTempPerm543; - double fTempPerm544; - double fTempPerm545; - double fTempPerm546; - double fTempPerm547; - double fTempPerm548; - double fTempPerm549; - double fTempPerm550; - double fTempPerm551; - double fTempPerm552; - double fTempPerm553; - double fTempPerm554; - double fTempPerm555; - double fTempPerm556; - double fTempPerm557; - double fTempPerm558; - double fTempPerm559; - double fTempPerm560; - double fTempPerm561; - double fTempPerm562; - double fTempPerm563; - double fTempPerm564; - double fTempPerm565; - double fTempPerm566; - double fTempPerm567; - double fTempPerm568; - double fTempPerm569; - double fTempPerm570; - double fTempPerm571; - double fTempPerm572; - double fTempPerm573; - double fTempPerm574; - double fTempPerm575; - double fTempPerm576; - double fTempPerm577; - double fTempPerm578; - double fTempPerm579; - double fTempPerm580; - double fTempPerm581; - double fTempPerm582; - double fTempPerm583; - double fTempPerm584; - double fTempPerm585; - double fTempPerm586; - double fTempPerm587; - double fTempPerm588; - double fTempPerm589; - double fTempPerm590; - double fTempPerm591; - double fTempPerm592; - double fTempPerm593; - double fTempPerm594; - double fTempPerm595; - double fTempPerm596; - double fTempPerm597; - double fTempPerm598; - double fTempPerm599; - double fTempPerm600; - double fTempPerm601; - double fTempPerm602; - double fTempPerm603; - double fTempPerm604; - double fTempPerm605; - double fTempPerm606; - double fTempPerm607; - double fTempPerm608; - double fTempPerm609; - double fTempPerm610; - double fTempPerm611; - double fTempPerm612; - double fTempPerm613; - double fTempPerm614; - double fTempPerm615; - double fTempPerm616; - double fTempPerm617; - double fTempPerm618; - double fTempPerm619; - double fTempPerm620; - double fTempPerm621; - double fTempPerm622; - double fTempPerm623; - double fTempPerm624; - double fTempPerm625; - double fTempPerm626; - double fTempPerm627; - double fTempPerm628; - double fTempPerm629; - double fTempPerm630; - double fTempPerm631; - double fTempPerm632; - double fTempPerm633; - double fTempPerm634; - double fTempPerm635; - double fTempPerm636; - double fTempPerm637; - double fTempPerm638; - double fTempPerm639; - double fTempPerm640; - double fTempPerm641; - double fTempPerm642; - double fTempPerm643; - double fTempPerm644; - double fTempPerm645; - double fTempPerm646; - double fTempPerm647; - double fTempPerm648; - double fTempPerm649; - double fTempPerm650; - double fTempPerm651; - double fTempPerm652; - double fTempPerm653; - double fTempPerm654; - double fTempPerm655; - double fTempPerm656; - double fTempPerm657; - double fTempPerm658; - double fTempPerm659; - double fTempPerm660; - double fTempPerm661; - double fTempPerm662; - double fTempPerm663; - double fTempPerm664; - double fTempPerm665; - double fTempPerm666; - double fTempPerm667; - double fTempPerm668; - double fTempPerm669; - double fTempPerm670; - double fTempPerm671; - double fTempPerm672; - double fTempPerm673; - double fTempPerm674; - double fTempPerm675; - double fTempPerm676; - double fTempPerm677; - double fTempPerm678; - double fTempPerm679; - double fTempPerm680; - double fTempPerm681; - double fTempPerm682; - double fTempPerm683; - double fTempPerm684; - double fTempPerm685; - double fTempPerm686; - double fTempPerm687; - double fTempPerm688; - double fTempPerm689; - double fTempPerm690; - double fTempPerm691; - double fTempPerm692; - double fTempPerm693; - double fTempPerm694; - double fTempPerm695; - double fTempPerm696; - double fTempPerm697; - double fTempPerm698; - double fTempPerm699; - double fTempPerm700; - double fTempPerm701; - double fTempPerm702; - double fTempPerm703; - double fTempPerm704; - double fTempPerm705; - double fTempPerm706; - double fTempPerm707; - double fTempPerm708; - double fTempPerm709; - double fTempPerm710; - double fTempPerm711; - double fTempPerm712; - double fTempPerm713; - double fTempPerm714; - double fTempPerm715; - double fTempPerm716; - double fTempPerm717; - double fTempPerm718; - double fTempPerm719; - double fTempPerm720; - double fTempPerm721; - double fTempPerm722; - double fTempPerm723; - double fTempPerm724; - double fTempPerm725; - double fTempPerm726; - double fTempPerm727; - double fTempPerm728; - double fTempPerm729; - double fTempPerm730; - double fTempPerm731; - double fTempPerm732; - double fTempPerm733; - double fTempPerm734; - double fTempPerm735; - double fTempPerm736; - double fTempPerm737; - double fTempPerm738; - double fTempPerm739; - double fTempPerm740; - double fTempPerm741; - double fTempPerm742; - double fTempPerm743; - double fTempPerm744; - double fTempPerm745; - double fTempPerm746; - double fTempPerm747; - double fTempPerm748; - double fTempPerm749; - double fTempPerm750; - double fTempPerm751; - double fTempPerm752; - double fTempPerm753; - double fTempPerm754; - double fTempPerm755; - double fTempPerm756; - double fTempPerm757; - double fTempPerm758; - double fTempPerm759; - double fTempPerm760; - double fTempPerm761; - double fTempPerm762; - double fTempPerm763; - double fTempPerm764; - double fTempPerm765; - double fTempPerm766; - double fTempPerm767; - double fTempPerm768; - double fTempPerm769; - double fTempPerm770; - double fTempPerm771; - double fTempPerm772; - double fTempPerm773; - double fTempPerm774; - double fTempPerm775; - double fTempPerm776; - double fTempPerm777; - double fTempPerm778; - double fTempPerm779; - double fTempPerm780; - double fTempPerm781; - double fTempPerm782; - double fTempPerm783; - double fTempPerm784; - double fTempPerm785; - double fTempPerm786; - double fTempPerm787; - double fTempPerm788; - double fTempPerm789; - double fTempPerm790; - double fTempPerm791; - double fTempPerm792; - double fTempPerm793; - double fTempPerm794; - double fTempPerm795; - double fTempPerm796; - double fTempPerm797; - double fTempPerm798; - double fTempPerm799; - double fTempPerm800; - double fTempPerm801; - double fTempPerm802; - double fTempPerm803; - double fTempPerm804; - double fTempPerm805; - double fTempPerm806; - double fTempPerm807; - double fTempPerm808; - double fTempPerm809; - double fTempPerm810; - double fTempPerm811; - double fTempPerm812; - double fTempPerm813; - double fTempPerm814; - double fTempPerm815; - double fTempPerm816; - double fTempPerm817; - double fTempPerm818; - double fTempPerm819; - double fTempPerm820; - double fTempPerm821; - double fTempPerm822; - double fTempPerm823; - double fTempPerm824; - double fTempPerm825; - double fTempPerm826; - double fTempPerm827; - double fTempPerm828; - double fTempPerm829; - double fTempPerm830; - double fTempPerm831; - double fTempPerm832; - double fTempPerm833; - double fTempPerm834; - double fTempPerm835; - double fTempPerm836; - double fTempPerm837; - double fTempPerm838; - double fTempPerm839; - double fTempPerm840; - double fTempPerm841; - double fTempPerm842; - double fTempPerm843; - double fTempPerm844; - double fTempPerm845; - double fTempPerm846; - double fTempPerm847; - double fTempPerm848; - double fTempPerm849; - double fTempPerm850; - double fTempPerm851; - double fTempPerm852; - double fTempPerm853; - double fTempPerm854; - double fTempPerm855; - double fTempPerm856; - double fTempPerm857; - double fTempPerm858; - double fTempPerm859; - double fTempPerm860; - double fTempPerm861; - double fTempPerm862; - double fTempPerm863; - double fTempPerm864; - double fTempPerm865; - double fTempPerm866; - double fTempPerm867; - double fTempPerm868; - double fTempPerm869; - double fTempPerm870; - double fTempPerm871; - double fTempPerm872; - double fTempPerm873; - double fTempPerm874; - double fTempPerm875; - double fTempPerm876; - double fTempPerm877; - double fTempPerm878; - double fTempPerm879; - double fTempPerm880; - double fTempPerm881; - double fTempPerm882; - double fTempPerm883; - double fTempPerm884; - double fTempPerm885; - double fTempPerm886; - double fTempPerm887; - double fTempPerm888; - double fTempPerm889; - double fTempPerm890; - double fTempPerm891; - double fTempPerm892; - double fTempPerm893; - double fTempPerm894; - double fTempPerm895; - double fTempPerm896; - double fTempPerm897; - double fTempPerm898; - double fTempPerm899; - double fTempPerm900; - double fTempPerm901; - double fTempPerm902; - double fTempPerm903; - double fTempPerm904; - double fTempPerm905; - double fTempPerm906; - double fTempPerm907; - double fTempPerm908; - double fTempPerm909; - double fTempPerm910; - double fTempPerm911; - double fTempPerm912; - double fTempPerm913; - double fTempPerm914; - double fTempPerm915; - double fTempPerm916; - double fTempPerm917; - double fTempPerm918; - double fTempPerm919; - double fTempPerm920; - double fTempPerm921; - double fTempPerm922; - double fTempPerm923; - double fTempPerm924; - double fTempPerm925; - double fTempPerm926; - double fTempPerm927; - double fTempPerm928; - double fTempPerm929; - double fTempPerm930; - double fTempPerm931; - double fTempPerm932; - double fTempPerm933; - double fTempPerm934; - double fTempPerm935; - double fTempPerm936; - double fTempPerm937; - double fTempPerm938; - double fTempPerm939; - double fTempPerm940; - double fTempPerm941; - double fTempPerm942; - double fTempPerm943; - double fTempPerm944; - double fTempPerm945; - double fTempPerm946; - double fTempPerm947; - double fTempPerm948; - double fTempPerm949; - double fTempPerm950; - double fTempPerm951; - double fTempPerm952; - double fTempPerm953; - double fTempPerm954; - double fTempPerm955; - double fTempPerm956; - double fTempPerm957; - double fTempPerm958; - double fTempPerm959; - double fTempPerm960; - double fTempPerm961; - double fTempPerm962; - double fTempPerm963; - double fTempPerm964; - double fTempPerm965; - double fTempPerm966; - double fTempPerm967; - double fTempPerm968; - double fTempPerm969; - double fTempPerm970; - double fTempPerm971; - double fTempPerm972; - double fTempPerm973; - double fTempPerm974; - double fTempPerm975; - double fTempPerm976; - double fTempPerm977; - double fTempPerm978; - double fTempPerm979; - double fTempPerm980; - double fTempPerm981; - double fTempPerm982; - double fTempPerm983; - double fTempPerm984; - double fTempPerm985; - double fTempPerm986; - double fTempPerm987; - double fTempPerm988; - double fTempPerm989; - double fTempPerm990; - double fTempPerm991; - double fTempPerm992; - double fTempPerm993; - double fTempPerm994; - double fTempPerm995; - double fTempPerm996; - double fTempPerm997; - double fTempPerm998; - double fTempPerm999; - double fTempPerm1000; - double fTempPerm1001; - double fTempPerm1002; - double fTempPerm1003; - double fTempPerm1004; - double fTempPerm1005; - double fTempPerm1006; - double fTempPerm1007; - double fTempPerm1008; - double fTempPerm1009; - double fTempPerm1010; - double fTempPerm1011; - double fTempPerm1012; - double fTempPerm1013; - double fTempPerm1014; - double fTempPerm1015; - double fTempPerm1016; - double fTempPerm1017; - double fTempPerm1018; - double fTempPerm1019; - double fTempPerm1020; - double fTempPerm1021; - double fTempPerm1022; - double fTempPerm1023; - double fTempPerm1024; - double fTempPerm1025; - double fTempPerm1026; - double fTempPerm1027; - double fTempPerm1028; - double fTempPerm1029; - double fTempPerm1030; - double fTempPerm1031; - double fTempPerm1032; - double fTempPerm1033; - double fTempPerm1034; - double fTempPerm1035; - double fTempPerm1036; - double fTempPerm1037; - double fTempPerm1038; - double fTempPerm1039; - double fTempPerm1040; - double fTempPerm1041; - double fTempPerm1042; - double fTempPerm1043; - double fTempPerm1044; - double fTempPerm1045; - double fTempPerm1046; - double fTempPerm1047; - double fTempPerm1048; - double fTempPerm1049; - double fTempPerm1050; - double fTempPerm1051; - double fTempPerm1052; - double fTempPerm1053; - double fTempPerm1054; - double fTempPerm1055; - double fTempPerm1056; - double fTempPerm1057; - double fTempPerm1058; - double fTempPerm1059; - double fTempPerm1060; - double fTempPerm1061; - double fTempPerm1062; - double fTempPerm1063; - double fTempPerm1064; - double fTempPerm1065; - double fTempPerm1066; - double fTempPerm1067; - double fTempPerm1068; - double fTempPerm1069; - double fTempPerm1070; - double fTempPerm1071; - double fTempPerm1072; - double fTempPerm1073; - double fTempPerm1074; - double fTempPerm1075; - double fTempPerm1076; - double fTempPerm1077; - double fTempPerm1078; - double fTempPerm1079; - double fTempPerm1080; - double fTempPerm1081; - double fTempPerm1082; - double fTempPerm1083; - double fTempPerm1084; - double fTempPerm1085; - double fTempPerm1086; - double fTempPerm1087; - double fTempPerm1088; - double fTempPerm1089; - double fTempPerm1090; - double fTempPerm1091; - double fTempPerm1092; - double fTempPerm1093; - double fTempPerm1094; - double fTempPerm1095; - double fTempPerm1096; - double fTempPerm1097; - double fTempPerm1098; - double fTempPerm1099; - double fTempPerm1100; - double fTempPerm1101; - double fTempPerm1102; - double fTempPerm1103; - double fTempPerm1104; - double fTempPerm1105; - double fTempPerm1106; - double fTempPerm1107; - double fTempPerm1108; - double fTempPerm1109; - double fTempPerm1110; - double fTempPerm1111; - double fTempPerm1112; - double fTempPerm1113; - double fTempPerm1114; - double fTempPerm1115; - double fTempPerm1116; - double fTempPerm1117; - double fTempPerm1118; - double fTempPerm1119; - double fTempPerm1120; - double fTempPerm1121; - double fTempPerm1122; - double fTempPerm1123; - double fTempPerm1124; - double fTempPerm1125; - double fTempPerm1126; - double fTempPerm1127; - double fTempPerm1128; - double fTempPerm1129; - double fTempPerm1130; - double fTempPerm1131; - double fTempPerm1132; - double fTempPerm1133; - double fTempPerm1134; - double fTempPerm1135; - double fTempPerm1136; - double fTempPerm1137; - double fTempPerm1138; - double fTempPerm1139; - double fTempPerm1140; - double fTempPerm1141; - double fTempPerm1142; - double fTempPerm1143; - double fTempPerm1144; - double fTempPerm1145; - double fTempPerm1146; - double fTempPerm1147; - double fTempPerm1148; - double fTempPerm1149; - double fTempPerm1150; - double fTempPerm1151; - double fTempPerm1152; - double fRec0[2]; - FAUSTFLOAT fbargraph9; - double fTempPerm1153; - double fRec12[2]; - FAUSTFLOAT fbargraph10; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("gui.lib/name", "GUI Library"); - m->declare("gui.lib/version", "1.0"); - m->declare("gui.lib/author", "Pierre Lecomte"); - m->declare("gui.lib/license", "GPL"); - m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("name", "HOADecoderLebedev50Binaural2"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL)"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 2; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; - fTempPerm8 = 0; - fTempPerm9 = 0; - fTempPerm10 = 0; - fTempPerm11 = 0; - fTempPerm12 = 0; - fTempPerm13 = 0; - fTempPerm14 = 0; - fTempPerm15 = 0; - fTempPerm16 = 0; - fTempPerm17 = 0; - fTempPerm18 = 0; - fTempPerm19 = 0; - fTempPerm20 = 0; - fTempPerm21 = 0; - fTempPerm22 = 0; - fTempPerm23 = 0; - fTempPerm24 = 0; - fTempPerm25 = 0; - fTempPerm26 = 0; - fTempPerm27 = 0; - fTempPerm28 = 0; - fTempPerm29 = 0; - fTempPerm30 = 0; - fTempPerm31 = 0; - fTempPerm32 = 0; - fTempPerm33 = 0; - fTempPerm34 = 0; - fTempPerm35 = 0; - fTempPerm36 = 0; - fTempPerm37 = 0; - fTempPerm38 = 0; - fTempPerm39 = 0; - fTempPerm40 = 0; - fTempPerm41 = 0; - fTempPerm42 = 0; - fTempPerm43 = 0; - fTempPerm44 = 0; - fTempPerm45 = 0; - fTempPerm46 = 0; - fTempPerm47 = 0; - fTempPerm48 = 0; - fTempPerm49 = 0; - fTempPerm50 = 0; - fTempPerm51 = 0; - fTempPerm52 = 0; - fTempPerm53 = 0; - fTempPerm54 = 0; - fTempPerm55 = 0; - fTempPerm56 = 0; - fTempPerm57 = 0; - fTempPerm58 = 0; - fTempPerm59 = 0; - fTempPerm60 = 0; - fTempPerm61 = 0; - fTempPerm62 = 0; - fTempPerm63 = 0; - fTempPerm64 = 0; - fTempPerm65 = 0; - fTempPerm66 = 0; - fTempPerm67 = 0; - fTempPerm68 = 0; - fTempPerm69 = 0; - fTempPerm70 = 0; - fTempPerm71 = 0; - fTempPerm72 = 0; - fTempPerm73 = 0; - fTempPerm74 = 0; - fTempPerm75 = 0; - fTempPerm76 = 0; - fTempPerm77 = 0; - fTempPerm78 = 0; - fTempPerm79 = 0; - fTempPerm80 = 0; - fTempPerm81 = 0; - fTempPerm82 = 0; - fTempPerm83 = 0; - fTempPerm84 = 0; - fTempPerm85 = 0; - fTempPerm86 = 0; - fTempPerm87 = 0; - fTempPerm88 = 0; - fTempPerm89 = 0; - fTempPerm90 = 0; - fTempPerm91 = 0; - fTempPerm92 = 0; - fTempPerm93 = 0; - fTempPerm94 = 0; - fTempPerm95 = 0; - fTempPerm96 = 0; - fTempPerm97 = 0; - fTempPerm98 = 0; - fTempPerm99 = 0; - fTempPerm100 = 0; - fTempPerm101 = 0; - fTempPerm102 = 0; - fTempPerm103 = 0; - fTempPerm104 = 0; - fTempPerm105 = 0; - fTempPerm106 = 0; - fTempPerm107 = 0; - fTempPerm108 = 0; - fTempPerm109 = 0; - fTempPerm110 = 0; - fTempPerm111 = 0; - fTempPerm112 = 0; - fTempPerm113 = 0; - fTempPerm114 = 0; - fTempPerm115 = 0; - fTempPerm116 = 0; - fTempPerm117 = 0; - fTempPerm118 = 0; - fTempPerm119 = 0; - fTempPerm120 = 0; - fTempPerm121 = 0; - fTempPerm122 = 0; - fTempPerm123 = 0; - fTempPerm124 = 0; - fTempPerm125 = 0; - fTempPerm126 = 0; - fTempPerm127 = 0; - fTempPerm128 = 0; - fTempPerm129 = 0; - fTempPerm130 = 0; - fTempPerm131 = 0; - fTempPerm132 = 0; - fTempPerm133 = 0; - fTempPerm134 = 0; - fTempPerm135 = 0; - fTempPerm136 = 0; - fTempPerm137 = 0; - fTempPerm138 = 0; - fTempPerm139 = 0; - fTempPerm140 = 0; - fTempPerm141 = 0; - fTempPerm142 = 0; - fTempPerm143 = 0; - fTempPerm144 = 0; - fTempPerm145 = 0; - fTempPerm146 = 0; - fTempPerm147 = 0; - fTempPerm148 = 0; - fTempPerm149 = 0; - fTempPerm150 = 0; - fTempPerm151 = 0; - fTempPerm152 = 0; - fTempPerm153 = 0; - fTempPerm154 = 0; - fTempPerm155 = 0; - fTempPerm156 = 0; - fTempPerm157 = 0; - fTempPerm158 = 0; - fTempPerm159 = 0; - fTempPerm160 = 0; - fTempPerm161 = 0; - fTempPerm162 = 0; - fTempPerm163 = 0; - fTempPerm164 = 0; - fTempPerm165 = 0; - fTempPerm166 = 0; - fTempPerm167 = 0; - fTempPerm168 = 0; - fTempPerm169 = 0; - fTempPerm170 = 0; - fTempPerm171 = 0; - fTempPerm172 = 0; - fTempPerm173 = 0; - fTempPerm174 = 0; - fTempPerm175 = 0; - fTempPerm176 = 0; - fTempPerm177 = 0; - fTempPerm178 = 0; - fTempPerm179 = 0; - fTempPerm180 = 0; - fTempPerm181 = 0; - fTempPerm182 = 0; - fTempPerm183 = 0; - fTempPerm184 = 0; - fTempPerm185 = 0; - fTempPerm186 = 0; - fTempPerm187 = 0; - fTempPerm188 = 0; - fTempPerm189 = 0; - fTempPerm190 = 0; - fTempPerm191 = 0; - fTempPerm192 = 0; - fTempPerm193 = 0; - fTempPerm194 = 0; - fTempPerm195 = 0; - fTempPerm196 = 0; - fTempPerm197 = 0; - fTempPerm198 = 0; - fTempPerm199 = 0; - fTempPerm200 = 0; - fTempPerm201 = 0; - fTempPerm202 = 0; - fTempPerm203 = 0; - fTempPerm204 = 0; - fTempPerm205 = 0; - fTempPerm206 = 0; - fTempPerm207 = 0; - fTempPerm208 = 0; - fTempPerm209 = 0; - fTempPerm210 = 0; - fTempPerm211 = 0; - fTempPerm212 = 0; - fTempPerm213 = 0; - fTempPerm214 = 0; - fTempPerm215 = 0; - fTempPerm216 = 0; - fTempPerm217 = 0; - fTempPerm218 = 0; - fTempPerm219 = 0; - fTempPerm220 = 0; - fTempPerm221 = 0; - fTempPerm222 = 0; - fTempPerm223 = 0; - fTempPerm224 = 0; - fTempPerm225 = 0; - fTempPerm226 = 0; - fTempPerm227 = 0; - fTempPerm228 = 0; - fTempPerm229 = 0; - fTempPerm230 = 0; - fTempPerm231 = 0; - fTempPerm232 = 0; - fTempPerm233 = 0; - fTempPerm234 = 0; - fTempPerm235 = 0; - fTempPerm236 = 0; - fTempPerm237 = 0; - fTempPerm238 = 0; - fTempPerm239 = 0; - fTempPerm240 = 0; - fTempPerm241 = 0; - fTempPerm242 = 0; - fTempPerm243 = 0; - fTempPerm244 = 0; - fTempPerm245 = 0; - fTempPerm246 = 0; - fTempPerm247 = 0; - fTempPerm248 = 0; - fTempPerm249 = 0; - fTempPerm250 = 0; - fTempPerm251 = 0; - fTempPerm252 = 0; - fTempPerm253 = 0; - fTempPerm254 = 0; - fTempPerm255 = 0; - fTempPerm256 = 0; - fTempPerm257 = 0; - fTempPerm258 = 0; - fTempPerm259 = 0; - fTempPerm260 = 0; - fTempPerm261 = 0; - fTempPerm262 = 0; - fTempPerm263 = 0; - fTempPerm264 = 0; - fTempPerm265 = 0; - fTempPerm266 = 0; - fTempPerm267 = 0; - fTempPerm268 = 0; - fTempPerm269 = 0; - fTempPerm270 = 0; - fTempPerm271 = 0; - fTempPerm272 = 0; - fTempPerm273 = 0; - fTempPerm274 = 0; - fTempPerm275 = 0; - fTempPerm276 = 0; - fTempPerm277 = 0; - fTempPerm278 = 0; - fTempPerm279 = 0; - fTempPerm280 = 0; - fTempPerm281 = 0; - fTempPerm282 = 0; - fTempPerm283 = 0; - fTempPerm284 = 0; - fTempPerm285 = 0; - fTempPerm286 = 0; - fTempPerm287 = 0; - fTempPerm288 = 0; - fTempPerm289 = 0; - fTempPerm290 = 0; - fTempPerm291 = 0; - fTempPerm292 = 0; - fTempPerm293 = 0; - fTempPerm294 = 0; - fTempPerm295 = 0; - fTempPerm296 = 0; - fTempPerm297 = 0; - fTempPerm298 = 0; - fTempPerm299 = 0; - fTempPerm300 = 0; - fTempPerm301 = 0; - fTempPerm302 = 0; - fTempPerm303 = 0; - fTempPerm304 = 0; - fTempPerm305 = 0; - fTempPerm306 = 0; - fTempPerm307 = 0; - fTempPerm308 = 0; - fTempPerm309 = 0; - fTempPerm310 = 0; - fTempPerm311 = 0; - fTempPerm312 = 0; - fTempPerm313 = 0; - fTempPerm314 = 0; - fTempPerm315 = 0; - fTempPerm316 = 0; - fTempPerm317 = 0; - fTempPerm318 = 0; - fTempPerm319 = 0; - fTempPerm320 = 0; - fTempPerm321 = 0; - fTempPerm322 = 0; - fTempPerm323 = 0; - fTempPerm324 = 0; - fTempPerm325 = 0; - fTempPerm326 = 0; - fTempPerm327 = 0; - fTempPerm328 = 0; - fTempPerm329 = 0; - fTempPerm330 = 0; - fTempPerm331 = 0; - fTempPerm332 = 0; - fTempPerm333 = 0; - fTempPerm334 = 0; - fTempPerm335 = 0; - fTempPerm336 = 0; - fTempPerm337 = 0; - fTempPerm338 = 0; - fTempPerm339 = 0; - fTempPerm340 = 0; - fTempPerm341 = 0; - fTempPerm342 = 0; - fTempPerm343 = 0; - fTempPerm344 = 0; - fTempPerm345 = 0; - fTempPerm346 = 0; - fTempPerm347 = 0; - fTempPerm348 = 0; - fTempPerm349 = 0; - fTempPerm350 = 0; - fTempPerm351 = 0; - fTempPerm352 = 0; - fTempPerm353 = 0; - fTempPerm354 = 0; - fTempPerm355 = 0; - fTempPerm356 = 0; - fTempPerm357 = 0; - fTempPerm358 = 0; - fTempPerm359 = 0; - fTempPerm360 = 0; - fTempPerm361 = 0; - fTempPerm362 = 0; - fTempPerm363 = 0; - fTempPerm364 = 0; - fTempPerm365 = 0; - fTempPerm366 = 0; - fTempPerm367 = 0; - fTempPerm368 = 0; - fTempPerm369 = 0; - fTempPerm370 = 0; - fTempPerm371 = 0; - fTempPerm372 = 0; - fTempPerm373 = 0; - fTempPerm374 = 0; - fTempPerm375 = 0; - fTempPerm376 = 0; - fTempPerm377 = 0; - fTempPerm378 = 0; - fTempPerm379 = 0; - fTempPerm380 = 0; - fTempPerm381 = 0; - fTempPerm382 = 0; - fTempPerm383 = 0; - fTempPerm384 = 0; - fTempPerm385 = 0; - fTempPerm386 = 0; - fTempPerm387 = 0; - fTempPerm388 = 0; - fTempPerm389 = 0; - fTempPerm390 = 0; - fTempPerm391 = 0; - fTempPerm392 = 0; - fTempPerm393 = 0; - fTempPerm394 = 0; - fTempPerm395 = 0; - fTempPerm396 = 0; - fTempPerm397 = 0; - fTempPerm398 = 0; - fTempPerm399 = 0; - fTempPerm400 = 0; - fTempPerm401 = 0; - fTempPerm402 = 0; - fTempPerm403 = 0; - fTempPerm404 = 0; - fTempPerm405 = 0; - fTempPerm406 = 0; - fTempPerm407 = 0; - fTempPerm408 = 0; - fTempPerm409 = 0; - fTempPerm410 = 0; - fTempPerm411 = 0; - fTempPerm412 = 0; - fTempPerm413 = 0; - fTempPerm414 = 0; - fTempPerm415 = 0; - fTempPerm416 = 0; - fTempPerm417 = 0; - fTempPerm418 = 0; - fTempPerm419 = 0; - fTempPerm420 = 0; - fTempPerm421 = 0; - fTempPerm422 = 0; - fTempPerm423 = 0; - fTempPerm424 = 0; - fTempPerm425 = 0; - fTempPerm426 = 0; - fTempPerm427 = 0; - fTempPerm428 = 0; - fTempPerm429 = 0; - fTempPerm430 = 0; - fTempPerm431 = 0; - fTempPerm432 = 0; - fTempPerm433 = 0; - fTempPerm434 = 0; - fTempPerm435 = 0; - fTempPerm436 = 0; - fTempPerm437 = 0; - fTempPerm438 = 0; - fTempPerm439 = 0; - fTempPerm440 = 0; - fTempPerm441 = 0; - fTempPerm442 = 0; - fTempPerm443 = 0; - fTempPerm444 = 0; - fTempPerm445 = 0; - fTempPerm446 = 0; - fTempPerm447 = 0; - fTempPerm448 = 0; - fTempPerm449 = 0; - fTempPerm450 = 0; - fTempPerm451 = 0; - fTempPerm452 = 0; - fTempPerm453 = 0; - fTempPerm454 = 0; - fTempPerm455 = 0; - fTempPerm456 = 0; - fTempPerm457 = 0; - fTempPerm458 = 0; - fTempPerm459 = 0; - fTempPerm460 = 0; - fTempPerm461 = 0; - fTempPerm462 = 0; - fTempPerm463 = 0; - fTempPerm464 = 0; - fTempPerm465 = 0; - fTempPerm466 = 0; - fTempPerm467 = 0; - fTempPerm468 = 0; - fTempPerm469 = 0; - fTempPerm470 = 0; - fTempPerm471 = 0; - fTempPerm472 = 0; - fTempPerm473 = 0; - fTempPerm474 = 0; - fTempPerm475 = 0; - fTempPerm476 = 0; - fTempPerm477 = 0; - fTempPerm478 = 0; - fTempPerm479 = 0; - fTempPerm480 = 0; - fTempPerm481 = 0; - fTempPerm482 = 0; - fTempPerm483 = 0; - fTempPerm484 = 0; - fTempPerm485 = 0; - fTempPerm486 = 0; - fTempPerm487 = 0; - fTempPerm488 = 0; - fTempPerm489 = 0; - fTempPerm490 = 0; - fTempPerm491 = 0; - fTempPerm492 = 0; - fTempPerm493 = 0; - fTempPerm494 = 0; - fTempPerm495 = 0; - fTempPerm496 = 0; - fTempPerm497 = 0; - fTempPerm498 = 0; - fTempPerm499 = 0; - fTempPerm500 = 0; - fTempPerm501 = 0; - fTempPerm502 = 0; - fTempPerm503 = 0; - fTempPerm504 = 0; - fTempPerm505 = 0; - fTempPerm506 = 0; - fTempPerm507 = 0; - fTempPerm508 = 0; - fTempPerm509 = 0; - fTempPerm510 = 0; - fTempPerm511 = 0; - fTempPerm512 = 0; - fTempPerm513 = 0; - fTempPerm514 = 0; - fTempPerm515 = 0; - fTempPerm516 = 0; - fTempPerm517 = 0; - fTempPerm518 = 0; - fTempPerm519 = 0; - fTempPerm520 = 0; - fTempPerm521 = 0; - fTempPerm522 = 0; - fTempPerm523 = 0; - fTempPerm524 = 0; - fTempPerm525 = 0; - fTempPerm526 = 0; - fTempPerm527 = 0; - fTempPerm528 = 0; - fTempPerm529 = 0; - fTempPerm530 = 0; - fTempPerm531 = 0; - fTempPerm532 = 0; - fTempPerm533 = 0; - fTempPerm534 = 0; - fTempPerm535 = 0; - fTempPerm536 = 0; - fTempPerm537 = 0; - fTempPerm538 = 0; - fTempPerm539 = 0; - fTempPerm540 = 0; - fTempPerm541 = 0; - fTempPerm542 = 0; - fTempPerm543 = 0; - fTempPerm544 = 0; - fTempPerm545 = 0; - fTempPerm546 = 0; - fTempPerm547 = 0; - fTempPerm548 = 0; - fTempPerm549 = 0; - fTempPerm550 = 0; - fTempPerm551 = 0; - fTempPerm552 = 0; - fTempPerm553 = 0; - fTempPerm554 = 0; - fTempPerm555 = 0; - fTempPerm556 = 0; - fTempPerm557 = 0; - fTempPerm558 = 0; - fTempPerm559 = 0; - fTempPerm560 = 0; - fTempPerm561 = 0; - fTempPerm562 = 0; - fTempPerm563 = 0; - fTempPerm564 = 0; - fTempPerm565 = 0; - fTempPerm566 = 0; - fTempPerm567 = 0; - fTempPerm568 = 0; - fTempPerm569 = 0; - fTempPerm570 = 0; - fTempPerm571 = 0; - fTempPerm572 = 0; - fTempPerm573 = 0; - fTempPerm574 = 0; - fTempPerm575 = 0; - fTempPerm576 = 0; - fTempPerm577 = 0; - fTempPerm578 = 0; - fTempPerm579 = 0; - fTempPerm580 = 0; - fTempPerm581 = 0; - fTempPerm582 = 0; - fTempPerm583 = 0; - fTempPerm584 = 0; - fTempPerm585 = 0; - fTempPerm586 = 0; - fTempPerm587 = 0; - fTempPerm588 = 0; - fTempPerm589 = 0; - fTempPerm590 = 0; - fTempPerm591 = 0; - fTempPerm592 = 0; - fTempPerm593 = 0; - fTempPerm594 = 0; - fTempPerm595 = 0; - fTempPerm596 = 0; - fTempPerm597 = 0; - fTempPerm598 = 0; - fTempPerm599 = 0; - fTempPerm600 = 0; - fTempPerm601 = 0; - fTempPerm602 = 0; - fTempPerm603 = 0; - fTempPerm604 = 0; - fTempPerm605 = 0; - fTempPerm606 = 0; - fTempPerm607 = 0; - fTempPerm608 = 0; - fTempPerm609 = 0; - fTempPerm610 = 0; - fTempPerm611 = 0; - fTempPerm612 = 0; - fTempPerm613 = 0; - fTempPerm614 = 0; - fTempPerm615 = 0; - fTempPerm616 = 0; - fTempPerm617 = 0; - fTempPerm618 = 0; - fTempPerm619 = 0; - fTempPerm620 = 0; - fTempPerm621 = 0; - fTempPerm622 = 0; - fTempPerm623 = 0; - fTempPerm624 = 0; - fTempPerm625 = 0; - fTempPerm626 = 0; - fTempPerm627 = 0; - fTempPerm628 = 0; - fTempPerm629 = 0; - fTempPerm630 = 0; - fTempPerm631 = 0; - fTempPerm632 = 0; - fTempPerm633 = 0; - fTempPerm634 = 0; - fTempPerm635 = 0; - fTempPerm636 = 0; - fTempPerm637 = 0; - fTempPerm638 = 0; - fTempPerm639 = 0; - fTempPerm640 = 0; - fTempPerm641 = 0; - fTempPerm642 = 0; - fTempPerm643 = 0; - fTempPerm644 = 0; - fTempPerm645 = 0; - fTempPerm646 = 0; - fTempPerm647 = 0; - fTempPerm648 = 0; - fTempPerm649 = 0; - fTempPerm650 = 0; - fTempPerm651 = 0; - fTempPerm652 = 0; - fTempPerm653 = 0; - fTempPerm654 = 0; - fTempPerm655 = 0; - fTempPerm656 = 0; - fTempPerm657 = 0; - fTempPerm658 = 0; - fTempPerm659 = 0; - fTempPerm660 = 0; - fTempPerm661 = 0; - fTempPerm662 = 0; - fTempPerm663 = 0; - fTempPerm664 = 0; - fTempPerm665 = 0; - fTempPerm666 = 0; - fTempPerm667 = 0; - fTempPerm668 = 0; - fTempPerm669 = 0; - fTempPerm670 = 0; - fTempPerm671 = 0; - fTempPerm672 = 0; - fTempPerm673 = 0; - fTempPerm674 = 0; - fTempPerm675 = 0; - fTempPerm676 = 0; - fTempPerm677 = 0; - fTempPerm678 = 0; - fTempPerm679 = 0; - fTempPerm680 = 0; - fTempPerm681 = 0; - fTempPerm682 = 0; - fTempPerm683 = 0; - fTempPerm684 = 0; - fTempPerm685 = 0; - fTempPerm686 = 0; - fTempPerm687 = 0; - fTempPerm688 = 0; - fTempPerm689 = 0; - fTempPerm690 = 0; - fTempPerm691 = 0; - fTempPerm692 = 0; - fTempPerm693 = 0; - fTempPerm694 = 0; - fTempPerm695 = 0; - fTempPerm696 = 0; - fTempPerm697 = 0; - fTempPerm698 = 0; - fTempPerm699 = 0; - fTempPerm700 = 0; - fTempPerm701 = 0; - fTempPerm702 = 0; - fTempPerm703 = 0; - fTempPerm704 = 0; - fTempPerm705 = 0; - fTempPerm706 = 0; - fTempPerm707 = 0; - fTempPerm708 = 0; - fTempPerm709 = 0; - fTempPerm710 = 0; - fTempPerm711 = 0; - fTempPerm712 = 0; - fTempPerm713 = 0; - fTempPerm714 = 0; - fTempPerm715 = 0; - fTempPerm716 = 0; - fTempPerm717 = 0; - fTempPerm718 = 0; - fTempPerm719 = 0; - fTempPerm720 = 0; - fTempPerm721 = 0; - fTempPerm722 = 0; - fTempPerm723 = 0; - fTempPerm724 = 0; - fTempPerm725 = 0; - fTempPerm726 = 0; - fTempPerm727 = 0; - fTempPerm728 = 0; - fTempPerm729 = 0; - fTempPerm730 = 0; - fTempPerm731 = 0; - fTempPerm732 = 0; - fTempPerm733 = 0; - fTempPerm734 = 0; - fTempPerm735 = 0; - fTempPerm736 = 0; - fTempPerm737 = 0; - fTempPerm738 = 0; - fTempPerm739 = 0; - fTempPerm740 = 0; - fTempPerm741 = 0; - fTempPerm742 = 0; - fTempPerm743 = 0; - fTempPerm744 = 0; - fTempPerm745 = 0; - fTempPerm746 = 0; - fTempPerm747 = 0; - fTempPerm748 = 0; - fTempPerm749 = 0; - fTempPerm750 = 0; - fTempPerm751 = 0; - fTempPerm752 = 0; - fTempPerm753 = 0; - fTempPerm754 = 0; - fTempPerm755 = 0; - fTempPerm756 = 0; - fTempPerm757 = 0; - fTempPerm758 = 0; - fTempPerm759 = 0; - fTempPerm760 = 0; - fTempPerm761 = 0; - fTempPerm762 = 0; - fTempPerm763 = 0; - fTempPerm764 = 0; - fTempPerm765 = 0; - fTempPerm766 = 0; - fTempPerm767 = 0; - fTempPerm768 = 0; - fTempPerm769 = 0; - fTempPerm770 = 0; - fTempPerm771 = 0; - fTempPerm772 = 0; - fTempPerm773 = 0; - fTempPerm774 = 0; - fTempPerm775 = 0; - fTempPerm776 = 0; - fTempPerm777 = 0; - fTempPerm778 = 0; - fTempPerm779 = 0; - fTempPerm780 = 0; - fTempPerm781 = 0; - fTempPerm782 = 0; - fTempPerm783 = 0; - fTempPerm784 = 0; - fTempPerm785 = 0; - fTempPerm786 = 0; - fTempPerm787 = 0; - fTempPerm788 = 0; - fTempPerm789 = 0; - fTempPerm790 = 0; - fTempPerm791 = 0; - fTempPerm792 = 0; - fTempPerm793 = 0; - fTempPerm794 = 0; - fTempPerm795 = 0; - fTempPerm796 = 0; - fTempPerm797 = 0; - fTempPerm798 = 0; - fTempPerm799 = 0; - fTempPerm800 = 0; - fTempPerm801 = 0; - fTempPerm802 = 0; - fTempPerm803 = 0; - fTempPerm804 = 0; - fTempPerm805 = 0; - fTempPerm806 = 0; - fTempPerm807 = 0; - fTempPerm808 = 0; - fTempPerm809 = 0; - fTempPerm810 = 0; - fTempPerm811 = 0; - fTempPerm812 = 0; - fTempPerm813 = 0; - fTempPerm814 = 0; - fTempPerm815 = 0; - fTempPerm816 = 0; - fTempPerm817 = 0; - fTempPerm818 = 0; - fTempPerm819 = 0; - fTempPerm820 = 0; - fTempPerm821 = 0; - fTempPerm822 = 0; - fTempPerm823 = 0; - fTempPerm824 = 0; - fTempPerm825 = 0; - fTempPerm826 = 0; - fTempPerm827 = 0; - fTempPerm828 = 0; - fTempPerm829 = 0; - fTempPerm830 = 0; - fTempPerm831 = 0; - fTempPerm832 = 0; - fTempPerm833 = 0; - fTempPerm834 = 0; - fTempPerm835 = 0; - fTempPerm836 = 0; - fTempPerm837 = 0; - fTempPerm838 = 0; - fTempPerm839 = 0; - fTempPerm840 = 0; - fTempPerm841 = 0; - fTempPerm842 = 0; - fTempPerm843 = 0; - fTempPerm844 = 0; - fTempPerm845 = 0; - fTempPerm846 = 0; - fTempPerm847 = 0; - fTempPerm848 = 0; - fTempPerm849 = 0; - fTempPerm850 = 0; - fTempPerm851 = 0; - fTempPerm852 = 0; - fTempPerm853 = 0; - fTempPerm854 = 0; - fTempPerm855 = 0; - fTempPerm856 = 0; - fTempPerm857 = 0; - fTempPerm858 = 0; - fTempPerm859 = 0; - fTempPerm860 = 0; - fTempPerm861 = 0; - fTempPerm862 = 0; - fTempPerm863 = 0; - fTempPerm864 = 0; - fTempPerm865 = 0; - fTempPerm866 = 0; - fTempPerm867 = 0; - fTempPerm868 = 0; - fTempPerm869 = 0; - fTempPerm870 = 0; - fTempPerm871 = 0; - fTempPerm872 = 0; - fTempPerm873 = 0; - fTempPerm874 = 0; - fTempPerm875 = 0; - fTempPerm876 = 0; - fTempPerm877 = 0; - fTempPerm878 = 0; - fTempPerm879 = 0; - fTempPerm880 = 0; - fTempPerm881 = 0; - fTempPerm882 = 0; - fTempPerm883 = 0; - fTempPerm884 = 0; - fTempPerm885 = 0; - fTempPerm886 = 0; - fTempPerm887 = 0; - fTempPerm888 = 0; - fTempPerm889 = 0; - fTempPerm890 = 0; - fTempPerm891 = 0; - fTempPerm892 = 0; - fTempPerm893 = 0; - fTempPerm894 = 0; - fTempPerm895 = 0; - fTempPerm896 = 0; - fTempPerm897 = 0; - fTempPerm898 = 0; - fTempPerm899 = 0; - fTempPerm900 = 0; - fTempPerm901 = 0; - fTempPerm902 = 0; - fTempPerm903 = 0; - fTempPerm904 = 0; - fTempPerm905 = 0; - fTempPerm906 = 0; - fTempPerm907 = 0; - fTempPerm908 = 0; - fTempPerm909 = 0; - fTempPerm910 = 0; - fTempPerm911 = 0; - fTempPerm912 = 0; - fTempPerm913 = 0; - fTempPerm914 = 0; - fTempPerm915 = 0; - fTempPerm916 = 0; - fTempPerm917 = 0; - fTempPerm918 = 0; - fTempPerm919 = 0; - fTempPerm920 = 0; - fTempPerm921 = 0; - fTempPerm922 = 0; - fTempPerm923 = 0; - fTempPerm924 = 0; - fTempPerm925 = 0; - fTempPerm926 = 0; - fTempPerm927 = 0; - fTempPerm928 = 0; - fTempPerm929 = 0; - fTempPerm930 = 0; - fTempPerm931 = 0; - fTempPerm932 = 0; - fTempPerm933 = 0; - fTempPerm934 = 0; - fTempPerm935 = 0; - fTempPerm936 = 0; - fTempPerm937 = 0; - fTempPerm938 = 0; - fTempPerm939 = 0; - fTempPerm940 = 0; - fTempPerm941 = 0; - fTempPerm942 = 0; - fTempPerm943 = 0; - fTempPerm944 = 0; - fTempPerm945 = 0; - fTempPerm946 = 0; - fTempPerm947 = 0; - fTempPerm948 = 0; - fTempPerm949 = 0; - fTempPerm950 = 0; - fTempPerm951 = 0; - fTempPerm952 = 0; - fTempPerm953 = 0; - fTempPerm954 = 0; - fTempPerm955 = 0; - fTempPerm956 = 0; - fTempPerm957 = 0; - fTempPerm958 = 0; - fTempPerm959 = 0; - fTempPerm960 = 0; - fTempPerm961 = 0; - fTempPerm962 = 0; - fTempPerm963 = 0; - fTempPerm964 = 0; - fTempPerm965 = 0; - fTempPerm966 = 0; - fTempPerm967 = 0; - fTempPerm968 = 0; - fTempPerm969 = 0; - fTempPerm970 = 0; - fTempPerm971 = 0; - fTempPerm972 = 0; - fTempPerm973 = 0; - fTempPerm974 = 0; - fTempPerm975 = 0; - fTempPerm976 = 0; - fTempPerm977 = 0; - fTempPerm978 = 0; - fTempPerm979 = 0; - fTempPerm980 = 0; - fTempPerm981 = 0; - fTempPerm982 = 0; - fTempPerm983 = 0; - fTempPerm984 = 0; - fTempPerm985 = 0; - fTempPerm986 = 0; - fTempPerm987 = 0; - fTempPerm988 = 0; - fTempPerm989 = 0; - fTempPerm990 = 0; - fTempPerm991 = 0; - fTempPerm992 = 0; - fTempPerm993 = 0; - fTempPerm994 = 0; - fTempPerm995 = 0; - fTempPerm996 = 0; - fTempPerm997 = 0; - fTempPerm998 = 0; - fTempPerm999 = 0; - fTempPerm1000 = 0; - fTempPerm1001 = 0; - fTempPerm1002 = 0; - fTempPerm1003 = 0; - fTempPerm1004 = 0; - fTempPerm1005 = 0; - fTempPerm1006 = 0; - fTempPerm1007 = 0; - fTempPerm1008 = 0; - fTempPerm1009 = 0; - fTempPerm1010 = 0; - fTempPerm1011 = 0; - fTempPerm1012 = 0; - fTempPerm1013 = 0; - fTempPerm1014 = 0; - fTempPerm1015 = 0; - fTempPerm1016 = 0; - fTempPerm1017 = 0; - fTempPerm1018 = 0; - fTempPerm1019 = 0; - fTempPerm1020 = 0; - fTempPerm1021 = 0; - fTempPerm1022 = 0; - fTempPerm1023 = 0; - fTempPerm1024 = 0; - fTempPerm1025 = 0; - fTempPerm1026 = 0; - fTempPerm1027 = 0; - fTempPerm1028 = 0; - fTempPerm1029 = 0; - fTempPerm1030 = 0; - fTempPerm1031 = 0; - fTempPerm1032 = 0; - fTempPerm1033 = 0; - fTempPerm1034 = 0; - fTempPerm1035 = 0; - fTempPerm1036 = 0; - fTempPerm1037 = 0; - fTempPerm1038 = 0; - fTempPerm1039 = 0; - fTempPerm1040 = 0; - fTempPerm1041 = 0; - fTempPerm1042 = 0; - fTempPerm1043 = 0; - fTempPerm1044 = 0; - fTempPerm1045 = 0; - fTempPerm1046 = 0; - fTempPerm1047 = 0; - fTempPerm1048 = 0; - fTempPerm1049 = 0; - fTempPerm1050 = 0; - fTempPerm1051 = 0; - fTempPerm1052 = 0; - fTempPerm1053 = 0; - fTempPerm1054 = 0; - fTempPerm1055 = 0; - fTempPerm1056 = 0; - fTempPerm1057 = 0; - fTempPerm1058 = 0; - fTempPerm1059 = 0; - fTempPerm1060 = 0; - fTempPerm1061 = 0; - fTempPerm1062 = 0; - fTempPerm1063 = 0; - fTempPerm1064 = 0; - fTempPerm1065 = 0; - fTempPerm1066 = 0; - fTempPerm1067 = 0; - fTempPerm1068 = 0; - fTempPerm1069 = 0; - fTempPerm1070 = 0; - fTempPerm1071 = 0; - fTempPerm1072 = 0; - fTempPerm1073 = 0; - fTempPerm1074 = 0; - fTempPerm1075 = 0; - fTempPerm1076 = 0; - fTempPerm1077 = 0; - fTempPerm1078 = 0; - fTempPerm1079 = 0; - fTempPerm1080 = 0; - fTempPerm1081 = 0; - fTempPerm1082 = 0; - fTempPerm1083 = 0; - fTempPerm1084 = 0; - fTempPerm1085 = 0; - fTempPerm1086 = 0; - fTempPerm1087 = 0; - fTempPerm1088 = 0; - fTempPerm1089 = 0; - fTempPerm1090 = 0; - fTempPerm1091 = 0; - fTempPerm1092 = 0; - fTempPerm1093 = 0; - fTempPerm1094 = 0; - fTempPerm1095 = 0; - fTempPerm1096 = 0; - fTempPerm1097 = 0; - fTempPerm1098 = 0; - fTempPerm1099 = 0; - fTempPerm1100 = 0; - fTempPerm1101 = 0; - fTempPerm1102 = 0; - fTempPerm1103 = 0; - fTempPerm1104 = 0; - fTempPerm1105 = 0; - fTempPerm1106 = 0; - fTempPerm1107 = 0; - fTempPerm1108 = 0; - fTempPerm1109 = 0; - fTempPerm1110 = 0; - fTempPerm1111 = 0; - fTempPerm1112 = 0; - fTempPerm1113 = 0; - fTempPerm1114 = 0; - fTempPerm1115 = 0; - fTempPerm1116 = 0; - fTempPerm1117 = 0; - fTempPerm1118 = 0; - fTempPerm1119 = 0; - fTempPerm1120 = 0; - fTempPerm1121 = 0; - fTempPerm1122 = 0; - fTempPerm1123 = 0; - fTempPerm1124 = 0; - fTempPerm1125 = 0; - fTempPerm1126 = 0; - fTempPerm1127 = 0; - fTempPerm1128 = 0; - fTempPerm1129 = 0; - fTempPerm1130 = 0; - fTempPerm1131 = 0; - fTempPerm1132 = 0; - fTempPerm1133 = 0; - fTempPerm1134 = 0; - fTempPerm1135 = 0; - fTempPerm1136 = 0; - fTempPerm1137 = 0; - fTempPerm1138 = 0; - fTempPerm1139 = 0; - fTempPerm1140 = 0; - fTempPerm1141 = 0; - fTempPerm1142 = 0; - fTempPerm1143 = 0; - fTempPerm1144 = 0; - fTempPerm1145 = 0; - fTempPerm1146 = 0; - fTempPerm1147 = 0; - fTempPerm1148 = 0; - fTempPerm1149 = 0; - fTempPerm1150 = 0; - fTempPerm1151 = 0; - fTempPerm1152 = 0; - fTempPerm1153 = 0; - } - virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - IOTA = 0; - for (int i=0; i<128; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<128; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<128; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<128; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<128; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<128; i++) fVec5[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<128; i++) fVec6[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<128; i++) fVec7[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<128; i++) fVec8[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOADecoderLebedev50Binaural2"); - ui_interface->openHorizontalBox("Inputs"); - ui_interface->openHorizontalBox("0"); - ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d5f11610", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("1"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d6145be0", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d6140b30", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d613bd70", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("2"); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d6138770", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d5e1e0e0", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d5e1a1b0", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d5e14490", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fa3d5f63c50", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 10"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 1e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 10"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 1e+01, 0.1); - ui_interface->closeBox(); - ui_interface->openVerticalBox("Outputs"); - ui_interface->openHorizontalBox("Left"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x7fa3d5e46dc0", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("Right"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x7fa3d6190190", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - //LoopGraphScalar - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = STRDUP(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable* ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - FAUST_EXPORT int api_version(void); -#endif - FAUST_EXPORT void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - size_t numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i = 0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp* tmp_dsp = new FAUSTCLASS; - tmp_dsp->metadata(&meta); - delete tmp_dsp; - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -#ifdef SUPERNOVA -extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } -#else -extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } -#endif - -// EOF diff --git a/source/HOAUGens/HOADecoderLebedev50Binaural3.cpp b/source/HOAUGens/HOADecoderLebedev50Binaural3.cpp deleted file mode 100644 index d01e1cb368..0000000000 --- a/source/HOAUGens/HOADecoderLebedev50Binaural3.cpp +++ /dev/null @@ -1,7437 +0,0 @@ -//---------------------------------------------------------- -// name: "HOADecoderLebedev50Binaural3" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL)" -// copyright: "(c) Pierre Lecomte 2015" -// -// Code generated with Faust 0.12.0 (http://faust.grame.fr) -//---------------------------------------------------------- - -/* link with */ -#include -//------------------------------------------------------------------- -// FAUST architecture file for SuperCollider. -// Copyright (C) 2005-2012 Stefan Kersten. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -// 02111-1307 USA -//------------------------------------------------------------------- - -// If other than 'faust2sc --prefix Faust' is used, sed this as well: -#if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" -#endif - -#include -#include -#include -#include - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __dsp__ -#define __dsp__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -class UI; -struct Meta; - -/** - * DSP memory manager. - */ - -struct dsp_memory_manager { - - virtual ~dsp_memory_manager() {} - - virtual void* allocate(size_t size) = 0; - virtual void destroy(void* ptr) = 0; - -}; - -/** -* Signal processor definition. -*/ - -class dsp { - - public: - - dsp() {} - virtual ~dsp() {} - - /* Return instance number of audio inputs */ - virtual int getNumInputs() = 0; - - /* Return instance number of audio outputs */ - virtual int getNumOutputs() = 0; - - /** - * Trigger the ui_interface parameter with instance specific calls - * to 'addBtton', 'addVerticalSlider'... in order to build the UI. - * - * @param ui_interface - the user interface builder - */ - virtual void buildUserInterface(UI* ui_interface) = 0; - - /* Returns the sample rate currently used by the instance */ - virtual int getSampleRate() = 0; - - /** - * Global init, calls the following methods: - * - static class 'classInit': static tables initialization - * - 'instanceInit': constants and instance state initialization - * - * @param samplingRate - the sampling rate in Herz - */ - virtual void init(int samplingRate) = 0; - - /** - * Init instance state - * - * @param samplingRate - the sampling rate in Hertz - */ - virtual void instanceInit(int samplingRate) = 0; - - /** - * Init instance constant state - * - * @param samplingRate - the sampling rate in Hertz - */ - virtual void instanceConstants(int samplingRate) = 0; - - /* Init default control parameters values */ - virtual void instanceResetUserInterface() = 0; - - /* Init instance state (delay lines...) */ - virtual void instanceClear() = 0; - - /** - * Return a clone of the instance. - * - * @return a copy of the instance on success, otherwise a null pointer. - */ - virtual dsp* clone() = 0; - - /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. - * - * @param m - the Meta* meta user - */ - virtual void metadata(Meta* m) = 0; - - /** - * DSP instance computation, to be called with successive in/out audio buffers. - * - * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * - */ - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; - - /** - * DSP instance computation: alternative method to be used by subclasses. - * - * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * - */ - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } - -}; - -/** - * Generic DSP decorator. - */ - -class decorator_dsp : public dsp { - - protected: - - dsp* fDSP; - - public: - - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} - virtual ~decorator_dsp() { delete fDSP; } - - virtual int getNumInputs() { return fDSP->getNumInputs(); } - virtual int getNumOutputs() { return fDSP->getNumOutputs(); } - virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } - virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } - virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } - virtual void instanceClear() { fDSP->instanceClear(); } - virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { fDSP->metadata(m); } - // Beware: subclasses usually have to overload the two 'compute' methods - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } - virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - -}; - -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ - -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS -#endif - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __UI_H__ -#define __UI_H__ - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - -/******************************************************************************* - * UI : Faust DSP User Interface - * User Interface as expected by the buildUserInterface() method of a DSP. - * This abstract class contains only the method that the Faust compiler can - * generate to describe a DSP user interface. - ******************************************************************************/ - -struct Soundfile; - -class UI -{ - - public: - - UI() {} - - virtual ~UI() {} - - // -- widget's layouts - - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - virtual void closeBox() = 0; - - // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - - // -- soundfiles - - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} - - // -- metadata declarations - - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} -}; - -#endif -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __misc__ -#define __misc__ - -#include -#include -#include -#include - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ - -#ifndef __meta__ -#define __meta__ - -struct Meta -{ - virtual void declare(const char* key, const char* value) = 0; - virtual ~Meta() {}; -}; - -#endif - -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -struct MY_Meta : Meta, std::map -{ - void declare(const char* key, const char* value) { (*this)[key]=value; } -}; - -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } - -inline int int2pow2(int x) { int r = 0; while ((1<= 4 - #define FAUST_EXPORT __attribute__((visibility("default"))) -#else - #define FAUST_EXPORT SC_API_EXPORT -#endif - -#ifdef WIN32 - #define STRDUP _strdup -#else - #define STRDUP strdup -#endif - -//---------------------------------------------------------------------------- -// Vector intrinsics -//---------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Metadata -//---------------------------------------------------------------------------- - -class MetaData : public Meta - , public std::map -{ -public: - void declare(const char* key, const char* value) - { - (*this)[key] = value; - } -}; - -//---------------------------------------------------------------------------- -// Control counter -//---------------------------------------------------------------------------- - -class ControlCounter : public UI -{ -public: - ControlCounter() - : mNumControlInputs(0), - mNumControlOutputs(0) - { } - - size_t getNumControls() const { return getNumControlInputs(); } - size_t getNumControlInputs() const { return mNumControlInputs; } - size_t getNumControlOutputs() const { return mNumControlOutputs; } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addControlInput(); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addControlInput(); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) - { addControlOutput(); } - -protected: - void addControlInput() { mNumControlInputs++; } - void addControlOutput() { mNumControlOutputs++; } - -private: - size_t mNumControlInputs; - size_t mNumControlOutputs; -}; - -//---------------------------------------------------------------------------- -// UI control -//---------------------------------------------------------------------------- - -struct Control -{ - typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); - - UpdateFunction updateFunction; - FAUSTFLOAT* zone; - FAUSTFLOAT min, max; - - inline void update(FAUSTFLOAT value) - { - (*updateFunction)(this, value); - } - - static void simpleUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = value; - } - static void boundedUpdate(Control* self, FAUSTFLOAT value) - { - *self->zone = sc_clip(value, self->min, self->max); - } -}; - -//---------------------------------------------------------------------------- -// Control allocator -//---------------------------------------------------------------------------- - -class ControlAllocator : public UI -{ -public: - ControlAllocator(Control* controls) - : mControls(controls) - { } - - // Layout widgets - virtual void openTabBox(const char* label) { } - virtual void openHorizontalBox(const char* label) { } - virtual void openVerticalBox(const char* label) { } - virtual void closeBox() { } - - // Active widgets - virtual void addButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) - { addSimpleControl(zone); } - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { addBoundedControl(zone, min, max, step); } - - // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - -private: - void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) - { - Control* ctrl = mControls++; - ctrl->updateFunction = updateFunction; - ctrl->zone = zone; - ctrl->min = min; - ctrl->max = max; - } - void addSimpleControl(FAUSTFLOAT* zone) - { - addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); - } - void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) - { - addControl(Control::boundedUpdate, zone, min, max, step); - } - -private: - Control* mControls; -}; - -//---------------------------------------------------------------------------- -// FAUST generated code -//---------------------------------------------------------------------------- - -#ifndef FAUSTFLOAT -#define FAUSTFLOAT float -#endif - - -#ifndef FAUSTCLASS -#define FAUSTCLASS mydsp -#endif - -class mydsp : public dsp { - private: - double fConst0; - FAUSTFLOAT fslider0; - double fRec1[2]; - FAUSTFLOAT fslider1; - double fRec3[2]; - double fTempPerm0; - double fRec2[2]; - FAUSTFLOAT fbargraph0; - double fTempPerm1; - int IOTA; - double fVec0[128]; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; - double fTempPerm8; - double fTempPerm9; - double fTempPerm10; - double fTempPerm11; - double fTempPerm12; - double fTempPerm13; - double fTempPerm14; - double fRec4[2]; - FAUSTFLOAT fbargraph1; - double fTempPerm15; - double fVec1[128]; - double fTempPerm16; - double fTempPerm17; - double fTempPerm18; - double fTempPerm19; - double fTempPerm20; - double fTempPerm21; - double fTempPerm22; - double fTempPerm23; - double fTempPerm24; - double fTempPerm25; - double fTempPerm26; - double fTempPerm27; - double fTempPerm28; - double fTempPerm29; - double fTempPerm30; - double fTempPerm31; - double fTempPerm32; - double fTempPerm33; - double fTempPerm34; - double fRec5[2]; - FAUSTFLOAT fbargraph2; - double fTempPerm35; - double fVec2[128]; - double fTempPerm36; - double fTempPerm37; - double fTempPerm38; - double fTempPerm39; - double fTempPerm40; - double fTempPerm41; - double fTempPerm42; - double fTempPerm43; - double fTempPerm44; - double fTempPerm45; - double fTempPerm46; - double fTempPerm47; - double fTempPerm48; - double fTempPerm49; - double fTempPerm50; - double fRec6[2]; - FAUSTFLOAT fbargraph3; - double fTempPerm51; - double fVec3[128]; - double fTempPerm52; - double fTempPerm53; - double fTempPerm54; - double fTempPerm55; - double fTempPerm56; - double fTempPerm57; - double fTempPerm58; - double fTempPerm59; - double fTempPerm60; - double fTempPerm61; - double fTempPerm62; - double fTempPerm63; - double fTempPerm64; - double fTempPerm65; - double fTempPerm66; - double fTempPerm67; - double fTempPerm68; - double fTempPerm69; - double fTempPerm70; - double fTempPerm71; - double fTempPerm72; - double fTempPerm73; - double fTempPerm74; - double fTempPerm75; - double fTempPerm76; - double fTempPerm77; - double fTempPerm78; - double fTempPerm79; - double fTempPerm80; - double fTempPerm81; - double fTempPerm82; - double fTempPerm83; - double fTempPerm84; - double fTempPerm85; - double fTempPerm86; - double fTempPerm87; - double fTempPerm88; - double fTempPerm89; - double fTempPerm90; - double fTempPerm91; - double fTempPerm92; - double fTempPerm93; - double fTempPerm94; - double fTempPerm95; - double fTempPerm96; - double fTempPerm97; - double fTempPerm98; - double fTempPerm99; - double fTempPerm100; - double fTempPerm101; - double fTempPerm102; - double fTempPerm103; - double fTempPerm104; - double fTempPerm105; - double fTempPerm106; - double fTempPerm107; - double fTempPerm108; - double fTempPerm109; - double fTempPerm110; - double fTempPerm111; - double fTempPerm112; - double fTempPerm113; - double fTempPerm114; - double fTempPerm115; - double fTempPerm116; - double fTempPerm117; - double fTempPerm118; - double fTempPerm119; - double fTempPerm120; - double fTempPerm121; - double fTempPerm122; - double fTempPerm123; - double fTempPerm124; - double fTempPerm125; - double fTempPerm126; - double fTempPerm127; - double fTempPerm128; - double fTempPerm129; - double fTempPerm130; - double fTempPerm131; - double fTempPerm132; - double fTempPerm133; - double fTempPerm134; - double fTempPerm135; - double fTempPerm136; - double fTempPerm137; - double fTempPerm138; - double fTempPerm139; - double fTempPerm140; - double fTempPerm141; - double fTempPerm142; - double fTempPerm143; - double fTempPerm144; - double fTempPerm145; - double fTempPerm146; - double fTempPerm147; - double fTempPerm148; - double fTempPerm149; - double fTempPerm150; - double fTempPerm151; - double fTempPerm152; - double fTempPerm153; - double fTempPerm154; - double fTempPerm155; - double fTempPerm156; - double fTempPerm157; - double fTempPerm158; - double fTempPerm159; - double fTempPerm160; - double fTempPerm161; - double fTempPerm162; - double fTempPerm163; - double fTempPerm164; - double fTempPerm165; - double fTempPerm166; - double fTempPerm167; - double fTempPerm168; - double fTempPerm169; - double fTempPerm170; - double fTempPerm171; - double fTempPerm172; - double fTempPerm173; - double fTempPerm174; - double fTempPerm175; - double fTempPerm176; - double fTempPerm177; - double fTempPerm178; - double fTempPerm179; - double fTempPerm180; - double fTempPerm181; - double fTempPerm182; - double fTempPerm183; - double fTempPerm184; - double fTempPerm185; - double fTempPerm186; - double fTempPerm187; - double fTempPerm188; - double fTempPerm189; - double fTempPerm190; - double fTempPerm191; - double fTempPerm192; - double fTempPerm193; - double fTempPerm194; - double fTempPerm195; - double fTempPerm196; - double fTempPerm197; - double fTempPerm198; - double fTempPerm199; - double fTempPerm200; - double fTempPerm201; - double fTempPerm202; - double fTempPerm203; - double fTempPerm204; - double fTempPerm205; - double fTempPerm206; - double fTempPerm207; - double fTempPerm208; - double fTempPerm209; - double fTempPerm210; - double fTempPerm211; - double fTempPerm212; - double fRec7[2]; - FAUSTFLOAT fbargraph4; - double fTempPerm213; - double fVec4[128]; - double fTempPerm214; - double fTempPerm215; - double fTempPerm216; - double fTempPerm217; - double fTempPerm218; - double fTempPerm219; - double fTempPerm220; - double fTempPerm221; - double fTempPerm222; - double fTempPerm223; - double fTempPerm224; - double fTempPerm225; - double fTempPerm226; - double fRec8[2]; - FAUSTFLOAT fbargraph5; - double fTempPerm227; - double fVec5[128]; - double fTempPerm228; - double fTempPerm229; - double fTempPerm230; - double fTempPerm231; - double fTempPerm232; - double fTempPerm233; - double fTempPerm234; - double fTempPerm235; - double fTempPerm236; - double fTempPerm237; - double fTempPerm238; - double fTempPerm239; - double fTempPerm240; - double fTempPerm241; - double fTempPerm242; - double fTempPerm243; - double fTempPerm244; - double fTempPerm245; - double fTempPerm246; - double fTempPerm247; - double fTempPerm248; - double fTempPerm249; - double fTempPerm250; - double fTempPerm251; - double fTempPerm252; - double fTempPerm253; - double fTempPerm254; - double fTempPerm255; - double fTempPerm256; - double fTempPerm257; - double fTempPerm258; - double fTempPerm259; - double fTempPerm260; - double fTempPerm261; - double fTempPerm262; - double fTempPerm263; - double fTempPerm264; - double fTempPerm265; - double fTempPerm266; - double fTempPerm267; - double fTempPerm268; - double fTempPerm269; - double fTempPerm270; - double fTempPerm271; - double fTempPerm272; - double fTempPerm273; - double fTempPerm274; - double fTempPerm275; - double fTempPerm276; - double fTempPerm277; - double fTempPerm278; - double fTempPerm279; - double fTempPerm280; - double fTempPerm281; - double fTempPerm282; - double fTempPerm283; - double fTempPerm284; - double fTempPerm285; - double fTempPerm286; - double fTempPerm287; - double fTempPerm288; - double fTempPerm289; - double fTempPerm290; - double fTempPerm291; - double fTempPerm292; - double fTempPerm293; - double fTempPerm294; - double fTempPerm295; - double fTempPerm296; - double fTempPerm297; - double fTempPerm298; - double fTempPerm299; - double fTempPerm300; - double fRec9[2]; - FAUSTFLOAT fbargraph6; - double fTempPerm301; - double fVec6[128]; - double fTempPerm302; - double fTempPerm303; - double fTempPerm304; - double fTempPerm305; - double fTempPerm306; - double fTempPerm307; - double fTempPerm308; - double fTempPerm309; - double fTempPerm310; - double fTempPerm311; - double fTempPerm312; - double fTempPerm313; - double fRec10[2]; - FAUSTFLOAT fbargraph7; - double fTempPerm314; - double fVec7[128]; - double fTempPerm315; - double fTempPerm316; - double fTempPerm317; - double fTempPerm318; - double fTempPerm319; - double fTempPerm320; - double fTempPerm321; - double fTempPerm322; - double fTempPerm323; - double fTempPerm324; - double fTempPerm325; - double fTempPerm326; - double fTempPerm327; - double fTempPerm328; - double fRec11[2]; - FAUSTFLOAT fbargraph8; - double fTempPerm329; - double fVec8[128]; - double fTempPerm330; - double fTempPerm331; - double fTempPerm332; - double fTempPerm333; - double fTempPerm334; - double fTempPerm335; - double fTempPerm336; - double fTempPerm337; - double fTempPerm338; - double fTempPerm339; - double fTempPerm340; - double fTempPerm341; - double fTempPerm342; - double fTempPerm343; - double fTempPerm344; - double fTempPerm345; - double fTempPerm346; - double fTempPerm347; - double fTempPerm348; - double fTempPerm349; - double fTempPerm350; - double fRec12[2]; - FAUSTFLOAT fbargraph9; - double fTempPerm351; - double fVec9[128]; - double fTempPerm352; - double fTempPerm353; - double fTempPerm354; - double fTempPerm355; - double fTempPerm356; - double fTempPerm357; - double fTempPerm358; - double fTempPerm359; - double fTempPerm360; - double fTempPerm361; - double fTempPerm362; - double fTempPerm363; - double fTempPerm364; - double fTempPerm365; - double fTempPerm366; - double fTempPerm367; - double fTempPerm368; - double fTempPerm369; - double fTempPerm370; - double fTempPerm371; - double fTempPerm372; - double fTempPerm373; - double fTempPerm374; - double fRec13[2]; - FAUSTFLOAT fbargraph10; - double fTempPerm375; - double fVec10[128]; - double fTempPerm376; - double fTempPerm377; - double fTempPerm378; - double fTempPerm379; - double fTempPerm380; - double fTempPerm381; - double fTempPerm382; - double fTempPerm383; - double fTempPerm384; - double fTempPerm385; - double fTempPerm386; - double fTempPerm387; - double fTempPerm388; - double fTempPerm389; - double fTempPerm390; - double fTempPerm391; - double fTempPerm392; - double fTempPerm393; - double fTempPerm394; - double fTempPerm395; - double fTempPerm396; - double fTempPerm397; - double fTempPerm398; - double fTempPerm399; - double fTempPerm400; - double fTempPerm401; - double fTempPerm402; - double fTempPerm403; - double fTempPerm404; - double fTempPerm405; - double fTempPerm406; - double fTempPerm407; - double fTempPerm408; - double fTempPerm409; - double fTempPerm410; - double fTempPerm411; - double fTempPerm412; - double fTempPerm413; - double fTempPerm414; - double fTempPerm415; - double fTempPerm416; - double fTempPerm417; - double fTempPerm418; - double fTempPerm419; - double fTempPerm420; - double fTempPerm421; - double fTempPerm422; - double fTempPerm423; - double fTempPerm424; - double fTempPerm425; - double fTempPerm426; - double fTempPerm427; - double fTempPerm428; - double fTempPerm429; - double fTempPerm430; - double fTempPerm431; - double fTempPerm432; - double fTempPerm433; - double fTempPerm434; - double fTempPerm435; - double fTempPerm436; - double fTempPerm437; - double fTempPerm438; - double fTempPerm439; - double fTempPerm440; - double fTempPerm441; - double fTempPerm442; - double fTempPerm443; - double fTempPerm444; - double fTempPerm445; - double fTempPerm446; - double fTempPerm447; - double fTempPerm448; - double fTempPerm449; - double fTempPerm450; - double fTempPerm451; - double fTempPerm452; - double fTempPerm453; - double fTempPerm454; - double fTempPerm455; - double fTempPerm456; - double fTempPerm457; - double fTempPerm458; - double fTempPerm459; - double fTempPerm460; - double fTempPerm461; - double fTempPerm462; - double fTempPerm463; - double fTempPerm464; - double fTempPerm465; - double fTempPerm466; - double fTempPerm467; - double fTempPerm468; - double fTempPerm469; - double fTempPerm470; - double fTempPerm471; - double fTempPerm472; - double fTempPerm473; - double fTempPerm474; - double fTempPerm475; - double fTempPerm476; - double fTempPerm477; - double fTempPerm478; - double fTempPerm479; - double fTempPerm480; - double fTempPerm481; - double fTempPerm482; - double fTempPerm483; - double fTempPerm484; - double fTempPerm485; - double fTempPerm486; - double fTempPerm487; - double fTempPerm488; - double fTempPerm489; - double fTempPerm490; - double fRec14[2]; - FAUSTFLOAT fbargraph11; - double fTempPerm491; - double fVec11[128]; - double fTempPerm492; - double fTempPerm493; - double fTempPerm494; - double fTempPerm495; - double fTempPerm496; - double fTempPerm497; - double fTempPerm498; - double fTempPerm499; - double fTempPerm500; - double fTempPerm501; - double fTempPerm502; - double fTempPerm503; - double fTempPerm504; - double fTempPerm505; - double fRec15[2]; - FAUSTFLOAT fbargraph12; - double fTempPerm506; - double fVec12[128]; - double fTempPerm507; - double fTempPerm508; - double fTempPerm509; - double fTempPerm510; - double fTempPerm511; - double fTempPerm512; - double fTempPerm513; - double fTempPerm514; - double fTempPerm515; - double fTempPerm516; - double fTempPerm517; - double fTempPerm518; - double fTempPerm519; - double fTempPerm520; - double fTempPerm521; - double fTempPerm522; - double fRec16[2]; - FAUSTFLOAT fbargraph13; - double fTempPerm523; - double fVec13[128]; - double fTempPerm524; - double fTempPerm525; - double fTempPerm526; - double fTempPerm527; - double fTempPerm528; - double fTempPerm529; - double fTempPerm530; - double fTempPerm531; - double fTempPerm532; - double fTempPerm533; - double fTempPerm534; - double fTempPerm535; - double fTempPerm536; - double fTempPerm537; - double fTempPerm538; - double fTempPerm539; - double fTempPerm540; - double fTempPerm541; - double fTempPerm542; - double fTempPerm543; - double fTempPerm544; - double fTempPerm545; - double fTempPerm546; - double fTempPerm547; - double fTempPerm548; - double fTempPerm549; - double fTempPerm550; - double fTempPerm551; - double fTempPerm552; - double fTempPerm553; - double fTempPerm554; - double fTempPerm555; - double fTempPerm556; - double fTempPerm557; - double fTempPerm558; - double fTempPerm559; - double fTempPerm560; - double fTempPerm561; - double fTempPerm562; - double fTempPerm563; - double fTempPerm564; - double fTempPerm565; - double fTempPerm566; - double fTempPerm567; - double fTempPerm568; - double fTempPerm569; - double fTempPerm570; - double fTempPerm571; - double fTempPerm572; - double fTempPerm573; - double fTempPerm574; - double fTempPerm575; - double fTempPerm576; - double fTempPerm577; - double fTempPerm578; - double fTempPerm579; - double fTempPerm580; - double fTempPerm581; - double fTempPerm582; - double fTempPerm583; - double fTempPerm584; - double fTempPerm585; - double fTempPerm586; - double fTempPerm587; - double fTempPerm588; - double fTempPerm589; - double fTempPerm590; - double fTempPerm591; - double fTempPerm592; - double fTempPerm593; - double fTempPerm594; - double fTempPerm595; - double fTempPerm596; - double fTempPerm597; - double fTempPerm598; - double fTempPerm599; - double fTempPerm600; - double fTempPerm601; - double fTempPerm602; - double fTempPerm603; - double fTempPerm604; - double fTempPerm605; - double fTempPerm606; - double fTempPerm607; - double fTempPerm608; - double fTempPerm609; - double fTempPerm610; - double fTempPerm611; - double fTempPerm612; - double fTempPerm613; - double fTempPerm614; - double fTempPerm615; - double fTempPerm616; - double fTempPerm617; - double fTempPerm618; - double fTempPerm619; - double fTempPerm620; - double fTempPerm621; - double fTempPerm622; - double fTempPerm623; - double fTempPerm624; - double fTempPerm625; - double fTempPerm626; - double fTempPerm627; - double fTempPerm628; - double fTempPerm629; - double fTempPerm630; - double fTempPerm631; - double fTempPerm632; - double fTempPerm633; - double fTempPerm634; - double fTempPerm635; - double fTempPerm636; - double fTempPerm637; - double fTempPerm638; - double fTempPerm639; - double fTempPerm640; - double fTempPerm641; - double fTempPerm642; - double fTempPerm643; - double fTempPerm644; - double fTempPerm645; - double fTempPerm646; - double fTempPerm647; - double fTempPerm648; - double fTempPerm649; - double fTempPerm650; - double fTempPerm651; - double fTempPerm652; - double fTempPerm653; - double fTempPerm654; - double fTempPerm655; - double fTempPerm656; - double fTempPerm657; - double fTempPerm658; - double fTempPerm659; - double fTempPerm660; - double fTempPerm661; - double fTempPerm662; - double fTempPerm663; - double fTempPerm664; - double fRec17[2]; - FAUSTFLOAT fbargraph14; - double fTempPerm665; - double fVec14[128]; - double fTempPerm666; - double fTempPerm667; - double fTempPerm668; - double fTempPerm669; - double fTempPerm670; - double fTempPerm671; - double fTempPerm672; - double fTempPerm673; - double fTempPerm674; - double fTempPerm675; - double fTempPerm676; - double fTempPerm677; - double fTempPerm678; - double fTempPerm679; - double fTempPerm680; - double fTempPerm681; - double fTempPerm682; - double fTempPerm683; - double fTempPerm684; - double fTempPerm685; - double fTempPerm686; - double fTempPerm687; - double fTempPerm688; - double fTempPerm689; - double fTempPerm690; - double fTempPerm691; - double fTempPerm692; - double fTempPerm693; - double fTempPerm694; - double fTempPerm695; - double fTempPerm696; - double fTempPerm697; - double fTempPerm698; - double fTempPerm699; - double fTempPerm700; - double fTempPerm701; - double fTempPerm702; - double fTempPerm703; - double fTempPerm704; - double fTempPerm705; - double fTempPerm706; - double fTempPerm707; - double fTempPerm708; - double fTempPerm709; - double fTempPerm710; - double fTempPerm711; - double fTempPerm712; - double fTempPerm713; - double fTempPerm714; - double fTempPerm715; - double fTempPerm716; - double fTempPerm717; - double fTempPerm718; - double fTempPerm719; - double fTempPerm720; - double fTempPerm721; - double fTempPerm722; - double fTempPerm723; - double fTempPerm724; - double fTempPerm725; - double fTempPerm726; - double fTempPerm727; - double fTempPerm728; - double fTempPerm729; - double fTempPerm730; - double fTempPerm731; - double fTempPerm732; - double fTempPerm733; - double fTempPerm734; - double fTempPerm735; - double fTempPerm736; - double fTempPerm737; - double fTempPerm738; - double fTempPerm739; - double fTempPerm740; - double fTempPerm741; - double fTempPerm742; - double fTempPerm743; - double fTempPerm744; - double fTempPerm745; - double fTempPerm746; - double fTempPerm747; - double fTempPerm748; - double fTempPerm749; - double fTempPerm750; - double fTempPerm751; - double fTempPerm752; - double fTempPerm753; - double fTempPerm754; - double fTempPerm755; - double fTempPerm756; - double fTempPerm757; - double fTempPerm758; - double fTempPerm759; - double fTempPerm760; - double fTempPerm761; - double fTempPerm762; - double fTempPerm763; - double fTempPerm764; - double fTempPerm765; - double fTempPerm766; - double fTempPerm767; - double fTempPerm768; - double fTempPerm769; - double fTempPerm770; - double fTempPerm771; - double fTempPerm772; - double fTempPerm773; - double fTempPerm774; - double fTempPerm775; - double fTempPerm776; - double fTempPerm777; - double fTempPerm778; - double fTempPerm779; - double fTempPerm780; - double fTempPerm781; - double fTempPerm782; - double fTempPerm783; - double fTempPerm784; - double fTempPerm785; - double fTempPerm786; - double fTempPerm787; - double fTempPerm788; - double fTempPerm789; - double fTempPerm790; - double fTempPerm791; - double fTempPerm792; - double fTempPerm793; - double fTempPerm794; - double fTempPerm795; - double fTempPerm796; - double fTempPerm797; - double fTempPerm798; - double fTempPerm799; - double fTempPerm800; - double fTempPerm801; - double fTempPerm802; - double fTempPerm803; - double fTempPerm804; - double fTempPerm805; - double fTempPerm806; - double fTempPerm807; - double fTempPerm808; - double fTempPerm809; - double fTempPerm810; - double fTempPerm811; - double fTempPerm812; - double fTempPerm813; - double fTempPerm814; - double fTempPerm815; - double fTempPerm816; - double fRec18[2]; - FAUSTFLOAT fbargraph15; - double fTempPerm817; - double fVec15[128]; - double fTempPerm818; - double fTempPerm819; - double fTempPerm820; - double fTempPerm821; - double fTempPerm822; - double fTempPerm823; - double fTempPerm824; - double fTempPerm825; - double fTempPerm826; - double fTempPerm827; - double fTempPerm828; - double fTempPerm829; - double fTempPerm830; - double fTempPerm831; - double fTempPerm832; - double fTempPerm833; - double fTempPerm834; - double fTempPerm835; - double fTempPerm836; - double fTempPerm837; - double fTempPerm838; - double fTempPerm839; - double fTempPerm840; - double fTempPerm841; - double fTempPerm842; - double fTempPerm843; - double fTempPerm844; - double fTempPerm845; - double fTempPerm846; - double fTempPerm847; - double fTempPerm848; - double fTempPerm849; - double fTempPerm850; - double fTempPerm851; - double fTempPerm852; - double fTempPerm853; - double fTempPerm854; - double fTempPerm855; - double fTempPerm856; - double fTempPerm857; - double fTempPerm858; - double fTempPerm859; - double fTempPerm860; - double fTempPerm861; - double fTempPerm862; - double fTempPerm863; - double fTempPerm864; - double fTempPerm865; - double fTempPerm866; - double fTempPerm867; - double fTempPerm868; - double fTempPerm869; - double fTempPerm870; - double fTempPerm871; - double fTempPerm872; - double fTempPerm873; - double fTempPerm874; - double fTempPerm875; - double fTempPerm876; - double fTempPerm877; - double fTempPerm878; - double fTempPerm879; - double fTempPerm880; - double fTempPerm881; - double fTempPerm882; - double fTempPerm883; - double fTempPerm884; - double fTempPerm885; - double fTempPerm886; - double fTempPerm887; - double fTempPerm888; - double fTempPerm889; - double fTempPerm890; - double fTempPerm891; - double fTempPerm892; - double fTempPerm893; - double fTempPerm894; - double fTempPerm895; - double fTempPerm896; - double fTempPerm897; - double fTempPerm898; - double fTempPerm899; - double fTempPerm900; - double fTempPerm901; - double fTempPerm902; - double fTempPerm903; - double fTempPerm904; - double fTempPerm905; - double fTempPerm906; - double fTempPerm907; - double fTempPerm908; - double fTempPerm909; - double fTempPerm910; - double fTempPerm911; - double fTempPerm912; - double fTempPerm913; - double fTempPerm914; - double fTempPerm915; - double fTempPerm916; - double fTempPerm917; - double fTempPerm918; - double fTempPerm919; - double fTempPerm920; - double fTempPerm921; - double fTempPerm922; - double fTempPerm923; - double fTempPerm924; - double fTempPerm925; - double fTempPerm926; - double fTempPerm927; - double fTempPerm928; - double fTempPerm929; - double fTempPerm930; - double fTempPerm931; - double fTempPerm932; - double fTempPerm933; - double fTempPerm934; - double fTempPerm935; - double fTempPerm936; - double fTempPerm937; - double fTempPerm938; - double fTempPerm939; - double fTempPerm940; - double fTempPerm941; - double fTempPerm942; - double fTempPerm943; - double fTempPerm944; - double fTempPerm945; - double fTempPerm946; - double fTempPerm947; - double fTempPerm948; - double fTempPerm949; - double fTempPerm950; - double fTempPerm951; - double fTempPerm952; - double fTempPerm953; - double fTempPerm954; - double fTempPerm955; - double fTempPerm956; - double fTempPerm957; - double fTempPerm958; - double fTempPerm959; - double fTempPerm960; - double fTempPerm961; - double fTempPerm962; - double fTempPerm963; - double fTempPerm964; - double fTempPerm965; - double fTempPerm966; - double fTempPerm967; - double fTempPerm968; - double fTempPerm969; - double fTempPerm970; - double fTempPerm971; - double fTempPerm972; - double fTempPerm973; - double fTempPerm974; - double fTempPerm975; - double fTempPerm976; - double fTempPerm977; - double fTempPerm978; - double fTempPerm979; - double fTempPerm980; - double fTempPerm981; - double fTempPerm982; - double fTempPerm983; - double fTempPerm984; - double fTempPerm985; - double fTempPerm986; - double fTempPerm987; - double fTempPerm988; - double fTempPerm989; - double fTempPerm990; - double fTempPerm991; - double fTempPerm992; - double fTempPerm993; - double fTempPerm994; - double fTempPerm995; - double fTempPerm996; - double fTempPerm997; - double fTempPerm998; - double fTempPerm999; - double fTempPerm1000; - double fTempPerm1001; - double fTempPerm1002; - double fTempPerm1003; - double fTempPerm1004; - double fTempPerm1005; - double fTempPerm1006; - double fTempPerm1007; - double fTempPerm1008; - double fTempPerm1009; - double fTempPerm1010; - double fTempPerm1011; - double fTempPerm1012; - double fTempPerm1013; - double fTempPerm1014; - double fTempPerm1015; - double fTempPerm1016; - double fTempPerm1017; - double fTempPerm1018; - double fTempPerm1019; - double fTempPerm1020; - double fTempPerm1021; - double fTempPerm1022; - double fTempPerm1023; - double fTempPerm1024; - double fTempPerm1025; - double fTempPerm1026; - double fTempPerm1027; - double fTempPerm1028; - double fTempPerm1029; - double fTempPerm1030; - double fTempPerm1031; - double fTempPerm1032; - double fTempPerm1033; - double fTempPerm1034; - double fTempPerm1035; - double fTempPerm1036; - double fTempPerm1037; - double fTempPerm1038; - double fTempPerm1039; - double fTempPerm1040; - double fTempPerm1041; - double fTempPerm1042; - double fTempPerm1043; - double fTempPerm1044; - double fTempPerm1045; - double fTempPerm1046; - double fTempPerm1047; - double fTempPerm1048; - double fTempPerm1049; - double fTempPerm1050; - double fTempPerm1051; - double fTempPerm1052; - double fTempPerm1053; - double fTempPerm1054; - double fTempPerm1055; - double fTempPerm1056; - double fTempPerm1057; - double fTempPerm1058; - double fTempPerm1059; - double fTempPerm1060; - double fTempPerm1061; - double fTempPerm1062; - double fTempPerm1063; - double fTempPerm1064; - double fTempPerm1065; - double fTempPerm1066; - double fTempPerm1067; - double fTempPerm1068; - double fTempPerm1069; - double fTempPerm1070; - double fTempPerm1071; - double fTempPerm1072; - double fTempPerm1073; - double fTempPerm1074; - double fTempPerm1075; - double fTempPerm1076; - double fTempPerm1077; - double fTempPerm1078; - double fTempPerm1079; - double fTempPerm1080; - double fTempPerm1081; - double fTempPerm1082; - double fTempPerm1083; - double fTempPerm1084; - double fTempPerm1085; - double fTempPerm1086; - double fTempPerm1087; - double fTempPerm1088; - double fTempPerm1089; - double fTempPerm1090; - double fTempPerm1091; - double fTempPerm1092; - double fTempPerm1093; - double fTempPerm1094; - double fTempPerm1095; - double fTempPerm1096; - double fTempPerm1097; - double fTempPerm1098; - double fTempPerm1099; - double fTempPerm1100; - double fTempPerm1101; - double fTempPerm1102; - double fTempPerm1103; - double fTempPerm1104; - double fTempPerm1105; - double fTempPerm1106; - double fTempPerm1107; - double fTempPerm1108; - double fTempPerm1109; - double fTempPerm1110; - double fTempPerm1111; - double fTempPerm1112; - double fTempPerm1113; - double fTempPerm1114; - double fTempPerm1115; - double fTempPerm1116; - double fTempPerm1117; - double fTempPerm1118; - double fTempPerm1119; - double fTempPerm1120; - double fTempPerm1121; - double fTempPerm1122; - double fTempPerm1123; - double fTempPerm1124; - double fTempPerm1125; - double fTempPerm1126; - double fTempPerm1127; - double fTempPerm1128; - double fTempPerm1129; - double fTempPerm1130; - double fTempPerm1131; - double fTempPerm1132; - double fTempPerm1133; - double fTempPerm1134; - double fTempPerm1135; - double fTempPerm1136; - double fTempPerm1137; - double fTempPerm1138; - double fTempPerm1139; - double fTempPerm1140; - double fTempPerm1141; - double fTempPerm1142; - double fTempPerm1143; - double fTempPerm1144; - double fTempPerm1145; - double fTempPerm1146; - double fTempPerm1147; - double fTempPerm1148; - double fTempPerm1149; - double fTempPerm1150; - double fTempPerm1151; - double fTempPerm1152; - double fTempPerm1153; - double fTempPerm1154; - double fTempPerm1155; - double fTempPerm1156; - double fTempPerm1157; - double fTempPerm1158; - double fTempPerm1159; - double fTempPerm1160; - double fTempPerm1161; - double fTempPerm1162; - double fTempPerm1163; - double fTempPerm1164; - double fTempPerm1165; - double fTempPerm1166; - double fTempPerm1167; - double fTempPerm1168; - double fTempPerm1169; - double fTempPerm1170; - double fTempPerm1171; - double fTempPerm1172; - double fTempPerm1173; - double fTempPerm1174; - double fTempPerm1175; - double fTempPerm1176; - double fTempPerm1177; - double fTempPerm1178; - double fTempPerm1179; - double fTempPerm1180; - double fTempPerm1181; - double fTempPerm1182; - double fTempPerm1183; - double fTempPerm1184; - double fTempPerm1185; - double fTempPerm1186; - double fTempPerm1187; - double fTempPerm1188; - double fTempPerm1189; - double fTempPerm1190; - double fTempPerm1191; - double fTempPerm1192; - double fTempPerm1193; - double fTempPerm1194; - double fTempPerm1195; - double fTempPerm1196; - double fTempPerm1197; - double fTempPerm1198; - double fTempPerm1199; - double fTempPerm1200; - double fTempPerm1201; - double fTempPerm1202; - double fTempPerm1203; - double fTempPerm1204; - double fTempPerm1205; - double fTempPerm1206; - double fTempPerm1207; - double fTempPerm1208; - double fTempPerm1209; - double fTempPerm1210; - double fTempPerm1211; - double fTempPerm1212; - double fTempPerm1213; - double fTempPerm1214; - double fTempPerm1215; - double fTempPerm1216; - double fTempPerm1217; - double fTempPerm1218; - double fTempPerm1219; - double fTempPerm1220; - double fTempPerm1221; - double fTempPerm1222; - double fTempPerm1223; - double fTempPerm1224; - double fTempPerm1225; - double fTempPerm1226; - double fTempPerm1227; - double fTempPerm1228; - double fTempPerm1229; - double fTempPerm1230; - double fTempPerm1231; - double fTempPerm1232; - double fTempPerm1233; - double fTempPerm1234; - double fTempPerm1235; - double fTempPerm1236; - double fTempPerm1237; - double fTempPerm1238; - double fTempPerm1239; - double fTempPerm1240; - double fTempPerm1241; - double fTempPerm1242; - double fTempPerm1243; - double fTempPerm1244; - double fTempPerm1245; - double fTempPerm1246; - double fTempPerm1247; - double fTempPerm1248; - double fTempPerm1249; - double fTempPerm1250; - double fTempPerm1251; - double fTempPerm1252; - double fTempPerm1253; - double fTempPerm1254; - double fTempPerm1255; - double fTempPerm1256; - double fTempPerm1257; - double fTempPerm1258; - double fTempPerm1259; - double fTempPerm1260; - double fTempPerm1261; - double fTempPerm1262; - double fTempPerm1263; - double fTempPerm1264; - double fTempPerm1265; - double fTempPerm1266; - double fTempPerm1267; - double fTempPerm1268; - double fTempPerm1269; - double fTempPerm1270; - double fTempPerm1271; - double fTempPerm1272; - double fTempPerm1273; - double fTempPerm1274; - double fTempPerm1275; - double fTempPerm1276; - double fTempPerm1277; - double fTempPerm1278; - double fTempPerm1279; - double fTempPerm1280; - double fTempPerm1281; - double fTempPerm1282; - double fTempPerm1283; - double fTempPerm1284; - double fTempPerm1285; - double fTempPerm1286; - double fTempPerm1287; - double fTempPerm1288; - double fTempPerm1289; - double fTempPerm1290; - double fTempPerm1291; - double fTempPerm1292; - double fTempPerm1293; - double fTempPerm1294; - double fTempPerm1295; - double fTempPerm1296; - double fTempPerm1297; - double fTempPerm1298; - double fTempPerm1299; - double fTempPerm1300; - double fTempPerm1301; - double fTempPerm1302; - double fTempPerm1303; - double fTempPerm1304; - double fTempPerm1305; - double fTempPerm1306; - double fTempPerm1307; - double fTempPerm1308; - double fTempPerm1309; - double fTempPerm1310; - double fTempPerm1311; - double fTempPerm1312; - double fTempPerm1313; - double fTempPerm1314; - double fTempPerm1315; - double fTempPerm1316; - double fTempPerm1317; - double fTempPerm1318; - double fTempPerm1319; - double fTempPerm1320; - double fTempPerm1321; - double fTempPerm1322; - double fTempPerm1323; - double fTempPerm1324; - double fTempPerm1325; - double fTempPerm1326; - double fTempPerm1327; - double fTempPerm1328; - double fTempPerm1329; - double fTempPerm1330; - double fTempPerm1331; - double fTempPerm1332; - double fTempPerm1333; - double fTempPerm1334; - double fTempPerm1335; - double fTempPerm1336; - double fTempPerm1337; - double fTempPerm1338; - double fTempPerm1339; - double fTempPerm1340; - double fTempPerm1341; - double fTempPerm1342; - double fTempPerm1343; - double fTempPerm1344; - double fTempPerm1345; - double fTempPerm1346; - double fTempPerm1347; - double fTempPerm1348; - double fTempPerm1349; - double fTempPerm1350; - double fTempPerm1351; - double fTempPerm1352; - double fTempPerm1353; - double fTempPerm1354; - double fTempPerm1355; - double fTempPerm1356; - double fTempPerm1357; - double fTempPerm1358; - double fTempPerm1359; - double fTempPerm1360; - double fTempPerm1361; - double fTempPerm1362; - double fTempPerm1363; - double fTempPerm1364; - double fTempPerm1365; - double fTempPerm1366; - double fTempPerm1367; - double fTempPerm1368; - double fTempPerm1369; - double fTempPerm1370; - double fTempPerm1371; - double fTempPerm1372; - double fTempPerm1373; - double fTempPerm1374; - double fTempPerm1375; - double fTempPerm1376; - double fTempPerm1377; - double fTempPerm1378; - double fTempPerm1379; - double fTempPerm1380; - double fTempPerm1381; - double fTempPerm1382; - double fTempPerm1383; - double fTempPerm1384; - double fTempPerm1385; - double fTempPerm1386; - double fTempPerm1387; - double fTempPerm1388; - double fTempPerm1389; - double fTempPerm1390; - double fTempPerm1391; - double fTempPerm1392; - double fTempPerm1393; - double fTempPerm1394; - double fTempPerm1395; - double fTempPerm1396; - double fTempPerm1397; - double fTempPerm1398; - double fTempPerm1399; - double fTempPerm1400; - double fTempPerm1401; - double fTempPerm1402; - double fTempPerm1403; - double fTempPerm1404; - double fTempPerm1405; - double fTempPerm1406; - double fTempPerm1407; - double fTempPerm1408; - double fTempPerm1409; - double fTempPerm1410; - double fTempPerm1411; - double fTempPerm1412; - double fTempPerm1413; - double fTempPerm1414; - double fTempPerm1415; - double fTempPerm1416; - double fTempPerm1417; - double fTempPerm1418; - double fTempPerm1419; - double fTempPerm1420; - double fTempPerm1421; - double fTempPerm1422; - double fTempPerm1423; - double fTempPerm1424; - double fTempPerm1425; - double fTempPerm1426; - double fTempPerm1427; - double fTempPerm1428; - double fTempPerm1429; - double fTempPerm1430; - double fTempPerm1431; - double fTempPerm1432; - double fTempPerm1433; - double fTempPerm1434; - double fTempPerm1435; - double fTempPerm1436; - double fTempPerm1437; - double fTempPerm1438; - double fTempPerm1439; - double fTempPerm1440; - double fTempPerm1441; - double fTempPerm1442; - double fTempPerm1443; - double fTempPerm1444; - double fTempPerm1445; - double fTempPerm1446; - double fTempPerm1447; - double fTempPerm1448; - double fTempPerm1449; - double fTempPerm1450; - double fTempPerm1451; - double fTempPerm1452; - double fTempPerm1453; - double fTempPerm1454; - double fTempPerm1455; - double fTempPerm1456; - double fTempPerm1457; - double fTempPerm1458; - double fTempPerm1459; - double fTempPerm1460; - double fTempPerm1461; - double fTempPerm1462; - double fTempPerm1463; - double fTempPerm1464; - double fTempPerm1465; - double fTempPerm1466; - double fTempPerm1467; - double fTempPerm1468; - double fTempPerm1469; - double fTempPerm1470; - double fTempPerm1471; - double fTempPerm1472; - double fTempPerm1473; - double fTempPerm1474; - double fTempPerm1475; - double fTempPerm1476; - double fTempPerm1477; - double fTempPerm1478; - double fTempPerm1479; - double fTempPerm1480; - double fTempPerm1481; - double fTempPerm1482; - double fTempPerm1483; - double fTempPerm1484; - double fTempPerm1485; - double fTempPerm1486; - double fTempPerm1487; - double fTempPerm1488; - double fTempPerm1489; - double fTempPerm1490; - double fTempPerm1491; - double fTempPerm1492; - double fTempPerm1493; - double fTempPerm1494; - double fTempPerm1495; - double fTempPerm1496; - double fTempPerm1497; - double fTempPerm1498; - double fTempPerm1499; - double fTempPerm1500; - double fTempPerm1501; - double fTempPerm1502; - double fTempPerm1503; - double fTempPerm1504; - double fTempPerm1505; - double fTempPerm1506; - double fTempPerm1507; - double fTempPerm1508; - double fTempPerm1509; - double fTempPerm1510; - double fTempPerm1511; - double fTempPerm1512; - double fTempPerm1513; - double fTempPerm1514; - double fTempPerm1515; - double fTempPerm1516; - double fTempPerm1517; - double fTempPerm1518; - double fTempPerm1519; - double fTempPerm1520; - double fTempPerm1521; - double fTempPerm1522; - double fTempPerm1523; - double fTempPerm1524; - double fTempPerm1525; - double fTempPerm1526; - double fTempPerm1527; - double fTempPerm1528; - double fTempPerm1529; - double fTempPerm1530; - double fTempPerm1531; - double fTempPerm1532; - double fTempPerm1533; - double fTempPerm1534; - double fTempPerm1535; - double fTempPerm1536; - double fTempPerm1537; - double fTempPerm1538; - double fTempPerm1539; - double fTempPerm1540; - double fTempPerm1541; - double fTempPerm1542; - double fTempPerm1543; - double fTempPerm1544; - double fTempPerm1545; - double fTempPerm1546; - double fTempPerm1547; - double fTempPerm1548; - double fTempPerm1549; - double fTempPerm1550; - double fTempPerm1551; - double fTempPerm1552; - double fTempPerm1553; - double fTempPerm1554; - double fTempPerm1555; - double fTempPerm1556; - double fTempPerm1557; - double fTempPerm1558; - double fTempPerm1559; - double fTempPerm1560; - double fTempPerm1561; - double fTempPerm1562; - double fTempPerm1563; - double fTempPerm1564; - double fTempPerm1565; - double fTempPerm1566; - double fTempPerm1567; - double fTempPerm1568; - double fTempPerm1569; - double fTempPerm1570; - double fTempPerm1571; - double fTempPerm1572; - double fTempPerm1573; - double fTempPerm1574; - double fTempPerm1575; - double fTempPerm1576; - double fTempPerm1577; - double fTempPerm1578; - double fTempPerm1579; - double fTempPerm1580; - double fTempPerm1581; - double fTempPerm1582; - double fTempPerm1583; - double fTempPerm1584; - double fTempPerm1585; - double fTempPerm1586; - double fTempPerm1587; - double fTempPerm1588; - double fTempPerm1589; - double fTempPerm1590; - double fTempPerm1591; - double fTempPerm1592; - double fTempPerm1593; - double fTempPerm1594; - double fTempPerm1595; - double fTempPerm1596; - double fTempPerm1597; - double fTempPerm1598; - double fTempPerm1599; - double fTempPerm1600; - double fTempPerm1601; - double fTempPerm1602; - double fTempPerm1603; - double fTempPerm1604; - double fTempPerm1605; - double fTempPerm1606; - double fTempPerm1607; - double fTempPerm1608; - double fTempPerm1609; - double fTempPerm1610; - double fTempPerm1611; - double fTempPerm1612; - double fTempPerm1613; - double fTempPerm1614; - double fTempPerm1615; - double fTempPerm1616; - double fTempPerm1617; - double fTempPerm1618; - double fTempPerm1619; - double fTempPerm1620; - double fTempPerm1621; - double fTempPerm1622; - double fTempPerm1623; - double fTempPerm1624; - double fTempPerm1625; - double fTempPerm1626; - double fTempPerm1627; - double fTempPerm1628; - double fTempPerm1629; - double fTempPerm1630; - double fTempPerm1631; - double fTempPerm1632; - double fTempPerm1633; - double fTempPerm1634; - double fTempPerm1635; - double fTempPerm1636; - double fTempPerm1637; - double fTempPerm1638; - double fTempPerm1639; - double fTempPerm1640; - double fTempPerm1641; - double fTempPerm1642; - double fTempPerm1643; - double fTempPerm1644; - double fTempPerm1645; - double fTempPerm1646; - double fTempPerm1647; - double fTempPerm1648; - double fTempPerm1649; - double fTempPerm1650; - double fTempPerm1651; - double fTempPerm1652; - double fTempPerm1653; - double fTempPerm1654; - double fTempPerm1655; - double fTempPerm1656; - double fTempPerm1657; - double fTempPerm1658; - double fTempPerm1659; - double fTempPerm1660; - double fTempPerm1661; - double fTempPerm1662; - double fTempPerm1663; - double fTempPerm1664; - double fTempPerm1665; - double fTempPerm1666; - double fTempPerm1667; - double fTempPerm1668; - double fTempPerm1669; - double fTempPerm1670; - double fTempPerm1671; - double fTempPerm1672; - double fTempPerm1673; - double fTempPerm1674; - double fTempPerm1675; - double fTempPerm1676; - double fTempPerm1677; - double fTempPerm1678; - double fTempPerm1679; - double fTempPerm1680; - double fTempPerm1681; - double fTempPerm1682; - double fTempPerm1683; - double fTempPerm1684; - double fTempPerm1685; - double fTempPerm1686; - double fTempPerm1687; - double fTempPerm1688; - double fTempPerm1689; - double fTempPerm1690; - double fTempPerm1691; - double fTempPerm1692; - double fTempPerm1693; - double fTempPerm1694; - double fTempPerm1695; - double fTempPerm1696; - double fTempPerm1697; - double fTempPerm1698; - double fTempPerm1699; - double fTempPerm1700; - double fTempPerm1701; - double fTempPerm1702; - double fTempPerm1703; - double fTempPerm1704; - double fTempPerm1705; - double fTempPerm1706; - double fTempPerm1707; - double fTempPerm1708; - double fTempPerm1709; - double fTempPerm1710; - double fTempPerm1711; - double fTempPerm1712; - double fTempPerm1713; - double fTempPerm1714; - double fTempPerm1715; - double fTempPerm1716; - double fTempPerm1717; - double fTempPerm1718; - double fTempPerm1719; - double fTempPerm1720; - double fTempPerm1721; - double fTempPerm1722; - double fTempPerm1723; - double fTempPerm1724; - double fTempPerm1725; - double fTempPerm1726; - double fTempPerm1727; - double fTempPerm1728; - double fTempPerm1729; - double fTempPerm1730; - double fTempPerm1731; - double fTempPerm1732; - double fTempPerm1733; - double fTempPerm1734; - double fTempPerm1735; - double fTempPerm1736; - double fTempPerm1737; - double fTempPerm1738; - double fTempPerm1739; - double fTempPerm1740; - double fTempPerm1741; - double fTempPerm1742; - double fTempPerm1743; - double fTempPerm1744; - double fTempPerm1745; - double fTempPerm1746; - double fTempPerm1747; - double fTempPerm1748; - double fTempPerm1749; - double fTempPerm1750; - double fTempPerm1751; - double fTempPerm1752; - double fTempPerm1753; - double fTempPerm1754; - double fTempPerm1755; - double fTempPerm1756; - double fTempPerm1757; - double fTempPerm1758; - double fTempPerm1759; - double fTempPerm1760; - double fTempPerm1761; - double fTempPerm1762; - double fTempPerm1763; - double fTempPerm1764; - double fTempPerm1765; - double fTempPerm1766; - double fTempPerm1767; - double fTempPerm1768; - double fTempPerm1769; - double fTempPerm1770; - double fTempPerm1771; - double fTempPerm1772; - double fTempPerm1773; - double fTempPerm1774; - double fTempPerm1775; - double fTempPerm1776; - double fTempPerm1777; - double fTempPerm1778; - double fTempPerm1779; - double fTempPerm1780; - double fTempPerm1781; - double fTempPerm1782; - double fTempPerm1783; - double fTempPerm1784; - double fTempPerm1785; - double fTempPerm1786; - double fTempPerm1787; - double fTempPerm1788; - double fTempPerm1789; - double fTempPerm1790; - double fTempPerm1791; - double fTempPerm1792; - double fTempPerm1793; - double fTempPerm1794; - double fTempPerm1795; - double fTempPerm1796; - double fTempPerm1797; - double fTempPerm1798; - double fTempPerm1799; - double fTempPerm1800; - double fTempPerm1801; - double fTempPerm1802; - double fTempPerm1803; - double fTempPerm1804; - double fTempPerm1805; - double fTempPerm1806; - double fTempPerm1807; - double fTempPerm1808; - double fTempPerm1809; - double fTempPerm1810; - double fTempPerm1811; - double fTempPerm1812; - double fTempPerm1813; - double fTempPerm1814; - double fTempPerm1815; - double fTempPerm1816; - double fTempPerm1817; - double fTempPerm1818; - double fTempPerm1819; - double fTempPerm1820; - double fTempPerm1821; - double fTempPerm1822; - double fTempPerm1823; - double fTempPerm1824; - double fTempPerm1825; - double fTempPerm1826; - double fTempPerm1827; - double fTempPerm1828; - double fTempPerm1829; - double fTempPerm1830; - double fTempPerm1831; - double fTempPerm1832; - double fTempPerm1833; - double fTempPerm1834; - double fTempPerm1835; - double fTempPerm1836; - double fTempPerm1837; - double fTempPerm1838; - double fTempPerm1839; - double fTempPerm1840; - double fTempPerm1841; - double fTempPerm1842; - double fTempPerm1843; - double fTempPerm1844; - double fTempPerm1845; - double fTempPerm1846; - double fTempPerm1847; - double fTempPerm1848; - double fTempPerm1849; - double fTempPerm1850; - double fTempPerm1851; - double fTempPerm1852; - double fTempPerm1853; - double fTempPerm1854; - double fTempPerm1855; - double fTempPerm1856; - double fTempPerm1857; - double fTempPerm1858; - double fTempPerm1859; - double fTempPerm1860; - double fTempPerm1861; - double fTempPerm1862; - double fTempPerm1863; - double fTempPerm1864; - double fTempPerm1865; - double fTempPerm1866; - double fTempPerm1867; - double fTempPerm1868; - double fTempPerm1869; - double fTempPerm1870; - double fTempPerm1871; - double fTempPerm1872; - double fTempPerm1873; - double fTempPerm1874; - double fTempPerm1875; - double fTempPerm1876; - double fTempPerm1877; - double fTempPerm1878; - double fTempPerm1879; - double fTempPerm1880; - double fTempPerm1881; - double fTempPerm1882; - double fTempPerm1883; - double fTempPerm1884; - double fTempPerm1885; - double fTempPerm1886; - double fTempPerm1887; - double fTempPerm1888; - double fTempPerm1889; - double fTempPerm1890; - double fTempPerm1891; - double fTempPerm1892; - double fTempPerm1893; - double fTempPerm1894; - double fTempPerm1895; - double fTempPerm1896; - double fTempPerm1897; - double fTempPerm1898; - double fTempPerm1899; - double fTempPerm1900; - double fTempPerm1901; - double fTempPerm1902; - double fTempPerm1903; - double fTempPerm1904; - double fTempPerm1905; - double fTempPerm1906; - double fTempPerm1907; - double fTempPerm1908; - double fTempPerm1909; - double fTempPerm1910; - double fTempPerm1911; - double fTempPerm1912; - double fTempPerm1913; - double fTempPerm1914; - double fTempPerm1915; - double fTempPerm1916; - double fTempPerm1917; - double fTempPerm1918; - double fTempPerm1919; - double fTempPerm1920; - double fTempPerm1921; - double fTempPerm1922; - double fTempPerm1923; - double fTempPerm1924; - double fTempPerm1925; - double fTempPerm1926; - double fTempPerm1927; - double fTempPerm1928; - double fTempPerm1929; - double fTempPerm1930; - double fTempPerm1931; - double fTempPerm1932; - double fTempPerm1933; - double fTempPerm1934; - double fTempPerm1935; - double fTempPerm1936; - double fTempPerm1937; - double fTempPerm1938; - double fTempPerm1939; - double fTempPerm1940; - double fTempPerm1941; - double fTempPerm1942; - double fTempPerm1943; - double fTempPerm1944; - double fTempPerm1945; - double fTempPerm1946; - double fTempPerm1947; - double fTempPerm1948; - double fTempPerm1949; - double fTempPerm1950; - double fTempPerm1951; - double fTempPerm1952; - double fTempPerm1953; - double fTempPerm1954; - double fTempPerm1955; - double fTempPerm1956; - double fTempPerm1957; - double fTempPerm1958; - double fTempPerm1959; - double fTempPerm1960; - double fTempPerm1961; - double fTempPerm1962; - double fTempPerm1963; - double fTempPerm1964; - double fTempPerm1965; - double fTempPerm1966; - double fTempPerm1967; - double fTempPerm1968; - double fTempPerm1969; - double fTempPerm1970; - double fTempPerm1971; - double fTempPerm1972; - double fTempPerm1973; - double fTempPerm1974; - double fTempPerm1975; - double fTempPerm1976; - double fTempPerm1977; - double fTempPerm1978; - double fTempPerm1979; - double fTempPerm1980; - double fTempPerm1981; - double fTempPerm1982; - double fTempPerm1983; - double fTempPerm1984; - double fTempPerm1985; - double fTempPerm1986; - double fTempPerm1987; - double fTempPerm1988; - double fTempPerm1989; - double fTempPerm1990; - double fTempPerm1991; - double fTempPerm1992; - double fTempPerm1993; - double fTempPerm1994; - double fTempPerm1995; - double fTempPerm1996; - double fTempPerm1997; - double fTempPerm1998; - double fTempPerm1999; - double fTempPerm2000; - double fTempPerm2001; - double fTempPerm2002; - double fTempPerm2003; - double fTempPerm2004; - double fTempPerm2005; - double fTempPerm2006; - double fTempPerm2007; - double fTempPerm2008; - double fTempPerm2009; - double fTempPerm2010; - double fTempPerm2011; - double fTempPerm2012; - double fTempPerm2013; - double fTempPerm2014; - double fTempPerm2015; - double fTempPerm2016; - double fTempPerm2017; - double fTempPerm2018; - double fTempPerm2019; - double fTempPerm2020; - double fTempPerm2021; - double fTempPerm2022; - double fTempPerm2023; - double fTempPerm2024; - double fTempPerm2025; - double fTempPerm2026; - double fTempPerm2027; - double fTempPerm2028; - double fTempPerm2029; - double fTempPerm2030; - double fTempPerm2031; - double fTempPerm2032; - double fTempPerm2033; - double fTempPerm2034; - double fTempPerm2035; - double fTempPerm2036; - double fTempPerm2037; - double fTempPerm2038; - double fTempPerm2039; - double fTempPerm2040; - double fTempPerm2041; - double fTempPerm2042; - double fTempPerm2043; - double fTempPerm2044; - double fTempPerm2045; - double fTempPerm2046; - double fTempPerm2047; - double fTempPerm2048; - double fRec0[2]; - FAUSTFLOAT fbargraph16; - double fTempPerm2049; - double fRec19[2]; - FAUSTFLOAT fbargraph17; - int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOADecoderLebedev50Binaural3"); - m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL)"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); - m->declare("gui.lib/name", "GUI Library"); - m->declare("gui.lib/version", "1.0"); - m->declare("gui.lib/author", "Pierre Lecomte"); - m->declare("gui.lib/license", "GPL"); - m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); - m->declare("maths.lib/author", "GRAME"); - m->declare("maths.lib/copyright", "GRAME"); - m->declare("maths.lib/license", "LGPL with exception"); - } - - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 2; } - static void classInit(int samplingFreq) { - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (8e+01 / min(1.92e+05, max(1.0, (double)fSamplingFreq))); - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; - fTempPerm8 = 0; - fTempPerm9 = 0; - fTempPerm10 = 0; - fTempPerm11 = 0; - fTempPerm12 = 0; - fTempPerm13 = 0; - fTempPerm14 = 0; - fTempPerm15 = 0; - fTempPerm16 = 0; - fTempPerm17 = 0; - fTempPerm18 = 0; - fTempPerm19 = 0; - fTempPerm20 = 0; - fTempPerm21 = 0; - fTempPerm22 = 0; - fTempPerm23 = 0; - fTempPerm24 = 0; - fTempPerm25 = 0; - fTempPerm26 = 0; - fTempPerm27 = 0; - fTempPerm28 = 0; - fTempPerm29 = 0; - fTempPerm30 = 0; - fTempPerm31 = 0; - fTempPerm32 = 0; - fTempPerm33 = 0; - fTempPerm34 = 0; - fTempPerm35 = 0; - fTempPerm36 = 0; - fTempPerm37 = 0; - fTempPerm38 = 0; - fTempPerm39 = 0; - fTempPerm40 = 0; - fTempPerm41 = 0; - fTempPerm42 = 0; - fTempPerm43 = 0; - fTempPerm44 = 0; - fTempPerm45 = 0; - fTempPerm46 = 0; - fTempPerm47 = 0; - fTempPerm48 = 0; - fTempPerm49 = 0; - fTempPerm50 = 0; - fTempPerm51 = 0; - fTempPerm52 = 0; - fTempPerm53 = 0; - fTempPerm54 = 0; - fTempPerm55 = 0; - fTempPerm56 = 0; - fTempPerm57 = 0; - fTempPerm58 = 0; - fTempPerm59 = 0; - fTempPerm60 = 0; - fTempPerm61 = 0; - fTempPerm62 = 0; - fTempPerm63 = 0; - fTempPerm64 = 0; - fTempPerm65 = 0; - fTempPerm66 = 0; - fTempPerm67 = 0; - fTempPerm68 = 0; - fTempPerm69 = 0; - fTempPerm70 = 0; - fTempPerm71 = 0; - fTempPerm72 = 0; - fTempPerm73 = 0; - fTempPerm74 = 0; - fTempPerm75 = 0; - fTempPerm76 = 0; - fTempPerm77 = 0; - fTempPerm78 = 0; - fTempPerm79 = 0; - fTempPerm80 = 0; - fTempPerm81 = 0; - fTempPerm82 = 0; - fTempPerm83 = 0; - fTempPerm84 = 0; - fTempPerm85 = 0; - fTempPerm86 = 0; - fTempPerm87 = 0; - fTempPerm88 = 0; - fTempPerm89 = 0; - fTempPerm90 = 0; - fTempPerm91 = 0; - fTempPerm92 = 0; - fTempPerm93 = 0; - fTempPerm94 = 0; - fTempPerm95 = 0; - fTempPerm96 = 0; - fTempPerm97 = 0; - fTempPerm98 = 0; - fTempPerm99 = 0; - fTempPerm100 = 0; - fTempPerm101 = 0; - fTempPerm102 = 0; - fTempPerm103 = 0; - fTempPerm104 = 0; - fTempPerm105 = 0; - fTempPerm106 = 0; - fTempPerm107 = 0; - fTempPerm108 = 0; - fTempPerm109 = 0; - fTempPerm110 = 0; - fTempPerm111 = 0; - fTempPerm112 = 0; - fTempPerm113 = 0; - fTempPerm114 = 0; - fTempPerm115 = 0; - fTempPerm116 = 0; - fTempPerm117 = 0; - fTempPerm118 = 0; - fTempPerm119 = 0; - fTempPerm120 = 0; - fTempPerm121 = 0; - fTempPerm122 = 0; - fTempPerm123 = 0; - fTempPerm124 = 0; - fTempPerm125 = 0; - fTempPerm126 = 0; - fTempPerm127 = 0; - fTempPerm128 = 0; - fTempPerm129 = 0; - fTempPerm130 = 0; - fTempPerm131 = 0; - fTempPerm132 = 0; - fTempPerm133 = 0; - fTempPerm134 = 0; - fTempPerm135 = 0; - fTempPerm136 = 0; - fTempPerm137 = 0; - fTempPerm138 = 0; - fTempPerm139 = 0; - fTempPerm140 = 0; - fTempPerm141 = 0; - fTempPerm142 = 0; - fTempPerm143 = 0; - fTempPerm144 = 0; - fTempPerm145 = 0; - fTempPerm146 = 0; - fTempPerm147 = 0; - fTempPerm148 = 0; - fTempPerm149 = 0; - fTempPerm150 = 0; - fTempPerm151 = 0; - fTempPerm152 = 0; - fTempPerm153 = 0; - fTempPerm154 = 0; - fTempPerm155 = 0; - fTempPerm156 = 0; - fTempPerm157 = 0; - fTempPerm158 = 0; - fTempPerm159 = 0; - fTempPerm160 = 0; - fTempPerm161 = 0; - fTempPerm162 = 0; - fTempPerm163 = 0; - fTempPerm164 = 0; - fTempPerm165 = 0; - fTempPerm166 = 0; - fTempPerm167 = 0; - fTempPerm168 = 0; - fTempPerm169 = 0; - fTempPerm170 = 0; - fTempPerm171 = 0; - fTempPerm172 = 0; - fTempPerm173 = 0; - fTempPerm174 = 0; - fTempPerm175 = 0; - fTempPerm176 = 0; - fTempPerm177 = 0; - fTempPerm178 = 0; - fTempPerm179 = 0; - fTempPerm180 = 0; - fTempPerm181 = 0; - fTempPerm182 = 0; - fTempPerm183 = 0; - fTempPerm184 = 0; - fTempPerm185 = 0; - fTempPerm186 = 0; - fTempPerm187 = 0; - fTempPerm188 = 0; - fTempPerm189 = 0; - fTempPerm190 = 0; - fTempPerm191 = 0; - fTempPerm192 = 0; - fTempPerm193 = 0; - fTempPerm194 = 0; - fTempPerm195 = 0; - fTempPerm196 = 0; - fTempPerm197 = 0; - fTempPerm198 = 0; - fTempPerm199 = 0; - fTempPerm200 = 0; - fTempPerm201 = 0; - fTempPerm202 = 0; - fTempPerm203 = 0; - fTempPerm204 = 0; - fTempPerm205 = 0; - fTempPerm206 = 0; - fTempPerm207 = 0; - fTempPerm208 = 0; - fTempPerm209 = 0; - fTempPerm210 = 0; - fTempPerm211 = 0; - fTempPerm212 = 0; - fTempPerm213 = 0; - fTempPerm214 = 0; - fTempPerm215 = 0; - fTempPerm216 = 0; - fTempPerm217 = 0; - fTempPerm218 = 0; - fTempPerm219 = 0; - fTempPerm220 = 0; - fTempPerm221 = 0; - fTempPerm222 = 0; - fTempPerm223 = 0; - fTempPerm224 = 0; - fTempPerm225 = 0; - fTempPerm226 = 0; - fTempPerm227 = 0; - fTempPerm228 = 0; - fTempPerm229 = 0; - fTempPerm230 = 0; - fTempPerm231 = 0; - fTempPerm232 = 0; - fTempPerm233 = 0; - fTempPerm234 = 0; - fTempPerm235 = 0; - fTempPerm236 = 0; - fTempPerm237 = 0; - fTempPerm238 = 0; - fTempPerm239 = 0; - fTempPerm240 = 0; - fTempPerm241 = 0; - fTempPerm242 = 0; - fTempPerm243 = 0; - fTempPerm244 = 0; - fTempPerm245 = 0; - fTempPerm246 = 0; - fTempPerm247 = 0; - fTempPerm248 = 0; - fTempPerm249 = 0; - fTempPerm250 = 0; - fTempPerm251 = 0; - fTempPerm252 = 0; - fTempPerm253 = 0; - fTempPerm254 = 0; - fTempPerm255 = 0; - fTempPerm256 = 0; - fTempPerm257 = 0; - fTempPerm258 = 0; - fTempPerm259 = 0; - fTempPerm260 = 0; - fTempPerm261 = 0; - fTempPerm262 = 0; - fTempPerm263 = 0; - fTempPerm264 = 0; - fTempPerm265 = 0; - fTempPerm266 = 0; - fTempPerm267 = 0; - fTempPerm268 = 0; - fTempPerm269 = 0; - fTempPerm270 = 0; - fTempPerm271 = 0; - fTempPerm272 = 0; - fTempPerm273 = 0; - fTempPerm274 = 0; - fTempPerm275 = 0; - fTempPerm276 = 0; - fTempPerm277 = 0; - fTempPerm278 = 0; - fTempPerm279 = 0; - fTempPerm280 = 0; - fTempPerm281 = 0; - fTempPerm282 = 0; - fTempPerm283 = 0; - fTempPerm284 = 0; - fTempPerm285 = 0; - fTempPerm286 = 0; - fTempPerm287 = 0; - fTempPerm288 = 0; - fTempPerm289 = 0; - fTempPerm290 = 0; - fTempPerm291 = 0; - fTempPerm292 = 0; - fTempPerm293 = 0; - fTempPerm294 = 0; - fTempPerm295 = 0; - fTempPerm296 = 0; - fTempPerm297 = 0; - fTempPerm298 = 0; - fTempPerm299 = 0; - fTempPerm300 = 0; - fTempPerm301 = 0; - fTempPerm302 = 0; - fTempPerm303 = 0; - fTempPerm304 = 0; - fTempPerm305 = 0; - fTempPerm306 = 0; - fTempPerm307 = 0; - fTempPerm308 = 0; - fTempPerm309 = 0; - fTempPerm310 = 0; - fTempPerm311 = 0; - fTempPerm312 = 0; - fTempPerm313 = 0; - fTempPerm314 = 0; - fTempPerm315 = 0; - fTempPerm316 = 0; - fTempPerm317 = 0; - fTempPerm318 = 0; - fTempPerm319 = 0; - fTempPerm320 = 0; - fTempPerm321 = 0; - fTempPerm322 = 0; - fTempPerm323 = 0; - fTempPerm324 = 0; - fTempPerm325 = 0; - fTempPerm326 = 0; - fTempPerm327 = 0; - fTempPerm328 = 0; - fTempPerm329 = 0; - fTempPerm330 = 0; - fTempPerm331 = 0; - fTempPerm332 = 0; - fTempPerm333 = 0; - fTempPerm334 = 0; - fTempPerm335 = 0; - fTempPerm336 = 0; - fTempPerm337 = 0; - fTempPerm338 = 0; - fTempPerm339 = 0; - fTempPerm340 = 0; - fTempPerm341 = 0; - fTempPerm342 = 0; - fTempPerm343 = 0; - fTempPerm344 = 0; - fTempPerm345 = 0; - fTempPerm346 = 0; - fTempPerm347 = 0; - fTempPerm348 = 0; - fTempPerm349 = 0; - fTempPerm350 = 0; - fTempPerm351 = 0; - fTempPerm352 = 0; - fTempPerm353 = 0; - fTempPerm354 = 0; - fTempPerm355 = 0; - fTempPerm356 = 0; - fTempPerm357 = 0; - fTempPerm358 = 0; - fTempPerm359 = 0; - fTempPerm360 = 0; - fTempPerm361 = 0; - fTempPerm362 = 0; - fTempPerm363 = 0; - fTempPerm364 = 0; - fTempPerm365 = 0; - fTempPerm366 = 0; - fTempPerm367 = 0; - fTempPerm368 = 0; - fTempPerm369 = 0; - fTempPerm370 = 0; - fTempPerm371 = 0; - fTempPerm372 = 0; - fTempPerm373 = 0; - fTempPerm374 = 0; - fTempPerm375 = 0; - fTempPerm376 = 0; - fTempPerm377 = 0; - fTempPerm378 = 0; - fTempPerm379 = 0; - fTempPerm380 = 0; - fTempPerm381 = 0; - fTempPerm382 = 0; - fTempPerm383 = 0; - fTempPerm384 = 0; - fTempPerm385 = 0; - fTempPerm386 = 0; - fTempPerm387 = 0; - fTempPerm388 = 0; - fTempPerm389 = 0; - fTempPerm390 = 0; - fTempPerm391 = 0; - fTempPerm392 = 0; - fTempPerm393 = 0; - fTempPerm394 = 0; - fTempPerm395 = 0; - fTempPerm396 = 0; - fTempPerm397 = 0; - fTempPerm398 = 0; - fTempPerm399 = 0; - fTempPerm400 = 0; - fTempPerm401 = 0; - fTempPerm402 = 0; - fTempPerm403 = 0; - fTempPerm404 = 0; - fTempPerm405 = 0; - fTempPerm406 = 0; - fTempPerm407 = 0; - fTempPerm408 = 0; - fTempPerm409 = 0; - fTempPerm410 = 0; - fTempPerm411 = 0; - fTempPerm412 = 0; - fTempPerm413 = 0; - fTempPerm414 = 0; - fTempPerm415 = 0; - fTempPerm416 = 0; - fTempPerm417 = 0; - fTempPerm418 = 0; - fTempPerm419 = 0; - fTempPerm420 = 0; - fTempPerm421 = 0; - fTempPerm422 = 0; - fTempPerm423 = 0; - fTempPerm424 = 0; - fTempPerm425 = 0; - fTempPerm426 = 0; - fTempPerm427 = 0; - fTempPerm428 = 0; - fTempPerm429 = 0; - fTempPerm430 = 0; - fTempPerm431 = 0; - fTempPerm432 = 0; - fTempPerm433 = 0; - fTempPerm434 = 0; - fTempPerm435 = 0; - fTempPerm436 = 0; - fTempPerm437 = 0; - fTempPerm438 = 0; - fTempPerm439 = 0; - fTempPerm440 = 0; - fTempPerm441 = 0; - fTempPerm442 = 0; - fTempPerm443 = 0; - fTempPerm444 = 0; - fTempPerm445 = 0; - fTempPerm446 = 0; - fTempPerm447 = 0; - fTempPerm448 = 0; - fTempPerm449 = 0; - fTempPerm450 = 0; - fTempPerm451 = 0; - fTempPerm452 = 0; - fTempPerm453 = 0; - fTempPerm454 = 0; - fTempPerm455 = 0; - fTempPerm456 = 0; - fTempPerm457 = 0; - fTempPerm458 = 0; - fTempPerm459 = 0; - fTempPerm460 = 0; - fTempPerm461 = 0; - fTempPerm462 = 0; - fTempPerm463 = 0; - fTempPerm464 = 0; - fTempPerm465 = 0; - fTempPerm466 = 0; - fTempPerm467 = 0; - fTempPerm468 = 0; - fTempPerm469 = 0; - fTempPerm470 = 0; - fTempPerm471 = 0; - fTempPerm472 = 0; - fTempPerm473 = 0; - fTempPerm474 = 0; - fTempPerm475 = 0; - fTempPerm476 = 0; - fTempPerm477 = 0; - fTempPerm478 = 0; - fTempPerm479 = 0; - fTempPerm480 = 0; - fTempPerm481 = 0; - fTempPerm482 = 0; - fTempPerm483 = 0; - fTempPerm484 = 0; - fTempPerm485 = 0; - fTempPerm486 = 0; - fTempPerm487 = 0; - fTempPerm488 = 0; - fTempPerm489 = 0; - fTempPerm490 = 0; - fTempPerm491 = 0; - fTempPerm492 = 0; - fTempPerm493 = 0; - fTempPerm494 = 0; - fTempPerm495 = 0; - fTempPerm496 = 0; - fTempPerm497 = 0; - fTempPerm498 = 0; - fTempPerm499 = 0; - fTempPerm500 = 0; - fTempPerm501 = 0; - fTempPerm502 = 0; - fTempPerm503 = 0; - fTempPerm504 = 0; - fTempPerm505 = 0; - fTempPerm506 = 0; - fTempPerm507 = 0; - fTempPerm508 = 0; - fTempPerm509 = 0; - fTempPerm510 = 0; - fTempPerm511 = 0; - fTempPerm512 = 0; - fTempPerm513 = 0; - fTempPerm514 = 0; - fTempPerm515 = 0; - fTempPerm516 = 0; - fTempPerm517 = 0; - fTempPerm518 = 0; - fTempPerm519 = 0; - fTempPerm520 = 0; - fTempPerm521 = 0; - fTempPerm522 = 0; - fTempPerm523 = 0; - fTempPerm524 = 0; - fTempPerm525 = 0; - fTempPerm526 = 0; - fTempPerm527 = 0; - fTempPerm528 = 0; - fTempPerm529 = 0; - fTempPerm530 = 0; - fTempPerm531 = 0; - fTempPerm532 = 0; - fTempPerm533 = 0; - fTempPerm534 = 0; - fTempPerm535 = 0; - fTempPerm536 = 0; - fTempPerm537 = 0; - fTempPerm538 = 0; - fTempPerm539 = 0; - fTempPerm540 = 0; - fTempPerm541 = 0; - fTempPerm542 = 0; - fTempPerm543 = 0; - fTempPerm544 = 0; - fTempPerm545 = 0; - fTempPerm546 = 0; - fTempPerm547 = 0; - fTempPerm548 = 0; - fTempPerm549 = 0; - fTempPerm550 = 0; - fTempPerm551 = 0; - fTempPerm552 = 0; - fTempPerm553 = 0; - fTempPerm554 = 0; - fTempPerm555 = 0; - fTempPerm556 = 0; - fTempPerm557 = 0; - fTempPerm558 = 0; - fTempPerm559 = 0; - fTempPerm560 = 0; - fTempPerm561 = 0; - fTempPerm562 = 0; - fTempPerm563 = 0; - fTempPerm564 = 0; - fTempPerm565 = 0; - fTempPerm566 = 0; - fTempPerm567 = 0; - fTempPerm568 = 0; - fTempPerm569 = 0; - fTempPerm570 = 0; - fTempPerm571 = 0; - fTempPerm572 = 0; - fTempPerm573 = 0; - fTempPerm574 = 0; - fTempPerm575 = 0; - fTempPerm576 = 0; - fTempPerm577 = 0; - fTempPerm578 = 0; - fTempPerm579 = 0; - fTempPerm580 = 0; - fTempPerm581 = 0; - fTempPerm582 = 0; - fTempPerm583 = 0; - fTempPerm584 = 0; - fTempPerm585 = 0; - fTempPerm586 = 0; - fTempPerm587 = 0; - fTempPerm588 = 0; - fTempPerm589 = 0; - fTempPerm590 = 0; - fTempPerm591 = 0; - fTempPerm592 = 0; - fTempPerm593 = 0; - fTempPerm594 = 0; - fTempPerm595 = 0; - fTempPerm596 = 0; - fTempPerm597 = 0; - fTempPerm598 = 0; - fTempPerm599 = 0; - fTempPerm600 = 0; - fTempPerm601 = 0; - fTempPerm602 = 0; - fTempPerm603 = 0; - fTempPerm604 = 0; - fTempPerm605 = 0; - fTempPerm606 = 0; - fTempPerm607 = 0; - fTempPerm608 = 0; - fTempPerm609 = 0; - fTempPerm610 = 0; - fTempPerm611 = 0; - fTempPerm612 = 0; - fTempPerm613 = 0; - fTempPerm614 = 0; - fTempPerm615 = 0; - fTempPerm616 = 0; - fTempPerm617 = 0; - fTempPerm618 = 0; - fTempPerm619 = 0; - fTempPerm620 = 0; - fTempPerm621 = 0; - fTempPerm622 = 0; - fTempPerm623 = 0; - fTempPerm624 = 0; - fTempPerm625 = 0; - fTempPerm626 = 0; - fTempPerm627 = 0; - fTempPerm628 = 0; - fTempPerm629 = 0; - fTempPerm630 = 0; - fTempPerm631 = 0; - fTempPerm632 = 0; - fTempPerm633 = 0; - fTempPerm634 = 0; - fTempPerm635 = 0; - fTempPerm636 = 0; - fTempPerm637 = 0; - fTempPerm638 = 0; - fTempPerm639 = 0; - fTempPerm640 = 0; - fTempPerm641 = 0; - fTempPerm642 = 0; - fTempPerm643 = 0; - fTempPerm644 = 0; - fTempPerm645 = 0; - fTempPerm646 = 0; - fTempPerm647 = 0; - fTempPerm648 = 0; - fTempPerm649 = 0; - fTempPerm650 = 0; - fTempPerm651 = 0; - fTempPerm652 = 0; - fTempPerm653 = 0; - fTempPerm654 = 0; - fTempPerm655 = 0; - fTempPerm656 = 0; - fTempPerm657 = 0; - fTempPerm658 = 0; - fTempPerm659 = 0; - fTempPerm660 = 0; - fTempPerm661 = 0; - fTempPerm662 = 0; - fTempPerm663 = 0; - fTempPerm664 = 0; - fTempPerm665 = 0; - fTempPerm666 = 0; - fTempPerm667 = 0; - fTempPerm668 = 0; - fTempPerm669 = 0; - fTempPerm670 = 0; - fTempPerm671 = 0; - fTempPerm672 = 0; - fTempPerm673 = 0; - fTempPerm674 = 0; - fTempPerm675 = 0; - fTempPerm676 = 0; - fTempPerm677 = 0; - fTempPerm678 = 0; - fTempPerm679 = 0; - fTempPerm680 = 0; - fTempPerm681 = 0; - fTempPerm682 = 0; - fTempPerm683 = 0; - fTempPerm684 = 0; - fTempPerm685 = 0; - fTempPerm686 = 0; - fTempPerm687 = 0; - fTempPerm688 = 0; - fTempPerm689 = 0; - fTempPerm690 = 0; - fTempPerm691 = 0; - fTempPerm692 = 0; - fTempPerm693 = 0; - fTempPerm694 = 0; - fTempPerm695 = 0; - fTempPerm696 = 0; - fTempPerm697 = 0; - fTempPerm698 = 0; - fTempPerm699 = 0; - fTempPerm700 = 0; - fTempPerm701 = 0; - fTempPerm702 = 0; - fTempPerm703 = 0; - fTempPerm704 = 0; - fTempPerm705 = 0; - fTempPerm706 = 0; - fTempPerm707 = 0; - fTempPerm708 = 0; - fTempPerm709 = 0; - fTempPerm710 = 0; - fTempPerm711 = 0; - fTempPerm712 = 0; - fTempPerm713 = 0; - fTempPerm714 = 0; - fTempPerm715 = 0; - fTempPerm716 = 0; - fTempPerm717 = 0; - fTempPerm718 = 0; - fTempPerm719 = 0; - fTempPerm720 = 0; - fTempPerm721 = 0; - fTempPerm722 = 0; - fTempPerm723 = 0; - fTempPerm724 = 0; - fTempPerm725 = 0; - fTempPerm726 = 0; - fTempPerm727 = 0; - fTempPerm728 = 0; - fTempPerm729 = 0; - fTempPerm730 = 0; - fTempPerm731 = 0; - fTempPerm732 = 0; - fTempPerm733 = 0; - fTempPerm734 = 0; - fTempPerm735 = 0; - fTempPerm736 = 0; - fTempPerm737 = 0; - fTempPerm738 = 0; - fTempPerm739 = 0; - fTempPerm740 = 0; - fTempPerm741 = 0; - fTempPerm742 = 0; - fTempPerm743 = 0; - fTempPerm744 = 0; - fTempPerm745 = 0; - fTempPerm746 = 0; - fTempPerm747 = 0; - fTempPerm748 = 0; - fTempPerm749 = 0; - fTempPerm750 = 0; - fTempPerm751 = 0; - fTempPerm752 = 0; - fTempPerm753 = 0; - fTempPerm754 = 0; - fTempPerm755 = 0; - fTempPerm756 = 0; - fTempPerm757 = 0; - fTempPerm758 = 0; - fTempPerm759 = 0; - fTempPerm760 = 0; - fTempPerm761 = 0; - fTempPerm762 = 0; - fTempPerm763 = 0; - fTempPerm764 = 0; - fTempPerm765 = 0; - fTempPerm766 = 0; - fTempPerm767 = 0; - fTempPerm768 = 0; - fTempPerm769 = 0; - fTempPerm770 = 0; - fTempPerm771 = 0; - fTempPerm772 = 0; - fTempPerm773 = 0; - fTempPerm774 = 0; - fTempPerm775 = 0; - fTempPerm776 = 0; - fTempPerm777 = 0; - fTempPerm778 = 0; - fTempPerm779 = 0; - fTempPerm780 = 0; - fTempPerm781 = 0; - fTempPerm782 = 0; - fTempPerm783 = 0; - fTempPerm784 = 0; - fTempPerm785 = 0; - fTempPerm786 = 0; - fTempPerm787 = 0; - fTempPerm788 = 0; - fTempPerm789 = 0; - fTempPerm790 = 0; - fTempPerm791 = 0; - fTempPerm792 = 0; - fTempPerm793 = 0; - fTempPerm794 = 0; - fTempPerm795 = 0; - fTempPerm796 = 0; - fTempPerm797 = 0; - fTempPerm798 = 0; - fTempPerm799 = 0; - fTempPerm800 = 0; - fTempPerm801 = 0; - fTempPerm802 = 0; - fTempPerm803 = 0; - fTempPerm804 = 0; - fTempPerm805 = 0; - fTempPerm806 = 0; - fTempPerm807 = 0; - fTempPerm808 = 0; - fTempPerm809 = 0; - fTempPerm810 = 0; - fTempPerm811 = 0; - fTempPerm812 = 0; - fTempPerm813 = 0; - fTempPerm814 = 0; - fTempPerm815 = 0; - fTempPerm816 = 0; - fTempPerm817 = 0; - fTempPerm818 = 0; - fTempPerm819 = 0; - fTempPerm820 = 0; - fTempPerm821 = 0; - fTempPerm822 = 0; - fTempPerm823 = 0; - fTempPerm824 = 0; - fTempPerm825 = 0; - fTempPerm826 = 0; - fTempPerm827 = 0; - fTempPerm828 = 0; - fTempPerm829 = 0; - fTempPerm830 = 0; - fTempPerm831 = 0; - fTempPerm832 = 0; - fTempPerm833 = 0; - fTempPerm834 = 0; - fTempPerm835 = 0; - fTempPerm836 = 0; - fTempPerm837 = 0; - fTempPerm838 = 0; - fTempPerm839 = 0; - fTempPerm840 = 0; - fTempPerm841 = 0; - fTempPerm842 = 0; - fTempPerm843 = 0; - fTempPerm844 = 0; - fTempPerm845 = 0; - fTempPerm846 = 0; - fTempPerm847 = 0; - fTempPerm848 = 0; - fTempPerm849 = 0; - fTempPerm850 = 0; - fTempPerm851 = 0; - fTempPerm852 = 0; - fTempPerm853 = 0; - fTempPerm854 = 0; - fTempPerm855 = 0; - fTempPerm856 = 0; - fTempPerm857 = 0; - fTempPerm858 = 0; - fTempPerm859 = 0; - fTempPerm860 = 0; - fTempPerm861 = 0; - fTempPerm862 = 0; - fTempPerm863 = 0; - fTempPerm864 = 0; - fTempPerm865 = 0; - fTempPerm866 = 0; - fTempPerm867 = 0; - fTempPerm868 = 0; - fTempPerm869 = 0; - fTempPerm870 = 0; - fTempPerm871 = 0; - fTempPerm872 = 0; - fTempPerm873 = 0; - fTempPerm874 = 0; - fTempPerm875 = 0; - fTempPerm876 = 0; - fTempPerm877 = 0; - fTempPerm878 = 0; - fTempPerm879 = 0; - fTempPerm880 = 0; - fTempPerm881 = 0; - fTempPerm882 = 0; - fTempPerm883 = 0; - fTempPerm884 = 0; - fTempPerm885 = 0; - fTempPerm886 = 0; - fTempPerm887 = 0; - fTempPerm888 = 0; - fTempPerm889 = 0; - fTempPerm890 = 0; - fTempPerm891 = 0; - fTempPerm892 = 0; - fTempPerm893 = 0; - fTempPerm894 = 0; - fTempPerm895 = 0; - fTempPerm896 = 0; - fTempPerm897 = 0; - fTempPerm898 = 0; - fTempPerm899 = 0; - fTempPerm900 = 0; - fTempPerm901 = 0; - fTempPerm902 = 0; - fTempPerm903 = 0; - fTempPerm904 = 0; - fTempPerm905 = 0; - fTempPerm906 = 0; - fTempPerm907 = 0; - fTempPerm908 = 0; - fTempPerm909 = 0; - fTempPerm910 = 0; - fTempPerm911 = 0; - fTempPerm912 = 0; - fTempPerm913 = 0; - fTempPerm914 = 0; - fTempPerm915 = 0; - fTempPerm916 = 0; - fTempPerm917 = 0; - fTempPerm918 = 0; - fTempPerm919 = 0; - fTempPerm920 = 0; - fTempPerm921 = 0; - fTempPerm922 = 0; - fTempPerm923 = 0; - fTempPerm924 = 0; - fTempPerm925 = 0; - fTempPerm926 = 0; - fTempPerm927 = 0; - fTempPerm928 = 0; - fTempPerm929 = 0; - fTempPerm930 = 0; - fTempPerm931 = 0; - fTempPerm932 = 0; - fTempPerm933 = 0; - fTempPerm934 = 0; - fTempPerm935 = 0; - fTempPerm936 = 0; - fTempPerm937 = 0; - fTempPerm938 = 0; - fTempPerm939 = 0; - fTempPerm940 = 0; - fTempPerm941 = 0; - fTempPerm942 = 0; - fTempPerm943 = 0; - fTempPerm944 = 0; - fTempPerm945 = 0; - fTempPerm946 = 0; - fTempPerm947 = 0; - fTempPerm948 = 0; - fTempPerm949 = 0; - fTempPerm950 = 0; - fTempPerm951 = 0; - fTempPerm952 = 0; - fTempPerm953 = 0; - fTempPerm954 = 0; - fTempPerm955 = 0; - fTempPerm956 = 0; - fTempPerm957 = 0; - fTempPerm958 = 0; - fTempPerm959 = 0; - fTempPerm960 = 0; - fTempPerm961 = 0; - fTempPerm962 = 0; - fTempPerm963 = 0; - fTempPerm964 = 0; - fTempPerm965 = 0; - fTempPerm966 = 0; - fTempPerm967 = 0; - fTempPerm968 = 0; - fTempPerm969 = 0; - fTempPerm970 = 0; - fTempPerm971 = 0; - fTempPerm972 = 0; - fTempPerm973 = 0; - fTempPerm974 = 0; - fTempPerm975 = 0; - fTempPerm976 = 0; - fTempPerm977 = 0; - fTempPerm978 = 0; - fTempPerm979 = 0; - fTempPerm980 = 0; - fTempPerm981 = 0; - fTempPerm982 = 0; - fTempPerm983 = 0; - fTempPerm984 = 0; - fTempPerm985 = 0; - fTempPerm986 = 0; - fTempPerm987 = 0; - fTempPerm988 = 0; - fTempPerm989 = 0; - fTempPerm990 = 0; - fTempPerm991 = 0; - fTempPerm992 = 0; - fTempPerm993 = 0; - fTempPerm994 = 0; - fTempPerm995 = 0; - fTempPerm996 = 0; - fTempPerm997 = 0; - fTempPerm998 = 0; - fTempPerm999 = 0; - fTempPerm1000 = 0; - fTempPerm1001 = 0; - fTempPerm1002 = 0; - fTempPerm1003 = 0; - fTempPerm1004 = 0; - fTempPerm1005 = 0; - fTempPerm1006 = 0; - fTempPerm1007 = 0; - fTempPerm1008 = 0; - fTempPerm1009 = 0; - fTempPerm1010 = 0; - fTempPerm1011 = 0; - fTempPerm1012 = 0; - fTempPerm1013 = 0; - fTempPerm1014 = 0; - fTempPerm1015 = 0; - fTempPerm1016 = 0; - fTempPerm1017 = 0; - fTempPerm1018 = 0; - fTempPerm1019 = 0; - fTempPerm1020 = 0; - fTempPerm1021 = 0; - fTempPerm1022 = 0; - fTempPerm1023 = 0; - fTempPerm1024 = 0; - fTempPerm1025 = 0; - fTempPerm1026 = 0; - fTempPerm1027 = 0; - fTempPerm1028 = 0; - fTempPerm1029 = 0; - fTempPerm1030 = 0; - fTempPerm1031 = 0; - fTempPerm1032 = 0; - fTempPerm1033 = 0; - fTempPerm1034 = 0; - fTempPerm1035 = 0; - fTempPerm1036 = 0; - fTempPerm1037 = 0; - fTempPerm1038 = 0; - fTempPerm1039 = 0; - fTempPerm1040 = 0; - fTempPerm1041 = 0; - fTempPerm1042 = 0; - fTempPerm1043 = 0; - fTempPerm1044 = 0; - fTempPerm1045 = 0; - fTempPerm1046 = 0; - fTempPerm1047 = 0; - fTempPerm1048 = 0; - fTempPerm1049 = 0; - fTempPerm1050 = 0; - fTempPerm1051 = 0; - fTempPerm1052 = 0; - fTempPerm1053 = 0; - fTempPerm1054 = 0; - fTempPerm1055 = 0; - fTempPerm1056 = 0; - fTempPerm1057 = 0; - fTempPerm1058 = 0; - fTempPerm1059 = 0; - fTempPerm1060 = 0; - fTempPerm1061 = 0; - fTempPerm1062 = 0; - fTempPerm1063 = 0; - fTempPerm1064 = 0; - fTempPerm1065 = 0; - fTempPerm1066 = 0; - fTempPerm1067 = 0; - fTempPerm1068 = 0; - fTempPerm1069 = 0; - fTempPerm1070 = 0; - fTempPerm1071 = 0; - fTempPerm1072 = 0; - fTempPerm1073 = 0; - fTempPerm1074 = 0; - fTempPerm1075 = 0; - fTempPerm1076 = 0; - fTempPerm1077 = 0; - fTempPerm1078 = 0; - fTempPerm1079 = 0; - fTempPerm1080 = 0; - fTempPerm1081 = 0; - fTempPerm1082 = 0; - fTempPerm1083 = 0; - fTempPerm1084 = 0; - fTempPerm1085 = 0; - fTempPerm1086 = 0; - fTempPerm1087 = 0; - fTempPerm1088 = 0; - fTempPerm1089 = 0; - fTempPerm1090 = 0; - fTempPerm1091 = 0; - fTempPerm1092 = 0; - fTempPerm1093 = 0; - fTempPerm1094 = 0; - fTempPerm1095 = 0; - fTempPerm1096 = 0; - fTempPerm1097 = 0; - fTempPerm1098 = 0; - fTempPerm1099 = 0; - fTempPerm1100 = 0; - fTempPerm1101 = 0; - fTempPerm1102 = 0; - fTempPerm1103 = 0; - fTempPerm1104 = 0; - fTempPerm1105 = 0; - fTempPerm1106 = 0; - fTempPerm1107 = 0; - fTempPerm1108 = 0; - fTempPerm1109 = 0; - fTempPerm1110 = 0; - fTempPerm1111 = 0; - fTempPerm1112 = 0; - fTempPerm1113 = 0; - fTempPerm1114 = 0; - fTempPerm1115 = 0; - fTempPerm1116 = 0; - fTempPerm1117 = 0; - fTempPerm1118 = 0; - fTempPerm1119 = 0; - fTempPerm1120 = 0; - fTempPerm1121 = 0; - fTempPerm1122 = 0; - fTempPerm1123 = 0; - fTempPerm1124 = 0; - fTempPerm1125 = 0; - fTempPerm1126 = 0; - fTempPerm1127 = 0; - fTempPerm1128 = 0; - fTempPerm1129 = 0; - fTempPerm1130 = 0; - fTempPerm1131 = 0; - fTempPerm1132 = 0; - fTempPerm1133 = 0; - fTempPerm1134 = 0; - fTempPerm1135 = 0; - fTempPerm1136 = 0; - fTempPerm1137 = 0; - fTempPerm1138 = 0; - fTempPerm1139 = 0; - fTempPerm1140 = 0; - fTempPerm1141 = 0; - fTempPerm1142 = 0; - fTempPerm1143 = 0; - fTempPerm1144 = 0; - fTempPerm1145 = 0; - fTempPerm1146 = 0; - fTempPerm1147 = 0; - fTempPerm1148 = 0; - fTempPerm1149 = 0; - fTempPerm1150 = 0; - fTempPerm1151 = 0; - fTempPerm1152 = 0; - fTempPerm1153 = 0; - fTempPerm1154 = 0; - fTempPerm1155 = 0; - fTempPerm1156 = 0; - fTempPerm1157 = 0; - fTempPerm1158 = 0; - fTempPerm1159 = 0; - fTempPerm1160 = 0; - fTempPerm1161 = 0; - fTempPerm1162 = 0; - fTempPerm1163 = 0; - fTempPerm1164 = 0; - fTempPerm1165 = 0; - fTempPerm1166 = 0; - fTempPerm1167 = 0; - fTempPerm1168 = 0; - fTempPerm1169 = 0; - fTempPerm1170 = 0; - fTempPerm1171 = 0; - fTempPerm1172 = 0; - fTempPerm1173 = 0; - fTempPerm1174 = 0; - fTempPerm1175 = 0; - fTempPerm1176 = 0; - fTempPerm1177 = 0; - fTempPerm1178 = 0; - fTempPerm1179 = 0; - fTempPerm1180 = 0; - fTempPerm1181 = 0; - fTempPerm1182 = 0; - fTempPerm1183 = 0; - fTempPerm1184 = 0; - fTempPerm1185 = 0; - fTempPerm1186 = 0; - fTempPerm1187 = 0; - fTempPerm1188 = 0; - fTempPerm1189 = 0; - fTempPerm1190 = 0; - fTempPerm1191 = 0; - fTempPerm1192 = 0; - fTempPerm1193 = 0; - fTempPerm1194 = 0; - fTempPerm1195 = 0; - fTempPerm1196 = 0; - fTempPerm1197 = 0; - fTempPerm1198 = 0; - fTempPerm1199 = 0; - fTempPerm1200 = 0; - fTempPerm1201 = 0; - fTempPerm1202 = 0; - fTempPerm1203 = 0; - fTempPerm1204 = 0; - fTempPerm1205 = 0; - fTempPerm1206 = 0; - fTempPerm1207 = 0; - fTempPerm1208 = 0; - fTempPerm1209 = 0; - fTempPerm1210 = 0; - fTempPerm1211 = 0; - fTempPerm1212 = 0; - fTempPerm1213 = 0; - fTempPerm1214 = 0; - fTempPerm1215 = 0; - fTempPerm1216 = 0; - fTempPerm1217 = 0; - fTempPerm1218 = 0; - fTempPerm1219 = 0; - fTempPerm1220 = 0; - fTempPerm1221 = 0; - fTempPerm1222 = 0; - fTempPerm1223 = 0; - fTempPerm1224 = 0; - fTempPerm1225 = 0; - fTempPerm1226 = 0; - fTempPerm1227 = 0; - fTempPerm1228 = 0; - fTempPerm1229 = 0; - fTempPerm1230 = 0; - fTempPerm1231 = 0; - fTempPerm1232 = 0; - fTempPerm1233 = 0; - fTempPerm1234 = 0; - fTempPerm1235 = 0; - fTempPerm1236 = 0; - fTempPerm1237 = 0; - fTempPerm1238 = 0; - fTempPerm1239 = 0; - fTempPerm1240 = 0; - fTempPerm1241 = 0; - fTempPerm1242 = 0; - fTempPerm1243 = 0; - fTempPerm1244 = 0; - fTempPerm1245 = 0; - fTempPerm1246 = 0; - fTempPerm1247 = 0; - fTempPerm1248 = 0; - fTempPerm1249 = 0; - fTempPerm1250 = 0; - fTempPerm1251 = 0; - fTempPerm1252 = 0; - fTempPerm1253 = 0; - fTempPerm1254 = 0; - fTempPerm1255 = 0; - fTempPerm1256 = 0; - fTempPerm1257 = 0; - fTempPerm1258 = 0; - fTempPerm1259 = 0; - fTempPerm1260 = 0; - fTempPerm1261 = 0; - fTempPerm1262 = 0; - fTempPerm1263 = 0; - fTempPerm1264 = 0; - fTempPerm1265 = 0; - fTempPerm1266 = 0; - fTempPerm1267 = 0; - fTempPerm1268 = 0; - fTempPerm1269 = 0; - fTempPerm1270 = 0; - fTempPerm1271 = 0; - fTempPerm1272 = 0; - fTempPerm1273 = 0; - fTempPerm1274 = 0; - fTempPerm1275 = 0; - fTempPerm1276 = 0; - fTempPerm1277 = 0; - fTempPerm1278 = 0; - fTempPerm1279 = 0; - fTempPerm1280 = 0; - fTempPerm1281 = 0; - fTempPerm1282 = 0; - fTempPerm1283 = 0; - fTempPerm1284 = 0; - fTempPerm1285 = 0; - fTempPerm1286 = 0; - fTempPerm1287 = 0; - fTempPerm1288 = 0; - fTempPerm1289 = 0; - fTempPerm1290 = 0; - fTempPerm1291 = 0; - fTempPerm1292 = 0; - fTempPerm1293 = 0; - fTempPerm1294 = 0; - fTempPerm1295 = 0; - fTempPerm1296 = 0; - fTempPerm1297 = 0; - fTempPerm1298 = 0; - fTempPerm1299 = 0; - fTempPerm1300 = 0; - fTempPerm1301 = 0; - fTempPerm1302 = 0; - fTempPerm1303 = 0; - fTempPerm1304 = 0; - fTempPerm1305 = 0; - fTempPerm1306 = 0; - fTempPerm1307 = 0; - fTempPerm1308 = 0; - fTempPerm1309 = 0; - fTempPerm1310 = 0; - fTempPerm1311 = 0; - fTempPerm1312 = 0; - fTempPerm1313 = 0; - fTempPerm1314 = 0; - fTempPerm1315 = 0; - fTempPerm1316 = 0; - fTempPerm1317 = 0; - fTempPerm1318 = 0; - fTempPerm1319 = 0; - fTempPerm1320 = 0; - fTempPerm1321 = 0; - fTempPerm1322 = 0; - fTempPerm1323 = 0; - fTempPerm1324 = 0; - fTempPerm1325 = 0; - fTempPerm1326 = 0; - fTempPerm1327 = 0; - fTempPerm1328 = 0; - fTempPerm1329 = 0; - fTempPerm1330 = 0; - fTempPerm1331 = 0; - fTempPerm1332 = 0; - fTempPerm1333 = 0; - fTempPerm1334 = 0; - fTempPerm1335 = 0; - fTempPerm1336 = 0; - fTempPerm1337 = 0; - fTempPerm1338 = 0; - fTempPerm1339 = 0; - fTempPerm1340 = 0; - fTempPerm1341 = 0; - fTempPerm1342 = 0; - fTempPerm1343 = 0; - fTempPerm1344 = 0; - fTempPerm1345 = 0; - fTempPerm1346 = 0; - fTempPerm1347 = 0; - fTempPerm1348 = 0; - fTempPerm1349 = 0; - fTempPerm1350 = 0; - fTempPerm1351 = 0; - fTempPerm1352 = 0; - fTempPerm1353 = 0; - fTempPerm1354 = 0; - fTempPerm1355 = 0; - fTempPerm1356 = 0; - fTempPerm1357 = 0; - fTempPerm1358 = 0; - fTempPerm1359 = 0; - fTempPerm1360 = 0; - fTempPerm1361 = 0; - fTempPerm1362 = 0; - fTempPerm1363 = 0; - fTempPerm1364 = 0; - fTempPerm1365 = 0; - fTempPerm1366 = 0; - fTempPerm1367 = 0; - fTempPerm1368 = 0; - fTempPerm1369 = 0; - fTempPerm1370 = 0; - fTempPerm1371 = 0; - fTempPerm1372 = 0; - fTempPerm1373 = 0; - fTempPerm1374 = 0; - fTempPerm1375 = 0; - fTempPerm1376 = 0; - fTempPerm1377 = 0; - fTempPerm1378 = 0; - fTempPerm1379 = 0; - fTempPerm1380 = 0; - fTempPerm1381 = 0; - fTempPerm1382 = 0; - fTempPerm1383 = 0; - fTempPerm1384 = 0; - fTempPerm1385 = 0; - fTempPerm1386 = 0; - fTempPerm1387 = 0; - fTempPerm1388 = 0; - fTempPerm1389 = 0; - fTempPerm1390 = 0; - fTempPerm1391 = 0; - fTempPerm1392 = 0; - fTempPerm1393 = 0; - fTempPerm1394 = 0; - fTempPerm1395 = 0; - fTempPerm1396 = 0; - fTempPerm1397 = 0; - fTempPerm1398 = 0; - fTempPerm1399 = 0; - fTempPerm1400 = 0; - fTempPerm1401 = 0; - fTempPerm1402 = 0; - fTempPerm1403 = 0; - fTempPerm1404 = 0; - fTempPerm1405 = 0; - fTempPerm1406 = 0; - fTempPerm1407 = 0; - fTempPerm1408 = 0; - fTempPerm1409 = 0; - fTempPerm1410 = 0; - fTempPerm1411 = 0; - fTempPerm1412 = 0; - fTempPerm1413 = 0; - fTempPerm1414 = 0; - fTempPerm1415 = 0; - fTempPerm1416 = 0; - fTempPerm1417 = 0; - fTempPerm1418 = 0; - fTempPerm1419 = 0; - fTempPerm1420 = 0; - fTempPerm1421 = 0; - fTempPerm1422 = 0; - fTempPerm1423 = 0; - fTempPerm1424 = 0; - fTempPerm1425 = 0; - fTempPerm1426 = 0; - fTempPerm1427 = 0; - fTempPerm1428 = 0; - fTempPerm1429 = 0; - fTempPerm1430 = 0; - fTempPerm1431 = 0; - fTempPerm1432 = 0; - fTempPerm1433 = 0; - fTempPerm1434 = 0; - fTempPerm1435 = 0; - fTempPerm1436 = 0; - fTempPerm1437 = 0; - fTempPerm1438 = 0; - fTempPerm1439 = 0; - fTempPerm1440 = 0; - fTempPerm1441 = 0; - fTempPerm1442 = 0; - fTempPerm1443 = 0; - fTempPerm1444 = 0; - fTempPerm1445 = 0; - fTempPerm1446 = 0; - fTempPerm1447 = 0; - fTempPerm1448 = 0; - fTempPerm1449 = 0; - fTempPerm1450 = 0; - fTempPerm1451 = 0; - fTempPerm1452 = 0; - fTempPerm1453 = 0; - fTempPerm1454 = 0; - fTempPerm1455 = 0; - fTempPerm1456 = 0; - fTempPerm1457 = 0; - fTempPerm1458 = 0; - fTempPerm1459 = 0; - fTempPerm1460 = 0; - fTempPerm1461 = 0; - fTempPerm1462 = 0; - fTempPerm1463 = 0; - fTempPerm1464 = 0; - fTempPerm1465 = 0; - fTempPerm1466 = 0; - fTempPerm1467 = 0; - fTempPerm1468 = 0; - fTempPerm1469 = 0; - fTempPerm1470 = 0; - fTempPerm1471 = 0; - fTempPerm1472 = 0; - fTempPerm1473 = 0; - fTempPerm1474 = 0; - fTempPerm1475 = 0; - fTempPerm1476 = 0; - fTempPerm1477 = 0; - fTempPerm1478 = 0; - fTempPerm1479 = 0; - fTempPerm1480 = 0; - fTempPerm1481 = 0; - fTempPerm1482 = 0; - fTempPerm1483 = 0; - fTempPerm1484 = 0; - fTempPerm1485 = 0; - fTempPerm1486 = 0; - fTempPerm1487 = 0; - fTempPerm1488 = 0; - fTempPerm1489 = 0; - fTempPerm1490 = 0; - fTempPerm1491 = 0; - fTempPerm1492 = 0; - fTempPerm1493 = 0; - fTempPerm1494 = 0; - fTempPerm1495 = 0; - fTempPerm1496 = 0; - fTempPerm1497 = 0; - fTempPerm1498 = 0; - fTempPerm1499 = 0; - fTempPerm1500 = 0; - fTempPerm1501 = 0; - fTempPerm1502 = 0; - fTempPerm1503 = 0; - fTempPerm1504 = 0; - fTempPerm1505 = 0; - fTempPerm1506 = 0; - fTempPerm1507 = 0; - fTempPerm1508 = 0; - fTempPerm1509 = 0; - fTempPerm1510 = 0; - fTempPerm1511 = 0; - fTempPerm1512 = 0; - fTempPerm1513 = 0; - fTempPerm1514 = 0; - fTempPerm1515 = 0; - fTempPerm1516 = 0; - fTempPerm1517 = 0; - fTempPerm1518 = 0; - fTempPerm1519 = 0; - fTempPerm1520 = 0; - fTempPerm1521 = 0; - fTempPerm1522 = 0; - fTempPerm1523 = 0; - fTempPerm1524 = 0; - fTempPerm1525 = 0; - fTempPerm1526 = 0; - fTempPerm1527 = 0; - fTempPerm1528 = 0; - fTempPerm1529 = 0; - fTempPerm1530 = 0; - fTempPerm1531 = 0; - fTempPerm1532 = 0; - fTempPerm1533 = 0; - fTempPerm1534 = 0; - fTempPerm1535 = 0; - fTempPerm1536 = 0; - fTempPerm1537 = 0; - fTempPerm1538 = 0; - fTempPerm1539 = 0; - fTempPerm1540 = 0; - fTempPerm1541 = 0; - fTempPerm1542 = 0; - fTempPerm1543 = 0; - fTempPerm1544 = 0; - fTempPerm1545 = 0; - fTempPerm1546 = 0; - fTempPerm1547 = 0; - fTempPerm1548 = 0; - fTempPerm1549 = 0; - fTempPerm1550 = 0; - fTempPerm1551 = 0; - fTempPerm1552 = 0; - fTempPerm1553 = 0; - fTempPerm1554 = 0; - fTempPerm1555 = 0; - fTempPerm1556 = 0; - fTempPerm1557 = 0; - fTempPerm1558 = 0; - fTempPerm1559 = 0; - fTempPerm1560 = 0; - fTempPerm1561 = 0; - fTempPerm1562 = 0; - fTempPerm1563 = 0; - fTempPerm1564 = 0; - fTempPerm1565 = 0; - fTempPerm1566 = 0; - fTempPerm1567 = 0; - fTempPerm1568 = 0; - fTempPerm1569 = 0; - fTempPerm1570 = 0; - fTempPerm1571 = 0; - fTempPerm1572 = 0; - fTempPerm1573 = 0; - fTempPerm1574 = 0; - fTempPerm1575 = 0; - fTempPerm1576 = 0; - fTempPerm1577 = 0; - fTempPerm1578 = 0; - fTempPerm1579 = 0; - fTempPerm1580 = 0; - fTempPerm1581 = 0; - fTempPerm1582 = 0; - fTempPerm1583 = 0; - fTempPerm1584 = 0; - fTempPerm1585 = 0; - fTempPerm1586 = 0; - fTempPerm1587 = 0; - fTempPerm1588 = 0; - fTempPerm1589 = 0; - fTempPerm1590 = 0; - fTempPerm1591 = 0; - fTempPerm1592 = 0; - fTempPerm1593 = 0; - fTempPerm1594 = 0; - fTempPerm1595 = 0; - fTempPerm1596 = 0; - fTempPerm1597 = 0; - fTempPerm1598 = 0; - fTempPerm1599 = 0; - fTempPerm1600 = 0; - fTempPerm1601 = 0; - fTempPerm1602 = 0; - fTempPerm1603 = 0; - fTempPerm1604 = 0; - fTempPerm1605 = 0; - fTempPerm1606 = 0; - fTempPerm1607 = 0; - fTempPerm1608 = 0; - fTempPerm1609 = 0; - fTempPerm1610 = 0; - fTempPerm1611 = 0; - fTempPerm1612 = 0; - fTempPerm1613 = 0; - fTempPerm1614 = 0; - fTempPerm1615 = 0; - fTempPerm1616 = 0; - fTempPerm1617 = 0; - fTempPerm1618 = 0; - fTempPerm1619 = 0; - fTempPerm1620 = 0; - fTempPerm1621 = 0; - fTempPerm1622 = 0; - fTempPerm1623 = 0; - fTempPerm1624 = 0; - fTempPerm1625 = 0; - fTempPerm1626 = 0; - fTempPerm1627 = 0; - fTempPerm1628 = 0; - fTempPerm1629 = 0; - fTempPerm1630 = 0; - fTempPerm1631 = 0; - fTempPerm1632 = 0; - fTempPerm1633 = 0; - fTempPerm1634 = 0; - fTempPerm1635 = 0; - fTempPerm1636 = 0; - fTempPerm1637 = 0; - fTempPerm1638 = 0; - fTempPerm1639 = 0; - fTempPerm1640 = 0; - fTempPerm1641 = 0; - fTempPerm1642 = 0; - fTempPerm1643 = 0; - fTempPerm1644 = 0; - fTempPerm1645 = 0; - fTempPerm1646 = 0; - fTempPerm1647 = 0; - fTempPerm1648 = 0; - fTempPerm1649 = 0; - fTempPerm1650 = 0; - fTempPerm1651 = 0; - fTempPerm1652 = 0; - fTempPerm1653 = 0; - fTempPerm1654 = 0; - fTempPerm1655 = 0; - fTempPerm1656 = 0; - fTempPerm1657 = 0; - fTempPerm1658 = 0; - fTempPerm1659 = 0; - fTempPerm1660 = 0; - fTempPerm1661 = 0; - fTempPerm1662 = 0; - fTempPerm1663 = 0; - fTempPerm1664 = 0; - fTempPerm1665 = 0; - fTempPerm1666 = 0; - fTempPerm1667 = 0; - fTempPerm1668 = 0; - fTempPerm1669 = 0; - fTempPerm1670 = 0; - fTempPerm1671 = 0; - fTempPerm1672 = 0; - fTempPerm1673 = 0; - fTempPerm1674 = 0; - fTempPerm1675 = 0; - fTempPerm1676 = 0; - fTempPerm1677 = 0; - fTempPerm1678 = 0; - fTempPerm1679 = 0; - fTempPerm1680 = 0; - fTempPerm1681 = 0; - fTempPerm1682 = 0; - fTempPerm1683 = 0; - fTempPerm1684 = 0; - fTempPerm1685 = 0; - fTempPerm1686 = 0; - fTempPerm1687 = 0; - fTempPerm1688 = 0; - fTempPerm1689 = 0; - fTempPerm1690 = 0; - fTempPerm1691 = 0; - fTempPerm1692 = 0; - fTempPerm1693 = 0; - fTempPerm1694 = 0; - fTempPerm1695 = 0; - fTempPerm1696 = 0; - fTempPerm1697 = 0; - fTempPerm1698 = 0; - fTempPerm1699 = 0; - fTempPerm1700 = 0; - fTempPerm1701 = 0; - fTempPerm1702 = 0; - fTempPerm1703 = 0; - fTempPerm1704 = 0; - fTempPerm1705 = 0; - fTempPerm1706 = 0; - fTempPerm1707 = 0; - fTempPerm1708 = 0; - fTempPerm1709 = 0; - fTempPerm1710 = 0; - fTempPerm1711 = 0; - fTempPerm1712 = 0; - fTempPerm1713 = 0; - fTempPerm1714 = 0; - fTempPerm1715 = 0; - fTempPerm1716 = 0; - fTempPerm1717 = 0; - fTempPerm1718 = 0; - fTempPerm1719 = 0; - fTempPerm1720 = 0; - fTempPerm1721 = 0; - fTempPerm1722 = 0; - fTempPerm1723 = 0; - fTempPerm1724 = 0; - fTempPerm1725 = 0; - fTempPerm1726 = 0; - fTempPerm1727 = 0; - fTempPerm1728 = 0; - fTempPerm1729 = 0; - fTempPerm1730 = 0; - fTempPerm1731 = 0; - fTempPerm1732 = 0; - fTempPerm1733 = 0; - fTempPerm1734 = 0; - fTempPerm1735 = 0; - fTempPerm1736 = 0; - fTempPerm1737 = 0; - fTempPerm1738 = 0; - fTempPerm1739 = 0; - fTempPerm1740 = 0; - fTempPerm1741 = 0; - fTempPerm1742 = 0; - fTempPerm1743 = 0; - fTempPerm1744 = 0; - fTempPerm1745 = 0; - fTempPerm1746 = 0; - fTempPerm1747 = 0; - fTempPerm1748 = 0; - fTempPerm1749 = 0; - fTempPerm1750 = 0; - fTempPerm1751 = 0; - fTempPerm1752 = 0; - fTempPerm1753 = 0; - fTempPerm1754 = 0; - fTempPerm1755 = 0; - fTempPerm1756 = 0; - fTempPerm1757 = 0; - fTempPerm1758 = 0; - fTempPerm1759 = 0; - fTempPerm1760 = 0; - fTempPerm1761 = 0; - fTempPerm1762 = 0; - fTempPerm1763 = 0; - fTempPerm1764 = 0; - fTempPerm1765 = 0; - fTempPerm1766 = 0; - fTempPerm1767 = 0; - fTempPerm1768 = 0; - fTempPerm1769 = 0; - fTempPerm1770 = 0; - fTempPerm1771 = 0; - fTempPerm1772 = 0; - fTempPerm1773 = 0; - fTempPerm1774 = 0; - fTempPerm1775 = 0; - fTempPerm1776 = 0; - fTempPerm1777 = 0; - fTempPerm1778 = 0; - fTempPerm1779 = 0; - fTempPerm1780 = 0; - fTempPerm1781 = 0; - fTempPerm1782 = 0; - fTempPerm1783 = 0; - fTempPerm1784 = 0; - fTempPerm1785 = 0; - fTempPerm1786 = 0; - fTempPerm1787 = 0; - fTempPerm1788 = 0; - fTempPerm1789 = 0; - fTempPerm1790 = 0; - fTempPerm1791 = 0; - fTempPerm1792 = 0; - fTempPerm1793 = 0; - fTempPerm1794 = 0; - fTempPerm1795 = 0; - fTempPerm1796 = 0; - fTempPerm1797 = 0; - fTempPerm1798 = 0; - fTempPerm1799 = 0; - fTempPerm1800 = 0; - fTempPerm1801 = 0; - fTempPerm1802 = 0; - fTempPerm1803 = 0; - fTempPerm1804 = 0; - fTempPerm1805 = 0; - fTempPerm1806 = 0; - fTempPerm1807 = 0; - fTempPerm1808 = 0; - fTempPerm1809 = 0; - fTempPerm1810 = 0; - fTempPerm1811 = 0; - fTempPerm1812 = 0; - fTempPerm1813 = 0; - fTempPerm1814 = 0; - fTempPerm1815 = 0; - fTempPerm1816 = 0; - fTempPerm1817 = 0; - fTempPerm1818 = 0; - fTempPerm1819 = 0; - fTempPerm1820 = 0; - fTempPerm1821 = 0; - fTempPerm1822 = 0; - fTempPerm1823 = 0; - fTempPerm1824 = 0; - fTempPerm1825 = 0; - fTempPerm1826 = 0; - fTempPerm1827 = 0; - fTempPerm1828 = 0; - fTempPerm1829 = 0; - fTempPerm1830 = 0; - fTempPerm1831 = 0; - fTempPerm1832 = 0; - fTempPerm1833 = 0; - fTempPerm1834 = 0; - fTempPerm1835 = 0; - fTempPerm1836 = 0; - fTempPerm1837 = 0; - fTempPerm1838 = 0; - fTempPerm1839 = 0; - fTempPerm1840 = 0; - fTempPerm1841 = 0; - fTempPerm1842 = 0; - fTempPerm1843 = 0; - fTempPerm1844 = 0; - fTempPerm1845 = 0; - fTempPerm1846 = 0; - fTempPerm1847 = 0; - fTempPerm1848 = 0; - fTempPerm1849 = 0; - fTempPerm1850 = 0; - fTempPerm1851 = 0; - fTempPerm1852 = 0; - fTempPerm1853 = 0; - fTempPerm1854 = 0; - fTempPerm1855 = 0; - fTempPerm1856 = 0; - fTempPerm1857 = 0; - fTempPerm1858 = 0; - fTempPerm1859 = 0; - fTempPerm1860 = 0; - fTempPerm1861 = 0; - fTempPerm1862 = 0; - fTempPerm1863 = 0; - fTempPerm1864 = 0; - fTempPerm1865 = 0; - fTempPerm1866 = 0; - fTempPerm1867 = 0; - fTempPerm1868 = 0; - fTempPerm1869 = 0; - fTempPerm1870 = 0; - fTempPerm1871 = 0; - fTempPerm1872 = 0; - fTempPerm1873 = 0; - fTempPerm1874 = 0; - fTempPerm1875 = 0; - fTempPerm1876 = 0; - fTempPerm1877 = 0; - fTempPerm1878 = 0; - fTempPerm1879 = 0; - fTempPerm1880 = 0; - fTempPerm1881 = 0; - fTempPerm1882 = 0; - fTempPerm1883 = 0; - fTempPerm1884 = 0; - fTempPerm1885 = 0; - fTempPerm1886 = 0; - fTempPerm1887 = 0; - fTempPerm1888 = 0; - fTempPerm1889 = 0; - fTempPerm1890 = 0; - fTempPerm1891 = 0; - fTempPerm1892 = 0; - fTempPerm1893 = 0; - fTempPerm1894 = 0; - fTempPerm1895 = 0; - fTempPerm1896 = 0; - fTempPerm1897 = 0; - fTempPerm1898 = 0; - fTempPerm1899 = 0; - fTempPerm1900 = 0; - fTempPerm1901 = 0; - fTempPerm1902 = 0; - fTempPerm1903 = 0; - fTempPerm1904 = 0; - fTempPerm1905 = 0; - fTempPerm1906 = 0; - fTempPerm1907 = 0; - fTempPerm1908 = 0; - fTempPerm1909 = 0; - fTempPerm1910 = 0; - fTempPerm1911 = 0; - fTempPerm1912 = 0; - fTempPerm1913 = 0; - fTempPerm1914 = 0; - fTempPerm1915 = 0; - fTempPerm1916 = 0; - fTempPerm1917 = 0; - fTempPerm1918 = 0; - fTempPerm1919 = 0; - fTempPerm1920 = 0; - fTempPerm1921 = 0; - fTempPerm1922 = 0; - fTempPerm1923 = 0; - fTempPerm1924 = 0; - fTempPerm1925 = 0; - fTempPerm1926 = 0; - fTempPerm1927 = 0; - fTempPerm1928 = 0; - fTempPerm1929 = 0; - fTempPerm1930 = 0; - fTempPerm1931 = 0; - fTempPerm1932 = 0; - fTempPerm1933 = 0; - fTempPerm1934 = 0; - fTempPerm1935 = 0; - fTempPerm1936 = 0; - fTempPerm1937 = 0; - fTempPerm1938 = 0; - fTempPerm1939 = 0; - fTempPerm1940 = 0; - fTempPerm1941 = 0; - fTempPerm1942 = 0; - fTempPerm1943 = 0; - fTempPerm1944 = 0; - fTempPerm1945 = 0; - fTempPerm1946 = 0; - fTempPerm1947 = 0; - fTempPerm1948 = 0; - fTempPerm1949 = 0; - fTempPerm1950 = 0; - fTempPerm1951 = 0; - fTempPerm1952 = 0; - fTempPerm1953 = 0; - fTempPerm1954 = 0; - fTempPerm1955 = 0; - fTempPerm1956 = 0; - fTempPerm1957 = 0; - fTempPerm1958 = 0; - fTempPerm1959 = 0; - fTempPerm1960 = 0; - fTempPerm1961 = 0; - fTempPerm1962 = 0; - fTempPerm1963 = 0; - fTempPerm1964 = 0; - fTempPerm1965 = 0; - fTempPerm1966 = 0; - fTempPerm1967 = 0; - fTempPerm1968 = 0; - fTempPerm1969 = 0; - fTempPerm1970 = 0; - fTempPerm1971 = 0; - fTempPerm1972 = 0; - fTempPerm1973 = 0; - fTempPerm1974 = 0; - fTempPerm1975 = 0; - fTempPerm1976 = 0; - fTempPerm1977 = 0; - fTempPerm1978 = 0; - fTempPerm1979 = 0; - fTempPerm1980 = 0; - fTempPerm1981 = 0; - fTempPerm1982 = 0; - fTempPerm1983 = 0; - fTempPerm1984 = 0; - fTempPerm1985 = 0; - fTempPerm1986 = 0; - fTempPerm1987 = 0; - fTempPerm1988 = 0; - fTempPerm1989 = 0; - fTempPerm1990 = 0; - fTempPerm1991 = 0; - fTempPerm1992 = 0; - fTempPerm1993 = 0; - fTempPerm1994 = 0; - fTempPerm1995 = 0; - fTempPerm1996 = 0; - fTempPerm1997 = 0; - fTempPerm1998 = 0; - fTempPerm1999 = 0; - fTempPerm2000 = 0; - fTempPerm2001 = 0; - fTempPerm2002 = 0; - fTempPerm2003 = 0; - fTempPerm2004 = 0; - fTempPerm2005 = 0; - fTempPerm2006 = 0; - fTempPerm2007 = 0; - fTempPerm2008 = 0; - fTempPerm2009 = 0; - fTempPerm2010 = 0; - fTempPerm2011 = 0; - fTempPerm2012 = 0; - fTempPerm2013 = 0; - fTempPerm2014 = 0; - fTempPerm2015 = 0; - fTempPerm2016 = 0; - fTempPerm2017 = 0; - fTempPerm2018 = 0; - fTempPerm2019 = 0; - fTempPerm2020 = 0; - fTempPerm2021 = 0; - fTempPerm2022 = 0; - fTempPerm2023 = 0; - fTempPerm2024 = 0; - fTempPerm2025 = 0; - fTempPerm2026 = 0; - fTempPerm2027 = 0; - fTempPerm2028 = 0; - fTempPerm2029 = 0; - fTempPerm2030 = 0; - fTempPerm2031 = 0; - fTempPerm2032 = 0; - fTempPerm2033 = 0; - fTempPerm2034 = 0; - fTempPerm2035 = 0; - fTempPerm2036 = 0; - fTempPerm2037 = 0; - fTempPerm2038 = 0; - fTempPerm2039 = 0; - fTempPerm2040 = 0; - fTempPerm2041 = 0; - fTempPerm2042 = 0; - fTempPerm2043 = 0; - fTempPerm2044 = 0; - fTempPerm2045 = 0; - fTempPerm2046 = 0; - fTempPerm2047 = 0; - fTempPerm2048 = 0; - fTempPerm2049 = 0; - } - virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - } - virtual void instanceClear() { - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; - for (int i=0; i<2; i++) fRec2[i] = 0; - IOTA = 0; - for (int i=0; i<128; i++) fVec0[i] = 0; - for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<128; i++) fVec1[i] = 0; - for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<128; i++) fVec2[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; - for (int i=0; i<128; i++) fVec3[i] = 0; - for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<128; i++) fVec4[i] = 0; - for (int i=0; i<2; i++) fRec8[i] = 0; - for (int i=0; i<128; i++) fVec5[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; - for (int i=0; i<128; i++) fVec6[i] = 0; - for (int i=0; i<2; i++) fRec10[i] = 0; - for (int i=0; i<128; i++) fVec7[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; - for (int i=0; i<128; i++) fVec8[i] = 0; - for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<128; i++) fVec9[i] = 0; - for (int i=0; i<2; i++) fRec13[i] = 0; - for (int i=0; i<128; i++) fVec10[i] = 0; - for (int i=0; i<2; i++) fRec14[i] = 0; - for (int i=0; i<128; i++) fVec11[i] = 0; - for (int i=0; i<2; i++) fRec15[i] = 0; - for (int i=0; i<128; i++) fVec12[i] = 0; - for (int i=0; i<2; i++) fRec16[i] = 0; - for (int i=0; i<128; i++) fVec13[i] = 0; - for (int i=0; i<2; i++) fRec17[i] = 0; - for (int i=0; i<128; i++) fVec14[i] = 0; - for (int i=0; i<2; i++) fRec18[i] = 0; - for (int i=0; i<128; i++) fVec15[i] = 0; - for (int i=0; i<2; i++) fRec0[i] = 0; - for (int i=0; i<2; i++) fRec19[i] = 0; - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); - } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); - instanceResetUserInterface(); - instanceClear(); - } - virtual mydsp* clone() { - return new mydsp(); - } - virtual int getSampleRate() { - return fSamplingFreq; - } - virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("HOADecoderLebedev50Binaural3"); - ui_interface->openHorizontalBox("Inputs"); - ui_interface->openHorizontalBox("0"); - ui_interface->openVerticalBox("0"); - ui_interface->declare(&fbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad111186b0", &fbargraph15, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("1"); - ui_interface->openVerticalBox("1"); - ui_interface->declare(&fbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad11107370", &fbargraph14, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("2"); - ui_interface->declare(&fbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad110a8080", &fbargraph13, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("3"); - ui_interface->declare(&fbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad110a3410", &fbargraph12, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("2"); - ui_interface->openVerticalBox("4"); - ui_interface->declare(&fbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad1109ee20", &fbargraph11, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("5"); - ui_interface->declare(&fbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad11085370", &fbargraph10, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("6"); - ui_interface->declare(&fbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad1107f120", &fbargraph9, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("7"); - ui_interface->declare(&fbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad11079510", &fbargraph8, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("8"); - ui_interface->declare(&fbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad11074f80", &fbargraph7, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("3"); - ui_interface->openVerticalBox("9"); - ui_interface->declare(&fbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad110710d0", &fbargraph6, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("10"); - ui_interface->declare(&fbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad10cf2310", &fbargraph5, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("11"); - ui_interface->declare(&fbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad10cee050", &fbargraph4, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("12"); - ui_interface->declare(&fbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad10cd5e60", &fbargraph3, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("13"); - ui_interface->declare(&fbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad10cd0e20", &fbargraph2, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("14"); - ui_interface->declare(&fbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad10ccae30", &fbargraph1, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("15"); - ui_interface->declare(&fbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fad10cc6300", &fbargraph0, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->declare(&fslider1, "1", ""); - ui_interface->declare(&fslider1, "osc", "/levelin -10 10"); - ui_interface->declare(&fslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Inputs Gain", &fslider1, 0.0, -1e+01, 1e+01, 0.1); - ui_interface->declare(&fslider0, "2", ""); - ui_interface->declare(&fslider0, "osc", "/levelout -10 10"); - ui_interface->declare(&fslider0, "unit", "dB"); - ui_interface->addVerticalSlider("Outputs Gain", &fslider0, 0.0, -1e+01, 1e+01, 0.1); - ui_interface->closeBox(); - ui_interface->openVerticalBox("Outputs"); - ui_interface->openHorizontalBox("Left"); - ui_interface->declare(&fbargraph16, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x7fad10eaba10", &fbargraph16, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->openHorizontalBox("Right"); - ui_interface->declare(&fbargraph17, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x7fad10f28cb0", &fbargraph17, -7e+01, 6.0); - ui_interface->closeBox(); - ui_interface->closeBox(); - ui_interface->closeBox(); - } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider0)))); - double fSlow1 = (0.0010000000000000009 * pow(10,(0.05 * double(fslider1)))); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - //LoopGraphScalar - for (int i=0; igetNumInputs(); } -}; - -// Global state - -static size_t g_numControls; // Number of controls -static const char* g_unitName; // Unit name - -// Initialize the global state with unit name and sample rate. -void initState(const std::string& name, int sampleRate); - -// Return the unit size in bytes, including static fields and controls. -static size_t unitSize(); - -// Convert a file name to a valid unit name. -static std::string fileNameToUnitName(const std::string& fileName); - -// Convert the XML unit name to a valid class name. -static std::string normalizeClassName(const std::string& name); - -void initState(const std::string& name, int sampleRate) -{ - g_unitName = STRDUP(name.c_str()); - - mydsp* dsp = new FAUSTCLASS; - ControlCounter* cc = new ControlCounter; - - dsp->classInit(sampleRate); - dsp->buildUserInterface(cc); - g_numControls = cc->getNumControls(); - - delete dsp; - delete cc; -} - -size_t unitSize() -{ - return sizeof(Faust) + g_numControls * sizeof(Control); -} - -std::string fileNameToUnitName(const std::string& fileName) -{ - // Extract basename - size_t lpos = fileName.rfind('/', fileName.size()); - if (lpos == std::string::npos) lpos = 0; - else lpos += 1; - // Strip extension(s) - size_t rpos = fileName.find('.', lpos); - // Return substring - return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); -} - -// Globals - -static InterfaceTable* ft; - -// The SuperCollider UGen class name generated here must match -// that generated by faust2sc: -static std::string normalizeClassName(const std::string& name) -{ - std::string s; - char c; - - unsigned int i=0; - bool upnext=true; - while ((c=name[i++])) { - if (upnext) { c = toupper(c); upnext=false; } - if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } - s += c; - if (i > 31) { break; } - } - return s; -} - -extern "C" -{ -#ifdef SC_API_EXPORT - FAUST_EXPORT int api_version(void); -#endif - FAUST_EXPORT void load(InterfaceTable*); - void Faust_next(Faust*, int); - void Faust_next_copy(Faust*, int); - void Faust_next_clear(Faust*, int); - void Faust_Ctor(Faust*); - void Faust_Dtor(Faust*); -}; - -inline static void fillBuffer(float* dst, int n, float v) -{ - Fill(n, dst, v); -} - -inline static void fillBuffer(float* dst, int n, float v0, float v1) -{ - Fill(n, dst, v0, (v1 - v0) / n); -} - -inline static void copyBuffer(float* dst, int n, float* src) -{ - Copy(n, dst, src); -} - -inline static void Faust_updateControls(Faust* unit) -{ - Control* controls = unit->mControls; - size_t numControls = unit->mNumControls; - int curControl = unit->mDSP->getNumInputs(); - for (int i = 0; i < numControls; ++i) { - float value = IN0(curControl); - (controls++)->update(value); - curControl++; - } -} - -void Faust_next(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); -} - -void Faust_next_copy(Faust* unit, int inNumSamples) -{ - // update controls - Faust_updateControls(unit); - // Copy buffers - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - float* b = unit->mInBufCopy[i]; - if (INRATE(i) == calc_FullRate) { - // Audio rate: copy buffer - copyBuffer(b, inNumSamples, unit->mInBuf[i]); - } else { - // Control rate: linearly interpolate input - float v1 = IN0(i); - fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); - unit->mInBufValue[i] = v1; - } - } - // dsp computation - unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); -} - -void Faust_next_clear(Faust* unit, int inNumSamples) -{ - ClearUnitOutputs(unit, inNumSamples); -} - -void Faust_Ctor(Faust* unit) // module constructor -{ - // allocate dsp - unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); - if (!unit->mDSP) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - { - // init dsp - unit->mDSP->instanceInit((int)SAMPLERATE); - - // allocate controls - unit->mNumControls = g_numControls; - ControlAllocator ca(unit->mControls); - unit->mDSP->buildUserInterface(&ca); - unit->mInBufCopy = 0; - unit->mInBufValue = 0; - - // check input/output channel configuration - const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; - const size_t numOutputs = unit->mDSP->getNumOutputs(); - - bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); - - if (channelsValid) { - bool rateValid = true; - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - if (INRATE(i) != calc_FullRate) { - rateValid = false; - break; - } - } - if (rateValid) { - SETCALC(Faust_next); - } else { - unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); - if (!unit->mInBufCopy) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Allocate memory for input buffer copies (numInputs * bufLength) - // and linear interpolation state (numInputs) - // = numInputs * (bufLength + 1) - unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); - if (!unit->mInBufValue) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - // Aquire memory for interpolator state. - float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); - if (mem) { - Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); - goto end; - } - for (int i = 0; i < unit->getNumAudioInputs(); ++i) { - // Initialize interpolator. - unit->mInBufValue[i] = IN0(i); - // Aquire buffer memory. - unit->mInBufCopy[i] = mem; - mem += BUFLENGTH; - } - SETCALC(Faust_next_copy); - } - #if !defined(NDEBUG) - Print("Faust[%s]:\n", g_unitName); - Print(" Inputs: %d\n" - " Outputs: %d\n" - " Callback: %s\n", - numInputs, numOutputs, - unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); - #endif - } else { - Print("Faust[%s]:\n", g_unitName); - Print(" Input/Output channel mismatch\n" - " Inputs: faust %d, unit %d\n" - " Outputs: faust %d, unit %d\n", - numInputs, unit->mNumInputs, - numOutputs, unit->mNumOutputs); - Print(" Generating silence ...\n"); - SETCALC(Faust_next_clear); - } - } - -end: - // Fix for https://github.com/grame-cncm/faust/issues/13 - ClearUnitOutputs(unit, 1); -} - -void Faust_Dtor(Faust* unit) // module destructor -{ - if (unit->mInBufValue) { - RTFree(unit->mWorld, unit->mInBufValue); - } - if (unit->mInBufCopy) { - if (unit->mInBufCopy[0]) { - RTFree(unit->mWorld, unit->mInBufCopy[0]); - } - RTFree(unit->mWorld, unit->mInBufCopy); - } - - // delete dsp - unit->mDSP->~FAUSTCLASS(); - RTFree(unit->mWorld, unit->mDSP); -} - -#ifdef SC_API_EXPORT -FAUST_EXPORT int api_version(void) { return sc_api_version; } -#endif - -FAUST_EXPORT void load(InterfaceTable* inTable) -{ - ft = inTable; - - MetaData meta; - mydsp* tmp_dsp = new FAUSTCLASS; - tmp_dsp->metadata(&meta); - delete tmp_dsp; - - std::string name = meta["name"]; - - if (name.empty()) { - name = fileNameToUnitName(__FILE__); - } - - name = normalizeClassName(name); - -#if !defined(NDEBUG) & defined(SC_API_EXPORT) - Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); -#endif - - if (name.empty()) { - // Catch empty name - Print("Faust [supercollider.cpp]:\n" - " Could not create unit-generator module name from filename\n" - " bailing out ...\n"); - return; - } - - if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { - name = SC_FAUST_PREFIX + name; - } - - // Initialize global data - // TODO: Use correct sample rate - initState(name, 48000); - - // Register ugen - (*ft->fDefineUnit)( - (char*)name.c_str(), - unitSize(), - (UnitCtorFunc)&Faust_Ctor, - (UnitDtorFunc)&Faust_Dtor, - kUnitDef_CantAliasInputsToOutputs - ); - -#if !defined(NDEBUG) - Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG -} - -#ifdef SUPERNOVA -extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } -#else -extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } -#endif - -// EOF diff --git a/source/HOAUGens/HOAEncEigenMike1.cpp b/source/HOAUGens/HOAEncEigenMike1.cpp index 1c15e3c11b..92b736c20a 100644 --- a/source/HOAUGens/HOAEncEigenMike1.cpp +++ b/source/HOAUGens/HOAEncEigenMike1.cpp @@ -1,10 +1,11 @@ /* ------------------------------------------------------------ author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2015" +copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncEigenMike1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,20 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -671,26 +688,21 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph24; double fRec27[2]; FAUSTFLOAT fVbargraph25; - double fRec28[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph26; - double fRec29[2]; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fRec28[2]; FAUSTFLOAT fVbargraph27; - double fRec30[2]; + double fRec29[2]; FAUSTFLOAT fVbargraph28; - double fRec31[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph29; - double fRec32[2]; - FAUSTFLOAT fVbargraph30; - double fRec33[2]; - FAUSTFLOAT fVbargraph31; - double fRec0[2]; - FAUSTFLOAT fVbargraph32; - double fRec34[2]; - FAUSTFLOAT fVbargraph33; - double fRec35[2]; - FAUSTFLOAT fVbargraph34; - double fRec36[2]; - FAUSTFLOAT fVbargraph35; public: @@ -698,36 +710,36 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); - m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/license", "GPL"); - m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); - m->declare("lib/eigenmike32.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncEigenMike1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { - return 32; + return 26; } virtual int getNumOutputs() { @@ -841,30 +853,6 @@ class mydsp : public dsp { rate = 1; break; } - case 26: { - rate = 1; - break; - } - case 27: { - rate = 1; - break; - } - case 28: { - rate = 1; - break; - } - case 29: { - rate = 1; - break; - } - case 30: { - rate = 1; - break; - } - case 31: { - rate = 1; - break; - } default: { rate = -1; break; @@ -909,7 +897,14 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = (double(tgamma(1.5)) * sqrt((3.0 * (double(tgamma(1.0)) / double(tgamma(3.0)))))); + fConst2 = (0.047619047619047623 * (0.0 - (1.5957691216057308 * fConst1))); + fConst3 = (0.0 - (1.1283791670955128 * fConst1)); + fConst4 = (0.0 - (1.1283791670955126 * fConst1)); + fConst5 = (0.0 - (1.128379167095513 * fConst1)); + fConst6 = (0.0 - (0.92131773192356115 * fConst1)); + fConst7 = (0.0 - (0.92131773192356148 * fConst1)); } @@ -1028,43 +1023,19 @@ class mydsp : public dsp { } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec0[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec29[l28] = 0.0; + fRec28[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec30[l29] = 0.0; + fRec29[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec31[l30] = 0.0; - - } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec32[l31] = 0.0; - - } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec33[l32] = 0.0; - - } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec0[l33] = 0.0; - - } - for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec34[l34] = 0.0; - - } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec35[l35] = 0.0; - - } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec36[l36] = 0.0; + fRec30[l30] = 0.0; } @@ -1083,9 +1054,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1093,154 +1064,130 @@ class mydsp : public dsp { ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2709f10", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f6120", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x270ea60", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23fac70", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27053c0", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23f15d0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2700870", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23eca80", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26fbd20", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e7f30", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26f71d0", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x23e3300", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26f2680", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2432b50", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26edb30", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2437be0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26e8fe0", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x242dac0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26e4490", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2428a30", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26df940", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24239a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26dadf0", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x241e910", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26d62a0", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2419880", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26d1750", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24147f0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26ccc00", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x240f760", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26c80b0", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x240a6d0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26c3560", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2405640", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26bea10", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24005b0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26b9ec0", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2460bf0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26b5370", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2466700", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26b0820", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x245b0e0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26abcd0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24555d0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26a7180", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x244fac0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26a2620", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2449fb0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x269dad0", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x24444a0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2698f80", &fVbargraph6, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2694430", &fVbargraph5, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x268f8e0", &fVbargraph4, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x268ad90", &fVbargraph3, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2686240", &fVbargraph2, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26816e0", &fVbargraph1, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x267cab0", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x243e990", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2716770", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x246cac0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2723290", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x247c470", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x272bcc0", &fVbargraph34, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2483290", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2737aa0", &fVbargraph35, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x248cdb0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); @@ -1279,12 +1226,6 @@ class mydsp : public dsp { FAUSTFLOAT* input23 = inputs[23]; FAUSTFLOAT* input24 = inputs[24]; FAUSTFLOAT* input25 = inputs[25]; - FAUSTFLOAT* input26 = inputs[26]; - FAUSTFLOAT* input27 = inputs[27]; - FAUSTFLOAT* input28 = inputs[28]; - FAUSTFLOAT* input29 = inputs[29]; - FAUSTFLOAT* input30 = inputs[30]; - FAUSTFLOAT* input31 = inputs[31]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; @@ -1292,124 +1233,102 @@ class mydsp : public dsp { double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - double fTemp0 = double(input31[i]); + double fTemp0 = double(input5[i]); fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input30[i]); + double fTemp1 = double(input4[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input29[i]); + double fTemp2 = double(input3[i]); fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); fVbargraph2 = FAUSTFLOAT(fRec4[0]); - double fTemp3 = double(input28[i]); + double fTemp3 = double(input2[i]); fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = double(input27[i]); + double fTemp4 = double(input0[i]); fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph4 = FAUSTFLOAT(fRec6[0]); - double fTemp5 = double(input26[i]); + double fTemp5 = double(input1[i]); fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp6 = double(input25[i]); + double fTemp6 = double(input17[i]); fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph6 = FAUSTFLOAT(fRec8[0]); - double fTemp7 = double(input24[i]); + double fTemp7 = double(input16[i]); fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph7 = FAUSTFLOAT(fRec9[0]); - double fTemp8 = double(input23[i]); + double fTemp8 = double(input15[i]); fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp9 = double(input22[i]); + double fTemp9 = double(input14[i]); fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph9 = FAUSTFLOAT(fRec11[0]); - double fTemp10 = double(input21[i]); + double fTemp10 = double(input13[i]); fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph10 = FAUSTFLOAT(fRec12[0]); - double fTemp11 = double(input20[i]); + double fTemp11 = double(input12[i]); fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph11 = FAUSTFLOAT(fRec13[0]); - double fTemp12 = double(input19[i]); + double fTemp12 = double(input11[i]); fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph12 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = double(input18[i]); + double fTemp13 = double(input10[i]); fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph13 = FAUSTFLOAT(fRec15[0]); - double fTemp14 = double(input17[i]); + double fTemp14 = double(input9[i]); fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph14 = FAUSTFLOAT(fRec16[0]); - double fTemp15 = double(input16[i]); + double fTemp15 = double(input8[i]); fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph15 = FAUSTFLOAT(fRec17[0]); - double fTemp16 = double(input15[i]); + double fTemp16 = double(input6[i]); fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph16 = FAUSTFLOAT(fRec18[0]); - double fTemp17 = double(input14[i]); + double fTemp17 = double(input7[i]); fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph17 = FAUSTFLOAT(fRec19[0]); - double fTemp18 = double(input13[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + double fTemp18 = (fTemp14 + (fTemp15 + (fTemp16 + fTemp17))); + double fTemp19 = double(input25[i]); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph18 = FAUSTFLOAT(fRec20[0]); - double fTemp19 = double(input12[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + double fTemp20 = double(input24[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph19 = FAUSTFLOAT(fRec21[0]); - double fTemp20 = double(input11[i]); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + double fTemp21 = double(input23[i]); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph20 = FAUSTFLOAT(fRec22[0]); - double fTemp21 = double(input10[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + double fTemp22 = double(input22[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph21 = FAUSTFLOAT(fRec23[0]); - double fTemp22 = double(input9[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + double fTemp23 = double(input21[i]); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph22 = FAUSTFLOAT(fRec24[0]); - double fTemp23 = double(input8[i]); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + double fTemp24 = double(input20[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph23 = FAUSTFLOAT(fRec25[0]); - double fTemp24 = double(input7[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + double fTemp25 = double(input18[i]); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph24 = FAUSTFLOAT(fRec26[0]); - double fTemp25 = double(input6[i]); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + double fTemp26 = double(input19[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph25 = FAUSTFLOAT(fRec27[0]); - double fTemp26 = double(input5[i]); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph26 = FAUSTFLOAT(fRec28[0]); - double fTemp27 = double(input4[i]); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph27 = FAUSTFLOAT(fRec29[0]); - double fTemp28 = double(input3[i]); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); - fVbargraph28 = FAUSTFLOAT(fRec30[0]); - double fTemp29 = double(input2[i]); - fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph29 = FAUSTFLOAT(fRec31[0]); - double fTemp30 = double(input0[i]); - fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph30 = FAUSTFLOAT(fRec32[0]); - double fTemp31 = double(input1[i]); - fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); - fVbargraph31 = FAUSTFLOAT(fRec33[0]); - double fTemp32 = (0.03125 * (fRec1[0] * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + (fTemp5 + (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + (fTemp14 + (fTemp15 + (fTemp16 + (fTemp17 + (fTemp18 + (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + (fTemp23 + (fTemp24 + (fTemp25 + (fTemp26 + (fTemp27 + (fTemp28 + (fTemp29 + (fTemp30 + fTemp31))))))))))))))))))))))))))))))))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); - fVbargraph32 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (fTemp6 + fTemp4); - double fTemp34 = (fTemp26 + fTemp24); - double fTemp35 = (fTemp10 + fTemp8); - double fTemp36 = (fTemp22 + fTemp20); - double fTemp37 = (fTemp18 + fTemp17); - double fTemp38 = (fTemp19 + fTemp16); - double fTemp39 = (fRec1[0] * (((0.031250000005356424 * fTemp33) + ((0.03124999999942539 * fTemp34) + ((((0.028456031166074459 * fTemp31) + (0.050563562154587252 * fTemp25)) + (0.028456031151791669 * fTemp12)) + (0.050563562146664701 * fTemp5)))) - (((((0.03124999999974435 * fTemp35) + ((2.0741519909290582e-11 * (fTemp15 + fTemp13)) + ((0.031249999992537459 * fTemp36) + ((((0.028456031178947395 * fTemp28) + (0.050563562158055714 * fTemp21)) + (0.028456031143523002 * fTemp14)) + (0.050563562143196253 * fTemp9))))) + (1.1672859106216881e-11 * (fTemp11 + fTemp7))) + (0.046042825611330579 * (fTemp1 + (fTemp2 - fTemp37)))) + (0.019313562132325341 * (fTemp0 + (fTemp3 - fTemp38)))))); - fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph33 = FAUSTFLOAT(fRec34[0]); - output1[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (fRec1[0] * ((0.031250000001308703 * (fTemp4 - (fTemp6 + (fTemp8 - (fTemp10 + (fTemp20 - (fTemp22 - (fTemp26 - fTemp24)))))))) - ((((0.019313562147752456 * (fTemp13 - (fTemp15 + (fTemp30 - fTemp29)))) + (0.046042825614321402 * (fTemp7 - (fTemp11 + (fTemp27 - fTemp23))))) + (0.028456031166074459 * (fTemp1 - (fTemp2 + (fTemp18 - fTemp17))))) + (0.050563562154587252 * (fTemp0 - (fTemp3 + (fTemp19 - fTemp16))))))); - fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); - fVbargraph34 = FAUSTFLOAT(fRec35[0]); - output2[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (fRec1[0] * (((0.031250000006153834 * fTemp36) + ((0.031249999999265907 * fTemp34) + ((((0.046042825611330579 * fTemp31) + (0.046042825603374658 * fTemp28)) + (0.019313562132325341 * fTemp25)) + (0.019313562123244806 * fTemp21)))) - ((((0.028456031161235202 * (fTemp7 + (fTemp11 - (fTemp27 + fTemp23)))) + ((0.050563562148694619 * (fTemp13 + (fTemp15 - (fTemp30 + fTemp29)))) + (((0.031249999998946943 * fTemp35) + ((3.9612778101837972e-12 * fTemp38) + ((9.4435413914173993e-12 * fTemp37) + ((((0.046042825625268138 * fTemp14) + (0.046042825620157823 * fTemp12)) + (0.019313562162147378 * fTemp9)) + (0.019313562153066861 * fTemp5))))) + (0.03124999999333487 * fTemp33)))) + (1.7712205246678851e-11 * (fTemp2 + fTemp1))) + (7.4297302997852447e-12 * (fTemp3 + fTemp0))))); - fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph35 = FAUSTFLOAT(fRec36[0]); - output3[i] = FAUSTFLOAT(fTemp41); + double fTemp27 = (fTemp23 + (fTemp24 + (fTemp25 + fTemp26))); + double fTemp28 = (fRec1[0] * (((0.047619047619047623 * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + fTemp5)))))) + (0.038095238095238099 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + fTemp18)))))))))) + (0.03214285714285714 * (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + fTemp27))))))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph26 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (fRec1[0] * ((((fConst2 * fTemp1) + (0.038095238095238099 * ((((fConst3 * fTemp14) + (fConst4 * fTemp11)) + (fConst5 * fTemp10)) + (fConst3 * fTemp6)))) + (fConst1 * (((((((((0.07598900579074909 * fTemp3) + (0.042985873032210013 * fTemp17)) + (0.042985873032210006 * fTemp13)) + (0.042985873032210013 * fTemp12)) + (0.042985873032210013 * fTemp8)) + (0.029613784240400176 * fTemp25)) + (0.02961378424040018 * fTemp26)) + (0.029613784240400176 * fTemp22)) + (0.02961378424040018 * fTemp21)))) + (0.03214285714285714 * ((((fConst6 * fTemp24) + (fConst7 * fTemp23)) + (fConst6 * fTemp20)) + (fConst7 * fTemp19))))); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph27 = FAUSTFLOAT(fRec28[0]); + output1[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fRec1[0] * ((0.082478609884232251 * (fTemp4 - fTemp0)) - ((0.046656947481584346 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 - fTemp18))))) + (0.03214285714285714 * (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 - fTemp27)))))))); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + output2[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fRec1[0] * ((fConst1 * (((((((((0.07598900579074909 * fTemp5) + (0.042985873032210013 * fTemp16)) + (0.042985873032210013 * fTemp13)) + (0.042985873032209999 * fTemp10)) + (0.042985873032210013 * fTemp9)) + (0.02961378424040018 * fTemp25)) + (0.029613784240400173 * fTemp23)) + (0.02961378424040018 * fTemp22)) + (0.029613784240400173 * fTemp19))) + (((fConst2 * fTemp2) + (0.038095238095238099 * ((((fConst3 * fTemp15) + (fConst4 * fTemp12)) + (fConst5 * fTemp11)) + (fConst3 * fTemp7)))) + (0.03214285714285714 * ((((fConst6 * fTemp26) + (fConst7 * fTemp24)) + (fConst6 * fTemp21)) + (fConst7 * fTemp20)))))); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph29 = FAUSTFLOAT(fRec30[0]); + output3[i] = FAUSTFLOAT(fTemp31); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; @@ -1437,16 +1356,10 @@ class mydsp : public dsp { fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; fRec27[1] = fRec27[0]; + fRec0[1] = fRec0[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; fRec30[1] = fRec30[0]; - fRec31[1] = fRec31[0]; - fRec32[1] = fRec32[0]; - fRec33[1] = fRec33[0]; - fRec0[1] = fRec0[0]; - fRec34[1] = fRec34[0]; - fRec35[1] = fRec35[0]; - fRec36[1] = fRec36[0]; } @@ -1455,7 +1368,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1687,7 +1599,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1750,7 +1662,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1779,11 +1691,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncEigenMike2.cpp b/source/HOAUGens/HOAEncEigenMike2.cpp index 73c3cd0600..aa7d6d07ed 100644 --- a/source/HOAUGens/HOAEncEigenMike2.cpp +++ b/source/HOAUGens/HOAEncEigenMike2.cpp @@ -1,10 +1,11 @@ /* ------------------------------------------------------------ author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2015" +copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncEigenMike2" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,20 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -671,36 +688,62 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph24; double fRec27[2]; FAUSTFLOAT fVbargraph25; - double fRec28[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph26; - double fRec29[2]; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fRec28[2]; FAUSTFLOAT fVbargraph27; - double fRec30[2]; + double fRec29[2]; FAUSTFLOAT fVbargraph28; - double fRec31[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph29; - double fRec32[2]; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fRec31[2]; FAUSTFLOAT fVbargraph30; - double fRec33[2]; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fRec32[2]; FAUSTFLOAT fVbargraph31; - double fRec0[2]; + double fRec33[2]; FAUSTFLOAT fVbargraph32; + double fConst31; + double fConst32; double fRec34[2]; FAUSTFLOAT fVbargraph33; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; double fRec35[2]; FAUSTFLOAT fVbargraph34; - double fRec36[2]; - FAUSTFLOAT fVbargraph35; - double fRec37[2]; - FAUSTFLOAT fVbargraph36; - double fRec38[2]; - FAUSTFLOAT fVbargraph37; - double fRec39[2]; - FAUSTFLOAT fVbargraph38; - double fRec40[2]; - FAUSTFLOAT fVbargraph39; - double fRec41[2]; - FAUSTFLOAT fVbargraph40; public: @@ -708,36 +751,36 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); - m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/license", "GPL"); - m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); - m->declare("lib/eigenmike32.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncEigenMike2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { - return 32; + return 26; } virtual int getNumOutputs() { @@ -851,30 +894,6 @@ class mydsp : public dsp { rate = 1; break; } - case 26: { - rate = 1; - break; - } - case 27: { - rate = 1; - break; - } - case 28: { - rate = 1; - break; - } - case 29: { - rate = 1; - break; - } - case 30: { - rate = 1; - break; - } - case 31: { - rate = 1; - break; - } default: { rate = -1; break; @@ -939,7 +958,45 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.5)); + fConst2 = double(tgamma(1.0)); + fConst3 = (fConst1 * sqrt((3.0 * (fConst2 / double(tgamma(3.0)))))); + fConst4 = (0.047619047619047623 * (0.0 - (1.5957691216057308 * fConst3))); + fConst5 = (0.0 - (1.1283791670955128 * fConst3)); + fConst6 = (0.0 - (1.1283791670955126 * fConst3)); + fConst7 = (0.0 - (1.128379167095513 * fConst3)); + fConst8 = (0.0 - (0.92131773192356115 * fConst3)); + fConst9 = (0.0 - (0.92131773192356148 * fConst3)); + fConst10 = (double(tgamma(2.5)) * sqrt((5.0 * (fConst2 / double(tgamma(5.0)))))); + fConst11 = (0.03214285714285714 * (0.0 - (2.1276921621409737 * fConst10))); + fConst12 = (0.0 - (3.1915382432114616 * fConst10)); + fConst13 = (0.038095238095238099 * fConst12); + fConst14 = sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))); + fConst15 = (fConst1 * fConst14); + fConst16 = (0.0 - (2.3936536824085959 * fConst15)); + fConst17 = (0.0 - (1.6925687506432687 * fConst1)); + fConst18 = (0.0 - (1.4142135623730951 * (fConst14 * fConst17))); + fConst19 = (0.091186806948898899 * fConst1); + fConst20 = (0.053874802376117914 * fConst17); + fConst21 = (0.051292578908755625 * fConst1); + fConst22 = (0.051292578908755639 * fConst1); + fConst23 = (0.0 - (1.5957691216057308 * fConst1)); + fConst24 = (0.03214285714285714 * fConst23); + fConst25 = (0.032142857142857147 * fConst23); + fConst26 = (0.0 - (1.5957691216057308 * fConst15)); + fConst27 = (0.0 - (1.5957691216057313 * fConst15)); + fConst28 = (fConst14 * fConst23); + fConst29 = (0.0 - fConst28); + fConst30 = (0.0 - (1.0000000000000002 * fConst28)); + fConst31 = (0.051292578908755618 * fConst1); + fConst32 = (0.032142857142857133 * fConst23); + fConst33 = (0.0 - (4.7244256554467816e-16 * fConst10)); + fConst34 = (0.0 - (9.4488513108935631e-16 * fConst10)); + fConst35 = (0.047619047619047623 * fConst12); + fConst36 = (0.0 - (1.595769121605731 * fConst10)); + fConst37 = (0.0 - (7.0866384831701748e-16 * fConst10)); + fConst38 = (0.0 - (1.417327696634035e-15 * fConst10)); } @@ -1058,31 +1115,31 @@ class mydsp : public dsp { } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec0[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec29[l28] = 0.0; + fRec28[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec30[l29] = 0.0; + fRec29[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec31[l30] = 0.0; + fRec30[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec32[l31] = 0.0; + fRec31[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec33[l32] = 0.0; + fRec32[l32] = 0.0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec0[l33] = 0.0; + fRec33[l33] = 0.0; } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { @@ -1093,30 +1150,6 @@ class mydsp : public dsp { fRec35[l35] = 0.0; } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec36[l36] = 0.0; - - } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec37[l37] = 0.0; - - } - for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec38[l38] = 0.0; - - } - for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec39[l39] = 0.0; - - } - for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - fRec40[l40] = 0.0; - - } - for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec41[l41] = 0.0; - - } } @@ -1133,9 +1166,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1143,176 +1176,152 @@ class mydsp : public dsp { ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b83220", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d583c0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b87d70", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d5cf10", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b7e6d0", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d53870", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b79b80", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d4ed20", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b75030", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d4a1d0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b704e0", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d455a0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b6b990", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d94df0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b66e40", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d99e80", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b622f0", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d8fd60", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b5d7a0", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d8acd0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b58c50", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d85c40", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b54100", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d80bb0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b4f5b0", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d7bb20", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b4aa60", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d76a90", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b45f10", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d71a00", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b413c0", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d6c970", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b3c870", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d678e0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b37d20", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d62850", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b331d0", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dc2ea0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b2e680", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dc89b0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b29b30", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dbd380", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b24fe0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2db7870", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b20490", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2db1d60", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b1b940", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dac250", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b16df0", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2da6740", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b122a0", &fVbargraph6, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b0d750", &fVbargraph5, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b08c00", &fVbargraph4, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b040b0", &fVbargraph3, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3aff560", &fVbargraph2, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3afaa10", &fVbargraph1, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3af5de0", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2da0c30", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b8fa80", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dcef80", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3b9c9c0", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ddef30", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3ba5e40", &fVbargraph34, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2de5d50", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bb2460", &fVbargraph35, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2def870", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bbd250", &fVbargraph36, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dfa9c0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bc6180", &fVbargraph37, -70.0, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e0b710", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bd01c0", &fVbargraph38, -70.0, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e136c0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3bd94c0", &fVbargraph39, -70.0, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e1c6e0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3be3ec0", &fVbargraph40, -70.0, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2e2ae50", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); @@ -1351,12 +1360,6 @@ class mydsp : public dsp { FAUSTFLOAT* input23 = inputs[23]; FAUSTFLOAT* input24 = inputs[24]; FAUSTFLOAT* input25 = inputs[25]; - FAUSTFLOAT* input26 = inputs[26]; - FAUSTFLOAT* input27 = inputs[27]; - FAUSTFLOAT* input28 = inputs[28]; - FAUSTFLOAT* input29 = inputs[29]; - FAUSTFLOAT* input30 = inputs[30]; - FAUSTFLOAT* input31 = inputs[31]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; @@ -1369,162 +1372,123 @@ class mydsp : public dsp { double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - double fTemp0 = double(input31[i]); + double fTemp0 = double(input5[i]); fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input30[i]); + double fTemp1 = double(input4[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input29[i]); + double fTemp2 = double(input3[i]); fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); fVbargraph2 = FAUSTFLOAT(fRec4[0]); - double fTemp3 = double(input28[i]); + double fTemp3 = double(input2[i]); fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = double(input27[i]); + double fTemp4 = double(input0[i]); fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph4 = FAUSTFLOAT(fRec6[0]); - double fTemp5 = double(input26[i]); + double fTemp5 = double(input1[i]); fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp6 = double(input25[i]); + double fTemp6 = double(input17[i]); fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph6 = FAUSTFLOAT(fRec8[0]); - double fTemp7 = double(input24[i]); + double fTemp7 = double(input16[i]); fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph7 = FAUSTFLOAT(fRec9[0]); - double fTemp8 = double(input23[i]); + double fTemp8 = double(input15[i]); fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp9 = double(input22[i]); + double fTemp9 = double(input14[i]); fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph9 = FAUSTFLOAT(fRec11[0]); - double fTemp10 = double(input21[i]); + double fTemp10 = double(input13[i]); fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph10 = FAUSTFLOAT(fRec12[0]); - double fTemp11 = double(input20[i]); + double fTemp11 = double(input12[i]); fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph11 = FAUSTFLOAT(fRec13[0]); - double fTemp12 = double(input19[i]); + double fTemp12 = double(input11[i]); fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph12 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = double(input18[i]); + double fTemp13 = double(input10[i]); fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph13 = FAUSTFLOAT(fRec15[0]); - double fTemp14 = double(input17[i]); + double fTemp14 = double(input9[i]); fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph14 = FAUSTFLOAT(fRec16[0]); - double fTemp15 = double(input16[i]); + double fTemp15 = double(input8[i]); fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph15 = FAUSTFLOAT(fRec17[0]); - double fTemp16 = double(input15[i]); + double fTemp16 = double(input6[i]); fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph16 = FAUSTFLOAT(fRec18[0]); - double fTemp17 = double(input14[i]); + double fTemp17 = double(input7[i]); fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph17 = FAUSTFLOAT(fRec19[0]); - double fTemp18 = double(input13[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + double fTemp18 = (fTemp14 + (fTemp15 + (fTemp16 + fTemp17))); + double fTemp19 = double(input25[i]); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph18 = FAUSTFLOAT(fRec20[0]); - double fTemp19 = double(input12[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + double fTemp20 = double(input24[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph19 = FAUSTFLOAT(fRec21[0]); - double fTemp20 = double(input11[i]); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + double fTemp21 = double(input23[i]); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph20 = FAUSTFLOAT(fRec22[0]); - double fTemp21 = double(input10[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + double fTemp22 = double(input22[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph21 = FAUSTFLOAT(fRec23[0]); - double fTemp22 = double(input9[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + double fTemp23 = double(input21[i]); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph22 = FAUSTFLOAT(fRec24[0]); - double fTemp23 = double(input8[i]); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + double fTemp24 = double(input20[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph23 = FAUSTFLOAT(fRec25[0]); - double fTemp24 = double(input7[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + double fTemp25 = double(input18[i]); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph24 = FAUSTFLOAT(fRec26[0]); - double fTemp25 = double(input6[i]); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + double fTemp26 = double(input19[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph25 = FAUSTFLOAT(fRec27[0]); - double fTemp26 = double(input5[i]); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph26 = FAUSTFLOAT(fRec28[0]); - double fTemp27 = double(input4[i]); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph27 = FAUSTFLOAT(fRec29[0]); - double fTemp28 = double(input3[i]); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); - fVbargraph28 = FAUSTFLOAT(fRec30[0]); - double fTemp29 = double(input2[i]); - fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph29 = FAUSTFLOAT(fRec31[0]); - double fTemp30 = double(input0[i]); - fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph30 = FAUSTFLOAT(fRec32[0]); - double fTemp31 = double(input1[i]); - fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); - fVbargraph31 = FAUSTFLOAT(fRec33[0]); - double fTemp32 = (0.03125 * (fRec1[0] * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + (fTemp5 + (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + (fTemp14 + (fTemp15 + (fTemp16 + (fTemp17 + (fTemp18 + (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + (fTemp23 + (fTemp24 + (fTemp25 + (fTemp26 + (fTemp27 + (fTemp28 + (fTemp29 + (fTemp30 + fTemp31))))))))))))))))))))))))))))))))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); - fVbargraph32 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (fTemp6 + fTemp4); - double fTemp34 = (fTemp26 + fTemp24); - double fTemp35 = (fTemp10 + fTemp8); - double fTemp36 = (fTemp15 + fTemp13); - double fTemp37 = (fTemp22 + fTemp20); - double fTemp38 = (fTemp11 + fTemp7); - double fTemp39 = (fTemp18 + fTemp17); - double fTemp40 = (fTemp19 + fTemp16); - double fTemp41 = (fRec1[0] * (((0.031250000005356424 * fTemp33) + ((0.03124999999942539 * fTemp34) + ((((0.028456031166074459 * fTemp31) + (0.050563562154587252 * fTemp25)) + (0.028456031151791669 * fTemp12)) + (0.050563562146664701 * fTemp5)))) - (((((0.03124999999974435 * fTemp35) + ((2.0741519909290582e-11 * fTemp36) + ((0.031249999992537459 * fTemp37) + ((((0.028456031178947395 * fTemp28) + (0.050563562158055714 * fTemp21)) + (0.028456031143523002 * fTemp14)) + (0.050563562143196253 * fTemp9))))) + (1.1672859106216881e-11 * fTemp38)) + (0.046042825611330579 * (fTemp1 + (fTemp2 - fTemp39)))) + (0.019313562132325341 * (fTemp0 + (fTemp3 - fTemp40)))))); - fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + double fTemp27 = (fTemp23 + (fTemp24 + (fTemp25 + fTemp26))); + double fTemp28 = (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + fTemp27)))); + double fTemp29 = (fRec1[0] * (((0.047619047619047623 * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + fTemp5)))))) + (0.038095238095238099 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + fTemp18)))))))))) + (0.03214285714285714 * fTemp28))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph26 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fRec1[0] * ((((fConst4 * fTemp1) + (0.038095238095238099 * ((((fConst5 * fTemp14) + (fConst6 * fTemp11)) + (fConst7 * fTemp10)) + (fConst5 * fTemp6)))) + (fConst3 * (((((((((0.07598900579074909 * fTemp3) + (0.042985873032210013 * fTemp17)) + (0.042985873032210006 * fTemp13)) + (0.042985873032210013 * fTemp12)) + (0.042985873032210013 * fTemp8)) + (0.029613784240400176 * fTemp25)) + (0.02961378424040018 * fTemp26)) + (0.029613784240400176 * fTemp22)) + (0.02961378424040018 * fTemp21)))) + (0.03214285714285714 * ((((fConst8 * fTemp24) + (fConst9 * fTemp23)) + (fConst8 * fTemp20)) + (fConst9 * fTemp19))))); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph27 = FAUSTFLOAT(fRec28[0]); + output1[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fRec1[0] * ((0.082478609884232251 * (fTemp4 - fTemp0)) - ((0.046656947481584346 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 - fTemp18))))) + (0.03214285714285714 * (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 - fTemp27)))))))); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + output2[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (fRec1[0] * ((fConst3 * (((((((((0.07598900579074909 * fTemp5) + (0.042985873032210013 * fTemp16)) + (0.042985873032210013 * fTemp13)) + (0.042985873032209999 * fTemp10)) + (0.042985873032210013 * fTemp9)) + (0.02961378424040018 * fTemp25)) + (0.029613784240400173 * fTemp23)) + (0.02961378424040018 * fTemp22)) + (0.029613784240400173 * fTemp19))) + (((fConst4 * fTemp2) + (0.038095238095238099 * ((((fConst5 * fTemp15) + (fConst6 * fTemp12)) + (fConst7 * fTemp11)) + (fConst5 * fTemp7)))) + (0.03214285714285714 * ((((fConst8 * fTemp26) + (fConst9 * fTemp24)) + (fConst8 * fTemp21)) + (fConst9 * fTemp20)))))); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph29 = FAUSTFLOAT(fRec30[0]); + output3[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (fRec1[0] * ((fConst11 * (fTemp19 + (fTemp21 + (fTemp26 + fTemp23)))) + ((fConst13 * (fTemp12 + fTemp10)) + (fConst10 * ((((((0.12158240926519855 * fTemp13) + (0.12158240926519859 * fTemp11)) + (0.068390105211674143 * fTemp25)) + (0.068390105211674157 * fTemp24)) + (0.068390105211674143 * fTemp22)) + (0.068390105211674157 * fTemp20)))))); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + output4[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (fRec1[0] * (((0.038095238095238099 * ((fConst16 * fTemp14) + (fConst18 * fTemp6))) + (fConst14 * ((((((fConst19 * fTemp17) + (fConst20 * fTemp8)) + (fConst21 * fTemp25)) + (fConst22 * fTemp26)) + (fConst24 * fTemp22)) + (fConst25 * fTemp21)))) + (0.03214285714285714 * ((((fConst26 * fTemp24) + (fConst27 * fTemp23)) + (fConst29 * fTemp20)) + (fConst30 * fTemp19))))); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph31 = FAUSTFLOAT(fRec32[0]); + output5[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (fRec1[0] * (((0.021295885499997991 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + fTemp18))))) + ((0.10647942749999 * (fTemp4 + fTemp0)) + (7.9795740640090912e-18 * fTemp28))) - ((0.053239713749994998 * (fTemp1 + (fTemp2 + (fTemp5 + fTemp3)))) + (0.042591770999995997 * (fTemp10 + (fTemp11 + (fTemp13 + fTemp12))))))); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + output6[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (fRec1[0] * ((fConst14 * ((((((fConst19 * fTemp16) + (fConst20 * fTemp9)) + (fConst22 * fTemp25)) + (fConst31 * fTemp23)) + (fConst25 * fTemp22)) + (fConst32 * fTemp19))) + ((0.038095238095238099 * ((fConst16 * fTemp15) + (fConst18 * fTemp7))) + (0.03214285714285714 * ((((fConst26 * fTemp26) + (fConst27 * fTemp24)) + (fConst29 * fTemp21)) + (fConst30 * fTemp20)))))); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph33 = FAUSTFLOAT(fRec34[0]); - output1[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (fTemp26 - fTemp24); - double fTemp43 = (fTemp30 - fTemp29); - double fTemp44 = (fTemp27 - fTemp23); - double fTemp45 = (fTemp18 - fTemp17); - double fTemp46 = (fTemp19 - fTemp16); - double fTemp47 = (fRec1[0] * ((0.031250000001308703 * (fTemp4 - (fTemp6 + (fTemp8 - (fTemp10 + (fTemp20 - (fTemp22 - fTemp42))))))) - ((((0.019313562147752456 * (fTemp13 - (fTemp15 + fTemp43))) + (0.046042825614321402 * (fTemp7 - (fTemp11 + fTemp44)))) + (0.028456031166074459 * (fTemp1 - (fTemp2 + fTemp45)))) + (0.050563562154587252 * (fTemp0 - (fTemp3 + fTemp46)))))); - fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + output7[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (fRec1[0] * ((0.03214285714285714 * ((((fConst33 * fTemp26) + (fConst34 * fTemp23)) + (fConst33 * fTemp21)) + (fConst34 * fTemp19))) + (((fConst35 * (fTemp3 + fTemp1)) + (0.038095238095238099 * (((((fConst36 * (fTemp17 + fTemp14)) + (fConst37 * fTemp12)) + (fConst38 * fTemp10)) + (fConst36 * fTemp8)) + (fConst36 * fTemp6)))) + (fConst10 * (((((((((((0.06079120463259928 * fTemp16) + (0.15197801158149818 * (fTemp5 + fTemp2))) + (0.06079120463259928 * fTemp15)) + (2.6996718031124477e-17 * fTemp13)) + (5.3993436062248954e-17 * fTemp11)) + (0.06079120463259928 * fTemp9)) + (0.06079120463259928 * fTemp7)) + (1.518565389250751e-17 * fTemp25)) + (3.037130778501502e-17 * fTemp24)) + (1.518565389250751e-17 * fTemp22)) + (3.037130778501502e-17 * fTemp20)))))); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph34 = FAUSTFLOAT(fRec35[0]); - output2[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (fTemp27 + fTemp23); - double fTemp49 = (fTemp30 + fTemp29); - double fTemp50 = (fTemp2 + fTemp1); - double fTemp51 = (fTemp3 + fTemp0); - double fTemp52 = (fRec1[0] * (((0.031250000006153834 * fTemp37) + ((0.031249999999265907 * fTemp34) + ((((0.046042825611330579 * fTemp31) + (0.046042825603374658 * fTemp28)) + (0.019313562132325341 * fTemp25)) + (0.019313562123244806 * fTemp21)))) - ((((0.028456031161235202 * (fTemp7 + (fTemp11 - fTemp48))) + ((0.050563562148694619 * (fTemp13 + (fTemp15 - fTemp49))) + (((0.031249999998946943 * fTemp35) + ((3.9612778101837972e-12 * fTemp40) + ((9.4435413914173993e-12 * fTemp39) + ((((0.046042825625268138 * fTemp14) + (0.046042825620157823 * fTemp12)) + (0.019313562162147378 * fTemp9)) + (0.019313562153066861 * fTemp5))))) + (0.03124999999333487 * fTemp33)))) + (1.7712205246678851e-11 * fTemp50)) + (7.4297302997852447e-12 * fTemp51)))); - fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); - fVbargraph35 = FAUSTFLOAT(fRec36[0]); - output3[i] = FAUSTFLOAT(fTemp52); - double fTemp53 = (fRec1[0] * (((5.9280216802104561e-12 * fTemp51) + (((1.3722268867176347e-11 * fTemp38) + ((4.3326398788419054e-11 * fTemp36) + ((((0.054126587736687347 * fTemp31) + (0.040343576494253922 * fTemp25)) + (0.054126587710176526 * fTemp14)) + (0.040343576547459722 * fTemp9)))) + (3.3690616435560736e-11 * fTemp50))) - (((3.1606181910512831e-12 * fTemp40) + ((1.796268315438824e-11 * fTemp39) + ((((0.054126587751820394 * fTemp28) + (0.040343576478053242 * fTemp21)) + (0.054126587719896917 * fTemp12)) + (0.040343576531259084 * fTemp5)))) + (0.040343576521304395 * (fTemp4 + (fTemp6 - (fTemp8 + (fTemp10 - (fTemp20 + (fTemp22 - fTemp34)))))))))); - fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); - fVbargraph36 = FAUSTFLOAT(fRec37[0]); - output4[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = (fTemp22 - fTemp20); - double fTemp55 = (fTemp10 - fTemp8); - double fTemp56 = (fTemp6 - fTemp4); - double fTemp57 = (fRec1[0] * (((((0.040343576523941639 * fTemp42) + (0.040343576515049356 * fTemp54)) + (0.054126587736687347 * (fTemp1 - (fTemp2 - fTemp45)))) + (0.040343576494253922 * (fTemp0 - (fTemp3 - fTemp46)))) - ((((1.6549211726374409e-11 * (fTemp15 - fTemp13)) + (0.040343576524353414 * fTemp55)) + (2.2203097434927284e-11 * (fTemp11 - fTemp7))) + (0.04034357653159857 * fTemp56)))); - fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); - fVbargraph37 = FAUSTFLOAT(fRec38[0]); - output5[i] = FAUSTFLOAT(fTemp57); - double fTemp58 = (fTemp7 + (fTemp11 + fTemp48)); - double fTemp59 = (fTemp0 + (fTemp3 + fTemp40)); - double fTemp60 = (fTemp13 + (fTemp15 + fTemp49)); - double fTemp61 = (fTemp1 + (fTemp2 + fTemp39)); - double fTemp62 = (fRec1[0] * ((((0.040906781083793552 * fTemp58) + (2.9263569544132831e-12 * (fTemp4 + (fTemp6 + (fTemp8 + (fTemp10 + (fTemp20 + (fTemp22 + fTemp34)))))))) + (0.056531781096479022 * fTemp59)) - (((0.021593218926725059 * fTemp60) + (0.034938562148434216 * (fTemp5 + (fTemp9 + (fTemp12 + (fTemp14 + (fTemp21 + (fTemp25 + (fTemp31 + fTemp28))))))))) + (0.0059682189255058932 * fTemp61)))); - fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); - fVbargraph38 = FAUSTFLOAT(fRec39[0]); - output6[i] = FAUSTFLOAT(fTemp62); - double fTemp63 = (fRec1[0] * (((0.054126587730998453 * (fTemp7 - (fTemp11 - fTemp44))) + ((0.040343576521777599 * (fTemp13 - (fTemp15 - fTemp43))) + ((0.040343576523735748 * fTemp42) + (0.040343576516078811 * fTemp56)))) - (((((0.040343576532628024 * fTemp54) + ((1.1101548718630453e-11 * fTemp45) + (8.2746058575420039e-12 * fTemp46))) + (0.040343576523323967 * fTemp55)) + (2.0821946059249937e-11 * (fTemp2 - fTemp1))) + (1.5519762259670396e-11 * (fTemp3 - fTemp0))))); - fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); - fVbargraph39 = FAUSTFLOAT(fRec40[0]); - output7[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (fRec1[0] * ((((0.052810427283009165 * fTemp60) + ((1.7578661182284158e-11 * fTemp37) + ((((0.027063293867943854 * fTemp31) + (0.027063293837677766 * fTemp28)) + (0.0270632939209655 * fTemp14)) + (0.027063293901524704 * fTemp12)))) + (0.016726035452584633 * fTemp58)) - ((((1.5519762270076438e-11 * fTemp33) + ((1.0294494561038593e-12 * fTemp35) + ((2.0588989122077187e-13 * fTemp34) + ((((0.045105489806145357 * fTemp25) + (0.04510548982063569 * fTemp21)) + (0.045105489758556633 * fTemp9)) + (0.045105489773046931 * fTemp5))))) + (0.043789329326217374 * fTemp61)) + (0.0077049374891727668 * fTemp59)))); - fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); - fVbargraph40 = FAUSTFLOAT(fRec41[0]); - output8[i] = FAUSTFLOAT(fTemp64); + output8[i] = FAUSTFLOAT(fTemp37); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; @@ -1552,21 +1516,15 @@ class mydsp : public dsp { fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; fRec27[1] = fRec27[0]; + fRec0[1] = fRec0[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; fRec33[1] = fRec33[0]; - fRec0[1] = fRec0[0]; fRec34[1] = fRec34[0]; fRec35[1] = fRec35[0]; - fRec36[1] = fRec36[0]; - fRec37[1] = fRec37[0]; - fRec38[1] = fRec38[0]; - fRec39[1] = fRec39[0]; - fRec40[1] = fRec40[0]; - fRec41[1] = fRec41[0]; } @@ -1575,7 +1533,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1807,7 +1764,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1870,7 +1827,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1899,11 +1856,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncEigenMike3.cpp b/source/HOAUGens/HOAEncEigenMike3.cpp index 4c9d3bf716..44ada2b54c 100644 --- a/source/HOAUGens/HOAEncEigenMike3.cpp +++ b/source/HOAUGens/HOAEncEigenMike3.cpp @@ -1,10 +1,11 @@ /* ------------------------------------------------------------ author: "Pierre Lecomte" -copyright: "(c) Pierre Lecomte 2015" +copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncEigenMike3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,20 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -671,50 +688,140 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph24; double fRec27[2]; FAUSTFLOAT fVbargraph25; - double fRec28[2]; + double fRec0[2]; FAUSTFLOAT fVbargraph26; - double fRec29[2]; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fRec28[2]; FAUSTFLOAT fVbargraph27; - double fRec30[2]; + double fRec29[2]; FAUSTFLOAT fVbargraph28; - double fRec31[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph29; - double fRec32[2]; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fRec31[2]; FAUSTFLOAT fVbargraph30; - double fRec33[2]; + double fConst17; + double fConst18; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fRec32[2]; FAUSTFLOAT fVbargraph31; - double fRec0[2]; + double fRec33[2]; FAUSTFLOAT fVbargraph32; + double fConst35; + double fConst36; double fRec34[2]; FAUSTFLOAT fVbargraph33; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; double fRec35[2]; FAUSTFLOAT fVbargraph34; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; double fRec36[2]; FAUSTFLOAT fVbargraph35; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; double fRec37[2]; FAUSTFLOAT fVbargraph36; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; double fRec38[2]; FAUSTFLOAT fVbargraph37; double fRec39[2]; FAUSTFLOAT fVbargraph38; + double fConst83; + double fConst84; + double fConst85; double fRec40[2]; FAUSTFLOAT fVbargraph39; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; double fRec41[2]; FAUSTFLOAT fVbargraph40; + double fConst99; + double fConst100; + double fConst101; + double fConst102; double fRec42[2]; FAUSTFLOAT fVbargraph41; - double fRec43[2]; - FAUSTFLOAT fVbargraph42; - double fRec44[2]; - FAUSTFLOAT fVbargraph43; - double fRec45[2]; - FAUSTFLOAT fVbargraph44; - double fRec46[2]; - FAUSTFLOAT fVbargraph45; - double fRec47[2]; - FAUSTFLOAT fVbargraph46; - double fRec48[2]; - FAUSTFLOAT fVbargraph47; public: @@ -722,36 +829,36 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); - m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); - m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/license", "GPL"); - m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); - m->declare("lib/eigenmike32.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncEigenMike3"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { - return 32; + return 26; } virtual int getNumOutputs() { @@ -865,30 +972,6 @@ class mydsp : public dsp { rate = 1; break; } - case 26: { - rate = 1; - break; - } - case 27: { - rate = 1; - break; - } - case 28: { - rate = 1; - break; - } - case 29: { - rate = 1; - break; - } - case 30: { - rate = 1; - break; - } - case 31: { - rate = 1; - break; - } default: { rate = -1; break; @@ -981,7 +1064,109 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.0)); + fConst2 = double(tgamma(3.0)); + fConst3 = double(tgamma(1.5)); + fConst4 = (sqrt((3.0 * (fConst1 / fConst2))) * fConst3); + fConst5 = (0.047619047619047623 * (0.0 - (1.5957691216057308 * fConst4))); + fConst6 = (0.0 - (1.1283791670955128 * fConst4)); + fConst7 = (0.0 - (1.1283791670955126 * fConst4)); + fConst8 = (0.0 - (1.128379167095513 * fConst4)); + fConst9 = (0.0 - (0.92131773192356115 * fConst4)); + fConst10 = (0.0 - (0.92131773192356148 * fConst4)); + fConst11 = double(tgamma(2.5)); + fConst12 = double(tgamma(5.0)); + fConst13 = (fConst11 * sqrt((5.0 * (fConst1 / fConst12)))); + fConst14 = (0.03214285714285714 * (0.0 - (2.1276921621409737 * fConst13))); + fConst15 = (0.0 - (3.1915382432114616 * fConst13)); + fConst16 = (0.038095238095238099 * fConst15); + fConst17 = double(tgamma(2.0)); + fConst18 = sqrt((5.0 * (fConst17 / double(tgamma(4.0))))); + fConst19 = (fConst3 * fConst18); + fConst20 = (0.0 - (2.3936536824085959 * fConst19)); + fConst21 = (0.0 - (1.6925687506432687 * fConst3)); + fConst22 = (0.0 - (1.4142135623730951 * (fConst21 * fConst18))); + fConst23 = (0.091186806948898899 * fConst3); + fConst24 = (0.053874802376117914 * fConst21); + fConst25 = (0.051292578908755625 * fConst3); + fConst26 = (0.051292578908755639 * fConst3); + fConst27 = (0.0 - (1.5957691216057308 * fConst3)); + fConst28 = (0.03214285714285714 * fConst27); + fConst29 = (0.032142857142857147 * fConst27); + fConst30 = (0.0 - (1.5957691216057308 * fConst19)); + fConst31 = (0.0 - (1.5957691216057313 * fConst19)); + fConst32 = (fConst27 * fConst18); + fConst33 = (0.0 - fConst32); + fConst34 = (0.0 - (1.0000000000000002 * fConst32)); + fConst35 = (0.051292578908755618 * fConst3); + fConst36 = (0.032142857142857133 * fConst27); + fConst37 = (0.0 - (4.7244256554467816e-16 * fConst13)); + fConst38 = (0.0 - (9.4488513108935631e-16 * fConst13)); + fConst39 = (0.047619047619047623 * fConst15); + fConst40 = (0.0 - (1.595769121605731 * fConst13)); + fConst41 = (0.0 - (7.0866384831701748e-16 * fConst13)); + fConst42 = (0.0 - (1.417327696634035e-15 * fConst13)); + fConst43 = (double(tgamma(3.5)) * sqrt((7.0 * (fConst1 / double(tgamma(7.0)))))); + fConst44 = (0.047619047619047623 * (0.0 - (6.3830764864229232 * fConst43))); + fConst45 = (0.0 - (2.256758334191026 * fConst43)); + fConst46 = (0.0 - (4.5135166683820547 * fConst43)); + fConst47 = (0.0 - (4.5135166683820476 * fConst43)); + fConst48 = (0.0 - (2.456847285129498 * fConst43)); + fConst49 = (0.0 - (2.456847285129494 * fConst43)); + fConst50 = sqrt((7.0 * (fConst17 / double(tgamma(6.0))))); + fConst51 = (0.0 - (4.3431334391370653 * fConst11)); + fConst52 = (0.045456864504849481 * fConst51); + fConst53 = (0.045456864504849488 * fConst51); + fConst54 = (fConst11 * fConst50); + fConst55 = (0.0 - (6.1421182128237417 * fConst54)); + fConst56 = (fConst50 * fConst51); + fConst57 = (0.0 - (1.4142135623730951 * fConst56)); + fConst58 = sqrt((7.0 * (fConst2 / fConst12))); + fConst59 = (0.0 - (3.3851375012865379 * fConst3)); + fConst60 = (fConst58 * fConst59); + fConst61 = (0.047619047619047623 * (0.0 - (0.70710678118654757 * fConst60))); + fConst62 = (fConst3 * fConst58); + fConst63 = (0.0 - (2.5388531259649025 * fConst62)); + fConst64 = (0.0 - (0.5 * fConst60)); + fConst65 = (0.0 - (0.50000000000000011 * fConst60)); + fConst66 = (0.0 - ((3.5355339059327373 * fConst21) + (2.3936536824085963 * fConst3))); + fConst67 = (0.0 - (0.70710678118654757 * (fConst58 * fConst66))); + fConst68 = (0.09671821432247249 * fConst3); + fConst69 = (0.033671751485073696 * fConst59); + fConst70 = (0.019047619047619049 * fConst59); + fConst71 = (0.019047619047619053 * fConst59); + fConst72 = (0.026937401188058957 * fConst66); + fConst73 = (0.02961378424040019 * fConst3); + fConst74 = (0.029613784240400197 * fConst3); + fConst75 = (0.0 - ((2.8867513459481291 * fConst27) + (2.7639531957706835 * fConst3))); + fConst76 = (0.01607142857142857 * fConst75); + fConst77 = (0.016071428571428573 * fConst75); + fConst78 = (0.0 - (0.92131773192356159 * fConst62)); + fConst79 = (0.0 - (0.92131773192356192 * fConst62)); + fConst80 = (fConst58 * fConst75); + fConst81 = (0.0 - (0.5 * fConst80)); + fConst82 = (0.0 - (0.50000000000000011 * fConst80)); + fConst83 = (0.019047619047619046 * fConst59); + fConst84 = (0.029613784240400187 * fConst3); + fConst85 = (0.016071428571428566 * fConst75); + fConst86 = (0.0 - (1.3638242119692871e-15 * fConst54)); + fConst87 = (0.0 - (2.7276484239385742e-15 * fConst54)); + fConst88 = (0.0 - (3.1401849173675503e-16 * fConst56)); + fConst89 = (0.0 - (6.2803698347351007e-16 * fConst56)); + fConst90 = (0.0 - (5.6418958354775643 * fConst54)); + fConst91 = (0.0 - (3.9894228040143274 * fConst11)); + fConst92 = (0.0 - (1.4142135623730951 * (fConst50 * fConst91))); + fConst93 = (0.2149293651610501 * fConst11); + fConst94 = (0.053874802376117914 * fConst91); + fConst95 = (4.3837206813298509e-17 * fConst11); + fConst96 = (8.7674413626597019e-17 * fConst11); + fConst97 = (1.0093451520109982e-17 * fConst51); + fConst98 = (2.0186903040219964e-17 * fConst51); + fConst99 = (0.0 - (2.4568472851294949 * fConst43)); + fConst100 = (0.0 - (2.4568472851294976 * fConst43)); + fConst101 = (0.0 - (4.5135166683820485 * fConst43)); + fConst102 = (0.0 - (4.5135166683820538 * fConst43)); } @@ -1100,31 +1285,31 @@ class mydsp : public dsp { } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec0[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec29[l28] = 0.0; + fRec28[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec30[l29] = 0.0; + fRec29[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec31[l30] = 0.0; + fRec30[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec32[l31] = 0.0; + fRec31[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec33[l32] = 0.0; + fRec32[l32] = 0.0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec0[l33] = 0.0; + fRec33[l33] = 0.0; } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { @@ -1163,30 +1348,6 @@ class mydsp : public dsp { fRec42[l42] = 0.0; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec43[l43] = 0.0; - - } - for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec44[l44] = 0.0; - - } - for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fRec45[l45] = 0.0; - - } - for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec46[l46] = 0.0; - - } - for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec47[l47] = 0.0; - - } - for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fRec48[l48] = 0.0; - - } } @@ -1203,9 +1364,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1213,206 +1374,182 @@ class mydsp : public dsp { ui_interface->declare(0, "0", ""); ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36d8d10", &fVbargraph30, -70.0, 6.0); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ca1cb0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36dd860", &fVbargraph31, -70.0, 6.0); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ca6800", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36d41c0", &fVbargraph29, -70.0, 6.0); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c9d160", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36cf670", &fVbargraph28, -70.0, 6.0); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c98610", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36cab20", &fVbargraph27, -70.0, 6.0); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c93ac0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36c5fd0", &fVbargraph26, -70.0, 6.0); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c8ee90", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36c1480", &fVbargraph25, -70.0, 6.0); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cde6f0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36bc930", &fVbargraph24, -70.0, 6.0); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ce3780", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36b7de0", &fVbargraph23, -70.0, 6.0); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cd9660", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36b3290", &fVbargraph22, -70.0, 6.0); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cd45d0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36ae740", &fVbargraph21, -70.0, 6.0); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2ccf540", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36a9bf0", &fVbargraph20, -70.0, 6.0); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cca4b0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36a50a0", &fVbargraph19, -70.0, 6.0); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cc5420", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36a0550", &fVbargraph18, -70.0, 6.0); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cc0390", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x369ba00", &fVbargraph17, -70.0, 6.0); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cbb300", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3696eb0", &fVbargraph16, -70.0, 6.0); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cb6260", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3692360", &fVbargraph15, -70.0, 6.0); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cb11d0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x368d810", &fVbargraph14, -70.0, 6.0); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cac140", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3688cc0", &fVbargraph13, -70.0, 6.0); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d0c790", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3684170", &fVbargraph12, -70.0, 6.0); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d122a0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x367f620", &fVbargraph11, -70.0, 6.0); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d06c80", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x367aad0", &fVbargraph10, -70.0, 6.0); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d01170", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3675f80", &fVbargraph9, -70.0, 6.0); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cfb660", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3671430", &fVbargraph8, -70.0, 6.0); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cf5b50", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x366c8e0", &fVbargraph7, -70.0, 6.0); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cf0040", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3667d90", &fVbargraph6, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3663240", &fVbargraph5, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x365e6f0", &fVbargraph4, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3659ba0", &fVbargraph3, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3655050", &fVbargraph2, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3650500", &fVbargraph1, -70.0, 6.0); - ui_interface->closeBox(); - ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x364b8d0", &fVbargraph0, -70.0, 6.0); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cea530", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); - ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36e5570", &fVbargraph32, -70.0, 6.0); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d18870", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36f28d0", &fVbargraph33, -70.0, 6.0); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d28b20", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36fc7a0", &fVbargraph34, -70.0, 6.0); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d2ff70", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37091e0", &fVbargraph35, -70.0, 6.0); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d39a90", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3713fd0", &fVbargraph36, -70.0, 6.0); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d453f0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x371d320", &fVbargraph37, -70.0, 6.0); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d56440", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3727360", &fVbargraph38, -70.0, 6.0); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d5e3f0", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3730a80", &fVbargraph39, -70.0, 6.0); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d67410", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x373b480", &fVbargraph40, -70.0, 6.0); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d75d90", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3745f60", &fVbargraph41, -70.0, 6.0); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d855c0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x374e1b0", &fVbargraph42, -70.0, 6.0); + ui_interface->declare(&fVbargraph36, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2d90a10", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3758ad0", &fVbargraph43, -70.0, 6.0); + ui_interface->declare(&fVbargraph37, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2da6e40", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x375f7a0", &fVbargraph44, -70.0, 6.0); + ui_interface->declare(&fVbargraph38, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dacff0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x376ada0", &fVbargraph45, -70.0, 6.0); + ui_interface->declare(&fVbargraph39, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2db7f00", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3772ce0", &fVbargraph46, -70.0, 6.0); + ui_interface->declare(&fVbargraph40, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dc72b0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x377e4a0", &fVbargraph47, -70.0, 6.0); + ui_interface->declare(&fVbargraph41, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2dd36d0", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); @@ -1451,12 +1588,6 @@ class mydsp : public dsp { FAUSTFLOAT* input23 = inputs[23]; FAUSTFLOAT* input24 = inputs[24]; FAUSTFLOAT* input25 = inputs[25]; - FAUSTFLOAT* input26 = inputs[26]; - FAUSTFLOAT* input27 = inputs[27]; - FAUSTFLOAT* input28 = inputs[28]; - FAUSTFLOAT* input29 = inputs[29]; - FAUSTFLOAT* input30 = inputs[30]; - FAUSTFLOAT* input31 = inputs[31]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; @@ -1476,203 +1607,156 @@ class mydsp : public dsp { double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - double fTemp0 = double(input31[i]); + double fTemp0 = double(input5[i]); fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec2[0]); - double fTemp1 = double(input30[i]); + double fTemp1 = double(input4[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = double(input29[i]); + double fTemp2 = double(input3[i]); fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp2)))))); fVbargraph2 = FAUSTFLOAT(fRec4[0]); - double fTemp3 = double(input28[i]); + double fTemp3 = double(input2[i]); fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = double(input27[i]); + double fTemp4 = double(input0[i]); fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph4 = FAUSTFLOAT(fRec6[0]); - double fTemp5 = double(input26[i]); + double fTemp5 = double(input1[i]); fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph5 = FAUSTFLOAT(fRec7[0]); - double fTemp6 = double(input25[i]); + double fTemp6 = double(input17[i]); fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph6 = FAUSTFLOAT(fRec8[0]); - double fTemp7 = double(input24[i]); + double fTemp7 = double(input16[i]); fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph7 = FAUSTFLOAT(fRec9[0]); - double fTemp8 = double(input23[i]); + double fTemp8 = double(input15[i]); fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp9 = double(input22[i]); + double fTemp9 = double(input14[i]); fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph9 = FAUSTFLOAT(fRec11[0]); - double fTemp10 = double(input21[i]); + double fTemp10 = double(input13[i]); fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph10 = FAUSTFLOAT(fRec12[0]); - double fTemp11 = double(input20[i]); + double fTemp11 = double(input12[i]); fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph11 = FAUSTFLOAT(fRec13[0]); - double fTemp12 = double(input19[i]); + double fTemp12 = double(input11[i]); fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph12 = FAUSTFLOAT(fRec14[0]); - double fTemp13 = double(input18[i]); + double fTemp13 = double(input10[i]); fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph13 = FAUSTFLOAT(fRec15[0]); - double fTemp14 = double(input17[i]); + double fTemp14 = double(input9[i]); fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph14 = FAUSTFLOAT(fRec16[0]); - double fTemp15 = double(input16[i]); + double fTemp15 = double(input8[i]); fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph15 = FAUSTFLOAT(fRec17[0]); - double fTemp16 = double(input15[i]); + double fTemp16 = double(input6[i]); fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph16 = FAUSTFLOAT(fRec18[0]); - double fTemp17 = double(input14[i]); + double fTemp17 = double(input7[i]); fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph17 = FAUSTFLOAT(fRec19[0]); - double fTemp18 = double(input13[i]); - fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + double fTemp18 = (fTemp14 + (fTemp15 + (fTemp16 + fTemp17))); + double fTemp19 = double(input25[i]); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph18 = FAUSTFLOAT(fRec20[0]); - double fTemp19 = double(input12[i]); - fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + double fTemp20 = double(input24[i]); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph19 = FAUSTFLOAT(fRec21[0]); - double fTemp20 = double(input11[i]); - fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + double fTemp21 = double(input23[i]); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph20 = FAUSTFLOAT(fRec22[0]); - double fTemp21 = double(input10[i]); - fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + double fTemp22 = double(input22[i]); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph21 = FAUSTFLOAT(fRec23[0]); - double fTemp22 = double(input9[i]); - fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + double fTemp23 = double(input21[i]); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph22 = FAUSTFLOAT(fRec24[0]); - double fTemp23 = double(input8[i]); - fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + double fTemp24 = double(input20[i]); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph23 = FAUSTFLOAT(fRec25[0]); - double fTemp24 = double(input7[i]); - fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + double fTemp25 = double(input18[i]); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph24 = FAUSTFLOAT(fRec26[0]); - double fTemp25 = double(input6[i]); - fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + double fTemp26 = double(input19[i]); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph25 = FAUSTFLOAT(fRec27[0]); - double fTemp26 = double(input5[i]); - fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph26 = FAUSTFLOAT(fRec28[0]); - double fTemp27 = double(input4[i]); - fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph27 = FAUSTFLOAT(fRec29[0]); - double fTemp28 = double(input3[i]); - fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); - fVbargraph28 = FAUSTFLOAT(fRec30[0]); - double fTemp29 = double(input2[i]); - fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph29 = FAUSTFLOAT(fRec31[0]); - double fTemp30 = double(input0[i]); - fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph30 = FAUSTFLOAT(fRec32[0]); - double fTemp31 = double(input1[i]); - fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); - fVbargraph31 = FAUSTFLOAT(fRec33[0]); - double fTemp32 = (0.03125 * (fRec1[0] * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + (fTemp5 + (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + (fTemp14 + (fTemp15 + (fTemp16 + (fTemp17 + (fTemp18 + (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + (fTemp23 + (fTemp24 + (fTemp25 + (fTemp26 + (fTemp27 + (fTemp28 + (fTemp29 + (fTemp30 + fTemp31))))))))))))))))))))))))))))))))); - fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); - fVbargraph32 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (fTemp6 + fTemp4); - double fTemp34 = (fTemp26 + fTemp24); - double fTemp35 = (fTemp10 + fTemp8); - double fTemp36 = (fTemp15 + fTemp13); - double fTemp37 = (fTemp22 + fTemp20); - double fTemp38 = (fTemp11 + fTemp7); - double fTemp39 = (fTemp18 + fTemp17); - double fTemp40 = (fTemp1 + (fTemp2 - fTemp39)); - double fTemp41 = (fTemp19 + fTemp16); - double fTemp42 = (fTemp0 + (fTemp3 - fTemp41)); - double fTemp43 = (fRec1[0] * (((0.031250000005356424 * fTemp33) + ((0.03124999999942539 * fTemp34) + ((((0.028456031166074459 * fTemp31) + (0.050563562154587252 * fTemp25)) + (0.028456031151791669 * fTemp12)) + (0.050563562146664701 * fTemp5)))) - (((((0.03124999999974435 * fTemp35) + ((2.0741519909290582e-11 * fTemp36) + ((0.031249999992537459 * fTemp37) + ((((0.028456031178947395 * fTemp28) + (0.050563562158055714 * fTemp21)) + (0.028456031143523002 * fTemp14)) + (0.050563562143196253 * fTemp9))))) + (1.1672859106216881e-11 * fTemp38)) + (0.046042825611330579 * fTemp40)) + (0.019313562132325341 * fTemp42)))); - fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + double fTemp27 = (fTemp23 + (fTemp24 + (fTemp25 + fTemp26))); + double fTemp28 = (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 + fTemp27)))); + double fTemp29 = (fRec1[0] * (((0.047619047619047623 * (fTemp0 + (fTemp1 + (fTemp2 + (fTemp3 + (fTemp4 + fTemp5)))))) + (0.038095238095238099 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + (fTemp10 + (fTemp11 + (fTemp12 + (fTemp13 + fTemp18)))))))))) + (0.03214285714285714 * fTemp28))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph26 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fRec1[0] * ((((fConst5 * fTemp1) + (0.038095238095238099 * ((((fConst6 * fTemp14) + (fConst7 * fTemp11)) + (fConst8 * fTemp10)) + (fConst6 * fTemp6)))) + (fConst4 * (((((((((0.07598900579074909 * fTemp3) + (0.042985873032210013 * fTemp17)) + (0.042985873032210006 * fTemp13)) + (0.042985873032210013 * fTemp12)) + (0.042985873032210013 * fTemp8)) + (0.029613784240400176 * fTemp25)) + (0.02961378424040018 * fTemp26)) + (0.029613784240400176 * fTemp22)) + (0.02961378424040018 * fTemp21)))) + (0.03214285714285714 * ((((fConst9 * fTemp24) + (fConst10 * fTemp23)) + (fConst9 * fTemp20)) + (fConst10 * fTemp19))))); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph27 = FAUSTFLOAT(fRec28[0]); + output1[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fTemp4 - fTemp0); + double fTemp32 = (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 - fTemp18)))); + double fTemp33 = (fTemp19 + (fTemp20 + (fTemp21 + (fTemp22 - fTemp27)))); + double fTemp34 = (fRec1[0] * ((0.082478609884232251 * fTemp31) - ((0.046656947481584346 * fTemp32) + (0.03214285714285714 * fTemp33)))); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + output2[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (fRec1[0] * ((fConst4 * (((((((((0.07598900579074909 * fTemp5) + (0.042985873032210013 * fTemp16)) + (0.042985873032210013 * fTemp13)) + (0.042985873032209999 * fTemp10)) + (0.042985873032210013 * fTemp9)) + (0.02961378424040018 * fTemp25)) + (0.029613784240400173 * fTemp23)) + (0.02961378424040018 * fTemp22)) + (0.029613784240400173 * fTemp19))) + (((fConst5 * fTemp2) + (0.038095238095238099 * ((((fConst6 * fTemp15) + (fConst7 * fTemp12)) + (fConst8 * fTemp11)) + (fConst6 * fTemp7)))) + (0.03214285714285714 * ((((fConst9 * fTemp26) + (fConst10 * fTemp24)) + (fConst9 * fTemp21)) + (fConst10 * fTemp20)))))); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph29 = FAUSTFLOAT(fRec30[0]); + output3[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (fTemp26 + fTemp23); + double fTemp37 = (fRec1[0] * ((fConst14 * (fTemp19 + (fTemp21 + fTemp36))) + ((fConst16 * (fTemp12 + fTemp10)) + (fConst13 * ((((((0.12158240926519855 * fTemp13) + (0.12158240926519859 * fTemp11)) + (0.068390105211674143 * fTemp25)) + (0.068390105211674157 * fTemp24)) + (0.068390105211674143 * fTemp22)) + (0.068390105211674157 * fTemp20)))))); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + output4[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (fRec1[0] * (((0.038095238095238099 * ((fConst20 * fTemp14) + (fConst22 * fTemp6))) + (fConst18 * ((((((fConst23 * fTemp17) + (fConst24 * fTemp8)) + (fConst25 * fTemp25)) + (fConst26 * fTemp26)) + (fConst28 * fTemp22)) + (fConst29 * fTemp21)))) + (0.03214285714285714 * ((((fConst30 * fTemp24) + (fConst31 * fTemp23)) + (fConst33 * fTemp20)) + (fConst34 * fTemp19))))); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph31 = FAUSTFLOAT(fRec32[0]); + output5[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (fRec1[0] * (((0.021295885499997991 * (fTemp6 + (fTemp7 + (fTemp8 + (fTemp9 + fTemp18))))) + ((0.10647942749999 * (fTemp4 + fTemp0)) + (7.9795740640090912e-18 * fTemp28))) - ((0.053239713749994998 * (fTemp1 + (fTemp2 + (fTemp5 + fTemp3)))) + (0.042591770999995997 * (fTemp10 + (fTemp11 + (fTemp13 + fTemp12))))))); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + output6[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (fRec1[0] * ((fConst18 * ((((((fConst23 * fTemp16) + (fConst24 * fTemp9)) + (fConst26 * fTemp25)) + (fConst35 * fTemp23)) + (fConst29 * fTemp22)) + (fConst36 * fTemp19))) + ((0.038095238095238099 * ((fConst20 * fTemp15) + (fConst22 * fTemp7))) + (0.03214285714285714 * ((((fConst30 * fTemp26) + (fConst31 * fTemp24)) + (fConst33 * fTemp21)) + (fConst34 * fTemp20)))))); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph33 = FAUSTFLOAT(fRec34[0]); - output1[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (fTemp26 - fTemp24); - double fTemp45 = (fTemp4 - (fTemp6 + (fTemp8 - (fTemp10 + (fTemp20 - (fTemp22 - fTemp44)))))); - double fTemp46 = (fTemp30 - fTemp29); - double fTemp47 = (fTemp13 - (fTemp15 + fTemp46)); - double fTemp48 = (fTemp27 - fTemp23); - double fTemp49 = (fTemp7 - (fTemp11 + fTemp48)); - double fTemp50 = (fTemp18 - fTemp17); - double fTemp51 = (fTemp1 - (fTemp2 + fTemp50)); - double fTemp52 = (fTemp19 - fTemp16); - double fTemp53 = (fTemp0 - (fTemp3 + fTemp52)); - double fTemp54 = (fRec1[0] * ((0.031250000001308703 * fTemp45) - ((((0.019313562147752456 * fTemp47) + (0.046042825614321402 * fTemp49)) + (0.028456031166074459 * fTemp51)) + (0.050563562154587252 * fTemp53)))); - fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + output7[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (fTemp17 + fTemp14); + double fTemp42 = (fRec1[0] * ((0.03214285714285714 * ((((fConst37 * fTemp26) + (fConst38 * fTemp23)) + (fConst37 * fTemp21)) + (fConst38 * fTemp19))) + (((fConst39 * (fTemp3 + fTemp1)) + (0.038095238095238099 * (((((fConst40 * fTemp41) + (fConst41 * fTemp12)) + (fConst42 * fTemp10)) + (fConst40 * fTemp8)) + (fConst40 * fTemp6)))) + (fConst13 * (((((((((((0.06079120463259928 * fTemp16) + (0.15197801158149818 * (fTemp5 + fTemp2))) + (0.06079120463259928 * fTemp15)) + (2.6996718031124477e-17 * fTemp13)) + (5.3993436062248954e-17 * fTemp11)) + (0.06079120463259928 * fTemp9)) + (0.06079120463259928 * fTemp7)) + (1.518565389250751e-17 * fTemp25)) + (3.037130778501502e-17 * fTemp24)) + (1.518565389250751e-17 * fTemp22)) + (3.037130778501502e-17 * fTemp20)))))); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph34 = FAUSTFLOAT(fRec35[0]); - output2[i] = FAUSTFLOAT(fTemp54); - double fTemp55 = (fTemp27 + fTemp23); - double fTemp56 = (fTemp7 + (fTemp11 - fTemp55)); - double fTemp57 = (fTemp30 + fTemp29); - double fTemp58 = (fTemp13 + (fTemp15 - fTemp57)); - double fTemp59 = (fTemp2 + fTemp1); - double fTemp60 = (fTemp3 + fTemp0); - double fTemp61 = (fRec1[0] * (((0.031250000006153834 * fTemp37) + ((0.031249999999265907 * fTemp34) + ((((0.046042825611330579 * fTemp31) + (0.046042825603374658 * fTemp28)) + (0.019313562132325341 * fTemp25)) + (0.019313562123244806 * fTemp21)))) - ((((0.028456031161235202 * fTemp56) + ((0.050563562148694619 * fTemp58) + (((0.031249999998946943 * fTemp35) + ((3.9612778101837972e-12 * fTemp41) + ((9.4435413914173993e-12 * fTemp39) + ((((0.046042825625268138 * fTemp14) + (0.046042825620157823 * fTemp12)) + (0.019313562162147378 * fTemp9)) + (0.019313562153066861 * fTemp5))))) + (0.03124999999333487 * fTemp33)))) + (1.7712205246678851e-11 * fTemp59)) + (7.4297302997852447e-12 * fTemp60)))); - fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + output8[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (fRec1[0] * ((((fConst44 * fTemp3) + (0.038095238095238099 * ((((fConst45 * fTemp17) + (fConst46 * fTemp11)) + (fConst47 * fTemp10)) + (fConst45 * fTemp8)))) + (fConst43 * (((((((((0.30395602316299636 * fTemp1) + (0.08597174606442004 * fTemp14)) + (0.17194349212884008 * fTemp13)) + (0.17194349212883997 * fTemp12)) + (0.08597174606442004 * fTemp6)) + (0.078970091307733831 * fTemp25)) + (0.078970091307733761 * fTemp26)) + (0.078970091307733831 * fTemp22)) + (0.078970091307733761 * fTemp21)))) + (0.03214285714285714 * ((((fConst48 * fTemp24) + (fConst49 * fTemp23)) + (fConst48 * fTemp20)) + (fConst49 * fTemp19))))); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph35 = FAUSTFLOAT(fRec36[0]); - output3[i] = FAUSTFLOAT(fTemp61); - double fTemp62 = (fRec1[0] * (((5.9280216802104561e-12 * fTemp60) + (((1.3722268867176347e-11 * fTemp38) + ((4.3326398788419054e-11 * fTemp36) + ((((0.054126587736687347 * fTemp31) + (0.040343576494253922 * fTemp25)) + (0.054126587710176526 * fTemp14)) + (0.040343576547459722 * fTemp9)))) + (3.3690616435560736e-11 * fTemp59))) - (((3.1606181910512831e-12 * fTemp41) + ((1.796268315438824e-11 * fTemp39) + ((((0.054126587751820394 * fTemp28) + (0.040343576478053242 * fTemp21)) + (0.054126587719896917 * fTemp12)) + (0.040343576531259084 * fTemp5)))) + (0.040343576521304395 * (fTemp4 + (fTemp6 - (fTemp8 + (fTemp10 - (fTemp20 + (fTemp22 - fTemp34)))))))))); - fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + output9[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (fRec1[0] * ((fConst50 * (((fConst11 * ((0.19742522826933454 * fTemp25) + (0.19742522826933459 * fTemp24))) + (fConst52 * fTemp22)) + (fConst53 * fTemp20))) + (0.03214285714285714 * (((fConst55 * fTemp36) + (fConst57 * fTemp21)) + (fConst57 * fTemp19))))); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph36 = FAUSTFLOAT(fRec37[0]); - output4[i] = FAUSTFLOAT(fTemp62); - double fTemp63 = (fTemp22 - fTemp20); - double fTemp64 = (fTemp15 - fTemp13); - double fTemp65 = (fTemp10 - fTemp8); - double fTemp66 = (fTemp11 - fTemp7); - double fTemp67 = (fTemp6 - fTemp4); - double fTemp68 = (fRec1[0] * (((((0.040343576523941639 * fTemp44) + (0.040343576515049356 * fTemp63)) + (0.054126587736687347 * (fTemp1 - (fTemp2 - fTemp50)))) + (0.040343576494253922 * (fTemp0 - (fTemp3 - fTemp52)))) - ((((1.6549211726374409e-11 * fTemp64) + (0.040343576524353414 * fTemp65)) + (2.2203097434927284e-11 * fTemp66)) + (0.04034357653159857 * fTemp67)))); - fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + output10[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (fRec1[0] * ((((fConst61 * fTemp1) + (0.038095238095238099 * ((((fConst63 * fTemp14) + (fConst64 * fTemp11)) + (fConst65 * fTemp10)) + (fConst67 * fTemp6)))) + (fConst58 * (((((((((fConst68 * fTemp17) + (fConst69 * fTemp3)) + (fConst70 * fTemp13)) + (fConst71 * fTemp12)) + (fConst72 * fTemp8)) + (fConst73 * fTemp25)) + (fConst74 * fTemp26)) + (fConst76 * fTemp22)) + (fConst77 * fTemp21)))) + (0.03214285714285714 * ((((fConst78 * fTemp24) + (fConst79 * fTemp23)) + (fConst81 * fTemp20)) + (fConst82 * fTemp19))))); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph37 = FAUSTFLOAT(fRec38[0]); - output5[i] = FAUSTFLOAT(fTemp68); - double fTemp69 = (fTemp7 + (fTemp11 + fTemp55)); - double fTemp70 = (fTemp0 + (fTemp3 + fTemp41)); - double fTemp71 = (fTemp13 + (fTemp15 + fTemp57)); - double fTemp72 = (fTemp1 + (fTemp2 + fTemp39)); - double fTemp73 = (fRec1[0] * ((((0.040906781083793552 * fTemp69) + (2.9263569544132831e-12 * (fTemp4 + (fTemp6 + (fTemp8 + (fTemp10 + (fTemp20 + (fTemp22 + fTemp34)))))))) + (0.056531781096479022 * fTemp70)) - (((0.021593218926725059 * fTemp71) + (0.034938562148434216 * (fTemp5 + (fTemp9 + (fTemp12 + (fTemp14 + (fTemp21 + (fTemp25 + (fTemp31 + fTemp28))))))))) + (0.0059682189255058932 * fTemp72)))); - fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + output11[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (fRec1[0] * (((0.12598815766974242 * fTemp31) + (0.017817416127494972 * fTemp32)) + (0.032732683535398849 * fTemp33))); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph38 = FAUSTFLOAT(fRec39[0]); - output6[i] = FAUSTFLOAT(fTemp73); - double fTemp74 = (fTemp2 - fTemp1); - double fTemp75 = (fTemp3 - fTemp0); - double fTemp76 = (fRec1[0] * (((0.054126587730998453 * (fTemp7 - (fTemp11 - fTemp48))) + ((0.040343576521777599 * (fTemp13 - (fTemp15 - fTemp46))) + ((0.040343576523735748 * fTemp44) + (0.040343576516078811 * fTemp67)))) - (((((0.040343576532628024 * fTemp63) + ((1.1101548718630453e-11 * fTemp50) + (8.2746058575420039e-12 * fTemp52))) + (0.040343576523323967 * fTemp65)) + (2.0821946059249937e-11 * fTemp74)) + (1.5519762259670396e-11 * fTemp75)))); - fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + output12[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (fRec1[0] * ((fConst58 * (((((((((fConst68 * fTemp16) + (fConst69 * fTemp5)) + (fConst71 * fTemp13)) + (fConst83 * fTemp10)) + (fConst72 * fTemp9)) + (fConst74 * fTemp25)) + (fConst84 * fTemp23)) + (fConst77 * fTemp22)) + (fConst85 * fTemp19))) + (((fConst61 * fTemp2) + (0.038095238095238099 * (((fConst65 * fTemp11) + ((fConst63 * fTemp15) + (fConst64 * fTemp12))) + (fConst67 * fTemp7)))) + (0.03214285714285714 * ((((fConst78 * fTemp26) + (fConst79 * fTemp24)) + (fConst81 * fTemp21)) + (fConst82 * fTemp20)))))); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph39 = FAUSTFLOAT(fRec40[0]); - output7[i] = FAUSTFLOAT(fTemp76); - double fTemp77 = (fRec1[0] * ((((0.052810427283009165 * fTemp71) + ((1.7578661182284158e-11 * fTemp37) + ((((0.027063293867943854 * fTemp31) + (0.027063293837677766 * fTemp28)) + (0.0270632939209655 * fTemp14)) + (0.027063293901524704 * fTemp12)))) + (0.016726035452584633 * fTemp69)) - ((((1.5519762270076438e-11 * fTemp33) + ((1.0294494561038593e-12 * fTemp35) + ((2.0588989122077187e-13 * fTemp34) + ((((0.045105489806145357 * fTemp25) + (0.04510548982063569 * fTemp21)) + (0.045105489758556633 * fTemp9)) + (0.045105489773046931 * fTemp5))))) + (0.043789329326217374 * fTemp72)) + (0.0077049374891727668 * fTemp70)))); - fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + output13[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (fRec1[0] * ((0.03214285714285714 * ((((fConst86 * fTemp26) + (fConst87 * fTemp23)) + (fConst88 * fTemp21)) + (fConst89 * fTemp19))) + ((0.038095238095238099 * (((fConst90 * fTemp41) + (fConst92 * fTemp8)) + (fConst92 * fTemp6))) + (fConst50 * (((((((fConst93 * (fTemp16 + fTemp15)) + (fConst94 * fTemp9)) + (fConst94 * fTemp7)) + (fConst95 * fTemp25)) + (fConst96 * fTemp24)) + (fConst97 * fTemp22)) + (fConst98 * fTemp20)))))); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph40 = FAUSTFLOAT(fRec41[0]); - output8[i] = FAUSTFLOAT(fTemp77); - double fTemp78 = (fRec1[0] * (((0.0029695746450525032 * fTemp42) + ((((0.025158640182583659 * fTemp34) + ((((0.06509994890923472 * fTemp31) + (0.029963512991023594 * fTemp21)) + (0.065099948914697517 * fTemp12)) + (0.029963512856939822 * fTemp9))) + (0.025158640168258844 * fTemp33)) + (0.040233981091600451 * fTemp40))) - ((1.1688378238253342e-11 * fTemp38) + ((0.025158640181813286 * fTemp35) + ((6.5575899958893731e-11 * fTemp36) + ((0.025158640199219585 * fTemp37) + ((((0.065099948904311158 * fTemp28) + (0.029963512959726043 * fTemp25)) + (0.06509994891786007 * fTemp14)) + (0.029963512888237169 * fTemp5)))))))); - fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + output14[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (fRec1[0] * ((0.03214285714285714 * ((((fConst99 * fTemp25) + (fConst100 * fTemp23)) + (fConst99 * fTemp22)) + (fConst100 * fTemp19))) + (((fConst44 * fTemp2) + (0.038095238095238099 * ((((fConst45 * fTemp15) + (fConst101 * fTemp13)) + (fConst102 * fTemp10)) + (fConst45 * fTemp7)))) + (fConst43 * (((((((((0.30395602316299636 * fTemp5) + (0.08597174606442004 * fTemp16)) + (0.17194349212884008 * fTemp12)) + (0.17194349212883991 * fTemp11)) + (0.08597174606442004 * fTemp9)) + (0.078970091307733831 * fTemp26)) + (0.078970091307733734 * fTemp24)) + (0.078970091307733831 * fTemp21)) + (0.078970091307733734 * fTemp20)))))); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph41 = FAUSTFLOAT(fRec42[0]); - output9[i] = FAUSTFLOAT(fTemp78); - double fTemp79 = (fRec1[0] * (((1.4651625729709834e-11 * fTemp75) + (((4.090282886747088e-11 * fTemp64) + (3.0883482280990851e-11 * fTemp66)) + (4.6862090253384154e-11 * fTemp74))) - (((2.4985262017509136e-11 * fTemp50) + (7.811745183791552e-12 * fTemp52)) + (0.061625831073954335 * (fTemp4 - (fTemp6 - (fTemp8 - (fTemp10 - (fTemp20 - (fTemp22 + fTemp44)))))))))); - fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); - fVbargraph42 = FAUSTFLOAT(fRec43[0]); - output10[i] = FAUSTFLOAT(fTemp79); - double fTemp80 = (fRec1[0] * (((0.019487798896868545 * fTemp33) + ((7.0504616362704489e-12 * fTemp36) + ((0.019487798893169893 * fTemp34) + ((((0.026618179814744531 * fTemp28) + (0.047297881462573126 * fTemp21)) + (0.026618179781608044 * fTemp14)) + (0.047297881448673376 * fTemp9))))) - ((((2.8586208079238403e-11 * fTemp38) + ((0.0194877988933688 * fTemp35) + ((0.019487798888874513 * fTemp37) + ((((0.026618179802703 * fTemp31) + (0.047297881459328679 * fTemp25)) + (0.026618179789342673 * fTemp12)) + (0.047297881451917809 * fTemp5))))) + (0.016450939837186842 * fTemp40)) + (0.060763619271724453 * fTemp42)))); - fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); - fVbargraph43 = FAUSTFLOAT(fRec44[0]); - output11[i] = FAUSTFLOAT(fTemp80); - double fTemp81 = (fRec1[0] * (((0.034862310657899923 * fTemp47) + (0.03516578892887412 * fTemp51)) - (((0.021733652816759153 * fTemp49) + (0.031823442324083143 * fTemp45)) + (0.052652155785676925 * fTemp53)))); - fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); - fVbargraph44 = FAUSTFLOAT(fRec45[0]); - output12[i] = FAUSTFLOAT(fTemp81); - double fTemp82 = (fRec1[0] * (((0.017187576256784607 * fTemp58) + ((0.019487798897365818 * fTemp37) + ((0.019487798893070441 * fTemp34) + ((((0.043069119652182263 * fTemp14) + (0.043069119647402003 * fTemp12)) + (0.018066183132229109 * fTemp9)) + (0.018066183123735063 * fTemp5))))) - ((((0.069687299442441134 * fTemp56) + ((((((((0.043069119639144872 * fTemp31) + (0.04306911963170279 * fTemp28)) + (0.018066183104333149 * fTemp25)) + (0.018066183095839083 * fTemp21)) + (3.3741441629064651e-12 * fTemp39)) + (1.2462826641630935e-11 * fTemp41)) + (0.019487798892871531 * fTemp35)) + (0.019487798889371789 * fTemp33))) + (6.328508709624312e-12 * fTemp59)) + (2.337514437443605e-11 * fTemp60)))); - fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); - fVbargraph45 = FAUSTFLOAT(fRec46[0]); - output13[i] = FAUSTFLOAT(fTemp82); - double fTemp83 = (fRec1[0] * (((2.3706828457774462e-11 * fTemp67) + ((0.060908933113328061 * fTemp51) + (0.019043429064881861 * fTemp53))) - ((1.5725100189748727e-12 * fTemp65) + ((2.6851848495724207e-11 * fTemp63) + ((0.03764379087242118 * fTemp49) + ((3.1450200379497456e-13 * fTemp44) + (0.049856344630062416 * fTemp47))))))); - fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); - fVbargraph46 = FAUSTFLOAT(fRec47[0]); - output14[i] = FAUSTFLOAT(fTemp83); - double fTemp84 = (fRec1[0] * (((3.4270952038764392e-12 * fTemp60) + (((0.025158640197293657 * fTemp33) + ((0.025158640183739214 * fTemp35) + ((1.8272098227973983e-12 * fTemp41) + ((2.4756382394124778e-11 * fTemp39) + ((((0.0058700586361645603 * fTemp14) + (0.0058700586712377503 * fTemp12)) + (0.058091727765422867 * fTemp9)) + (0.058091727749279801 * fTemp5)))))) + (4.6432806079350595e-11 * fTemp59))) - (((((0.025158640182968841 * fTemp34) + ((((0.0058700587318210864 * fTemp31) + (0.0058700587864242773 * fTemp28)) + (0.058091727712406088 * fTemp25)) + (0.058091727696262918 * fTemp21))) + (0.025158640166332916 * fTemp37)) + (0.053286855022019637 * fTemp58)) + (0.0094979545384014652 * fTemp56)))); - fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); - fVbargraph47 = FAUSTFLOAT(fRec48[0]); - output15[i] = FAUSTFLOAT(fTemp84); + output15[i] = FAUSTFLOAT(fTemp49); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; @@ -1700,13 +1784,13 @@ class mydsp : public dsp { fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; fRec27[1] = fRec27[0]; + fRec0[1] = fRec0[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; fRec33[1] = fRec33[0]; - fRec0[1] = fRec0[0]; fRec34[1] = fRec34[0]; fRec35[1] = fRec35[0]; fRec36[1] = fRec36[0]; @@ -1716,12 +1800,6 @@ class mydsp : public dsp { fRec40[1] = fRec40[0]; fRec41[1] = fRec41[0]; fRec42[1] = fRec42[0]; - fRec43[1] = fRec43[0]; - fRec44[1] = fRec44[0]; - fRec45[1] = fRec45[0]; - fRec46[1] = fRec46[0]; - fRec47[1] = fRec47[0]; - fRec48[1] = fRec48[0]; } @@ -1730,7 +1808,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1962,7 +2039,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2025,7 +2102,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2054,11 +2131,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncEigenMike4.cpp b/source/HOAUGens/HOAEncEigenMike4.cpp index 8b4855b559..fbfe285fc1 100644 --- a/source/HOAUGens/HOAEncEigenMike4.cpp +++ b/source/HOAUGens/HOAEncEigenMike4.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOAEncEigenMike4" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,17 +613,20 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include #include -double pow(double dummy0, double dummy1); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -685,52 +702,378 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph31; double fRec0[2]; FAUSTFLOAT fVbargraph32; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; double fRec34[2]; FAUSTFLOAT fVbargraph33; double fRec35[2]; FAUSTFLOAT fVbargraph34; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fConst17; + double fConst18; + double fConst19; + double fConst20; double fRec36[2]; FAUSTFLOAT fVbargraph35; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; double fRec37[2]; FAUSTFLOAT fVbargraph36; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; double fRec38[2]; FAUSTFLOAT fVbargraph37; double fRec39[2]; FAUSTFLOAT fVbargraph38; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; double fRec40[2]; FAUSTFLOAT fVbargraph39; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; double fRec41[2]; FAUSTFLOAT fVbargraph40; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; double fRec42[2]; FAUSTFLOAT fVbargraph41; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; double fRec43[2]; FAUSTFLOAT fVbargraph42; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fConst119; + double fConst120; + double fConst121; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fConst131; + double fConst132; + double fConst133; double fRec44[2]; FAUSTFLOAT fVbargraph43; double fRec45[2]; FAUSTFLOAT fVbargraph44; + double fConst134; + double fConst135; + double fConst136; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fConst157; + double fConst158; + double fConst159; + double fConst160; double fRec46[2]; FAUSTFLOAT fVbargraph45; + double fConst161; + double fConst162; + double fConst163; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; + double fConst176; + double fConst177; + double fConst178; + double fConst179; + double fConst180; double fRec47[2]; FAUSTFLOAT fVbargraph46; + double fConst181; + double fConst182; + double fConst183; + double fConst184; + double fConst185; + double fConst186; + double fConst187; + double fConst188; double fRec48[2]; FAUSTFLOAT fVbargraph47; + double fConst189; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + double fConst196; double fRec49[2]; FAUSTFLOAT fVbargraph48; + double fConst197; + double fConst198; + double fConst199; + double fConst200; + double fConst201; + double fConst202; + double fConst203; + double fConst204; + double fConst205; + double fConst206; + double fConst207; + double fConst208; + double fConst209; + double fConst210; + double fConst211; + double fConst212; + double fConst213; + double fConst214; + double fConst215; + double fConst216; + double fConst217; + double fConst218; double fRec50[2]; FAUSTFLOAT fVbargraph49; + double fConst219; + double fConst220; + double fConst221; + double fConst222; + double fConst223; + double fConst224; + double fConst225; + double fConst226; + double fConst227; + double fConst228; + double fConst229; + double fConst230; + double fConst231; + double fConst232; + double fConst233; + double fConst234; + double fConst235; + double fConst236; + double fConst237; + double fConst238; double fRec51[2]; FAUSTFLOAT fVbargraph50; + double fConst239; + double fConst240; + double fConst241; + double fConst242; + double fConst243; + double fConst244; + double fConst245; + double fConst246; + double fConst247; + double fConst248; + double fConst249; + double fConst250; + double fConst251; + double fConst252; + double fConst253; + double fConst254; + double fConst255; + double fConst256; + double fConst257; + double fConst258; + double fConst259; + double fConst260; + double fConst261; double fRec52[2]; FAUSTFLOAT fVbargraph51; double fRec53[2]; FAUSTFLOAT fVbargraph52; + double fConst262; + double fConst263; + double fConst264; + double fConst265; + double fConst266; + double fConst267; + double fConst268; + double fConst269; + double fConst270; + double fConst271; + double fConst272; + double fConst273; + double fConst274; + double fConst275; + double fConst276; + double fConst277; + double fConst278; double fRec54[2]; FAUSTFLOAT fVbargraph53; + double fConst279; + double fConst280; + double fConst281; + double fConst282; + double fConst283; + double fConst284; + double fConst285; + double fConst286; + double fConst287; + double fConst288; + double fConst289; + double fConst290; + double fConst291; + double fConst292; + double fConst293; + double fConst294; + double fConst295; + double fConst296; + double fConst297; + double fConst298; + double fConst299; + double fConst300; + double fConst301; + double fConst302; double fRec55[2]; FAUSTFLOAT fVbargraph54; + double fConst303; + double fConst304; + double fConst305; + double fConst306; + double fConst307; + double fConst308; + double fConst309; + double fConst310; + double fConst311; + double fConst312; + double fConst313; + double fConst314; + double fConst315; + double fConst316; + double fConst317; + double fConst318; + double fConst319; + double fConst320; double fRec56[2]; FAUSTFLOAT fVbargraph55; + double fConst321; + double fConst322; + double fConst323; + double fConst324; + double fConst325; + double fConst326; double fRec57[2]; FAUSTFLOAT fVbargraph56; @@ -741,31 +1084,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/author", "Pierre Lecomte"); - m->declare("lib/eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); - m->declare("lib/eigenmike32.lib/license", "GPL"); - m->declare("lib/eigenmike32.lib/name", "Pentakis dodecahedron grid"); - m->declare("lib/eigenmike32.lib/version", "1.0"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("eigenmike32.lib/author", "Pierre Lecomte"); + m->declare("eigenmike32.lib/copyright", "(c) Pierre Lecomte 2015"); + m->declare("eigenmike32.lib/license", "GPL"); + m->declare("eigenmike32.lib/name", "Pentakis dodecahedron grid"); + m->declare("eigenmike32.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncEigenMike4"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1035,7 +1378,333 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = (80.0 / min(192000.0, max(1000.0, double(fSamplingFreq)))); + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.0)); + fConst2 = double(tgamma(3.0)); + fConst3 = double(tgamma(1.5)); + fConst4 = (sqrt((3.0 * (fConst1 / fConst2))) * fConst3); + fConst5 = (0.0 - (0.83894547537068676 * fConst4)); + fConst6 = (0.0 - (0.92131773170354936 * fConst4)); + fConst7 = (0.0 - (1.4907234049739491 * fConst4)); + fConst8 = (0.0 - (0.83894547432629885 * fConst4)); + fConst9 = (0.0 - (0.92131773191602406 * fConst4)); + fConst10 = (0.0 - (1.4907234045358599 * fConst4)); + fConst11 = (0.0 - (0.5694056722918005 * fConst4)); + fConst12 = (0.0 - (1.3574422932346608 * fConst4)); + fConst13 = (0.0 - (1.4907234046979638 * fConst4)); + fConst14 = (0.0 - (1.3574422936455703 * fConst4)); + fConst15 = (0.0 - (1.3574422934949071 * fConst4)); + fConst16 = (0.0 - (0.83894547484849291 * fConst4)); + fConst17 = (0.0 - (0.92131773189251487 * fConst4)); + fConst18 = (0.0 - (0.56940567317101876 * fConst4)); + fConst19 = (0.0 - (0.92131773172705878 * fConst4)); + fConst20 = (0.0 - (0.56940567290330546 * fConst4)); + fConst21 = double(tgamma(5.0)); + fConst22 = double(tgamma(2.5)); + fConst23 = (sqrt((5.0 * (fConst1 / fConst21))) * fConst22); + fConst24 = (0.0 - (2.8545985866509747 * fConst23)); + fConst25 = (0.0 - (2.1276921620518694 * fConst23)); + fConst26 = (0.0 - (2.127692159770834 * fConst23)); + fConst27 = (0.0 - (2.8545985849673534 * fConst23)); + fConst28 = (0.0 - (2.127692162576873 * fConst23)); + fConst29 = double(tgamma(2.0)); + fConst30 = double(tgamma(4.0)); + fConst31 = sqrt((5.0 * (fConst29 / fConst30))); + fConst32 = (0.049867785051350533 * fConst3); + fConst33 = (0.0 - (1.595769121639145 * fConst3)); + fConst34 = (0.031250000000079749 * fConst33); + fConst35 = (0.049867785014654206 * fConst3); + fConst36 = (0.066904654355926602 * fConst3); + fConst37 = (0.0 - (1.513879513216569 * fConst3)); + fConst38 = (0.044194173824159223 * fConst37); + fConst39 = (0.0 - (1.1283791662916762 * fConst3)); + fConst40 = (0.044194173824159223 * fConst39); + fConst41 = (0.031250000006010782 * fConst33); + fConst42 = (0.049867785060815094 * fConst3); + fConst43 = (fConst31 * fConst33); + fConst44 = (0.0 - (0.99999999978213805 * fConst43)); + fConst45 = (fConst31 * fConst3); + fConst46 = (0.0 - (1.5957691212914875 * fConst45)); + fConst47 = (0.0 - (1.5957691216595047 * fConst45)); + fConst48 = (0.0 - (1.0000000000127585 * fConst43)); + fConst49 = (0.0 - (1.5957691204689346 * fConst45)); + fConst50 = (0.0 - (2.1409489393896513 * fConst45)); + fConst51 = (0.0 - (1.4142135623730951 * (fConst31 * fConst37))); + fConst52 = (0.0 - (1.4142135623730951 * (fConst31 * fConst39))); + fConst53 = (0.049867785048675617 * fConst3); + fConst54 = (0.0 - (1.1283791670614929 * fConst3)); + fConst55 = (0.044194173824159223 * fConst54); + fConst56 = (0.066904654348894713 * fConst3); + fConst57 = (0.049867785051096042 * fConst3); + fConst58 = (0.031249999999920262 * fConst33); + fConst59 = (0.0 - (1.5138795130574554 * fConst3)); + fConst60 = (0.044194173824159223 * fConst59); + fConst61 = (0.031250000006808193 * fConst33); + fConst62 = (0.049867785062087583 * fConst3); + fConst63 = (0.0 - (1.5957691215576197 * fConst45)); + fConst64 = (0.0 - (1.4142135623730951 * (fConst31 * fConst54))); + fConst65 = (0.0 - (2.1409489391646308 * fConst45)); + fConst66 = (0.0 - (1.5957691216187855 * fConst45)); + fConst67 = (0.0 - (0.99999999998724154 * fConst43)); + fConst68 = (0.0 - (1.4142135623730951 * (fConst31 * fConst59))); + fConst69 = (0.0 - (0.99999999980765519 * fConst43)); + fConst70 = (0.0 - (1.5957691213322069 * fConst45)); + fConst71 = (0.0 - (1.0858147483458616e-11 * fConst23)); + fConst72 = (0.0 - (2.3788321562260699 * fConst23)); + fConst73 = (0.0 - (2.3788321569902795 * fConst23)); + fConst74 = (0.0 - (0.4063530434926958 * fConst23)); + fConst75 = (0.0 - (2.3094187680584044 * fConst23)); + fConst76 = (0.0 - (5.4292390966272419e-11 * fConst23)); + fConst77 = (0.0 - (2.378832153716274 * fConst23)); + fConst78 = (0.0 - (8.1850154790365642e-10 * fConst23)); + fConst79 = (0.0 - (2.3788321544804822 * fConst23)); + fConst80 = double(tgamma(7.0)); + fConst81 = double(tgamma(3.5)); + fConst82 = (sqrt((7.0 * (fConst1 / fConst80))) * fConst81); + fConst83 = (0.0 - (6.3572844778421267 * fConst82)); + fConst84 = (0.0 - (2.9260633694272102 * fConst82)); + fConst85 = (0.0 - (2.4568472865809237 * fConst82)); + fConst86 = (0.0 - (0.28999148408756475 * fConst82)); + fConst87 = (0.0 - (3.9290178837373331 * fConst82)); + fConst88 = (0.0 - (6.3572844791652345 * fConst82)); + fConst89 = (0.0 - (2.4568472848811247 * fConst82)); + fConst90 = (0.0 - (2.9260633624460199 * fConst82)); + fConst91 = double(tgamma(6.0)); + fConst92 = sqrt((7.0 * (fConst29 / fConst91))); + fConst93 = (0.19194119415074193 * fConst22); + fConst94 = (0.0 - (4.3431334391370644 * fConst22)); + fConst95 = (0.04419417382415923 * fConst94); + fConst96 = (0.19194119415074187 * fConst22); + fConst97 = (0.044194173824159223 * fConst94); + fConst98 = (fConst92 * fConst94); + fConst99 = (0.0 - (1.4142135623730951 * fConst98)); + fConst100 = (fConst92 * fConst22); + fConst101 = (0.0 - (6.1421182128237399 * fConst100)); + fConst102 = sqrt((7.0 * (fConst2 / fConst21))); + fConst103 = (0.028791179128110564 * fConst3); + fConst104 = (0.0 - (3.3851375012865379 * fConst3)); + fConst105 = (0.011617126076936305 * fConst104); + fConst106 = (0.020642487809373531 * fConst104); + fConst107 = (0.0 - ((2.7639531957128085 * fConst3) + (2.8867513460690217 * fConst33))); + fConst108 = (0.015625000000039874 * fConst107); + fConst109 = (0.089771875033956811 * fConst3); + fConst110 = (0.024304538356264491 * fConst3); + fConst111 = (0.0 - ((2.6286555606082351 * fConst37) + (2.8795699518469395 * fConst3))); + fConst112 = (0.022097086912079612 * fConst111); + fConst113 = (0.0 - ((4.6708617953819722 * fConst39) + (1.2078918363708513 * fConst3))); + fConst114 = (0.022097086912079612 * fConst113); + fConst115 = (0.011617126071105382 * fConst104); + fConst116 = (0.015625000003005391 * fConst107); + fConst117 = (0.020642487806139163 * fConst104); + fConst118 = (0.028791179133574932 * fConst3); + fConst119 = (fConst102 * fConst104); + fConst120 = (0.0 - (0.37174803463013312 * fConst119)); + fConst121 = (fConst102 * fConst107); + fConst122 = (0.0 - (0.49999999989106902 * fConst121)); + fConst123 = (0.0 - (0.66055960994526475 * fConst119)); + fConst124 = (fConst102 * fConst3); + fConst125 = (0.0 - (0.92131773189646693 * fConst124)); + fConst126 = (0.0 - (0.3717480341673508 * fConst119)); + fConst127 = (0.0 - (0.92131773210894174 * fConst124)); + fConst128 = (0.0 - (0.66055960975114159 * fConst119)); + fConst129 = (0.0 - (0.50000000000637923 * fConst121)); + fConst130 = (0.0 - (2.8727000010866179 * fConst124)); + fConst131 = (0.0 - (0.7777452274004637 * fConst124)); + fConst132 = (0.0 - (0.70710678118654757 * (fConst102 * fConst111))); + fConst133 = (0.0 - (0.70710678118654757 * (fConst102 * fConst113))); + fConst134 = (0.018796904843951478 * fConst104); + fConst135 = (0.0 - (1.1491488228408451 * fConst3)); + fConst136 = (0.022097086912079612 * fConst135); + fConst137 = (0.0 - ((1.7841104488024717 * fConst54) + (3.1623018850062845 * fConst3))); + fConst138 = (0.022097086912079612 * fConst137); + fConst139 = (0.018796904840703489 * fConst104); + fConst140 = (0.10295567663646205 * fConst3); + fConst141 = (0.028791179127963633 * fConst3); + fConst142 = (0.007884728723289422 * fConst104); + fConst143 = (0.015624999999960131 * fConst107); + fConst144 = (0.0 - ((4.253254042028713 * fConst59) + (1.7796721029334124 * fConst3))); + fConst145 = (0.022097086912079612 * fConst144); + fConst146 = (0.015625000003404096 * fConst107); + fConst147 = (0.0078847287195823092 * fConst104); + fConst148 = (0.028791179134309602 * fConst3); + fConst149 = (0.0 - (0.70710678118654757 * (fConst102 * fConst135))); + fConst150 = (0.0 - (0.60150095518852686 * fConst119)); + fConst151 = (0.0 - (0.70710678118654757 * (fConst102 * fConst137))); + fConst152 = (0.0 - (0.60150095512176593 * fConst119)); + fConst153 = (0.0 - (3.2945816523667855 * fConst124)); + fConst154 = (0.0 - (0.92131773208543244 * fConst124)); + fConst155 = (0.0 - (0.25231131953485497 * fConst119)); + fConst156 = (0.0 - (0.49999999999362077 * fConst121)); + fConst157 = (0.0 - (0.70710678118654757 * (fConst102 * fConst144))); + fConst158 = (0.0 - (0.4999999999038276 * fConst121)); + fConst159 = (0.0 - (0.25231131941622759 * fConst119)); + fConst160 = (0.0 - (0.92131773191997635 * fConst124)); + fConst161 = (0.1552836879846895 * fConst22); + fConst162 = (0.0 - (3.5136687610121586 * fConst22)); + fConst163 = (0.044194173824159223 * fConst162); + fConst164 = (0.11724619443659033 * fConst22); + fConst165 = (0.0 - (2.6529785329417432 * fConst22)); + fConst166 = (0.044194173824159223 * fConst165); + fConst167 = (1.9256467651072228e-11 * fConst94); + fConst168 = (8.3633408575032958e-11 * fConst22); + fConst169 = (0.0 - (3.1344771863690116e-11 * fConst100)); + fConst170 = (0.0 - (7.2170869955858409e-12 * fConst98)); + fConst171 = (0.0 - (1.8980189062872217 * fConst100)); + fConst172 = (0.0 - (6.0706664864297446 * fConst100)); + fConst173 = (0.0 - (4.2926094388763847 * fConst22)); + fConst174 = (0.0 - (1.4142135623730951 * (fConst92 * fConst173))); + fConst175 = (0.0 - (1.3421020394559686 * fConst22)); + fConst176 = (0.0 - (1.4142135623730951 * (fConst92 * fConst175))); + fConst177 = (0.0 - (1.5672863270319247e-10 * fConst100)); + fConst178 = (0.0 - (3.6086534042650283e-11 * fConst98)); + fConst179 = (0.0 - (5.4403358273051902e-10 * fConst98)); + fConst180 = (0.0 - (2.3628104451704574e-09 * fConst100)); + fConst181 = (0.0 - (0.57323598386659269 * fConst82)); + fConst182 = (0.0 - (0.57323598919882257 * fConst82)); + fConst183 = (0.0 - (2.4568472849939691 * fConst82)); + fConst184 = (0.0 - (5.6729021311513463 * fConst82)); + fConst185 = (0.0 - (2.4568472833694006 * fConst82)); + fConst186 = (0.0 - (5.6729021295749007 * fConst82)); + fConst187 = (0.0 - (5.203686055152577 * fConst82)); + fConst188 = (0.0 - (0.92751530491955814 * fConst82)); + fConst189 = (double(tgamma(4.5)) * sqrt((9.0 * (fConst1 / double(tgamma(9.0)))))); + fConst190 = (0.0 - (10.212922369619969 * fConst189)); + fConst191 = (0.0 - (5.7910350987853847e-11 * fConst189)); + fConst192 = (0.0 - (12.687104824167649 * fConst189)); + fConst193 = (0.0 - (4.9444630204394806e-09 * fConst189)); + fConst194 = (0.0 - (10.212922387690494 * fConst189)); + fConst195 = (0.0 - (2.8955977255842764e-10 * fConst189)); + fConst196 = (0.0 - (12.687104827514046 * fConst189)); + fConst197 = sqrt((9.0 * (fConst29 / double(tgamma(8.0))))); + fConst198 = (0.0 - (9.9292300897832995 * fConst81)); + fConst199 = (fConst197 * fConst198); + fConst200 = (0.0 - (1.0000000006535863 * fConst199)); + fConst201 = (fConst81 * fConst197); + fConst202 = (0.0 - (9.9292300962729083 * fConst201)); + fConst203 = (0.0 - (1.8963142016150152 * fConst201)); + fConst204 = (0.0 - (14.459248590941478 * fConst201)); + fConst205 = (0.0 - (10.22423272951675 * fConst81)); + fConst206 = (0.0 - (1.4142135623730951 * (fConst197 * fConst205))); + fConst207 = (0.0 - (1.3408966312223309 * fConst81)); + fConst208 = (0.0 - (1.4142135623730951 * (fConst197 * fConst207))); + fConst209 = (0.0 - (9.9292300894032515 * fConst201)); + fConst210 = (0.0 - (0.9999999999617244 * fConst199)); + fConst211 = (0.31028844030335295 * fConst81); + fConst212 = (0.031249999999760792 * fConst198); + fConst213 = (0.031249999981967664 * fConst198); + fConst214 = (0.31028844012668089 * fConst81); + fConst215 = (0.059259818800469224 * fConst81); + fConst216 = (0.45185151846692118 * fConst81); + fConst217 = (0.044194173824159223 * fConst205); + fConst218 = (0.044194173824159223 * fConst207); + fConst219 = sqrt((9.0 * (fConst2 / fConst80))); + fConst220 = (0.2216346002462225 * fConst22); + fConst221 = (0.0 - (11.283791670955125 * fConst22)); + fConst222 = (0.019764235376110769 * fConst221); + fConst223 = (0.014731391264225374 * fConst221); + fConst224 = (0.0 - ((7.5225277803217159 * fConst22) + (4.041451884496631 * fConst94))); + fConst225 = (0.022097086912079615 * fConst224); + fConst226 = (0.019764235366430384 * fConst221); + fConst227 = (0.22163460024622245 * fConst22); + fConst228 = (0.014731391283653389 * fConst221); + fConst229 = (0.022097086912079612 * fConst224); + fConst230 = (fConst219 * fConst221); + fConst231 = (0.0 - (0.63245553221237039 * fConst230)); + fConst232 = (fConst219 * fConst224); + fConst233 = (0.0 - (0.70710678118654757 * fConst232)); + fConst234 = (0.0 - (0.47140452026591112 * fConst230)); + fConst235 = (fConst22 * fConst219); + fConst236 = (0.0 - (7.0923072078791183 * fConst235)); + fConst237 = (0.0 - (0.63245553183935277 * fConst230)); + fConst238 = (0.0 - (0.47140452088760798 * fConst230)); + fConst239 = sqrt((9.0 * (fConst30 / fConst91))); + fConst240 = (0.12918856329855402 * fConst3); + fConst241 = (0.0 - (2.6596152019522412 * fConst3)); + fConst242 = (0.0 - ((2.0207259422483155 * fConst107) + (4.0 * fConst33))); + fConst243 = (0.0 - (4.0316412356782187 * fConst3)); + fConst244 = (0.01473139127471974 * fConst243); + fConst245 = (0.0 - ((1.8400588924257646 * fConst111) + (4.0 * fConst37))); + fConst246 = (0.01473139127471974 * fConst245); + fConst247 = (0.0 - ((3.2696032567673803 * fConst113) + (4.0 * fConst39))); + fConst248 = (0.01473139127471974 * fConst247); + fConst249 = (0.01041666666867026 * fConst242); + fConst250 = (0.01041666666867026 * fConst241); + fConst251 = (fConst239 * fConst242); + fConst252 = (0.0 - (0.33333333326071263 * fConst251)); + fConst253 = (fConst239 * fConst241); + fConst254 = (0.0 - (0.33333333326071263 * fConst253)); + fConst255 = (0.0 - (0.33333333333758614 * fConst253)); + fConst256 = (0.0 - (0.33333333333758614 * fConst251)); + fConst257 = (fConst3 * fConst239); + fConst258 = (0.0 - (4.1340340255537287 * fConst257)); + fConst259 = (0.0 - (0.47140452079103168 * (fConst239 * fConst243))); + fConst260 = (0.0 - (0.47140452079103168 * (fConst239 * fConst245))); + fConst261 = (0.0 - (0.47140452079103168 * (fConst239 * fConst247))); + fConst262 = (0.11514556317659597 * fConst3); + fConst263 = ((1.2488773141617302 * fConst135) - (4.5135166682459715 * fConst3)); + fConst264 = (0.0 - ((1.2488773141617302 * fConst137) + (4.0 * fConst54))); + fConst265 = (0.010416666666640087 * fConst241); + fConst266 = (0.010416666666640087 * fConst242); + fConst267 = (0.0 - ((2.9772778294200997 * fConst144) + (4.0 * fConst59))); + fConst268 = (0.01473139127471974 * fConst267); + fConst269 = (0.010416666668936063 * fConst242); + fConst270 = (0.010416666668936063 * fConst241); + fConst271 = (0.0 - (0.47140452079103168 * (fConst239 * fConst263))); + fConst272 = (0.0 - (0.47140452079103168 * (fConst239 * fConst264))); + fConst273 = (0.0 - (3.6846580216510709 * fConst257)); + fConst274 = (0.0 - (0.33333333332908049 * fConst253)); + fConst275 = (0.0 - (0.33333333332908049 * fConst251)); + fConst276 = (0.0 - (0.47140452079103168 * (fConst239 * fConst267))); + fConst277 = (0.0 - (0.33333333326921838 * fConst251)); + fConst278 = (0.0 - (0.33333333326921838 * fConst253)); + fConst279 = (0.0098821176879093937 * fConst221); + fConst280 = (0.022097086912079612 * (0.0 - (1.0708342953989121 * fConst22))); + fConst281 = (0.022097086912079612 * (0.0 - ((2.4977546283234604 * fConst162) + (9.8471167056125903 * fConst22)))); + fConst282 = (0.009882117676857774 * fConst221); + fConst283 = (0.28015891130704573 * fConst22); + fConst284 = (0.022097086912079612 * (0.0 - ((5.9545556588401993 * fConst165) + (3.1187633124264642 * fConst22)))); + fConst285 = (9.6282338255361139e-12 * fConst224); + fConst286 = (9.6571541918193163e-11 * fConst22); + fConst287 = (0.0098821177072701549 * fConst221); + fConst288 = (0.0098821177001713802 * fConst221); + fConst289 = (0.0 - (3.6193824950167161e-11 * fConst235)); + fConst290 = (0.0 - (0.52704627699509621 * fConst230)); + fConst291 = (0.0 - (3.6085434977929205e-12 * fConst232)); + fConst292 = (0.0 - (0.52704627716441199 * fConst230)); + fConst293 = (0.0 - (5.1898861886710215 * fConst235)); + fConst294 = (0.0 - (5.3968369311601121 * fConst235)); + fConst295 = (0.0 - (0.70710678118654757 * (fConst219 * (0.0 - ((3.6801177848515292 * fConst173) + (8.1650283574679019 * fConst22)))))); + fConst296 = (0.0 - (0.70710678118654757 * (fConst219 * (0.0 - ((6.5392065135347606 * fConst175) + (1.4366749630473863 * fConst22)))))); + fConst297 = (0.0 - (1.8097463658076773e-10 * fConst235)); + fConst298 = (0.0 - (0.52704627643903401 * fConst230)); + fConst299 = (0.0 - (1.8043267021325141e-11 * fConst232)); + fConst300 = (0.0 - (2.7201679136525951e-10 * fConst232)); + fConst301 = (0.0 - (0.52704627660834946 * fConst230)); + fConst302 = (0.0 - (2.7283384934120938e-09 * fConst235)); + fConst303 = (0.0 - (9.9292300898593062 * fConst201)); + fConst304 = (0.0 - (1.000000000007655 * fConst199)); + fConst305 = (0.0 - (0.99999999934641381 * fConst199)); + fConst306 = (0.0 - (9.9292300832936924 * fConst201)); + fConst307 = (0.0 - (12.997530928599598 * fConst201)); + fConst308 = (0.0 - (9.190642258294659 * fConst81)); + fConst309 = (0.0 - (1.4142135623730951 * (fConst197 * fConst308))); + fConst310 = (0.0 - (5.5229415075696471 * fConst201)); + fConst311 = (0.0 - (3.9053093920991513 * fConst81)); + fConst312 = (0.0 - (1.4142135623730951 * (fConst197 * fConst311))); + fConst313 = (0.40617284151873745 * fConst81); + fConst314 = (0.044194173824159223 * fConst308); + fConst315 = (0.17259192211155147 * fConst81); + fConst316 = (0.044194173824159223 * fConst311); + fConst317 = (0.31028844031760461 * fConst81); + fConst318 = (0.031250000001196113 * fConst198); + fConst319 = (0.03125000001803234 * fConst198); + fConst320 = (0.31028844048477533 * fConst81); + fConst321 = (0.0 - (7.659691783828209 * fConst189)); + fConst322 = (0.0 - (7.6596917952497838 * fConst189)); + fConst323 = (0.0 - (5.6738457652340379 * fConst189)); + fConst324 = (0.0 - (5.6738457652340371 * fConst189)); + fConst325 = (0.0 - (7.6596917638193442 * fConst189)); + fConst326 = (0.0 - (7.6596917711557539 * fConst189)); } @@ -1293,9 +1962,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1304,131 +1973,131 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Inputs"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26713c0", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31a29c0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2675f10", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31a7510", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x266c870", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x319de70", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2667d20", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3199320", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26631d0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31947d0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x265e680", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x318fc80", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2659b30", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x318b130", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2654fe0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31865e0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2650490", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3181a90", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x264b940", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x317cf40", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2646df0", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31783f0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26422a0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31738a0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x263d750", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x316ed50", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2638c00", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x316a200", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26340b0", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31656b0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x262f560", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3160b60", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x262aa10", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x315c010", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2625ec0", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31574c0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2621370", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3152970", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x261c820", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x314de20", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2617cd0", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31492d0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2613180", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3144780", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x260e630", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x313fc30", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2609ae0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x313b0e0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2604f90", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3136590", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2600440", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3131a40", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x25fb8f0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x312cef0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x25f6da0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31283a0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x25f2250", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3123850", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x25ed700", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x311ed00", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x25e8bb0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x311a1b0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x25e3f80", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3115570", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "1", ""); @@ -1436,111 +2105,111 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x267dc20", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31af220", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x268af80", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31c1ee0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2694e50", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31cb700", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26a1890", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31db580", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26ac890", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31e9ce0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26b6000", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31fece0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26c0460", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3209cb0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26c9fa0", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x321b7f0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26d49a0", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x322e1d0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26df480", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3240850", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26e76d0", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x324c970", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26f1ff0", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3268170", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x26f8cc0", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x326ee40", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27042c0", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3287a10", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x270c200", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x329cc50", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27179c0", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32acff0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2723260", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32bc6a0", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x272afe0", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32d07d0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph50, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2735450", &fVbargraph50, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32e3190", &fVbargraph50, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph51, "unit", "dB"); - ui_interface->addVerticalBargraph("0x273d2b0", &fVbargraph51, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32f8290", &fVbargraph51, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph52, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27446d0", &fVbargraph52, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32ff6b0", &fVbargraph52, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph53, "unit", "dB"); - ui_interface->addVerticalBargraph("0x274d210", &fVbargraph53, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3311740", &fVbargraph53, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph54, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2757f90", &fVbargraph54, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x332d620", &fVbargraph54, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph55, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2760c90", &fVbargraph55, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x333f6a0", &fVbargraph55, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph56, "unit", "dB"); - ui_interface->addVerticalBargraph("0x276ab20", &fVbargraph56, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3350900", &fVbargraph56, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); @@ -1713,146 +2382,114 @@ class mydsp : public dsp { fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph32 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (fTemp6 + fTemp4); - double fTemp34 = (fTemp26 + fTemp24); - double fTemp35 = (fTemp10 + fTemp8); - double fTemp36 = (fTemp15 + fTemp13); - double fTemp37 = (fTemp22 + fTemp20); - double fTemp38 = (fTemp11 + fTemp7); - double fTemp39 = (fTemp18 + fTemp17); - double fTemp40 = (fTemp1 + (fTemp2 - fTemp39)); - double fTemp41 = (fTemp19 + fTemp16); - double fTemp42 = (fTemp0 + (fTemp3 - fTemp41)); - double fTemp43 = (fRec1[0] * (((0.031250000005356424 * fTemp33) + ((0.03124999999942539 * fTemp34) + ((((0.028456031166074459 * fTemp31) + (0.050563562154587252 * fTemp25)) + (0.028456031151791669 * fTemp12)) + (0.050563562146664701 * fTemp5)))) - (((((0.03124999999974435 * fTemp35) + ((2.0741519909290582e-11 * fTemp36) + ((0.031249999992537459 * fTemp37) + ((((0.028456031178947395 * fTemp28) + (0.050563562158055714 * fTemp21)) + (0.028456031143523002 * fTemp14)) + (0.050563562143196253 * fTemp9))))) + (1.1672859106216881e-11 * fTemp38)) + (0.046042825611330579 * fTemp40)) + (0.019313562132325341 * fTemp42)))); - fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + double fTemp33 = (fRec1[0] * ((fConst4 * ((((((((((((0.026217046093473896 * fTemp31) + (0.02879117912208189 * fTemp26)) + (0.046585106402240353 * fTemp25)) + (0.02879117912208189 * fTemp24)) + (0.017793927259118766 * fTemp19)) + (0.04242007166358315 * fTemp18)) + (0.04242007166358315 * fTemp17)) + (0.017793927259118766 * fTemp16)) + (0.026217046080314912 * fTemp12)) + (0.028791179127546258 * fTemp6)) + (0.046585106394941164 * fTemp5)) + (0.028791179127546258 * fTemp4))) + (0.03125 * ((((((((((((fConst5 * fTemp28) + (fConst6 * fTemp22)) + (fConst7 * fTemp21)) + (fConst6 * fTemp20)) + (fConst8 * fTemp14)) + (fConst9 * fTemp10)) + (fConst10 * fTemp9)) + (fConst9 * fTemp8)) + (fConst11 * fTemp3)) + (fConst12 * fTemp2)) + (fConst12 * fTemp1)) + (fConst11 * fTemp0))))); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph33 = FAUSTFLOAT(fRec34[0]); - output1[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (fTemp26 - fTemp24); - double fTemp45 = (fTemp4 - (fTemp6 + (fTemp8 - (fTemp10 + (fTemp20 - (fTemp22 - fTemp44)))))); - double fTemp46 = (fTemp30 - fTemp29); - double fTemp47 = (fTemp13 - (fTemp15 + fTemp46)); - double fTemp48 = (fTemp27 - fTemp23); - double fTemp49 = (fTemp7 - (fTemp11 + fTemp48)); - double fTemp50 = (fTemp18 - fTemp17); - double fTemp51 = (fTemp1 - (fTemp2 + fTemp50)); - double fTemp52 = (fTemp19 - fTemp16); - double fTemp53 = (fTemp0 - (fTemp3 + fTemp52)); - double fTemp54 = (fRec1[0] * ((0.031250000001308703 * fTemp45) - ((((0.019313562147752456 * fTemp47) + (0.046042825614321402 * fTemp49)) + (0.028456031166074459 * fTemp51)) + (0.050563562154587252 * fTemp53)))); - fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + output1[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (fTemp4 - (fTemp6 + (fTemp8 - (fTemp10 + (fTemp20 - (fTemp22 - (fTemp26 - fTemp24))))))); + double fTemp35 = (fTemp13 - (fTemp15 + (fTemp30 - fTemp29))); + double fTemp36 = (fTemp7 - (fTemp11 + (fTemp27 - fTemp23))); + double fTemp37 = (fTemp1 - (fTemp2 + (fTemp18 - fTemp17))); + double fTemp38 = (fTemp0 - (fTemp3 + (fTemp19 - fTemp16))); + double fTemp39 = (fRec1[0] * ((0.031250000001308703 * fTemp34) - ((((0.019313562147752456 * fTemp35) + (0.046042825614321402 * fTemp36)) + (0.028456031166074459 * fTemp37)) + (0.050563562154587252 * fTemp38)))); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph34 = FAUSTFLOAT(fRec35[0]); - output2[i] = FAUSTFLOAT(fTemp54); - double fTemp55 = (fTemp27 + fTemp23); - double fTemp56 = (fTemp7 + (fTemp11 - fTemp55)); - double fTemp57 = (fTemp30 + fTemp29); - double fTemp58 = (fTemp13 + (fTemp15 - fTemp57)); - double fTemp59 = (fTemp2 + fTemp1); - double fTemp60 = (fTemp3 + fTemp0); - double fTemp61 = (fRec1[0] * (((0.031250000006153834 * fTemp37) + ((0.031249999999265907 * fTemp34) + ((((0.046042825611330579 * fTemp31) + (0.046042825603374658 * fTemp28)) + (0.019313562132325341 * fTemp25)) + (0.019313562123244806 * fTemp21)))) - ((((0.028456031161235202 * fTemp56) + ((0.050563562148694619 * fTemp58) + (((0.031249999998946943 * fTemp35) + ((3.9612778101837972e-12 * fTemp41) + ((9.4435413914173993e-12 * fTemp39) + ((((0.046042825625268138 * fTemp14) + (0.046042825620157823 * fTemp12)) + (0.019313562162147378 * fTemp9)) + (0.019313562153066861 * fTemp5))))) + (0.03124999999333487 * fTemp33)))) + (1.7712205246678851e-11 * fTemp59)) + (7.4297302997852447e-12 * fTemp60)))); - fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + output2[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (fRec1[0] * ((fConst4 * ((((((((((((0.04658510639681137 * fTemp30) + (0.04242007166358315 * fTemp31)) + (0.04658510639681137 * fTemp29)) + (0.042420071656253222 * fTemp28)) + (0.026217046089015403 * fTemp27)) + (0.028791179121934959 * fTemp26)) + (0.017793927259118766 * fTemp25)) + (0.028791179121934959 * fTemp24)) + (0.026217046089015403 * fTemp23)) + (0.028791179128280928 * fTemp22)) + (0.017793927250752708 * fTemp21)) + (0.028791179128280928 * fTemp20))) + (0.03125 * ((((((((((((fConst13 * fTemp15) + (fConst14 * fTemp14)) + (fConst13 * fTemp13)) + (fConst15 * fTemp12)) + (fConst16 * fTemp11)) + (fConst17 * fTemp10)) + (fConst18 * fTemp9)) + (fConst17 * fTemp8)) + (fConst16 * fTemp7)) + (fConst19 * fTemp6)) + (fConst20 * fTemp5)) + (fConst19 * fTemp4))))); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph35 = FAUSTFLOAT(fRec36[0]); - output3[i] = FAUSTFLOAT(fTemp61); - double fTemp62 = (fTemp4 + (fTemp6 - (fTemp8 + (fTemp10 - (fTemp20 + (fTemp22 - fTemp34)))))); - double fTemp63 = (fRec1[0] * (((5.9280216802104561e-12 * fTemp60) + (((1.3722268867176347e-11 * fTemp38) + ((4.3326398788419054e-11 * fTemp36) + ((((0.054126587736687347 * fTemp31) + (0.040343576494253922 * fTemp25)) + (0.054126587710176526 * fTemp14)) + (0.040343576547459722 * fTemp9)))) + (3.3690616435560736e-11 * fTemp59))) - (((3.1606181910512831e-12 * fTemp41) + ((1.796268315438824e-11 * fTemp39) + ((((0.054126587751820394 * fTemp28) + (0.040343576478053242 * fTemp21)) + (0.054126587719896917 * fTemp12)) + (0.040343576531259084 * fTemp5)))) + (0.040343576521304395 * fTemp62)))); - fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + output3[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (fRec1[0] * ((fConst23 * ((((((((0.089206205807902131 * fTemp31) + (0.066490380064120932 * fTemp26)) + (0.066490380019538955 * fTemp25)) + (0.066490380064120932 * fTemp24)) + (0.089206205764209553 * fTemp14)) + (0.066490380064120919 * fTemp10)) + (0.066490380107227617 * fTemp9)) + (0.066490380064120919 * fTemp8))) + (0.03125 * ((((((((fConst24 * fTemp28) + (fConst25 * fTemp22)) + (fConst26 * fTemp21)) + (fConst25 * fTemp20)) + (fConst27 * fTemp12)) + (fConst25 * fTemp6)) + (fConst28 * fTemp5)) + (fConst25 * fTemp4))))); + fRec37[0] = max((fRec37[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph36 = FAUSTFLOAT(fRec37[0]); - output4[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (fTemp22 - fTemp20); - double fTemp65 = (fTemp1 - (fTemp2 - fTemp50)); - double fTemp66 = (fTemp0 - (fTemp3 - fTemp52)); - double fTemp67 = (fTemp15 - fTemp13); - double fTemp68 = (fTemp10 - fTemp8); - double fTemp69 = (fTemp11 - fTemp7); - double fTemp70 = (fTemp6 - fTemp4); - double fTemp71 = (fRec1[0] * (((((0.040343576523941639 * fTemp44) + (0.040343576515049356 * fTemp64)) + (0.054126587736687347 * fTemp65)) + (0.040343576494253922 * fTemp66)) - ((((1.6549211726374409e-11 * fTemp67) + (0.040343576524353414 * fTemp68)) + (2.2203097434927284e-11 * fTemp69)) + (0.04034357653159857 * fTemp70)))); - fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + output4[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (fRec1[0] * ((fConst31 * ((((((((fConst32 * fTemp26) + (fConst34 * fTemp24)) + (fConst35 * fTemp19)) + (fConst36 * fTemp18)) + (fConst38 * fTemp17)) + (fConst40 * fTemp16)) + (fConst41 * fTemp6)) + (fConst42 * fTemp4))) + (0.03125 * ((((((((fConst44 * fTemp22) + (fConst46 * fTemp20)) + (fConst47 * fTemp10)) + (fConst48 * fTemp8)) + (fConst49 * fTemp3)) + (fConst50 * fTemp2)) + (fConst51 * fTemp1)) + (fConst52 * fTemp0))))); + fRec38[0] = max((fRec38[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph37 = FAUSTFLOAT(fRec38[0]); - output5[i] = FAUSTFLOAT(fTemp71); - double fTemp72 = (fTemp7 + (fTemp11 + fTemp55)); - double fTemp73 = (fTemp4 + (fTemp6 + (fTemp8 + (fTemp10 + (fTemp20 + (fTemp22 + fTemp34)))))); - double fTemp74 = (fTemp0 + (fTemp3 + fTemp41)); - double fTemp75 = (fTemp13 + (fTemp15 + fTemp57)); - double fTemp76 = (fTemp5 + (fTemp9 + (fTemp12 + (fTemp14 + (fTemp21 + (fTemp25 + (fTemp31 + fTemp28))))))); - double fTemp77 = (fTemp1 + (fTemp2 + fTemp39)); - double fTemp78 = (fRec1[0] * ((((0.040906781083793552 * fTemp72) + (2.9263569544132831e-12 * fTemp73)) + (0.056531781096479022 * fTemp74)) - (((0.021593218926725059 * fTemp75) + (0.034938562148434216 * fTemp76)) + (0.0059682189255058932 * fTemp77)))); - fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + output5[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (fTemp7 + (fTemp11 + (fTemp27 + fTemp23))); + double fTemp44 = (fTemp4 + (fTemp6 + (fTemp8 + (fTemp10 + (fTemp20 + (fTemp22 + (fTemp26 + fTemp24))))))); + double fTemp45 = (fTemp0 + (fTemp3 + (fTemp19 + fTemp16))); + double fTemp46 = (fTemp30 + fTemp29); + double fTemp47 = (fTemp13 + (fTemp15 + fTemp46)); + double fTemp48 = (fTemp5 + (fTemp9 + (fTemp12 + (fTemp14 + (fTemp21 + (fTemp25 + (fTemp31 + fTemp28))))))); + double fTemp49 = (fTemp1 + (fTemp2 + (fTemp18 + fTemp17))); + double fTemp50 = (fRec1[0] * ((((0.040906781083793552 * fTemp43) + (2.9263569544132831e-12 * fTemp44)) + (0.056531781096479002 * fTemp45)) - (((0.021593218926725055 * fTemp47) + (0.034938562148434216 * fTemp48)) + (0.0059682189255058898 * fTemp49)))); + fRec39[0] = max((fRec39[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph38 = FAUSTFLOAT(fRec39[0]); - output6[i] = FAUSTFLOAT(fTemp78); - double fTemp79 = (fTemp7 - (fTemp11 - fTemp48)); - double fTemp80 = (fTemp13 - (fTemp15 - fTemp46)); - double fTemp81 = (fTemp2 - fTemp1); - double fTemp82 = (fTemp3 - fTemp0); - double fTemp83 = (fRec1[0] * (((0.054126587730998453 * fTemp79) + ((0.040343576521777599 * fTemp80) + ((0.040343576523735748 * fTemp44) + (0.040343576516078811 * fTemp70)))) - (((((0.040343576532628024 * fTemp64) + ((1.1101548718630453e-11 * fTemp50) + (8.2746058575420039e-12 * fTemp52))) + (0.040343576523323967 * fTemp68)) + (2.0821946059249937e-11 * fTemp81)) + (1.5519762259670396e-11 * fTemp82)))); - fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + output6[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (fRec1[0] * ((fConst31 * ((((((((fConst53 * fTemp30) + (fConst55 * fTemp29)) + (fConst56 * fTemp27)) + (fConst57 * fTemp26)) + (fConst58 * fTemp24)) + (fConst60 * fTemp23)) + (fConst61 * fTemp22)) + (fConst62 * fTemp20))) + (0.03125 * ((((((((fConst63 * fTemp15) + (fConst64 * fTemp13)) + (fConst65 * fTemp11)) + (fConst66 * fTemp10)) + (fConst67 * fTemp8)) + (fConst68 * fTemp7)) + (fConst69 * fTemp6)) + (fConst70 * fTemp4))))); + fRec40[0] = max((fRec40[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph39 = FAUSTFLOAT(fRec40[0]); - output7[i] = FAUSTFLOAT(fTemp83); - double fTemp84 = (fRec1[0] * ((((0.052810427283009165 * fTemp75) + ((1.7578661182284158e-11 * fTemp37) + ((((0.027063293867943854 * fTemp31) + (0.027063293837677766 * fTemp28)) + (0.0270632939209655 * fTemp14)) + (0.027063293901524704 * fTemp12)))) + (0.016726035452584633 * fTemp72)) - ((((1.5519762270076438e-11 * fTemp33) + ((1.0294494561038593e-12 * fTemp35) + ((2.0588989122077187e-13 * fTemp34) + ((((0.045105489806145357 * fTemp25) + (0.04510548982063569 * fTemp21)) + (0.045105489758556633 * fTemp9)) + (0.045105489773046931 * fTemp5))))) + (0.043789329326217374 * fTemp77)) + (0.0077049374891727668 * fTemp74)))); - fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + output7[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (fRec1[0] * ((fConst23 * ((((((((((((((0.087037037470924977 * fTemp30) + (0.044603102903292141 * fTemp31)) + (0.087037037470924977 * fTemp29)) + (0.044603102853410466 * fTemp28)) + (0.027566233589157149 * fTemp27)) + (0.027566233589157149 * fTemp23)) + (2.8971462571211461e-11 * fTemp22)) + (2.8971462571211461e-11 * fTemp20)) + (0.087037037470924977 * fTemp15)) + (0.044603102990677254 * fTemp14)) + (0.087037037470924977 * fTemp13)) + (0.044603102958636814 * fTemp12)) + (0.027566233589157149 * fTemp11)) + (0.027566233589157149 * fTemp7))) + (0.03125 * ((((((((((((((((((fConst71 * fTemp26) + (fConst72 * fTemp25)) + (fConst71 * fTemp24)) + (fConst73 * fTemp21)) + (fConst74 * fTemp19)) + (fConst75 * fTemp18)) + (fConst75 * fTemp17)) + (fConst74 * fTemp16)) + (fConst76 * fTemp10)) + (fConst77 * fTemp9)) + (fConst76 * fTemp8)) + (fConst78 * fTemp6)) + (fConst79 * fTemp5)) + (fConst78 * fTemp4)) + (fConst74 * fTemp3)) + (fConst75 * fTemp2)) + (fConst75 * fTemp1)) + (fConst74 * fTemp0))))); + fRec41[0] = max((fRec41[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph40 = FAUSTFLOAT(fRec41[0]); - output8[i] = FAUSTFLOAT(fTemp84); - double fTemp85 = (fRec1[0] * (((0.0029695746450525032 * fTemp42) + ((((0.025158640182583659 * fTemp34) + ((((0.06509994890923472 * fTemp31) + (0.029963512991023594 * fTemp21)) + (0.065099948914697517 * fTemp12)) + (0.029963512856939822 * fTemp9))) + (0.025158640168258844 * fTemp33)) + (0.040233981091600451 * fTemp40))) - ((1.1688378238253342e-11 * fTemp38) + ((0.025158640181813286 * fTemp35) + ((6.5575899958893731e-11 * fTemp36) + ((0.025158640199219585 * fTemp37) + ((((0.065099948904311158 * fTemp28) + (0.029963512959726043 * fTemp25)) + (0.06509994891786007 * fTemp14)) + (0.029963512888237169 * fTemp5)))))))); - fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + output8[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (fRec1[0] * ((0.03125 * ((((((((((((fConst83 * fTemp28) + (fConst84 * fTemp25)) + (fConst85 * fTemp22)) + (fConst85 * fTemp20)) + (fConst86 * fTemp19)) + (fConst87 * fTemp18)) + (fConst87 * fTemp17)) + (fConst86 * fTemp16)) + (fConst88 * fTemp14)) + (fConst89 * fTemp10)) + (fConst89 * fTemp8)) + (fConst90 * fTemp5))) + (fConst82 * ((((((((((((0.19866513994759175 * fTemp31) + (0.076776477654886113 * fTemp26)) + (0.076776477654886113 * fTemp24)) + (0.09143948039011067 * fTemp21)) + (0.19866513996426247 * fTemp12)) + (0.09143947998092801 * fTemp9)) + (0.076776477611171123 * fTemp6)) + (0.076776477611171123 * fTemp4)) + (0.0090622338777363986 * fTemp3)) + (0.12278180886679166 * fTemp2)) + (0.12278180886679166 * fTemp1)) + (0.0090622338777363986 * fTemp0))))); + fRec42[0] = max((fRec42[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); fVbargraph41 = FAUSTFLOAT(fRec42[0]); - output9[i] = FAUSTFLOAT(fTemp85); - double fTemp86 = (fRec1[0] * (((1.4651625729709834e-11 * fTemp82) + (((4.090282886747088e-11 * fTemp67) + (3.0883482280990851e-11 * fTemp69)) + (4.6862090253384154e-11 * fTemp81))) - (((2.4985262017509136e-11 * fTemp50) + (7.811745183791552e-12 * fTemp52)) + (0.061625831073954335 * (fTemp4 - (fTemp6 - (fTemp8 - (fTemp10 - (fTemp20 - (fTemp22 + fTemp44)))))))))); - fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); + output9[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (fRec1[0] * ((fConst92 * ((((fConst93 * fTemp26) + (fConst95 * fTemp24)) + (fConst96 * fTemp10)) + (fConst97 * fTemp8))) + (0.03125 * ((((fConst99 * fTemp22) + (fConst101 * fTemp20)) + (fConst99 * fTemp6)) + (fConst101 * fTemp4))))); + fRec43[0] = max((fRec43[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); fVbargraph42 = FAUSTFLOAT(fRec43[0]); - output10[i] = FAUSTFLOAT(fTemp86); - double fTemp87 = (fRec1[0] * (((0.019487798896868545 * fTemp33) + ((7.0504616362704489e-12 * fTemp36) + ((0.019487798893169893 * fTemp34) + ((((0.026618179814744531 * fTemp28) + (0.047297881462573126 * fTemp21)) + (0.026618179781608044 * fTemp14)) + (0.047297881448673376 * fTemp9))))) - ((((2.8586208079238403e-11 * fTemp38) + ((0.0194877988933688 * fTemp35) + ((0.019487798888874513 * fTemp37) + ((((0.026618179802703 * fTemp31) + (0.047297881459328679 * fTemp25)) + (0.026618179789342673 * fTemp12)) + (0.047297881451917809 * fTemp5))))) + (0.016450939837186842 * fTemp40)) + (0.060763619271724453 * fTemp42)))); - fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + output10[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (fRec1[0] * ((fConst102 * ((((((((((((fConst103 * fTemp26) + (fConst105 * fTemp31)) + (fConst106 * fTemp25)) + (fConst108 * fTemp24)) + (fConst109 * fTemp19)) + (fConst110 * fTemp18)) + (fConst112 * fTemp17)) + (fConst114 * fTemp16)) + (fConst115 * fTemp12)) + (fConst116 * fTemp6)) + (fConst117 * fTemp5)) + (fConst118 * fTemp4))) + (0.03125 * ((((((((((((fConst120 * fTemp28) + (fConst122 * fTemp22)) + (fConst123 * fTemp21)) + (fConst125 * fTemp20)) + (fConst126 * fTemp14)) + (fConst127 * fTemp10)) + (fConst128 * fTemp9)) + (fConst129 * fTemp8)) + (fConst130 * fTemp3)) + (fConst131 * fTemp2)) + (fConst132 * fTemp1)) + (fConst133 * fTemp0))))); + fRec44[0] = max((fRec44[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); fVbargraph43 = FAUSTFLOAT(fRec44[0]); - output11[i] = FAUSTFLOAT(fTemp87); - double fTemp88 = (fRec1[0] * (((0.034862310657899923 * fTemp47) + (0.03516578892887412 * fTemp51)) - (((0.021733652816759153 * fTemp49) + (0.031823442324083143 * fTemp45)) + (0.052652155785676925 * fTemp53)))); - fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp88)))))); + output11[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (fRec1[0] * (((0.034862310657899916 * fTemp35) + (0.035165788928874113 * fTemp37)) - (((0.021733652816759153 * fTemp36) + (0.031823442324083143 * fTemp34)) + (0.052652155785676891 * fTemp38)))); + fRec45[0] = max((fRec45[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); fVbargraph44 = FAUSTFLOAT(fRec45[0]); - output12[i] = FAUSTFLOAT(fTemp88); - double fTemp89 = (fRec1[0] * (((0.017187576256784607 * fTemp58) + ((0.019487798897365818 * fTemp37) + ((0.019487798893070441 * fTemp34) + ((((0.043069119652182263 * fTemp14) + (0.043069119647402003 * fTemp12)) + (0.018066183132229109 * fTemp9)) + (0.018066183123735063 * fTemp5))))) - ((((0.069687299442441134 * fTemp56) + ((((((((0.043069119639144872 * fTemp31) + (0.04306911963170279 * fTemp28)) + (0.018066183104333149 * fTemp25)) + (0.018066183095839083 * fTemp21)) + (3.3741441629064651e-12 * fTemp39)) + (1.2462826641630935e-11 * fTemp41)) + (0.019487798892871531 * fTemp35)) + (0.019487798889371789 * fTemp33))) + (6.328508709624312e-12 * fTemp59)) + (2.337514437443605e-11 * fTemp60)))); - fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + output12[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (fRec1[0] * ((fConst102 * ((((((((((((fConst134 * fTemp31) + (fConst136 * fTemp30)) + (fConst138 * fTemp29)) + (fConst139 * fTemp28)) + (fConst140 * fTemp27)) + (fConst141 * fTemp26)) + (fConst142 * fTemp25)) + (fConst143 * fTemp24)) + (fConst145 * fTemp23)) + (fConst146 * fTemp22)) + (fConst147 * fTemp21)) + (fConst148 * fTemp20))) + (0.03125 * ((((((((((((fConst149 * fTemp15) + (fConst150 * fTemp14)) + (fConst151 * fTemp13)) + (fConst152 * fTemp12)) + (fConst153 * fTemp11)) + (fConst154 * fTemp10)) + (fConst155 * fTemp9)) + (fConst156 * fTemp8)) + (fConst157 * fTemp7)) + (fConst158 * fTemp6)) + (fConst159 * fTemp5)) + (fConst160 * fTemp4))))); + fRec46[0] = max((fRec46[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); fVbargraph45 = FAUSTFLOAT(fRec46[0]); - output13[i] = FAUSTFLOAT(fTemp89); - double fTemp90 = (fRec1[0] * (((2.3706828457774462e-11 * fTemp70) + ((0.060908933113328061 * fTemp51) + (0.019043429064881861 * fTemp53))) - ((1.5725100189748727e-12 * fTemp68) + ((2.6851848495724207e-11 * fTemp64) + ((0.03764379087242118 * fTemp49) + ((3.1450200379497456e-13 * fTemp44) + (0.049856344630062416 * fTemp47))))))); - fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + output13[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (fRec1[0] * ((fConst92 * ((((((((((fConst161 * fTemp30) + (fConst163 * fTemp29)) + (fConst164 * fTemp27)) + (fConst166 * fTemp23)) + (fConst167 * fTemp22)) + (fConst168 * fTemp20)) + (fConst161 * fTemp15)) + (fConst163 * fTemp13)) + (fConst164 * fTemp11)) + (fConst166 * fTemp7))) + (0.03125 * ((((((((((((((fConst169 * fTemp26) + (fConst170 * fTemp24)) + (fConst171 * fTemp19)) + (fConst172 * fTemp18)) + (fConst174 * fTemp17)) + (fConst176 * fTemp16)) + (fConst177 * fTemp10)) + (fConst178 * fTemp8)) + (fConst179 * fTemp6)) + (fConst180 * fTemp4)) + (fConst171 * fTemp3)) + (fConst172 * fTemp2)) + (fConst174 * fTemp1)) + (fConst176 * fTemp0))))); + fRec47[0] = max((fRec47[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); fVbargraph46 = FAUSTFLOAT(fRec47[0]); - output14[i] = FAUSTFLOAT(fTemp90); - double fTemp91 = (fRec1[0] * (((3.4270952038764392e-12 * fTemp60) + (((0.025158640197293657 * fTemp33) + ((0.025158640183739214 * fTemp35) + ((1.8272098227973983e-12 * fTemp41) + ((2.4756382394124778e-11 * fTemp39) + ((((0.0058700586361645603 * fTemp14) + (0.0058700586712377503 * fTemp12)) + (0.058091727765422867 * fTemp9)) + (0.058091727749279801 * fTemp5)))))) + (4.6432806079350595e-11 * fTemp59))) - (((((0.025158640182968841 * fTemp34) + ((((0.0058700587318210864 * fTemp31) + (0.0058700587864242773 * fTemp28)) + (0.058091727712406088 * fTemp25)) + (0.058091727696262918 * fTemp21))) + (0.025158640166332916 * fTemp37)) + (0.053286855022019637 * fTemp58)) + (0.0094979545384014652 * fTemp56)))); - fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + output14[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = (fRec1[0] * ((0.03125 * ((((((((((((fConst181 * fTemp31) + (fConst182 * fTemp28)) + (fConst183 * fTemp26)) + (fConst184 * fTemp25)) + (fConst183 * fTemp24)) + (fConst185 * fTemp22)) + (fConst186 * fTemp21)) + (fConst185 * fTemp20)) + (fConst187 * fTemp15)) + (fConst187 * fTemp13)) + (fConst188 * fTemp11)) + (fConst188 * fTemp7))) + (fConst82 * (((((((((((0.028984853278736192 * fTemp27) + (0.16261518922351803 * fTemp46)) + (0.028984853278736192 * fTemp23)) + (0.017913624203916748 * fTemp14)) + (0.017913624310949439 * fTemp12)) + (0.076776477658412487 * fTemp10)) + (0.17727819176027068 * fTemp9)) + (0.076776477658412487 * fTemp8)) + (0.07677647769977651 * fTemp6)) + (0.17727819171100689 * fTemp5)) + (0.07677647769977651 * fTemp4))))); + fRec48[0] = max((fRec48[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); fVbargraph47 = FAUSTFLOAT(fRec48[0]); - output15[i] = FAUSTFLOAT(fTemp91); - double fTemp92 = (fRec1[0] * (((2.3706828455788844e-11 * fTemp33) + ((8.6902632707594203e-12 * fTemp38) + ((8.6633581781274152e-11 * fTemp36) + ((9.220514414903822e-13 * fTemp41) + ((2.9781975305141702e-11 * fTemp39) + ((((0.055463247966067275 * fTemp31) + (0.068899773710290213 * fTemp21)) + (0.0554632480475638 * fTemp14)) + (0.068899773728463481 * fTemp5))))))) - (((((2.6851848493475171e-11 * fTemp37) + ((3.1450200376863272e-13 * fTemp34) + ((((0.055463247919547001 * fTemp28) + (0.068899773715823801 * fTemp25)) + (0.055463248017682473 * fTemp12)) + (0.068899773733997041 * fTemp9)))) + (1.5725100188431636e-12 * fTemp35)) + (5.5858754400717101e-11 * fTemp59)) + (1.7293898234529268e-12 * fTemp60)))); - fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + output15[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = (fRec1[0] * ((0.03125 * ((((((((((fConst190 * fTemp28) + (fConst191 * fTemp26)) + (fConst192 * fTemp25)) + (fConst191 * fTemp24)) + (fConst193 * fTemp22)) + (fConst193 * fTemp20)) + (fConst194 * fTemp12)) + (fConst195 * fTemp10)) + (fConst196 * fTemp9)) + (fConst195 * fTemp8))) + (fConst189 * ((((((0.31915382431831724 * fTemp31) + (0.39647202572339707 * fTemp21)) + (0.31915382478727489 * fTemp14)) + (1.3641692798607456e-10 * fTemp6)) + (0.39647202582797197 * fTemp5)) + (1.3641692798607456e-10 * fTemp4))))); + fRec49[0] = max((fRec49[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); fVbargraph48 = FAUSTFLOAT(fRec49[0]); - output16[i] = FAUSTFLOAT(fTemp92); - double fTemp93 = (fRec1[0] * (((0.043576043047403736 * fTemp44) + (0.043576043076217999 * fTemp64)) - ((((0.04357604302259243 * fTemp70) + ((2.9828185191966888e-11 * fTemp69) + ((7.0196788983772721e-11 * fTemp67) + (0.043576043046069414 * fTemp68)))) + (0.063456766873105266 * fTemp65)) + (0.0083222836548664299 * fTemp66)))); - fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + output16[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = (fRec1[0] * ((0.03125 * ((((((((fConst200 * fTemp22) + (fConst202 * fTemp20)) + (fConst203 * fTemp19)) + (fConst204 * fTemp18)) + (fConst206 * fTemp17)) + (fConst208 * fTemp16)) + (fConst209 * fTemp10)) + (fConst210 * fTemp8))) + (fConst197 * ((((((((fConst211 * fTemp26) + (fConst212 * fTemp24)) + (fConst213 * fTemp6)) + (fConst214 * fTemp4)) + (fConst215 * fTemp3)) + (fConst216 * fTemp2)) + (fConst217 * fTemp1)) + (fConst218 * fTemp0))))); + fRec50[0] = max((fRec50[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); fVbargraph49 = FAUSTFLOAT(fRec50[0]); - output17[i] = FAUSTFLOAT(fTemp93); - double fTemp94 = (fRec1[0] * (((2.6227368822740658e-11 * fTemp60) + (((4.8310725177101978e-11 * fTemp38) + ((((0.046875000013244107 * fTemp28) + (0.034938562109514439 * fTemp21)) + (0.046874999985597562 * fTemp12)) + (0.034938562155592053 * fTemp5))) + (2.7273205523986569e-11 * fTemp59))) - (((4.0803405484301476e-12 * fTemp36) + ((1.3983535060489605e-11 * fTemp41) + ((1.4541139381314144e-11 * fTemp39) + ((((0.0468750000001385 * fTemp31) + (0.034938562123544639 * fTemp25)) + (0.046874999977179456 * fTemp14)) + (0.034938562169622218 * fTemp9))))) + (0.046584749536122891 * fTemp62)))); - fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + output17[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (fRec1[0] * ((fConst219 * ((((((((fConst220 * fTemp26) + (fConst222 * fTemp31)) + (fConst223 * fTemp25)) + (fConst225 * fTemp24)) + (fConst226 * fTemp14)) + (fConst227 * fTemp10)) + (fConst228 * fTemp9)) + (fConst229 * fTemp8))) + (0.03125 * ((((((((fConst231 * fTemp28) + (fConst233 * fTemp22)) + (fConst234 * fTemp21)) + (fConst236 * fTemp20)) + (fConst237 * fTemp12)) + (fConst233 * fTemp6)) + (fConst238 * fTemp5)) + (fConst236 * fTemp4))))); + fRec51[0] = max((fRec51[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); fVbargraph50 = FAUSTFLOAT(fRec51[0]); - output18[i] = FAUSTFLOAT(fTemp94); - double fTemp95 = (fRec1[0] * ((((0.016470196145394897 * fTemp70) + ((2.1370624453879151e-11 * fTemp67) + (0.016470196142437075 * fTemp68))) + (0.076802483918949241 * fTemp66)) - ((((0.016470196142268967 * fTemp44) + (0.016470196138638708 * fTemp64)) + (2.8080272732095284e-11 * fTemp69)) + (0.035308302677568924 * fTemp65)))); - fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + output18[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = (fRec1[0] * ((fConst239 * (((((((fConst240 * fTemp19) + (0.010416666666693247 * ((fConst241 * fTemp26) + (fConst242 * fTemp24)))) + (fConst244 * fTemp18)) + (fConst246 * fTemp17)) + (fConst248 * fTemp16)) + (fConst249 * fTemp6)) + (fConst250 * fTemp4))) + (0.03125 * ((((((((fConst252 * fTemp22) + (fConst254 * fTemp20)) + (fConst255 * fTemp10)) + (fConst256 * fTemp8)) + (fConst258 * fTemp3)) + (fConst259 * fTemp2)) + (fConst260 * fTemp1)) + (fConst261 * fTemp0))))); + fRec52[0] = max((fRec52[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); fVbargraph51 = FAUSTFLOAT(fRec52[0]); - output19[i] = FAUSTFLOAT(fTemp95); - double fTemp96 = (fRec1[0] * (((0.03515625 * fTemp76) + (0.040716809753480063 * fTemp74)) - (((0.036458333335514521 * fTemp73) + ((0.0029563930072167531 * fTemp75) + (0.0044761641722249612 * fTemp72))) + (0.030680085805992734 * fTemp77)))); - fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + output19[i] = FAUSTFLOAT(fTemp63); + double fTemp64 = (fRec1[0] * (((0.03515625 * fTemp48) + (0.040716809753480042 * fTemp45)) - (((0.036458333335514514 * fTemp44) + ((0.0029563930072167557 * fTemp47) + (0.0044761641722250133 * fTemp43))) + (0.030680085805992734 * fTemp49)))); + fRec53[0] = max((fRec53[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); fVbargraph52 = FAUSTFLOAT(fRec53[0]); - output20[i] = FAUSTFLOAT(fTemp96); - double fTemp97 = (fRec1[0] * ((((((0.016470196145815168 * fTemp64) + (7.2418539342264337e-12 * fTemp50)) + (0.016470196142016804 * fTemp68)) + (0.068453933060403052 * fTemp79)) + (1.3582743796311686e-11 * fTemp81)) - (((0.052097189716849929 * fTemp80) + (((0.016470196142184913 * fTemp44) + (1.5752452770270077e-11 * fTemp52)) + (0.016470196139058983 * fTemp70))) + (2.9545131962805021e-11 * fTemp82)))); - fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + output20[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = (fRec1[0] * ((fConst239 * (((((((fConst262 * fTemp27) + (0.01473139127471974 * ((fConst263 * fTemp30) + (fConst264 * fTemp29)))) + (fConst265 * fTemp26)) + (fConst266 * fTemp24)) + (fConst268 * fTemp23)) + (fConst269 * fTemp22)) + (fConst270 * fTemp20))) + (0.03125 * ((((((((fConst271 * fTemp15) + (fConst272 * fTemp13)) + (fConst273 * fTemp11)) + (fConst274 * fTemp10)) + (fConst275 * fTemp8)) + (fConst276 * fTemp7)) + (fConst277 * fTemp6)) + (fConst278 * fTemp4))))); + fRec54[0] = max((fRec54[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); fVbargraph53 = FAUSTFLOAT(fRec54[0]); - output21[i] = FAUSTFLOAT(fTemp97); - double fTemp98 = (fRec1[0] * (((0.058885808890184917 * fTemp72) + ((2.0298089534145165e-11 * fTemp37) + ((((0.039062500022261915 * fTemp25) + (0.039062500034810911 * fTemp21)) + (0.039062499981048875 * fTemp9)) + (0.039062499993597836 * fTemp5)))) - ((((0.0049735157744146986 * fTemp75) + ((1.7920677851401987e-11 * fTemp33) + (((2.3774116827431781e-13 * fTemp34) + ((((0.023437499999722999 * fTemp31) + (0.023437499973511796 * fTemp28)) + (0.023437500045641092 * fTemp14)) + (0.023437500028804868 * fTemp12))) + (1.1887058413715889e-12 * fTemp35)))) + (0.035448308900958271 * fTemp77)) + (0.03408898418156954 * fTemp74)))); - fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + output21[i] = FAUSTFLOAT(fTemp65); + double fTemp66 = (fRec1[0] * ((fConst219 * ((((((((((((((fConst279 * fTemp31) + (fConst280 * fTemp30)) + (fConst281 * fTemp29)) + (fConst282 * fTemp28)) + (fConst283 * fTemp27)) + (fConst284 * fTemp23)) + (fConst285 * fTemp22)) + (fConst286 * fTemp20)) + (fConst280 * fTemp15)) + (fConst287 * fTemp14)) + (fConst281 * fTemp13)) + (fConst288 * fTemp12)) + (fConst283 * fTemp11)) + (fConst284 * fTemp7))) + (0.03125 * ((((((((((((((((((fConst289 * fTemp26) + (fConst290 * fTemp25)) + (fConst291 * fTemp24)) + (fConst292 * fTemp21)) + (fConst293 * fTemp19)) + (fConst294 * fTemp18)) + (fConst295 * fTemp17)) + (fConst296 * fTemp16)) + (fConst297 * fTemp10)) + (fConst298 * fTemp9)) + (fConst299 * fTemp8)) + (fConst300 * fTemp6)) + (fConst301 * fTemp5)) + (fConst302 * fTemp4)) + (fConst293 * fTemp3)) + (fConst294 * fTemp2)) + (fConst295 * fTemp1)) + (fConst296 * fTemp0))))); + fRec55[0] = max((fRec55[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); fVbargraph54 = FAUSTFLOAT(fRec55[0]); - output22[i] = FAUSTFLOAT(fTemp98); - double fTemp99 = (fRec1[0] * (((9.6044928341539498e-12 * fTemp82) + ((((0.057041780897164614 * fTemp80) + (((0.043576043019256626 * fTemp64) + ((3.9045601344515947e-11 * fTemp50) + (5.1207867320706181e-12 * fTemp52))) + (0.043576043049405218 * fTemp68))) + (0.024238328118876596 * fTemp79)) + (7.3233512337077276e-11 * fTemp81))) - ((0.043576043048070889 * fTemp44) + (0.043576043072882202 * fTemp70)))); - fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); + output22[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = (fRec1[0] * ((0.03125 * ((((((((fConst303 * fTemp26) + (fConst304 * fTemp24)) + (fConst305 * fTemp22)) + (fConst306 * fTemp20)) + (fConst307 * fTemp15)) + (fConst309 * fTemp13)) + (fConst310 * fTemp11)) + (fConst312 * fTemp7))) + (fConst197 * ((((((((fConst313 * fTemp30) + (fConst314 * fTemp29)) + (fConst315 * fTemp27)) + (fConst316 * fTemp23)) + (fConst317 * fTemp10)) + (fConst318 * fTemp8)) + (fConst319 * fTemp6)) + (fConst320 * fTemp4))))); + fRec56[0] = max((fRec56[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); fVbargraph55 = FAUSTFLOAT(fRec56[0]); - output23[i] = FAUSTFLOAT(fTemp99); - double fTemp100 = (fRec1[0] * (((0.0011238859439902783 * fTemp74) + (((0.0052962688956890332 * fTemp72) + ((0.052798716243057847 * fTemp75) + ((((0.0077032289720464575 * fTemp25) + (0.0077032290215403596 * fTemp21)) + (0.0077032288095000394 * fTemp9)) + (0.0077032288589938191 * fTemp5)))) + (0.03630116707546352 * fTemp77))) - (((((0.041597435975574693 * fTemp31) + (0.041597436037601715 * fTemp28)) + (0.041597435866912648 * fTemp14)) + (0.041597435906754417 * fTemp12)) + (0.030812915534396364 * fTemp73)))); - fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + output23[i] = FAUSTFLOAT(fTemp67); + double fTemp68 = (fRec1[0] * ((0.03125 * ((((((((((((fConst321 * fTemp31) + (fConst322 * fTemp28)) + (fConst323 * fTemp26)) + (fConst323 * fTemp24)) + (fConst324 * fTemp22)) + (fConst324 * fTemp20)) + (fConst325 * fTemp14)) + (fConst326 * fTemp12)) + (fConst323 * fTemp10)) + (fConst323 * fTemp8)) + (fConst323 * fTemp6)) + (fConst323 * fTemp4))) + (fConst189 * (((((((((((((((((((0.030476478292642641 * fTemp27) + (0.30382122984176912 * fTemp46)) + (0.044326920549846299 * fTemp25)) + (0.030476478292642641 * fTemp23)) + (0.0443269208346505 * fTemp21)) + (0.0064672104551386778 * fTemp19)) + (0.20888888992654256 * fTemp18)) + (0.20888888992654256 * fTemp17)) + (0.0064672104551386778 * fTemp16)) + (0.30382122984176912 * fTemp15)) + (0.30382122984176912 * fTemp13)) + (0.030476478292642641 * fTemp11)) + (0.044326919614500547 * fTemp9)) + (0.030476478292642641 * fTemp7)) + (0.044326919899304089 * fTemp5)) + (0.0064672104551386778 * fTemp3)) + (0.20888888992654256 * fTemp2)) + (0.20888888992654256 * fTemp1)) + (0.0064672104551386778 * fTemp0))))); + fRec57[0] = max((fRec57[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); fVbargraph56 = FAUSTFLOAT(fRec57[0]); - output24[i] = FAUSTFLOAT(fTemp100); + output24[i] = FAUSTFLOAT(fTemp68); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; @@ -1919,7 +2556,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2151,7 +2787,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2214,7 +2850,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2243,11 +2879,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncLebedev501.cpp b/source/HOAUGens/HOAEncLebedev501.cpp index cf3b4f74d7..167578b2fc 100644 --- a/source/HOAUGens/HOAEncLebedev501.cpp +++ b/source/HOAUGens/HOAEncLebedev501.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncLebedev501" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,22 +613,53 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include +#include -double pow(double dummy0, double dummy1); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { private: + int fSamplingFreq; + double fConst0; FAUSTFLOAT fHslider0; + double fRec1[2]; double fRec0[2]; - int fSamplingFreq; + FAUSTFLOAT fVbargraph0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fConst14; + double fConst15; + double fConst16; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; public: @@ -623,31 +668,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncLebedev501"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -905,6 +950,23 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = (double(tgamma(1.5)) * sqrt((3.0 * (double(tgamma(1.0)) / double(tgamma(3.0)))))); + fConst2 = (0.012698412698412698 * (0.0 - (1.5957691216057308 * fConst1))); + fConst3 = (0.0 - (1.1283791670955128 * fConst1)); + fConst4 = (0.0 - (1.1283791670955126 * fConst1)); + fConst5 = (0.0 - (1.128379167095513 * fConst1)); + fConst6 = (0.0 - (0.92131773192356115 * fConst1)); + fConst7 = (0.0 - (0.92131773192356148 * fConst1)); + fConst8 = (0.0 - (0.48114249349102017 * fConst1)); + fConst9 = (0.0 - (0.48114249349102034 * fConst1)); + fConst10 = (0.0 - (0.48114249349102112 * fConst1)); + fConst11 = (0.0 - (1.4434274804730622 * fConst1)); + fConst12 = (0.0 - (1.4434274804730625 * fConst1)); + fConst13 = (0.0 - (0.48114249349102228 * fConst1)); + fConst14 = (0.0 - (0.48114249349102062 * fConst1)); + fConst15 = (0.0 - (1.443427480473062 * fConst1)); + fConst16 = (0.0 - (0.48114249349102095 * fConst1)); } @@ -915,7 +977,23 @@ class mydsp : public dsp { virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec0[l0] = 0.0; + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; } @@ -934,14 +1012,34 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c9f6e0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cb8a40", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cc2800", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2cd4590", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->declare(&fHslider0, "unit", "dB"); @@ -1007,7 +1105,7 @@ class mydsp : public dsp { FAUSTFLOAT* output3 = outputs[3]; double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (fSlow0 + (0.999 * fRec0[1])); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); double fTemp0 = double(input0[i]); double fTemp1 = double(input1[i]); double fTemp2 = double(input2[i]); @@ -1038,39 +1136,50 @@ class mydsp : public dsp { double fTemp27 = double(input25[i]); double fTemp28 = double(input26[i]); double fTemp29 = double(input27[i]); - double fTemp30 = (fTemp28 + fTemp29); - double fTemp31 = double(input28[i]); - double fTemp32 = double(input29[i]); - double fTemp33 = ((fTemp30 + fTemp31) + fTemp32); - double fTemp34 = double(input30[i]); - double fTemp35 = double(input31[i]); - double fTemp36 = double(input32[i]); - double fTemp37 = double(input33[i]); - double fTemp38 = double(input34[i]); - double fTemp39 = double(input35[i]); - double fTemp40 = double(input36[i]); - double fTemp41 = double(input37[i]); - double fTemp42 = double(input38[i]); - double fTemp43 = double(input39[i]); - double fTemp44 = double(input40[i]); - double fTemp45 = double(input41[i]); - double fTemp46 = double(input42[i]); - double fTemp47 = double(input43[i]); - double fTemp48 = double(input44[i]); - double fTemp49 = double(input45[i]); - double fTemp50 = double(input46[i]); - double fTemp51 = double(input47[i]); - double fTemp52 = double(input48[i]); - double fTemp53 = double(input49[i]); - output0[i] = FAUSTFLOAT((fRec0[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * ((((fTemp23 + fTemp24) + fTemp25) + fTemp26) + fTemp27))) + (0.02017333553791887 * ((((((((((((((((((((fTemp33 + fTemp34) + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53))))); - double fTemp54 = (fTemp20 + fTemp25); - double fTemp55 = (fTemp22 + fTemp27); - double fTemp56 = (fTemp41 + fTemp49); - double fTemp57 = (fTemp32 + fTemp53); - output1[i] = FAUSTFLOAT((fRec0[0] * (((2.6935244158092871e-18 * fTemp3) + (((0.031605542669238242 * (((((((fTemp35 + fTemp36) - fTemp39) - fTemp40) + fTemp43) + fTemp44) - fTemp47) - fTemp48)) + ((0.010535180889746096 * (fTemp37 + fTemp45)) + (((0.021093749999999994 * (((fTemp19 - fTemp21) + fTemp24) - fTemp26)) + (((0.027648561470568506 * (((((fTemp7 - fTemp9) + fTemp12) - fTemp14) + fTemp16) - fTemp18)) + (((0.021994295969128601 * (fTemp2 - fTemp4)) + (0.027648561470568499 * (fTemp11 - fTemp13))) + (3.3859722305960555e-18 * (fTemp8 + fTemp17)))) + (0.021093749999999998 * fTemp54))) + (0.010535180889746094 * (fTemp34 + fTemp42))))) + (0.010535180889746065 * ((((fTemp30 - fTemp31) + fTemp50) + fTemp51) - fTemp52)))) - ((((0.021093750000000001 * fTemp55) + (0.010535180889746089 * (fTemp38 + fTemp46))) + (0.010535180889746113 * fTemp56)) + (0.010535180889746067 * fTemp57))))); - output2[i] = FAUSTFLOAT((fRec0[0] * (((((0.021994295969128601 * (fTemp0 - fTemp5)) + (0.027648561470568499 * ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18))) + (0.021093750000000001 * ((((fTemp23 - fTemp24) - fTemp25) - fTemp26) - fTemp27))) + (0.010535180889746075 * (((((((((((((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) - fTemp42) - fTemp43) - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49))) + (0.031605542669238249 * ((((fTemp33 - fTemp50) - fTemp51) - fTemp52) - fTemp53))))); - output3[i] = FAUSTFLOAT((fRec0[0] * (((0.027648561470568496 * fTemp14) + ((0.010535180889746065 * (((fTemp28 - fTemp29) + fTemp50) - fTemp51)) + ((0.010535180889746074 * (fTemp40 + fTemp48)) + ((0.031605542669238242 * (((((fTemp34 - fTemp37) - fTemp38) + fTemp42) - fTemp45) - fTemp46)) + ((0.010535180889746081 * (fTemp35 + fTemp43)) + ((0.021093749999999998 * (fTemp19 + fTemp24)) + ((0.027648561470568506 * (((((fTemp6 - fTemp8) + fTemp11) - fTemp13) + fTemp15) - fTemp17)) + ((1.6929861152980278e-18 * (fTemp7 + fTemp16)) + ((1.3467622079046435e-18 * ((fTemp0 + fTemp2) + fTemp5)) + ((0.021994295969128601 * (fTemp1 - fTemp3)) + (((0.021093749999999991 * fTemp55) + (0.031605542669238228 * fTemp56)) + (0.010535180889746063 * fTemp57)))))))))))) - ((0.027648561470568499 * fTemp12) + ((4.0402866237139308e-18 * fTemp4) + ((((((5.0789583458940831e-18 * (fTemp9 + fTemp18)) + (0.021093749999999994 * fTemp54)) + (0.021093750000000001 * (fTemp21 + fTemp26))) + (0.010535180889746079 * (fTemp36 + fTemp44))) + (0.010535180889746086 * (fTemp39 + fTemp47))) + (0.010535180889746067 * (fTemp31 + fTemp52)))))))); + double fTemp30 = double(input28[i]); + double fTemp31 = double(input29[i]); + double fTemp32 = (((fTemp28 + fTemp29) + fTemp30) + fTemp31); + double fTemp33 = double(input30[i]); + double fTemp34 = double(input31[i]); + double fTemp35 = double(input32[i]); + double fTemp36 = double(input33[i]); + double fTemp37 = double(input34[i]); + double fTemp38 = double(input35[i]); + double fTemp39 = double(input36[i]); + double fTemp40 = double(input37[i]); + double fTemp41 = double(input38[i]); + double fTemp42 = double(input39[i]); + double fTemp43 = double(input40[i]); + double fTemp44 = double(input41[i]); + double fTemp45 = double(input42[i]); + double fTemp46 = double(input43[i]); + double fTemp47 = double(input44[i]); + double fTemp48 = double(input45[i]); + double fTemp49 = double(input46[i]); + double fTemp50 = double(input47[i]); + double fTemp51 = double(input48[i]); + double fTemp52 = double(input49[i]); + double fTemp53 = (fRec1[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * ((((fTemp23 + fTemp24) + fTemp25) + fTemp26) + fTemp27))) + (0.02017333553791887 * ((((((((((((((((((((fTemp32 + fTemp33) + fTemp34) + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52)))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (fRec1[0] * (((((fConst2 * fTemp4) + (0.022574955908289243 * ((((fConst3 * fTemp9) + (fConst4 * fTemp13)) + (fConst5 * fTemp14)) + (fConst3 * fTemp18)))) + (0.021093750000000001 * ((((fConst6 * fTemp21) + (fConst7 * fTemp22)) + (fConst6 * fTemp26)) + (fConst7 * fTemp27)))) + (fConst1 * (((((((((((((((((((((0.02026373487753309 * fTemp2) + (0.025473109945013343 * fTemp7)) + (0.025473109945013336 * fTemp11)) + (0.025473109945013343 * fTemp12)) + (0.025473109945013343 * fTemp16)) + (0.019434045907762619 * fTemp19)) + (0.019434045907762623 * fTemp20)) + (0.019434045907762619 * fTemp24)) + (0.019434045907762623 * fTemp25)) + (0.0097062489627452973 * fTemp28)) + (0.0097062489627452973 * fTemp29)) + (0.0097062489627453199 * fTemp33)) + (0.029118746888235923 * fTemp34)) + (0.029118746888235927 * fTemp35)) + (0.0097062489627453216 * fTemp36)) + (0.0097062489627453199 * fTemp41)) + (0.029118746888235923 * fTemp42)) + (0.029118746888235927 * fTemp43)) + (0.0097062489627453216 * fTemp44)) + (0.0097062489627452973 * fTemp49)) + (0.0097062489627452973 * fTemp50)))) + (0.02017333553791887 * ((((((((((((fConst8 * fTemp30) + (fConst9 * fTemp31)) + (fConst10 * fTemp37)) + (fConst11 * fTemp38)) + (fConst12 * fTemp39)) + (fConst13 * fTemp40)) + (fConst10 * fTemp45)) + (fConst11 * fTemp46)) + (fConst12 * fTemp47)) + (fConst13 * fTemp48)) + (fConst8 * fTemp51)) + (fConst9 * fTemp52))))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (fRec1[0] * (((((0.021994295969128601 * (fTemp0 - fTemp5)) + (0.027648561470568499 * ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18))) + (0.021093750000000001 * ((((fTemp23 - fTemp24) - fTemp25) - fTemp26) - fTemp27))) + (0.010535180889746075 * (((((((((((((((fTemp33 + fTemp34) + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) - fTemp41) - fTemp42) - fTemp43) - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48))) + (0.031605542669238249 * ((((fTemp32 - fTemp49) - fTemp50) - fTemp51) - fTemp52)))); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + output2[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (fRec1[0] * ((fConst1 * (((((((((((((((((((((0.02026373487753309 * fTemp1) + (0.025473109945013343 * fTemp6)) + (0.025473109945013343 * fTemp11)) + (0.025473109945013332 * fTemp14)) + (0.025473109945013343 * fTemp15)) + (0.019434045907762623 * fTemp19)) + (0.019434045907762616 * fTemp22)) + (0.019434045907762623 * fTemp24)) + (0.019434045907762616 * fTemp27)) + (0.0097062489627452956 * fTemp28)) + (0.0097062489627452939 * fTemp31)) + (0.029118746888235916 * fTemp33)) + (0.0097062489627453077 * fTemp34)) + (0.0097062489627453008 * fTemp39)) + (0.029118746888235913 * fTemp40)) + (0.029118746888235916 * fTemp41)) + (0.0097062489627453077 * fTemp42)) + (0.0097062489627453008 * fTemp47)) + (0.029118746888235913 * fTemp48)) + (0.0097062489627452956 * fTemp49)) + (0.0097062489627452939 * fTemp52))) + ((((fConst2 * fTemp3) + (0.022574955908289243 * ((((fConst3 * fTemp8) + (fConst4 * fTemp12)) + (fConst5 * fTemp13)) + (fConst3 * fTemp17)))) + (0.021093750000000001 * ((((fConst6 * fTemp20) + (fConst7 * fTemp21)) + (fConst6 * fTemp25)) + (fConst7 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst8 * fTemp29) + (fConst9 * fTemp30)) + (fConst14 * fTemp35)) + (fConst15 * fTemp36)) + (fConst11 * fTemp37)) + (fConst16 * fTemp38)) + (fConst14 * fTemp43)) + (fConst15 * fTemp44)) + (fConst11 * fTemp45)) + (fConst16 * fTemp46)) + (fConst8 * fTemp50)) + (fConst9 * fTemp51)))))); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + output3[i] = FAUSTFLOAT(fTemp56); + fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; } @@ -1079,7 +1188,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1311,7 +1419,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1374,7 +1482,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1403,11 +1511,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncLebedev502.cpp b/source/HOAUGens/HOAEncLebedev502.cpp index ce849eaa4c..7c3159c510 100644 --- a/source/HOAUGens/HOAEncLebedev502.cpp +++ b/source/HOAUGens/HOAEncLebedev502.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncLebedev502" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,22 +613,148 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include +#include -double pow(double dummy0, double dummy1); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { private: + int fSamplingFreq; + double fConst0; FAUSTFLOAT fHslider0; + double fRec1[2]; double fRec0[2]; - int fSamplingFreq; + FAUSTFLOAT fVbargraph0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fConst16; + double fConst17; + double fConst18; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fConst19; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fConst28; + double fConst29; + double fConst30; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fRec6[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fRec8[2]; + FAUSTFLOAT fVbargraph7; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; public: @@ -623,31 +763,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncLebedev502"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -925,6 +1065,108 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.5)); + fConst2 = double(tgamma(1.0)); + fConst3 = (fConst1 * sqrt((3.0 * (fConst2 / double(tgamma(3.0)))))); + fConst4 = (0.012698412698412698 * (0.0 - (1.5957691216057308 * fConst3))); + fConst5 = (0.0 - (1.1283791670955128 * fConst3)); + fConst6 = (0.0 - (1.1283791670955126 * fConst3)); + fConst7 = (0.0 - (1.128379167095513 * fConst3)); + fConst8 = (0.0 - (0.92131773192356115 * fConst3)); + fConst9 = (0.0 - (0.92131773192356148 * fConst3)); + fConst10 = (0.0 - (0.48114249349102017 * fConst3)); + fConst11 = (0.0 - (0.48114249349102034 * fConst3)); + fConst12 = (0.0 - (0.48114249349102112 * fConst3)); + fConst13 = (0.0 - (1.4434274804730622 * fConst3)); + fConst14 = (0.0 - (1.4434274804730625 * fConst3)); + fConst15 = (0.0 - (0.48114249349102228 * fConst3)); + fConst16 = (0.0 - (0.48114249349102062 * fConst3)); + fConst17 = (0.0 - (1.443427480473062 * fConst3)); + fConst18 = (0.0 - (0.48114249349102095 * fConst3)); + fConst19 = (double(tgamma(2.5)) * sqrt((5.0 * (fConst2 / double(tgamma(5.0)))))); + fConst20 = (0.0 - (0.58027968058390089 * fConst19)); + fConst21 = (0.0 - (1.7408390417517061 * fConst19)); + fConst22 = (0.0 - (1.7408390417517088 * fConst19)); + fConst23 = (0.0 - (1.7408390417517057 * fConst19)); + fConst24 = (0.0 - (1.7408390417517114 * fConst19)); + fConst25 = (0.0 - (3.1915382432114616 * fConst19)); + fConst26 = (0.022574955908289243 * fConst25); + fConst27 = (0.021093750000000001 * (0.0 - (2.1276921621409737 * fConst19))); + fConst28 = sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))); + fConst29 = (fConst1 * fConst28); + fConst30 = (0.0 - (2.3936536824085959 * fConst29)); + fConst31 = (0.0 - (1.6925687506432687 * fConst1)); + fConst32 = (0.0 - (1.4142135623730951 * (fConst28 * fConst31))); + fConst33 = (0.0 - (1.5957691216057308 * fConst29)); + fConst34 = (0.0 - (1.5957691216057313 * fConst29)); + fConst35 = (0.0 - (1.5957691216057308 * fConst1)); + fConst36 = (fConst28 * fConst35); + fConst37 = (0.0 - fConst36); + fConst38 = (0.0 - (1.0000000000000002 * fConst36)); + fConst39 = (0.054036626340088233 * fConst1); + fConst40 = (0.031925808815477283 * fConst31); + fConst41 = (0.033660754908870889 * fConst1); + fConst42 = (0.021093750000000001 * fConst35); + fConst43 = (0.021093750000000005 * fConst35); + fConst44 = (0.026338897580074728 * fConst1); + fConst45 = (0.0087796325266915921 * fConst1); + fConst46 = (0.026338897580074742 * fConst1); + fConst47 = (0.026338897580074745 * fConst1); + fConst48 = (0.0087796325266915939 * fConst1); + fConst49 = (0.0 - (0.97315860881060223 * fConst1)); + fConst50 = (0.0090217899191397874 * fConst49); + fConst51 = (0.027065369757419327 * fConst49); + fConst52 = (0.027065369757419331 * fConst49); + fConst53 = (0.0090217899191397891 * fConst49); + fConst54 = (0.0 - (1.3056292813137786 * fConst1)); + fConst55 = (0.020173335537918873 * fConst54); + fConst56 = (0.0 - (1.3056292813137786 * fConst29)); + fConst57 = (0.0 - (1.3056292813137791 * fConst29)); + fConst58 = (0.0 - (0.43520976043792686 * fConst29)); + fConst59 = (0.0 - (1.3056292813137795 * fConst29)); + fConst60 = (0.0 - (1.3056292813137798 * fConst29)); + fConst61 = (0.0 - (0.43520976043792792 * fConst29)); + fConst62 = (fConst28 * fConst49); + fConst63 = (0.0 - (0.44721359549995832 * fConst62)); + fConst64 = (0.0 - (1.3416407864998738 * fConst62)); + fConst65 = (0.0 - (1.3416407864998741 * fConst62)); + fConst66 = (0.0 - (0.44721359549995937 * fConst62)); + fConst67 = (fConst28 * fConst54); + fConst68 = (0.0 - fConst67); + fConst69 = (0.0 - (1.0000000000000002 * fConst67)); + fConst70 = (0.033660754908870882 * fConst1); + fConst71 = (0.021093749999999998 * fConst35); + fConst72 = (0.026338897580074724 * fConst1); + fConst73 = (0.026338897580074721 * fConst1); + fConst74 = (0.026338897580074738 * fConst1); + fConst75 = (0.0087796325266915817 * fConst1); + fConst76 = (0.0087796325266915748 * fConst1); + fConst77 = (0.026338897580074731 * fConst1); + fConst78 = (0.027065369757419324 * fConst49); + fConst79 = (0.009021789919139777 * fConst49); + fConst80 = (0.00902178991913977 * fConst49); + fConst81 = (0.027065369757419321 * fConst49); + fConst82 = (0.02017333553791887 * fConst54); + fConst83 = (0.020173335537918866 * fConst54); + fConst84 = (0.0 - (0.43520976043792636 * fConst29)); + fConst85 = (0.0 - (1.3056292813137793 * fConst29)); + fConst86 = (0.0 - (0.4352097604379267 * fConst29)); + fConst87 = (0.0 - (0.44721359549995782 * fConst62)); + fConst88 = (0.0 - (1.3416407864998736 * fConst62)); + fConst89 = (0.0 - (0.44721359549995815 * fConst62)); + fConst90 = (0.0 - (1.2884797242127563e-16 * fConst19)); + fConst91 = (0.0 - (2.5769594484255127e-16 * fConst19)); + fConst92 = (0.0 - (2.3211187223356089 * fConst19)); + fConst93 = (0.0 - (2.3211187223356093 * fConst19)); + fConst94 = (0.0 - (2.3211187223356085 * fConst19)); + fConst95 = (0.0 - (2.3211187223356098 * fConst19)); + fConst96 = (0.012698412698412698 * fConst25); + fConst97 = (0.0 - (1.595769121605731 * fConst19)); + fConst98 = (0.0 - (7.0866384831701748e-16 * fConst19)); + fConst99 = (0.0 - (1.417327696634035e-15 * fConst19)); + fConst100 = (0.0 - (4.7244256554467816e-16 * fConst19)); + fConst101 = (0.0 - (9.4488513108935631e-16 * fConst19)); } @@ -935,7 +1177,43 @@ class mydsp : public dsp { virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec0[l0] = 0.0; + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; } @@ -954,14 +1232,56 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bbcaa0", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bd6400", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2be03d0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2bf2160", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c06520", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c28d00", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c32f30", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c49e40", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x2c61b90", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->declare(&fHslider0, "unit", "dB"); @@ -1032,7 +1352,7 @@ class mydsp : public dsp { FAUSTFLOAT* output8 = outputs[8]; double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (fSlow0 + (0.999 * fRec0[1])); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); double fTemp0 = double(input0[i]); double fTemp1 = double(input1[i]); double fTemp2 = double(input2[i]); @@ -1088,46 +1408,54 @@ class mydsp : public dsp { double fTemp52 = double(input47[i]); double fTemp53 = double(input48[i]); double fTemp54 = double(input49[i]); - output0[i] = FAUSTFLOAT((fRec0[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * fTemp28)) + (0.02017333553791887 * ((((((((((((((((((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53) + fTemp54))))); - double fTemp55 = (fTemp38 + fTemp46); - double fTemp56 = (fTemp19 - fTemp21); - double fTemp57 = (fTemp7 - fTemp9); - double fTemp58 = (fTemp8 + fTemp17); - double fTemp59 = (fTemp20 + fTemp25); - double fTemp60 = (fTemp35 + fTemp43); - double fTemp61 = (fTemp31 - fTemp32); - double fTemp62 = (fTemp22 + fTemp27); - double fTemp63 = (fTemp39 + fTemp47); - double fTemp64 = (fTemp42 + fTemp50); - double fTemp65 = (fTemp33 + fTemp54); - output1[i] = FAUSTFLOAT((fRec0[0] * (((2.6935244158092871e-18 * fTemp3) + (((0.031605542669238242 * (((((((fTemp36 + fTemp37) - fTemp40) - fTemp41) + fTemp44) + fTemp45) - fTemp48) - fTemp49)) + ((0.010535180889746096 * fTemp55) + (((0.021093749999999994 * ((fTemp56 + fTemp24) - fTemp26)) + (((0.027648561470568506 * ((((fTemp57 + fTemp12) - fTemp14) + fTemp16) - fTemp18)) + (((0.021994295969128601 * (fTemp2 - fTemp4)) + (0.027648561470568499 * (fTemp11 - fTemp13))) + (3.3859722305960555e-18 * fTemp58))) + (0.021093749999999998 * fTemp59))) + (0.010535180889746094 * fTemp60)))) + (0.010535180889746065 * (((fTemp61 + fTemp51) + fTemp52) - fTemp53)))) - ((((0.021093750000000001 * fTemp62) + (0.010535180889746089 * fTemp63)) + (0.010535180889746113 * fTemp64)) + (0.010535180889746067 * fTemp65))))); - double fTemp66 = (fTemp0 - fTemp5); - double fTemp67 = (((((((fTemp35 + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42); - output2[i] = FAUSTFLOAT((fRec0[0] * (((((0.021994295969128601 * fTemp66) + (0.027648561470568499 * ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18))) + (0.021093750000000001 * ((((fTemp23 - fTemp24) - fTemp25) - fTemp26) - fTemp27))) + (0.010535180889746075 * ((((((((fTemp67 - fTemp43) - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49) - fTemp50))) + (0.031605542669238249 * ((((fTemp34 - fTemp51) - fTemp52) - fTemp53) - fTemp54))))); - double fTemp68 = (fTemp29 - fTemp30); - double fTemp69 = (fTemp41 + fTemp49); - double fTemp70 = (fTemp35 - fTemp38); - double fTemp71 = (fTemp36 + fTemp44); - double fTemp72 = (fTemp19 + fTemp24); - double fTemp73 = (fTemp6 - fTemp8); - double fTemp74 = (fTemp7 + fTemp16); - double fTemp75 = (fTemp9 + fTemp18); - double fTemp76 = (fTemp21 + fTemp26); - double fTemp77 = (fTemp37 + fTemp45); - double fTemp78 = (fTemp40 + fTemp48); - double fTemp79 = (fTemp32 + fTemp53); - output3[i] = FAUSTFLOAT((fRec0[0] * (((0.027648561470568496 * fTemp14) + ((0.010535180889746065 * ((fTemp68 + fTemp51) - fTemp52)) + ((0.010535180889746074 * fTemp69) + ((0.031605542669238242 * ((((fTemp70 - fTemp39) + fTemp43) - fTemp46) - fTemp47)) + ((0.010535180889746081 * fTemp71) + ((0.021093749999999998 * fTemp72) + ((0.027648561470568506 * ((((fTemp73 + fTemp11) - fTemp13) + fTemp15) - fTemp17)) + ((1.6929861152980278e-18 * fTemp74) + ((1.3467622079046435e-18 * ((fTemp0 + fTemp2) + fTemp5)) + ((0.021994295969128601 * (fTemp1 - fTemp3)) + (((0.021093749999999991 * fTemp62) + (0.031605542669238228 * fTemp64)) + (0.010535180889746063 * fTemp65)))))))))))) - ((0.027648561470568499 * fTemp12) + ((4.0402866237139308e-18 * fTemp4) + ((((((5.0789583458940831e-18 * fTemp75) + (0.021093749999999994 * fTemp59)) + (0.021093750000000001 * fTemp76)) + (0.010535180889746079 * fTemp77)) + (0.010535180889746086 * fTemp78)) + (0.010535180889746067 * fTemp79))))))); - output4[i] = FAUSTFLOAT((fRec0[0] * (((9.0343555392074636e-18 * fTemp4) + ((3.0114518464024883e-18 * fTemp2) + (((0.027231914153020897 * (((((((fTemp19 - fTemp20) + fTemp21) - fTemp22) + fTemp24) - fTemp25) + fTemp26) - fTemp27)) + ((0.043716214137085485 * (((fTemp11 - fTemp12) + fTemp13) - fTemp14)) + (((0.021308452520676556 * fTemp71) + ((8.0305382570733035e-18 * fTemp75) + ((2.6768460856911014e-18 * fTemp74) + ((0.021308452520676577 * fTemp60) + (0.02130845252067657 * fTemp63))))) + (0.021308452520676563 * fTemp78)))) + (0.0071028175068921654 * ((((((fTemp68 + fTemp32) - fTemp33) + fTemp51) - fTemp52) + fTemp53) - fTemp54))))) - ((6.0229036928049765e-18 * fTemp3) + ((0.021308452520676542 * fTemp69) + ((0.021308452520676546 * fTemp77) + (((5.3536921713822029e-18 * fTemp58) + (0.021308452520676584 * fTemp55)) + (0.021308452520676618 * fTemp64)))))))); - double fTemp80 = ((fTemp56 - fTemp24) + fTemp26); - double fTemp81 = (fTemp39 - fTemp47); - double fTemp82 = (fTemp42 - fTemp50); - double fTemp83 = (fTemp33 - fTemp54); - output5[i] = FAUSTFLOAT((fRec0[0] * ((((0.021308452520676553 * (((fTemp37 - fTemp41) - fTemp45) + fTemp49)) + ((0.021308452520676546 * (((fTemp36 - fTemp40) - fTemp44) + fTemp48)) + ((0.0071028175068921931 * (fTemp38 - fTemp46)) + (((0.027231914153020911 * (((fTemp20 - fTemp22) - fTemp25) + fTemp27)) + (((5.3536921713822013e-18 * (fTemp8 - fTemp17)) + (0.043716214137085485 * ((fTemp57 - fTemp16) + fTemp18))) + (0.027231914153020904 * fTemp80))) + (0.0071028175068921914 * (fTemp35 - fTemp43)))))) + (0.021308452520676528 * (((fTemp61 - fTemp51) - fTemp52) + fTemp53))) - (((0.0071028175068921871 * fTemp81) + (0.0071028175068922053 * fTemp82)) + (0.021308452520676532 * fTemp83))))); - double fTemp84 = (fTemp0 + fTemp5); - output6[i] = FAUSTFLOAT((fRec0[0] * ((((0.012619783999998805 * ((((fTemp10 + fTemp15) + fTemp16) + fTemp17) + fTemp18)) + ((0.028394513999997331 * fTemp84) + (5.236595479505967e-18 * fTemp28))) + (0.032806508796871948 * ((((fTemp34 + fTemp51) + fTemp52) + fTemp53) + fTemp54))) - (((0.014197256999998666 * (((fTemp1 + fTemp2) + fTemp3) + fTemp4)) + (0.025239567999997631 * (((fTemp11 + fTemp12) + fTemp13) + fTemp14))) + (0.01640325439843596 * ((((((((fTemp67 + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50)))))); - output7[i] = FAUSTFLOAT((fRec0[0] * (((0.021308452520676528 * ((fTemp68 - fTemp51) + fTemp52)) + ((0.0071028175068921775 * (fTemp41 - fTemp49)) + ((0.021308452520676542 * ((fTemp70 - fTemp43) + fTemp46)) + ((0.0071028175068921827 * (fTemp36 - fTemp44)) + ((0.027231914153020901 * (fTemp22 - fTemp27)) + ((0.043716214137085485 * ((fTemp73 - fTemp15) + fTemp17)) + ((2.6768460856911007e-18 * (fTemp7 - fTemp16)) + ((((3.0114518464024883e-18 * fTemp66) + (0.027231914153020911 * fTemp80)) + (0.021308452520676539 * fTemp82)) + (0.021308452520676525 * fTemp83))))))))) - ((((0.007102817506892181 * (fTemp37 - fTemp45)) + ((0.027231914153020904 * (fTemp20 - fTemp25)) + ((8.0305382570733005e-18 * (fTemp9 - fTemp18)) + (0.021308452520676546 * fTemp81)))) + (0.0071028175068921853 * (fTemp40 - fTemp48))) + (0.021308452520676532 * (fTemp32 - fTemp53)))))); - output8[i] = FAUSTFLOAT((fRec0[0] * (((1.3384230428455503e-17 * fTemp13) + ((2.6768460856911007e-18 * fTemp11) + ((0.021858107068542749 * (((((((fTemp6 - fTemp7) + fTemp8) - fTemp9) + fTemp15) - fTemp16) + fTemp17) - fTemp18)) + ((0.024590370452110585 * (((fTemp1 - fTemp2) + fTemp3) - fTemp4)) + ((9.2199121612079837e-35 * fTemp84) + (((8.3373691255381378e-18 * fTemp76) + ((1.6674738251076273e-18 * fTemp72) + ((((0.028411270027568724 * fTemp60) + (0.028411270027568717 * fTemp55)) + (0.028411270027568731 * fTemp63)) + (0.028411270027568696 * fTemp64)))) + (2.1746106811858183e-18 * fTemp79))))))) - ((1.8737922599837705e-17 * fTemp14) + ((8.0305382570733005e-18 * fTemp12) + ((1.3047664087114909e-18 * (fTemp30 + fTemp52)) + ((1.1422201709353029e-18 * (fTemp29 + fTemp51)) + ((0.028411270027568748 * fTemp69) + ((0.028411270027568734 * fTemp78) + ((0.028411270027568745 * fTemp77) + ((0.028411270027568741 * fTemp71) + (((5.0024214753228816e-18 * fTemp59) + (1.167231677575339e-17 * fTemp62)) + (3.0444549536601452e-18 * fTemp65))))))))))))); + double fTemp55 = (fRec1[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * fTemp28)) + (0.02017333553791887 * ((((((((((((((((((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53) + fTemp54)))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (fRec1[0] * (((((fConst4 * fTemp4) + (0.022574955908289243 * ((((fConst5 * fTemp9) + (fConst6 * fTemp13)) + (fConst7 * fTemp14)) + (fConst5 * fTemp18)))) + (0.021093750000000001 * ((((fConst8 * fTemp21) + (fConst9 * fTemp22)) + (fConst8 * fTemp26)) + (fConst9 * fTemp27)))) + (fConst3 * (((((((((((((((((((((0.02026373487753309 * fTemp2) + (0.025473109945013343 * fTemp7)) + (0.025473109945013336 * fTemp11)) + (0.025473109945013343 * fTemp12)) + (0.025473109945013343 * fTemp16)) + (0.019434045907762619 * fTemp19)) + (0.019434045907762623 * fTemp20)) + (0.019434045907762619 * fTemp24)) + (0.019434045907762623 * fTemp25)) + (0.0097062489627452973 * fTemp29)) + (0.0097062489627452973 * fTemp30)) + (0.0097062489627453199 * fTemp35)) + (0.029118746888235923 * fTemp36)) + (0.029118746888235927 * fTemp37)) + (0.0097062489627453216 * fTemp38)) + (0.0097062489627453199 * fTemp43)) + (0.029118746888235923 * fTemp44)) + (0.029118746888235927 * fTemp45)) + (0.0097062489627453216 * fTemp46)) + (0.0097062489627452973 * fTemp51)) + (0.0097062489627452973 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst10 * fTemp32) + (fConst11 * fTemp33)) + (fConst12 * fTemp39)) + (fConst13 * fTemp40)) + (fConst14 * fTemp41)) + (fConst15 * fTemp42)) + (fConst12 * fTemp47)) + (fConst13 * fTemp48)) + (fConst14 * fTemp49)) + (fConst15 * fTemp50)) + (fConst10 * fTemp53)) + (fConst11 * fTemp54))))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (((((((fTemp35 + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42); + double fTemp58 = (fRec1[0] * (((((0.021994295969128601 * (fTemp0 - fTemp5)) + (0.027648561470568499 * ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18))) + (0.021093750000000001 * ((((fTemp23 - fTemp24) - fTemp25) - fTemp26) - fTemp27))) + (0.010535180889746075 * ((((((((fTemp57 - fTemp43) - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49) - fTemp50))) + (0.031605542669238249 * ((((fTemp34 - fTemp51) - fTemp52) - fTemp53) - fTemp54)))); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + output2[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = (fRec1[0] * ((fConst3 * (((((((((((((((((((((0.02026373487753309 * fTemp1) + (0.025473109945013343 * fTemp6)) + (0.025473109945013343 * fTemp11)) + (0.025473109945013332 * fTemp14)) + (0.025473109945013343 * fTemp15)) + (0.019434045907762623 * fTemp19)) + (0.019434045907762616 * fTemp22)) + (0.019434045907762623 * fTemp24)) + (0.019434045907762616 * fTemp27)) + (0.0097062489627452956 * fTemp29)) + (0.0097062489627452939 * fTemp33)) + (0.029118746888235916 * fTemp35)) + (0.0097062489627453077 * fTemp36)) + (0.0097062489627453008 * fTemp41)) + (0.029118746888235913 * fTemp42)) + (0.029118746888235916 * fTemp43)) + (0.0097062489627453077 * fTemp44)) + (0.0097062489627453008 * fTemp49)) + (0.029118746888235913 * fTemp50)) + (0.0097062489627452956 * fTemp51)) + (0.0097062489627452939 * fTemp54))) + ((((fConst4 * fTemp3) + (0.022574955908289243 * ((((fConst5 * fTemp8) + (fConst6 * fTemp12)) + (fConst7 * fTemp13)) + (fConst5 * fTemp17)))) + (0.021093750000000001 * ((((fConst8 * fTemp20) + (fConst9 * fTemp21)) + (fConst8 * fTemp25)) + (fConst9 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst10 * fTemp30) + (fConst11 * fTemp32)) + (fConst16 * fTemp37)) + (fConst17 * fTemp38)) + (fConst13 * fTemp39)) + (fConst18 * fTemp40)) + (fConst16 * fTemp45)) + (fConst17 * fTemp46)) + (fConst13 * fTemp47)) + (fConst18 * fTemp48)) + (fConst10 * fTemp52)) + (fConst11 * fTemp53)))))); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + output3[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst20 * (fTemp30 + fTemp33)) + (fConst21 * fTemp37)) + (fConst22 * fTemp38)) + (fConst23 * fTemp41)) + (fConst24 * fTemp42)) + (fConst21 * fTemp45)) + (fConst22 * fTemp46)) + (fConst23 * fTemp49)) + (fConst24 * fTemp50)) + (fConst20 * fTemp52)) + (fConst20 * fTemp54))) + (((fConst26 * (fTemp12 + fTemp14)) + (fConst27 * (((fTemp20 + fTemp22) + fTemp25) + fTemp27))) + (fConst19 * ((((((((((((((((((0.072048835120117657 * fTemp11) + (0.072048835120117671 * fTemp13)) + (0.044881006545161167 * fTemp19)) + (0.044881006545161174 * fTemp21)) + (0.044881006545161167 * fTemp24)) + (0.044881006545161174 * fTemp26)) + (0.011706176702255417 * fTemp29)) + (0.011706176702255421 * fTemp32)) + (0.035118530106766375 * fTemp35)) + (0.035118530106766334 * fTemp36)) + (0.035118530106766362 * fTemp39)) + (0.035118530106766348 * fTemp40)) + (0.035118530106766375 * fTemp43)) + (0.035118530106766334 * fTemp44)) + (0.035118530106766362 * fTemp47)) + (0.035118530106766348 * fTemp48)) + (0.011706176702255417 * fTemp51)) + (0.011706176702255421 * fTemp53)))))); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + output4[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = (fConst41 * fTemp19); + double fTemp62 = (fRec1[0] * ((((0.022574955908289243 * ((fConst30 * fTemp9) + (fConst32 * fTemp18))) + (0.021093750000000001 * ((((fConst33 * fTemp21) + (fConst34 * fTemp22)) + (fConst37 * fTemp26)) + (fConst38 * fTemp27)))) + (fConst28 * ((((((((((((((((((fConst39 * fTemp7) + (fConst40 * fTemp16)) + fTemp61) + (fConst41 * fTemp20)) + (fConst42 * fTemp24)) + (fConst43 * fTemp25)) + (fConst44 * fTemp29)) + (fConst44 * fTemp30)) + (fConst45 * fTemp35)) + (fConst46 * fTemp36)) + (fConst47 * fTemp37)) + (fConst48 * fTemp38)) + (fConst50 * fTemp43)) + (fConst51 * fTemp44)) + (fConst52 * fTemp45)) + (fConst53 * fTemp46)) + (fConst55 * fTemp51)) + (fConst55 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst56 * fTemp32) + (fConst57 * fTemp33)) + (fConst58 * fTemp39)) + (fConst59 * fTemp40)) + (fConst60 * fTemp41)) + (fConst61 * fTemp42)) + (fConst63 * fTemp47)) + (fConst64 * fTemp48)) + (fConst65 * fTemp49)) + (fConst66 * fTemp50)) + (fConst68 * fTemp53)) + (fConst69 * fTemp54))))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph5 = FAUSTFLOAT(fRec6[0]); + output5[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = (fRec1[0] * ((((0.01261978399999881 * ((((fTemp10 + fTemp15) + fTemp16) + fTemp17) + fTemp18)) + ((0.028394513999997331 * (fTemp0 + fTemp5)) + (5.236595479505967e-18 * fTemp28))) + (0.032806508796871948 * ((((fTemp34 + fTemp51) + fTemp52) + fTemp53) + fTemp54))) - (((0.014197256999998666 * (((fTemp1 + fTemp2) + fTemp3) + fTemp4)) + (0.025239567999997631 * (((fTemp11 + fTemp12) + fTemp13) + fTemp14))) + (0.01640325439843596 * ((((((((fTemp57 + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50))))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + output6[i] = FAUSTFLOAT(fTemp63); + double fTemp64 = (fRec1[0] * ((fConst28 * ((((((((((((((((fTemp61 + ((fConst39 * fTemp6) + (fConst40 * fTemp15))) + (fConst70 * fTemp22)) + (fConst43 * fTemp24)) + (fConst71 * fTemp27)) + (fConst72 * fTemp29)) + (fConst73 * fTemp33)) + (fConst74 * fTemp35)) + (fConst75 * fTemp36)) + (fConst76 * fTemp41)) + (fConst77 * fTemp42)) + (fConst78 * fTemp43)) + (fConst79 * fTemp44)) + (fConst80 * fTemp49)) + (fConst81 * fTemp50)) + (fConst82 * fTemp51)) + (fConst83 * fTemp54))) + (((0.022574955908289243 * ((fConst30 * fTemp8) + (fConst32 * fTemp17))) + (0.021093750000000001 * ((((fConst33 * fTemp20) + (fConst34 * fTemp21)) + (fConst37 * fTemp25)) + (fConst38 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst56 * fTemp30) + (fConst57 * fTemp32)) + (fConst84 * fTemp37)) + (fConst85 * fTemp38)) + (fConst59 * fTemp39)) + (fConst86 * fTemp40)) + (fConst87 * fTemp45)) + (fConst88 * fTemp46)) + (fConst64 * fTemp47)) + (fConst89 * fTemp48)) + (fConst68 * fTemp52)) + (fConst69 * fTemp53)))))); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph7 = FAUSTFLOAT(fRec8[0]); + output7[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst90 * fTemp31) + (fConst91 * fTemp33)) + (fConst92 * fTemp36)) + (fConst93 * fTemp37)) + (fConst94 * fTemp40)) + (fConst95 * fTemp41)) + (fConst92 * fTemp44)) + (fConst93 * fTemp45)) + (fConst94 * fTemp48)) + (fConst95 * fTemp49)) + (fConst90 * fTemp51)) + (fConst90 * fTemp52)) + (fConst91 * fTemp54))) + ((((fConst96 * (fTemp2 + fTemp4)) + (0.022574955908289243 * (((((fConst97 * (fTemp7 + fTemp9)) + (fConst98 * fTemp12)) + (fConst99 * fTemp14)) + (fConst97 * fTemp16)) + (fConst97 * fTemp18)))) + (0.021093750000000001 * ((((fConst100 * fTemp20) + (fConst101 * fTemp22)) + (fConst100 * fTemp25)) + (fConst101 * fTemp27)))) + (fConst19 * (((((((((((((((((((((0.04052746975506618 * (fTemp1 + fTemp3)) + (0.036024417560058836 * fTemp6)) + (0.036024417560058836 * fTemp8)) + (1.5998055129555246e-17 * fTemp11)) + (3.1996110259110492e-17 * fTemp13)) + (0.036024417560058836 * fTemp15)) + (0.036024417560058836 * fTemp17)) + (9.9655853669580557e-18 * fTemp19)) + (1.9931170733916111e-17 * fTemp21)) + (9.9655853669580557e-18 * fTemp24)) + (1.9931170733916111e-17 * fTemp26)) + (5.19858676206982e-18 * fTemp32)) + (0.046824706809021746 * fTemp35)) + (0.046824706809021746 * fTemp38)) + (0.046824706809021774 * fTemp39)) + (0.046824706809021698 * fTemp42)) + (0.046824706809021746 * fTemp43)) + (0.046824706809021746 * fTemp46)) + (0.046824706809021774 * fTemp47)) + (0.046824706809021698 * fTemp50)) + (5.19858676206982e-18 * fTemp53)))))); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + output8[i] = FAUSTFLOAT(fTemp65); + fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; } @@ -1136,7 +1464,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1368,7 +1695,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1431,7 +1758,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1460,11 +1787,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncLebedev503.cpp b/source/HOAUGens/HOAEncLebedev503.cpp index bb01d7a8ab..27ee77406a 100644 --- a/source/HOAUGens/HOAEncLebedev503.cpp +++ b/source/HOAUGens/HOAEncLebedev503.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncLebedev503" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,22 +613,329 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include +#include -double pow(double dummy0, double dummy1); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { private: + int fSamplingFreq; + double fConst0; FAUSTFLOAT fHslider0; + double fRec1[2]; double fRec0[2]; - int fSamplingFreq; + FAUSTFLOAT fVbargraph0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fConst17; + double fConst18; + double fConst19; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fRec6[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fConst74; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fRec8[2]; + FAUSTFLOAT fVbargraph7; + double fConst94; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fConst106; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fRec10[2]; + FAUSTFLOAT fVbargraph9; + double fConst119; + double fConst120; + double fConst121; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fConst136; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; + double fConst151; + double fConst152; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fConst157; + double fConst158; + double fConst159; + double fConst160; + double fConst161; + double fConst162; + double fConst163; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; + double fConst176; + double fConst177; + double fConst178; + double fConst179; + double fConst180; + double fConst181; + double fConst182; + double fConst183; + double fConst184; + double fConst185; + double fConst186; + double fConst187; + double fConst188; + double fConst189; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + double fConst196; + double fConst197; + double fConst198; + double fConst199; + double fConst200; + double fConst201; + double fConst202; + double fConst203; + double fConst204; + double fConst205; + double fRec12[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fConst206; + double fConst207; + double fConst208; + double fConst209; + double fConst210; + double fConst211; + double fConst212; + double fConst213; + double fConst214; + double fConst215; + double fConst216; + double fConst217; + double fConst218; + double fConst219; + double fConst220; + double fConst221; + double fConst222; + double fConst223; + double fConst224; + double fConst225; + double fConst226; + double fRec14[2]; + FAUSTFLOAT fVbargraph13; + double fConst227; + double fConst228; + double fConst229; + double fConst230; + double fConst231; + double fConst232; + double fConst233; + double fConst234; + double fConst235; + double fConst236; + double fConst237; + double fConst238; + double fConst239; + double fConst240; + double fConst241; + double fConst242; + double fConst243; + double fConst244; + double fConst245; + double fConst246; + double fConst247; + double fConst248; + double fConst249; + double fConst250; + double fConst251; + double fConst252; + double fConst253; + double fConst254; + double fConst255; + double fConst256; + double fConst257; + double fConst258; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fConst259; + double fConst260; + double fConst261; + double fConst262; + double fConst263; + double fConst264; + double fConst265; + double fConst266; + double fConst267; + double fConst268; + double fRec16[2]; + FAUSTFLOAT fVbargraph15; public: @@ -623,31 +944,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncLebedev503"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -953,6 +1274,275 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.0)); + fConst2 = double(tgamma(3.0)); + fConst3 = double(tgamma(1.5)); + fConst4 = (sqrt((3.0 * (fConst1 / fConst2))) * fConst3); + fConst5 = (0.012698412698412698 * (0.0 - (1.5957691216057308 * fConst4))); + fConst6 = (0.0 - (1.1283791670955128 * fConst4)); + fConst7 = (0.0 - (1.1283791670955126 * fConst4)); + fConst8 = (0.0 - (1.128379167095513 * fConst4)); + fConst9 = (0.0 - (0.92131773192356115 * fConst4)); + fConst10 = (0.0 - (0.92131773192356148 * fConst4)); + fConst11 = (0.0 - (0.48114249349102017 * fConst4)); + fConst12 = (0.0 - (0.48114249349102034 * fConst4)); + fConst13 = (0.0 - (0.48114249349102112 * fConst4)); + fConst14 = (0.0 - (1.4434274804730622 * fConst4)); + fConst15 = (0.0 - (1.4434274804730625 * fConst4)); + fConst16 = (0.0 - (0.48114249349102228 * fConst4)); + fConst17 = (0.0 - (0.48114249349102062 * fConst4)); + fConst18 = (0.0 - (1.443427480473062 * fConst4)); + fConst19 = (0.0 - (0.48114249349102095 * fConst4)); + fConst20 = double(tgamma(5.0)); + fConst21 = double(tgamma(2.5)); + fConst22 = (sqrt((5.0 * (fConst1 / fConst20))) * fConst21); + fConst23 = (0.0 - (0.58027968058390089 * fConst22)); + fConst24 = (0.0 - (1.7408390417517061 * fConst22)); + fConst25 = (0.0 - (1.7408390417517088 * fConst22)); + fConst26 = (0.0 - (1.7408390417517057 * fConst22)); + fConst27 = (0.0 - (1.7408390417517114 * fConst22)); + fConst28 = (0.0 - (3.1915382432114616 * fConst22)); + fConst29 = (0.022574955908289243 * fConst28); + fConst30 = (0.021093750000000001 * (0.0 - (2.1276921621409737 * fConst22))); + fConst31 = double(tgamma(2.0)); + fConst32 = sqrt((5.0 * (fConst31 / double(tgamma(4.0))))); + fConst33 = (fConst32 * fConst3); + fConst34 = (0.0 - (2.3936536824085959 * fConst33)); + fConst35 = (0.0 - (1.6925687506432687 * fConst3)); + fConst36 = (0.0 - (1.4142135623730951 * (fConst32 * fConst35))); + fConst37 = (0.0 - (1.5957691216057308 * fConst33)); + fConst38 = (0.0 - (1.5957691216057313 * fConst33)); + fConst39 = (0.0 - (1.5957691216057308 * fConst3)); + fConst40 = (fConst32 * fConst39); + fConst41 = (0.0 - fConst40); + fConst42 = (0.0 - (1.0000000000000002 * fConst40)); + fConst43 = (0.054036626340088233 * fConst3); + fConst44 = (0.031925808815477283 * fConst35); + fConst45 = (0.033660754908870889 * fConst3); + fConst46 = (0.021093750000000001 * fConst39); + fConst47 = (0.021093750000000005 * fConst39); + fConst48 = (0.026338897580074728 * fConst3); + fConst49 = (0.0087796325266915921 * fConst3); + fConst50 = (0.026338897580074742 * fConst3); + fConst51 = (0.026338897580074745 * fConst3); + fConst52 = (0.0087796325266915939 * fConst3); + fConst53 = (0.0 - (0.97315860881060223 * fConst3)); + fConst54 = (0.0090217899191397874 * fConst53); + fConst55 = (0.027065369757419327 * fConst53); + fConst56 = (0.027065369757419331 * fConst53); + fConst57 = (0.0090217899191397891 * fConst53); + fConst58 = (0.0 - (1.3056292813137786 * fConst3)); + fConst59 = (0.020173335537918873 * fConst58); + fConst60 = (0.0 - (1.3056292813137786 * fConst33)); + fConst61 = (0.0 - (1.3056292813137791 * fConst33)); + fConst62 = (0.0 - (0.43520976043792686 * fConst33)); + fConst63 = (0.0 - (1.3056292813137795 * fConst33)); + fConst64 = (0.0 - (1.3056292813137798 * fConst33)); + fConst65 = (0.0 - (0.43520976043792792 * fConst33)); + fConst66 = (fConst32 * fConst53); + fConst67 = (0.0 - (0.44721359549995832 * fConst66)); + fConst68 = (0.0 - (1.3416407864998738 * fConst66)); + fConst69 = (0.0 - (1.3416407864998741 * fConst66)); + fConst70 = (0.0 - (0.44721359549995937 * fConst66)); + fConst71 = (fConst32 * fConst58); + fConst72 = (0.0 - fConst71); + fConst73 = (0.0 - (1.0000000000000002 * fConst71)); + fConst74 = (0.033660754908870882 * fConst3); + fConst75 = (0.021093749999999998 * fConst39); + fConst76 = (0.026338897580074724 * fConst3); + fConst77 = (0.026338897580074721 * fConst3); + fConst78 = (0.026338897580074738 * fConst3); + fConst79 = (0.0087796325266915817 * fConst3); + fConst80 = (0.0087796325266915748 * fConst3); + fConst81 = (0.026338897580074731 * fConst3); + fConst82 = (0.027065369757419324 * fConst53); + fConst83 = (0.009021789919139777 * fConst53); + fConst84 = (0.00902178991913977 * fConst53); + fConst85 = (0.027065369757419321 * fConst53); + fConst86 = (0.02017333553791887 * fConst58); + fConst87 = (0.020173335537918866 * fConst58); + fConst88 = (0.0 - (0.43520976043792636 * fConst33)); + fConst89 = (0.0 - (1.3056292813137793 * fConst33)); + fConst90 = (0.0 - (0.4352097604379267 * fConst33)); + fConst91 = (0.0 - (0.44721359549995782 * fConst66)); + fConst92 = (0.0 - (1.3416407864998736 * fConst66)); + fConst93 = (0.0 - (0.44721359549995815 * fConst66)); + fConst94 = (0.0 - (2.5769594484255127e-16 * fConst22)); + fConst95 = (0.0 - (1.2884797242127563e-16 * fConst22)); + fConst96 = (0.0 - (2.3211187223356089 * fConst22)); + fConst97 = (0.0 - (2.3211187223356093 * fConst22)); + fConst98 = (0.0 - (2.3211187223356085 * fConst22)); + fConst99 = (0.0 - (2.3211187223356098 * fConst22)); + fConst100 = (0.012698412698412698 * fConst28); + fConst101 = (0.0 - (1.595769121605731 * fConst22)); + fConst102 = (0.0 - (7.0866384831701748e-16 * fConst22)); + fConst103 = (0.0 - (1.417327696634035e-15 * fConst22)); + fConst104 = (0.0 - (4.7244256554467816e-16 * fConst22)); + fConst105 = (0.0 - (9.4488513108935631e-16 * fConst22)); + fConst106 = (double(tgamma(3.5)) * sqrt((7.0 * (fConst1 / double(tgamma(7.0)))))); + fConst107 = (0.012698412698412698 * (0.0 - (6.3830764864229232 * fConst106))); + fConst108 = (0.0 - (2.256758334191026 * fConst106)); + fConst109 = (0.0 - (4.5135166683820547 * fConst106)); + fConst110 = (0.0 - (4.5135166683820476 * fConst106)); + fConst111 = (0.0 - (2.456847285129498 * fConst106)); + fConst112 = (0.0 - (2.456847285129494 * fConst106)); + fConst113 = (0.0 - (0.34992181344801421 * fConst106)); + fConst114 = (0.0 - (0.34992181344801365 * fConst106)); + fConst115 = (0.0 - (3.1492963210321352 * fConst106)); + fConst116 = (0.0 - (3.1492963210321379 * fConst106)); + fConst117 = (0.0 - (4.5489835748241987 * fConst106)); + fConst118 = (0.0 - (4.5489835748242058 * fConst106)); + fConst119 = sqrt((7.0 * (fConst31 / double(tgamma(6.0))))); + fConst120 = (fConst21 * fConst119); + fConst121 = (0.0 - (2.624413600860108 * fConst120)); + fConst122 = (0.0 - (2.6244136008601116 * fConst120)); + fConst123 = (0.0 - (2.6244136008601155 * fConst120)); + fConst124 = (0.0 - (2.6244136008601107 * fConst120)); + fConst125 = (0.0 - (2.6244136008601191 * fConst120)); + fConst126 = (0.0 - (3.0929010896773175 * fConst21)); + fConst127 = (fConst119 * fConst126); + fConst128 = (0.0 - (0.84852813742385691 * fConst127)); + fConst129 = (0.0 - (0.84852813742385813 * fConst127)); + fConst130 = (0.0 - (0.84852813742385658 * fConst127)); + fConst131 = (0.0 - (0.84852813742385946 * fConst127)); + fConst132 = (0.0 - (1.8557406538063874 * fConst21)); + fConst133 = (fConst119 * fConst132); + fConst134 = (0.0 - (1.4142135623730951 * fConst133)); + fConst135 = (0.0 - (6.1421182128237417 * fConst120)); + fConst136 = (0.0 - (4.3431334391370653 * fConst21)); + fConst137 = (fConst119 * fConst136); + fConst138 = (0.0 - (1.4142135623730951 * fConst137)); + fConst139 = (0.029831067331307477 * fConst136); + fConst140 = (0.029831067331307481 * fConst136); + fConst141 = (0.052943176160428845 * fConst21); + fConst142 = (0.052943176160428852 * fConst21); + fConst143 = (0.052943176160428991 * fConst21); + fConst144 = (0.052943176160428929 * fConst21); + fConst145 = (0.052943176160428963 * fConst21); + fConst146 = (0.052943176160428942 * fConst21); + fConst147 = (0.017117642829616822 * fConst126); + fConst148 = (0.017117642829616801 * fConst126); + fConst149 = (0.017117642829616815 * fConst126); + fConst150 = (0.017117642829616808 * fConst126); + fConst151 = (0.028529404716028006 * fConst132); + fConst152 = (0.028529404716028009 * fConst132); + fConst153 = sqrt((7.0 * (fConst2 / fConst20))); + fConst154 = (0.0 - (3.3851375012865379 * fConst3)); + fConst155 = (fConst153 * fConst154); + fConst156 = (0.012698412698412698 * (0.0 - (0.70710678118654757 * fConst155))); + fConst157 = (fConst3 * fConst153); + fConst158 = (0.0 - (2.5388531259649025 * fConst157)); + fConst159 = (0.0 - (0.5 * fConst155)); + fConst160 = (0.0 - (0.50000000000000011 * fConst155)); + fConst161 = (0.0 - ((3.5355339059327373 * fConst35) + (2.3936536824085963 * fConst3))); + fConst162 = (0.0 - (0.70710678118654757 * (fConst153 * fConst161))); + fConst163 = (0.0 - (0.92131773192356159 * fConst157)); + fConst164 = (0.0 - (0.92131773192356192 * fConst157)); + fConst165 = (0.0 - ((2.8867513459481291 * fConst39) + (2.7639531957706835 * fConst3))); + fConst166 = (fConst153 * fConst165); + fConst167 = (0.0 - (0.5 * fConst166)); + fConst168 = (0.0 - (0.50000000000000011 * fConst166)); + fConst169 = (0.057314497376279992 * fConst3); + fConst170 = (0.0089791337293529845 * fConst154); + fConst171 = (0.011287477954144622 * fConst154); + fConst172 = (0.011287477954144623 * fConst154); + fConst173 = (0.015962904407738641 * fConst161); + fConst174 = (0.019434045907762629 * fConst3); + fConst175 = (0.019434045907762633 * fConst3); + fConst176 = (0.010546875000000001 * fConst165); + fConst177 = (0.010546875000000002 * fConst165); + fConst178 = (0.045001699736364593 * fConst3); + fConst179 = (0.0 - (1.7605101637794649 * fConst3)); + fConst180 = (0.0045108949595698937 * fConst179); + fConst181 = (0.013532684878709664 * fConst179); + fConst182 = (0.013532684878709665 * fConst179); + fConst183 = (0.0045108949595698946 * fConst179); + fConst184 = (0.0 - ((1.5075567228888176 * fConst53) + (3.2276019669290172 * fConst3))); + fConst185 = (0.0045108949595698937 * fConst184); + fConst186 = (0.013532684878709664 * fConst184); + fConst187 = (0.013532684878709665 * fConst184); + fConst188 = (0.0045108949595698946 * fConst184); + fConst189 = (0.0 - ((4.5226701686664557 * fConst58) + (1.4434274804730605 * fConst3))); + fConst190 = (0.010086667768959437 * fConst189); + fConst191 = (0.0 - (2.230751560731095 * fConst157)); + fConst192 = (0.0 - (2.2307515607310959 * fConst157)); + fConst193 = (fConst153 * fConst179); + fConst194 = (0.0 - (0.22360679774997916 * fConst193)); + fConst195 = (0.0 - (0.67082039324993692 * fConst193)); + fConst196 = (0.0 - (0.67082039324993703 * fConst193)); + fConst197 = (0.0 - (0.22360679774997969 * fConst193)); + fConst198 = (fConst153 * fConst184); + fConst199 = (0.0 - (0.22360679774997916 * fConst198)); + fConst200 = (0.0 - (0.67082039324993692 * fConst198)); + fConst201 = (0.0 - (0.67082039324993703 * fConst198)); + fConst202 = (0.0 - (0.22360679774997969 * fConst198)); + fConst203 = (fConst153 * fConst189); + fConst204 = (0.0 - (0.5 * fConst203)); + fConst205 = (0.0 - (0.50000000000000011 * fConst203)); + fConst206 = (0.01128747795414462 * fConst154); + fConst207 = (0.019434045907762626 * fConst3); + fConst208 = (0.010546874999999999 * fConst165); + fConst209 = (0.045001699736364587 * fConst3); + fConst210 = (0.045001699736364573 * fConst3); + fConst211 = (0.013532684878709662 * fConst179); + fConst212 = (0.0045108949595698885 * fConst179); + fConst213 = (0.004510894959569885 * fConst179); + fConst214 = (0.01353268487870966 * fConst179); + fConst215 = (0.013532684878709662 * fConst184); + fConst216 = (0.0045108949595698885 * fConst184); + fConst217 = (0.004510894959569885 * fConst184); + fConst218 = (0.01353268487870966 * fConst184); + fConst219 = (0.010086667768959435 * fConst189); + fConst220 = (0.010086667768959433 * fConst189); + fConst221 = (0.0 - (0.22360679774997891 * fConst193)); + fConst222 = (0.0 - (0.67082039324993681 * fConst193)); + fConst223 = (0.0 - (0.22360679774997907 * fConst193)); + fConst224 = (0.0 - (0.22360679774997891 * fConst198)); + fConst225 = (0.0 - (0.67082039324993681 * fConst198)); + fConst226 = (0.0 - (0.22360679774997907 * fConst198)); + fConst227 = (0.0 - (5.8273688116286149e-16 * fConst120)); + fConst228 = (0.0 - (1.165473762325723e-15 * fConst120)); + fConst229 = (0.0 - (3.4992181344801496 * fConst120)); + fConst230 = (0.0 - (3.4992181344801501 * fConst120)); + fConst231 = (0.0 - (3.4992181344801487 * fConst120)); + fConst232 = (0.0 - (3.4992181344801505 * fConst120)); + fConst233 = (0.0 - (1.1313708498984762 * fConst127)); + fConst234 = (0.0 - (1.1313708498984758 * fConst127)); + fConst235 = (0.0 - (1.1313708498984765 * fConst127)); + fConst236 = (0.0 - (3.1401849173675503e-16 * fConst133)); + fConst237 = (0.0 - (6.2803698347351007e-16 * fConst133)); + fConst238 = (0.0 - (5.6418958354775643 * fConst120)); + fConst239 = (0.0 - (3.9894228040143274 * fConst21)); + fConst240 = (0.0 - (1.4142135623730951 * (fConst119 * fConst239))); + fConst241 = (0.0 - (1.3638242119692871e-15 * fConst120)); + fConst242 = (0.0 - (2.7276484239385742e-15 * fConst120)); + fConst243 = (0.0 - (3.1401849173675503e-16 * fConst137)); + fConst244 = (0.0 - (6.2803698347351007e-16 * fConst137)); + fConst245 = (0.12736554972506672 * fConst21); + fConst246 = (0.031925808815477283 * fConst239); + fConst247 = (2.8768166971227152e-17 * fConst21); + fConst248 = (5.7536333942454304e-17 * fConst21); + fConst249 = (6.6238275600721768e-18 * fConst136); + fConst250 = (1.3247655120144354e-17 * fConst136); + fConst251 = (2.3511493268037518e-17 * fConst21); + fConst252 = (0.070590901547238516 * fConst21); + fConst253 = (0.070590901547238558 * fConst21); + fConst254 = (0.07059090154723846 * fConst21); + fConst255 = (0.022823523772822384 * fConst126); + fConst256 = (0.022823523772822398 * fConst126); + fConst257 = (0.022823523772822367 * fConst126); + fConst258 = (1.2669600797833527e-17 * fConst132); + fConst259 = (0.0 - (0.34992181344801404 * fConst106)); + fConst260 = (0.0 - (0.34992181344801415 * fConst106)); + fConst261 = (0.0 - (4.548983574824196 * fConst106)); + fConst262 = (0.0 - (3.1492963210321285 * fConst106)); + fConst263 = (0.0 - (3.1492963210321339 * fConst106)); + fConst264 = (0.0 - (4.5489835748241934 * fConst106)); + fConst265 = (0.0 - (4.5135166683820485 * fConst106)); + fConst266 = (0.0 - (4.5135166683820538 * fConst106)); + fConst267 = (0.0 - (2.4568472851294949 * fConst106)); + fConst268 = (0.0 - (2.4568472851294976 * fConst106)); } @@ -963,7 +1553,71 @@ class mydsp : public dsp { virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec0[l0] = 0.0; + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec12[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec14[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; } @@ -982,14 +1636,86 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3120680", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x313a2e0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3144d00", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3156a90", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x316b870", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x318e350", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3198580", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31af490", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31c73f0", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31e0790", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31fd850", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32269d0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x322d780", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3245c80", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3263d60", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3279ec0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->declare(&fHslider0, "unit", "dB"); @@ -1067,7 +1793,7 @@ class mydsp : public dsp { FAUSTFLOAT* output15 = outputs[15]; double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (fSlow0 + (0.999 * fRec0[1])); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); double fTemp0 = double(input0[i]); double fTemp1 = double(input1[i]); double fTemp2 = double(input2[i]); @@ -1123,89 +1849,97 @@ class mydsp : public dsp { double fTemp52 = double(input47[i]); double fTemp53 = double(input48[i]); double fTemp54 = double(input49[i]); - output0[i] = FAUSTFLOAT((fRec0[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * fTemp28)) + (0.02017333553791887 * ((((((((((((((((((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53) + fTemp54))))); - double fTemp55 = (fTemp36 + fTemp37); - double fTemp56 = (fTemp38 + fTemp46); - double fTemp57 = (fTemp19 - fTemp21); - double fTemp58 = ((fTemp57 + fTemp24) - fTemp26); - double fTemp59 = (fTemp7 - fTemp9); - double fTemp60 = (fTemp2 - fTemp4); - double fTemp61 = (fTemp11 - fTemp13); - double fTemp62 = (fTemp8 + fTemp17); - double fTemp63 = (fTemp20 + fTemp25); - double fTemp64 = (fTemp35 + fTemp43); - double fTemp65 = (fTemp31 - fTemp32); - double fTemp66 = (fTemp22 + fTemp27); - double fTemp67 = (fTemp39 + fTemp47); - double fTemp68 = (fTemp42 + fTemp50); - double fTemp69 = (fTemp33 + fTemp54); - output1[i] = FAUSTFLOAT((fRec0[0] * (((2.6935244158092871e-18 * fTemp3) + (((0.031605542669238242 * ((((((fTemp55 - fTemp40) - fTemp41) + fTemp44) + fTemp45) - fTemp48) - fTemp49)) + ((0.010535180889746096 * fTemp56) + (((0.021093749999999994 * fTemp58) + (((0.027648561470568506 * ((((fTemp59 + fTemp12) - fTemp14) + fTemp16) - fTemp18)) + (((0.021994295969128601 * fTemp60) + (0.027648561470568499 * fTemp61)) + (3.3859722305960555e-18 * fTemp62))) + (0.021093749999999998 * fTemp63))) + (0.010535180889746094 * fTemp64)))) + (0.010535180889746065 * (((fTemp65 + fTemp51) + fTemp52) - fTemp53)))) - ((((0.021093750000000001 * fTemp66) + (0.010535180889746089 * fTemp67)) + (0.010535180889746113 * fTemp68)) + (0.010535180889746067 * fTemp69))))); - double fTemp70 = (fTemp0 - fTemp5); - double fTemp71 = ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18); - double fTemp72 = ((((fTemp23 - fTemp24) - fTemp25) - fTemp26) - fTemp27); - double fTemp73 = (((((((fTemp35 + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42); - double fTemp74 = ((((((((fTemp73 - fTemp43) - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49) - fTemp50); - double fTemp75 = ((((fTemp34 - fTemp51) - fTemp52) - fTemp53) - fTemp54); - output2[i] = FAUSTFLOAT((fRec0[0] * (((((0.021994295969128601 * fTemp70) + (0.027648561470568499 * fTemp71)) + (0.021093750000000001 * fTemp72)) + (0.010535180889746075 * fTemp74)) + (0.031605542669238249 * fTemp75)))); - double fTemp76 = (fTemp29 - fTemp30); - double fTemp77 = ((fTemp76 + fTemp51) - fTemp52); - double fTemp78 = (fTemp41 + fTemp49); - double fTemp79 = (fTemp35 - fTemp38); - double fTemp80 = ((((fTemp79 - fTemp39) + fTemp43) - fTemp46) - fTemp47); - double fTemp81 = (fTemp36 + fTemp44); - double fTemp82 = (fTemp19 + fTemp24); - double fTemp83 = (fTemp6 - fTemp8); - double fTemp84 = (fTemp7 + fTemp16); - double fTemp85 = (fTemp1 - fTemp3); - double fTemp86 = (fTemp9 + fTemp18); - double fTemp87 = (fTemp21 + fTemp26); - double fTemp88 = (fTemp37 + fTemp45); - double fTemp89 = (fTemp40 + fTemp48); - double fTemp90 = (fTemp32 + fTemp53); - output3[i] = FAUSTFLOAT((fRec0[0] * (((0.027648561470568496 * fTemp14) + ((0.010535180889746065 * fTemp77) + ((0.010535180889746074 * fTemp78) + ((0.031605542669238242 * fTemp80) + ((0.010535180889746081 * fTemp81) + ((0.021093749999999998 * fTemp82) + ((0.027648561470568506 * ((((fTemp83 + fTemp11) - fTemp13) + fTemp15) - fTemp17)) + ((1.6929861152980278e-18 * fTemp84) + ((1.3467622079046435e-18 * ((fTemp0 + fTemp2) + fTemp5)) + ((0.021994295969128601 * fTemp85) + (((0.021093749999999991 * fTemp66) + (0.031605542669238228 * fTemp68)) + (0.010535180889746063 * fTemp69)))))))))))) - ((0.027648561470568499 * fTemp12) + ((4.0402866237139308e-18 * fTemp4) + ((((((5.0789583458940831e-18 * fTemp86) + (0.021093749999999994 * fTemp63)) + (0.021093750000000001 * fTemp87)) + (0.010535180889746079 * fTemp88)) + (0.010535180889746086 * fTemp89)) + (0.010535180889746067 * fTemp90))))))); - double fTemp91 = (((fTemp19 - fTemp20) + fTemp21) - fTemp22); - double fTemp92 = ((fTemp76 + fTemp32) - fTemp33); - output4[i] = FAUSTFLOAT((fRec0[0] * (((9.0343555392074636e-18 * fTemp4) + ((3.0114518464024883e-18 * fTemp2) + (((0.027231914153020897 * ((((fTemp91 + fTemp24) - fTemp25) + fTemp26) - fTemp27)) + ((0.043716214137085485 * (((fTemp11 - fTemp12) + fTemp13) - fTemp14)) + (((0.021308452520676556 * fTemp81) + ((8.0305382570733035e-18 * fTemp86) + ((2.6768460856911014e-18 * fTemp84) + ((0.021308452520676577 * fTemp64) + (0.02130845252067657 * fTemp67))))) + (0.021308452520676563 * fTemp89)))) + (0.0071028175068921654 * ((((fTemp92 + fTemp51) - fTemp52) + fTemp53) - fTemp54))))) - ((6.0229036928049765e-18 * fTemp3) + ((0.021308452520676542 * fTemp78) + ((0.021308452520676546 * fTemp88) + (((5.3536921713822029e-18 * fTemp62) + (0.021308452520676584 * fTemp56)) + (0.021308452520676618 * fTemp68)))))))); - double fTemp93 = (fTemp37 - fTemp41); - double fTemp94 = (fTemp36 - fTemp40); - double fTemp95 = (fTemp38 - fTemp46); - double fTemp96 = (fTemp20 - fTemp22); - double fTemp97 = (fTemp8 - fTemp17); - double fTemp98 = ((fTemp57 - fTemp24) + fTemp26); - double fTemp99 = (fTemp35 - fTemp43); - double fTemp100 = (fTemp39 - fTemp47); - double fTemp101 = (fTemp42 - fTemp50); - double fTemp102 = (fTemp33 - fTemp54); - output5[i] = FAUSTFLOAT((fRec0[0] * ((((0.021308452520676553 * ((fTemp93 - fTemp45) + fTemp49)) + ((0.021308452520676546 * ((fTemp94 - fTemp44) + fTemp48)) + ((0.0071028175068921931 * fTemp95) + (((0.027231914153020911 * ((fTemp96 - fTemp25) + fTemp27)) + (((5.3536921713822013e-18 * fTemp97) + (0.043716214137085485 * ((fTemp59 - fTemp16) + fTemp18))) + (0.027231914153020904 * fTemp98))) + (0.0071028175068921914 * fTemp99))))) + (0.021308452520676528 * (((fTemp65 - fTemp51) - fTemp52) + fTemp53))) - (((0.0071028175068921871 * fTemp100) + (0.0071028175068922053 * fTemp101)) + (0.021308452520676532 * fTemp102))))); - double fTemp103 = (fTemp0 + fTemp5); - output6[i] = FAUSTFLOAT((fRec0[0] * ((((0.012619783999998805 * ((((fTemp10 + fTemp15) + fTemp16) + fTemp17) + fTemp18)) + ((0.028394513999997331 * fTemp103) + (5.236595479505967e-18 * fTemp28))) + (0.032806508796871948 * ((((fTemp34 + fTemp51) + fTemp52) + fTemp53) + fTemp54))) - (((0.014197256999998666 * (((fTemp1 + fTemp2) + fTemp3) + fTemp4)) + (0.025239567999997631 * (((fTemp11 + fTemp12) + fTemp13) + fTemp14))) + (0.01640325439843596 * ((((((((fTemp73 + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50)))))); - double fTemp104 = (fTemp41 - fTemp49); - double fTemp105 = ((fTemp79 - fTemp43) + fTemp46); - double fTemp106 = (fTemp36 - fTemp44); - double fTemp107 = (fTemp22 - fTemp27); - double fTemp108 = (fTemp7 - fTemp16); - double fTemp109 = (fTemp37 - fTemp45); - double fTemp110 = (fTemp20 - fTemp25); - double fTemp111 = (fTemp9 - fTemp18); - double fTemp112 = (fTemp40 - fTemp48); - double fTemp113 = (fTemp32 - fTemp53); - output7[i] = FAUSTFLOAT((fRec0[0] * (((0.021308452520676528 * ((fTemp76 - fTemp51) + fTemp52)) + ((0.0071028175068921775 * fTemp104) + ((0.021308452520676542 * fTemp105) + ((0.0071028175068921827 * fTemp106) + ((0.027231914153020901 * fTemp107) + ((0.043716214137085485 * ((fTemp83 - fTemp15) + fTemp17)) + ((2.6768460856911007e-18 * fTemp108) + ((((3.0114518464024883e-18 * fTemp70) + (0.027231914153020911 * fTemp98)) + (0.021308452520676539 * fTemp101)) + (0.021308452520676525 * fTemp102))))))))) - ((((0.007102817506892181 * fTemp109) + ((0.027231914153020904 * fTemp110) + ((8.0305382570733005e-18 * fTemp111) + (0.021308452520676546 * fTemp100)))) + (0.0071028175068921853 * fTemp112)) + (0.021308452520676532 * fTemp113))))); - double fTemp114 = (((fTemp6 - fTemp7) + fTemp8) - fTemp9); - double fTemp115 = (fTemp30 + fTemp52); - double fTemp116 = (fTemp29 + fTemp51); - output8[i] = FAUSTFLOAT((fRec0[0] * (((1.3384230428455503e-17 * fTemp13) + ((2.6768460856911007e-18 * fTemp11) + ((0.021858107068542749 * ((((fTemp114 + fTemp15) - fTemp16) + fTemp17) - fTemp18)) + ((0.024590370452110585 * (((fTemp1 - fTemp2) + fTemp3) - fTemp4)) + ((9.2199121612079837e-35 * fTemp103) + (((8.3373691255381378e-18 * fTemp87) + ((1.6674738251076273e-18 * fTemp82) + ((((0.028411270027568724 * fTemp64) + (0.028411270027568717 * fTemp56)) + (0.028411270027568731 * fTemp67)) + (0.028411270027568696 * fTemp68)))) + (2.1746106811858183e-18 * fTemp90))))))) - ((1.8737922599837705e-17 * fTemp14) + ((8.0305382570733005e-18 * fTemp12) + ((1.3047664087114909e-18 * fTemp115) + ((1.1422201709353029e-18 * fTemp116) + ((0.028411270027568748 * fTemp78) + ((0.028411270027568734 * fTemp89) + ((0.028411270027568745 * fTemp88) + ((0.028411270027568741 * fTemp81) + (((5.0024214753228816e-18 * fTemp63) + (1.167231677575339e-17 * fTemp66)) + (3.0444549536601452e-18 * fTemp69))))))))))))); - double fTemp117 = (0.033388810063348803 * fTemp11); - double fTemp118 = ((fTemp31 + fTemp51) + fTemp52); - double fTemp119 = ((fTemp59 + fTemp16) - fTemp18); - output9[i] = FAUSTFLOAT((fRec0[0] * (((0.033388810063348796 * fTemp12) + (fTemp117 + ((9.7582192711380499e-18 * fTemp3) + (((0.020818537549440803 * fTemp78) + ((0.020818537549440772 * fTemp89) + ((0.016982082124440745 * fTemp82) + ((0.030071220904747838 * fTemp56) + (((6.1334249057128588e-18 * fTemp62) + (0.016982082124440741 * fTemp63)) + (0.030071220904747824 * fTemp64)))))) + (0.0023131708388267431 * fTemp118))))) - ((0.033388810063348817 * fTemp14) + ((0.033388810063348852 * fTemp13) + ((0.016694405031674409 * fTemp119) + ((0.002313170838826747 * fTemp90) + ((0.02081853754944079 * fTemp88) + ((0.020818537549440783 * fTemp81) + ((0.016982082124440766 * fTemp87) + (((((0.026560635762986527 * fTemp60) + (0.016982082124440748 * fTemp66)) + (0.030071220904747821 * fTemp67)) + (0.030071220904747842 * fTemp68)) + (0.0023131708388267444 * fTemp69)))))))))))); - output10[i] = FAUSTFLOAT((fRec0[0] * ((((0.041597435974919175 * ((((fTemp91 - fTemp24) + fTemp25) - fTemp26) + fTemp27)) + ((0.016998264729033874 * fTemp112) + ((0.016998264729033888 * fTemp105) + ((0.016998264729033867 * fTemp106) + ((1.5023761394674526e-17 * fTemp111) + ((5.0079204648915091e-18 * fTemp108) + (0.016998264729033881 * fTemp100))))))) + (0.016998264729033836 * ((((fTemp92 - fTemp51) + fTemp52) - fTemp53) + fTemp54))) - ((0.016998264729033857 * fTemp104) + ((0.016998264729033864 * fTemp109) + ((1.0015840929783018e-17 * fTemp97) + (0.016998264729033919 * fTemp101))))))); - output11[i] = FAUSTFLOAT((fRec0[0] * ((((0.038794291597509752 * fTemp119) + ((0.0053753232814252143 * fTemp68) + (((0.013154264250377145 * fTemp58) + ((4.7509305030079371e-18 * fTemp62) + (0.013154264250377147 * fTemp63))) + (0.0053753232814252021 * fTemp67)))) + (0.030460165261409405 * fTemp118)) - ((2.5195613817171963e-18 * fTemp3) + ((0.016125969844275594 * ((fTemp93 + fTemp45) - fTemp49)) + ((0.016125969844275591 * ((fTemp94 + fTemp44) - fTemp48)) + ((0.025862861065006511 * (fTemp12 - fTemp14)) + ((0.030460165261409402 * fTemp90) + ((((((0.020573779994945588 * fTemp60) + (0.025862861065006505 * fTemp61)) + (0.013154264250377148 * fTemp66)) + (0.0053753232814252047 * fTemp64)) + (0.0053753232814252056 * fTemp56)) + (0.030460165261409412 * fTemp69)))))))))); - output12[i] = FAUSTFLOAT((fRec0[0] * (((0.033596842045264641 * fTemp70) + (0.0263335984839893 * fTemp75)) - (((0.010558468816293319 * fTemp71) + (0.021480823570105497 * fTemp72)) + (0.020481687709769415 * fTemp74))))); - double fTemp120 = ((fTemp83 + fTemp15) - fTemp17); - output13[i] = FAUSTFLOAT((fRec0[0] * (((0.025862861065006505 * fTemp12) + ((3.7793420725757941e-18 * fTemp4) + ((0.038794291597509752 * fTemp120) + ((5.0391227634343926e-18 * fTemp103) + ((0.030460165261409402 * fTemp77) + ((0.0053753232814252004 * fTemp89) + ((0.0053753232814251969 * fTemp88) + ((0.013154264250377147 * fTemp82) + ((2.3754652515039685e-18 * fTemp84) + (0.030460165261409398 * fTemp69)))))))))) - ((0.025862861065006501 * fTemp14) + ((1.2597806908585981e-18 * fTemp2) + ((0.013154264250377145 * ((fTemp96 + fTemp25) - fTemp27)) + (((0.0053753232814251943 * fTemp78) + ((0.016125969844275591 * fTemp80) + ((0.0053753232814251978 * fTemp81) + ((0.013154264250377148 * fTemp87) + ((7.1263957545119048e-18 * fTemp86) + ((0.020573779994945588 * fTemp85) + ((0.025862861065006511 * fTemp61) + (0.016125969844275587 * fTemp68)))))))) + (0.030460165261409412 * fTemp90)))))))); - output14[i] = FAUSTFLOAT((fRec0[0] * (((0.022664352972045151 * (((fTemp39 - fTemp40) - fTemp47) + fTemp48)) + ((1.2735541704855431e-17 * (fTemp21 - fTemp26)) + ((2.5471083409710867e-18 * (fTemp19 - fTemp24)) + ((0.04089277388695433 * ((((fTemp114 - fTemp15) + fTemp16) - fTemp17) + fTemp18)) + (((((2.4393594688416384e-34 * fTemp70) + (0.022664352972045144 * fTemp99)) + (0.022664352972045138 * fTemp95)) + (0.02266435297204512 * fTemp101)) + (5.2042176228676594e-18 * fTemp113)))))) - ((3.1225305737205953e-18 * (fTemp30 - fTemp52)) + ((2.7335294515958808e-18 * (fTemp29 - fTemp51)) + ((0.022664352972045162 * ((fTemp55 - fTemp44) - fTemp45)) + ((0.022664352972045165 * fTemp104) + ((1.7829758386797603e-17 * fTemp107) + ((7.6413250229132581e-18 * fTemp110) + (7.2859046720147234e-18 * fTemp102)))))))))); - output15[i] = FAUSTFLOAT((fRec0[0] * (((0.033388810063348762 * fTemp13) + ((0.033388810063348817 * fTemp12) + ((1.4637328906707076e-17 * fTemp4) + ((0.016694405031674409 * fTemp120) + ((0.0023131708388267444 * fTemp115) + ((6.0979103388536467e-51 * fTemp103) + (((0.0300712209047478 * fTemp89) + ((0.03007122090474779 * fTemp88) + ((0.016982082124440721 * fTemp87) + ((9.2001373585692901e-18 * fTemp86) + ((0.026560635762986527 * fTemp85) + (((0.016982082124440748 * fTemp63) + (0.020818537549440738 * fTemp64)) + (0.02081853754944071 * fTemp68))))))) + (0.0023131708388267409 * fTemp90)))))))) - ((0.033388810063348796 * fTemp14) + (fTemp117 + ((4.879109635569025e-18 * fTemp2) + ((0.016982082124440741 * (((fTemp19 + fTemp22) + fTemp24) + fTemp27)) + ((0.0023131708388267449 * fTemp116) + ((0.030071220904747779 * fTemp78) + ((0.030071220904747797 * fTemp81) + ((3.0667124528564294e-18 * fTemp84) + (((0.020818537549440724 * fTemp56) + (0.020818537549440744 * fTemp67)) + (0.0023131708388267431 * fTemp69))))))))))))); + double fTemp55 = (fRec1[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * fTemp28)) + (0.02017333553791887 * ((((((((((((((((((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53) + fTemp54)))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (fRec1[0] * (((((fConst5 * fTemp4) + (0.022574955908289243 * ((((fConst6 * fTemp9) + (fConst7 * fTemp13)) + (fConst8 * fTemp14)) + (fConst6 * fTemp18)))) + (0.021093750000000001 * ((((fConst9 * fTemp21) + (fConst10 * fTemp22)) + (fConst9 * fTemp26)) + (fConst10 * fTemp27)))) + (fConst4 * (((((((((((((((((((((0.02026373487753309 * fTemp2) + (0.025473109945013343 * fTemp7)) + (0.025473109945013336 * fTemp11)) + (0.025473109945013343 * fTemp12)) + (0.025473109945013343 * fTemp16)) + (0.019434045907762619 * fTemp19)) + (0.019434045907762623 * fTemp20)) + (0.019434045907762619 * fTemp24)) + (0.019434045907762623 * fTemp25)) + (0.0097062489627452973 * fTemp29)) + (0.0097062489627452973 * fTemp30)) + (0.0097062489627453199 * fTemp35)) + (0.029118746888235923 * fTemp36)) + (0.029118746888235927 * fTemp37)) + (0.0097062489627453216 * fTemp38)) + (0.0097062489627453199 * fTemp43)) + (0.029118746888235923 * fTemp44)) + (0.029118746888235927 * fTemp45)) + (0.0097062489627453216 * fTemp46)) + (0.0097062489627452973 * fTemp51)) + (0.0097062489627452973 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst11 * fTemp32) + (fConst12 * fTemp33)) + (fConst13 * fTemp39)) + (fConst14 * fTemp40)) + (fConst15 * fTemp41)) + (fConst16 * fTemp42)) + (fConst13 * fTemp47)) + (fConst14 * fTemp48)) + (fConst15 * fTemp49)) + (fConst16 * fTemp50)) + (fConst11 * fTemp53)) + (fConst12 * fTemp54))))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (fTemp0 - fTemp5); + double fTemp58 = ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18); + double fTemp59 = ((((fTemp23 - fTemp24) - fTemp25) - fTemp26) - fTemp27); + double fTemp60 = (((((((fTemp35 + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42); + double fTemp61 = ((((((((fTemp60 - fTemp43) - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49) - fTemp50); + double fTemp62 = ((((fTemp34 - fTemp51) - fTemp52) - fTemp53) - fTemp54); + double fTemp63 = (fRec1[0] * (((((0.021994295969128601 * fTemp57) + (0.027648561470568499 * fTemp58)) + (0.021093750000000001 * fTemp59)) + (0.010535180889746075 * fTemp61)) + (0.031605542669238249 * fTemp62))); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + output2[i] = FAUSTFLOAT(fTemp63); + double fTemp64 = (fRec1[0] * ((fConst4 * (((((((((((((((((((((0.02026373487753309 * fTemp1) + (0.025473109945013343 * fTemp6)) + (0.025473109945013343 * fTemp11)) + (0.025473109945013332 * fTemp14)) + (0.025473109945013343 * fTemp15)) + (0.019434045907762623 * fTemp19)) + (0.019434045907762616 * fTemp22)) + (0.019434045907762623 * fTemp24)) + (0.019434045907762616 * fTemp27)) + (0.0097062489627452956 * fTemp29)) + (0.0097062489627452939 * fTemp33)) + (0.029118746888235916 * fTemp35)) + (0.0097062489627453077 * fTemp36)) + (0.0097062489627453008 * fTemp41)) + (0.029118746888235913 * fTemp42)) + (0.029118746888235916 * fTemp43)) + (0.0097062489627453077 * fTemp44)) + (0.0097062489627453008 * fTemp49)) + (0.029118746888235913 * fTemp50)) + (0.0097062489627452956 * fTemp51)) + (0.0097062489627452939 * fTemp54))) + ((((fConst5 * fTemp3) + (0.022574955908289243 * ((((fConst6 * fTemp8) + (fConst7 * fTemp12)) + (fConst8 * fTemp13)) + (fConst6 * fTemp17)))) + (0.021093750000000001 * ((((fConst9 * fTemp20) + (fConst10 * fTemp21)) + (fConst9 * fTemp25)) + (fConst10 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst11 * fTemp30) + (fConst12 * fTemp32)) + (fConst17 * fTemp37)) + (fConst18 * fTemp38)) + (fConst14 * fTemp39)) + (fConst19 * fTemp40)) + (fConst17 * fTemp45)) + (fConst18 * fTemp46)) + (fConst14 * fTemp47)) + (fConst19 * fTemp48)) + (fConst11 * fTemp52)) + (fConst12 * fTemp53)))))); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + output3[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = (fTemp30 + fTemp33); + double fTemp66 = (fTemp20 + fTemp22); + double fTemp67 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst23 * fTemp65) + (fConst24 * fTemp37)) + (fConst25 * fTemp38)) + (fConst26 * fTemp41)) + (fConst27 * fTemp42)) + (fConst24 * fTemp45)) + (fConst25 * fTemp46)) + (fConst26 * fTemp49)) + (fConst27 * fTemp50)) + (fConst23 * fTemp52)) + (fConst23 * fTemp54))) + (((fConst29 * (fTemp12 + fTemp14)) + (fConst30 * ((fTemp66 + fTemp25) + fTemp27))) + (fConst22 * ((((((((((((((((((0.072048835120117657 * fTemp11) + (0.072048835120117671 * fTemp13)) + (0.044881006545161167 * fTemp19)) + (0.044881006545161174 * fTemp21)) + (0.044881006545161167 * fTemp24)) + (0.044881006545161174 * fTemp26)) + (0.011706176702255417 * fTemp29)) + (0.011706176702255421 * fTemp32)) + (0.035118530106766375 * fTemp35)) + (0.035118530106766334 * fTemp36)) + (0.035118530106766362 * fTemp39)) + (0.035118530106766348 * fTemp40)) + (0.035118530106766375 * fTemp43)) + (0.035118530106766334 * fTemp44)) + (0.035118530106766362 * fTemp47)) + (0.035118530106766348 * fTemp48)) + (0.011706176702255417 * fTemp51)) + (0.011706176702255421 * fTemp53)))))); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp67)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + output4[i] = FAUSTFLOAT(fTemp67); + double fTemp68 = (fConst45 * fTemp19); + double fTemp69 = (fRec1[0] * ((((0.022574955908289243 * ((fConst34 * fTemp9) + (fConst36 * fTemp18))) + (0.021093750000000001 * ((((fConst37 * fTemp21) + (fConst38 * fTemp22)) + (fConst41 * fTemp26)) + (fConst42 * fTemp27)))) + (fConst32 * ((((((((((((((((((fConst43 * fTemp7) + (fConst44 * fTemp16)) + fTemp68) + (fConst45 * fTemp20)) + (fConst46 * fTemp24)) + (fConst47 * fTemp25)) + (fConst48 * fTemp29)) + (fConst48 * fTemp30)) + (fConst49 * fTemp35)) + (fConst50 * fTemp36)) + (fConst51 * fTemp37)) + (fConst52 * fTemp38)) + (fConst54 * fTemp43)) + (fConst55 * fTemp44)) + (fConst56 * fTemp45)) + (fConst57 * fTemp46)) + (fConst59 * fTemp51)) + (fConst59 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst60 * fTemp32) + (fConst61 * fTemp33)) + (fConst62 * fTemp39)) + (fConst63 * fTemp40)) + (fConst64 * fTemp41)) + (fConst65 * fTemp42)) + (fConst67 * fTemp47)) + (fConst68 * fTemp48)) + (fConst69 * fTemp49)) + (fConst70 * fTemp50)) + (fConst72 * fTemp53)) + (fConst73 * fTemp54))))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph5 = FAUSTFLOAT(fRec6[0]); + output5[i] = FAUSTFLOAT(fTemp69); + double fTemp70 = (fRec1[0] * ((((0.01261978399999881 * ((((fTemp10 + fTemp15) + fTemp16) + fTemp17) + fTemp18)) + ((0.028394513999997331 * (fTemp0 + fTemp5)) + (5.236595479505967e-18 * fTemp28))) + (0.032806508796871948 * ((((fTemp34 + fTemp51) + fTemp52) + fTemp53) + fTemp54))) - (((0.014197256999998666 * (((fTemp1 + fTemp2) + fTemp3) + fTemp4)) + (0.025239567999997631 * (((fTemp11 + fTemp12) + fTemp13) + fTemp14))) + (0.01640325439843596 * ((((((((fTemp60 + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50))))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + output6[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = (fRec1[0] * ((fConst32 * ((((((((((((((((fTemp68 + ((fConst43 * fTemp6) + (fConst44 * fTemp15))) + (fConst74 * fTemp22)) + (fConst47 * fTemp24)) + (fConst75 * fTemp27)) + (fConst76 * fTemp29)) + (fConst77 * fTemp33)) + (fConst78 * fTemp35)) + (fConst79 * fTemp36)) + (fConst80 * fTemp41)) + (fConst81 * fTemp42)) + (fConst82 * fTemp43)) + (fConst83 * fTemp44)) + (fConst84 * fTemp49)) + (fConst85 * fTemp50)) + (fConst86 * fTemp51)) + (fConst87 * fTemp54))) + (((0.022574955908289243 * ((fConst34 * fTemp8) + (fConst36 * fTemp17))) + (0.021093750000000001 * ((((fConst37 * fTemp20) + (fConst38 * fTemp21)) + (fConst41 * fTemp25)) + (fConst42 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst60 * fTemp30) + (fConst61 * fTemp32)) + (fConst88 * fTemp37)) + (fConst89 * fTemp38)) + (fConst63 * fTemp39)) + (fConst90 * fTemp40)) + (fConst91 * fTemp45)) + (fConst92 * fTemp46)) + (fConst68 * fTemp47)) + (fConst93 * fTemp48)) + (fConst72 * fTemp52)) + (fConst73 * fTemp53)))))); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph7 = FAUSTFLOAT(fRec8[0]); + output7[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = (fTemp7 + fTemp9); + double fTemp73 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst94 * fTemp33) + (fConst95 * fTemp31)) + (fConst96 * fTemp36)) + (fConst97 * fTemp37)) + (fConst98 * fTemp40)) + (fConst99 * fTemp41)) + (fConst96 * fTemp44)) + (fConst97 * fTemp45)) + (fConst98 * fTemp48)) + (fConst99 * fTemp49)) + (fConst95 * fTemp51)) + (fConst95 * fTemp52)) + (fConst94 * fTemp54))) + ((((fConst100 * (fTemp2 + fTemp4)) + (0.022574955908289243 * (((((fConst101 * fTemp72) + (fConst102 * fTemp12)) + (fConst103 * fTemp14)) + (fConst101 * fTemp16)) + (fConst101 * fTemp18)))) + (0.021093750000000001 * ((((fConst104 * fTemp20) + (fConst105 * fTemp22)) + (fConst104 * fTemp25)) + (fConst105 * fTemp27)))) + (fConst22 * (((((((((((((((((((((0.04052746975506618 * (fTemp1 + fTemp3)) + (0.036024417560058836 * fTemp6)) + (0.036024417560058836 * fTemp8)) + (1.5998055129555246e-17 * fTemp11)) + (3.1996110259110492e-17 * fTemp13)) + (0.036024417560058836 * fTemp15)) + (0.036024417560058836 * fTemp17)) + (9.9655853669580557e-18 * fTemp19)) + (1.9931170733916111e-17 * fTemp21)) + (9.9655853669580557e-18 * fTemp24)) + (1.9931170733916111e-17 * fTemp26)) + (5.19858676206982e-18 * fTemp32)) + (0.046824706809021746 * fTemp35)) + (0.046824706809021746 * fTemp38)) + (0.046824706809021774 * fTemp39)) + (0.046824706809021698 * fTemp42)) + (0.046824706809021746 * fTemp43)) + (0.046824706809021746 * fTemp46)) + (0.046824706809021774 * fTemp47)) + (0.046824706809021698 * fTemp50)) + (5.19858676206982e-18 * fTemp53)))))); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + output8[i] = FAUSTFLOAT(fTemp73); + double fTemp74 = (fRec1[0] * (((((fConst107 * fTemp2) + (0.022574955908289243 * ((((fConst108 * fTemp7) + (fConst109 * fTemp13)) + (fConst110 * fTemp14)) + (fConst108 * fTemp16)))) + (0.021093750000000001 * ((((fConst111 * fTemp21) + (fConst112 * fTemp22)) + (fConst111 * fTemp26)) + (fConst112 * fTemp27)))) + (fConst106 * (((((((((((((((((((((0.081054939510132359 * fTemp4) + (0.050946219890026692 * fTemp9)) + (0.10189243978005338 * fTemp11)) + (0.1018924397800533 * fTemp12)) + (0.050946219890026692 * fTemp18)) + (0.051824122420700336 * fTemp19)) + (0.051824122420700287 * fTemp20)) + (0.051824122420700336 * fTemp24)) + (0.051824122420700287 * fTemp25)) + (0.0070590901547238332 * fTemp29)) + (0.0070590901547238332 * fTemp30)) + (0.091768172011410243 * fTemp35)) + (0.091768172011410271 * fTemp38)) + (0.063531811392514695 * fTemp40)) + (0.063531811392514792 * fTemp41)) + (0.091768172011410243 * fTemp43)) + (0.091768172011410271 * fTemp46)) + (0.063531811392514695 * fTemp48)) + (0.063531811392514792 * fTemp49)) + (0.0070590901547238332 * fTemp51)) + (0.0070590901547238332 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst113 * fTemp32) + (fConst114 * fTemp33)) + (fConst115 * fTemp36)) + (fConst116 * fTemp37)) + (fConst117 * fTemp39)) + (fConst118 * fTemp42)) + (fConst115 * fTemp44)) + (fConst116 * fTemp45)) + (fConst117 * fTemp47)) + (fConst118 * fTemp50)) + (fConst113 * fTemp53)) + (fConst114 * fTemp54))))); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp74)))))); + fVbargraph9 = FAUSTFLOAT(fRec10[0]); + output9[i] = FAUSTFLOAT(fTemp74); + double fTemp75 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst121 * fTemp65) + (fConst122 * fTemp37)) + (fConst123 * fTemp38)) + (fConst124 * fTemp41)) + (fConst125 * fTemp42)) + (fConst128 * fTemp45)) + (fConst129 * fTemp46)) + (fConst130 * fTemp49)) + (fConst131 * fTemp50)) + (fConst134 * fTemp52)) + (fConst134 * fTemp54))) + ((0.021093750000000001 * (((fConst135 * fTemp66) + (fConst138 * fTemp25)) + (fConst138 * fTemp27))) + (fConst119 * (((((((((((((((fConst21 * ((0.12956030605175081 * fTemp19) + (0.12956030605175084 * fTemp21))) + (fConst139 * fTemp24)) + (fConst140 * fTemp26)) + (fConst141 * fTemp29)) + (fConst142 * fTemp32)) + (fConst143 * fTemp35)) + (fConst144 * fTemp36)) + (fConst145 * fTemp39)) + (fConst146 * fTemp40)) + (fConst147 * fTemp43)) + (fConst148 * fTemp44)) + (fConst149 * fTemp47)) + (fConst150 * fTemp48)) + (fConst151 * fTemp51)) + (fConst152 * fTemp53)))))); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp75)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + output10[i] = FAUSTFLOAT(fTemp75); + double fTemp76 = (fRec1[0] * (((((fConst156 * fTemp4) + (0.022574955908289243 * ((((fConst158 * fTemp9) + (fConst159 * fTemp13)) + (fConst160 * fTemp14)) + (fConst162 * fTemp18)))) + (0.021093750000000001 * ((((fConst163 * fTemp21) + (fConst164 * fTemp22)) + (fConst167 * fTemp26)) + (fConst168 * fTemp27)))) + (fConst153 * (((((((((((((((((((((fConst169 * fTemp7) + (fConst170 * fTemp2)) + (fConst171 * fTemp11)) + (fConst172 * fTemp12)) + (fConst173 * fTemp16)) + (fConst174 * fTemp19)) + (fConst175 * fTemp20)) + (fConst176 * fTemp24)) + (fConst177 * fTemp25)) + (fConst178 * fTemp29)) + (fConst178 * fTemp30)) + (fConst180 * fTemp35)) + (fConst181 * fTemp36)) + (fConst182 * fTemp37)) + (fConst183 * fTemp38)) + (fConst185 * fTemp43)) + (fConst186 * fTemp44)) + (fConst187 * fTemp45)) + (fConst188 * fTemp46)) + (fConst190 * fTemp51)) + (fConst190 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst191 * fTemp32) + (fConst192 * fTemp33)) + (fConst194 * fTemp39)) + (fConst195 * fTemp40)) + (fConst196 * fTemp41)) + (fConst197 * fTemp42)) + (fConst199 * fTemp47)) + (fConst200 * fTemp48)) + (fConst201 * fTemp49)) + (fConst202 * fTemp50)) + (fConst204 * fTemp53)) + (fConst205 * fTemp54))))); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp76)))))); + fVbargraph11 = FAUSTFLOAT(fRec12[0]); + output11[i] = FAUSTFLOAT(fTemp76); + double fTemp77 = (fRec1[0] * (((0.033596842045264641 * fTemp57) + (0.026333598483989317 * fTemp62)) - (((0.010558468816293317 * fTemp58) + (0.021480823570105497 * fTemp59)) + (0.020481687709769415 * fTemp61)))); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + output12[i] = FAUSTFLOAT(fTemp77); + double fTemp78 = (fRec1[0] * ((fConst153 * (((((((((((((((((((((fConst169 * fTemp6) + (fConst170 * fTemp1)) + (fConst172 * fTemp11)) + (fConst206 * fTemp14)) + (fConst173 * fTemp15)) + (fConst175 * fTemp19)) + (fConst207 * fTemp22)) + (fConst177 * fTemp24)) + (fConst208 * fTemp27)) + (fConst209 * fTemp29)) + (fConst210 * fTemp33)) + (fConst211 * fTemp35)) + (fConst212 * fTemp36)) + (fConst213 * fTemp41)) + (fConst214 * fTemp42)) + (fConst215 * fTemp43)) + (fConst216 * fTemp44)) + (fConst217 * fTemp49)) + (fConst218 * fTemp50)) + (fConst219 * fTemp51)) + (fConst220 * fTemp54))) + ((((fConst156 * fTemp3) + (0.022574955908289243 * ((((fConst158 * fTemp8) + (fConst159 * fTemp12)) + (fConst160 * fTemp13)) + (fConst162 * fTemp17)))) + (0.021093750000000001 * ((((fConst163 * fTemp20) + (fConst164 * fTemp21)) + (fConst167 * fTemp25)) + (fConst168 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst191 * fTemp30) + (fConst192 * fTemp32)) + (fConst221 * fTemp37)) + (fConst222 * fTemp38)) + (fConst195 * fTemp39)) + (fConst223 * fTemp40)) + (fConst224 * fTemp45)) + (fConst225 * fTemp46)) + (fConst200 * fTemp47)) + (fConst226 * fTemp48)) + (fConst204 * fTemp52)) + (fConst205 * fTemp53)))))); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph13 = FAUSTFLOAT(fRec14[0]); + output13[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst227 * fTemp31) + (fConst228 * fTemp33)) + (fConst229 * fTemp36)) + (fConst230 * fTemp37)) + (fConst231 * fTemp40)) + (fConst232 * fTemp41)) + (fConst233 * fTemp44)) + (fConst233 * fTemp45)) + (fConst234 * fTemp48)) + (fConst235 * fTemp49)) + (fConst236 * fTemp51)) + (fConst236 * fTemp52)) + (fConst237 * fTemp54))) + (((0.022574955908289243 * (((fConst238 * fTemp72) + (fConst240 * fTemp16)) + (fConst240 * fTemp18))) + (0.021093750000000001 * ((((fConst241 * fTemp20) + (fConst242 * fTemp22)) + (fConst243 * fTemp25)) + (fConst244 * fTemp27)))) + (fConst119 * (((((((((((((((((fConst245 * (fTemp6 + fTemp8)) + (fConst246 * fTemp15)) + (fConst246 * fTemp17)) + (fConst247 * fTemp19)) + (fConst248 * fTemp21)) + (fConst249 * fTemp24)) + (fConst250 * fTemp26)) + (fConst251 * fTemp32)) + (fConst252 * fTemp35)) + (fConst252 * fTemp38)) + (fConst253 * fTemp39)) + (fConst254 * fTemp42)) + (fConst255 * fTemp43)) + (fConst255 * fTemp46)) + (fConst256 * fTemp47)) + (fConst257 * fTemp50)) + (fConst258 * fTemp53)))))); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp79)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + output14[i] = FAUSTFLOAT(fTemp79); + double fTemp80 = (fRec1[0] * ((0.02017333553791887 * ((((((((((((fConst259 * fTemp29) + (fConst260 * fTemp33)) + (fConst261 * fTemp36)) + (fConst262 * fTemp38)) + (fConst263 * fTemp39)) + (fConst264 * fTemp41)) + (fConst261 * fTemp44)) + (fConst262 * fTemp46)) + (fConst263 * fTemp47)) + (fConst264 * fTemp49)) + (fConst259 * fTemp51)) + (fConst260 * fTemp54))) + ((((fConst107 * fTemp3) + (0.022574955908289243 * ((((fConst108 * fTemp8) + (fConst265 * fTemp11)) + (fConst266 * fTemp14)) + (fConst108 * fTemp17)))) + (0.021093750000000001 * ((((fConst267 * fTemp19) + (fConst268 * fTemp22)) + (fConst267 * fTemp24)) + (fConst268 * fTemp27)))) + (fConst106 * (((((((((((((((((((((0.081054939510132359 * fTemp1) + (0.050946219890026692 * fTemp6)) + (0.10189243978005338 * fTemp12)) + (0.10189243978005329 * fTemp13)) + (0.050946219890026692 * fTemp15)) + (0.051824122420700336 * fTemp20)) + (0.051824122420700267 * fTemp21)) + (0.051824122420700336 * fTemp25)) + (0.051824122420700267 * fTemp26)) + (0.0070590901547238384 * fTemp30)) + (0.0070590901547238306 * fTemp32)) + (0.063531811392514598 * fTemp35)) + (0.09176817201141016 * fTemp37)) + (0.091768172011410187 * fTemp40)) + (0.063531811392514445 * fTemp42)) + (0.063531811392514598 * fTemp43)) + (0.09176817201141016 * fTemp45)) + (0.091768172011410187 * fTemp48)) + (0.063531811392514445 * fTemp50)) + (0.0070590901547238384 * fTemp52)) + (0.0070590901547238306 * fTemp53)))))); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp80)))))); + fVbargraph15 = FAUSTFLOAT(fRec16[0]); + output15[i] = FAUSTFLOAT(fTemp80); + fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; } @@ -1214,7 +1948,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1446,7 +2179,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1509,7 +2242,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1538,11 +2271,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncLebedev504.cpp b/source/HOAUGens/HOAEncLebedev504.cpp index 989b21109d..b34ad9cbe4 100644 --- a/source/HOAUGens/HOAEncLebedev504.cpp +++ b/source/HOAUGens/HOAEncLebedev504.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncLebedev504" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,22 +613,579 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include +#include -double pow(double dummy0, double dummy1); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { private: + int fSamplingFreq; + double fConst0; FAUSTFLOAT fHslider0; + double fRec1[2]; double fRec0[2]; - int fSamplingFreq; + FAUSTFLOAT fVbargraph0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fConst17; + double fConst18; + double fConst19; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fRec6[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fRec8[2]; + FAUSTFLOAT fVbargraph7; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fConst119; + double fConst120; + double fConst121; + double fRec10[2]; + FAUSTFLOAT fVbargraph9; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fConst136; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fConst157; + double fConst158; + double fConst159; + double fConst160; + double fConst161; + double fConst162; + double fConst163; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; + double fConst176; + double fConst177; + double fConst178; + double fConst179; + double fConst180; + double fConst181; + double fConst182; + double fConst183; + double fConst184; + double fConst185; + double fConst186; + double fConst187; + double fConst188; + double fConst189; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + double fConst196; + double fConst197; + double fConst198; + double fConst199; + double fConst200; + double fConst201; + double fConst202; + double fConst203; + double fConst204; + double fConst205; + double fConst206; + double fConst207; + double fConst208; + double fConst209; + double fRec12[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fConst210; + double fConst211; + double fConst212; + double fConst213; + double fConst214; + double fConst215; + double fConst216; + double fConst217; + double fConst218; + double fConst219; + double fConst220; + double fConst221; + double fConst222; + double fConst223; + double fConst224; + double fConst225; + double fConst226; + double fConst227; + double fConst228; + double fConst229; + double fConst230; + double fRec14[2]; + FAUSTFLOAT fVbargraph13; + double fConst231; + double fConst232; + double fConst233; + double fConst234; + double fConst235; + double fConst236; + double fConst237; + double fConst238; + double fConst239; + double fConst240; + double fConst241; + double fConst242; + double fConst243; + double fConst244; + double fConst245; + double fConst246; + double fConst247; + double fConst248; + double fConst249; + double fConst250; + double fConst251; + double fConst252; + double fConst253; + double fConst254; + double fConst255; + double fConst256; + double fConst257; + double fConst258; + double fConst259; + double fConst260; + double fConst261; + double fConst262; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fConst263; + double fConst264; + double fConst265; + double fConst266; + double fConst267; + double fConst268; + double fConst269; + double fConst270; + double fConst271; + double fConst272; + double fRec16[2]; + FAUSTFLOAT fVbargraph15; + double fConst273; + double fConst274; + double fConst275; + double fConst276; + double fConst277; + double fConst278; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fConst279; + double fConst280; + double fConst281; + double fConst282; + double fConst283; + double fConst284; + double fConst285; + double fConst286; + double fConst287; + double fConst288; + double fConst289; + double fConst290; + double fConst291; + double fConst292; + double fConst293; + double fConst294; + double fConst295; + double fConst296; + double fConst297; + double fConst298; + double fConst299; + double fConst300; + double fConst301; + double fConst302; + double fConst303; + double fConst304; + double fConst305; + double fConst306; + double fConst307; + double fConst308; + double fConst309; + double fConst310; + double fConst311; + double fConst312; + double fConst313; + double fConst314; + double fConst315; + double fConst316; + double fConst317; + double fConst318; + double fConst319; + double fConst320; + double fConst321; + double fRec18[2]; + FAUSTFLOAT fVbargraph17; + double fConst322; + double fConst323; + double fConst324; + double fConst325; + double fConst326; + double fConst327; + double fConst328; + double fConst329; + double fConst330; + double fConst331; + double fConst332; + double fConst333; + double fConst334; + double fConst335; + double fConst336; + double fConst337; + double fConst338; + double fConst339; + double fConst340; + double fConst341; + double fConst342; + double fConst343; + double fConst344; + double fConst345; + double fConst346; + double fConst347; + double fConst348; + double fConst349; + double fConst350; + double fConst351; + double fConst352; + double fConst353; + double fConst354; + double fConst355; + double fConst356; + double fConst357; + double fConst358; + double fConst359; + double fConst360; + double fConst361; + double fConst362; + double fConst363; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fConst364; + double fConst365; + double fConst366; + double fConst367; + double fConst368; + double fConst369; + double fConst370; + double fConst371; + double fConst372; + double fConst373; + double fConst374; + double fConst375; + double fConst376; + double fConst377; + double fConst378; + double fConst379; + double fConst380; + double fConst381; + double fConst382; + double fConst383; + double fConst384; + double fConst385; + double fConst386; + double fConst387; + double fConst388; + double fConst389; + double fConst390; + double fConst391; + double fConst392; + double fConst393; + double fConst394; + double fConst395; + double fConst396; + double fConst397; + double fConst398; + double fConst399; + double fConst400; + double fConst401; + double fConst402; + double fConst403; + double fConst404; + double fConst405; + double fConst406; + double fConst407; + double fConst408; + double fConst409; + double fConst410; + double fRec20[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fConst411; + double fConst412; + double fConst413; + double fConst414; + double fConst415; + double fConst416; + double fConst417; + double fConst418; + double fConst419; + double fConst420; + double fConst421; + double fConst422; + double fConst423; + double fConst424; + double fConst425; + double fConst426; + double fConst427; + double fConst428; + double fRec22[2]; + FAUSTFLOAT fVbargraph21; + double fConst429; + double fConst430; + double fConst431; + double fConst432; + double fConst433; + double fConst434; + double fConst435; + double fConst436; + double fConst437; + double fConst438; + double fConst439; + double fConst440; + double fConst441; + double fConst442; + double fConst443; + double fConst444; + double fConst445; + double fConst446; + double fConst447; + double fConst448; + double fConst449; + double fConst450; + double fConst451; + double fConst452; + double fConst453; + double fConst454; + double fConst455; + double fConst456; + double fConst457; + double fConst458; + double fConst459; + double fConst460; + double fConst461; + double fConst462; + double fConst463; + double fConst464; + double fConst465; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fConst466; + double fConst467; + double fConst468; + double fConst469; + double fConst470; + double fConst471; + double fConst472; + double fConst473; + double fConst474; + double fConst475; + double fConst476; + double fConst477; + double fConst478; + double fConst479; + double fConst480; + double fConst481; + double fConst482; + double fConst483; + double fConst484; + double fConst485; + double fConst486; + double fConst487; + double fConst488; + double fConst489; + double fConst490; + double fConst491; + double fConst492; + double fConst493; + double fConst494; + double fConst495; + double fRec24[2]; + FAUSTFLOAT fVbargraph23; + double fConst496; + double fConst497; + double fConst498; + double fConst499; + double fConst500; + double fRec25[2]; + FAUSTFLOAT fVbargraph24; public: @@ -623,31 +1194,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncLebedev504"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -989,6 +1560,507 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.0)); + fConst2 = double(tgamma(3.0)); + fConst3 = double(tgamma(1.5)); + fConst4 = (sqrt((3.0 * (fConst1 / fConst2))) * fConst3); + fConst5 = (0.012698412698412698 * (0.0 - (1.5957691216057308 * fConst4))); + fConst6 = (0.0 - (1.1283791670955128 * fConst4)); + fConst7 = (0.0 - (1.1283791670955126 * fConst4)); + fConst8 = (0.0 - (1.128379167095513 * fConst4)); + fConst9 = (0.0 - (0.92131773192356115 * fConst4)); + fConst10 = (0.0 - (0.92131773192356148 * fConst4)); + fConst11 = (0.0 - (0.48114249349102017 * fConst4)); + fConst12 = (0.0 - (0.48114249349102034 * fConst4)); + fConst13 = (0.0 - (0.48114249349102112 * fConst4)); + fConst14 = (0.0 - (1.4434274804730622 * fConst4)); + fConst15 = (0.0 - (1.4434274804730625 * fConst4)); + fConst16 = (0.0 - (0.48114249349102228 * fConst4)); + fConst17 = (0.0 - (0.48114249349102062 * fConst4)); + fConst18 = (0.0 - (1.443427480473062 * fConst4)); + fConst19 = (0.0 - (0.48114249349102095 * fConst4)); + fConst20 = double(tgamma(5.0)); + fConst21 = double(tgamma(2.5)); + fConst22 = (sqrt((5.0 * (fConst1 / fConst20))) * fConst21); + fConst23 = (0.0 - (0.58027968058390089 * fConst22)); + fConst24 = (0.0 - (1.7408390417517061 * fConst22)); + fConst25 = (0.0 - (1.7408390417517088 * fConst22)); + fConst26 = (0.0 - (1.7408390417517057 * fConst22)); + fConst27 = (0.0 - (1.7408390417517114 * fConst22)); + fConst28 = (0.0 - (3.1915382432114616 * fConst22)); + fConst29 = (0.022574955908289243 * fConst28); + fConst30 = (0.021093750000000001 * (0.0 - (2.1276921621409737 * fConst22))); + fConst31 = double(tgamma(2.0)); + fConst32 = double(tgamma(4.0)); + fConst33 = sqrt((5.0 * (fConst31 / fConst32))); + fConst34 = (fConst33 * fConst3); + fConst35 = (0.0 - (2.3936536824085959 * fConst34)); + fConst36 = (0.0 - (1.6925687506432687 * fConst3)); + fConst37 = (0.0 - (1.4142135623730951 * (fConst33 * fConst36))); + fConst38 = (0.0 - (1.5957691216057308 * fConst34)); + fConst39 = (0.0 - (1.5957691216057313 * fConst34)); + fConst40 = (0.0 - (1.5957691216057308 * fConst3)); + fConst41 = (fConst33 * fConst40); + fConst42 = (0.0 - fConst41); + fConst43 = (0.0 - (1.0000000000000002 * fConst41)); + fConst44 = (0.054036626340088233 * fConst3); + fConst45 = (0.031925808815477283 * fConst36); + fConst46 = (0.033660754908870889 * fConst3); + fConst47 = (0.021093750000000001 * fConst40); + fConst48 = (0.021093750000000005 * fConst40); + fConst49 = (0.026338897580074728 * fConst3); + fConst50 = (0.0087796325266915921 * fConst3); + fConst51 = (0.026338897580074742 * fConst3); + fConst52 = (0.026338897580074745 * fConst3); + fConst53 = (0.0087796325266915939 * fConst3); + fConst54 = (0.0 - (0.97315860881060223 * fConst3)); + fConst55 = (0.0090217899191397874 * fConst54); + fConst56 = (0.027065369757419327 * fConst54); + fConst57 = (0.027065369757419331 * fConst54); + fConst58 = (0.0090217899191397891 * fConst54); + fConst59 = (0.0 - (1.3056292813137786 * fConst3)); + fConst60 = (0.020173335537918873 * fConst59); + fConst61 = (0.0 - (1.3056292813137786 * fConst34)); + fConst62 = (0.0 - (1.3056292813137791 * fConst34)); + fConst63 = (0.0 - (0.43520976043792686 * fConst34)); + fConst64 = (0.0 - (1.3056292813137795 * fConst34)); + fConst65 = (0.0 - (1.3056292813137798 * fConst34)); + fConst66 = (0.0 - (0.43520976043792792 * fConst34)); + fConst67 = (fConst33 * fConst54); + fConst68 = (0.0 - (0.44721359549995832 * fConst67)); + fConst69 = (0.0 - (1.3416407864998738 * fConst67)); + fConst70 = (0.0 - (1.3416407864998741 * fConst67)); + fConst71 = (0.0 - (0.44721359549995937 * fConst67)); + fConst72 = (fConst33 * fConst59); + fConst73 = (0.0 - fConst72); + fConst74 = (0.0 - (1.0000000000000002 * fConst72)); + fConst75 = (0.033660754908870882 * fConst3); + fConst76 = (0.021093749999999998 * fConst40); + fConst77 = (0.026338897580074724 * fConst3); + fConst78 = (0.026338897580074721 * fConst3); + fConst79 = (0.026338897580074738 * fConst3); + fConst80 = (0.0087796325266915817 * fConst3); + fConst81 = (0.0087796325266915748 * fConst3); + fConst82 = (0.026338897580074731 * fConst3); + fConst83 = (0.027065369757419324 * fConst54); + fConst84 = (0.009021789919139777 * fConst54); + fConst85 = (0.00902178991913977 * fConst54); + fConst86 = (0.027065369757419321 * fConst54); + fConst87 = (0.02017333553791887 * fConst59); + fConst88 = (0.020173335537918866 * fConst59); + fConst89 = (0.0 - (0.43520976043792636 * fConst34)); + fConst90 = (0.0 - (1.3056292813137793 * fConst34)); + fConst91 = (0.0 - (0.4352097604379267 * fConst34)); + fConst92 = (0.0 - (0.44721359549995782 * fConst67)); + fConst93 = (0.0 - (1.3416407864998736 * fConst67)); + fConst94 = (0.0 - (0.44721359549995815 * fConst67)); + fConst95 = (0.0 - (1.2884797242127563e-16 * fConst22)); + fConst96 = (0.0 - (2.5769594484255127e-16 * fConst22)); + fConst97 = (0.0 - (2.3211187223356089 * fConst22)); + fConst98 = (0.0 - (2.3211187223356093 * fConst22)); + fConst99 = (0.0 - (2.3211187223356085 * fConst22)); + fConst100 = (0.0 - (2.3211187223356098 * fConst22)); + fConst101 = (0.012698412698412698 * fConst28); + fConst102 = (0.0 - (1.595769121605731 * fConst22)); + fConst103 = (0.0 - (7.0866384831701748e-16 * fConst22)); + fConst104 = (0.0 - (1.417327696634035e-15 * fConst22)); + fConst105 = (0.0 - (4.7244256554467816e-16 * fConst22)); + fConst106 = (0.0 - (9.4488513108935631e-16 * fConst22)); + fConst107 = double(tgamma(7.0)); + fConst108 = double(tgamma(3.5)); + fConst109 = (sqrt((7.0 * (fConst1 / fConst107))) * fConst108); + fConst110 = (0.012698412698412698 * (0.0 - (6.3830764864229232 * fConst109))); + fConst111 = (0.0 - (2.256758334191026 * fConst109)); + fConst112 = (0.0 - (4.5135166683820547 * fConst109)); + fConst113 = (0.0 - (4.5135166683820476 * fConst109)); + fConst114 = (0.0 - (2.456847285129498 * fConst109)); + fConst115 = (0.0 - (2.456847285129494 * fConst109)); + fConst116 = (0.0 - (0.34992181344801421 * fConst109)); + fConst117 = (0.0 - (0.34992181344801365 * fConst109)); + fConst118 = (0.0 - (3.1492963210321352 * fConst109)); + fConst119 = (0.0 - (3.1492963210321379 * fConst109)); + fConst120 = (0.0 - (4.5489835748241987 * fConst109)); + fConst121 = (0.0 - (4.5489835748242058 * fConst109)); + fConst122 = double(tgamma(6.0)); + fConst123 = sqrt((7.0 * (fConst31 / fConst122))); + fConst124 = (fConst123 * fConst21); + fConst125 = (0.0 - (2.624413600860108 * fConst124)); + fConst126 = (0.0 - (2.6244136008601116 * fConst124)); + fConst127 = (0.0 - (2.6244136008601155 * fConst124)); + fConst128 = (0.0 - (2.6244136008601107 * fConst124)); + fConst129 = (0.0 - (2.6244136008601191 * fConst124)); + fConst130 = (0.0 - (3.0929010896773175 * fConst21)); + fConst131 = (fConst123 * fConst130); + fConst132 = (0.0 - (0.84852813742385691 * fConst131)); + fConst133 = (0.0 - (0.84852813742385813 * fConst131)); + fConst134 = (0.0 - (0.84852813742385658 * fConst131)); + fConst135 = (0.0 - (0.84852813742385946 * fConst131)); + fConst136 = (0.0 - (1.8557406538063874 * fConst21)); + fConst137 = (fConst123 * fConst136); + fConst138 = (0.0 - (1.4142135623730951 * fConst137)); + fConst139 = (0.0 - (6.1421182128237417 * fConst124)); + fConst140 = (0.0 - (4.3431334391370653 * fConst21)); + fConst141 = (fConst123 * fConst140); + fConst142 = (0.0 - (1.4142135623730951 * fConst141)); + fConst143 = (0.029831067331307477 * fConst140); + fConst144 = (0.029831067331307481 * fConst140); + fConst145 = (0.052943176160428845 * fConst21); + fConst146 = (0.052943176160428852 * fConst21); + fConst147 = (0.052943176160428991 * fConst21); + fConst148 = (0.052943176160428929 * fConst21); + fConst149 = (0.052943176160428963 * fConst21); + fConst150 = (0.052943176160428942 * fConst21); + fConst151 = (0.017117642829616822 * fConst130); + fConst152 = (0.017117642829616801 * fConst130); + fConst153 = (0.017117642829616815 * fConst130); + fConst154 = (0.017117642829616808 * fConst130); + fConst155 = (0.028529404716028006 * fConst136); + fConst156 = (0.028529404716028009 * fConst136); + fConst157 = sqrt((7.0 * (fConst2 / fConst20))); + fConst158 = (0.0 - (3.3851375012865379 * fConst3)); + fConst159 = (fConst157 * fConst158); + fConst160 = (0.012698412698412698 * (0.0 - (0.70710678118654757 * fConst159))); + fConst161 = (fConst157 * fConst3); + fConst162 = (0.0 - (2.5388531259649025 * fConst161)); + fConst163 = (0.0 - (0.5 * fConst159)); + fConst164 = (0.0 - (0.50000000000000011 * fConst159)); + fConst165 = (0.0 - ((3.5355339059327373 * fConst36) + (2.3936536824085963 * fConst3))); + fConst166 = (0.0 - (0.70710678118654757 * (fConst157 * fConst165))); + fConst167 = (0.0 - (0.92131773192356159 * fConst161)); + fConst168 = (0.0 - (0.92131773192356192 * fConst161)); + fConst169 = (0.0 - ((2.8867513459481291 * fConst40) + (2.7639531957706835 * fConst3))); + fConst170 = (fConst157 * fConst169); + fConst171 = (0.0 - (0.5 * fConst170)); + fConst172 = (0.0 - (0.50000000000000011 * fConst170)); + fConst173 = (0.057314497376279992 * fConst3); + fConst174 = (0.0089791337293529845 * fConst158); + fConst175 = (0.011287477954144622 * fConst158); + fConst176 = (0.011287477954144623 * fConst158); + fConst177 = (0.015962904407738641 * fConst165); + fConst178 = (0.019434045907762629 * fConst3); + fConst179 = (0.019434045907762633 * fConst3); + fConst180 = (0.010546875000000001 * fConst169); + fConst181 = (0.010546875000000002 * fConst169); + fConst182 = (0.045001699736364593 * fConst3); + fConst183 = (0.0 - (1.7605101637794649 * fConst3)); + fConst184 = (0.0045108949595698937 * fConst183); + fConst185 = (0.013532684878709664 * fConst183); + fConst186 = (0.013532684878709665 * fConst183); + fConst187 = (0.0045108949595698946 * fConst183); + fConst188 = (0.0 - ((1.5075567228888176 * fConst54) + (3.2276019669290172 * fConst3))); + fConst189 = (0.0045108949595698937 * fConst188); + fConst190 = (0.013532684878709664 * fConst188); + fConst191 = (0.013532684878709665 * fConst188); + fConst192 = (0.0045108949595698946 * fConst188); + fConst193 = (0.0 - ((4.5226701686664557 * fConst59) + (1.4434274804730605 * fConst3))); + fConst194 = (0.010086667768959437 * fConst193); + fConst195 = (0.0 - (2.230751560731095 * fConst161)); + fConst196 = (0.0 - (2.2307515607310959 * fConst161)); + fConst197 = (fConst157 * fConst183); + fConst198 = (0.0 - (0.22360679774997916 * fConst197)); + fConst199 = (0.0 - (0.67082039324993692 * fConst197)); + fConst200 = (0.0 - (0.67082039324993703 * fConst197)); + fConst201 = (0.0 - (0.22360679774997969 * fConst197)); + fConst202 = (fConst157 * fConst188); + fConst203 = (0.0 - (0.22360679774997916 * fConst202)); + fConst204 = (0.0 - (0.67082039324993692 * fConst202)); + fConst205 = (0.0 - (0.67082039324993703 * fConst202)); + fConst206 = (0.0 - (0.22360679774997969 * fConst202)); + fConst207 = (fConst157 * fConst193); + fConst208 = (0.0 - (0.5 * fConst207)); + fConst209 = (0.0 - (0.50000000000000011 * fConst207)); + fConst210 = (0.01128747795414462 * fConst158); + fConst211 = (0.019434045907762626 * fConst3); + fConst212 = (0.010546874999999999 * fConst169); + fConst213 = (0.045001699736364587 * fConst3); + fConst214 = (0.045001699736364573 * fConst3); + fConst215 = (0.013532684878709662 * fConst183); + fConst216 = (0.0045108949595698885 * fConst183); + fConst217 = (0.004510894959569885 * fConst183); + fConst218 = (0.01353268487870966 * fConst183); + fConst219 = (0.013532684878709662 * fConst188); + fConst220 = (0.0045108949595698885 * fConst188); + fConst221 = (0.004510894959569885 * fConst188); + fConst222 = (0.01353268487870966 * fConst188); + fConst223 = (0.010086667768959435 * fConst193); + fConst224 = (0.010086667768959433 * fConst193); + fConst225 = (0.0 - (0.22360679774997891 * fConst197)); + fConst226 = (0.0 - (0.67082039324993681 * fConst197)); + fConst227 = (0.0 - (0.22360679774997907 * fConst197)); + fConst228 = (0.0 - (0.22360679774997891 * fConst202)); + fConst229 = (0.0 - (0.67082039324993681 * fConst202)); + fConst230 = (0.0 - (0.22360679774997907 * fConst202)); + fConst231 = (0.0 - (5.8273688116286149e-16 * fConst124)); + fConst232 = (0.0 - (1.165473762325723e-15 * fConst124)); + fConst233 = (0.0 - (3.4992181344801496 * fConst124)); + fConst234 = (0.0 - (3.4992181344801501 * fConst124)); + fConst235 = (0.0 - (3.4992181344801487 * fConst124)); + fConst236 = (0.0 - (3.4992181344801505 * fConst124)); + fConst237 = (0.0 - (1.1313708498984762 * fConst131)); + fConst238 = (0.0 - (1.1313708498984758 * fConst131)); + fConst239 = (0.0 - (1.1313708498984765 * fConst131)); + fConst240 = (0.0 - (3.1401849173675503e-16 * fConst137)); + fConst241 = (0.0 - (6.2803698347351007e-16 * fConst137)); + fConst242 = (0.0 - (5.6418958354775643 * fConst124)); + fConst243 = (0.0 - (3.9894228040143274 * fConst21)); + fConst244 = (0.0 - (1.4142135623730951 * (fConst123 * fConst243))); + fConst245 = (0.0 - (1.3638242119692871e-15 * fConst124)); + fConst246 = (0.0 - (2.7276484239385742e-15 * fConst124)); + fConst247 = (0.0 - (3.1401849173675503e-16 * fConst141)); + fConst248 = (0.0 - (6.2803698347351007e-16 * fConst141)); + fConst249 = (0.12736554972506672 * fConst21); + fConst250 = (0.031925808815477283 * fConst243); + fConst251 = (2.8768166971227152e-17 * fConst21); + fConst252 = (5.7536333942454304e-17 * fConst21); + fConst253 = (6.6238275600721768e-18 * fConst140); + fConst254 = (1.3247655120144354e-17 * fConst140); + fConst255 = (2.3511493268037518e-17 * fConst21); + fConst256 = (0.070590901547238516 * fConst21); + fConst257 = (0.070590901547238558 * fConst21); + fConst258 = (0.07059090154723846 * fConst21); + fConst259 = (0.022823523772822384 * fConst130); + fConst260 = (0.022823523772822398 * fConst130); + fConst261 = (0.022823523772822367 * fConst130); + fConst262 = (1.2669600797833527e-17 * fConst136); + fConst263 = (0.0 - (0.34992181344801404 * fConst109)); + fConst264 = (0.0 - (0.34992181344801415 * fConst109)); + fConst265 = (0.0 - (4.548983574824196 * fConst109)); + fConst266 = (0.0 - (3.1492963210321285 * fConst109)); + fConst267 = (0.0 - (3.1492963210321339 * fConst109)); + fConst268 = (0.0 - (4.5489835748241934 * fConst109)); + fConst269 = (0.0 - (4.5135166683820485 * fConst109)); + fConst270 = (0.0 - (4.5135166683820538 * fConst109)); + fConst271 = (0.0 - (2.4568472851294949 * fConst109)); + fConst272 = (0.0 - (2.4568472851294976 * fConst109)); + fConst273 = (double(tgamma(4.5)) * sqrt((9.0 * (fConst1 / double(tgamma(9.0)))))); + fConst274 = (0.0 - (1.9878387281720961e-16 * fConst273)); + fConst275 = (0.0 - (10.128518061100836 * fConst273)); + fConst276 = (0.0 - (10.128518061100845 * fConst273)); + fConst277 = (0.0 - (10.12851806110084 * fConst273)); + fConst278 = (0.0 - (10.12851806110085 * fConst273)); + fConst279 = sqrt((9.0 * (fConst31 / double(tgamma(8.0))))); + fConst280 = (fConst108 * fConst279); + fConst281 = (0.0 - (11.170383851240118 * fConst280)); + fConst282 = (0.0 - (7.898654169668589 * fConst108)); + fConst283 = (0.0 - (1.4142135623730951 * (fConst279 * fConst282))); + fConst284 = (0.0 - (9.9292300899912185 * fConst280)); + fConst285 = (0.0 - (9.9292300899912025 * fConst280)); + fConst286 = (0.0 - (9.9292300899912096 * fConst108)); + fConst287 = (fConst279 * fConst286); + fConst288 = (0.0 - (1.0000000000000009 * fConst287)); + fConst289 = (0.0 - (0.99999999999999933 * fConst287)); + fConst290 = (0.25217092292041182 * fConst108); + fConst291 = (0.031925808815477283 * fConst282); + fConst292 = (0.20944469721075218 * fConst108); + fConst293 = (0.20944469721075201 * fConst108); + fConst294 = (0.021093750000000012 * fConst286); + fConst295 = (0.021093749999999994 * fConst286); + fConst296 = (0.044696311044975172 * fConst108); + fConst297 = (0.19368401452822653 * fConst108); + fConst298 = (0.19368401452822659 * fConst108); + fConst299 = (0.13408893313492587 * fConst108); + fConst300 = (0.13408893313492612 * fConst108); + fConst301 = (0.0 - (8.2571033474838984 * fConst108)); + fConst302 = (0.023456653789763436 * fConst301); + fConst303 = (0.02345665378976344 * fConst301); + fConst304 = (0.016239221854451587 * fConst301); + fConst305 = (0.016239221854451615 * fConst301); + fConst306 = (0.0 - (2.2156133258658013 * fConst108)); + fConst307 = (0.020173335537918863 * fConst306); + fConst308 = (0.0 - (2.2156133258658035 * fConst280)); + fConst309 = (0.0 - (2.2156133258658 * fConst280)); + fConst310 = (0.0 - (6.6468399775974225 * fConst280)); + fConst311 = (0.0 - (6.6468399775974278 * fConst280)); + fConst312 = (0.0 - (9.6009910787518393 * fConst280)); + fConst313 = (0.0 - (9.6009910787518553 * fConst280)); + fConst314 = (fConst279 * fConst301); + fConst315 = (0.0 - (0.80498447189992428 * fConst314)); + fConst316 = (0.0 - (0.80498447189992484 * fConst314)); + fConst317 = (0.0 - (1.1627553482998914 * fConst314)); + fConst318 = (0.0 - (1.1627553482998934 * fConst314)); + fConst319 = (fConst279 * fConst306); + fConst320 = (0.0 - (1.0000000000000009 * fConst319)); + fConst321 = (0.0 - (0.99999999999999933 * fConst319)); + fConst322 = sqrt((9.0 * (fConst2 / fConst107))); + fConst323 = (fConst21 * fConst322); + fConst324 = (0.0 - (6.8578507705370146 * fConst323)); + fConst325 = (0.0 - (3.7301790647785582 * fConst21)); + fConst326 = (fConst322 * fConst325); + fConst327 = (0.0 - (0.42426406871192845 * fConst326)); + fConst328 = (0.0 - (0.42426406871192907 * fConst326)); + fConst329 = (0.0 - (0.42426406871192829 * fConst326)); + fConst330 = (0.0 - (0.42426406871192973 * fConst326)); + fConst331 = (0.0 - ((2.1105794120443448 * fConst130) + (10.257992428141025 * fConst21))); + fConst332 = (fConst322 * fConst331); + fConst333 = (0.0 - (0.42426406871192845 * fConst332)); + fConst334 = (0.0 - (0.42426406871192907 * fConst332)); + fConst335 = (0.0 - (0.42426406871192829 * fConst332)); + fConst336 = (0.0 - (0.42426406871192973 * fConst332)); + fConst337 = (0.0 - ((6.3317382361330381 * fConst136) + (2.0515984856282001 * fConst21))); + fConst338 = (fConst322 * fConst337); + fConst339 = (0.0 - (0.70710678118654757 * fConst338)); + fConst340 = (0.0 - (11.283791670955125 * fConst21)); + fConst341 = (fConst322 * fConst340); + fConst342 = (0.0 - (0.70710678118654757 * fConst341)); + fConst343 = (0.022574955908289243 * fConst342); + fConst344 = (0.0 - (7.0923072071365816 * fConst323)); + fConst345 = (0.0 - ((4.0414518843273806 * fConst140) + (7.5225277806367483 * fConst21))); + fConst346 = (fConst322 * fConst345); + fConst347 = (0.0 - (0.70710678118654757 * fConst346)); + fConst348 = (0.14960335515053727 * fConst21); + fConst349 = (0.14960335515053733 * fConst21); + fConst350 = (0.014915533665653739 * fConst345); + fConst351 = (0.01491553366565374 * fConst345); + fConst352 = (0.13834572466301867 * fConst21); + fConst353 = (0.1383457246630187 * fConst21); + fConst354 = (0.008558821414808411 * fConst325); + fConst355 = (0.0085588214148084006 * fConst325); + fConst356 = (0.0085588214148084076 * fConst325); + fConst357 = (0.0085588214148084041 * fConst325); + fConst358 = (0.008558821414808411 * fConst331); + fConst359 = (0.0085588214148084006 * fConst331); + fConst360 = (0.0085588214148084076 * fConst331); + fConst361 = (0.0085588214148084041 * fConst331); + fConst362 = (0.014264702358014003 * fConst337); + fConst363 = (0.014264702358014004 * fConst337); + fConst364 = sqrt((9.0 * (fConst32 / fConst122))); + fConst365 = (fConst3 * fConst364); + fConst366 = (0.0 - (0.99735570100357918 * fConst365)); + fConst367 = (0.0 - ((2.4748737341529159 * fConst165) + (4.0 * fConst36))); + fConst368 = (0.0 - (0.47140452079103168 * (fConst364 * fConst367))); + fConst369 = (0.0 - (2.6596152026762163 * fConst3)); + fConst370 = (fConst364 * fConst369); + fConst371 = (0.0 - (0.33333333333333331 * fConst370)); + fConst372 = (0.0 - (0.33333333333333343 * fConst370)); + fConst373 = (0.0 - ((2.0207259421636903 * fConst169) + (4.0 * fConst40))); + fConst374 = (fConst364 * fConst373); + fConst375 = (0.0 - (0.33333333333333331 * fConst374)); + fConst376 = (0.0 - (0.33333333333333343 * fConst374)); + fConst377 = (0.02251526097503671 * fConst3); + fConst378 = (0.010641936271825759 * fConst367); + fConst379 = (0.0070312500000000002 * fConst369); + fConst380 = (0.007031250000000001 * fConst369); + fConst381 = (0.0070312500000000002 * fConst373); + fConst382 = (0.007031250000000001 * fConst373); + fConst383 = (0.059861130863806261 * fConst3); + fConst384 = ((1.0552897060221724 * fConst183) - (3.8926344352424089 * fConst3)); + fConst385 = (0.0030072633063799288 * fConst384); + fConst386 = (0.0090217899191397753 * fConst384); + fConst387 = (0.009021789919139777 * fConst384); + fConst388 = (0.0030072633063799293 * fConst384); + fConst389 = (0.0 - ((1.0552897060221724 * fConst188) + (4.0 * fConst54))); + fConst390 = (0.0030072633063799288 * fConst389); + fConst391 = (0.0090217899191397753 * fConst389); + fConst392 = (0.009021789919139777 * fConst389); + fConst393 = (0.0030072633063799293 * fConst389); + fConst394 = (0.0 - ((3.1658691180665191 * fConst193) + (4.0 * fConst59))); + fConst395 = (0.0067244451793062911 * fConst394); + fConst396 = (0.0 - (2.9673392757131363 * fConst365)); + fConst397 = (0.0 - (2.9673392757131376 * fConst365)); + fConst398 = (fConst364 * fConst384); + fConst399 = (0.0 - (0.1490711984999861 * fConst398)); + fConst400 = (0.0 - (0.44721359549995793 * fConst398)); + fConst401 = (0.0 - (0.44721359549995798 * fConst398)); + fConst402 = (0.0 - (0.14907119849998646 * fConst398)); + fConst403 = (fConst364 * fConst389); + fConst404 = (0.0 - (0.1490711984999861 * fConst403)); + fConst405 = (0.0 - (0.44721359549995793 * fConst403)); + fConst406 = (0.0 - (0.44721359549995798 * fConst403)); + fConst407 = (0.0 - (0.14907119849998646 * fConst403)); + fConst408 = (fConst364 * fConst394); + fConst409 = (0.0 - (0.33333333333333331 * fConst408)); + fConst410 = (0.0 - (0.33333333333333343 * fConst408)); + fConst411 = (0.0070312499999999993 * fConst369); + fConst412 = (0.0070312499999999993 * fConst373); + fConst413 = (0.059861130863806254 * fConst3); + fConst414 = (0.05986113086380624 * fConst3); + fConst415 = (0.0030072633063799254 * fConst384); + fConst416 = (0.0030072633063799232 * fConst384); + fConst417 = (0.0090217899191397718 * fConst384); + fConst418 = (0.0030072633063799254 * fConst389); + fConst419 = (0.0030072633063799232 * fConst389); + fConst420 = (0.0090217899191397718 * fConst389); + fConst421 = (0.0067244451793062893 * fConst394); + fConst422 = (0.0067244451793062885 * fConst394); + fConst423 = (0.0 - (0.14907119849998593 * fConst398)); + fConst424 = (0.0 - (0.44721359549995787 * fConst398)); + fConst425 = (0.0 - (0.14907119849998604 * fConst398)); + fConst426 = (0.0 - (0.14907119849998593 * fConst403)); + fConst427 = (0.0 - (0.44721359549995787 * fConst403)); + fConst428 = (0.0 - (0.14907119849998604 * fConst403)); + fConst429 = (0.0 - (1.522748764978713e-15 * fConst323)); + fConst430 = (0.0 - (3.0454975299574259e-15 * fConst323)); + fConst431 = (0.0 - (0.56568542494923812 * fConst326)); + fConst432 = (0.0 - (0.5656854249492379 * fConst326)); + fConst433 = (0.0 - (0.56568542494923824 * fConst326)); + fConst434 = (0.0 - (0.56568542494923812 * fConst332)); + fConst435 = (0.0 - (0.5656854249492379 * fConst332)); + fConst436 = (0.0 - (0.56568542494923824 * fConst332)); + fConst437 = (0.0 - (1.5700924586837752e-16 * fConst338)); + fConst438 = (0.0 - (3.1401849173675503e-16 * fConst338)); + fConst439 = (0.012698412698412698 * fConst342); + fConst440 = (0.0 - (9.9735570100358153 * fConst323)); + fConst441 = (0.0 - (1.5700924586837752e-16 * fConst341)); + fConst442 = (0.0 - (3.1401849173675503e-16 * fConst341)); + fConst443 = (0.0 - ((4.9497474683058318 * fConst243) + (5.6418958354775643 * fConst21))); + fConst444 = (0.0 - (0.70710678118654757 * (fConst322 * fConst443))); + fConst445 = (0.0 - (1.5748085518155944e-15 * fConst323)); + fConst446 = (0.0 - (3.1496171036311889e-15 * fConst323)); + fConst447 = (0.0 - (1.5700924586837752e-16 * fConst346)); + fConst448 = (0.0 - (3.1401849173675503e-16 * fConst346)); + fConst449 = (0.0089791337293529845 * fConst340); + fConst450 = (0.22515260975036763 * fConst21); + fConst451 = (3.5444768026723675e-18 * fConst340); + fConst452 = (7.088953605344735e-18 * fConst340); + fConst453 = (0.015962904407738641 * fConst443); + fConst454 = (3.3218617889860196e-17 * fConst21); + fConst455 = (6.6437235779720392e-17 * fConst21); + fConst456 = (3.3119137800360884e-18 * fConst345); + fConst457 = (6.6238275600721768e-18 * fConst345); + fConst458 = (6.1437843551734282e-17 * fConst21); + fConst459 = (0.011411761886411192 * fConst325); + fConst460 = (0.011411761886411199 * fConst325); + fConst461 = (0.011411761886411183 * fConst325); + fConst462 = (0.011411761886411192 * fConst331); + fConst463 = (0.011411761886411199 * fConst331); + fConst464 = (0.011411761886411183 * fConst331); + fConst465 = (6.3348003989167635e-18 * fConst337); + fConst466 = (0.0 - (2.2156133258658022 * fConst280)); + fConst467 = (0.0 - (2.2156133258658031 * fConst280)); + fConst468 = (0.0 - (9.600991078751834 * fConst280)); + fConst469 = (0.0 - (6.6468399775974083 * fConst280)); + fConst470 = (0.0 - (6.6468399775974198 * fConst280)); + fConst471 = (0.0 - (9.6009910787518287 * fConst280)); + fConst472 = (0.0 - (1.1627553482998907 * fConst314)); + fConst473 = (0.0 - (0.8049844718999225 * fConst314)); + fConst474 = (0.0 - (0.80498447189992395 * fConst314)); + fConst475 = (0.0 - (1.1627553482998902 * fConst314)); + fConst476 = (0.0 - (1.0000000000000004 * fConst319)); + fConst477 = (0.0 - (1.0000000000000007 * fConst319)); + fConst478 = (0.0 - (9.929230089991206 * fConst280)); + fConst479 = (0.0 - (9.9292300899912167 * fConst280)); + fConst480 = (0.0 - (0.99999999999999967 * fConst287)); + fConst481 = (0.0 - (1.0000000000000007 * fConst287)); + fConst482 = (0.20944469721075193 * fConst108); + fConst483 = (0.021093749999999988 * fConst286); + fConst484 = (0.044696311044975207 * fConst108); + fConst485 = (0.044696311044975165 * fConst108); + fConst486 = (0.13408893313492565 * fConst108); + fConst487 = (0.19368401452822634 * fConst108); + fConst488 = (0.19368401452822642 * fConst108); + fConst489 = (0.13408893313492534 * fConst108); + fConst490 = (0.01623922185445156 * fConst301); + fConst491 = (0.023456653789763415 * fConst301); + fConst492 = (0.023456653789763426 * fConst301); + fConst493 = (0.016239221854451522 * fConst301); + fConst494 = (0.02017333553791888 * fConst306); + fConst495 = (0.020173335537918856 * fConst306); + fConst496 = (0.0 - (12.766152972845845 * fConst273)); + fConst497 = (0.0 - (12.766152972845846 * fConst273)); + fConst498 = (0.0 - (5.6738457657092614 * fConst273)); + fConst499 = (0.0 - (5.6738457657092622 * fConst273)); + fConst500 = (0.02017333553791887 * (0.0 - (0.42202158587919975 * fConst273))); } @@ -999,7 +2071,107 @@ class mydsp : public dsp { virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec0[l0] = 0.0; + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec12[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec14[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec18[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec20[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec22[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec23[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec24[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec25[l25] = 0.0; } @@ -1018,14 +2190,124 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36e3900", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x36fd560", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3707f80", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3719d10", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x372ed00", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3751ae0", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x375c970", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3773880", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x378bc00", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37a55a0", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37c2960", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37ebae0", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x37f2890", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x380ad90", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3828e70", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x383efd0", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38530d0", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3876150", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3896e70", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38bb290", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38c2d20", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38d8950", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x38f9600", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3916590", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3928fb0", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->declare(&fHslider0, "unit", "dB"); @@ -1112,7 +2394,7 @@ class mydsp : public dsp { FAUSTFLOAT* output24 = outputs[24]; double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (fSlow0 + (0.999 * fRec0[1])); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); double fTemp0 = double(input0[i]); double fTemp1 = double(input1[i]); double fTemp2 = double(input2[i]); @@ -1134,156 +2416,185 @@ class mydsp : public dsp { double fTemp18 = double(input17[i]); double fTemp19 = double(input18[i]); double fTemp20 = double(input19[i]); - double fTemp21 = (fTemp19 + fTemp20); - double fTemp22 = double(input20[i]); - double fTemp23 = double(input21[i]); - double fTemp24 = ((fTemp21 + fTemp22) + fTemp23); - double fTemp25 = double(input22[i]); - double fTemp26 = double(input23[i]); - double fTemp27 = double(input24[i]); - double fTemp28 = double(input25[i]); - double fTemp29 = ((((fTemp24 + fTemp25) + fTemp26) + fTemp27) + fTemp28); - double fTemp30 = double(input26[i]); - double fTemp31 = double(input27[i]); - double fTemp32 = (fTemp30 + fTemp31); - double fTemp33 = double(input28[i]); - double fTemp34 = double(input29[i]); - double fTemp35 = ((fTemp32 + fTemp33) + fTemp34); - double fTemp36 = double(input30[i]); - double fTemp37 = double(input31[i]); - double fTemp38 = double(input32[i]); - double fTemp39 = double(input33[i]); - double fTemp40 = double(input34[i]); - double fTemp41 = double(input35[i]); - double fTemp42 = double(input36[i]); - double fTemp43 = double(input37[i]); - double fTemp44 = double(input38[i]); - double fTemp45 = double(input39[i]); - double fTemp46 = double(input40[i]); - double fTemp47 = double(input41[i]); - double fTemp48 = double(input42[i]); - double fTemp49 = double(input43[i]); - double fTemp50 = double(input44[i]); - double fTemp51 = double(input45[i]); - double fTemp52 = double(input46[i]); - double fTemp53 = double(input47[i]); - double fTemp54 = double(input48[i]); - double fTemp55 = double(input49[i]); - output0[i] = FAUSTFLOAT((fRec0[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * fTemp29)) + (0.02017333553791887 * ((((((((((((((((((((fTemp35 + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53) + fTemp54) + fTemp55))))); - double fTemp56 = (fTemp37 + fTemp38); - double fTemp57 = (fTemp39 + fTemp47); - double fTemp58 = (fTemp19 - fTemp22); - double fTemp59 = ((fTemp58 + fTemp25) - fTemp27); - double fTemp60 = (fTemp7 - fTemp9); - double fTemp61 = (fTemp2 - fTemp4); - double fTemp62 = (fTemp11 - fTemp13); - double fTemp63 = (fTemp8 + fTemp17); - double fTemp64 = (fTemp20 + fTemp26); - double fTemp65 = (fTemp36 + fTemp44); - double fTemp66 = (fTemp32 - fTemp33); - double fTemp67 = (fTemp23 + fTemp28); - double fTemp68 = (fTemp40 + fTemp48); - double fTemp69 = (fTemp43 + fTemp51); - double fTemp70 = (fTemp34 + fTemp55); - output1[i] = FAUSTFLOAT((fRec0[0] * (((2.6935244158092871e-18 * fTemp3) + (((0.031605542669238242 * ((((((fTemp56 - fTemp41) - fTemp42) + fTemp45) + fTemp46) - fTemp49) - fTemp50)) + ((0.010535180889746096 * fTemp57) + (((0.021093749999999994 * fTemp59) + (((0.027648561470568506 * ((((fTemp60 + fTemp12) - fTemp14) + fTemp16) - fTemp18)) + (((0.021994295969128601 * fTemp61) + (0.027648561470568499 * fTemp62)) + (3.3859722305960555e-18 * fTemp63))) + (0.021093749999999998 * fTemp64))) + (0.010535180889746094 * fTemp65)))) + (0.010535180889746065 * (((fTemp66 + fTemp52) + fTemp53) - fTemp54)))) - ((((0.021093750000000001 * fTemp67) + (0.010535180889746089 * fTemp68)) + (0.010535180889746113 * fTemp69)) + (0.010535180889746067 * fTemp70))))); - double fTemp71 = (fTemp0 - fTemp5); - double fTemp72 = ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18); - double fTemp73 = ((((fTemp24 - fTemp25) - fTemp26) - fTemp27) - fTemp28); - double fTemp74 = (((((((fTemp36 + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43); - double fTemp75 = ((((((((fTemp74 - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49) - fTemp50) - fTemp51); - double fTemp76 = ((((fTemp35 - fTemp52) - fTemp53) - fTemp54) - fTemp55); - output2[i] = FAUSTFLOAT((fRec0[0] * (((((0.021994295969128601 * fTemp71) + (0.027648561470568499 * fTemp72)) + (0.021093750000000001 * fTemp73)) + (0.010535180889746075 * fTemp75)) + (0.031605542669238249 * fTemp76)))); - double fTemp77 = (fTemp30 - fTemp31); - double fTemp78 = ((fTemp77 + fTemp52) - fTemp53); - double fTemp79 = (fTemp42 + fTemp50); - double fTemp80 = (fTemp36 - fTemp39); - double fTemp81 = ((((fTemp80 - fTemp40) + fTemp44) - fTemp47) - fTemp48); - double fTemp82 = (fTemp37 + fTemp45); - double fTemp83 = (fTemp19 + fTemp25); - double fTemp84 = (fTemp6 - fTemp8); - double fTemp85 = (fTemp7 + fTemp16); - double fTemp86 = (fTemp1 - fTemp3); - double fTemp87 = (fTemp9 + fTemp18); - double fTemp88 = (fTemp22 + fTemp27); - double fTemp89 = (fTemp38 + fTemp46); - double fTemp90 = (fTemp41 + fTemp49); - double fTemp91 = (fTemp33 + fTemp54); - output3[i] = FAUSTFLOAT((fRec0[0] * (((0.027648561470568496 * fTemp14) + ((0.010535180889746065 * fTemp78) + ((0.010535180889746074 * fTemp79) + ((0.031605542669238242 * fTemp81) + ((0.010535180889746081 * fTemp82) + ((0.021093749999999998 * fTemp83) + ((0.027648561470568506 * ((((fTemp84 + fTemp11) - fTemp13) + fTemp15) - fTemp17)) + ((1.6929861152980278e-18 * fTemp85) + ((1.3467622079046435e-18 * ((fTemp0 + fTemp2) + fTemp5)) + ((0.021994295969128601 * fTemp86) + (((0.021093749999999991 * fTemp67) + (0.031605542669238228 * fTemp69)) + (0.010535180889746063 * fTemp70)))))))))))) - ((0.027648561470568499 * fTemp12) + ((4.0402866237139308e-18 * fTemp4) + ((((((5.0789583458940831e-18 * fTemp87) + (0.021093749999999994 * fTemp64)) + (0.021093750000000001 * fTemp88)) + (0.010535180889746079 * fTemp89)) + (0.010535180889746086 * fTemp90)) + (0.010535180889746067 * fTemp91))))))); - double fTemp92 = (fTemp19 - fTemp20); - double fTemp93 = ((fTemp92 + fTemp22) - fTemp23); - double fTemp94 = ((((fTemp93 + fTemp25) - fTemp26) + fTemp27) - fTemp28); - double fTemp95 = (((fTemp11 - fTemp12) + fTemp13) - fTemp14); - double fTemp96 = ((fTemp77 + fTemp33) - fTemp34); - double fTemp97 = ((((fTemp96 + fTemp52) - fTemp53) + fTemp54) - fTemp55); - output4[i] = FAUSTFLOAT((fRec0[0] * (((9.0343555392074636e-18 * fTemp4) + ((3.0114518464024883e-18 * fTemp2) + (((0.027231914153020897 * fTemp94) + ((0.043716214137085485 * fTemp95) + (((0.021308452520676556 * fTemp82) + ((8.0305382570733035e-18 * fTemp87) + ((2.6768460856911014e-18 * fTemp85) + ((0.021308452520676577 * fTemp65) + (0.02130845252067657 * fTemp68))))) + (0.021308452520676563 * fTemp90)))) + (0.0071028175068921654 * fTemp97)))) - ((6.0229036928049765e-18 * fTemp3) + ((0.021308452520676542 * fTemp79) + ((0.021308452520676546 * fTemp89) + (((5.3536921713822029e-18 * fTemp63) + (0.021308452520676584 * fTemp57)) + (0.021308452520676618 * fTemp69)))))))); - double fTemp98 = (fTemp38 - fTemp42); - double fTemp99 = ((fTemp98 - fTemp46) + fTemp50); - double fTemp100 = (fTemp37 - fTemp41); - double fTemp101 = ((fTemp100 - fTemp45) + fTemp49); - double fTemp102 = (fTemp39 - fTemp47); - double fTemp103 = (fTemp20 - fTemp23); - double fTemp104 = (fTemp8 - fTemp17); - double fTemp105 = ((fTemp60 - fTemp16) + fTemp18); - double fTemp106 = ((fTemp58 - fTemp25) + fTemp27); - double fTemp107 = (fTemp36 - fTemp44); - double fTemp108 = (fTemp40 - fTemp48); - double fTemp109 = (fTemp43 - fTemp51); - double fTemp110 = (fTemp34 - fTemp55); - output5[i] = FAUSTFLOAT((fRec0[0] * ((((0.021308452520676553 * fTemp99) + ((0.021308452520676546 * fTemp101) + ((0.0071028175068921931 * fTemp102) + (((0.027231914153020911 * ((fTemp103 - fTemp26) + fTemp28)) + (((5.3536921713822013e-18 * fTemp104) + (0.043716214137085485 * fTemp105)) + (0.027231914153020904 * fTemp106))) + (0.0071028175068921914 * fTemp107))))) + (0.021308452520676528 * (((fTemp66 - fTemp52) - fTemp53) + fTemp54))) - (((0.0071028175068921871 * fTemp108) + (0.0071028175068922053 * fTemp109)) + (0.021308452520676532 * fTemp110))))); - double fTemp111 = ((((fTemp10 + fTemp15) + fTemp16) + fTemp17) + fTemp18); - double fTemp112 = (fTemp0 + fTemp5); - double fTemp113 = ((((fTemp35 + fTemp52) + fTemp53) + fTemp54) + fTemp55); - double fTemp114 = (((fTemp1 + fTemp2) + fTemp3) + fTemp4); - double fTemp115 = (((fTemp11 + fTemp12) + fTemp13) + fTemp14); - double fTemp116 = ((((((((fTemp74 + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51); - output6[i] = FAUSTFLOAT((fRec0[0] * ((((0.012619783999998805 * fTemp111) + ((0.028394513999997331 * fTemp112) + (5.236595479505967e-18 * fTemp29))) + (0.032806508796871948 * fTemp113)) - (((0.014197256999998666 * fTemp114) + (0.025239567999997631 * fTemp115)) + (0.01640325439843596 * fTemp116))))); - double fTemp117 = ((fTemp77 - fTemp52) + fTemp53); - double fTemp118 = (fTemp42 - fTemp50); - double fTemp119 = ((fTemp80 - fTemp44) + fTemp47); - double fTemp120 = (fTemp37 - fTemp45); - double fTemp121 = (fTemp23 - fTemp28); - double fTemp122 = ((fTemp84 - fTemp15) + fTemp17); - double fTemp123 = (fTemp7 - fTemp16); - double fTemp124 = (fTemp38 - fTemp46); - double fTemp125 = (fTemp20 - fTemp26); - double fTemp126 = (fTemp9 - fTemp18); - double fTemp127 = (fTemp41 - fTemp49); - double fTemp128 = (fTemp33 - fTemp54); - output7[i] = FAUSTFLOAT((fRec0[0] * (((0.021308452520676528 * fTemp117) + ((0.0071028175068921775 * fTemp118) + ((0.021308452520676542 * fTemp119) + ((0.0071028175068921827 * fTemp120) + ((0.027231914153020901 * fTemp121) + ((0.043716214137085485 * fTemp122) + ((2.6768460856911007e-18 * fTemp123) + ((((3.0114518464024883e-18 * fTemp71) + (0.027231914153020911 * fTemp106)) + (0.021308452520676539 * fTemp109)) + (0.021308452520676525 * fTemp110))))))))) - ((((0.007102817506892181 * fTemp124) + ((0.027231914153020904 * fTemp125) + ((8.0305382570733005e-18 * fTemp126) + (0.021308452520676546 * fTemp108)))) + (0.0071028175068921853 * fTemp127)) + (0.021308452520676532 * fTemp128))))); - double fTemp129 = (((fTemp6 - fTemp7) + fTemp8) - fTemp9); - double fTemp130 = ((((fTemp129 + fTemp15) - fTemp16) + fTemp17) - fTemp18); - double fTemp131 = (((fTemp1 - fTemp2) + fTemp3) - fTemp4); - double fTemp132 = (fTemp31 + fTemp53); - double fTemp133 = (fTemp30 + fTemp52); - output8[i] = FAUSTFLOAT((fRec0[0] * (((1.3384230428455503e-17 * fTemp13) + ((2.6768460856911007e-18 * fTemp11) + ((0.021858107068542749 * fTemp130) + ((0.024590370452110585 * fTemp131) + ((9.2199121612079837e-35 * fTemp112) + (((8.3373691255381378e-18 * fTemp88) + ((1.6674738251076273e-18 * fTemp83) + ((((0.028411270027568724 * fTemp65) + (0.028411270027568717 * fTemp57)) + (0.028411270027568731 * fTemp68)) + (0.028411270027568696 * fTemp69)))) + (2.1746106811858183e-18 * fTemp91))))))) - ((1.8737922599837705e-17 * fTemp14) + ((8.0305382570733005e-18 * fTemp12) + ((1.3047664087114909e-18 * fTemp132) + ((1.1422201709353029e-18 * fTemp133) + ((0.028411270027568748 * fTemp79) + ((0.028411270027568734 * fTemp90) + ((0.028411270027568745 * fTemp89) + ((0.028411270027568741 * fTemp82) + (((5.0024214753228816e-18 * fTemp64) + (1.167231677575339e-17 * fTemp67)) + (3.0444549536601452e-18 * fTemp70))))))))))))); - double fTemp134 = (0.033388810063348803 * fTemp11); - double fTemp135 = (6.1334249057128588e-18 * fTemp63); - double fTemp136 = ((fTemp32 + fTemp52) + fTemp53); - double fTemp137 = ((fTemp60 + fTemp16) - fTemp18); - output9[i] = FAUSTFLOAT((fRec0[0] * (((0.033388810063348796 * fTemp12) + (fTemp134 + ((9.7582192711380499e-18 * fTemp3) + (((0.020818537549440803 * fTemp79) + ((0.020818537549440772 * fTemp90) + ((0.016982082124440745 * fTemp83) + ((0.030071220904747838 * fTemp57) + ((fTemp135 + (0.016982082124440741 * fTemp64)) + (0.030071220904747824 * fTemp65)))))) + (0.0023131708388267431 * fTemp136))))) - ((0.033388810063348817 * fTemp14) + ((0.033388810063348852 * fTemp13) + ((0.016694405031674409 * fTemp137) + ((0.002313170838826747 * fTemp91) + ((0.02081853754944079 * fTemp89) + ((0.020818537549440783 * fTemp82) + ((0.016982082124440766 * fTemp88) + (((((0.026560635762986527 * fTemp61) + (0.016982082124440748 * fTemp67)) + (0.030071220904747821 * fTemp68)) + (0.030071220904747842 * fTemp69)) + (0.0023131708388267444 * fTemp70)))))))))))); - output10[i] = FAUSTFLOAT((fRec0[0] * ((((0.041597435974919175 * ((((fTemp93 - fTemp25) + fTemp26) - fTemp27) + fTemp28)) + ((0.016998264729033874 * fTemp127) + ((0.016998264729033888 * fTemp119) + ((0.016998264729033867 * fTemp120) + ((1.5023761394674526e-17 * fTemp126) + ((5.0079204648915091e-18 * fTemp123) + (0.016998264729033881 * fTemp108))))))) + (0.016998264729033836 * ((((fTemp96 - fTemp52) + fTemp53) - fTemp54) + fTemp55))) - ((0.016998264729033857 * fTemp118) + ((0.016998264729033864 * fTemp124) + ((1.0015840929783018e-17 * fTemp104) + (0.016998264729033919 * fTemp109))))))); - output11[i] = FAUSTFLOAT((fRec0[0] * ((((0.038794291597509752 * fTemp137) + ((0.0053753232814252143 * fTemp69) + (((0.013154264250377145 * fTemp59) + ((4.7509305030079371e-18 * fTemp63) + (0.013154264250377147 * fTemp64))) + (0.0053753232814252021 * fTemp68)))) + (0.030460165261409405 * fTemp136)) - ((2.5195613817171963e-18 * fTemp3) + ((0.016125969844275594 * ((fTemp98 + fTemp46) - fTemp50)) + ((0.016125969844275591 * ((fTemp100 + fTemp45) - fTemp49)) + ((0.025862861065006511 * (fTemp12 - fTemp14)) + ((0.030460165261409402 * fTemp91) + ((((((0.020573779994945588 * fTemp61) + (0.025862861065006505 * fTemp62)) + (0.013154264250377148 * fTemp67)) + (0.0053753232814252047 * fTemp65)) + (0.0053753232814252056 * fTemp57)) + (0.030460165261409412 * fTemp70)))))))))); - output12[i] = FAUSTFLOAT((fRec0[0] * (((0.033596842045264641 * fTemp71) + (0.0263335984839893 * fTemp76)) - (((0.010558468816293319 * fTemp72) + (0.021480823570105497 * fTemp73)) + (0.020481687709769415 * fTemp75))))); - double fTemp138 = ((fTemp84 + fTemp15) - fTemp17); - output13[i] = FAUSTFLOAT((fRec0[0] * (((0.025862861065006505 * fTemp12) + ((3.7793420725757941e-18 * fTemp4) + ((0.038794291597509752 * fTemp138) + ((5.0391227634343926e-18 * fTemp112) + ((0.030460165261409402 * fTemp78) + ((0.0053753232814252004 * fTemp90) + ((0.0053753232814251969 * fTemp89) + ((0.013154264250377147 * fTemp83) + ((2.3754652515039685e-18 * fTemp85) + (0.030460165261409398 * fTemp70)))))))))) - ((0.025862861065006501 * fTemp14) + ((1.2597806908585981e-18 * fTemp2) + ((0.013154264250377145 * ((fTemp103 + fTemp26) - fTemp28)) + (((0.0053753232814251943 * fTemp79) + ((0.016125969844275591 * fTemp81) + ((0.0053753232814251978 * fTemp82) + ((0.013154264250377148 * fTemp88) + ((7.1263957545119048e-18 * fTemp87) + ((0.020573779994945588 * fTemp86) + ((0.025862861065006511 * fTemp62) + (0.016125969844275587 * fTemp69)))))))) + (0.030460165261409412 * fTemp91)))))))); - double fTemp139 = (fTemp40 - fTemp41); - double fTemp140 = (fTemp22 - fTemp27); - double fTemp141 = (fTemp19 - fTemp25); - double fTemp142 = (fTemp31 - fTemp53); - double fTemp143 = (fTemp30 - fTemp52); - output14[i] = FAUSTFLOAT((fRec0[0] * (((0.022664352972045151 * ((fTemp139 - fTemp48) + fTemp49)) + ((1.2735541704855431e-17 * fTemp140) + ((2.5471083409710867e-18 * fTemp141) + ((0.04089277388695433 * ((((fTemp129 - fTemp15) + fTemp16) - fTemp17) + fTemp18)) + (((((2.4393594688416384e-34 * fTemp71) + (0.022664352972045144 * fTemp107)) + (0.022664352972045138 * fTemp102)) + (0.02266435297204512 * fTemp109)) + (5.2042176228676594e-18 * fTemp128)))))) - ((3.1225305737205953e-18 * fTemp142) + ((2.7335294515958808e-18 * fTemp143) + ((0.022664352972045162 * ((fTemp56 - fTemp45) - fTemp46)) + ((0.022664352972045165 * fTemp118) + ((1.7829758386797603e-17 * fTemp121) + ((7.6413250229132581e-18 * fTemp125) + (7.2859046720147234e-18 * fTemp110)))))))))); - double fTemp144 = (3.0667124528564294e-18 * fTemp85); - output15[i] = FAUSTFLOAT((fRec0[0] * (((0.033388810063348762 * fTemp13) + ((0.033388810063348817 * fTemp12) + ((1.4637328906707076e-17 * fTemp4) + ((0.016694405031674409 * fTemp138) + ((0.0023131708388267444 * fTemp132) + ((6.0979103388536467e-51 * fTemp112) + (((0.0300712209047478 * fTemp90) + ((0.03007122090474779 * fTemp89) + ((0.016982082124440721 * fTemp88) + ((9.2001373585692901e-18 * fTemp87) + ((0.026560635762986527 * fTemp86) + (((0.016982082124440748 * fTemp64) + (0.020818537549440738 * fTemp65)) + (0.02081853754944071 * fTemp69))))))) + (0.0023131708388267409 * fTemp91)))))))) - ((0.033388810063348796 * fTemp14) + (fTemp134 + ((4.879109635569025e-18 * fTemp2) + ((0.016982082124440741 * (((fTemp19 + fTemp23) + fTemp25) + fTemp28)) + ((0.0023131708388267449 * fTemp133) + ((0.030071220904747779 * fTemp79) + ((0.030071220904747797 * fTemp82) + (fTemp144 + (((0.020818537549440724 * fTemp57) + (0.020818537549440744 * fTemp68)) + (0.0023131708388267431 * fTemp70))))))))))))); - output16[i] = FAUSTFLOAT((fRec0[0] * (((4.2933974339990009e-17 * fTemp14) + ((3.0667124528564293e-17 * fTemp13) + ((1.8400274717138574e-17 * fTemp12) + ((6.133424905712858e-18 * fTemp11) + ((0.035508216952135609 * ((fTemp139 + fTemp48) - fTemp49)) + ((0.035508216952135616 * ((fTemp80 + fTemp44) - fTemp47)) + ((5.4356280292327993e-19 * fTemp132) + ((9.0593800487213328e-19 * fTemp91) + ((0.035508216952135588 * fTemp79) + ((1.2735541704855428e-17 * fTemp88) + ((2.5471083409710855e-18 * fTemp83) + (((7.6413250229132566e-18 * fTemp64) + (1.7829758386797597e-17 * fTemp67)) + (1.2683132068209864e-18 * fTemp70))))))))))))) - ((2.0700309056780893e-17 * fTemp4) + ((1.3800206037853928e-17 * fTemp3) + ((6.9001030189269641e-18 * fTemp2) + ((0.035508216952135595 * (((fTemp37 - fTemp38) + fTemp45) - fTemp46)) + (((9.200137358569287e-18 * fTemp87) + (fTemp144 + (fTemp135 + (0.035508216952135643 * fTemp69)))) + (4.7584639941967359e-19 * fTemp133))))))))); - output17[i] = FAUSTFLOAT((fRec0[0] * (((0.027200442744256398 * (((fTemp36 - fTemp40) - fTemp44) + fTemp48)) + ((((0.029413829057838591 * fTemp141) + ((((0.02941382905783858 * fTemp125) + ((1.3010959028184069e-17 * fTemp104) + (0.027200442744256408 * fTemp102))) + (0.018831075746023631 * fTemp127)) + (0.018831075746023662 * fTemp118))) + (0.0062770252486745223 * fTemp143)) + (0.0062770252486745231 * fTemp142))) - ((0.029413829057838629 * fTemp140) + ((0.0062770252486745335 * fTemp128) + ((0.018831075746023648 * fTemp124) + ((0.018831075746023641 * fTemp120) + ((0.029413829057838594 * fTemp121) + (((0.035414181017315374 * fTemp105) + (0.027200442744256415 * fTemp109)) + (0.0062770252486745266 * fTemp110)))))))))); - output18[i] = FAUSTFLOAT((fRec0[0] * (((5.2159876025162161e-18 * fTemp3) + (((0.031444705933590805 * fTemp94) + ((0.0067104222539056237 * fTemp79) + ((0.0067104222539056254 * fTemp89) + ((1.7386625341720719e-17 * fTemp87) + ((5.7955417805735729e-18 * fTemp85) + ((0.0067104222539056367 * fTemp57) + (0.0067104222539056471 * fTemp69))))))) + (0.02907849643359095 * fTemp97))) - ((7.823981403774323e-18 * fTemp4) + ((2.607993801258108e-18 * fTemp2) + ((0.037859351999996446 * fTemp95) + (((0.0067104222539056272 * fTemp82) + (((1.1591083561147146e-17 * fTemp63) + (0.006710422253905635 * fTemp65)) + (0.0067104222539056315 * fTemp68))) + (0.0067104222539056298 * fTemp90)))))))); - output19[i] = FAUSTFLOAT((fRec0[0] * ((((0.011117382399029452 * fTemp121) + ((((1.6392267574774099e-18 * fTemp104) + (0.013385302265262959 * fTemp105)) + (0.010280801007450529 * fTemp108)) + (0.010280801007450555 * fTemp109))) + (0.035587388102713349 * ((((fTemp32 - fTemp34) - fTemp52) - fTemp53) + fTemp55))) - ((0.01111738239902945 * ((((fTemp21 - fTemp22) - fTemp25) - fTemp26) + fTemp27)) + ((((0.030842403022351562 * fTemp101) + ((0.010280801007450534 * fTemp107) + (0.010280801007450538 * fTemp102))) + (0.030842403022351569 * fTemp99)) + (0.035587388102713342 * fTemp128)))))); - output20[i] = FAUSTFLOAT((fRec0[0] * ((((((0.014285714285714285 * fTemp114) + (0.038095238095238099 * fTemp112)) + (0.025396825396825397 * fTemp115)) + (0.0042514054232804356 * fTemp116)) + (0.014254712301587407 * fTemp113)) - ((0.027513227513227514 * fTemp111) + (0.024609375000000013 * fTemp29))))); - output21[i] = FAUSTFLOAT((fRec0[0] * (((0.011117382399029452 * fTemp140) + ((0.035587388102713342 * fTemp117) + ((0.010280801007450525 * fTemp127) + ((0.010280801007450517 * fTemp124) + ((0.013385302265262959 * fTemp122) + ((8.1961337873870493e-19 * fTemp123) + (((7.3765204086483564e-18 * fTemp71) + (0.030842403022351562 * fTemp108)) + (0.035587388102713335 * fTemp110)))))))) - ((0.01111738239902945 * ((fTemp92 - fTemp25) + fTemp26)) + (((0.010280801007450515 * fTemp118) + ((0.030842403022351559 * fTemp119) + ((0.010280801007450522 * fTemp120) + ((0.011117382399029449 * fTemp121) + ((2.4588401362161147e-18 * fTemp126) + (0.030842403022351552 * fTemp109)))))) + (0.035587388102713349 * fTemp128)))))); - output22[i] = FAUSTFLOAT((fRec0[0] * (((1.6227516985606004e-17 * fTemp14) + ((6.9546501366882881e-18 * fTemp12) + ((0.047324189999995547 * fTemp130) + ((4.7908068913603203e-34 * fTemp112) + (((((((1.9254329235850881e-18 * fTemp83) + (9.6271646179254396e-18 * fTemp88)) + (0.0089472296718741701 * fTemp82)) + (0.0089472296718741719 * fTemp89)) + (0.0089472296718741684 * fTemp90)) + (0.0089472296718741736 * fTemp79)) + (8.902721895353721e-18 * fTemp91)))))) - ((1.1591083561147147e-17 * fTemp13) + ((2.3182167122294292e-18 * fTemp11) + ((0.0089472296718741632 * (((fTemp36 + fTemp39) + fTemp44) + fTemp47)) + ((5.3416331372122328e-18 * fTemp132) + ((4.6761788733398907e-18 * fTemp133) + ((0.021295885499997998 * fTemp131) + (((((5.7762987707552641e-18 * fTemp64) + (1.3478030465095617e-17 * fTemp67)) + (0.0089472296718741667 * fTemp68)) + (0.0089472296718741563 * fTemp69)) + (1.246381065349521e-17 * fTemp70))))))))))); - output23[i] = FAUSTFLOAT((fRec0[0] * (((0.0062770252486745266 * fTemp142) + ((0.029413829057838549 * fTemp140) + (((0.027200442744256377 * fTemp127) + ((0.027200442744256363 * fTemp124) + ((0.029413829057838594 * fTemp125) + ((1.9516438542276106e-17 * fTemp126) + ((0.035414181017315374 * fTemp122) + (((1.8293731016560941e-50 * fTemp71) + (0.018831075746023603 * fTemp107)) + (0.018831075746023575 * fTemp109))))))) + (0.0062770252486745171 * fTemp128)))) - ((0.0062770252486745275 * fTemp143) + ((0.029413829057838584 * fTemp141) + ((0.027200442744256356 * fTemp118) + ((0.027200442744256374 * fTemp120) + ((0.02941382905783858 * fTemp121) + ((6.5054795140920346e-18 * fTemp123) + (((0.018831075746023586 * fTemp102) + (0.01883107574602361 * fTemp108)) + (0.0062770252486745231 * fTemp110))))))))))); - output24[i] = FAUSTFLOAT((fRec0[0] * (((0.012520803773755805 * fTemp111) + ((3.9603917912335094e-67 * fTemp112) + ((0.028171808490950554 * fTemp114) + ((0.010356563277706251 * fTemp79) + ((0.010356563277706199 * fTemp90) + ((0.010356563277706232 * fTemp89) + ((0.010356563277706217 * fTemp82) + ((((0.010356563277706152 * fTemp65) + (0.010356563277706145 * fTemp57)) + (0.010356563277706178 * fTemp68)) + (0.010356563277706064 * fTemp69))))))))) - (((0.050083215095023212 * fTemp115) + (0.020798717987459581 * fTemp29)) + (0.0014795090396723079 * fTemp113))))); + double fTemp21 = double(input20[i]); + double fTemp22 = double(input21[i]); + double fTemp23 = (((fTemp19 + fTemp20) + fTemp21) + fTemp22); + double fTemp24 = double(input22[i]); + double fTemp25 = double(input23[i]); + double fTemp26 = double(input24[i]); + double fTemp27 = double(input25[i]); + double fTemp28 = ((((fTemp23 + fTemp24) + fTemp25) + fTemp26) + fTemp27); + double fTemp29 = double(input26[i]); + double fTemp30 = double(input27[i]); + double fTemp31 = (fTemp29 + fTemp30); + double fTemp32 = double(input28[i]); + double fTemp33 = double(input29[i]); + double fTemp34 = ((fTemp31 + fTemp32) + fTemp33); + double fTemp35 = double(input30[i]); + double fTemp36 = double(input31[i]); + double fTemp37 = double(input32[i]); + double fTemp38 = double(input33[i]); + double fTemp39 = double(input34[i]); + double fTemp40 = double(input35[i]); + double fTemp41 = double(input36[i]); + double fTemp42 = double(input37[i]); + double fTemp43 = double(input38[i]); + double fTemp44 = double(input39[i]); + double fTemp45 = double(input40[i]); + double fTemp46 = double(input41[i]); + double fTemp47 = double(input42[i]); + double fTemp48 = double(input43[i]); + double fTemp49 = double(input44[i]); + double fTemp50 = double(input45[i]); + double fTemp51 = double(input46[i]); + double fTemp52 = double(input47[i]); + double fTemp53 = double(input48[i]); + double fTemp54 = double(input49[i]); + double fTemp55 = (fRec1[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * fTemp28)) + (0.02017333553791887 * ((((((((((((((((((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53) + fTemp54)))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (fRec1[0] * (((((fConst5 * fTemp4) + (0.022574955908289243 * ((((fConst6 * fTemp9) + (fConst7 * fTemp13)) + (fConst8 * fTemp14)) + (fConst6 * fTemp18)))) + (0.021093750000000001 * ((((fConst9 * fTemp21) + (fConst10 * fTemp22)) + (fConst9 * fTemp26)) + (fConst10 * fTemp27)))) + (fConst4 * (((((((((((((((((((((0.02026373487753309 * fTemp2) + (0.025473109945013343 * fTemp7)) + (0.025473109945013336 * fTemp11)) + (0.025473109945013343 * fTemp12)) + (0.025473109945013343 * fTemp16)) + (0.019434045907762619 * fTemp19)) + (0.019434045907762623 * fTemp20)) + (0.019434045907762619 * fTemp24)) + (0.019434045907762623 * fTemp25)) + (0.0097062489627452973 * fTemp29)) + (0.0097062489627452973 * fTemp30)) + (0.0097062489627453199 * fTemp35)) + (0.029118746888235923 * fTemp36)) + (0.029118746888235927 * fTemp37)) + (0.0097062489627453216 * fTemp38)) + (0.0097062489627453199 * fTemp43)) + (0.029118746888235923 * fTemp44)) + (0.029118746888235927 * fTemp45)) + (0.0097062489627453216 * fTemp46)) + (0.0097062489627452973 * fTemp51)) + (0.0097062489627452973 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst11 * fTemp32) + (fConst12 * fTemp33)) + (fConst13 * fTemp39)) + (fConst14 * fTemp40)) + (fConst15 * fTemp41)) + (fConst16 * fTemp42)) + (fConst13 * fTemp47)) + (fConst14 * fTemp48)) + (fConst15 * fTemp49)) + (fConst16 * fTemp50)) + (fConst11 * fTemp53)) + (fConst12 * fTemp54))))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (fTemp0 - fTemp5); + double fTemp58 = ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18); + double fTemp59 = ((((fTemp23 - fTemp24) - fTemp25) - fTemp26) - fTemp27); + double fTemp60 = (((((((fTemp35 + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42); + double fTemp61 = ((((((((fTemp60 - fTemp43) - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49) - fTemp50); + double fTemp62 = ((((fTemp34 - fTemp51) - fTemp52) - fTemp53) - fTemp54); + double fTemp63 = (fRec1[0] * (((((0.021994295969128601 * fTemp57) + (0.027648561470568499 * fTemp58)) + (0.021093750000000001 * fTemp59)) + (0.010535180889746075 * fTemp61)) + (0.031605542669238249 * fTemp62))); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + output2[i] = FAUSTFLOAT(fTemp63); + double fTemp64 = (fRec1[0] * ((fConst4 * (((((((((((((((((((((0.02026373487753309 * fTemp1) + (0.025473109945013343 * fTemp6)) + (0.025473109945013343 * fTemp11)) + (0.025473109945013332 * fTemp14)) + (0.025473109945013343 * fTemp15)) + (0.019434045907762623 * fTemp19)) + (0.019434045907762616 * fTemp22)) + (0.019434045907762623 * fTemp24)) + (0.019434045907762616 * fTemp27)) + (0.0097062489627452956 * fTemp29)) + (0.0097062489627452939 * fTemp33)) + (0.029118746888235916 * fTemp35)) + (0.0097062489627453077 * fTemp36)) + (0.0097062489627453008 * fTemp41)) + (0.029118746888235913 * fTemp42)) + (0.029118746888235916 * fTemp43)) + (0.0097062489627453077 * fTemp44)) + (0.0097062489627453008 * fTemp49)) + (0.029118746888235913 * fTemp50)) + (0.0097062489627452956 * fTemp51)) + (0.0097062489627452939 * fTemp54))) + ((((fConst5 * fTemp3) + (0.022574955908289243 * ((((fConst6 * fTemp8) + (fConst7 * fTemp12)) + (fConst8 * fTemp13)) + (fConst6 * fTemp17)))) + (0.021093750000000001 * ((((fConst9 * fTemp20) + (fConst10 * fTemp21)) + (fConst9 * fTemp25)) + (fConst10 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst11 * fTemp30) + (fConst12 * fTemp32)) + (fConst17 * fTemp37)) + (fConst18 * fTemp38)) + (fConst14 * fTemp39)) + (fConst19 * fTemp40)) + (fConst17 * fTemp45)) + (fConst18 * fTemp46)) + (fConst14 * fTemp47)) + (fConst19 * fTemp48)) + (fConst11 * fTemp52)) + (fConst12 * fTemp53)))))); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + output3[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = (fTemp30 + fTemp33); + double fTemp66 = (fTemp12 + fTemp14); + double fTemp67 = (fTemp20 + fTemp22); + double fTemp68 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst23 * fTemp65) + (fConst24 * fTemp37)) + (fConst25 * fTemp38)) + (fConst26 * fTemp41)) + (fConst27 * fTemp42)) + (fConst24 * fTemp45)) + (fConst25 * fTemp46)) + (fConst26 * fTemp49)) + (fConst27 * fTemp50)) + (fConst23 * fTemp52)) + (fConst23 * fTemp54))) + (((fConst29 * fTemp66) + (fConst30 * ((fTemp67 + fTemp25) + fTemp27))) + (fConst22 * ((((((((((((((((((0.072048835120117657 * fTemp11) + (0.072048835120117671 * fTemp13)) + (0.044881006545161167 * fTemp19)) + (0.044881006545161174 * fTemp21)) + (0.044881006545161167 * fTemp24)) + (0.044881006545161174 * fTemp26)) + (0.011706176702255417 * fTemp29)) + (0.011706176702255421 * fTemp32)) + (0.035118530106766375 * fTemp35)) + (0.035118530106766334 * fTemp36)) + (0.035118530106766362 * fTemp39)) + (0.035118530106766348 * fTemp40)) + (0.035118530106766375 * fTemp43)) + (0.035118530106766334 * fTemp44)) + (0.035118530106766362 * fTemp47)) + (0.035118530106766348 * fTemp48)) + (0.011706176702255417 * fTemp51)) + (0.011706176702255421 * fTemp53)))))); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + output4[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = (fConst46 * fTemp19); + double fTemp70 = (fRec1[0] * ((((0.022574955908289243 * ((fConst35 * fTemp9) + (fConst37 * fTemp18))) + (0.021093750000000001 * ((((fConst38 * fTemp21) + (fConst39 * fTemp22)) + (fConst42 * fTemp26)) + (fConst43 * fTemp27)))) + (fConst33 * ((((((((((((((((((fConst44 * fTemp7) + (fConst45 * fTemp16)) + fTemp69) + (fConst46 * fTemp20)) + (fConst47 * fTemp24)) + (fConst48 * fTemp25)) + (fConst49 * fTemp29)) + (fConst49 * fTemp30)) + (fConst50 * fTemp35)) + (fConst51 * fTemp36)) + (fConst52 * fTemp37)) + (fConst53 * fTemp38)) + (fConst55 * fTemp43)) + (fConst56 * fTemp44)) + (fConst57 * fTemp45)) + (fConst58 * fTemp46)) + (fConst60 * fTemp51)) + (fConst60 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst61 * fTemp32) + (fConst62 * fTemp33)) + (fConst63 * fTemp39)) + (fConst64 * fTemp40)) + (fConst65 * fTemp41)) + (fConst66 * fTemp42)) + (fConst68 * fTemp47)) + (fConst69 * fTemp48)) + (fConst70 * fTemp49)) + (fConst71 * fTemp50)) + (fConst73 * fTemp53)) + (fConst74 * fTemp54))))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph5 = FAUSTFLOAT(fRec6[0]); + output5[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = ((((fTemp10 + fTemp15) + fTemp16) + fTemp17) + fTemp18); + double fTemp72 = (fTemp0 + fTemp5); + double fTemp73 = ((((fTemp34 + fTemp51) + fTemp52) + fTemp53) + fTemp54); + double fTemp74 = (((fTemp1 + fTemp2) + fTemp3) + fTemp4); + double fTemp75 = (((fTemp11 + fTemp12) + fTemp13) + fTemp14); + double fTemp76 = ((((((((fTemp60 + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50); + double fTemp77 = (fRec1[0] * ((((0.01261978399999881 * fTemp71) + ((0.028394513999997331 * fTemp72) + (5.236595479505967e-18 * fTemp28))) + (0.032806508796871948 * fTemp73)) - (((0.014197256999998666 * fTemp74) + (0.025239567999997631 * fTemp75)) + (0.01640325439843596 * fTemp76)))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + output6[i] = FAUSTFLOAT(fTemp77); + double fTemp78 = (fRec1[0] * ((fConst33 * ((((((((((((((((fTemp69 + ((fConst44 * fTemp6) + (fConst45 * fTemp15))) + (fConst75 * fTemp22)) + (fConst48 * fTemp24)) + (fConst76 * fTemp27)) + (fConst77 * fTemp29)) + (fConst78 * fTemp33)) + (fConst79 * fTemp35)) + (fConst80 * fTemp36)) + (fConst81 * fTemp41)) + (fConst82 * fTemp42)) + (fConst83 * fTemp43)) + (fConst84 * fTemp44)) + (fConst85 * fTemp49)) + (fConst86 * fTemp50)) + (fConst87 * fTemp51)) + (fConst88 * fTemp54))) + (((0.022574955908289243 * ((fConst35 * fTemp8) + (fConst37 * fTemp17))) + (0.021093750000000001 * ((((fConst38 * fTemp20) + (fConst39 * fTemp21)) + (fConst42 * fTemp25)) + (fConst43 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst61 * fTemp30) + (fConst62 * fTemp32)) + (fConst89 * fTemp37)) + (fConst90 * fTemp38)) + (fConst64 * fTemp39)) + (fConst91 * fTemp40)) + (fConst92 * fTemp45)) + (fConst93 * fTemp46)) + (fConst69 * fTemp47)) + (fConst94 * fTemp48)) + (fConst73 * fTemp52)) + (fConst74 * fTemp53)))))); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph7 = FAUSTFLOAT(fRec8[0]); + output7[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = (fTemp2 + fTemp4); + double fTemp80 = (fTemp7 + fTemp9); + double fTemp81 = (fTemp1 + fTemp3); + double fTemp82 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst95 * fTemp31) + (fConst96 * fTemp33)) + (fConst97 * fTemp36)) + (fConst98 * fTemp37)) + (fConst99 * fTemp40)) + (fConst100 * fTemp41)) + (fConst97 * fTemp44)) + (fConst98 * fTemp45)) + (fConst99 * fTemp48)) + (fConst100 * fTemp49)) + (fConst95 * fTemp51)) + (fConst95 * fTemp52)) + (fConst96 * fTemp54))) + ((((fConst101 * fTemp79) + (0.022574955908289243 * ((fConst102 * fTemp18) + ((((fConst102 * fTemp80) + (fConst103 * fTemp12)) + (fConst104 * fTemp14)) + (fConst102 * fTemp16))))) + (0.021093750000000001 * ((((fConst105 * fTemp20) + (fConst106 * fTemp22)) + (fConst105 * fTemp25)) + (fConst106 * fTemp27)))) + (fConst22 * (((((((((((((((((((((0.04052746975506618 * fTemp81) + (0.036024417560058836 * fTemp6)) + (0.036024417560058836 * fTemp8)) + (1.5998055129555246e-17 * fTemp11)) + (3.1996110259110492e-17 * fTemp13)) + (0.036024417560058836 * fTemp15)) + (0.036024417560058836 * fTemp17)) + (9.9655853669580557e-18 * fTemp19)) + (1.9931170733916111e-17 * fTemp21)) + (9.9655853669580557e-18 * fTemp24)) + (1.9931170733916111e-17 * fTemp26)) + (5.19858676206982e-18 * fTemp32)) + (0.046824706809021746 * fTemp35)) + (0.046824706809021746 * fTemp38)) + (0.046824706809021774 * fTemp39)) + (0.046824706809021698 * fTemp42)) + (0.046824706809021746 * fTemp43)) + (0.046824706809021746 * fTemp46)) + (0.046824706809021774 * fTemp47)) + (0.046824706809021698 * fTemp50)) + (5.19858676206982e-18 * fTemp53)))))); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + output8[i] = FAUSTFLOAT(fTemp82); + double fTemp83 = (fRec1[0] * (((((fConst110 * fTemp2) + (0.022574955908289243 * ((((fConst111 * fTemp7) + (fConst112 * fTemp13)) + (fConst113 * fTemp14)) + (fConst111 * fTemp16)))) + (0.021093750000000001 * ((((fConst114 * fTemp21) + (fConst115 * fTemp22)) + (fConst114 * fTemp26)) + (fConst115 * fTemp27)))) + (fConst109 * (((((((((((((((((((((0.081054939510132359 * fTemp4) + (0.050946219890026692 * fTemp9)) + (0.10189243978005338 * fTemp11)) + (0.1018924397800533 * fTemp12)) + (0.050946219890026692 * fTemp18)) + (0.051824122420700336 * fTemp19)) + (0.051824122420700287 * fTemp20)) + (0.051824122420700336 * fTemp24)) + (0.051824122420700287 * fTemp25)) + (0.0070590901547238332 * fTemp29)) + (0.0070590901547238332 * fTemp30)) + (0.091768172011410243 * fTemp35)) + (0.091768172011410271 * fTemp38)) + (0.063531811392514695 * fTemp40)) + (0.063531811392514792 * fTemp41)) + (0.091768172011410243 * fTemp43)) + (0.091768172011410271 * fTemp46)) + (0.063531811392514695 * fTemp48)) + (0.063531811392514792 * fTemp49)) + (0.0070590901547238332 * fTemp51)) + (0.0070590901547238332 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst116 * fTemp32) + (fConst117 * fTemp33)) + (fConst118 * fTemp36)) + (fConst119 * fTemp37)) + (fConst120 * fTemp39)) + (fConst121 * fTemp42)) + (fConst118 * fTemp44)) + (fConst119 * fTemp45)) + (fConst120 * fTemp47)) + (fConst121 * fTemp50)) + (fConst116 * fTemp53)) + (fConst117 * fTemp54))))); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph9 = FAUSTFLOAT(fRec10[0]); + output9[i] = FAUSTFLOAT(fTemp83); + double fTemp84 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst125 * fTemp65) + (fConst126 * fTemp37)) + (fConst127 * fTemp38)) + (fConst128 * fTemp41)) + (fConst129 * fTemp42)) + (fConst132 * fTemp45)) + (fConst133 * fTemp46)) + (fConst134 * fTemp49)) + (fConst135 * fTemp50)) + (fConst138 * fTemp52)) + (fConst138 * fTemp54))) + ((0.021093750000000001 * (((fConst139 * fTemp67) + (fConst142 * fTemp25)) + (fConst142 * fTemp27))) + (fConst123 * (((((((((((((((fConst21 * ((0.12956030605175081 * fTemp19) + (0.12956030605175084 * fTemp21))) + (fConst143 * fTemp24)) + (fConst144 * fTemp26)) + (fConst145 * fTemp29)) + (fConst146 * fTemp32)) + (fConst147 * fTemp35)) + (fConst148 * fTemp36)) + (fConst149 * fTemp39)) + (fConst150 * fTemp40)) + (fConst151 * fTemp43)) + (fConst152 * fTemp44)) + (fConst153 * fTemp47)) + (fConst154 * fTemp48)) + (fConst155 * fTemp51)) + (fConst156 * fTemp53)))))); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + output10[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = (fRec1[0] * (((((fConst160 * fTemp4) + (0.022574955908289243 * ((((fConst162 * fTemp9) + (fConst163 * fTemp13)) + (fConst164 * fTemp14)) + (fConst166 * fTemp18)))) + (0.021093750000000001 * ((((fConst167 * fTemp21) + (fConst168 * fTemp22)) + (fConst171 * fTemp26)) + (fConst172 * fTemp27)))) + (fConst157 * (((((((((((((((((((((fConst173 * fTemp7) + (fConst174 * fTemp2)) + (fConst175 * fTemp11)) + (fConst176 * fTemp12)) + (fConst177 * fTemp16)) + (fConst178 * fTemp19)) + (fConst179 * fTemp20)) + (fConst180 * fTemp24)) + (fConst181 * fTemp25)) + (fConst182 * fTemp29)) + (fConst182 * fTemp30)) + (fConst184 * fTemp35)) + (fConst185 * fTemp36)) + (fConst186 * fTemp37)) + (fConst187 * fTemp38)) + (fConst189 * fTemp43)) + (fConst190 * fTemp44)) + (fConst191 * fTemp45)) + (fConst192 * fTemp46)) + (fConst194 * fTemp51)) + (fConst194 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst195 * fTemp32) + (fConst196 * fTemp33)) + (fConst198 * fTemp39)) + (fConst199 * fTemp40)) + (fConst200 * fTemp41)) + (fConst201 * fTemp42)) + (fConst203 * fTemp47)) + (fConst204 * fTemp48)) + (fConst205 * fTemp49)) + (fConst206 * fTemp50)) + (fConst208 * fTemp53)) + (fConst209 * fTemp54))))); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + fVbargraph11 = FAUSTFLOAT(fRec12[0]); + output11[i] = FAUSTFLOAT(fTemp85); + double fTemp86 = (fRec1[0] * (((0.033596842045264641 * fTemp57) + (0.026333598483989317 * fTemp62)) - (((0.010558468816293317 * fTemp58) + (0.021480823570105497 * fTemp59)) + (0.020481687709769415 * fTemp61)))); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + output12[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = (fRec1[0] * ((fConst157 * (((((((((((((((((((((fConst173 * fTemp6) + (fConst174 * fTemp1)) + (fConst176 * fTemp11)) + (fConst210 * fTemp14)) + (fConst177 * fTemp15)) + (fConst179 * fTemp19)) + (fConst211 * fTemp22)) + (fConst181 * fTemp24)) + (fConst212 * fTemp27)) + (fConst213 * fTemp29)) + (fConst214 * fTemp33)) + (fConst215 * fTemp35)) + (fConst216 * fTemp36)) + (fConst217 * fTemp41)) + (fConst218 * fTemp42)) + (fConst219 * fTemp43)) + (fConst220 * fTemp44)) + (fConst221 * fTemp49)) + (fConst222 * fTemp50)) + (fConst223 * fTemp51)) + (fConst224 * fTemp54))) + ((((fConst160 * fTemp3) + (0.022574955908289243 * ((((fConst162 * fTemp8) + (fConst163 * fTemp12)) + (fConst164 * fTemp13)) + (fConst166 * fTemp17)))) + (0.021093750000000001 * ((((fConst167 * fTemp20) + (fConst168 * fTemp21)) + (fConst171 * fTemp25)) + (fConst172 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst195 * fTemp30) + (fConst196 * fTemp32)) + (fConst225 * fTemp37)) + (fConst226 * fTemp38)) + (fConst199 * fTemp39)) + (fConst227 * fTemp40)) + (fConst228 * fTemp45)) + (fConst229 * fTemp46)) + (fConst204 * fTemp47)) + (fConst230 * fTemp48)) + (fConst208 * fTemp52)) + (fConst209 * fTemp53)))))); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph13 = FAUSTFLOAT(fRec14[0]); + output13[i] = FAUSTFLOAT(fTemp87); + double fTemp88 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst231 * fTemp31) + (fConst232 * fTemp33)) + (fConst233 * fTemp36)) + (fConst234 * fTemp37)) + (fConst235 * fTemp40)) + (fConst236 * fTemp41)) + (fConst237 * fTemp44)) + (fConst237 * fTemp45)) + (fConst238 * fTemp48)) + (fConst239 * fTemp49)) + (fConst240 * fTemp51)) + (fConst240 * fTemp52)) + (fConst241 * fTemp54))) + (((0.022574955908289243 * (((fConst242 * fTemp80) + (fConst244 * fTemp16)) + (fConst244 * fTemp18))) + (0.021093750000000001 * ((((fConst245 * fTemp20) + (fConst246 * fTemp22)) + (fConst247 * fTemp25)) + (fConst248 * fTemp27)))) + (fConst123 * (((((((((((((((((fConst249 * (fTemp6 + fTemp8)) + (fConst250 * fTemp15)) + (fConst250 * fTemp17)) + (fConst251 * fTemp19)) + (fConst252 * fTemp21)) + (fConst253 * fTemp24)) + (fConst254 * fTemp26)) + (fConst255 * fTemp32)) + (fConst256 * fTemp35)) + (fConst256 * fTemp38)) + (fConst257 * fTemp39)) + (fConst258 * fTemp42)) + (fConst259 * fTemp43)) + (fConst259 * fTemp46)) + (fConst260 * fTemp47)) + (fConst261 * fTemp50)) + (fConst262 * fTemp53)))))); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp88)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + output14[i] = FAUSTFLOAT(fTemp88); + double fTemp89 = (fRec1[0] * ((0.02017333553791887 * ((((((((((((fConst263 * fTemp29) + (fConst264 * fTemp33)) + (fConst265 * fTemp36)) + (fConst266 * fTemp38)) + (fConst267 * fTemp39)) + (fConst268 * fTemp41)) + (fConst265 * fTemp44)) + (fConst266 * fTemp46)) + (fConst267 * fTemp47)) + (fConst268 * fTemp49)) + (fConst263 * fTemp51)) + (fConst264 * fTemp54))) + ((((fConst110 * fTemp3) + (0.022574955908289243 * ((((fConst111 * fTemp8) + (fConst269 * fTemp11)) + (fConst270 * fTemp14)) + (fConst111 * fTemp17)))) + (0.021093750000000001 * ((((fConst271 * fTemp19) + (fConst272 * fTemp22)) + (fConst271 * fTemp24)) + (fConst272 * fTemp27)))) + (fConst109 * (((((((((((((((((((((0.081054939510132359 * fTemp1) + (0.050946219890026692 * fTemp6)) + (0.10189243978005338 * fTemp12)) + (0.10189243978005329 * fTemp13)) + (0.050946219890026692 * fTemp15)) + (0.051824122420700336 * fTemp20)) + (0.051824122420700267 * fTemp21)) + (0.051824122420700336 * fTemp25)) + (0.051824122420700267 * fTemp26)) + (0.0070590901547238384 * fTemp30)) + (0.0070590901547238306 * fTemp32)) + (0.063531811392514598 * fTemp35)) + (0.09176817201141016 * fTemp37)) + (0.091768172011410187 * fTemp40)) + (0.063531811392514445 * fTemp42)) + (0.063531811392514598 * fTemp43)) + (0.09176817201141016 * fTemp45)) + (0.091768172011410187 * fTemp48)) + (0.063531811392514445 * fTemp50)) + (0.0070590901547238384 * fTemp52)) + (0.0070590901547238306 * fTemp53)))))); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + fVbargraph15 = FAUSTFLOAT(fRec16[0]); + output15[i] = FAUSTFLOAT(fTemp89); + double fTemp90 = (fRec1[0] * ((0.02017333553791887 * ((((((((((fConst274 * fTemp29) + (fConst275 * fTemp36)) + (fConst276 * fTemp38)) + (fConst277 * fTemp40)) + (fConst278 * fTemp42)) + (fConst275 * fTemp44)) + (fConst276 * fTemp46)) + (fConst277 * fTemp48)) + (fConst278 * fTemp50)) + (fConst274 * fTemp51))) + (fConst273 * ((((((((((((((((((((((((((1.3574799921485692e-16 * fTemp11) + (1.3574799921485695e-16 * fTemp12)) + (2.7149599842971385e-16 * fTemp13)) + (2.714959984297139e-16 * fTemp14)) + (5.6373863931755746e-17 * fTemp19)) + (5.6373863931755758e-17 * fTemp20)) + (1.1274772786351149e-16 * fTemp21)) + (1.1274772786351152e-16 * fTemp22)) + (5.6373863931755746e-17 * fTemp24)) + (5.6373863931755758e-17 * fTemp25)) + (1.1274772786351149e-16 * fTemp26)) + (1.1274772786351152e-16 * fTemp27)) + (4.0101337658685596e-18 * fTemp30)) + (8.0202675317371177e-18 * fTemp32)) + (8.0202675317371192e-18 * fTemp33)) + (0.20432599334845877 * fTemp35)) + (0.20432599334845869 * fTemp37)) + (0.20432599334845877 * fTemp39)) + (0.20432599334845863 * fTemp41)) + (0.20432599334845877 * fTemp43)) + (0.20432599334845869 * fTemp45)) + (0.20432599334845877 * fTemp47)) + (0.20432599334845863 * fTemp49)) + (4.0101337658685596e-18 * fTemp52)) + (8.0202675317371177e-18 * fTemp53)) + (8.0202675317371192e-18 * fTemp54))))); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + output16[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = (fRec1[0] * ((((0.022574955908289243 * ((fConst281 * fTemp7) + (fConst283 * fTemp16))) + (0.021093750000000001 * ((((fConst284 * fTemp21) + (fConst285 * fTemp22)) + (fConst288 * fTemp26)) + (fConst289 * fTemp27)))) + (fConst279 * ((((((((((((((((((fConst290 * fTemp9) + (fConst291 * fTemp18)) + (fConst292 * fTemp19)) + (fConst293 * fTemp20)) + (fConst294 * fTemp24)) + (fConst295 * fTemp25)) + (fConst296 * fTemp29)) + (fConst296 * fTemp30)) + (fConst297 * fTemp35)) + (fConst298 * fTemp38)) + (fConst299 * fTemp40)) + (fConst300 * fTemp41)) + (fConst302 * fTemp43)) + (fConst303 * fTemp46)) + (fConst304 * fTemp48)) + (fConst305 * fTemp49)) + (fConst307 * fTemp51)) + (fConst307 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst308 * fTemp32) + (fConst309 * fTemp33)) + (fConst310 * fTemp36)) + (fConst311 * fTemp37)) + (fConst312 * fTemp39)) + (fConst313 * fTemp42)) + (fConst315 * fTemp44)) + (fConst316 * fTemp45)) + (fConst317 * fTemp47)) + (fConst318 * fTemp50)) + (fConst320 * fTemp53)) + (fConst321 * fTemp54))))); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph17 = FAUSTFLOAT(fRec18[0]); + output17[i] = FAUSTFLOAT(fTemp91); + double fTemp92 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst324 * fTemp65) + (fConst327 * fTemp37)) + (fConst328 * fTemp38)) + (fConst329 * fTemp41)) + (fConst330 * fTemp42)) + (fConst333 * fTemp45)) + (fConst334 * fTemp46)) + (fConst335 * fTemp49)) + (fConst336 * fTemp50)) + (fConst339 * fTemp52)) + (fConst339 * fTemp54))) + (((fConst343 * fTemp66) + (0.021093750000000001 * (((fConst344 * fTemp67) + (fConst347 * fTemp25)) + (fConst347 * fTemp27)))) + (fConst322 * (((((((((((((((((fConst340 * ((0.015962904407738641 * fTemp11) + (0.015962904407738645 * fTemp13))) + (fConst348 * fTemp19)) + (fConst349 * fTemp21)) + (fConst350 * fTemp24)) + (fConst351 * fTemp26)) + (fConst352 * fTemp29)) + (fConst353 * fTemp32)) + (fConst354 * fTemp35)) + (fConst355 * fTemp36)) + (fConst356 * fTemp39)) + (fConst357 * fTemp40)) + (fConst358 * fTemp43)) + (fConst359 * fTemp44)) + (fConst360 * fTemp47)) + (fConst361 * fTemp48)) + (fConst362 * fTemp51)) + (fConst363 * fTemp53)))))); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + output18[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = (fRec1[0] * ((((0.022574955908289243 * ((fConst366 * fTemp9) + (fConst368 * fTemp18))) + (0.021093750000000001 * ((((fConst371 * fTemp21) + (fConst372 * fTemp22)) + (fConst375 * fTemp26)) + (fConst376 * fTemp27)))) + (fConst364 * ((((((((((((((((((fConst377 * fTemp7) + (fConst378 * fTemp16)) + (fConst379 * fTemp19)) + (fConst380 * fTemp20)) + (fConst381 * fTemp24)) + (fConst382 * fTemp25)) + (fConst383 * fTemp29)) + (fConst383 * fTemp30)) + (fConst385 * fTemp35)) + (fConst386 * fTemp36)) + (fConst387 * fTemp37)) + (fConst388 * fTemp38)) + (fConst390 * fTemp43)) + (fConst391 * fTemp44)) + (fConst392 * fTemp45)) + (fConst393 * fTemp46)) + (fConst395 * fTemp51)) + (fConst395 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst396 * fTemp32) + (fConst397 * fTemp33)) + (fConst399 * fTemp39)) + (fConst400 * fTemp40)) + (fConst401 * fTemp41)) + (fConst402 * fTemp42)) + (fConst404 * fTemp47)) + (fConst405 * fTemp48)) + (fConst406 * fTemp49)) + (fConst407 * fTemp50)) + (fConst409 * fTemp53)) + (fConst410 * fTemp54))))); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph19 = FAUSTFLOAT(fRec20[0]); + output19[i] = FAUSTFLOAT(fTemp93); + double fTemp94 = (fRec1[0] * ((((((0.014285714285714285 * fTemp74) + (0.038095238095238099 * fTemp72)) + (0.025396825396825397 * fTemp75)) + (0.0042514054232804339 * fTemp76)) + (0.0142547123015874 * fTemp73)) - ((0.027513227513227514 * fTemp71) + (0.024609375000000006 * fTemp28)))); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + output20[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = (fRec1[0] * ((fConst364 * ((((((((((((((((((fConst377 * fTemp6) + (fConst378 * fTemp15)) + (fConst380 * fTemp19)) + (fConst411 * fTemp22)) + (fConst382 * fTemp24)) + (fConst412 * fTemp27)) + (fConst413 * fTemp29)) + (fConst414 * fTemp33)) + (fConst386 * fTemp35)) + (fConst415 * fTemp36)) + (fConst416 * fTemp41)) + (fConst417 * fTemp42)) + (fConst391 * fTemp43)) + (fConst418 * fTemp44)) + (fConst419 * fTemp49)) + (fConst420 * fTemp50)) + (fConst421 * fTemp51)) + (fConst422 * fTemp54))) + (((0.022574955908289243 * ((fConst366 * fTemp8) + (fConst368 * fTemp17))) + (0.021093750000000001 * ((((fConst371 * fTemp20) + (fConst372 * fTemp21)) + (fConst375 * fTemp25)) + (fConst376 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst396 * fTemp30) + (fConst397 * fTemp32)) + (fConst423 * fTemp37)) + (fConst424 * fTemp38)) + (fConst400 * fTemp39)) + (fConst425 * fTemp40)) + (fConst426 * fTemp45)) + (fConst427 * fTemp46)) + (fConst405 * fTemp47)) + (fConst428 * fTemp48)) + (fConst409 * fTemp52)) + (fConst410 * fTemp53)))))); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph21 = FAUSTFLOAT(fRec22[0]); + output21[i] = FAUSTFLOAT(fTemp95); + double fTemp96 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst429 * fTemp31) + (fConst430 * fTemp33)) + (fConst431 * fTemp36)) + (fConst431 * fTemp37)) + (fConst432 * fTemp40)) + (fConst433 * fTemp41)) + (fConst434 * fTemp44)) + (fConst434 * fTemp45)) + (fConst435 * fTemp48)) + (fConst436 * fTemp49)) + (fConst437 * fTemp51)) + (fConst437 * fTemp52)) + (fConst438 * fTemp54))) + ((((fConst439 * fTemp79) + (0.022574955908289243 * (((((fConst440 * fTemp80) + (fConst441 * fTemp12)) + (fConst442 * fTemp14)) + (fConst444 * fTemp16)) + (fConst444 * fTemp18)))) + (0.021093750000000001 * ((((fConst445 * fTemp20) + (fConst446 * fTemp22)) + (fConst447 * fTemp25)) + (fConst448 * fTemp27)))) + (fConst322 * (((((((((((((((((((((fConst449 * fTemp81) + (fConst450 * fTemp6)) + (fConst450 * fTemp8)) + (fConst451 * fTemp11)) + (fConst452 * fTemp13)) + (fConst453 * fTemp15)) + (fConst453 * fTemp17)) + (fConst454 * fTemp19)) + (fConst455 * fTemp21)) + (fConst456 * fTemp24)) + (fConst457 * fTemp26)) + (fConst458 * fTemp32)) + (fConst459 * fTemp35)) + (fConst459 * fTemp38)) + (fConst460 * fTemp39)) + (fConst461 * fTemp42)) + (fConst462 * fTemp43)) + (fConst462 * fTemp46)) + (fConst463 * fTemp47)) + (fConst464 * fTemp50)) + (fConst465 * fTemp53)))))); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + output22[i] = FAUSTFLOAT(fTemp96); + double fTemp97 = (fRec1[0] * ((0.02017333553791887 * ((((((((((((fConst466 * fTemp29) + (fConst467 * fTemp33)) + (fConst468 * fTemp36)) + (fConst469 * fTemp38)) + (fConst470 * fTemp39)) + (fConst471 * fTemp41)) + (fConst472 * fTemp44)) + (fConst473 * fTemp46)) + (fConst474 * fTemp47)) + (fConst475 * fTemp49)) + (fConst476 * fTemp51)) + (fConst477 * fTemp54))) + (((0.022574955908289243 * ((fConst281 * fTemp8) + (fConst283 * fTemp17))) + (0.021093750000000001 * ((((fConst478 * fTemp19) + (fConst479 * fTemp22)) + (fConst480 * fTemp24)) + (fConst481 * fTemp27)))) + (fConst279 * ((((((((((((((((((fConst290 * fTemp6) + (fConst291 * fTemp15)) + (fConst292 * fTemp20)) + (fConst482 * fTemp21)) + (fConst294 * fTemp25)) + (fConst483 * fTemp26)) + (fConst484 * fTemp30)) + (fConst485 * fTemp32)) + (fConst486 * fTemp35)) + (fConst487 * fTemp37)) + (fConst488 * fTemp40)) + (fConst489 * fTemp42)) + (fConst490 * fTemp43)) + (fConst491 * fTemp45)) + (fConst492 * fTemp48)) + (fConst493 * fTemp50)) + (fConst494 * fTemp52)) + (fConst495 * fTemp53)))))); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + fVbargraph23 = FAUSTFLOAT(fRec24[0]); + output23[i] = FAUSTFLOAT(fTemp97); + double fTemp98 = (fRec1[0] * ((((0.022574955908289243 * ((((fConst496 * fTemp11) + (fConst497 * fTemp12)) + (fConst497 * fTemp13)) + (fConst497 * fTemp14))) + (0.021093750000000001 * ((((((((fConst498 * fTemp19) + (fConst499 * fTemp20)) + (fConst499 * fTemp21)) + (fConst499 * fTemp22)) + (fConst498 * fTemp24)) + (fConst499 * fTemp25)) + (fConst499 * fTemp26)) + (fConst499 * fTemp27)))) + (fConst273 * (((((((((((((((((((((((((0.16210987902026472 * fTemp74) + (0.072048835120117685 * fTemp6)) + (0.072048835120117685 * fTemp7)) + (0.072048835120117685 * fTemp8)) + (0.072048835120117685 * fTemp9)) + (0.072048835120117685 * fTemp15)) + (0.072048835120117685 * fTemp16)) + (0.072048835120117685 * fTemp17)) + (0.072048835120117685 * fTemp18)) + (0.059595081393300019 * fTemp35)) + (0.059595081393300449 * fTemp36)) + (0.059595081393300539 * fTemp37)) + (0.059595081393300019 * fTemp38)) + (0.059595081393300352 * fTemp39)) + (0.059595081393300338 * fTemp40)) + (0.059595081393300636 * fTemp41)) + (0.059595081393299554 * fTemp42)) + (0.059595081393300019 * fTemp43)) + (0.059595081393300449 * fTemp44)) + (0.059595081393300539 * fTemp45)) + (0.059595081393300019 * fTemp46)) + (0.059595081393300352 * fTemp47)) + (0.059595081393300338 * fTemp48)) + (0.059595081393300636 * fTemp49)) + (0.059595081393299554 * fTemp50)))) + (fConst500 * fTemp73))); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + output24[i] = FAUSTFLOAT(fTemp98); + fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; } @@ -1292,7 +2603,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1524,7 +2834,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1587,7 +2897,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1616,11 +2926,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncLebedev505.cpp b/source/HOAUGens/HOAEncLebedev505.cpp index 8b07cca970..2add56fa8d 100644 --- a/source/HOAUGens/HOAEncLebedev505.cpp +++ b/source/HOAUGens/HOAEncLebedev505.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncLebedev505" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,22 +613,910 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +/* link with : "" */ +#include +#include -double pow(double dummy0, double dummy1); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { private: + int fSamplingFreq; + double fConst0; FAUSTFLOAT fHslider0; + double fRec1[2]; double fRec0[2]; - int fSamplingFreq; + FAUSTFLOAT fVbargraph0; + double fConst1; + double fConst2; + double fConst3; + double fConst4; + double fConst5; + double fConst6; + double fConst7; + double fConst8; + double fConst9; + double fConst10; + double fConst11; + double fConst12; + double fConst13; + double fConst14; + double fConst15; + double fConst16; + double fRec2[2]; + FAUSTFLOAT fVbargraph1; + double fRec3[2]; + FAUSTFLOAT fVbargraph2; + double fConst17; + double fConst18; + double fConst19; + double fRec4[2]; + FAUSTFLOAT fVbargraph3; + double fConst20; + double fConst21; + double fConst22; + double fConst23; + double fConst24; + double fConst25; + double fConst26; + double fConst27; + double fConst28; + double fConst29; + double fConst30; + double fRec5[2]; + FAUSTFLOAT fVbargraph4; + double fConst31; + double fConst32; + double fConst33; + double fConst34; + double fConst35; + double fConst36; + double fConst37; + double fConst38; + double fConst39; + double fConst40; + double fConst41; + double fConst42; + double fConst43; + double fConst44; + double fConst45; + double fConst46; + double fConst47; + double fConst48; + double fConst49; + double fConst50; + double fConst51; + double fConst52; + double fConst53; + double fConst54; + double fConst55; + double fConst56; + double fConst57; + double fConst58; + double fConst59; + double fConst60; + double fConst61; + double fConst62; + double fConst63; + double fConst64; + double fConst65; + double fConst66; + double fConst67; + double fConst68; + double fConst69; + double fConst70; + double fConst71; + double fConst72; + double fConst73; + double fConst74; + double fRec6[2]; + FAUSTFLOAT fVbargraph5; + double fRec7[2]; + FAUSTFLOAT fVbargraph6; + double fConst75; + double fConst76; + double fConst77; + double fConst78; + double fConst79; + double fConst80; + double fConst81; + double fConst82; + double fConst83; + double fConst84; + double fConst85; + double fConst86; + double fConst87; + double fConst88; + double fConst89; + double fConst90; + double fConst91; + double fConst92; + double fConst93; + double fConst94; + double fRec8[2]; + FAUSTFLOAT fVbargraph7; + double fConst95; + double fConst96; + double fConst97; + double fConst98; + double fConst99; + double fConst100; + double fConst101; + double fConst102; + double fConst103; + double fConst104; + double fConst105; + double fConst106; + double fRec9[2]; + FAUSTFLOAT fVbargraph8; + double fConst107; + double fConst108; + double fConst109; + double fConst110; + double fConst111; + double fConst112; + double fConst113; + double fConst114; + double fConst115; + double fConst116; + double fConst117; + double fConst118; + double fConst119; + double fConst120; + double fConst121; + double fRec10[2]; + FAUSTFLOAT fVbargraph9; + double fConst122; + double fConst123; + double fConst124; + double fConst125; + double fConst126; + double fConst127; + double fConst128; + double fConst129; + double fConst130; + double fConst131; + double fConst132; + double fConst133; + double fConst134; + double fConst135; + double fConst136; + double fConst137; + double fConst138; + double fConst139; + double fConst140; + double fConst141; + double fConst142; + double fConst143; + double fConst144; + double fConst145; + double fConst146; + double fConst147; + double fConst148; + double fConst149; + double fConst150; + double fConst151; + double fConst152; + double fConst153; + double fConst154; + double fConst155; + double fConst156; + double fRec11[2]; + FAUSTFLOAT fVbargraph10; + double fConst157; + double fConst158; + double fConst159; + double fConst160; + double fConst161; + double fConst162; + double fConst163; + double fConst164; + double fConst165; + double fConst166; + double fConst167; + double fConst168; + double fConst169; + double fConst170; + double fConst171; + double fConst172; + double fConst173; + double fConst174; + double fConst175; + double fConst176; + double fConst177; + double fConst178; + double fConst179; + double fConst180; + double fConst181; + double fConst182; + double fConst183; + double fConst184; + double fConst185; + double fConst186; + double fConst187; + double fConst188; + double fConst189; + double fConst190; + double fConst191; + double fConst192; + double fConst193; + double fConst194; + double fConst195; + double fConst196; + double fConst197; + double fConst198; + double fConst199; + double fConst200; + double fConst201; + double fConst202; + double fConst203; + double fConst204; + double fConst205; + double fConst206; + double fConst207; + double fConst208; + double fConst209; + double fRec12[2]; + FAUSTFLOAT fVbargraph11; + double fRec13[2]; + FAUSTFLOAT fVbargraph12; + double fConst210; + double fConst211; + double fConst212; + double fConst213; + double fConst214; + double fConst215; + double fConst216; + double fConst217; + double fConst218; + double fConst219; + double fConst220; + double fConst221; + double fConst222; + double fConst223; + double fConst224; + double fConst225; + double fConst226; + double fConst227; + double fConst228; + double fConst229; + double fConst230; + double fRec14[2]; + FAUSTFLOAT fVbargraph13; + double fConst231; + double fConst232; + double fConst233; + double fConst234; + double fConst235; + double fConst236; + double fConst237; + double fConst238; + double fConst239; + double fConst240; + double fConst241; + double fConst242; + double fConst243; + double fConst244; + double fConst245; + double fConst246; + double fConst247; + double fConst248; + double fConst249; + double fConst250; + double fConst251; + double fConst252; + double fConst253; + double fConst254; + double fConst255; + double fConst256; + double fConst257; + double fConst258; + double fConst259; + double fConst260; + double fConst261; + double fConst262; + double fRec15[2]; + FAUSTFLOAT fVbargraph14; + double fConst263; + double fConst264; + double fConst265; + double fConst266; + double fConst267; + double fConst268; + double fConst269; + double fConst270; + double fConst271; + double fConst272; + double fRec16[2]; + FAUSTFLOAT fVbargraph15; + double fConst273; + double fConst274; + double fConst275; + double fConst276; + double fConst277; + double fConst278; + double fConst279; + double fConst280; + double fRec17[2]; + FAUSTFLOAT fVbargraph16; + double fConst281; + double fConst282; + double fConst283; + double fConst284; + double fConst285; + double fConst286; + double fConst287; + double fConst288; + double fConst289; + double fConst290; + double fConst291; + double fConst292; + double fConst293; + double fConst294; + double fConst295; + double fConst296; + double fConst297; + double fConst298; + double fConst299; + double fConst300; + double fConst301; + double fConst302; + double fConst303; + double fConst304; + double fConst305; + double fConst306; + double fConst307; + double fConst308; + double fConst309; + double fConst310; + double fConst311; + double fConst312; + double fConst313; + double fConst314; + double fConst315; + double fConst316; + double fConst317; + double fConst318; + double fConst319; + double fConst320; + double fConst321; + double fConst322; + double fConst323; + double fConst324; + double fRec18[2]; + FAUSTFLOAT fVbargraph17; + double fConst325; + double fConst326; + double fConst327; + double fConst328; + double fConst329; + double fConst330; + double fConst331; + double fConst332; + double fConst333; + double fConst334; + double fConst335; + double fConst336; + double fConst337; + double fConst338; + double fConst339; + double fConst340; + double fConst341; + double fConst342; + double fConst343; + double fConst344; + double fConst345; + double fConst346; + double fConst347; + double fConst348; + double fConst349; + double fConst350; + double fConst351; + double fConst352; + double fConst353; + double fConst354; + double fConst355; + double fConst356; + double fConst357; + double fConst358; + double fConst359; + double fConst360; + double fConst361; + double fConst362; + double fConst363; + double fConst364; + double fConst365; + double fConst366; + double fRec19[2]; + FAUSTFLOAT fVbargraph18; + double fConst367; + double fConst368; + double fConst369; + double fConst370; + double fConst371; + double fConst372; + double fConst373; + double fConst374; + double fConst375; + double fConst376; + double fConst377; + double fConst378; + double fConst379; + double fConst380; + double fConst381; + double fConst382; + double fConst383; + double fConst384; + double fConst385; + double fConst386; + double fConst387; + double fConst388; + double fConst389; + double fConst390; + double fConst391; + double fConst392; + double fConst393; + double fConst394; + double fConst395; + double fConst396; + double fConst397; + double fConst398; + double fConst399; + double fConst400; + double fConst401; + double fConst402; + double fConst403; + double fConst404; + double fConst405; + double fConst406; + double fConst407; + double fConst408; + double fConst409; + double fConst410; + double fConst411; + double fConst412; + double fConst413; + double fRec20[2]; + FAUSTFLOAT fVbargraph19; + double fRec21[2]; + FAUSTFLOAT fVbargraph20; + double fConst414; + double fConst415; + double fConst416; + double fConst417; + double fConst418; + double fConst419; + double fConst420; + double fConst421; + double fConst422; + double fConst423; + double fConst424; + double fConst425; + double fConst426; + double fConst427; + double fConst428; + double fConst429; + double fConst430; + double fConst431; + double fRec22[2]; + FAUSTFLOAT fVbargraph21; + double fConst432; + double fConst433; + double fConst434; + double fConst435; + double fConst436; + double fConst437; + double fConst438; + double fConst439; + double fConst440; + double fConst441; + double fConst442; + double fConst443; + double fConst444; + double fConst445; + double fConst446; + double fConst447; + double fConst448; + double fConst449; + double fConst450; + double fConst451; + double fConst452; + double fConst453; + double fConst454; + double fConst455; + double fConst456; + double fConst457; + double fConst458; + double fConst459; + double fConst460; + double fConst461; + double fConst462; + double fConst463; + double fConst464; + double fConst465; + double fConst466; + double fConst467; + double fConst468; + double fRec23[2]; + FAUSTFLOAT fVbargraph22; + double fConst469; + double fConst470; + double fConst471; + double fConst472; + double fConst473; + double fConst474; + double fConst475; + double fConst476; + double fConst477; + double fConst478; + double fConst479; + double fConst480; + double fConst481; + double fConst482; + double fConst483; + double fConst484; + double fConst485; + double fConst486; + double fConst487; + double fConst488; + double fConst489; + double fConst490; + double fConst491; + double fConst492; + double fConst493; + double fConst494; + double fConst495; + double fConst496; + double fConst497; + double fConst498; + double fRec24[2]; + FAUSTFLOAT fVbargraph23; + double fConst499; + double fConst500; + double fConst501; + double fConst502; + double fConst503; + double fRec25[2]; + FAUSTFLOAT fVbargraph24; + double fConst504; + double fConst505; + double fConst506; + double fConst507; + double fConst508; + double fConst509; + double fConst510; + double fConst511; + double fConst512; + double fConst513; + double fConst514; + double fConst515; + double fRec26[2]; + FAUSTFLOAT fVbargraph25; + double fConst516; + double fConst517; + double fConst518; + double fConst519; + double fConst520; + double fConst521; + double fConst522; + double fConst523; + double fConst524; + double fConst525; + double fConst526; + double fConst527; + double fConst528; + double fConst529; + double fConst530; + double fConst531; + double fConst532; + double fConst533; + double fConst534; + double fConst535; + double fConst536; + double fConst537; + double fConst538; + double fConst539; + double fConst540; + double fConst541; + double fConst542; + double fConst543; + double fConst544; + double fConst545; + double fConst546; + double fRec27[2]; + FAUSTFLOAT fVbargraph26; + double fConst547; + double fConst548; + double fConst549; + double fConst550; + double fConst551; + double fConst552; + double fConst553; + double fConst554; + double fConst555; + double fConst556; + double fConst557; + double fConst558; + double fConst559; + double fConst560; + double fConst561; + double fConst562; + double fConst563; + double fConst564; + double fConst565; + double fConst566; + double fConst567; + double fConst568; + double fConst569; + double fConst570; + double fConst571; + double fConst572; + double fConst573; + double fConst574; + double fConst575; + double fConst576; + double fConst577; + double fConst578; + double fConst579; + double fConst580; + double fConst581; + double fConst582; + double fConst583; + double fConst584; + double fConst585; + double fConst586; + double fConst587; + double fConst588; + double fConst589; + double fConst590; + double fConst591; + double fConst592; + double fConst593; + double fConst594; + double fConst595; + double fConst596; + double fConst597; + double fConst598; + double fConst599; + double fRec28[2]; + FAUSTFLOAT fVbargraph27; + double fConst600; + double fConst601; + double fConst602; + double fConst603; + double fConst604; + double fConst605; + double fConst606; + double fConst607; + double fConst608; + double fConst609; + double fConst610; + double fConst611; + double fConst612; + double fConst613; + double fConst614; + double fConst615; + double fConst616; + double fConst617; + double fConst618; + double fConst619; + double fConst620; + double fConst621; + double fConst622; + double fConst623; + double fConst624; + double fConst625; + double fConst626; + double fConst627; + double fConst628; + double fConst629; + double fConst630; + double fConst631; + double fConst632; + double fConst633; + double fConst634; + double fConst635; + double fRec29[2]; + FAUSTFLOAT fVbargraph28; + double fConst636; + double fConst637; + double fConst638; + double fConst639; + double fConst640; + double fConst641; + double fConst642; + double fConst643; + double fConst644; + double fConst645; + double fConst646; + double fConst647; + double fConst648; + double fConst649; + double fConst650; + double fConst651; + double fConst652; + double fConst653; + double fConst654; + double fConst655; + double fConst656; + double fConst657; + double fConst658; + double fConst659; + double fConst660; + double fConst661; + double fConst662; + double fConst663; + double fConst664; + double fConst665; + double fConst666; + double fConst667; + double fConst668; + double fConst669; + double fConst670; + double fConst671; + double fConst672; + double fConst673; + double fConst674; + double fConst675; + double fConst676; + double fConst677; + double fConst678; + double fConst679; + double fConst680; + double fConst681; + double fConst682; + double fConst683; + double fConst684; + double fConst685; + double fConst686; + double fConst687; + double fConst688; + double fConst689; + double fConst690; + double fConst691; + double fRec30[2]; + FAUSTFLOAT fVbargraph29; + double fRec31[2]; + FAUSTFLOAT fVbargraph30; + double fConst692; + double fConst693; + double fConst694; + double fConst695; + double fConst696; + double fConst697; + double fConst698; + double fConst699; + double fConst700; + double fConst701; + double fConst702; + double fConst703; + double fConst704; + double fConst705; + double fConst706; + double fConst707; + double fConst708; + double fConst709; + double fConst710; + double fConst711; + double fRec32[2]; + FAUSTFLOAT fVbargraph31; + double fConst712; + double fConst713; + double fConst714; + double fConst715; + double fConst716; + double fConst717; + double fConst718; + double fConst719; + double fConst720; + double fConst721; + double fConst722; + double fConst723; + double fConst724; + double fConst725; + double fConst726; + double fConst727; + double fConst728; + double fConst729; + double fConst730; + double fConst731; + double fConst732; + double fConst733; + double fConst734; + double fConst735; + double fConst736; + double fConst737; + double fConst738; + double fConst739; + double fConst740; + double fConst741; + double fConst742; + double fConst743; + double fConst744; + double fRec33[2]; + FAUSTFLOAT fVbargraph32; + double fConst745; + double fConst746; + double fConst747; + double fConst748; + double fConst749; + double fConst750; + double fConst751; + double fConst752; + double fConst753; + double fConst754; + double fConst755; + double fConst756; + double fConst757; + double fConst758; + double fConst759; + double fConst760; + double fConst761; + double fConst762; + double fConst763; + double fConst764; + double fConst765; + double fConst766; + double fConst767; + double fConst768; + double fConst769; + double fConst770; + double fConst771; + double fConst772; + double fConst773; + double fConst774; + double fConst775; + double fConst776; + double fConst777; + double fRec34[2]; + FAUSTFLOAT fVbargraph33; + double fConst778; + double fConst779; + double fConst780; + double fConst781; + double fConst782; + double fConst783; + double fConst784; + double fConst785; + double fConst786; + double fConst787; + double fConst788; + double fConst789; + double fConst790; + double fConst791; + double fConst792; + double fConst793; + double fConst794; + double fConst795; + double fConst796; + double fConst797; + double fConst798; + double fConst799; + double fConst800; + double fRec35[2]; + FAUSTFLOAT fVbargraph34; + double fConst801; + double fConst802; + double fConst803; + double fConst804; + double fConst805; + double fConst806; + double fConst807; + double fConst808; + double fConst809; + double fRec36[2]; + FAUSTFLOAT fVbargraph35; public: @@ -623,31 +1525,31 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAEncLebedev505"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1033,6 +1935,816 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; + fConst0 = (80.0 / min(192000.0, max(1.0, double(fSamplingFreq)))); + fConst1 = double(tgamma(1.0)); + fConst2 = double(tgamma(3.0)); + fConst3 = double(tgamma(1.5)); + fConst4 = (sqrt((3.0 * (fConst1 / fConst2))) * fConst3); + fConst5 = (0.012698412698412698 * (0.0 - (1.5957691216057308 * fConst4))); + fConst6 = (0.0 - (1.1283791670955128 * fConst4)); + fConst7 = (0.0 - (1.1283791670955126 * fConst4)); + fConst8 = (0.0 - (1.128379167095513 * fConst4)); + fConst9 = (0.0 - (0.92131773192356115 * fConst4)); + fConst10 = (0.0 - (0.92131773192356148 * fConst4)); + fConst11 = (0.0 - (0.48114249349102017 * fConst4)); + fConst12 = (0.0 - (0.48114249349102034 * fConst4)); + fConst13 = (0.0 - (0.48114249349102112 * fConst4)); + fConst14 = (0.0 - (1.4434274804730622 * fConst4)); + fConst15 = (0.0 - (1.4434274804730625 * fConst4)); + fConst16 = (0.0 - (0.48114249349102228 * fConst4)); + fConst17 = (0.0 - (0.48114249349102062 * fConst4)); + fConst18 = (0.0 - (1.443427480473062 * fConst4)); + fConst19 = (0.0 - (0.48114249349102095 * fConst4)); + fConst20 = double(tgamma(5.0)); + fConst21 = double(tgamma(2.5)); + fConst22 = (sqrt((5.0 * (fConst1 / fConst20))) * fConst21); + fConst23 = (0.0 - (0.58027968058390089 * fConst22)); + fConst24 = (0.0 - (1.7408390417517061 * fConst22)); + fConst25 = (0.0 - (1.7408390417517088 * fConst22)); + fConst26 = (0.0 - (1.7408390417517057 * fConst22)); + fConst27 = (0.0 - (1.7408390417517114 * fConst22)); + fConst28 = (0.0 - (3.1915382432114616 * fConst22)); + fConst29 = (0.022574955908289243 * fConst28); + fConst30 = (0.021093750000000001 * (0.0 - (2.1276921621409737 * fConst22))); + fConst31 = double(tgamma(2.0)); + fConst32 = double(tgamma(4.0)); + fConst33 = sqrt((5.0 * (fConst31 / fConst32))); + fConst34 = (fConst33 * fConst3); + fConst35 = (0.0 - (2.3936536824085959 * fConst34)); + fConst36 = (0.0 - (1.6925687506432687 * fConst3)); + fConst37 = (0.0 - (1.4142135623730951 * (fConst33 * fConst36))); + fConst38 = (0.0 - (1.5957691216057308 * fConst34)); + fConst39 = (0.0 - (1.5957691216057313 * fConst34)); + fConst40 = (0.0 - (1.5957691216057308 * fConst3)); + fConst41 = (fConst33 * fConst40); + fConst42 = (0.0 - fConst41); + fConst43 = (0.0 - (1.0000000000000002 * fConst41)); + fConst44 = (0.054036626340088233 * fConst3); + fConst45 = (0.031925808815477283 * fConst36); + fConst46 = (0.033660754908870889 * fConst3); + fConst47 = (0.021093750000000001 * fConst40); + fConst48 = (0.021093750000000005 * fConst40); + fConst49 = (0.026338897580074728 * fConst3); + fConst50 = (0.0087796325266915921 * fConst3); + fConst51 = (0.026338897580074742 * fConst3); + fConst52 = (0.026338897580074745 * fConst3); + fConst53 = (0.0087796325266915939 * fConst3); + fConst54 = (0.0 - (0.97315860881060223 * fConst3)); + fConst55 = (0.0090217899191397874 * fConst54); + fConst56 = (0.027065369757419327 * fConst54); + fConst57 = (0.027065369757419331 * fConst54); + fConst58 = (0.0090217899191397891 * fConst54); + fConst59 = (0.0 - (1.3056292813137786 * fConst3)); + fConst60 = (0.020173335537918873 * fConst59); + fConst61 = (0.0 - (1.3056292813137786 * fConst34)); + fConst62 = (0.0 - (1.3056292813137791 * fConst34)); + fConst63 = (0.0 - (0.43520976043792686 * fConst34)); + fConst64 = (0.0 - (1.3056292813137795 * fConst34)); + fConst65 = (0.0 - (1.3056292813137798 * fConst34)); + fConst66 = (0.0 - (0.43520976043792792 * fConst34)); + fConst67 = (fConst33 * fConst54); + fConst68 = (0.0 - (0.44721359549995832 * fConst67)); + fConst69 = (0.0 - (1.3416407864998738 * fConst67)); + fConst70 = (0.0 - (1.3416407864998741 * fConst67)); + fConst71 = (0.0 - (0.44721359549995937 * fConst67)); + fConst72 = (fConst33 * fConst59); + fConst73 = (0.0 - fConst72); + fConst74 = (0.0 - (1.0000000000000002 * fConst72)); + fConst75 = (0.033660754908870882 * fConst3); + fConst76 = (0.021093749999999998 * fConst40); + fConst77 = (0.026338897580074724 * fConst3); + fConst78 = (0.026338897580074721 * fConst3); + fConst79 = (0.026338897580074738 * fConst3); + fConst80 = (0.0087796325266915817 * fConst3); + fConst81 = (0.0087796325266915748 * fConst3); + fConst82 = (0.026338897580074731 * fConst3); + fConst83 = (0.027065369757419324 * fConst54); + fConst84 = (0.009021789919139777 * fConst54); + fConst85 = (0.00902178991913977 * fConst54); + fConst86 = (0.027065369757419321 * fConst54); + fConst87 = (0.02017333553791887 * fConst59); + fConst88 = (0.020173335537918866 * fConst59); + fConst89 = (0.0 - (0.43520976043792636 * fConst34)); + fConst90 = (0.0 - (1.3056292813137793 * fConst34)); + fConst91 = (0.0 - (0.4352097604379267 * fConst34)); + fConst92 = (0.0 - (0.44721359549995782 * fConst67)); + fConst93 = (0.0 - (1.3416407864998736 * fConst67)); + fConst94 = (0.0 - (0.44721359549995815 * fConst67)); + fConst95 = (0.0 - (1.2884797242127563e-16 * fConst22)); + fConst96 = (0.0 - (2.5769594484255127e-16 * fConst22)); + fConst97 = (0.0 - (2.3211187223356089 * fConst22)); + fConst98 = (0.0 - (2.3211187223356093 * fConst22)); + fConst99 = (0.0 - (2.3211187223356085 * fConst22)); + fConst100 = (0.0 - (2.3211187223356098 * fConst22)); + fConst101 = (0.012698412698412698 * fConst28); + fConst102 = (0.0 - (1.595769121605731 * fConst22)); + fConst103 = (0.0 - (7.0866384831701748e-16 * fConst22)); + fConst104 = (0.0 - (1.417327696634035e-15 * fConst22)); + fConst105 = (0.0 - (4.7244256554467816e-16 * fConst22)); + fConst106 = (0.0 - (9.4488513108935631e-16 * fConst22)); + fConst107 = double(tgamma(7.0)); + fConst108 = double(tgamma(3.5)); + fConst109 = (sqrt((7.0 * (fConst1 / fConst107))) * fConst108); + fConst110 = (0.012698412698412698 * (0.0 - (6.3830764864229232 * fConst109))); + fConst111 = (0.0 - (2.256758334191026 * fConst109)); + fConst112 = (0.0 - (4.5135166683820547 * fConst109)); + fConst113 = (0.0 - (4.5135166683820476 * fConst109)); + fConst114 = (0.0 - (2.456847285129498 * fConst109)); + fConst115 = (0.0 - (2.456847285129494 * fConst109)); + fConst116 = (0.0 - (0.34992181344801421 * fConst109)); + fConst117 = (0.0 - (0.34992181344801365 * fConst109)); + fConst118 = (0.0 - (3.1492963210321352 * fConst109)); + fConst119 = (0.0 - (3.1492963210321379 * fConst109)); + fConst120 = (0.0 - (4.5489835748241987 * fConst109)); + fConst121 = (0.0 - (4.5489835748242058 * fConst109)); + fConst122 = double(tgamma(6.0)); + fConst123 = sqrt((7.0 * (fConst31 / fConst122))); + fConst124 = (fConst123 * fConst21); + fConst125 = (0.0 - (2.6244136008601107 * fConst124)); + fConst126 = (0.0 - (2.624413600860108 * fConst124)); + fConst127 = (0.0 - (2.6244136008601116 * fConst124)); + fConst128 = (0.0 - (2.6244136008601155 * fConst124)); + fConst129 = (0.0 - (2.6244136008601191 * fConst124)); + fConst130 = (0.0 - (3.0929010896773175 * fConst21)); + fConst131 = (fConst123 * fConst130); + fConst132 = (0.0 - (0.84852813742385691 * fConst131)); + fConst133 = (0.0 - (0.84852813742385813 * fConst131)); + fConst134 = (0.0 - (0.84852813742385658 * fConst131)); + fConst135 = (0.0 - (0.84852813742385946 * fConst131)); + fConst136 = (0.0 - (1.8557406538063874 * fConst21)); + fConst137 = (fConst123 * fConst136); + fConst138 = (0.0 - (1.4142135623730951 * fConst137)); + fConst139 = (0.0 - (6.1421182128237417 * fConst124)); + fConst140 = (0.0 - (4.3431334391370653 * fConst21)); + fConst141 = (fConst123 * fConst140); + fConst142 = (0.0 - (1.4142135623730951 * fConst141)); + fConst143 = (0.029831067331307477 * fConst140); + fConst144 = (0.029831067331307481 * fConst140); + fConst145 = (0.052943176160428845 * fConst21); + fConst146 = (0.052943176160428852 * fConst21); + fConst147 = (0.052943176160428991 * fConst21); + fConst148 = (0.052943176160428929 * fConst21); + fConst149 = (0.052943176160428963 * fConst21); + fConst150 = (0.052943176160428942 * fConst21); + fConst151 = (0.017117642829616822 * fConst130); + fConst152 = (0.017117642829616801 * fConst130); + fConst153 = (0.017117642829616815 * fConst130); + fConst154 = (0.017117642829616808 * fConst130); + fConst155 = (0.028529404716028006 * fConst136); + fConst156 = (0.028529404716028009 * fConst136); + fConst157 = sqrt((7.0 * (fConst2 / fConst20))); + fConst158 = (0.0 - (3.3851375012865379 * fConst3)); + fConst159 = (fConst157 * fConst158); + fConst160 = (0.012698412698412698 * (0.0 - (0.70710678118654757 * fConst159))); + fConst161 = (fConst157 * fConst3); + fConst162 = (0.0 - (2.5388531259649025 * fConst161)); + fConst163 = (0.0 - (0.5 * fConst159)); + fConst164 = (0.0 - (0.50000000000000011 * fConst159)); + fConst165 = (0.0 - ((3.5355339059327373 * fConst36) + (2.3936536824085963 * fConst3))); + fConst166 = (0.0 - (0.70710678118654757 * (fConst157 * fConst165))); + fConst167 = (0.0 - (0.92131773192356159 * fConst161)); + fConst168 = (0.0 - (0.92131773192356192 * fConst161)); + fConst169 = (0.0 - ((2.8867513459481291 * fConst40) + (2.7639531957706835 * fConst3))); + fConst170 = (fConst157 * fConst169); + fConst171 = (0.0 - (0.5 * fConst170)); + fConst172 = (0.0 - (0.50000000000000011 * fConst170)); + fConst173 = (0.057314497376279992 * fConst3); + fConst174 = (0.0089791337293529845 * fConst158); + fConst175 = (0.011287477954144622 * fConst158); + fConst176 = (0.011287477954144623 * fConst158); + fConst177 = (0.015962904407738641 * fConst165); + fConst178 = (0.019434045907762629 * fConst3); + fConst179 = (0.019434045907762633 * fConst3); + fConst180 = (0.010546875000000001 * fConst169); + fConst181 = (0.010546875000000002 * fConst169); + fConst182 = (0.045001699736364593 * fConst3); + fConst183 = (0.0 - (1.7605101637794649 * fConst3)); + fConst184 = (0.0045108949595698937 * fConst183); + fConst185 = (0.013532684878709664 * fConst183); + fConst186 = (0.013532684878709665 * fConst183); + fConst187 = (0.0045108949595698946 * fConst183); + fConst188 = (0.0 - ((1.5075567228888176 * fConst54) + (3.2276019669290172 * fConst3))); + fConst189 = (0.0045108949595698937 * fConst188); + fConst190 = (0.013532684878709664 * fConst188); + fConst191 = (0.013532684878709665 * fConst188); + fConst192 = (0.0045108949595698946 * fConst188); + fConst193 = (0.0 - ((4.5226701686664557 * fConst59) + (1.4434274804730605 * fConst3))); + fConst194 = (0.010086667768959437 * fConst193); + fConst195 = (0.0 - (2.230751560731095 * fConst161)); + fConst196 = (0.0 - (2.2307515607310959 * fConst161)); + fConst197 = (fConst157 * fConst183); + fConst198 = (0.0 - (0.22360679774997916 * fConst197)); + fConst199 = (0.0 - (0.67082039324993692 * fConst197)); + fConst200 = (0.0 - (0.67082039324993703 * fConst197)); + fConst201 = (0.0 - (0.22360679774997969 * fConst197)); + fConst202 = (fConst157 * fConst188); + fConst203 = (0.0 - (0.22360679774997916 * fConst202)); + fConst204 = (0.0 - (0.67082039324993692 * fConst202)); + fConst205 = (0.0 - (0.67082039324993703 * fConst202)); + fConst206 = (0.0 - (0.22360679774997969 * fConst202)); + fConst207 = (fConst157 * fConst193); + fConst208 = (0.0 - (0.5 * fConst207)); + fConst209 = (0.0 - (0.50000000000000011 * fConst207)); + fConst210 = (0.01128747795414462 * fConst158); + fConst211 = (0.019434045907762626 * fConst3); + fConst212 = (0.010546874999999999 * fConst169); + fConst213 = (0.045001699736364587 * fConst3); + fConst214 = (0.045001699736364573 * fConst3); + fConst215 = (0.013532684878709662 * fConst183); + fConst216 = (0.0045108949595698885 * fConst183); + fConst217 = (0.004510894959569885 * fConst183); + fConst218 = (0.01353268487870966 * fConst183); + fConst219 = (0.013532684878709662 * fConst188); + fConst220 = (0.0045108949595698885 * fConst188); + fConst221 = (0.004510894959569885 * fConst188); + fConst222 = (0.01353268487870966 * fConst188); + fConst223 = (0.010086667768959435 * fConst193); + fConst224 = (0.010086667768959433 * fConst193); + fConst225 = (0.0 - (0.22360679774997891 * fConst197)); + fConst226 = (0.0 - (0.67082039324993681 * fConst197)); + fConst227 = (0.0 - (0.22360679774997907 * fConst197)); + fConst228 = (0.0 - (0.22360679774997891 * fConst202)); + fConst229 = (0.0 - (0.67082039324993681 * fConst202)); + fConst230 = (0.0 - (0.22360679774997907 * fConst202)); + fConst231 = (0.0 - (5.8273688116286149e-16 * fConst124)); + fConst232 = (0.0 - (1.165473762325723e-15 * fConst124)); + fConst233 = (0.0 - (3.4992181344801496 * fConst124)); + fConst234 = (0.0 - (3.4992181344801501 * fConst124)); + fConst235 = (0.0 - (3.4992181344801487 * fConst124)); + fConst236 = (0.0 - (3.4992181344801505 * fConst124)); + fConst237 = (0.0 - (1.1313708498984762 * fConst131)); + fConst238 = (0.0 - (1.1313708498984758 * fConst131)); + fConst239 = (0.0 - (1.1313708498984765 * fConst131)); + fConst240 = (0.0 - (3.1401849173675503e-16 * fConst137)); + fConst241 = (0.0 - (6.2803698347351007e-16 * fConst137)); + fConst242 = (0.0 - (5.6418958354775643 * fConst124)); + fConst243 = (0.0 - (3.9894228040143274 * fConst21)); + fConst244 = (0.0 - (1.4142135623730951 * (fConst123 * fConst243))); + fConst245 = (0.0 - (1.3638242119692871e-15 * fConst124)); + fConst246 = (0.0 - (2.7276484239385742e-15 * fConst124)); + fConst247 = (0.0 - (3.1401849173675503e-16 * fConst141)); + fConst248 = (0.0 - (6.2803698347351007e-16 * fConst141)); + fConst249 = (0.12736554972506672 * fConst21); + fConst250 = (0.031925808815477283 * fConst243); + fConst251 = (2.8768166971227152e-17 * fConst21); + fConst252 = (5.7536333942454304e-17 * fConst21); + fConst253 = (6.6238275600721768e-18 * fConst140); + fConst254 = (1.3247655120144354e-17 * fConst140); + fConst255 = (2.3511493268037518e-17 * fConst21); + fConst256 = (0.070590901547238516 * fConst21); + fConst257 = (0.070590901547238558 * fConst21); + fConst258 = (0.07059090154723846 * fConst21); + fConst259 = (0.022823523772822384 * fConst130); + fConst260 = (0.022823523772822398 * fConst130); + fConst261 = (0.022823523772822367 * fConst130); + fConst262 = (1.2669600797833527e-17 * fConst136); + fConst263 = (0.0 - (0.34992181344801404 * fConst109)); + fConst264 = (0.0 - (0.34992181344801415 * fConst109)); + fConst265 = (0.0 - (4.548983574824196 * fConst109)); + fConst266 = (0.0 - (3.1492963210321285 * fConst109)); + fConst267 = (0.0 - (3.1492963210321339 * fConst109)); + fConst268 = (0.0 - (4.5489835748241934 * fConst109)); + fConst269 = (0.0 - (4.5135166683820485 * fConst109)); + fConst270 = (0.0 - (4.5135166683820538 * fConst109)); + fConst271 = (0.0 - (2.4568472851294949 * fConst109)); + fConst272 = (0.0 - (2.4568472851294976 * fConst109)); + fConst273 = double(tgamma(9.0)); + fConst274 = double(tgamma(4.5)); + fConst275 = (sqrt((9.0 * (fConst1 / fConst273))) * fConst274); + fConst276 = (0.0 - (1.9878387281720961e-16 * fConst275)); + fConst277 = (0.0 - (10.128518061100836 * fConst275)); + fConst278 = (0.0 - (10.128518061100845 * fConst275)); + fConst279 = (0.0 - (10.12851806110084 * fConst275)); + fConst280 = (0.0 - (10.12851806110085 * fConst275)); + fConst281 = double(tgamma(8.0)); + fConst282 = sqrt((9.0 * (fConst31 / fConst281))); + fConst283 = (fConst282 * fConst108); + fConst284 = (0.0 - (11.170383851240118 * fConst283)); + fConst285 = (0.0 - (7.898654169668589 * fConst108)); + fConst286 = (0.0 - (1.4142135623730951 * (fConst282 * fConst285))); + fConst287 = (0.0 - (9.9292300899912185 * fConst283)); + fConst288 = (0.0 - (9.9292300899912025 * fConst283)); + fConst289 = (0.0 - (9.9292300899912096 * fConst108)); + fConst290 = (fConst282 * fConst289); + fConst291 = (0.0 - (1.0000000000000009 * fConst290)); + fConst292 = (0.0 - (0.99999999999999933 * fConst290)); + fConst293 = (0.25217092292041182 * fConst108); + fConst294 = (0.031925808815477283 * fConst285); + fConst295 = (0.20944469721075218 * fConst108); + fConst296 = (0.20944469721075201 * fConst108); + fConst297 = (0.021093750000000012 * fConst289); + fConst298 = (0.021093749999999994 * fConst289); + fConst299 = (0.044696311044975172 * fConst108); + fConst300 = (0.19368401452822653 * fConst108); + fConst301 = (0.19368401452822659 * fConst108); + fConst302 = (0.13408893313492587 * fConst108); + fConst303 = (0.13408893313492612 * fConst108); + fConst304 = (0.0 - (8.2571033474838984 * fConst108)); + fConst305 = (0.023456653789763436 * fConst304); + fConst306 = (0.02345665378976344 * fConst304); + fConst307 = (0.016239221854451587 * fConst304); + fConst308 = (0.016239221854451615 * fConst304); + fConst309 = (0.0 - (2.2156133258658013 * fConst108)); + fConst310 = (0.020173335537918863 * fConst309); + fConst311 = (0.0 - (2.2156133258658035 * fConst283)); + fConst312 = (0.0 - (2.2156133258658 * fConst283)); + fConst313 = (0.0 - (6.6468399775974225 * fConst283)); + fConst314 = (0.0 - (6.6468399775974278 * fConst283)); + fConst315 = (0.0 - (9.6009910787518393 * fConst283)); + fConst316 = (0.0 - (9.6009910787518553 * fConst283)); + fConst317 = (fConst282 * fConst304); + fConst318 = (0.0 - (0.80498447189992428 * fConst317)); + fConst319 = (0.0 - (0.80498447189992484 * fConst317)); + fConst320 = (0.0 - (1.1627553482998914 * fConst317)); + fConst321 = (0.0 - (1.1627553482998934 * fConst317)); + fConst322 = (fConst282 * fConst309); + fConst323 = (0.0 - (1.0000000000000009 * fConst322)); + fConst324 = (0.0 - (0.99999999999999933 * fConst322)); + fConst325 = sqrt((9.0 * (fConst2 / fConst107))); + fConst326 = (fConst325 * fConst21); + fConst327 = (0.0 - (6.8578507705370146 * fConst326)); + fConst328 = (0.0 - (3.7301790647785582 * fConst21)); + fConst329 = (fConst325 * fConst328); + fConst330 = (0.0 - (0.42426406871192845 * fConst329)); + fConst331 = (0.0 - (0.42426406871192907 * fConst329)); + fConst332 = (0.0 - (0.42426406871192829 * fConst329)); + fConst333 = (0.0 - (0.42426406871192973 * fConst329)); + fConst334 = (0.0 - ((2.1105794120443448 * fConst130) + (10.257992428141025 * fConst21))); + fConst335 = (fConst325 * fConst334); + fConst336 = (0.0 - (0.42426406871192845 * fConst335)); + fConst337 = (0.0 - (0.42426406871192907 * fConst335)); + fConst338 = (0.0 - (0.42426406871192829 * fConst335)); + fConst339 = (0.0 - (0.42426406871192973 * fConst335)); + fConst340 = (0.0 - ((6.3317382361330381 * fConst136) + (2.0515984856282001 * fConst21))); + fConst341 = (fConst325 * fConst340); + fConst342 = (0.0 - (0.70710678118654757 * fConst341)); + fConst343 = (0.0 - (11.283791670955125 * fConst21)); + fConst344 = (fConst325 * fConst343); + fConst345 = (0.0 - (0.70710678118654757 * fConst344)); + fConst346 = (0.022574955908289243 * fConst345); + fConst347 = (0.0 - (7.0923072071365816 * fConst326)); + fConst348 = (0.0 - ((4.0414518843273806 * fConst140) + (7.5225277806367483 * fConst21))); + fConst349 = (fConst325 * fConst348); + fConst350 = (0.0 - (0.70710678118654757 * fConst349)); + fConst351 = (0.14960335515053727 * fConst21); + fConst352 = (0.14960335515053733 * fConst21); + fConst353 = (0.014915533665653739 * fConst348); + fConst354 = (0.01491553366565374 * fConst348); + fConst355 = (0.13834572466301867 * fConst21); + fConst356 = (0.1383457246630187 * fConst21); + fConst357 = (0.008558821414808411 * fConst328); + fConst358 = (0.0085588214148084006 * fConst328); + fConst359 = (0.0085588214148084076 * fConst328); + fConst360 = (0.0085588214148084041 * fConst328); + fConst361 = (0.008558821414808411 * fConst334); + fConst362 = (0.0085588214148084006 * fConst334); + fConst363 = (0.0085588214148084076 * fConst334); + fConst364 = (0.0085588214148084041 * fConst334); + fConst365 = (0.014264702358014003 * fConst340); + fConst366 = (0.014264702358014004 * fConst340); + fConst367 = sqrt((9.0 * (fConst32 / fConst122))); + fConst368 = (fConst367 * fConst3); + fConst369 = (0.0 - (0.99735570100357918 * fConst368)); + fConst370 = (0.0 - ((2.4748737341529159 * fConst165) + (4.0 * fConst36))); + fConst371 = (0.0 - (0.47140452079103168 * (fConst367 * fConst370))); + fConst372 = (0.0 - (2.6596152026762163 * fConst3)); + fConst373 = (fConst367 * fConst372); + fConst374 = (0.0 - (0.33333333333333331 * fConst373)); + fConst375 = (0.0 - (0.33333333333333343 * fConst373)); + fConst376 = (0.0 - ((2.0207259421636903 * fConst169) + (4.0 * fConst40))); + fConst377 = (fConst367 * fConst376); + fConst378 = (0.0 - (0.33333333333333331 * fConst377)); + fConst379 = (0.0 - (0.33333333333333343 * fConst377)); + fConst380 = (0.02251526097503671 * fConst3); + fConst381 = (0.010641936271825759 * fConst370); + fConst382 = (0.0070312500000000002 * fConst372); + fConst383 = (0.007031250000000001 * fConst372); + fConst384 = (0.0070312500000000002 * fConst376); + fConst385 = (0.007031250000000001 * fConst376); + fConst386 = (0.059861130863806261 * fConst3); + fConst387 = ((1.0552897060221724 * fConst183) - (3.8926344352424089 * fConst3)); + fConst388 = (0.0030072633063799288 * fConst387); + fConst389 = (0.0090217899191397753 * fConst387); + fConst390 = (0.009021789919139777 * fConst387); + fConst391 = (0.0030072633063799293 * fConst387); + fConst392 = (0.0 - ((1.0552897060221724 * fConst188) + (4.0 * fConst54))); + fConst393 = (0.0030072633063799288 * fConst392); + fConst394 = (0.0090217899191397753 * fConst392); + fConst395 = (0.009021789919139777 * fConst392); + fConst396 = (0.0030072633063799293 * fConst392); + fConst397 = (0.0 - ((3.1658691180665191 * fConst193) + (4.0 * fConst59))); + fConst398 = (0.0067244451793062911 * fConst397); + fConst399 = (fConst367 * fConst387); + fConst400 = (0.0 - (0.14907119849998646 * fConst399)); + fConst401 = (0.0 - (2.9673392757131363 * fConst368)); + fConst402 = (0.0 - (2.9673392757131376 * fConst368)); + fConst403 = (0.0 - (0.1490711984999861 * fConst399)); + fConst404 = (0.0 - (0.44721359549995793 * fConst399)); + fConst405 = (0.0 - (0.44721359549995798 * fConst399)); + fConst406 = (fConst367 * fConst392); + fConst407 = (0.0 - (0.1490711984999861 * fConst406)); + fConst408 = (0.0 - (0.44721359549995793 * fConst406)); + fConst409 = (0.0 - (0.44721359549995798 * fConst406)); + fConst410 = (0.0 - (0.14907119849998646 * fConst406)); + fConst411 = (fConst367 * fConst397); + fConst412 = (0.0 - (0.33333333333333331 * fConst411)); + fConst413 = (0.0 - (0.33333333333333343 * fConst411)); + fConst414 = (0.0070312499999999993 * fConst372); + fConst415 = (0.0070312499999999993 * fConst376); + fConst416 = (0.059861130863806254 * fConst3); + fConst417 = (0.05986113086380624 * fConst3); + fConst418 = (0.0030072633063799254 * fConst387); + fConst419 = (0.0030072633063799232 * fConst387); + fConst420 = (0.0090217899191397718 * fConst387); + fConst421 = (0.0030072633063799254 * fConst392); + fConst422 = (0.0030072633063799232 * fConst392); + fConst423 = (0.0090217899191397718 * fConst392); + fConst424 = (0.0067244451793062893 * fConst397); + fConst425 = (0.0067244451793062885 * fConst397); + fConst426 = (0.0 - (0.14907119849998593 * fConst399)); + fConst427 = (0.0 - (0.44721359549995787 * fConst399)); + fConst428 = (0.0 - (0.14907119849998604 * fConst399)); + fConst429 = (0.0 - (0.14907119849998593 * fConst406)); + fConst430 = (0.0 - (0.44721359549995787 * fConst406)); + fConst431 = (0.0 - (0.14907119849998604 * fConst406)); + fConst432 = (0.0 - (1.522748764978713e-15 * fConst326)); + fConst433 = (0.0 - (3.0454975299574259e-15 * fConst326)); + fConst434 = (0.0 - (0.56568542494923812 * fConst329)); + fConst435 = (0.0 - (0.5656854249492379 * fConst329)); + fConst436 = (0.0 - (0.56568542494923824 * fConst329)); + fConst437 = (0.0 - (0.56568542494923812 * fConst335)); + fConst438 = (0.0 - (0.5656854249492379 * fConst335)); + fConst439 = (0.0 - (0.56568542494923824 * fConst335)); + fConst440 = (0.0 - (1.5700924586837752e-16 * fConst341)); + fConst441 = (0.0 - (3.1401849173675503e-16 * fConst341)); + fConst442 = (0.012698412698412698 * fConst345); + fConst443 = (0.0 - (9.9735570100358153 * fConst326)); + fConst444 = (0.0 - (1.5700924586837752e-16 * fConst344)); + fConst445 = (0.0 - (3.1401849173675503e-16 * fConst344)); + fConst446 = (0.0 - ((4.9497474683058318 * fConst243) + (5.6418958354775643 * fConst21))); + fConst447 = (0.0 - (0.70710678118654757 * (fConst325 * fConst446))); + fConst448 = (0.0 - (1.5748085518155944e-15 * fConst326)); + fConst449 = (0.0 - (3.1496171036311889e-15 * fConst326)); + fConst450 = (0.0 - (1.5700924586837752e-16 * fConst349)); + fConst451 = (0.0 - (3.1401849173675503e-16 * fConst349)); + fConst452 = (0.0089791337293529845 * fConst343); + fConst453 = (0.22515260975036763 * fConst21); + fConst454 = (3.5444768026723675e-18 * fConst343); + fConst455 = (7.088953605344735e-18 * fConst343); + fConst456 = (0.015962904407738641 * fConst446); + fConst457 = (3.3218617889860196e-17 * fConst21); + fConst458 = (6.6437235779720392e-17 * fConst21); + fConst459 = (3.3119137800360884e-18 * fConst348); + fConst460 = (6.6238275600721768e-18 * fConst348); + fConst461 = (6.1437843551734282e-17 * fConst21); + fConst462 = (0.011411761886411192 * fConst328); + fConst463 = (0.011411761886411199 * fConst328); + fConst464 = (0.011411761886411183 * fConst328); + fConst465 = (0.011411761886411192 * fConst334); + fConst466 = (0.011411761886411199 * fConst334); + fConst467 = (0.011411761886411183 * fConst334); + fConst468 = (6.3348003989167635e-18 * fConst340); + fConst469 = (0.0 - (2.2156133258658022 * fConst283)); + fConst470 = (0.0 - (2.2156133258658031 * fConst283)); + fConst471 = (0.0 - (9.600991078751834 * fConst283)); + fConst472 = (0.0 - (6.6468399775974083 * fConst283)); + fConst473 = (0.0 - (6.6468399775974198 * fConst283)); + fConst474 = (0.0 - (9.6009910787518287 * fConst283)); + fConst475 = (0.0 - (1.1627553482998907 * fConst317)); + fConst476 = (0.0 - (0.8049844718999225 * fConst317)); + fConst477 = (0.0 - (0.80498447189992395 * fConst317)); + fConst478 = (0.0 - (1.1627553482998902 * fConst317)); + fConst479 = (0.0 - (1.0000000000000004 * fConst322)); + fConst480 = (0.0 - (1.0000000000000007 * fConst322)); + fConst481 = (0.0 - (9.929230089991206 * fConst283)); + fConst482 = (0.0 - (9.9292300899912167 * fConst283)); + fConst483 = (0.0 - (0.99999999999999967 * fConst290)); + fConst484 = (0.0 - (1.0000000000000007 * fConst290)); + fConst485 = (0.20944469721075193 * fConst108); + fConst486 = (0.021093749999999988 * fConst289); + fConst487 = (0.044696311044975207 * fConst108); + fConst488 = (0.044696311044975165 * fConst108); + fConst489 = (0.13408893313492565 * fConst108); + fConst490 = (0.19368401452822634 * fConst108); + fConst491 = (0.19368401452822642 * fConst108); + fConst492 = (0.13408893313492534 * fConst108); + fConst493 = (0.01623922185445156 * fConst304); + fConst494 = (0.023456653789763415 * fConst304); + fConst495 = (0.023456653789763426 * fConst304); + fConst496 = (0.016239221854451522 * fConst304); + fConst497 = (0.02017333553791888 * fConst309); + fConst498 = (0.020173335537918856 * fConst309); + fConst499 = (0.0 - (12.766152972845845 * fConst275)); + fConst500 = (0.0 - (12.766152972845846 * fConst275)); + fConst501 = (0.0 - (5.6738457657092614 * fConst275)); + fConst502 = (0.0 - (5.6738457657092622 * fConst275)); + fConst503 = (0.02017333553791887 * (0.0 - (0.42202158587919975 * fConst275))); + fConst504 = (double(tgamma(5.5)) * sqrt((11.0 * (fConst1 / double(tgamma(11.0)))))); + fConst505 = (0.012698412698412698 * (0.0 - (25.532305945691693 * fConst504))); + fConst506 = (0.0 - (4.5135166683820529 * fConst504)); + fConst507 = (0.0 - (18.054066673528194 * fConst504)); + fConst508 = (0.0 - (18.054066673528212 * fConst504)); + fConst509 = (0.0 - (6.5515927603453177 * fConst504)); + fConst510 = (0.0 - (6.5515927603453248 * fConst504)); + fConst511 = (0.0 - (0.25448859159855519 * fConst504)); + fConst512 = (0.0 - (0.76346577479567002 * fConst504)); + fConst513 = (0.0 - (0.76346577479565958 * fConst504)); + fConst514 = (0.0 - (20.104598736285965 * fConst504)); + fConst515 = (0.0 - (20.104598736285954 * fConst504)); + fConst516 = sqrt((11.0 * (fConst31 / double(tgamma(10.0))))); + fConst517 = (fConst274 * fConst516); + fConst518 = (0.0 - (1.6182610048842852e-15 * fConst517)); + fConst519 = (0.0 - (27.484767892644079 * fConst517)); + fConst520 = (0.0 - (27.484767892644101 * fConst517)); + fConst521 = (0.0 - (27.484767892644086 * fConst517)); + fConst522 = (0.0 - (27.484767892644118 * fConst517)); + fConst523 = (0.0 - (20.244443496069714 * fConst274)); + fConst524 = (fConst516 * fConst523); + fConst525 = (0.0 - (1.3576450198781711 * fConst524)); + fConst526 = (0.0 - (1.3576450198781722 * fConst524)); + fConst527 = (0.0 - (1.3576450198781715 * fConst524)); + fConst528 = (0.0 - (1.3576450198781731 * fConst524)); + fConst529 = (0.0 - (2.4293332195283566 * fConst274)); + fConst530 = (fConst516 * fConst529); + fConst531 = (0.0 - (6.6613381477509402e-16 * fConst530)); + fConst532 = (0.0 - (20.847040507857912 * fConst274)); + fConst533 = (1.405126015541214e-17 * fConst532); + fConst534 = (2.810252031082428e-17 * fConst532); + fConst535 = (3.2645722239460454e-17 * fConst274); + fConst536 = (6.5291444478920883e-17 * fConst274); + fConst537 = (6.5291444478920908e-17 * fConst274); + fConst538 = (0.55445944488012866 * fConst274); + fConst539 = (0.55445944488012844 * fConst274); + fConst540 = (0.55445944488012833 * fConst274); + fConst541 = (0.027388228527386899 * fConst523); + fConst542 = (0.027388228527386888 * fConst523); + fConst543 = (0.027388228527386878 * fConst523); + fConst544 = (1.343814095861187e-17 * fConst529); + fConst545 = (2.6876281917223736e-17 * fConst529); + fConst546 = (2.6876281917223739e-17 * fConst529); + fConst547 = sqrt((11.0 * (fConst2 / fConst273))); + fConst548 = (0.0 - (31.594616678674353 * fConst108)); + fConst549 = (fConst547 * fConst548); + fConst550 = (0.012698412698412698 * (0.0 - (0.70710678118654757 * fConst549))); + fConst551 = (fConst108 * fConst547); + fConst552 = (0.0 - (27.645289593840062 * fConst551)); + fConst553 = (0.0 - (0.50000000000000044 * fConst549)); + fConst554 = (0.0 - (0.49999999999999967 * fConst549)); + fConst555 = (0.0 - ((6.3639610306789276 * fConst285) + (11.170383851240119 * fConst108))); + fConst556 = (0.0 - (0.70710678118654757 * (fConst547 * fConst555))); + fConst557 = (0.0 - (17.197930995906489 * fConst551)); + fConst558 = (0.0 - (17.197930995906464 * fConst551)); + fConst559 = (0.0 - ((5.1961524227066329 * fConst289) + (17.197930995906471 * fConst108))); + fConst560 = (fConst547 * fConst559); + fConst561 = (0.0 - (0.50000000000000044 * fConst560)); + fConst562 = (0.0 - (0.49999999999999967 * fConst560)); + fConst563 = (0.62409119365282684 * fConst108); + fConst564 = (0.0089791337293529845 * fConst548); + fConst565 = (0.011287477954144627 * fConst548); + fConst566 = (0.011287477954144618 * fConst548); + fConst567 = (0.015962904407738641 * fConst555); + fConst568 = (0.36276885694490241 * fConst108); + fConst569 = (0.36276885694490207 * fConst108); + fConst570 = (0.010546875000000006 * fConst559); + fConst571 = (0.010546874999999997 * fConst559); + fConst572 = (0.15722518980975816 * fConst108); + fConst573 = (0.0 - (4.979220665234859 * fConst108)); + fConst574 = (0.011728326894881718 * fConst573); + fConst575 = (0.01172832689488172 * fConst573); + fConst576 = (0.0081196109272257937 * fConst573); + fConst577 = (0.0081196109272258076 * fConst573); + fConst578 = (0.0 - ((2.7136021011998714 * fConst304) + (27.385713658791659 * fConst108))); + fConst579 = (0.011728326894881718 * fConst578); + fConst580 = (0.01172832689488172 * fConst578); + fConst581 = (0.0081196109272257937 * fConst578); + fConst582 = (0.0081196109272258076 * fConst578); + fConst583 = (0.0 - ((8.1408063035996197 * fConst309) + (2.449452694136097 * fConst108))); + fConst584 = (0.010086667768959431 * fConst583); + fConst585 = (0.0 - (7.7937131177057752 * fConst551)); + fConst586 = (0.0 - (7.7937131177057628 * fConst551)); + fConst587 = (fConst547 * fConst573); + fConst588 = (0.0 - (0.40249223594996214 * fConst587)); + fConst589 = (0.0 - (0.40249223594996242 * fConst587)); + fConst590 = (0.0 - (0.58137767414994568 * fConst587)); + fConst591 = (0.0 - (0.58137767414994668 * fConst587)); + fConst592 = (fConst547 * fConst578); + fConst593 = (0.0 - (0.40249223594996214 * fConst592)); + fConst594 = (0.0 - (0.40249223594996242 * fConst592)); + fConst595 = (0.0 - (0.58137767414994568 * fConst592)); + fConst596 = (0.0 - (0.58137767414994668 * fConst592)); + fConst597 = (fConst547 * fConst583); + fConst598 = (0.0 - (0.50000000000000044 * fConst597)); + fConst599 = (0.0 - (0.49999999999999967 * fConst597)); + fConst600 = sqrt((11.0 * (fConst32 / fConst281))); + fConst601 = (fConst21 * fConst600); + fConst602 = (0.0 - (13.360651058924196 * fConst601)); + fConst603 = ((1.3568010505999357 * fConst328) - (18.557406538063905 * fConst21)); + fConst604 = (fConst600 * fConst603); + fConst605 = (0.0 - (0.28284271247461895 * fConst604)); + fConst606 = (0.0 - (0.28284271247461934 * fConst604)); + fConst607 = (0.0 - (0.28284271247461884 * fConst604)); + fConst608 = (0.0 - (0.28284271247461978 * fConst604)); + fConst609 = (0.0 - ((1.3568010505999357 * fConst334) + (6.0 * fConst130))); + fConst610 = (fConst600 * fConst609); + fConst611 = (0.0 - (0.28284271247461895 * fConst610)); + fConst612 = (0.0 - (0.28284271247461934 * fConst610)); + fConst613 = (0.0 - (0.28284271247461884 * fConst610)); + fConst614 = (0.0 - (0.28284271247461978 * fConst610)); + fConst615 = (0.0 - ((4.0704031517998098 * fConst340) + (6.0 * fConst136))); + fConst616 = (fConst600 * fConst615); + fConst617 = (0.0 - (0.47140452079103168 * fConst616)); + fConst618 = (0.0 - (5.0242958677880805e-15 * fConst601)); + fConst619 = (0.0 - ((2.5980762113533165 * fConst348) + (6.0 * fConst140))); + fConst620 = (fConst600 * fConst619); + fConst621 = (0.0 - (0.47140452079103168 * fConst620)); + fConst622 = (0.0099436891104358258 * fConst619); + fConst623 = (0.0099436891104358275 * fConst619); + fConst624 = (0.26952889681672887 * fConst21); + fConst625 = (0.26952889681672892 * fConst21); + fConst626 = (0.0057058809432056056 * fConst603); + fConst627 = (0.0057058809432056004 * fConst603); + fConst628 = (0.0057058809432056047 * fConst603); + fConst629 = (0.005705880943205603 * fConst603); + fConst630 = (0.0057058809432056056 * fConst609); + fConst631 = (0.0057058809432056004 * fConst609); + fConst632 = (0.0057058809432056047 * fConst609); + fConst633 = (0.005705880943205603 * fConst609); + fConst634 = (0.009509801572009334 * fConst615); + fConst635 = (0.0095098015720093357 * fConst615); + fConst636 = sqrt((11.0 * (fConst20 / fConst107))); + fConst637 = (0.0 - (2.5 * fConst158)); + fConst638 = (fConst636 * fConst637); + fConst639 = (0.012698412698412698 * (0.0 - (0.35355339059327379 * fConst638))); + fConst640 = (0.0 - (4.4881006545161242 * fConst3)); + fConst641 = (0.0 - (0.35355339059327379 * (fConst636 * fConst640))); + fConst642 = (0.0 - (0.25 * fConst638)); + fConst643 = (0.0 - (0.25000000000000006 * fConst638)); + fConst644 = (0.0 - ((2.1213203435596424 * fConst370) + (2.5 * fConst165))); + fConst645 = (0.0 - (0.35355339059327379 * (fConst636 * fConst644))); + fConst646 = ((1.7320508075688776 * fConst372) - (4.6065886596178087 * fConst3)); + fConst647 = (fConst636 * fConst646); + fConst648 = (0.0 - (0.25 * fConst647)); + fConst649 = (0.0 - (0.25000000000000006 * fConst647)); + fConst650 = (0.0 - ((1.7320508075688776 * fConst376) + (2.5 * fConst169))); + fConst651 = (fConst636 * fConst650); + fConst652 = (0.0 - (0.25 * fConst651)); + fConst653 = (0.0 - (0.25000000000000006 * fConst651)); + fConst654 = (0.0044895668646764923 * fConst637); + fConst655 = (0.0079814522038693207 * fConst640); + fConst656 = (0.0056437389770723108 * fConst637); + fConst657 = (0.0056437389770723117 * fConst637); + fConst658 = (0.0079814522038693207 * fConst644); + fConst659 = (0.0052734375000000003 * fConst646); + fConst660 = (0.0052734375000000012 * fConst646); + fConst661 = (0.0052734375000000003 * fConst650); + fConst662 = (0.0052734375000000012 * fConst650); + fConst663 = (0.065577343198713223 * fConst3); + fConst664 = ((0.90453403373329044 * fConst387) - (2.5 * fConst183)); + fConst665 = (0.0022554474797849468 * fConst664); + fConst666 = (0.0067663424393548319 * fConst664); + fConst667 = (0.0067663424393548327 * fConst664); + fConst668 = (0.0022554474797849473 * fConst664); + fConst669 = (0.0 - ((0.90453403373329044 * fConst392) + (2.5 * fConst188))); + fConst670 = (0.0022554474797849468 * fConst669); + fConst671 = (0.0067663424393548319 * fConst669); + fConst672 = (0.0067663424393548327 * fConst669); + fConst673 = (0.0022554474797849473 * fConst669); + fConst674 = (0.0 - ((2.7136021011998732 * fConst397) + (2.5 * fConst193))); + fConst675 = (0.0050433338844797183 * fConst674); + fConst676 = (fConst3 * fConst636); + fConst677 = (0.0 - (3.2506941192471897 * fConst676)); + fConst678 = (0.0 - (3.2506941192471905 * fConst676)); + fConst679 = (fConst636 * fConst664); + fConst680 = (0.0 - (0.11180339887498958 * fConst679)); + fConst681 = (0.0 - (0.33541019662496846 * fConst679)); + fConst682 = (0.0 - (0.33541019662496852 * fConst679)); + fConst683 = (0.0 - (0.11180339887498984 * fConst679)); + fConst684 = (fConst636 * fConst669); + fConst685 = (0.0 - (0.11180339887498958 * fConst684)); + fConst686 = (0.0 - (0.33541019662496846 * fConst684)); + fConst687 = (0.0 - (0.33541019662496852 * fConst684)); + fConst688 = (0.0 - (0.11180339887498984 * fConst684)); + fConst689 = (fConst636 * fConst674); + fConst690 = (0.0 - (0.25 * fConst689)); + fConst691 = (0.0 - (0.25000000000000006 * fConst689)); + fConst692 = (0.0056437389770723099 * fConst637); + fConst693 = (0.0052734374999999995 * fConst646); + fConst694 = (0.0052734374999999995 * fConst650); + fConst695 = (0.065577343198713209 * fConst3); + fConst696 = (0.006766342439354831 * fConst664); + fConst697 = (0.0022554474797849442 * fConst664); + fConst698 = (0.0022554474797849425 * fConst664); + fConst699 = (0.0067663424393548301 * fConst664); + fConst700 = (0.006766342439354831 * fConst669); + fConst701 = (0.0022554474797849442 * fConst669); + fConst702 = (0.0022554474797849425 * fConst669); + fConst703 = (0.0067663424393548301 * fConst669); + fConst704 = (0.0050433338844797174 * fConst674); + fConst705 = (0.0050433338844797166 * fConst674); + fConst706 = (0.0 - (0.11180339887498945 * fConst679)); + fConst707 = (0.0 - (0.3354101966249684 * fConst679)); + fConst708 = (0.0 - (0.11180339887498954 * fConst679)); + fConst709 = (0.0 - (0.11180339887498945 * fConst684)); + fConst710 = (0.0 - (0.3354101966249684 * fConst684)); + fConst711 = (0.0 - (0.11180339887498954 * fConst684)); + fConst712 = (0.0 - (2.9666604859200243e-15 * fConst601)); + fConst713 = (0.0 - (5.9333209718400486e-15 * fConst601)); + fConst714 = (0.0 - (0.37712361663282534 * fConst604)); + fConst715 = (0.0 - (0.3771236166328254 * fConst604)); + fConst716 = (0.0 - (0.37712361663282523 * fConst604)); + fConst717 = (0.0 - (0.37712361663282545 * fConst604)); + fConst718 = (0.0 - (0.37712361663282534 * fConst610)); + fConst719 = (0.0 - (0.3771236166328254 * fConst610)); + fConst720 = (0.0 - (0.37712361663282523 * fConst610)); + fConst721 = (0.0 - (0.37712361663282545 * fConst610)); + fConst722 = (0.0 - (1.0467283057891834e-16 * fConst616)); + fConst723 = (0.0 - (2.0934566115783667e-16 * fConst616)); + fConst724 = (0.0 - (9.8733177120857309 * fConst601)); + fConst725 = (0.0 - ((3.1819805153394638 * fConst446) + (6.0 * fConst243))); + fConst726 = (0.0 - (0.47140452079103168 * (fConst600 * fConst725))); + fConst727 = (0.0 - (1.1156177909894717e-30 * fConst601)); + fConst728 = (0.0 - (2.2312355819789434e-30 * fConst601)); + fConst729 = (0.0 - (1.0467283057891834e-16 * fConst620)); + fConst730 = (0.0 - (2.0934566115783667e-16 * fConst620)); + fConst731 = (0.22288971201886659 * fConst21); + fConst732 = (0.010641936271825759 * fConst725); + fConst733 = (2.3532562778684169e-32 * fConst21); + fConst734 = (4.7065125557368339e-32 * fConst21); + fConst735 = (2.2079425200240589e-18 * fConst619); + fConst736 = (4.4158850400481179e-18 * fConst619); + fConst737 = (1.1969487481910018e-16 * fConst21); + fConst738 = (0.007607841257607462 * fConst603); + fConst739 = (0.0076078412576074646 * fConst603); + fConst740 = (0.0076078412576074551 * fConst603); + fConst741 = (0.007607841257607462 * fConst609); + fConst742 = (0.0076078412576074646 * fConst609); + fConst743 = (0.0076078412576074551 * fConst609); + fConst744 = (4.2232002659445085e-18 * fConst615); + fConst745 = (0.0 - (7.7937131177057708 * fConst551)); + fConst746 = (0.0 - (7.7937131177057735 * fConst551)); + fConst747 = (0.0 - (0.58137767414994534 * fConst587)); + fConst748 = (0.0 - (0.40249223594996125 * fConst587)); + fConst749 = (0.0 - (0.40249223594996197 * fConst587)); + fConst750 = (0.0 - (0.58137767414994512 * fConst587)); + fConst751 = (0.0 - (0.58137767414994534 * fConst592)); + fConst752 = (0.0 - (0.40249223594996125 * fConst592)); + fConst753 = (0.0 - (0.40249223594996197 * fConst592)); + fConst754 = (0.0 - (0.58137767414994512 * fConst592)); + fConst755 = (0.0 - (0.50000000000000022 * fConst597)); + fConst756 = (0.0 - (0.50000000000000033 * fConst597)); + fConst757 = (0.0 - (0.49999999999999983 * fConst549)); + fConst758 = (0.0 - (0.50000000000000033 * fConst549)); + fConst759 = (0.0 - (17.197930995906468 * fConst551)); + fConst760 = (0.0 - (17.197930995906486 * fConst551)); + fConst761 = (0.0 - (0.49999999999999983 * fConst560)); + fConst762 = (0.0 - (0.50000000000000033 * fConst560)); + fConst763 = (0.011287477954144615 * fConst548); + fConst764 = (0.36276885694490202 * fConst108); + fConst765 = (0.010546874999999994 * fConst559); + fConst766 = (0.1572251898097583 * fConst108); + fConst767 = (0.15722518980975814 * fConst108); + fConst768 = (0.0081196109272257799 * fConst573); + fConst769 = (0.011728326894881708 * fConst573); + fConst770 = (0.011728326894881713 * fConst573); + fConst771 = (0.0081196109272257608 * fConst573); + fConst772 = (0.0081196109272257799 * fConst578); + fConst773 = (0.011728326894881708 * fConst578); + fConst774 = (0.011728326894881713 * fConst578); + fConst775 = (0.0081196109272257608 * fConst578); + fConst776 = (0.01008666776895944 * fConst583); + fConst777 = (0.010086667768959428 * fConst583); + fConst778 = (0.0 - (29.482167421553953 * fConst517)); + fConst779 = (0.0 - (29.482167421553957 * fConst517)); + fConst780 = (fConst516 * fConst532); + fConst781 = (0.0 - (1.4142135623730949 * fConst780)); + fConst782 = (0.0 - (1.4142135623730951 * fConst780)); + fConst783 = (0.45851597901024027 * fConst274); + fConst784 = (0.031925808815477283 * (0.0 - (14.361922094451582 * fConst274))); + fConst785 = (0.1617173380900363 * fConst274); + fConst786 = (0.16171733809003749 * fConst274); + fConst787 = (0.16171733809003774 * fConst274); + fConst788 = (0.16171733809003719 * fConst274); + fConst789 = (0.16171733809003716 * fConst274); + fConst790 = (0.16171733809003799 * fConst274); + fConst791 = (0.16171733809003505 * fConst274); + fConst792 = (0.0079882333204877847 * fConst523); + fConst793 = (0.007988233320487842 * fConst523); + fConst794 = (0.0079882333204878541 * fConst523); + fConst795 = (0.0079882333204878298 * fConst523); + fConst796 = (0.0079882333204878263 * fConst523); + fConst797 = (0.007988233320487868 * fConst523); + fConst798 = (0.0079882333204877223 * fConst523); + fConst799 = (0.0 - (3.4355959865804975 * fConst517)); + fConst800 = (0.0 - (1.4142135623730951 * fConst530)); + fConst801 = (0.0 - (0.25448859159855491 * fConst504)); + fConst802 = (0.0 - (0.25448859159855475 * fConst504)); + fConst803 = (0.0 - (0.76346577479571942 * fConst504)); + fConst804 = (0.0 - (20.104598736285961 * fConst504)); + fConst805 = (0.0 - (0.76346577479577982 * fConst504)); + fConst806 = (0.0 - (18.054066673528208 * fConst504)); + fConst807 = (0.0 - (18.05406667352818 * fConst504)); + fConst808 = (0.0 - (6.551592760345323 * fConst504)); + fConst809 = (0.0 - (6.5515927603453132 * fConst504)); } @@ -1043,7 +2755,151 @@ class mydsp : public dsp { virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec0[l0] = 0.0; + fRec1[l0] = 0.0; + + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0; + + } + for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + fRec2[l2] = 0.0; + + } + for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + fRec3[l3] = 0.0; + + } + for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + fRec4[l4] = 0.0; + + } + for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + fRec5[l5] = 0.0; + + } + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec6[l6] = 0.0; + + } + for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + fRec7[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec8[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; + + } + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec11[l11] = 0.0; + + } + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec12[l12] = 0.0; + + } + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec13[l13] = 0.0; + + } + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec14[l14] = 0.0; + + } + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec15[l15] = 0.0; + + } + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec16[l16] = 0.0; + + } + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec17[l17] = 0.0; + + } + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec18[l18] = 0.0; + + } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec19[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec20[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec21[l21] = 0.0; + + } + for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + fRec22[l22] = 0.0; + + } + for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + fRec23[l23] = 0.0; + + } + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fRec24[l24] = 0.0; + + } + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec25[l25] = 0.0; + + } + for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + fRec26[l26] = 0.0; + + } + for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + fRec27[l27] = 0.0; + + } + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fRec28[l28] = 0.0; + + } + for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + fRec29[l29] = 0.0; + + } + for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + fRec30[l30] = 0.0; + + } + for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + fRec31[l31] = 0.0; + + } + for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + fRec32[l32] = 0.0; + + } + for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + fRec33[l33] = 0.0; + + } + for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + fRec34[l34] = 0.0; + + } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec35[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec36[l36] = 0.0; } @@ -1062,14 +2918,170 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->declare(0, "1", ""); ui_interface->openHorizontalBox("Outputs"); + ui_interface->openHorizontalBox("0"); + ui_interface->openVerticalBox("0"); + ui_interface->declare(&fVbargraph0, "unit", "dB"); + ui_interface->addVerticalBargraph("0x30fc670", &fVbargraph0, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("1"); + ui_interface->openVerticalBox("1"); + ui_interface->declare(&fVbargraph1, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31162d0", &fVbargraph1, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("2"); + ui_interface->declare(&fVbargraph2, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3120cf0", &fVbargraph2, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("3"); + ui_interface->declare(&fVbargraph3, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3132a80", &fVbargraph3, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("2"); + ui_interface->openVerticalBox("4"); + ui_interface->declare(&fVbargraph4, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3147a70", &fVbargraph4, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("5"); + ui_interface->declare(&fVbargraph5, "unit", "dB"); + ui_interface->addVerticalBargraph("0x316a850", &fVbargraph5, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("6"); + ui_interface->declare(&fVbargraph6, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31756e0", &fVbargraph6, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("7"); + ui_interface->declare(&fVbargraph7, "unit", "dB"); + ui_interface->addVerticalBargraph("0x318c5f0", &fVbargraph7, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("8"); + ui_interface->declare(&fVbargraph8, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31a4970", &fVbargraph8, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("3"); + ui_interface->openVerticalBox("9"); + ui_interface->declare(&fVbargraph9, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31be310", &fVbargraph9, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("10"); + ui_interface->declare(&fVbargraph10, "unit", "dB"); + ui_interface->addVerticalBargraph("0x31db6d0", &fVbargraph10, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("11"); + ui_interface->declare(&fVbargraph11, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3204850", &fVbargraph11, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("12"); + ui_interface->declare(&fVbargraph12, "unit", "dB"); + ui_interface->addVerticalBargraph("0x320b600", &fVbargraph12, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("13"); + ui_interface->declare(&fVbargraph13, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3223b00", &fVbargraph13, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("14"); + ui_interface->declare(&fVbargraph14, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3241df0", &fVbargraph14, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("15"); + ui_interface->declare(&fVbargraph15, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3257f50", &fVbargraph15, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("4"); + ui_interface->openVerticalBox("16"); + ui_interface->declare(&fVbargraph16, "unit", "dB"); + ui_interface->addVerticalBargraph("0x326c650", &fVbargraph16, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("17"); + ui_interface->declare(&fVbargraph17, "unit", "dB"); + ui_interface->addVerticalBargraph("0x328f9d0", &fVbargraph17, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("18"); + ui_interface->declare(&fVbargraph18, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32b06f0", &fVbargraph18, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("19"); + ui_interface->declare(&fVbargraph19, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32d4b10", &fVbargraph19, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("20"); + ui_interface->declare(&fVbargraph20, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32dc5a0", &fVbargraph20, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("21"); + ui_interface->declare(&fVbargraph21, "unit", "dB"); + ui_interface->addVerticalBargraph("0x32f21d0", &fVbargraph21, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("22"); + ui_interface->declare(&fVbargraph22, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3312e80", &fVbargraph22, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("23"); + ui_interface->declare(&fVbargraph23, "unit", "dB"); + ui_interface->addVerticalBargraph("0x332fe10", &fVbargraph23, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("24"); + ui_interface->declare(&fVbargraph24, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3342830", &fVbargraph24, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); + ui_interface->openHorizontalBox("5"); + ui_interface->openVerticalBox("25"); + ui_interface->declare(&fVbargraph25, "unit", "dB"); + ui_interface->addVerticalBargraph("0x335b630", &fVbargraph25, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("26"); + ui_interface->declare(&fVbargraph26, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3377ed0", &fVbargraph26, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("27"); + ui_interface->declare(&fVbargraph27, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33a0ca0", &fVbargraph27, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("28"); + ui_interface->declare(&fVbargraph28, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33be810", &fVbargraph28, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("29"); + ui_interface->declare(&fVbargraph29, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33e82f0", &fVbargraph29, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("30"); + ui_interface->declare(&fVbargraph30, "unit", "dB"); + ui_interface->addVerticalBargraph("0x33ef420", &fVbargraph30, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("31"); + ui_interface->declare(&fVbargraph31, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3407420", &fVbargraph31, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("32"); + ui_interface->declare(&fVbargraph32, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3425700", &fVbargraph32, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("33"); + ui_interface->declare(&fVbargraph33, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3444540", &fVbargraph33, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("34"); + ui_interface->declare(&fVbargraph34, "unit", "dB"); + ui_interface->addVerticalBargraph("0x345c940", &fVbargraph34, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->openVerticalBox("35"); + ui_interface->declare(&fVbargraph35, "unit", "dB"); + ui_interface->addVerticalBargraph("0x3472180", &fVbargraph35, -70.0, 6.0); + ui_interface->closeBox(); + ui_interface->closeBox(); ui_interface->declare(&fHslider0, "1", ""); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->declare(&fHslider0, "unit", "dB"); @@ -1167,7 +3179,7 @@ class mydsp : public dsp { FAUSTFLOAT* output35 = outputs[35]; double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (fSlow0 + (0.999 * fRec0[1])); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); double fTemp0 = double(input0[i]); double fTemp1 = double(input1[i]); double fTemp2 = double(input2[i]); @@ -1189,178 +3201,241 @@ class mydsp : public dsp { double fTemp18 = double(input17[i]); double fTemp19 = double(input18[i]); double fTemp20 = double(input19[i]); - double fTemp21 = (fTemp19 + fTemp20); - double fTemp22 = double(input20[i]); - double fTemp23 = double(input21[i]); - double fTemp24 = ((fTemp21 + fTemp22) + fTemp23); - double fTemp25 = double(input22[i]); - double fTemp26 = double(input23[i]); - double fTemp27 = double(input24[i]); - double fTemp28 = double(input25[i]); - double fTemp29 = ((((fTemp24 + fTemp25) + fTemp26) + fTemp27) + fTemp28); - double fTemp30 = double(input26[i]); - double fTemp31 = double(input27[i]); - double fTemp32 = (fTemp30 + fTemp31); - double fTemp33 = double(input28[i]); - double fTemp34 = double(input29[i]); - double fTemp35 = ((fTemp32 + fTemp33) + fTemp34); - double fTemp36 = double(input30[i]); - double fTemp37 = double(input31[i]); - double fTemp38 = double(input32[i]); - double fTemp39 = double(input33[i]); - double fTemp40 = double(input34[i]); - double fTemp41 = double(input35[i]); - double fTemp42 = double(input36[i]); - double fTemp43 = double(input37[i]); - double fTemp44 = double(input38[i]); - double fTemp45 = double(input39[i]); - double fTemp46 = double(input40[i]); - double fTemp47 = double(input41[i]); - double fTemp48 = double(input42[i]); - double fTemp49 = double(input43[i]); - double fTemp50 = double(input44[i]); - double fTemp51 = double(input45[i]); - double fTemp52 = double(input46[i]); - double fTemp53 = double(input47[i]); - double fTemp54 = double(input48[i]); - double fTemp55 = double(input49[i]); - output0[i] = FAUSTFLOAT((fRec0[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * fTemp29)) + (0.02017333553791887 * ((((((((((((((((((((fTemp35 + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53) + fTemp54) + fTemp55))))); - double fTemp56 = (fTemp37 + fTemp38); - double fTemp57 = (fTemp39 + fTemp47); - double fTemp58 = (fTemp19 - fTemp22); - double fTemp59 = ((fTemp58 + fTemp25) - fTemp27); - double fTemp60 = (fTemp7 - fTemp9); - double fTemp61 = (fTemp2 - fTemp4); - double fTemp62 = (fTemp11 - fTemp13); - double fTemp63 = (fTemp8 + fTemp17); - double fTemp64 = (fTemp20 + fTemp26); - double fTemp65 = (fTemp36 + fTemp44); - double fTemp66 = (fTemp32 - fTemp33); - double fTemp67 = (fTemp23 + fTemp28); - double fTemp68 = (fTemp40 + fTemp48); - double fTemp69 = (fTemp43 + fTemp51); - double fTemp70 = (fTemp34 + fTemp55); - output1[i] = FAUSTFLOAT((fRec0[0] * (((2.6935244158092871e-18 * fTemp3) + (((0.031605542669238242 * ((((((fTemp56 - fTemp41) - fTemp42) + fTemp45) + fTemp46) - fTemp49) - fTemp50)) + ((0.010535180889746096 * fTemp57) + (((0.021093749999999994 * fTemp59) + (((0.027648561470568506 * ((((fTemp60 + fTemp12) - fTemp14) + fTemp16) - fTemp18)) + (((0.021994295969128601 * fTemp61) + (0.027648561470568499 * fTemp62)) + (3.3859722305960555e-18 * fTemp63))) + (0.021093749999999998 * fTemp64))) + (0.010535180889746094 * fTemp65)))) + (0.010535180889746065 * (((fTemp66 + fTemp52) + fTemp53) - fTemp54)))) - ((((0.021093750000000001 * fTemp67) + (0.010535180889746089 * fTemp68)) + (0.010535180889746113 * fTemp69)) + (0.010535180889746067 * fTemp70))))); - double fTemp71 = (fTemp0 - fTemp5); - double fTemp72 = ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18); - double fTemp73 = ((((fTemp24 - fTemp25) - fTemp26) - fTemp27) - fTemp28); - double fTemp74 = (((((((fTemp36 + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43); - double fTemp75 = ((((((((fTemp74 - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49) - fTemp50) - fTemp51); - double fTemp76 = ((((fTemp35 - fTemp52) - fTemp53) - fTemp54) - fTemp55); - output2[i] = FAUSTFLOAT((fRec0[0] * (((((0.021994295969128601 * fTemp71) + (0.027648561470568499 * fTemp72)) + (0.021093750000000001 * fTemp73)) + (0.010535180889746075 * fTemp75)) + (0.031605542669238249 * fTemp76)))); - double fTemp77 = (fTemp30 - fTemp31); - double fTemp78 = ((fTemp77 + fTemp52) - fTemp53); - double fTemp79 = (fTemp42 + fTemp50); - double fTemp80 = (fTemp36 - fTemp39); - double fTemp81 = ((((fTemp80 - fTemp40) + fTemp44) - fTemp47) - fTemp48); - double fTemp82 = (fTemp37 + fTemp45); - double fTemp83 = (fTemp19 + fTemp25); - double fTemp84 = (fTemp6 - fTemp8); - double fTemp85 = (fTemp7 + fTemp16); - double fTemp86 = (fTemp1 - fTemp3); - double fTemp87 = (fTemp9 + fTemp18); - double fTemp88 = (fTemp22 + fTemp27); - double fTemp89 = (fTemp38 + fTemp46); - double fTemp90 = (fTemp41 + fTemp49); - double fTemp91 = (fTemp33 + fTemp54); - output3[i] = FAUSTFLOAT((fRec0[0] * (((0.027648561470568496 * fTemp14) + ((0.010535180889746065 * fTemp78) + ((0.010535180889746074 * fTemp79) + ((0.031605542669238242 * fTemp81) + ((0.010535180889746081 * fTemp82) + ((0.021093749999999998 * fTemp83) + ((0.027648561470568506 * ((((fTemp84 + fTemp11) - fTemp13) + fTemp15) - fTemp17)) + ((1.6929861152980278e-18 * fTemp85) + ((1.3467622079046435e-18 * ((fTemp0 + fTemp2) + fTemp5)) + ((0.021994295969128601 * fTemp86) + (((0.021093749999999991 * fTemp67) + (0.031605542669238228 * fTemp69)) + (0.010535180889746063 * fTemp70)))))))))))) - ((0.027648561470568499 * fTemp12) + ((4.0402866237139308e-18 * fTemp4) + ((((((5.0789583458940831e-18 * fTemp87) + (0.021093749999999994 * fTemp64)) + (0.021093750000000001 * fTemp88)) + (0.010535180889746079 * fTemp89)) + (0.010535180889746086 * fTemp90)) + (0.010535180889746067 * fTemp91))))))); - double fTemp92 = (fTemp19 - fTemp20); - double fTemp93 = ((fTemp92 + fTemp22) - fTemp23); - double fTemp94 = ((((fTemp93 + fTemp25) - fTemp26) + fTemp27) - fTemp28); - double fTemp95 = (((fTemp11 - fTemp12) + fTemp13) - fTemp14); - double fTemp96 = ((fTemp77 + fTemp33) - fTemp34); - double fTemp97 = ((((fTemp96 + fTemp52) - fTemp53) + fTemp54) - fTemp55); - output4[i] = FAUSTFLOAT((fRec0[0] * (((9.0343555392074636e-18 * fTemp4) + ((3.0114518464024883e-18 * fTemp2) + (((0.027231914153020897 * fTemp94) + ((0.043716214137085485 * fTemp95) + (((0.021308452520676556 * fTemp82) + ((8.0305382570733035e-18 * fTemp87) + ((2.6768460856911014e-18 * fTemp85) + ((0.021308452520676577 * fTemp65) + (0.02130845252067657 * fTemp68))))) + (0.021308452520676563 * fTemp90)))) + (0.0071028175068921654 * fTemp97)))) - ((6.0229036928049765e-18 * fTemp3) + ((0.021308452520676542 * fTemp79) + ((0.021308452520676546 * fTemp89) + (((5.3536921713822029e-18 * fTemp63) + (0.021308452520676584 * fTemp57)) + (0.021308452520676618 * fTemp69)))))))); - double fTemp98 = (fTemp38 - fTemp42); - double fTemp99 = ((fTemp98 - fTemp46) + fTemp50); - double fTemp100 = (fTemp37 - fTemp41); - double fTemp101 = ((fTemp100 - fTemp45) + fTemp49); - double fTemp102 = (fTemp39 - fTemp47); - double fTemp103 = (fTemp20 - fTemp23); - double fTemp104 = (fTemp8 - fTemp17); - double fTemp105 = ((fTemp60 - fTemp16) + fTemp18); - double fTemp106 = ((fTemp58 - fTemp25) + fTemp27); - double fTemp107 = (fTemp36 - fTemp44); - double fTemp108 = (fTemp40 - fTemp48); - double fTemp109 = (fTemp43 - fTemp51); - double fTemp110 = (fTemp34 - fTemp55); - output5[i] = FAUSTFLOAT((fRec0[0] * ((((0.021308452520676553 * fTemp99) + ((0.021308452520676546 * fTemp101) + ((0.0071028175068921931 * fTemp102) + (((0.027231914153020911 * ((fTemp103 - fTemp26) + fTemp28)) + (((5.3536921713822013e-18 * fTemp104) + (0.043716214137085485 * fTemp105)) + (0.027231914153020904 * fTemp106))) + (0.0071028175068921914 * fTemp107))))) + (0.021308452520676528 * (((fTemp66 - fTemp52) - fTemp53) + fTemp54))) - (((0.0071028175068921871 * fTemp108) + (0.0071028175068922053 * fTemp109)) + (0.021308452520676532 * fTemp110))))); - double fTemp111 = ((((fTemp10 + fTemp15) + fTemp16) + fTemp17) + fTemp18); - double fTemp112 = (fTemp0 + fTemp5); - double fTemp113 = ((((fTemp35 + fTemp52) + fTemp53) + fTemp54) + fTemp55); - double fTemp114 = (((fTemp1 + fTemp2) + fTemp3) + fTemp4); - double fTemp115 = (((fTemp11 + fTemp12) + fTemp13) + fTemp14); - double fTemp116 = ((((((((fTemp74 + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51); - output6[i] = FAUSTFLOAT((fRec0[0] * ((((0.012619783999998805 * fTemp111) + ((0.028394513999997331 * fTemp112) + (5.236595479505967e-18 * fTemp29))) + (0.032806508796871948 * fTemp113)) - (((0.014197256999998666 * fTemp114) + (0.025239567999997631 * fTemp115)) + (0.01640325439843596 * fTemp116))))); - double fTemp117 = ((fTemp77 - fTemp52) + fTemp53); - double fTemp118 = (fTemp42 - fTemp50); - double fTemp119 = ((fTemp80 - fTemp44) + fTemp47); - double fTemp120 = (fTemp37 - fTemp45); - double fTemp121 = (fTemp23 - fTemp28); - double fTemp122 = ((fTemp84 - fTemp15) + fTemp17); - double fTemp123 = (fTemp7 - fTemp16); - double fTemp124 = (fTemp38 - fTemp46); - double fTemp125 = (fTemp20 - fTemp26); - double fTemp126 = (fTemp9 - fTemp18); - double fTemp127 = (fTemp41 - fTemp49); - double fTemp128 = (fTemp33 - fTemp54); - output7[i] = FAUSTFLOAT((fRec0[0] * (((0.021308452520676528 * fTemp117) + ((0.0071028175068921775 * fTemp118) + ((0.021308452520676542 * fTemp119) + ((0.0071028175068921827 * fTemp120) + ((0.027231914153020901 * fTemp121) + ((0.043716214137085485 * fTemp122) + ((2.6768460856911007e-18 * fTemp123) + ((((3.0114518464024883e-18 * fTemp71) + (0.027231914153020911 * fTemp106)) + (0.021308452520676539 * fTemp109)) + (0.021308452520676525 * fTemp110))))))))) - ((((0.007102817506892181 * fTemp124) + ((0.027231914153020904 * fTemp125) + ((8.0305382570733005e-18 * fTemp126) + (0.021308452520676546 * fTemp108)))) + (0.0071028175068921853 * fTemp127)) + (0.021308452520676532 * fTemp128))))); - double fTemp129 = (((fTemp6 - fTemp7) + fTemp8) - fTemp9); - double fTemp130 = ((((fTemp129 + fTemp15) - fTemp16) + fTemp17) - fTemp18); - double fTemp131 = (((fTemp1 - fTemp2) + fTemp3) - fTemp4); - double fTemp132 = (fTemp31 + fTemp53); - double fTemp133 = (fTemp30 + fTemp52); - output8[i] = FAUSTFLOAT((fRec0[0] * (((1.3384230428455503e-17 * fTemp13) + ((2.6768460856911007e-18 * fTemp11) + ((0.021858107068542749 * fTemp130) + ((0.024590370452110585 * fTemp131) + ((9.2199121612079837e-35 * fTemp112) + (((8.3373691255381378e-18 * fTemp88) + ((1.6674738251076273e-18 * fTemp83) + ((((0.028411270027568724 * fTemp65) + (0.028411270027568717 * fTemp57)) + (0.028411270027568731 * fTemp68)) + (0.028411270027568696 * fTemp69)))) + (2.1746106811858183e-18 * fTemp91))))))) - ((1.8737922599837705e-17 * fTemp14) + ((8.0305382570733005e-18 * fTemp12) + ((1.3047664087114909e-18 * fTemp132) + ((1.1422201709353029e-18 * fTemp133) + ((0.028411270027568748 * fTemp79) + ((0.028411270027568734 * fTemp90) + ((0.028411270027568745 * fTemp89) + ((0.028411270027568741 * fTemp82) + (((5.0024214753228816e-18 * fTemp64) + (1.167231677575339e-17 * fTemp67)) + (3.0444549536601452e-18 * fTemp70))))))))))))); - double fTemp134 = (0.033388810063348803 * fTemp11); - double fTemp135 = (6.1334249057128588e-18 * fTemp63); - double fTemp136 = ((fTemp32 + fTemp52) + fTemp53); - double fTemp137 = ((fTemp60 + fTemp16) - fTemp18); - output9[i] = FAUSTFLOAT((fRec0[0] * (((0.033388810063348796 * fTemp12) + (fTemp134 + ((9.7582192711380499e-18 * fTemp3) + (((0.020818537549440803 * fTemp79) + ((0.020818537549440772 * fTemp90) + ((0.016982082124440745 * fTemp83) + ((0.030071220904747838 * fTemp57) + ((fTemp135 + (0.016982082124440741 * fTemp64)) + (0.030071220904747824 * fTemp65)))))) + (0.0023131708388267431 * fTemp136))))) - ((0.033388810063348817 * fTemp14) + ((0.033388810063348852 * fTemp13) + ((0.016694405031674409 * fTemp137) + ((0.002313170838826747 * fTemp91) + ((0.02081853754944079 * fTemp89) + ((0.020818537549440783 * fTemp82) + ((0.016982082124440766 * fTemp88) + (((((0.026560635762986527 * fTemp61) + (0.016982082124440748 * fTemp67)) + (0.030071220904747821 * fTemp68)) + (0.030071220904747842 * fTemp69)) + (0.0023131708388267444 * fTemp70)))))))))))); - double fTemp138 = ((((fTemp93 - fTemp25) + fTemp26) - fTemp27) + fTemp28); - double fTemp139 = ((((fTemp96 - fTemp52) + fTemp53) - fTemp54) + fTemp55); - output10[i] = FAUSTFLOAT((fRec0[0] * ((((0.041597435974919175 * fTemp138) + ((0.016998264729033874 * fTemp127) + ((0.016998264729033888 * fTemp119) + ((0.016998264729033867 * fTemp120) + ((1.5023761394674526e-17 * fTemp126) + ((5.0079204648915091e-18 * fTemp123) + (0.016998264729033881 * fTemp108))))))) + (0.016998264729033836 * fTemp139)) - ((0.016998264729033857 * fTemp118) + ((0.016998264729033864 * fTemp124) + ((1.0015840929783018e-17 * fTemp104) + (0.016998264729033919 * fTemp109))))))); - double fTemp140 = ((fTemp98 + fTemp46) - fTemp50); - double fTemp141 = ((fTemp100 + fTemp45) - fTemp49); - double fTemp142 = (fTemp12 - fTemp14); - output11[i] = FAUSTFLOAT((fRec0[0] * ((((0.038794291597509752 * fTemp137) + ((0.0053753232814252143 * fTemp69) + (((0.013154264250377145 * fTemp59) + ((4.7509305030079371e-18 * fTemp63) + (0.013154264250377147 * fTemp64))) + (0.0053753232814252021 * fTemp68)))) + (0.030460165261409405 * fTemp136)) - ((2.5195613817171963e-18 * fTemp3) + ((0.016125969844275594 * fTemp140) + ((0.016125969844275591 * fTemp141) + ((0.025862861065006511 * fTemp142) + ((0.030460165261409402 * fTemp91) + ((((((0.020573779994945588 * fTemp61) + (0.025862861065006505 * fTemp62)) + (0.013154264250377148 * fTemp67)) + (0.0053753232814252047 * fTemp65)) + (0.0053753232814252056 * fTemp57)) + (0.030460165261409412 * fTemp70)))))))))); - output12[i] = FAUSTFLOAT((fRec0[0] * (((0.033596842045264641 * fTemp71) + (0.0263335984839893 * fTemp76)) - (((0.010558468816293319 * fTemp72) + (0.021480823570105497 * fTemp73)) + (0.020481687709769415 * fTemp75))))); - double fTemp143 = ((fTemp84 + fTemp15) - fTemp17); - output13[i] = FAUSTFLOAT((fRec0[0] * (((0.025862861065006505 * fTemp12) + ((3.7793420725757941e-18 * fTemp4) + ((0.038794291597509752 * fTemp143) + ((5.0391227634343926e-18 * fTemp112) + ((0.030460165261409402 * fTemp78) + ((0.0053753232814252004 * fTemp90) + ((0.0053753232814251969 * fTemp89) + ((0.013154264250377147 * fTemp83) + ((2.3754652515039685e-18 * fTemp85) + (0.030460165261409398 * fTemp70)))))))))) - ((0.025862861065006501 * fTemp14) + ((1.2597806908585981e-18 * fTemp2) + ((0.013154264250377145 * ((fTemp103 + fTemp26) - fTemp28)) + (((0.0053753232814251943 * fTemp79) + ((0.016125969844275591 * fTemp81) + ((0.0053753232814251978 * fTemp82) + ((0.013154264250377148 * fTemp88) + ((7.1263957545119048e-18 * fTemp87) + ((0.020573779994945588 * fTemp86) + ((0.025862861065006511 * fTemp62) + (0.016125969844275587 * fTemp69)))))))) + (0.030460165261409412 * fTemp91)))))))); - double fTemp144 = (fTemp40 - fTemp41); - double fTemp145 = (fTemp22 - fTemp27); - double fTemp146 = (fTemp19 - fTemp25); - double fTemp147 = ((((fTemp129 - fTemp15) + fTemp16) - fTemp17) + fTemp18); - double fTemp148 = (fTemp30 - fTemp52); - double fTemp149 = (fTemp31 - fTemp53); - output14[i] = FAUSTFLOAT((fRec0[0] * (((0.022664352972045151 * ((fTemp144 - fTemp48) + fTemp49)) + ((1.2735541704855431e-17 * fTemp145) + ((2.5471083409710867e-18 * fTemp146) + ((0.04089277388695433 * fTemp147) + (((((2.4393594688416384e-34 * fTemp71) + (0.022664352972045144 * fTemp107)) + (0.022664352972045138 * fTemp102)) + (0.02266435297204512 * fTemp109)) + (5.2042176228676594e-18 * fTemp128)))))) - ((2.7335294515958808e-18 * fTemp148) + ((3.1225305737205953e-18 * fTemp149) + ((0.022664352972045162 * ((fTemp56 - fTemp45) - fTemp46)) + ((0.022664352972045165 * fTemp118) + ((1.7829758386797603e-17 * fTemp121) + ((7.6413250229132581e-18 * fTemp125) + (7.2859046720147234e-18 * fTemp110)))))))))); - double fTemp150 = (3.0667124528564294e-18 * fTemp85); - output15[i] = FAUSTFLOAT((fRec0[0] * (((0.033388810063348762 * fTemp13) + ((0.033388810063348817 * fTemp12) + ((1.4637328906707076e-17 * fTemp4) + ((0.016694405031674409 * fTemp143) + ((0.0023131708388267444 * fTemp132) + ((6.0979103388536467e-51 * fTemp112) + (((0.0300712209047478 * fTemp90) + ((0.03007122090474779 * fTemp89) + ((0.016982082124440721 * fTemp88) + ((9.2001373585692901e-18 * fTemp87) + ((0.026560635762986527 * fTemp86) + (((0.016982082124440748 * fTemp64) + (0.020818537549440738 * fTemp65)) + (0.02081853754944071 * fTemp69))))))) + (0.0023131708388267409 * fTemp91)))))))) - ((0.033388810063348796 * fTemp14) + (fTemp134 + ((4.879109635569025e-18 * fTemp2) + ((0.016982082124440741 * (((fTemp19 + fTemp23) + fTemp25) + fTemp28)) + ((0.0023131708388267449 * fTemp133) + ((0.030071220904747779 * fTemp79) + ((0.030071220904747797 * fTemp82) + (fTemp150 + (((0.020818537549440724 * fTemp57) + (0.020818537549440744 * fTemp68)) + (0.0023131708388267431 * fTemp70))))))))))))); - double fTemp151 = ((fTemp80 + fTemp44) - fTemp47); - double fTemp152 = (fTemp37 - fTemp38); - output16[i] = FAUSTFLOAT((fRec0[0] * (((4.2933974339990009e-17 * fTemp14) + ((3.0667124528564293e-17 * fTemp13) + ((1.8400274717138574e-17 * fTemp12) + ((6.133424905712858e-18 * fTemp11) + ((0.035508216952135609 * ((fTemp144 + fTemp48) - fTemp49)) + ((0.035508216952135616 * fTemp151) + ((5.4356280292327993e-19 * fTemp132) + ((9.0593800487213328e-19 * fTemp91) + ((0.035508216952135588 * fTemp79) + ((1.2735541704855428e-17 * fTemp88) + ((2.5471083409710855e-18 * fTemp83) + (((7.6413250229132566e-18 * fTemp64) + (1.7829758386797597e-17 * fTemp67)) + (1.2683132068209864e-18 * fTemp70))))))))))))) - ((2.0700309056780893e-17 * fTemp4) + ((1.3800206037853928e-17 * fTemp3) + ((6.9001030189269641e-18 * fTemp2) + ((0.035508216952135595 * ((fTemp152 + fTemp45) - fTemp46)) + (((9.200137358569287e-18 * fTemp87) + (fTemp150 + (fTemp135 + (0.035508216952135643 * fTemp69)))) + (4.7584639941967359e-19 * fTemp133))))))))); - double fTemp153 = (fTemp36 - fTemp40); - output17[i] = FAUSTFLOAT((fRec0[0] * (((0.027200442744256398 * ((fTemp153 - fTemp44) + fTemp48)) + ((0.0062770252486745223 * fTemp148) + (((0.029413829057838591 * fTemp146) + ((((0.02941382905783858 * fTemp125) + ((1.3010959028184069e-17 * fTemp104) + (0.027200442744256408 * fTemp102))) + (0.018831075746023631 * fTemp127)) + (0.018831075746023662 * fTemp118))) + (0.0062770252486745231 * fTemp149)))) - ((0.029413829057838629 * fTemp145) + ((0.0062770252486745335 * fTemp128) + ((0.018831075746023648 * fTemp124) + ((0.018831075746023641 * fTemp120) + ((0.029413829057838594 * fTemp121) + (((0.035414181017315374 * fTemp105) + (0.027200442744256415 * fTemp109)) + (0.0062770252486745266 * fTemp110)))))))))); - output18[i] = FAUSTFLOAT((fRec0[0] * (((5.2159876025162161e-18 * fTemp3) + (((0.031444705933590805 * fTemp94) + ((0.0067104222539056237 * fTemp79) + ((0.0067104222539056254 * fTemp89) + ((1.7386625341720719e-17 * fTemp87) + ((5.7955417805735729e-18 * fTemp85) + ((0.0067104222539056367 * fTemp57) + (0.0067104222539056471 * fTemp69))))))) + (0.02907849643359095 * fTemp97))) - ((7.823981403774323e-18 * fTemp4) + ((2.607993801258108e-18 * fTemp2) + ((0.037859351999996446 * fTemp95) + (((0.0067104222539056272 * fTemp82) + (((1.1591083561147146e-17 * fTemp63) + (0.006710422253905635 * fTemp65)) + (0.0067104222539056315 * fTemp68))) + (0.0067104222539056298 * fTemp90)))))))); - double fTemp154 = (fTemp32 - fTemp34); - output19[i] = FAUSTFLOAT((fRec0[0] * ((((0.011117382399029452 * fTemp121) + ((((1.6392267574774099e-18 * fTemp104) + (0.013385302265262959 * fTemp105)) + (0.010280801007450529 * fTemp108)) + (0.010280801007450555 * fTemp109))) + (0.035587388102713349 * (((fTemp154 - fTemp52) - fTemp53) + fTemp55))) - ((0.01111738239902945 * ((((fTemp21 - fTemp22) - fTemp25) - fTemp26) + fTemp27)) + ((((0.030842403022351562 * fTemp101) + ((0.010280801007450534 * fTemp107) + (0.010280801007450538 * fTemp102))) + (0.030842403022351569 * fTemp99)) + (0.035587388102713342 * fTemp128)))))); - output20[i] = FAUSTFLOAT((fRec0[0] * ((((((0.014285714285714285 * fTemp114) + (0.038095238095238099 * fTemp112)) + (0.025396825396825397 * fTemp115)) + (0.0042514054232804356 * fTemp116)) + (0.014254712301587407 * fTemp113)) - ((0.027513227513227514 * fTemp111) + (0.024609375000000013 * fTemp29))))); - output21[i] = FAUSTFLOAT((fRec0[0] * (((0.011117382399029452 * fTemp145) + ((0.035587388102713342 * fTemp117) + ((0.010280801007450525 * fTemp127) + ((0.010280801007450517 * fTemp124) + ((0.013385302265262959 * fTemp122) + ((8.1961337873870493e-19 * fTemp123) + (((7.3765204086483564e-18 * fTemp71) + (0.030842403022351562 * fTemp108)) + (0.035587388102713335 * fTemp110)))))))) - ((0.01111738239902945 * ((fTemp92 - fTemp25) + fTemp26)) + (((0.010280801007450515 * fTemp118) + ((0.030842403022351559 * fTemp119) + ((0.010280801007450522 * fTemp120) + ((0.011117382399029449 * fTemp121) + ((2.4588401362161147e-18 * fTemp126) + (0.030842403022351552 * fTemp109)))))) + (0.035587388102713349 * fTemp128)))))); - double fTemp155 = (fTemp36 + fTemp39); - output22[i] = FAUSTFLOAT((fRec0[0] * (((1.6227516985606004e-17 * fTemp14) + ((6.9546501366882881e-18 * fTemp12) + ((0.047324189999995547 * fTemp130) + ((4.7908068913603203e-34 * fTemp112) + (((((((1.9254329235850881e-18 * fTemp83) + (9.6271646179254396e-18 * fTemp88)) + (0.0089472296718741701 * fTemp82)) + (0.0089472296718741719 * fTemp89)) + (0.0089472296718741684 * fTemp90)) + (0.0089472296718741736 * fTemp79)) + (8.902721895353721e-18 * fTemp91)))))) - ((1.1591083561147147e-17 * fTemp13) + ((2.3182167122294292e-18 * fTemp11) + ((0.0089472296718741632 * ((fTemp155 + fTemp44) + fTemp47)) + ((5.3416331372122328e-18 * fTemp132) + ((4.6761788733398907e-18 * fTemp133) + ((0.021295885499997998 * fTemp131) + (((((5.7762987707552641e-18 * fTemp64) + (1.3478030465095617e-17 * fTemp67)) + (0.0089472296718741667 * fTemp68)) + (0.0089472296718741563 * fTemp69)) + (1.246381065349521e-17 * fTemp70))))))))))); - output23[i] = FAUSTFLOAT((fRec0[0] * (((0.0062770252486745266 * fTemp149) + ((0.029413829057838549 * fTemp145) + (((0.027200442744256377 * fTemp127) + ((0.027200442744256363 * fTemp124) + ((0.029413829057838594 * fTemp125) + ((1.9516438542276106e-17 * fTemp126) + ((0.035414181017315374 * fTemp122) + (((1.8293731016560941e-50 * fTemp71) + (0.018831075746023603 * fTemp107)) + (0.018831075746023575 * fTemp109))))))) + (0.0062770252486745171 * fTemp128)))) - ((0.0062770252486745275 * fTemp148) + ((0.029413829057838584 * fTemp146) + ((0.027200442744256356 * fTemp118) + ((0.027200442744256374 * fTemp120) + ((0.02941382905783858 * fTemp121) + ((6.5054795140920346e-18 * fTemp123) + (((0.018831075746023586 * fTemp102) + (0.01883107574602361 * fTemp108)) + (0.0062770252486745231 * fTemp110))))))))))); - output24[i] = FAUSTFLOAT((fRec0[0] * (((0.012520803773755805 * fTemp111) + ((3.9603917912335094e-67 * fTemp112) + ((0.028171808490950554 * fTemp114) + ((0.010356563277706251 * fTemp79) + ((0.010356563277706199 * fTemp90) + ((0.010356563277706232 * fTemp89) + ((0.010356563277706217 * fTemp82) + ((((0.010356563277706152 * fTemp65) + (0.010356563277706145 * fTemp57)) + (0.010356563277706178 * fTemp68)) + (0.010356563277706064 * fTemp69))))))))) - (((0.050083215095023212 * fTemp115) + (0.020798717987459581 * fTemp29)) + (0.0014795090396723079 * fTemp113))))); - output25[i] = FAUSTFLOAT((fRec0[0] * (((0.037142706401659856 * fTemp14) + ((0.037142706401659786 * fTemp13) + ((1.8092222748840437e-17 * fTemp3) + ((0.036961085234966218 * ((((fTemp155 - fTemp40) + fTemp44) + fTemp47) - fTemp48)) + ((0.0092856766004149483 * fTemp137) + ((0.00046786183841729064 * fTemp91) + ((0.0014035855152518362 * fTemp79) + ((0.001403585515251904 * fTemp90) + ((0.012594249175901172 * fTemp88) + ((((0.029546842014263944 * fTemp61) + (5.6858370633078216e-18 * fTemp63)) + (0.012594249175901195 * fTemp67)) + (0.00046786183841729151 * fTemp70))))))))))) - ((0.037142706401659828 * fTemp12) + ((0.037142706401659779 * fTemp11) + ((((0.0014035855152518585 * fTemp89) + ((0.0014035855152518815 * fTemp82) + ((0.012594249175901169 * fTemp83) + ((0.012594249175901188 * fTemp64) + (0.036961085234966211 * fTemp69))))) + (0.00046786183841729075 * fTemp133)) + (0.00046786183841729124 * fTemp132))))))); - output26[i] = FAUSTFLOAT((fRec0[0] * (((0.035508216952135595 * ((((fTemp80 + fTemp40) - fTemp44) + fTemp47) - fTemp48)) + ((1.63068840876984e-18 * fTemp149) + ((2.4386705720379917e-17 * fTemp145) + ((4.8773411440759829e-18 * fTemp146) + ((2.7178140146164e-18 * fTemp128) + ((0.035508216952135567 * fTemp118) + ((0.035508216952135574 * fTemp124) + ((3.4141388008531875e-17 * fTemp121) + ((1.4632023432227946e-17 * fTemp125) + (3.8049396204629603e-18 * fTemp110)))))))))) - (((0.035508216952135588 * fTemp127) + ((0.035508216952135581 * fTemp120) + ((2.1576234629586837e-17 * fTemp126) + ((7.1920782098622802e-18 * fTemp123) + ((1.438415641972456e-17 * fTemp104) + (0.035508216952135623 * fTemp109)))))) + (1.427539198259021e-18 * fTemp148))))); - output27[i] = FAUSTFLOAT((fRec0[0] * (((0.027684538794142632 * fTemp14) + ((0.027684538794142663 * fTemp13) + ((((0.0031385126243372867 * fTemp89) + ((0.0031385126243372858 * fTemp82) + ((0.028161597282885743 * fTemp83) + ((((0.022022915754780329 * fTemp61) + (1.779948545556168e-17 * fTemp63)) + (0.028161597282885732 * fTemp64)) + (0.0045334071240427532 * fTemp69))))) + (0.012205326872422687 * fTemp133)) + (0.012205326872422689 * fTemp132)))) - ((0.027684538794142618 * fTemp12) + ((0.027684538794142628 * fTemp11) + ((8.0910879860950644e-18 * fTemp3) + ((0.0045334071240427497 * ((fTemp153 + fTemp44) - fTemp48)) + ((0.048447942889749587 * fTemp137) + ((0.012205326872422709 * fTemp91) + ((0.0031385126243372885 * fTemp79) + ((0.0031385126243372841 * fTemp90) + ((0.028161597282885781 * fTemp88) + (((0.028161597282885746 * fTemp67) + (0.0045334071240427515 * fTemp57)) + (0.012205326872422696 * fTemp70)))))))))))))); - output28[i] = FAUSTFLOAT((fRec0[0] * ((((1.5316979614614479e-17 * fTemp138) + ((0.020500678615759105 * fTemp118) + ((0.020500678615759112 * fTemp124) + ((1.2457044871490476e-17 * fTemp126) + ((4.1523482904968253e-18 * fTemp123) + ((0.020500678615759146 * fTemp102) + (0.020500678615759181 * fTemp109))))))) + (0.041001357231518168 * fTemp139)) - (((0.020500678615759119 * fTemp120) + (((8.3046965809936507e-18 * fTemp104) + (0.020500678615759143 * fTemp107)) + (0.020500678615759133 * fTemp108))) + (0.020500678615759129 * fTemp127))))); - output29[i] = FAUSTFLOAT((fRec0[0] * (((2.4969639621850082e-18 * fTemp3) + (((0.025630902468550199 * fTemp142) + (((((0.020389258061373223 * fTemp61) + (0.025630902468550196 * fTemp62)) + (0.026072572806195689 * fTemp67)) + (0.0009685660236671092 * fTemp68)) + (0.00096856602366711159 * fTemp69))) + (0.035191232193238609 * (((fTemp154 + fTemp52) + fTemp53) - fTemp55)))) - ((0.0029056980710013259 * fTemp140) + ((0.0029056980710013254 * fTemp141) + ((0.01922317685141265 * fTemp137) + ((((((2.3541602000525996e-18 * fTemp63) + (0.026072572806195685 * fTemp64)) + (0.026072572806195678 * fTemp59)) + (0.00096856602366710964 * fTemp65)) + (0.00096856602366710996 * fTemp57)) + (0.035191232193238602 * fTemp91)))))))); - output30[i] = FAUSTFLOAT((fRec0[0] * (((0.042115870353719366 * fTemp71) + (0.023090966710758377 * fTemp75)) - (((0.028125949882539081 * fTemp72) + (0.0067319093514117785 * fTemp73)) + (0.00075024801587290956 * fTemp76))))); - output31[i] = FAUSTFLOAT((fRec0[0] * (((0.025630902468550189 * fTemp14) + ((1.2484819810925041e-18 * fTemp2) + ((9.9878558487400326e-18 * fTemp112) + ((0.035191232193238602 * fTemp78) + ((0.00096856602366710877 * fTemp90) + ((0.00096856602366710812 * fTemp89) + ((0.026072572806195689 * fTemp88) + ((3.5312403000788995e-18 * fTemp87) + ((0.020389258061373223 * fTemp86) + ((((0.025630902468550199 * fTemp62) + (0.026072572806195678 * fTemp64)) + (0.0029056980710013254 * fTemp68)) + (0.035191232193238595 * fTemp70))))))))))) - ((0.025630902468550196 * fTemp12) + ((3.745445943277512e-18 * fTemp4) + ((0.0029056980710013246 * fTemp151) + ((0.01922317685141265 * fTemp143) + (((0.00096856602366710779 * fTemp79) + ((0.00096856602366710855 * fTemp82) + ((0.026072572806195685 * fTemp83) + ((1.1770801000262998e-18 * fTemp85) + ((0.026072572806195675 * fTemp67) + (0.0029056980710013241 * fTemp69)))))) + (0.035191232193238609 * fTemp91))))))))); - output32[i] = FAUSTFLOAT((fRec0[0] * (((4.6894725144107197e-33 * fTemp145) + ((9.3789450288214403e-34 * fTemp146) + ((0.033906496904967637 * fTemp147) + ((((((8.0904400869483595e-34 * fTemp71) + (0.027334238154345495 * fTemp120)) + (0.027334238154345498 * fTemp124)) + (0.027334238154345485 * fTemp127)) + (0.027334238154345505 * fTemp118)) + (1.2553045223568977e-17 * fTemp128))))) - ((6.5935211231487317e-18 * fTemp148) + ((7.5318271341413852e-18 * fTemp149) + ((6.5652615201750074e-33 * fTemp121) + ((2.8136835086464319e-33 * fTemp125) + (((((0.027334238154345478 * fTemp107) + (0.027334238154345474 * fTemp102)) + (0.027334238154345481 * fTemp108)) + (0.02733423815434545 * fTemp109)) + (1.7574263312996565e-17 * fTemp110))))))))); - output33[i] = FAUSTFLOAT((fRec0[0] * (((0.027684538794142618 * fTemp14) + ((0.027684538794142621 * fTemp11) + ((4.0455439930475322e-18 * fTemp2) + ((0.048447942889749587 * fTemp143) + ((4.0448961198413007e-50 * fTemp112) + ((((0.0045334071240427463 * fTemp82) + ((0.028161597282885704 * fTemp88) + ((2.6699228183342524e-17 * fTemp87) + (((0.028161597282885746 * fTemp64) + (0.0031385126243372767 * fTemp57)) + (0.0031385126243372802 * fTemp68))))) + (0.0045334071240427437 * fTemp79)) + (0.012205326872422675 * fTemp91))))))) - ((0.027684538794142587 * fTemp13) + ((0.027684538794142632 * fTemp12) + ((1.2136631979142595e-17 * fTemp4) + ((0.012205326872422696 * fTemp78) + ((0.0045334071240427471 * fTemp90) + ((0.0045334071240427445 * fTemp89) + ((0.028161597282885739 * fTemp83) + ((8.8997427277808398e-18 * fTemp85) + ((0.022022915754780329 * fTemp86) + ((((0.028161597282885732 * fTemp67) + (0.0031385126243372789 * fTemp65)) + (0.0031385126243372746 * fTemp69)) + (0.012205326872422689 * fTemp70)))))))))))))); - output34[i] = FAUSTFLOAT((fRec0[0] * (((0.010356563277706246 * fTemp118) + ((0.010356563277706192 * fTemp127) + ((0.010356563277706229 * fTemp124) + ((0.010356563277706213 * fTemp120) + ((((((1.3135133594325083e-66 * fTemp71) + (0.029363887673040441 * fTemp72)) + (0.010356563277706147 * fTemp107)) + (0.01035656327770614 * fTemp102)) + (0.010356563277706175 * fTemp108)) + (0.01035656327770606 * fTemp109)))))) - ((0.039826512815546306 * fTemp73) + (0.0044385271190169251 * fTemp76))))); - output35[i] = FAUSTFLOAT((fRec0[0] * (((0.037142706401659779 * fTemp13) + ((0.037142706401659731 * fTemp12) + ((9.0461113744202184e-18 * fTemp2) + ((0.036961085234966218 * ((((((fTemp152 - fTemp41) + fTemp42) + fTemp45) - fTemp46) - fTemp49) + fTemp50)) + ((0.0092856766004149483 * fTemp143) + ((0.00046786183841728994 * fTemp132) + ((2.5434040020076175e-83 * fTemp112) + (((0.012594249175901169 * fTemp88) + ((2.8429185316539108e-18 * fTemp85) + ((0.029546842014263944 * fTemp86) + (((0.012594249175901155 * fTemp64) + (0.0014035855152519582 * fTemp57)) + (0.0014035855152519131 * fTemp68))))) + (0.00046786183841729053 * fTemp91))))))))) - ((0.03714270640165971 * fTemp14) + ((0.037142706401659786 * fTemp11) + ((7.962406901797708e-17 * fTemp4) + ((0.00046786183841729048 * fTemp133) + ((0.012594249175901174 * fTemp83) + ((2.5023430732567692e-17 * fTemp87) + ((((0.012594249175901146 * fTemp67) + (0.0014035855152519602 * fTemp65)) + (0.0014035855152521122 * fTemp69)) + (0.00046786183841728967 * fTemp70))))))))))); + double fTemp21 = double(input20[i]); + double fTemp22 = double(input21[i]); + double fTemp23 = (((fTemp19 + fTemp20) + fTemp21) + fTemp22); + double fTemp24 = double(input22[i]); + double fTemp25 = double(input23[i]); + double fTemp26 = double(input24[i]); + double fTemp27 = double(input25[i]); + double fTemp28 = ((((fTemp23 + fTemp24) + fTemp25) + fTemp26) + fTemp27); + double fTemp29 = double(input26[i]); + double fTemp30 = double(input27[i]); + double fTemp31 = (fTemp29 + fTemp30); + double fTemp32 = double(input28[i]); + double fTemp33 = double(input29[i]); + double fTemp34 = ((fTemp31 + fTemp32) + fTemp33); + double fTemp35 = double(input30[i]); + double fTemp36 = double(input31[i]); + double fTemp37 = double(input32[i]); + double fTemp38 = double(input33[i]); + double fTemp39 = double(input34[i]); + double fTemp40 = double(input35[i]); + double fTemp41 = double(input36[i]); + double fTemp42 = double(input37[i]); + double fTemp43 = double(input38[i]); + double fTemp44 = double(input39[i]); + double fTemp45 = double(input40[i]); + double fTemp46 = double(input41[i]); + double fTemp47 = double(input42[i]); + double fTemp48 = double(input43[i]); + double fTemp49 = double(input44[i]); + double fTemp50 = double(input45[i]); + double fTemp51 = double(input46[i]); + double fTemp52 = double(input47[i]); + double fTemp53 = double(input48[i]); + double fTemp54 = double(input49[i]); + double fTemp55 = (fRec1[0] * ((((0.012698412698412698 * (((((fTemp0 + fTemp1) + fTemp2) + fTemp3) + fTemp4) + fTemp5)) + (0.022574955908289243 * ((((((((fTemp10 + fTemp11) + fTemp12) + fTemp13) + fTemp14) + fTemp15) + fTemp16) + fTemp17) + fTemp18))) + (0.021093750000000001 * fTemp28)) + (0.02017333553791887 * ((((((((((((((((((((fTemp34 + fTemp35) + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42) + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50) + fTemp51) + fTemp52) + fTemp53) + fTemp54)))); + fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + fVbargraph0 = FAUSTFLOAT(fRec0[0]); + output0[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (fRec1[0] * (((((fConst5 * fTemp4) + (0.022574955908289243 * ((((fConst6 * fTemp9) + (fConst7 * fTemp13)) + (fConst8 * fTemp14)) + (fConst6 * fTemp18)))) + (0.021093750000000001 * ((((fConst9 * fTemp21) + (fConst10 * fTemp22)) + (fConst9 * fTemp26)) + (fConst10 * fTemp27)))) + (fConst4 * (((((((((((((((((((((0.02026373487753309 * fTemp2) + (0.025473109945013343 * fTemp7)) + (0.025473109945013336 * fTemp11)) + (0.025473109945013343 * fTemp12)) + (0.025473109945013343 * fTemp16)) + (0.019434045907762619 * fTemp19)) + (0.019434045907762623 * fTemp20)) + (0.019434045907762619 * fTemp24)) + (0.019434045907762623 * fTemp25)) + (0.0097062489627452973 * fTemp29)) + (0.0097062489627452973 * fTemp30)) + (0.0097062489627453199 * fTemp35)) + (0.029118746888235923 * fTemp36)) + (0.029118746888235927 * fTemp37)) + (0.0097062489627453216 * fTemp38)) + (0.0097062489627453199 * fTemp43)) + (0.029118746888235923 * fTemp44)) + (0.029118746888235927 * fTemp45)) + (0.0097062489627453216 * fTemp46)) + (0.0097062489627452973 * fTemp51)) + (0.0097062489627452973 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst11 * fTemp32) + (fConst12 * fTemp33)) + (fConst13 * fTemp39)) + (fConst14 * fTemp40)) + (fConst15 * fTemp41)) + (fConst16 * fTemp42)) + (fConst13 * fTemp47)) + (fConst14 * fTemp48)) + (fConst15 * fTemp49)) + (fConst16 * fTemp50)) + (fConst11 * fTemp53)) + (fConst12 * fTemp54))))); + fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (fTemp0 - fTemp5); + double fTemp58 = ((((fTemp10 - fTemp15) - fTemp16) - fTemp17) - fTemp18); + double fTemp59 = ((((fTemp23 - fTemp24) - fTemp25) - fTemp26) - fTemp27); + double fTemp60 = (((((((fTemp35 + fTemp36) + fTemp37) + fTemp38) + fTemp39) + fTemp40) + fTemp41) + fTemp42); + double fTemp61 = ((((((((fTemp60 - fTemp43) - fTemp44) - fTemp45) - fTemp46) - fTemp47) - fTemp48) - fTemp49) - fTemp50); + double fTemp62 = ((((fTemp34 - fTemp51) - fTemp52) - fTemp53) - fTemp54); + double fTemp63 = (fRec1[0] * (((((0.021994295969128601 * fTemp57) + (0.027648561470568499 * fTemp58)) + (0.021093750000000001 * fTemp59)) + (0.010535180889746075 * fTemp61)) + (0.031605542669238249 * fTemp62))); + fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph2 = FAUSTFLOAT(fRec3[0]); + output2[i] = FAUSTFLOAT(fTemp63); + double fTemp64 = (fRec1[0] * ((fConst4 * (((((((((((((((((((((0.02026373487753309 * fTemp1) + (0.025473109945013343 * fTemp6)) + (0.025473109945013343 * fTemp11)) + (0.025473109945013332 * fTemp14)) + (0.025473109945013343 * fTemp15)) + (0.019434045907762623 * fTemp19)) + (0.019434045907762616 * fTemp22)) + (0.019434045907762623 * fTemp24)) + (0.019434045907762616 * fTemp27)) + (0.0097062489627452956 * fTemp29)) + (0.0097062489627452939 * fTemp33)) + (0.029118746888235916 * fTemp35)) + (0.0097062489627453077 * fTemp36)) + (0.0097062489627453008 * fTemp41)) + (0.029118746888235913 * fTemp42)) + (0.029118746888235916 * fTemp43)) + (0.0097062489627453077 * fTemp44)) + (0.0097062489627453008 * fTemp49)) + (0.029118746888235913 * fTemp50)) + (0.0097062489627452956 * fTemp51)) + (0.0097062489627452939 * fTemp54))) + ((((fConst5 * fTemp3) + (0.022574955908289243 * ((((fConst6 * fTemp8) + (fConst7 * fTemp12)) + (fConst8 * fTemp13)) + (fConst6 * fTemp17)))) + (0.021093750000000001 * ((((fConst9 * fTemp20) + (fConst10 * fTemp21)) + (fConst9 * fTemp25)) + (fConst10 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst11 * fTemp30) + (fConst12 * fTemp32)) + (fConst17 * fTemp37)) + (fConst18 * fTemp38)) + (fConst14 * fTemp39)) + (fConst19 * fTemp40)) + (fConst17 * fTemp45)) + (fConst18 * fTemp46)) + (fConst14 * fTemp47)) + (fConst19 * fTemp48)) + (fConst11 * fTemp52)) + (fConst12 * fTemp53)))))); + fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph3 = FAUSTFLOAT(fRec4[0]); + output3[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = (fTemp30 + fTemp33); + double fTemp66 = (fTemp12 + fTemp14); + double fTemp67 = (fTemp20 + fTemp22); + double fTemp68 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst23 * fTemp65) + (fConst24 * fTemp37)) + (fConst25 * fTemp38)) + (fConst26 * fTemp41)) + (fConst27 * fTemp42)) + (fConst24 * fTemp45)) + (fConst25 * fTemp46)) + (fConst26 * fTemp49)) + (fConst27 * fTemp50)) + (fConst23 * fTemp52)) + (fConst23 * fTemp54))) + (((fConst29 * fTemp66) + (fConst30 * ((fTemp67 + fTemp25) + fTemp27))) + (fConst22 * ((((((((((((((((((0.072048835120117657 * fTemp11) + (0.072048835120117671 * fTemp13)) + (0.044881006545161167 * fTemp19)) + (0.044881006545161174 * fTemp21)) + (0.044881006545161167 * fTemp24)) + (0.044881006545161174 * fTemp26)) + (0.011706176702255417 * fTemp29)) + (0.011706176702255421 * fTemp32)) + (0.035118530106766375 * fTemp35)) + (0.035118530106766334 * fTemp36)) + (0.035118530106766362 * fTemp39)) + (0.035118530106766348 * fTemp40)) + (0.035118530106766375 * fTemp43)) + (0.035118530106766334 * fTemp44)) + (0.035118530106766362 * fTemp47)) + (0.035118530106766348 * fTemp48)) + (0.011706176702255417 * fTemp51)) + (0.011706176702255421 * fTemp53)))))); + fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph4 = FAUSTFLOAT(fRec5[0]); + output4[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = (fConst46 * fTemp19); + double fTemp70 = (fRec1[0] * ((((0.022574955908289243 * ((fConst35 * fTemp9) + (fConst37 * fTemp18))) + (0.021093750000000001 * ((((fConst38 * fTemp21) + (fConst39 * fTemp22)) + (fConst42 * fTemp26)) + (fConst43 * fTemp27)))) + (fConst33 * ((((((((((((((((((fConst44 * fTemp7) + (fConst45 * fTemp16)) + fTemp69) + (fConst46 * fTemp20)) + (fConst47 * fTemp24)) + (fConst48 * fTemp25)) + (fConst49 * fTemp29)) + (fConst49 * fTemp30)) + (fConst50 * fTemp35)) + (fConst51 * fTemp36)) + (fConst52 * fTemp37)) + (fConst53 * fTemp38)) + (fConst55 * fTemp43)) + (fConst56 * fTemp44)) + (fConst57 * fTemp45)) + (fConst58 * fTemp46)) + (fConst60 * fTemp51)) + (fConst60 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst61 * fTemp32) + (fConst62 * fTemp33)) + (fConst63 * fTemp39)) + (fConst64 * fTemp40)) + (fConst65 * fTemp41)) + (fConst66 * fTemp42)) + (fConst68 * fTemp47)) + (fConst69 * fTemp48)) + (fConst70 * fTemp49)) + (fConst71 * fTemp50)) + (fConst73 * fTemp53)) + (fConst74 * fTemp54))))); + fRec6[0] = max((fRec6[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph5 = FAUSTFLOAT(fRec6[0]); + output5[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = ((((fTemp10 + fTemp15) + fTemp16) + fTemp17) + fTemp18); + double fTemp72 = (fTemp0 + fTemp5); + double fTemp73 = ((((fTemp34 + fTemp51) + fTemp52) + fTemp53) + fTemp54); + double fTemp74 = (((fTemp1 + fTemp2) + fTemp3) + fTemp4); + double fTemp75 = (((fTemp11 + fTemp12) + fTemp13) + fTemp14); + double fTemp76 = ((((((((fTemp60 + fTemp43) + fTemp44) + fTemp45) + fTemp46) + fTemp47) + fTemp48) + fTemp49) + fTemp50); + double fTemp77 = (fRec1[0] * ((((0.01261978399999881 * fTemp71) + ((0.028394513999997331 * fTemp72) + (5.236595479505967e-18 * fTemp28))) + (0.032806508796871948 * fTemp73)) - (((0.014197256999998666 * fTemp74) + (0.025239567999997631 * fTemp75)) + (0.01640325439843596 * fTemp76)))); + fRec7[0] = max((fRec7[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp77)))))); + fVbargraph6 = FAUSTFLOAT(fRec7[0]); + output6[i] = FAUSTFLOAT(fTemp77); + double fTemp78 = (fRec1[0] * ((fConst33 * ((((((((((((((((fTemp69 + ((fConst44 * fTemp6) + (fConst45 * fTemp15))) + (fConst75 * fTemp22)) + (fConst48 * fTemp24)) + (fConst76 * fTemp27)) + (fConst77 * fTemp29)) + (fConst78 * fTemp33)) + (fConst79 * fTemp35)) + (fConst80 * fTemp36)) + (fConst81 * fTemp41)) + (fConst82 * fTemp42)) + (fConst83 * fTemp43)) + (fConst84 * fTemp44)) + (fConst85 * fTemp49)) + (fConst86 * fTemp50)) + (fConst87 * fTemp51)) + (fConst88 * fTemp54))) + (((0.022574955908289243 * ((fConst35 * fTemp8) + (fConst37 * fTemp17))) + (0.021093750000000001 * ((((fConst38 * fTemp20) + (fConst39 * fTemp21)) + (fConst42 * fTemp25)) + (fConst43 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst61 * fTemp30) + (fConst62 * fTemp32)) + (fConst89 * fTemp37)) + (fConst90 * fTemp38)) + (fConst64 * fTemp39)) + (fConst91 * fTemp40)) + (fConst92 * fTemp45)) + (fConst93 * fTemp46)) + (fConst69 * fTemp47)) + (fConst94 * fTemp48)) + (fConst73 * fTemp52)) + (fConst74 * fTemp53)))))); + fRec8[0] = max((fRec8[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp78)))))); + fVbargraph7 = FAUSTFLOAT(fRec8[0]); + output7[i] = FAUSTFLOAT(fTemp78); + double fTemp79 = (fTemp2 + fTemp4); + double fTemp80 = (fTemp7 + fTemp9); + double fTemp81 = (fTemp1 + fTemp3); + double fTemp82 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst95 * fTemp31) + (fConst96 * fTemp33)) + (fConst97 * fTemp36)) + (fConst98 * fTemp37)) + (fConst99 * fTemp40)) + (fConst100 * fTemp41)) + (fConst97 * fTemp44)) + (fConst98 * fTemp45)) + (fConst99 * fTemp48)) + (fConst100 * fTemp49)) + (fConst95 * fTemp51)) + (fConst95 * fTemp52)) + (fConst96 * fTemp54))) + ((((fConst101 * fTemp79) + (0.022574955908289243 * (((((fConst102 * fTemp80) + (fConst103 * fTemp12)) + (fConst104 * fTemp14)) + (fConst102 * fTemp16)) + (fConst102 * fTemp18)))) + (0.021093750000000001 * ((((fConst105 * fTemp20) + (fConst106 * fTemp22)) + (fConst105 * fTemp25)) + (fConst106 * fTemp27)))) + (fConst22 * (((((((((((((((((((((0.04052746975506618 * fTemp81) + (0.036024417560058836 * fTemp6)) + (0.036024417560058836 * fTemp8)) + (1.5998055129555246e-17 * fTemp11)) + (3.1996110259110492e-17 * fTemp13)) + (0.036024417560058836 * fTemp15)) + (0.036024417560058836 * fTemp17)) + (9.9655853669580557e-18 * fTemp19)) + (1.9931170733916111e-17 * fTemp21)) + (9.9655853669580557e-18 * fTemp24)) + (1.9931170733916111e-17 * fTemp26)) + (5.19858676206982e-18 * fTemp32)) + (0.046824706809021746 * fTemp35)) + (0.046824706809021746 * fTemp38)) + (0.046824706809021774 * fTemp39)) + (0.046824706809021698 * fTemp42)) + (0.046824706809021746 * fTemp43)) + (0.046824706809021746 * fTemp46)) + (0.046824706809021774 * fTemp47)) + (0.046824706809021698 * fTemp50)) + (5.19858676206982e-18 * fTemp53)))))); + fRec9[0] = max((fRec9[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp82)))))); + fVbargraph8 = FAUSTFLOAT(fRec9[0]); + output8[i] = FAUSTFLOAT(fTemp82); + double fTemp83 = (fRec1[0] * (((((fConst110 * fTemp2) + (0.022574955908289243 * ((((fConst111 * fTemp7) + (fConst112 * fTemp13)) + (fConst113 * fTemp14)) + (fConst111 * fTemp16)))) + (0.021093750000000001 * ((((fConst114 * fTemp21) + (fConst115 * fTemp22)) + (fConst114 * fTemp26)) + (fConst115 * fTemp27)))) + (fConst109 * (((((((((((((((((((((0.081054939510132359 * fTemp4) + (0.050946219890026692 * fTemp9)) + (0.10189243978005338 * fTemp11)) + (0.1018924397800533 * fTemp12)) + (0.050946219890026692 * fTemp18)) + (0.051824122420700336 * fTemp19)) + (0.051824122420700287 * fTemp20)) + (0.051824122420700336 * fTemp24)) + (0.051824122420700287 * fTemp25)) + (0.0070590901547238332 * fTemp29)) + (0.0070590901547238332 * fTemp30)) + (0.091768172011410243 * fTemp35)) + (0.091768172011410271 * fTemp38)) + (0.063531811392514695 * fTemp40)) + (0.063531811392514792 * fTemp41)) + (0.091768172011410243 * fTemp43)) + (0.091768172011410271 * fTemp46)) + (0.063531811392514695 * fTemp48)) + (0.063531811392514792 * fTemp49)) + (0.0070590901547238332 * fTemp51)) + (0.0070590901547238332 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst116 * fTemp32) + (fConst117 * fTemp33)) + (fConst118 * fTemp36)) + (fConst119 * fTemp37)) + (fConst120 * fTemp39)) + (fConst121 * fTemp42)) + (fConst118 * fTemp44)) + (fConst119 * fTemp45)) + (fConst120 * fTemp47)) + (fConst121 * fTemp50)) + (fConst116 * fTemp53)) + (fConst117 * fTemp54))))); + fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph9 = FAUSTFLOAT(fRec10[0]); + output9[i] = FAUSTFLOAT(fTemp83); + double fTemp84 = (fRec1[0] * ((0.02017333553791887 * (((((((((fConst125 * fTemp41) + (((fConst126 * fTemp65) + (fConst127 * fTemp37)) + (fConst128 * fTemp38))) + (fConst129 * fTemp42)) + (fConst132 * fTemp45)) + (fConst133 * fTemp46)) + (fConst134 * fTemp49)) + (fConst135 * fTemp50)) + (fConst138 * fTemp52)) + (fConst138 * fTemp54))) + ((0.021093750000000001 * (((fConst139 * fTemp67) + (fConst142 * fTemp25)) + (fConst142 * fTemp27))) + (fConst123 * (((((((((((((((fConst21 * ((0.12956030605175081 * fTemp19) + (0.12956030605175084 * fTemp21))) + (fConst143 * fTemp24)) + (fConst144 * fTemp26)) + (fConst145 * fTemp29)) + (fConst146 * fTemp32)) + (fConst147 * fTemp35)) + (fConst148 * fTemp36)) + (fConst149 * fTemp39)) + (fConst150 * fTemp40)) + (fConst151 * fTemp43)) + (fConst152 * fTemp44)) + (fConst153 * fTemp47)) + (fConst154 * fTemp48)) + (fConst155 * fTemp51)) + (fConst156 * fTemp53)))))); + fRec11[0] = max((fRec11[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp84)))))); + fVbargraph10 = FAUSTFLOAT(fRec11[0]); + output10[i] = FAUSTFLOAT(fTemp84); + double fTemp85 = (fRec1[0] * (((((fConst160 * fTemp4) + (0.022574955908289243 * ((((fConst162 * fTemp9) + (fConst163 * fTemp13)) + (fConst164 * fTemp14)) + (fConst166 * fTemp18)))) + (0.021093750000000001 * ((((fConst167 * fTemp21) + (fConst168 * fTemp22)) + (fConst171 * fTemp26)) + (fConst172 * fTemp27)))) + (fConst157 * (((((((((((((((((((((fConst173 * fTemp7) + (fConst174 * fTemp2)) + (fConst175 * fTemp11)) + (fConst176 * fTemp12)) + (fConst177 * fTemp16)) + (fConst178 * fTemp19)) + (fConst179 * fTemp20)) + (fConst180 * fTemp24)) + (fConst181 * fTemp25)) + (fConst182 * fTemp29)) + (fConst182 * fTemp30)) + (fConst184 * fTemp35)) + (fConst185 * fTemp36)) + (fConst186 * fTemp37)) + (fConst187 * fTemp38)) + (fConst189 * fTemp43)) + (fConst190 * fTemp44)) + (fConst191 * fTemp45)) + (fConst192 * fTemp46)) + (fConst194 * fTemp51)) + (fConst194 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst195 * fTemp32) + (fConst196 * fTemp33)) + (fConst198 * fTemp39)) + (fConst199 * fTemp40)) + (fConst200 * fTemp41)) + (fConst201 * fTemp42)) + (fConst203 * fTemp47)) + (fConst204 * fTemp48)) + (fConst205 * fTemp49)) + (fConst206 * fTemp50)) + (fConst208 * fTemp53)) + (fConst209 * fTemp54))))); + fRec12[0] = max((fRec12[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + fVbargraph11 = FAUSTFLOAT(fRec12[0]); + output11[i] = FAUSTFLOAT(fTemp85); + double fTemp86 = (fRec1[0] * (((0.033596842045264641 * fTemp57) + (0.026333598483989317 * fTemp62)) - (((0.010558468816293317 * fTemp58) + (0.021480823570105497 * fTemp59)) + (0.020481687709769415 * fTemp61)))); + fRec13[0] = max((fRec13[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp86)))))); + fVbargraph12 = FAUSTFLOAT(fRec13[0]); + output12[i] = FAUSTFLOAT(fTemp86); + double fTemp87 = (fRec1[0] * ((fConst157 * (((((((((((((((((((((fConst173 * fTemp6) + (fConst174 * fTemp1)) + (fConst176 * fTemp11)) + (fConst210 * fTemp14)) + (fConst177 * fTemp15)) + (fConst179 * fTemp19)) + (fConst211 * fTemp22)) + (fConst181 * fTemp24)) + (fConst212 * fTemp27)) + (fConst213 * fTemp29)) + (fConst214 * fTemp33)) + (fConst215 * fTemp35)) + (fConst216 * fTemp36)) + (fConst217 * fTemp41)) + (fConst218 * fTemp42)) + (fConst219 * fTemp43)) + (fConst220 * fTemp44)) + (fConst221 * fTemp49)) + (fConst222 * fTemp50)) + (fConst223 * fTemp51)) + (fConst224 * fTemp54))) + ((((fConst160 * fTemp3) + (0.022574955908289243 * ((((fConst162 * fTemp8) + (fConst163 * fTemp12)) + (fConst164 * fTemp13)) + (fConst166 * fTemp17)))) + (0.021093750000000001 * ((((fConst167 * fTemp20) + (fConst168 * fTemp21)) + (fConst171 * fTemp25)) + (fConst172 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst195 * fTemp30) + (fConst196 * fTemp32)) + (fConst225 * fTemp37)) + (fConst226 * fTemp38)) + (fConst199 * fTemp39)) + (fConst227 * fTemp40)) + (fConst228 * fTemp45)) + (fConst229 * fTemp46)) + (fConst204 * fTemp47)) + (fConst230 * fTemp48)) + (fConst208 * fTemp52)) + (fConst209 * fTemp53)))))); + fRec14[0] = max((fRec14[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph13 = FAUSTFLOAT(fRec14[0]); + output13[i] = FAUSTFLOAT(fTemp87); + double fTemp88 = (fTemp6 + fTemp8); + double fTemp89 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst231 * fTemp31) + (fConst232 * fTemp33)) + (fConst233 * fTemp36)) + (fConst234 * fTemp37)) + (fConst235 * fTemp40)) + (fConst236 * fTemp41)) + (fConst237 * fTemp44)) + (fConst237 * fTemp45)) + (fConst238 * fTemp48)) + (fConst239 * fTemp49)) + (fConst240 * fTemp51)) + (fConst240 * fTemp52)) + (fConst241 * fTemp54))) + (((0.022574955908289243 * (((fConst242 * fTemp80) + (fConst244 * fTemp16)) + (fConst244 * fTemp18))) + (0.021093750000000001 * ((((fConst245 * fTemp20) + (fConst246 * fTemp22)) + (fConst247 * fTemp25)) + (fConst248 * fTemp27)))) + (fConst123 * (((((((((((((((((fConst249 * fTemp88) + (fConst250 * fTemp15)) + (fConst250 * fTemp17)) + (fConst251 * fTemp19)) + (fConst252 * fTemp21)) + (fConst253 * fTemp24)) + (fConst254 * fTemp26)) + (fConst255 * fTemp32)) + (fConst256 * fTemp35)) + (fConst256 * fTemp38)) + (fConst257 * fTemp39)) + (fConst258 * fTemp42)) + (fConst259 * fTemp43)) + (fConst259 * fTemp46)) + (fConst260 * fTemp47)) + (fConst261 * fTemp50)) + (fConst262 * fTemp53)))))); + fRec15[0] = max((fRec15[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + fVbargraph14 = FAUSTFLOAT(fRec15[0]); + output14[i] = FAUSTFLOAT(fTemp89); + double fTemp90 = (fRec1[0] * ((0.02017333553791887 * ((((((((((((fConst263 * fTemp29) + (fConst264 * fTemp33)) + (fConst265 * fTemp36)) + (fConst266 * fTemp38)) + (fConst267 * fTemp39)) + (fConst268 * fTemp41)) + (fConst265 * fTemp44)) + (fConst266 * fTemp46)) + (fConst267 * fTemp47)) + (fConst268 * fTemp49)) + (fConst263 * fTemp51)) + (fConst264 * fTemp54))) + ((((fConst110 * fTemp3) + (0.022574955908289243 * ((((fConst111 * fTemp8) + (fConst269 * fTemp11)) + (fConst270 * fTemp14)) + (fConst111 * fTemp17)))) + (0.021093750000000001 * ((((fConst271 * fTemp19) + (fConst272 * fTemp22)) + (fConst271 * fTemp24)) + (fConst272 * fTemp27)))) + (fConst109 * (((((((((((((((((((((0.081054939510132359 * fTemp1) + (0.050946219890026692 * fTemp6)) + (0.10189243978005338 * fTemp12)) + (0.10189243978005329 * fTemp13)) + (0.050946219890026692 * fTemp15)) + (0.051824122420700336 * fTemp20)) + (0.051824122420700267 * fTemp21)) + (0.051824122420700336 * fTemp25)) + (0.051824122420700267 * fTemp26)) + (0.0070590901547238384 * fTemp30)) + (0.0070590901547238306 * fTemp32)) + (0.063531811392514598 * fTemp35)) + (0.09176817201141016 * fTemp37)) + (0.091768172011410187 * fTemp40)) + (0.063531811392514445 * fTemp42)) + (0.063531811392514598 * fTemp43)) + (0.09176817201141016 * fTemp45)) + (0.091768172011410187 * fTemp48)) + (0.063531811392514445 * fTemp50)) + (0.0070590901547238384 * fTemp52)) + (0.0070590901547238306 * fTemp53)))))); + fRec16[0] = max((fRec16[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph15 = FAUSTFLOAT(fRec16[0]); + output15[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = (fRec1[0] * ((0.02017333553791887 * ((((((((((fConst276 * fTemp29) + (fConst277 * fTemp36)) + (fConst278 * fTemp38)) + (fConst279 * fTemp40)) + (fConst280 * fTemp42)) + (fConst277 * fTemp44)) + (fConst278 * fTemp46)) + (fConst279 * fTemp48)) + (fConst280 * fTemp50)) + (fConst276 * fTemp51))) + (fConst275 * ((((((((((((((((((((((((((1.3574799921485692e-16 * fTemp11) + (1.3574799921485695e-16 * fTemp12)) + (2.7149599842971385e-16 * fTemp13)) + (2.714959984297139e-16 * fTemp14)) + (5.6373863931755746e-17 * fTemp19)) + (5.6373863931755758e-17 * fTemp20)) + (1.1274772786351149e-16 * fTemp21)) + (1.1274772786351152e-16 * fTemp22)) + (5.6373863931755746e-17 * fTemp24)) + (5.6373863931755758e-17 * fTemp25)) + (1.1274772786351149e-16 * fTemp26)) + (1.1274772786351152e-16 * fTemp27)) + (4.0101337658685596e-18 * fTemp30)) + (8.0202675317371177e-18 * fTemp32)) + (8.0202675317371192e-18 * fTemp33)) + (0.20432599334845877 * fTemp35)) + (0.20432599334845869 * fTemp37)) + (0.20432599334845877 * fTemp39)) + (0.20432599334845863 * fTemp41)) + (0.20432599334845877 * fTemp43)) + (0.20432599334845869 * fTemp45)) + (0.20432599334845877 * fTemp47)) + (0.20432599334845863 * fTemp49)) + (4.0101337658685596e-18 * fTemp52)) + (8.0202675317371177e-18 * fTemp53)) + (8.0202675317371192e-18 * fTemp54))))); + fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph16 = FAUSTFLOAT(fRec17[0]); + output16[i] = FAUSTFLOAT(fTemp91); + double fTemp92 = (fRec1[0] * ((((0.022574955908289243 * ((fConst284 * fTemp7) + (fConst286 * fTemp16))) + (0.021093750000000001 * ((((fConst287 * fTemp21) + (fConst288 * fTemp22)) + (fConst291 * fTemp26)) + (fConst292 * fTemp27)))) + (fConst282 * ((((((((((((((((((fConst293 * fTemp9) + (fConst294 * fTemp18)) + (fConst295 * fTemp19)) + (fConst296 * fTemp20)) + (fConst297 * fTemp24)) + (fConst298 * fTemp25)) + (fConst299 * fTemp29)) + (fConst299 * fTemp30)) + (fConst300 * fTemp35)) + (fConst301 * fTemp38)) + (fConst302 * fTemp40)) + (fConst303 * fTemp41)) + (fConst305 * fTemp43)) + (fConst306 * fTemp46)) + (fConst307 * fTemp48)) + (fConst308 * fTemp49)) + (fConst310 * fTemp51)) + (fConst310 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst311 * fTemp32) + (fConst312 * fTemp33)) + (fConst313 * fTemp36)) + (fConst314 * fTemp37)) + (fConst315 * fTemp39)) + (fConst316 * fTemp42)) + (fConst318 * fTemp44)) + (fConst319 * fTemp45)) + (fConst320 * fTemp47)) + (fConst321 * fTemp50)) + (fConst323 * fTemp53)) + (fConst324 * fTemp54))))); + fRec18[0] = max((fRec18[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph17 = FAUSTFLOAT(fRec18[0]); + output17[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst327 * fTemp65) + (fConst330 * fTemp37)) + (fConst331 * fTemp38)) + (fConst332 * fTemp41)) + (fConst333 * fTemp42)) + (fConst336 * fTemp45)) + (fConst337 * fTemp46)) + (fConst338 * fTemp49)) + (fConst339 * fTemp50)) + (fConst342 * fTemp52)) + (fConst342 * fTemp54))) + (((fConst346 * fTemp66) + (0.021093750000000001 * (((fConst347 * fTemp67) + (fConst350 * fTemp25)) + (fConst350 * fTemp27)))) + (fConst325 * (((((((((((((((((fConst343 * ((0.015962904407738641 * fTemp11) + (0.015962904407738645 * fTemp13))) + (fConst351 * fTemp19)) + (fConst352 * fTemp21)) + (fConst353 * fTemp24)) + (fConst354 * fTemp26)) + (fConst355 * fTemp29)) + (fConst356 * fTemp32)) + (fConst357 * fTemp35)) + (fConst358 * fTemp36)) + (fConst359 * fTemp39)) + (fConst360 * fTemp40)) + (fConst361 * fTemp43)) + (fConst362 * fTemp44)) + (fConst363 * fTemp47)) + (fConst364 * fTemp48)) + (fConst365 * fTemp51)) + (fConst366 * fTemp53)))))); + fRec19[0] = max((fRec19[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph18 = FAUSTFLOAT(fRec19[0]); + output18[i] = FAUSTFLOAT(fTemp93); + double fTemp94 = (fRec1[0] * ((((0.022574955908289243 * ((fConst369 * fTemp9) + (fConst371 * fTemp18))) + (0.021093750000000001 * ((((fConst374 * fTemp21) + (fConst375 * fTemp22)) + (fConst378 * fTemp26)) + (fConst379 * fTemp27)))) + (fConst367 * ((((((((((((((((((fConst380 * fTemp7) + (fConst381 * fTemp16)) + (fConst382 * fTemp19)) + (fConst383 * fTemp20)) + (fConst384 * fTemp24)) + (fConst385 * fTemp25)) + (fConst386 * fTemp29)) + (fConst386 * fTemp30)) + (fConst388 * fTemp35)) + (fConst389 * fTemp36)) + (fConst390 * fTemp37)) + (fConst391 * fTemp38)) + (fConst393 * fTemp43)) + (fConst394 * fTemp44)) + (fConst395 * fTemp45)) + (fConst396 * fTemp46)) + (fConst398 * fTemp51)) + (fConst398 * fTemp52)))) + (0.02017333553791887 * ((((((((fConst400 * fTemp42) + (((((fConst401 * fTemp32) + (fConst402 * fTemp33)) + (fConst403 * fTemp39)) + (fConst404 * fTemp40)) + (fConst405 * fTemp41))) + (fConst407 * fTemp47)) + (fConst408 * fTemp48)) + (fConst409 * fTemp49)) + (fConst410 * fTemp50)) + (fConst412 * fTemp53)) + (fConst413 * fTemp54))))); + fRec20[0] = max((fRec20[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph19 = FAUSTFLOAT(fRec20[0]); + output19[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = (fRec1[0] * ((((((0.014285714285714285 * fTemp74) + (0.038095238095238099 * fTemp72)) + (0.025396825396825397 * fTemp75)) + (0.0042514054232804339 * fTemp76)) + (0.0142547123015874 * fTemp73)) - ((0.027513227513227514 * fTemp71) + (0.024609375000000006 * fTemp28)))); + fRec21[0] = max((fRec21[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph20 = FAUSTFLOAT(fRec21[0]); + output20[i] = FAUSTFLOAT(fTemp95); + double fTemp96 = (fRec1[0] * ((fConst367 * ((((((((((((((((((fConst380 * fTemp6) + (fConst381 * fTemp15)) + (fConst383 * fTemp19)) + (fConst414 * fTemp22)) + (fConst385 * fTemp24)) + (fConst415 * fTemp27)) + (fConst416 * fTemp29)) + (fConst417 * fTemp33)) + (fConst389 * fTemp35)) + (fConst418 * fTemp36)) + (fConst419 * fTemp41)) + (fConst420 * fTemp42)) + (fConst394 * fTemp43)) + (fConst421 * fTemp44)) + (fConst422 * fTemp49)) + (fConst423 * fTemp50)) + (fConst424 * fTemp51)) + (fConst425 * fTemp54))) + (((0.022574955908289243 * ((fConst369 * fTemp8) + (fConst371 * fTemp17))) + (0.021093750000000001 * ((((fConst374 * fTemp20) + (fConst375 * fTemp21)) + (fConst378 * fTemp25)) + (fConst379 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst401 * fTemp30) + (fConst402 * fTemp32)) + (fConst426 * fTemp37)) + (fConst427 * fTemp38)) + (fConst404 * fTemp39)) + (fConst428 * fTemp40)) + (fConst429 * fTemp45)) + (fConst430 * fTemp46)) + (fConst408 * fTemp47)) + (fConst431 * fTemp48)) + (fConst412 * fTemp52)) + (fConst413 * fTemp53)))))); + fRec22[0] = max((fRec22[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp96)))))); + fVbargraph21 = FAUSTFLOAT(fRec22[0]); + output21[i] = FAUSTFLOAT(fTemp96); + double fTemp97 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst432 * fTemp31) + (fConst433 * fTemp33)) + (fConst434 * fTemp36)) + (fConst434 * fTemp37)) + (fConst435 * fTemp40)) + (fConst436 * fTemp41)) + (fConst437 * fTemp44)) + (fConst437 * fTemp45)) + (fConst438 * fTemp48)) + (fConst439 * fTemp49)) + (fConst440 * fTemp51)) + (fConst440 * fTemp52)) + (fConst441 * fTemp54))) + ((((fConst442 * fTemp79) + (0.022574955908289243 * (((((fConst443 * fTemp80) + (fConst444 * fTemp12)) + (fConst445 * fTemp14)) + (fConst447 * fTemp16)) + (fConst447 * fTemp18)))) + (0.021093750000000001 * ((((fConst448 * fTemp20) + (fConst449 * fTemp22)) + (fConst450 * fTemp25)) + (fConst451 * fTemp27)))) + (fConst325 * (((((((((((((((((((((fConst452 * fTemp81) + (fConst453 * fTemp6)) + (fConst453 * fTemp8)) + (fConst454 * fTemp11)) + (fConst455 * fTemp13)) + (fConst456 * fTemp15)) + (fConst456 * fTemp17)) + (fConst457 * fTemp19)) + (fConst458 * fTemp21)) + (fConst459 * fTemp24)) + (fConst460 * fTemp26)) + (fConst461 * fTemp32)) + (fConst462 * fTemp35)) + (fConst462 * fTemp38)) + (fConst463 * fTemp39)) + (fConst464 * fTemp42)) + (fConst465 * fTemp43)) + (fConst465 * fTemp46)) + (fConst466 * fTemp47)) + (fConst467 * fTemp50)) + (fConst468 * fTemp53)))))); + fRec23[0] = max((fRec23[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp97)))))); + fVbargraph22 = FAUSTFLOAT(fRec23[0]); + output22[i] = FAUSTFLOAT(fTemp97); + double fTemp98 = (fRec1[0] * ((0.02017333553791887 * ((((((((((((fConst469 * fTemp29) + (fConst470 * fTemp33)) + (fConst471 * fTemp36)) + (fConst472 * fTemp38)) + (fConst473 * fTemp39)) + (fConst474 * fTemp41)) + (fConst475 * fTemp44)) + (fConst476 * fTemp46)) + (fConst477 * fTemp47)) + (fConst478 * fTemp49)) + (fConst479 * fTemp51)) + (fConst480 * fTemp54))) + (((0.022574955908289243 * ((fConst284 * fTemp8) + (fConst286 * fTemp17))) + (0.021093750000000001 * ((((fConst481 * fTemp19) + (fConst482 * fTemp22)) + (fConst483 * fTemp24)) + (fConst484 * fTemp27)))) + (fConst282 * ((((((((((((((((((fConst293 * fTemp6) + (fConst294 * fTemp15)) + (fConst295 * fTemp20)) + (fConst485 * fTemp21)) + (fConst297 * fTemp25)) + (fConst486 * fTemp26)) + (fConst487 * fTemp30)) + (fConst488 * fTemp32)) + (fConst489 * fTemp35)) + (fConst490 * fTemp37)) + (fConst491 * fTemp40)) + (fConst492 * fTemp42)) + (fConst493 * fTemp43)) + (fConst494 * fTemp45)) + (fConst495 * fTemp48)) + (fConst496 * fTemp50)) + (fConst497 * fTemp52)) + (fConst498 * fTemp53)))))); + fRec24[0] = max((fRec24[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp98)))))); + fVbargraph23 = FAUSTFLOAT(fRec24[0]); + output23[i] = FAUSTFLOAT(fTemp98); + double fTemp99 = (fRec1[0] * ((((0.022574955908289243 * ((((fConst499 * fTemp11) + (fConst500 * fTemp12)) + (fConst500 * fTemp13)) + (fConst500 * fTemp14))) + (0.021093750000000001 * ((((((((fConst501 * fTemp19) + (fConst502 * fTemp20)) + (fConst502 * fTemp21)) + (fConst502 * fTemp22)) + (fConst501 * fTemp24)) + (fConst502 * fTemp25)) + (fConst502 * fTemp26)) + (fConst502 * fTemp27)))) + (fConst275 * (((((((((((((((((((((((((0.16210987902026472 * fTemp74) + (0.072048835120117685 * fTemp6)) + (0.072048835120117685 * fTemp7)) + (0.072048835120117685 * fTemp8)) + (0.072048835120117685 * fTemp9)) + (0.072048835120117685 * fTemp15)) + (0.072048835120117685 * fTemp16)) + (0.072048835120117685 * fTemp17)) + (0.072048835120117685 * fTemp18)) + (0.059595081393300019 * fTemp35)) + (0.059595081393300449 * fTemp36)) + (0.059595081393300539 * fTemp37)) + (0.059595081393300019 * fTemp38)) + (0.059595081393300352 * fTemp39)) + (0.059595081393300338 * fTemp40)) + (0.059595081393300636 * fTemp41)) + (0.059595081393299554 * fTemp42)) + (0.059595081393300019 * fTemp43)) + (0.059595081393300449 * fTemp44)) + (0.059595081393300539 * fTemp45)) + (0.059595081393300019 * fTemp46)) + (0.059595081393300352 * fTemp47)) + (0.059595081393300338 * fTemp48)) + (0.059595081393300636 * fTemp49)) + (0.059595081393299554 * fTemp50)))) + (fConst503 * fTemp73))); + fRec25[0] = max((fRec25[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp99)))))); + fVbargraph24 = FAUSTFLOAT(fRec25[0]); + output24[i] = FAUSTFLOAT(fTemp99); + double fTemp100 = (fRec1[0] * (((((fConst505 * fTemp4) + (0.022574955908289243 * ((((fConst506 * fTemp9) + (fConst507 * fTemp11)) + (fConst508 * fTemp12)) + (fConst506 * fTemp18)))) + (0.021093750000000001 * ((((fConst509 * fTemp19) + (fConst510 * fTemp20)) + (fConst509 * fTemp24)) + (fConst510 * fTemp25)))) + (0.02017333553791887 * (((((((((((fConst511 * fTemp31) + (fConst512 * fTemp36)) + (fConst513 * fTemp37)) + (fConst514 * fTemp39)) + (fConst515 * fTemp42)) + (fConst512 * fTemp44)) + (fConst513 * fTemp45)) + (fConst514 * fTemp47)) + (fConst515 * fTemp50)) + (fConst511 * fTemp51)) + (fConst511 * fTemp52)))) + (fConst504 * (((((((((((((((((((((0.32421975804052944 * fTemp2) + (0.10189243978005341 * fTemp7)) + (0.40756975912021298 * fTemp13)) + (0.40756975912021387 * fTemp14)) + (0.10189243978005341 * fTemp16)) + (0.13819765978853399 * fTemp21)) + (0.13819765978853429 * fTemp22)) + (0.13819765978853399 * fTemp26)) + (0.13819765978853429 * fTemp27)) + (0.0051338837488900469 * fTemp32)) + (0.0051338837488900581 * fTemp33)) + (0.40557681616231633 * fTemp35)) + (0.40557681616231639 * fTemp38)) + (0.015401651246670513 * fTemp40)) + (0.015401651246669784 * fTemp41)) + (0.40557681616231633 * fTemp43)) + (0.40557681616231639 * fTemp46)) + (0.015401651246670513 * fTemp48)) + (0.015401651246669784 * fTemp49)) + (0.0051338837488900469 * fTemp53)) + (0.0051338837488900581 * fTemp54))))); + fRec26[0] = max((fRec26[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp100)))))); + fVbargraph25 = FAUSTFLOAT(fRec26[0]); + output25[i] = FAUSTFLOAT(fTemp100); + double fTemp101 = (fRec1[0] * ((0.02017333553791887 * ((((((((((fConst518 * fTemp29) + (fConst519 * fTemp36)) + (fConst520 * fTemp38)) + (fConst521 * fTemp40)) + (fConst522 * fTemp42)) + (fConst525 * fTemp44)) + (fConst526 * fTemp46)) + (fConst527 * fTemp48)) + (fConst528 * fTemp50)) + (fConst531 * fTemp51))) + (fConst516 * (((((((((((((((((((fConst274 * ((((2.9292718964632671e-16 * fTemp19) + (2.9292718964632676e-16 * fTemp20)) + (5.8585437929265342e-16 * fTemp21)) + (5.8585437929265352e-16 * fTemp22))) + (fConst533 * fTemp24)) + (fConst533 * fTemp25)) + (fConst534 * fTemp26)) + (fConst534 * fTemp27)) + (fConst535 * fTemp30)) + (fConst536 * fTemp32)) + (fConst537 * fTemp33)) + (fConst538 * fTemp35)) + (fConst539 * fTemp37)) + (fConst538 * fTemp39)) + (fConst540 * fTemp41)) + (fConst541 * fTemp43)) + (fConst542 * fTemp45)) + (fConst541 * fTemp47)) + (fConst543 * fTemp49)) + (fConst544 * fTemp52)) + (fConst545 * fTemp53)) + (fConst546 * fTemp54))))); + fRec27[0] = max((fRec27[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp101)))))); + fVbargraph26 = FAUSTFLOAT(fRec27[0]); + output26[i] = FAUSTFLOAT(fTemp101); + double fTemp102 = (fRec1[0] * (((((fConst550 * fTemp2) + (0.022574955908289243 * ((((fConst552 * fTemp7) + (fConst553 * fTemp13)) + (fConst554 * fTemp14)) + (fConst556 * fTemp16)))) + (0.021093750000000001 * ((((fConst557 * fTemp21) + (fConst558 * fTemp22)) + (fConst561 * fTemp26)) + (fConst562 * fTemp27)))) + (fConst547 * (((((((((((((((((((((fConst563 * fTemp9) + (fConst564 * fTemp4)) + (fConst565 * fTemp11)) + (fConst566 * fTemp12)) + (fConst567 * fTemp18)) + (fConst568 * fTemp19)) + (fConst569 * fTemp20)) + (fConst570 * fTemp24)) + (fConst571 * fTemp25)) + (fConst572 * fTemp29)) + (fConst572 * fTemp30)) + (fConst574 * fTemp35)) + (fConst575 * fTemp38)) + (fConst576 * fTemp40)) + (fConst577 * fTemp41)) + (fConst579 * fTemp43)) + (fConst580 * fTemp46)) + (fConst581 * fTemp48)) + (fConst582 * fTemp49)) + (fConst584 * fTemp51)) + (fConst584 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst585 * fTemp32) + (fConst586 * fTemp33)) + (fConst588 * fTemp36)) + (fConst589 * fTemp37)) + (fConst590 * fTemp39)) + (fConst591 * fTemp42)) + (fConst593 * fTemp44)) + (fConst594 * fTemp45)) + (fConst595 * fTemp47)) + (fConst596 * fTemp50)) + (fConst598 * fTemp53)) + (fConst599 * fTemp54))))); + fRec28[0] = max((fRec28[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp102)))))); + fVbargraph27 = FAUSTFLOAT(fRec28[0]); + output27[i] = FAUSTFLOAT(fTemp102); + double fTemp103 = (fRec1[0] * ((0.02017333553791887 * (((((((((((fConst602 * fTemp65) + (fConst605 * fTemp37)) + (fConst606 * fTemp38)) + (fConst607 * fTemp41)) + (fConst608 * fTemp42)) + (fConst611 * fTemp45)) + (fConst612 * fTemp46)) + (fConst613 * fTemp49)) + (fConst614 * fTemp50)) + (fConst617 * fTemp52)) + (fConst617 * fTemp54))) + ((0.021093750000000001 * (((fConst618 * fTemp67) + (fConst621 * fTemp25)) + (fConst621 * fTemp27))) + (fConst600 * (((((((((((((((fConst21 * ((1.0598124096115483e-16 * fTemp19) + (1.0598124096115484e-16 * fTemp21))) + (fConst622 * fTemp24)) + (fConst623 * fTemp26)) + (fConst624 * fTemp29)) + (fConst625 * fTemp32)) + (fConst626 * fTemp35)) + (fConst627 * fTemp36)) + (fConst628 * fTemp39)) + (fConst629 * fTemp40)) + (fConst630 * fTemp43)) + (fConst631 * fTemp44)) + (fConst632 * fTemp47)) + (fConst633 * fTemp48)) + (fConst634 * fTemp51)) + (fConst635 * fTemp53)))))); + fRec29[0] = max((fRec29[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp103)))))); + fVbargraph28 = FAUSTFLOAT(fRec29[0]); + output28[i] = FAUSTFLOAT(fTemp103); + double fTemp104 = (fRec1[0] * (((((fConst639 * fTemp4) + (0.022574955908289243 * ((((fConst641 * fTemp9) + (fConst642 * fTemp13)) + (fConst643 * fTemp14)) + (fConst645 * fTemp18)))) + (0.021093750000000001 * ((((fConst648 * fTemp21) + (fConst649 * fTemp22)) + (fConst652 * fTemp26)) + (fConst653 * fTemp27)))) + (fConst636 * (((((((((((((((((((((fConst654 * fTemp2) + (fConst655 * fTemp7)) + (fConst656 * fTemp11)) + (fConst657 * fTemp12)) + (fConst658 * fTemp16)) + (fConst659 * fTemp19)) + (fConst660 * fTemp20)) + (fConst661 * fTemp24)) + (fConst662 * fTemp25)) + (fConst663 * fTemp29)) + (fConst663 * fTemp30)) + (fConst665 * fTemp35)) + (fConst666 * fTemp36)) + (fConst667 * fTemp37)) + (fConst668 * fTemp38)) + (fConst670 * fTemp43)) + (fConst671 * fTemp44)) + (fConst672 * fTemp45)) + (fConst673 * fTemp46)) + (fConst675 * fTemp51)) + (fConst675 * fTemp52)))) + (0.02017333553791887 * ((((((((((((fConst677 * fTemp32) + (fConst678 * fTemp33)) + (fConst680 * fTemp39)) + (fConst681 * fTemp40)) + (fConst682 * fTemp41)) + (fConst683 * fTemp42)) + (fConst685 * fTemp47)) + (fConst686 * fTemp48)) + (fConst687 * fTemp49)) + (fConst688 * fTemp50)) + (fConst690 * fTemp53)) + (fConst691 * fTemp54))))); + fRec30[0] = max((fRec30[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp104)))))); + fVbargraph29 = FAUSTFLOAT(fRec30[0]); + output29[i] = FAUSTFLOAT(fTemp104); + double fTemp105 = (fRec1[0] * (((0.042115870353719366 * fTemp57) + (0.02309096671075838 * fTemp61)) - (((0.028125949882539081 * fTemp58) + (0.006731909351411762 * fTemp59)) + (0.0007502480158728946 * fTemp62)))); + fRec31[0] = max((fRec31[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp105)))))); + fVbargraph30 = FAUSTFLOAT(fRec31[0]); + output30[i] = FAUSTFLOAT(fTemp105); + double fTemp106 = (fRec1[0] * ((fConst636 * (((((((((((((((((((((fConst654 * fTemp1) + (fConst655 * fTemp6)) + (fConst657 * fTemp11)) + (fConst692 * fTemp14)) + (fConst658 * fTemp15)) + (fConst660 * fTemp19)) + (fConst693 * fTemp22)) + (fConst662 * fTemp24)) + (fConst694 * fTemp27)) + (fConst695 * fTemp29)) + (fConst695 * fTemp33)) + (fConst696 * fTemp35)) + (fConst697 * fTemp36)) + (fConst698 * fTemp41)) + (fConst699 * fTemp42)) + (fConst700 * fTemp43)) + (fConst701 * fTemp44)) + (fConst702 * fTemp49)) + (fConst703 * fTemp50)) + (fConst704 * fTemp51)) + (fConst705 * fTemp54))) + ((((fConst639 * fTemp3) + (0.022574955908289243 * ((((fConst641 * fTemp8) + (fConst642 * fTemp12)) + (fConst643 * fTemp13)) + (fConst645 * fTemp17)))) + (0.021093750000000001 * ((((fConst648 * fTemp20) + (fConst649 * fTemp21)) + (fConst652 * fTemp25)) + (fConst653 * fTemp26)))) + (0.02017333553791887 * ((((((((((((fConst677 * fTemp30) + (fConst678 * fTemp32)) + (fConst706 * fTemp37)) + (fConst707 * fTemp38)) + (fConst681 * fTemp39)) + (fConst708 * fTemp40)) + (fConst709 * fTemp45)) + (fConst710 * fTemp46)) + (fConst686 * fTemp47)) + (fConst711 * fTemp48)) + (fConst690 * fTemp52)) + (fConst691 * fTemp53)))))); + fRec32[0] = max((fRec32[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp106)))))); + fVbargraph31 = FAUSTFLOAT(fRec32[0]); + output31[i] = FAUSTFLOAT(fTemp106); + double fTemp107 = (fRec1[0] * ((0.02017333553791887 * (((((((((((((fConst712 * fTemp31) + (fConst713 * fTemp33)) + (fConst714 * fTemp36)) + (fConst715 * fTemp37)) + (fConst716 * fTemp40)) + (fConst717 * fTemp41)) + (fConst718 * fTemp44)) + (fConst719 * fTemp45)) + (fConst720 * fTemp48)) + (fConst721 * fTemp49)) + (fConst722 * fTemp51)) + (fConst722 * fTemp52)) + (fConst723 * fTemp54))) + (((0.022574955908289243 * (((fConst724 * fTemp80) + (fConst726 * fTemp16)) + (fConst726 * fTemp18))) + (0.021093750000000001 * ((((fConst727 * fTemp20) + (fConst728 * fTemp22)) + (fConst729 * fTemp25)) + (fConst730 * fTemp27)))) + (fConst600 * (((((((((((((((((fConst731 * fTemp88) + (fConst732 * fTemp15)) + (fConst732 * fTemp17)) + (fConst733 * fTemp19)) + (fConst734 * fTemp21)) + (fConst735 * fTemp24)) + (fConst736 * fTemp26)) + (fConst737 * fTemp32)) + (fConst738 * fTemp35)) + (fConst738 * fTemp38)) + (fConst739 * fTemp39)) + (fConst740 * fTemp42)) + (fConst741 * fTemp43)) + (fConst741 * fTemp46)) + (fConst742 * fTemp47)) + (fConst743 * fTemp50)) + (fConst744 * fTemp53)))))); + fRec33[0] = max((fRec33[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp107)))))); + fVbargraph32 = FAUSTFLOAT(fRec33[0]); + output32[i] = FAUSTFLOAT(fTemp107); + double fTemp108 = (fRec1[0] * ((0.02017333553791887 * ((((((((((((fConst745 * fTemp29) + (fConst746 * fTemp33)) + (fConst747 * fTemp36)) + (fConst748 * fTemp38)) + (fConst749 * fTemp39)) + (fConst750 * fTemp41)) + (fConst751 * fTemp44)) + (fConst752 * fTemp46)) + (fConst753 * fTemp47)) + (fConst754 * fTemp49)) + (fConst755 * fTemp51)) + (fConst756 * fTemp54))) + ((((fConst550 * fTemp3) + (0.022574955908289243 * ((((fConst552 * fTemp8) + (fConst757 * fTemp11)) + (fConst758 * fTemp14)) + (fConst556 * fTemp17)))) + (0.021093750000000001 * ((((fConst759 * fTemp19) + (fConst760 * fTemp22)) + (fConst761 * fTemp24)) + (fConst762 * fTemp27)))) + (fConst547 * (((((((((((((((((((((fConst563 * fTemp6) + (fConst564 * fTemp1)) + (fConst565 * fTemp12)) + (fConst763 * fTemp13)) + (fConst567 * fTemp15)) + (fConst568 * fTemp20)) + (fConst764 * fTemp21)) + (fConst570 * fTemp25)) + (fConst765 * fTemp26)) + (fConst766 * fTemp30)) + (fConst767 * fTemp32)) + (fConst768 * fTemp35)) + (fConst769 * fTemp37)) + (fConst770 * fTemp40)) + (fConst771 * fTemp42)) + (fConst772 * fTemp43)) + (fConst773 * fTemp45)) + (fConst774 * fTemp48)) + (fConst775 * fTemp50)) + (fConst776 * fTemp52)) + (fConst777 * fTemp53)))))); + fRec34[0] = max((fRec34[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp108)))))); + fVbargraph33 = FAUSTFLOAT(fRec34[0]); + output33[i] = FAUSTFLOAT(fTemp108); + double fTemp109 = (fRec1[0] * (((0.021093750000000001 * ((((((((fConst778 * fTemp19) + (fConst779 * fTemp20)) + (fConst779 * fTemp21)) + (fConst779 * fTemp22)) + (fConst781 * fTemp24)) + (fConst782 * fTemp25)) + (fConst782 * fTemp26)) + (fConst782 * fTemp27))) + (fConst516 * (((((((((((((((((((((fConst783 * fTemp10) + (fConst784 * fTemp15)) + (fConst784 * fTemp16)) + (fConst784 * fTemp17)) + (fConst784 * fTemp18)) + (fConst785 * fTemp35)) + (fConst786 * fTemp36)) + (fConst787 * fTemp37)) + (fConst785 * fTemp38)) + (fConst788 * fTemp39)) + (fConst789 * fTemp40)) + (fConst790 * fTemp41)) + (fConst791 * fTemp42)) + (fConst792 * fTemp43)) + (fConst793 * fTemp44)) + (fConst794 * fTemp45)) + (fConst792 * fTemp46)) + (fConst795 * fTemp47)) + (fConst796 * fTemp48)) + (fConst797 * fTemp49)) + (fConst798 * fTemp50)))) + (0.02017333553791887 * (((((fConst799 * fTemp34) + (fConst800 * fTemp51)) + (fConst800 * fTemp52)) + (fConst800 * fTemp53)) + (fConst800 * fTemp54))))); + fRec35[0] = max((fRec35[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp109)))))); + fVbargraph34 = FAUSTFLOAT(fRec35[0]); + output34[i] = FAUSTFLOAT(fTemp109); + double fTemp110 = (fRec1[0] * ((0.02017333553791887 * ((((((((((((fConst801 * fTemp29) + (fConst802 * fTemp33)) + (fConst803 * fTemp35)) + (fConst804 * fTemp37)) + (fConst804 * fTemp40)) + (fConst805 * fTemp42)) + (fConst803 * fTemp43)) + (fConst804 * fTemp45)) + (fConst804 * fTemp48)) + (fConst805 * fTemp50)) + (fConst801 * fTemp51)) + (fConst802 * fTemp54))) + ((((fConst505 * fTemp3) + (0.022574955908289243 * ((((fConst506 * fTemp8) + (fConst806 * fTemp11)) + (fConst807 * fTemp14)) + (fConst506 * fTemp17)))) + (0.021093750000000001 * ((((fConst808 * fTemp19) + (fConst809 * fTemp22)) + (fConst808 * fTemp24)) + (fConst809 * fTemp27)))) + (fConst504 * (((((((((((((((((((((0.32421975804052944 * fTemp1) + (0.10189243978005341 * fTemp6)) + (0.4075697591202132 * fTemp12)) + (0.40756975912021387 * fTemp13)) + (0.10189243978005341 * fTemp15)) + (0.13819765978853404 * fTemp20)) + (0.13819765978853429 * fTemp21)) + (0.13819765978853404 * fTemp25)) + (0.13819765978853429 * fTemp26)) + (0.0051338837488900495 * fTemp30)) + (0.0051338837488900581 * fTemp32)) + (0.40557681616231639 * fTemp36)) + (0.015401651246671252 * fTemp38)) + (0.01540165124667044 * fTemp39)) + (0.40557681616231639 * fTemp41)) + (0.40557681616231639 * fTemp44)) + (0.015401651246671252 * fTemp46)) + (0.01540165124667044 * fTemp47)) + (0.40557681616231639 * fTemp49)) + (0.0051338837488900495 * fTemp52)) + (0.0051338837488900581 * fTemp53)))))); + fRec36[0] = max((fRec36[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp110)))))); + fVbargraph35 = FAUSTFLOAT(fRec36[0]); + output35[i] = FAUSTFLOAT(fTemp110); + fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + fRec16[1] = fRec16[0]; + fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; + fRec21[1] = fRec21[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec24[1] = fRec24[0]; + fRec25[1] = fRec25[0]; + fRec26[1] = fRec26[0]; + fRec27[1] = fRec27[0]; + fRec28[1] = fRec28[0]; + fRec29[1] = fRec29[0]; + fRec30[1] = fRec30[0]; + fRec31[1] = fRec31[0]; + fRec32[1] = fRec32[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; + fRec36[1] = fRec36[0]; } @@ -1369,7 +3444,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1601,7 +3675,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1664,7 +3738,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1693,11 +3767,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAEncoder1.cpp b/source/HOAUGens/HOAEncoder1.cpp index 9eff659cf2..f4f628b6ca 100644 --- a/source/HOAUGens/HOAEncoder1.cpp +++ b/source/HOAUGens/HOAEncoder1.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder1" version: "1.0" -Code generated with Faust 2.5.12 (https://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -31,9 +31,9 @@ Compilation options: cpp, -double -ftz 0 // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -639,26 +639,29 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; + FAUSTFLOAT fHslider0; + double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec1[2]; + double fRec2[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; FAUSTFLOAT fHslider2; + double fRec4[2]; FAUSTFLOAT fHslider3; + double fRec5[2]; double fConst3; double fConst4; - double fRec5[2]; - double fRec4[2]; + double fRec8[2]; + double fRec7[2]; + double fRec6[2]; double fRec3[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec6[2]; + double fRec9[2]; FAUSTFLOAT fVbargraph2; - double fRec7[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph3; public: @@ -763,10 +766,10 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider0 = FAUSTFLOAT(2.0); - fHslider1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(2.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -778,11 +781,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec0[l1] = 0.0; + fRec2[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec5[l2] = 0.0; + fRec0[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -790,19 +793,31 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec3[l4] = 0.0; + fRec5[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec8[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; + + } + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec3[l8] = 0.0; + + } + for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + fRec9[l9] = 0.0; + + } + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec10[l10] = 0.0; } @@ -830,22 +845,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder1"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider1, "0+1", ""); - ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider0, "0+2", ""); - ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "0+1", ""); + ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -855,25 +870,25 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff8dc1b5250", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25edca0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff8dc1c6e30", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2606310", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff8dc1cbb50", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x260bc40", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7ff8dc1d0c60", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2611a10", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -887,55 +902,56 @@ class mydsp : public dsp { FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; - double fSlow0 = double(fCheckbox0); - double fSlow1 = (1.0 - fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fHslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow7 = double(fHslider2); - double fSlow8 = sin(double(fHslider3)); - double fSlow9 = pow((1.0 - mydsp_faustpower2_f(fSlow8)), 0.5); - double fSlow10 = (fConst2 * (sin(fSlow7) * fSlow9)); - double fSlow11 = ((fConst4 / fSlow4) + 1.0); - double fSlow12 = (fConst3 / (fSlow4 * fSlow11)); - double fSlow13 = (1.0 / ((fConst4 / fSlow2) + 1.0)); - double fSlow14 = ((fSlow3 * fSlow11) / fSlow4); - double fSlow15 = (fConst3 / fSlow2); - double fSlow16 = (1.7320508075688772 * fSlow8); - double fSlow17 = (fConst2 * (cos(fSlow7) * fSlow9)); + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); + double fSlow1 = double(fCheckbox0); + double fSlow2 = (1.0 - fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (0.0010000000000000009 * double(fHslider1)); + double fSlow6 = (0.0010000000000000009 * double(fHslider2)); + double fSlow7 = (0.0010000000000000009 * double(fHslider3)); + double fSlow8 = (1.0 / ((fConst4 / fSlow3) + 1.0)); + double fSlow9 = (fConst3 / fSlow3); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); - double fTemp0 = (double(input0[i]) * fRec1[0]); - double fTemp1 = (fSlow5 * fTemp0); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); + double fTemp0 = double(input0[i]); + double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow13 * ((fSlow14 * fTemp0) - (fSlow15 * fRec5[0]))); - fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = ((fSlow12 * (fRec3[0] - fRec4[0])) + (fRec4[0] + (fSlow1 * fTemp0))); - double fTemp3 = (fSlow10 * fTemp2); - fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); - fVbargraph1 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = (fSlow16 * fTemp2); - fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph2 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow17 * fTemp2); - fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph3 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp5); + fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); + double fTemp2 = sin(fRec4[0]); + double fTemp3 = pow((1.0 - mydsp_faustpower2_f(fTemp2)), 0.5); + fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); + double fTemp4 = ((fConst4 / fRec2[0]) + 1.0); + fRec8[0] = (fRec8[1] + fRec7[1]); + fRec7[0] = (fSlow8 * ((fSlow4 * (((fRec1[0] * fTemp4) * fTemp0) / fRec2[0])) - (fSlow9 * fRec8[0]))); + fRec6[0] = (fRec7[0] + fRec6[1]); + double fTemp5 = ((fConst3 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp4))) + (fRec7[0] + (fSlow2 * (fRec1[0] * fTemp0)))); + double fTemp6 = (fConst2 * ((fTemp3 * sin(fRec5[0])) * fTemp5)); + fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph1 = FAUSTFLOAT(fRec3[0]); + output1[i] = FAUSTFLOAT(fTemp6); + double fTemp7 = (1.7320508075688772 * (fTemp2 * fTemp5)); + fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); + fVbargraph2 = FAUSTFLOAT(fRec9[0]); + output2[i] = FAUSTFLOAT(fTemp7); + double fTemp8 = (fConst2 * ((fTemp3 * cos(fRec5[0])) * fTemp5)); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); + fVbargraph3 = FAUSTFLOAT(fRec10[0]); + output3[i] = FAUSTFLOAT(fTemp8); fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; + fRec6[1] = fRec6[0]; + fRec3[1] = fRec3[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; } @@ -1175,7 +1191,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1238,7 +1254,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1267,9 +1283,9 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } #ifdef SUPERNOVA diff --git a/source/HOAUGens/HOAEncoder2.cpp b/source/HOAUGens/HOAEncoder2.cpp index 67949cf1e1..353c909fc1 100644 --- a/source/HOAUGens/HOAEncoder2.cpp +++ b/source/HOAUGens/HOAEncoder2.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder2" version: "1.0" -Code generated with Faust 2.5.12 (https://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -31,9 +31,9 @@ Compilation options: cpp, -double -ftz 0 // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -639,50 +639,53 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; + FAUSTFLOAT fHslider0; + double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec1[2]; + double fRec2[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; double fConst3; double fConst4; FAUSTFLOAT fHslider2; + double fRec4[2]; FAUSTFLOAT fHslider3; + double fRec5[2]; double fConst5; double fConst6; - double fRec5[2]; - double fRec4[2]; + double fRec8[2]; + double fRec7[2]; + double fRec6[2]; double fRec3[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec6[2]; + double fRec9[2]; FAUSTFLOAT fVbargraph2; - double fRec7[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph3; double fConst7; double fConst8; double fConst9; double fConst10; - double fRec10[2]; - double fRec11[2]; - double fRec9[2]; + double fRec14[2]; + double fRec15[2]; + double fRec13[2]; double fRec12[2]; double fVec0[2]; - double fRec13[2]; - double fRec8[2]; + double fRec16[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph4; double fConst11; - double fRec14[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph5; - double fRec15[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph6; - double fRec16[2]; + double fRec19[2]; FAUSTFLOAT fVbargraph7; double fConst12; - double fRec17[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph8; public: @@ -809,16 +812,16 @@ class mydsp : public dsp { fConst8 = (6.3830764864229232 * fConst7); fConst9 = (510.0 / fConst0); fConst10 = (1020.0 / fConst0); - fConst11 = (4.7873073648171927 * (fConst3 * sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))))); + fConst11 = (4.7873073648171927 * (sqrt((5.0 * (double(tgamma(2.0)) / double(tgamma(4.0))))) * fConst3)); fConst12 = (3.1915382432114616 * fConst7); } virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider0 = FAUSTFLOAT(2.0); - fHslider1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(2.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -830,11 +833,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec0[l1] = 0.0; + fRec2[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec5[l2] = 0.0; + fRec0[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -842,39 +845,39 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec3[l4] = 0.0; + fRec5[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec8[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec10[l8] = 0.0; + fRec3[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec11[l9] = 0.0; + fRec9[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec9[l10] = 0.0; + fRec10[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec12[l11] = 0.0; + fRec14[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fVec0[l12] = 0.0; + fRec15[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -882,25 +885,37 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec8[l14] = 0.0; + fRec12[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec14[l15] = 0.0; + fVec0[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec15[l16] = 0.0; + fRec16[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec16[l17] = 0.0; + fRec11[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { fRec17[l18] = 0.0; } + for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + fRec18[l19] = 0.0; + + } + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fRec19[l20] = 0.0; + + } + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec20[l21] = 0.0; + + } } @@ -926,22 +941,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder2"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider1, "0+1", ""); - ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider0, "0+2", ""); - ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "0+1", ""); + ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -951,47 +966,47 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a8440300", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3453b30", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a8452f80", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x346d420", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a8457ca0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3472d50", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a845cf90", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3478d30", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a8471340", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3490100", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a8477b20", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3497c10", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a847ce20", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x349dc70", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a8481e20", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x34a3770", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fc3a8487cc0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x34aa580", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1010,116 +1025,109 @@ class mydsp : public dsp { FAUSTFLOAT* output6 = outputs[6]; FAUSTFLOAT* output7 = outputs[7]; FAUSTFLOAT* output8 = outputs[8]; - double fSlow0 = double(fCheckbox0); - double fSlow1 = (1.0 - fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fHslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow7 = double(fHslider2); - double fSlow8 = sin(fSlow7); - double fSlow9 = sin(double(fHslider3)); - double fSlow10 = mydsp_faustpower2_f(fSlow9); - double fSlow11 = (1.0 - fSlow10); - double fSlow12 = pow(fSlow11, 0.5); - double fSlow13 = (fConst4 * (fSlow8 * fSlow12)); - double fSlow14 = (fConst6 / fSlow4); - double fSlow15 = (fSlow14 + 1.0); - double fSlow16 = (fConst5 / (fSlow4 * fSlow15)); - double fSlow17 = (fConst6 / fSlow2); - double fSlow18 = (1.0 / (fSlow17 + 1.0)); - double fSlow19 = ((fSlow3 * fSlow15) / fSlow4); - double fSlow20 = (fConst5 / fSlow2); - double fSlow21 = (1.7320508075688772 * fSlow9); - double fSlow22 = cos(fSlow7); - double fSlow23 = (fConst4 * (fSlow22 * fSlow12)); - double fSlow24 = (fConst8 * ((fSlow22 * fSlow11) * fSlow8)); - double fSlow25 = mydsp_faustpower2_f(fSlow17); - double fSlow26 = (1.0 / (((fConst9 / fSlow2) + (3.0 * fSlow25)) + 1.0)); - double fSlow27 = mydsp_faustpower2_f(fSlow14); - double fSlow28 = (((fConst9 / fSlow4) + (3.0 * fSlow27)) + 1.0); - double fSlow29 = ((fSlow3 * fSlow28) / fSlow4); - double fSlow30 = (12.0 * fSlow25); - double fSlow31 = (fSlow30 + (fConst10 / fSlow2)); - double fSlow32 = (1.0 / fSlow28); - double fSlow33 = (12.0 * fSlow27); - double fSlow34 = ((fConst10 / fSlow4) + fSlow33); - double fSlow35 = (fConst11 * ((fSlow9 * fSlow8) * fSlow12)); - double fSlow36 = (1.1180339887498949 * ((3.0 * fSlow10) + -1.0)); - double fSlow37 = (fConst11 * ((fSlow22 * fSlow9) * fSlow12)); - double fSlow38 = (fConst12 * (fSlow11 * ((2.0 * mydsp_faustpower2_f(fSlow22)) + -1.0))); + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); + double fSlow1 = double(fCheckbox0); + double fSlow2 = (1.0 - fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (0.0010000000000000009 * double(fHslider1)); + double fSlow6 = (0.0010000000000000009 * double(fHslider2)); + double fSlow7 = (0.0010000000000000009 * double(fHslider3)); + double fSlow8 = (fConst6 / fSlow3); + double fSlow9 = (1.0 / (fSlow8 + 1.0)); + double fSlow10 = (fConst5 / fSlow3); + double fSlow11 = mydsp_faustpower2_f(fSlow8); + double fSlow12 = (1.0 / (((fConst9 / fSlow3) + (3.0 * fSlow11)) + 1.0)); + double fSlow13 = (12.0 * fSlow11); + double fSlow14 = (fSlow13 + (fConst10 / fSlow3)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); - double fTemp0 = (double(input0[i]) * fRec1[0]); - double fTemp1 = (fSlow5 * fTemp0); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); + double fTemp0 = double(input0[i]); + double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow18 * ((fSlow19 * fTemp0) - (fSlow20 * fRec5[0]))); - fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = (fSlow1 * fTemp0); - double fTemp3 = ((fSlow16 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); - double fTemp4 = (fSlow13 * fTemp3); - fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph1 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow21 * fTemp3); - fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph2 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (fSlow23 * fTemp3); - fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp6); - fRec10[0] = (fRec10[1] + fRec9[1]); - fRec11[0] = (fRec11[1] + fRec10[1]); - fRec9[0] = (fSlow26 * ((fSlow29 * fTemp0) - ((fSlow31 * fRec10[0]) + (fSlow30 * fRec11[0])))); - fRec12[0] = (fRec9[0] + fRec12[1]); - double fTemp7 = (fRec12[0] - fRec9[0]); - fVec0[0] = fTemp7; - fRec13[0] = (fRec13[1] + fVec0[1]); - double fTemp8 = ((fRec9[0] + fTemp2) + (fSlow32 * ((fSlow34 * fTemp7) + (fSlow33 * fRec13[0])))); - double fTemp9 = (fSlow24 * fTemp8); - fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph4 = FAUSTFLOAT(fRec8[0]); - output4[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (fSlow35 * fTemp8); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph5 = FAUSTFLOAT(fRec14[0]); - output5[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fSlow36 * fTemp8); - fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph6 = FAUSTFLOAT(fRec15[0]); - output6[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (fSlow37 * fTemp8); - fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph7 = FAUSTFLOAT(fRec16[0]); - output7[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (fSlow38 * fTemp8); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph8 = FAUSTFLOAT(fRec17[0]); - output8[i] = FAUSTFLOAT(fTemp13); + fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); + double fTemp2 = sin(fRec4[0]); + double fTemp3 = mydsp_faustpower2_f(fTemp2); + double fTemp4 = (1.0 - fTemp3); + double fTemp5 = pow(fTemp4, 0.5); + fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); + double fTemp6 = sin(fRec5[0]); + double fTemp7 = (fConst6 / fRec2[0]); + double fTemp8 = (fTemp7 + 1.0); + fRec8[0] = (fRec8[1] + fRec7[1]); + fRec7[0] = (fSlow9 * ((fSlow4 * (((fRec1[0] * fTemp8) * fTemp0) / fRec2[0])) - (fSlow10 * fRec8[0]))); + fRec6[0] = (fRec7[0] + fRec6[1]); + double fTemp9 = (fSlow2 * (fRec1[0] * fTemp0)); + double fTemp10 = ((fConst5 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp8))) + (fRec7[0] + fTemp9)); + double fTemp11 = (fConst4 * ((fTemp5 * fTemp6) * fTemp10)); + fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph1 = FAUSTFLOAT(fRec3[0]); + output1[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (1.7320508075688772 * (fTemp2 * fTemp10)); + fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph2 = FAUSTFLOAT(fRec9[0]); + output2[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = cos(fRec5[0]); + double fTemp14 = (fConst4 * ((fTemp5 * fTemp13) * fTemp10)); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + fVbargraph3 = FAUSTFLOAT(fRec10[0]); + output3[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = mydsp_faustpower2_f(fTemp7); + double fTemp16 = (((fConst9 / fRec2[0]) + (3.0 * fTemp15)) + 1.0); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec15[0] = (fRec15[1] + fRec14[1]); + fRec13[0] = (fSlow12 * ((fSlow4 * (((fRec1[0] * fTemp16) * fTemp0) / fRec2[0])) - ((fSlow14 * fRec14[0]) + (fSlow13 * fRec15[0])))); + fRec12[0] = (fRec13[0] + fRec12[1]); + double fTemp17 = (fRec12[0] - fRec13[0]); + fVec0[0] = fTemp17; + fRec16[0] = (fRec16[1] + fVec0[1]); + double fTemp18 = ((((fTemp17 * ((fConst10 / fRec2[0]) + (12.0 * fTemp15))) + (12.0 * (fRec16[0] * fTemp15))) / fTemp16) + (fRec13[0] + fTemp9)); + double fTemp19 = (fConst8 * (((fTemp4 * fTemp6) * fTemp13) * fTemp18)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph4 = FAUSTFLOAT(fRec11[0]); + output4[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (fTemp2 * fTemp5); + double fTemp21 = (fConst11 * ((fTemp20 * fTemp6) * fTemp18)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph5 = FAUSTFLOAT(fRec17[0]); + output5[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (1.1180339887498949 * (fTemp18 * ((3.0 * fTemp3) + -1.0))); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph6 = FAUSTFLOAT(fRec18[0]); + output6[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (fConst11 * ((fTemp20 * fTemp13) * fTemp18)); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph7 = FAUSTFLOAT(fRec19[0]); + output7[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (fConst12 * ((fTemp4 * fTemp18) * ((2.0 * mydsp_faustpower2_f(fTemp13)) + -1.0))); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + fVbargraph8 = FAUSTFLOAT(fRec20[0]); + output8[i] = FAUSTFLOAT(fTemp24); fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec10[1] = fRec10[0]; - fRec11[1] = fRec11[0]; + fRec6[1] = fRec6[0]; + fRec3[1] = fRec3[0]; fRec9[1] = fRec9[0]; - fRec12[1] = fRec12[0]; - fVec0[1] = fVec0[0]; - fRec13[1] = fRec13[0]; - fRec8[1] = fRec8[0]; + fRec10[1] = fRec10[0]; fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fVec0[1] = fVec0[0]; fRec16[1] = fRec16[0]; + fRec11[1] = fRec11[0]; fRec17[1] = fRec17[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; } @@ -1359,7 +1367,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1422,7 +1430,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1451,9 +1459,9 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } #ifdef SUPERNOVA diff --git a/source/HOAUGens/HOAEncoder3.cpp b/source/HOAUGens/HOAEncoder3.cpp index 5ac98fc2c0..db96b8b04e 100644 --- a/source/HOAUGens/HOAEncoder3.cpp +++ b/source/HOAUGens/HOAEncoder3.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder3" version: "1.0" -Code generated with Faust 2.5.12 (https://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -31,9 +31,9 @@ Compilation options: cpp, -double -ftz 0 // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -639,11 +639,12 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; + FAUSTFLOAT fHslider0; + double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec1[2]; + double fRec2[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; @@ -651,17 +652,19 @@ class mydsp : public dsp { double fConst4; double fConst5; FAUSTFLOAT fHslider2; + double fRec4[2]; FAUSTFLOAT fHslider3; + double fRec5[2]; double fConst6; double fConst7; - double fRec5[2]; - double fRec4[2]; + double fRec8[2]; + double fRec7[2]; + double fRec6[2]; double fRec3[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec6[2]; + double fRec9[2]; FAUSTFLOAT fVbargraph2; - double fRec7[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph3; double fConst8; double fConst9; @@ -669,56 +672,56 @@ class mydsp : public dsp { double fConst11; double fConst12; double fConst13; - double fRec10[2]; - double fRec11[2]; - double fRec9[2]; + double fRec14[2]; + double fRec15[2]; + double fRec13[2]; double fRec12[2]; double fVec0[2]; - double fRec13[2]; - double fRec8[2]; + double fRec16[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph4; double fConst14; double fConst15; - double fRec14[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph5; - double fRec15[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph6; - double fRec16[2]; + double fRec19[2]; FAUSTFLOAT fVbargraph7; double fConst16; - double fRec17[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph8; double fConst17; double fConst18; double fConst19; double fConst20; double fConst21; - double fRec22[2]; - double fRec23[2]; - double fRec21[2]; - double fRec24[2]; - double fVec1[2]; double fRec25[2]; double fRec26[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; + double fRec24[2]; + double fRec27[2]; + double fVec1[2]; + double fRec28[2]; + double fRec29[2]; + double fRec23[2]; + double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fVbargraph9; double fConst22; double fConst23; - double fRec27[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph10; double fConst24; - double fRec28[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph11; - double fRec29[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph12; - double fRec30[2]; + double fRec33[2]; FAUSTFLOAT fVbargraph13; double fConst25; - double fRec31[2]; + double fRec34[2]; FAUSTFLOAT fVbargraph14; - double fRec32[2]; + double fRec35[2]; FAUSTFLOAT fVbargraph15; public: @@ -877,25 +880,25 @@ class mydsp : public dsp { fConst12 = (510.0 / fConst0); fConst13 = (1020.0 / fConst0); fConst14 = double(tgamma(2.0)); - fConst15 = (4.7873073648171927 * (fConst4 * sqrt((5.0 * (fConst14 / double(tgamma(4.0))))))); + fConst15 = (4.7873073648171927 * (sqrt((5.0 * (fConst14 / double(tgamma(4.0))))) * fConst4)); fConst16 = (3.1915382432114616 * fConst10); fConst17 = (6.3830764864229232 * (sqrt((7.0 * (fConst2 / double(tgamma(7.0))))) * double(tgamma(3.5)))); fConst18 = (789.54302057287055 / fConst0); fConst19 = (394.77151028643527 / fConst0); fConst20 = (625.22848971356643 / fConst0); fConst21 = (1250.4569794271329 / fConst0); - fConst22 = (fConst9 * sqrt((7.0 * (fConst14 / double(tgamma(6.0)))))); + fConst22 = (sqrt((7.0 * (fConst14 / double(tgamma(6.0))))) * fConst9); fConst23 = (31.915382432114615 * fConst22); - fConst24 = (0.70710678118654757 * (fConst4 * sqrt((7.0 * (fConst3 / fConst8))))); + fConst24 = (0.70710678118654757 * (sqrt((7.0 * (fConst3 / fConst8))) * fConst4)); fConst25 = (15.957691216057308 * fConst22); } virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider0 = FAUSTFLOAT(2.0); - fHslider1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(2.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -907,11 +910,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec0[l1] = 0.0; + fRec2[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec5[l2] = 0.0; + fRec0[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -919,39 +922,39 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec3[l4] = 0.0; + fRec5[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec8[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec10[l8] = 0.0; + fRec3[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec11[l9] = 0.0; + fRec9[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec9[l10] = 0.0; + fRec10[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec12[l11] = 0.0; + fRec14[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fVec0[l12] = 0.0; + fRec15[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -959,19 +962,19 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec8[l14] = 0.0; + fRec12[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec14[l15] = 0.0; + fVec0[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec15[l16] = 0.0; + fRec16[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec16[l17] = 0.0; + fRec11[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -979,55 +982,55 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec22[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec23[l20] = 0.0; + fRec19[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec21[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec24[l22] = 0.0; + fRec25[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fVec1[l23] = 0.0; + fRec26[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec25[l24] = 0.0; + fRec24[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + fRec27[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec20[l26] = 0.0; + fVec1[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec19[l27] = 0.0; + fRec28[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec18[l28] = 0.0; + fRec29[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec27[l29] = 0.0; + fRec23[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec28[l30] = 0.0; + fRec22[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec29[l31] = 0.0; + fRec21[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { @@ -1042,6 +1045,18 @@ class mydsp : public dsp { fRec32[l34] = 0.0; } + for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + fRec33[l35] = 0.0; + + } + for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + fRec34[l36] = 0.0; + + } + for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + fRec35[l37] = 0.0; + + } } @@ -1067,22 +1082,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder3"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider1, "0+1", ""); - ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider0, "0+2", ""); - ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "0+1", ""); + ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -1092,77 +1107,77 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee03046e20", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32b0800", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee03059f30", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32ca600", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee0305ec50", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32cff30", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee03064120", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32d6120", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee03078a30", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32edaf0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee0307f4c0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32f5900", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee030849a0", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32fbb70", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee03089b80", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3301670", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee0308fde0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x33088a0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee030aa140", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3326ad0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee030b06a0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x332e4c0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee030b6b40", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3335a20", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee030bc0c0", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x333bdc0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee030c10a0", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3341a80", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee030c6860", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3347ed0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fee030cbee0", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x334e3b0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1188,198 +1203,179 @@ class mydsp : public dsp { FAUSTFLOAT* output13 = outputs[13]; FAUSTFLOAT* output14 = outputs[14]; FAUSTFLOAT* output15 = outputs[15]; - double fSlow0 = double(fCheckbox0); - double fSlow1 = (1.0 - fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fHslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow7 = double(fHslider2); - double fSlow8 = sin(fSlow7); - double fSlow9 = sin(double(fHslider3)); - double fSlow10 = mydsp_faustpower2_f(fSlow9); - double fSlow11 = (1.0 - fSlow10); - double fSlow12 = pow(fSlow11, 0.5); - double fSlow13 = (fSlow8 * fSlow12); - double fSlow14 = (fConst5 * fSlow13); - double fSlow15 = (fConst7 / fSlow4); - double fSlow16 = (fSlow15 + 1.0); - double fSlow17 = (fConst6 / (fSlow4 * fSlow16)); - double fSlow18 = (fConst7 / fSlow2); - double fSlow19 = (1.0 / (fSlow18 + 1.0)); - double fSlow20 = ((fSlow3 * fSlow16) / fSlow4); - double fSlow21 = (fConst6 / fSlow2); - double fSlow22 = (1.7320508075688772 * fSlow9); - double fSlow23 = cos(fSlow7); - double fSlow24 = (fSlow23 * fSlow12); - double fSlow25 = (fConst5 * fSlow24); - double fSlow26 = (fConst11 * ((fSlow23 * fSlow11) * fSlow8)); - double fSlow27 = mydsp_faustpower2_f(fSlow18); - double fSlow28 = (1.0 / (((fConst12 / fSlow2) + (3.0 * fSlow27)) + 1.0)); - double fSlow29 = mydsp_faustpower2_f(fSlow15); - double fSlow30 = (((fConst12 / fSlow4) + (3.0 * fSlow29)) + 1.0); - double fSlow31 = ((fSlow3 * fSlow30) / fSlow4); - double fSlow32 = (12.0 * fSlow27); - double fSlow33 = (fSlow32 + (fConst13 / fSlow2)); - double fSlow34 = (1.0 / fSlow30); - double fSlow35 = (12.0 * fSlow29); - double fSlow36 = ((fConst13 / fSlow4) + fSlow35); - double fSlow37 = (fConst15 * ((fSlow9 * fSlow8) * fSlow12)); - double fSlow38 = ((3.0 * fSlow10) + -1.0); - double fSlow39 = (1.1180339887498949 * fSlow38); - double fSlow40 = (fSlow23 * fSlow9); - double fSlow41 = (fConst15 * (fSlow40 * fSlow12)); - double fSlow42 = mydsp_faustpower2_f(fSlow23); - double fSlow43 = ((2.0 * fSlow42) + -1.0); - double fSlow44 = (fConst16 * (fSlow11 * fSlow43)); - double fSlow45 = pow(fSlow11, 1.5); - double fSlow46 = (fConst17 * ((fSlow8 * fSlow45) * ((4.0 * fSlow42) + -1.0))); - double fSlow47 = ((fConst19 / fSlow4) + 1.0); - double fSlow48 = (fConst18 / (fSlow4 * fSlow47)); - double fSlow49 = (1.0 / ((fConst19 / fSlow2) + 1.0)); - double fSlow50 = (1.0 / (((fConst20 / fSlow2) + (6.4594326934833797 * fSlow27)) + 1.0)); - double fSlow51 = (((fConst20 / fSlow4) + (6.4594326934833797 * fSlow29)) + 1.0); - double fSlow52 = ((fSlow3 * fSlow51) / fSlow4); - double fSlow53 = (25.837730773933519 * fSlow27); - double fSlow54 = (fSlow53 + (fConst21 / fSlow2)); - double fSlow55 = (1.0 / fSlow51); - double fSlow56 = (25.837730773933519 * fSlow29); - double fSlow57 = ((fConst21 / fSlow4) + fSlow56); - double fSlow58 = (fConst18 / fSlow2); - double fSlow59 = (fConst23 * ((fSlow40 * fSlow11) * fSlow8)); - double fSlow60 = ((16.925687506432688 * fSlow10) + -3.3851375012865379); - double fSlow61 = (fConst24 * (fSlow13 * fSlow60)); - double fSlow62 = (0.88191710368819687 * (fSlow9 * ((2.5 * fSlow38) + -2.0))); - double fSlow63 = (fConst24 * (fSlow24 * fSlow60)); - double fSlow64 = (fConst25 * ((fSlow9 * fSlow11) * fSlow43)); - double fSlow65 = (fConst17 * ((fSlow23 * fSlow45) * ((2.0 * fSlow43) + -1.0))); + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); + double fSlow1 = double(fCheckbox0); + double fSlow2 = (1.0 - fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (0.0010000000000000009 * double(fHslider1)); + double fSlow6 = (0.0010000000000000009 * double(fHslider2)); + double fSlow7 = (0.0010000000000000009 * double(fHslider3)); + double fSlow8 = (fConst7 / fSlow3); + double fSlow9 = (1.0 / (fSlow8 + 1.0)); + double fSlow10 = (fConst6 / fSlow3); + double fSlow11 = mydsp_faustpower2_f(fSlow8); + double fSlow12 = (1.0 / (((fConst12 / fSlow3) + (3.0 * fSlow11)) + 1.0)); + double fSlow13 = (12.0 * fSlow11); + double fSlow14 = (fSlow13 + (fConst13 / fSlow3)); + double fSlow15 = (1.0 / ((fConst19 / fSlow3) + 1.0)); + double fSlow16 = (1.0 / (((fConst20 / fSlow3) + (6.4594326934833797 * fSlow11)) + 1.0)); + double fSlow17 = (25.837730773933519 * fSlow11); + double fSlow18 = (fSlow17 + (fConst21 / fSlow3)); + double fSlow19 = (fConst18 / fSlow3); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); - double fTemp0 = (double(input0[i]) * fRec1[0]); - double fTemp1 = (fSlow5 * fTemp0); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); + double fTemp0 = double(input0[i]); + double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow19 * ((fSlow20 * fTemp0) - (fSlow21 * fRec5[0]))); - fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = (fSlow1 * fTemp0); - double fTemp3 = ((fSlow17 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); - double fTemp4 = (fSlow14 * fTemp3); - fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph1 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow22 * fTemp3); - fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph2 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (fSlow25 * fTemp3); - fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp6); - fRec10[0] = (fRec10[1] + fRec9[1]); - fRec11[0] = (fRec11[1] + fRec10[1]); - fRec9[0] = (fSlow28 * ((fSlow31 * fTemp0) - ((fSlow33 * fRec10[0]) + (fSlow32 * fRec11[0])))); - fRec12[0] = (fRec9[0] + fRec12[1]); - double fTemp7 = (fRec12[0] - fRec9[0]); - fVec0[0] = fTemp7; - fRec13[0] = (fRec13[1] + fVec0[1]); - double fTemp8 = ((fRec9[0] + fTemp2) + (fSlow34 * ((fSlow36 * fTemp7) + (fSlow35 * fRec13[0])))); - double fTemp9 = (fSlow26 * fTemp8); - fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph4 = FAUSTFLOAT(fRec8[0]); - output4[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (fSlow37 * fTemp8); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph5 = FAUSTFLOAT(fRec14[0]); - output5[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fSlow39 * fTemp8); - fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph6 = FAUSTFLOAT(fRec15[0]); - output6[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (fSlow41 * fTemp8); - fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph7 = FAUSTFLOAT(fRec16[0]); - output7[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (fSlow44 * fTemp8); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph8 = FAUSTFLOAT(fRec17[0]); - output8[i] = FAUSTFLOAT(fTemp13); - fRec22[0] = (fRec22[1] + fRec21[1]); - fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow50 * ((fSlow52 * fTemp0) - ((fSlow54 * fRec22[0]) + (fSlow53 * fRec23[0])))); - fRec24[0] = (fRec21[0] + fRec24[1]); - double fTemp14 = (fRec24[0] - fRec21[0]); - fVec1[0] = fTemp14; - fRec25[0] = (fRec25[1] + fVec1[1]); - fRec26[0] = (fRec26[1] + fRec20[1]); - fRec20[0] = (fSlow49 * ((fSlow47 * (fRec21[0] + (fSlow55 * ((fSlow57 * fTemp14) + (fSlow56 * fRec25[0]))))) - (fSlow58 * fRec26[0]))); - fRec19[0] = (fRec20[0] + fRec19[1]); - double fTemp15 = ((fSlow48 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); - double fTemp16 = (fSlow46 * fTemp15); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph9 = FAUSTFLOAT(fRec18[0]); - output9[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fSlow59 * fTemp15); - fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph10 = FAUSTFLOAT(fRec27[0]); - output10[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (fSlow61 * fTemp15); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); - fVbargraph11 = FAUSTFLOAT(fRec28[0]); - output11[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (fSlow62 * fTemp15); - fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); - fVbargraph12 = FAUSTFLOAT(fRec29[0]); - output12[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (fSlow63 * fTemp15); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); - fVbargraph13 = FAUSTFLOAT(fRec30[0]); - output13[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (fSlow64 * fTemp15); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph14 = FAUSTFLOAT(fRec31[0]); - output14[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (fSlow65 * fTemp15); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph15 = FAUSTFLOAT(fRec32[0]); - output15[i] = FAUSTFLOAT(fTemp22); + fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); + double fTemp2 = sin(fRec4[0]); + double fTemp3 = mydsp_faustpower2_f(fTemp2); + double fTemp4 = (1.0 - fTemp3); + double fTemp5 = pow(fTemp4, 0.5); + fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); + double fTemp6 = sin(fRec5[0]); + double fTemp7 = (fTemp5 * fTemp6); + double fTemp8 = (fConst7 / fRec2[0]); + double fTemp9 = (fTemp8 + 1.0); + fRec8[0] = (fRec8[1] + fRec7[1]); + fRec7[0] = (fSlow9 * ((fSlow4 * (((fRec1[0] * fTemp9) * fTemp0) / fRec2[0])) - (fSlow10 * fRec8[0]))); + fRec6[0] = (fRec7[0] + fRec6[1]); + double fTemp10 = (fSlow2 * (fRec1[0] * fTemp0)); + double fTemp11 = ((fConst6 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp9))) + (fRec7[0] + fTemp10)); + double fTemp12 = (fConst5 * (fTemp7 * fTemp11)); + fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph1 = FAUSTFLOAT(fRec3[0]); + output1[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (1.7320508075688772 * (fTemp2 * fTemp11)); + fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph2 = FAUSTFLOAT(fRec9[0]); + output2[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = cos(fRec5[0]); + double fTemp15 = (fTemp5 * fTemp14); + double fTemp16 = (fConst5 * (fTemp15 * fTemp11)); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph3 = FAUSTFLOAT(fRec10[0]); + output3[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = mydsp_faustpower2_f(fTemp8); + double fTemp18 = (((fConst12 / fRec2[0]) + (3.0 * fTemp17)) + 1.0); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec15[0] = (fRec15[1] + fRec14[1]); + fRec13[0] = (fSlow12 * ((fSlow4 * (((fRec1[0] * fTemp18) * fTemp0) / fRec2[0])) - ((fSlow14 * fRec14[0]) + (fSlow13 * fRec15[0])))); + fRec12[0] = (fRec13[0] + fRec12[1]); + double fTemp19 = (fRec12[0] - fRec13[0]); + fVec0[0] = fTemp19; + fRec16[0] = (fRec16[1] + fVec0[1]); + double fTemp20 = ((((fTemp19 * ((fConst13 / fRec2[0]) + (12.0 * fTemp17))) + (12.0 * (fRec16[0] * fTemp17))) / fTemp18) + (fRec13[0] + fTemp10)); + double fTemp21 = (fConst11 * (((fTemp4 * fTemp6) * fTemp14) * fTemp20)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph4 = FAUSTFLOAT(fRec11[0]); + output4[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (fTemp2 * fTemp5); + double fTemp23 = (fConst15 * ((fTemp22 * fTemp6) * fTemp20)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + fVbargraph5 = FAUSTFLOAT(fRec17[0]); + output5[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = ((3.0 * fTemp3) + -1.0); + double fTemp25 = (1.1180339887498949 * (fTemp20 * fTemp24)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph6 = FAUSTFLOAT(fRec18[0]); + output6[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (fConst15 * ((fTemp22 * fTemp14) * fTemp20)); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph7 = FAUSTFLOAT(fRec19[0]); + output7[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = mydsp_faustpower2_f(fTemp14); + double fTemp28 = ((2.0 * fTemp27) + -1.0); + double fTemp29 = (fConst16 * ((fTemp4 * fTemp20) * fTemp28)); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph8 = FAUSTFLOAT(fRec20[0]); + output8[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = pow(fTemp4, 1.5); + double fTemp31 = (((fConst20 / fRec2[0]) + (6.4594326934833797 * fTemp17)) + 1.0); + fRec25[0] = (fRec25[1] + fRec24[1]); + fRec26[0] = (fRec26[1] + fRec25[1]); + fRec24[0] = (fSlow16 * ((fSlow4 * (((fRec1[0] * fTemp31) * fTemp0) / fRec2[0])) - ((fSlow18 * fRec25[0]) + (fSlow17 * fRec26[0])))); + fRec27[0] = (fRec24[0] + fRec27[1]); + double fTemp32 = (fRec27[0] - fRec24[0]); + fVec1[0] = fTemp32; + fRec28[0] = (fRec28[1] + fVec1[1]); + double fTemp33 = ((fConst19 / fRec2[0]) + 1.0); + fRec29[0] = (fRec29[1] + fRec23[1]); + fRec23[0] = (fSlow15 * (((fRec24[0] + (((fTemp32 * ((fConst21 / fRec2[0]) + (25.837730773933519 * fTemp17))) + (25.837730773933519 * (fRec28[0] * fTemp17))) / fTemp31)) * fTemp33) - (fSlow19 * fRec29[0]))); + fRec22[0] = (fRec23[0] + fRec22[1]); + double fTemp34 = ((fConst18 * ((fRec22[0] - fRec23[0]) / (fRec2[0] * fTemp33))) + (fRec23[0] + fTemp10)); + double fTemp35 = (fConst17 * (((fTemp6 * fTemp30) * fTemp34) * ((4.0 * fTemp27) + -1.0))); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + fVbargraph9 = FAUSTFLOAT(fRec21[0]); + output9[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (fTemp2 * fTemp4); + double fTemp37 = (fConst23 * (((fTemp36 * fTemp6) * fTemp14) * fTemp34)); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + fVbargraph10 = FAUSTFLOAT(fRec30[0]); + output10[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = ((16.925687506432688 * fTemp3) + -3.3851375012865379); + double fTemp39 = (fConst24 * ((fTemp7 * fTemp34) * fTemp38)); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph11 = FAUSTFLOAT(fRec31[0]); + output11[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.88191710368819687 * ((fTemp2 * fTemp34) * ((2.5 * fTemp24) + -2.0))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph12 = FAUSTFLOAT(fRec32[0]); + output12[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (fConst24 * ((fTemp15 * fTemp34) * fTemp38)); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph13 = FAUSTFLOAT(fRec33[0]); + output13[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (fConst25 * ((fTemp36 * fTemp28) * fTemp34)); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph14 = FAUSTFLOAT(fRec34[0]); + output14[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (fConst17 * (((fTemp14 * fTemp30) * fTemp34) * ((2.0 * fTemp28) + -1.0))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph15 = FAUSTFLOAT(fRec35[0]); + output15[i] = FAUSTFLOAT(fTemp43); fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec10[1] = fRec10[0]; - fRec11[1] = fRec11[0]; + fRec6[1] = fRec6[0]; + fRec3[1] = fRec3[0]; fRec9[1] = fRec9[0]; - fRec12[1] = fRec12[0]; - fVec0[1] = fVec0[0]; - fRec13[1] = fRec13[0]; - fRec8[1] = fRec8[0]; + fRec10[1] = fRec10[0]; fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fVec0[1] = fVec0[0]; fRec16[1] = fRec16[0]; + fRec11[1] = fRec11[0]; fRec17[1] = fRec17[0]; - fRec22[1] = fRec22[0]; - fRec23[1] = fRec23[0]; - fRec21[1] = fRec21[0]; - fRec24[1] = fRec24[0]; - fVec1[1] = fVec1[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; - fRec20[1] = fRec20[0]; - fRec19[1] = fRec19[0]; - fRec18[1] = fRec18[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; + fVec1[1] = fVec1[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec21[1] = fRec21[0]; fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; + fRec35[1] = fRec35[0]; } @@ -1619,7 +1615,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1682,7 +1678,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1711,9 +1707,9 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } #ifdef SUPERNOVA diff --git a/source/HOAUGens/HOAEncoder4.cpp b/source/HOAUGens/HOAEncoder4.cpp index 8910772383..328cc33b7d 100644 --- a/source/HOAUGens/HOAEncoder4.cpp +++ b/source/HOAUGens/HOAEncoder4.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder4" version: "1.0" -Code generated with Faust 2.5.12 (https://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -31,9 +31,9 @@ Compilation options: cpp, -double -ftz 0 // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -639,11 +639,12 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; + FAUSTFLOAT fHslider0; + double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec1[2]; + double fRec2[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; @@ -651,17 +652,19 @@ class mydsp : public dsp { double fConst4; double fConst5; FAUSTFLOAT fHslider2; + double fRec4[2]; FAUSTFLOAT fHslider3; + double fRec5[2]; double fConst6; double fConst7; - double fRec5[2]; - double fRec4[2]; + double fRec8[2]; + double fRec7[2]; + double fRec6[2]; double fRec3[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec6[2]; + double fRec9[2]; FAUSTFLOAT fVbargraph2; - double fRec7[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph3; double fConst8; double fConst9; @@ -669,25 +672,25 @@ class mydsp : public dsp { double fConst11; double fConst12; double fConst13; - double fRec10[2]; - double fRec11[2]; - double fRec9[2]; + double fRec14[2]; + double fRec15[2]; + double fRec13[2]; double fRec12[2]; double fVec0[2]; - double fRec13[2]; - double fRec8[2]; + double fRec16[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph4; double fConst14; double fConst15; double fConst16; - double fRec14[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph5; - double fRec15[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph6; - double fRec16[2]; + double fRec19[2]; FAUSTFLOAT fVbargraph7; double fConst17; - double fRec17[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph8; double fConst18; double fConst19; @@ -696,73 +699,73 @@ class mydsp : public dsp { double fConst22; double fConst23; double fConst24; - double fRec22[2]; - double fRec23[2]; - double fRec21[2]; - double fRec24[2]; - double fVec1[2]; double fRec25[2]; double fRec26[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; + double fRec24[2]; + double fRec27[2]; + double fVec1[2]; + double fRec28[2]; + double fRec29[2]; + double fRec23[2]; + double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fVbargraph9; double fConst25; double fConst26; double fConst27; - double fRec27[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph10; double fConst28; - double fRec28[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph11; - double fRec29[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph12; - double fRec30[2]; + double fRec33[2]; FAUSTFLOAT fVbargraph13; double fConst29; - double fRec31[2]; + double fRec34[2]; FAUSTFLOAT fVbargraph14; - double fRec32[2]; + double fRec35[2]; FAUSTFLOAT fVbargraph15; double fConst30; double fConst31; double fConst32; double fConst33; - double fRec36[2]; - double fRec37[2]; - double fRec35[2]; - double fRec38[2]; - double fVec2[2]; - double fRec39[2]; - double fConst34; double fRec40[2]; double fRec41[2]; - double fRec34[2]; + double fRec39[2]; double fRec42[2]; - double fVec3[2]; + double fVec2[2]; double fRec43[2]; - double fRec33[2]; + double fConst34; + double fRec44[2]; + double fRec45[2]; + double fRec38[2]; + double fRec37[2]; + double fVec3[2]; + double fRec46[2]; + double fRec36[2]; FAUSTFLOAT fVbargraph16; double fConst35; - double fRec44[2]; + double fRec47[2]; FAUSTFLOAT fVbargraph17; double fConst36; double fConst37; - double fRec45[2]; + double fRec48[2]; FAUSTFLOAT fVbargraph18; double fConst38; - double fRec46[2]; + double fRec49[2]; FAUSTFLOAT fVbargraph19; - double fRec47[2]; + double fRec50[2]; FAUSTFLOAT fVbargraph20; - double fRec48[2]; + double fRec51[2]; FAUSTFLOAT fVbargraph21; double fConst39; - double fRec49[2]; + double fRec52[2]; FAUSTFLOAT fVbargraph22; - double fRec50[2]; + double fRec53[2]; FAUSTFLOAT fVbargraph23; - double fRec51[2]; + double fRec54[2]; FAUSTFLOAT fVbargraph24; public: @@ -958,7 +961,7 @@ class mydsp : public dsp { fConst13 = (1020.0 / fConst0); fConst14 = double(tgamma(2.0)); fConst15 = double(tgamma(4.0)); - fConst16 = (4.7873073648171927 * (fConst4 * sqrt((5.0 * (fConst14 / fConst15))))); + fConst16 = (4.7873073648171927 * (sqrt((5.0 * (fConst14 / fConst15))) * fConst4)); fConst17 = (3.1915382432114616 * fConst10); fConst18 = double(tgamma(7.0)); fConst19 = double(tgamma(3.5)); @@ -968,28 +971,28 @@ class mydsp : public dsp { fConst23 = (625.22848971356643 / fConst0); fConst24 = (1250.4569794271329 / fConst0); fConst25 = double(tgamma(6.0)); - fConst26 = (fConst9 * sqrt((7.0 * (fConst14 / fConst25)))); + fConst26 = (sqrt((7.0 * (fConst14 / fConst25))) * fConst9); fConst27 = (31.915382432114615 * fConst26); - fConst28 = (0.70710678118654757 * (fConst4 * sqrt((7.0 * (fConst3 / fConst8))))); + fConst28 = (0.70710678118654757 * (sqrt((7.0 * (fConst3 / fConst8))) * fConst4)); fConst29 = (15.957691216057308 * fConst26); fConst30 = (12.766152972845846 * (sqrt((9.0 * (fConst2 / double(tgamma(9.0))))) * double(tgamma(4.5)))); fConst31 = (984.71160495892411 / fConst0); fConst32 = (715.28839504107589 / fConst0); fConst33 = (1430.5767900821518 / fConst0); fConst34 = (1969.4232099178482 / fConst0); - fConst35 = (44.681535404960464 * (fConst19 * sqrt((9.0 * (fConst14 / double(tgamma(8.0))))))); - fConst36 = (fConst9 * sqrt((9.0 * (fConst3 / fConst18)))); + fConst35 = (44.681535404960464 * (sqrt((9.0 * (fConst14 / double(tgamma(8.0))))) * fConst19)); + fConst36 = (sqrt((9.0 * (fConst3 / fConst18))) * fConst9); fConst37 = (1.4142135623730951 * fConst36); - fConst38 = (0.47140452079103168 * (fConst4 * sqrt((9.0 * (fConst15 / fConst25))))); + fConst38 = (0.47140452079103168 * (sqrt((9.0 * (fConst15 / fConst25))) * fConst4)); fConst39 = (0.70710678118654757 * fConst36); } virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider0 = FAUSTFLOAT(2.0); - fHslider1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(2.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -1001,11 +1004,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec0[l1] = 0.0; + fRec2[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec5[l2] = 0.0; + fRec0[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -1013,39 +1016,39 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec3[l4] = 0.0; + fRec5[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec8[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec10[l8] = 0.0; + fRec3[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec11[l9] = 0.0; + fRec9[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec9[l10] = 0.0; + fRec10[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec12[l11] = 0.0; + fRec14[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fVec0[l12] = 0.0; + fRec15[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -1053,19 +1056,19 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec8[l14] = 0.0; + fRec12[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec14[l15] = 0.0; + fVec0[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec15[l16] = 0.0; + fRec16[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec16[l17] = 0.0; + fRec11[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -1073,55 +1076,55 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec22[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec23[l20] = 0.0; + fRec19[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec21[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec24[l22] = 0.0; + fRec25[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fVec1[l23] = 0.0; + fRec26[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec25[l24] = 0.0; + fRec24[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + fRec27[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec20[l26] = 0.0; + fVec1[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec19[l27] = 0.0; + fRec28[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec18[l28] = 0.0; + fRec29[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec27[l29] = 0.0; + fRec23[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec28[l30] = 0.0; + fRec22[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec29[l31] = 0.0; + fRec21[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { @@ -1137,11 +1140,11 @@ class mydsp : public dsp { } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec36[l35] = 0.0; + fRec33[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec37[l36] = 0.0; + fRec34[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { @@ -1149,11 +1152,11 @@ class mydsp : public dsp { } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec38[l38] = 0.0; + fRec40[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fVec2[l39] = 0.0; + fRec41[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { @@ -1161,43 +1164,43 @@ class mydsp : public dsp { } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec40[l41] = 0.0; + fRec42[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec41[l42] = 0.0; + fVec2[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec34[l43] = 0.0; + fRec43[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec42[l44] = 0.0; + fRec44[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fVec3[l45] = 0.0; + fRec45[l45] = 0.0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec43[l46] = 0.0; + fRec38[l46] = 0.0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec33[l47] = 0.0; + fRec37[l47] = 0.0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fRec44[l48] = 0.0; + fVec3[l48] = 0.0; } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec45[l49] = 0.0; + fRec46[l49] = 0.0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - fRec46[l50] = 0.0; + fRec36[l50] = 0.0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { @@ -1220,6 +1223,18 @@ class mydsp : public dsp { fRec51[l55] = 0.0; } + for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + fRec52[l56] = 0.0; + + } + for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + fRec53[l57] = 0.0; + + } + for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + fRec54[l58] = 0.0; + + } } @@ -1245,22 +1260,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder4"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider1, "0+1", ""); - ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider0, "0+2", ""); - ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "0+1", ""); + ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -1270,115 +1285,115 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331a6960", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x355bd80", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331b9a70", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3575b80", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331be790", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x357b4b0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331c3c60", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35816a0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331d8750", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3599290", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331df850", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35a15b0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331e4d30", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35a7820", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331ea0f0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35ad530", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5331f0530", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35b4760", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb53320ef50", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35d31a0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb533215760", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35daea0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb53321bc00", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35e2400", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb533221360", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35e89b0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb533226340", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35ee670", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb53322bb00", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35f4ac0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb533231360", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x35fb1b0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb533251760", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3620130", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb533257c30", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36278b0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb53325e430", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x362f200", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb5332648b0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3636750", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb53326a0c0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x363ce30", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb53326f200", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3642cb0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb533274820", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36492d0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb533279c40", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x364f6d0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fb53327f6b0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3656090", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1413,305 +1428,268 @@ class mydsp : public dsp { FAUSTFLOAT* output22 = outputs[22]; FAUSTFLOAT* output23 = outputs[23]; FAUSTFLOAT* output24 = outputs[24]; - double fSlow0 = double(fCheckbox0); - double fSlow1 = (1.0 - fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fHslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow7 = double(fHslider2); - double fSlow8 = sin(fSlow7); - double fSlow9 = sin(double(fHslider3)); - double fSlow10 = mydsp_faustpower2_f(fSlow9); - double fSlow11 = (1.0 - fSlow10); - double fSlow12 = pow(fSlow11, 0.5); - double fSlow13 = (fSlow8 * fSlow12); - double fSlow14 = (fConst5 * fSlow13); - double fSlow15 = (fConst7 / fSlow4); - double fSlow16 = (fSlow15 + 1.0); - double fSlow17 = (fConst6 / (fSlow4 * fSlow16)); - double fSlow18 = (fConst7 / fSlow2); - double fSlow19 = (1.0 / (fSlow18 + 1.0)); - double fSlow20 = ((fSlow3 * fSlow16) / fSlow4); - double fSlow21 = (fConst6 / fSlow2); - double fSlow22 = (1.7320508075688772 * fSlow9); - double fSlow23 = cos(fSlow7); - double fSlow24 = (fSlow23 * fSlow12); - double fSlow25 = (fConst5 * fSlow24); - double fSlow26 = ((fSlow23 * fSlow11) * fSlow8); - double fSlow27 = (fConst11 * fSlow26); - double fSlow28 = mydsp_faustpower2_f(fSlow18); - double fSlow29 = (1.0 / (((fConst12 / fSlow2) + (3.0 * fSlow28)) + 1.0)); - double fSlow30 = mydsp_faustpower2_f(fSlow15); - double fSlow31 = (((fConst12 / fSlow4) + (3.0 * fSlow30)) + 1.0); - double fSlow32 = ((fSlow3 * fSlow31) / fSlow4); - double fSlow33 = (12.0 * fSlow28); - double fSlow34 = (fSlow33 + (fConst13 / fSlow2)); - double fSlow35 = (1.0 / fSlow31); - double fSlow36 = (12.0 * fSlow30); - double fSlow37 = ((fConst13 / fSlow4) + fSlow36); - double fSlow38 = (fSlow9 * fSlow8); - double fSlow39 = (fSlow38 * fSlow12); - double fSlow40 = (fConst16 * fSlow39); - double fSlow41 = ((3.0 * fSlow10) + -1.0); - double fSlow42 = (1.1180339887498949 * fSlow41); - double fSlow43 = (fSlow23 * fSlow9); - double fSlow44 = (fSlow43 * fSlow12); - double fSlow45 = (fConst16 * fSlow44); - double fSlow46 = mydsp_faustpower2_f(fSlow23); - double fSlow47 = ((2.0 * fSlow46) + -1.0); - double fSlow48 = (fSlow11 * fSlow47); - double fSlow49 = (fConst17 * fSlow48); - double fSlow50 = pow(fSlow11, 1.5); - double fSlow51 = ((4.0 * fSlow46) + -1.0); - double fSlow52 = (fConst20 * ((fSlow8 * fSlow50) * fSlow51)); - double fSlow53 = ((fConst22 / fSlow4) + 1.0); - double fSlow54 = (fConst21 / (fSlow4 * fSlow53)); - double fSlow55 = (1.0 / ((fConst22 / fSlow2) + 1.0)); - double fSlow56 = (1.0 / (((fConst23 / fSlow2) + (6.4594326934833797 * fSlow28)) + 1.0)); - double fSlow57 = (((fConst23 / fSlow4) + (6.4594326934833797 * fSlow30)) + 1.0); - double fSlow58 = ((fSlow3 * fSlow57) / fSlow4); - double fSlow59 = (25.837730773933519 * fSlow28); - double fSlow60 = (fSlow59 + (fConst24 / fSlow2)); - double fSlow61 = (1.0 / fSlow57); - double fSlow62 = (25.837730773933519 * fSlow30); - double fSlow63 = ((fConst24 / fSlow4) + fSlow62); - double fSlow64 = (fConst21 / fSlow2); - double fSlow65 = (fConst27 * ((fSlow43 * fSlow11) * fSlow8)); - double fSlow66 = ((16.925687506432688 * fSlow10) + -3.3851375012865379); - double fSlow67 = (fConst28 * (fSlow13 * fSlow66)); - double fSlow68 = ((2.5 * fSlow41) + -2.0); - double fSlow69 = (0.88191710368819687 * (fSlow9 * fSlow68)); - double fSlow70 = (fConst28 * (fSlow24 * fSlow66)); - double fSlow71 = (fConst29 * ((fSlow9 * fSlow11) * fSlow47)); - double fSlow72 = ((2.0 * fSlow47) + -1.0); - double fSlow73 = (fConst20 * ((fSlow23 * fSlow50) * fSlow72)); - double fSlow74 = mydsp_faustpower2_f(fSlow11); - double fSlow75 = (fConst30 * ((fSlow74 * fSlow8) * (0.0 - (2.0 * (fSlow23 * (1.0 - fSlow51)))))); - double fSlow76 = (1.0 / (((fConst31 / fSlow2) + (9.1401308902779004 * fSlow28)) + 1.0)); - double fSlow77 = (((fConst31 / fSlow4) + (9.1401308902779004 * fSlow30)) + 1.0); - double fSlow78 = (1.0 / (((fConst32 / fSlow2) + (11.4878004768713 * fSlow28)) + 1.0)); - double fSlow79 = (((fConst32 / fSlow4) + (11.4878004768713 * fSlow30)) + 1.0); - double fSlow80 = ((fSlow3 * fSlow79) / fSlow4); - double fSlow81 = (45.951201907485199 * fSlow28); - double fSlow82 = (fSlow81 + (fConst33 / fSlow2)); - double fSlow83 = (1.0 / fSlow79); - double fSlow84 = (45.951201907485199 * fSlow30); - double fSlow85 = ((fConst33 / fSlow4) + fSlow84); - double fSlow86 = (36.560523561111602 * fSlow28); - double fSlow87 = (fSlow86 + (fConst34 / fSlow2)); - double fSlow88 = (1.0 / fSlow77); - double fSlow89 = (36.560523561111602 * fSlow30); - double fSlow90 = ((fConst34 / fSlow4) + fSlow89); - double fSlow91 = (fConst35 * ((fSlow38 * fSlow50) * fSlow51)); - double fSlow92 = ((78.986541696685876 * fSlow10) + -11.283791670955125); - double fSlow93 = (fConst37 * (fSlow26 * fSlow92)); - double fSlow94 = ((3.5 * fSlow66) + -13.540550005146152); - double fSlow95 = (fConst38 * (fSlow39 * fSlow94)); - double fSlow96 = (0.75 * ((2.333333333333333 * (fSlow10 * fSlow68)) - (1.5 * fSlow41))); - double fSlow97 = (fConst38 * (fSlow44 * fSlow94)); - double fSlow98 = (fConst39 * (fSlow48 * fSlow92)); - double fSlow99 = (fConst35 * ((fSlow43 * fSlow50) * fSlow72)); - double fSlow100 = (fConst30 * (fSlow74 * (1.0 - (2.0 * (fSlow46 * (1.0 - fSlow72)))))); + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); + double fSlow1 = double(fCheckbox0); + double fSlow2 = (1.0 - fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (0.0010000000000000009 * double(fHslider1)); + double fSlow6 = (0.0010000000000000009 * double(fHslider2)); + double fSlow7 = (0.0010000000000000009 * double(fHslider3)); + double fSlow8 = (fConst7 / fSlow3); + double fSlow9 = (1.0 / (fSlow8 + 1.0)); + double fSlow10 = (fConst6 / fSlow3); + double fSlow11 = mydsp_faustpower2_f(fSlow8); + double fSlow12 = (1.0 / (((fConst12 / fSlow3) + (3.0 * fSlow11)) + 1.0)); + double fSlow13 = (12.0 * fSlow11); + double fSlow14 = (fSlow13 + (fConst13 / fSlow3)); + double fSlow15 = (1.0 / ((fConst22 / fSlow3) + 1.0)); + double fSlow16 = (1.0 / (((fConst23 / fSlow3) + (6.4594326934833797 * fSlow11)) + 1.0)); + double fSlow17 = (25.837730773933519 * fSlow11); + double fSlow18 = (fSlow17 + (fConst24 / fSlow3)); + double fSlow19 = (fConst21 / fSlow3); + double fSlow20 = (1.0 / (((fConst31 / fSlow3) + (9.1401308902779004 * fSlow11)) + 1.0)); + double fSlow21 = (1.0 / (((fConst32 / fSlow3) + (11.4878004768713 * fSlow11)) + 1.0)); + double fSlow22 = (45.951201907485199 * fSlow11); + double fSlow23 = (fSlow22 + (fConst33 / fSlow3)); + double fSlow24 = (36.560523561111602 * fSlow11); + double fSlow25 = (fSlow24 + (fConst34 / fSlow3)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); - double fTemp0 = (double(input0[i]) * fRec1[0]); - double fTemp1 = (fSlow5 * fTemp0); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); + double fTemp0 = double(input0[i]); + double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow19 * ((fSlow20 * fTemp0) - (fSlow21 * fRec5[0]))); - fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = (fSlow1 * fTemp0); - double fTemp3 = ((fSlow17 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); - double fTemp4 = (fSlow14 * fTemp3); - fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph1 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow22 * fTemp3); - fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph2 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (fSlow25 * fTemp3); - fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp6); - fRec10[0] = (fRec10[1] + fRec9[1]); - fRec11[0] = (fRec11[1] + fRec10[1]); - fRec9[0] = (fSlow29 * ((fSlow32 * fTemp0) - ((fSlow34 * fRec10[0]) + (fSlow33 * fRec11[0])))); - fRec12[0] = (fRec9[0] + fRec12[1]); - double fTemp7 = (fRec12[0] - fRec9[0]); - fVec0[0] = fTemp7; - fRec13[0] = (fRec13[1] + fVec0[1]); - double fTemp8 = ((fRec9[0] + fTemp2) + (fSlow35 * ((fSlow37 * fTemp7) + (fSlow36 * fRec13[0])))); - double fTemp9 = (fSlow27 * fTemp8); - fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph4 = FAUSTFLOAT(fRec8[0]); - output4[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (fSlow40 * fTemp8); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph5 = FAUSTFLOAT(fRec14[0]); - output5[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fSlow42 * fTemp8); - fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph6 = FAUSTFLOAT(fRec15[0]); - output6[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (fSlow45 * fTemp8); - fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph7 = FAUSTFLOAT(fRec16[0]); - output7[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (fSlow49 * fTemp8); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph8 = FAUSTFLOAT(fRec17[0]); - output8[i] = FAUSTFLOAT(fTemp13); - fRec22[0] = (fRec22[1] + fRec21[1]); - fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow56 * ((fSlow58 * fTemp0) - ((fSlow60 * fRec22[0]) + (fSlow59 * fRec23[0])))); - fRec24[0] = (fRec21[0] + fRec24[1]); - double fTemp14 = (fRec24[0] - fRec21[0]); - fVec1[0] = fTemp14; - fRec25[0] = (fRec25[1] + fVec1[1]); - fRec26[0] = (fRec26[1] + fRec20[1]); - fRec20[0] = (fSlow55 * ((fSlow53 * (fRec21[0] + (fSlow61 * ((fSlow63 * fTemp14) + (fSlow62 * fRec25[0]))))) - (fSlow64 * fRec26[0]))); - fRec19[0] = (fRec20[0] + fRec19[1]); - double fTemp15 = ((fSlow54 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); - double fTemp16 = (fSlow52 * fTemp15); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph9 = FAUSTFLOAT(fRec18[0]); - output9[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fSlow65 * fTemp15); - fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph10 = FAUSTFLOAT(fRec27[0]); - output10[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (fSlow67 * fTemp15); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); - fVbargraph11 = FAUSTFLOAT(fRec28[0]); - output11[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (fSlow69 * fTemp15); - fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); - fVbargraph12 = FAUSTFLOAT(fRec29[0]); - output12[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (fSlow70 * fTemp15); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); - fVbargraph13 = FAUSTFLOAT(fRec30[0]); - output13[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (fSlow71 * fTemp15); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph14 = FAUSTFLOAT(fRec31[0]); - output14[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (fSlow73 * fTemp15); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph15 = FAUSTFLOAT(fRec32[0]); - output15[i] = FAUSTFLOAT(fTemp22); - fRec36[0] = (fRec36[1] + fRec35[1]); - fRec37[0] = (fRec37[1] + fRec36[1]); - fRec35[0] = (fSlow78 * ((fSlow80 * fTemp0) - ((fSlow82 * fRec36[0]) + (fSlow81 * fRec37[0])))); - fRec38[0] = (fRec35[0] + fRec38[1]); - double fTemp23 = (fRec38[0] - fRec35[0]); - fVec2[0] = fTemp23; - fRec39[0] = (fRec39[1] + fVec2[1]); - fRec40[0] = (fRec40[1] + fRec34[1]); + fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); + double fTemp2 = sin(fRec4[0]); + double fTemp3 = mydsp_faustpower2_f(fTemp2); + double fTemp4 = (1.0 - fTemp3); + double fTemp5 = pow(fTemp4, 0.5); + fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); + double fTemp6 = sin(fRec5[0]); + double fTemp7 = (fTemp5 * fTemp6); + double fTemp8 = (fConst7 / fRec2[0]); + double fTemp9 = (fTemp8 + 1.0); + fRec8[0] = (fRec8[1] + fRec7[1]); + fRec7[0] = (fSlow9 * ((fSlow4 * (((fRec1[0] * fTemp9) * fTemp0) / fRec2[0])) - (fSlow10 * fRec8[0]))); + fRec6[0] = (fRec7[0] + fRec6[1]); + double fTemp10 = (fSlow2 * (fRec1[0] * fTemp0)); + double fTemp11 = ((fConst6 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp9))) + (fRec7[0] + fTemp10)); + double fTemp12 = (fConst5 * (fTemp7 * fTemp11)); + fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph1 = FAUSTFLOAT(fRec3[0]); + output1[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (1.7320508075688772 * (fTemp2 * fTemp11)); + fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph2 = FAUSTFLOAT(fRec9[0]); + output2[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = cos(fRec5[0]); + double fTemp15 = (fTemp5 * fTemp14); + double fTemp16 = (fConst5 * (fTemp15 * fTemp11)); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph3 = FAUSTFLOAT(fRec10[0]); + output3[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = ((fTemp4 * fTemp6) * fTemp14); + double fTemp18 = mydsp_faustpower2_f(fTemp8); + double fTemp19 = (((fConst12 / fRec2[0]) + (3.0 * fTemp18)) + 1.0); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec15[0] = (fRec15[1] + fRec14[1]); + fRec13[0] = (fSlow12 * ((fSlow4 * (((fRec1[0] * fTemp19) * fTemp0) / fRec2[0])) - ((fSlow14 * fRec14[0]) + (fSlow13 * fRec15[0])))); + fRec12[0] = (fRec13[0] + fRec12[1]); + double fTemp20 = (fRec12[0] - fRec13[0]); + fVec0[0] = fTemp20; + fRec16[0] = (fRec16[1] + fVec0[1]); + double fTemp21 = ((((fTemp20 * ((fConst13 / fRec2[0]) + (12.0 * fTemp18))) + (12.0 * (fRec16[0] * fTemp18))) / fTemp19) + (fRec13[0] + fTemp10)); + double fTemp22 = (fConst11 * (fTemp17 * fTemp21)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph4 = FAUSTFLOAT(fRec11[0]); + output4[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (fTemp2 * fTemp5); + double fTemp24 = (fTemp23 * fTemp6); + double fTemp25 = (fConst16 * (fTemp24 * fTemp21)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph5 = FAUSTFLOAT(fRec17[0]); + output5[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = ((3.0 * fTemp3) + -1.0); + double fTemp27 = (1.1180339887498949 * (fTemp21 * fTemp26)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph6 = FAUSTFLOAT(fRec18[0]); + output6[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (fTemp23 * fTemp14); + double fTemp29 = (fConst16 * (fTemp28 * fTemp21)); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph7 = FAUSTFLOAT(fRec19[0]); + output7[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = mydsp_faustpower2_f(fTemp14); + double fTemp31 = ((2.0 * fTemp30) + -1.0); + double fTemp32 = (fConst17 * ((fTemp4 * fTemp21) * fTemp31)); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph8 = FAUSTFLOAT(fRec20[0]); + output8[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = pow(fTemp4, 1.5); + double fTemp34 = (((fConst23 / fRec2[0]) + (6.4594326934833797 * fTemp18)) + 1.0); + fRec25[0] = (fRec25[1] + fRec24[1]); + fRec26[0] = (fRec26[1] + fRec25[1]); + fRec24[0] = (fSlow16 * ((fSlow4 * (((fRec1[0] * fTemp34) * fTemp0) / fRec2[0])) - ((fSlow18 * fRec25[0]) + (fSlow17 * fRec26[0])))); + fRec27[0] = (fRec24[0] + fRec27[1]); + double fTemp35 = (fRec27[0] - fRec24[0]); + fVec1[0] = fTemp35; + fRec28[0] = (fRec28[1] + fVec1[1]); + double fTemp36 = ((fConst22 / fRec2[0]) + 1.0); + fRec29[0] = (fRec29[1] + fRec23[1]); + fRec23[0] = (fSlow15 * (((fRec24[0] + (((fTemp35 * ((fConst24 / fRec2[0]) + (25.837730773933519 * fTemp18))) + (25.837730773933519 * (fRec28[0] * fTemp18))) / fTemp34)) * fTemp36) - (fSlow19 * fRec29[0]))); + fRec22[0] = (fRec23[0] + fRec22[1]); + double fTemp37 = ((fConst21 * ((fRec22[0] - fRec23[0]) / (fRec2[0] * fTemp36))) + (fRec23[0] + fTemp10)); + double fTemp38 = ((4.0 * fTemp30) + -1.0); + double fTemp39 = (fConst20 * (((fTemp6 * fTemp33) * fTemp37) * fTemp38)); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph9 = FAUSTFLOAT(fRec21[0]); + output9[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (fTemp2 * fTemp4); + double fTemp41 = (fConst27 * (((fTemp40 * fTemp6) * fTemp14) * fTemp37)); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph10 = FAUSTFLOAT(fRec30[0]); + output10[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = ((16.925687506432688 * fTemp3) + -3.3851375012865379); + double fTemp43 = (fConst28 * ((fTemp7 * fTemp37) * fTemp42)); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph11 = FAUSTFLOAT(fRec31[0]); + output11[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = ((2.5 * fTemp26) + -2.0); + double fTemp45 = (0.88191710368819687 * ((fTemp2 * fTemp37) * fTemp44)); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph12 = FAUSTFLOAT(fRec32[0]); + output12[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (fConst28 * ((fTemp15 * fTemp37) * fTemp42)); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph13 = FAUSTFLOAT(fRec33[0]); + output13[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (fConst29 * ((fTemp40 * fTemp31) * fTemp37)); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph14 = FAUSTFLOAT(fRec34[0]); + output14[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = ((2.0 * fTemp31) + -1.0); + double fTemp49 = (fConst20 * (((fTemp14 * fTemp33) * fTemp37) * fTemp48)); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + fVbargraph15 = FAUSTFLOAT(fRec35[0]); + output15[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = mydsp_faustpower2_f(fTemp4); + double fTemp51 = (((fConst32 / fRec2[0]) + (11.4878004768713 * fTemp18)) + 1.0); + fRec40[0] = (fRec40[1] + fRec39[1]); fRec41[0] = (fRec41[1] + fRec40[1]); - fRec34[0] = (fSlow76 * ((fSlow77 * (fRec35[0] + (fSlow83 * ((fSlow85 * fTemp23) + (fSlow84 * fRec39[0]))))) - ((fSlow87 * fRec40[0]) + (fSlow86 * fRec41[0])))); - fRec42[0] = (fRec34[0] + fRec42[1]); - double fTemp24 = (fRec42[0] - fRec34[0]); - fVec3[0] = fTemp24; - fRec43[0] = (fRec43[1] + fVec3[1]); - double fTemp25 = ((fRec34[0] + fTemp2) + (fSlow88 * ((fSlow90 * fTemp24) + (fSlow89 * fRec43[0])))); - double fTemp26 = (fSlow75 * fTemp25); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph16 = FAUSTFLOAT(fRec33[0]); - output16[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (fSlow91 * fTemp25); - fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph17 = FAUSTFLOAT(fRec44[0]); - output17[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (fSlow93 * fTemp25); - fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); - fVbargraph18 = FAUSTFLOAT(fRec45[0]); - output18[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (fSlow95 * fTemp25); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph19 = FAUSTFLOAT(fRec46[0]); - output19[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fSlow96 * fTemp25); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph20 = FAUSTFLOAT(fRec47[0]); - output20[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (fSlow97 * fTemp25); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); - fVbargraph21 = FAUSTFLOAT(fRec48[0]); - output21[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (fSlow98 * fTemp25); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); - fVbargraph22 = FAUSTFLOAT(fRec49[0]); - output22[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (fSlow99 * fTemp25); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); - fVbargraph23 = FAUSTFLOAT(fRec50[0]); - output23[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (fSlow100 * fTemp25); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); - fVbargraph24 = FAUSTFLOAT(fRec51[0]); - output24[i] = FAUSTFLOAT(fTemp34); + fRec39[0] = (fSlow21 * ((fSlow4 * (((fRec1[0] * fTemp51) * fTemp0) / fRec2[0])) - ((fSlow23 * fRec40[0]) + (fSlow22 * fRec41[0])))); + fRec42[0] = (fRec39[0] + fRec42[1]); + double fTemp52 = (fRec42[0] - fRec39[0]); + fVec2[0] = fTemp52; + fRec43[0] = (fRec43[1] + fVec2[1]); + double fTemp53 = (((fConst31 / fRec2[0]) + (9.1401308902779004 * fTemp18)) + 1.0); + fRec44[0] = (fRec44[1] + fRec38[1]); + fRec45[0] = (fRec45[1] + fRec44[1]); + fRec38[0] = (fSlow20 * (((fRec39[0] + (((fTemp52 * ((fConst33 / fRec2[0]) + (45.951201907485199 * fTemp18))) + (45.951201907485199 * (fRec43[0] * fTemp18))) / fTemp51)) * fTemp53) - ((fSlow25 * fRec44[0]) + (fSlow24 * fRec45[0])))); + fRec37[0] = (fRec38[0] + fRec37[1]); + double fTemp54 = (fRec37[0] - fRec38[0]); + fVec3[0] = fTemp54; + fRec46[0] = (fRec46[1] + fVec3[1]); + double fTemp55 = ((((fTemp54 * ((fConst34 / fRec2[0]) + (36.560523561111602 * fTemp18))) + (36.560523561111602 * (fRec46[0] * fTemp18))) / fTemp53) + (fRec38[0] + fTemp10)); + double fTemp56 = (fConst30 * (((fTemp50 * fTemp6) * fTemp55) * (0.0 - (2.0 * (fTemp14 * (1.0 - fTemp38)))))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + fVbargraph16 = FAUSTFLOAT(fRec36[0]); + output16[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (fConst35 * ((((fTemp2 * fTemp6) * fTemp33) * fTemp38) * fTemp55)); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + fVbargraph17 = FAUSTFLOAT(fRec47[0]); + output17[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = ((78.986541696685876 * fTemp3) + -11.283791670955125); + double fTemp59 = (fConst37 * ((fTemp17 * fTemp55) * fTemp58)); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + fVbargraph18 = FAUSTFLOAT(fRec48[0]); + output18[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = ((3.5 * fTemp42) + -13.540550005146152); + double fTemp61 = (fConst38 * ((fTemp24 * fTemp55) * fTemp60)); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph19 = FAUSTFLOAT(fRec49[0]); + output19[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (0.75 * (fTemp55 * ((2.333333333333333 * (fTemp3 * fTemp44)) - (1.5 * fTemp26)))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph20 = FAUSTFLOAT(fRec50[0]); + output20[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = (fConst38 * ((fTemp28 * fTemp55) * fTemp60)); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + fVbargraph21 = FAUSTFLOAT(fRec51[0]); + output21[i] = FAUSTFLOAT(fTemp63); + double fTemp64 = (fConst39 * (((fTemp4 * fTemp31) * fTemp55) * fTemp58)); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph22 = FAUSTFLOAT(fRec52[0]); + output22[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = (fConst35 * ((((fTemp2 * fTemp14) * fTemp33) * fTemp48) * fTemp55)); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); + fVbargraph23 = FAUSTFLOAT(fRec53[0]); + output23[i] = FAUSTFLOAT(fTemp65); + double fTemp66 = (fConst30 * ((fTemp50 * fTemp55) * (1.0 - (2.0 * (fTemp30 * (1.0 - fTemp48)))))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph24 = FAUSTFLOAT(fRec54[0]); + output24[i] = FAUSTFLOAT(fTemp66); fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec10[1] = fRec10[0]; - fRec11[1] = fRec11[0]; + fRec6[1] = fRec6[0]; + fRec3[1] = fRec3[0]; fRec9[1] = fRec9[0]; - fRec12[1] = fRec12[0]; - fVec0[1] = fVec0[0]; - fRec13[1] = fRec13[0]; - fRec8[1] = fRec8[0]; + fRec10[1] = fRec10[0]; fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fVec0[1] = fVec0[0]; fRec16[1] = fRec16[0]; + fRec11[1] = fRec11[0]; fRec17[1] = fRec17[0]; - fRec22[1] = fRec22[0]; - fRec23[1] = fRec23[0]; - fRec21[1] = fRec21[0]; - fRec24[1] = fRec24[0]; - fVec1[1] = fVec1[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; - fRec20[1] = fRec20[0]; - fRec19[1] = fRec19[0]; - fRec18[1] = fRec18[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; + fVec1[1] = fVec1[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec21[1] = fRec21[0]; fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; - fRec36[1] = fRec36[0]; - fRec37[1] = fRec37[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; fRec35[1] = fRec35[0]; - fRec38[1] = fRec38[0]; - fVec2[1] = fVec2[0]; - fRec39[1] = fRec39[0]; fRec40[1] = fRec40[0]; fRec41[1] = fRec41[0]; - fRec34[1] = fRec34[0]; + fRec39[1] = fRec39[0]; fRec42[1] = fRec42[0]; - fVec3[1] = fVec3[0]; + fVec2[1] = fVec2[0]; fRec43[1] = fRec43[0]; - fRec33[1] = fRec33[0]; fRec44[1] = fRec44[0]; fRec45[1] = fRec45[0]; + fRec38[1] = fRec38[0]; + fRec37[1] = fRec37[0]; + fVec3[1] = fVec3[0]; fRec46[1] = fRec46[0]; + fRec36[1] = fRec36[0]; fRec47[1] = fRec47[0]; fRec48[1] = fRec48[0]; fRec49[1] = fRec49[0]; fRec50[1] = fRec50[0]; fRec51[1] = fRec51[0]; + fRec52[1] = fRec52[0]; + fRec53[1] = fRec53[0]; + fRec54[1] = fRec54[0]; } @@ -1951,7 +1929,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2014,7 +1992,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2043,9 +2021,9 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } #ifdef SUPERNOVA diff --git a/source/HOAUGens/HOAEncoder5.cpp b/source/HOAUGens/HOAEncoder5.cpp index e02348664c..e898ea2444 100644 --- a/source/HOAUGens/HOAEncoder5.cpp +++ b/source/HOAUGens/HOAEncoder5.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder5" version: "1.0" -Code generated with Faust 2.5.12 (https://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -31,9 +31,9 @@ Compilation options: cpp, -double -ftz 0 // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -639,11 +639,12 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; + FAUSTFLOAT fHslider0; + double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; - FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec1[2]; + double fRec2[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; @@ -651,17 +652,19 @@ class mydsp : public dsp { double fConst4; double fConst5; FAUSTFLOAT fHslider2; + double fRec4[2]; FAUSTFLOAT fHslider3; + double fRec5[2]; double fConst6; double fConst7; - double fRec5[2]; - double fRec4[2]; + double fRec8[2]; + double fRec7[2]; + double fRec6[2]; double fRec3[2]; - double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec6[2]; + double fRec9[2]; FAUSTFLOAT fVbargraph2; - double fRec7[2]; + double fRec10[2]; FAUSTFLOAT fVbargraph3; double fConst8; double fConst9; @@ -669,25 +672,25 @@ class mydsp : public dsp { double fConst11; double fConst12; double fConst13; - double fRec10[2]; - double fRec11[2]; - double fRec9[2]; + double fRec14[2]; + double fRec15[2]; + double fRec13[2]; double fRec12[2]; double fVec0[2]; - double fRec13[2]; - double fRec8[2]; + double fRec16[2]; + double fRec11[2]; FAUSTFLOAT fVbargraph4; double fConst14; double fConst15; double fConst16; - double fRec14[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph5; - double fRec15[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph6; - double fRec16[2]; + double fRec19[2]; FAUSTFLOAT fVbargraph7; double fConst17; - double fRec17[2]; + double fRec20[2]; FAUSTFLOAT fVbargraph8; double fConst18; double fConst19; @@ -696,33 +699,33 @@ class mydsp : public dsp { double fConst22; double fConst23; double fConst24; - double fRec22[2]; - double fRec23[2]; - double fRec21[2]; - double fRec24[2]; - double fVec1[2]; double fRec25[2]; double fRec26[2]; - double fRec20[2]; - double fRec19[2]; - double fRec18[2]; + double fRec24[2]; + double fRec27[2]; + double fVec1[2]; + double fRec28[2]; + double fRec29[2]; + double fRec23[2]; + double fRec22[2]; + double fRec21[2]; FAUSTFLOAT fVbargraph9; double fConst25; double fConst26; double fConst27; - double fRec27[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph10; double fConst28; - double fRec28[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph11; - double fRec29[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph12; - double fRec30[2]; + double fRec33[2]; FAUSTFLOAT fVbargraph13; double fConst29; - double fRec31[2]; + double fRec34[2]; FAUSTFLOAT fVbargraph14; - double fRec32[2]; + double fRec35[2]; FAUSTFLOAT fVbargraph15; double fConst30; double fConst31; @@ -730,42 +733,42 @@ class mydsp : public dsp { double fConst33; double fConst34; double fConst35; - double fRec36[2]; - double fRec37[2]; - double fRec35[2]; - double fRec38[2]; - double fVec2[2]; - double fRec39[2]; - double fConst36; double fRec40[2]; double fRec41[2]; - double fRec34[2]; + double fRec39[2]; double fRec42[2]; - double fVec3[2]; + double fVec2[2]; double fRec43[2]; - double fRec33[2]; + double fConst36; + double fRec44[2]; + double fRec45[2]; + double fRec38[2]; + double fRec37[2]; + double fVec3[2]; + double fRec46[2]; + double fRec36[2]; FAUSTFLOAT fVbargraph16; double fConst37; double fConst38; - double fRec44[2]; + double fRec47[2]; FAUSTFLOAT fVbargraph17; double fConst39; double fConst40; - double fRec45[2]; + double fRec48[2]; FAUSTFLOAT fVbargraph18; double fConst41; - double fRec46[2]; + double fRec49[2]; FAUSTFLOAT fVbargraph19; - double fRec47[2]; + double fRec50[2]; FAUSTFLOAT fVbargraph20; - double fRec48[2]; + double fRec51[2]; FAUSTFLOAT fVbargraph21; double fConst42; - double fRec49[2]; + double fRec52[2]; FAUSTFLOAT fVbargraph22; - double fRec50[2]; + double fRec53[2]; FAUSTFLOAT fVbargraph23; - double fRec51[2]; + double fRec54[2]; FAUSTFLOAT fVbargraph24; double fConst43; double fConst44; @@ -773,49 +776,49 @@ class mydsp : public dsp { double fConst46; double fConst47; double fConst48; - double fRec57[2]; - double fRec58[2]; - double fRec56[2]; - double fRec59[2]; - double fVec4[2]; double fRec60[2]; - double fConst49; double fRec61[2]; + double fRec59[2]; double fRec62[2]; - double fRec55[2]; + double fVec4[2]; double fRec63[2]; - double fVec5[2]; + double fConst49; double fRec64[2]; double fRec65[2]; - double fRec54[2]; - double fRec53[2]; - double fRec52[2]; + double fRec58[2]; + double fRec66[2]; + double fVec5[2]; + double fRec67[2]; + double fRec68[2]; + double fRec57[2]; + double fRec56[2]; + double fRec55[2]; FAUSTFLOAT fVbargraph25; double fConst50; - double fRec66[2]; + double fRec69[2]; FAUSTFLOAT fVbargraph26; double fConst51; - double fRec67[2]; + double fRec70[2]; FAUSTFLOAT fVbargraph27; double fConst52; double fConst53; - double fRec68[2]; + double fRec71[2]; FAUSTFLOAT fVbargraph28; double fConst54; - double fRec69[2]; + double fRec72[2]; FAUSTFLOAT fVbargraph29; - double fRec70[2]; + double fRec73[2]; FAUSTFLOAT fVbargraph30; - double fRec71[2]; + double fRec74[2]; FAUSTFLOAT fVbargraph31; double fConst55; - double fRec72[2]; + double fRec75[2]; FAUSTFLOAT fVbargraph32; - double fRec73[2]; + double fRec76[2]; FAUSTFLOAT fVbargraph33; - double fRec74[2]; + double fRec77[2]; FAUSTFLOAT fVbargraph34; - double fRec75[2]; + double fRec78[2]; FAUSTFLOAT fVbargraph35; public: @@ -1055,7 +1058,7 @@ class mydsp : public dsp { fConst13 = (1020.0 / fConst0); fConst14 = double(tgamma(2.0)); fConst15 = double(tgamma(4.0)); - fConst16 = (4.7873073648171927 * (fConst4 * sqrt((5.0 * (fConst14 / fConst15))))); + fConst16 = (4.7873073648171927 * (sqrt((5.0 * (fConst14 / fConst15))) * fConst4)); fConst17 = (3.1915382432114616 * fConst10); fConst18 = double(tgamma(7.0)); fConst19 = double(tgamma(3.5)); @@ -1065,9 +1068,9 @@ class mydsp : public dsp { fConst23 = (625.22848971356643 / fConst0); fConst24 = (1250.4569794271329 / fConst0); fConst25 = double(tgamma(6.0)); - fConst26 = (fConst9 * sqrt((7.0 * (fConst14 / fConst25)))); + fConst26 = (sqrt((7.0 * (fConst14 / fConst25))) * fConst9); fConst27 = (31.915382432114615 * fConst26); - fConst28 = (0.70710678118654757 * (fConst4 * sqrt((7.0 * (fConst3 / fConst8))))); + fConst28 = (0.70710678118654757 * (sqrt((7.0 * (fConst3 / fConst8))) * fConst4)); fConst29 = (15.957691216057308 * fConst26); fConst30 = double(tgamma(9.0)); fConst31 = double(tgamma(4.5)); @@ -1077,10 +1080,10 @@ class mydsp : public dsp { fConst35 = (1430.5767900821518 / fConst0); fConst36 = (1969.4232099178482 / fConst0); fConst37 = double(tgamma(8.0)); - fConst38 = (44.681535404960464 * (fConst19 * sqrt((9.0 * (fConst14 / fConst37))))); - fConst39 = (fConst9 * sqrt((9.0 * (fConst3 / fConst18)))); + fConst38 = (44.681535404960464 * (sqrt((9.0 * (fConst14 / fConst37))) * fConst19)); + fConst39 = (sqrt((9.0 * (fConst3 / fConst18))) * fConst9); fConst40 = (1.4142135623730951 * fConst39); - fConst41 = (0.47140452079103168 * (fConst4 * sqrt((9.0 * (fConst15 / fConst25))))); + fConst41 = (0.47140452079103168 * (sqrt((9.0 * (fConst15 / fConst25))) * fConst4)); fConst42 = (0.70710678118654757 * fConst39); fConst43 = (25.532305945691693 * (sqrt((11.0 * (fConst2 / double(tgamma(11.0))))) * double(tgamma(5.5)))); fConst44 = (1239.8911224120607 / fConst0); @@ -1089,20 +1092,20 @@ class mydsp : public dsp { fConst47 = (790.3892630817644 / fConst0); fConst48 = (1580.7785261635288 / fConst0); fConst49 = (2279.3303514244003 / fConst0); - fConst50 = (114.89537675561263 * (fConst31 * sqrt((11.0 * (fConst14 / double(tgamma(10.0))))))); - fConst51 = (0.70710678118654757 * (fConst19 * sqrt((11.0 * (fConst3 / fConst30))))); - fConst52 = (fConst9 * sqrt((11.0 * (fConst15 / fConst37)))); + fConst50 = (114.89537675561263 * (sqrt((11.0 * (fConst14 / double(tgamma(10.0))))) * fConst31)); + fConst51 = (0.70710678118654757 * (sqrt((11.0 * (fConst3 / fConst30))) * fConst19)); + fConst52 = (sqrt((11.0 * (fConst15 / fConst37))) * fConst9); fConst53 = (0.94280904158206336 * fConst52); - fConst54 = (0.35355339059327379 * (fConst4 * sqrt((11.0 * (fConst8 / fConst18))))); + fConst54 = (0.35355339059327379 * (sqrt((11.0 * (fConst8 / fConst18))) * fConst4)); fConst55 = (0.47140452079103168 * fConst52); } virtual void instanceResetUserInterface() { + fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider0 = FAUSTFLOAT(2.0); - fHslider1 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(2.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -1114,11 +1117,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec0[l1] = 0.0; + fRec2[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec5[l2] = 0.0; + fRec0[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -1126,39 +1129,39 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec3[l4] = 0.0; + fRec5[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0; + fRec8[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0; + fRec7[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0; + fRec6[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec10[l8] = 0.0; + fRec3[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec11[l9] = 0.0; + fRec9[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec9[l10] = 0.0; + fRec10[l10] = 0.0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec12[l11] = 0.0; + fRec14[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fVec0[l12] = 0.0; + fRec15[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -1166,19 +1169,19 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec8[l14] = 0.0; + fRec12[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec14[l15] = 0.0; + fVec0[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec15[l16] = 0.0; + fRec16[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec16[l17] = 0.0; + fRec11[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -1186,55 +1189,55 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec22[l19] = 0.0; + fRec18[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec23[l20] = 0.0; + fRec19[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec21[l21] = 0.0; + fRec20[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec24[l22] = 0.0; + fRec25[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fVec1[l23] = 0.0; + fRec26[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec25[l24] = 0.0; + fRec24[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec26[l25] = 0.0; + fRec27[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec20[l26] = 0.0; + fVec1[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec19[l27] = 0.0; + fRec28[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec18[l28] = 0.0; + fRec29[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec27[l29] = 0.0; + fRec23[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec28[l30] = 0.0; + fRec22[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec29[l31] = 0.0; + fRec21[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { @@ -1250,11 +1253,11 @@ class mydsp : public dsp { } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec36[l35] = 0.0; + fRec33[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec37[l36] = 0.0; + fRec34[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { @@ -1262,11 +1265,11 @@ class mydsp : public dsp { } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec38[l38] = 0.0; + fRec40[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fVec2[l39] = 0.0; + fRec41[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { @@ -1274,43 +1277,43 @@ class mydsp : public dsp { } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec40[l41] = 0.0; + fRec42[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec41[l42] = 0.0; + fVec2[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec34[l43] = 0.0; + fRec43[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec42[l44] = 0.0; + fRec44[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fVec3[l45] = 0.0; + fRec45[l45] = 0.0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec43[l46] = 0.0; + fRec38[l46] = 0.0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec33[l47] = 0.0; + fRec37[l47] = 0.0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fRec44[l48] = 0.0; + fVec3[l48] = 0.0; } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec45[l49] = 0.0; + fRec46[l49] = 0.0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - fRec46[l50] = 0.0; + fRec36[l50] = 0.0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { @@ -1334,79 +1337,79 @@ class mydsp : public dsp { } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec57[l56] = 0.0; + fRec52[l56] = 0.0; } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec58[l57] = 0.0; + fRec53[l57] = 0.0; } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec56[l58] = 0.0; + fRec54[l58] = 0.0; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { - fRec59[l59] = 0.0; + fRec60[l59] = 0.0; } for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { - fVec4[l60] = 0.0; + fRec61[l60] = 0.0; } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - fRec60[l61] = 0.0; + fRec59[l61] = 0.0; } for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { - fRec61[l62] = 0.0; + fRec62[l62] = 0.0; } for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { - fRec62[l63] = 0.0; + fVec4[l63] = 0.0; } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - fRec55[l64] = 0.0; + fRec63[l64] = 0.0; } for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { - fRec63[l65] = 0.0; + fRec64[l65] = 0.0; } for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fVec5[l66] = 0.0; + fRec65[l66] = 0.0; } for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - fRec64[l67] = 0.0; + fRec58[l67] = 0.0; } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { - fRec65[l68] = 0.0; + fRec66[l68] = 0.0; } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { - fRec54[l69] = 0.0; + fVec5[l69] = 0.0; } for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { - fRec53[l70] = 0.0; + fRec67[l70] = 0.0; } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec52[l71] = 0.0; + fRec68[l71] = 0.0; } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { - fRec66[l72] = 0.0; + fRec57[l72] = 0.0; } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { - fRec67[l73] = 0.0; + fRec56[l73] = 0.0; } for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { - fRec68[l74] = 0.0; + fRec55[l74] = 0.0; } for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { @@ -1437,6 +1440,18 @@ class mydsp : public dsp { fRec75[l81] = 0.0; } + for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + fRec76[l82] = 0.0; + + } + for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + fRec77[l83] = 0.0; + + } + for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + fRec78[l84] = 0.0; + + } } @@ -1462,22 +1477,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder5"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider1, "0+1", ""); - ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider0, "0+2", ""); - ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "0+1", ""); + ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -1487,161 +1502,161 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); - ui_interface->openHorizontalBox("Outputs"); + ui_interface->openVerticalBox("Outputs"); ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceef8d4d90", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30aa9c0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceef8e7ea0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30c47b0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceef8ecbc0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30ca0e0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceef8f2090", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30d02d0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa0ab00", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30e7eb0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa11c00", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30f01d0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa170e0", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30f6440", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa1c4a0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30fc150", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa228e0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3103380", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa3d560", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3121fd0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa43f50", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3129ed0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa4a3f0", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3131430", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa4fb50", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31379e0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa54b30", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x313d6a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa5a4d0", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3143d00", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa5ff10", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x314a600", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa80a50", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x316fd90", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa871d0", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3177810", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa8d9d0", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x317f160", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa93e50", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31866b0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa99840", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x318cfa0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefa9e980", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3192e20", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefaa3fa0", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3199440", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefaa93c0", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x319f840", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefaaf010", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31a6410", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefad5dc0", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31d2d90", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefadc530", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31da630", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefae29b0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31e1d60", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefae9190", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31e96a0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefaefa70", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31f1170", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefaf5560", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31f7be0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefafa800", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31fdc20", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefb03f00", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3204230", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefb09300", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x320a610", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefb0e7b0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32108f0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x7fceefb141f0", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32172b0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1687,428 +1702,369 @@ class mydsp : public dsp { FAUSTFLOAT* output33 = outputs[33]; FAUSTFLOAT* output34 = outputs[34]; FAUSTFLOAT* output35 = outputs[35]; - double fSlow0 = double(fCheckbox0); - double fSlow1 = (1.0 - fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fSlow0 * fSlow2); - double fSlow4 = double(fHslider0); - double fSlow5 = (fSlow1 + (fSlow3 / fSlow4)); - double fSlow6 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow7 = double(fHslider2); - double fSlow8 = sin(fSlow7); - double fSlow9 = sin(double(fHslider3)); - double fSlow10 = mydsp_faustpower2_f(fSlow9); - double fSlow11 = (1.0 - fSlow10); - double fSlow12 = pow(fSlow11, 0.5); - double fSlow13 = (fSlow8 * fSlow12); - double fSlow14 = (fConst5 * fSlow13); - double fSlow15 = (fConst7 / fSlow4); - double fSlow16 = (fSlow15 + 1.0); - double fSlow17 = (fConst6 / (fSlow4 * fSlow16)); - double fSlow18 = (fConst7 / fSlow2); - double fSlow19 = (1.0 / (fSlow18 + 1.0)); - double fSlow20 = ((fSlow3 * fSlow16) / fSlow4); - double fSlow21 = (fConst6 / fSlow2); - double fSlow22 = (1.7320508075688772 * fSlow9); - double fSlow23 = cos(fSlow7); - double fSlow24 = (fSlow23 * fSlow12); - double fSlow25 = (fConst5 * fSlow24); - double fSlow26 = ((fSlow23 * fSlow11) * fSlow8); - double fSlow27 = (fConst11 * fSlow26); - double fSlow28 = mydsp_faustpower2_f(fSlow18); - double fSlow29 = (1.0 / (((fConst12 / fSlow2) + (3.0 * fSlow28)) + 1.0)); - double fSlow30 = mydsp_faustpower2_f(fSlow15); - double fSlow31 = (((fConst12 / fSlow4) + (3.0 * fSlow30)) + 1.0); - double fSlow32 = ((fSlow3 * fSlow31) / fSlow4); - double fSlow33 = (12.0 * fSlow28); - double fSlow34 = (fSlow33 + (fConst13 / fSlow2)); - double fSlow35 = (1.0 / fSlow31); - double fSlow36 = (12.0 * fSlow30); - double fSlow37 = ((fConst13 / fSlow4) + fSlow36); - double fSlow38 = (fSlow9 * fSlow8); - double fSlow39 = (fSlow38 * fSlow12); - double fSlow40 = (fConst16 * fSlow39); - double fSlow41 = ((3.0 * fSlow10) + -1.0); - double fSlow42 = (1.1180339887498949 * fSlow41); - double fSlow43 = (fSlow23 * fSlow9); - double fSlow44 = (fSlow43 * fSlow12); - double fSlow45 = (fConst16 * fSlow44); - double fSlow46 = mydsp_faustpower2_f(fSlow23); - double fSlow47 = ((2.0 * fSlow46) + -1.0); - double fSlow48 = (fSlow11 * fSlow47); - double fSlow49 = (fConst17 * fSlow48); - double fSlow50 = pow(fSlow11, 1.5); - double fSlow51 = ((4.0 * fSlow46) + -1.0); - double fSlow52 = ((fSlow8 * fSlow50) * fSlow51); - double fSlow53 = (fConst20 * fSlow52); - double fSlow54 = ((fConst22 / fSlow4) + 1.0); - double fSlow55 = (fConst21 / (fSlow4 * fSlow54)); - double fSlow56 = (1.0 / ((fConst22 / fSlow2) + 1.0)); - double fSlow57 = (1.0 / (((fConst23 / fSlow2) + (6.4594326934833797 * fSlow28)) + 1.0)); - double fSlow58 = (((fConst23 / fSlow4) + (6.4594326934833797 * fSlow30)) + 1.0); - double fSlow59 = ((fSlow3 * fSlow58) / fSlow4); - double fSlow60 = (25.837730773933519 * fSlow28); - double fSlow61 = (fSlow60 + (fConst24 / fSlow2)); - double fSlow62 = (1.0 / fSlow58); - double fSlow63 = (25.837730773933519 * fSlow30); - double fSlow64 = ((fConst24 / fSlow4) + fSlow63); - double fSlow65 = (fConst21 / fSlow2); - double fSlow66 = ((fSlow43 * fSlow11) * fSlow8); - double fSlow67 = (fConst27 * fSlow66); - double fSlow68 = ((16.925687506432688 * fSlow10) + -3.3851375012865379); - double fSlow69 = (fConst28 * (fSlow13 * fSlow68)); - double fSlow70 = ((2.5 * fSlow41) + -2.0); - double fSlow71 = (0.88191710368819687 * (fSlow9 * fSlow70)); - double fSlow72 = (fConst28 * (fSlow24 * fSlow68)); - double fSlow73 = ((fSlow9 * fSlow11) * fSlow47); - double fSlow74 = (fConst29 * fSlow73); - double fSlow75 = ((2.0 * fSlow47) + -1.0); - double fSlow76 = ((fSlow23 * fSlow50) * fSlow75); - double fSlow77 = (fConst20 * fSlow76); - double fSlow78 = mydsp_faustpower2_f(fSlow11); - double fSlow79 = (0.0 - (2.0 * (fSlow23 * (1.0 - fSlow51)))); - double fSlow80 = (fConst32 * ((fSlow78 * fSlow8) * fSlow79)); - double fSlow81 = (1.0 / (((fConst33 / fSlow2) + (9.1401308902779004 * fSlow28)) + 1.0)); - double fSlow82 = (((fConst33 / fSlow4) + (9.1401308902779004 * fSlow30)) + 1.0); - double fSlow83 = (1.0 / (((fConst34 / fSlow2) + (11.4878004768713 * fSlow28)) + 1.0)); - double fSlow84 = (((fConst34 / fSlow4) + (11.4878004768713 * fSlow30)) + 1.0); - double fSlow85 = ((fSlow3 * fSlow84) / fSlow4); - double fSlow86 = (45.951201907485199 * fSlow28); - double fSlow87 = (fSlow86 + (fConst35 / fSlow2)); - double fSlow88 = (1.0 / fSlow84); - double fSlow89 = (45.951201907485199 * fSlow30); - double fSlow90 = ((fConst35 / fSlow4) + fSlow89); - double fSlow91 = (36.560523561111602 * fSlow28); - double fSlow92 = (fSlow91 + (fConst36 / fSlow2)); - double fSlow93 = (1.0 / fSlow82); - double fSlow94 = (36.560523561111602 * fSlow30); - double fSlow95 = ((fConst36 / fSlow4) + fSlow94); - double fSlow96 = (fConst38 * ((fSlow38 * fSlow50) * fSlow51)); - double fSlow97 = ((78.986541696685876 * fSlow10) + -11.283791670955125); - double fSlow98 = (fConst40 * (fSlow26 * fSlow97)); - double fSlow99 = ((3.5 * fSlow68) + -13.540550005146152); - double fSlow100 = (fConst41 * (fSlow39 * fSlow99)); - double fSlow101 = ((2.333333333333333 * (fSlow10 * fSlow70)) - (1.5 * fSlow41)); - double fSlow102 = (0.75 * fSlow101); - double fSlow103 = (fConst41 * (fSlow44 * fSlow99)); - double fSlow104 = (fConst42 * (fSlow48 * fSlow97)); - double fSlow105 = (fConst38 * ((fSlow43 * fSlow50) * fSlow75)); - double fSlow106 = (1.0 - (2.0 * (fSlow46 * (1.0 - fSlow75)))); - double fSlow107 = (fConst32 * (fSlow78 * fSlow106)); - double fSlow108 = pow(fSlow11, 2.5); - double fSlow109 = (fConst43 * ((fSlow8 * fSlow108) * ((fSlow23 * ((2.0 * fSlow79) - (4.0 * fSlow23))) + 1.0))); - double fSlow110 = ((fConst45 / fSlow4) + 1.0); - double fSlow111 = (fConst44 / (fSlow4 * fSlow110)); - double fSlow112 = (1.0 / ((fConst45 / fSlow2) + 1.0)); - double fSlow113 = (1.0 / (((fConst46 / fSlow2) + (14.272480513280099 * fSlow28)) + 1.0)); - double fSlow114 = (((fConst46 / fSlow4) + (14.272480513280099 * fSlow30)) + 1.0); - double fSlow115 = (1.0 / (((fConst47 / fSlow2) + (18.1563153134523 * fSlow28)) + 1.0)); - double fSlow116 = (((fConst47 / fSlow4) + (18.1563153134523 * fSlow30)) + 1.0); - double fSlow117 = ((fSlow3 * fSlow116) / fSlow4); - double fSlow118 = (72.6252612538092 * fSlow28); - double fSlow119 = (fSlow118 + (fConst48 / fSlow2)); - double fSlow120 = (1.0 / fSlow116); - double fSlow121 = (72.6252612538092 * fSlow30); - double fSlow122 = ((fConst48 / fSlow4) + fSlow121); - double fSlow123 = (57.089922053120397 * fSlow28); - double fSlow124 = (fSlow123 + (fConst49 / fSlow2)); - double fSlow125 = (1.0 / fSlow114); - double fSlow126 = (57.089922053120397 * fSlow30); - double fSlow127 = ((fConst49 / fSlow4) + fSlow126); - double fSlow128 = (fConst44 / fSlow2); - double fSlow129 = (fSlow9 * fSlow78); - double fSlow130 = (fConst50 * ((fSlow129 * fSlow8) * fSlow79)); - double fSlow131 = ((284.35155010806915 * fSlow10) + -31.594616678674353); - double fSlow132 = (fConst51 * (fSlow52 * fSlow131)); - double fSlow133 = ((4.5 * fSlow97) + -67.702750025730751); - double fSlow134 = (fConst53 * (fSlow66 * fSlow133)); - double fSlow135 = ((3.0 * (fSlow10 * fSlow99)) - (2.5 * fSlow68)); - double fSlow136 = (fConst54 * (fSlow13 * fSlow135)); - double fSlow137 = (0.66332495807108005 * (fSlow9 * ((2.25 * fSlow101) - (1.3333333333333333 * fSlow70)))); - double fSlow138 = (fConst54 * (fSlow24 * fSlow135)); - double fSlow139 = (fConst55 * (fSlow73 * fSlow133)); - double fSlow140 = (fConst51 * (fSlow76 * fSlow131)); - double fSlow141 = (fConst50 * (fSlow129 * fSlow106)); - double fSlow142 = (fConst43 * ((fSlow23 * fSlow108) * ((2.0 * fSlow106) - fSlow75))); + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); + double fSlow1 = double(fCheckbox0); + double fSlow2 = (1.0 - fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fSlow1 * fSlow3); + double fSlow5 = (0.0010000000000000009 * double(fHslider1)); + double fSlow6 = (0.0010000000000000009 * double(fHslider2)); + double fSlow7 = (0.0010000000000000009 * double(fHslider3)); + double fSlow8 = (fConst7 / fSlow3); + double fSlow9 = (1.0 / (fSlow8 + 1.0)); + double fSlow10 = (fConst6 / fSlow3); + double fSlow11 = mydsp_faustpower2_f(fSlow8); + double fSlow12 = (1.0 / (((fConst12 / fSlow3) + (3.0 * fSlow11)) + 1.0)); + double fSlow13 = (12.0 * fSlow11); + double fSlow14 = (fSlow13 + (fConst13 / fSlow3)); + double fSlow15 = (1.0 / ((fConst22 / fSlow3) + 1.0)); + double fSlow16 = (1.0 / (((fConst23 / fSlow3) + (6.4594326934833797 * fSlow11)) + 1.0)); + double fSlow17 = (25.837730773933519 * fSlow11); + double fSlow18 = (fSlow17 + (fConst24 / fSlow3)); + double fSlow19 = (fConst21 / fSlow3); + double fSlow20 = (1.0 / (((fConst33 / fSlow3) + (9.1401308902779004 * fSlow11)) + 1.0)); + double fSlow21 = (1.0 / (((fConst34 / fSlow3) + (11.4878004768713 * fSlow11)) + 1.0)); + double fSlow22 = (45.951201907485199 * fSlow11); + double fSlow23 = (fSlow22 + (fConst35 / fSlow3)); + double fSlow24 = (36.560523561111602 * fSlow11); + double fSlow25 = (fSlow24 + (fConst36 / fSlow3)); + double fSlow26 = (1.0 / ((fConst45 / fSlow3) + 1.0)); + double fSlow27 = (1.0 / (((fConst46 / fSlow3) + (14.272480513280099 * fSlow11)) + 1.0)); + double fSlow28 = (1.0 / (((fConst47 / fSlow3) + (18.1563153134523 * fSlow11)) + 1.0)); + double fSlow29 = (72.6252612538092 * fSlow11); + double fSlow30 = (fSlow29 + (fConst48 / fSlow3)); + double fSlow31 = (57.089922053120397 * fSlow11); + double fSlow32 = (fSlow31 + (fConst49 / fSlow3)); + double fSlow33 = (fConst44 / fSlow3); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow6 + (0.999 * fRec1[1])); - double fTemp0 = (double(input0[i]) * fRec1[0]); - double fTemp1 = (fSlow5 * fTemp0); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); + fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); + double fTemp0 = double(input0[i]); + double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec5[0] = (fRec5[1] + fRec4[1]); - fRec4[0] = (fSlow19 * ((fSlow20 * fTemp0) - (fSlow21 * fRec5[0]))); - fRec3[0] = (fRec4[0] + fRec3[1]); - double fTemp2 = (fSlow1 * fTemp0); - double fTemp3 = ((fSlow17 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); - double fTemp4 = (fSlow14 * fTemp3); - fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); - fVbargraph1 = FAUSTFLOAT(fRec2[0]); - output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (fSlow22 * fTemp3); - fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); - fVbargraph2 = FAUSTFLOAT(fRec6[0]); - output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (fSlow25 * fTemp3); - fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph3 = FAUSTFLOAT(fRec7[0]); - output3[i] = FAUSTFLOAT(fTemp6); - fRec10[0] = (fRec10[1] + fRec9[1]); - fRec11[0] = (fRec11[1] + fRec10[1]); - fRec9[0] = (fSlow29 * ((fSlow32 * fTemp0) - ((fSlow34 * fRec10[0]) + (fSlow33 * fRec11[0])))); - fRec12[0] = (fRec9[0] + fRec12[1]); - double fTemp7 = (fRec12[0] - fRec9[0]); - fVec0[0] = fTemp7; - fRec13[0] = (fRec13[1] + fVec0[1]); - double fTemp8 = ((fRec9[0] + fTemp2) + (fSlow35 * ((fSlow37 * fTemp7) + (fSlow36 * fRec13[0])))); - double fTemp9 = (fSlow27 * fTemp8); - fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); - fVbargraph4 = FAUSTFLOAT(fRec8[0]); - output4[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (fSlow40 * fTemp8); - fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); - fVbargraph5 = FAUSTFLOAT(fRec14[0]); - output5[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (fSlow42 * fTemp8); - fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph6 = FAUSTFLOAT(fRec15[0]); - output6[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (fSlow45 * fTemp8); - fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph7 = FAUSTFLOAT(fRec16[0]); - output7[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (fSlow49 * fTemp8); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph8 = FAUSTFLOAT(fRec17[0]); - output8[i] = FAUSTFLOAT(fTemp13); - fRec22[0] = (fRec22[1] + fRec21[1]); - fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow57 * ((fSlow59 * fTemp0) - ((fSlow61 * fRec22[0]) + (fSlow60 * fRec23[0])))); - fRec24[0] = (fRec21[0] + fRec24[1]); - double fTemp14 = (fRec24[0] - fRec21[0]); - fVec1[0] = fTemp14; - fRec25[0] = (fRec25[1] + fVec1[1]); - fRec26[0] = (fRec26[1] + fRec20[1]); - fRec20[0] = (fSlow56 * ((fSlow54 * (fRec21[0] + (fSlow62 * ((fSlow64 * fTemp14) + (fSlow63 * fRec25[0]))))) - (fSlow65 * fRec26[0]))); - fRec19[0] = (fRec20[0] + fRec19[1]); - double fTemp15 = ((fSlow55 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); - double fTemp16 = (fSlow53 * fTemp15); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph9 = FAUSTFLOAT(fRec18[0]); - output9[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (fSlow67 * fTemp15); - fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); - fVbargraph10 = FAUSTFLOAT(fRec27[0]); - output10[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (fSlow69 * fTemp15); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); - fVbargraph11 = FAUSTFLOAT(fRec28[0]); - output11[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (fSlow71 * fTemp15); - fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); - fVbargraph12 = FAUSTFLOAT(fRec29[0]); - output12[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (fSlow72 * fTemp15); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); - fVbargraph13 = FAUSTFLOAT(fRec30[0]); - output13[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (fSlow74 * fTemp15); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph14 = FAUSTFLOAT(fRec31[0]); - output14[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (fSlow77 * fTemp15); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph15 = FAUSTFLOAT(fRec32[0]); - output15[i] = FAUSTFLOAT(fTemp22); - fRec36[0] = (fRec36[1] + fRec35[1]); - fRec37[0] = (fRec37[1] + fRec36[1]); - fRec35[0] = (fSlow83 * ((fSlow85 * fTemp0) - ((fSlow87 * fRec36[0]) + (fSlow86 * fRec37[0])))); - fRec38[0] = (fRec35[0] + fRec38[1]); - double fTemp23 = (fRec38[0] - fRec35[0]); - fVec2[0] = fTemp23; - fRec39[0] = (fRec39[1] + fVec2[1]); - fRec40[0] = (fRec40[1] + fRec34[1]); + fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); + double fTemp2 = sin(fRec4[0]); + double fTemp3 = mydsp_faustpower2_f(fTemp2); + double fTemp4 = (1.0 - fTemp3); + double fTemp5 = pow(fTemp4, 0.5); + fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); + double fTemp6 = sin(fRec5[0]); + double fTemp7 = (fTemp5 * fTemp6); + double fTemp8 = (fConst7 / fRec2[0]); + double fTemp9 = (fTemp8 + 1.0); + fRec8[0] = (fRec8[1] + fRec7[1]); + fRec7[0] = (fSlow9 * ((fSlow4 * (((fRec1[0] * fTemp9) * fTemp0) / fRec2[0])) - (fSlow10 * fRec8[0]))); + fRec6[0] = (fRec7[0] + fRec6[1]); + double fTemp10 = (fSlow2 * (fRec1[0] * fTemp0)); + double fTemp11 = ((fConst6 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp9))) + (fRec7[0] + fTemp10)); + double fTemp12 = (fConst5 * (fTemp7 * fTemp11)); + fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph1 = FAUSTFLOAT(fRec3[0]); + output1[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (1.7320508075688772 * (fTemp2 * fTemp11)); + fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph2 = FAUSTFLOAT(fRec9[0]); + output2[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = cos(fRec5[0]); + double fTemp15 = (fTemp5 * fTemp14); + double fTemp16 = (fConst5 * (fTemp15 * fTemp11)); + fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph3 = FAUSTFLOAT(fRec10[0]); + output3[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = ((fTemp4 * fTemp6) * fTemp14); + double fTemp18 = mydsp_faustpower2_f(fTemp8); + double fTemp19 = (((fConst12 / fRec2[0]) + (3.0 * fTemp18)) + 1.0); + fRec14[0] = (fRec14[1] + fRec13[1]); + fRec15[0] = (fRec15[1] + fRec14[1]); + fRec13[0] = (fSlow12 * ((fSlow4 * (((fRec1[0] * fTemp19) * fTemp0) / fRec2[0])) - ((fSlow14 * fRec14[0]) + (fSlow13 * fRec15[0])))); + fRec12[0] = (fRec13[0] + fRec12[1]); + double fTemp20 = (fRec12[0] - fRec13[0]); + fVec0[0] = fTemp20; + fRec16[0] = (fRec16[1] + fVec0[1]); + double fTemp21 = ((((fTemp20 * ((fConst13 / fRec2[0]) + (12.0 * fTemp18))) + (12.0 * (fRec16[0] * fTemp18))) / fTemp19) + (fRec13[0] + fTemp10)); + double fTemp22 = (fConst11 * (fTemp17 * fTemp21)); + fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph4 = FAUSTFLOAT(fRec11[0]); + output4[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (fTemp2 * fTemp5); + double fTemp24 = (fTemp23 * fTemp6); + double fTemp25 = (fConst16 * (fTemp24 * fTemp21)); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + fVbargraph5 = FAUSTFLOAT(fRec17[0]); + output5[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = ((3.0 * fTemp3) + -1.0); + double fTemp27 = (1.1180339887498949 * (fTemp21 * fTemp26)); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph6 = FAUSTFLOAT(fRec18[0]); + output6[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (fTemp23 * fTemp14); + double fTemp29 = (fConst16 * (fTemp28 * fTemp21)); + fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph7 = FAUSTFLOAT(fRec19[0]); + output7[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = mydsp_faustpower2_f(fTemp14); + double fTemp31 = ((2.0 * fTemp30) + -1.0); + double fTemp32 = (fConst17 * ((fTemp4 * fTemp21) * fTemp31)); + fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph8 = FAUSTFLOAT(fRec20[0]); + output8[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = pow(fTemp4, 1.5); + double fTemp34 = (fTemp6 * fTemp33); + double fTemp35 = (((fConst23 / fRec2[0]) + (6.4594326934833797 * fTemp18)) + 1.0); + fRec25[0] = (fRec25[1] + fRec24[1]); + fRec26[0] = (fRec26[1] + fRec25[1]); + fRec24[0] = (fSlow16 * ((fSlow4 * (((fRec1[0] * fTemp35) * fTemp0) / fRec2[0])) - ((fSlow18 * fRec25[0]) + (fSlow17 * fRec26[0])))); + fRec27[0] = (fRec24[0] + fRec27[1]); + double fTemp36 = (fRec27[0] - fRec24[0]); + fVec1[0] = fTemp36; + fRec28[0] = (fRec28[1] + fVec1[1]); + double fTemp37 = ((fConst22 / fRec2[0]) + 1.0); + fRec29[0] = (fRec29[1] + fRec23[1]); + fRec23[0] = (fSlow15 * (((fRec24[0] + (((fTemp36 * ((fConst24 / fRec2[0]) + (25.837730773933519 * fTemp18))) + (25.837730773933519 * (fRec28[0] * fTemp18))) / fTemp35)) * fTemp37) - (fSlow19 * fRec29[0]))); + fRec22[0] = (fRec23[0] + fRec22[1]); + double fTemp38 = ((fConst21 * ((fRec22[0] - fRec23[0]) / (fRec2[0] * fTemp37))) + (fRec23[0] + fTemp10)); + double fTemp39 = ((4.0 * fTemp30) + -1.0); + double fTemp40 = (fConst20 * ((fTemp34 * fTemp38) * fTemp39)); + fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph9 = FAUSTFLOAT(fRec21[0]); + output9[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (fTemp2 * fTemp4); + double fTemp42 = ((fTemp41 * fTemp6) * fTemp14); + double fTemp43 = (fConst27 * (fTemp42 * fTemp38)); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph10 = FAUSTFLOAT(fRec30[0]); + output10[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = ((16.925687506432688 * fTemp3) + -3.3851375012865379); + double fTemp45 = (fConst28 * ((fTemp7 * fTemp38) * fTemp44)); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph11 = FAUSTFLOAT(fRec31[0]); + output11[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = ((2.5 * fTemp26) + -2.0); + double fTemp47 = (0.88191710368819687 * ((fTemp2 * fTemp38) * fTemp46)); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph12 = FAUSTFLOAT(fRec32[0]); + output12[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (fConst28 * ((fTemp15 * fTemp38) * fTemp44)); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph13 = FAUSTFLOAT(fRec33[0]); + output13[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (fTemp41 * fTemp31); + double fTemp50 = (fConst29 * (fTemp49 * fTemp38)); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + fVbargraph14 = FAUSTFLOAT(fRec34[0]); + output14[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (fTemp14 * fTemp33); + double fTemp52 = ((2.0 * fTemp31) + -1.0); + double fTemp53 = (fConst20 * ((fTemp51 * fTemp38) * fTemp52)); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + fVbargraph15 = FAUSTFLOAT(fRec35[0]); + output15[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = mydsp_faustpower2_f(fTemp4); + double fTemp55 = (((fConst34 / fRec2[0]) + (11.4878004768713 * fTemp18)) + 1.0); + fRec40[0] = (fRec40[1] + fRec39[1]); fRec41[0] = (fRec41[1] + fRec40[1]); - fRec34[0] = (fSlow81 * ((fSlow82 * (fRec35[0] + (fSlow88 * ((fSlow90 * fTemp23) + (fSlow89 * fRec39[0]))))) - ((fSlow92 * fRec40[0]) + (fSlow91 * fRec41[0])))); - fRec42[0] = (fRec34[0] + fRec42[1]); - double fTemp24 = (fRec42[0] - fRec34[0]); - fVec3[0] = fTemp24; - fRec43[0] = (fRec43[1] + fVec3[1]); - double fTemp25 = ((fRec34[0] + fTemp2) + (fSlow93 * ((fSlow95 * fTemp24) + (fSlow94 * fRec43[0])))); - double fTemp26 = (fSlow80 * fTemp25); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph16 = FAUSTFLOAT(fRec33[0]); - output16[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (fSlow96 * fTemp25); - fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph17 = FAUSTFLOAT(fRec44[0]); - output17[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (fSlow98 * fTemp25); - fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); - fVbargraph18 = FAUSTFLOAT(fRec45[0]); - output18[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (fSlow100 * fTemp25); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph19 = FAUSTFLOAT(fRec46[0]); - output19[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (fSlow102 * fTemp25); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); - fVbargraph20 = FAUSTFLOAT(fRec47[0]); - output20[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (fSlow103 * fTemp25); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); - fVbargraph21 = FAUSTFLOAT(fRec48[0]); - output21[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (fSlow104 * fTemp25); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); - fVbargraph22 = FAUSTFLOAT(fRec49[0]); - output22[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (fSlow105 * fTemp25); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); - fVbargraph23 = FAUSTFLOAT(fRec50[0]); - output23[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (fSlow107 * fTemp25); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); - fVbargraph24 = FAUSTFLOAT(fRec51[0]); - output24[i] = FAUSTFLOAT(fTemp34); - fRec57[0] = (fRec57[1] + fRec56[1]); - fRec58[0] = (fRec58[1] + fRec57[1]); - fRec56[0] = (fSlow115 * ((fSlow117 * fTemp0) - ((fSlow119 * fRec57[0]) + (fSlow118 * fRec58[0])))); - fRec59[0] = (fRec56[0] + fRec59[1]); - double fTemp35 = (fRec59[0] - fRec56[0]); - fVec4[0] = fTemp35; - fRec60[0] = (fRec60[1] + fVec4[1]); - fRec61[0] = (fRec61[1] + fRec55[1]); - fRec62[0] = (fRec62[1] + fRec61[1]); - fRec55[0] = (fSlow113 * ((fSlow114 * (fRec56[0] + (fSlow120 * ((fSlow122 * fTemp35) + (fSlow121 * fRec60[0]))))) - ((fSlow124 * fRec61[0]) + (fSlow123 * fRec62[0])))); - fRec63[0] = (fRec55[0] + fRec63[1]); - double fTemp36 = (fRec63[0] - fRec55[0]); - fVec5[0] = fTemp36; - fRec64[0] = (fRec64[1] + fVec5[1]); - fRec65[0] = (fRec65[1] + fRec54[1]); - fRec54[0] = (fSlow112 * ((fSlow110 * (fRec55[0] + (fSlow125 * ((fSlow127 * fTemp36) + (fSlow126 * fRec64[0]))))) - (fSlow128 * fRec65[0]))); - fRec53[0] = (fRec54[0] + fRec53[1]); - double fTemp37 = ((fSlow111 * (fRec53[0] - fRec54[0])) + (fRec54[0] + fTemp2)); - double fTemp38 = (fSlow109 * fTemp37); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); - fVbargraph25 = FAUSTFLOAT(fRec52[0]); - output25[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (fSlow130 * fTemp37); - fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph26 = FAUSTFLOAT(fRec66[0]); - output26[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (fSlow132 * fTemp37); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); - fVbargraph27 = FAUSTFLOAT(fRec67[0]); - output27[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (fSlow134 * fTemp37); - fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph28 = FAUSTFLOAT(fRec68[0]); - output28[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (fSlow136 * fTemp37); - fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); - fVbargraph29 = FAUSTFLOAT(fRec69[0]); - output29[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (fSlow137 * fTemp37); - fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph30 = FAUSTFLOAT(fRec70[0]); - output30[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (fSlow138 * fTemp37); - fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); - fVbargraph31 = FAUSTFLOAT(fRec71[0]); - output31[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (fSlow139 * fTemp37); - fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); - fVbargraph32 = FAUSTFLOAT(fRec72[0]); - output32[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (fSlow140 * fTemp37); - fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); - fVbargraph33 = FAUSTFLOAT(fRec73[0]); - output33[i] = FAUSTFLOAT(fTemp46); - double fTemp47 = (fSlow141 * fTemp37); - fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); - fVbargraph34 = FAUSTFLOAT(fRec74[0]); - output34[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (fSlow142 * fTemp37); - fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); - fVbargraph35 = FAUSTFLOAT(fRec75[0]); - output35[i] = FAUSTFLOAT(fTemp48); + fRec39[0] = (fSlow21 * ((fSlow4 * (((fRec1[0] * fTemp55) * fTemp0) / fRec2[0])) - ((fSlow23 * fRec40[0]) + (fSlow22 * fRec41[0])))); + fRec42[0] = (fRec39[0] + fRec42[1]); + double fTemp56 = (fRec42[0] - fRec39[0]); + fVec2[0] = fTemp56; + fRec43[0] = (fRec43[1] + fVec2[1]); + double fTemp57 = (((fConst33 / fRec2[0]) + (9.1401308902779004 * fTemp18)) + 1.0); + fRec44[0] = (fRec44[1] + fRec38[1]); + fRec45[0] = (fRec45[1] + fRec44[1]); + fRec38[0] = (fSlow20 * (((fRec39[0] + (((fTemp56 * ((fConst35 / fRec2[0]) + (45.951201907485199 * fTemp18))) + (45.951201907485199 * (fRec43[0] * fTemp18))) / fTemp55)) * fTemp57) - ((fSlow25 * fRec44[0]) + (fSlow24 * fRec45[0])))); + fRec37[0] = (fRec38[0] + fRec37[1]); + double fTemp58 = (fRec37[0] - fRec38[0]); + fVec3[0] = fTemp58; + fRec46[0] = (fRec46[1] + fVec3[1]); + double fTemp59 = ((((fTemp58 * ((fConst36 / fRec2[0]) + (36.560523561111602 * fTemp18))) + (36.560523561111602 * (fRec46[0] * fTemp18))) / fTemp57) + (fRec38[0] + fTemp10)); + double fTemp60 = (0.0 - (2.0 * (fTemp14 * (1.0 - fTemp39)))); + double fTemp61 = (fConst32 * (((fTemp54 * fTemp6) * fTemp59) * fTemp60)); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + fVbargraph16 = FAUSTFLOAT(fRec36[0]); + output16[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (fConst38 * ((((fTemp2 * fTemp6) * fTemp33) * fTemp39) * fTemp59)); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + fVbargraph17 = FAUSTFLOAT(fRec47[0]); + output17[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = ((78.986541696685876 * fTemp3) + -11.283791670955125); + double fTemp64 = (fConst40 * ((fTemp17 * fTemp59) * fTemp63)); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + fVbargraph18 = FAUSTFLOAT(fRec48[0]); + output18[i] = FAUSTFLOAT(fTemp64); + double fTemp65 = ((3.5 * fTemp44) + -13.540550005146152); + double fTemp66 = (fConst41 * ((fTemp24 * fTemp59) * fTemp65)); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); + fVbargraph19 = FAUSTFLOAT(fRec49[0]); + output19[i] = FAUSTFLOAT(fTemp66); + double fTemp67 = ((2.333333333333333 * (fTemp3 * fTemp46)) - (1.5 * fTemp26)); + double fTemp68 = (0.75 * (fTemp59 * fTemp67)); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); + fVbargraph20 = FAUSTFLOAT(fRec50[0]); + output20[i] = FAUSTFLOAT(fTemp68); + double fTemp69 = (fConst41 * ((fTemp28 * fTemp59) * fTemp65)); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); + fVbargraph21 = FAUSTFLOAT(fRec51[0]); + output21[i] = FAUSTFLOAT(fTemp69); + double fTemp70 = (fConst42 * (((fTemp4 * fTemp31) * fTemp59) * fTemp63)); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); + fVbargraph22 = FAUSTFLOAT(fRec52[0]); + output22[i] = FAUSTFLOAT(fTemp70); + double fTemp71 = (fConst38 * ((((fTemp2 * fTemp14) * fTemp33) * fTemp52) * fTemp59)); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); + fVbargraph23 = FAUSTFLOAT(fRec53[0]); + output23[i] = FAUSTFLOAT(fTemp71); + double fTemp72 = (1.0 - (2.0 * (fTemp30 * (1.0 - fTemp52)))); + double fTemp73 = (fConst32 * ((fTemp54 * fTemp59) * fTemp72)); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); + fVbargraph24 = FAUSTFLOAT(fRec54[0]); + output24[i] = FAUSTFLOAT(fTemp73); + double fTemp74 = pow(fTemp4, 2.5); + double fTemp75 = (((fConst47 / fRec2[0]) + (18.1563153134523 * fTemp18)) + 1.0); + fRec60[0] = (fRec60[1] + fRec59[1]); + fRec61[0] = (fRec61[1] + fRec60[1]); + fRec59[0] = (fSlow28 * ((fSlow4 * (((fRec1[0] * fTemp75) * fTemp0) / fRec2[0])) - ((fSlow30 * fRec60[0]) + (fSlow29 * fRec61[0])))); + fRec62[0] = (fRec59[0] + fRec62[1]); + double fTemp76 = (fRec62[0] - fRec59[0]); + fVec4[0] = fTemp76; + fRec63[0] = (fRec63[1] + fVec4[1]); + double fTemp77 = (((fConst46 / fRec2[0]) + (14.272480513280099 * fTemp18)) + 1.0); + fRec64[0] = (fRec64[1] + fRec58[1]); + fRec65[0] = (fRec65[1] + fRec64[1]); + fRec58[0] = (fSlow27 * (((fRec59[0] + (((fTemp76 * ((fConst48 / fRec2[0]) + (72.6252612538092 * fTemp18))) + (72.6252612538092 * (fRec63[0] * fTemp18))) / fTemp75)) * fTemp77) - ((fSlow32 * fRec64[0]) + (fSlow31 * fRec65[0])))); + fRec66[0] = (fRec58[0] + fRec66[1]); + double fTemp78 = (fRec66[0] - fRec58[0]); + fVec5[0] = fTemp78; + fRec67[0] = (fRec67[1] + fVec5[1]); + double fTemp79 = ((fConst45 / fRec2[0]) + 1.0); + fRec68[0] = (fRec68[1] + fRec57[1]); + fRec57[0] = (fSlow26 * (((fRec58[0] + (((fTemp78 * ((fConst49 / fRec2[0]) + (57.089922053120397 * fTemp18))) + (57.089922053120397 * (fRec67[0] * fTemp18))) / fTemp77)) * fTemp79) - (fSlow33 * fRec68[0]))); + fRec56[0] = (fRec57[0] + fRec56[1]); + double fTemp80 = ((fConst44 * ((fRec56[0] - fRec57[0]) / (fRec2[0] * fTemp79))) + (fRec57[0] + fTemp10)); + double fTemp81 = (fConst43 * (((fTemp6 * fTemp74) * fTemp80) * ((fTemp14 * ((2.0 * fTemp60) - (4.0 * fTemp14))) + 1.0))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); + fVbargraph25 = FAUSTFLOAT(fRec55[0]); + output25[i] = FAUSTFLOAT(fTemp81); + double fTemp82 = (fTemp2 * fTemp54); + double fTemp83 = (fConst50 * (((fTemp82 * fTemp6) * fTemp60) * fTemp80)); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); + fVbargraph26 = FAUSTFLOAT(fRec69[0]); + output26[i] = FAUSTFLOAT(fTemp83); + double fTemp84 = ((284.35155010806915 * fTemp3) + -31.594616678674353); + double fTemp85 = (fConst51 * (((fTemp34 * fTemp39) * fTemp80) * fTemp84)); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); + fVbargraph27 = FAUSTFLOAT(fRec70[0]); + output27[i] = FAUSTFLOAT(fTemp85); + double fTemp86 = ((4.5 * fTemp63) + -67.702750025730751); + double fTemp87 = (fConst53 * ((fTemp42 * fTemp80) * fTemp86)); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); + fVbargraph28 = FAUSTFLOAT(fRec71[0]); + output28[i] = FAUSTFLOAT(fTemp87); + double fTemp88 = ((3.0 * (fTemp3 * fTemp65)) - (2.5 * fTemp44)); + double fTemp89 = (fConst54 * ((fTemp7 * fTemp80) * fTemp88)); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); + fVbargraph29 = FAUSTFLOAT(fRec72[0]); + output29[i] = FAUSTFLOAT(fTemp89); + double fTemp90 = (0.66332495807108005 * ((fTemp2 * fTemp80) * ((2.25 * fTemp67) - (1.3333333333333333 * fTemp46)))); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); + fVbargraph30 = FAUSTFLOAT(fRec73[0]); + output30[i] = FAUSTFLOAT(fTemp90); + double fTemp91 = (fConst54 * ((fTemp15 * fTemp80) * fTemp88)); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); + fVbargraph31 = FAUSTFLOAT(fRec74[0]); + output31[i] = FAUSTFLOAT(fTemp91); + double fTemp92 = (fConst55 * ((fTemp49 * fTemp80) * fTemp86)); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); + fVbargraph32 = FAUSTFLOAT(fRec75[0]); + output32[i] = FAUSTFLOAT(fTemp92); + double fTemp93 = (fConst51 * (((fTemp51 * fTemp52) * fTemp80) * fTemp84)); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); + fVbargraph33 = FAUSTFLOAT(fRec76[0]); + output33[i] = FAUSTFLOAT(fTemp93); + double fTemp94 = (fConst50 * ((fTemp82 * fTemp72) * fTemp80)); + fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); + fVbargraph34 = FAUSTFLOAT(fRec77[0]); + output34[i] = FAUSTFLOAT(fTemp94); + double fTemp95 = (fConst43 * (((fTemp14 * fTemp74) * fTemp80) * ((2.0 * fTemp72) - fTemp52))); + fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); + fVbargraph35 = FAUSTFLOAT(fRec78[0]); + output35[i] = FAUSTFLOAT(fTemp95); fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec2[1] = fRec2[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + fRec8[1] = fRec8[0]; fRec7[1] = fRec7[0]; - fRec10[1] = fRec10[0]; - fRec11[1] = fRec11[0]; + fRec6[1] = fRec6[0]; + fRec3[1] = fRec3[0]; fRec9[1] = fRec9[0]; - fRec12[1] = fRec12[0]; - fVec0[1] = fVec0[0]; - fRec13[1] = fRec13[0]; - fRec8[1] = fRec8[0]; + fRec10[1] = fRec10[0]; fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; + fRec13[1] = fRec13[0]; + fRec12[1] = fRec12[0]; + fVec0[1] = fVec0[0]; fRec16[1] = fRec16[0]; + fRec11[1] = fRec11[0]; fRec17[1] = fRec17[0]; - fRec22[1] = fRec22[0]; - fRec23[1] = fRec23[0]; - fRec21[1] = fRec21[0]; - fRec24[1] = fRec24[0]; - fVec1[1] = fVec1[0]; + fRec18[1] = fRec18[0]; + fRec19[1] = fRec19[0]; + fRec20[1] = fRec20[0]; fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; - fRec20[1] = fRec20[0]; - fRec19[1] = fRec19[0]; - fRec18[1] = fRec18[0]; + fRec24[1] = fRec24[0]; fRec27[1] = fRec27[0]; + fVec1[1] = fVec1[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; + fRec23[1] = fRec23[0]; + fRec22[1] = fRec22[0]; + fRec21[1] = fRec21[0]; fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; - fRec36[1] = fRec36[0]; - fRec37[1] = fRec37[0]; + fRec33[1] = fRec33[0]; + fRec34[1] = fRec34[0]; fRec35[1] = fRec35[0]; - fRec38[1] = fRec38[0]; - fVec2[1] = fVec2[0]; - fRec39[1] = fRec39[0]; fRec40[1] = fRec40[0]; fRec41[1] = fRec41[0]; - fRec34[1] = fRec34[0]; + fRec39[1] = fRec39[0]; fRec42[1] = fRec42[0]; - fVec3[1] = fVec3[0]; + fVec2[1] = fVec2[0]; fRec43[1] = fRec43[0]; - fRec33[1] = fRec33[0]; fRec44[1] = fRec44[0]; fRec45[1] = fRec45[0]; + fRec38[1] = fRec38[0]; + fRec37[1] = fRec37[0]; + fVec3[1] = fVec3[0]; fRec46[1] = fRec46[0]; + fRec36[1] = fRec36[0]; fRec47[1] = fRec47[0]; fRec48[1] = fRec48[0]; fRec49[1] = fRec49[0]; fRec50[1] = fRec50[0]; fRec51[1] = fRec51[0]; - fRec57[1] = fRec57[0]; - fRec58[1] = fRec58[0]; - fRec56[1] = fRec56[0]; - fRec59[1] = fRec59[0]; - fVec4[1] = fVec4[0]; + fRec52[1] = fRec52[0]; + fRec53[1] = fRec53[0]; + fRec54[1] = fRec54[0]; fRec60[1] = fRec60[0]; fRec61[1] = fRec61[0]; + fRec59[1] = fRec59[0]; fRec62[1] = fRec62[0]; - fRec55[1] = fRec55[0]; + fVec4[1] = fVec4[0]; fRec63[1] = fRec63[0]; - fVec5[1] = fVec5[0]; fRec64[1] = fRec64[0]; fRec65[1] = fRec65[0]; - fRec54[1] = fRec54[0]; - fRec53[1] = fRec53[0]; - fRec52[1] = fRec52[0]; + fRec58[1] = fRec58[0]; fRec66[1] = fRec66[0]; + fVec5[1] = fVec5[0]; fRec67[1] = fRec67[0]; fRec68[1] = fRec68[0]; + fRec57[1] = fRec57[0]; + fRec56[1] = fRec56[0]; + fRec55[1] = fRec55[0]; fRec69[1] = fRec69[0]; fRec70[1] = fRec70[0]; fRec71[1] = fRec71[0]; @@ -2116,6 +2072,9 @@ class mydsp : public dsp { fRec73[1] = fRec73[0]; fRec74[1] = fRec74[0]; fRec75[1] = fRec75[0]; + fRec76[1] = fRec76[0]; + fRec77[1] = fRec77[0]; + fRec78[1] = fRec78[0]; } @@ -2355,7 +2314,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2418,7 +2377,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2447,9 +2406,9 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } #ifdef SUPERNOVA diff --git a/source/HOAUGens/HOAMirror1.cpp b/source/HOAUGens/HOAMirror1.cpp index e8f6dbb33d..8f24d75794 100644 --- a/source/HOAUGens/HOAMirror1.cpp +++ b/source/HOAUGens/HOAMirror1.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOAMirror1" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,18 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -726,9 +745,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -783,7 +802,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1015,7 +1033,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1078,7 +1096,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1107,11 +1125,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAMirror10.cpp b/source/HOAUGens/HOAMirror10.cpp new file mode 100644 index 0000000000..6a1435db94 --- /dev/null +++ b/source/HOAUGens/HOAMirror10.cpp @@ -0,0 +1,2779 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAMirror10" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror10"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 121; + + } + virtual int getNumOutputs() { + return 121; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + case 100: { + rate = 1; + break; + } + case 101: { + rate = 1; + break; + } + case 102: { + rate = 1; + break; + } + case 103: { + rate = 1; + break; + } + case 104: { + rate = 1; + break; + } + case 105: { + rate = 1; + break; + } + case 106: { + rate = 1; + break; + } + case 107: { + rate = 1; + break; + } + case 108: { + rate = 1; + break; + } + case 109: { + rate = 1; + break; + } + case 110: { + rate = 1; + break; + } + case 111: { + rate = 1; + break; + } + case 112: { + rate = 1; + break; + } + case 113: { + rate = 1; + break; + } + case 114: { + rate = 1; + break; + } + case 115: { + rate = 1; + break; + } + case 116: { + rate = 1; + break; + } + case 117: { + rate = 1; + break; + } + case 118: { + rate = 1; + break; + } + case 119: { + rate = 1; + break; + } + case 120: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + case 100: { + rate = 1; + break; + } + case 101: { + rate = 1; + break; + } + case 102: { + rate = 1; + break; + } + case 103: { + rate = 1; + break; + } + case 104: { + rate = 1; + break; + } + case 105: { + rate = 1; + break; + } + case 106: { + rate = 1; + break; + } + case 107: { + rate = 1; + break; + } + case 108: { + rate = 1; + break; + } + case 109: { + rate = 1; + break; + } + case 110: { + rate = 1; + break; + } + case 111: { + rate = 1; + break; + } + case 112: { + rate = 1; + break; + } + case 113: { + rate = 1; + break; + } + case 114: { + rate = 1; + break; + } + case 115: { + rate = 1; + break; + } + case 116: { + rate = 1; + break; + } + case 117: { + rate = 1; + break; + } + case 118: { + rate = 1; + break; + } + case 119: { + rate = 1; + break; + } + case 120: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* input81 = inputs[81]; + FAUSTFLOAT* input82 = inputs[82]; + FAUSTFLOAT* input83 = inputs[83]; + FAUSTFLOAT* input84 = inputs[84]; + FAUSTFLOAT* input85 = inputs[85]; + FAUSTFLOAT* input86 = inputs[86]; + FAUSTFLOAT* input87 = inputs[87]; + FAUSTFLOAT* input88 = inputs[88]; + FAUSTFLOAT* input89 = inputs[89]; + FAUSTFLOAT* input90 = inputs[90]; + FAUSTFLOAT* input91 = inputs[91]; + FAUSTFLOAT* input92 = inputs[92]; + FAUSTFLOAT* input93 = inputs[93]; + FAUSTFLOAT* input94 = inputs[94]; + FAUSTFLOAT* input95 = inputs[95]; + FAUSTFLOAT* input96 = inputs[96]; + FAUSTFLOAT* input97 = inputs[97]; + FAUSTFLOAT* input98 = inputs[98]; + FAUSTFLOAT* input99 = inputs[99]; + FAUSTFLOAT* input100 = inputs[100]; + FAUSTFLOAT* input101 = inputs[101]; + FAUSTFLOAT* input102 = inputs[102]; + FAUSTFLOAT* input103 = inputs[103]; + FAUSTFLOAT* input104 = inputs[104]; + FAUSTFLOAT* input105 = inputs[105]; + FAUSTFLOAT* input106 = inputs[106]; + FAUSTFLOAT* input107 = inputs[107]; + FAUSTFLOAT* input108 = inputs[108]; + FAUSTFLOAT* input109 = inputs[109]; + FAUSTFLOAT* input110 = inputs[110]; + FAUSTFLOAT* input111 = inputs[111]; + FAUSTFLOAT* input112 = inputs[112]; + FAUSTFLOAT* input113 = inputs[113]; + FAUSTFLOAT* input114 = inputs[114]; + FAUSTFLOAT* input115 = inputs[115]; + FAUSTFLOAT* input116 = inputs[116]; + FAUSTFLOAT* input117 = inputs[117]; + FAUSTFLOAT* input118 = inputs[118]; + FAUSTFLOAT* input119 = inputs[119]; + FAUSTFLOAT* input120 = inputs[120]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + FAUSTFLOAT* output81 = outputs[81]; + FAUSTFLOAT* output82 = outputs[82]; + FAUSTFLOAT* output83 = outputs[83]; + FAUSTFLOAT* output84 = outputs[84]; + FAUSTFLOAT* output85 = outputs[85]; + FAUSTFLOAT* output86 = outputs[86]; + FAUSTFLOAT* output87 = outputs[87]; + FAUSTFLOAT* output88 = outputs[88]; + FAUSTFLOAT* output89 = outputs[89]; + FAUSTFLOAT* output90 = outputs[90]; + FAUSTFLOAT* output91 = outputs[91]; + FAUSTFLOAT* output92 = outputs[92]; + FAUSTFLOAT* output93 = outputs[93]; + FAUSTFLOAT* output94 = outputs[94]; + FAUSTFLOAT* output95 = outputs[95]; + FAUSTFLOAT* output96 = outputs[96]; + FAUSTFLOAT* output97 = outputs[97]; + FAUSTFLOAT* output98 = outputs[98]; + FAUSTFLOAT* output99 = outputs[99]; + FAUSTFLOAT* output100 = outputs[100]; + FAUSTFLOAT* output101 = outputs[101]; + FAUSTFLOAT* output102 = outputs[102]; + FAUSTFLOAT* output103 = outputs[103]; + FAUSTFLOAT* output104 = outputs[104]; + FAUSTFLOAT* output105 = outputs[105]; + FAUSTFLOAT* output106 = outputs[106]; + FAUSTFLOAT* output107 = outputs[107]; + FAUSTFLOAT* output108 = outputs[108]; + FAUSTFLOAT* output109 = outputs[109]; + FAUSTFLOAT* output110 = outputs[110]; + FAUSTFLOAT* output111 = outputs[111]; + FAUSTFLOAT* output112 = outputs[112]; + FAUSTFLOAT* output113 = outputs[113]; + FAUSTFLOAT* output114 = outputs[114]; + FAUSTFLOAT* output115 = outputs[115]; + FAUSTFLOAT* output116 = outputs[116]; + FAUSTFLOAT* output117 = outputs[117]; + FAUSTFLOAT* output118 = outputs[118]; + FAUSTFLOAT* output119 = outputs[119]; + FAUSTFLOAT* output120 = outputs[120]; + int iSlow0 = (double(fCheckbox0) == 1.0); + int iSlow1 = (iSlow0 & 0); + int iSlow2 = (double(fCheckbox1) == 1.0); + int iSlow3 = (iSlow2 & 0); + int iSlow4 = (double(fCheckbox2) == 1.0); + int iSlow5 = (iSlow4 & 0); + int iSlow6 = (iSlow2 & 1); + int iSlow7 = (iSlow4 & 1); + int iSlow8 = (iSlow0 & 1); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + double fTemp1 = (iSlow5?(0.0 - fTemp0):fTemp0); + double fTemp2 = (iSlow3?(0.0 - fTemp1):fTemp1); + output0[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp2):fTemp2)); + double fTemp3 = double(input1[i]); + double fTemp4 = (iSlow5?(0.0 - fTemp3):fTemp3); + double fTemp5 = (iSlow6?(0.0 - fTemp4):fTemp4); + output1[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp5):fTemp5)); + double fTemp6 = double(input2[i]); + double fTemp7 = (iSlow7?(0.0 - fTemp6):fTemp6); + double fTemp8 = (iSlow3?(0.0 - fTemp7):fTemp7); + output2[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp8):fTemp8)); + double fTemp9 = double(input3[i]); + double fTemp10 = (iSlow5?(0.0 - fTemp9):fTemp9); + double fTemp11 = (iSlow3?(0.0 - fTemp10):fTemp10); + output3[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp11):fTemp11)); + double fTemp12 = double(input4[i]); + double fTemp13 = (iSlow5?(0.0 - fTemp12):fTemp12); + double fTemp14 = (iSlow6?(0.0 - fTemp13):fTemp13); + output4[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp14):fTemp14)); + double fTemp15 = double(input5[i]); + double fTemp16 = (iSlow7?(0.0 - fTemp15):fTemp15); + double fTemp17 = (iSlow6?(0.0 - fTemp16):fTemp16); + output5[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp17):fTemp17)); + double fTemp18 = double(input6[i]); + double fTemp19 = (iSlow5?(0.0 - fTemp18):fTemp18); + double fTemp20 = (iSlow3?(0.0 - fTemp19):fTemp19); + output6[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp20):fTemp20)); + double fTemp21 = double(input7[i]); + double fTemp22 = (iSlow7?(0.0 - fTemp21):fTemp21); + double fTemp23 = (iSlow3?(0.0 - fTemp22):fTemp22); + output7[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp23):fTemp23)); + double fTemp24 = double(input8[i]); + double fTemp25 = (iSlow5?(0.0 - fTemp24):fTemp24); + double fTemp26 = (iSlow3?(0.0 - fTemp25):fTemp25); + output8[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp26):fTemp26)); + double fTemp27 = double(input9[i]); + double fTemp28 = (iSlow5?(0.0 - fTemp27):fTemp27); + double fTemp29 = (iSlow6?(0.0 - fTemp28):fTemp28); + output9[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp29):fTemp29)); + double fTemp30 = double(input10[i]); + double fTemp31 = (iSlow7?(0.0 - fTemp30):fTemp30); + double fTemp32 = (iSlow6?(0.0 - fTemp31):fTemp31); + output10[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp32):fTemp32)); + double fTemp33 = double(input11[i]); + double fTemp34 = (iSlow5?(0.0 - fTemp33):fTemp33); + double fTemp35 = (iSlow6?(0.0 - fTemp34):fTemp34); + output11[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp35):fTemp35)); + double fTemp36 = double(input12[i]); + double fTemp37 = (iSlow7?(0.0 - fTemp36):fTemp36); + double fTemp38 = (iSlow3?(0.0 - fTemp37):fTemp37); + output12[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp38):fTemp38)); + double fTemp39 = double(input13[i]); + double fTemp40 = (iSlow5?(0.0 - fTemp39):fTemp39); + double fTemp41 = (iSlow3?(0.0 - fTemp40):fTemp40); + output13[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp41):fTemp41)); + double fTemp42 = double(input14[i]); + double fTemp43 = (iSlow7?(0.0 - fTemp42):fTemp42); + double fTemp44 = (iSlow3?(0.0 - fTemp43):fTemp43); + output14[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp44):fTemp44)); + double fTemp45 = double(input15[i]); + double fTemp46 = (iSlow5?(0.0 - fTemp45):fTemp45); + double fTemp47 = (iSlow3?(0.0 - fTemp46):fTemp46); + output15[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp47):fTemp47)); + double fTemp48 = double(input16[i]); + double fTemp49 = (iSlow5?(0.0 - fTemp48):fTemp48); + double fTemp50 = (iSlow6?(0.0 - fTemp49):fTemp49); + output16[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp50):fTemp50)); + double fTemp51 = double(input17[i]); + double fTemp52 = (iSlow7?(0.0 - fTemp51):fTemp51); + double fTemp53 = (iSlow6?(0.0 - fTemp52):fTemp52); + output17[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp53):fTemp53)); + double fTemp54 = double(input18[i]); + double fTemp55 = (iSlow5?(0.0 - fTemp54):fTemp54); + double fTemp56 = (iSlow6?(0.0 - fTemp55):fTemp55); + output18[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp56):fTemp56)); + double fTemp57 = double(input19[i]); + double fTemp58 = (iSlow7?(0.0 - fTemp57):fTemp57); + double fTemp59 = (iSlow6?(0.0 - fTemp58):fTemp58); + output19[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp59):fTemp59)); + double fTemp60 = double(input20[i]); + double fTemp61 = (iSlow5?(0.0 - fTemp60):fTemp60); + double fTemp62 = (iSlow3?(0.0 - fTemp61):fTemp61); + output20[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp62):fTemp62)); + double fTemp63 = double(input21[i]); + double fTemp64 = (iSlow7?(0.0 - fTemp63):fTemp63); + double fTemp65 = (iSlow3?(0.0 - fTemp64):fTemp64); + output21[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp65):fTemp65)); + double fTemp66 = double(input22[i]); + double fTemp67 = (iSlow5?(0.0 - fTemp66):fTemp66); + double fTemp68 = (iSlow3?(0.0 - fTemp67):fTemp67); + output22[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp68):fTemp68)); + double fTemp69 = double(input23[i]); + double fTemp70 = (iSlow7?(0.0 - fTemp69):fTemp69); + double fTemp71 = (iSlow3?(0.0 - fTemp70):fTemp70); + output23[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp71):fTemp71)); + double fTemp72 = double(input24[i]); + double fTemp73 = (iSlow5?(0.0 - fTemp72):fTemp72); + double fTemp74 = (iSlow3?(0.0 - fTemp73):fTemp73); + output24[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp74):fTemp74)); + double fTemp75 = double(input25[i]); + double fTemp76 = (iSlow5?(0.0 - fTemp75):fTemp75); + double fTemp77 = (iSlow6?(0.0 - fTemp76):fTemp76); + output25[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp77):fTemp77)); + double fTemp78 = double(input26[i]); + double fTemp79 = (iSlow7?(0.0 - fTemp78):fTemp78); + double fTemp80 = (iSlow6?(0.0 - fTemp79):fTemp79); + output26[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp80):fTemp80)); + double fTemp81 = double(input27[i]); + double fTemp82 = (iSlow5?(0.0 - fTemp81):fTemp81); + double fTemp83 = (iSlow6?(0.0 - fTemp82):fTemp82); + output27[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp83):fTemp83)); + double fTemp84 = double(input28[i]); + double fTemp85 = (iSlow7?(0.0 - fTemp84):fTemp84); + double fTemp86 = (iSlow6?(0.0 - fTemp85):fTemp85); + output28[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp86):fTemp86)); + double fTemp87 = double(input29[i]); + double fTemp88 = (iSlow5?(0.0 - fTemp87):fTemp87); + double fTemp89 = (iSlow6?(0.0 - fTemp88):fTemp88); + output29[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp89):fTemp89)); + double fTemp90 = double(input30[i]); + double fTemp91 = (iSlow7?(0.0 - fTemp90):fTemp90); + double fTemp92 = (iSlow3?(0.0 - fTemp91):fTemp91); + output30[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp92):fTemp92)); + double fTemp93 = double(input31[i]); + double fTemp94 = (iSlow5?(0.0 - fTemp93):fTemp93); + double fTemp95 = (iSlow3?(0.0 - fTemp94):fTemp94); + output31[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp95):fTemp95)); + double fTemp96 = double(input32[i]); + double fTemp97 = (iSlow7?(0.0 - fTemp96):fTemp96); + double fTemp98 = (iSlow3?(0.0 - fTemp97):fTemp97); + output32[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp98):fTemp98)); + double fTemp99 = double(input33[i]); + double fTemp100 = (iSlow5?(0.0 - fTemp99):fTemp99); + double fTemp101 = (iSlow3?(0.0 - fTemp100):fTemp100); + output33[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp101):fTemp101)); + double fTemp102 = double(input34[i]); + double fTemp103 = (iSlow7?(0.0 - fTemp102):fTemp102); + double fTemp104 = (iSlow3?(0.0 - fTemp103):fTemp103); + output34[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp104):fTemp104)); + double fTemp105 = double(input35[i]); + double fTemp106 = (iSlow5?(0.0 - fTemp105):fTemp105); + double fTemp107 = (iSlow3?(0.0 - fTemp106):fTemp106); + output35[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp107):fTemp107)); + double fTemp108 = double(input36[i]); + double fTemp109 = (iSlow5?(0.0 - fTemp108):fTemp108); + double fTemp110 = (iSlow6?(0.0 - fTemp109):fTemp109); + output36[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp110):fTemp110)); + double fTemp111 = double(input37[i]); + double fTemp112 = (iSlow7?(0.0 - fTemp111):fTemp111); + double fTemp113 = (iSlow6?(0.0 - fTemp112):fTemp112); + output37[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp113):fTemp113)); + double fTemp114 = double(input38[i]); + double fTemp115 = (iSlow5?(0.0 - fTemp114):fTemp114); + double fTemp116 = (iSlow6?(0.0 - fTemp115):fTemp115); + output38[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp116):fTemp116)); + double fTemp117 = double(input39[i]); + double fTemp118 = (iSlow7?(0.0 - fTemp117):fTemp117); + double fTemp119 = (iSlow6?(0.0 - fTemp118):fTemp118); + output39[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp119):fTemp119)); + double fTemp120 = double(input40[i]); + double fTemp121 = (iSlow5?(0.0 - fTemp120):fTemp120); + double fTemp122 = (iSlow6?(0.0 - fTemp121):fTemp121); + output40[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp122):fTemp122)); + double fTemp123 = double(input41[i]); + double fTemp124 = (iSlow7?(0.0 - fTemp123):fTemp123); + double fTemp125 = (iSlow6?(0.0 - fTemp124):fTemp124); + output41[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp125):fTemp125)); + double fTemp126 = double(input42[i]); + double fTemp127 = (iSlow5?(0.0 - fTemp126):fTemp126); + double fTemp128 = (iSlow3?(0.0 - fTemp127):fTemp127); + output42[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp128):fTemp128)); + double fTemp129 = double(input43[i]); + double fTemp130 = (iSlow7?(0.0 - fTemp129):fTemp129); + double fTemp131 = (iSlow3?(0.0 - fTemp130):fTemp130); + output43[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp131):fTemp131)); + double fTemp132 = double(input44[i]); + double fTemp133 = (iSlow5?(0.0 - fTemp132):fTemp132); + double fTemp134 = (iSlow3?(0.0 - fTemp133):fTemp133); + output44[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp134):fTemp134)); + double fTemp135 = double(input45[i]); + double fTemp136 = (iSlow7?(0.0 - fTemp135):fTemp135); + double fTemp137 = (iSlow3?(0.0 - fTemp136):fTemp136); + output45[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp137):fTemp137)); + double fTemp138 = double(input46[i]); + double fTemp139 = (iSlow5?(0.0 - fTemp138):fTemp138); + double fTemp140 = (iSlow3?(0.0 - fTemp139):fTemp139); + output46[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp140):fTemp140)); + double fTemp141 = double(input47[i]); + double fTemp142 = (iSlow7?(0.0 - fTemp141):fTemp141); + double fTemp143 = (iSlow3?(0.0 - fTemp142):fTemp142); + output47[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp143):fTemp143)); + double fTemp144 = double(input48[i]); + double fTemp145 = (iSlow5?(0.0 - fTemp144):fTemp144); + double fTemp146 = (iSlow3?(0.0 - fTemp145):fTemp145); + output48[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp146):fTemp146)); + double fTemp147 = double(input49[i]); + double fTemp148 = (iSlow5?(0.0 - fTemp147):fTemp147); + double fTemp149 = (iSlow6?(0.0 - fTemp148):fTemp148); + output49[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp149):fTemp149)); + double fTemp150 = double(input50[i]); + double fTemp151 = (iSlow7?(0.0 - fTemp150):fTemp150); + double fTemp152 = (iSlow6?(0.0 - fTemp151):fTemp151); + output50[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp152):fTemp152)); + double fTemp153 = double(input51[i]); + double fTemp154 = (iSlow5?(0.0 - fTemp153):fTemp153); + double fTemp155 = (iSlow6?(0.0 - fTemp154):fTemp154); + output51[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp155):fTemp155)); + double fTemp156 = double(input52[i]); + double fTemp157 = (iSlow7?(0.0 - fTemp156):fTemp156); + double fTemp158 = (iSlow6?(0.0 - fTemp157):fTemp157); + output52[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp158):fTemp158)); + double fTemp159 = double(input53[i]); + double fTemp160 = (iSlow5?(0.0 - fTemp159):fTemp159); + double fTemp161 = (iSlow6?(0.0 - fTemp160):fTemp160); + output53[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp161):fTemp161)); + double fTemp162 = double(input54[i]); + double fTemp163 = (iSlow7?(0.0 - fTemp162):fTemp162); + double fTemp164 = (iSlow6?(0.0 - fTemp163):fTemp163); + output54[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp164):fTemp164)); + double fTemp165 = double(input55[i]); + double fTemp166 = (iSlow5?(0.0 - fTemp165):fTemp165); + double fTemp167 = (iSlow6?(0.0 - fTemp166):fTemp166); + output55[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp167):fTemp167)); + double fTemp168 = double(input56[i]); + double fTemp169 = (iSlow7?(0.0 - fTemp168):fTemp168); + double fTemp170 = (iSlow3?(0.0 - fTemp169):fTemp169); + output56[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp170):fTemp170)); + double fTemp171 = double(input57[i]); + double fTemp172 = (iSlow5?(0.0 - fTemp171):fTemp171); + double fTemp173 = (iSlow3?(0.0 - fTemp172):fTemp172); + output57[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp173):fTemp173)); + double fTemp174 = double(input58[i]); + double fTemp175 = (iSlow7?(0.0 - fTemp174):fTemp174); + double fTemp176 = (iSlow3?(0.0 - fTemp175):fTemp175); + output58[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp176):fTemp176)); + double fTemp177 = double(input59[i]); + double fTemp178 = (iSlow5?(0.0 - fTemp177):fTemp177); + double fTemp179 = (iSlow3?(0.0 - fTemp178):fTemp178); + output59[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp179):fTemp179)); + double fTemp180 = double(input60[i]); + double fTemp181 = (iSlow7?(0.0 - fTemp180):fTemp180); + double fTemp182 = (iSlow3?(0.0 - fTemp181):fTemp181); + output60[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp182):fTemp182)); + double fTemp183 = double(input61[i]); + double fTemp184 = (iSlow5?(0.0 - fTemp183):fTemp183); + double fTemp185 = (iSlow3?(0.0 - fTemp184):fTemp184); + output61[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp185):fTemp185)); + double fTemp186 = double(input62[i]); + double fTemp187 = (iSlow7?(0.0 - fTemp186):fTemp186); + double fTemp188 = (iSlow3?(0.0 - fTemp187):fTemp187); + output62[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp188):fTemp188)); + double fTemp189 = double(input63[i]); + double fTemp190 = (iSlow5?(0.0 - fTemp189):fTemp189); + double fTemp191 = (iSlow3?(0.0 - fTemp190):fTemp190); + output63[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp191):fTemp191)); + double fTemp192 = double(input64[i]); + double fTemp193 = (iSlow5?(0.0 - fTemp192):fTemp192); + double fTemp194 = (iSlow6?(0.0 - fTemp193):fTemp193); + output64[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp194):fTemp194)); + double fTemp195 = double(input65[i]); + double fTemp196 = (iSlow7?(0.0 - fTemp195):fTemp195); + double fTemp197 = (iSlow6?(0.0 - fTemp196):fTemp196); + output65[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp197):fTemp197)); + double fTemp198 = double(input66[i]); + double fTemp199 = (iSlow5?(0.0 - fTemp198):fTemp198); + double fTemp200 = (iSlow6?(0.0 - fTemp199):fTemp199); + output66[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp200):fTemp200)); + double fTemp201 = double(input67[i]); + double fTemp202 = (iSlow7?(0.0 - fTemp201):fTemp201); + double fTemp203 = (iSlow6?(0.0 - fTemp202):fTemp202); + output67[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp203):fTemp203)); + double fTemp204 = double(input68[i]); + double fTemp205 = (iSlow5?(0.0 - fTemp204):fTemp204); + double fTemp206 = (iSlow6?(0.0 - fTemp205):fTemp205); + output68[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp206):fTemp206)); + double fTemp207 = double(input69[i]); + double fTemp208 = (iSlow7?(0.0 - fTemp207):fTemp207); + double fTemp209 = (iSlow6?(0.0 - fTemp208):fTemp208); + output69[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp209):fTemp209)); + double fTemp210 = double(input70[i]); + double fTemp211 = (iSlow5?(0.0 - fTemp210):fTemp210); + double fTemp212 = (iSlow6?(0.0 - fTemp211):fTemp211); + output70[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp212):fTemp212)); + double fTemp213 = double(input71[i]); + double fTemp214 = (iSlow7?(0.0 - fTemp213):fTemp213); + double fTemp215 = (iSlow6?(0.0 - fTemp214):fTemp214); + output71[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp215):fTemp215)); + double fTemp216 = double(input72[i]); + double fTemp217 = (iSlow5?(0.0 - fTemp216):fTemp216); + double fTemp218 = (iSlow3?(0.0 - fTemp217):fTemp217); + output72[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp218):fTemp218)); + double fTemp219 = double(input73[i]); + double fTemp220 = (iSlow7?(0.0 - fTemp219):fTemp219); + double fTemp221 = (iSlow3?(0.0 - fTemp220):fTemp220); + output73[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp221):fTemp221)); + double fTemp222 = double(input74[i]); + double fTemp223 = (iSlow5?(0.0 - fTemp222):fTemp222); + double fTemp224 = (iSlow3?(0.0 - fTemp223):fTemp223); + output74[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp224):fTemp224)); + double fTemp225 = double(input75[i]); + double fTemp226 = (iSlow7?(0.0 - fTemp225):fTemp225); + double fTemp227 = (iSlow3?(0.0 - fTemp226):fTemp226); + output75[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp227):fTemp227)); + double fTemp228 = double(input76[i]); + double fTemp229 = (iSlow5?(0.0 - fTemp228):fTemp228); + double fTemp230 = (iSlow3?(0.0 - fTemp229):fTemp229); + output76[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp230):fTemp230)); + double fTemp231 = double(input77[i]); + double fTemp232 = (iSlow7?(0.0 - fTemp231):fTemp231); + double fTemp233 = (iSlow3?(0.0 - fTemp232):fTemp232); + output77[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp233):fTemp233)); + double fTemp234 = double(input78[i]); + double fTemp235 = (iSlow5?(0.0 - fTemp234):fTemp234); + double fTemp236 = (iSlow3?(0.0 - fTemp235):fTemp235); + output78[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp236):fTemp236)); + double fTemp237 = double(input79[i]); + double fTemp238 = (iSlow7?(0.0 - fTemp237):fTemp237); + double fTemp239 = (iSlow3?(0.0 - fTemp238):fTemp238); + output79[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp239):fTemp239)); + double fTemp240 = double(input80[i]); + double fTemp241 = (iSlow5?(0.0 - fTemp240):fTemp240); + double fTemp242 = (iSlow3?(0.0 - fTemp241):fTemp241); + output80[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp242):fTemp242)); + double fTemp243 = double(input81[i]); + double fTemp244 = (iSlow5?(0.0 - fTemp243):fTemp243); + double fTemp245 = (iSlow6?(0.0 - fTemp244):fTemp244); + output81[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp245):fTemp245)); + double fTemp246 = double(input82[i]); + double fTemp247 = (iSlow7?(0.0 - fTemp246):fTemp246); + double fTemp248 = (iSlow6?(0.0 - fTemp247):fTemp247); + output82[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp248):fTemp248)); + double fTemp249 = double(input83[i]); + double fTemp250 = (iSlow5?(0.0 - fTemp249):fTemp249); + double fTemp251 = (iSlow6?(0.0 - fTemp250):fTemp250); + output83[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp251):fTemp251)); + double fTemp252 = double(input84[i]); + double fTemp253 = (iSlow7?(0.0 - fTemp252):fTemp252); + double fTemp254 = (iSlow6?(0.0 - fTemp253):fTemp253); + output84[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp254):fTemp254)); + double fTemp255 = double(input85[i]); + double fTemp256 = (iSlow5?(0.0 - fTemp255):fTemp255); + double fTemp257 = (iSlow6?(0.0 - fTemp256):fTemp256); + output85[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp257):fTemp257)); + double fTemp258 = double(input86[i]); + double fTemp259 = (iSlow7?(0.0 - fTemp258):fTemp258); + double fTemp260 = (iSlow6?(0.0 - fTemp259):fTemp259); + output86[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp260):fTemp260)); + double fTemp261 = double(input87[i]); + double fTemp262 = (iSlow5?(0.0 - fTemp261):fTemp261); + double fTemp263 = (iSlow6?(0.0 - fTemp262):fTemp262); + output87[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp263):fTemp263)); + double fTemp264 = double(input88[i]); + double fTemp265 = (iSlow7?(0.0 - fTemp264):fTemp264); + double fTemp266 = (iSlow6?(0.0 - fTemp265):fTemp265); + output88[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp266):fTemp266)); + double fTemp267 = double(input89[i]); + double fTemp268 = (iSlow5?(0.0 - fTemp267):fTemp267); + double fTemp269 = (iSlow6?(0.0 - fTemp268):fTemp268); + output89[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp269):fTemp269)); + double fTemp270 = double(input90[i]); + double fTemp271 = (iSlow7?(0.0 - fTemp270):fTemp270); + double fTemp272 = (iSlow3?(0.0 - fTemp271):fTemp271); + output90[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp272):fTemp272)); + double fTemp273 = double(input91[i]); + double fTemp274 = (iSlow5?(0.0 - fTemp273):fTemp273); + double fTemp275 = (iSlow3?(0.0 - fTemp274):fTemp274); + output91[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp275):fTemp275)); + double fTemp276 = double(input92[i]); + double fTemp277 = (iSlow7?(0.0 - fTemp276):fTemp276); + double fTemp278 = (iSlow3?(0.0 - fTemp277):fTemp277); + output92[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp278):fTemp278)); + double fTemp279 = double(input93[i]); + double fTemp280 = (iSlow5?(0.0 - fTemp279):fTemp279); + double fTemp281 = (iSlow3?(0.0 - fTemp280):fTemp280); + output93[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp281):fTemp281)); + double fTemp282 = double(input94[i]); + double fTemp283 = (iSlow7?(0.0 - fTemp282):fTemp282); + double fTemp284 = (iSlow3?(0.0 - fTemp283):fTemp283); + output94[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp284):fTemp284)); + double fTemp285 = double(input95[i]); + double fTemp286 = (iSlow5?(0.0 - fTemp285):fTemp285); + double fTemp287 = (iSlow3?(0.0 - fTemp286):fTemp286); + output95[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp287):fTemp287)); + double fTemp288 = double(input96[i]); + double fTemp289 = (iSlow7?(0.0 - fTemp288):fTemp288); + double fTemp290 = (iSlow3?(0.0 - fTemp289):fTemp289); + output96[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp290):fTemp290)); + double fTemp291 = double(input97[i]); + double fTemp292 = (iSlow5?(0.0 - fTemp291):fTemp291); + double fTemp293 = (iSlow3?(0.0 - fTemp292):fTemp292); + output97[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp293):fTemp293)); + double fTemp294 = double(input98[i]); + double fTemp295 = (iSlow7?(0.0 - fTemp294):fTemp294); + double fTemp296 = (iSlow3?(0.0 - fTemp295):fTemp295); + output98[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp296):fTemp296)); + double fTemp297 = double(input99[i]); + double fTemp298 = (iSlow5?(0.0 - fTemp297):fTemp297); + double fTemp299 = (iSlow3?(0.0 - fTemp298):fTemp298); + output99[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp299):fTemp299)); + double fTemp300 = double(input100[i]); + double fTemp301 = (iSlow5?(0.0 - fTemp300):fTemp300); + double fTemp302 = (iSlow6?(0.0 - fTemp301):fTemp301); + output100[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp302):fTemp302)); + double fTemp303 = double(input101[i]); + double fTemp304 = (iSlow7?(0.0 - fTemp303):fTemp303); + double fTemp305 = (iSlow6?(0.0 - fTemp304):fTemp304); + output101[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp305):fTemp305)); + double fTemp306 = double(input102[i]); + double fTemp307 = (iSlow5?(0.0 - fTemp306):fTemp306); + double fTemp308 = (iSlow6?(0.0 - fTemp307):fTemp307); + output102[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp308):fTemp308)); + double fTemp309 = double(input103[i]); + double fTemp310 = (iSlow7?(0.0 - fTemp309):fTemp309); + double fTemp311 = (iSlow6?(0.0 - fTemp310):fTemp310); + output103[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp311):fTemp311)); + double fTemp312 = double(input104[i]); + double fTemp313 = (iSlow5?(0.0 - fTemp312):fTemp312); + double fTemp314 = (iSlow6?(0.0 - fTemp313):fTemp313); + output104[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp314):fTemp314)); + double fTemp315 = double(input105[i]); + double fTemp316 = (iSlow7?(0.0 - fTemp315):fTemp315); + double fTemp317 = (iSlow6?(0.0 - fTemp316):fTemp316); + output105[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp317):fTemp317)); + double fTemp318 = double(input106[i]); + double fTemp319 = (iSlow5?(0.0 - fTemp318):fTemp318); + double fTemp320 = (iSlow6?(0.0 - fTemp319):fTemp319); + output106[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp320):fTemp320)); + double fTemp321 = double(input107[i]); + double fTemp322 = (iSlow7?(0.0 - fTemp321):fTemp321); + double fTemp323 = (iSlow6?(0.0 - fTemp322):fTemp322); + output107[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp323):fTemp323)); + double fTemp324 = double(input108[i]); + double fTemp325 = (iSlow5?(0.0 - fTemp324):fTemp324); + double fTemp326 = (iSlow6?(0.0 - fTemp325):fTemp325); + output108[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp326):fTemp326)); + double fTemp327 = double(input109[i]); + double fTemp328 = (iSlow7?(0.0 - fTemp327):fTemp327); + double fTemp329 = (iSlow6?(0.0 - fTemp328):fTemp328); + output109[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp329):fTemp329)); + double fTemp330 = double(input110[i]); + double fTemp331 = (iSlow5?(0.0 - fTemp330):fTemp330); + double fTemp332 = (iSlow3?(0.0 - fTemp331):fTemp331); + output110[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp332):fTemp332)); + double fTemp333 = double(input111[i]); + double fTemp334 = (iSlow7?(0.0 - fTemp333):fTemp333); + double fTemp335 = (iSlow3?(0.0 - fTemp334):fTemp334); + output111[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp335):fTemp335)); + double fTemp336 = double(input112[i]); + double fTemp337 = (iSlow5?(0.0 - fTemp336):fTemp336); + double fTemp338 = (iSlow3?(0.0 - fTemp337):fTemp337); + output112[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp338):fTemp338)); + double fTemp339 = double(input113[i]); + double fTemp340 = (iSlow7?(0.0 - fTemp339):fTemp339); + double fTemp341 = (iSlow3?(0.0 - fTemp340):fTemp340); + output113[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp341):fTemp341)); + double fTemp342 = double(input114[i]); + double fTemp343 = (iSlow5?(0.0 - fTemp342):fTemp342); + double fTemp344 = (iSlow3?(0.0 - fTemp343):fTemp343); + output114[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp344):fTemp344)); + double fTemp345 = double(input115[i]); + double fTemp346 = (iSlow7?(0.0 - fTemp345):fTemp345); + double fTemp347 = (iSlow3?(0.0 - fTemp346):fTemp346); + output115[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp347):fTemp347)); + double fTemp348 = double(input116[i]); + double fTemp349 = (iSlow5?(0.0 - fTemp348):fTemp348); + double fTemp350 = (iSlow3?(0.0 - fTemp349):fTemp349); + output116[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp350):fTemp350)); + double fTemp351 = double(input117[i]); + double fTemp352 = (iSlow7?(0.0 - fTemp351):fTemp351); + double fTemp353 = (iSlow3?(0.0 - fTemp352):fTemp352); + output117[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp353):fTemp353)); + double fTemp354 = double(input118[i]); + double fTemp355 = (iSlow5?(0.0 - fTemp354):fTemp354); + double fTemp356 = (iSlow3?(0.0 - fTemp355):fTemp355); + output118[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp356):fTemp356)); + double fTemp357 = double(input119[i]); + double fTemp358 = (iSlow7?(0.0 - fTemp357):fTemp357); + double fTemp359 = (iSlow3?(0.0 - fTemp358):fTemp358); + output119[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp359):fTemp359)); + double fTemp360 = double(input120[i]); + double fTemp361 = (iSlow5?(0.0 - fTemp360):fTemp360); + double fTemp362 = (iSlow3?(0.0 - fTemp361):fTemp361); + output120[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp362):fTemp362)); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAMirror2.cpp b/source/HOAUGens/HOAMirror2.cpp index 4f46ade833..8c6f4e2046 100644 --- a/source/HOAUGens/HOAMirror2.cpp +++ b/source/HOAUGens/HOAMirror2.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOAMirror2" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,18 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -766,9 +785,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -853,7 +872,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1085,7 +1103,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1148,7 +1166,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1177,11 +1195,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAMirror3.cpp b/source/HOAUGens/HOAMirror3.cpp index 7166309e4c..556142aced 100644 --- a/source/HOAUGens/HOAMirror3.cpp +++ b/source/HOAUGens/HOAMirror3.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOAMirror3" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,18 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -822,9 +841,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -951,7 +970,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1183,7 +1201,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1246,7 +1264,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1275,11 +1293,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAMirror4.cpp b/source/HOAUGens/HOAMirror4.cpp index d8095837f0..89aa840d87 100644 --- a/source/HOAUGens/HOAMirror4.cpp +++ b/source/HOAUGens/HOAMirror4.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOAMirror4" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,18 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -894,9 +913,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1077,7 +1096,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1309,7 +1327,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1372,7 +1390,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1401,11 +1419,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAMirror5.cpp b/source/HOAUGens/HOAMirror5.cpp index cb9e7ba93e..0df862b410 100644 --- a/source/HOAUGens/HOAMirror5.cpp +++ b/source/HOAUGens/HOAMirror5.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOAMirror5" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,13 +613,18 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -982,9 +1001,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1231,7 +1250,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1463,7 +1481,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1526,7 +1544,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1555,11 +1573,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAMirror6.cpp b/source/HOAUGens/HOAMirror6.cpp new file mode 100644 index 0000000000..0d3f049612 --- /dev/null +++ b/source/HOAUGens/HOAMirror6.cpp @@ -0,0 +1,1771 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAMirror6" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror6"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 49; + + } + virtual int getNumOutputs() { + return 49; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + int iSlow0 = (double(fCheckbox0) == 1.0); + int iSlow1 = (iSlow0 & 0); + int iSlow2 = (double(fCheckbox1) == 1.0); + int iSlow3 = (iSlow2 & 0); + int iSlow4 = (double(fCheckbox2) == 1.0); + int iSlow5 = (iSlow4 & 0); + int iSlow6 = (iSlow2 & 1); + int iSlow7 = (iSlow4 & 1); + int iSlow8 = (iSlow0 & 1); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + double fTemp1 = (iSlow5?(0.0 - fTemp0):fTemp0); + double fTemp2 = (iSlow3?(0.0 - fTemp1):fTemp1); + output0[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp2):fTemp2)); + double fTemp3 = double(input1[i]); + double fTemp4 = (iSlow5?(0.0 - fTemp3):fTemp3); + double fTemp5 = (iSlow6?(0.0 - fTemp4):fTemp4); + output1[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp5):fTemp5)); + double fTemp6 = double(input2[i]); + double fTemp7 = (iSlow7?(0.0 - fTemp6):fTemp6); + double fTemp8 = (iSlow3?(0.0 - fTemp7):fTemp7); + output2[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp8):fTemp8)); + double fTemp9 = double(input3[i]); + double fTemp10 = (iSlow5?(0.0 - fTemp9):fTemp9); + double fTemp11 = (iSlow3?(0.0 - fTemp10):fTemp10); + output3[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp11):fTemp11)); + double fTemp12 = double(input4[i]); + double fTemp13 = (iSlow5?(0.0 - fTemp12):fTemp12); + double fTemp14 = (iSlow6?(0.0 - fTemp13):fTemp13); + output4[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp14):fTemp14)); + double fTemp15 = double(input5[i]); + double fTemp16 = (iSlow7?(0.0 - fTemp15):fTemp15); + double fTemp17 = (iSlow6?(0.0 - fTemp16):fTemp16); + output5[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp17):fTemp17)); + double fTemp18 = double(input6[i]); + double fTemp19 = (iSlow5?(0.0 - fTemp18):fTemp18); + double fTemp20 = (iSlow3?(0.0 - fTemp19):fTemp19); + output6[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp20):fTemp20)); + double fTemp21 = double(input7[i]); + double fTemp22 = (iSlow7?(0.0 - fTemp21):fTemp21); + double fTemp23 = (iSlow3?(0.0 - fTemp22):fTemp22); + output7[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp23):fTemp23)); + double fTemp24 = double(input8[i]); + double fTemp25 = (iSlow5?(0.0 - fTemp24):fTemp24); + double fTemp26 = (iSlow3?(0.0 - fTemp25):fTemp25); + output8[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp26):fTemp26)); + double fTemp27 = double(input9[i]); + double fTemp28 = (iSlow5?(0.0 - fTemp27):fTemp27); + double fTemp29 = (iSlow6?(0.0 - fTemp28):fTemp28); + output9[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp29):fTemp29)); + double fTemp30 = double(input10[i]); + double fTemp31 = (iSlow7?(0.0 - fTemp30):fTemp30); + double fTemp32 = (iSlow6?(0.0 - fTemp31):fTemp31); + output10[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp32):fTemp32)); + double fTemp33 = double(input11[i]); + double fTemp34 = (iSlow5?(0.0 - fTemp33):fTemp33); + double fTemp35 = (iSlow6?(0.0 - fTemp34):fTemp34); + output11[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp35):fTemp35)); + double fTemp36 = double(input12[i]); + double fTemp37 = (iSlow7?(0.0 - fTemp36):fTemp36); + double fTemp38 = (iSlow3?(0.0 - fTemp37):fTemp37); + output12[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp38):fTemp38)); + double fTemp39 = double(input13[i]); + double fTemp40 = (iSlow5?(0.0 - fTemp39):fTemp39); + double fTemp41 = (iSlow3?(0.0 - fTemp40):fTemp40); + output13[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp41):fTemp41)); + double fTemp42 = double(input14[i]); + double fTemp43 = (iSlow7?(0.0 - fTemp42):fTemp42); + double fTemp44 = (iSlow3?(0.0 - fTemp43):fTemp43); + output14[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp44):fTemp44)); + double fTemp45 = double(input15[i]); + double fTemp46 = (iSlow5?(0.0 - fTemp45):fTemp45); + double fTemp47 = (iSlow3?(0.0 - fTemp46):fTemp46); + output15[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp47):fTemp47)); + double fTemp48 = double(input16[i]); + double fTemp49 = (iSlow5?(0.0 - fTemp48):fTemp48); + double fTemp50 = (iSlow6?(0.0 - fTemp49):fTemp49); + output16[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp50):fTemp50)); + double fTemp51 = double(input17[i]); + double fTemp52 = (iSlow7?(0.0 - fTemp51):fTemp51); + double fTemp53 = (iSlow6?(0.0 - fTemp52):fTemp52); + output17[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp53):fTemp53)); + double fTemp54 = double(input18[i]); + double fTemp55 = (iSlow5?(0.0 - fTemp54):fTemp54); + double fTemp56 = (iSlow6?(0.0 - fTemp55):fTemp55); + output18[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp56):fTemp56)); + double fTemp57 = double(input19[i]); + double fTemp58 = (iSlow7?(0.0 - fTemp57):fTemp57); + double fTemp59 = (iSlow6?(0.0 - fTemp58):fTemp58); + output19[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp59):fTemp59)); + double fTemp60 = double(input20[i]); + double fTemp61 = (iSlow5?(0.0 - fTemp60):fTemp60); + double fTemp62 = (iSlow3?(0.0 - fTemp61):fTemp61); + output20[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp62):fTemp62)); + double fTemp63 = double(input21[i]); + double fTemp64 = (iSlow7?(0.0 - fTemp63):fTemp63); + double fTemp65 = (iSlow3?(0.0 - fTemp64):fTemp64); + output21[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp65):fTemp65)); + double fTemp66 = double(input22[i]); + double fTemp67 = (iSlow5?(0.0 - fTemp66):fTemp66); + double fTemp68 = (iSlow3?(0.0 - fTemp67):fTemp67); + output22[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp68):fTemp68)); + double fTemp69 = double(input23[i]); + double fTemp70 = (iSlow7?(0.0 - fTemp69):fTemp69); + double fTemp71 = (iSlow3?(0.0 - fTemp70):fTemp70); + output23[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp71):fTemp71)); + double fTemp72 = double(input24[i]); + double fTemp73 = (iSlow5?(0.0 - fTemp72):fTemp72); + double fTemp74 = (iSlow3?(0.0 - fTemp73):fTemp73); + output24[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp74):fTemp74)); + double fTemp75 = double(input25[i]); + double fTemp76 = (iSlow5?(0.0 - fTemp75):fTemp75); + double fTemp77 = (iSlow6?(0.0 - fTemp76):fTemp76); + output25[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp77):fTemp77)); + double fTemp78 = double(input26[i]); + double fTemp79 = (iSlow7?(0.0 - fTemp78):fTemp78); + double fTemp80 = (iSlow6?(0.0 - fTemp79):fTemp79); + output26[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp80):fTemp80)); + double fTemp81 = double(input27[i]); + double fTemp82 = (iSlow5?(0.0 - fTemp81):fTemp81); + double fTemp83 = (iSlow6?(0.0 - fTemp82):fTemp82); + output27[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp83):fTemp83)); + double fTemp84 = double(input28[i]); + double fTemp85 = (iSlow7?(0.0 - fTemp84):fTemp84); + double fTemp86 = (iSlow6?(0.0 - fTemp85):fTemp85); + output28[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp86):fTemp86)); + double fTemp87 = double(input29[i]); + double fTemp88 = (iSlow5?(0.0 - fTemp87):fTemp87); + double fTemp89 = (iSlow6?(0.0 - fTemp88):fTemp88); + output29[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp89):fTemp89)); + double fTemp90 = double(input30[i]); + double fTemp91 = (iSlow7?(0.0 - fTemp90):fTemp90); + double fTemp92 = (iSlow3?(0.0 - fTemp91):fTemp91); + output30[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp92):fTemp92)); + double fTemp93 = double(input31[i]); + double fTemp94 = (iSlow5?(0.0 - fTemp93):fTemp93); + double fTemp95 = (iSlow3?(0.0 - fTemp94):fTemp94); + output31[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp95):fTemp95)); + double fTemp96 = double(input32[i]); + double fTemp97 = (iSlow7?(0.0 - fTemp96):fTemp96); + double fTemp98 = (iSlow3?(0.0 - fTemp97):fTemp97); + output32[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp98):fTemp98)); + double fTemp99 = double(input33[i]); + double fTemp100 = (iSlow5?(0.0 - fTemp99):fTemp99); + double fTemp101 = (iSlow3?(0.0 - fTemp100):fTemp100); + output33[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp101):fTemp101)); + double fTemp102 = double(input34[i]); + double fTemp103 = (iSlow7?(0.0 - fTemp102):fTemp102); + double fTemp104 = (iSlow3?(0.0 - fTemp103):fTemp103); + output34[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp104):fTemp104)); + double fTemp105 = double(input35[i]); + double fTemp106 = (iSlow5?(0.0 - fTemp105):fTemp105); + double fTemp107 = (iSlow3?(0.0 - fTemp106):fTemp106); + output35[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp107):fTemp107)); + double fTemp108 = double(input36[i]); + double fTemp109 = (iSlow5?(0.0 - fTemp108):fTemp108); + double fTemp110 = (iSlow6?(0.0 - fTemp109):fTemp109); + output36[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp110):fTemp110)); + double fTemp111 = double(input37[i]); + double fTemp112 = (iSlow7?(0.0 - fTemp111):fTemp111); + double fTemp113 = (iSlow6?(0.0 - fTemp112):fTemp112); + output37[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp113):fTemp113)); + double fTemp114 = double(input38[i]); + double fTemp115 = (iSlow5?(0.0 - fTemp114):fTemp114); + double fTemp116 = (iSlow6?(0.0 - fTemp115):fTemp115); + output38[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp116):fTemp116)); + double fTemp117 = double(input39[i]); + double fTemp118 = (iSlow7?(0.0 - fTemp117):fTemp117); + double fTemp119 = (iSlow6?(0.0 - fTemp118):fTemp118); + output39[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp119):fTemp119)); + double fTemp120 = double(input40[i]); + double fTemp121 = (iSlow5?(0.0 - fTemp120):fTemp120); + double fTemp122 = (iSlow6?(0.0 - fTemp121):fTemp121); + output40[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp122):fTemp122)); + double fTemp123 = double(input41[i]); + double fTemp124 = (iSlow7?(0.0 - fTemp123):fTemp123); + double fTemp125 = (iSlow6?(0.0 - fTemp124):fTemp124); + output41[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp125):fTemp125)); + double fTemp126 = double(input42[i]); + double fTemp127 = (iSlow5?(0.0 - fTemp126):fTemp126); + double fTemp128 = (iSlow3?(0.0 - fTemp127):fTemp127); + output42[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp128):fTemp128)); + double fTemp129 = double(input43[i]); + double fTemp130 = (iSlow7?(0.0 - fTemp129):fTemp129); + double fTemp131 = (iSlow3?(0.0 - fTemp130):fTemp130); + output43[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp131):fTemp131)); + double fTemp132 = double(input44[i]); + double fTemp133 = (iSlow5?(0.0 - fTemp132):fTemp132); + double fTemp134 = (iSlow3?(0.0 - fTemp133):fTemp133); + output44[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp134):fTemp134)); + double fTemp135 = double(input45[i]); + double fTemp136 = (iSlow7?(0.0 - fTemp135):fTemp135); + double fTemp137 = (iSlow3?(0.0 - fTemp136):fTemp136); + output45[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp137):fTemp137)); + double fTemp138 = double(input46[i]); + double fTemp139 = (iSlow5?(0.0 - fTemp138):fTemp138); + double fTemp140 = (iSlow3?(0.0 - fTemp139):fTemp139); + output46[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp140):fTemp140)); + double fTemp141 = double(input47[i]); + double fTemp142 = (iSlow7?(0.0 - fTemp141):fTemp141); + double fTemp143 = (iSlow3?(0.0 - fTemp142):fTemp142); + output47[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp143):fTemp143)); + double fTemp144 = double(input48[i]); + double fTemp145 = (iSlow5?(0.0 - fTemp144):fTemp144); + double fTemp146 = (iSlow3?(0.0 - fTemp145):fTemp145); + output48[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp146):fTemp146)); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAMirror7.cpp b/source/HOAUGens/HOAMirror7.cpp new file mode 100644 index 0000000000..f2d1918ec3 --- /dev/null +++ b/source/HOAUGens/HOAMirror7.cpp @@ -0,0 +1,1981 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAMirror7" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror7"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 64; + + } + virtual int getNumOutputs() { + return 64; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + int iSlow0 = (double(fCheckbox0) == 1.0); + int iSlow1 = (iSlow0 & 0); + int iSlow2 = (double(fCheckbox1) == 1.0); + int iSlow3 = (iSlow2 & 0); + int iSlow4 = (double(fCheckbox2) == 1.0); + int iSlow5 = (iSlow4 & 0); + int iSlow6 = (iSlow2 & 1); + int iSlow7 = (iSlow4 & 1); + int iSlow8 = (iSlow0 & 1); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + double fTemp1 = (iSlow5?(0.0 - fTemp0):fTemp0); + double fTemp2 = (iSlow3?(0.0 - fTemp1):fTemp1); + output0[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp2):fTemp2)); + double fTemp3 = double(input1[i]); + double fTemp4 = (iSlow5?(0.0 - fTemp3):fTemp3); + double fTemp5 = (iSlow6?(0.0 - fTemp4):fTemp4); + output1[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp5):fTemp5)); + double fTemp6 = double(input2[i]); + double fTemp7 = (iSlow7?(0.0 - fTemp6):fTemp6); + double fTemp8 = (iSlow3?(0.0 - fTemp7):fTemp7); + output2[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp8):fTemp8)); + double fTemp9 = double(input3[i]); + double fTemp10 = (iSlow5?(0.0 - fTemp9):fTemp9); + double fTemp11 = (iSlow3?(0.0 - fTemp10):fTemp10); + output3[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp11):fTemp11)); + double fTemp12 = double(input4[i]); + double fTemp13 = (iSlow5?(0.0 - fTemp12):fTemp12); + double fTemp14 = (iSlow6?(0.0 - fTemp13):fTemp13); + output4[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp14):fTemp14)); + double fTemp15 = double(input5[i]); + double fTemp16 = (iSlow7?(0.0 - fTemp15):fTemp15); + double fTemp17 = (iSlow6?(0.0 - fTemp16):fTemp16); + output5[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp17):fTemp17)); + double fTemp18 = double(input6[i]); + double fTemp19 = (iSlow5?(0.0 - fTemp18):fTemp18); + double fTemp20 = (iSlow3?(0.0 - fTemp19):fTemp19); + output6[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp20):fTemp20)); + double fTemp21 = double(input7[i]); + double fTemp22 = (iSlow7?(0.0 - fTemp21):fTemp21); + double fTemp23 = (iSlow3?(0.0 - fTemp22):fTemp22); + output7[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp23):fTemp23)); + double fTemp24 = double(input8[i]); + double fTemp25 = (iSlow5?(0.0 - fTemp24):fTemp24); + double fTemp26 = (iSlow3?(0.0 - fTemp25):fTemp25); + output8[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp26):fTemp26)); + double fTemp27 = double(input9[i]); + double fTemp28 = (iSlow5?(0.0 - fTemp27):fTemp27); + double fTemp29 = (iSlow6?(0.0 - fTemp28):fTemp28); + output9[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp29):fTemp29)); + double fTemp30 = double(input10[i]); + double fTemp31 = (iSlow7?(0.0 - fTemp30):fTemp30); + double fTemp32 = (iSlow6?(0.0 - fTemp31):fTemp31); + output10[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp32):fTemp32)); + double fTemp33 = double(input11[i]); + double fTemp34 = (iSlow5?(0.0 - fTemp33):fTemp33); + double fTemp35 = (iSlow6?(0.0 - fTemp34):fTemp34); + output11[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp35):fTemp35)); + double fTemp36 = double(input12[i]); + double fTemp37 = (iSlow7?(0.0 - fTemp36):fTemp36); + double fTemp38 = (iSlow3?(0.0 - fTemp37):fTemp37); + output12[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp38):fTemp38)); + double fTemp39 = double(input13[i]); + double fTemp40 = (iSlow5?(0.0 - fTemp39):fTemp39); + double fTemp41 = (iSlow3?(0.0 - fTemp40):fTemp40); + output13[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp41):fTemp41)); + double fTemp42 = double(input14[i]); + double fTemp43 = (iSlow7?(0.0 - fTemp42):fTemp42); + double fTemp44 = (iSlow3?(0.0 - fTemp43):fTemp43); + output14[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp44):fTemp44)); + double fTemp45 = double(input15[i]); + double fTemp46 = (iSlow5?(0.0 - fTemp45):fTemp45); + double fTemp47 = (iSlow3?(0.0 - fTemp46):fTemp46); + output15[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp47):fTemp47)); + double fTemp48 = double(input16[i]); + double fTemp49 = (iSlow5?(0.0 - fTemp48):fTemp48); + double fTemp50 = (iSlow6?(0.0 - fTemp49):fTemp49); + output16[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp50):fTemp50)); + double fTemp51 = double(input17[i]); + double fTemp52 = (iSlow7?(0.0 - fTemp51):fTemp51); + double fTemp53 = (iSlow6?(0.0 - fTemp52):fTemp52); + output17[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp53):fTemp53)); + double fTemp54 = double(input18[i]); + double fTemp55 = (iSlow5?(0.0 - fTemp54):fTemp54); + double fTemp56 = (iSlow6?(0.0 - fTemp55):fTemp55); + output18[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp56):fTemp56)); + double fTemp57 = double(input19[i]); + double fTemp58 = (iSlow7?(0.0 - fTemp57):fTemp57); + double fTemp59 = (iSlow6?(0.0 - fTemp58):fTemp58); + output19[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp59):fTemp59)); + double fTemp60 = double(input20[i]); + double fTemp61 = (iSlow5?(0.0 - fTemp60):fTemp60); + double fTemp62 = (iSlow3?(0.0 - fTemp61):fTemp61); + output20[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp62):fTemp62)); + double fTemp63 = double(input21[i]); + double fTemp64 = (iSlow7?(0.0 - fTemp63):fTemp63); + double fTemp65 = (iSlow3?(0.0 - fTemp64):fTemp64); + output21[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp65):fTemp65)); + double fTemp66 = double(input22[i]); + double fTemp67 = (iSlow5?(0.0 - fTemp66):fTemp66); + double fTemp68 = (iSlow3?(0.0 - fTemp67):fTemp67); + output22[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp68):fTemp68)); + double fTemp69 = double(input23[i]); + double fTemp70 = (iSlow7?(0.0 - fTemp69):fTemp69); + double fTemp71 = (iSlow3?(0.0 - fTemp70):fTemp70); + output23[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp71):fTemp71)); + double fTemp72 = double(input24[i]); + double fTemp73 = (iSlow5?(0.0 - fTemp72):fTemp72); + double fTemp74 = (iSlow3?(0.0 - fTemp73):fTemp73); + output24[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp74):fTemp74)); + double fTemp75 = double(input25[i]); + double fTemp76 = (iSlow5?(0.0 - fTemp75):fTemp75); + double fTemp77 = (iSlow6?(0.0 - fTemp76):fTemp76); + output25[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp77):fTemp77)); + double fTemp78 = double(input26[i]); + double fTemp79 = (iSlow7?(0.0 - fTemp78):fTemp78); + double fTemp80 = (iSlow6?(0.0 - fTemp79):fTemp79); + output26[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp80):fTemp80)); + double fTemp81 = double(input27[i]); + double fTemp82 = (iSlow5?(0.0 - fTemp81):fTemp81); + double fTemp83 = (iSlow6?(0.0 - fTemp82):fTemp82); + output27[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp83):fTemp83)); + double fTemp84 = double(input28[i]); + double fTemp85 = (iSlow7?(0.0 - fTemp84):fTemp84); + double fTemp86 = (iSlow6?(0.0 - fTemp85):fTemp85); + output28[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp86):fTemp86)); + double fTemp87 = double(input29[i]); + double fTemp88 = (iSlow5?(0.0 - fTemp87):fTemp87); + double fTemp89 = (iSlow6?(0.0 - fTemp88):fTemp88); + output29[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp89):fTemp89)); + double fTemp90 = double(input30[i]); + double fTemp91 = (iSlow7?(0.0 - fTemp90):fTemp90); + double fTemp92 = (iSlow3?(0.0 - fTemp91):fTemp91); + output30[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp92):fTemp92)); + double fTemp93 = double(input31[i]); + double fTemp94 = (iSlow5?(0.0 - fTemp93):fTemp93); + double fTemp95 = (iSlow3?(0.0 - fTemp94):fTemp94); + output31[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp95):fTemp95)); + double fTemp96 = double(input32[i]); + double fTemp97 = (iSlow7?(0.0 - fTemp96):fTemp96); + double fTemp98 = (iSlow3?(0.0 - fTemp97):fTemp97); + output32[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp98):fTemp98)); + double fTemp99 = double(input33[i]); + double fTemp100 = (iSlow5?(0.0 - fTemp99):fTemp99); + double fTemp101 = (iSlow3?(0.0 - fTemp100):fTemp100); + output33[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp101):fTemp101)); + double fTemp102 = double(input34[i]); + double fTemp103 = (iSlow7?(0.0 - fTemp102):fTemp102); + double fTemp104 = (iSlow3?(0.0 - fTemp103):fTemp103); + output34[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp104):fTemp104)); + double fTemp105 = double(input35[i]); + double fTemp106 = (iSlow5?(0.0 - fTemp105):fTemp105); + double fTemp107 = (iSlow3?(0.0 - fTemp106):fTemp106); + output35[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp107):fTemp107)); + double fTemp108 = double(input36[i]); + double fTemp109 = (iSlow5?(0.0 - fTemp108):fTemp108); + double fTemp110 = (iSlow6?(0.0 - fTemp109):fTemp109); + output36[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp110):fTemp110)); + double fTemp111 = double(input37[i]); + double fTemp112 = (iSlow7?(0.0 - fTemp111):fTemp111); + double fTemp113 = (iSlow6?(0.0 - fTemp112):fTemp112); + output37[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp113):fTemp113)); + double fTemp114 = double(input38[i]); + double fTemp115 = (iSlow5?(0.0 - fTemp114):fTemp114); + double fTemp116 = (iSlow6?(0.0 - fTemp115):fTemp115); + output38[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp116):fTemp116)); + double fTemp117 = double(input39[i]); + double fTemp118 = (iSlow7?(0.0 - fTemp117):fTemp117); + double fTemp119 = (iSlow6?(0.0 - fTemp118):fTemp118); + output39[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp119):fTemp119)); + double fTemp120 = double(input40[i]); + double fTemp121 = (iSlow5?(0.0 - fTemp120):fTemp120); + double fTemp122 = (iSlow6?(0.0 - fTemp121):fTemp121); + output40[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp122):fTemp122)); + double fTemp123 = double(input41[i]); + double fTemp124 = (iSlow7?(0.0 - fTemp123):fTemp123); + double fTemp125 = (iSlow6?(0.0 - fTemp124):fTemp124); + output41[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp125):fTemp125)); + double fTemp126 = double(input42[i]); + double fTemp127 = (iSlow5?(0.0 - fTemp126):fTemp126); + double fTemp128 = (iSlow3?(0.0 - fTemp127):fTemp127); + output42[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp128):fTemp128)); + double fTemp129 = double(input43[i]); + double fTemp130 = (iSlow7?(0.0 - fTemp129):fTemp129); + double fTemp131 = (iSlow3?(0.0 - fTemp130):fTemp130); + output43[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp131):fTemp131)); + double fTemp132 = double(input44[i]); + double fTemp133 = (iSlow5?(0.0 - fTemp132):fTemp132); + double fTemp134 = (iSlow3?(0.0 - fTemp133):fTemp133); + output44[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp134):fTemp134)); + double fTemp135 = double(input45[i]); + double fTemp136 = (iSlow7?(0.0 - fTemp135):fTemp135); + double fTemp137 = (iSlow3?(0.0 - fTemp136):fTemp136); + output45[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp137):fTemp137)); + double fTemp138 = double(input46[i]); + double fTemp139 = (iSlow5?(0.0 - fTemp138):fTemp138); + double fTemp140 = (iSlow3?(0.0 - fTemp139):fTemp139); + output46[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp140):fTemp140)); + double fTemp141 = double(input47[i]); + double fTemp142 = (iSlow7?(0.0 - fTemp141):fTemp141); + double fTemp143 = (iSlow3?(0.0 - fTemp142):fTemp142); + output47[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp143):fTemp143)); + double fTemp144 = double(input48[i]); + double fTemp145 = (iSlow5?(0.0 - fTemp144):fTemp144); + double fTemp146 = (iSlow3?(0.0 - fTemp145):fTemp145); + output48[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp146):fTemp146)); + double fTemp147 = double(input49[i]); + double fTemp148 = (iSlow5?(0.0 - fTemp147):fTemp147); + double fTemp149 = (iSlow6?(0.0 - fTemp148):fTemp148); + output49[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp149):fTemp149)); + double fTemp150 = double(input50[i]); + double fTemp151 = (iSlow7?(0.0 - fTemp150):fTemp150); + double fTemp152 = (iSlow6?(0.0 - fTemp151):fTemp151); + output50[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp152):fTemp152)); + double fTemp153 = double(input51[i]); + double fTemp154 = (iSlow5?(0.0 - fTemp153):fTemp153); + double fTemp155 = (iSlow6?(0.0 - fTemp154):fTemp154); + output51[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp155):fTemp155)); + double fTemp156 = double(input52[i]); + double fTemp157 = (iSlow7?(0.0 - fTemp156):fTemp156); + double fTemp158 = (iSlow6?(0.0 - fTemp157):fTemp157); + output52[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp158):fTemp158)); + double fTemp159 = double(input53[i]); + double fTemp160 = (iSlow5?(0.0 - fTemp159):fTemp159); + double fTemp161 = (iSlow6?(0.0 - fTemp160):fTemp160); + output53[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp161):fTemp161)); + double fTemp162 = double(input54[i]); + double fTemp163 = (iSlow7?(0.0 - fTemp162):fTemp162); + double fTemp164 = (iSlow6?(0.0 - fTemp163):fTemp163); + output54[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp164):fTemp164)); + double fTemp165 = double(input55[i]); + double fTemp166 = (iSlow5?(0.0 - fTemp165):fTemp165); + double fTemp167 = (iSlow6?(0.0 - fTemp166):fTemp166); + output55[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp167):fTemp167)); + double fTemp168 = double(input56[i]); + double fTemp169 = (iSlow7?(0.0 - fTemp168):fTemp168); + double fTemp170 = (iSlow3?(0.0 - fTemp169):fTemp169); + output56[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp170):fTemp170)); + double fTemp171 = double(input57[i]); + double fTemp172 = (iSlow5?(0.0 - fTemp171):fTemp171); + double fTemp173 = (iSlow3?(0.0 - fTemp172):fTemp172); + output57[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp173):fTemp173)); + double fTemp174 = double(input58[i]); + double fTemp175 = (iSlow7?(0.0 - fTemp174):fTemp174); + double fTemp176 = (iSlow3?(0.0 - fTemp175):fTemp175); + output58[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp176):fTemp176)); + double fTemp177 = double(input59[i]); + double fTemp178 = (iSlow5?(0.0 - fTemp177):fTemp177); + double fTemp179 = (iSlow3?(0.0 - fTemp178):fTemp178); + output59[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp179):fTemp179)); + double fTemp180 = double(input60[i]); + double fTemp181 = (iSlow7?(0.0 - fTemp180):fTemp180); + double fTemp182 = (iSlow3?(0.0 - fTemp181):fTemp181); + output60[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp182):fTemp182)); + double fTemp183 = double(input61[i]); + double fTemp184 = (iSlow5?(0.0 - fTemp183):fTemp183); + double fTemp185 = (iSlow3?(0.0 - fTemp184):fTemp184); + output61[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp185):fTemp185)); + double fTemp186 = double(input62[i]); + double fTemp187 = (iSlow7?(0.0 - fTemp186):fTemp186); + double fTemp188 = (iSlow3?(0.0 - fTemp187):fTemp187); + output62[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp188):fTemp188)); + double fTemp189 = double(input63[i]); + double fTemp190 = (iSlow5?(0.0 - fTemp189):fTemp189); + double fTemp191 = (iSlow3?(0.0 - fTemp190):fTemp190); + output63[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp191):fTemp191)); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAMirror8.cpp b/source/HOAUGens/HOAMirror8.cpp new file mode 100644 index 0000000000..bf33a88d6a --- /dev/null +++ b/source/HOAUGens/HOAMirror8.cpp @@ -0,0 +1,2219 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAMirror8" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror8"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 81; + + } + virtual int getNumOutputs() { + return 81; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + int iSlow0 = (double(fCheckbox0) == 1.0); + int iSlow1 = (iSlow0 & 0); + int iSlow2 = (double(fCheckbox1) == 1.0); + int iSlow3 = (iSlow2 & 0); + int iSlow4 = (double(fCheckbox2) == 1.0); + int iSlow5 = (iSlow4 & 0); + int iSlow6 = (iSlow2 & 1); + int iSlow7 = (iSlow4 & 1); + int iSlow8 = (iSlow0 & 1); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + double fTemp1 = (iSlow5?(0.0 - fTemp0):fTemp0); + double fTemp2 = (iSlow3?(0.0 - fTemp1):fTemp1); + output0[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp2):fTemp2)); + double fTemp3 = double(input1[i]); + double fTemp4 = (iSlow5?(0.0 - fTemp3):fTemp3); + double fTemp5 = (iSlow6?(0.0 - fTemp4):fTemp4); + output1[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp5):fTemp5)); + double fTemp6 = double(input2[i]); + double fTemp7 = (iSlow7?(0.0 - fTemp6):fTemp6); + double fTemp8 = (iSlow3?(0.0 - fTemp7):fTemp7); + output2[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp8):fTemp8)); + double fTemp9 = double(input3[i]); + double fTemp10 = (iSlow5?(0.0 - fTemp9):fTemp9); + double fTemp11 = (iSlow3?(0.0 - fTemp10):fTemp10); + output3[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp11):fTemp11)); + double fTemp12 = double(input4[i]); + double fTemp13 = (iSlow5?(0.0 - fTemp12):fTemp12); + double fTemp14 = (iSlow6?(0.0 - fTemp13):fTemp13); + output4[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp14):fTemp14)); + double fTemp15 = double(input5[i]); + double fTemp16 = (iSlow7?(0.0 - fTemp15):fTemp15); + double fTemp17 = (iSlow6?(0.0 - fTemp16):fTemp16); + output5[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp17):fTemp17)); + double fTemp18 = double(input6[i]); + double fTemp19 = (iSlow5?(0.0 - fTemp18):fTemp18); + double fTemp20 = (iSlow3?(0.0 - fTemp19):fTemp19); + output6[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp20):fTemp20)); + double fTemp21 = double(input7[i]); + double fTemp22 = (iSlow7?(0.0 - fTemp21):fTemp21); + double fTemp23 = (iSlow3?(0.0 - fTemp22):fTemp22); + output7[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp23):fTemp23)); + double fTemp24 = double(input8[i]); + double fTemp25 = (iSlow5?(0.0 - fTemp24):fTemp24); + double fTemp26 = (iSlow3?(0.0 - fTemp25):fTemp25); + output8[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp26):fTemp26)); + double fTemp27 = double(input9[i]); + double fTemp28 = (iSlow5?(0.0 - fTemp27):fTemp27); + double fTemp29 = (iSlow6?(0.0 - fTemp28):fTemp28); + output9[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp29):fTemp29)); + double fTemp30 = double(input10[i]); + double fTemp31 = (iSlow7?(0.0 - fTemp30):fTemp30); + double fTemp32 = (iSlow6?(0.0 - fTemp31):fTemp31); + output10[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp32):fTemp32)); + double fTemp33 = double(input11[i]); + double fTemp34 = (iSlow5?(0.0 - fTemp33):fTemp33); + double fTemp35 = (iSlow6?(0.0 - fTemp34):fTemp34); + output11[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp35):fTemp35)); + double fTemp36 = double(input12[i]); + double fTemp37 = (iSlow7?(0.0 - fTemp36):fTemp36); + double fTemp38 = (iSlow3?(0.0 - fTemp37):fTemp37); + output12[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp38):fTemp38)); + double fTemp39 = double(input13[i]); + double fTemp40 = (iSlow5?(0.0 - fTemp39):fTemp39); + double fTemp41 = (iSlow3?(0.0 - fTemp40):fTemp40); + output13[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp41):fTemp41)); + double fTemp42 = double(input14[i]); + double fTemp43 = (iSlow7?(0.0 - fTemp42):fTemp42); + double fTemp44 = (iSlow3?(0.0 - fTemp43):fTemp43); + output14[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp44):fTemp44)); + double fTemp45 = double(input15[i]); + double fTemp46 = (iSlow5?(0.0 - fTemp45):fTemp45); + double fTemp47 = (iSlow3?(0.0 - fTemp46):fTemp46); + output15[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp47):fTemp47)); + double fTemp48 = double(input16[i]); + double fTemp49 = (iSlow5?(0.0 - fTemp48):fTemp48); + double fTemp50 = (iSlow6?(0.0 - fTemp49):fTemp49); + output16[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp50):fTemp50)); + double fTemp51 = double(input17[i]); + double fTemp52 = (iSlow7?(0.0 - fTemp51):fTemp51); + double fTemp53 = (iSlow6?(0.0 - fTemp52):fTemp52); + output17[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp53):fTemp53)); + double fTemp54 = double(input18[i]); + double fTemp55 = (iSlow5?(0.0 - fTemp54):fTemp54); + double fTemp56 = (iSlow6?(0.0 - fTemp55):fTemp55); + output18[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp56):fTemp56)); + double fTemp57 = double(input19[i]); + double fTemp58 = (iSlow7?(0.0 - fTemp57):fTemp57); + double fTemp59 = (iSlow6?(0.0 - fTemp58):fTemp58); + output19[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp59):fTemp59)); + double fTemp60 = double(input20[i]); + double fTemp61 = (iSlow5?(0.0 - fTemp60):fTemp60); + double fTemp62 = (iSlow3?(0.0 - fTemp61):fTemp61); + output20[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp62):fTemp62)); + double fTemp63 = double(input21[i]); + double fTemp64 = (iSlow7?(0.0 - fTemp63):fTemp63); + double fTemp65 = (iSlow3?(0.0 - fTemp64):fTemp64); + output21[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp65):fTemp65)); + double fTemp66 = double(input22[i]); + double fTemp67 = (iSlow5?(0.0 - fTemp66):fTemp66); + double fTemp68 = (iSlow3?(0.0 - fTemp67):fTemp67); + output22[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp68):fTemp68)); + double fTemp69 = double(input23[i]); + double fTemp70 = (iSlow7?(0.0 - fTemp69):fTemp69); + double fTemp71 = (iSlow3?(0.0 - fTemp70):fTemp70); + output23[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp71):fTemp71)); + double fTemp72 = double(input24[i]); + double fTemp73 = (iSlow5?(0.0 - fTemp72):fTemp72); + double fTemp74 = (iSlow3?(0.0 - fTemp73):fTemp73); + output24[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp74):fTemp74)); + double fTemp75 = double(input25[i]); + double fTemp76 = (iSlow5?(0.0 - fTemp75):fTemp75); + double fTemp77 = (iSlow6?(0.0 - fTemp76):fTemp76); + output25[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp77):fTemp77)); + double fTemp78 = double(input26[i]); + double fTemp79 = (iSlow7?(0.0 - fTemp78):fTemp78); + double fTemp80 = (iSlow6?(0.0 - fTemp79):fTemp79); + output26[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp80):fTemp80)); + double fTemp81 = double(input27[i]); + double fTemp82 = (iSlow5?(0.0 - fTemp81):fTemp81); + double fTemp83 = (iSlow6?(0.0 - fTemp82):fTemp82); + output27[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp83):fTemp83)); + double fTemp84 = double(input28[i]); + double fTemp85 = (iSlow7?(0.0 - fTemp84):fTemp84); + double fTemp86 = (iSlow6?(0.0 - fTemp85):fTemp85); + output28[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp86):fTemp86)); + double fTemp87 = double(input29[i]); + double fTemp88 = (iSlow5?(0.0 - fTemp87):fTemp87); + double fTemp89 = (iSlow6?(0.0 - fTemp88):fTemp88); + output29[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp89):fTemp89)); + double fTemp90 = double(input30[i]); + double fTemp91 = (iSlow7?(0.0 - fTemp90):fTemp90); + double fTemp92 = (iSlow3?(0.0 - fTemp91):fTemp91); + output30[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp92):fTemp92)); + double fTemp93 = double(input31[i]); + double fTemp94 = (iSlow5?(0.0 - fTemp93):fTemp93); + double fTemp95 = (iSlow3?(0.0 - fTemp94):fTemp94); + output31[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp95):fTemp95)); + double fTemp96 = double(input32[i]); + double fTemp97 = (iSlow7?(0.0 - fTemp96):fTemp96); + double fTemp98 = (iSlow3?(0.0 - fTemp97):fTemp97); + output32[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp98):fTemp98)); + double fTemp99 = double(input33[i]); + double fTemp100 = (iSlow5?(0.0 - fTemp99):fTemp99); + double fTemp101 = (iSlow3?(0.0 - fTemp100):fTemp100); + output33[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp101):fTemp101)); + double fTemp102 = double(input34[i]); + double fTemp103 = (iSlow7?(0.0 - fTemp102):fTemp102); + double fTemp104 = (iSlow3?(0.0 - fTemp103):fTemp103); + output34[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp104):fTemp104)); + double fTemp105 = double(input35[i]); + double fTemp106 = (iSlow5?(0.0 - fTemp105):fTemp105); + double fTemp107 = (iSlow3?(0.0 - fTemp106):fTemp106); + output35[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp107):fTemp107)); + double fTemp108 = double(input36[i]); + double fTemp109 = (iSlow5?(0.0 - fTemp108):fTemp108); + double fTemp110 = (iSlow6?(0.0 - fTemp109):fTemp109); + output36[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp110):fTemp110)); + double fTemp111 = double(input37[i]); + double fTemp112 = (iSlow7?(0.0 - fTemp111):fTemp111); + double fTemp113 = (iSlow6?(0.0 - fTemp112):fTemp112); + output37[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp113):fTemp113)); + double fTemp114 = double(input38[i]); + double fTemp115 = (iSlow5?(0.0 - fTemp114):fTemp114); + double fTemp116 = (iSlow6?(0.0 - fTemp115):fTemp115); + output38[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp116):fTemp116)); + double fTemp117 = double(input39[i]); + double fTemp118 = (iSlow7?(0.0 - fTemp117):fTemp117); + double fTemp119 = (iSlow6?(0.0 - fTemp118):fTemp118); + output39[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp119):fTemp119)); + double fTemp120 = double(input40[i]); + double fTemp121 = (iSlow5?(0.0 - fTemp120):fTemp120); + double fTemp122 = (iSlow6?(0.0 - fTemp121):fTemp121); + output40[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp122):fTemp122)); + double fTemp123 = double(input41[i]); + double fTemp124 = (iSlow7?(0.0 - fTemp123):fTemp123); + double fTemp125 = (iSlow6?(0.0 - fTemp124):fTemp124); + output41[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp125):fTemp125)); + double fTemp126 = double(input42[i]); + double fTemp127 = (iSlow5?(0.0 - fTemp126):fTemp126); + double fTemp128 = (iSlow3?(0.0 - fTemp127):fTemp127); + output42[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp128):fTemp128)); + double fTemp129 = double(input43[i]); + double fTemp130 = (iSlow7?(0.0 - fTemp129):fTemp129); + double fTemp131 = (iSlow3?(0.0 - fTemp130):fTemp130); + output43[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp131):fTemp131)); + double fTemp132 = double(input44[i]); + double fTemp133 = (iSlow5?(0.0 - fTemp132):fTemp132); + double fTemp134 = (iSlow3?(0.0 - fTemp133):fTemp133); + output44[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp134):fTemp134)); + double fTemp135 = double(input45[i]); + double fTemp136 = (iSlow7?(0.0 - fTemp135):fTemp135); + double fTemp137 = (iSlow3?(0.0 - fTemp136):fTemp136); + output45[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp137):fTemp137)); + double fTemp138 = double(input46[i]); + double fTemp139 = (iSlow5?(0.0 - fTemp138):fTemp138); + double fTemp140 = (iSlow3?(0.0 - fTemp139):fTemp139); + output46[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp140):fTemp140)); + double fTemp141 = double(input47[i]); + double fTemp142 = (iSlow7?(0.0 - fTemp141):fTemp141); + double fTemp143 = (iSlow3?(0.0 - fTemp142):fTemp142); + output47[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp143):fTemp143)); + double fTemp144 = double(input48[i]); + double fTemp145 = (iSlow5?(0.0 - fTemp144):fTemp144); + double fTemp146 = (iSlow3?(0.0 - fTemp145):fTemp145); + output48[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp146):fTemp146)); + double fTemp147 = double(input49[i]); + double fTemp148 = (iSlow5?(0.0 - fTemp147):fTemp147); + double fTemp149 = (iSlow6?(0.0 - fTemp148):fTemp148); + output49[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp149):fTemp149)); + double fTemp150 = double(input50[i]); + double fTemp151 = (iSlow7?(0.0 - fTemp150):fTemp150); + double fTemp152 = (iSlow6?(0.0 - fTemp151):fTemp151); + output50[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp152):fTemp152)); + double fTemp153 = double(input51[i]); + double fTemp154 = (iSlow5?(0.0 - fTemp153):fTemp153); + double fTemp155 = (iSlow6?(0.0 - fTemp154):fTemp154); + output51[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp155):fTemp155)); + double fTemp156 = double(input52[i]); + double fTemp157 = (iSlow7?(0.0 - fTemp156):fTemp156); + double fTemp158 = (iSlow6?(0.0 - fTemp157):fTemp157); + output52[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp158):fTemp158)); + double fTemp159 = double(input53[i]); + double fTemp160 = (iSlow5?(0.0 - fTemp159):fTemp159); + double fTemp161 = (iSlow6?(0.0 - fTemp160):fTemp160); + output53[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp161):fTemp161)); + double fTemp162 = double(input54[i]); + double fTemp163 = (iSlow7?(0.0 - fTemp162):fTemp162); + double fTemp164 = (iSlow6?(0.0 - fTemp163):fTemp163); + output54[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp164):fTemp164)); + double fTemp165 = double(input55[i]); + double fTemp166 = (iSlow5?(0.0 - fTemp165):fTemp165); + double fTemp167 = (iSlow6?(0.0 - fTemp166):fTemp166); + output55[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp167):fTemp167)); + double fTemp168 = double(input56[i]); + double fTemp169 = (iSlow7?(0.0 - fTemp168):fTemp168); + double fTemp170 = (iSlow3?(0.0 - fTemp169):fTemp169); + output56[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp170):fTemp170)); + double fTemp171 = double(input57[i]); + double fTemp172 = (iSlow5?(0.0 - fTemp171):fTemp171); + double fTemp173 = (iSlow3?(0.0 - fTemp172):fTemp172); + output57[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp173):fTemp173)); + double fTemp174 = double(input58[i]); + double fTemp175 = (iSlow7?(0.0 - fTemp174):fTemp174); + double fTemp176 = (iSlow3?(0.0 - fTemp175):fTemp175); + output58[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp176):fTemp176)); + double fTemp177 = double(input59[i]); + double fTemp178 = (iSlow5?(0.0 - fTemp177):fTemp177); + double fTemp179 = (iSlow3?(0.0 - fTemp178):fTemp178); + output59[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp179):fTemp179)); + double fTemp180 = double(input60[i]); + double fTemp181 = (iSlow7?(0.0 - fTemp180):fTemp180); + double fTemp182 = (iSlow3?(0.0 - fTemp181):fTemp181); + output60[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp182):fTemp182)); + double fTemp183 = double(input61[i]); + double fTemp184 = (iSlow5?(0.0 - fTemp183):fTemp183); + double fTemp185 = (iSlow3?(0.0 - fTemp184):fTemp184); + output61[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp185):fTemp185)); + double fTemp186 = double(input62[i]); + double fTemp187 = (iSlow7?(0.0 - fTemp186):fTemp186); + double fTemp188 = (iSlow3?(0.0 - fTemp187):fTemp187); + output62[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp188):fTemp188)); + double fTemp189 = double(input63[i]); + double fTemp190 = (iSlow5?(0.0 - fTemp189):fTemp189); + double fTemp191 = (iSlow3?(0.0 - fTemp190):fTemp190); + output63[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp191):fTemp191)); + double fTemp192 = double(input64[i]); + double fTemp193 = (iSlow5?(0.0 - fTemp192):fTemp192); + double fTemp194 = (iSlow6?(0.0 - fTemp193):fTemp193); + output64[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp194):fTemp194)); + double fTemp195 = double(input65[i]); + double fTemp196 = (iSlow7?(0.0 - fTemp195):fTemp195); + double fTemp197 = (iSlow6?(0.0 - fTemp196):fTemp196); + output65[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp197):fTemp197)); + double fTemp198 = double(input66[i]); + double fTemp199 = (iSlow5?(0.0 - fTemp198):fTemp198); + double fTemp200 = (iSlow6?(0.0 - fTemp199):fTemp199); + output66[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp200):fTemp200)); + double fTemp201 = double(input67[i]); + double fTemp202 = (iSlow7?(0.0 - fTemp201):fTemp201); + double fTemp203 = (iSlow6?(0.0 - fTemp202):fTemp202); + output67[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp203):fTemp203)); + double fTemp204 = double(input68[i]); + double fTemp205 = (iSlow5?(0.0 - fTemp204):fTemp204); + double fTemp206 = (iSlow6?(0.0 - fTemp205):fTemp205); + output68[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp206):fTemp206)); + double fTemp207 = double(input69[i]); + double fTemp208 = (iSlow7?(0.0 - fTemp207):fTemp207); + double fTemp209 = (iSlow6?(0.0 - fTemp208):fTemp208); + output69[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp209):fTemp209)); + double fTemp210 = double(input70[i]); + double fTemp211 = (iSlow5?(0.0 - fTemp210):fTemp210); + double fTemp212 = (iSlow6?(0.0 - fTemp211):fTemp211); + output70[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp212):fTemp212)); + double fTemp213 = double(input71[i]); + double fTemp214 = (iSlow7?(0.0 - fTemp213):fTemp213); + double fTemp215 = (iSlow6?(0.0 - fTemp214):fTemp214); + output71[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp215):fTemp215)); + double fTemp216 = double(input72[i]); + double fTemp217 = (iSlow5?(0.0 - fTemp216):fTemp216); + double fTemp218 = (iSlow3?(0.0 - fTemp217):fTemp217); + output72[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp218):fTemp218)); + double fTemp219 = double(input73[i]); + double fTemp220 = (iSlow7?(0.0 - fTemp219):fTemp219); + double fTemp221 = (iSlow3?(0.0 - fTemp220):fTemp220); + output73[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp221):fTemp221)); + double fTemp222 = double(input74[i]); + double fTemp223 = (iSlow5?(0.0 - fTemp222):fTemp222); + double fTemp224 = (iSlow3?(0.0 - fTemp223):fTemp223); + output74[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp224):fTemp224)); + double fTemp225 = double(input75[i]); + double fTemp226 = (iSlow7?(0.0 - fTemp225):fTemp225); + double fTemp227 = (iSlow3?(0.0 - fTemp226):fTemp226); + output75[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp227):fTemp227)); + double fTemp228 = double(input76[i]); + double fTemp229 = (iSlow5?(0.0 - fTemp228):fTemp228); + double fTemp230 = (iSlow3?(0.0 - fTemp229):fTemp229); + output76[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp230):fTemp230)); + double fTemp231 = double(input77[i]); + double fTemp232 = (iSlow7?(0.0 - fTemp231):fTemp231); + double fTemp233 = (iSlow3?(0.0 - fTemp232):fTemp232); + output77[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp233):fTemp233)); + double fTemp234 = double(input78[i]); + double fTemp235 = (iSlow5?(0.0 - fTemp234):fTemp234); + double fTemp236 = (iSlow3?(0.0 - fTemp235):fTemp235); + output78[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp236):fTemp236)); + double fTemp237 = double(input79[i]); + double fTemp238 = (iSlow7?(0.0 - fTemp237):fTemp237); + double fTemp239 = (iSlow3?(0.0 - fTemp238):fTemp238); + output79[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp239):fTemp239)); + double fTemp240 = double(input80[i]); + double fTemp241 = (iSlow5?(0.0 - fTemp240):fTemp240); + double fTemp242 = (iSlow3?(0.0 - fTemp241):fTemp241); + output80[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp242):fTemp242)); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAMirror9.cpp b/source/HOAUGens/HOAMirror9.cpp new file mode 100644 index 0000000000..8c2c88838c --- /dev/null +++ b/source/HOAUGens/HOAMirror9.cpp @@ -0,0 +1,2485 @@ +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2015" +license: "GPL" +name: "HOAMirror9" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ + +//------------------------------------------------------------------- +// FAUST architecture file for SuperCollider. +// Copyright (C) 2005-2012 Stefan Kersten. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA +//------------------------------------------------------------------- + +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty +#if !defined(SC_FAUST_PREFIX) +#define SC_FAUST_PREFIX "" +#endif + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class UI; +struct Meta; + +/** + * DSP memory manager. + */ + +struct dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + virtual void* allocate(size_t size) = 0; + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class dsp { + + public: + + dsp() {} + virtual ~dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'addBtton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Returns the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void init(int samplingRate) = 0; + + /** + * Init instance state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceInit(int samplingRate) = 0; + + /** + * Init instance constant state + * + * @param samplingRate - the sampling rate in Hertz + */ + virtual void instanceConstants(int samplingRate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (delay lines...) */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class decorator_dsp : public dsp { + + protected: + + dsp* fDSP; + + public: + + decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int samplingRate) { fDSP->init(samplingRate); } + virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } + virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +/** + * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) + * flags to avoid costly denormals. + */ + +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +class UI +{ + + public: + + UI() {} + + virtual ~UI() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +}; + +#endif +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + +struct Meta +{ + virtual void declare(const char* key, const char* value) = 0; + virtual ~Meta() {}; +}; + +#endif + +using std::max; +using std::min; + +struct XXXX_Meta : std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key]=value; } +}; + +inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +inline int int2pow2(int x) { int r = 0; while ((1<= 4 + #define FAUST_EXPORT __attribute__((visibility("default"))) +#else + #define FAUST_EXPORT SC_API_EXPORT +#endif + +#ifdef WIN32 + #define STRDUP _strdup +#else + #define STRDUP strdup +#endif + +//---------------------------------------------------------------------------- +// Vector intrinsics +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +// Metadata +//---------------------------------------------------------------------------- + +class MetaData : public Meta + , public std::map +{ +public: + void declare(const char* key, const char* value) + { + (*this)[key] = value; + } +}; + +//---------------------------------------------------------------------------- +// Control counter +//---------------------------------------------------------------------------- + +class ControlCounter : public UI +{ +public: + ControlCounter() + : mNumControlInputs(0), + mNumControlOutputs(0) + {} + + size_t getNumControls() const { return getNumControlInputs(); } + size_t getNumControlInputs() const { return mNumControlInputs; } + size_t getNumControlOutputs() const { return mNumControlOutputs; } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addControlInput(); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addControlInput(); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) + { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +protected: + void addControlInput() { mNumControlInputs++; } + void addControlOutput() { mNumControlOutputs++; } + +private: + size_t mNumControlInputs; + size_t mNumControlOutputs; +}; + +//---------------------------------------------------------------------------- +// UI control +//---------------------------------------------------------------------------- + +struct Control +{ + typedef void (*UpdateFunction)(Control* self, FAUSTFLOAT value); + + UpdateFunction updateFunction; + FAUSTFLOAT* zone; + FAUSTFLOAT min, max; + + inline void update(FAUSTFLOAT value) + { + (*updateFunction)(this, value); + } + + static void simpleUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = value; + } + static void boundedUpdate(Control* self, FAUSTFLOAT value) + { + *self->zone = sc_clip(value, self->min, self->max); + } +}; + +//---------------------------------------------------------------------------- +// Control allocator +//---------------------------------------------------------------------------- + +class ControlAllocator : public UI +{ +public: + ControlAllocator(Control* controls) + : mControls(controls) + { } + + // Layout widgets + virtual void openTabBox(const char* label) { } + virtual void openHorizontalBox(const char* label) { } + virtual void openVerticalBox(const char* label) { } + virtual void closeBox() { } + + // Active widgets + virtual void addButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) + { addSimpleControl(zone); } + virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { addBoundedControl(zone, min, max, step); } + + // Passive widgets + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} + +private: + void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) + { + Control* ctrl = mControls++; + ctrl->updateFunction = updateFunction; + ctrl->zone = zone; + ctrl->min = min; + ctrl->max = max; + } + void addSimpleControl(FAUSTFLOAT* zone) + { + addControl(Control::simpleUpdate, zone, 0.f, 0.f, 0.f); + } + void addBoundedControl(FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) + { + addControl(Control::boundedUpdate, zone, min, max, step); + } + +private: + Control* mControls; +}; + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#include + + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +class mydsp : public dsp { + + private: + + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fCheckbox2; + int fSamplingFreq; + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.0"); + m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("license", "GPL"); + m->declare("name", "HOAMirror9"); + m->declare("version", "1.0"); + } + + virtual int getNumInputs() { + return 100; + + } + virtual int getNumOutputs() { + return 100; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + case 25: { + rate = 1; + break; + } + case 26: { + rate = 1; + break; + } + case 27: { + rate = 1; + break; + } + case 28: { + rate = 1; + break; + } + case 29: { + rate = 1; + break; + } + case 30: { + rate = 1; + break; + } + case 31: { + rate = 1; + break; + } + case 32: { + rate = 1; + break; + } + case 33: { + rate = 1; + break; + } + case 34: { + rate = 1; + break; + } + case 35: { + rate = 1; + break; + } + case 36: { + rate = 1; + break; + } + case 37: { + rate = 1; + break; + } + case 38: { + rate = 1; + break; + } + case 39: { + rate = 1; + break; + } + case 40: { + rate = 1; + break; + } + case 41: { + rate = 1; + break; + } + case 42: { + rate = 1; + break; + } + case 43: { + rate = 1; + break; + } + case 44: { + rate = 1; + break; + } + case 45: { + rate = 1; + break; + } + case 46: { + rate = 1; + break; + } + case 47: { + rate = 1; + break; + } + case 48: { + rate = 1; + break; + } + case 49: { + rate = 1; + break; + } + case 50: { + rate = 1; + break; + } + case 51: { + rate = 1; + break; + } + case 52: { + rate = 1; + break; + } + case 53: { + rate = 1; + break; + } + case 54: { + rate = 1; + break; + } + case 55: { + rate = 1; + break; + } + case 56: { + rate = 1; + break; + } + case 57: { + rate = 1; + break; + } + case 58: { + rate = 1; + break; + } + case 59: { + rate = 1; + break; + } + case 60: { + rate = 1; + break; + } + case 61: { + rate = 1; + break; + } + case 62: { + rate = 1; + break; + } + case 63: { + rate = 1; + break; + } + case 64: { + rate = 1; + break; + } + case 65: { + rate = 1; + break; + } + case 66: { + rate = 1; + break; + } + case 67: { + rate = 1; + break; + } + case 68: { + rate = 1; + break; + } + case 69: { + rate = 1; + break; + } + case 70: { + rate = 1; + break; + } + case 71: { + rate = 1; + break; + } + case 72: { + rate = 1; + break; + } + case 73: { + rate = 1; + break; + } + case 74: { + rate = 1; + break; + } + case 75: { + rate = 1; + break; + } + case 76: { + rate = 1; + break; + } + case 77: { + rate = 1; + break; + } + case 78: { + rate = 1; + break; + } + case 79: { + rate = 1; + break; + } + case 80: { + rate = 1; + break; + } + case 81: { + rate = 1; + break; + } + case 82: { + rate = 1; + break; + } + case 83: { + rate = 1; + break; + } + case 84: { + rate = 1; + break; + } + case 85: { + rate = 1; + break; + } + case 86: { + rate = 1; + break; + } + case 87: { + rate = 1; + break; + } + case 88: { + rate = 1; + break; + } + case 89: { + rate = 1; + break; + } + case 90: { + rate = 1; + break; + } + case 91: { + rate = 1; + break; + } + case 92: { + rate = 1; + break; + } + case 93: { + rate = 1; + break; + } + case 94: { + rate = 1; + break; + } + case 95: { + rate = 1; + break; + } + case 96: { + rate = 1; + break; + } + case 97: { + rate = 1; + break; + } + case 98: { + rate = 1; + break; + } + case 99: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + + static void classInit(int samplingFreq) { + + } + + virtual void instanceConstants(int samplingFreq) { + fSamplingFreq = samplingFreq; + + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); + + } + + virtual void instanceClear() { + + } + + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void instanceInit(int samplingFreq) { + instanceConstants(samplingFreq); + instanceResetUserInterface(); + instanceClear(); + } + + virtual mydsp* clone() { + return new mydsp(); + } + virtual int getSampleRate() { + return fSamplingFreq; + + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("HOA scene mirroring"); + ui_interface->addCheckButton("front-back", &fCheckbox0); + ui_interface->addCheckButton("left-right", &fCheckbox1); + ui_interface->addCheckButton("up-down", &fCheckbox2); + ui_interface->closeBox(); + + } + + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* input2 = inputs[2]; + FAUSTFLOAT* input3 = inputs[3]; + FAUSTFLOAT* input4 = inputs[4]; + FAUSTFLOAT* input5 = inputs[5]; + FAUSTFLOAT* input6 = inputs[6]; + FAUSTFLOAT* input7 = inputs[7]; + FAUSTFLOAT* input8 = inputs[8]; + FAUSTFLOAT* input9 = inputs[9]; + FAUSTFLOAT* input10 = inputs[10]; + FAUSTFLOAT* input11 = inputs[11]; + FAUSTFLOAT* input12 = inputs[12]; + FAUSTFLOAT* input13 = inputs[13]; + FAUSTFLOAT* input14 = inputs[14]; + FAUSTFLOAT* input15 = inputs[15]; + FAUSTFLOAT* input16 = inputs[16]; + FAUSTFLOAT* input17 = inputs[17]; + FAUSTFLOAT* input18 = inputs[18]; + FAUSTFLOAT* input19 = inputs[19]; + FAUSTFLOAT* input20 = inputs[20]; + FAUSTFLOAT* input21 = inputs[21]; + FAUSTFLOAT* input22 = inputs[22]; + FAUSTFLOAT* input23 = inputs[23]; + FAUSTFLOAT* input24 = inputs[24]; + FAUSTFLOAT* input25 = inputs[25]; + FAUSTFLOAT* input26 = inputs[26]; + FAUSTFLOAT* input27 = inputs[27]; + FAUSTFLOAT* input28 = inputs[28]; + FAUSTFLOAT* input29 = inputs[29]; + FAUSTFLOAT* input30 = inputs[30]; + FAUSTFLOAT* input31 = inputs[31]; + FAUSTFLOAT* input32 = inputs[32]; + FAUSTFLOAT* input33 = inputs[33]; + FAUSTFLOAT* input34 = inputs[34]; + FAUSTFLOAT* input35 = inputs[35]; + FAUSTFLOAT* input36 = inputs[36]; + FAUSTFLOAT* input37 = inputs[37]; + FAUSTFLOAT* input38 = inputs[38]; + FAUSTFLOAT* input39 = inputs[39]; + FAUSTFLOAT* input40 = inputs[40]; + FAUSTFLOAT* input41 = inputs[41]; + FAUSTFLOAT* input42 = inputs[42]; + FAUSTFLOAT* input43 = inputs[43]; + FAUSTFLOAT* input44 = inputs[44]; + FAUSTFLOAT* input45 = inputs[45]; + FAUSTFLOAT* input46 = inputs[46]; + FAUSTFLOAT* input47 = inputs[47]; + FAUSTFLOAT* input48 = inputs[48]; + FAUSTFLOAT* input49 = inputs[49]; + FAUSTFLOAT* input50 = inputs[50]; + FAUSTFLOAT* input51 = inputs[51]; + FAUSTFLOAT* input52 = inputs[52]; + FAUSTFLOAT* input53 = inputs[53]; + FAUSTFLOAT* input54 = inputs[54]; + FAUSTFLOAT* input55 = inputs[55]; + FAUSTFLOAT* input56 = inputs[56]; + FAUSTFLOAT* input57 = inputs[57]; + FAUSTFLOAT* input58 = inputs[58]; + FAUSTFLOAT* input59 = inputs[59]; + FAUSTFLOAT* input60 = inputs[60]; + FAUSTFLOAT* input61 = inputs[61]; + FAUSTFLOAT* input62 = inputs[62]; + FAUSTFLOAT* input63 = inputs[63]; + FAUSTFLOAT* input64 = inputs[64]; + FAUSTFLOAT* input65 = inputs[65]; + FAUSTFLOAT* input66 = inputs[66]; + FAUSTFLOAT* input67 = inputs[67]; + FAUSTFLOAT* input68 = inputs[68]; + FAUSTFLOAT* input69 = inputs[69]; + FAUSTFLOAT* input70 = inputs[70]; + FAUSTFLOAT* input71 = inputs[71]; + FAUSTFLOAT* input72 = inputs[72]; + FAUSTFLOAT* input73 = inputs[73]; + FAUSTFLOAT* input74 = inputs[74]; + FAUSTFLOAT* input75 = inputs[75]; + FAUSTFLOAT* input76 = inputs[76]; + FAUSTFLOAT* input77 = inputs[77]; + FAUSTFLOAT* input78 = inputs[78]; + FAUSTFLOAT* input79 = inputs[79]; + FAUSTFLOAT* input80 = inputs[80]; + FAUSTFLOAT* input81 = inputs[81]; + FAUSTFLOAT* input82 = inputs[82]; + FAUSTFLOAT* input83 = inputs[83]; + FAUSTFLOAT* input84 = inputs[84]; + FAUSTFLOAT* input85 = inputs[85]; + FAUSTFLOAT* input86 = inputs[86]; + FAUSTFLOAT* input87 = inputs[87]; + FAUSTFLOAT* input88 = inputs[88]; + FAUSTFLOAT* input89 = inputs[89]; + FAUSTFLOAT* input90 = inputs[90]; + FAUSTFLOAT* input91 = inputs[91]; + FAUSTFLOAT* input92 = inputs[92]; + FAUSTFLOAT* input93 = inputs[93]; + FAUSTFLOAT* input94 = inputs[94]; + FAUSTFLOAT* input95 = inputs[95]; + FAUSTFLOAT* input96 = inputs[96]; + FAUSTFLOAT* input97 = inputs[97]; + FAUSTFLOAT* input98 = inputs[98]; + FAUSTFLOAT* input99 = inputs[99]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + FAUSTFLOAT* output4 = outputs[4]; + FAUSTFLOAT* output5 = outputs[5]; + FAUSTFLOAT* output6 = outputs[6]; + FAUSTFLOAT* output7 = outputs[7]; + FAUSTFLOAT* output8 = outputs[8]; + FAUSTFLOAT* output9 = outputs[9]; + FAUSTFLOAT* output10 = outputs[10]; + FAUSTFLOAT* output11 = outputs[11]; + FAUSTFLOAT* output12 = outputs[12]; + FAUSTFLOAT* output13 = outputs[13]; + FAUSTFLOAT* output14 = outputs[14]; + FAUSTFLOAT* output15 = outputs[15]; + FAUSTFLOAT* output16 = outputs[16]; + FAUSTFLOAT* output17 = outputs[17]; + FAUSTFLOAT* output18 = outputs[18]; + FAUSTFLOAT* output19 = outputs[19]; + FAUSTFLOAT* output20 = outputs[20]; + FAUSTFLOAT* output21 = outputs[21]; + FAUSTFLOAT* output22 = outputs[22]; + FAUSTFLOAT* output23 = outputs[23]; + FAUSTFLOAT* output24 = outputs[24]; + FAUSTFLOAT* output25 = outputs[25]; + FAUSTFLOAT* output26 = outputs[26]; + FAUSTFLOAT* output27 = outputs[27]; + FAUSTFLOAT* output28 = outputs[28]; + FAUSTFLOAT* output29 = outputs[29]; + FAUSTFLOAT* output30 = outputs[30]; + FAUSTFLOAT* output31 = outputs[31]; + FAUSTFLOAT* output32 = outputs[32]; + FAUSTFLOAT* output33 = outputs[33]; + FAUSTFLOAT* output34 = outputs[34]; + FAUSTFLOAT* output35 = outputs[35]; + FAUSTFLOAT* output36 = outputs[36]; + FAUSTFLOAT* output37 = outputs[37]; + FAUSTFLOAT* output38 = outputs[38]; + FAUSTFLOAT* output39 = outputs[39]; + FAUSTFLOAT* output40 = outputs[40]; + FAUSTFLOAT* output41 = outputs[41]; + FAUSTFLOAT* output42 = outputs[42]; + FAUSTFLOAT* output43 = outputs[43]; + FAUSTFLOAT* output44 = outputs[44]; + FAUSTFLOAT* output45 = outputs[45]; + FAUSTFLOAT* output46 = outputs[46]; + FAUSTFLOAT* output47 = outputs[47]; + FAUSTFLOAT* output48 = outputs[48]; + FAUSTFLOAT* output49 = outputs[49]; + FAUSTFLOAT* output50 = outputs[50]; + FAUSTFLOAT* output51 = outputs[51]; + FAUSTFLOAT* output52 = outputs[52]; + FAUSTFLOAT* output53 = outputs[53]; + FAUSTFLOAT* output54 = outputs[54]; + FAUSTFLOAT* output55 = outputs[55]; + FAUSTFLOAT* output56 = outputs[56]; + FAUSTFLOAT* output57 = outputs[57]; + FAUSTFLOAT* output58 = outputs[58]; + FAUSTFLOAT* output59 = outputs[59]; + FAUSTFLOAT* output60 = outputs[60]; + FAUSTFLOAT* output61 = outputs[61]; + FAUSTFLOAT* output62 = outputs[62]; + FAUSTFLOAT* output63 = outputs[63]; + FAUSTFLOAT* output64 = outputs[64]; + FAUSTFLOAT* output65 = outputs[65]; + FAUSTFLOAT* output66 = outputs[66]; + FAUSTFLOAT* output67 = outputs[67]; + FAUSTFLOAT* output68 = outputs[68]; + FAUSTFLOAT* output69 = outputs[69]; + FAUSTFLOAT* output70 = outputs[70]; + FAUSTFLOAT* output71 = outputs[71]; + FAUSTFLOAT* output72 = outputs[72]; + FAUSTFLOAT* output73 = outputs[73]; + FAUSTFLOAT* output74 = outputs[74]; + FAUSTFLOAT* output75 = outputs[75]; + FAUSTFLOAT* output76 = outputs[76]; + FAUSTFLOAT* output77 = outputs[77]; + FAUSTFLOAT* output78 = outputs[78]; + FAUSTFLOAT* output79 = outputs[79]; + FAUSTFLOAT* output80 = outputs[80]; + FAUSTFLOAT* output81 = outputs[81]; + FAUSTFLOAT* output82 = outputs[82]; + FAUSTFLOAT* output83 = outputs[83]; + FAUSTFLOAT* output84 = outputs[84]; + FAUSTFLOAT* output85 = outputs[85]; + FAUSTFLOAT* output86 = outputs[86]; + FAUSTFLOAT* output87 = outputs[87]; + FAUSTFLOAT* output88 = outputs[88]; + FAUSTFLOAT* output89 = outputs[89]; + FAUSTFLOAT* output90 = outputs[90]; + FAUSTFLOAT* output91 = outputs[91]; + FAUSTFLOAT* output92 = outputs[92]; + FAUSTFLOAT* output93 = outputs[93]; + FAUSTFLOAT* output94 = outputs[94]; + FAUSTFLOAT* output95 = outputs[95]; + FAUSTFLOAT* output96 = outputs[96]; + FAUSTFLOAT* output97 = outputs[97]; + FAUSTFLOAT* output98 = outputs[98]; + FAUSTFLOAT* output99 = outputs[99]; + int iSlow0 = (double(fCheckbox0) == 1.0); + int iSlow1 = (iSlow0 & 0); + int iSlow2 = (double(fCheckbox1) == 1.0); + int iSlow3 = (iSlow2 & 0); + int iSlow4 = (double(fCheckbox2) == 1.0); + int iSlow5 = (iSlow4 & 0); + int iSlow6 = (iSlow2 & 1); + int iSlow7 = (iSlow4 & 1); + int iSlow8 = (iSlow0 & 1); + for (int i = 0; (i < count); i = (i + 1)) { + double fTemp0 = double(input0[i]); + double fTemp1 = (iSlow5?(0.0 - fTemp0):fTemp0); + double fTemp2 = (iSlow3?(0.0 - fTemp1):fTemp1); + output0[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp2):fTemp2)); + double fTemp3 = double(input1[i]); + double fTemp4 = (iSlow5?(0.0 - fTemp3):fTemp3); + double fTemp5 = (iSlow6?(0.0 - fTemp4):fTemp4); + output1[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp5):fTemp5)); + double fTemp6 = double(input2[i]); + double fTemp7 = (iSlow7?(0.0 - fTemp6):fTemp6); + double fTemp8 = (iSlow3?(0.0 - fTemp7):fTemp7); + output2[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp8):fTemp8)); + double fTemp9 = double(input3[i]); + double fTemp10 = (iSlow5?(0.0 - fTemp9):fTemp9); + double fTemp11 = (iSlow3?(0.0 - fTemp10):fTemp10); + output3[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp11):fTemp11)); + double fTemp12 = double(input4[i]); + double fTemp13 = (iSlow5?(0.0 - fTemp12):fTemp12); + double fTemp14 = (iSlow6?(0.0 - fTemp13):fTemp13); + output4[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp14):fTemp14)); + double fTemp15 = double(input5[i]); + double fTemp16 = (iSlow7?(0.0 - fTemp15):fTemp15); + double fTemp17 = (iSlow6?(0.0 - fTemp16):fTemp16); + output5[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp17):fTemp17)); + double fTemp18 = double(input6[i]); + double fTemp19 = (iSlow5?(0.0 - fTemp18):fTemp18); + double fTemp20 = (iSlow3?(0.0 - fTemp19):fTemp19); + output6[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp20):fTemp20)); + double fTemp21 = double(input7[i]); + double fTemp22 = (iSlow7?(0.0 - fTemp21):fTemp21); + double fTemp23 = (iSlow3?(0.0 - fTemp22):fTemp22); + output7[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp23):fTemp23)); + double fTemp24 = double(input8[i]); + double fTemp25 = (iSlow5?(0.0 - fTemp24):fTemp24); + double fTemp26 = (iSlow3?(0.0 - fTemp25):fTemp25); + output8[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp26):fTemp26)); + double fTemp27 = double(input9[i]); + double fTemp28 = (iSlow5?(0.0 - fTemp27):fTemp27); + double fTemp29 = (iSlow6?(0.0 - fTemp28):fTemp28); + output9[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp29):fTemp29)); + double fTemp30 = double(input10[i]); + double fTemp31 = (iSlow7?(0.0 - fTemp30):fTemp30); + double fTemp32 = (iSlow6?(0.0 - fTemp31):fTemp31); + output10[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp32):fTemp32)); + double fTemp33 = double(input11[i]); + double fTemp34 = (iSlow5?(0.0 - fTemp33):fTemp33); + double fTemp35 = (iSlow6?(0.0 - fTemp34):fTemp34); + output11[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp35):fTemp35)); + double fTemp36 = double(input12[i]); + double fTemp37 = (iSlow7?(0.0 - fTemp36):fTemp36); + double fTemp38 = (iSlow3?(0.0 - fTemp37):fTemp37); + output12[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp38):fTemp38)); + double fTemp39 = double(input13[i]); + double fTemp40 = (iSlow5?(0.0 - fTemp39):fTemp39); + double fTemp41 = (iSlow3?(0.0 - fTemp40):fTemp40); + output13[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp41):fTemp41)); + double fTemp42 = double(input14[i]); + double fTemp43 = (iSlow7?(0.0 - fTemp42):fTemp42); + double fTemp44 = (iSlow3?(0.0 - fTemp43):fTemp43); + output14[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp44):fTemp44)); + double fTemp45 = double(input15[i]); + double fTemp46 = (iSlow5?(0.0 - fTemp45):fTemp45); + double fTemp47 = (iSlow3?(0.0 - fTemp46):fTemp46); + output15[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp47):fTemp47)); + double fTemp48 = double(input16[i]); + double fTemp49 = (iSlow5?(0.0 - fTemp48):fTemp48); + double fTemp50 = (iSlow6?(0.0 - fTemp49):fTemp49); + output16[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp50):fTemp50)); + double fTemp51 = double(input17[i]); + double fTemp52 = (iSlow7?(0.0 - fTemp51):fTemp51); + double fTemp53 = (iSlow6?(0.0 - fTemp52):fTemp52); + output17[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp53):fTemp53)); + double fTemp54 = double(input18[i]); + double fTemp55 = (iSlow5?(0.0 - fTemp54):fTemp54); + double fTemp56 = (iSlow6?(0.0 - fTemp55):fTemp55); + output18[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp56):fTemp56)); + double fTemp57 = double(input19[i]); + double fTemp58 = (iSlow7?(0.0 - fTemp57):fTemp57); + double fTemp59 = (iSlow6?(0.0 - fTemp58):fTemp58); + output19[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp59):fTemp59)); + double fTemp60 = double(input20[i]); + double fTemp61 = (iSlow5?(0.0 - fTemp60):fTemp60); + double fTemp62 = (iSlow3?(0.0 - fTemp61):fTemp61); + output20[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp62):fTemp62)); + double fTemp63 = double(input21[i]); + double fTemp64 = (iSlow7?(0.0 - fTemp63):fTemp63); + double fTemp65 = (iSlow3?(0.0 - fTemp64):fTemp64); + output21[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp65):fTemp65)); + double fTemp66 = double(input22[i]); + double fTemp67 = (iSlow5?(0.0 - fTemp66):fTemp66); + double fTemp68 = (iSlow3?(0.0 - fTemp67):fTemp67); + output22[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp68):fTemp68)); + double fTemp69 = double(input23[i]); + double fTemp70 = (iSlow7?(0.0 - fTemp69):fTemp69); + double fTemp71 = (iSlow3?(0.0 - fTemp70):fTemp70); + output23[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp71):fTemp71)); + double fTemp72 = double(input24[i]); + double fTemp73 = (iSlow5?(0.0 - fTemp72):fTemp72); + double fTemp74 = (iSlow3?(0.0 - fTemp73):fTemp73); + output24[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp74):fTemp74)); + double fTemp75 = double(input25[i]); + double fTemp76 = (iSlow5?(0.0 - fTemp75):fTemp75); + double fTemp77 = (iSlow6?(0.0 - fTemp76):fTemp76); + output25[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp77):fTemp77)); + double fTemp78 = double(input26[i]); + double fTemp79 = (iSlow7?(0.0 - fTemp78):fTemp78); + double fTemp80 = (iSlow6?(0.0 - fTemp79):fTemp79); + output26[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp80):fTemp80)); + double fTemp81 = double(input27[i]); + double fTemp82 = (iSlow5?(0.0 - fTemp81):fTemp81); + double fTemp83 = (iSlow6?(0.0 - fTemp82):fTemp82); + output27[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp83):fTemp83)); + double fTemp84 = double(input28[i]); + double fTemp85 = (iSlow7?(0.0 - fTemp84):fTemp84); + double fTemp86 = (iSlow6?(0.0 - fTemp85):fTemp85); + output28[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp86):fTemp86)); + double fTemp87 = double(input29[i]); + double fTemp88 = (iSlow5?(0.0 - fTemp87):fTemp87); + double fTemp89 = (iSlow6?(0.0 - fTemp88):fTemp88); + output29[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp89):fTemp89)); + double fTemp90 = double(input30[i]); + double fTemp91 = (iSlow7?(0.0 - fTemp90):fTemp90); + double fTemp92 = (iSlow3?(0.0 - fTemp91):fTemp91); + output30[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp92):fTemp92)); + double fTemp93 = double(input31[i]); + double fTemp94 = (iSlow5?(0.0 - fTemp93):fTemp93); + double fTemp95 = (iSlow3?(0.0 - fTemp94):fTemp94); + output31[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp95):fTemp95)); + double fTemp96 = double(input32[i]); + double fTemp97 = (iSlow7?(0.0 - fTemp96):fTemp96); + double fTemp98 = (iSlow3?(0.0 - fTemp97):fTemp97); + output32[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp98):fTemp98)); + double fTemp99 = double(input33[i]); + double fTemp100 = (iSlow5?(0.0 - fTemp99):fTemp99); + double fTemp101 = (iSlow3?(0.0 - fTemp100):fTemp100); + output33[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp101):fTemp101)); + double fTemp102 = double(input34[i]); + double fTemp103 = (iSlow7?(0.0 - fTemp102):fTemp102); + double fTemp104 = (iSlow3?(0.0 - fTemp103):fTemp103); + output34[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp104):fTemp104)); + double fTemp105 = double(input35[i]); + double fTemp106 = (iSlow5?(0.0 - fTemp105):fTemp105); + double fTemp107 = (iSlow3?(0.0 - fTemp106):fTemp106); + output35[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp107):fTemp107)); + double fTemp108 = double(input36[i]); + double fTemp109 = (iSlow5?(0.0 - fTemp108):fTemp108); + double fTemp110 = (iSlow6?(0.0 - fTemp109):fTemp109); + output36[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp110):fTemp110)); + double fTemp111 = double(input37[i]); + double fTemp112 = (iSlow7?(0.0 - fTemp111):fTemp111); + double fTemp113 = (iSlow6?(0.0 - fTemp112):fTemp112); + output37[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp113):fTemp113)); + double fTemp114 = double(input38[i]); + double fTemp115 = (iSlow5?(0.0 - fTemp114):fTemp114); + double fTemp116 = (iSlow6?(0.0 - fTemp115):fTemp115); + output38[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp116):fTemp116)); + double fTemp117 = double(input39[i]); + double fTemp118 = (iSlow7?(0.0 - fTemp117):fTemp117); + double fTemp119 = (iSlow6?(0.0 - fTemp118):fTemp118); + output39[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp119):fTemp119)); + double fTemp120 = double(input40[i]); + double fTemp121 = (iSlow5?(0.0 - fTemp120):fTemp120); + double fTemp122 = (iSlow6?(0.0 - fTemp121):fTemp121); + output40[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp122):fTemp122)); + double fTemp123 = double(input41[i]); + double fTemp124 = (iSlow7?(0.0 - fTemp123):fTemp123); + double fTemp125 = (iSlow6?(0.0 - fTemp124):fTemp124); + output41[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp125):fTemp125)); + double fTemp126 = double(input42[i]); + double fTemp127 = (iSlow5?(0.0 - fTemp126):fTemp126); + double fTemp128 = (iSlow3?(0.0 - fTemp127):fTemp127); + output42[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp128):fTemp128)); + double fTemp129 = double(input43[i]); + double fTemp130 = (iSlow7?(0.0 - fTemp129):fTemp129); + double fTemp131 = (iSlow3?(0.0 - fTemp130):fTemp130); + output43[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp131):fTemp131)); + double fTemp132 = double(input44[i]); + double fTemp133 = (iSlow5?(0.0 - fTemp132):fTemp132); + double fTemp134 = (iSlow3?(0.0 - fTemp133):fTemp133); + output44[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp134):fTemp134)); + double fTemp135 = double(input45[i]); + double fTemp136 = (iSlow7?(0.0 - fTemp135):fTemp135); + double fTemp137 = (iSlow3?(0.0 - fTemp136):fTemp136); + output45[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp137):fTemp137)); + double fTemp138 = double(input46[i]); + double fTemp139 = (iSlow5?(0.0 - fTemp138):fTemp138); + double fTemp140 = (iSlow3?(0.0 - fTemp139):fTemp139); + output46[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp140):fTemp140)); + double fTemp141 = double(input47[i]); + double fTemp142 = (iSlow7?(0.0 - fTemp141):fTemp141); + double fTemp143 = (iSlow3?(0.0 - fTemp142):fTemp142); + output47[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp143):fTemp143)); + double fTemp144 = double(input48[i]); + double fTemp145 = (iSlow5?(0.0 - fTemp144):fTemp144); + double fTemp146 = (iSlow3?(0.0 - fTemp145):fTemp145); + output48[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp146):fTemp146)); + double fTemp147 = double(input49[i]); + double fTemp148 = (iSlow5?(0.0 - fTemp147):fTemp147); + double fTemp149 = (iSlow6?(0.0 - fTemp148):fTemp148); + output49[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp149):fTemp149)); + double fTemp150 = double(input50[i]); + double fTemp151 = (iSlow7?(0.0 - fTemp150):fTemp150); + double fTemp152 = (iSlow6?(0.0 - fTemp151):fTemp151); + output50[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp152):fTemp152)); + double fTemp153 = double(input51[i]); + double fTemp154 = (iSlow5?(0.0 - fTemp153):fTemp153); + double fTemp155 = (iSlow6?(0.0 - fTemp154):fTemp154); + output51[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp155):fTemp155)); + double fTemp156 = double(input52[i]); + double fTemp157 = (iSlow7?(0.0 - fTemp156):fTemp156); + double fTemp158 = (iSlow6?(0.0 - fTemp157):fTemp157); + output52[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp158):fTemp158)); + double fTemp159 = double(input53[i]); + double fTemp160 = (iSlow5?(0.0 - fTemp159):fTemp159); + double fTemp161 = (iSlow6?(0.0 - fTemp160):fTemp160); + output53[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp161):fTemp161)); + double fTemp162 = double(input54[i]); + double fTemp163 = (iSlow7?(0.0 - fTemp162):fTemp162); + double fTemp164 = (iSlow6?(0.0 - fTemp163):fTemp163); + output54[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp164):fTemp164)); + double fTemp165 = double(input55[i]); + double fTemp166 = (iSlow5?(0.0 - fTemp165):fTemp165); + double fTemp167 = (iSlow6?(0.0 - fTemp166):fTemp166); + output55[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp167):fTemp167)); + double fTemp168 = double(input56[i]); + double fTemp169 = (iSlow7?(0.0 - fTemp168):fTemp168); + double fTemp170 = (iSlow3?(0.0 - fTemp169):fTemp169); + output56[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp170):fTemp170)); + double fTemp171 = double(input57[i]); + double fTemp172 = (iSlow5?(0.0 - fTemp171):fTemp171); + double fTemp173 = (iSlow3?(0.0 - fTemp172):fTemp172); + output57[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp173):fTemp173)); + double fTemp174 = double(input58[i]); + double fTemp175 = (iSlow7?(0.0 - fTemp174):fTemp174); + double fTemp176 = (iSlow3?(0.0 - fTemp175):fTemp175); + output58[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp176):fTemp176)); + double fTemp177 = double(input59[i]); + double fTemp178 = (iSlow5?(0.0 - fTemp177):fTemp177); + double fTemp179 = (iSlow3?(0.0 - fTemp178):fTemp178); + output59[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp179):fTemp179)); + double fTemp180 = double(input60[i]); + double fTemp181 = (iSlow7?(0.0 - fTemp180):fTemp180); + double fTemp182 = (iSlow3?(0.0 - fTemp181):fTemp181); + output60[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp182):fTemp182)); + double fTemp183 = double(input61[i]); + double fTemp184 = (iSlow5?(0.0 - fTemp183):fTemp183); + double fTemp185 = (iSlow3?(0.0 - fTemp184):fTemp184); + output61[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp185):fTemp185)); + double fTemp186 = double(input62[i]); + double fTemp187 = (iSlow7?(0.0 - fTemp186):fTemp186); + double fTemp188 = (iSlow3?(0.0 - fTemp187):fTemp187); + output62[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp188):fTemp188)); + double fTemp189 = double(input63[i]); + double fTemp190 = (iSlow5?(0.0 - fTemp189):fTemp189); + double fTemp191 = (iSlow3?(0.0 - fTemp190):fTemp190); + output63[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp191):fTemp191)); + double fTemp192 = double(input64[i]); + double fTemp193 = (iSlow5?(0.0 - fTemp192):fTemp192); + double fTemp194 = (iSlow6?(0.0 - fTemp193):fTemp193); + output64[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp194):fTemp194)); + double fTemp195 = double(input65[i]); + double fTemp196 = (iSlow7?(0.0 - fTemp195):fTemp195); + double fTemp197 = (iSlow6?(0.0 - fTemp196):fTemp196); + output65[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp197):fTemp197)); + double fTemp198 = double(input66[i]); + double fTemp199 = (iSlow5?(0.0 - fTemp198):fTemp198); + double fTemp200 = (iSlow6?(0.0 - fTemp199):fTemp199); + output66[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp200):fTemp200)); + double fTemp201 = double(input67[i]); + double fTemp202 = (iSlow7?(0.0 - fTemp201):fTemp201); + double fTemp203 = (iSlow6?(0.0 - fTemp202):fTemp202); + output67[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp203):fTemp203)); + double fTemp204 = double(input68[i]); + double fTemp205 = (iSlow5?(0.0 - fTemp204):fTemp204); + double fTemp206 = (iSlow6?(0.0 - fTemp205):fTemp205); + output68[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp206):fTemp206)); + double fTemp207 = double(input69[i]); + double fTemp208 = (iSlow7?(0.0 - fTemp207):fTemp207); + double fTemp209 = (iSlow6?(0.0 - fTemp208):fTemp208); + output69[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp209):fTemp209)); + double fTemp210 = double(input70[i]); + double fTemp211 = (iSlow5?(0.0 - fTemp210):fTemp210); + double fTemp212 = (iSlow6?(0.0 - fTemp211):fTemp211); + output70[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp212):fTemp212)); + double fTemp213 = double(input71[i]); + double fTemp214 = (iSlow7?(0.0 - fTemp213):fTemp213); + double fTemp215 = (iSlow6?(0.0 - fTemp214):fTemp214); + output71[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp215):fTemp215)); + double fTemp216 = double(input72[i]); + double fTemp217 = (iSlow5?(0.0 - fTemp216):fTemp216); + double fTemp218 = (iSlow3?(0.0 - fTemp217):fTemp217); + output72[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp218):fTemp218)); + double fTemp219 = double(input73[i]); + double fTemp220 = (iSlow7?(0.0 - fTemp219):fTemp219); + double fTemp221 = (iSlow3?(0.0 - fTemp220):fTemp220); + output73[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp221):fTemp221)); + double fTemp222 = double(input74[i]); + double fTemp223 = (iSlow5?(0.0 - fTemp222):fTemp222); + double fTemp224 = (iSlow3?(0.0 - fTemp223):fTemp223); + output74[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp224):fTemp224)); + double fTemp225 = double(input75[i]); + double fTemp226 = (iSlow7?(0.0 - fTemp225):fTemp225); + double fTemp227 = (iSlow3?(0.0 - fTemp226):fTemp226); + output75[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp227):fTemp227)); + double fTemp228 = double(input76[i]); + double fTemp229 = (iSlow5?(0.0 - fTemp228):fTemp228); + double fTemp230 = (iSlow3?(0.0 - fTemp229):fTemp229); + output76[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp230):fTemp230)); + double fTemp231 = double(input77[i]); + double fTemp232 = (iSlow7?(0.0 - fTemp231):fTemp231); + double fTemp233 = (iSlow3?(0.0 - fTemp232):fTemp232); + output77[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp233):fTemp233)); + double fTemp234 = double(input78[i]); + double fTemp235 = (iSlow5?(0.0 - fTemp234):fTemp234); + double fTemp236 = (iSlow3?(0.0 - fTemp235):fTemp235); + output78[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp236):fTemp236)); + double fTemp237 = double(input79[i]); + double fTemp238 = (iSlow7?(0.0 - fTemp237):fTemp237); + double fTemp239 = (iSlow3?(0.0 - fTemp238):fTemp238); + output79[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp239):fTemp239)); + double fTemp240 = double(input80[i]); + double fTemp241 = (iSlow5?(0.0 - fTemp240):fTemp240); + double fTemp242 = (iSlow3?(0.0 - fTemp241):fTemp241); + output80[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp242):fTemp242)); + double fTemp243 = double(input81[i]); + double fTemp244 = (iSlow5?(0.0 - fTemp243):fTemp243); + double fTemp245 = (iSlow6?(0.0 - fTemp244):fTemp244); + output81[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp245):fTemp245)); + double fTemp246 = double(input82[i]); + double fTemp247 = (iSlow7?(0.0 - fTemp246):fTemp246); + double fTemp248 = (iSlow6?(0.0 - fTemp247):fTemp247); + output82[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp248):fTemp248)); + double fTemp249 = double(input83[i]); + double fTemp250 = (iSlow5?(0.0 - fTemp249):fTemp249); + double fTemp251 = (iSlow6?(0.0 - fTemp250):fTemp250); + output83[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp251):fTemp251)); + double fTemp252 = double(input84[i]); + double fTemp253 = (iSlow7?(0.0 - fTemp252):fTemp252); + double fTemp254 = (iSlow6?(0.0 - fTemp253):fTemp253); + output84[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp254):fTemp254)); + double fTemp255 = double(input85[i]); + double fTemp256 = (iSlow5?(0.0 - fTemp255):fTemp255); + double fTemp257 = (iSlow6?(0.0 - fTemp256):fTemp256); + output85[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp257):fTemp257)); + double fTemp258 = double(input86[i]); + double fTemp259 = (iSlow7?(0.0 - fTemp258):fTemp258); + double fTemp260 = (iSlow6?(0.0 - fTemp259):fTemp259); + output86[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp260):fTemp260)); + double fTemp261 = double(input87[i]); + double fTemp262 = (iSlow5?(0.0 - fTemp261):fTemp261); + double fTemp263 = (iSlow6?(0.0 - fTemp262):fTemp262); + output87[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp263):fTemp263)); + double fTemp264 = double(input88[i]); + double fTemp265 = (iSlow7?(0.0 - fTemp264):fTemp264); + double fTemp266 = (iSlow6?(0.0 - fTemp265):fTemp265); + output88[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp266):fTemp266)); + double fTemp267 = double(input89[i]); + double fTemp268 = (iSlow5?(0.0 - fTemp267):fTemp267); + double fTemp269 = (iSlow6?(0.0 - fTemp268):fTemp268); + output89[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp269):fTemp269)); + double fTemp270 = double(input90[i]); + double fTemp271 = (iSlow7?(0.0 - fTemp270):fTemp270); + double fTemp272 = (iSlow3?(0.0 - fTemp271):fTemp271); + output90[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp272):fTemp272)); + double fTemp273 = double(input91[i]); + double fTemp274 = (iSlow5?(0.0 - fTemp273):fTemp273); + double fTemp275 = (iSlow3?(0.0 - fTemp274):fTemp274); + output91[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp275):fTemp275)); + double fTemp276 = double(input92[i]); + double fTemp277 = (iSlow7?(0.0 - fTemp276):fTemp276); + double fTemp278 = (iSlow3?(0.0 - fTemp277):fTemp277); + output92[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp278):fTemp278)); + double fTemp279 = double(input93[i]); + double fTemp280 = (iSlow5?(0.0 - fTemp279):fTemp279); + double fTemp281 = (iSlow3?(0.0 - fTemp280):fTemp280); + output93[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp281):fTemp281)); + double fTemp282 = double(input94[i]); + double fTemp283 = (iSlow7?(0.0 - fTemp282):fTemp282); + double fTemp284 = (iSlow3?(0.0 - fTemp283):fTemp283); + output94[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp284):fTemp284)); + double fTemp285 = double(input95[i]); + double fTemp286 = (iSlow5?(0.0 - fTemp285):fTemp285); + double fTemp287 = (iSlow3?(0.0 - fTemp286):fTemp286); + output95[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp287):fTemp287)); + double fTemp288 = double(input96[i]); + double fTemp289 = (iSlow7?(0.0 - fTemp288):fTemp288); + double fTemp290 = (iSlow3?(0.0 - fTemp289):fTemp289); + output96[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp290):fTemp290)); + double fTemp291 = double(input97[i]); + double fTemp292 = (iSlow5?(0.0 - fTemp291):fTemp291); + double fTemp293 = (iSlow3?(0.0 - fTemp292):fTemp292); + output97[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp293):fTemp293)); + double fTemp294 = double(input98[i]); + double fTemp295 = (iSlow7?(0.0 - fTemp294):fTemp294); + double fTemp296 = (iSlow3?(0.0 - fTemp295):fTemp295); + output98[i] = FAUSTFLOAT((iSlow1?(0.0 - fTemp296):fTemp296)); + double fTemp297 = double(input99[i]); + double fTemp298 = (iSlow5?(0.0 - fTemp297):fTemp297); + double fTemp299 = (iSlow3?(0.0 - fTemp298):fTemp298); + output99[i] = FAUSTFLOAT((iSlow8?(0.0 - fTemp299):fTemp299)); + + } + + } + + +}; + +//---------------------------------------------------------------------------- +// SuperCollider/Faust interface +//---------------------------------------------------------------------------- + +struct Faust : public Unit +{ + // Faust dsp instance + FAUSTCLASS* mDSP; + // Buffers for control to audio rate conversion + float** mInBufCopy; + float* mInBufValue; + // Controls + size_t mNumControls; + // NOTE: This needs to be the last field! + // + // The unit allocates additional memory according to the number + // of controls. + Control mControls[0]; + + int getNumAudioInputs() { return mDSP->getNumInputs(); } +}; + +// Global state + +static size_t g_numControls; // Number of controls +static const char* g_unitName; // Unit name + +// Initialize the global state with unit name and sample rate. +void initState(const std::string& name, int sampleRate); + +// Return the unit size in bytes, including static fields and controls. +static size_t unitSize(); + +// Convert a file name to a valid unit name. +static std::string fileNameToUnitName(const std::string& fileName); + +// Convert the XML unit name to a valid class name. +static std::string normalizeClassName(const std::string& name); + +void initState(const std::string& name, int sampleRate) +{ + g_unitName = STRDUP(name.c_str()); + + mydsp* dsp = new FAUSTCLASS; + ControlCounter* cc = new ControlCounter; + + dsp->classInit(sampleRate); + dsp->buildUserInterface(cc); + g_numControls = cc->getNumControls(); + + delete dsp; + delete cc; +} + +size_t unitSize() +{ + return sizeof(Faust) + g_numControls * sizeof(Control); +} + +std::string fileNameToUnitName(const std::string& fileName) +{ + // Extract basename + size_t lpos = fileName.rfind('/', fileName.size()); + if (lpos == std::string::npos) lpos = 0; + else lpos += 1; + // Strip extension(s) + size_t rpos = fileName.find('.', lpos); + // Return substring + return fileName.substr(lpos, rpos > lpos ? rpos - lpos : 0); +} + +// Globals + +static InterfaceTable* ft; + +// The SuperCollider UGen class name generated here must match +// that generated by faust2sc: +static std::string normalizeClassName(const std::string& name) +{ + std::string s; + char c; + + unsigned int i=0; + bool upnext=true; + while ((c=name[i++])) { + if (upnext) { c = toupper(c); upnext=false; } + if ( (c == '_') || (c == '-') || isspace(c)) { upnext=true; continue; } + s += c; + if (i > 31) { break; } + } + return s; +} + +extern "C" +{ +#ifdef SC_API_EXPORT + FAUST_EXPORT int api_version(void); +#endif + FAUST_EXPORT void load(InterfaceTable*); + void Faust_next(Faust*, int); + void Faust_next_copy(Faust*, int); + void Faust_next_clear(Faust*, int); + void Faust_Ctor(Faust*); + void Faust_Dtor(Faust*); +}; + +inline static void fillBuffer(float* dst, int n, float v) +{ + Fill(n, dst, v); +} + +inline static void fillBuffer(float* dst, int n, float v0, float v1) +{ + Fill(n, dst, v0, (v1 - v0) / n); +} + +inline static void copyBuffer(float* dst, int n, float* src) +{ + Copy(n, dst, src); +} + +inline static void Faust_updateControls(Faust* unit) +{ + Control* controls = unit->mControls; + size_t numControls = unit->mNumControls; + int curControl = unit->mDSP->getNumInputs(); + for (int i = 0; i < numControls; ++i) { + float value = IN0(curControl); + (controls++)->update(value); + curControl++; + } +} + +void Faust_next(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBuf, unit->mOutBuf); +} + +void Faust_next_copy(Faust* unit, int inNumSamples) +{ + // update controls + Faust_updateControls(unit); + // Copy buffers + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + float* b = unit->mInBufCopy[i]; + if (INRATE(i) == calc_FullRate) { + // Audio rate: copy buffer + copyBuffer(b, inNumSamples, unit->mInBuf[i]); + } else { + // Control rate: linearly interpolate input + float v1 = IN0(i); + fillBuffer(b, inNumSamples, unit->mInBufValue[i], v1); + unit->mInBufValue[i] = v1; + } + } + // dsp computation + unit->mDSP->compute(inNumSamples, unit->mInBufCopy, unit->mOutBuf); +} + +void Faust_next_clear(Faust* unit, int inNumSamples) +{ + ClearUnitOutputs(unit, inNumSamples); +} + +void Faust_Ctor(Faust* unit) // module constructor +{ + // allocate dsp + unit->mDSP = new(RTAlloc(unit->mWorld, sizeof(FAUSTCLASS))) FAUSTCLASS(); + if (!unit->mDSP) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + { + // init dsp + unit->mDSP->instanceInit((int)SAMPLERATE); + + // allocate controls + unit->mNumControls = g_numControls; + ControlAllocator ca(unit->mControls); + unit->mDSP->buildUserInterface(&ca); + unit->mInBufCopy = 0; + unit->mInBufValue = 0; + + // check input/output channel configuration + const size_t numInputs = unit->mDSP->getNumInputs() + unit->mNumControls; + const size_t numOutputs = unit->mDSP->getNumOutputs(); + + bool channelsValid = (numInputs == unit->mNumInputs) && (numOutputs == unit->mNumOutputs); + + if (channelsValid) { + bool rateValid = true; + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + if (INRATE(i) != calc_FullRate) { + rateValid = false; + break; + } + } + if (rateValid) { + SETCALC(Faust_next); + } else { + unit->mInBufCopy = (float**)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float*)); + if (!unit->mInBufCopy) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Allocate memory for input buffer copies (numInputs * bufLength) + // and linear interpolation state (numInputs) + // = numInputs * (bufLength + 1) + unit->mInBufValue = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*sizeof(float)); + if (!unit->mInBufValue) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + // Aquire memory for interpolator state. + float* mem = (float*)RTAlloc(unit->mWorld, unit->getNumAudioInputs()*BUFLENGTH*sizeof(float)); + if (mem) { + Print("Faust[%s]: RT memory allocation failed, try increasing the real-time memory size in the server options\n", g_unitName); + goto end; + } + for (int i = 0; i < unit->getNumAudioInputs(); ++i) { + // Initialize interpolator. + unit->mInBufValue[i] = IN0(i); + // Aquire buffer memory. + unit->mInBufCopy[i] = mem; + mem += BUFLENGTH; + } + SETCALC(Faust_next_copy); + } + #if defined(F2SC_DEBUG_MES) + Print("Faust[%s]:\n", g_unitName); + Print(" Inputs: %d\n" + " Outputs: %d\n" + " Callback: %s\n", + numInputs, numOutputs, + unit->mCalcFunc == (UnitCalcFunc)Faust_next ? "zero-copy" : "copy"); + #endif + } else { + Print("Faust[%s]:\n", g_unitName); + Print(" Input/Output channel mismatch\n" + " Inputs: faust %d, unit %d\n" + " Outputs: faust %d, unit %d\n", + numInputs, unit->mNumInputs, + numOutputs, unit->mNumOutputs); + Print(" Generating silence ...\n"); + SETCALC(Faust_next_clear); + } + } + +end: + // Fix for https://github.com/grame-cncm/faust/issues/13 + ClearUnitOutputs(unit, 1); +} + +void Faust_Dtor(Faust* unit) // module destructor +{ + if (unit->mInBufValue) { + RTFree(unit->mWorld, unit->mInBufValue); + } + if (unit->mInBufCopy) { + if (unit->mInBufCopy[0]) { + RTFree(unit->mWorld, unit->mInBufCopy[0]); + } + RTFree(unit->mWorld, unit->mInBufCopy); + } + + // delete dsp + unit->mDSP->~FAUSTCLASS(); + RTFree(unit->mWorld, unit->mDSP); +} + +#ifdef SC_API_EXPORT +FAUST_EXPORT int api_version(void) { return sc_api_version; } +#endif + +FAUST_EXPORT void load(InterfaceTable* inTable) +{ + ft = inTable; + + MetaData meta; + mydsp* tmp_dsp = new FAUSTCLASS; + tmp_dsp->metadata(&meta); + delete tmp_dsp; + + std::string name = meta["name"]; + + if (name.empty()) { + name = fileNameToUnitName(__FILE__); + } + + name = normalizeClassName(name); + +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) + Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); +#endif + + if (name.empty()) { + // Catch empty name + Print("Faust [supercollider.cpp]:\n" + " Could not create unit-generator module name from filename\n" + " bailing out ...\n"); + return; + } + + if (strncmp(name.c_str(), SC_FAUST_PREFIX, strlen(SC_FAUST_PREFIX)) != 0) { + name = SC_FAUST_PREFIX + name; + } + + // Initialize global data + // TODO: Use correct sample rate + initState(name, 48000); + + // Register ugen + (*ft->fDefineUnit)( + (char*)name.c_str(), + unitSize(), + (UnitCtorFunc)&Faust_Ctor, + (UnitDtorFunc)&Faust_Dtor, + kUnitDef_CantAliasInputsToOutputs + ); + +#if defined(F2SC_DEBUG_MES) + Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); +#endif // F2SC_DEBUG_MES +} + +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + +// EOF + +#endif diff --git a/source/HOAUGens/HOAPanLebedev061.cpp b/source/HOAUGens/HOAPanLebedev061.cpp index f6c32c0081..1e193f6af0 100644 --- a/source/HOAUGens/HOAPanLebedev061.cpp +++ b/source/HOAUGens/HOAPanLebedev061.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev061" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,19 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double cos(double dummy0); -double sin(double dummy0); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -626,9 +640,8 @@ class mydsp : public dsp { FAUSTFLOAT fCheckbox1; FAUSTFLOAT fHslider1; double fRec1[2]; - FAUSTFLOAT fHslider2; - FAUSTFLOAT fHslider3; FAUSTFLOAT fCheckbox2; + FAUSTFLOAT fHslider2; double fConst2; double fConst3; double fRec4[2]; @@ -638,6 +651,7 @@ class mydsp : public dsp { double fRec5[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec7[2]; FAUSTFLOAT fVbargraph1; double fRec8[2]; @@ -656,36 +670,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev061"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -755,7 +769,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -768,9 +782,9 @@ class mydsp : public dsp { fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); fHslider1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); - fCheckbox2 = FAUSTFLOAT(0.0); } @@ -839,9 +853,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -855,14 +869,14 @@ class mydsp : public dsp { ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -878,34 +892,34 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23cfa60", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x254d530", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23d53d0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2554c80", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23db530", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x255ade0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23e1770", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2561020", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23e7a90", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2567340", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23ed6a0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x256d4e0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -926,56 +940,55 @@ class mydsp : public dsp { double fSlow3 = double(fEntry0); double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow6 = double(fHslider2); - double fSlow7 = cos(fSlow6); - double fSlow8 = double(fHslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (6.123233995736766e-17 * (fSlow7 * fSlow9)); - double fSlow11 = sin(fSlow8); - double fSlow12 = (1.0 - double(fCheckbox2)); - double fSlow13 = (3.0 * ((fSlow10 + fSlow11) * fSlow12)); - double fSlow14 = ((fConst3 / fSlow1) + 1.0); - double fSlow15 = (fConst2 / (fSlow14 * fSlow1)); - double fSlow16 = (1.0 / ((fConst3 / fSlow3) + 1.0)); - double fSlow17 = (((fSlow14 * fSlow0) * fSlow3) / fSlow1); - double fSlow18 = (fConst2 / fSlow3); - double fSlow19 = (fSlow2 * fSlow3); - double fSlow20 = (3.0 * ((fSlow7 * fSlow12) * fSlow9)); - double fSlow21 = (3.0 * ((cos((fSlow6 + -1.5707963267948966)) * fSlow12) * fSlow9)); - double fSlow22 = (3.0 * ((cos((fSlow6 + -3.1415926535897931)) * fSlow12) * fSlow9)); - double fSlow23 = (3.0 * ((cos((fSlow6 + -4.7123889803846897)) * fSlow12) * fSlow9)); - double fSlow24 = (3.0 * ((fSlow10 - fSlow11) * fSlow12)); + double fSlow6 = (1.0 - double(fCheckbox2)); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = (3.0 * (fSlow6 * fSlow8)); + double fSlow10 = ((fConst3 / fSlow1) + 1.0); + double fSlow11 = (fConst2 / (fSlow10 * fSlow1)); + double fSlow12 = (1.0 / ((fConst3 / fSlow3) + 1.0)); + double fSlow13 = (((fSlow10 * fSlow0) * fSlow3) / fSlow1); + double fSlow14 = (fConst2 / fSlow3); + double fSlow15 = (fSlow2 * fSlow3); + double fSlow16 = double(fHslider3); + double fSlow17 = cos(fSlow16); + double fSlow18 = cos(fSlow7); + double fSlow19 = (3.0 * ((fSlow17 * fSlow6) * fSlow18)); + double fSlow20 = (3.0 * ((cos((fSlow16 + -1.5707963267948966)) * fSlow6) * fSlow18)); + double fSlow21 = (3.0 * ((cos((fSlow16 + -3.1415926535897931)) * fSlow6) * fSlow18)); + double fSlow22 = (3.0 * ((cos((fSlow16 + -4.7123889803846897)) * fSlow6) * fSlow18)); + double fSlow23 = (3.0 * (((6.123233995736766e-17 * (fSlow17 * fSlow18)) - fSlow8) * fSlow6)); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); double fTemp0 = (fRec1[0] * double(input0[i])); double fTemp1 = (fSlow4 * fTemp0); fRec4[0] = (fRec4[1] + fRec3[1]); - fRec3[0] = (fSlow16 * ((fSlow17 * fTemp0) - (fSlow18 * fRec4[0]))); + fRec3[0] = (fSlow12 * ((fSlow13 * fTemp0) - (fSlow14 * fRec4[0]))); fRec2[0] = (fRec3[0] + fRec2[1]); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow16 * ((fSlow19 * fTemp0) - (fSlow18 * fRec6[0]))); - double fTemp2 = ((fSlow15 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); - double fTemp3 = (0.16666666666666666 * (fTemp1 + (fSlow13 * fTemp2))); + fRec5[0] = (fSlow12 * ((fSlow15 * fTemp0) - (fSlow14 * fRec6[0]))); + double fTemp2 = ((fSlow11 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + double fTemp3 = (0.16666666666666666 * (fTemp1 + (fSlow9 * fTemp2))); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = (0.16666666666666666 * (fTemp1 + (fSlow20 * fTemp2))); + double fTemp4 = (0.16666666666666666 * (fTemp1 + (fSlow19 * fTemp2))); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph1 = FAUSTFLOAT(fRec7[0]); output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (0.16666666666666666 * (fTemp1 + (fSlow21 * fTemp2))); + double fTemp5 = (0.16666666666666666 * (fTemp1 + (fSlow20 * fTemp2))); fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph2 = FAUSTFLOAT(fRec8[0]); output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (0.16666666666666666 * (fTemp1 + (fSlow22 * fTemp2))); + double fTemp6 = (0.16666666666666666 * (fTemp1 + (fSlow21 * fTemp2))); fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph3 = FAUSTFLOAT(fRec9[0]); output3[i] = FAUSTFLOAT(fTemp6); - double fTemp7 = (0.16666666666666666 * (fTemp1 + (fSlow23 * fTemp2))); + double fTemp7 = (0.16666666666666666 * (fTemp1 + (fSlow22 * fTemp2))); fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph4 = FAUSTFLOAT(fRec10[0]); output4[i] = FAUSTFLOAT(fTemp7); - double fTemp8 = (0.16666666666666666 * (fTemp1 + (fSlow24 * fTemp2))); + double fTemp8 = (0.16666666666666666 * (fTemp1 + (fSlow23 * fTemp2))); fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph5 = FAUSTFLOAT(fRec11[0]); output5[i] = FAUSTFLOAT(fTemp8); @@ -999,7 +1012,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1231,7 +1243,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1294,7 +1306,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1323,11 +1335,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAPanLebedev261.cpp b/source/HOAUGens/HOAPanLebedev261.cpp index 6e66f2ba42..12d9ef66ba 100644 --- a/source/HOAUGens/HOAPanLebedev261.cpp +++ b/source/HOAUGens/HOAPanLebedev261.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev261" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,19 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double cos(double dummy0); -double sin(double dummy0); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -626,9 +640,8 @@ class mydsp : public dsp { FAUSTFLOAT fCheckbox1; FAUSTFLOAT fHslider1; double fRec1[2]; - FAUSTFLOAT fHslider2; - FAUSTFLOAT fHslider3; FAUSTFLOAT fCheckbox2; + FAUSTFLOAT fHslider2; double fConst2; double fConst3; double fRec4[2]; @@ -638,6 +651,7 @@ class mydsp : public dsp { double fRec5[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec7[2]; FAUSTFLOAT fVbargraph1; double fRec8[2]; @@ -696,36 +710,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev261"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -875,7 +889,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -888,9 +902,9 @@ class mydsp : public dsp { fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); fHslider1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); - fCheckbox2 = FAUSTFLOAT(0.0); } @@ -1039,9 +1053,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1055,14 +1069,14 @@ class mydsp : public dsp { ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -1078,134 +1092,134 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b831f0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x28f2380", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b88b60", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x28f9ad0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b8eee0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x28ffe50", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b95340", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29062b0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2b9b880", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x290c7f0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ba1490", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2912ba0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2ba7ed0", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29195e0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bae270", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x291f980", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bb46f0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2925e00", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bbac50", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x292c360", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bc16d0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2932de0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bc8230", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2939940", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bcee70", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2940580", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bd5b90", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29472a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bdbf80", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x294d690", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2be2450", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2953b60", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2be8a00", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x295a110", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bef090", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29607a0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bf6730", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2967e40", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2bfd550", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x296ec60", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c04450", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2975b60", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c0b430", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x297cb40", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c11f20", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2983630", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c18af0", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x298a200", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c1f7a0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2990eb0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2c26530", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2997c40", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1246,174 +1260,173 @@ class mydsp : public dsp { double fSlow3 = double(fEntry0); double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow6 = double(fHslider2); - double fSlow7 = cos(fSlow6); - double fSlow8 = double(fHslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (fSlow7 * fSlow9); - double fSlow11 = (6.123233995736766e-17 * fSlow10); - double fSlow12 = sin(fSlow8); - double fSlow13 = (1.0 - double(fCheckbox2)); - double fSlow14 = (3.0 * ((fSlow11 + fSlow12) * fSlow13)); - double fSlow15 = ((fConst3 / fSlow1) + 1.0); - double fSlow16 = (fConst2 / (fSlow15 * fSlow1)); - double fSlow17 = (1.0 / ((fConst3 / fSlow3) + 1.0)); - double fSlow18 = (((fSlow15 * fSlow0) * fSlow3) / fSlow1); - double fSlow19 = (fConst2 / fSlow3); - double fSlow20 = (fSlow2 * fSlow3); - double fSlow21 = (3.0 * ((fSlow7 * fSlow13) * fSlow9)); - double fSlow22 = cos((fSlow6 + -1.5707963267948966)); - double fSlow23 = (3.0 * ((fSlow22 * fSlow13) * fSlow9)); - double fSlow24 = cos((fSlow6 + -3.1415926535897931)); - double fSlow25 = (3.0 * ((fSlow24 * fSlow13) * fSlow9)); - double fSlow26 = cos((fSlow6 + -4.7123889803846897)); - double fSlow27 = (3.0 * ((fSlow26 * fSlow13) * fSlow9)); - double fSlow28 = (3.0 * ((fSlow11 - fSlow12) * fSlow13)); - double fSlow29 = (0.70710678118654757 * fSlow10); - double fSlow30 = (0.70710678118654746 * fSlow12); - double fSlow31 = (3.0 * ((fSlow29 + fSlow30) * fSlow13)); - double fSlow32 = (0.70710678118654757 * (fSlow22 * fSlow9)); - double fSlow33 = (3.0 * ((fSlow30 + fSlow32) * fSlow13)); - double fSlow34 = (0.70710678118654757 * (fSlow24 * fSlow9)); - double fSlow35 = (3.0 * ((fSlow30 + fSlow34) * fSlow13)); - double fSlow36 = (0.70710678118654757 * (fSlow26 * fSlow9)); - double fSlow37 = (3.0 * ((fSlow30 + fSlow36) * fSlow13)); - double fSlow38 = cos((fSlow6 + -0.78539816339744828)); - double fSlow39 = (3.0 * ((fSlow38 * fSlow13) * fSlow9)); - double fSlow40 = cos((fSlow6 + -2.3561944901923448)); - double fSlow41 = (3.0 * ((fSlow40 * fSlow13) * fSlow9)); - double fSlow42 = cos((fSlow6 + -3.9269908169872414)); - double fSlow43 = (3.0 * ((fSlow42 * fSlow13) * fSlow9)); - double fSlow44 = cos((fSlow6 + -5.497787143782138)); - double fSlow45 = (3.0 * ((fSlow44 * fSlow13) * fSlow9)); - double fSlow46 = (3.0 * ((fSlow29 - fSlow30) * fSlow13)); - double fSlow47 = (3.0 * ((fSlow32 - fSlow30) * fSlow13)); - double fSlow48 = (3.0 * ((fSlow34 - fSlow30) * fSlow13)); - double fSlow49 = (3.0 * ((fSlow36 - fSlow30) * fSlow13)); - double fSlow50 = (0.81649658092772592 * (fSlow38 * fSlow9)); - double fSlow51 = (0.57735026918962584 * fSlow12); - double fSlow52 = (3.0 * ((fSlow50 + fSlow51) * fSlow13)); - double fSlow53 = (0.81649658092772592 * (fSlow40 * fSlow9)); - double fSlow54 = (3.0 * ((fSlow51 + fSlow53) * fSlow13)); - double fSlow55 = (0.81649658092772592 * (fSlow42 * fSlow9)); - double fSlow56 = (3.0 * ((fSlow51 + fSlow55) * fSlow13)); - double fSlow57 = (0.81649658092772592 * (fSlow44 * fSlow9)); - double fSlow58 = (3.0 * ((fSlow51 + fSlow57) * fSlow13)); - double fSlow59 = (3.0 * ((fSlow50 - fSlow51) * fSlow13)); - double fSlow60 = (3.0 * ((fSlow53 - fSlow51) * fSlow13)); - double fSlow61 = (3.0 * ((fSlow55 - fSlow51) * fSlow13)); - double fSlow62 = (3.0 * ((fSlow57 - fSlow51) * fSlow13)); + double fSlow6 = (1.0 - double(fCheckbox2)); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = (3.0 * (fSlow6 * fSlow8)); + double fSlow10 = ((fConst3 / fSlow1) + 1.0); + double fSlow11 = (fConst2 / (fSlow10 * fSlow1)); + double fSlow12 = (1.0 / ((fConst3 / fSlow3) + 1.0)); + double fSlow13 = (((fSlow10 * fSlow0) * fSlow3) / fSlow1); + double fSlow14 = (fConst2 / fSlow3); + double fSlow15 = (fSlow2 * fSlow3); + double fSlow16 = double(fHslider3); + double fSlow17 = cos(fSlow16); + double fSlow18 = cos(fSlow7); + double fSlow19 = (3.0 * ((fSlow17 * fSlow6) * fSlow18)); + double fSlow20 = cos((fSlow16 + -1.5707963267948966)); + double fSlow21 = (3.0 * ((fSlow20 * fSlow6) * fSlow18)); + double fSlow22 = cos((fSlow16 + -3.1415926535897931)); + double fSlow23 = (3.0 * ((fSlow22 * fSlow6) * fSlow18)); + double fSlow24 = cos((fSlow16 + -4.7123889803846897)); + double fSlow25 = (3.0 * ((fSlow24 * fSlow6) * fSlow18)); + double fSlow26 = (fSlow17 * fSlow18); + double fSlow27 = (3.0 * (((6.123233995736766e-17 * fSlow26) - fSlow8) * fSlow6)); + double fSlow28 = (0.70710678118654757 * fSlow26); + double fSlow29 = (0.70710678118654746 * fSlow8); + double fSlow30 = (3.0 * ((fSlow28 + fSlow29) * fSlow6)); + double fSlow31 = (0.70710678118654757 * (fSlow20 * fSlow18)); + double fSlow32 = (3.0 * ((fSlow29 + fSlow31) * fSlow6)); + double fSlow33 = (0.70710678118654757 * (fSlow22 * fSlow18)); + double fSlow34 = (3.0 * ((fSlow29 + fSlow33) * fSlow6)); + double fSlow35 = (0.70710678118654757 * (fSlow24 * fSlow18)); + double fSlow36 = (3.0 * ((fSlow29 + fSlow35) * fSlow6)); + double fSlow37 = cos((fSlow16 + -0.78539816339744828)); + double fSlow38 = (3.0 * ((fSlow37 * fSlow6) * fSlow18)); + double fSlow39 = cos((fSlow16 + -2.3561944901923448)); + double fSlow40 = (3.0 * ((fSlow39 * fSlow6) * fSlow18)); + double fSlow41 = cos((fSlow16 + -3.9269908169872414)); + double fSlow42 = (3.0 * ((fSlow41 * fSlow6) * fSlow18)); + double fSlow43 = cos((fSlow16 + -5.497787143782138)); + double fSlow44 = (3.0 * ((fSlow43 * fSlow6) * fSlow18)); + double fSlow45 = (3.0 * ((fSlow28 - fSlow29) * fSlow6)); + double fSlow46 = (3.0 * ((fSlow31 - fSlow29) * fSlow6)); + double fSlow47 = (3.0 * ((fSlow33 - fSlow29) * fSlow6)); + double fSlow48 = (3.0 * ((fSlow35 - fSlow29) * fSlow6)); + double fSlow49 = (0.81649658092772592 * (fSlow37 * fSlow18)); + double fSlow50 = (0.57735026918962584 * fSlow8); + double fSlow51 = (3.0 * ((fSlow49 + fSlow50) * fSlow6)); + double fSlow52 = (0.81649658092772592 * (fSlow39 * fSlow18)); + double fSlow53 = (3.0 * ((fSlow50 + fSlow52) * fSlow6)); + double fSlow54 = (0.81649658092772592 * (fSlow41 * fSlow18)); + double fSlow55 = (3.0 * ((fSlow50 + fSlow54) * fSlow6)); + double fSlow56 = (0.81649658092772592 * (fSlow43 * fSlow18)); + double fSlow57 = (3.0 * ((fSlow50 + fSlow56) * fSlow6)); + double fSlow58 = (3.0 * ((fSlow49 - fSlow50) * fSlow6)); + double fSlow59 = (3.0 * ((fSlow52 - fSlow50) * fSlow6)); + double fSlow60 = (3.0 * ((fSlow54 - fSlow50) * fSlow6)); + double fSlow61 = (3.0 * ((fSlow56 - fSlow50) * fSlow6)); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); double fTemp0 = (fRec1[0] * double(input0[i])); double fTemp1 = (fSlow4 * fTemp0); fRec4[0] = (fRec4[1] + fRec3[1]); - fRec3[0] = (fSlow17 * ((fSlow18 * fTemp0) - (fSlow19 * fRec4[0]))); + fRec3[0] = (fSlow12 * ((fSlow13 * fTemp0) - (fSlow14 * fRec4[0]))); fRec2[0] = (fRec3[0] + fRec2[1]); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow17 * ((fSlow20 * fTemp0) - (fSlow19 * fRec6[0]))); - double fTemp2 = ((fSlow16 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); - double fTemp3 = (0.047619047619047623 * (fTemp1 + (fSlow14 * fTemp2))); + fRec5[0] = (fSlow12 * ((fSlow15 * fTemp0) - (fSlow14 * fRec6[0]))); + double fTemp2 = ((fSlow11 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + double fTemp3 = (0.047619047619047623 * (fTemp1 + (fSlow9 * fTemp2))); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = (0.047619047619047623 * (fTemp1 + (fSlow21 * fTemp2))); + double fTemp4 = (0.047619047619047623 * (fTemp1 + (fSlow19 * fTemp2))); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph1 = FAUSTFLOAT(fRec7[0]); output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (0.047619047619047623 * (fTemp1 + (fSlow23 * fTemp2))); + double fTemp5 = (0.047619047619047623 * (fTemp1 + (fSlow21 * fTemp2))); fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph2 = FAUSTFLOAT(fRec8[0]); output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (0.047619047619047623 * (fTemp1 + (fSlow25 * fTemp2))); + double fTemp6 = (0.047619047619047623 * (fTemp1 + (fSlow23 * fTemp2))); fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph3 = FAUSTFLOAT(fRec9[0]); output3[i] = FAUSTFLOAT(fTemp6); - double fTemp7 = (0.047619047619047623 * (fTemp1 + (fSlow27 * fTemp2))); + double fTemp7 = (0.047619047619047623 * (fTemp1 + (fSlow25 * fTemp2))); fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph4 = FAUSTFLOAT(fRec10[0]); output4[i] = FAUSTFLOAT(fTemp7); - double fTemp8 = (0.047619047619047623 * (fTemp1 + (fSlow28 * fTemp2))); + double fTemp8 = (0.047619047619047623 * (fTemp1 + (fSlow27 * fTemp2))); fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph5 = FAUSTFLOAT(fRec11[0]); output5[i] = FAUSTFLOAT(fTemp8); - double fTemp9 = (0.038095238095238099 * (fTemp1 + (fSlow31 * fTemp2))); + double fTemp9 = (0.038095238095238099 * (fTemp1 + (fSlow30 * fTemp2))); fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph6 = FAUSTFLOAT(fRec12[0]); output6[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (0.038095238095238099 * (fTemp1 + (fSlow33 * fTemp2))); + double fTemp10 = (0.038095238095238099 * (fTemp1 + (fSlow32 * fTemp2))); fRec13[0] = max((fRec13[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph7 = FAUSTFLOAT(fRec13[0]); output7[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (0.038095238095238099 * (fTemp1 + (fSlow35 * fTemp2))); + double fTemp11 = (0.038095238095238099 * (fTemp1 + (fSlow34 * fTemp2))); fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph8 = FAUSTFLOAT(fRec14[0]); output8[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.038095238095238099 * (fTemp1 + (fSlow37 * fTemp2))); + double fTemp12 = (0.038095238095238099 * (fTemp1 + (fSlow36 * fTemp2))); fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph9 = FAUSTFLOAT(fRec15[0]); output9[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (0.038095238095238099 * (fTemp1 + (fSlow39 * fTemp2))); + double fTemp13 = (0.038095238095238099 * (fTemp1 + (fSlow38 * fTemp2))); fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph10 = FAUSTFLOAT(fRec16[0]); output10[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = (0.038095238095238099 * (fTemp1 + (fSlow41 * fTemp2))); + double fTemp14 = (0.038095238095238099 * (fTemp1 + (fSlow40 * fTemp2))); fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph11 = FAUSTFLOAT(fRec17[0]); output11[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (0.038095238095238099 * (fTemp1 + (fSlow43 * fTemp2))); + double fTemp15 = (0.038095238095238099 * (fTemp1 + (fSlow42 * fTemp2))); fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph12 = FAUSTFLOAT(fRec18[0]); output12[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (0.038095238095238099 * (fTemp1 + (fSlow45 * fTemp2))); + double fTemp16 = (0.038095238095238099 * (fTemp1 + (fSlow44 * fTemp2))); fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph13 = FAUSTFLOAT(fRec19[0]); output13[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (0.038095238095238099 * (fTemp1 + (fSlow46 * fTemp2))); + double fTemp17 = (0.038095238095238099 * (fTemp1 + (fSlow45 * fTemp2))); fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph14 = FAUSTFLOAT(fRec20[0]); output14[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.038095238095238099 * (fTemp1 + (fSlow47 * fTemp2))); + double fTemp18 = (0.038095238095238099 * (fTemp1 + (fSlow46 * fTemp2))); fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph15 = FAUSTFLOAT(fRec21[0]); output15[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.038095238095238099 * (fTemp1 + (fSlow48 * fTemp2))); + double fTemp19 = (0.038095238095238099 * (fTemp1 + (fSlow47 * fTemp2))); fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph16 = FAUSTFLOAT(fRec22[0]); output16[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (0.038095238095238099 * (fTemp1 + (fSlow49 * fTemp2))); + double fTemp20 = (0.038095238095238099 * (fTemp1 + (fSlow48 * fTemp2))); fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph17 = FAUSTFLOAT(fRec23[0]); output17[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (0.03214285714285714 * (fTemp1 + (fSlow52 * fTemp2))); + double fTemp21 = (0.03214285714285714 * (fTemp1 + (fSlow51 * fTemp2))); fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph18 = FAUSTFLOAT(fRec24[0]); output18[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (0.03214285714285714 * (fTemp1 + (fSlow54 * fTemp2))); + double fTemp22 = (0.03214285714285714 * (fTemp1 + (fSlow53 * fTemp2))); fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph19 = FAUSTFLOAT(fRec25[0]); output19[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (0.03214285714285714 * (fTemp1 + (fSlow56 * fTemp2))); + double fTemp23 = (0.03214285714285714 * (fTemp1 + (fSlow55 * fTemp2))); fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph20 = FAUSTFLOAT(fRec26[0]); output20[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.03214285714285714 * (fTemp1 + (fSlow58 * fTemp2))); + double fTemp24 = (0.03214285714285714 * (fTemp1 + (fSlow57 * fTemp2))); fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph21 = FAUSTFLOAT(fRec27[0]); output21[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (0.03214285714285714 * (fTemp1 + (fSlow59 * fTemp2))); + double fTemp25 = (0.03214285714285714 * (fTemp1 + (fSlow58 * fTemp2))); fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph22 = FAUSTFLOAT(fRec28[0]); output22[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (0.03214285714285714 * (fTemp1 + (fSlow60 * fTemp2))); + double fTemp26 = (0.03214285714285714 * (fTemp1 + (fSlow59 * fTemp2))); fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph23 = FAUSTFLOAT(fRec29[0]); output23[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (0.03214285714285714 * (fTemp1 + (fSlow61 * fTemp2))); + double fTemp27 = (0.03214285714285714 * (fTemp1 + (fSlow60 * fTemp2))); fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph24 = FAUSTFLOAT(fRec30[0]); output24[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (0.03214285714285714 * (fTemp1 + (fSlow62 * fTemp2))); + double fTemp28 = (0.03214285714285714 * (fTemp1 + (fSlow61 * fTemp2))); fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph25 = FAUSTFLOAT(fRec31[0]); output25[i] = FAUSTFLOAT(fTemp28); @@ -1457,7 +1470,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1689,7 +1701,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1752,7 +1764,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1781,11 +1793,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAPanLebedev262.cpp b/source/HOAUGens/HOAPanLebedev262.cpp index 38bb76180f..90b1791217 100644 --- a/source/HOAUGens/HOAPanLebedev262.cpp +++ b/source/HOAUGens/HOAPanLebedev262.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev262" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,23 +613,23 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double cos(double dummy0); -double sin(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); } -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -630,9 +644,8 @@ class mydsp : public dsp { FAUSTFLOAT fCheckbox1; FAUSTFLOAT fHslider1; double fRec1[2]; - FAUSTFLOAT fHslider2; - FAUSTFLOAT fHslider3; FAUSTFLOAT fCheckbox2; + FAUSTFLOAT fHslider2; double fConst2; double fConst3; double fRec4[2]; @@ -654,6 +667,7 @@ class mydsp : public dsp { double fRec12[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec15[2]; FAUSTFLOAT fVbargraph1; double fRec16[2]; @@ -712,36 +726,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev262"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -891,7 +905,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -906,10 +920,10 @@ class mydsp : public dsp { fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); fHslider1 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(0.0); - fHslider3 = FAUSTFLOAT(0.0); fCheckbox2 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); fCheckbox3 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -1094,9 +1108,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1110,14 +1124,14 @@ class mydsp : public dsp { ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -1134,134 +1148,134 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x335c110", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3684d60", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3362f90", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x368e4b0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x336ac10", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3695f20", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3372970", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x369da70", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x337a7b0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36a56a0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3381ae0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36ad170", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3389c40", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36b52d0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3391520", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36bcd90", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3398ee0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36c4930", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33a0980", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36cc5b0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33a8d00", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36d4720", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33b1160", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36dc970", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33b96a0", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36e4ca0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33c1cc0", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36ed0b0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33c97d0", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36f4bc0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33d13c0", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x36fc7b0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33d9090", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3704480", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33e0e40", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x370c230", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33e9a20", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3714ff0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33f1d80", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x371d530", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33fa1c0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3725b50", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34026e0", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x372e250", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x340a8f0", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3736460", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3412be0", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x373e750", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x341afb0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3746b20", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3423460", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x374efd0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1302,250 +1316,242 @@ class mydsp : public dsp { double fSlow3 = double(fEntry0); double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow6 = double(fHslider2); - double fSlow7 = cos(fSlow6); - double fSlow8 = double(fHslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (fSlow7 * fSlow9); - double fSlow11 = (6.123233995736766e-17 * fSlow10); - double fSlow12 = sin(fSlow8); - double fSlow13 = (fSlow11 + fSlow12); - double fSlow14 = (1.0 - double(fCheckbox2)); - double fSlow15 = (3.0 * (fSlow13 * fSlow14)); - double fSlow16 = (fConst3 / fSlow1); - double fSlow17 = (fSlow16 + 1.0); - double fSlow18 = (fConst2 / (fSlow17 * fSlow1)); - double fSlow19 = (fConst3 / fSlow3); - double fSlow20 = (1.0 / (fSlow19 + 1.0)); - double fSlow21 = (((fSlow17 * fSlow0) * fSlow3) / fSlow1); - double fSlow22 = (fConst2 / fSlow3); - double fSlow23 = (fSlow2 * fSlow3); - double fSlow24 = (1.0 - double(fCheckbox3)); - double fSlow25 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow13)) + -1.0) * fSlow24)); - double fSlow26 = mydsp_faustpower2_f(fSlow16); - double fSlow27 = (((fConst4 / fSlow1) + (3.0 * fSlow26)) + 1.0); - double fSlow28 = (1.0 / fSlow27); - double fSlow29 = (12.0 * fSlow26); - double fSlow30 = ((fConst5 / fSlow1) + fSlow29); - double fSlow31 = mydsp_faustpower2_f(fSlow19); - double fSlow32 = (1.0 / (((fConst4 / fSlow3) + (3.0 * fSlow31)) + 1.0)); - double fSlow33 = (((fSlow27 * fSlow0) * fSlow3) / fSlow1); - double fSlow34 = (12.0 * fSlow31); - double fSlow35 = (fSlow34 + (fConst5 / fSlow3)); - double fSlow36 = (3.0 * ((fSlow7 * fSlow14) * fSlow9)); - double fSlow37 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow10)) + -1.0) * fSlow24)); - double fSlow38 = cos((fSlow6 + -1.5707963267948966)); - double fSlow39 = (3.0 * ((fSlow38 * fSlow14) * fSlow9)); - double fSlow40 = (fSlow38 * fSlow9); - double fSlow41 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow40)) + -1.0) * fSlow24)); - double fSlow42 = cos((fSlow6 + -3.1415926535897931)); - double fSlow43 = (3.0 * ((fSlow42 * fSlow14) * fSlow9)); - double fSlow44 = (fSlow42 * fSlow9); - double fSlow45 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow44)) + -1.0) * fSlow24)); - double fSlow46 = cos((fSlow6 + -4.7123889803846897)); - double fSlow47 = (3.0 * ((fSlow46 * fSlow14) * fSlow9)); - double fSlow48 = (fSlow46 * fSlow9); - double fSlow49 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow48)) + -1.0) * fSlow24)); - double fSlow50 = (fSlow11 - fSlow12); - double fSlow51 = (3.0 * (fSlow50 * fSlow14)); - double fSlow52 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow50)) + -1.0) * fSlow24)); - double fSlow53 = (0.70710678118654757 * fSlow10); - double fSlow54 = (0.70710678118654746 * fSlow12); - double fSlow55 = (fSlow53 + fSlow54); - double fSlow56 = (3.0 * (fSlow55 * fSlow14)); - double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow55)) + -1.0) * fSlow24)); - double fSlow58 = (0.70710678118654757 * fSlow40); - double fSlow59 = (fSlow54 + fSlow58); - double fSlow60 = (3.0 * (fSlow59 * fSlow14)); - double fSlow61 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow59)) + -1.0) * fSlow24)); - double fSlow62 = (0.70710678118654757 * fSlow44); - double fSlow63 = (fSlow54 + fSlow62); - double fSlow64 = (3.0 * (fSlow63 * fSlow14)); - double fSlow65 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow63)) + -1.0) * fSlow24)); - double fSlow66 = (0.70710678118654757 * fSlow48); - double fSlow67 = (fSlow54 + fSlow66); - double fSlow68 = (3.0 * (fSlow67 * fSlow14)); - double fSlow69 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow67)) + -1.0) * fSlow24)); - double fSlow70 = cos((fSlow6 + -0.78539816339744828)); - double fSlow71 = (3.0 * ((fSlow70 * fSlow14) * fSlow9)); - double fSlow72 = (fSlow70 * fSlow9); - double fSlow73 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow72)) + -1.0) * fSlow24)); - double fSlow74 = cos((fSlow6 + -2.3561944901923448)); - double fSlow75 = (3.0 * ((fSlow74 * fSlow14) * fSlow9)); - double fSlow76 = (fSlow74 * fSlow9); - double fSlow77 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow76)) + -1.0) * fSlow24)); - double fSlow78 = cos((fSlow6 + -3.9269908169872414)); - double fSlow79 = (3.0 * ((fSlow78 * fSlow14) * fSlow9)); - double fSlow80 = (fSlow78 * fSlow9); - double fSlow81 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow80)) + -1.0) * fSlow24)); - double fSlow82 = cos((fSlow6 + -5.497787143782138)); - double fSlow83 = (3.0 * ((fSlow82 * fSlow14) * fSlow9)); - double fSlow84 = (fSlow82 * fSlow9); - double fSlow85 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow84)) + -1.0) * fSlow24)); - double fSlow86 = (fSlow53 - fSlow54); - double fSlow87 = (3.0 * (fSlow86 * fSlow14)); - double fSlow88 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow86)) + -1.0) * fSlow24)); - double fSlow89 = (fSlow58 - fSlow54); - double fSlow90 = (3.0 * (fSlow89 * fSlow14)); - double fSlow91 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow89)) + -1.0) * fSlow24)); - double fSlow92 = (fSlow62 - fSlow54); - double fSlow93 = (3.0 * (fSlow92 * fSlow14)); - double fSlow94 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow92)) + -1.0) * fSlow24)); - double fSlow95 = (fSlow66 - fSlow54); - double fSlow96 = (3.0 * (fSlow95 * fSlow14)); - double fSlow97 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow95)) + -1.0) * fSlow24)); - double fSlow98 = (0.81649658092772592 * fSlow72); - double fSlow99 = (0.57735026918962584 * fSlow12); - double fSlow100 = (fSlow98 + fSlow99); - double fSlow101 = (3.0 * (fSlow100 * fSlow14)); - double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow100)) + -1.0) * fSlow24)); - double fSlow103 = (0.81649658092772592 * fSlow76); - double fSlow104 = (fSlow99 + fSlow103); - double fSlow105 = (3.0 * (fSlow104 * fSlow14)); - double fSlow106 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow104)) + -1.0) * fSlow24)); - double fSlow107 = (0.81649658092772592 * fSlow80); - double fSlow108 = (fSlow99 + fSlow107); - double fSlow109 = (3.0 * (fSlow108 * fSlow14)); - double fSlow110 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow108)) + -1.0) * fSlow24)); - double fSlow111 = (0.81649658092772592 * fSlow84); - double fSlow112 = (fSlow99 + fSlow111); - double fSlow113 = (3.0 * (fSlow112 * fSlow14)); - double fSlow114 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow112)) + -1.0) * fSlow24)); - double fSlow115 = (fSlow98 - fSlow99); - double fSlow116 = (3.0 * (fSlow115 * fSlow14)); - double fSlow117 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow115)) + -1.0) * fSlow24)); - double fSlow118 = (fSlow103 - fSlow99); - double fSlow119 = (3.0 * (fSlow118 * fSlow14)); - double fSlow120 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow118)) + -1.0) * fSlow24)); - double fSlow121 = (fSlow107 - fSlow99); - double fSlow122 = (3.0 * (fSlow121 * fSlow14)); - double fSlow123 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow121)) + -1.0) * fSlow24)); - double fSlow124 = (fSlow111 - fSlow99); - double fSlow125 = (3.0 * (fSlow124 * fSlow14)); - double fSlow126 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow124)) + -1.0) * fSlow24)); + double fSlow6 = (1.0 - double(fCheckbox2)); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = (3.0 * (fSlow6 * fSlow8)); + double fSlow10 = (fConst3 / fSlow1); + double fSlow11 = (fSlow10 + 1.0); + double fSlow12 = (fConst2 / (fSlow11 * fSlow1)); + double fSlow13 = (fConst3 / fSlow3); + double fSlow14 = (1.0 / (fSlow13 + 1.0)); + double fSlow15 = (((fSlow11 * fSlow0) * fSlow3) / fSlow1); + double fSlow16 = (fConst2 / fSlow3); + double fSlow17 = (fSlow2 * fSlow3); + double fSlow18 = (1.0 - double(fCheckbox3)); + double fSlow19 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow8)) + -1.0) * fSlow18)); + double fSlow20 = mydsp_faustpower2_f(fSlow10); + double fSlow21 = (((fConst4 / fSlow1) + (3.0 * fSlow20)) + 1.0); + double fSlow22 = (1.0 / fSlow21); + double fSlow23 = (12.0 * fSlow20); + double fSlow24 = ((fConst5 / fSlow1) + fSlow23); + double fSlow25 = mydsp_faustpower2_f(fSlow13); + double fSlow26 = (1.0 / (((fConst4 / fSlow3) + (3.0 * fSlow25)) + 1.0)); + double fSlow27 = (((fSlow21 * fSlow0) * fSlow3) / fSlow1); + double fSlow28 = (12.0 * fSlow25); + double fSlow29 = (fSlow28 + (fConst5 / fSlow3)); + double fSlow30 = double(fHslider3); + double fSlow31 = cos(fSlow30); + double fSlow32 = cos(fSlow7); + double fSlow33 = (3.0 * ((fSlow31 * fSlow6) * fSlow32)); + double fSlow34 = mydsp_faustpower2_f(fSlow32); + double fSlow35 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow31) * fSlow34)) + -1.0) * fSlow18)); + double fSlow36 = cos((fSlow30 + -1.5707963267948966)); + double fSlow37 = (3.0 * ((fSlow36 * fSlow6) * fSlow32)); + double fSlow38 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow36) * fSlow34)) + -1.0) * fSlow18)); + double fSlow39 = cos((fSlow30 + -3.1415926535897931)); + double fSlow40 = (3.0 * ((fSlow39 * fSlow6) * fSlow32)); + double fSlow41 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow39) * fSlow34)) + -1.0) * fSlow18)); + double fSlow42 = cos((fSlow30 + -4.7123889803846897)); + double fSlow43 = (3.0 * ((fSlow42 * fSlow6) * fSlow32)); + double fSlow44 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow42) * fSlow34)) + -1.0) * fSlow18)); + double fSlow45 = (fSlow31 * fSlow32); + double fSlow46 = ((6.123233995736766e-17 * fSlow45) - fSlow8); + double fSlow47 = (3.0 * (fSlow46 * fSlow6)); + double fSlow48 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow46)) + -1.0) * fSlow18)); + double fSlow49 = (0.70710678118654757 * fSlow45); + double fSlow50 = (0.70710678118654746 * fSlow8); + double fSlow51 = (fSlow49 + fSlow50); + double fSlow52 = (3.0 * (fSlow51 * fSlow6)); + double fSlow53 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow51)) + -1.0) * fSlow18)); + double fSlow54 = (0.70710678118654757 * (fSlow36 * fSlow32)); + double fSlow55 = (fSlow50 + fSlow54); + double fSlow56 = (3.0 * (fSlow55 * fSlow6)); + double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow55)) + -1.0) * fSlow18)); + double fSlow58 = (0.70710678118654757 * (fSlow39 * fSlow32)); + double fSlow59 = (fSlow50 + fSlow58); + double fSlow60 = (3.0 * (fSlow59 * fSlow6)); + double fSlow61 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow59)) + -1.0) * fSlow18)); + double fSlow62 = (0.70710678118654757 * (fSlow42 * fSlow32)); + double fSlow63 = (fSlow50 + fSlow62); + double fSlow64 = (3.0 * (fSlow63 * fSlow6)); + double fSlow65 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow63)) + -1.0) * fSlow18)); + double fSlow66 = cos((fSlow30 + -0.78539816339744828)); + double fSlow67 = (3.0 * ((fSlow66 * fSlow6) * fSlow32)); + double fSlow68 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow66) * fSlow34)) + -1.0) * fSlow18)); + double fSlow69 = cos((fSlow30 + -2.3561944901923448)); + double fSlow70 = (3.0 * ((fSlow69 * fSlow6) * fSlow32)); + double fSlow71 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow69) * fSlow34)) + -1.0) * fSlow18)); + double fSlow72 = cos((fSlow30 + -3.9269908169872414)); + double fSlow73 = (3.0 * ((fSlow72 * fSlow6) * fSlow32)); + double fSlow74 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow72) * fSlow34)) + -1.0) * fSlow18)); + double fSlow75 = cos((fSlow30 + -5.497787143782138)); + double fSlow76 = (3.0 * ((fSlow75 * fSlow6) * fSlow32)); + double fSlow77 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow75) * fSlow34)) + -1.0) * fSlow18)); + double fSlow78 = (fSlow49 - fSlow50); + double fSlow79 = (3.0 * (fSlow78 * fSlow6)); + double fSlow80 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow78)) + -1.0) * fSlow18)); + double fSlow81 = (fSlow54 - fSlow50); + double fSlow82 = (3.0 * (fSlow81 * fSlow6)); + double fSlow83 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow81)) + -1.0) * fSlow18)); + double fSlow84 = (fSlow58 - fSlow50); + double fSlow85 = (3.0 * (fSlow84 * fSlow6)); + double fSlow86 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow84)) + -1.0) * fSlow18)); + double fSlow87 = (fSlow62 - fSlow50); + double fSlow88 = (3.0 * (fSlow87 * fSlow6)); + double fSlow89 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow87)) + -1.0) * fSlow18)); + double fSlow90 = (0.81649658092772592 * (fSlow66 * fSlow32)); + double fSlow91 = (0.57735026918962584 * fSlow8); + double fSlow92 = (fSlow90 + fSlow91); + double fSlow93 = (3.0 * (fSlow92 * fSlow6)); + double fSlow94 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow92)) + -1.0) * fSlow18)); + double fSlow95 = (0.81649658092772592 * (fSlow69 * fSlow32)); + double fSlow96 = (fSlow91 + fSlow95); + double fSlow97 = (3.0 * (fSlow96 * fSlow6)); + double fSlow98 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow96)) + -1.0) * fSlow18)); + double fSlow99 = (0.81649658092772592 * (fSlow72 * fSlow32)); + double fSlow100 = (fSlow91 + fSlow99); + double fSlow101 = (3.0 * (fSlow100 * fSlow6)); + double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow100)) + -1.0) * fSlow18)); + double fSlow103 = (0.81649658092772592 * (fSlow75 * fSlow32)); + double fSlow104 = (fSlow91 + fSlow103); + double fSlow105 = (3.0 * (fSlow104 * fSlow6)); + double fSlow106 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow104)) + -1.0) * fSlow18)); + double fSlow107 = (fSlow90 - fSlow91); + double fSlow108 = (3.0 * (fSlow107 * fSlow6)); + double fSlow109 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow107)) + -1.0) * fSlow18)); + double fSlow110 = (fSlow95 - fSlow91); + double fSlow111 = (3.0 * (fSlow110 * fSlow6)); + double fSlow112 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow110)) + -1.0) * fSlow18)); + double fSlow113 = (fSlow99 - fSlow91); + double fSlow114 = (3.0 * (fSlow113 * fSlow6)); + double fSlow115 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow113)) + -1.0) * fSlow18)); + double fSlow116 = (fSlow103 - fSlow91); + double fSlow117 = (3.0 * (fSlow116 * fSlow6)); + double fSlow118 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow116)) + -1.0) * fSlow18)); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); double fTemp0 = (fRec1[0] * double(input0[i])); double fTemp1 = (fSlow4 * fTemp0); fRec4[0] = (fRec4[1] + fRec3[1]); - fRec3[0] = (fSlow20 * ((fSlow21 * fTemp0) - (fSlow22 * fRec4[0]))); + fRec3[0] = (fSlow14 * ((fSlow15 * fTemp0) - (fSlow16 * fRec4[0]))); fRec2[0] = (fRec3[0] + fRec2[1]); - double fTemp2 = (fSlow23 * fTemp0); + double fTemp2 = (fSlow17 * fTemp0); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow20 * (fTemp2 - (fSlow22 * fRec6[0]))); - double fTemp3 = ((fSlow18 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + fRec5[0] = (fSlow14 * (fTemp2 - (fSlow16 * fRec6[0]))); + double fTemp3 = ((fSlow12 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); fRec9[0] = (fRec9[1] + fRec8[1]); fRec10[0] = (fRec10[1] + fRec9[1]); - fRec8[0] = (fSlow32 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec9[0]) + (fSlow34 * fRec10[0])))); + fRec8[0] = (fSlow26 * ((fSlow27 * fTemp0) - ((fSlow29 * fRec9[0]) + (fSlow28 * fRec10[0])))); fRec7[0] = (fRec8[0] + fRec7[1]); double fTemp4 = (fRec7[0] - fRec8[0]); fVec0[0] = fTemp4; fRec11[0] = (fRec11[1] + fVec0[1]); fRec13[0] = (fRec13[1] + fRec12[1]); fRec14[0] = (fRec14[1] + fRec13[1]); - fRec12[0] = (fSlow32 * (fTemp2 - ((fSlow35 * fRec13[0]) + (fSlow34 * fRec14[0])))); - double fTemp5 = ((fSlow28 * ((fSlow30 * fTemp4) + (fSlow29 * fRec11[0]))) + (fRec8[0] + fRec12[0])); - double fTemp6 = (0.047619047619047623 * ((fTemp1 + (fSlow15 * fTemp3)) + (fSlow25 * fTemp5))); + fRec12[0] = (fSlow26 * (fTemp2 - ((fSlow29 * fRec13[0]) + (fSlow28 * fRec14[0])))); + double fTemp5 = ((fSlow22 * ((fSlow24 * fTemp4) + (fSlow23 * fRec11[0]))) + (fRec8[0] + fRec12[0])); + double fTemp6 = (0.047619047619047623 * ((fTemp1 + (fSlow9 * fTemp3)) + (fSlow19 * fTemp5))); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp6); - double fTemp7 = (0.047619047619047623 * ((fTemp1 + (fSlow36 * fTemp3)) + (fSlow37 * fTemp5))); + double fTemp7 = (0.047619047619047623 * ((fTemp1 + (fSlow33 * fTemp3)) + (fSlow35 * fTemp5))); fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph1 = FAUSTFLOAT(fRec15[0]); output1[i] = FAUSTFLOAT(fTemp7); - double fTemp8 = (0.047619047619047623 * ((fTemp1 + (fSlow39 * fTemp3)) + (fSlow41 * fTemp5))); + double fTemp8 = (0.047619047619047623 * ((fTemp1 + (fSlow37 * fTemp3)) + (fSlow38 * fTemp5))); fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph2 = FAUSTFLOAT(fRec16[0]); output2[i] = FAUSTFLOAT(fTemp8); - double fTemp9 = (0.047619047619047623 * ((fTemp1 + (fSlow43 * fTemp3)) + (fSlow45 * fTemp5))); + double fTemp9 = (0.047619047619047623 * ((fTemp1 + (fSlow40 * fTemp3)) + (fSlow41 * fTemp5))); fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph3 = FAUSTFLOAT(fRec17[0]); output3[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (0.047619047619047623 * ((fTemp1 + (fSlow47 * fTemp3)) + (fSlow49 * fTemp5))); + double fTemp10 = (0.047619047619047623 * ((fTemp1 + (fSlow43 * fTemp3)) + (fSlow44 * fTemp5))); fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph4 = FAUSTFLOAT(fRec18[0]); output4[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (0.047619047619047623 * ((fTemp1 + (fSlow51 * fTemp3)) + (fSlow52 * fTemp5))); + double fTemp11 = (0.047619047619047623 * ((fTemp1 + (fSlow47 * fTemp3)) + (fSlow48 * fTemp5))); fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph5 = FAUSTFLOAT(fRec19[0]); output5[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.038095238095238099 * ((fTemp1 + (fSlow56 * fTemp3)) + (fSlow57 * fTemp5))); + double fTemp12 = (0.038095238095238099 * ((fTemp1 + (fSlow52 * fTemp3)) + (fSlow53 * fTemp5))); fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph6 = FAUSTFLOAT(fRec20[0]); output6[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (0.038095238095238099 * ((fTemp1 + (fSlow60 * fTemp3)) + (fSlow61 * fTemp5))); + double fTemp13 = (0.038095238095238099 * ((fTemp1 + (fSlow56 * fTemp3)) + (fSlow57 * fTemp5))); fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph7 = FAUSTFLOAT(fRec21[0]); output7[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = (0.038095238095238099 * ((fTemp1 + (fSlow64 * fTemp3)) + (fSlow65 * fTemp5))); + double fTemp14 = (0.038095238095238099 * ((fTemp1 + (fSlow60 * fTemp3)) + (fSlow61 * fTemp5))); fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph8 = FAUSTFLOAT(fRec22[0]); output8[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (0.038095238095238099 * ((fTemp1 + (fSlow68 * fTemp3)) + (fSlow69 * fTemp5))); + double fTemp15 = (0.038095238095238099 * ((fTemp1 + (fSlow64 * fTemp3)) + (fSlow65 * fTemp5))); fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph9 = FAUSTFLOAT(fRec23[0]); output9[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (0.038095238095238099 * ((fTemp1 + (fSlow71 * fTemp3)) + (fSlow73 * fTemp5))); + double fTemp16 = (0.038095238095238099 * ((fTemp1 + (fSlow67 * fTemp3)) + (fSlow68 * fTemp5))); fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph10 = FAUSTFLOAT(fRec24[0]); output10[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (0.038095238095238099 * ((fTemp1 + (fSlow75 * fTemp3)) + (fSlow77 * fTemp5))); + double fTemp17 = (0.038095238095238099 * ((fTemp1 + (fSlow70 * fTemp3)) + (fSlow71 * fTemp5))); fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph11 = FAUSTFLOAT(fRec25[0]); output11[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.038095238095238099 * ((fTemp1 + (fSlow79 * fTemp3)) + (fSlow81 * fTemp5))); + double fTemp18 = (0.038095238095238099 * ((fTemp1 + (fSlow73 * fTemp3)) + (fSlow74 * fTemp5))); fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph12 = FAUSTFLOAT(fRec26[0]); output12[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.038095238095238099 * ((fTemp1 + (fSlow83 * fTemp3)) + (fSlow85 * fTemp5))); + double fTemp19 = (0.038095238095238099 * ((fTemp1 + (fSlow76 * fTemp3)) + (fSlow77 * fTemp5))); fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph13 = FAUSTFLOAT(fRec27[0]); output13[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (0.038095238095238099 * ((fTemp1 + (fSlow87 * fTemp3)) + (fSlow88 * fTemp5))); + double fTemp20 = (0.038095238095238099 * ((fTemp1 + (fSlow79 * fTemp3)) + (fSlow80 * fTemp5))); fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph14 = FAUSTFLOAT(fRec28[0]); output14[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (0.038095238095238099 * ((fTemp1 + (fSlow90 * fTemp3)) + (fSlow91 * fTemp5))); + double fTemp21 = (0.038095238095238099 * ((fTemp1 + (fSlow82 * fTemp3)) + (fSlow83 * fTemp5))); fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph15 = FAUSTFLOAT(fRec29[0]); output15[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (0.038095238095238099 * ((fTemp1 + (fSlow93 * fTemp3)) + (fSlow94 * fTemp5))); + double fTemp22 = (0.038095238095238099 * ((fTemp1 + (fSlow85 * fTemp3)) + (fSlow86 * fTemp5))); fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph16 = FAUSTFLOAT(fRec30[0]); output16[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (0.038095238095238099 * ((fTemp1 + (fSlow96 * fTemp3)) + (fSlow97 * fTemp5))); + double fTemp23 = (0.038095238095238099 * ((fTemp1 + (fSlow88 * fTemp3)) + (fSlow89 * fTemp5))); fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph17 = FAUSTFLOAT(fRec31[0]); output17[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.03214285714285714 * ((fTemp1 + (fSlow101 * fTemp3)) + (fSlow102 * fTemp5))); + double fTemp24 = (0.03214285714285714 * ((fTemp1 + (fSlow93 * fTemp3)) + (fSlow94 * fTemp5))); fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph18 = FAUSTFLOAT(fRec32[0]); output18[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (0.03214285714285714 * ((fTemp1 + (fSlow105 * fTemp3)) + (fSlow106 * fTemp5))); + double fTemp25 = (0.03214285714285714 * ((fTemp1 + (fSlow97 * fTemp3)) + (fSlow98 * fTemp5))); fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph19 = FAUSTFLOAT(fRec33[0]); output19[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (0.03214285714285714 * ((fTemp1 + (fSlow109 * fTemp3)) + (fSlow110 * fTemp5))); + double fTemp26 = (0.03214285714285714 * ((fTemp1 + (fSlow101 * fTemp3)) + (fSlow102 * fTemp5))); fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph20 = FAUSTFLOAT(fRec34[0]); output20[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (0.03214285714285714 * ((fTemp1 + (fSlow113 * fTemp3)) + (fSlow114 * fTemp5))); + double fTemp27 = (0.03214285714285714 * ((fTemp1 + (fSlow105 * fTemp3)) + (fSlow106 * fTemp5))); fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph21 = FAUSTFLOAT(fRec35[0]); output21[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (0.03214285714285714 * ((fTemp1 + (fSlow116 * fTemp3)) + (fSlow117 * fTemp5))); + double fTemp28 = (0.03214285714285714 * ((fTemp1 + (fSlow108 * fTemp3)) + (fSlow109 * fTemp5))); fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph22 = FAUSTFLOAT(fRec36[0]); output22[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (0.03214285714285714 * ((fTemp1 + (fSlow119 * fTemp3)) + (fSlow120 * fTemp5))); + double fTemp29 = (0.03214285714285714 * ((fTemp1 + (fSlow111 * fTemp3)) + (fSlow112 * fTemp5))); fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph23 = FAUSTFLOAT(fRec37[0]); output23[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.03214285714285714 * ((fTemp1 + (fSlow122 * fTemp3)) + (fSlow123 * fTemp5))); + double fTemp30 = (0.03214285714285714 * ((fTemp1 + (fSlow114 * fTemp3)) + (fSlow115 * fTemp5))); fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph24 = FAUSTFLOAT(fRec38[0]); output24[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.03214285714285714 * ((fTemp1 + (fSlow125 * fTemp3)) + (fSlow126 * fTemp5))); + double fTemp31 = (0.03214285714285714 * ((fTemp1 + (fSlow117 * fTemp3)) + (fSlow118 * fTemp5))); fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph25 = FAUSTFLOAT(fRec39[0]); output25[i] = FAUSTFLOAT(fTemp31); @@ -1598,7 +1604,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1830,7 +1835,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -1893,7 +1898,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -1922,11 +1927,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAPanLebedev263.cpp b/source/HOAUGens/HOAPanLebedev263.cpp index b561b7b3a4..565ed4fc87 100644 --- a/source/HOAUGens/HOAPanLebedev263.cpp +++ b/source/HOAUGens/HOAPanLebedev263.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev263" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,27 +613,23 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double cos(double dummy0); -double sin(double dummy0); -double pow(double dummy0, double dummy1); double mydsp_faustpower2_f(double value) { return (value * value); -} -double fabs(double dummy0); -double log10(double dummy0); -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -629,14 +639,13 @@ class mydsp : public dsp { double fConst0; double fConst1; FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; FAUSTFLOAT fCheckbox0; double fConst2; double fConst3; - FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider1; FAUSTFLOAT fEntry0; FAUSTFLOAT fCheckbox1; - FAUSTFLOAT fHslider3; + FAUSTFLOAT fHslider2; double fRec3[2]; double fRec4[2]; double fRec2[2]; @@ -677,6 +686,7 @@ class mydsp : public dsp { double fRec25[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec28[2]; FAUSTFLOAT fVbargraph1; double fRec29[2]; @@ -735,36 +745,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev263"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -914,7 +924,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -929,15 +939,15 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.0); - fHslider1 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(2.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); - fHslider3 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); fCheckbox2 = FAUSTFLOAT(0.0); fCheckbox3 = FAUSTFLOAT(0.0); fCheckbox4 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -1178,30 +1188,30 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAPanLebedev263"); ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fHslider3, "0+1", ""); - ui_interface->declare(&fHslider3, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider3, 0.0, -30.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider2, "0+2", ""); - ui_interface->declare(&fHslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider2, "0+1", ""); + ui_interface->declare(&fHslider2, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider2, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider0, "0+3", ""); - ui_interface->declare(&fHslider0, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+4", ""); - ui_interface->declare(&fHslider1, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider2, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+4", ""); + ui_interface->declare(&fHslider0, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox1); @@ -1219,134 +1229,134 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("Outputs"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x353e620", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2577290", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3546d40", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2581580", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35501f0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2589b90", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3559780", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2592280", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3562df0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x259aa50", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x356ab10", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25a2ac0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3573660", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25ab5b0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x357b930", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25b3820", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3583ce0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25bbb70", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x358c180", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25c3fa0", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3595d30", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25cccb0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x359f9c0", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25d5aa0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35a9730", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25de970", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35b3580", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25e7920", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35bba80", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25efdc0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35c4060", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25f8340", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35cc720", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x26009a0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35d4ec0", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x26090e0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35de490", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2612650", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35e71e0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x261b340", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35f0010", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2624110", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35f8f20", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x262cfc0", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3601b20", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2635b60", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x360a800", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x263e7e0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36135c0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2647540", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x361c460", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2650380", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1382,315 +1392,312 @@ class mydsp : public dsp { FAUSTFLOAT* output24 = outputs[24]; FAUSTFLOAT* output25 = outputs[25]; double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fHslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (6.123233995736766e-17 * fSlow4); - double fSlow6 = sin(fSlow2); - double fSlow7 = (fSlow5 + fSlow6); - double fSlow8 = (1.0 - double(fCheckbox0)); - double fSlow9 = (3.0 * fSlow8); - double fSlow10 = double(fHslider2); - double fSlow11 = (fConst3 / fSlow10); - double fSlow12 = (fSlow11 + 1.0); - double fSlow13 = (fConst2 / (fSlow12 * fSlow10)); - double fSlow14 = double(fEntry0); - double fSlow15 = (fConst3 / fSlow14); - double fSlow16 = (1.0 / (fSlow15 + 1.0)); - double fSlow17 = double(fCheckbox1); - double fSlow18 = (((fSlow12 * fSlow17) * fSlow14) / fSlow10); - double fSlow19 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider3)))); - double fSlow20 = (fConst2 / fSlow14); - double fSlow21 = (1.0 - fSlow17); - double fSlow22 = (fSlow21 * fSlow14); - double fSlow23 = mydsp_faustpower2_f(fSlow7); - double fSlow24 = (1.0 - double(fCheckbox2)); - double fSlow25 = (3.5 * (((5.0 * fSlow23) + -3.0) * fSlow24)); - double fSlow26 = ((fConst5 / fSlow10) + 1.0); - double fSlow27 = (fConst4 / (fSlow26 * fSlow10)); - double fSlow28 = (1.0 / ((fConst5 / fSlow14) + 1.0)); - double fSlow29 = mydsp_faustpower2_f(fSlow15); - double fSlow30 = (1.0 / (((fConst6 / fSlow14) + (6.4594326934833797 * fSlow29)) + 1.0)); - double fSlow31 = mydsp_faustpower2_f(fSlow11); - double fSlow32 = (((fConst6 / fSlow10) + (6.4594326934833797 * fSlow31)) + 1.0); - double fSlow33 = (((fSlow32 * fSlow17) * fSlow14) / fSlow10); - double fSlow34 = (25.837730773933519 * fSlow29); - double fSlow35 = (fSlow34 + (fConst7 / fSlow14)); - double fSlow36 = (1.0 / fSlow32); - double fSlow37 = (25.837730773933519 * fSlow31); - double fSlow38 = ((fConst7 / fSlow10) + fSlow37); - double fSlow39 = (fConst4 / fSlow14); - double fSlow40 = ((((fSlow17 / fSlow10) + fSlow21) * fSlow14) * (1.0 - double(fCheckbox3))); - double fSlow41 = (1.0 - double(fCheckbox4)); - double fSlow42 = (2.5 * (((3.0 * fSlow23) + -1.0) * fSlow41)); - double fSlow43 = (((fConst8 / fSlow10) + (3.0 * fSlow31)) + 1.0); - double fSlow44 = (1.0 / fSlow43); - double fSlow45 = (12.0 * fSlow31); - double fSlow46 = ((fConst9 / fSlow10) + fSlow45); - double fSlow47 = (1.0 / (((fConst8 / fSlow14) + (3.0 * fSlow29)) + 1.0)); - double fSlow48 = (((fSlow43 * fSlow17) * fSlow14) / fSlow10); - double fSlow49 = (12.0 * fSlow29); - double fSlow50 = (fSlow49 + (fConst9 / fSlow14)); - double fSlow51 = (3.0 * ((fSlow1 * fSlow8) * fSlow3)); - double fSlow52 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow4)) + -1.0) * fSlow41)); - double fSlow53 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow4)) - (3.0 * fSlow4)) * fSlow24)); - double fSlow54 = cos((fSlow0 + -1.5707963267948966)); - double fSlow55 = (3.0 * ((fSlow54 * fSlow8) * fSlow3)); - double fSlow56 = (fSlow54 * fSlow3); - double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow56)) + -1.0) * fSlow41)); - double fSlow58 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow56)) - (3.0 * fSlow56)) * fSlow24)); - double fSlow59 = cos((fSlow0 + -3.1415926535897931)); - double fSlow60 = (3.0 * ((fSlow59 * fSlow8) * fSlow3)); - double fSlow61 = (fSlow59 * fSlow3); - double fSlow62 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow61)) + -1.0) * fSlow41)); - double fSlow63 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow61)) - (3.0 * fSlow61)) * fSlow24)); - double fSlow64 = cos((fSlow0 + -4.7123889803846897)); - double fSlow65 = (3.0 * ((fSlow64 * fSlow8) * fSlow3)); - double fSlow66 = (fSlow64 * fSlow3); - double fSlow67 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow66)) + -1.0) * fSlow41)); - double fSlow68 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow66)) - (3.0 * fSlow66)) * fSlow24)); - double fSlow69 = (fSlow5 - fSlow6); - double fSlow70 = mydsp_faustpower2_f(fSlow69); - double fSlow71 = (3.5 * (((5.0 * fSlow70) + -3.0) * fSlow24)); - double fSlow72 = (2.5 * (((3.0 * fSlow70) + -1.0) * fSlow41)); - double fSlow73 = (0.70710678118654757 * fSlow4); - double fSlow74 = (0.70710678118654746 * fSlow6); - double fSlow75 = (fSlow73 + fSlow74); - double fSlow76 = mydsp_faustpower2_f(fSlow75); - double fSlow77 = (3.5 * (((5.0 * fSlow76) + -3.0) * fSlow24)); - double fSlow78 = (2.5 * (((3.0 * fSlow76) + -1.0) * fSlow41)); - double fSlow79 = (0.70710678118654757 * fSlow56); - double fSlow80 = (fSlow74 + fSlow79); - double fSlow81 = mydsp_faustpower2_f(fSlow80); - double fSlow82 = (3.5 * (((5.0 * fSlow81) + -3.0) * fSlow24)); - double fSlow83 = (2.5 * (((3.0 * fSlow81) + -1.0) * fSlow41)); - double fSlow84 = (0.70710678118654757 * fSlow61); - double fSlow85 = (fSlow74 + fSlow84); - double fSlow86 = mydsp_faustpower2_f(fSlow85); - double fSlow87 = (3.5 * (((5.0 * fSlow86) + -3.0) * fSlow24)); - double fSlow88 = (2.5 * (((3.0 * fSlow86) + -1.0) * fSlow41)); - double fSlow89 = (0.70710678118654757 * fSlow66); - double fSlow90 = (fSlow74 + fSlow89); - double fSlow91 = mydsp_faustpower2_f(fSlow90); - double fSlow92 = (3.5 * (((5.0 * fSlow91) + -3.0) * fSlow24)); - double fSlow93 = (2.5 * (((3.0 * fSlow91) + -1.0) * fSlow41)); - double fSlow94 = cos((fSlow0 + -0.78539816339744828)); - double fSlow95 = (3.0 * ((fSlow94 * fSlow8) * fSlow3)); - double fSlow96 = (fSlow94 * fSlow3); - double fSlow97 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow96)) + -1.0) * fSlow41)); - double fSlow98 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow96)) - (3.0 * fSlow96)) * fSlow24)); - double fSlow99 = cos((fSlow0 + -2.3561944901923448)); - double fSlow100 = (3.0 * ((fSlow99 * fSlow8) * fSlow3)); - double fSlow101 = (fSlow99 * fSlow3); - double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow101)) + -1.0) * fSlow41)); - double fSlow103 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow101)) - (3.0 * fSlow101)) * fSlow24)); - double fSlow104 = cos((fSlow0 + -3.9269908169872414)); - double fSlow105 = (3.0 * ((fSlow104 * fSlow8) * fSlow3)); - double fSlow106 = (fSlow104 * fSlow3); - double fSlow107 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow106)) + -1.0) * fSlow41)); - double fSlow108 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow106)) - (3.0 * fSlow106)) * fSlow24)); - double fSlow109 = cos((fSlow0 + -5.497787143782138)); - double fSlow110 = (3.0 * ((fSlow109 * fSlow8) * fSlow3)); - double fSlow111 = (fSlow109 * fSlow3); - double fSlow112 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow111)) + -1.0) * fSlow41)); - double fSlow113 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow111)) - (3.0 * fSlow111)) * fSlow24)); - double fSlow114 = (fSlow73 - fSlow74); - double fSlow115 = mydsp_faustpower2_f(fSlow114); - double fSlow116 = (3.5 * (((5.0 * fSlow115) + -3.0) * fSlow24)); - double fSlow117 = (2.5 * (((3.0 * fSlow115) + -1.0) * fSlow41)); - double fSlow118 = (fSlow79 - fSlow74); - double fSlow119 = mydsp_faustpower2_f(fSlow118); - double fSlow120 = (3.5 * (((5.0 * fSlow119) + -3.0) * fSlow24)); - double fSlow121 = (2.5 * (((3.0 * fSlow119) + -1.0) * fSlow41)); - double fSlow122 = (fSlow84 - fSlow74); - double fSlow123 = mydsp_faustpower2_f(fSlow122); - double fSlow124 = (3.5 * (((5.0 * fSlow123) + -3.0) * fSlow24)); - double fSlow125 = (2.5 * (((3.0 * fSlow123) + -1.0) * fSlow41)); - double fSlow126 = (fSlow89 - fSlow74); - double fSlow127 = mydsp_faustpower2_f(fSlow126); - double fSlow128 = (3.5 * (((5.0 * fSlow127) + -3.0) * fSlow24)); - double fSlow129 = (2.5 * (((3.0 * fSlow127) + -1.0) * fSlow41)); - double fSlow130 = (0.81649658092772592 * fSlow96); - double fSlow131 = (0.57735026918962584 * fSlow6); - double fSlow132 = (fSlow130 + fSlow131); - double fSlow133 = mydsp_faustpower2_f(fSlow132); - double fSlow134 = (3.5 * (((5.0 * fSlow133) + -3.0) * fSlow24)); - double fSlow135 = (2.5 * (((3.0 * fSlow133) + -1.0) * fSlow41)); - double fSlow136 = (0.81649658092772592 * fSlow101); - double fSlow137 = (fSlow131 + fSlow136); - double fSlow138 = mydsp_faustpower2_f(fSlow137); - double fSlow139 = (3.5 * (((5.0 * fSlow138) + -3.0) * fSlow24)); - double fSlow140 = (2.5 * (((3.0 * fSlow138) + -1.0) * fSlow41)); - double fSlow141 = (0.81649658092772592 * fSlow106); - double fSlow142 = (fSlow131 + fSlow141); - double fSlow143 = mydsp_faustpower2_f(fSlow142); - double fSlow144 = (3.5 * (((5.0 * fSlow143) + -3.0) * fSlow24)); - double fSlow145 = (2.5 * (((3.0 * fSlow143) + -1.0) * fSlow41)); - double fSlow146 = (0.81649658092772592 * fSlow111); - double fSlow147 = (fSlow131 + fSlow146); - double fSlow148 = mydsp_faustpower2_f(fSlow147); - double fSlow149 = (3.5 * (((5.0 * fSlow148) + -3.0) * fSlow24)); - double fSlow150 = (2.5 * (((3.0 * fSlow148) + -1.0) * fSlow41)); - double fSlow151 = (fSlow130 - fSlow131); - double fSlow152 = mydsp_faustpower2_f(fSlow151); - double fSlow153 = (3.5 * (((5.0 * fSlow152) + -3.0) * fSlow24)); - double fSlow154 = (2.5 * (((3.0 * fSlow152) + -1.0) * fSlow41)); - double fSlow155 = (fSlow136 - fSlow131); - double fSlow156 = mydsp_faustpower2_f(fSlow155); - double fSlow157 = (3.5 * (((5.0 * fSlow156) + -3.0) * fSlow24)); - double fSlow158 = (2.5 * (((3.0 * fSlow156) + -1.0) * fSlow41)); - double fSlow159 = (fSlow141 - fSlow131); - double fSlow160 = mydsp_faustpower2_f(fSlow159); - double fSlow161 = (3.5 * (((5.0 * fSlow160) + -3.0) * fSlow24)); - double fSlow162 = (2.5 * (((3.0 * fSlow160) + -1.0) * fSlow41)); - double fSlow163 = (fSlow146 - fSlow131); - double fSlow164 = mydsp_faustpower2_f(fSlow163); - double fSlow165 = (3.5 * (((5.0 * fSlow164) + -3.0) * fSlow24)); - double fSlow166 = (2.5 * (((3.0 * fSlow164) + -1.0) * fSlow41)); + double fSlow1 = sin(fSlow0); + double fSlow2 = (3.0 * (1.0 - double(fCheckbox0))); + double fSlow3 = double(fHslider1); + double fSlow4 = (fConst3 / fSlow3); + double fSlow5 = (fSlow4 + 1.0); + double fSlow6 = (fConst2 / (fSlow5 * fSlow3)); + double fSlow7 = double(fEntry0); + double fSlow8 = (fConst3 / fSlow7); + double fSlow9 = (1.0 / (fSlow8 + 1.0)); + double fSlow10 = double(fCheckbox1); + double fSlow11 = (((fSlow5 * fSlow10) * fSlow7) / fSlow3); + double fSlow12 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider2)))); + double fSlow13 = (fConst2 / fSlow7); + double fSlow14 = (1.0 - fSlow10); + double fSlow15 = (fSlow14 * fSlow7); + double fSlow16 = ((3.0 * mydsp_faustpower2_f(fSlow1)) + -1.0); + double fSlow17 = (1.0 - double(fCheckbox2)); + double fSlow18 = (2.333333333333333 * (((2.5 * fSlow16) + -2.0) * fSlow17)); + double fSlow19 = ((fConst5 / fSlow3) + 1.0); + double fSlow20 = (fConst4 / (fSlow19 * fSlow3)); + double fSlow21 = (1.0 / ((fConst5 / fSlow7) + 1.0)); + double fSlow22 = mydsp_faustpower2_f(fSlow8); + double fSlow23 = (1.0 / (((fConst6 / fSlow7) + (6.4594326934833797 * fSlow22)) + 1.0)); + double fSlow24 = mydsp_faustpower2_f(fSlow4); + double fSlow25 = (((fConst6 / fSlow3) + (6.4594326934833797 * fSlow24)) + 1.0); + double fSlow26 = (((fSlow25 * fSlow10) * fSlow7) / fSlow3); + double fSlow27 = (25.837730773933519 * fSlow22); + double fSlow28 = (fSlow27 + (fConst7 / fSlow7)); + double fSlow29 = (1.0 / fSlow25); + double fSlow30 = (25.837730773933519 * fSlow24); + double fSlow31 = ((fConst7 / fSlow3) + fSlow30); + double fSlow32 = (fConst4 / fSlow7); + double fSlow33 = ((((fSlow10 / fSlow3) + fSlow14) * fSlow7) * (1.0 - double(fCheckbox3))); + double fSlow34 = (1.0 - double(fCheckbox4)); + double fSlow35 = (2.5 * (fSlow16 * fSlow34)); + double fSlow36 = (((fConst8 / fSlow3) + (3.0 * fSlow24)) + 1.0); + double fSlow37 = (1.0 / fSlow36); + double fSlow38 = (12.0 * fSlow24); + double fSlow39 = ((fConst9 / fSlow3) + fSlow38); + double fSlow40 = (1.0 / (((fConst8 / fSlow7) + (3.0 * fSlow22)) + 1.0)); + double fSlow41 = (((fSlow36 * fSlow10) * fSlow7) / fSlow3); + double fSlow42 = (12.0 * fSlow22); + double fSlow43 = (fSlow42 + (fConst9 / fSlow7)); + double fSlow44 = double(fHslider3); + double fSlow45 = cos(fSlow44); + double fSlow46 = cos(fSlow0); + double fSlow47 = (fSlow45 * fSlow46); + double fSlow48 = mydsp_faustpower2_f(fSlow46); + double fSlow49 = ((3.0 * (mydsp_faustpower2_f(fSlow45) * fSlow48)) + -1.0); + double fSlow50 = (2.333333333333333 * (((2.5 * fSlow49) + -2.0) * fSlow17)); + double fSlow51 = (2.5 * (fSlow49 * fSlow34)); + double fSlow52 = cos((fSlow44 + -1.5707963267948966)); + double fSlow53 = (fSlow52 * fSlow46); + double fSlow54 = ((3.0 * (mydsp_faustpower2_f(fSlow52) * fSlow48)) + -1.0); + double fSlow55 = (2.333333333333333 * (((2.5 * fSlow54) + -2.0) * fSlow17)); + double fSlow56 = (2.5 * (fSlow54 * fSlow34)); + double fSlow57 = cos((fSlow44 + -3.1415926535897931)); + double fSlow58 = (fSlow57 * fSlow46); + double fSlow59 = ((3.0 * (mydsp_faustpower2_f(fSlow57) * fSlow48)) + -1.0); + double fSlow60 = (2.333333333333333 * (((2.5 * fSlow59) + -2.0) * fSlow17)); + double fSlow61 = (2.5 * (fSlow59 * fSlow34)); + double fSlow62 = cos((fSlow44 + -4.7123889803846897)); + double fSlow63 = (fSlow62 * fSlow46); + double fSlow64 = ((3.0 * (mydsp_faustpower2_f(fSlow62) * fSlow48)) + -1.0); + double fSlow65 = (2.333333333333333 * (((2.5 * fSlow64) + -2.0) * fSlow17)); + double fSlow66 = (2.5 * (fSlow64 * fSlow34)); + double fSlow67 = ((6.123233995736766e-17 * fSlow47) - fSlow1); + double fSlow68 = ((3.0 * mydsp_faustpower2_f(fSlow67)) + -1.0); + double fSlow69 = (2.333333333333333 * (((2.5 * fSlow68) + -2.0) * fSlow17)); + double fSlow70 = (2.5 * (fSlow68 * fSlow34)); + double fSlow71 = (0.70710678118654757 * fSlow47); + double fSlow72 = (0.70710678118654746 * fSlow1); + double fSlow73 = (fSlow71 + fSlow72); + double fSlow74 = ((3.0 * mydsp_faustpower2_f(fSlow73)) + -1.0); + double fSlow75 = (2.333333333333333 * (((2.5 * fSlow74) + -2.0) * fSlow17)); + double fSlow76 = (2.5 * (fSlow74 * fSlow34)); + double fSlow77 = (0.70710678118654757 * fSlow53); + double fSlow78 = (fSlow72 + fSlow77); + double fSlow79 = ((3.0 * mydsp_faustpower2_f(fSlow78)) + -1.0); + double fSlow80 = (2.333333333333333 * (((2.5 * fSlow79) + -2.0) * fSlow17)); + double fSlow81 = (2.5 * (fSlow79 * fSlow34)); + double fSlow82 = (0.70710678118654757 * fSlow58); + double fSlow83 = (fSlow72 + fSlow82); + double fSlow84 = ((3.0 * mydsp_faustpower2_f(fSlow83)) + -1.0); + double fSlow85 = (2.333333333333333 * (((2.5 * fSlow84) + -2.0) * fSlow17)); + double fSlow86 = (2.5 * (fSlow84 * fSlow34)); + double fSlow87 = (0.70710678118654757 * fSlow63); + double fSlow88 = (fSlow72 + fSlow87); + double fSlow89 = ((3.0 * mydsp_faustpower2_f(fSlow88)) + -1.0); + double fSlow90 = (2.333333333333333 * (((2.5 * fSlow89) + -2.0) * fSlow17)); + double fSlow91 = (2.5 * (fSlow89 * fSlow34)); + double fSlow92 = cos((fSlow44 + -0.78539816339744828)); + double fSlow93 = (fSlow92 * fSlow46); + double fSlow94 = ((3.0 * (mydsp_faustpower2_f(fSlow92) * fSlow48)) + -1.0); + double fSlow95 = (2.333333333333333 * (((2.5 * fSlow94) + -2.0) * fSlow17)); + double fSlow96 = (2.5 * (fSlow94 * fSlow34)); + double fSlow97 = cos((fSlow44 + -2.3561944901923448)); + double fSlow98 = (fSlow97 * fSlow46); + double fSlow99 = ((3.0 * (mydsp_faustpower2_f(fSlow97) * fSlow48)) + -1.0); + double fSlow100 = (2.333333333333333 * (((2.5 * fSlow99) + -2.0) * fSlow17)); + double fSlow101 = (2.5 * (fSlow99 * fSlow34)); + double fSlow102 = cos((fSlow44 + -3.9269908169872414)); + double fSlow103 = (fSlow102 * fSlow46); + double fSlow104 = ((3.0 * (mydsp_faustpower2_f(fSlow102) * fSlow48)) + -1.0); + double fSlow105 = (2.333333333333333 * (((2.5 * fSlow104) + -2.0) * fSlow17)); + double fSlow106 = (2.5 * (fSlow104 * fSlow34)); + double fSlow107 = cos((fSlow44 + -5.497787143782138)); + double fSlow108 = (fSlow107 * fSlow46); + double fSlow109 = ((3.0 * (mydsp_faustpower2_f(fSlow107) * fSlow48)) + -1.0); + double fSlow110 = (2.333333333333333 * (((2.5 * fSlow109) + -2.0) * fSlow17)); + double fSlow111 = (2.5 * (fSlow109 * fSlow34)); + double fSlow112 = (fSlow71 - fSlow72); + double fSlow113 = ((3.0 * mydsp_faustpower2_f(fSlow112)) + -1.0); + double fSlow114 = (2.333333333333333 * (((2.5 * fSlow113) + -2.0) * fSlow17)); + double fSlow115 = (2.5 * (fSlow113 * fSlow34)); + double fSlow116 = (fSlow77 - fSlow72); + double fSlow117 = ((3.0 * mydsp_faustpower2_f(fSlow116)) + -1.0); + double fSlow118 = (2.333333333333333 * (((2.5 * fSlow117) + -2.0) * fSlow17)); + double fSlow119 = (2.5 * (fSlow117 * fSlow34)); + double fSlow120 = (fSlow82 - fSlow72); + double fSlow121 = ((3.0 * mydsp_faustpower2_f(fSlow120)) + -1.0); + double fSlow122 = (2.333333333333333 * (((2.5 * fSlow121) + -2.0) * fSlow17)); + double fSlow123 = (2.5 * (fSlow121 * fSlow34)); + double fSlow124 = (fSlow87 - fSlow72); + double fSlow125 = ((3.0 * mydsp_faustpower2_f(fSlow124)) + -1.0); + double fSlow126 = (2.333333333333333 * (((2.5 * fSlow125) + -2.0) * fSlow17)); + double fSlow127 = (2.5 * (fSlow125 * fSlow34)); + double fSlow128 = (0.81649658092772592 * fSlow93); + double fSlow129 = (0.57735026918962584 * fSlow1); + double fSlow130 = (fSlow128 + fSlow129); + double fSlow131 = ((3.0 * mydsp_faustpower2_f(fSlow130)) + -1.0); + double fSlow132 = (2.333333333333333 * (((2.5 * fSlow131) + -2.0) * fSlow17)); + double fSlow133 = (2.5 * (fSlow131 * fSlow34)); + double fSlow134 = (0.81649658092772592 * fSlow98); + double fSlow135 = (fSlow129 + fSlow134); + double fSlow136 = ((3.0 * mydsp_faustpower2_f(fSlow135)) + -1.0); + double fSlow137 = (2.333333333333333 * (((2.5 * fSlow136) + -2.0) * fSlow17)); + double fSlow138 = (2.5 * (fSlow136 * fSlow34)); + double fSlow139 = (0.81649658092772592 * fSlow103); + double fSlow140 = (fSlow129 + fSlow139); + double fSlow141 = ((3.0 * mydsp_faustpower2_f(fSlow140)) + -1.0); + double fSlow142 = (2.333333333333333 * (((2.5 * fSlow141) + -2.0) * fSlow17)); + double fSlow143 = (2.5 * (fSlow141 * fSlow34)); + double fSlow144 = (0.81649658092772592 * fSlow108); + double fSlow145 = (fSlow129 + fSlow144); + double fSlow146 = ((3.0 * mydsp_faustpower2_f(fSlow145)) + -1.0); + double fSlow147 = (2.333333333333333 * (((2.5 * fSlow146) + -2.0) * fSlow17)); + double fSlow148 = (2.5 * (fSlow146 * fSlow34)); + double fSlow149 = (fSlow128 - fSlow129); + double fSlow150 = ((3.0 * mydsp_faustpower2_f(fSlow149)) + -1.0); + double fSlow151 = (2.333333333333333 * (((2.5 * fSlow150) + -2.0) * fSlow17)); + double fSlow152 = (2.5 * (fSlow150 * fSlow34)); + double fSlow153 = (fSlow134 - fSlow129); + double fSlow154 = ((3.0 * mydsp_faustpower2_f(fSlow153)) + -1.0); + double fSlow155 = (2.333333333333333 * (((2.5 * fSlow154) + -2.0) * fSlow17)); + double fSlow156 = (2.5 * (fSlow154 * fSlow34)); + double fSlow157 = (fSlow139 - fSlow129); + double fSlow158 = ((3.0 * mydsp_faustpower2_f(fSlow157)) + -1.0); + double fSlow159 = (2.333333333333333 * (((2.5 * fSlow158) + -2.0) * fSlow17)); + double fSlow160 = (2.5 * (fSlow158 * fSlow34)); + double fSlow161 = (fSlow144 - fSlow129); + double fSlow162 = ((3.0 * mydsp_faustpower2_f(fSlow161)) + -1.0); + double fSlow163 = (2.333333333333333 * (((2.5 * fSlow162) + -2.0) * fSlow17)); + double fSlow164 = (2.5 * (fSlow162 * fSlow34)); for (int i = 0; (i < count); i = (i + 1)) { - fRec3[0] = (fSlow19 + (0.999 * fRec3[1])); + fRec3[0] = (fSlow12 + (0.999 * fRec3[1])); double fTemp0 = (fRec3[0] * double(input0[i])); fRec4[0] = (fRec4[1] + fRec2[1]); - fRec2[0] = (fSlow16 * ((fSlow18 * fTemp0) - (fSlow20 * fRec4[0]))); + fRec2[0] = (fSlow9 * ((fSlow11 * fTemp0) - (fSlow13 * fRec4[0]))); fRec1[0] = (fRec2[0] + fRec1[1]); - double fTemp1 = (fSlow22 * fTemp0); + double fTemp1 = (fSlow15 * fTemp0); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow16 * (fTemp1 - (fSlow20 * fRec6[0]))); - double fTemp2 = ((fSlow13 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0])); - double fTemp3 = (fSlow9 * fTemp2); + fRec5[0] = (fSlow9 * (fTemp1 - (fSlow13 * fRec6[0]))); + double fTemp2 = (fSlow2 * ((fSlow6 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0]))); fRec10[0] = (fRec10[1] + fRec9[1]); fRec11[0] = (fRec11[1] + fRec10[1]); - fRec9[0] = (fSlow30 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec10[0]) + (fSlow34 * fRec11[0])))); + fRec9[0] = (fSlow23 * ((fSlow26 * fTemp0) - ((fSlow28 * fRec10[0]) + (fSlow27 * fRec11[0])))); fRec12[0] = (fRec9[0] + fRec12[1]); - double fTemp4 = (fRec12[0] - fRec9[0]); - fVec0[0] = fTemp4; + double fTemp3 = (fRec12[0] - fRec9[0]); + fVec0[0] = fTemp3; fRec13[0] = (fRec13[1] + fVec0[1]); fRec14[0] = (fRec14[1] + fRec8[1]); - fRec8[0] = (fSlow28 * ((fSlow26 * (fRec9[0] + (fSlow36 * ((fSlow38 * fTemp4) + (fSlow37 * fRec13[0]))))) - (fSlow39 * fRec14[0]))); + fRec8[0] = (fSlow21 * ((fSlow19 * (fRec9[0] + (fSlow29 * ((fSlow31 * fTemp3) + (fSlow30 * fRec13[0]))))) - (fSlow32 * fRec14[0]))); fRec7[0] = (fRec8[0] + fRec7[1]); fRec17[0] = (fRec17[1] + fRec16[1]); fRec18[0] = (fRec18[1] + fRec17[1]); - fRec16[0] = (fSlow30 * (fTemp1 - ((fSlow35 * fRec17[0]) + (fSlow34 * fRec18[0])))); + fRec16[0] = (fSlow23 * (fTemp1 - ((fSlow28 * fRec17[0]) + (fSlow27 * fRec18[0])))); fRec19[0] = (fRec19[1] + fRec15[1]); - fRec15[0] = (fSlow28 * (fRec16[0] - (fSlow39 * fRec19[0]))); - double fTemp5 = ((fSlow27 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); - double fTemp6 = (fSlow40 * fTemp0); + fRec15[0] = (fSlow21 * (fRec16[0] - (fSlow32 * fRec19[0]))); + double fTemp4 = ((fSlow20 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); + double fTemp5 = (fSlow33 * fTemp0); fRec22[0] = (fRec22[1] + fRec21[1]); fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow47 * ((fSlow48 * fTemp0) - ((fSlow50 * fRec22[0]) + (fSlow49 * fRec23[0])))); + fRec21[0] = (fSlow40 * ((fSlow41 * fTemp0) - ((fSlow43 * fRec22[0]) + (fSlow42 * fRec23[0])))); fRec20[0] = (fRec21[0] + fRec20[1]); - double fTemp7 = (fRec20[0] - fRec21[0]); - fVec1[0] = fTemp7; + double fTemp6 = (fRec20[0] - fRec21[0]); + fVec1[0] = fTemp6; fRec24[0] = (fRec24[1] + fVec1[1]); fRec26[0] = (fRec26[1] + fRec25[1]); fRec27[0] = (fRec27[1] + fRec26[1]); - fRec25[0] = (fSlow47 * (fTemp1 - ((fSlow50 * fRec26[0]) + (fSlow49 * fRec27[0])))); - double fTemp8 = ((fSlow44 * ((fSlow46 * fTemp7) + (fSlow45 * fRec24[0]))) + (fRec21[0] + fRec25[0])); - double fTemp9 = (0.047619047619047623 * ((fSlow7 * (fTemp3 + (fSlow25 * fTemp5))) + (fTemp6 + (fSlow42 * fTemp8)))); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fRec25[0] = (fSlow40 * (fTemp1 - ((fSlow43 * fRec26[0]) + (fSlow42 * fRec27[0])))); + double fTemp7 = ((fSlow37 * ((fSlow39 * fTemp6) + (fSlow38 * fRec24[0]))) + (fRec21[0] + fRec25[0])); + double fTemp8 = (0.047619047619047623 * ((fSlow1 * (fTemp2 + (fSlow18 * fTemp4))) + (fTemp5 + (fSlow35 * fTemp7)))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (0.047619047619047623 * (((fTemp6 + (fSlow51 * fTemp2)) + (fSlow52 * fTemp8)) + (fSlow53 * fTemp5))); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + output0[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (0.047619047619047623 * ((fSlow47 * (fTemp2 + (fSlow50 * fTemp4))) + (fTemp5 + (fSlow51 * fTemp7)))); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph1 = FAUSTFLOAT(fRec28[0]); - output1[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (0.047619047619047623 * (((fTemp6 + (fSlow55 * fTemp2)) + (fSlow57 * fTemp8)) + (fSlow58 * fTemp5))); - fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + output1[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (0.047619047619047623 * ((fSlow53 * (fTemp2 + (fSlow55 * fTemp4))) + (fTemp5 + (fSlow56 * fTemp7)))); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph2 = FAUSTFLOAT(fRec29[0]); - output2[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.047619047619047623 * (((fTemp6 + (fSlow60 * fTemp2)) + (fSlow62 * fTemp8)) + (fSlow63 * fTemp5))); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + output2[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (0.047619047619047623 * ((fSlow58 * (fTemp2 + (fSlow60 * fTemp4))) + (fTemp5 + (fSlow61 * fTemp7)))); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph3 = FAUSTFLOAT(fRec30[0]); - output3[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (0.047619047619047623 * (((fTemp6 + (fSlow65 * fTemp2)) + (fSlow67 * fTemp8)) + (fSlow68 * fTemp5))); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + output3[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.047619047619047623 * ((fSlow63 * (fTemp2 + (fSlow65 * fTemp4))) + (fTemp5 + (fSlow66 * fTemp7)))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph4 = FAUSTFLOAT(fRec31[0]); - output4[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = (0.047619047619047623 * ((fSlow69 * (fTemp3 + (fSlow71 * fTemp5))) + (fTemp6 + (fSlow72 * fTemp8)))); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + output4[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.047619047619047623 * ((fSlow67 * (fTemp2 + (fSlow69 * fTemp4))) + (fTemp5 + (fSlow70 * fTemp7)))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph5 = FAUSTFLOAT(fRec32[0]); - output5[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (0.038095238095238099 * ((fSlow75 * (fTemp3 + (fSlow77 * fTemp5))) + (fTemp6 + (fSlow78 * fTemp8)))); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + output5[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.038095238095238099 * ((fSlow73 * (fTemp2 + (fSlow75 * fTemp4))) + (fTemp5 + (fSlow76 * fTemp7)))); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph6 = FAUSTFLOAT(fRec33[0]); - output6[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (0.038095238095238099 * ((fSlow80 * (fTemp3 + (fSlow82 * fTemp5))) + (fTemp6 + (fSlow83 * fTemp8)))); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + output6[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.038095238095238099 * ((fSlow78 * (fTemp2 + (fSlow80 * fTemp4))) + (fTemp5 + (fSlow81 * fTemp7)))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph7 = FAUSTFLOAT(fRec34[0]); - output7[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (0.038095238095238099 * ((fSlow85 * (fTemp3 + (fSlow87 * fTemp5))) + (fTemp6 + (fSlow88 * fTemp8)))); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + output7[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.038095238095238099 * ((fSlow83 * (fTemp2 + (fSlow85 * fTemp4))) + (fTemp5 + (fSlow86 * fTemp7)))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph8 = FAUSTFLOAT(fRec35[0]); - output8[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.038095238095238099 * ((fSlow90 * (fTemp3 + (fSlow92 * fTemp5))) + (fTemp6 + (fSlow93 * fTemp8)))); - fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.038095238095238099 * ((fSlow88 * (fTemp2 + (fSlow90 * fTemp4))) + (fTemp5 + (fSlow91 * fTemp7)))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph9 = FAUSTFLOAT(fRec36[0]); - output9[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.038095238095238099 * (((fTemp6 + (fSlow95 * fTemp2)) + (fSlow97 * fTemp8)) + (fSlow98 * fTemp5))); - fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + output9[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.038095238095238099 * ((fSlow93 * (fTemp2 + (fSlow95 * fTemp4))) + (fTemp5 + (fSlow96 * fTemp7)))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph10 = FAUSTFLOAT(fRec37[0]); - output10[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (0.038095238095238099 * (((fTemp6 + (fSlow100 * fTemp2)) + (fSlow102 * fTemp8)) + (fSlow103 * fTemp5))); - fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + output10[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.038095238095238099 * ((fSlow98 * (fTemp2 + (fSlow100 * fTemp4))) + (fTemp5 + (fSlow101 * fTemp7)))); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph11 = FAUSTFLOAT(fRec38[0]); - output11[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (0.038095238095238099 * (((fTemp6 + (fSlow105 * fTemp2)) + (fSlow107 * fTemp8)) + (fSlow108 * fTemp5))); - fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + output11[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.038095238095238099 * ((fSlow103 * (fTemp2 + (fSlow105 * fTemp4))) + (fTemp5 + (fSlow106 * fTemp7)))); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph12 = FAUSTFLOAT(fRec39[0]); - output12[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (0.038095238095238099 * (((fTemp6 + (fSlow110 * fTemp2)) + (fSlow112 * fTemp8)) + (fSlow113 * fTemp5))); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + output12[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.038095238095238099 * ((fSlow108 * (fTemp2 + (fSlow110 * fTemp4))) + (fTemp5 + (fSlow111 * fTemp7)))); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph13 = FAUSTFLOAT(fRec40[0]); - output13[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (0.038095238095238099 * ((fSlow114 * (fTemp3 + (fSlow116 * fTemp5))) + (fTemp6 + (fSlow117 * fTemp8)))); - fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + output13[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.038095238095238099 * ((fSlow112 * (fTemp2 + (fSlow114 * fTemp4))) + (fTemp5 + (fSlow115 * fTemp7)))); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph14 = FAUSTFLOAT(fRec41[0]); - output14[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.038095238095238099 * ((fSlow118 * (fTemp3 + (fSlow120 * fTemp5))) + (fTemp6 + (fSlow121 * fTemp8)))); - fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + output14[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.038095238095238099 * ((fSlow116 * (fTemp2 + (fSlow118 * fTemp4))) + (fTemp5 + (fSlow119 * fTemp7)))); + fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph15 = FAUSTFLOAT(fRec42[0]); - output15[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (0.038095238095238099 * ((fSlow122 * (fTemp3 + (fSlow124 * fTemp5))) + (fTemp6 + (fSlow125 * fTemp8)))); - fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + output15[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.038095238095238099 * ((fSlow120 * (fTemp2 + (fSlow122 * fTemp4))) + (fTemp5 + (fSlow123 * fTemp7)))); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph16 = FAUSTFLOAT(fRec43[0]); - output16[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (0.038095238095238099 * ((fSlow126 * (fTemp3 + (fSlow128 * fTemp5))) + (fTemp6 + (fSlow129 * fTemp8)))); - fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + output16[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.038095238095238099 * ((fSlow124 * (fTemp2 + (fSlow126 * fTemp4))) + (fTemp5 + (fSlow127 * fTemp7)))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph17 = FAUSTFLOAT(fRec44[0]); - output17[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (0.03214285714285714 * ((fSlow132 * (fTemp3 + (fSlow134 * fTemp5))) + (fTemp6 + (fSlow135 * fTemp8)))); - fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + output17[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.03214285714285714 * ((fSlow130 * (fTemp2 + (fSlow132 * fTemp4))) + (fTemp5 + (fSlow133 * fTemp7)))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph18 = FAUSTFLOAT(fRec45[0]); - output18[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (0.03214285714285714 * ((fSlow137 * (fTemp3 + (fSlow139 * fTemp5))) + (fTemp6 + (fSlow140 * fTemp8)))); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + output18[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.03214285714285714 * ((fSlow135 * (fTemp2 + (fSlow137 * fTemp4))) + (fTemp5 + (fSlow138 * fTemp7)))); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph19 = FAUSTFLOAT(fRec46[0]); - output19[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (0.03214285714285714 * ((fSlow142 * (fTemp3 + (fSlow144 * fTemp5))) + (fTemp6 + (fSlow145 * fTemp8)))); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + output19[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.03214285714285714 * ((fSlow140 * (fTemp2 + (fSlow142 * fTemp4))) + (fTemp5 + (fSlow143 * fTemp7)))); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph20 = FAUSTFLOAT(fRec47[0]); - output20[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.03214285714285714 * ((fSlow147 * (fTemp3 + (fSlow149 * fTemp5))) + (fTemp6 + (fSlow150 * fTemp8)))); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + output20[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.03214285714285714 * ((fSlow145 * (fTemp2 + (fSlow147 * fTemp4))) + (fTemp5 + (fSlow148 * fTemp7)))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph21 = FAUSTFLOAT(fRec48[0]); - output21[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.03214285714285714 * ((fSlow151 * (fTemp3 + (fSlow153 * fTemp5))) + (fTemp6 + (fSlow154 * fTemp8)))); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + output21[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.03214285714285714 * ((fSlow149 * (fTemp2 + (fSlow151 * fTemp4))) + (fTemp5 + (fSlow152 * fTemp7)))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph22 = FAUSTFLOAT(fRec49[0]); - output22[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (0.03214285714285714 * ((fSlow155 * (fTemp3 + (fSlow157 * fTemp5))) + (fTemp6 + (fSlow158 * fTemp8)))); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + output22[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.03214285714285714 * ((fSlow153 * (fTemp2 + (fSlow155 * fTemp4))) + (fTemp5 + (fSlow156 * fTemp7)))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph23 = FAUSTFLOAT(fRec50[0]); - output23[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (0.03214285714285714 * ((fSlow159 * (fTemp3 + (fSlow161 * fTemp5))) + (fTemp6 + (fSlow162 * fTemp8)))); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + output23[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.03214285714285714 * ((fSlow157 * (fTemp2 + (fSlow159 * fTemp4))) + (fTemp5 + (fSlow160 * fTemp7)))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph24 = FAUSTFLOAT(fRec51[0]); - output24[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (0.03214285714285714 * ((fSlow163 * (fTemp3 + (fSlow165 * fTemp5))) + (fTemp6 + (fSlow166 * fTemp8)))); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + output24[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.03214285714285714 * ((fSlow161 * (fTemp2 + (fSlow163 * fTemp4))) + (fTemp5 + (fSlow164 * fTemp7)))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph25 = FAUSTFLOAT(fRec52[0]); - output25[i] = FAUSTFLOAT(fTemp34); + output25[i] = FAUSTFLOAT(fTemp33); fRec3[1] = fRec3[0]; fRec4[1] = fRec4[0]; fRec2[1] = fRec2[0]; @@ -1754,7 +1761,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -1986,7 +1992,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2049,7 +2055,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2078,11 +2084,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAPanLebedev501.cpp b/source/HOAUGens/HOAPanLebedev501.cpp index 8ff7291c00..ceca57babf 100644 --- a/source/HOAUGens/HOAPanLebedev501.cpp +++ b/source/HOAUGens/HOAPanLebedev501.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev501" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,19 +613,19 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double cos(double dummy0); -double sin(double dummy0); -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -626,9 +640,8 @@ class mydsp : public dsp { FAUSTFLOAT fCheckbox1; FAUSTFLOAT fHslider1; double fRec1[2]; - FAUSTFLOAT fHslider2; - FAUSTFLOAT fHslider3; FAUSTFLOAT fCheckbox2; + FAUSTFLOAT fHslider2; double fConst2; double fConst3; double fRec4[2]; @@ -638,6 +651,7 @@ class mydsp : public dsp { double fRec5[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec7[2]; FAUSTFLOAT fVbargraph1; double fRec8[2]; @@ -744,36 +758,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev501"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1019,7 +1033,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -1032,9 +1046,9 @@ class mydsp : public dsp { fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); fHslider1 = FAUSTFLOAT(0.0); + fCheckbox2 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); - fCheckbox2 = FAUSTFLOAT(0.0); } @@ -1279,9 +1293,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1295,14 +1309,14 @@ class mydsp : public dsp { ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -1320,257 +1334,257 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x28d2be0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2933c20", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x28d89b0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x293b7d0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x28df0b0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2941ed0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x28e5890", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29486b0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x28ec150", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x294ef70", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x28f20e0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29556a0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x28f8ea0", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x295c460", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x28ff5c0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2962b80", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2905dc0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2969380", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x290c6a0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x296fc60", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29134a0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2976a60", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x291a380", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x297d940", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2921340", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2984900", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29283e0", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x298b9a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x292eb50", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2992110", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29353a0", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2998960", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x293bcd0", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x299f290", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29426e0", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29a5ca0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x294a100", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29ad6c0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29514b0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29b4a70", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2958940", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29bbf00", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x295feb0", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29c3470", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2966d20", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29ca2e0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x296dc70", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29d1230", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2974ca0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29d8260", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x297bdb0", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29df370", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29832a0", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29e6860", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2989460", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29eca20", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x298f700", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29f2cc0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2995a80", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x29f9040", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x299d040", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a00600", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29a3f50", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a07510", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29aaf40", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a0e500", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29b2010", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a155d0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29b91c0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a1c780", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29c0450", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a23a10", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29c77c0", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a2ad80", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29cec10", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a321d0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29d5380", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a38940", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29dbbd0", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a3f1a0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29e2500", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a45ad0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29e8f10", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a4c4e0", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29efa00", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a52fd0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29f65d0", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a59ba0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x29fd280", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a60850", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2a04010", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a675e0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2a0ae80", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a6e450", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2a11dd0", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a753a0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2a18e00", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a7c3d0", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2a1ff10", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a834e0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1636,311 +1650,310 @@ class mydsp : public dsp { double fSlow3 = double(fEntry0); double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow6 = double(fHslider2); - double fSlow7 = cos(fSlow6); - double fSlow8 = double(fHslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (fSlow7 * fSlow9); - double fSlow11 = (6.123233995736766e-17 * fSlow10); - double fSlow12 = sin(fSlow8); - double fSlow13 = (1.0 - double(fCheckbox2)); - double fSlow14 = (3.0 * ((fSlow11 + fSlow12) * fSlow13)); - double fSlow15 = ((fConst3 / fSlow1) + 1.0); - double fSlow16 = (fConst2 / (fSlow15 * fSlow1)); - double fSlow17 = (1.0 / ((fConst3 / fSlow3) + 1.0)); - double fSlow18 = (((fSlow15 * fSlow0) * fSlow3) / fSlow1); - double fSlow19 = (fConst2 / fSlow3); - double fSlow20 = (fSlow2 * fSlow3); - double fSlow21 = (3.0 * ((fSlow7 * fSlow13) * fSlow9)); - double fSlow22 = cos((fSlow6 + -1.5707963267948966)); - double fSlow23 = (3.0 * ((fSlow22 * fSlow13) * fSlow9)); - double fSlow24 = cos((fSlow6 + -3.1415926535897931)); - double fSlow25 = (3.0 * ((fSlow24 * fSlow13) * fSlow9)); - double fSlow26 = cos((fSlow6 + -4.7123889803846897)); - double fSlow27 = (3.0 * ((fSlow26 * fSlow13) * fSlow9)); - double fSlow28 = (3.0 * ((fSlow11 - fSlow12) * fSlow13)); - double fSlow29 = (0.70710678118654757 * fSlow10); - double fSlow30 = (0.70710678118654746 * fSlow12); - double fSlow31 = (3.0 * ((fSlow29 + fSlow30) * fSlow13)); - double fSlow32 = (0.70710678118654757 * (fSlow22 * fSlow9)); - double fSlow33 = (3.0 * ((fSlow30 + fSlow32) * fSlow13)); - double fSlow34 = (0.70710678118654757 * (fSlow24 * fSlow9)); - double fSlow35 = (3.0 * ((fSlow30 + fSlow34) * fSlow13)); - double fSlow36 = (0.70710678118654757 * (fSlow26 * fSlow9)); - double fSlow37 = (3.0 * ((fSlow30 + fSlow36) * fSlow13)); - double fSlow38 = cos((fSlow6 + -0.78539816339744828)); - double fSlow39 = (3.0 * ((fSlow38 * fSlow13) * fSlow9)); - double fSlow40 = cos((fSlow6 + -2.3561944901923448)); - double fSlow41 = (3.0 * ((fSlow40 * fSlow13) * fSlow9)); - double fSlow42 = cos((fSlow6 + -3.9269908169872414)); - double fSlow43 = (3.0 * ((fSlow42 * fSlow13) * fSlow9)); - double fSlow44 = cos((fSlow6 + -5.497787143782138)); - double fSlow45 = (3.0 * ((fSlow44 * fSlow13) * fSlow9)); - double fSlow46 = (3.0 * ((fSlow29 - fSlow30) * fSlow13)); - double fSlow47 = (3.0 * ((fSlow32 - fSlow30) * fSlow13)); - double fSlow48 = (3.0 * ((fSlow34 - fSlow30) * fSlow13)); - double fSlow49 = (3.0 * ((fSlow36 - fSlow30) * fSlow13)); - double fSlow50 = (0.81649658092772592 * (fSlow38 * fSlow9)); - double fSlow51 = (0.57735026918962584 * fSlow12); - double fSlow52 = (3.0 * ((fSlow50 + fSlow51) * fSlow13)); - double fSlow53 = (fSlow40 * fSlow9); - double fSlow54 = (0.81649658092772592 * fSlow53); - double fSlow55 = (3.0 * ((fSlow51 + fSlow54) * fSlow13)); - double fSlow56 = (fSlow42 * fSlow9); - double fSlow57 = (0.81649658092772592 * fSlow56); - double fSlow58 = (3.0 * ((fSlow51 + fSlow57) * fSlow13)); - double fSlow59 = (fSlow44 * fSlow9); - double fSlow60 = (0.81649658092772592 * fSlow59); - double fSlow61 = (3.0 * ((fSlow51 + fSlow60) * fSlow13)); - double fSlow62 = (3.0 * ((fSlow50 - fSlow51) * fSlow13)); - double fSlow63 = (3.0 * ((fSlow54 - fSlow51) * fSlow13)); - double fSlow64 = (3.0 * ((fSlow57 - fSlow51) * fSlow13)); - double fSlow65 = (3.0 * ((fSlow60 - fSlow51) * fSlow13)); - double fSlow66 = (0.42640143271122027 * (cos((fSlow6 + -0.78539816339744839)) * fSlow9)); - double fSlow67 = (0.90453403373329111 * fSlow12); - double fSlow68 = (3.0 * ((fSlow66 + fSlow67) * fSlow13)); - double fSlow69 = (0.42640143271122027 * fSlow53); - double fSlow70 = (3.0 * ((fSlow67 + fSlow69) * fSlow13)); - double fSlow71 = (0.42640143271122027 * fSlow56); - double fSlow72 = (3.0 * ((fSlow67 + fSlow71) * fSlow13)); - double fSlow73 = (0.42640143271122027 * fSlow59); - double fSlow74 = (3.0 * ((fSlow67 + fSlow73) * fSlow13)); - double fSlow75 = (0.95346258924559235 * (cos((fSlow6 + -0.32175055439664263)) * fSlow9)); - double fSlow76 = (0.30151134457776352 * fSlow12); - double fSlow77 = (3.0 * ((fSlow75 + fSlow76) * fSlow13)); - double fSlow78 = (0.95346258924559235 * (cos((fSlow6 + -1.2490457723982544)) * fSlow9)); - double fSlow79 = (3.0 * ((fSlow76 + fSlow78) * fSlow13)); - double fSlow80 = (0.95346258924559235 * (cos((fSlow6 + -1.8925468811915387)) * fSlow9)); - double fSlow81 = (3.0 * ((fSlow76 + fSlow80) * fSlow13)); - double fSlow82 = (0.95346258924559235 * (cos((fSlow6 + -2.8198420991931505)) * fSlow9)); - double fSlow83 = (3.0 * ((fSlow76 + fSlow82) * fSlow13)); - double fSlow84 = (0.95346258924559235 * (cos((fSlow6 + -3.4633432079864357)) * fSlow9)); - double fSlow85 = (3.0 * ((fSlow76 + fSlow84) * fSlow13)); - double fSlow86 = (0.95346258924559235 * (cos((fSlow6 + -4.3906384259880475)) * fSlow9)); - double fSlow87 = (3.0 * ((fSlow76 + fSlow86) * fSlow13)); - double fSlow88 = (0.95346258924559235 * (cos((fSlow6 + -5.0341395347813318)) * fSlow9)); - double fSlow89 = (3.0 * ((fSlow76 + fSlow88) * fSlow13)); - double fSlow90 = (0.95346258924559235 * (cos((fSlow6 + -5.9614347527829432)) * fSlow9)); - double fSlow91 = (3.0 * ((fSlow76 + fSlow90) * fSlow13)); - double fSlow92 = (3.0 * ((fSlow75 - fSlow76) * fSlow13)); - double fSlow93 = (3.0 * ((fSlow78 - fSlow76) * fSlow13)); - double fSlow94 = (3.0 * ((fSlow80 - fSlow76) * fSlow13)); - double fSlow95 = (3.0 * ((fSlow82 - fSlow76) * fSlow13)); - double fSlow96 = (3.0 * ((fSlow84 - fSlow76) * fSlow13)); - double fSlow97 = (3.0 * ((fSlow86 - fSlow76) * fSlow13)); - double fSlow98 = (3.0 * ((fSlow88 - fSlow76) * fSlow13)); - double fSlow99 = (3.0 * ((fSlow90 - fSlow76) * fSlow13)); - double fSlow100 = (3.0 * ((fSlow66 - fSlow67) * fSlow13)); - double fSlow101 = (3.0 * ((fSlow69 - fSlow67) * fSlow13)); - double fSlow102 = (3.0 * ((fSlow71 - fSlow67) * fSlow13)); - double fSlow103 = (3.0 * ((fSlow73 - fSlow67) * fSlow13)); + double fSlow6 = (1.0 - double(fCheckbox2)); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = (3.0 * (fSlow6 * fSlow8)); + double fSlow10 = ((fConst3 / fSlow1) + 1.0); + double fSlow11 = (fConst2 / (fSlow10 * fSlow1)); + double fSlow12 = (1.0 / ((fConst3 / fSlow3) + 1.0)); + double fSlow13 = (((fSlow10 * fSlow0) * fSlow3) / fSlow1); + double fSlow14 = (fConst2 / fSlow3); + double fSlow15 = (fSlow2 * fSlow3); + double fSlow16 = double(fHslider3); + double fSlow17 = cos(fSlow16); + double fSlow18 = cos(fSlow7); + double fSlow19 = (3.0 * ((fSlow17 * fSlow6) * fSlow18)); + double fSlow20 = cos((fSlow16 + -1.5707963267948966)); + double fSlow21 = (3.0 * ((fSlow20 * fSlow6) * fSlow18)); + double fSlow22 = cos((fSlow16 + -3.1415926535897931)); + double fSlow23 = (3.0 * ((fSlow22 * fSlow6) * fSlow18)); + double fSlow24 = cos((fSlow16 + -4.7123889803846897)); + double fSlow25 = (3.0 * ((fSlow24 * fSlow6) * fSlow18)); + double fSlow26 = (fSlow17 * fSlow18); + double fSlow27 = (3.0 * (((6.123233995736766e-17 * fSlow26) - fSlow8) * fSlow6)); + double fSlow28 = (0.70710678118654757 * fSlow26); + double fSlow29 = (0.70710678118654746 * fSlow8); + double fSlow30 = (3.0 * ((fSlow28 + fSlow29) * fSlow6)); + double fSlow31 = (0.70710678118654757 * (fSlow20 * fSlow18)); + double fSlow32 = (3.0 * ((fSlow29 + fSlow31) * fSlow6)); + double fSlow33 = (0.70710678118654757 * (fSlow22 * fSlow18)); + double fSlow34 = (3.0 * ((fSlow29 + fSlow33) * fSlow6)); + double fSlow35 = (0.70710678118654757 * (fSlow24 * fSlow18)); + double fSlow36 = (3.0 * ((fSlow29 + fSlow35) * fSlow6)); + double fSlow37 = cos((fSlow16 + -0.78539816339744828)); + double fSlow38 = (3.0 * ((fSlow37 * fSlow6) * fSlow18)); + double fSlow39 = cos((fSlow16 + -2.3561944901923448)); + double fSlow40 = (3.0 * ((fSlow39 * fSlow6) * fSlow18)); + double fSlow41 = cos((fSlow16 + -3.9269908169872414)); + double fSlow42 = (3.0 * ((fSlow41 * fSlow6) * fSlow18)); + double fSlow43 = cos((fSlow16 + -5.497787143782138)); + double fSlow44 = (3.0 * ((fSlow43 * fSlow6) * fSlow18)); + double fSlow45 = (3.0 * ((fSlow28 - fSlow29) * fSlow6)); + double fSlow46 = (3.0 * ((fSlow31 - fSlow29) * fSlow6)); + double fSlow47 = (3.0 * ((fSlow33 - fSlow29) * fSlow6)); + double fSlow48 = (3.0 * ((fSlow35 - fSlow29) * fSlow6)); + double fSlow49 = (0.81649658092772592 * (fSlow37 * fSlow18)); + double fSlow50 = (0.57735026918962584 * fSlow8); + double fSlow51 = (3.0 * ((fSlow49 + fSlow50) * fSlow6)); + double fSlow52 = (fSlow39 * fSlow18); + double fSlow53 = (0.81649658092772592 * fSlow52); + double fSlow54 = (3.0 * ((fSlow50 + fSlow53) * fSlow6)); + double fSlow55 = (fSlow41 * fSlow18); + double fSlow56 = (0.81649658092772592 * fSlow55); + double fSlow57 = (3.0 * ((fSlow50 + fSlow56) * fSlow6)); + double fSlow58 = (fSlow43 * fSlow18); + double fSlow59 = (0.81649658092772592 * fSlow58); + double fSlow60 = (3.0 * ((fSlow50 + fSlow59) * fSlow6)); + double fSlow61 = (3.0 * ((fSlow49 - fSlow50) * fSlow6)); + double fSlow62 = (3.0 * ((fSlow53 - fSlow50) * fSlow6)); + double fSlow63 = (3.0 * ((fSlow56 - fSlow50) * fSlow6)); + double fSlow64 = (3.0 * ((fSlow59 - fSlow50) * fSlow6)); + double fSlow65 = (0.42640143271122027 * (cos((fSlow16 + -0.78539816339744839)) * fSlow18)); + double fSlow66 = (0.90453403373329111 * fSlow8); + double fSlow67 = (3.0 * ((fSlow65 + fSlow66) * fSlow6)); + double fSlow68 = (0.42640143271122027 * fSlow52); + double fSlow69 = (3.0 * ((fSlow66 + fSlow68) * fSlow6)); + double fSlow70 = (0.42640143271122027 * fSlow55); + double fSlow71 = (3.0 * ((fSlow66 + fSlow70) * fSlow6)); + double fSlow72 = (0.42640143271122027 * fSlow58); + double fSlow73 = (3.0 * ((fSlow66 + fSlow72) * fSlow6)); + double fSlow74 = (0.95346258924559235 * (cos((fSlow16 + -0.32175055439664263)) * fSlow18)); + double fSlow75 = (0.30151134457776352 * fSlow8); + double fSlow76 = (3.0 * ((fSlow74 + fSlow75) * fSlow6)); + double fSlow77 = (0.95346258924559235 * (cos((fSlow16 + -1.2490457723982544)) * fSlow18)); + double fSlow78 = (3.0 * ((fSlow75 + fSlow77) * fSlow6)); + double fSlow79 = (0.95346258924559235 * (cos((fSlow16 + -1.8925468811915387)) * fSlow18)); + double fSlow80 = (3.0 * ((fSlow75 + fSlow79) * fSlow6)); + double fSlow81 = (0.95346258924559235 * (cos((fSlow16 + -2.8198420991931505)) * fSlow18)); + double fSlow82 = (3.0 * ((fSlow75 + fSlow81) * fSlow6)); + double fSlow83 = (0.95346258924559235 * (cos((fSlow16 + -3.4633432079864357)) * fSlow18)); + double fSlow84 = (3.0 * ((fSlow75 + fSlow83) * fSlow6)); + double fSlow85 = (0.95346258924559235 * (cos((fSlow16 + -4.3906384259880475)) * fSlow18)); + double fSlow86 = (3.0 * ((fSlow75 + fSlow85) * fSlow6)); + double fSlow87 = (0.95346258924559235 * (cos((fSlow16 + -5.0341395347813318)) * fSlow18)); + double fSlow88 = (3.0 * ((fSlow75 + fSlow87) * fSlow6)); + double fSlow89 = (0.95346258924559235 * (cos((fSlow16 + -5.9614347527829432)) * fSlow18)); + double fSlow90 = (3.0 * ((fSlow75 + fSlow89) * fSlow6)); + double fSlow91 = (3.0 * ((fSlow74 - fSlow75) * fSlow6)); + double fSlow92 = (3.0 * ((fSlow77 - fSlow75) * fSlow6)); + double fSlow93 = (3.0 * ((fSlow79 - fSlow75) * fSlow6)); + double fSlow94 = (3.0 * ((fSlow81 - fSlow75) * fSlow6)); + double fSlow95 = (3.0 * ((fSlow83 - fSlow75) * fSlow6)); + double fSlow96 = (3.0 * ((fSlow85 - fSlow75) * fSlow6)); + double fSlow97 = (3.0 * ((fSlow87 - fSlow75) * fSlow6)); + double fSlow98 = (3.0 * ((fSlow89 - fSlow75) * fSlow6)); + double fSlow99 = (3.0 * ((fSlow65 - fSlow66) * fSlow6)); + double fSlow100 = (3.0 * ((fSlow68 - fSlow66) * fSlow6)); + double fSlow101 = (3.0 * ((fSlow70 - fSlow66) * fSlow6)); + double fSlow102 = (3.0 * ((fSlow72 - fSlow66) * fSlow6)); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); double fTemp0 = (fRec1[0] * double(input0[i])); double fTemp1 = (fSlow4 * fTemp0); fRec4[0] = (fRec4[1] + fRec3[1]); - fRec3[0] = (fSlow17 * ((fSlow18 * fTemp0) - (fSlow19 * fRec4[0]))); + fRec3[0] = (fSlow12 * ((fSlow13 * fTemp0) - (fSlow14 * fRec4[0]))); fRec2[0] = (fRec3[0] + fRec2[1]); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow17 * ((fSlow20 * fTemp0) - (fSlow19 * fRec6[0]))); - double fTemp2 = ((fSlow16 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); - double fTemp3 = (0.012698412698412698 * (fTemp1 + (fSlow14 * fTemp2))); + fRec5[0] = (fSlow12 * ((fSlow15 * fTemp0) - (fSlow14 * fRec6[0]))); + double fTemp2 = ((fSlow11 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + double fTemp3 = (0.012698412698412698 * (fTemp1 + (fSlow9 * fTemp2))); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp3); - double fTemp4 = (0.012698412698412698 * (fTemp1 + (fSlow21 * fTemp2))); + double fTemp4 = (0.012698412698412698 * (fTemp1 + (fSlow19 * fTemp2))); fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fVbargraph1 = FAUSTFLOAT(fRec7[0]); output1[i] = FAUSTFLOAT(fTemp4); - double fTemp5 = (0.012698412698412698 * (fTemp1 + (fSlow23 * fTemp2))); + double fTemp5 = (0.012698412698412698 * (fTemp1 + (fSlow21 * fTemp2))); fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); fVbargraph2 = FAUSTFLOAT(fRec8[0]); output2[i] = FAUSTFLOAT(fTemp5); - double fTemp6 = (0.012698412698412698 * (fTemp1 + (fSlow25 * fTemp2))); + double fTemp6 = (0.012698412698412698 * (fTemp1 + (fSlow23 * fTemp2))); fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph3 = FAUSTFLOAT(fRec9[0]); output3[i] = FAUSTFLOAT(fTemp6); - double fTemp7 = (0.012698412698412698 * (fTemp1 + (fSlow27 * fTemp2))); + double fTemp7 = (0.012698412698412698 * (fTemp1 + (fSlow25 * fTemp2))); fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph4 = FAUSTFLOAT(fRec10[0]); output4[i] = FAUSTFLOAT(fTemp7); - double fTemp8 = (0.012698412698412698 * (fTemp1 + (fSlow28 * fTemp2))); + double fTemp8 = (0.012698412698412698 * (fTemp1 + (fSlow27 * fTemp2))); fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph5 = FAUSTFLOAT(fRec11[0]); output5[i] = FAUSTFLOAT(fTemp8); - double fTemp9 = (0.022574955908289243 * (fTemp1 + (fSlow31 * fTemp2))); + double fTemp9 = (0.022574955908289243 * (fTemp1 + (fSlow30 * fTemp2))); fRec12[0] = max((fRec12[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph6 = FAUSTFLOAT(fRec12[0]); output6[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (0.022574955908289243 * (fTemp1 + (fSlow33 * fTemp2))); + double fTemp10 = (0.022574955908289243 * (fTemp1 + (fSlow32 * fTemp2))); fRec13[0] = max((fRec13[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph7 = FAUSTFLOAT(fRec13[0]); output7[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (0.022574955908289243 * (fTemp1 + (fSlow35 * fTemp2))); + double fTemp11 = (0.022574955908289243 * (fTemp1 + (fSlow34 * fTemp2))); fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph8 = FAUSTFLOAT(fRec14[0]); output8[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.022574955908289243 * (fTemp1 + (fSlow37 * fTemp2))); + double fTemp12 = (0.022574955908289243 * (fTemp1 + (fSlow36 * fTemp2))); fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph9 = FAUSTFLOAT(fRec15[0]); output9[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (0.022574955908289243 * (fTemp1 + (fSlow39 * fTemp2))); + double fTemp13 = (0.022574955908289243 * (fTemp1 + (fSlow38 * fTemp2))); fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph10 = FAUSTFLOAT(fRec16[0]); output10[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = (0.022574955908289243 * (fTemp1 + (fSlow41 * fTemp2))); + double fTemp14 = (0.022574955908289243 * (fTemp1 + (fSlow40 * fTemp2))); fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph11 = FAUSTFLOAT(fRec17[0]); output11[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (0.022574955908289243 * (fTemp1 + (fSlow43 * fTemp2))); + double fTemp15 = (0.022574955908289243 * (fTemp1 + (fSlow42 * fTemp2))); fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph12 = FAUSTFLOAT(fRec18[0]); output12[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (0.022574955908289243 * (fTemp1 + (fSlow45 * fTemp2))); + double fTemp16 = (0.022574955908289243 * (fTemp1 + (fSlow44 * fTemp2))); fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph13 = FAUSTFLOAT(fRec19[0]); output13[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (0.022574955908289243 * (fTemp1 + (fSlow46 * fTemp2))); + double fTemp17 = (0.022574955908289243 * (fTemp1 + (fSlow45 * fTemp2))); fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph14 = FAUSTFLOAT(fRec20[0]); output14[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.022574955908289243 * (fTemp1 + (fSlow47 * fTemp2))); + double fTemp18 = (0.022574955908289243 * (fTemp1 + (fSlow46 * fTemp2))); fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph15 = FAUSTFLOAT(fRec21[0]); output15[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.022574955908289243 * (fTemp1 + (fSlow48 * fTemp2))); + double fTemp19 = (0.022574955908289243 * (fTemp1 + (fSlow47 * fTemp2))); fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph16 = FAUSTFLOAT(fRec22[0]); output16[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (0.022574955908289243 * (fTemp1 + (fSlow49 * fTemp2))); + double fTemp20 = (0.022574955908289243 * (fTemp1 + (fSlow48 * fTemp2))); fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph17 = FAUSTFLOAT(fRec23[0]); output17[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (0.021093750000000001 * (fTemp1 + (fSlow52 * fTemp2))); + double fTemp21 = (0.021093750000000001 * (fTemp1 + (fSlow51 * fTemp2))); fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph18 = FAUSTFLOAT(fRec24[0]); output18[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (0.021093750000000001 * (fTemp1 + (fSlow55 * fTemp2))); + double fTemp22 = (0.021093750000000001 * (fTemp1 + (fSlow54 * fTemp2))); fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph19 = FAUSTFLOAT(fRec25[0]); output19[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (0.021093750000000001 * (fTemp1 + (fSlow58 * fTemp2))); + double fTemp23 = (0.021093750000000001 * (fTemp1 + (fSlow57 * fTemp2))); fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph20 = FAUSTFLOAT(fRec26[0]); output20[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.021093750000000001 * (fTemp1 + (fSlow61 * fTemp2))); + double fTemp24 = (0.021093750000000001 * (fTemp1 + (fSlow60 * fTemp2))); fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph21 = FAUSTFLOAT(fRec27[0]); output21[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (0.021093750000000001 * (fTemp1 + (fSlow62 * fTemp2))); + double fTemp25 = (0.021093750000000001 * (fTemp1 + (fSlow61 * fTemp2))); fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph22 = FAUSTFLOAT(fRec28[0]); output22[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (0.021093750000000001 * (fTemp1 + (fSlow63 * fTemp2))); + double fTemp26 = (0.021093750000000001 * (fTemp1 + (fSlow62 * fTemp2))); fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph23 = FAUSTFLOAT(fRec29[0]); output23[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (0.021093750000000001 * (fTemp1 + (fSlow64 * fTemp2))); + double fTemp27 = (0.021093750000000001 * (fTemp1 + (fSlow63 * fTemp2))); fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph24 = FAUSTFLOAT(fRec30[0]); output24[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (0.021093750000000001 * (fTemp1 + (fSlow65 * fTemp2))); + double fTemp28 = (0.021093750000000001 * (fTemp1 + (fSlow64 * fTemp2))); fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph25 = FAUSTFLOAT(fRec31[0]); output25[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (0.02017333553791887 * (fTemp1 + (fSlow68 * fTemp2))); + double fTemp29 = (0.02017333553791887 * (fTemp1 + (fSlow67 * fTemp2))); fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph26 = FAUSTFLOAT(fRec32[0]); output26[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.02017333553791887 * (fTemp1 + (fSlow70 * fTemp2))); + double fTemp30 = (0.02017333553791887 * (fTemp1 + (fSlow69 * fTemp2))); fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph27 = FAUSTFLOAT(fRec33[0]); output27[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.02017333553791887 * (fTemp1 + (fSlow72 * fTemp2))); + double fTemp31 = (0.02017333553791887 * (fTemp1 + (fSlow71 * fTemp2))); fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph28 = FAUSTFLOAT(fRec34[0]); output28[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (0.02017333553791887 * (fTemp1 + (fSlow74 * fTemp2))); + double fTemp32 = (0.02017333553791887 * (fTemp1 + (fSlow73 * fTemp2))); fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph29 = FAUSTFLOAT(fRec35[0]); output29[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (0.02017333553791887 * (fTemp1 + (fSlow77 * fTemp2))); + double fTemp33 = (0.02017333553791887 * (fTemp1 + (fSlow76 * fTemp2))); fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph30 = FAUSTFLOAT(fRec36[0]); output30[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (0.02017333553791887 * (fTemp1 + (fSlow79 * fTemp2))); + double fTemp34 = (0.02017333553791887 * (fTemp1 + (fSlow78 * fTemp2))); fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph31 = FAUSTFLOAT(fRec37[0]); output31[i] = FAUSTFLOAT(fTemp34); - double fTemp35 = (0.02017333553791887 * (fTemp1 + (fSlow81 * fTemp2))); + double fTemp35 = (0.02017333553791887 * (fTemp1 + (fSlow80 * fTemp2))); fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); fVbargraph32 = FAUSTFLOAT(fRec38[0]); output32[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (0.02017333553791887 * (fTemp1 + (fSlow83 * fTemp2))); + double fTemp36 = (0.02017333553791887 * (fTemp1 + (fSlow82 * fTemp2))); fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph33 = FAUSTFLOAT(fRec39[0]); output33[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = (0.02017333553791887 * (fTemp1 + (fSlow85 * fTemp2))); + double fTemp37 = (0.02017333553791887 * (fTemp1 + (fSlow84 * fTemp2))); fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph34 = FAUSTFLOAT(fRec40[0]); output34[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = (0.02017333553791887 * (fTemp1 + (fSlow87 * fTemp2))); + double fTemp38 = (0.02017333553791887 * (fTemp1 + (fSlow86 * fTemp2))); fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); fVbargraph35 = FAUSTFLOAT(fRec41[0]); output35[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (0.02017333553791887 * (fTemp1 + (fSlow89 * fTemp2))); + double fTemp39 = (0.02017333553791887 * (fTemp1 + (fSlow88 * fTemp2))); fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph36 = FAUSTFLOAT(fRec42[0]); output36[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (0.02017333553791887 * (fTemp1 + (fSlow91 * fTemp2))); + double fTemp40 = (0.02017333553791887 * (fTemp1 + (fSlow90 * fTemp2))); fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph37 = FAUSTFLOAT(fRec43[0]); output37[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (0.02017333553791887 * (fTemp1 + (fSlow92 * fTemp2))); + double fTemp41 = (0.02017333553791887 * (fTemp1 + (fSlow91 * fTemp2))); fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph38 = FAUSTFLOAT(fRec44[0]); output38[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (0.02017333553791887 * (fTemp1 + (fSlow93 * fTemp2))); + double fTemp42 = (0.02017333553791887 * (fTemp1 + (fSlow92 * fTemp2))); fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph39 = FAUSTFLOAT(fRec45[0]); output39[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (0.02017333553791887 * (fTemp1 + (fSlow94 * fTemp2))); + double fTemp43 = (0.02017333553791887 * (fTemp1 + (fSlow93 * fTemp2))); fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph40 = FAUSTFLOAT(fRec46[0]); output40[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (0.02017333553791887 * (fTemp1 + (fSlow95 * fTemp2))); + double fTemp44 = (0.02017333553791887 * (fTemp1 + (fSlow94 * fTemp2))); fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph41 = FAUSTFLOAT(fRec47[0]); output41[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (0.02017333553791887 * (fTemp1 + (fSlow96 * fTemp2))); + double fTemp45 = (0.02017333553791887 * (fTemp1 + (fSlow95 * fTemp2))); fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph42 = FAUSTFLOAT(fRec48[0]); output42[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (0.02017333553791887 * (fTemp1 + (fSlow97 * fTemp2))); + double fTemp46 = (0.02017333553791887 * (fTemp1 + (fSlow96 * fTemp2))); fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph43 = FAUSTFLOAT(fRec49[0]); output43[i] = FAUSTFLOAT(fTemp46); - double fTemp47 = (0.02017333553791887 * (fTemp1 + (fSlow98 * fTemp2))); + double fTemp47 = (0.02017333553791887 * (fTemp1 + (fSlow97 * fTemp2))); fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph44 = FAUSTFLOAT(fRec50[0]); output44[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (0.02017333553791887 * (fTemp1 + (fSlow99 * fTemp2))); + double fTemp48 = (0.02017333553791887 * (fTemp1 + (fSlow98 * fTemp2))); fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph45 = FAUSTFLOAT(fRec51[0]); output45[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (0.02017333553791887 * (fTemp1 + (fSlow100 * fTemp2))); + double fTemp49 = (0.02017333553791887 * (fTemp1 + (fSlow99 * fTemp2))); fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph46 = FAUSTFLOAT(fRec52[0]); output46[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (0.02017333553791887 * (fTemp1 + (fSlow101 * fTemp2))); + double fTemp50 = (0.02017333553791887 * (fTemp1 + (fSlow100 * fTemp2))); fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph47 = FAUSTFLOAT(fRec53[0]); output47[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (0.02017333553791887 * (fTemp1 + (fSlow102 * fTemp2))); + double fTemp51 = (0.02017333553791887 * (fTemp1 + (fSlow101 * fTemp2))); fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph48 = FAUSTFLOAT(fRec54[0]); output48[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (0.02017333553791887 * (fTemp1 + (fSlow103 * fTemp2))); + double fTemp52 = (0.02017333553791887 * (fTemp1 + (fSlow102 * fTemp2))); fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph49 = FAUSTFLOAT(fRec55[0]); output49[i] = FAUSTFLOAT(fTemp52); @@ -2008,7 +2021,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2240,7 +2252,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2303,7 +2315,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2332,11 +2344,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAPanLebedev502.cpp b/source/HOAUGens/HOAPanLebedev502.cpp index a0994ec79c..fd1281c03c 100644 --- a/source/HOAUGens/HOAPanLebedev502.cpp +++ b/source/HOAUGens/HOAPanLebedev502.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev502" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,23 +613,23 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double pow(double dummy0, double dummy1); -double cos(double dummy0); -double sin(double dummy0); double mydsp_faustpower2_f(double value) { return (value * value); } -double fabs(double dummy0); -double log10(double dummy0); #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -630,9 +644,8 @@ class mydsp : public dsp { FAUSTFLOAT fCheckbox1; FAUSTFLOAT fHslider1; double fRec1[2]; - FAUSTFLOAT fHslider2; - FAUSTFLOAT fHslider3; FAUSTFLOAT fCheckbox2; + FAUSTFLOAT fHslider2; double fConst2; double fConst3; double fRec4[2]; @@ -654,6 +667,7 @@ class mydsp : public dsp { double fRec12[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec15[2]; FAUSTFLOAT fVbargraph1; double fRec16[2]; @@ -760,36 +774,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev502"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1035,7 +1049,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -1050,10 +1064,10 @@ class mydsp : public dsp { fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); fHslider1 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(0.0); - fHslider3 = FAUSTFLOAT(0.0); fCheckbox2 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); fCheckbox3 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -1334,9 +1348,9 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { @@ -1350,14 +1364,14 @@ class mydsp : public dsp { ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider2, "0+3", ""); - ui_interface->declare(&fHslider2, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider3, "0+4", ""); - ui_interface->declare(&fHslider3, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider3, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider2, "0+4", ""); + ui_interface->declare(&fHslider2, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox0); @@ -1376,257 +1390,257 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31cb000", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a8dfc0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31d22e0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a97b70", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31da2e0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2a9f960", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31e23c0", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2aa7830", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31ea580", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2aaf7e0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31f1c30", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ab7630", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31fa110", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2abfb10", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3201d70", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ac7950", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3209ab0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2acf870", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32118d0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ad7870", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3219fd0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2adfd60", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32227b0", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ae8330", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x322b070", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2af09e0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3233a10", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2af9170", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x323b8a0", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b01000", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3243810", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b08f70", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x324b860", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b10fc0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3253990", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b190f0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x325c8f0", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b22230", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3264fd0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b2ad00", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x326d790", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b338b0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3276030", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b3c540", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x327e5c0", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b44ad0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3286c30", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b4d140", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x328f380", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b55890", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3297bb0", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b5e0c0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32a07c0", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b66cd0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32a80a0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b6e5b0", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32afa60", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b75f70", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32b7500", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b7da10", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32c01e0", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b866f0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32c8810", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b8ed20", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32d0f20", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b97430", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32d9710", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2b9fc20", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32e1ff0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ba84f0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32ea9a0", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bb0ea0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32f3430", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bb9930", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32fbfa0", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bc24a0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3303e30", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bca330", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x330bda0", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bd22a0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3313df0", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bda2f0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x331bf20", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2be2420", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3324130", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bea630", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x332c420", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bf2920", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33347f0", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2bfacf0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x333cca0", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c031a0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3345230", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c0b730", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x334d8a0", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c13da0", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3355ff0", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c1c4f0", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x335e820", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2c24d20", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1692,432 +1706,427 @@ class mydsp : public dsp { double fSlow3 = double(fEntry0); double fSlow4 = ((((fSlow0 / fSlow1) + fSlow2) * fSlow3) * (1.0 - double(fCheckbox1))); double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); - double fSlow6 = double(fHslider2); - double fSlow7 = cos(fSlow6); - double fSlow8 = double(fHslider3); - double fSlow9 = cos(fSlow8); - double fSlow10 = (fSlow7 * fSlow9); - double fSlow11 = (6.123233995736766e-17 * fSlow10); - double fSlow12 = sin(fSlow8); - double fSlow13 = (fSlow11 + fSlow12); - double fSlow14 = (1.0 - double(fCheckbox2)); - double fSlow15 = (3.0 * (fSlow13 * fSlow14)); - double fSlow16 = (fConst3 / fSlow1); - double fSlow17 = (fSlow16 + 1.0); - double fSlow18 = (fConst2 / (fSlow17 * fSlow1)); - double fSlow19 = (fConst3 / fSlow3); - double fSlow20 = (1.0 / (fSlow19 + 1.0)); - double fSlow21 = (((fSlow17 * fSlow0) * fSlow3) / fSlow1); - double fSlow22 = (fConst2 / fSlow3); - double fSlow23 = (fSlow2 * fSlow3); - double fSlow24 = (1.0 - double(fCheckbox3)); - double fSlow25 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow13)) + -1.0) * fSlow24)); - double fSlow26 = mydsp_faustpower2_f(fSlow16); - double fSlow27 = (((fConst4 / fSlow1) + (3.0 * fSlow26)) + 1.0); - double fSlow28 = (1.0 / fSlow27); - double fSlow29 = (12.0 * fSlow26); - double fSlow30 = ((fConst5 / fSlow1) + fSlow29); - double fSlow31 = mydsp_faustpower2_f(fSlow19); - double fSlow32 = (1.0 / (((fConst4 / fSlow3) + (3.0 * fSlow31)) + 1.0)); - double fSlow33 = (((fSlow27 * fSlow0) * fSlow3) / fSlow1); - double fSlow34 = (12.0 * fSlow31); - double fSlow35 = (fSlow34 + (fConst5 / fSlow3)); - double fSlow36 = (3.0 * ((fSlow7 * fSlow14) * fSlow9)); - double fSlow37 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow10)) + -1.0) * fSlow24)); - double fSlow38 = cos((fSlow6 + -1.5707963267948966)); - double fSlow39 = (3.0 * ((fSlow38 * fSlow14) * fSlow9)); - double fSlow40 = (fSlow38 * fSlow9); - double fSlow41 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow40)) + -1.0) * fSlow24)); - double fSlow42 = cos((fSlow6 + -3.1415926535897931)); - double fSlow43 = (3.0 * ((fSlow42 * fSlow14) * fSlow9)); - double fSlow44 = (fSlow42 * fSlow9); - double fSlow45 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow44)) + -1.0) * fSlow24)); - double fSlow46 = cos((fSlow6 + -4.7123889803846897)); - double fSlow47 = (3.0 * ((fSlow46 * fSlow14) * fSlow9)); - double fSlow48 = (fSlow46 * fSlow9); - double fSlow49 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow48)) + -1.0) * fSlow24)); - double fSlow50 = (fSlow11 - fSlow12); - double fSlow51 = (3.0 * (fSlow50 * fSlow14)); - double fSlow52 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow50)) + -1.0) * fSlow24)); - double fSlow53 = (0.70710678118654757 * fSlow10); - double fSlow54 = (0.70710678118654746 * fSlow12); - double fSlow55 = (fSlow53 + fSlow54); - double fSlow56 = (3.0 * (fSlow55 * fSlow14)); - double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow55)) + -1.0) * fSlow24)); - double fSlow58 = (0.70710678118654757 * fSlow40); - double fSlow59 = (fSlow54 + fSlow58); - double fSlow60 = (3.0 * (fSlow59 * fSlow14)); - double fSlow61 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow59)) + -1.0) * fSlow24)); - double fSlow62 = (0.70710678118654757 * fSlow44); - double fSlow63 = (fSlow54 + fSlow62); - double fSlow64 = (3.0 * (fSlow63 * fSlow14)); - double fSlow65 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow63)) + -1.0) * fSlow24)); - double fSlow66 = (0.70710678118654757 * fSlow48); - double fSlow67 = (fSlow54 + fSlow66); - double fSlow68 = (3.0 * (fSlow67 * fSlow14)); - double fSlow69 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow67)) + -1.0) * fSlow24)); - double fSlow70 = cos((fSlow6 + -0.78539816339744828)); - double fSlow71 = (3.0 * ((fSlow70 * fSlow14) * fSlow9)); - double fSlow72 = (fSlow70 * fSlow9); - double fSlow73 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow72)) + -1.0) * fSlow24)); - double fSlow74 = cos((fSlow6 + -2.3561944901923448)); - double fSlow75 = (3.0 * ((fSlow74 * fSlow14) * fSlow9)); - double fSlow76 = (fSlow74 * fSlow9); - double fSlow77 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow76)) + -1.0) * fSlow24)); - double fSlow78 = cos((fSlow6 + -3.9269908169872414)); - double fSlow79 = (3.0 * ((fSlow78 * fSlow14) * fSlow9)); - double fSlow80 = (fSlow78 * fSlow9); - double fSlow81 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow80)) + -1.0) * fSlow24)); - double fSlow82 = cos((fSlow6 + -5.497787143782138)); - double fSlow83 = (3.0 * ((fSlow82 * fSlow14) * fSlow9)); - double fSlow84 = (fSlow82 * fSlow9); - double fSlow85 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow84)) + -1.0) * fSlow24)); - double fSlow86 = (fSlow53 - fSlow54); - double fSlow87 = (3.0 * (fSlow86 * fSlow14)); - double fSlow88 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow86)) + -1.0) * fSlow24)); - double fSlow89 = (fSlow58 - fSlow54); - double fSlow90 = (3.0 * (fSlow89 * fSlow14)); - double fSlow91 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow89)) + -1.0) * fSlow24)); - double fSlow92 = (fSlow62 - fSlow54); - double fSlow93 = (3.0 * (fSlow92 * fSlow14)); - double fSlow94 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow92)) + -1.0) * fSlow24)); - double fSlow95 = (fSlow66 - fSlow54); - double fSlow96 = (3.0 * (fSlow95 * fSlow14)); - double fSlow97 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow95)) + -1.0) * fSlow24)); - double fSlow98 = (0.81649658092772592 * fSlow72); - double fSlow99 = (0.57735026918962584 * fSlow12); - double fSlow100 = (fSlow98 + fSlow99); - double fSlow101 = (3.0 * (fSlow100 * fSlow14)); - double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow100)) + -1.0) * fSlow24)); - double fSlow103 = (0.81649658092772592 * fSlow76); - double fSlow104 = (fSlow99 + fSlow103); - double fSlow105 = (3.0 * (fSlow104 * fSlow14)); - double fSlow106 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow104)) + -1.0) * fSlow24)); - double fSlow107 = (0.81649658092772592 * fSlow80); - double fSlow108 = (fSlow99 + fSlow107); - double fSlow109 = (3.0 * (fSlow108 * fSlow14)); - double fSlow110 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow108)) + -1.0) * fSlow24)); - double fSlow111 = (0.81649658092772592 * fSlow84); - double fSlow112 = (fSlow99 + fSlow111); - double fSlow113 = (3.0 * (fSlow112 * fSlow14)); - double fSlow114 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow112)) + -1.0) * fSlow24)); - double fSlow115 = (fSlow98 - fSlow99); - double fSlow116 = (3.0 * (fSlow115 * fSlow14)); - double fSlow117 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow115)) + -1.0) * fSlow24)); - double fSlow118 = (fSlow103 - fSlow99); - double fSlow119 = (3.0 * (fSlow118 * fSlow14)); - double fSlow120 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow118)) + -1.0) * fSlow24)); - double fSlow121 = (fSlow107 - fSlow99); - double fSlow122 = (3.0 * (fSlow121 * fSlow14)); - double fSlow123 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow121)) + -1.0) * fSlow24)); - double fSlow124 = (fSlow111 - fSlow99); - double fSlow125 = (3.0 * (fSlow124 * fSlow14)); - double fSlow126 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow124)) + -1.0) * fSlow24)); - double fSlow127 = (0.42640143271122027 * (cos((fSlow6 + -0.78539816339744839)) * fSlow9)); - double fSlow128 = (0.90453403373329111 * fSlow12); - double fSlow129 = (fSlow127 + fSlow128); - double fSlow130 = (3.0 * (fSlow129 * fSlow14)); - double fSlow131 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow129)) + -1.0) * fSlow24)); - double fSlow132 = (0.42640143271122027 * fSlow76); - double fSlow133 = (fSlow128 + fSlow132); - double fSlow134 = (3.0 * (fSlow133 * fSlow14)); - double fSlow135 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow133)) + -1.0) * fSlow24)); - double fSlow136 = (0.42640143271122027 * fSlow80); - double fSlow137 = (fSlow128 + fSlow136); - double fSlow138 = (3.0 * (fSlow137 * fSlow14)); - double fSlow139 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow137)) + -1.0) * fSlow24)); - double fSlow140 = (0.42640143271122027 * fSlow84); - double fSlow141 = (fSlow128 + fSlow140); - double fSlow142 = (3.0 * (fSlow141 * fSlow14)); - double fSlow143 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow141)) + -1.0) * fSlow24)); - double fSlow144 = (0.95346258924559235 * (cos((fSlow6 + -0.32175055439664263)) * fSlow9)); - double fSlow145 = (0.30151134457776352 * fSlow12); - double fSlow146 = (fSlow144 + fSlow145); - double fSlow147 = (3.0 * (fSlow146 * fSlow14)); - double fSlow148 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow146)) + -1.0) * fSlow24)); - double fSlow149 = (0.95346258924559235 * (cos((fSlow6 + -1.2490457723982544)) * fSlow9)); - double fSlow150 = (fSlow145 + fSlow149); - double fSlow151 = (3.0 * (fSlow150 * fSlow14)); - double fSlow152 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow150)) + -1.0) * fSlow24)); - double fSlow153 = (0.95346258924559235 * (cos((fSlow6 + -1.8925468811915387)) * fSlow9)); - double fSlow154 = (fSlow145 + fSlow153); - double fSlow155 = (3.0 * (fSlow154 * fSlow14)); - double fSlow156 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow154)) + -1.0) * fSlow24)); - double fSlow157 = (0.95346258924559235 * (cos((fSlow6 + -2.8198420991931505)) * fSlow9)); - double fSlow158 = (fSlow145 + fSlow157); - double fSlow159 = (3.0 * (fSlow158 * fSlow14)); - double fSlow160 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow158)) + -1.0) * fSlow24)); - double fSlow161 = (0.95346258924559235 * (cos((fSlow6 + -3.4633432079864357)) * fSlow9)); - double fSlow162 = (fSlow145 + fSlow161); - double fSlow163 = (3.0 * (fSlow162 * fSlow14)); - double fSlow164 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow162)) + -1.0) * fSlow24)); - double fSlow165 = (0.95346258924559235 * (cos((fSlow6 + -4.3906384259880475)) * fSlow9)); - double fSlow166 = (fSlow145 + fSlow165); - double fSlow167 = (3.0 * (fSlow166 * fSlow14)); - double fSlow168 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow166)) + -1.0) * fSlow24)); - double fSlow169 = (0.95346258924559235 * (cos((fSlow6 + -5.0341395347813318)) * fSlow9)); - double fSlow170 = (fSlow145 + fSlow169); - double fSlow171 = (3.0 * (fSlow170 * fSlow14)); - double fSlow172 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow170)) + -1.0) * fSlow24)); - double fSlow173 = (0.95346258924559235 * (cos((fSlow6 + -5.9614347527829432)) * fSlow9)); - double fSlow174 = (fSlow145 + fSlow173); - double fSlow175 = (3.0 * (fSlow174 * fSlow14)); - double fSlow176 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow174)) + -1.0) * fSlow24)); - double fSlow177 = (fSlow144 - fSlow145); - double fSlow178 = (3.0 * (fSlow177 * fSlow14)); - double fSlow179 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow177)) + -1.0) * fSlow24)); - double fSlow180 = (fSlow149 - fSlow145); - double fSlow181 = (3.0 * (fSlow180 * fSlow14)); - double fSlow182 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow180)) + -1.0) * fSlow24)); - double fSlow183 = (fSlow153 - fSlow145); - double fSlow184 = (3.0 * (fSlow183 * fSlow14)); - double fSlow185 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow183)) + -1.0) * fSlow24)); - double fSlow186 = (fSlow157 - fSlow145); - double fSlow187 = (3.0 * (fSlow186 * fSlow14)); - double fSlow188 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow186)) + -1.0) * fSlow24)); - double fSlow189 = (fSlow161 - fSlow145); - double fSlow190 = (3.0 * (fSlow189 * fSlow14)); - double fSlow191 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow189)) + -1.0) * fSlow24)); - double fSlow192 = (fSlow165 - fSlow145); - double fSlow193 = (3.0 * (fSlow192 * fSlow14)); - double fSlow194 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow192)) + -1.0) * fSlow24)); - double fSlow195 = (fSlow169 - fSlow145); - double fSlow196 = (3.0 * (fSlow195 * fSlow14)); - double fSlow197 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow195)) + -1.0) * fSlow24)); - double fSlow198 = (fSlow173 - fSlow145); - double fSlow199 = (3.0 * (fSlow198 * fSlow14)); - double fSlow200 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow198)) + -1.0) * fSlow24)); - double fSlow201 = (fSlow127 - fSlow128); - double fSlow202 = (3.0 * (fSlow201 * fSlow14)); - double fSlow203 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow201)) + -1.0) * fSlow24)); - double fSlow204 = (fSlow132 - fSlow128); - double fSlow205 = (3.0 * (fSlow204 * fSlow14)); - double fSlow206 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow204)) + -1.0) * fSlow24)); - double fSlow207 = (fSlow136 - fSlow128); - double fSlow208 = (3.0 * (fSlow207 * fSlow14)); - double fSlow209 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow207)) + -1.0) * fSlow24)); - double fSlow210 = (fSlow140 - fSlow128); - double fSlow211 = (3.0 * (fSlow210 * fSlow14)); - double fSlow212 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow210)) + -1.0) * fSlow24)); + double fSlow6 = (1.0 - double(fCheckbox2)); + double fSlow7 = double(fHslider2); + double fSlow8 = sin(fSlow7); + double fSlow9 = (3.0 * (fSlow6 * fSlow8)); + double fSlow10 = (fConst3 / fSlow1); + double fSlow11 = (fSlow10 + 1.0); + double fSlow12 = (fConst2 / (fSlow11 * fSlow1)); + double fSlow13 = (fConst3 / fSlow3); + double fSlow14 = (1.0 / (fSlow13 + 1.0)); + double fSlow15 = (((fSlow11 * fSlow0) * fSlow3) / fSlow1); + double fSlow16 = (fConst2 / fSlow3); + double fSlow17 = (fSlow2 * fSlow3); + double fSlow18 = (1.0 - double(fCheckbox3)); + double fSlow19 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow8)) + -1.0) * fSlow18)); + double fSlow20 = mydsp_faustpower2_f(fSlow10); + double fSlow21 = (((fConst4 / fSlow1) + (3.0 * fSlow20)) + 1.0); + double fSlow22 = (1.0 / fSlow21); + double fSlow23 = (12.0 * fSlow20); + double fSlow24 = ((fConst5 / fSlow1) + fSlow23); + double fSlow25 = mydsp_faustpower2_f(fSlow13); + double fSlow26 = (1.0 / (((fConst4 / fSlow3) + (3.0 * fSlow25)) + 1.0)); + double fSlow27 = (((fSlow21 * fSlow0) * fSlow3) / fSlow1); + double fSlow28 = (12.0 * fSlow25); + double fSlow29 = (fSlow28 + (fConst5 / fSlow3)); + double fSlow30 = double(fHslider3); + double fSlow31 = cos(fSlow30); + double fSlow32 = cos(fSlow7); + double fSlow33 = (3.0 * ((fSlow31 * fSlow6) * fSlow32)); + double fSlow34 = mydsp_faustpower2_f(fSlow32); + double fSlow35 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow31) * fSlow34)) + -1.0) * fSlow18)); + double fSlow36 = cos((fSlow30 + -1.5707963267948966)); + double fSlow37 = (3.0 * ((fSlow36 * fSlow6) * fSlow32)); + double fSlow38 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow36) * fSlow34)) + -1.0) * fSlow18)); + double fSlow39 = cos((fSlow30 + -3.1415926535897931)); + double fSlow40 = (3.0 * ((fSlow39 * fSlow6) * fSlow32)); + double fSlow41 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow39) * fSlow34)) + -1.0) * fSlow18)); + double fSlow42 = cos((fSlow30 + -4.7123889803846897)); + double fSlow43 = (3.0 * ((fSlow42 * fSlow6) * fSlow32)); + double fSlow44 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow42) * fSlow34)) + -1.0) * fSlow18)); + double fSlow45 = (fSlow31 * fSlow32); + double fSlow46 = ((6.123233995736766e-17 * fSlow45) - fSlow8); + double fSlow47 = (3.0 * (fSlow46 * fSlow6)); + double fSlow48 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow46)) + -1.0) * fSlow18)); + double fSlow49 = (0.70710678118654757 * fSlow45); + double fSlow50 = (0.70710678118654746 * fSlow8); + double fSlow51 = (fSlow49 + fSlow50); + double fSlow52 = (3.0 * (fSlow51 * fSlow6)); + double fSlow53 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow51)) + -1.0) * fSlow18)); + double fSlow54 = (0.70710678118654757 * (fSlow36 * fSlow32)); + double fSlow55 = (fSlow50 + fSlow54); + double fSlow56 = (3.0 * (fSlow55 * fSlow6)); + double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow55)) + -1.0) * fSlow18)); + double fSlow58 = (0.70710678118654757 * (fSlow39 * fSlow32)); + double fSlow59 = (fSlow50 + fSlow58); + double fSlow60 = (3.0 * (fSlow59 * fSlow6)); + double fSlow61 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow59)) + -1.0) * fSlow18)); + double fSlow62 = (0.70710678118654757 * (fSlow42 * fSlow32)); + double fSlow63 = (fSlow50 + fSlow62); + double fSlow64 = (3.0 * (fSlow63 * fSlow6)); + double fSlow65 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow63)) + -1.0) * fSlow18)); + double fSlow66 = cos((fSlow30 + -0.78539816339744828)); + double fSlow67 = (3.0 * ((fSlow66 * fSlow6) * fSlow32)); + double fSlow68 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow66) * fSlow34)) + -1.0) * fSlow18)); + double fSlow69 = cos((fSlow30 + -2.3561944901923448)); + double fSlow70 = (3.0 * ((fSlow69 * fSlow6) * fSlow32)); + double fSlow71 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow69) * fSlow34)) + -1.0) * fSlow18)); + double fSlow72 = cos((fSlow30 + -3.9269908169872414)); + double fSlow73 = (3.0 * ((fSlow72 * fSlow6) * fSlow32)); + double fSlow74 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow72) * fSlow34)) + -1.0) * fSlow18)); + double fSlow75 = cos((fSlow30 + -5.497787143782138)); + double fSlow76 = (3.0 * ((fSlow75 * fSlow6) * fSlow32)); + double fSlow77 = (2.5 * (((3.0 * (mydsp_faustpower2_f(fSlow75) * fSlow34)) + -1.0) * fSlow18)); + double fSlow78 = (fSlow49 - fSlow50); + double fSlow79 = (3.0 * (fSlow78 * fSlow6)); + double fSlow80 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow78)) + -1.0) * fSlow18)); + double fSlow81 = (fSlow54 - fSlow50); + double fSlow82 = (3.0 * (fSlow81 * fSlow6)); + double fSlow83 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow81)) + -1.0) * fSlow18)); + double fSlow84 = (fSlow58 - fSlow50); + double fSlow85 = (3.0 * (fSlow84 * fSlow6)); + double fSlow86 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow84)) + -1.0) * fSlow18)); + double fSlow87 = (fSlow62 - fSlow50); + double fSlow88 = (3.0 * (fSlow87 * fSlow6)); + double fSlow89 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow87)) + -1.0) * fSlow18)); + double fSlow90 = (0.81649658092772592 * (fSlow66 * fSlow32)); + double fSlow91 = (0.57735026918962584 * fSlow8); + double fSlow92 = (fSlow90 + fSlow91); + double fSlow93 = (3.0 * (fSlow92 * fSlow6)); + double fSlow94 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow92)) + -1.0) * fSlow18)); + double fSlow95 = (fSlow69 * fSlow32); + double fSlow96 = (0.81649658092772592 * fSlow95); + double fSlow97 = (fSlow91 + fSlow96); + double fSlow98 = (3.0 * (fSlow97 * fSlow6)); + double fSlow99 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow97)) + -1.0) * fSlow18)); + double fSlow100 = (fSlow72 * fSlow32); + double fSlow101 = (0.81649658092772592 * fSlow100); + double fSlow102 = (fSlow91 + fSlow101); + double fSlow103 = (3.0 * (fSlow102 * fSlow6)); + double fSlow104 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow102)) + -1.0) * fSlow18)); + double fSlow105 = (fSlow75 * fSlow32); + double fSlow106 = (0.81649658092772592 * fSlow105); + double fSlow107 = (fSlow91 + fSlow106); + double fSlow108 = (3.0 * (fSlow107 * fSlow6)); + double fSlow109 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow107)) + -1.0) * fSlow18)); + double fSlow110 = (fSlow90 - fSlow91); + double fSlow111 = (3.0 * (fSlow110 * fSlow6)); + double fSlow112 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow110)) + -1.0) * fSlow18)); + double fSlow113 = (fSlow96 - fSlow91); + double fSlow114 = (3.0 * (fSlow113 * fSlow6)); + double fSlow115 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow113)) + -1.0) * fSlow18)); + double fSlow116 = (fSlow101 - fSlow91); + double fSlow117 = (3.0 * (fSlow116 * fSlow6)); + double fSlow118 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow116)) + -1.0) * fSlow18)); + double fSlow119 = (fSlow106 - fSlow91); + double fSlow120 = (3.0 * (fSlow119 * fSlow6)); + double fSlow121 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow119)) + -1.0) * fSlow18)); + double fSlow122 = (0.42640143271122027 * (cos((fSlow30 + -0.78539816339744839)) * fSlow32)); + double fSlow123 = (0.90453403373329111 * fSlow8); + double fSlow124 = (fSlow122 + fSlow123); + double fSlow125 = (3.0 * (fSlow124 * fSlow6)); + double fSlow126 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow124)) + -1.0) * fSlow18)); + double fSlow127 = (0.42640143271122027 * fSlow95); + double fSlow128 = (fSlow123 + fSlow127); + double fSlow129 = (3.0 * (fSlow128 * fSlow6)); + double fSlow130 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow128)) + -1.0) * fSlow18)); + double fSlow131 = (0.42640143271122027 * fSlow100); + double fSlow132 = (fSlow123 + fSlow131); + double fSlow133 = (3.0 * (fSlow132 * fSlow6)); + double fSlow134 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow132)) + -1.0) * fSlow18)); + double fSlow135 = (0.42640143271122027 * fSlow105); + double fSlow136 = (fSlow123 + fSlow135); + double fSlow137 = (3.0 * (fSlow136 * fSlow6)); + double fSlow138 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow136)) + -1.0) * fSlow18)); + double fSlow139 = (0.95346258924559235 * (cos((fSlow30 + -0.32175055439664263)) * fSlow32)); + double fSlow140 = (0.30151134457776352 * fSlow8); + double fSlow141 = (fSlow139 + fSlow140); + double fSlow142 = (3.0 * (fSlow141 * fSlow6)); + double fSlow143 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow141)) + -1.0) * fSlow18)); + double fSlow144 = (0.95346258924559235 * (cos((fSlow30 + -1.2490457723982544)) * fSlow32)); + double fSlow145 = (fSlow140 + fSlow144); + double fSlow146 = (3.0 * (fSlow145 * fSlow6)); + double fSlow147 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow145)) + -1.0) * fSlow18)); + double fSlow148 = (0.95346258924559235 * (cos((fSlow30 + -1.8925468811915387)) * fSlow32)); + double fSlow149 = (fSlow140 + fSlow148); + double fSlow150 = (3.0 * (fSlow149 * fSlow6)); + double fSlow151 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow149)) + -1.0) * fSlow18)); + double fSlow152 = (0.95346258924559235 * (cos((fSlow30 + -2.8198420991931505)) * fSlow32)); + double fSlow153 = (fSlow140 + fSlow152); + double fSlow154 = (3.0 * (fSlow153 * fSlow6)); + double fSlow155 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow153)) + -1.0) * fSlow18)); + double fSlow156 = (0.95346258924559235 * (cos((fSlow30 + -3.4633432079864357)) * fSlow32)); + double fSlow157 = (fSlow140 + fSlow156); + double fSlow158 = (3.0 * (fSlow157 * fSlow6)); + double fSlow159 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow157)) + -1.0) * fSlow18)); + double fSlow160 = (0.95346258924559235 * (cos((fSlow30 + -4.3906384259880475)) * fSlow32)); + double fSlow161 = (fSlow140 + fSlow160); + double fSlow162 = (3.0 * (fSlow161 * fSlow6)); + double fSlow163 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow161)) + -1.0) * fSlow18)); + double fSlow164 = (0.95346258924559235 * (cos((fSlow30 + -5.0341395347813318)) * fSlow32)); + double fSlow165 = (fSlow140 + fSlow164); + double fSlow166 = (3.0 * (fSlow165 * fSlow6)); + double fSlow167 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow165)) + -1.0) * fSlow18)); + double fSlow168 = (0.95346258924559235 * (cos((fSlow30 + -5.9614347527829432)) * fSlow32)); + double fSlow169 = (fSlow140 + fSlow168); + double fSlow170 = (3.0 * (fSlow169 * fSlow6)); + double fSlow171 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow169)) + -1.0) * fSlow18)); + double fSlow172 = (fSlow139 - fSlow140); + double fSlow173 = (3.0 * (fSlow172 * fSlow6)); + double fSlow174 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow172)) + -1.0) * fSlow18)); + double fSlow175 = (fSlow144 - fSlow140); + double fSlow176 = (3.0 * (fSlow175 * fSlow6)); + double fSlow177 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow175)) + -1.0) * fSlow18)); + double fSlow178 = (fSlow148 - fSlow140); + double fSlow179 = (3.0 * (fSlow178 * fSlow6)); + double fSlow180 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow178)) + -1.0) * fSlow18)); + double fSlow181 = (fSlow152 - fSlow140); + double fSlow182 = (3.0 * (fSlow181 * fSlow6)); + double fSlow183 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow181)) + -1.0) * fSlow18)); + double fSlow184 = (fSlow156 - fSlow140); + double fSlow185 = (3.0 * (fSlow184 * fSlow6)); + double fSlow186 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow184)) + -1.0) * fSlow18)); + double fSlow187 = (fSlow160 - fSlow140); + double fSlow188 = (3.0 * (fSlow187 * fSlow6)); + double fSlow189 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow187)) + -1.0) * fSlow18)); + double fSlow190 = (fSlow164 - fSlow140); + double fSlow191 = (3.0 * (fSlow190 * fSlow6)); + double fSlow192 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow190)) + -1.0) * fSlow18)); + double fSlow193 = (fSlow168 - fSlow140); + double fSlow194 = (3.0 * (fSlow193 * fSlow6)); + double fSlow195 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow193)) + -1.0) * fSlow18)); + double fSlow196 = (fSlow122 - fSlow123); + double fSlow197 = (3.0 * (fSlow196 * fSlow6)); + double fSlow198 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow196)) + -1.0) * fSlow18)); + double fSlow199 = (fSlow127 - fSlow123); + double fSlow200 = (3.0 * (fSlow199 * fSlow6)); + double fSlow201 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow199)) + -1.0) * fSlow18)); + double fSlow202 = (fSlow131 - fSlow123); + double fSlow203 = (3.0 * (fSlow202 * fSlow6)); + double fSlow204 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow202)) + -1.0) * fSlow18)); + double fSlow205 = (fSlow135 - fSlow123); + double fSlow206 = (3.0 * (fSlow205 * fSlow6)); + double fSlow207 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow205)) + -1.0) * fSlow18)); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); double fTemp0 = (fRec1[0] * double(input0[i])); double fTemp1 = (fSlow4 * fTemp0); fRec4[0] = (fRec4[1] + fRec3[1]); - fRec3[0] = (fSlow20 * ((fSlow21 * fTemp0) - (fSlow22 * fRec4[0]))); + fRec3[0] = (fSlow14 * ((fSlow15 * fTemp0) - (fSlow16 * fRec4[0]))); fRec2[0] = (fRec3[0] + fRec2[1]); - double fTemp2 = (fSlow23 * fTemp0); + double fTemp2 = (fSlow17 * fTemp0); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow20 * (fTemp2 - (fSlow22 * fRec6[0]))); - double fTemp3 = ((fSlow18 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); + fRec5[0] = (fSlow14 * (fTemp2 - (fSlow16 * fRec6[0]))); + double fTemp3 = ((fSlow12 * (fRec2[0] - fRec3[0])) + (fRec3[0] + fRec5[0])); fRec9[0] = (fRec9[1] + fRec8[1]); fRec10[0] = (fRec10[1] + fRec9[1]); - fRec8[0] = (fSlow32 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec9[0]) + (fSlow34 * fRec10[0])))); + fRec8[0] = (fSlow26 * ((fSlow27 * fTemp0) - ((fSlow29 * fRec9[0]) + (fSlow28 * fRec10[0])))); fRec7[0] = (fRec8[0] + fRec7[1]); double fTemp4 = (fRec7[0] - fRec8[0]); fVec0[0] = fTemp4; fRec11[0] = (fRec11[1] + fVec0[1]); fRec13[0] = (fRec13[1] + fRec12[1]); fRec14[0] = (fRec14[1] + fRec13[1]); - fRec12[0] = (fSlow32 * (fTemp2 - ((fSlow35 * fRec13[0]) + (fSlow34 * fRec14[0])))); - double fTemp5 = ((fSlow28 * ((fSlow30 * fTemp4) + (fSlow29 * fRec11[0]))) + (fRec8[0] + fRec12[0])); - double fTemp6 = (0.012698412698412698 * ((fTemp1 + (fSlow15 * fTemp3)) + (fSlow25 * fTemp5))); + fRec12[0] = (fSlow26 * (fTemp2 - ((fSlow29 * fRec13[0]) + (fSlow28 * fRec14[0])))); + double fTemp5 = ((fSlow22 * ((fSlow24 * fTemp4) + (fSlow23 * fRec11[0]))) + (fRec8[0] + fRec12[0])); + double fTemp6 = (0.012698412698412698 * ((fTemp1 + (fSlow9 * fTemp3)) + (fSlow19 * fTemp5))); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp6); - double fTemp7 = (0.012698412698412698 * ((fTemp1 + (fSlow36 * fTemp3)) + (fSlow37 * fTemp5))); + double fTemp7 = (0.012698412698412698 * ((fTemp1 + (fSlow33 * fTemp3)) + (fSlow35 * fTemp5))); fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); fVbargraph1 = FAUSTFLOAT(fRec15[0]); output1[i] = FAUSTFLOAT(fTemp7); - double fTemp8 = (0.012698412698412698 * ((fTemp1 + (fSlow39 * fTemp3)) + (fSlow41 * fTemp5))); + double fTemp8 = (0.012698412698412698 * ((fTemp1 + (fSlow37 * fTemp3)) + (fSlow38 * fTemp5))); fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph2 = FAUSTFLOAT(fRec16[0]); output2[i] = FAUSTFLOAT(fTemp8); - double fTemp9 = (0.012698412698412698 * ((fTemp1 + (fSlow43 * fTemp3)) + (fSlow45 * fTemp5))); + double fTemp9 = (0.012698412698412698 * ((fTemp1 + (fSlow40 * fTemp3)) + (fSlow41 * fTemp5))); fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph3 = FAUSTFLOAT(fRec17[0]); output3[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (0.012698412698412698 * ((fTemp1 + (fSlow47 * fTemp3)) + (fSlow49 * fTemp5))); + double fTemp10 = (0.012698412698412698 * ((fTemp1 + (fSlow43 * fTemp3)) + (fSlow44 * fTemp5))); fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph4 = FAUSTFLOAT(fRec18[0]); output4[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (0.012698412698412698 * ((fTemp1 + (fSlow51 * fTemp3)) + (fSlow52 * fTemp5))); + double fTemp11 = (0.012698412698412698 * ((fTemp1 + (fSlow47 * fTemp3)) + (fSlow48 * fTemp5))); fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph5 = FAUSTFLOAT(fRec19[0]); output5[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.022574955908289243 * ((fTemp1 + (fSlow56 * fTemp3)) + (fSlow57 * fTemp5))); + double fTemp12 = (0.022574955908289243 * ((fTemp1 + (fSlow52 * fTemp3)) + (fSlow53 * fTemp5))); fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph6 = FAUSTFLOAT(fRec20[0]); output6[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (0.022574955908289243 * ((fTemp1 + (fSlow60 * fTemp3)) + (fSlow61 * fTemp5))); + double fTemp13 = (0.022574955908289243 * ((fTemp1 + (fSlow56 * fTemp3)) + (fSlow57 * fTemp5))); fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph7 = FAUSTFLOAT(fRec21[0]); output7[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = (0.022574955908289243 * ((fTemp1 + (fSlow64 * fTemp3)) + (fSlow65 * fTemp5))); + double fTemp14 = (0.022574955908289243 * ((fTemp1 + (fSlow60 * fTemp3)) + (fSlow61 * fTemp5))); fRec22[0] = max((fRec22[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph8 = FAUSTFLOAT(fRec22[0]); output8[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (0.022574955908289243 * ((fTemp1 + (fSlow68 * fTemp3)) + (fSlow69 * fTemp5))); + double fTemp15 = (0.022574955908289243 * ((fTemp1 + (fSlow64 * fTemp3)) + (fSlow65 * fTemp5))); fRec23[0] = max((fRec23[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph9 = FAUSTFLOAT(fRec23[0]); output9[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (0.022574955908289243 * ((fTemp1 + (fSlow71 * fTemp3)) + (fSlow73 * fTemp5))); + double fTemp16 = (0.022574955908289243 * ((fTemp1 + (fSlow67 * fTemp3)) + (fSlow68 * fTemp5))); fRec24[0] = max((fRec24[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph10 = FAUSTFLOAT(fRec24[0]); output10[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (0.022574955908289243 * ((fTemp1 + (fSlow75 * fTemp3)) + (fSlow77 * fTemp5))); + double fTemp17 = (0.022574955908289243 * ((fTemp1 + (fSlow70 * fTemp3)) + (fSlow71 * fTemp5))); fRec25[0] = max((fRec25[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph11 = FAUSTFLOAT(fRec25[0]); output11[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.022574955908289243 * ((fTemp1 + (fSlow79 * fTemp3)) + (fSlow81 * fTemp5))); + double fTemp18 = (0.022574955908289243 * ((fTemp1 + (fSlow73 * fTemp3)) + (fSlow74 * fTemp5))); fRec26[0] = max((fRec26[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph12 = FAUSTFLOAT(fRec26[0]); output12[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.022574955908289243 * ((fTemp1 + (fSlow83 * fTemp3)) + (fSlow85 * fTemp5))); + double fTemp19 = (0.022574955908289243 * ((fTemp1 + (fSlow76 * fTemp3)) + (fSlow77 * fTemp5))); fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph13 = FAUSTFLOAT(fRec27[0]); output13[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (0.022574955908289243 * ((fTemp1 + (fSlow87 * fTemp3)) + (fSlow88 * fTemp5))); + double fTemp20 = (0.022574955908289243 * ((fTemp1 + (fSlow79 * fTemp3)) + (fSlow80 * fTemp5))); fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph14 = FAUSTFLOAT(fRec28[0]); output14[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (0.022574955908289243 * ((fTemp1 + (fSlow90 * fTemp3)) + (fSlow91 * fTemp5))); + double fTemp21 = (0.022574955908289243 * ((fTemp1 + (fSlow82 * fTemp3)) + (fSlow83 * fTemp5))); fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph15 = FAUSTFLOAT(fRec29[0]); output15[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (0.022574955908289243 * ((fTemp1 + (fSlow93 * fTemp3)) + (fSlow94 * fTemp5))); + double fTemp22 = (0.022574955908289243 * ((fTemp1 + (fSlow85 * fTemp3)) + (fSlow86 * fTemp5))); fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph16 = FAUSTFLOAT(fRec30[0]); output16[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (0.022574955908289243 * ((fTemp1 + (fSlow96 * fTemp3)) + (fSlow97 * fTemp5))); + double fTemp23 = (0.022574955908289243 * ((fTemp1 + (fSlow88 * fTemp3)) + (fSlow89 * fTemp5))); fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph17 = FAUSTFLOAT(fRec31[0]); output17[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.021093750000000001 * ((fTemp1 + (fSlow101 * fTemp3)) + (fSlow102 * fTemp5))); + double fTemp24 = (0.021093750000000001 * ((fTemp1 + (fSlow93 * fTemp3)) + (fSlow94 * fTemp5))); fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph18 = FAUSTFLOAT(fRec32[0]); output18[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (0.021093750000000001 * ((fTemp1 + (fSlow105 * fTemp3)) + (fSlow106 * fTemp5))); + double fTemp25 = (0.021093750000000001 * ((fTemp1 + (fSlow98 * fTemp3)) + (fSlow99 * fTemp5))); fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph19 = FAUSTFLOAT(fRec33[0]); output19[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (0.021093750000000001 * ((fTemp1 + (fSlow109 * fTemp3)) + (fSlow110 * fTemp5))); + double fTemp26 = (0.021093750000000001 * ((fTemp1 + (fSlow103 * fTemp3)) + (fSlow104 * fTemp5))); fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph20 = FAUSTFLOAT(fRec34[0]); output20[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (0.021093750000000001 * ((fTemp1 + (fSlow113 * fTemp3)) + (fSlow114 * fTemp5))); + double fTemp27 = (0.021093750000000001 * ((fTemp1 + (fSlow108 * fTemp3)) + (fSlow109 * fTemp5))); fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph21 = FAUSTFLOAT(fRec35[0]); output21[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (0.021093750000000001 * ((fTemp1 + (fSlow116 * fTemp3)) + (fSlow117 * fTemp5))); + double fTemp28 = (0.021093750000000001 * ((fTemp1 + (fSlow111 * fTemp3)) + (fSlow112 * fTemp5))); fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph22 = FAUSTFLOAT(fRec36[0]); output22[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (0.021093750000000001 * ((fTemp1 + (fSlow119 * fTemp3)) + (fSlow120 * fTemp5))); + double fTemp29 = (0.021093750000000001 * ((fTemp1 + (fSlow114 * fTemp3)) + (fSlow115 * fTemp5))); fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph23 = FAUSTFLOAT(fRec37[0]); output23[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.021093750000000001 * ((fTemp1 + (fSlow122 * fTemp3)) + (fSlow123 * fTemp5))); + double fTemp30 = (0.021093750000000001 * ((fTemp1 + (fSlow117 * fTemp3)) + (fSlow118 * fTemp5))); fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph24 = FAUSTFLOAT(fRec38[0]); output24[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.021093750000000001 * ((fTemp1 + (fSlow125 * fTemp3)) + (fSlow126 * fTemp5))); + double fTemp31 = (0.021093750000000001 * ((fTemp1 + (fSlow120 * fTemp3)) + (fSlow121 * fTemp5))); fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph25 = FAUSTFLOAT(fRec39[0]); output25[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (0.02017333553791887 * ((fTemp1 + (fSlow130 * fTemp3)) + (fSlow131 * fTemp5))); + double fTemp32 = (0.02017333553791887 * ((fTemp1 + (fSlow125 * fTemp3)) + (fSlow126 * fTemp5))); fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph26 = FAUSTFLOAT(fRec40[0]); output26[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (0.02017333553791887 * ((fTemp1 + (fSlow134 * fTemp3)) + (fSlow135 * fTemp5))); + double fTemp33 = (0.02017333553791887 * ((fTemp1 + (fSlow129 * fTemp3)) + (fSlow130 * fTemp5))); fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph27 = FAUSTFLOAT(fRec41[0]); output27[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (0.02017333553791887 * ((fTemp1 + (fSlow138 * fTemp3)) + (fSlow139 * fTemp5))); + double fTemp34 = (0.02017333553791887 * ((fTemp1 + (fSlow133 * fTemp3)) + (fSlow134 * fTemp5))); fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph28 = FAUSTFLOAT(fRec42[0]); output28[i] = FAUSTFLOAT(fTemp34); - double fTemp35 = (0.02017333553791887 * ((fTemp1 + (fSlow142 * fTemp3)) + (fSlow143 * fTemp5))); + double fTemp35 = (0.02017333553791887 * ((fTemp1 + (fSlow137 * fTemp3)) + (fSlow138 * fTemp5))); fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); fVbargraph29 = FAUSTFLOAT(fRec43[0]); output29[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (0.02017333553791887 * ((fTemp1 + (fSlow147 * fTemp3)) + (fSlow148 * fTemp5))); + double fTemp36 = (0.02017333553791887 * ((fTemp1 + (fSlow142 * fTemp3)) + (fSlow143 * fTemp5))); fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph30 = FAUSTFLOAT(fRec44[0]); output30[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = (0.02017333553791887 * ((fTemp1 + (fSlow151 * fTemp3)) + (fSlow152 * fTemp5))); + double fTemp37 = (0.02017333553791887 * ((fTemp1 + (fSlow146 * fTemp3)) + (fSlow147 * fTemp5))); fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph31 = FAUSTFLOAT(fRec45[0]); output31[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = (0.02017333553791887 * ((fTemp1 + (fSlow155 * fTemp3)) + (fSlow156 * fTemp5))); + double fTemp38 = (0.02017333553791887 * ((fTemp1 + (fSlow150 * fTemp3)) + (fSlow151 * fTemp5))); fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); fVbargraph32 = FAUSTFLOAT(fRec46[0]); output32[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (0.02017333553791887 * ((fTemp1 + (fSlow159 * fTemp3)) + (fSlow160 * fTemp5))); + double fTemp39 = (0.02017333553791887 * ((fTemp1 + (fSlow154 * fTemp3)) + (fSlow155 * fTemp5))); fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph33 = FAUSTFLOAT(fRec47[0]); output33[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (0.02017333553791887 * ((fTemp1 + (fSlow163 * fTemp3)) + (fSlow164 * fTemp5))); + double fTemp40 = (0.02017333553791887 * ((fTemp1 + (fSlow158 * fTemp3)) + (fSlow159 * fTemp5))); fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph34 = FAUSTFLOAT(fRec48[0]); output34[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (0.02017333553791887 * ((fTemp1 + (fSlow167 * fTemp3)) + (fSlow168 * fTemp5))); + double fTemp41 = (0.02017333553791887 * ((fTemp1 + (fSlow162 * fTemp3)) + (fSlow163 * fTemp5))); fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph35 = FAUSTFLOAT(fRec49[0]); output35[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (0.02017333553791887 * ((fTemp1 + (fSlow171 * fTemp3)) + (fSlow172 * fTemp5))); + double fTemp42 = (0.02017333553791887 * ((fTemp1 + (fSlow166 * fTemp3)) + (fSlow167 * fTemp5))); fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph36 = FAUSTFLOAT(fRec50[0]); output36[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (0.02017333553791887 * ((fTemp1 + (fSlow175 * fTemp3)) + (fSlow176 * fTemp5))); + double fTemp43 = (0.02017333553791887 * ((fTemp1 + (fSlow170 * fTemp3)) + (fSlow171 * fTemp5))); fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph37 = FAUSTFLOAT(fRec51[0]); output37[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (0.02017333553791887 * ((fTemp1 + (fSlow178 * fTemp3)) + (fSlow179 * fTemp5))); + double fTemp44 = (0.02017333553791887 * ((fTemp1 + (fSlow173 * fTemp3)) + (fSlow174 * fTemp5))); fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph38 = FAUSTFLOAT(fRec52[0]); output38[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (0.02017333553791887 * ((fTemp1 + (fSlow181 * fTemp3)) + (fSlow182 * fTemp5))); + double fTemp45 = (0.02017333553791887 * ((fTemp1 + (fSlow176 * fTemp3)) + (fSlow177 * fTemp5))); fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph39 = FAUSTFLOAT(fRec53[0]); output39[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (0.02017333553791887 * ((fTemp1 + (fSlow184 * fTemp3)) + (fSlow185 * fTemp5))); + double fTemp46 = (0.02017333553791887 * ((fTemp1 + (fSlow179 * fTemp3)) + (fSlow180 * fTemp5))); fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph40 = FAUSTFLOAT(fRec54[0]); output40[i] = FAUSTFLOAT(fTemp46); - double fTemp47 = (0.02017333553791887 * ((fTemp1 + (fSlow187 * fTemp3)) + (fSlow188 * fTemp5))); + double fTemp47 = (0.02017333553791887 * ((fTemp1 + (fSlow182 * fTemp3)) + (fSlow183 * fTemp5))); fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph41 = FAUSTFLOAT(fRec55[0]); output41[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (0.02017333553791887 * ((fTemp1 + (fSlow190 * fTemp3)) + (fSlow191 * fTemp5))); + double fTemp48 = (0.02017333553791887 * ((fTemp1 + (fSlow185 * fTemp3)) + (fSlow186 * fTemp5))); fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph42 = FAUSTFLOAT(fRec56[0]); output42[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (0.02017333553791887 * ((fTemp1 + (fSlow193 * fTemp3)) + (fSlow194 * fTemp5))); + double fTemp49 = (0.02017333553791887 * ((fTemp1 + (fSlow188 * fTemp3)) + (fSlow189 * fTemp5))); fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph43 = FAUSTFLOAT(fRec57[0]); output43[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (0.02017333553791887 * ((fTemp1 + (fSlow196 * fTemp3)) + (fSlow197 * fTemp5))); + double fTemp50 = (0.02017333553791887 * ((fTemp1 + (fSlow191 * fTemp3)) + (fSlow192 * fTemp5))); fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph44 = FAUSTFLOAT(fRec58[0]); output44[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (0.02017333553791887 * ((fTemp1 + (fSlow199 * fTemp3)) + (fSlow200 * fTemp5))); + double fTemp51 = (0.02017333553791887 * ((fTemp1 + (fSlow194 * fTemp3)) + (fSlow195 * fTemp5))); fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph45 = FAUSTFLOAT(fRec59[0]); output45[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (0.02017333553791887 * ((fTemp1 + (fSlow202 * fTemp3)) + (fSlow203 * fTemp5))); + double fTemp52 = (0.02017333553791887 * ((fTemp1 + (fSlow197 * fTemp3)) + (fSlow198 * fTemp5))); fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph46 = FAUSTFLOAT(fRec60[0]); output46[i] = FAUSTFLOAT(fTemp52); - double fTemp53 = (0.02017333553791887 * ((fTemp1 + (fSlow205 * fTemp3)) + (fSlow206 * fTemp5))); + double fTemp53 = (0.02017333553791887 * ((fTemp1 + (fSlow200 * fTemp3)) + (fSlow201 * fTemp5))); fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); fVbargraph47 = FAUSTFLOAT(fRec61[0]); output47[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = (0.02017333553791887 * ((fTemp1 + (fSlow208 * fTemp3)) + (fSlow209 * fTemp5))); + double fTemp54 = (0.02017333553791887 * ((fTemp1 + (fSlow203 * fTemp3)) + (fSlow204 * fTemp5))); fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); fVbargraph48 = FAUSTFLOAT(fRec62[0]); output48[i] = FAUSTFLOAT(fTemp54); - double fTemp55 = (0.02017333553791887 * ((fTemp1 + (fSlow211 * fTemp3)) + (fSlow212 * fTemp5))); + double fTemp55 = (0.02017333553791887 * ((fTemp1 + (fSlow206 * fTemp3)) + (fSlow207 * fTemp5))); fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); fVbargraph49 = FAUSTFLOAT(fRec63[0]); output49[i] = FAUSTFLOAT(fTemp55); @@ -2194,7 +2203,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2426,7 +2434,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2489,7 +2497,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2518,11 +2526,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAPanLebedev503.cpp b/source/HOAUGens/HOAPanLebedev503.cpp index 8203eea0e3..11e8bebfb9 100644 --- a/source/HOAUGens/HOAPanLebedev503.cpp +++ b/source/HOAUGens/HOAPanLebedev503.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev503" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,27 +613,23 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double cos(double dummy0); -double sin(double dummy0); -double pow(double dummy0, double dummy1); double mydsp_faustpower2_f(double value) { return (value * value); -} -double fabs(double dummy0); -double log10(double dummy0); -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -629,14 +639,13 @@ class mydsp : public dsp { double fConst0; double fConst1; FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; FAUSTFLOAT fCheckbox0; double fConst2; double fConst3; - FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider1; FAUSTFLOAT fEntry0; FAUSTFLOAT fCheckbox1; - FAUSTFLOAT fHslider3; + FAUSTFLOAT fHslider2; double fRec3[2]; double fRec4[2]; double fRec2[2]; @@ -677,6 +686,7 @@ class mydsp : public dsp { double fRec25[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec28[2]; FAUSTFLOAT fVbargraph1; double fRec29[2]; @@ -783,36 +793,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev503"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1058,7 +1068,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -1073,15 +1083,15 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.0); - fHslider1 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(2.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); - fHslider3 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); fCheckbox2 = FAUSTFLOAT(0.0); fCheckbox3 = FAUSTFLOAT(0.0); fCheckbox4 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -1418,30 +1428,30 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAPanLebedev503"); ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fHslider3, "0+1", ""); - ui_interface->declare(&fHslider3, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider3, 0.0, -30.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider2, "0+2", ""); - ui_interface->declare(&fHslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider2, "0+1", ""); + ui_interface->declare(&fHslider2, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider2, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider0, "0+3", ""); - ui_interface->declare(&fHslider0, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+4", ""); - ui_interface->declare(&fHslider1, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider2, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+4", ""); + ui_interface->declare(&fHslider0, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox1); @@ -1461,257 +1471,257 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34d4340", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2392eb0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34dcec0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x239d600", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34e66f0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23a5f90", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34f0000", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23aea00", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34f99f0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23b7550", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3501a90", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23bf940", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x350a960", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23c87b0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3512fb0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23d0da0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x351b6e0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23d9470", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3523ef0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23e1c20", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x352de20", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23eacb0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3537e30", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23f3e20", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3541f20", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x23fd070", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x354c0f0", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24063a0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3554970", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x240ebc0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x355d2d0", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24174c0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3565d10", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x241fea0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x356e830", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2428960", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3578180", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2432250", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3581250", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x243b2c0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x358a400", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2444410", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3593690", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x244d640", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x359c610", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2456560", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35a5670", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x245f560", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35ae7b0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2468640", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35b79d0", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2471800", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35c0fd0", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x247ada0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35c92a0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2483010", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35d1650", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x248b360", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35d9ae0", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2493790", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35e31b0", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x249ce00", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35ec1d0", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24a5dc0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35f52d0", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24aee60", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35fe4b0", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24b7fe0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3607770", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24c1240", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3610b10", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24ca580", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3619f90", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24d39a0", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36234f0", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24dcea0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x362bd70", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24e56c0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36346d0", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24edfc0", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x363d110", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24f69a0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3645c30", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x24ff460", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x364e830", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2508000", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3657510", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2510c80", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36602d0", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25199e0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3669170", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2522820", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36720f0", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x252b740", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x367b150", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2534740", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3684290", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x253d820", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x368d4b0", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x25469e0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1772,521 +1782,518 @@ class mydsp : public dsp { FAUSTFLOAT* output48 = outputs[48]; FAUSTFLOAT* output49 = outputs[49]; double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fHslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (6.123233995736766e-17 * fSlow4); - double fSlow6 = sin(fSlow2); - double fSlow7 = (fSlow5 + fSlow6); - double fSlow8 = (1.0 - double(fCheckbox0)); - double fSlow9 = (3.0 * fSlow8); - double fSlow10 = double(fHslider2); - double fSlow11 = (fConst3 / fSlow10); - double fSlow12 = (fSlow11 + 1.0); - double fSlow13 = (fConst2 / (fSlow12 * fSlow10)); - double fSlow14 = double(fEntry0); - double fSlow15 = (fConst3 / fSlow14); - double fSlow16 = (1.0 / (fSlow15 + 1.0)); - double fSlow17 = double(fCheckbox1); - double fSlow18 = (((fSlow12 * fSlow17) * fSlow14) / fSlow10); - double fSlow19 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider3)))); - double fSlow20 = (fConst2 / fSlow14); - double fSlow21 = (1.0 - fSlow17); - double fSlow22 = (fSlow21 * fSlow14); - double fSlow23 = mydsp_faustpower2_f(fSlow7); - double fSlow24 = (1.0 - double(fCheckbox2)); - double fSlow25 = (3.5 * (((5.0 * fSlow23) + -3.0) * fSlow24)); - double fSlow26 = ((fConst5 / fSlow10) + 1.0); - double fSlow27 = (fConst4 / (fSlow26 * fSlow10)); - double fSlow28 = (1.0 / ((fConst5 / fSlow14) + 1.0)); - double fSlow29 = mydsp_faustpower2_f(fSlow15); - double fSlow30 = (1.0 / (((fConst6 / fSlow14) + (6.4594326934833797 * fSlow29)) + 1.0)); - double fSlow31 = mydsp_faustpower2_f(fSlow11); - double fSlow32 = (((fConst6 / fSlow10) + (6.4594326934833797 * fSlow31)) + 1.0); - double fSlow33 = (((fSlow32 * fSlow17) * fSlow14) / fSlow10); - double fSlow34 = (25.837730773933519 * fSlow29); - double fSlow35 = (fSlow34 + (fConst7 / fSlow14)); - double fSlow36 = (1.0 / fSlow32); - double fSlow37 = (25.837730773933519 * fSlow31); - double fSlow38 = ((fConst7 / fSlow10) + fSlow37); - double fSlow39 = (fConst4 / fSlow14); - double fSlow40 = ((((fSlow17 / fSlow10) + fSlow21) * fSlow14) * (1.0 - double(fCheckbox3))); - double fSlow41 = (1.0 - double(fCheckbox4)); - double fSlow42 = (2.5 * (((3.0 * fSlow23) + -1.0) * fSlow41)); - double fSlow43 = (((fConst8 / fSlow10) + (3.0 * fSlow31)) + 1.0); - double fSlow44 = (1.0 / fSlow43); - double fSlow45 = (12.0 * fSlow31); - double fSlow46 = ((fConst9 / fSlow10) + fSlow45); - double fSlow47 = (1.0 / (((fConst8 / fSlow14) + (3.0 * fSlow29)) + 1.0)); - double fSlow48 = (((fSlow43 * fSlow17) * fSlow14) / fSlow10); - double fSlow49 = (12.0 * fSlow29); - double fSlow50 = (fSlow49 + (fConst9 / fSlow14)); - double fSlow51 = (3.0 * ((fSlow1 * fSlow8) * fSlow3)); - double fSlow52 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow4)) + -1.0) * fSlow41)); - double fSlow53 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow4)) - (3.0 * fSlow4)) * fSlow24)); - double fSlow54 = cos((fSlow0 + -1.5707963267948966)); - double fSlow55 = (3.0 * ((fSlow54 * fSlow8) * fSlow3)); - double fSlow56 = (fSlow54 * fSlow3); - double fSlow57 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow56)) + -1.0) * fSlow41)); - double fSlow58 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow56)) - (3.0 * fSlow56)) * fSlow24)); - double fSlow59 = cos((fSlow0 + -3.1415926535897931)); - double fSlow60 = (3.0 * ((fSlow59 * fSlow8) * fSlow3)); - double fSlow61 = (fSlow59 * fSlow3); - double fSlow62 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow61)) + -1.0) * fSlow41)); - double fSlow63 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow61)) - (3.0 * fSlow61)) * fSlow24)); - double fSlow64 = cos((fSlow0 + -4.7123889803846897)); - double fSlow65 = (3.0 * ((fSlow64 * fSlow8) * fSlow3)); - double fSlow66 = (fSlow64 * fSlow3); - double fSlow67 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow66)) + -1.0) * fSlow41)); - double fSlow68 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow66)) - (3.0 * fSlow66)) * fSlow24)); - double fSlow69 = (fSlow5 - fSlow6); - double fSlow70 = mydsp_faustpower2_f(fSlow69); - double fSlow71 = (3.5 * (((5.0 * fSlow70) + -3.0) * fSlow24)); - double fSlow72 = (2.5 * (((3.0 * fSlow70) + -1.0) * fSlow41)); - double fSlow73 = (0.70710678118654757 * fSlow4); - double fSlow74 = (0.70710678118654746 * fSlow6); - double fSlow75 = (fSlow73 + fSlow74); - double fSlow76 = mydsp_faustpower2_f(fSlow75); - double fSlow77 = (3.5 * (((5.0 * fSlow76) + -3.0) * fSlow24)); - double fSlow78 = (2.5 * (((3.0 * fSlow76) + -1.0) * fSlow41)); - double fSlow79 = (0.70710678118654757 * fSlow56); - double fSlow80 = (fSlow74 + fSlow79); - double fSlow81 = mydsp_faustpower2_f(fSlow80); - double fSlow82 = (3.5 * (((5.0 * fSlow81) + -3.0) * fSlow24)); - double fSlow83 = (2.5 * (((3.0 * fSlow81) + -1.0) * fSlow41)); - double fSlow84 = (0.70710678118654757 * fSlow61); - double fSlow85 = (fSlow74 + fSlow84); - double fSlow86 = mydsp_faustpower2_f(fSlow85); - double fSlow87 = (3.5 * (((5.0 * fSlow86) + -3.0) * fSlow24)); - double fSlow88 = (2.5 * (((3.0 * fSlow86) + -1.0) * fSlow41)); - double fSlow89 = (0.70710678118654757 * fSlow66); - double fSlow90 = (fSlow74 + fSlow89); - double fSlow91 = mydsp_faustpower2_f(fSlow90); - double fSlow92 = (3.5 * (((5.0 * fSlow91) + -3.0) * fSlow24)); - double fSlow93 = (2.5 * (((3.0 * fSlow91) + -1.0) * fSlow41)); - double fSlow94 = cos((fSlow0 + -0.78539816339744828)); - double fSlow95 = (3.0 * ((fSlow94 * fSlow8) * fSlow3)); - double fSlow96 = (fSlow94 * fSlow3); - double fSlow97 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow96)) + -1.0) * fSlow41)); - double fSlow98 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow96)) - (3.0 * fSlow96)) * fSlow24)); - double fSlow99 = cos((fSlow0 + -2.3561944901923448)); - double fSlow100 = (3.0 * ((fSlow99 * fSlow8) * fSlow3)); - double fSlow101 = (fSlow99 * fSlow3); - double fSlow102 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow101)) + -1.0) * fSlow41)); - double fSlow103 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow101)) - (3.0 * fSlow101)) * fSlow24)); - double fSlow104 = cos((fSlow0 + -3.9269908169872414)); - double fSlow105 = (3.0 * ((fSlow104 * fSlow8) * fSlow3)); - double fSlow106 = (fSlow104 * fSlow3); - double fSlow107 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow106)) + -1.0) * fSlow41)); - double fSlow108 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow106)) - (3.0 * fSlow106)) * fSlow24)); - double fSlow109 = cos((fSlow0 + -5.497787143782138)); - double fSlow110 = (3.0 * ((fSlow109 * fSlow8) * fSlow3)); - double fSlow111 = (fSlow109 * fSlow3); - double fSlow112 = (2.5 * (((3.0 * mydsp_faustpower2_f(fSlow111)) + -1.0) * fSlow41)); - double fSlow113 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow111)) - (3.0 * fSlow111)) * fSlow24)); - double fSlow114 = (fSlow73 - fSlow74); - double fSlow115 = mydsp_faustpower2_f(fSlow114); - double fSlow116 = (3.5 * (((5.0 * fSlow115) + -3.0) * fSlow24)); - double fSlow117 = (2.5 * (((3.0 * fSlow115) + -1.0) * fSlow41)); - double fSlow118 = (fSlow79 - fSlow74); - double fSlow119 = mydsp_faustpower2_f(fSlow118); - double fSlow120 = (3.5 * (((5.0 * fSlow119) + -3.0) * fSlow24)); - double fSlow121 = (2.5 * (((3.0 * fSlow119) + -1.0) * fSlow41)); - double fSlow122 = (fSlow84 - fSlow74); - double fSlow123 = mydsp_faustpower2_f(fSlow122); - double fSlow124 = (3.5 * (((5.0 * fSlow123) + -3.0) * fSlow24)); - double fSlow125 = (2.5 * (((3.0 * fSlow123) + -1.0) * fSlow41)); - double fSlow126 = (fSlow89 - fSlow74); - double fSlow127 = mydsp_faustpower2_f(fSlow126); - double fSlow128 = (3.5 * (((5.0 * fSlow127) + -3.0) * fSlow24)); - double fSlow129 = (2.5 * (((3.0 * fSlow127) + -1.0) * fSlow41)); - double fSlow130 = (0.81649658092772592 * fSlow96); - double fSlow131 = (0.57735026918962584 * fSlow6); - double fSlow132 = (fSlow130 + fSlow131); - double fSlow133 = mydsp_faustpower2_f(fSlow132); - double fSlow134 = (3.5 * (((5.0 * fSlow133) + -3.0) * fSlow24)); - double fSlow135 = (2.5 * (((3.0 * fSlow133) + -1.0) * fSlow41)); - double fSlow136 = (0.81649658092772592 * fSlow101); - double fSlow137 = (fSlow131 + fSlow136); - double fSlow138 = mydsp_faustpower2_f(fSlow137); - double fSlow139 = (3.5 * (((5.0 * fSlow138) + -3.0) * fSlow24)); - double fSlow140 = (2.5 * (((3.0 * fSlow138) + -1.0) * fSlow41)); - double fSlow141 = (0.81649658092772592 * fSlow106); - double fSlow142 = (fSlow131 + fSlow141); - double fSlow143 = mydsp_faustpower2_f(fSlow142); - double fSlow144 = (3.5 * (((5.0 * fSlow143) + -3.0) * fSlow24)); - double fSlow145 = (2.5 * (((3.0 * fSlow143) + -1.0) * fSlow41)); - double fSlow146 = (0.81649658092772592 * fSlow111); - double fSlow147 = (fSlow131 + fSlow146); - double fSlow148 = mydsp_faustpower2_f(fSlow147); - double fSlow149 = (3.5 * (((5.0 * fSlow148) + -3.0) * fSlow24)); - double fSlow150 = (2.5 * (((3.0 * fSlow148) + -1.0) * fSlow41)); - double fSlow151 = (fSlow130 - fSlow131); - double fSlow152 = mydsp_faustpower2_f(fSlow151); - double fSlow153 = (3.5 * (((5.0 * fSlow152) + -3.0) * fSlow24)); - double fSlow154 = (2.5 * (((3.0 * fSlow152) + -1.0) * fSlow41)); - double fSlow155 = (fSlow136 - fSlow131); - double fSlow156 = mydsp_faustpower2_f(fSlow155); - double fSlow157 = (3.5 * (((5.0 * fSlow156) + -3.0) * fSlow24)); - double fSlow158 = (2.5 * (((3.0 * fSlow156) + -1.0) * fSlow41)); - double fSlow159 = (fSlow141 - fSlow131); - double fSlow160 = mydsp_faustpower2_f(fSlow159); - double fSlow161 = (3.5 * (((5.0 * fSlow160) + -3.0) * fSlow24)); - double fSlow162 = (2.5 * (((3.0 * fSlow160) + -1.0) * fSlow41)); - double fSlow163 = (fSlow146 - fSlow131); - double fSlow164 = mydsp_faustpower2_f(fSlow163); - double fSlow165 = (3.5 * (((5.0 * fSlow164) + -3.0) * fSlow24)); - double fSlow166 = (2.5 * (((3.0 * fSlow164) + -1.0) * fSlow41)); - double fSlow167 = (0.42640143271122027 * (cos((fSlow0 + -0.78539816339744839)) * fSlow3)); - double fSlow168 = (0.90453403373329111 * fSlow6); - double fSlow169 = (fSlow167 + fSlow168); - double fSlow170 = mydsp_faustpower2_f(fSlow169); - double fSlow171 = (3.5 * (((5.0 * fSlow170) + -3.0) * fSlow24)); - double fSlow172 = (2.5 * (((3.0 * fSlow170) + -1.0) * fSlow41)); - double fSlow173 = (0.42640143271122027 * fSlow101); - double fSlow174 = (fSlow168 + fSlow173); - double fSlow175 = mydsp_faustpower2_f(fSlow174); - double fSlow176 = (3.5 * (((5.0 * fSlow175) + -3.0) * fSlow24)); - double fSlow177 = (2.5 * (((3.0 * fSlow175) + -1.0) * fSlow41)); - double fSlow178 = (0.42640143271122027 * fSlow106); - double fSlow179 = (fSlow168 + fSlow178); - double fSlow180 = mydsp_faustpower2_f(fSlow179); - double fSlow181 = (3.5 * (((5.0 * fSlow180) + -3.0) * fSlow24)); - double fSlow182 = (2.5 * (((3.0 * fSlow180) + -1.0) * fSlow41)); - double fSlow183 = (0.42640143271122027 * fSlow111); - double fSlow184 = (fSlow168 + fSlow183); - double fSlow185 = mydsp_faustpower2_f(fSlow184); - double fSlow186 = (3.5 * (((5.0 * fSlow185) + -3.0) * fSlow24)); - double fSlow187 = (2.5 * (((3.0 * fSlow185) + -1.0) * fSlow41)); - double fSlow188 = (0.95346258924559235 * (cos((fSlow0 + -0.32175055439664263)) * fSlow3)); - double fSlow189 = (0.30151134457776352 * fSlow6); - double fSlow190 = (fSlow188 + fSlow189); - double fSlow191 = mydsp_faustpower2_f(fSlow190); - double fSlow192 = (3.5 * (((5.0 * fSlow191) + -3.0) * fSlow24)); - double fSlow193 = (2.5 * (((3.0 * fSlow191) + -1.0) * fSlow41)); - double fSlow194 = (0.95346258924559235 * (cos((fSlow0 + -1.2490457723982544)) * fSlow3)); - double fSlow195 = (fSlow189 + fSlow194); - double fSlow196 = mydsp_faustpower2_f(fSlow195); - double fSlow197 = (3.5 * (((5.0 * fSlow196) + -3.0) * fSlow24)); - double fSlow198 = (2.5 * (((3.0 * fSlow196) + -1.0) * fSlow41)); - double fSlow199 = (0.95346258924559235 * (cos((fSlow0 + -1.8925468811915387)) * fSlow3)); - double fSlow200 = (fSlow189 + fSlow199); - double fSlow201 = mydsp_faustpower2_f(fSlow200); - double fSlow202 = (3.5 * (((5.0 * fSlow201) + -3.0) * fSlow24)); - double fSlow203 = (2.5 * (((3.0 * fSlow201) + -1.0) * fSlow41)); - double fSlow204 = (0.95346258924559235 * (cos((fSlow0 + -2.8198420991931505)) * fSlow3)); - double fSlow205 = (fSlow189 + fSlow204); - double fSlow206 = mydsp_faustpower2_f(fSlow205); - double fSlow207 = (3.5 * (((5.0 * fSlow206) + -3.0) * fSlow24)); - double fSlow208 = (2.5 * (((3.0 * fSlow206) + -1.0) * fSlow41)); - double fSlow209 = (0.95346258924559235 * (cos((fSlow0 + -3.4633432079864357)) * fSlow3)); - double fSlow210 = (fSlow189 + fSlow209); - double fSlow211 = mydsp_faustpower2_f(fSlow210); - double fSlow212 = (3.5 * (((5.0 * fSlow211) + -3.0) * fSlow24)); - double fSlow213 = (2.5 * (((3.0 * fSlow211) + -1.0) * fSlow41)); - double fSlow214 = (0.95346258924559235 * (cos((fSlow0 + -4.3906384259880475)) * fSlow3)); - double fSlow215 = (fSlow189 + fSlow214); - double fSlow216 = mydsp_faustpower2_f(fSlow215); - double fSlow217 = (3.5 * (((5.0 * fSlow216) + -3.0) * fSlow24)); - double fSlow218 = (2.5 * (((3.0 * fSlow216) + -1.0) * fSlow41)); - double fSlow219 = (0.95346258924559235 * (cos((fSlow0 + -5.0341395347813318)) * fSlow3)); - double fSlow220 = (fSlow189 + fSlow219); - double fSlow221 = mydsp_faustpower2_f(fSlow220); - double fSlow222 = (3.5 * (((5.0 * fSlow221) + -3.0) * fSlow24)); - double fSlow223 = (2.5 * (((3.0 * fSlow221) + -1.0) * fSlow41)); - double fSlow224 = (0.95346258924559235 * (cos((fSlow0 + -5.9614347527829432)) * fSlow3)); - double fSlow225 = (fSlow189 + fSlow224); - double fSlow226 = mydsp_faustpower2_f(fSlow225); - double fSlow227 = (3.5 * (((5.0 * fSlow226) + -3.0) * fSlow24)); - double fSlow228 = (2.5 * (((3.0 * fSlow226) + -1.0) * fSlow41)); - double fSlow229 = (fSlow188 - fSlow189); - double fSlow230 = mydsp_faustpower2_f(fSlow229); - double fSlow231 = (3.5 * (((5.0 * fSlow230) + -3.0) * fSlow24)); - double fSlow232 = (2.5 * (((3.0 * fSlow230) + -1.0) * fSlow41)); - double fSlow233 = (fSlow194 - fSlow189); - double fSlow234 = mydsp_faustpower2_f(fSlow233); - double fSlow235 = (3.5 * (((5.0 * fSlow234) + -3.0) * fSlow24)); - double fSlow236 = (2.5 * (((3.0 * fSlow234) + -1.0) * fSlow41)); - double fSlow237 = (fSlow199 - fSlow189); - double fSlow238 = mydsp_faustpower2_f(fSlow237); - double fSlow239 = (3.5 * (((5.0 * fSlow238) + -3.0) * fSlow24)); - double fSlow240 = (2.5 * (((3.0 * fSlow238) + -1.0) * fSlow41)); - double fSlow241 = (fSlow204 - fSlow189); - double fSlow242 = mydsp_faustpower2_f(fSlow241); - double fSlow243 = (3.5 * (((5.0 * fSlow242) + -3.0) * fSlow24)); - double fSlow244 = (2.5 * (((3.0 * fSlow242) + -1.0) * fSlow41)); - double fSlow245 = (fSlow209 - fSlow189); - double fSlow246 = mydsp_faustpower2_f(fSlow245); - double fSlow247 = (3.5 * (((5.0 * fSlow246) + -3.0) * fSlow24)); - double fSlow248 = (2.5 * (((3.0 * fSlow246) + -1.0) * fSlow41)); - double fSlow249 = (fSlow214 - fSlow189); - double fSlow250 = mydsp_faustpower2_f(fSlow249); - double fSlow251 = (3.5 * (((5.0 * fSlow250) + -3.0) * fSlow24)); - double fSlow252 = (2.5 * (((3.0 * fSlow250) + -1.0) * fSlow41)); - double fSlow253 = (fSlow219 - fSlow189); - double fSlow254 = mydsp_faustpower2_f(fSlow253); - double fSlow255 = (3.5 * (((5.0 * fSlow254) + -3.0) * fSlow24)); - double fSlow256 = (2.5 * (((3.0 * fSlow254) + -1.0) * fSlow41)); - double fSlow257 = (fSlow224 - fSlow189); - double fSlow258 = mydsp_faustpower2_f(fSlow257); - double fSlow259 = (3.5 * (((5.0 * fSlow258) + -3.0) * fSlow24)); - double fSlow260 = (2.5 * (((3.0 * fSlow258) + -1.0) * fSlow41)); - double fSlow261 = (fSlow167 - fSlow168); - double fSlow262 = mydsp_faustpower2_f(fSlow261); - double fSlow263 = (3.5 * (((5.0 * fSlow262) + -3.0) * fSlow24)); - double fSlow264 = (2.5 * (((3.0 * fSlow262) + -1.0) * fSlow41)); - double fSlow265 = (fSlow173 - fSlow168); - double fSlow266 = mydsp_faustpower2_f(fSlow265); - double fSlow267 = (3.5 * (((5.0 * fSlow266) + -3.0) * fSlow24)); - double fSlow268 = (2.5 * (((3.0 * fSlow266) + -1.0) * fSlow41)); - double fSlow269 = (fSlow178 - fSlow168); - double fSlow270 = mydsp_faustpower2_f(fSlow269); - double fSlow271 = (3.5 * (((5.0 * fSlow270) + -3.0) * fSlow24)); - double fSlow272 = (2.5 * (((3.0 * fSlow270) + -1.0) * fSlow41)); - double fSlow273 = (fSlow183 - fSlow168); - double fSlow274 = mydsp_faustpower2_f(fSlow273); - double fSlow275 = (3.5 * (((5.0 * fSlow274) + -3.0) * fSlow24)); - double fSlow276 = (2.5 * (((3.0 * fSlow274) + -1.0) * fSlow41)); + double fSlow1 = sin(fSlow0); + double fSlow2 = (3.0 * (1.0 - double(fCheckbox0))); + double fSlow3 = double(fHslider1); + double fSlow4 = (fConst3 / fSlow3); + double fSlow5 = (fSlow4 + 1.0); + double fSlow6 = (fConst2 / (fSlow5 * fSlow3)); + double fSlow7 = double(fEntry0); + double fSlow8 = (fConst3 / fSlow7); + double fSlow9 = (1.0 / (fSlow8 + 1.0)); + double fSlow10 = double(fCheckbox1); + double fSlow11 = (((fSlow5 * fSlow10) * fSlow7) / fSlow3); + double fSlow12 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider2)))); + double fSlow13 = (fConst2 / fSlow7); + double fSlow14 = (1.0 - fSlow10); + double fSlow15 = (fSlow14 * fSlow7); + double fSlow16 = ((3.0 * mydsp_faustpower2_f(fSlow1)) + -1.0); + double fSlow17 = (1.0 - double(fCheckbox2)); + double fSlow18 = (2.333333333333333 * (((2.5 * fSlow16) + -2.0) * fSlow17)); + double fSlow19 = ((fConst5 / fSlow3) + 1.0); + double fSlow20 = (fConst4 / (fSlow19 * fSlow3)); + double fSlow21 = (1.0 / ((fConst5 / fSlow7) + 1.0)); + double fSlow22 = mydsp_faustpower2_f(fSlow8); + double fSlow23 = (1.0 / (((fConst6 / fSlow7) + (6.4594326934833797 * fSlow22)) + 1.0)); + double fSlow24 = mydsp_faustpower2_f(fSlow4); + double fSlow25 = (((fConst6 / fSlow3) + (6.4594326934833797 * fSlow24)) + 1.0); + double fSlow26 = (((fSlow25 * fSlow10) * fSlow7) / fSlow3); + double fSlow27 = (25.837730773933519 * fSlow22); + double fSlow28 = (fSlow27 + (fConst7 / fSlow7)); + double fSlow29 = (1.0 / fSlow25); + double fSlow30 = (25.837730773933519 * fSlow24); + double fSlow31 = ((fConst7 / fSlow3) + fSlow30); + double fSlow32 = (fConst4 / fSlow7); + double fSlow33 = ((((fSlow10 / fSlow3) + fSlow14) * fSlow7) * (1.0 - double(fCheckbox3))); + double fSlow34 = (1.0 - double(fCheckbox4)); + double fSlow35 = (2.5 * (fSlow16 * fSlow34)); + double fSlow36 = (((fConst8 / fSlow3) + (3.0 * fSlow24)) + 1.0); + double fSlow37 = (1.0 / fSlow36); + double fSlow38 = (12.0 * fSlow24); + double fSlow39 = ((fConst9 / fSlow3) + fSlow38); + double fSlow40 = (1.0 / (((fConst8 / fSlow7) + (3.0 * fSlow22)) + 1.0)); + double fSlow41 = (((fSlow36 * fSlow10) * fSlow7) / fSlow3); + double fSlow42 = (12.0 * fSlow22); + double fSlow43 = (fSlow42 + (fConst9 / fSlow7)); + double fSlow44 = double(fHslider3); + double fSlow45 = cos(fSlow44); + double fSlow46 = cos(fSlow0); + double fSlow47 = (fSlow45 * fSlow46); + double fSlow48 = mydsp_faustpower2_f(fSlow46); + double fSlow49 = ((3.0 * (mydsp_faustpower2_f(fSlow45) * fSlow48)) + -1.0); + double fSlow50 = (2.333333333333333 * (((2.5 * fSlow49) + -2.0) * fSlow17)); + double fSlow51 = (2.5 * (fSlow49 * fSlow34)); + double fSlow52 = cos((fSlow44 + -1.5707963267948966)); + double fSlow53 = (fSlow52 * fSlow46); + double fSlow54 = ((3.0 * (mydsp_faustpower2_f(fSlow52) * fSlow48)) + -1.0); + double fSlow55 = (2.333333333333333 * (((2.5 * fSlow54) + -2.0) * fSlow17)); + double fSlow56 = (2.5 * (fSlow54 * fSlow34)); + double fSlow57 = cos((fSlow44 + -3.1415926535897931)); + double fSlow58 = (fSlow57 * fSlow46); + double fSlow59 = ((3.0 * (mydsp_faustpower2_f(fSlow57) * fSlow48)) + -1.0); + double fSlow60 = (2.333333333333333 * (((2.5 * fSlow59) + -2.0) * fSlow17)); + double fSlow61 = (2.5 * (fSlow59 * fSlow34)); + double fSlow62 = cos((fSlow44 + -4.7123889803846897)); + double fSlow63 = (fSlow62 * fSlow46); + double fSlow64 = ((3.0 * (mydsp_faustpower2_f(fSlow62) * fSlow48)) + -1.0); + double fSlow65 = (2.333333333333333 * (((2.5 * fSlow64) + -2.0) * fSlow17)); + double fSlow66 = (2.5 * (fSlow64 * fSlow34)); + double fSlow67 = ((6.123233995736766e-17 * fSlow47) - fSlow1); + double fSlow68 = ((3.0 * mydsp_faustpower2_f(fSlow67)) + -1.0); + double fSlow69 = (2.333333333333333 * (((2.5 * fSlow68) + -2.0) * fSlow17)); + double fSlow70 = (2.5 * (fSlow68 * fSlow34)); + double fSlow71 = (0.70710678118654757 * fSlow47); + double fSlow72 = (0.70710678118654746 * fSlow1); + double fSlow73 = (fSlow71 + fSlow72); + double fSlow74 = ((3.0 * mydsp_faustpower2_f(fSlow73)) + -1.0); + double fSlow75 = (2.333333333333333 * (((2.5 * fSlow74) + -2.0) * fSlow17)); + double fSlow76 = (2.5 * (fSlow74 * fSlow34)); + double fSlow77 = (0.70710678118654757 * fSlow53); + double fSlow78 = (fSlow72 + fSlow77); + double fSlow79 = ((3.0 * mydsp_faustpower2_f(fSlow78)) + -1.0); + double fSlow80 = (2.333333333333333 * (((2.5 * fSlow79) + -2.0) * fSlow17)); + double fSlow81 = (2.5 * (fSlow79 * fSlow34)); + double fSlow82 = (0.70710678118654757 * fSlow58); + double fSlow83 = (fSlow72 + fSlow82); + double fSlow84 = ((3.0 * mydsp_faustpower2_f(fSlow83)) + -1.0); + double fSlow85 = (2.5 * (fSlow84 * fSlow34)); + double fSlow86 = (2.333333333333333 * (((2.5 * fSlow84) + -2.0) * fSlow17)); + double fSlow87 = (0.70710678118654757 * fSlow63); + double fSlow88 = (fSlow72 + fSlow87); + double fSlow89 = ((3.0 * mydsp_faustpower2_f(fSlow88)) + -1.0); + double fSlow90 = (2.333333333333333 * (((2.5 * fSlow89) + -2.0) * fSlow17)); + double fSlow91 = (2.5 * (fSlow89 * fSlow34)); + double fSlow92 = cos((fSlow44 + -0.78539816339744828)); + double fSlow93 = (fSlow92 * fSlow46); + double fSlow94 = ((3.0 * (mydsp_faustpower2_f(fSlow92) * fSlow48)) + -1.0); + double fSlow95 = (2.333333333333333 * (((2.5 * fSlow94) + -2.0) * fSlow17)); + double fSlow96 = (2.5 * (fSlow94 * fSlow34)); + double fSlow97 = cos((fSlow44 + -2.3561944901923448)); + double fSlow98 = (fSlow97 * fSlow46); + double fSlow99 = ((3.0 * (mydsp_faustpower2_f(fSlow97) * fSlow48)) + -1.0); + double fSlow100 = (2.333333333333333 * (((2.5 * fSlow99) + -2.0) * fSlow17)); + double fSlow101 = (2.5 * (fSlow99 * fSlow34)); + double fSlow102 = cos((fSlow44 + -3.9269908169872414)); + double fSlow103 = (fSlow102 * fSlow46); + double fSlow104 = ((3.0 * (mydsp_faustpower2_f(fSlow102) * fSlow48)) + -1.0); + double fSlow105 = (2.333333333333333 * (((2.5 * fSlow104) + -2.0) * fSlow17)); + double fSlow106 = (2.5 * (fSlow104 * fSlow34)); + double fSlow107 = cos((fSlow44 + -5.497787143782138)); + double fSlow108 = (fSlow107 * fSlow46); + double fSlow109 = ((3.0 * (mydsp_faustpower2_f(fSlow107) * fSlow48)) + -1.0); + double fSlow110 = (2.333333333333333 * (((2.5 * fSlow109) + -2.0) * fSlow17)); + double fSlow111 = (2.5 * (fSlow109 * fSlow34)); + double fSlow112 = (fSlow71 - fSlow72); + double fSlow113 = ((3.0 * mydsp_faustpower2_f(fSlow112)) + -1.0); + double fSlow114 = (2.333333333333333 * (((2.5 * fSlow113) + -2.0) * fSlow17)); + double fSlow115 = (2.5 * (fSlow113 * fSlow34)); + double fSlow116 = (fSlow77 - fSlow72); + double fSlow117 = ((3.0 * mydsp_faustpower2_f(fSlow116)) + -1.0); + double fSlow118 = (2.333333333333333 * (((2.5 * fSlow117) + -2.0) * fSlow17)); + double fSlow119 = (2.5 * (fSlow117 * fSlow34)); + double fSlow120 = (fSlow82 - fSlow72); + double fSlow121 = ((3.0 * mydsp_faustpower2_f(fSlow120)) + -1.0); + double fSlow122 = (2.333333333333333 * (((2.5 * fSlow121) + -2.0) * fSlow17)); + double fSlow123 = (2.5 * (fSlow121 * fSlow34)); + double fSlow124 = (fSlow87 - fSlow72); + double fSlow125 = ((3.0 * mydsp_faustpower2_f(fSlow124)) + -1.0); + double fSlow126 = (2.333333333333333 * (((2.5 * fSlow125) + -2.0) * fSlow17)); + double fSlow127 = (2.5 * (fSlow125 * fSlow34)); + double fSlow128 = (0.81649658092772592 * fSlow93); + double fSlow129 = (0.57735026918962584 * fSlow1); + double fSlow130 = (fSlow128 + fSlow129); + double fSlow131 = ((3.0 * mydsp_faustpower2_f(fSlow130)) + -1.0); + double fSlow132 = (2.333333333333333 * (((2.5 * fSlow131) + -2.0) * fSlow17)); + double fSlow133 = (2.5 * (fSlow131 * fSlow34)); + double fSlow134 = (0.81649658092772592 * fSlow98); + double fSlow135 = (fSlow129 + fSlow134); + double fSlow136 = ((3.0 * mydsp_faustpower2_f(fSlow135)) + -1.0); + double fSlow137 = (2.333333333333333 * (((2.5 * fSlow136) + -2.0) * fSlow17)); + double fSlow138 = (2.5 * (fSlow136 * fSlow34)); + double fSlow139 = (0.81649658092772592 * fSlow103); + double fSlow140 = (fSlow129 + fSlow139); + double fSlow141 = ((3.0 * mydsp_faustpower2_f(fSlow140)) + -1.0); + double fSlow142 = (2.333333333333333 * (((2.5 * fSlow141) + -2.0) * fSlow17)); + double fSlow143 = (2.5 * (fSlow141 * fSlow34)); + double fSlow144 = (0.81649658092772592 * fSlow108); + double fSlow145 = (fSlow129 + fSlow144); + double fSlow146 = ((3.0 * mydsp_faustpower2_f(fSlow145)) + -1.0); + double fSlow147 = (2.333333333333333 * (((2.5 * fSlow146) + -2.0) * fSlow17)); + double fSlow148 = (2.5 * (fSlow146 * fSlow34)); + double fSlow149 = (fSlow128 - fSlow129); + double fSlow150 = ((3.0 * mydsp_faustpower2_f(fSlow149)) + -1.0); + double fSlow151 = (2.333333333333333 * (((2.5 * fSlow150) + -2.0) * fSlow17)); + double fSlow152 = (2.5 * (fSlow150 * fSlow34)); + double fSlow153 = (fSlow134 - fSlow129); + double fSlow154 = ((3.0 * mydsp_faustpower2_f(fSlow153)) + -1.0); + double fSlow155 = (2.333333333333333 * (((2.5 * fSlow154) + -2.0) * fSlow17)); + double fSlow156 = (2.5 * (fSlow154 * fSlow34)); + double fSlow157 = (fSlow139 - fSlow129); + double fSlow158 = ((3.0 * mydsp_faustpower2_f(fSlow157)) + -1.0); + double fSlow159 = (2.333333333333333 * (((2.5 * fSlow158) + -2.0) * fSlow17)); + double fSlow160 = (2.5 * (fSlow158 * fSlow34)); + double fSlow161 = (fSlow144 - fSlow129); + double fSlow162 = ((3.0 * mydsp_faustpower2_f(fSlow161)) + -1.0); + double fSlow163 = (2.333333333333333 * (((2.5 * fSlow162) + -2.0) * fSlow17)); + double fSlow164 = (2.5 * (fSlow162 * fSlow34)); + double fSlow165 = (0.42640143271122027 * (cos((fSlow44 + -0.78539816339744839)) * fSlow46)); + double fSlow166 = (0.90453403373329111 * fSlow1); + double fSlow167 = (fSlow165 + fSlow166); + double fSlow168 = ((3.0 * mydsp_faustpower2_f(fSlow167)) + -1.0); + double fSlow169 = (2.333333333333333 * (((2.5 * fSlow168) + -2.0) * fSlow17)); + double fSlow170 = (2.5 * (fSlow168 * fSlow34)); + double fSlow171 = (0.42640143271122027 * fSlow98); + double fSlow172 = (fSlow166 + fSlow171); + double fSlow173 = ((3.0 * mydsp_faustpower2_f(fSlow172)) + -1.0); + double fSlow174 = (2.333333333333333 * (((2.5 * fSlow173) + -2.0) * fSlow17)); + double fSlow175 = (2.5 * (fSlow173 * fSlow34)); + double fSlow176 = (0.42640143271122027 * fSlow103); + double fSlow177 = (fSlow166 + fSlow176); + double fSlow178 = ((3.0 * mydsp_faustpower2_f(fSlow177)) + -1.0); + double fSlow179 = (2.333333333333333 * (((2.5 * fSlow178) + -2.0) * fSlow17)); + double fSlow180 = (2.5 * (fSlow178 * fSlow34)); + double fSlow181 = (0.42640143271122027 * fSlow108); + double fSlow182 = (fSlow166 + fSlow181); + double fSlow183 = ((3.0 * mydsp_faustpower2_f(fSlow182)) + -1.0); + double fSlow184 = (2.333333333333333 * (((2.5 * fSlow183) + -2.0) * fSlow17)); + double fSlow185 = (2.5 * (fSlow183 * fSlow34)); + double fSlow186 = (0.95346258924559235 * (cos((fSlow44 + -0.32175055439664263)) * fSlow46)); + double fSlow187 = (0.30151134457776352 * fSlow1); + double fSlow188 = (fSlow186 + fSlow187); + double fSlow189 = ((3.0 * mydsp_faustpower2_f(fSlow188)) + -1.0); + double fSlow190 = (2.333333333333333 * (((2.5 * fSlow189) + -2.0) * fSlow17)); + double fSlow191 = (2.5 * (fSlow189 * fSlow34)); + double fSlow192 = (0.95346258924559235 * (cos((fSlow44 + -1.2490457723982544)) * fSlow46)); + double fSlow193 = (fSlow187 + fSlow192); + double fSlow194 = ((3.0 * mydsp_faustpower2_f(fSlow193)) + -1.0); + double fSlow195 = (2.333333333333333 * (((2.5 * fSlow194) + -2.0) * fSlow17)); + double fSlow196 = (2.5 * (fSlow194 * fSlow34)); + double fSlow197 = (0.95346258924559235 * (cos((fSlow44 + -1.8925468811915387)) * fSlow46)); + double fSlow198 = (fSlow187 + fSlow197); + double fSlow199 = ((3.0 * mydsp_faustpower2_f(fSlow198)) + -1.0); + double fSlow200 = (2.333333333333333 * (((2.5 * fSlow199) + -2.0) * fSlow17)); + double fSlow201 = (2.5 * (fSlow199 * fSlow34)); + double fSlow202 = (0.95346258924559235 * (cos((fSlow44 + -2.8198420991931505)) * fSlow46)); + double fSlow203 = (fSlow187 + fSlow202); + double fSlow204 = ((3.0 * mydsp_faustpower2_f(fSlow203)) + -1.0); + double fSlow205 = (2.333333333333333 * (((2.5 * fSlow204) + -2.0) * fSlow17)); + double fSlow206 = (2.5 * (fSlow204 * fSlow34)); + double fSlow207 = (0.95346258924559235 * (cos((fSlow44 + -3.4633432079864357)) * fSlow46)); + double fSlow208 = (fSlow187 + fSlow207); + double fSlow209 = ((3.0 * mydsp_faustpower2_f(fSlow208)) + -1.0); + double fSlow210 = (2.333333333333333 * (((2.5 * fSlow209) + -2.0) * fSlow17)); + double fSlow211 = (2.5 * (fSlow209 * fSlow34)); + double fSlow212 = (0.95346258924559235 * (cos((fSlow44 + -4.3906384259880475)) * fSlow46)); + double fSlow213 = (fSlow187 + fSlow212); + double fSlow214 = ((3.0 * mydsp_faustpower2_f(fSlow213)) + -1.0); + double fSlow215 = (2.333333333333333 * (((2.5 * fSlow214) + -2.0) * fSlow17)); + double fSlow216 = (2.5 * (fSlow214 * fSlow34)); + double fSlow217 = (0.95346258924559235 * (cos((fSlow44 + -5.0341395347813318)) * fSlow46)); + double fSlow218 = (fSlow187 + fSlow217); + double fSlow219 = ((3.0 * mydsp_faustpower2_f(fSlow218)) + -1.0); + double fSlow220 = (2.333333333333333 * (((2.5 * fSlow219) + -2.0) * fSlow17)); + double fSlow221 = (2.5 * (fSlow219 * fSlow34)); + double fSlow222 = (0.95346258924559235 * (cos((fSlow44 + -5.9614347527829432)) * fSlow46)); + double fSlow223 = (fSlow187 + fSlow222); + double fSlow224 = ((3.0 * mydsp_faustpower2_f(fSlow223)) + -1.0); + double fSlow225 = (2.333333333333333 * (((2.5 * fSlow224) + -2.0) * fSlow17)); + double fSlow226 = (2.5 * (fSlow224 * fSlow34)); + double fSlow227 = (fSlow186 - fSlow187); + double fSlow228 = ((3.0 * mydsp_faustpower2_f(fSlow227)) + -1.0); + double fSlow229 = (2.333333333333333 * (((2.5 * fSlow228) + -2.0) * fSlow17)); + double fSlow230 = (2.5 * (fSlow228 * fSlow34)); + double fSlow231 = (fSlow192 - fSlow187); + double fSlow232 = ((3.0 * mydsp_faustpower2_f(fSlow231)) + -1.0); + double fSlow233 = (2.333333333333333 * (((2.5 * fSlow232) + -2.0) * fSlow17)); + double fSlow234 = (2.5 * (fSlow232 * fSlow34)); + double fSlow235 = (fSlow197 - fSlow187); + double fSlow236 = ((3.0 * mydsp_faustpower2_f(fSlow235)) + -1.0); + double fSlow237 = (2.333333333333333 * (((2.5 * fSlow236) + -2.0) * fSlow17)); + double fSlow238 = (2.5 * (fSlow236 * fSlow34)); + double fSlow239 = (fSlow202 - fSlow187); + double fSlow240 = ((3.0 * mydsp_faustpower2_f(fSlow239)) + -1.0); + double fSlow241 = (2.333333333333333 * (((2.5 * fSlow240) + -2.0) * fSlow17)); + double fSlow242 = (2.5 * (fSlow240 * fSlow34)); + double fSlow243 = (fSlow207 - fSlow187); + double fSlow244 = ((3.0 * mydsp_faustpower2_f(fSlow243)) + -1.0); + double fSlow245 = (2.333333333333333 * (((2.5 * fSlow244) + -2.0) * fSlow17)); + double fSlow246 = (2.5 * (fSlow244 * fSlow34)); + double fSlow247 = (fSlow212 - fSlow187); + double fSlow248 = ((3.0 * mydsp_faustpower2_f(fSlow247)) + -1.0); + double fSlow249 = (2.333333333333333 * (((2.5 * fSlow248) + -2.0) * fSlow17)); + double fSlow250 = (2.5 * (fSlow248 * fSlow34)); + double fSlow251 = (fSlow217 - fSlow187); + double fSlow252 = ((3.0 * mydsp_faustpower2_f(fSlow251)) + -1.0); + double fSlow253 = (2.333333333333333 * (((2.5 * fSlow252) + -2.0) * fSlow17)); + double fSlow254 = (2.5 * (fSlow252 * fSlow34)); + double fSlow255 = (fSlow222 - fSlow187); + double fSlow256 = ((3.0 * mydsp_faustpower2_f(fSlow255)) + -1.0); + double fSlow257 = (2.333333333333333 * (((2.5 * fSlow256) + -2.0) * fSlow17)); + double fSlow258 = (2.5 * (fSlow256 * fSlow34)); + double fSlow259 = (fSlow165 - fSlow166); + double fSlow260 = ((3.0 * mydsp_faustpower2_f(fSlow259)) + -1.0); + double fSlow261 = (2.333333333333333 * (((2.5 * fSlow260) + -2.0) * fSlow17)); + double fSlow262 = (2.5 * (fSlow260 * fSlow34)); + double fSlow263 = (fSlow171 - fSlow166); + double fSlow264 = ((3.0 * mydsp_faustpower2_f(fSlow263)) + -1.0); + double fSlow265 = (2.333333333333333 * (((2.5 * fSlow264) + -2.0) * fSlow17)); + double fSlow266 = (2.5 * (fSlow264 * fSlow34)); + double fSlow267 = (fSlow176 - fSlow166); + double fSlow268 = ((3.0 * mydsp_faustpower2_f(fSlow267)) + -1.0); + double fSlow269 = (2.333333333333333 * (((2.5 * fSlow268) + -2.0) * fSlow17)); + double fSlow270 = (2.5 * (fSlow268 * fSlow34)); + double fSlow271 = (fSlow181 - fSlow166); + double fSlow272 = ((3.0 * mydsp_faustpower2_f(fSlow271)) + -1.0); + double fSlow273 = (2.333333333333333 * (((2.5 * fSlow272) + -2.0) * fSlow17)); + double fSlow274 = (2.5 * (fSlow272 * fSlow34)); for (int i = 0; (i < count); i = (i + 1)) { - fRec3[0] = (fSlow19 + (0.999 * fRec3[1])); + fRec3[0] = (fSlow12 + (0.999 * fRec3[1])); double fTemp0 = (fRec3[0] * double(input0[i])); fRec4[0] = (fRec4[1] + fRec2[1]); - fRec2[0] = (fSlow16 * ((fSlow18 * fTemp0) - (fSlow20 * fRec4[0]))); + fRec2[0] = (fSlow9 * ((fSlow11 * fTemp0) - (fSlow13 * fRec4[0]))); fRec1[0] = (fRec2[0] + fRec1[1]); - double fTemp1 = (fSlow22 * fTemp0); + double fTemp1 = (fSlow15 * fTemp0); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow16 * (fTemp1 - (fSlow20 * fRec6[0]))); - double fTemp2 = ((fSlow13 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0])); - double fTemp3 = (fSlow9 * fTemp2); + fRec5[0] = (fSlow9 * (fTemp1 - (fSlow13 * fRec6[0]))); + double fTemp2 = (fSlow2 * ((fSlow6 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0]))); fRec10[0] = (fRec10[1] + fRec9[1]); fRec11[0] = (fRec11[1] + fRec10[1]); - fRec9[0] = (fSlow30 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec10[0]) + (fSlow34 * fRec11[0])))); + fRec9[0] = (fSlow23 * ((fSlow26 * fTemp0) - ((fSlow28 * fRec10[0]) + (fSlow27 * fRec11[0])))); fRec12[0] = (fRec9[0] + fRec12[1]); - double fTemp4 = (fRec12[0] - fRec9[0]); - fVec0[0] = fTemp4; + double fTemp3 = (fRec12[0] - fRec9[0]); + fVec0[0] = fTemp3; fRec13[0] = (fRec13[1] + fVec0[1]); fRec14[0] = (fRec14[1] + fRec8[1]); - fRec8[0] = (fSlow28 * ((fSlow26 * (fRec9[0] + (fSlow36 * ((fSlow38 * fTemp4) + (fSlow37 * fRec13[0]))))) - (fSlow39 * fRec14[0]))); + fRec8[0] = (fSlow21 * ((fSlow19 * (fRec9[0] + (fSlow29 * ((fSlow31 * fTemp3) + (fSlow30 * fRec13[0]))))) - (fSlow32 * fRec14[0]))); fRec7[0] = (fRec8[0] + fRec7[1]); fRec17[0] = (fRec17[1] + fRec16[1]); fRec18[0] = (fRec18[1] + fRec17[1]); - fRec16[0] = (fSlow30 * (fTemp1 - ((fSlow35 * fRec17[0]) + (fSlow34 * fRec18[0])))); + fRec16[0] = (fSlow23 * (fTemp1 - ((fSlow28 * fRec17[0]) + (fSlow27 * fRec18[0])))); fRec19[0] = (fRec19[1] + fRec15[1]); - fRec15[0] = (fSlow28 * (fRec16[0] - (fSlow39 * fRec19[0]))); - double fTemp5 = ((fSlow27 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); - double fTemp6 = (fSlow40 * fTemp0); + fRec15[0] = (fSlow21 * (fRec16[0] - (fSlow32 * fRec19[0]))); + double fTemp4 = ((fSlow20 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); + double fTemp5 = (fSlow33 * fTemp0); fRec22[0] = (fRec22[1] + fRec21[1]); fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow47 * ((fSlow48 * fTemp0) - ((fSlow50 * fRec22[0]) + (fSlow49 * fRec23[0])))); + fRec21[0] = (fSlow40 * ((fSlow41 * fTemp0) - ((fSlow43 * fRec22[0]) + (fSlow42 * fRec23[0])))); fRec20[0] = (fRec21[0] + fRec20[1]); - double fTemp7 = (fRec20[0] - fRec21[0]); - fVec1[0] = fTemp7; + double fTemp6 = (fRec20[0] - fRec21[0]); + fVec1[0] = fTemp6; fRec24[0] = (fRec24[1] + fVec1[1]); fRec26[0] = (fRec26[1] + fRec25[1]); fRec27[0] = (fRec27[1] + fRec26[1]); - fRec25[0] = (fSlow47 * (fTemp1 - ((fSlow50 * fRec26[0]) + (fSlow49 * fRec27[0])))); - double fTemp8 = ((fSlow44 * ((fSlow46 * fTemp7) + (fSlow45 * fRec24[0]))) + (fRec21[0] + fRec25[0])); - double fTemp9 = (0.012698412698412698 * ((fSlow7 * (fTemp3 + (fSlow25 * fTemp5))) + (fTemp6 + (fSlow42 * fTemp8)))); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fRec25[0] = (fSlow40 * (fTemp1 - ((fSlow43 * fRec26[0]) + (fSlow42 * fRec27[0])))); + double fTemp7 = ((fSlow37 * ((fSlow39 * fTemp6) + (fSlow38 * fRec24[0]))) + (fRec21[0] + fRec25[0])); + double fTemp8 = (0.012698412698412698 * ((fSlow1 * (fTemp2 + (fSlow18 * fTemp4))) + (fTemp5 + (fSlow35 * fTemp7)))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp9); - double fTemp10 = (0.012698412698412698 * (((fTemp6 + (fSlow51 * fTemp2)) + (fSlow52 * fTemp8)) + (fSlow53 * fTemp5))); - fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + output0[i] = FAUSTFLOAT(fTemp8); + double fTemp9 = (0.012698412698412698 * ((fSlow47 * (fTemp2 + (fSlow50 * fTemp4))) + (fTemp5 + (fSlow51 * fTemp7)))); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph1 = FAUSTFLOAT(fRec28[0]); - output1[i] = FAUSTFLOAT(fTemp10); - double fTemp11 = (0.012698412698412698 * (((fTemp6 + (fSlow55 * fTemp2)) + (fSlow57 * fTemp8)) + (fSlow58 * fTemp5))); - fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + output1[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (0.012698412698412698 * ((fSlow53 * (fTemp2 + (fSlow55 * fTemp4))) + (fTemp5 + (fSlow56 * fTemp7)))); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fVbargraph2 = FAUSTFLOAT(fRec29[0]); - output2[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (0.012698412698412698 * (((fTemp6 + (fSlow60 * fTemp2)) + (fSlow62 * fTemp8)) + (fSlow63 * fTemp5))); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + output2[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (0.012698412698412698 * ((fSlow58 * (fTemp2 + (fSlow60 * fTemp4))) + (fTemp5 + (fSlow61 * fTemp7)))); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph3 = FAUSTFLOAT(fRec30[0]); - output3[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (0.012698412698412698 * (((fTemp6 + (fSlow65 * fTemp2)) + (fSlow67 * fTemp8)) + (fSlow68 * fTemp5))); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + output3[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.012698412698412698 * ((fSlow63 * (fTemp2 + (fSlow65 * fTemp4))) + (fTemp5 + (fSlow66 * fTemp7)))); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph4 = FAUSTFLOAT(fRec31[0]); - output4[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = (0.012698412698412698 * ((fSlow69 * (fTemp3 + (fSlow71 * fTemp5))) + (fTemp6 + (fSlow72 * fTemp8)))); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + output4[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.012698412698412698 * ((fSlow67 * (fTemp2 + (fSlow69 * fTemp4))) + (fTemp5 + (fSlow70 * fTemp7)))); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph5 = FAUSTFLOAT(fRec32[0]); - output5[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (0.022574955908289243 * ((fSlow75 * (fTemp3 + (fSlow77 * fTemp5))) + (fTemp6 + (fSlow78 * fTemp8)))); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + output5[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.022574955908289243 * ((fSlow73 * (fTemp2 + (fSlow75 * fTemp4))) + (fTemp5 + (fSlow76 * fTemp7)))); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph6 = FAUSTFLOAT(fRec33[0]); - output6[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (0.022574955908289243 * ((fSlow80 * (fTemp3 + (fSlow82 * fTemp5))) + (fTemp6 + (fSlow83 * fTemp8)))); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + output6[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.022574955908289243 * ((fSlow78 * (fTemp2 + (fSlow80 * fTemp4))) + (fTemp5 + (fSlow81 * fTemp7)))); + fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph7 = FAUSTFLOAT(fRec34[0]); - output7[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (0.022574955908289243 * ((fSlow85 * (fTemp3 + (fSlow87 * fTemp5))) + (fTemp6 + (fSlow88 * fTemp8)))); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + output7[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.022574955908289243 * ((fTemp5 + (fSlow85 * fTemp7)) + (fSlow83 * (fTemp2 + (fSlow86 * fTemp4))))); + fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph8 = FAUSTFLOAT(fRec35[0]); - output8[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.022574955908289243 * ((fSlow90 * (fTemp3 + (fSlow92 * fTemp5))) + (fTemp6 + (fSlow93 * fTemp8)))); - fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + output8[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.022574955908289243 * ((fSlow88 * (fTemp2 + (fSlow90 * fTemp4))) + (fTemp5 + (fSlow91 * fTemp7)))); + fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph9 = FAUSTFLOAT(fRec36[0]); - output9[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.022574955908289243 * (((fTemp6 + (fSlow95 * fTemp2)) + (fSlow97 * fTemp8)) + (fSlow98 * fTemp5))); - fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + output9[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.022574955908289243 * ((fSlow93 * (fTemp2 + (fSlow95 * fTemp4))) + (fTemp5 + (fSlow96 * fTemp7)))); + fRec37[0] = max((fRec37[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph10 = FAUSTFLOAT(fRec37[0]); - output10[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (0.022574955908289243 * (((fTemp6 + (fSlow100 * fTemp2)) + (fSlow102 * fTemp8)) + (fSlow103 * fTemp5))); - fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + output10[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.022574955908289243 * ((fSlow98 * (fTemp2 + (fSlow100 * fTemp4))) + (fTemp5 + (fSlow101 * fTemp7)))); + fRec38[0] = max((fRec38[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph11 = FAUSTFLOAT(fRec38[0]); - output11[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (0.022574955908289243 * (((fTemp6 + (fSlow105 * fTemp2)) + (fSlow107 * fTemp8)) + (fSlow108 * fTemp5))); - fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + output11[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.022574955908289243 * ((fSlow103 * (fTemp2 + (fSlow105 * fTemp4))) + (fTemp5 + (fSlow106 * fTemp7)))); + fRec39[0] = max((fRec39[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph12 = FAUSTFLOAT(fRec39[0]); - output12[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (0.022574955908289243 * (((fTemp6 + (fSlow110 * fTemp2)) + (fSlow112 * fTemp8)) + (fSlow113 * fTemp5))); - fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + output12[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.022574955908289243 * ((fSlow108 * (fTemp2 + (fSlow110 * fTemp4))) + (fTemp5 + (fSlow111 * fTemp7)))); + fRec40[0] = max((fRec40[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph13 = FAUSTFLOAT(fRec40[0]); - output13[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (0.022574955908289243 * ((fSlow114 * (fTemp3 + (fSlow116 * fTemp5))) + (fTemp6 + (fSlow117 * fTemp8)))); - fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + output13[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.022574955908289243 * ((fSlow112 * (fTemp2 + (fSlow114 * fTemp4))) + (fTemp5 + (fSlow115 * fTemp7)))); + fRec41[0] = max((fRec41[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph14 = FAUSTFLOAT(fRec41[0]); - output14[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.022574955908289243 * ((fSlow118 * (fTemp3 + (fSlow120 * fTemp5))) + (fTemp6 + (fSlow121 * fTemp8)))); - fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + output14[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.022574955908289243 * ((fSlow116 * (fTemp2 + (fSlow118 * fTemp4))) + (fTemp5 + (fSlow119 * fTemp7)))); + fRec42[0] = max((fRec42[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph15 = FAUSTFLOAT(fRec42[0]); - output15[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (0.022574955908289243 * ((fSlow122 * (fTemp3 + (fSlow124 * fTemp5))) + (fTemp6 + (fSlow125 * fTemp8)))); - fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + output15[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.022574955908289243 * ((fSlow120 * (fTemp2 + (fSlow122 * fTemp4))) + (fTemp5 + (fSlow123 * fTemp7)))); + fRec43[0] = max((fRec43[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph16 = FAUSTFLOAT(fRec43[0]); - output16[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (0.022574955908289243 * ((fSlow126 * (fTemp3 + (fSlow128 * fTemp5))) + (fTemp6 + (fSlow129 * fTemp8)))); - fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + output16[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.022574955908289243 * ((fSlow124 * (fTemp2 + (fSlow126 * fTemp4))) + (fTemp5 + (fSlow127 * fTemp7)))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph17 = FAUSTFLOAT(fRec44[0]); - output17[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (0.021093750000000001 * ((fSlow132 * (fTemp3 + (fSlow134 * fTemp5))) + (fTemp6 + (fSlow135 * fTemp8)))); - fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + output17[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.021093750000000001 * ((fSlow130 * (fTemp2 + (fSlow132 * fTemp4))) + (fTemp5 + (fSlow133 * fTemp7)))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph18 = FAUSTFLOAT(fRec45[0]); - output18[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (0.021093750000000001 * ((fSlow137 * (fTemp3 + (fSlow139 * fTemp5))) + (fTemp6 + (fSlow140 * fTemp8)))); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + output18[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.021093750000000001 * ((fSlow135 * (fTemp2 + (fSlow137 * fTemp4))) + (fTemp5 + (fSlow138 * fTemp7)))); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph19 = FAUSTFLOAT(fRec46[0]); - output19[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (0.021093750000000001 * ((fSlow142 * (fTemp3 + (fSlow144 * fTemp5))) + (fTemp6 + (fSlow145 * fTemp8)))); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + output19[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.021093750000000001 * ((fSlow140 * (fTemp2 + (fSlow142 * fTemp4))) + (fTemp5 + (fSlow143 * fTemp7)))); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph20 = FAUSTFLOAT(fRec47[0]); - output20[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.021093750000000001 * ((fSlow147 * (fTemp3 + (fSlow149 * fTemp5))) + (fTemp6 + (fSlow150 * fTemp8)))); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + output20[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.021093750000000001 * ((fSlow145 * (fTemp2 + (fSlow147 * fTemp4))) + (fTemp5 + (fSlow148 * fTemp7)))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph21 = FAUSTFLOAT(fRec48[0]); - output21[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.021093750000000001 * ((fSlow151 * (fTemp3 + (fSlow153 * fTemp5))) + (fTemp6 + (fSlow154 * fTemp8)))); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + output21[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.021093750000000001 * ((fSlow149 * (fTemp2 + (fSlow151 * fTemp4))) + (fTemp5 + (fSlow152 * fTemp7)))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph22 = FAUSTFLOAT(fRec49[0]); - output22[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (0.021093750000000001 * ((fSlow155 * (fTemp3 + (fSlow157 * fTemp5))) + (fTemp6 + (fSlow158 * fTemp8)))); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + output22[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.021093750000000001 * ((fSlow153 * (fTemp2 + (fSlow155 * fTemp4))) + (fTemp5 + (fSlow156 * fTemp7)))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph23 = FAUSTFLOAT(fRec50[0]); - output23[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (0.021093750000000001 * ((fSlow159 * (fTemp3 + (fSlow161 * fTemp5))) + (fTemp6 + (fSlow162 * fTemp8)))); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + output23[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.021093750000000001 * ((fSlow157 * (fTemp2 + (fSlow159 * fTemp4))) + (fTemp5 + (fSlow160 * fTemp7)))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph24 = FAUSTFLOAT(fRec51[0]); - output24[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (0.021093750000000001 * ((fSlow163 * (fTemp3 + (fSlow165 * fTemp5))) + (fTemp6 + (fSlow166 * fTemp8)))); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + output24[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.021093750000000001 * ((fSlow161 * (fTemp2 + (fSlow163 * fTemp4))) + (fTemp5 + (fSlow164 * fTemp7)))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph25 = FAUSTFLOAT(fRec52[0]); - output25[i] = FAUSTFLOAT(fTemp34); - double fTemp35 = (0.02017333553791887 * ((fSlow169 * (fTemp3 + (fSlow171 * fTemp5))) + (fTemp6 + (fSlow172 * fTemp8)))); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + output25[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.02017333553791887 * ((fSlow167 * (fTemp2 + (fSlow169 * fTemp4))) + (fTemp5 + (fSlow170 * fTemp7)))); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph26 = FAUSTFLOAT(fRec53[0]); - output26[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (0.02017333553791887 * ((fSlow174 * (fTemp3 + (fSlow176 * fTemp5))) + (fTemp6 + (fSlow177 * fTemp8)))); - fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + output26[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (0.02017333553791887 * ((fSlow172 * (fTemp2 + (fSlow174 * fTemp4))) + (fTemp5 + (fSlow175 * fTemp7)))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); fVbargraph27 = FAUSTFLOAT(fRec54[0]); - output27[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = (0.02017333553791887 * ((fSlow179 * (fTemp3 + (fSlow181 * fTemp5))) + (fTemp6 + (fSlow182 * fTemp8)))); - fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + output27[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (0.02017333553791887 * ((fSlow177 * (fTemp2 + (fSlow179 * fTemp4))) + (fTemp5 + (fSlow180 * fTemp7)))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph28 = FAUSTFLOAT(fRec55[0]); - output28[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = (0.02017333553791887 * ((fSlow184 * (fTemp3 + (fSlow186 * fTemp5))) + (fTemp6 + (fSlow187 * fTemp8)))); - fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + output28[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (0.02017333553791887 * ((fSlow182 * (fTemp2 + (fSlow184 * fTemp4))) + (fTemp5 + (fSlow185 * fTemp7)))); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph29 = FAUSTFLOAT(fRec56[0]); - output29[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (0.02017333553791887 * ((fSlow190 * (fTemp3 + (fSlow192 * fTemp5))) + (fTemp6 + (fSlow193 * fTemp8)))); - fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + output29[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (0.02017333553791887 * ((fSlow188 * (fTemp2 + (fSlow190 * fTemp4))) + (fTemp5 + (fSlow191 * fTemp7)))); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); fVbargraph30 = FAUSTFLOAT(fRec57[0]); - output30[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (0.02017333553791887 * ((fSlow195 * (fTemp3 + (fSlow197 * fTemp5))) + (fTemp6 + (fSlow198 * fTemp8)))); - fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + output30[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (0.02017333553791887 * ((fSlow193 * (fTemp2 + (fSlow195 * fTemp4))) + (fTemp5 + (fSlow196 * fTemp7)))); + fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph31 = FAUSTFLOAT(fRec58[0]); - output31[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (0.02017333553791887 * ((fSlow200 * (fTemp3 + (fSlow202 * fTemp5))) + (fTemp6 + (fSlow203 * fTemp8)))); - fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + output31[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.02017333553791887 * ((fSlow198 * (fTemp2 + (fSlow200 * fTemp4))) + (fTemp5 + (fSlow201 * fTemp7)))); + fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph32 = FAUSTFLOAT(fRec59[0]); - output32[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (0.02017333553791887 * ((fSlow205 * (fTemp3 + (fSlow207 * fTemp5))) + (fTemp6 + (fSlow208 * fTemp8)))); - fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + output32[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (0.02017333553791887 * ((fSlow203 * (fTemp2 + (fSlow205 * fTemp4))) + (fTemp5 + (fSlow206 * fTemp7)))); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph33 = FAUSTFLOAT(fRec60[0]); - output33[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (0.02017333553791887 * ((fSlow210 * (fTemp3 + (fSlow212 * fTemp5))) + (fTemp6 + (fSlow213 * fTemp8)))); - fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + output33[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (0.02017333553791887 * ((fSlow208 * (fTemp2 + (fSlow210 * fTemp4))) + (fTemp5 + (fSlow211 * fTemp7)))); + fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph34 = FAUSTFLOAT(fRec61[0]); - output34[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (0.02017333553791887 * ((fSlow215 * (fTemp3 + (fSlow217 * fTemp5))) + (fTemp6 + (fSlow218 * fTemp8)))); - fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + output34[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (0.02017333553791887 * ((fSlow213 * (fTemp2 + (fSlow215 * fTemp4))) + (fTemp5 + (fSlow216 * fTemp7)))); + fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph35 = FAUSTFLOAT(fRec62[0]); - output35[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (0.02017333553791887 * ((fSlow220 * (fTemp3 + (fSlow222 * fTemp5))) + (fTemp6 + (fSlow223 * fTemp8)))); - fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + output35[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (0.02017333553791887 * ((fSlow218 * (fTemp2 + (fSlow220 * fTemp4))) + (fTemp5 + (fSlow221 * fTemp7)))); + fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph36 = FAUSTFLOAT(fRec63[0]); - output36[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (0.02017333553791887 * ((fSlow225 * (fTemp3 + (fSlow227 * fTemp5))) + (fTemp6 + (fSlow228 * fTemp8)))); - fRec64[0] = max((fRec64[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + output36[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.02017333553791887 * ((fSlow223 * (fTemp2 + (fSlow225 * fTemp4))) + (fTemp5 + (fSlow226 * fTemp7)))); + fRec64[0] = max((fRec64[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph37 = FAUSTFLOAT(fRec64[0]); - output37[i] = FAUSTFLOAT(fTemp46); - double fTemp47 = (0.02017333553791887 * ((fSlow229 * (fTemp3 + (fSlow231 * fTemp5))) + (fTemp6 + (fSlow232 * fTemp8)))); - fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + output37[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (0.02017333553791887 * ((fSlow227 * (fTemp2 + (fSlow229 * fTemp4))) + (fTemp5 + (fSlow230 * fTemp7)))); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph38 = FAUSTFLOAT(fRec65[0]); - output38[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (0.02017333553791887 * ((fSlow233 * (fTemp3 + (fSlow235 * fTemp5))) + (fTemp6 + (fSlow236 * fTemp8)))); - fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + output38[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (0.02017333553791887 * ((fSlow231 * (fTemp2 + (fSlow233 * fTemp4))) + (fTemp5 + (fSlow234 * fTemp7)))); + fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph39 = FAUSTFLOAT(fRec66[0]); - output39[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (0.02017333553791887 * ((fSlow237 * (fTemp3 + (fSlow239 * fTemp5))) + (fTemp6 + (fSlow240 * fTemp8)))); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + output39[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (0.02017333553791887 * ((fSlow235 * (fTemp2 + (fSlow237 * fTemp4))) + (fTemp5 + (fSlow238 * fTemp7)))); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph40 = FAUSTFLOAT(fRec67[0]); - output40[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (0.02017333553791887 * ((fSlow241 * (fTemp3 + (fSlow243 * fTemp5))) + (fTemp6 + (fSlow244 * fTemp8)))); - fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + output40[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.02017333553791887 * ((fSlow239 * (fTemp2 + (fSlow241 * fTemp4))) + (fTemp5 + (fSlow242 * fTemp7)))); + fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph41 = FAUSTFLOAT(fRec68[0]); - output41[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (0.02017333553791887 * ((fSlow245 * (fTemp3 + (fSlow247 * fTemp5))) + (fTemp6 + (fSlow248 * fTemp8)))); - fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + output41[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (0.02017333553791887 * ((fSlow243 * (fTemp2 + (fSlow245 * fTemp4))) + (fTemp5 + (fSlow246 * fTemp7)))); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph42 = FAUSTFLOAT(fRec69[0]); - output42[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (0.02017333553791887 * ((fSlow249 * (fTemp3 + (fSlow251 * fTemp5))) + (fTemp6 + (fSlow252 * fTemp8)))); - fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + output42[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * ((fSlow247 * (fTemp2 + (fSlow249 * fTemp4))) + (fTemp5 + (fSlow250 * fTemp7)))); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph43 = FAUSTFLOAT(fRec70[0]); - output43[i] = FAUSTFLOAT(fTemp52); - double fTemp53 = (0.02017333553791887 * ((fSlow253 * (fTemp3 + (fSlow255 * fTemp5))) + (fTemp6 + (fSlow256 * fTemp8)))); - fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + output43[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (0.02017333553791887 * ((fSlow251 * (fTemp2 + (fSlow253 * fTemp4))) + (fTemp5 + (fSlow254 * fTemp7)))); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph44 = FAUSTFLOAT(fRec71[0]); - output44[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = (0.02017333553791887 * ((fSlow257 * (fTemp3 + (fSlow259 * fTemp5))) + (fTemp6 + (fSlow260 * fTemp8)))); - fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + output44[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (0.02017333553791887 * ((fSlow255 * (fTemp2 + (fSlow257 * fTemp4))) + (fTemp5 + (fSlow258 * fTemp7)))); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); fVbargraph45 = FAUSTFLOAT(fRec72[0]); - output45[i] = FAUSTFLOAT(fTemp54); - double fTemp55 = (0.02017333553791887 * ((fSlow261 * (fTemp3 + (fSlow263 * fTemp5))) + (fTemp6 + (fSlow264 * fTemp8)))); - fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + output45[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (0.02017333553791887 * ((fSlow259 * (fTemp2 + (fSlow261 * fTemp4))) + (fTemp5 + (fSlow262 * fTemp7)))); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); fVbargraph46 = FAUSTFLOAT(fRec73[0]); - output46[i] = FAUSTFLOAT(fTemp55); - double fTemp56 = (0.02017333553791887 * ((fSlow265 * (fTemp3 + (fSlow267 * fTemp5))) + (fTemp6 + (fSlow268 * fTemp8)))); - fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + output46[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (0.02017333553791887 * ((fSlow263 * (fTemp2 + (fSlow265 * fTemp4))) + (fTemp5 + (fSlow266 * fTemp7)))); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); fVbargraph47 = FAUSTFLOAT(fRec74[0]); - output47[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (0.02017333553791887 * ((fSlow269 * (fTemp3 + (fSlow271 * fTemp5))) + (fTemp6 + (fSlow272 * fTemp8)))); - fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + output47[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (0.02017333553791887 * ((fSlow267 * (fTemp2 + (fSlow269 * fTemp4))) + (fTemp5 + (fSlow270 * fTemp7)))); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); fVbargraph48 = FAUSTFLOAT(fRec75[0]); - output48[i] = FAUSTFLOAT(fTemp57); - double fTemp58 = (0.02017333553791887 * ((fSlow273 * (fTemp3 + (fSlow275 * fTemp5))) + (fTemp6 + (fSlow276 * fTemp8)))); - fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + output48[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (0.02017333553791887 * ((fSlow271 * (fTemp2 + (fSlow273 * fTemp4))) + (fTemp5 + (fSlow274 * fTemp7)))); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); fVbargraph49 = FAUSTFLOAT(fRec76[0]); - output49[i] = FAUSTFLOAT(fTemp58); + output49[i] = FAUSTFLOAT(fTemp57); fRec3[1] = fRec3[0]; fRec4[1] = fRec4[0]; fRec2[1] = fRec2[0]; @@ -2374,7 +2381,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2606,7 +2612,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2669,7 +2675,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2698,11 +2704,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAPanLebedev504.cpp b/source/HOAUGens/HOAPanLebedev504.cpp index f57f984617..86820dfd82 100644 --- a/source/HOAUGens/HOAPanLebedev504.cpp +++ b/source/HOAUGens/HOAPanLebedev504.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev504" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,27 +613,23 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double cos(double dummy0); -double sin(double dummy0); -double pow(double dummy0, double dummy1); double mydsp_faustpower2_f(double value) { return (value * value); -} -double fabs(double dummy0); -double log10(double dummy0); -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -629,14 +639,13 @@ class mydsp : public dsp { double fConst0; double fConst1; FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; FAUSTFLOAT fCheckbox0; double fConst2; double fConst3; - FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider1; FAUSTFLOAT fEntry0; FAUSTFLOAT fCheckbox1; - FAUSTFLOAT fHslider3; + FAUSTFLOAT fHslider2; double fRec3[2]; double fRec4[2]; double fRec2[2]; @@ -700,6 +709,7 @@ class mydsp : public dsp { double fRec38[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec44[2]; FAUSTFLOAT fVbargraph1; double fRec45[2]; @@ -806,36 +816,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev504"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1081,7 +1091,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -1100,16 +1110,16 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.0); - fHslider1 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(2.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); - fHslider3 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); fCheckbox2 = FAUSTFLOAT(0.0); fCheckbox3 = FAUSTFLOAT(0.0); fCheckbox4 = FAUSTFLOAT(0.0); fCheckbox5 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -1518,30 +1528,30 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAPanLebedev504"); ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fHslider3, "0+1", ""); - ui_interface->declare(&fHslider3, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider3, 0.0, -30.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider2, "0+2", ""); - ui_interface->declare(&fHslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider2, "0+1", ""); + ui_interface->declare(&fHslider2, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider2, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider0, "0+3", ""); - ui_interface->declare(&fHslider0, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+4", ""); - ui_interface->declare(&fHslider1, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider2, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+4", ""); + ui_interface->declare(&fHslider0, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox1); @@ -1562,257 +1572,257 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3611fb0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2fbc6c0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x361bf70", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2fc8520", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3626be0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2fd25c0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3631930", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2fdc740", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x363c760", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2fe69a0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3645a30", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ff02c0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x364fb30", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x2ffa660", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36593b0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3004180", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3662d10", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x300dd80", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x366c750", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3017a60", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3677ac0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3022200", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3682f10", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x302ca80", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x368e440", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30373e0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3699a50", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3041e20", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36a3500", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x304bb70", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36ad090", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30559a0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36b6d00", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x305f8b0", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36c0a50", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30698a0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36cb5d0", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30746c0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36d58d0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x307ec60", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36dfcb0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30892e0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36ea170", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3093a40", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36f4320", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x309de90", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36fe5b0", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30a83c0", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3708920", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30b29d0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3712d70", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30bd0c0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x371d5a0", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30c7b90", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3726aa0", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30d1330", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3730080", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30dabb0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3739740", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30e4510", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3744040", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30ef0b0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x374e290", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30f95a0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37585c0", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3103b70", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37629d0", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x310e220", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x376cec0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31189b0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3777490", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3123220", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3781b40", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x312db70", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x378c2d0", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31385a0", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3795d80", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31422f0", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x379f910", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x314c120", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37a9580", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3156030", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37b32d0", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3160020", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37bd100", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x316a0f0", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37c7010", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31742a0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37d1000", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x317e530", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37db0d0", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31888a0", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37e5280", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3192cf0", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37ef510", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x319d220", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x37f9880", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31a7830", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3803cd0", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31b1f20", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1873,616 +1883,705 @@ class mydsp : public dsp { FAUSTFLOAT* output48 = outputs[48]; FAUSTFLOAT* output49 = outputs[49]; double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fHslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (6.123233995736766e-17 * fSlow4); - double fSlow6 = sin(fSlow2); - double fSlow7 = (fSlow5 + fSlow6); - double fSlow8 = (1.0 - double(fCheckbox0)); - double fSlow9 = (3.0 * fSlow8); - double fSlow10 = double(fHslider2); - double fSlow11 = (fConst3 / fSlow10); - double fSlow12 = (fSlow11 + 1.0); - double fSlow13 = (fConst2 / (fSlow12 * fSlow10)); - double fSlow14 = double(fEntry0); - double fSlow15 = (fConst3 / fSlow14); - double fSlow16 = (1.0 / (fSlow15 + 1.0)); - double fSlow17 = double(fCheckbox1); - double fSlow18 = (((fSlow12 * fSlow17) * fSlow14) / fSlow10); - double fSlow19 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider3)))); - double fSlow20 = (fConst2 / fSlow14); - double fSlow21 = (1.0 - fSlow17); - double fSlow22 = (fSlow21 * fSlow14); - double fSlow23 = mydsp_faustpower2_f(fSlow7); - double fSlow24 = (1.0 - double(fCheckbox2)); - double fSlow25 = (3.5 * (((5.0 * fSlow23) + -3.0) * fSlow24)); - double fSlow26 = ((fConst5 / fSlow10) + 1.0); - double fSlow27 = (fConst4 / (fSlow26 * fSlow10)); - double fSlow28 = (1.0 / ((fConst5 / fSlow14) + 1.0)); - double fSlow29 = mydsp_faustpower2_f(fSlow15); - double fSlow30 = (1.0 / (((fConst6 / fSlow14) + (6.4594326934833797 * fSlow29)) + 1.0)); - double fSlow31 = mydsp_faustpower2_f(fSlow11); - double fSlow32 = (((fConst6 / fSlow10) + (6.4594326934833797 * fSlow31)) + 1.0); - double fSlow33 = (((fSlow32 * fSlow17) * fSlow14) / fSlow10); - double fSlow34 = (25.837730773933519 * fSlow29); - double fSlow35 = (fSlow34 + (fConst7 / fSlow14)); - double fSlow36 = (1.0 / fSlow32); - double fSlow37 = (25.837730773933519 * fSlow31); - double fSlow38 = ((fConst7 / fSlow10) + fSlow37); - double fSlow39 = (fConst4 / fSlow14); - double fSlow40 = ((((fSlow17 / fSlow10) + fSlow21) * fSlow14) * (1.0 - double(fCheckbox3))); - double fSlow41 = (1.0 - double(fCheckbox4)); - double fSlow42 = (2.5 * (((3.0 * fSlow23) + -1.0) * fSlow41)); - double fSlow43 = (((fConst8 / fSlow10) + (3.0 * fSlow31)) + 1.0); - double fSlow44 = (1.0 / fSlow43); - double fSlow45 = (12.0 * fSlow31); - double fSlow46 = ((fConst9 / fSlow10) + fSlow45); - double fSlow47 = (1.0 / (((fConst8 / fSlow14) + (3.0 * fSlow29)) + 1.0)); - double fSlow48 = (((fSlow43 * fSlow17) * fSlow14) / fSlow10); - double fSlow49 = (12.0 * fSlow29); - double fSlow50 = (fSlow49 + (fConst9 / fSlow14)); - double fSlow51 = (1.0 - double(fCheckbox5)); - double fSlow52 = (1.125 * (((fSlow23 * ((35.0 * fSlow23) + -30.0)) + 3.0) * fSlow51)); - double fSlow53 = (((fConst10 / fSlow10) + (9.1401308902779004 * fSlow31)) + 1.0); - double fSlow54 = (1.0 / fSlow53); - double fSlow55 = (36.560523561111602 * fSlow31); - double fSlow56 = ((fConst11 / fSlow10) + fSlow55); - double fSlow57 = (1.0 / (((fConst10 / fSlow14) + (9.1401308902779004 * fSlow29)) + 1.0)); - double fSlow58 = (1.0 / (((fConst12 / fSlow14) + (11.4878004768713 * fSlow29)) + 1.0)); - double fSlow59 = (((fConst12 / fSlow10) + (11.4878004768713 * fSlow31)) + 1.0); - double fSlow60 = (((fSlow59 * fSlow17) * fSlow14) / fSlow10); - double fSlow61 = (45.951201907485199 * fSlow29); - double fSlow62 = (fSlow61 + (fConst13 / fSlow14)); - double fSlow63 = (1.0 / fSlow59); - double fSlow64 = (45.951201907485199 * fSlow31); - double fSlow65 = ((fConst13 / fSlow10) + fSlow64); - double fSlow66 = (36.560523561111602 * fSlow29); - double fSlow67 = (fSlow66 + (fConst11 / fSlow14)); - double fSlow68 = (3.0 * ((fSlow1 * fSlow8) * fSlow3)); - double fSlow69 = mydsp_faustpower2_f(fSlow4); - double fSlow70 = (2.5 * (((3.0 * fSlow69) + -1.0) * fSlow41)); - double fSlow71 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow4)) - (3.0 * fSlow4)) * fSlow24)); - double fSlow72 = (1.125 * (((fSlow69 * ((35.0 * fSlow69) + -30.0)) + 3.0) * fSlow51)); - double fSlow73 = cos((fSlow0 + -1.5707963267948966)); - double fSlow74 = (3.0 * ((fSlow73 * fSlow8) * fSlow3)); - double fSlow75 = (fSlow73 * fSlow3); - double fSlow76 = mydsp_faustpower2_f(fSlow75); - double fSlow77 = (2.5 * (((3.0 * fSlow76) + -1.0) * fSlow41)); - double fSlow78 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow75)) - (3.0 * fSlow75)) * fSlow24)); - double fSlow79 = (1.125 * (((fSlow76 * ((35.0 * fSlow76) + -30.0)) + 3.0) * fSlow51)); - double fSlow80 = cos((fSlow0 + -3.1415926535897931)); - double fSlow81 = (3.0 * ((fSlow80 * fSlow8) * fSlow3)); - double fSlow82 = (fSlow80 * fSlow3); - double fSlow83 = mydsp_faustpower2_f(fSlow82); - double fSlow84 = (2.5 * (((3.0 * fSlow83) + -1.0) * fSlow41)); - double fSlow85 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow82)) - (3.0 * fSlow82)) * fSlow24)); - double fSlow86 = (1.125 * (((fSlow83 * ((35.0 * fSlow83) + -30.0)) + 3.0) * fSlow51)); - double fSlow87 = cos((fSlow0 + -4.7123889803846897)); - double fSlow88 = (3.0 * ((fSlow87 * fSlow8) * fSlow3)); - double fSlow89 = (fSlow87 * fSlow3); - double fSlow90 = mydsp_faustpower2_f(fSlow89); - double fSlow91 = (2.5 * (((3.0 * fSlow90) + -1.0) * fSlow41)); - double fSlow92 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow89)) - (3.0 * fSlow89)) * fSlow24)); - double fSlow93 = (1.125 * (((fSlow90 * ((35.0 * fSlow90) + -30.0)) + 3.0) * fSlow51)); - double fSlow94 = (fSlow5 - fSlow6); - double fSlow95 = mydsp_faustpower2_f(fSlow94); - double fSlow96 = (3.5 * (((5.0 * fSlow95) + -3.0) * fSlow24)); - double fSlow97 = (2.5 * (((3.0 * fSlow95) + -1.0) * fSlow41)); - double fSlow98 = (1.125 * (((fSlow95 * ((35.0 * fSlow95) + -30.0)) + 3.0) * fSlow51)); - double fSlow99 = (0.70710678118654757 * fSlow4); - double fSlow100 = (0.70710678118654746 * fSlow6); - double fSlow101 = (fSlow99 + fSlow100); - double fSlow102 = mydsp_faustpower2_f(fSlow101); - double fSlow103 = (3.5 * (((5.0 * fSlow102) + -3.0) * fSlow24)); - double fSlow104 = (2.5 * (((3.0 * fSlow102) + -1.0) * fSlow41)); - double fSlow105 = (1.125 * (((fSlow102 * ((35.0 * fSlow102) + -30.0)) + 3.0) * fSlow51)); - double fSlow106 = (0.70710678118654757 * fSlow75); - double fSlow107 = (fSlow100 + fSlow106); + double fSlow1 = sin(fSlow0); + double fSlow2 = (3.0 * (1.0 - double(fCheckbox0))); + double fSlow3 = double(fHslider1); + double fSlow4 = (fConst3 / fSlow3); + double fSlow5 = (fSlow4 + 1.0); + double fSlow6 = (fConst2 / (fSlow5 * fSlow3)); + double fSlow7 = double(fEntry0); + double fSlow8 = (fConst3 / fSlow7); + double fSlow9 = (1.0 / (fSlow8 + 1.0)); + double fSlow10 = double(fCheckbox1); + double fSlow11 = (((fSlow5 * fSlow10) * fSlow7) / fSlow3); + double fSlow12 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider2)))); + double fSlow13 = (fConst2 / fSlow7); + double fSlow14 = (1.0 - fSlow10); + double fSlow15 = (fSlow14 * fSlow7); + double fSlow16 = mydsp_faustpower2_f(fSlow1); + double fSlow17 = ((3.0 * fSlow16) + -1.0); + double fSlow18 = ((2.5 * fSlow17) + -2.0); + double fSlow19 = (1.0 - double(fCheckbox2)); + double fSlow20 = (2.333333333333333 * (fSlow18 * fSlow19)); + double fSlow21 = ((fConst5 / fSlow3) + 1.0); + double fSlow22 = (fConst4 / (fSlow21 * fSlow3)); + double fSlow23 = (1.0 / ((fConst5 / fSlow7) + 1.0)); + double fSlow24 = mydsp_faustpower2_f(fSlow8); + double fSlow25 = (1.0 / (((fConst6 / fSlow7) + (6.4594326934833797 * fSlow24)) + 1.0)); + double fSlow26 = mydsp_faustpower2_f(fSlow4); + double fSlow27 = (((fConst6 / fSlow3) + (6.4594326934833797 * fSlow26)) + 1.0); + double fSlow28 = (((fSlow27 * fSlow10) * fSlow7) / fSlow3); + double fSlow29 = (25.837730773933519 * fSlow24); + double fSlow30 = (fSlow29 + (fConst7 / fSlow7)); + double fSlow31 = (1.0 / fSlow27); + double fSlow32 = (25.837730773933519 * fSlow26); + double fSlow33 = ((fConst7 / fSlow3) + fSlow32); + double fSlow34 = (fConst4 / fSlow7); + double fSlow35 = ((((fSlow10 / fSlow3) + fSlow14) * fSlow7) * (1.0 - double(fCheckbox3))); + double fSlow36 = (1.0 - double(fCheckbox4)); + double fSlow37 = (2.5 * (fSlow17 * fSlow36)); + double fSlow38 = (((fConst8 / fSlow3) + (3.0 * fSlow26)) + 1.0); + double fSlow39 = (1.0 / fSlow38); + double fSlow40 = (12.0 * fSlow26); + double fSlow41 = ((fConst9 / fSlow3) + fSlow40); + double fSlow42 = (1.0 / (((fConst8 / fSlow7) + (3.0 * fSlow24)) + 1.0)); + double fSlow43 = (((fSlow38 * fSlow10) * fSlow7) / fSlow3); + double fSlow44 = (12.0 * fSlow24); + double fSlow45 = (fSlow44 + (fConst9 / fSlow7)); + double fSlow46 = (1.0 - double(fCheckbox5)); + double fSlow47 = (2.25 * (((2.333333333333333 * (fSlow18 * fSlow16)) - (1.5 * fSlow17)) * fSlow46)); + double fSlow48 = (((fConst10 / fSlow3) + (9.1401308902779004 * fSlow26)) + 1.0); + double fSlow49 = (1.0 / fSlow48); + double fSlow50 = (36.560523561111602 * fSlow26); + double fSlow51 = ((fConst11 / fSlow3) + fSlow50); + double fSlow52 = (1.0 / (((fConst10 / fSlow7) + (9.1401308902779004 * fSlow24)) + 1.0)); + double fSlow53 = (1.0 / (((fConst12 / fSlow7) + (11.4878004768713 * fSlow24)) + 1.0)); + double fSlow54 = (((fConst12 / fSlow3) + (11.4878004768713 * fSlow26)) + 1.0); + double fSlow55 = (((fSlow54 * fSlow10) * fSlow7) / fSlow3); + double fSlow56 = (45.951201907485199 * fSlow24); + double fSlow57 = (fSlow56 + (fConst13 / fSlow7)); + double fSlow58 = (1.0 / fSlow54); + double fSlow59 = (45.951201907485199 * fSlow26); + double fSlow60 = ((fConst13 / fSlow3) + fSlow59); + double fSlow61 = (36.560523561111602 * fSlow24); + double fSlow62 = (fSlow61 + (fConst11 / fSlow7)); + double fSlow63 = double(fHslider3); + double fSlow64 = cos(fSlow63); + double fSlow65 = cos(fSlow0); + double fSlow66 = (fSlow64 * fSlow65); + double fSlow67 = mydsp_faustpower2_f(fSlow64); + double fSlow68 = mydsp_faustpower2_f(fSlow65); + double fSlow69 = ((3.0 * (fSlow67 * fSlow68)) + -1.0); + double fSlow70 = ((2.5 * fSlow69) + -2.0); + double fSlow71 = (2.333333333333333 * (fSlow70 * fSlow19)); + double fSlow72 = (2.5 * (fSlow69 * fSlow36)); + double fSlow73 = (2.25 * (((2.333333333333333 * ((fSlow67 * fSlow70) * fSlow68)) - (1.5 * fSlow69)) * fSlow46)); + double fSlow74 = cos((fSlow63 + -1.5707963267948966)); + double fSlow75 = (fSlow74 * fSlow65); + double fSlow76 = mydsp_faustpower2_f(fSlow74); + double fSlow77 = ((3.0 * (fSlow76 * fSlow68)) + -1.0); + double fSlow78 = ((2.5 * fSlow77) + -2.0); + double fSlow79 = (2.333333333333333 * (fSlow78 * fSlow19)); + double fSlow80 = (2.5 * (fSlow77 * fSlow36)); + double fSlow81 = (2.25 * (((2.333333333333333 * ((fSlow76 * fSlow78) * fSlow68)) - (1.5 * fSlow77)) * fSlow46)); + double fSlow82 = cos((fSlow63 + -3.1415926535897931)); + double fSlow83 = (fSlow82 * fSlow65); + double fSlow84 = mydsp_faustpower2_f(fSlow82); + double fSlow85 = ((3.0 * (fSlow84 * fSlow68)) + -1.0); + double fSlow86 = ((2.5 * fSlow85) + -2.0); + double fSlow87 = (2.333333333333333 * (fSlow86 * fSlow19)); + double fSlow88 = (2.5 * (fSlow85 * fSlow36)); + double fSlow89 = (2.25 * (((2.333333333333333 * ((fSlow84 * fSlow86) * fSlow68)) - (1.5 * fSlow85)) * fSlow46)); + double fSlow90 = cos((fSlow63 + -4.7123889803846897)); + double fSlow91 = (fSlow90 * fSlow65); + double fSlow92 = mydsp_faustpower2_f(fSlow90); + double fSlow93 = ((3.0 * (fSlow92 * fSlow68)) + -1.0); + double fSlow94 = ((2.5 * fSlow93) + -2.0); + double fSlow95 = (2.333333333333333 * (fSlow94 * fSlow19)); + double fSlow96 = (2.5 * (fSlow93 * fSlow36)); + double fSlow97 = (2.25 * (((2.333333333333333 * ((fSlow92 * fSlow94) * fSlow68)) - (1.5 * fSlow93)) * fSlow46)); + double fSlow98 = ((6.123233995736766e-17 * fSlow66) - fSlow1); + double fSlow99 = mydsp_faustpower2_f(fSlow98); + double fSlow100 = ((3.0 * fSlow99) + -1.0); + double fSlow101 = ((2.5 * fSlow100) + -2.0); + double fSlow102 = (2.333333333333333 * (fSlow101 * fSlow19)); + double fSlow103 = (2.5 * (fSlow100 * fSlow36)); + double fSlow104 = (2.25 * (((2.333333333333333 * (fSlow99 * fSlow101)) - (1.5 * fSlow100)) * fSlow46)); + double fSlow105 = (0.70710678118654757 * fSlow66); + double fSlow106 = (0.70710678118654746 * fSlow1); + double fSlow107 = (fSlow105 + fSlow106); double fSlow108 = mydsp_faustpower2_f(fSlow107); - double fSlow109 = (3.5 * (((5.0 * fSlow108) + -3.0) * fSlow24)); - double fSlow110 = (2.5 * (((3.0 * fSlow108) + -1.0) * fSlow41)); - double fSlow111 = (1.125 * (((fSlow108 * ((35.0 * fSlow108) + -30.0)) + 3.0) * fSlow51)); - double fSlow112 = (0.70710678118654757 * fSlow82); - double fSlow113 = (fSlow100 + fSlow112); - double fSlow114 = mydsp_faustpower2_f(fSlow113); - double fSlow115 = (3.5 * (((5.0 * fSlow114) + -3.0) * fSlow24)); - double fSlow116 = (2.5 * (((3.0 * fSlow114) + -1.0) * fSlow41)); - double fSlow117 = (1.125 * (((fSlow114 * ((35.0 * fSlow114) + -30.0)) + 3.0) * fSlow51)); - double fSlow118 = (0.70710678118654757 * fSlow89); - double fSlow119 = (fSlow100 + fSlow118); - double fSlow120 = mydsp_faustpower2_f(fSlow119); - double fSlow121 = (3.5 * (((5.0 * fSlow120) + -3.0) * fSlow24)); - double fSlow122 = (2.5 * (((3.0 * fSlow120) + -1.0) * fSlow41)); - double fSlow123 = (1.125 * (((fSlow120 * ((35.0 * fSlow120) + -30.0)) + 3.0) * fSlow51)); - double fSlow124 = cos((fSlow0 + -0.78539816339744828)); - double fSlow125 = (3.0 * ((fSlow124 * fSlow8) * fSlow3)); - double fSlow126 = (fSlow124 * fSlow3); - double fSlow127 = mydsp_faustpower2_f(fSlow126); - double fSlow128 = (2.5 * (((3.0 * fSlow127) + -1.0) * fSlow41)); - double fSlow129 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow126)) - (3.0 * fSlow126)) * fSlow24)); - double fSlow130 = (1.125 * (((fSlow127 * ((35.0 * fSlow127) + -30.0)) + 3.0) * fSlow51)); - double fSlow131 = cos((fSlow0 + -2.3561944901923448)); - double fSlow132 = (3.0 * ((fSlow131 * fSlow8) * fSlow3)); - double fSlow133 = (fSlow131 * fSlow3); - double fSlow134 = mydsp_faustpower2_f(fSlow133); - double fSlow135 = (2.5 * (((3.0 * fSlow134) + -1.0) * fSlow41)); - double fSlow136 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow133)) - (3.0 * fSlow133)) * fSlow24)); - double fSlow137 = (1.125 * (((fSlow134 * ((35.0 * fSlow134) + -30.0)) + 3.0) * fSlow51)); - double fSlow138 = cos((fSlow0 + -3.9269908169872414)); - double fSlow139 = (3.0 * ((fSlow138 * fSlow8) * fSlow3)); - double fSlow140 = (fSlow138 * fSlow3); - double fSlow141 = mydsp_faustpower2_f(fSlow140); - double fSlow142 = (2.5 * (((3.0 * fSlow141) + -1.0) * fSlow41)); - double fSlow143 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow140)) - (3.0 * fSlow140)) * fSlow24)); - double fSlow144 = (1.125 * (((fSlow141 * ((35.0 * fSlow141) + -30.0)) + 3.0) * fSlow51)); - double fSlow145 = cos((fSlow0 + -5.497787143782138)); - double fSlow146 = (3.0 * ((fSlow145 * fSlow8) * fSlow3)); - double fSlow147 = (fSlow145 * fSlow3); - double fSlow148 = mydsp_faustpower2_f(fSlow147); - double fSlow149 = (2.5 * (((3.0 * fSlow148) + -1.0) * fSlow41)); - double fSlow150 = (3.5 * (((5.0 * mydsp_faustpower3_f(fSlow147)) - (3.0 * fSlow147)) * fSlow24)); - double fSlow151 = (1.125 * (((fSlow148 * ((35.0 * fSlow148) + -30.0)) + 3.0) * fSlow51)); - double fSlow152 = (fSlow99 - fSlow100); - double fSlow153 = mydsp_faustpower2_f(fSlow152); - double fSlow154 = (3.5 * (((5.0 * fSlow153) + -3.0) * fSlow24)); - double fSlow155 = (2.5 * (((3.0 * fSlow153) + -1.0) * fSlow41)); - double fSlow156 = (1.125 * (((fSlow153 * ((35.0 * fSlow153) + -30.0)) + 3.0) * fSlow51)); - double fSlow157 = (fSlow106 - fSlow100); - double fSlow158 = mydsp_faustpower2_f(fSlow157); - double fSlow159 = (3.5 * (((5.0 * fSlow158) + -3.0) * fSlow24)); - double fSlow160 = (2.5 * (((3.0 * fSlow158) + -1.0) * fSlow41)); - double fSlow161 = (1.125 * (((fSlow158 * ((35.0 * fSlow158) + -30.0)) + 3.0) * fSlow51)); - double fSlow162 = (fSlow112 - fSlow100); - double fSlow163 = mydsp_faustpower2_f(fSlow162); - double fSlow164 = (3.5 * (((5.0 * fSlow163) + -3.0) * fSlow24)); - double fSlow165 = (2.5 * (((3.0 * fSlow163) + -1.0) * fSlow41)); - double fSlow166 = (1.125 * (((fSlow163 * ((35.0 * fSlow163) + -30.0)) + 3.0) * fSlow51)); - double fSlow167 = (fSlow118 - fSlow100); - double fSlow168 = mydsp_faustpower2_f(fSlow167); - double fSlow169 = (3.5 * (((5.0 * fSlow168) + -3.0) * fSlow24)); - double fSlow170 = (2.5 * (((3.0 * fSlow168) + -1.0) * fSlow41)); - double fSlow171 = (1.125 * (((fSlow168 * ((35.0 * fSlow168) + -30.0)) + 3.0) * fSlow51)); - double fSlow172 = (0.81649658092772592 * fSlow126); - double fSlow173 = (0.57735026918962584 * fSlow6); - double fSlow174 = (fSlow172 + fSlow173); - double fSlow175 = mydsp_faustpower2_f(fSlow174); - double fSlow176 = (3.5 * (((5.0 * fSlow175) + -3.0) * fSlow24)); - double fSlow177 = (2.5 * (((3.0 * fSlow175) + -1.0) * fSlow41)); - double fSlow178 = (1.125 * (((fSlow175 * ((35.0 * fSlow175) + -30.0)) + 3.0) * fSlow51)); - double fSlow179 = (0.81649658092772592 * fSlow133); - double fSlow180 = (fSlow173 + fSlow179); - double fSlow181 = mydsp_faustpower2_f(fSlow180); - double fSlow182 = (3.5 * (((5.0 * fSlow181) + -3.0) * fSlow24)); - double fSlow183 = (2.5 * (((3.0 * fSlow181) + -1.0) * fSlow41)); - double fSlow184 = (1.125 * (((fSlow181 * ((35.0 * fSlow181) + -30.0)) + 3.0) * fSlow51)); - double fSlow185 = (0.81649658092772592 * fSlow140); - double fSlow186 = (fSlow173 + fSlow185); - double fSlow187 = mydsp_faustpower2_f(fSlow186); - double fSlow188 = (3.5 * (((5.0 * fSlow187) + -3.0) * fSlow24)); - double fSlow189 = (2.5 * (((3.0 * fSlow187) + -1.0) * fSlow41)); - double fSlow190 = (1.125 * (((fSlow187 * ((35.0 * fSlow187) + -30.0)) + 3.0) * fSlow51)); - double fSlow191 = (0.81649658092772592 * fSlow147); - double fSlow192 = (fSlow173 + fSlow191); - double fSlow193 = mydsp_faustpower2_f(fSlow192); - double fSlow194 = (3.5 * (((5.0 * fSlow193) + -3.0) * fSlow24)); - double fSlow195 = (2.5 * (((3.0 * fSlow193) + -1.0) * fSlow41)); - double fSlow196 = (1.125 * (((fSlow193 * ((35.0 * fSlow193) + -30.0)) + 3.0) * fSlow51)); - double fSlow197 = (fSlow172 - fSlow173); - double fSlow198 = mydsp_faustpower2_f(fSlow197); - double fSlow199 = (3.5 * (((5.0 * fSlow198) + -3.0) * fSlow24)); - double fSlow200 = (2.5 * (((3.0 * fSlow198) + -1.0) * fSlow41)); - double fSlow201 = (1.125 * (((fSlow198 * ((35.0 * fSlow198) + -30.0)) + 3.0) * fSlow51)); - double fSlow202 = (fSlow179 - fSlow173); - double fSlow203 = mydsp_faustpower2_f(fSlow202); - double fSlow204 = (3.5 * (((5.0 * fSlow203) + -3.0) * fSlow24)); - double fSlow205 = (2.5 * (((3.0 * fSlow203) + -1.0) * fSlow41)); - double fSlow206 = (1.125 * (((fSlow203 * ((35.0 * fSlow203) + -30.0)) + 3.0) * fSlow51)); - double fSlow207 = (fSlow185 - fSlow173); - double fSlow208 = mydsp_faustpower2_f(fSlow207); - double fSlow209 = (3.5 * (((5.0 * fSlow208) + -3.0) * fSlow24)); - double fSlow210 = (2.5 * (((3.0 * fSlow208) + -1.0) * fSlow41)); - double fSlow211 = (1.125 * (((fSlow208 * ((35.0 * fSlow208) + -30.0)) + 3.0) * fSlow51)); - double fSlow212 = (fSlow191 - fSlow173); - double fSlow213 = mydsp_faustpower2_f(fSlow212); - double fSlow214 = (3.5 * (((5.0 * fSlow213) + -3.0) * fSlow24)); - double fSlow215 = (2.5 * (((3.0 * fSlow213) + -1.0) * fSlow41)); - double fSlow216 = (1.125 * (((fSlow213 * ((35.0 * fSlow213) + -30.0)) + 3.0) * fSlow51)); - double fSlow217 = (0.42640143271122027 * (cos((fSlow0 + -0.78539816339744839)) * fSlow3)); - double fSlow218 = (0.90453403373329111 * fSlow6); - double fSlow219 = (fSlow217 + fSlow218); - double fSlow220 = mydsp_faustpower2_f(fSlow219); - double fSlow221 = (3.5 * (((5.0 * fSlow220) + -3.0) * fSlow24)); - double fSlow222 = (2.5 * (((3.0 * fSlow220) + -1.0) * fSlow41)); - double fSlow223 = (1.125 * (((fSlow220 * ((35.0 * fSlow220) + -30.0)) + 3.0) * fSlow51)); - double fSlow224 = (0.42640143271122027 * fSlow133); - double fSlow225 = (fSlow218 + fSlow224); - double fSlow226 = mydsp_faustpower2_f(fSlow225); - double fSlow227 = (3.5 * (((5.0 * fSlow226) + -3.0) * fSlow24)); - double fSlow228 = (2.5 * (((3.0 * fSlow226) + -1.0) * fSlow41)); - double fSlow229 = (1.125 * (((fSlow226 * ((35.0 * fSlow226) + -30.0)) + 3.0) * fSlow51)); - double fSlow230 = (0.42640143271122027 * fSlow140); - double fSlow231 = (fSlow218 + fSlow230); + double fSlow109 = ((3.0 * fSlow108) + -1.0); + double fSlow110 = ((2.5 * fSlow109) + -2.0); + double fSlow111 = (2.333333333333333 * (fSlow110 * fSlow19)); + double fSlow112 = (2.5 * (fSlow109 * fSlow36)); + double fSlow113 = (2.25 * (((2.333333333333333 * (fSlow108 * fSlow110)) - (1.5 * fSlow109)) * fSlow46)); + double fSlow114 = (0.70710678118654757 * fSlow75); + double fSlow115 = (fSlow106 + fSlow114); + double fSlow116 = mydsp_faustpower2_f(fSlow115); + double fSlow117 = ((3.0 * fSlow116) + -1.0); + double fSlow118 = ((2.5 * fSlow117) + -2.0); + double fSlow119 = (2.333333333333333 * (fSlow118 * fSlow19)); + double fSlow120 = (2.5 * (fSlow117 * fSlow36)); + double fSlow121 = (2.25 * (((2.333333333333333 * (fSlow116 * fSlow118)) - (1.5 * fSlow117)) * fSlow46)); + double fSlow122 = (0.70710678118654757 * fSlow83); + double fSlow123 = (fSlow106 + fSlow122); + double fSlow124 = mydsp_faustpower2_f(fSlow123); + double fSlow125 = ((3.0 * fSlow124) + -1.0); + double fSlow126 = ((2.5 * fSlow125) + -2.0); + double fSlow127 = (2.333333333333333 * (fSlow126 * fSlow19)); + double fSlow128 = (2.5 * (fSlow125 * fSlow36)); + double fSlow129 = (2.25 * (((2.333333333333333 * (fSlow124 * fSlow126)) - (1.5 * fSlow125)) * fSlow46)); + double fSlow130 = (0.70710678118654757 * fSlow91); + double fSlow131 = (fSlow106 + fSlow130); + double fSlow132 = mydsp_faustpower2_f(fSlow131); + double fSlow133 = ((3.0 * fSlow132) + -1.0); + double fSlow134 = ((2.5 * fSlow133) + -2.0); + double fSlow135 = (2.25 * (((2.333333333333333 * (fSlow132 * fSlow134)) - (1.5 * fSlow133)) * fSlow46)); + double fSlow136 = (2.333333333333333 * (fSlow134 * fSlow19)); + double fSlow137 = (2.5 * (fSlow133 * fSlow36)); + double fSlow138 = cos((fSlow63 + -0.78539816339744828)); + double fSlow139 = (fSlow138 * fSlow65); + double fSlow140 = mydsp_faustpower2_f(fSlow138); + double fSlow141 = ((3.0 * (fSlow140 * fSlow68)) + -1.0); + double fSlow142 = ((2.5 * fSlow141) + -2.0); + double fSlow143 = (2.333333333333333 * (fSlow142 * fSlow19)); + double fSlow144 = (2.5 * (fSlow141 * fSlow36)); + double fSlow145 = (2.25 * (((2.333333333333333 * ((fSlow140 * fSlow142) * fSlow68)) - (1.5 * fSlow141)) * fSlow46)); + double fSlow146 = cos((fSlow63 + -2.3561944901923448)); + double fSlow147 = (fSlow146 * fSlow65); + double fSlow148 = mydsp_faustpower2_f(fSlow146); + double fSlow149 = ((3.0 * (fSlow148 * fSlow68)) + -1.0); + double fSlow150 = ((2.5 * fSlow149) + -2.0); + double fSlow151 = (2.333333333333333 * (fSlow150 * fSlow19)); + double fSlow152 = (2.5 * (fSlow149 * fSlow36)); + double fSlow153 = (2.25 * (((2.333333333333333 * ((fSlow148 * fSlow150) * fSlow68)) - (1.5 * fSlow149)) * fSlow46)); + double fSlow154 = cos((fSlow63 + -3.9269908169872414)); + double fSlow155 = (fSlow154 * fSlow65); + double fSlow156 = mydsp_faustpower2_f(fSlow154); + double fSlow157 = ((3.0 * (fSlow156 * fSlow68)) + -1.0); + double fSlow158 = ((2.5 * fSlow157) + -2.0); + double fSlow159 = (2.333333333333333 * (fSlow158 * fSlow19)); + double fSlow160 = (2.5 * (fSlow157 * fSlow36)); + double fSlow161 = (2.25 * (((2.333333333333333 * ((fSlow156 * fSlow158) * fSlow68)) - (1.5 * fSlow157)) * fSlow46)); + double fSlow162 = cos((fSlow63 + -5.497787143782138)); + double fSlow163 = (fSlow162 * fSlow65); + double fSlow164 = mydsp_faustpower2_f(fSlow162); + double fSlow165 = ((3.0 * (fSlow164 * fSlow68)) + -1.0); + double fSlow166 = ((2.5 * fSlow165) + -2.0); + double fSlow167 = (2.333333333333333 * (fSlow166 * fSlow19)); + double fSlow168 = (2.5 * (fSlow165 * fSlow36)); + double fSlow169 = (2.25 * (((2.333333333333333 * ((fSlow164 * fSlow166) * fSlow68)) - (1.5 * fSlow165)) * fSlow46)); + double fSlow170 = (fSlow105 - fSlow106); + double fSlow171 = mydsp_faustpower2_f(fSlow170); + double fSlow172 = ((3.0 * fSlow171) + -1.0); + double fSlow173 = ((2.5 * fSlow172) + -2.0); + double fSlow174 = (2.333333333333333 * (fSlow173 * fSlow19)); + double fSlow175 = (2.5 * (fSlow172 * fSlow36)); + double fSlow176 = (2.25 * (((2.333333333333333 * (fSlow171 * fSlow173)) - (1.5 * fSlow172)) * fSlow46)); + double fSlow177 = (fSlow114 - fSlow106); + double fSlow178 = mydsp_faustpower2_f(fSlow177); + double fSlow179 = ((3.0 * fSlow178) + -1.0); + double fSlow180 = ((2.5 * fSlow179) + -2.0); + double fSlow181 = (2.333333333333333 * (fSlow180 * fSlow19)); + double fSlow182 = (2.5 * (fSlow179 * fSlow36)); + double fSlow183 = (2.25 * (((2.333333333333333 * (fSlow178 * fSlow180)) - (1.5 * fSlow179)) * fSlow46)); + double fSlow184 = (fSlow122 - fSlow106); + double fSlow185 = mydsp_faustpower2_f(fSlow184); + double fSlow186 = ((3.0 * fSlow185) + -1.0); + double fSlow187 = ((2.5 * fSlow186) + -2.0); + double fSlow188 = (2.333333333333333 * (fSlow187 * fSlow19)); + double fSlow189 = (2.5 * (fSlow186 * fSlow36)); + double fSlow190 = (2.25 * (((2.333333333333333 * (fSlow185 * fSlow187)) - (1.5 * fSlow186)) * fSlow46)); + double fSlow191 = (fSlow130 - fSlow106); + double fSlow192 = mydsp_faustpower2_f(fSlow191); + double fSlow193 = ((3.0 * fSlow192) + -1.0); + double fSlow194 = ((2.5 * fSlow193) + -2.0); + double fSlow195 = (2.333333333333333 * (fSlow194 * fSlow19)); + double fSlow196 = (2.5 * (fSlow193 * fSlow36)); + double fSlow197 = (2.25 * (((2.333333333333333 * (fSlow192 * fSlow194)) - (1.5 * fSlow193)) * fSlow46)); + double fSlow198 = (0.81649658092772592 * fSlow139); + double fSlow199 = (0.57735026918962584 * fSlow1); + double fSlow200 = (fSlow198 + fSlow199); + double fSlow201 = mydsp_faustpower2_f(fSlow200); + double fSlow202 = ((3.0 * fSlow201) + -1.0); + double fSlow203 = ((2.5 * fSlow202) + -2.0); + double fSlow204 = (2.333333333333333 * (fSlow203 * fSlow19)); + double fSlow205 = (2.5 * (fSlow202 * fSlow36)); + double fSlow206 = (2.25 * (((2.333333333333333 * (fSlow201 * fSlow203)) - (1.5 * fSlow202)) * fSlow46)); + double fSlow207 = (0.81649658092772592 * fSlow147); + double fSlow208 = (fSlow199 + fSlow207); + double fSlow209 = mydsp_faustpower2_f(fSlow208); + double fSlow210 = ((3.0 * fSlow209) + -1.0); + double fSlow211 = ((2.5 * fSlow210) + -2.0); + double fSlow212 = (2.333333333333333 * (fSlow211 * fSlow19)); + double fSlow213 = (2.5 * (fSlow210 * fSlow36)); + double fSlow214 = (2.25 * (((2.333333333333333 * (fSlow209 * fSlow211)) - (1.5 * fSlow210)) * fSlow46)); + double fSlow215 = (0.81649658092772592 * fSlow155); + double fSlow216 = (fSlow199 + fSlow215); + double fSlow217 = mydsp_faustpower2_f(fSlow216); + double fSlow218 = ((3.0 * fSlow217) + -1.0); + double fSlow219 = ((2.5 * fSlow218) + -2.0); + double fSlow220 = (2.333333333333333 * (fSlow219 * fSlow19)); + double fSlow221 = (2.5 * (fSlow218 * fSlow36)); + double fSlow222 = (2.25 * (((2.333333333333333 * (fSlow217 * fSlow219)) - (1.5 * fSlow218)) * fSlow46)); + double fSlow223 = (0.81649658092772592 * fSlow163); + double fSlow224 = (fSlow199 + fSlow223); + double fSlow225 = mydsp_faustpower2_f(fSlow224); + double fSlow226 = ((3.0 * fSlow225) + -1.0); + double fSlow227 = ((2.5 * fSlow226) + -2.0); + double fSlow228 = (2.333333333333333 * (fSlow227 * fSlow19)); + double fSlow229 = (2.5 * (fSlow226 * fSlow36)); + double fSlow230 = (2.25 * (((2.333333333333333 * (fSlow225 * fSlow227)) - (1.5 * fSlow226)) * fSlow46)); + double fSlow231 = (fSlow198 - fSlow199); double fSlow232 = mydsp_faustpower2_f(fSlow231); - double fSlow233 = (3.5 * (((5.0 * fSlow232) + -3.0) * fSlow24)); - double fSlow234 = (2.5 * (((3.0 * fSlow232) + -1.0) * fSlow41)); - double fSlow235 = (1.125 * (((fSlow232 * ((35.0 * fSlow232) + -30.0)) + 3.0) * fSlow51)); - double fSlow236 = (0.42640143271122027 * fSlow147); - double fSlow237 = (fSlow218 + fSlow236); - double fSlow238 = mydsp_faustpower2_f(fSlow237); - double fSlow239 = (3.5 * (((5.0 * fSlow238) + -3.0) * fSlow24)); - double fSlow240 = (2.5 * (((3.0 * fSlow238) + -1.0) * fSlow41)); - double fSlow241 = (1.125 * (((fSlow238 * ((35.0 * fSlow238) + -30.0)) + 3.0) * fSlow51)); - double fSlow242 = (0.95346258924559235 * (cos((fSlow0 + -0.32175055439664263)) * fSlow3)); - double fSlow243 = (0.30151134457776352 * fSlow6); - double fSlow244 = (fSlow242 + fSlow243); - double fSlow245 = mydsp_faustpower2_f(fSlow244); - double fSlow246 = (3.5 * (((5.0 * fSlow245) + -3.0) * fSlow24)); - double fSlow247 = (2.5 * (((3.0 * fSlow245) + -1.0) * fSlow41)); - double fSlow248 = (1.125 * (((fSlow245 * ((35.0 * fSlow245) + -30.0)) + 3.0) * fSlow51)); - double fSlow249 = (0.95346258924559235 * (cos((fSlow0 + -1.2490457723982544)) * fSlow3)); - double fSlow250 = (fSlow243 + fSlow249); - double fSlow251 = mydsp_faustpower2_f(fSlow250); - double fSlow252 = (3.5 * (((5.0 * fSlow251) + -3.0) * fSlow24)); - double fSlow253 = (2.5 * (((3.0 * fSlow251) + -1.0) * fSlow41)); - double fSlow254 = (1.125 * (((fSlow251 * ((35.0 * fSlow251) + -30.0)) + 3.0) * fSlow51)); - double fSlow255 = (0.95346258924559235 * (cos((fSlow0 + -1.8925468811915387)) * fSlow3)); - double fSlow256 = (fSlow243 + fSlow255); - double fSlow257 = mydsp_faustpower2_f(fSlow256); - double fSlow258 = (3.5 * (((5.0 * fSlow257) + -3.0) * fSlow24)); - double fSlow259 = (2.5 * (((3.0 * fSlow257) + -1.0) * fSlow41)); - double fSlow260 = (1.125 * (((fSlow257 * ((35.0 * fSlow257) + -30.0)) + 3.0) * fSlow51)); - double fSlow261 = (0.95346258924559235 * (cos((fSlow0 + -2.8198420991931505)) * fSlow3)); - double fSlow262 = (fSlow243 + fSlow261); - double fSlow263 = mydsp_faustpower2_f(fSlow262); - double fSlow264 = (3.5 * (((5.0 * fSlow263) + -3.0) * fSlow24)); - double fSlow265 = (2.5 * (((3.0 * fSlow263) + -1.0) * fSlow41)); - double fSlow266 = (1.125 * (((fSlow263 * ((35.0 * fSlow263) + -30.0)) + 3.0) * fSlow51)); - double fSlow267 = (0.95346258924559235 * (cos((fSlow0 + -3.4633432079864357)) * fSlow3)); - double fSlow268 = (fSlow243 + fSlow267); - double fSlow269 = mydsp_faustpower2_f(fSlow268); - double fSlow270 = (3.5 * (((5.0 * fSlow269) + -3.0) * fSlow24)); - double fSlow271 = (2.5 * (((3.0 * fSlow269) + -1.0) * fSlow41)); - double fSlow272 = (1.125 * (((fSlow269 * ((35.0 * fSlow269) + -30.0)) + 3.0) * fSlow51)); - double fSlow273 = (0.95346258924559235 * (cos((fSlow0 + -4.3906384259880475)) * fSlow3)); - double fSlow274 = (fSlow243 + fSlow273); - double fSlow275 = mydsp_faustpower2_f(fSlow274); - double fSlow276 = (3.5 * (((5.0 * fSlow275) + -3.0) * fSlow24)); - double fSlow277 = (2.5 * (((3.0 * fSlow275) + -1.0) * fSlow41)); - double fSlow278 = (1.125 * (((fSlow275 * ((35.0 * fSlow275) + -30.0)) + 3.0) * fSlow51)); - double fSlow279 = (0.95346258924559235 * (cos((fSlow0 + -5.0341395347813318)) * fSlow3)); - double fSlow280 = (fSlow243 + fSlow279); - double fSlow281 = mydsp_faustpower2_f(fSlow280); - double fSlow282 = (3.5 * (((5.0 * fSlow281) + -3.0) * fSlow24)); - double fSlow283 = (2.5 * (((3.0 * fSlow281) + -1.0) * fSlow41)); - double fSlow284 = (1.125 * (((fSlow281 * ((35.0 * fSlow281) + -30.0)) + 3.0) * fSlow51)); - double fSlow285 = (0.95346258924559235 * (cos((fSlow0 + -5.9614347527829432)) * fSlow3)); - double fSlow286 = (fSlow243 + fSlow285); - double fSlow287 = mydsp_faustpower2_f(fSlow286); - double fSlow288 = (3.5 * (((5.0 * fSlow287) + -3.0) * fSlow24)); - double fSlow289 = (2.5 * (((3.0 * fSlow287) + -1.0) * fSlow41)); - double fSlow290 = (1.125 * (((fSlow287 * ((35.0 * fSlow287) + -30.0)) + 3.0) * fSlow51)); - double fSlow291 = (fSlow242 - fSlow243); - double fSlow292 = mydsp_faustpower2_f(fSlow291); - double fSlow293 = (3.5 * (((5.0 * fSlow292) + -3.0) * fSlow24)); - double fSlow294 = (2.5 * (((3.0 * fSlow292) + -1.0) * fSlow41)); - double fSlow295 = (1.125 * (((fSlow292 * ((35.0 * fSlow292) + -30.0)) + 3.0) * fSlow51)); - double fSlow296 = (fSlow249 - fSlow243); - double fSlow297 = mydsp_faustpower2_f(fSlow296); - double fSlow298 = (3.5 * (((5.0 * fSlow297) + -3.0) * fSlow24)); - double fSlow299 = (2.5 * (((3.0 * fSlow297) + -1.0) * fSlow41)); - double fSlow300 = (1.125 * (((fSlow297 * ((35.0 * fSlow297) + -30.0)) + 3.0) * fSlow51)); - double fSlow301 = (fSlow255 - fSlow243); - double fSlow302 = mydsp_faustpower2_f(fSlow301); - double fSlow303 = (3.5 * (((5.0 * fSlow302) + -3.0) * fSlow24)); - double fSlow304 = (2.5 * (((3.0 * fSlow302) + -1.0) * fSlow41)); - double fSlow305 = (1.125 * (((fSlow302 * ((35.0 * fSlow302) + -30.0)) + 3.0) * fSlow51)); - double fSlow306 = (fSlow261 - fSlow243); - double fSlow307 = mydsp_faustpower2_f(fSlow306); - double fSlow308 = (3.5 * (((5.0 * fSlow307) + -3.0) * fSlow24)); - double fSlow309 = (2.5 * (((3.0 * fSlow307) + -1.0) * fSlow41)); - double fSlow310 = (1.125 * (((fSlow307 * ((35.0 * fSlow307) + -30.0)) + 3.0) * fSlow51)); - double fSlow311 = (fSlow267 - fSlow243); - double fSlow312 = mydsp_faustpower2_f(fSlow311); - double fSlow313 = (3.5 * (((5.0 * fSlow312) + -3.0) * fSlow24)); - double fSlow314 = (2.5 * (((3.0 * fSlow312) + -1.0) * fSlow41)); - double fSlow315 = (1.125 * (((fSlow312 * ((35.0 * fSlow312) + -30.0)) + 3.0) * fSlow51)); - double fSlow316 = (fSlow273 - fSlow243); - double fSlow317 = mydsp_faustpower2_f(fSlow316); - double fSlow318 = (3.5 * (((5.0 * fSlow317) + -3.0) * fSlow24)); - double fSlow319 = (2.5 * (((3.0 * fSlow317) + -1.0) * fSlow41)); - double fSlow320 = (1.125 * (((fSlow317 * ((35.0 * fSlow317) + -30.0)) + 3.0) * fSlow51)); - double fSlow321 = (fSlow279 - fSlow243); - double fSlow322 = mydsp_faustpower2_f(fSlow321); - double fSlow323 = (3.5 * (((5.0 * fSlow322) + -3.0) * fSlow24)); - double fSlow324 = (2.5 * (((3.0 * fSlow322) + -1.0) * fSlow41)); - double fSlow325 = (1.125 * (((fSlow322 * ((35.0 * fSlow322) + -30.0)) + 3.0) * fSlow51)); - double fSlow326 = (fSlow285 - fSlow243); + double fSlow233 = ((3.0 * fSlow232) + -1.0); + double fSlow234 = ((2.5 * fSlow233) + -2.0); + double fSlow235 = (2.333333333333333 * (fSlow234 * fSlow19)); + double fSlow236 = (2.5 * (fSlow233 * fSlow36)); + double fSlow237 = (2.25 * (((2.333333333333333 * (fSlow232 * fSlow234)) - (1.5 * fSlow233)) * fSlow46)); + double fSlow238 = (fSlow207 - fSlow199); + double fSlow239 = mydsp_faustpower2_f(fSlow238); + double fSlow240 = ((3.0 * fSlow239) + -1.0); + double fSlow241 = ((2.5 * fSlow240) + -2.0); + double fSlow242 = (2.333333333333333 * (fSlow241 * fSlow19)); + double fSlow243 = (2.5 * (fSlow240 * fSlow36)); + double fSlow244 = (2.25 * (((2.333333333333333 * (fSlow239 * fSlow241)) - (1.5 * fSlow240)) * fSlow46)); + double fSlow245 = (fSlow215 - fSlow199); + double fSlow246 = mydsp_faustpower2_f(fSlow245); + double fSlow247 = ((3.0 * fSlow246) + -1.0); + double fSlow248 = ((2.5 * fSlow247) + -2.0); + double fSlow249 = (2.333333333333333 * (fSlow248 * fSlow19)); + double fSlow250 = (2.5 * (fSlow247 * fSlow36)); + double fSlow251 = (2.25 * (((2.333333333333333 * (fSlow246 * fSlow248)) - (1.5 * fSlow247)) * fSlow46)); + double fSlow252 = (fSlow223 - fSlow199); + double fSlow253 = mydsp_faustpower2_f(fSlow252); + double fSlow254 = ((3.0 * fSlow253) + -1.0); + double fSlow255 = ((2.5 * fSlow254) + -2.0); + double fSlow256 = (2.333333333333333 * (fSlow255 * fSlow19)); + double fSlow257 = (2.5 * (fSlow254 * fSlow36)); + double fSlow258 = (2.25 * (((2.333333333333333 * (fSlow253 * fSlow255)) - (1.5 * fSlow254)) * fSlow46)); + double fSlow259 = (0.42640143271122027 * (cos((fSlow63 + -0.78539816339744839)) * fSlow65)); + double fSlow260 = (0.90453403373329111 * fSlow1); + double fSlow261 = (fSlow259 + fSlow260); + double fSlow262 = mydsp_faustpower2_f(fSlow261); + double fSlow263 = ((3.0 * fSlow262) + -1.0); + double fSlow264 = ((2.5 * fSlow263) + -2.0); + double fSlow265 = (2.333333333333333 * (fSlow264 * fSlow19)); + double fSlow266 = (2.5 * (fSlow263 * fSlow36)); + double fSlow267 = (2.25 * (((2.333333333333333 * (fSlow262 * fSlow264)) - (1.5 * fSlow263)) * fSlow46)); + double fSlow268 = (0.42640143271122027 * fSlow147); + double fSlow269 = (fSlow260 + fSlow268); + double fSlow270 = mydsp_faustpower2_f(fSlow269); + double fSlow271 = ((3.0 * fSlow270) + -1.0); + double fSlow272 = ((2.5 * fSlow271) + -2.0); + double fSlow273 = (2.333333333333333 * (fSlow272 * fSlow19)); + double fSlow274 = (2.5 * (fSlow271 * fSlow36)); + double fSlow275 = (2.25 * (((2.333333333333333 * (fSlow270 * fSlow272)) - (1.5 * fSlow271)) * fSlow46)); + double fSlow276 = (0.42640143271122027 * fSlow155); + double fSlow277 = (fSlow260 + fSlow276); + double fSlow278 = mydsp_faustpower2_f(fSlow277); + double fSlow279 = ((3.0 * fSlow278) + -1.0); + double fSlow280 = ((2.5 * fSlow279) + -2.0); + double fSlow281 = (2.333333333333333 * (fSlow280 * fSlow19)); + double fSlow282 = (2.5 * (fSlow279 * fSlow36)); + double fSlow283 = (2.25 * (((2.333333333333333 * (fSlow278 * fSlow280)) - (1.5 * fSlow279)) * fSlow46)); + double fSlow284 = (0.42640143271122027 * fSlow163); + double fSlow285 = (fSlow260 + fSlow284); + double fSlow286 = mydsp_faustpower2_f(fSlow285); + double fSlow287 = ((3.0 * fSlow286) + -1.0); + double fSlow288 = ((2.5 * fSlow287) + -2.0); + double fSlow289 = (2.333333333333333 * (fSlow288 * fSlow19)); + double fSlow290 = (2.5 * (fSlow287 * fSlow36)); + double fSlow291 = (2.25 * (((2.333333333333333 * (fSlow286 * fSlow288)) - (1.5 * fSlow287)) * fSlow46)); + double fSlow292 = (0.95346258924559235 * (cos((fSlow63 + -0.32175055439664263)) * fSlow65)); + double fSlow293 = (0.30151134457776352 * fSlow1); + double fSlow294 = (fSlow292 + fSlow293); + double fSlow295 = mydsp_faustpower2_f(fSlow294); + double fSlow296 = ((3.0 * fSlow295) + -1.0); + double fSlow297 = ((2.5 * fSlow296) + -2.0); + double fSlow298 = (2.333333333333333 * (fSlow297 * fSlow19)); + double fSlow299 = (2.5 * (fSlow296 * fSlow36)); + double fSlow300 = (2.25 * (((2.333333333333333 * (fSlow295 * fSlow297)) - (1.5 * fSlow296)) * fSlow46)); + double fSlow301 = (0.95346258924559235 * (cos((fSlow63 + -1.2490457723982544)) * fSlow65)); + double fSlow302 = (fSlow293 + fSlow301); + double fSlow303 = mydsp_faustpower2_f(fSlow302); + double fSlow304 = ((3.0 * fSlow303) + -1.0); + double fSlow305 = ((2.5 * fSlow304) + -2.0); + double fSlow306 = (2.333333333333333 * (fSlow305 * fSlow19)); + double fSlow307 = (2.5 * (fSlow304 * fSlow36)); + double fSlow308 = (2.25 * (((2.333333333333333 * (fSlow303 * fSlow305)) - (1.5 * fSlow304)) * fSlow46)); + double fSlow309 = (0.95346258924559235 * (cos((fSlow63 + -1.8925468811915387)) * fSlow65)); + double fSlow310 = (fSlow293 + fSlow309); + double fSlow311 = mydsp_faustpower2_f(fSlow310); + double fSlow312 = ((3.0 * fSlow311) + -1.0); + double fSlow313 = ((2.5 * fSlow312) + -2.0); + double fSlow314 = (2.333333333333333 * (fSlow313 * fSlow19)); + double fSlow315 = (2.5 * (fSlow312 * fSlow36)); + double fSlow316 = (2.25 * (((2.333333333333333 * (fSlow311 * fSlow313)) - (1.5 * fSlow312)) * fSlow46)); + double fSlow317 = (0.95346258924559235 * (cos((fSlow63 + -2.8198420991931505)) * fSlow65)); + double fSlow318 = (fSlow293 + fSlow317); + double fSlow319 = mydsp_faustpower2_f(fSlow318); + double fSlow320 = ((3.0 * fSlow319) + -1.0); + double fSlow321 = ((2.5 * fSlow320) + -2.0); + double fSlow322 = (2.333333333333333 * (fSlow321 * fSlow19)); + double fSlow323 = (2.5 * (fSlow320 * fSlow36)); + double fSlow324 = (2.25 * (((2.333333333333333 * (fSlow319 * fSlow321)) - (1.5 * fSlow320)) * fSlow46)); + double fSlow325 = (0.95346258924559235 * (cos((fSlow63 + -3.4633432079864357)) * fSlow65)); + double fSlow326 = (fSlow293 + fSlow325); double fSlow327 = mydsp_faustpower2_f(fSlow326); - double fSlow328 = (3.5 * (((5.0 * fSlow327) + -3.0) * fSlow24)); - double fSlow329 = (2.5 * (((3.0 * fSlow327) + -1.0) * fSlow41)); - double fSlow330 = (1.125 * (((fSlow327 * ((35.0 * fSlow327) + -30.0)) + 3.0) * fSlow51)); - double fSlow331 = (fSlow217 - fSlow218); - double fSlow332 = mydsp_faustpower2_f(fSlow331); - double fSlow333 = (3.5 * (((5.0 * fSlow332) + -3.0) * fSlow24)); - double fSlow334 = (2.5 * (((3.0 * fSlow332) + -1.0) * fSlow41)); - double fSlow335 = (1.125 * (((fSlow332 * ((35.0 * fSlow332) + -30.0)) + 3.0) * fSlow51)); - double fSlow336 = (fSlow224 - fSlow218); - double fSlow337 = mydsp_faustpower2_f(fSlow336); - double fSlow338 = (3.5 * (((5.0 * fSlow337) + -3.0) * fSlow24)); - double fSlow339 = (2.5 * (((3.0 * fSlow337) + -1.0) * fSlow41)); - double fSlow340 = (1.125 * (((fSlow337 * ((35.0 * fSlow337) + -30.0)) + 3.0) * fSlow51)); - double fSlow341 = (fSlow230 - fSlow218); - double fSlow342 = mydsp_faustpower2_f(fSlow341); - double fSlow343 = (3.5 * (((5.0 * fSlow342) + -3.0) * fSlow24)); - double fSlow344 = (2.5 * (((3.0 * fSlow342) + -1.0) * fSlow41)); - double fSlow345 = (1.125 * (((fSlow342 * ((35.0 * fSlow342) + -30.0)) + 3.0) * fSlow51)); - double fSlow346 = (fSlow236 - fSlow218); - double fSlow347 = mydsp_faustpower2_f(fSlow346); - double fSlow348 = (3.5 * (((5.0 * fSlow347) + -3.0) * fSlow24)); - double fSlow349 = (2.5 * (((3.0 * fSlow347) + -1.0) * fSlow41)); - double fSlow350 = (1.125 * (((fSlow347 * ((35.0 * fSlow347) + -30.0)) + 3.0) * fSlow51)); + double fSlow328 = ((3.0 * fSlow327) + -1.0); + double fSlow329 = ((2.5 * fSlow328) + -2.0); + double fSlow330 = (2.333333333333333 * (fSlow329 * fSlow19)); + double fSlow331 = (2.5 * (fSlow328 * fSlow36)); + double fSlow332 = (2.25 * (((2.333333333333333 * (fSlow327 * fSlow329)) - (1.5 * fSlow328)) * fSlow46)); + double fSlow333 = (0.95346258924559235 * (cos((fSlow63 + -4.3906384259880475)) * fSlow65)); + double fSlow334 = (fSlow293 + fSlow333); + double fSlow335 = mydsp_faustpower2_f(fSlow334); + double fSlow336 = ((3.0 * fSlow335) + -1.0); + double fSlow337 = ((2.5 * fSlow336) + -2.0); + double fSlow338 = (2.333333333333333 * (fSlow337 * fSlow19)); + double fSlow339 = (2.5 * (fSlow336 * fSlow36)); + double fSlow340 = (2.25 * (((2.333333333333333 * (fSlow335 * fSlow337)) - (1.5 * fSlow336)) * fSlow46)); + double fSlow341 = (0.95346258924559235 * (cos((fSlow63 + -5.0341395347813318)) * fSlow65)); + double fSlow342 = (fSlow293 + fSlow341); + double fSlow343 = mydsp_faustpower2_f(fSlow342); + double fSlow344 = ((3.0 * fSlow343) + -1.0); + double fSlow345 = ((2.5 * fSlow344) + -2.0); + double fSlow346 = (2.333333333333333 * (fSlow345 * fSlow19)); + double fSlow347 = (2.5 * (fSlow344 * fSlow36)); + double fSlow348 = (2.25 * (((2.333333333333333 * (fSlow343 * fSlow345)) - (1.5 * fSlow344)) * fSlow46)); + double fSlow349 = (0.95346258924559235 * (cos((fSlow63 + -5.9614347527829432)) * fSlow65)); + double fSlow350 = (fSlow293 + fSlow349); + double fSlow351 = mydsp_faustpower2_f(fSlow350); + double fSlow352 = ((3.0 * fSlow351) + -1.0); + double fSlow353 = ((2.5 * fSlow352) + -2.0); + double fSlow354 = (2.333333333333333 * (fSlow353 * fSlow19)); + double fSlow355 = (2.5 * (fSlow352 * fSlow36)); + double fSlow356 = (2.25 * (((2.333333333333333 * (fSlow351 * fSlow353)) - (1.5 * fSlow352)) * fSlow46)); + double fSlow357 = (fSlow292 - fSlow293); + double fSlow358 = mydsp_faustpower2_f(fSlow357); + double fSlow359 = ((3.0 * fSlow358) + -1.0); + double fSlow360 = ((2.5 * fSlow359) + -2.0); + double fSlow361 = (2.333333333333333 * (fSlow360 * fSlow19)); + double fSlow362 = (2.5 * (fSlow359 * fSlow36)); + double fSlow363 = (2.25 * (((2.333333333333333 * (fSlow358 * fSlow360)) - (1.5 * fSlow359)) * fSlow46)); + double fSlow364 = (fSlow301 - fSlow293); + double fSlow365 = mydsp_faustpower2_f(fSlow364); + double fSlow366 = ((3.0 * fSlow365) + -1.0); + double fSlow367 = ((2.5 * fSlow366) + -2.0); + double fSlow368 = (2.333333333333333 * (fSlow367 * fSlow19)); + double fSlow369 = (2.5 * (fSlow366 * fSlow36)); + double fSlow370 = (2.25 * (((2.333333333333333 * (fSlow365 * fSlow367)) - (1.5 * fSlow366)) * fSlow46)); + double fSlow371 = (fSlow309 - fSlow293); + double fSlow372 = mydsp_faustpower2_f(fSlow371); + double fSlow373 = ((3.0 * fSlow372) + -1.0); + double fSlow374 = ((2.5 * fSlow373) + -2.0); + double fSlow375 = (2.333333333333333 * (fSlow374 * fSlow19)); + double fSlow376 = (2.5 * (fSlow373 * fSlow36)); + double fSlow377 = (2.25 * (((2.333333333333333 * (fSlow372 * fSlow374)) - (1.5 * fSlow373)) * fSlow46)); + double fSlow378 = (fSlow317 - fSlow293); + double fSlow379 = mydsp_faustpower2_f(fSlow378); + double fSlow380 = ((3.0 * fSlow379) + -1.0); + double fSlow381 = ((2.5 * fSlow380) + -2.0); + double fSlow382 = (2.333333333333333 * (fSlow381 * fSlow19)); + double fSlow383 = (2.5 * (fSlow380 * fSlow36)); + double fSlow384 = (2.25 * (((2.333333333333333 * (fSlow379 * fSlow381)) - (1.5 * fSlow380)) * fSlow46)); + double fSlow385 = (fSlow325 - fSlow293); + double fSlow386 = mydsp_faustpower2_f(fSlow385); + double fSlow387 = ((3.0 * fSlow386) + -1.0); + double fSlow388 = ((2.5 * fSlow387) + -2.0); + double fSlow389 = (2.333333333333333 * (fSlow388 * fSlow19)); + double fSlow390 = (2.5 * (fSlow387 * fSlow36)); + double fSlow391 = (2.25 * (((2.333333333333333 * (fSlow386 * fSlow388)) - (1.5 * fSlow387)) * fSlow46)); + double fSlow392 = (fSlow333 - fSlow293); + double fSlow393 = mydsp_faustpower2_f(fSlow392); + double fSlow394 = ((3.0 * fSlow393) + -1.0); + double fSlow395 = ((2.5 * fSlow394) + -2.0); + double fSlow396 = (2.333333333333333 * (fSlow395 * fSlow19)); + double fSlow397 = (2.5 * (fSlow394 * fSlow36)); + double fSlow398 = (2.25 * (((2.333333333333333 * (fSlow393 * fSlow395)) - (1.5 * fSlow394)) * fSlow46)); + double fSlow399 = (fSlow341 - fSlow293); + double fSlow400 = mydsp_faustpower2_f(fSlow399); + double fSlow401 = ((3.0 * fSlow400) + -1.0); + double fSlow402 = ((2.5 * fSlow401) + -2.0); + double fSlow403 = (2.333333333333333 * (fSlow402 * fSlow19)); + double fSlow404 = (2.5 * (fSlow401 * fSlow36)); + double fSlow405 = (2.25 * (((2.333333333333333 * (fSlow400 * fSlow402)) - (1.5 * fSlow401)) * fSlow46)); + double fSlow406 = (fSlow349 - fSlow293); + double fSlow407 = mydsp_faustpower2_f(fSlow406); + double fSlow408 = ((3.0 * fSlow407) + -1.0); + double fSlow409 = ((2.5 * fSlow408) + -2.0); + double fSlow410 = (2.333333333333333 * (fSlow409 * fSlow19)); + double fSlow411 = (2.5 * (fSlow408 * fSlow36)); + double fSlow412 = (2.25 * (((2.333333333333333 * (fSlow407 * fSlow409)) - (1.5 * fSlow408)) * fSlow46)); + double fSlow413 = (fSlow259 - fSlow260); + double fSlow414 = mydsp_faustpower2_f(fSlow413); + double fSlow415 = ((3.0 * fSlow414) + -1.0); + double fSlow416 = ((2.5 * fSlow415) + -2.0); + double fSlow417 = (2.333333333333333 * (fSlow416 * fSlow19)); + double fSlow418 = (2.5 * (fSlow415 * fSlow36)); + double fSlow419 = (2.25 * (((2.333333333333333 * (fSlow414 * fSlow416)) - (1.5 * fSlow415)) * fSlow46)); + double fSlow420 = (fSlow268 - fSlow260); + double fSlow421 = mydsp_faustpower2_f(fSlow420); + double fSlow422 = ((3.0 * fSlow421) + -1.0); + double fSlow423 = ((2.5 * fSlow422) + -2.0); + double fSlow424 = (2.333333333333333 * (fSlow423 * fSlow19)); + double fSlow425 = (2.5 * (fSlow422 * fSlow36)); + double fSlow426 = (2.25 * (((2.333333333333333 * (fSlow421 * fSlow423)) - (1.5 * fSlow422)) * fSlow46)); + double fSlow427 = (fSlow276 - fSlow260); + double fSlow428 = mydsp_faustpower2_f(fSlow427); + double fSlow429 = ((3.0 * fSlow428) + -1.0); + double fSlow430 = ((2.5 * fSlow429) + -2.0); + double fSlow431 = (2.333333333333333 * (fSlow430 * fSlow19)); + double fSlow432 = (2.5 * (fSlow429 * fSlow36)); + double fSlow433 = (2.25 * (((2.333333333333333 * (fSlow428 * fSlow430)) - (1.5 * fSlow429)) * fSlow46)); + double fSlow434 = (fSlow284 - fSlow260); + double fSlow435 = mydsp_faustpower2_f(fSlow434); + double fSlow436 = ((3.0 * fSlow435) + -1.0); + double fSlow437 = ((2.5 * fSlow436) + -2.0); + double fSlow438 = (2.333333333333333 * (fSlow437 * fSlow19)); + double fSlow439 = (2.5 * (fSlow436 * fSlow36)); + double fSlow440 = (2.25 * (((2.333333333333333 * (fSlow435 * fSlow437)) - (1.5 * fSlow436)) * fSlow46)); for (int i = 0; (i < count); i = (i + 1)) { - fRec3[0] = (fSlow19 + (0.999 * fRec3[1])); + fRec3[0] = (fSlow12 + (0.999 * fRec3[1])); double fTemp0 = (fRec3[0] * double(input0[i])); fRec4[0] = (fRec4[1] + fRec2[1]); - fRec2[0] = (fSlow16 * ((fSlow18 * fTemp0) - (fSlow20 * fRec4[0]))); + fRec2[0] = (fSlow9 * ((fSlow11 * fTemp0) - (fSlow13 * fRec4[0]))); fRec1[0] = (fRec2[0] + fRec1[1]); - double fTemp1 = (fSlow22 * fTemp0); + double fTemp1 = (fSlow15 * fTemp0); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow16 * (fTemp1 - (fSlow20 * fRec6[0]))); - double fTemp2 = ((fSlow13 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0])); - double fTemp3 = (fSlow9 * fTemp2); + fRec5[0] = (fSlow9 * (fTemp1 - (fSlow13 * fRec6[0]))); + double fTemp2 = (fSlow2 * ((fSlow6 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0]))); fRec10[0] = (fRec10[1] + fRec9[1]); fRec11[0] = (fRec11[1] + fRec10[1]); - fRec9[0] = (fSlow30 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec10[0]) + (fSlow34 * fRec11[0])))); + fRec9[0] = (fSlow25 * ((fSlow28 * fTemp0) - ((fSlow30 * fRec10[0]) + (fSlow29 * fRec11[0])))); fRec12[0] = (fRec9[0] + fRec12[1]); - double fTemp4 = (fRec12[0] - fRec9[0]); - fVec0[0] = fTemp4; + double fTemp3 = (fRec12[0] - fRec9[0]); + fVec0[0] = fTemp3; fRec13[0] = (fRec13[1] + fVec0[1]); fRec14[0] = (fRec14[1] + fRec8[1]); - fRec8[0] = (fSlow28 * ((fSlow26 * (fRec9[0] + (fSlow36 * ((fSlow38 * fTemp4) + (fSlow37 * fRec13[0]))))) - (fSlow39 * fRec14[0]))); + fRec8[0] = (fSlow23 * ((fSlow21 * (fRec9[0] + (fSlow31 * ((fSlow33 * fTemp3) + (fSlow32 * fRec13[0]))))) - (fSlow34 * fRec14[0]))); fRec7[0] = (fRec8[0] + fRec7[1]); fRec17[0] = (fRec17[1] + fRec16[1]); fRec18[0] = (fRec18[1] + fRec17[1]); - fRec16[0] = (fSlow30 * (fTemp1 - ((fSlow35 * fRec17[0]) + (fSlow34 * fRec18[0])))); + fRec16[0] = (fSlow25 * (fTemp1 - ((fSlow30 * fRec17[0]) + (fSlow29 * fRec18[0])))); fRec19[0] = (fRec19[1] + fRec15[1]); - fRec15[0] = (fSlow28 * (fRec16[0] - (fSlow39 * fRec19[0]))); - double fTemp5 = ((fSlow27 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); - double fTemp6 = (fSlow40 * fTemp0); + fRec15[0] = (fSlow23 * (fRec16[0] - (fSlow34 * fRec19[0]))); + double fTemp4 = ((fSlow22 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); + double fTemp5 = (fSlow35 * fTemp0); fRec22[0] = (fRec22[1] + fRec21[1]); fRec23[0] = (fRec23[1] + fRec22[1]); - fRec21[0] = (fSlow47 * ((fSlow48 * fTemp0) - ((fSlow50 * fRec22[0]) + (fSlow49 * fRec23[0])))); + fRec21[0] = (fSlow42 * ((fSlow43 * fTemp0) - ((fSlow45 * fRec22[0]) + (fSlow44 * fRec23[0])))); fRec20[0] = (fRec21[0] + fRec20[1]); - double fTemp7 = (fRec20[0] - fRec21[0]); - fVec1[0] = fTemp7; + double fTemp6 = (fRec20[0] - fRec21[0]); + fVec1[0] = fTemp6; fRec24[0] = (fRec24[1] + fVec1[1]); fRec26[0] = (fRec26[1] + fRec25[1]); fRec27[0] = (fRec27[1] + fRec26[1]); - fRec25[0] = (fSlow47 * (fTemp1 - ((fSlow50 * fRec26[0]) + (fSlow49 * fRec27[0])))); - double fTemp8 = ((fSlow44 * ((fSlow46 * fTemp7) + (fSlow45 * fRec24[0]))) + (fRec21[0] + fRec25[0])); + fRec25[0] = (fSlow42 * (fTemp1 - ((fSlow45 * fRec26[0]) + (fSlow44 * fRec27[0])))); + double fTemp7 = ((fSlow39 * ((fSlow41 * fTemp6) + (fSlow40 * fRec24[0]))) + (fRec21[0] + fRec25[0])); fRec31[0] = (fRec31[1] + fRec30[1]); fRec32[0] = (fRec32[1] + fRec31[1]); - fRec30[0] = (fSlow58 * ((fSlow60 * fTemp0) - ((fSlow62 * fRec31[0]) + (fSlow61 * fRec32[0])))); + fRec30[0] = (fSlow53 * ((fSlow55 * fTemp0) - ((fSlow57 * fRec31[0]) + (fSlow56 * fRec32[0])))); fRec33[0] = (fRec30[0] + fRec33[1]); - double fTemp9 = (fRec33[0] - fRec30[0]); - fVec2[0] = fTemp9; + double fTemp8 = (fRec33[0] - fRec30[0]); + fVec2[0] = fTemp8; fRec34[0] = (fRec34[1] + fVec2[1]); fRec35[0] = (fRec35[1] + fRec29[1]); fRec36[0] = (fRec36[1] + fRec35[1]); - fRec29[0] = (fSlow57 * ((fSlow53 * (fRec30[0] + (fSlow63 * ((fSlow65 * fTemp9) + (fSlow64 * fRec34[0]))))) - ((fSlow67 * fRec35[0]) + (fSlow66 * fRec36[0])))); + fRec29[0] = (fSlow52 * ((fSlow48 * (fRec30[0] + (fSlow58 * ((fSlow60 * fTemp8) + (fSlow59 * fRec34[0]))))) - ((fSlow62 * fRec35[0]) + (fSlow61 * fRec36[0])))); fRec28[0] = (fRec29[0] + fRec28[1]); - double fTemp10 = (fRec28[0] - fRec29[0]); - fVec3[0] = fTemp10; + double fTemp9 = (fRec28[0] - fRec29[0]); + fVec3[0] = fTemp9; fRec37[0] = (fRec37[1] + fVec3[1]); fRec40[0] = (fRec40[1] + fRec39[1]); fRec41[0] = (fRec41[1] + fRec40[1]); - fRec39[0] = (fSlow58 * (fTemp1 - ((fSlow62 * fRec40[0]) + (fSlow61 * fRec41[0])))); + fRec39[0] = (fSlow53 * (fTemp1 - ((fSlow57 * fRec40[0]) + (fSlow56 * fRec41[0])))); fRec42[0] = (fRec42[1] + fRec38[1]); fRec43[0] = (fRec43[1] + fRec42[1]); - fRec38[0] = (fSlow57 * (fRec39[0] - ((fSlow67 * fRec42[0]) + (fSlow66 * fRec43[0])))); - double fTemp11 = ((fSlow54 * ((fSlow56 * fTemp10) + (fSlow55 * fRec37[0]))) + (fRec29[0] + fRec38[0])); - double fTemp12 = (0.012698412698412698 * (((fSlow7 * (fTemp3 + (fSlow25 * fTemp5))) + (fTemp6 + (fSlow42 * fTemp8))) + (fSlow52 * fTemp11))); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fRec38[0] = (fSlow52 * (fRec39[0] - ((fSlow62 * fRec42[0]) + (fSlow61 * fRec43[0])))); + double fTemp10 = ((fSlow49 * ((fSlow51 * fTemp9) + (fSlow50 * fRec37[0]))) + (fRec29[0] + fRec38[0])); + double fTemp11 = (0.012698412698412698 * (((fSlow1 * (fTemp2 + (fSlow20 * fTemp4))) + (fTemp5 + (fSlow37 * fTemp7))) + (fSlow47 * fTemp10))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (0.012698412698412698 * ((((fTemp6 + (fSlow68 * fTemp2)) + (fSlow70 * fTemp8)) + (fSlow71 * fTemp5)) + (fSlow72 * fTemp11))); - fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + output0[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (0.012698412698412698 * (((fSlow66 * (fTemp2 + (fSlow71 * fTemp4))) + (fTemp5 + (fSlow72 * fTemp7))) + (fSlow73 * fTemp10))); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); fVbargraph1 = FAUSTFLOAT(fRec44[0]); - output1[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = (0.012698412698412698 * ((((fTemp6 + (fSlow74 * fTemp2)) + (fSlow77 * fTemp8)) + (fSlow78 * fTemp5)) + (fSlow79 * fTemp11))); - fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); + output1[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (0.012698412698412698 * (((fSlow75 * (fTemp2 + (fSlow79 * fTemp4))) + (fTemp5 + (fSlow80 * fTemp7))) + (fSlow81 * fTemp10))); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); fVbargraph2 = FAUSTFLOAT(fRec45[0]); - output2[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = (0.012698412698412698 * ((((fTemp6 + (fSlow81 * fTemp2)) + (fSlow84 * fTemp8)) + (fSlow85 * fTemp5)) + (fSlow86 * fTemp11))); - fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + output2[i] = FAUSTFLOAT(fTemp13); + double fTemp14 = (0.012698412698412698 * (((fSlow83 * (fTemp2 + (fSlow87 * fTemp4))) + (fTemp5 + (fSlow88 * fTemp7))) + (fSlow89 * fTemp10))); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph3 = FAUSTFLOAT(fRec46[0]); - output3[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (0.012698412698412698 * ((((fTemp6 + (fSlow88 * fTemp2)) + (fSlow91 * fTemp8)) + (fSlow92 * fTemp5)) + (fSlow93 * fTemp11))); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + output3[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.012698412698412698 * (((fSlow91 * (fTemp2 + (fSlow95 * fTemp4))) + (fTemp5 + (fSlow96 * fTemp7))) + (fSlow97 * fTemp10))); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph4 = FAUSTFLOAT(fRec47[0]); - output4[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (0.012698412698412698 * (((fSlow94 * (fTemp3 + (fSlow96 * fTemp5))) + (fTemp6 + (fSlow97 * fTemp8))) + (fSlow98 * fTemp11))); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + output4[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.012698412698412698 * (((fSlow98 * (fTemp2 + (fSlow102 * fTemp4))) + (fTemp5 + (fSlow103 * fTemp7))) + (fSlow104 * fTemp10))); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph5 = FAUSTFLOAT(fRec48[0]); - output5[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.022574955908289243 * (((fSlow101 * (fTemp3 + (fSlow103 * fTemp5))) + (fTemp6 + (fSlow104 * fTemp8))) + (fSlow105 * fTemp11))); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + output5[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.022574955908289243 * (((fSlow107 * (fTemp2 + (fSlow111 * fTemp4))) + (fTemp5 + (fSlow112 * fTemp7))) + (fSlow113 * fTemp10))); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph6 = FAUSTFLOAT(fRec49[0]); - output6[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.022574955908289243 * (((fSlow107 * (fTemp3 + (fSlow109 * fTemp5))) + (fTemp6 + (fSlow110 * fTemp8))) + (fSlow111 * fTemp11))); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + output6[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.022574955908289243 * (((fSlow115 * (fTemp2 + (fSlow119 * fTemp4))) + (fTemp5 + (fSlow120 * fTemp7))) + (fSlow121 * fTemp10))); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph7 = FAUSTFLOAT(fRec50[0]); - output7[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (0.022574955908289243 * (((fSlow113 * (fTemp3 + (fSlow115 * fTemp5))) + (fTemp6 + (fSlow116 * fTemp8))) + (fSlow117 * fTemp11))); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + output7[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.022574955908289243 * (((fSlow123 * (fTemp2 + (fSlow127 * fTemp4))) + (fTemp5 + (fSlow128 * fTemp7))) + (fSlow129 * fTemp10))); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph8 = FAUSTFLOAT(fRec51[0]); - output8[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (0.022574955908289243 * (((fSlow119 * (fTemp3 + (fSlow121 * fTemp5))) + (fTemp6 + (fSlow122 * fTemp8))) + (fSlow123 * fTemp11))); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + output8[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.022574955908289243 * ((fSlow135 * fTemp10) + ((fSlow131 * (fTemp2 + (fSlow136 * fTemp4))) + (fTemp5 + (fSlow137 * fTemp7))))); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph9 = FAUSTFLOAT(fRec52[0]); - output9[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (0.022574955908289243 * ((((fTemp6 + (fSlow125 * fTemp2)) + (fSlow128 * fTemp8)) + (fSlow129 * fTemp5)) + (fSlow130 * fTemp11))); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + output9[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.022574955908289243 * (((fSlow139 * (fTemp2 + (fSlow143 * fTemp4))) + (fTemp5 + (fSlow144 * fTemp7))) + (fSlow145 * fTemp10))); + fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph10 = FAUSTFLOAT(fRec53[0]); - output10[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (0.022574955908289243 * ((((fTemp6 + (fSlow132 * fTemp2)) + (fSlow135 * fTemp8)) + (fSlow136 * fTemp5)) + (fSlow137 * fTemp11))); - fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + output10[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.022574955908289243 * (((fSlow147 * (fTemp2 + (fSlow151 * fTemp4))) + (fTemp5 + (fSlow152 * fTemp7))) + (fSlow153 * fTemp10))); + fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph11 = FAUSTFLOAT(fRec54[0]); - output11[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.022574955908289243 * ((((fTemp6 + (fSlow139 * fTemp2)) + (fSlow142 * fTemp8)) + (fSlow143 * fTemp5)) + (fSlow144 * fTemp11))); - fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + output11[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.022574955908289243 * (((fSlow155 * (fTemp2 + (fSlow159 * fTemp4))) + (fTemp5 + (fSlow160 * fTemp7))) + (fSlow161 * fTemp10))); + fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph12 = FAUSTFLOAT(fRec55[0]); - output12[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (0.022574955908289243 * ((((fTemp6 + (fSlow146 * fTemp2)) + (fSlow149 * fTemp8)) + (fSlow150 * fTemp5)) + (fSlow151 * fTemp11))); - fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + output12[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.022574955908289243 * (((fSlow163 * (fTemp2 + (fSlow167 * fTemp4))) + (fTemp5 + (fSlow168 * fTemp7))) + (fSlow169 * fTemp10))); + fRec56[0] = max((fRec56[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph13 = FAUSTFLOAT(fRec56[0]); - output13[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (0.022574955908289243 * (((fSlow152 * (fTemp3 + (fSlow154 * fTemp5))) + (fTemp6 + (fSlow155 * fTemp8))) + (fSlow156 * fTemp11))); - fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + output13[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.022574955908289243 * (((fSlow170 * (fTemp2 + (fSlow174 * fTemp4))) + (fTemp5 + (fSlow175 * fTemp7))) + (fSlow176 * fTemp10))); + fRec57[0] = max((fRec57[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph14 = FAUSTFLOAT(fRec57[0]); - output14[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (0.022574955908289243 * (((fSlow157 * (fTemp3 + (fSlow159 * fTemp5))) + (fTemp6 + (fSlow160 * fTemp8))) + (fSlow161 * fTemp11))); - fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + output14[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.022574955908289243 * (((fSlow177 * (fTemp2 + (fSlow181 * fTemp4))) + (fTemp5 + (fSlow182 * fTemp7))) + (fSlow183 * fTemp10))); + fRec58[0] = max((fRec58[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph15 = FAUSTFLOAT(fRec58[0]); - output15[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (0.022574955908289243 * (((fSlow162 * (fTemp3 + (fSlow164 * fTemp5))) + (fTemp6 + (fSlow165 * fTemp8))) + (fSlow166 * fTemp11))); - fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + output15[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.022574955908289243 * (((fSlow184 * (fTemp2 + (fSlow188 * fTemp4))) + (fTemp5 + (fSlow189 * fTemp7))) + (fSlow190 * fTemp10))); + fRec59[0] = max((fRec59[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph16 = FAUSTFLOAT(fRec59[0]); - output16[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (0.022574955908289243 * (((fSlow167 * (fTemp3 + (fSlow169 * fTemp5))) + (fTemp6 + (fSlow170 * fTemp8))) + (fSlow171 * fTemp11))); - fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + output16[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.022574955908289243 * (((fSlow191 * (fTemp2 + (fSlow195 * fTemp4))) + (fTemp5 + (fSlow196 * fTemp7))) + (fSlow197 * fTemp10))); + fRec60[0] = max((fRec60[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph17 = FAUSTFLOAT(fRec60[0]); - output17[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.021093750000000001 * (((fSlow174 * (fTemp3 + (fSlow176 * fTemp5))) + (fTemp6 + (fSlow177 * fTemp8))) + (fSlow178 * fTemp11))); - fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + output17[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.021093750000000001 * (((fSlow200 * (fTemp2 + (fSlow204 * fTemp4))) + (fTemp5 + (fSlow205 * fTemp7))) + (fSlow206 * fTemp10))); + fRec61[0] = max((fRec61[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph18 = FAUSTFLOAT(fRec61[0]); - output18[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.021093750000000001 * (((fSlow180 * (fTemp3 + (fSlow182 * fTemp5))) + (fTemp6 + (fSlow183 * fTemp8))) + (fSlow184 * fTemp11))); - fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + output18[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.021093750000000001 * (((fSlow208 * (fTemp2 + (fSlow212 * fTemp4))) + (fTemp5 + (fSlow213 * fTemp7))) + (fSlow214 * fTemp10))); + fRec62[0] = max((fRec62[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph19 = FAUSTFLOAT(fRec62[0]); - output19[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (0.021093750000000001 * (((fSlow186 * (fTemp3 + (fSlow188 * fTemp5))) + (fTemp6 + (fSlow189 * fTemp8))) + (fSlow190 * fTemp11))); - fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + output19[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.021093750000000001 * (((fSlow216 * (fTemp2 + (fSlow220 * fTemp4))) + (fTemp5 + (fSlow221 * fTemp7))) + (fSlow222 * fTemp10))); + fRec63[0] = max((fRec63[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph20 = FAUSTFLOAT(fRec63[0]); - output20[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (0.021093750000000001 * (((fSlow192 * (fTemp3 + (fSlow194 * fTemp5))) + (fTemp6 + (fSlow195 * fTemp8))) + (fSlow196 * fTemp11))); - fRec64[0] = max((fRec64[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + output20[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.021093750000000001 * (((fSlow224 * (fTemp2 + (fSlow228 * fTemp4))) + (fTemp5 + (fSlow229 * fTemp7))) + (fSlow230 * fTemp10))); + fRec64[0] = max((fRec64[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph21 = FAUSTFLOAT(fRec64[0]); - output21[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (0.021093750000000001 * (((fSlow197 * (fTemp3 + (fSlow199 * fTemp5))) + (fTemp6 + (fSlow200 * fTemp8))) + (fSlow201 * fTemp11))); - fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + output21[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.021093750000000001 * (((fSlow231 * (fTemp2 + (fSlow235 * fTemp4))) + (fTemp5 + (fSlow236 * fTemp7))) + (fSlow237 * fTemp10))); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph22 = FAUSTFLOAT(fRec65[0]); - output22[i] = FAUSTFLOAT(fTemp34); - double fTemp35 = (0.021093750000000001 * (((fSlow202 * (fTemp3 + (fSlow204 * fTemp5))) + (fTemp6 + (fSlow205 * fTemp8))) + (fSlow206 * fTemp11))); - fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + output22[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.021093750000000001 * (((fSlow238 * (fTemp2 + (fSlow242 * fTemp4))) + (fTemp5 + (fSlow243 * fTemp7))) + (fSlow244 * fTemp10))); + fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph23 = FAUSTFLOAT(fRec66[0]); - output23[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (0.021093750000000001 * (((fSlow207 * (fTemp3 + (fSlow209 * fTemp5))) + (fTemp6 + (fSlow210 * fTemp8))) + (fSlow211 * fTemp11))); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + output23[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (0.021093750000000001 * (((fSlow245 * (fTemp2 + (fSlow249 * fTemp4))) + (fTemp5 + (fSlow250 * fTemp7))) + (fSlow251 * fTemp10))); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); fVbargraph24 = FAUSTFLOAT(fRec67[0]); - output24[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = (0.021093750000000001 * (((fSlow212 * (fTemp3 + (fSlow214 * fTemp5))) + (fTemp6 + (fSlow215 * fTemp8))) + (fSlow216 * fTemp11))); - fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + output24[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (0.021093750000000001 * (((fSlow252 * (fTemp2 + (fSlow256 * fTemp4))) + (fTemp5 + (fSlow257 * fTemp7))) + (fSlow258 * fTemp10))); + fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph25 = FAUSTFLOAT(fRec68[0]); - output25[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = (0.02017333553791887 * (((fSlow219 * (fTemp3 + (fSlow221 * fTemp5))) + (fTemp6 + (fSlow222 * fTemp8))) + (fSlow223 * fTemp11))); - fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + output25[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (0.02017333553791887 * (((fSlow261 * (fTemp2 + (fSlow265 * fTemp4))) + (fTemp5 + (fSlow266 * fTemp7))) + (fSlow267 * fTemp10))); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph26 = FAUSTFLOAT(fRec69[0]); - output26[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (0.02017333553791887 * (((fSlow225 * (fTemp3 + (fSlow227 * fTemp5))) + (fTemp6 + (fSlow228 * fTemp8))) + (fSlow229 * fTemp11))); - fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + output26[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (0.02017333553791887 * (((fSlow269 * (fTemp2 + (fSlow273 * fTemp4))) + (fTemp5 + (fSlow274 * fTemp7))) + (fSlow275 * fTemp10))); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); fVbargraph27 = FAUSTFLOAT(fRec70[0]); - output27[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (0.02017333553791887 * (((fSlow231 * (fTemp3 + (fSlow233 * fTemp5))) + (fTemp6 + (fSlow234 * fTemp8))) + (fSlow235 * fTemp11))); - fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + output27[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (0.02017333553791887 * (((fSlow277 * (fTemp2 + (fSlow281 * fTemp4))) + (fTemp5 + (fSlow282 * fTemp7))) + (fSlow283 * fTemp10))); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph28 = FAUSTFLOAT(fRec71[0]); - output28[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (0.02017333553791887 * (((fSlow237 * (fTemp3 + (fSlow239 * fTemp5))) + (fTemp6 + (fSlow240 * fTemp8))) + (fSlow241 * fTemp11))); - fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + output28[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.02017333553791887 * (((fSlow285 * (fTemp2 + (fSlow289 * fTemp4))) + (fTemp5 + (fSlow290 * fTemp7))) + (fSlow291 * fTemp10))); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph29 = FAUSTFLOAT(fRec72[0]); - output29[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (0.02017333553791887 * (((fSlow244 * (fTemp3 + (fSlow246 * fTemp5))) + (fTemp6 + (fSlow247 * fTemp8))) + (fSlow248 * fTemp11))); - fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + output29[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (0.02017333553791887 * (((fSlow294 * (fTemp2 + (fSlow298 * fTemp4))) + (fTemp5 + (fSlow299 * fTemp7))) + (fSlow300 * fTemp10))); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph30 = FAUSTFLOAT(fRec73[0]); - output30[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (0.02017333553791887 * (((fSlow250 * (fTemp3 + (fSlow252 * fTemp5))) + (fTemp6 + (fSlow253 * fTemp8))) + (fSlow254 * fTemp11))); - fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + output30[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (0.02017333553791887 * (((fSlow302 * (fTemp2 + (fSlow306 * fTemp4))) + (fTemp5 + (fSlow307 * fTemp7))) + (fSlow308 * fTemp10))); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph31 = FAUSTFLOAT(fRec74[0]); - output31[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (0.02017333553791887 * (((fSlow256 * (fTemp3 + (fSlow258 * fTemp5))) + (fTemp6 + (fSlow259 * fTemp8))) + (fSlow260 * fTemp11))); - fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + output31[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (0.02017333553791887 * (((fSlow310 * (fTemp2 + (fSlow314 * fTemp4))) + (fTemp5 + (fSlow315 * fTemp7))) + (fSlow316 * fTemp10))); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph32 = FAUSTFLOAT(fRec75[0]); - output32[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (0.02017333553791887 * (((fSlow262 * (fTemp3 + (fSlow264 * fTemp5))) + (fTemp6 + (fSlow265 * fTemp8))) + (fSlow266 * fTemp11))); - fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + output32[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (0.02017333553791887 * (((fSlow318 * (fTemp2 + (fSlow322 * fTemp4))) + (fTemp5 + (fSlow323 * fTemp7))) + (fSlow324 * fTemp10))); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph33 = FAUSTFLOAT(fRec76[0]); - output33[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (0.02017333553791887 * (((fSlow268 * (fTemp3 + (fSlow270 * fTemp5))) + (fTemp6 + (fSlow271 * fTemp8))) + (fSlow272 * fTemp11))); - fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + output33[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.02017333553791887 * (((fSlow326 * (fTemp2 + (fSlow330 * fTemp4))) + (fTemp5 + (fSlow331 * fTemp7))) + (fSlow332 * fTemp10))); + fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph34 = FAUSTFLOAT(fRec77[0]); - output34[i] = FAUSTFLOAT(fTemp46); - double fTemp47 = (0.02017333553791887 * (((fSlow274 * (fTemp3 + (fSlow276 * fTemp5))) + (fTemp6 + (fSlow277 * fTemp8))) + (fSlow278 * fTemp11))); - fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + output34[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (0.02017333553791887 * (((fSlow334 * (fTemp2 + (fSlow338 * fTemp4))) + (fTemp5 + (fSlow339 * fTemp7))) + (fSlow340 * fTemp10))); + fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph35 = FAUSTFLOAT(fRec78[0]); - output35[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (0.02017333553791887 * (((fSlow280 * (fTemp3 + (fSlow282 * fTemp5))) + (fTemp6 + (fSlow283 * fTemp8))) + (fSlow284 * fTemp11))); - fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + output35[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (0.02017333553791887 * (((fSlow342 * (fTemp2 + (fSlow346 * fTemp4))) + (fTemp5 + (fSlow347 * fTemp7))) + (fSlow348 * fTemp10))); + fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph36 = FAUSTFLOAT(fRec79[0]); - output36[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (0.02017333553791887 * (((fSlow286 * (fTemp3 + (fSlow288 * fTemp5))) + (fTemp6 + (fSlow289 * fTemp8))) + (fSlow290 * fTemp11))); - fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + output36[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (0.02017333553791887 * (((fSlow350 * (fTemp2 + (fSlow354 * fTemp4))) + (fTemp5 + (fSlow355 * fTemp7))) + (fSlow356 * fTemp10))); + fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph37 = FAUSTFLOAT(fRec80[0]); - output37[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (0.02017333553791887 * (((fSlow291 * (fTemp3 + (fSlow293 * fTemp5))) + (fTemp6 + (fSlow294 * fTemp8))) + (fSlow295 * fTemp11))); - fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + output37[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.02017333553791887 * (((fSlow357 * (fTemp2 + (fSlow361 * fTemp4))) + (fTemp5 + (fSlow362 * fTemp7))) + (fSlow363 * fTemp10))); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph38 = FAUSTFLOAT(fRec81[0]); - output38[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (0.02017333553791887 * (((fSlow296 * (fTemp3 + (fSlow298 * fTemp5))) + (fTemp6 + (fSlow299 * fTemp8))) + (fSlow300 * fTemp11))); - fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + output38[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (0.02017333553791887 * (((fSlow364 * (fTemp2 + (fSlow368 * fTemp4))) + (fTemp5 + (fSlow369 * fTemp7))) + (fSlow370 * fTemp10))); + fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph39 = FAUSTFLOAT(fRec82[0]); - output39[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (0.02017333553791887 * (((fSlow301 * (fTemp3 + (fSlow303 * fTemp5))) + (fTemp6 + (fSlow304 * fTemp8))) + (fSlow305 * fTemp11))); - fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + output39[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * (((fSlow371 * (fTemp2 + (fSlow375 * fTemp4))) + (fTemp5 + (fSlow376 * fTemp7))) + (fSlow377 * fTemp10))); + fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph40 = FAUSTFLOAT(fRec83[0]); - output40[i] = FAUSTFLOAT(fTemp52); - double fTemp53 = (0.02017333553791887 * (((fSlow306 * (fTemp3 + (fSlow308 * fTemp5))) + (fTemp6 + (fSlow309 * fTemp8))) + (fSlow310 * fTemp11))); - fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + output40[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (0.02017333553791887 * (((fSlow378 * (fTemp2 + (fSlow382 * fTemp4))) + (fTemp5 + (fSlow383 * fTemp7))) + (fSlow384 * fTemp10))); + fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph41 = FAUSTFLOAT(fRec84[0]); - output41[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = (0.02017333553791887 * (((fSlow311 * (fTemp3 + (fSlow313 * fTemp5))) + (fTemp6 + (fSlow314 * fTemp8))) + (fSlow315 * fTemp11))); - fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + output41[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (0.02017333553791887 * (((fSlow385 * (fTemp2 + (fSlow389 * fTemp4))) + (fTemp5 + (fSlow390 * fTemp7))) + (fSlow391 * fTemp10))); + fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); fVbargraph42 = FAUSTFLOAT(fRec85[0]); - output42[i] = FAUSTFLOAT(fTemp54); - double fTemp55 = (0.02017333553791887 * (((fSlow316 * (fTemp3 + (fSlow318 * fTemp5))) + (fTemp6 + (fSlow319 * fTemp8))) + (fSlow320 * fTemp11))); - fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + output42[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (0.02017333553791887 * (((fSlow392 * (fTemp2 + (fSlow396 * fTemp4))) + (fTemp5 + (fSlow397 * fTemp7))) + (fSlow398 * fTemp10))); + fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); fVbargraph43 = FAUSTFLOAT(fRec86[0]); - output43[i] = FAUSTFLOAT(fTemp55); - double fTemp56 = (0.02017333553791887 * (((fSlow321 * (fTemp3 + (fSlow323 * fTemp5))) + (fTemp6 + (fSlow324 * fTemp8))) + (fSlow325 * fTemp11))); - fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + output43[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (0.02017333553791887 * (((fSlow399 * (fTemp2 + (fSlow403 * fTemp4))) + (fTemp5 + (fSlow404 * fTemp7))) + (fSlow405 * fTemp10))); + fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); fVbargraph44 = FAUSTFLOAT(fRec87[0]); - output44[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (0.02017333553791887 * (((fSlow326 * (fTemp3 + (fSlow328 * fTemp5))) + (fTemp6 + (fSlow329 * fTemp8))) + (fSlow330 * fTemp11))); - fRec88[0] = max((fRec88[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + output44[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (0.02017333553791887 * (((fSlow406 * (fTemp2 + (fSlow410 * fTemp4))) + (fTemp5 + (fSlow411 * fTemp7))) + (fSlow412 * fTemp10))); + fRec88[0] = max((fRec88[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); fVbargraph45 = FAUSTFLOAT(fRec88[0]); - output45[i] = FAUSTFLOAT(fTemp57); - double fTemp58 = (0.02017333553791887 * (((fSlow331 * (fTemp3 + (fSlow333 * fTemp5))) + (fTemp6 + (fSlow334 * fTemp8))) + (fSlow335 * fTemp11))); - fRec89[0] = max((fRec89[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + output45[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (0.02017333553791887 * (((fSlow413 * (fTemp2 + (fSlow417 * fTemp4))) + (fTemp5 + (fSlow418 * fTemp7))) + (fSlow419 * fTemp10))); + fRec89[0] = max((fRec89[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); fVbargraph46 = FAUSTFLOAT(fRec89[0]); - output46[i] = FAUSTFLOAT(fTemp58); - double fTemp59 = (0.02017333553791887 * (((fSlow336 * (fTemp3 + (fSlow338 * fTemp5))) + (fTemp6 + (fSlow339 * fTemp8))) + (fSlow340 * fTemp11))); - fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + output46[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (0.02017333553791887 * (((fSlow420 * (fTemp2 + (fSlow424 * fTemp4))) + (fTemp5 + (fSlow425 * fTemp7))) + (fSlow426 * fTemp10))); + fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); fVbargraph47 = FAUSTFLOAT(fRec90[0]); - output47[i] = FAUSTFLOAT(fTemp59); - double fTemp60 = (0.02017333553791887 * (((fSlow341 * (fTemp3 + (fSlow343 * fTemp5))) + (fTemp6 + (fSlow344 * fTemp8))) + (fSlow345 * fTemp11))); - fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + output47[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = (0.02017333553791887 * (((fSlow427 * (fTemp2 + (fSlow431 * fTemp4))) + (fTemp5 + (fSlow432 * fTemp7))) + (fSlow433 * fTemp10))); + fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); fVbargraph48 = FAUSTFLOAT(fRec91[0]); - output48[i] = FAUSTFLOAT(fTemp60); - double fTemp61 = (0.02017333553791887 * (((fSlow346 * (fTemp3 + (fSlow348 * fTemp5))) + (fTemp6 + (fSlow349 * fTemp8))) + (fSlow350 * fTemp11))); - fRec92[0] = max((fRec92[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + output48[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = (0.02017333553791887 * (((fSlow434 * (fTemp2 + (fSlow438 * fTemp4))) + (fTemp5 + (fSlow439 * fTemp7))) + (fSlow440 * fTemp10))); + fRec92[0] = max((fRec92[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); fVbargraph49 = FAUSTFLOAT(fRec92[0]); - output49[i] = FAUSTFLOAT(fTemp61); + output49[i] = FAUSTFLOAT(fTemp60); fRec3[1] = fRec3[0]; fRec4[1] = fRec4[0]; fRec2[1] = fRec2[0]; @@ -2588,7 +2687,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -2820,7 +2918,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -2883,7 +2981,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -2912,11 +3010,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOAPanLebedev505.cpp b/source/HOAUGens/HOAPanLebedev505.cpp index d42eee87a0..61f09071ea 100644 --- a/source/HOAUGens/HOAPanLebedev505.cpp +++ b/source/HOAUGens/HOAPanLebedev505.cpp @@ -4,7 +4,8 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAPanLebedev505" version: "1.0" -Code generated with Faust 2.2.0 (http://faust.grame.fr) +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ #ifndef __mydsp_H__ @@ -30,9 +31,9 @@ Code generated with Faust 2.2.0 (http://faust.grame.fr) // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -116,21 +117,24 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** Global init, calls the following methods : - * - static class 'classInit' : static table initialisation - * - 'instanceInit' : constants and instance table initialisation + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - /** Init instance state + /** + * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - /** Init instance constant state + /** + * Init instance constant state * * @param samplingRate - the sampling rate in Hertz */ @@ -150,16 +154,16 @@ class dsp { virtual dsp* clone() = 0; /** - * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value metadata). + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. * * @param m - the Meta* meta user */ virtual void metadata(Meta* m) = 0; /** - * DSP instance computation, to be called with sucessive in/out audio buffers. + * DSP instance computation, to be called with successive in/out audio buffers. * - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -170,7 +174,7 @@ class dsp { * DSP instance computation: alternative method to be used by subclasses. * * @param date_usec - the timestamp in microsec given by audio driver. - * @param count - the nomber of frames to compute + * @param count - the number of frames to compute * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) * @@ -204,7 +208,7 @@ class decorator_dsp : public dsp { virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } - virtual void metadata(Meta* m) { return fDSP->metadata(m); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } @@ -227,6 +231,7 @@ class dsp_factory { virtual std::string getName() = 0; virtual std::string getSHAKey() = 0; virtual std::string getDSPCode() = 0; + virtual dsp* createDSPInstance() = 0; virtual void setMemoryManager(dsp_memory_manager* manager) = 0; @@ -274,8 +279,8 @@ class dsp_factory { architecture section is not modified. ************************************************************************/ -#ifndef FAUST_UI_H -#define FAUST_UI_H +#ifndef __UI_H__ +#define __UI_H__ #ifndef FAUSTFLOAT #define FAUSTFLOAT float @@ -288,6 +293,8 @@ class dsp_factory { * generate to describe a DSP user interface. ******************************************************************************/ +struct Soundfile; + class UI { @@ -316,6 +323,10 @@ class UI virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -472,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -501,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -568,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -599,31 +613,23 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif +#include #include -double cos(double dummy0); -double sin(double dummy0); -double pow(double dummy0, double dummy1); double mydsp_faustpower2_f(double value) { return (value * value); -} -double mydsp_faustpower4_f(double value) { - return (((value * value) * value) * value); - -} -double fabs(double dummy0); -double log10(double dummy0); -double mydsp_faustpower3_f(double value) { - return ((value * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { @@ -633,14 +639,13 @@ class mydsp : public dsp { double fConst0; double fConst1; FAUSTFLOAT fHslider0; - FAUSTFLOAT fHslider1; FAUSTFLOAT fCheckbox0; double fConst2; double fConst3; - FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider1; FAUSTFLOAT fEntry0; FAUSTFLOAT fCheckbox1; - FAUSTFLOAT fHslider3; + FAUSTFLOAT fHslider2; double fRec3[2]; double fRec4[2]; double fRec2[2]; @@ -734,6 +739,7 @@ class mydsp : public dsp { double fRec59[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; + FAUSTFLOAT fHslider3; double fRec65[2]; FAUSTFLOAT fVbargraph1; double fRec66[2]; @@ -840,36 +846,36 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/gui.lib/author", "Pierre Lecomte"); - m->declare("lib/gui.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/gui.lib/license", "GPL"); - m->declare("lib/gui.lib/name", "GUI Library"); - m->declare("lib/gui.lib/version", "1.0"); - m->declare("lib/lebedev.lib/author", "Pierre Lecomte"); - m->declare("lib/lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/lebedev.lib/license", "GPL"); - m->declare("lib/lebedev.lib/name", "Lebdev grids and weights"); - m->declare("lib/lebedev.lib/version", "1.0"); - m->declare("lib/nfc.lib/author", "Pierre Lecomte"); - m->declare("lib/nfc.lib/copyright", "(c) Pierre Lecomte 2014"); - m->declare("lib/nfc.lib/license", "GPL"); - m->declare("lib/nfc.lib/name", "NF And NFC Filters Library"); - m->declare("lib/nfc.lib/version", "1.0"); - m->declare("lib/ymn.lib/author", "Pierre Lecomte"); - m->declare("lib/ymn.lib/copyright", "(c) Pierre Lecomte 2016"); - m->declare("lib/ymn.lib/license", "GPL"); - m->declare("lib/ymn.lib/name", "Spherical Harmonics library"); - m->declare("lib/ymn.lib/version", "1.0"); + m->declare("gui.lib/author", "Pierre Lecomte"); + m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("gui.lib/license", "GPL"); + m->declare("gui.lib/name", "GUI Library"); + m->declare("gui.lib/version", "1.0"); + m->declare("lebedev.lib/author", "Pierre Lecomte"); + m->declare("lebedev.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("lebedev.lib/license", "GPL"); + m->declare("lebedev.lib/name", "Lebdev grids and weights"); + m->declare("lebedev.lib/version", "1.0"); m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.0"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOAPanLebedev505"); + m->declare("nfc.lib/author", "Pierre Lecomte"); + m->declare("nfc.lib/copyright", "(c) Pierre Lecomte 2014"); + m->declare("nfc.lib/license", "GPL"); + m->declare("nfc.lib/name", "NF And NFC Filters Library"); + m->declare("nfc.lib/version", "1.0"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } virtual int getNumInputs() { @@ -1115,7 +1121,7 @@ class mydsp : public dsp { virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fConst0 = min(192000.0, max(1000.0, double(fSamplingFreq))); + fConst0 = min(192000.0, max(1.0, double(fSamplingFreq))); fConst1 = (80.0 / fConst0); fConst2 = (340.0 / fConst0); fConst3 = (170.0 / fConst0); @@ -1140,17 +1146,17 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.0); - fHslider1 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); - fHslider2 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(2.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); fCheckbox1 = FAUSTFLOAT(0.0); - fHslider3 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); fCheckbox2 = FAUSTFLOAT(0.0); fCheckbox3 = FAUSTFLOAT(0.0); fCheckbox4 = FAUSTFLOAT(0.0); fCheckbox5 = FAUSTFLOAT(0.0); fCheckbox6 = FAUSTFLOAT(0.0); + fHslider3 = FAUSTFLOAT(0.0); } @@ -1651,30 +1657,30 @@ class mydsp : public dsp { virtual mydsp* clone() { return new mydsp(); } - virtual int getSampleRate() { return fSamplingFreq; + } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOAPanLebedev505"); ui_interface->openHorizontalBox("0x00"); - ui_interface->declare(&fHslider3, "0+1", ""); - ui_interface->declare(&fHslider3, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider3, 0.0, -30.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider2, "0+2", ""); - ui_interface->declare(&fHslider2, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider2, "0+1", ""); + ui_interface->declare(&fHslider2, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider2, 2.0, 0.5, 50.0, 0.01); - ui_interface->declare(&fHslider0, "0+3", ""); - ui_interface->declare(&fHslider0, "osc", "/azimuth_0 0 360"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Azimuth 0", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+4", ""); - ui_interface->declare(&fHslider1, "osc", "/elevation_0 -90 90"); + ui_interface->addHorizontalSlider("Gain 0", &fHslider2, 0.0, -30.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider1, "0+2", ""); + ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Elevation 0", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->declare(&fHslider3, "0+3", ""); + ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->addHorizontalSlider("Azimuth 0", &fHslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+4", ""); + ui_interface->declare(&fHslider0, "osc", "/elevation_0 -90 90"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Elevation 0", &fHslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->declare(0, "0+5", ""); ui_interface->openHorizontalBox("Spherical Wave"); ui_interface->addCheckButton("Yes", &fCheckbox1); @@ -1696,257 +1702,257 @@ class mydsp : public dsp { ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("1-25"); ui_interface->openVerticalBox("1"); - ui_interface->declare(&fVbargraph0, "osc", "/output1"); + ui_interface->declare(&fVbargraph0, "osc", "/output1 -70 6"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2281280", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3053950", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); - ui_interface->declare(&fVbargraph1, "osc", "/output2"); + ui_interface->declare(&fVbargraph1, "osc", "/output2 -70 6"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x228ca30", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30608f0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); - ui_interface->declare(&fVbargraph2, "osc", "/output3"); + ui_interface->declare(&fVbargraph2, "osc", "/output3 -70 6"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2298cc0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x306bad0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("4"); - ui_interface->declare(&fVbargraph3, "osc", "/output4"); + ui_interface->declare(&fVbargraph3, "osc", "/output4 -70 6"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22a5030", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3076d90", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); - ui_interface->declare(&fVbargraph4, "osc", "/output5"); + ui_interface->declare(&fVbargraph4, "osc", "/output5 -70 6"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22b1480", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3082130", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); - ui_interface->declare(&fVbargraph5, "osc", "/output6"); + ui_interface->declare(&fVbargraph5, "osc", "/output6 -70 6"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22bc300", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x308cb90", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); - ui_interface->declare(&fVbargraph6, "osc", "/output7"); + ui_interface->declare(&fVbargraph6, "osc", "/output7 -70 6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22c7fb0", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3098070", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); - ui_interface->declare(&fVbargraph7, "osc", "/output8"); + ui_interface->declare(&fVbargraph7, "osc", "/output8 -70 6"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22d33e0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30a2cd0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("9"); - ui_interface->declare(&fVbargraph8, "osc", "/output9"); + ui_interface->declare(&fVbargraph8, "osc", "/output9 -70 6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22de8f0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30ada10", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); - ui_interface->declare(&fVbargraph9, "osc", "/output10"); + ui_interface->declare(&fVbargraph9, "osc", "/output10 -70 6"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22e9ee0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30b8830", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); - ui_interface->declare(&fVbargraph10, "osc", "/output11"); + ui_interface->declare(&fVbargraph10, "osc", "/output11 -70 6"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x22f6870", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30c4110", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); - ui_interface->declare(&fVbargraph11, "osc", "/output12"); + ui_interface->declare(&fVbargraph11, "osc", "/output12 -70 6"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23032e0", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30cfad0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); - ui_interface->declare(&fVbargraph12, "osc", "/output13"); + ui_interface->declare(&fVbargraph12, "osc", "/output13 -70 6"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x230fe30", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30db570", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); - ui_interface->declare(&fVbargraph13, "osc", "/output14"); + ui_interface->declare(&fVbargraph13, "osc", "/output14 -70 6"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x231ca60", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30e70f0", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); - ui_interface->declare(&fVbargraph14, "osc", "/output15"); + ui_interface->declare(&fVbargraph14, "osc", "/output15 -70 6"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23280c0", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30f1f80", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("16"); - ui_interface->declare(&fVbargraph15, "osc", "/output16"); + ui_interface->declare(&fVbargraph15, "osc", "/output16 -70 6"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2333800", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x30fcef0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); - ui_interface->declare(&fVbargraph16, "osc", "/output17"); + ui_interface->declare(&fVbargraph16, "osc", "/output17 -70 6"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x233f020", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3107f40", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); - ui_interface->declare(&fVbargraph17, "osc", "/output18"); + ui_interface->declare(&fVbargraph17, "osc", "/output18 -70 6"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x234a920", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3113070", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); - ui_interface->declare(&fVbargraph18, "osc", "/output19"); + ui_interface->declare(&fVbargraph18, "osc", "/output19 -70 6"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2357050", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x311efd0", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); - ui_interface->declare(&fVbargraph19, "osc", "/output20"); + ui_interface->declare(&fVbargraph19, "osc", "/output20 -70 6"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2362f00", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x312a6b0", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); - ui_interface->declare(&fVbargraph20, "osc", "/output21"); + ui_interface->declare(&fVbargraph20, "osc", "/output21 -70 6"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x236ee90", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3135e70", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); - ui_interface->declare(&fVbargraph21, "osc", "/output22"); + ui_interface->declare(&fVbargraph21, "osc", "/output22 -70 6"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x237af00", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3141710", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); - ui_interface->declare(&fVbargraph22, "osc", "/output23"); + ui_interface->declare(&fVbargraph22, "osc", "/output23 -70 6"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2386c60", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x314cca0", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); - ui_interface->declare(&fVbargraph23, "osc", "/output24"); + ui_interface->declare(&fVbargraph23, "osc", "/output24 -70 6"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2392aa0", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3158310", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("25"); - ui_interface->declare(&fVbargraph24, "osc", "/output25"); + ui_interface->declare(&fVbargraph24, "osc", "/output25 -70 6"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x239e9c0", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3163a60", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->declare(0, "~", ""); ui_interface->openHorizontalBox("26-50"); ui_interface->openVerticalBox("26"); - ui_interface->declare(&fVbargraph25, "osc", "/output26"); + ui_interface->declare(&fVbargraph25, "osc", "/output26 -70 6"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23aa9c0", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x316f290", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); - ui_interface->declare(&fVbargraph26, "osc", "/output27"); + ui_interface->declare(&fVbargraph26, "osc", "/output27 -70 6"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23b6da0", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x317aea0", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); - ui_interface->declare(&fVbargraph27, "osc", "/output28"); + ui_interface->declare(&fVbargraph27, "osc", "/output28 -70 6"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23c1e50", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3185780", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); - ui_interface->declare(&fVbargraph28, "osc", "/output29"); + ui_interface->declare(&fVbargraph28, "osc", "/output29 -70 6"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23ccfe0", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3190140", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); - ui_interface->declare(&fVbargraph29, "osc", "/output30"); + ui_interface->declare(&fVbargraph29, "osc", "/output30 -70 6"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23d8250", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x319abe0", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); - ui_interface->declare(&fVbargraph30, "osc", "/output31"); + ui_interface->declare(&fVbargraph30, "osc", "/output31 -70 6"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23e4700", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31a68c0", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); - ui_interface->declare(&fVbargraph31, "osc", "/output32"); + ui_interface->declare(&fVbargraph31, "osc", "/output32 -70 6"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23f0500", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31b1ef0", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); - ui_interface->declare(&fVbargraph32, "osc", "/output33"); + ui_interface->declare(&fVbargraph32, "osc", "/output33 -70 6"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x23fc3e0", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31bd600", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); - ui_interface->declare(&fVbargraph33, "osc", "/output34"); + ui_interface->declare(&fVbargraph33, "osc", "/output34 -70 6"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x24083a0", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31c8df0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); - ui_interface->declare(&fVbargraph34, "osc", "/output35"); + ui_interface->declare(&fVbargraph34, "osc", "/output35 -70 6"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2414440", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31d46c0", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("36"); - ui_interface->declare(&fVbargraph35, "osc", "/output36"); + ui_interface->declare(&fVbargraph35, "osc", "/output36 -70 6"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x24205c0", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31e0070", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("37"); - ui_interface->declare(&fVbargraph36, "osc", "/output37"); + ui_interface->declare(&fVbargraph36, "osc", "/output37 -70 6"); ui_interface->declare(&fVbargraph36, "unit", "dB"); - ui_interface->addVerticalBargraph("0x242c820", &fVbargraph36, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31ebb00", &fVbargraph36, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("38"); - ui_interface->declare(&fVbargraph37, "osc", "/output38"); + ui_interface->declare(&fVbargraph37, "osc", "/output38 -70 6"); ui_interface->declare(&fVbargraph37, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2438b60", &fVbargraph37, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x31f7670", &fVbargraph37, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("39"); - ui_interface->declare(&fVbargraph38, "osc", "/output39"); + ui_interface->declare(&fVbargraph38, "osc", "/output39 -70 6"); ui_interface->declare(&fVbargraph38, "unit", "dB"); - ui_interface->addVerticalBargraph("0x24441c0", &fVbargraph38, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3202500", &fVbargraph38, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("40"); - ui_interface->declare(&fVbargraph39, "osc", "/output40"); + ui_interface->declare(&fVbargraph39, "osc", "/output40 -70 6"); ui_interface->declare(&fVbargraph39, "unit", "dB"); - ui_interface->addVerticalBargraph("0x244f900", &fVbargraph39, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x320d470", &fVbargraph39, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("41"); - ui_interface->declare(&fVbargraph40, "osc", "/output41"); + ui_interface->declare(&fVbargraph40, "osc", "/output41 -70 6"); ui_interface->declare(&fVbargraph40, "unit", "dB"); - ui_interface->addVerticalBargraph("0x245b120", &fVbargraph40, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32184c0", &fVbargraph40, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("42"); - ui_interface->declare(&fVbargraph41, "osc", "/output42"); + ui_interface->declare(&fVbargraph41, "osc", "/output42 -70 6"); ui_interface->declare(&fVbargraph41, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2466a20", &fVbargraph41, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32235f0", &fVbargraph41, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("43"); - ui_interface->declare(&fVbargraph42, "osc", "/output43"); + ui_interface->declare(&fVbargraph42, "osc", "/output43 -70 6"); ui_interface->declare(&fVbargraph42, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2472400", &fVbargraph42, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x322e800", &fVbargraph42, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("44"); - ui_interface->declare(&fVbargraph43, "osc", "/output44"); + ui_interface->declare(&fVbargraph43, "osc", "/output44 -70 6"); ui_interface->declare(&fVbargraph43, "unit", "dB"); - ui_interface->addVerticalBargraph("0x247dec0", &fVbargraph43, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3239af0", &fVbargraph43, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("45"); - ui_interface->declare(&fVbargraph44, "osc", "/output45"); + ui_interface->declare(&fVbargraph44, "osc", "/output45 -70 6"); ui_interface->declare(&fVbargraph44, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2489a60", &fVbargraph44, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3244ec0", &fVbargraph44, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("46"); - ui_interface->declare(&fVbargraph45, "osc", "/output46"); + ui_interface->declare(&fVbargraph45, "osc", "/output46 -70 6"); ui_interface->declare(&fVbargraph45, "unit", "dB"); - ui_interface->addVerticalBargraph("0x24956e0", &fVbargraph45, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3250370", &fVbargraph45, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("47"); - ui_interface->declare(&fVbargraph46, "osc", "/output47"); + ui_interface->declare(&fVbargraph46, "osc", "/output47 -70 6"); ui_interface->declare(&fVbargraph46, "unit", "dB"); - ui_interface->addVerticalBargraph("0x24a1440", &fVbargraph46, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x325b900", &fVbargraph46, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("48"); - ui_interface->declare(&fVbargraph47, "osc", "/output48"); + ui_interface->declare(&fVbargraph47, "osc", "/output48 -70 6"); ui_interface->declare(&fVbargraph47, "unit", "dB"); - ui_interface->addVerticalBargraph("0x24ad280", &fVbargraph47, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x3266f70", &fVbargraph47, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("49"); - ui_interface->declare(&fVbargraph48, "osc", "/output49"); + ui_interface->declare(&fVbargraph48, "osc", "/output49 -70 6"); ui_interface->declare(&fVbargraph48, "unit", "dB"); - ui_interface->addVerticalBargraph("0x24b91a0", &fVbargraph48, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x32726c0", &fVbargraph48, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("50"); - ui_interface->declare(&fVbargraph49, "osc", "/output50"); + ui_interface->declare(&fVbargraph49, "osc", "/output50 -70 6"); ui_interface->declare(&fVbargraph49, "unit", "dB"); - ui_interface->addVerticalBargraph("0x24c51a0", &fVbargraph49, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x327def0", &fVbargraph49, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -2007,720 +2013,851 @@ class mydsp : public dsp { FAUSTFLOAT* output48 = outputs[48]; FAUSTFLOAT* output49 = outputs[49]; double fSlow0 = double(fHslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fHslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (6.123233995736766e-17 * fSlow4); - double fSlow6 = sin(fSlow2); - double fSlow7 = (fSlow5 + fSlow6); - double fSlow8 = (1.0 - double(fCheckbox0)); - double fSlow9 = (3.0 * fSlow8); - double fSlow10 = double(fHslider2); - double fSlow11 = (fConst3 / fSlow10); - double fSlow12 = (fSlow11 + 1.0); - double fSlow13 = (fConst2 / (fSlow12 * fSlow10)); - double fSlow14 = double(fEntry0); - double fSlow15 = (fConst3 / fSlow14); - double fSlow16 = (1.0 / (fSlow15 + 1.0)); - double fSlow17 = double(fCheckbox1); - double fSlow18 = (((fSlow12 * fSlow17) * fSlow14) / fSlow10); - double fSlow19 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider3)))); - double fSlow20 = (fConst2 / fSlow14); - double fSlow21 = (1.0 - fSlow17); - double fSlow22 = (fSlow21 * fSlow14); - double fSlow23 = mydsp_faustpower2_f(fSlow7); - double fSlow24 = (1.0 - double(fCheckbox2)); - double fSlow25 = (3.5 * (((5.0 * fSlow23) + -3.0) * fSlow24)); - double fSlow26 = ((fConst5 / fSlow10) + 1.0); - double fSlow27 = (fConst4 / (fSlow26 * fSlow10)); - double fSlow28 = (1.0 / ((fConst5 / fSlow14) + 1.0)); - double fSlow29 = mydsp_faustpower2_f(fSlow15); - double fSlow30 = (1.0 / (((fConst6 / fSlow14) + (6.4594326934833797 * fSlow29)) + 1.0)); - double fSlow31 = mydsp_faustpower2_f(fSlow11); - double fSlow32 = (((fConst6 / fSlow10) + (6.4594326934833797 * fSlow31)) + 1.0); - double fSlow33 = (((fSlow32 * fSlow17) * fSlow14) / fSlow10); - double fSlow34 = (25.837730773933519 * fSlow29); - double fSlow35 = (fSlow34 + (fConst7 / fSlow14)); - double fSlow36 = (1.0 / fSlow32); - double fSlow37 = (25.837730773933519 * fSlow31); - double fSlow38 = ((fConst7 / fSlow10) + fSlow37); - double fSlow39 = (fConst4 / fSlow14); - double fSlow40 = (1.0 - double(fCheckbox3)); - double fSlow41 = (1.375 * (((15.0 - (70.0 * fSlow23)) + (63.0 * mydsp_faustpower4_f(fSlow7))) * fSlow40)); - double fSlow42 = ((fConst9 / fSlow10) + 1.0); - double fSlow43 = (fConst8 / (fSlow42 * fSlow10)); - double fSlow44 = (1.0 / ((fConst9 / fSlow14) + 1.0)); - double fSlow45 = (1.0 / (((fConst10 / fSlow14) + (14.272480513280099 * fSlow29)) + 1.0)); - double fSlow46 = (((fConst10 / fSlow10) + (14.272480513280099 * fSlow31)) + 1.0); - double fSlow47 = (1.0 / (((fConst11 / fSlow14) + (18.1563153134523 * fSlow29)) + 1.0)); - double fSlow48 = (((fConst11 / fSlow10) + (18.1563153134523 * fSlow31)) + 1.0); - double fSlow49 = (((fSlow48 * fSlow17) * fSlow14) / fSlow10); - double fSlow50 = (72.6252612538092 * fSlow29); - double fSlow51 = (fSlow50 + (fConst12 / fSlow14)); - double fSlow52 = (1.0 / fSlow48); - double fSlow53 = (72.6252612538092 * fSlow31); - double fSlow54 = ((fConst12 / fSlow10) + fSlow53); - double fSlow55 = (57.089922053120397 * fSlow29); - double fSlow56 = (fSlow55 + (fConst13 / fSlow14)); - double fSlow57 = (1.0 / fSlow46); - double fSlow58 = (57.089922053120397 * fSlow31); - double fSlow59 = ((fConst13 / fSlow10) + fSlow58); - double fSlow60 = (fConst8 / fSlow14); - double fSlow61 = ((((fSlow17 / fSlow10) + fSlow21) * fSlow14) * (1.0 - double(fCheckbox4))); - double fSlow62 = (1.0 - double(fCheckbox5)); - double fSlow63 = (2.5 * (((3.0 * fSlow23) + -1.0) * fSlow62)); - double fSlow64 = (((fConst14 / fSlow10) + (3.0 * fSlow31)) + 1.0); - double fSlow65 = (1.0 / fSlow64); - double fSlow66 = (12.0 * fSlow31); - double fSlow67 = ((fConst15 / fSlow10) + fSlow66); - double fSlow68 = (1.0 / (((fConst14 / fSlow14) + (3.0 * fSlow29)) + 1.0)); - double fSlow69 = (((fSlow64 * fSlow17) * fSlow14) / fSlow10); - double fSlow70 = (12.0 * fSlow29); - double fSlow71 = (fSlow70 + (fConst15 / fSlow14)); - double fSlow72 = (1.0 - double(fCheckbox6)); - double fSlow73 = (1.125 * (((fSlow23 * ((35.0 * fSlow23) + -30.0)) + 3.0) * fSlow72)); - double fSlow74 = (((fConst16 / fSlow10) + (9.1401308902779004 * fSlow31)) + 1.0); - double fSlow75 = (1.0 / fSlow74); - double fSlow76 = (36.560523561111602 * fSlow31); - double fSlow77 = ((fConst17 / fSlow10) + fSlow76); - double fSlow78 = (1.0 / (((fConst16 / fSlow14) + (9.1401308902779004 * fSlow29)) + 1.0)); - double fSlow79 = (1.0 / (((fConst18 / fSlow14) + (11.4878004768713 * fSlow29)) + 1.0)); - double fSlow80 = (((fConst18 / fSlow10) + (11.4878004768713 * fSlow31)) + 1.0); - double fSlow81 = (((fSlow80 * fSlow17) * fSlow14) / fSlow10); - double fSlow82 = (45.951201907485199 * fSlow29); - double fSlow83 = (fSlow82 + (fConst19 / fSlow14)); - double fSlow84 = (1.0 / fSlow80); - double fSlow85 = (45.951201907485199 * fSlow31); - double fSlow86 = ((fConst19 / fSlow10) + fSlow85); - double fSlow87 = (36.560523561111602 * fSlow29); - double fSlow88 = (fSlow87 + (fConst17 / fSlow14)); - double fSlow89 = (3.0 * ((fSlow1 * fSlow8) * fSlow3)); - double fSlow90 = mydsp_faustpower2_f(fSlow4); - double fSlow91 = (2.5 * (((3.0 * fSlow90) + -1.0) * fSlow62)); - double fSlow92 = mydsp_faustpower3_f(fSlow4); - double fSlow93 = (3.5 * (((5.0 * fSlow92) - (3.0 * fSlow4)) * fSlow24)); - double fSlow94 = (1.125 * (((fSlow90 * ((35.0 * fSlow90) + -30.0)) + 3.0) * fSlow72)); - double fSlow95 = (1.375 * (((15.0 * fSlow4) + (fSlow92 * ((63.0 * fSlow90) + -70.0))) * fSlow40)); - double fSlow96 = cos((fSlow0 + -1.5707963267948966)); - double fSlow97 = (3.0 * ((fSlow96 * fSlow8) * fSlow3)); - double fSlow98 = (fSlow96 * fSlow3); - double fSlow99 = mydsp_faustpower2_f(fSlow98); - double fSlow100 = (2.5 * (((3.0 * fSlow99) + -1.0) * fSlow62)); - double fSlow101 = mydsp_faustpower3_f(fSlow98); - double fSlow102 = (3.5 * (((5.0 * fSlow101) - (3.0 * fSlow98)) * fSlow24)); - double fSlow103 = (1.125 * (((fSlow99 * ((35.0 * fSlow99) + -30.0)) + 3.0) * fSlow72)); - double fSlow104 = (1.375 * (((15.0 * fSlow98) + (fSlow101 * ((63.0 * fSlow99) + -70.0))) * fSlow40)); - double fSlow105 = cos((fSlow0 + -3.1415926535897931)); - double fSlow106 = (3.0 * ((fSlow105 * fSlow8) * fSlow3)); - double fSlow107 = (fSlow105 * fSlow3); - double fSlow108 = mydsp_faustpower2_f(fSlow107); - double fSlow109 = (2.5 * (((3.0 * fSlow108) + -1.0) * fSlow62)); - double fSlow110 = mydsp_faustpower3_f(fSlow107); - double fSlow111 = (3.5 * (((5.0 * fSlow110) - (3.0 * fSlow107)) * fSlow24)); - double fSlow112 = (1.125 * (((fSlow108 * ((35.0 * fSlow108) + -30.0)) + 3.0) * fSlow72)); - double fSlow113 = (1.375 * (((15.0 * fSlow107) + (fSlow110 * ((63.0 * fSlow108) + -70.0))) * fSlow40)); - double fSlow114 = cos((fSlow0 + -4.7123889803846897)); - double fSlow115 = (3.0 * ((fSlow114 * fSlow8) * fSlow3)); - double fSlow116 = (fSlow114 * fSlow3); - double fSlow117 = mydsp_faustpower2_f(fSlow116); - double fSlow118 = (2.5 * (((3.0 * fSlow117) + -1.0) * fSlow62)); - double fSlow119 = mydsp_faustpower3_f(fSlow116); - double fSlow120 = (3.5 * (((5.0 * fSlow119) - (3.0 * fSlow116)) * fSlow24)); - double fSlow121 = (1.125 * (((fSlow117 * ((35.0 * fSlow117) + -30.0)) + 3.0) * fSlow72)); - double fSlow122 = (1.375 * (((15.0 * fSlow116) + (fSlow119 * ((63.0 * fSlow117) + -70.0))) * fSlow40)); - double fSlow123 = (fSlow5 - fSlow6); - double fSlow124 = mydsp_faustpower2_f(fSlow123); - double fSlow125 = (3.5 * (((5.0 * fSlow124) + -3.0) * fSlow24)); - double fSlow126 = (1.375 * (((15.0 - (70.0 * fSlow124)) + (63.0 * mydsp_faustpower4_f(fSlow123))) * fSlow40)); - double fSlow127 = (2.5 * (((3.0 * fSlow124) + -1.0) * fSlow62)); - double fSlow128 = (1.125 * (((fSlow124 * ((35.0 * fSlow124) + -30.0)) + 3.0) * fSlow72)); - double fSlow129 = (0.70710678118654757 * fSlow4); - double fSlow130 = (0.70710678118654746 * fSlow6); - double fSlow131 = (fSlow129 + fSlow130); - double fSlow132 = mydsp_faustpower2_f(fSlow131); - double fSlow133 = (3.5 * (((5.0 * fSlow132) + -3.0) * fSlow24)); - double fSlow134 = (1.375 * (((15.0 - (70.0 * fSlow132)) + (63.0 * mydsp_faustpower4_f(fSlow131))) * fSlow40)); - double fSlow135 = (2.5 * (((3.0 * fSlow132) + -1.0) * fSlow62)); - double fSlow136 = (1.125 * (((fSlow132 * ((35.0 * fSlow132) + -30.0)) + 3.0) * fSlow72)); - double fSlow137 = (0.70710678118654757 * fSlow98); - double fSlow138 = (fSlow137 + fSlow130); - double fSlow139 = mydsp_faustpower2_f(fSlow138); - double fSlow140 = (3.5 * (((5.0 * fSlow139) + -3.0) * fSlow24)); - double fSlow141 = (1.375 * (((15.0 - (70.0 * fSlow139)) + (63.0 * mydsp_faustpower4_f(fSlow138))) * fSlow40)); - double fSlow142 = (2.5 * (((3.0 * fSlow139) + -1.0) * fSlow62)); - double fSlow143 = (1.125 * (((fSlow139 * ((35.0 * fSlow139) + -30.0)) + 3.0) * fSlow72)); - double fSlow144 = (0.70710678118654757 * fSlow107); - double fSlow145 = (fSlow130 + fSlow144); - double fSlow146 = mydsp_faustpower2_f(fSlow145); - double fSlow147 = (3.5 * (((5.0 * fSlow146) + -3.0) * fSlow24)); - double fSlow148 = (1.375 * (((15.0 - (70.0 * fSlow146)) + (63.0 * mydsp_faustpower4_f(fSlow145))) * fSlow40)); - double fSlow149 = (2.5 * (((3.0 * fSlow146) + -1.0) * fSlow62)); - double fSlow150 = (1.125 * (((fSlow146 * ((35.0 * fSlow146) + -30.0)) + 3.0) * fSlow72)); - double fSlow151 = (0.70710678118654757 * fSlow116); - double fSlow152 = (fSlow130 + fSlow151); - double fSlow153 = mydsp_faustpower2_f(fSlow152); - double fSlow154 = (3.5 * (((5.0 * fSlow153) + -3.0) * fSlow24)); - double fSlow155 = (1.375 * (((15.0 - (70.0 * fSlow153)) + (63.0 * mydsp_faustpower4_f(fSlow152))) * fSlow40)); - double fSlow156 = (2.5 * (((3.0 * fSlow153) + -1.0) * fSlow62)); - double fSlow157 = (1.125 * (((fSlow153 * ((35.0 * fSlow153) + -30.0)) + 3.0) * fSlow72)); - double fSlow158 = cos((fSlow0 + -0.78539816339744828)); - double fSlow159 = (3.0 * ((fSlow158 * fSlow8) * fSlow3)); - double fSlow160 = (fSlow158 * fSlow3); - double fSlow161 = mydsp_faustpower2_f(fSlow160); - double fSlow162 = (2.5 * (((3.0 * fSlow161) + -1.0) * fSlow62)); - double fSlow163 = mydsp_faustpower3_f(fSlow160); - double fSlow164 = (3.5 * (((5.0 * fSlow163) - (3.0 * fSlow160)) * fSlow24)); - double fSlow165 = (1.125 * (((fSlow161 * ((35.0 * fSlow161) + -30.0)) + 3.0) * fSlow72)); - double fSlow166 = (1.375 * (((15.0 * fSlow160) + (fSlow163 * ((63.0 * fSlow161) + -70.0))) * fSlow40)); - double fSlow167 = cos((fSlow0 + -2.3561944901923448)); - double fSlow168 = (3.0 * ((fSlow167 * fSlow8) * fSlow3)); - double fSlow169 = (fSlow167 * fSlow3); + double fSlow1 = sin(fSlow0); + double fSlow2 = (3.0 * (1.0 - double(fCheckbox0))); + double fSlow3 = double(fHslider1); + double fSlow4 = (fConst3 / fSlow3); + double fSlow5 = (fSlow4 + 1.0); + double fSlow6 = (fConst2 / (fSlow5 * fSlow3)); + double fSlow7 = double(fEntry0); + double fSlow8 = (fConst3 / fSlow7); + double fSlow9 = (1.0 / (fSlow8 + 1.0)); + double fSlow10 = double(fCheckbox1); + double fSlow11 = (((fSlow5 * fSlow10) * fSlow7) / fSlow3); + double fSlow12 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider2)))); + double fSlow13 = (fConst2 / fSlow7); + double fSlow14 = (1.0 - fSlow10); + double fSlow15 = (fSlow14 * fSlow7); + double fSlow16 = mydsp_faustpower2_f(fSlow1); + double fSlow17 = ((3.0 * fSlow16) + -1.0); + double fSlow18 = ((2.5 * fSlow17) + -2.0); + double fSlow19 = (1.0 - double(fCheckbox2)); + double fSlow20 = (2.333333333333333 * (fSlow18 * fSlow19)); + double fSlow21 = ((fConst5 / fSlow3) + 1.0); + double fSlow22 = (fConst4 / (fSlow21 * fSlow3)); + double fSlow23 = (1.0 / ((fConst5 / fSlow7) + 1.0)); + double fSlow24 = mydsp_faustpower2_f(fSlow8); + double fSlow25 = (1.0 / (((fConst6 / fSlow7) + (6.4594326934833797 * fSlow24)) + 1.0)); + double fSlow26 = mydsp_faustpower2_f(fSlow4); + double fSlow27 = (((fConst6 / fSlow3) + (6.4594326934833797 * fSlow26)) + 1.0); + double fSlow28 = (((fSlow27 * fSlow10) * fSlow7) / fSlow3); + double fSlow29 = (25.837730773933519 * fSlow24); + double fSlow30 = (fSlow29 + (fConst7 / fSlow7)); + double fSlow31 = (1.0 / fSlow27); + double fSlow32 = (25.837730773933519 * fSlow26); + double fSlow33 = ((fConst7 / fSlow3) + fSlow32); + double fSlow34 = (fConst4 / fSlow7); + double fSlow35 = ((2.333333333333333 * (fSlow18 * fSlow16)) - (1.5 * fSlow17)); + double fSlow36 = (1.0 - double(fCheckbox3)); + double fSlow37 = (2.2000000000000002 * (((2.25 * fSlow35) - (1.3333333333333333 * fSlow18)) * fSlow36)); + double fSlow38 = ((fConst9 / fSlow3) + 1.0); + double fSlow39 = (fConst8 / (fSlow38 * fSlow3)); + double fSlow40 = (1.0 / ((fConst9 / fSlow7) + 1.0)); + double fSlow41 = (1.0 / (((fConst10 / fSlow7) + (14.272480513280099 * fSlow24)) + 1.0)); + double fSlow42 = (((fConst10 / fSlow3) + (14.272480513280099 * fSlow26)) + 1.0); + double fSlow43 = (1.0 / (((fConst11 / fSlow7) + (18.1563153134523 * fSlow24)) + 1.0)); + double fSlow44 = (((fConst11 / fSlow3) + (18.1563153134523 * fSlow26)) + 1.0); + double fSlow45 = (((fSlow44 * fSlow10) * fSlow7) / fSlow3); + double fSlow46 = (72.6252612538092 * fSlow24); + double fSlow47 = (fSlow46 + (fConst12 / fSlow7)); + double fSlow48 = (1.0 / fSlow44); + double fSlow49 = (72.6252612538092 * fSlow26); + double fSlow50 = ((fConst12 / fSlow3) + fSlow49); + double fSlow51 = (57.089922053120397 * fSlow24); + double fSlow52 = (fSlow51 + (fConst13 / fSlow7)); + double fSlow53 = (1.0 / fSlow42); + double fSlow54 = (57.089922053120397 * fSlow26); + double fSlow55 = ((fConst13 / fSlow3) + fSlow54); + double fSlow56 = (fConst8 / fSlow7); + double fSlow57 = ((((fSlow10 / fSlow3) + fSlow14) * fSlow7) * (1.0 - double(fCheckbox4))); + double fSlow58 = (1.0 - double(fCheckbox5)); + double fSlow59 = (2.5 * (fSlow17 * fSlow58)); + double fSlow60 = (((fConst14 / fSlow3) + (3.0 * fSlow26)) + 1.0); + double fSlow61 = (1.0 / fSlow60); + double fSlow62 = (12.0 * fSlow26); + double fSlow63 = ((fConst15 / fSlow3) + fSlow62); + double fSlow64 = (1.0 / (((fConst14 / fSlow7) + (3.0 * fSlow24)) + 1.0)); + double fSlow65 = (((fSlow60 * fSlow10) * fSlow7) / fSlow3); + double fSlow66 = (12.0 * fSlow24); + double fSlow67 = (fSlow66 + (fConst15 / fSlow7)); + double fSlow68 = (1.0 - double(fCheckbox6)); + double fSlow69 = (2.25 * (fSlow35 * fSlow68)); + double fSlow70 = (((fConst16 / fSlow3) + (9.1401308902779004 * fSlow26)) + 1.0); + double fSlow71 = (1.0 / fSlow70); + double fSlow72 = (36.560523561111602 * fSlow26); + double fSlow73 = ((fConst17 / fSlow3) + fSlow72); + double fSlow74 = (1.0 / (((fConst16 / fSlow7) + (9.1401308902779004 * fSlow24)) + 1.0)); + double fSlow75 = (1.0 / (((fConst18 / fSlow7) + (11.4878004768713 * fSlow24)) + 1.0)); + double fSlow76 = (((fConst18 / fSlow3) + (11.4878004768713 * fSlow26)) + 1.0); + double fSlow77 = (((fSlow76 * fSlow10) * fSlow7) / fSlow3); + double fSlow78 = (45.951201907485199 * fSlow24); + double fSlow79 = (fSlow78 + (fConst19 / fSlow7)); + double fSlow80 = (1.0 / fSlow76); + double fSlow81 = (45.951201907485199 * fSlow26); + double fSlow82 = ((fConst19 / fSlow3) + fSlow81); + double fSlow83 = (36.560523561111602 * fSlow24); + double fSlow84 = (fSlow83 + (fConst17 / fSlow7)); + double fSlow85 = double(fHslider3); + double fSlow86 = cos(fSlow85); + double fSlow87 = cos(fSlow0); + double fSlow88 = (fSlow86 * fSlow87); + double fSlow89 = mydsp_faustpower2_f(fSlow86); + double fSlow90 = mydsp_faustpower2_f(fSlow87); + double fSlow91 = ((3.0 * (fSlow89 * fSlow90)) + -1.0); + double fSlow92 = ((2.5 * fSlow91) + -2.0); + double fSlow93 = (2.333333333333333 * (fSlow92 * fSlow19)); + double fSlow94 = ((2.333333333333333 * ((fSlow89 * fSlow92) * fSlow90)) - (1.5 * fSlow91)); + double fSlow95 = (2.2000000000000002 * (((2.25 * fSlow94) - (1.3333333333333333 * fSlow92)) * fSlow36)); + double fSlow96 = (2.5 * (fSlow91 * fSlow58)); + double fSlow97 = (2.25 * (fSlow94 * fSlow68)); + double fSlow98 = cos((fSlow85 + -1.5707963267948966)); + double fSlow99 = (fSlow98 * fSlow87); + double fSlow100 = mydsp_faustpower2_f(fSlow98); + double fSlow101 = ((3.0 * (fSlow100 * fSlow90)) + -1.0); + double fSlow102 = ((2.5 * fSlow101) + -2.0); + double fSlow103 = (2.333333333333333 * (fSlow102 * fSlow19)); + double fSlow104 = ((2.333333333333333 * ((fSlow100 * fSlow102) * fSlow90)) - (1.5 * fSlow101)); + double fSlow105 = (2.2000000000000002 * (((2.25 * fSlow104) - (1.3333333333333333 * fSlow102)) * fSlow36)); + double fSlow106 = (2.5 * (fSlow101 * fSlow58)); + double fSlow107 = (2.25 * (fSlow104 * fSlow68)); + double fSlow108 = cos((fSlow85 + -3.1415926535897931)); + double fSlow109 = (fSlow108 * fSlow87); + double fSlow110 = mydsp_faustpower2_f(fSlow108); + double fSlow111 = ((3.0 * (fSlow110 * fSlow90)) + -1.0); + double fSlow112 = ((2.5 * fSlow111) + -2.0); + double fSlow113 = (2.333333333333333 * (fSlow112 * fSlow19)); + double fSlow114 = ((2.333333333333333 * ((fSlow110 * fSlow112) * fSlow90)) - (1.5 * fSlow111)); + double fSlow115 = (2.2000000000000002 * (((2.25 * fSlow114) - (1.3333333333333333 * fSlow112)) * fSlow36)); + double fSlow116 = (2.5 * (fSlow111 * fSlow58)); + double fSlow117 = (2.25 * (fSlow114 * fSlow68)); + double fSlow118 = cos((fSlow85 + -4.7123889803846897)); + double fSlow119 = (fSlow118 * fSlow87); + double fSlow120 = mydsp_faustpower2_f(fSlow118); + double fSlow121 = ((3.0 * (fSlow120 * fSlow90)) + -1.0); + double fSlow122 = ((2.5 * fSlow121) + -2.0); + double fSlow123 = (2.333333333333333 * (fSlow122 * fSlow19)); + double fSlow124 = ((2.333333333333333 * ((fSlow120 * fSlow122) * fSlow90)) - (1.5 * fSlow121)); + double fSlow125 = (2.2000000000000002 * (((2.25 * fSlow124) - (1.3333333333333333 * fSlow122)) * fSlow36)); + double fSlow126 = (2.5 * (fSlow121 * fSlow58)); + double fSlow127 = (2.25 * (fSlow124 * fSlow68)); + double fSlow128 = ((6.123233995736766e-17 * fSlow88) - fSlow1); + double fSlow129 = mydsp_faustpower2_f(fSlow128); + double fSlow130 = ((3.0 * fSlow129) + -1.0); + double fSlow131 = ((2.5 * fSlow130) + -2.0); + double fSlow132 = (2.333333333333333 * (fSlow131 * fSlow19)); + double fSlow133 = ((2.333333333333333 * (fSlow129 * fSlow131)) - (1.5 * fSlow130)); + double fSlow134 = (2.2000000000000002 * (((2.25 * fSlow133) - (1.3333333333333333 * fSlow131)) * fSlow36)); + double fSlow135 = (2.5 * (fSlow130 * fSlow58)); + double fSlow136 = (2.25 * (fSlow133 * fSlow68)); + double fSlow137 = (0.70710678118654757 * fSlow88); + double fSlow138 = (0.70710678118654746 * fSlow1); + double fSlow139 = (fSlow137 + fSlow138); + double fSlow140 = mydsp_faustpower2_f(fSlow139); + double fSlow141 = ((3.0 * fSlow140) + -1.0); + double fSlow142 = ((2.5 * fSlow141) + -2.0); + double fSlow143 = (2.333333333333333 * (fSlow142 * fSlow19)); + double fSlow144 = ((2.333333333333333 * (fSlow140 * fSlow142)) - (1.5 * fSlow141)); + double fSlow145 = (2.2000000000000002 * (((2.25 * fSlow144) - (1.3333333333333333 * fSlow142)) * fSlow36)); + double fSlow146 = (2.5 * (fSlow141 * fSlow58)); + double fSlow147 = (2.25 * (fSlow144 * fSlow68)); + double fSlow148 = (0.70710678118654757 * fSlow99); + double fSlow149 = (fSlow138 + fSlow148); + double fSlow150 = mydsp_faustpower2_f(fSlow149); + double fSlow151 = ((3.0 * fSlow150) + -1.0); + double fSlow152 = ((2.5 * fSlow151) + -2.0); + double fSlow153 = (2.333333333333333 * (fSlow152 * fSlow19)); + double fSlow154 = ((2.333333333333333 * (fSlow150 * fSlow152)) - (1.5 * fSlow151)); + double fSlow155 = (2.2000000000000002 * (((2.25 * fSlow154) - (1.3333333333333333 * fSlow152)) * fSlow36)); + double fSlow156 = (2.5 * (fSlow151 * fSlow58)); + double fSlow157 = (2.25 * (fSlow154 * fSlow68)); + double fSlow158 = (0.70710678118654757 * fSlow109); + double fSlow159 = (fSlow138 + fSlow158); + double fSlow160 = mydsp_faustpower2_f(fSlow159); + double fSlow161 = ((3.0 * fSlow160) + -1.0); + double fSlow162 = ((2.5 * fSlow161) + -2.0); + double fSlow163 = (2.333333333333333 * (fSlow162 * fSlow19)); + double fSlow164 = ((2.333333333333333 * (fSlow160 * fSlow162)) - (1.5 * fSlow161)); + double fSlow165 = (2.2000000000000002 * (((2.25 * fSlow164) - (1.3333333333333333 * fSlow162)) * fSlow36)); + double fSlow166 = (2.5 * (fSlow161 * fSlow58)); + double fSlow167 = (2.25 * (fSlow164 * fSlow68)); + double fSlow168 = (0.70710678118654757 * fSlow119); + double fSlow169 = (fSlow138 + fSlow168); double fSlow170 = mydsp_faustpower2_f(fSlow169); - double fSlow171 = (2.5 * (((3.0 * fSlow170) + -1.0) * fSlow62)); - double fSlow172 = mydsp_faustpower3_f(fSlow169); - double fSlow173 = (3.5 * (((5.0 * fSlow172) - (3.0 * fSlow169)) * fSlow24)); - double fSlow174 = (1.125 * (((fSlow170 * ((35.0 * fSlow170) + -30.0)) + 3.0) * fSlow72)); - double fSlow175 = (1.375 * (((15.0 * fSlow169) + (fSlow172 * ((63.0 * fSlow170) + -70.0))) * fSlow40)); - double fSlow176 = cos((fSlow0 + -3.9269908169872414)); - double fSlow177 = (3.0 * ((fSlow176 * fSlow8) * fSlow3)); - double fSlow178 = (fSlow176 * fSlow3); - double fSlow179 = mydsp_faustpower2_f(fSlow178); - double fSlow180 = (2.5 * (((3.0 * fSlow179) + -1.0) * fSlow62)); - double fSlow181 = mydsp_faustpower3_f(fSlow178); - double fSlow182 = (3.5 * (((5.0 * fSlow181) - (3.0 * fSlow178)) * fSlow24)); - double fSlow183 = (1.125 * (((fSlow179 * ((35.0 * fSlow179) + -30.0)) + 3.0) * fSlow72)); - double fSlow184 = (1.375 * (((15.0 * fSlow178) + (fSlow181 * ((63.0 * fSlow179) + -70.0))) * fSlow40)); - double fSlow185 = cos((fSlow0 + -5.497787143782138)); - double fSlow186 = (3.0 * ((fSlow185 * fSlow8) * fSlow3)); - double fSlow187 = (fSlow185 * fSlow3); - double fSlow188 = mydsp_faustpower2_f(fSlow187); - double fSlow189 = (2.5 * (((3.0 * fSlow188) + -1.0) * fSlow62)); - double fSlow190 = mydsp_faustpower3_f(fSlow187); - double fSlow191 = (3.5 * (((5.0 * fSlow190) - (3.0 * fSlow187)) * fSlow24)); - double fSlow192 = (1.125 * (((fSlow188 * ((35.0 * fSlow188) + -30.0)) + 3.0) * fSlow72)); - double fSlow193 = (1.375 * (((15.0 * fSlow187) + (fSlow190 * ((63.0 * fSlow188) + -70.0))) * fSlow40)); - double fSlow194 = (fSlow129 - fSlow130); - double fSlow195 = mydsp_faustpower2_f(fSlow194); - double fSlow196 = (3.5 * (((5.0 * fSlow195) + -3.0) * fSlow24)); - double fSlow197 = (1.375 * (((15.0 - (70.0 * fSlow195)) + (63.0 * mydsp_faustpower4_f(fSlow194))) * fSlow40)); - double fSlow198 = (2.5 * (((3.0 * fSlow195) + -1.0) * fSlow62)); - double fSlow199 = (1.125 * (((fSlow195 * ((35.0 * fSlow195) + -30.0)) + 3.0) * fSlow72)); - double fSlow200 = (fSlow137 - fSlow130); - double fSlow201 = mydsp_faustpower2_f(fSlow200); - double fSlow202 = (3.5 * (((5.0 * fSlow201) + -3.0) * fSlow24)); - double fSlow203 = (1.375 * (((15.0 - (70.0 * fSlow201)) + (63.0 * mydsp_faustpower4_f(fSlow200))) * fSlow40)); - double fSlow204 = (2.5 * (((3.0 * fSlow201) + -1.0) * fSlow62)); - double fSlow205 = (1.125 * (((fSlow201 * ((35.0 * fSlow201) + -30.0)) + 3.0) * fSlow72)); - double fSlow206 = (fSlow144 - fSlow130); - double fSlow207 = mydsp_faustpower2_f(fSlow206); - double fSlow208 = (3.5 * (((5.0 * fSlow207) + -3.0) * fSlow24)); - double fSlow209 = (1.375 * (((15.0 - (70.0 * fSlow207)) + (63.0 * mydsp_faustpower4_f(fSlow206))) * fSlow40)); - double fSlow210 = (1.125 * (((fSlow207 * ((35.0 * fSlow207) + -30.0)) + 3.0) * fSlow72)); - double fSlow211 = (2.5 * (((3.0 * fSlow207) + -1.0) * fSlow62)); - double fSlow212 = (fSlow151 - fSlow130); - double fSlow213 = mydsp_faustpower2_f(fSlow212); - double fSlow214 = (3.5 * (((5.0 * fSlow213) + -3.0) * fSlow24)); - double fSlow215 = (1.375 * (((15.0 - (70.0 * fSlow213)) + (63.0 * mydsp_faustpower4_f(fSlow212))) * fSlow40)); - double fSlow216 = (2.5 * (((3.0 * fSlow213) + -1.0) * fSlow62)); - double fSlow217 = (1.125 * (((fSlow213 * ((35.0 * fSlow213) + -30.0)) + 3.0) * fSlow72)); - double fSlow218 = (0.81649658092772592 * fSlow160); - double fSlow219 = (0.57735026918962584 * fSlow6); - double fSlow220 = (fSlow218 + fSlow219); - double fSlow221 = mydsp_faustpower2_f(fSlow220); - double fSlow222 = (3.5 * (((5.0 * fSlow221) + -3.0) * fSlow24)); - double fSlow223 = (1.375 * (((15.0 - (70.0 * fSlow221)) + (63.0 * mydsp_faustpower4_f(fSlow220))) * fSlow40)); - double fSlow224 = (2.5 * (((3.0 * fSlow221) + -1.0) * fSlow62)); - double fSlow225 = (1.125 * (((fSlow221 * ((35.0 * fSlow221) + -30.0)) + 3.0) * fSlow72)); - double fSlow226 = (0.81649658092772592 * fSlow169); - double fSlow227 = (fSlow219 + fSlow226); + double fSlow171 = ((3.0 * fSlow170) + -1.0); + double fSlow172 = ((2.5 * fSlow171) + -2.0); + double fSlow173 = (2.333333333333333 * (fSlow172 * fSlow19)); + double fSlow174 = ((2.333333333333333 * (fSlow170 * fSlow172)) - (1.5 * fSlow171)); + double fSlow175 = (2.2000000000000002 * (((2.25 * fSlow174) - (1.3333333333333333 * fSlow172)) * fSlow36)); + double fSlow176 = (2.5 * (fSlow171 * fSlow58)); + double fSlow177 = (2.25 * (fSlow174 * fSlow68)); + double fSlow178 = cos((fSlow85 + -0.78539816339744828)); + double fSlow179 = (fSlow178 * fSlow87); + double fSlow180 = mydsp_faustpower2_f(fSlow178); + double fSlow181 = ((3.0 * (fSlow180 * fSlow90)) + -1.0); + double fSlow182 = ((2.5 * fSlow181) + -2.0); + double fSlow183 = (2.333333333333333 * (fSlow182 * fSlow19)); + double fSlow184 = ((2.333333333333333 * ((fSlow180 * fSlow182) * fSlow90)) - (1.5 * fSlow181)); + double fSlow185 = (2.2000000000000002 * (((2.25 * fSlow184) - (1.3333333333333333 * fSlow182)) * fSlow36)); + double fSlow186 = (2.5 * (fSlow181 * fSlow58)); + double fSlow187 = (2.25 * (fSlow184 * fSlow68)); + double fSlow188 = cos((fSlow85 + -2.3561944901923448)); + double fSlow189 = (fSlow188 * fSlow87); + double fSlow190 = mydsp_faustpower2_f(fSlow188); + double fSlow191 = ((3.0 * (fSlow190 * fSlow90)) + -1.0); + double fSlow192 = ((2.5 * fSlow191) + -2.0); + double fSlow193 = (2.333333333333333 * (fSlow192 * fSlow19)); + double fSlow194 = ((2.333333333333333 * ((fSlow190 * fSlow192) * fSlow90)) - (1.5 * fSlow191)); + double fSlow195 = (2.2000000000000002 * (((2.25 * fSlow194) - (1.3333333333333333 * fSlow192)) * fSlow36)); + double fSlow196 = (2.5 * (fSlow191 * fSlow58)); + double fSlow197 = (2.25 * (fSlow194 * fSlow68)); + double fSlow198 = cos((fSlow85 + -3.9269908169872414)); + double fSlow199 = (fSlow198 * fSlow87); + double fSlow200 = mydsp_faustpower2_f(fSlow198); + double fSlow201 = ((3.0 * (fSlow200 * fSlow90)) + -1.0); + double fSlow202 = ((2.5 * fSlow201) + -2.0); + double fSlow203 = (2.333333333333333 * (fSlow202 * fSlow19)); + double fSlow204 = ((2.333333333333333 * ((fSlow200 * fSlow202) * fSlow90)) - (1.5 * fSlow201)); + double fSlow205 = (2.2000000000000002 * (((2.25 * fSlow204) - (1.3333333333333333 * fSlow202)) * fSlow36)); + double fSlow206 = (2.5 * (fSlow201 * fSlow58)); + double fSlow207 = (2.25 * (fSlow204 * fSlow68)); + double fSlow208 = cos((fSlow85 + -5.497787143782138)); + double fSlow209 = (fSlow208 * fSlow87); + double fSlow210 = mydsp_faustpower2_f(fSlow208); + double fSlow211 = ((3.0 * (fSlow210 * fSlow90)) + -1.0); + double fSlow212 = ((2.5 * fSlow211) + -2.0); + double fSlow213 = (2.333333333333333 * (fSlow212 * fSlow19)); + double fSlow214 = ((2.333333333333333 * ((fSlow210 * fSlow212) * fSlow90)) - (1.5 * fSlow211)); + double fSlow215 = (2.2000000000000002 * (((2.25 * fSlow214) - (1.3333333333333333 * fSlow212)) * fSlow36)); + double fSlow216 = (2.5 * (fSlow211 * fSlow58)); + double fSlow217 = (2.25 * (fSlow214 * fSlow68)); + double fSlow218 = (fSlow137 - fSlow138); + double fSlow219 = mydsp_faustpower2_f(fSlow218); + double fSlow220 = ((3.0 * fSlow219) + -1.0); + double fSlow221 = ((2.5 * fSlow220) + -2.0); + double fSlow222 = (2.333333333333333 * (fSlow221 * fSlow19)); + double fSlow223 = ((2.333333333333333 * (fSlow219 * fSlow221)) - (1.5 * fSlow220)); + double fSlow224 = (2.2000000000000002 * (((2.25 * fSlow223) - (1.3333333333333333 * fSlow221)) * fSlow36)); + double fSlow225 = (2.5 * (fSlow220 * fSlow58)); + double fSlow226 = (2.25 * (fSlow223 * fSlow68)); + double fSlow227 = (fSlow148 - fSlow138); double fSlow228 = mydsp_faustpower2_f(fSlow227); - double fSlow229 = (3.5 * (((5.0 * fSlow228) + -3.0) * fSlow24)); - double fSlow230 = (1.375 * (((15.0 - (70.0 * fSlow228)) + (63.0 * mydsp_faustpower4_f(fSlow227))) * fSlow40)); - double fSlow231 = (2.5 * (((3.0 * fSlow228) + -1.0) * fSlow62)); - double fSlow232 = (1.125 * (((fSlow228 * ((35.0 * fSlow228) + -30.0)) + 3.0) * fSlow72)); - double fSlow233 = (0.81649658092772592 * fSlow178); - double fSlow234 = (fSlow219 + fSlow233); - double fSlow235 = mydsp_faustpower2_f(fSlow234); - double fSlow236 = (3.5 * (((5.0 * fSlow235) + -3.0) * fSlow24)); - double fSlow237 = (1.375 * (((15.0 - (70.0 * fSlow235)) + (63.0 * mydsp_faustpower4_f(fSlow234))) * fSlow40)); - double fSlow238 = (2.5 * (((3.0 * fSlow235) + -1.0) * fSlow62)); - double fSlow239 = (1.125 * (((fSlow235 * ((35.0 * fSlow235) + -30.0)) + 3.0) * fSlow72)); - double fSlow240 = (0.81649658092772592 * fSlow187); - double fSlow241 = (fSlow219 + fSlow240); - double fSlow242 = mydsp_faustpower2_f(fSlow241); - double fSlow243 = (3.5 * (((5.0 * fSlow242) + -3.0) * fSlow24)); - double fSlow244 = (1.375 * (((15.0 - (70.0 * fSlow242)) + (63.0 * mydsp_faustpower4_f(fSlow241))) * fSlow40)); - double fSlow245 = (2.5 * (((3.0 * fSlow242) + -1.0) * fSlow62)); - double fSlow246 = (1.125 * (((fSlow242 * ((35.0 * fSlow242) + -30.0)) + 3.0) * fSlow72)); - double fSlow247 = (fSlow218 - fSlow219); - double fSlow248 = mydsp_faustpower2_f(fSlow247); - double fSlow249 = (3.5 * (((5.0 * fSlow248) + -3.0) * fSlow24)); - double fSlow250 = (1.375 * (((15.0 - (70.0 * fSlow248)) + (63.0 * mydsp_faustpower4_f(fSlow247))) * fSlow40)); - double fSlow251 = (2.5 * (((3.0 * fSlow248) + -1.0) * fSlow62)); - double fSlow252 = (1.125 * (((fSlow248 * ((35.0 * fSlow248) + -30.0)) + 3.0) * fSlow72)); - double fSlow253 = (fSlow226 - fSlow219); - double fSlow254 = mydsp_faustpower2_f(fSlow253); - double fSlow255 = (3.5 * (((5.0 * fSlow254) + -3.0) * fSlow24)); - double fSlow256 = (1.375 * (((15.0 - (70.0 * fSlow254)) + (63.0 * mydsp_faustpower4_f(fSlow253))) * fSlow40)); - double fSlow257 = (2.5 * (((3.0 * fSlow254) + -1.0) * fSlow62)); - double fSlow258 = (1.125 * (((fSlow254 * ((35.0 * fSlow254) + -30.0)) + 3.0) * fSlow72)); - double fSlow259 = (fSlow233 - fSlow219); - double fSlow260 = mydsp_faustpower2_f(fSlow259); - double fSlow261 = (3.5 * (((5.0 * fSlow260) + -3.0) * fSlow24)); - double fSlow262 = (1.375 * (((15.0 - (70.0 * fSlow260)) + (63.0 * mydsp_faustpower4_f(fSlow259))) * fSlow40)); - double fSlow263 = (2.5 * (((3.0 * fSlow260) + -1.0) * fSlow62)); - double fSlow264 = (1.125 * (((fSlow260 * ((35.0 * fSlow260) + -30.0)) + 3.0) * fSlow72)); - double fSlow265 = (fSlow240 - fSlow219); - double fSlow266 = mydsp_faustpower2_f(fSlow265); - double fSlow267 = (3.5 * (((5.0 * fSlow266) + -3.0) * fSlow24)); - double fSlow268 = (1.375 * (((15.0 - (70.0 * fSlow266)) + (63.0 * mydsp_faustpower4_f(fSlow265))) * fSlow40)); - double fSlow269 = (2.5 * (((3.0 * fSlow266) + -1.0) * fSlow62)); - double fSlow270 = (1.125 * (((fSlow266 * ((35.0 * fSlow266) + -30.0)) + 3.0) * fSlow72)); - double fSlow271 = (0.42640143271122027 * (cos((fSlow0 + -0.78539816339744839)) * fSlow3)); - double fSlow272 = (0.90453403373329111 * fSlow6); - double fSlow273 = (fSlow271 + fSlow272); - double fSlow274 = mydsp_faustpower2_f(fSlow273); - double fSlow275 = (3.5 * (((5.0 * fSlow274) + -3.0) * fSlow24)); - double fSlow276 = (1.375 * (((15.0 - (70.0 * fSlow274)) + (63.0 * mydsp_faustpower4_f(fSlow273))) * fSlow40)); - double fSlow277 = (2.5 * (((3.0 * fSlow274) + -1.0) * fSlow62)); - double fSlow278 = (1.125 * (((fSlow274 * ((35.0 * fSlow274) + -30.0)) + 3.0) * fSlow72)); - double fSlow279 = (0.42640143271122027 * fSlow169); - double fSlow280 = (fSlow272 + fSlow279); - double fSlow281 = mydsp_faustpower2_f(fSlow280); - double fSlow282 = (3.5 * (((5.0 * fSlow281) + -3.0) * fSlow24)); - double fSlow283 = (1.375 * (((15.0 - (70.0 * fSlow281)) + (63.0 * mydsp_faustpower4_f(fSlow280))) * fSlow40)); - double fSlow284 = (2.5 * (((3.0 * fSlow281) + -1.0) * fSlow62)); - double fSlow285 = (1.125 * (((fSlow281 * ((35.0 * fSlow281) + -30.0)) + 3.0) * fSlow72)); - double fSlow286 = (0.42640143271122027 * fSlow178); - double fSlow287 = (fSlow272 + fSlow286); - double fSlow288 = mydsp_faustpower2_f(fSlow287); - double fSlow289 = (3.5 * (((5.0 * fSlow288) + -3.0) * fSlow24)); - double fSlow290 = (1.375 * (((15.0 - (70.0 * fSlow288)) + (63.0 * mydsp_faustpower4_f(fSlow287))) * fSlow40)); - double fSlow291 = (2.5 * (((3.0 * fSlow288) + -1.0) * fSlow62)); - double fSlow292 = (1.125 * (((fSlow288 * ((35.0 * fSlow288) + -30.0)) + 3.0) * fSlow72)); - double fSlow293 = (0.42640143271122027 * fSlow187); - double fSlow294 = (fSlow272 + fSlow293); - double fSlow295 = mydsp_faustpower2_f(fSlow294); - double fSlow296 = (3.5 * (((5.0 * fSlow295) + -3.0) * fSlow24)); - double fSlow297 = (1.375 * (((15.0 - (70.0 * fSlow295)) + (63.0 * mydsp_faustpower4_f(fSlow294))) * fSlow40)); - double fSlow298 = (2.5 * (((3.0 * fSlow295) + -1.0) * fSlow62)); - double fSlow299 = (1.125 * (((fSlow295 * ((35.0 * fSlow295) + -30.0)) + 3.0) * fSlow72)); - double fSlow300 = (0.95346258924559235 * (cos((fSlow0 + -0.32175055439664263)) * fSlow3)); - double fSlow301 = (0.30151134457776352 * fSlow6); - double fSlow302 = (fSlow300 + fSlow301); - double fSlow303 = mydsp_faustpower2_f(fSlow302); - double fSlow304 = (3.5 * (((5.0 * fSlow303) + -3.0) * fSlow24)); - double fSlow305 = (1.375 * (((15.0 - (70.0 * fSlow303)) + (63.0 * mydsp_faustpower4_f(fSlow302))) * fSlow40)); - double fSlow306 = (2.5 * (((3.0 * fSlow303) + -1.0) * fSlow62)); - double fSlow307 = (1.125 * (((fSlow303 * ((35.0 * fSlow303) + -30.0)) + 3.0) * fSlow72)); - double fSlow308 = (0.95346258924559235 * (cos((fSlow0 + -1.2490457723982544)) * fSlow3)); - double fSlow309 = (fSlow301 + fSlow308); - double fSlow310 = mydsp_faustpower2_f(fSlow309); - double fSlow311 = (3.5 * (((5.0 * fSlow310) + -3.0) * fSlow24)); - double fSlow312 = (1.375 * (((15.0 - (70.0 * fSlow310)) + (63.0 * mydsp_faustpower4_f(fSlow309))) * fSlow40)); - double fSlow313 = (2.5 * (((3.0 * fSlow310) + -1.0) * fSlow62)); - double fSlow314 = (1.125 * (((fSlow310 * ((35.0 * fSlow310) + -30.0)) + 3.0) * fSlow72)); - double fSlow315 = (0.95346258924559235 * (cos((fSlow0 + -1.8925468811915387)) * fSlow3)); - double fSlow316 = (fSlow301 + fSlow315); - double fSlow317 = mydsp_faustpower2_f(fSlow316); - double fSlow318 = (3.5 * (((5.0 * fSlow317) + -3.0) * fSlow24)); - double fSlow319 = (1.375 * (((15.0 - (70.0 * fSlow317)) + (63.0 * mydsp_faustpower4_f(fSlow316))) * fSlow40)); - double fSlow320 = (2.5 * (((3.0 * fSlow317) + -1.0) * fSlow62)); - double fSlow321 = (1.125 * (((fSlow317 * ((35.0 * fSlow317) + -30.0)) + 3.0) * fSlow72)); - double fSlow322 = (0.95346258924559235 * (cos((fSlow0 + -2.8198420991931505)) * fSlow3)); - double fSlow323 = (fSlow301 + fSlow322); - double fSlow324 = mydsp_faustpower2_f(fSlow323); - double fSlow325 = (3.5 * (((5.0 * fSlow324) + -3.0) * fSlow24)); - double fSlow326 = (1.375 * (((15.0 - (70.0 * fSlow324)) + (63.0 * mydsp_faustpower4_f(fSlow323))) * fSlow40)); - double fSlow327 = (2.5 * (((3.0 * fSlow324) + -1.0) * fSlow62)); - double fSlow328 = (1.125 * (((fSlow324 * ((35.0 * fSlow324) + -30.0)) + 3.0) * fSlow72)); - double fSlow329 = (0.95346258924559235 * (cos((fSlow0 + -3.4633432079864357)) * fSlow3)); - double fSlow330 = (fSlow301 + fSlow329); - double fSlow331 = mydsp_faustpower2_f(fSlow330); - double fSlow332 = (3.5 * (((5.0 * fSlow331) + -3.0) * fSlow24)); - double fSlow333 = (1.375 * (((15.0 - (70.0 * fSlow331)) + (63.0 * mydsp_faustpower4_f(fSlow330))) * fSlow40)); - double fSlow334 = (2.5 * (((3.0 * fSlow331) + -1.0) * fSlow62)); - double fSlow335 = (1.125 * (((fSlow331 * ((35.0 * fSlow331) + -30.0)) + 3.0) * fSlow72)); - double fSlow336 = (0.95346258924559235 * (cos((fSlow0 + -4.3906384259880475)) * fSlow3)); - double fSlow337 = (fSlow301 + fSlow336); - double fSlow338 = mydsp_faustpower2_f(fSlow337); - double fSlow339 = (3.5 * (((5.0 * fSlow338) + -3.0) * fSlow24)); - double fSlow340 = (1.375 * (((15.0 - (70.0 * fSlow338)) + (63.0 * mydsp_faustpower4_f(fSlow337))) * fSlow40)); - double fSlow341 = (2.5 * (((3.0 * fSlow338) + -1.0) * fSlow62)); - double fSlow342 = (1.125 * (((fSlow338 * ((35.0 * fSlow338) + -30.0)) + 3.0) * fSlow72)); - double fSlow343 = (0.95346258924559235 * (cos((fSlow0 + -5.0341395347813318)) * fSlow3)); - double fSlow344 = (fSlow301 + fSlow343); - double fSlow345 = mydsp_faustpower2_f(fSlow344); - double fSlow346 = (3.5 * (((5.0 * fSlow345) + -3.0) * fSlow24)); - double fSlow347 = (1.375 * (((15.0 - (70.0 * fSlow345)) + (63.0 * mydsp_faustpower4_f(fSlow344))) * fSlow40)); - double fSlow348 = (2.5 * (((3.0 * fSlow345) + -1.0) * fSlow62)); - double fSlow349 = (1.125 * (((fSlow345 * ((35.0 * fSlow345) + -30.0)) + 3.0) * fSlow72)); - double fSlow350 = (0.95346258924559235 * (cos((fSlow0 + -5.9614347527829432)) * fSlow3)); - double fSlow351 = (fSlow301 + fSlow350); - double fSlow352 = mydsp_faustpower2_f(fSlow351); - double fSlow353 = (3.5 * (((5.0 * fSlow352) + -3.0) * fSlow24)); - double fSlow354 = (1.375 * (((15.0 - (70.0 * fSlow352)) + (63.0 * mydsp_faustpower4_f(fSlow351))) * fSlow40)); - double fSlow355 = (2.5 * (((3.0 * fSlow352) + -1.0) * fSlow62)); - double fSlow356 = (1.125 * (((fSlow352 * ((35.0 * fSlow352) + -30.0)) + 3.0) * fSlow72)); - double fSlow357 = (fSlow300 - fSlow301); - double fSlow358 = mydsp_faustpower2_f(fSlow357); - double fSlow359 = (3.5 * (((5.0 * fSlow358) + -3.0) * fSlow24)); - double fSlow360 = (1.375 * (((15.0 - (70.0 * fSlow358)) + (63.0 * mydsp_faustpower4_f(fSlow357))) * fSlow40)); - double fSlow361 = (2.5 * (((3.0 * fSlow358) + -1.0) * fSlow62)); - double fSlow362 = (1.125 * (((fSlow358 * ((35.0 * fSlow358) + -30.0)) + 3.0) * fSlow72)); - double fSlow363 = (fSlow308 - fSlow301); + double fSlow229 = ((3.0 * fSlow228) + -1.0); + double fSlow230 = ((2.5 * fSlow229) + -2.0); + double fSlow231 = (2.333333333333333 * (fSlow230 * fSlow19)); + double fSlow232 = ((2.333333333333333 * (fSlow228 * fSlow230)) - (1.5 * fSlow229)); + double fSlow233 = (2.2000000000000002 * (((2.25 * fSlow232) - (1.3333333333333333 * fSlow230)) * fSlow36)); + double fSlow234 = (2.5 * (fSlow229 * fSlow58)); + double fSlow235 = (2.25 * (fSlow232 * fSlow68)); + double fSlow236 = (fSlow158 - fSlow138); + double fSlow237 = mydsp_faustpower2_f(fSlow236); + double fSlow238 = ((3.0 * fSlow237) + -1.0); + double fSlow239 = ((2.5 * fSlow238) + -2.0); + double fSlow240 = (2.333333333333333 * (fSlow239 * fSlow19)); + double fSlow241 = ((2.333333333333333 * (fSlow237 * fSlow239)) - (1.5 * fSlow238)); + double fSlow242 = (2.2000000000000002 * (((2.25 * fSlow241) - (1.3333333333333333 * fSlow239)) * fSlow36)); + double fSlow243 = (2.5 * (fSlow238 * fSlow58)); + double fSlow244 = (2.25 * (fSlow241 * fSlow68)); + double fSlow245 = (fSlow168 - fSlow138); + double fSlow246 = mydsp_faustpower2_f(fSlow245); + double fSlow247 = ((3.0 * fSlow246) + -1.0); + double fSlow248 = ((2.5 * fSlow247) + -2.0); + double fSlow249 = (2.333333333333333 * (fSlow248 * fSlow19)); + double fSlow250 = ((2.333333333333333 * (fSlow246 * fSlow248)) - (1.5 * fSlow247)); + double fSlow251 = (2.2000000000000002 * (((2.25 * fSlow250) - (1.3333333333333333 * fSlow248)) * fSlow36)); + double fSlow252 = (2.5 * (fSlow247 * fSlow58)); + double fSlow253 = (2.25 * (fSlow250 * fSlow68)); + double fSlow254 = (0.81649658092772592 * fSlow179); + double fSlow255 = (0.57735026918962584 * fSlow1); + double fSlow256 = (fSlow254 + fSlow255); + double fSlow257 = mydsp_faustpower2_f(fSlow256); + double fSlow258 = ((3.0 * fSlow257) + -1.0); + double fSlow259 = ((2.5 * fSlow258) + -2.0); + double fSlow260 = (2.333333333333333 * (fSlow259 * fSlow19)); + double fSlow261 = ((2.333333333333333 * (fSlow257 * fSlow259)) - (1.5 * fSlow258)); + double fSlow262 = (2.2000000000000002 * (((2.25 * fSlow261) - (1.3333333333333333 * fSlow259)) * fSlow36)); + double fSlow263 = (2.5 * (fSlow258 * fSlow58)); + double fSlow264 = (2.25 * (fSlow261 * fSlow68)); + double fSlow265 = (0.81649658092772592 * fSlow189); + double fSlow266 = (fSlow255 + fSlow265); + double fSlow267 = mydsp_faustpower2_f(fSlow266); + double fSlow268 = ((3.0 * fSlow267) + -1.0); + double fSlow269 = ((2.5 * fSlow268) + -2.0); + double fSlow270 = (2.333333333333333 * (fSlow269 * fSlow19)); + double fSlow271 = ((2.333333333333333 * (fSlow267 * fSlow269)) - (1.5 * fSlow268)); + double fSlow272 = (2.2000000000000002 * (((2.25 * fSlow271) - (1.3333333333333333 * fSlow269)) * fSlow36)); + double fSlow273 = (2.5 * (fSlow268 * fSlow58)); + double fSlow274 = (2.25 * (fSlow271 * fSlow68)); + double fSlow275 = (0.81649658092772592 * fSlow199); + double fSlow276 = (fSlow255 + fSlow275); + double fSlow277 = mydsp_faustpower2_f(fSlow276); + double fSlow278 = ((3.0 * fSlow277) + -1.0); + double fSlow279 = ((2.5 * fSlow278) + -2.0); + double fSlow280 = (2.333333333333333 * (fSlow279 * fSlow19)); + double fSlow281 = ((2.333333333333333 * (fSlow277 * fSlow279)) - (1.5 * fSlow278)); + double fSlow282 = (2.2000000000000002 * (((2.25 * fSlow281) - (1.3333333333333333 * fSlow279)) * fSlow36)); + double fSlow283 = (2.5 * (fSlow278 * fSlow58)); + double fSlow284 = (2.25 * (fSlow281 * fSlow68)); + double fSlow285 = (0.81649658092772592 * fSlow209); + double fSlow286 = (fSlow255 + fSlow285); + double fSlow287 = mydsp_faustpower2_f(fSlow286); + double fSlow288 = ((3.0 * fSlow287) + -1.0); + double fSlow289 = ((2.5 * fSlow288) + -2.0); + double fSlow290 = (2.333333333333333 * (fSlow289 * fSlow19)); + double fSlow291 = ((2.333333333333333 * (fSlow287 * fSlow289)) - (1.5 * fSlow288)); + double fSlow292 = (2.2000000000000002 * (((2.25 * fSlow291) - (1.3333333333333333 * fSlow289)) * fSlow36)); + double fSlow293 = (2.5 * (fSlow288 * fSlow58)); + double fSlow294 = (2.25 * (fSlow291 * fSlow68)); + double fSlow295 = (fSlow254 - fSlow255); + double fSlow296 = mydsp_faustpower2_f(fSlow295); + double fSlow297 = ((3.0 * fSlow296) + -1.0); + double fSlow298 = ((2.5 * fSlow297) + -2.0); + double fSlow299 = (2.333333333333333 * (fSlow298 * fSlow19)); + double fSlow300 = ((2.333333333333333 * (fSlow296 * fSlow298)) - (1.5 * fSlow297)); + double fSlow301 = (2.2000000000000002 * (((2.25 * fSlow300) - (1.3333333333333333 * fSlow298)) * fSlow36)); + double fSlow302 = (2.5 * (fSlow297 * fSlow58)); + double fSlow303 = (2.25 * (fSlow300 * fSlow68)); + double fSlow304 = (fSlow265 - fSlow255); + double fSlow305 = mydsp_faustpower2_f(fSlow304); + double fSlow306 = ((3.0 * fSlow305) + -1.0); + double fSlow307 = ((2.5 * fSlow306) + -2.0); + double fSlow308 = (2.333333333333333 * (fSlow307 * fSlow19)); + double fSlow309 = ((2.333333333333333 * (fSlow305 * fSlow307)) - (1.5 * fSlow306)); + double fSlow310 = (2.2000000000000002 * (((2.25 * fSlow309) - (1.3333333333333333 * fSlow307)) * fSlow36)); + double fSlow311 = (2.5 * (fSlow306 * fSlow58)); + double fSlow312 = (2.25 * (fSlow309 * fSlow68)); + double fSlow313 = (fSlow275 - fSlow255); + double fSlow314 = mydsp_faustpower2_f(fSlow313); + double fSlow315 = ((3.0 * fSlow314) + -1.0); + double fSlow316 = ((2.5 * fSlow315) + -2.0); + double fSlow317 = (2.333333333333333 * (fSlow316 * fSlow19)); + double fSlow318 = ((2.333333333333333 * (fSlow314 * fSlow316)) - (1.5 * fSlow315)); + double fSlow319 = (2.2000000000000002 * (((2.25 * fSlow318) - (1.3333333333333333 * fSlow316)) * fSlow36)); + double fSlow320 = (2.5 * (fSlow315 * fSlow58)); + double fSlow321 = (2.25 * (fSlow318 * fSlow68)); + double fSlow322 = (fSlow285 - fSlow255); + double fSlow323 = mydsp_faustpower2_f(fSlow322); + double fSlow324 = ((3.0 * fSlow323) + -1.0); + double fSlow325 = ((2.5 * fSlow324) + -2.0); + double fSlow326 = (2.333333333333333 * (fSlow325 * fSlow19)); + double fSlow327 = ((2.333333333333333 * (fSlow323 * fSlow325)) - (1.5 * fSlow324)); + double fSlow328 = (2.2000000000000002 * (((2.25 * fSlow327) - (1.3333333333333333 * fSlow325)) * fSlow36)); + double fSlow329 = (2.5 * (fSlow324 * fSlow58)); + double fSlow330 = (2.25 * (fSlow327 * fSlow68)); + double fSlow331 = (0.42640143271122027 * (cos((fSlow85 + -0.78539816339744839)) * fSlow87)); + double fSlow332 = (0.90453403373329111 * fSlow1); + double fSlow333 = (fSlow331 + fSlow332); + double fSlow334 = mydsp_faustpower2_f(fSlow333); + double fSlow335 = ((3.0 * fSlow334) + -1.0); + double fSlow336 = ((2.5 * fSlow335) + -2.0); + double fSlow337 = (2.333333333333333 * (fSlow336 * fSlow19)); + double fSlow338 = ((2.333333333333333 * (fSlow334 * fSlow336)) - (1.5 * fSlow335)); + double fSlow339 = (2.2000000000000002 * (((2.25 * fSlow338) - (1.3333333333333333 * fSlow336)) * fSlow36)); + double fSlow340 = (2.5 * (fSlow335 * fSlow58)); + double fSlow341 = (2.25 * (fSlow338 * fSlow68)); + double fSlow342 = (0.42640143271122027 * fSlow189); + double fSlow343 = (fSlow332 + fSlow342); + double fSlow344 = mydsp_faustpower2_f(fSlow343); + double fSlow345 = ((3.0 * fSlow344) + -1.0); + double fSlow346 = ((2.5 * fSlow345) + -2.0); + double fSlow347 = (2.333333333333333 * (fSlow346 * fSlow19)); + double fSlow348 = ((2.333333333333333 * (fSlow344 * fSlow346)) - (1.5 * fSlow345)); + double fSlow349 = (2.2000000000000002 * (((2.25 * fSlow348) - (1.3333333333333333 * fSlow346)) * fSlow36)); + double fSlow350 = (2.5 * (fSlow345 * fSlow58)); + double fSlow351 = (2.25 * (fSlow348 * fSlow68)); + double fSlow352 = (0.42640143271122027 * fSlow199); + double fSlow353 = (fSlow332 + fSlow352); + double fSlow354 = mydsp_faustpower2_f(fSlow353); + double fSlow355 = ((3.0 * fSlow354) + -1.0); + double fSlow356 = ((2.5 * fSlow355) + -2.0); + double fSlow357 = (2.333333333333333 * (fSlow356 * fSlow19)); + double fSlow358 = ((2.333333333333333 * (fSlow354 * fSlow356)) - (1.5 * fSlow355)); + double fSlow359 = (2.2000000000000002 * (((2.25 * fSlow358) - (1.3333333333333333 * fSlow356)) * fSlow36)); + double fSlow360 = (2.5 * (fSlow355 * fSlow58)); + double fSlow361 = (2.25 * (fSlow358 * fSlow68)); + double fSlow362 = (0.42640143271122027 * fSlow209); + double fSlow363 = (fSlow332 + fSlow362); double fSlow364 = mydsp_faustpower2_f(fSlow363); - double fSlow365 = (3.5 * (((5.0 * fSlow364) + -3.0) * fSlow24)); - double fSlow366 = (1.375 * (((15.0 - (70.0 * fSlow364)) + (63.0 * mydsp_faustpower4_f(fSlow363))) * fSlow40)); - double fSlow367 = (2.5 * (((3.0 * fSlow364) + -1.0) * fSlow62)); - double fSlow368 = (1.125 * (((fSlow364 * ((35.0 * fSlow364) + -30.0)) + 3.0) * fSlow72)); - double fSlow369 = (fSlow315 - fSlow301); - double fSlow370 = mydsp_faustpower2_f(fSlow369); - double fSlow371 = (3.5 * (((5.0 * fSlow370) + -3.0) * fSlow24)); - double fSlow372 = (1.375 * (((15.0 - (70.0 * fSlow370)) + (63.0 * mydsp_faustpower4_f(fSlow369))) * fSlow40)); - double fSlow373 = (2.5 * (((3.0 * fSlow370) + -1.0) * fSlow62)); - double fSlow374 = (1.125 * (((fSlow370 * ((35.0 * fSlow370) + -30.0)) + 3.0) * fSlow72)); - double fSlow375 = (fSlow322 - fSlow301); - double fSlow376 = mydsp_faustpower2_f(fSlow375); - double fSlow377 = (3.5 * (((5.0 * fSlow376) + -3.0) * fSlow24)); - double fSlow378 = (1.375 * (((15.0 - (70.0 * fSlow376)) + (63.0 * mydsp_faustpower4_f(fSlow375))) * fSlow40)); - double fSlow379 = (2.5 * (((3.0 * fSlow376) + -1.0) * fSlow62)); - double fSlow380 = (1.125 * (((fSlow376 * ((35.0 * fSlow376) + -30.0)) + 3.0) * fSlow72)); - double fSlow381 = (fSlow329 - fSlow301); - double fSlow382 = mydsp_faustpower2_f(fSlow381); - double fSlow383 = (3.5 * (((5.0 * fSlow382) + -3.0) * fSlow24)); - double fSlow384 = (1.375 * (((15.0 - (70.0 * fSlow382)) + (63.0 * mydsp_faustpower4_f(fSlow381))) * fSlow40)); - double fSlow385 = (2.5 * (((3.0 * fSlow382) + -1.0) * fSlow62)); - double fSlow386 = (1.125 * (((fSlow382 * ((35.0 * fSlow382) + -30.0)) + 3.0) * fSlow72)); - double fSlow387 = (fSlow336 - fSlow301); - double fSlow388 = mydsp_faustpower2_f(fSlow387); - double fSlow389 = (3.5 * (((5.0 * fSlow388) + -3.0) * fSlow24)); - double fSlow390 = (1.375 * (((15.0 - (70.0 * fSlow388)) + (63.0 * mydsp_faustpower4_f(fSlow387))) * fSlow40)); - double fSlow391 = (2.5 * (((3.0 * fSlow388) + -1.0) * fSlow62)); - double fSlow392 = (1.125 * (((fSlow388 * ((35.0 * fSlow388) + -30.0)) + 3.0) * fSlow72)); - double fSlow393 = (fSlow343 - fSlow301); - double fSlow394 = mydsp_faustpower2_f(fSlow393); - double fSlow395 = (3.5 * (((5.0 * fSlow394) + -3.0) * fSlow24)); - double fSlow396 = (1.375 * (((15.0 - (70.0 * fSlow394)) + (63.0 * mydsp_faustpower4_f(fSlow393))) * fSlow40)); - double fSlow397 = (2.5 * (((3.0 * fSlow394) + -1.0) * fSlow62)); - double fSlow398 = (1.125 * (((fSlow394 * ((35.0 * fSlow394) + -30.0)) + 3.0) * fSlow72)); - double fSlow399 = (fSlow350 - fSlow301); - double fSlow400 = mydsp_faustpower2_f(fSlow399); - double fSlow401 = (3.5 * (((5.0 * fSlow400) + -3.0) * fSlow24)); - double fSlow402 = (1.375 * (((15.0 - (70.0 * fSlow400)) + (63.0 * mydsp_faustpower4_f(fSlow399))) * fSlow40)); - double fSlow403 = (2.5 * (((3.0 * fSlow400) + -1.0) * fSlow62)); - double fSlow404 = (1.125 * (((fSlow400 * ((35.0 * fSlow400) + -30.0)) + 3.0) * fSlow72)); - double fSlow405 = (fSlow271 - fSlow272); - double fSlow406 = mydsp_faustpower2_f(fSlow405); - double fSlow407 = (3.5 * (((5.0 * fSlow406) + -3.0) * fSlow24)); - double fSlow408 = (1.375 * (((15.0 - (70.0 * fSlow406)) + (63.0 * mydsp_faustpower4_f(fSlow405))) * fSlow40)); - double fSlow409 = (2.5 * (((3.0 * fSlow406) + -1.0) * fSlow62)); - double fSlow410 = (1.125 * (((fSlow406 * ((35.0 * fSlow406) + -30.0)) + 3.0) * fSlow72)); - double fSlow411 = (fSlow279 - fSlow272); - double fSlow412 = mydsp_faustpower2_f(fSlow411); - double fSlow413 = (3.5 * (((5.0 * fSlow412) + -3.0) * fSlow24)); - double fSlow414 = (1.375 * (((15.0 - (70.0 * fSlow412)) + (63.0 * mydsp_faustpower4_f(fSlow411))) * fSlow40)); - double fSlow415 = (2.5 * (((3.0 * fSlow412) + -1.0) * fSlow62)); - double fSlow416 = (1.125 * (((fSlow412 * ((35.0 * fSlow412) + -30.0)) + 3.0) * fSlow72)); - double fSlow417 = (fSlow286 - fSlow272); - double fSlow418 = mydsp_faustpower2_f(fSlow417); - double fSlow419 = (3.5 * (((5.0 * fSlow418) + -3.0) * fSlow24)); - double fSlow420 = (1.375 * (((15.0 - (70.0 * fSlow418)) + (63.0 * mydsp_faustpower4_f(fSlow417))) * fSlow40)); - double fSlow421 = (2.5 * (((3.0 * fSlow418) + -1.0) * fSlow62)); - double fSlow422 = (1.125 * (((fSlow418 * ((35.0 * fSlow418) + -30.0)) + 3.0) * fSlow72)); - double fSlow423 = (fSlow293 - fSlow272); - double fSlow424 = mydsp_faustpower2_f(fSlow423); - double fSlow425 = (3.5 * (((5.0 * fSlow424) + -3.0) * fSlow24)); - double fSlow426 = (1.375 * (((15.0 - (70.0 * fSlow424)) + (63.0 * mydsp_faustpower4_f(fSlow423))) * fSlow40)); - double fSlow427 = (2.5 * (((3.0 * fSlow424) + -1.0) * fSlow62)); - double fSlow428 = (1.125 * (((fSlow424 * ((35.0 * fSlow424) + -30.0)) + 3.0) * fSlow72)); + double fSlow365 = ((3.0 * fSlow364) + -1.0); + double fSlow366 = ((2.5 * fSlow365) + -2.0); + double fSlow367 = (2.333333333333333 * (fSlow366 * fSlow19)); + double fSlow368 = ((2.333333333333333 * (fSlow364 * fSlow366)) - (1.5 * fSlow365)); + double fSlow369 = (2.2000000000000002 * (((2.25 * fSlow368) - (1.3333333333333333 * fSlow366)) * fSlow36)); + double fSlow370 = (2.5 * (fSlow365 * fSlow58)); + double fSlow371 = (2.25 * (fSlow368 * fSlow68)); + double fSlow372 = (0.95346258924559235 * (cos((fSlow85 + -0.32175055439664263)) * fSlow87)); + double fSlow373 = (0.30151134457776352 * fSlow1); + double fSlow374 = (fSlow372 + fSlow373); + double fSlow375 = mydsp_faustpower2_f(fSlow374); + double fSlow376 = ((3.0 * fSlow375) + -1.0); + double fSlow377 = ((2.5 * fSlow376) + -2.0); + double fSlow378 = (2.333333333333333 * (fSlow377 * fSlow19)); + double fSlow379 = ((2.333333333333333 * (fSlow375 * fSlow377)) - (1.5 * fSlow376)); + double fSlow380 = (2.2000000000000002 * (((2.25 * fSlow379) - (1.3333333333333333 * fSlow377)) * fSlow36)); + double fSlow381 = (2.5 * (fSlow376 * fSlow58)); + double fSlow382 = (2.25 * (fSlow379 * fSlow68)); + double fSlow383 = (0.95346258924559235 * (cos((fSlow85 + -1.2490457723982544)) * fSlow87)); + double fSlow384 = (fSlow373 + fSlow383); + double fSlow385 = mydsp_faustpower2_f(fSlow384); + double fSlow386 = ((3.0 * fSlow385) + -1.0); + double fSlow387 = ((2.5 * fSlow386) + -2.0); + double fSlow388 = (2.333333333333333 * (fSlow387 * fSlow19)); + double fSlow389 = ((2.333333333333333 * (fSlow385 * fSlow387)) - (1.5 * fSlow386)); + double fSlow390 = (2.2000000000000002 * (((2.25 * fSlow389) - (1.3333333333333333 * fSlow387)) * fSlow36)); + double fSlow391 = (2.5 * (fSlow386 * fSlow58)); + double fSlow392 = (2.25 * (fSlow389 * fSlow68)); + double fSlow393 = (0.95346258924559235 * (cos((fSlow85 + -1.8925468811915387)) * fSlow87)); + double fSlow394 = (fSlow373 + fSlow393); + double fSlow395 = mydsp_faustpower2_f(fSlow394); + double fSlow396 = ((3.0 * fSlow395) + -1.0); + double fSlow397 = ((2.5 * fSlow396) + -2.0); + double fSlow398 = (2.333333333333333 * (fSlow397 * fSlow19)); + double fSlow399 = ((2.333333333333333 * (fSlow395 * fSlow397)) - (1.5 * fSlow396)); + double fSlow400 = (2.2000000000000002 * (((2.25 * fSlow399) - (1.3333333333333333 * fSlow397)) * fSlow36)); + double fSlow401 = (2.5 * (fSlow396 * fSlow58)); + double fSlow402 = (2.25 * (fSlow399 * fSlow68)); + double fSlow403 = (0.95346258924559235 * (cos((fSlow85 + -2.8198420991931505)) * fSlow87)); + double fSlow404 = (fSlow373 + fSlow403); + double fSlow405 = mydsp_faustpower2_f(fSlow404); + double fSlow406 = ((3.0 * fSlow405) + -1.0); + double fSlow407 = ((2.5 * fSlow406) + -2.0); + double fSlow408 = (2.333333333333333 * (fSlow407 * fSlow19)); + double fSlow409 = ((2.333333333333333 * (fSlow405 * fSlow407)) - (1.5 * fSlow406)); + double fSlow410 = (2.2000000000000002 * (((2.25 * fSlow409) - (1.3333333333333333 * fSlow407)) * fSlow36)); + double fSlow411 = (2.5 * (fSlow406 * fSlow58)); + double fSlow412 = (2.25 * (fSlow409 * fSlow68)); + double fSlow413 = (0.95346258924559235 * (cos((fSlow85 + -3.4633432079864357)) * fSlow87)); + double fSlow414 = (fSlow373 + fSlow413); + double fSlow415 = mydsp_faustpower2_f(fSlow414); + double fSlow416 = ((3.0 * fSlow415) + -1.0); + double fSlow417 = ((2.5 * fSlow416) + -2.0); + double fSlow418 = (2.333333333333333 * (fSlow417 * fSlow19)); + double fSlow419 = ((2.333333333333333 * (fSlow415 * fSlow417)) - (1.5 * fSlow416)); + double fSlow420 = (2.2000000000000002 * (((2.25 * fSlow419) - (1.3333333333333333 * fSlow417)) * fSlow36)); + double fSlow421 = (2.5 * (fSlow416 * fSlow58)); + double fSlow422 = (2.25 * (fSlow419 * fSlow68)); + double fSlow423 = (0.95346258924559235 * (cos((fSlow85 + -4.3906384259880475)) * fSlow87)); + double fSlow424 = (fSlow373 + fSlow423); + double fSlow425 = mydsp_faustpower2_f(fSlow424); + double fSlow426 = ((3.0 * fSlow425) + -1.0); + double fSlow427 = ((2.5 * fSlow426) + -2.0); + double fSlow428 = (2.333333333333333 * (fSlow427 * fSlow19)); + double fSlow429 = ((2.333333333333333 * (fSlow425 * fSlow427)) - (1.5 * fSlow426)); + double fSlow430 = (2.2000000000000002 * (((2.25 * fSlow429) - (1.3333333333333333 * fSlow427)) * fSlow36)); + double fSlow431 = (2.5 * (fSlow426 * fSlow58)); + double fSlow432 = (2.25 * (fSlow429 * fSlow68)); + double fSlow433 = (0.95346258924559235 * (cos((fSlow85 + -5.0341395347813318)) * fSlow87)); + double fSlow434 = (fSlow373 + fSlow433); + double fSlow435 = mydsp_faustpower2_f(fSlow434); + double fSlow436 = ((3.0 * fSlow435) + -1.0); + double fSlow437 = ((2.5 * fSlow436) + -2.0); + double fSlow438 = (2.333333333333333 * (fSlow437 * fSlow19)); + double fSlow439 = ((2.333333333333333 * (fSlow435 * fSlow437)) - (1.5 * fSlow436)); + double fSlow440 = (2.2000000000000002 * (((2.25 * fSlow439) - (1.3333333333333333 * fSlow437)) * fSlow36)); + double fSlow441 = (2.5 * (fSlow436 * fSlow58)); + double fSlow442 = (2.25 * (fSlow439 * fSlow68)); + double fSlow443 = (0.95346258924559235 * (cos((fSlow85 + -5.9614347527829432)) * fSlow87)); + double fSlow444 = (fSlow373 + fSlow443); + double fSlow445 = mydsp_faustpower2_f(fSlow444); + double fSlow446 = ((3.0 * fSlow445) + -1.0); + double fSlow447 = ((2.5 * fSlow446) + -2.0); + double fSlow448 = (2.333333333333333 * (fSlow447 * fSlow19)); + double fSlow449 = ((2.333333333333333 * (fSlow445 * fSlow447)) - (1.5 * fSlow446)); + double fSlow450 = (2.2000000000000002 * (((2.25 * fSlow449) - (1.3333333333333333 * fSlow447)) * fSlow36)); + double fSlow451 = (2.5 * (fSlow446 * fSlow58)); + double fSlow452 = (2.25 * (fSlow449 * fSlow68)); + double fSlow453 = (fSlow372 - fSlow373); + double fSlow454 = mydsp_faustpower2_f(fSlow453); + double fSlow455 = ((3.0 * fSlow454) + -1.0); + double fSlow456 = ((2.5 * fSlow455) + -2.0); + double fSlow457 = (2.333333333333333 * (fSlow456 * fSlow19)); + double fSlow458 = ((2.333333333333333 * (fSlow454 * fSlow456)) - (1.5 * fSlow455)); + double fSlow459 = (2.2000000000000002 * (((2.25 * fSlow458) - (1.3333333333333333 * fSlow456)) * fSlow36)); + double fSlow460 = (2.5 * (fSlow455 * fSlow58)); + double fSlow461 = (2.25 * (fSlow458 * fSlow68)); + double fSlow462 = (fSlow383 - fSlow373); + double fSlow463 = mydsp_faustpower2_f(fSlow462); + double fSlow464 = ((3.0 * fSlow463) + -1.0); + double fSlow465 = ((2.5 * fSlow464) + -2.0); + double fSlow466 = (2.333333333333333 * (fSlow465 * fSlow19)); + double fSlow467 = ((2.333333333333333 * (fSlow463 * fSlow465)) - (1.5 * fSlow464)); + double fSlow468 = (2.2000000000000002 * (((2.25 * fSlow467) - (1.3333333333333333 * fSlow465)) * fSlow36)); + double fSlow469 = (2.5 * (fSlow464 * fSlow58)); + double fSlow470 = (2.25 * (fSlow467 * fSlow68)); + double fSlow471 = (fSlow393 - fSlow373); + double fSlow472 = mydsp_faustpower2_f(fSlow471); + double fSlow473 = ((3.0 * fSlow472) + -1.0); + double fSlow474 = ((2.5 * fSlow473) + -2.0); + double fSlow475 = (2.333333333333333 * (fSlow474 * fSlow19)); + double fSlow476 = ((2.333333333333333 * (fSlow472 * fSlow474)) - (1.5 * fSlow473)); + double fSlow477 = (2.2000000000000002 * (((2.25 * fSlow476) - (1.3333333333333333 * fSlow474)) * fSlow36)); + double fSlow478 = (2.5 * (fSlow473 * fSlow58)); + double fSlow479 = (2.25 * (fSlow476 * fSlow68)); + double fSlow480 = (fSlow403 - fSlow373); + double fSlow481 = mydsp_faustpower2_f(fSlow480); + double fSlow482 = ((3.0 * fSlow481) + -1.0); + double fSlow483 = ((2.5 * fSlow482) + -2.0); + double fSlow484 = (2.333333333333333 * (fSlow483 * fSlow19)); + double fSlow485 = ((2.333333333333333 * (fSlow481 * fSlow483)) - (1.5 * fSlow482)); + double fSlow486 = (2.2000000000000002 * (((2.25 * fSlow485) - (1.3333333333333333 * fSlow483)) * fSlow36)); + double fSlow487 = (2.5 * (fSlow482 * fSlow58)); + double fSlow488 = (2.25 * (fSlow485 * fSlow68)); + double fSlow489 = (fSlow413 - fSlow373); + double fSlow490 = mydsp_faustpower2_f(fSlow489); + double fSlow491 = ((3.0 * fSlow490) + -1.0); + double fSlow492 = ((2.5 * fSlow491) + -2.0); + double fSlow493 = (2.333333333333333 * (fSlow492 * fSlow19)); + double fSlow494 = ((2.333333333333333 * (fSlow490 * fSlow492)) - (1.5 * fSlow491)); + double fSlow495 = (2.2000000000000002 * (((2.25 * fSlow494) - (1.3333333333333333 * fSlow492)) * fSlow36)); + double fSlow496 = (2.5 * (fSlow491 * fSlow58)); + double fSlow497 = (2.25 * (fSlow494 * fSlow68)); + double fSlow498 = (fSlow423 - fSlow373); + double fSlow499 = mydsp_faustpower2_f(fSlow498); + double fSlow500 = ((3.0 * fSlow499) + -1.0); + double fSlow501 = ((2.5 * fSlow500) + -2.0); + double fSlow502 = (2.333333333333333 * (fSlow501 * fSlow19)); + double fSlow503 = ((2.333333333333333 * (fSlow499 * fSlow501)) - (1.5 * fSlow500)); + double fSlow504 = (2.2000000000000002 * (((2.25 * fSlow503) - (1.3333333333333333 * fSlow501)) * fSlow36)); + double fSlow505 = (2.5 * (fSlow500 * fSlow58)); + double fSlow506 = (2.25 * (fSlow503 * fSlow68)); + double fSlow507 = (fSlow433 - fSlow373); + double fSlow508 = mydsp_faustpower2_f(fSlow507); + double fSlow509 = ((3.0 * fSlow508) + -1.0); + double fSlow510 = ((2.5 * fSlow509) + -2.0); + double fSlow511 = (2.333333333333333 * (fSlow510 * fSlow19)); + double fSlow512 = ((2.333333333333333 * (fSlow508 * fSlow510)) - (1.5 * fSlow509)); + double fSlow513 = (2.2000000000000002 * (((2.25 * fSlow512) - (1.3333333333333333 * fSlow510)) * fSlow36)); + double fSlow514 = (2.5 * (fSlow509 * fSlow58)); + double fSlow515 = (2.25 * (fSlow512 * fSlow68)); + double fSlow516 = (fSlow443 - fSlow373); + double fSlow517 = mydsp_faustpower2_f(fSlow516); + double fSlow518 = ((3.0 * fSlow517) + -1.0); + double fSlow519 = ((2.5 * fSlow518) + -2.0); + double fSlow520 = (2.333333333333333 * (fSlow519 * fSlow19)); + double fSlow521 = ((2.333333333333333 * (fSlow517 * fSlow519)) - (1.5 * fSlow518)); + double fSlow522 = (2.2000000000000002 * (((2.25 * fSlow521) - (1.3333333333333333 * fSlow519)) * fSlow36)); + double fSlow523 = (2.5 * (fSlow518 * fSlow58)); + double fSlow524 = (2.25 * (fSlow521 * fSlow68)); + double fSlow525 = (fSlow331 - fSlow332); + double fSlow526 = mydsp_faustpower2_f(fSlow525); + double fSlow527 = ((3.0 * fSlow526) + -1.0); + double fSlow528 = ((2.5 * fSlow527) + -2.0); + double fSlow529 = (2.333333333333333 * (fSlow528 * fSlow19)); + double fSlow530 = ((2.333333333333333 * (fSlow526 * fSlow528)) - (1.5 * fSlow527)); + double fSlow531 = (2.2000000000000002 * (((2.25 * fSlow530) - (1.3333333333333333 * fSlow528)) * fSlow36)); + double fSlow532 = (2.5 * (fSlow527 * fSlow58)); + double fSlow533 = (2.25 * (fSlow530 * fSlow68)); + double fSlow534 = (fSlow342 - fSlow332); + double fSlow535 = mydsp_faustpower2_f(fSlow534); + double fSlow536 = ((3.0 * fSlow535) + -1.0); + double fSlow537 = ((2.5 * fSlow536) + -2.0); + double fSlow538 = (2.333333333333333 * (fSlow537 * fSlow19)); + double fSlow539 = ((2.333333333333333 * (fSlow535 * fSlow537)) - (1.5 * fSlow536)); + double fSlow540 = (2.2000000000000002 * (((2.25 * fSlow539) - (1.3333333333333333 * fSlow537)) * fSlow36)); + double fSlow541 = (2.5 * (fSlow536 * fSlow58)); + double fSlow542 = (2.25 * (fSlow539 * fSlow68)); + double fSlow543 = (fSlow352 - fSlow332); + double fSlow544 = mydsp_faustpower2_f(fSlow543); + double fSlow545 = ((3.0 * fSlow544) + -1.0); + double fSlow546 = ((2.5 * fSlow545) + -2.0); + double fSlow547 = (2.333333333333333 * (fSlow546 * fSlow19)); + double fSlow548 = ((2.333333333333333 * (fSlow544 * fSlow546)) - (1.5 * fSlow545)); + double fSlow549 = (2.2000000000000002 * (((2.25 * fSlow548) - (1.3333333333333333 * fSlow546)) * fSlow36)); + double fSlow550 = (2.5 * (fSlow545 * fSlow58)); + double fSlow551 = (2.25 * (fSlow548 * fSlow68)); + double fSlow552 = (fSlow362 - fSlow332); + double fSlow553 = mydsp_faustpower2_f(fSlow552); + double fSlow554 = ((3.0 * fSlow553) + -1.0); + double fSlow555 = ((2.5 * fSlow554) + -2.0); + double fSlow556 = (2.333333333333333 * (fSlow555 * fSlow19)); + double fSlow557 = ((2.333333333333333 * (fSlow553 * fSlow555)) - (1.5 * fSlow554)); + double fSlow558 = (2.2000000000000002 * (((2.25 * fSlow557) - (1.3333333333333333 * fSlow555)) * fSlow36)); + double fSlow559 = (2.5 * (fSlow554 * fSlow58)); + double fSlow560 = (2.25 * (fSlow557 * fSlow68)); for (int i = 0; (i < count); i = (i + 1)) { - fRec3[0] = (fSlow19 + (0.999 * fRec3[1])); + fRec3[0] = (fSlow12 + (0.999 * fRec3[1])); double fTemp0 = (fRec3[0] * double(input0[i])); fRec4[0] = (fRec4[1] + fRec2[1]); - fRec2[0] = (fSlow16 * ((fSlow18 * fTemp0) - (fSlow20 * fRec4[0]))); + fRec2[0] = (fSlow9 * ((fSlow11 * fTemp0) - (fSlow13 * fRec4[0]))); fRec1[0] = (fRec2[0] + fRec1[1]); - double fTemp1 = (fSlow22 * fTemp0); + double fTemp1 = (fSlow15 * fTemp0); fRec6[0] = (fRec6[1] + fRec5[1]); - fRec5[0] = (fSlow16 * (fTemp1 - (fSlow20 * fRec6[0]))); - double fTemp2 = ((fSlow13 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0])); - double fTemp3 = (fSlow9 * fTemp2); + fRec5[0] = (fSlow9 * (fTemp1 - (fSlow13 * fRec6[0]))); + double fTemp2 = (fSlow2 * ((fSlow6 * (fRec1[0] - fRec2[0])) + (fRec2[0] + fRec5[0]))); fRec10[0] = (fRec10[1] + fRec9[1]); fRec11[0] = (fRec11[1] + fRec10[1]); - fRec9[0] = (fSlow30 * ((fSlow33 * fTemp0) - ((fSlow35 * fRec10[0]) + (fSlow34 * fRec11[0])))); + fRec9[0] = (fSlow25 * ((fSlow28 * fTemp0) - ((fSlow30 * fRec10[0]) + (fSlow29 * fRec11[0])))); fRec12[0] = (fRec9[0] + fRec12[1]); - double fTemp4 = (fRec12[0] - fRec9[0]); - fVec0[0] = fTemp4; + double fTemp3 = (fRec12[0] - fRec9[0]); + fVec0[0] = fTemp3; fRec13[0] = (fRec13[1] + fVec0[1]); fRec14[0] = (fRec14[1] + fRec8[1]); - fRec8[0] = (fSlow28 * ((fSlow26 * (fRec9[0] + (fSlow36 * ((fSlow38 * fTemp4) + (fSlow37 * fRec13[0]))))) - (fSlow39 * fRec14[0]))); + fRec8[0] = (fSlow23 * ((fSlow21 * (fRec9[0] + (fSlow31 * ((fSlow33 * fTemp3) + (fSlow32 * fRec13[0]))))) - (fSlow34 * fRec14[0]))); fRec7[0] = (fRec8[0] + fRec7[1]); fRec17[0] = (fRec17[1] + fRec16[1]); fRec18[0] = (fRec18[1] + fRec17[1]); - fRec16[0] = (fSlow30 * (fTemp1 - ((fSlow35 * fRec17[0]) + (fSlow34 * fRec18[0])))); + fRec16[0] = (fSlow25 * (fTemp1 - ((fSlow30 * fRec17[0]) + (fSlow29 * fRec18[0])))); fRec19[0] = (fRec19[1] + fRec15[1]); - fRec15[0] = (fSlow28 * (fRec16[0] - (fSlow39 * fRec19[0]))); - double fTemp5 = ((fSlow27 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); + fRec15[0] = (fSlow23 * (fRec16[0] - (fSlow34 * fRec19[0]))); + double fTemp4 = ((fSlow22 * (fRec7[0] - fRec8[0])) + (fRec8[0] + fRec15[0])); fRec24[0] = (fRec24[1] + fRec23[1]); fRec25[0] = (fRec25[1] + fRec24[1]); - fRec23[0] = (fSlow47 * ((fSlow49 * fTemp0) - ((fSlow51 * fRec24[0]) + (fSlow50 * fRec25[0])))); + fRec23[0] = (fSlow43 * ((fSlow45 * fTemp0) - ((fSlow47 * fRec24[0]) + (fSlow46 * fRec25[0])))); fRec26[0] = (fRec23[0] + fRec26[1]); - double fTemp6 = (fRec26[0] - fRec23[0]); - fVec1[0] = fTemp6; + double fTemp5 = (fRec26[0] - fRec23[0]); + fVec1[0] = fTemp5; fRec27[0] = (fRec27[1] + fVec1[1]); fRec28[0] = (fRec28[1] + fRec22[1]); fRec29[0] = (fRec29[1] + fRec28[1]); - fRec22[0] = (fSlow45 * ((fSlow46 * (fRec23[0] + (fSlow52 * ((fSlow54 * fTemp6) + (fSlow53 * fRec27[0]))))) - ((fSlow56 * fRec28[0]) + (fSlow55 * fRec29[0])))); + fRec22[0] = (fSlow41 * ((fSlow42 * (fRec23[0] + (fSlow48 * ((fSlow50 * fTemp5) + (fSlow49 * fRec27[0]))))) - ((fSlow52 * fRec28[0]) + (fSlow51 * fRec29[0])))); fRec30[0] = (fRec22[0] + fRec30[1]); - double fTemp7 = (fRec30[0] - fRec22[0]); - fVec2[0] = fTemp7; + double fTemp6 = (fRec30[0] - fRec22[0]); + fVec2[0] = fTemp6; fRec31[0] = (fRec31[1] + fVec2[1]); fRec32[0] = (fRec32[1] + fRec21[1]); - fRec21[0] = (fSlow44 * ((fSlow42 * (fRec22[0] + (fSlow57 * ((fSlow59 * fTemp7) + (fSlow58 * fRec31[0]))))) - (fSlow60 * fRec32[0]))); + fRec21[0] = (fSlow40 * ((fSlow38 * (fRec22[0] + (fSlow53 * ((fSlow55 * fTemp6) + (fSlow54 * fRec31[0]))))) - (fSlow56 * fRec32[0]))); fRec20[0] = (fRec21[0] + fRec20[1]); fRec36[0] = (fRec36[1] + fRec35[1]); fRec37[0] = (fRec37[1] + fRec36[1]); - fRec35[0] = (fSlow47 * (fTemp1 - ((fSlow51 * fRec36[0]) + (fSlow50 * fRec37[0])))); + fRec35[0] = (fSlow43 * (fTemp1 - ((fSlow47 * fRec36[0]) + (fSlow46 * fRec37[0])))); fRec38[0] = (fRec38[1] + fRec34[1]); fRec39[0] = (fRec39[1] + fRec38[1]); - fRec34[0] = (fSlow45 * (fRec35[0] - ((fSlow56 * fRec38[0]) + (fSlow55 * fRec39[0])))); + fRec34[0] = (fSlow41 * (fRec35[0] - ((fSlow52 * fRec38[0]) + (fSlow51 * fRec39[0])))); fRec40[0] = (fRec40[1] + fRec33[1]); - fRec33[0] = (fSlow44 * (fRec34[0] - (fSlow60 * fRec40[0]))); - double fTemp8 = ((fSlow43 * (fRec20[0] - fRec21[0])) + (fRec21[0] + fRec33[0])); - double fTemp9 = (fSlow61 * fTemp0); + fRec33[0] = (fSlow40 * (fRec34[0] - (fSlow56 * fRec40[0]))); + double fTemp7 = ((fSlow39 * (fRec20[0] - fRec21[0])) + (fRec21[0] + fRec33[0])); + double fTemp8 = (fSlow57 * fTemp0); fRec43[0] = (fRec43[1] + fRec42[1]); fRec44[0] = (fRec44[1] + fRec43[1]); - fRec42[0] = (fSlow68 * ((fSlow69 * fTemp0) - ((fSlow71 * fRec43[0]) + (fSlow70 * fRec44[0])))); + fRec42[0] = (fSlow64 * ((fSlow65 * fTemp0) - ((fSlow67 * fRec43[0]) + (fSlow66 * fRec44[0])))); fRec41[0] = (fRec42[0] + fRec41[1]); - double fTemp10 = (fRec41[0] - fRec42[0]); - fVec3[0] = fTemp10; + double fTemp9 = (fRec41[0] - fRec42[0]); + fVec3[0] = fTemp9; fRec45[0] = (fRec45[1] + fVec3[1]); fRec47[0] = (fRec47[1] + fRec46[1]); fRec48[0] = (fRec48[1] + fRec47[1]); - fRec46[0] = (fSlow68 * (fTemp1 - ((fSlow71 * fRec47[0]) + (fSlow70 * fRec48[0])))); - double fTemp11 = ((fSlow65 * ((fSlow67 * fTemp10) + (fSlow66 * fRec45[0]))) + (fRec42[0] + fRec46[0])); + fRec46[0] = (fSlow64 * (fTemp1 - ((fSlow67 * fRec47[0]) + (fSlow66 * fRec48[0])))); + double fTemp10 = ((fSlow61 * ((fSlow63 * fTemp9) + (fSlow62 * fRec45[0]))) + (fRec42[0] + fRec46[0])); fRec52[0] = (fRec52[1] + fRec51[1]); fRec53[0] = (fRec53[1] + fRec52[1]); - fRec51[0] = (fSlow79 * ((fSlow81 * fTemp0) - ((fSlow83 * fRec52[0]) + (fSlow82 * fRec53[0])))); + fRec51[0] = (fSlow75 * ((fSlow77 * fTemp0) - ((fSlow79 * fRec52[0]) + (fSlow78 * fRec53[0])))); fRec54[0] = (fRec51[0] + fRec54[1]); - double fTemp12 = (fRec54[0] - fRec51[0]); - fVec4[0] = fTemp12; + double fTemp11 = (fRec54[0] - fRec51[0]); + fVec4[0] = fTemp11; fRec55[0] = (fRec55[1] + fVec4[1]); fRec56[0] = (fRec56[1] + fRec50[1]); fRec57[0] = (fRec57[1] + fRec56[1]); - fRec50[0] = (fSlow78 * ((fSlow74 * (fRec51[0] + (fSlow84 * ((fSlow86 * fTemp12) + (fSlow85 * fRec55[0]))))) - ((fSlow88 * fRec56[0]) + (fSlow87 * fRec57[0])))); + fRec50[0] = (fSlow74 * ((fSlow70 * (fRec51[0] + (fSlow80 * ((fSlow82 * fTemp11) + (fSlow81 * fRec55[0]))))) - ((fSlow84 * fRec56[0]) + (fSlow83 * fRec57[0])))); fRec49[0] = (fRec50[0] + fRec49[1]); - double fTemp13 = (fRec49[0] - fRec50[0]); - fVec5[0] = fTemp13; + double fTemp12 = (fRec49[0] - fRec50[0]); + fVec5[0] = fTemp12; fRec58[0] = (fRec58[1] + fVec5[1]); fRec61[0] = (fRec61[1] + fRec60[1]); fRec62[0] = (fRec62[1] + fRec61[1]); - fRec60[0] = (fSlow79 * (fTemp1 - ((fSlow83 * fRec61[0]) + (fSlow82 * fRec62[0])))); + fRec60[0] = (fSlow75 * (fTemp1 - ((fSlow79 * fRec61[0]) + (fSlow78 * fRec62[0])))); fRec63[0] = (fRec63[1] + fRec59[1]); fRec64[0] = (fRec64[1] + fRec63[1]); - fRec59[0] = (fSlow78 * (fRec60[0] - ((fSlow88 * fRec63[0]) + (fSlow87 * fRec64[0])))); - double fTemp14 = ((fSlow75 * ((fSlow77 * fTemp13) + (fSlow76 * fRec58[0]))) + (fRec50[0] + fRec59[0])); - double fTemp15 = (0.012698412698412698 * ((fSlow7 * ((fTemp3 + (fSlow25 * fTemp5)) + (fSlow41 * fTemp8))) + ((fTemp9 + (fSlow63 * fTemp11)) + (fSlow73 * fTemp14)))); - fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); + fRec59[0] = (fSlow74 * (fRec60[0] - ((fSlow84 * fRec63[0]) + (fSlow83 * fRec64[0])))); + double fTemp13 = ((fSlow71 * ((fSlow73 * fTemp12) + (fSlow72 * fRec58[0]))) + (fRec50[0] + fRec59[0])); + double fTemp14 = (0.012698412698412698 * ((fSlow1 * ((fTemp2 + (fSlow20 * fTemp4)) + (fSlow37 * fTemp7))) + ((fTemp8 + (fSlow59 * fTemp10)) + (fSlow69 * fTemp13)))); + fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); - output0[i] = FAUSTFLOAT(fTemp15); - double fTemp16 = (0.012698412698412698 * (((((fTemp9 + (fSlow89 * fTemp2)) + (fSlow91 * fTemp11)) + (fSlow93 * fTemp5)) + (fSlow94 * fTemp14)) + (fSlow95 * fTemp8))); - fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + output0[i] = FAUSTFLOAT(fTemp14); + double fTemp15 = (0.012698412698412698 * ((fSlow88 * ((fTemp2 + (fSlow93 * fTemp4)) + (fSlow95 * fTemp7))) + ((fTemp8 + (fSlow96 * fTemp10)) + (fSlow97 * fTemp13)))); + fRec65[0] = max((fRec65[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp15)))))); fVbargraph1 = FAUSTFLOAT(fRec65[0]); - output1[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = (0.012698412698412698 * (((((fTemp9 + (fSlow97 * fTemp2)) + (fSlow100 * fTemp11)) + (fSlow102 * fTemp5)) + (fSlow103 * fTemp14)) + (fSlow104 * fTemp8))); - fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + output1[i] = FAUSTFLOAT(fTemp15); + double fTemp16 = (0.012698412698412698 * ((fSlow99 * ((fTemp2 + (fSlow103 * fTemp4)) + (fSlow105 * fTemp7))) + ((fTemp8 + (fSlow106 * fTemp10)) + (fSlow107 * fTemp13)))); + fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph2 = FAUSTFLOAT(fRec66[0]); - output2[i] = FAUSTFLOAT(fTemp17); - double fTemp18 = (0.012698412698412698 * (((((fTemp9 + (fSlow106 * fTemp2)) + (fSlow109 * fTemp11)) + (fSlow111 * fTemp5)) + (fSlow112 * fTemp14)) + (fSlow113 * fTemp8))); - fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + output2[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (0.012698412698412698 * ((fSlow109 * ((fTemp2 + (fSlow113 * fTemp4)) + (fSlow115 * fTemp7))) + ((fTemp8 + (fSlow116 * fTemp10)) + (fSlow117 * fTemp13)))); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fVbargraph3 = FAUSTFLOAT(fRec67[0]); - output3[i] = FAUSTFLOAT(fTemp18); - double fTemp19 = (0.012698412698412698 * (((((fTemp9 + (fSlow115 * fTemp2)) + (fSlow118 * fTemp11)) + (fSlow120 * fTemp5)) + (fSlow121 * fTemp14)) + (fSlow122 * fTemp8))); - fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + output3[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (0.012698412698412698 * ((fSlow119 * ((fTemp2 + (fSlow123 * fTemp4)) + (fSlow125 * fTemp7))) + ((fTemp8 + (fSlow126 * fTemp10)) + (fSlow127 * fTemp13)))); + fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); fVbargraph4 = FAUSTFLOAT(fRec68[0]); - output4[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (0.012698412698412698 * ((fSlow123 * ((fTemp3 + (fSlow125 * fTemp5)) + (fSlow126 * fTemp8))) + ((fTemp9 + (fSlow127 * fTemp11)) + (fSlow128 * fTemp14)))); - fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + output4[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (0.012698412698412698 * ((fSlow128 * ((fTemp2 + (fSlow132 * fTemp4)) + (fSlow134 * fTemp7))) + ((fTemp8 + (fSlow135 * fTemp10)) + (fSlow136 * fTemp13)))); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); fVbargraph5 = FAUSTFLOAT(fRec69[0]); - output5[i] = FAUSTFLOAT(fTemp20); - double fTemp21 = (0.022574955908289243 * ((fSlow131 * ((fTemp3 + (fSlow133 * fTemp5)) + (fSlow134 * fTemp8))) + ((fTemp9 + (fSlow135 * fTemp11)) + (fSlow136 * fTemp14)))); - fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + output5[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (0.022574955908289243 * ((fSlow139 * ((fTemp2 + (fSlow143 * fTemp4)) + (fSlow145 * fTemp7))) + ((fTemp8 + (fSlow146 * fTemp10)) + (fSlow147 * fTemp13)))); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); fVbargraph6 = FAUSTFLOAT(fRec70[0]); - output6[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (0.022574955908289243 * ((fSlow138 * ((fTemp3 + (fSlow140 * fTemp5)) + (fSlow141 * fTemp8))) + ((fTemp9 + (fSlow142 * fTemp11)) + (fSlow143 * fTemp14)))); - fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + output6[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (0.022574955908289243 * ((fSlow149 * ((fTemp2 + (fSlow153 * fTemp4)) + (fSlow155 * fTemp7))) + ((fTemp8 + (fSlow156 * fTemp10)) + (fSlow157 * fTemp13)))); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); fVbargraph7 = FAUSTFLOAT(fRec71[0]); - output7[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (0.022574955908289243 * ((fSlow145 * ((fTemp3 + (fSlow147 * fTemp5)) + (fSlow148 * fTemp8))) + ((fTemp9 + (fSlow149 * fTemp11)) + (fSlow150 * fTemp14)))); - fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); + output7[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (0.022574955908289243 * ((fSlow159 * ((fTemp2 + (fSlow163 * fTemp4)) + (fSlow165 * fTemp7))) + ((fTemp8 + (fSlow166 * fTemp10)) + (fSlow167 * fTemp13)))); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); fVbargraph8 = FAUSTFLOAT(fRec72[0]); - output8[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (0.022574955908289243 * ((fSlow152 * ((fTemp3 + (fSlow154 * fTemp5)) + (fSlow155 * fTemp8))) + ((fTemp9 + (fSlow156 * fTemp11)) + (fSlow157 * fTemp14)))); - fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); + output8[i] = FAUSTFLOAT(fTemp22); + double fTemp23 = (0.022574955908289243 * ((fSlow169 * ((fTemp2 + (fSlow173 * fTemp4)) + (fSlow175 * fTemp7))) + ((fTemp8 + (fSlow176 * fTemp10)) + (fSlow177 * fTemp13)))); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); fVbargraph9 = FAUSTFLOAT(fRec73[0]); - output9[i] = FAUSTFLOAT(fTemp24); - double fTemp25 = (0.022574955908289243 * (((((fTemp9 + (fSlow159 * fTemp2)) + (fSlow162 * fTemp11)) + (fSlow164 * fTemp5)) + (fSlow165 * fTemp14)) + (fSlow166 * fTemp8))); - fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); + output9[i] = FAUSTFLOAT(fTemp23); + double fTemp24 = (0.022574955908289243 * ((fSlow179 * ((fTemp2 + (fSlow183 * fTemp4)) + (fSlow185 * fTemp7))) + ((fTemp8 + (fSlow186 * fTemp10)) + (fSlow187 * fTemp13)))); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); fVbargraph10 = FAUSTFLOAT(fRec74[0]); - output10[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (0.022574955908289243 * (((((fTemp9 + (fSlow168 * fTemp2)) + (fSlow171 * fTemp11)) + (fSlow173 * fTemp5)) + (fSlow174 * fTemp14)) + (fSlow175 * fTemp8))); - fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + output10[i] = FAUSTFLOAT(fTemp24); + double fTemp25 = (0.022574955908289243 * ((fSlow189 * ((fTemp2 + (fSlow193 * fTemp4)) + (fSlow195 * fTemp7))) + ((fTemp8 + (fSlow196 * fTemp10)) + (fSlow197 * fTemp13)))); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); fVbargraph11 = FAUSTFLOAT(fRec75[0]); - output11[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = (0.022574955908289243 * (((((fTemp9 + (fSlow177 * fTemp2)) + (fSlow180 * fTemp11)) + (fSlow182 * fTemp5)) + (fSlow183 * fTemp14)) + (fSlow184 * fTemp8))); - fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + output11[i] = FAUSTFLOAT(fTemp25); + double fTemp26 = (0.022574955908289243 * ((fSlow199 * ((fTemp2 + (fSlow203 * fTemp4)) + (fSlow205 * fTemp7))) + ((fTemp8 + (fSlow206 * fTemp10)) + (fSlow207 * fTemp13)))); + fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); fVbargraph12 = FAUSTFLOAT(fRec76[0]); - output12[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (0.022574955908289243 * (((((fTemp9 + (fSlow186 * fTemp2)) + (fSlow189 * fTemp11)) + (fSlow191 * fTemp5)) + (fSlow192 * fTemp14)) + (fSlow193 * fTemp8))); - fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + output12[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (0.022574955908289243 * ((fSlow209 * ((fTemp2 + (fSlow213 * fTemp4)) + (fSlow215 * fTemp7))) + ((fTemp8 + (fSlow216 * fTemp10)) + (fSlow217 * fTemp13)))); + fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); fVbargraph13 = FAUSTFLOAT(fRec77[0]); - output13[i] = FAUSTFLOAT(fTemp28); - double fTemp29 = (0.022574955908289243 * ((fSlow194 * ((fTemp3 + (fSlow196 * fTemp5)) + (fSlow197 * fTemp8))) + ((fTemp9 + (fSlow198 * fTemp11)) + (fSlow199 * fTemp14)))); - fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + output13[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (0.022574955908289243 * ((fSlow218 * ((fTemp2 + (fSlow222 * fTemp4)) + (fSlow224 * fTemp7))) + ((fTemp8 + (fSlow225 * fTemp10)) + (fSlow226 * fTemp13)))); + fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); fVbargraph14 = FAUSTFLOAT(fRec78[0]); - output14[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = (0.022574955908289243 * ((fSlow200 * ((fTemp3 + (fSlow202 * fTemp5)) + (fSlow203 * fTemp8))) + ((fTemp9 + (fSlow204 * fTemp11)) + (fSlow205 * fTemp14)))); - fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + output14[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (0.022574955908289243 * ((fSlow227 * ((fTemp2 + (fSlow231 * fTemp4)) + (fSlow233 * fTemp7))) + ((fTemp8 + (fSlow234 * fTemp10)) + (fSlow235 * fTemp13)))); + fRec79[0] = max((fRec79[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); fVbargraph15 = FAUSTFLOAT(fRec79[0]); - output15[i] = FAUSTFLOAT(fTemp30); - double fTemp31 = (0.022574955908289243 * ((fSlow206 * ((fTemp3 + (fSlow208 * fTemp5)) + (fSlow209 * fTemp8))) + ((fSlow210 * fTemp14) + (fTemp9 + (fSlow211 * fTemp11))))); - fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + output15[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (0.022574955908289243 * ((fSlow236 * ((fTemp2 + (fSlow240 * fTemp4)) + (fSlow242 * fTemp7))) + ((fTemp8 + (fSlow243 * fTemp10)) + (fSlow244 * fTemp13)))); + fRec80[0] = max((fRec80[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); fVbargraph16 = FAUSTFLOAT(fRec80[0]); - output16[i] = FAUSTFLOAT(fTemp31); - double fTemp32 = (0.022574955908289243 * ((fSlow212 * ((fTemp3 + (fSlow214 * fTemp5)) + (fSlow215 * fTemp8))) + ((fTemp9 + (fSlow216 * fTemp11)) + (fSlow217 * fTemp14)))); - fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + output16[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (0.022574955908289243 * ((fSlow245 * ((fTemp2 + (fSlow249 * fTemp4)) + (fSlow251 * fTemp7))) + ((fTemp8 + (fSlow252 * fTemp10)) + (fSlow253 * fTemp13)))); + fRec81[0] = max((fRec81[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); fVbargraph17 = FAUSTFLOAT(fRec81[0]); - output17[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = (0.021093750000000001 * ((fSlow220 * ((fTemp3 + (fSlow222 * fTemp5)) + (fSlow223 * fTemp8))) + ((fTemp9 + (fSlow224 * fTemp11)) + (fSlow225 * fTemp14)))); - fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + output17[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (0.021093750000000001 * ((fSlow256 * ((fTemp2 + (fSlow260 * fTemp4)) + (fSlow262 * fTemp7))) + ((fTemp8 + (fSlow263 * fTemp10)) + (fSlow264 * fTemp13)))); + fRec82[0] = max((fRec82[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); fVbargraph18 = FAUSTFLOAT(fRec82[0]); - output18[i] = FAUSTFLOAT(fTemp33); - double fTemp34 = (0.021093750000000001 * ((fSlow227 * ((fTemp3 + (fSlow229 * fTemp5)) + (fSlow230 * fTemp8))) + ((fTemp9 + (fSlow231 * fTemp11)) + (fSlow232 * fTemp14)))); - fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + output18[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (0.021093750000000001 * ((fSlow266 * ((fTemp2 + (fSlow270 * fTemp4)) + (fSlow272 * fTemp7))) + ((fTemp8 + (fSlow273 * fTemp10)) + (fSlow274 * fTemp13)))); + fRec83[0] = max((fRec83[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); fVbargraph19 = FAUSTFLOAT(fRec83[0]); - output19[i] = FAUSTFLOAT(fTemp34); - double fTemp35 = (0.021093750000000001 * ((fSlow234 * ((fTemp3 + (fSlow236 * fTemp5)) + (fSlow237 * fTemp8))) + ((fTemp9 + (fSlow238 * fTemp11)) + (fSlow239 * fTemp14)))); - fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); + output19[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (0.021093750000000001 * ((fSlow276 * ((fTemp2 + (fSlow280 * fTemp4)) + (fSlow282 * fTemp7))) + ((fTemp8 + (fSlow283 * fTemp10)) + (fSlow284 * fTemp13)))); + fRec84[0] = max((fRec84[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); fVbargraph20 = FAUSTFLOAT(fRec84[0]); - output20[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (0.021093750000000001 * ((fSlow241 * ((fTemp3 + (fSlow243 * fTemp5)) + (fSlow244 * fTemp8))) + ((fTemp9 + (fSlow245 * fTemp11)) + (fSlow246 * fTemp14)))); - fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); + output20[i] = FAUSTFLOAT(fTemp34); + double fTemp35 = (0.021093750000000001 * ((fSlow286 * ((fTemp2 + (fSlow290 * fTemp4)) + (fSlow292 * fTemp7))) + ((fTemp8 + (fSlow293 * fTemp10)) + (fSlow294 * fTemp13)))); + fRec85[0] = max((fRec85[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); fVbargraph21 = FAUSTFLOAT(fRec85[0]); - output21[i] = FAUSTFLOAT(fTemp36); - double fTemp37 = (0.021093750000000001 * ((fSlow247 * ((fTemp3 + (fSlow249 * fTemp5)) + (fSlow250 * fTemp8))) + ((fTemp9 + (fSlow251 * fTemp11)) + (fSlow252 * fTemp14)))); - fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); + output21[i] = FAUSTFLOAT(fTemp35); + double fTemp36 = (0.021093750000000001 * ((fSlow295 * ((fTemp2 + (fSlow299 * fTemp4)) + (fSlow301 * fTemp7))) + ((fTemp8 + (fSlow302 * fTemp10)) + (fSlow303 * fTemp13)))); + fRec86[0] = max((fRec86[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp36)))))); fVbargraph22 = FAUSTFLOAT(fRec86[0]); - output22[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = (0.021093750000000001 * ((fSlow253 * ((fTemp3 + (fSlow255 * fTemp5)) + (fSlow256 * fTemp8))) + ((fTemp9 + (fSlow257 * fTemp11)) + (fSlow258 * fTemp14)))); - fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + output22[i] = FAUSTFLOAT(fTemp36); + double fTemp37 = (0.021093750000000001 * ((fSlow304 * ((fTemp2 + (fSlow308 * fTemp4)) + (fSlow310 * fTemp7))) + ((fTemp8 + (fSlow311 * fTemp10)) + (fSlow312 * fTemp13)))); + fRec87[0] = max((fRec87[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); fVbargraph23 = FAUSTFLOAT(fRec87[0]); - output23[i] = FAUSTFLOAT(fTemp38); - double fTemp39 = (0.021093750000000001 * ((fSlow259 * ((fTemp3 + (fSlow261 * fTemp5)) + (fSlow262 * fTemp8))) + ((fTemp9 + (fSlow263 * fTemp11)) + (fSlow264 * fTemp14)))); - fRec88[0] = max((fRec88[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + output23[i] = FAUSTFLOAT(fTemp37); + double fTemp38 = (0.021093750000000001 * ((fSlow313 * ((fTemp2 + (fSlow317 * fTemp4)) + (fSlow319 * fTemp7))) + ((fTemp8 + (fSlow320 * fTemp10)) + (fSlow321 * fTemp13)))); + fRec88[0] = max((fRec88[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); fVbargraph24 = FAUSTFLOAT(fRec88[0]); - output24[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (0.021093750000000001 * ((fSlow265 * ((fTemp3 + (fSlow267 * fTemp5)) + (fSlow268 * fTemp8))) + ((fTemp9 + (fSlow269 * fTemp11)) + (fSlow270 * fTemp14)))); - fRec89[0] = max((fRec89[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + output24[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (0.021093750000000001 * ((fSlow322 * ((fTemp2 + (fSlow326 * fTemp4)) + (fSlow328 * fTemp7))) + ((fTemp8 + (fSlow329 * fTemp10)) + (fSlow330 * fTemp13)))); + fRec89[0] = max((fRec89[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); fVbargraph25 = FAUSTFLOAT(fRec89[0]); - output25[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (0.02017333553791887 * ((fSlow273 * ((fTemp3 + (fSlow275 * fTemp5)) + (fSlow276 * fTemp8))) + ((fTemp9 + (fSlow277 * fTemp11)) + (fSlow278 * fTemp14)))); - fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + output25[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (0.02017333553791887 * ((fSlow333 * ((fTemp2 + (fSlow337 * fTemp4)) + (fSlow339 * fTemp7))) + ((fTemp8 + (fSlow340 * fTemp10)) + (fSlow341 * fTemp13)))); + fRec90[0] = max((fRec90[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); fVbargraph26 = FAUSTFLOAT(fRec90[0]); - output26[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (0.02017333553791887 * ((fSlow280 * ((fTemp3 + (fSlow282 * fTemp5)) + (fSlow283 * fTemp8))) + ((fTemp9 + (fSlow284 * fTemp11)) + (fSlow285 * fTemp14)))); - fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + output26[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (0.02017333553791887 * ((fSlow343 * ((fTemp2 + (fSlow347 * fTemp4)) + (fSlow349 * fTemp7))) + ((fTemp8 + (fSlow350 * fTemp10)) + (fSlow351 * fTemp13)))); + fRec91[0] = max((fRec91[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); fVbargraph27 = FAUSTFLOAT(fRec91[0]); - output27[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (0.02017333553791887 * ((fSlow287 * ((fTemp3 + (fSlow289 * fTemp5)) + (fSlow290 * fTemp8))) + ((fTemp9 + (fSlow291 * fTemp11)) + (fSlow292 * fTemp14)))); - fRec92[0] = max((fRec92[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + output27[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (0.02017333553791887 * ((fSlow353 * ((fTemp2 + (fSlow357 * fTemp4)) + (fSlow359 * fTemp7))) + ((fTemp8 + (fSlow360 * fTemp10)) + (fSlow361 * fTemp13)))); + fRec92[0] = max((fRec92[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); fVbargraph28 = FAUSTFLOAT(fRec92[0]); - output28[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = (0.02017333553791887 * ((fSlow294 * ((fTemp3 + (fSlow296 * fTemp5)) + (fSlow297 * fTemp8))) + ((fTemp9 + (fSlow298 * fTemp11)) + (fSlow299 * fTemp14)))); - fRec93[0] = max((fRec93[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + output28[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (0.02017333553791887 * ((fSlow363 * ((fTemp2 + (fSlow367 * fTemp4)) + (fSlow369 * fTemp7))) + ((fTemp8 + (fSlow370 * fTemp10)) + (fSlow371 * fTemp13)))); + fRec93[0] = max((fRec93[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); fVbargraph29 = FAUSTFLOAT(fRec93[0]); - output29[i] = FAUSTFLOAT(fTemp44); - double fTemp45 = (0.02017333553791887 * ((fSlow302 * ((fTemp3 + (fSlow304 * fTemp5)) + (fSlow305 * fTemp8))) + ((fTemp9 + (fSlow306 * fTemp11)) + (fSlow307 * fTemp14)))); - fRec94[0] = max((fRec94[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + output29[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (0.02017333553791887 * ((fSlow374 * ((fTemp2 + (fSlow378 * fTemp4)) + (fSlow380 * fTemp7))) + ((fTemp8 + (fSlow381 * fTemp10)) + (fSlow382 * fTemp13)))); + fRec94[0] = max((fRec94[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); fVbargraph30 = FAUSTFLOAT(fRec94[0]); - output30[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (0.02017333553791887 * ((fSlow309 * ((fTemp3 + (fSlow311 * fTemp5)) + (fSlow312 * fTemp8))) + ((fTemp9 + (fSlow313 * fTemp11)) + (fSlow314 * fTemp14)))); - fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + output30[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (0.02017333553791887 * ((fSlow384 * ((fTemp2 + (fSlow388 * fTemp4)) + (fSlow390 * fTemp7))) + ((fTemp8 + (fSlow391 * fTemp10)) + (fSlow392 * fTemp13)))); + fRec95[0] = max((fRec95[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); fVbargraph31 = FAUSTFLOAT(fRec95[0]); - output31[i] = FAUSTFLOAT(fTemp46); - double fTemp47 = (0.02017333553791887 * ((fSlow316 * ((fTemp3 + (fSlow318 * fTemp5)) + (fSlow319 * fTemp8))) + ((fTemp9 + (fSlow320 * fTemp11)) + (fSlow321 * fTemp14)))); - fRec96[0] = max((fRec96[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + output31[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (0.02017333553791887 * ((fSlow394 * ((fTemp2 + (fSlow398 * fTemp4)) + (fSlow400 * fTemp7))) + ((fTemp8 + (fSlow401 * fTemp10)) + (fSlow402 * fTemp13)))); + fRec96[0] = max((fRec96[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); fVbargraph32 = FAUSTFLOAT(fRec96[0]); - output32[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (0.02017333553791887 * ((fSlow323 * ((fTemp3 + (fSlow325 * fTemp5)) + (fSlow326 * fTemp8))) + ((fTemp9 + (fSlow327 * fTemp11)) + (fSlow328 * fTemp14)))); - fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + output32[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (0.02017333553791887 * ((fSlow404 * ((fTemp2 + (fSlow408 * fTemp4)) + (fSlow410 * fTemp7))) + ((fTemp8 + (fSlow411 * fTemp10)) + (fSlow412 * fTemp13)))); + fRec97[0] = max((fRec97[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); fVbargraph33 = FAUSTFLOAT(fRec97[0]); - output33[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (0.02017333553791887 * ((fSlow330 * ((fTemp3 + (fSlow332 * fTemp5)) + (fSlow333 * fTemp8))) + ((fTemp9 + (fSlow334 * fTemp11)) + (fSlow335 * fTemp14)))); - fRec98[0] = max((fRec98[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); + output33[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (0.02017333553791887 * ((fSlow414 * ((fTemp2 + (fSlow418 * fTemp4)) + (fSlow420 * fTemp7))) + ((fTemp8 + (fSlow421 * fTemp10)) + (fSlow422 * fTemp13)))); + fRec98[0] = max((fRec98[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); fVbargraph34 = FAUSTFLOAT(fRec98[0]); - output34[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = (0.02017333553791887 * ((fSlow337 * ((fTemp3 + (fSlow339 * fTemp5)) + (fSlow340 * fTemp8))) + ((fTemp9 + (fSlow341 * fTemp11)) + (fSlow342 * fTemp14)))); - fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); + output34[i] = FAUSTFLOAT(fTemp48); + double fTemp49 = (0.02017333553791887 * ((fSlow424 * ((fTemp2 + (fSlow428 * fTemp4)) + (fSlow430 * fTemp7))) + ((fTemp8 + (fSlow431 * fTemp10)) + (fSlow432 * fTemp13)))); + fRec99[0] = max((fRec99[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); fVbargraph35 = FAUSTFLOAT(fRec99[0]); - output35[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (0.02017333553791887 * ((fSlow344 * ((fTemp3 + (fSlow346 * fTemp5)) + (fSlow347 * fTemp8))) + ((fTemp9 + (fSlow348 * fTemp11)) + (fSlow349 * fTemp14)))); - fRec100[0] = max((fRec100[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); + output35[i] = FAUSTFLOAT(fTemp49); + double fTemp50 = (0.02017333553791887 * ((fSlow434 * ((fTemp2 + (fSlow438 * fTemp4)) + (fSlow440 * fTemp7))) + ((fTemp8 + (fSlow441 * fTemp10)) + (fSlow442 * fTemp13)))); + fRec100[0] = max((fRec100[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); fVbargraph36 = FAUSTFLOAT(fRec100[0]); - output36[i] = FAUSTFLOAT(fTemp51); - double fTemp52 = (0.02017333553791887 * ((fSlow351 * ((fTemp3 + (fSlow353 * fTemp5)) + (fSlow354 * fTemp8))) + ((fTemp9 + (fSlow355 * fTemp11)) + (fSlow356 * fTemp14)))); - fRec101[0] = max((fRec101[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); + output36[i] = FAUSTFLOAT(fTemp50); + double fTemp51 = (0.02017333553791887 * ((fSlow444 * ((fTemp2 + (fSlow448 * fTemp4)) + (fSlow450 * fTemp7))) + ((fTemp8 + (fSlow451 * fTemp10)) + (fSlow452 * fTemp13)))); + fRec101[0] = max((fRec101[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp51)))))); fVbargraph37 = FAUSTFLOAT(fRec101[0]); - output37[i] = FAUSTFLOAT(fTemp52); - double fTemp53 = (0.02017333553791887 * ((fSlow357 * ((fTemp3 + (fSlow359 * fTemp5)) + (fSlow360 * fTemp8))) + ((fTemp9 + (fSlow361 * fTemp11)) + (fSlow362 * fTemp14)))); - fRec102[0] = max((fRec102[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); + output37[i] = FAUSTFLOAT(fTemp51); + double fTemp52 = (0.02017333553791887 * ((fSlow453 * ((fTemp2 + (fSlow457 * fTemp4)) + (fSlow459 * fTemp7))) + ((fTemp8 + (fSlow460 * fTemp10)) + (fSlow461 * fTemp13)))); + fRec102[0] = max((fRec102[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp52)))))); fVbargraph38 = FAUSTFLOAT(fRec102[0]); - output38[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = (0.02017333553791887 * ((fSlow363 * ((fTemp3 + (fSlow365 * fTemp5)) + (fSlow366 * fTemp8))) + ((fTemp9 + (fSlow367 * fTemp11)) + (fSlow368 * fTemp14)))); - fRec103[0] = max((fRec103[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); + output38[i] = FAUSTFLOAT(fTemp52); + double fTemp53 = (0.02017333553791887 * ((fSlow462 * ((fTemp2 + (fSlow466 * fTemp4)) + (fSlow468 * fTemp7))) + ((fTemp8 + (fSlow469 * fTemp10)) + (fSlow470 * fTemp13)))); + fRec103[0] = max((fRec103[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); fVbargraph39 = FAUSTFLOAT(fRec103[0]); - output39[i] = FAUSTFLOAT(fTemp54); - double fTemp55 = (0.02017333553791887 * ((fSlow369 * ((fTemp3 + (fSlow371 * fTemp5)) + (fSlow372 * fTemp8))) + ((fTemp9 + (fSlow373 * fTemp11)) + (fSlow374 * fTemp14)))); - fRec104[0] = max((fRec104[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); + output39[i] = FAUSTFLOAT(fTemp53); + double fTemp54 = (0.02017333553791887 * ((fSlow471 * ((fTemp2 + (fSlow475 * fTemp4)) + (fSlow477 * fTemp7))) + ((fTemp8 + (fSlow478 * fTemp10)) + (fSlow479 * fTemp13)))); + fRec104[0] = max((fRec104[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp54)))))); fVbargraph40 = FAUSTFLOAT(fRec104[0]); - output40[i] = FAUSTFLOAT(fTemp55); - double fTemp56 = (0.02017333553791887 * ((fSlow375 * ((fTemp3 + (fSlow377 * fTemp5)) + (fSlow378 * fTemp8))) + ((fTemp9 + (fSlow379 * fTemp11)) + (fSlow380 * fTemp14)))); - fRec105[0] = max((fRec105[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); + output40[i] = FAUSTFLOAT(fTemp54); + double fTemp55 = (0.02017333553791887 * ((fSlow480 * ((fTemp2 + (fSlow484 * fTemp4)) + (fSlow486 * fTemp7))) + ((fTemp8 + (fSlow487 * fTemp10)) + (fSlow488 * fTemp13)))); + fRec105[0] = max((fRec105[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp55)))))); fVbargraph41 = FAUSTFLOAT(fRec105[0]); - output41[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (0.02017333553791887 * ((fSlow381 * ((fTemp3 + (fSlow383 * fTemp5)) + (fSlow384 * fTemp8))) + ((fTemp9 + (fSlow385 * fTemp11)) + (fSlow386 * fTemp14)))); - fRec106[0] = max((fRec106[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); + output41[i] = FAUSTFLOAT(fTemp55); + double fTemp56 = (0.02017333553791887 * ((fSlow489 * ((fTemp2 + (fSlow493 * fTemp4)) + (fSlow495 * fTemp7))) + ((fTemp8 + (fSlow496 * fTemp10)) + (fSlow497 * fTemp13)))); + fRec106[0] = max((fRec106[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); fVbargraph42 = FAUSTFLOAT(fRec106[0]); - output42[i] = FAUSTFLOAT(fTemp57); - double fTemp58 = (0.02017333553791887 * ((fSlow387 * ((fTemp3 + (fSlow389 * fTemp5)) + (fSlow390 * fTemp8))) + ((fTemp9 + (fSlow391 * fTemp11)) + (fSlow392 * fTemp14)))); - fRec107[0] = max((fRec107[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); + output42[i] = FAUSTFLOAT(fTemp56); + double fTemp57 = (0.02017333553791887 * ((fSlow498 * ((fTemp2 + (fSlow502 * fTemp4)) + (fSlow504 * fTemp7))) + ((fTemp8 + (fSlow505 * fTemp10)) + (fSlow506 * fTemp13)))); + fRec107[0] = max((fRec107[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); fVbargraph43 = FAUSTFLOAT(fRec107[0]); - output43[i] = FAUSTFLOAT(fTemp58); - double fTemp59 = (0.02017333553791887 * ((fSlow393 * ((fTemp3 + (fSlow395 * fTemp5)) + (fSlow396 * fTemp8))) + ((fTemp9 + (fSlow397 * fTemp11)) + (fSlow398 * fTemp14)))); - fRec108[0] = max((fRec108[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); + output43[i] = FAUSTFLOAT(fTemp57); + double fTemp58 = (0.02017333553791887 * ((fSlow507 * ((fTemp2 + (fSlow511 * fTemp4)) + (fSlow513 * fTemp7))) + ((fTemp8 + (fSlow514 * fTemp10)) + (fSlow515 * fTemp13)))); + fRec108[0] = max((fRec108[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp58)))))); fVbargraph44 = FAUSTFLOAT(fRec108[0]); - output44[i] = FAUSTFLOAT(fTemp59); - double fTemp60 = (0.02017333553791887 * ((fSlow399 * ((fTemp3 + (fSlow401 * fTemp5)) + (fSlow402 * fTemp8))) + ((fTemp9 + (fSlow403 * fTemp11)) + (fSlow404 * fTemp14)))); - fRec109[0] = max((fRec109[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); + output44[i] = FAUSTFLOAT(fTemp58); + double fTemp59 = (0.02017333553791887 * ((fSlow516 * ((fTemp2 + (fSlow520 * fTemp4)) + (fSlow522 * fTemp7))) + ((fTemp8 + (fSlow523 * fTemp10)) + (fSlow524 * fTemp13)))); + fRec109[0] = max((fRec109[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); fVbargraph45 = FAUSTFLOAT(fRec109[0]); - output45[i] = FAUSTFLOAT(fTemp60); - double fTemp61 = (0.02017333553791887 * ((fSlow405 * ((fTemp3 + (fSlow407 * fTemp5)) + (fSlow408 * fTemp8))) + ((fTemp9 + (fSlow409 * fTemp11)) + (fSlow410 * fTemp14)))); - fRec110[0] = max((fRec110[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); + output45[i] = FAUSTFLOAT(fTemp59); + double fTemp60 = (0.02017333553791887 * ((fSlow525 * ((fTemp2 + (fSlow529 * fTemp4)) + (fSlow531 * fTemp7))) + ((fTemp8 + (fSlow532 * fTemp10)) + (fSlow533 * fTemp13)))); + fRec110[0] = max((fRec110[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp60)))))); fVbargraph46 = FAUSTFLOAT(fRec110[0]); - output46[i] = FAUSTFLOAT(fTemp61); - double fTemp62 = (0.02017333553791887 * ((fSlow411 * ((fTemp3 + (fSlow413 * fTemp5)) + (fSlow414 * fTemp8))) + ((fTemp9 + (fSlow415 * fTemp11)) + (fSlow416 * fTemp14)))); - fRec111[0] = max((fRec111[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); + output46[i] = FAUSTFLOAT(fTemp60); + double fTemp61 = (0.02017333553791887 * ((fSlow534 * ((fTemp2 + (fSlow538 * fTemp4)) + (fSlow540 * fTemp7))) + ((fTemp8 + (fSlow541 * fTemp10)) + (fSlow542 * fTemp13)))); + fRec111[0] = max((fRec111[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); fVbargraph47 = FAUSTFLOAT(fRec111[0]); - output47[i] = FAUSTFLOAT(fTemp62); - double fTemp63 = (0.02017333553791887 * ((fSlow417 * ((fTemp3 + (fSlow419 * fTemp5)) + (fSlow420 * fTemp8))) + ((fTemp9 + (fSlow421 * fTemp11)) + (fSlow422 * fTemp14)))); - fRec112[0] = max((fRec112[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); + output47[i] = FAUSTFLOAT(fTemp61); + double fTemp62 = (0.02017333553791887 * ((fSlow543 * ((fTemp2 + (fSlow547 * fTemp4)) + (fSlow549 * fTemp7))) + ((fTemp8 + (fSlow550 * fTemp10)) + (fSlow551 * fTemp13)))); + fRec112[0] = max((fRec112[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); fVbargraph48 = FAUSTFLOAT(fRec112[0]); - output48[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (0.02017333553791887 * ((fSlow423 * ((fTemp3 + (fSlow425 * fTemp5)) + (fSlow426 * fTemp8))) + ((fTemp9 + (fSlow427 * fTemp11)) + (fSlow428 * fTemp14)))); - fRec113[0] = max((fRec113[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); + output48[i] = FAUSTFLOAT(fTemp62); + double fTemp63 = (0.02017333553791887 * ((fSlow552 * ((fTemp2 + (fSlow556 * fTemp4)) + (fSlow558 * fTemp7))) + ((fTemp8 + (fSlow559 * fTemp10)) + (fSlow560 * fTemp13)))); + fRec113[0] = max((fRec113[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); fVbargraph49 = FAUSTFLOAT(fRec113[0]); - output49[i] = FAUSTFLOAT(fTemp64); + output49[i] = FAUSTFLOAT(fTemp63); fRec3[1] = fRec3[0]; fRec4[1] = fRec4[0]; fRec2[1] = fRec2[0]; @@ -2849,7 +2986,6 @@ class mydsp : public dsp { }; - //---------------------------------------------------------------------------- // SuperCollider/Faust interface //---------------------------------------------------------------------------- @@ -3081,7 +3217,7 @@ void Faust_Ctor(Faust* unit) // module constructor } SETCALC(Faust_next_copy); } - #if !defined(NDEBUG) + #if defined(F2SC_DEBUG_MES) Print("Faust[%s]:\n", g_unitName); Print(" Inputs: %d\n" " Outputs: %d\n" @@ -3144,7 +3280,7 @@ FAUST_EXPORT void load(InterfaceTable* inTable) name = normalizeClassName(name); -#if !defined(NDEBUG) & defined(SC_API_EXPORT) +#if defined(F2SC_DEBUG_MES) & defined(SC_API_EXPORT) Print("Faust: supercollider.cpp: sc_api_version = %d\n", sc_api_version); #endif @@ -3173,11 +3309,17 @@ FAUST_EXPORT void load(InterfaceTable* inTable) kUnitDef_CantAliasInputsToOutputs ); -#if !defined(NDEBUG) +#if defined(F2SC_DEBUG_MES) Print("Faust: %s numControls=%d\n", name.c_str(), g_numControls); -#endif // NDEBUG +#endif // F2SC_DEBUG_MES } +#ifdef SUPERNOVA +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_supernova; } +#else +extern "C" FAUST_EXPORT int server_type(void) { return sc_server_scsynth; } +#endif + // EOF #endif diff --git a/source/HOAUGens/HOARotator1.cpp b/source/HOAUGens/HOARotator1.cpp index 3deb6f6af7..4f7a2895b4 100644 --- a/source/HOAUGens/HOARotator1.cpp +++ b/source/HOAUGens/HOARotator1.cpp @@ -1,15 +1,16 @@ -//---------------------------------------------------------- -// name: "HOARotator1" -// version: "1.0" -// author: "Pierre Lecomte" -// license: "GPL" -// copyright: "(c) Pierre Lecomte 2016" -// -// Code generated with Faust 0.12.0 (http://faust.grame.fr) -//---------------------------------------------------------- +/* ------------------------------------------------------------ +author: "Pierre Lecomte" +copyright: "(c) Pierre Lecomte 2016" +license: "GPL" +name: "HOARotator1" +version: "1.0" +Code generated with Faust 2.5.21 (https://faust.grame.fr) +Compilation options: cpp, -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __mydsp_H__ +#define __mydsp_H__ -/* link with */ -#include //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -30,9 +31,9 @@ // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -66,6 +67,8 @@ #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -114,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -142,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -209,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -299,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -456,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -485,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -552,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -583,59 +613,133 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - double fTempPerm0; - double fTempPerm1; - double fTempPerm2; + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("ymn.lib/version", "2.0"); - m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); - m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + + public: + + void metadata(Meta* m) { + m->declare("author", "Pierre Lecomte"); + m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); m->declare("name", "HOARotator1"); m->declare("version", "1.0"); - m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); - m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 4; } - virtual int getNumOutputs() { return 4; } + virtual int getNumInputs() { + return 4; + + } + virtual int getNumOutputs() { + return 4; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -645,69 +749,71 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator1"); - ui_interface->declare(&fslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider1, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider0, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = sin(fSlow0); - double fSlow5 = double(fslider2); - double fSlow6 = sin(fSlow5); - double fSlow7 = (fSlow4 * fSlow6); - double fSlow8 = sin(fSlow2); - double fSlow9 = ((fSlow1 * fSlow3) - (fSlow7 * fSlow8)); - double fSlow10 = cos(fSlow5); - double fSlow11 = (0 - fSlow10); - double fSlow12 = (fSlow11 * fSlow8); - double fSlow13 = (fSlow6 * fSlow1); - double fSlow14 = ((fSlow13 * fSlow8) + (fSlow4 * fSlow3)); - double fSlow15 = ((fSlow1 * fSlow8) + (fSlow7 * fSlow3)); - double fSlow16 = (fSlow10 * fSlow3); - double fSlow17 = ((fSlow13 * (0 - fSlow3)) + (fSlow4 * fSlow8)); - double fSlow18 = (fSlow4 * fSlow11); - double fSlow19 = (fSlow10 * fSlow1); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - //LoopGraphScalar - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -42,9 +31,9 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -78,6 +67,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -126,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -154,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -221,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -311,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -468,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -497,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -564,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -595,69 +613,177 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - double fTempPerm0; - double fTempPerm1; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOARotator2"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("ymn.lib/name", "Spherical Harmonics library"); - m->declare("ymn.lib/version", "2.0"); - m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); - m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOARotator2"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 9; } - virtual int getNumOutputs() { return 9; } + virtual int getNumInputs() { + return 9; + + } + virtual int getNumOutputs() { + return 9; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -667,133 +793,134 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator2"); - ui_interface->declare(&fslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider0, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider1, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = double(fslider2); - double fSlow6 = sin(fSlow5); - double fSlow7 = sin(fSlow0); - double fSlow8 = (fSlow6 * fSlow7); - double fSlow9 = sin(fSlow2); - double fSlow10 = (fSlow4 - (fSlow8 * fSlow9)); - double fSlow11 = cos(fSlow5); - double fSlow12 = (0 - fSlow11); - double fSlow13 = (fSlow7 * fSlow12); - double fSlow14 = (fSlow3 * fSlow6); - double fSlow15 = (fSlow1 * fSlow9); - double fSlow16 = ((fSlow14 * fSlow7) + fSlow15); - double fSlow17 = (fSlow3 * fSlow7); - double fSlow18 = (fSlow1 * fSlow6); - double fSlow19 = (fSlow17 + (fSlow18 * fSlow9)); - double fSlow20 = (fSlow1 * fSlow11); - double fSlow21 = (fSlow7 * fSlow9); - double fSlow22 = (fSlow21 + (fSlow14 * (0 - fSlow1))); - double fSlow23 = (fSlow9 * fSlow12); - double fSlow24 = (fSlow3 * fSlow11); - double fSlow25 = ((fSlow24 * fSlow10) + ((fSlow9 * fSlow16) * fSlow12)); - double fSlow26 = faustpower<2>(fSlow12); - double fSlow27 = ((fSlow6 * fSlow10) + (fSlow21 * fSlow26)); - double fSlow28 = (1.7320508075688772 * (fSlow8 * fSlow12)); - double fSlow29 = ((fSlow6 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); - double fSlow30 = ((fSlow24 * fSlow16) - ((fSlow9 * fSlow10) * fSlow12)); - double fSlow31 = ((fSlow19 * fSlow16) + (fSlow10 * fSlow22)); - double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow7 * fSlow19) * fSlow12))); - double fSlow33 = (1.7320508075688772 * (((fSlow1 * fSlow7) * fSlow11) * fSlow12)); - double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow7 * fSlow22) * fSlow12))); - double fSlow35 = ((fSlow16 * fSlow22) - (fSlow19 * fSlow10)); - double fSlow36 = (fSlow16 * fSlow10); - double fSlow37 = (((fSlow3 * fSlow9) * fSlow11) * fSlow12); - double fSlow38 = ((1.1547005383792515 * (fSlow19 * fSlow22)) - (0.5773502691896257 * (fSlow36 + fSlow37))); - double fSlow39 = (fSlow6 * fSlow9); - double fSlow40 = (fSlow7 * fSlow10); - double fSlow41 = ((1.1547005383792515 * ((fSlow1 * fSlow19) * fSlow11)) - (0.5773502691896257 * ((fSlow39 + fSlow40) * fSlow12))); - double fSlow42 = faustpower<2>(fSlow11); - double fSlow43 = faustpower<2>(fSlow6); - double fSlow44 = (faustpower<2>(fSlow7) * fSlow26); - double fSlow45 = ((faustpower<2>(fSlow1) * fSlow42) - (0.5 * (fSlow43 + fSlow44))); - double fSlow46 = (fSlow14 * fSlow11); - double fSlow47 = ((fSlow7 * fSlow16) * fSlow12); - double fSlow48 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.5773502691896257 * (fSlow46 + fSlow47))); - double fSlow49 = (faustpower<2>(fSlow3) * fSlow42); - double fSlow50 = faustpower<2>(fSlow16); - double fSlow51 = (faustpower<2>(fSlow9) * fSlow26); - double fSlow52 = faustpower<2>(fSlow10); - double fSlow53 = ((0.5773502691896257 * (faustpower<2>(fSlow22) - faustpower<2>(fSlow19))) - (0.28867513459481287 * ((fSlow49 + fSlow50) - (fSlow51 + fSlow52)))); - double fSlow54 = (((fSlow9 * fSlow22) * fSlow12) + ((fSlow3 * fSlow19) * fSlow11)); - double fSlow55 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow6 * fSlow19))); - double fSlow56 = (1.7320508075688772 * (fSlow18 * fSlow11)); - double fSlow57 = ((fSlow4 * fSlow42) + (1.0000000000000002 * (fSlow6 * fSlow22))); - double fSlow58 = ((fSlow24 * fSlow22) - ((fSlow9 * fSlow19) * fSlow12)); - double fSlow59 = (fSlow46 - fSlow47); - double fSlow60 = (fSlow12 * (fSlow39 - fSlow40)); - double fSlow61 = (0.8660254037844386 * (fSlow43 - fSlow44)); - double fSlow62 = (0 - (2 * (fSlow36 - fSlow37))); - double fSlow63 = ((fSlow49 + fSlow52) - (fSlow51 + fSlow50)); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - //LoopGraphScalar - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -42,9 +31,9 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -78,6 +67,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -126,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -154,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -221,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -311,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -468,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -497,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -564,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -595,83 +613,233 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - double fTempPerm0; - double fTempPerm1; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; - double fTempPerm8; - double fTempPerm9; - double fTempPerm10; - double fTempPerm11; - double fTempPerm12; - double fTempPerm13; - double fTempPerm14; + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOARotator3"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("ymn.lib/name", "Spherical Harmonics library"); - m->declare("ymn.lib/version", "2.0"); - m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); - m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOARotator3"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 16; } - virtual int getNumOutputs() { return 16; } + virtual int getNumInputs() { + return 16; + + } + virtual int getNumOutputs() { + return 16; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; - fTempPerm8 = 0; - fTempPerm9 = 0; - fTempPerm10 = 0; - fTempPerm11 = 0; - fTempPerm12 = 0; - fTempPerm13 = 0; - fTempPerm14 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -681,259 +849,264 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator3"); - ui_interface->declare(&fslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider0, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider1, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = double(fslider2); - double fSlow6 = sin(fSlow5); - double fSlow7 = sin(fSlow0); - double fSlow8 = (fSlow6 * fSlow7); - double fSlow9 = sin(fSlow2); - double fSlow10 = (fSlow4 - (fSlow8 * fSlow9)); - double fSlow11 = cos(fSlow5); - double fSlow12 = (0 - fSlow11); - double fSlow13 = (fSlow7 * fSlow12); - double fSlow14 = (fSlow3 * fSlow6); - double fSlow15 = (fSlow1 * fSlow9); - double fSlow16 = ((fSlow14 * fSlow7) + fSlow15); - double fSlow17 = (fSlow3 * fSlow7); - double fSlow18 = (fSlow1 * fSlow6); - double fSlow19 = (fSlow17 + (fSlow18 * fSlow9)); - double fSlow20 = (fSlow1 * fSlow11); - double fSlow21 = (fSlow7 * fSlow9); - double fSlow22 = (fSlow21 + (fSlow14 * (0 - fSlow1))); - double fSlow23 = (fSlow9 * fSlow12); - double fSlow24 = (fSlow3 * fSlow11); - double fSlow25 = ((fSlow24 * fSlow10) + ((fSlow9 * fSlow16) * fSlow12)); - double fSlow26 = faustpower<2>(fSlow12); - double fSlow27 = ((fSlow21 * fSlow26) + (fSlow6 * fSlow10)); - double fSlow28 = (1.7320508075688772 * (fSlow8 * fSlow12)); - double fSlow29 = ((fSlow6 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); - double fSlow30 = ((fSlow24 * fSlow16) - ((fSlow9 * fSlow10) * fSlow12)); - double fSlow31 = ((fSlow19 * fSlow16) + (fSlow10 * fSlow22)); - double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow7 * fSlow19) * fSlow12))); - double fSlow33 = (1.7320508075688772 * (((fSlow1 * fSlow7) * fSlow11) * fSlow12)); - double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow7 * fSlow22) * fSlow12))); - double fSlow35 = ((fSlow16 * fSlow22) - (fSlow19 * fSlow10)); - double fSlow36 = (fSlow16 * fSlow10); - double fSlow37 = (((fSlow3 * fSlow9) * fSlow11) * fSlow12); - double fSlow38 = ((1.1547005383792515 * (fSlow19 * fSlow22)) - (0.5773502691896257 * (fSlow36 + fSlow37))); - double fSlow39 = (fSlow6 * fSlow9); - double fSlow40 = (fSlow7 * fSlow10); - double fSlow41 = ((1.1547005383792515 * ((fSlow1 * fSlow19) * fSlow11)) - (0.5773502691896257 * (fSlow12 * (fSlow39 + fSlow40)))); - double fSlow42 = faustpower<2>(fSlow11); - double fSlow43 = (faustpower<2>(fSlow1) * fSlow42); - double fSlow44 = faustpower<2>(fSlow6); - double fSlow45 = (faustpower<2>(fSlow7) * fSlow26); - double fSlow46 = (fSlow44 + fSlow45); - double fSlow47 = (fSlow43 - (0.5 * fSlow46)); - double fSlow48 = (fSlow14 * fSlow11); - double fSlow49 = ((fSlow7 * fSlow16) * fSlow12); - double fSlow50 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.5773502691896257 * (fSlow48 + fSlow49))); - double fSlow51 = (faustpower<2>(fSlow3) * fSlow42); - double fSlow52 = faustpower<2>(fSlow16); - double fSlow53 = (faustpower<2>(fSlow9) * fSlow26); - double fSlow54 = faustpower<2>(fSlow10); - double fSlow55 = ((0.5773502691896257 * (faustpower<2>(fSlow22) - faustpower<2>(fSlow19))) - (0.28867513459481287 * ((fSlow51 + fSlow52) - (fSlow53 + fSlow54)))); - double fSlow56 = (((fSlow9 * fSlow22) * fSlow12) + ((fSlow3 * fSlow19) * fSlow11)); - double fSlow57 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow6 * fSlow19))); - double fSlow58 = (1.7320508075688772 * (fSlow18 * fSlow11)); - double fSlow59 = ((fSlow4 * fSlow42) + (1.0000000000000002 * (fSlow6 * fSlow22))); - double fSlow60 = ((fSlow24 * fSlow22) - ((fSlow9 * fSlow19) * fSlow12)); - double fSlow61 = (fSlow48 - fSlow49); - double fSlow62 = (fSlow39 - fSlow40); - double fSlow63 = (fSlow62 * fSlow12); - double fSlow64 = (fSlow44 - fSlow45); - double fSlow65 = (0.8660254037844386 * fSlow64); - double fSlow66 = (0 - (2 * (fSlow36 - fSlow37))); - double fSlow67 = ((fSlow51 + fSlow54) - (fSlow53 + fSlow52)); - double fSlow68 = (fSlow6 * fSlow25); - double fSlow69 = (0.5 * (fSlow13 * fSlow66)); - double fSlow70 = (fSlow68 + fSlow69); - double fSlow71 = (fSlow6 * fSlow30); - double fSlow72 = (0.5 * (fSlow13 * fSlow67)); - double fSlow73 = (fSlow71 + fSlow72); - double fSlow74 = (1.7320508075688772 * fSlow44); - double fSlow75 = (0.9128709291752769 * (fSlow13 * (fSlow65 + fSlow74))); - double fSlow76 = (fSlow27 * fSlow6); - double fSlow77 = ((fSlow62 * fSlow7) * fSlow26); - double fSlow78 = (fSlow76 + fSlow77); - double fSlow79 = (fSlow6 * fSlow29); - double fSlow80 = (fSlow13 * fSlow61); - double fSlow81 = (fSlow79 + fSlow80); - double fSlow82 = ((fSlow24 * fSlow25) + (fSlow23 * fSlow30)); - double fSlow83 = (0.5 * ((fSlow16 * fSlow66) + (fSlow10 * fSlow67))); - double fSlow84 = (fSlow82 + fSlow83); - double fSlow85 = (fSlow24 * fSlow30); - double fSlow86 = (0.5 * ((fSlow16 * fSlow67) - (fSlow10 * fSlow66))); - double fSlow87 = (fSlow23 * fSlow25); - double fSlow88 = ((fSlow85 + fSlow86) - fSlow87); - double fSlow89 = ((fSlow13 * fSlow60) + ((fSlow20 * fSlow30) + (fSlow6 * fSlow35))); - double fSlow90 = (((fSlow27 * fSlow1) * fSlow11) + ((fSlow32 * fSlow6) + ((fSlow57 * fSlow7) * fSlow12))); - double fSlow91 = ((fSlow20 * fSlow29) + ((fSlow6 * fSlow34) + (fSlow13 * fSlow59))); - double fSlow92 = ((fSlow13 * fSlow56) + ((fSlow20 * fSlow25) + (fSlow6 * fSlow31))); - double fSlow93 = (3.872983346207417 * (((fSlow18 * fSlow7) * fSlow11) * fSlow12)); - double fSlow94 = (((fSlow22 * fSlow25) + (fSlow19 * fSlow30)) + ((fSlow10 * fSlow60) + ((fSlow23 * fSlow35) + ((fSlow24 * fSlow31) + (fSlow16 * fSlow56))))); - double fSlow95 = (((fSlow22 * fSlow30) - (fSlow19 * fSlow25)) + (((fSlow24 * fSlow35) + (fSlow16 * fSlow60)) - ((fSlow23 * fSlow31) + (fSlow10 * fSlow56)))); - double fSlow96 = (((0.5163977794943222 * ((fSlow22 * fSlow31) + (fSlow19 * fSlow35))) + (0.447213595499958 * ((fSlow16 * fSlow38) + (fSlow10 * fSlow55)))) - (0.12909944487358055 * (fSlow82 - fSlow83))); - double fSlow97 = (((1.2649110640673518 * (fSlow20 * fSlow31)) + (1.0954451150103324 * (fSlow13 * fSlow38))) - (0.31622776601683794 * (fSlow68 - fSlow69))); - double fSlow98 = ((((fSlow32 * fSlow1) * fSlow11) + (0.8660254037844386 * (fSlow13 * fSlow41))) - (0.25 * (fSlow76 - fSlow77))); - double fSlow99 = ((1.6329931618554518 * fSlow43) + (0.816496580927726 * fSlow47)); - double fSlow100 = (fSlow13 * (fSlow99 - (0.23570226039551584 * (fSlow74 - fSlow65)))); - double fSlow101 = (((fSlow20 * fSlow34) + (0.8660254037844386 * (fSlow13 * fSlow50))) - (0.25 * (fSlow79 - fSlow80))); - double fSlow102 = (((1.2649110640673518 * (fSlow20 * fSlow35)) + (1.0954451150103324 * (fSlow13 * fSlow55))) - (0.31622776601683794 * (fSlow71 - fSlow72))); - double fSlow103 = (((0.5163977794943222 * ((fSlow22 * fSlow35) - (fSlow19 * fSlow31))) + (0.447213595499958 * ((fSlow16 * fSlow55) - (fSlow10 * fSlow38)))) - (0.12909944487358055 * (fSlow85 - (fSlow87 + fSlow86)))); - double fSlow104 = (fSlow6 * fSlow60); - double fSlow105 = (fSlow13 * fSlow35); - double fSlow106 = ((1.3416407864998738 * (fSlow20 * fSlow55)) - (0.7745966692414834 * (fSlow104 + fSlow105))); - double fSlow107 = (fSlow57 * fSlow6); - double fSlow108 = ((fSlow32 * fSlow7) * fSlow12); - double fSlow109 = ((1.0606601717798212 * (fSlow20 * fSlow41)) - (0.6123724356957945 * (fSlow107 + fSlow108))); - double fSlow110 = (fSlow20 * (fSlow47 - (0.9999999999999999 * fSlow46))); - double fSlow111 = (fSlow24 * fSlow60); - double fSlow112 = (fSlow16 * fSlow35); - double fSlow113 = (fSlow23 * fSlow56); - double fSlow114 = (fSlow10 * fSlow31); - double fSlow115 = ((0.5477225575051661 * ((fSlow22 * fSlow55) - (fSlow19 * fSlow38))) - (0.31622776601683794 * ((fSlow111 + fSlow112) - (fSlow113 + fSlow114)))); - double fSlow116 = (fSlow10 * fSlow35); - double fSlow117 = ((fSlow24 * fSlow56) + (fSlow23 * fSlow60)); - double fSlow118 = (fSlow16 * fSlow31); - double fSlow119 = ((0.5477225575051661 * ((fSlow22 * fSlow38) + (fSlow19 * fSlow55))) - (0.31622776601683794 * (fSlow116 + (fSlow117 + fSlow118)))); - double fSlow120 = (fSlow6 * fSlow56); - double fSlow121 = (fSlow13 * fSlow31); - double fSlow122 = ((1.3416407864998738 * (fSlow20 * fSlow38)) - (0.7745966692414834 * (fSlow120 + fSlow121))); - double fSlow123 = (fSlow6 * fSlow59); - double fSlow124 = (fSlow13 * fSlow34); - double fSlow125 = ((1.0606601717798212 * (fSlow20 * fSlow50)) - (0.6123724356957945 * (fSlow123 + fSlow124))); - double fSlow126 = (fSlow6 * fSlow61); - double fSlow127 = (fSlow13 * fSlow29); - double fSlow128 = (((fSlow20 * fSlow59) + (0.8660254037844386 * (fSlow6 * fSlow50))) - (0.25 * (fSlow126 + fSlow127))); - double fSlow129 = (fSlow10 * fSlow30); - double fSlow130 = (0.5 * ((fSlow24 * fSlow66) + (fSlow23 * fSlow67))); - double fSlow131 = (fSlow16 * fSlow25); - double fSlow132 = (((0.5163977794943222 * ((fSlow22 * fSlow56) + (fSlow19 * fSlow60))) + (0.447213595499958 * ((fSlow24 * fSlow38) + (fSlow23 * fSlow55)))) - (0.12909944487358055 * (fSlow129 + (fSlow130 + fSlow131)))); - double fSlow133 = (1.7320508075688772 * fSlow45); - double fSlow134 = (fSlow6 * (fSlow99 - (0.23570226039551584 * (fSlow65 + fSlow133)))); - double fSlow135 = (0.5 * (fSlow6 * fSlow67)); - double fSlow136 = (fSlow13 * fSlow30); - double fSlow137 = (((1.2649110640673518 * (fSlow20 * fSlow60)) + (1.0954451150103324 * (fSlow6 * fSlow55))) - (0.31622776601683794 * (fSlow135 + fSlow136))); - double fSlow138 = (0.5 * (fSlow6 * fSlow66)); - double fSlow139 = (fSlow13 * fSlow25); - double fSlow140 = (((1.2649110640673518 * (fSlow20 * fSlow56)) + (1.0954451150103324 * (fSlow6 * fSlow38))) - (0.31622776601683794 * (fSlow138 + fSlow139))); - double fSlow141 = (fSlow62 * fSlow6); - double fSlow142 = (fSlow27 * fSlow7); - double fSlow143 = ((((fSlow57 * fSlow1) * fSlow11) + (0.8660254037844386 * (fSlow6 * fSlow41))) - (0.25 * (fSlow12 * (fSlow141 + fSlow142)))); - double fSlow144 = (fSlow16 * fSlow30); - double fSlow145 = (0.5 * ((fSlow24 * fSlow67) - (fSlow23 * fSlow66))); - double fSlow146 = (fSlow10 * fSlow25); - double fSlow147 = (((0.5163977794943222 * ((fSlow22 * fSlow60) - (fSlow19 * fSlow56))) + (0.447213595499958 * ((fSlow24 * fSlow55) - (fSlow23 * fSlow38)))) - (0.12909944487358055 * ((fSlow144 + fSlow145) - fSlow146))); - double fSlow148 = ((0.2041241452319315 * ((fSlow22 * fSlow67) - (fSlow19 * fSlow66))) + (0.408248290463863 * ((fSlow111 + fSlow114) - (fSlow112 + fSlow113)))); - double fSlow149 = ((0.2041241452319315 * ((fSlow22 * fSlow66) + (fSlow19 * fSlow67))) + (0.408248290463863 * (fSlow117 - (fSlow118 + fSlow116)))); - double fSlow150 = (((0.5 * (fSlow20 * fSlow66)) + fSlow120) - fSlow121); - double fSlow151 = (1.9364916731037085 * (fSlow20 * fSlow64)); - double fSlow152 = (((0.5 * (fSlow20 * fSlow67)) + fSlow104) - fSlow105); - double fSlow153 = ((((fSlow62 * fSlow1) * fSlow11) * fSlow12) + (fSlow107 - fSlow108)); - double fSlow154 = ((fSlow20 * fSlow61) + (fSlow123 - fSlow124)); - double fSlow155 = (fSlow138 - fSlow139); - double fSlow156 = (fSlow135 - fSlow136); - double fSlow157 = (0.9128709291752769 * (fSlow6 * (fSlow65 - fSlow133))); - double fSlow158 = ((fSlow141 - fSlow142) * fSlow12); - double fSlow159 = (fSlow126 - fSlow127); - double fSlow160 = (fSlow130 - (fSlow131 + fSlow129)); - double fSlow161 = ((fSlow145 + fSlow146) - fSlow144); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - //LoopGraphScalar - for (int i=0; i -#ifndef FAUSTPOWER -#define FAUSTPOWER -#include -template inline int faustpower(int x) { return faustpower(x) * faustpower(x); } -template <> inline int faustpower<0>(int x) { return 1; } -template <> inline int faustpower<1>(int x) { return x; } -template <> inline int faustpower<2>(int x) { return x*x; } -template inline double faustpower(double x) { return faustpower(x) * faustpower(x); } -template <> inline double faustpower<0>(double x) { return 1; } -template <> inline double faustpower<1>(double x) { return x; } -template <> inline double faustpower<2>(double x) { return x*x; } -#endif //------------------------------------------------------------------- // FAUST architecture file for SuperCollider. // Copyright (C) 2005-2012 Stefan Kersten. @@ -42,9 +31,9 @@ template <> inline double faustpower<2>(double x) { return x*x; } // 02111-1307 USA //------------------------------------------------------------------- -// If other than 'faust2sc --prefix Faust' is used, sed this as well: +// The prefix is set to "Faust" in the faust2supercollider script, otherwise set empty #if !defined(SC_FAUST_PREFIX) -#define SC_FAUST_PREFIX "Faust" +#define SC_FAUST_PREFIX "" #endif #include @@ -78,6 +67,8 @@ template <> inline double faustpower<2>(double x) { return x*x; } #ifndef __dsp__ #define __dsp__ +#include + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -126,23 +117,23 @@ class dsp { /* Returns the sample rate currently used by the instance */ virtual int getSampleRate() = 0; - /** + /** * Global init, calls the following methods: * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Herz + * @param samplingRate - the sampling rate in Hertz */ virtual void init(int samplingRate) = 0; - - /** + + /** * Init instance state * * @param samplingRate - the sampling rate in Hertz */ virtual void instanceInit(int samplingRate) = 0; - - /** + + /** * Init instance constant state * * @param samplingRate - the sampling rate in Hertz @@ -154,8 +145,8 @@ class dsp { /* Init instance state (delay lines...) */ virtual void instanceClear() = 0; - - /** + + /** * Return a clone of the instance. * * @return a copy of the instance on success, otherwise a null pointer. @@ -221,7 +212,31 @@ class decorator_dsp : public dsp { // Beware: subclasses usually have to overload the two 'compute' methods virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } - + +}; + +/** + * DSP factory class. + */ + +class dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + + virtual dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + }; /** @@ -311,7 +326,7 @@ class UI // -- soundfiles - virtual void addSoundfile(const char* label, Soundfile** sf_zone) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; // -- metadata declarations @@ -468,7 +483,7 @@ class ControlCounter : public UI ControlCounter() : mNumControlInputs(0), mNumControlOutputs(0) - { } + {} size_t getNumControls() const { return getNumControlInputs(); } size_t getNumControlInputs() const { return mNumControlInputs; } @@ -497,6 +512,8 @@ class ControlCounter : public UI { addControlOutput(); } virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { addControlOutput(); } + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} protected: void addControlInput() { mNumControlInputs++; } @@ -564,8 +581,9 @@ class ControlAllocator : public UI { addBoundedControl(zone, min, max, step); } // Passive widgets - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) { } + virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) {} + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) {} private: void addControl(Control::UpdateFunction updateFunction, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT /* step */) @@ -595,101 +613,305 @@ class ControlAllocator : public UI #ifndef FAUSTFLOAT #define FAUSTFLOAT float -#endif +#endif + +#include +double mydsp_faustpower2_f(double value) { + return (value * value); + +} #ifndef FAUSTCLASS #define FAUSTCLASS mydsp #endif +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif class mydsp : public dsp { - private: - FAUSTFLOAT fslider0; - FAUSTFLOAT fslider1; - FAUSTFLOAT fslider2; - double fTempPerm0; - double fTempPerm1; - double fTempPerm2; - double fTempPerm3; - double fTempPerm4; - double fTempPerm5; - double fTempPerm6; - double fTempPerm7; - double fTempPerm8; - double fTempPerm9; - double fTempPerm10; - double fTempPerm11; - double fTempPerm12; - double fTempPerm13; - double fTempPerm14; - double fTempPerm15; - double fTempPerm16; - double fTempPerm17; - double fTempPerm18; - double fTempPerm19; - double fTempPerm20; - double fTempPerm21; - double fTempPerm22; - double fTempPerm23; + + private: + + FAUSTFLOAT fHslider0; + FAUSTFLOAT fHslider1; + FAUSTFLOAT fHslider2; int fSamplingFreq; - - public: - virtual void metadata(Meta* m) { - m->declare("name", "HOARotator4"); - m->declare("version", "1.0"); + + public: + + void metadata(Meta* m) { m->declare("author", "Pierre Lecomte"); - m->declare("license", "GPL"); m->declare("copyright", "(c) Pierre Lecomte 2016"); - m->declare("ymn.lib/name", "Spherical Harmonics library"); - m->declare("ymn.lib/version", "2.0"); - m->declare("ymn.lib/author", "Pierre Lecomte"); - m->declare("ymn.lib/license", "GPL"); - m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); - m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.1"); + m->declare("license", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.1"); + m->declare("name", "HOARotator4"); + m->declare("version", "1.0"); + m->declare("ymn.lib/author", "Pierre Lecomte"); + m->declare("ymn.lib/copyright", "(c) Pierre Lecomte 2017"); + m->declare("ymn.lib/license", "GPL"); + m->declare("ymn.lib/name", "Spherical Harmonics library"); + m->declare("ymn.lib/version", "2.0"); } - virtual int getNumInputs() { return 25; } - virtual int getNumOutputs() { return 25; } + virtual int getNumInputs() { + return 25; + + } + virtual int getNumOutputs() { + return 25; + + } + virtual int getInputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + virtual int getOutputRate(int channel) { + int rate; + switch (channel) { + case 0: { + rate = 1; + break; + } + case 1: { + rate = 1; + break; + } + case 2: { + rate = 1; + break; + } + case 3: { + rate = 1; + break; + } + case 4: { + rate = 1; + break; + } + case 5: { + rate = 1; + break; + } + case 6: { + rate = 1; + break; + } + case 7: { + rate = 1; + break; + } + case 8: { + rate = 1; + break; + } + case 9: { + rate = 1; + break; + } + case 10: { + rate = 1; + break; + } + case 11: { + rate = 1; + break; + } + case 12: { + rate = 1; + break; + } + case 13: { + rate = 1; + break; + } + case 14: { + rate = 1; + break; + } + case 15: { + rate = 1; + break; + } + case 16: { + rate = 1; + break; + } + case 17: { + rate = 1; + break; + } + case 18: { + rate = 1; + break; + } + case 19: { + rate = 1; + break; + } + case 20: { + rate = 1; + break; + } + case 21: { + rate = 1; + break; + } + case 22: { + rate = 1; + break; + } + case 23: { + rate = 1; + break; + } + case 24: { + rate = 1; + break; + } + default: { + rate = -1; + break; + } + + } + return rate; + + } + static void classInit(int samplingFreq) { + } + virtual void instanceConstants(int samplingFreq) { fSamplingFreq = samplingFreq; - fTempPerm0 = 0; - fTempPerm1 = 0; - fTempPerm2 = 0; - fTempPerm3 = 0; - fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - fTempPerm7 = 0; - fTempPerm8 = 0; - fTempPerm9 = 0; - fTempPerm10 = 0; - fTempPerm11 = 0; - fTempPerm12 = 0; - fTempPerm13 = 0; - fTempPerm14 = 0; - fTempPerm15 = 0; - fTempPerm16 = 0; - fTempPerm17 = 0; - fTempPerm18 = 0; - fTempPerm19 = 0; - fTempPerm20 = 0; - fTempPerm21 = 0; - fTempPerm22 = 0; - fTempPerm23 = 0; + } + virtual void instanceResetUserInterface() { - fslider0 = 0.0; - fslider1 = 0.0; - fslider2 = 0.0; + fHslider0 = FAUSTFLOAT(0.0); + fHslider1 = FAUSTFLOAT(0.0); + fHslider2 = FAUSTFLOAT(0.0); + } + virtual void instanceClear() { + } + virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); @@ -699,479 +921,483 @@ class mydsp : public dsp { instanceResetUserInterface(); instanceClear(); } + virtual mydsp* clone() { return new mydsp(); } virtual int getSampleRate() { return fSamplingFreq; + } + virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("HOARotator4"); - ui_interface->declare(&fslider2, "osc", "/picth 0 360"); - ui_interface->addHorizontalSlider("Pitch", &fslider2, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider0, "osc", "/roll 0 360"); - ui_interface->addHorizontalSlider("Roll", &fslider0, 0.0, -3.141592653589793, 3.141592653589793, 0.01); - ui_interface->declare(&fslider1, "osc", "/yaw 0 360"); - ui_interface->addHorizontalSlider("Yaw", &fslider1, 0.0, -3.141592653589793, 3.141592653589793, 0.01); + ui_interface->declare(&fHslider2, "osc", "/picth 0 360"); + ui_interface->addHorizontalSlider("Pitch", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider1, "osc", "/roll 0 360"); + ui_interface->addHorizontalSlider("Roll", &fHslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); + ui_interface->declare(&fHslider0, "osc", "/yaw 0 360"); + ui_interface->addHorizontalSlider("Yaw", &fHslider0, 0.0, -3.1415926535897931, 3.1415926535897931, 0.01); ui_interface->closeBox(); + } - virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { - //zone1 - //zone2 - double fSlow0 = double(fslider0); - double fSlow1 = cos(fSlow0); - double fSlow2 = double(fslider1); - double fSlow3 = cos(fSlow2); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = double(fslider2); - double fSlow6 = sin(fSlow5); - double fSlow7 = sin(fSlow0); - double fSlow8 = (fSlow6 * fSlow7); - double fSlow9 = sin(fSlow2); - double fSlow10 = (fSlow4 - (fSlow8 * fSlow9)); - double fSlow11 = cos(fSlow5); - double fSlow12 = (0 - fSlow11); - double fSlow13 = (fSlow7 * fSlow12); - double fSlow14 = (fSlow3 * fSlow6); - double fSlow15 = (fSlow1 * fSlow9); - double fSlow16 = ((fSlow14 * fSlow7) + fSlow15); - double fSlow17 = (fSlow3 * fSlow7); - double fSlow18 = (fSlow1 * fSlow6); - double fSlow19 = (fSlow17 + (fSlow18 * fSlow9)); - double fSlow20 = (fSlow1 * fSlow11); - double fSlow21 = (fSlow7 * fSlow9); - double fSlow22 = (fSlow21 + (fSlow14 * (0 - fSlow1))); - double fSlow23 = (fSlow9 * fSlow12); - double fSlow24 = (fSlow3 * fSlow11); - double fSlow25 = ((fSlow24 * fSlow10) + ((fSlow9 * fSlow16) * fSlow12)); - double fSlow26 = faustpower<2>(fSlow12); - double fSlow27 = ((fSlow6 * fSlow10) + (fSlow21 * fSlow26)); - double fSlow28 = (1.7320508075688772 * (fSlow8 * fSlow12)); - double fSlow29 = ((fSlow6 * fSlow16) + ((fSlow17 * fSlow11) * fSlow12)); - double fSlow30 = ((fSlow24 * fSlow16) - ((fSlow9 * fSlow10) * fSlow12)); - double fSlow31 = ((fSlow19 * fSlow16) + (fSlow10 * fSlow22)); - double fSlow32 = ((fSlow20 * fSlow10) + (1.0000000000000002 * ((fSlow7 * fSlow19) * fSlow12))); - double fSlow33 = (1.7320508075688772 * (((fSlow1 * fSlow7) * fSlow11) * fSlow12)); - double fSlow34 = ((fSlow20 * fSlow16) + (1.0000000000000002 * ((fSlow7 * fSlow22) * fSlow12))); - double fSlow35 = ((fSlow16 * fSlow22) - (fSlow19 * fSlow10)); - double fSlow36 = (fSlow16 * fSlow10); - double fSlow37 = (((fSlow3 * fSlow9) * fSlow11) * fSlow12); - double fSlow38 = ((1.1547005383792515 * (fSlow19 * fSlow22)) - (0.5773502691896257 * (fSlow36 + fSlow37))); - double fSlow39 = (fSlow6 * fSlow9); - double fSlow40 = (fSlow7 * fSlow10); - double fSlow41 = ((1.1547005383792515 * ((fSlow1 * fSlow19) * fSlow11)) - (0.5773502691896257 * ((fSlow39 + fSlow40) * fSlow12))); - double fSlow42 = faustpower<2>(fSlow1); - double fSlow43 = faustpower<2>(fSlow11); - double fSlow44 = (fSlow42 * fSlow43); - double fSlow45 = faustpower<2>(fSlow6); - double fSlow46 = faustpower<2>(fSlow7); - double fSlow47 = (fSlow46 * fSlow26); - double fSlow48 = (fSlow45 + fSlow47); - double fSlow49 = (fSlow44 - (0.5 * fSlow48)); - double fSlow50 = (fSlow14 * fSlow11); - double fSlow51 = ((fSlow7 * fSlow16) * fSlow12); - double fSlow52 = ((1.1547005383792515 * (fSlow20 * fSlow22)) - (0.5773502691896257 * (fSlow50 + fSlow51))); - double fSlow53 = (faustpower<2>(fSlow3) * fSlow43); - double fSlow54 = faustpower<2>(fSlow16); - double fSlow55 = (faustpower<2>(fSlow9) * fSlow26); - double fSlow56 = faustpower<2>(fSlow10); - double fSlow57 = ((0.5773502691896257 * (faustpower<2>(fSlow22) - faustpower<2>(fSlow19))) - (0.28867513459481287 * ((fSlow53 + fSlow54) - (fSlow55 + fSlow56)))); - double fSlow58 = (((fSlow9 * fSlow22) * fSlow12) + ((fSlow3 * fSlow19) * fSlow11)); - double fSlow59 = (((fSlow15 * fSlow11) * fSlow12) + (1.0000000000000002 * (fSlow6 * fSlow19))); - double fSlow60 = (fSlow18 * fSlow11); - double fSlow61 = (1.7320508075688772 * fSlow60); - double fSlow62 = ((fSlow4 * fSlow43) + (1.0000000000000002 * (fSlow6 * fSlow22))); - double fSlow63 = ((fSlow24 * fSlow22) - ((fSlow9 * fSlow19) * fSlow12)); - double fSlow64 = (fSlow50 - fSlow51); - double fSlow65 = (fSlow39 - fSlow40); - double fSlow66 = (fSlow65 * fSlow12); - double fSlow67 = (fSlow45 - fSlow47); - double fSlow68 = (0.8660254037844386 * fSlow67); - double fSlow69 = (0 - (2 * (fSlow36 - fSlow37))); - double fSlow70 = ((fSlow53 + fSlow56) - (fSlow55 + fSlow54)); - double fSlow71 = (fSlow6 * fSlow25); - double fSlow72 = (0.5 * (fSlow13 * fSlow69)); - double fSlow73 = (fSlow71 + fSlow72); - double fSlow74 = (fSlow6 * fSlow30); - double fSlow75 = (0.5 * (fSlow13 * fSlow70)); - double fSlow76 = (fSlow74 + fSlow75); - double fSlow77 = (1.7320508075688772 * fSlow45); - double fSlow78 = (fSlow68 + fSlow77); - double fSlow79 = (0.9128709291752769 * ((fSlow78 * fSlow7) * fSlow12)); - double fSlow80 = (fSlow27 * fSlow6); - double fSlow81 = ((fSlow65 * fSlow7) * fSlow26); - double fSlow82 = (fSlow80 + fSlow81); - double fSlow83 = (fSlow6 * fSlow29); - double fSlow84 = (fSlow13 * fSlow64); - double fSlow85 = (fSlow83 + fSlow84); - double fSlow86 = ((fSlow24 * fSlow25) + (fSlow23 * fSlow30)); - double fSlow87 = (0.5 * ((fSlow16 * fSlow69) + (fSlow10 * fSlow70))); - double fSlow88 = (fSlow86 + fSlow87); - double fSlow89 = (fSlow24 * fSlow30); - double fSlow90 = (0.5 * ((fSlow16 * fSlow70) - (fSlow10 * fSlow69))); - double fSlow91 = (fSlow23 * fSlow25); - double fSlow92 = ((fSlow89 + fSlow90) - fSlow91); - double fSlow93 = (((fSlow27 * fSlow1) * fSlow11) + ((fSlow6 * fSlow32) + (fSlow13 * fSlow59))); - double fSlow94 = ((fSlow20 * fSlow29) + ((fSlow6 * fSlow34) + (fSlow13 * fSlow62))); - double fSlow95 = ((fSlow13 * fSlow58) + ((fSlow20 * fSlow25) + (fSlow6 * fSlow31))); - double fSlow96 = (3.872983346207417 * (((fSlow18 * fSlow7) * fSlow11) * fSlow12)); - double fSlow97 = ((fSlow13 * fSlow63) + ((fSlow20 * fSlow30) + (fSlow6 * fSlow35))); - double fSlow98 = (((fSlow22 * fSlow25) + (fSlow19 * fSlow30)) + ((fSlow10 * fSlow63) + ((fSlow23 * fSlow35) + ((fSlow24 * fSlow31) + (fSlow16 * fSlow58))))); - double fSlow99 = (((fSlow22 * fSlow30) - (fSlow19 * fSlow25)) + (((fSlow24 * fSlow35) + (fSlow16 * fSlow63)) - ((fSlow23 * fSlow31) + (fSlow10 * fSlow58)))); - double fSlow100 = (((1.2649110640673518 * (fSlow20 * fSlow31)) + (1.0954451150103324 * ((fSlow38 * fSlow7) * fSlow12))) - (0.31622776601683794 * (fSlow71 - fSlow72))); - double fSlow101 = (((0.5163977794943222 * ((fSlow22 * fSlow31) + (fSlow19 * fSlow35))) + (0.447213595499958 * ((fSlow38 * fSlow16) + (fSlow57 * fSlow10)))) - (0.12909944487358055 * (fSlow86 - fSlow87))); - double fSlow102 = (((fSlow20 * fSlow32) + (0.8660254037844386 * ((fSlow41 * fSlow7) * fSlow12))) - (0.25 * (fSlow80 - fSlow81))); - double fSlow103 = ((1.6329931618554518 * fSlow44) + (0.816496580927726 * fSlow49)); - double fSlow104 = (fSlow103 - (0.23570226039551584 * (fSlow77 - fSlow68))); - double fSlow105 = ((fSlow104 * fSlow7) * fSlow12); - double fSlow106 = (((fSlow20 * fSlow34) + (0.8660254037844386 * ((fSlow52 * fSlow7) * fSlow12))) - (0.25 * (fSlow83 - fSlow84))); - double fSlow107 = (((1.2649110640673518 * (fSlow20 * fSlow35)) + (1.0954451150103324 * ((fSlow57 * fSlow7) * fSlow12))) - (0.31622776601683794 * (fSlow74 - fSlow75))); - double fSlow108 = (((0.5163977794943222 * ((fSlow22 * fSlow35) - (fSlow19 * fSlow31))) + (0.447213595499958 * ((fSlow57 * fSlow16) - (fSlow38 * fSlow10)))) - (0.12909944487358055 * (fSlow89 - (fSlow91 + fSlow90)))); - double fSlow109 = ((fSlow24 * fSlow58) + (fSlow23 * fSlow63)); - double fSlow110 = (fSlow16 * fSlow31); - double fSlow111 = (fSlow10 * fSlow35); - double fSlow112 = ((0.5477225575051661 * ((fSlow38 * fSlow22) + (fSlow57 * fSlow19))) - (0.31622776601683794 * ((fSlow109 + fSlow110) + fSlow111))); - double fSlow113 = (fSlow6 * fSlow58); - double fSlow114 = (fSlow13 * fSlow31); - double fSlow115 = ((1.3416407864998738 * ((fSlow38 * fSlow1) * fSlow11)) - (0.7745966692414834 * (fSlow113 + fSlow114))); - double fSlow116 = (fSlow6 * fSlow59); - double fSlow117 = (fSlow13 * fSlow32); - double fSlow118 = ((1.0606601717798212 * ((fSlow41 * fSlow1) * fSlow11)) - (0.6123724356957945 * (fSlow116 + fSlow117))); - double fSlow119 = (fSlow49 - (0.9999999999999999 * fSlow48)); - double fSlow120 = ((fSlow119 * fSlow1) * fSlow11); - double fSlow121 = (fSlow6 * fSlow62); - double fSlow122 = (fSlow13 * fSlow34); - double fSlow123 = ((1.0606601717798212 * ((fSlow52 * fSlow1) * fSlow11)) - (0.6123724356957945 * (fSlow121 + fSlow122))); - double fSlow124 = (fSlow6 * fSlow63); - double fSlow125 = (fSlow13 * fSlow35); - double fSlow126 = ((1.3416407864998738 * ((fSlow57 * fSlow1) * fSlow11)) - (0.7745966692414834 * (fSlow124 + fSlow125))); - double fSlow127 = (fSlow24 * fSlow63); - double fSlow128 = (fSlow16 * fSlow35); - double fSlow129 = (fSlow23 * fSlow58); - double fSlow130 = (fSlow10 * fSlow31); - double fSlow131 = ((0.5477225575051661 * ((fSlow57 * fSlow22) - (fSlow38 * fSlow19))) - (0.31622776601683794 * ((fSlow127 + fSlow128) - (fSlow129 + fSlow130)))); - double fSlow132 = (0.5 * ((fSlow24 * fSlow69) + (fSlow23 * fSlow70))); - double fSlow133 = (fSlow16 * fSlow25); - double fSlow134 = (fSlow10 * fSlow30); - double fSlow135 = (((0.447213595499958 * (((fSlow38 * fSlow3) * fSlow11) + ((fSlow57 * fSlow9) * fSlow12))) + (0.5163977794943222 * ((fSlow22 * fSlow58) + (fSlow19 * fSlow63)))) - (0.12909944487358055 * ((fSlow132 + fSlow133) + fSlow134))); - double fSlow136 = (0.5 * (fSlow6 * fSlow69)); - double fSlow137 = (fSlow13 * fSlow25); - double fSlow138 = (((1.2649110640673518 * (fSlow20 * fSlow58)) + (1.0954451150103324 * (fSlow38 * fSlow6))) - (0.31622776601683794 * (fSlow136 + fSlow137))); - double fSlow139 = (fSlow65 * fSlow6); - double fSlow140 = (fSlow27 * fSlow7); - double fSlow141 = (((fSlow20 * fSlow59) + (0.8660254037844386 * (fSlow41 * fSlow6))) - (0.25 * ((fSlow139 + fSlow140) * fSlow12))); - double fSlow142 = (1.7320508075688772 * fSlow47); - double fSlow143 = (fSlow103 - (0.23570226039551584 * (fSlow68 + fSlow142))); - double fSlow144 = (fSlow143 * fSlow6); - double fSlow145 = (fSlow6 * fSlow64); - double fSlow146 = (fSlow13 * fSlow29); - double fSlow147 = (((fSlow20 * fSlow62) + (0.8660254037844386 * (fSlow52 * fSlow6))) - (0.25 * (fSlow145 + fSlow146))); - double fSlow148 = (0.5 * (fSlow6 * fSlow70)); - double fSlow149 = (fSlow13 * fSlow30); - double fSlow150 = (((1.2649110640673518 * (fSlow20 * fSlow63)) + (1.0954451150103324 * (fSlow57 * fSlow6))) - (0.31622776601683794 * (fSlow148 + fSlow149))); - double fSlow151 = (fSlow16 * fSlow30); - double fSlow152 = (0.5 * ((fSlow24 * fSlow70) - (fSlow23 * fSlow69))); - double fSlow153 = (fSlow10 * fSlow25); - double fSlow154 = (((0.5163977794943222 * ((fSlow22 * fSlow63) - (fSlow19 * fSlow58))) + (0.447213595499958 * (((fSlow57 * fSlow3) * fSlow11) - ((fSlow38 * fSlow9) * fSlow12)))) - (0.12909944487358055 * ((fSlow151 + fSlow152) - fSlow153))); - double fSlow155 = (((0.5 * (fSlow20 * fSlow70)) + fSlow124) - fSlow125); - double fSlow156 = ((0.2041241452319315 * ((fSlow22 * fSlow70) - (fSlow19 * fSlow69))) + (0.408248290463863 * ((fSlow127 + fSlow130) - (fSlow128 + fSlow129)))); - double fSlow157 = ((0.2041241452319315 * ((fSlow22 * fSlow69) + (fSlow19 * fSlow70))) + (0.408248290463863 * (fSlow109 - (fSlow110 + fSlow111)))); - double fSlow158 = (((0.5 * (fSlow20 * fSlow69)) + fSlow113) - fSlow114); - double fSlow159 = (1.9364916731037085 * ((fSlow67 * fSlow1) * fSlow11)); - double fSlow160 = ((((fSlow65 * fSlow1) * fSlow11) * fSlow12) + (fSlow116 - fSlow117)); - double fSlow161 = ((fSlow20 * fSlow64) + (fSlow121 - fSlow122)); - double fSlow162 = (fSlow139 - fSlow140); - double fSlow163 = (fSlow162 * fSlow12); - double fSlow164 = (fSlow145 - fSlow146); - double fSlow165 = (fSlow148 - fSlow149); - double fSlow166 = (fSlow136 - fSlow137); - double fSlow167 = ((fSlow152 + fSlow153) - fSlow151); - double fSlow168 = (fSlow132 - (fSlow133 + fSlow134)); - double fSlow169 = (fSlow68 - fSlow142); - double fSlow170 = (0.9128709291752769 * (fSlow169 * fSlow6)); - double fSlow171 = (fSlow6 * fSlow88); - double fSlow172 = (fSlow13 * fSlow168); - double fSlow173 = (fSlow171 + fSlow172); - double fSlow174 = (fSlow6 * fSlow92); - double fSlow175 = (fSlow13 * fSlow167); - double fSlow176 = (fSlow174 + fSlow175); - double fSlow177 = (0.8539125638299666 * ((((fSlow169 + fSlow78) * fSlow6) * fSlow7) * fSlow12)); - double fSlow178 = (fSlow82 * fSlow6); - double fSlow179 = ((fSlow162 * fSlow7) * fSlow26); - double fSlow180 = (fSlow178 + fSlow179); - double fSlow181 = (fSlow6 * fSlow85); - double fSlow182 = (fSlow13 * fSlow164); - double fSlow183 = (fSlow181 + fSlow182); - double fSlow184 = (fSlow73 * fSlow6); - double fSlow185 = ((fSlow166 * fSlow7) * fSlow12); - double fSlow186 = (fSlow184 + fSlow185); - double fSlow187 = (fSlow6 * fSlow76); - double fSlow188 = (fSlow13 * fSlow165); - double fSlow189 = (fSlow187 + fSlow188); - double fSlow190 = ((fSlow24 * fSlow88) + (fSlow23 * fSlow92)); - double fSlow191 = ((fSlow10 * fSlow167) + (fSlow16 * fSlow168)); - double fSlow192 = (fSlow190 + fSlow191); - double fSlow193 = ((fSlow24 * fSlow92) - (fSlow23 * fSlow88)); - double fSlow194 = ((fSlow16 * fSlow167) - (fSlow10 * fSlow168)); - double fSlow195 = (fSlow193 + fSlow194); - double fSlow196 = (fSlow6 * fSlow94); - double fSlow197 = (fSlow13 * fSlow161); - double fSlow198 = ((0.6614378277661476 * (fSlow20 * fSlow85)) + (0.6614378277661477 * (fSlow196 + fSlow197))); - double fSlow199 = (3.872983346207417 * fSlow45); - double fSlow200 = (1.9364916731037085 * fSlow67); - double fSlow201 = ((((((0.8100925873009825 * (fSlow199 + fSlow200)) + (0.60380736442456 * fSlow78)) * fSlow1) * fSlow7) * fSlow11) * fSlow12); - double fSlow202 = (0.408248290463863 * (fSlow6 * fSlow98)); - double fSlow203 = (fSlow13 * fSlow157); - double fSlow204 = ((0.5 * (fSlow20 * fSlow88)) + (1.224744871391589 * (fSlow202 + fSlow203))); - double fSlow205 = (0.408248290463863 * ((fSlow24 * fSlow98) + (fSlow23 * fSlow99))); - double fSlow206 = (fSlow16 * fSlow157); - double fSlow207 = (fSlow10 * fSlow156); - double fSlow208 = ((0.1767766952966369 * ((fSlow22 * fSlow88) + (fSlow19 * fSlow92))) + (0.4330127018922193 * ((fSlow205 + fSlow206) + fSlow207))); - double fSlow209 = (fSlow6 * fSlow93); - double fSlow210 = (fSlow13 * fSlow160); - double fSlow211 = ((0.6614378277661476 * ((fSlow82 * fSlow1) * fSlow11)) + (0.6614378277661477 * (fSlow209 + fSlow210))); - double fSlow212 = (fSlow6 * fSlow95); - double fSlow213 = (fSlow13 * fSlow158); - double fSlow214 = (((fSlow73 * fSlow1) * fSlow11) + (fSlow212 + fSlow213)); - double fSlow215 = (fSlow6 * fSlow97); - double fSlow216 = (fSlow13 * fSlow155); - double fSlow217 = ((fSlow20 * fSlow76) + (fSlow215 + fSlow216)); - double fSlow218 = (0.408248290463863 * ((fSlow24 * fSlow99) - (fSlow23 * fSlow98))); - double fSlow219 = (fSlow16 * fSlow156); - double fSlow220 = (fSlow10 * fSlow157); - double fSlow221 = ((0.1767766952966369 * ((fSlow22 * fSlow92) - (fSlow19 * fSlow88))) + (0.4330127018922193 * ((fSlow218 + fSlow219) - fSlow220))); - double fSlow222 = (0.408248290463863 * (fSlow6 * fSlow99)); - double fSlow223 = (fSlow13 * fSlow156); - double fSlow224 = ((0.5 * (fSlow20 * fSlow92)) + (1.224744871391589 * (fSlow222 + fSlow223))); - double fSlow225 = (((fSlow20 * fSlow97) + (0.7905694150420949 * ((fSlow107 * fSlow6) + ((fSlow150 * fSlow7) * fSlow12)))) - (0.24999999999999997 * (fSlow187 - fSlow188))); - double fSlow226 = (((0.5345224838248487 * (fSlow20 * fSlow99)) + (1.0350983390135313 * ((fSlow108 * fSlow6) + ((fSlow154 * fSlow7) * fSlow12)))) - (0.1336306209562122 * (fSlow174 - fSlow175))); - double fSlow227 = (((0.1889822365046136 * ((fSlow22 * fSlow99) - (fSlow19 * fSlow98))) + (0.36596252735569995 * ((((fSlow108 * fSlow3) * fSlow11) + (fSlow154 * fSlow16)) - (((fSlow101 * fSlow9) * fSlow12) + (fSlow135 * fSlow10))))) - (0.0472455591261534 * (fSlow193 - fSlow194))); - double fSlow228 = (((0.1889822365046136 * ((fSlow22 * fSlow98) + (fSlow19 * fSlow99))) + (0.36596252735569995 * ((fSlow154 * fSlow10) + ((((fSlow101 * fSlow3) * fSlow11) + ((fSlow108 * fSlow9) * fSlow12)) + (fSlow135 * fSlow16))))) - (0.0472455591261534 * (fSlow190 - fSlow191))); - double fSlow229 = (((0.5345224838248487 * (fSlow20 * fSlow98)) + (1.0350983390135313 * ((fSlow101 * fSlow6) + ((fSlow135 * fSlow7) * fSlow12)))) - (0.1336306209562122 * (fSlow171 - fSlow172))); - double fSlow230 = (((fSlow20 * fSlow95) + (0.7905694150420949 * ((fSlow100 * fSlow6) + ((fSlow138 * fSlow7) * fSlow12)))) - (0.24999999999999997 * (fSlow184 - fSlow185))); - double fSlow231 = ((0.7071067811865476 * ((fSlow20 * fSlow93) + ((fSlow102 * fSlow6) + ((fSlow141 * fSlow7) * fSlow12)))) - (0.17677669529663687 * (fSlow178 - fSlow179))); - double fSlow232 = ((((((0.6846531968814576 * (fSlow143 + fSlow104)) + (3.3541019662496843 * fSlow44)) * fSlow6) * fSlow7) * fSlow12) - (0.1767766952966369 * (0 - (0.9128709291752769 * ((((fSlow169 - fSlow78) * fSlow6) * fSlow7) * fSlow12))))); - double fSlow233 = ((0.7071067811865476 * ((fSlow20 * fSlow94) + ((fSlow106 * fSlow6) + ((fSlow147 * fSlow7) * fSlow12)))) - (0.17677669529663687 * (fSlow181 - fSlow182))); - double fSlow234 = (((0.5175491695067657 * ((fSlow101 * fSlow22) + (fSlow108 * fSlow19))) + (0.4225771273642583 * ((fSlow112 * fSlow16) + (fSlow131 * fSlow10)))) - (0.16366341767699427 * (fSlow205 - (fSlow206 + fSlow207)))); - double fSlow235 = (((1.4638501094227998 * ((fSlow101 * fSlow1) * fSlow11)) + (1.1952286093343938 * ((fSlow112 * fSlow7) * fSlow12))) - (0.4629100498862757 * (fSlow202 - fSlow203))); - double fSlow236 = (((1.118033988749895 * ((fSlow100 * fSlow1) * fSlow11)) + (0.9128709291752769 * ((fSlow115 * fSlow7) * fSlow12))) - (0.3535533905932738 * (fSlow212 - fSlow213))); - double fSlow237 = ((((fSlow102 * fSlow1) * fSlow11) + (0.816496580927726 * ((fSlow118 * fSlow7) * fSlow12))) - (0.25 * (fSlow209 - fSlow210))); - double fSlow238 = (0.7905694150420949 * fSlow119); - double fSlow239 = (((((((0.9682458365518543 * fSlow104) + fSlow238) - (0.30618621784789724 * (fSlow199 - fSlow200))) * fSlow1) * fSlow7) * fSlow11) * fSlow12); - double fSlow240 = ((((fSlow106 * fSlow1) * fSlow11) + (0.816496580927726 * ((fSlow123 * fSlow7) * fSlow12))) - (0.25 * (fSlow196 - fSlow197))); - double fSlow241 = (((1.118033988749895 * ((fSlow107 * fSlow1) * fSlow11)) + (0.9128709291752769 * ((fSlow126 * fSlow7) * fSlow12))) - (0.3535533905932738 * (fSlow215 - fSlow216))); - double fSlow242 = (((1.4638501094227998 * ((fSlow108 * fSlow1) * fSlow11)) + (1.1952286093343938 * ((fSlow131 * fSlow7) * fSlow12))) - (0.4629100498862757 * (fSlow222 - fSlow223))); - double fSlow243 = (((0.5175491695067657 * ((fSlow108 * fSlow22) - (fSlow101 * fSlow19))) + (0.4225771273642583 * ((fSlow131 * fSlow16) - (fSlow112 * fSlow10)))) - (0.16366341767699427 * ((fSlow218 + fSlow220) - fSlow219))); - double fSlow244 = (fSlow108 * fSlow10); - double fSlow245 = (((fSlow135 * fSlow3) * fSlow11) + ((fSlow154 * fSlow9) * fSlow12)); - double fSlow246 = (fSlow101 * fSlow16); - double fSlow247 = ((0.5345224838248488 * ((fSlow112 * fSlow22) + (fSlow131 * fSlow19))) - (0.32732683535398854 * (fSlow244 + (fSlow245 + fSlow246)))); - double fSlow248 = (fSlow135 * fSlow6); - double fSlow249 = ((fSlow101 * fSlow7) * fSlow12); - double fSlow250 = ((1.5118578920369088 * ((fSlow112 * fSlow1) * fSlow11)) - (0.9258200997725514 * (fSlow248 + fSlow249))); - double fSlow251 = (fSlow138 * fSlow6); - double fSlow252 = ((fSlow100 * fSlow7) * fSlow12); - double fSlow253 = ((1.1547005383792515 * ((fSlow115 * fSlow1) * fSlow11)) - (0.7071067811865476 * (fSlow251 + fSlow252))); - double fSlow254 = (fSlow141 * fSlow6); - double fSlow255 = ((fSlow102 * fSlow7) * fSlow12); - double fSlow256 = ((1.0327955589886444 * ((fSlow118 * fSlow1) * fSlow11)) - (0.6324555320336759 * (fSlow254 + fSlow255))); - double fSlow257 = (fSlow143 * fSlow45); - double fSlow258 = ((fSlow104 * fSlow46) * fSlow26); - double fSlow259 = (((fSlow119 * fSlow42) * fSlow43) - (0.6123724356957945 * (fSlow257 + fSlow258))); - double fSlow260 = (fSlow147 * fSlow6); - double fSlow261 = ((fSlow106 * fSlow7) * fSlow12); - double fSlow262 = ((1.0327955589886444 * ((fSlow123 * fSlow1) * fSlow11)) - (0.6324555320336759 * (fSlow260 + fSlow261))); - double fSlow263 = (fSlow150 * fSlow6); - double fSlow264 = ((fSlow107 * fSlow7) * fSlow12); - double fSlow265 = ((1.1547005383792515 * ((fSlow126 * fSlow1) * fSlow11)) - (0.7071067811865476 * (fSlow263 + fSlow264))); - double fSlow266 = (fSlow154 * fSlow6); - double fSlow267 = ((fSlow108 * fSlow7) * fSlow12); - double fSlow268 = ((1.5118578920369088 * ((fSlow131 * fSlow1) * fSlow11)) - (0.9258200997725514 * (fSlow266 + fSlow267))); - double fSlow269 = (fSlow108 * fSlow16); - double fSlow270 = ((fSlow154 * fSlow3) * fSlow11); - double fSlow271 = ((fSlow135 * fSlow9) * fSlow12); - double fSlow272 = (fSlow101 * fSlow10); - double fSlow273 = ((0.5345224838248488 * ((fSlow131 * fSlow22) - (fSlow112 * fSlow19))) - (0.32732683535398854 * ((fSlow269 + fSlow270) - (fSlow271 + fSlow272)))); - double fSlow274 = ((fSlow24 * fSlow157) + (fSlow23 * fSlow156)); - double fSlow275 = (0.408248290463863 * ((fSlow16 * fSlow98) + (fSlow10 * fSlow99))); - double fSlow276 = (((0.5175491695067657 * ((fSlow135 * fSlow22) + (fSlow154 * fSlow19))) + (0.4225771273642583 * (((fSlow112 * fSlow3) * fSlow11) + ((fSlow131 * fSlow9) * fSlow12)))) - (0.16366341767699427 * (fSlow274 + fSlow275))); - double fSlow277 = (fSlow6 * fSlow157); - double fSlow278 = (0.408248290463863 * (fSlow13 * fSlow98)); - double fSlow279 = (((1.4638501094227998 * ((fSlow135 * fSlow1) * fSlow11)) + (1.1952286093343938 * (fSlow112 * fSlow6))) - (0.4629100498862757 * (fSlow277 + fSlow278))); - double fSlow280 = (fSlow6 * fSlow158); - double fSlow281 = (fSlow13 * fSlow95); - double fSlow282 = (((1.118033988749895 * ((fSlow138 * fSlow1) * fSlow11)) + (0.9128709291752769 * (fSlow115 * fSlow6))) - (0.3535533905932738 * (fSlow280 + fSlow281))); - double fSlow283 = (fSlow6 * fSlow160); - double fSlow284 = (fSlow13 * fSlow93); - double fSlow285 = ((((fSlow141 * fSlow1) * fSlow11) + (0.816496580927726 * (fSlow118 * fSlow6))) - (0.25 * (fSlow283 + fSlow284))); - double fSlow286 = (3.872983346207417 * fSlow47); - double fSlow287 = ((((((0.9682458365518543 * fSlow143) + fSlow238) - (0.30618621784789724 * (fSlow200 + fSlow286))) * fSlow1) * fSlow6) * fSlow11); - double fSlow288 = (fSlow6 * fSlow161); - double fSlow289 = (fSlow13 * fSlow94); - double fSlow290 = ((((fSlow147 * fSlow1) * fSlow11) + (0.816496580927726 * (fSlow123 * fSlow6))) - (0.25 * (fSlow288 + fSlow289))); - double fSlow291 = (fSlow6 * fSlow155); - double fSlow292 = (fSlow13 * fSlow97); - double fSlow293 = (((1.118033988749895 * ((fSlow150 * fSlow1) * fSlow11)) + (0.9128709291752769 * (fSlow126 * fSlow6))) - (0.3535533905932738 * (fSlow291 + fSlow292))); - double fSlow294 = (fSlow6 * fSlow156); - double fSlow295 = (0.408248290463863 * (fSlow13 * fSlow99)); - double fSlow296 = (((1.4638501094227998 * ((fSlow154 * fSlow1) * fSlow11)) + (1.1952286093343938 * (fSlow131 * fSlow6))) - (0.4629100498862757 * (fSlow294 + fSlow295))); - double fSlow297 = (fSlow24 * fSlow156); - double fSlow298 = (0.408248290463863 * ((fSlow16 * fSlow99) - (fSlow10 * fSlow98))); - double fSlow299 = (fSlow23 * fSlow157); - double fSlow300 = (((0.5175491695067657 * ((fSlow154 * fSlow22) - (fSlow135 * fSlow19))) + (0.4225771273642583 * (((fSlow131 * fSlow3) * fSlow11) - ((fSlow112 * fSlow9) * fSlow12)))) - (0.16366341767699427 * ((fSlow297 + fSlow298) - fSlow299))); - double fSlow301 = ((fSlow24 * fSlow168) + (fSlow23 * fSlow167)); - double fSlow302 = ((fSlow16 * fSlow88) + (fSlow10 * fSlow92)); - double fSlow303 = (((0.36596252735569995 * (fSlow245 - (fSlow246 + fSlow244))) + (0.4629100498862757 * ((fSlow22 * fSlow157) + (fSlow19 * fSlow156)))) - (0.0472455591261534 * (fSlow301 + fSlow302))); - double fSlow304 = (fSlow6 * fSlow168); - double fSlow305 = (fSlow13 * fSlow88); - double fSlow306 = (((1.3093073414159542 * (fSlow20 * fSlow157)) + (1.0350983390135313 * (fSlow248 - fSlow249))) - (0.1336306209562122 * (fSlow304 + fSlow305))); - double fSlow307 = (fSlow166 * fSlow6); - double fSlow308 = ((fSlow73 * fSlow7) * fSlow12); - double fSlow309 = (((fSlow20 * fSlow158) + (0.7905694150420949 * (fSlow251 - fSlow252))) - (0.24999999999999997 * (fSlow307 + fSlow308))); - double fSlow310 = (fSlow162 * fSlow6); - double fSlow311 = (fSlow82 * fSlow7); - double fSlow312 = ((0.7071067811865476 * ((fSlow20 * fSlow160) + (fSlow254 - fSlow255))) - (0.17677669529663687 * ((fSlow310 + fSlow311) * fSlow12))); - double fSlow313 = (fSlow169 * fSlow45); - double fSlow314 = ((fSlow78 * fSlow46) * fSlow26); - double fSlow315 = (((1.6770509831248421 * ((fSlow67 * fSlow42) * fSlow43)) + (0.6846531968814576 * (fSlow257 - fSlow258))) - (0.16137430609197573 * (fSlow313 + fSlow314))); - double fSlow316 = (fSlow6 * fSlow164); - double fSlow317 = (fSlow13 * fSlow85); - double fSlow318 = ((0.7071067811865476 * ((fSlow20 * fSlow161) + (fSlow260 - fSlow261))) - (0.17677669529663687 * (fSlow316 + fSlow317))); - double fSlow319 = (fSlow6 * fSlow165); - double fSlow320 = (fSlow13 * fSlow76); - double fSlow321 = (((fSlow20 * fSlow155) + (0.7905694150420949 * (fSlow263 - fSlow264))) - (0.24999999999999997 * (fSlow319 + fSlow320))); - double fSlow322 = (fSlow6 * fSlow167); - double fSlow323 = (fSlow13 * fSlow92); - double fSlow324 = (((1.3093073414159542 * (fSlow20 * fSlow156)) + (1.0350983390135313 * (fSlow266 - fSlow267))) - (0.1336306209562122 * (fSlow322 + fSlow323))); - double fSlow325 = ((fSlow24 * fSlow167) - (fSlow23 * fSlow168)); - double fSlow326 = ((fSlow16 * fSlow92) - (fSlow10 * fSlow88)); - double fSlow327 = (((0.36596252735569995 * ((fSlow272 + fSlow270) - (fSlow271 + fSlow269))) + (0.4629100498862757 * ((fSlow22 * fSlow156) - (fSlow19 * fSlow157)))) - (0.0472455591261534 * (fSlow325 + fSlow326))); - double fSlow328 = ((0.6614378277661476 * (fSlow20 * fSlow164)) + (0.6614378277661477 * (fSlow288 - fSlow289))); - double fSlow329 = (fSlow60 * ((0.60380736442456 * fSlow169) + (0.8100925873009825 * (fSlow200 - fSlow286)))); - double fSlow330 = ((0.1767766952966369 * ((fSlow22 * fSlow168) + (fSlow19 * fSlow167))) + (0.4330127018922193 * (fSlow274 - fSlow275))); - double fSlow331 = ((0.5 * (fSlow20 * fSlow168)) + (1.224744871391589 * (fSlow277 - fSlow278))); - double fSlow332 = ((0.6614378277661476 * (((fSlow162 * fSlow1) * fSlow11) * fSlow12)) + (0.6614378277661477 * (fSlow283 - fSlow284))); - double fSlow333 = (((fSlow166 * fSlow1) * fSlow11) + (fSlow280 - fSlow281)); - double fSlow334 = ((fSlow20 * fSlow165) + (fSlow291 - fSlow292)); - double fSlow335 = ((0.5 * (fSlow20 * fSlow167)) + (1.224744871391589 * (fSlow294 - fSlow295))); - double fSlow336 = ((0.1767766952966369 * ((fSlow22 * fSlow167) - (fSlow19 * fSlow168))) + (0.4330127018922193 * (fSlow297 - (fSlow299 + fSlow298)))); - double fSlow337 = (fSlow304 - fSlow305); - double fSlow338 = (fSlow322 - fSlow323); - double fSlow339 = (fSlow307 - fSlow308); - double fSlow340 = (fSlow319 - fSlow320); - double fSlow341 = (0.8539125638299666 * (fSlow313 - fSlow314)); - double fSlow342 = ((fSlow310 - fSlow311) * fSlow12); - double fSlow343 = (fSlow316 - fSlow317); - double fSlow344 = (fSlow301 - fSlow302); - double fSlow345 = (fSlow325 - fSlow326); - //zone2b - //zone3 - FAUSTFLOAT* input0 = input[0]; - FAUSTFLOAT* input1 = input[1]; - FAUSTFLOAT* input2 = input[2]; - FAUSTFLOAT* input3 = input[3]; - FAUSTFLOAT* input4 = input[4]; - FAUSTFLOAT* input5 = input[5]; - FAUSTFLOAT* input6 = input[6]; - FAUSTFLOAT* input7 = input[7]; - FAUSTFLOAT* input8 = input[8]; - FAUSTFLOAT* input9 = input[9]; - FAUSTFLOAT* input10 = input[10]; - FAUSTFLOAT* input11 = input[11]; - FAUSTFLOAT* input12 = input[12]; - FAUSTFLOAT* input13 = input[13]; - FAUSTFLOAT* input14 = input[14]; - FAUSTFLOAT* input15 = input[15]; - FAUSTFLOAT* input16 = input[16]; - FAUSTFLOAT* input17 = input[17]; - FAUSTFLOAT* input18 = input[18]; - FAUSTFLOAT* input19 = input[19]; - FAUSTFLOAT* input20 = input[20]; - FAUSTFLOAT* input21 = input[21]; - FAUSTFLOAT* input22 = input[22]; - FAUSTFLOAT* input23 = input[23]; - FAUSTFLOAT* input24 = input[24]; - FAUSTFLOAT* output0 = output[0]; - FAUSTFLOAT* output1 = output[1]; - FAUSTFLOAT* output2 = output[2]; - FAUSTFLOAT* output3 = output[3]; - FAUSTFLOAT* output4 = output[4]; - FAUSTFLOAT* output5 = output[5]; - FAUSTFLOAT* output6 = output[6]; - FAUSTFLOAT* output7 = output[7]; - FAUSTFLOAT* output8 = output[8]; - FAUSTFLOAT* output9 = output[9]; - FAUSTFLOAT* output10 = output[10]; - FAUSTFLOAT* output11 = output[11]; - FAUSTFLOAT* output12 = output[12]; - FAUSTFLOAT* output13 = output[13]; - FAUSTFLOAT* output14 = output[14]; - FAUSTFLOAT* output15 = output[15]; - FAUSTFLOAT* output16 = output[16]; - FAUSTFLOAT* output17 = output[17]; - FAUSTFLOAT* output18 = output[18]; - FAUSTFLOAT* output19 = output[19]; - FAUSTFLOAT* output20 = output[20]; - FAUSTFLOAT* output21 = output[21]; - FAUSTFLOAT* output22 = output[22]; - FAUSTFLOAT* output23 = output[23]; - FAUSTFLOAT* output24 = output[24]; - //LoopGraphScalar - for (int i=0; i Date: Sat, 17 Feb 2018 16:07:19 -0500 Subject: [PATCH 26/30] fix CMakeList typo --- source/CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 24ff8aae4e..caf9d9e298 100755 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -169,11 +169,7 @@ endif() if (CMAKE_COMPILER_IS_CLANG) file(GLOB HOAUGensSources HOAUGens/*cpp) foreach(HOAUGensSourceFile ${HOAUGensSources}) -<<<<<<< HEAD - set_source_files_properties("${HOAUGensSourceFile}" PROPERTIES COMPILE_FLAGS "-fbracket-depth=4096") -======= - set_source_files_properties("${HOAUGensSourceFile}" PROPERTIES COMPILE_FLAGS "-fbracket-depth=2048") ->>>>>>> 53408c5cbb3a5ddb3d38f069794be2dca0de3261 + set_source_files_properties("${HOAUGensSourceFile}" PROPERTIES COMPILE_FLAGS "-fbracket-depth=4096") endforeach(HOAUGensSourceFile) endif() From 2e9ba54e27d375cde5786f590f1f78061ef1e79b Mon Sep 17 00:00:00 2001 From: Thibaud Keller Date: Thu, 26 Apr 2018 12:48:29 +0200 Subject: [PATCH 27/30] added beam pattern option (#4) * added beam pattern option * removed extra files --- ...amDirac2Hoa1.cpp => HOABeamDirac2HOA1.cpp} | 88 +- source/HOAUGens/HOABeamDirac2HOA10.cpp | 1540 +++++++++-------- ...amDirac2Hoa2.cpp => HOABeamDirac2HOA2.cpp} | 128 +- ...amDirac2Hoa3.cpp => HOABeamDirac2HOA3.cpp} | 184 +- ...amDirac2Hoa4.cpp => HOABeamDirac2HOA4.cpp} | 262 +-- ...amDirac2Hoa5.cpp => HOABeamDirac2HOA5.cpp} | 358 ++-- source/HOAUGens/HOABeamDirac2HOA6.cpp | 476 ++--- source/HOAUGens/HOABeamDirac2HOA7.cpp | 698 ++++---- source/HOAUGens/HOABeamDirac2HOA8.cpp | 768 ++++---- source/HOAUGens/HOABeamDirac2HOA9.cpp | 940 +++++----- source/HOAUGens/HOABeamHCardio2HOA1.cpp | 188 +- source/HOAUGens/HOABeamHCardio2HOA2.cpp | 378 ++-- source/HOAUGens/HOABeamHCardio2HOA3.cpp | 630 +++---- source/HOAUGens/HOABeamHCardio2Mono1.cpp | 29 +- source/HOAUGens/HOABeamHCardio2Mono2.cpp | 102 +- source/HOAUGens/HOABeamHCardio2Mono3.cpp | 149 +- source/HOAUGens/HOAEncoder1.cpp | 152 +- source/HOAUGens/HOAEncoder2.cpp | 300 ++-- source/HOAUGens/HOAEncoder3.cpp | 502 +++--- source/HOAUGens/HOAEncoder4.cpp | 788 +++++---- source/HOAUGens/HOAEncoder5.cpp | 1143 ++++++------ ...BeamDirac2Hoa1.sc => HOABeamDirac2HOA1.sc} | 8 +- .../HOAUGens/sc/Classes/HOABeamDirac2HOA10.sc | 8 +- ...BeamDirac2Hoa2.sc => HOABeamDirac2HOA2.sc} | 8 +- ...BeamDirac2Hoa3.sc => HOABeamDirac2HOA3.sc} | 8 +- ...BeamDirac2Hoa4.sc => HOABeamDirac2HOA4.sc} | 8 +- ...BeamDirac2Hoa5.sc => HOABeamDirac2HOA5.sc} | 8 +- .../HOAUGens/sc/Classes/HOABeamDirac2HOA6.sc | 8 +- .../HOAUGens/sc/Classes/HOABeamDirac2HOA7.sc | 8 +- .../HOAUGens/sc/Classes/HOABeamDirac2HOA8.sc | 8 +- .../HOAUGens/sc/Classes/HOABeamDirac2HOA9.sc | 8 +- .../sc/Classes/HOABeamHCardio2HOA1.sc | 8 +- .../sc/Classes/HOABeamHCardio2HOA2.sc | 8 +- .../sc/Classes/HOABeamHCardio2HOA3.sc | 8 +- .../sc/Classes/HOABeamHCardio2Mono1.sc | 8 +- .../sc/Classes/HOABeamHCardio2Mono2.sc | 8 +- .../sc/Classes/HOABeamHCardio2Mono3.sc | 8 +- 37 files changed, 5072 insertions(+), 4859 deletions(-) rename source/HOAUGens/{HOABeamDirac2Hoa1.cpp => HOABeamDirac2HOA1.cpp} (92%) rename source/HOAUGens/{HOABeamDirac2Hoa2.cpp => HOABeamDirac2HOA2.cpp} (87%) rename source/HOAUGens/{HOABeamDirac2Hoa3.cpp => HOABeamDirac2HOA3.cpp} (83%) rename source/HOAUGens/{HOABeamDirac2Hoa4.cpp => HOABeamDirac2HOA4.cpp} (78%) rename source/HOAUGens/{HOABeamDirac2Hoa5.cpp => HOABeamDirac2HOA5.cpp} (73%) rename source/HOAUGens/sc/Classes/{HOABeamDirac2Hoa1.sc => HOABeamDirac2HOA1.sc} (76%) rename source/HOAUGens/sc/Classes/{HOABeamDirac2Hoa2.sc => HOABeamDirac2HOA2.sc} (68%) rename source/HOAUGens/sc/Classes/{HOABeamDirac2Hoa3.sc => HOABeamDirac2HOA3.sc} (80%) rename source/HOAUGens/sc/Classes/{HOABeamDirac2Hoa4.sc => HOABeamDirac2HOA4.sc} (86%) rename source/HOAUGens/sc/Classes/{HOABeamDirac2Hoa5.sc => HOABeamDirac2HOA5.sc} (87%) diff --git a/source/HOAUGens/HOABeamDirac2Hoa1.cpp b/source/HOAUGens/HOABeamDirac2HOA1.cpp similarity index 92% rename from source/HOAUGens/HOABeamDirac2Hoa1.cpp rename to source/HOAUGens/HOABeamDirac2HOA1.cpp index daf21a3f9e..5d66991611 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa1.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA1.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA1" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -637,17 +637,19 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; FAUSTFLOAT fEntry0; double fRec0[2]; double fRec1[2]; + FAUSTFLOAT fVslider0; double fConst2; double fConst3; - FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -660,6 +662,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA1"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -773,10 +776,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -826,18 +831,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -851,41 +860,44 @@ class mydsp : public dsp { FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = pow((1.0 - mydsp_faustpower2_f(fSlow7)), 0.5); - double fSlow9 = (fConst3 * fSlow8); - double fSlow10 = double(fVslider1); - double fSlow11 = sin(fSlow10); - double fSlow12 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow13 = cos(fSlow10); - double fSlow14 = (1.7320508075688772 * fSlow7); - double fSlow15 = (fConst4 * (fSlow8 * fSlow11)); - double fSlow16 = (0.13783222385544802 * fSlow7); - double fSlow17 = (fConst4 * (fSlow13 * fSlow8)); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = pow((1.0 - mydsp_faustpower2_f(fSlow10)), 0.5); + double fSlow12 = (fConst3 * fSlow11); + double fSlow13 = double(fVslider2); + double fSlow14 = sin(fSlow13); + double fSlow15 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow16 = cos(fSlow13); + double fSlow17 = (1.7320508075688772 * fSlow10); + double fSlow18 = (fConst4 * (fSlow11 * fSlow14)); + double fSlow19 = (0.13783222385544802 * fSlow10); + double fSlow20 = (fConst4 * (fSlow16 * fSlow11)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow12 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow15 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input1[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input3[i]); double fTemp5 = double(input2[i]); - double fTemp6 = ((fSlow9 * ((fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + ((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow14 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5)))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp6))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow15 * fTemp6))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow16 * fTemp6))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow17 * fTemp6))); + double fTemp6 = ((fSlow12 * ((fSlow14 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + ((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow17 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5))))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp6))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow18 * fTemp6))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow19 * fTemp6))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow20 * fTemp6))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2HOA10.cpp b/source/HOAUGens/HOABeamDirac2HOA10.cpp index 75a92ba532..c0267dea55 100644 --- a/source/HOAUGens/HOABeamDirac2HOA10.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA10.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA10" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -649,6 +649,7 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; @@ -656,12 +657,13 @@ class mydsp : public dsp { double fRec0[2]; double fRec1[2]; FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; double fConst2; double fConst3; double fConst4; double fConst5; - FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -904,6 +906,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA10"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -2019,164 +2022,164 @@ class mydsp : public dsp { fConst73 = (0.70710678118654757 * fConst64); fConst74 = (sqrt((21.0 * (fConst3 / double(tgamma(21.0))))) * double(tgamma(10.5))); fConst75 = (817.03379026213418 * fConst74); - fConst76 = double(tgamma(5.5)); - fConst77 = sqrt((11.0 * (fConst3 / fConst30))); - fConst78 = (25.532305945691693 * fConst77); - fConst79 = sqrt((13.0 * (fConst6 / fConst37))); - fConst80 = (280.85536540260864 * fConst79); - fConst81 = sqrt((15.0 * (fConst15 / fConst26))); - fConst82 = (0.70710678118654757 * fConst81); - fConst83 = sqrt((17.0 * (fConst21 / fConst43))); - fConst84 = (0.47140452079103168 * fConst83); - fConst85 = sqrt((19.0 * (fConst4 / fConst46))); - fConst86 = (0.35355339059327379 * fConst85); - fConst87 = sqrt((21.0 * (fConst7 / fConst58))); - fConst88 = (0.28284271247461906 * fConst87); - fConst89 = double(tgamma(3.5)); - fConst90 = sqrt((7.0 * (fConst3 / fConst16))); - fConst91 = (6.3830764864229232 * fConst90); - fConst92 = sqrt((9.0 * (fConst6 / fConst22))); - fConst93 = (44.681535404960464 * fConst92); - fConst94 = sqrt((11.0 * (fConst15 / fConst11))); - fConst95 = (0.70710678118654757 * fConst94); - fConst96 = sqrt((13.0 * (fConst21 / fConst40))); - fConst97 = (0.47140452079103168 * fConst96); - fConst98 = sqrt((15.0 * (fConst4 / fConst30))); - fConst99 = (0.35355339059327379 * fConst98); - fConst100 = sqrt((17.0 * (fConst7 / fConst37))); - fConst101 = (0.28284271247461906 * fConst100); - fConst102 = sqrt((19.0 * (fConst16 / fConst26))); - fConst103 = (0.23570226039551584 * fConst102); - fConst104 = sqrt((21.0 * (fConst22 / fConst43))); - fConst105 = (0.20203050891044216 * fConst104); - fConst106 = double(tgamma(1.5)); - fConst107 = sqrt((3.0 * (fConst3 / fConst15))); - fConst108 = (1.5957691216057308 * fConst107); - fConst109 = sqrt((5.0 * (fConst6 / fConst21))); - fConst110 = (4.7873073648171927 * fConst109); - fConst111 = sqrt((7.0 * (fConst15 / fConst4))); - fConst112 = (0.70710678118654757 * fConst111); - fConst113 = sqrt((9.0 * (fConst21 / fConst7))); - fConst114 = (0.47140452079103168 * fConst113); - fConst115 = sqrt((11.0 * (fConst4 / fConst16))); - fConst116 = (0.35355339059327379 * fConst115); - fConst117 = sqrt((13.0 * (fConst7 / fConst22))); - fConst118 = (0.28284271247461906 * fConst117); - fConst119 = sqrt((15.0 * (fConst16 / fConst11))); - fConst120 = (0.23570226039551584 * fConst119); - fConst121 = sqrt((17.0 * (fConst22 / fConst40))); - fConst122 = (0.20203050891044216 * fConst121); - fConst123 = sqrt((19.0 * (fConst11 / fConst30))); - fConst124 = (0.17677669529663689 * fConst123); - fConst125 = sqrt((21.0 * (fConst40 / fConst37))); - fConst126 = (0.15713484026367722 * fConst125); - fConst127 = sqrt((15.0 * (fConst3 / fConst46))); - fConst128 = double(tgamma(7.5)); - fConst129 = (fConst127 * fConst128); - fConst130 = (102.12922378276677 * fConst129); - fConst131 = (0.56568542494923812 * fConst41); - fConst132 = (408.51689513106709 * fConst56); - fConst133 = (0.70710678118654757 * fConst52); - fConst134 = sqrt((19.0 * (fConst3 / fConst63))); - fConst135 = double(tgamma(9.5)); - fConst136 = (fConst134 * fConst135); - fConst137 = (408.51689513106709 * fConst136); - fConst138 = (sqrt((19.0 * (fConst7 / fConst43))) * fConst12); - fConst139 = (0.56568542494923812 * fConst138); - fConst140 = (0.35355339059327379 * fConst68); - fConst141 = (sqrt((11.0 * (fConst6 / fConst40))) * fConst12); - fConst142 = (229.79075351122526 * fConst141); - fConst143 = (114.89537675561263 * fConst141); - fConst144 = (0.47140452079103168 * fConst38); - fConst145 = double(tgamma(18.0)); - fConst146 = (sqrt((19.0 * (fConst6 / fConst145))) * fConst55); - fConst147 = (6944.7872172281404 * fConst146); - fConst148 = (0.40406101782088433 * fConst61); - fConst149 = (0.28284271247461906 * fConst138); - fConst150 = (3472.3936086140702 * fConst146); - fConst151 = (102.12922378276677 * fConst127); - fConst152 = sqrt((17.0 * (fConst6 / fConst58))); - fConst153 = (1531.9383567415016 * fConst152); - fConst154 = sqrt((19.0 * (fConst15 / fConst54))); - fConst155 = (0.70710678118654757 * fConst154); - fConst156 = sqrt((21.0 * (fConst21 / fConst145))); - fConst157 = (0.47140452079103168 * fConst156); - fConst158 = (408.51689513106709 * fConst134); - fConst159 = sqrt((21.0 * (fConst6 / double(tgamma(20.0))))); - fConst160 = (7761.8210074902745 * fConst159); - fConst161 = (0.12698727186848197 * (fConst107 * fConst106)); + fConst76 = double(tgamma(9.5)); + fConst77 = sqrt((19.0 * (fConst3 / fConst63))); + fConst78 = (408.51689513106709 * fConst77); + fConst79 = sqrt((21.0 * (fConst6 / double(tgamma(20.0))))); + fConst80 = (7761.8210074902745 * fConst79); + fConst81 = double(tgamma(7.5)); + fConst82 = sqrt((15.0 * (fConst3 / fConst46))); + fConst83 = (102.12922378276677 * fConst82); + fConst84 = sqrt((17.0 * (fConst6 / fConst58))); + fConst85 = (1531.9383567415016 * fConst84); + fConst86 = sqrt((19.0 * (fConst15 / fConst54))); + fConst87 = (0.70710678118654757 * fConst86); + fConst88 = double(tgamma(18.0)); + fConst89 = sqrt((21.0 * (fConst21 / fConst88))); + fConst90 = (0.47140452079103168 * fConst89); + fConst91 = double(tgamma(5.5)); + fConst92 = sqrt((11.0 * (fConst3 / fConst30))); + fConst93 = (25.532305945691693 * fConst92); + fConst94 = sqrt((13.0 * (fConst6 / fConst37))); + fConst95 = (280.85536540260864 * fConst94); + fConst96 = sqrt((15.0 * (fConst15 / fConst26))); + fConst97 = (0.70710678118654757 * fConst96); + fConst98 = sqrt((17.0 * (fConst21 / fConst43))); + fConst99 = (0.47140452079103168 * fConst98); + fConst100 = sqrt((19.0 * (fConst4 / fConst46))); + fConst101 = (0.35355339059327379 * fConst100); + fConst102 = sqrt((21.0 * (fConst7 / fConst58))); + fConst103 = (0.28284271247461906 * fConst102); + fConst104 = double(tgamma(3.5)); + fConst105 = sqrt((7.0 * (fConst3 / fConst16))); + fConst106 = (6.3830764864229232 * fConst105); + fConst107 = sqrt((9.0 * (fConst6 / fConst22))); + fConst108 = (44.681535404960464 * fConst107); + fConst109 = sqrt((11.0 * (fConst15 / fConst11))); + fConst110 = (0.70710678118654757 * fConst109); + fConst111 = sqrt((13.0 * (fConst21 / fConst40))); + fConst112 = (0.47140452079103168 * fConst111); + fConst113 = sqrt((15.0 * (fConst4 / fConst30))); + fConst114 = (0.35355339059327379 * fConst113); + fConst115 = sqrt((17.0 * (fConst7 / fConst37))); + fConst116 = (0.28284271247461906 * fConst115); + fConst117 = sqrt((19.0 * (fConst16 / fConst26))); + fConst118 = (0.23570226039551584 * fConst117); + fConst119 = sqrt((21.0 * (fConst22 / fConst43))); + fConst120 = (0.20203050891044216 * fConst119); + fConst121 = double(tgamma(1.5)); + fConst122 = sqrt((3.0 * (fConst3 / fConst15))); + fConst123 = (1.5957691216057308 * fConst122); + fConst124 = sqrt((5.0 * (fConst6 / fConst21))); + fConst125 = (4.7873073648171927 * fConst124); + fConst126 = sqrt((7.0 * (fConst15 / fConst4))); + fConst127 = (0.70710678118654757 * fConst126); + fConst128 = sqrt((9.0 * (fConst21 / fConst7))); + fConst129 = (0.47140452079103168 * fConst128); + fConst130 = sqrt((11.0 * (fConst4 / fConst16))); + fConst131 = (0.35355339059327379 * fConst130); + fConst132 = sqrt((13.0 * (fConst7 / fConst22))); + fConst133 = (0.28284271247461906 * fConst132); + fConst134 = sqrt((15.0 * (fConst16 / fConst11))); + fConst135 = (0.23570226039551584 * fConst134); + fConst136 = sqrt((17.0 * (fConst22 / fConst40))); + fConst137 = (0.20203050891044216 * fConst136); + fConst138 = sqrt((19.0 * (fConst11 / fConst30))); + fConst139 = (0.17677669529663689 * fConst138); + fConst140 = sqrt((21.0 * (fConst40 / fConst37))); + fConst141 = (0.15713484026367722 * fConst140); + fConst142 = (fConst82 * fConst81); + fConst143 = (102.12922378276677 * fConst142); + fConst144 = (0.56568542494923812 * fConst41); + fConst145 = (408.51689513106709 * fConst56); + fConst146 = (0.70710678118654757 * fConst52); + fConst147 = (fConst77 * fConst76); + fConst148 = (408.51689513106709 * fConst147); + fConst149 = (sqrt((19.0 * (fConst7 / fConst43))) * fConst12); + fConst150 = (0.56568542494923812 * fConst149); + fConst151 = (0.35355339059327379 * fConst68); + fConst152 = (sqrt((11.0 * (fConst6 / fConst40))) * fConst12); + fConst153 = (229.79075351122526 * fConst152); + fConst154 = (114.89537675561263 * fConst152); + fConst155 = (0.47140452079103168 * fConst38); + fConst156 = (sqrt((19.0 * (fConst6 / fConst88))) * fConst55); + fConst157 = (6944.7872172281404 * fConst156); + fConst158 = (0.40406101782088433 * fConst61); + fConst159 = (0.28284271247461906 * fConst149); + fConst160 = (3472.3936086140702 * fConst156); + fConst161 = (0.12698727186848197 * (fConst122 * fConst121)); fConst162 = (fConst5 * fConst2); fConst163 = (0.50794908747392786 * fConst162); - fConst164 = (0.3809618156054459 * (fConst109 * fConst106)); + fConst164 = (0.3809618156054459 * (fConst124 * fConst121)); fConst165 = (0.25397454373696393 * fConst162); - fConst166 = (0.50794908747392786 * (fConst90 * fConst89)); + fConst166 = (0.50794908747392786 * (fConst105 * fConst104)); fConst167 = (fConst8 * fConst2); fConst168 = (2.5397454373696391 * fConst167); - fConst169 = (0.056269769759819135 * (fConst111 * fConst106)); + fConst169 = (0.056269769759819135 * (fConst126 * fConst121)); fConst170 = (1.2698727186848195 * fConst167); fConst171 = (2.0317963498957115 * fConst13); - fConst172 = (3.5556436123174948 * (fConst92 * fConst89)); + fConst172 = (3.5556436123174948 * (fConst107 * fConst104)); fConst173 = (0.11253953951963827 * fConst17); - fConst174 = (0.037513179839879424 * (fConst113 * fConst106)); + fConst174 = (0.037513179839879424 * (fConst128 * fConst121)); fConst175 = (0.056269769759819135 * fConst17); fConst176 = (1.0158981749478557 * fConst13); - fConst177 = (2.0317963498957115 * (fConst77 * fConst76)); - fConst178 = (18.286167149061402 * fConst141); - fConst179 = (0.056269769759819135 * (fConst94 * fConst89)); + fConst177 = (2.0317963498957115 * (fConst92 * fConst91)); + fConst178 = (18.286167149061402 * fConst152); + fConst179 = (0.056269769759819135 * (fConst109 * fConst104)); fConst180 = (0.075026359679758847 * fConst23); - fConst181 = (0.028134884879909568 * (fConst115 * fConst106)); + fConst181 = (0.028134884879909568 * (fConst130 * fConst121)); fConst182 = (0.037513179839879424 * fConst23); - fConst183 = (9.1430835745307011 * fConst141); + fConst183 = (9.1430835745307011 * fConst152); fConst184 = (4.0635926997914229 * fConst28); - fConst185 = (22.349759848852827 * (fConst79 * fConst76)); + fConst185 = (22.349759848852827 * (fConst94 * fConst91)); fConst186 = (0.11253953951963827 * fConst31); - fConst187 = (0.037513179839879424 * (fConst96 * fConst89)); + fConst187 = (0.037513179839879424 * (fConst111 * fConst104)); fConst188 = (0.056269769759819135 * fConst33); - fConst189 = (0.022507907903927659 * (fConst117 * fConst106)); + fConst189 = (0.022507907903927659 * (fConst132 * fConst121)); fConst190 = (0.028134884879909568 * fConst33); fConst191 = (0.056269769759819135 * fConst31); - fConst192 = (8.1271853995828458 * fConst129); + fConst192 = (8.1271853995828458 * fConst142); fConst193 = (52.826705097288496 * fConst44); - fConst194 = (0.056269769759819135 * (fConst81 * fConst76)); + fConst194 = (0.056269769759819135 * (fConst96 * fConst91)); fConst195 = (0.075026359679758847 * fConst38); - fConst196 = (0.028134884879909568 * (fConst98 * fConst89)); + fConst196 = (0.028134884879909568 * (fConst113 * fConst104)); fConst197 = (0.045015815807855318 * fConst41); - fConst198 = (0.018756589919939712 * (fConst119 * fConst106)); + fConst198 = (0.018756589919939712 * (fConst134 * fConst121)); fConst199 = (0.022507907903927659 * fConst41); fConst200 = (0.037513179839879424 * fConst38); fConst201 = (32.508741598331383 * fConst56); - fConst202 = (121.90778099374268 * (fConst152 * fConst128)); + fConst202 = (121.90778099374268 * (fConst84 * fConst81)); fConst203 = (0.056269769759819135 * fConst47); - fConst204 = (0.037513179839879424 * (fConst83 * fConst76)); + fConst204 = (0.037513179839879424 * (fConst98 * fConst91)); fConst205 = (0.056269769759819135 * fConst52); - fConst206 = (0.022507907903927659 * (fConst100 * fConst89)); + fConst206 = (0.022507907903927659 * (fConst115 * fConst104)); fConst207 = (0.037513179839879424 * fConst49); - fConst208 = (0.016077077074234038 * (fConst121 * fConst106)); + fConst208 = (0.016077077074234038 * (fConst136 * fConst121)); fConst209 = (0.018756589919939712 * fConst49); fConst210 = (0.028134884879909568 * fConst52); fConst211 = (16.254370799165692 * fConst56); - fConst212 = (32.508741598331383 * fConst136); - fConst213 = (552.64860717163344 * fConst146); - fConst214 = (0.056269769759819135 * (fConst154 * fConst128)); + fConst212 = (32.508741598331383 * fConst147); + fConst213 = (552.64860717163344 * fConst156); + fConst214 = (0.056269769759819135 * (fConst86 * fConst81)); fConst215 = (0.037513179839879424 * fConst59); - fConst216 = (0.028134884879909568 * (fConst85 * fConst76)); - fConst217 = (0.045015815807855318 * fConst138); - fConst218 = (0.018756589919939712 * (fConst102 * fConst89)); + fConst216 = (0.028134884879909568 * (fConst100 * fConst91)); + fConst217 = (0.045015815807855318 * fConst149); + fConst218 = (0.018756589919939712 * (fConst117 * fConst104)); fConst219 = (0.032154154148468075 * fConst61); - fConst220 = (0.014067442439954784 * (fConst123 * fConst106)); + fConst220 = (0.014067442439954784 * (fConst138 * fConst121)); fConst221 = (0.016077077074234038 * fConst61); - fConst222 = (0.022507907903927659 * fConst138); - fConst223 = (276.32430358581672 * fConst146); + fConst222 = (0.022507907903927659 * fConst149); + fConst223 = (276.32430358581672 * fConst156); fConst224 = (65.017483196662766 * fConst74); - fConst225 = (617.66609036829618 * (fConst159 * fConst135)); + fConst225 = (617.66609036829618 * (fConst79 * fConst76)); fConst226 = (0.11253953951963827 * fConst64); - fConst227 = (0.037513179839879424 * (fConst156 * fConst128)); + fConst227 = (0.037513179839879424 * (fConst89 * fConst81)); fConst228 = (0.028134884879909568 * fConst71); - fConst229 = (0.022507907903927659 * (fConst87 * fConst76)); + fConst229 = (0.022507907903927659 * (fConst102 * fConst91)); fConst230 = (0.037513179839879424 * fConst66); - fConst231 = (0.016077077074234038 * (fConst104 * fConst89)); + fConst231 = (0.016077077074234038 * (fConst119 * fConst104)); fConst232 = (0.028134884879909568 * fConst68); - fConst233 = (0.012504393279959806 * (fConst125 * fConst106)); + fConst233 = (0.012504393279959806 * (fConst140 * fConst121)); fConst234 = (0.014067442439954784 * fConst68); fConst235 = (0.018756589919939712 * fConst66); fConst236 = (0.056269769759819135 * fConst64); @@ -2185,10 +2188,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -2238,18 +2243,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -2497,440 +2506,443 @@ class mydsp : public dsp { FAUSTFLOAT* output118 = outputs[118]; FAUSTFLOAT* output119 = outputs[119]; FAUSTFLOAT* output120 = outputs[120]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = mydsp_faustpower2_f(fSlow7); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); double fSlow9 = (1.0 - fSlow8); - double fSlow10 = double(fVslider1); - double fSlow11 = cos(fSlow10); - double fSlow12 = sin(fSlow10); - double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); - double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow15 = mydsp_faustpower2_f(fSlow11); - double fSlow16 = ((2.0 * fSlow15) + -1.0); - double fSlow17 = (3.1915382432114616 * fSlow16); - double fSlow18 = (fSlow11 * fSlow7); - double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); - double fSlow20 = (fSlow16 * fSlow7); - double fSlow21 = (fConst10 * fSlow20); - double fSlow22 = ((4.0 * fSlow15) + -1.0); - double fSlow23 = (fSlow22 + -1.0); - double fSlow24 = (fSlow23 * fSlow11); - double fSlow25 = (fConst14 * ((fSlow24 * fSlow9) * fSlow12)); - double fSlow26 = ((78.986541696685876 * fSlow8) + -11.283791670955125); - double fSlow27 = (fSlow26 * fSlow11); - double fSlow28 = (fConst18 * (fSlow27 * fSlow12)); - double fSlow29 = (fSlow16 * fSlow26); - double fSlow30 = (fConst19 * fSlow29); - double fSlow31 = ((2.0 * fSlow16) + -1.0); - double fSlow32 = (1.0 - fSlow31); - double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow15))); - double fSlow34 = (fConst20 * (fSlow33 * fSlow9)); - double fSlow35 = ((4.5 * fSlow26) + -67.702750025730751); - double fSlow36 = ((fSlow35 * fSlow11) * fSlow7); - double fSlow37 = (fConst24 * (fSlow36 * fSlow12)); - double fSlow38 = ((fSlow16 * fSlow35) * fSlow7); - double fSlow39 = (fConst25 * fSlow38); - double fSlow40 = (1.0 - fSlow23); - double fSlow41 = (1.0 - (4.0 * (fSlow40 * fSlow15))); - double fSlow42 = (fSlow23 - fSlow41); - double fSlow43 = (0.0 - (2.0 * (fSlow42 * fSlow11))); - double fSlow44 = mydsp_faustpower2_f(fSlow9); - double fSlow45 = (fConst29 * ((fSlow43 * fSlow44) * fSlow12)); - double fSlow46 = ((893.67630033964599 * fSlow8) + -81.24330003087691); - double fSlow47 = ((fSlow23 * fSlow46) * fSlow11); - double fSlow48 = (fConst32 * ((fSlow47 * fSlow9) * fSlow12)); - double fSlow49 = ((3.6666666666666665 * (fSlow35 * fSlow8)) - (3.5 * fSlow26)); - double fSlow50 = (fSlow49 * fSlow11); - double fSlow51 = (fConst34 * (fSlow50 * fSlow12)); - double fSlow52 = (fSlow16 * fSlow49); - double fSlow53 = (fConst35 * fSlow52); - double fSlow54 = (fSlow33 * fSlow46); - double fSlow55 = (fConst36 * (fSlow54 * fSlow9)); - double fSlow56 = ((2.0 * fSlow33) - fSlow31); - double fSlow57 = (fSlow32 + fSlow56); - double fSlow58 = ((2.0 * (fSlow57 * fSlow15)) + -1.0); - double fSlow59 = (fConst29 * (fSlow58 * fSlow44)); - double fSlow60 = ((6.5 * fSlow46) + -812.43300030876912); - double fSlow61 = (((fSlow23 * fSlow60) * fSlow11) * fSlow7); - double fSlow62 = (fConst39 * ((fSlow61 * fSlow9) * fSlow12)); - double fSlow63 = ((3.25 * fSlow49) - (2.6666666666666665 * fSlow35)); - double fSlow64 = ((fSlow16 * fSlow63) * fSlow7); - double fSlow65 = (fConst42 * fSlow64); - double fSlow66 = (fSlow58 * fSlow7); - double fSlow67 = (fConst45 * (fSlow66 * fSlow44)); - double fSlow68 = ((7041.0860026759983 * fSlow8) + -469.40573351173322); - double fSlow69 = (fSlow43 * fSlow68); - double fSlow70 = (fConst48 * ((fSlow69 * fSlow44) * fSlow12)); - double fSlow71 = ((3.0 * (fSlow63 * fSlow8)) - (2.25 * fSlow49)); - double fSlow72 = (fSlow71 * fSlow11); - double fSlow73 = (fConst50 * (fSlow72 * fSlow12)); - double fSlow74 = (fSlow16 * fSlow71); - double fSlow75 = (fConst51 * fSlow74); - double fSlow76 = ((5.0 * (fSlow60 * fSlow8)) - (5.5 * fSlow46)); - double fSlow77 = (fSlow33 * fSlow76); - double fSlow78 = (fConst53 * (fSlow77 * fSlow9)); - double fSlow79 = (fSlow58 * fSlow68); - double fSlow80 = (fConst48 * (fSlow79 * fSlow44)); - double fSlow81 = ((2.0 * fSlow58) - fSlow56); - double fSlow82 = (fSlow57 - fSlow81); - double fSlow83 = (1.0 - (2.0 * (fSlow82 * fSlow15))); - double fSlow84 = mydsp_faustpower3_f(fSlow9); - double fSlow85 = (fConst57 * (fSlow83 * fSlow84)); - double fSlow86 = ((8.5 * fSlow68) + -6571.6802691642652); - double fSlow87 = ((fSlow43 * fSlow86) * fSlow7); - double fSlow88 = (fConst60 * ((fSlow87 * fSlow44) * fSlow12)); - double fSlow89 = ((2.833333333333333 * fSlow71) - (2.0 * fSlow63)); - double fSlow90 = ((fSlow16 * fSlow89) * fSlow7); - double fSlow91 = (fConst62 * fSlow90); - double fSlow92 = ((fSlow58 * fSlow86) * fSlow7); - double fSlow93 = (fConst60 * (fSlow92 * fSlow44)); - double fSlow94 = ((2.0 * fSlow43) + (4.0 * (fSlow40 * fSlow11))); - double fSlow95 = ((fSlow94 * fSlow11) + -1.0); - double fSlow96 = (fSlow42 + fSlow95); - double fSlow97 = ((46651.708284396875 * fSlow8) + -2455.3530675998354); - double fSlow98 = ((fSlow96 * fSlow97) * fSlow11); - double fSlow99 = (fConst65 * ((fSlow98 * fSlow84) * fSlow12)); - double fSlow100 = ((4.25 * fSlow76) - (4.0 * fSlow60)); - double fSlow101 = ((3.8000000000000003 * (fSlow100 * fSlow8)) - (3.25 * fSlow76)); - double fSlow102 = ((fSlow23 * fSlow101) * fSlow11); - double fSlow103 = (fConst67 * ((fSlow102 * fSlow9) * fSlow12)); - double fSlow104 = ((2.714285714285714 * (fSlow89 * fSlow8)) - (1.8333333333333333 * fSlow71)); - double fSlow105 = (fSlow16 * fSlow104); - double fSlow106 = (fConst69 * fSlow105); - double fSlow107 = (fSlow33 * fSlow101); - double fSlow108 = (fConst70 * (fSlow107 * fSlow9)); - double fSlow109 = ((6.333333333333333 * (fSlow86 * fSlow8)) - (7.5 * fSlow68)); - double fSlow110 = (fSlow58 * fSlow109); - double fSlow111 = (fConst72 * (fSlow110 * fSlow44)); - double fSlow112 = (fSlow83 * fSlow97); - double fSlow113 = (fConst73 * (fSlow112 * fSlow84)); - double fSlow114 = ((2.0 * fSlow83) - fSlow81); - double fSlow115 = ((2.0 * ((fSlow82 + fSlow114) * fSlow15)) + -1.0); - double fSlow116 = mydsp_faustpower4_f(fSlow9); - double fSlow117 = (fConst75 * (fSlow115 * fSlow116)); - double fSlow118 = pow(fSlow9, 2.5); - double fSlow119 = (fConst76 * fSlow118); - double fSlow120 = (fSlow41 * fSlow12); - double fSlow121 = (fSlow56 * fSlow11); - double fSlow122 = (fSlow41 * fSlow7); - double fSlow123 = (fConst80 * (fSlow122 * fSlow12)); - double fSlow124 = (fSlow121 * fSlow7); - double fSlow125 = (fConst80 * fSlow124); - double fSlow126 = ((2581.7315343145328 * fSlow8) + -198.59473340881021); - double fSlow127 = (fSlow41 * fSlow126); - double fSlow128 = (fConst82 * (fSlow127 * fSlow12)); - double fSlow129 = ((fSlow56 * fSlow126) * fSlow11); - double fSlow130 = (fConst82 * fSlow129); - double fSlow131 = ((7.5 * fSlow126) + -2383.1368009057223); - double fSlow132 = ((fSlow41 * fSlow131) * fSlow7); - double fSlow133 = (fConst84 * (fSlow132 * fSlow12)); - double fSlow134 = (((fSlow56 * fSlow131) * fSlow11) * fSlow7); - double fSlow135 = (fConst84 * fSlow134); - double fSlow136 = ((5.6666666666666661 * (fSlow131 * fSlow8)) - (6.5 * fSlow126)); - double fSlow137 = (fSlow41 * fSlow136); - double fSlow138 = (fConst86 * (fSlow137 * fSlow12)); - double fSlow139 = ((fSlow56 * fSlow136) * fSlow11); - double fSlow140 = (fConst86 * fSlow139); - double fSlow141 = ((4.75 * fSlow136) - (4.6666666666666661 * fSlow131)); - double fSlow142 = ((fSlow41 * fSlow141) * fSlow7); - double fSlow143 = (fConst88 * (fSlow142 * fSlow12)); - double fSlow144 = (((fSlow56 * fSlow141) * fSlow11) * fSlow7); - double fSlow145 = (fConst88 * fSlow144); - double fSlow146 = pow(fSlow9, 1.5); - double fSlow147 = (fConst89 * fSlow146); - double fSlow148 = (fSlow22 * fSlow12); - double fSlow149 = (fSlow31 * fSlow11); - double fSlow150 = (fSlow22 * fSlow7); - double fSlow151 = (fConst93 * (fSlow150 * fSlow12)); - double fSlow152 = (fSlow149 * fSlow7); - double fSlow153 = (fConst93 * fSlow152); - double fSlow154 = ((284.35155010806915 * fSlow8) + -31.594616678674353); - double fSlow155 = (fSlow22 * fSlow154); - double fSlow156 = (fConst95 * (fSlow155 * fSlow12)); - double fSlow157 = ((fSlow31 * fSlow154) * fSlow11); - double fSlow158 = (fConst95 * fSlow157); - double fSlow159 = ((5.5 * fSlow154) + -252.75693342939482); - double fSlow160 = ((fSlow22 * fSlow159) * fSlow7); - double fSlow161 = (fConst97 * (fSlow160 * fSlow12)); - double fSlow162 = (((fSlow31 * fSlow159) * fSlow11) * fSlow7); - double fSlow163 = (fConst97 * fSlow162); - double fSlow164 = ((4.333333333333333 * (fSlow159 * fSlow8)) - (4.5 * fSlow154)); - double fSlow165 = (fSlow22 * fSlow164); - double fSlow166 = (fConst99 * (fSlow165 * fSlow12)); - double fSlow167 = ((fSlow31 * fSlow164) * fSlow11); - double fSlow168 = (fConst99 * fSlow167); - double fSlow169 = ((3.75 * fSlow164) - (3.333333333333333 * fSlow159)); - double fSlow170 = ((fSlow22 * fSlow169) * fSlow7); - double fSlow171 = (fConst101 * (fSlow170 * fSlow12)); - double fSlow172 = (((fSlow31 * fSlow169) * fSlow11) * fSlow7); - double fSlow173 = (fConst101 * fSlow172); - double fSlow174 = ((3.4000000000000004 * (fSlow169 * fSlow8)) - (2.75 * fSlow164)); - double fSlow175 = (fSlow22 * fSlow174); - double fSlow176 = (fConst103 * (fSlow175 * fSlow12)); - double fSlow177 = ((fSlow31 * fSlow174) * fSlow11); - double fSlow178 = (fConst103 * fSlow177); - double fSlow179 = ((3.1666666666666665 * fSlow174) - (2.4000000000000004 * fSlow169)); - double fSlow180 = ((fSlow22 * fSlow179) * fSlow7); - double fSlow181 = (fConst105 * (fSlow180 * fSlow12)); - double fSlow182 = (((fSlow31 * fSlow179) * fSlow11) * fSlow7); - double fSlow183 = (fConst105 * fSlow182); - double fSlow184 = pow(fSlow9, 0.5); - double fSlow185 = (fConst106 * fSlow184); - double fSlow186 = (fConst110 * (fSlow7 * fSlow12)); - double fSlow187 = (fConst110 * fSlow18); - double fSlow188 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); - double fSlow189 = (fConst112 * (fSlow188 * fSlow12)); - double fSlow190 = (fSlow188 * fSlow11); - double fSlow191 = (fConst112 * fSlow190); - double fSlow192 = ((3.5 * fSlow188) + -13.540550005146152); - double fSlow193 = (fSlow192 * fSlow7); - double fSlow194 = (fConst114 * (fSlow193 * fSlow12)); - double fSlow195 = ((fSlow192 * fSlow11) * fSlow7); - double fSlow196 = (fConst114 * fSlow195); - double fSlow197 = ((3.0 * (fSlow192 * fSlow8)) - (2.5 * fSlow188)); - double fSlow198 = (fConst116 * (fSlow197 * fSlow12)); - double fSlow199 = (fSlow197 * fSlow11); - double fSlow200 = (fConst116 * fSlow199); - double fSlow201 = ((2.75 * fSlow197) - (2.0 * fSlow192)); - double fSlow202 = (fSlow201 * fSlow7); - double fSlow203 = (fConst118 * (fSlow202 * fSlow12)); - double fSlow204 = ((fSlow201 * fSlow11) * fSlow7); - double fSlow205 = (fConst118 * fSlow204); - double fSlow206 = ((2.6000000000000001 * (fSlow201 * fSlow8)) - (1.75 * fSlow197)); - double fSlow207 = (fConst120 * (fSlow206 * fSlow12)); - double fSlow208 = (fSlow206 * fSlow11); - double fSlow209 = (fConst120 * fSlow208); - double fSlow210 = ((2.5 * fSlow206) - (1.6000000000000001 * fSlow201)); - double fSlow211 = (fSlow210 * fSlow7); - double fSlow212 = (fConst122 * (fSlow211 * fSlow12)); - double fSlow213 = ((fSlow210 * fSlow11) * fSlow7); - double fSlow214 = (fConst122 * fSlow213); - double fSlow215 = ((2.4285714285714284 * (fSlow210 * fSlow8)) - (1.5 * fSlow206)); - double fSlow216 = (fConst124 * (fSlow215 * fSlow12)); - double fSlow217 = (fSlow215 * fSlow11); - double fSlow218 = (fConst124 * fSlow217); - double fSlow219 = ((2.375 * fSlow215) - (1.4285714285714284 * fSlow210)); - double fSlow220 = (fSlow219 * fSlow7); - double fSlow221 = (fConst126 * (fSlow220 * fSlow12)); - double fSlow222 = ((fSlow219 * fSlow11) * fSlow7); - double fSlow223 = (fConst126 * fSlow222); - double fSlow224 = ((3.0 * fSlow8) + -1.0); - double fSlow225 = ((2.5 * fSlow224) + -2.0); - double fSlow226 = ((2.333333333333333 * (fSlow225 * fSlow8)) - (1.5 * fSlow224)); - double fSlow227 = ((2.25 * fSlow226) - (1.3333333333333333 * fSlow225)); - double fSlow228 = ((2.2000000000000002 * (fSlow227 * fSlow8)) - (1.25 * fSlow226)); - double fSlow229 = ((2.1666666666666665 * fSlow228) - (1.2000000000000002 * fSlow227)); - double fSlow230 = ((2.1428571428571428 * (fSlow229 * fSlow8)) - (1.1666666666666665 * fSlow228)); - double fSlow231 = ((2.125 * fSlow230) - (1.1428571428571428 * fSlow229)); - double fSlow232 = ((2.1111111111111112 * (fSlow231 * fSlow8)) - (1.125 * fSlow230)); - double fSlow233 = (0.45825756949558399 * fSlow232); - double fSlow234 = pow(fSlow9, 3.5); - double fSlow235 = (fSlow95 * fSlow234); - double fSlow236 = (fConst130 * fSlow235); - double fSlow237 = (((fSlow63 * fSlow11) * fSlow7) * fSlow9); - double fSlow238 = (fConst131 * fSlow237); - double fSlow239 = (fSlow96 * fSlow11); - double fSlow240 = (fSlow239 * fSlow116); - double fSlow241 = (fConst132 * fSlow240); - double fSlow242 = (((fSlow23 * fSlow76) * fSlow11) * fSlow44); - double fSlow243 = (fConst133 * fSlow242); - double fSlow244 = ((((4.0 * fSlow239) - fSlow94) * fSlow11) + 1.0); - double fSlow245 = pow(fSlow9, 4.5); - double fSlow246 = (fSlow244 * fSlow245); - double fSlow247 = (fConst137 * fSlow246); - double fSlow248 = ((((fSlow23 * fSlow100) * fSlow11) * fSlow7) * fSlow44); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = mydsp_faustpower2_f(fSlow10); + double fSlow12 = (1.0 - fSlow11); + double fSlow13 = double(fVslider2); + double fSlow14 = cos(fSlow13); + double fSlow15 = sin(fSlow13); + double fSlow16 = (6.3830764864229232 * (fSlow14 * fSlow15)); + double fSlow17 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow18 = mydsp_faustpower2_f(fSlow14); + double fSlow19 = ((2.0 * fSlow18) + -1.0); + double fSlow20 = (3.1915382432114616 * fSlow19); + double fSlow21 = (fSlow14 * fSlow10); + double fSlow22 = (fConst9 * (fSlow21 * fSlow15)); + double fSlow23 = (fSlow19 * fSlow10); + double fSlow24 = (fConst10 * fSlow23); + double fSlow25 = ((4.0 * fSlow18) + -1.0); + double fSlow26 = (fSlow25 + -1.0); + double fSlow27 = (fSlow26 * fSlow14); + double fSlow28 = (fConst14 * ((fSlow27 * fSlow12) * fSlow15)); + double fSlow29 = ((78.986541696685876 * fSlow11) + -11.283791670955125); + double fSlow30 = (fSlow29 * fSlow14); + double fSlow31 = (fConst18 * (fSlow30 * fSlow15)); + double fSlow32 = (fSlow19 * fSlow29); + double fSlow33 = (fConst19 * fSlow32); + double fSlow34 = ((2.0 * fSlow19) + -1.0); + double fSlow35 = (1.0 - fSlow34); + double fSlow36 = (1.0 - (2.0 * (fSlow35 * fSlow18))); + double fSlow37 = (fConst20 * (fSlow36 * fSlow12)); + double fSlow38 = ((4.5 * fSlow29) + -67.702750025730751); + double fSlow39 = ((fSlow38 * fSlow14) * fSlow10); + double fSlow40 = (fConst24 * (fSlow39 * fSlow15)); + double fSlow41 = ((fSlow19 * fSlow38) * fSlow10); + double fSlow42 = (fConst25 * fSlow41); + double fSlow43 = (1.0 - fSlow26); + double fSlow44 = (1.0 - (4.0 * (fSlow43 * fSlow18))); + double fSlow45 = (fSlow26 - fSlow44); + double fSlow46 = (0.0 - (2.0 * (fSlow45 * fSlow14))); + double fSlow47 = mydsp_faustpower2_f(fSlow12); + double fSlow48 = (fConst29 * ((fSlow46 * fSlow47) * fSlow15)); + double fSlow49 = ((893.67630033964599 * fSlow11) + -81.24330003087691); + double fSlow50 = ((fSlow26 * fSlow49) * fSlow14); + double fSlow51 = (fConst32 * ((fSlow50 * fSlow12) * fSlow15)); + double fSlow52 = ((3.6666666666666665 * (fSlow38 * fSlow11)) - (3.5 * fSlow29)); + double fSlow53 = (fSlow52 * fSlow14); + double fSlow54 = (fConst34 * (fSlow53 * fSlow15)); + double fSlow55 = (fSlow19 * fSlow52); + double fSlow56 = (fConst35 * fSlow55); + double fSlow57 = (fSlow36 * fSlow49); + double fSlow58 = (fConst36 * (fSlow57 * fSlow12)); + double fSlow59 = ((2.0 * fSlow36) - fSlow34); + double fSlow60 = (fSlow35 + fSlow59); + double fSlow61 = ((2.0 * (fSlow60 * fSlow18)) + -1.0); + double fSlow62 = (fConst29 * (fSlow61 * fSlow47)); + double fSlow63 = ((6.5 * fSlow49) + -812.43300030876912); + double fSlow64 = (((fSlow26 * fSlow63) * fSlow14) * fSlow10); + double fSlow65 = (fConst39 * ((fSlow64 * fSlow12) * fSlow15)); + double fSlow66 = ((3.25 * fSlow52) - (2.6666666666666665 * fSlow38)); + double fSlow67 = ((fSlow19 * fSlow66) * fSlow10); + double fSlow68 = (fConst42 * fSlow67); + double fSlow69 = (fSlow61 * fSlow10); + double fSlow70 = (fConst45 * (fSlow69 * fSlow47)); + double fSlow71 = ((7041.0860026759983 * fSlow11) + -469.40573351173322); + double fSlow72 = (fSlow46 * fSlow71); + double fSlow73 = (fConst48 * ((fSlow72 * fSlow47) * fSlow15)); + double fSlow74 = ((3.0 * (fSlow66 * fSlow11)) - (2.25 * fSlow52)); + double fSlow75 = (fSlow74 * fSlow14); + double fSlow76 = (fConst50 * (fSlow75 * fSlow15)); + double fSlow77 = (fSlow19 * fSlow74); + double fSlow78 = (fConst51 * fSlow77); + double fSlow79 = ((5.0 * (fSlow63 * fSlow11)) - (5.5 * fSlow49)); + double fSlow80 = (fSlow36 * fSlow79); + double fSlow81 = (fConst53 * (fSlow80 * fSlow12)); + double fSlow82 = (fSlow61 * fSlow71); + double fSlow83 = (fConst48 * (fSlow82 * fSlow47)); + double fSlow84 = ((2.0 * fSlow61) - fSlow59); + double fSlow85 = (fSlow60 - fSlow84); + double fSlow86 = (1.0 - (2.0 * (fSlow85 * fSlow18))); + double fSlow87 = mydsp_faustpower3_f(fSlow12); + double fSlow88 = (fConst57 * (fSlow86 * fSlow87)); + double fSlow89 = ((8.5 * fSlow71) + -6571.6802691642652); + double fSlow90 = ((fSlow46 * fSlow89) * fSlow10); + double fSlow91 = (fConst60 * ((fSlow90 * fSlow47) * fSlow15)); + double fSlow92 = ((2.833333333333333 * fSlow74) - (2.0 * fSlow66)); + double fSlow93 = ((fSlow19 * fSlow92) * fSlow10); + double fSlow94 = (fConst62 * fSlow93); + double fSlow95 = ((fSlow61 * fSlow89) * fSlow10); + double fSlow96 = (fConst60 * (fSlow95 * fSlow47)); + double fSlow97 = ((2.0 * fSlow46) + (4.0 * (fSlow43 * fSlow14))); + double fSlow98 = ((fSlow97 * fSlow14) + -1.0); + double fSlow99 = (fSlow45 + fSlow98); + double fSlow100 = ((46651.708284396875 * fSlow11) + -2455.3530675998354); + double fSlow101 = ((fSlow99 * fSlow100) * fSlow14); + double fSlow102 = (fConst65 * ((fSlow101 * fSlow87) * fSlow15)); + double fSlow103 = ((4.25 * fSlow79) - (4.0 * fSlow63)); + double fSlow104 = ((3.8000000000000003 * (fSlow103 * fSlow11)) - (3.25 * fSlow79)); + double fSlow105 = ((fSlow26 * fSlow104) * fSlow14); + double fSlow106 = (fConst67 * ((fSlow105 * fSlow12) * fSlow15)); + double fSlow107 = ((2.714285714285714 * (fSlow92 * fSlow11)) - (1.8333333333333333 * fSlow74)); + double fSlow108 = (fSlow19 * fSlow107); + double fSlow109 = (fConst69 * fSlow108); + double fSlow110 = (fSlow36 * fSlow104); + double fSlow111 = (fConst70 * (fSlow110 * fSlow12)); + double fSlow112 = ((6.333333333333333 * (fSlow89 * fSlow11)) - (7.5 * fSlow71)); + double fSlow113 = (fSlow61 * fSlow112); + double fSlow114 = (fConst72 * (fSlow113 * fSlow47)); + double fSlow115 = (fSlow86 * fSlow100); + double fSlow116 = (fConst73 * (fSlow115 * fSlow87)); + double fSlow117 = ((2.0 * fSlow86) - fSlow84); + double fSlow118 = ((2.0 * ((fSlow85 + fSlow117) * fSlow18)) + -1.0); + double fSlow119 = mydsp_faustpower4_f(fSlow12); + double fSlow120 = (fConst75 * (fSlow118 * fSlow119)); + double fSlow121 = pow(fSlow12, 4.5); + double fSlow122 = (fConst76 * fSlow121); + double fSlow123 = (fSlow117 * fSlow14); + double fSlow124 = (fConst78 * fSlow123); + double fSlow125 = (fSlow99 * fSlow14); + double fSlow126 = ((((4.0 * fSlow125) - fSlow97) * fSlow14) + 1.0); + double fSlow127 = (fSlow126 * fSlow10); + double fSlow128 = (fConst80 * (fSlow127 * fSlow15)); + double fSlow129 = (fSlow123 * fSlow10); + double fSlow130 = (fConst80 * fSlow129); + double fSlow131 = pow(fSlow12, 3.5); + double fSlow132 = (fConst81 * fSlow131); + double fSlow133 = (fSlow84 * fSlow14); + double fSlow134 = (fConst83 * fSlow133); + double fSlow135 = (fSlow98 * fSlow10); + double fSlow136 = (fConst85 * (fSlow135 * fSlow15)); + double fSlow137 = (fSlow133 * fSlow10); + double fSlow138 = (fConst85 * fSlow137); + double fSlow139 = ((18415.148006998763 * fSlow11) + -1083.244000411692); + double fSlow140 = (fSlow98 * fSlow139); + double fSlow141 = (fConst87 * (fSlow140 * fSlow15)); + double fSlow142 = ((fSlow84 * fSlow139) * fSlow14); + double fSlow143 = (fConst87 * fSlow142); + double fSlow144 = ((9.5 * fSlow139) + -17331.904006587072); + double fSlow145 = ((fSlow98 * fSlow144) * fSlow10); + double fSlow146 = (fConst90 * (fSlow145 * fSlow15)); + double fSlow147 = (((fSlow84 * fSlow144) * fSlow14) * fSlow10); + double fSlow148 = (fConst90 * fSlow147); + double fSlow149 = pow(fSlow12, 2.5); + double fSlow150 = (fConst91 * fSlow149); + double fSlow151 = (fSlow44 * fSlow15); + double fSlow152 = (fSlow59 * fSlow14); + double fSlow153 = (fSlow44 * fSlow10); + double fSlow154 = (fConst95 * (fSlow153 * fSlow15)); + double fSlow155 = (fSlow152 * fSlow10); + double fSlow156 = (fConst95 * fSlow155); + double fSlow157 = ((2581.7315343145328 * fSlow11) + -198.59473340881021); + double fSlow158 = (fSlow44 * fSlow157); + double fSlow159 = (fConst97 * (fSlow158 * fSlow15)); + double fSlow160 = ((fSlow59 * fSlow157) * fSlow14); + double fSlow161 = (fConst97 * fSlow160); + double fSlow162 = ((7.5 * fSlow157) + -2383.1368009057223); + double fSlow163 = ((fSlow44 * fSlow162) * fSlow10); + double fSlow164 = (fConst99 * (fSlow163 * fSlow15)); + double fSlow165 = (((fSlow59 * fSlow162) * fSlow14) * fSlow10); + double fSlow166 = (fConst99 * fSlow165); + double fSlow167 = ((5.6666666666666661 * (fSlow162 * fSlow11)) - (6.5 * fSlow157)); + double fSlow168 = (fSlow44 * fSlow167); + double fSlow169 = (fConst101 * (fSlow168 * fSlow15)); + double fSlow170 = ((fSlow59 * fSlow167) * fSlow14); + double fSlow171 = (fConst101 * fSlow170); + double fSlow172 = ((4.75 * fSlow167) - (4.6666666666666661 * fSlow162)); + double fSlow173 = ((fSlow44 * fSlow172) * fSlow10); + double fSlow174 = (fConst103 * (fSlow173 * fSlow15)); + double fSlow175 = (((fSlow59 * fSlow172) * fSlow14) * fSlow10); + double fSlow176 = (fConst103 * fSlow175); + double fSlow177 = pow(fSlow12, 1.5); + double fSlow178 = (fConst104 * fSlow177); + double fSlow179 = (fSlow25 * fSlow15); + double fSlow180 = (fSlow34 * fSlow14); + double fSlow181 = (fSlow25 * fSlow10); + double fSlow182 = (fConst108 * (fSlow181 * fSlow15)); + double fSlow183 = (fSlow180 * fSlow10); + double fSlow184 = (fConst108 * fSlow183); + double fSlow185 = ((284.35155010806915 * fSlow11) + -31.594616678674353); + double fSlow186 = (fSlow25 * fSlow185); + double fSlow187 = (fConst110 * (fSlow186 * fSlow15)); + double fSlow188 = ((fSlow34 * fSlow185) * fSlow14); + double fSlow189 = (fConst110 * fSlow188); + double fSlow190 = ((5.5 * fSlow185) + -252.75693342939482); + double fSlow191 = ((fSlow25 * fSlow190) * fSlow10); + double fSlow192 = (fConst112 * (fSlow191 * fSlow15)); + double fSlow193 = (((fSlow34 * fSlow190) * fSlow14) * fSlow10); + double fSlow194 = (fConst112 * fSlow193); + double fSlow195 = ((4.333333333333333 * (fSlow190 * fSlow11)) - (4.5 * fSlow185)); + double fSlow196 = (fSlow25 * fSlow195); + double fSlow197 = (fConst114 * (fSlow196 * fSlow15)); + double fSlow198 = ((fSlow34 * fSlow195) * fSlow14); + double fSlow199 = (fConst114 * fSlow198); + double fSlow200 = ((3.75 * fSlow195) - (3.333333333333333 * fSlow190)); + double fSlow201 = ((fSlow25 * fSlow200) * fSlow10); + double fSlow202 = (fConst116 * (fSlow201 * fSlow15)); + double fSlow203 = (((fSlow34 * fSlow200) * fSlow14) * fSlow10); + double fSlow204 = (fConst116 * fSlow203); + double fSlow205 = ((3.4000000000000004 * (fSlow200 * fSlow11)) - (2.75 * fSlow195)); + double fSlow206 = (fSlow25 * fSlow205); + double fSlow207 = (fConst118 * (fSlow206 * fSlow15)); + double fSlow208 = ((fSlow34 * fSlow205) * fSlow14); + double fSlow209 = (fConst118 * fSlow208); + double fSlow210 = ((3.1666666666666665 * fSlow205) - (2.4000000000000004 * fSlow200)); + double fSlow211 = ((fSlow25 * fSlow210) * fSlow10); + double fSlow212 = (fConst120 * (fSlow211 * fSlow15)); + double fSlow213 = (((fSlow34 * fSlow210) * fSlow14) * fSlow10); + double fSlow214 = (fConst120 * fSlow213); + double fSlow215 = pow(fSlow12, 0.5); + double fSlow216 = (fConst121 * fSlow215); + double fSlow217 = (fConst125 * (fSlow10 * fSlow15)); + double fSlow218 = (fConst125 * fSlow21); + double fSlow219 = ((16.925687506432688 * fSlow11) + -3.3851375012865379); + double fSlow220 = (fConst127 * (fSlow219 * fSlow15)); + double fSlow221 = (fSlow219 * fSlow14); + double fSlow222 = (fConst127 * fSlow221); + double fSlow223 = ((3.5 * fSlow219) + -13.540550005146152); + double fSlow224 = (fSlow223 * fSlow10); + double fSlow225 = (fConst129 * (fSlow224 * fSlow15)); + double fSlow226 = ((fSlow223 * fSlow14) * fSlow10); + double fSlow227 = (fConst129 * fSlow226); + double fSlow228 = ((3.0 * (fSlow223 * fSlow11)) - (2.5 * fSlow219)); + double fSlow229 = (fConst131 * (fSlow228 * fSlow15)); + double fSlow230 = (fSlow228 * fSlow14); + double fSlow231 = (fConst131 * fSlow230); + double fSlow232 = ((2.75 * fSlow228) - (2.0 * fSlow223)); + double fSlow233 = (fSlow232 * fSlow10); + double fSlow234 = (fConst133 * (fSlow233 * fSlow15)); + double fSlow235 = ((fSlow232 * fSlow14) * fSlow10); + double fSlow236 = (fConst133 * fSlow235); + double fSlow237 = ((2.6000000000000001 * (fSlow232 * fSlow11)) - (1.75 * fSlow228)); + double fSlow238 = (fConst135 * (fSlow237 * fSlow15)); + double fSlow239 = (fSlow237 * fSlow14); + double fSlow240 = (fConst135 * fSlow239); + double fSlow241 = ((2.5 * fSlow237) - (1.6000000000000001 * fSlow232)); + double fSlow242 = (fSlow241 * fSlow10); + double fSlow243 = (fConst137 * (fSlow242 * fSlow15)); + double fSlow244 = ((fSlow241 * fSlow14) * fSlow10); + double fSlow245 = (fConst137 * fSlow244); + double fSlow246 = ((2.4285714285714284 * (fSlow241 * fSlow11)) - (1.5 * fSlow237)); + double fSlow247 = (fConst139 * (fSlow246 * fSlow15)); + double fSlow248 = (fSlow246 * fSlow14); double fSlow249 = (fConst139 * fSlow248); - double fSlow250 = mydsp_faustpower5_f(fSlow9); - double fSlow251 = ((0.0 - (2.0 * ((fSlow96 - fSlow244) * fSlow11))) * fSlow250); - double fSlow252 = (fConst75 * fSlow251); - double fSlow253 = ((fSlow43 * fSlow109) * fSlow84); - double fSlow254 = (fConst72 * fSlow253); - double fSlow255 = ((fSlow104 * fSlow11) * fSlow9); - double fSlow256 = (fConst140 * fSlow255); - double fSlow257 = (1.1180339887498949 * fSlow224); - double fSlow258 = (0.75 * fSlow226); - double fSlow259 = (0.60092521257733145 * fSlow228); - double fSlow260 = (0.51538820320220757 * fSlow230); - double fSlow261 = (0.88191710368819687 * fSlow225); - double fSlow262 = ((fSlow24 * fSlow44) * fSlow12); - double fSlow263 = (fConst142 * fSlow262); - double fSlow264 = (0.66332495807108005 * fSlow227); - double fSlow265 = (fSlow33 * fSlow44); + double fSlow250 = ((2.375 * fSlow246) - (1.4285714285714284 * fSlow241)); + double fSlow251 = (fSlow250 * fSlow10); + double fSlow252 = (fConst141 * (fSlow251 * fSlow15)); + double fSlow253 = ((fSlow250 * fSlow14) * fSlow10); + double fSlow254 = (fConst141 * fSlow253); + double fSlow255 = ((3.0 * fSlow11) + -1.0); + double fSlow256 = ((2.5 * fSlow255) + -2.0); + double fSlow257 = ((2.333333333333333 * (fSlow256 * fSlow11)) - (1.5 * fSlow255)); + double fSlow258 = ((2.25 * fSlow257) - (1.3333333333333333 * fSlow256)); + double fSlow259 = ((2.2000000000000002 * (fSlow258 * fSlow11)) - (1.25 * fSlow257)); + double fSlow260 = ((2.1666666666666665 * fSlow259) - (1.2000000000000002 * fSlow258)); + double fSlow261 = ((2.1428571428571428 * (fSlow260 * fSlow11)) - (1.1666666666666665 * fSlow259)); + double fSlow262 = ((2.125 * fSlow261) - (1.1428571428571428 * fSlow260)); + double fSlow263 = ((2.1111111111111112 * (fSlow262 * fSlow11)) - (1.125 * fSlow261)); + double fSlow264 = (0.45825756949558399 * fSlow263); + double fSlow265 = (fSlow98 * fSlow131); double fSlow266 = (fConst143 * fSlow265); - double fSlow267 = ((fSlow43 * fSlow84) * fSlow12); - double fSlow268 = (fConst45 * fSlow267); - double fSlow269 = (0.55328333517248807 * fSlow229); - double fSlow270 = (fSlow33 * fSlow60); - double fSlow271 = (fConst144 * (fSlow270 * fSlow44)); - double fSlow272 = (fSlow240 * fSlow12); - double fSlow273 = (fConst147 * fSlow272); - double fSlow274 = (fSlow89 * fSlow11); - double fSlow275 = (fConst148 * ((fSlow274 * fSlow9) * fSlow12)); - double fSlow276 = (0.48432210483785265 * fSlow231); - double fSlow277 = (fSlow33 * fSlow100); - double fSlow278 = (fConst149 * (fSlow277 * fSlow44)); - double fSlow279 = (fSlow83 * fSlow116); - double fSlow280 = (fConst150 * fSlow279); - double fSlow281 = (fConst128 * fSlow234); - double fSlow282 = (fSlow81 * fSlow11); + double fSlow267 = (((fSlow66 * fSlow14) * fSlow10) * fSlow12); + double fSlow268 = (fConst144 * fSlow267); + double fSlow269 = (fSlow125 * fSlow119); + double fSlow270 = (fConst145 * fSlow269); + double fSlow271 = (((fSlow26 * fSlow79) * fSlow14) * fSlow47); + double fSlow272 = (fConst146 * fSlow271); + double fSlow273 = (fSlow126 * fSlow121); + double fSlow274 = (fConst148 * fSlow273); + double fSlow275 = ((((fSlow26 * fSlow103) * fSlow14) * fSlow10) * fSlow47); + double fSlow276 = (fConst150 * fSlow275); + double fSlow277 = mydsp_faustpower5_f(fSlow12); + double fSlow278 = ((0.0 - (2.0 * ((fSlow99 - fSlow126) * fSlow14))) * fSlow277); + double fSlow279 = (fConst75 * fSlow278); + double fSlow280 = ((fSlow46 * fSlow112) * fSlow87); + double fSlow281 = (fConst72 * fSlow280); + double fSlow282 = ((fSlow107 * fSlow14) * fSlow12); double fSlow283 = (fConst151 * fSlow282); - double fSlow284 = (fSlow95 * fSlow7); - double fSlow285 = (fConst153 * (fSlow284 * fSlow12)); - double fSlow286 = (fSlow282 * fSlow7); - double fSlow287 = (fConst153 * fSlow286); - double fSlow288 = ((18415.148006998763 * fSlow8) + -1083.244000411692); - double fSlow289 = (fSlow95 * fSlow288); - double fSlow290 = (fConst155 * (fSlow289 * fSlow12)); - double fSlow291 = ((fSlow81 * fSlow288) * fSlow11); - double fSlow292 = (fConst155 * fSlow291); - double fSlow293 = ((9.5 * fSlow288) + -17331.904006587072); - double fSlow294 = ((fSlow95 * fSlow293) * fSlow7); - double fSlow295 = (fConst157 * (fSlow294 * fSlow12)); - double fSlow296 = (((fSlow81 * fSlow293) * fSlow11) * fSlow7); - double fSlow297 = (fConst157 * fSlow296); - double fSlow298 = (fConst135 * fSlow245); - double fSlow299 = (fSlow114 * fSlow11); - double fSlow300 = (fConst158 * fSlow299); - double fSlow301 = (fSlow244 * fSlow7); - double fSlow302 = (fConst160 * (fSlow301 * fSlow12)); - double fSlow303 = (fSlow299 * fSlow7); - double fSlow304 = (fConst160 * fSlow303); - double fSlow305 = (fConst161 * (fSlow184 * fSlow12)); - double fSlow306 = (0.13783222385544802 * fSlow7); - double fSlow307 = (fConst161 * (fSlow11 * fSlow184)); - double fSlow308 = (fConst163 * ((fSlow11 * fSlow9) * fSlow12)); - double fSlow309 = (fConst164 * ((fSlow7 * fSlow184) * fSlow12)); - double fSlow310 = (0.088970317927147144 * fSlow224); - double fSlow311 = (fConst164 * (fSlow18 * fSlow184)); - double fSlow312 = (fConst165 * (fSlow16 * fSlow9)); - double fSlow313 = (fConst166 * ((fSlow22 * fSlow146) * fSlow12)); - double fSlow314 = (fConst168 * ((fSlow18 * fSlow9) * fSlow12)); - double fSlow315 = (fConst169 * ((fSlow188 * fSlow184) * fSlow12)); - double fSlow316 = (0.070180733224632072 * (fSlow225 * fSlow7)); - double fSlow317 = (fConst169 * (fSlow190 * fSlow184)); - double fSlow318 = (fConst170 * (fSlow20 * fSlow9)); - double fSlow319 = (fConst166 * (fSlow149 * fSlow146)); - double fSlow320 = (fConst171 * fSlow262); - double fSlow321 = (fConst172 * ((fSlow150 * fSlow146) * fSlow12)); - double fSlow322 = (fConst173 * ((fSlow27 * fSlow9) * fSlow12)); - double fSlow323 = (fConst174 * ((fSlow193 * fSlow184) * fSlow12)); - double fSlow324 = (0.059683103659460751 * fSlow226); - double fSlow325 = (fConst174 * (fSlow195 * fSlow184)); - double fSlow326 = (fConst175 * (fSlow29 * fSlow9)); - double fSlow327 = (fConst172 * (fSlow152 * fSlow146)); - double fSlow328 = (fConst176 * fSlow265); - double fSlow329 = (fConst177 * ((fSlow41 * fSlow118) * fSlow12)); - double fSlow330 = (fConst178 * (((fSlow24 * fSlow7) * fSlow44) * fSlow12)); - double fSlow331 = (fConst179 * ((fSlow155 * fSlow146) * fSlow12)); - double fSlow332 = (fConst180 * ((fSlow36 * fSlow9) * fSlow12)); - double fSlow333 = (fConst181 * ((fSlow197 * fSlow184) * fSlow12)); - double fSlow334 = (0.052785722976618307 * (fSlow227 * fSlow7)); - double fSlow335 = (fConst181 * (fSlow199 * fSlow184)); - double fSlow336 = (fConst182 * (fSlow38 * fSlow9)); - double fSlow337 = (fConst179 * (fSlow157 * fSlow146)); - double fSlow338 = (fConst183 * ((fSlow33 * fSlow7) * fSlow44)); - double fSlow339 = (fConst177 * (fSlow121 * fSlow118)); - double fSlow340 = (fConst184 * fSlow267); - double fSlow341 = (fConst185 * ((fSlow122 * fSlow118) * fSlow12)); - double fSlow342 = (fConst186 * ((fSlow47 * fSlow44) * fSlow12)); - double fSlow343 = (fConst187 * ((fSlow160 * fSlow146) * fSlow12)); - double fSlow344 = (fConst188 * ((fSlow50 * fSlow9) * fSlow12)); - double fSlow345 = (fConst189 * ((fSlow202 * fSlow184) * fSlow12)); - double fSlow346 = (0.047820109005115151 * fSlow228); - double fSlow347 = (fConst189 * (fSlow204 * fSlow184)); - double fSlow348 = (fConst190 * (fSlow52 * fSlow9)); - double fSlow349 = (fConst187 * (fSlow162 * fSlow146)); - double fSlow350 = (fConst191 * (fSlow54 * fSlow44)); - double fSlow351 = (fConst185 * (fSlow124 * fSlow118)); - double fSlow352 = (fConst184 * (fSlow58 * fSlow84)); - double fSlow353 = (fConst192 * (fSlow235 * fSlow12)); - double fSlow354 = (fConst193 * (((fSlow43 * fSlow7) * fSlow84) * fSlow12)); - double fSlow355 = (fConst194 * ((fSlow127 * fSlow118) * fSlow12)); - double fSlow356 = (fConst195 * ((fSlow61 * fSlow44) * fSlow12)); - double fSlow357 = (fConst196 * ((fSlow165 * fSlow146) * fSlow12)); - double fSlow358 = (fConst197 * (fSlow237 * fSlow12)); - double fSlow359 = (fConst198 * ((fSlow206 * fSlow184) * fSlow12)); - double fSlow360 = (0.044028888861535699 * (fSlow229 * fSlow7)); - double fSlow361 = (fConst198 * (fSlow208 * fSlow184)); - double fSlow362 = (fConst199 * (fSlow64 * fSlow9)); - double fSlow363 = (fConst196 * (fSlow167 * fSlow146)); - double fSlow364 = (fConst200 * ((fSlow270 * fSlow7) * fSlow44)); - double fSlow365 = (fConst194 * (fSlow129 * fSlow118)); - double fSlow366 = (fConst193 * (fSlow66 * fSlow84)); - double fSlow367 = (fConst192 * (fSlow282 * fSlow234)); - double fSlow368 = (fConst201 * fSlow272); - double fSlow369 = (fConst202 * ((fSlow284 * fSlow234) * fSlow12)); - double fSlow370 = (fConst203 * ((fSlow69 * fSlow84) * fSlow12)); - double fSlow371 = (fConst204 * ((fSlow132 * fSlow118) * fSlow12)); - double fSlow372 = (fConst205 * (fSlow242 * fSlow12)); - double fSlow373 = (fConst206 * ((fSlow170 * fSlow146) * fSlow12)); - double fSlow374 = (fConst207 * ((fSlow72 * fSlow9) * fSlow12)); - double fSlow375 = (fConst208 * ((fSlow211 * fSlow184) * fSlow12)); - double fSlow376 = (0.041013290075440773 * fSlow230); - double fSlow377 = (fConst208 * (fSlow213 * fSlow184)); - double fSlow378 = (fConst209 * (fSlow74 * fSlow9)); - double fSlow379 = (fConst206 * (fSlow172 * fSlow146)); - double fSlow380 = (fConst210 * (fSlow77 * fSlow44)); - double fSlow381 = (fConst204 * (fSlow134 * fSlow118)); - double fSlow382 = (fConst203 * (fSlow79 * fSlow84)); - double fSlow383 = (fConst202 * (fSlow286 * fSlow234)); - double fSlow384 = (fConst211 * fSlow279); - double fSlow385 = (fConst212 * (fSlow246 * fSlow12)); - double fSlow386 = (fConst213 * (((fSlow239 * fSlow7) * fSlow116) * fSlow12)); - double fSlow387 = (fConst214 * ((fSlow289 * fSlow234) * fSlow12)); - double fSlow388 = (fConst215 * ((fSlow87 * fSlow84) * fSlow12)); - double fSlow389 = (fConst216 * ((fSlow137 * fSlow118) * fSlow12)); - double fSlow390 = (fConst217 * (fSlow248 * fSlow12)); - double fSlow391 = (fConst218 * ((fSlow175 * fSlow146) * fSlow12)); - double fSlow392 = (fConst219 * (((fSlow274 * fSlow7) * fSlow9) * fSlow12)); - double fSlow393 = (fConst220 * ((fSlow215 * fSlow184) * fSlow12)); - double fSlow394 = (0.038541128516807702 * (fSlow231 * fSlow7)); - double fSlow395 = (fConst220 * (fSlow217 * fSlow184)); - double fSlow396 = (fConst221 * (fSlow90 * fSlow9)); - double fSlow397 = (fConst218 * (fSlow177 * fSlow146)); - double fSlow398 = (fConst222 * ((fSlow277 * fSlow7) * fSlow44)); - double fSlow399 = (fConst216 * (fSlow139 * fSlow118)); - double fSlow400 = (fConst215 * (fSlow92 * fSlow84)); - double fSlow401 = (fConst214 * (fSlow291 * fSlow234)); - double fSlow402 = (fConst223 * ((fSlow83 * fSlow7) * fSlow116)); - double fSlow403 = (fConst212 * (fSlow299 * fSlow245)); - double fSlow404 = (fConst224 * (fSlow251 * fSlow12)); - double fSlow405 = (fConst225 * ((fSlow301 * fSlow245) * fSlow12)); - double fSlow406 = (fConst226 * ((fSlow98 * fSlow116) * fSlow12)); - double fSlow407 = (fConst227 * ((fSlow294 * fSlow234) * fSlow12)); - double fSlow408 = (fConst228 * (fSlow253 * fSlow12)); - double fSlow409 = (fConst229 * ((fSlow142 * fSlow118) * fSlow12)); - double fSlow410 = (fConst230 * ((fSlow102 * fSlow44) * fSlow12)); - double fSlow411 = (fConst231 * ((fSlow180 * fSlow146) * fSlow12)); - double fSlow412 = (fConst232 * (fSlow255 * fSlow12)); - double fSlow413 = (fConst233 * ((fSlow220 * fSlow184) * fSlow12)); - double fSlow414 = (0.03646697869724997 * fSlow232); - double fSlow415 = (fConst233 * (fSlow222 * fSlow184)); - double fSlow416 = (fConst234 * (fSlow105 * fSlow9)); - double fSlow417 = (fConst231 * (fSlow182 * fSlow146)); - double fSlow418 = (fConst235 * (fSlow107 * fSlow44)); - double fSlow419 = (fConst229 * (fSlow144 * fSlow118)); - double fSlow420 = (fConst228 * (fSlow110 * fSlow84)); - double fSlow421 = (fConst227 * (fSlow296 * fSlow234)); - double fSlow422 = (fConst236 * (fSlow112 * fSlow116)); - double fSlow423 = (fConst225 * (fSlow303 * fSlow245)); - double fSlow424 = (fConst224 * (fSlow115 * fSlow250)); + double fSlow284 = (1.1180339887498949 * fSlow255); + double fSlow285 = (0.75 * fSlow257); + double fSlow286 = (0.60092521257733145 * fSlow259); + double fSlow287 = (0.51538820320220757 * fSlow261); + double fSlow288 = (0.88191710368819687 * fSlow256); + double fSlow289 = ((fSlow27 * fSlow47) * fSlow15); + double fSlow290 = (fConst153 * fSlow289); + double fSlow291 = (0.66332495807108005 * fSlow258); + double fSlow292 = (fSlow36 * fSlow47); + double fSlow293 = (fConst154 * fSlow292); + double fSlow294 = ((fSlow46 * fSlow87) * fSlow15); + double fSlow295 = (fConst45 * fSlow294); + double fSlow296 = (0.55328333517248807 * fSlow260); + double fSlow297 = (fSlow36 * fSlow63); + double fSlow298 = (fConst155 * (fSlow297 * fSlow47)); + double fSlow299 = (fSlow269 * fSlow15); + double fSlow300 = (fConst157 * fSlow299); + double fSlow301 = (fSlow92 * fSlow14); + double fSlow302 = (fConst158 * ((fSlow301 * fSlow12) * fSlow15)); + double fSlow303 = (0.48432210483785265 * fSlow262); + double fSlow304 = (fSlow36 * fSlow103); + double fSlow305 = (fConst159 * (fSlow304 * fSlow47)); + double fSlow306 = (fSlow86 * fSlow119); + double fSlow307 = (fConst160 * fSlow306); + double fSlow308 = (fConst161 * (fSlow215 * fSlow15)); + double fSlow309 = (0.13783222385544802 * fSlow10); + double fSlow310 = (fConst161 * (fSlow14 * fSlow215)); + double fSlow311 = (fConst163 * ((fSlow14 * fSlow12) * fSlow15)); + double fSlow312 = (fConst164 * ((fSlow10 * fSlow215) * fSlow15)); + double fSlow313 = (0.088970317927147144 * fSlow255); + double fSlow314 = (fConst164 * (fSlow21 * fSlow215)); + double fSlow315 = (fConst165 * (fSlow19 * fSlow12)); + double fSlow316 = (fConst166 * ((fSlow25 * fSlow177) * fSlow15)); + double fSlow317 = (fConst168 * ((fSlow21 * fSlow12) * fSlow15)); + double fSlow318 = (fConst169 * ((fSlow219 * fSlow215) * fSlow15)); + double fSlow319 = (0.070180733224632072 * (fSlow256 * fSlow10)); + double fSlow320 = (fConst169 * (fSlow221 * fSlow215)); + double fSlow321 = (fConst170 * (fSlow23 * fSlow12)); + double fSlow322 = (fConst166 * (fSlow180 * fSlow177)); + double fSlow323 = (fConst171 * fSlow289); + double fSlow324 = (fConst172 * ((fSlow181 * fSlow177) * fSlow15)); + double fSlow325 = (fConst173 * ((fSlow30 * fSlow12) * fSlow15)); + double fSlow326 = (fConst174 * ((fSlow224 * fSlow215) * fSlow15)); + double fSlow327 = (0.059683103659460751 * fSlow257); + double fSlow328 = (fConst174 * (fSlow226 * fSlow215)); + double fSlow329 = (fConst175 * (fSlow32 * fSlow12)); + double fSlow330 = (fConst172 * (fSlow183 * fSlow177)); + double fSlow331 = (fConst176 * fSlow292); + double fSlow332 = (fConst177 * ((fSlow44 * fSlow149) * fSlow15)); + double fSlow333 = (fConst178 * (((fSlow27 * fSlow10) * fSlow47) * fSlow15)); + double fSlow334 = (fConst179 * ((fSlow186 * fSlow177) * fSlow15)); + double fSlow335 = (fConst180 * ((fSlow39 * fSlow12) * fSlow15)); + double fSlow336 = (fConst181 * ((fSlow228 * fSlow215) * fSlow15)); + double fSlow337 = (0.052785722976618307 * (fSlow258 * fSlow10)); + double fSlow338 = (fConst181 * (fSlow230 * fSlow215)); + double fSlow339 = (fConst182 * (fSlow41 * fSlow12)); + double fSlow340 = (fConst179 * (fSlow188 * fSlow177)); + double fSlow341 = (fConst183 * ((fSlow36 * fSlow10) * fSlow47)); + double fSlow342 = (fConst177 * (fSlow152 * fSlow149)); + double fSlow343 = (fConst184 * fSlow294); + double fSlow344 = (fConst185 * ((fSlow153 * fSlow149) * fSlow15)); + double fSlow345 = (fConst186 * ((fSlow50 * fSlow47) * fSlow15)); + double fSlow346 = (fConst187 * ((fSlow191 * fSlow177) * fSlow15)); + double fSlow347 = (fConst188 * ((fSlow53 * fSlow12) * fSlow15)); + double fSlow348 = (fConst189 * ((fSlow233 * fSlow215) * fSlow15)); + double fSlow349 = (0.047820109005115151 * fSlow259); + double fSlow350 = (fConst189 * (fSlow235 * fSlow215)); + double fSlow351 = (fConst190 * (fSlow55 * fSlow12)); + double fSlow352 = (fConst187 * (fSlow193 * fSlow177)); + double fSlow353 = (fConst191 * (fSlow57 * fSlow47)); + double fSlow354 = (fConst185 * (fSlow155 * fSlow149)); + double fSlow355 = (fConst184 * (fSlow61 * fSlow87)); + double fSlow356 = (fConst192 * (fSlow265 * fSlow15)); + double fSlow357 = (fConst193 * (((fSlow46 * fSlow10) * fSlow87) * fSlow15)); + double fSlow358 = (fConst194 * ((fSlow158 * fSlow149) * fSlow15)); + double fSlow359 = (fConst195 * ((fSlow64 * fSlow47) * fSlow15)); + double fSlow360 = (fConst196 * ((fSlow196 * fSlow177) * fSlow15)); + double fSlow361 = (fConst197 * (fSlow267 * fSlow15)); + double fSlow362 = (fConst198 * ((fSlow237 * fSlow215) * fSlow15)); + double fSlow363 = (0.044028888861535699 * (fSlow260 * fSlow10)); + double fSlow364 = (fConst198 * (fSlow239 * fSlow215)); + double fSlow365 = (fConst199 * (fSlow67 * fSlow12)); + double fSlow366 = (fConst196 * (fSlow198 * fSlow177)); + double fSlow367 = (fConst200 * ((fSlow297 * fSlow10) * fSlow47)); + double fSlow368 = (fConst194 * (fSlow160 * fSlow149)); + double fSlow369 = (fConst193 * (fSlow69 * fSlow87)); + double fSlow370 = (fConst192 * (fSlow133 * fSlow131)); + double fSlow371 = (fConst201 * fSlow299); + double fSlow372 = (fConst202 * ((fSlow135 * fSlow131) * fSlow15)); + double fSlow373 = (fConst203 * ((fSlow72 * fSlow87) * fSlow15)); + double fSlow374 = (fConst204 * ((fSlow163 * fSlow149) * fSlow15)); + double fSlow375 = (fConst205 * (fSlow271 * fSlow15)); + double fSlow376 = (fConst206 * ((fSlow201 * fSlow177) * fSlow15)); + double fSlow377 = (fConst207 * ((fSlow75 * fSlow12) * fSlow15)); + double fSlow378 = (fConst208 * ((fSlow242 * fSlow215) * fSlow15)); + double fSlow379 = (0.041013290075440773 * fSlow261); + double fSlow380 = (fConst208 * (fSlow244 * fSlow215)); + double fSlow381 = (fConst209 * (fSlow77 * fSlow12)); + double fSlow382 = (fConst206 * (fSlow203 * fSlow177)); + double fSlow383 = (fConst210 * (fSlow80 * fSlow47)); + double fSlow384 = (fConst204 * (fSlow165 * fSlow149)); + double fSlow385 = (fConst203 * (fSlow82 * fSlow87)); + double fSlow386 = (fConst202 * (fSlow137 * fSlow131)); + double fSlow387 = (fConst211 * fSlow306); + double fSlow388 = (fConst212 * (fSlow273 * fSlow15)); + double fSlow389 = (fConst213 * (((fSlow125 * fSlow10) * fSlow119) * fSlow15)); + double fSlow390 = (fConst214 * ((fSlow140 * fSlow131) * fSlow15)); + double fSlow391 = (fConst215 * ((fSlow90 * fSlow87) * fSlow15)); + double fSlow392 = (fConst216 * ((fSlow168 * fSlow149) * fSlow15)); + double fSlow393 = (fConst217 * (fSlow275 * fSlow15)); + double fSlow394 = (fConst218 * ((fSlow206 * fSlow177) * fSlow15)); + double fSlow395 = (fConst219 * (((fSlow301 * fSlow10) * fSlow12) * fSlow15)); + double fSlow396 = (fConst220 * ((fSlow246 * fSlow215) * fSlow15)); + double fSlow397 = (0.038541128516807702 * (fSlow262 * fSlow10)); + double fSlow398 = (fConst220 * (fSlow248 * fSlow215)); + double fSlow399 = (fConst221 * (fSlow93 * fSlow12)); + double fSlow400 = (fConst218 * (fSlow208 * fSlow177)); + double fSlow401 = (fConst222 * ((fSlow304 * fSlow10) * fSlow47)); + double fSlow402 = (fConst216 * (fSlow170 * fSlow149)); + double fSlow403 = (fConst215 * (fSlow95 * fSlow87)); + double fSlow404 = (fConst214 * (fSlow142 * fSlow131)); + double fSlow405 = (fConst223 * ((fSlow86 * fSlow10) * fSlow119)); + double fSlow406 = (fConst212 * (fSlow123 * fSlow121)); + double fSlow407 = (fConst224 * (fSlow278 * fSlow15)); + double fSlow408 = (fConst225 * ((fSlow127 * fSlow121) * fSlow15)); + double fSlow409 = (fConst226 * ((fSlow101 * fSlow119) * fSlow15)); + double fSlow410 = (fConst227 * ((fSlow145 * fSlow131) * fSlow15)); + double fSlow411 = (fConst228 * (fSlow280 * fSlow15)); + double fSlow412 = (fConst229 * ((fSlow173 * fSlow149) * fSlow15)); + double fSlow413 = (fConst230 * ((fSlow105 * fSlow47) * fSlow15)); + double fSlow414 = (fConst231 * ((fSlow211 * fSlow177) * fSlow15)); + double fSlow415 = (fConst232 * (fSlow282 * fSlow15)); + double fSlow416 = (fConst233 * ((fSlow251 * fSlow215) * fSlow15)); + double fSlow417 = (0.03646697869724997 * fSlow263); + double fSlow418 = (fConst233 * (fSlow253 * fSlow215)); + double fSlow419 = (fConst234 * (fSlow108 * fSlow12)); + double fSlow420 = (fConst231 * (fSlow213 * fSlow177)); + double fSlow421 = (fConst235 * (fSlow110 * fSlow47)); + double fSlow422 = (fConst229 * (fSlow175 * fSlow149)); + double fSlow423 = (fConst228 * (fSlow113 * fSlow87)); + double fSlow424 = (fConst227 * (fSlow147 * fSlow131)); + double fSlow425 = (fConst236 * (fSlow115 * fSlow119)); + double fSlow426 = (fConst225 * (fSlow129 * fSlow121)); + double fSlow427 = (fConst224 * (fSlow118 * fSlow277)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow17 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input4[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input8[i]); double fTemp5 = double(input10[i]); @@ -2966,213 +2978,213 @@ class mydsp : public dsp { double fTemp35 = double(input116[i]); double fTemp36 = double(input118[i]); double fTemp37 = double(input120[i]); - double fTemp38 = double(input25[i]); - double fTemp39 = double(input35[i]); - double fTemp40 = double(input37[i]); - double fTemp41 = double(input47[i]); - double fTemp42 = double(input51[i]); - double fTemp43 = double(input61[i]); - double fTemp44 = double(input67[i]); - double fTemp45 = double(input77[i]); - double fTemp46 = double(input85[i]); - double fTemp47 = double(input95[i]); - double fTemp48 = double(input105[i]); - double fTemp49 = double(input115[i]); - double fTemp50 = double(input9[i]); - double fTemp51 = double(input15[i]); - double fTemp52 = double(input17[i]); - double fTemp53 = double(input23[i]); - double fTemp54 = double(input27[i]); - double fTemp55 = double(input33[i]); - double fTemp56 = double(input39[i]); - double fTemp57 = double(input45[i]); - double fTemp58 = double(input53[i]); - double fTemp59 = double(input59[i]); - double fTemp60 = double(input69[i]); - double fTemp61 = double(input75[i]); - double fTemp62 = double(input87[i]); - double fTemp63 = double(input93[i]); - double fTemp64 = double(input107[i]); - double fTemp65 = double(input113[i]); - double fTemp66 = double(input1[i]); - double fTemp67 = double(input3[i]); - double fTemp68 = double(input5[i]); - double fTemp69 = double(input7[i]); - double fTemp70 = double(input11[i]); - double fTemp71 = double(input13[i]); - double fTemp72 = double(input19[i]); - double fTemp73 = double(input21[i]); - double fTemp74 = double(input29[i]); - double fTemp75 = double(input31[i]); - double fTemp76 = double(input41[i]); - double fTemp77 = double(input43[i]); - double fTemp78 = double(input55[i]); - double fTemp79 = double(input57[i]); - double fTemp80 = double(input71[i]); - double fTemp81 = double(input73[i]); - double fTemp82 = double(input89[i]); - double fTemp83 = double(input91[i]); - double fTemp84 = double(input109[i]); - double fTemp85 = double(input111[i]); - double fTemp86 = double(input110[i]); - double fTemp87 = double(input49[i]); - double fTemp88 = double(input54[i]); - double fTemp89 = double(input64[i]); - double fTemp90 = double(input68[i]); - double fTemp91 = double(input81[i]); - double fTemp92 = double(input86[i]); - double fTemp93 = double(input100[i]); - double fTemp94 = double(input104[i]); - double fTemp95 = double(input108[i]); - double fTemp96 = double(input6[i]); - double fTemp97 = double(input20[i]); - double fTemp98 = double(input42[i]); - double fTemp99 = double(input72[i]); - double fTemp100 = double(input2[i]); - double fTemp101 = double(input12[i]); - double fTemp102 = double(input26[i]); - double fTemp103 = double(input30[i]); - double fTemp104 = double(input34[i]); - double fTemp105 = double(input50[i]); - double fTemp106 = double(input56[i]); - double fTemp107 = double(input60[i]); - double fTemp108 = double(input82[i]); - double fTemp109 = double(input88[i]); - double fTemp110 = double(input90[i]); - double fTemp111 = double(input94[i]); - double fTemp112 = double(input98[i]); - double fTemp113 = double(input63[i]); - double fTemp114 = double(input65[i]); - double fTemp115 = double(input79[i]); - double fTemp116 = double(input83[i]); - double fTemp117 = double(input97[i]); - double fTemp118 = double(input103[i]); - double fTemp119 = double(input117[i]); - double fTemp120 = double(input99[i]); - double fTemp121 = double(input101[i]); - double fTemp122 = double(input119[i]); - double fTemp123 = ((fSlow9 * ((((((((((((((((((((((((((((((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow28 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow45 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow48 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow55 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow65 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow67 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow70 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22))))) + (fSlow73 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow78 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow85 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27))))) + (fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28))))) + (fSlow91 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow93 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))) + (fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31))))) + (fSlow103 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow106 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow108 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow111 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow113 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow117 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37)))))) + ((((fSlow119 * (((((((((((fConst78 * ((fSlow120 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38)))) + (fSlow121 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39)))))) + (fSlow123 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40))))) + (fSlow125 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow128 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42))))) + (fSlow130 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow133 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow135 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45))))) + (fSlow138 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46))))) + (fSlow140 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47))))) + (fSlow143 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48))))) + (fSlow145 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49)))))) + ((fSlow147 * (((((((((((((((fConst91 * ((fSlow148 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50)))) + (fSlow149 * (iSlow1?(fSlow3 * (fTemp3 * fTemp51)):(fSlow3 * (fTemp1 * fTemp51)))))) + (fSlow151 * (iSlow1?(fSlow3 * (fTemp3 * fTemp52)):(fSlow3 * (fTemp1 * fTemp52))))) + (fSlow153 * (iSlow1?(fSlow3 * (fTemp3 * fTemp53)):(fSlow3 * (fTemp1 * fTemp53))))) + (fSlow156 * (iSlow1?(fSlow3 * (fTemp3 * fTemp54)):(fSlow3 * (fTemp1 * fTemp54))))) + (fSlow158 * (iSlow1?(fSlow3 * (fTemp3 * fTemp55)):(fSlow3 * (fTemp1 * fTemp55))))) + (fSlow161 * (iSlow1?(fSlow3 * (fTemp3 * fTemp56)):(fSlow3 * (fTemp1 * fTemp56))))) + (fSlow163 * (iSlow1?(fSlow3 * (fTemp3 * fTemp57)):(fSlow3 * (fTemp1 * fTemp57))))) + (fSlow166 * (iSlow1?(fSlow3 * (fTemp3 * fTemp58)):(fSlow3 * (fTemp1 * fTemp58))))) + (fSlow168 * (iSlow1?(fSlow3 * (fTemp3 * fTemp59)):(fSlow3 * (fTemp1 * fTemp59))))) + (fSlow171 * (iSlow1?(fSlow3 * (fTemp3 * fTemp60)):(fSlow3 * (fTemp1 * fTemp60))))) + (fSlow173 * (iSlow1?(fSlow3 * (fTemp3 * fTemp61)):(fSlow3 * (fTemp1 * fTemp61))))) + (fSlow176 * (iSlow1?(fSlow3 * (fTemp3 * fTemp62)):(fSlow3 * (fTemp1 * fTemp62))))) + (fSlow178 * (iSlow1?(fSlow3 * (fTemp3 * fTemp63)):(fSlow3 * (fTemp1 * fTemp63))))) + (fSlow181 * (iSlow1?(fSlow3 * (fTemp3 * fTemp64)):(fSlow3 * (fTemp1 * fTemp64))))) + (fSlow183 * (iSlow1?(fSlow3 * (fTemp3 * fTemp65)):(fSlow3 * (fTemp1 * fTemp65)))))) + ((fSlow185 * (((((((((((((((((((fConst108 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp66)):(fSlow3 * (fTemp1 * fTemp66)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp67)):(fSlow3 * (fTemp1 * fTemp67)))))) + (fSlow186 * (iSlow1?(fSlow3 * (fTemp3 * fTemp68)):(fSlow3 * (fTemp1 * fTemp68))))) + (fSlow187 * (iSlow1?(fSlow3 * (fTemp3 * fTemp69)):(fSlow3 * (fTemp1 * fTemp69))))) + (fSlow189 * (iSlow1?(fSlow3 * (fTemp3 * fTemp70)):(fSlow3 * (fTemp1 * fTemp70))))) + (fSlow191 * (iSlow1?(fSlow3 * (fTemp3 * fTemp71)):(fSlow3 * (fTemp1 * fTemp71))))) + (fSlow194 * (iSlow1?(fSlow3 * (fTemp3 * fTemp72)):(fSlow3 * (fTemp1 * fTemp72))))) + (fSlow196 * (iSlow1?(fSlow3 * (fTemp3 * fTemp73)):(fSlow3 * (fTemp1 * fTemp73))))) + (fSlow198 * (iSlow1?(fSlow3 * (fTemp3 * fTemp74)):(fSlow3 * (fTemp1 * fTemp74))))) + (fSlow200 * (iSlow1?(fSlow3 * (fTemp3 * fTemp75)):(fSlow3 * (fTemp1 * fTemp75))))) + (fSlow203 * (iSlow1?(fSlow3 * (fTemp3 * fTemp76)):(fSlow3 * (fTemp1 * fTemp76))))) + (fSlow205 * (iSlow1?(fSlow3 * (fTemp3 * fTemp77)):(fSlow3 * (fTemp1 * fTemp77))))) + (fSlow207 * (iSlow1?(fSlow3 * (fTemp3 * fTemp78)):(fSlow3 * (fTemp1 * fTemp78))))) + (fSlow209 * (iSlow1?(fSlow3 * (fTemp3 * fTemp79)):(fSlow3 * (fTemp1 * fTemp79))))) + (fSlow212 * (iSlow1?(fSlow3 * (fTemp3 * fTemp80)):(fSlow3 * (fTemp1 * fTemp80))))) + (fSlow214 * (iSlow1?(fSlow3 * (fTemp3 * fTemp81)):(fSlow3 * (fTemp1 * fTemp81))))) + (fSlow216 * (iSlow1?(fSlow3 * (fTemp3 * fTemp82)):(fSlow3 * (fTemp1 * fTemp82))))) + (fSlow218 * (iSlow1?(fSlow3 * (fTemp3 * fTemp83)):(fSlow3 * (fTemp1 * fTemp83))))) + (fSlow221 * (iSlow1?(fSlow3 * (fTemp3 * fTemp84)):(fSlow3 * (fTemp1 * fTemp84))))) + (fSlow223 * (iSlow1?(fSlow3 * (fTemp3 * fTemp85)):(fSlow3 * (fTemp1 * fTemp85)))))) + ((fSlow233 * (iSlow1?(fSlow3 * (fTemp3 * fTemp86)):(fSlow3 * (fTemp1 * fTemp86)))) + ((fSlow12 * (((((((((fSlow236 * (iSlow1?(fSlow3 * (fTemp3 * fTemp87)):(fSlow3 * (fTemp1 * fTemp87)))) + (fSlow238 * (iSlow1?(fSlow3 * (fTemp3 * fTemp88)):(fSlow3 * (fTemp1 * fTemp88))))) + (fSlow241 * (iSlow1?(fSlow3 * (fTemp3 * fTemp89)):(fSlow3 * (fTemp1 * fTemp89))))) + (fSlow243 * (iSlow1?(fSlow3 * (fTemp3 * fTemp90)):(fSlow3 * (fTemp1 * fTemp90))))) + (fSlow247 * (iSlow1?(fSlow3 * (fTemp3 * fTemp91)):(fSlow3 * (fTemp1 * fTemp91))))) + (fSlow249 * (iSlow1?(fSlow3 * (fTemp3 * fTemp92)):(fSlow3 * (fTemp1 * fTemp92))))) + (fSlow252 * (iSlow1?(fSlow3 * (fTemp3 * fTemp93)):(fSlow3 * (fTemp1 * fTemp93))))) + (fSlow254 * (iSlow1?(fSlow3 * (fTemp3 * fTemp94)):(fSlow3 * (fTemp1 * fTemp94))))) + (fSlow256 * (iSlow1?(fSlow3 * (fTemp3 * fTemp95)):(fSlow3 * (fTemp1 * fTemp95)))))) + ((((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow257 * (iSlow1?(fSlow3 * (fTemp3 * fTemp96)):(fSlow3 * (fTemp1 * fTemp96))))) + (fSlow258 * (iSlow1?(fSlow3 * (fTemp3 * fTemp97)):(fSlow3 * (fTemp1 * fTemp97))))) + (fSlow259 * (iSlow1?(fSlow3 * (fTemp3 * fTemp98)):(fSlow3 * (fTemp1 * fTemp98))))) + (fSlow260 * (iSlow1?(fSlow3 * (fTemp3 * fTemp99)):(fSlow3 * (fTemp1 * fTemp99))))) + (fSlow7 * (((((((((((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp100)):(fSlow3 * (fTemp1 * fTemp100)))) + (fSlow261 * (iSlow1?(fSlow3 * (fTemp3 * fTemp101)):(fSlow3 * (fTemp1 * fTemp101))))) + (fSlow263 * (iSlow1?(fSlow3 * (fTemp3 * fTemp102)):(fSlow3 * (fTemp1 * fTemp102))))) + (fSlow264 * (iSlow1?(fSlow3 * (fTemp3 * fTemp103)):(fSlow3 * (fTemp1 * fTemp103))))) + (fSlow266 * (iSlow1?(fSlow3 * (fTemp3 * fTemp104)):(fSlow3 * (fTemp1 * fTemp104))))) + (fSlow268 * (iSlow1?(fSlow3 * (fTemp3 * fTemp105)):(fSlow3 * (fTemp1 * fTemp105))))) + (fSlow269 * (iSlow1?(fSlow3 * (fTemp3 * fTemp106)):(fSlow3 * (fTemp1 * fTemp106))))) + (fSlow271 * (iSlow1?(fSlow3 * (fTemp3 * fTemp107)):(fSlow3 * (fTemp1 * fTemp107))))) + (fSlow273 * (iSlow1?(fSlow3 * (fTemp3 * fTemp108)):(fSlow3 * (fTemp1 * fTemp108))))) + (fSlow275 * (iSlow1?(fSlow3 * (fTemp3 * fTemp109)):(fSlow3 * (fTemp1 * fTemp109))))) + (fSlow276 * (iSlow1?(fSlow3 * (fTemp3 * fTemp110)):(fSlow3 * (fTemp1 * fTemp110))))) + (fSlow278 * (iSlow1?(fSlow3 * (fTemp3 * fTemp111)):(fSlow3 * (fTemp1 * fTemp111))))) + (fSlow280 * (iSlow1?(fSlow3 * (fTemp3 * fTemp112)):(fSlow3 * (fTemp1 * fTemp112)))))))))))) + (fSlow281 * (((((((fSlow283 * (iSlow1?(fSlow3 * (fTemp3 * fTemp113)):(fSlow3 * (fTemp1 * fTemp113)))) + (fSlow285 * (iSlow1?(fSlow3 * (fTemp3 * fTemp114)):(fSlow3 * (fTemp1 * fTemp114))))) + (fSlow287 * (iSlow1?(fSlow3 * (fTemp3 * fTemp115)):(fSlow3 * (fTemp1 * fTemp115))))) + (fSlow290 * (iSlow1?(fSlow3 * (fTemp3 * fTemp116)):(fSlow3 * (fTemp1 * fTemp116))))) + (fSlow292 * (iSlow1?(fSlow3 * (fTemp3 * fTemp117)):(fSlow3 * (fTemp1 * fTemp117))))) + (fSlow295 * (iSlow1?(fSlow3 * (fTemp3 * fTemp118)):(fSlow3 * (fTemp1 * fTemp118))))) + (fSlow297 * (iSlow1?(fSlow3 * (fTemp3 * fTemp119)):(fSlow3 * (fTemp1 * fTemp119))))))) + (fSlow298 * (((fSlow300 * (iSlow1?(fSlow3 * (fTemp3 * fTemp120)):(fSlow3 * (fTemp1 * fTemp120)))) + (fSlow302 * (iSlow1?(fSlow3 * (fTemp3 * fTemp121)):(fSlow3 * (fTemp1 * fTemp121))))) + (fSlow304 * (iSlow1?(fSlow3 * (fTemp3 * fTemp122)):(fSlow3 * (fTemp1 * fTemp122)))))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp123))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp66)):(fSlow3 * (fRec0[0] * fTemp66))) + (fSlow305 * fTemp123))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp100)):(fSlow3 * (fRec0[0] * fTemp100))) + (fSlow306 * fTemp123))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp67)):(fSlow3 * (fRec0[0] * fTemp67))) + (fSlow307 * fTemp123))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow308 * fTemp123))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp68)):(fSlow3 * (fRec0[0] * fTemp68))) + (fSlow309 * fTemp123))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp96)):(fSlow3 * (fRec0[0] * fTemp96))) + (fSlow310 * fTemp123))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp69)):(fSlow3 * (fRec0[0] * fTemp69))) + (fSlow311 * fTemp123))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow312 * fTemp123))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow313 * fTemp123))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow314 * fTemp123))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp70)):(fSlow3 * (fRec0[0] * fTemp70))) + (fSlow315 * fTemp123))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp101)):(fSlow3 * (fRec0[0] * fTemp101))) + (fSlow316 * fTemp123))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp71)):(fSlow3 * (fRec0[0] * fTemp71))) + (fSlow317 * fTemp123))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow318 * fTemp123))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp51)):(fSlow3 * (fRec0[0] * fTemp51))) + (fSlow319 * fTemp123))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow320 * fTemp123))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp52)):(fSlow3 * (fRec0[0] * fTemp52))) + (fSlow321 * fTemp123))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow322 * fTemp123))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp72)):(fSlow3 * (fRec0[0] * fTemp72))) + (fSlow323 * fTemp123))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp97)):(fSlow3 * (fRec0[0] * fTemp97))) + (fSlow324 * fTemp123))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp73)):(fSlow3 * (fRec0[0] * fTemp73))) + (fSlow325 * fTemp123))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow326 * fTemp123))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp53)):(fSlow3 * (fRec0[0] * fTemp53))) + (fSlow327 * fTemp123))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow328 * fTemp123))); - output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow329 * fTemp123))); - output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp102)):(fSlow3 * (fRec0[0] * fTemp102))) + (fSlow330 * fTemp123))); - output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp54)):(fSlow3 * (fRec0[0] * fTemp54))) + (fSlow331 * fTemp123))); - output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow332 * fTemp123))); - output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp74)):(fSlow3 * (fRec0[0] * fTemp74))) + (fSlow333 * fTemp123))); - output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp103)):(fSlow3 * (fRec0[0] * fTemp103))) + (fSlow334 * fTemp123))); - output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp75)):(fSlow3 * (fRec0[0] * fTemp75))) + (fSlow335 * fTemp123))); - output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow336 * fTemp123))); - output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp55)):(fSlow3 * (fRec0[0] * fTemp55))) + (fSlow337 * fTemp123))); - output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp104)):(fSlow3 * (fRec0[0] * fTemp104))) + (fSlow338 * fTemp123))); - output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow339 * fTemp123))); - output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow340 * fTemp123))); - output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow341 * fTemp123))); - output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow342 * fTemp123))); - output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp56)):(fSlow3 * (fRec0[0] * fTemp56))) + (fSlow343 * fTemp123))); - output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow344 * fTemp123))); - output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp76)):(fSlow3 * (fRec0[0] * fTemp76))) + (fSlow345 * fTemp123))); - output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp98)):(fSlow3 * (fRec0[0] * fTemp98))) + (fSlow346 * fTemp123))); - output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp77)):(fSlow3 * (fRec0[0] * fTemp77))) + (fSlow347 * fTemp123))); - output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow348 * fTemp123))); - output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp57)):(fSlow3 * (fRec0[0] * fTemp57))) + (fSlow349 * fTemp123))); - output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow350 * fTemp123))); - output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow351 * fTemp123))); - output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow352 * fTemp123))); - output49[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp87)):(fSlow3 * (fRec0[0] * fTemp87))) + (fSlow353 * fTemp123))); - output50[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp105)):(fSlow3 * (fRec0[0] * fTemp105))) + (fSlow354 * fTemp123))); - output51[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow355 * fTemp123))); - output52[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow356 * fTemp123))); - output53[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp58)):(fSlow3 * (fRec0[0] * fTemp58))) + (fSlow357 * fTemp123))); - output54[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp88)):(fSlow3 * (fRec0[0] * fTemp88))) + (fSlow358 * fTemp123))); - output55[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp78)):(fSlow3 * (fRec0[0] * fTemp78))) + (fSlow359 * fTemp123))); - output56[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp106)):(fSlow3 * (fRec0[0] * fTemp106))) + (fSlow360 * fTemp123))); - output57[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp79)):(fSlow3 * (fRec0[0] * fTemp79))) + (fSlow361 * fTemp123))); - output58[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow362 * fTemp123))); - output59[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp59)):(fSlow3 * (fRec0[0] * fTemp59))) + (fSlow363 * fTemp123))); - output60[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp107)):(fSlow3 * (fRec0[0] * fTemp107))) + (fSlow364 * fTemp123))); - output61[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow365 * fTemp123))); - output62[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow366 * fTemp123))); - output63[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp113)):(fSlow3 * (fRec0[0] * fTemp113))) + (fSlow367 * fTemp123))); - output64[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp89)):(fSlow3 * (fRec0[0] * fTemp89))) + (fSlow368 * fTemp123))); - output65[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp114)):(fSlow3 * (fRec0[0] * fTemp114))) + (fSlow369 * fTemp123))); - output66[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow370 * fTemp123))); - output67[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow371 * fTemp123))); - output68[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp90)):(fSlow3 * (fRec0[0] * fTemp90))) + (fSlow372 * fTemp123))); - output69[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp60)):(fSlow3 * (fRec0[0] * fTemp60))) + (fSlow373 * fTemp123))); - output70[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow374 * fTemp123))); - output71[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp80)):(fSlow3 * (fRec0[0] * fTemp80))) + (fSlow375 * fTemp123))); - output72[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp99)):(fSlow3 * (fRec0[0] * fTemp99))) + (fSlow376 * fTemp123))); - output73[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp81)):(fSlow3 * (fRec0[0] * fTemp81))) + (fSlow377 * fTemp123))); - output74[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow378 * fTemp123))); - output75[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp61)):(fSlow3 * (fRec0[0] * fTemp61))) + (fSlow379 * fTemp123))); - output76[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow380 * fTemp123))); - output77[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))) + (fSlow381 * fTemp123))); - output78[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow382 * fTemp123))); - output79[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp115)):(fSlow3 * (fRec0[0] * fTemp115))) + (fSlow383 * fTemp123))); - output80[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow384 * fTemp123))); - output81[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp91)):(fSlow3 * (fRec0[0] * fTemp91))) + (fSlow385 * fTemp123))); - output82[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp108)):(fSlow3 * (fRec0[0] * fTemp108))) + (fSlow386 * fTemp123))); - output83[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp116)):(fSlow3 * (fRec0[0] * fTemp116))) + (fSlow387 * fTemp123))); - output84[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow388 * fTemp123))); - output85[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow389 * fTemp123))); - output86[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp92)):(fSlow3 * (fRec0[0] * fTemp92))) + (fSlow390 * fTemp123))); - output87[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp62)):(fSlow3 * (fRec0[0] * fTemp62))) + (fSlow391 * fTemp123))); - output88[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp109)):(fSlow3 * (fRec0[0] * fTemp109))) + (fSlow392 * fTemp123))); - output89[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp82)):(fSlow3 * (fRec0[0] * fTemp82))) + (fSlow393 * fTemp123))); - output90[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp110)):(fSlow3 * (fRec0[0] * fTemp110))) + (fSlow394 * fTemp123))); - output91[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp83)):(fSlow3 * (fRec0[0] * fTemp83))) + (fSlow395 * fTemp123))); - output92[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow396 * fTemp123))); - output93[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp63)):(fSlow3 * (fRec0[0] * fTemp63))) + (fSlow397 * fTemp123))); - output94[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp111)):(fSlow3 * (fRec0[0] * fTemp111))) + (fSlow398 * fTemp123))); - output95[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow399 * fTemp123))); - output96[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow400 * fTemp123))); - output97[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp117)):(fSlow3 * (fRec0[0] * fTemp117))) + (fSlow401 * fTemp123))); - output98[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp112)):(fSlow3 * (fRec0[0] * fTemp112))) + (fSlow402 * fTemp123))); - output99[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp120)):(fSlow3 * (fRec0[0] * fTemp120))) + (fSlow403 * fTemp123))); - output100[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp93)):(fSlow3 * (fRec0[0] * fTemp93))) + (fSlow404 * fTemp123))); - output101[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp121)):(fSlow3 * (fRec0[0] * fTemp121))) + (fSlow405 * fTemp123))); - output102[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow406 * fTemp123))); - output103[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp118)):(fSlow3 * (fRec0[0] * fTemp118))) + (fSlow407 * fTemp123))); - output104[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp94)):(fSlow3 * (fRec0[0] * fTemp94))) + (fSlow408 * fTemp123))); - output105[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow409 * fTemp123))); - output106[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow410 * fTemp123))); - output107[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp64)):(fSlow3 * (fRec0[0] * fTemp64))) + (fSlow411 * fTemp123))); - output108[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp95)):(fSlow3 * (fRec0[0] * fTemp95))) + (fSlow412 * fTemp123))); - output109[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp84)):(fSlow3 * (fRec0[0] * fTemp84))) + (fSlow413 * fTemp123))); - output110[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp86)):(fSlow3 * (fRec0[0] * fTemp86))) + (fSlow414 * fTemp123))); - output111[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp85)):(fSlow3 * (fRec0[0] * fTemp85))) + (fSlow415 * fTemp123))); - output112[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow416 * fTemp123))); - output113[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp65)):(fSlow3 * (fRec0[0] * fTemp65))) + (fSlow417 * fTemp123))); - output114[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow418 * fTemp123))); - output115[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow419 * fTemp123))); - output116[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow420 * fTemp123))); - output117[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp119)):(fSlow3 * (fRec0[0] * fTemp119))) + (fSlow421 * fTemp123))); - output118[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow422 * fTemp123))); - output119[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp122)):(fSlow3 * (fRec0[0] * fTemp122))) + (fSlow423 * fTemp123))); - output120[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow424 * fTemp123))); + double fTemp38 = double(input99[i]); + double fTemp39 = double(input101[i]); + double fTemp40 = double(input119[i]); + double fTemp41 = double(input63[i]); + double fTemp42 = double(input65[i]); + double fTemp43 = double(input79[i]); + double fTemp44 = double(input83[i]); + double fTemp45 = double(input97[i]); + double fTemp46 = double(input103[i]); + double fTemp47 = double(input117[i]); + double fTemp48 = double(input25[i]); + double fTemp49 = double(input35[i]); + double fTemp50 = double(input37[i]); + double fTemp51 = double(input47[i]); + double fTemp52 = double(input51[i]); + double fTemp53 = double(input61[i]); + double fTemp54 = double(input67[i]); + double fTemp55 = double(input77[i]); + double fTemp56 = double(input85[i]); + double fTemp57 = double(input95[i]); + double fTemp58 = double(input105[i]); + double fTemp59 = double(input115[i]); + double fTemp60 = double(input9[i]); + double fTemp61 = double(input15[i]); + double fTemp62 = double(input17[i]); + double fTemp63 = double(input23[i]); + double fTemp64 = double(input27[i]); + double fTemp65 = double(input33[i]); + double fTemp66 = double(input39[i]); + double fTemp67 = double(input45[i]); + double fTemp68 = double(input53[i]); + double fTemp69 = double(input59[i]); + double fTemp70 = double(input69[i]); + double fTemp71 = double(input75[i]); + double fTemp72 = double(input87[i]); + double fTemp73 = double(input93[i]); + double fTemp74 = double(input107[i]); + double fTemp75 = double(input113[i]); + double fTemp76 = double(input1[i]); + double fTemp77 = double(input3[i]); + double fTemp78 = double(input5[i]); + double fTemp79 = double(input7[i]); + double fTemp80 = double(input11[i]); + double fTemp81 = double(input13[i]); + double fTemp82 = double(input19[i]); + double fTemp83 = double(input21[i]); + double fTemp84 = double(input29[i]); + double fTemp85 = double(input31[i]); + double fTemp86 = double(input41[i]); + double fTemp87 = double(input43[i]); + double fTemp88 = double(input55[i]); + double fTemp89 = double(input57[i]); + double fTemp90 = double(input71[i]); + double fTemp91 = double(input73[i]); + double fTemp92 = double(input89[i]); + double fTemp93 = double(input91[i]); + double fTemp94 = double(input109[i]); + double fTemp95 = double(input111[i]); + double fTemp96 = double(input110[i]); + double fTemp97 = double(input49[i]); + double fTemp98 = double(input54[i]); + double fTemp99 = double(input64[i]); + double fTemp100 = double(input68[i]); + double fTemp101 = double(input81[i]); + double fTemp102 = double(input86[i]); + double fTemp103 = double(input100[i]); + double fTemp104 = double(input104[i]); + double fTemp105 = double(input108[i]); + double fTemp106 = double(input6[i]); + double fTemp107 = double(input20[i]); + double fTemp108 = double(input42[i]); + double fTemp109 = double(input72[i]); + double fTemp110 = double(input2[i]); + double fTemp111 = double(input12[i]); + double fTemp112 = double(input26[i]); + double fTemp113 = double(input30[i]); + double fTemp114 = double(input34[i]); + double fTemp115 = double(input50[i]); + double fTemp116 = double(input56[i]); + double fTemp117 = double(input60[i]); + double fTemp118 = double(input82[i]); + double fTemp119 = double(input88[i]); + double fTemp120 = double(input90[i]); + double fTemp121 = double(input94[i]); + double fTemp122 = double(input98[i]); + double fTemp123 = ((fSlow12 * ((((((((((((((((((((((((((((((((fConst2 * (((fConst5 * ((fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow20 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + (fSlow22 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5)))))) + (fSlow24 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6))))))) + (fSlow28 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow31 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8)))))) + (fSlow33 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9)))))) + (fSlow37 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10)))))) + (fSlow40 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp11)):(iSlow2?(fSlow4 * (fTemp3 * fTemp11)):(fSlow4 * (fTemp1 * fTemp11)))))) + (fSlow42 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp12)):(iSlow2?(fSlow4 * (fTemp3 * fTemp12)):(fSlow4 * (fTemp1 * fTemp12)))))) + (fSlow48 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp13)):(iSlow2?(fSlow4 * (fTemp3 * fTemp13)):(fSlow4 * (fTemp1 * fTemp13)))))) + (fSlow51 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp14)):(iSlow2?(fSlow4 * (fTemp3 * fTemp14)):(fSlow4 * (fTemp1 * fTemp14)))))) + (fSlow54 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp15)):(iSlow2?(fSlow4 * (fTemp3 * fTemp15)):(fSlow4 * (fTemp1 * fTemp15)))))) + (fSlow56 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp16)):(iSlow2?(fSlow4 * (fTemp3 * fTemp16)):(fSlow4 * (fTemp1 * fTemp16)))))) + (fSlow58 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp17)):(iSlow2?(fSlow4 * (fTemp3 * fTemp17)):(fSlow4 * (fTemp1 * fTemp17)))))) + (fSlow62 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp18)):(iSlow2?(fSlow4 * (fTemp3 * fTemp18)):(fSlow4 * (fTemp1 * fTemp18)))))) + (fSlow65 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp19)):(iSlow2?(fSlow4 * (fTemp3 * fTemp19)):(fSlow4 * (fTemp1 * fTemp19)))))) + (fSlow68 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp20)):(iSlow2?(fSlow4 * (fTemp3 * fTemp20)):(fSlow4 * (fTemp1 * fTemp20)))))) + (fSlow70 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp21)):(iSlow2?(fSlow4 * (fTemp3 * fTemp21)):(fSlow4 * (fTemp1 * fTemp21)))))) + (fSlow73 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp22)):(iSlow2?(fSlow4 * (fTemp3 * fTemp22)):(fSlow4 * (fTemp1 * fTemp22)))))) + (fSlow76 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp23)):(iSlow2?(fSlow4 * (fTemp3 * fTemp23)):(fSlow4 * (fTemp1 * fTemp23)))))) + (fSlow78 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp24)):(iSlow2?(fSlow4 * (fTemp3 * fTemp24)):(fSlow4 * (fTemp1 * fTemp24)))))) + (fSlow81 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp25)):(iSlow2?(fSlow4 * (fTemp3 * fTemp25)):(fSlow4 * (fTemp1 * fTemp25)))))) + (fSlow83 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp26)):(iSlow2?(fSlow4 * (fTemp3 * fTemp26)):(fSlow4 * (fTemp1 * fTemp26)))))) + (fSlow88 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp27)):(iSlow2?(fSlow4 * (fTemp3 * fTemp27)):(fSlow4 * (fTemp1 * fTemp27)))))) + (fSlow91 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp28)):(iSlow2?(fSlow4 * (fTemp3 * fTemp28)):(fSlow4 * (fTemp1 * fTemp28)))))) + (fSlow94 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp29)):(iSlow2?(fSlow4 * (fTemp3 * fTemp29)):(fSlow4 * (fTemp1 * fTemp29)))))) + (fSlow96 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp30)):(iSlow2?(fSlow4 * (fTemp3 * fTemp30)):(fSlow4 * (fTemp1 * fTemp30)))))) + (fSlow102 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp31)):(iSlow2?(fSlow4 * (fTemp3 * fTemp31)):(fSlow4 * (fTemp1 * fTemp31)))))) + (fSlow106 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp32)):(iSlow2?(fSlow4 * (fTemp3 * fTemp32)):(fSlow4 * (fTemp1 * fTemp32)))))) + (fSlow109 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp33)):(iSlow2?(fSlow4 * (fTemp3 * fTemp33)):(fSlow4 * (fTemp1 * fTemp33)))))) + (fSlow111 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp34)):(iSlow2?(fSlow4 * (fTemp3 * fTemp34)):(fSlow4 * (fTemp1 * fTemp34)))))) + (fSlow114 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp35)):(iSlow2?(fSlow4 * (fTemp3 * fTemp35)):(fSlow4 * (fTemp1 * fTemp35)))))) + (fSlow116 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp36)):(iSlow2?(fSlow4 * (fTemp3 * fTemp36)):(fSlow4 * (fTemp1 * fTemp36)))))) + (fSlow120 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp37)):(iSlow2?(fSlow4 * (fTemp3 * fTemp37)):(fSlow4 * (fTemp1 * fTemp37))))))) + ((fSlow122 * (((fSlow124 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp38)):(iSlow2?(fSlow4 * (fTemp3 * fTemp38)):(fSlow4 * (fTemp1 * fTemp38))))) + (fSlow128 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp39)):(iSlow2?(fSlow4 * (fTemp3 * fTemp39)):(fSlow4 * (fTemp1 * fTemp39)))))) + (fSlow130 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp40)):(iSlow2?(fSlow4 * (fTemp3 * fTemp40)):(fSlow4 * (fTemp1 * fTemp40))))))) + ((fSlow132 * (((((((fSlow134 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp41)):(iSlow2?(fSlow4 * (fTemp3 * fTemp41)):(fSlow4 * (fTemp1 * fTemp41))))) + (fSlow136 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp42)):(iSlow2?(fSlow4 * (fTemp3 * fTemp42)):(fSlow4 * (fTemp1 * fTemp42)))))) + (fSlow138 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp43)):(iSlow2?(fSlow4 * (fTemp3 * fTemp43)):(fSlow4 * (fTemp1 * fTemp43)))))) + (fSlow141 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp44)):(iSlow2?(fSlow4 * (fTemp3 * fTemp44)):(fSlow4 * (fTemp1 * fTemp44)))))) + (fSlow143 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp45)):(iSlow2?(fSlow4 * (fTemp3 * fTemp45)):(fSlow4 * (fTemp1 * fTemp45)))))) + (fSlow146 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp46)):(iSlow2?(fSlow4 * (fTemp3 * fTemp46)):(fSlow4 * (fTemp1 * fTemp46)))))) + (fSlow148 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp47)):(iSlow2?(fSlow4 * (fTemp3 * fTemp47)):(fSlow4 * (fTemp1 * fTemp47))))))) + ((fSlow150 * (((((((((((fConst93 * ((fSlow151 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp48)):(iSlow2?(fSlow4 * (fTemp3 * fTemp48)):(fSlow4 * (fTemp1 * fTemp48))))) + (fSlow152 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp49)):(iSlow2?(fSlow4 * (fTemp3 * fTemp49)):(fSlow4 * (fTemp1 * fTemp49))))))) + (fSlow154 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp50)):(iSlow2?(fSlow4 * (fTemp3 * fTemp50)):(fSlow4 * (fTemp1 * fTemp50)))))) + (fSlow156 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp51)):(iSlow2?(fSlow4 * (fTemp3 * fTemp51)):(fSlow4 * (fTemp1 * fTemp51)))))) + (fSlow159 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp52)):(iSlow2?(fSlow4 * (fTemp3 * fTemp52)):(fSlow4 * (fTemp1 * fTemp52)))))) + (fSlow161 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp53)):(iSlow2?(fSlow4 * (fTemp3 * fTemp53)):(fSlow4 * (fTemp1 * fTemp53)))))) + (fSlow164 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp54)):(iSlow2?(fSlow4 * (fTemp3 * fTemp54)):(fSlow4 * (fTemp1 * fTemp54)))))) + (fSlow166 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp55)):(iSlow2?(fSlow4 * (fTemp3 * fTemp55)):(fSlow4 * (fTemp1 * fTemp55)))))) + (fSlow169 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp56)):(iSlow2?(fSlow4 * (fTemp3 * fTemp56)):(fSlow4 * (fTemp1 * fTemp56)))))) + (fSlow171 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp57)):(iSlow2?(fSlow4 * (fTemp3 * fTemp57)):(fSlow4 * (fTemp1 * fTemp57)))))) + (fSlow174 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp58)):(iSlow2?(fSlow4 * (fTemp3 * fTemp58)):(fSlow4 * (fTemp1 * fTemp58)))))) + (fSlow176 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp59)):(iSlow2?(fSlow4 * (fTemp3 * fTemp59)):(fSlow4 * (fTemp1 * fTemp59))))))) + ((fSlow178 * (((((((((((((((fConst106 * ((fSlow179 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp60)):(iSlow2?(fSlow4 * (fTemp3 * fTemp60)):(fSlow4 * (fTemp1 * fTemp60))))) + (fSlow180 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp61)):(iSlow2?(fSlow4 * (fTemp3 * fTemp61)):(fSlow4 * (fTemp1 * fTemp61))))))) + (fSlow182 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp62)):(iSlow2?(fSlow4 * (fTemp3 * fTemp62)):(fSlow4 * (fTemp1 * fTemp62)))))) + (fSlow184 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp63)):(iSlow2?(fSlow4 * (fTemp3 * fTemp63)):(fSlow4 * (fTemp1 * fTemp63)))))) + (fSlow187 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp64)):(iSlow2?(fSlow4 * (fTemp3 * fTemp64)):(fSlow4 * (fTemp1 * fTemp64)))))) + (fSlow189 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp65)):(iSlow2?(fSlow4 * (fTemp3 * fTemp65)):(fSlow4 * (fTemp1 * fTemp65)))))) + (fSlow192 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp66)):(iSlow2?(fSlow4 * (fTemp3 * fTemp66)):(fSlow4 * (fTemp1 * fTemp66)))))) + (fSlow194 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp67)):(iSlow2?(fSlow4 * (fTemp3 * fTemp67)):(fSlow4 * (fTemp1 * fTemp67)))))) + (fSlow197 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp68)):(iSlow2?(fSlow4 * (fTemp3 * fTemp68)):(fSlow4 * (fTemp1 * fTemp68)))))) + (fSlow199 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp69)):(iSlow2?(fSlow4 * (fTemp3 * fTemp69)):(fSlow4 * (fTemp1 * fTemp69)))))) + (fSlow202 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp70)):(iSlow2?(fSlow4 * (fTemp3 * fTemp70)):(fSlow4 * (fTemp1 * fTemp70)))))) + (fSlow204 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp71)):(iSlow2?(fSlow4 * (fTemp3 * fTemp71)):(fSlow4 * (fTemp1 * fTemp71)))))) + (fSlow207 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp72)):(iSlow2?(fSlow4 * (fTemp3 * fTemp72)):(fSlow4 * (fTemp1 * fTemp72)))))) + (fSlow209 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp73)):(iSlow2?(fSlow4 * (fTemp3 * fTemp73)):(fSlow4 * (fTemp1 * fTemp73)))))) + (fSlow212 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp74)):(iSlow2?(fSlow4 * (fTemp3 * fTemp74)):(fSlow4 * (fTemp1 * fTemp74)))))) + (fSlow214 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp75)):(iSlow2?(fSlow4 * (fTemp3 * fTemp75)):(fSlow4 * (fTemp1 * fTemp75))))))) + ((fSlow216 * (((((((((((((((((((fConst123 * ((fSlow15 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp76)):(iSlow2?(fSlow4 * (fTemp3 * fTemp76)):(fSlow4 * (fTemp1 * fTemp76))))) + (fSlow14 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp77)):(iSlow2?(fSlow4 * (fTemp3 * fTemp77)):(fSlow4 * (fTemp1 * fTemp77))))))) + (fSlow217 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp78)):(iSlow2?(fSlow4 * (fTemp3 * fTemp78)):(fSlow4 * (fTemp1 * fTemp78)))))) + (fSlow218 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp79)):(iSlow2?(fSlow4 * (fTemp3 * fTemp79)):(fSlow4 * (fTemp1 * fTemp79)))))) + (fSlow220 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp80)):(iSlow2?(fSlow4 * (fTemp3 * fTemp80)):(fSlow4 * (fTemp1 * fTemp80)))))) + (fSlow222 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp81)):(iSlow2?(fSlow4 * (fTemp3 * fTemp81)):(fSlow4 * (fTemp1 * fTemp81)))))) + (fSlow225 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp82)):(iSlow2?(fSlow4 * (fTemp3 * fTemp82)):(fSlow4 * (fTemp1 * fTemp82)))))) + (fSlow227 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp83)):(iSlow2?(fSlow4 * (fTemp3 * fTemp83)):(fSlow4 * (fTemp1 * fTemp83)))))) + (fSlow229 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp84)):(iSlow2?(fSlow4 * (fTemp3 * fTemp84)):(fSlow4 * (fTemp1 * fTemp84)))))) + (fSlow231 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp85)):(iSlow2?(fSlow4 * (fTemp3 * fTemp85)):(fSlow4 * (fTemp1 * fTemp85)))))) + (fSlow234 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp86)):(iSlow2?(fSlow4 * (fTemp3 * fTemp86)):(fSlow4 * (fTemp1 * fTemp86)))))) + (fSlow236 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp87)):(iSlow2?(fSlow4 * (fTemp3 * fTemp87)):(fSlow4 * (fTemp1 * fTemp87)))))) + (fSlow238 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp88)):(iSlow2?(fSlow4 * (fTemp3 * fTemp88)):(fSlow4 * (fTemp1 * fTemp88)))))) + (fSlow240 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp89)):(iSlow2?(fSlow4 * (fTemp3 * fTemp89)):(fSlow4 * (fTemp1 * fTemp89)))))) + (fSlow243 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp90)):(iSlow2?(fSlow4 * (fTemp3 * fTemp90)):(fSlow4 * (fTemp1 * fTemp90)))))) + (fSlow245 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp91)):(iSlow2?(fSlow4 * (fTemp3 * fTemp91)):(fSlow4 * (fTemp1 * fTemp91)))))) + (fSlow247 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp92)):(iSlow2?(fSlow4 * (fTemp3 * fTemp92)):(fSlow4 * (fTemp1 * fTemp92)))))) + (fSlow249 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp93)):(iSlow2?(fSlow4 * (fTemp3 * fTemp93)):(fSlow4 * (fTemp1 * fTemp93)))))) + (fSlow252 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp94)):(iSlow2?(fSlow4 * (fTemp3 * fTemp94)):(fSlow4 * (fTemp1 * fTemp94)))))) + (fSlow254 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp95)):(iSlow2?(fSlow4 * (fTemp3 * fTemp95)):(fSlow4 * (fTemp1 * fTemp95))))))) + ((fSlow264 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp96)):(iSlow2?(fSlow4 * (fTemp3 * fTemp96)):(fSlow4 * (fTemp1 * fTemp96))))) + ((fSlow15 * (((((((((fSlow266 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp97)):(iSlow2?(fSlow4 * (fTemp3 * fTemp97)):(fSlow4 * (fTemp1 * fTemp97))))) + (fSlow268 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp98)):(iSlow2?(fSlow4 * (fTemp3 * fTemp98)):(fSlow4 * (fTemp1 * fTemp98)))))) + (fSlow270 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp99)):(iSlow2?(fSlow4 * (fTemp3 * fTemp99)):(fSlow4 * (fTemp1 * fTemp99)))))) + (fSlow272 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp100)):(iSlow2?(fSlow4 * (fTemp3 * fTemp100)):(fSlow4 * (fTemp1 * fTemp100)))))) + (fSlow274 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp101)):(iSlow2?(fSlow4 * (fTemp3 * fTemp101)):(fSlow4 * (fTemp1 * fTemp101)))))) + (fSlow276 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp102)):(iSlow2?(fSlow4 * (fTemp3 * fTemp102)):(fSlow4 * (fTemp1 * fTemp102)))))) + (fSlow279 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp103)):(iSlow2?(fSlow4 * (fTemp3 * fTemp103)):(fSlow4 * (fTemp1 * fTemp103)))))) + (fSlow281 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp104)):(iSlow2?(fSlow4 * (fTemp3 * fTemp104)):(fSlow4 * (fTemp1 * fTemp104)))))) + (fSlow283 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp105)):(iSlow2?(fSlow4 * (fTemp3 * fTemp105)):(fSlow4 * (fTemp1 * fTemp105))))))) + ((((((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow284 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp106)):(iSlow2?(fSlow4 * (fTemp3 * fTemp106)):(fSlow4 * (fTemp1 * fTemp106)))))) + (fSlow285 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp107)):(iSlow2?(fSlow4 * (fTemp3 * fTemp107)):(fSlow4 * (fTemp1 * fTemp107)))))) + (fSlow286 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp108)):(iSlow2?(fSlow4 * (fTemp3 * fTemp108)):(fSlow4 * (fTemp1 * fTemp108)))))) + (fSlow287 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp109)):(iSlow2?(fSlow4 * (fTemp3 * fTemp109)):(fSlow4 * (fTemp1 * fTemp109)))))) + (fSlow10 * (((((((((((((1.7320508075688772 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp110)):(iSlow2?(fSlow4 * (fTemp3 * fTemp110)):(fSlow4 * (fTemp1 * fTemp110))))) + (fSlow288 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp111)):(iSlow2?(fSlow4 * (fTemp3 * fTemp111)):(fSlow4 * (fTemp1 * fTemp111)))))) + (fSlow290 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp112)):(iSlow2?(fSlow4 * (fTemp3 * fTemp112)):(fSlow4 * (fTemp1 * fTemp112)))))) + (fSlow291 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp113)):(iSlow2?(fSlow4 * (fTemp3 * fTemp113)):(fSlow4 * (fTemp1 * fTemp113)))))) + (fSlow293 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp114)):(iSlow2?(fSlow4 * (fTemp3 * fTemp114)):(fSlow4 * (fTemp1 * fTemp114)))))) + (fSlow295 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp115)):(iSlow2?(fSlow4 * (fTemp3 * fTemp115)):(fSlow4 * (fTemp1 * fTemp115)))))) + (fSlow296 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp116)):(iSlow2?(fSlow4 * (fTemp3 * fTemp116)):(fSlow4 * (fTemp1 * fTemp116)))))) + (fSlow298 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp117)):(iSlow2?(fSlow4 * (fTemp3 * fTemp117)):(fSlow4 * (fTemp1 * fTemp117)))))) + (fSlow300 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp118)):(iSlow2?(fSlow4 * (fTemp3 * fTemp118)):(fSlow4 * (fTemp1 * fTemp118)))))) + (fSlow302 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp119)):(iSlow2?(fSlow4 * (fTemp3 * fTemp119)):(fSlow4 * (fTemp1 * fTemp119)))))) + (fSlow303 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp120)):(iSlow2?(fSlow4 * (fTemp3 * fTemp120)):(fSlow4 * (fTemp1 * fTemp120)))))) + (fSlow305 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp121)):(iSlow2?(fSlow4 * (fTemp3 * fTemp121)):(fSlow4 * (fTemp1 * fTemp121)))))) + (fSlow307 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp122)):(iSlow2?(fSlow4 * (fTemp3 * fTemp122)):(fSlow4 * (fTemp1 * fTemp122)))))))))))))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp123))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp76):(iSlow2?(fSlow4 * (fRec1[0] * fTemp76)):(fSlow4 * (fRec0[0] * fTemp76)))) + (fSlow308 * fTemp123))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp110):(iSlow2?(fSlow4 * (fRec1[0] * fTemp110)):(fSlow4 * (fRec0[0] * fTemp110)))) + (fSlow309 * fTemp123))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp77):(iSlow2?(fSlow4 * (fRec1[0] * fTemp77)):(fSlow4 * (fRec0[0] * fTemp77)))) + (fSlow310 * fTemp123))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow311 * fTemp123))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp78):(iSlow2?(fSlow4 * (fRec1[0] * fTemp78)):(fSlow4 * (fRec0[0] * fTemp78)))) + (fSlow312 * fTemp123))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp106):(iSlow2?(fSlow4 * (fRec1[0] * fTemp106)):(fSlow4 * (fRec0[0] * fTemp106)))) + (fSlow313 * fTemp123))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp79):(iSlow2?(fSlow4 * (fRec1[0] * fTemp79)):(fSlow4 * (fRec0[0] * fTemp79)))) + (fSlow314 * fTemp123))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow315 * fTemp123))); + output9[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp60):(iSlow2?(fSlow4 * (fRec1[0] * fTemp60)):(fSlow4 * (fRec0[0] * fTemp60)))) + (fSlow316 * fTemp123))); + output10[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow317 * fTemp123))); + output11[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp80):(iSlow2?(fSlow4 * (fRec1[0] * fTemp80)):(fSlow4 * (fRec0[0] * fTemp80)))) + (fSlow318 * fTemp123))); + output12[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp111):(iSlow2?(fSlow4 * (fRec1[0] * fTemp111)):(fSlow4 * (fRec0[0] * fTemp111)))) + (fSlow319 * fTemp123))); + output13[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp81):(iSlow2?(fSlow4 * (fRec1[0] * fTemp81)):(fSlow4 * (fRec0[0] * fTemp81)))) + (fSlow320 * fTemp123))); + output14[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow321 * fTemp123))); + output15[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp61):(iSlow2?(fSlow4 * (fRec1[0] * fTemp61)):(fSlow4 * (fRec0[0] * fTemp61)))) + (fSlow322 * fTemp123))); + output16[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow323 * fTemp123))); + output17[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp62):(iSlow2?(fSlow4 * (fRec1[0] * fTemp62)):(fSlow4 * (fRec0[0] * fTemp62)))) + (fSlow324 * fTemp123))); + output18[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow325 * fTemp123))); + output19[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp82):(iSlow2?(fSlow4 * (fRec1[0] * fTemp82)):(fSlow4 * (fRec0[0] * fTemp82)))) + (fSlow326 * fTemp123))); + output20[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp107):(iSlow2?(fSlow4 * (fRec1[0] * fTemp107)):(fSlow4 * (fRec0[0] * fTemp107)))) + (fSlow327 * fTemp123))); + output21[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp83):(iSlow2?(fSlow4 * (fRec1[0] * fTemp83)):(fSlow4 * (fRec0[0] * fTemp83)))) + (fSlow328 * fTemp123))); + output22[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow329 * fTemp123))); + output23[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp63):(iSlow2?(fSlow4 * (fRec1[0] * fTemp63)):(fSlow4 * (fRec0[0] * fTemp63)))) + (fSlow330 * fTemp123))); + output24[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow331 * fTemp123))); + output25[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp48):(iSlow2?(fSlow4 * (fRec1[0] * fTemp48)):(fSlow4 * (fRec0[0] * fTemp48)))) + (fSlow332 * fTemp123))); + output26[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp112):(iSlow2?(fSlow4 * (fRec1[0] * fTemp112)):(fSlow4 * (fRec0[0] * fTemp112)))) + (fSlow333 * fTemp123))); + output27[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp64):(iSlow2?(fSlow4 * (fRec1[0] * fTemp64)):(fSlow4 * (fRec0[0] * fTemp64)))) + (fSlow334 * fTemp123))); + output28[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp11):(iSlow2?(fSlow4 * (fRec1[0] * fTemp11)):(fSlow4 * (fRec0[0] * fTemp11)))) + (fSlow335 * fTemp123))); + output29[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp84):(iSlow2?(fSlow4 * (fRec1[0] * fTemp84)):(fSlow4 * (fRec0[0] * fTemp84)))) + (fSlow336 * fTemp123))); + output30[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp113):(iSlow2?(fSlow4 * (fRec1[0] * fTemp113)):(fSlow4 * (fRec0[0] * fTemp113)))) + (fSlow337 * fTemp123))); + output31[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp85):(iSlow2?(fSlow4 * (fRec1[0] * fTemp85)):(fSlow4 * (fRec0[0] * fTemp85)))) + (fSlow338 * fTemp123))); + output32[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp12):(iSlow2?(fSlow4 * (fRec1[0] * fTemp12)):(fSlow4 * (fRec0[0] * fTemp12)))) + (fSlow339 * fTemp123))); + output33[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp65):(iSlow2?(fSlow4 * (fRec1[0] * fTemp65)):(fSlow4 * (fRec0[0] * fTemp65)))) + (fSlow340 * fTemp123))); + output34[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp114):(iSlow2?(fSlow4 * (fRec1[0] * fTemp114)):(fSlow4 * (fRec0[0] * fTemp114)))) + (fSlow341 * fTemp123))); + output35[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp49):(iSlow2?(fSlow4 * (fRec1[0] * fTemp49)):(fSlow4 * (fRec0[0] * fTemp49)))) + (fSlow342 * fTemp123))); + output36[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp13):(iSlow2?(fSlow4 * (fRec1[0] * fTemp13)):(fSlow4 * (fRec0[0] * fTemp13)))) + (fSlow343 * fTemp123))); + output37[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp50):(iSlow2?(fSlow4 * (fRec1[0] * fTemp50)):(fSlow4 * (fRec0[0] * fTemp50)))) + (fSlow344 * fTemp123))); + output38[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp14):(iSlow2?(fSlow4 * (fRec1[0] * fTemp14)):(fSlow4 * (fRec0[0] * fTemp14)))) + (fSlow345 * fTemp123))); + output39[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp66):(iSlow2?(fSlow4 * (fRec1[0] * fTemp66)):(fSlow4 * (fRec0[0] * fTemp66)))) + (fSlow346 * fTemp123))); + output40[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp15):(iSlow2?(fSlow4 * (fRec1[0] * fTemp15)):(fSlow4 * (fRec0[0] * fTemp15)))) + (fSlow347 * fTemp123))); + output41[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp86):(iSlow2?(fSlow4 * (fRec1[0] * fTemp86)):(fSlow4 * (fRec0[0] * fTemp86)))) + (fSlow348 * fTemp123))); + output42[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp108):(iSlow2?(fSlow4 * (fRec1[0] * fTemp108)):(fSlow4 * (fRec0[0] * fTemp108)))) + (fSlow349 * fTemp123))); + output43[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp87):(iSlow2?(fSlow4 * (fRec1[0] * fTemp87)):(fSlow4 * (fRec0[0] * fTemp87)))) + (fSlow350 * fTemp123))); + output44[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp16):(iSlow2?(fSlow4 * (fRec1[0] * fTemp16)):(fSlow4 * (fRec0[0] * fTemp16)))) + (fSlow351 * fTemp123))); + output45[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp67):(iSlow2?(fSlow4 * (fRec1[0] * fTemp67)):(fSlow4 * (fRec0[0] * fTemp67)))) + (fSlow352 * fTemp123))); + output46[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp17):(iSlow2?(fSlow4 * (fRec1[0] * fTemp17)):(fSlow4 * (fRec0[0] * fTemp17)))) + (fSlow353 * fTemp123))); + output47[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp51):(iSlow2?(fSlow4 * (fRec1[0] * fTemp51)):(fSlow4 * (fRec0[0] * fTemp51)))) + (fSlow354 * fTemp123))); + output48[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp18):(iSlow2?(fSlow4 * (fRec1[0] * fTemp18)):(fSlow4 * (fRec0[0] * fTemp18)))) + (fSlow355 * fTemp123))); + output49[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp97):(iSlow2?(fSlow4 * (fRec1[0] * fTemp97)):(fSlow4 * (fRec0[0] * fTemp97)))) + (fSlow356 * fTemp123))); + output50[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp115):(iSlow2?(fSlow4 * (fRec1[0] * fTemp115)):(fSlow4 * (fRec0[0] * fTemp115)))) + (fSlow357 * fTemp123))); + output51[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp52):(iSlow2?(fSlow4 * (fRec1[0] * fTemp52)):(fSlow4 * (fRec0[0] * fTemp52)))) + (fSlow358 * fTemp123))); + output52[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp19):(iSlow2?(fSlow4 * (fRec1[0] * fTemp19)):(fSlow4 * (fRec0[0] * fTemp19)))) + (fSlow359 * fTemp123))); + output53[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp68):(iSlow2?(fSlow4 * (fRec1[0] * fTemp68)):(fSlow4 * (fRec0[0] * fTemp68)))) + (fSlow360 * fTemp123))); + output54[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp98):(iSlow2?(fSlow4 * (fRec1[0] * fTemp98)):(fSlow4 * (fRec0[0] * fTemp98)))) + (fSlow361 * fTemp123))); + output55[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp88):(iSlow2?(fSlow4 * (fRec1[0] * fTemp88)):(fSlow4 * (fRec0[0] * fTemp88)))) + (fSlow362 * fTemp123))); + output56[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp116):(iSlow2?(fSlow4 * (fRec1[0] * fTemp116)):(fSlow4 * (fRec0[0] * fTemp116)))) + (fSlow363 * fTemp123))); + output57[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp89):(iSlow2?(fSlow4 * (fRec1[0] * fTemp89)):(fSlow4 * (fRec0[0] * fTemp89)))) + (fSlow364 * fTemp123))); + output58[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp20):(iSlow2?(fSlow4 * (fRec1[0] * fTemp20)):(fSlow4 * (fRec0[0] * fTemp20)))) + (fSlow365 * fTemp123))); + output59[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp69):(iSlow2?(fSlow4 * (fRec1[0] * fTemp69)):(fSlow4 * (fRec0[0] * fTemp69)))) + (fSlow366 * fTemp123))); + output60[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp117):(iSlow2?(fSlow4 * (fRec1[0] * fTemp117)):(fSlow4 * (fRec0[0] * fTemp117)))) + (fSlow367 * fTemp123))); + output61[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp53):(iSlow2?(fSlow4 * (fRec1[0] * fTemp53)):(fSlow4 * (fRec0[0] * fTemp53)))) + (fSlow368 * fTemp123))); + output62[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp21):(iSlow2?(fSlow4 * (fRec1[0] * fTemp21)):(fSlow4 * (fRec0[0] * fTemp21)))) + (fSlow369 * fTemp123))); + output63[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp41):(iSlow2?(fSlow4 * (fRec1[0] * fTemp41)):(fSlow4 * (fRec0[0] * fTemp41)))) + (fSlow370 * fTemp123))); + output64[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp99):(iSlow2?(fSlow4 * (fRec1[0] * fTemp99)):(fSlow4 * (fRec0[0] * fTemp99)))) + (fSlow371 * fTemp123))); + output65[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp42):(iSlow2?(fSlow4 * (fRec1[0] * fTemp42)):(fSlow4 * (fRec0[0] * fTemp42)))) + (fSlow372 * fTemp123))); + output66[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp22):(iSlow2?(fSlow4 * (fRec1[0] * fTemp22)):(fSlow4 * (fRec0[0] * fTemp22)))) + (fSlow373 * fTemp123))); + output67[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp54):(iSlow2?(fSlow4 * (fRec1[0] * fTemp54)):(fSlow4 * (fRec0[0] * fTemp54)))) + (fSlow374 * fTemp123))); + output68[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp100):(iSlow2?(fSlow4 * (fRec1[0] * fTemp100)):(fSlow4 * (fRec0[0] * fTemp100)))) + (fSlow375 * fTemp123))); + output69[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp70):(iSlow2?(fSlow4 * (fRec1[0] * fTemp70)):(fSlow4 * (fRec0[0] * fTemp70)))) + (fSlow376 * fTemp123))); + output70[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp23):(iSlow2?(fSlow4 * (fRec1[0] * fTemp23)):(fSlow4 * (fRec0[0] * fTemp23)))) + (fSlow377 * fTemp123))); + output71[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp90):(iSlow2?(fSlow4 * (fRec1[0] * fTemp90)):(fSlow4 * (fRec0[0] * fTemp90)))) + (fSlow378 * fTemp123))); + output72[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp109):(iSlow2?(fSlow4 * (fRec1[0] * fTemp109)):(fSlow4 * (fRec0[0] * fTemp109)))) + (fSlow379 * fTemp123))); + output73[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp91):(iSlow2?(fSlow4 * (fRec1[0] * fTemp91)):(fSlow4 * (fRec0[0] * fTemp91)))) + (fSlow380 * fTemp123))); + output74[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp24):(iSlow2?(fSlow4 * (fRec1[0] * fTemp24)):(fSlow4 * (fRec0[0] * fTemp24)))) + (fSlow381 * fTemp123))); + output75[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp71):(iSlow2?(fSlow4 * (fRec1[0] * fTemp71)):(fSlow4 * (fRec0[0] * fTemp71)))) + (fSlow382 * fTemp123))); + output76[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp25):(iSlow2?(fSlow4 * (fRec1[0] * fTemp25)):(fSlow4 * (fRec0[0] * fTemp25)))) + (fSlow383 * fTemp123))); + output77[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp55):(iSlow2?(fSlow4 * (fRec1[0] * fTemp55)):(fSlow4 * (fRec0[0] * fTemp55)))) + (fSlow384 * fTemp123))); + output78[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp26):(iSlow2?(fSlow4 * (fRec1[0] * fTemp26)):(fSlow4 * (fRec0[0] * fTemp26)))) + (fSlow385 * fTemp123))); + output79[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp43):(iSlow2?(fSlow4 * (fRec1[0] * fTemp43)):(fSlow4 * (fRec0[0] * fTemp43)))) + (fSlow386 * fTemp123))); + output80[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp27):(iSlow2?(fSlow4 * (fRec1[0] * fTemp27)):(fSlow4 * (fRec0[0] * fTemp27)))) + (fSlow387 * fTemp123))); + output81[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp101):(iSlow2?(fSlow4 * (fRec1[0] * fTemp101)):(fSlow4 * (fRec0[0] * fTemp101)))) + (fSlow388 * fTemp123))); + output82[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp118):(iSlow2?(fSlow4 * (fRec1[0] * fTemp118)):(fSlow4 * (fRec0[0] * fTemp118)))) + (fSlow389 * fTemp123))); + output83[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp44):(iSlow2?(fSlow4 * (fRec1[0] * fTemp44)):(fSlow4 * (fRec0[0] * fTemp44)))) + (fSlow390 * fTemp123))); + output84[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp28):(iSlow2?(fSlow4 * (fRec1[0] * fTemp28)):(fSlow4 * (fRec0[0] * fTemp28)))) + (fSlow391 * fTemp123))); + output85[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp56):(iSlow2?(fSlow4 * (fRec1[0] * fTemp56)):(fSlow4 * (fRec0[0] * fTemp56)))) + (fSlow392 * fTemp123))); + output86[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp102):(iSlow2?(fSlow4 * (fRec1[0] * fTemp102)):(fSlow4 * (fRec0[0] * fTemp102)))) + (fSlow393 * fTemp123))); + output87[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp72):(iSlow2?(fSlow4 * (fRec1[0] * fTemp72)):(fSlow4 * (fRec0[0] * fTemp72)))) + (fSlow394 * fTemp123))); + output88[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp119):(iSlow2?(fSlow4 * (fRec1[0] * fTemp119)):(fSlow4 * (fRec0[0] * fTemp119)))) + (fSlow395 * fTemp123))); + output89[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp92):(iSlow2?(fSlow4 * (fRec1[0] * fTemp92)):(fSlow4 * (fRec0[0] * fTemp92)))) + (fSlow396 * fTemp123))); + output90[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp120):(iSlow2?(fSlow4 * (fRec1[0] * fTemp120)):(fSlow4 * (fRec0[0] * fTemp120)))) + (fSlow397 * fTemp123))); + output91[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp93):(iSlow2?(fSlow4 * (fRec1[0] * fTemp93)):(fSlow4 * (fRec0[0] * fTemp93)))) + (fSlow398 * fTemp123))); + output92[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp29):(iSlow2?(fSlow4 * (fRec1[0] * fTemp29)):(fSlow4 * (fRec0[0] * fTemp29)))) + (fSlow399 * fTemp123))); + output93[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp73):(iSlow2?(fSlow4 * (fRec1[0] * fTemp73)):(fSlow4 * (fRec0[0] * fTemp73)))) + (fSlow400 * fTemp123))); + output94[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp121):(iSlow2?(fSlow4 * (fRec1[0] * fTemp121)):(fSlow4 * (fRec0[0] * fTemp121)))) + (fSlow401 * fTemp123))); + output95[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp57):(iSlow2?(fSlow4 * (fRec1[0] * fTemp57)):(fSlow4 * (fRec0[0] * fTemp57)))) + (fSlow402 * fTemp123))); + output96[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp30):(iSlow2?(fSlow4 * (fRec1[0] * fTemp30)):(fSlow4 * (fRec0[0] * fTemp30)))) + (fSlow403 * fTemp123))); + output97[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp45):(iSlow2?(fSlow4 * (fRec1[0] * fTemp45)):(fSlow4 * (fRec0[0] * fTemp45)))) + (fSlow404 * fTemp123))); + output98[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp122):(iSlow2?(fSlow4 * (fRec1[0] * fTemp122)):(fSlow4 * (fRec0[0] * fTemp122)))) + (fSlow405 * fTemp123))); + output99[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp38):(iSlow2?(fSlow4 * (fRec1[0] * fTemp38)):(fSlow4 * (fRec0[0] * fTemp38)))) + (fSlow406 * fTemp123))); + output100[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp103):(iSlow2?(fSlow4 * (fRec1[0] * fTemp103)):(fSlow4 * (fRec0[0] * fTemp103)))) + (fSlow407 * fTemp123))); + output101[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp39):(iSlow2?(fSlow4 * (fRec1[0] * fTemp39)):(fSlow4 * (fRec0[0] * fTemp39)))) + (fSlow408 * fTemp123))); + output102[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp31):(iSlow2?(fSlow4 * (fRec1[0] * fTemp31)):(fSlow4 * (fRec0[0] * fTemp31)))) + (fSlow409 * fTemp123))); + output103[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp46):(iSlow2?(fSlow4 * (fRec1[0] * fTemp46)):(fSlow4 * (fRec0[0] * fTemp46)))) + (fSlow410 * fTemp123))); + output104[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp104):(iSlow2?(fSlow4 * (fRec1[0] * fTemp104)):(fSlow4 * (fRec0[0] * fTemp104)))) + (fSlow411 * fTemp123))); + output105[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp58):(iSlow2?(fSlow4 * (fRec1[0] * fTemp58)):(fSlow4 * (fRec0[0] * fTemp58)))) + (fSlow412 * fTemp123))); + output106[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp32):(iSlow2?(fSlow4 * (fRec1[0] * fTemp32)):(fSlow4 * (fRec0[0] * fTemp32)))) + (fSlow413 * fTemp123))); + output107[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp74):(iSlow2?(fSlow4 * (fRec1[0] * fTemp74)):(fSlow4 * (fRec0[0] * fTemp74)))) + (fSlow414 * fTemp123))); + output108[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp105):(iSlow2?(fSlow4 * (fRec1[0] * fTemp105)):(fSlow4 * (fRec0[0] * fTemp105)))) + (fSlow415 * fTemp123))); + output109[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp94):(iSlow2?(fSlow4 * (fRec1[0] * fTemp94)):(fSlow4 * (fRec0[0] * fTemp94)))) + (fSlow416 * fTemp123))); + output110[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp96):(iSlow2?(fSlow4 * (fRec1[0] * fTemp96)):(fSlow4 * (fRec0[0] * fTemp96)))) + (fSlow417 * fTemp123))); + output111[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp95):(iSlow2?(fSlow4 * (fRec1[0] * fTemp95)):(fSlow4 * (fRec0[0] * fTemp95)))) + (fSlow418 * fTemp123))); + output112[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp33):(iSlow2?(fSlow4 * (fRec1[0] * fTemp33)):(fSlow4 * (fRec0[0] * fTemp33)))) + (fSlow419 * fTemp123))); + output113[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp75):(iSlow2?(fSlow4 * (fRec1[0] * fTemp75)):(fSlow4 * (fRec0[0] * fTemp75)))) + (fSlow420 * fTemp123))); + output114[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp34):(iSlow2?(fSlow4 * (fRec1[0] * fTemp34)):(fSlow4 * (fRec0[0] * fTemp34)))) + (fSlow421 * fTemp123))); + output115[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp59):(iSlow2?(fSlow4 * (fRec1[0] * fTemp59)):(fSlow4 * (fRec0[0] * fTemp59)))) + (fSlow422 * fTemp123))); + output116[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp35):(iSlow2?(fSlow4 * (fRec1[0] * fTemp35)):(fSlow4 * (fRec0[0] * fTemp35)))) + (fSlow423 * fTemp123))); + output117[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp47):(iSlow2?(fSlow4 * (fRec1[0] * fTemp47)):(fSlow4 * (fRec0[0] * fTemp47)))) + (fSlow424 * fTemp123))); + output118[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp36):(iSlow2?(fSlow4 * (fRec1[0] * fTemp36)):(fSlow4 * (fRec0[0] * fTemp36)))) + (fSlow425 * fTemp123))); + output119[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp40):(iSlow2?(fSlow4 * (fRec1[0] * fTemp40)):(fSlow4 * (fRec0[0] * fTemp40)))) + (fSlow426 * fTemp123))); + output120[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp37):(iSlow2?(fSlow4 * (fRec1[0] * fTemp37)):(fSlow4 * (fRec0[0] * fTemp37)))) + (fSlow427 * fTemp123))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2Hoa2.cpp b/source/HOAUGens/HOABeamDirac2HOA2.cpp similarity index 87% rename from source/HOAUGens/HOABeamDirac2Hoa2.cpp rename to source/HOAUGens/HOABeamDirac2HOA2.cpp index a16d9da2c9..55cd772d23 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa2.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA2.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA2" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -637,17 +637,19 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; FAUSTFLOAT fEntry0; double fRec0[2]; double fRec1[2]; + FAUSTFLOAT fVslider0; double fConst2; double fConst3; - FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -668,6 +670,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA2"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -829,10 +832,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -882,18 +887,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -917,49 +926,52 @@ class mydsp : public dsp { FAUSTFLOAT* output6 = outputs[6]; FAUSTFLOAT* output7 = outputs[7]; FAUSTFLOAT* output8 = outputs[8]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = mydsp_faustpower2_f(fSlow7); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); double fSlow9 = (1.0 - fSlow8); - double fSlow10 = (fConst3 * fSlow9); - double fSlow11 = double(fVslider1); - double fSlow12 = cos(fSlow11); - double fSlow13 = sin(fSlow11); - double fSlow14 = (6.3830764864229232 * (fSlow12 * fSlow13)); - double fSlow15 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow16 = ((2.0 * mydsp_faustpower2_f(fSlow12)) + -1.0); - double fSlow17 = (3.1915382432114616 * fSlow16); - double fSlow18 = pow(fSlow9, 0.5); - double fSlow19 = (fConst4 * fSlow18); - double fSlow20 = (fConst8 * (fSlow7 * fSlow13)); - double fSlow21 = (fSlow12 * fSlow7); - double fSlow22 = (fConst8 * fSlow21); - double fSlow23 = (1.7320508075688772 * fSlow7); - double fSlow24 = ((3.0 * fSlow8) + -1.0); - double fSlow25 = (1.1180339887498949 * fSlow24); - double fSlow26 = (fConst9 * (fSlow18 * fSlow13)); - double fSlow27 = (0.13783222385544802 * fSlow7); - double fSlow28 = (fConst9 * (fSlow12 * fSlow18)); - double fSlow29 = (fConst10 * ((fSlow12 * fSlow9) * fSlow13)); - double fSlow30 = (fConst11 * ((fSlow7 * fSlow18) * fSlow13)); - double fSlow31 = (0.088970317927147144 * fSlow24); - double fSlow32 = (fConst11 * (fSlow21 * fSlow18)); - double fSlow33 = (fConst12 * (fSlow16 * fSlow9)); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = mydsp_faustpower2_f(fSlow10); + double fSlow12 = (1.0 - fSlow11); + double fSlow13 = (fConst3 * fSlow12); + double fSlow14 = double(fVslider2); + double fSlow15 = cos(fSlow14); + double fSlow16 = sin(fSlow14); + double fSlow17 = (6.3830764864229232 * (fSlow15 * fSlow16)); + double fSlow18 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow19 = ((2.0 * mydsp_faustpower2_f(fSlow15)) + -1.0); + double fSlow20 = (3.1915382432114616 * fSlow19); + double fSlow21 = pow(fSlow12, 0.5); + double fSlow22 = (fConst4 * fSlow21); + double fSlow23 = (fConst8 * (fSlow10 * fSlow16)); + double fSlow24 = (fSlow15 * fSlow10); + double fSlow25 = (fConst8 * fSlow24); + double fSlow26 = (1.7320508075688772 * fSlow10); + double fSlow27 = ((3.0 * fSlow11) + -1.0); + double fSlow28 = (1.1180339887498949 * fSlow27); + double fSlow29 = (fConst9 * (fSlow21 * fSlow16)); + double fSlow30 = (0.13783222385544802 * fSlow10); + double fSlow31 = (fConst9 * (fSlow15 * fSlow21)); + double fSlow32 = (fConst10 * ((fSlow15 * fSlow12) * fSlow16)); + double fSlow33 = (fConst11 * ((fSlow10 * fSlow21) * fSlow16)); + double fSlow34 = (0.088970317927147144 * fSlow27); + double fSlow35 = (fConst11 * (fSlow24 * fSlow21)); + double fSlow36 = (fConst12 * (fSlow19 * fSlow12)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow15 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow18 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input4[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input8[i]); double fTemp5 = double(input1[i]); @@ -968,16 +980,16 @@ class mydsp : public dsp { double fTemp8 = double(input7[i]); double fTemp9 = double(input2[i]); double fTemp10 = double(input6[i]); - double fTemp11 = ((fSlow10 * ((fSlow14 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + ((fSlow19 * (((fConst6 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5)))) + (fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow20 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow22 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8)))))) + (((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp11))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow26 * fTemp11))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow27 * fTemp11))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow28 * fTemp11))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow29 * fTemp11))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow30 * fTemp11))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow31 * fTemp11))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow32 * fTemp11))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow33 * fTemp11))); + double fTemp11 = ((fSlow13 * ((fSlow17 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow20 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + ((fSlow22 * (((fConst6 * ((fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5))))) + (fSlow15 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6))))))) + (fSlow23 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow25 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8))))))) + (((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow26 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9)))))) + (fSlow28 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10)))))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp11))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow29 * fTemp11))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow30 * fTemp11))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow31 * fTemp11))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow32 * fTemp11))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow33 * fTemp11))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow34 * fTemp11))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow35 * fTemp11))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow36 * fTemp11))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2Hoa3.cpp b/source/HOAUGens/HOABeamDirac2HOA3.cpp similarity index 83% rename from source/HOAUGens/HOABeamDirac2Hoa3.cpp rename to source/HOAUGens/HOABeamDirac2HOA3.cpp index 773fef0f8c..ccb1c6aa62 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa3.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA3.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA3" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -637,18 +637,20 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; FAUSTFLOAT fEntry0; double fRec0[2]; double fRec1[2]; + FAUSTFLOAT fVslider0; double fConst2; double fConst3; double fConst4; - FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -685,6 +687,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA3"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -919,10 +922,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -972,18 +977,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -1021,70 +1030,73 @@ class mydsp : public dsp { FAUSTFLOAT* output13 = outputs[13]; FAUSTFLOAT* output14 = outputs[14]; FAUSTFLOAT* output15 = outputs[15]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = mydsp_faustpower2_f(fSlow7); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); double fSlow9 = (1.0 - fSlow8); - double fSlow10 = pow(fSlow9, 1.5); - double fSlow11 = (fConst4 * fSlow10); - double fSlow12 = double(fVslider1); - double fSlow13 = cos(fSlow12); - double fSlow14 = mydsp_faustpower2_f(fSlow13); - double fSlow15 = ((4.0 * fSlow14) + -1.0); - double fSlow16 = sin(fSlow12); - double fSlow17 = (fSlow15 * fSlow16); - double fSlow18 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow19 = ((2.0 * fSlow14) + -1.0); - double fSlow20 = (((2.0 * fSlow19) + -1.0) * fSlow13); - double fSlow21 = (fConst5 * fSlow9); - double fSlow22 = (6.3830764864229232 * (fSlow13 * fSlow16)); - double fSlow23 = (3.1915382432114616 * fSlow19); - double fSlow24 = (fSlow13 * fSlow7); - double fSlow25 = (fConst10 * (fSlow24 * fSlow16)); - double fSlow26 = (fSlow19 * fSlow7); - double fSlow27 = (fConst11 * fSlow26); - double fSlow28 = pow(fSlow9, 0.5); - double fSlow29 = (fConst12 * fSlow28); - double fSlow30 = (fConst17 * (fSlow7 * fSlow16)); - double fSlow31 = (fConst17 * fSlow24); - double fSlow32 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); - double fSlow33 = (fConst19 * (fSlow32 * fSlow16)); - double fSlow34 = (fSlow32 * fSlow13); - double fSlow35 = (fConst19 * fSlow34); - double fSlow36 = ((3.0 * fSlow8) + -1.0); - double fSlow37 = ((2.5 * fSlow36) + -2.0); - double fSlow38 = (0.88191710368819687 * fSlow37); - double fSlow39 = (1.1180339887498949 * fSlow36); - double fSlow40 = (fConst20 * (fSlow28 * fSlow16)); - double fSlow41 = (0.13783222385544802 * fSlow7); - double fSlow42 = (fConst20 * (fSlow13 * fSlow28)); - double fSlow43 = (fConst22 * ((fSlow13 * fSlow9) * fSlow16)); - double fSlow44 = (fConst23 * ((fSlow7 * fSlow28) * fSlow16)); - double fSlow45 = (0.088970317927147144 * fSlow36); - double fSlow46 = (fConst23 * (fSlow24 * fSlow28)); - double fSlow47 = (fConst24 * (fSlow19 * fSlow9)); - double fSlow48 = (fConst25 * ((fSlow15 * fSlow10) * fSlow16)); - double fSlow49 = (fConst27 * ((fSlow24 * fSlow9) * fSlow16)); - double fSlow50 = (fConst28 * ((fSlow32 * fSlow28) * fSlow16)); - double fSlow51 = (0.070180733224632072 * (fSlow37 * fSlow7)); - double fSlow52 = (fConst28 * (fSlow34 * fSlow28)); - double fSlow53 = (fConst29 * (fSlow26 * fSlow9)); - double fSlow54 = (fConst25 * (fSlow20 * fSlow10)); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = mydsp_faustpower2_f(fSlow10); + double fSlow12 = (1.0 - fSlow11); + double fSlow13 = pow(fSlow12, 1.5); + double fSlow14 = (fConst4 * fSlow13); + double fSlow15 = double(fVslider2); + double fSlow16 = cos(fSlow15); + double fSlow17 = mydsp_faustpower2_f(fSlow16); + double fSlow18 = ((4.0 * fSlow17) + -1.0); + double fSlow19 = sin(fSlow15); + double fSlow20 = (fSlow18 * fSlow19); + double fSlow21 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow22 = ((2.0 * fSlow17) + -1.0); + double fSlow23 = (((2.0 * fSlow22) + -1.0) * fSlow16); + double fSlow24 = (fConst5 * fSlow12); + double fSlow25 = (6.3830764864229232 * (fSlow16 * fSlow19)); + double fSlow26 = (3.1915382432114616 * fSlow22); + double fSlow27 = (fSlow16 * fSlow10); + double fSlow28 = (fConst10 * (fSlow27 * fSlow19)); + double fSlow29 = (fSlow22 * fSlow10); + double fSlow30 = (fConst11 * fSlow29); + double fSlow31 = pow(fSlow12, 0.5); + double fSlow32 = (fConst12 * fSlow31); + double fSlow33 = (fConst17 * (fSlow10 * fSlow19)); + double fSlow34 = (fConst17 * fSlow27); + double fSlow35 = ((16.925687506432688 * fSlow11) + -3.3851375012865379); + double fSlow36 = (fConst19 * (fSlow35 * fSlow19)); + double fSlow37 = (fSlow35 * fSlow16); + double fSlow38 = (fConst19 * fSlow37); + double fSlow39 = ((3.0 * fSlow11) + -1.0); + double fSlow40 = ((2.5 * fSlow39) + -2.0); + double fSlow41 = (0.88191710368819687 * fSlow40); + double fSlow42 = (1.1180339887498949 * fSlow39); + double fSlow43 = (fConst20 * (fSlow31 * fSlow19)); + double fSlow44 = (0.13783222385544802 * fSlow10); + double fSlow45 = (fConst20 * (fSlow16 * fSlow31)); + double fSlow46 = (fConst22 * ((fSlow16 * fSlow12) * fSlow19)); + double fSlow47 = (fConst23 * ((fSlow10 * fSlow31) * fSlow19)); + double fSlow48 = (0.088970317927147144 * fSlow39); + double fSlow49 = (fConst23 * (fSlow27 * fSlow31)); + double fSlow50 = (fConst24 * (fSlow22 * fSlow12)); + double fSlow51 = (fConst25 * ((fSlow18 * fSlow13) * fSlow19)); + double fSlow52 = (fConst27 * ((fSlow27 * fSlow12) * fSlow19)); + double fSlow53 = (fConst28 * ((fSlow35 * fSlow31) * fSlow19)); + double fSlow54 = (0.070180733224632072 * (fSlow40 * fSlow10)); + double fSlow55 = (fConst28 * (fSlow37 * fSlow31)); + double fSlow56 = (fConst29 * (fSlow29 * fSlow12)); + double fSlow57 = (fConst25 * (fSlow23 * fSlow13)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow18 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow21 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input9[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input15[i]); double fTemp5 = double(input4[i]); @@ -1100,23 +1112,23 @@ class mydsp : public dsp { double fTemp15 = double(input2[i]); double fTemp16 = double(input12[i]); double fTemp17 = double(input6[i]); - double fTemp18 = ((fSlow11 * ((fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow20 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + ((fSlow21 * (((fConst7 * ((fSlow22 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5)))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow27 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8)))))) + ((fSlow29 * (((((fConst15 * ((fSlow16 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9)))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10)))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow31 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow33 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow35 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14)))))) + ((fSlow7 * ((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))) + (fSlow38 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))))) + ((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp18))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow40 * fTemp18))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow41 * fTemp18))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow42 * fTemp18))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow43 * fTemp18))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow44 * fTemp18))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow45 * fTemp18))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow46 * fTemp18))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow47 * fTemp18))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow48 * fTemp18))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow49 * fTemp18))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow50 * fTemp18))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow51 * fTemp18))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow52 * fTemp18))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow53 * fTemp18))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow54 * fTemp18))); + double fTemp18 = ((fSlow14 * ((fSlow20 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow23 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + ((fSlow24 * (((fConst7 * ((fSlow25 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6))))))) + (fSlow28 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow30 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8))))))) + ((fSlow32 * (((((fConst15 * ((fSlow19 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9))))) + (fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10))))))) + (fSlow33 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp11)):(iSlow2?(fSlow4 * (fTemp3 * fTemp11)):(fSlow4 * (fTemp1 * fTemp11)))))) + (fSlow34 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp12)):(iSlow2?(fSlow4 * (fTemp3 * fTemp12)):(fSlow4 * (fTemp1 * fTemp12)))))) + (fSlow36 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp13)):(iSlow2?(fSlow4 * (fTemp3 * fTemp13)):(fSlow4 * (fTemp1 * fTemp13)))))) + (fSlow38 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp14)):(iSlow2?(fSlow4 * (fTemp3 * fTemp14)):(fSlow4 * (fTemp1 * fTemp14))))))) + ((fSlow10 * ((1.7320508075688772 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp15)):(iSlow2?(fSlow4 * (fTemp3 * fTemp15)):(fSlow4 * (fTemp1 * fTemp15))))) + (fSlow41 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp16)):(iSlow2?(fSlow4 * (fTemp3 * fTemp16)):(fSlow4 * (fTemp1 * fTemp16))))))) + ((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow42 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp17)):(iSlow2?(fSlow4 * (fTemp3 * fTemp17)):(fSlow4 * (fTemp1 * fTemp17)))))))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp18))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow43 * fTemp18))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp15):(iSlow2?(fSlow4 * (fRec1[0] * fTemp15)):(fSlow4 * (fRec0[0] * fTemp15)))) + (fSlow44 * fTemp18))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow45 * fTemp18))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow46 * fTemp18))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp11):(iSlow2?(fSlow4 * (fRec1[0] * fTemp11)):(fSlow4 * (fRec0[0] * fTemp11)))) + (fSlow47 * fTemp18))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp17):(iSlow2?(fSlow4 * (fRec1[0] * fTemp17)):(fSlow4 * (fRec0[0] * fTemp17)))) + (fSlow48 * fTemp18))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp12):(iSlow2?(fSlow4 * (fRec1[0] * fTemp12)):(fSlow4 * (fRec0[0] * fTemp12)))) + (fSlow49 * fTemp18))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow50 * fTemp18))); + output9[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow51 * fTemp18))); + output10[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow52 * fTemp18))); + output11[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp13):(iSlow2?(fSlow4 * (fRec1[0] * fTemp13)):(fSlow4 * (fRec0[0] * fTemp13)))) + (fSlow53 * fTemp18))); + output12[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp16):(iSlow2?(fSlow4 * (fRec1[0] * fTemp16)):(fSlow4 * (fRec0[0] * fTemp16)))) + (fSlow54 * fTemp18))); + output13[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp14):(iSlow2?(fSlow4 * (fRec1[0] * fTemp14)):(fSlow4 * (fRec0[0] * fTemp14)))) + (fSlow55 * fTemp18))); + output14[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow56 * fTemp18))); + output15[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow57 * fTemp18))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2Hoa4.cpp b/source/HOAUGens/HOABeamDirac2HOA4.cpp similarity index 78% rename from source/HOAUGens/HOABeamDirac2Hoa4.cpp rename to source/HOAUGens/HOABeamDirac2HOA4.cpp index b5db86bd2c..dc4b50f9b1 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa4.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA4.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA4" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -637,6 +637,7 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; @@ -644,12 +645,13 @@ class mydsp : public dsp { double fRec0[2]; double fRec1[2]; FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; double fConst2; double fConst3; double fConst4; double fConst5; - FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -705,6 +707,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA4"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -1031,10 +1034,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -1084,18 +1089,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -1151,100 +1160,103 @@ class mydsp : public dsp { FAUSTFLOAT* output22 = outputs[22]; FAUSTFLOAT* output23 = outputs[23]; FAUSTFLOAT* output24 = outputs[24]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = mydsp_faustpower2_f(fSlow7); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); double fSlow9 = (1.0 - fSlow8); - double fSlow10 = double(fVslider1); - double fSlow11 = cos(fSlow10); - double fSlow12 = sin(fSlow10); - double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); - double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow15 = mydsp_faustpower2_f(fSlow11); - double fSlow16 = ((2.0 * fSlow15) + -1.0); - double fSlow17 = (3.1915382432114616 * fSlow16); - double fSlow18 = (fSlow11 * fSlow7); - double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); - double fSlow20 = (fSlow16 * fSlow7); - double fSlow21 = (fConst10 * fSlow20); - double fSlow22 = ((4.0 * fSlow15) + -1.0); - double fSlow23 = ((fSlow22 + -1.0) * fSlow11); - double fSlow24 = (fConst12 * ((fSlow23 * fSlow9) * fSlow12)); - double fSlow25 = ((78.986541696685876 * fSlow8) + -11.283791670955125); - double fSlow26 = (fSlow25 * fSlow11); - double fSlow27 = (fConst16 * (fSlow26 * fSlow12)); - double fSlow28 = (fSlow16 * fSlow25); - double fSlow29 = (fConst17 * fSlow28); - double fSlow30 = ((2.0 * fSlow16) + -1.0); - double fSlow31 = (1.0 - (2.0 * ((1.0 - fSlow30) * fSlow15))); - double fSlow32 = (fConst18 * (fSlow31 * fSlow9)); - double fSlow33 = pow(fSlow9, 1.5); - double fSlow34 = (fConst19 * fSlow33); - double fSlow35 = (fSlow22 * fSlow12); - double fSlow36 = (fSlow30 * fSlow11); - double fSlow37 = (fSlow22 * fSlow7); - double fSlow38 = (fConst23 * (fSlow37 * fSlow12)); - double fSlow39 = (fSlow36 * fSlow7); - double fSlow40 = (fConst23 * fSlow39); - double fSlow41 = pow(fSlow9, 0.5); - double fSlow42 = (fConst24 * fSlow41); - double fSlow43 = (fConst29 * (fSlow7 * fSlow12)); - double fSlow44 = (fConst29 * fSlow18); - double fSlow45 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); - double fSlow46 = (fConst31 * (fSlow45 * fSlow12)); - double fSlow47 = (fSlow45 * fSlow11); - double fSlow48 = (fConst31 * fSlow47); - double fSlow49 = ((3.5 * fSlow45) + -13.540550005146152); - double fSlow50 = (fSlow49 * fSlow7); - double fSlow51 = (fConst33 * (fSlow50 * fSlow12)); - double fSlow52 = ((fSlow49 * fSlow11) * fSlow7); - double fSlow53 = (fConst33 * fSlow52); - double fSlow54 = ((3.0 * fSlow8) + -1.0); - double fSlow55 = ((2.5 * fSlow54) + -2.0); - double fSlow56 = (0.88191710368819687 * fSlow55); - double fSlow57 = (1.1180339887498949 * fSlow54); - double fSlow58 = ((2.333333333333333 * (fSlow55 * fSlow8)) - (1.5 * fSlow54)); - double fSlow59 = (0.75 * fSlow58); - double fSlow60 = (fConst34 * (fSlow41 * fSlow12)); - double fSlow61 = (0.13783222385544802 * fSlow7); - double fSlow62 = (fConst34 * (fSlow11 * fSlow41)); - double fSlow63 = (fConst36 * ((fSlow11 * fSlow9) * fSlow12)); - double fSlow64 = (fConst37 * ((fSlow7 * fSlow41) * fSlow12)); - double fSlow65 = (0.088970317927147144 * fSlow54); - double fSlow66 = (fConst37 * (fSlow18 * fSlow41)); - double fSlow67 = (fConst38 * (fSlow16 * fSlow9)); - double fSlow68 = (fConst39 * ((fSlow22 * fSlow33) * fSlow12)); - double fSlow69 = (fConst41 * ((fSlow18 * fSlow9) * fSlow12)); - double fSlow70 = (fConst42 * ((fSlow45 * fSlow41) * fSlow12)); - double fSlow71 = (0.070180733224632072 * (fSlow55 * fSlow7)); - double fSlow72 = (fConst42 * (fSlow47 * fSlow41)); - double fSlow73 = (fConst43 * (fSlow20 * fSlow9)); - double fSlow74 = (fConst39 * (fSlow36 * fSlow33)); - double fSlow75 = mydsp_faustpower2_f(fSlow9); - double fSlow76 = (fConst44 * ((fSlow23 * fSlow75) * fSlow12)); - double fSlow77 = (fConst45 * ((fSlow37 * fSlow33) * fSlow12)); - double fSlow78 = (fConst46 * ((fSlow26 * fSlow9) * fSlow12)); - double fSlow79 = (fConst47 * ((fSlow50 * fSlow41) * fSlow12)); - double fSlow80 = (0.059683103659460751 * fSlow58); - double fSlow81 = (fConst47 * (fSlow52 * fSlow41)); - double fSlow82 = (fConst48 * (fSlow28 * fSlow9)); - double fSlow83 = (fConst45 * (fSlow39 * fSlow33)); - double fSlow84 = (fConst49 * (fSlow31 * fSlow75)); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = mydsp_faustpower2_f(fSlow10); + double fSlow12 = (1.0 - fSlow11); + double fSlow13 = double(fVslider2); + double fSlow14 = cos(fSlow13); + double fSlow15 = sin(fSlow13); + double fSlow16 = (6.3830764864229232 * (fSlow14 * fSlow15)); + double fSlow17 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow18 = mydsp_faustpower2_f(fSlow14); + double fSlow19 = ((2.0 * fSlow18) + -1.0); + double fSlow20 = (3.1915382432114616 * fSlow19); + double fSlow21 = (fSlow14 * fSlow10); + double fSlow22 = (fConst9 * (fSlow21 * fSlow15)); + double fSlow23 = (fSlow19 * fSlow10); + double fSlow24 = (fConst10 * fSlow23); + double fSlow25 = ((4.0 * fSlow18) + -1.0); + double fSlow26 = ((fSlow25 + -1.0) * fSlow14); + double fSlow27 = (fConst12 * ((fSlow26 * fSlow12) * fSlow15)); + double fSlow28 = ((78.986541696685876 * fSlow11) + -11.283791670955125); + double fSlow29 = (fSlow28 * fSlow14); + double fSlow30 = (fConst16 * (fSlow29 * fSlow15)); + double fSlow31 = (fSlow19 * fSlow28); + double fSlow32 = (fConst17 * fSlow31); + double fSlow33 = ((2.0 * fSlow19) + -1.0); + double fSlow34 = (1.0 - (2.0 * ((1.0 - fSlow33) * fSlow18))); + double fSlow35 = (fConst18 * (fSlow34 * fSlow12)); + double fSlow36 = pow(fSlow12, 1.5); + double fSlow37 = (fConst19 * fSlow36); + double fSlow38 = (fSlow25 * fSlow15); + double fSlow39 = (fSlow33 * fSlow14); + double fSlow40 = (fSlow25 * fSlow10); + double fSlow41 = (fConst23 * (fSlow40 * fSlow15)); + double fSlow42 = (fSlow39 * fSlow10); + double fSlow43 = (fConst23 * fSlow42); + double fSlow44 = pow(fSlow12, 0.5); + double fSlow45 = (fConst24 * fSlow44); + double fSlow46 = (fConst29 * (fSlow10 * fSlow15)); + double fSlow47 = (fConst29 * fSlow21); + double fSlow48 = ((16.925687506432688 * fSlow11) + -3.3851375012865379); + double fSlow49 = (fConst31 * (fSlow48 * fSlow15)); + double fSlow50 = (fSlow48 * fSlow14); + double fSlow51 = (fConst31 * fSlow50); + double fSlow52 = ((3.5 * fSlow48) + -13.540550005146152); + double fSlow53 = (fSlow52 * fSlow10); + double fSlow54 = (fConst33 * (fSlow53 * fSlow15)); + double fSlow55 = ((fSlow52 * fSlow14) * fSlow10); + double fSlow56 = (fConst33 * fSlow55); + double fSlow57 = ((3.0 * fSlow11) + -1.0); + double fSlow58 = ((2.5 * fSlow57) + -2.0); + double fSlow59 = (0.88191710368819687 * fSlow58); + double fSlow60 = (1.1180339887498949 * fSlow57); + double fSlow61 = ((2.333333333333333 * (fSlow58 * fSlow11)) - (1.5 * fSlow57)); + double fSlow62 = (0.75 * fSlow61); + double fSlow63 = (fConst34 * (fSlow44 * fSlow15)); + double fSlow64 = (0.13783222385544802 * fSlow10); + double fSlow65 = (fConst34 * (fSlow14 * fSlow44)); + double fSlow66 = (fConst36 * ((fSlow14 * fSlow12) * fSlow15)); + double fSlow67 = (fConst37 * ((fSlow10 * fSlow44) * fSlow15)); + double fSlow68 = (0.088970317927147144 * fSlow57); + double fSlow69 = (fConst37 * (fSlow21 * fSlow44)); + double fSlow70 = (fConst38 * (fSlow19 * fSlow12)); + double fSlow71 = (fConst39 * ((fSlow25 * fSlow36) * fSlow15)); + double fSlow72 = (fConst41 * ((fSlow21 * fSlow12) * fSlow15)); + double fSlow73 = (fConst42 * ((fSlow48 * fSlow44) * fSlow15)); + double fSlow74 = (0.070180733224632072 * (fSlow58 * fSlow10)); + double fSlow75 = (fConst42 * (fSlow50 * fSlow44)); + double fSlow76 = (fConst43 * (fSlow23 * fSlow12)); + double fSlow77 = (fConst39 * (fSlow39 * fSlow36)); + double fSlow78 = mydsp_faustpower2_f(fSlow12); + double fSlow79 = (fConst44 * ((fSlow26 * fSlow78) * fSlow15)); + double fSlow80 = (fConst45 * ((fSlow40 * fSlow36) * fSlow15)); + double fSlow81 = (fConst46 * ((fSlow29 * fSlow12) * fSlow15)); + double fSlow82 = (fConst47 * ((fSlow53 * fSlow44) * fSlow15)); + double fSlow83 = (0.059683103659460751 * fSlow61); + double fSlow84 = (fConst47 * (fSlow55 * fSlow44)); + double fSlow85 = (fConst48 * (fSlow31 * fSlow12)); + double fSlow86 = (fConst45 * (fSlow42 * fSlow36)); + double fSlow87 = (fConst49 * (fSlow34 * fSlow78)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow17 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input4[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input8[i]); double fTemp5 = double(input10[i]); @@ -1269,32 +1281,32 @@ class mydsp : public dsp { double fTemp24 = double(input12[i]); double fTemp25 = double(input6[i]); double fTemp26 = double(input20[i]); - double fTemp27 = ((fSlow9 * (((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow27 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow29 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow32 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10)))))) + ((fSlow34 * (((fConst21 * ((fSlow35 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11)))) + (fSlow36 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12)))))) + (fSlow38 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14)))))) + ((fSlow42 * (((((((fConst26 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))))) + (fSlow43 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow44 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow48 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))))) + (((fSlow7 * ((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23)))) + (fSlow56 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24)))))) + ((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow57 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25)))))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26)))))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp27))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow60 * fTemp27))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow61 * fTemp27))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow62 * fTemp27))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow63 * fTemp27))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow64 * fTemp27))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow65 * fTemp27))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow66 * fTemp27))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow67 * fTemp27))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow68 * fTemp27))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow69 * fTemp27))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow70 * fTemp27))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow71 * fTemp27))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow72 * fTemp27))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow73 * fTemp27))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow74 * fTemp27))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow76 * fTemp27))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow77 * fTemp27))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow78 * fTemp27))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow79 * fTemp27))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow80 * fTemp27))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow81 * fTemp27))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow82 * fTemp27))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow83 * fTemp27))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow84 * fTemp27))); + double fTemp27 = ((fSlow12 * (((((fConst2 * (((fConst5 * ((fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow20 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + (fSlow22 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5)))))) + (fSlow24 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6))))))) + (fSlow27 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow30 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8)))))) + (fSlow32 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9)))))) + (fSlow35 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10))))))) + ((fSlow37 * (((fConst21 * ((fSlow38 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp11)):(iSlow2?(fSlow4 * (fTemp3 * fTemp11)):(fSlow4 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp12)):(iSlow2?(fSlow4 * (fTemp3 * fTemp12)):(fSlow4 * (fTemp1 * fTemp12))))))) + (fSlow41 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp13)):(iSlow2?(fSlow4 * (fTemp3 * fTemp13)):(fSlow4 * (fTemp1 * fTemp13)))))) + (fSlow43 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp14)):(iSlow2?(fSlow4 * (fTemp3 * fTemp14)):(fSlow4 * (fTemp1 * fTemp14))))))) + ((fSlow45 * (((((((fConst26 * ((fSlow15 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp15)):(iSlow2?(fSlow4 * (fTemp3 * fTemp15)):(fSlow4 * (fTemp1 * fTemp15))))) + (fSlow14 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp16)):(iSlow2?(fSlow4 * (fTemp3 * fTemp16)):(fSlow4 * (fTemp1 * fTemp16))))))) + (fSlow46 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp17)):(iSlow2?(fSlow4 * (fTemp3 * fTemp17)):(fSlow4 * (fTemp1 * fTemp17)))))) + (fSlow47 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp18)):(iSlow2?(fSlow4 * (fTemp3 * fTemp18)):(fSlow4 * (fTemp1 * fTemp18)))))) + (fSlow49 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp19)):(iSlow2?(fSlow4 * (fTemp3 * fTemp19)):(fSlow4 * (fTemp1 * fTemp19)))))) + (fSlow51 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp20)):(iSlow2?(fSlow4 * (fTemp3 * fTemp20)):(fSlow4 * (fTemp1 * fTemp20)))))) + (fSlow54 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp21)):(iSlow2?(fSlow4 * (fTemp3 * fTemp21)):(fSlow4 * (fTemp1 * fTemp21)))))) + (fSlow56 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp22)):(iSlow2?(fSlow4 * (fTemp3 * fTemp22)):(fSlow4 * (fTemp1 * fTemp22))))))) + (((fSlow10 * ((1.7320508075688772 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp23)):(iSlow2?(fSlow4 * (fTemp3 * fTemp23)):(fSlow4 * (fTemp1 * fTemp23))))) + (fSlow59 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp24)):(iSlow2?(fSlow4 * (fTemp3 * fTemp24)):(fSlow4 * (fTemp1 * fTemp24))))))) + ((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow60 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp25)):(iSlow2?(fSlow4 * (fTemp3 * fTemp25)):(fSlow4 * (fTemp1 * fTemp25))))))) + (fSlow62 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp26)):(iSlow2?(fSlow4 * (fTemp3 * fTemp26)):(fSlow4 * (fTemp1 * fTemp26))))))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp27))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp15):(iSlow2?(fSlow4 * (fRec1[0] * fTemp15)):(fSlow4 * (fRec0[0] * fTemp15)))) + (fSlow63 * fTemp27))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp23):(iSlow2?(fSlow4 * (fRec1[0] * fTemp23)):(fSlow4 * (fRec0[0] * fTemp23)))) + (fSlow64 * fTemp27))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp16):(iSlow2?(fSlow4 * (fRec1[0] * fTemp16)):(fSlow4 * (fRec0[0] * fTemp16)))) + (fSlow65 * fTemp27))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow66 * fTemp27))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp17):(iSlow2?(fSlow4 * (fRec1[0] * fTemp17)):(fSlow4 * (fRec0[0] * fTemp17)))) + (fSlow67 * fTemp27))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp25):(iSlow2?(fSlow4 * (fRec1[0] * fTemp25)):(fSlow4 * (fRec0[0] * fTemp25)))) + (fSlow68 * fTemp27))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp18):(iSlow2?(fSlow4 * (fRec1[0] * fTemp18)):(fSlow4 * (fRec0[0] * fTemp18)))) + (fSlow69 * fTemp27))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow70 * fTemp27))); + output9[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp11):(iSlow2?(fSlow4 * (fRec1[0] * fTemp11)):(fSlow4 * (fRec0[0] * fTemp11)))) + (fSlow71 * fTemp27))); + output10[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow72 * fTemp27))); + output11[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp19):(iSlow2?(fSlow4 * (fRec1[0] * fTemp19)):(fSlow4 * (fRec0[0] * fTemp19)))) + (fSlow73 * fTemp27))); + output12[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp24):(iSlow2?(fSlow4 * (fRec1[0] * fTemp24)):(fSlow4 * (fRec0[0] * fTemp24)))) + (fSlow74 * fTemp27))); + output13[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp20):(iSlow2?(fSlow4 * (fRec1[0] * fTemp20)):(fSlow4 * (fRec0[0] * fTemp20)))) + (fSlow75 * fTemp27))); + output14[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow76 * fTemp27))); + output15[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp12):(iSlow2?(fSlow4 * (fRec1[0] * fTemp12)):(fSlow4 * (fRec0[0] * fTemp12)))) + (fSlow77 * fTemp27))); + output16[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow79 * fTemp27))); + output17[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp13):(iSlow2?(fSlow4 * (fRec1[0] * fTemp13)):(fSlow4 * (fRec0[0] * fTemp13)))) + (fSlow80 * fTemp27))); + output18[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow81 * fTemp27))); + output19[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp21):(iSlow2?(fSlow4 * (fRec1[0] * fTemp21)):(fSlow4 * (fRec0[0] * fTemp21)))) + (fSlow82 * fTemp27))); + output20[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp26):(iSlow2?(fSlow4 * (fRec1[0] * fTemp26)):(fSlow4 * (fRec0[0] * fTemp26)))) + (fSlow83 * fTemp27))); + output21[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp22):(iSlow2?(fSlow4 * (fRec1[0] * fTemp22)):(fSlow4 * (fRec0[0] * fTemp22)))) + (fSlow84 * fTemp27))); + output22[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow85 * fTemp27))); + output23[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp14):(iSlow2?(fSlow4 * (fRec1[0] * fTemp14)):(fSlow4 * (fRec0[0] * fTemp14)))) + (fSlow86 * fTemp27))); + output24[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow87 * fTemp27))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2Hoa5.cpp b/source/HOAUGens/HOABeamDirac2HOA5.cpp similarity index 73% rename from source/HOAUGens/HOABeamDirac2Hoa5.cpp rename to source/HOAUGens/HOABeamDirac2HOA5.cpp index 5c94984547..24bccd4452 100644 --- a/source/HOAUGens/HOABeamDirac2Hoa5.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA5.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA5" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -637,18 +637,20 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; FAUSTFLOAT fEntry0; double fRec0[2]; double fRec1[2]; + FAUSTFLOAT fVslider0; double fConst2; double fConst3; double fConst4; - FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -727,6 +729,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA5"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -1163,10 +1166,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -1216,18 +1221,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -1305,137 +1314,140 @@ class mydsp : public dsp { FAUSTFLOAT* output33 = outputs[33]; FAUSTFLOAT* output34 = outputs[34]; FAUSTFLOAT* output35 = outputs[35]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = mydsp_faustpower2_f(fSlow7); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); double fSlow9 = (1.0 - fSlow8); - double fSlow10 = pow(fSlow9, 2.5); - double fSlow11 = (fConst4 * fSlow10); - double fSlow12 = double(fVslider1); - double fSlow13 = cos(fSlow12); - double fSlow14 = mydsp_faustpower2_f(fSlow13); - double fSlow15 = ((4.0 * fSlow14) + -1.0); - double fSlow16 = (fSlow15 + -1.0); - double fSlow17 = (1.0 - (4.0 * ((1.0 - fSlow16) * fSlow14))); - double fSlow18 = sin(fSlow12); - double fSlow19 = (fSlow17 * fSlow18); - double fSlow20 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow21 = ((2.0 * fSlow14) + -1.0); - double fSlow22 = ((2.0 * fSlow21) + -1.0); - double fSlow23 = (1.0 - (2.0 * ((1.0 - fSlow22) * fSlow14))); - double fSlow24 = (((2.0 * fSlow23) - fSlow22) * fSlow13); - double fSlow25 = ((3.0 * fSlow8) + -1.0); - double fSlow26 = ((2.5 * fSlow25) + -2.0); - double fSlow27 = (0.88191710368819687 * fSlow26); - double fSlow28 = (fSlow16 * fSlow13); - double fSlow29 = mydsp_faustpower2_f(fSlow9); - double fSlow30 = ((fSlow28 * fSlow29) * fSlow18); - double fSlow31 = (fConst8 * fSlow30); - double fSlow32 = ((2.333333333333333 * (fSlow26 * fSlow8)) - (1.5 * fSlow25)); - double fSlow33 = ((2.25 * fSlow32) - (1.3333333333333333 * fSlow26)); - double fSlow34 = (0.66332495807108005 * fSlow33); - double fSlow35 = (fSlow23 * fSlow29); - double fSlow36 = (fConst9 * fSlow35); - double fSlow37 = pow(fSlow9, 1.5); - double fSlow38 = (fConst10 * fSlow37); - double fSlow39 = (fSlow15 * fSlow18); - double fSlow40 = (fSlow22 * fSlow13); - double fSlow41 = (fSlow15 * fSlow7); - double fSlow42 = (fConst16 * (fSlow41 * fSlow18)); - double fSlow43 = (fSlow40 * fSlow7); - double fSlow44 = (fConst16 * fSlow43); - double fSlow45 = ((284.35155010806915 * fSlow8) + -31.594616678674353); - double fSlow46 = (fSlow15 * fSlow45); - double fSlow47 = (fConst20 * (fSlow46 * fSlow18)); - double fSlow48 = ((fSlow22 * fSlow45) * fSlow13); - double fSlow49 = (fConst20 * fSlow48); - double fSlow50 = (6.3830764864229232 * (fSlow13 * fSlow18)); - double fSlow51 = (3.1915382432114616 * fSlow21); - double fSlow52 = (fSlow13 * fSlow7); - double fSlow53 = (fConst26 * (fSlow52 * fSlow18)); - double fSlow54 = (fSlow21 * fSlow7); - double fSlow55 = (fConst27 * fSlow54); - double fSlow56 = (fConst29 * ((fSlow28 * fSlow9) * fSlow18)); - double fSlow57 = ((78.986541696685876 * fSlow8) + -11.283791670955125); - double fSlow58 = (fSlow57 * fSlow13); - double fSlow59 = (fConst31 * (fSlow58 * fSlow18)); - double fSlow60 = (fSlow21 * fSlow57); - double fSlow61 = (fConst32 * fSlow60); - double fSlow62 = (fConst33 * (fSlow23 * fSlow9)); - double fSlow63 = ((4.5 * fSlow57) + -67.702750025730751); - double fSlow64 = ((fSlow63 * fSlow13) * fSlow7); - double fSlow65 = (fConst36 * (fSlow64 * fSlow18)); - double fSlow66 = ((fSlow21 * fSlow63) * fSlow7); - double fSlow67 = (fConst37 * fSlow66); - double fSlow68 = (1.1180339887498949 * fSlow25); - double fSlow69 = (0.75 * fSlow32); - double fSlow70 = pow(fSlow9, 0.5); - double fSlow71 = (fConst38 * fSlow70); - double fSlow72 = (fConst42 * (fSlow7 * fSlow18)); - double fSlow73 = (fConst42 * fSlow52); - double fSlow74 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); - double fSlow75 = (fConst44 * (fSlow74 * fSlow18)); - double fSlow76 = (fSlow74 * fSlow13); - double fSlow77 = (fConst44 * fSlow76); - double fSlow78 = ((3.5 * fSlow74) + -13.540550005146152); - double fSlow79 = (fSlow78 * fSlow7); - double fSlow80 = (fConst46 * (fSlow79 * fSlow18)); - double fSlow81 = ((fSlow78 * fSlow13) * fSlow7); - double fSlow82 = (fConst46 * fSlow81); - double fSlow83 = ((3.0 * (fSlow78 * fSlow8)) - (2.5 * fSlow74)); - double fSlow84 = (fConst48 * (fSlow83 * fSlow18)); - double fSlow85 = (fSlow83 * fSlow13); - double fSlow86 = (fConst48 * fSlow85); - double fSlow87 = (fConst49 * (fSlow70 * fSlow18)); - double fSlow88 = (0.13783222385544802 * fSlow7); - double fSlow89 = (fConst49 * (fSlow13 * fSlow70)); - double fSlow90 = (fConst51 * ((fSlow13 * fSlow9) * fSlow18)); - double fSlow91 = (fConst52 * ((fSlow7 * fSlow70) * fSlow18)); - double fSlow92 = (0.088970317927147144 * fSlow25); - double fSlow93 = (fConst52 * (fSlow52 * fSlow70)); - double fSlow94 = (fConst53 * (fSlow21 * fSlow9)); - double fSlow95 = (fConst54 * ((fSlow15 * fSlow37) * fSlow18)); - double fSlow96 = (fConst56 * ((fSlow52 * fSlow9) * fSlow18)); - double fSlow97 = (fConst57 * ((fSlow74 * fSlow70) * fSlow18)); - double fSlow98 = (0.070180733224632072 * (fSlow26 * fSlow7)); - double fSlow99 = (fConst57 * (fSlow76 * fSlow70)); - double fSlow100 = (fConst58 * (fSlow54 * fSlow9)); - double fSlow101 = (fConst54 * (fSlow40 * fSlow37)); - double fSlow102 = (fConst59 * fSlow30); - double fSlow103 = (fConst60 * ((fSlow41 * fSlow37) * fSlow18)); - double fSlow104 = (fConst61 * ((fSlow58 * fSlow9) * fSlow18)); - double fSlow105 = (fConst62 * ((fSlow79 * fSlow70) * fSlow18)); - double fSlow106 = (0.059683103659460751 * fSlow32); - double fSlow107 = (fConst62 * (fSlow81 * fSlow70)); - double fSlow108 = (fConst63 * (fSlow60 * fSlow9)); - double fSlow109 = (fConst60 * (fSlow43 * fSlow37)); - double fSlow110 = (fConst64 * fSlow35); - double fSlow111 = (fConst65 * ((fSlow17 * fSlow10) * fSlow18)); - double fSlow112 = (fConst66 * (((fSlow28 * fSlow7) * fSlow29) * fSlow18)); - double fSlow113 = (fConst67 * ((fSlow46 * fSlow37) * fSlow18)); - double fSlow114 = (fConst68 * ((fSlow64 * fSlow9) * fSlow18)); - double fSlow115 = (fConst69 * ((fSlow83 * fSlow70) * fSlow18)); - double fSlow116 = (0.052785722976618307 * (fSlow33 * fSlow7)); - double fSlow117 = (fConst69 * (fSlow85 * fSlow70)); - double fSlow118 = (fConst70 * (fSlow66 * fSlow9)); - double fSlow119 = (fConst67 * (fSlow48 * fSlow37)); - double fSlow120 = (fConst71 * ((fSlow23 * fSlow7) * fSlow29)); - double fSlow121 = (fConst65 * (fSlow24 * fSlow10)); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = mydsp_faustpower2_f(fSlow10); + double fSlow12 = (1.0 - fSlow11); + double fSlow13 = pow(fSlow12, 2.5); + double fSlow14 = (fConst4 * fSlow13); + double fSlow15 = double(fVslider2); + double fSlow16 = cos(fSlow15); + double fSlow17 = mydsp_faustpower2_f(fSlow16); + double fSlow18 = ((4.0 * fSlow17) + -1.0); + double fSlow19 = (fSlow18 + -1.0); + double fSlow20 = (1.0 - (4.0 * ((1.0 - fSlow19) * fSlow17))); + double fSlow21 = sin(fSlow15); + double fSlow22 = (fSlow20 * fSlow21); + double fSlow23 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow24 = ((2.0 * fSlow17) + -1.0); + double fSlow25 = ((2.0 * fSlow24) + -1.0); + double fSlow26 = (1.0 - (2.0 * ((1.0 - fSlow25) * fSlow17))); + double fSlow27 = (((2.0 * fSlow26) - fSlow25) * fSlow16); + double fSlow28 = ((3.0 * fSlow11) + -1.0); + double fSlow29 = ((2.5 * fSlow28) + -2.0); + double fSlow30 = (0.88191710368819687 * fSlow29); + double fSlow31 = (fSlow19 * fSlow16); + double fSlow32 = mydsp_faustpower2_f(fSlow12); + double fSlow33 = ((fSlow31 * fSlow32) * fSlow21); + double fSlow34 = (fConst8 * fSlow33); + double fSlow35 = ((2.333333333333333 * (fSlow29 * fSlow11)) - (1.5 * fSlow28)); + double fSlow36 = ((2.25 * fSlow35) - (1.3333333333333333 * fSlow29)); + double fSlow37 = (0.66332495807108005 * fSlow36); + double fSlow38 = (fSlow26 * fSlow32); + double fSlow39 = (fConst9 * fSlow38); + double fSlow40 = pow(fSlow12, 1.5); + double fSlow41 = (fConst10 * fSlow40); + double fSlow42 = (fSlow18 * fSlow21); + double fSlow43 = (fSlow25 * fSlow16); + double fSlow44 = (fSlow18 * fSlow10); + double fSlow45 = (fConst16 * (fSlow44 * fSlow21)); + double fSlow46 = (fSlow43 * fSlow10); + double fSlow47 = (fConst16 * fSlow46); + double fSlow48 = ((284.35155010806915 * fSlow11) + -31.594616678674353); + double fSlow49 = (fSlow18 * fSlow48); + double fSlow50 = (fConst20 * (fSlow49 * fSlow21)); + double fSlow51 = ((fSlow25 * fSlow48) * fSlow16); + double fSlow52 = (fConst20 * fSlow51); + double fSlow53 = (6.3830764864229232 * (fSlow16 * fSlow21)); + double fSlow54 = (3.1915382432114616 * fSlow24); + double fSlow55 = (fSlow16 * fSlow10); + double fSlow56 = (fConst26 * (fSlow55 * fSlow21)); + double fSlow57 = (fSlow24 * fSlow10); + double fSlow58 = (fConst27 * fSlow57); + double fSlow59 = (fConst29 * ((fSlow31 * fSlow12) * fSlow21)); + double fSlow60 = ((78.986541696685876 * fSlow11) + -11.283791670955125); + double fSlow61 = (fSlow60 * fSlow16); + double fSlow62 = (fConst31 * (fSlow61 * fSlow21)); + double fSlow63 = (fSlow24 * fSlow60); + double fSlow64 = (fConst32 * fSlow63); + double fSlow65 = (fConst33 * (fSlow26 * fSlow12)); + double fSlow66 = ((4.5 * fSlow60) + -67.702750025730751); + double fSlow67 = ((fSlow66 * fSlow16) * fSlow10); + double fSlow68 = (fConst36 * (fSlow67 * fSlow21)); + double fSlow69 = ((fSlow24 * fSlow66) * fSlow10); + double fSlow70 = (fConst37 * fSlow69); + double fSlow71 = (1.1180339887498949 * fSlow28); + double fSlow72 = (0.75 * fSlow35); + double fSlow73 = pow(fSlow12, 0.5); + double fSlow74 = (fConst38 * fSlow73); + double fSlow75 = (fConst42 * (fSlow10 * fSlow21)); + double fSlow76 = (fConst42 * fSlow55); + double fSlow77 = ((16.925687506432688 * fSlow11) + -3.3851375012865379); + double fSlow78 = (fConst44 * (fSlow77 * fSlow21)); + double fSlow79 = (fSlow77 * fSlow16); + double fSlow80 = (fConst44 * fSlow79); + double fSlow81 = ((3.5 * fSlow77) + -13.540550005146152); + double fSlow82 = (fSlow81 * fSlow10); + double fSlow83 = (fConst46 * (fSlow82 * fSlow21)); + double fSlow84 = ((fSlow81 * fSlow16) * fSlow10); + double fSlow85 = (fConst46 * fSlow84); + double fSlow86 = ((3.0 * (fSlow81 * fSlow11)) - (2.5 * fSlow77)); + double fSlow87 = (fConst48 * (fSlow86 * fSlow21)); + double fSlow88 = (fSlow86 * fSlow16); + double fSlow89 = (fConst48 * fSlow88); + double fSlow90 = (fConst49 * (fSlow73 * fSlow21)); + double fSlow91 = (0.13783222385544802 * fSlow10); + double fSlow92 = (fConst49 * (fSlow16 * fSlow73)); + double fSlow93 = (fConst51 * ((fSlow16 * fSlow12) * fSlow21)); + double fSlow94 = (fConst52 * ((fSlow10 * fSlow73) * fSlow21)); + double fSlow95 = (0.088970317927147144 * fSlow28); + double fSlow96 = (fConst52 * (fSlow55 * fSlow73)); + double fSlow97 = (fConst53 * (fSlow24 * fSlow12)); + double fSlow98 = (fConst54 * ((fSlow18 * fSlow40) * fSlow21)); + double fSlow99 = (fConst56 * ((fSlow55 * fSlow12) * fSlow21)); + double fSlow100 = (fConst57 * ((fSlow77 * fSlow73) * fSlow21)); + double fSlow101 = (0.070180733224632072 * (fSlow29 * fSlow10)); + double fSlow102 = (fConst57 * (fSlow79 * fSlow73)); + double fSlow103 = (fConst58 * (fSlow57 * fSlow12)); + double fSlow104 = (fConst54 * (fSlow43 * fSlow40)); + double fSlow105 = (fConst59 * fSlow33); + double fSlow106 = (fConst60 * ((fSlow44 * fSlow40) * fSlow21)); + double fSlow107 = (fConst61 * ((fSlow61 * fSlow12) * fSlow21)); + double fSlow108 = (fConst62 * ((fSlow82 * fSlow73) * fSlow21)); + double fSlow109 = (0.059683103659460751 * fSlow35); + double fSlow110 = (fConst62 * (fSlow84 * fSlow73)); + double fSlow111 = (fConst63 * (fSlow63 * fSlow12)); + double fSlow112 = (fConst60 * (fSlow46 * fSlow40)); + double fSlow113 = (fConst64 * fSlow38); + double fSlow114 = (fConst65 * ((fSlow20 * fSlow13) * fSlow21)); + double fSlow115 = (fConst66 * (((fSlow31 * fSlow10) * fSlow32) * fSlow21)); + double fSlow116 = (fConst67 * ((fSlow49 * fSlow40) * fSlow21)); + double fSlow117 = (fConst68 * ((fSlow67 * fSlow12) * fSlow21)); + double fSlow118 = (fConst69 * ((fSlow86 * fSlow73) * fSlow21)); + double fSlow119 = (0.052785722976618307 * (fSlow36 * fSlow10)); + double fSlow120 = (fConst69 * (fSlow88 * fSlow73)); + double fSlow121 = (fConst70 * (fSlow69 * fSlow12)); + double fSlow122 = (fConst67 * (fSlow51 * fSlow40)); + double fSlow123 = (fConst71 * ((fSlow26 * fSlow10) * fSlow32)); + double fSlow124 = (fConst65 * (fSlow27 * fSlow13)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow20 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow23 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input25[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input35[i]); double fTemp5 = double(input2[i]); @@ -1471,43 +1483,43 @@ class mydsp : public dsp { double fTemp35 = double(input21[i]); double fTemp36 = double(input29[i]); double fTemp37 = double(input31[i]); - double fTemp38 = ((fSlow11 * ((fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow24 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + ((fSlow7 * (((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5)))) + (fSlow27 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow31 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow36 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9)))))) + ((fSlow38 * (((((fConst13 * ((fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10)))) + (fSlow40 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11)))))) + (fSlow42 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow44 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow47 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow49 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))))) + ((fSlow9 * (((((((fConst21 * (((fConst23 * ((fSlow50 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17)))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow55 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19)))))) + (fSlow56 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow61 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow65 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow67 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25)))))) + ((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow69 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27))))) + (fSlow71 * (((((((((fConst40 * ((fSlow18 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28)))) + (fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29)))))) + (fSlow72 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))) + (fSlow73 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow77 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow82 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow84 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow86 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))))))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp38))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow87 * fTemp38))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow88 * fTemp38))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow89 * fTemp38))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow90 * fTemp38))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow91 * fTemp38))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow92 * fTemp38))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow93 * fTemp38))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow94 * fTemp38))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow95 * fTemp38))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow96 * fTemp38))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow97 * fTemp38))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow98 * fTemp38))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow99 * fTemp38))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow100 * fTemp38))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow101 * fTemp38))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow102 * fTemp38))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow103 * fTemp38))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow104 * fTemp38))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow105 * fTemp38))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow106 * fTemp38))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow107 * fTemp38))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow108 * fTemp38))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow109 * fTemp38))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow110 * fTemp38))); - output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow111 * fTemp38))); - output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow112 * fTemp38))); - output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow113 * fTemp38))); - output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow114 * fTemp38))); - output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow115 * fTemp38))); - output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow116 * fTemp38))); - output31[i] = FAUSTFLOAT(((fSlow117 * fTemp38) + (iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))))); - output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow118 * fTemp38))); - output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow119 * fTemp38))); - output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow120 * fTemp38))); - output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow121 * fTemp38))); + double fTemp38 = ((fSlow14 * ((fSlow22 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow27 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + ((fSlow10 * (((((1.7320508075688772 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5))))) + (fSlow30 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6)))))) + (fSlow34 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow37 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8)))))) + (fSlow39 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9))))))) + ((fSlow41 * (((((fConst13 * ((fSlow42 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10))))) + (fSlow43 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp11)):(iSlow2?(fSlow4 * (fTemp3 * fTemp11)):(fSlow4 * (fTemp1 * fTemp11))))))) + (fSlow45 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp12)):(iSlow2?(fSlow4 * (fTemp3 * fTemp12)):(fSlow4 * (fTemp1 * fTemp12)))))) + (fSlow47 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp13)):(iSlow2?(fSlow4 * (fTemp3 * fTemp13)):(fSlow4 * (fTemp1 * fTemp13)))))) + (fSlow50 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp14)):(iSlow2?(fSlow4 * (fTemp3 * fTemp14)):(fSlow4 * (fTemp1 * fTemp14)))))) + (fSlow52 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp15)):(iSlow2?(fSlow4 * (fTemp3 * fTemp15)):(fSlow4 * (fTemp1 * fTemp15))))))) + ((fSlow12 * (((((((fConst21 * (((fConst23 * ((fSlow53 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp16)):(iSlow2?(fSlow4 * (fTemp3 * fTemp16)):(fSlow4 * (fTemp1 * fTemp16))))) + (fSlow54 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp17)):(iSlow2?(fSlow4 * (fTemp3 * fTemp17)):(fSlow4 * (fTemp1 * fTemp17))))))) + (fSlow56 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp18)):(iSlow2?(fSlow4 * (fTemp3 * fTemp18)):(fSlow4 * (fTemp1 * fTemp18)))))) + (fSlow58 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp19)):(iSlow2?(fSlow4 * (fTemp3 * fTemp19)):(fSlow4 * (fTemp1 * fTemp19))))))) + (fSlow59 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp20)):(iSlow2?(fSlow4 * (fTemp3 * fTemp20)):(fSlow4 * (fTemp1 * fTemp20)))))) + (fSlow62 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp21)):(iSlow2?(fSlow4 * (fTemp3 * fTemp21)):(fSlow4 * (fTemp1 * fTemp21)))))) + (fSlow64 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp22)):(iSlow2?(fSlow4 * (fTemp3 * fTemp22)):(fSlow4 * (fTemp1 * fTemp22)))))) + (fSlow65 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp23)):(iSlow2?(fSlow4 * (fTemp3 * fTemp23)):(fSlow4 * (fTemp1 * fTemp23)))))) + (fSlow68 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp24)):(iSlow2?(fSlow4 * (fTemp3 * fTemp24)):(fSlow4 * (fTemp1 * fTemp24)))))) + (fSlow70 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp25)):(iSlow2?(fSlow4 * (fTemp3 * fTemp25)):(fSlow4 * (fTemp1 * fTemp25))))))) + ((((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow71 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp26)):(iSlow2?(fSlow4 * (fTemp3 * fTemp26)):(fSlow4 * (fTemp1 * fTemp26)))))) + (fSlow72 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp27)):(iSlow2?(fSlow4 * (fTemp3 * fTemp27)):(fSlow4 * (fTemp1 * fTemp27)))))) + (fSlow74 * (((((((((fConst40 * ((fSlow21 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp28)):(iSlow2?(fSlow4 * (fTemp3 * fTemp28)):(fSlow4 * (fTemp1 * fTemp28))))) + (fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp29)):(iSlow2?(fSlow4 * (fTemp3 * fTemp29)):(fSlow4 * (fTemp1 * fTemp29))))))) + (fSlow75 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp30)):(iSlow2?(fSlow4 * (fTemp3 * fTemp30)):(fSlow4 * (fTemp1 * fTemp30)))))) + (fSlow76 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp31)):(iSlow2?(fSlow4 * (fTemp3 * fTemp31)):(fSlow4 * (fTemp1 * fTemp31)))))) + (fSlow78 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp32)):(iSlow2?(fSlow4 * (fTemp3 * fTemp32)):(fSlow4 * (fTemp1 * fTemp32)))))) + (fSlow80 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp33)):(iSlow2?(fSlow4 * (fTemp3 * fTemp33)):(fSlow4 * (fTemp1 * fTemp33)))))) + (fSlow83 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp34)):(iSlow2?(fSlow4 * (fTemp3 * fTemp34)):(fSlow4 * (fTemp1 * fTemp34)))))) + (fSlow85 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp35)):(iSlow2?(fSlow4 * (fTemp3 * fTemp35)):(fSlow4 * (fTemp1 * fTemp35)))))) + (fSlow87 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp36)):(iSlow2?(fSlow4 * (fTemp3 * fTemp36)):(fSlow4 * (fTemp1 * fTemp36)))))) + (fSlow89 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp37)):(iSlow2?(fSlow4 * (fTemp3 * fTemp37)):(fSlow4 * (fTemp1 * fTemp37)))))))))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp38))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp28):(iSlow2?(fSlow4 * (fRec1[0] * fTemp28)):(fSlow4 * (fRec0[0] * fTemp28)))) + (fSlow90 * fTemp38))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow91 * fTemp38))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp29):(iSlow2?(fSlow4 * (fRec1[0] * fTemp29)):(fSlow4 * (fRec0[0] * fTemp29)))) + (fSlow92 * fTemp38))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp16):(iSlow2?(fSlow4 * (fRec1[0] * fTemp16)):(fSlow4 * (fRec0[0] * fTemp16)))) + (fSlow93 * fTemp38))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp30):(iSlow2?(fSlow4 * (fRec1[0] * fTemp30)):(fSlow4 * (fRec0[0] * fTemp30)))) + (fSlow94 * fTemp38))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp26):(iSlow2?(fSlow4 * (fRec1[0] * fTemp26)):(fSlow4 * (fRec0[0] * fTemp26)))) + (fSlow95 * fTemp38))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp31):(iSlow2?(fSlow4 * (fRec1[0] * fTemp31)):(fSlow4 * (fRec0[0] * fTemp31)))) + (fSlow96 * fTemp38))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp17):(iSlow2?(fSlow4 * (fRec1[0] * fTemp17)):(fSlow4 * (fRec0[0] * fTemp17)))) + (fSlow97 * fTemp38))); + output9[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow98 * fTemp38))); + output10[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp18):(iSlow2?(fSlow4 * (fRec1[0] * fTemp18)):(fSlow4 * (fRec0[0] * fTemp18)))) + (fSlow99 * fTemp38))); + output11[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp32):(iSlow2?(fSlow4 * (fRec1[0] * fTemp32)):(fSlow4 * (fRec0[0] * fTemp32)))) + (fSlow100 * fTemp38))); + output12[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow101 * fTemp38))); + output13[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp33):(iSlow2?(fSlow4 * (fRec1[0] * fTemp33)):(fSlow4 * (fRec0[0] * fTemp33)))) + (fSlow102 * fTemp38))); + output14[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp19):(iSlow2?(fSlow4 * (fRec1[0] * fTemp19)):(fSlow4 * (fRec0[0] * fTemp19)))) + (fSlow103 * fTemp38))); + output15[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp11):(iSlow2?(fSlow4 * (fRec1[0] * fTemp11)):(fSlow4 * (fRec0[0] * fTemp11)))) + (fSlow104 * fTemp38))); + output16[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp20):(iSlow2?(fSlow4 * (fRec1[0] * fTemp20)):(fSlow4 * (fRec0[0] * fTemp20)))) + (fSlow105 * fTemp38))); + output17[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp12):(iSlow2?(fSlow4 * (fRec1[0] * fTemp12)):(fSlow4 * (fRec0[0] * fTemp12)))) + (fSlow106 * fTemp38))); + output18[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp21):(iSlow2?(fSlow4 * (fRec1[0] * fTemp21)):(fSlow4 * (fRec0[0] * fTemp21)))) + (fSlow107 * fTemp38))); + output19[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp34):(iSlow2?(fSlow4 * (fRec1[0] * fTemp34)):(fSlow4 * (fRec0[0] * fTemp34)))) + (fSlow108 * fTemp38))); + output20[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp27):(iSlow2?(fSlow4 * (fRec1[0] * fTemp27)):(fSlow4 * (fRec0[0] * fTemp27)))) + (fSlow109 * fTemp38))); + output21[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp35):(iSlow2?(fSlow4 * (fRec1[0] * fTemp35)):(fSlow4 * (fRec0[0] * fTemp35)))) + (fSlow110 * fTemp38))); + output22[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp22):(iSlow2?(fSlow4 * (fRec1[0] * fTemp22)):(fSlow4 * (fRec0[0] * fTemp22)))) + (fSlow111 * fTemp38))); + output23[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp13):(iSlow2?(fSlow4 * (fRec1[0] * fTemp13)):(fSlow4 * (fRec0[0] * fTemp13)))) + (fSlow112 * fTemp38))); + output24[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp23):(iSlow2?(fSlow4 * (fRec1[0] * fTemp23)):(fSlow4 * (fRec0[0] * fTemp23)))) + (fSlow113 * fTemp38))); + output25[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow114 * fTemp38))); + output26[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow115 * fTemp38))); + output27[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp14):(iSlow2?(fSlow4 * (fRec1[0] * fTemp14)):(fSlow4 * (fRec0[0] * fTemp14)))) + (fSlow116 * fTemp38))); + output28[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp24):(iSlow2?(fSlow4 * (fRec1[0] * fTemp24)):(fSlow4 * (fRec0[0] * fTemp24)))) + (fSlow117 * fTemp38))); + output29[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp36):(iSlow2?(fSlow4 * (fRec1[0] * fTemp36)):(fSlow4 * (fRec0[0] * fTemp36)))) + (fSlow118 * fTemp38))); + output30[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow119 * fTemp38))); + output31[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp37):(iSlow2?(fSlow4 * (fRec1[0] * fTemp37)):(fSlow4 * (fRec0[0] * fTemp37)))) + (fSlow120 * fTemp38))); + output32[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp25):(iSlow2?(fSlow4 * (fRec1[0] * fTemp25)):(fSlow4 * (fRec0[0] * fTemp25)))) + (fSlow121 * fTemp38))); + output33[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp15):(iSlow2?(fSlow4 * (fRec1[0] * fTemp15)):(fSlow4 * (fRec0[0] * fTemp15)))) + (fSlow122 * fTemp38))); + output34[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow123 * fTemp38))); + output35[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow124 * fTemp38))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2HOA6.cpp b/source/HOAUGens/HOABeamDirac2HOA6.cpp index 0e5aa7e562..71a7b4641e 100644 --- a/source/HOAUGens/HOABeamDirac2HOA6.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA6.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA6" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -641,6 +641,7 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; @@ -648,12 +649,13 @@ class mydsp : public dsp { double fRec0[2]; double fRec1[2]; FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; double fConst2; double fConst3; double fConst4; double fConst5; - FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -756,6 +758,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA6"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -1321,10 +1324,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -1374,18 +1379,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -1489,183 +1498,186 @@ class mydsp : public dsp { FAUSTFLOAT* output46 = outputs[46]; FAUSTFLOAT* output47 = outputs[47]; FAUSTFLOAT* output48 = outputs[48]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = mydsp_faustpower2_f(fSlow7); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); double fSlow9 = (1.0 - fSlow8); - double fSlow10 = double(fVslider1); - double fSlow11 = cos(fSlow10); - double fSlow12 = sin(fSlow10); - double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); - double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow15 = mydsp_faustpower2_f(fSlow11); - double fSlow16 = ((2.0 * fSlow15) + -1.0); - double fSlow17 = (3.1915382432114616 * fSlow16); - double fSlow18 = (fSlow11 * fSlow7); - double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); - double fSlow20 = (fSlow16 * fSlow7); - double fSlow21 = (fConst10 * fSlow20); - double fSlow22 = ((4.0 * fSlow15) + -1.0); - double fSlow23 = (fSlow22 + -1.0); - double fSlow24 = (fSlow23 * fSlow11); - double fSlow25 = (fConst14 * ((fSlow24 * fSlow9) * fSlow12)); - double fSlow26 = ((78.986541696685876 * fSlow8) + -11.283791670955125); - double fSlow27 = (fSlow26 * fSlow11); - double fSlow28 = (fConst18 * (fSlow27 * fSlow12)); - double fSlow29 = (fSlow16 * fSlow26); - double fSlow30 = (fConst19 * fSlow29); - double fSlow31 = ((2.0 * fSlow16) + -1.0); - double fSlow32 = (1.0 - fSlow31); - double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow15))); - double fSlow34 = (fConst20 * (fSlow33 * fSlow9)); - double fSlow35 = ((4.5 * fSlow26) + -67.702750025730751); - double fSlow36 = ((fSlow35 * fSlow11) * fSlow7); - double fSlow37 = (fConst24 * (fSlow36 * fSlow12)); - double fSlow38 = ((fSlow16 * fSlow35) * fSlow7); - double fSlow39 = (fConst25 * fSlow38); - double fSlow40 = (1.0 - (4.0 * ((1.0 - fSlow23) * fSlow15))); - double fSlow41 = (0.0 - (2.0 * ((fSlow23 - fSlow40) * fSlow11))); - double fSlow42 = mydsp_faustpower2_f(fSlow9); - double fSlow43 = (fConst27 * ((fSlow41 * fSlow42) * fSlow12)); - double fSlow44 = ((893.67630033964599 * fSlow8) + -81.24330003087691); - double fSlow45 = ((fSlow23 * fSlow44) * fSlow11); - double fSlow46 = (fConst30 * ((fSlow45 * fSlow9) * fSlow12)); - double fSlow47 = ((3.6666666666666665 * (fSlow35 * fSlow8)) - (3.5 * fSlow26)); - double fSlow48 = (fSlow47 * fSlow11); - double fSlow49 = (fConst32 * (fSlow48 * fSlow12)); - double fSlow50 = (fSlow16 * fSlow47); - double fSlow51 = (fConst33 * fSlow50); - double fSlow52 = (fSlow33 * fSlow44); - double fSlow53 = (fConst34 * (fSlow52 * fSlow9)); - double fSlow54 = ((2.0 * fSlow33) - fSlow31); - double fSlow55 = ((2.0 * ((fSlow32 + fSlow54) * fSlow15)) + -1.0); - double fSlow56 = (fConst27 * (fSlow55 * fSlow42)); - double fSlow57 = pow(fSlow9, 2.5); - double fSlow58 = (fConst35 * fSlow57); - double fSlow59 = (fSlow40 * fSlow12); - double fSlow60 = (fSlow54 * fSlow11); - double fSlow61 = (fSlow40 * fSlow7); - double fSlow62 = (fConst39 * (fSlow61 * fSlow12)); - double fSlow63 = (fSlow60 * fSlow7); - double fSlow64 = (fConst39 * fSlow63); - double fSlow65 = pow(fSlow9, 1.5); - double fSlow66 = (fConst40 * fSlow65); - double fSlow67 = (fSlow22 * fSlow12); - double fSlow68 = (fSlow31 * fSlow11); - double fSlow69 = (fSlow22 * fSlow7); - double fSlow70 = (fConst44 * (fSlow69 * fSlow12)); - double fSlow71 = (fSlow68 * fSlow7); - double fSlow72 = (fConst44 * fSlow71); - double fSlow73 = ((284.35155010806915 * fSlow8) + -31.594616678674353); - double fSlow74 = (fSlow22 * fSlow73); - double fSlow75 = (fConst46 * (fSlow74 * fSlow12)); - double fSlow76 = ((fSlow31 * fSlow73) * fSlow11); - double fSlow77 = (fConst46 * fSlow76); - double fSlow78 = ((5.5 * fSlow73) + -252.75693342939482); - double fSlow79 = ((fSlow22 * fSlow78) * fSlow7); - double fSlow80 = (fConst49 * (fSlow79 * fSlow12)); - double fSlow81 = (((fSlow31 * fSlow78) * fSlow11) * fSlow7); - double fSlow82 = (fConst49 * fSlow81); - double fSlow83 = pow(fSlow9, 0.5); - double fSlow84 = (fConst50 * fSlow83); - double fSlow85 = (fConst54 * (fSlow7 * fSlow12)); - double fSlow86 = (fConst54 * fSlow18); - double fSlow87 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); - double fSlow88 = (fConst56 * (fSlow87 * fSlow12)); - double fSlow89 = (fSlow87 * fSlow11); - double fSlow90 = (fConst56 * fSlow89); - double fSlow91 = ((3.5 * fSlow87) + -13.540550005146152); - double fSlow92 = (fSlow91 * fSlow7); - double fSlow93 = (fConst58 * (fSlow92 * fSlow12)); - double fSlow94 = ((fSlow91 * fSlow11) * fSlow7); - double fSlow95 = (fConst58 * fSlow94); - double fSlow96 = ((3.0 * (fSlow91 * fSlow8)) - (2.5 * fSlow87)); - double fSlow97 = (fConst60 * (fSlow96 * fSlow12)); - double fSlow98 = (fSlow96 * fSlow11); - double fSlow99 = (fConst60 * fSlow98); - double fSlow100 = ((2.75 * fSlow96) - (2.0 * fSlow91)); - double fSlow101 = (fSlow100 * fSlow7); - double fSlow102 = (fConst62 * (fSlow101 * fSlow12)); - double fSlow103 = ((fSlow100 * fSlow11) * fSlow7); - double fSlow104 = (fConst62 * fSlow103); - double fSlow105 = ((3.0 * fSlow8) + -1.0); - double fSlow106 = (1.1180339887498949 * fSlow105); - double fSlow107 = ((2.5 * fSlow105) + -2.0); - double fSlow108 = ((2.333333333333333 * (fSlow107 * fSlow8)) - (1.5 * fSlow105)); - double fSlow109 = (0.75 * fSlow108); - double fSlow110 = (0.88191710368819687 * fSlow107); - double fSlow111 = ((fSlow24 * fSlow42) * fSlow12); - double fSlow112 = (fConst64 * fSlow111); - double fSlow113 = ((2.25 * fSlow108) - (1.3333333333333333 * fSlow107)); - double fSlow114 = (0.66332495807108005 * fSlow113); - double fSlow115 = (fSlow33 * fSlow42); - double fSlow116 = (fConst65 * fSlow115); - double fSlow117 = ((2.2000000000000002 * (fSlow113 * fSlow8)) - (1.25 * fSlow108)); - double fSlow118 = (0.60092521257733145 * fSlow117); - double fSlow119 = (fConst66 * (fSlow83 * fSlow12)); - double fSlow120 = (0.13783222385544802 * fSlow7); - double fSlow121 = (fConst66 * (fSlow11 * fSlow83)); - double fSlow122 = (fConst68 * ((fSlow11 * fSlow9) * fSlow12)); - double fSlow123 = (fConst69 * ((fSlow7 * fSlow83) * fSlow12)); - double fSlow124 = (0.088970317927147144 * fSlow105); - double fSlow125 = (fConst69 * (fSlow18 * fSlow83)); - double fSlow126 = (fConst70 * (fSlow16 * fSlow9)); - double fSlow127 = (fConst71 * ((fSlow22 * fSlow65) * fSlow12)); - double fSlow128 = (fConst73 * ((fSlow18 * fSlow9) * fSlow12)); - double fSlow129 = (fConst74 * ((fSlow87 * fSlow83) * fSlow12)); - double fSlow130 = (0.070180733224632072 * (fSlow107 * fSlow7)); - double fSlow131 = (fConst74 * (fSlow89 * fSlow83)); - double fSlow132 = (fConst75 * (fSlow20 * fSlow9)); - double fSlow133 = (fConst71 * (fSlow68 * fSlow65)); - double fSlow134 = (fConst76 * fSlow111); - double fSlow135 = (fConst77 * ((fSlow69 * fSlow65) * fSlow12)); - double fSlow136 = (fConst78 * ((fSlow27 * fSlow9) * fSlow12)); - double fSlow137 = (fConst79 * ((fSlow92 * fSlow83) * fSlow12)); - double fSlow138 = (0.059683103659460751 * fSlow108); - double fSlow139 = (fConst79 * (fSlow94 * fSlow83)); - double fSlow140 = (fConst80 * (fSlow29 * fSlow9)); - double fSlow141 = (fConst77 * (fSlow71 * fSlow65)); - double fSlow142 = (fConst81 * fSlow115); - double fSlow143 = (fConst82 * ((fSlow40 * fSlow57) * fSlow12)); - double fSlow144 = (fConst83 * (((fSlow24 * fSlow7) * fSlow42) * fSlow12)); - double fSlow145 = (fConst84 * ((fSlow74 * fSlow65) * fSlow12)); - double fSlow146 = (fConst85 * ((fSlow36 * fSlow9) * fSlow12)); - double fSlow147 = (fConst86 * ((fSlow96 * fSlow83) * fSlow12)); - double fSlow148 = (0.052785722976618307 * (fSlow113 * fSlow7)); - double fSlow149 = (fConst86 * (fSlow98 * fSlow83)); - double fSlow150 = (fConst87 * (fSlow38 * fSlow9)); - double fSlow151 = (fConst84 * (fSlow76 * fSlow65)); - double fSlow152 = (fConst88 * ((fSlow33 * fSlow7) * fSlow42)); - double fSlow153 = (fConst82 * (fSlow60 * fSlow57)); - double fSlow154 = mydsp_faustpower3_f(fSlow9); - double fSlow155 = (fConst89 * ((fSlow41 * fSlow154) * fSlow12)); - double fSlow156 = (fConst90 * ((fSlow61 * fSlow57) * fSlow12)); - double fSlow157 = (fConst91 * ((fSlow45 * fSlow42) * fSlow12)); - double fSlow158 = (fConst92 * ((fSlow79 * fSlow65) * fSlow12)); - double fSlow159 = (fConst93 * ((fSlow48 * fSlow9) * fSlow12)); - double fSlow160 = (fConst94 * ((fSlow101 * fSlow83) * fSlow12)); - double fSlow161 = (0.047820109005115151 * fSlow117); - double fSlow162 = (fConst94 * (fSlow103 * fSlow83)); - double fSlow163 = (fConst95 * (fSlow50 * fSlow9)); - double fSlow164 = (fConst92 * (fSlow81 * fSlow65)); - double fSlow165 = (fConst96 * (fSlow52 * fSlow42)); - double fSlow166 = (fConst90 * (fSlow63 * fSlow57)); - double fSlow167 = (fConst89 * (fSlow55 * fSlow154)); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = mydsp_faustpower2_f(fSlow10); + double fSlow12 = (1.0 - fSlow11); + double fSlow13 = double(fVslider2); + double fSlow14 = cos(fSlow13); + double fSlow15 = sin(fSlow13); + double fSlow16 = (6.3830764864229232 * (fSlow14 * fSlow15)); + double fSlow17 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow18 = mydsp_faustpower2_f(fSlow14); + double fSlow19 = ((2.0 * fSlow18) + -1.0); + double fSlow20 = (3.1915382432114616 * fSlow19); + double fSlow21 = (fSlow14 * fSlow10); + double fSlow22 = (fConst9 * (fSlow21 * fSlow15)); + double fSlow23 = (fSlow19 * fSlow10); + double fSlow24 = (fConst10 * fSlow23); + double fSlow25 = ((4.0 * fSlow18) + -1.0); + double fSlow26 = (fSlow25 + -1.0); + double fSlow27 = (fSlow26 * fSlow14); + double fSlow28 = (fConst14 * ((fSlow27 * fSlow12) * fSlow15)); + double fSlow29 = ((78.986541696685876 * fSlow11) + -11.283791670955125); + double fSlow30 = (fSlow29 * fSlow14); + double fSlow31 = (fConst18 * (fSlow30 * fSlow15)); + double fSlow32 = (fSlow19 * fSlow29); + double fSlow33 = (fConst19 * fSlow32); + double fSlow34 = ((2.0 * fSlow19) + -1.0); + double fSlow35 = (1.0 - fSlow34); + double fSlow36 = (1.0 - (2.0 * (fSlow35 * fSlow18))); + double fSlow37 = (fConst20 * (fSlow36 * fSlow12)); + double fSlow38 = ((4.5 * fSlow29) + -67.702750025730751); + double fSlow39 = ((fSlow38 * fSlow14) * fSlow10); + double fSlow40 = (fConst24 * (fSlow39 * fSlow15)); + double fSlow41 = ((fSlow19 * fSlow38) * fSlow10); + double fSlow42 = (fConst25 * fSlow41); + double fSlow43 = (1.0 - (4.0 * ((1.0 - fSlow26) * fSlow18))); + double fSlow44 = (0.0 - (2.0 * ((fSlow26 - fSlow43) * fSlow14))); + double fSlow45 = mydsp_faustpower2_f(fSlow12); + double fSlow46 = (fConst27 * ((fSlow44 * fSlow45) * fSlow15)); + double fSlow47 = ((893.67630033964599 * fSlow11) + -81.24330003087691); + double fSlow48 = ((fSlow26 * fSlow47) * fSlow14); + double fSlow49 = (fConst30 * ((fSlow48 * fSlow12) * fSlow15)); + double fSlow50 = ((3.6666666666666665 * (fSlow38 * fSlow11)) - (3.5 * fSlow29)); + double fSlow51 = (fSlow50 * fSlow14); + double fSlow52 = (fConst32 * (fSlow51 * fSlow15)); + double fSlow53 = (fSlow19 * fSlow50); + double fSlow54 = (fConst33 * fSlow53); + double fSlow55 = (fSlow36 * fSlow47); + double fSlow56 = (fConst34 * (fSlow55 * fSlow12)); + double fSlow57 = ((2.0 * fSlow36) - fSlow34); + double fSlow58 = ((2.0 * ((fSlow35 + fSlow57) * fSlow18)) + -1.0); + double fSlow59 = (fConst27 * (fSlow58 * fSlow45)); + double fSlow60 = pow(fSlow12, 2.5); + double fSlow61 = (fConst35 * fSlow60); + double fSlow62 = (fSlow43 * fSlow15); + double fSlow63 = (fSlow57 * fSlow14); + double fSlow64 = (fSlow43 * fSlow10); + double fSlow65 = (fConst39 * (fSlow64 * fSlow15)); + double fSlow66 = (fSlow63 * fSlow10); + double fSlow67 = (fConst39 * fSlow66); + double fSlow68 = pow(fSlow12, 1.5); + double fSlow69 = (fConst40 * fSlow68); + double fSlow70 = (fSlow25 * fSlow15); + double fSlow71 = (fSlow34 * fSlow14); + double fSlow72 = (fSlow25 * fSlow10); + double fSlow73 = (fConst44 * (fSlow72 * fSlow15)); + double fSlow74 = (fSlow71 * fSlow10); + double fSlow75 = (fConst44 * fSlow74); + double fSlow76 = ((284.35155010806915 * fSlow11) + -31.594616678674353); + double fSlow77 = (fSlow25 * fSlow76); + double fSlow78 = (fConst46 * (fSlow77 * fSlow15)); + double fSlow79 = ((fSlow34 * fSlow76) * fSlow14); + double fSlow80 = (fConst46 * fSlow79); + double fSlow81 = ((5.5 * fSlow76) + -252.75693342939482); + double fSlow82 = ((fSlow25 * fSlow81) * fSlow10); + double fSlow83 = (fConst49 * (fSlow82 * fSlow15)); + double fSlow84 = (((fSlow34 * fSlow81) * fSlow14) * fSlow10); + double fSlow85 = (fConst49 * fSlow84); + double fSlow86 = pow(fSlow12, 0.5); + double fSlow87 = (fConst50 * fSlow86); + double fSlow88 = (fConst54 * (fSlow10 * fSlow15)); + double fSlow89 = (fConst54 * fSlow21); + double fSlow90 = ((16.925687506432688 * fSlow11) + -3.3851375012865379); + double fSlow91 = (fConst56 * (fSlow90 * fSlow15)); + double fSlow92 = (fSlow90 * fSlow14); + double fSlow93 = (fConst56 * fSlow92); + double fSlow94 = ((3.5 * fSlow90) + -13.540550005146152); + double fSlow95 = (fSlow94 * fSlow10); + double fSlow96 = (fConst58 * (fSlow95 * fSlow15)); + double fSlow97 = ((fSlow94 * fSlow14) * fSlow10); + double fSlow98 = (fConst58 * fSlow97); + double fSlow99 = ((3.0 * (fSlow94 * fSlow11)) - (2.5 * fSlow90)); + double fSlow100 = (fConst60 * (fSlow99 * fSlow15)); + double fSlow101 = (fSlow99 * fSlow14); + double fSlow102 = (fConst60 * fSlow101); + double fSlow103 = ((2.75 * fSlow99) - (2.0 * fSlow94)); + double fSlow104 = (fSlow103 * fSlow10); + double fSlow105 = (fConst62 * (fSlow104 * fSlow15)); + double fSlow106 = ((fSlow103 * fSlow14) * fSlow10); + double fSlow107 = (fConst62 * fSlow106); + double fSlow108 = ((3.0 * fSlow11) + -1.0); + double fSlow109 = (1.1180339887498949 * fSlow108); + double fSlow110 = ((2.5 * fSlow108) + -2.0); + double fSlow111 = ((2.333333333333333 * (fSlow110 * fSlow11)) - (1.5 * fSlow108)); + double fSlow112 = (0.75 * fSlow111); + double fSlow113 = (0.88191710368819687 * fSlow110); + double fSlow114 = ((fSlow27 * fSlow45) * fSlow15); + double fSlow115 = (fConst64 * fSlow114); + double fSlow116 = ((2.25 * fSlow111) - (1.3333333333333333 * fSlow110)); + double fSlow117 = (0.66332495807108005 * fSlow116); + double fSlow118 = (fSlow36 * fSlow45); + double fSlow119 = (fConst65 * fSlow118); + double fSlow120 = ((2.2000000000000002 * (fSlow116 * fSlow11)) - (1.25 * fSlow111)); + double fSlow121 = (0.60092521257733145 * fSlow120); + double fSlow122 = (fConst66 * (fSlow86 * fSlow15)); + double fSlow123 = (0.13783222385544802 * fSlow10); + double fSlow124 = (fConst66 * (fSlow14 * fSlow86)); + double fSlow125 = (fConst68 * ((fSlow14 * fSlow12) * fSlow15)); + double fSlow126 = (fConst69 * ((fSlow10 * fSlow86) * fSlow15)); + double fSlow127 = (0.088970317927147144 * fSlow108); + double fSlow128 = (fConst69 * (fSlow21 * fSlow86)); + double fSlow129 = (fConst70 * (fSlow19 * fSlow12)); + double fSlow130 = (fConst71 * ((fSlow25 * fSlow68) * fSlow15)); + double fSlow131 = (fConst73 * ((fSlow21 * fSlow12) * fSlow15)); + double fSlow132 = (fConst74 * ((fSlow90 * fSlow86) * fSlow15)); + double fSlow133 = (0.070180733224632072 * (fSlow110 * fSlow10)); + double fSlow134 = (fConst74 * (fSlow92 * fSlow86)); + double fSlow135 = (fConst75 * (fSlow23 * fSlow12)); + double fSlow136 = (fConst71 * (fSlow71 * fSlow68)); + double fSlow137 = (fConst76 * fSlow114); + double fSlow138 = (fConst77 * ((fSlow72 * fSlow68) * fSlow15)); + double fSlow139 = (fConst78 * ((fSlow30 * fSlow12) * fSlow15)); + double fSlow140 = (fConst79 * ((fSlow95 * fSlow86) * fSlow15)); + double fSlow141 = (0.059683103659460751 * fSlow111); + double fSlow142 = (fConst79 * (fSlow97 * fSlow86)); + double fSlow143 = (fConst80 * (fSlow32 * fSlow12)); + double fSlow144 = (fConst77 * (fSlow74 * fSlow68)); + double fSlow145 = (fConst81 * fSlow118); + double fSlow146 = (fConst82 * ((fSlow43 * fSlow60) * fSlow15)); + double fSlow147 = (fConst83 * (((fSlow27 * fSlow10) * fSlow45) * fSlow15)); + double fSlow148 = (fConst84 * ((fSlow77 * fSlow68) * fSlow15)); + double fSlow149 = (fConst85 * ((fSlow39 * fSlow12) * fSlow15)); + double fSlow150 = (fConst86 * ((fSlow99 * fSlow86) * fSlow15)); + double fSlow151 = (0.052785722976618307 * (fSlow116 * fSlow10)); + double fSlow152 = (fConst86 * (fSlow101 * fSlow86)); + double fSlow153 = (fConst87 * (fSlow41 * fSlow12)); + double fSlow154 = (fConst84 * (fSlow79 * fSlow68)); + double fSlow155 = (fConst88 * ((fSlow36 * fSlow10) * fSlow45)); + double fSlow156 = (fConst82 * (fSlow63 * fSlow60)); + double fSlow157 = mydsp_faustpower3_f(fSlow12); + double fSlow158 = (fConst89 * ((fSlow44 * fSlow157) * fSlow15)); + double fSlow159 = (fConst90 * ((fSlow64 * fSlow60) * fSlow15)); + double fSlow160 = (fConst91 * ((fSlow48 * fSlow45) * fSlow15)); + double fSlow161 = (fConst92 * ((fSlow82 * fSlow68) * fSlow15)); + double fSlow162 = (fConst93 * ((fSlow51 * fSlow12) * fSlow15)); + double fSlow163 = (fConst94 * ((fSlow104 * fSlow86) * fSlow15)); + double fSlow164 = (0.047820109005115151 * fSlow120); + double fSlow165 = (fConst94 * (fSlow106 * fSlow86)); + double fSlow166 = (fConst95 * (fSlow53 * fSlow12)); + double fSlow167 = (fConst92 * (fSlow84 * fSlow68)); + double fSlow168 = (fConst96 * (fSlow55 * fSlow45)); + double fSlow169 = (fConst90 * (fSlow66 * fSlow60)); + double fSlow170 = (fConst89 * (fSlow58 * fSlow157)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow17 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input4[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input8[i]); double fTemp5 = double(input10[i]); @@ -1714,56 +1726,56 @@ class mydsp : public dsp { double fTemp48 = double(input30[i]); double fTemp49 = double(input34[i]); double fTemp50 = double(input42[i]); - double fTemp51 = ((fSlow9 * (((((((((((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow28 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow43 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow49 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow56 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18)))))) + ((fSlow58 * (((fConst37 * ((fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19)))) + (fSlow60 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20)))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow64 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))))) + ((fSlow66 * (((((((fConst42 * ((fSlow67 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23)))) + (fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24)))))) + (fSlow70 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow72 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27))))) + (fSlow77 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28))))) + (fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow82 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30)))))) + ((fSlow84 * (((((((((((fConst52 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32)))))) + (fSlow85 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow86 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow90 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow93 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))) + (fSlow95 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38))))) + (fSlow97 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39))))) + (fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40))))) + (fSlow102 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow104 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow106 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow109 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow7 * (((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45)))) + (fSlow110 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46))))) + (fSlow112 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47))))) + (fSlow114 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48))))) + (fSlow116 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49))))))) + (fSlow118 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50))))))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp51))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow119 * fTemp51))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))) + (fSlow120 * fTemp51))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow121 * fTemp51))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow122 * fTemp51))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow123 * fTemp51))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow124 * fTemp51))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow125 * fTemp51))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow126 * fTemp51))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow127 * fTemp51))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow128 * fTemp51))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow129 * fTemp51))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow130 * fTemp51))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow131 * fTemp51))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow132 * fTemp51))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow133 * fTemp51))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow134 * fTemp51))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow135 * fTemp51))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow136 * fTemp51))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow137 * fTemp51))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow138 * fTemp51))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow139 * fTemp51))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow140 * fTemp51))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow141 * fTemp51))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow142 * fTemp51))); - output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow143 * fTemp51))); - output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow144 * fTemp51))); - output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow145 * fTemp51))); - output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow146 * fTemp51))); - output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow147 * fTemp51))); - output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow148 * fTemp51))); - output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow149 * fTemp51))); - output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow150 * fTemp51))); - output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow151 * fTemp51))); - output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow152 * fTemp51))); - output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow153 * fTemp51))); - output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow155 * fTemp51))); - output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow156 * fTemp51))); - output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow157 * fTemp51))); - output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow158 * fTemp51))); - output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow159 * fTemp51))); - output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow160 * fTemp51))); - output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow161 * fTemp51))); - output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow162 * fTemp51))); - output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow163 * fTemp51))); - output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow164 * fTemp51))); - output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow165 * fTemp51))); - output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow166 * fTemp51))); - output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow167 * fTemp51))); + double fTemp51 = ((fSlow12 * (((((((((((((fConst2 * (((fConst5 * ((fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow20 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + (fSlow22 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5)))))) + (fSlow24 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6))))))) + (fSlow28 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow31 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8)))))) + (fSlow33 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9)))))) + (fSlow37 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10)))))) + (fSlow40 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp11)):(iSlow2?(fSlow4 * (fTemp3 * fTemp11)):(fSlow4 * (fTemp1 * fTemp11)))))) + (fSlow42 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp12)):(iSlow2?(fSlow4 * (fTemp3 * fTemp12)):(fSlow4 * (fTemp1 * fTemp12)))))) + (fSlow46 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp13)):(iSlow2?(fSlow4 * (fTemp3 * fTemp13)):(fSlow4 * (fTemp1 * fTemp13)))))) + (fSlow49 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp14)):(iSlow2?(fSlow4 * (fTemp3 * fTemp14)):(fSlow4 * (fTemp1 * fTemp14)))))) + (fSlow52 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp15)):(iSlow2?(fSlow4 * (fTemp3 * fTemp15)):(fSlow4 * (fTemp1 * fTemp15)))))) + (fSlow54 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp16)):(iSlow2?(fSlow4 * (fTemp3 * fTemp16)):(fSlow4 * (fTemp1 * fTemp16)))))) + (fSlow56 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp17)):(iSlow2?(fSlow4 * (fTemp3 * fTemp17)):(fSlow4 * (fTemp1 * fTemp17)))))) + (fSlow59 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp18)):(iSlow2?(fSlow4 * (fTemp3 * fTemp18)):(fSlow4 * (fTemp1 * fTemp18))))))) + ((fSlow61 * (((fConst37 * ((fSlow62 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp19)):(iSlow2?(fSlow4 * (fTemp3 * fTemp19)):(fSlow4 * (fTemp1 * fTemp19))))) + (fSlow63 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp20)):(iSlow2?(fSlow4 * (fTemp3 * fTemp20)):(fSlow4 * (fTemp1 * fTemp20))))))) + (fSlow65 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp21)):(iSlow2?(fSlow4 * (fTemp3 * fTemp21)):(fSlow4 * (fTemp1 * fTemp21)))))) + (fSlow67 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp22)):(iSlow2?(fSlow4 * (fTemp3 * fTemp22)):(fSlow4 * (fTemp1 * fTemp22))))))) + ((fSlow69 * (((((((fConst42 * ((fSlow70 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp23)):(iSlow2?(fSlow4 * (fTemp3 * fTemp23)):(fSlow4 * (fTemp1 * fTemp23))))) + (fSlow71 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp24)):(iSlow2?(fSlow4 * (fTemp3 * fTemp24)):(fSlow4 * (fTemp1 * fTemp24))))))) + (fSlow73 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp25)):(iSlow2?(fSlow4 * (fTemp3 * fTemp25)):(fSlow4 * (fTemp1 * fTemp25)))))) + (fSlow75 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp26)):(iSlow2?(fSlow4 * (fTemp3 * fTemp26)):(fSlow4 * (fTemp1 * fTemp26)))))) + (fSlow78 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp27)):(iSlow2?(fSlow4 * (fTemp3 * fTemp27)):(fSlow4 * (fTemp1 * fTemp27)))))) + (fSlow80 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp28)):(iSlow2?(fSlow4 * (fTemp3 * fTemp28)):(fSlow4 * (fTemp1 * fTemp28)))))) + (fSlow83 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp29)):(iSlow2?(fSlow4 * (fTemp3 * fTemp29)):(fSlow4 * (fTemp1 * fTemp29)))))) + (fSlow85 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp30)):(iSlow2?(fSlow4 * (fTemp3 * fTemp30)):(fSlow4 * (fTemp1 * fTemp30))))))) + ((fSlow87 * (((((((((((fConst52 * ((fSlow15 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp31)):(iSlow2?(fSlow4 * (fTemp3 * fTemp31)):(fSlow4 * (fTemp1 * fTemp31))))) + (fSlow14 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp32)):(iSlow2?(fSlow4 * (fTemp3 * fTemp32)):(fSlow4 * (fTemp1 * fTemp32))))))) + (fSlow88 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp33)):(iSlow2?(fSlow4 * (fTemp3 * fTemp33)):(fSlow4 * (fTemp1 * fTemp33)))))) + (fSlow89 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp34)):(iSlow2?(fSlow4 * (fTemp3 * fTemp34)):(fSlow4 * (fTemp1 * fTemp34)))))) + (fSlow91 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp35)):(iSlow2?(fSlow4 * (fTemp3 * fTemp35)):(fSlow4 * (fTemp1 * fTemp35)))))) + (fSlow93 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp36)):(iSlow2?(fSlow4 * (fTemp3 * fTemp36)):(fSlow4 * (fTemp1 * fTemp36)))))) + (fSlow96 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp37)):(iSlow2?(fSlow4 * (fTemp3 * fTemp37)):(fSlow4 * (fTemp1 * fTemp37)))))) + (fSlow98 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp38)):(iSlow2?(fSlow4 * (fTemp3 * fTemp38)):(fSlow4 * (fTemp1 * fTemp38)))))) + (fSlow100 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp39)):(iSlow2?(fSlow4 * (fTemp3 * fTemp39)):(fSlow4 * (fTemp1 * fTemp39)))))) + (fSlow102 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp40)):(iSlow2?(fSlow4 * (fTemp3 * fTemp40)):(fSlow4 * (fTemp1 * fTemp40)))))) + (fSlow105 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp41)):(iSlow2?(fSlow4 * (fTemp3 * fTemp41)):(fSlow4 * (fTemp1 * fTemp41)))))) + (fSlow107 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp42)):(iSlow2?(fSlow4 * (fTemp3 * fTemp42)):(fSlow4 * (fTemp1 * fTemp42))))))) + (((((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow109 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp43)):(iSlow2?(fSlow4 * (fTemp3 * fTemp43)):(fSlow4 * (fTemp1 * fTemp43)))))) + (fSlow112 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp44)):(iSlow2?(fSlow4 * (fTemp3 * fTemp44)):(fSlow4 * (fTemp1 * fTemp44)))))) + (fSlow10 * (((((1.7320508075688772 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp45)):(iSlow2?(fSlow4 * (fTemp3 * fTemp45)):(fSlow4 * (fTemp1 * fTemp45))))) + (fSlow113 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp46)):(iSlow2?(fSlow4 * (fTemp3 * fTemp46)):(fSlow4 * (fTemp1 * fTemp46)))))) + (fSlow115 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp47)):(iSlow2?(fSlow4 * (fTemp3 * fTemp47)):(fSlow4 * (fTemp1 * fTemp47)))))) + (fSlow117 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp48)):(iSlow2?(fSlow4 * (fTemp3 * fTemp48)):(fSlow4 * (fTemp1 * fTemp48)))))) + (fSlow119 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp49)):(iSlow2?(fSlow4 * (fTemp3 * fTemp49)):(fSlow4 * (fTemp1 * fTemp49)))))))) + (fSlow121 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp50)):(iSlow2?(fSlow4 * (fTemp3 * fTemp50)):(fSlow4 * (fTemp1 * fTemp50)))))))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp51))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp31):(iSlow2?(fSlow4 * (fRec1[0] * fTemp31)):(fSlow4 * (fRec0[0] * fTemp31)))) + (fSlow122 * fTemp51))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp45):(iSlow2?(fSlow4 * (fRec1[0] * fTemp45)):(fSlow4 * (fRec0[0] * fTemp45)))) + (fSlow123 * fTemp51))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp32):(iSlow2?(fSlow4 * (fRec1[0] * fTemp32)):(fSlow4 * (fRec0[0] * fTemp32)))) + (fSlow124 * fTemp51))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow125 * fTemp51))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp33):(iSlow2?(fSlow4 * (fRec1[0] * fTemp33)):(fSlow4 * (fRec0[0] * fTemp33)))) + (fSlow126 * fTemp51))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp43):(iSlow2?(fSlow4 * (fRec1[0] * fTemp43)):(fSlow4 * (fRec0[0] * fTemp43)))) + (fSlow127 * fTemp51))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp34):(iSlow2?(fSlow4 * (fRec1[0] * fTemp34)):(fSlow4 * (fRec0[0] * fTemp34)))) + (fSlow128 * fTemp51))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow129 * fTemp51))); + output9[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp23):(iSlow2?(fSlow4 * (fRec1[0] * fTemp23)):(fSlow4 * (fRec0[0] * fTemp23)))) + (fSlow130 * fTemp51))); + output10[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow131 * fTemp51))); + output11[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp35):(iSlow2?(fSlow4 * (fRec1[0] * fTemp35)):(fSlow4 * (fRec0[0] * fTemp35)))) + (fSlow132 * fTemp51))); + output12[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp46):(iSlow2?(fSlow4 * (fRec1[0] * fTemp46)):(fSlow4 * (fRec0[0] * fTemp46)))) + (fSlow133 * fTemp51))); + output13[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp36):(iSlow2?(fSlow4 * (fRec1[0] * fTemp36)):(fSlow4 * (fRec0[0] * fTemp36)))) + (fSlow134 * fTemp51))); + output14[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow135 * fTemp51))); + output15[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp24):(iSlow2?(fSlow4 * (fRec1[0] * fTemp24)):(fSlow4 * (fRec0[0] * fTemp24)))) + (fSlow136 * fTemp51))); + output16[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow137 * fTemp51))); + output17[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp25):(iSlow2?(fSlow4 * (fRec1[0] * fTemp25)):(fSlow4 * (fRec0[0] * fTemp25)))) + (fSlow138 * fTemp51))); + output18[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow139 * fTemp51))); + output19[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp37):(iSlow2?(fSlow4 * (fRec1[0] * fTemp37)):(fSlow4 * (fRec0[0] * fTemp37)))) + (fSlow140 * fTemp51))); + output20[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp44):(iSlow2?(fSlow4 * (fRec1[0] * fTemp44)):(fSlow4 * (fRec0[0] * fTemp44)))) + (fSlow141 * fTemp51))); + output21[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp38):(iSlow2?(fSlow4 * (fRec1[0] * fTemp38)):(fSlow4 * (fRec0[0] * fTemp38)))) + (fSlow142 * fTemp51))); + output22[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow143 * fTemp51))); + output23[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp26):(iSlow2?(fSlow4 * (fRec1[0] * fTemp26)):(fSlow4 * (fRec0[0] * fTemp26)))) + (fSlow144 * fTemp51))); + output24[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow145 * fTemp51))); + output25[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp19):(iSlow2?(fSlow4 * (fRec1[0] * fTemp19)):(fSlow4 * (fRec0[0] * fTemp19)))) + (fSlow146 * fTemp51))); + output26[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp47):(iSlow2?(fSlow4 * (fRec1[0] * fTemp47)):(fSlow4 * (fRec0[0] * fTemp47)))) + (fSlow147 * fTemp51))); + output27[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp27):(iSlow2?(fSlow4 * (fRec1[0] * fTemp27)):(fSlow4 * (fRec0[0] * fTemp27)))) + (fSlow148 * fTemp51))); + output28[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp11):(iSlow2?(fSlow4 * (fRec1[0] * fTemp11)):(fSlow4 * (fRec0[0] * fTemp11)))) + (fSlow149 * fTemp51))); + output29[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp39):(iSlow2?(fSlow4 * (fRec1[0] * fTemp39)):(fSlow4 * (fRec0[0] * fTemp39)))) + (fSlow150 * fTemp51))); + output30[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp48):(iSlow2?(fSlow4 * (fRec1[0] * fTemp48)):(fSlow4 * (fRec0[0] * fTemp48)))) + (fSlow151 * fTemp51))); + output31[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp40):(iSlow2?(fSlow4 * (fRec1[0] * fTemp40)):(fSlow4 * (fRec0[0] * fTemp40)))) + (fSlow152 * fTemp51))); + output32[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp12):(iSlow2?(fSlow4 * (fRec1[0] * fTemp12)):(fSlow4 * (fRec0[0] * fTemp12)))) + (fSlow153 * fTemp51))); + output33[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp28):(iSlow2?(fSlow4 * (fRec1[0] * fTemp28)):(fSlow4 * (fRec0[0] * fTemp28)))) + (fSlow154 * fTemp51))); + output34[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp49):(iSlow2?(fSlow4 * (fRec1[0] * fTemp49)):(fSlow4 * (fRec0[0] * fTemp49)))) + (fSlow155 * fTemp51))); + output35[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp20):(iSlow2?(fSlow4 * (fRec1[0] * fTemp20)):(fSlow4 * (fRec0[0] * fTemp20)))) + (fSlow156 * fTemp51))); + output36[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp13):(iSlow2?(fSlow4 * (fRec1[0] * fTemp13)):(fSlow4 * (fRec0[0] * fTemp13)))) + (fSlow158 * fTemp51))); + output37[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp21):(iSlow2?(fSlow4 * (fRec1[0] * fTemp21)):(fSlow4 * (fRec0[0] * fTemp21)))) + (fSlow159 * fTemp51))); + output38[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp14):(iSlow2?(fSlow4 * (fRec1[0] * fTemp14)):(fSlow4 * (fRec0[0] * fTemp14)))) + (fSlow160 * fTemp51))); + output39[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp29):(iSlow2?(fSlow4 * (fRec1[0] * fTemp29)):(fSlow4 * (fRec0[0] * fTemp29)))) + (fSlow161 * fTemp51))); + output40[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp15):(iSlow2?(fSlow4 * (fRec1[0] * fTemp15)):(fSlow4 * (fRec0[0] * fTemp15)))) + (fSlow162 * fTemp51))); + output41[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp41):(iSlow2?(fSlow4 * (fRec1[0] * fTemp41)):(fSlow4 * (fRec0[0] * fTemp41)))) + (fSlow163 * fTemp51))); + output42[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp50):(iSlow2?(fSlow4 * (fRec1[0] * fTemp50)):(fSlow4 * (fRec0[0] * fTemp50)))) + (fSlow164 * fTemp51))); + output43[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp42):(iSlow2?(fSlow4 * (fRec1[0] * fTemp42)):(fSlow4 * (fRec0[0] * fTemp42)))) + (fSlow165 * fTemp51))); + output44[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp16):(iSlow2?(fSlow4 * (fRec1[0] * fTemp16)):(fSlow4 * (fRec0[0] * fTemp16)))) + (fSlow166 * fTemp51))); + output45[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp30):(iSlow2?(fSlow4 * (fRec1[0] * fTemp30)):(fSlow4 * (fRec0[0] * fTemp30)))) + (fSlow167 * fTemp51))); + output46[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp17):(iSlow2?(fSlow4 * (fRec1[0] * fTemp17)):(fSlow4 * (fRec0[0] * fTemp17)))) + (fSlow168 * fTemp51))); + output47[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp22):(iSlow2?(fSlow4 * (fRec1[0] * fTemp22)):(fSlow4 * (fRec0[0] * fTemp22)))) + (fSlow169 * fTemp51))); + output48[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp18):(iSlow2?(fSlow4 * (fRec1[0] * fTemp18)):(fSlow4 * (fRec0[0] * fTemp18)))) + (fSlow170 * fTemp51))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2HOA7.cpp b/source/HOAUGens/HOABeamDirac2HOA7.cpp index 92b32056fc..da86bbeeb1 100644 --- a/source/HOAUGens/HOABeamDirac2HOA7.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA7.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA7" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -641,6 +641,7 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; @@ -648,12 +649,13 @@ class mydsp : public dsp { double fRec0[2]; double fRec1[2]; FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; double fConst2; double fConst3; double fConst4; double fConst5; - FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -784,6 +786,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA7"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -1434,45 +1437,45 @@ class mydsp : public dsp { fConst64 = (0.47140452079103168 * fConst63); fConst65 = sqrt((15.0 * (fConst4 / fConst30))); fConst66 = (0.35355339059327379 * fConst65); - fConst67 = double(tgamma(1.5)); - fConst68 = sqrt((3.0 * (fConst3 / fConst15))); - fConst69 = (1.5957691216057308 * fConst68); - fConst70 = sqrt((5.0 * (fConst6 / fConst21))); - fConst71 = (4.7873073648171927 * fConst70); - fConst72 = sqrt((7.0 * (fConst15 / fConst4))); - fConst73 = (0.70710678118654757 * fConst72); - fConst74 = sqrt((9.0 * (fConst21 / fConst7))); - fConst75 = (0.47140452079103168 * fConst74); - fConst76 = sqrt((11.0 * (fConst4 / fConst16))); - fConst77 = (0.35355339059327379 * fConst76); - fConst78 = sqrt((13.0 * (fConst7 / fConst22))); - fConst79 = (0.28284271247461906 * fConst78); - fConst80 = sqrt((15.0 * (fConst16 / fConst11))); - fConst81 = (0.23570226039551584 * fConst80); - fConst82 = (sqrt((15.0 * (fConst3 / double(tgamma(15.0))))) * double(tgamma(7.5))); - fConst83 = (102.12922378276677 * fConst82); - fConst84 = (0.56568542494923812 * fConst41); - fConst85 = (0.12698727186848197 * (fConst68 * fConst67)); + fConst67 = (sqrt((15.0 * (fConst3 / double(tgamma(15.0))))) * double(tgamma(7.5))); + fConst68 = (102.12922378276677 * fConst67); + fConst69 = (0.56568542494923812 * fConst41); + fConst70 = double(tgamma(1.5)); + fConst71 = sqrt((3.0 * (fConst3 / fConst15))); + fConst72 = (1.5957691216057308 * fConst71); + fConst73 = sqrt((5.0 * (fConst6 / fConst21))); + fConst74 = (4.7873073648171927 * fConst73); + fConst75 = sqrt((7.0 * (fConst15 / fConst4))); + fConst76 = (0.70710678118654757 * fConst75); + fConst77 = sqrt((9.0 * (fConst21 / fConst7))); + fConst78 = (0.47140452079103168 * fConst77); + fConst79 = sqrt((11.0 * (fConst4 / fConst16))); + fConst80 = (0.35355339059327379 * fConst79); + fConst81 = sqrt((13.0 * (fConst7 / fConst22))); + fConst82 = (0.28284271247461906 * fConst81); + fConst83 = sqrt((15.0 * (fConst16 / fConst11))); + fConst84 = (0.23570226039551584 * fConst83); + fConst85 = (0.12698727186848197 * (fConst71 * fConst70)); fConst86 = (fConst5 * fConst2); fConst87 = (0.50794908747392786 * fConst86); - fConst88 = (0.3809618156054459 * (fConst70 * fConst67)); + fConst88 = (0.3809618156054459 * (fConst73 * fConst70)); fConst89 = (0.25397454373696393 * fConst86); fConst90 = (0.50794908747392786 * (fConst57 * fConst56)); fConst91 = (fConst8 * fConst2); fConst92 = (2.5397454373696391 * fConst91); - fConst93 = (0.056269769759819135 * (fConst72 * fConst67)); + fConst93 = (0.056269769759819135 * (fConst75 * fConst70)); fConst94 = (1.2698727186848195 * fConst91); fConst95 = (2.0317963498957115 * fConst13); fConst96 = (3.5556436123174948 * (fConst59 * fConst56)); fConst97 = (0.11253953951963827 * fConst17); - fConst98 = (0.037513179839879424 * (fConst74 * fConst67)); + fConst98 = (0.037513179839879424 * (fConst77 * fConst70)); fConst99 = (0.056269769759819135 * fConst17); fConst100 = (1.0158981749478557 * fConst13); fConst101 = (2.0317963498957115 * (fConst46 * fConst45)); fConst102 = (18.286167149061402 * fConst52); fConst103 = (0.056269769759819135 * (fConst61 * fConst56)); fConst104 = (0.075026359679758847 * fConst23); - fConst105 = (0.028134884879909568 * (fConst76 * fConst67)); + fConst105 = (0.028134884879909568 * (fConst79 * fConst70)); fConst106 = (0.037513179839879424 * fConst23); fConst107 = (9.1430835745307011 * fConst52); fConst108 = (4.0635926997914229 * fConst28); @@ -1480,16 +1483,16 @@ class mydsp : public dsp { fConst110 = (0.11253953951963827 * fConst31); fConst111 = (0.037513179839879424 * (fConst63 * fConst56)); fConst112 = (0.056269769759819135 * fConst33); - fConst113 = (0.022507907903927659 * (fConst78 * fConst67)); + fConst113 = (0.022507907903927659 * (fConst81 * fConst70)); fConst114 = (0.028134884879909568 * fConst33); fConst115 = (0.056269769759819135 * fConst31); - fConst116 = (8.1271853995828458 * fConst82); + fConst116 = (8.1271853995828458 * fConst67); fConst117 = (52.826705097288496 * fConst43); fConst118 = (0.056269769759819135 * (fConst50 * fConst45)); fConst119 = (0.075026359679758847 * fConst38); fConst120 = (0.028134884879909568 * (fConst65 * fConst56)); fConst121 = (0.045015815807855318 * fConst41); - fConst122 = (0.018756589919939712 * (fConst80 * fConst67)); + fConst122 = (0.018756589919939712 * (fConst83 * fConst70)); fConst123 = (0.022507907903927659 * fConst41); fConst124 = (0.037513179839879424 * fConst38); @@ -1497,10 +1500,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -1550,18 +1555,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -1695,234 +1704,237 @@ class mydsp : public dsp { FAUSTFLOAT* output61 = outputs[61]; FAUSTFLOAT* output62 = outputs[62]; FAUSTFLOAT* output63 = outputs[63]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = mydsp_faustpower2_f(fSlow7); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); double fSlow9 = (1.0 - fSlow8); - double fSlow10 = double(fVslider1); - double fSlow11 = cos(fSlow10); - double fSlow12 = sin(fSlow10); - double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); - double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow15 = mydsp_faustpower2_f(fSlow11); - double fSlow16 = ((2.0 * fSlow15) + -1.0); - double fSlow17 = (3.1915382432114616 * fSlow16); - double fSlow18 = (fSlow11 * fSlow7); - double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); - double fSlow20 = (fSlow16 * fSlow7); - double fSlow21 = (fConst10 * fSlow20); - double fSlow22 = ((4.0 * fSlow15) + -1.0); - double fSlow23 = (fSlow22 + -1.0); - double fSlow24 = (fSlow23 * fSlow11); - double fSlow25 = (fConst14 * ((fSlow24 * fSlow9) * fSlow12)); - double fSlow26 = ((78.986541696685876 * fSlow8) + -11.283791670955125); - double fSlow27 = (fSlow26 * fSlow11); - double fSlow28 = (fConst18 * (fSlow27 * fSlow12)); - double fSlow29 = (fSlow16 * fSlow26); - double fSlow30 = (fConst19 * fSlow29); - double fSlow31 = ((2.0 * fSlow16) + -1.0); - double fSlow32 = (1.0 - fSlow31); - double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow15))); - double fSlow34 = (fConst20 * (fSlow33 * fSlow9)); - double fSlow35 = ((4.5 * fSlow26) + -67.702750025730751); - double fSlow36 = ((fSlow35 * fSlow11) * fSlow7); - double fSlow37 = (fConst24 * (fSlow36 * fSlow12)); - double fSlow38 = ((fSlow16 * fSlow35) * fSlow7); - double fSlow39 = (fConst25 * fSlow38); - double fSlow40 = (1.0 - fSlow23); - double fSlow41 = (1.0 - (4.0 * (fSlow40 * fSlow15))); - double fSlow42 = (0.0 - (2.0 * ((fSlow23 - fSlow41) * fSlow11))); - double fSlow43 = mydsp_faustpower2_f(fSlow9); - double fSlow44 = (fConst29 * ((fSlow42 * fSlow43) * fSlow12)); - double fSlow45 = ((893.67630033964599 * fSlow8) + -81.24330003087691); - double fSlow46 = ((fSlow23 * fSlow45) * fSlow11); - double fSlow47 = (fConst32 * ((fSlow46 * fSlow9) * fSlow12)); - double fSlow48 = ((3.6666666666666665 * (fSlow35 * fSlow8)) - (3.5 * fSlow26)); - double fSlow49 = (fSlow48 * fSlow11); - double fSlow50 = (fConst34 * (fSlow49 * fSlow12)); - double fSlow51 = (fSlow16 * fSlow48); - double fSlow52 = (fConst35 * fSlow51); - double fSlow53 = (fSlow33 * fSlow45); - double fSlow54 = (fConst36 * (fSlow53 * fSlow9)); - double fSlow55 = ((2.0 * fSlow33) - fSlow31); - double fSlow56 = ((2.0 * ((fSlow32 + fSlow55) * fSlow15)) + -1.0); - double fSlow57 = (fConst29 * (fSlow56 * fSlow43)); - double fSlow58 = ((6.5 * fSlow45) + -812.43300030876912); - double fSlow59 = (((fSlow23 * fSlow58) * fSlow11) * fSlow7); - double fSlow60 = (fConst39 * ((fSlow59 * fSlow9) * fSlow12)); - double fSlow61 = ((3.25 * fSlow48) - (2.6666666666666665 * fSlow35)); - double fSlow62 = ((fSlow16 * fSlow61) * fSlow7); - double fSlow63 = (fConst42 * fSlow62); - double fSlow64 = (fSlow56 * fSlow7); - double fSlow65 = (fConst44 * (fSlow64 * fSlow43)); - double fSlow66 = pow(fSlow9, 2.5); - double fSlow67 = (fConst45 * fSlow66); - double fSlow68 = (fSlow41 * fSlow12); - double fSlow69 = (fSlow55 * fSlow11); - double fSlow70 = (fSlow41 * fSlow7); - double fSlow71 = (fConst49 * (fSlow70 * fSlow12)); - double fSlow72 = (fSlow69 * fSlow7); - double fSlow73 = (fConst49 * fSlow72); - double fSlow74 = ((2581.7315343145328 * fSlow8) + -198.59473340881021); - double fSlow75 = (fSlow41 * fSlow74); - double fSlow76 = (fConst51 * (fSlow75 * fSlow12)); - double fSlow77 = ((fSlow55 * fSlow74) * fSlow11); - double fSlow78 = (fConst51 * fSlow77); - double fSlow79 = ((3.0 * fSlow8) + -1.0); - double fSlow80 = ((2.5 * fSlow79) + -2.0); - double fSlow81 = (0.88191710368819687 * fSlow80); - double fSlow82 = ((fSlow24 * fSlow43) * fSlow12); - double fSlow83 = (fConst53 * fSlow82); - double fSlow84 = ((2.333333333333333 * (fSlow80 * fSlow8)) - (1.5 * fSlow79)); - double fSlow85 = ((2.25 * fSlow84) - (1.3333333333333333 * fSlow80)); - double fSlow86 = (0.66332495807108005 * fSlow85); - double fSlow87 = (fSlow33 * fSlow43); - double fSlow88 = (fConst54 * fSlow87); - double fSlow89 = mydsp_faustpower3_f(fSlow9); - double fSlow90 = ((fSlow42 * fSlow89) * fSlow12); - double fSlow91 = (fConst44 * fSlow90); - double fSlow92 = ((2.2000000000000002 * (fSlow85 * fSlow8)) - (1.25 * fSlow84)); - double fSlow93 = ((2.1666666666666665 * fSlow92) - (1.2000000000000002 * fSlow85)); - double fSlow94 = (0.55328333517248807 * fSlow93); - double fSlow95 = (fSlow33 * fSlow58); - double fSlow96 = (fConst55 * (fSlow95 * fSlow43)); - double fSlow97 = pow(fSlow9, 1.5); - double fSlow98 = (fConst56 * fSlow97); - double fSlow99 = (fSlow22 * fSlow12); - double fSlow100 = (fSlow31 * fSlow11); - double fSlow101 = (fSlow22 * fSlow7); - double fSlow102 = (fConst60 * (fSlow101 * fSlow12)); - double fSlow103 = (fSlow100 * fSlow7); - double fSlow104 = (fConst60 * fSlow103); - double fSlow105 = ((284.35155010806915 * fSlow8) + -31.594616678674353); - double fSlow106 = (fSlow22 * fSlow105); - double fSlow107 = (fConst62 * (fSlow106 * fSlow12)); - double fSlow108 = ((fSlow31 * fSlow105) * fSlow11); - double fSlow109 = (fConst62 * fSlow108); - double fSlow110 = ((5.5 * fSlow105) + -252.75693342939482); - double fSlow111 = ((fSlow22 * fSlow110) * fSlow7); - double fSlow112 = (fConst64 * (fSlow111 * fSlow12)); - double fSlow113 = (((fSlow31 * fSlow110) * fSlow11) * fSlow7); - double fSlow114 = (fConst64 * fSlow113); - double fSlow115 = ((4.333333333333333 * (fSlow110 * fSlow8)) - (4.5 * fSlow105)); - double fSlow116 = (fSlow22 * fSlow115); - double fSlow117 = (fConst66 * (fSlow116 * fSlow12)); - double fSlow118 = ((fSlow31 * fSlow115) * fSlow11); - double fSlow119 = (fConst66 * fSlow118); - double fSlow120 = pow(fSlow9, 0.5); - double fSlow121 = (fConst67 * fSlow120); - double fSlow122 = (fConst71 * (fSlow7 * fSlow12)); - double fSlow123 = (fConst71 * fSlow18); - double fSlow124 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); - double fSlow125 = (fConst73 * (fSlow124 * fSlow12)); - double fSlow126 = (fSlow124 * fSlow11); - double fSlow127 = (fConst73 * fSlow126); - double fSlow128 = ((3.5 * fSlow124) + -13.540550005146152); - double fSlow129 = (fSlow128 * fSlow7); - double fSlow130 = (fConst75 * (fSlow129 * fSlow12)); - double fSlow131 = ((fSlow128 * fSlow11) * fSlow7); - double fSlow132 = (fConst75 * fSlow131); - double fSlow133 = ((3.0 * (fSlow128 * fSlow8)) - (2.5 * fSlow124)); - double fSlow134 = (fConst77 * (fSlow133 * fSlow12)); - double fSlow135 = (fSlow133 * fSlow11); - double fSlow136 = (fConst77 * fSlow135); - double fSlow137 = ((2.75 * fSlow133) - (2.0 * fSlow128)); - double fSlow138 = (fSlow137 * fSlow7); - double fSlow139 = (fConst79 * (fSlow138 * fSlow12)); - double fSlow140 = ((fSlow137 * fSlow11) * fSlow7); - double fSlow141 = (fConst79 * fSlow140); - double fSlow142 = ((2.6000000000000001 * (fSlow137 * fSlow8)) - (1.75 * fSlow133)); - double fSlow143 = (fConst81 * (fSlow142 * fSlow12)); - double fSlow144 = (fSlow142 * fSlow11); - double fSlow145 = (fConst81 * fSlow144); - double fSlow146 = (1.1180339887498949 * fSlow79); - double fSlow147 = (0.75 * fSlow84); - double fSlow148 = (0.60092521257733145 * fSlow92); - double fSlow149 = pow(fSlow9, 3.5); - double fSlow150 = (((((2.0 * fSlow42) + (4.0 * (fSlow40 * fSlow11))) * fSlow11) + -1.0) * fSlow149); - double fSlow151 = (fConst83 * fSlow150); - double fSlow152 = (((fSlow61 * fSlow11) * fSlow7) * fSlow9); - double fSlow153 = (fConst84 * fSlow152); - double fSlow154 = ((((2.0 * fSlow56) - fSlow55) * fSlow11) * fSlow149); - double fSlow155 = (fConst83 * fSlow154); - double fSlow156 = (fConst85 * (fSlow120 * fSlow12)); - double fSlow157 = (0.13783222385544802 * fSlow7); - double fSlow158 = (fConst85 * (fSlow11 * fSlow120)); - double fSlow159 = (fConst87 * ((fSlow11 * fSlow9) * fSlow12)); - double fSlow160 = (fConst88 * ((fSlow7 * fSlow120) * fSlow12)); - double fSlow161 = (0.088970317927147144 * fSlow79); - double fSlow162 = (fConst88 * (fSlow18 * fSlow120)); - double fSlow163 = (fConst89 * (fSlow16 * fSlow9)); - double fSlow164 = (fConst90 * ((fSlow22 * fSlow97) * fSlow12)); - double fSlow165 = (fConst92 * ((fSlow18 * fSlow9) * fSlow12)); - double fSlow166 = (fConst93 * ((fSlow124 * fSlow120) * fSlow12)); - double fSlow167 = (0.070180733224632072 * (fSlow80 * fSlow7)); - double fSlow168 = (fConst93 * (fSlow126 * fSlow120)); - double fSlow169 = (fConst94 * (fSlow20 * fSlow9)); - double fSlow170 = (fConst90 * (fSlow100 * fSlow97)); - double fSlow171 = (fConst95 * fSlow82); - double fSlow172 = (fConst96 * ((fSlow101 * fSlow97) * fSlow12)); - double fSlow173 = (fConst97 * ((fSlow27 * fSlow9) * fSlow12)); - double fSlow174 = (fConst98 * ((fSlow129 * fSlow120) * fSlow12)); - double fSlow175 = (0.059683103659460751 * fSlow84); - double fSlow176 = (fConst98 * (fSlow131 * fSlow120)); - double fSlow177 = (fConst99 * (fSlow29 * fSlow9)); - double fSlow178 = (fConst96 * (fSlow103 * fSlow97)); - double fSlow179 = (fConst100 * fSlow87); - double fSlow180 = (fConst101 * ((fSlow41 * fSlow66) * fSlow12)); - double fSlow181 = (fConst102 * (((fSlow24 * fSlow7) * fSlow43) * fSlow12)); - double fSlow182 = (fConst103 * ((fSlow106 * fSlow97) * fSlow12)); - double fSlow183 = (fConst104 * ((fSlow36 * fSlow9) * fSlow12)); - double fSlow184 = (fConst105 * ((fSlow133 * fSlow120) * fSlow12)); - double fSlow185 = (0.052785722976618307 * (fSlow85 * fSlow7)); - double fSlow186 = (fConst105 * (fSlow135 * fSlow120)); - double fSlow187 = (fConst106 * (fSlow38 * fSlow9)); - double fSlow188 = (fConst103 * (fSlow108 * fSlow97)); - double fSlow189 = (fConst107 * ((fSlow33 * fSlow7) * fSlow43)); - double fSlow190 = (fConst101 * (fSlow69 * fSlow66)); - double fSlow191 = (fConst108 * fSlow90); - double fSlow192 = (fConst109 * ((fSlow70 * fSlow66) * fSlow12)); - double fSlow193 = (fConst110 * ((fSlow46 * fSlow43) * fSlow12)); - double fSlow194 = (fConst111 * ((fSlow111 * fSlow97) * fSlow12)); - double fSlow195 = (fConst112 * ((fSlow49 * fSlow9) * fSlow12)); - double fSlow196 = (fConst113 * ((fSlow138 * fSlow120) * fSlow12)); - double fSlow197 = (0.047820109005115151 * fSlow92); - double fSlow198 = (fConst113 * (fSlow140 * fSlow120)); - double fSlow199 = (fConst114 * (fSlow51 * fSlow9)); - double fSlow200 = (fConst111 * (fSlow113 * fSlow97)); - double fSlow201 = (fConst115 * (fSlow53 * fSlow43)); - double fSlow202 = (fConst109 * (fSlow72 * fSlow66)); - double fSlow203 = (fConst108 * (fSlow56 * fSlow89)); - double fSlow204 = (fConst116 * (fSlow150 * fSlow12)); - double fSlow205 = (fConst117 * (((fSlow42 * fSlow7) * fSlow89) * fSlow12)); - double fSlow206 = (fConst118 * ((fSlow75 * fSlow66) * fSlow12)); - double fSlow207 = (fConst119 * ((fSlow59 * fSlow43) * fSlow12)); - double fSlow208 = (fConst120 * ((fSlow116 * fSlow97) * fSlow12)); - double fSlow209 = (fConst121 * (fSlow152 * fSlow12)); - double fSlow210 = (fConst122 * ((fSlow142 * fSlow120) * fSlow12)); - double fSlow211 = (0.044028888861535699 * (fSlow93 * fSlow7)); - double fSlow212 = (fConst122 * (fSlow144 * fSlow120)); - double fSlow213 = (fConst123 * (fSlow62 * fSlow9)); - double fSlow214 = (fConst120 * (fSlow118 * fSlow97)); - double fSlow215 = (fConst124 * ((fSlow95 * fSlow7) * fSlow43)); - double fSlow216 = (fConst118 * (fSlow77 * fSlow66)); - double fSlow217 = (fConst117 * (fSlow64 * fSlow89)); - double fSlow218 = (fConst116 * fSlow154); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = mydsp_faustpower2_f(fSlow10); + double fSlow12 = (1.0 - fSlow11); + double fSlow13 = double(fVslider2); + double fSlow14 = cos(fSlow13); + double fSlow15 = sin(fSlow13); + double fSlow16 = (6.3830764864229232 * (fSlow14 * fSlow15)); + double fSlow17 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow18 = mydsp_faustpower2_f(fSlow14); + double fSlow19 = ((2.0 * fSlow18) + -1.0); + double fSlow20 = (3.1915382432114616 * fSlow19); + double fSlow21 = (fSlow14 * fSlow10); + double fSlow22 = (fConst9 * (fSlow21 * fSlow15)); + double fSlow23 = (fSlow19 * fSlow10); + double fSlow24 = (fConst10 * fSlow23); + double fSlow25 = ((4.0 * fSlow18) + -1.0); + double fSlow26 = (fSlow25 + -1.0); + double fSlow27 = (fSlow26 * fSlow14); + double fSlow28 = (fConst14 * ((fSlow27 * fSlow12) * fSlow15)); + double fSlow29 = ((78.986541696685876 * fSlow11) + -11.283791670955125); + double fSlow30 = (fSlow29 * fSlow14); + double fSlow31 = (fConst18 * (fSlow30 * fSlow15)); + double fSlow32 = (fSlow19 * fSlow29); + double fSlow33 = (fConst19 * fSlow32); + double fSlow34 = ((2.0 * fSlow19) + -1.0); + double fSlow35 = (1.0 - fSlow34); + double fSlow36 = (1.0 - (2.0 * (fSlow35 * fSlow18))); + double fSlow37 = (fConst20 * (fSlow36 * fSlow12)); + double fSlow38 = ((4.5 * fSlow29) + -67.702750025730751); + double fSlow39 = ((fSlow38 * fSlow14) * fSlow10); + double fSlow40 = (fConst24 * (fSlow39 * fSlow15)); + double fSlow41 = ((fSlow19 * fSlow38) * fSlow10); + double fSlow42 = (fConst25 * fSlow41); + double fSlow43 = (1.0 - fSlow26); + double fSlow44 = (1.0 - (4.0 * (fSlow43 * fSlow18))); + double fSlow45 = (0.0 - (2.0 * ((fSlow26 - fSlow44) * fSlow14))); + double fSlow46 = mydsp_faustpower2_f(fSlow12); + double fSlow47 = (fConst29 * ((fSlow45 * fSlow46) * fSlow15)); + double fSlow48 = ((893.67630033964599 * fSlow11) + -81.24330003087691); + double fSlow49 = ((fSlow26 * fSlow48) * fSlow14); + double fSlow50 = (fConst32 * ((fSlow49 * fSlow12) * fSlow15)); + double fSlow51 = ((3.6666666666666665 * (fSlow38 * fSlow11)) - (3.5 * fSlow29)); + double fSlow52 = (fSlow51 * fSlow14); + double fSlow53 = (fConst34 * (fSlow52 * fSlow15)); + double fSlow54 = (fSlow19 * fSlow51); + double fSlow55 = (fConst35 * fSlow54); + double fSlow56 = (fSlow36 * fSlow48); + double fSlow57 = (fConst36 * (fSlow56 * fSlow12)); + double fSlow58 = ((2.0 * fSlow36) - fSlow34); + double fSlow59 = ((2.0 * ((fSlow35 + fSlow58) * fSlow18)) + -1.0); + double fSlow60 = (fConst29 * (fSlow59 * fSlow46)); + double fSlow61 = ((6.5 * fSlow48) + -812.43300030876912); + double fSlow62 = (((fSlow26 * fSlow61) * fSlow14) * fSlow10); + double fSlow63 = (fConst39 * ((fSlow62 * fSlow12) * fSlow15)); + double fSlow64 = ((3.25 * fSlow51) - (2.6666666666666665 * fSlow38)); + double fSlow65 = ((fSlow19 * fSlow64) * fSlow10); + double fSlow66 = (fConst42 * fSlow65); + double fSlow67 = (fSlow59 * fSlow10); + double fSlow68 = (fConst44 * (fSlow67 * fSlow46)); + double fSlow69 = pow(fSlow12, 2.5); + double fSlow70 = (fConst45 * fSlow69); + double fSlow71 = (fSlow44 * fSlow15); + double fSlow72 = (fSlow58 * fSlow14); + double fSlow73 = (fSlow44 * fSlow10); + double fSlow74 = (fConst49 * (fSlow73 * fSlow15)); + double fSlow75 = (fSlow72 * fSlow10); + double fSlow76 = (fConst49 * fSlow75); + double fSlow77 = ((2581.7315343145328 * fSlow11) + -198.59473340881021); + double fSlow78 = (fSlow44 * fSlow77); + double fSlow79 = (fConst51 * (fSlow78 * fSlow15)); + double fSlow80 = ((fSlow58 * fSlow77) * fSlow14); + double fSlow81 = (fConst51 * fSlow80); + double fSlow82 = ((3.0 * fSlow11) + -1.0); + double fSlow83 = ((2.5 * fSlow82) + -2.0); + double fSlow84 = (0.88191710368819687 * fSlow83); + double fSlow85 = ((fSlow27 * fSlow46) * fSlow15); + double fSlow86 = (fConst53 * fSlow85); + double fSlow87 = ((2.333333333333333 * (fSlow83 * fSlow11)) - (1.5 * fSlow82)); + double fSlow88 = ((2.25 * fSlow87) - (1.3333333333333333 * fSlow83)); + double fSlow89 = (0.66332495807108005 * fSlow88); + double fSlow90 = (fSlow36 * fSlow46); + double fSlow91 = (fConst54 * fSlow90); + double fSlow92 = mydsp_faustpower3_f(fSlow12); + double fSlow93 = ((fSlow45 * fSlow92) * fSlow15); + double fSlow94 = (fConst44 * fSlow93); + double fSlow95 = ((2.2000000000000002 * (fSlow88 * fSlow11)) - (1.25 * fSlow87)); + double fSlow96 = ((2.1666666666666665 * fSlow95) - (1.2000000000000002 * fSlow88)); + double fSlow97 = (0.55328333517248807 * fSlow96); + double fSlow98 = (fSlow36 * fSlow61); + double fSlow99 = (fConst55 * (fSlow98 * fSlow46)); + double fSlow100 = pow(fSlow12, 1.5); + double fSlow101 = (fConst56 * fSlow100); + double fSlow102 = (fSlow25 * fSlow15); + double fSlow103 = (fSlow34 * fSlow14); + double fSlow104 = (fSlow25 * fSlow10); + double fSlow105 = (fConst60 * (fSlow104 * fSlow15)); + double fSlow106 = (fSlow103 * fSlow10); + double fSlow107 = (fConst60 * fSlow106); + double fSlow108 = ((284.35155010806915 * fSlow11) + -31.594616678674353); + double fSlow109 = (fSlow25 * fSlow108); + double fSlow110 = (fConst62 * (fSlow109 * fSlow15)); + double fSlow111 = ((fSlow34 * fSlow108) * fSlow14); + double fSlow112 = (fConst62 * fSlow111); + double fSlow113 = ((5.5 * fSlow108) + -252.75693342939482); + double fSlow114 = ((fSlow25 * fSlow113) * fSlow10); + double fSlow115 = (fConst64 * (fSlow114 * fSlow15)); + double fSlow116 = (((fSlow34 * fSlow113) * fSlow14) * fSlow10); + double fSlow117 = (fConst64 * fSlow116); + double fSlow118 = ((4.333333333333333 * (fSlow113 * fSlow11)) - (4.5 * fSlow108)); + double fSlow119 = (fSlow25 * fSlow118); + double fSlow120 = (fConst66 * (fSlow119 * fSlow15)); + double fSlow121 = ((fSlow34 * fSlow118) * fSlow14); + double fSlow122 = (fConst66 * fSlow121); + double fSlow123 = (1.1180339887498949 * fSlow82); + double fSlow124 = (0.75 * fSlow87); + double fSlow125 = (0.60092521257733145 * fSlow95); + double fSlow126 = pow(fSlow12, 3.5); + double fSlow127 = (((((2.0 * fSlow45) + (4.0 * (fSlow43 * fSlow14))) * fSlow14) + -1.0) * fSlow126); + double fSlow128 = (fConst68 * fSlow127); + double fSlow129 = (((fSlow64 * fSlow14) * fSlow10) * fSlow12); + double fSlow130 = (fConst69 * fSlow129); + double fSlow131 = pow(fSlow12, 0.5); + double fSlow132 = (fConst70 * fSlow131); + double fSlow133 = (fConst74 * (fSlow10 * fSlow15)); + double fSlow134 = (fConst74 * fSlow21); + double fSlow135 = ((16.925687506432688 * fSlow11) + -3.3851375012865379); + double fSlow136 = (fConst76 * (fSlow135 * fSlow15)); + double fSlow137 = (fSlow135 * fSlow14); + double fSlow138 = (fConst76 * fSlow137); + double fSlow139 = ((3.5 * fSlow135) + -13.540550005146152); + double fSlow140 = (fSlow139 * fSlow10); + double fSlow141 = (fConst78 * (fSlow140 * fSlow15)); + double fSlow142 = ((fSlow139 * fSlow14) * fSlow10); + double fSlow143 = (fConst78 * fSlow142); + double fSlow144 = ((3.0 * (fSlow139 * fSlow11)) - (2.5 * fSlow135)); + double fSlow145 = (fConst80 * (fSlow144 * fSlow15)); + double fSlow146 = (fSlow144 * fSlow14); + double fSlow147 = (fConst80 * fSlow146); + double fSlow148 = ((2.75 * fSlow144) - (2.0 * fSlow139)); + double fSlow149 = (fSlow148 * fSlow10); + double fSlow150 = (fConst82 * (fSlow149 * fSlow15)); + double fSlow151 = ((fSlow148 * fSlow14) * fSlow10); + double fSlow152 = (fConst82 * fSlow151); + double fSlow153 = ((2.6000000000000001 * (fSlow148 * fSlow11)) - (1.75 * fSlow144)); + double fSlow154 = (fConst84 * (fSlow153 * fSlow15)); + double fSlow155 = (fSlow153 * fSlow14); + double fSlow156 = (fConst84 * fSlow155); + double fSlow157 = ((((2.0 * fSlow59) - fSlow58) * fSlow14) * fSlow126); + double fSlow158 = (fConst68 * fSlow157); + double fSlow159 = (fConst85 * (fSlow131 * fSlow15)); + double fSlow160 = (0.13783222385544802 * fSlow10); + double fSlow161 = (fConst85 * (fSlow14 * fSlow131)); + double fSlow162 = (fConst87 * ((fSlow14 * fSlow12) * fSlow15)); + double fSlow163 = (fConst88 * ((fSlow10 * fSlow131) * fSlow15)); + double fSlow164 = (0.088970317927147144 * fSlow82); + double fSlow165 = (fConst88 * (fSlow21 * fSlow131)); + double fSlow166 = (fConst89 * (fSlow19 * fSlow12)); + double fSlow167 = (fConst90 * ((fSlow25 * fSlow100) * fSlow15)); + double fSlow168 = (fConst92 * ((fSlow21 * fSlow12) * fSlow15)); + double fSlow169 = (fConst93 * ((fSlow135 * fSlow131) * fSlow15)); + double fSlow170 = (0.070180733224632072 * (fSlow83 * fSlow10)); + double fSlow171 = (fConst93 * (fSlow137 * fSlow131)); + double fSlow172 = (fConst94 * (fSlow23 * fSlow12)); + double fSlow173 = (fConst90 * (fSlow103 * fSlow100)); + double fSlow174 = (fConst95 * fSlow85); + double fSlow175 = (fConst96 * ((fSlow104 * fSlow100) * fSlow15)); + double fSlow176 = (fConst97 * ((fSlow30 * fSlow12) * fSlow15)); + double fSlow177 = (fConst98 * ((fSlow140 * fSlow131) * fSlow15)); + double fSlow178 = (0.059683103659460751 * fSlow87); + double fSlow179 = (fConst98 * (fSlow142 * fSlow131)); + double fSlow180 = (fConst99 * (fSlow32 * fSlow12)); + double fSlow181 = (fConst96 * (fSlow106 * fSlow100)); + double fSlow182 = (fConst100 * fSlow90); + double fSlow183 = (fConst101 * ((fSlow44 * fSlow69) * fSlow15)); + double fSlow184 = (fConst102 * (((fSlow27 * fSlow10) * fSlow46) * fSlow15)); + double fSlow185 = (fConst103 * ((fSlow109 * fSlow100) * fSlow15)); + double fSlow186 = (fConst104 * ((fSlow39 * fSlow12) * fSlow15)); + double fSlow187 = (fConst105 * ((fSlow144 * fSlow131) * fSlow15)); + double fSlow188 = (0.052785722976618307 * (fSlow88 * fSlow10)); + double fSlow189 = (fConst105 * (fSlow146 * fSlow131)); + double fSlow190 = (fConst106 * (fSlow41 * fSlow12)); + double fSlow191 = (fConst103 * (fSlow111 * fSlow100)); + double fSlow192 = (fConst107 * ((fSlow36 * fSlow10) * fSlow46)); + double fSlow193 = (fConst101 * (fSlow72 * fSlow69)); + double fSlow194 = (fConst108 * fSlow93); + double fSlow195 = (fConst109 * ((fSlow73 * fSlow69) * fSlow15)); + double fSlow196 = (fConst110 * ((fSlow49 * fSlow46) * fSlow15)); + double fSlow197 = (fConst111 * ((fSlow114 * fSlow100) * fSlow15)); + double fSlow198 = (fConst112 * ((fSlow52 * fSlow12) * fSlow15)); + double fSlow199 = (fConst113 * ((fSlow149 * fSlow131) * fSlow15)); + double fSlow200 = (0.047820109005115151 * fSlow95); + double fSlow201 = (fConst113 * (fSlow151 * fSlow131)); + double fSlow202 = (fConst114 * (fSlow54 * fSlow12)); + double fSlow203 = (fConst111 * (fSlow116 * fSlow100)); + double fSlow204 = (fConst115 * (fSlow56 * fSlow46)); + double fSlow205 = (fConst109 * (fSlow75 * fSlow69)); + double fSlow206 = (fConst108 * (fSlow59 * fSlow92)); + double fSlow207 = (fConst116 * (fSlow127 * fSlow15)); + double fSlow208 = (fConst117 * (((fSlow45 * fSlow10) * fSlow92) * fSlow15)); + double fSlow209 = (fConst118 * ((fSlow78 * fSlow69) * fSlow15)); + double fSlow210 = (fConst119 * ((fSlow62 * fSlow46) * fSlow15)); + double fSlow211 = (fConst120 * ((fSlow119 * fSlow100) * fSlow15)); + double fSlow212 = (fConst121 * (fSlow129 * fSlow15)); + double fSlow213 = (fConst122 * ((fSlow153 * fSlow131) * fSlow15)); + double fSlow214 = (0.044028888861535699 * (fSlow96 * fSlow10)); + double fSlow215 = (fConst122 * (fSlow155 * fSlow131)); + double fSlow216 = (fConst123 * (fSlow65 * fSlow12)); + double fSlow217 = (fConst120 * (fSlow121 * fSlow100)); + double fSlow218 = (fConst124 * ((fSlow98 * fSlow10) * fSlow46)); + double fSlow219 = (fConst118 * (fSlow80 * fSlow69)); + double fSlow220 = (fConst117 * (fSlow67 * fSlow92)); + double fSlow221 = (fConst116 * fSlow157); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow17 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input4[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input8[i]); double fTemp5 = double(input10[i]); @@ -1966,91 +1978,91 @@ class mydsp : public dsp { double fTemp43 = double(input45[i]); double fTemp44 = double(input53[i]); double fTemp45 = double(input59[i]); - double fTemp46 = double(input1[i]); - double fTemp47 = double(input3[i]); - double fTemp48 = double(input5[i]); - double fTemp49 = double(input7[i]); - double fTemp50 = double(input11[i]); - double fTemp51 = double(input13[i]); - double fTemp52 = double(input19[i]); - double fTemp53 = double(input21[i]); - double fTemp54 = double(input29[i]); - double fTemp55 = double(input31[i]); - double fTemp56 = double(input41[i]); - double fTemp57 = double(input43[i]); - double fTemp58 = double(input55[i]); - double fTemp59 = double(input57[i]); - double fTemp60 = double(input6[i]); - double fTemp61 = double(input20[i]); - double fTemp62 = double(input42[i]); - double fTemp63 = double(input49[i]); - double fTemp64 = double(input54[i]); + double fTemp46 = double(input6[i]); + double fTemp47 = double(input20[i]); + double fTemp48 = double(input42[i]); + double fTemp49 = double(input49[i]); + double fTemp50 = double(input54[i]); + double fTemp51 = double(input1[i]); + double fTemp52 = double(input3[i]); + double fTemp53 = double(input5[i]); + double fTemp54 = double(input7[i]); + double fTemp55 = double(input11[i]); + double fTemp56 = double(input13[i]); + double fTemp57 = double(input19[i]); + double fTemp58 = double(input21[i]); + double fTemp59 = double(input29[i]); + double fTemp60 = double(input31[i]); + double fTemp61 = double(input41[i]); + double fTemp62 = double(input43[i]); + double fTemp63 = double(input55[i]); + double fTemp64 = double(input57[i]); double fTemp65 = double(input63[i]); - double fTemp66 = (((fSlow9 * ((((((((((((((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow28 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow44 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow47 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow50 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow52 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow54 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow57 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow60 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow63 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow65 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21)))))) + ((fSlow67 * (((((fConst47 * ((fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))) + (fSlow69 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23)))))) + (fSlow71 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow73 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow76 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow78 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27)))))) + ((fSlow7 * ((((((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28)))) + (fSlow81 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow83 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))) + (fSlow86 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31))))) + (fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow91 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow94 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow96 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35)))))) + ((fSlow98 * (((((((((fConst58 * ((fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36)))) + (fSlow100 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37)))))) + (fSlow102 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38))))) + (fSlow104 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39))))) + (fSlow107 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40))))) + (fSlow109 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow112 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42))))) + (fSlow114 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow117 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow119 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45)))))) + ((fSlow121 * (((((((((((((fConst69 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47)))))) + (fSlow122 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48))))) + (fSlow123 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49))))) + (fSlow125 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50))))) + (fSlow127 * (iSlow1?(fSlow3 * (fTemp3 * fTemp51)):(fSlow3 * (fTemp1 * fTemp51))))) + (fSlow130 * (iSlow1?(fSlow3 * (fTemp3 * fTemp52)):(fSlow3 * (fTemp1 * fTemp52))))) + (fSlow132 * (iSlow1?(fSlow3 * (fTemp3 * fTemp53)):(fSlow3 * (fTemp1 * fTemp53))))) + (fSlow134 * (iSlow1?(fSlow3 * (fTemp3 * fTemp54)):(fSlow3 * (fTemp1 * fTemp54))))) + (fSlow136 * (iSlow1?(fSlow3 * (fTemp3 * fTemp55)):(fSlow3 * (fTemp1 * fTemp55))))) + (fSlow139 * (iSlow1?(fSlow3 * (fTemp3 * fTemp56)):(fSlow3 * (fTemp1 * fTemp56))))) + (fSlow141 * (iSlow1?(fSlow3 * (fTemp3 * fTemp57)):(fSlow3 * (fTemp1 * fTemp57))))) + (fSlow143 * (iSlow1?(fSlow3 * (fTemp3 * fTemp58)):(fSlow3 * (fTemp1 * fTemp58))))) + (fSlow145 * (iSlow1?(fSlow3 * (fTemp3 * fTemp59)):(fSlow3 * (fTemp1 * fTemp59)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow146 * (iSlow1?(fSlow3 * (fTemp3 * fTemp60)):(fSlow3 * (fTemp1 * fTemp60))))) + (fSlow147 * (iSlow1?(fSlow3 * (fTemp3 * fTemp61)):(fSlow3 * (fTemp1 * fTemp61))))) + (fSlow148 * (iSlow1?(fSlow3 * (fTemp3 * fTemp62)):(fSlow3 * (fTemp1 * fTemp62))))) + (fSlow12 * ((fSlow151 * (iSlow1?(fSlow3 * (fTemp3 * fTemp63)):(fSlow3 * (fTemp1 * fTemp63)))) + (fSlow153 * (iSlow1?(fSlow3 * (fTemp3 * fTemp64)):(fSlow3 * (fTemp1 * fTemp64)))))))))))) + (fSlow155 * (iSlow1?(fSlow3 * (fTemp3 * fTemp65)):(fSlow3 * (fTemp1 * fTemp65))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp66))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow156 * fTemp66))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow157 * fTemp66))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow158 * fTemp66))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow159 * fTemp66))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow160 * fTemp66))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp60)):(fSlow3 * (fRec0[0] * fTemp60))) + (fSlow161 * fTemp66))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow162 * fTemp66))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow163 * fTemp66))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow164 * fTemp66))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow165 * fTemp66))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow166 * fTemp66))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow167 * fTemp66))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp51)):(fSlow3 * (fRec0[0] * fTemp51))) + (fSlow168 * fTemp66))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow169 * fTemp66))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow170 * fTemp66))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow171 * fTemp66))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow172 * fTemp66))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow173 * fTemp66))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp52)):(fSlow3 * (fRec0[0] * fTemp52))) + (fSlow174 * fTemp66))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp61)):(fSlow3 * (fRec0[0] * fTemp61))) + (fSlow175 * fTemp66))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp53)):(fSlow3 * (fRec0[0] * fTemp53))) + (fSlow176 * fTemp66))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow177 * fTemp66))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow178 * fTemp66))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow179 * fTemp66))); - output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow180 * fTemp66))); - output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow181 * fTemp66))); - output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow182 * fTemp66))); - output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow183 * fTemp66))); - output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp54)):(fSlow3 * (fRec0[0] * fTemp54))) + (fSlow184 * fTemp66))); - output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow185 * fTemp66))); - output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp55)):(fSlow3 * (fRec0[0] * fTemp55))) + (fSlow186 * fTemp66))); - output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow187 * fTemp66))); - output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow188 * fTemp66))); - output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow189 * fTemp66))); - output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow190 * fTemp66))); - output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow191 * fTemp66))); - output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow192 * fTemp66))); - output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow193 * fTemp66))); - output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow194 * fTemp66))); - output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow195 * fTemp66))); - output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp56)):(fSlow3 * (fRec0[0] * fTemp56))) + (fSlow196 * fTemp66))); - output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp62)):(fSlow3 * (fRec0[0] * fTemp62))) + (fSlow197 * fTemp66))); - output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp57)):(fSlow3 * (fRec0[0] * fTemp57))) + (fSlow198 * fTemp66))); - output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow199 * fTemp66))); - output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow200 * fTemp66))); - output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow201 * fTemp66))); - output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow202 * fTemp66))); - output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow203 * fTemp66))); - output49[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp63)):(fSlow3 * (fRec0[0] * fTemp63))) + (fSlow204 * fTemp66))); - output50[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow205 * fTemp66))); - output51[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow206 * fTemp66))); - output52[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow207 * fTemp66))); - output53[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow208 * fTemp66))); - output54[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp64)):(fSlow3 * (fRec0[0] * fTemp64))) + (fSlow209 * fTemp66))); - output55[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp58)):(fSlow3 * (fRec0[0] * fTemp58))) + (fSlow210 * fTemp66))); - output56[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow211 * fTemp66))); - output57[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp59)):(fSlow3 * (fRec0[0] * fTemp59))) + (fSlow212 * fTemp66))); - output58[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow213 * fTemp66))); - output59[i] = FAUSTFLOAT(((fSlow214 * fTemp66) + (iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))))); - output60[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow215 * fTemp66))); - output61[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow216 * fTemp66))); - output62[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow217 * fTemp66))); - output63[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp65)):(fSlow3 * (fRec0[0] * fTemp65))) + (fSlow218 * fTemp66))); + double fTemp66 = (((fSlow12 * ((((((((((((((((fConst2 * (((fConst5 * ((fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow20 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + (fSlow22 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5)))))) + (fSlow24 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6))))))) + (fSlow28 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow31 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8)))))) + (fSlow33 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9)))))) + (fSlow37 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10)))))) + (fSlow40 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp11)):(iSlow2?(fSlow4 * (fTemp3 * fTemp11)):(fSlow4 * (fTemp1 * fTemp11)))))) + (fSlow42 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp12)):(iSlow2?(fSlow4 * (fTemp3 * fTemp12)):(fSlow4 * (fTemp1 * fTemp12)))))) + (fSlow47 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp13)):(iSlow2?(fSlow4 * (fTemp3 * fTemp13)):(fSlow4 * (fTemp1 * fTemp13)))))) + (fSlow50 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp14)):(iSlow2?(fSlow4 * (fTemp3 * fTemp14)):(fSlow4 * (fTemp1 * fTemp14)))))) + (fSlow53 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp15)):(iSlow2?(fSlow4 * (fTemp3 * fTemp15)):(fSlow4 * (fTemp1 * fTemp15)))))) + (fSlow55 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp16)):(iSlow2?(fSlow4 * (fTemp3 * fTemp16)):(fSlow4 * (fTemp1 * fTemp16)))))) + (fSlow57 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp17)):(iSlow2?(fSlow4 * (fTemp3 * fTemp17)):(fSlow4 * (fTemp1 * fTemp17)))))) + (fSlow60 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp18)):(iSlow2?(fSlow4 * (fTemp3 * fTemp18)):(fSlow4 * (fTemp1 * fTemp18)))))) + (fSlow63 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp19)):(iSlow2?(fSlow4 * (fTemp3 * fTemp19)):(fSlow4 * (fTemp1 * fTemp19)))))) + (fSlow66 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp20)):(iSlow2?(fSlow4 * (fTemp3 * fTemp20)):(fSlow4 * (fTemp1 * fTemp20)))))) + (fSlow68 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp21)):(iSlow2?(fSlow4 * (fTemp3 * fTemp21)):(fSlow4 * (fTemp1 * fTemp21))))))) + ((fSlow70 * (((((fConst47 * ((fSlow71 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp22)):(iSlow2?(fSlow4 * (fTemp3 * fTemp22)):(fSlow4 * (fTemp1 * fTemp22))))) + (fSlow72 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp23)):(iSlow2?(fSlow4 * (fTemp3 * fTemp23)):(fSlow4 * (fTemp1 * fTemp23))))))) + (fSlow74 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp24)):(iSlow2?(fSlow4 * (fTemp3 * fTemp24)):(fSlow4 * (fTemp1 * fTemp24)))))) + (fSlow76 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp25)):(iSlow2?(fSlow4 * (fTemp3 * fTemp25)):(fSlow4 * (fTemp1 * fTemp25)))))) + (fSlow79 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp26)):(iSlow2?(fSlow4 * (fTemp3 * fTemp26)):(fSlow4 * (fTemp1 * fTemp26)))))) + (fSlow81 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp27)):(iSlow2?(fSlow4 * (fTemp3 * fTemp27)):(fSlow4 * (fTemp1 * fTemp27))))))) + ((fSlow10 * ((((((((1.7320508075688772 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp28)):(iSlow2?(fSlow4 * (fTemp3 * fTemp28)):(fSlow4 * (fTemp1 * fTemp28))))) + (fSlow84 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp29)):(iSlow2?(fSlow4 * (fTemp3 * fTemp29)):(fSlow4 * (fTemp1 * fTemp29)))))) + (fSlow86 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp30)):(iSlow2?(fSlow4 * (fTemp3 * fTemp30)):(fSlow4 * (fTemp1 * fTemp30)))))) + (fSlow89 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp31)):(iSlow2?(fSlow4 * (fTemp3 * fTemp31)):(fSlow4 * (fTemp1 * fTemp31)))))) + (fSlow91 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp32)):(iSlow2?(fSlow4 * (fTemp3 * fTemp32)):(fSlow4 * (fTemp1 * fTemp32)))))) + (fSlow94 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp33)):(iSlow2?(fSlow4 * (fTemp3 * fTemp33)):(fSlow4 * (fTemp1 * fTemp33)))))) + (fSlow97 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp34)):(iSlow2?(fSlow4 * (fTemp3 * fTemp34)):(fSlow4 * (fTemp1 * fTemp34)))))) + (fSlow99 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp35)):(iSlow2?(fSlow4 * (fTemp3 * fTemp35)):(fSlow4 * (fTemp1 * fTemp35))))))) + ((fSlow101 * (((((((((fConst58 * ((fSlow102 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp36)):(iSlow2?(fSlow4 * (fTemp3 * fTemp36)):(fSlow4 * (fTemp1 * fTemp36))))) + (fSlow103 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp37)):(iSlow2?(fSlow4 * (fTemp3 * fTemp37)):(fSlow4 * (fTemp1 * fTemp37))))))) + (fSlow105 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp38)):(iSlow2?(fSlow4 * (fTemp3 * fTemp38)):(fSlow4 * (fTemp1 * fTemp38)))))) + (fSlow107 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp39)):(iSlow2?(fSlow4 * (fTemp3 * fTemp39)):(fSlow4 * (fTemp1 * fTemp39)))))) + (fSlow110 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp40)):(iSlow2?(fSlow4 * (fTemp3 * fTemp40)):(fSlow4 * (fTemp1 * fTemp40)))))) + (fSlow112 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp41)):(iSlow2?(fSlow4 * (fTemp3 * fTemp41)):(fSlow4 * (fTemp1 * fTemp41)))))) + (fSlow115 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp42)):(iSlow2?(fSlow4 * (fTemp3 * fTemp42)):(fSlow4 * (fTemp1 * fTemp42)))))) + (fSlow117 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp43)):(iSlow2?(fSlow4 * (fTemp3 * fTemp43)):(fSlow4 * (fTemp1 * fTemp43)))))) + (fSlow120 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp44)):(iSlow2?(fSlow4 * (fTemp3 * fTemp44)):(fSlow4 * (fTemp1 * fTemp44)))))) + (fSlow122 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp45)):(iSlow2?(fSlow4 * (fTemp3 * fTemp45)):(fSlow4 * (fTemp1 * fTemp45))))))) + ((((((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow123 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp46)):(iSlow2?(fSlow4 * (fTemp3 * fTemp46)):(fSlow4 * (fTemp1 * fTemp46)))))) + (fSlow124 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp47)):(iSlow2?(fSlow4 * (fTemp3 * fTemp47)):(fSlow4 * (fTemp1 * fTemp47)))))) + (fSlow125 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp48)):(iSlow2?(fSlow4 * (fTemp3 * fTemp48)):(fSlow4 * (fTemp1 * fTemp48)))))) + (fSlow15 * ((fSlow128 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp49)):(iSlow2?(fSlow4 * (fTemp3 * fTemp49)):(fSlow4 * (fTemp1 * fTemp49))))) + (fSlow130 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp50)):(iSlow2?(fSlow4 * (fTemp3 * fTemp50)):(fSlow4 * (fTemp1 * fTemp50)))))))) + (fSlow132 * (((((((((((((fConst72 * ((fSlow15 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp51)):(iSlow2?(fSlow4 * (fTemp3 * fTemp51)):(fSlow4 * (fTemp1 * fTemp51))))) + (fSlow14 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp52)):(iSlow2?(fSlow4 * (fTemp3 * fTemp52)):(fSlow4 * (fTemp1 * fTemp52))))))) + (fSlow133 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp53)):(iSlow2?(fSlow4 * (fTemp3 * fTemp53)):(fSlow4 * (fTemp1 * fTemp53)))))) + (fSlow134 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp54)):(iSlow2?(fSlow4 * (fTemp3 * fTemp54)):(fSlow4 * (fTemp1 * fTemp54)))))) + (fSlow136 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp55)):(iSlow2?(fSlow4 * (fTemp3 * fTemp55)):(fSlow4 * (fTemp1 * fTemp55)))))) + (fSlow138 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp56)):(iSlow2?(fSlow4 * (fTemp3 * fTemp56)):(fSlow4 * (fTemp1 * fTemp56)))))) + (fSlow141 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp57)):(iSlow2?(fSlow4 * (fTemp3 * fTemp57)):(fSlow4 * (fTemp1 * fTemp57)))))) + (fSlow143 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp58)):(iSlow2?(fSlow4 * (fTemp3 * fTemp58)):(fSlow4 * (fTemp1 * fTemp58)))))) + (fSlow145 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp59)):(iSlow2?(fSlow4 * (fTemp3 * fTemp59)):(fSlow4 * (fTemp1 * fTemp59)))))) + (fSlow147 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp60)):(iSlow2?(fSlow4 * (fTemp3 * fTemp60)):(fSlow4 * (fTemp1 * fTemp60)))))) + (fSlow150 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp61)):(iSlow2?(fSlow4 * (fTemp3 * fTemp61)):(fSlow4 * (fTemp1 * fTemp61)))))) + (fSlow152 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp62)):(iSlow2?(fSlow4 * (fTemp3 * fTemp62)):(fSlow4 * (fTemp1 * fTemp62)))))) + (fSlow154 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp63)):(iSlow2?(fSlow4 * (fTemp3 * fTemp63)):(fSlow4 * (fTemp1 * fTemp63)))))) + (fSlow156 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp64)):(iSlow2?(fSlow4 * (fTemp3 * fTemp64)):(fSlow4 * (fTemp1 * fTemp64)))))))))))) + (fSlow158 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp65)):(iSlow2?(fSlow4 * (fTemp3 * fTemp65)):(fSlow4 * (fTemp1 * fTemp65)))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp66))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp51):(iSlow2?(fSlow4 * (fRec1[0] * fTemp51)):(fSlow4 * (fRec0[0] * fTemp51)))) + (fSlow159 * fTemp66))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp28):(iSlow2?(fSlow4 * (fRec1[0] * fTemp28)):(fSlow4 * (fRec0[0] * fTemp28)))) + (fSlow160 * fTemp66))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp52):(iSlow2?(fSlow4 * (fRec1[0] * fTemp52)):(fSlow4 * (fRec0[0] * fTemp52)))) + (fSlow161 * fTemp66))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow162 * fTemp66))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp53):(iSlow2?(fSlow4 * (fRec1[0] * fTemp53)):(fSlow4 * (fRec0[0] * fTemp53)))) + (fSlow163 * fTemp66))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp46):(iSlow2?(fSlow4 * (fRec1[0] * fTemp46)):(fSlow4 * (fRec0[0] * fTemp46)))) + (fSlow164 * fTemp66))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp54):(iSlow2?(fSlow4 * (fRec1[0] * fTemp54)):(fSlow4 * (fRec0[0] * fTemp54)))) + (fSlow165 * fTemp66))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow166 * fTemp66))); + output9[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp36):(iSlow2?(fSlow4 * (fRec1[0] * fTemp36)):(fSlow4 * (fRec0[0] * fTemp36)))) + (fSlow167 * fTemp66))); + output10[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow168 * fTemp66))); + output11[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp55):(iSlow2?(fSlow4 * (fRec1[0] * fTemp55)):(fSlow4 * (fRec0[0] * fTemp55)))) + (fSlow169 * fTemp66))); + output12[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp29):(iSlow2?(fSlow4 * (fRec1[0] * fTemp29)):(fSlow4 * (fRec0[0] * fTemp29)))) + (fSlow170 * fTemp66))); + output13[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp56):(iSlow2?(fSlow4 * (fRec1[0] * fTemp56)):(fSlow4 * (fRec0[0] * fTemp56)))) + (fSlow171 * fTemp66))); + output14[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow172 * fTemp66))); + output15[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp37):(iSlow2?(fSlow4 * (fRec1[0] * fTemp37)):(fSlow4 * (fRec0[0] * fTemp37)))) + (fSlow173 * fTemp66))); + output16[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow174 * fTemp66))); + output17[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp38):(iSlow2?(fSlow4 * (fRec1[0] * fTemp38)):(fSlow4 * (fRec0[0] * fTemp38)))) + (fSlow175 * fTemp66))); + output18[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow176 * fTemp66))); + output19[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp57):(iSlow2?(fSlow4 * (fRec1[0] * fTemp57)):(fSlow4 * (fRec0[0] * fTemp57)))) + (fSlow177 * fTemp66))); + output20[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp47):(iSlow2?(fSlow4 * (fRec1[0] * fTemp47)):(fSlow4 * (fRec0[0] * fTemp47)))) + (fSlow178 * fTemp66))); + output21[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp58):(iSlow2?(fSlow4 * (fRec1[0] * fTemp58)):(fSlow4 * (fRec0[0] * fTemp58)))) + (fSlow179 * fTemp66))); + output22[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow180 * fTemp66))); + output23[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp39):(iSlow2?(fSlow4 * (fRec1[0] * fTemp39)):(fSlow4 * (fRec0[0] * fTemp39)))) + (fSlow181 * fTemp66))); + output24[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow182 * fTemp66))); + output25[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp22):(iSlow2?(fSlow4 * (fRec1[0] * fTemp22)):(fSlow4 * (fRec0[0] * fTemp22)))) + (fSlow183 * fTemp66))); + output26[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp30):(iSlow2?(fSlow4 * (fRec1[0] * fTemp30)):(fSlow4 * (fRec0[0] * fTemp30)))) + (fSlow184 * fTemp66))); + output27[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp40):(iSlow2?(fSlow4 * (fRec1[0] * fTemp40)):(fSlow4 * (fRec0[0] * fTemp40)))) + (fSlow185 * fTemp66))); + output28[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp11):(iSlow2?(fSlow4 * (fRec1[0] * fTemp11)):(fSlow4 * (fRec0[0] * fTemp11)))) + (fSlow186 * fTemp66))); + output29[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp59):(iSlow2?(fSlow4 * (fRec1[0] * fTemp59)):(fSlow4 * (fRec0[0] * fTemp59)))) + (fSlow187 * fTemp66))); + output30[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp31):(iSlow2?(fSlow4 * (fRec1[0] * fTemp31)):(fSlow4 * (fRec0[0] * fTemp31)))) + (fSlow188 * fTemp66))); + output31[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp60):(iSlow2?(fSlow4 * (fRec1[0] * fTemp60)):(fSlow4 * (fRec0[0] * fTemp60)))) + (fSlow189 * fTemp66))); + output32[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp12):(iSlow2?(fSlow4 * (fRec1[0] * fTemp12)):(fSlow4 * (fRec0[0] * fTemp12)))) + (fSlow190 * fTemp66))); + output33[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp41):(iSlow2?(fSlow4 * (fRec1[0] * fTemp41)):(fSlow4 * (fRec0[0] * fTemp41)))) + (fSlow191 * fTemp66))); + output34[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp32):(iSlow2?(fSlow4 * (fRec1[0] * fTemp32)):(fSlow4 * (fRec0[0] * fTemp32)))) + (fSlow192 * fTemp66))); + output35[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp23):(iSlow2?(fSlow4 * (fRec1[0] * fTemp23)):(fSlow4 * (fRec0[0] * fTemp23)))) + (fSlow193 * fTemp66))); + output36[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp13):(iSlow2?(fSlow4 * (fRec1[0] * fTemp13)):(fSlow4 * (fRec0[0] * fTemp13)))) + (fSlow194 * fTemp66))); + output37[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp24):(iSlow2?(fSlow4 * (fRec1[0] * fTemp24)):(fSlow4 * (fRec0[0] * fTemp24)))) + (fSlow195 * fTemp66))); + output38[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp14):(iSlow2?(fSlow4 * (fRec1[0] * fTemp14)):(fSlow4 * (fRec0[0] * fTemp14)))) + (fSlow196 * fTemp66))); + output39[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp42):(iSlow2?(fSlow4 * (fRec1[0] * fTemp42)):(fSlow4 * (fRec0[0] * fTemp42)))) + (fSlow197 * fTemp66))); + output40[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp15):(iSlow2?(fSlow4 * (fRec1[0] * fTemp15)):(fSlow4 * (fRec0[0] * fTemp15)))) + (fSlow198 * fTemp66))); + output41[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp61):(iSlow2?(fSlow4 * (fRec1[0] * fTemp61)):(fSlow4 * (fRec0[0] * fTemp61)))) + (fSlow199 * fTemp66))); + output42[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp48):(iSlow2?(fSlow4 * (fRec1[0] * fTemp48)):(fSlow4 * (fRec0[0] * fTemp48)))) + (fSlow200 * fTemp66))); + output43[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp62):(iSlow2?(fSlow4 * (fRec1[0] * fTemp62)):(fSlow4 * (fRec0[0] * fTemp62)))) + (fSlow201 * fTemp66))); + output44[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp16):(iSlow2?(fSlow4 * (fRec1[0] * fTemp16)):(fSlow4 * (fRec0[0] * fTemp16)))) + (fSlow202 * fTemp66))); + output45[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp43):(iSlow2?(fSlow4 * (fRec1[0] * fTemp43)):(fSlow4 * (fRec0[0] * fTemp43)))) + (fSlow203 * fTemp66))); + output46[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp17):(iSlow2?(fSlow4 * (fRec1[0] * fTemp17)):(fSlow4 * (fRec0[0] * fTemp17)))) + (fSlow204 * fTemp66))); + output47[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp25):(iSlow2?(fSlow4 * (fRec1[0] * fTemp25)):(fSlow4 * (fRec0[0] * fTemp25)))) + (fSlow205 * fTemp66))); + output48[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp18):(iSlow2?(fSlow4 * (fRec1[0] * fTemp18)):(fSlow4 * (fRec0[0] * fTemp18)))) + (fSlow206 * fTemp66))); + output49[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp49):(iSlow2?(fSlow4 * (fRec1[0] * fTemp49)):(fSlow4 * (fRec0[0] * fTemp49)))) + (fSlow207 * fTemp66))); + output50[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp33):(iSlow2?(fSlow4 * (fRec1[0] * fTemp33)):(fSlow4 * (fRec0[0] * fTemp33)))) + (fSlow208 * fTemp66))); + output51[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp26):(iSlow2?(fSlow4 * (fRec1[0] * fTemp26)):(fSlow4 * (fRec0[0] * fTemp26)))) + (fSlow209 * fTemp66))); + output52[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp19):(iSlow2?(fSlow4 * (fRec1[0] * fTemp19)):(fSlow4 * (fRec0[0] * fTemp19)))) + (fSlow210 * fTemp66))); + output53[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp44):(iSlow2?(fSlow4 * (fRec1[0] * fTemp44)):(fSlow4 * (fRec0[0] * fTemp44)))) + (fSlow211 * fTemp66))); + output54[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp50):(iSlow2?(fSlow4 * (fRec1[0] * fTemp50)):(fSlow4 * (fRec0[0] * fTemp50)))) + (fSlow212 * fTemp66))); + output55[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp63):(iSlow2?(fSlow4 * (fRec1[0] * fTemp63)):(fSlow4 * (fRec0[0] * fTemp63)))) + (fSlow213 * fTemp66))); + output56[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp34):(iSlow2?(fSlow4 * (fRec1[0] * fTemp34)):(fSlow4 * (fRec0[0] * fTemp34)))) + (fSlow214 * fTemp66))); + output57[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp64):(iSlow2?(fSlow4 * (fRec1[0] * fTemp64)):(fSlow4 * (fRec0[0] * fTemp64)))) + (fSlow215 * fTemp66))); + output58[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp20):(iSlow2?(fSlow4 * (fRec1[0] * fTemp20)):(fSlow4 * (fRec0[0] * fTemp20)))) + (fSlow216 * fTemp66))); + output59[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp45):(iSlow2?(fSlow4 * (fRec1[0] * fTemp45)):(fSlow4 * (fRec0[0] * fTemp45)))) + (fSlow217 * fTemp66))); + output60[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp35):(iSlow2?(fSlow4 * (fRec1[0] * fTemp35)):(fSlow4 * (fRec0[0] * fTemp35)))) + (fSlow218 * fTemp66))); + output61[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp27):(iSlow2?(fSlow4 * (fRec1[0] * fTemp27)):(fSlow4 * (fRec0[0] * fTemp27)))) + (fSlow219 * fTemp66))); + output62[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp21):(iSlow2?(fSlow4 * (fRec1[0] * fTemp21)):(fSlow4 * (fRec0[0] * fTemp21)))) + (fSlow220 * fTemp66))); + output63[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp65):(iSlow2?(fSlow4 * (fRec1[0] * fTemp65)):(fSlow4 * (fRec0[0] * fTemp65)))) + (fSlow221 * fTemp66))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2HOA8.cpp b/source/HOAUGens/HOABeamDirac2HOA8.cpp index 38a70d8e0a..bf3ec0e628 100644 --- a/source/HOAUGens/HOABeamDirac2HOA8.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA8.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA8" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -645,6 +645,7 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; @@ -652,12 +653,13 @@ class mydsp : public dsp { double fRec0[2]; double fRec1[2]; FAUSTFLOAT fVslider0; + FAUSTFLOAT fVslider1; double fConst2; double fConst3; double fConst4; double fConst5; - FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -823,6 +825,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA8"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -1707,10 +1710,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -1760,18 +1765,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->declare(&fVslider2, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider1, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider3, "4", ""); + ui_interface->declare(&fVslider3, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider3, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -1939,297 +1948,300 @@ class mydsp : public dsp { FAUSTFLOAT* output78 = outputs[78]; FAUSTFLOAT* output79 = outputs[79]; FAUSTFLOAT* output80 = outputs[80]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = mydsp_faustpower2_f(fSlow7); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); double fSlow9 = (1.0 - fSlow8); - double fSlow10 = double(fVslider1); - double fSlow11 = cos(fSlow10); - double fSlow12 = sin(fSlow10); - double fSlow13 = (6.3830764864229232 * (fSlow11 * fSlow12)); - double fSlow14 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); - double fSlow15 = mydsp_faustpower2_f(fSlow11); - double fSlow16 = ((2.0 * fSlow15) + -1.0); - double fSlow17 = (3.1915382432114616 * fSlow16); - double fSlow18 = (fSlow11 * fSlow7); - double fSlow19 = (fConst9 * (fSlow18 * fSlow12)); - double fSlow20 = (fSlow16 * fSlow7); - double fSlow21 = (fConst10 * fSlow20); - double fSlow22 = ((4.0 * fSlow15) + -1.0); - double fSlow23 = (fSlow22 + -1.0); - double fSlow24 = (fSlow23 * fSlow11); - double fSlow25 = (fConst14 * ((fSlow24 * fSlow9) * fSlow12)); - double fSlow26 = ((78.986541696685876 * fSlow8) + -11.283791670955125); - double fSlow27 = (fSlow26 * fSlow11); - double fSlow28 = (fConst18 * (fSlow27 * fSlow12)); - double fSlow29 = (fSlow16 * fSlow26); - double fSlow30 = (fConst19 * fSlow29); - double fSlow31 = ((2.0 * fSlow16) + -1.0); - double fSlow32 = (1.0 - fSlow31); - double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow15))); - double fSlow34 = (fConst20 * (fSlow33 * fSlow9)); - double fSlow35 = ((4.5 * fSlow26) + -67.702750025730751); - double fSlow36 = ((fSlow35 * fSlow11) * fSlow7); - double fSlow37 = (fConst24 * (fSlow36 * fSlow12)); - double fSlow38 = ((fSlow16 * fSlow35) * fSlow7); - double fSlow39 = (fConst25 * fSlow38); - double fSlow40 = (1.0 - fSlow23); - double fSlow41 = (1.0 - (4.0 * (fSlow40 * fSlow15))); - double fSlow42 = (fSlow23 - fSlow41); - double fSlow43 = (0.0 - (2.0 * (fSlow42 * fSlow11))); - double fSlow44 = mydsp_faustpower2_f(fSlow9); - double fSlow45 = (fConst29 * ((fSlow43 * fSlow44) * fSlow12)); - double fSlow46 = ((893.67630033964599 * fSlow8) + -81.24330003087691); - double fSlow47 = ((fSlow23 * fSlow46) * fSlow11); - double fSlow48 = (fConst32 * ((fSlow47 * fSlow9) * fSlow12)); - double fSlow49 = ((3.6666666666666665 * (fSlow35 * fSlow8)) - (3.5 * fSlow26)); - double fSlow50 = (fSlow49 * fSlow11); - double fSlow51 = (fConst34 * (fSlow50 * fSlow12)); - double fSlow52 = (fSlow16 * fSlow49); - double fSlow53 = (fConst35 * fSlow52); - double fSlow54 = (fSlow33 * fSlow46); - double fSlow55 = (fConst36 * (fSlow54 * fSlow9)); - double fSlow56 = ((2.0 * fSlow33) - fSlow31); - double fSlow57 = (fSlow32 + fSlow56); - double fSlow58 = ((2.0 * (fSlow57 * fSlow15)) + -1.0); - double fSlow59 = (fConst29 * (fSlow58 * fSlow44)); - double fSlow60 = ((6.5 * fSlow46) + -812.43300030876912); - double fSlow61 = (((fSlow23 * fSlow60) * fSlow11) * fSlow7); - double fSlow62 = (fConst39 * ((fSlow61 * fSlow9) * fSlow12)); - double fSlow63 = ((3.25 * fSlow49) - (2.6666666666666665 * fSlow35)); - double fSlow64 = ((fSlow16 * fSlow63) * fSlow7); - double fSlow65 = (fConst42 * fSlow64); - double fSlow66 = (fSlow58 * fSlow7); - double fSlow67 = (fConst45 * (fSlow66 * fSlow44)); - double fSlow68 = ((7041.0860026759983 * fSlow8) + -469.40573351173322); - double fSlow69 = (fSlow43 * fSlow68); - double fSlow70 = (fConst48 * ((fSlow69 * fSlow44) * fSlow12)); - double fSlow71 = ((3.0 * (fSlow63 * fSlow8)) - (2.25 * fSlow49)); - double fSlow72 = (fSlow71 * fSlow11); - double fSlow73 = (fConst50 * (fSlow72 * fSlow12)); - double fSlow74 = (fSlow16 * fSlow71); - double fSlow75 = (fConst51 * fSlow74); - double fSlow76 = ((5.0 * (fSlow60 * fSlow8)) - (5.5 * fSlow46)); - double fSlow77 = (fSlow33 * fSlow76); - double fSlow78 = (fConst53 * (fSlow77 * fSlow9)); - double fSlow79 = (fSlow58 * fSlow68); - double fSlow80 = (fConst48 * (fSlow79 * fSlow44)); - double fSlow81 = ((2.0 * fSlow58) - fSlow56); - double fSlow82 = (1.0 - (2.0 * ((fSlow57 - fSlow81) * fSlow15))); - double fSlow83 = mydsp_faustpower3_f(fSlow9); - double fSlow84 = (fConst55 * (fSlow82 * fSlow83)); - double fSlow85 = pow(fSlow9, 3.5); - double fSlow86 = (fConst56 * fSlow85); - double fSlow87 = (fSlow81 * fSlow11); - double fSlow88 = (fConst58 * fSlow87); - double fSlow89 = ((((2.0 * fSlow43) + (4.0 * (fSlow40 * fSlow11))) * fSlow11) + -1.0); - double fSlow90 = (fSlow89 * fSlow7); - double fSlow91 = (fConst60 * (fSlow90 * fSlow12)); - double fSlow92 = (fSlow87 * fSlow7); - double fSlow93 = (fConst60 * fSlow92); - double fSlow94 = pow(fSlow9, 2.5); - double fSlow95 = (fConst61 * fSlow94); - double fSlow96 = (fSlow41 * fSlow12); - double fSlow97 = (fSlow56 * fSlow11); - double fSlow98 = (fSlow41 * fSlow7); - double fSlow99 = (fConst65 * (fSlow98 * fSlow12)); - double fSlow100 = (fSlow97 * fSlow7); - double fSlow101 = (fConst65 * fSlow100); - double fSlow102 = ((2581.7315343145328 * fSlow8) + -198.59473340881021); - double fSlow103 = (fSlow41 * fSlow102); - double fSlow104 = (fConst67 * (fSlow103 * fSlow12)); - double fSlow105 = ((fSlow56 * fSlow102) * fSlow11); - double fSlow106 = (fConst67 * fSlow105); - double fSlow107 = ((7.5 * fSlow102) + -2383.1368009057223); - double fSlow108 = ((fSlow41 * fSlow107) * fSlow7); - double fSlow109 = (fConst69 * (fSlow108 * fSlow12)); - double fSlow110 = (((fSlow56 * fSlow107) * fSlow11) * fSlow7); - double fSlow111 = (fConst69 * fSlow110); - double fSlow112 = pow(fSlow9, 1.5); - double fSlow113 = (fConst70 * fSlow112); - double fSlow114 = (fSlow22 * fSlow12); - double fSlow115 = (fSlow31 * fSlow11); - double fSlow116 = (fSlow22 * fSlow7); - double fSlow117 = (fConst74 * (fSlow116 * fSlow12)); - double fSlow118 = (fSlow115 * fSlow7); - double fSlow119 = (fConst74 * fSlow118); - double fSlow120 = ((284.35155010806915 * fSlow8) + -31.594616678674353); - double fSlow121 = (fSlow22 * fSlow120); - double fSlow122 = (fConst76 * (fSlow121 * fSlow12)); - double fSlow123 = ((fSlow31 * fSlow120) * fSlow11); - double fSlow124 = (fConst76 * fSlow123); - double fSlow125 = ((5.5 * fSlow120) + -252.75693342939482); - double fSlow126 = ((fSlow22 * fSlow125) * fSlow7); - double fSlow127 = (fConst78 * (fSlow126 * fSlow12)); - double fSlow128 = (((fSlow31 * fSlow125) * fSlow11) * fSlow7); - double fSlow129 = (fConst78 * fSlow128); - double fSlow130 = ((4.333333333333333 * (fSlow125 * fSlow8)) - (4.5 * fSlow120)); - double fSlow131 = (fSlow22 * fSlow130); - double fSlow132 = (fConst80 * (fSlow131 * fSlow12)); - double fSlow133 = ((fSlow31 * fSlow130) * fSlow11); - double fSlow134 = (fConst80 * fSlow133); - double fSlow135 = ((3.75 * fSlow130) - (3.333333333333333 * fSlow125)); - double fSlow136 = ((fSlow22 * fSlow135) * fSlow7); - double fSlow137 = (fConst82 * (fSlow136 * fSlow12)); - double fSlow138 = (((fSlow31 * fSlow135) * fSlow11) * fSlow7); - double fSlow139 = (fConst82 * fSlow138); - double fSlow140 = pow(fSlow9, 0.5); - double fSlow141 = (fConst83 * fSlow140); - double fSlow142 = (fConst87 * (fSlow7 * fSlow12)); - double fSlow143 = (fConst87 * fSlow18); - double fSlow144 = ((16.925687506432688 * fSlow8) + -3.3851375012865379); - double fSlow145 = (fConst89 * (fSlow144 * fSlow12)); - double fSlow146 = (fSlow144 * fSlow11); - double fSlow147 = (fConst89 * fSlow146); - double fSlow148 = ((3.5 * fSlow144) + -13.540550005146152); - double fSlow149 = (fSlow148 * fSlow7); - double fSlow150 = (fConst91 * (fSlow149 * fSlow12)); - double fSlow151 = ((fSlow148 * fSlow11) * fSlow7); - double fSlow152 = (fConst91 * fSlow151); - double fSlow153 = ((3.0 * (fSlow148 * fSlow8)) - (2.5 * fSlow144)); - double fSlow154 = (fConst93 * (fSlow153 * fSlow12)); - double fSlow155 = (fSlow153 * fSlow11); - double fSlow156 = (fConst93 * fSlow155); - double fSlow157 = ((2.75 * fSlow153) - (2.0 * fSlow148)); - double fSlow158 = (fSlow157 * fSlow7); - double fSlow159 = (fConst95 * (fSlow158 * fSlow12)); - double fSlow160 = ((fSlow157 * fSlow11) * fSlow7); - double fSlow161 = (fConst95 * fSlow160); - double fSlow162 = ((2.6000000000000001 * (fSlow157 * fSlow8)) - (1.75 * fSlow153)); - double fSlow163 = (fConst97 * (fSlow162 * fSlow12)); - double fSlow164 = (fSlow162 * fSlow11); - double fSlow165 = (fConst97 * fSlow164); - double fSlow166 = ((2.5 * fSlow162) - (1.6000000000000001 * fSlow157)); - double fSlow167 = (fSlow166 * fSlow7); - double fSlow168 = (fConst99 * (fSlow167 * fSlow12)); - double fSlow169 = ((fSlow166 * fSlow11) * fSlow7); - double fSlow170 = (fConst99 * fSlow169); - double fSlow171 = ((3.0 * fSlow8) + -1.0); - double fSlow172 = ((2.5 * fSlow171) + -2.0); - double fSlow173 = ((2.333333333333333 * (fSlow172 * fSlow8)) - (1.5 * fSlow171)); - double fSlow174 = ((2.25 * fSlow173) - (1.3333333333333333 * fSlow172)); - double fSlow175 = ((2.2000000000000002 * (fSlow174 * fSlow8)) - (1.25 * fSlow173)); - double fSlow176 = ((2.1666666666666665 * fSlow175) - (1.2000000000000002 * fSlow174)); - double fSlow177 = ((2.1428571428571428 * (fSlow176 * fSlow8)) - (1.1666666666666665 * fSlow175)); - double fSlow178 = (0.51538820320220757 * fSlow177); - double fSlow179 = (fSlow89 * fSlow85); - double fSlow180 = (fConst101 * fSlow179); - double fSlow181 = (((fSlow63 * fSlow11) * fSlow7) * fSlow9); - double fSlow182 = (fConst102 * fSlow181); - double fSlow183 = mydsp_faustpower4_f(fSlow9); - double fSlow184 = (((fSlow42 + fSlow89) * fSlow11) * fSlow183); - double fSlow185 = (fConst103 * fSlow184); - double fSlow186 = (((fSlow23 * fSlow76) * fSlow11) * fSlow44); - double fSlow187 = (fConst104 * fSlow186); - double fSlow188 = (1.1180339887498949 * fSlow171); - double fSlow189 = (0.75 * fSlow173); - double fSlow190 = (0.60092521257733145 * fSlow175); - double fSlow191 = (0.88191710368819687 * fSlow172); - double fSlow192 = ((fSlow24 * fSlow44) * fSlow12); - double fSlow193 = (fConst106 * fSlow192); - double fSlow194 = (0.66332495807108005 * fSlow174); - double fSlow195 = (fSlow33 * fSlow44); - double fSlow196 = (fConst107 * fSlow195); - double fSlow197 = ((fSlow43 * fSlow83) * fSlow12); - double fSlow198 = (fConst45 * fSlow197); - double fSlow199 = (0.55328333517248807 * fSlow176); - double fSlow200 = (fSlow33 * fSlow60); - double fSlow201 = (fConst108 * (fSlow200 * fSlow44)); - double fSlow202 = (fConst109 * (fSlow140 * fSlow12)); - double fSlow203 = (0.13783222385544802 * fSlow7); - double fSlow204 = (fConst109 * (fSlow11 * fSlow140)); - double fSlow205 = (fConst111 * ((fSlow11 * fSlow9) * fSlow12)); - double fSlow206 = (fConst112 * ((fSlow7 * fSlow140) * fSlow12)); - double fSlow207 = (0.088970317927147144 * fSlow171); - double fSlow208 = (fConst112 * (fSlow18 * fSlow140)); - double fSlow209 = (fConst113 * (fSlow16 * fSlow9)); - double fSlow210 = (fConst114 * ((fSlow22 * fSlow112) * fSlow12)); - double fSlow211 = (fConst116 * ((fSlow18 * fSlow9) * fSlow12)); - double fSlow212 = (fConst117 * ((fSlow144 * fSlow140) * fSlow12)); - double fSlow213 = (0.070180733224632072 * (fSlow172 * fSlow7)); - double fSlow214 = (fConst117 * (fSlow146 * fSlow140)); - double fSlow215 = (fConst118 * (fSlow20 * fSlow9)); - double fSlow216 = (fConst114 * (fSlow115 * fSlow112)); - double fSlow217 = (fConst119 * fSlow192); - double fSlow218 = (fConst120 * ((fSlow116 * fSlow112) * fSlow12)); - double fSlow219 = (fConst121 * ((fSlow27 * fSlow9) * fSlow12)); - double fSlow220 = (fConst122 * ((fSlow149 * fSlow140) * fSlow12)); - double fSlow221 = (0.059683103659460751 * fSlow173); - double fSlow222 = (fConst122 * (fSlow151 * fSlow140)); - double fSlow223 = (fConst123 * (fSlow29 * fSlow9)); - double fSlow224 = (fConst120 * (fSlow118 * fSlow112)); - double fSlow225 = (fConst124 * fSlow195); - double fSlow226 = (fConst125 * ((fSlow41 * fSlow94) * fSlow12)); - double fSlow227 = (fConst126 * (((fSlow24 * fSlow7) * fSlow44) * fSlow12)); - double fSlow228 = (fConst127 * ((fSlow121 * fSlow112) * fSlow12)); - double fSlow229 = (fConst128 * ((fSlow36 * fSlow9) * fSlow12)); - double fSlow230 = (fConst129 * ((fSlow153 * fSlow140) * fSlow12)); - double fSlow231 = (0.052785722976618307 * (fSlow174 * fSlow7)); - double fSlow232 = (fConst129 * (fSlow155 * fSlow140)); - double fSlow233 = (fConst130 * (fSlow38 * fSlow9)); - double fSlow234 = (fConst127 * (fSlow123 * fSlow112)); - double fSlow235 = (fConst131 * ((fSlow33 * fSlow7) * fSlow44)); - double fSlow236 = (fConst125 * (fSlow97 * fSlow94)); - double fSlow237 = (fConst132 * fSlow197); - double fSlow238 = (fConst133 * ((fSlow98 * fSlow94) * fSlow12)); - double fSlow239 = (fConst134 * ((fSlow47 * fSlow44) * fSlow12)); - double fSlow240 = (fConst135 * ((fSlow126 * fSlow112) * fSlow12)); - double fSlow241 = (fConst136 * ((fSlow50 * fSlow9) * fSlow12)); - double fSlow242 = (fConst137 * ((fSlow158 * fSlow140) * fSlow12)); - double fSlow243 = (0.047820109005115151 * fSlow175); - double fSlow244 = (fConst137 * (fSlow160 * fSlow140)); - double fSlow245 = (fConst138 * (fSlow52 * fSlow9)); - double fSlow246 = (fConst135 * (fSlow128 * fSlow112)); - double fSlow247 = (fConst139 * (fSlow54 * fSlow44)); - double fSlow248 = (fConst133 * (fSlow100 * fSlow94)); - double fSlow249 = (fConst132 * (fSlow58 * fSlow83)); - double fSlow250 = (fConst140 * (fSlow179 * fSlow12)); - double fSlow251 = (fConst141 * (((fSlow43 * fSlow7) * fSlow83) * fSlow12)); - double fSlow252 = (fConst142 * ((fSlow103 * fSlow94) * fSlow12)); - double fSlow253 = (fConst143 * ((fSlow61 * fSlow44) * fSlow12)); - double fSlow254 = (fConst144 * ((fSlow131 * fSlow112) * fSlow12)); - double fSlow255 = (fConst145 * (fSlow181 * fSlow12)); - double fSlow256 = (fConst146 * ((fSlow162 * fSlow140) * fSlow12)); - double fSlow257 = (0.044028888861535699 * (fSlow176 * fSlow7)); - double fSlow258 = (fConst146 * (fSlow164 * fSlow140)); - double fSlow259 = (fConst147 * (fSlow64 * fSlow9)); - double fSlow260 = (fConst144 * (fSlow133 * fSlow112)); - double fSlow261 = (fConst148 * ((fSlow200 * fSlow7) * fSlow44)); - double fSlow262 = (fConst142 * (fSlow105 * fSlow94)); - double fSlow263 = (fConst141 * (fSlow66 * fSlow83)); - double fSlow264 = (fConst140 * (fSlow87 * fSlow85)); - double fSlow265 = (fConst149 * (fSlow184 * fSlow12)); - double fSlow266 = (fConst150 * ((fSlow90 * fSlow85) * fSlow12)); - double fSlow267 = (fConst151 * ((fSlow69 * fSlow83) * fSlow12)); - double fSlow268 = (fConst152 * ((fSlow108 * fSlow94) * fSlow12)); - double fSlow269 = (fConst153 * (fSlow186 * fSlow12)); - double fSlow270 = (fConst154 * ((fSlow136 * fSlow112) * fSlow12)); - double fSlow271 = (fConst155 * ((fSlow72 * fSlow9) * fSlow12)); - double fSlow272 = (fConst156 * ((fSlow167 * fSlow140) * fSlow12)); - double fSlow273 = (0.041013290075440773 * fSlow177); - double fSlow274 = (fConst156 * (fSlow169 * fSlow140)); - double fSlow275 = (fConst157 * (fSlow74 * fSlow9)); - double fSlow276 = (fConst154 * (fSlow138 * fSlow112)); - double fSlow277 = (fConst158 * (fSlow77 * fSlow44)); - double fSlow278 = (fConst152 * (fSlow110 * fSlow94)); - double fSlow279 = (fConst151 * (fSlow79 * fSlow83)); - double fSlow280 = (fConst150 * (fSlow92 * fSlow85)); - double fSlow281 = (fConst159 * (fSlow82 * fSlow183)); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = mydsp_faustpower2_f(fSlow10); + double fSlow12 = (1.0 - fSlow11); + double fSlow13 = double(fVslider2); + double fSlow14 = cos(fSlow13); + double fSlow15 = sin(fSlow13); + double fSlow16 = (6.3830764864229232 * (fSlow14 * fSlow15)); + double fSlow17 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider3)))); + double fSlow18 = mydsp_faustpower2_f(fSlow14); + double fSlow19 = ((2.0 * fSlow18) + -1.0); + double fSlow20 = (3.1915382432114616 * fSlow19); + double fSlow21 = (fSlow14 * fSlow10); + double fSlow22 = (fConst9 * (fSlow21 * fSlow15)); + double fSlow23 = (fSlow19 * fSlow10); + double fSlow24 = (fConst10 * fSlow23); + double fSlow25 = ((4.0 * fSlow18) + -1.0); + double fSlow26 = (fSlow25 + -1.0); + double fSlow27 = (fSlow26 * fSlow14); + double fSlow28 = (fConst14 * ((fSlow27 * fSlow12) * fSlow15)); + double fSlow29 = ((78.986541696685876 * fSlow11) + -11.283791670955125); + double fSlow30 = (fSlow29 * fSlow14); + double fSlow31 = (fConst18 * (fSlow30 * fSlow15)); + double fSlow32 = (fSlow19 * fSlow29); + double fSlow33 = (fConst19 * fSlow32); + double fSlow34 = ((2.0 * fSlow19) + -1.0); + double fSlow35 = (1.0 - fSlow34); + double fSlow36 = (1.0 - (2.0 * (fSlow35 * fSlow18))); + double fSlow37 = (fConst20 * (fSlow36 * fSlow12)); + double fSlow38 = ((4.5 * fSlow29) + -67.702750025730751); + double fSlow39 = ((fSlow38 * fSlow14) * fSlow10); + double fSlow40 = (fConst24 * (fSlow39 * fSlow15)); + double fSlow41 = ((fSlow19 * fSlow38) * fSlow10); + double fSlow42 = (fConst25 * fSlow41); + double fSlow43 = (1.0 - fSlow26); + double fSlow44 = (1.0 - (4.0 * (fSlow43 * fSlow18))); + double fSlow45 = (fSlow26 - fSlow44); + double fSlow46 = (0.0 - (2.0 * (fSlow45 * fSlow14))); + double fSlow47 = mydsp_faustpower2_f(fSlow12); + double fSlow48 = (fConst29 * ((fSlow46 * fSlow47) * fSlow15)); + double fSlow49 = ((893.67630033964599 * fSlow11) + -81.24330003087691); + double fSlow50 = ((fSlow26 * fSlow49) * fSlow14); + double fSlow51 = (fConst32 * ((fSlow50 * fSlow12) * fSlow15)); + double fSlow52 = ((3.6666666666666665 * (fSlow38 * fSlow11)) - (3.5 * fSlow29)); + double fSlow53 = (fSlow52 * fSlow14); + double fSlow54 = (fConst34 * (fSlow53 * fSlow15)); + double fSlow55 = (fSlow19 * fSlow52); + double fSlow56 = (fConst35 * fSlow55); + double fSlow57 = (fSlow36 * fSlow49); + double fSlow58 = (fConst36 * (fSlow57 * fSlow12)); + double fSlow59 = ((2.0 * fSlow36) - fSlow34); + double fSlow60 = (fSlow35 + fSlow59); + double fSlow61 = ((2.0 * (fSlow60 * fSlow18)) + -1.0); + double fSlow62 = (fConst29 * (fSlow61 * fSlow47)); + double fSlow63 = ((6.5 * fSlow49) + -812.43300030876912); + double fSlow64 = (((fSlow26 * fSlow63) * fSlow14) * fSlow10); + double fSlow65 = (fConst39 * ((fSlow64 * fSlow12) * fSlow15)); + double fSlow66 = ((3.25 * fSlow52) - (2.6666666666666665 * fSlow38)); + double fSlow67 = ((fSlow19 * fSlow66) * fSlow10); + double fSlow68 = (fConst42 * fSlow67); + double fSlow69 = (fSlow61 * fSlow10); + double fSlow70 = (fConst45 * (fSlow69 * fSlow47)); + double fSlow71 = ((7041.0860026759983 * fSlow11) + -469.40573351173322); + double fSlow72 = (fSlow46 * fSlow71); + double fSlow73 = (fConst48 * ((fSlow72 * fSlow47) * fSlow15)); + double fSlow74 = ((3.0 * (fSlow66 * fSlow11)) - (2.25 * fSlow52)); + double fSlow75 = (fSlow74 * fSlow14); + double fSlow76 = (fConst50 * (fSlow75 * fSlow15)); + double fSlow77 = (fSlow19 * fSlow74); + double fSlow78 = (fConst51 * fSlow77); + double fSlow79 = ((5.0 * (fSlow63 * fSlow11)) - (5.5 * fSlow49)); + double fSlow80 = (fSlow36 * fSlow79); + double fSlow81 = (fConst53 * (fSlow80 * fSlow12)); + double fSlow82 = (fSlow61 * fSlow71); + double fSlow83 = (fConst48 * (fSlow82 * fSlow47)); + double fSlow84 = ((2.0 * fSlow61) - fSlow59); + double fSlow85 = (1.0 - (2.0 * ((fSlow60 - fSlow84) * fSlow18))); + double fSlow86 = mydsp_faustpower3_f(fSlow12); + double fSlow87 = (fConst55 * (fSlow85 * fSlow86)); + double fSlow88 = pow(fSlow12, 3.5); + double fSlow89 = (fConst56 * fSlow88); + double fSlow90 = (fSlow84 * fSlow14); + double fSlow91 = (fConst58 * fSlow90); + double fSlow92 = ((((2.0 * fSlow46) + (4.0 * (fSlow43 * fSlow14))) * fSlow14) + -1.0); + double fSlow93 = (fSlow92 * fSlow10); + double fSlow94 = (fConst60 * (fSlow93 * fSlow15)); + double fSlow95 = (fSlow90 * fSlow10); + double fSlow96 = (fConst60 * fSlow95); + double fSlow97 = pow(fSlow12, 2.5); + double fSlow98 = (fConst61 * fSlow97); + double fSlow99 = (fSlow44 * fSlow15); + double fSlow100 = (fSlow59 * fSlow14); + double fSlow101 = (fSlow44 * fSlow10); + double fSlow102 = (fConst65 * (fSlow101 * fSlow15)); + double fSlow103 = (fSlow100 * fSlow10); + double fSlow104 = (fConst65 * fSlow103); + double fSlow105 = ((2581.7315343145328 * fSlow11) + -198.59473340881021); + double fSlow106 = (fSlow44 * fSlow105); + double fSlow107 = (fConst67 * (fSlow106 * fSlow15)); + double fSlow108 = ((fSlow59 * fSlow105) * fSlow14); + double fSlow109 = (fConst67 * fSlow108); + double fSlow110 = ((7.5 * fSlow105) + -2383.1368009057223); + double fSlow111 = ((fSlow44 * fSlow110) * fSlow10); + double fSlow112 = (fConst69 * (fSlow111 * fSlow15)); + double fSlow113 = (((fSlow59 * fSlow110) * fSlow14) * fSlow10); + double fSlow114 = (fConst69 * fSlow113); + double fSlow115 = pow(fSlow12, 1.5); + double fSlow116 = (fConst70 * fSlow115); + double fSlow117 = (fSlow25 * fSlow15); + double fSlow118 = (fSlow34 * fSlow14); + double fSlow119 = (fSlow25 * fSlow10); + double fSlow120 = (fConst74 * (fSlow119 * fSlow15)); + double fSlow121 = (fSlow118 * fSlow10); + double fSlow122 = (fConst74 * fSlow121); + double fSlow123 = ((284.35155010806915 * fSlow11) + -31.594616678674353); + double fSlow124 = (fSlow25 * fSlow123); + double fSlow125 = (fConst76 * (fSlow124 * fSlow15)); + double fSlow126 = ((fSlow34 * fSlow123) * fSlow14); + double fSlow127 = (fConst76 * fSlow126); + double fSlow128 = ((5.5 * fSlow123) + -252.75693342939482); + double fSlow129 = ((fSlow25 * fSlow128) * fSlow10); + double fSlow130 = (fConst78 * (fSlow129 * fSlow15)); + double fSlow131 = (((fSlow34 * fSlow128) * fSlow14) * fSlow10); + double fSlow132 = (fConst78 * fSlow131); + double fSlow133 = ((4.333333333333333 * (fSlow128 * fSlow11)) - (4.5 * fSlow123)); + double fSlow134 = (fSlow25 * fSlow133); + double fSlow135 = (fConst80 * (fSlow134 * fSlow15)); + double fSlow136 = ((fSlow34 * fSlow133) * fSlow14); + double fSlow137 = (fConst80 * fSlow136); + double fSlow138 = ((3.75 * fSlow133) - (3.333333333333333 * fSlow128)); + double fSlow139 = ((fSlow25 * fSlow138) * fSlow10); + double fSlow140 = (fConst82 * (fSlow139 * fSlow15)); + double fSlow141 = (((fSlow34 * fSlow138) * fSlow14) * fSlow10); + double fSlow142 = (fConst82 * fSlow141); + double fSlow143 = pow(fSlow12, 0.5); + double fSlow144 = (fConst83 * fSlow143); + double fSlow145 = (fConst87 * (fSlow10 * fSlow15)); + double fSlow146 = (fConst87 * fSlow21); + double fSlow147 = ((16.925687506432688 * fSlow11) + -3.3851375012865379); + double fSlow148 = (fConst89 * (fSlow147 * fSlow15)); + double fSlow149 = (fSlow147 * fSlow14); + double fSlow150 = (fConst89 * fSlow149); + double fSlow151 = ((3.5 * fSlow147) + -13.540550005146152); + double fSlow152 = (fSlow151 * fSlow10); + double fSlow153 = (fConst91 * (fSlow152 * fSlow15)); + double fSlow154 = ((fSlow151 * fSlow14) * fSlow10); + double fSlow155 = (fConst91 * fSlow154); + double fSlow156 = ((3.0 * (fSlow151 * fSlow11)) - (2.5 * fSlow147)); + double fSlow157 = (fConst93 * (fSlow156 * fSlow15)); + double fSlow158 = (fSlow156 * fSlow14); + double fSlow159 = (fConst93 * fSlow158); + double fSlow160 = ((2.75 * fSlow156) - (2.0 * fSlow151)); + double fSlow161 = (fSlow160 * fSlow10); + double fSlow162 = (fConst95 * (fSlow161 * fSlow15)); + double fSlow163 = ((fSlow160 * fSlow14) * fSlow10); + double fSlow164 = (fConst95 * fSlow163); + double fSlow165 = ((2.6000000000000001 * (fSlow160 * fSlow11)) - (1.75 * fSlow156)); + double fSlow166 = (fConst97 * (fSlow165 * fSlow15)); + double fSlow167 = (fSlow165 * fSlow14); + double fSlow168 = (fConst97 * fSlow167); + double fSlow169 = ((2.5 * fSlow165) - (1.6000000000000001 * fSlow160)); + double fSlow170 = (fSlow169 * fSlow10); + double fSlow171 = (fConst99 * (fSlow170 * fSlow15)); + double fSlow172 = ((fSlow169 * fSlow14) * fSlow10); + double fSlow173 = (fConst99 * fSlow172); + double fSlow174 = ((3.0 * fSlow11) + -1.0); + double fSlow175 = ((2.5 * fSlow174) + -2.0); + double fSlow176 = ((2.333333333333333 * (fSlow175 * fSlow11)) - (1.5 * fSlow174)); + double fSlow177 = ((2.25 * fSlow176) - (1.3333333333333333 * fSlow175)); + double fSlow178 = ((2.2000000000000002 * (fSlow177 * fSlow11)) - (1.25 * fSlow176)); + double fSlow179 = ((2.1666666666666665 * fSlow178) - (1.2000000000000002 * fSlow177)); + double fSlow180 = ((2.1428571428571428 * (fSlow179 * fSlow11)) - (1.1666666666666665 * fSlow178)); + double fSlow181 = (0.51538820320220757 * fSlow180); + double fSlow182 = (fSlow92 * fSlow88); + double fSlow183 = (fConst101 * fSlow182); + double fSlow184 = (((fSlow66 * fSlow14) * fSlow10) * fSlow12); + double fSlow185 = (fConst102 * fSlow184); + double fSlow186 = mydsp_faustpower4_f(fSlow12); + double fSlow187 = (((fSlow45 + fSlow92) * fSlow14) * fSlow186); + double fSlow188 = (fConst103 * fSlow187); + double fSlow189 = (((fSlow26 * fSlow79) * fSlow14) * fSlow47); + double fSlow190 = (fConst104 * fSlow189); + double fSlow191 = (1.1180339887498949 * fSlow174); + double fSlow192 = (0.75 * fSlow176); + double fSlow193 = (0.60092521257733145 * fSlow178); + double fSlow194 = (0.88191710368819687 * fSlow175); + double fSlow195 = ((fSlow27 * fSlow47) * fSlow15); + double fSlow196 = (fConst106 * fSlow195); + double fSlow197 = (0.66332495807108005 * fSlow177); + double fSlow198 = (fSlow36 * fSlow47); + double fSlow199 = (fConst107 * fSlow198); + double fSlow200 = ((fSlow46 * fSlow86) * fSlow15); + double fSlow201 = (fConst45 * fSlow200); + double fSlow202 = (0.55328333517248807 * fSlow179); + double fSlow203 = (fSlow36 * fSlow63); + double fSlow204 = (fConst108 * (fSlow203 * fSlow47)); + double fSlow205 = (fConst109 * (fSlow143 * fSlow15)); + double fSlow206 = (0.13783222385544802 * fSlow10); + double fSlow207 = (fConst109 * (fSlow14 * fSlow143)); + double fSlow208 = (fConst111 * ((fSlow14 * fSlow12) * fSlow15)); + double fSlow209 = (fConst112 * ((fSlow10 * fSlow143) * fSlow15)); + double fSlow210 = (0.088970317927147144 * fSlow174); + double fSlow211 = (fConst112 * (fSlow21 * fSlow143)); + double fSlow212 = (fConst113 * (fSlow19 * fSlow12)); + double fSlow213 = (fConst114 * ((fSlow25 * fSlow115) * fSlow15)); + double fSlow214 = (fConst116 * ((fSlow21 * fSlow12) * fSlow15)); + double fSlow215 = (fConst117 * ((fSlow147 * fSlow143) * fSlow15)); + double fSlow216 = (0.070180733224632072 * (fSlow175 * fSlow10)); + double fSlow217 = (fConst117 * (fSlow149 * fSlow143)); + double fSlow218 = (fConst118 * (fSlow23 * fSlow12)); + double fSlow219 = (fConst114 * (fSlow118 * fSlow115)); + double fSlow220 = (fConst119 * fSlow195); + double fSlow221 = (fConst120 * ((fSlow119 * fSlow115) * fSlow15)); + double fSlow222 = (fConst121 * ((fSlow30 * fSlow12) * fSlow15)); + double fSlow223 = (fConst122 * ((fSlow152 * fSlow143) * fSlow15)); + double fSlow224 = (0.059683103659460751 * fSlow176); + double fSlow225 = (fConst122 * (fSlow154 * fSlow143)); + double fSlow226 = (fConst123 * (fSlow32 * fSlow12)); + double fSlow227 = (fConst120 * (fSlow121 * fSlow115)); + double fSlow228 = (fConst124 * fSlow198); + double fSlow229 = (fConst125 * ((fSlow44 * fSlow97) * fSlow15)); + double fSlow230 = (fConst126 * (((fSlow27 * fSlow10) * fSlow47) * fSlow15)); + double fSlow231 = (fConst127 * ((fSlow124 * fSlow115) * fSlow15)); + double fSlow232 = (fConst128 * ((fSlow39 * fSlow12) * fSlow15)); + double fSlow233 = (fConst129 * ((fSlow156 * fSlow143) * fSlow15)); + double fSlow234 = (0.052785722976618307 * (fSlow177 * fSlow10)); + double fSlow235 = (fConst129 * (fSlow158 * fSlow143)); + double fSlow236 = (fConst130 * (fSlow41 * fSlow12)); + double fSlow237 = (fConst127 * (fSlow126 * fSlow115)); + double fSlow238 = (fConst131 * ((fSlow36 * fSlow10) * fSlow47)); + double fSlow239 = (fConst125 * (fSlow100 * fSlow97)); + double fSlow240 = (fConst132 * fSlow200); + double fSlow241 = (fConst133 * ((fSlow101 * fSlow97) * fSlow15)); + double fSlow242 = (fConst134 * ((fSlow50 * fSlow47) * fSlow15)); + double fSlow243 = (fConst135 * ((fSlow129 * fSlow115) * fSlow15)); + double fSlow244 = (fConst136 * ((fSlow53 * fSlow12) * fSlow15)); + double fSlow245 = (fConst137 * ((fSlow161 * fSlow143) * fSlow15)); + double fSlow246 = (0.047820109005115151 * fSlow178); + double fSlow247 = (fConst137 * (fSlow163 * fSlow143)); + double fSlow248 = (fConst138 * (fSlow55 * fSlow12)); + double fSlow249 = (fConst135 * (fSlow131 * fSlow115)); + double fSlow250 = (fConst139 * (fSlow57 * fSlow47)); + double fSlow251 = (fConst133 * (fSlow103 * fSlow97)); + double fSlow252 = (fConst132 * (fSlow61 * fSlow86)); + double fSlow253 = (fConst140 * (fSlow182 * fSlow15)); + double fSlow254 = (fConst141 * (((fSlow46 * fSlow10) * fSlow86) * fSlow15)); + double fSlow255 = (fConst142 * ((fSlow106 * fSlow97) * fSlow15)); + double fSlow256 = (fConst143 * ((fSlow64 * fSlow47) * fSlow15)); + double fSlow257 = (fConst144 * ((fSlow134 * fSlow115) * fSlow15)); + double fSlow258 = (fConst145 * (fSlow184 * fSlow15)); + double fSlow259 = (fConst146 * ((fSlow165 * fSlow143) * fSlow15)); + double fSlow260 = (0.044028888861535699 * (fSlow179 * fSlow10)); + double fSlow261 = (fConst146 * (fSlow167 * fSlow143)); + double fSlow262 = (fConst147 * (fSlow67 * fSlow12)); + double fSlow263 = (fConst144 * (fSlow136 * fSlow115)); + double fSlow264 = (fConst148 * ((fSlow203 * fSlow10) * fSlow47)); + double fSlow265 = (fConst142 * (fSlow108 * fSlow97)); + double fSlow266 = (fConst141 * (fSlow69 * fSlow86)); + double fSlow267 = (fConst140 * (fSlow90 * fSlow88)); + double fSlow268 = (fConst149 * (fSlow187 * fSlow15)); + double fSlow269 = (fConst150 * ((fSlow93 * fSlow88) * fSlow15)); + double fSlow270 = (fConst151 * ((fSlow72 * fSlow86) * fSlow15)); + double fSlow271 = (fConst152 * ((fSlow111 * fSlow97) * fSlow15)); + double fSlow272 = (fConst153 * (fSlow189 * fSlow15)); + double fSlow273 = (fConst154 * ((fSlow139 * fSlow115) * fSlow15)); + double fSlow274 = (fConst155 * ((fSlow75 * fSlow12) * fSlow15)); + double fSlow275 = (fConst156 * ((fSlow170 * fSlow143) * fSlow15)); + double fSlow276 = (0.041013290075440773 * fSlow180); + double fSlow277 = (fConst156 * (fSlow172 * fSlow143)); + double fSlow278 = (fConst157 * (fSlow77 * fSlow12)); + double fSlow279 = (fConst154 * (fSlow141 * fSlow115)); + double fSlow280 = (fConst158 * (fSlow80 * fSlow47)); + double fSlow281 = (fConst152 * (fSlow113 * fSlow97)); + double fSlow282 = (fConst151 * (fSlow82 * fSlow86)); + double fSlow283 = (fConst150 * (fSlow95 * fSlow88)); + double fSlow284 = (fConst159 * (fSlow85 * fSlow186)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow14 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow17 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input4[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input8[i]); double fTemp5 = double(input10[i]); @@ -2310,88 +2322,88 @@ class mydsp : public dsp { double fTemp80 = double(input50[i]); double fTemp81 = double(input56[i]); double fTemp82 = double(input60[i]); - double fTemp83 = ((fSlow9 * ((((((((((((((((((((((fConst2 * (((fConst5 * ((fSlow13 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow17 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4)))))) + (fSlow19 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6)))))) + (fSlow25 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow28 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow30 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow34 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow37 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow45 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow48 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow51 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16))))) + (fSlow55 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow59 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow62 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow65 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20))))) + (fSlow67 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21))))) + (fSlow70 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22))))) + (fSlow73 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24))))) + (fSlow78 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow80 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow84 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27)))))) + ((fSlow86 * (((fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28)))) + (fSlow91 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow93 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30)))))) + ((fSlow95 * (((((((fConst63 * ((fSlow96 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31)))) + (fSlow97 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32)))))) + (fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow101 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow104 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow106 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow109 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))) + (fSlow111 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38)))))) + ((fSlow113 * (((((((((((fConst72 * ((fSlow114 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39)))) + (fSlow115 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40)))))) + (fSlow117 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow119 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42))))) + (fSlow122 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow124 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow127 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45))))) + (fSlow129 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46))))) + (fSlow132 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47))))) + (fSlow134 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48))))) + (fSlow137 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49))))) + (fSlow139 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50)))))) + ((fSlow141 * (((((((((((((((fConst85 * ((fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp51)):(fSlow3 * (fTemp1 * fTemp51)))) + (fSlow11 * (iSlow1?(fSlow3 * (fTemp3 * fTemp52)):(fSlow3 * (fTemp1 * fTemp52)))))) + (fSlow142 * (iSlow1?(fSlow3 * (fTemp3 * fTemp53)):(fSlow3 * (fTemp1 * fTemp53))))) + (fSlow143 * (iSlow1?(fSlow3 * (fTemp3 * fTemp54)):(fSlow3 * (fTemp1 * fTemp54))))) + (fSlow145 * (iSlow1?(fSlow3 * (fTemp3 * fTemp55)):(fSlow3 * (fTemp1 * fTemp55))))) + (fSlow147 * (iSlow1?(fSlow3 * (fTemp3 * fTemp56)):(fSlow3 * (fTemp1 * fTemp56))))) + (fSlow150 * (iSlow1?(fSlow3 * (fTemp3 * fTemp57)):(fSlow3 * (fTemp1 * fTemp57))))) + (fSlow152 * (iSlow1?(fSlow3 * (fTemp3 * fTemp58)):(fSlow3 * (fTemp1 * fTemp58))))) + (fSlow154 * (iSlow1?(fSlow3 * (fTemp3 * fTemp59)):(fSlow3 * (fTemp1 * fTemp59))))) + (fSlow156 * (iSlow1?(fSlow3 * (fTemp3 * fTemp60)):(fSlow3 * (fTemp1 * fTemp60))))) + (fSlow159 * (iSlow1?(fSlow3 * (fTemp3 * fTemp61)):(fSlow3 * (fTemp1 * fTemp61))))) + (fSlow161 * (iSlow1?(fSlow3 * (fTemp3 * fTemp62)):(fSlow3 * (fTemp1 * fTemp62))))) + (fSlow163 * (iSlow1?(fSlow3 * (fTemp3 * fTemp63)):(fSlow3 * (fTemp1 * fTemp63))))) + (fSlow165 * (iSlow1?(fSlow3 * (fTemp3 * fTemp64)):(fSlow3 * (fTemp1 * fTemp64))))) + (fSlow168 * (iSlow1?(fSlow3 * (fTemp3 * fTemp65)):(fSlow3 * (fTemp1 * fTemp65))))) + (fSlow170 * (iSlow1?(fSlow3 * (fTemp3 * fTemp66)):(fSlow3 * (fTemp1 * fTemp66)))))) + ((fSlow178 * (iSlow1?(fSlow3 * (fTemp3 * fTemp67)):(fSlow3 * (fTemp1 * fTemp67)))) + ((fSlow12 * ((((fSlow180 * (iSlow1?(fSlow3 * (fTemp3 * fTemp68)):(fSlow3 * (fTemp1 * fTemp68)))) + (fSlow182 * (iSlow1?(fSlow3 * (fTemp3 * fTemp69)):(fSlow3 * (fTemp1 * fTemp69))))) + (fSlow185 * (iSlow1?(fSlow3 * (fTemp3 * fTemp70)):(fSlow3 * (fTemp1 * fTemp70))))) + (fSlow187 * (iSlow1?(fSlow3 * (fTemp3 * fTemp71)):(fSlow3 * (fTemp1 * fTemp71)))))) + (((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow188 * (iSlow1?(fSlow3 * (fTemp3 * fTemp72)):(fSlow3 * (fTemp1 * fTemp72))))) + (fSlow189 * (iSlow1?(fSlow3 * (fTemp3 * fTemp73)):(fSlow3 * (fTemp1 * fTemp73))))) + (fSlow190 * (iSlow1?(fSlow3 * (fTemp3 * fTemp74)):(fSlow3 * (fTemp1 * fTemp74))))) + (fSlow7 * ((((((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp75)):(fSlow3 * (fTemp1 * fTemp75)))) + (fSlow191 * (iSlow1?(fSlow3 * (fTemp3 * fTemp76)):(fSlow3 * (fTemp1 * fTemp76))))) + (fSlow193 * (iSlow1?(fSlow3 * (fTemp3 * fTemp77)):(fSlow3 * (fTemp1 * fTemp77))))) + (fSlow194 * (iSlow1?(fSlow3 * (fTemp3 * fTemp78)):(fSlow3 * (fTemp1 * fTemp78))))) + (fSlow196 * (iSlow1?(fSlow3 * (fTemp3 * fTemp79)):(fSlow3 * (fTemp1 * fTemp79))))) + (fSlow198 * (iSlow1?(fSlow3 * (fTemp3 * fTemp80)):(fSlow3 * (fTemp1 * fTemp80))))) + (fSlow199 * (iSlow1?(fSlow3 * (fTemp3 * fTemp81)):(fSlow3 * (fTemp1 * fTemp81))))) + (fSlow201 * (iSlow1?(fSlow3 * (fTemp3 * fTemp82)):(fSlow3 * (fTemp1 * fTemp82)))))))))))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp83))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp51)):(fSlow3 * (fRec0[0] * fTemp51))) + (fSlow202 * fTemp83))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp75)):(fSlow3 * (fRec0[0] * fTemp75))) + (fSlow203 * fTemp83))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp52)):(fSlow3 * (fRec0[0] * fTemp52))) + (fSlow204 * fTemp83))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow205 * fTemp83))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp53)):(fSlow3 * (fRec0[0] * fTemp53))) + (fSlow206 * fTemp83))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp72)):(fSlow3 * (fRec0[0] * fTemp72))) + (fSlow207 * fTemp83))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp54)):(fSlow3 * (fRec0[0] * fTemp54))) + (fSlow208 * fTemp83))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow209 * fTemp83))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow210 * fTemp83))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow211 * fTemp83))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp55)):(fSlow3 * (fRec0[0] * fTemp55))) + (fSlow212 * fTemp83))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp76)):(fSlow3 * (fRec0[0] * fTemp76))) + (fSlow213 * fTemp83))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp56)):(fSlow3 * (fRec0[0] * fTemp56))) + (fSlow214 * fTemp83))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow215 * fTemp83))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow216 * fTemp83))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow217 * fTemp83))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow218 * fTemp83))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow219 * fTemp83))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp57)):(fSlow3 * (fRec0[0] * fTemp57))) + (fSlow220 * fTemp83))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp73)):(fSlow3 * (fRec0[0] * fTemp73))) + (fSlow221 * fTemp83))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp58)):(fSlow3 * (fRec0[0] * fTemp58))) + (fSlow222 * fTemp83))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow223 * fTemp83))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow224 * fTemp83))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow225 * fTemp83))); - output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow226 * fTemp83))); - output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp77)):(fSlow3 * (fRec0[0] * fTemp77))) + (fSlow227 * fTemp83))); - output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow228 * fTemp83))); - output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow229 * fTemp83))); - output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp59)):(fSlow3 * (fRec0[0] * fTemp59))) + (fSlow230 * fTemp83))); - output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp78)):(fSlow3 * (fRec0[0] * fTemp78))) + (fSlow231 * fTemp83))); - output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp60)):(fSlow3 * (fRec0[0] * fTemp60))) + (fSlow232 * fTemp83))); - output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow233 * fTemp83))); - output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow234 * fTemp83))); - output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp79)):(fSlow3 * (fRec0[0] * fTemp79))) + (fSlow235 * fTemp83))); - output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow236 * fTemp83))); - output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow237 * fTemp83))); - output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow238 * fTemp83))); - output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow239 * fTemp83))); - output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))) + (fSlow240 * fTemp83))); - output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow241 * fTemp83))); - output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp61)):(fSlow3 * (fRec0[0] * fTemp61))) + (fSlow242 * fTemp83))); - output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp74)):(fSlow3 * (fRec0[0] * fTemp74))) + (fSlow243 * fTemp83))); - output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp62)):(fSlow3 * (fRec0[0] * fTemp62))) + (fSlow244 * fTemp83))); - output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow245 * fTemp83))); - output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow246 * fTemp83))); - output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow247 * fTemp83))); - output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow248 * fTemp83))); - output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow249 * fTemp83))); - output49[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp68)):(fSlow3 * (fRec0[0] * fTemp68))) + (fSlow250 * fTemp83))); - output50[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp80)):(fSlow3 * (fRec0[0] * fTemp80))) + (fSlow251 * fTemp83))); - output51[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow252 * fTemp83))); - output52[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow253 * fTemp83))); - output53[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow254 * fTemp83))); - output54[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp69)):(fSlow3 * (fRec0[0] * fTemp69))) + (fSlow255 * fTemp83))); - output55[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp63)):(fSlow3 * (fRec0[0] * fTemp63))) + (fSlow256 * fTemp83))); - output56[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp81)):(fSlow3 * (fRec0[0] * fTemp81))) + (fSlow257 * fTemp83))); - output57[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp64)):(fSlow3 * (fRec0[0] * fTemp64))) + (fSlow258 * fTemp83))); - output58[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow259 * fTemp83))); - output59[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow260 * fTemp83))); - output60[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp82)):(fSlow3 * (fRec0[0] * fTemp82))) + (fSlow261 * fTemp83))); - output61[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow262 * fTemp83))); - output62[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow263 * fTemp83))); - output63[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow264 * fTemp83))); - output64[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp70)):(fSlow3 * (fRec0[0] * fTemp70))) + (fSlow265 * fTemp83))); - output65[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow266 * fTemp83))); - output66[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow267 * fTemp83))); - output67[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow268 * fTemp83))); - output68[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp71)):(fSlow3 * (fRec0[0] * fTemp71))) + (fSlow269 * fTemp83))); - output69[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow270 * fTemp83))); - output70[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow271 * fTemp83))); - output71[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp65)):(fSlow3 * (fRec0[0] * fTemp65))) + (fSlow272 * fTemp83))); - output72[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp67)):(fSlow3 * (fRec0[0] * fTemp67))) + (fSlow273 * fTemp83))); - output73[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp66)):(fSlow3 * (fRec0[0] * fTemp66))) + (fSlow274 * fTemp83))); - output74[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow275 * fTemp83))); - output75[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow276 * fTemp83))); - output76[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow277 * fTemp83))); - output77[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow278 * fTemp83))); - output78[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow279 * fTemp83))); - output79[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow280 * fTemp83))); - output80[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow281 * fTemp83))); + double fTemp83 = ((fSlow12 * ((((((((((((((((((((((fConst2 * (((fConst5 * ((fSlow16 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow20 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4))))))) + (fSlow22 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5)))))) + (fSlow24 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6))))))) + (fSlow28 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow31 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8)))))) + (fSlow33 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9)))))) + (fSlow37 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10)))))) + (fSlow40 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp11)):(iSlow2?(fSlow4 * (fTemp3 * fTemp11)):(fSlow4 * (fTemp1 * fTemp11)))))) + (fSlow42 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp12)):(iSlow2?(fSlow4 * (fTemp3 * fTemp12)):(fSlow4 * (fTemp1 * fTemp12)))))) + (fSlow48 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp13)):(iSlow2?(fSlow4 * (fTemp3 * fTemp13)):(fSlow4 * (fTemp1 * fTemp13)))))) + (fSlow51 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp14)):(iSlow2?(fSlow4 * (fTemp3 * fTemp14)):(fSlow4 * (fTemp1 * fTemp14)))))) + (fSlow54 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp15)):(iSlow2?(fSlow4 * (fTemp3 * fTemp15)):(fSlow4 * (fTemp1 * fTemp15)))))) + (fSlow56 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp16)):(iSlow2?(fSlow4 * (fTemp3 * fTemp16)):(fSlow4 * (fTemp1 * fTemp16)))))) + (fSlow58 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp17)):(iSlow2?(fSlow4 * (fTemp3 * fTemp17)):(fSlow4 * (fTemp1 * fTemp17)))))) + (fSlow62 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp18)):(iSlow2?(fSlow4 * (fTemp3 * fTemp18)):(fSlow4 * (fTemp1 * fTemp18)))))) + (fSlow65 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp19)):(iSlow2?(fSlow4 * (fTemp3 * fTemp19)):(fSlow4 * (fTemp1 * fTemp19)))))) + (fSlow68 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp20)):(iSlow2?(fSlow4 * (fTemp3 * fTemp20)):(fSlow4 * (fTemp1 * fTemp20)))))) + (fSlow70 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp21)):(iSlow2?(fSlow4 * (fTemp3 * fTemp21)):(fSlow4 * (fTemp1 * fTemp21)))))) + (fSlow73 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp22)):(iSlow2?(fSlow4 * (fTemp3 * fTemp22)):(fSlow4 * (fTemp1 * fTemp22)))))) + (fSlow76 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp23)):(iSlow2?(fSlow4 * (fTemp3 * fTemp23)):(fSlow4 * (fTemp1 * fTemp23)))))) + (fSlow78 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp24)):(iSlow2?(fSlow4 * (fTemp3 * fTemp24)):(fSlow4 * (fTemp1 * fTemp24)))))) + (fSlow81 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp25)):(iSlow2?(fSlow4 * (fTemp3 * fTemp25)):(fSlow4 * (fTemp1 * fTemp25)))))) + (fSlow83 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp26)):(iSlow2?(fSlow4 * (fTemp3 * fTemp26)):(fSlow4 * (fTemp1 * fTemp26)))))) + (fSlow87 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp27)):(iSlow2?(fSlow4 * (fTemp3 * fTemp27)):(fSlow4 * (fTemp1 * fTemp27))))))) + ((fSlow89 * (((fSlow91 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp28)):(iSlow2?(fSlow4 * (fTemp3 * fTemp28)):(fSlow4 * (fTemp1 * fTemp28))))) + (fSlow94 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp29)):(iSlow2?(fSlow4 * (fTemp3 * fTemp29)):(fSlow4 * (fTemp1 * fTemp29)))))) + (fSlow96 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp30)):(iSlow2?(fSlow4 * (fTemp3 * fTemp30)):(fSlow4 * (fTemp1 * fTemp30))))))) + ((fSlow98 * (((((((fConst63 * ((fSlow99 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp31)):(iSlow2?(fSlow4 * (fTemp3 * fTemp31)):(fSlow4 * (fTemp1 * fTemp31))))) + (fSlow100 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp32)):(iSlow2?(fSlow4 * (fTemp3 * fTemp32)):(fSlow4 * (fTemp1 * fTemp32))))))) + (fSlow102 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp33)):(iSlow2?(fSlow4 * (fTemp3 * fTemp33)):(fSlow4 * (fTemp1 * fTemp33)))))) + (fSlow104 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp34)):(iSlow2?(fSlow4 * (fTemp3 * fTemp34)):(fSlow4 * (fTemp1 * fTemp34)))))) + (fSlow107 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp35)):(iSlow2?(fSlow4 * (fTemp3 * fTemp35)):(fSlow4 * (fTemp1 * fTemp35)))))) + (fSlow109 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp36)):(iSlow2?(fSlow4 * (fTemp3 * fTemp36)):(fSlow4 * (fTemp1 * fTemp36)))))) + (fSlow112 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp37)):(iSlow2?(fSlow4 * (fTemp3 * fTemp37)):(fSlow4 * (fTemp1 * fTemp37)))))) + (fSlow114 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp38)):(iSlow2?(fSlow4 * (fTemp3 * fTemp38)):(fSlow4 * (fTemp1 * fTemp38))))))) + ((fSlow116 * (((((((((((fConst72 * ((fSlow117 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp39)):(iSlow2?(fSlow4 * (fTemp3 * fTemp39)):(fSlow4 * (fTemp1 * fTemp39))))) + (fSlow118 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp40)):(iSlow2?(fSlow4 * (fTemp3 * fTemp40)):(fSlow4 * (fTemp1 * fTemp40))))))) + (fSlow120 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp41)):(iSlow2?(fSlow4 * (fTemp3 * fTemp41)):(fSlow4 * (fTemp1 * fTemp41)))))) + (fSlow122 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp42)):(iSlow2?(fSlow4 * (fTemp3 * fTemp42)):(fSlow4 * (fTemp1 * fTemp42)))))) + (fSlow125 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp43)):(iSlow2?(fSlow4 * (fTemp3 * fTemp43)):(fSlow4 * (fTemp1 * fTemp43)))))) + (fSlow127 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp44)):(iSlow2?(fSlow4 * (fTemp3 * fTemp44)):(fSlow4 * (fTemp1 * fTemp44)))))) + (fSlow130 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp45)):(iSlow2?(fSlow4 * (fTemp3 * fTemp45)):(fSlow4 * (fTemp1 * fTemp45)))))) + (fSlow132 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp46)):(iSlow2?(fSlow4 * (fTemp3 * fTemp46)):(fSlow4 * (fTemp1 * fTemp46)))))) + (fSlow135 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp47)):(iSlow2?(fSlow4 * (fTemp3 * fTemp47)):(fSlow4 * (fTemp1 * fTemp47)))))) + (fSlow137 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp48)):(iSlow2?(fSlow4 * (fTemp3 * fTemp48)):(fSlow4 * (fTemp1 * fTemp48)))))) + (fSlow140 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp49)):(iSlow2?(fSlow4 * (fTemp3 * fTemp49)):(fSlow4 * (fTemp1 * fTemp49)))))) + (fSlow142 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp50)):(iSlow2?(fSlow4 * (fTemp3 * fTemp50)):(fSlow4 * (fTemp1 * fTemp50))))))) + ((fSlow144 * (((((((((((((((fConst85 * ((fSlow15 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp51)):(iSlow2?(fSlow4 * (fTemp3 * fTemp51)):(fSlow4 * (fTemp1 * fTemp51))))) + (fSlow14 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp52)):(iSlow2?(fSlow4 * (fTemp3 * fTemp52)):(fSlow4 * (fTemp1 * fTemp52))))))) + (fSlow145 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp53)):(iSlow2?(fSlow4 * (fTemp3 * fTemp53)):(fSlow4 * (fTemp1 * fTemp53)))))) + (fSlow146 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp54)):(iSlow2?(fSlow4 * (fTemp3 * fTemp54)):(fSlow4 * (fTemp1 * fTemp54)))))) + (fSlow148 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp55)):(iSlow2?(fSlow4 * (fTemp3 * fTemp55)):(fSlow4 * (fTemp1 * fTemp55)))))) + (fSlow150 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp56)):(iSlow2?(fSlow4 * (fTemp3 * fTemp56)):(fSlow4 * (fTemp1 * fTemp56)))))) + (fSlow153 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp57)):(iSlow2?(fSlow4 * (fTemp3 * fTemp57)):(fSlow4 * (fTemp1 * fTemp57)))))) + (fSlow155 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp58)):(iSlow2?(fSlow4 * (fTemp3 * fTemp58)):(fSlow4 * (fTemp1 * fTemp58)))))) + (fSlow157 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp59)):(iSlow2?(fSlow4 * (fTemp3 * fTemp59)):(fSlow4 * (fTemp1 * fTemp59)))))) + (fSlow159 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp60)):(iSlow2?(fSlow4 * (fTemp3 * fTemp60)):(fSlow4 * (fTemp1 * fTemp60)))))) + (fSlow162 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp61)):(iSlow2?(fSlow4 * (fTemp3 * fTemp61)):(fSlow4 * (fTemp1 * fTemp61)))))) + (fSlow164 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp62)):(iSlow2?(fSlow4 * (fTemp3 * fTemp62)):(fSlow4 * (fTemp1 * fTemp62)))))) + (fSlow166 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp63)):(iSlow2?(fSlow4 * (fTemp3 * fTemp63)):(fSlow4 * (fTemp1 * fTemp63)))))) + (fSlow168 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp64)):(iSlow2?(fSlow4 * (fTemp3 * fTemp64)):(fSlow4 * (fTemp1 * fTemp64)))))) + (fSlow171 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp65)):(iSlow2?(fSlow4 * (fTemp3 * fTemp65)):(fSlow4 * (fTemp1 * fTemp65)))))) + (fSlow173 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp66)):(iSlow2?(fSlow4 * (fTemp3 * fTemp66)):(fSlow4 * (fTemp1 * fTemp66))))))) + ((fSlow181 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp67)):(iSlow2?(fSlow4 * (fTemp3 * fTemp67)):(fSlow4 * (fTemp1 * fTemp67))))) + ((fSlow15 * ((((fSlow183 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp68)):(iSlow2?(fSlow4 * (fTemp3 * fTemp68)):(fSlow4 * (fTemp1 * fTemp68))))) + (fSlow185 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp69)):(iSlow2?(fSlow4 * (fTemp3 * fTemp69)):(fSlow4 * (fTemp1 * fTemp69)))))) + (fSlow188 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp70)):(iSlow2?(fSlow4 * (fTemp3 * fTemp70)):(fSlow4 * (fTemp1 * fTemp70)))))) + (fSlow190 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp71)):(iSlow2?(fSlow4 * (fTemp3 * fTemp71)):(fSlow4 * (fTemp1 * fTemp71))))))) + (((((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow191 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp72)):(iSlow2?(fSlow4 * (fTemp3 * fTemp72)):(fSlow4 * (fTemp1 * fTemp72)))))) + (fSlow192 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp73)):(iSlow2?(fSlow4 * (fTemp3 * fTemp73)):(fSlow4 * (fTemp1 * fTemp73)))))) + (fSlow193 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp74)):(iSlow2?(fSlow4 * (fTemp3 * fTemp74)):(fSlow4 * (fTemp1 * fTemp74)))))) + (fSlow10 * ((((((((1.7320508075688772 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp75)):(iSlow2?(fSlow4 * (fTemp3 * fTemp75)):(fSlow4 * (fTemp1 * fTemp75))))) + (fSlow194 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp76)):(iSlow2?(fSlow4 * (fTemp3 * fTemp76)):(fSlow4 * (fTemp1 * fTemp76)))))) + (fSlow196 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp77)):(iSlow2?(fSlow4 * (fTemp3 * fTemp77)):(fSlow4 * (fTemp1 * fTemp77)))))) + (fSlow197 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp78)):(iSlow2?(fSlow4 * (fTemp3 * fTemp78)):(fSlow4 * (fTemp1 * fTemp78)))))) + (fSlow199 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp79)):(iSlow2?(fSlow4 * (fTemp3 * fTemp79)):(fSlow4 * (fTemp1 * fTemp79)))))) + (fSlow201 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp80)):(iSlow2?(fSlow4 * (fTemp3 * fTemp80)):(fSlow4 * (fTemp1 * fTemp80)))))) + (fSlow202 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp81)):(iSlow2?(fSlow4 * (fTemp3 * fTemp81)):(fSlow4 * (fTemp1 * fTemp81)))))) + (fSlow204 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp82)):(iSlow2?(fSlow4 * (fTemp3 * fTemp82)):(fSlow4 * (fTemp1 * fTemp82))))))))))))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp83))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp51):(iSlow2?(fSlow4 * (fRec1[0] * fTemp51)):(fSlow4 * (fRec0[0] * fTemp51)))) + (fSlow205 * fTemp83))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp75):(iSlow2?(fSlow4 * (fRec1[0] * fTemp75)):(fSlow4 * (fRec0[0] * fTemp75)))) + (fSlow206 * fTemp83))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp52):(iSlow2?(fSlow4 * (fRec1[0] * fTemp52)):(fSlow4 * (fRec0[0] * fTemp52)))) + (fSlow207 * fTemp83))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow208 * fTemp83))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp53):(iSlow2?(fSlow4 * (fRec1[0] * fTemp53)):(fSlow4 * (fRec0[0] * fTemp53)))) + (fSlow209 * fTemp83))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp72):(iSlow2?(fSlow4 * (fRec1[0] * fTemp72)):(fSlow4 * (fRec0[0] * fTemp72)))) + (fSlow210 * fTemp83))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp54):(iSlow2?(fSlow4 * (fRec1[0] * fTemp54)):(fSlow4 * (fRec0[0] * fTemp54)))) + (fSlow211 * fTemp83))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow212 * fTemp83))); + output9[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp39):(iSlow2?(fSlow4 * (fRec1[0] * fTemp39)):(fSlow4 * (fRec0[0] * fTemp39)))) + (fSlow213 * fTemp83))); + output10[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow214 * fTemp83))); + output11[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp55):(iSlow2?(fSlow4 * (fRec1[0] * fTemp55)):(fSlow4 * (fRec0[0] * fTemp55)))) + (fSlow215 * fTemp83))); + output12[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp76):(iSlow2?(fSlow4 * (fRec1[0] * fTemp76)):(fSlow4 * (fRec0[0] * fTemp76)))) + (fSlow216 * fTemp83))); + output13[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp56):(iSlow2?(fSlow4 * (fRec1[0] * fTemp56)):(fSlow4 * (fRec0[0] * fTemp56)))) + (fSlow217 * fTemp83))); + output14[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow218 * fTemp83))); + output15[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp40):(iSlow2?(fSlow4 * (fRec1[0] * fTemp40)):(fSlow4 * (fRec0[0] * fTemp40)))) + (fSlow219 * fTemp83))); + output16[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow220 * fTemp83))); + output17[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp41):(iSlow2?(fSlow4 * (fRec1[0] * fTemp41)):(fSlow4 * (fRec0[0] * fTemp41)))) + (fSlow221 * fTemp83))); + output18[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow222 * fTemp83))); + output19[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp57):(iSlow2?(fSlow4 * (fRec1[0] * fTemp57)):(fSlow4 * (fRec0[0] * fTemp57)))) + (fSlow223 * fTemp83))); + output20[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp73):(iSlow2?(fSlow4 * (fRec1[0] * fTemp73)):(fSlow4 * (fRec0[0] * fTemp73)))) + (fSlow224 * fTemp83))); + output21[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp58):(iSlow2?(fSlow4 * (fRec1[0] * fTemp58)):(fSlow4 * (fRec0[0] * fTemp58)))) + (fSlow225 * fTemp83))); + output22[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow226 * fTemp83))); + output23[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp42):(iSlow2?(fSlow4 * (fRec1[0] * fTemp42)):(fSlow4 * (fRec0[0] * fTemp42)))) + (fSlow227 * fTemp83))); + output24[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow228 * fTemp83))); + output25[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp31):(iSlow2?(fSlow4 * (fRec1[0] * fTemp31)):(fSlow4 * (fRec0[0] * fTemp31)))) + (fSlow229 * fTemp83))); + output26[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp77):(iSlow2?(fSlow4 * (fRec1[0] * fTemp77)):(fSlow4 * (fRec0[0] * fTemp77)))) + (fSlow230 * fTemp83))); + output27[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp43):(iSlow2?(fSlow4 * (fRec1[0] * fTemp43)):(fSlow4 * (fRec0[0] * fTemp43)))) + (fSlow231 * fTemp83))); + output28[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp11):(iSlow2?(fSlow4 * (fRec1[0] * fTemp11)):(fSlow4 * (fRec0[0] * fTemp11)))) + (fSlow232 * fTemp83))); + output29[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp59):(iSlow2?(fSlow4 * (fRec1[0] * fTemp59)):(fSlow4 * (fRec0[0] * fTemp59)))) + (fSlow233 * fTemp83))); + output30[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp78):(iSlow2?(fSlow4 * (fRec1[0] * fTemp78)):(fSlow4 * (fRec0[0] * fTemp78)))) + (fSlow234 * fTemp83))); + output31[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp60):(iSlow2?(fSlow4 * (fRec1[0] * fTemp60)):(fSlow4 * (fRec0[0] * fTemp60)))) + (fSlow235 * fTemp83))); + output32[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp12):(iSlow2?(fSlow4 * (fRec1[0] * fTemp12)):(fSlow4 * (fRec0[0] * fTemp12)))) + (fSlow236 * fTemp83))); + output33[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp44):(iSlow2?(fSlow4 * (fRec1[0] * fTemp44)):(fSlow4 * (fRec0[0] * fTemp44)))) + (fSlow237 * fTemp83))); + output34[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp79):(iSlow2?(fSlow4 * (fRec1[0] * fTemp79)):(fSlow4 * (fRec0[0] * fTemp79)))) + (fSlow238 * fTemp83))); + output35[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp32):(iSlow2?(fSlow4 * (fRec1[0] * fTemp32)):(fSlow4 * (fRec0[0] * fTemp32)))) + (fSlow239 * fTemp83))); + output36[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp13):(iSlow2?(fSlow4 * (fRec1[0] * fTemp13)):(fSlow4 * (fRec0[0] * fTemp13)))) + (fSlow240 * fTemp83))); + output37[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp33):(iSlow2?(fSlow4 * (fRec1[0] * fTemp33)):(fSlow4 * (fRec0[0] * fTemp33)))) + (fSlow241 * fTemp83))); + output38[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp14):(iSlow2?(fSlow4 * (fRec1[0] * fTemp14)):(fSlow4 * (fRec0[0] * fTemp14)))) + (fSlow242 * fTemp83))); + output39[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp45):(iSlow2?(fSlow4 * (fRec1[0] * fTemp45)):(fSlow4 * (fRec0[0] * fTemp45)))) + (fSlow243 * fTemp83))); + output40[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp15):(iSlow2?(fSlow4 * (fRec1[0] * fTemp15)):(fSlow4 * (fRec0[0] * fTemp15)))) + (fSlow244 * fTemp83))); + output41[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp61):(iSlow2?(fSlow4 * (fRec1[0] * fTemp61)):(fSlow4 * (fRec0[0] * fTemp61)))) + (fSlow245 * fTemp83))); + output42[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp74):(iSlow2?(fSlow4 * (fRec1[0] * fTemp74)):(fSlow4 * (fRec0[0] * fTemp74)))) + (fSlow246 * fTemp83))); + output43[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp62):(iSlow2?(fSlow4 * (fRec1[0] * fTemp62)):(fSlow4 * (fRec0[0] * fTemp62)))) + (fSlow247 * fTemp83))); + output44[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp16):(iSlow2?(fSlow4 * (fRec1[0] * fTemp16)):(fSlow4 * (fRec0[0] * fTemp16)))) + (fSlow248 * fTemp83))); + output45[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp46):(iSlow2?(fSlow4 * (fRec1[0] * fTemp46)):(fSlow4 * (fRec0[0] * fTemp46)))) + (fSlow249 * fTemp83))); + output46[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp17):(iSlow2?(fSlow4 * (fRec1[0] * fTemp17)):(fSlow4 * (fRec0[0] * fTemp17)))) + (fSlow250 * fTemp83))); + output47[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp34):(iSlow2?(fSlow4 * (fRec1[0] * fTemp34)):(fSlow4 * (fRec0[0] * fTemp34)))) + (fSlow251 * fTemp83))); + output48[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp18):(iSlow2?(fSlow4 * (fRec1[0] * fTemp18)):(fSlow4 * (fRec0[0] * fTemp18)))) + (fSlow252 * fTemp83))); + output49[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp68):(iSlow2?(fSlow4 * (fRec1[0] * fTemp68)):(fSlow4 * (fRec0[0] * fTemp68)))) + (fSlow253 * fTemp83))); + output50[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp80):(iSlow2?(fSlow4 * (fRec1[0] * fTemp80)):(fSlow4 * (fRec0[0] * fTemp80)))) + (fSlow254 * fTemp83))); + output51[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp35):(iSlow2?(fSlow4 * (fRec1[0] * fTemp35)):(fSlow4 * (fRec0[0] * fTemp35)))) + (fSlow255 * fTemp83))); + output52[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp19):(iSlow2?(fSlow4 * (fRec1[0] * fTemp19)):(fSlow4 * (fRec0[0] * fTemp19)))) + (fSlow256 * fTemp83))); + output53[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp47):(iSlow2?(fSlow4 * (fRec1[0] * fTemp47)):(fSlow4 * (fRec0[0] * fTemp47)))) + (fSlow257 * fTemp83))); + output54[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp69):(iSlow2?(fSlow4 * (fRec1[0] * fTemp69)):(fSlow4 * (fRec0[0] * fTemp69)))) + (fSlow258 * fTemp83))); + output55[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp63):(iSlow2?(fSlow4 * (fRec1[0] * fTemp63)):(fSlow4 * (fRec0[0] * fTemp63)))) + (fSlow259 * fTemp83))); + output56[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp81):(iSlow2?(fSlow4 * (fRec1[0] * fTemp81)):(fSlow4 * (fRec0[0] * fTemp81)))) + (fSlow260 * fTemp83))); + output57[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp64):(iSlow2?(fSlow4 * (fRec1[0] * fTemp64)):(fSlow4 * (fRec0[0] * fTemp64)))) + (fSlow261 * fTemp83))); + output58[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp20):(iSlow2?(fSlow4 * (fRec1[0] * fTemp20)):(fSlow4 * (fRec0[0] * fTemp20)))) + (fSlow262 * fTemp83))); + output59[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp48):(iSlow2?(fSlow4 * (fRec1[0] * fTemp48)):(fSlow4 * (fRec0[0] * fTemp48)))) + (fSlow263 * fTemp83))); + output60[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp82):(iSlow2?(fSlow4 * (fRec1[0] * fTemp82)):(fSlow4 * (fRec0[0] * fTemp82)))) + (fSlow264 * fTemp83))); + output61[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp36):(iSlow2?(fSlow4 * (fRec1[0] * fTemp36)):(fSlow4 * (fRec0[0] * fTemp36)))) + (fSlow265 * fTemp83))); + output62[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp21):(iSlow2?(fSlow4 * (fRec1[0] * fTemp21)):(fSlow4 * (fRec0[0] * fTemp21)))) + (fSlow266 * fTemp83))); + output63[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp28):(iSlow2?(fSlow4 * (fRec1[0] * fTemp28)):(fSlow4 * (fRec0[0] * fTemp28)))) + (fSlow267 * fTemp83))); + output64[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp70):(iSlow2?(fSlow4 * (fRec1[0] * fTemp70)):(fSlow4 * (fRec0[0] * fTemp70)))) + (fSlow268 * fTemp83))); + output65[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp29):(iSlow2?(fSlow4 * (fRec1[0] * fTemp29)):(fSlow4 * (fRec0[0] * fTemp29)))) + (fSlow269 * fTemp83))); + output66[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp22):(iSlow2?(fSlow4 * (fRec1[0] * fTemp22)):(fSlow4 * (fRec0[0] * fTemp22)))) + (fSlow270 * fTemp83))); + output67[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp37):(iSlow2?(fSlow4 * (fRec1[0] * fTemp37)):(fSlow4 * (fRec0[0] * fTemp37)))) + (fSlow271 * fTemp83))); + output68[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp71):(iSlow2?(fSlow4 * (fRec1[0] * fTemp71)):(fSlow4 * (fRec0[0] * fTemp71)))) + (fSlow272 * fTemp83))); + output69[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp49):(iSlow2?(fSlow4 * (fRec1[0] * fTemp49)):(fSlow4 * (fRec0[0] * fTemp49)))) + (fSlow273 * fTemp83))); + output70[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp23):(iSlow2?(fSlow4 * (fRec1[0] * fTemp23)):(fSlow4 * (fRec0[0] * fTemp23)))) + (fSlow274 * fTemp83))); + output71[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp65):(iSlow2?(fSlow4 * (fRec1[0] * fTemp65)):(fSlow4 * (fRec0[0] * fTemp65)))) + (fSlow275 * fTemp83))); + output72[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp67):(iSlow2?(fSlow4 * (fRec1[0] * fTemp67)):(fSlow4 * (fRec0[0] * fTemp67)))) + (fSlow276 * fTemp83))); + output73[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp66):(iSlow2?(fSlow4 * (fRec1[0] * fTemp66)):(fSlow4 * (fRec0[0] * fTemp66)))) + (fSlow277 * fTemp83))); + output74[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp24):(iSlow2?(fSlow4 * (fRec1[0] * fTemp24)):(fSlow4 * (fRec0[0] * fTemp24)))) + (fSlow278 * fTemp83))); + output75[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp50):(iSlow2?(fSlow4 * (fRec1[0] * fTemp50)):(fSlow4 * (fRec0[0] * fTemp50)))) + (fSlow279 * fTemp83))); + output76[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp25):(iSlow2?(fSlow4 * (fRec1[0] * fTemp25)):(fSlow4 * (fRec0[0] * fTemp25)))) + (fSlow280 * fTemp83))); + output77[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp38):(iSlow2?(fSlow4 * (fRec1[0] * fTemp38)):(fSlow4 * (fRec0[0] * fTemp38)))) + (fSlow281 * fTemp83))); + output78[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp26):(iSlow2?(fSlow4 * (fRec1[0] * fTemp26)):(fSlow4 * (fRec0[0] * fTemp26)))) + (fSlow282 * fTemp83))); + output79[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp30):(iSlow2?(fSlow4 * (fRec1[0] * fTemp30)):(fSlow4 * (fRec0[0] * fTemp30)))) + (fSlow283 * fTemp83))); + output80[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp27):(iSlow2?(fSlow4 * (fRec1[0] * fTemp27)):(fSlow4 * (fRec0[0] * fTemp27)))) + (fSlow284 * fTemp83))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamDirac2HOA9.cpp b/source/HOAUGens/HOABeamDirac2HOA9.cpp index 7e1bb1ce36..668a8b00ca 100644 --- a/source/HOAUGens/HOABeamDirac2HOA9.cpp +++ b/source/HOAUGens/HOABeamDirac2HOA9.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamDirac2HOA9" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -645,6 +645,7 @@ class mydsp : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fCheckbox1; int fSamplingFreq; double fConst0; double fConst1; @@ -653,6 +654,7 @@ class mydsp : public dsp { double fRec1[2]; FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; + FAUSTFLOAT fVslider2; double fRec2[2]; double fRec3[2]; double fRec4[2]; @@ -661,7 +663,7 @@ class mydsp : public dsp { double fConst4; double fConst5; double fConst6; - FAUSTFLOAT fVslider2; + FAUSTFLOAT fVslider3; double fConst7; double fConst8; double fConst9; @@ -859,6 +861,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamDirac2HOA9"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -1931,10 +1934,12 @@ class mydsp : public dsp { virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0); + fCheckbox1 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0); fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fVslider3 = FAUSTFLOAT(0.0); } @@ -1984,18 +1989,22 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("Parameters"); ui_interface->declare(0, "2", ""); ui_interface->openVerticalBox("On/Off"); - ui_interface->addCheckButton("On", &fCheckbox0); + ui_interface->addCheckButton("On", &fCheckbox1); ui_interface->closeBox(); ui_interface->declare(&fEntry0, "3", ""); ui_interface->declare(&fEntry0, "unit", "s"); ui_interface->addNumEntry("Crossfade", &fEntry0, 1.0, 0.10000000000000001, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider1, "4", ""); - ui_interface->declare(&fVslider1, "unit", "dB"); - ui_interface->addVerticalSlider("Gain", &fVslider1, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fVslider2, "5", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider0, "6", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider0, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fVslider2, "4", ""); + ui_interface->declare(&fVslider2, "unit", "dB"); + ui_interface->addVerticalSlider("Gain", &fVslider2, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fVslider3, "5", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "6", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->declare(&fCheckbox0, "7", ""); + ui_interface->addCheckButton("Timer/Manual", &fCheckbox0); + ui_interface->declare(&fVslider0, "8", ""); + ui_interface->addVerticalSlider("Focus", &fVslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->closeBox(); } @@ -2201,363 +2210,366 @@ class mydsp : public dsp { FAUSTFLOAT* output97 = outputs[97]; FAUSTFLOAT* output98 = outputs[98]; FAUSTFLOAT* output99 = outputs[99]; - double fSlow0 = double(fCheckbox0); - int iSlow1 = int(fSlow0); - double fSlow2 = double(fEntry0); - double fSlow3 = (fConst1 / fSlow2); - int iSlow4 = (fSlow0 > 0.0); - double fSlow5 = (fConst0 * fSlow2); - int iSlow6 = ((1.0 - fSlow0) > 0.0); - double fSlow7 = sin(double(fVslider0)); - double fSlow8 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow9 = mydsp_faustpower2_f(fSlow7); - double fSlow10 = ((3.0 * fSlow9) + -1.0); - double fSlow11 = ((2.5 * fSlow10) + -2.0); - double fSlow12 = (0.88191710368819687 * fSlow11); - double fSlow13 = double(fVslider2); - double fSlow14 = cos(fSlow13); - double fSlow15 = mydsp_faustpower2_f(fSlow14); - double fSlow16 = ((4.0 * fSlow15) + -1.0); - double fSlow17 = (fSlow16 + -1.0); - double fSlow18 = (fSlow17 * fSlow14); - double fSlow19 = (1.0 - fSlow9); - double fSlow20 = mydsp_faustpower2_f(fSlow19); - double fSlow21 = sin(fSlow13); - double fSlow22 = ((fSlow18 * fSlow20) * fSlow21); - double fSlow23 = (fConst6 * fSlow22); - double fSlow24 = ((2.333333333333333 * (fSlow11 * fSlow9)) - (1.5 * fSlow10)); - double fSlow25 = ((2.25 * fSlow24) - (1.3333333333333333 * fSlow11)); - double fSlow26 = (0.66332495807108005 * fSlow25); - double fSlow27 = ((2.0 * fSlow15) + -1.0); - double fSlow28 = ((2.0 * fSlow27) + -1.0); - double fSlow29 = (1.0 - fSlow28); - double fSlow30 = (1.0 - (2.0 * (fSlow29 * fSlow15))); - double fSlow31 = (fSlow30 * fSlow20); - double fSlow32 = (fConst7 * fSlow31); - double fSlow33 = (1.0 - fSlow17); - double fSlow34 = (1.0 - (4.0 * (fSlow33 * fSlow15))); - double fSlow35 = (fSlow17 - fSlow34); - double fSlow36 = (0.0 - (2.0 * (fSlow35 * fSlow14))); - double fSlow37 = mydsp_faustpower3_f(fSlow19); - double fSlow38 = ((fSlow36 * fSlow37) * fSlow21); - double fSlow39 = (fConst11 * fSlow38); - double fSlow40 = ((2.2000000000000002 * (fSlow25 * fSlow9)) - (1.25 * fSlow24)); - double fSlow41 = ((2.1666666666666665 * fSlow40) - (1.2000000000000002 * fSlow25)); - double fSlow42 = (0.55328333517248807 * fSlow41); - double fSlow43 = ((893.67630033964599 * fSlow9) + -81.24330003087691); - double fSlow44 = ((6.5 * fSlow43) + -812.43300030876912); - double fSlow45 = (fSlow30 * fSlow44); - double fSlow46 = (fConst15 * (fSlow45 * fSlow20)); - double fSlow47 = ((2.0 * fSlow36) + (4.0 * (fSlow33 * fSlow14))); - double fSlow48 = ((fSlow47 * fSlow14) + -1.0); - double fSlow49 = ((fSlow35 + fSlow48) * fSlow14); - double fSlow50 = mydsp_faustpower4_f(fSlow19); - double fSlow51 = (fSlow49 * fSlow50); - double fSlow52 = (fSlow51 * fSlow21); - double fSlow53 = (fConst18 * fSlow52); - double fSlow54 = ((78.986541696685876 * fSlow9) + -11.283791670955125); - double fSlow55 = ((4.5 * fSlow54) + -67.702750025730751); - double fSlow56 = ((3.6666666666666665 * (fSlow55 * fSlow9)) - (3.5 * fSlow54)); - double fSlow57 = ((3.25 * fSlow56) - (2.6666666666666665 * fSlow55)); - double fSlow58 = ((3.0 * (fSlow57 * fSlow9)) - (2.25 * fSlow56)); - double fSlow59 = ((2.833333333333333 * fSlow58) - (2.0 * fSlow57)); - double fSlow60 = (fSlow59 * fSlow14); - double fSlow61 = (fConst22 * ((fSlow60 * fSlow19) * fSlow21)); - double fSlow62 = ((2.1428571428571428 * (fSlow41 * fSlow9)) - (1.1666666666666665 * fSlow40)); - double fSlow63 = ((2.125 * fSlow62) - (1.1428571428571428 * fSlow41)); - double fSlow64 = (0.48432210483785265 * fSlow63); - double fSlow65 = ((5.0 * (fSlow44 * fSlow9)) - (5.5 * fSlow43)); - double fSlow66 = ((4.25 * fSlow65) - (4.0 * fSlow44)); - double fSlow67 = (fSlow30 * fSlow66); - double fSlow68 = (fConst25 * (fSlow67 * fSlow20)); - double fSlow69 = ((2.0 * fSlow30) - fSlow28); - double fSlow70 = (fSlow29 + fSlow69); - double fSlow71 = ((2.0 * (fSlow70 * fSlow15)) + -1.0); - double fSlow72 = ((2.0 * fSlow71) - fSlow69); - double fSlow73 = (1.0 - (2.0 * ((fSlow70 - fSlow72) * fSlow15))); - double fSlow74 = (fSlow73 * fSlow50); - double fSlow75 = (fConst26 * fSlow74); - double fSlow76 = pow(fSlow19, 3.5); - double fSlow77 = (fConst27 * fSlow76); - double fSlow78 = (fSlow72 * fSlow14); - double fSlow79 = (fConst31 * fSlow78); - double fSlow80 = (fSlow48 * fSlow7); - double fSlow81 = (fConst34 * (fSlow80 * fSlow21)); - double fSlow82 = (fSlow78 * fSlow7); - double fSlow83 = (fConst34 * fSlow82); - double fSlow84 = ((18415.148006998763 * fSlow9) + -1083.244000411692); - double fSlow85 = (fSlow48 * fSlow84); - double fSlow86 = (fConst38 * (fSlow85 * fSlow21)); - double fSlow87 = ((fSlow72 * fSlow84) * fSlow14); - double fSlow88 = (fConst38 * fSlow87); - double fSlow89 = (6.3830764864229232 * (fSlow14 * fSlow21)); - double fSlow90 = (3.1915382432114616 * fSlow27); - double fSlow91 = (fSlow14 * fSlow7); - double fSlow92 = (fConst42 * (fSlow91 * fSlow21)); - double fSlow93 = (fSlow27 * fSlow7); - double fSlow94 = (fConst43 * fSlow93); - double fSlow95 = (fConst46 * ((fSlow18 * fSlow19) * fSlow21)); - double fSlow96 = (fSlow54 * fSlow14); - double fSlow97 = (fConst49 * (fSlow96 * fSlow21)); - double fSlow98 = (fSlow27 * fSlow54); - double fSlow99 = (fConst50 * fSlow98); - double fSlow100 = (fConst51 * (fSlow30 * fSlow19)); - double fSlow101 = ((fSlow55 * fSlow14) * fSlow7); - double fSlow102 = (fConst53 * (fSlow101 * fSlow21)); - double fSlow103 = ((fSlow27 * fSlow55) * fSlow7); - double fSlow104 = (fConst54 * fSlow103); - double fSlow105 = (fConst57 * ((fSlow36 * fSlow20) * fSlow21)); - double fSlow106 = ((fSlow17 * fSlow43) * fSlow14); - double fSlow107 = (fConst60 * ((fSlow106 * fSlow19) * fSlow21)); - double fSlow108 = (fSlow56 * fSlow14); - double fSlow109 = (fConst62 * (fSlow108 * fSlow21)); - double fSlow110 = (fSlow27 * fSlow56); - double fSlow111 = (fConst63 * fSlow110); - double fSlow112 = (fSlow30 * fSlow43); - double fSlow113 = (fConst64 * (fSlow112 * fSlow19)); - double fSlow114 = (fConst57 * (fSlow71 * fSlow20)); - double fSlow115 = (((fSlow17 * fSlow44) * fSlow14) * fSlow7); - double fSlow116 = (fConst65 * ((fSlow115 * fSlow19) * fSlow21)); - double fSlow117 = ((fSlow27 * fSlow57) * fSlow7); - double fSlow118 = (fConst67 * fSlow117); - double fSlow119 = (fSlow71 * fSlow7); - double fSlow120 = (fConst11 * (fSlow119 * fSlow20)); - double fSlow121 = ((7041.0860026759983 * fSlow9) + -469.40573351173322); - double fSlow122 = (fSlow36 * fSlow121); - double fSlow123 = (fConst69 * ((fSlow122 * fSlow20) * fSlow21)); - double fSlow124 = (fSlow58 * fSlow14); - double fSlow125 = (fConst71 * (fSlow124 * fSlow21)); - double fSlow126 = (fSlow27 * fSlow58); - double fSlow127 = (fConst72 * fSlow126); - double fSlow128 = (fSlow30 * fSlow65); - double fSlow129 = (fConst74 * (fSlow128 * fSlow19)); - double fSlow130 = (fSlow71 * fSlow121); - double fSlow131 = (fConst69 * (fSlow130 * fSlow20)); - double fSlow132 = (fConst76 * (fSlow73 * fSlow37)); - double fSlow133 = ((8.5 * fSlow121) + -6571.6802691642652); - double fSlow134 = ((fSlow36 * fSlow133) * fSlow7); - double fSlow135 = (fConst78 * ((fSlow134 * fSlow20) * fSlow21)); - double fSlow136 = ((fSlow27 * fSlow59) * fSlow7); - double fSlow137 = (fConst79 * fSlow136); - double fSlow138 = ((fSlow71 * fSlow133) * fSlow7); - double fSlow139 = (fConst78 * (fSlow138 * fSlow20)); - double fSlow140 = pow(fSlow19, 2.5); - double fSlow141 = (fConst80 * fSlow140); - double fSlow142 = (fSlow34 * fSlow21); - double fSlow143 = (fSlow69 * fSlow14); - double fSlow144 = (fSlow34 * fSlow7); - double fSlow145 = (fConst84 * (fSlow144 * fSlow21)); - double fSlow146 = (fSlow143 * fSlow7); - double fSlow147 = (fConst84 * fSlow146); - double fSlow148 = ((2581.7315343145328 * fSlow9) + -198.59473340881021); - double fSlow149 = (fSlow34 * fSlow148); - double fSlow150 = (fConst86 * (fSlow149 * fSlow21)); - double fSlow151 = ((fSlow69 * fSlow148) * fSlow14); - double fSlow152 = (fConst86 * fSlow151); - double fSlow153 = ((7.5 * fSlow148) + -2383.1368009057223); - double fSlow154 = ((fSlow34 * fSlow153) * fSlow7); - double fSlow155 = (fConst88 * (fSlow154 * fSlow21)); - double fSlow156 = (((fSlow69 * fSlow153) * fSlow14) * fSlow7); - double fSlow157 = (fConst88 * fSlow156); - double fSlow158 = ((5.6666666666666661 * (fSlow153 * fSlow9)) - (6.5 * fSlow148)); - double fSlow159 = (fSlow34 * fSlow158); - double fSlow160 = (fConst90 * (fSlow159 * fSlow21)); - double fSlow161 = ((fSlow69 * fSlow158) * fSlow14); - double fSlow162 = (fConst90 * fSlow161); - double fSlow163 = pow(fSlow19, 1.5); - double fSlow164 = (fConst91 * fSlow163); - double fSlow165 = (fSlow16 * fSlow21); - double fSlow166 = (fSlow28 * fSlow14); - double fSlow167 = (fSlow16 * fSlow7); - double fSlow168 = (fConst95 * (fSlow167 * fSlow21)); - double fSlow169 = (fSlow166 * fSlow7); - double fSlow170 = (fConst95 * fSlow169); - double fSlow171 = ((284.35155010806915 * fSlow9) + -31.594616678674353); - double fSlow172 = (fSlow16 * fSlow171); - double fSlow173 = (fConst97 * (fSlow172 * fSlow21)); - double fSlow174 = ((fSlow28 * fSlow171) * fSlow14); - double fSlow175 = (fConst97 * fSlow174); - double fSlow176 = ((5.5 * fSlow171) + -252.75693342939482); - double fSlow177 = ((fSlow16 * fSlow176) * fSlow7); - double fSlow178 = (fConst99 * (fSlow177 * fSlow21)); - double fSlow179 = (((fSlow28 * fSlow176) * fSlow14) * fSlow7); - double fSlow180 = (fConst99 * fSlow179); - double fSlow181 = ((4.333333333333333 * (fSlow176 * fSlow9)) - (4.5 * fSlow171)); - double fSlow182 = (fSlow16 * fSlow181); - double fSlow183 = (fConst101 * (fSlow182 * fSlow21)); - double fSlow184 = ((fSlow28 * fSlow181) * fSlow14); - double fSlow185 = (fConst101 * fSlow184); - double fSlow186 = ((3.75 * fSlow181) - (3.333333333333333 * fSlow176)); - double fSlow187 = ((fSlow16 * fSlow186) * fSlow7); - double fSlow188 = (fConst103 * (fSlow187 * fSlow21)); - double fSlow189 = (((fSlow28 * fSlow186) * fSlow14) * fSlow7); - double fSlow190 = (fConst103 * fSlow189); - double fSlow191 = ((3.4000000000000004 * (fSlow186 * fSlow9)) - (2.75 * fSlow181)); - double fSlow192 = (fSlow16 * fSlow191); - double fSlow193 = (fConst105 * (fSlow192 * fSlow21)); - double fSlow194 = ((fSlow28 * fSlow191) * fSlow14); - double fSlow195 = (fConst105 * fSlow194); - double fSlow196 = pow(fSlow19, 0.5); - double fSlow197 = (fConst106 * fSlow196); - double fSlow198 = (fConst110 * (fSlow7 * fSlow21)); - double fSlow199 = (fConst110 * fSlow91); - double fSlow200 = ((16.925687506432688 * fSlow9) + -3.3851375012865379); - double fSlow201 = (fConst112 * (fSlow200 * fSlow21)); - double fSlow202 = (fSlow200 * fSlow14); - double fSlow203 = (fConst112 * fSlow202); - double fSlow204 = ((3.5 * fSlow200) + -13.540550005146152); - double fSlow205 = (fSlow204 * fSlow7); - double fSlow206 = (fConst114 * (fSlow205 * fSlow21)); - double fSlow207 = ((fSlow204 * fSlow14) * fSlow7); - double fSlow208 = (fConst114 * fSlow207); - double fSlow209 = ((3.0 * (fSlow204 * fSlow9)) - (2.5 * fSlow200)); - double fSlow210 = (fConst116 * (fSlow209 * fSlow21)); - double fSlow211 = (fSlow209 * fSlow14); - double fSlow212 = (fConst116 * fSlow211); - double fSlow213 = ((2.75 * fSlow209) - (2.0 * fSlow204)); - double fSlow214 = (fSlow213 * fSlow7); - double fSlow215 = (fConst118 * (fSlow214 * fSlow21)); - double fSlow216 = ((fSlow213 * fSlow14) * fSlow7); - double fSlow217 = (fConst118 * fSlow216); - double fSlow218 = ((2.6000000000000001 * (fSlow213 * fSlow9)) - (1.75 * fSlow209)); - double fSlow219 = (fConst120 * (fSlow218 * fSlow21)); - double fSlow220 = (fSlow218 * fSlow14); - double fSlow221 = (fConst120 * fSlow220); - double fSlow222 = ((2.5 * fSlow218) - (1.6000000000000001 * fSlow213)); - double fSlow223 = (fSlow222 * fSlow7); - double fSlow224 = (fConst122 * (fSlow223 * fSlow21)); - double fSlow225 = ((fSlow222 * fSlow14) * fSlow7); - double fSlow226 = (fConst122 * fSlow225); - double fSlow227 = ((2.4285714285714284 * (fSlow222 * fSlow9)) - (1.5 * fSlow218)); - double fSlow228 = (fConst124 * (fSlow227 * fSlow21)); - double fSlow229 = (fSlow227 * fSlow14); - double fSlow230 = (fConst124 * fSlow229); - double fSlow231 = (1.1180339887498949 * fSlow10); - double fSlow232 = (0.75 * fSlow24); - double fSlow233 = (0.60092521257733145 * fSlow40); - double fSlow234 = (0.51538820320220757 * fSlow62); - double fSlow235 = (fSlow48 * fSlow76); - double fSlow236 = (fConst126 * fSlow235); - double fSlow237 = (((fSlow57 * fSlow14) * fSlow7) * fSlow19); - double fSlow238 = (fConst127 * fSlow237); - double fSlow239 = (fConst128 * fSlow51); - double fSlow240 = (((fSlow17 * fSlow65) * fSlow14) * fSlow20); - double fSlow241 = (fConst129 * fSlow240); - double fSlow242 = pow(fSlow19, 4.5); - double fSlow243 = (((((4.0 * fSlow49) - fSlow47) * fSlow14) + 1.0) * fSlow242); - double fSlow244 = (fConst131 * fSlow243); - double fSlow245 = ((((fSlow17 * fSlow66) * fSlow14) * fSlow7) * fSlow20); - double fSlow246 = (fConst132 * fSlow245); - double fSlow247 = ((((2.0 * fSlow73) - fSlow72) * fSlow14) * fSlow242); - double fSlow248 = (fConst131 * fSlow247); - double fSlow249 = (fConst133 * (fSlow196 * fSlow21)); - double fSlow250 = (0.13783222385544802 * fSlow7); - double fSlow251 = (fConst133 * (fSlow14 * fSlow196)); - double fSlow252 = (fConst135 * ((fSlow14 * fSlow19) * fSlow21)); - double fSlow253 = (fConst136 * ((fSlow7 * fSlow196) * fSlow21)); - double fSlow254 = (0.088970317927147144 * fSlow10); - double fSlow255 = (fConst136 * (fSlow91 * fSlow196)); - double fSlow256 = (fConst137 * (fSlow27 * fSlow19)); - double fSlow257 = (fConst138 * ((fSlow16 * fSlow163) * fSlow21)); - double fSlow258 = (fConst140 * ((fSlow91 * fSlow19) * fSlow21)); - double fSlow259 = (fConst141 * ((fSlow200 * fSlow196) * fSlow21)); - double fSlow260 = (0.070180733224632072 * (fSlow11 * fSlow7)); - double fSlow261 = (fConst141 * (fSlow202 * fSlow196)); - double fSlow262 = (fConst142 * (fSlow93 * fSlow19)); - double fSlow263 = (fConst138 * (fSlow166 * fSlow163)); - double fSlow264 = (fConst143 * fSlow22); - double fSlow265 = (fConst144 * ((fSlow167 * fSlow163) * fSlow21)); - double fSlow266 = (fConst145 * ((fSlow96 * fSlow19) * fSlow21)); - double fSlow267 = (fConst146 * ((fSlow205 * fSlow196) * fSlow21)); - double fSlow268 = (0.059683103659460751 * fSlow24); - double fSlow269 = (fConst146 * (fSlow207 * fSlow196)); - double fSlow270 = (fConst147 * (fSlow98 * fSlow19)); - double fSlow271 = (fConst144 * (fSlow169 * fSlow163)); - double fSlow272 = (fConst148 * fSlow31); - double fSlow273 = (fConst149 * ((fSlow34 * fSlow140) * fSlow21)); - double fSlow274 = (fConst150 * (((fSlow18 * fSlow7) * fSlow20) * fSlow21)); - double fSlow275 = (fConst151 * ((fSlow172 * fSlow163) * fSlow21)); - double fSlow276 = (fConst152 * ((fSlow101 * fSlow19) * fSlow21)); - double fSlow277 = (fConst153 * ((fSlow209 * fSlow196) * fSlow21)); - double fSlow278 = (0.052785722976618307 * (fSlow25 * fSlow7)); - double fSlow279 = (fConst153 * (fSlow211 * fSlow196)); - double fSlow280 = (fConst154 * (fSlow103 * fSlow19)); - double fSlow281 = (fConst151 * (fSlow174 * fSlow163)); - double fSlow282 = (fConst155 * ((fSlow30 * fSlow7) * fSlow20)); - double fSlow283 = (fConst149 * (fSlow143 * fSlow140)); - double fSlow284 = (fConst156 * fSlow38); - double fSlow285 = (fConst157 * ((fSlow144 * fSlow140) * fSlow21)); - double fSlow286 = (fConst158 * ((fSlow106 * fSlow20) * fSlow21)); - double fSlow287 = (fConst159 * ((fSlow177 * fSlow163) * fSlow21)); - double fSlow288 = (fConst160 * ((fSlow108 * fSlow19) * fSlow21)); - double fSlow289 = (fConst161 * ((fSlow214 * fSlow196) * fSlow21)); - double fSlow290 = (0.047820109005115151 * fSlow40); - double fSlow291 = (fConst161 * (fSlow216 * fSlow196)); - double fSlow292 = (fConst162 * (fSlow110 * fSlow19)); - double fSlow293 = (fConst159 * (fSlow179 * fSlow163)); - double fSlow294 = (fConst163 * (fSlow112 * fSlow20)); - double fSlow295 = (fConst157 * (fSlow146 * fSlow140)); - double fSlow296 = (fConst156 * (fSlow71 * fSlow37)); - double fSlow297 = (fConst164 * (fSlow235 * fSlow21)); - double fSlow298 = (fConst165 * (((fSlow36 * fSlow7) * fSlow37) * fSlow21)); - double fSlow299 = (fConst166 * ((fSlow149 * fSlow140) * fSlow21)); - double fSlow300 = (fConst167 * ((fSlow115 * fSlow20) * fSlow21)); - double fSlow301 = (fConst168 * ((fSlow182 * fSlow163) * fSlow21)); - double fSlow302 = (fConst169 * (fSlow237 * fSlow21)); - double fSlow303 = (fConst170 * ((fSlow218 * fSlow196) * fSlow21)); - double fSlow304 = (0.044028888861535699 * (fSlow41 * fSlow7)); - double fSlow305 = (fConst170 * (fSlow220 * fSlow196)); - double fSlow306 = (fConst171 * (fSlow117 * fSlow19)); - double fSlow307 = (fConst168 * (fSlow184 * fSlow163)); - double fSlow308 = (fConst172 * ((fSlow45 * fSlow7) * fSlow20)); - double fSlow309 = (fConst166 * (fSlow151 * fSlow140)); - double fSlow310 = (fConst165 * (fSlow119 * fSlow37)); - double fSlow311 = (fConst164 * (fSlow78 * fSlow76)); - double fSlow312 = (fConst173 * fSlow52); - double fSlow313 = (fConst174 * ((fSlow80 * fSlow76) * fSlow21)); - double fSlow314 = (fConst175 * ((fSlow122 * fSlow37) * fSlow21)); - double fSlow315 = (fConst176 * ((fSlow154 * fSlow140) * fSlow21)); - double fSlow316 = (fConst177 * (fSlow240 * fSlow21)); - double fSlow317 = (fConst178 * ((fSlow187 * fSlow163) * fSlow21)); - double fSlow318 = (fConst179 * ((fSlow124 * fSlow19) * fSlow21)); - double fSlow319 = (fConst180 * ((fSlow223 * fSlow196) * fSlow21)); - double fSlow320 = (0.041013290075440773 * fSlow62); - double fSlow321 = (fConst180 * (fSlow225 * fSlow196)); - double fSlow322 = (fConst181 * (fSlow126 * fSlow19)); - double fSlow323 = (fConst178 * (fSlow189 * fSlow163)); - double fSlow324 = (fConst182 * (fSlow128 * fSlow20)); - double fSlow325 = (fConst176 * (fSlow156 * fSlow140)); - double fSlow326 = (fConst175 * (fSlow130 * fSlow37)); - double fSlow327 = (fConst174 * (fSlow82 * fSlow76)); - double fSlow328 = (fConst183 * fSlow74); - double fSlow329 = (fConst184 * (fSlow243 * fSlow21)); - double fSlow330 = (fConst185 * (((fSlow49 * fSlow7) * fSlow50) * fSlow21)); - double fSlow331 = (fConst186 * ((fSlow85 * fSlow76) * fSlow21)); - double fSlow332 = (fConst187 * ((fSlow134 * fSlow37) * fSlow21)); - double fSlow333 = (fConst188 * ((fSlow159 * fSlow140) * fSlow21)); - double fSlow334 = (fConst189 * (fSlow245 * fSlow21)); - double fSlow335 = (fConst190 * ((fSlow192 * fSlow163) * fSlow21)); - double fSlow336 = (fConst191 * (((fSlow60 * fSlow7) * fSlow19) * fSlow21)); - double fSlow337 = (fConst192 * ((fSlow227 * fSlow196) * fSlow21)); - double fSlow338 = (0.038541128516807702 * (fSlow63 * fSlow7)); - double fSlow339 = (fConst192 * (fSlow229 * fSlow196)); - double fSlow340 = (fConst193 * (fSlow136 * fSlow19)); - double fSlow341 = (fConst190 * (fSlow194 * fSlow163)); - double fSlow342 = (fConst194 * ((fSlow67 * fSlow7) * fSlow20)); - double fSlow343 = (fConst188 * (fSlow161 * fSlow140)); - double fSlow344 = (fConst187 * (fSlow138 * fSlow37)); - double fSlow345 = (fConst186 * (fSlow87 * fSlow76)); - double fSlow346 = (fConst195 * ((fSlow73 * fSlow7) * fSlow50)); - double fSlow347 = (fConst184 * fSlow247); + int iSlow0 = int(double(fCheckbox0)); + double fSlow1 = double(fCheckbox1); + int iSlow2 = int(fSlow1); + double fSlow3 = double(fEntry0); + double fSlow4 = (fConst1 / fSlow3); + int iSlow5 = (fSlow1 > 0.0); + double fSlow6 = (fConst0 * fSlow3); + int iSlow7 = ((1.0 - fSlow1) > 0.0); + double fSlow8 = double(fVslider0); + double fSlow9 = (1.0 - fSlow8); + double fSlow10 = sin(double(fVslider1)); + double fSlow11 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider2)))); + double fSlow12 = mydsp_faustpower2_f(fSlow10); + double fSlow13 = ((3.0 * fSlow12) + -1.0); + double fSlow14 = ((2.5 * fSlow13) + -2.0); + double fSlow15 = (0.88191710368819687 * fSlow14); + double fSlow16 = double(fVslider3); + double fSlow17 = cos(fSlow16); + double fSlow18 = mydsp_faustpower2_f(fSlow17); + double fSlow19 = ((4.0 * fSlow18) + -1.0); + double fSlow20 = (fSlow19 + -1.0); + double fSlow21 = (fSlow20 * fSlow17); + double fSlow22 = (1.0 - fSlow12); + double fSlow23 = mydsp_faustpower2_f(fSlow22); + double fSlow24 = sin(fSlow16); + double fSlow25 = ((fSlow21 * fSlow23) * fSlow24); + double fSlow26 = (fConst6 * fSlow25); + double fSlow27 = ((2.333333333333333 * (fSlow14 * fSlow12)) - (1.5 * fSlow13)); + double fSlow28 = ((2.25 * fSlow27) - (1.3333333333333333 * fSlow14)); + double fSlow29 = (0.66332495807108005 * fSlow28); + double fSlow30 = ((2.0 * fSlow18) + -1.0); + double fSlow31 = ((2.0 * fSlow30) + -1.0); + double fSlow32 = (1.0 - fSlow31); + double fSlow33 = (1.0 - (2.0 * (fSlow32 * fSlow18))); + double fSlow34 = (fSlow33 * fSlow23); + double fSlow35 = (fConst7 * fSlow34); + double fSlow36 = (1.0 - fSlow20); + double fSlow37 = (1.0 - (4.0 * (fSlow36 * fSlow18))); + double fSlow38 = (fSlow20 - fSlow37); + double fSlow39 = (0.0 - (2.0 * (fSlow38 * fSlow17))); + double fSlow40 = mydsp_faustpower3_f(fSlow22); + double fSlow41 = ((fSlow39 * fSlow40) * fSlow24); + double fSlow42 = (fConst11 * fSlow41); + double fSlow43 = ((2.2000000000000002 * (fSlow28 * fSlow12)) - (1.25 * fSlow27)); + double fSlow44 = ((2.1666666666666665 * fSlow43) - (1.2000000000000002 * fSlow28)); + double fSlow45 = (0.55328333517248807 * fSlow44); + double fSlow46 = ((893.67630033964599 * fSlow12) + -81.24330003087691); + double fSlow47 = ((6.5 * fSlow46) + -812.43300030876912); + double fSlow48 = (fSlow33 * fSlow47); + double fSlow49 = (fConst15 * (fSlow48 * fSlow23)); + double fSlow50 = ((2.0 * fSlow39) + (4.0 * (fSlow36 * fSlow17))); + double fSlow51 = ((fSlow50 * fSlow17) + -1.0); + double fSlow52 = ((fSlow38 + fSlow51) * fSlow17); + double fSlow53 = mydsp_faustpower4_f(fSlow22); + double fSlow54 = (fSlow52 * fSlow53); + double fSlow55 = (fSlow54 * fSlow24); + double fSlow56 = (fConst18 * fSlow55); + double fSlow57 = ((78.986541696685876 * fSlow12) + -11.283791670955125); + double fSlow58 = ((4.5 * fSlow57) + -67.702750025730751); + double fSlow59 = ((3.6666666666666665 * (fSlow58 * fSlow12)) - (3.5 * fSlow57)); + double fSlow60 = ((3.25 * fSlow59) - (2.6666666666666665 * fSlow58)); + double fSlow61 = ((3.0 * (fSlow60 * fSlow12)) - (2.25 * fSlow59)); + double fSlow62 = ((2.833333333333333 * fSlow61) - (2.0 * fSlow60)); + double fSlow63 = (fSlow62 * fSlow17); + double fSlow64 = (fConst22 * ((fSlow63 * fSlow22) * fSlow24)); + double fSlow65 = ((2.1428571428571428 * (fSlow44 * fSlow12)) - (1.1666666666666665 * fSlow43)); + double fSlow66 = ((2.125 * fSlow65) - (1.1428571428571428 * fSlow44)); + double fSlow67 = (0.48432210483785265 * fSlow66); + double fSlow68 = ((5.0 * (fSlow47 * fSlow12)) - (5.5 * fSlow46)); + double fSlow69 = ((4.25 * fSlow68) - (4.0 * fSlow47)); + double fSlow70 = (fSlow33 * fSlow69); + double fSlow71 = (fConst25 * (fSlow70 * fSlow23)); + double fSlow72 = ((2.0 * fSlow33) - fSlow31); + double fSlow73 = (fSlow32 + fSlow72); + double fSlow74 = ((2.0 * (fSlow73 * fSlow18)) + -1.0); + double fSlow75 = ((2.0 * fSlow74) - fSlow72); + double fSlow76 = (1.0 - (2.0 * ((fSlow73 - fSlow75) * fSlow18))); + double fSlow77 = (fSlow76 * fSlow53); + double fSlow78 = (fConst26 * fSlow77); + double fSlow79 = pow(fSlow22, 3.5); + double fSlow80 = (fConst27 * fSlow79); + double fSlow81 = (fSlow75 * fSlow17); + double fSlow82 = (fConst31 * fSlow81); + double fSlow83 = (fSlow51 * fSlow10); + double fSlow84 = (fConst34 * (fSlow83 * fSlow24)); + double fSlow85 = (fSlow81 * fSlow10); + double fSlow86 = (fConst34 * fSlow85); + double fSlow87 = ((18415.148006998763 * fSlow12) + -1083.244000411692); + double fSlow88 = (fSlow51 * fSlow87); + double fSlow89 = (fConst38 * (fSlow88 * fSlow24)); + double fSlow90 = ((fSlow75 * fSlow87) * fSlow17); + double fSlow91 = (fConst38 * fSlow90); + double fSlow92 = (6.3830764864229232 * (fSlow17 * fSlow24)); + double fSlow93 = (3.1915382432114616 * fSlow30); + double fSlow94 = (fSlow17 * fSlow10); + double fSlow95 = (fConst42 * (fSlow94 * fSlow24)); + double fSlow96 = (fSlow30 * fSlow10); + double fSlow97 = (fConst43 * fSlow96); + double fSlow98 = (fConst46 * ((fSlow21 * fSlow22) * fSlow24)); + double fSlow99 = (fSlow57 * fSlow17); + double fSlow100 = (fConst49 * (fSlow99 * fSlow24)); + double fSlow101 = (fSlow30 * fSlow57); + double fSlow102 = (fConst50 * fSlow101); + double fSlow103 = (fConst51 * (fSlow33 * fSlow22)); + double fSlow104 = ((fSlow58 * fSlow17) * fSlow10); + double fSlow105 = (fConst53 * (fSlow104 * fSlow24)); + double fSlow106 = ((fSlow30 * fSlow58) * fSlow10); + double fSlow107 = (fConst54 * fSlow106); + double fSlow108 = (fConst57 * ((fSlow39 * fSlow23) * fSlow24)); + double fSlow109 = ((fSlow20 * fSlow46) * fSlow17); + double fSlow110 = (fConst60 * ((fSlow109 * fSlow22) * fSlow24)); + double fSlow111 = (fSlow59 * fSlow17); + double fSlow112 = (fConst62 * (fSlow111 * fSlow24)); + double fSlow113 = (fSlow30 * fSlow59); + double fSlow114 = (fConst63 * fSlow113); + double fSlow115 = (fSlow33 * fSlow46); + double fSlow116 = (fConst64 * (fSlow115 * fSlow22)); + double fSlow117 = (fConst57 * (fSlow74 * fSlow23)); + double fSlow118 = (((fSlow20 * fSlow47) * fSlow17) * fSlow10); + double fSlow119 = (fConst65 * ((fSlow118 * fSlow22) * fSlow24)); + double fSlow120 = ((fSlow30 * fSlow60) * fSlow10); + double fSlow121 = (fConst67 * fSlow120); + double fSlow122 = (fSlow74 * fSlow10); + double fSlow123 = (fConst11 * (fSlow122 * fSlow23)); + double fSlow124 = ((7041.0860026759983 * fSlow12) + -469.40573351173322); + double fSlow125 = (fSlow39 * fSlow124); + double fSlow126 = (fConst69 * ((fSlow125 * fSlow23) * fSlow24)); + double fSlow127 = (fSlow61 * fSlow17); + double fSlow128 = (fConst71 * (fSlow127 * fSlow24)); + double fSlow129 = (fSlow30 * fSlow61); + double fSlow130 = (fConst72 * fSlow129); + double fSlow131 = (fSlow33 * fSlow68); + double fSlow132 = (fConst74 * (fSlow131 * fSlow22)); + double fSlow133 = (fSlow74 * fSlow124); + double fSlow134 = (fConst69 * (fSlow133 * fSlow23)); + double fSlow135 = (fConst76 * (fSlow76 * fSlow40)); + double fSlow136 = ((8.5 * fSlow124) + -6571.6802691642652); + double fSlow137 = ((fSlow39 * fSlow136) * fSlow10); + double fSlow138 = (fConst78 * ((fSlow137 * fSlow23) * fSlow24)); + double fSlow139 = ((fSlow30 * fSlow62) * fSlow10); + double fSlow140 = (fConst79 * fSlow139); + double fSlow141 = ((fSlow74 * fSlow136) * fSlow10); + double fSlow142 = (fConst78 * (fSlow141 * fSlow23)); + double fSlow143 = pow(fSlow22, 2.5); + double fSlow144 = (fConst80 * fSlow143); + double fSlow145 = (fSlow37 * fSlow24); + double fSlow146 = (fSlow72 * fSlow17); + double fSlow147 = (fSlow37 * fSlow10); + double fSlow148 = (fConst84 * (fSlow147 * fSlow24)); + double fSlow149 = (fSlow146 * fSlow10); + double fSlow150 = (fConst84 * fSlow149); + double fSlow151 = ((2581.7315343145328 * fSlow12) + -198.59473340881021); + double fSlow152 = (fSlow37 * fSlow151); + double fSlow153 = (fConst86 * (fSlow152 * fSlow24)); + double fSlow154 = ((fSlow72 * fSlow151) * fSlow17); + double fSlow155 = (fConst86 * fSlow154); + double fSlow156 = ((7.5 * fSlow151) + -2383.1368009057223); + double fSlow157 = ((fSlow37 * fSlow156) * fSlow10); + double fSlow158 = (fConst88 * (fSlow157 * fSlow24)); + double fSlow159 = (((fSlow72 * fSlow156) * fSlow17) * fSlow10); + double fSlow160 = (fConst88 * fSlow159); + double fSlow161 = ((5.6666666666666661 * (fSlow156 * fSlow12)) - (6.5 * fSlow151)); + double fSlow162 = (fSlow37 * fSlow161); + double fSlow163 = (fConst90 * (fSlow162 * fSlow24)); + double fSlow164 = ((fSlow72 * fSlow161) * fSlow17); + double fSlow165 = (fConst90 * fSlow164); + double fSlow166 = pow(fSlow22, 1.5); + double fSlow167 = (fConst91 * fSlow166); + double fSlow168 = (fSlow19 * fSlow24); + double fSlow169 = (fSlow31 * fSlow17); + double fSlow170 = (fSlow19 * fSlow10); + double fSlow171 = (fConst95 * (fSlow170 * fSlow24)); + double fSlow172 = (fSlow169 * fSlow10); + double fSlow173 = (fConst95 * fSlow172); + double fSlow174 = ((284.35155010806915 * fSlow12) + -31.594616678674353); + double fSlow175 = (fSlow19 * fSlow174); + double fSlow176 = (fConst97 * (fSlow175 * fSlow24)); + double fSlow177 = ((fSlow31 * fSlow174) * fSlow17); + double fSlow178 = (fConst97 * fSlow177); + double fSlow179 = ((5.5 * fSlow174) + -252.75693342939482); + double fSlow180 = ((fSlow19 * fSlow179) * fSlow10); + double fSlow181 = (fConst99 * (fSlow180 * fSlow24)); + double fSlow182 = (((fSlow31 * fSlow179) * fSlow17) * fSlow10); + double fSlow183 = (fConst99 * fSlow182); + double fSlow184 = ((4.333333333333333 * (fSlow179 * fSlow12)) - (4.5 * fSlow174)); + double fSlow185 = (fSlow19 * fSlow184); + double fSlow186 = (fConst101 * (fSlow185 * fSlow24)); + double fSlow187 = ((fSlow31 * fSlow184) * fSlow17); + double fSlow188 = (fConst101 * fSlow187); + double fSlow189 = ((3.75 * fSlow184) - (3.333333333333333 * fSlow179)); + double fSlow190 = ((fSlow19 * fSlow189) * fSlow10); + double fSlow191 = (fConst103 * (fSlow190 * fSlow24)); + double fSlow192 = (((fSlow31 * fSlow189) * fSlow17) * fSlow10); + double fSlow193 = (fConst103 * fSlow192); + double fSlow194 = ((3.4000000000000004 * (fSlow189 * fSlow12)) - (2.75 * fSlow184)); + double fSlow195 = (fSlow19 * fSlow194); + double fSlow196 = (fConst105 * (fSlow195 * fSlow24)); + double fSlow197 = ((fSlow31 * fSlow194) * fSlow17); + double fSlow198 = (fConst105 * fSlow197); + double fSlow199 = pow(fSlow22, 0.5); + double fSlow200 = (fConst106 * fSlow199); + double fSlow201 = (fConst110 * (fSlow10 * fSlow24)); + double fSlow202 = (fConst110 * fSlow94); + double fSlow203 = ((16.925687506432688 * fSlow12) + -3.3851375012865379); + double fSlow204 = (fConst112 * (fSlow203 * fSlow24)); + double fSlow205 = (fSlow203 * fSlow17); + double fSlow206 = (fConst112 * fSlow205); + double fSlow207 = ((3.5 * fSlow203) + -13.540550005146152); + double fSlow208 = (fSlow207 * fSlow10); + double fSlow209 = (fConst114 * (fSlow208 * fSlow24)); + double fSlow210 = ((fSlow207 * fSlow17) * fSlow10); + double fSlow211 = (fConst114 * fSlow210); + double fSlow212 = ((3.0 * (fSlow207 * fSlow12)) - (2.5 * fSlow203)); + double fSlow213 = (fConst116 * (fSlow212 * fSlow24)); + double fSlow214 = (fSlow212 * fSlow17); + double fSlow215 = (fConst116 * fSlow214); + double fSlow216 = ((2.75 * fSlow212) - (2.0 * fSlow207)); + double fSlow217 = (fSlow216 * fSlow10); + double fSlow218 = (fConst118 * (fSlow217 * fSlow24)); + double fSlow219 = ((fSlow216 * fSlow17) * fSlow10); + double fSlow220 = (fConst118 * fSlow219); + double fSlow221 = ((2.6000000000000001 * (fSlow216 * fSlow12)) - (1.75 * fSlow212)); + double fSlow222 = (fConst120 * (fSlow221 * fSlow24)); + double fSlow223 = (fSlow221 * fSlow17); + double fSlow224 = (fConst120 * fSlow223); + double fSlow225 = ((2.5 * fSlow221) - (1.6000000000000001 * fSlow216)); + double fSlow226 = (fSlow225 * fSlow10); + double fSlow227 = (fConst122 * (fSlow226 * fSlow24)); + double fSlow228 = ((fSlow225 * fSlow17) * fSlow10); + double fSlow229 = (fConst122 * fSlow228); + double fSlow230 = ((2.4285714285714284 * (fSlow225 * fSlow12)) - (1.5 * fSlow221)); + double fSlow231 = (fConst124 * (fSlow230 * fSlow24)); + double fSlow232 = (fSlow230 * fSlow17); + double fSlow233 = (fConst124 * fSlow232); + double fSlow234 = (1.1180339887498949 * fSlow13); + double fSlow235 = (0.75 * fSlow27); + double fSlow236 = (0.60092521257733145 * fSlow43); + double fSlow237 = (0.51538820320220757 * fSlow65); + double fSlow238 = (fSlow51 * fSlow79); + double fSlow239 = (fConst126 * fSlow238); + double fSlow240 = (((fSlow60 * fSlow17) * fSlow10) * fSlow22); + double fSlow241 = (fConst127 * fSlow240); + double fSlow242 = (fConst128 * fSlow54); + double fSlow243 = (((fSlow20 * fSlow68) * fSlow17) * fSlow23); + double fSlow244 = (fConst129 * fSlow243); + double fSlow245 = pow(fSlow22, 4.5); + double fSlow246 = (((((4.0 * fSlow52) - fSlow50) * fSlow17) + 1.0) * fSlow245); + double fSlow247 = (fConst131 * fSlow246); + double fSlow248 = ((((fSlow20 * fSlow69) * fSlow17) * fSlow10) * fSlow23); + double fSlow249 = (fConst132 * fSlow248); + double fSlow250 = ((((2.0 * fSlow76) - fSlow75) * fSlow17) * fSlow245); + double fSlow251 = (fConst131 * fSlow250); + double fSlow252 = (fConst133 * (fSlow199 * fSlow24)); + double fSlow253 = (0.13783222385544802 * fSlow10); + double fSlow254 = (fConst133 * (fSlow17 * fSlow199)); + double fSlow255 = (fConst135 * ((fSlow17 * fSlow22) * fSlow24)); + double fSlow256 = (fConst136 * ((fSlow10 * fSlow199) * fSlow24)); + double fSlow257 = (0.088970317927147144 * fSlow13); + double fSlow258 = (fConst136 * (fSlow94 * fSlow199)); + double fSlow259 = (fConst137 * (fSlow30 * fSlow22)); + double fSlow260 = (fConst138 * ((fSlow19 * fSlow166) * fSlow24)); + double fSlow261 = (fConst140 * ((fSlow94 * fSlow22) * fSlow24)); + double fSlow262 = (fConst141 * ((fSlow203 * fSlow199) * fSlow24)); + double fSlow263 = (0.070180733224632072 * (fSlow14 * fSlow10)); + double fSlow264 = (fConst141 * (fSlow205 * fSlow199)); + double fSlow265 = (fConst142 * (fSlow96 * fSlow22)); + double fSlow266 = (fConst138 * (fSlow169 * fSlow166)); + double fSlow267 = (fConst143 * fSlow25); + double fSlow268 = (fConst144 * ((fSlow170 * fSlow166) * fSlow24)); + double fSlow269 = (fConst145 * ((fSlow99 * fSlow22) * fSlow24)); + double fSlow270 = (fConst146 * ((fSlow208 * fSlow199) * fSlow24)); + double fSlow271 = (0.059683103659460751 * fSlow27); + double fSlow272 = (fConst146 * (fSlow210 * fSlow199)); + double fSlow273 = (fConst147 * (fSlow101 * fSlow22)); + double fSlow274 = (fConst144 * (fSlow172 * fSlow166)); + double fSlow275 = (fConst148 * fSlow34); + double fSlow276 = (fConst149 * ((fSlow37 * fSlow143) * fSlow24)); + double fSlow277 = (fConst150 * (((fSlow21 * fSlow10) * fSlow23) * fSlow24)); + double fSlow278 = (fConst151 * ((fSlow175 * fSlow166) * fSlow24)); + double fSlow279 = (fConst152 * ((fSlow104 * fSlow22) * fSlow24)); + double fSlow280 = (fConst153 * ((fSlow212 * fSlow199) * fSlow24)); + double fSlow281 = (0.052785722976618307 * (fSlow28 * fSlow10)); + double fSlow282 = (fConst153 * (fSlow214 * fSlow199)); + double fSlow283 = (fConst154 * (fSlow106 * fSlow22)); + double fSlow284 = (fConst151 * (fSlow177 * fSlow166)); + double fSlow285 = (fConst155 * ((fSlow33 * fSlow10) * fSlow23)); + double fSlow286 = (fConst149 * (fSlow146 * fSlow143)); + double fSlow287 = (fConst156 * fSlow41); + double fSlow288 = (fConst157 * ((fSlow147 * fSlow143) * fSlow24)); + double fSlow289 = (fConst158 * ((fSlow109 * fSlow23) * fSlow24)); + double fSlow290 = (fConst159 * ((fSlow180 * fSlow166) * fSlow24)); + double fSlow291 = (fConst160 * ((fSlow111 * fSlow22) * fSlow24)); + double fSlow292 = (fConst161 * ((fSlow217 * fSlow199) * fSlow24)); + double fSlow293 = (0.047820109005115151 * fSlow43); + double fSlow294 = (fConst161 * (fSlow219 * fSlow199)); + double fSlow295 = (fConst162 * (fSlow113 * fSlow22)); + double fSlow296 = (fConst159 * (fSlow182 * fSlow166)); + double fSlow297 = (fConst163 * (fSlow115 * fSlow23)); + double fSlow298 = (fConst157 * (fSlow149 * fSlow143)); + double fSlow299 = (fConst156 * (fSlow74 * fSlow40)); + double fSlow300 = (fConst164 * (fSlow238 * fSlow24)); + double fSlow301 = (fConst165 * (((fSlow39 * fSlow10) * fSlow40) * fSlow24)); + double fSlow302 = (fConst166 * ((fSlow152 * fSlow143) * fSlow24)); + double fSlow303 = (fConst167 * ((fSlow118 * fSlow23) * fSlow24)); + double fSlow304 = (fConst168 * ((fSlow185 * fSlow166) * fSlow24)); + double fSlow305 = (fConst169 * (fSlow240 * fSlow24)); + double fSlow306 = (fConst170 * ((fSlow221 * fSlow199) * fSlow24)); + double fSlow307 = (0.044028888861535699 * (fSlow44 * fSlow10)); + double fSlow308 = (fConst170 * (fSlow223 * fSlow199)); + double fSlow309 = (fConst171 * (fSlow120 * fSlow22)); + double fSlow310 = (fConst168 * (fSlow187 * fSlow166)); + double fSlow311 = (fConst172 * ((fSlow48 * fSlow10) * fSlow23)); + double fSlow312 = (fConst166 * (fSlow154 * fSlow143)); + double fSlow313 = (fConst165 * (fSlow122 * fSlow40)); + double fSlow314 = (fConst164 * (fSlow81 * fSlow79)); + double fSlow315 = (fConst173 * fSlow55); + double fSlow316 = (fConst174 * ((fSlow83 * fSlow79) * fSlow24)); + double fSlow317 = (fConst175 * ((fSlow125 * fSlow40) * fSlow24)); + double fSlow318 = (fConst176 * ((fSlow157 * fSlow143) * fSlow24)); + double fSlow319 = (fConst177 * (fSlow243 * fSlow24)); + double fSlow320 = (fConst178 * ((fSlow190 * fSlow166) * fSlow24)); + double fSlow321 = (fConst179 * ((fSlow127 * fSlow22) * fSlow24)); + double fSlow322 = (fConst180 * ((fSlow226 * fSlow199) * fSlow24)); + double fSlow323 = (0.041013290075440773 * fSlow65); + double fSlow324 = (fConst180 * (fSlow228 * fSlow199)); + double fSlow325 = (fConst181 * (fSlow129 * fSlow22)); + double fSlow326 = (fConst178 * (fSlow192 * fSlow166)); + double fSlow327 = (fConst182 * (fSlow131 * fSlow23)); + double fSlow328 = (fConst176 * (fSlow159 * fSlow143)); + double fSlow329 = (fConst175 * (fSlow133 * fSlow40)); + double fSlow330 = (fConst174 * (fSlow85 * fSlow79)); + double fSlow331 = (fConst183 * fSlow77); + double fSlow332 = (fConst184 * (fSlow246 * fSlow24)); + double fSlow333 = (fConst185 * (((fSlow52 * fSlow10) * fSlow53) * fSlow24)); + double fSlow334 = (fConst186 * ((fSlow88 * fSlow79) * fSlow24)); + double fSlow335 = (fConst187 * ((fSlow137 * fSlow40) * fSlow24)); + double fSlow336 = (fConst188 * ((fSlow162 * fSlow143) * fSlow24)); + double fSlow337 = (fConst189 * (fSlow248 * fSlow24)); + double fSlow338 = (fConst190 * ((fSlow195 * fSlow166) * fSlow24)); + double fSlow339 = (fConst191 * (((fSlow63 * fSlow10) * fSlow22) * fSlow24)); + double fSlow340 = (fConst192 * ((fSlow230 * fSlow199) * fSlow24)); + double fSlow341 = (0.038541128516807702 * (fSlow66 * fSlow10)); + double fSlow342 = (fConst192 * (fSlow232 * fSlow199)); + double fSlow343 = (fConst193 * (fSlow139 * fSlow22)); + double fSlow344 = (fConst190 * (fSlow197 * fSlow166)); + double fSlow345 = (fConst194 * ((fSlow70 * fSlow10) * fSlow23)); + double fSlow346 = (fConst188 * (fSlow164 * fSlow143)); + double fSlow347 = (fConst187 * (fSlow141 * fSlow40)); + double fSlow348 = (fConst186 * (fSlow90 * fSlow79)); + double fSlow349 = (fConst195 * ((fSlow76 * fSlow10) * fSlow53)); + double fSlow350 = (fConst184 * fSlow250); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (iSlow4?0.0:min(fSlow5, (fRec0[1] + 1.0))); + fRec0[0] = (iSlow5?0.0:min(fSlow6, (fRec0[1] + 1.0))); double fTemp0 = double(input0[i]); - fRec1[0] = (iSlow6?fSlow5:max(0.0, (fRec1[1] + -1.0))); - fRec2[0] = (fSlow8 + (0.999 * fRec2[1])); - fRec3[0] = (iSlow4?fSlow5:max(0.0, (fRec3[1] + -1.0))); + fRec1[0] = (iSlow7?fSlow6:max(0.0, (fRec1[1] + -1.0))); + fRec2[0] = (fSlow11 + (0.999 * fRec2[1])); + fRec3[0] = (iSlow5?fSlow6:max(0.0, (fRec3[1] + -1.0))); double fTemp1 = (fRec2[0] * fRec3[0]); double fTemp2 = double(input2[i]); - fRec4[0] = (iSlow6?0.0:min(fSlow5, (fRec4[1] + 1.0))); + fRec4[0] = (iSlow7?0.0:min(fSlow6, (fRec4[1] + 1.0))); double fTemp3 = (fRec2[0] * fRec4[0]); double fTemp4 = double(input12[i]); double fTemp5 = double(input26[i]); @@ -2657,107 +2669,107 @@ class mydsp : public dsp { double fTemp99 = double(input81[i]); double fTemp100 = double(input86[i]); double fTemp101 = double(input99[i]); - double fTemp102 = (((fSlow7 * (((((((((((((1.7320508075688772 * (iSlow1?(fSlow3 * (fTemp3 * fTemp2)):(fSlow3 * (fTemp1 * fTemp2)))) + (fSlow12 * (iSlow1?(fSlow3 * (fTemp3 * fTemp4)):(fSlow3 * (fTemp1 * fTemp4))))) + (fSlow23 * (iSlow1?(fSlow3 * (fTemp3 * fTemp5)):(fSlow3 * (fTemp1 * fTemp5))))) + (fSlow26 * (iSlow1?(fSlow3 * (fTemp3 * fTemp6)):(fSlow3 * (fTemp1 * fTemp6))))) + (fSlow32 * (iSlow1?(fSlow3 * (fTemp3 * fTemp7)):(fSlow3 * (fTemp1 * fTemp7))))) + (fSlow39 * (iSlow1?(fSlow3 * (fTemp3 * fTemp8)):(fSlow3 * (fTemp1 * fTemp8))))) + (fSlow42 * (iSlow1?(fSlow3 * (fTemp3 * fTemp9)):(fSlow3 * (fTemp1 * fTemp9))))) + (fSlow46 * (iSlow1?(fSlow3 * (fTemp3 * fTemp10)):(fSlow3 * (fTemp1 * fTemp10))))) + (fSlow53 * (iSlow1?(fSlow3 * (fTemp3 * fTemp11)):(fSlow3 * (fTemp1 * fTemp11))))) + (fSlow61 * (iSlow1?(fSlow3 * (fTemp3 * fTemp12)):(fSlow3 * (fTemp1 * fTemp12))))) + (fSlow64 * (iSlow1?(fSlow3 * (fTemp3 * fTemp13)):(fSlow3 * (fTemp1 * fTemp13))))) + (fSlow68 * (iSlow1?(fSlow3 * (fTemp3 * fTemp14)):(fSlow3 * (fTemp1 * fTemp14))))) + (fSlow75 * (iSlow1?(fSlow3 * (fTemp3 * fTemp15)):(fSlow3 * (fTemp1 * fTemp15)))))) + ((fSlow77 * (((((fSlow79 * (iSlow1?(fSlow3 * (fTemp3 * fTemp16)):(fSlow3 * (fTemp1 * fTemp16)))) + (fSlow81 * (iSlow1?(fSlow3 * (fTemp3 * fTemp17)):(fSlow3 * (fTemp1 * fTemp17))))) + (fSlow83 * (iSlow1?(fSlow3 * (fTemp3 * fTemp18)):(fSlow3 * (fTemp1 * fTemp18))))) + (fSlow86 * (iSlow1?(fSlow3 * (fTemp3 * fTemp19)):(fSlow3 * (fTemp1 * fTemp19))))) + (fSlow88 * (iSlow1?(fSlow3 * (fTemp3 * fTemp20)):(fSlow3 * (fTemp1 * fTemp20)))))) + ((fSlow19 * (((((((((((((((((((((((((fConst20 * (((fConst40 * ((fSlow89 * (iSlow1?(fSlow3 * (fTemp3 * fTemp21)):(fSlow3 * (fTemp1 * fTemp21)))) + (fSlow90 * (iSlow1?(fSlow3 * (fTemp3 * fTemp22)):(fSlow3 * (fTemp1 * fTemp22)))))) + (fSlow92 * (iSlow1?(fSlow3 * (fTemp3 * fTemp23)):(fSlow3 * (fTemp1 * fTemp23))))) + (fSlow94 * (iSlow1?(fSlow3 * (fTemp3 * fTemp24)):(fSlow3 * (fTemp1 * fTemp24)))))) + (fSlow95 * (iSlow1?(fSlow3 * (fTemp3 * fTemp25)):(fSlow3 * (fTemp1 * fTemp25))))) + (fSlow97 * (iSlow1?(fSlow3 * (fTemp3 * fTemp26)):(fSlow3 * (fTemp1 * fTemp26))))) + (fSlow99 * (iSlow1?(fSlow3 * (fTemp3 * fTemp27)):(fSlow3 * (fTemp1 * fTemp27))))) + (fSlow100 * (iSlow1?(fSlow3 * (fTemp3 * fTemp28)):(fSlow3 * (fTemp1 * fTemp28))))) + (fSlow102 * (iSlow1?(fSlow3 * (fTemp3 * fTemp29)):(fSlow3 * (fTemp1 * fTemp29))))) + (fSlow104 * (iSlow1?(fSlow3 * (fTemp3 * fTemp30)):(fSlow3 * (fTemp1 * fTemp30))))) + (fSlow105 * (iSlow1?(fSlow3 * (fTemp3 * fTemp31)):(fSlow3 * (fTemp1 * fTemp31))))) + (fSlow107 * (iSlow1?(fSlow3 * (fTemp3 * fTemp32)):(fSlow3 * (fTemp1 * fTemp32))))) + (fSlow109 * (iSlow1?(fSlow3 * (fTemp3 * fTemp33)):(fSlow3 * (fTemp1 * fTemp33))))) + (fSlow111 * (iSlow1?(fSlow3 * (fTemp3 * fTemp34)):(fSlow3 * (fTemp1 * fTemp34))))) + (fSlow113 * (iSlow1?(fSlow3 * (fTemp3 * fTemp35)):(fSlow3 * (fTemp1 * fTemp35))))) + (fSlow114 * (iSlow1?(fSlow3 * (fTemp3 * fTemp36)):(fSlow3 * (fTemp1 * fTemp36))))) + (fSlow116 * (iSlow1?(fSlow3 * (fTemp3 * fTemp37)):(fSlow3 * (fTemp1 * fTemp37))))) + (fSlow118 * (iSlow1?(fSlow3 * (fTemp3 * fTemp38)):(fSlow3 * (fTemp1 * fTemp38))))) + (fSlow120 * (iSlow1?(fSlow3 * (fTemp3 * fTemp39)):(fSlow3 * (fTemp1 * fTemp39))))) + (fSlow123 * (iSlow1?(fSlow3 * (fTemp3 * fTemp40)):(fSlow3 * (fTemp1 * fTemp40))))) + (fSlow125 * (iSlow1?(fSlow3 * (fTemp3 * fTemp41)):(fSlow3 * (fTemp1 * fTemp41))))) + (fSlow127 * (iSlow1?(fSlow3 * (fTemp3 * fTemp42)):(fSlow3 * (fTemp1 * fTemp42))))) + (fSlow129 * (iSlow1?(fSlow3 * (fTemp3 * fTemp43)):(fSlow3 * (fTemp1 * fTemp43))))) + (fSlow131 * (iSlow1?(fSlow3 * (fTemp3 * fTemp44)):(fSlow3 * (fTemp1 * fTemp44))))) + (fSlow132 * (iSlow1?(fSlow3 * (fTemp3 * fTemp45)):(fSlow3 * (fTemp1 * fTemp45))))) + (fSlow135 * (iSlow1?(fSlow3 * (fTemp3 * fTemp46)):(fSlow3 * (fTemp1 * fTemp46))))) + (fSlow137 * (iSlow1?(fSlow3 * (fTemp3 * fTemp47)):(fSlow3 * (fTemp1 * fTemp47))))) + (fSlow139 * (iSlow1?(fSlow3 * (fTemp3 * fTemp48)):(fSlow3 * (fTemp1 * fTemp48)))))) + ((fSlow141 * (((((((((fConst82 * ((fSlow142 * (iSlow1?(fSlow3 * (fTemp3 * fTemp49)):(fSlow3 * (fTemp1 * fTemp49)))) + (fSlow143 * (iSlow1?(fSlow3 * (fTemp3 * fTemp50)):(fSlow3 * (fTemp1 * fTemp50)))))) + (fSlow145 * (iSlow1?(fSlow3 * (fTemp3 * fTemp51)):(fSlow3 * (fTemp1 * fTemp51))))) + (fSlow147 * (iSlow1?(fSlow3 * (fTemp3 * fTemp52)):(fSlow3 * (fTemp1 * fTemp52))))) + (fSlow150 * (iSlow1?(fSlow3 * (fTemp3 * fTemp53)):(fSlow3 * (fTemp1 * fTemp53))))) + (fSlow152 * (iSlow1?(fSlow3 * (fTemp3 * fTemp54)):(fSlow3 * (fTemp1 * fTemp54))))) + (fSlow155 * (iSlow1?(fSlow3 * (fTemp3 * fTemp55)):(fSlow3 * (fTemp1 * fTemp55))))) + (fSlow157 * (iSlow1?(fSlow3 * (fTemp3 * fTemp56)):(fSlow3 * (fTemp1 * fTemp56))))) + (fSlow160 * (iSlow1?(fSlow3 * (fTemp3 * fTemp57)):(fSlow3 * (fTemp1 * fTemp57))))) + (fSlow162 * (iSlow1?(fSlow3 * (fTemp3 * fTemp58)):(fSlow3 * (fTemp1 * fTemp58)))))) + ((fSlow164 * (((((((((((((fConst93 * ((fSlow165 * (iSlow1?(fSlow3 * (fTemp3 * fTemp59)):(fSlow3 * (fTemp1 * fTemp59)))) + (fSlow166 * (iSlow1?(fSlow3 * (fTemp3 * fTemp60)):(fSlow3 * (fTemp1 * fTemp60)))))) + (fSlow168 * (iSlow1?(fSlow3 * (fTemp3 * fTemp61)):(fSlow3 * (fTemp1 * fTemp61))))) + (fSlow170 * (iSlow1?(fSlow3 * (fTemp3 * fTemp62)):(fSlow3 * (fTemp1 * fTemp62))))) + (fSlow173 * (iSlow1?(fSlow3 * (fTemp3 * fTemp63)):(fSlow3 * (fTemp1 * fTemp63))))) + (fSlow175 * (iSlow1?(fSlow3 * (fTemp3 * fTemp64)):(fSlow3 * (fTemp1 * fTemp64))))) + (fSlow178 * (iSlow1?(fSlow3 * (fTemp3 * fTemp65)):(fSlow3 * (fTemp1 * fTemp65))))) + (fSlow180 * (iSlow1?(fSlow3 * (fTemp3 * fTemp66)):(fSlow3 * (fTemp1 * fTemp66))))) + (fSlow183 * (iSlow1?(fSlow3 * (fTemp3 * fTemp67)):(fSlow3 * (fTemp1 * fTemp67))))) + (fSlow185 * (iSlow1?(fSlow3 * (fTemp3 * fTemp68)):(fSlow3 * (fTemp1 * fTemp68))))) + (fSlow188 * (iSlow1?(fSlow3 * (fTemp3 * fTemp69)):(fSlow3 * (fTemp1 * fTemp69))))) + (fSlow190 * (iSlow1?(fSlow3 * (fTemp3 * fTemp70)):(fSlow3 * (fTemp1 * fTemp70))))) + (fSlow193 * (iSlow1?(fSlow3 * (fTemp3 * fTemp71)):(fSlow3 * (fTemp1 * fTemp71))))) + (fSlow195 * (iSlow1?(fSlow3 * (fTemp3 * fTemp72)):(fSlow3 * (fTemp1 * fTemp72)))))) + ((fSlow197 * (((((((((((((((((fConst108 * ((fSlow21 * (iSlow1?(fSlow3 * (fTemp3 * fTemp73)):(fSlow3 * (fTemp1 * fTemp73)))) + (fSlow14 * (iSlow1?(fSlow3 * (fTemp3 * fTemp74)):(fSlow3 * (fTemp1 * fTemp74)))))) + (fSlow198 * (iSlow1?(fSlow3 * (fTemp3 * fTemp75)):(fSlow3 * (fTemp1 * fTemp75))))) + (fSlow199 * (iSlow1?(fSlow3 * (fTemp3 * fTemp76)):(fSlow3 * (fTemp1 * fTemp76))))) + (fSlow201 * (iSlow1?(fSlow3 * (fTemp3 * fTemp77)):(fSlow3 * (fTemp1 * fTemp77))))) + (fSlow203 * (iSlow1?(fSlow3 * (fTemp3 * fTemp78)):(fSlow3 * (fTemp1 * fTemp78))))) + (fSlow206 * (iSlow1?(fSlow3 * (fTemp3 * fTemp79)):(fSlow3 * (fTemp1 * fTemp79))))) + (fSlow208 * (iSlow1?(fSlow3 * (fTemp3 * fTemp80)):(fSlow3 * (fTemp1 * fTemp80))))) + (fSlow210 * (iSlow1?(fSlow3 * (fTemp3 * fTemp81)):(fSlow3 * (fTemp1 * fTemp81))))) + (fSlow212 * (iSlow1?(fSlow3 * (fTemp3 * fTemp82)):(fSlow3 * (fTemp1 * fTemp82))))) + (fSlow215 * (iSlow1?(fSlow3 * (fTemp3 * fTemp83)):(fSlow3 * (fTemp1 * fTemp83))))) + (fSlow217 * (iSlow1?(fSlow3 * (fTemp3 * fTemp84)):(fSlow3 * (fTemp1 * fTemp84))))) + (fSlow219 * (iSlow1?(fSlow3 * (fTemp3 * fTemp85)):(fSlow3 * (fTemp1 * fTemp85))))) + (fSlow221 * (iSlow1?(fSlow3 * (fTemp3 * fTemp86)):(fSlow3 * (fTemp1 * fTemp86))))) + (fSlow224 * (iSlow1?(fSlow3 * (fTemp3 * fTemp87)):(fSlow3 * (fTemp1 * fTemp87))))) + (fSlow226 * (iSlow1?(fSlow3 * (fTemp3 * fTemp88)):(fSlow3 * (fTemp1 * fTemp88))))) + (fSlow228 * (iSlow1?(fSlow3 * (fTemp3 * fTemp89)):(fSlow3 * (fTemp1 * fTemp89))))) + (fSlow230 * (iSlow1?(fSlow3 * (fTemp3 * fTemp90)):(fSlow3 * (fTemp1 * fTemp90)))))) + ((((((iSlow1?(fSlow3 * (fTemp3 * fTemp0)):(fSlow3 * (fTemp1 * fTemp0))) + (fSlow231 * (iSlow1?(fSlow3 * (fTemp3 * fTemp91)):(fSlow3 * (fTemp1 * fTemp91))))) + (fSlow232 * (iSlow1?(fSlow3 * (fTemp3 * fTemp92)):(fSlow3 * (fTemp1 * fTemp92))))) + (fSlow233 * (iSlow1?(fSlow3 * (fTemp3 * fTemp93)):(fSlow3 * (fTemp1 * fTemp93))))) + (fSlow234 * (iSlow1?(fSlow3 * (fTemp3 * fTemp94)):(fSlow3 * (fTemp1 * fTemp94))))) + (fSlow21 * ((((((fSlow236 * (iSlow1?(fSlow3 * (fTemp3 * fTemp95)):(fSlow3 * (fTemp1 * fTemp95)))) + (fSlow238 * (iSlow1?(fSlow3 * (fTemp3 * fTemp96)):(fSlow3 * (fTemp1 * fTemp96))))) + (fSlow239 * (iSlow1?(fSlow3 * (fTemp3 * fTemp97)):(fSlow3 * (fTemp1 * fTemp97))))) + (fSlow241 * (iSlow1?(fSlow3 * (fTemp3 * fTemp98)):(fSlow3 * (fTemp1 * fTemp98))))) + (fSlow244 * (iSlow1?(fSlow3 * (fTemp3 * fTemp99)):(fSlow3 * (fTemp1 * fTemp99))))) + (fSlow246 * (iSlow1?(fSlow3 * (fTemp3 * fTemp100)):(fSlow3 * (fTemp1 * fTemp100))))))))))))) + (fSlow248 * (iSlow1?(fSlow3 * (fTemp3 * fTemp101)):(fSlow3 * (fTemp1 * fTemp101))))); - output0[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp0)):(fSlow3 * (fRec0[0] * fTemp0))) + (0.079577471545947673 * fTemp102))); - output1[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp73)):(fSlow3 * (fRec0[0] * fTemp73))) + (fSlow249 * fTemp102))); - output2[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp2)):(fSlow3 * (fRec0[0] * fTemp2))) + (fSlow250 * fTemp102))); - output3[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp74)):(fSlow3 * (fRec0[0] * fTemp74))) + (fSlow251 * fTemp102))); - output4[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp21)):(fSlow3 * (fRec0[0] * fTemp21))) + (fSlow252 * fTemp102))); - output5[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp75)):(fSlow3 * (fRec0[0] * fTemp75))) + (fSlow253 * fTemp102))); - output6[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp91)):(fSlow3 * (fRec0[0] * fTemp91))) + (fSlow254 * fTemp102))); - output7[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp76)):(fSlow3 * (fRec0[0] * fTemp76))) + (fSlow255 * fTemp102))); - output8[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp22)):(fSlow3 * (fRec0[0] * fTemp22))) + (fSlow256 * fTemp102))); - output9[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp59)):(fSlow3 * (fRec0[0] * fTemp59))) + (fSlow257 * fTemp102))); - output10[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp23)):(fSlow3 * (fRec0[0] * fTemp23))) + (fSlow258 * fTemp102))); - output11[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp77)):(fSlow3 * (fRec0[0] * fTemp77))) + (fSlow259 * fTemp102))); - output12[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp4)):(fSlow3 * (fRec0[0] * fTemp4))) + (fSlow260 * fTemp102))); - output13[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp78)):(fSlow3 * (fRec0[0] * fTemp78))) + (fSlow261 * fTemp102))); - output14[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp24)):(fSlow3 * (fRec0[0] * fTemp24))) + (fSlow262 * fTemp102))); - output15[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp60)):(fSlow3 * (fRec0[0] * fTemp60))) + (fSlow263 * fTemp102))); - output16[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp25)):(fSlow3 * (fRec0[0] * fTemp25))) + (fSlow264 * fTemp102))); - output17[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp61)):(fSlow3 * (fRec0[0] * fTemp61))) + (fSlow265 * fTemp102))); - output18[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp26)):(fSlow3 * (fRec0[0] * fTemp26))) + (fSlow266 * fTemp102))); - output19[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp79)):(fSlow3 * (fRec0[0] * fTemp79))) + (fSlow267 * fTemp102))); - output20[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp92)):(fSlow3 * (fRec0[0] * fTemp92))) + (fSlow268 * fTemp102))); - output21[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp80)):(fSlow3 * (fRec0[0] * fTemp80))) + (fSlow269 * fTemp102))); - output22[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp27)):(fSlow3 * (fRec0[0] * fTemp27))) + (fSlow270 * fTemp102))); - output23[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp62)):(fSlow3 * (fRec0[0] * fTemp62))) + (fSlow271 * fTemp102))); - output24[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp28)):(fSlow3 * (fRec0[0] * fTemp28))) + (fSlow272 * fTemp102))); - output25[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp49)):(fSlow3 * (fRec0[0] * fTemp49))) + (fSlow273 * fTemp102))); - output26[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp5)):(fSlow3 * (fRec0[0] * fTemp5))) + (fSlow274 * fTemp102))); - output27[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp63)):(fSlow3 * (fRec0[0] * fTemp63))) + (fSlow275 * fTemp102))); - output28[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp29)):(fSlow3 * (fRec0[0] * fTemp29))) + (fSlow276 * fTemp102))); - output29[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp81)):(fSlow3 * (fRec0[0] * fTemp81))) + (fSlow277 * fTemp102))); - output30[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp6)):(fSlow3 * (fRec0[0] * fTemp6))) + (fSlow278 * fTemp102))); - output31[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp82)):(fSlow3 * (fRec0[0] * fTemp82))) + (fSlow279 * fTemp102))); - output32[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp30)):(fSlow3 * (fRec0[0] * fTemp30))) + (fSlow280 * fTemp102))); - output33[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp64)):(fSlow3 * (fRec0[0] * fTemp64))) + (fSlow281 * fTemp102))); - output34[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp7)):(fSlow3 * (fRec0[0] * fTemp7))) + (fSlow282 * fTemp102))); - output35[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp50)):(fSlow3 * (fRec0[0] * fTemp50))) + (fSlow283 * fTemp102))); - output36[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp31)):(fSlow3 * (fRec0[0] * fTemp31))) + (fSlow284 * fTemp102))); - output37[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp51)):(fSlow3 * (fRec0[0] * fTemp51))) + (fSlow285 * fTemp102))); - output38[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp32)):(fSlow3 * (fRec0[0] * fTemp32))) + (fSlow286 * fTemp102))); - output39[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp65)):(fSlow3 * (fRec0[0] * fTemp65))) + (fSlow287 * fTemp102))); - output40[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp33)):(fSlow3 * (fRec0[0] * fTemp33))) + (fSlow288 * fTemp102))); - output41[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp83)):(fSlow3 * (fRec0[0] * fTemp83))) + (fSlow289 * fTemp102))); - output42[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp93)):(fSlow3 * (fRec0[0] * fTemp93))) + (fSlow290 * fTemp102))); - output43[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp84)):(fSlow3 * (fRec0[0] * fTemp84))) + (fSlow291 * fTemp102))); - output44[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp34)):(fSlow3 * (fRec0[0] * fTemp34))) + (fSlow292 * fTemp102))); - output45[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp66)):(fSlow3 * (fRec0[0] * fTemp66))) + (fSlow293 * fTemp102))); - output46[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp35)):(fSlow3 * (fRec0[0] * fTemp35))) + (fSlow294 * fTemp102))); - output47[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp52)):(fSlow3 * (fRec0[0] * fTemp52))) + (fSlow295 * fTemp102))); - output48[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp36)):(fSlow3 * (fRec0[0] * fTemp36))) + (fSlow296 * fTemp102))); - output49[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp95)):(fSlow3 * (fRec0[0] * fTemp95))) + (fSlow297 * fTemp102))); - output50[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp8)):(fSlow3 * (fRec0[0] * fTemp8))) + (fSlow298 * fTemp102))); - output51[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp53)):(fSlow3 * (fRec0[0] * fTemp53))) + (fSlow299 * fTemp102))); - output52[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp37)):(fSlow3 * (fRec0[0] * fTemp37))) + (fSlow300 * fTemp102))); - output53[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp67)):(fSlow3 * (fRec0[0] * fTemp67))) + (fSlow301 * fTemp102))); - output54[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp96)):(fSlow3 * (fRec0[0] * fTemp96))) + (fSlow302 * fTemp102))); - output55[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp85)):(fSlow3 * (fRec0[0] * fTemp85))) + (fSlow303 * fTemp102))); - output56[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp9)):(fSlow3 * (fRec0[0] * fTemp9))) + (fSlow304 * fTemp102))); - output57[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp86)):(fSlow3 * (fRec0[0] * fTemp86))) + (fSlow305 * fTemp102))); - output58[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp38)):(fSlow3 * (fRec0[0] * fTemp38))) + (fSlow306 * fTemp102))); - output59[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp68)):(fSlow3 * (fRec0[0] * fTemp68))) + (fSlow307 * fTemp102))); - output60[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp10)):(fSlow3 * (fRec0[0] * fTemp10))) + (fSlow308 * fTemp102))); - output61[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp54)):(fSlow3 * (fRec0[0] * fTemp54))) + (fSlow309 * fTemp102))); - output62[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp39)):(fSlow3 * (fRec0[0] * fTemp39))) + (fSlow310 * fTemp102))); - output63[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp16)):(fSlow3 * (fRec0[0] * fTemp16))) + (fSlow311 * fTemp102))); - output64[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp97)):(fSlow3 * (fRec0[0] * fTemp97))) + (fSlow312 * fTemp102))); - output65[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp17)):(fSlow3 * (fRec0[0] * fTemp17))) + (fSlow313 * fTemp102))); - output66[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp40)):(fSlow3 * (fRec0[0] * fTemp40))) + (fSlow314 * fTemp102))); - output67[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp55)):(fSlow3 * (fRec0[0] * fTemp55))) + (fSlow315 * fTemp102))); - output68[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp98)):(fSlow3 * (fRec0[0] * fTemp98))) + (fSlow316 * fTemp102))); - output69[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp69)):(fSlow3 * (fRec0[0] * fTemp69))) + (fSlow317 * fTemp102))); - output70[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp41)):(fSlow3 * (fRec0[0] * fTemp41))) + (fSlow318 * fTemp102))); - output71[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp87)):(fSlow3 * (fRec0[0] * fTemp87))) + (fSlow319 * fTemp102))); - output72[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp94)):(fSlow3 * (fRec0[0] * fTemp94))) + (fSlow320 * fTemp102))); - output73[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp88)):(fSlow3 * (fRec0[0] * fTemp88))) + (fSlow321 * fTemp102))); - output74[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp42)):(fSlow3 * (fRec0[0] * fTemp42))) + (fSlow322 * fTemp102))); - output75[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp70)):(fSlow3 * (fRec0[0] * fTemp70))) + (fSlow323 * fTemp102))); - output76[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp43)):(fSlow3 * (fRec0[0] * fTemp43))) + (fSlow324 * fTemp102))); - output77[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp56)):(fSlow3 * (fRec0[0] * fTemp56))) + (fSlow325 * fTemp102))); - output78[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp44)):(fSlow3 * (fRec0[0] * fTemp44))) + (fSlow326 * fTemp102))); - output79[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp18)):(fSlow3 * (fRec0[0] * fTemp18))) + (fSlow327 * fTemp102))); - output80[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp45)):(fSlow3 * (fRec0[0] * fTemp45))) + (fSlow328 * fTemp102))); - output81[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp99)):(fSlow3 * (fRec0[0] * fTemp99))) + (fSlow329 * fTemp102))); - output82[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp11)):(fSlow3 * (fRec0[0] * fTemp11))) + (fSlow330 * fTemp102))); - output83[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp19)):(fSlow3 * (fRec0[0] * fTemp19))) + (fSlow331 * fTemp102))); - output84[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp46)):(fSlow3 * (fRec0[0] * fTemp46))) + (fSlow332 * fTemp102))); - output85[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp57)):(fSlow3 * (fRec0[0] * fTemp57))) + (fSlow333 * fTemp102))); - output86[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp100)):(fSlow3 * (fRec0[0] * fTemp100))) + (fSlow334 * fTemp102))); - output87[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp71)):(fSlow3 * (fRec0[0] * fTemp71))) + (fSlow335 * fTemp102))); - output88[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp12)):(fSlow3 * (fRec0[0] * fTemp12))) + (fSlow336 * fTemp102))); - output89[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp89)):(fSlow3 * (fRec0[0] * fTemp89))) + (fSlow337 * fTemp102))); - output90[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp13)):(fSlow3 * (fRec0[0] * fTemp13))) + (fSlow338 * fTemp102))); - output91[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp90)):(fSlow3 * (fRec0[0] * fTemp90))) + (fSlow339 * fTemp102))); - output92[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp47)):(fSlow3 * (fRec0[0] * fTemp47))) + (fSlow340 * fTemp102))); - output93[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp72)):(fSlow3 * (fRec0[0] * fTemp72))) + (fSlow341 * fTemp102))); - output94[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp14)):(fSlow3 * (fRec0[0] * fTemp14))) + (fSlow342 * fTemp102))); - output95[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp58)):(fSlow3 * (fRec0[0] * fTemp58))) + (fSlow343 * fTemp102))); - output96[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp48)):(fSlow3 * (fRec0[0] * fTemp48))) + (fSlow344 * fTemp102))); - output97[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp20)):(fSlow3 * (fRec0[0] * fTemp20))) + (fSlow345 * fTemp102))); - output98[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp15)):(fSlow3 * (fRec0[0] * fTemp15))) + (fSlow346 * fTemp102))); - output99[i] = FAUSTFLOAT(((iSlow1?(fSlow3 * (fRec1[0] * fTemp101)):(fSlow3 * (fRec0[0] * fTemp101))) + (fSlow347 * fTemp102))); + double fTemp102 = (((fSlow10 * (((((((((((((1.7320508075688772 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp2)):(iSlow2?(fSlow4 * (fTemp3 * fTemp2)):(fSlow4 * (fTemp1 * fTemp2))))) + (fSlow15 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp4)):(iSlow2?(fSlow4 * (fTemp3 * fTemp4)):(fSlow4 * (fTemp1 * fTemp4)))))) + (fSlow26 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp5)):(iSlow2?(fSlow4 * (fTemp3 * fTemp5)):(fSlow4 * (fTemp1 * fTemp5)))))) + (fSlow29 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp6)):(iSlow2?(fSlow4 * (fTemp3 * fTemp6)):(fSlow4 * (fTemp1 * fTemp6)))))) + (fSlow35 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp7)):(iSlow2?(fSlow4 * (fTemp3 * fTemp7)):(fSlow4 * (fTemp1 * fTemp7)))))) + (fSlow42 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp8)):(iSlow2?(fSlow4 * (fTemp3 * fTemp8)):(fSlow4 * (fTemp1 * fTemp8)))))) + (fSlow45 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp9)):(iSlow2?(fSlow4 * (fTemp3 * fTemp9)):(fSlow4 * (fTemp1 * fTemp9)))))) + (fSlow49 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp10)):(iSlow2?(fSlow4 * (fTemp3 * fTemp10)):(fSlow4 * (fTemp1 * fTemp10)))))) + (fSlow56 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp11)):(iSlow2?(fSlow4 * (fTemp3 * fTemp11)):(fSlow4 * (fTemp1 * fTemp11)))))) + (fSlow64 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp12)):(iSlow2?(fSlow4 * (fTemp3 * fTemp12)):(fSlow4 * (fTemp1 * fTemp12)))))) + (fSlow67 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp13)):(iSlow2?(fSlow4 * (fTemp3 * fTemp13)):(fSlow4 * (fTemp1 * fTemp13)))))) + (fSlow71 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp14)):(iSlow2?(fSlow4 * (fTemp3 * fTemp14)):(fSlow4 * (fTemp1 * fTemp14)))))) + (fSlow78 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp15)):(iSlow2?(fSlow4 * (fTemp3 * fTemp15)):(fSlow4 * (fTemp1 * fTemp15))))))) + ((fSlow80 * (((((fSlow82 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp16)):(iSlow2?(fSlow4 * (fTemp3 * fTemp16)):(fSlow4 * (fTemp1 * fTemp16))))) + (fSlow84 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp17)):(iSlow2?(fSlow4 * (fTemp3 * fTemp17)):(fSlow4 * (fTemp1 * fTemp17)))))) + (fSlow86 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp18)):(iSlow2?(fSlow4 * (fTemp3 * fTemp18)):(fSlow4 * (fTemp1 * fTemp18)))))) + (fSlow89 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp19)):(iSlow2?(fSlow4 * (fTemp3 * fTemp19)):(fSlow4 * (fTemp1 * fTemp19)))))) + (fSlow91 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp20)):(iSlow2?(fSlow4 * (fTemp3 * fTemp20)):(fSlow4 * (fTemp1 * fTemp20))))))) + ((fSlow22 * (((((((((((((((((((((((((fConst20 * (((fConst40 * ((fSlow92 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp21)):(iSlow2?(fSlow4 * (fTemp3 * fTemp21)):(fSlow4 * (fTemp1 * fTemp21))))) + (fSlow93 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp22)):(iSlow2?(fSlow4 * (fTemp3 * fTemp22)):(fSlow4 * (fTemp1 * fTemp22))))))) + (fSlow95 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp23)):(iSlow2?(fSlow4 * (fTemp3 * fTemp23)):(fSlow4 * (fTemp1 * fTemp23)))))) + (fSlow97 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp24)):(iSlow2?(fSlow4 * (fTemp3 * fTemp24)):(fSlow4 * (fTemp1 * fTemp24))))))) + (fSlow98 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp25)):(iSlow2?(fSlow4 * (fTemp3 * fTemp25)):(fSlow4 * (fTemp1 * fTemp25)))))) + (fSlow100 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp26)):(iSlow2?(fSlow4 * (fTemp3 * fTemp26)):(fSlow4 * (fTemp1 * fTemp26)))))) + (fSlow102 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp27)):(iSlow2?(fSlow4 * (fTemp3 * fTemp27)):(fSlow4 * (fTemp1 * fTemp27)))))) + (fSlow103 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp28)):(iSlow2?(fSlow4 * (fTemp3 * fTemp28)):(fSlow4 * (fTemp1 * fTemp28)))))) + (fSlow105 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp29)):(iSlow2?(fSlow4 * (fTemp3 * fTemp29)):(fSlow4 * (fTemp1 * fTemp29)))))) + (fSlow107 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp30)):(iSlow2?(fSlow4 * (fTemp3 * fTemp30)):(fSlow4 * (fTemp1 * fTemp30)))))) + (fSlow108 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp31)):(iSlow2?(fSlow4 * (fTemp3 * fTemp31)):(fSlow4 * (fTemp1 * fTemp31)))))) + (fSlow110 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp32)):(iSlow2?(fSlow4 * (fTemp3 * fTemp32)):(fSlow4 * (fTemp1 * fTemp32)))))) + (fSlow112 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp33)):(iSlow2?(fSlow4 * (fTemp3 * fTemp33)):(fSlow4 * (fTemp1 * fTemp33)))))) + (fSlow114 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp34)):(iSlow2?(fSlow4 * (fTemp3 * fTemp34)):(fSlow4 * (fTemp1 * fTemp34)))))) + (fSlow116 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp35)):(iSlow2?(fSlow4 * (fTemp3 * fTemp35)):(fSlow4 * (fTemp1 * fTemp35)))))) + (fSlow117 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp36)):(iSlow2?(fSlow4 * (fTemp3 * fTemp36)):(fSlow4 * (fTemp1 * fTemp36)))))) + (fSlow119 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp37)):(iSlow2?(fSlow4 * (fTemp3 * fTemp37)):(fSlow4 * (fTemp1 * fTemp37)))))) + (fSlow121 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp38)):(iSlow2?(fSlow4 * (fTemp3 * fTemp38)):(fSlow4 * (fTemp1 * fTemp38)))))) + (fSlow123 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp39)):(iSlow2?(fSlow4 * (fTemp3 * fTemp39)):(fSlow4 * (fTemp1 * fTemp39)))))) + (fSlow126 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp40)):(iSlow2?(fSlow4 * (fTemp3 * fTemp40)):(fSlow4 * (fTemp1 * fTemp40)))))) + (fSlow128 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp41)):(iSlow2?(fSlow4 * (fTemp3 * fTemp41)):(fSlow4 * (fTemp1 * fTemp41)))))) + (fSlow130 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp42)):(iSlow2?(fSlow4 * (fTemp3 * fTemp42)):(fSlow4 * (fTemp1 * fTemp42)))))) + (fSlow132 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp43)):(iSlow2?(fSlow4 * (fTemp3 * fTemp43)):(fSlow4 * (fTemp1 * fTemp43)))))) + (fSlow134 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp44)):(iSlow2?(fSlow4 * (fTemp3 * fTemp44)):(fSlow4 * (fTemp1 * fTemp44)))))) + (fSlow135 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp45)):(iSlow2?(fSlow4 * (fTemp3 * fTemp45)):(fSlow4 * (fTemp1 * fTemp45)))))) + (fSlow138 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp46)):(iSlow2?(fSlow4 * (fTemp3 * fTemp46)):(fSlow4 * (fTemp1 * fTemp46)))))) + (fSlow140 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp47)):(iSlow2?(fSlow4 * (fTemp3 * fTemp47)):(fSlow4 * (fTemp1 * fTemp47)))))) + (fSlow142 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp48)):(iSlow2?(fSlow4 * (fTemp3 * fTemp48)):(fSlow4 * (fTemp1 * fTemp48))))))) + ((fSlow144 * (((((((((fConst82 * ((fSlow145 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp49)):(iSlow2?(fSlow4 * (fTemp3 * fTemp49)):(fSlow4 * (fTemp1 * fTemp49))))) + (fSlow146 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp50)):(iSlow2?(fSlow4 * (fTemp3 * fTemp50)):(fSlow4 * (fTemp1 * fTemp50))))))) + (fSlow148 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp51)):(iSlow2?(fSlow4 * (fTemp3 * fTemp51)):(fSlow4 * (fTemp1 * fTemp51)))))) + (fSlow150 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp52)):(iSlow2?(fSlow4 * (fTemp3 * fTemp52)):(fSlow4 * (fTemp1 * fTemp52)))))) + (fSlow153 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp53)):(iSlow2?(fSlow4 * (fTemp3 * fTemp53)):(fSlow4 * (fTemp1 * fTemp53)))))) + (fSlow155 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp54)):(iSlow2?(fSlow4 * (fTemp3 * fTemp54)):(fSlow4 * (fTemp1 * fTemp54)))))) + (fSlow158 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp55)):(iSlow2?(fSlow4 * (fTemp3 * fTemp55)):(fSlow4 * (fTemp1 * fTemp55)))))) + (fSlow160 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp56)):(iSlow2?(fSlow4 * (fTemp3 * fTemp56)):(fSlow4 * (fTemp1 * fTemp56)))))) + (fSlow163 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp57)):(iSlow2?(fSlow4 * (fTemp3 * fTemp57)):(fSlow4 * (fTemp1 * fTemp57)))))) + (fSlow165 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp58)):(iSlow2?(fSlow4 * (fTemp3 * fTemp58)):(fSlow4 * (fTemp1 * fTemp58))))))) + ((fSlow167 * (((((((((((((fConst93 * ((fSlow168 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp59)):(iSlow2?(fSlow4 * (fTemp3 * fTemp59)):(fSlow4 * (fTemp1 * fTemp59))))) + (fSlow169 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp60)):(iSlow2?(fSlow4 * (fTemp3 * fTemp60)):(fSlow4 * (fTemp1 * fTemp60))))))) + (fSlow171 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp61)):(iSlow2?(fSlow4 * (fTemp3 * fTemp61)):(fSlow4 * (fTemp1 * fTemp61)))))) + (fSlow173 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp62)):(iSlow2?(fSlow4 * (fTemp3 * fTemp62)):(fSlow4 * (fTemp1 * fTemp62)))))) + (fSlow176 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp63)):(iSlow2?(fSlow4 * (fTemp3 * fTemp63)):(fSlow4 * (fTemp1 * fTemp63)))))) + (fSlow178 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp64)):(iSlow2?(fSlow4 * (fTemp3 * fTemp64)):(fSlow4 * (fTemp1 * fTemp64)))))) + (fSlow181 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp65)):(iSlow2?(fSlow4 * (fTemp3 * fTemp65)):(fSlow4 * (fTemp1 * fTemp65)))))) + (fSlow183 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp66)):(iSlow2?(fSlow4 * (fTemp3 * fTemp66)):(fSlow4 * (fTemp1 * fTemp66)))))) + (fSlow186 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp67)):(iSlow2?(fSlow4 * (fTemp3 * fTemp67)):(fSlow4 * (fTemp1 * fTemp67)))))) + (fSlow188 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp68)):(iSlow2?(fSlow4 * (fTemp3 * fTemp68)):(fSlow4 * (fTemp1 * fTemp68)))))) + (fSlow191 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp69)):(iSlow2?(fSlow4 * (fTemp3 * fTemp69)):(fSlow4 * (fTemp1 * fTemp69)))))) + (fSlow193 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp70)):(iSlow2?(fSlow4 * (fTemp3 * fTemp70)):(fSlow4 * (fTemp1 * fTemp70)))))) + (fSlow196 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp71)):(iSlow2?(fSlow4 * (fTemp3 * fTemp71)):(fSlow4 * (fTemp1 * fTemp71)))))) + (fSlow198 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp72)):(iSlow2?(fSlow4 * (fTemp3 * fTemp72)):(fSlow4 * (fTemp1 * fTemp72))))))) + ((fSlow200 * (((((((((((((((((fConst108 * ((fSlow24 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp73)):(iSlow2?(fSlow4 * (fTemp3 * fTemp73)):(fSlow4 * (fTemp1 * fTemp73))))) + (fSlow17 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp74)):(iSlow2?(fSlow4 * (fTemp3 * fTemp74)):(fSlow4 * (fTemp1 * fTemp74))))))) + (fSlow201 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp75)):(iSlow2?(fSlow4 * (fTemp3 * fTemp75)):(fSlow4 * (fTemp1 * fTemp75)))))) + (fSlow202 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp76)):(iSlow2?(fSlow4 * (fTemp3 * fTemp76)):(fSlow4 * (fTemp1 * fTemp76)))))) + (fSlow204 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp77)):(iSlow2?(fSlow4 * (fTemp3 * fTemp77)):(fSlow4 * (fTemp1 * fTemp77)))))) + (fSlow206 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp78)):(iSlow2?(fSlow4 * (fTemp3 * fTemp78)):(fSlow4 * (fTemp1 * fTemp78)))))) + (fSlow209 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp79)):(iSlow2?(fSlow4 * (fTemp3 * fTemp79)):(fSlow4 * (fTemp1 * fTemp79)))))) + (fSlow211 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp80)):(iSlow2?(fSlow4 * (fTemp3 * fTemp80)):(fSlow4 * (fTemp1 * fTemp80)))))) + (fSlow213 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp81)):(iSlow2?(fSlow4 * (fTemp3 * fTemp81)):(fSlow4 * (fTemp1 * fTemp81)))))) + (fSlow215 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp82)):(iSlow2?(fSlow4 * (fTemp3 * fTemp82)):(fSlow4 * (fTemp1 * fTemp82)))))) + (fSlow218 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp83)):(iSlow2?(fSlow4 * (fTemp3 * fTemp83)):(fSlow4 * (fTemp1 * fTemp83)))))) + (fSlow220 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp84)):(iSlow2?(fSlow4 * (fTemp3 * fTemp84)):(fSlow4 * (fTemp1 * fTemp84)))))) + (fSlow222 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp85)):(iSlow2?(fSlow4 * (fTemp3 * fTemp85)):(fSlow4 * (fTemp1 * fTemp85)))))) + (fSlow224 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp86)):(iSlow2?(fSlow4 * (fTemp3 * fTemp86)):(fSlow4 * (fTemp1 * fTemp86)))))) + (fSlow227 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp87)):(iSlow2?(fSlow4 * (fTemp3 * fTemp87)):(fSlow4 * (fTemp1 * fTemp87)))))) + (fSlow229 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp88)):(iSlow2?(fSlow4 * (fTemp3 * fTemp88)):(fSlow4 * (fTemp1 * fTemp88)))))) + (fSlow231 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp89)):(iSlow2?(fSlow4 * (fTemp3 * fTemp89)):(fSlow4 * (fTemp1 * fTemp89)))))) + (fSlow233 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp90)):(iSlow2?(fSlow4 * (fTemp3 * fTemp90)):(fSlow4 * (fTemp1 * fTemp90))))))) + ((((((iSlow0?(fSlow8 * (fRec2[0] * fTemp0)):(iSlow2?(fSlow4 * (fTemp3 * fTemp0)):(fSlow4 * (fTemp1 * fTemp0)))) + (fSlow234 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp91)):(iSlow2?(fSlow4 * (fTemp3 * fTemp91)):(fSlow4 * (fTemp1 * fTemp91)))))) + (fSlow235 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp92)):(iSlow2?(fSlow4 * (fTemp3 * fTemp92)):(fSlow4 * (fTemp1 * fTemp92)))))) + (fSlow236 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp93)):(iSlow2?(fSlow4 * (fTemp3 * fTemp93)):(fSlow4 * (fTemp1 * fTemp93)))))) + (fSlow237 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp94)):(iSlow2?(fSlow4 * (fTemp3 * fTemp94)):(fSlow4 * (fTemp1 * fTemp94)))))) + (fSlow24 * ((((((fSlow239 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp95)):(iSlow2?(fSlow4 * (fTemp3 * fTemp95)):(fSlow4 * (fTemp1 * fTemp95))))) + (fSlow241 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp96)):(iSlow2?(fSlow4 * (fTemp3 * fTemp96)):(fSlow4 * (fTemp1 * fTemp96)))))) + (fSlow242 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp97)):(iSlow2?(fSlow4 * (fTemp3 * fTemp97)):(fSlow4 * (fTemp1 * fTemp97)))))) + (fSlow244 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp98)):(iSlow2?(fSlow4 * (fTemp3 * fTemp98)):(fSlow4 * (fTemp1 * fTemp98)))))) + (fSlow247 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp99)):(iSlow2?(fSlow4 * (fTemp3 * fTemp99)):(fSlow4 * (fTemp1 * fTemp99)))))) + (fSlow249 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp100)):(iSlow2?(fSlow4 * (fTemp3 * fTemp100)):(fSlow4 * (fTemp1 * fTemp100)))))))))))))) + (fSlow251 * (iSlow0?(fSlow8 * (fRec2[0] * fTemp101)):(iSlow2?(fSlow4 * (fTemp3 * fTemp101)):(fSlow4 * (fTemp1 * fTemp101)))))); + output0[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp0):(iSlow2?(fSlow4 * (fRec1[0] * fTemp0)):(fSlow4 * (fRec0[0] * fTemp0)))) + (0.079577471545947673 * fTemp102))); + output1[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp73):(iSlow2?(fSlow4 * (fRec1[0] * fTemp73)):(fSlow4 * (fRec0[0] * fTemp73)))) + (fSlow252 * fTemp102))); + output2[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp2):(iSlow2?(fSlow4 * (fRec1[0] * fTemp2)):(fSlow4 * (fRec0[0] * fTemp2)))) + (fSlow253 * fTemp102))); + output3[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp74):(iSlow2?(fSlow4 * (fRec1[0] * fTemp74)):(fSlow4 * (fRec0[0] * fTemp74)))) + (fSlow254 * fTemp102))); + output4[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp21):(iSlow2?(fSlow4 * (fRec1[0] * fTemp21)):(fSlow4 * (fRec0[0] * fTemp21)))) + (fSlow255 * fTemp102))); + output5[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp75):(iSlow2?(fSlow4 * (fRec1[0] * fTemp75)):(fSlow4 * (fRec0[0] * fTemp75)))) + (fSlow256 * fTemp102))); + output6[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp91):(iSlow2?(fSlow4 * (fRec1[0] * fTemp91)):(fSlow4 * (fRec0[0] * fTemp91)))) + (fSlow257 * fTemp102))); + output7[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp76):(iSlow2?(fSlow4 * (fRec1[0] * fTemp76)):(fSlow4 * (fRec0[0] * fTemp76)))) + (fSlow258 * fTemp102))); + output8[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp22):(iSlow2?(fSlow4 * (fRec1[0] * fTemp22)):(fSlow4 * (fRec0[0] * fTemp22)))) + (fSlow259 * fTemp102))); + output9[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp59):(iSlow2?(fSlow4 * (fRec1[0] * fTemp59)):(fSlow4 * (fRec0[0] * fTemp59)))) + (fSlow260 * fTemp102))); + output10[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp23):(iSlow2?(fSlow4 * (fRec1[0] * fTemp23)):(fSlow4 * (fRec0[0] * fTemp23)))) + (fSlow261 * fTemp102))); + output11[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp77):(iSlow2?(fSlow4 * (fRec1[0] * fTemp77)):(fSlow4 * (fRec0[0] * fTemp77)))) + (fSlow262 * fTemp102))); + output12[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp4):(iSlow2?(fSlow4 * (fRec1[0] * fTemp4)):(fSlow4 * (fRec0[0] * fTemp4)))) + (fSlow263 * fTemp102))); + output13[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp78):(iSlow2?(fSlow4 * (fRec1[0] * fTemp78)):(fSlow4 * (fRec0[0] * fTemp78)))) + (fSlow264 * fTemp102))); + output14[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp24):(iSlow2?(fSlow4 * (fRec1[0] * fTemp24)):(fSlow4 * (fRec0[0] * fTemp24)))) + (fSlow265 * fTemp102))); + output15[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp60):(iSlow2?(fSlow4 * (fRec1[0] * fTemp60)):(fSlow4 * (fRec0[0] * fTemp60)))) + (fSlow266 * fTemp102))); + output16[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp25):(iSlow2?(fSlow4 * (fRec1[0] * fTemp25)):(fSlow4 * (fRec0[0] * fTemp25)))) + (fSlow267 * fTemp102))); + output17[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp61):(iSlow2?(fSlow4 * (fRec1[0] * fTemp61)):(fSlow4 * (fRec0[0] * fTemp61)))) + (fSlow268 * fTemp102))); + output18[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp26):(iSlow2?(fSlow4 * (fRec1[0] * fTemp26)):(fSlow4 * (fRec0[0] * fTemp26)))) + (fSlow269 * fTemp102))); + output19[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp79):(iSlow2?(fSlow4 * (fRec1[0] * fTemp79)):(fSlow4 * (fRec0[0] * fTemp79)))) + (fSlow270 * fTemp102))); + output20[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp92):(iSlow2?(fSlow4 * (fRec1[0] * fTemp92)):(fSlow4 * (fRec0[0] * fTemp92)))) + (fSlow271 * fTemp102))); + output21[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp80):(iSlow2?(fSlow4 * (fRec1[0] * fTemp80)):(fSlow4 * (fRec0[0] * fTemp80)))) + (fSlow272 * fTemp102))); + output22[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp27):(iSlow2?(fSlow4 * (fRec1[0] * fTemp27)):(fSlow4 * (fRec0[0] * fTemp27)))) + (fSlow273 * fTemp102))); + output23[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp62):(iSlow2?(fSlow4 * (fRec1[0] * fTemp62)):(fSlow4 * (fRec0[0] * fTemp62)))) + (fSlow274 * fTemp102))); + output24[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp28):(iSlow2?(fSlow4 * (fRec1[0] * fTemp28)):(fSlow4 * (fRec0[0] * fTemp28)))) + (fSlow275 * fTemp102))); + output25[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp49):(iSlow2?(fSlow4 * (fRec1[0] * fTemp49)):(fSlow4 * (fRec0[0] * fTemp49)))) + (fSlow276 * fTemp102))); + output26[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp5):(iSlow2?(fSlow4 * (fRec1[0] * fTemp5)):(fSlow4 * (fRec0[0] * fTemp5)))) + (fSlow277 * fTemp102))); + output27[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp63):(iSlow2?(fSlow4 * (fRec1[0] * fTemp63)):(fSlow4 * (fRec0[0] * fTemp63)))) + (fSlow278 * fTemp102))); + output28[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp29):(iSlow2?(fSlow4 * (fRec1[0] * fTemp29)):(fSlow4 * (fRec0[0] * fTemp29)))) + (fSlow279 * fTemp102))); + output29[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp81):(iSlow2?(fSlow4 * (fRec1[0] * fTemp81)):(fSlow4 * (fRec0[0] * fTemp81)))) + (fSlow280 * fTemp102))); + output30[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp6):(iSlow2?(fSlow4 * (fRec1[0] * fTemp6)):(fSlow4 * (fRec0[0] * fTemp6)))) + (fSlow281 * fTemp102))); + output31[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp82):(iSlow2?(fSlow4 * (fRec1[0] * fTemp82)):(fSlow4 * (fRec0[0] * fTemp82)))) + (fSlow282 * fTemp102))); + output32[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp30):(iSlow2?(fSlow4 * (fRec1[0] * fTemp30)):(fSlow4 * (fRec0[0] * fTemp30)))) + (fSlow283 * fTemp102))); + output33[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp64):(iSlow2?(fSlow4 * (fRec1[0] * fTemp64)):(fSlow4 * (fRec0[0] * fTemp64)))) + (fSlow284 * fTemp102))); + output34[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp7):(iSlow2?(fSlow4 * (fRec1[0] * fTemp7)):(fSlow4 * (fRec0[0] * fTemp7)))) + (fSlow285 * fTemp102))); + output35[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp50):(iSlow2?(fSlow4 * (fRec1[0] * fTemp50)):(fSlow4 * (fRec0[0] * fTemp50)))) + (fSlow286 * fTemp102))); + output36[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp31):(iSlow2?(fSlow4 * (fRec1[0] * fTemp31)):(fSlow4 * (fRec0[0] * fTemp31)))) + (fSlow287 * fTemp102))); + output37[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp51):(iSlow2?(fSlow4 * (fRec1[0] * fTemp51)):(fSlow4 * (fRec0[0] * fTemp51)))) + (fSlow288 * fTemp102))); + output38[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp32):(iSlow2?(fSlow4 * (fRec1[0] * fTemp32)):(fSlow4 * (fRec0[0] * fTemp32)))) + (fSlow289 * fTemp102))); + output39[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp65):(iSlow2?(fSlow4 * (fRec1[0] * fTemp65)):(fSlow4 * (fRec0[0] * fTemp65)))) + (fSlow290 * fTemp102))); + output40[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp33):(iSlow2?(fSlow4 * (fRec1[0] * fTemp33)):(fSlow4 * (fRec0[0] * fTemp33)))) + (fSlow291 * fTemp102))); + output41[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp83):(iSlow2?(fSlow4 * (fRec1[0] * fTemp83)):(fSlow4 * (fRec0[0] * fTemp83)))) + (fSlow292 * fTemp102))); + output42[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp93):(iSlow2?(fSlow4 * (fRec1[0] * fTemp93)):(fSlow4 * (fRec0[0] * fTemp93)))) + (fSlow293 * fTemp102))); + output43[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp84):(iSlow2?(fSlow4 * (fRec1[0] * fTemp84)):(fSlow4 * (fRec0[0] * fTemp84)))) + (fSlow294 * fTemp102))); + output44[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp34):(iSlow2?(fSlow4 * (fRec1[0] * fTemp34)):(fSlow4 * (fRec0[0] * fTemp34)))) + (fSlow295 * fTemp102))); + output45[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp66):(iSlow2?(fSlow4 * (fRec1[0] * fTemp66)):(fSlow4 * (fRec0[0] * fTemp66)))) + (fSlow296 * fTemp102))); + output46[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp35):(iSlow2?(fSlow4 * (fRec1[0] * fTemp35)):(fSlow4 * (fRec0[0] * fTemp35)))) + (fSlow297 * fTemp102))); + output47[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp52):(iSlow2?(fSlow4 * (fRec1[0] * fTemp52)):(fSlow4 * (fRec0[0] * fTemp52)))) + (fSlow298 * fTemp102))); + output48[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp36):(iSlow2?(fSlow4 * (fRec1[0] * fTemp36)):(fSlow4 * (fRec0[0] * fTemp36)))) + (fSlow299 * fTemp102))); + output49[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp95):(iSlow2?(fSlow4 * (fRec1[0] * fTemp95)):(fSlow4 * (fRec0[0] * fTemp95)))) + (fSlow300 * fTemp102))); + output50[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp8):(iSlow2?(fSlow4 * (fRec1[0] * fTemp8)):(fSlow4 * (fRec0[0] * fTemp8)))) + (fSlow301 * fTemp102))); + output51[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp53):(iSlow2?(fSlow4 * (fRec1[0] * fTemp53)):(fSlow4 * (fRec0[0] * fTemp53)))) + (fSlow302 * fTemp102))); + output52[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp37):(iSlow2?(fSlow4 * (fRec1[0] * fTemp37)):(fSlow4 * (fRec0[0] * fTemp37)))) + (fSlow303 * fTemp102))); + output53[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp67):(iSlow2?(fSlow4 * (fRec1[0] * fTemp67)):(fSlow4 * (fRec0[0] * fTemp67)))) + (fSlow304 * fTemp102))); + output54[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp96):(iSlow2?(fSlow4 * (fRec1[0] * fTemp96)):(fSlow4 * (fRec0[0] * fTemp96)))) + (fSlow305 * fTemp102))); + output55[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp85):(iSlow2?(fSlow4 * (fRec1[0] * fTemp85)):(fSlow4 * (fRec0[0] * fTemp85)))) + (fSlow306 * fTemp102))); + output56[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp9):(iSlow2?(fSlow4 * (fRec1[0] * fTemp9)):(fSlow4 * (fRec0[0] * fTemp9)))) + (fSlow307 * fTemp102))); + output57[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp86):(iSlow2?(fSlow4 * (fRec1[0] * fTemp86)):(fSlow4 * (fRec0[0] * fTemp86)))) + (fSlow308 * fTemp102))); + output58[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp38):(iSlow2?(fSlow4 * (fRec1[0] * fTemp38)):(fSlow4 * (fRec0[0] * fTemp38)))) + (fSlow309 * fTemp102))); + output59[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp68):(iSlow2?(fSlow4 * (fRec1[0] * fTemp68)):(fSlow4 * (fRec0[0] * fTemp68)))) + (fSlow310 * fTemp102))); + output60[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp10):(iSlow2?(fSlow4 * (fRec1[0] * fTemp10)):(fSlow4 * (fRec0[0] * fTemp10)))) + (fSlow311 * fTemp102))); + output61[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp54):(iSlow2?(fSlow4 * (fRec1[0] * fTemp54)):(fSlow4 * (fRec0[0] * fTemp54)))) + (fSlow312 * fTemp102))); + output62[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp39):(iSlow2?(fSlow4 * (fRec1[0] * fTemp39)):(fSlow4 * (fRec0[0] * fTemp39)))) + (fSlow313 * fTemp102))); + output63[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp16):(iSlow2?(fSlow4 * (fRec1[0] * fTemp16)):(fSlow4 * (fRec0[0] * fTemp16)))) + (fSlow314 * fTemp102))); + output64[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp97):(iSlow2?(fSlow4 * (fRec1[0] * fTemp97)):(fSlow4 * (fRec0[0] * fTemp97)))) + (fSlow315 * fTemp102))); + output65[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp17):(iSlow2?(fSlow4 * (fRec1[0] * fTemp17)):(fSlow4 * (fRec0[0] * fTemp17)))) + (fSlow316 * fTemp102))); + output66[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp40):(iSlow2?(fSlow4 * (fRec1[0] * fTemp40)):(fSlow4 * (fRec0[0] * fTemp40)))) + (fSlow317 * fTemp102))); + output67[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp55):(iSlow2?(fSlow4 * (fRec1[0] * fTemp55)):(fSlow4 * (fRec0[0] * fTemp55)))) + (fSlow318 * fTemp102))); + output68[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp98):(iSlow2?(fSlow4 * (fRec1[0] * fTemp98)):(fSlow4 * (fRec0[0] * fTemp98)))) + (fSlow319 * fTemp102))); + output69[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp69):(iSlow2?(fSlow4 * (fRec1[0] * fTemp69)):(fSlow4 * (fRec0[0] * fTemp69)))) + (fSlow320 * fTemp102))); + output70[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp41):(iSlow2?(fSlow4 * (fRec1[0] * fTemp41)):(fSlow4 * (fRec0[0] * fTemp41)))) + (fSlow321 * fTemp102))); + output71[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp87):(iSlow2?(fSlow4 * (fRec1[0] * fTemp87)):(fSlow4 * (fRec0[0] * fTemp87)))) + (fSlow322 * fTemp102))); + output72[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp94):(iSlow2?(fSlow4 * (fRec1[0] * fTemp94)):(fSlow4 * (fRec0[0] * fTemp94)))) + (fSlow323 * fTemp102))); + output73[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp88):(iSlow2?(fSlow4 * (fRec1[0] * fTemp88)):(fSlow4 * (fRec0[0] * fTemp88)))) + (fSlow324 * fTemp102))); + output74[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp42):(iSlow2?(fSlow4 * (fRec1[0] * fTemp42)):(fSlow4 * (fRec0[0] * fTemp42)))) + (fSlow325 * fTemp102))); + output75[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp70):(iSlow2?(fSlow4 * (fRec1[0] * fTemp70)):(fSlow4 * (fRec0[0] * fTemp70)))) + (fSlow326 * fTemp102))); + output76[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp43):(iSlow2?(fSlow4 * (fRec1[0] * fTemp43)):(fSlow4 * (fRec0[0] * fTemp43)))) + (fSlow327 * fTemp102))); + output77[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp56):(iSlow2?(fSlow4 * (fRec1[0] * fTemp56)):(fSlow4 * (fRec0[0] * fTemp56)))) + (fSlow328 * fTemp102))); + output78[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp44):(iSlow2?(fSlow4 * (fRec1[0] * fTemp44)):(fSlow4 * (fRec0[0] * fTemp44)))) + (fSlow329 * fTemp102))); + output79[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp18):(iSlow2?(fSlow4 * (fRec1[0] * fTemp18)):(fSlow4 * (fRec0[0] * fTemp18)))) + (fSlow330 * fTemp102))); + output80[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp45):(iSlow2?(fSlow4 * (fRec1[0] * fTemp45)):(fSlow4 * (fRec0[0] * fTemp45)))) + (fSlow331 * fTemp102))); + output81[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp99):(iSlow2?(fSlow4 * (fRec1[0] * fTemp99)):(fSlow4 * (fRec0[0] * fTemp99)))) + (fSlow332 * fTemp102))); + output82[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp11):(iSlow2?(fSlow4 * (fRec1[0] * fTemp11)):(fSlow4 * (fRec0[0] * fTemp11)))) + (fSlow333 * fTemp102))); + output83[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp19):(iSlow2?(fSlow4 * (fRec1[0] * fTemp19)):(fSlow4 * (fRec0[0] * fTemp19)))) + (fSlow334 * fTemp102))); + output84[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp46):(iSlow2?(fSlow4 * (fRec1[0] * fTemp46)):(fSlow4 * (fRec0[0] * fTemp46)))) + (fSlow335 * fTemp102))); + output85[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp57):(iSlow2?(fSlow4 * (fRec1[0] * fTemp57)):(fSlow4 * (fRec0[0] * fTemp57)))) + (fSlow336 * fTemp102))); + output86[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp100):(iSlow2?(fSlow4 * (fRec1[0] * fTemp100)):(fSlow4 * (fRec0[0] * fTemp100)))) + (fSlow337 * fTemp102))); + output87[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp71):(iSlow2?(fSlow4 * (fRec1[0] * fTemp71)):(fSlow4 * (fRec0[0] * fTemp71)))) + (fSlow338 * fTemp102))); + output88[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp12):(iSlow2?(fSlow4 * (fRec1[0] * fTemp12)):(fSlow4 * (fRec0[0] * fTemp12)))) + (fSlow339 * fTemp102))); + output89[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp89):(iSlow2?(fSlow4 * (fRec1[0] * fTemp89)):(fSlow4 * (fRec0[0] * fTemp89)))) + (fSlow340 * fTemp102))); + output90[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp13):(iSlow2?(fSlow4 * (fRec1[0] * fTemp13)):(fSlow4 * (fRec0[0] * fTemp13)))) + (fSlow341 * fTemp102))); + output91[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp90):(iSlow2?(fSlow4 * (fRec1[0] * fTemp90)):(fSlow4 * (fRec0[0] * fTemp90)))) + (fSlow342 * fTemp102))); + output92[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp47):(iSlow2?(fSlow4 * (fRec1[0] * fTemp47)):(fSlow4 * (fRec0[0] * fTemp47)))) + (fSlow343 * fTemp102))); + output93[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp72):(iSlow2?(fSlow4 * (fRec1[0] * fTemp72)):(fSlow4 * (fRec0[0] * fTemp72)))) + (fSlow344 * fTemp102))); + output94[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp14):(iSlow2?(fSlow4 * (fRec1[0] * fTemp14)):(fSlow4 * (fRec0[0] * fTemp14)))) + (fSlow345 * fTemp102))); + output95[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp58):(iSlow2?(fSlow4 * (fRec1[0] * fTemp58)):(fSlow4 * (fRec0[0] * fTemp58)))) + (fSlow346 * fTemp102))); + output96[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp48):(iSlow2?(fSlow4 * (fRec1[0] * fTemp48)):(fSlow4 * (fRec0[0] * fTemp48)))) + (fSlow347 * fTemp102))); + output97[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp20):(iSlow2?(fSlow4 * (fRec1[0] * fTemp20)):(fSlow4 * (fRec0[0] * fTemp20)))) + (fSlow348 * fTemp102))); + output98[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp15):(iSlow2?(fSlow4 * (fRec1[0] * fTemp15)):(fSlow4 * (fRec0[0] * fTemp15)))) + (fSlow349 * fTemp102))); + output99[i] = FAUSTFLOAT(((iSlow0?(fSlow9 * fTemp101):(iSlow2?(fSlow4 * (fRec1[0] * fTemp101)):(fSlow4 * (fRec0[0] * fTemp101)))) + (fSlow350 * fTemp102))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/source/HOAUGens/HOABeamHCardio2HOA1.cpp b/source/HOAUGens/HOABeamHCardio2HOA1.cpp index 974d118292..f7e20384d5 100644 --- a/source/HOAUGens/HOABeamHCardio2HOA1.cpp +++ b/source/HOAUGens/HOABeamHCardio2HOA1.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamHCardio2HOA1" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -636,6 +636,7 @@ class mydsp : public dsp { private: + FAUSTFLOAT fCheckbox0; FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; double fConst0; @@ -685,6 +686,7 @@ class mydsp : public dsp { m->declare("cijk.lib/name", "Cijk matrix"); m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamHCardio2HOA1"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -864,6 +866,7 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); fHslider0 = FAUSTFLOAT(0.0); fHslider1 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); @@ -899,8 +902,9 @@ class mydsp : public dsp { ui_interface->addHorizontalSlider("Azimuth", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); ui_interface->declare(&fHslider1, "style", "knob"); ui_interface->addHorizontalSlider("Elevation", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addCheckButton("Int/Float", &fCheckbox0); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 0.0001); ui_interface->closeBox(); } @@ -926,9 +930,9 @@ class mydsp : public dsp { FAUSTFLOAT* output13 = outputs[13]; FAUSTFLOAT* output14 = outputs[14]; FAUSTFLOAT* output15 = outputs[15]; - int iSlow0 = int(double(fHslider0)); - int iSlow1 = (iSlow0 >= 2); - int iSlow2 = (iSlow0 >= 1); + double fSlow0 = double(fHslider0); + double fSlow1 = (int(double(fCheckbox0))?fSlow0:double(int(fSlow0))); + double fSlow2 = max(0.0, (1.0 - fabs(fSlow1))); double fSlow3 = sin(double(fHslider1)); double fSlow4 = (0.43301700000000004 * fSlow3); double fSlow5 = mydsp_faustpower2_f(fSlow3); @@ -938,98 +942,100 @@ class mydsp : public dsp { double fSlow9 = double(fHslider2); double fSlow10 = sin(fSlow9); double fSlow11 = cos(fSlow9); - double fSlow12 = (0.19245000000000004 * fSlow3); - double fSlow13 = (fConst5 * fSlow7); - double fSlow14 = (fSlow7 * fSlow10); - double fSlow15 = (fConst4 * fSlow14); - double fSlow16 = ((3.0 * fSlow5) + -1.0); - double fSlow17 = (0.055554711935999999 * fSlow16); - double fSlow18 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); - double fSlow19 = (fSlow18 * fSlow6); - double fSlow20 = (fConst7 * fSlow19); - double fSlow21 = (0.11112 - (fSlow17 + fSlow20)); - double fSlow22 = (fConst0 * fSlow7); - double fSlow23 = (fConst10 * fSlow3); - double fSlow24 = (fSlow11 * fSlow6); - double fSlow25 = (fConst11 * fSlow24); - double fSlow26 = ((0.111109299648 * fSlow16) + 0.11112); - double fSlow27 = (fConst13 * fSlow14); - double fSlow28 = (fSlow11 * fSlow7); - double fSlow29 = (fConst13 * fSlow28); - double fSlow30 = (fConst4 * fSlow28); - double fSlow31 = (fSlow6 * fSlow10); - double fSlow32 = (fConst11 * fSlow31); - double fSlow33 = (fSlow3 * fSlow7); - double fSlow34 = (fConst13 * fSlow33); - double fSlow35 = (fSlow20 + (0.11112 - fSlow17)); - double fSlow36 = (fConst14 * fSlow7); - double fSlow37 = (fConst15 * fSlow7); - double fSlow38 = (fConst16 * fSlow31); - double fSlow39 = (fConst15 * fSlow14); - double fSlow40 = (0.335413669149 * fSlow3); - double fSlow41 = (fConst14 * fSlow14); - double fSlow42 = (fConst17 * fSlow14); - double fSlow43 = (0.0 - (fConst18 * fSlow14)); - double fSlow44 = (0.38730209625899997 * fSlow3); - double fSlow45 = (0.0 - (fConst18 * fSlow28)); - double fSlow46 = (0.0 - (fConst19 * fSlow14)); - double fSlow47 = (0.124224 * fSlow16); - double fSlow48 = (0.17213247615000002 * fSlow3); - double fSlow49 = (0.0 - (fConst19 * fSlow28)); - double fSlow50 = (fConst14 * fSlow28); - double fSlow51 = (fConst0 * fSlow28); - double fSlow52 = (fConst21 * fSlow3); - double fSlow53 = (0.14907119265000002 * fSlow3); - double fSlow54 = (0.0 - fSlow41); - double fSlow55 = (0.0 - fSlow39); - double fSlow56 = (fConst22 * fSlow19); - double fSlow57 = (fConst15 * fSlow28); - double fSlow58 = (fConst6 * fSlow6); - double fSlow59 = (0.56864069481277157 * (fSlow11 * fSlow10)); - double fSlow60 = (0.28432034740638579 * fSlow18); - double fSlow61 = (fConst23 * fSlow33); - double fSlow62 = (fConst24 * fSlow31); - double fSlow63 = (fSlow33 * fSlow10); - double fSlow64 = (fConst23 * fSlow63); - double fSlow65 = (0.089085626687999991 * fSlow16); - double fSlow66 = (fConst25 * fSlow19); - double fSlow67 = (fSlow65 + fSlow66); - double fSlow68 = (fConst26 * fSlow63); - double fSlow69 = (fSlow24 * fSlow10); - double fSlow70 = (0.0 - (fConst27 * fSlow69)); - double fSlow71 = (0.0 - (fConst28 * fSlow63)); - double fSlow72 = (0.10910718143999999 * fSlow16); - double fSlow73 = ((fSlow11 * fSlow3) * fSlow7); - double fSlow74 = (0.0 - (fConst28 * fSlow73)); - double fSlow75 = (fConst26 * fSlow73); - double fSlow76 = (fSlow65 - fSlow66); - double fSlow77 = (fConst29 * fSlow19); - double fSlow78 = (0.0 - fSlow64); - double fSlow79 = (fConst23 * fSlow73); - double fSlow80 = (0.0 - (fConst30 * fSlow69)); - double fSlow81 = (fConst31 * fSlow19); + double fSlow12 = max(0.0, (1.0 - fabs((fSlow1 + -1.0)))); + double fSlow13 = (0.19245000000000004 * fSlow3); + double fSlow14 = (fConst5 * fSlow7); + double fSlow15 = max(0.0, (1.0 - fabs((fSlow1 + -2.0)))); + double fSlow16 = (fSlow7 * fSlow10); + double fSlow17 = (fConst4 * fSlow16); + double fSlow18 = ((3.0 * fSlow5) + -1.0); + double fSlow19 = (0.055554711935999999 * fSlow18); + double fSlow20 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); + double fSlow21 = (fSlow20 * fSlow6); + double fSlow22 = (fConst7 * fSlow21); + double fSlow23 = (0.11112 - (fSlow19 + fSlow22)); + double fSlow24 = (fConst0 * fSlow7); + double fSlow25 = (fConst10 * fSlow3); + double fSlow26 = (fSlow11 * fSlow6); + double fSlow27 = (fConst11 * fSlow26); + double fSlow28 = ((0.111109299648 * fSlow18) + 0.11112); + double fSlow29 = (fConst13 * fSlow16); + double fSlow30 = (fSlow11 * fSlow7); + double fSlow31 = (fConst13 * fSlow30); + double fSlow32 = (fConst4 * fSlow30); + double fSlow33 = (fSlow6 * fSlow10); + double fSlow34 = (fConst11 * fSlow33); + double fSlow35 = (fSlow3 * fSlow7); + double fSlow36 = (fConst13 * fSlow35); + double fSlow37 = (fSlow22 + (0.11112 - fSlow19)); + double fSlow38 = (fConst14 * fSlow7); + double fSlow39 = (fConst15 * fSlow7); + double fSlow40 = (fConst16 * fSlow33); + double fSlow41 = (fConst15 * fSlow16); + double fSlow42 = (0.335413669149 * fSlow3); + double fSlow43 = (fConst14 * fSlow16); + double fSlow44 = (fConst17 * fSlow16); + double fSlow45 = (0.0 - (fConst18 * fSlow16)); + double fSlow46 = (0.38730209625899997 * fSlow3); + double fSlow47 = (0.0 - (fConst18 * fSlow30)); + double fSlow48 = (0.0 - (fConst19 * fSlow16)); + double fSlow49 = (0.124224 * fSlow18); + double fSlow50 = (0.17213247615000002 * fSlow3); + double fSlow51 = (0.0 - (fConst19 * fSlow30)); + double fSlow52 = (fConst14 * fSlow30); + double fSlow53 = (fConst0 * fSlow30); + double fSlow54 = (fConst21 * fSlow3); + double fSlow55 = (0.14907119265000002 * fSlow3); + double fSlow56 = (0.0 - fSlow43); + double fSlow57 = (0.0 - fSlow41); + double fSlow58 = (fConst22 * fSlow21); + double fSlow59 = (fConst15 * fSlow30); + double fSlow60 = (fConst6 * fSlow6); + double fSlow61 = (0.56864069481277157 * (fSlow11 * fSlow10)); + double fSlow62 = (0.28432034740638579 * fSlow20); + double fSlow63 = (fConst23 * fSlow35); + double fSlow64 = (fConst24 * fSlow33); + double fSlow65 = (fSlow35 * fSlow10); + double fSlow66 = (fConst23 * fSlow65); + double fSlow67 = (0.089085626687999991 * fSlow18); + double fSlow68 = (fConst25 * fSlow21); + double fSlow69 = (fSlow67 + fSlow68); + double fSlow70 = (fConst26 * fSlow65); + double fSlow71 = (fSlow26 * fSlow10); + double fSlow72 = (0.0 - (fConst27 * fSlow71)); + double fSlow73 = (0.0 - (fConst28 * fSlow65)); + double fSlow74 = (0.10910718143999999 * fSlow18); + double fSlow75 = ((fSlow11 * fSlow3) * fSlow7); + double fSlow76 = (0.0 - (fConst28 * fSlow75)); + double fSlow77 = (fConst26 * fSlow75); + double fSlow78 = (fSlow67 - fSlow68); + double fSlow79 = (fConst29 * fSlow21); + double fSlow80 = (0.0 - fSlow66); + double fSlow81 = (fConst23 * fSlow75); + double fSlow82 = (0.0 - (fConst30 * fSlow71)); + double fSlow83 = (fConst31 * fSlow21); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); double fTemp1 = double(input2[i]); double fTemp2 = double(input1[i]); double fTemp3 = double(input3[i]); double fTemp4 = ((fSlow10 * fTemp2) + (fSlow11 * fTemp3)); - output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + ((fSlow12 * fTemp1) + (fSlow13 * fTemp4))):(iSlow2?((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))):fTemp0))); - output1[i] = FAUSTFLOAT((iSlow1?((fSlow21 * fTemp2) + (fSlow10 * ((fSlow22 * ((fConst8 * fTemp0) + (fSlow23 * fTemp1))) + (fSlow25 * fTemp3)))):(iSlow2?((fSlow15 * fTemp0) + (0.24993000000000001 * fTemp2)):fTemp2))); - output2[i] = FAUSTFLOAT((iSlow1?((fSlow26 * fTemp1) + (fSlow3 * (((fSlow27 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow29 * fTemp3)))):(iSlow2?((fSlow4 * fTemp0) + (0.24993000000000001 * fTemp1)):fTemp1))); - output3[i] = FAUSTFLOAT((iSlow1?((fSlow11 * (((fSlow13 * fTemp0) + (fSlow32 * fTemp2)) + (fSlow34 * fTemp1))) + (fSlow35 * fTemp3)):(iSlow2?((fSlow30 * fTemp0) + (0.24993000000000001 * fTemp3)):fTemp3))); - output4[i] = FAUSTFLOAT((iSlow1?((fSlow11 * ((fSlow37 * fTemp2) + (fSlow38 * fTemp0))) + (fSlow39 * fTemp3)):(iSlow2?(fSlow36 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3))):0.0))); - output5[i] = FAUSTFLOAT((iSlow1?((fSlow3 * ((fSlow42 * fTemp0) + (0.14907119265000002 * fTemp2))) + (fSlow39 * fTemp1)):(iSlow2?((fSlow40 * fTemp2) + (fSlow41 * fTemp1)):0.0))); - output6[i] = FAUSTFLOAT((iSlow1?(((fSlow46 * fTemp2) + ((fSlow47 * fTemp0) + (fSlow48 * fTemp1))) + (fSlow49 * fTemp3)):(iSlow2?(((fSlow43 * fTemp2) + (fSlow44 * fTemp1)) + (fSlow45 * fTemp3)):0.0))); - output7[i] = FAUSTFLOAT((iSlow1?((fSlow51 * ((fConst20 * fTemp1) + (fSlow52 * fTemp0))) + (fSlow53 * fTemp3)):(iSlow2?((fSlow50 * fTemp1) + (fSlow40 * fTemp3)):0.0))); - output8[i] = FAUSTFLOAT((iSlow1?((fSlow55 * fTemp2) + ((fSlow56 * fTemp0) + (fSlow57 * fTemp3))):(iSlow2?((fSlow54 * fTemp2) + (fSlow50 * fTemp3)):0.0))); - output9[i] = FAUSTFLOAT((iSlow1?(fSlow58 * ((fSlow59 * fTemp3) + (fSlow60 * fTemp2))):0.0)); - output10[i] = FAUSTFLOAT((iSlow1?((fSlow11 * ((fSlow61 * fTemp2) + (fSlow62 * fTemp1))) + (fSlow64 * fTemp3)):0.0)); - output11[i] = FAUSTFLOAT((iSlow1?(((fSlow67 * fTemp2) + (fSlow68 * fTemp1)) + (fSlow70 * fTemp3)):0.0)); - output12[i] = FAUSTFLOAT((iSlow1?(((fSlow71 * fTemp2) + (fSlow72 * fTemp1)) + (fSlow74 * fTemp3)):0.0)); - output13[i] = FAUSTFLOAT((iSlow1?(((fSlow70 * fTemp2) + (fSlow75 * fTemp1)) + (fSlow76 * fTemp3)):0.0)); - output14[i] = FAUSTFLOAT((iSlow1?((fSlow77 * fTemp1) + ((fSlow78 * fTemp2) + (fSlow79 * fTemp3))):0.0)); - output15[i] = FAUSTFLOAT((iSlow1?((fSlow80 * fTemp2) + (fSlow81 * fTemp3)):0.0)); + output0[i] = FAUSTFLOAT((((fSlow2 * fTemp0) + (((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))) * fSlow12)) + (((0.11112 * fTemp0) + ((fSlow13 * fTemp1) + (fSlow14 * fTemp4))) * fSlow15))); + output1[i] = FAUSTFLOAT((((fSlow2 * fTemp2) + (fSlow12 * ((fSlow17 * fTemp0) + (0.24993000000000001 * fTemp2)))) + (fSlow15 * ((fSlow23 * fTemp2) + (fSlow10 * ((fSlow24 * ((fConst8 * fTemp0) + (fSlow25 * fTemp1))) + (fSlow27 * fTemp3))))))); + output2[i] = FAUSTFLOAT((((fSlow2 * fTemp1) + (fSlow12 * ((fSlow4 * fTemp0) + (0.24993000000000001 * fTemp1)))) + (fSlow15 * ((fSlow28 * fTemp1) + (fSlow3 * (((fSlow29 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow31 * fTemp3))))))); + output3[i] = FAUSTFLOAT((((fSlow2 * fTemp3) + (fSlow12 * ((fSlow32 * fTemp0) + (0.24993000000000001 * fTemp3)))) + (fSlow15 * ((fSlow11 * (((fSlow14 * fTemp0) + (fSlow34 * fTemp2)) + (fSlow36 * fTemp1))) + (fSlow37 * fTemp3))))); + output4[i] = FAUSTFLOAT(((fSlow38 * (fSlow12 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3)))) + (fSlow15 * ((fSlow11 * ((fSlow39 * fTemp2) + (fSlow40 * fTemp0))) + (fSlow41 * fTemp3))))); + output5[i] = FAUSTFLOAT(((fSlow12 * ((fSlow42 * fTemp2) + (fSlow43 * fTemp1))) + (fSlow15 * ((fSlow3 * ((fSlow44 * fTemp0) + (0.14907119265000002 * fTemp2))) + (fSlow41 * fTemp1))))); + output6[i] = FAUSTFLOAT(((fSlow12 * (((fSlow45 * fTemp2) + (fSlow46 * fTemp1)) + (fSlow47 * fTemp3))) + (fSlow15 * (((fSlow48 * fTemp2) + ((fSlow49 * fTemp0) + (fSlow50 * fTemp1))) + (fSlow51 * fTemp3))))); + output7[i] = FAUSTFLOAT(((fSlow12 * ((fSlow52 * fTemp1) + (fSlow42 * fTemp3))) + (fSlow15 * ((fSlow53 * ((fConst20 * fTemp1) + (fSlow54 * fTemp0))) + (fSlow55 * fTemp3))))); + output8[i] = FAUSTFLOAT(((fSlow12 * ((fSlow56 * fTemp2) + (fSlow52 * fTemp3))) + (fSlow15 * ((fSlow57 * fTemp2) + ((fSlow58 * fTemp0) + (fSlow59 * fTemp3)))))); + output9[i] = FAUSTFLOAT((fSlow60 * (fSlow15 * ((fSlow61 * fTemp3) + (fSlow62 * fTemp2))))); + output10[i] = FAUSTFLOAT((fSlow15 * ((fSlow11 * ((fSlow63 * fTemp2) + (fSlow64 * fTemp1))) + (fSlow66 * fTemp3)))); + output11[i] = FAUSTFLOAT((fSlow15 * (((fSlow69 * fTemp2) + (fSlow70 * fTemp1)) + (fSlow72 * fTemp3)))); + output12[i] = FAUSTFLOAT((fSlow15 * (((fSlow73 * fTemp2) + (fSlow74 * fTemp1)) + (fSlow76 * fTemp3)))); + output13[i] = FAUSTFLOAT((fSlow15 * (((fSlow72 * fTemp2) + (fSlow77 * fTemp1)) + (fSlow78 * fTemp3)))); + output14[i] = FAUSTFLOAT((fSlow15 * ((fSlow79 * fTemp1) + ((fSlow80 * fTemp2) + (fSlow81 * fTemp3))))); + output15[i] = FAUSTFLOAT((fSlow15 * ((fSlow82 * fTemp2) + (fSlow83 * fTemp3)))); } diff --git a/source/HOAUGens/HOABeamHCardio2HOA2.cpp b/source/HOAUGens/HOABeamHCardio2HOA2.cpp index b4968db10a..f5d3f0893a 100644 --- a/source/HOAUGens/HOABeamHCardio2HOA2.cpp +++ b/source/HOAUGens/HOABeamHCardio2HOA2.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamHCardio2HOA2" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -636,6 +636,7 @@ class mydsp : public dsp { private: + FAUSTFLOAT fCheckbox0; FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; double fConst0; @@ -717,6 +718,7 @@ class mydsp : public dsp { m->declare("cijk.lib/name", "Cijk matrix"); m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamHCardio2HOA2"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -984,6 +986,7 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); fHslider0 = FAUSTFLOAT(0.0); fHslider1 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); @@ -1019,8 +1022,9 @@ class mydsp : public dsp { ui_interface->addHorizontalSlider("Azimuth", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); ui_interface->declare(&fHslider1, "style", "knob"); ui_interface->addHorizontalSlider("Elevation", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addCheckButton("Int/Float", &fCheckbox0); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 0.0001); ui_interface->closeBox(); } @@ -1060,9 +1064,9 @@ class mydsp : public dsp { FAUSTFLOAT* output22 = outputs[22]; FAUSTFLOAT* output23 = outputs[23]; FAUSTFLOAT* output24 = outputs[24]; - int iSlow0 = int(double(fHslider0)); - int iSlow1 = (iSlow0 >= 2); - int iSlow2 = (iSlow0 >= 1); + double fSlow0 = double(fHslider0); + double fSlow1 = (int(double(fCheckbox0))?fSlow0:double(int(fSlow0))); + double fSlow2 = max(0.0, (1.0 - fabs(fSlow1))); double fSlow3 = sin(double(fHslider1)); double fSlow4 = (0.43301700000000004 * fSlow3); double fSlow5 = mydsp_faustpower2_f(fSlow3); @@ -1072,162 +1076,164 @@ class mydsp : public dsp { double fSlow9 = double(fHslider2); double fSlow10 = sin(fSlow9); double fSlow11 = cos(fSlow9); - double fSlow12 = (fConst5 * fSlow6); - double fSlow13 = (fSlow11 * fSlow10); - double fSlow14 = (0.70921930945587786 * fSlow13); - double fSlow15 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); - double fSlow16 = (0.35460965472793893 * fSlow15); - double fSlow17 = (fConst0 * fSlow7); - double fSlow18 = (fSlow3 * fSlow10); - double fSlow19 = (fConst8 * fSlow18); - double fSlow20 = (fSlow11 * fSlow3); - double fSlow21 = (fConst8 * fSlow20); - double fSlow22 = (0.19245000000000004 * fSlow3); - double fSlow23 = ((3.0 * fSlow5) + -1.0); - double fSlow24 = (0.124224 * fSlow23); - double fSlow25 = (fConst3 * fSlow7); - double fSlow26 = (0.39894624032434478 * fSlow10); - double fSlow27 = (0.30902256091651653 * fSlow11); - double fSlow28 = (0.335413669149 * fSlow3); - double fSlow29 = (fSlow7 * fSlow10); - double fSlow30 = (0.0 - (fConst9 * fSlow29)); - double fSlow31 = (fConst10 * fSlow29); - double fSlow32 = (0.0 - fSlow31); - double fSlow33 = (fConst11 * fSlow3); - double fSlow34 = (fSlow11 * fSlow6); - double fSlow35 = (fConst12 * fSlow34); - double fSlow36 = (0.055554711935999999 * fSlow23); - double fSlow37 = (fSlow15 * fSlow6); - double fSlow38 = (fConst13 * fSlow37); - double fSlow39 = (0.11112 - (fSlow36 + fSlow38)); - double fSlow40 = (fSlow11 * fSlow7); - double fSlow41 = (fConst14 * fSlow40); - double fSlow42 = (0.14907119265000002 * fSlow3); - double fSlow43 = (0.0 - (fConst15 * fSlow29)); - double fSlow44 = (0.0 - (fConst14 * fSlow29)); - double fSlow45 = (fConst10 * fSlow7); - double fSlow46 = (fConst17 * fSlow29); - double fSlow47 = (fConst17 * fSlow40); - double fSlow48 = ((0.111109299648 * fSlow23) + 0.11112); - double fSlow49 = (fConst14 * fSlow7); - double fSlow50 = (0.39894624032434478 * fSlow11); - double fSlow51 = (0.30902256091651653 * fSlow10); - double fSlow52 = (0.0 - (fConst9 * fSlow40)); - double fSlow53 = (0.0 - (fConst15 * fSlow40)); - double fSlow54 = (fSlow38 + (0.11112 - fSlow36)); - double fSlow55 = (fConst18 * fSlow7); - double fSlow56 = (fSlow6 * fSlow10); - double fSlow57 = (fConst12 * fSlow56); - double fSlow58 = (fSlow3 * fSlow7); - double fSlow59 = (fConst17 * fSlow58); - double fSlow60 = (fConst19 * fSlow10); - double fSlow61 = (fConst20 * fSlow20); - double fSlow62 = (fConst20 * fSlow18); - double fSlow63 = (fConst21 * fSlow56); - double fSlow64 = (0.079363856447999995 * fSlow23); - double fSlow65 = (0.11112 - fSlow64); - double fSlow66 = (fSlow34 * fSlow10); - double fSlow67 = (0.0 - (fConst22 * fSlow66)); - double fSlow68 = (fConst23 * fSlow18); - double fSlow69 = (fConst24 * fSlow29); - double fSlow70 = (0.039681866111999996 * fSlow23); - double fSlow71 = (fConst25 * fSlow37); - double fSlow72 = (fSlow70 + (0.11112 - fSlow71)); - double fSlow73 = (fConst26 * fSlow66); - double fSlow74 = (fSlow58 * fSlow10); - double fSlow75 = (0.0 - (fConst27 * fSlow74)); - double fSlow76 = (0.38730209625899997 * fSlow3); - double fSlow77 = (fConst28 * fSlow29); - double fSlow78 = (fConst28 * fSlow40); - double fSlow79 = (fSlow64 + 0.11112); - double fSlow80 = (0.0 - (fConst29 * fSlow37)); - double fSlow81 = (fConst10 * fSlow40); - double fSlow82 = (fConst8 * fSlow3); - double fSlow83 = (fConst23 * fSlow20); - double fSlow84 = ((fSlow70 + fSlow71) + 0.11112); - double fSlow85 = (fConst0 * fSlow40); - double fSlow86 = (fConst20 * fSlow3); - double fSlow87 = (fConst30 * fSlow37); - double fSlow88 = (fConst31 * fSlow7); - double fSlow89 = (0.56864069481277157 * fSlow13); - double fSlow90 = (0.28432034740638579 * fSlow15); - double fSlow91 = (fConst32 * fSlow7); - double fSlow92 = (0.28347631111800004 * fSlow3); - double fSlow93 = (fConst33 * fSlow7); - double fSlow94 = (fConst34 * fSlow58); - double fSlow95 = (fConst35 * fSlow56); - double fSlow96 = (fConst36 * fSlow7); - double fSlow97 = (fConst34 * fSlow29); - double fSlow98 = (fConst36 * fSlow29); - double fSlow99 = (0.0 - (fConst37 * fSlow40)); - double fSlow100 = (0.35857228434300004 * fSlow3); - double fSlow101 = (fConst3 * fSlow29); - double fSlow102 = (fConst38 * fSlow29); - double fSlow103 = (0.0 - (fConst39 * fSlow40)); - double fSlow104 = (0.089085626687999991 * fSlow23); - double fSlow105 = (fConst40 * fSlow37); - double fSlow106 = (fSlow104 + fSlow105); - double fSlow107 = (0.0 - (fConst41 * fSlow66)); - double fSlow108 = (0.0 - (fConst42 * fSlow29)); - double fSlow109 = (0.38032316126999999 * fSlow3); - double fSlow110 = (0.0 - (fConst42 * fSlow40)); - double fSlow111 = (0.0 - (fConst43 * fSlow29)); - double fSlow112 = (fSlow20 * fSlow7); - double fSlow113 = (0.0 - (fConst44 * fSlow112)); - double fSlow114 = (0.10910718143999999 * fSlow23); - double fSlow115 = (0.0 - (fConst44 * fSlow74)); - double fSlow116 = (0.16903075950000004 * fSlow3); - double fSlow117 = (0.0 - (fConst43 * fSlow40)); - double fSlow118 = (fConst45 * fSlow40); - double fSlow119 = (0.0 - (fConst37 * fSlow29)); - double fSlow120 = (fConst46 * fSlow3); - double fSlow121 = (0.0 - (fConst39 * fSlow29)); - double fSlow122 = (fSlow104 - fSlow105); - double fSlow123 = (0.15936380355000002 * fSlow3); - double fSlow124 = (0.0 - (fConst33 * fSlow29)); - double fSlow125 = (fConst33 * fSlow40); - double fSlow126 = (fConst49 * fSlow3); - double fSlow127 = (0.0 - fSlow98); - double fSlow128 = (fConst50 * fSlow37); - double fSlow129 = (0.0 - (fConst34 * fSlow74)); - double fSlow130 = (0.12598816230000001 * fSlow3); - double fSlow131 = (0.0 - (fConst31 * fSlow29)); - double fSlow132 = (fConst31 * fSlow40); - double fSlow133 = (0.0 - (fConst32 * fSlow29)); - double fSlow134 = (fConst51 * fSlow37); - double fSlow135 = (0.0 - (fConst52 * fSlow66)); - double fSlow136 = (fConst32 * fSlow40); - double fSlow137 = (0.29969976813193649 * fSlow15); - double fSlow138 = (0.59939953626387299 * fSlow13); - double fSlow139 = (0.42383938840116497 * fSlow13); - double fSlow140 = (0.21191969420058249 * fSlow15); - double fSlow141 = (fConst53 * fSlow58); - double fSlow142 = (fConst54 * fSlow58); - double fSlow143 = (fConst26 * fSlow56); - double fSlow144 = (0.068731027392000002 * fSlow23); - double fSlow145 = (fConst54 * fSlow74); - double fSlow146 = (fConst16 * fSlow74); - double fSlow147 = (0.0 - (fConst55 * fSlow112)); - double fSlow148 = (0.097200435264000004 * fSlow23); - double fSlow149 = (fConst56 * fSlow37); - double fSlow150 = (fSlow148 + fSlow149); - double fSlow151 = (0.0 - (fConst57 * fSlow66)); - double fSlow152 = (0.10131694289093836 * fSlow13); - double fSlow153 = (0.050658471445469179 * fSlow15); - double fSlow154 = (0.0 - (fConst58 * fSlow112)); - double fSlow155 = (0.0 - (fConst58 * fSlow74)); - double fSlow156 = (0.10647773203199999 * fSlow23); - double fSlow157 = (0.0 - (fConst55 * fSlow74)); - double fSlow158 = (fConst59 * fSlow112); - double fSlow159 = (fSlow148 - fSlow149); - double fSlow160 = (0.0 - fSlow145); - double fSlow161 = (fConst54 * fSlow112); - double fSlow162 = (fConst60 * fSlow37); - double fSlow163 = (0.0 - (fConst61 * fSlow66)); - double fSlow164 = (0.0 - (fConst53 * fSlow74)); - double fSlow165 = (fConst53 * fSlow112); - double fSlow166 = (0.0 - (fConst62 * fSlow66)); - double fSlow167 = (fConst63 * fSlow37); + double fSlow12 = max(0.0, (1.0 - fabs((fSlow1 + -1.0)))); + double fSlow13 = (fConst5 * fSlow6); + double fSlow14 = (fSlow11 * fSlow10); + double fSlow15 = (0.70921930945587786 * fSlow14); + double fSlow16 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); + double fSlow17 = (0.35460965472793893 * fSlow16); + double fSlow18 = (fConst0 * fSlow7); + double fSlow19 = (fSlow3 * fSlow10); + double fSlow20 = (fConst8 * fSlow19); + double fSlow21 = (fSlow11 * fSlow3); + double fSlow22 = (fConst8 * fSlow21); + double fSlow23 = (0.19245000000000004 * fSlow3); + double fSlow24 = ((3.0 * fSlow5) + -1.0); + double fSlow25 = (0.124224 * fSlow24); + double fSlow26 = max(0.0, (1.0 - fabs((fSlow1 + -2.0)))); + double fSlow27 = (fConst3 * fSlow7); + double fSlow28 = (0.39894624032434478 * fSlow10); + double fSlow29 = (0.30902256091651653 * fSlow11); + double fSlow30 = (0.335413669149 * fSlow3); + double fSlow31 = (fSlow7 * fSlow10); + double fSlow32 = (0.0 - (fConst9 * fSlow31)); + double fSlow33 = (fConst10 * fSlow31); + double fSlow34 = (0.0 - fSlow33); + double fSlow35 = (fConst11 * fSlow3); + double fSlow36 = (fSlow11 * fSlow6); + double fSlow37 = (fConst12 * fSlow36); + double fSlow38 = (0.055554711935999999 * fSlow24); + double fSlow39 = (fSlow16 * fSlow6); + double fSlow40 = (fConst13 * fSlow39); + double fSlow41 = (0.11112 - (fSlow38 + fSlow40)); + double fSlow42 = (fSlow11 * fSlow7); + double fSlow43 = (fConst14 * fSlow42); + double fSlow44 = (0.14907119265000002 * fSlow3); + double fSlow45 = (0.0 - (fConst15 * fSlow31)); + double fSlow46 = (0.0 - (fConst14 * fSlow31)); + double fSlow47 = (fConst10 * fSlow7); + double fSlow48 = (fConst17 * fSlow31); + double fSlow49 = (fConst17 * fSlow42); + double fSlow50 = ((0.111109299648 * fSlow24) + 0.11112); + double fSlow51 = (fConst14 * fSlow7); + double fSlow52 = (0.39894624032434478 * fSlow11); + double fSlow53 = (0.30902256091651653 * fSlow10); + double fSlow54 = (0.0 - (fConst9 * fSlow42)); + double fSlow55 = (0.0 - (fConst15 * fSlow42)); + double fSlow56 = (fSlow40 + (0.11112 - fSlow38)); + double fSlow57 = (fConst18 * fSlow7); + double fSlow58 = (fSlow6 * fSlow10); + double fSlow59 = (fConst12 * fSlow58); + double fSlow60 = (fSlow3 * fSlow7); + double fSlow61 = (fConst17 * fSlow60); + double fSlow62 = (fConst19 * fSlow10); + double fSlow63 = (fConst20 * fSlow21); + double fSlow64 = (fConst20 * fSlow19); + double fSlow65 = (fConst21 * fSlow58); + double fSlow66 = (0.079363856447999995 * fSlow24); + double fSlow67 = (0.11112 - fSlow66); + double fSlow68 = (fSlow36 * fSlow10); + double fSlow69 = (0.0 - (fConst22 * fSlow68)); + double fSlow70 = (fConst23 * fSlow19); + double fSlow71 = (fConst24 * fSlow31); + double fSlow72 = (0.039681866111999996 * fSlow24); + double fSlow73 = (fConst25 * fSlow39); + double fSlow74 = (fSlow72 + (0.11112 - fSlow73)); + double fSlow75 = (fConst26 * fSlow68); + double fSlow76 = (fSlow60 * fSlow10); + double fSlow77 = (0.0 - (fConst27 * fSlow76)); + double fSlow78 = (0.38730209625899997 * fSlow3); + double fSlow79 = (fConst28 * fSlow31); + double fSlow80 = (fConst28 * fSlow42); + double fSlow81 = (fSlow66 + 0.11112); + double fSlow82 = (0.0 - (fConst29 * fSlow39)); + double fSlow83 = (fConst10 * fSlow42); + double fSlow84 = (fConst8 * fSlow3); + double fSlow85 = (fConst23 * fSlow21); + double fSlow86 = ((fSlow72 + fSlow73) + 0.11112); + double fSlow87 = (fConst0 * fSlow42); + double fSlow88 = (fConst20 * fSlow3); + double fSlow89 = (fConst30 * fSlow39); + double fSlow90 = (fConst31 * fSlow7); + double fSlow91 = (0.56864069481277157 * fSlow14); + double fSlow92 = (0.28432034740638579 * fSlow16); + double fSlow93 = (fConst32 * fSlow7); + double fSlow94 = (0.28347631111800004 * fSlow3); + double fSlow95 = (fConst33 * fSlow7); + double fSlow96 = (fConst34 * fSlow60); + double fSlow97 = (fConst35 * fSlow58); + double fSlow98 = (fConst36 * fSlow7); + double fSlow99 = (fConst34 * fSlow31); + double fSlow100 = (fConst36 * fSlow31); + double fSlow101 = (0.0 - (fConst37 * fSlow42)); + double fSlow102 = (0.35857228434300004 * fSlow3); + double fSlow103 = (fConst3 * fSlow31); + double fSlow104 = (fConst38 * fSlow31); + double fSlow105 = (0.0 - (fConst39 * fSlow42)); + double fSlow106 = (0.089085626687999991 * fSlow24); + double fSlow107 = (fConst40 * fSlow39); + double fSlow108 = (fSlow106 + fSlow107); + double fSlow109 = (0.0 - (fConst41 * fSlow68)); + double fSlow110 = (0.0 - (fConst42 * fSlow31)); + double fSlow111 = (0.38032316126999999 * fSlow3); + double fSlow112 = (0.0 - (fConst42 * fSlow42)); + double fSlow113 = (0.0 - (fConst43 * fSlow31)); + double fSlow114 = (fSlow21 * fSlow7); + double fSlow115 = (0.0 - (fConst44 * fSlow114)); + double fSlow116 = (0.10910718143999999 * fSlow24); + double fSlow117 = (0.0 - (fConst44 * fSlow76)); + double fSlow118 = (0.16903075950000004 * fSlow3); + double fSlow119 = (0.0 - (fConst43 * fSlow42)); + double fSlow120 = (fConst45 * fSlow42); + double fSlow121 = (0.0 - (fConst37 * fSlow31)); + double fSlow122 = (fConst46 * fSlow3); + double fSlow123 = (0.0 - (fConst39 * fSlow31)); + double fSlow124 = (fSlow106 - fSlow107); + double fSlow125 = (0.15936380355000002 * fSlow3); + double fSlow126 = (0.0 - (fConst33 * fSlow31)); + double fSlow127 = (fConst33 * fSlow42); + double fSlow128 = (fConst49 * fSlow3); + double fSlow129 = (0.0 - fSlow100); + double fSlow130 = (fConst50 * fSlow39); + double fSlow131 = (0.0 - (fConst34 * fSlow76)); + double fSlow132 = (0.12598816230000001 * fSlow3); + double fSlow133 = (0.0 - (fConst31 * fSlow31)); + double fSlow134 = (fConst31 * fSlow42); + double fSlow135 = (0.0 - (fConst32 * fSlow31)); + double fSlow136 = (fConst51 * fSlow39); + double fSlow137 = (0.0 - (fConst52 * fSlow68)); + double fSlow138 = (fConst32 * fSlow42); + double fSlow139 = (0.29969976813193649 * fSlow16); + double fSlow140 = (0.59939953626387299 * fSlow14); + double fSlow141 = (0.42383938840116497 * fSlow14); + double fSlow142 = (0.21191969420058249 * fSlow16); + double fSlow143 = (fConst53 * fSlow60); + double fSlow144 = (fConst54 * fSlow60); + double fSlow145 = (fConst26 * fSlow58); + double fSlow146 = (0.068731027392000002 * fSlow24); + double fSlow147 = (fConst54 * fSlow76); + double fSlow148 = (fConst16 * fSlow76); + double fSlow149 = (0.0 - (fConst55 * fSlow114)); + double fSlow150 = (0.097200435264000004 * fSlow24); + double fSlow151 = (fConst56 * fSlow39); + double fSlow152 = (fSlow150 + fSlow151); + double fSlow153 = (0.0 - (fConst57 * fSlow68)); + double fSlow154 = (0.10131694289093836 * fSlow14); + double fSlow155 = (0.050658471445469179 * fSlow16); + double fSlow156 = (0.0 - (fConst58 * fSlow114)); + double fSlow157 = (0.0 - (fConst58 * fSlow76)); + double fSlow158 = (0.10647773203199999 * fSlow24); + double fSlow159 = (0.0 - (fConst55 * fSlow76)); + double fSlow160 = (fConst59 * fSlow114); + double fSlow161 = (fSlow150 - fSlow151); + double fSlow162 = (0.0 - fSlow147); + double fSlow163 = (fConst54 * fSlow114); + double fSlow164 = (fConst60 * fSlow39); + double fSlow165 = (0.0 - (fConst61 * fSlow68)); + double fSlow166 = (0.0 - (fConst53 * fSlow76)); + double fSlow167 = (fConst53 * fSlow114); + double fSlow168 = (0.0 - (fConst62 * fSlow68)); + double fSlow169 = (fConst63 * fSlow39); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); double fTemp1 = double(input2[i]); @@ -1239,33 +1245,33 @@ class mydsp : public dsp { double fTemp7 = double(input5[i]); double fTemp8 = double(input7[i]); double fTemp9 = double(input6[i]); - output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + ((fSlow12 * ((fSlow14 * fTemp5) + (fSlow16 * fTemp6))) + ((fSlow17 * (((fConst6 * fTemp4) + (fSlow19 * fTemp7)) + (fSlow21 * fTemp8))) + ((fSlow22 * fTemp1) + (fSlow24 * fTemp9))))):(iSlow2?((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))):fTemp0))); - output1[i] = FAUSTFLOAT((iSlow1?((((fSlow10 * ((fSlow17 * ((fConst6 * fTemp0) + (fSlow33 * fTemp1))) + (fSlow35 * fTemp3))) + ((fSlow39 * fTemp2) + ((fSlow41 * fTemp5) + (fSlow42 * fTemp7)))) + (fSlow43 * fTemp9)) + (fSlow44 * fTemp6)):(iSlow2?((0.24993000000000001 * fTemp2) + ((((fSlow25 * ((fSlow26 * fTemp0) + (fSlow27 * fTemp5))) + (fSlow28 * fTemp7)) + (fSlow30 * fTemp9)) + (fSlow32 * fTemp6))):fTemp2))); + output0[i] = FAUSTFLOAT((((fSlow2 * fTemp0) + (((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))) * fSlow12)) + (((0.11112 * fTemp0) + ((fSlow13 * ((fSlow15 * fTemp5) + (fSlow17 * fTemp6))) + ((fSlow18 * (((fConst6 * fTemp4) + (fSlow20 * fTemp7)) + (fSlow22 * fTemp8))) + ((fSlow23 * fTemp1) + (fSlow25 * fTemp9))))) * fSlow26))); + output1[i] = FAUSTFLOAT((((fSlow2 * fTemp2) + (fSlow12 * ((0.24993000000000001 * fTemp2) + ((((fSlow27 * ((fSlow28 * fTemp0) + (fSlow29 * fTemp5))) + (fSlow30 * fTemp7)) + (fSlow32 * fTemp9)) + (fSlow34 * fTemp6))))) + (fSlow26 * ((((fSlow10 * ((fSlow18 * ((fConst6 * fTemp0) + (fSlow35 * fTemp1))) + (fSlow37 * fTemp3))) + ((fSlow41 * fTemp2) + ((fSlow43 * fTemp5) + (fSlow44 * fTemp7)))) + (fSlow45 * fTemp9)) + (fSlow46 * fTemp6))))); double fTemp10 = ((fSlow10 * fTemp7) + (fSlow11 * fTemp8)); - output2[i] = FAUSTFLOAT((iSlow1?((fSlow3 * ((((fSlow46 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow47 * fTemp3)) + (0.17213247615000002 * fTemp9))) + ((fSlow48 * fTemp1) + (fSlow49 * fTemp10))):(iSlow2?((0.24993000000000001 * fTemp1) + ((fSlow3 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp9))) + (fSlow45 * fTemp10))):fTemp1))); - output3[i] = FAUSTFLOAT((iSlow1?((fSlow49 * ((fSlow10 * fTemp5) + (fSlow11 * fTemp6))) + ((fSlow53 * fTemp9) + ((fSlow54 * fTemp3) + ((fSlow11 * (((fSlow55 * fTemp0) + (fSlow57 * fTemp2)) + (fSlow59 * fTemp1))) + (fSlow42 * fTemp8))))):(iSlow2?((0.24993000000000001 * fTemp3) + ((fSlow25 * (((fSlow50 * fTemp0) + (fSlow51 * fTemp5)) + (fSlow27 * fTemp6))) + ((fSlow52 * fTemp9) + (fSlow28 * fTemp8)))):fTemp3))); - output4[i] = FAUSTFLOAT((iSlow1?((fSlow17 * (((fSlow60 * fTemp3) + (fSlow61 * fTemp7)) + (fSlow62 * fTemp8))) + (((fSlow11 * ((fSlow49 * fTemp2) + (fSlow63 * fTemp0))) + (fSlow65 * fTemp5)) + (fSlow67 * fTemp9))):(iSlow2?((fSlow45 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3))) + (0.24993000000000001 * fTemp5)):fTemp5))); - output5[i] = FAUSTFLOAT((iSlow1?((((fSlow17 * (((fSlow60 * fTemp1) + (fSlow61 * fTemp5)) + (fSlow68 * fTemp9))) + ((fSlow3 * ((fSlow69 * fTemp0) + (0.14907119265000002 * fTemp2))) + (fSlow72 * fTemp7))) + (fSlow73 * fTemp8)) + (fSlow75 * fTemp6)):(iSlow2?(((fSlow28 * fTemp2) + (fSlow31 * fTemp1)) + (0.24993000000000001 * fTemp7)):fTemp7))); - output6[i] = FAUSTFLOAT((iSlow1?(((fSlow3 * (((fSlow77 * fTemp7) + (0.17213247615000002 * fTemp1)) + (fSlow78 * fTemp8))) + (((fSlow67 * fTemp5) + (((fSlow24 * fTemp0) + (fSlow43 * fTemp2)) + (fSlow53 * fTemp3))) + (fSlow79 * fTemp9))) + (fSlow80 * fTemp6)):(iSlow2?((((fSlow30 * fTemp2) + (fSlow76 * fTemp1)) + (fSlow52 * fTemp3)) + (0.24993000000000001 * fTemp9)):fTemp9))); - output7[i] = FAUSTFLOAT((iSlow1?((fSlow17 * ((((fSlow11 * ((fConst19 * fTemp1) + (fSlow82 * fTemp0))) + (fSlow62 * fTemp5)) + (fSlow83 * fTemp9)) + (fSlow61 * fTemp6))) + (((fSlow42 * fTemp3) + (fSlow73 * fTemp7)) + (fSlow84 * fTemp8))):(iSlow2?(((fSlow81 * fTemp1) + (fSlow28 * fTemp3)) + (0.24993000000000001 * fTemp8)):fTemp8))); - output8[i] = FAUSTFLOAT((iSlow1?(((fSlow85 * ((fConst19 * fTemp3) + (fSlow86 * fTemp8))) + ((fSlow80 * fTemp9) + (((fSlow87 * fTemp0) + (fSlow44 * fTemp2)) + (fSlow75 * fTemp7)))) + (fSlow65 * fTemp6)):(iSlow2?(((fSlow32 * fTemp2) + (fSlow81 * fTemp3)) + (0.24993000000000001 * fTemp6)):fTemp6))); + output2[i] = FAUSTFLOAT((((fSlow2 * fTemp1) + (fSlow12 * ((0.24993000000000001 * fTemp1) + ((fSlow3 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp9))) + (fSlow47 * fTemp10))))) + (fSlow26 * ((fSlow3 * ((((fSlow48 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow49 * fTemp3)) + (0.17213247615000002 * fTemp9))) + ((fSlow50 * fTemp1) + (fSlow51 * fTemp10)))))); + output3[i] = FAUSTFLOAT((((fSlow2 * fTemp3) + (fSlow12 * ((0.24993000000000001 * fTemp3) + ((fSlow27 * (((fSlow52 * fTemp0) + (fSlow53 * fTemp5)) + (fSlow29 * fTemp6))) + ((fSlow54 * fTemp9) + (fSlow30 * fTemp8)))))) + (fSlow26 * ((fSlow51 * ((fSlow10 * fTemp5) + (fSlow11 * fTemp6))) + ((fSlow55 * fTemp9) + ((fSlow56 * fTemp3) + ((fSlow11 * (((fSlow57 * fTemp0) + (fSlow59 * fTemp2)) + (fSlow61 * fTemp1))) + (fSlow44 * fTemp8)))))))); + output4[i] = FAUSTFLOAT((((fSlow2 * fTemp5) + (fSlow12 * ((fSlow47 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3))) + (0.24993000000000001 * fTemp5)))) + (fSlow26 * ((fSlow18 * (((fSlow62 * fTemp3) + (fSlow63 * fTemp7)) + (fSlow64 * fTemp8))) + (((fSlow11 * ((fSlow51 * fTemp2) + (fSlow65 * fTemp0))) + (fSlow67 * fTemp5)) + (fSlow69 * fTemp9)))))); + output5[i] = FAUSTFLOAT((((fSlow2 * fTemp7) + (fSlow12 * (((fSlow30 * fTemp2) + (fSlow33 * fTemp1)) + (0.24993000000000001 * fTemp7)))) + (fSlow26 * ((((fSlow18 * (((fSlow62 * fTemp1) + (fSlow63 * fTemp5)) + (fSlow70 * fTemp9))) + ((fSlow3 * ((fSlow71 * fTemp0) + (0.14907119265000002 * fTemp2))) + (fSlow74 * fTemp7))) + (fSlow75 * fTemp8)) + (fSlow77 * fTemp6))))); + output6[i] = FAUSTFLOAT((((fSlow2 * fTemp9) + (fSlow12 * ((((fSlow32 * fTemp2) + (fSlow78 * fTemp1)) + (fSlow54 * fTemp3)) + (0.24993000000000001 * fTemp9)))) + (fSlow26 * (((fSlow3 * (((fSlow79 * fTemp7) + (0.17213247615000002 * fTemp1)) + (fSlow80 * fTemp8))) + (((fSlow69 * fTemp5) + (((fSlow25 * fTemp0) + (fSlow45 * fTemp2)) + (fSlow55 * fTemp3))) + (fSlow81 * fTemp9))) + (fSlow82 * fTemp6))))); + output7[i] = FAUSTFLOAT((((fSlow2 * fTemp8) + (fSlow12 * (((fSlow83 * fTemp1) + (fSlow30 * fTemp3)) + (0.24993000000000001 * fTemp8)))) + (fSlow26 * ((fSlow18 * ((((fSlow11 * ((fConst19 * fTemp1) + (fSlow84 * fTemp0))) + (fSlow64 * fTemp5)) + (fSlow85 * fTemp9)) + (fSlow63 * fTemp6))) + (((fSlow44 * fTemp3) + (fSlow75 * fTemp7)) + (fSlow86 * fTemp8)))))); + output8[i] = FAUSTFLOAT((((fSlow2 * fTemp6) + (fSlow12 * (((fSlow34 * fTemp2) + (fSlow83 * fTemp3)) + (0.24993000000000001 * fTemp6)))) + (fSlow26 * (((fSlow87 * ((fConst19 * fTemp3) + (fSlow88 * fTemp8))) + ((fSlow82 * fTemp9) + (((fSlow89 * fTemp0) + (fSlow46 * fTemp2)) + (fSlow77 * fTemp7)))) + (fSlow67 * fTemp6))))); double fTemp11 = ((fSlow11 * fTemp5) + (fSlow10 * fTemp6)); - output9[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow89 * fTemp3) + (fSlow90 * fTemp2))) + (fSlow91 * fTemp11)):(iSlow2?(fSlow88 * fTemp11):0.0))); - output10[i] = FAUSTFLOAT((iSlow1?((fSlow11 * (((fSlow94 * fTemp2) + (fSlow95 * fTemp1)) + (fSlow96 * fTemp7))) + ((fSlow3 * ((fSlow97 * fTemp3) + (0.12598816230000001 * fTemp5))) + (fSlow98 * fTemp8))):(iSlow2?((fSlow92 * fTemp5) + (fSlow93 * ((fSlow11 * fTemp7) + (fSlow10 * fTemp8)))):0.0))); - output11[i] = FAUSTFLOAT((iSlow1?(((fSlow3 * ((fSlow102 * fTemp1) + (0.15936380355000002 * fTemp7))) + ((fSlow103 * fTemp5) + ((fSlow106 * fTemp2) + (fSlow107 * fTemp3)))) + (fSlow101 * ((0.127153838554589 * fTemp9) + (0.036706218836248881 * fTemp6)))):(iSlow2?(((fSlow99 * fTemp5) + (fSlow100 * fTemp7)) + (fSlow101 * ((0.28609910994747967 * fTemp9) + (0.082589850671945866 * fTemp6)))):0.0))); - output12[i] = FAUSTFLOAT((iSlow1?(((fSlow111 * fTemp7) + ((fSlow113 * fTemp3) + ((fSlow114 * fTemp1) + ((fSlow115 * fTemp2) + (fSlow116 * fTemp9))))) + (fSlow117 * fTemp8)):(iSlow2?(((fSlow108 * fTemp7) + (fSlow109 * fTemp9)) + (fSlow110 * fTemp8)):0.0))); - output13[i] = FAUSTFLOAT((iSlow1?(((fSlow85 * ((fSlow120 * fTemp1) + (fConst47 * fTemp9))) + ((fSlow121 * fTemp5) + ((fSlow122 * fTemp3) + ((fSlow107 * fTemp2) + (fSlow123 * fTemp8))))) + (fSlow103 * fTemp6)):(iSlow2?(((fSlow118 * fTemp9) + ((fSlow119 * fTemp5) + (fSlow100 * fTemp8))) + (fSlow99 * fTemp6)):0.0))); - output14[i] = FAUSTFLOAT((iSlow1?((fSlow85 * ((fConst48 * fTemp8) + (fSlow126 * fTemp3))) + ((fSlow127 * fTemp7) + ((fSlow128 * fTemp1) + ((fSlow129 * fTemp2) + (fSlow130 * fTemp6))))):(iSlow2?(((fSlow124 * fTemp7) + (fSlow125 * fTemp8)) + (fSlow92 * fTemp6)):0.0))); - output15[i] = FAUSTFLOAT((iSlow1?((fSlow133 * fTemp5) + ((fSlow134 * fTemp3) + ((fSlow135 * fTemp2) + (fSlow136 * fTemp6)))):(iSlow2?((fSlow131 * fTemp5) + (fSlow132 * fTemp6)):0.0))); - output16[i] = FAUSTFLOAT((iSlow1?(fSlow12 * ((fSlow137 * fTemp5) + (fSlow138 * fTemp6))):0.0)); - output17[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow139 * fTemp8) + (fSlow140 * fTemp7))) + (fSlow141 * fTemp11)):0.0)); - output18[i] = FAUSTFLOAT((iSlow1?((fSlow11 * ((fSlow142 * fTemp7) + (fSlow143 * fTemp9))) + ((fSlow144 * fTemp5) + (fSlow145 * fTemp8))):0.0)); - output19[i] = FAUSTFLOAT((iSlow1?((fSlow146 * ((0.41620233757211678 * fTemp9) + (0.12014724747147398 * fTemp6))) + (((fSlow147 * fTemp5) + (fSlow150 * fTemp7)) + (fSlow151 * fTemp8))):0.0)); - output20[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow152 * fTemp5) + (fSlow153 * fTemp6))) + ((fSlow154 * fTemp8) + ((fSlow155 * fTemp7) + (fSlow156 * fTemp9)))):0.0)); - output21[i] = FAUSTFLOAT((iSlow1?((((fSlow151 * fTemp7) + ((fSlow157 * fTemp5) + (fSlow158 * fTemp9))) + (fSlow159 * fTemp8)) + (fSlow147 * fTemp6)):0.0)); - output22[i] = FAUSTFLOAT((iSlow1?(((fSlow71 * fTemp9) + ((fSlow160 * fTemp7) + (fSlow161 * fTemp8))) + (fSlow144 * fTemp6)):0.0)); - output23[i] = FAUSTFLOAT((iSlow1?((fSlow162 * fTemp8) + ((fSlow163 * fTemp7) + ((fSlow164 * fTemp5) + (fSlow165 * fTemp6)))):0.0)); - output24[i] = FAUSTFLOAT((iSlow1?((fSlow166 * fTemp5) + (fSlow167 * fTemp6)):0.0)); + output9[i] = FAUSTFLOAT(((fSlow90 * (fSlow12 * fTemp11)) + (fSlow26 * ((fSlow13 * ((fSlow91 * fTemp3) + (fSlow92 * fTemp2))) + (fSlow93 * fTemp11))))); + output10[i] = FAUSTFLOAT(((fSlow12 * ((fSlow94 * fTemp5) + (fSlow95 * ((fSlow11 * fTemp7) + (fSlow10 * fTemp8))))) + (fSlow26 * ((fSlow11 * (((fSlow96 * fTemp2) + (fSlow97 * fTemp1)) + (fSlow98 * fTemp7))) + ((fSlow3 * ((fSlow99 * fTemp3) + (0.12598816230000001 * fTemp5))) + (fSlow100 * fTemp8)))))); + output11[i] = FAUSTFLOAT(((fSlow12 * (((fSlow101 * fTemp5) + (fSlow102 * fTemp7)) + (fSlow103 * ((0.082589850671945866 * fTemp6) + (0.28609910994747967 * fTemp9))))) + (fSlow26 * (((fSlow3 * ((fSlow104 * fTemp1) + (0.15936380355000002 * fTemp7))) + ((fSlow105 * fTemp5) + ((fSlow108 * fTemp2) + (fSlow109 * fTemp3)))) + (fSlow103 * ((0.036706218836248881 * fTemp6) + (0.127153838554589 * fTemp9))))))); + output12[i] = FAUSTFLOAT(((fSlow12 * (((fSlow110 * fTemp7) + (fSlow111 * fTemp9)) + (fSlow112 * fTemp8))) + (fSlow26 * (((fSlow113 * fTemp7) + ((fSlow115 * fTemp3) + ((fSlow116 * fTemp1) + ((fSlow117 * fTemp2) + (fSlow118 * fTemp9))))) + (fSlow119 * fTemp8))))); + output13[i] = FAUSTFLOAT(((fSlow12 * (((fSlow120 * fTemp9) + ((fSlow121 * fTemp5) + (fSlow102 * fTemp8))) + (fSlow101 * fTemp6))) + (fSlow26 * (((fSlow87 * ((fSlow122 * fTemp1) + (fConst47 * fTemp9))) + ((fSlow123 * fTemp5) + ((fSlow124 * fTemp3) + ((fSlow109 * fTemp2) + (fSlow125 * fTemp8))))) + (fSlow105 * fTemp6))))); + output14[i] = FAUSTFLOAT(((fSlow12 * (((fSlow126 * fTemp7) + (fSlow127 * fTemp8)) + (fSlow94 * fTemp6))) + (fSlow26 * ((fSlow87 * ((fConst48 * fTemp8) + (fSlow128 * fTemp3))) + ((fSlow129 * fTemp7) + ((fSlow130 * fTemp1) + ((fSlow131 * fTemp2) + (fSlow132 * fTemp6)))))))); + output15[i] = FAUSTFLOAT(((fSlow12 * ((fSlow133 * fTemp5) + (fSlow134 * fTemp6))) + (fSlow26 * ((fSlow135 * fTemp5) + ((fSlow136 * fTemp3) + ((fSlow137 * fTemp2) + (fSlow138 * fTemp6))))))); + output16[i] = FAUSTFLOAT((fSlow13 * (fSlow26 * ((fSlow139 * fTemp5) + (fSlow140 * fTemp6))))); + output17[i] = FAUSTFLOAT((fSlow26 * ((fSlow13 * ((fSlow141 * fTemp8) + (fSlow142 * fTemp7))) + (fSlow143 * fTemp11)))); + output18[i] = FAUSTFLOAT((fSlow26 * ((fSlow11 * ((fSlow144 * fTemp7) + (fSlow145 * fTemp9))) + ((fSlow146 * fTemp5) + (fSlow147 * fTemp8))))); + output19[i] = FAUSTFLOAT((fSlow26 * ((fSlow148 * ((0.12014724747147398 * fTemp6) + (0.41620233757211678 * fTemp9))) + (((fSlow149 * fTemp5) + (fSlow152 * fTemp7)) + (fSlow153 * fTemp8))))); + output20[i] = FAUSTFLOAT((fSlow26 * ((fSlow13 * ((fSlow154 * fTemp5) + (fSlow155 * fTemp6))) + ((fSlow156 * fTemp8) + ((fSlow157 * fTemp7) + (fSlow158 * fTemp9)))))); + output21[i] = FAUSTFLOAT((fSlow26 * ((((fSlow153 * fTemp7) + ((fSlow159 * fTemp5) + (fSlow160 * fTemp9))) + (fSlow161 * fTemp8)) + (fSlow149 * fTemp6)))); + output22[i] = FAUSTFLOAT((fSlow26 * (((fSlow73 * fTemp9) + ((fSlow162 * fTemp7) + (fSlow163 * fTemp8))) + (fSlow146 * fTemp6)))); + output23[i] = FAUSTFLOAT((fSlow26 * ((fSlow164 * fTemp8) + ((fSlow165 * fTemp7) + ((fSlow166 * fTemp5) + (fSlow167 * fTemp6)))))); + output24[i] = FAUSTFLOAT((fSlow26 * ((fSlow168 * fTemp5) + (fSlow169 * fTemp6)))); } diff --git a/source/HOAUGens/HOABeamHCardio2HOA3.cpp b/source/HOAUGens/HOABeamHCardio2HOA3.cpp index 884a8f944c..e7d2139308 100644 --- a/source/HOAUGens/HOABeamHCardio2HOA3.cpp +++ b/source/HOAUGens/HOABeamHCardio2HOA3.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2016" license: "GPL" name: "HOABeamHCardio2HOA3" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -636,6 +636,7 @@ class mydsp : public dsp { private: + FAUSTFLOAT fCheckbox0; FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; double fConst0; @@ -767,6 +768,7 @@ class mydsp : public dsp { m->declare("cijk.lib/name", "Cijk matrix"); m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2016"); + m->declare("filename", "HOABeamHCardio2HOA3"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -1156,6 +1158,7 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0); fHslider0 = FAUSTFLOAT(0.0); fHslider1 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); @@ -1191,8 +1194,9 @@ class mydsp : public dsp { ui_interface->addHorizontalSlider("Azimuth", &fHslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); ui_interface->declare(&fHslider1, "style", "knob"); ui_interface->addHorizontalSlider("Elevation", &fHslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addCheckButton("Int/Float", &fCheckbox0); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 1.0); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 0.0001); ui_interface->closeBox(); } @@ -1250,9 +1254,9 @@ class mydsp : public dsp { FAUSTFLOAT* output33 = outputs[33]; FAUSTFLOAT* output34 = outputs[34]; FAUSTFLOAT* output35 = outputs[35]; - int iSlow0 = int(double(fHslider0)); - int iSlow1 = (iSlow0 >= 2); - int iSlow2 = (iSlow0 >= 1); + double fSlow0 = double(fHslider0); + double fSlow1 = (int(double(fCheckbox0))?fSlow0:double(int(fSlow0))); + double fSlow2 = max(0.0, (1.0 - fabs(fSlow1))); double fSlow3 = sin(double(fHslider1)); double fSlow4 = (0.43301700000000004 * fSlow3); double fSlow5 = mydsp_faustpower2_f(fSlow3); @@ -1262,277 +1266,279 @@ class mydsp : public dsp { double fSlow9 = double(fHslider2); double fSlow10 = sin(fSlow9); double fSlow11 = cos(fSlow9); - double fSlow12 = (fConst5 * fSlow6); - double fSlow13 = (fSlow11 * fSlow10); - double fSlow14 = (0.70921930945587786 * fSlow13); - double fSlow15 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); - double fSlow16 = (0.35460965472793893 * fSlow15); - double fSlow17 = (fConst0 * fSlow7); - double fSlow18 = (fSlow3 * fSlow10); - double fSlow19 = (fConst8 * fSlow18); - double fSlow20 = (fSlow11 * fSlow3); - double fSlow21 = (fConst8 * fSlow20); - double fSlow22 = (0.19245000000000004 * fSlow3); - double fSlow23 = ((3.0 * fSlow5) + -1.0); - double fSlow24 = (0.124224 * fSlow23); - double fSlow25 = (fConst3 * fSlow7); - double fSlow26 = (0.39894624032434478 * fSlow10); - double fSlow27 = (0.30902256091651653 * fSlow11); - double fSlow28 = (0.335413669149 * fSlow3); - double fSlow29 = (fSlow7 * fSlow10); - double fSlow30 = (0.0 - (fConst9 * fSlow29)); - double fSlow31 = (0.0 - (fConst10 * fSlow29)); - double fSlow32 = (fSlow11 * fSlow7); - double fSlow33 = (fConst0 * fSlow32); - double fSlow34 = (fConst12 * fSlow3); - double fSlow35 = (fSlow15 * fSlow6); - double fSlow36 = (fConst13 * fSlow35); - double fSlow37 = (0.0 - (fConst14 * fSlow29)); - double fSlow38 = (0.0 - (fConst15 * fSlow29)); - double fSlow39 = (fConst16 * fSlow3); - double fSlow40 = (fSlow11 * fSlow6); - double fSlow41 = (fConst17 * fSlow40); - double fSlow42 = (0.055554711935999999 * fSlow23); - double fSlow43 = (fConst18 * fSlow35); - double fSlow44 = (0.11112 - (fSlow42 + fSlow43)); - double fSlow45 = (0.14907119265000002 * fSlow3); - double fSlow46 = (0.089085626687999991 * fSlow23); - double fSlow47 = (fConst19 * fSlow35); - double fSlow48 = (fSlow46 + fSlow47); - double fSlow49 = (fSlow3 * fSlow7); - double fSlow50 = (fSlow49 * fSlow10); - double fSlow51 = (0.0 - (fConst21 * fSlow50)); - double fSlow52 = (fSlow40 * fSlow10); - double fSlow53 = (0.0 - (fConst22 * fSlow52)); - double fSlow54 = (0.0 - (fConst23 * fSlow50)); - double fSlow55 = (0.0 - (fConst24 * fSlow52)); - double fSlow56 = (fConst10 * fSlow7); - double fSlow57 = (0.46429325781252823 * fSlow13); - double fSlow58 = (0.23214662890626411 * fSlow15); - double fSlow59 = (fConst25 * fSlow18); - double fSlow60 = (fConst25 * fSlow20); - double fSlow61 = ((0.111109299648 * fSlow23) + 0.11112); - double fSlow62 = (fConst26 * fSlow29); - double fSlow63 = (fConst26 * fSlow32); - double fSlow64 = (0.10910718143999999 * fSlow23); - double fSlow65 = (0.39894624032434478 * fSlow11); - double fSlow66 = (0.30902256091651653 * fSlow10); - double fSlow67 = (0.0 - (fConst9 * fSlow32)); - double fSlow68 = (fConst12 * fSlow18); - double fSlow69 = (fConst12 * fSlow20); - double fSlow70 = (fSlow46 - fSlow47); - double fSlow71 = (fSlow20 * fSlow7); - double fSlow72 = (0.0 - (fConst21 * fSlow71)); - double fSlow73 = (fConst27 * fSlow7); - double fSlow74 = (fSlow6 * fSlow10); - double fSlow75 = (fConst17 * fSlow74); - double fSlow76 = (fConst26 * fSlow49); - double fSlow77 = (fConst24 * fSlow74); - double fSlow78 = (0.0 - (fConst15 * fSlow32)); - double fSlow79 = (fSlow43 + (0.11112 - fSlow42)); - double fSlow80 = (0.31986871235221448 * fSlow11); - double fSlow81 = (0.28347631111800004 * fSlow3); - double fSlow82 = (0.0 - (fConst28 * fSlow32)); - double fSlow83 = (0.0 - (fConst28 * fSlow29)); - double fSlow84 = (0.0 - (fConst29 * fSlow29)); - double fSlow85 = (fConst11 * fSlow10); - double fSlow86 = (fConst30 * fSlow20); - double fSlow87 = (fConst30 * fSlow18); - double fSlow88 = (fConst31 * fSlow11); - double fSlow89 = (0.0 - (fConst32 * fSlow52)); - double fSlow90 = (0.079363856447999995 * fSlow23); - double fSlow91 = (0.11112 - fSlow90); - double fSlow92 = (fConst14 * fSlow7); - double fSlow93 = (fConst33 * fSlow74); - double fSlow94 = (0.12598816230000001 * fSlow3); - double fSlow95 = (0.0 - (fConst34 * fSlow32)); - double fSlow96 = (0.0 - (fConst34 * fSlow29)); - double fSlow97 = (0.0 - (fConst35 * fSlow29)); - double fSlow98 = (0.26117175201329362 * fSlow11); - double fSlow99 = (0.0 - (fConst36 * fSlow29)); - double fSlow100 = (0.0 - (fConst37 * fSlow29)); - double fSlow101 = (fConst38 * fSlow29); - double fSlow102 = (fConst39 * fSlow18); - double fSlow103 = (fConst40 * fSlow11); - double fSlow104 = (0.0 - (fConst41 * fSlow50)); - double fSlow105 = (0.039681866111999996 * fSlow23); - double fSlow106 = (fConst42 * fSlow35); - double fSlow107 = (fSlow105 + (0.11112 - fSlow106)); - double fSlow108 = (fConst43 * fSlow52); - double fSlow109 = (0.0 - (fConst44 * fSlow29)); - double fSlow110 = (0.0 - (fConst45 * fSlow29)); - double fSlow111 = (fConst46 * fSlow7); - double fSlow112 = (fConst47 * fSlow29); - double fSlow113 = (fConst47 * fSlow32); - double fSlow114 = (0.0 - (fConst48 * fSlow35)); - double fSlow115 = (fSlow90 + 0.11112); - double fSlow116 = (fConst49 * fSlow7); - double fSlow117 = (0.26117175201329362 * fSlow10); - double fSlow118 = (0.0 - (fConst36 * fSlow32)); - double fSlow119 = (fConst8 * fSlow3); - double fSlow120 = (fConst39 * fSlow20); - double fSlow121 = (fConst40 * fSlow10); - double fSlow122 = (0.0 - (fConst44 * fSlow32)); - double fSlow123 = ((fSlow105 + fSlow106) + 0.11112); - double fSlow124 = (0.31986871235221448 * fSlow10); - double fSlow125 = (0.082589850671945866 * fSlow10); - double fSlow126 = (fConst30 * fSlow3); - double fSlow127 = (fConst31 * fSlow10); - double fSlow128 = (fConst50 * fSlow10); - double fSlow129 = (fConst51 * fSlow35); - double fSlow130 = (fConst29 * fSlow7); - double fSlow131 = (fConst52 * fSlow20); - double fSlow132 = (fConst52 * fSlow18); - double fSlow133 = (0.0 - (fConst53 * fSlow52)); - double fSlow134 = (0.56864069481277157 * fSlow13); - double fSlow135 = (0.28432034740638579 * fSlow15); - double fSlow136 = (0.11112 - (0.092591103744000008 * fSlow23)); - double fSlow137 = (0.0 - (fConst54 * fSlow35)); - double fSlow138 = (fConst37 * fSlow7); - double fSlow139 = (fConst55 * fSlow20); - double fSlow140 = (fConst55 * fSlow18); - double fSlow141 = (fConst23 * fSlow29); - double fSlow142 = (fConst23 * fSlow49); - double fSlow143 = (fConst56 * fSlow74); - double fSlow144 = (fConst45 * fSlow7); - double fSlow145 = (0.0 - (fConst57 * fSlow52)); - double fSlow146 = (0.0 - (fConst58 * fSlow50)); - double fSlow147 = (0.35857228434300004 * fSlow3); - double fSlow148 = (fConst3 * fSlow29); - double fSlow149 = (fConst5 * fSlow52); - double fSlow150 = (fConst2 * fSlow10); - double fSlow151 = (fConst59 * fSlow18); - double fSlow152 = (fConst60 * fSlow29); - double fSlow153 = (fConst61 * fSlow35); - double fSlow154 = (fSlow42 + (0.11112 - fSlow153)); - double fSlow155 = (0.0 - (fConst62 * fSlow50)); - double fSlow156 = (0.38032316126999999 * fSlow3); - double fSlow157 = (fConst63 * fSlow29); - double fSlow158 = (fConst63 * fSlow32); - double fSlow159 = ((0.074072907839999994 * fSlow23) + 0.11112); - double fSlow160 = (0.0 - (fConst64 * fSlow35)); - double fSlow161 = (fConst46 * fSlow32); - double fSlow162 = (fConst25 * fSlow3); - double fSlow163 = (fConst59 * fSlow20); - double fSlow164 = (0.15936380355000002 * fSlow3); - double fSlow165 = (fConst66 * fSlow52); - double fSlow166 = ((fSlow42 + fSlow153) + 0.11112); - double fSlow167 = (fConst37 * fSlow32); - double fSlow168 = (fConst67 * fSlow35); - double fSlow169 = (fConst29 * fSlow32); - double fSlow170 = (fConst52 * fSlow3); - double fSlow171 = (0.23640620007885615 * fSlow13); - double fSlow172 = (fConst68 * fSlow7); - double fSlow173 = (0.29969976813193649 * fSlow15); - double fSlow174 = (0.59939953626387299 * fSlow13); - double fSlow175 = (fConst69 * fSlow7); - double fSlow176 = (0.25000236495 * fSlow3); - double fSlow177 = (fConst70 * fSlow7); - double fSlow178 = (fConst71 * fSlow7); - double fSlow179 = (0.42383938840116497 * fSlow13); - double fSlow180 = (0.21191969420058249 * fSlow15); - double fSlow181 = (fConst72 * fSlow7); - double fSlow182 = (0.0 - (fConst73 * fSlow32)); - double fSlow183 = (0.32733010779299998 * fSlow3); - double fSlow184 = (0.061558601720767374 * fSlow10); - double fSlow185 = (fConst74 * fSlow49); - double fSlow186 = (fConst43 * fSlow74); - double fSlow187 = (fConst75 * fSlow7); - double fSlow188 = (fConst74 * fSlow29); - double fSlow189 = (0.068731027392000002 * fSlow23); - double fSlow190 = (0.0 - (fConst76 * fSlow32)); - double fSlow191 = (0.0 - (fConst77 * fSlow32)); - double fSlow192 = (0.365966049618 * fSlow3); - double fSlow193 = (fConst20 * fSlow29); - double fSlow194 = (0.0 - (fConst78 * fSlow71)); - double fSlow195 = (0.097200435264000004 * fSlow23); - double fSlow196 = (fConst79 * fSlow35); - double fSlow197 = (fSlow195 + fSlow196); - double fSlow198 = (0.0 - (fConst80 * fSlow52)); - double fSlow199 = (0.0 - (fConst81 * fSlow32)); - double fSlow200 = (0.0 - (fConst82 * fSlow29)); - double fSlow201 = (0.37796841482400001 * fSlow3); - double fSlow202 = (0.0 - (fConst82 * fSlow32)); - double fSlow203 = (0.0 - (fConst83 * fSlow29)); - double fSlow204 = (0.10131694289093836 * fSlow13); - double fSlow205 = (0.050658471445469179 * fSlow15); - double fSlow206 = (0.0 - (fConst84 * fSlow71)); - double fSlow207 = (0.0 - (fConst84 * fSlow50)); - double fSlow208 = (0.10647773203199999 * fSlow23); - double fSlow209 = (0.16798421640000002 * fSlow3); - double fSlow210 = (0.0 - (fConst83 * fSlow32)); - double fSlow211 = (fConst85 * fSlow32); - double fSlow212 = (0.0 - (fConst77 * fSlow29)); - double fSlow213 = (fConst86 * fSlow3); - double fSlow214 = (0.0 - (fConst81 * fSlow29)); - double fSlow215 = (fSlow195 - fSlow196); - double fSlow216 = (0.0 - (fConst78 * fSlow50)); - double fSlow217 = (0.16264988730000002 * fSlow3); - double fSlow218 = (0.0 - (fConst88 * fSlow29)); - double fSlow219 = (0.0 - (fConst73 * fSlow29)); - double fSlow220 = (fConst88 * fSlow32); - double fSlow221 = (fConst89 * fSlow3); - double fSlow222 = (0.0 - (fConst75 * fSlow29)); - double fSlow223 = (0.0 - (fConst76 * fSlow29)); - double fSlow224 = (0.0 - (fConst74 * fSlow50)); - double fSlow225 = (0.14547853605000002 * fSlow3); - double fSlow226 = (0.0 - (fConst70 * fSlow29)); - double fSlow227 = (fConst70 * fSlow32); - double fSlow228 = (fConst92 * fSlow3); - double fSlow229 = (0.0 - (fConst72 * fSlow29)); - double fSlow230 = (fConst93 * fSlow35); - double fSlow231 = (0.0 - (fConst94 * fSlow52)); - double fSlow232 = (0.0 - (fConst71 * fSlow50)); - double fSlow233 = (0.11111100750000003 * fSlow3); - double fSlow234 = (0.0 - (fConst68 * fSlow29)); - double fSlow235 = (fConst68 * fSlow32); - double fSlow236 = (0.0 - (fConst69 * fSlow29)); - double fSlow237 = (0.0 - (fConst95 * fSlow52)); - double fSlow238 = (fConst96 * fSlow35); - double fSlow239 = (fConst69 * fSlow32); - double fSlow240 = (0.3086479881593413 * fSlow15); - double fSlow241 = (0.6172959763186826 * fSlow13); - double fSlow242 = (0.23907782921757645 * fSlow15); - double fSlow243 = (0.4781556584351529 * fSlow13); - double fSlow244 = (fConst97 * fSlow49); - double fSlow245 = (fConst98 * fSlow49); - double fSlow246 = (0.055834588607999995 * fSlow23); - double fSlow247 = (0.35639617816845831 * fSlow13); - double fSlow248 = (0.17819808908422916 * fSlow15); - double fSlow249 = (0.0 - (fConst99 * fSlow71)); - double fSlow250 = (0.083751820800000001 * fSlow23); - double fSlow251 = (fConst100 * fSlow49); - double fSlow252 = (fConst101 * fSlow74); - double fSlow253 = (fConst20 * fSlow50); - double fSlow254 = (fConst102 * fSlow35); - double fSlow255 = (0.0 - (fConst103 * fSlow71)); - double fSlow256 = (0.10010255635199999 * fSlow23); - double fSlow257 = (fConst104 * fSlow35); - double fSlow258 = (fSlow256 + fSlow257); - double fSlow259 = (0.0 - (fConst105 * fSlow52)); - double fSlow260 = (0.0 - (fConst106 * fSlow52)); - double fSlow261 = (0.1347048603221927 * fSlow13); - double fSlow262 = (0.067352430161096349 * fSlow15); - double fSlow263 = (0.0 - (fConst107 * fSlow71)); - double fSlow264 = (0.0 - (fConst107 * fSlow50)); - double fSlow265 = (0.10551735628799999 * fSlow23); - double fSlow266 = (fSlow256 - fSlow257); - double fSlow267 = (fConst106 * fSlow74); - double fSlow268 = (fConst108 * fSlow49); - double fSlow269 = (0.0 - (fConst103 * fSlow50)); - double fSlow270 = (fConst109 * fSlow35); - double fSlow271 = (0.0 - (fConst100 * fSlow50)); - double fSlow272 = (0.0 - (fConst99 * fSlow50)); - double fSlow273 = (fConst100 * fSlow71); - double fSlow274 = (0.0 - (fConst101 * fSlow52)); - double fSlow275 = (0.0 - (fConst98 * fSlow50)); - double fSlow276 = (fConst98 * fSlow71); - double fSlow277 = (0.0 - (fConst110 * fSlow52)); - double fSlow278 = (0.0 - (fConst97 * fSlow50)); - double fSlow279 = (fConst111 * fSlow35); - double fSlow280 = (fConst97 * fSlow71); - double fSlow281 = (0.0 - (fConst112 * fSlow52)); - double fSlow282 = (fConst113 * fSlow35); + double fSlow12 = max(0.0, (1.0 - fabs((fSlow1 + -1.0)))); + double fSlow13 = (fConst5 * fSlow6); + double fSlow14 = (fSlow11 * fSlow10); + double fSlow15 = (0.70921930945587786 * fSlow14); + double fSlow16 = ((2.0 * mydsp_faustpower2_f(fSlow11)) + -1.0); + double fSlow17 = (0.35460965472793893 * fSlow16); + double fSlow18 = (fConst0 * fSlow7); + double fSlow19 = (fSlow3 * fSlow10); + double fSlow20 = (fConst8 * fSlow19); + double fSlow21 = (fSlow11 * fSlow3); + double fSlow22 = (fConst8 * fSlow21); + double fSlow23 = (0.19245000000000004 * fSlow3); + double fSlow24 = ((3.0 * fSlow5) + -1.0); + double fSlow25 = (0.124224 * fSlow24); + double fSlow26 = max(0.0, (1.0 - fabs((fSlow1 + -2.0)))); + double fSlow27 = (fConst3 * fSlow7); + double fSlow28 = (0.39894624032434478 * fSlow10); + double fSlow29 = (0.30902256091651653 * fSlow11); + double fSlow30 = (0.335413669149 * fSlow3); + double fSlow31 = (fSlow7 * fSlow10); + double fSlow32 = (0.0 - (fConst9 * fSlow31)); + double fSlow33 = (0.0 - (fConst10 * fSlow31)); + double fSlow34 = (fSlow11 * fSlow7); + double fSlow35 = (fConst0 * fSlow34); + double fSlow36 = (fConst12 * fSlow3); + double fSlow37 = (fSlow16 * fSlow6); + double fSlow38 = (fConst13 * fSlow37); + double fSlow39 = (0.0 - (fConst14 * fSlow31)); + double fSlow40 = (0.0 - (fConst15 * fSlow31)); + double fSlow41 = (fConst16 * fSlow3); + double fSlow42 = (fSlow11 * fSlow6); + double fSlow43 = (fConst17 * fSlow42); + double fSlow44 = (0.055554711935999999 * fSlow24); + double fSlow45 = (fConst18 * fSlow37); + double fSlow46 = (0.11112 - (fSlow44 + fSlow45)); + double fSlow47 = (0.14907119265000002 * fSlow3); + double fSlow48 = (0.089085626687999991 * fSlow24); + double fSlow49 = (fConst19 * fSlow37); + double fSlow50 = (fSlow48 + fSlow49); + double fSlow51 = (fSlow3 * fSlow7); + double fSlow52 = (fSlow51 * fSlow10); + double fSlow53 = (0.0 - (fConst21 * fSlow52)); + double fSlow54 = (fSlow42 * fSlow10); + double fSlow55 = (0.0 - (fConst22 * fSlow54)); + double fSlow56 = (0.0 - (fConst23 * fSlow52)); + double fSlow57 = (0.0 - (fConst24 * fSlow54)); + double fSlow58 = (fConst10 * fSlow7); + double fSlow59 = (0.46429325781252823 * fSlow14); + double fSlow60 = (0.23214662890626411 * fSlow16); + double fSlow61 = (fConst25 * fSlow19); + double fSlow62 = (fConst25 * fSlow21); + double fSlow63 = ((0.111109299648 * fSlow24) + 0.11112); + double fSlow64 = (fConst26 * fSlow31); + double fSlow65 = (fConst26 * fSlow34); + double fSlow66 = (0.10910718143999999 * fSlow24); + double fSlow67 = (0.39894624032434478 * fSlow11); + double fSlow68 = (0.30902256091651653 * fSlow10); + double fSlow69 = (0.0 - (fConst9 * fSlow34)); + double fSlow70 = (fConst12 * fSlow19); + double fSlow71 = (fConst12 * fSlow21); + double fSlow72 = (fSlow48 - fSlow49); + double fSlow73 = (fSlow21 * fSlow7); + double fSlow74 = (0.0 - (fConst21 * fSlow73)); + double fSlow75 = (fSlow6 * fSlow10); + double fSlow76 = (fConst17 * fSlow75); + double fSlow77 = (fConst27 * fSlow7); + double fSlow78 = (fConst26 * fSlow51); + double fSlow79 = (fConst24 * fSlow75); + double fSlow80 = (0.0 - (fConst15 * fSlow34)); + double fSlow81 = (fSlow45 + (0.11112 - fSlow44)); + double fSlow82 = (0.31986871235221448 * fSlow11); + double fSlow83 = (0.28347631111800004 * fSlow3); + double fSlow84 = (0.0 - (fConst28 * fSlow34)); + double fSlow85 = (0.0 - (fConst28 * fSlow31)); + double fSlow86 = (0.0 - (fConst29 * fSlow31)); + double fSlow87 = (fConst11 * fSlow10); + double fSlow88 = (fConst30 * fSlow21); + double fSlow89 = (fConst30 * fSlow19); + double fSlow90 = (fConst31 * fSlow11); + double fSlow91 = (0.0 - (fConst32 * fSlow54)); + double fSlow92 = (0.079363856447999995 * fSlow24); + double fSlow93 = (0.11112 - fSlow92); + double fSlow94 = (fConst14 * fSlow7); + double fSlow95 = (fConst33 * fSlow75); + double fSlow96 = (0.12598816230000001 * fSlow3); + double fSlow97 = (0.0 - (fConst34 * fSlow34)); + double fSlow98 = (0.0 - (fConst34 * fSlow31)); + double fSlow99 = (0.0 - (fConst35 * fSlow31)); + double fSlow100 = (0.26117175201329362 * fSlow11); + double fSlow101 = (0.0 - (fConst36 * fSlow31)); + double fSlow102 = (0.0 - (fConst37 * fSlow31)); + double fSlow103 = (fConst38 * fSlow31); + double fSlow104 = (fConst39 * fSlow19); + double fSlow105 = (fConst40 * fSlow11); + double fSlow106 = (0.0 - (fConst41 * fSlow52)); + double fSlow107 = (0.039681866111999996 * fSlow24); + double fSlow108 = (fConst42 * fSlow37); + double fSlow109 = (fSlow107 + (0.11112 - fSlow108)); + double fSlow110 = (fConst43 * fSlow54); + double fSlow111 = (0.0 - (fConst44 * fSlow31)); + double fSlow112 = (0.0 - (fConst45 * fSlow31)); + double fSlow113 = (fConst46 * fSlow7); + double fSlow114 = (fConst47 * fSlow31); + double fSlow115 = (fConst47 * fSlow34); + double fSlow116 = (0.0 - (fConst48 * fSlow37)); + double fSlow117 = (fSlow92 + 0.11112); + double fSlow118 = (fConst49 * fSlow7); + double fSlow119 = (0.26117175201329362 * fSlow10); + double fSlow120 = (0.0 - (fConst36 * fSlow34)); + double fSlow121 = (fConst8 * fSlow3); + double fSlow122 = (fConst39 * fSlow21); + double fSlow123 = (fConst40 * fSlow10); + double fSlow124 = (0.0 - (fConst44 * fSlow34)); + double fSlow125 = ((fSlow107 + fSlow108) + 0.11112); + double fSlow126 = (0.31986871235221448 * fSlow10); + double fSlow127 = (0.082589850671945866 * fSlow10); + double fSlow128 = (fConst30 * fSlow3); + double fSlow129 = (fConst31 * fSlow10); + double fSlow130 = (fConst50 * fSlow10); + double fSlow131 = (fConst51 * fSlow37); + double fSlow132 = (fConst29 * fSlow7); + double fSlow133 = (fConst52 * fSlow21); + double fSlow134 = (fConst52 * fSlow19); + double fSlow135 = (0.0 - (fConst53 * fSlow54)); + double fSlow136 = (0.56864069481277157 * fSlow14); + double fSlow137 = (0.28432034740638579 * fSlow16); + double fSlow138 = (0.11112 - (0.092591103744000008 * fSlow24)); + double fSlow139 = (0.0 - (fConst54 * fSlow37)); + double fSlow140 = (fConst37 * fSlow7); + double fSlow141 = (fConst55 * fSlow21); + double fSlow142 = (fConst55 * fSlow19); + double fSlow143 = (fConst23 * fSlow31); + double fSlow144 = (fConst23 * fSlow51); + double fSlow145 = (fConst56 * fSlow75); + double fSlow146 = (fConst45 * fSlow7); + double fSlow147 = (0.0 - (fConst57 * fSlow54)); + double fSlow148 = (0.0 - (fConst58 * fSlow52)); + double fSlow149 = (0.35857228434300004 * fSlow3); + double fSlow150 = (fConst3 * fSlow31); + double fSlow151 = (fConst5 * fSlow54); + double fSlow152 = (fConst2 * fSlow10); + double fSlow153 = (fConst59 * fSlow19); + double fSlow154 = (fConst60 * fSlow31); + double fSlow155 = (fConst61 * fSlow37); + double fSlow156 = (fSlow44 + (0.11112 - fSlow155)); + double fSlow157 = (0.0 - (fConst62 * fSlow52)); + double fSlow158 = (0.38032316126999999 * fSlow3); + double fSlow159 = (fConst63 * fSlow31); + double fSlow160 = (fConst63 * fSlow34); + double fSlow161 = ((0.074072907839999994 * fSlow24) + 0.11112); + double fSlow162 = (0.0 - (fConst64 * fSlow37)); + double fSlow163 = (fConst46 * fSlow34); + double fSlow164 = (fConst25 * fSlow3); + double fSlow165 = (fConst59 * fSlow21); + double fSlow166 = (0.15936380355000002 * fSlow3); + double fSlow167 = (fConst66 * fSlow54); + double fSlow168 = ((fSlow44 + fSlow155) + 0.11112); + double fSlow169 = (fConst37 * fSlow34); + double fSlow170 = (fConst67 * fSlow37); + double fSlow171 = (fConst29 * fSlow34); + double fSlow172 = (fConst52 * fSlow3); + double fSlow173 = (0.23640620007885615 * fSlow14); + double fSlow174 = (fConst68 * fSlow7); + double fSlow175 = (0.29969976813193649 * fSlow16); + double fSlow176 = (0.59939953626387299 * fSlow14); + double fSlow177 = (fConst69 * fSlow7); + double fSlow178 = (0.25000236495 * fSlow3); + double fSlow179 = (fConst70 * fSlow7); + double fSlow180 = (fConst71 * fSlow7); + double fSlow181 = (0.42383938840116497 * fSlow14); + double fSlow182 = (0.21191969420058249 * fSlow16); + double fSlow183 = (fConst72 * fSlow7); + double fSlow184 = (0.0 - (fConst73 * fSlow34)); + double fSlow185 = (0.32733010779299998 * fSlow3); + double fSlow186 = (0.061558601720767374 * fSlow10); + double fSlow187 = (fConst74 * fSlow51); + double fSlow188 = (fConst43 * fSlow75); + double fSlow189 = (fConst75 * fSlow7); + double fSlow190 = (fConst74 * fSlow31); + double fSlow191 = (0.068731027392000002 * fSlow24); + double fSlow192 = (0.0 - (fConst76 * fSlow34)); + double fSlow193 = (0.0 - (fConst77 * fSlow34)); + double fSlow194 = (0.365966049618 * fSlow3); + double fSlow195 = (fConst20 * fSlow31); + double fSlow196 = (0.0 - (fConst78 * fSlow73)); + double fSlow197 = (0.097200435264000004 * fSlow24); + double fSlow198 = (fConst79 * fSlow37); + double fSlow199 = (fSlow197 + fSlow198); + double fSlow200 = (0.0 - (fConst80 * fSlow54)); + double fSlow201 = (0.0 - (fConst81 * fSlow34)); + double fSlow202 = (0.0 - (fConst82 * fSlow31)); + double fSlow203 = (0.37796841482400001 * fSlow3); + double fSlow204 = (0.0 - (fConst82 * fSlow34)); + double fSlow205 = (0.0 - (fConst83 * fSlow31)); + double fSlow206 = (0.10131694289093836 * fSlow14); + double fSlow207 = (0.050658471445469179 * fSlow16); + double fSlow208 = (0.0 - (fConst84 * fSlow73)); + double fSlow209 = (0.0 - (fConst84 * fSlow52)); + double fSlow210 = (0.10647773203199999 * fSlow24); + double fSlow211 = (0.16798421640000002 * fSlow3); + double fSlow212 = (0.0 - (fConst83 * fSlow34)); + double fSlow213 = (fConst85 * fSlow34); + double fSlow214 = (0.0 - (fConst77 * fSlow31)); + double fSlow215 = (fConst86 * fSlow3); + double fSlow216 = (0.0 - (fConst81 * fSlow31)); + double fSlow217 = (fSlow197 - fSlow198); + double fSlow218 = (0.0 - (fConst78 * fSlow52)); + double fSlow219 = (0.16264988730000002 * fSlow3); + double fSlow220 = (0.0 - (fConst88 * fSlow31)); + double fSlow221 = (0.0 - (fConst73 * fSlow31)); + double fSlow222 = (fConst88 * fSlow34); + double fSlow223 = (fConst89 * fSlow3); + double fSlow224 = (0.0 - (fConst75 * fSlow31)); + double fSlow225 = (0.0 - (fConst76 * fSlow31)); + double fSlow226 = (0.0 - (fConst74 * fSlow52)); + double fSlow227 = (0.14547853605000002 * fSlow3); + double fSlow228 = (0.0 - (fConst70 * fSlow31)); + double fSlow229 = (fConst70 * fSlow34); + double fSlow230 = (fConst92 * fSlow3); + double fSlow231 = (0.0 - (fConst72 * fSlow31)); + double fSlow232 = (fConst93 * fSlow37); + double fSlow233 = (0.0 - (fConst94 * fSlow54)); + double fSlow234 = (0.0 - (fConst71 * fSlow52)); + double fSlow235 = (0.11111100750000003 * fSlow3); + double fSlow236 = (0.0 - (fConst68 * fSlow31)); + double fSlow237 = (fConst68 * fSlow34); + double fSlow238 = (0.0 - (fConst69 * fSlow31)); + double fSlow239 = (0.0 - (fConst95 * fSlow54)); + double fSlow240 = (fConst96 * fSlow37); + double fSlow241 = (fConst69 * fSlow34); + double fSlow242 = (0.3086479881593413 * fSlow16); + double fSlow243 = (0.6172959763186826 * fSlow14); + double fSlow244 = (0.23907782921757645 * fSlow16); + double fSlow245 = (0.4781556584351529 * fSlow14); + double fSlow246 = (fConst97 * fSlow51); + double fSlow247 = (fConst98 * fSlow51); + double fSlow248 = (0.055834588607999995 * fSlow24); + double fSlow249 = (0.35639617816845831 * fSlow14); + double fSlow250 = (0.17819808908422916 * fSlow16); + double fSlow251 = (0.0 - (fConst99 * fSlow73)); + double fSlow252 = (0.083751820800000001 * fSlow24); + double fSlow253 = (fConst100 * fSlow51); + double fSlow254 = (fConst101 * fSlow75); + double fSlow255 = (fConst20 * fSlow52); + double fSlow256 = (fConst102 * fSlow37); + double fSlow257 = (0.0 - (fConst103 * fSlow73)); + double fSlow258 = (0.10010255635199999 * fSlow24); + double fSlow259 = (fConst104 * fSlow37); + double fSlow260 = (fSlow258 + fSlow259); + double fSlow261 = (0.0 - (fConst105 * fSlow54)); + double fSlow262 = (0.0 - (fConst106 * fSlow54)); + double fSlow263 = (0.1347048603221927 * fSlow14); + double fSlow264 = (0.067352430161096349 * fSlow16); + double fSlow265 = (0.0 - (fConst107 * fSlow73)); + double fSlow266 = (0.0 - (fConst107 * fSlow52)); + double fSlow267 = (0.10551735628799999 * fSlow24); + double fSlow268 = (fSlow258 - fSlow259); + double fSlow269 = (fConst106 * fSlow75); + double fSlow270 = (fConst108 * fSlow51); + double fSlow271 = (0.0 - (fConst103 * fSlow52)); + double fSlow272 = (fConst109 * fSlow37); + double fSlow273 = (0.0 - (fConst100 * fSlow52)); + double fSlow274 = (0.0 - (fConst99 * fSlow52)); + double fSlow275 = (fConst100 * fSlow73); + double fSlow276 = (0.0 - (fConst101 * fSlow54)); + double fSlow277 = (0.0 - (fConst98 * fSlow52)); + double fSlow278 = (fConst98 * fSlow73); + double fSlow279 = (0.0 - (fConst110 * fSlow54)); + double fSlow280 = (0.0 - (fConst97 * fSlow52)); + double fSlow281 = (fConst111 * fSlow37); + double fSlow282 = (fConst97 * fSlow73); + double fSlow283 = (0.0 - (fConst112 * fSlow54)); + double fSlow284 = (fConst113 * fSlow37); for (int i = 0; (i < count); i = (i + 1)) { double fTemp0 = double(input0[i]); double fTemp1 = double(input2[i]); @@ -1544,7 +1550,7 @@ class mydsp : public dsp { double fTemp7 = double(input5[i]); double fTemp8 = double(input7[i]); double fTemp9 = double(input6[i]); - output0[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp0) + ((fSlow12 * ((fSlow14 * fTemp5) + (fSlow16 * fTemp6))) + ((fSlow17 * (((fConst6 * fTemp4) + (fSlow19 * fTemp7)) + (fSlow21 * fTemp8))) + ((fSlow22 * fTemp1) + (fSlow24 * fTemp9))))):(iSlow2?((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))):fTemp0))); + output0[i] = FAUSTFLOAT((((fSlow2 * fTemp0) + (((0.24993000000000001 * fTemp0) + ((fSlow4 * fTemp1) + (fSlow8 * fTemp4))) * fSlow12)) + (((0.11112 * fTemp0) + ((fSlow13 * ((fSlow15 * fTemp5) + (fSlow17 * fTemp6))) + ((fSlow18 * (((fConst6 * fTemp4) + (fSlow20 * fTemp7)) + (fSlow22 * fTemp8))) + ((fSlow23 * fTemp1) + (fSlow25 * fTemp9))))) * fSlow26))); double fTemp10 = double(input10[i]); double fTemp11 = double(input9[i]); double fTemp12 = double(input11[i]); @@ -1552,46 +1558,46 @@ class mydsp : public dsp { double fTemp14 = double(input13[i]); double fTemp15 = double(input14[i]); double fTemp16 = double(input15[i]); - output1[i] = FAUSTFLOAT((iSlow1?(((((((fSlow33 * ((fConst11 * fTemp5) + (fSlow34 * fTemp10))) + ((fSlow36 * fTemp11) + ((fSlow37 * fTemp6) + ((fSlow38 * fTemp9) + ((fSlow10 * ((fSlow17 * ((fConst6 * fTemp0) + (fSlow39 * fTemp1))) + (fSlow41 * fTemp3))) + ((fSlow44 * fTemp2) + (fSlow45 * fTemp7))))))) + (fSlow48 * fTemp12)) + (fSlow51 * fTemp13)) + (fSlow53 * fTemp14)) + (fSlow54 * fTemp15)) + (fSlow55 * fTemp16)):(iSlow2?((0.24993000000000001 * fTemp2) + ((((fSlow25 * ((fSlow26 * fTemp0) + (fSlow27 * fTemp5))) + (fSlow28 * fTemp7)) + (fSlow30 * fTemp9)) + (fSlow31 * fTemp6))):fTemp2))); + output1[i] = FAUSTFLOAT((((fSlow2 * fTemp2) + (fSlow12 * ((0.24993000000000001 * fTemp2) + ((((fSlow27 * ((fSlow28 * fTemp0) + (fSlow29 * fTemp5))) + (fSlow30 * fTemp7)) + (fSlow32 * fTemp9)) + (fSlow33 * fTemp6))))) + (fSlow26 * (((((((fSlow35 * ((fConst11 * fTemp5) + (fSlow36 * fTemp10))) + ((fSlow38 * fTemp11) + ((fSlow39 * fTemp6) + ((fSlow40 * fTemp9) + ((fSlow10 * ((fSlow18 * ((fConst6 * fTemp0) + (fSlow41 * fTemp1))) + (fSlow43 * fTemp3))) + ((fSlow46 * fTemp2) + (fSlow47 * fTemp7))))))) + (fSlow50 * fTemp12)) + (fSlow53 * fTemp13)) + (fSlow55 * fTemp14)) + (fSlow56 * fTemp15)) + (fSlow57 * fTemp16))))); double fTemp17 = ((fSlow10 * fTemp7) + (fSlow11 * fTemp8)); - output2[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow57 * fTemp10) + (fSlow58 * fTemp15))) + ((fSlow17 * (((fConst11 * fTemp17) + (fSlow59 * fTemp12)) + (fSlow60 * fTemp14))) + (((fSlow61 * fTemp1) + (fSlow3 * ((((fSlow62 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow63 * fTemp3)) + (0.17213247615000002 * fTemp9)))) + (fSlow64 * fTemp13)))):(iSlow2?((0.24993000000000001 * fTemp1) + ((fSlow3 * ((0.43301700000000004 * fTemp0) + (0.38730209625899997 * fTemp9))) + (fSlow56 * fTemp17))):fTemp1))); - output3[i] = FAUSTFLOAT((iSlow1?(((fSlow17 * (((fConst11 * ((fSlow10 * fTemp5) + (fSlow11 * fTemp6))) + (fSlow68 * fTemp10)) + (fSlow69 * fTemp15))) + ((fSlow70 * fTemp14) + ((fSlow72 * fTemp13) + (((fSlow11 * ((((fSlow73 * fTemp0) + (fSlow75 * fTemp2)) + (fSlow76 * fTemp1)) + (fSlow77 * fTemp11))) + ((fSlow78 * fTemp9) + ((fSlow79 * fTemp3) + (fSlow45 * fTemp8)))) + (fSlow53 * fTemp12))))) + (fSlow36 * fTemp16)):(iSlow2?((0.24993000000000001 * fTemp3) + ((fSlow25 * (((fSlow65 * fTemp0) + (fSlow66 * fTemp5)) + (fSlow27 * fTemp6))) + ((fSlow67 * fTemp9) + (fSlow28 * fTemp8)))):fTemp3))); - output4[i] = FAUSTFLOAT((iSlow1?(((((fSlow17 * ((((fSlow85 * fTemp3) + (fSlow86 * fTemp7)) + (fSlow87 * fTemp8)) + (fSlow88 * fTemp11))) + ((fSlow89 * fTemp9) + ((fSlow91 * fTemp5) + ((fSlow11 * ((fSlow92 * fTemp2) + (fSlow93 * fTemp0))) + (fSlow94 * fTemp10))))) + (fSlow95 * fTemp12)) + (fSlow96 * fTemp14)) + (fSlow97 * fTemp16)):(iSlow2?((0.24993000000000001 * fTemp5) + (((((fSlow25 * ((0.30902256091651653 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3))) + (fSlow80 * fTemp11))) + (fSlow81 * fTemp10)) + (fSlow82 * fTemp12)) + (fSlow83 * fTemp14)) + (fSlow84 * fTemp16))):fTemp5))); - output5[i] = FAUSTFLOAT((iSlow1?((((fSlow3 * (((fSlow101 * fTemp0) + (0.14907119265000002 * fTemp2)) + (0.15936380355000002 * fTemp12))) + ((fSlow17 * ((((fSlow85 * fTemp1) + (fSlow86 * fTemp5)) + (fSlow102 * fTemp9)) + (fSlow103 * fTemp10))) + ((fSlow104 * fTemp6) + ((fSlow107 * fTemp7) + (fSlow108 * fTemp8))))) + (fSlow109 * fTemp13)) + (fSlow110 * fTemp15)):(iSlow2?((0.24993000000000001 * fTemp7) + ((((fSlow25 * ((fSlow66 * fTemp1) + (fSlow98 * fTemp10))) + (fSlow3 * ((0.335413669149 * fTemp2) + (0.35857228434300004 * fTemp12)))) + (fSlow99 * fTemp13)) + (fSlow100 * fTemp15))):fTemp7))); + output2[i] = FAUSTFLOAT((((fSlow2 * fTemp1) + (fSlow12 * ((0.24993000000000001 * fTemp1) + ((fSlow3 * ((0.38730209625899997 * fTemp9) + (0.43301700000000004 * fTemp0))) + (fSlow58 * fTemp17))))) + (fSlow26 * ((fSlow13 * ((fSlow59 * fTemp10) + (fSlow60 * fTemp15))) + ((fSlow18 * (((fConst11 * fTemp17) + (fSlow61 * fTemp12)) + (fSlow62 * fTemp14))) + (((fSlow63 * fTemp1) + (fSlow3 * ((((fSlow64 * fTemp2) + (0.19245000000000004 * fTemp0)) + (fSlow65 * fTemp3)) + (0.17213247615000002 * fTemp9)))) + (fSlow66 * fTemp13))))))); + output3[i] = FAUSTFLOAT((((fSlow2 * fTemp3) + (fSlow12 * ((0.24993000000000001 * fTemp3) + ((fSlow27 * (((fSlow67 * fTemp0) + (fSlow68 * fTemp5)) + (fSlow29 * fTemp6))) + ((fSlow69 * fTemp9) + (fSlow30 * fTemp8)))))) + (fSlow26 * (((fSlow18 * (((fConst11 * ((fSlow10 * fTemp5) + (fSlow11 * fTemp6))) + (fSlow70 * fTemp10)) + (fSlow71 * fTemp15))) + ((fSlow72 * fTemp14) + ((fSlow74 * fTemp13) + (((fSlow11 * ((((fSlow76 * fTemp2) + (fSlow77 * fTemp0)) + (fSlow78 * fTemp1)) + (fSlow79 * fTemp11))) + ((fSlow80 * fTemp9) + ((fSlow81 * fTemp3) + (fSlow47 * fTemp8)))) + (fSlow55 * fTemp12))))) + (fSlow38 * fTemp16))))); + output4[i] = FAUSTFLOAT((((fSlow2 * fTemp5) + (fSlow12 * ((0.24993000000000001 * fTemp5) + (((((fSlow27 * ((0.30902256091651653 * ((fSlow11 * fTemp2) + (fSlow10 * fTemp3))) + (fSlow82 * fTemp11))) + (fSlow83 * fTemp10)) + (fSlow84 * fTemp12)) + (fSlow85 * fTemp14)) + (fSlow86 * fTemp16))))) + (fSlow26 * (((((fSlow18 * ((((fSlow87 * fTemp3) + (fSlow88 * fTemp7)) + (fSlow89 * fTemp8)) + (fSlow90 * fTemp11))) + ((fSlow91 * fTemp9) + ((fSlow93 * fTemp5) + ((fSlow11 * ((fSlow94 * fTemp2) + (fSlow95 * fTemp0))) + (fSlow96 * fTemp10))))) + (fSlow97 * fTemp12)) + (fSlow98 * fTemp14)) + (fSlow99 * fTemp16))))); + output5[i] = FAUSTFLOAT((((fSlow2 * fTemp7) + (fSlow12 * ((0.24993000000000001 * fTemp7) + ((((fSlow27 * ((fSlow68 * fTemp1) + (fSlow100 * fTemp10))) + (fSlow3 * ((0.335413669149 * fTemp2) + (0.35857228434300004 * fTemp12)))) + (fSlow101 * fTemp13)) + (fSlow102 * fTemp15))))) + (fSlow26 * ((((fSlow3 * (((fSlow103 * fTemp0) + (0.14907119265000002 * fTemp2)) + (0.15936380355000002 * fTemp12))) + ((fSlow18 * ((((fSlow87 * fTemp1) + (fSlow88 * fTemp5)) + (fSlow104 * fTemp9)) + (fSlow105 * fTemp10))) + ((fSlow106 * fTemp6) + ((fSlow109 * fTemp7) + (fSlow110 * fTemp8))))) + (fSlow111 * fTemp13)) + (fSlow112 * fTemp15))))); double fTemp18 = ((fSlow10 * fTemp12) + (fSlow11 * fTemp14)); - output6[i] = FAUSTFLOAT((iSlow1?((fSlow3 * ((((fSlow112 * fTemp7) + (0.17213247615000002 * fTemp1)) + (fSlow113 * fTemp8)) + (0.16903075950000004 * fTemp13))) + ((fSlow114 * fTemp6) + ((fSlow115 * fTemp9) + ((fSlow89 * fTemp5) + ((fSlow78 * fTemp3) + ((fSlow38 * fTemp2) + ((fSlow24 * fTemp0) + (fSlow116 * fTemp18)))))))):(iSlow2?((0.24993000000000001 * fTemp9) + ((fSlow111 * fTemp18) + ((fSlow3 * ((0.38730209625899997 * fTemp1) + (0.38032316126999999 * fTemp13))) + ((fSlow30 * fTemp2) + (fSlow67 * fTemp3))))):fTemp9))); - output7[i] = FAUSTFLOAT((iSlow1?((fSlow17 * ((((((fSlow11 * ((fConst11 * fTemp1) + (fSlow119 * fTemp0))) + (fSlow87 * fTemp5)) + (fSlow120 * fTemp9)) + (fSlow86 * fTemp6)) + (fSlow121 * fTemp10)) + (fSlow103 * fTemp15))) + ((fSlow3 * ((0.14907119265000002 * fTemp3) + (0.15936380355000002 * fTemp14))) + ((fSlow122 * fTemp13) + ((fSlow108 * fTemp7) + (fSlow123 * fTemp8))))):(iSlow2?((0.24993000000000001 * fTemp8) + ((fSlow25 * (((fSlow27 * fTemp1) + (fSlow117 * fTemp10)) + (fSlow98 * fTemp15))) + ((fSlow118 * fTemp13) + (fSlow3 * ((0.335413669149 * fTemp3) + (0.35857228434300004 * fTemp14)))))):fTemp8))); - output8[i] = FAUSTFLOAT((iSlow1?((fSlow17 * ((((fSlow11 * ((fConst11 * fTemp3) + (fSlow126 * fTemp8))) + (fSlow127 * fTemp11)) + (fSlow128 * fTemp12)) + (fSlow88 * fTemp16))) + ((fSlow95 * fTemp14) + ((fSlow91 * fTemp6) + ((fSlow114 * fTemp9) + ((fSlow104 * fTemp7) + ((fSlow37 * fTemp2) + ((fSlow129 * fTemp0) + (fSlow94 * fTemp15)))))))):(iSlow2?((0.24993000000000001 * fTemp6) + ((fSlow25 * ((((fSlow27 * fTemp3) + (fSlow124 * fTemp11)) + (fSlow125 * fTemp12)) + (fSlow80 * fTemp16))) + ((fSlow81 * fTemp15) + ((fSlow31 * fTemp2) + (fSlow82 * fTemp14))))):fTemp6))); + output6[i] = FAUSTFLOAT((((fSlow2 * fTemp9) + (fSlow12 * ((0.24993000000000001 * fTemp9) + ((fSlow113 * fTemp18) + ((fSlow3 * ((0.38032316126999999 * fTemp13) + (0.38730209625899997 * fTemp1))) + ((fSlow32 * fTemp2) + (fSlow69 * fTemp3))))))) + (fSlow26 * ((fSlow3 * ((((fSlow114 * fTemp7) + (0.17213247615000002 * fTemp1)) + (fSlow115 * fTemp8)) + (0.16903075950000004 * fTemp13))) + ((fSlow116 * fTemp6) + ((fSlow117 * fTemp9) + ((fSlow91 * fTemp5) + ((fSlow80 * fTemp3) + ((fSlow40 * fTemp2) + ((fSlow25 * fTemp0) + (fSlow118 * fTemp18))))))))))); + output7[i] = FAUSTFLOAT((((fSlow2 * fTemp8) + (fSlow12 * ((0.24993000000000001 * fTemp8) + ((fSlow27 * (((fSlow29 * fTemp1) + (fSlow119 * fTemp10)) + (fSlow100 * fTemp15))) + ((fSlow120 * fTemp13) + (fSlow3 * ((0.35857228434300004 * fTemp14) + (0.335413669149 * fTemp3)))))))) + (fSlow26 * ((fSlow18 * ((((((fSlow11 * ((fConst11 * fTemp1) + (fSlow121 * fTemp0))) + (fSlow89 * fTemp5)) + (fSlow122 * fTemp9)) + (fSlow88 * fTemp6)) + (fSlow123 * fTemp10)) + (fSlow105 * fTemp15))) + ((fSlow3 * ((0.15936380355000002 * fTemp14) + (0.14907119265000002 * fTemp3))) + ((fSlow124 * fTemp13) + ((fSlow110 * fTemp7) + (fSlow125 * fTemp8)))))))); + output8[i] = FAUSTFLOAT((((fSlow2 * fTemp6) + (fSlow12 * ((0.24993000000000001 * fTemp6) + ((fSlow27 * ((((fSlow29 * fTemp3) + (fSlow126 * fTemp11)) + (fSlow127 * fTemp12)) + (fSlow82 * fTemp16))) + ((fSlow83 * fTemp15) + ((fSlow33 * fTemp2) + (fSlow84 * fTemp14))))))) + (fSlow26 * ((fSlow18 * ((((fSlow11 * ((fConst11 * fTemp3) + (fSlow128 * fTemp8))) + (fSlow129 * fTemp11)) + (fSlow130 * fTemp12)) + (fSlow90 * fTemp16))) + ((fSlow97 * fTemp14) + ((fSlow93 * fTemp6) + ((fSlow116 * fTemp9) + ((fSlow106 * fTemp7) + ((fSlow39 * fTemp2) + ((fSlow131 * fTemp0) + (fSlow96 * fTemp15))))))))))); double fTemp19 = ((fSlow11 * fTemp5) + (fSlow10 * fTemp6)); - output9[i] = FAUSTFLOAT((iSlow1?((fSlow17 * (((fSlow131 * fTemp10) + (fConst31 * fTemp19)) + (fSlow132 * fTemp15))) + ((fSlow133 * fTemp14) + (((fSlow12 * ((fSlow134 * fTemp3) + (fSlow135 * fTemp2))) + (fSlow136 * fTemp11)) + (fSlow137 * fTemp12)))):(iSlow2?((fSlow130 * fTemp19) + (0.24993000000000001 * fTemp11)):fTemp11))); - output10[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp10) + (((fSlow17 * ((((fSlow121 * fTemp8) + (fSlow131 * fTemp11)) + (fSlow139 * fTemp12)) + (fSlow140 * fTemp14))) + (((fSlow3 * ((fSlow141 * fTemp3) + (0.12598816230000001 * fTemp5))) + (fSlow11 * (((fSlow142 * fTemp2) + (fSlow143 * fTemp1)) + (fSlow144 * fTemp7)))) + (fSlow145 * fTemp13))) + (fSlow146 * fTemp16))):(iSlow2?(((fSlow81 * fTemp5) + (fSlow138 * ((fSlow11 * fTemp7) + (fSlow10 * fTemp8)))) + (0.24993000000000001 * fTemp10)):fTemp10))); - output11[i] = FAUSTFLOAT((iSlow1?((fSlow149 * ((0.36623943296439643 * fTemp14) + (0.23640620007885615 * fTemp16))) + (((fSlow17 * (((fSlow150 * ((0.127153838554589 * fTemp9) + (0.036706218836248881 * fTemp6))) + (fSlow139 * fTemp10)) + (fSlow151 * fTemp13))) + ((((fSlow3 * ((fSlow152 * fTemp1) + (0.15936380355000002 * fTemp7))) + ((fSlow95 * fTemp5) + ((fSlow48 * fTemp2) + (fSlow53 * fTemp3)))) + (fSlow137 * fTemp11)) + (fSlow154 * fTemp12))) + (fSlow155 * fTemp15))):(iSlow2?((((fSlow82 * fTemp5) + (fSlow147 * fTemp7)) + (fSlow148 * ((0.28609910994747967 * fTemp9) + (0.082589850671945866 * fTemp6)))) + (0.24993000000000001 * fTemp12)):fTemp12))); - output12[i] = FAUSTFLOAT((iSlow1?(((fSlow3 * (((fSlow157 * fTemp12) + (0.16903075950000004 * fTemp9)) + (fSlow158 * fTemp14))) + (((fSlow145 * fTemp10) + (((((fSlow51 * fTemp2) + (fSlow64 * fTemp1)) + (fSlow72 * fTemp3)) + (fSlow109 * fTemp7)) + (fSlow122 * fTemp8))) + (fSlow159 * fTemp13))) + (fSlow160 * fTemp15)):(iSlow2?((((fSlow99 * fTemp7) + (fSlow156 * fTemp9)) + (fSlow118 * fTemp8)) + (0.24993000000000001 * fTemp13)):fTemp13))); - output13[i] = FAUSTFLOAT((iSlow1?(((fSlow17 * ((((fSlow11 * ((fSlow162 * fTemp1) + (fConst65 * fTemp9))) + (fSlow140 * fTemp10)) + (fSlow163 * fTemp13)) + (fSlow139 * fTemp15))) + ((((fSlow133 * fTemp11) + (((fSlow96 * fTemp5) + ((fSlow70 * fTemp3) + ((fSlow53 * fTemp2) + (fSlow164 * fTemp8)))) + (fSlow95 * fTemp6))) + (fSlow165 * fTemp12)) + (fSlow166 * fTemp14))) + (fSlow137 * fTemp16)):(iSlow2?((((fSlow161 * fTemp9) + ((fSlow83 * fTemp5) + (fSlow147 * fTemp8))) + (fSlow82 * fTemp6)) + (0.24993000000000001 * fTemp14)):fTemp14))); - output14[i] = FAUSTFLOAT((iSlow1?((0.11112 * fTemp15) + (((fSlow160 * fTemp13) + (((fSlow110 * fTemp7) + ((fSlow168 * fTemp1) + ((fSlow54 * fTemp2) + (fSlow94 * fTemp6)))) + (fSlow155 * fTemp12))) + (fSlow17 * ((((fSlow11 * ((fConst40 * fTemp8) + (fSlow34 * fTemp3))) + (fSlow132 * fTemp11)) + (fSlow139 * fTemp14)) + (fSlow131 * fTemp16))))):(iSlow2?((((fSlow100 * fTemp7) + (fSlow167 * fTemp8)) + (fSlow81 * fTemp6)) + (0.24993000000000001 * fTemp15)):fTemp15))); - output15[i] = FAUSTFLOAT((iSlow1?(((fSlow33 * ((fConst31 * fTemp6) + (fSlow170 * fTemp15))) + ((fSlow137 * fTemp14) + ((fSlow12 * ((fSlow171 * fTemp12) + (fSlow135 * fTemp3))) + ((fSlow146 * fTemp10) + ((fSlow55 * fTemp2) + (fSlow97 * fTemp5)))))) + (fSlow136 * fTemp16)):(iSlow2?(((fSlow84 * fTemp5) + (fSlow169 * fTemp6)) + (0.24993000000000001 * fTemp16)):fTemp16))); + output9[i] = FAUSTFLOAT((((fSlow2 * fTemp11) + (fSlow12 * ((fSlow132 * fTemp19) + (0.24993000000000001 * fTemp11)))) + (fSlow26 * ((fSlow18 * (((fSlow133 * fTemp10) + (fConst31 * fTemp19)) + (fSlow134 * fTemp15))) + ((fSlow135 * fTemp14) + (((fSlow13 * ((fSlow136 * fTemp3) + (fSlow137 * fTemp2))) + (fSlow138 * fTemp11)) + (fSlow139 * fTemp12))))))); + output10[i] = FAUSTFLOAT((((fSlow2 * fTemp10) + (fSlow12 * (((fSlow83 * fTemp5) + (fSlow140 * ((fSlow11 * fTemp7) + (fSlow10 * fTemp8)))) + (0.24993000000000001 * fTemp10)))) + (fSlow26 * ((0.11112 * fTemp10) + (((fSlow18 * ((((fSlow123 * fTemp8) + (fSlow133 * fTemp11)) + (fSlow141 * fTemp12)) + (fSlow142 * fTemp14))) + (((fSlow3 * ((fSlow143 * fTemp3) + (0.12598816230000001 * fTemp5))) + (fSlow11 * (((fSlow144 * fTemp2) + (fSlow145 * fTemp1)) + (fSlow146 * fTemp7)))) + (fSlow147 * fTemp13))) + (fSlow148 * fTemp16)))))); + output11[i] = FAUSTFLOAT((((fSlow2 * fTemp12) + (fSlow12 * ((((fSlow84 * fTemp5) + (fSlow149 * fTemp7)) + (fSlow150 * ((0.28609910994747967 * fTemp9) + (0.082589850671945866 * fTemp6)))) + (0.24993000000000001 * fTemp12)))) + (fSlow26 * ((fSlow151 * ((0.36623943296439643 * fTemp14) + (0.23640620007885615 * fTemp16))) + (((fSlow18 * (((fSlow152 * ((0.127153838554589 * fTemp9) + (0.036706218836248881 * fTemp6))) + (fSlow141 * fTemp10)) + (fSlow153 * fTemp13))) + ((((fSlow3 * ((fSlow154 * fTemp1) + (0.15936380355000002 * fTemp7))) + ((fSlow97 * fTemp5) + ((fSlow50 * fTemp2) + (fSlow55 * fTemp3)))) + (fSlow139 * fTemp11)) + (fSlow156 * fTemp12))) + (fSlow157 * fTemp15)))))); + output12[i] = FAUSTFLOAT((((fSlow2 * fTemp13) + (fSlow12 * ((((fSlow101 * fTemp7) + (fSlow158 * fTemp9)) + (fSlow120 * fTemp8)) + (0.24993000000000001 * fTemp13)))) + (fSlow26 * (((fSlow3 * (((fSlow159 * fTemp12) + (0.16903075950000004 * fTemp9)) + (fSlow160 * fTemp14))) + (((fSlow147 * fTemp10) + (((((fSlow53 * fTemp2) + (fSlow66 * fTemp1)) + (fSlow74 * fTemp3)) + (fSlow111 * fTemp7)) + (fSlow124 * fTemp8))) + (fSlow161 * fTemp13))) + (fSlow162 * fTemp15))))); + output13[i] = FAUSTFLOAT((((fSlow2 * fTemp14) + (fSlow12 * ((((fSlow163 * fTemp9) + ((fSlow85 * fTemp5) + (fSlow149 * fTemp8))) + (fSlow84 * fTemp6)) + (0.24993000000000001 * fTemp14)))) + (fSlow26 * (((fSlow18 * ((((fSlow11 * ((fSlow164 * fTemp1) + (fConst65 * fTemp9))) + (fSlow142 * fTemp10)) + (fSlow165 * fTemp13)) + (fSlow141 * fTemp15))) + ((((fSlow135 * fTemp11) + (((fSlow98 * fTemp5) + ((fSlow72 * fTemp3) + ((fSlow55 * fTemp2) + (fSlow166 * fTemp8)))) + (fSlow97 * fTemp6))) + (fSlow167 * fTemp12)) + (fSlow168 * fTemp14))) + (fSlow139 * fTemp16))))); + output14[i] = FAUSTFLOAT((((fSlow2 * fTemp15) + (fSlow12 * ((((fSlow102 * fTemp7) + (fSlow169 * fTemp8)) + (fSlow83 * fTemp6)) + (0.24993000000000001 * fTemp15)))) + (fSlow26 * ((0.11112 * fTemp15) + (((fSlow162 * fTemp13) + (((fSlow112 * fTemp7) + ((fSlow170 * fTemp1) + ((fSlow56 * fTemp2) + (fSlow96 * fTemp6)))) + (fSlow157 * fTemp12))) + (fSlow18 * ((((fSlow11 * ((fConst40 * fTemp8) + (fSlow36 * fTemp3))) + (fSlow134 * fTemp11)) + (fSlow141 * fTemp14)) + (fSlow133 * fTemp16)))))))); + output15[i] = FAUSTFLOAT((((fSlow2 * fTemp16) + (fSlow12 * (((fSlow86 * fTemp5) + (fSlow171 * fTemp6)) + (0.24993000000000001 * fTemp16)))) + (fSlow26 * (((fSlow35 * ((fConst31 * fTemp6) + (fSlow172 * fTemp15))) + ((fSlow139 * fTemp14) + ((fSlow13 * ((fSlow173 * fTemp12) + (fSlow137 * fTemp3))) + ((fSlow148 * fTemp10) + ((fSlow57 * fTemp2) + (fSlow99 * fTemp5)))))) + (fSlow138 * fTemp16))))); double fTemp20 = ((fSlow11 * fTemp11) + (fSlow10 * fTemp16)); - output16[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow173 * fTemp5) + (fSlow174 * fTemp6))) + (fSlow175 * fTemp20)):(iSlow2?(fSlow172 * fTemp20):0.0))); + output16[i] = FAUSTFLOAT(((fSlow174 * (fSlow12 * fTemp20)) + (fSlow26 * ((fSlow13 * ((fSlow175 * fTemp5) + (fSlow176 * fTemp6))) + (fSlow177 * fTemp20))))); double fTemp21 = ((fSlow11 * fTemp10) + (fSlow10 * fTemp15)); - output17[i] = FAUSTFLOAT((iSlow1?((fSlow3 * ((fSlow178 * fTemp19) + (0.11111100750000003 * fTemp11))) + ((fSlow12 * ((fSlow179 * fTemp8) + (fSlow180 * fTemp7))) + (fSlow181 * fTemp21))):(iSlow2?((fSlow176 * fTemp11) + (fSlow177 * fTemp21)):0.0))); - output18[i] = FAUSTFLOAT((iSlow1?(((fSlow11 * (((fSlow185 * fTemp7) + (fSlow186 * fTemp9)) + (fSlow187 * fTemp12))) + ((fSlow3 * ((fSlow188 * fTemp8) + (0.14547853605000002 * fTemp10))) + ((fSlow189 * fTemp5) + (fSlow190 * fTemp11)))) + (fSlow148 * ((0.10596150257755792 * fTemp14) + (0.027359094218383301 * fTemp16)))):(iSlow2?(((fSlow182 * fTemp11) + (fSlow183 * fTemp10)) + (fSlow25 * ((fSlow184 * fTemp16) + (0.23841585846519298 * ((fSlow11 * fTemp12) + (fSlow10 * fTemp14)))))):0.0))); - output19[i] = FAUSTFLOAT((iSlow1?(((fSlow3 * ((fSlow193 * ((0.41620233757211678 * fTemp9) + (0.12014724747147398 * fTemp6))) + (0.16264988730000002 * fTemp12))) + ((((fSlow194 * fTemp5) + (fSlow197 * fTemp7)) + (fSlow198 * fTemp8)) + (fSlow199 * fTemp10))) + (fSlow148 * ((0.12235394458243126 * fTemp13) + (0.047387405817769852 * fTemp15)))):(iSlow2?(((fSlow191 * fTemp10) + (fSlow192 * fTemp12)) + (fSlow148 * ((0.27529923627565928 * fTemp13) + (0.10662277113532474 * fTemp15)))):0.0))); - output20[i] = FAUSTFLOAT((iSlow1?(((fSlow203 * fTemp12) + ((fSlow12 * ((fSlow204 * fTemp5) + (fSlow205 * fTemp6))) + ((fSlow206 * fTemp8) + ((fSlow207 * fTemp7) + ((fSlow208 * fTemp9) + (fSlow209 * fTemp13)))))) + (fSlow210 * fTemp14)):(iSlow2?(((fSlow200 * fTemp12) + (fSlow201 * fTemp13)) + (fSlow202 * fTemp14)):0.0))); - output21[i] = FAUSTFLOAT((iSlow1?(((fSlow33 * ((fSlow213 * fTemp9) + (fConst87 * fTemp13))) + ((fSlow214 * fTemp10) + ((fSlow194 * fTemp6) + ((fSlow215 * fTemp8) + ((fSlow198 * fTemp7) + ((fSlow216 * fTemp5) + (fSlow217 * fTemp14))))))) + (fSlow199 * fTemp15)):(iSlow2?(((fSlow211 * fTemp13) + ((fSlow212 * fTemp10) + (fSlow192 * fTemp14))) + (fSlow191 * fTemp15)):0.0))); - output22[i] = FAUSTFLOAT((iSlow1?(((fSlow33 * ((fSlow221 * fTemp8) + (fConst90 * fTemp14))) + ((fSlow222 * fTemp12) + ((fSlow223 * fTemp11) + ((fSlow189 * fTemp6) + ((fSlow106 * fTemp9) + ((fSlow224 * fTemp7) + (fSlow225 * fTemp15))))))) + (fSlow190 * fTemp16)):(iSlow2?(((fSlow218 * fTemp12) + ((fSlow219 * fTemp11) + ((fSlow220 * fTemp14) + (fSlow183 * fTemp15)))) + (fSlow182 * fTemp16)):0.0))); - output23[i] = FAUSTFLOAT((iSlow1?((fSlow33 * ((fConst91 * fTemp15) + (fSlow228 * fTemp6))) + ((fSlow229 * fTemp10) + ((fSlow230 * fTemp8) + ((fSlow231 * fTemp7) + ((fSlow232 * fTemp5) + (fSlow233 * fTemp16)))))):(iSlow2?(((fSlow226 * fTemp10) + (fSlow227 * fTemp15)) + (fSlow176 * fTemp16)):0.0))); - output24[i] = FAUSTFLOAT((iSlow1?((fSlow236 * fTemp11) + ((fSlow237 * fTemp5) + ((fSlow238 * fTemp6) + (fSlow239 * fTemp16)))):(iSlow2?((fSlow234 * fTemp11) + (fSlow235 * fTemp16)):0.0))); - output25[i] = FAUSTFLOAT((iSlow1?(fSlow12 * ((fSlow240 * fTemp11) + (fSlow241 * fTemp16))):0.0)); - output26[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow242 * fTemp10) + (fSlow243 * fTemp15))) + (fSlow244 * fTemp20)):0.0)); - output27[i] = FAUSTFLOAT((iSlow1?((fSlow245 * fTemp21) + ((fSlow246 * fTemp11) + (fSlow12 * ((fSlow247 * fTemp14) + (fSlow248 * fTemp12))))):0.0)); - output28[i] = FAUSTFLOAT((iSlow1?((((fSlow249 * fTemp11) + (fSlow250 * fTemp10)) + (fSlow11 * ((fSlow251 * fTemp12) + (fSlow252 * fTemp13)))) + (fSlow253 * ((0.3273704914048397 * fTemp14) + (0.084526530349225165 * fTemp16)))):0.0)); - output29[i] = FAUSTFLOAT((iSlow1?(((fSlow253 * ((0.40411511288106022 * fTemp13) + (0.15651317678313359 * fTemp15))) + ((((fSlow254 * fTemp11) + (fSlow255 * fTemp10)) + (fSlow258 * fTemp12)) + (fSlow259 * fTemp14))) + (fSlow260 * fTemp16)):0.0)); - output30[i] = FAUSTFLOAT((iSlow1?((fSlow12 * ((fSlow261 * fTemp10) + (fSlow262 * fTemp15))) + ((fSlow263 * fTemp14) + ((fSlow264 * fTemp12) + (fSlow265 * fTemp13)))):0.0)); - output31[i] = FAUSTFLOAT((iSlow1?((fSlow255 * fTemp15) + ((fSlow266 * fTemp14) + ((fSlow11 * ((fSlow267 * fTemp11) + (fSlow268 * fTemp13))) + ((fSlow259 * fTemp12) + ((fSlow269 * fTemp10) + (fSlow254 * fTemp16)))))):0.0)); - output32[i] = FAUSTFLOAT((iSlow1?((((fSlow270 * fTemp13) + ((fSlow271 * fTemp12) + ((fSlow272 * fTemp11) + (fSlow273 * fTemp14)))) + (fSlow250 * fTemp15)) + (fSlow249 * fTemp16)):0.0)); - output33[i] = FAUSTFLOAT((iSlow1?(((fSlow270 * fTemp14) + ((fSlow274 * fTemp12) + ((fSlow275 * fTemp10) + (fSlow276 * fTemp15)))) + (fSlow246 * fTemp16)):0.0)); - output34[i] = FAUSTFLOAT((iSlow1?((fSlow277 * fTemp10) + ((fSlow278 * fTemp11) + ((fSlow279 * fTemp15) + (fSlow280 * fTemp16)))):0.0)); - output35[i] = FAUSTFLOAT((iSlow1?((fSlow281 * fTemp11) + (fSlow282 * fTemp16)):0.0)); + output17[i] = FAUSTFLOAT(((fSlow12 * ((fSlow178 * fTemp11) + (fSlow179 * fTemp21))) + (fSlow26 * ((fSlow3 * ((fSlow180 * fTemp19) + (0.11111100750000003 * fTemp11))) + ((fSlow13 * ((fSlow181 * fTemp8) + (fSlow182 * fTemp7))) + (fSlow183 * fTemp21)))))); + output18[i] = FAUSTFLOAT(((fSlow12 * (((fSlow184 * fTemp11) + (fSlow185 * fTemp10)) + (fSlow27 * ((fSlow186 * fTemp16) + (0.23841585846519298 * ((fSlow11 * fTemp12) + (fSlow10 * fTemp14))))))) + (fSlow26 * (((fSlow11 * (((fSlow187 * fTemp7) + (fSlow188 * fTemp9)) + (fSlow189 * fTemp12))) + ((fSlow3 * ((fSlow190 * fTemp8) + (0.14547853605000002 * fTemp10))) + ((fSlow191 * fTemp5) + (fSlow192 * fTemp11)))) + (fSlow150 * ((0.10596150257755792 * fTemp14) + (0.027359094218383301 * fTemp16))))))); + output19[i] = FAUSTFLOAT(((fSlow12 * (((fSlow193 * fTemp10) + (fSlow194 * fTemp12)) + (fSlow150 * ((0.10662277113532474 * fTemp15) + (0.27529923627565928 * fTemp13))))) + (fSlow26 * (((fSlow3 * ((fSlow195 * ((0.41620233757211678 * fTemp9) + (0.12014724747147398 * fTemp6))) + (0.16264988730000002 * fTemp12))) + ((((fSlow196 * fTemp5) + (fSlow199 * fTemp7)) + (fSlow200 * fTemp8)) + (fSlow201 * fTemp10))) + (fSlow150 * ((0.047387405817769852 * fTemp15) + (0.12235394458243126 * fTemp13))))))); + output20[i] = FAUSTFLOAT(((fSlow12 * (((fSlow202 * fTemp12) + (fSlow203 * fTemp13)) + (fSlow204 * fTemp14))) + (fSlow26 * (((fSlow205 * fTemp12) + ((fSlow13 * ((fSlow206 * fTemp5) + (fSlow207 * fTemp6))) + ((fSlow208 * fTemp8) + ((fSlow209 * fTemp7) + ((fSlow210 * fTemp9) + (fSlow211 * fTemp13)))))) + (fSlow212 * fTemp14))))); + output21[i] = FAUSTFLOAT(((fSlow12 * (((fSlow213 * fTemp13) + ((fSlow214 * fTemp10) + (fSlow194 * fTemp14))) + (fSlow193 * fTemp15))) + (fSlow26 * (((fSlow35 * ((fSlow215 * fTemp9) + (fConst87 * fTemp13))) + ((fSlow216 * fTemp10) + ((fSlow196 * fTemp6) + ((fSlow217 * fTemp8) + ((fSlow200 * fTemp7) + ((fSlow218 * fTemp5) + (fSlow219 * fTemp14))))))) + (fSlow201 * fTemp15))))); + output22[i] = FAUSTFLOAT(((fSlow12 * (((fSlow220 * fTemp12) + ((fSlow221 * fTemp11) + ((fSlow222 * fTemp14) + (fSlow185 * fTemp15)))) + (fSlow184 * fTemp16))) + (fSlow26 * (((fSlow35 * ((fSlow223 * fTemp8) + (fConst90 * fTemp14))) + ((fSlow224 * fTemp12) + ((fSlow225 * fTemp11) + ((fSlow191 * fTemp6) + ((fSlow108 * fTemp9) + ((fSlow226 * fTemp7) + (fSlow227 * fTemp15))))))) + (fSlow192 * fTemp16))))); + output23[i] = FAUSTFLOAT(((fSlow12 * (((fSlow228 * fTemp10) + (fSlow229 * fTemp15)) + (fSlow178 * fTemp16))) + (fSlow26 * ((fSlow35 * ((fConst91 * fTemp15) + (fSlow230 * fTemp6))) + ((fSlow231 * fTemp10) + ((fSlow232 * fTemp8) + ((fSlow233 * fTemp7) + ((fSlow234 * fTemp5) + (fSlow235 * fTemp16))))))))); + output24[i] = FAUSTFLOAT(((fSlow12 * ((fSlow236 * fTemp11) + (fSlow237 * fTemp16))) + (fSlow26 * ((fSlow238 * fTemp11) + ((fSlow239 * fTemp5) + ((fSlow240 * fTemp6) + (fSlow241 * fTemp16))))))); + output25[i] = FAUSTFLOAT((fSlow13 * (fSlow26 * ((fSlow242 * fTemp11) + (fSlow243 * fTemp16))))); + output26[i] = FAUSTFLOAT((fSlow26 * ((fSlow13 * ((fSlow244 * fTemp10) + (fSlow245 * fTemp15))) + (fSlow246 * fTemp20)))); + output27[i] = FAUSTFLOAT((fSlow26 * ((fSlow247 * fTemp21) + ((fSlow248 * fTemp11) + (fSlow13 * ((fSlow249 * fTemp14) + (fSlow250 * fTemp12))))))); + output28[i] = FAUSTFLOAT((fSlow26 * ((((fSlow251 * fTemp11) + (fSlow252 * fTemp10)) + (fSlow11 * ((fSlow253 * fTemp12) + (fSlow254 * fTemp13)))) + (fSlow255 * ((0.3273704914048397 * fTemp14) + (0.084526530349225165 * fTemp16)))))); + output29[i] = FAUSTFLOAT((fSlow26 * (((fSlow255 * ((0.15651317678313359 * fTemp15) + (0.40411511288106022 * fTemp13))) + ((((fSlow256 * fTemp11) + (fSlow257 * fTemp10)) + (fSlow260 * fTemp12)) + (fSlow261 * fTemp14))) + (fSlow262 * fTemp16)))); + output30[i] = FAUSTFLOAT((fSlow26 * ((fSlow13 * ((fSlow263 * fTemp10) + (fSlow264 * fTemp15))) + ((fSlow265 * fTemp14) + ((fSlow266 * fTemp12) + (fSlow267 * fTemp13)))))); + output31[i] = FAUSTFLOAT((fSlow26 * ((fSlow257 * fTemp15) + ((fSlow268 * fTemp14) + ((fSlow11 * ((fSlow269 * fTemp11) + (fSlow270 * fTemp13))) + ((fSlow261 * fTemp12) + ((fSlow271 * fTemp10) + (fSlow256 * fTemp16)))))))); + output32[i] = FAUSTFLOAT((fSlow26 * ((((fSlow272 * fTemp13) + ((fSlow273 * fTemp12) + ((fSlow274 * fTemp11) + (fSlow275 * fTemp14)))) + (fSlow252 * fTemp15)) + (fSlow251 * fTemp16)))); + output33[i] = FAUSTFLOAT((fSlow26 * (((fSlow272 * fTemp14) + ((fSlow276 * fTemp12) + ((fSlow277 * fTemp10) + (fSlow278 * fTemp15)))) + (fSlow248 * fTemp16)))); + output34[i] = FAUSTFLOAT((fSlow26 * ((fSlow279 * fTemp10) + ((fSlow280 * fTemp11) + ((fSlow281 * fTemp15) + (fSlow282 * fTemp16)))))); + output35[i] = FAUSTFLOAT((fSlow26 * ((fSlow283 * fTemp11) + (fSlow284 * fTemp16)))); } diff --git a/source/HOAUGens/HOABeamHCardio2Mono1.cpp b/source/HOAUGens/HOABeamHCardio2Mono1.cpp index 52f7d3b005..8b2126d1dc 100644 --- a/source/HOAUGens/HOABeamHCardio2Mono1.cpp +++ b/source/HOAUGens/HOABeamHCardio2Mono1.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOABeamHCardio2Mono1" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -651,6 +651,8 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph2; double fRec5[2]; FAUSTFLOAT fVbargraph3; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; double fRec0[2]; FAUSTFLOAT fHbargraph0; @@ -660,7 +662,13 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("cijk.lib/author", "Pierre Lecomte"); + m->declare("cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("cijk.lib/license", "GPL"); + m->declare("cijk.lib/name", "Cijk matrix"); + m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filename", "HOABeamHCardio2Mono1"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -751,6 +759,8 @@ class mydsp : public dsp { fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(0.0); } @@ -806,23 +816,26 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a91300", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56232caf5150", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a863b0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56232caea260", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a96a50", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56232cafa870", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3a8bbe0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56232caefa60", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); + ui_interface->addCheckButton("Int/Float", &fCheckbox0); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 1.0, 0.0001); ui_interface->declare(&fVslider0, "2", ""); ui_interface->addVerticalSlider("Output Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); ui_interface->declare(&fVslider2, "3", ""); @@ -832,7 +845,7 @@ class mydsp : public dsp { ui_interface->closeBox(); ui_interface->openHorizontalBox("Output"); ui_interface->declare(&fHbargraph0, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x3a9b5b0", &fHbargraph0, -70.0, 6.0); + ui_interface->addHorizontalBargraph("0x56232cb02eb0", &fHbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); @@ -851,6 +864,8 @@ class mydsp : public dsp { double fSlow4 = sin(fSlow3); double fSlow5 = cos(fSlow3); double fSlow6 = (0.43301700000000004 * fSlow1); + double fSlow7 = double(fHslider0); + double fSlow8 = max(0.0, (1.0 - fabs(((int(double(fCheckbox0))?fSlow7:double(int(fSlow7))) + -1.0)))); for (int i = 0; (i < count); i = (i + 1)) { fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); double fTemp0 = double(input1[i]); @@ -865,7 +880,7 @@ class mydsp : public dsp { double fTemp3 = double(input2[i]); fRec5[0] = max((fRec5[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph3 = FAUSTFLOAT(fRec5[0]); - double fTemp4 = (fRec1[0] * ((fSlow2 * ((fSlow4 * fTemp0) + (fSlow5 * fTemp1))) + ((0.24993000000000001 * fTemp2) + (fSlow6 * fTemp3)))); + double fTemp4 = ((fRec1[0] * ((fSlow2 * ((fSlow4 * fTemp0) + (fSlow5 * fTemp1))) + ((0.24993000000000001 * fTemp2) + (fSlow6 * fTemp3)))) * fSlow8); fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); fHbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp4); diff --git a/source/HOAUGens/HOABeamHCardio2Mono2.cpp b/source/HOAUGens/HOABeamHCardio2Mono2.cpp index d20d7f3e79..f16bc5dd84 100644 --- a/source/HOAUGens/HOABeamHCardio2Mono2.cpp +++ b/source/HOAUGens/HOABeamHCardio2Mono2.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOABeamHCardio2Mono2" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -639,14 +639,13 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; FAUSTFLOAT fVslider0; - FAUSTFLOAT fVslider1; double fRec1[2]; double fConst1; double fConst2; double fConst3; double fConst4; + FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; - FAUSTFLOAT fVslider3; double fRec2[2]; FAUSTFLOAT fVbargraph0; double fRec3[2]; @@ -655,6 +654,8 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph2; double fRec5[2]; FAUSTFLOAT fVbargraph3; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; double fConst5; double fRec6[2]; FAUSTFLOAT fVbargraph4; @@ -677,7 +678,13 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("cijk.lib/author", "Pierre Lecomte"); + m->declare("cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("cijk.lib/license", "GPL"); + m->declare("cijk.lib/name", "Cijk matrix"); + m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filename", "HOABeamHCardio2Mono2"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -791,10 +798,11 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); - fVslider3 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(0.0); } @@ -870,57 +878,58 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27ab680", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e61a4c0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27a0520", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e60f3c0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27b0dd0", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e61fbe0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27a5d50", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e614bc0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27b8c40", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e62b530", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27c7560", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e639dc0", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27d3fc0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e6467c0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27cd060", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e63f890", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x27bf0d0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56104e631990", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fVslider0, "1", ""); - ui_interface->addVerticalSlider("Order", &fVslider0, 1.0, 1.0, 2.0, 1.0); - ui_interface->declare(&fVslider1, "2", ""); - ui_interface->addVerticalSlider("Output Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider3, "3", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addCheckButton("Int/Float", &fCheckbox0); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 2.0, 0.0001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->addVerticalSlider("Output Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "4", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); ui_interface->openHorizontalBox("Output"); ui_interface->declare(&fHbargraph0, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x27d90a0", &fHbargraph0, -70.0, 6.0); + ui_interface->addHorizontalBargraph("0x56104e64cc40", &fHbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); @@ -937,34 +946,37 @@ class mydsp : public dsp { FAUSTFLOAT* input7 = inputs[7]; FAUSTFLOAT* input8 = inputs[8]; FAUSTFLOAT* output0 = outputs[0]; - int iSlow0 = ((int(double(fVslider0)) + -1) >= 1); - double fSlow1 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow2 = sin(double(fVslider2)); - double fSlow3 = mydsp_faustpower2_f(fSlow2); - double fSlow4 = (1.0 - fSlow3); - double fSlow5 = pow(fSlow4, 0.5); - double fSlow6 = (fConst4 * fSlow5); - double fSlow7 = double(fVslider3); - double fSlow8 = sin(fSlow7); - double fSlow9 = cos(fSlow7); - double fSlow10 = (0.43301700000000004 * fSlow2); - double fSlow11 = (fConst5 * fSlow4); - double fSlow12 = (0.70921930945587786 * (fSlow9 * fSlow8)); - double fSlow13 = (0.35460965472793893 * ((2.0 * mydsp_faustpower2_f(fSlow9)) + -1.0)); - double fSlow14 = (fConst3 * fSlow5); - double fSlow15 = (fConst7 * (fSlow2 * fSlow8)); - double fSlow16 = (fConst7 * (fSlow9 * fSlow2)); - double fSlow17 = (0.19245000000000004 * fSlow2); - double fSlow18 = (0.124224 * ((3.0 * fSlow3) + -1.0)); + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = sin(double(fVslider1)); + double fSlow2 = mydsp_faustpower2_f(fSlow1); + double fSlow3 = (1.0 - fSlow2); + double fSlow4 = pow(fSlow3, 0.5); + double fSlow5 = (fConst4 * fSlow4); + double fSlow6 = double(fVslider2); + double fSlow7 = sin(fSlow6); + double fSlow8 = cos(fSlow6); + double fSlow9 = (0.43301700000000004 * fSlow1); + double fSlow10 = double(fHslider0); + double fSlow11 = (int(double(fCheckbox0))?fSlow10:double(int(fSlow10))); + double fSlow12 = max(0.0, (1.0 - fabs((fSlow11 + -1.0)))); + double fSlow13 = (fConst5 * fSlow3); + double fSlow14 = (0.70921930945587786 * (fSlow8 * fSlow7)); + double fSlow15 = (0.35460965472793893 * ((2.0 * mydsp_faustpower2_f(fSlow8)) + -1.0)); + double fSlow16 = (fConst3 * fSlow4); + double fSlow17 = (fConst7 * (fSlow1 * fSlow7)); + double fSlow18 = (fConst7 * (fSlow8 * fSlow1)); + double fSlow19 = (0.19245000000000004 * fSlow1); + double fSlow20 = (0.124224 * ((3.0 * fSlow2) + -1.0)); + double fSlow21 = max(0.0, (1.0 - fabs((fSlow11 + -2.0)))); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow1 + (0.999 * fRec1[1])); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); double fTemp0 = double(input1[i]); fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec2[0]); double fTemp1 = double(input3[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = ((fSlow8 * fTemp0) + (fSlow9 * fTemp1)); + double fTemp2 = ((fSlow7 * fTemp0) + (fSlow8 * fTemp1)); double fTemp3 = double(input0[i]); fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph2 = FAUSTFLOAT(fRec4[0]); @@ -986,7 +998,7 @@ class mydsp : public dsp { double fTemp9 = double(input6[i]); fRec10[0] = max((fRec10[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); fVbargraph8 = FAUSTFLOAT(fRec10[0]); - double fTemp10 = (iSlow0?(fRec1[0] * ((fSlow11 * ((fSlow12 * fTemp5) + (fSlow13 * fTemp6))) + ((fSlow14 * (((fConst6 * fTemp2) + (fSlow15 * fTemp7)) + (fSlow16 * fTemp8))) + (((0.11112 * fTemp3) + (fSlow17 * fTemp4)) + (fSlow18 * fTemp9))))):(fRec1[0] * ((fSlow6 * fTemp2) + ((0.24993000000000001 * fTemp3) + (fSlow10 * fTemp4))))); + double fTemp10 = (fRec1[0] * ((((fSlow5 * fTemp2) + ((0.24993000000000001 * fTemp3) + (fSlow9 * fTemp4))) * fSlow12) + (((fSlow13 * ((fSlow14 * fTemp5) + (fSlow15 * fTemp6))) + ((fSlow16 * (((fConst6 * fTemp2) + (fSlow17 * fTemp7)) + (fSlow18 * fTemp8))) + (((0.11112 * fTemp3) + (fSlow19 * fTemp4)) + (fSlow20 * fTemp9)))) * fSlow21))); fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); fHbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp10); diff --git a/source/HOAUGens/HOABeamHCardio2Mono3.cpp b/source/HOAUGens/HOABeamHCardio2Mono3.cpp index 8c48ccc90e..2fb84a23c3 100644 --- a/source/HOAUGens/HOABeamHCardio2Mono3.cpp +++ b/source/HOAUGens/HOABeamHCardio2Mono3.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2015" license: "GPL" name: "HOABeamHCardio2Mono3" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -639,15 +639,14 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; FAUSTFLOAT fVslider0; - FAUSTFLOAT fVslider1; double fRec1[2]; double fConst1; double fConst2; double fConst3; double fConst4; double fConst5; + FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; - FAUSTFLOAT fVslider3; double fRec2[2]; FAUSTFLOAT fVbargraph0; double fRec3[2]; @@ -656,6 +655,8 @@ class mydsp : public dsp { FAUSTFLOAT fVbargraph2; double fRec5[2]; FAUSTFLOAT fVbargraph3; + FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; double fConst6; double fConst7; double fConst8; @@ -704,7 +705,13 @@ class mydsp : public dsp { m->declare("author", "Pierre Lecomte"); m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); + m->declare("cijk.lib/author", "Pierre Lecomte"); + m->declare("cijk.lib/copyright", "(c) Pierre Lecomte 2016"); + m->declare("cijk.lib/license", "GPL"); + m->declare("cijk.lib/name", "Cijk matrix"); + m->declare("cijk.lib/version", "10"); m->declare("copyright", "(c) Pierre Lecomte 2015"); + m->declare("filename", "HOABeamHCardio2Mono3"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -859,10 +866,11 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1.0); + fVslider0 = FAUSTFLOAT(0.0); fVslider1 = FAUSTFLOAT(0.0); fVslider2 = FAUSTFLOAT(0.0); - fVslider3 = FAUSTFLOAT(0.0); + fCheckbox0 = FAUSTFLOAT(0.0); + fHslider0 = FAUSTFLOAT(0.0); } @@ -966,87 +974,88 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x302b6a0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd311b10", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3020540", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd306a10", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3030df0", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd317230", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3025d70", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd30c210", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3039770", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd323690", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3048cc0", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd332b50", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3055b40", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd33f970", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x304e9d0", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd338830", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3040020", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd329f10", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x305e8b0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd349860", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x306d140", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd358070", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x307c9a0", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd367860", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3088f70", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd373c00", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3082660", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd36d4f0", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30733d0", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd35e2d0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3064550", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x558bcd34f4d0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); - ui_interface->declare(&fVslider0, "1", ""); - ui_interface->addVerticalSlider("Order", &fVslider0, 1.0, 1.0, 3.0, 1.0); - ui_interface->declare(&fVslider1, "2", ""); - ui_interface->addVerticalSlider("Output Gain", &fVslider1, 0.0, -10.0, 10.0, 0.10000000000000001); - ui_interface->declare(&fVslider3, "3", ""); - ui_interface->addVerticalSlider("Azimuth", &fVslider3, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); - ui_interface->declare(&fVslider2, "4", ""); - ui_interface->addVerticalSlider("Elevation", &fVslider2, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); + ui_interface->addCheckButton("Int/Float", &fCheckbox0); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Order", &fHslider0, 0.0, 0.0, 3.0, 0.0001); + ui_interface->declare(&fVslider0, "2", ""); + ui_interface->addVerticalSlider("Output Gain", &fVslider0, 0.0, -10.0, 10.0, 0.10000000000000001); + ui_interface->declare(&fVslider2, "3", ""); + ui_interface->addVerticalSlider("Azimuth", &fVslider2, 0.0, -3.1415926535897931, 3.1415926535897931, 0.10000000000000001); + ui_interface->declare(&fVslider1, "4", ""); + ui_interface->addVerticalSlider("Elevation", &fVslider1, 0.0, -1.5707963267948966, 1.5707963267948966, 0.10000000000000001); ui_interface->closeBox(); ui_interface->openHorizontalBox("Output"); ui_interface->declare(&fHbargraph0, "unit", "dB"); - ui_interface->addHorizontalBargraph("0x308f4e0", &fHbargraph0, -70.0, 6.0); + ui_interface->addHorizontalBargraph("0x558bcd37b510", &fHbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1070,57 +1079,59 @@ class mydsp : public dsp { FAUSTFLOAT* input14 = inputs[14]; FAUSTFLOAT* input15 = inputs[15]; FAUSTFLOAT* output0 = outputs[0]; - int iSlow0 = (int(double(fVslider0)) + -1); - int iSlow1 = (iSlow0 >= 2); - int iSlow2 = (iSlow0 >= 1); - double fSlow3 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider1)))); - double fSlow4 = sin(double(fVslider2)); - double fSlow5 = mydsp_faustpower2_f(fSlow4); - double fSlow6 = (1.0 - fSlow5); - double fSlow7 = pow(fSlow6, 0.5); - double fSlow8 = (fConst5 * fSlow7); - double fSlow9 = double(fVslider3); - double fSlow10 = sin(fSlow9); - double fSlow11 = cos(fSlow9); - double fSlow12 = (0.43301700000000004 * fSlow4); - double fSlow13 = (fConst9 * fSlow6); - double fSlow14 = (fSlow11 * fSlow10); + double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fVslider0)))); + double fSlow1 = sin(double(fVslider1)); + double fSlow2 = mydsp_faustpower2_f(fSlow1); + double fSlow3 = (1.0 - fSlow2); + double fSlow4 = pow(fSlow3, 0.5); + double fSlow5 = (fConst5 * fSlow4); + double fSlow6 = double(fVslider2); + double fSlow7 = sin(fSlow6); + double fSlow8 = cos(fSlow6); + double fSlow9 = (0.43301700000000004 * fSlow1); + double fSlow10 = double(fHslider0); + double fSlow11 = (int(double(fCheckbox0))?fSlow10:double(int(fSlow10))); + double fSlow12 = max(0.0, (1.0 - fabs((fSlow11 + -1.0)))); + double fSlow13 = (fConst9 * fSlow3); + double fSlow14 = (fSlow8 * fSlow7); double fSlow15 = (0.70921930945587786 * fSlow14); - double fSlow16 = mydsp_faustpower2_f(fSlow11); + double fSlow16 = mydsp_faustpower2_f(fSlow8); double fSlow17 = ((2.0 * fSlow16) + -1.0); double fSlow18 = (0.35460965472793893 * fSlow17); - double fSlow19 = (fConst4 * fSlow7); - double fSlow20 = (fSlow4 * fSlow10); + double fSlow19 = (fConst4 * fSlow4); + double fSlow20 = (fSlow1 * fSlow7); double fSlow21 = (fConst13 * fSlow20); - double fSlow22 = (fSlow11 * fSlow4); + double fSlow22 = (fSlow8 * fSlow1); double fSlow23 = (fConst13 * fSlow22); - double fSlow24 = (0.19245000000000004 * fSlow4); - double fSlow25 = ((3.0 * fSlow5) + -1.0); + double fSlow24 = (0.19245000000000004 * fSlow1); + double fSlow25 = ((3.0 * fSlow2) + -1.0); double fSlow26 = (0.124224 * fSlow25); - double fSlow27 = (fConst14 * pow(fSlow6, 1.5)); - double fSlow28 = (((4.0 * fSlow16) + -1.0) * fSlow10); - double fSlow29 = (((2.0 * fSlow17) + -1.0) * fSlow11); - double fSlow30 = (fConst8 * fSlow6); - double fSlow31 = (0.39893300697034545 * fSlow14); - double fSlow32 = (0.19946650348517272 * fSlow17); - double fSlow33 = (fConst16 * (fSlow22 * fSlow10)); - double fSlow34 = (fConst17 * (fSlow17 * fSlow4)); - double fSlow35 = (fConst19 * fSlow20); - double fSlow36 = (fConst19 * fSlow22); - double fSlow37 = ((16.925687506432688 * fSlow5) + -3.3851375012865379); - double fSlow38 = (fConst20 * (fSlow37 * fSlow10)); - double fSlow39 = (fConst20 * (fSlow37 * fSlow11)); - double fSlow40 = (0.055121666666666666 * ((2.5 * fSlow25) + -2.0)); - double fSlow41 = (0.069875499999999993 * fSlow25); + double fSlow27 = max(0.0, (1.0 - fabs((fSlow11 + -2.0)))); + double fSlow28 = (fConst14 * pow(fSlow3, 1.5)); + double fSlow29 = (((4.0 * fSlow16) + -1.0) * fSlow7); + double fSlow30 = (((2.0 * fSlow17) + -1.0) * fSlow8); + double fSlow31 = (fConst8 * fSlow3); + double fSlow32 = (0.39893300697034545 * fSlow14); + double fSlow33 = (0.19946650348517272 * fSlow17); + double fSlow34 = (fConst16 * (fSlow22 * fSlow7)); + double fSlow35 = (fConst17 * (fSlow17 * fSlow1)); + double fSlow36 = (fConst19 * fSlow20); + double fSlow37 = (fConst19 * fSlow22); + double fSlow38 = ((16.925687506432688 * fSlow2) + -3.3851375012865379); + double fSlow39 = (fConst20 * (fSlow38 * fSlow7)); + double fSlow40 = (fConst20 * (fSlow38 * fSlow8)); + double fSlow41 = (0.055121666666666666 * ((2.5 * fSlow25) + -2.0)); + double fSlow42 = (0.069875499999999993 * fSlow25); + double fSlow43 = max(0.0, (1.0 - fabs((fSlow11 + -3.0)))); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow3 + (0.999 * fRec1[1])); + fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); double fTemp0 = double(input1[i]); fRec2[0] = max((fRec2[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp0)))))); fVbargraph0 = FAUSTFLOAT(fRec2[0]); double fTemp1 = double(input3[i]); fRec3[0] = max((fRec3[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph1 = FAUSTFLOAT(fRec3[0]); - double fTemp2 = ((fSlow10 * fTemp0) + (fSlow11 * fTemp1)); + double fTemp2 = ((fSlow7 * fTemp0) + (fSlow8 * fTemp1)); double fTemp3 = double(input0[i]); fRec4[0] = max((fRec4[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); fVbargraph2 = FAUSTFLOAT(fRec4[0]); @@ -1163,7 +1174,7 @@ class mydsp : public dsp { double fTemp16 = double(input12[i]); fRec17[0] = max((fRec17[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); fVbargraph15 = FAUSTFLOAT(fRec17[0]); - double fTemp17 = (iSlow1?(fRec1[0] * ((fSlow27 * ((fSlow28 * fTemp10) + (fSlow29 * fTemp11))) + ((fSlow30 * (((fConst7 * ((fSlow31 * fTemp5) + (fSlow32 * fTemp6))) + (fSlow33 * fTemp12)) + (fSlow34 * fTemp13))) + ((fSlow19 * (((((fConst18 * fTemp2) + (fSlow35 * fTemp7)) + (fSlow36 * fTemp8)) + (fSlow38 * fTemp14)) + (fSlow39 * fTemp15))) + ((fSlow4 * ((0.108241 * fTemp4) + (fSlow40 * fTemp16))) + ((0.062512799999999993 * fTemp3) + (fSlow41 * fTemp9))))))):(iSlow2?(fRec1[0] * ((fSlow13 * ((fSlow15 * fTemp5) + (fSlow18 * fTemp6))) + ((fSlow19 * (((fConst10 * fTemp2) + (fSlow21 * fTemp7)) + (fSlow23 * fTemp8))) + (((0.11112 * fTemp3) + (fSlow24 * fTemp4)) + (fSlow26 * fTemp9))))):(fRec1[0] * ((fSlow8 * fTemp2) + ((0.24993000000000001 * fTemp3) + (fSlow12 * fTemp4)))))); + double fTemp17 = (fRec1[0] * (((((fSlow5 * fTemp2) + ((0.24993000000000001 * fTemp3) + (fSlow9 * fTemp4))) * fSlow12) + (((fSlow13 * ((fSlow15 * fTemp5) + (fSlow18 * fTemp6))) + ((fSlow19 * (((fConst10 * fTemp2) + (fSlow21 * fTemp7)) + (fSlow23 * fTemp8))) + (((0.11112 * fTemp3) + (fSlow24 * fTemp4)) + (fSlow26 * fTemp9)))) * fSlow27)) + (((fSlow28 * ((fSlow29 * fTemp10) + (fSlow30 * fTemp11))) + ((fSlow31 * (((fConst7 * ((fSlow32 * fTemp5) + (fSlow33 * fTemp6))) + (fSlow34 * fTemp12)) + (fSlow35 * fTemp13))) + ((fSlow19 * (((((fConst18 * fTemp2) + (fSlow36 * fTemp7)) + (fSlow37 * fTemp8)) + (fSlow39 * fTemp14)) + (fSlow40 * fTemp15))) + ((fSlow1 * ((0.108241 * fTemp4) + (fSlow41 * fTemp16))) + ((0.062512799999999993 * fTemp3) + (fSlow42 * fTemp9)))))) * fSlow43))); fRec0[0] = max((fRec0[1] - fConst0), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); fHbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp17); diff --git a/source/HOAUGens/HOAEncoder1.cpp b/source/HOAUGens/HOAEncoder1.cpp index f4f628b6ca..907be434bd 100644 --- a/source/HOAUGens/HOAEncoder1.cpp +++ b/source/HOAUGens/HOAEncoder1.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder1" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -639,29 +639,26 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; - FAUSTFLOAT fHslider0; - double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; + FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec2[2]; + double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; FAUSTFLOAT fHslider2; - double fRec4[2]; FAUSTFLOAT fHslider3; - double fRec5[2]; double fConst3; double fConst4; - double fRec8[2]; - double fRec7[2]; - double fRec6[2]; + double fRec5[2]; + double fRec4[2]; double fRec3[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec9[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph2; - double fRec10[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph3; public: @@ -671,6 +668,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("filename", "HOAEncoder1"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -766,10 +764,10 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider1 = FAUSTFLOAT(2.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -781,11 +779,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; + fRec0[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0; + fRec5[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -793,31 +791,19 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec5[l4] = 0.0; + fRec3[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec8[l5] = 0.0; + fRec2[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec7[l6] = 0.0; + fRec6[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec6[l7] = 0.0; - - } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec3[l8] = 0.0; - - } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec9[l9] = 0.0; - - } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0; + fRec7[l7] = 0.0; } @@ -845,14 +831,14 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder1"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider0, "0+1", ""); - ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+2", ""); - ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); ui_interface->declare(&fHslider3, "0+3", ""); ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); @@ -874,21 +860,21 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x25edca0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x564b557222e0", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2606310", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x564b55737310", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x260bc40", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x564b5573ce20", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x2611a10", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x564b55742dd0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -902,56 +888,54 @@ class mydsp : public dsp { FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); - double fSlow1 = double(fCheckbox0); - double fSlow2 = (1.0 - fSlow1); - double fSlow3 = double(fEntry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (0.0010000000000000009 * double(fHslider1)); - double fSlow6 = (0.0010000000000000009 * double(fHslider2)); - double fSlow7 = (0.0010000000000000009 * double(fHslider3)); - double fSlow8 = (1.0 / ((fConst4 / fSlow3) + 1.0)); - double fSlow9 = (fConst3 / fSlow3); + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fEntry0); + double fSlow2 = double(fHslider0); + double fSlow3 = (1.0 - fSlow0); + double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = sin(double(fHslider2)); + double fSlow7 = pow((1.0 - mydsp_faustpower2_f(fSlow6)), 0.5); + double fSlow8 = double(fHslider3); + double fSlow9 = (fConst2 * (fSlow7 * sin(fSlow8))); + double fSlow10 = ((fConst4 / fSlow2) + 1.0); + double fSlow11 = (fConst3 / (fSlow10 * fSlow2)); + double fSlow12 = (1.0 / ((fConst4 / fSlow1) + 1.0)); + double fSlow13 = (((fSlow10 * fSlow0) * fSlow1) / fSlow2); + double fSlow14 = (fConst3 / fSlow1); + double fSlow15 = (1.7320508075688772 * fSlow6); + double fSlow16 = (fConst2 * (cos(fSlow8) * fSlow7)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); - double fTemp0 = double(input0[i]); - double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); - double fTemp2 = sin(fRec4[0]); - double fTemp3 = pow((1.0 - mydsp_faustpower2_f(fTemp2)), 0.5); - fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); - double fTemp4 = ((fConst4 / fRec2[0]) + 1.0); - fRec8[0] = (fRec8[1] + fRec7[1]); - fRec7[0] = (fSlow8 * ((fSlow4 * (((fRec1[0] * fTemp4) * fTemp0) / fRec2[0])) - (fSlow9 * fRec8[0]))); - fRec6[0] = (fRec7[0] + fRec6[1]); - double fTemp5 = ((fConst3 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp4))) + (fRec7[0] + (fSlow2 * (fRec1[0] * fTemp0)))); - double fTemp6 = (fConst2 * ((fTemp3 * sin(fRec5[0])) * fTemp5)); - fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - output1[i] = FAUSTFLOAT(fTemp6); - double fTemp7 = (1.7320508075688772 * (fTemp2 * fTemp5)); - fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp7)))))); - fVbargraph2 = FAUSTFLOAT(fRec9[0]); - output2[i] = FAUSTFLOAT(fTemp7); - double fTemp8 = (fConst2 * ((fTemp3 * cos(fRec5[0])) * fTemp5)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp8)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - output3[i] = FAUSTFLOAT(fTemp8); + fRec5[0] = (fRec5[1] + fRec4[1]); + fRec4[0] = (fSlow12 * ((fSlow13 * fTemp0) - (fSlow14 * fRec5[0]))); + fRec3[0] = (fRec4[0] + fRec3[1]); + double fTemp2 = ((fSlow11 * (fRec3[0] - fRec4[0])) + (fRec4[0] + (fSlow3 * fTemp0))); + double fTemp3 = (fSlow9 * fTemp2); + fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp3)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp3); + double fTemp4 = (fSlow15 * fTemp2); + fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph2 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (fSlow16 * fTemp2); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph3 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp5); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; - fRec8[1] = fRec8[0]; - fRec7[1] = fRec7[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; - fRec9[1] = fRec9[0]; - fRec10[1] = fRec10[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; } diff --git a/source/HOAUGens/HOAEncoder2.cpp b/source/HOAUGens/HOAEncoder2.cpp index 353c909fc1..01963ca19f 100644 --- a/source/HOAUGens/HOAEncoder2.cpp +++ b/source/HOAUGens/HOAEncoder2.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder2" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -639,53 +639,50 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; - FAUSTFLOAT fHslider0; - double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; + FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec2[2]; + double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; double fConst3; double fConst4; FAUSTFLOAT fHslider2; - double fRec4[2]; FAUSTFLOAT fHslider3; - double fRec5[2]; double fConst5; double fConst6; - double fRec8[2]; - double fRec7[2]; - double fRec6[2]; + double fRec5[2]; + double fRec4[2]; double fRec3[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec9[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph2; - double fRec10[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph3; double fConst7; double fConst8; double fConst9; double fConst10; - double fRec14[2]; - double fRec15[2]; - double fRec13[2]; + double fRec11[2]; double fRec12[2]; + double fRec10[2]; + double fRec9[2]; double fVec0[2]; - double fRec16[2]; - double fRec11[2]; + double fRec13[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph4; double fConst11; - double fRec17[2]; + double fRec14[2]; FAUSTFLOAT fVbargraph5; - double fRec18[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph6; - double fRec19[2]; + double fRec16[2]; FAUSTFLOAT fVbargraph7; double fConst12; - double fRec20[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph8; public: @@ -695,6 +692,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("filename", "HOAEncoder2"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -818,10 +816,10 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider1 = FAUSTFLOAT(2.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -833,11 +831,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; + fRec0[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0; + fRec5[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -845,27 +843,27 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec5[l4] = 0.0; + fRec3[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec8[l5] = 0.0; + fRec2[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec7[l6] = 0.0; + fRec6[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec6[l7] = 0.0; + fRec7[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec3[l8] = 0.0; + fRec11[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec9[l9] = 0.0; + fRec12[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -873,11 +871,11 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec14[l11] = 0.0; + fRec9[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec15[l12] = 0.0; + fVec0[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -885,37 +883,25 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec12[l14] = 0.0; + fRec8[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fVec0[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0; + fRec15[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec11[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { fRec17[l18] = 0.0; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec18[l19] = 0.0; - - } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec19[l20] = 0.0; - - } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec20[l21] = 0.0; - - } } @@ -941,14 +927,14 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder2"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider0, "0+1", ""); - ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+2", ""); - ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); ui_interface->declare(&fHslider3, "0+3", ""); ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); @@ -970,43 +956,43 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3453b30", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd9321d50", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x346d420", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd9337fe0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3472d50", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd933daf0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3478d30", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd9343cb0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3490100", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd935ba10", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3497c10", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd93634d0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x349dc70", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd9369710", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34a3770", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd936f5d0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x34aa580", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x555cd93765c0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1025,109 +1011,115 @@ class mydsp : public dsp { FAUSTFLOAT* output6 = outputs[6]; FAUSTFLOAT* output7 = outputs[7]; FAUSTFLOAT* output8 = outputs[8]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); - double fSlow1 = double(fCheckbox0); - double fSlow2 = (1.0 - fSlow1); - double fSlow3 = double(fEntry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (0.0010000000000000009 * double(fHslider1)); - double fSlow6 = (0.0010000000000000009 * double(fHslider2)); - double fSlow7 = (0.0010000000000000009 * double(fHslider3)); - double fSlow8 = (fConst6 / fSlow3); - double fSlow9 = (1.0 / (fSlow8 + 1.0)); - double fSlow10 = (fConst5 / fSlow3); - double fSlow11 = mydsp_faustpower2_f(fSlow8); - double fSlow12 = (1.0 / (((fConst9 / fSlow3) + (3.0 * fSlow11)) + 1.0)); - double fSlow13 = (12.0 * fSlow11); - double fSlow14 = (fSlow13 + (fConst10 / fSlow3)); + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fEntry0); + double fSlow2 = double(fHslider0); + double fSlow3 = (1.0 - fSlow0); + double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = sin(double(fHslider2)); + double fSlow7 = mydsp_faustpower2_f(fSlow6); + double fSlow8 = (1.0 - fSlow7); + double fSlow9 = pow(fSlow8, 0.5); + double fSlow10 = double(fHslider3); + double fSlow11 = sin(fSlow10); + double fSlow12 = (fConst4 * (fSlow9 * fSlow11)); + double fSlow13 = (fConst6 / fSlow2); + double fSlow14 = (fSlow13 + 1.0); + double fSlow15 = (fConst5 / (fSlow14 * fSlow2)); + double fSlow16 = (fConst6 / fSlow1); + double fSlow17 = (1.0 / (fSlow16 + 1.0)); + double fSlow18 = (((fSlow14 * fSlow0) * fSlow1) / fSlow2); + double fSlow19 = (fConst5 / fSlow1); + double fSlow20 = (1.7320508075688772 * fSlow6); + double fSlow21 = cos(fSlow10); + double fSlow22 = (fConst4 * (fSlow21 * fSlow9)); + double fSlow23 = (fConst8 * ((fSlow21 * fSlow8) * fSlow11)); + double fSlow24 = mydsp_faustpower2_f(fSlow13); + double fSlow25 = (((fConst9 / fSlow2) + (3.0 * fSlow24)) + 1.0); + double fSlow26 = (1.0 / fSlow25); + double fSlow27 = (12.0 * fSlow24); + double fSlow28 = ((fConst10 / fSlow2) + fSlow27); + double fSlow29 = mydsp_faustpower2_f(fSlow16); + double fSlow30 = (1.0 / (((fConst9 / fSlow1) + (3.0 * fSlow29)) + 1.0)); + double fSlow31 = (((fSlow25 * fSlow0) * fSlow1) / fSlow2); + double fSlow32 = (12.0 * fSlow29); + double fSlow33 = (fSlow32 + (fConst10 / fSlow1)); + double fSlow34 = (fConst11 * ((fSlow6 * fSlow9) * fSlow11)); + double fSlow35 = (1.1180339887498949 * ((3.0 * fSlow7) + -1.0)); + double fSlow36 = (fConst11 * ((fSlow21 * fSlow6) * fSlow9)); + double fSlow37 = (fConst12 * (((2.0 * mydsp_faustpower2_f(fSlow21)) + -1.0) * fSlow8)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); - double fTemp0 = double(input0[i]); - double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); - double fTemp2 = sin(fRec4[0]); - double fTemp3 = mydsp_faustpower2_f(fTemp2); - double fTemp4 = (1.0 - fTemp3); - double fTemp5 = pow(fTemp4, 0.5); - fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); - double fTemp6 = sin(fRec5[0]); - double fTemp7 = (fConst6 / fRec2[0]); - double fTemp8 = (fTemp7 + 1.0); - fRec8[0] = (fRec8[1] + fRec7[1]); - fRec7[0] = (fSlow9 * ((fSlow4 * (((fRec1[0] * fTemp8) * fTemp0) / fRec2[0])) - (fSlow10 * fRec8[0]))); - fRec6[0] = (fRec7[0] + fRec6[1]); - double fTemp9 = (fSlow2 * (fRec1[0] * fTemp0)); - double fTemp10 = ((fConst5 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp8))) + (fRec7[0] + fTemp9)); - double fTemp11 = (fConst4 * ((fTemp5 * fTemp6) * fTemp10)); - fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - output1[i] = FAUSTFLOAT(fTemp11); - double fTemp12 = (1.7320508075688772 * (fTemp2 * fTemp10)); - fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph2 = FAUSTFLOAT(fRec9[0]); - output2[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = cos(fRec5[0]); - double fTemp14 = (fConst4 * ((fTemp5 * fTemp13) * fTemp10)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp14)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - output3[i] = FAUSTFLOAT(fTemp14); - double fTemp15 = mydsp_faustpower2_f(fTemp7); - double fTemp16 = (((fConst9 / fRec2[0]) + (3.0 * fTemp15)) + 1.0); - fRec14[0] = (fRec14[1] + fRec13[1]); - fRec15[0] = (fRec15[1] + fRec14[1]); - fRec13[0] = (fSlow12 * ((fSlow4 * (((fRec1[0] * fTemp16) * fTemp0) / fRec2[0])) - ((fSlow14 * fRec14[0]) + (fSlow13 * fRec15[0])))); - fRec12[0] = (fRec13[0] + fRec12[1]); - double fTemp17 = (fRec12[0] - fRec13[0]); - fVec0[0] = fTemp17; - fRec16[0] = (fRec16[1] + fVec0[1]); - double fTemp18 = ((((fTemp17 * ((fConst10 / fRec2[0]) + (12.0 * fTemp15))) + (12.0 * (fRec16[0] * fTemp15))) / fTemp16) + (fRec13[0] + fTemp9)); - double fTemp19 = (fConst8 * (((fTemp4 * fTemp6) * fTemp13) * fTemp18)); - fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); - fVbargraph4 = FAUSTFLOAT(fRec11[0]); - output4[i] = FAUSTFLOAT(fTemp19); - double fTemp20 = (fTemp2 * fTemp5); - double fTemp21 = (fConst11 * ((fTemp20 * fTemp6) * fTemp18)); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph5 = FAUSTFLOAT(fRec17[0]); - output5[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (1.1180339887498949 * (fTemp18 * ((3.0 * fTemp3) + -1.0))); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph6 = FAUSTFLOAT(fRec18[0]); - output6[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (fConst11 * ((fTemp20 * fTemp13) * fTemp18)); - fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph7 = FAUSTFLOAT(fRec19[0]); - output7[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = (fConst12 * ((fTemp4 * fTemp18) * ((2.0 * mydsp_faustpower2_f(fTemp13)) + -1.0))); - fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp24)))))); - fVbargraph8 = FAUSTFLOAT(fRec20[0]); - output8[i] = FAUSTFLOAT(fTemp24); + fRec5[0] = (fRec5[1] + fRec4[1]); + fRec4[0] = (fSlow17 * ((fSlow18 * fTemp0) - (fSlow19 * fRec5[0]))); + fRec3[0] = (fRec4[0] + fRec3[1]); + double fTemp2 = (fSlow3 * fTemp0); + double fTemp3 = ((fSlow15 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); + double fTemp4 = (fSlow12 * fTemp3); + fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (fSlow20 * fTemp3); + fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (fSlow22 * fTemp3); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp6); + fRec11[0] = (fRec11[1] + fRec10[1]); + fRec12[0] = (fRec12[1] + fRec11[1]); + fRec10[0] = (fSlow30 * ((fSlow31 * fTemp0) - ((fSlow33 * fRec11[0]) + (fSlow32 * fRec12[0])))); + fRec9[0] = (fRec10[0] + fRec9[1]); + double fTemp7 = (fRec9[0] - fRec10[0]); + fVec0[0] = fTemp7; + fRec13[0] = (fRec13[1] + fVec0[1]); + double fTemp8 = ((fSlow26 * ((fSlow28 * fTemp7) + (fSlow27 * fRec13[0]))) + (fRec10[0] + fTemp2)); + double fTemp9 = (fSlow23 * fTemp8); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (fSlow34 * fTemp8); + fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph5 = FAUSTFLOAT(fRec14[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (fSlow35 * fTemp8); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph6 = FAUSTFLOAT(fRec15[0]); + output6[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (fSlow36 * fTemp8); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph7 = FAUSTFLOAT(fRec16[0]); + output7[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (fSlow37 * fTemp8); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph8 = FAUSTFLOAT(fRec17[0]); + output8[i] = FAUSTFLOAT(fTemp13); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; - fRec8[1] = fRec8[0]; - fRec7[1] = fRec7[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; - fRec9[1] = fRec9[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; + fRec9[1] = fRec9[0]; + fVec0[1] = fVec0[0]; + fRec13[1] = fRec13[0]; + fRec8[1] = fRec8[0]; fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; - fRec13[1] = fRec13[0]; - fRec12[1] = fRec12[0]; - fVec0[1] = fVec0[0]; fRec16[1] = fRec16[0]; - fRec11[1] = fRec11[0]; fRec17[1] = fRec17[0]; - fRec18[1] = fRec18[0]; - fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; } diff --git a/source/HOAUGens/HOAEncoder3.cpp b/source/HOAUGens/HOAEncoder3.cpp index db96b8b04e..f3a9ac9e80 100644 --- a/source/HOAUGens/HOAEncoder3.cpp +++ b/source/HOAUGens/HOAEncoder3.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder3" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -639,12 +639,11 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; - FAUSTFLOAT fHslider0; - double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; + FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec2[2]; + double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; @@ -652,19 +651,17 @@ class mydsp : public dsp { double fConst4; double fConst5; FAUSTFLOAT fHslider2; - double fRec4[2]; FAUSTFLOAT fHslider3; - double fRec5[2]; double fConst6; double fConst7; - double fRec8[2]; - double fRec7[2]; - double fRec6[2]; + double fRec5[2]; + double fRec4[2]; double fRec3[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec9[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph2; - double fRec10[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph3; double fConst8; double fConst9; @@ -672,56 +669,56 @@ class mydsp : public dsp { double fConst11; double fConst12; double fConst13; - double fRec14[2]; - double fRec15[2]; - double fRec13[2]; + double fRec11[2]; double fRec12[2]; + double fRec10[2]; + double fRec9[2]; double fVec0[2]; - double fRec16[2]; - double fRec11[2]; + double fRec13[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph4; double fConst14; double fConst15; - double fRec17[2]; + double fRec14[2]; FAUSTFLOAT fVbargraph5; - double fRec18[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph6; - double fRec19[2]; + double fRec16[2]; FAUSTFLOAT fVbargraph7; double fConst16; - double fRec20[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph8; double fConst17; double fConst18; double fConst19; double fConst20; double fConst21; - double fRec25[2]; - double fRec26[2]; - double fRec24[2]; - double fRec27[2]; - double fVec1[2]; - double fRec28[2]; - double fRec29[2]; - double fRec23[2]; double fRec22[2]; + double fRec23[2]; double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph9; double fConst22; double fConst23; - double fRec30[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph10; double fConst24; - double fRec31[2]; + double fRec28[2]; FAUSTFLOAT fVbargraph11; - double fRec32[2]; + double fRec29[2]; FAUSTFLOAT fVbargraph12; - double fRec33[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph13; double fConst25; - double fRec34[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph14; - double fRec35[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph15; public: @@ -731,6 +728,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("filename", "HOAEncoder3"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -895,10 +893,10 @@ class mydsp : public dsp { } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider1 = FAUSTFLOAT(2.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -910,11 +908,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; + fRec0[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0; + fRec5[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -922,27 +920,27 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec5[l4] = 0.0; + fRec3[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec8[l5] = 0.0; + fRec2[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec7[l6] = 0.0; + fRec6[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec6[l7] = 0.0; + fRec7[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec3[l8] = 0.0; + fRec11[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec9[l9] = 0.0; + fRec12[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -950,11 +948,11 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec14[l11] = 0.0; + fRec9[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec15[l12] = 0.0; + fVec0[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -962,19 +960,19 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec12[l14] = 0.0; + fRec8[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fVec0[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0; + fRec15[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec11[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -982,55 +980,55 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec18[l19] = 0.0; + fRec22[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec19[l20] = 0.0; + fRec23[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec20[l21] = 0.0; + fRec21[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec25[l22] = 0.0; + fRec24[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec26[l23] = 0.0; + fVec1[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec24[l24] = 0.0; + fRec25[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec27[l25] = 0.0; + fRec26[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fVec1[l26] = 0.0; + fRec20[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec19[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec29[l28] = 0.0; + fRec18[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec23[l29] = 0.0; + fRec27[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec22[l30] = 0.0; + fRec28[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec21[l31] = 0.0; + fRec29[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { @@ -1045,18 +1043,6 @@ class mydsp : public dsp { fRec32[l34] = 0.0; } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec33[l35] = 0.0; - - } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec34[l36] = 0.0; - - } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec35[l37] = 0.0; - - } } @@ -1082,14 +1068,14 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder3"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider0, "0+1", ""); - ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+2", ""); - ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); ui_interface->declare(&fHslider3, "0+3", ""); ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); @@ -1111,73 +1097,73 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32b0800", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929f73d70", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32ca600", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929f8a300", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32cff30", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929f8fe10", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32d6120", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929f95fd0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32edaf0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929fae330", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32f5900", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929fb60f0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32fbb70", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929fbc540", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3301670", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929fc2610", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x33088a0", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929fc9a20", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3326ad0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929fe8840", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x332e4c0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929ff0000", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3335a20", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929ff7920", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x333bdc0", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x560929ffdea0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3341a80", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56092a003f20", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3347ed0", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56092a00a730", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x334e3b0", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x56092a010df0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1203,179 +1189,195 @@ class mydsp : public dsp { FAUSTFLOAT* output13 = outputs[13]; FAUSTFLOAT* output14 = outputs[14]; FAUSTFLOAT* output15 = outputs[15]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); - double fSlow1 = double(fCheckbox0); - double fSlow2 = (1.0 - fSlow1); - double fSlow3 = double(fEntry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (0.0010000000000000009 * double(fHslider1)); - double fSlow6 = (0.0010000000000000009 * double(fHslider2)); - double fSlow7 = (0.0010000000000000009 * double(fHslider3)); - double fSlow8 = (fConst7 / fSlow3); - double fSlow9 = (1.0 / (fSlow8 + 1.0)); - double fSlow10 = (fConst6 / fSlow3); - double fSlow11 = mydsp_faustpower2_f(fSlow8); - double fSlow12 = (1.0 / (((fConst12 / fSlow3) + (3.0 * fSlow11)) + 1.0)); - double fSlow13 = (12.0 * fSlow11); - double fSlow14 = (fSlow13 + (fConst13 / fSlow3)); - double fSlow15 = (1.0 / ((fConst19 / fSlow3) + 1.0)); - double fSlow16 = (1.0 / (((fConst20 / fSlow3) + (6.4594326934833797 * fSlow11)) + 1.0)); - double fSlow17 = (25.837730773933519 * fSlow11); - double fSlow18 = (fSlow17 + (fConst21 / fSlow3)); - double fSlow19 = (fConst18 / fSlow3); + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fEntry0); + double fSlow2 = double(fHslider0); + double fSlow3 = (1.0 - fSlow0); + double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = sin(double(fHslider2)); + double fSlow7 = mydsp_faustpower2_f(fSlow6); + double fSlow8 = (1.0 - fSlow7); + double fSlow9 = pow(fSlow8, 0.5); + double fSlow10 = double(fHslider3); + double fSlow11 = sin(fSlow10); + double fSlow12 = (fConst5 * (fSlow9 * fSlow11)); + double fSlow13 = (fConst7 / fSlow2); + double fSlow14 = (fSlow13 + 1.0); + double fSlow15 = (fConst6 / (fSlow14 * fSlow2)); + double fSlow16 = (fConst7 / fSlow1); + double fSlow17 = (1.0 / (fSlow16 + 1.0)); + double fSlow18 = (((fSlow14 * fSlow0) * fSlow1) / fSlow2); + double fSlow19 = (fConst6 / fSlow1); + double fSlow20 = (1.7320508075688772 * fSlow6); + double fSlow21 = cos(fSlow10); + double fSlow22 = (fConst5 * (fSlow21 * fSlow9)); + double fSlow23 = (fConst11 * ((fSlow21 * fSlow8) * fSlow11)); + double fSlow24 = mydsp_faustpower2_f(fSlow13); + double fSlow25 = (((fConst12 / fSlow2) + (3.0 * fSlow24)) + 1.0); + double fSlow26 = (1.0 / fSlow25); + double fSlow27 = (12.0 * fSlow24); + double fSlow28 = ((fConst13 / fSlow2) + fSlow27); + double fSlow29 = mydsp_faustpower2_f(fSlow16); + double fSlow30 = (1.0 / (((fConst12 / fSlow1) + (3.0 * fSlow29)) + 1.0)); + double fSlow31 = (((fSlow25 * fSlow0) * fSlow1) / fSlow2); + double fSlow32 = (12.0 * fSlow29); + double fSlow33 = (fSlow32 + (fConst13 / fSlow1)); + double fSlow34 = (fConst15 * ((fSlow6 * fSlow9) * fSlow11)); + double fSlow35 = ((3.0 * fSlow7) + -1.0); + double fSlow36 = (1.1180339887498949 * fSlow35); + double fSlow37 = (fSlow21 * fSlow6); + double fSlow38 = (fConst15 * (fSlow37 * fSlow9)); + double fSlow39 = mydsp_faustpower2_f(fSlow21); + double fSlow40 = ((2.0 * fSlow39) + -1.0); + double fSlow41 = (fConst16 * (fSlow40 * fSlow8)); + double fSlow42 = pow(fSlow8, 1.5); + double fSlow43 = (fConst17 * ((((4.0 * fSlow39) + -1.0) * fSlow42) * fSlow11)); + double fSlow44 = ((fConst19 / fSlow2) + 1.0); + double fSlow45 = (fConst18 / (fSlow44 * fSlow2)); + double fSlow46 = (1.0 / ((fConst19 / fSlow1) + 1.0)); + double fSlow47 = (1.0 / (((fConst20 / fSlow1) + (6.4594326934833797 * fSlow29)) + 1.0)); + double fSlow48 = (((fConst20 / fSlow2) + (6.4594326934833797 * fSlow24)) + 1.0); + double fSlow49 = (((fSlow48 * fSlow0) * fSlow1) / fSlow2); + double fSlow50 = (25.837730773933519 * fSlow29); + double fSlow51 = (fSlow50 + (fConst21 / fSlow1)); + double fSlow52 = (1.0 / fSlow48); + double fSlow53 = (25.837730773933519 * fSlow24); + double fSlow54 = ((fConst21 / fSlow2) + fSlow53); + double fSlow55 = (fConst18 / fSlow1); + double fSlow56 = (fConst23 * ((fSlow37 * fSlow8) * fSlow11)); + double fSlow57 = ((16.925687506432688 * fSlow7) + -3.3851375012865379); + double fSlow58 = (fConst24 * ((fSlow57 * fSlow9) * fSlow11)); + double fSlow59 = (0.88191710368819687 * (((2.5 * fSlow35) + -2.0) * fSlow6)); + double fSlow60 = (fConst24 * ((fSlow57 * fSlow21) * fSlow9)); + double fSlow61 = (fConst25 * ((fSlow40 * fSlow6) * fSlow8)); + double fSlow62 = (fConst17 * ((((2.0 * fSlow40) + -1.0) * fSlow21) * fSlow42)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); - double fTemp0 = double(input0[i]); - double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); - double fTemp2 = sin(fRec4[0]); - double fTemp3 = mydsp_faustpower2_f(fTemp2); - double fTemp4 = (1.0 - fTemp3); - double fTemp5 = pow(fTemp4, 0.5); - fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); - double fTemp6 = sin(fRec5[0]); - double fTemp7 = (fTemp5 * fTemp6); - double fTemp8 = (fConst7 / fRec2[0]); - double fTemp9 = (fTemp8 + 1.0); - fRec8[0] = (fRec8[1] + fRec7[1]); - fRec7[0] = (fSlow9 * ((fSlow4 * (((fRec1[0] * fTemp9) * fTemp0) / fRec2[0])) - (fSlow10 * fRec8[0]))); - fRec6[0] = (fRec7[0] + fRec6[1]); - double fTemp10 = (fSlow2 * (fRec1[0] * fTemp0)); - double fTemp11 = ((fConst6 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp9))) + (fRec7[0] + fTemp10)); - double fTemp12 = (fConst5 * (fTemp7 * fTemp11)); - fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - output1[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (1.7320508075688772 * (fTemp2 * fTemp11)); - fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph2 = FAUSTFLOAT(fRec9[0]); - output2[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = cos(fRec5[0]); - double fTemp15 = (fTemp5 * fTemp14); - double fTemp16 = (fConst5 * (fTemp15 * fTemp11)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - output3[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = mydsp_faustpower2_f(fTemp8); - double fTemp18 = (((fConst12 / fRec2[0]) + (3.0 * fTemp17)) + 1.0); - fRec14[0] = (fRec14[1] + fRec13[1]); - fRec15[0] = (fRec15[1] + fRec14[1]); - fRec13[0] = (fSlow12 * ((fSlow4 * (((fRec1[0] * fTemp18) * fTemp0) / fRec2[0])) - ((fSlow14 * fRec14[0]) + (fSlow13 * fRec15[0])))); - fRec12[0] = (fRec13[0] + fRec12[1]); - double fTemp19 = (fRec12[0] - fRec13[0]); - fVec0[0] = fTemp19; - fRec16[0] = (fRec16[1] + fVec0[1]); - double fTemp20 = ((((fTemp19 * ((fConst13 / fRec2[0]) + (12.0 * fTemp17))) + (12.0 * (fRec16[0] * fTemp17))) / fTemp18) + (fRec13[0] + fTemp10)); - double fTemp21 = (fConst11 * (((fTemp4 * fTemp6) * fTemp14) * fTemp20)); - fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); - fVbargraph4 = FAUSTFLOAT(fRec11[0]); - output4[i] = FAUSTFLOAT(fTemp21); - double fTemp22 = (fTemp2 * fTemp5); - double fTemp23 = (fConst15 * ((fTemp22 * fTemp6) * fTemp20)); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp23)))))); - fVbargraph5 = FAUSTFLOAT(fRec17[0]); - output5[i] = FAUSTFLOAT(fTemp23); - double fTemp24 = ((3.0 * fTemp3) + -1.0); - double fTemp25 = (1.1180339887498949 * (fTemp20 * fTemp24)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph6 = FAUSTFLOAT(fRec18[0]); - output6[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = (fConst15 * ((fTemp22 * fTemp14) * fTemp20)); - fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); - fVbargraph7 = FAUSTFLOAT(fRec19[0]); - output7[i] = FAUSTFLOAT(fTemp26); - double fTemp27 = mydsp_faustpower2_f(fTemp14); - double fTemp28 = ((2.0 * fTemp27) + -1.0); - double fTemp29 = (fConst16 * ((fTemp4 * fTemp20) * fTemp28)); - fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph8 = FAUSTFLOAT(fRec20[0]); - output8[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = pow(fTemp4, 1.5); - double fTemp31 = (((fConst20 / fRec2[0]) + (6.4594326934833797 * fTemp17)) + 1.0); - fRec25[0] = (fRec25[1] + fRec24[1]); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec24[0] = (fSlow16 * ((fSlow4 * (((fRec1[0] * fTemp31) * fTemp0) / fRec2[0])) - ((fSlow18 * fRec25[0]) + (fSlow17 * fRec26[0])))); - fRec27[0] = (fRec24[0] + fRec27[1]); - double fTemp32 = (fRec27[0] - fRec24[0]); - fVec1[0] = fTemp32; - fRec28[0] = (fRec28[1] + fVec1[1]); - double fTemp33 = ((fConst19 / fRec2[0]) + 1.0); - fRec29[0] = (fRec29[1] + fRec23[1]); - fRec23[0] = (fSlow15 * (((fRec24[0] + (((fTemp32 * ((fConst21 / fRec2[0]) + (25.837730773933519 * fTemp17))) + (25.837730773933519 * (fRec28[0] * fTemp17))) / fTemp31)) * fTemp33) - (fSlow19 * fRec29[0]))); - fRec22[0] = (fRec23[0] + fRec22[1]); - double fTemp34 = ((fConst18 * ((fRec22[0] - fRec23[0]) / (fRec2[0] * fTemp33))) + (fRec23[0] + fTemp10)); - double fTemp35 = (fConst17 * (((fTemp6 * fTemp30) * fTemp34) * ((4.0 * fTemp27) + -1.0))); - fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp35)))))); - fVbargraph9 = FAUSTFLOAT(fRec21[0]); - output9[i] = FAUSTFLOAT(fTemp35); - double fTemp36 = (fTemp2 * fTemp4); - double fTemp37 = (fConst23 * (((fTemp36 * fTemp6) * fTemp14) * fTemp34)); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp37)))))); - fVbargraph10 = FAUSTFLOAT(fRec30[0]); - output10[i] = FAUSTFLOAT(fTemp37); - double fTemp38 = ((16.925687506432688 * fTemp3) + -3.3851375012865379); - double fTemp39 = (fConst24 * ((fTemp7 * fTemp34) * fTemp38)); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph11 = FAUSTFLOAT(fRec31[0]); - output11[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (0.88191710368819687 * ((fTemp2 * fTemp34) * ((2.5 * fTemp24) + -2.0))); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); - fVbargraph12 = FAUSTFLOAT(fRec32[0]); - output12[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (fConst24 * ((fTemp15 * fTemp34) * fTemp38)); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph13 = FAUSTFLOAT(fRec33[0]); - output13[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = (fConst25 * ((fTemp36 * fTemp28) * fTemp34)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); - fVbargraph14 = FAUSTFLOAT(fRec34[0]); - output14[i] = FAUSTFLOAT(fTemp42); - double fTemp43 = (fConst17 * (((fTemp14 * fTemp30) * fTemp34) * ((2.0 * fTemp28) + -1.0))); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph15 = FAUSTFLOAT(fRec35[0]); - output15[i] = FAUSTFLOAT(fTemp43); + fRec5[0] = (fRec5[1] + fRec4[1]); + fRec4[0] = (fSlow17 * ((fSlow18 * fTemp0) - (fSlow19 * fRec5[0]))); + fRec3[0] = (fRec4[0] + fRec3[1]); + double fTemp2 = (fSlow3 * fTemp0); + double fTemp3 = ((fSlow15 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); + double fTemp4 = (fSlow12 * fTemp3); + fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (fSlow20 * fTemp3); + fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (fSlow22 * fTemp3); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp6); + fRec11[0] = (fRec11[1] + fRec10[1]); + fRec12[0] = (fRec12[1] + fRec11[1]); + fRec10[0] = (fSlow30 * ((fSlow31 * fTemp0) - ((fSlow33 * fRec11[0]) + (fSlow32 * fRec12[0])))); + fRec9[0] = (fRec10[0] + fRec9[1]); + double fTemp7 = (fRec9[0] - fRec10[0]); + fVec0[0] = fTemp7; + fRec13[0] = (fRec13[1] + fVec0[1]); + double fTemp8 = ((fSlow26 * ((fSlow28 * fTemp7) + (fSlow27 * fRec13[0]))) + (fRec10[0] + fTemp2)); + double fTemp9 = (fSlow23 * fTemp8); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (fSlow34 * fTemp8); + fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph5 = FAUSTFLOAT(fRec14[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (fSlow36 * fTemp8); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph6 = FAUSTFLOAT(fRec15[0]); + output6[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (fSlow38 * fTemp8); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph7 = FAUSTFLOAT(fRec16[0]); + output7[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (fSlow41 * fTemp8); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph8 = FAUSTFLOAT(fRec17[0]); + output8[i] = FAUSTFLOAT(fTemp13); + fRec22[0] = (fRec22[1] + fRec21[1]); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec21[0] = (fSlow47 * ((fSlow49 * fTemp0) - ((fSlow51 * fRec22[0]) + (fSlow50 * fRec23[0])))); + fRec24[0] = (fRec21[0] + fRec24[1]); + double fTemp14 = (fRec24[0] - fRec21[0]); + fVec1[0] = fTemp14; + fRec25[0] = (fRec25[1] + fVec1[1]); + fRec26[0] = (fRec26[1] + fRec20[1]); + fRec20[0] = (fSlow46 * ((fSlow44 * (fRec21[0] + (fSlow52 * ((fSlow54 * fTemp14) + (fSlow53 * fRec25[0]))))) - (fSlow55 * fRec26[0]))); + fRec19[0] = (fRec20[0] + fRec19[1]); + double fTemp15 = ((fSlow45 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); + double fTemp16 = (fSlow43 * fTemp15); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph9 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (fSlow56 * fTemp15); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph10 = FAUSTFLOAT(fRec27[0]); + output10[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (fSlow58 * fTemp15); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph11 = FAUSTFLOAT(fRec28[0]); + output11[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (fSlow59 * fTemp15); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph12 = FAUSTFLOAT(fRec29[0]); + output12[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (fSlow60 * fTemp15); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph13 = FAUSTFLOAT(fRec30[0]); + output13[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (fSlow61 * fTemp15); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph14 = FAUSTFLOAT(fRec31[0]); + output14[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (fSlow62 * fTemp15); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph15 = FAUSTFLOAT(fRec32[0]); + output15[i] = FAUSTFLOAT(fTemp22); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; - fRec8[1] = fRec8[0]; - fRec7[1] = fRec7[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; - fRec9[1] = fRec9[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; + fRec9[1] = fRec9[0]; + fVec0[1] = fVec0[0]; + fRec13[1] = fRec13[0]; + fRec8[1] = fRec8[0]; fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; - fRec13[1] = fRec13[0]; - fRec12[1] = fRec12[0]; - fVec0[1] = fVec0[0]; fRec16[1] = fRec16[0]; - fRec11[1] = fRec11[0]; fRec17[1] = fRec17[0]; - fRec18[1] = fRec18[0]; - fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec21[1] = fRec21[0]; + fRec24[1] = fRec24[0]; + fVec1[1] = fVec1[0]; fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; - fRec24[1] = fRec24[0]; + fRec20[1] = fRec20[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; fRec27[1] = fRec27[0]; - fVec1[1] = fVec1[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; - fRec23[1] = fRec23[0]; - fRec22[1] = fRec22[0]; - fRec21[1] = fRec21[0]; fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; - fRec33[1] = fRec33[0]; - fRec34[1] = fRec34[0]; - fRec35[1] = fRec35[0]; } diff --git a/source/HOAUGens/HOAEncoder4.cpp b/source/HOAUGens/HOAEncoder4.cpp index 328cc33b7d..ebcaed7d74 100644 --- a/source/HOAUGens/HOAEncoder4.cpp +++ b/source/HOAUGens/HOAEncoder4.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder4" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -639,12 +639,11 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; - FAUSTFLOAT fHslider0; - double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; + FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec2[2]; + double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; @@ -652,19 +651,17 @@ class mydsp : public dsp { double fConst4; double fConst5; FAUSTFLOAT fHslider2; - double fRec4[2]; FAUSTFLOAT fHslider3; - double fRec5[2]; double fConst6; double fConst7; - double fRec8[2]; - double fRec7[2]; - double fRec6[2]; + double fRec5[2]; + double fRec4[2]; double fRec3[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec9[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph2; - double fRec10[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph3; double fConst8; double fConst9; @@ -672,25 +669,25 @@ class mydsp : public dsp { double fConst11; double fConst12; double fConst13; - double fRec14[2]; - double fRec15[2]; - double fRec13[2]; + double fRec11[2]; double fRec12[2]; + double fRec10[2]; + double fRec9[2]; double fVec0[2]; - double fRec16[2]; - double fRec11[2]; + double fRec13[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph4; double fConst14; double fConst15; double fConst16; - double fRec17[2]; + double fRec14[2]; FAUSTFLOAT fVbargraph5; - double fRec18[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph6; - double fRec19[2]; + double fRec16[2]; FAUSTFLOAT fVbargraph7; double fConst17; - double fRec20[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph8; double fConst18; double fConst19; @@ -699,73 +696,75 @@ class mydsp : public dsp { double fConst22; double fConst23; double fConst24; - double fRec25[2]; - double fRec26[2]; - double fRec24[2]; - double fRec27[2]; - double fVec1[2]; - double fRec28[2]; - double fRec29[2]; - double fRec23[2]; double fRec22[2]; + double fRec23[2]; double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph9; double fConst25; double fConst26; double fConst27; - double fRec30[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph10; double fConst28; - double fRec31[2]; + double fRec28[2]; FAUSTFLOAT fVbargraph11; - double fRec32[2]; + double fRec29[2]; FAUSTFLOAT fVbargraph12; - double fRec33[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph13; double fConst29; - double fRec34[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph14; - double fRec35[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph15; double fConst30; double fConst31; double fConst32; double fConst33; + double fConst34; + double fConst35; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fVec2[2]; double fRec40[2]; double fRec41[2]; - double fRec39[2]; double fRec42[2]; - double fVec2[2]; - double fRec43[2]; - double fConst34; - double fRec44[2]; - double fRec45[2]; - double fRec38[2]; - double fRec37[2]; + double fRec35[2]; + double fRec34[2]; double fVec3[2]; - double fRec46[2]; - double fRec36[2]; + double fRec43[2]; + double fRec33[2]; FAUSTFLOAT fVbargraph16; - double fConst35; - double fRec47[2]; - FAUSTFLOAT fVbargraph17; double fConst36; + double fRec44[2]; + FAUSTFLOAT fVbargraph17; double fConst37; - double fRec48[2]; - FAUSTFLOAT fVbargraph18; double fConst38; - double fRec49[2]; + double fRec45[2]; + FAUSTFLOAT fVbargraph18; + double fConst39; + double fRec46[2]; FAUSTFLOAT fVbargraph19; - double fRec50[2]; + double fRec47[2]; FAUSTFLOAT fVbargraph20; - double fRec51[2]; + double fRec48[2]; FAUSTFLOAT fVbargraph21; - double fConst39; - double fRec52[2]; + double fConst40; + double fRec49[2]; FAUSTFLOAT fVbargraph22; - double fRec53[2]; + double fRec50[2]; FAUSTFLOAT fVbargraph23; - double fRec54[2]; + double fConst41; + double fRec51[2]; FAUSTFLOAT fVbargraph24; public: @@ -775,6 +774,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("filename", "HOAEncoder4"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -975,24 +975,26 @@ class mydsp : public dsp { fConst27 = (31.915382432114615 * fConst26); fConst28 = (0.70710678118654757 * (sqrt((7.0 * (fConst3 / fConst8))) * fConst4)); fConst29 = (15.957691216057308 * fConst26); - fConst30 = (12.766152972845846 * (sqrt((9.0 * (fConst2 / double(tgamma(9.0))))) * double(tgamma(4.5)))); - fConst31 = (984.71160495892411 / fConst0); - fConst32 = (715.28839504107589 / fConst0); - fConst33 = (1430.5767900821518 / fConst0); - fConst34 = (1969.4232099178482 / fConst0); - fConst35 = (44.681535404960464 * (sqrt((9.0 * (fConst14 / double(tgamma(8.0))))) * fConst19)); - fConst36 = (sqrt((9.0 * (fConst3 / fConst18))) * fConst9); - fConst37 = (1.4142135623730951 * fConst36); - fConst38 = (0.47140452079103168 * (sqrt((9.0 * (fConst15 / fConst25))) * fConst4)); - fConst39 = (0.70710678118654757 * fConst36); + fConst30 = (sqrt((9.0 * (fConst2 / double(tgamma(9.0))))) * double(tgamma(4.5))); + fConst31 = (25.532305945691693 * fConst30); + fConst32 = (984.71160495892411 / fConst0); + fConst33 = (1969.4232099178482 / fConst0); + fConst34 = (715.28839504107589 / fConst0); + fConst35 = (1430.5767900821518 / fConst0); + fConst36 = (44.681535404960464 * (sqrt((9.0 * (fConst14 / double(tgamma(8.0))))) * fConst19)); + fConst37 = (sqrt((9.0 * (fConst3 / fConst18))) * fConst9); + fConst38 = (1.4142135623730951 * fConst37); + fConst39 = (0.47140452079103168 * (sqrt((9.0 * (fConst15 / fConst25))) * fConst4)); + fConst40 = (0.70710678118654757 * fConst37); + fConst41 = (12.766152972845846 * fConst30); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider1 = FAUSTFLOAT(2.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -1004,11 +1006,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; + fRec0[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0; + fRec5[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -1016,27 +1018,27 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec5[l4] = 0.0; + fRec3[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec8[l5] = 0.0; + fRec2[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec7[l6] = 0.0; + fRec6[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec6[l7] = 0.0; + fRec7[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec3[l8] = 0.0; + fRec11[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec9[l9] = 0.0; + fRec12[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -1044,11 +1046,11 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec14[l11] = 0.0; + fRec9[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec15[l12] = 0.0; + fVec0[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -1056,19 +1058,19 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec12[l14] = 0.0; + fRec8[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fVec0[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0; + fRec15[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec11[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -1076,55 +1078,55 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec18[l19] = 0.0; + fRec22[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec19[l20] = 0.0; + fRec23[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec20[l21] = 0.0; + fRec21[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec25[l22] = 0.0; + fRec24[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec26[l23] = 0.0; + fVec1[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec24[l24] = 0.0; + fRec25[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec27[l25] = 0.0; + fRec26[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fVec1[l26] = 0.0; + fRec20[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec19[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec29[l28] = 0.0; + fRec18[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec23[l29] = 0.0; + fRec27[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec22[l30] = 0.0; + fRec28[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec21[l31] = 0.0; + fRec29[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { @@ -1140,67 +1142,67 @@ class mydsp : public dsp { } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec33[l35] = 0.0; + fRec37[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec34[l36] = 0.0; + fRec38[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec35[l37] = 0.0; + fRec36[l37] = 0.0; } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec40[l38] = 0.0; + fRec39[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec41[l39] = 0.0; + fVec2[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - fRec39[l40] = 0.0; + fRec40[l40] = 0.0; } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec42[l41] = 0.0; + fRec41[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fVec2[l42] = 0.0; + fRec42[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec43[l43] = 0.0; + fRec35[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec44[l44] = 0.0; + fRec34[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fRec45[l45] = 0.0; + fVec3[l45] = 0.0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec38[l46] = 0.0; + fRec43[l46] = 0.0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec37[l47] = 0.0; + fRec33[l47] = 0.0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fVec3[l48] = 0.0; + fRec44[l48] = 0.0; } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec46[l49] = 0.0; + fRec45[l49] = 0.0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - fRec36[l50] = 0.0; + fRec46[l50] = 0.0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { @@ -1223,18 +1225,6 @@ class mydsp : public dsp { fRec51[l55] = 0.0; } - for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec52[l56] = 0.0; - - } - for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec53[l57] = 0.0; - - } - for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec54[l58] = 0.0; - - } } @@ -1260,14 +1250,14 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder4"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider0, "0+1", ""); - ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+2", ""); - ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); ui_interface->declare(&fHslider3, "0+3", ""); ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); @@ -1289,111 +1279,111 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x355bd80", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bddfb30", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3575b80", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bdf60c0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x357b4b0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bdfbbd0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35816a0", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be01d90", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3599290", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be1a0f0", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35a15b0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be221b0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35a7820", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be28600", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35ad530", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be2e6d0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35b4760", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be35ae0", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35d31a0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be55110", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35daea0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be5cbd0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35e2400", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be644f0", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35e89b0", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be6ac80", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35ee670", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be70d00", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35f4ac0", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be77510", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x35fb1b0", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57be7dff0", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3620130", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bea3e10", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36278b0", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57beab760", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x362f200", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57beb3640", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3636750", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bebb130", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x363ce30", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bec19f0", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3642cb0", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bec7e10", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x36492d0", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bece610", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x364f6d0", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bed4a10", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3656090", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x55f57bedbc60", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1428,268 +1418,298 @@ class mydsp : public dsp { FAUSTFLOAT* output22 = outputs[22]; FAUSTFLOAT* output23 = outputs[23]; FAUSTFLOAT* output24 = outputs[24]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); - double fSlow1 = double(fCheckbox0); - double fSlow2 = (1.0 - fSlow1); - double fSlow3 = double(fEntry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (0.0010000000000000009 * double(fHslider1)); - double fSlow6 = (0.0010000000000000009 * double(fHslider2)); - double fSlow7 = (0.0010000000000000009 * double(fHslider3)); - double fSlow8 = (fConst7 / fSlow3); - double fSlow9 = (1.0 / (fSlow8 + 1.0)); - double fSlow10 = (fConst6 / fSlow3); - double fSlow11 = mydsp_faustpower2_f(fSlow8); - double fSlow12 = (1.0 / (((fConst12 / fSlow3) + (3.0 * fSlow11)) + 1.0)); - double fSlow13 = (12.0 * fSlow11); - double fSlow14 = (fSlow13 + (fConst13 / fSlow3)); - double fSlow15 = (1.0 / ((fConst22 / fSlow3) + 1.0)); - double fSlow16 = (1.0 / (((fConst23 / fSlow3) + (6.4594326934833797 * fSlow11)) + 1.0)); - double fSlow17 = (25.837730773933519 * fSlow11); - double fSlow18 = (fSlow17 + (fConst24 / fSlow3)); - double fSlow19 = (fConst21 / fSlow3); - double fSlow20 = (1.0 / (((fConst31 / fSlow3) + (9.1401308902779004 * fSlow11)) + 1.0)); - double fSlow21 = (1.0 / (((fConst32 / fSlow3) + (11.4878004768713 * fSlow11)) + 1.0)); - double fSlow22 = (45.951201907485199 * fSlow11); - double fSlow23 = (fSlow22 + (fConst33 / fSlow3)); - double fSlow24 = (36.560523561111602 * fSlow11); - double fSlow25 = (fSlow24 + (fConst34 / fSlow3)); + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fEntry0); + double fSlow2 = double(fHslider0); + double fSlow3 = (1.0 - fSlow0); + double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = sin(double(fHslider2)); + double fSlow7 = mydsp_faustpower2_f(fSlow6); + double fSlow8 = (1.0 - fSlow7); + double fSlow9 = pow(fSlow8, 0.5); + double fSlow10 = double(fHslider3); + double fSlow11 = sin(fSlow10); + double fSlow12 = (fConst5 * (fSlow9 * fSlow11)); + double fSlow13 = (fConst7 / fSlow2); + double fSlow14 = (fSlow13 + 1.0); + double fSlow15 = (fConst6 / (fSlow14 * fSlow2)); + double fSlow16 = (fConst7 / fSlow1); + double fSlow17 = (1.0 / (fSlow16 + 1.0)); + double fSlow18 = (((fSlow14 * fSlow0) * fSlow1) / fSlow2); + double fSlow19 = (fConst6 / fSlow1); + double fSlow20 = (1.7320508075688772 * fSlow6); + double fSlow21 = cos(fSlow10); + double fSlow22 = (fConst5 * (fSlow21 * fSlow9)); + double fSlow23 = (fConst11 * ((fSlow21 * fSlow8) * fSlow11)); + double fSlow24 = mydsp_faustpower2_f(fSlow13); + double fSlow25 = (((fConst12 / fSlow2) + (3.0 * fSlow24)) + 1.0); + double fSlow26 = (1.0 / fSlow25); + double fSlow27 = (12.0 * fSlow24); + double fSlow28 = ((fConst13 / fSlow2) + fSlow27); + double fSlow29 = mydsp_faustpower2_f(fSlow16); + double fSlow30 = (1.0 / (((fConst12 / fSlow1) + (3.0 * fSlow29)) + 1.0)); + double fSlow31 = (((fSlow25 * fSlow0) * fSlow1) / fSlow2); + double fSlow32 = (12.0 * fSlow29); + double fSlow33 = (fSlow32 + (fConst13 / fSlow1)); + double fSlow34 = (fConst16 * ((fSlow6 * fSlow9) * fSlow11)); + double fSlow35 = ((3.0 * fSlow7) + -1.0); + double fSlow36 = (1.1180339887498949 * fSlow35); + double fSlow37 = (fSlow21 * fSlow6); + double fSlow38 = (fConst16 * (fSlow37 * fSlow9)); + double fSlow39 = mydsp_faustpower2_f(fSlow21); + double fSlow40 = ((2.0 * fSlow39) + -1.0); + double fSlow41 = (fConst17 * (fSlow40 * fSlow8)); + double fSlow42 = ((4.0 * fSlow39) + -1.0); + double fSlow43 = pow(fSlow8, 1.5); + double fSlow44 = (fConst20 * ((fSlow42 * fSlow43) * fSlow11)); + double fSlow45 = ((fConst22 / fSlow2) + 1.0); + double fSlow46 = (fConst21 / (fSlow45 * fSlow2)); + double fSlow47 = (1.0 / ((fConst22 / fSlow1) + 1.0)); + double fSlow48 = (1.0 / (((fConst23 / fSlow1) + (6.4594326934833797 * fSlow29)) + 1.0)); + double fSlow49 = (((fConst23 / fSlow2) + (6.4594326934833797 * fSlow24)) + 1.0); + double fSlow50 = (((fSlow49 * fSlow0) * fSlow1) / fSlow2); + double fSlow51 = (25.837730773933519 * fSlow29); + double fSlow52 = (fSlow51 + (fConst24 / fSlow1)); + double fSlow53 = (1.0 / fSlow49); + double fSlow54 = (25.837730773933519 * fSlow24); + double fSlow55 = ((fConst24 / fSlow2) + fSlow54); + double fSlow56 = (fConst21 / fSlow1); + double fSlow57 = (fConst27 * ((fSlow37 * fSlow8) * fSlow11)); + double fSlow58 = ((16.925687506432688 * fSlow7) + -3.3851375012865379); + double fSlow59 = (fConst28 * ((fSlow58 * fSlow9) * fSlow11)); + double fSlow60 = ((2.5 * fSlow35) + -2.0); + double fSlow61 = (0.88191710368819687 * (fSlow60 * fSlow6)); + double fSlow62 = (fConst28 * ((fSlow58 * fSlow21) * fSlow9)); + double fSlow63 = (fConst29 * ((fSlow40 * fSlow6) * fSlow8)); + double fSlow64 = ((2.0 * fSlow40) + -1.0); + double fSlow65 = (fSlow64 * fSlow21); + double fSlow66 = (fConst20 * (fSlow65 * fSlow43)); + double fSlow67 = mydsp_faustpower2_f(fSlow8); + double fSlow68 = (fConst31 * ((((fSlow42 + -1.0) * fSlow21) * fSlow67) * fSlow11)); + double fSlow69 = (((fConst32 / fSlow2) + (9.1401308902779004 * fSlow24)) + 1.0); + double fSlow70 = (1.0 / fSlow69); + double fSlow71 = (36.560523561111602 * fSlow24); + double fSlow72 = ((fConst33 / fSlow2) + fSlow71); + double fSlow73 = (1.0 / (((fConst32 / fSlow1) + (9.1401308902779004 * fSlow29)) + 1.0)); + double fSlow74 = (1.0 / (((fConst34 / fSlow1) + (11.4878004768713 * fSlow29)) + 1.0)); + double fSlow75 = (((fConst34 / fSlow2) + (11.4878004768713 * fSlow24)) + 1.0); + double fSlow76 = (((fSlow75 * fSlow0) * fSlow1) / fSlow2); + double fSlow77 = (45.951201907485199 * fSlow29); + double fSlow78 = (fSlow77 + (fConst35 / fSlow1)); + double fSlow79 = (1.0 / fSlow75); + double fSlow80 = (45.951201907485199 * fSlow24); + double fSlow81 = ((fConst35 / fSlow2) + fSlow80); + double fSlow82 = (36.560523561111602 * fSlow29); + double fSlow83 = (fSlow82 + (fConst33 / fSlow1)); + double fSlow84 = (fConst36 * (((fSlow42 * fSlow6) * fSlow43) * fSlow11)); + double fSlow85 = ((78.986541696685876 * fSlow7) + -11.283791670955125); + double fSlow86 = (fConst38 * (((fSlow85 * fSlow21) * fSlow8) * fSlow11)); + double fSlow87 = ((3.5 * fSlow58) + -13.540550005146152); + double fSlow88 = (fConst39 * (((fSlow87 * fSlow6) * fSlow9) * fSlow11)); + double fSlow89 = (0.75 * ((2.333333333333333 * (fSlow60 * fSlow7)) - (1.5 * fSlow35))); + double fSlow90 = (fConst39 * (((fSlow87 * fSlow21) * fSlow6) * fSlow9)); + double fSlow91 = (fConst40 * ((fSlow40 * fSlow85) * fSlow8)); + double fSlow92 = (fConst36 * ((fSlow65 * fSlow6) * fSlow43)); + double fSlow93 = (fConst41 * ((1.0 - (2.0 * ((1.0 - fSlow64) * fSlow39))) * fSlow67)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); - double fTemp0 = double(input0[i]); - double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); - double fTemp2 = sin(fRec4[0]); - double fTemp3 = mydsp_faustpower2_f(fTemp2); - double fTemp4 = (1.0 - fTemp3); - double fTemp5 = pow(fTemp4, 0.5); - fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); - double fTemp6 = sin(fRec5[0]); - double fTemp7 = (fTemp5 * fTemp6); - double fTemp8 = (fConst7 / fRec2[0]); - double fTemp9 = (fTemp8 + 1.0); - fRec8[0] = (fRec8[1] + fRec7[1]); - fRec7[0] = (fSlow9 * ((fSlow4 * (((fRec1[0] * fTemp9) * fTemp0) / fRec2[0])) - (fSlow10 * fRec8[0]))); - fRec6[0] = (fRec7[0] + fRec6[1]); - double fTemp10 = (fSlow2 * (fRec1[0] * fTemp0)); - double fTemp11 = ((fConst6 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp9))) + (fRec7[0] + fTemp10)); - double fTemp12 = (fConst5 * (fTemp7 * fTemp11)); - fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - output1[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (1.7320508075688772 * (fTemp2 * fTemp11)); - fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph2 = FAUSTFLOAT(fRec9[0]); - output2[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = cos(fRec5[0]); - double fTemp15 = (fTemp5 * fTemp14); - double fTemp16 = (fConst5 * (fTemp15 * fTemp11)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - output3[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = ((fTemp4 * fTemp6) * fTemp14); - double fTemp18 = mydsp_faustpower2_f(fTemp8); - double fTemp19 = (((fConst12 / fRec2[0]) + (3.0 * fTemp18)) + 1.0); - fRec14[0] = (fRec14[1] + fRec13[1]); - fRec15[0] = (fRec15[1] + fRec14[1]); - fRec13[0] = (fSlow12 * ((fSlow4 * (((fRec1[0] * fTemp19) * fTemp0) / fRec2[0])) - ((fSlow14 * fRec14[0]) + (fSlow13 * fRec15[0])))); - fRec12[0] = (fRec13[0] + fRec12[1]); - double fTemp20 = (fRec12[0] - fRec13[0]); - fVec0[0] = fTemp20; - fRec16[0] = (fRec16[1] + fVec0[1]); - double fTemp21 = ((((fTemp20 * ((fConst13 / fRec2[0]) + (12.0 * fTemp18))) + (12.0 * (fRec16[0] * fTemp18))) / fTemp19) + (fRec13[0] + fTemp10)); - double fTemp22 = (fConst11 * (fTemp17 * fTemp21)); - fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph4 = FAUSTFLOAT(fRec11[0]); - output4[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (fTemp2 * fTemp5); - double fTemp24 = (fTemp23 * fTemp6); - double fTemp25 = (fConst16 * (fTemp24 * fTemp21)); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph5 = FAUSTFLOAT(fRec17[0]); - output5[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = ((3.0 * fTemp3) + -1.0); - double fTemp27 = (1.1180339887498949 * (fTemp21 * fTemp26)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph6 = FAUSTFLOAT(fRec18[0]); - output6[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (fTemp23 * fTemp14); - double fTemp29 = (fConst16 * (fTemp28 * fTemp21)); - fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph7 = FAUSTFLOAT(fRec19[0]); - output7[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = mydsp_faustpower2_f(fTemp14); - double fTemp31 = ((2.0 * fTemp30) + -1.0); - double fTemp32 = (fConst17 * ((fTemp4 * fTemp21) * fTemp31)); - fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); - fVbargraph8 = FAUSTFLOAT(fRec20[0]); - output8[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = pow(fTemp4, 1.5); - double fTemp34 = (((fConst23 / fRec2[0]) + (6.4594326934833797 * fTemp18)) + 1.0); - fRec25[0] = (fRec25[1] + fRec24[1]); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec24[0] = (fSlow16 * ((fSlow4 * (((fRec1[0] * fTemp34) * fTemp0) / fRec2[0])) - ((fSlow18 * fRec25[0]) + (fSlow17 * fRec26[0])))); - fRec27[0] = (fRec24[0] + fRec27[1]); - double fTemp35 = (fRec27[0] - fRec24[0]); - fVec1[0] = fTemp35; - fRec28[0] = (fRec28[1] + fVec1[1]); - double fTemp36 = ((fConst22 / fRec2[0]) + 1.0); - fRec29[0] = (fRec29[1] + fRec23[1]); - fRec23[0] = (fSlow15 * (((fRec24[0] + (((fTemp35 * ((fConst24 / fRec2[0]) + (25.837730773933519 * fTemp18))) + (25.837730773933519 * (fRec28[0] * fTemp18))) / fTemp34)) * fTemp36) - (fSlow19 * fRec29[0]))); - fRec22[0] = (fRec23[0] + fRec22[1]); - double fTemp37 = ((fConst21 * ((fRec22[0] - fRec23[0]) / (fRec2[0] * fTemp36))) + (fRec23[0] + fTemp10)); - double fTemp38 = ((4.0 * fTemp30) + -1.0); - double fTemp39 = (fConst20 * (((fTemp6 * fTemp33) * fTemp37) * fTemp38)); - fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); - fVbargraph9 = FAUSTFLOAT(fRec21[0]); - output9[i] = FAUSTFLOAT(fTemp39); - double fTemp40 = (fTemp2 * fTemp4); - double fTemp41 = (fConst27 * (((fTemp40 * fTemp6) * fTemp14) * fTemp37)); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); - fVbargraph10 = FAUSTFLOAT(fRec30[0]); - output10[i] = FAUSTFLOAT(fTemp41); - double fTemp42 = ((16.925687506432688 * fTemp3) + -3.3851375012865379); - double fTemp43 = (fConst28 * ((fTemp7 * fTemp37) * fTemp42)); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph11 = FAUSTFLOAT(fRec31[0]); - output11[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = ((2.5 * fTemp26) + -2.0); - double fTemp45 = (0.88191710368819687 * ((fTemp2 * fTemp37) * fTemp44)); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); - fVbargraph12 = FAUSTFLOAT(fRec32[0]); - output12[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = (fConst28 * ((fTemp15 * fTemp37) * fTemp42)); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); - fVbargraph13 = FAUSTFLOAT(fRec33[0]); - output13[i] = FAUSTFLOAT(fTemp46); - double fTemp47 = (fConst29 * ((fTemp40 * fTemp31) * fTemp37)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); - fVbargraph14 = FAUSTFLOAT(fRec34[0]); - output14[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = ((2.0 * fTemp31) + -1.0); - double fTemp49 = (fConst20 * (((fTemp14 * fTemp33) * fTemp37) * fTemp48)); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp49)))))); - fVbargraph15 = FAUSTFLOAT(fRec35[0]); - output15[i] = FAUSTFLOAT(fTemp49); - double fTemp50 = mydsp_faustpower2_f(fTemp4); - double fTemp51 = (((fConst32 / fRec2[0]) + (11.4878004768713 * fTemp18)) + 1.0); - fRec40[0] = (fRec40[1] + fRec39[1]); - fRec41[0] = (fRec41[1] + fRec40[1]); - fRec39[0] = (fSlow21 * ((fSlow4 * (((fRec1[0] * fTemp51) * fTemp0) / fRec2[0])) - ((fSlow23 * fRec40[0]) + (fSlow22 * fRec41[0])))); - fRec42[0] = (fRec39[0] + fRec42[1]); - double fTemp52 = (fRec42[0] - fRec39[0]); - fVec2[0] = fTemp52; - fRec43[0] = (fRec43[1] + fVec2[1]); - double fTemp53 = (((fConst31 / fRec2[0]) + (9.1401308902779004 * fTemp18)) + 1.0); - fRec44[0] = (fRec44[1] + fRec38[1]); - fRec45[0] = (fRec45[1] + fRec44[1]); - fRec38[0] = (fSlow20 * (((fRec39[0] + (((fTemp52 * ((fConst33 / fRec2[0]) + (45.951201907485199 * fTemp18))) + (45.951201907485199 * (fRec43[0] * fTemp18))) / fTemp51)) * fTemp53) - ((fSlow25 * fRec44[0]) + (fSlow24 * fRec45[0])))); - fRec37[0] = (fRec38[0] + fRec37[1]); - double fTemp54 = (fRec37[0] - fRec38[0]); - fVec3[0] = fTemp54; - fRec46[0] = (fRec46[1] + fVec3[1]); - double fTemp55 = ((((fTemp54 * ((fConst34 / fRec2[0]) + (36.560523561111602 * fTemp18))) + (36.560523561111602 * (fRec46[0] * fTemp18))) / fTemp53) + (fRec38[0] + fTemp10)); - double fTemp56 = (fConst30 * (((fTemp50 * fTemp6) * fTemp55) * (0.0 - (2.0 * (fTemp14 * (1.0 - fTemp38)))))); - fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp56)))))); - fVbargraph16 = FAUSTFLOAT(fRec36[0]); - output16[i] = FAUSTFLOAT(fTemp56); - double fTemp57 = (fConst35 * ((((fTemp2 * fTemp6) * fTemp33) * fTemp38) * fTemp55)); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp57)))))); - fVbargraph17 = FAUSTFLOAT(fRec47[0]); - output17[i] = FAUSTFLOAT(fTemp57); - double fTemp58 = ((78.986541696685876 * fTemp3) + -11.283791670955125); - double fTemp59 = (fConst37 * ((fTemp17 * fTemp55) * fTemp58)); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp59)))))); - fVbargraph18 = FAUSTFLOAT(fRec48[0]); - output18[i] = FAUSTFLOAT(fTemp59); - double fTemp60 = ((3.5 * fTemp42) + -13.540550005146152); - double fTemp61 = (fConst38 * ((fTemp24 * fTemp55) * fTemp60)); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); - fVbargraph19 = FAUSTFLOAT(fRec49[0]); - output19[i] = FAUSTFLOAT(fTemp61); - double fTemp62 = (0.75 * (fTemp55 * ((2.333333333333333 * (fTemp3 * fTemp44)) - (1.5 * fTemp26)))); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); - fVbargraph20 = FAUSTFLOAT(fRec50[0]); - output20[i] = FAUSTFLOAT(fTemp62); - double fTemp63 = (fConst38 * ((fTemp28 * fTemp55) * fTemp60)); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp63)))))); - fVbargraph21 = FAUSTFLOAT(fRec51[0]); - output21[i] = FAUSTFLOAT(fTemp63); - double fTemp64 = (fConst39 * (((fTemp4 * fTemp31) * fTemp55) * fTemp58)); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); - fVbargraph22 = FAUSTFLOAT(fRec52[0]); - output22[i] = FAUSTFLOAT(fTemp64); - double fTemp65 = (fConst35 * ((((fTemp2 * fTemp14) * fTemp33) * fTemp48) * fTemp55)); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp65)))))); - fVbargraph23 = FAUSTFLOAT(fRec53[0]); - output23[i] = FAUSTFLOAT(fTemp65); - double fTemp66 = (fConst30 * ((fTemp50 * fTemp55) * (1.0 - (2.0 * (fTemp30 * (1.0 - fTemp48)))))); - fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); - fVbargraph24 = FAUSTFLOAT(fRec54[0]); - output24[i] = FAUSTFLOAT(fTemp66); + fRec5[0] = (fRec5[1] + fRec4[1]); + fRec4[0] = (fSlow17 * ((fSlow18 * fTemp0) - (fSlow19 * fRec5[0]))); + fRec3[0] = (fRec4[0] + fRec3[1]); + double fTemp2 = (fSlow3 * fTemp0); + double fTemp3 = ((fSlow15 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); + double fTemp4 = (fSlow12 * fTemp3); + fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (fSlow20 * fTemp3); + fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (fSlow22 * fTemp3); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp6); + fRec11[0] = (fRec11[1] + fRec10[1]); + fRec12[0] = (fRec12[1] + fRec11[1]); + fRec10[0] = (fSlow30 * ((fSlow31 * fTemp0) - ((fSlow33 * fRec11[0]) + (fSlow32 * fRec12[0])))); + fRec9[0] = (fRec10[0] + fRec9[1]); + double fTemp7 = (fRec9[0] - fRec10[0]); + fVec0[0] = fTemp7; + fRec13[0] = (fRec13[1] + fVec0[1]); + double fTemp8 = ((fSlow26 * ((fSlow28 * fTemp7) + (fSlow27 * fRec13[0]))) + (fRec10[0] + fTemp2)); + double fTemp9 = (fSlow23 * fTemp8); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (fSlow34 * fTemp8); + fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph5 = FAUSTFLOAT(fRec14[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (fSlow36 * fTemp8); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph6 = FAUSTFLOAT(fRec15[0]); + output6[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (fSlow38 * fTemp8); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph7 = FAUSTFLOAT(fRec16[0]); + output7[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (fSlow41 * fTemp8); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph8 = FAUSTFLOAT(fRec17[0]); + output8[i] = FAUSTFLOAT(fTemp13); + fRec22[0] = (fRec22[1] + fRec21[1]); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec21[0] = (fSlow48 * ((fSlow50 * fTemp0) - ((fSlow52 * fRec22[0]) + (fSlow51 * fRec23[0])))); + fRec24[0] = (fRec21[0] + fRec24[1]); + double fTemp14 = (fRec24[0] - fRec21[0]); + fVec1[0] = fTemp14; + fRec25[0] = (fRec25[1] + fVec1[1]); + fRec26[0] = (fRec26[1] + fRec20[1]); + fRec20[0] = (fSlow47 * ((fSlow45 * (fRec21[0] + (fSlow53 * ((fSlow55 * fTemp14) + (fSlow54 * fRec25[0]))))) - (fSlow56 * fRec26[0]))); + fRec19[0] = (fRec20[0] + fRec19[1]); + double fTemp15 = ((fSlow46 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); + double fTemp16 = (fSlow44 * fTemp15); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph9 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (fSlow57 * fTemp15); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph10 = FAUSTFLOAT(fRec27[0]); + output10[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (fSlow59 * fTemp15); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph11 = FAUSTFLOAT(fRec28[0]); + output11[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (fSlow61 * fTemp15); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph12 = FAUSTFLOAT(fRec29[0]); + output12[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (fSlow62 * fTemp15); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph13 = FAUSTFLOAT(fRec30[0]); + output13[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (fSlow63 * fTemp15); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph14 = FAUSTFLOAT(fRec31[0]); + output14[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (fSlow66 * fTemp15); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph15 = FAUSTFLOAT(fRec32[0]); + output15[i] = FAUSTFLOAT(fTemp22); + fRec37[0] = (fRec37[1] + fRec36[1]); + fRec38[0] = (fRec38[1] + fRec37[1]); + fRec36[0] = (fSlow74 * ((fSlow76 * fTemp0) - ((fSlow78 * fRec37[0]) + (fSlow77 * fRec38[0])))); + fRec39[0] = (fRec36[0] + fRec39[1]); + double fTemp23 = (fRec39[0] - fRec36[0]); + fVec2[0] = fTemp23; + fRec40[0] = (fRec40[1] + fVec2[1]); + fRec41[0] = (fRec41[1] + fRec35[1]); + fRec42[0] = (fRec42[1] + fRec41[1]); + fRec35[0] = (fSlow73 * ((fSlow69 * (fRec36[0] + (fSlow79 * ((fSlow81 * fTemp23) + (fSlow80 * fRec40[0]))))) - ((fSlow83 * fRec41[0]) + (fSlow82 * fRec42[0])))); + fRec34[0] = (fRec35[0] + fRec34[1]); + double fTemp24 = (fRec34[0] - fRec35[0]); + fVec3[0] = fTemp24; + fRec43[0] = (fRec43[1] + fVec3[1]); + double fTemp25 = ((fSlow70 * ((fSlow72 * fTemp24) + (fSlow71 * fRec43[0]))) + (fRec35[0] + fTemp2)); + double fTemp26 = (fSlow68 * fTemp25); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph16 = FAUSTFLOAT(fRec33[0]); + output16[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (fSlow84 * fTemp25); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph17 = FAUSTFLOAT(fRec44[0]); + output17[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (fSlow86 * fTemp25); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph18 = FAUSTFLOAT(fRec45[0]); + output18[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (fSlow88 * fTemp25); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph19 = FAUSTFLOAT(fRec46[0]); + output19[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fSlow89 * fTemp25); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph20 = FAUSTFLOAT(fRec47[0]); + output20[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fSlow90 * fTemp25); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph21 = FAUSTFLOAT(fRec48[0]); + output21[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (fSlow91 * fTemp25); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph22 = FAUSTFLOAT(fRec49[0]); + output22[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (fSlow92 * fTemp25); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph23 = FAUSTFLOAT(fRec50[0]); + output23[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (fSlow93 * fTemp25); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph24 = FAUSTFLOAT(fRec51[0]); + output24[i] = FAUSTFLOAT(fTemp34); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; - fRec8[1] = fRec8[0]; - fRec7[1] = fRec7[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; - fRec9[1] = fRec9[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; + fRec9[1] = fRec9[0]; + fVec0[1] = fVec0[0]; + fRec13[1] = fRec13[0]; + fRec8[1] = fRec8[0]; fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; - fRec13[1] = fRec13[0]; - fRec12[1] = fRec12[0]; - fVec0[1] = fVec0[0]; fRec16[1] = fRec16[0]; - fRec11[1] = fRec11[0]; fRec17[1] = fRec17[0]; - fRec18[1] = fRec18[0]; - fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec21[1] = fRec21[0]; + fRec24[1] = fRec24[0]; + fVec1[1] = fVec1[0]; fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; - fRec24[1] = fRec24[0]; + fRec20[1] = fRec20[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; fRec27[1] = fRec27[0]; - fVec1[1] = fVec1[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; - fRec23[1] = fRec23[0]; - fRec22[1] = fRec22[0]; - fRec21[1] = fRec21[0]; fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; - fRec33[1] = fRec33[0]; - fRec34[1] = fRec34[0]; - fRec35[1] = fRec35[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fVec2[1] = fVec2[0]; fRec40[1] = fRec40[0]; fRec41[1] = fRec41[0]; - fRec39[1] = fRec39[0]; fRec42[1] = fRec42[0]; - fVec2[1] = fVec2[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fVec3[1] = fVec3[0]; fRec43[1] = fRec43[0]; + fRec33[1] = fRec33[0]; fRec44[1] = fRec44[0]; fRec45[1] = fRec45[0]; - fRec38[1] = fRec38[0]; - fRec37[1] = fRec37[0]; - fVec3[1] = fVec3[0]; fRec46[1] = fRec46[0]; - fRec36[1] = fRec36[0]; fRec47[1] = fRec47[0]; fRec48[1] = fRec48[0]; fRec49[1] = fRec49[0]; fRec50[1] = fRec50[0]; fRec51[1] = fRec51[0]; - fRec52[1] = fRec52[0]; - fRec53[1] = fRec53[0]; - fRec54[1] = fRec54[0]; } diff --git a/source/HOAUGens/HOAEncoder5.cpp b/source/HOAUGens/HOAEncoder5.cpp index e898ea2444..abe8906d91 100644 --- a/source/HOAUGens/HOAEncoder5.cpp +++ b/source/HOAUGens/HOAEncoder5.cpp @@ -4,7 +4,7 @@ copyright: "(c) Pierre Lecomte 2014" license: "GPL" name: "HOAEncoder5" version: "1.0" -Code generated with Faust 2.5.21 (https://faust.grame.fr) +Code generated with Faust 2.5.23 (https://faust.grame.fr) Compilation options: cpp, -double -ftz 0 ------------------------------------------------------------ */ @@ -639,12 +639,11 @@ class mydsp : public dsp { int fSamplingFreq; double fConst0; double fConst1; - FAUSTFLOAT fHslider0; - double fRec1[2]; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fEntry0; + FAUSTFLOAT fHslider0; FAUSTFLOAT fHslider1; - double fRec2[2]; + double fRec1[2]; double fRec0[2]; FAUSTFLOAT fVbargraph0; double fConst2; @@ -652,19 +651,17 @@ class mydsp : public dsp { double fConst4; double fConst5; FAUSTFLOAT fHslider2; - double fRec4[2]; FAUSTFLOAT fHslider3; - double fRec5[2]; double fConst6; double fConst7; - double fRec8[2]; - double fRec7[2]; - double fRec6[2]; + double fRec5[2]; + double fRec4[2]; double fRec3[2]; + double fRec2[2]; FAUSTFLOAT fVbargraph1; - double fRec9[2]; + double fRec6[2]; FAUSTFLOAT fVbargraph2; - double fRec10[2]; + double fRec7[2]; FAUSTFLOAT fVbargraph3; double fConst8; double fConst9; @@ -672,25 +669,25 @@ class mydsp : public dsp { double fConst11; double fConst12; double fConst13; - double fRec14[2]; - double fRec15[2]; - double fRec13[2]; + double fRec11[2]; double fRec12[2]; + double fRec10[2]; + double fRec9[2]; double fVec0[2]; - double fRec16[2]; - double fRec11[2]; + double fRec13[2]; + double fRec8[2]; FAUSTFLOAT fVbargraph4; double fConst14; double fConst15; double fConst16; - double fRec17[2]; + double fRec14[2]; FAUSTFLOAT fVbargraph5; - double fRec18[2]; + double fRec15[2]; FAUSTFLOAT fVbargraph6; - double fRec19[2]; + double fRec16[2]; FAUSTFLOAT fVbargraph7; double fConst17; - double fRec20[2]; + double fRec17[2]; FAUSTFLOAT fVbargraph8; double fConst18; double fConst19; @@ -699,33 +696,33 @@ class mydsp : public dsp { double fConst22; double fConst23; double fConst24; - double fRec25[2]; - double fRec26[2]; - double fRec24[2]; - double fRec27[2]; - double fVec1[2]; - double fRec28[2]; - double fRec29[2]; - double fRec23[2]; double fRec22[2]; + double fRec23[2]; double fRec21[2]; + double fRec24[2]; + double fVec1[2]; + double fRec25[2]; + double fRec26[2]; + double fRec20[2]; + double fRec19[2]; + double fRec18[2]; FAUSTFLOAT fVbargraph9; double fConst25; double fConst26; double fConst27; - double fRec30[2]; + double fRec27[2]; FAUSTFLOAT fVbargraph10; double fConst28; - double fRec31[2]; + double fRec28[2]; FAUSTFLOAT fVbargraph11; - double fRec32[2]; + double fRec29[2]; FAUSTFLOAT fVbargraph12; - double fRec33[2]; + double fRec30[2]; FAUSTFLOAT fVbargraph13; double fConst29; - double fRec34[2]; + double fRec31[2]; FAUSTFLOAT fVbargraph14; - double fRec35[2]; + double fRec32[2]; FAUSTFLOAT fVbargraph15; double fConst30; double fConst31; @@ -733,92 +730,96 @@ class mydsp : public dsp { double fConst33; double fConst34; double fConst35; + double fConst36; + double fConst37; + double fRec37[2]; + double fRec38[2]; + double fRec36[2]; + double fRec39[2]; + double fVec2[2]; double fRec40[2]; double fRec41[2]; - double fRec39[2]; double fRec42[2]; - double fVec2[2]; - double fRec43[2]; - double fConst36; - double fRec44[2]; - double fRec45[2]; - double fRec38[2]; - double fRec37[2]; + double fRec35[2]; + double fRec34[2]; double fVec3[2]; - double fRec46[2]; - double fRec36[2]; + double fRec43[2]; + double fRec33[2]; FAUSTFLOAT fVbargraph16; - double fConst37; double fConst38; - double fRec47[2]; - FAUSTFLOAT fVbargraph17; double fConst39; + double fRec44[2]; + FAUSTFLOAT fVbargraph17; double fConst40; - double fRec48[2]; - FAUSTFLOAT fVbargraph18; double fConst41; - double fRec49[2]; + double fRec45[2]; + FAUSTFLOAT fVbargraph18; + double fConst42; + double fRec46[2]; FAUSTFLOAT fVbargraph19; - double fRec50[2]; + double fRec47[2]; FAUSTFLOAT fVbargraph20; - double fRec51[2]; + double fRec48[2]; FAUSTFLOAT fVbargraph21; - double fConst42; - double fRec52[2]; + double fConst43; + double fRec49[2]; FAUSTFLOAT fVbargraph22; - double fRec53[2]; + double fRec50[2]; FAUSTFLOAT fVbargraph23; - double fRec54[2]; - FAUSTFLOAT fVbargraph24; - double fConst43; double fConst44; + double fRec51[2]; + FAUSTFLOAT fVbargraph24; double fConst45; double fConst46; double fConst47; double fConst48; + double fConst49; + double fConst50; + double fRec57[2]; + double fRec58[2]; + double fRec56[2]; + double fRec59[2]; + double fVec4[2]; double fRec60[2]; + double fConst51; double fRec61[2]; - double fRec59[2]; double fRec62[2]; - double fVec4[2]; + double fRec55[2]; double fRec63[2]; - double fConst49; + double fVec5[2]; double fRec64[2]; double fRec65[2]; - double fRec58[2]; - double fRec66[2]; - double fVec5[2]; - double fRec67[2]; - double fRec68[2]; - double fRec57[2]; - double fRec56[2]; - double fRec55[2]; + double fRec54[2]; + double fRec53[2]; + double fRec52[2]; FAUSTFLOAT fVbargraph25; - double fConst50; - double fRec69[2]; - FAUSTFLOAT fVbargraph26; - double fConst51; - double fRec70[2]; - FAUSTFLOAT fVbargraph27; double fConst52; double fConst53; - double fRec71[2]; - FAUSTFLOAT fVbargraph28; + double fRec66[2]; + FAUSTFLOAT fVbargraph26; double fConst54; - double fRec72[2]; + double fRec67[2]; + FAUSTFLOAT fVbargraph27; + double fConst55; + double fConst56; + double fRec68[2]; + FAUSTFLOAT fVbargraph28; + double fConst57; + double fRec69[2]; FAUSTFLOAT fVbargraph29; - double fRec73[2]; + double fRec70[2]; FAUSTFLOAT fVbargraph30; - double fRec74[2]; + double fRec71[2]; FAUSTFLOAT fVbargraph31; - double fConst55; - double fRec75[2]; + double fConst58; + double fRec72[2]; FAUSTFLOAT fVbargraph32; - double fRec76[2]; + double fRec73[2]; FAUSTFLOAT fVbargraph33; - double fRec77[2]; + double fConst59; + double fRec74[2]; FAUSTFLOAT fVbargraph34; - double fRec78[2]; + double fRec75[2]; FAUSTFLOAT fVbargraph35; public: @@ -828,6 +829,7 @@ class mydsp : public dsp { m->declare("basics.lib/name", "Faust Basic Element Library"); m->declare("basics.lib/version", "0.0"); m->declare("copyright", "(c) Pierre Lecomte 2014"); + m->declare("filename", "HOAEncoder5"); m->declare("gui.lib/author", "Pierre Lecomte"); m->declare("gui.lib/copyright", "(c) Pierre Lecomte 2016"); m->declare("gui.lib/license", "GPL"); @@ -1074,38 +1076,42 @@ class mydsp : public dsp { fConst29 = (15.957691216057308 * fConst26); fConst30 = double(tgamma(9.0)); fConst31 = double(tgamma(4.5)); - fConst32 = (12.766152972845846 * (sqrt((9.0 * (fConst2 / fConst30))) * fConst31)); - fConst33 = (984.71160495892411 / fConst0); - fConst34 = (715.28839504107589 / fConst0); - fConst35 = (1430.5767900821518 / fConst0); - fConst36 = (1969.4232099178482 / fConst0); - fConst37 = double(tgamma(8.0)); - fConst38 = (44.681535404960464 * (sqrt((9.0 * (fConst14 / fConst37))) * fConst19)); - fConst39 = (sqrt((9.0 * (fConst3 / fConst18))) * fConst9); - fConst40 = (1.4142135623730951 * fConst39); - fConst41 = (0.47140452079103168 * (sqrt((9.0 * (fConst15 / fConst25))) * fConst4)); - fConst42 = (0.70710678118654757 * fConst39); - fConst43 = (25.532305945691693 * (sqrt((11.0 * (fConst2 / double(tgamma(11.0))))) * double(tgamma(5.5)))); - fConst44 = (1239.8911224120607 / fConst0); - fConst45 = (619.94556120603033 / fConst0); - fConst46 = (1139.6651757122002 / fConst0); - fConst47 = (790.3892630817644 / fConst0); - fConst48 = (1580.7785261635288 / fConst0); - fConst49 = (2279.3303514244003 / fConst0); - fConst50 = (114.89537675561263 * (sqrt((11.0 * (fConst14 / double(tgamma(10.0))))) * fConst31)); - fConst51 = (0.70710678118654757 * (sqrt((11.0 * (fConst3 / fConst30))) * fConst19)); - fConst52 = (sqrt((11.0 * (fConst15 / fConst37))) * fConst9); - fConst53 = (0.94280904158206336 * fConst52); - fConst54 = (0.35355339059327379 * (sqrt((11.0 * (fConst8 / fConst18))) * fConst4)); - fConst55 = (0.47140452079103168 * fConst52); + fConst32 = (sqrt((9.0 * (fConst2 / fConst30))) * fConst31); + fConst33 = (25.532305945691693 * fConst32); + fConst34 = (984.71160495892411 / fConst0); + fConst35 = (1969.4232099178482 / fConst0); + fConst36 = (715.28839504107589 / fConst0); + fConst37 = (1430.5767900821518 / fConst0); + fConst38 = double(tgamma(8.0)); + fConst39 = (44.681535404960464 * (sqrt((9.0 * (fConst14 / fConst38))) * fConst19)); + fConst40 = (sqrt((9.0 * (fConst3 / fConst18))) * fConst9); + fConst41 = (1.4142135623730951 * fConst40); + fConst42 = (0.47140452079103168 * (sqrt((9.0 * (fConst15 / fConst25))) * fConst4)); + fConst43 = (0.70710678118654757 * fConst40); + fConst44 = (12.766152972845846 * fConst32); + fConst45 = (25.532305945691693 * (sqrt((11.0 * (fConst2 / double(tgamma(11.0))))) * double(tgamma(5.5)))); + fConst46 = (1239.8911224120607 / fConst0); + fConst47 = (619.94556120603033 / fConst0); + fConst48 = (1139.6651757122002 / fConst0); + fConst49 = (790.3892630817644 / fConst0); + fConst50 = (1580.7785261635288 / fConst0); + fConst51 = (2279.3303514244003 / fConst0); + fConst52 = (sqrt((11.0 * (fConst14 / double(tgamma(10.0))))) * fConst31); + fConst53 = (229.79075351122526 * fConst52); + fConst54 = (0.70710678118654757 * (sqrt((11.0 * (fConst3 / fConst30))) * fConst19)); + fConst55 = (sqrt((11.0 * (fConst15 / fConst38))) * fConst9); + fConst56 = (0.94280904158206336 * fConst55); + fConst57 = (0.35355339059327379 * (sqrt((11.0 * (fConst8 / fConst18))) * fConst4)); + fConst58 = (0.47140452079103168 * fConst55); + fConst59 = (114.89537675561263 * fConst52); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(0.0); fCheckbox0 = FAUSTFLOAT(0.0); fEntry0 = FAUSTFLOAT(1.0700000000000001); - fHslider1 = FAUSTFLOAT(2.0); + fHslider0 = FAUSTFLOAT(2.0); + fHslider1 = FAUSTFLOAT(0.0); fHslider2 = FAUSTFLOAT(0.0); fHslider3 = FAUSTFLOAT(0.0); @@ -1117,11 +1123,11 @@ class mydsp : public dsp { } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0; + fRec0[l1] = 0.0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0; + fRec5[l2] = 0.0; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { @@ -1129,27 +1135,27 @@ class mydsp : public dsp { } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec5[l4] = 0.0; + fRec3[l4] = 0.0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec8[l5] = 0.0; + fRec2[l5] = 0.0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec7[l6] = 0.0; + fRec6[l6] = 0.0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec6[l7] = 0.0; + fRec7[l7] = 0.0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec3[l8] = 0.0; + fRec11[l8] = 0.0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec9[l9] = 0.0; + fRec12[l9] = 0.0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { @@ -1157,11 +1163,11 @@ class mydsp : public dsp { } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec14[l11] = 0.0; + fRec9[l11] = 0.0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec15[l12] = 0.0; + fVec0[l12] = 0.0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { @@ -1169,19 +1175,19 @@ class mydsp : public dsp { } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec12[l14] = 0.0; + fRec8[l14] = 0.0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fVec0[l15] = 0.0; + fRec14[l15] = 0.0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0; + fRec15[l16] = 0.0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec11[l17] = 0.0; + fRec16[l17] = 0.0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { @@ -1189,55 +1195,55 @@ class mydsp : public dsp { } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec18[l19] = 0.0; + fRec22[l19] = 0.0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec19[l20] = 0.0; + fRec23[l20] = 0.0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec20[l21] = 0.0; + fRec21[l21] = 0.0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec25[l22] = 0.0; + fRec24[l22] = 0.0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec26[l23] = 0.0; + fVec1[l23] = 0.0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec24[l24] = 0.0; + fRec25[l24] = 0.0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec27[l25] = 0.0; + fRec26[l25] = 0.0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fVec1[l26] = 0.0; + fRec20[l26] = 0.0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec28[l27] = 0.0; + fRec19[l27] = 0.0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec29[l28] = 0.0; + fRec18[l28] = 0.0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec23[l29] = 0.0; + fRec27[l29] = 0.0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec22[l30] = 0.0; + fRec28[l30] = 0.0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec21[l31] = 0.0; + fRec29[l31] = 0.0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { @@ -1253,67 +1259,67 @@ class mydsp : public dsp { } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - fRec33[l35] = 0.0; + fRec37[l35] = 0.0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec34[l36] = 0.0; + fRec38[l36] = 0.0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec35[l37] = 0.0; + fRec36[l37] = 0.0; } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec40[l38] = 0.0; + fRec39[l38] = 0.0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec41[l39] = 0.0; + fVec2[l39] = 0.0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - fRec39[l40] = 0.0; + fRec40[l40] = 0.0; } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec42[l41] = 0.0; + fRec41[l41] = 0.0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fVec2[l42] = 0.0; + fRec42[l42] = 0.0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec43[l43] = 0.0; + fRec35[l43] = 0.0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec44[l44] = 0.0; + fRec34[l44] = 0.0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fRec45[l45] = 0.0; + fVec3[l45] = 0.0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec38[l46] = 0.0; + fRec43[l46] = 0.0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - fRec37[l47] = 0.0; + fRec33[l47] = 0.0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fVec3[l48] = 0.0; + fRec44[l48] = 0.0; } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec46[l49] = 0.0; + fRec45[l49] = 0.0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - fRec36[l50] = 0.0; + fRec46[l50] = 0.0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { @@ -1337,79 +1343,79 @@ class mydsp : public dsp { } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec52[l56] = 0.0; + fRec57[l56] = 0.0; } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec53[l57] = 0.0; + fRec58[l57] = 0.0; } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec54[l58] = 0.0; + fRec56[l58] = 0.0; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { - fRec60[l59] = 0.0; + fRec59[l59] = 0.0; } for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { - fRec61[l60] = 0.0; + fVec4[l60] = 0.0; } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - fRec59[l61] = 0.0; + fRec60[l61] = 0.0; } for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { - fRec62[l62] = 0.0; + fRec61[l62] = 0.0; } for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { - fVec4[l63] = 0.0; + fRec62[l63] = 0.0; } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - fRec63[l64] = 0.0; + fRec55[l64] = 0.0; } for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { - fRec64[l65] = 0.0; + fRec63[l65] = 0.0; } for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fRec65[l66] = 0.0; + fVec5[l66] = 0.0; } for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - fRec58[l67] = 0.0; + fRec64[l67] = 0.0; } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { - fRec66[l68] = 0.0; + fRec65[l68] = 0.0; } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { - fVec5[l69] = 0.0; + fRec54[l69] = 0.0; } for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { - fRec67[l70] = 0.0; + fRec53[l70] = 0.0; } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec68[l71] = 0.0; + fRec52[l71] = 0.0; } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { - fRec57[l72] = 0.0; + fRec66[l72] = 0.0; } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { - fRec56[l73] = 0.0; + fRec67[l73] = 0.0; } for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { - fRec55[l74] = 0.0; + fRec68[l74] = 0.0; } for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { @@ -1440,18 +1446,6 @@ class mydsp : public dsp { fRec75[l81] = 0.0; } - for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { - fRec76[l82] = 0.0; - - } - for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { - fRec77[l83] = 0.0; - - } - for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { - fRec78[l84] = 0.0; - - } } @@ -1477,14 +1471,14 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("HOAEncoder5"); ui_interface->openVerticalBox("Parameters"); ui_interface->openHorizontalBox("Source 0"); - ui_interface->declare(&fHslider0, "0+1", ""); - ui_interface->declare(&fHslider0, "osc", "/gain_0 -20 20"); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("Gain 0", &fHslider0, 0.0, -20.0, 20.0, 0.10000000000000001); - ui_interface->declare(&fHslider1, "0+2", ""); - ui_interface->declare(&fHslider1, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider1, "0+1", ""); + ui_interface->declare(&fHslider1, "osc", "/gain_0 -20 20"); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("Radius 0", &fHslider1, 2.0, 0.5, 50.0, 0.01); + ui_interface->addHorizontalSlider("Gain 0", &fHslider1, 0.0, -20.0, 20.0, 0.10000000000000001); + ui_interface->declare(&fHslider0, "0+2", ""); + ui_interface->declare(&fHslider0, "osc", "/radius_0 0.5 50"); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("Radius 0", &fHslider0, 2.0, 0.5, 50.0, 0.01); ui_interface->declare(&fHslider3, "0+3", ""); ui_interface->declare(&fHslider3, "osc", "/azimuth_0 0 360"); ui_interface->declare(&fHslider3, "style", "knob"); @@ -1506,157 +1500,157 @@ class mydsp : public dsp { ui_interface->openHorizontalBox("0"); ui_interface->openVerticalBox("0"); ui_interface->declare(&fVbargraph0, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30aa9c0", &fVbargraph0, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c2e950", &fVbargraph0, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("1"); ui_interface->openVerticalBox("1"); ui_interface->declare(&fVbargraph1, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30c47b0", &fVbargraph1, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c44ee0", &fVbargraph1, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("2"); ui_interface->declare(&fVbargraph2, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30ca0e0", &fVbargraph2, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c4a9f0", &fVbargraph2, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("3"); ui_interface->declare(&fVbargraph3, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30d02d0", &fVbargraph3, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c50bb0", &fVbargraph3, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("2"); ui_interface->openVerticalBox("4"); ui_interface->declare(&fVbargraph4, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30e7eb0", &fVbargraph4, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c68f10", &fVbargraph4, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("5"); ui_interface->declare(&fVbargraph5, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30f01d0", &fVbargraph5, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c70fd0", &fVbargraph5, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("6"); ui_interface->declare(&fVbargraph6, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30f6440", &fVbargraph6, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c77420", &fVbargraph6, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("7"); ui_interface->declare(&fVbargraph7, "unit", "dB"); - ui_interface->addVerticalBargraph("0x30fc150", &fVbargraph7, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c7d4f0", &fVbargraph7, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("8"); ui_interface->declare(&fVbargraph8, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3103380", &fVbargraph8, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244c84900", &fVbargraph8, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("3"); ui_interface->openVerticalBox("9"); ui_interface->declare(&fVbargraph9, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3121fd0", &fVbargraph9, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244ca3f30", &fVbargraph9, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("10"); ui_interface->declare(&fVbargraph10, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3129ed0", &fVbargraph10, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244cab9f0", &fVbargraph10, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("11"); ui_interface->declare(&fVbargraph11, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3131430", &fVbargraph11, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244cb3310", &fVbargraph11, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("12"); ui_interface->declare(&fVbargraph12, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31379e0", &fVbargraph12, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244cb9aa0", &fVbargraph12, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("13"); ui_interface->declare(&fVbargraph13, "unit", "dB"); - ui_interface->addVerticalBargraph("0x313d6a0", &fVbargraph13, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244cbfb20", &fVbargraph13, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("14"); ui_interface->declare(&fVbargraph14, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3143d00", &fVbargraph14, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244cc6330", &fVbargraph14, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("15"); ui_interface->declare(&fVbargraph15, "unit", "dB"); - ui_interface->addVerticalBargraph("0x314a600", &fVbargraph15, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244ccce10", &fVbargraph15, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("4"); ui_interface->openVerticalBox("16"); ui_interface->declare(&fVbargraph16, "unit", "dB"); - ui_interface->addVerticalBargraph("0x316fd90", &fVbargraph16, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244cf3650", &fVbargraph16, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("17"); ui_interface->declare(&fVbargraph17, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3177810", &fVbargraph17, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244cfb2a0", &fVbargraph17, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("18"); ui_interface->declare(&fVbargraph18, "unit", "dB"); - ui_interface->addVerticalBargraph("0x317f160", &fVbargraph18, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d03180", &fVbargraph18, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("19"); ui_interface->declare(&fVbargraph19, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31866b0", &fVbargraph19, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d0ac70", &fVbargraph19, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("20"); ui_interface->declare(&fVbargraph20, "unit", "dB"); - ui_interface->addVerticalBargraph("0x318cfa0", &fVbargraph20, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d11740", &fVbargraph20, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("21"); ui_interface->declare(&fVbargraph21, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3192e20", &fVbargraph21, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d17b60", &fVbargraph21, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("22"); ui_interface->declare(&fVbargraph22, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3199440", &fVbargraph22, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d1e360", &fVbargraph22, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("23"); ui_interface->declare(&fVbargraph23, "unit", "dB"); - ui_interface->addVerticalBargraph("0x319f840", &fVbargraph23, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d24760", &fVbargraph23, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("24"); ui_interface->declare(&fVbargraph24, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31a6410", &fVbargraph24, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d2bbc0", &fVbargraph24, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->openHorizontalBox("5"); ui_interface->openVerticalBox("25"); ui_interface->declare(&fVbargraph25, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31d2d90", &fVbargraph25, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d593b0", &fVbargraph25, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("26"); ui_interface->declare(&fVbargraph26, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31da630", &fVbargraph26, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d60f10", &fVbargraph26, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("27"); ui_interface->declare(&fVbargraph27, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31e1d60", &fVbargraph27, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d68a00", &fVbargraph27, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("28"); ui_interface->declare(&fVbargraph28, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31e96a0", &fVbargraph28, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d70ab0", &fVbargraph28, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("29"); ui_interface->declare(&fVbargraph29, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31f1170", &fVbargraph29, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d78940", &fVbargraph29, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("30"); ui_interface->declare(&fVbargraph30, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31f7be0", &fVbargraph30, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d7f590", &fVbargraph30, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("31"); ui_interface->declare(&fVbargraph31, "unit", "dB"); - ui_interface->addVerticalBargraph("0x31fdc20", &fVbargraph31, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d85990", &fVbargraph31, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("32"); ui_interface->declare(&fVbargraph32, "unit", "dB"); - ui_interface->addVerticalBargraph("0x3204230", &fVbargraph32, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d8c530", &fVbargraph32, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("33"); ui_interface->declare(&fVbargraph33, "unit", "dB"); - ui_interface->addVerticalBargraph("0x320a610", &fVbargraph33, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d92cd0", &fVbargraph33, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("34"); ui_interface->declare(&fVbargraph34, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32108f0", &fVbargraph34, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244d99a20", &fVbargraph34, -70.0, 6.0); ui_interface->closeBox(); ui_interface->openVerticalBox("35"); ui_interface->declare(&fVbargraph35, "unit", "dB"); - ui_interface->addVerticalBargraph("0x32172b0", &fVbargraph35, -70.0, 6.0); + ui_interface->addVerticalBargraph("0x559244da05c0", &fVbargraph35, -70.0, 6.0); ui_interface->closeBox(); ui_interface->closeBox(); ui_interface->closeBox(); @@ -1702,369 +1696,417 @@ class mydsp : public dsp { FAUSTFLOAT* output33 = outputs[33]; FAUSTFLOAT* output34 = outputs[34]; FAUSTFLOAT* output35 = outputs[35]; - double fSlow0 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider0)))); - double fSlow1 = double(fCheckbox0); - double fSlow2 = (1.0 - fSlow1); - double fSlow3 = double(fEntry0); - double fSlow4 = (fSlow1 * fSlow3); - double fSlow5 = (0.0010000000000000009 * double(fHslider1)); - double fSlow6 = (0.0010000000000000009 * double(fHslider2)); - double fSlow7 = (0.0010000000000000009 * double(fHslider3)); - double fSlow8 = (fConst7 / fSlow3); - double fSlow9 = (1.0 / (fSlow8 + 1.0)); - double fSlow10 = (fConst6 / fSlow3); - double fSlow11 = mydsp_faustpower2_f(fSlow8); - double fSlow12 = (1.0 / (((fConst12 / fSlow3) + (3.0 * fSlow11)) + 1.0)); - double fSlow13 = (12.0 * fSlow11); - double fSlow14 = (fSlow13 + (fConst13 / fSlow3)); - double fSlow15 = (1.0 / ((fConst22 / fSlow3) + 1.0)); - double fSlow16 = (1.0 / (((fConst23 / fSlow3) + (6.4594326934833797 * fSlow11)) + 1.0)); - double fSlow17 = (25.837730773933519 * fSlow11); - double fSlow18 = (fSlow17 + (fConst24 / fSlow3)); - double fSlow19 = (fConst21 / fSlow3); - double fSlow20 = (1.0 / (((fConst33 / fSlow3) + (9.1401308902779004 * fSlow11)) + 1.0)); - double fSlow21 = (1.0 / (((fConst34 / fSlow3) + (11.4878004768713 * fSlow11)) + 1.0)); - double fSlow22 = (45.951201907485199 * fSlow11); - double fSlow23 = (fSlow22 + (fConst35 / fSlow3)); - double fSlow24 = (36.560523561111602 * fSlow11); - double fSlow25 = (fSlow24 + (fConst36 / fSlow3)); - double fSlow26 = (1.0 / ((fConst45 / fSlow3) + 1.0)); - double fSlow27 = (1.0 / (((fConst46 / fSlow3) + (14.272480513280099 * fSlow11)) + 1.0)); - double fSlow28 = (1.0 / (((fConst47 / fSlow3) + (18.1563153134523 * fSlow11)) + 1.0)); - double fSlow29 = (72.6252612538092 * fSlow11); - double fSlow30 = (fSlow29 + (fConst48 / fSlow3)); - double fSlow31 = (57.089922053120397 * fSlow11); - double fSlow32 = (fSlow31 + (fConst49 / fSlow3)); - double fSlow33 = (fConst44 / fSlow3); + double fSlow0 = double(fCheckbox0); + double fSlow1 = double(fEntry0); + double fSlow2 = double(fHslider0); + double fSlow3 = (1.0 - fSlow0); + double fSlow4 = (((fSlow0 * fSlow1) / fSlow2) + fSlow3); + double fSlow5 = (0.0010000000000000009 * pow(10.0, (0.050000000000000003 * double(fHslider1)))); + double fSlow6 = sin(double(fHslider2)); + double fSlow7 = mydsp_faustpower2_f(fSlow6); + double fSlow8 = (1.0 - fSlow7); + double fSlow9 = pow(fSlow8, 0.5); + double fSlow10 = double(fHslider3); + double fSlow11 = sin(fSlow10); + double fSlow12 = (fConst5 * (fSlow9 * fSlow11)); + double fSlow13 = (fConst7 / fSlow2); + double fSlow14 = (fSlow13 + 1.0); + double fSlow15 = (fConst6 / (fSlow14 * fSlow2)); + double fSlow16 = (fConst7 / fSlow1); + double fSlow17 = (1.0 / (fSlow16 + 1.0)); + double fSlow18 = (((fSlow14 * fSlow0) * fSlow1) / fSlow2); + double fSlow19 = (fConst6 / fSlow1); + double fSlow20 = (1.7320508075688772 * fSlow6); + double fSlow21 = cos(fSlow10); + double fSlow22 = (fConst5 * (fSlow21 * fSlow9)); + double fSlow23 = (fConst11 * ((fSlow21 * fSlow8) * fSlow11)); + double fSlow24 = mydsp_faustpower2_f(fSlow13); + double fSlow25 = (((fConst12 / fSlow2) + (3.0 * fSlow24)) + 1.0); + double fSlow26 = (1.0 / fSlow25); + double fSlow27 = (12.0 * fSlow24); + double fSlow28 = ((fConst13 / fSlow2) + fSlow27); + double fSlow29 = mydsp_faustpower2_f(fSlow16); + double fSlow30 = (1.0 / (((fConst12 / fSlow1) + (3.0 * fSlow29)) + 1.0)); + double fSlow31 = (((fSlow25 * fSlow0) * fSlow1) / fSlow2); + double fSlow32 = (12.0 * fSlow29); + double fSlow33 = (fSlow32 + (fConst13 / fSlow1)); + double fSlow34 = (fConst16 * ((fSlow6 * fSlow9) * fSlow11)); + double fSlow35 = ((3.0 * fSlow7) + -1.0); + double fSlow36 = (1.1180339887498949 * fSlow35); + double fSlow37 = (fSlow21 * fSlow6); + double fSlow38 = (fConst16 * (fSlow37 * fSlow9)); + double fSlow39 = mydsp_faustpower2_f(fSlow21); + double fSlow40 = ((2.0 * fSlow39) + -1.0); + double fSlow41 = (fConst17 * (fSlow40 * fSlow8)); + double fSlow42 = ((4.0 * fSlow39) + -1.0); + double fSlow43 = pow(fSlow8, 1.5); + double fSlow44 = (fConst20 * ((fSlow42 * fSlow43) * fSlow11)); + double fSlow45 = ((fConst22 / fSlow2) + 1.0); + double fSlow46 = (fConst21 / (fSlow45 * fSlow2)); + double fSlow47 = (1.0 / ((fConst22 / fSlow1) + 1.0)); + double fSlow48 = (1.0 / (((fConst23 / fSlow1) + (6.4594326934833797 * fSlow29)) + 1.0)); + double fSlow49 = (((fConst23 / fSlow2) + (6.4594326934833797 * fSlow24)) + 1.0); + double fSlow50 = (((fSlow49 * fSlow0) * fSlow1) / fSlow2); + double fSlow51 = (25.837730773933519 * fSlow29); + double fSlow52 = (fSlow51 + (fConst24 / fSlow1)); + double fSlow53 = (1.0 / fSlow49); + double fSlow54 = (25.837730773933519 * fSlow24); + double fSlow55 = ((fConst24 / fSlow2) + fSlow54); + double fSlow56 = (fConst21 / fSlow1); + double fSlow57 = (fConst27 * ((fSlow37 * fSlow8) * fSlow11)); + double fSlow58 = ((16.925687506432688 * fSlow7) + -3.3851375012865379); + double fSlow59 = (fConst28 * ((fSlow58 * fSlow9) * fSlow11)); + double fSlow60 = ((2.5 * fSlow35) + -2.0); + double fSlow61 = (0.88191710368819687 * (fSlow60 * fSlow6)); + double fSlow62 = (fConst28 * ((fSlow58 * fSlow21) * fSlow9)); + double fSlow63 = (fConst29 * ((fSlow40 * fSlow6) * fSlow8)); + double fSlow64 = ((2.0 * fSlow40) + -1.0); + double fSlow65 = (fSlow64 * fSlow21); + double fSlow66 = (fConst20 * (fSlow65 * fSlow43)); + double fSlow67 = (fSlow42 + -1.0); + double fSlow68 = (fSlow67 * fSlow21); + double fSlow69 = mydsp_faustpower2_f(fSlow8); + double fSlow70 = (fConst33 * ((fSlow68 * fSlow69) * fSlow11)); + double fSlow71 = (((fConst34 / fSlow2) + (9.1401308902779004 * fSlow24)) + 1.0); + double fSlow72 = (1.0 / fSlow71); + double fSlow73 = (36.560523561111602 * fSlow24); + double fSlow74 = ((fConst35 / fSlow2) + fSlow73); + double fSlow75 = (1.0 / (((fConst34 / fSlow1) + (9.1401308902779004 * fSlow29)) + 1.0)); + double fSlow76 = (1.0 / (((fConst36 / fSlow1) + (11.4878004768713 * fSlow29)) + 1.0)); + double fSlow77 = (((fConst36 / fSlow2) + (11.4878004768713 * fSlow24)) + 1.0); + double fSlow78 = (((fSlow77 * fSlow0) * fSlow1) / fSlow2); + double fSlow79 = (45.951201907485199 * fSlow29); + double fSlow80 = (fSlow79 + (fConst37 / fSlow1)); + double fSlow81 = (1.0 / fSlow77); + double fSlow82 = (45.951201907485199 * fSlow24); + double fSlow83 = ((fConst37 / fSlow2) + fSlow82); + double fSlow84 = (36.560523561111602 * fSlow29); + double fSlow85 = (fSlow84 + (fConst35 / fSlow1)); + double fSlow86 = (fConst39 * (((fSlow42 * fSlow6) * fSlow43) * fSlow11)); + double fSlow87 = ((78.986541696685876 * fSlow7) + -11.283791670955125); + double fSlow88 = (fConst41 * (((fSlow87 * fSlow21) * fSlow8) * fSlow11)); + double fSlow89 = ((3.5 * fSlow58) + -13.540550005146152); + double fSlow90 = (fConst42 * (((fSlow89 * fSlow6) * fSlow9) * fSlow11)); + double fSlow91 = ((2.333333333333333 * (fSlow60 * fSlow7)) - (1.5 * fSlow35)); + double fSlow92 = (0.75 * fSlow91); + double fSlow93 = (fConst42 * (((fSlow89 * fSlow21) * fSlow6) * fSlow9)); + double fSlow94 = (fConst43 * ((fSlow40 * fSlow87) * fSlow8)); + double fSlow95 = (fConst39 * ((fSlow65 * fSlow6) * fSlow43)); + double fSlow96 = (1.0 - (2.0 * ((1.0 - fSlow64) * fSlow39))); + double fSlow97 = (fConst44 * (fSlow96 * fSlow69)); + double fSlow98 = pow(fSlow8, 2.5); + double fSlow99 = (fConst45 * (((1.0 - (4.0 * ((1.0 - fSlow67) * fSlow39))) * fSlow98) * fSlow11)); + double fSlow100 = ((fConst47 / fSlow2) + 1.0); + double fSlow101 = (fConst46 / (fSlow100 * fSlow2)); + double fSlow102 = (1.0 / ((fConst47 / fSlow1) + 1.0)); + double fSlow103 = (1.0 / (((fConst48 / fSlow1) + (14.272480513280099 * fSlow29)) + 1.0)); + double fSlow104 = (((fConst48 / fSlow2) + (14.272480513280099 * fSlow24)) + 1.0); + double fSlow105 = (1.0 / (((fConst49 / fSlow1) + (18.1563153134523 * fSlow29)) + 1.0)); + double fSlow106 = (((fConst49 / fSlow2) + (18.1563153134523 * fSlow24)) + 1.0); + double fSlow107 = (((fSlow106 * fSlow0) * fSlow1) / fSlow2); + double fSlow108 = (72.6252612538092 * fSlow29); + double fSlow109 = (fSlow108 + (fConst50 / fSlow1)); + double fSlow110 = (1.0 / fSlow106); + double fSlow111 = (72.6252612538092 * fSlow24); + double fSlow112 = ((fConst50 / fSlow2) + fSlow111); + double fSlow113 = (57.089922053120397 * fSlow29); + double fSlow114 = (fSlow113 + (fConst51 / fSlow1)); + double fSlow115 = (1.0 / fSlow104); + double fSlow116 = (57.089922053120397 * fSlow24); + double fSlow117 = ((fConst51 / fSlow2) + fSlow116); + double fSlow118 = (fConst46 / fSlow1); + double fSlow119 = (fConst53 * (((fSlow68 * fSlow6) * fSlow69) * fSlow11)); + double fSlow120 = ((284.35155010806915 * fSlow7) + -31.594616678674353); + double fSlow121 = (fConst54 * (((fSlow42 * fSlow120) * fSlow43) * fSlow11)); + double fSlow122 = ((4.5 * fSlow87) + -67.702750025730751); + double fSlow123 = (fConst56 * ((((fSlow122 * fSlow21) * fSlow6) * fSlow8) * fSlow11)); + double fSlow124 = ((3.0 * (fSlow89 * fSlow7)) - (2.5 * fSlow58)); + double fSlow125 = (fConst57 * ((fSlow124 * fSlow9) * fSlow11)); + double fSlow126 = (0.66332495807108005 * (((2.25 * fSlow91) - (1.3333333333333333 * fSlow60)) * fSlow6)); + double fSlow127 = (fConst57 * ((fSlow124 * fSlow21) * fSlow9)); + double fSlow128 = (fConst58 * (((fSlow40 * fSlow122) * fSlow6) * fSlow8)); + double fSlow129 = (fConst54 * (((fSlow64 * fSlow120) * fSlow21) * fSlow43)); + double fSlow130 = (fConst59 * ((fSlow96 * fSlow6) * fSlow69)); + double fSlow131 = (fConst45 * ((((2.0 * fSlow96) - fSlow64) * fSlow21) * fSlow98)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow0 + (0.999 * fRec1[1])); - fRec2[0] = (fSlow5 + (0.999 * fRec2[1])); - double fTemp0 = double(input0[i]); - double fTemp1 = ((fRec1[0] * (fSlow2 + (fSlow4 / fRec2[0]))) * fTemp0); + fRec1[0] = (fSlow5 + (0.999 * fRec1[1])); + double fTemp0 = (fRec1[0] * double(input0[i])); + double fTemp1 = (fSlow4 * fTemp0); fRec0[0] = max((fRec0[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp1)))))); fVbargraph0 = FAUSTFLOAT(fRec0[0]); output0[i] = FAUSTFLOAT(fTemp1); - fRec4[0] = (fSlow6 + (0.999 * fRec4[1])); - double fTemp2 = sin(fRec4[0]); - double fTemp3 = mydsp_faustpower2_f(fTemp2); - double fTemp4 = (1.0 - fTemp3); - double fTemp5 = pow(fTemp4, 0.5); - fRec5[0] = (fSlow7 + (0.999 * fRec5[1])); - double fTemp6 = sin(fRec5[0]); - double fTemp7 = (fTemp5 * fTemp6); - double fTemp8 = (fConst7 / fRec2[0]); - double fTemp9 = (fTemp8 + 1.0); - fRec8[0] = (fRec8[1] + fRec7[1]); - fRec7[0] = (fSlow9 * ((fSlow4 * (((fRec1[0] * fTemp9) * fTemp0) / fRec2[0])) - (fSlow10 * fRec8[0]))); - fRec6[0] = (fRec7[0] + fRec6[1]); - double fTemp10 = (fSlow2 * (fRec1[0] * fTemp0)); - double fTemp11 = ((fConst6 * ((fRec6[0] - fRec7[0]) / (fRec2[0] * fTemp9))) + (fRec7[0] + fTemp10)); - double fTemp12 = (fConst5 * (fTemp7 * fTemp11)); - fRec3[0] = max((fRec3[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); - fVbargraph1 = FAUSTFLOAT(fRec3[0]); - output1[i] = FAUSTFLOAT(fTemp12); - double fTemp13 = (1.7320508075688772 * (fTemp2 * fTemp11)); - fRec9[0] = max((fRec9[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); - fVbargraph2 = FAUSTFLOAT(fRec9[0]); - output2[i] = FAUSTFLOAT(fTemp13); - double fTemp14 = cos(fRec5[0]); - double fTemp15 = (fTemp5 * fTemp14); - double fTemp16 = (fConst5 * (fTemp15 * fTemp11)); - fRec10[0] = max((fRec10[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); - fVbargraph3 = FAUSTFLOAT(fRec10[0]); - output3[i] = FAUSTFLOAT(fTemp16); - double fTemp17 = ((fTemp4 * fTemp6) * fTemp14); - double fTemp18 = mydsp_faustpower2_f(fTemp8); - double fTemp19 = (((fConst12 / fRec2[0]) + (3.0 * fTemp18)) + 1.0); - fRec14[0] = (fRec14[1] + fRec13[1]); - fRec15[0] = (fRec15[1] + fRec14[1]); - fRec13[0] = (fSlow12 * ((fSlow4 * (((fRec1[0] * fTemp19) * fTemp0) / fRec2[0])) - ((fSlow14 * fRec14[0]) + (fSlow13 * fRec15[0])))); - fRec12[0] = (fRec13[0] + fRec12[1]); - double fTemp20 = (fRec12[0] - fRec13[0]); - fVec0[0] = fTemp20; - fRec16[0] = (fRec16[1] + fVec0[1]); - double fTemp21 = ((((fTemp20 * ((fConst13 / fRec2[0]) + (12.0 * fTemp18))) + (12.0 * (fRec16[0] * fTemp18))) / fTemp19) + (fRec13[0] + fTemp10)); - double fTemp22 = (fConst11 * (fTemp17 * fTemp21)); - fRec11[0] = max((fRec11[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); - fVbargraph4 = FAUSTFLOAT(fRec11[0]); - output4[i] = FAUSTFLOAT(fTemp22); - double fTemp23 = (fTemp2 * fTemp5); - double fTemp24 = (fTemp23 * fTemp6); - double fTemp25 = (fConst16 * (fTemp24 * fTemp21)); - fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp25)))))); - fVbargraph5 = FAUSTFLOAT(fRec17[0]); - output5[i] = FAUSTFLOAT(fTemp25); - double fTemp26 = ((3.0 * fTemp3) + -1.0); - double fTemp27 = (1.1180339887498949 * (fTemp21 * fTemp26)); - fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); - fVbargraph6 = FAUSTFLOAT(fRec18[0]); - output6[i] = FAUSTFLOAT(fTemp27); - double fTemp28 = (fTemp23 * fTemp14); - double fTemp29 = (fConst16 * (fTemp28 * fTemp21)); - fRec19[0] = max((fRec19[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); - fVbargraph7 = FAUSTFLOAT(fRec19[0]); - output7[i] = FAUSTFLOAT(fTemp29); - double fTemp30 = mydsp_faustpower2_f(fTemp14); - double fTemp31 = ((2.0 * fTemp30) + -1.0); - double fTemp32 = (fConst17 * ((fTemp4 * fTemp21) * fTemp31)); - fRec20[0] = max((fRec20[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); - fVbargraph8 = FAUSTFLOAT(fRec20[0]); - output8[i] = FAUSTFLOAT(fTemp32); - double fTemp33 = pow(fTemp4, 1.5); - double fTemp34 = (fTemp6 * fTemp33); - double fTemp35 = (((fConst23 / fRec2[0]) + (6.4594326934833797 * fTemp18)) + 1.0); - fRec25[0] = (fRec25[1] + fRec24[1]); - fRec26[0] = (fRec26[1] + fRec25[1]); - fRec24[0] = (fSlow16 * ((fSlow4 * (((fRec1[0] * fTemp35) * fTemp0) / fRec2[0])) - ((fSlow18 * fRec25[0]) + (fSlow17 * fRec26[0])))); - fRec27[0] = (fRec24[0] + fRec27[1]); - double fTemp36 = (fRec27[0] - fRec24[0]); - fVec1[0] = fTemp36; - fRec28[0] = (fRec28[1] + fVec1[1]); - double fTemp37 = ((fConst22 / fRec2[0]) + 1.0); - fRec29[0] = (fRec29[1] + fRec23[1]); - fRec23[0] = (fSlow15 * (((fRec24[0] + (((fTemp36 * ((fConst24 / fRec2[0]) + (25.837730773933519 * fTemp18))) + (25.837730773933519 * (fRec28[0] * fTemp18))) / fTemp35)) * fTemp37) - (fSlow19 * fRec29[0]))); - fRec22[0] = (fRec23[0] + fRec22[1]); - double fTemp38 = ((fConst21 * ((fRec22[0] - fRec23[0]) / (fRec2[0] * fTemp37))) + (fRec23[0] + fTemp10)); - double fTemp39 = ((4.0 * fTemp30) + -1.0); - double fTemp40 = (fConst20 * ((fTemp34 * fTemp38) * fTemp39)); - fRec21[0] = max((fRec21[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); - fVbargraph9 = FAUSTFLOAT(fRec21[0]); - output9[i] = FAUSTFLOAT(fTemp40); - double fTemp41 = (fTemp2 * fTemp4); - double fTemp42 = ((fTemp41 * fTemp6) * fTemp14); - double fTemp43 = (fConst27 * (fTemp42 * fTemp38)); - fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); - fVbargraph10 = FAUSTFLOAT(fRec30[0]); - output10[i] = FAUSTFLOAT(fTemp43); - double fTemp44 = ((16.925687506432688 * fTemp3) + -3.3851375012865379); - double fTemp45 = (fConst28 * ((fTemp7 * fTemp38) * fTemp44)); - fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); - fVbargraph11 = FAUSTFLOAT(fRec31[0]); - output11[i] = FAUSTFLOAT(fTemp45); - double fTemp46 = ((2.5 * fTemp26) + -2.0); - double fTemp47 = (0.88191710368819687 * ((fTemp2 * fTemp38) * fTemp46)); - fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); - fVbargraph12 = FAUSTFLOAT(fRec32[0]); - output12[i] = FAUSTFLOAT(fTemp47); - double fTemp48 = (fConst28 * ((fTemp15 * fTemp38) * fTemp44)); - fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); - fVbargraph13 = FAUSTFLOAT(fRec33[0]); - output13[i] = FAUSTFLOAT(fTemp48); - double fTemp49 = (fTemp41 * fTemp31); - double fTemp50 = (fConst29 * (fTemp49 * fTemp38)); - fRec34[0] = max((fRec34[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp50)))))); - fVbargraph14 = FAUSTFLOAT(fRec34[0]); - output14[i] = FAUSTFLOAT(fTemp50); - double fTemp51 = (fTemp14 * fTemp33); - double fTemp52 = ((2.0 * fTemp31) + -1.0); - double fTemp53 = (fConst20 * ((fTemp51 * fTemp38) * fTemp52)); - fRec35[0] = max((fRec35[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp53)))))); - fVbargraph15 = FAUSTFLOAT(fRec35[0]); - output15[i] = FAUSTFLOAT(fTemp53); - double fTemp54 = mydsp_faustpower2_f(fTemp4); - double fTemp55 = (((fConst34 / fRec2[0]) + (11.4878004768713 * fTemp18)) + 1.0); - fRec40[0] = (fRec40[1] + fRec39[1]); - fRec41[0] = (fRec41[1] + fRec40[1]); - fRec39[0] = (fSlow21 * ((fSlow4 * (((fRec1[0] * fTemp55) * fTemp0) / fRec2[0])) - ((fSlow23 * fRec40[0]) + (fSlow22 * fRec41[0])))); - fRec42[0] = (fRec39[0] + fRec42[1]); - double fTemp56 = (fRec42[0] - fRec39[0]); - fVec2[0] = fTemp56; - fRec43[0] = (fRec43[1] + fVec2[1]); - double fTemp57 = (((fConst33 / fRec2[0]) + (9.1401308902779004 * fTemp18)) + 1.0); - fRec44[0] = (fRec44[1] + fRec38[1]); - fRec45[0] = (fRec45[1] + fRec44[1]); - fRec38[0] = (fSlow20 * (((fRec39[0] + (((fTemp56 * ((fConst35 / fRec2[0]) + (45.951201907485199 * fTemp18))) + (45.951201907485199 * (fRec43[0] * fTemp18))) / fTemp55)) * fTemp57) - ((fSlow25 * fRec44[0]) + (fSlow24 * fRec45[0])))); - fRec37[0] = (fRec38[0] + fRec37[1]); - double fTemp58 = (fRec37[0] - fRec38[0]); - fVec3[0] = fTemp58; - fRec46[0] = (fRec46[1] + fVec3[1]); - double fTemp59 = ((((fTemp58 * ((fConst36 / fRec2[0]) + (36.560523561111602 * fTemp18))) + (36.560523561111602 * (fRec46[0] * fTemp18))) / fTemp57) + (fRec38[0] + fTemp10)); - double fTemp60 = (0.0 - (2.0 * (fTemp14 * (1.0 - fTemp39)))); - double fTemp61 = (fConst32 * (((fTemp54 * fTemp6) * fTemp59) * fTemp60)); - fRec36[0] = max((fRec36[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp61)))))); - fVbargraph16 = FAUSTFLOAT(fRec36[0]); - output16[i] = FAUSTFLOAT(fTemp61); - double fTemp62 = (fConst38 * ((((fTemp2 * fTemp6) * fTemp33) * fTemp39) * fTemp59)); - fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp62)))))); - fVbargraph17 = FAUSTFLOAT(fRec47[0]); - output17[i] = FAUSTFLOAT(fTemp62); - double fTemp63 = ((78.986541696685876 * fTemp3) + -11.283791670955125); - double fTemp64 = (fConst40 * ((fTemp17 * fTemp59) * fTemp63)); - fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp64)))))); - fVbargraph18 = FAUSTFLOAT(fRec48[0]); - output18[i] = FAUSTFLOAT(fTemp64); - double fTemp65 = ((3.5 * fTemp44) + -13.540550005146152); - double fTemp66 = (fConst41 * ((fTemp24 * fTemp59) * fTemp65)); - fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp66)))))); - fVbargraph19 = FAUSTFLOAT(fRec49[0]); - output19[i] = FAUSTFLOAT(fTemp66); - double fTemp67 = ((2.333333333333333 * (fTemp3 * fTemp46)) - (1.5 * fTemp26)); - double fTemp68 = (0.75 * (fTemp59 * fTemp67)); - fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp68)))))); - fVbargraph20 = FAUSTFLOAT(fRec50[0]); - output20[i] = FAUSTFLOAT(fTemp68); - double fTemp69 = (fConst41 * ((fTemp28 * fTemp59) * fTemp65)); - fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp69)))))); - fVbargraph21 = FAUSTFLOAT(fRec51[0]); - output21[i] = FAUSTFLOAT(fTemp69); - double fTemp70 = (fConst42 * (((fTemp4 * fTemp31) * fTemp59) * fTemp63)); - fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp70)))))); - fVbargraph22 = FAUSTFLOAT(fRec52[0]); - output22[i] = FAUSTFLOAT(fTemp70); - double fTemp71 = (fConst38 * ((((fTemp2 * fTemp14) * fTemp33) * fTemp52) * fTemp59)); - fRec53[0] = max((fRec53[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp71)))))); - fVbargraph23 = FAUSTFLOAT(fRec53[0]); - output23[i] = FAUSTFLOAT(fTemp71); - double fTemp72 = (1.0 - (2.0 * (fTemp30 * (1.0 - fTemp52)))); - double fTemp73 = (fConst32 * ((fTemp54 * fTemp59) * fTemp72)); - fRec54[0] = max((fRec54[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp73)))))); - fVbargraph24 = FAUSTFLOAT(fRec54[0]); - output24[i] = FAUSTFLOAT(fTemp73); - double fTemp74 = pow(fTemp4, 2.5); - double fTemp75 = (((fConst47 / fRec2[0]) + (18.1563153134523 * fTemp18)) + 1.0); - fRec60[0] = (fRec60[1] + fRec59[1]); - fRec61[0] = (fRec61[1] + fRec60[1]); - fRec59[0] = (fSlow28 * ((fSlow4 * (((fRec1[0] * fTemp75) * fTemp0) / fRec2[0])) - ((fSlow30 * fRec60[0]) + (fSlow29 * fRec61[0])))); - fRec62[0] = (fRec59[0] + fRec62[1]); - double fTemp76 = (fRec62[0] - fRec59[0]); - fVec4[0] = fTemp76; - fRec63[0] = (fRec63[1] + fVec4[1]); - double fTemp77 = (((fConst46 / fRec2[0]) + (14.272480513280099 * fTemp18)) + 1.0); - fRec64[0] = (fRec64[1] + fRec58[1]); - fRec65[0] = (fRec65[1] + fRec64[1]); - fRec58[0] = (fSlow27 * (((fRec59[0] + (((fTemp76 * ((fConst48 / fRec2[0]) + (72.6252612538092 * fTemp18))) + (72.6252612538092 * (fRec63[0] * fTemp18))) / fTemp75)) * fTemp77) - ((fSlow32 * fRec64[0]) + (fSlow31 * fRec65[0])))); - fRec66[0] = (fRec58[0] + fRec66[1]); - double fTemp78 = (fRec66[0] - fRec58[0]); - fVec5[0] = fTemp78; - fRec67[0] = (fRec67[1] + fVec5[1]); - double fTemp79 = ((fConst45 / fRec2[0]) + 1.0); - fRec68[0] = (fRec68[1] + fRec57[1]); - fRec57[0] = (fSlow26 * (((fRec58[0] + (((fTemp78 * ((fConst49 / fRec2[0]) + (57.089922053120397 * fTemp18))) + (57.089922053120397 * (fRec67[0] * fTemp18))) / fTemp77)) * fTemp79) - (fSlow33 * fRec68[0]))); - fRec56[0] = (fRec57[0] + fRec56[1]); - double fTemp80 = ((fConst44 * ((fRec56[0] - fRec57[0]) / (fRec2[0] * fTemp79))) + (fRec57[0] + fTemp10)); - double fTemp81 = (fConst43 * (((fTemp6 * fTemp74) * fTemp80) * ((fTemp14 * ((2.0 * fTemp60) - (4.0 * fTemp14))) + 1.0))); - fRec55[0] = max((fRec55[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp81)))))); - fVbargraph25 = FAUSTFLOAT(fRec55[0]); - output25[i] = FAUSTFLOAT(fTemp81); - double fTemp82 = (fTemp2 * fTemp54); - double fTemp83 = (fConst50 * (((fTemp82 * fTemp6) * fTemp60) * fTemp80)); - fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp83)))))); - fVbargraph26 = FAUSTFLOAT(fRec69[0]); - output26[i] = FAUSTFLOAT(fTemp83); - double fTemp84 = ((284.35155010806915 * fTemp3) + -31.594616678674353); - double fTemp85 = (fConst51 * (((fTemp34 * fTemp39) * fTemp80) * fTemp84)); - fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp85)))))); - fVbargraph27 = FAUSTFLOAT(fRec70[0]); - output27[i] = FAUSTFLOAT(fTemp85); - double fTemp86 = ((4.5 * fTemp63) + -67.702750025730751); - double fTemp87 = (fConst53 * ((fTemp42 * fTemp80) * fTemp86)); - fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp87)))))); - fVbargraph28 = FAUSTFLOAT(fRec71[0]); - output28[i] = FAUSTFLOAT(fTemp87); - double fTemp88 = ((3.0 * (fTemp3 * fTemp65)) - (2.5 * fTemp44)); - double fTemp89 = (fConst54 * ((fTemp7 * fTemp80) * fTemp88)); - fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp89)))))); - fVbargraph29 = FAUSTFLOAT(fRec72[0]); - output29[i] = FAUSTFLOAT(fTemp89); - double fTemp90 = (0.66332495807108005 * ((fTemp2 * fTemp80) * ((2.25 * fTemp67) - (1.3333333333333333 * fTemp46)))); - fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp90)))))); - fVbargraph30 = FAUSTFLOAT(fRec73[0]); - output30[i] = FAUSTFLOAT(fTemp90); - double fTemp91 = (fConst54 * ((fTemp15 * fTemp80) * fTemp88)); - fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp91)))))); - fVbargraph31 = FAUSTFLOAT(fRec74[0]); - output31[i] = FAUSTFLOAT(fTemp91); - double fTemp92 = (fConst55 * ((fTemp49 * fTemp80) * fTemp86)); - fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp92)))))); - fVbargraph32 = FAUSTFLOAT(fRec75[0]); - output32[i] = FAUSTFLOAT(fTemp92); - double fTemp93 = (fConst51 * (((fTemp51 * fTemp52) * fTemp80) * fTemp84)); - fRec76[0] = max((fRec76[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp93)))))); - fVbargraph33 = FAUSTFLOAT(fRec76[0]); - output33[i] = FAUSTFLOAT(fTemp93); - double fTemp94 = (fConst50 * ((fTemp82 * fTemp72) * fTemp80)); - fRec77[0] = max((fRec77[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp94)))))); - fVbargraph34 = FAUSTFLOAT(fRec77[0]); - output34[i] = FAUSTFLOAT(fTemp94); - double fTemp95 = (fConst43 * (((fTemp14 * fTemp74) * fTemp80) * ((2.0 * fTemp72) - fTemp52))); - fRec78[0] = max((fRec78[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp95)))))); - fVbargraph35 = FAUSTFLOAT(fRec78[0]); - output35[i] = FAUSTFLOAT(fTemp95); + fRec5[0] = (fRec5[1] + fRec4[1]); + fRec4[0] = (fSlow17 * ((fSlow18 * fTemp0) - (fSlow19 * fRec5[0]))); + fRec3[0] = (fRec4[0] + fRec3[1]); + double fTemp2 = (fSlow3 * fTemp0); + double fTemp3 = ((fSlow15 * (fRec3[0] - fRec4[0])) + (fRec4[0] + fTemp2)); + double fTemp4 = (fSlow12 * fTemp3); + fRec2[0] = max((fRec2[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp4)))))); + fVbargraph1 = FAUSTFLOAT(fRec2[0]); + output1[i] = FAUSTFLOAT(fTemp4); + double fTemp5 = (fSlow20 * fTemp3); + fRec6[0] = max((fRec6[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp5)))))); + fVbargraph2 = FAUSTFLOAT(fRec6[0]); + output2[i] = FAUSTFLOAT(fTemp5); + double fTemp6 = (fSlow22 * fTemp3); + fRec7[0] = max((fRec7[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp6)))))); + fVbargraph3 = FAUSTFLOAT(fRec7[0]); + output3[i] = FAUSTFLOAT(fTemp6); + fRec11[0] = (fRec11[1] + fRec10[1]); + fRec12[0] = (fRec12[1] + fRec11[1]); + fRec10[0] = (fSlow30 * ((fSlow31 * fTemp0) - ((fSlow33 * fRec11[0]) + (fSlow32 * fRec12[0])))); + fRec9[0] = (fRec10[0] + fRec9[1]); + double fTemp7 = (fRec9[0] - fRec10[0]); + fVec0[0] = fTemp7; + fRec13[0] = (fRec13[1] + fVec0[1]); + double fTemp8 = ((fSlow26 * ((fSlow28 * fTemp7) + (fSlow27 * fRec13[0]))) + (fRec10[0] + fTemp2)); + double fTemp9 = (fSlow23 * fTemp8); + fRec8[0] = max((fRec8[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp9)))))); + fVbargraph4 = FAUSTFLOAT(fRec8[0]); + output4[i] = FAUSTFLOAT(fTemp9); + double fTemp10 = (fSlow34 * fTemp8); + fRec14[0] = max((fRec14[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp10)))))); + fVbargraph5 = FAUSTFLOAT(fRec14[0]); + output5[i] = FAUSTFLOAT(fTemp10); + double fTemp11 = (fSlow36 * fTemp8); + fRec15[0] = max((fRec15[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp11)))))); + fVbargraph6 = FAUSTFLOAT(fRec15[0]); + output6[i] = FAUSTFLOAT(fTemp11); + double fTemp12 = (fSlow38 * fTemp8); + fRec16[0] = max((fRec16[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp12)))))); + fVbargraph7 = FAUSTFLOAT(fRec16[0]); + output7[i] = FAUSTFLOAT(fTemp12); + double fTemp13 = (fSlow41 * fTemp8); + fRec17[0] = max((fRec17[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp13)))))); + fVbargraph8 = FAUSTFLOAT(fRec17[0]); + output8[i] = FAUSTFLOAT(fTemp13); + fRec22[0] = (fRec22[1] + fRec21[1]); + fRec23[0] = (fRec23[1] + fRec22[1]); + fRec21[0] = (fSlow48 * ((fSlow50 * fTemp0) - ((fSlow52 * fRec22[0]) + (fSlow51 * fRec23[0])))); + fRec24[0] = (fRec21[0] + fRec24[1]); + double fTemp14 = (fRec24[0] - fRec21[0]); + fVec1[0] = fTemp14; + fRec25[0] = (fRec25[1] + fVec1[1]); + fRec26[0] = (fRec26[1] + fRec20[1]); + fRec20[0] = (fSlow47 * ((fSlow45 * (fRec21[0] + (fSlow53 * ((fSlow55 * fTemp14) + (fSlow54 * fRec25[0]))))) - (fSlow56 * fRec26[0]))); + fRec19[0] = (fRec20[0] + fRec19[1]); + double fTemp15 = ((fSlow46 * (fRec19[0] - fRec20[0])) + (fRec20[0] + fTemp2)); + double fTemp16 = (fSlow44 * fTemp15); + fRec18[0] = max((fRec18[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp16)))))); + fVbargraph9 = FAUSTFLOAT(fRec18[0]); + output9[i] = FAUSTFLOAT(fTemp16); + double fTemp17 = (fSlow57 * fTemp15); + fRec27[0] = max((fRec27[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp17)))))); + fVbargraph10 = FAUSTFLOAT(fRec27[0]); + output10[i] = FAUSTFLOAT(fTemp17); + double fTemp18 = (fSlow59 * fTemp15); + fRec28[0] = max((fRec28[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp18)))))); + fVbargraph11 = FAUSTFLOAT(fRec28[0]); + output11[i] = FAUSTFLOAT(fTemp18); + double fTemp19 = (fSlow61 * fTemp15); + fRec29[0] = max((fRec29[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp19)))))); + fVbargraph12 = FAUSTFLOAT(fRec29[0]); + output12[i] = FAUSTFLOAT(fTemp19); + double fTemp20 = (fSlow62 * fTemp15); + fRec30[0] = max((fRec30[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp20)))))); + fVbargraph13 = FAUSTFLOAT(fRec30[0]); + output13[i] = FAUSTFLOAT(fTemp20); + double fTemp21 = (fSlow63 * fTemp15); + fRec31[0] = max((fRec31[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp21)))))); + fVbargraph14 = FAUSTFLOAT(fRec31[0]); + output14[i] = FAUSTFLOAT(fTemp21); + double fTemp22 = (fSlow66 * fTemp15); + fRec32[0] = max((fRec32[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp22)))))); + fVbargraph15 = FAUSTFLOAT(fRec32[0]); + output15[i] = FAUSTFLOAT(fTemp22); + fRec37[0] = (fRec37[1] + fRec36[1]); + fRec38[0] = (fRec38[1] + fRec37[1]); + fRec36[0] = (fSlow76 * ((fSlow78 * fTemp0) - ((fSlow80 * fRec37[0]) + (fSlow79 * fRec38[0])))); + fRec39[0] = (fRec36[0] + fRec39[1]); + double fTemp23 = (fRec39[0] - fRec36[0]); + fVec2[0] = fTemp23; + fRec40[0] = (fRec40[1] + fVec2[1]); + fRec41[0] = (fRec41[1] + fRec35[1]); + fRec42[0] = (fRec42[1] + fRec41[1]); + fRec35[0] = (fSlow75 * ((fSlow71 * (fRec36[0] + (fSlow81 * ((fSlow83 * fTemp23) + (fSlow82 * fRec40[0]))))) - ((fSlow85 * fRec41[0]) + (fSlow84 * fRec42[0])))); + fRec34[0] = (fRec35[0] + fRec34[1]); + double fTemp24 = (fRec34[0] - fRec35[0]); + fVec3[0] = fTemp24; + fRec43[0] = (fRec43[1] + fVec3[1]); + double fTemp25 = ((fSlow72 * ((fSlow74 * fTemp24) + (fSlow73 * fRec43[0]))) + (fRec35[0] + fTemp2)); + double fTemp26 = (fSlow70 * fTemp25); + fRec33[0] = max((fRec33[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp26)))))); + fVbargraph16 = FAUSTFLOAT(fRec33[0]); + output16[i] = FAUSTFLOAT(fTemp26); + double fTemp27 = (fSlow86 * fTemp25); + fRec44[0] = max((fRec44[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp27)))))); + fVbargraph17 = FAUSTFLOAT(fRec44[0]); + output17[i] = FAUSTFLOAT(fTemp27); + double fTemp28 = (fSlow88 * fTemp25); + fRec45[0] = max((fRec45[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp28)))))); + fVbargraph18 = FAUSTFLOAT(fRec45[0]); + output18[i] = FAUSTFLOAT(fTemp28); + double fTemp29 = (fSlow90 * fTemp25); + fRec46[0] = max((fRec46[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp29)))))); + fVbargraph19 = FAUSTFLOAT(fRec46[0]); + output19[i] = FAUSTFLOAT(fTemp29); + double fTemp30 = (fSlow92 * fTemp25); + fRec47[0] = max((fRec47[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp30)))))); + fVbargraph20 = FAUSTFLOAT(fRec47[0]); + output20[i] = FAUSTFLOAT(fTemp30); + double fTemp31 = (fSlow93 * fTemp25); + fRec48[0] = max((fRec48[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp31)))))); + fVbargraph21 = FAUSTFLOAT(fRec48[0]); + output21[i] = FAUSTFLOAT(fTemp31); + double fTemp32 = (fSlow94 * fTemp25); + fRec49[0] = max((fRec49[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp32)))))); + fVbargraph22 = FAUSTFLOAT(fRec49[0]); + output22[i] = FAUSTFLOAT(fTemp32); + double fTemp33 = (fSlow95 * fTemp25); + fRec50[0] = max((fRec50[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp33)))))); + fVbargraph23 = FAUSTFLOAT(fRec50[0]); + output23[i] = FAUSTFLOAT(fTemp33); + double fTemp34 = (fSlow97 * fTemp25); + fRec51[0] = max((fRec51[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp34)))))); + fVbargraph24 = FAUSTFLOAT(fRec51[0]); + output24[i] = FAUSTFLOAT(fTemp34); + fRec57[0] = (fRec57[1] + fRec56[1]); + fRec58[0] = (fRec58[1] + fRec57[1]); + fRec56[0] = (fSlow105 * ((fSlow107 * fTemp0) - ((fSlow109 * fRec57[0]) + (fSlow108 * fRec58[0])))); + fRec59[0] = (fRec56[0] + fRec59[1]); + double fTemp35 = (fRec59[0] - fRec56[0]); + fVec4[0] = fTemp35; + fRec60[0] = (fRec60[1] + fVec4[1]); + fRec61[0] = (fRec61[1] + fRec55[1]); + fRec62[0] = (fRec62[1] + fRec61[1]); + fRec55[0] = (fSlow103 * ((fSlow104 * (fRec56[0] + (fSlow110 * ((fSlow112 * fTemp35) + (fSlow111 * fRec60[0]))))) - ((fSlow114 * fRec61[0]) + (fSlow113 * fRec62[0])))); + fRec63[0] = (fRec55[0] + fRec63[1]); + double fTemp36 = (fRec63[0] - fRec55[0]); + fVec5[0] = fTemp36; + fRec64[0] = (fRec64[1] + fVec5[1]); + fRec65[0] = (fRec65[1] + fRec54[1]); + fRec54[0] = (fSlow102 * ((fSlow100 * (fRec55[0] + (fSlow115 * ((fSlow117 * fTemp36) + (fSlow116 * fRec64[0]))))) - (fSlow118 * fRec65[0]))); + fRec53[0] = (fRec54[0] + fRec53[1]); + double fTemp37 = ((fSlow101 * (fRec53[0] - fRec54[0])) + (fRec54[0] + fTemp2)); + double fTemp38 = (fSlow99 * fTemp37); + fRec52[0] = max((fRec52[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp38)))))); + fVbargraph25 = FAUSTFLOAT(fRec52[0]); + output25[i] = FAUSTFLOAT(fTemp38); + double fTemp39 = (fSlow119 * fTemp37); + fRec66[0] = max((fRec66[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp39)))))); + fVbargraph26 = FAUSTFLOAT(fRec66[0]); + output26[i] = FAUSTFLOAT(fTemp39); + double fTemp40 = (fSlow121 * fTemp37); + fRec67[0] = max((fRec67[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp40)))))); + fVbargraph27 = FAUSTFLOAT(fRec67[0]); + output27[i] = FAUSTFLOAT(fTemp40); + double fTemp41 = (fSlow123 * fTemp37); + fRec68[0] = max((fRec68[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp41)))))); + fVbargraph28 = FAUSTFLOAT(fRec68[0]); + output28[i] = FAUSTFLOAT(fTemp41); + double fTemp42 = (fSlow125 * fTemp37); + fRec69[0] = max((fRec69[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp42)))))); + fVbargraph29 = FAUSTFLOAT(fRec69[0]); + output29[i] = FAUSTFLOAT(fTemp42); + double fTemp43 = (fSlow126 * fTemp37); + fRec70[0] = max((fRec70[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp43)))))); + fVbargraph30 = FAUSTFLOAT(fRec70[0]); + output30[i] = FAUSTFLOAT(fTemp43); + double fTemp44 = (fSlow127 * fTemp37); + fRec71[0] = max((fRec71[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp44)))))); + fVbargraph31 = FAUSTFLOAT(fRec71[0]); + output31[i] = FAUSTFLOAT(fTemp44); + double fTemp45 = (fSlow128 * fTemp37); + fRec72[0] = max((fRec72[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp45)))))); + fVbargraph32 = FAUSTFLOAT(fRec72[0]); + output32[i] = FAUSTFLOAT(fTemp45); + double fTemp46 = (fSlow129 * fTemp37); + fRec73[0] = max((fRec73[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp46)))))); + fVbargraph33 = FAUSTFLOAT(fRec73[0]); + output33[i] = FAUSTFLOAT(fTemp46); + double fTemp47 = (fSlow130 * fTemp37); + fRec74[0] = max((fRec74[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp47)))))); + fVbargraph34 = FAUSTFLOAT(fRec74[0]); + output34[i] = FAUSTFLOAT(fTemp47); + double fTemp48 = (fSlow131 * fTemp37); + fRec75[0] = max((fRec75[1] - fConst1), min(6.0, (20.0 * log10(max(0.00031622776601683794, fabs(fTemp48)))))); + fVbargraph35 = FAUSTFLOAT(fRec75[0]); + output35[i] = FAUSTFLOAT(fTemp48); fRec1[1] = fRec1[0]; - fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; - fRec8[1] = fRec8[0]; - fRec7[1] = fRec7[0]; - fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; - fRec9[1] = fRec9[0]; + fRec2[1] = fRec2[0]; + fRec6[1] = fRec6[0]; + fRec7[1] = fRec7[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; + fRec9[1] = fRec9[0]; + fVec0[1] = fVec0[0]; + fRec13[1] = fRec13[0]; + fRec8[1] = fRec8[0]; fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; - fRec13[1] = fRec13[0]; - fRec12[1] = fRec12[0]; - fVec0[1] = fVec0[0]; fRec16[1] = fRec16[0]; - fRec11[1] = fRec11[0]; fRec17[1] = fRec17[0]; - fRec18[1] = fRec18[0]; - fRec19[1] = fRec19[0]; - fRec20[1] = fRec20[0]; + fRec22[1] = fRec22[0]; + fRec23[1] = fRec23[0]; + fRec21[1] = fRec21[0]; + fRec24[1] = fRec24[0]; + fVec1[1] = fVec1[0]; fRec25[1] = fRec25[0]; fRec26[1] = fRec26[0]; - fRec24[1] = fRec24[0]; + fRec20[1] = fRec20[0]; + fRec19[1] = fRec19[0]; + fRec18[1] = fRec18[0]; fRec27[1] = fRec27[0]; - fVec1[1] = fVec1[0]; fRec28[1] = fRec28[0]; fRec29[1] = fRec29[0]; - fRec23[1] = fRec23[0]; - fRec22[1] = fRec22[0]; - fRec21[1] = fRec21[0]; fRec30[1] = fRec30[0]; fRec31[1] = fRec31[0]; fRec32[1] = fRec32[0]; - fRec33[1] = fRec33[0]; - fRec34[1] = fRec34[0]; - fRec35[1] = fRec35[0]; + fRec37[1] = fRec37[0]; + fRec38[1] = fRec38[0]; + fRec36[1] = fRec36[0]; + fRec39[1] = fRec39[0]; + fVec2[1] = fVec2[0]; fRec40[1] = fRec40[0]; fRec41[1] = fRec41[0]; - fRec39[1] = fRec39[0]; fRec42[1] = fRec42[0]; - fVec2[1] = fVec2[0]; + fRec35[1] = fRec35[0]; + fRec34[1] = fRec34[0]; + fVec3[1] = fVec3[0]; fRec43[1] = fRec43[0]; + fRec33[1] = fRec33[0]; fRec44[1] = fRec44[0]; fRec45[1] = fRec45[0]; - fRec38[1] = fRec38[0]; - fRec37[1] = fRec37[0]; - fVec3[1] = fVec3[0]; fRec46[1] = fRec46[0]; - fRec36[1] = fRec36[0]; fRec47[1] = fRec47[0]; fRec48[1] = fRec48[0]; fRec49[1] = fRec49[0]; fRec50[1] = fRec50[0]; fRec51[1] = fRec51[0]; - fRec52[1] = fRec52[0]; - fRec53[1] = fRec53[0]; - fRec54[1] = fRec54[0]; + fRec57[1] = fRec57[0]; + fRec58[1] = fRec58[0]; + fRec56[1] = fRec56[0]; + fRec59[1] = fRec59[0]; + fVec4[1] = fVec4[0]; fRec60[1] = fRec60[0]; fRec61[1] = fRec61[0]; - fRec59[1] = fRec59[0]; fRec62[1] = fRec62[0]; - fVec4[1] = fVec4[0]; + fRec55[1] = fRec55[0]; fRec63[1] = fRec63[0]; + fVec5[1] = fVec5[0]; fRec64[1] = fRec64[0]; fRec65[1] = fRec65[0]; - fRec58[1] = fRec58[0]; + fRec54[1] = fRec54[0]; + fRec53[1] = fRec53[0]; + fRec52[1] = fRec52[0]; fRec66[1] = fRec66[0]; - fVec5[1] = fVec5[0]; fRec67[1] = fRec67[0]; fRec68[1] = fRec68[0]; - fRec57[1] = fRec57[0]; - fRec56[1] = fRec56[0]; - fRec55[1] = fRec55[0]; fRec69[1] = fRec69[0]; fRec70[1] = fRec70[0]; fRec71[1] = fRec71[0]; @@ -2072,9 +2114,6 @@ class mydsp : public dsp { fRec73[1] = fRec73[0]; fRec74[1] = fRec74[0]; fRec75[1] = fRec75[0]; - fRec76[1] = fRec76[0]; - fRec77[1] = fRec77[0]; - fRec78[1] = fRec78[0]; } diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA1.sc similarity index 76% rename from source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc rename to source/HOAUGens/sc/Classes/HOABeamDirac2HOA1.sc index bbae785caa..8cef78da18 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa1.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA1.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA1 : MultiOutUGen { - *ar { | in1, in2, in3, in4, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA10.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA10.sc index df52a3697c..44ab8f06c7 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA10.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA10.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA10 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.sc similarity index 68% rename from source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc rename to source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.sc index 93ecc0f386..6e42f0da74 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa2.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA2.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA2 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.sc similarity index 80% rename from source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc rename to source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.sc index 2f0544e5ca..8e37ef7690 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa3.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA3.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA3 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA4.sc similarity index 86% rename from source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc rename to source/HOAUGens/sc/Classes/HOABeamDirac2HOA4.sc index 92abffd3b6..26b2f7ab74 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa4.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA4.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA4 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.sc similarity index 87% rename from source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc rename to source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.sc index 59c91d8851..18b3907f60 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2Hoa5.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA5.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA5 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA6.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA6.sc index e55245ebd7..421bbe70d3 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA6.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA6.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA6 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA7.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA7.sc index eb3a1db600..a165e254a4 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA7.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA7.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA7 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA8.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA8.sc index f52b8ec020..be03a02c84 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA8.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA8.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA8 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA9.sc b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA9.sc index 9b1ff671c8..926aa36fc2 100644 --- a/source/HOAUGens/sc/Classes/HOABeamDirac2HOA9.sc +++ b/source/HOAUGens/sc/Classes/HOABeamDirac2HOA9.sc @@ -1,11 +1,11 @@ HOABeamDirac2HOA9 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, on, crossfade, gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, on, crossfade, gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, on(0.0), crossfade(1.0), gain(0.0), azimuth(0.0), elevation(0.0), timer_manual(0.0), focus(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, on, crossfade, gain, azimuth, elevation, timer_manual, focus) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA1.sc b/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA1.sc index 456cb70c5d..c204224404 100644 --- a/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA1.sc +++ b/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA1.sc @@ -1,11 +1,11 @@ HOABeamHCardio2HOA1 : MultiOutUGen { - *ar { | in1, in2, in3, in4, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, azimuth, elevation, order) + *ar { | in1, in2, in3, in4, azimuth(0.0), elevation(0.0), int_float(0.0), order(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, azimuth, elevation, int_float, order) } - *kr { | in1, in2, in3, in4, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, azimuth, elevation, order) + *kr { | in1, in2, in3, in4, azimuth(0.0), elevation(0.0), int_float(0.0), order(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, azimuth, elevation, int_float, order) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA2.sc b/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA2.sc index 8dd1951729..ce3f44befc 100644 --- a/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA2.sc +++ b/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA2.sc @@ -1,11 +1,11 @@ HOABeamHCardio2HOA2 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth, elevation, order) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0), elevation(0.0), int_float(0.0), order(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth, elevation, int_float, order) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth, elevation, order) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth(0.0), elevation(0.0), int_float(0.0), order(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, azimuth, elevation, int_float, order) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA3.sc b/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA3.sc index 243fe24348..911d68ed39 100644 --- a/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA3.sc +++ b/source/HOAUGens/sc/Classes/HOABeamHCardio2HOA3.sc @@ -1,11 +1,11 @@ HOABeamHCardio2HOA3 : MultiOutUGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth, elevation, order) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0), elevation(0.0), int_float(0.0), order(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth, elevation, int_float, order) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0), elevation(0.0), order(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth, elevation, order) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth(0.0), elevation(0.0), int_float(0.0), order(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, azimuth, elevation, int_float, order) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono1.sc b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono1.sc index a8cbc39202..5e31235ffa 100644 --- a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono1.sc +++ b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono1.sc @@ -1,11 +1,11 @@ HOABeamHCardio2Mono1 : UGen { - *ar { | in1, in2, in3, in4, output_gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, output_gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, int_float(0.0), order(0.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, int_float, order, output_gain, azimuth, elevation) } - *kr { | in1, in2, in3, in4, output_gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, output_gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, int_float(0.0), order(0.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, int_float, order, output_gain, azimuth, elevation) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc index 9af6d9ed39..edbf9e67c4 100644 --- a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc +++ b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono2.sc @@ -1,11 +1,11 @@ HOABeamHCardio2Mono2 : UGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, order(1.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, order, output_gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, int_float(0.0), order(0.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, int_float, order, output_gain, azimuth, elevation) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, order(1.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, order, output_gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, int_float(0.0), order(0.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, int_float, order, output_gain, azimuth, elevation) } checkInputs { diff --git a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc index a905b213c3..21b71ea5ac 100644 --- a/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc +++ b/source/HOAUGens/sc/Classes/HOABeamHCardio2Mono3.sc @@ -1,11 +1,11 @@ HOABeamHCardio2Mono3 : UGen { - *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, order(1.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, order, output_gain, azimuth, elevation) + *ar { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, int_float(0.0), order(0.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('audio', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, int_float, order, output_gain, azimuth, elevation) } - *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, order(1.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | - ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, order, output_gain, azimuth, elevation) + *kr { | in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, int_float(0.0), order(0.0), output_gain(0.0), azimuth(0.0), elevation(0.0) | + ^this.multiNew('control', in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, int_float, order, output_gain, azimuth, elevation) } checkInputs { From e993ad16f33867d25e379f161c7e93eb81523a2d Mon Sep 17 00:00:00 2001 From: Patrick Dupuis Date: Tue, 12 Jun 2018 13:47:17 -0400 Subject: [PATCH 28/30] add option to build HOAUGens (#5) --- CMakeLists.txt | 2 +- source/CMakeLists.txt | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd9d782b6b..dcaaedd88c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ option(NOVA_SIMD "Build VBAP with nova-simd support." ON) option(CPP11 "Build with c++11." ON) option(NATIVE "Optimize for this specific machine." OFF) option(SYSTEM_STK "Use STK libraries from system" OFF) - +option(HOA_UGENS "Build with HOAUGens" OFF) option(NOVA_DISK_IO "Build with Nova's DiskIO UGens. Requires boost source tree, break warranty & eats your children." OFF) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index caf9d9e298..38f08cd965 100755 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -93,7 +93,6 @@ set(PLUGIN_DIRS DistortionUGens DWGUGens GlitchUGens - HOAUGens JoshUGens LoopBufUGens MCLDUGens @@ -165,12 +164,15 @@ else() set(INSTALL_DESTINATION_DISTRO "SC3plugins") endif() -#HOAUGens -if (CMAKE_COMPILER_IS_CLANG) - file(GLOB HOAUGensSources HOAUGens/*cpp) - foreach(HOAUGensSourceFile ${HOAUGensSources}) - set_source_files_properties("${HOAUGensSourceFile}" PROPERTIES COMPILE_FLAGS "-fbracket-depth=4096") - endforeach(HOAUGensSourceFile) +# HOAUGens +if (HOA_UGENS) + list(APPEND PLUGIN_DIRS HOAUGens) + if (CMAKE_COMPILER_IS_CLANG) + file(GLOB HOAUGensSources HOAUGens/*cpp) + foreach(HOAUGensSourceFile ${HOAUGensSources}) + set_source_files_properties("${HOAUGensSourceFile}" PROPERTIES COMPILE_FLAGS "-fbracket-depth=4096") + endforeach(HOAUGensSourceFile) + endif() endif() foreach(DIR ${PLUGIN_DIRS}) From 6a039c4f0d450129c36db1ffc744117beb115218 Mon Sep 17 00:00:00 2001 From: Patrick Dupuis Date: Tue, 12 Jun 2018 15:28:09 -0400 Subject: [PATCH 29/30] improve the option's description (#6) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dcaaedd88c..dfb536cbe7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ option(NOVA_SIMD "Build VBAP with nova-simd support." ON) option(CPP11 "Build with c++11." ON) option(NATIVE "Optimize for this specific machine." OFF) option(SYSTEM_STK "Use STK libraries from system" OFF) -option(HOA_UGENS "Build with HOAUGens" OFF) +option(HOA_UGENS "Build with HOAUGens. Cannot be built on Windows or on embedded linux systems." OFF) option(NOVA_DISK_IO "Build with Nova's DiskIO UGens. Requires boost source tree, break warranty & eats your children." OFF) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") From 55cd62254f0d661934ddf0037b1bd91b9c3e862a Mon Sep 17 00:00:00 2001 From: Patrick Dupuis Date: Mon, 18 Jun 2018 14:59:03 -0400 Subject: [PATCH 30/30] Add a basic README (#7) * add basic README * small fix --- source/HOAUGens/sc/README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 source/HOAUGens/sc/README.md diff --git a/source/HOAUGens/sc/README.md b/source/HOAUGens/sc/README.md new file mode 100644 index 0000000000..d68bd888e9 --- /dev/null +++ b/source/HOAUGens/sc/README.md @@ -0,0 +1,35 @@ +# HOAUGens + +[HOA](https://en.wikipedia.org/wiki/Ambisonics#Higher-order_Ambisonics) for [SuperCollider](http://supercollider.github.io/). + + +## Overview + +The HOAUGens is a collections of SuperCollider Unit Generators designed for [Higher-order Ambinsonics](https://en.wikipedia.org/wiki/Ambisonics#Higher-order_Ambisonics). These UGens are distributed as part of the [sc3-plugins](https://github.com/supercollider/sc3-plugins) project. + +The HOAUGens are intended to be used with their accompagnying SuperCollider Quark called [SC-HOA](https://github.com/florian-grond/SC-HOA). Please consult the SC-HOA repository for additional information. + +As a whole, the HOA library provides classes to encode, transform and decode Higher Order Ambisonics sound signals up to order 5. The basis for the library are UGens compiled from Faust code written by Pierre Lecomte, see [ambitools](https://github.com/sekisushai/ambitools). Documentation and tutorials are partly based on the [ambitools documentation](https://github.com/sekisushai/ambitools/blob/master/Documentation/documentation.pdf) (pdf). + +The SuperCollider library was written by [Florian Grond](http://www.grond.at). It includes soundfield recordings made together with Romain Dumoulin using the Eigenmike from [CIRMMT](http://www.cirmmt.org). + + +## Installation + +The HOAUGens can be compiled and installed as part of the sc3-plugins collection. Compilation of the HOAUGens can be turned `ON` by setting the corresponding cmake variable: +```shell +cmake -DHOA_UGENS=ON .. +``` +This variable is set to `OFF` by default. + +The HOAUGens can be compiled successfully on **macOS** and **Linux**. + +**note for Windows** The HOAUGens are unable to build using MSVC due a limitation in the depth of bracket nesting that is permitted by this compiler. These UGens have not been tested on Windows, and any build for this platform should be considered experimental. + +**note for Embedded Linux systems** Although these UGens can be built on Linux, there have been issues compiling them successfully on small Embedded Linux systems (Raspberry Pi, etc.). + + +## Acknowledgements + +The implementation of SC-HOA was supported by a postdoctoral fellowship of Fonds de Recherche du Québec - Société et Culture (FRQSC) http://www.frqsc.gouv.qc.ca/ conducted at CIRMMT https://www.cirmmt.org/ and through the Metalab at the Société des Arts Technologiques http://sat.qc.ca/ in Montreal. +Special thanks goes to Nicolas Bouillot, Michal Seta, Till Bovermann and Carlo Capocasa.

      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 S`iH7{O*7`QZ2BK#{r?B1{bVKp diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev503.so b/source/HOAUGens/sc/Classes/HOAPanLebedev503.so deleted file mode 100755 index 53f50c86f8e76049ab57db96d78ae93b768eed22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94432 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 z zdz|v#5VoX6lrol3^;Kez#TBeI6-+cXP!w5`_G6N1tTa#~Fw(~W9ltf2+8>epAPMwl zCTjby1P`wyCD20&XdBtmLmX2~iMoA_mgs#`D4|c)IPHehKY%FhdLrso_*gmZiQ8lY zS&6~gSY{hcxotvWoV3G`mIq3d&KA+h0)`pWu~A2b@3u=g)FhO2*(DwQOS4G{{X)huv zua^7I9Q*oM0m1hiYT+Up@QZHc@$+=wPS9h3giK1;3$o}ntHpt`vw>wGe_D>{4cVdT z38RY_%nFn!DOxH!G@a~p*gG_gAhd?;u$^S^435wk{H26v3GK#6k@Bajg>XrrfSPR% zq%z=hygu`o2n?Dkmhd5w1253W{YjB@2dn0I3(*`_@)j%!q>`j4kSzy(J+S1!#{&!q z1-QePDhaDvZRW=~Djap8YVw)Tbc_ClS*H+$uAlNxFCEr_@=wJ441U7TqdKfB76efgMvB_6j~>334Uq(nMVt zsZrVsq8>p|B%_OQ^b)qe=u=3?d4vk_8T)Pw_*9)Dyj+KJFo{!M#&$0QM11rTWQ$3Y zlzEk?0z(^iV9cdk7A|2>fE(>Q5^09=kW`ogeH#PJOWea*g%%XO&r*bM0gVnmoD^{n z&)^wVH%f*lRuo8=c6S?7Y_xMQ_^niG#Dm6MVOC_ea>8@i@Kf5qDCh&SSt~aKU=P(S zRS4CxmBC0{Vj+1C%ag8F9%w1sN6WuNHd;8@DP${IsY@!21J0iBXP|=m73qNuC@aiC z3nY3(xCw=#wUX`P_WgL4Xb!33Si}Torc}@Iz+R<*+Dv5RtapQB518~rhxV@yx7|t$ zZqgkcik~V4@MKDv>Mh*L*7Vw$Vu|!q+yJSi1v|B^>|mAB;#wmjCxFgXbO`-8YqrsF zFO8;Qb0A+;%?Z?s5#nZ^=&0CB6&(wwIee4j;7JC=d*0rANi`88Pm&lfL@%4O7mJ1` z-zqsSl{$Ni^tKc#iy%~Jb3nQ~AScTd;ex15@4*fYAPtZa949PVh$$f$rs)Cl1NvJx z^=AC$F;3WGuMb!28C@(+CoSxayjuXTN=*_4hs~$O^rIx zjG`P2ZH{Hv&opu*8f^b{iD(H1>d+x7Vn;g&b~GttN8Aqkp)JsArDz4KtQQ^7nUSXP zw-SF3QGt)BfZmTT?$4lj$#j&@&`)FNOH_(Ipy(^441p7TrQPK9E2%VkV;kiOvDib> zz#57c*F;(BR60XNA>2hv2S4868Wds}nEO+*SSydwV-N9ND@{X;pyELW3TS8p>R9)(Pyzodu&hff>6&%(G2N>G8SCiynE&-*7Q*@|` zkg=skjVY2Y5QD)H7MrzEay<5sRBBb@Zt5ZCYiDIKUys&CdSz2Oq>XT`M+uN-eFC99 zX-3XQjZfiI0E}IX$r&b*Si&B9IGD9V9PPJPTFrnZDf>FuHlmOkB(2KB4o5+WHc>oP zB|-6I@(po(0>71ppJt09)`JiGKmy8!c=CJj3So^HU~_DlzNB%i0e%=9(ZX5^L4A6+ zP%>5zNq5rqJK|j@Nh^UF+p6(MJxoh{NjWM_xN_8FQ^dUN5`H=KOHK5iFO+nWqqf8g zRMUn=9DI#YS@EwrxCDhmUuJN;b1QC>H!rtsBGKv)U+fV3;=~yaXF5OL)a8Z=M=4lI z)wsyv+)kG|_y-Q&n1KJ&!RgO9eYwGyDjw219DH{|G(O-kk(q^t`n?WuV*>GA4)H`rn-Z^bKucniB_=Ez)!^`R z8~02^B4f*tfrw-U&i^rskd%snh}C;^aFP6(DsC>q`6E@)v}uxh(g`XWL-0hEgfs8; zh76A;l8onaCZQMULvZ#;humC3-omnzwHS~autSP}07o;}xi*kD%Q}=bD*928x*wqK zW?s&iED=(6NReG6bNP*dG)ImMW~lRlXlj#I;?ScRRU8_u&>=SUD}AuFOva6`v^(&L(Zc%scEg~>U49GZv{EyKAUmRtS?<0 zRb?=Vvi=Twjf+!0Jk2dO7>Ua^Mz?C5syni8G3sF2$VNDwp~k_*h7Nv;gVW}5`b!<0 z0b;komvo-u1s_o)hG(6wVW1vB-?&!E4!1<(_2xpRI77mUp~*%jMGfvuy`wb1yDZZM zBkW-~XJ*1#fS5&m?M}iCVkel>uR9;xGb#?B1@9sBIMXz4LSSz&PS^MQ!4YI!a9^NS z%?!cW$_O)JicGppl@z~nu7s2#>xY=WkQFD_jCRsulBZmB4uTTtjz&19t9e4+q2z`m zrvN6+>sv~M#>64&;EJMTd+_trL_(|+rc{^jDgcFOs6`yC;@jWJ^?tR-_opKR0OXg zB3$!pG^@y*|5?+Z8AQ>AzIB@QBz*E{UX0CeA|hqMW3AjMO7T1u_u-6Fd{VdrN0^^W z7xT`+nG4RIWY&yih-tfcnCCoNsZqU#3YtD)Y5GWqZ`kVvmgaolgNwNx{9)oe0gjX2?~sbc9nzBw?u0bfAF+1lEqWAQ*@2V8 zE|Zzy@2DLV>FRiWMJZc^l_4sIy%BSip>Oo{hVv?Wb+2$;pk2ZPuHm3B;e-Cu!G=O? z(Nhrp3@30Xr#NK^%5JGvGz(X|&}YQ^&E_l?%cndMEXa`)^I5pA1!i5UQ>6wD%5dtA zSflzO$!(_OZ*rF6z>iFp<`?3%+^nDi z=NekP^_{+#OH|r>@=OU{>xtk)%ojeVQQ)2PqCE%2`Lt5`5GEQ<$SIaaW&tjsXmw_l5k&(8-3G8rIXqmyKGd_oQ>{Mv`Bi2s{e=$`IxkvQ+kOz_;`>s zzNi;1be(-Gii;(pZZ;1&;ZDPjooPqaOwtBE2_teINb7ODVjLOnc|(Mx2)|FDzR|fR zE^K+zU~b>2apb{@m8Rk@lg zWeWtt(a zZMNjQHp&SAG{q7K&_)|=(6%XBM-(z%p@Hnx4fv*rc6b*9-9JzlZ?MspV#W=Y6oeZV zbQOKnL~=lA*-OU0YJ@u5XNet(@Y-%#OBYLQH+&V9gbgT*@Vp_+TB~M7M(KeJRPoKi z!XD;8!ze&{i*M9RmvA4<8`XH?)4$tbFDn|#EefI&*~p)5G6t~i^*;(|ye?fA7aVOZ z@3Cw6UDDcY#(k_gjrv=iAS8eJ7mnzTL;7X+&P#dsaZB|RMAR#j)Z_zVOT&=Nr6sT^vj>;f1 z45`yCq=4ONQR#z!$}*ZuZZ}|w&8Jb#ER^{+DB0dnK4(`i(WVGxh7p2(ph9YuiVhNj zRAp5p=YxXGQ;H(?1EpyuBAIOs8bc2>iU(jzhL#;~&)OB8nEf9`)|$n64T%SA&?h}i z!H+L8ZEtr)(`r)ELXhw@zEt`}Cr^B6SMi{C+d5Qf6^yd%nG;b#-26wImci<92ognt z(OU*|nWVs84Mj#s7X=IVig=lU%Jp3MeWjFOJer6dTlT+Hh+dNyvHNX=C(fFm`llw3 zI139|Y2ai>k6HfZd|Cs`H)_4Gf>JU9N*Id{m=IxJaEA(7B}*`DADUEzlRliWcB?_V zp{0;66jG*7Op;54$4JcKMGcTwsy^kMT`TX)ZQkp(t+}nK0~zY86yN9*lz5#k z+Ua@zYtUt#xiqINhuADttb!k2sNU|h1;0bUTlfStXKw0(T(j)JNhao)&nN+#_Bg(; z0~^&PSi!5Kes1xIRNrY46Rd$yXnolnqZY5nd`Mg}HJMZP7Ea&|~sV z(%SP_QJHM8nPl6@!%_;ia@mWw3GnVuQWqhZ3jdCl&3S>h*Wfk*__T;?%@CDJYoXD& zi$wQ)BSOL(Nv2T^;!C-kh`6DP?ZqBXHqouZDB!saC17M=ilIP+nb^gblxpjVc?Hjf z#EZTWAB&^mlys;l(eRNXyzFU^e<^}h9rAK~_by@4#T|>g?dlWl>ZV^9^EuW3>{OSC zvhh`RBI<;TAEh+d9wz9Nb`&PH34eenp*Lmn`F$0trwKUmro9-oYcy(oDK`m$Z^W%e z=qxUkq7zE*A`{^TZ=@7B6v?!woRY8BO9Y^K1`YO=%i;$Hmz83~0_0E4XJ@GzPeOB9 zRe@vHY34!I*I9McNFhPG-Ng35dM}ID=r5j26(EuNMtq?08^p>BRCwKvAjz5CEJGwC zd8yFnZQ?vdWLO#fn4;_C{d#CB7dhv2K{4F?<{N##UCQxALlH%?Ffi&TQbybQM*oQW zP!cB_(p0Qfq;dz%f!#I9FCz^UVgi-~euGx>jjG2Ez0giCfTCMjb&DsJb`EL1U@IwI z*wRY*$^vrNqc2cv8iID-jbPxdm1eLworI{S$#uM`rgv0>uRZd-#_CT)yl<38B&z8? zV^5Xlt=H&E9EsjxF_>e93Jts1E4cy%M3n+6d6`xphiXmiq=EI@c5cyN1{)1tkEMS2ef!0Ou4Cmp;u0e{5cj|(X~)RU;L zbArFIjA7h~hKS`+~ z5XeCE>4JYN0j@IFuL?1jfwjE8tUW?qh?NmlQ`)m#!DcfX zRVT^)O`{%UkqGBCLE}-}1Sy&!6LoJ;xd!!%kfqQn zh<_9M&e`U)Yqk<@rHn5Ak-_0tcJlcRoytKH z6Gi$)y+K5*l1_h$7BJ(bTHOgpRV&SA+O0m6B=dC}WJJ>99me8zI`yR_3yE)3Hn(sW z#wT-P$e@(?dq*^5lJupRcG_3i3h}Ipq#w;mek8>t12Odp<6WSzM)h#&_^ z->AQ70bU1YBU==~pBzLe>na=dD^es+_rM6e$|jb+S}FAI2>9%{CN?@#(beX@Ti@u33OFau;KR#j zD&^;6CCqS|t*w-K&@Tm)iB!s9yLOi}24QQuiMa0Vbg7PoGi|C=e@j6KR8S~)*_6_C zjmx$x$mb%Y=4eM7jUB1E$*w7B!%%+TmQey3XpqG2Z3^;?SdM>pwrO0uDk9+ZBtj_u z6I56r^QBZO6~a%cxN0VpR~Smp4+Xf?0Npl_r2=&l2rW!FITu4a;FX*f^kZMri9+fd z{Y|Z6uE}@{%Q5ZIJD-#K&JlHyA++@}$2eevGG{Ook9P>74V=n;#_>_7=&ul#wAbk3 zuv>|BBr}s9Q&%KxQVBSjWMJUS>6cjkms)~|)!@KNqc7#B0_qUmY7=niu=}@DeVJX# zQ44&fdYuiLfd$vmd|4F=;!*?9QdZKeoV|9s49tGK} z2yS3gF#_(h$^2l5T!Y~WKA?)Y-G@swGTeM1R0VoRhD<2d2#>;~yR}68@k8asOW4Lk zYi%SQh*<1aMffaC66k_rc+)xJ^R6hw!{OKm1jj?v7aXBL*0u8N-!8vmP~71jQ0 zZrw2F)h{V%-vy&5+kdw~lda?od<#MN8V{T(Rfhq(0Kn`D-mg`;*e$hwW3%dpmCz=p zZ3dCK0SB(unaE3N;O>>1aJ+}P7cs>XTP9=})Hhpwh1@?`a&#lCvreL_k zuPIAvr`xqno_tD7Z3o?`(^!lv=`TBRIO>&e*bF5pJETWBf;K6CnZP6~|5+S^v4)7O zqqB+bvurM==W&424tg7@)DVvvDqPfpsU+xk65@IQTk1?e{-Wqxppu}!OOAb6_bP5r zn=sQiu}B|*pN=3ArCO&qIhY=Bi-JqA*e7J#Q)+G0=_&JUq?X<&kt5%zN=41}basMv z^||z=$#xx19M~;@YS);kCH85if@dnI7Z9Weoo17ntRdiWHkhs%hai{RV5t{*>b6IG zi*EGknY1C!$4tJ!MJ||h#LEJ+cj;-Q9%KGgU?Y2kf-7z|(ygpuN?mhdI4Av8$#lwm za4IGlE11GkencFxh|BPr%it{H-*<40LRgEz${F--Juxh2UiPKDNJ2D6t1WS=$z^5J z$*v+wgS-1{u2ziq*F2l5GeMIKhb6B@GZ4)+baR5(3lmCLPBjcU?hD|x8CH^^0S6l@ zOazqb<8K<}*mvj-b78R)?vT@4kFt@6{}Ugu8nxZ7%l>8SvB?Jg>T}IA3ffZ5T@l_w z<{K0Ez7anr5mFeJ4dfno+|2?NWL1F2s8*rAI%?5#HM6RD%37{P zS>NLpMd)YDMtC2>B~k*w1SMLE`&|^|y(H*{G_$Ptb6FM|u|r7m__~s#k*dDKJB@phAfdqY_L-iDbvz5TL;w^HivpM^cvGy1x zTWc>G3wWi?kl74c3i!4SHoCxK8#L1e5&dliv9#i{!$Sn&_U+&&R2!8lM;;~?SX(LvxhtVGg@+6 zA?{>oCaqT*l^HP=;4uVEyBNWDcB`qdPvp@t9o*ynYawOL_SdgkYO}U4#wA`1_l;4{A>?h)(X06XlBXYb%k9B2QLaI)YW;>>Z?47TRSR_I^ z4r19rU(!{ig;?o!zLYDZsxp2_Ysj@XtPrCU;wC0Z@KPI@D_1CdqpnneOXOZ7y@^8_ zFDo(1?A_Bvd=Sryn;GoeqXj`YsB`|Q$1(=mvm;;DFSQ;XlA%@1Ny!!^#iLU$aH9<} z^+1R$^*$-pb&U9tO`vHA!PH0(m=UB!OL4tRK{G$|WrfHB?!*wF^RnxdlGov!DV*yx zo@bl4GCnR7I^QVWB1TOQ*L#0Jk#Z#|VEhS{w(#{34&9Ob^{n}8EP!w(AsK^?QA%f- zTEIbuN;~!t9wFiwA&fdni63gPn$;ILaEn>i*W$f)v1ATY=QSHNLlquUL9@0giih0> zi>`92{`{$s$^L2F#Jfj}__S8xhfrk>F9-W3eABPZ#j6LvvO)MC(oGd|$nE(@r zHX}q3&5#>J6{<4OlZ;>H5^35ss*o$&qm`Ncx)%c|iPhJBWFXA7OT zkOAz}J=xT)mfLL$H#+x1k3L#>m~*&Bh9Gn=mzO}`)^i-Q5zJS69H5C2NhOpO7;%7bMH` zQfId)Q|bG6aUUY9_5O0XzB@W71W1NGQ&G7+LJ59uv@MrFmmw@$>);_t)&V(J zu^409F;l_Yg0!!XQz~9RGKf#qgMSNbd4ge#>X%>|mxJFZ#-^%*~9} zFTyJrmw9oH5#F2Iv@N+WFV%{C)rw52v@)aKmIq-~*$L}TeL3iY;nz^90+sM?)=~43 z46scp!xCT)|4UGWPAvollpdpT3+Kl zuMOpW$4L37*aX9Gf`H{;jopG5N=x}OTF&41ag|f=*lg0sdt$+7zta6^0J?xf2g?kz z!k=1^ylm^jln>AMd+IO3frW#6ae&uJ)?bVkx-laQO|vEdZ~fQE+}Y4Ac`LZYB!q^PmqjfkGFiR1vts z@H!a>ROU*ffzjz&(tLeDWtyp$rw^;|)Jp}>0kjkH3ZO*{KjL1S9 z;HTB!LYrqqDsb>m{kcN(J2Eryra6EghNi1M@Z-sNtK56h;g$Hc$jB|(xvf{_;Wv@_ zj%&Pm{LOiS`hmg41a{5bdElTUHm9c{pMV}xDFL_0;pMp*VV}nmicXPul3A?Q+&w5=f4|#yz{G zcqwI9Y?k4ccDQbTl4^MVDUsWc4Y#!DYBx8$va&1o0bd2)v~6O-Z$f$|&BAXh{N!A} zXEriHaVlJZh76+~xxv=?$!%6-5#G4?R&=kGn09&v)Mj!|!RsV>bbg=a7W_fw)0v(q@DY1tW|6!OTPW_1JfiD(dA2 z2<@LTU-pFlsL9eTsOozd8HGQFTK{NvGkD{donEM)XSM7JWnjQT7O=v@adA`RS&`v^ z(20PyFvSqJe2YefsUZbRV559}kYAsHd@gN7S%`8X_ zy$G{K@0m;UL8+kuD^i6QWM1z_-b3r9CE-sj@1@ViK;z_N{M09Z4+BX~^S{fU%irci zsT{mUr?Gu_u_vccc&BD-HC|6D>5BOpH_GYnU5Bd!>E7nkk-2ljpIc0RA4JchLQTE+ zQP8a;xdrCIIgsS+G8Q9gP7FrM zktM_1_n%?stIl2yV;J&ZJvN^%y z?Y^M=V)TznNUWxI{V42DX{+Vi=n+>C%xgnt2#)EsvZO7o_HT7B#vvV)7i?V;sI_+D zNjg;Y?7)>b{tg_AN@!gCdeSs;UTrYkZ4K%Qjl?)8KaKqMQTR26bEvrd)EjcQcSSqL zRr#H_CN@ugvJbyV`D?<+?hWxDhb#{u$zTm!ewqlhhI=`=7vqN=zDw>;p{2-A?5+4c zu{8Yb)+5D`$6q<)NXQqwaxWY1qlf2;6(wcj&V$&K=p^`wnxTP}&4EUUke|exjsGCb z``=P1FBpzW-o5JY3p8Fq?p$6l?R_O6XpS-Gyy1EK~u%c|? zf>4F$($e}xA^+skMO9_~snrz=Dr!RhVAb5Z(z?Z-xkML@t*)ATPEF~83QzjjbT@WG zMctyRg*BeEvN8TduKsc98RI>yH^070>X+7sDi_urf%Lot(z1oMi|eZ9SB5;(@`4E^ z)m3E`HH#`d(`M&7I=Y33k{M9a4cb}~tFDlrV|Q!RAC61!Ut&uSR?IE0xWPZauBv>I zzqF>@e`5u;T_jT75=5Q;T-@p`UQp9t6&p%a!$xft@@p$A>Z;00tN*|Dz689fYHNFU z2xEyYq5^X77m!JX(3B1V51dY+EflC7pwz-?nxt(YO=6Nl8T1wkI8da>AfuES2Lut( z>xbXvDgsJD96kgDMXv)YDhennkbkXn)=rz#^y>Bh@ALi7^SK}Cd-l86UVH7m*B(yJ z*+*Tb*;DCqLNDo{Ai2}9KrSD!fD^p*jNFvbCRSDe8EmGWQG$;)8Op}moMjZ4@6U7b59GhZtTA)d7(54Bo3FMD?_HrlGF4tA% zvpdTJD!nq@%p;o-8NJUzfZ-57;ntsJE&VE|tuxB(vLXb6S;AC%1>$h`# ztF%?RJkxb%hr?xo5?oGQnHh?(4$%34wmU5z8w@h2qOZcHgKNh?pS{w?vw7_^Y#<~j zdTk!4q0S}ufLAd*%L(-yq*PaDsW3a8Hixd#?uB-?RCK_qVUVS~Lv>Izj`coJIJN~` z1VpIChK3N~bBR0|1R6scEm>SnXpbt3Pv@+1ICM^zPdC-BL}$0TjjQSEG`Eqw0ZOvw;MVOE0gA`a#-cU zu<3j@xhez8l^%3?bd@e^mBXe(m(!JbT$Q>q>`{oxxl5t(v9-aklrHAAYr;I=;7YSQ zYfPRmNs=tp)dqthu6fUFcYf-Dw4+U7GeW<*Fg=SuD#jli zxA`A`dQ9xz5C;D}EGqeyiJP~_F8qA#8u5DKf~2SCEf+UZeCv>T4WA7iE6D0sE)!SC z7t6#=*V}fiUNTSIOnCXasog4lgSdp^rVF>N{`|d6VLion5H2NLN%#ZhdyMp6r1+zh zuIMoeiXEb`hWHhP8_3RKUsxY z3E#bI6%;*%!f?u$NjR7=j!?;WkB}*sTPQqAdY2N8CH;33CQv>-;Yi{o!a>9@)kiP& z-ndrWdEw*-8GQ?d(%WnHmYsM={Q8Z*?~iC~5S8?WVuj4F6u*%9deK1n2NEiFWeSVQ z9ut)#5>`<=rBOVSP>HVuRs!AAMTldJguIt6; z_Z#TtUwh+maS>qy@$FYXSMIxenb?`|c+SY%I$tamw|qCL zT&O7%hLOIqTTk7xCvLU4p7K3Rdg=*J@_dvYMf$XaA5wav&<#gfiiJ`C{=*-T9oma_<%Hr}$jL8p2of#&N0Ho5d=MEBVWXg%rP!a3D7I`N}x->^|J%fy9$ zetXE_nXAM@ly5f4&mnw+&5p8CvBfu-e*{baBkC+7gr5lFFu~z z?IXjFtHj2*uDiCcnGKZv{b{MF*liLHklt!4Zx*4VZ@kdvl{KAC zSKck0q;gJF&YAIyvqYFqa#ca{NkSdBZ*AJT@6s+Af9^T>m)wNM#4Cgs2|IUqFipz} zg+cfJ)cEPQo5XeBU!EI#e}-Uk4c@YMVx@4EP#qSsGync~JT&opKW_hl}>V`5^Kp!jLF;9sTq;g5vvU+?NYl4uiFl0VHRKbuSV z7Wvb{4;QVOlRPJ3Si%FN2cC5cM)Ip)NKY8~UoGXkpYRm-SJ}_U375(KOtO0jGc9x5 zl7ux>-!!W4qu+Gx)JwlXeC+*#6L;>370y*2Nj%!Ax3HY}WrVwF{I!+qQ6(61#e}D} z&lWxqzu)=o-yRfJk(`ol6LPx6`G-ByQ&>X$LjyMth<{rW6m$vwKAzcg>zQf7hv(mU zD2F+PDW`8a<~+4p%xgb+>$X2XE|&NDqMI*siRdOANBqHob-gY;KV3XPSV8$#l`nqj zXwMB|CB+X@`gqDWne;da-=TCfrT57GF~u@#rr4iwmSk*m=SxMx+KeaD8#?-g8;I{j z*m(IaabC9uvElQ>r}rILE56)o<-CiX3I!$KWT89B-Aoum*o9F0A0?eemu{qdnL?*i zahs-gC>2)sy=`IJVZ(*f>)w2SpM8OtSorR~ZrXXGiEv=<;-k;+pD%7Oc3&~axIr93 z{9S}2=MG=rciB2In{YkJ4WN8~dN&3BTPSuh&c4w&dn4^9R*Bn}ce(VH{a$h05<|Bo zhK1t6S7zT^Ibe;LG#JB5@o%qL#Qbox&_MbWJN3dKDmR|+Qt_!LUfVuG$e{A?q;lgZ zJ&Slf#kXoVyq^6^ijebYhpQjPl?moEn~tB)og!di#cb9ZWHf!{Aa}I_9eowCyM6IecmJde3Mu2-B=`STKRrSn=URvqWlvGE7Eh0 z6};>azU>vYWBJi#V(pGzh1=>2gbCYzS(vqel(tNn>_BO3X{nHN(uLopN%9xD6lfsXucnRTX!YPE)|Fkf=^T{=0UDUkXzZUh0`*8o;|2=!tL*fTAJ|XUt*PmtL z_rrSboinUZoc+@(_CU(x;;6zCN4FS@gwJkim=kgMA@SX@500Ah#BlK>#mj{))zSWO zqW&%g_w#hiqREpYYsHeDj~naHZxAbv-}~H0@B4%kGQUy$m?PS_L2L}+=vW`9admeBr|E9d&$ zKTc@uk!acRr&+?8-toE5cNs1$&8+O{TjmxXBY7oWBAhvYTb%xEwXm4@pZXlWUR*F# z=(**E_XjLoE|ypC>^gIvPk6XT!4d26HR7&ewuE(yJ>o)&`{jPLi(z`4zwF}W%yz?X z^*<>7Kqz$o{QH6lYsA5Xk5Imyq~~XnTS5FUq)$Wo!m|{8UnV{rf9KI{;xm+Q%Xh0b z_u5t}#F5@XgpH$*B=@|&R6I_2>YX!bL;L0l2VZWqjsL4dc!l_Vgez_RQV(pqS9nQ| zZxR)Gi*T6I4-xJsJV;pZcJlXMon0zMrOf!-)#0ne)WhBWYyYlQVt&%*U0>}TD^4ct zMCr*>_Z?jpxj}qNr|5c{cH$NsuTedBTIzHwQ-r>h-*c{E&HmjfadXaG>b*GTad8mMXLk~cgx6>uETH%#!YslH z!Y*I;i0p0MBuCg|2fV%;UKLop>AJzcY0iOOC>W%&K52!En%W1%L?4M7; zPUxR5^6x^7h0VxiVb#%Lw??&XhcArvMxTIxSJM4{9rOd!Mvu^T9eG2?Y3*v5*!`|M z2KVlTSuuY){M$L#?+0@N0r_J1w+(pA&I9s3_}37EuLFKX2!0dr^&$AZz&{v*e;4=~ z;MMk=2fjK49|`q!hv0hvUlD?j2fic(pACFr2;K^OP6&P$@R`6vcLV~q&r;x%fxk7t zD((C<$*bFQKgp~4)4&@+kD9*(d~66l3IzKDf4i#O-oT?hYF+>y>)S^qpAS5?rg^EX?+zos^@bfW4iZ;47JYssd7MvUc=EM1e!T4{{|G-~? z`AE&<{Bi;KC{#cJ_27JSE(DMB&spGM*arg2<9u`ic*PPW33;5KjsXuZ>IDMwIA0wK zp$F%$ed&Hb49`HodgFZdBJfj@mFpeuplZwYZiMs)K_6D12Q23k;A=wgSAnk%!FPd* zxq*j;0tUA>x*7^WJp+JW0X$4ofq;BE@bw}1V&Ku9=JMGf?*ks~xg!T6soLm8;i=lL zk3^WXx`mOc+WvK#6m9JMHYr+TZQD`WhNy_PIa(u7Dcb(2S{;Z&mQ-Hv0ia?(=qowy z_jd=sMtybRDcY{{Bht0H+Q{(g4%)8JR*+##M@Yu6u`@<(WM zB8G-_2vvS6s*~r)bgbZee*b+)DE*SzLEA2);}mT>EDz^>W`cDN)0^rWs=RbQLX^=>OrSSGDbO@hZIoT%~uE=j78MXM}Q#pr5haN3fk2Mr3Gp zb&=4R^Rb<4+hjl$3!sYFzA4SxH$yHE+qX9in4C<%e;1Yq^_!3FTZ`=*zDQ}^6m7dK z#Xj_he2_m2^3BH?`mY0sbI?z5q^CB#6q;#tN60PrOC6-QgL(}kd#PWb(_8pOy4D@h zJ0euKpl%3g_i4~~<)q(lM?&_CO!Nz=B=|)UcMD8pEFS(v!TM=D1@j6LAiogXs}Acq zAKR-|lc|jjFW2@50vZ4Wz^SYtitBGZhKF$)_moitUFX zY(`GDyi&JaeUnzlZsqGW`dM%ISDoSapMidl>*6w`~9yC0=;kl2E98wMBLXc zq@kHyZx_@H6L0nK;Q0?|=3ku<*1s+iTIKaf&Cw2FOWU3f+t?vuYkQ2m-a&JuBfH!I zQcrY*KhSLQIL3Vbu)*iTH7~Yfkon1W?8`{a=638VD!Q)GENIWZZ3CCJZIOMWElSL9 z4+La;A)+>H){0{G*GSE)6Cod7uWYBOmDm^UG;sYyN6q^a*{P00;rgUjvp`}yZb1I0 z7|m*lJ=xg-*KggV*)fT2y&3tBx@xu+vlqJI^>?>w8j9J59_Pa#a!99nF`pgjso7P; z{=1jv@&tC~HqFly*r&ZU+sCu7`)GC)upj$sE{|hB^wYcyfBS3ZjbrQX(43saY6fU_ z7PGGgEC{PDV7v61e@tW##A;qFX0r{WPZhIw4VrnA*pG(cAhaP~vr%Gu5;WHe*;9#{ zO%vG9iJF6x*lR}3OGWJAA)0lQ*v6rnjT6}ycWF)(vG)bdr{meNVVVaD*=xf!Ckoli zqUQ4gHYZv0+(foIMRRx}dp1?`U@<$Ardc$JeU`3yVG=uH!pb~8A_7W0FhT=XEzdx0 zpJreMc4T6eE@om?U&_LY%^QiOzdjPHy?hkfc6Jn2eseaKdp;X0{K9Co);}6;I5Gxp zSUnbPJ2w^^;(9*zWw8dTyL=)R_(%Ao1^#G(KU(1bc?;CQH@Yz3x4Qn_q51y5`8Ads z-u&j|-)+br`v1Rg0o<};cvwD#C2xP^_)1lLqbmL^#iL|txIc(hE;>=X>pRLtH;V83 zStnod-!!-zcBk}1l+O3LJpJ-@zY9h1I3WgDujO!z%7-n!9Ps}nkAdGa8)B3=-ye2W zq6}{>l+aTKK0fdpj2Lhqi2=6sa=3-i2;ZK;!1)umDRFLR3H^vez<7Dr{fhnVNFLrs zmg__2vI`Us@1^MbiQ-LmD*XTUzlGOyA)5fdxQ1al;TFO@ga-(Z6Mjbc17REZx*Ud^ z3HuTz5{@7oM_5KUm2f`ca>6Zydk7B@9w+>a@CU*+^35=mPuQ0*k#GdzIKnc*sf6E45)PBQ0&Hu75!(yi8c7OVG#bV+STy$uYzIhD3dAygvSRg~zwH6Jrx&;Um|- z5+dN{=n$VUn#o46@WA+NM#ET(V0>H#^O1~?-(X(D_&5mW+b}+Ug889YPNJNYokllhkIJcIP`eIG>SfWIw;v6lUXUmyupug$W2cV?va;p@%Q#AmAb zzY(9T;@<=w>)QYy{l|d65n*^8%9VL)2fiM**3Mr;LKyg`QRRof$b8H8$1+0It1T21 z2L8}rW#?_O0WHTxqAZWAYEM)d2-&1Z?LYV#3DmD6{XBzB=3Dx+6Zp zA%*1b@-gr|*-dQURh^u$g7W+%>xp8?@d_dT#tfJ3VL|W7w5;TW!j~w(DuEAGZUgXG zZoNkl1hsN_hxlVv!Ti_2>l7;JFaE|KijRg3NT_o0Styp=cKfXr&2xiOSCz7wB`tor)5DG#+Y4?jxmWx)zSrYJQ zznkpg^(`enhuVSLIg@xD$@6{YD&p1cyc_sX{o4sPuyX&Bo!tI-;1vtWK!P0LvA+AL zzEDj$Odvh=s`md2@n=cD{0s?ltR=qTppu{e#`-Goq3nE*+zr5^A08t=gs2>L zl6)-9S9aq6PW%O`Zy(|>0Uyd9d_WP3UjjUqt2?PExRLZc*^2znz+=0WsM@(7I3&&k z=V*V$=Yd$@QJ#@J_bUtW_0-NcP`M8iUqk)N{p5MzQGYV6M>QnhDD&{?7M1<~AU(%a ze$oYQ;6t@Tf8f#1nxl$hd?th;9r$S0v@cRv_&uN%J?prh1B#^l%oZ+>0w2ROH^T@p z9m`d(zuCl}RoVX+;&VKT65j7m10Skhhk(a+TS4=4e=7U9%xl@}p4lS6vClAb$=zoP2*IN-5f7ihf5&paW|QQ$+_d4=S6s_NS#TG11GL@7{y1__sY zfDfhT4U#V*zXCUq!*{@kYX5#fhSD<&ch4YgGN!27WjTWoI|wQNAn58>uG!WO-P>5)@(+@o}=e zmYt<>2W}vT4AR5zPr+T~@RY2l<$e9Lz+?NU*HdQk_`JTVvNFAeNz%x)Tq!#%FJF=v zoHwyCV`|cNK`7yjw|yq0K?#N$yrrNXFtIp zpkm7YN!mT`MrZoSdSq>SvbsVUi#1P8RGEJ=O(70(VsGmpR%?~-Xu zI`pv8-O6?Pc)iC~rkAAh>S_s&9D7}G@Z9d3E=`RExr{Ldk|~oiXQt-{3L86OM4l;M z%1=qnHlf1&(P;tYR`P#fsupz({w7+M^4HViRat>eJc@Z$%m zW>2}t?5;3D{+zP1G9`<;|COeY%HcB!aC+SgP73`sa;lU|gFMY)_Ih!I7g-%SQ-jPv zg@NPQ>9NqHK35eS_4kmJ6sM2V!?17F(oC1fJ_Am3n;m)bId*O-w^e^sB?#06h!kns95Qn%`724lPQdS~-dLEZB>~(C3BjRTipr z*d@qgR;A6*%A6E(GHx-~fs{(0JimvW8(L41y#p$*d|`#Rx!SAaaa#xVal57k`>Mlb zwkp$+x|^uT{Jg;OgK~igUnfE=kV(xJ$WV*UsDIrdgjxE!;KX(puWeYMvJ><>m#?bJ*!EUBO^1t+G3;!K-tQvZ&{e z3!2Mtv+cG2>U0+PK+o@RG5p?-DKHe(J%}q_lW&9?iYUv&{BePaLH2}yvQhbUkIm0gPmHKDi#AUGL${blSQ6oW(Tf`-pP}hq5%+`g9VFNY z2}Ae|hQn2Ex3qqHrLJM9&B^~zP2=LBs<7oy-B814v`o2qNfLwaiCHRJj?fT81vhWX zW`K4s=qSNM#2`siD}T!v`B%S$C2wKmZ=&H$5n=|$ucg5V2d`?HQp#{riIbS!>vh9c zwaLeodn|CwP&3>RTwL>fus_Wm^?Sy!U2&bJTMzl0Y`^{1L%s!q>PYZ;H%mo}-BOEv z8lNu$LpHE0QcobE?Q;09R91y?1)0&s+-V z^C(!sui&G6HhsCXN-wXQ1L5O*a;(DatzdfVbSLCg(C1N7xTDBo6p16{ct zKBkwg(!-^`+yzk|{G!D4_-iK!xnzgX+bZby%?c|h;V~%60@JhnIY|jDhPy{unex-8 zqJv*gwm?Qyh9-bs*<5p_-2zHnJ}g~HW_s9)F!*J#62~t6Cj5T`_?#IYF~d7CO5pFi zaqLYz2mU;k$MtaW1H8k@^YiysIqs(fcr8N?@c1|=;P2z`2r*DTe}9f+S9)NB<)SK{ zpFeL(1`c)e^7(sq9Qk{(AR>n_enFTCi0`QK{QP~q08$2Se?X4%7Xacrubk)a?QuLt za%eyPxq>#S{$dSM2i}^8+I)62ASVjK4hQHU$ zu{)$S4_Jrh!3&Y*`T2W=9Cf^6l!-sb;CR0(KY#y_BbVc4a{GDw0abqfo+8KU1}>?f zTHiude*QiqM|fQzD5&edg!1!h^7kG&cDXqyJJSV6*=kjO{(dCKNUoUjsmp&tm7l*y z$?+3agQ=qIIaPlCz9q*yf2I7_AU`}Jmd7AK;JwU!KVz)P-;`L(_*;+wk9q_7`TLuP zeq;VKkQe=rj}QJnUz$m8e7-1aY5K$SbG)L;k53 z0t9ZS9DzSPACI>MG30oD{yaC9^6R)Dp*nvQQu1IDJ}>2EHy4fR zr%2w!Gf<)`DwnP5Vp+0+>_1Bl0RQVHhL3K!{WzCm!1*Cm`I()Sl3s`Bvdx3K{Qm=q C8*niI diff --git a/source/HOAUGens/sc/Classes/HOAEncoder1.scx b/source/HOAUGens/sc/Classes/HOAEncoder1.scx deleted file mode 100755 index 9622cb40e9648549b6608550245f9d14976b9484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30424 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder1.so b/source/HOAUGens/sc/Classes/HOAEncoder1.so deleted file mode 100755 index 74c5cae8bc7fe0712fd9989e3cdf0ccf1cd749f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61416 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder1_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder1_supernova.scx deleted file mode 100755 index dc19e5f2767c0da71ae9327c89e9a6644bcb852c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30432 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 AK>z>% diff --git a/source/HOAUGens/sc/Classes/HOAEncoder2.so b/source/HOAUGens/sc/Classes/HOAEncoder2.so deleted file mode 100755 index b141516872c907630dd7279a8e532ffc0efd9344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61520 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 Ty7piEsvcY4WB;{ynC<@y1-1$= diff --git a/source/HOAUGens/sc/Classes/HOAEncoder2_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder2_supernova.scx deleted file mode 100755 index de6a4719f0f915dc0ef3767383cfbc27eba369cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34536 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%0A5ZT)NDw%K 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder3.scx b/source/HOAUGens/sc/Classes/HOAEncoder3.scx deleted file mode 100755 index 10c1d9802d30e6b5b32a347f2f5dfe605987d9dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38664 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 jqKuqk-sYn3bl20D(Igl{qN_F7BFI`jVD@B7~8 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 qXNXP7BP{!$LZV@3O7QZT~-xqAAY+ diff --git a/source/HOAUGens/sc/Classes/HOAEncoder3_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder3_supernova.scx deleted file mode 100755 index 9032bbb408073835b48eb82e965a3e518b726799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38664 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 R5o#C5umX%$+)V3K{|~+Rq^SS^ diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4.scx b/source/HOAUGens/sc/Classes/HOAEncoder4.scx deleted file mode 100755 index 7ea3c1a12d0f0eb55fb45895d17e6b56a7bb9c94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42760 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 Mx>;ONGZwr4AHrw@M*si- diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4.so b/source/HOAUGens/sc/Classes/HOAEncoder4.so deleted file mode 100755 index 0a8d69693b4a937faad4f3c1a44fa174f38d2bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73920 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 diff --git a/source/HOAUGens/sc/Classes/HOAEncoder4_supernova.scx b/source/HOAUGens/sc/Classes/HOAEncoder4_supernova.scx deleted file mode 100755 index 8db9ebc108c53cad8d8e5ec2f71fa2e8d5fd5a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42760 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

    %5#X0O!799`~;J{-6WTn4 zW|E&~lBb*G!%gxGll+$^xyK~`l}WDEe4ea@ldgGim_w^;t4fMqf?1~3ypa4nEA?g_ z{m?K+@9<;szw;C?Qj}LmqF7fiKEsco`~YajI#hlj$;8^!T2!`KEd0Jv)T`GSA z%%SopP@aZ-totYG|Iw6Br+k;nA3=E<%CQcWA4qu`!m&1$|Na5wY3RmUxc=s0 zjs*?9!_QZE;Q0lkoTt>H*rCRk7RmVl6|_ha!3=Fgj~4nwtLZuF%2W)~FE{ZpJ$!C& z*8=A$xemwN=V??L9H@V{s-JZ`*FQ-0pFMbp7V6fXjh?Fw*si^Huqq8?PYBsyCSx0{ ze8HTH!Q)u|E3GEyHdKH~p--v?YvG*JA&+LkBT)_i&E1}q0l|O+Hul^LqifD}EI%@K z88q2$w4WmF$B44GW3C#nkjLPd-eMo?6>8xX)mrEWt?rvD7YbiNp%y;3w;>3JY2nEM znzd(XVGk)B3x!QeVS-5^v>oDgiQ<*zTKKSDB3!8omLWgk5-l7gTKF~|lZmq?&eS5e z)k8dS#>DA)p@TCDLkF;Gq~(VnB4sUn9dT)4&81Bk^634;9IbAMopm0p30mWn%-({! zFY+VqZ4f%DhUbMZ)U?RuX?Zm}256zT&kqkCmWS2mfYUXg_vnK0`?S!W<-77rKgx}) z?46SN#rcslH&VsCXFnUL;++@1wtPzHbJd~`Ev8O3S`0#Q;`kSwk?W~O_`JaR;d7$E zjPt{TqBYgY1CiF8wIP%)aPHeh(gV)ZccE<;N~)b1FP$Gbwpoiz{V{()Zym`89&ldT ze!zLz%h#qkPa%2)vTe`-TvR&X^gpYO?^(VNnWOV+whf5Qqu4g|?j#FtycQWU72WlP z-p>oq3@D4e7CDKXKf-wm+%iQg zh+Lbd!Q}kVw_11*lFyU>9TR(x%NzfBLFnM}ck{y6!1MxNUU-HU*6I5i55C^l_BJkP zFpZa)6K8DoV>z2R9fo4u)_m^6c%6@ihG&q$pW!dnD7>6>Vnv1G+QMFnw zO1)FBhJsGj?=&i2Ok#*S_B)j=m$fg*b!L1=MN6fq4MjcpgZ*R)(Gr7Hai-kg2+zR9 zJ0_(g9&laClTl379h0&tyJONh&wpKiE~F2qBN#g-c}e;=n$nO>B12P_rqTbG2k8HK z)%5@E-Bgamtv!;sp%a`WxxPyhPtqd{;J7E9@%9YHTZxBWJqtUllwFQ=4Ea za;xAVr>nvZ7o<%htcp>WIZHQswq&p_(A9fq36WT7hZQ z0ap&bkla5ABdmLDC9O zN}KpJU4PIfB;5x+XWb(x4Np$f#&2`h-mFwo)0H(@!w4cdEmse~*zTQ{o*y1^C`94H zwEWNqx#7ttX`wGsK5ZqHPwc%I_N0D7$Bal$y^)6C=3=$FCJR$30~0h#ivq2a z&bm~vlUpXnms+)|=a1i0^>?+zt$G=D?B2j8#meKyHN+{^cg+Ayy-^sWDbw8^=h~~V zwn3iNzKY}-&mo=j0@5h2QZeQDX0dP$_Nmc-DYB!*uniILYzBI_C?Vmn~J?l1H@PmPO}!$Rq6S0KF?y{Al~1g7c4Dn+XYC)j)_de(8qi^>;B)DLaMm4# zTF!?i7vs>am11}E=|I(NUg(9Y6&OQztGZeD5JYmq)iV5IPhlH|%?0mwdOPwg*x0b+kW~+`!n=l-n8G3y9wPFMXf2-#NSOdDHPp9X*qAM2b#=&NFnR(n3ks{uz6@ z%&)PAgtnnQ=RLz5&(Ic|7mX>7XsRlE9%Z|fE!d~LkEJ4+Tmp0{R4dFOT6hYMYw74_ zvKE3~(g={V5ba_gx?2l-lj#)e5^Oxxa}=gMFdgrCqxB;lKi|ah)8FUd8JU`_jqj!v zEZJH6B-X+F@Y3Y`@P!$9bVNT7Z6Be94it?4M?vVN0_S;ek!G3}!f~dcZl|-BmcRVa zP7NEw(5v|nXXInwksfV1(A!(rmXFN`)+k7wwY11M>vyWrS><+V;Z<%dT02d3R$1y) zdF$G$r)i;1+BeXmG*%tx7{3Zu!A#hikK=poGVtYxdZQCyfEM)Xg^SPq@M@$YM)ck`(0 z)ZxFtMOrujzhI?_zPO*esVh5c*Pwp2O1JTKb70%k@ zpa28vm%xzih?V1+Vstxt7j(2pb-EUM9_?TjPxj=8ui^HvxS*}>`~f}A+QU%2pza%I z-9gmCTwk$#fFt_cSF|5Z@bArMV{(W`7m!EOstU-5f9dY+%@1qjLkyby&`aXEs@Yl? zts|1k=(Olf;G_|fkD58;u?SkutGR|ewiC`P2>le>i8hS=AV$L<)Sw#hDz4Z`O!p^>-BLRS)Ne+V^fW>KBB%3r4i(t;X>k1LWr2U_pjdb3<*;$PVPm zVFO|>Aw~P!nqFsqXq7wLx%OgZTkim8Ej@%-P={fHI63QP!_fTD%8W_d2W7)sD}C@O zI=MJQ3$66#hkCRD(W*44FFyvZJhKX}Tmk>+>tM}KPAyd7_Bz-8m7HDk6ZlnpF;eQb zk|=bAwtdi9Xkw4^F}PTRw-B=TqhIZV?KQdX44n9M#{Q`eDj>Kn!%>x&AFjm6U7DO1 zo{Is#KY#oI&3WGIGSOH$f_k>n-Uc#-hoTqHkqFggW2*23r}R%UN( z1X|YlQ9m1Xr^oBUb+nTTVQhxJ&kubQJzR|@gaAumdhAw?%S7j6ht^N_s1U@iRk9$u z;ehkqOZeX_^R#|G!)y6|9BkoL^~T5)i8q3Xu`!JDmpkG zX6}j&KstWBq!FH?3Tw%H*t?TNsk%PQi2V!f(bJTJo{w%)xI6k05aUx{-?6x_{yZ6r zj26o2xf6#QbtH=1>FxmOj#_sYk>jHw9p$9MbR4L4_h6~OsZwOJi&PvK0rb&AweD^~ znk6`3eSbR+KkCp_tH`5y$|9`&bWjKvjt&U0zwcVMg@+yiN(*4=_|(M-(9+^NAw8FaZ&%|t9vRNhAA z2qo!7V^oQbYT8!a@p{=4`0g?k*GUDBwiVu1UuxDuf#d}tT$2f}MaNdLsr4_T^+ zU|GGAVs;~HYJKNX<%LgRIo5X>Rb5n$AwYW3-$i*;d9|(h4%}H4ctS=mc1RUm1vX3RsQ%-@r6{rB~s=4e56xeTk)yvh*8~ zZeeLpqV!KJ{egL%Gz=*IEFHkoBSgBCrAIPDvPdsw=~9*^iS#^{-jFEuC@BsoGOqkQ zuKaYiV;)y@W0r;h=|v}e%Hzt<w2DCREat&6m;NN5c0XUdyig1Q=LMhv=Nd3(WZgcJjW3NXKfLVcr@8rbF)&4 zA3IJnjvLd^z5iF^u@*P=Y~nEu;&?p%4xiBcrq?l0JPK7|JRVzd`6hncxceiH2mJ6f z_bwifv#BVOItS{Q$@7bN9y%mS9u=i6ZaUAVK-H?0b=G(#R-_$GQf;kMirUu2B~|6v zUM^a;i zO`JFP!<7ExWLbyvM(oR5jqMpuOkPI<%?DQv&JFe8=#JBS?4NCp?-!v-n|1gEh~se@ zu8eTjCP7GXI#CtIw zcu-rU?zf2*>ugqKdaN>HYm&)B`tfogdeMKJEbH5U6Q|?RoXvdt5clHaak>Wnp!xK7 z2q{hS&+5|&Pyqj=93sh_2qX z>OAJhK{$^gS~~w84rBN{CfEI=oXFrR8A^lKJWcb}avp7iJC&x1ZjQ*D;kck(Dx$5*fvkaULR{XWH^`3AJFBjJ%`d%dkiHaIj3T; z5M7Kw@p%-LtRr4J^#X5bzq(je>kg0?!dsNb@*^AEEy&|6f9A=!>X1x}VKw;-AKI6y zqgD_C_>us^E$%j|5xx>vESW7Yl1nH1I6a{PoJppU#52+P_?0J3te@^a8QVE^hItZP zM=j9KpUeX3t4xZ$C=yiGNdhkGqGa?2b$a!*Qb5oYHJ=^$-lGwLa|Y<;)x3ZU{GZ_* z?$=66rlTl8tUQdJwcR*Tjh=|&*r!P4)%=JnQ5)Q?XvDepUf2T(E*8a*!l)pZJL?u> zFG)&i@G-7Or9)>suVWz2AO9`dd+DEaaSq2-sHn5z1|-O_9u*h33k~q{MJd|!D~I7S z5c!O>qW6M>j^?DGZPlNZ!Qn-oiq{oYopo+6F^4=`&mwgkVs?04qe=q-Vo;4@^-@fr z&xR@;X{e0S(U+;INcjMKXQP+8?$|mC{}Hh>7Z+*vL~mEN+^Dp1&sQ6<2lveKos$4D z=k-o<2-ajDnJ^-zPMy(=%Hkr=A>5(-@v(g8c`*9DZ_(5bfc<8x4Z|t_nwUNVQ=uK zkySZf=hmO16VZvfHl`9hRDULxB37SR^W!P`n2Mx6 zX?t$Q0LO|P-Tus-u_ai^bpBQD^w&B9UK1|wFNVf)`qW<+p>lI7Vu+T6Z43$~o zA=B3mL(fuwuYeb0Ei%ZfMaFJZo49b&hxPRR2#?x)q7uF^gHhNE?k76QOG&4ys$2My z94)QnMobmDfEayLJlTU~#B^u)61v^B`USe~Xt@ugu6M=$Mc0aXeaBH?M3;UYb_CsC zS4SUbB$d)M+-Zf9^<4`OcB>%|8GVe^+_c1#aa1W`IoCq%xZdup{Q-CJwYnFbb^9q1 z$=QPAdbAfk)vr4z*z*kFC8*&mEvJi&Y#^p7-v@Cx38`6e7 z|A8N9P_>xtX;T?p$m8T6m%X01bX`mKKe9o60cIh>=9y=+2_l6SXkzX40+6F=!&@O_I*^IZQ>Q-qK53h2pOo8(lbL|BSyfW+MZkpt_-o ze%RT^SBn04g-1ne1d(fSK8vvK7;m1({ zL2%YRNREi)yfYIGyG;$_D?%%A#N~btGX;Vp{|jlj`afy70ZMw0*JFuL4X@+1qL>=q zME+Mj-s}!yZaCMT9{2GFIOAm>dz^I-)80cu?^oT~&!PV^I_rIoA-NZ!C+~CIPkxOH zJX8?B>ys?f7LxLLgtK-H-J|@n10i39lx|V8vM3n0=mFg#oB=uO)T}@VXsC18bMbvP z+SNgz$wXCKIF)}Er!(4sn6vh3ay+d)zvT$bngK`LLsp3+8dS6Nu2v30D>a)C{TpdQ zqG@U=9{u=GlWEsL&0-Cqj$&`Fn*S0vbkv%S<}c(pbWTU}r^TDEpquqa#@pUYV=!SR zMlmE3W@4iXa(pJXt1}90!63HI#2a6wi0Ef))cyEw^S7!f;q=Z~`#7#rMrWZU_5fXu zm8ntgTpNmy(9Avt7Fi8Ug9ET$^LY6_`YSQe1+mq@z5g&7*qvZthbpodxD~faqK}~@ zrfv~Q02@^Rzb3z{)#6ebK?zRWM5q1c<*YH$#u_=dp%_|ioQme`mU3)H&$P2~8g7|J zk0u*6r1U}7qHNqBxAD*9QCiV3h@ExE(1N3{w92#(_30K>`)9i&&x3y_=OuUuHZ?+O zXRfohgeKipD2~lS3j6PCuE91ulJnp+{tDa8_)ZvI5u_7WI+^K>RzO)@VXx(r5R7gr zq{)_!(M$(iobnup0Yf)bRS{I^d?n_lZ;d=Q#Zk|ybiyBV(f2CQK)W>XZS+WL0Haa%p)WyHUlDCv++ zRCM-Tq2g760+5haY|D3K03D~nG#){t4ytPVBQ(Q>2CEOY7SM{#`JQOh zcE8H)!}SP!jUqbApz07RA6e8z8UCipF4g}Ew~v@eDYlkQFmxt-*F-UW{Bpc+4Z?)) zoZvLiV7f(^@V%2-wHCy7{1ETj7B{VN=-nL#Q9$_xy5jnv$xpe83}=^AMtvk#{Xl(0 z^nws#PnQn5e1py>bW}>F6;qx&`3?C2>$EBY8>zY)Tl!c`L=HvF@!PDJ zD%{0n6lulE4R>vE(>fp?d-x^8V`3SVDyJEiT`HETBJvwq_6GS4{cKijxONjQGss$m zj0%aYP376Tql8VBfsJ%y=TkqyM)N-}g3H(FYO2B4A$(L!d|i}hw>?7+f!kCO=twp8 zwhF2Yv~ua}win}_bt%4FcR7)z8)QorSq0=^BBfZK8nQC-HCT0>!O|iD&{P*yhP!x% z&}c+MTCoMRi4Eh{_G2{FY2MPIKeq7;?DMf{#bvDcKK~zd?U2t$ZtTEy$Jiza_XR2^PK|z5Z_y5NK+?|T zbVa70>nUaJRC!-?s2U+mLV>Q)uL`>riCk5$QI~3#Z`|9Qa2P`C##NjH+o@ISq3b;* z&E@Z^c&Oj#7WS6Tx*51)6{G*84=v>0c=H>jo;ul5Lq)GQl>_-cz56w=Vn>DCs}Y?0pvhsmpHh>nS^8XVN^v_Xuax`ULz^a15<{$loM+ zpXe>5*#dc|4s^|FF>Da4e z$5iq|E*vh$iNkt}%Z=|JTA!c&-{!TNsmTLO&m;UF$h$0jiTUtUJbakqz_$g0I9B4h zO4mhrjFp6Q+mV^&I^ZmN4H_=~KEeOGf1sv^3$=)b`->N0l^JqNFc-AKBtP zRtqKT_K+zS{gQvDZ{jXsU3?FdxqXV;2wwy7oAihN5B0xTqHOP<|KIrw&lewxXGL&h z9e3Jy|C***))lz*OV0+YXH_DpohhJtt9`!@R#vlx|?@xJ2pGwo)QQYZoW#Ze!j2MCsKm zt%WHj?@V9@iw(nBnw7{vN@#6rqV#;0&PA1pP1nGh=m0DUUPsNr(Fu848$v7aprUKY z6O-wY#?!acQ^?LWHCW;yO`V*}4?{ZF;-MUpWIYQ#{V~YDsXBPn5l`%!LR1a#^b2P{H8}={d+tSz+WV#w@`ch4dWcN-Ch|Ag`80>Q#~$S}lp; zDQTz$>Db;-DV+|WR9TFNcBwZNs%KNxbHgjt zbHkPDx#5NCx#7FI;ca?K__iKN+}uf=kgV+za(UkOnJz`1@(?}mOA61(^TdCV=ZWu< z=ZSBV=ZSBo=ZT-!9|1pB@5xh>s3-CW_+ylTGloAZiJ@CmF&@e8g8VY-!H^H6EVW6M z$ur=0h&1VTC3WR6qGpt8B4(~34{=e}TD>Bk0k2`%@J)13Vq<$?jhYQdmjgJ7dzlVG!8 zi(so@n_#d`jKF2-zAtPm?7v9%og+tYJzlLLG_CT>AgFY4+zpN6Uqk# z>jfJG=|Vb{HwiWiwg|QgwhML$b_#Y0Mg_YCdjuUkXV)eR(q$KFkFJjsrVDxmvjx3^ znxIe6FIX&CE*KE377Pm33$_Th3bqNh3w8*03PuIH1$zV?xJyBH(-$ZRU4m(X>4F}? zY(cM}Cg>CN3lFV4!5%@pK$rU~ z=n_m9%n=KL$b_@0h;)TY_j$}cXV47gMApP2&>Zf3~pjS{6^a=U}iv3yGcEJw8PQfn0s9?8Xk6>~#_s1oeCYUamA?Ojz7W4{gf<8gNV6h;*Z%oBk zuv#!ESTEQh*d*92*do{}*e2L6*df>{*d-Vh>=x`1#EY>x&Vnw%G{JPi48d$cub?LA z6Z8uf3ziE81giyug7tz8f{lVrg3W?0f~|sWf*pdLf>FV4LHc=H@^`YJOE66^T`)t? zBbY7d71RWMf_}kb!E(WXV6|XSuwJlHut~64utl&{uuZUCutTs@uuCv1*e%#2=)hfe z)o($UV47gMphqxU&?~43`UL%g#e(!6JmRkw3<}l@HV8HfHVL)}whFchwhML$b_#Y0 zMg_YCdj#>ri`-8^mtdM;x*+|kGTG}9%ofxHeS&_$VnKSpAJq#8Rtp9N>jfJG8wHyL zn+010+XUMMI|Mrgy9A?x-GV)W_(5Club@kio+TzbGXymd81&HV6$M0V5?xeV25C*V3%N2uv@T4ke(u-c9I2Mf@y;3 zf*!$aL9d`D=o9n{77NmQB~?EKs|ACC^@8;4%BsJDO@hsWErP9r?SdVGoq}D0QNeD( z9zlmo`YY%XOcP8O%npCCOdN_H0u(t9&ie+8=rgM#&f4T6n=O@hsWErP9r zZG!EBoq}D0QNeD(9zlB8i|k1jbP1*jrVC~WdIYlty@EbLzaYI2RP|FZC|EDpDA**} zBG@X}F4!U1B^VX#5u~4lpmtn>X@c}Z0g`(Jy@HycU$9s(AXqI}FW4a1B-kw2D%d92 zA=oJx73>yt;1Mw8XTdbVbU}|`wxA~H6D$^__oxz2wO~-NL9kJ|32r}_1PdDe-TeYB6= z{LEo|QyFh;40UKVc(br^`(r^vZ0}$2$U*$|G!3y`mi)_!dDFYG=%z(Mguc+B-eFAd zEEzEzSE}jVTZbT1i40VFeR!ge@(V2aQKu%BpRDIq{qV?lW(>nO=Dg*3^zy$q@J3wR z$-^C~ArG88fNoPI-3J71I@1>5QIuwEZ+d;jeCMRsmywW&WYzyFvB7FRPYuRfx?xPb zrODFLx!h8lTh*tQT5w^^+7cd-v?ct7LAd`nZ2Ff#n0}Q(7_}ul_)D=k!NTUzaSQJj z!u3oz+8_-4ye}GbW(m$K>2@uhY_v2^S{lPG?K~~+i#8mr`}$%eEAVKDJNJRixaptf zurEFY!WUtK(2J{deF;HV89tIkK;X^+Qz` zEF=Dok?}773-{2d%iVly@c<8K8cz+jguk-2@N|Rl&q8m_^7iSrSQQQn9Uwq8BIFk%QhwXAQ z%a(BK8F3456T;sy;nq{)<0%`P&At|%U`tqF5S}N5lbCRYL70K7vwaC)=ka0b@;^_H zTljT0clj$I#*@b&Y_cV6vL(F2Alx8?O-vX&Io{jGsT={Yf9; zGU6ZRnwFMs%82`7sUN~?MCLy#nn)WQ?XHQL{AJ`LY} zrNl}-F%1dc@eh3-ufRaqQ=b9C2lt}|WQS~_Y-l&#BB%3^^xliTTG*hBohp>Adg5jz zP;uxoRHRzOc?HsPVlkiT%ee!J%{VO>LnM(bztOvMcqZjVrsGwck*rBl&6jOH?a0?p zU|t>;?~ViQP}4t-R^1sQ-T8{Lq1`A++Kwd6yDk+GJeomY1&i+nKmUbNjPC|p^p+E* z&1f{JPMrqCTOP6$yu`nRTYiFxsHGm;*k5kTT%Rt?vyc$qr3v$~%)HcKPP09pyKR}@ z$M2jdn;$?zn73xK%})a1<}(atk1g}SW5qiO-WaPhA7U`i7v^GS{y0rlByVW8%yW*j zW4-}rrpo5o#wqF%!h9$*uQ!;BZJDn+#*Vpbs4zc-gm|OH!`|2ogg0gy%+p$&L7B8|95lkPw@HJd17a0mA0?<5g$L&(*ff zL0jez@t!lq{8uD|`5s~Z6Em+im>X=FPqbyu)|n48m^ER}W#$P6bF(e;8LVLO#!YxZ zkFt3#5@Pe0qu3jJfbhoGJgCSUZMMvx*p9l7@ry%>`4J?9d7UsfF!MtObEhryUAD}> z)|n4Cn13zIXEXC6gSp$5`5KoBvBet=X<~B`5@K`LNcP4*f$+v@26Hm5U0RPHk*s5E zZT=L$&!oKZC=$ZFMwqW>=J!(Lqb}W+`Cm>uo6pgik2ILi6y^+OzRh6Hwq;(+3KnnN ziuau;n@f-on|Gec-uMR)-niIc_SrH|v}KOsDx+e490_5r7Un8uKGI+=w`Kmpb`|}N z&OF3mK3SMgVCHRHk;Ze-mU)vc^EzBnRW_F*AvV8o2799o2ya|xFgMyVSK2b~!8K*Y z`~(uhe7P_$VCL}#bBitW2wP^a&g?XpUBWz=nGf*7PTpv@W&X%^<^Kb8mCa>Hh|Q0k z&fa(!2yZ-KFn8H9ueW9X9P?E%KZS%aUnoQbKSY8l>(4q(_|#8 zjTJ1D^G%#VDdr7G2y>P&XEO5*1~Ux=YiA-^SKBh5p)-Gv z(2UfXf5bVkF#jD_(J6v2($(}x)>4DH$(DJZEprVBmCf}2QDI&t%$3Z1ror55%Y2e8 z^Em{XbgQ$GHYpF3=s-?BYGo~1J%#QC-`KZ6VPCA%+=HCnREzEqn!Q5uce1a`=7}sKz&2x|tnU z4OXy3@B>`rSIqQnXkq>USE0!p@6pxhNYCA^3%xi_YhMD~ab29dB zeP_33%N!XfHeZT_*gR60M=&lU=R|d!Z zoNdeeG%HyAJYHu`Mgnw0R)G#Jfbk|&paz!c7p{x>(n{Xy7ksJ(x!)GCoq`RxM+=je zUx7z&iPtUWrn9+IbZdmvdIMVh@Kgrff#-Ms^>*R@KYlD>)}hqf)ItEgV=T0LBK-*1 zA+aHN;a3C7$8q@>RsN|_PS0ag`SVAr`VEIseWRSNJjDv)&#gv=>`PL5djSdUyo1M4 z;=iu~z9Q!HDn7#=#kWB{x{^zm!iL<%e0Ny+&a&|RK+cS$c3b+V_`b&jy8K*iWXMI# zcY&3!4mxK0ZezYCJ3gO@uXm7Y_Xj{ie|O=5UNheq=JVO{-3wjazK57^la(*i!uRUo zs$GX2-;a2_Sm!HZzDulpYoTMd?+WH?vG_&#Z<>kE$$Upz`QF3h>Sn&fn6KE5uNk_! zea{@C`tcMX!GB{ce1FC~LwsF!de>J=<4>pI#B7o3`poN{kElGzJ1aQQVx_##|-vle)M|eq;nXiWV8tnKUgs#rF z&!O7g3rOhicnjYt%;&Y^8)V|Ui}~)b^4*LVq?qk{3IhfG?Y8to^>+?*b^9)2z6-2; zpWwybX1-a>*JQ`n0$rW2x0jab)E@u|{heUpJAlAK&u7PXsEO|(=G$cDy9F=7G23@D z^EvGJE`_dcUlH?NV&(e`@8~k~oxyx97QZO}JxuTTqTe~d@yN-1M_T!EEPOit=(ht?&JD{uc zox*%4TKRry;fpX|z>e=Lyd+8Id-W&P-Z z@@<3T(BBSAKU9C$Lsz%&Eap4I%9ml`D`CE%9p8by2H)-5Gb?qa?>tbA`p6ZsZ1U$>oJaK0Cew6W>G3x5>)a`Dr5GMCNnY@%3mM+JJQNm3mtQRuVTJpJHCrde9wHR+IKg^POnrTLT?)e`Q<+ z?D#G=@x9uk+I<<2(BFUJhhEHlpR=FS?fCuzUA@28G2con-)IY8i1|7!{ZRe=3Fm-1 z-&xFehLx`#I%fNR$$UXOzCshBH!)I=e6V8 z1YNzqYk1t>dceYWoQ3Z))*Fp(XMSUxzCZLHnx*siS!`Ef+%7u(KQdORm+xRdw8Z_O z%ITXkv0svoZqGM7Zyt-=ZRmadPm|tfUn@U+1YkdKdkv(ct~YRdUYqtx%{*(kz0o%9 zjW+A8;P#fq+mq`Xf7`{^FJ^Ihp|w0;%Exi}7;E{ice(!YTz-tT{BkM(_Ft;M2LK6i z|Lz^G|2CJuZY{5u^2fRS5o`JJQhpnk|IS)|ZzuDw;PPeG@+>Kz#pQ+8@)z*ZG8GRl zA7d>ql=9=b{1|Kbi*IrLZ!tizo*uA{Q@@nI&E>CK%RhUQ>p#xrk66pEl=9oS{CC#! zBq?9P<;$$)>)v4gSzKOdEk8}l$8q@>Yx%>kbN%DF{1|KbL@EDvKldMy5dX(_a{aft z{B>*jc~bs3mp@`HfAcl2e;b$o&RRZS%2#mtGHdyP4(UIa7h21&m-2C3KE_&}BIU<( z`7ze=wRkBqjh}D7;{F2?`cE%Srt-JB{B>*jM!aK~${*+QN37*zrTjK7|DCn``M-1h z6cmu0M{;$5_i}QF);j`T@@$c}>5~j9F-h|Za zhYfQ$>&D{BI0Rk@LP}5w0euHhULLgyt24bk3QvvYyEEt&Qb^_Ehwj&&fGgknTZ}Hm zp%t(Gab<0s+Sn;;i9bP^on?i(N>lX|CDhkBdXDRp7&Zb7V5cpIS*V%!Oq{CCd$?9cO%hb!Ju23(VDpfC=x}zJ{&(UVe z?{LIWiEt;?grufR5>KV!9uzqKoX&Vh2IKFF8N-bVU1z${3H+iFR5vv#Gw{AE7i1M~ zbT8$RW-+acagz(x5Pl8eAAJgqhg>wcV=}(KNRZ8--omtFvX^r7tMS?R<(|RAGmvxE zje@=w_WE%7-iu@SCB0pI+$9%x;Yf)Q16QU@$E(!W?!-lC$g})Pp79*gIn$9wIet40 z|FfxCnv%J47*R&uIfr^Sn zHc!Wh6s6{?B6+9SRFNi~r=+eN#)Rp32^VFJ(JNv)p2f1^w39>BhB78h$1}MoHCL~e zI2}_-Y(E`OkfOH#WID4@)fTBf7Czmz784?7|Ae0)vj zV>@;T`iuWwK-xMVTb0a}!)sDS3<^^!W4B%H=0u=G1OODOMz&cyG|e%UEp8--)v(&ZK8{ zXW&5j6DHV;c-QFa&ozAQMhoMC;97SBz7V2?C*eiD_%Sw4<7KI}ZhF-U2)he zr<0ssxq@^CrRlXRNP8$vuU3IYXB#C;&k1Sa z>zgF&;cT;HvpL%$SubZ>C983^O|m}DwoBH}*$&ATbGB2m<(%!3EIpnJGoq5M<}4i{ z$>tzudn8-WSzOmtr45{=+uNkv$XR@cMrE5gt7ZsFn^krIDYmHOL>1~*PODJ2aax7C zozv;0-@$1W>P}9pPSd{ zoz7_$>I{`$9TZP^IID*`o3nbT=|L(jyjl;n#@QyR>*K5*YCmW7P#1Gn4|O?b+oW!Q zvwEnjIje^{$XPwq^_=aJx(%GwL*2+(J=9H{)kEFPSv}M(oYh0!%2_?sZJgCZ-Okx` z83-Mm&5&#-XFZbb;%v5Lqn!0hwwtpWvIm@VE=tF;n)KIwIDrV?9e`}VbM}ziRrbDW zsnNqVe8}d9{~A>AM7cIIAsc;TA?=}NC*`6QEL*#1UH2jl zYv!JVMf^i7-qY1)3NsuPXzu{grS5cSOv#2u`+n!8U1axnUn+xNM)7>wBdWu>)Bg%m zH@Y*p?u)2Z;H7Ro5AEnoX??q@>H;f>xVcN+Y4PSEO~J3YfC9x+0ysd^`%clY|0Se9 zfUuw%32J$R`V|<}q=v0dbov6dM+93P^({if0XTfVYLTkU?m~V#wd{X|Ta2>~Igh)9 zmWY_Q-8Z^5-WpN65gJe2v|byX^(jqPq!XT&Lfz0vS6l{4&bWqu`UNSHB|3{?!%i+^ z8=|TxS~#f^H~`qd^VYAxBA7Rzv}fYjQ82SC|b%VZ9X6$%fUv zd|o3~r?KMj$3G`UTlYrz1V}2RONEQbG($y-Rvd*1>N^!$IVjG`N zDcV}~JHs3tSf9=6;BeLP+16#xqma&nYuy@GujA7%Du9sYy7Q*%Uw1enlj($KijOup zQ#_fw@GBMr&~yi_^4UYMg}LSLP^J5{(FvtIvG?v}7f%Lav(~<15GtTC*9;B+72tc{ zyaz#MZZT%}H<-@vAhVIye%Q6KQDG6yxK5Ze#g9V#Y{h=(oCCCA;2pZl%OT3T0S#bw zpVSDYjX_mu_69diLU`+4{B3b3t6?`Ay_$WgS|RvHozdb85W!DM*-y>XHGlz4k_YZ| z)2v>`sQwnD!KN7+lsi?A!Q)!54oT=Q z?X%2XZBy3zH+CqDceSob;JHN9oW?p?(OhqUUZ3^#cx7W%g!S^-}7%hX^OFljuDT zA+xL8+4%pTAlnAy!vlUk3z0{#U5I>qWca%%`ZN*Y3=9jblC3H;JxRj_6Y_@(%{$l3 zL$snZirF7Y?1!OqVIl}^qfZl${6V{Bvp)igKG7c@$iP$QQ)u-^F{I=VFKcD}1+B*Y z!Bg1e55Lk%^ap-=jire$*`j`+yI-%AqfXo_K?H+F3EdYUuYCU*dF7l};gxfX*em-W zLNA6+WwiB55S-){I)5;Gg`J-0m1|o^9DEh>t7o<@BU?acPL0c+V%~#0{^&iJx7{PP`2wa^k*^71}zH_CVxBI=3`C zv0k;6=tN#9%uXyOktQelmCTiOF$v1mQ+#C9b#IkA%k2~MnX7u$G{ zCOy_GH4+_s_+IbgW4__R9-Ypi5-D|2g*F~cM%DO8q{A^e(T9sOG!oO`Dd(E+UxX9q z&S57Gfrv(8*@yi*F&&)b#AJ&T{i>}*C#FFLKH1;Ubk0^1b|P(N$cY)OmGw4SjXTk! zgeE8QZYFU$Z&5#6Z{tT=#B@KFbCc_0A#&a-zrL#7@;vq7#G4Dzg(?m4uzxjx;&3fwi)3 zN2_rswkRQ-SUrGjN?G5=f;-jEX2EZ~CSr4^uZgY)T!TneHWm2EQB{*iWVfo#?K)Vk z)?Loj4@C90>ZPq7y{#Y%>N>bOR$g&&u`1w2GZ}pGq1uK5^72OP_{htPyU5FD?SPjb zp2c3C2N8Ms$=wQVy_^nC@^ZGt%YM~XqLR3Z`+V2M>nxn)-JRfcXYE7njGEA0*j-mQ|1xvNK$#-(VZqocPRpHx|_)iM|bMY z=_5L-H>Z#2cCK#k=pGct7macn&ToCe!}(9|k(a$Mz{?*^XD|N_A{x$n|EbW{%P#bT zysTNgtU+$wNF}R2o4uT&B;3_(q{++l!Y#C#bq!jNdpTVROL3Zk(kWW4W4D zbQing2PD^ezbfK(%UR8Ev5y7DST1IPF_yht-QL9k6vka#O)g%B%Lue$On@JqYySQm zTpTQ97kk*XL+f|-@8Wt8l8b#77q_W~5(jcnS!Q-|lag>(TaZ@kGHYd>iq_*UZd5{( zi|yD6Nz&ZjZ^u0VU){gG^Ja zE>+PvdpQg60v>6ongw^tr7En*TwPp@ODCLP-^z-(7%VlL^qM{v)YU7295B;F*uq+B zEcmwP+v9-eHyrXHRQC9s4?W39yS%%|_?Oi$YR z8OP@Kw<$J1{tdC&eIdu@W{4;@pS{(8Y>Gimv1#Dg;QFPyy!b#P=hsJB(U>s%FAT)3t7%$Ezh zm01#+k0>-QRRy6bHiae~LWE``z2lE!9iK_bO4}5kG#1#0r&txrKv!uFkB=)E;mKx! z5gv^NMtCx~dOSP<&aV%$q7j~Qy`~->zYE^)Hb19#{s=zcW2?A4Y3QQ}6 z6qrU}LSUMdwka?zEU*tuk1FKAbgDE5Cd!qJz;v*{2uv3XjKH*U^>|>C4=307*QY7O z+NdvR^pXm!6L+e+B3M@Ix>Zd}U|g(~7?=%i2Nqb0&A|^jHrsIr!MUcV6|p(;e2&di z5K(N7VYH1+2G}V!&55zeIz`13^M%?mhb0{q;O91V7zn69%u&(tqJRQH@0diZ8;ezb z&Y(v09SZ*SK2uGd(ohslr2%C3zKO32{}s5Em1Svek_ zjpZ!B-5Ndst*>T*5gtER2QAYzaejRZD;nWx)NAVVrd|mw;b~^A>2wpw-+=|6I)U%> zQEcXYz_B?U_dA?x@*hWRDm9MHDG;G!sVi`02v~p%8>2eZ?H$y2{k{#Xd`P*J?$+fr zvijT%jF(kz4+8QWnu04+>ROcnDg4XpxRr&=3a)kTHnq(8*STHF5B}+H9|fmfDMRdM z@jAI44N0ReY0?wTdZI;7wCjluJ<+Kr__PB&yg5dKw{S@CW&sH~)~(Z5)^++!UgzeK z$HX_25H6mbCmf!bm&rC{r{lD+$^X~`p+;h%7=iYm^yF7PhK)`6HR?8D4 zK?oTQlnIgO)$z?P?;x%WxNri=l^pNM!ZjNc1!y^@Wkn)h*Rg;YZb;L+vKTE= z$Zel`dscDmG5Yfm{dt`JJV1Y*q(3_ln23SK3~J&{?E>%Da122!>X+z+@Y+ zui=WoiXri4s1#*(2=cOSwBargJY1__9&!X>366I{q#8^Z&ej+cB{K!NEb^nm7=@tn8#k-Z%qL&i7@|$w}*RDxbI0aMl>~o zGAwcTpwtQ^(7J1kAx0J$V^|QAjIphp1_c*%tuoHFu=40;*B0}PF;W`MikQ54(t^mF zCnJcwc}9iZH4nWQffsCa_*t+_m@rN=PmU40nTK8ppv#lZ(^eiQ+w8>7oNROJ@5na2 zBe2aYv&1$(0E%q$)^GW_N89)ynv*Bm)k%r2Rcs|&;TbsWVQ#vsJYKj^C>3fV$WK}$ z6uyV2b2KE2ZRI`CD9p9F0tgcBn##{LV5$bzc}XH7h)J(mC%tq2gqNxfELmT`539TG zz;2jSay72@Y7B3WD(QesQVID}UL|=KZRWn(t^zgaa>?en zU^n;RiE+~XlGx@!M)I|i`=OD|-2!6;BWL)0y<`uUEc#H7QY3gb@Q=%orN=QR(6C0) z_u{n|-icv-5SC$WmEn|m|C?bYA(Mth!^;oL*_z=#Ie`n9w{aV{S7_`ZsZg+3A7u;- z+{fmVFi8VRiWtUolCej)c0pXG1TiTt-Eb`0k1QimnB$5fenOb?QJ6Kcwi+Bau@RZ% z5@W*dMqw$7j%}>qXF(J?g2*q{J#HsZt5n7Lq}J|H7$w^*z|jEN=4(61Hji$BZCZ{N z+mrxBQP}y=C%aq_qRBQ6dR%CmI5+789%LEVMPc^KJEC8x1%_#03=A{q8ph%KE3u8u zOp3`>CbClm2x$xThd5I8R3ge%VX$r)`No(aCY_?X21^Q&)gor=VT_nnz2819ZJY4|G4pcG<9Yfp)*FdKvi_h)>T!ERCOmdKsu~+5Pu_va0ANE~$#h0b9TtQcIp@F;x=>{PX|4D<*TrIXSF4glIj2XXaFv^HMXs`nW)!?S` zA)Q@1v3n*ZRzXw6YkxWnC7ySrDDe2ey*VX_P42tXF+t>`dPLZDYo3p4-sfgPgrdZCGeyz&0)-(@nIg~K_5&Nrv#dks+6ifN1Lrq&S?mlJp`q9Y-shlI?!h?MbiA!> zI@)MslUTvkaw67Xu+{Y&_o3WpC;*;A z^*30u-eA)yH}bYr!%mg!&{7HoWC~~M3qoq6`|e6ya#4fbnO>*Z@YH z*|{WIT{Z56E_hRRB{s^W_>)tl_`5b!%UFlxP(3#=Lo9Fd_xO*vXk6iM|gs(U{|b<#NfgarDF z4;+CV2;Qkr{R|HdtXUR{JFXH*z=#EjBqL@8{{qrj3YN?$h`F{1ayF$f!Q5(?xM7Bj zG3jv`(H9Yon`DB;hz%qAX(&8x7}=ML$r?pm8_n&4A-$t#o6JMl=*L(!vK=s!P4>j2 zVzLdtB9py&8wr5Ps8hL2Kup#L8q_#7i+3Zeed)6EF_VF~xdJ*Sv(c(fEJTLEjn@Ku z{2aC?d(aPWNN~}?3XV^(A8^WUVb8#*(Q$~tRcdlqR{eK{kuK)Cao|kt69(6SZ5n^7 zz5+9>PN&v|H9i3+<(25bOH;Ja&psa#X>KGMix3+o)#Z_wopVZ zM5|nApLW%gj=h3xDO_51_9CeZ-w_kh7z9C9+F*x;$Oeps3Wv~pnDuV@)e|TM2Wu_` z1yIOtKxYg+ECnphdE5|@HcZekV}@xqj3b3!J08S#z(_GGbXZ}83zIdPeONR){7cg4 z&SarRU#b?3t_O`Y`a0fg@Nh}rDD2VaW2#Zw5mDMAjf!UJ4srfKk-ktJ3Vk1{xR-vw z1=uw`<97Qb!8ZP60PMY8m4>yC4)#Ov1s-BPES%uOR0o4aE`Ae$y^VDO zKax6fBOBD0nJOB00_%<1gYkj-JX6V%B>z&AAEARhcnYn(*dR{eY@_jss7OsJ-)SZl z6M~0W(Oa;Jy`4bVSW5*>-A1K9QIm%;&GDXKBKlbIG-*;D>7Q8D3GBm_aPlaIhax&4 z!+W6c&c=Z|SVSG-i%#GfHY{p(qit*vq{rU(1&ySG;StxP+_h01&{iSa-2^a7EI8hW zjnSv0ps#+gTY665Vq+ZSVSwVO{#F{r!w67fO6f34DYp)a1OZwdk}BRar3$Y!fF^f` z@o-A&o~hyp06{9fj6F|hsC43rASDTQwn_{eK%SrU{la>mFr%OY?Qsi|DCm+|NWj@9Y4bhxM zr*H02Qx6Nl_Mt(nkQfxi|M;jW$?fS;Qx-ZP6*XaFPAV$L@Qc?@-vG^YP7}?1Su|31 z?$1~=dpv3yg-q%(9Wja)|s+?1XegXrd51q zrU>k$#{+OULVA1_FM^8KK7RxB_>D@@;~)9mkW+T3Jol(aA7qjq$(~g%iVPXKV@sl#wsYa`OLE5rUX%V1_psS6?ixMO#Y0zPiouQoNUNC7%7JC<}xHWECGh85W{S3 z7RtuBJQEH4gyo}L0o&+^6!-uqe^qCQ>)~?-QXd;u5x8+s5c$Kh9!998OSzVu)g(c1 zEj^(T^M7$jK$dYzBB|&&p1ph{R+SSamvE-+@qyOA(Jd!G1<~v$GH&k|PGs$q~b~p|@_;Lq-s`VV?Y|$LCO-6dve!7$c21 zLUp&#TPI9-p9(LM8u{&Wj%%2CVBh8fMVF$stLU66`ZxE9qWkf>rg-f+KY*eiJyaBZ zDNu0dvOnF$&pjzRaP~H)ZS+e|;G3L+nw}O1r&~}^U5`5KHm(h?N5D~6GN2|Zm=#fj z^#Mf|>Q9KOXVa?L3B1XMcF#N-y&G8!>h-DIHXz6x^rO8RS+Yuk2Yi}3h`JswIDv@u zp@(}4N|92g38jlRCqO%jKF}EYjG}NH0k=3%h$TJ}mIYQK^`Z^`vn&h+ifK8L@|09|6I2!4%X(S^a1fDAxBGAs5W7 zhYOzYO>x10|AaMHHea55a>0#h$RsV7PLB1!W$eCi8)~O;R!ngx^r+0wMw5)51%cdX z3{Ti=v!{gZl)t|+&V<6FvW#H%bX1lTl1088mH8nO(+;iIHac9EqcR_t5wIPi!p%j3 z$RCxJ3L+ot6D*&^s-iX4$KXGS3e<+8<)|#JihdGXds6hqJ4w-tz7IveI8_w=J)qF1 zDX(tj=Wa)3*G5)l>_|5R)(6AlQTKsZCr{23;KLFU4-PG1$i9U zaAw%U=?o1EOO4JcJ6RBRHz}s#*b(Px2#2(U1AZBa3*e|g0W$GfY%Dh8up(KGepj4^ zaijEWs`L}JCB`An$MJ*h0FV^nwEBOWWpuMAV71Y~1<)nVQAkS`Em#Oktb-&e2nESm z&U)J+uh(@vNRs|y>vc;6jLs$Q-5c~p#{Xu9kdKjx=Ufk23=xeGt59)n#dM(I@@5;UDc&$M!-P!I|u-`o zDIEP)NhfhHFc7R_NRybiK%siLSb}<^Qg6LR1WZJ}4HbC5CY*3zI3O`l1Yy@I3|_C1 zlMqbg43pDJev@MvIVGj!9FxbC{FIT0m7HdBM#(87Pk<~G?bV$|p;??M8%G`DgN1udssqQ}L4Wuv5ba>e5jNQEF*$Pr7IPprvST8Zt`*5#FkyD7#Ca>I;Tfp^CwDrT5wE69jI;w*(OJx%?3j{ZDDe~@;X zO!J0*NP+YGI#v(FvwC3Z1{88Dd=fziq7wP}`OrU}Lgn#FeWxIl3huGRHI&9Bls@tJ zse}Dij-R@@?9{!FU{x1Ju4bpQyJJ}~VcnlOo!7>c#jf9Js37So7@7W3L+^8q|ukg-dkZR6#@+X@!->%vajvHk_lh zZyU`=e9~yC(vBAz<`e1?$j}#h>{D_LlO69-CZYiyKtO9{xvp1%%ET)15foOhBdm23 zKcXSXkv3fbBtE+K>L?RgXeA}IP zC;)M%Q^c&dNpXFC=5vS>ouoNwz3hkq$;=dIse71*rec>y;q=C43a87y!_B7jp6M0F5T zm~u#I=mO3(C2elwtcuPHIV$A9*(8EJ%bBv4%aAX5UKUT5ptX+F2dROqOFl;b!!eyH zrwjW6oYI2C$Blm^HST{L5ir7fy2TuOf~Z0WxP++r%AfMo16^v|Mb=}}IJ>y19`ip0 z?!PxxVR3YU6qz~2aZ8(wr?Dv`U%KTs@}-0OxC{6KqahwRRs(}nz_-d`b{5o@@*YKD zH!mn0n<)ybL_uvYZ&noYyr6LAfkN)euZV}vK#Qc0t8e9}P|*@5HeqmF8IFiWKQYn6 zR@$0l9Y8_*1fp~kEZTF&2IH9T=P#2d)$cuY3j|Hq9e+D@28($BQ`Qjx{ap+%#lsdV z^!|I{7<}#8VXz}y9wR>=5hGnFh=@|hGM|LWg&)Bijr%Lp}`ogVXcE9s16~=+&g&m zODS3KfGbd+Q>+mF?h<^&CdijvB)cVhvQVCIDRIc*!*r}Zn#RcW+|~4=yTtRpc?)^o z^$Aiu)&j%oHc01MGW-4i;f(+Kk~rg!kSkaPdr^UWkbIRepX`mZi>FQe@7)oib%<2p zQRlPs`Q9b7=uHMH-8-s2TEsV%7Cr`K(?6lfMLQ^n(Swr2i1=X&*o8abUWt@C`0WgG^>eF*lt<|1J$;` zs?DRMU7`Z_a(BO=$=BI9rhefR_yw)T`D`(fCYOMJU=5BF9r(rl|QQTk!bw+us>fibTjZrNFUh6z|5`szAlEg1D}>gtqjR2Al;9j1#c zrrM08B*Ff-w+V_@&R#=ZnJ2%Pfdjr?>M z5jMZjJe8kga%!hivD14n$QwMx6nv~AD|W#*uY8I`E~JoIUmhiYCesWt7P(zEz`*Dp z5*cJKw&d1vNPtCY7Y_0uuqYIqwTzeu-3_`|ZjgI~)SLgv(TK3S+tBs4#x7Vs4_Ons zNyIXj1*isWS#8*wGvs7N0aiY-Sz+7?x}|Y9FzykWd%pyFVu8Dv_Xb|+PxCImp3J-c5;boYf^#=H zV&0QL!-&dmAL8eFduzC7^OmZ4E5y8Xv`XfE59WQ5okQ{zWjPH9+i5u9WX(yq@Hf}d ziW?WXOcxq0cl)@ini)pdJ2@k!4_BR|hWWUyJA{C}iqA*Qu?=TChO{ch)H|dcon1Uybe; zqf>swZ7hmZxi?qA_F9+~T_Y{RW}AazL^ARE@=`$_zFYKaoKWZqzE z4%MQFLm{s(pD+;`knVoI*Nz#Gc+DZykT@qbt`RX3lB(4yGRZ#cfd;L6Dvg(A!j3b2 zS#bubn0*_FO#O~R!CDz>18c?A`yx6hqSc3MGZ-9l5J?6 z)F!N6eU@D;B4*RUJZ^vnsZ!Y@LZUF0^D4TC{6-#yl3m)xS$L1ggm&~uk{6AY)zU)X zNO{)r6H79pVn7@&5QP0S^^%$^l0ML}3##DNg0|H}-@>T}?~*_;wlN-?<9$t1edTTZ z)MovDur0mnMh4%!xXhNcFo>tu@|Dd<&e9^arefZE#9H7p2=|C|VN%C061 zdR}>{6rec%-5l6Wb+V;ADcp6dnA-_l#Lq^|Dfqn+l$XpYuK0_nMA9YB07_wl4e}k6 zJQmJuq@mM@LAGMjtN+S-RAu`%CF5M5-}2XW7Hul^p8u=cYx-h=`VVgdE`{Ixg)Le73%sFkt;7{gLAnifK$g zlg}!C3WuTmcoF=sc9%y1P_t8yPGxNMr>7#Q-Z(gy6ImS-6As1lp4D$o<;hZq*4a4sPg^6ROJ_v7mnf)>#3s``1dMA>TCE2@9@>PW7Z}>l zXb(@_&J^trHh~6uq|$U;)2{fjxP3fV>lwb~Nu}#Q)}s{4oRDpIBCh zLdsrJ%~bwH>QTOwS&+2Qgwp~%@IG0(wY}V3hVVE!gYY5>B^>_P8bwBnWFzB4K@5a~ zm<$CmHVR^76vSUp80A5rFk%Hq3bcadLrFf!z|0vsPx;Q{*-A>uz*HF8dfG8#Cte=QW*6{v=iF8i^p&8+!=}Fg=Cxj1&gp>@j zpkW=$W_P@4p~19}Njakj@@x?m_zqK@I(as_>ovT{V}68OoMhrO2r@fV=EWj&HqF&= z?+Bw2Z&4Je_5|0CYwgpl2bA`RoMCdelEWs9zuSWnC012RJIrX^jE+ehdB0|834OLA z^3eX)kOqbw4>;a`1H*dru^jdUF#Mk822v-*JvJU#;%z8M-%*g>a?ntIpk-@u z6YkejEBVlAEIZ=6G)R6Y=B`m>%K@xRne@yK)6eDonssv5nsAOTvLa{ZOefe>cJ6gw^lLRf?#gh{R&!qVCvLU>R^xIsdg zPQ)mL5z6@x{w-@8A>2dGu6NG*G=w)XQ9~H!!qA4;(_v295>R*!6@(}5hO)LO^tgxg zT?Yk zb%V@@9t=|7G2h{ch8u9oHVO%ASS8_>B9ky4M4&UJSA^ioRtFk`?-CV0f_LLIZeB^y z8U!=IsHtd3RWwe*LE2KD5*@)tGBCKc)S1Hb1L|OtDRuZ>AH*kB$TQqSbSJ__9+pPj zt5#E96FR>f!hDnxHY}LAz^@#!N)!OGBO!x@wP0{nlKO1Ipp8;b@PBL$h+S;hI( zMAC^241Ws~W^|xrQL)>;;6|*sC@-}3QeFsjfQ#nwanb9R@*EXl5Ue=`wW&O#sH@7y zP|98KZ^;XX_7bmCcKI6SKwcm+FfIr3f(SugAh~Ea1G=^5Oq$v$9ybnaUWn~SwcV5Q z_s}E9LfFn;DC>~Uv2DPWe(_7EZUFv^5haq4grq_3VfJC&@$o90ftcnLH;7(95Ag2f#Z-|b{uvA zRxe81b;FOEgFLW3I8#cUsd;y2DyDfuUOJ8zx=AVfFMs|_mlg#ca&KBZMBi6ca9!A@ z$O=PZR`*IU);dO-;4Y%F>oXoROV&skD!BF=Gj!StDW(4gD&yCg@LiMdvqI2nv;R=< z{YJ_eN%Ii7D>-MucEqtxjac0x!#IZVkUWIk1clH9zw@V;kh3u{P+Hlqhdkz2ty~FN z{eR^sU;2kQ$_{?_=1e(|p8sDRWsGX7Uluybq+~;TgljYEA02uBkVOd26aGOP30riG zp(5uIT3N_TJE%><7!KGWD#q(X(^j)#$PCCX_hu*gjw7Ce{AI?8y9}o19>b`)+{9zs zCG?|7d>JM_miHv z<|t6)NE0GtJ8vm~;A}L3fozlY1y@cBKQ0bZ0k=*5iU#;14Adc3-6o3C z1A?Id@uCBwkX%L7Hd&7`Dk&(wK;tf#@NR%4aD_f;0yiO5D1KxTT>#Ba4sp$4P%7bQ ziVK*ec?zdfygqKA(VIdp0cRGRO~0pflcsd@8%j4%;y8gkXCvP2;rC1yanqP*9CC`x z+u{^`{Nm4ACEAmqa^RLLh^Z0F59W5$!Zvm& zTAkwXs_@w8XgC`g>kh&218qT@YXDDc|7 zxR>sJL&61Pr1gGXkgK5=qf%|V{tOp-Ak&-^s1!+hQb@+fvJwM_5p*s`@<6|6KoI)^ z#CreM!z!x#Ge03d#p3A$2G~Y6GxHFmz$o)STI>)bc<&ePfIM-KQo(9Yd9>NM*84Hn z17icn4JyXTE}IyQmpKt`CniDVO$b^(HiI{MtY8d6W-73K;IrwF5-a;j`szj%+^CGN;xnV9n{E{O{{?c5+k4>T1Fwp!ch=cLV;Za z(;08D?x%@u2mN`F{_s|hzjr~8Ssg58Sv9x?JN46bf$U6e9v7)s`;XIPpu zRh~GpXn>UM<#CpRxA0L)G!(X&VHoFl-=t*&>_;Iwo4;8E`weLoLqmaB(#$fbEcf$D z1GV`(O0rBF5?XIL9FzuUS-#PGD%K+;1ARxcNvX$a8knnM)jVkR(p%sMmkOpamaY^hZ75!yna06~wDDIMzw&wV8H^M?${91xe z7?57MB7#F=5g3jnjtHVl6Zvqmg^`65)seW@t;o299gf+gK${fzViE-|&Yd{8^@O#; z>T8(Vat`&zs2+Mk?|V1M+7HkRgyPRZBQz$Tn9?~0#mKx>6eGVpjZBHvXpoz*(75E~M!~J2Al#NdJ=w<*;nZ#BB?^D*5N;4P%7>e{BOqb2<8^iJLR%(d`!T{hsw0;20LTs@8I6dw^(1sgv0-iJmIURqg(P^6W=$CVLS zqwK8cj30ycu8}6>%><1~)a@wOhHe(Uy*vw{Xxt9s9Pf98V&RK!jj&+oQAA$MZ+j7c zg7*H|7;+*CSxy;>jUmb{WEl;C8KwWgIx%FNIi);jBM-7-N~PD{M+I$(2)!N`2Jd#E z%+__tgrYwftC=;sgK`h4*@C2oTS(^a{t_p1N~!!Ns(UBm6N84lYq5=N0!{ zjnaw86cZp1rA)WLd5*( z13WM9fLHXi##@SoxEo(w~^p-r=PPl2BGzC0v`8JXKaIQ=YVHX;ec} zkee0Mlw^<&u8(A1D*il0v#5?|Xu13|4lN6^^u zNYgNijWD8B{)L`nKnr-)Y&Z0sDPOd%Asa$qgVe?`k;DU?10b3u*vBwRyf@`47N$bM zQ4nDfukyiG83j1qr8V~ybUJO)^G`r@&58cEWj}wK6dPP=0{dxDq5{}*9vJB)3SvDJ zblSIf9l(gfP~g+b?^2DM)g5KHdPGqS*aa-ga=uaBCn6DUN z6UFZ4Oud59Sok$F0y4VEysbdH$*xp~I88*zEl4;OW<7MKhdYDA%D9RQOSMhqy4l6L zM(yAg3SZSk_d0~3ZXZEoB_N`<>q#*__s{E1G@_ebw5B|-%1X5IE5@5-UR-V}<;H0A zT6G6k#R03R4bmp8ok6X#McR?-)+Vg*+ei=*PO3VQEcc5k~M22QaMs*La$=pezVd`hY<>n`D>;%QpbjcN@CC$A_9lYJS5Iy_(RJV9R(oDV%k+sUibr%KylXq(HcxU z0Z85n%YGebX_r?+5W<}RHfaShD==bt6vQ)75HD(a5YdoB=5NfQ0APVPf+>ZvWf9&N z7Oy>i9_fy>z{*58j7Y(v1&NgGo;&n8Nu*D=6N3||lBZCCu=fk??v&DPzk>qvGvgkRW#|ON=3jX1E1$45#uV zQ4*ZfC>a&?hESH$PM5l_=;w_gZ45c3)LYvP%pgAKRNifJXmyADr?qc4IhqIY+XG5j zZ9xsi@sZ2`S2wvk!E6-`xe1w}XQii#PZe}!2I$2K8S{O4q zV=CtmW5D_o!zfjTFBwChG5D0?H3rOOV5m^^d!{AiKcM|U!~H4qyh>|2ye7csp;6#Z zJJW{{UnfX1lh_~mK+KH-8yIx1!~$^2$De*h#+Ag5{UbNcqU|*Ra-Iws1sNdZ{#eWW#!fV4(3KQXNh zX<8dDNNaPJl2A=+DYm+%wQ-KxlEk2gbq`Wfm9mV!9UaJsUaYdip$tJ-j%NV+qve884j3UnKcn6H4$;&R)JKhVd zksvqHqoU3>h8`2ur<9m6M3`Yv(en)LWAqTvGUsB!g6u)(Gko~NTQz;rLeVb9;Wdt# z1X!^E3aoJO^T`rRk`<54o~WP+0E;L@n&zV|e2R!jh}EqID<=hV%*1d(E*iC51ZkD$aWy9}U8+OdPTq9GV!zg$^#11`}9 z3Zh{YM4>1+qMvPcDR`Tj4Wu5H+=OrLz`TjwllwIupX%fg^!_eJ(f;gF)Er#6Xdf|gwYg#Guxk0I8*dOAP%6!szkVNWs<_7kiUX~~(ipQ4@6y=jCh zomq`a{Nt_$zRd?;=7U@?f#t-#V;t5_ov)p{nn*E>)kG5hgbH*=$?;Y*)d{@aMz!Dy z6yqq!y_$UL=+l7ODfRSdNtOjNV#oX8Vr~iAq+FnIt)IOy=Z45D1Munn(XAC23 z7clshGHR3wqXd<5yHQ4s5>d(%&D^Wr@*bl^nSz`l1;=}?^`jJVWiu_BZBP-7M(<#{ zph1r*eHPOx2{8hi?B)SAEB#QT3!*Ujbf8K>^1<}XJeGy1J3J81Cj`lWWnDt)2zw>t z5PJesAs9J>Df%>x9|Aps)o+d>Op$RqRw$(cr#}3l^$(0iX#$WYF+%w{bD$xgR;Tq1 zYVTp?@H2P|tsE|0K)Ix62K5E`yN?^h%ArRJ__T@?aNQb(+|3V53ON~U2%o?m^Z6-M zAgsP)5|Bbj<|nNj?#^oFNaa@!b+__R z-(*~pOT?;<_iAHsXI(M8W_T%qt11Pn<< z2aUna4#P@0#2A9y!ib{3WDGqXZF^KHUSo(bLrT%_EuwlbzmL&rpxvbI42^j|1)KNU2Y&HNRq%= z8jpt<_M!oyAeur!l!<~U8wK6aAO#t_SO_FJJ={Y=*bMzqLRi*731LwUs~0;LZWjq5 zD+OGikpkX>qLBOU4oL_{gN+ixbtm&vsGJa_J`#dRKtdpypO_FP5Ye=hNEal8S>Gn1 zA4>=hdwoe_94vG$O9{bqz-|d)f97=p@19AO+=PJd+hzh57b$inB>x^1C}8Cbqf}z5 z?qX)7brvJ+O_rpHC~(9gM;1P1xkcJS;vkxA5-OCo&iX+yLS$KD_?3K~ktrgGEPIHc zk{6j|3Jbha7qmAfXiX{;?CK3ln=Q10oIr-7oKS5PH~7_7UZ2VHu_(2ix5OCSoFMLj z-(lpPBy{MWVT@}dl`+K!iDf(_hH#6E%^zGL081%)I zQl+dnhEhiR6rC`JK4Yj*$|_^%W(L2a+YBw4GYIq^GYC!kShDiqG;fGHffWU!Ao@Z< z!&uKwIQI}cpAT3T;XR6bPO)1m5xr>Q80WEo-#s!A{UG2)9TfRI9u#D}D98v=pfPby z5gP#GW)LwJFk(*>dIlq&_l;NI(W5nV*+>Kr(DnE`6x43_0ow(=7RB+2rybLY1%Y4#rCAWme7et9BON(xnh;@D=B*S@dIiet&NjB)w zI?q!b{!#0P?xz0t&EWXN*v z;JwPwnml+hj&+8ivr=2qFv&T`C~i(6l@O)TC@JGfDrK%v#f z3L6k`6wJ7FS43lrEugpSoY3$UO57@Hz}z5o$d-hP6;$N)6D@n}wh^s=KtyNwT{LZ6 z7Vw*GT%8k9XhsSPXq62ri~#mgL&h0QTIC@t^l)JhH}9Uqp$284&2uRWo&SGn40w;6 z=K9D&DJe9Sm*yV(m1LePP!%Jt+<6>7K>}nop$Or1_I!iALbFYVvklIT`glc1*Vl2D zBd1?{TfK|Fz$4+4Jd;Bcc&UZO9P-LmKag^z2RU4h&h+b2yZ2@z*o6d;$1woSMSwbl zPDf&T9A+OT*7GaUIkatJ_zaCOLxyRV0!(HYJ=(%m%pz?(Zgu4PjZSZR)&@?iH){3t zcniU77(H9VLfM)bwnEYhyrrdqxO-#W(PF`Eb$V>U-N%jYb{*@5Q^ops%pvP{R#5+8 z{ft>ZEd^W{Kq2?X?cxBJqc%Cf)3f<0RQ3U>4<8T-pWp)#^?@vW0A{4)FPMLk+<(BS zc93ljd#Ab23+YTzj4wtfTLVFsMXT_BRHOMP%6y=VVbC`J;EXaHLD|KFH5oyt|yyInzyVb}^J>BF`Gh=3slr`gSgeFXm$C}Z_ z#2AF)Vy=*(QL8s@g;6oBy}U;=?lx(}n$i6WePvqy+pu@d7pvcOELpwv5YojbTm6}P z#Oed6O;-QQG5q`=TRo;$&vE37#j%3OQ9w6?Cblg}G??{!SRoqNeWo4B7toAcRf91l zX#g`h)CYwF75OB9tS$v?wnTF{0WwUf6ez#bMa^D&3x=Dg#yw>6g4UG=!$b_DF0j75 z$hdOS6z)@7!DDTzo#DSm>M(&Z6DV(n(VuR^#I4Y51$i-zIvE?5t~n=v1;O9HC076C zEVBBU<^R3a|2isGzZSL0>Tg8;cUF(9)yF>});rAFgWUN~iuDdw8e(0tJ&a9$KtbOv z0`T!$S09`gP=y>Lp9b7aSSo6gIUr|T-Da_2)8e?1l2#b8LbFvKGfabFqE-l+9KRG~ z3X2PwZjxd9V%$SkHz@`3!*Tq-tvn-D3f_stM8ck4jzo+!YFt6aG`&gj?_Mk0g+m9L z^Y6k7(Bien9>ku2G{SoOY?mYU`HzqhE&}&c_O^$Hn z^(WF&qKECv8x2Gywu@x+K}JG@x+0*j{KY=UC%Z{(o<$KhN1);)qc>Z<2{VAlFdbGX zvO=j9k|xw=)(RSF&`5fMR4^s?2}!KqAPi#t5o3x8mW+-Onaqe4hOD07FcntV-N$)xW$=Y<(SSQ~19b`cJmr^Kvh#Cid)4 z{F9UZFld(ahuEN)@+G}%(jT>Pj!5A@C;gOF%$m~1rC^Q)4SRV123N}oDWCLvjC;bk z(}syl!9B{v=kyKZCjGSd1s03Om9fUhtdO$8pw-by8=s7j(?@u(NluxgC0z_s8oP<> zXld)}C>M5H;C+bG0Sfhp@b`;#Ml{J+HNNq$%AR8AcEzq9(NTD^#^zVNZa zMIOcU2wR?Z^00V>%~6o}d3-vT-6;)uHiB^sqbEghMZ@Sx5n@TqMgD}vh?z`Jiy+kOn=w+( z3RyF>o+x2uV$yY$fD3q5xztEST-eRx`yDS9e_|$Ce4nrV_ZI(fL@a(MYEzu=BhUZw z;%-bW?tFs9(}fn71DM?{PRA;g+cT3a-p6SPQ7fx`-F;`+bL5Z)C|cChvW?FTuqlqR z3yle@ySc`3FIz^=hEO@eV27wP3z7Wl7`AH`lo(R?*8EBYw4_LtJw4VKQgya&({;lw zM_??zN9x0VRv59uuoPzVR(>{b<@pR|H;Wz_6^nie9FpL@%K&bsxmv+{5MZs1SB!!(=6*^0!a zzr&zwaQAaf_o0^ljzWid`;euq9>WY9CT?!uXQUA$#f&uQVkG1d(}o$BI^qmbA={4( z&~^{6SDOvnEOj^7$1OM57uM+~tczpzO@k;Tr3GM&Yfw6f@9ky`jyswSlab1Q!HkQZ z#5U>Ig`g0VDwtcP$|n83k)~&9IYwVii=W9{;9Yo}*!Q66WZ&9Swr>-^fg>xQu~n@6 zIgl}?sjUHiij}!qp{)x(8ts`v73oJ5Pwo=$%ucS1>VV};0)El-10@mmXSSVj%gV1-gHVAU5lF4tcitJ7^HbrU%> z^9dG9E=~|lFCx{_Z)xU_z+R4sneX(InSK05oXz~k9b)ES%l14q%67Ury5|19P=8J{#3y=aZGf+3 zo8u=DeY{d|5`+9KIkkb1ves}CNkJxt`ROD^6;3IfR(MR|jKW!kJ#7DyL=iuogm`61 zqEum@(km49D;!ifs&IqCF@>8I?oc?caJRxe3J)qgq;OKHD;!ifqHt8<28Ck^H!Iwsa9rVTg?kk4Q+P<>q{71r zk0?B|NVK0SC74|7yp|D@!pu!P_ zqY5`D98)nbUFdtMopl4=S8g zcv#^Pg+~=mDV$b#OyP{eS%q^7k1IT(u!j%QFn{n9^M}Hv3i}kUP&lY?MB%8y4GPB; zZdSNM;kd%x3il}7r|_V{LkcGq9#(in;ZcQC3XdtAQ8=gYxWXPjvcUNGiSa2c=SogO zj=Hc^Rk|ESAzl@ZX#J?d4GPOqh?9`h6XaW^%Xv#lqFdn}t>35ckitoYhZP=CcvRt( z!fA!a6wWA|RXC^cxWW?(dp^fYx{mFb za8%(2g<}dgE8L-QT;Xnodlc?dcu?UXg_8;oD?FlbO5wD^V+v;!&MKT!cwFHLh2`A> z#>;1q7%xAuepR?aVZXvbg(C__6>d;Crf{>u9SX-4?pC-*;X#Fm6izBUtni4!qY9@K zPAfd7a7N**!a0S<6`oMI==0>q@Lzr+UKOrTIH+($;Rc0c3U??RSGY&vK7|Jr9#S}| z@UX%o3XdwBR(MR|jKW!ka|(|uJfX0sSmTkO7>~lG3i}lHD;!ifqHt8<28Ck^H!Iws za9rVTg?kk4Q+QC}A%&9)4=X&P@TkIRg~t@mD4bO|r|`JK6AF7A9WOsIUWH2)_9f)qKKbZpD8S-8dz^D98`K#;Rc1974A^DTj3ss2NfPtcv#^Pg;NTr70xJ}Rd^iF z=uCXNQu5eFIu@h+HKFt(Ib>TW=O^$JhLP6WoYZl zqH6jrILF%zXxD)NiVuWF9d84{d*xg>La_H`7xoi;;!7^DOndDBlw`_T{uPXd(XJ=2*Kk|yKs`=SD$j>L4yDEqzm^D9Q&gS z#|hr&5f^SI_^)XfZXo!^2V6Kp@IcCi{RDq%y9@gW{_4+N*dh3iyIj~q@SR&-c>Jq? z*Z$Cjvjn%@?!sdPf9e(&PBDD53y%=|_y!kF5`5bYE<8x^aYHWLL-5zvyKtP~69!$l znc%&ya^VJouUPBC5rUJwF6<}x#w%RdNAQ*&7j_7)zs!X_1b_b$7aqsE$6e=K*Ca?!pZO zzufA=5rR{TUD!|Xf<-RuBlztzUDzQw(&WM(f-hORq^j;KPo0;RwMG zM_t%YaQR#p_7U7Y$Auk&e}AkCdkFR&T&V^G1KYNr5 zj}W}%NEc2L{6^4)2MIoZh70!)e9&|kjuZSytqV63++E|s4Fn&Y&xa9$cTRKZeuAH^ zbYUOCS-%TA1mAN6!_mthh$0K0aptV1S!d4r_AGiwe&B46XMVK*-_e1~e9?8s`lB;< zba`|Cy86S9q60_a_}+=me4*>}XY9%WQ+!}A&etK}{w33_Tzp`}GwbwOr_DNb)`C;# zN7uX_j3(ZT_IH(66!(4sr=ZdP52F3!(Sb;5G?9w-&n_=2?%jeJpaA0(_tsCwlot2C zj+5_#I=BNC{0528yZUj(#U=RKR*HsSW zdtJxNIOh$VR~qeqD;FC4@S}MHmqzBTJFQ{fz_&5Pr!eMyFhXE`z(NazdFQ(yepKK8 zk9qyi=XRkOO+2%D`@8{sd&j(WxY{spps5_Jq^^fSB?5SHYeH~8XXaOOKM~HZqIvz# z?mGLUk5KUv2$%!@GnM@+X1@g7bCmf)W_~NTGSB?nt}iq5Wni8Q=0(bUGBaNW=DEsT z$IKt)0(s^acKzYQk6=;U_=pa4N1_8UC%PupAU)lm>M6+ww2FCe9icI(-0M_IJkzy* zv>z|$qy3p(T`H~gCN^?Fg?Oc^cqylLRRhpA) zD3s=qv~3^ANQ*u$?O>HgqylOCskEZprwXMNk+cOWt>WX-p1ex*Mx+91zhd;ow5G)8mtaD~9hz@xFaiq_K02)|S3KL);`x588`gLa&4Mqo6mDcya zlI!JuUKBx`Hbe)`Q3p7Q+q{p}xPp@7QO+40BRp0+IvOu(dzw%r)w-+7Que|FkX!9_P z3Lc!UdaS^pO9tx?{UCZd{02=tj{>)GhE&~Il`5zjUAL$R`Mx7a)~Ua*p;dE%z7q9)!$2um8g+CBJua_0*v?6UC%f zRH`Vx^0Sn$*G%kH+)HotIJ3W6oY=!qXzx#X=B+!_Ab?t4{p;vVd`hOc_fFKQAGkzhy#QHH zK~{0^C8U^v)#$=2xo=4qmL*cfeU~wwl01wO?S~EqPK`#_A$#{@CVRT-z1+b-)(eY?f^{o zxkc3RHUEb3kh_boq&Lw3VYxLlyu>raU7Yw4p;4pzp}k9Cy19O`5t2+(d5nB!5Or00 z8%bXT=|96+Wo|D>M}DGcU57cp>apAlSE9ZC9n>>FIX1M7Yl$!)S@?UbMM4fNDEIIB z1A=5$@z3@y@9Qn^K@-%MU07?o9fqsj0laiLKz-y6`->BIbM;G$qW$s%PWAo&qOM2# z-^`u4p0qE&3jr^q(a1zsPF+J^; zWmRXZZ_d*8W$nwmeD$4+SGKIYz_XaJtEMgOTztgxmSyc8|1^Ig?!5Mut2$RK_f)hV z>YFUpSM9H=^$_1#t2>#$Wp!7_ij|*Gb^4^Ltt;Xetn56iqsue5p?(r&X=iKu@>T7g zxu?!^`&ifrcd`ndEJRu_3AeO;aeG_)d4)aN9i4A|cZ#)M-@X_!d}pofY+L1PS>EP5 zznyx!id!vgfxEN2l)~;TU(&jJR}3||8-}$moOGOT78*Y3xMO|CbuR6K9VY3+s=FO9 zL}B9>EL*;NFN;QQs2lU^6l5d1$^gsc6IpLyIb4iUF2^0de$TH;S(XyRYSfKccU6kkw;la zq9@Oq-QEg&l2Ziy0S$)voo6k_=uTO&x~p^fS+2-cj4lX=LWGH&w>-WYu5e7{aVu7$ zK~LK;p4H3oI|2Ug8h^`-s#-sls%xwKZCvs%uAVM9|Ki0<+J#y(qjiatTHAvGsn^;P z3`(gju%t>#?NxymsW&4qeTJ0UT9+s;Sktyx>Mg0Qn$D#ve|1}pl&Y#``lVFu4@kXg z$dGz9)#w&et7itPMP7}+s$JTsstL4esdjomnFQMFa1XGMt>Y6AZ1d@riF|1f2H z0geYyGkr!aJi>T+1T{1Kt@&{xw^Oq-S_*MIhMHjY^n!Xkh??NywgMcFqGo1bMt-bS zGK`r^{CUMy$v74Vs;b?-phWGq2HINlI2lJ6Q83R`aN8{q0bw%f+Lrt*%*|A89p@s9#w5^ z)y#a05<#_rD#`@fiy9tPEi6GkEe==1qpF?JGBZEY8Xi?`u$5xd>hY**XSM|j7^BC>W#a7n)1S{?@+uO)A> zS{_Hh-#QZ`H(nkGR8XC7qn5`JsP;jnop4w=ZwQ0xd7ucgh0avi4;wR$kz1S-NyZ zE5xr@?px9V`E7^$x`6In-nz0Ki!sbbT^;Q{l$Ta^buMc+wpE=MwxbdgSGBLiWaL}H zljSPuHD|yhB#Zf4J6e`6Z(r(L*0~BZRBOj)XQJQ z(b?MJ>s;lVdg1CreMe(BovSL3romMlx*JvX=R0H7>UjIg))h-3uzlsU)_5G2qQM-y zV)fECZj4md)y_kyJWI^CVx@1{ini5D+kLb;@GV)nVwrCVnG+CmFNX3-+lV}|uk@Av z&hM&O))Jq0()_L&ix#zZcUM(aRTqwVUhDj>swyaX<)W^YEuCGf=C#h5--17L=FAT) zn%`Bsw0+g8c_rOIUSJ`d2mmW6PdAJ#uyAhi9x@zIxS#;T607wB$<- zec`=NJ}tWb*&cny72h3}dS{0(S$pG+f7&Y%zWSnXee0RtOZB;2@vFmA2ci@h`sb zEa~im2tOn3`dlr~>}C4AI&$1qhkZ4+r91Na%(LHqynl^8zpwbd$X<_)pLy4V-;I1! zS$ykB3)kxNI>p}iTv}d#}5ACqt`@!z3ja}*-!iQIi&bowBGlnT~Dbz zd%l&r;d=V_L+Q7tJmUG$-yS=0af8C+`YckuipX7mEnmC(PhZyO%*e@)E(`s7?m>~* zoHzfS`sX3~JWlb)M1Jz)or6~l93GifzGLp*71jDYMe+5K!>;^4Pe1yPx59_-yl>Yz zzo^yrY9n7s?uGxp6aH}ez>F=4>%w!!55Do0r-GsN)139IzPK@5wcs0XU-!@nq2*`X zUcBPA=YzRTKl=L(HMfMnz4fBArq-Pv+PU%AoBwv~JHd4?T)p9n$Q6MDf|q|Wc=>JN zUq9FyUht`w(5x+g_{r**KRt87AD(*k{^lD4SM8TL%xEj;7!j7CD(@E zI%vP2T=(d;;cwjj^JflUcb&F7BXs-UZrFU#@F}5=Kb`y2KR?qJl5r9K+h>J(P7B?8 z(DjMG?;j2IS8hJM_OV3@$3mi~sMcGe{9Pd#&s>!=SLH7bi5|~TIV(c@+_z!>XP12| zR2R7N#L8?uRQ}OW;BQZ~g=*hfxb2NwP6_o4-TM8f=6oyEeRju0&HLwszF9eRaPaTf zh4$ZBz3IHqE)IS3#f!di$8+b0YImHr`7dQZ2;a8VzwVWjH-tCqbMc`)+m~ee!_DRU zZJ%hlJ-nEo*M)aocjh^nXKxE1aqd5V|JS!Rg(GXO`tE6^*My(F`47*eItRjIhm1C4 zj~ou)aMm^VJo=4W!!JDW*pruU>JPWgA3nOO>6Y-T)4x-D*rUVYE1r9&{F;)R!cVte zefGEaUK9R(b?JX?y*Uxyao^?VE<1cf*l8Ue*zb`I;opticy--Rz8`+D7epI_bd$EF*A{T`N(i6s`T@|7rQN&n-jY6kb~Fl zTQ@CqLM-#>?ZM+icmM3+H%sQ#ht@}zeWUBz=FkhTKi=Qq`F7|o|F_oO@UuYZtnQK0 zixO>GuSw;_lz*YtU#{()to6IJoufn2?x`W^?^!B$jQZct=j*yL(g6Hdc#qt zoEtiS-8r|k^)3$WxcB$%r~hJUXye=;%}#!;-&2`{XNRxM|IDF~pq17rcv+Rls?_Ay-dZ%gU4%w2ZfAkGuiQ^l>`z!qU1Dp3haq(^8bzgsM=EE1=5bj`qxITQf!q2l^ ze;D?E<(0QjZQKyv#(HfEeell|H9=e46;_T2Nil3wP zZdL!T`{Bag-n&KK%B`TfgoLy{PgRUHHM0)i+yqa#JroEp*yv&c0*#>oaL2=K*hgZSV57P2rs?@3@kCmT!1I9-6QG@2(zg-E>n+=sQ~f7H#KrrGHoPe^CAx z^*Qk7&aeNm>Us6AFQ1D`>#!J{Ylxyp{KR}u`6nB-+tz@ z(CTx4cKw=}t)V#zU$5;|>i8SJ_u2Pfs9q8}UfVxL$Mf9cfk&GggEOzt{z`@f z=YSQVqyJxf*8(0@b**|UUzCDe(XXvawWb1UMKk@^K5I`hXHI-@ zKfiwWUiW8MbN;jT+H0-7_B#7K_LkdEy4ioxMI#F)ZRh&VTV5XV_RDLuRsF+9cCNZc z>$sra)8BBDmcO9q#Wg7#v}ey*F|O}d3$>lT8K)n2pjLBlYj*59@k;GCvtGy_+rLpe zRFZn$DbeNHhP;#4F3#Jat$*kFH+r7EL)&)ilFGm6wjJxWpH`gomiv?2wBIw|yjAX#R=HPdcd;Ce+yBQI&-Y(Ace3Z%*~@2MdjENv z@1(5g)EmZn{_wY#BZrTj=()1wma{I(DfR4T{g(WET=jk3b3Hp)?~kUAePZ#{YHjH? zYpSnXQ=&ze)LmZCc(La**88%*jX8RpvrT)7ej#gxJo;(2u6rHDp5sO=FLH=#&&%A-jI?`aPQ5nZ>EZS^{pPwGlRs+q z{EhW_n&rI8=ilUd$)!fWtmb|_m-~4;`}^#k1EEnX=6GJ?`jdorO*okAxtaOTVg6^C ze?9lhdE76LetO4AOGlM?@+ZH!ZRd^}Ph+vKckX{Rd(xWrZBHtScphfCvpHUta$K#F z{@$R~jQwd|_xl^P#y3vvZQZ?2yM^)Ve^!CRM-IbCTm4?c}mg3hJ)7T)X;_bAK30S)jcq z?bGdx1am*2Yl@3e*Yoc za~}I^3%5Ik{jiw*bC~0JKHKvk+rOCYu3|ZB*x!>`UJlE-iscybbBFdh>sP?~e8l=` ze0-C~h?5y?|4-QNyV&k+Z1-rkJBj_PbHDjn&xcsgF4nVws7qqtrk>w5+3xs=<> zX8mheZY}r2EY{PV#|Gg;3SEcXECO*i{}3fq5x1=J9bRPLzF@xGM*aohtoZv^gM;14d53F-jY-Kv2i3s(kZqnY52AxpMZw`XeNHw zH1$VQ@p3+VNq>}90e6AYs$X$wf0S0sb~X1$(}xS;Y5@+~)7~EySS{HL+6Y>MPuysA zW*9UT-@W@5^+##-UiZfSs1NejgEoS00qp|q0j1UPy`Z!jejn&I&^}Q5Mn-JvkJ2jl zbkKBs2$KPt3F-pP2h9hq2K9l4L2E#1HF_9yJ!m&5twvuD+6%e`lvbVhfQl5f3pxf= z+|wU*fx19TKx;s2K)XRZL3=>EL3=@I75F~T9-{X{PtZP4TFosUfS&MII%pfK!*MLU;s!nHKm8;29S9M&M&C@F#$$Ti~w&PX%t)=Y8P90#AXx zpWc6|0QfEo{0iW`z|keKLjG9|d>e3lejh7@Z)Se8KesZ! z8Gi$K59FBfgTNoNz$q_m0sj41t49Bh2TuB!aSw2^_Y4z%6>##W8E*zo{bk0N0=J5X z+ku8P?sC_QPUk1GE-o$E)R{{%eM0{_`ux z5z^~y;2GdY%8C`ji-C`^z%K+&`V8jxfIkA9^tq85D0HN+OfGbcSz#-7WGqW5aAYpA z&vv+M=bSdeky+r#C~%AcOQ9pxiz^g-jK5!^ejfbrW5hAlzme+SU@LWGtV}6%WUjCm zJ6y|#6*%&i44>xk*(N8AaO4#@To7I8$N;M$uP`Pr1qwC>`=cAFfiIU=?C>Qov=nEk zC(ee5D#&~6{r>2krPE z$>_`_)X&Mw9Af~$2c*wZ@NEMhnWYNF`|SX_UyMex2$X)T9pOlwH4@ci96W*ZTX23V z`R&W~Ep~)$<84E$EBh@C*V6SbN25*D9^|b^E^&-mW`hrxq$JOm8Y2$rq!1Lk9`Nr2 z|1tu=pAg3-4p(x6BNGP4qBsE72Z2OW_4XnVQbs}vR_ir{Yx z>{^=wc?WP{C2t^x5U9zvo2>_DkzobK62$Dl-`Y@rbjn$f`^wjl+mmYR95sZZs7_@R z{ys-v`Yw*omvk<=ZemjA3d#!4rPyB_k+gdF8%cMMu-$tU9XvO}{=!IcXavsg8i{}4 zwkxR;N;H}@;oW3AHX=dg2U5lU6#J%B@i__Vx7)8jN_;pBKbH(Abo+4PSauWuRQou2 zagzJ9O7V`(zJHE*IK__N9}Tm=GDqA!e18%SwvV*$o+A#Aln1w^+uxoe_TztHQz;%e z-rhY&>^VLkzh4<`Upq%EIgx&Uc9Q++IpV>Sufp#q|IOY%L)>(lJz60SW!RU`5&Ope zBMSst{kCIqPSYqW63DJ(c3X_s#?B=CkZ8eBy~8*l+TQ z$IrGuT_(1kWB;s7yymn&JWKrPT>Ji6;@58bBUPe5%f6vpJU7AqL4~+sqW!sYacz$M zujQgE*M9SCu{GEJ@Emd7B>S&ti{+E;AI=o7PPRW^Ar4NlZ>$n)r`p%g5x+Rk{&uCf zO|zlhpKGLacfK8Z?#ZWiHxy7?9~4k4j~0^5t|HRvr6Ou;T`_6(UNK32#7jCan?`Nz zoJKm_KAp6EawgpUYz2wjS!su%-<9t?@SO+#FL=O}ZCKGa;oG-n@cer4Z)!Q2=Lg@u z7T>k-zrh1E#iMdRc15A0jvq4}KW#eh<>NG?n&@>IKd?+mmbDKWlCVTumTkMoN~)e2 zs4&D5c3FD)Jk6`AsPl*Vqaiw`T{NlS0%;V!S5&i{jtV|p6!|J#3S_8R?UcEB*VfsAH)Ces|I)0oag# zbSKllF#VY6FnQA_#Av2xGRhlruQ&?gz2+PcQXA8(~p@BXIKTC(`u?5EX|l? zc6q|F4cUTrxiuG?NRExy!RKtkCe%2M$1xg?9gG;iZ5ZupTns*I6T^fWPx1J0p~huA zo+{M%jmM9Q<*j&pgy`dZ7LSh<`Rw0#JWcp4@uP*xgYo8i{*A{^5c@3g(ZXt6+Qf;%_vYBaBIIuyWkb%l zgHPJ9frmLx>AVdao0OR1*TB`)V?YX7pCbMq9YBm@~)sd}MO;)#A<#B$U;5QnnRvza83*k8LK(8{h&lK*7kWB;h@ z&t}GJO!#jZuQuT?0hfNj|0RnGJ!7Fl;YYZNXLWrX%FiF*L=xgN-4ut1C7$SiYQxH| z;b{E2ZzyN{3@bNo~@ZjQI0#1rGW75H(atf^c*1il&gIQY$V z7kNquPSfI$|dq=?#D}5S)lONW% z#`CX`{E2z{X6Emcvo|5W&+R@rgnW8`O7ioWU(HjG!VfEbrU9pT2y#5Y99haGeu7Bf zGgcnsN+3%$aH&7bSN1Mpyo>F^p)B;Qn)rRpe-z`7Gj8_V>%gt_bYcRW!F30d8Nf+? zuYCC z|DnVY=f#G6dInDAAj=6~XB?|`9dJ0sLzv@1`Ttb>AU~utKbtKkGrnb`kvEzQabhOp zee4+Z?y`;X3{!sC1l&shgG1o-GRlg7HE`0i+vMk`fRjJ_c)p~@>2~Jt<^EOU`tOX( zmlCi^-A9kX50dXP#mP*@x0v$P0^rnc$s0y~=wkn@l(<8zXFng$_(ql^O!8j`Ze{O# zivM22|Mc#JiXAul>4WA!28!4RZY8G%xYf8=16;;`yCDJ1$?`bk=Id#SgX6@ce=g%) zrhX3qx6-EzIQeZo$A2cbdxOLsqKW;c#wqPKOnPp4%3zf5Lh7W z`s8DbcB@U}?p(%&DbMEur*^}48UB~=64CCfz^&~1g8BEg8hR>y#v&l4{(SwF@Akm* zIB+XDF9EmeFFQah{`tTu9va^=;?QVa2pu?$_a0LmE&xvYbhDnyKQ{~^|86Pg1Q9m* z?KhG?P4w`5shb<_A41L)C~u|z`2b0u^oSuqeLJz3adZAz#dwcN|0jUszl5@z`Fl-q zA}}y14!5ygU0m}7;FSM;JU@^1qr?-$i%#I_7W3X855d14IN954(*L(Z@V~61Wta)U_a#XSr5wz=NQ07#-~euhv?$C zLU+q@AU2~`vJ3HulAfz`mhid)JdLR;NYuEi9odR3ogqwqrV8EF> zF>j(ZlV0D{+NAs2+WZT3Y?6cRaq8Q!Tv!iuw6rWll|e^3I3sba`uwu2`iKB=PiW9v zJ6d>+E))XfYS3w+bvf;^qtD06;yk^g7ORJY!6RE{Y+6)|^~f&0GT0ofi@4h(rImSD zdTd&T49M%w#bWIy?61=nA$5M#5!BJVS9iO0xs+IM4F!U}#>kXZqI+ldDhp>lBQ)HpOzy-eP<#Tm!30E#Du81`@ zd)l;0ZAXz`j!aXvnb9#&Mfp52{W%?cTe&M0`m}@>yyPU_zr))7l(Ck|fry~iBEyCk2l3JagO^J+Vqngeqb%De!agg==ITB|Dmle3AHsX!h(N)bEVwkKv}KqHoL0W zO{P&2`KH?wOrpISTc%*%l5t^43L>(nNtr0VGM0&=8JQHNQNU zJII~Y-b5Ffx#0kIqwxAFbq?Hw4y5sYL>-7MKMSr5H&a-(w4g&Qda<->7F?sQj7WEM zT|^gBlCv7eSvj~QMEuz3q$1cJjKs$-DOy!2cdW2<7xhV445*kZC)8r=i$E|C=Swoo(k!{r3g^n^pude{4wrLWAQq`Oh$ZtQ963lB*dNS` zOI)@d7g}oUBqX&wOi9{$SGGL%193T0}u(5E>#nr9Z--heR%sP3Y(QA<^z~2FKGGd@%GIV zI8FGC?dT|tSY&b9sE#IhiRl(_IihGF4b@X3%F;zsdwUqu&w&AA+#%Cd-yFV>F^O){ zDkI426*G?{0Z^8Yo88Ne^1lA0U*3GcN*#Od)iox}uM#s@t{T2D1}UL6(r(;h#u5PE z_9mu#>l+8DKrQY%TfepnlthsmjLrIFYN(oL9s|N3Zql&}pxmArU3Fx!(b7RZGvu8_ zkf!W(7oG6HCBc!VBosgMZM`f$^eDCxBQADx6}z{Z+j<$MN4RHi?`WZbD=NY>7T&Q@ zFQQp3jj!;+fmp=8rIh|+oi*q&3Z1A-a3erm<;_W43i;Nbw$RX!t}r=IUhssoePK() zUke&(Giamwg$)*i&W6?wr+nCO4mMhpM~(jWM&S%BY(-6jM%s)sDo`XFALuyO7HsxY z1^yLojtHmJ%88%Oh7b-TcmgGy^kfuFAsGZZ45w&Izm%*$l`JrXB`^jep3oF z9+Mg})bC5`P?3a@3Xm(+^|v(DK}aY6SE$Hr-&^y)=OD7+HFR8|=j?bD8EapCpQmUEzmTJL zNtCLu-WTTsBiX9`*h?dRAg{i|1&b`kTP$^i?eFoEzKK=!)%Sji4&w?+f5oThT-2v; zY}K*)E>O{4Zi@7$KczpzBEYz+uf88tRDIX0+E?|J{q*{TpWPsU!zcAHT-*YOuKi+*Z)>suu=yjX}e=0uJcc0sK8x_s% znU7yaUA!`m)mPt#_I}O!dr_BKQthknEq8s*`fr=+tM_yJxPF((|7QI^M12}Ns(tlc zYRz85ew7DRzp45v4i}r+SKqJt-ZbiO!TG^O)mQXWoE&U_>^s+eM*Td4#6+liiYDRw z;QH$O#JsnRib_uSD>+rR?YH2o2+j_*43;{7b{js{QVdjFt}JJ?`LQZvUST CQe4vj diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike1.so b/source/HOAUGens/sc/Classes/HOAEncEigenMike1.so deleted file mode 100755 index 329d38f07331d34f7d5c041d055fbb527b53428a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69664 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 j)jIqS7~R@R`b{DWShP;r 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�HSR>yeA0UPo4>de4A0&-SmVgvF8P8 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 S`iH7{O*7`QZ2BK#{r?B1{bVKp literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc b/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc new file mode 100755 index 0000000000..d141f10916 --- /dev/null +++ b/source/HOAUGens/sc/Classes/HOAPanLebedev503.sc @@ -0,0 +1,30 @@ +FaustHOAPanLebedev503 : MultiOutUGen +{ + *ar { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), checkbox_2(0.0), checkbox_3(0.0), speaker_radius(1.07) | + ^this.multiNew('audio', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, checkbox_2, checkbox_3, speaker_radius) + } + + *kr { | in1, gain_0(0.0), radius_0(2.0), azimuth_0(0.0), elevation_0(0.0), yes(0.0), checkbox_0(0.0), checkbox_1(0.0), checkbox_2(0.0), checkbox_3(0.0), speaker_radius(1.07) | + ^this.multiNew('control', in1, gain_0, radius_0, azimuth_0, elevation_0, yes, checkbox_0, checkbox_1, checkbox_2, checkbox_3, speaker_radius) + } + + checkInputs { + if (rate == 'audio', { + 1.do({|i| + if (inputs.at(i).rate != 'audio', { + ^(" input at index " + i + "(" + inputs.at(i) + + ") is not audio rate"); + }); + }); + }); + ^this.checkValidInputs + } + + init { | ... theInputs | + inputs = theInputs + ^this.initOutputs(50, rate) + } + + name { ^"FaustHOAPanLebedev503" } +} + diff --git a/source/HOAUGens/sc/Classes/HOAPanLebedev503.so b/source/HOAUGens/sc/Classes/HOAPanLebedev503.so new file mode 100755 index 0000000000000000000000000000000000000000..53f50c86f8e76049ab57db96d78ae93b768eed22 GIT binary patch literal 94432 zcmeFa3wTu3)i*v|Mxr&&fJRdl9qdqpHkbgBpi(E0$O%q#NP5@`K;B5s8KG7SldXwL}@iu(HTIEpb~H7`>nP1nSC;x@b>NdJ^%mn zJ@aBpf#5Y%y*pHWJoU1c!(md=r&nNi#UkR}qorXyJ%Jp;%cN$z%g`?7x~LrSuUpm5 zQ1%AOi%%unq$(Va?*w2B!F$>zvmFHs@9llEqU(ZjJBOd%&>fyz(NLF0CZ^(j7T%PX zqw!9f;`N>3X><6TzQGr~{Ig^3NEqz9?byof?v&#uT-0^ekdvyDZny zytDA8SB?ECqeIwr0c;A9|E#99l zc&j0LN_q6IA8$K)$W1-9KRNw{(tmAAd7%2}gO?4;TX;-e>F^&fnw-*p?x_XNX?0sp zI_|;apATF!VQ%H#JNsU|tMAO68DF3C=Q|&IBB!W+&r=C~i#A=D|=)1Jxlid{qy7UmJEJ0>4u+o44Uhh+CFd3Pd?5( z^zl~@&lr@v?X5qqKWXzHpACO;+_qCbJo!)ezj5d9&e?d9`$GR8_Wt7WqFWc%@2Pz# z^v3utH=K6y%76W?@7`g9S5E&&`bE=UpA}m8P+8N7FO;5eL*x=Auvy+b+W{-bwqP=|E zkL=~A9BVH>Y5@Hk2Z*juDieSm&nJOF;*G4}o2GeCaM8en|hF+jZM4q$i8 z0C_ul0Qmz0;2Q(z@4;qhH}575pnuN*c}r%TV;#N>87xQ_zaGZlGaSb{I?JT2wq?gH z*bqtXSuXN1LL4U`pQ9W}jxKfXF!$e5;FEq&Rezjwpg{V8^G9(-vcd_npRlX^Su;o~ zuEsu1I6m4y@XA&4yOg|PmB_P&I6j2Kq~Eqo1g8H}hl;#g`ESabl-DKrtlFazdlfTNLF#te5ThMEI-Z>P&j6u-724*aekhx{4b8fzeMG; zJ1(DB|i~# zgd@>Wb&|-H*ioqb=}~sg@%cw352$`0ts1l`ySd7)nYS<0xaw4SHvRdR!l{nKd4zG2 z9Fe&3f1m2d2IbEw%I-mx2e%r}rd^shBW(8BJ-i+w4;Kl5sXrGY%1`$Q$wQ-Zv`>v^ zTw3t!YW#TO#?OUne7e>69H;bKRsMV9@}HvoDOTg(#Gk6hRfAjd zwp8KFM4rjdwkJg}T^)o+sr-9#L~i2TtMb;Q{5RK!+myaf>2Ff_EyvNkJI>KPO6(RZ zd7c_4<#F+zrt;uWaIB{T34r`J-vLU|8eu>Nj2ZAlmi&2IA~Gii(yjTd}-oRmJ?36-7mkqNU51Ryc|lgE)$EXXOjQFP@c z;}@+epSWayT<(MO6;esO@1o6G_Kdv2yA4Xgj~`NU9m6dU?spilqyW zsF=C1Y{jY)LRxKSa?<=oi>6doRIFG|P6Za*>7-A9($vzDg;)QVniHXEIyJLwDLO-7 z7vp6MP4;!b|5lT9G`Xa5Sq`#$-I3A9k*Y?YGJoZgmGjF>%|-({WJX}uV4~{Q^l__} zE-No9nO(kUK88eKW)TM%s~*1q{l2JVQCxlcxvG6uS=ow(^D9=^4~)aLjxaP1R~~S1 z9HtsSJPuQ^9UzBk9bt$ZuKQmOlEa()8^h%AMn@PZhbjL%L*=kW>Ezat221+6#-&+- z`OEz!3rZH1tj_?ficny8mU+(vGUl13DObOCN5o$wRic#5{zSF;NAd;Qy!R{;-Ipq1~v+Tu`~RY*GKd3t-Rdm+%$k*EyDzEL#Yo`@!DF^l@ef=VIfgp+j5w z!mEoGmR?=7c>dBd`(_hpn}@c*PnBM!%*2O+=IN7`U5DKoXc!XZE3PeBIj(5&BHN1b zQehMLM02kqq?&Q@B{M4~7U3jOm7bnHZo&Lj zOBW)pl}nc|$z3?JB0YU!>HL*N6)Wd2tyq=2FlXj`{K-K$P+3%24k&~YH>w=-%a<0d zE?K#1>5Ao00RDvX`Ab*k{zsN(W)$U^gYkb3q{i;dip-)J3lLRFN$!6Ve#{YgM-C!S zX+<+j%1Rbiq_3*Tota6Z31ua#R^@W_d=}+o7UdO{ten4!_S}l}@umw!%U3KaVGYVw zCata6SY}n!vo4QG`d6!1VzuTZ`Tr@naT5?7);1h#v0PRZRW4t8O=U?@`HEFJGiFXK z;#szg1`I-vWglnWg)2*zl`OBIjA$`sqzGdXhuZ%77|Q>K{-mO!iqe%Ut}ViN$8auL zxpKuyIk?WO7&j@Fcjf8)<%^0|mMoZGMtj480UVi`Ry1QKACLe0(`6De1Gi}lo3RWF zBOlur;H1912EU5_qL*XD`2YDN5LjDwiQ6MN6uxipnv+R?xw};<}>M zG^O>x(T92*>2cJ@R4pq}Gx5JW(=o2|keu=|+WD3(LlT!^5t&bG(j^!F_cM{P5?3pW zascw5wVz;V{@=Gw{ea7&rAwCQ%(!^wgd)e%RjbMon4@AvWjPW`PW@-7%PMItH52q7 z!Ax9Vbs_W`wP=H$SGS-Jlo*tq->jAPp3<}X;fIz62x z0bL&#Ra{qIg7s?g3if0sT`99mCNqq3F9yk*Q$Xa?T#1#wH42_J*ts*{B?k%Z0Ukk6^j<0efHQ@E5@En#bq&W z$wHhSsFY6fg(5F1q00s=TnmtMoS9bQwg<+kW7^cIMdQb&Ii~q@r%WvxH#U7jjMdz@ zu^Eo3`T1E>a*NW(ju(aee6*V|c3gV@qC%2dz8fn61hcV{XSCwIPm0F}y*JE`w ztNXGY>b|)t?^GWY8Cj!P&y<^G^K(ABZAkaLVUl0w=O6KM^S*q%+`R7@FYi|VkbIHC zCemY(o6o3lwYo1!`s&sqi`^Fabe6~;^Yb~#O? zx%y~{Ynv_d85aE(i@eApZ?(uTvdB9u@^dWmPK&(UBJZ-utkZjqm7kylydQ!Mgoi`=lt>n-x1S>z2Cd9Fp?Xp#FZ@+OP?W{bSpA~!!{ zr|K4q-2Ci|$kzRV(T zw%}Ohy%v4-k({(r&yUi)P#+nyJi#K*x8O%C_*S{wqMvTjFSh7g<;fQPaTfi6Mc*p- zSoG;RMDvwz(YMM|Ec!n;l|j=i@@$Jd(;_dn$bA+$J+EoL42%3~QwSQc$ZxU84U3;? z7I~>fj)O$(Rc?{f+%{iT7WooW2wH8CtB>}$w%#JgN7=DggGGKxOp4F_Epl@Yr0N!n z{49%pt3|GkG+f(ek*kj~S>9ohUuePUw8%>>@@|X#DvP|wBA;oI_gduYsKm7abuOZD z{!@#7vTqcZ@Ns7B85t6IEOI%Nld51-AKKnz} zofbJgBWk|7EOMVI1nsuSM_S|&i+qhm-eZxUW|8+=1Yd=$5EN4X0(aRXHl7!;%Ebx&!93b!O?0ipG;*+d$gR(BdAPMHCoK&W2j71 zG#cRYU@FtpjQY6zEkY}$DH%=U@_s7QRE&DKyobs(1*2{*e?Vngx}y#*ze{DBiqW1! z5RBeQWm>AE-CW*5Wm<}(om_sI$}~lzZCu_&<>RT`!sREaOj9-5#O24ROj9)4z~%d? zOj9#j&E;QHnWkj4oXfXUnWkd2n9H|OnWkDaz~x)0OqWzqAD6GEGEJ>$8kbj6nWj|K z!{w`}Oj9Q6=JEn6)0BuhxO^p*=@Ky7^8>{{gUTK%cXN3Ddm)+$}U}H3r(hek`@m*a3p}hp7Ea zhlUuz9^<9Rg~p)m#_NYFk^vSyM!=30F!3QCuX^%Y;5aJJG-@WljRt@W?yfl22u;2c z@<;|U7BTQ=?sjKB1cMG7?$5JM*r~bDQTe0jJZOsFu%D&uM+vg8b1si($bSr+zT$xB z%``&SRvE$XjJmHY+^GDXG7!43ub~vAJ}cRj>ev$JO91`o}i89abhCD|W(f|QNW z8p1L{hTAwl@xG%+Ia+D4aMh)O7>zmUeR*}C`orFB5IQPG=Y}pZjPO;-xi#&BjNseT zL&uKF#cFiGy&JEpMniJf| z76Y)Dbhfrw4aKZUTV3H>s72_a^68-qBA_YLLqj7qRSAQ^8?M?QY8Sgc-$l{`uCsQ* zwi`87u9O|q!zVNw;c4Id2ldsFeDDERVaEa2yjO2dcAZY}=*YIA2VBD)2VD6t8IyV| zKSyCiZq2qq(FN4E4ShSwgY`F~K&~R(K=8fX(Bt4V zO^6`o$Q$4H_3eGe2+r~*^u2C`K%y^VdNxr0{o!YH{(qP~Q?maE`9s+cR(LTU%^o-< zLG?i8BBL?=)4aNmjPR+F{4uW6k(L}IFMM;d0hj&3gGOj5*e#TQM^@j7xs&$g1rJre zn;W_buIB}EL$i&L34gfr!0UT`Z{y+y%XqmwYxWCnEazFX;3&pz&Av2@*F`WiI)xk# zW_wf8+c5CPq2u}jG=5#RW3gTv!Iz)?02-(azK#BAJ77ExwVw*fsVg=nVC`);)+FVzDdbrTy7xdo8sE<6O-k z?#YT~D4MG1XhlaVnxtqV(`?tg4xr3y+wYp!i+2y+5xl$c?!vnh?+zn8-47S0xZ9_A z5Db|eK0Ud8ikAxQQz!*2o08T(#RuMJgjX79aD8U`l{r0V;#?wI*n>Dwir+ zu4t9eTdIlTWwhT?FC4KAnr+l7hjY zYnC1rrx&c%YqmkNO`2`iY^!G5G~21!F3mA8(AEahB&1bHCzBBEU+pz5_>0$t?KMv^V@zqU=>WIOmD|={^B3WK z?KR!Zz4D?FO1$O}IaEWNh!LKWZ3O>BJDm}JvK5l{nvX;ih_PKSSVP-PXlgRNqYV{VB2eav8wDCmmlK_6=wwf-sJY0aw#IN3g$dnM*GxqvIbg3)Kz;Il|o79 zP?v==(ujm7ulXk({`zKk{Gr4oh(a@ypB)Fq?9kLxjo@d{IQ>1+$m+YygU0(Qz2V8T z%~lu!=llRsaB4o-H&FWm**Ajk_XPq*2*=Jv#&|h|y6UdNUVx)`nt2q*Ra-5T9gdnC zP95i}qdO1&Q0m{lC%m`QKlKOq>^+;WKXAIgDFa8(6dY(HG?3`J!d3SWSqkx0l@SWK z{gd`&1^2a*{fgK4lHkTy;ndrVH#I*xCw3i3$I_&~y^q6cwrgysYn}hAzCJqcR*)#m zmGUwQNh?qQ9jWMOMN<{cP;@d=I_EB@26XaW1}0hxOfx=s@hoKtzP^yaPM4}n6F41l z)s2PExD@Pr6X$ZIvfNcmvj(kd%vQAS8lnEJj_Tj4s^TiNxJoE`O0L_2x;f-q`&8;%qHdXdzE<)o#N1#UEOk;16Arl1o>p7kP}(F-Gt} z-lV_g1$X4RE_#bJu}1p6?!3C4uG)H-^apnuxX}^(n;+s7Kdz%ak?wtceRXYqTuft0 zfz(w?D}t+jCy&+&+BI(UCZnaL&BnMk6~4N*su@PGi>`wWtRNHkGS*eM7xMr)$v0P! ztRlYi;}7=u$8;Ez(d%nmzo50>AMEgt=@H4Ar;W*Qw)&>W@+RE~uiz$p^?N<8+Eu{w z2m2yd!vQ0dkI=V~)9@TRxs#CXcXKIp3iuJE$Ox4qFE@JKk#F`&n5MF;b{*<*Ssi>4 zosnC!CK)TPm*Mx~UJS0b;ha&o%T;$fxi_hdvc8UUl7q}wCQy3ad7-=%+$?~P`|~D! z!5N4B*V+C=l|bA@g998uWR>>9ReK^7;6VLyIIkG?a3%mN8k8lcCcgbL%MxluqSU!NAB8Q zQGFjMD3EG)u+0^2N0|~fD7ph2-LI+XbNPcedNWJQ$KGG+VFOl0eZ0CI{Tm*JFfgU=uAH3mg0lA&ICJW}a@8>xH*`7!5l%?~akSmyP) z*8ML^cFhmK=l;b=se6G$!K;n!L(hSUJ+7ybVguPim%SGm4wT#)?5j9Tbw&Sy8(8qy zs9BTZsL1t)R$%0=Ovnw*#Q@*$pLD=*UG#SvJay;6dHF1#3Me4G>xU+<@8T{5C{5moTZT%SNnb;{j(c7h8 zvRqFeRX;V2yC8Zq%c>EE1M*?@Qv=cMEb<|1J;siz;l(T(^c<4`8r zVpQ@lLe6NyMZ?@X+1N&RMF)Y0axJ;bBYZelN*Svm4f-TgA8tgy1bSp9CumD#7t{A6 z$HN5r+g#tVxUbzuSMEk|a{gD?o_Oa9|HfMlBki@`1`v7~;2VW?SoVQhZ#~-5RxlM8 z3AJ82&(g~X)_R*1Z6+FWUUk5u_PttfHAIo?*drYCX;TO}_wV;O{Nat>HVh&ow2`d= zu@lAll@+D_@C|O-HuJ(INcbS5?$c-Sl_~VogWO_q7MA0ogUxs%#mwGJ4}4Xwape60u5)9Jdk3)?g! z=7w)_N50+71EDtM6j^gSQLE=iZs-alH@pT@ByrFV49`~j|S}nd<0PcW|h;@|@@&aOzR>I~Nld6J~-pvJ(#Bvy##1sVRBE zkMlx{==kta#f5oL!CJW|chcwBC*H;)Rr!iP_>D0pYRHPdrV|Wet-kT-U`JisbuUr> zqd6AUk1Ai1j@ph@6ISy=iv?;Qpx)rkaxlcXq1ABW0&gUbop9BDiVqxVr5nPPm!per zrY^dtgSrTtCUw!M52=eNx9BI%Jssn?pC0~zs$^{QKyF=#@1(6^>Nahxu-9?-V?_NnNQ_O^pZ9@j@>ToV$F>q_{l#`VE} zb6htf1(tE0;93`e1YWx8N-&gL37S$=&U&#?9B!u+(dVT|(V>4)9^yxFJxRk!!=Z^$ zTtNh*cn0MxoKz*!ppsr7(gu+dIO+aWq_>OoZY6b#^d6DkrKI1AwFkDdwGB%8kx1Vc z>77dYSCO6}2n+;ktt`cAhW?=Wh5d-;S0;Uktmc=S=2rvNqkl;+vZb3spM_oNSv)g; zP8q&&Yu1_bOY{?rXYp0sv7}^RI<@=U%jYjEp&7>ZFu<_cVf_VY{Ol5ija+BWuJq`O z_^>9nf9UzO5>X61zx-I3LrEQ9Bz_bG#X z^Juf=A~wG+qN;Gx6Wh2?CsHS(pWKx4aMH6|SvpBczZKoDM0&20ek9UNK`^C%73uk; z6wbI*>9&eAOLV6z>HQ+TSa1y`T`$rnMVh0et3|q_zqDAS3>eNRQo7Sc`ghU2Qb{L> zv|gmQlPie$G?C_#QaHo(Awi_$MLJa>?0=85!%E?d*-H8kk>-o;A|>6i>xgerBcAjkum6+!YnC@)JiBauMJYCvr8ID<&K&Wgj}fo-k`*-Kw`0W9aA#xa zZ=4Bhz0GJ9KioxOBiE_njvFFyDS81GBROB`@qPPmOnuH8$Qar>bz$9_jrpTcr0rl<;uUZjpXR z1Y_bDk$(0PkBP69^h*ZUJ5uY?6@2dNM4o9|x9&$cV`bxvRre`vOh+v@cco#-GE=qCye$@LeN%_)g7~fMd(^TnJ2UA{=)tPgsq~Q%p zgJkU~Im_ZyI3{{KMj}1&g7N99TLHh2m+x)!QlieE-w#Dz2$Zg6UW0>@mu&C%DlxcQ zf!gYuHWMxmuyN;44=h^t=^?IlT^MAXmsNP|i9f!fy!1lq55rf0LEo1bT7qNEML6lz zvJBTW{z2WY+A|Rtw?2)S@Z?P$nA=J4OU}Qv|Nn$=j{**GgXiJyCGCC=Tp(Z;(}41a zAN2ZA#C2Z+uI^|6C7?(zx(eXKs2c)|CL#`;H3Ohou4iVSK<*G!ZkT2Q3Is%jGz`mG z-VsvZ!2%bDO)ykfN&>u4S59o?B;2awLmEoC!FEQIgW3;WQo}}Swz~b3 zKEW~j6PBuz9XZ4I@#wIh_a!d1I#3;*3NE+idtCf4@|L>Ry-OQe&G)!CKMT*Yq4z1Z zuDbiMV$v}WIdtIq-vga(I6cb<^iTR6#;ymNA7@2Uq1!)oYgGojA)w<%xh%frbll*q z;DVdNrTR!AyE@BTZaiy#rO&K;;T$Ni?gnoUSR+Uauln5&b<`NUu)LhsUc#car<@u` zP@uJ!Du|D)BO~F`L3qxquN4Bv3$*GIv@07I!h0f@vlr`G8_$UtWA@qjby3s^;!1I-*FPv)F&y`}E04txqzyiD zJ8b0QZipXuL#kZs-ll2JcSBk^;hz$$tL`I+{lSgi1WID?5OSUZdN8u#ZRuz-if5b9 z(S6AMp|?cZjc{^f-5((-Mzn|g4X^j65yiMl0i_ql6^U@6gR5B3O;nJ99bC_?=oy(~ zy?aM4ZtzwAkXkX>=X&9X$Z!Nu*T%{fnc2Z^+=?i3IOqE6Qi|%K|wyod2N$IWSq0P?`^t`*;p5-bxrS3*R7|})k-+yDA?FU zHqb6|Gkdy095VfYd@;%CPS(N5)$H?Taf2o+PtrHv=<9o-`Z?}&c+L#$u1x{v9W9mVy_>u~8P zyNWAZLcChPV+(iaSTE(@T(yyZUa0%6-n3NE;@EGcHi8|vpXsXo6LvJC?iE+vW5k3f zSGsH#68yPvAb*bT z(f)k(`G3DY!5$m!TjOn7n$nQ!}hUmstg^L?V7C}BUXYldyUxHiT_ z%>Md~#h-fO&5-}Y4VNa6?6^r&Hy!(Gi%yAAh#WIu8Rs-unI7B}!oiSu>;PRW-CydAB;-KVEgjoAJF$z$kY;#V{yhU!|8*p|xD($q((F~T_ z<>;qhBS+&=9X%DCtmAyr<~&`GKJ)CrO1xVpr+!b~!aAF^3W0=!_RoY+VX z-+Qx5-r0Y%OI{L7?UMI8mYc}ee?{`z!Qlojf83If0|qS=e88ZGfN&z_MF$HSoHT+P z`2hz|j1Ep5{L}r9a~n zk+-y!(wQ(-86|8o%C%&aMj08U>_Iz?412(vh95T#-!F#uZHD1#7Q@A^b+2<<`d}$h zN1EoUqvwCP*AXrC0A_<6r@oGCqg!IJ3BFxMHsAVu{58A$-w7!n8K@B@N}a)6wVz=* zi>yX<^doR)ItnZe7H%&14^lvzQ`bP)dOK`%7JPHR*Gik1Me6HhR;f|R>=kOR&(MK3+kJ&jX zeCu&DTR`-1ONH)I@zKttKUDbURhy`X;X}2^`>2WjKp%49GNhDFg9jsfNt-^zQ&)}X z7rCj8@kPre4vfv5VO$o`*{==q=r{YxMAG~3dT8)>ZjuK;zQAhbdOF8Zk5v*{bj1|? z8)?E?6Y>O2i&He%S{v?8Q>F7coLb!=5SF!=13>{9nEBb6z7KV=>k4I zJXbqiOuYuDiwThy6ZHw?0nSYs%=pY=P=(YeZSMeDpP`sn7X(V%Dnjm zLR!)9@sS#Nl0qP#N8WxVmKYjZlh^MTxmXf$${>X+_`W#Nf*SPtypXPNhq@ z=+7|%_~wFTpL&b-O1=x?THo+F2IZe1kmrWz^W0i5g-qi-8to6NLgIxq`W$&3G7VCM zyrf6R_LGy-G&!OZ0mUB|%Q)dRF1io8O2~bMPzgLOy6ij30iOO*cb9PKAlLW5?jWnq znQwWJivf=J4|4)PkIduVV32N_5wT0s*$mR}%AxY1z0JxX^@-LU!@6p(D@HWDi{S1> zT{*6j_*;BvXSW(-3EbCC-e%LYH=E^-tX$2x>c&%J`eSSKDQmlGtI_Wcp&k7pMAK7p zVA3b9+SR~|RH1FO3|v2-pkiLAH$-MbWpB`$Tt@iZRr@`VBj*yresB$#pV1%6wbK%DRe`4@^AkP65NyC7OB`yNODhv!sKxJT(yJHKC%Rr(Sz*up6L5n z%%b;mVO#VbhTj$~0L60~(Uv`8W(1bf=uJ?<5*+>0UcvUU|J&TT!L4!?>jJJnxI6kJ zp@k=Z@h9vy&uv3yUyq!C4D!9AZILKx@w!L;@zCP?C9c}j(JrzB4WdbG3b&!QMK+PM zeE1*{GS8Fv#*e-2Z{HI}WdZIW!Gl<{Iw6r)brf;rO1K`%-)@ zkc4wPP`JWdti3B4`VJszW8ubPcZ!< zSK{<@|0{h9cB<&&yM}@tU~Jue4TNve|Dlt8`M337`>*u>t9;@6nn&STMSM_#PfmW> zOtUiM6x@2F?^^Psl;Na$k=_Slk^WYs_x6|mPNe%D?Wa3Yq`&U3s}P>(FMV2c|I}aF zD$?isOJ5Y}=Kj)G9^oi9^_MzD_qqO3L!<;`iLFDV@Aj8oCenBMOXrBSUHzqZi?pl1 z^j%x&KLz)T{<IuS-g>cCf$nTag~s-v=r}cZjX@eYj%jA#xwOC-v7oMzS-azw{nR=Ro-n z6iuk#w}lrs@cl~5de=(N6n+7VlUxG+LP{wSUoKN0Lh>^jYQ_d@>95(d!(YH6-`w%L($1h>0$XSYCsRm z`?%%sX>R(`=B3H>cUl_0U%4g|f1aTaCP1HP6Z%Mp(BE|my}J#&A?klg*JWF9lcW}M z`qWr`2lc=cV#T?i7?*ppq8W;&Dmq%xk%}fMn#lCu`VMMzBF;K${il4kPxHYOU;8xv zf+<$yX&(CHr9Ub3$Dluc{8@(#(AvF@x{)Y-lf=?{_@*!L5aqN0{mG|4#q_6?{*=?7 zD*Rbj4H%;JiZ&=pPyUg-Nl}bjE_W%~t!PBi9z}Z}uQnXpo7DYQ1?NYQ`(TJiwiuNi> zry}w*K~cA&$%=XurP~suN0$mjGZpnIYA8zAB2=HRXtAQDidHFFt!RUyjfyra+M;Ni zq8*BMDcY@QkD|SbCg9Ej*{3@UL_Lb8D4MCLPtky)`HGe*TCQldqV z9og$pv{TV;MI(y#D(b+UAof$yWJOaHO;gmTsG(@SqQ#1qD_W&!y`l|@HYwVyDBWKs zyKRbgD%z!JMA05a9k>TX`U#3AE9y}+P0>t64MhWr7Asn+XqBSXiZ&?PsA#jIEsC}& z+M#HdqTP!2DB7!N0`8}AUKRBynxbf?qCQ0fisma?s%W{Q)r!_D+NfxgqAiNjbw1hc zP?YXCQn_2vh@!oU(hXwEa);+Uah$XW7B~D?=fC)ReBUL3pM{R>+(cI)mftv#-#3`L z-6I#!_(g+Yr%{7n=F!L5#SPKt@bRM-G(;bdE8p9{Z27JY9YXWMWnMq|K*!Q>#?imW zu8%JO;V6p7&rpC$UjR={{|H~E{4seF$|^PJdti&`(Gp_Tn#^y(;EousAx6HB11)IM zE>Hla0tm&#PAUf9r!9i)`uZ-zy(J(k$fJL%AiG8@<_RzgvQa^95Xgf~0vQxYpgR|U zC0I`!>=YAixXDDkG1v?Rnl;R%Z5BW-SDTA;4ge$LAm6Yxwx#3y3As5cL#uR4C z{n)VSu4p*p6*QnE&xl$u{+9Ll2PfBpl^~>||Ch`ZT#gK<6n@)fqoNhb0~ zcvM~?fAx^~`~@g_us|cH*&+|OMZOw$l16+ zBZn1oP>_8Zxxp4W%@%nJeo~E*ZwI5YFiv?9c2H#F16dYm)FlkHo83D_Aub!&0FZt5 zY2<4Z@-jjGjYjs^BCoeaZpZV+jC>au zOE#VbMK;_TIbe(Iu=RNr0NLj$8hN2YE)wJ&_pnQp=TckbO`;H&=U4DFE+aRBQQ4q_ zB(2X*L9W%v)wakLw#cWO$e-b>WD5C-CP9826xsN>MsBo49&3wS2|)HaTO-d_$d?In zuXGS)qs11v&vvG~iYIOv`F=1+LE<4Sw(uRkZUQ1DrN>-;`|nbR9fmT2fM#LsNC!JY z2Smtku^mCX+{*rAU{ua-fI%{REg24H_%&d+ZDbeNBBz_k^ke-Bd6YsPDadM2Q_gyA zk-xTG5!c~iLC)FbU=(sYc0clY3+;m8j5cXV$Zn_I8qi{k{7*cf$jBSPDCA`dd8r^@ zuaQ%1k*jR8G2TQTtdWmb$Sy&ippkvH$X;8YgLs~pea;7?e0~;NI%VU}w6%vbK9iwG z*~qs=e$RGnzE2N{(^>eBU=(tZLY^bY%^JDf7P-+DIm1LAs*#-vd5|D4(8%?+$TMt_ zL-d?A`FtfmSxwiMiH~E)rffVyJ9jwaRE^wZi+rpt^1qHz$Sq)0HZD`hd4l}boiIRG z$v9=(B5xOkxD|1tiF}ksK8W3qd_F+CU^t^eBX`;&SKA_ok5)bxf>A!-r;zUvSODqK(dmfME4Yv^f{aN=XA#z*Q;4xqI_wC)zIJNs)zvr((Qe-cg{ zPl1M$&H=$!1z|6X3=WB&hEL7NpAQ?j-e3$}Pj?lfU*NeI`JP%haj)3=BxXzD+ytH2 z=YPOkBY3?bGd|H{Ji~%_ui#M#k_UzNcRaRY#XCjtn(gp@3tiK{iv@35Jl>c%yk~yN z@#fp%eTheDOuX-)fV>@y(~GWwj@7@Jf|n4d$MH_L;5{yQkHqOk-^AlmR=m%D!FF43 z>z^0KYl5!n-yFfaA|CJTIJ}VHmD=HbjmPgyydMePuz0++(6Rb=rr;&p;rT6i&p`qC zdnQgV`Zm7TYQ@_kQUT?3)J4NtLipRs3^7{Gr zos6p#JG@IQc&|bM@wUh5Mc=^}Cam$QIonll6Yqo2HRHWO@UD%=J0}iry!cmdhxaW# z5`20#IhJ^~;GG$dR|g%de}9v4kZFe(u;A^20^)r;PA|F(kLp?Rt`@w=I-7VOhOX&f zNbu-G^nU9>dK?}NP}ps>!}}gzx-jw17rcq_cXp+*YxjR!Mi&iZ+slyF6p;sJG?`9xYxwHSn#IB;{~B(^^XP= z;>fqdn`OcK4hqma7^fF~|BL>3#|vIUoF2#f7<5hl9v8ev;`E{!ad=NizqQucF;`F%xOQCDxJuY~U#OXy3?CX!0E_kgqHu-n~x+dNn z!Mh?JFEiMI{9Cf?P8wxQCf=8!YvSD?c-O|`<;CGu3SPY(Ua|%6Y{5G-9`Auq z`ujIr@G|Z2mP6O{Zx<90@7r;D(QiKPkM{?$8>zO5cPn&FypZ6ni^sb(4lh^m8tw2- zw&0yFcoXCC9>SMNt^K=O^b9+^a_E}=?S%s3{UlB=`W?PIV#Ql4c)e?E;@xh3&jj=6 zUctLN9`CX^ype*}Y=?KM1@B_Pn--7v2p)g8`nO5+^6l_e@}u(E6lmgiP(Zu~@^Y^&mJrbuEof(JsrRcTZY?Hs!EO>K7?}~W5NAVR2tAD=| zy;3{83h0{t{YdnN#pCtiI|f#~v7(o3hqnW|Cf;*UK>nVI(~HiI!+TZqI&QLw*JHuE zTJ)C0<30X)zf(l-qZI%X=E{RVcu2dz@bM3g}q# z_iNGXy3r=yGc0(w%DB&ix^=(b@lU{6_xpLGH#$zQj`V21|GCsVNth@u)!D!(;LA{fy}IyHxvJsgK-X#v8le5p5tHvp?<c+=il zQlHSjp6wlF#d%uh&B5yr&%>MVn0~4ML&#(Ktx){TCw~8gf12BepR(TbTMvGl^T7mp zFiSlzanFihkm44q$u?=WS+iZ5?bd8W zvpt&a)vQB#4igEQb!#?RvmVW+Xf{o=nVR)!*3fJ~v-z4W)@-R}%Qai2*=o(!YqmkN zjhb!JY_n!tG~21!F3ompHlo=c&Gu^6F<4Sb>C>!Rv&owEXf{Q&X`0Q{tWUFsW&@hd z*KDz7OEp`i*=o%;Xtq(a&6;h|Y@22~G~1=wZq4>+wpX(WLt@!+Yu2OL6wPL8)~DHk zX7e>$s@ZbQR%^CivyGZ<(rk-nTQ%FE*-p)NYc`_UUd=j&>M%8%tl1RJrfJrvSwpk= znl09Bxn`?0Td&y$%{FPaS+lL0ZPRS0X1g>S(QJ=q9nM&o37SpTtVgqHn$6U#q1k|D z>61BnVGfmQwo0?rnr+Z*qh^~m+oIVv&32e9zD1lI`>7@v>@q9xpU`NwN3*?}O*ks% zr(3fg&8BEJQ?owJ1~i+m*;37xYqnam^_p$eY?EeNG~24#4$XFIwp+6i&Gu^6{7-{i zb$_K!soCn8V}1{nw*90laP;7>lF?VaX5qK=*X_o=Wco(gSJ$D&{6<+13J{J|bhM(W zie@M}nJFD7KBorsjk3?cL#pVR-Cf&Yku4+EaNaB``gglhWGODcFfcX35ERnUJ; zfL=b9|JRAiV<-kF&*|%qyd0$S-I32nnK*LHAh5cp5|DsUfDTO0-bsS*AfPAN)q&}I zY~QvArXj4S4oqWJV9r!Y$z(+{6irohw4x&wO;R+G>A!Vg`ag3@Qki~w1BKkF4@`f6 z;Q#o6Dfs^mOuY2@^r6DgY(TU5nl09BsbmTZPIMBW?MAdso5^g zc561G*&faIYSv*n9cb3A*<{UnG@GK?G|gse)~8uRvjNTKYqnUkrJAkMY_(<^G~1}z zX3e%}woS7gn(fkTw`O}Z+pF0GeW-A2)}z@J&1P!Wr`dpJ^EF$l*>cTRYqnmqjhb!J zY>Q@FHQS-tPR({}Hlo>H%{ug>K4<$Eb;Ak6?_Ke;Sch!+rdIgH?G7| z_HkrssG0W>0zHWLn-GjdOt&_ejg9}-%{J)TFk+&SgJ^E7;y7Ko!8$ap? zQ9%?s1+SnC2Qh$9n)gpqO?{bFhyTW#j4Z*~UGQseHmc@rf%d6h*m!k+jw`<#B4iK0 za53*MD9BkONK_Q|tVA_Xp-q8#Q>ly15^ zjkqHaVC<5Ezrw`n`y;Ssji(#`6VH40X1eD_{{1;Vi^k$OxK-dde!9J2L^5#pG zkGg-(^~!;7ujaASYxeWYC_}H{6JX!y4Iq%Z7P0S6eT(X(t6`QF_N`EL-$}C>a_29k zt$XxMtT^0DQMoxu1zQoyBCijqi@XLIpxEl#&=Q^5fh=x;5RM!0j&thDcb+SF^Sa4Y z8#*x2E5PgdhXRpR?&SyhhZE6!-s^<1!JAJJUUwZ|vy-F916sT5Xk7tKJdshjLkr;& z+Tf?xXh3v;cc;F16|3PV@L}>Lyq$j_3GgHEbvxH@z_{Q( zg@n7x4O=v#qhv%3@+fsD{Xz`lrw##wq*J8lv8-S+Q{Y6A;K`#Qq+EPO5UD4L$^jJS zMJdRS$qVibNIrrXe%4DqU!~H6{LN{eRnYu%C#3_!;{$5@9+LhgkKrb?AR{!l(WJ`k z5Mb_tXXJiCCk=AspN3cdKiD=#O1Kp(3`stKjyv_*rJTnR19I#AS?Fh+Mc6M~M&~HY*5(&pn9HX>CYA@dtA$ zDEOQp@trO)>`r~RR4_-sE)3#wxu5SK2LOI7fn!$hrbK*7{!x2Oa`w4Z8SF-};9oRw z(0JZ=6uHu9i@C&BJH+a|57EG#T0|C+JHqA(G{>?EFEh zW29t4suCo>83vm0dXjXlK++T}P%D%N4Jb?w@$VGg%Y-z`>x;ZpA(3PWx;vvvTyUlc z40Q*9dN>jvwR*~%!uF{le9jmqiq6vop#VQ4OPxUrmpfyGR7x-c!oiFaWq_p-*yHR4 z7A{Mlbf}1se?n?1;mp2D-oHeC_+?@Lg7~MrnFRCYDhZ~7bg9wf+^EnwM;iAF#*l_S zwoeVI!Fi(SoFNDZ#z5q>i^oE`P*lv2*t!7_O7MPw6ympQ$w^+h@k`-^KgY!Xb`eE^ zt%>$s$|}Y`iwZ`c16*qNS9atbmKG*HD%5!oD8}aZXmKnJaTSV+J|9N7*(OqFWcI7r zlk}&_7pa%9X`Gr;2$ANs^Az#|KE6rDQZrbg zFv%&@`PD)SuHXcVe|yLTenLa}k$N(zG8)UPO!-+#PDeC&_9-H0PLk%{pA(FY&YEsdjHJI`SCC5+6 zkY}%nXT|UgvlM5rMkq#ZxP}Ivd-N%!Oq*&7^3Y8gi!KoSBo9{=j_x7>)}juk1zs~* zu7c6KMVFQh>@!UOCQKJKL^?Kjn^{u8`+q)00@kPeSl_jvGI9Vvev3A#cbHZm6D!<# z^O!G8yHAYe}j(43`(&YcvJ%EQ*wS4A0KbP7gfI%46vU@- z-gl#2Y-!y|8ft0Hj4USCFa$m>mY5PpvKNKU*GLeX!X2DzTK_ScBIL$M6;t9yQFLw< zgaWlqjND9R1gH0jF5O{$qKsot4}k>~nCy3|pL!@T-VJEQa*v*hHst#r`ojwst>UVm z_;~c7x0ldvUoJ6?5F_ryTw>5q-xM7llTTuD3`N6SY6w#!yF}61Llj=fk=UIWp)z8^ zb&uNnBr!Y)$BQ{6D1pFkRABvL;<3ju@z@)^0)VlY)YvoPVsaDO3(F*?pNmKCk(I34U$esAwJWi22@grhrf5&KQWF8Z)6fP#-#-&2%^`a5m8gOE{n?y)3TESo%8RQ|B z364hW4ipRF6y=CF)b(B;S%0F8(&0|LR16i;b)T3X2?@324S6Kj3j}%MVD&<0&s@_` zKAE&^SMX_w@~KOVl4FK)>^I&3Sx;BiUndw^UGh!qzhg<^B3|_IJ6}>vtQYF6VoDbs zhnrnbb(9JudMl@+SXo`qKSB|C?rMp74ufF*PBX2JVM)Q{mjuE+GM@#7iEg1z2Pj|< z0v12R9~bZO(y9Ps2ccH6XYRyhBBcux@zu{4VP8NAmu>)~C&r%g)}t~qiaet+)>gQmw zlXqj@Dhqk9k=?k7JX?2_^6aOK?;d@Zv=_&|m_v?Xuk!Is(C&@wqZ;z_IBr*%w4GH8 zoli5xMJjDa{Z(_@(xUOeRv-k?V7V_$grQDMlzcQ^j*oqvr3Ps5C6CR9Q zk1~+nf{PiYY`rikQ>ZgVbkQRz$`xJ+Tm`gZa);u7_+ro873guM%mY5U7c4C`|oh?i;kLhzA=v$rHN_8q`na2sF z#4)?c>VYK^^Btn-PJE2fB<6X{W93AL7A6L`ROs}HhSkhm62)Ss50%IS7Hx2rmD3tC zecTkORMwNkP)4dibJYLJ2MWx-Bh>i{(|*x?ETSF^5q0*O#Q?BOA7SyD;3GRXi5M8E29hen04~cJMGq9Zvgv@~7LHl)wkQ^odwx^I}O`A$dSk z^FwikJwH=~eE6W1hO;+9X^zZgP3-?ypecqv-LJu%sZu?MVOh++tI3l%NTJcNrNspI z)~KGlFrR!$Q@(T(Abd&sgc!90-OGGo;vGVrHBx8oye1MM6P*lRs=zmR%Y}0%4P%eZ ziw9f-liRcz;(C}ah2&UYMZP>(g1nFqQ`wGt^s5@Yzr!S$*beYD;)Cw$f&ZA z+yWkIuaW$>EH6x4F4Q?s^ejoj{UdZtBU^W;-YWGGJ?_3_2~?Ua_R9Dkx(qJp7G%69 z?Na{=3fnTgJh*GL8}Mbkk;xcqCY1a|GRAsmQ_SvEx3um6l5;D|3KKUAb#7$ZZ*sgM zB8!tt#7V6C90$B@B|F7pN4(7#CswGL?9N}ozeDh^!gA@B8^6k1A?ILsw(UmV}i2!mc2Z1hX zm#qA2ohA9}WGX9LE%SwmHwtx@NuAZdpolE~O*H-MHvNl`9S_;TAf|hGa&?Cx*hb^f zxtlOBS-MfeJ!}IGN(c8)!)q5v0#9N~?$mR{A}8>}ndEd~;x3`iSDE(f;E0GU4*r$_ zkicHkLB~ft(2I&leRi{CnmL6Ymk~3`(8V!G}d;aj=YCMg~(%2h+&TWaS`ke(Emn zq7054tQ@3U$HNP8Bg^dKOlr8HSTZ<)ExA+uVv#fGV7@T1_cHEkXM}0LE_NQ~;NMvS z2Ysf42HE)y*+B*uv4e@rNDJO|!&~Za+yTcSG5;H+9D^X%$pLEmMUga3ZD9M@uZpQD zl2YKDE3VPiJ+50)FHxTUoGI3iQgQ;yKl4Ic-6l#6aBYFJm?)BhAHxz~@gHb`f%R>X z8_6g->{Ql8m(xWHo7@xNY@~i5)VY(Xw%{sA{ai%OKBmAg7ue4*VaQdwZC<4;@gS>4 zA#$`b`6#zSS^}oYYgtm5xM1}N`05bdKr5v^MBcjL|o<;xwlw+Ai+y_~yz&XrxqKS2&+)So%Inx&Ti88rG zfH3EMrpX2o@!1(B*D_k6^BNJ;vU|A6T2?A>ZeWVITTPQ~%H&ItmbnsTK!7ldGfk5t zMO4VQ9ST#AW0XSYp-Uu6{0GyAn;gzc1Yx!)@kpU4e79=-{S`X)}{-VzY^?6qA!junKyz94345c6R$& ztpGfnN7x$kVfyzK>bVc_L)zgD85XpJ|K6?HI(uZ0^IstnE z%wjEo0@hmhY3iqF@fUWnWk z;lG+m>4JZC#bnCmuJy{twpV@!Je(x)zqmYK9&2(X=ACOI)ZXL;#=>AIj1 zY$pRaaJw0eam$`11xe4q514s*v1^v|6nKd5Q#v1q%ysLV<6W1zFb!rfDMtz>%^FNod@v&|!K`I|taCUAGe-xLqJnX#U|OafA($2w zOsfR*k)>xo;GW5}4W`))#&@J(3~Mm05{x(2GXW&o?3t&SAM4Bpb=`V%TC8X0%$A-R zFFi8y!;6j(Oos}lt$)wplO#3F@^vsLc+FAPX2w!1vFzpXg>g&s34b^6C(97xpo*dO zhfWDZ53zMfuo=i+=Epj30CnA3cTOyj+h<82S4nS-Jo!k0bgMu*BoG9^^98+gRoA7f7`=kmnsJp=b2aO0)!0!2DQe6n?sH{d;OG z5Qhq+O9B{KpM8WtXa%AbtV;snZ*;#`oF4d2WjX<&Y=)5C#$t9O%$Go(jcDv%ea9wCqvn4mzqB@lBd)^ns43bfH+ z_PzxyuIgNS6EX&KVFnwOsGIx|F)T7w2?D526;YkI1do*J9>PtMOdHEmi=OY03iUO3Sz zn%dCn(ZNflRz2ydk^lYHWzWo>J!$Ln^f}LYe)nVi_IlS^-}>HfUH6`~Hi$r<&029b zGWDsP3@yRrY#-OWrjS6?O3Vc5VkpQ&*bTKW12Qu#l9M^wfIwUm`z`E}HM4R9-CIq^ zftmYT|3M@3?A4siVNN1zM;Rl<7A}^W%=ig1fFh`7PA99G)65`!&9pHTWR$t2JW0)@ zu}D!f-N+JGGmB%$G_ZTCX$H2M`@g(GBQsBsImJn2-Rd|CnSFu`tuGU6hB#pPlF5yt z-~7e$tcR0fkLj#hdb2Gok>$>8m8YgXGP2_jb0V_i*FS@bJiik5$(s2(ySJJyg*5jc z$q{7K$g0h}X3j$dHM3uq3Nk7}`kEOLWYSU?nZ!P0W2Wgk{{haWH@ld{QpM6}M5=ggWc_K~S%@4HL};~-T1i~CIE{#m zN+K>!BynDG#1c6^#)(Adm7{R3B$6VCd=;3v|If=cB8RFukse+XS+=tgnGi%WIg!M9 zrNM~ExFpiXi6qV|^|3^bPI4l$d2KuYP1q!f6f;s*(>O45|I#RtQ=2%EA9Dg(t!vLx zBN0JFLfU5cxeP zkahQ(vk*~GAdOx*$@<8!5s}l9$N^3yv5)MFC2}wgp}3K&5w^)1xtHBrO@)j|AX_6+ za}}?VWrE1BR-c7PCW;^;wq$+e5VJ_v*)0sjC_Kt;=$T8`*+*D}=*^R;4>lllW zLvS%daTDVNY?4G43nKRbGxz^&sYc{}CnxfCP9ST;s zrr3?a+G~PE2qH&Z2!TknkIai9vWeYWO($Wex&J?xXhhzr`h}1I>L{76CgLx#vBIG>MhEQA|SqIx>joiZSt)}xBk%dtrD+G}gLF8YH z&qAadMGz4eCz3diq?stUj!1x+2_hC2YtTm&79smc4<{1sBVBN=B=Qq>Z#7jxn)~xq ztwtI)@){}THIWr5It!6uL8P7&Nt{PiBO?1GksMAWaURKxC35rtClZ}U4#T;U$PBx; zntCA3{o6mS5xJv+6Y=w!$ollzh#V3`==~jE0kcQn=<`Xj5s?u|#KDOq&Lg&1B1c9! zk!T-z88%5GmkA<224?QR`BNH^r^-2zdpUuuYYNX&BV&R{8z++3M_fikj!7c*oJit4 z;*2G7aGVo~uC4;=95JZl#8-sb|5Q~uWNDe}A^T>y=NfKGbNLfvf z1H<$CMOuyg*1?JVgcHc}v3K8iS8w!SRg5Bt$Z)bgGR`d05wS54L?+mc!8|g?BIG>c zKnO&leWW0U$miL;)s(`BT>nXpNTwh%!wF=Kuvf)Nh`3M$5jl{ok4!O(bVQsC1d#~4 zF<5I&vIs%sXgxw8673`Huuay;A$D&y6+@c)zm};Hxw@3s$Yp}a^XxTo5+ZFVf{2VH z>m#R`MLHr43xm5Q|#Vq@Ye{!Klq<vsaAIXRzQp4`8rk7x+ zxqn`i$h&JektaBTtQ*<;?j%G;1(9RP`iR4b$RSC@$%!P+BgL^qjvnJgqJ6{(+hmRO zvU{s(F(YCAwg2-61K2mQ)WK0ri;6xJFTCP|kM-6Z?57*KF@0+i@)zqLgcg{GLfv0>@y-VBZ&-i zB8h#ZCzi-@1);ckL+BGQ(~R)>>06LJ&FL zfKXf?c?`~#L`;In?ZC|arDm;04i|DFy}Tx}^3O&jfFg*<>12IGnMaCsMB12{Ad<#n z4f@FGSRzNeIg#i*qQnqc!|tu7Ct#2i6lO=^L=PKA_pW9+MLFJxYE5c&0!I;j~wDeqJ5+jwn-vCVE0zjDoAtx zeG4@rpULMnvH}tGL(dD#&O+oEiZK3NWFFwAC2IEK# zmA%<*oI&E^if{814317BJu$fPE@a~rreTe&gk`Xheg{1Y%-laaU!(9uE~ju0H$AH^ zo0V(uP)M7`BAmnf*g>}A7pM-|A#mKT%i_5arXHa$g$d2kEB(HnV+fLo~qgGPXaCd|O>qV++6S-1{K*BW4^wz||d( za5>b&B<)zF*clOa;B%y#hveo-zUA=XA&#=0 ziAZ%9O>>aP>q)|^2itgpcG{txaioWb_*Tgy`*=w1rR19&57KH9Y2{AKyJ(z7SniR` z5PKvu#2(3v=pM;7%0{ChSz;jx3ywQ@e%f;j$32kULoUMIai>h-;wiKZkq__eX^==jBHa?%Cy`-^ zj7a2=M2<;hOd=B!nUqLGA~O5<5= zL=H&gkVHl$GA5C6iA+jlN+L57IW3Vi8r@j?;WubM63LNBF>ahCcgiiu8Eo2MnH(~S zOJw3>FzZD!s!c>44@jg(BKstAKq4a&8I{N}iHu8R0ypN~i}`$W{&(@~2dz=rV2h7V zy+~gN9D{ZBI3s|zbszg89R}`t_U*FUvK_qZ)Z;r{^s&IX2PlqxJqt4fK81zvk=5TO zKX_+(fPY30jE2~>f&?@H9A#4lQ*RM{@(3U1Gq%#lM%W=Q%=S4vavOaKWZMa--|--Q z1?@$;dx1)Ol!E_GCXACuD*^;QO@`koK7f|N=M8)>Vw~dGhtJqY8nk(9KmV$kc^i&C zPN~stv_p@)ZVTxx5Uc>AYFQA4aOF8fWohXK$Cvi)sV25Z* zB;GlEq~^0B`|LSv}F$KrH;bWzY>5!{7r{EDWSCub~bbScZ%~Hgy3; z8m3Tw(+sE2fR2%uoZLHnDm3q)V`+Vd7>4R42Q|Q|hhWA7>{EdVu&-KV^zjLB8|-9f z*$%R~8d~vtFI&Fgprv`ovs4a!e)4uPjppCnWPUqg`pnE8$BgsRoF_V|rBn0bKo)Yf~*bNRYV`23S)c=Ai2FAeo z$GC?26Nt;WUHBJn$G$Ts&;C5ttzdwYq87l|x*>Ala|`r+M${YYTvYF3vHL83=a7rt zV*GeRi`{Wx<}Yo3npU_L(=GS`VY(9m_WfK!0)%A0M~Fh<1`2=XT`laQ@QG-=gTnql zYVkG-f8!l3tWx+m`-`SbpM}D&%xLing%?D_GnokIzOBViQFz<$weSRmd*0H*V-)`0 zn_763!cV=Sg-0m-9{Y=sto&gLUlI-XPOgiN1< z!l&3@5M*H+h0lqGRSK_sMayrYaNWyVSfTJ2*k8P3`DgG0!t_7?R*Rpa@MBY2c!I(+ zr?l`Gg)fYTM=89H{e?BAZ-m0$m$dZ56yE=9E!;!lAD-000SdqPq84tTa7r}nqHxX& zTD*h8S5InT8-;g1uZ2|#fAcvlY@zT2ztX}Ag-<=Jg=g@(etJ$cOus`+uXsj_pP;bo zgccs7@D2Z=g-0oT_k_fYsC>jBJP0Sb@v^v;_fI)oXL|6%*G z>&oa{4*i{J_V+mk_o&XH4K`=VqhV9z^=$gH9;@-tVsVz73a4K?Jqg78>0XQ;Q1D>% zZ`qkY?NDOAN4@vWVrL)z&@CnmbMJXr(>VvuI0t6%C%`hDePhl6oJKJB9!5`(K`iFp z>Ubp6-1{a*$e1*$xpzO1>cQ^Jn!Z_cuN{G!K|ca-nR{P@O*MmF1YR-s-i3hq(>?e< zFw9^zeeZ{_;ykMccj9~3Z%5WFo1Lv1yvb2Dbd9TO@H$X@9-QC5l%Xn6c!7{tfK(6s zSJl98A}`?9*>|$*fvUk9vyrhp8#!@6n!D?MmKA4@DFT_vh2LYDUyFR3=M1M+4g7i< z-^4-5Uxb1R@${6M=w(;lEBoCEpUaDut_SLn;tgEysB4=#V>GWe@{;PvW(_sJvw40?TI z;T3&j-K(908#3{?FcDnm9C#4^$*CDQQ#}|`t4q#Qn>W6Np`z>I>VebF6%i+X0iNBn z=Sk;UXzuyqFOb#pGmIz-a(DgG(F@(LI|p9qYH{|R2-~X%Ud1Tj99Wng$z|m^2N!0C zFG87@gB4ovxcx*-g|-Y=uQ=np8SMr|{029yjB9z)7wuy)Nu5LPH1MH*ndU61&kVl^ zw?&S8n%oDY=4LwweL2;GpU2nLyTP6@8TfCfdE>998=+p-&p>3_kD&JV24ehq^PA%+ zKIRWoVr2#Zf17d$uVS2RxT5hIhXB~%>>R*LA9L?gjNDZNA3AC9dpA-|2JJmH($7Os!e&E%}vnU7EcPTtuUOjN8W^j)M8N+25=+S##tSWh_3e-_2T~F2w zM5lAc7 z4_)ToF9LQBcEN<#BA?+Vbo7mx_w8Xg4f3cI=cnLpqHn;)VYiD?8a!x$N=SDY4&a)>ud^Uy9( zqY83W58ap@a6Vd|U5|{)BY0py-8@WD4dh%GMt)X#f$D)NXUb$a1M^_lLg&!hxp)sB zag*VD|BTAR*lqsO2+gZ||BRa3OZ56qQf_nK4+utz?nmZkqUtJbR7V(O@OqC98q-Q# zXm2L%ZfL(3@5m!5(2ntm9k|AvZ$A-v`Vy2k@F-bkqlOJ{m!qW(yht_tHReS&WY%Td zrk_S9DKr0QZuY+3>>dsZ(%T++V_BSgA2$;X0XlNca$Z+34_F)*#~f6J@DUT zx^v+7k(D+m7<_;kjaEi%_(ZpuOoOd~s=be*re;x7DFSj;4@B6wTk@#6cixBiiyN<9 zJUcsm1_rha!^Fke`|v3!wDReT0g3emobVmIo{oF~CA1E54#5RgLwi)XVI0|=gLOoo zyU#grTlNTXVV;18B7Llt;LA|dRLH~AmxDTu2hal@)dRDUn}r&cyci%IJ#jk9gbtNl z9hfeG<)9qxWz#=}xzfcW$V%Rrevl=5@C|g%2j5tZ_V@PmwF0t6(i6RO@*?iI7%#zh z4+Ax7{YNM@y3FmQXy8Gj@lT-f#&I^)U> z3Hh4Tigs^@w==9(`x=9u;4Y<+(2%v=*LY>8r^Bn*thQKer#Be#`8$=IrWIp!XzBVGS$eg%5jxb?pszWkdODlc8@yy~h?N>!0y9UiCDxqI zmL|O^5{frNqSA!T8`Uxtym{jWb)&C6jCzRkhfJ;+Ac5GzcXf2?3ztxQ;S!aF*9O|W zL0^-nU3Geb9sW)<5fv<1iy^i$y;iyeWa*V#%4#Z<4o|p^w=K~&qCm9#YBT}$24A>M z^>#OT17T`z(R9)x-iB+SP;)~x5i=tfjUoz3L!4KaxjdbyPihnewmi`pYJIJpV7JBJ z74~(uYAQnvj_D4ufK+Mgw%HWh<#y%DR*$dKZBtj~+Rz&mf2c{hzSG~Rgu=Vp(Si}F zs+2NUxiaW!_H~7j)@ChG3v9|37Ut1;%9Wnoz7F&ridXXrZAuvr^Z0z_N^iS&r-wX4 zrIpy!5}SgK%psnrK#A7bKYDh0m2KXTQqvXos#gb_y+P$B#Ctv0dxI)3TDiI_9Oy!e zwy(@BP_Bd@5V9-H>y@rfUs$nq=jAu&=jGdER4#{_yiFRE#~^QEVT%UkGpNOeOJ*$K zP)SKNRUttIHoFHjM9D=Q@|1wQfQlJp&uwYcpb`!>7J4-I>dIl;jmgorlfVl((d*Fj{Ud=iwH7e@7gE0xq-;)&K& z9%tjtvqvj5kF)VM*`sCTaW*XlF`muiY+AheF?kuALR(Q$lwls@0XH;8J(0(F6xvH# zq8`g*JPLF3@}sq!$9NRxHa17~q5XqLVP1Y=)V_SiqcE@89xWrE@hHqMXo}WyKI2iC zA6xVJj7MQXQ9(>z&ZE#4!#AJvC@itZ*ur@f<;Jwke9oh&(H`}EKIc)KpBv?iSmIIK zO#Wj->9xy3pItRyQE^pzJH0`SE*J+xzIJbClUKD`t@HUZz#R$)5wmJlsH+jTJhLv! z69{-ao3S8?YF4+@sU6-9e{h%TX>a#8vB67i@j!p`6>1o;ud^xW#o_~{hTFUrndRSi!PQb zv`R(Mv<6y+!fAZNjg~|VgsTja$Tb#QBx#;-*SMSfop451Q&{cnYHwFN{b6;dr`<p;gBTDgwM<*d-f3je9shPndYV3WTc3cW#V zQy_qvA~GBNUG2@RFmfG+cA~Pfl~Hjv*XrZc9nAJE$#ZkpT4@{$ZjD& zSGp`vzx=)D8-xs$rruRJ;Y+O%^0TE^UmUsb=FO{df*My~UKv+j=U~#&C8XD}asTBP z*B{;|WVhqZlFz;K%)nkDzs}Q5?Gf@;E|p9!dpsd;pHi5j(_?l zUEdesY=`oLKb)v(bcyg{2TQIjbo}doX7_hJ_emj31U^^D97pEL^144S`BN#E=Q>U- z$=h?|3+FkWT)n5|?vYnZpAeGAPnYueIgaa!x31XzIkThdd-qS@f98D0+A9_Yj;pVi zX5|f6d~et9NGa*pzkBN)&z4?t_vD`*yyf?$ z*=^^qeSgz4r44<%ufOnvKbB5ByJ+pH$`4CdZ#(5a_ttY9?{#(&#`aq#FLYe~r3+qo>c8GDy=Wu_|9!diiWh%5ef>}Jg&*=A`Hx<6 z@a3#KO1ZyoFMaXU;CDWA=r)Q+8`xL+|Bqy(v#*Y2mXzn zG(U#>$9}FTD$Z~K3Vcm+?HbnT&gx>7DqUA-9ZCa58dES#OCUjkM0?5qP%_%_Sz zEbS|BK+* zAxCiFwI1b+LIxnmAn6C&3CI!1DM(C7qzY-lS?^*<2c!!!0NDmP0@(vO z0eJv&3UU;326CJvzN0|?5keQGwqz%#r>4faT7cd$iCm_2a$7*3Gg(0UP zryyxV#tftd{#NQ{XLHE!kPb)}WIbd9WB@V%Nn0lzUx1yckA_~@2RS-~^2q-Y=!JAZ zD(9kn{G{lDoPq42Fn)48208H->_Gj{g>wz;O4+?dN$IwvT)c2z+Hi`ZWCO)%Mx|{& zuRA5(vN1jLD)WLH(t4EAi&p;Ujv-@F4Lv2qXOYiJ>CwS>PwIJ0yk<8cLLY92Wpe|0jKuxE~HYHZrM90^|d+a z)B(7?&k~M4o>2e5Ph+gn<8v`K&=`bQsoF*Uz65y00M7?bV^uPmOQo>P{tmZfJR$@=uPa?Dil zG5+00<(-Skjr@jWH^{vU=YY7@>YI`D9^@NCzRLLaZsc!jpQC7>8xxxQh6URU@iN|S$$xaE z>~`Uk?pO)T`_`iKROMp19-w;9#=m11%+9`qb~kqcj4`VFXy2<$A5NL`WRlKO2VG(O zD}I@;vF82}0V93Uwp5wkGbie}&!&Q|e?!5<`)l zF6s|gpnp!L#*eQQH~X!El$`xEiaa*g^wj*6+vfc`<-7A!zjrPL9-D7^a)I*Re8f&J z!2jSj`Z1EO+1Zr5$Q;wLGzFP|kfyvo*K{yV`G6FCXfh3+tGs;oE(LGCZjZ|4tX45#fbAn=*_qH_;{EEp%VVHQ{ItyT(>6VN$*WmCX=Gf!H-J;^lLz zjDPRLSwAJ9lTviy0fAjEd}W0$yaHg?7~Ub#CEu|HM7(^C%;eDuy((argWDtf2mRha z7d;o!g-3LD;b;iItXxQZgdU!8Njn?pT@NlH=tvE_utksAKXEA!<2M`@7Un85B0RQ~ z$Nx!$H9I-{|NZ~#*Yf((JK_=1?w%9!RUzLO@*MW^NKq~ja=DO<(iD8X;SR+$m(g zklzsUULk)Z%)s}C~U%_$O zeOYKLw3X4hKNonL4u2Xr@v>~h4K8{&OxI&5mvGsh<-D29&u<|j1?{s<*AD;8@I?Pp z8AiP3p`aAB2ba#yOPK+Q{i2YiPi$A!LXW=v(0&HeuWxT&h9|b?PT=Q}vAXN#B=}+A zOUa*$$Ww|UrUm6amLBa#JQuLvz7TK1#82smLo7M_U5M^VfG<%nJ}l*WKEb0EmqHd3k^v*>hB+pJF22=`rj4lhedihqb$ZiYE-TjIPtXz|I6v2THuPnrQcd49^}?bzwH-zk4VpcLr0SP zfm8o=i19%_*F3?}$9jO@M_Bqqd>tx+?3~ioqZ@ceVshoHBE3tbmv%lN@EKjdcosO> z=@NFby$sNMN~BkHdd>wAvd1R;K=UzOHi3`o?7T+c4Z3#T3EZfi>|r>@rA=J#F_p_+ zp(mizb2o5mKQ7UJ5MZ)V>-XNfYW#w5$iPBueXWx4Z3>SFYu{$Zl`RwKNfl%VqERv z(aKW{Pgi<$^U;5b^gUuc!A#7q4}i0J*Oj|+5y$oYr4qQ2f36kjr_ST`Li_pXx&gSw zV12kZiJlX{joSY_j7wyve!g}k8Lyf}dPfJhL)O_3 zr2jp`)0HaWXQ}@*aI$l%lP8q*wbIP>xODzsFYwd4_HY$&(xdpf9<~Pyw*i5>#JYv; zu>igh4aulp3V}1f>HM%=;KO3RW_uo>=iMZF(oiWz^|B72QMq3SPW9ehwuBQ9|33hn z>=|q4fb`F359^-HY*TeR-;8uk(M)rI*3BC(B*`ps%zAW$=ot-~S zqUS$=vvrQJvxl3dyvov}9yfA8wv%^~=&8a2lI(Gf@bqkN6K?&$Em#lh*U3A9Lsi0c zhtQ*ldY69wQIhnJCBc8oaM)kWi(q@8aQkMG^s~Up51GObBAc>kv8eZd<9gVhCfw!$ zXY*7M$M4}nStrs@htqb^8y#A!RXyV>t< zZTB~N+TG1ze=y|sbag8@f*WY}hP}K(SS zHoV@CcDzG(m;>iPZ0=edPizX?L*c60VjTI<9sdASVK2g=86VE|2E$~|=exXa6kp-C z+uiI4hr83??4{EqVWbrHxqWc22YwVig>^L>H08}9zZ++k znsH9lUA}E|SxwajrQP3Zw>cb@)m7^^xO1(!RSs4#Pc+{g{aN22WQ2$ zcthUsR@7`2oz!XZGd!AIaq222VvfTEPj$Jq-+J;FC2A|FY5xQsNDV*chJ+>>UFntgi#;6<0{086P?U;`lCwr5>IpU zHRuUGoUdN*3AP43fwl_dceS*%BymxZ<{~l%Z~3j4cot}m!>kZ25sjGX?UZ#PbDdD?5) zxi!g1a?)oix3i)@LQ^fF19&}naZGN0ktn)Ok_ji+B3L9{_ zul07>^HDt;+PqEIukQ+n{hgc#oZZyzaRg&taSGn!hJj3$-_9_-NfdNn( zpxw=0(4?<5xZ+?ME8RGb=Z&KdJL+obOdVtuKUZhm{0hhyTKkg@*}j<$N z%|4f_rPhvCwS9AuaFIPX=J?^)MXi7x#TBDC4XdI7 zW1)emYqxAV+BEYK>WaD{Mj3oDp#qa{zB{fp%8r;YRusb@AushqHcMQy8C6b4Og)Xh zopwzASWH2wJG?94#e$*5U-1|FnjN(YM^(_eNjK=|hJl#rtsLtLYTF4TMUvicGzVh2 z5`reQ@_#_s~dOzm5_@>zI_t2bYpi_?9wc1Ed>9jz!StS@#6f^l4 z4b+?d_D-9RM%7$l)KiVTmQM>XZiLYQ?5??!L@`n-}kuV6+L=|lc zM%^^A9_`7-L2_i%_3oy&>#>~nwMR>*XNJ0Kv_XSHwP#s4{N)B(SEXk{I;;4i#9(eL z?!d8stR*}ZF0I`Ep$F7rOlEl64AHVCY>z%^(prl>e}V}jO62k%&uYG=a@~qA6bfMF7;WPG85-@g& zvrn4*_3L%^L;*T(d>y5!O~203`lVb=>)Vvwcp=ZUHsU$3(@<~SHF`aYC*X6-Z(Ff; z`BCZ&pRb}dP_i|<(MrIcE1zns#FD^Eg8@C)CcJ0Sdq+u%!=Y(-M* zq30;JXcX^CbTch0`tSaxgW5l{QdfF(`KW(U#-2*pBZ*k?D%Q}hjdqpZZ&aagF$6KYee&AU30lgn_B$H+#=l8JyDaY1jphcbw}KzmrRGTW`V zwYK^Z4C8f`Vx`xpNaSbD$m(qqFHYN)^nWM*(cWB{e{3m_lX9WRAnljwq}+<+wAWXLC1l@aq0Lc+o#-TI<|^u)R(6Z{|EBoCuc3c z+>bi`SLS~Sd8s5>zTDqA@mJ>moi4xJ-#RJs_ejSg9bJ0+-v&l~N0u-5!Pc+k{N*?( z{U-Cvc6bZ&#@a9U%Q{PW{$q%by<~nVPa`rmzqYT|!Sg%0&{W8LQl=n2Hox2t=`7mf7uciRWI_ZGNF+A{4~B&Nj6)wUzVrrL>J3b=Alfb>_T>VIX>sCzJ2<*>{mb6pInqH9wD48Ey%boER*HRaP9BPat(AH!?H0d z<3!#(Tk6@=9yH(4hsh6c(E}N1(z4AV(oJ;BEOsN=6k0FKdvZ-C~T+|DxE+W7B>Cw{3+Foyd z$x>(ARLx=g4hKd*yeCYW<{Es;)7LaCtvqII_OJ~{tn7U1h>oussEM(7pM*F0$-zWvp!5YaKzU9llmpr#9w{=Y)|n*&q*!!)QswL z(V1IU^Ku`FIy_%H^64I#bg&DYg?zOO(!0 zIv?}`yf4)JLeO%&EAg(vyBcr%btw|d@xC1IEAYM=?^?X;@&0o5n~lMvD}uNDVaoyi zF7K>6e&D9E51&l=pQ{e|;auzK#?-l)DcepvrXXfQ{pKSNx#zH_^DY`OvugLv-Ltp8 zJMdq(bf35*{rh3-Z(j4z_@Wh`KNj0Px9!clU-2)ybj!T^2BcqfW@^$?4?b5ub?5yH zAGqz#&7ak{4t;&vU*~`R+SiBV%sq^ZGRnug6S!G`9P;{rfJN z_+Hvs6JMR$FlWue>#o^*XVVdz%HpU0b^gF9C-2c0Gz*Y7Hg zf8n~lcb+%vuk&{uwW+Lr$lsRNy#DBxCwJYn{HjB0bILDxYxjsX(;hCn_?wabk?Ze$ zV(Yq-clnd|ym0VU(`P?2@y~nq4F7J|p5Ww|87n^b?b+P&_C@)}T($G$opAZDzWO1; z*V@6SlAj>(4|S+jeuy(a&G(FZ%r&p*hS|9&s_ z*7SmNOfULh+KW7mXD54UoF0dF^eeX)d#l|p*MMkY$YC_xAuZRxEH@2&&|-qufkIsOf*$8O*wuKkF#0P0>VCrSxI`F(m47(= zImi|7YS(>-z5bQ~pK$W(B5{U6faLRL4B~i(oI?Es8s!)8}&mQ$>W0d|!sa;9Rx7(eh{>)N8*mlvnN_tjA z>3JdSB|m2sil1vleOD0Ul>L@0_GUs4dYz&AG)3w2wfeymrO%71Plf8E+gw+(+FPpj z!Y%xI)%MRa$=h~)gMAq3ld3qj{CYTw`GZBzYZT`Q&_i8uuC>F2uWVPL>ffw-+VQ!+ z#!s{2qd9*4p!&2$>GKc8@n}CLt9*;vwLtB%_5V=iv!dkh(>SrB#>MU0zj>8vGryB;TxYV#m)>8viwF zmpvzsKtm)S9dC6ye#>SI;sz3=8P{WIm*guR7RIwnh2EilD^`5l|0PhH zJkRSR)`jtc+md+jJat=s3c5OI}4q^B0vb zE?QbyvZS)8$W^pp@q$WM(L4}WQTEi_qPe9@O6M(FmdsvQDrL?k zMRTf42%u!)g3BN{@#3P%iZFIz$Qy1z0;dWiwOiAMFI}*xVqxjDin%2SiM%OAY+$JP)Y<6w zxutWX%F|BM`lA;vET2nmM`SE2tt>&rl#I_C zk&7h9U=OLZ;qyx?5#!m5G2blJk=s-1RFOKTs`6LG2#k>?Q>0>^#LVLiCP=?3HgdsY z%)N`}lp>BP0rh%89DbTDI=OUdY2~z~rAxADCY)C?r?hvI>^fr?mX<8(T?{5oDWUPl z%3ka`tE6gaWzpi&>dK-yR8tw_Fu=s#=wUZ*xDDQ;Buz`AX7EsrXud7q!>6GdJxhA6 zlaBd%vG`~4C5xc@)bo0FmU9=5OJ&99F3fYB>a`es-@{_5IHfXeR8di7*^=^0iWZj7 zUofYrbjgzPCAwHmsT^5^rLsCLEp7PhlBFnJTDfGw;`!NgP%mvxS;>;3$|WTWDwk%@ z89${2ALBWm1DYgU99x+!@ zeo5();YIW2Iu@KN1rFnFq`jH2_YzANES^)o)CD{joS&8oyiugolu9^o^4XLAd;h~6 zbkW?Z3P8b>sIYaFR4gdExOBpU06D&GHq#P_LK}_jaXQ^bZIshmoRI52Ew*TN|H!!EBVZjSPwbm9A6FJt zEnaX@RcTR0`O@)|r;IG(LAr&T3D(B<-eT>5q7yS ztYRUpe2W%gLS2M0UP4pGq_h9~ah<*dS1WVJ1LU{WA7NDg?^~x?9hXH5<}V&U`Rpkp zid>cDRTXfgYr)c`6)=#L`tMOkF2NpQ$;EKbZ>!H*K@IqY-TRxAAdp2>G~e32L~%Vl zHMA&}E}mamX0D1T9buQ2S5+33&nsF|vUq-J(Y!^K(Bm=~Gj+<8%2OAWRQ$Fn3^P~M z6lG7-I;o8xPin=q7>7~ymHoL3SB9)N_Juj zt=goc(kb@FcWQPhH6=7ZvSdUqvfbfnMMW1cTHxGvk2Q{(bz(+g!mg#gK|1XK0P4t| z;FDbK*TMy}msZZ5bMnbUmzEDbjk1eEsrhrTxuRSe@#hG?sFW@nFmcU>&#{GC zf@2SayKBPOu|=m2O?6Gk$sRMdX!y{y5us!_HGF8gYixf0=rP$vX+uvHf&6^b8!>cv zT4Yv{q?FHG`r@ev90TFi&lQ8GL-q&l%TI~mP)a$Jr@t7K?T^w}mfb(Zp%m3S0C$x7 z{QvZiJV3gC#Al=~R}%7hCtQjsB1u?dLj6^A()$@0zCh z%E33`O9)uaD;2=a|v_4%LVFa}=9Mr@^i- zNAd&lw)IakmtzvMZw+wX zXULz=9QnvI_oN9xgW$R+w!vRz@N*4*lfkbs_-hURsRqB<;Oi|FE^RgVwT66~!8f0~Yd84WhJ1&?A7}8Z zjea!wmLWgUkl$d)oBU2gKFyHNGvrNvmm#mW*rb*|S4!h$k%1Fy@ab7V`?c13WI-+!EZG9_F6~9s|@~0 zhJ2I3*R2beHXHnML%zk}ml^z4gRi#^xwOsTFEHdSgMXpH?=<*R41Slvx1VjH;(Xl~ zQ9Peu$R`xb{E6G5*cFFgNd_N}iiBP%2ERVU#eT!!7aRNxgD-n@Damxv1WEuQKTNt#{;9q6%yA1xZ2H&OeOtF(>@M8_WM79)q4E}6G zKEdE0XYi8@{_zGs#o&7leyYJwHuxC^|3rhIW$;rBzR%zfHu<$*#QGXy9vm{r<*RS0 zjIsWL(dw&xE_Smagk*R6@S%fT-N_^H=^mJc6yrw|V|a=tI+X-NszNcqWwT=N>clgBXKyLsMF_rN+7 zyEqC63Hd7RbF;M^S zTtEG8slSivKeMl&&)?~L#yZp2XRGhkeU%9Sdsx8^7BJBv8m}g^064Cy6MeOrH=+Vm z@_$l!u&*I=IQUjNJZSmwF>`B7Dj0qC_SDCp45e$&bX6S`oCQhI8|@#U?FR|6yKN@N zH~8PcG2O*^A~(g?a7ne#|Ff_D`$`WAUq_*@;mq#F8aT|?Ft&n5`!HWaDhV78fk#>3 z3`4-b73|fK>}6%XhW)zf6U<<)DwLM{)*#;|5PLBUm>#u0i*KmxN;CJ8a9!Ms*M!O&H?_IHfh<}51)4$>S#?j}G zKF=4pbp?q`8$C7Kzi-+U|6bUZkkjxG)$}!7Nxtzl_&mNd;;K>xxi-*b=&nx%@vR!4 z)}34bWlq4m1x#0Ea(2TcpD%DhLU!%8K0g0j6B`a5lwJE=>|VF0Pxqm@qoDlfRqy7^ z*)=Y(tb2UgmlFf0tf7k8&wSRG<2SqEin8(kFSx}#v>4wn++qy`M~`~W9k`lmG@Mm2 zvEh#vXv)Nf{#I>uY+s~(?m9n8=efUrm$-Y~C%ucdJt(Pmr@SyRaQIqZV8Xw1`gGS5 zzwcgmVe4M^tnF7MsGoebE&cbp2e|gS^PlmJ>ZS4PbL&6$1&$Ht4|WfPTgLlx z16L&YpmL7?2ZRQao5}yK(cMR6kNP6lzpv_@?1sysdTw5J!!%!m4c}9F;B~*cd)2%~ zBmU1DJ#AAymM07ZjDnw`YbwTH#6U>FKxl|L9Ua%5N8{05_d$OeBG3NwAjAv`{coXv zTK4)LfY^nwXOG(xx2#Ve&;dE#SabnGxi1EDhR;8xY>)dC6r9xJ9}_#zJ@gsK^!K{2 z?T;0Ao;&54J>%S-Ax}_UB$6N3MB;i)#6PBqxJNY+^9Uu}o=m0bN{1*-R+^|ZUTGZD zaqd|bTAI~CAMNzfMjx&8(Xz)qs|)W=ye+&t@NUPu4ewT{JqA|2wQWoix|OsYa6!Vh zF<#1S8$(kF^Jb@R8WwgM-?Cs}Ooqwb1Ko zKrQPBnqXoUpyzxIm^lNLUYJ%}gSuef?WO6Rx^NuWf!Yiq`yccka_CADbTtnC*?H6Jq%XEl!P4rhvOQ?9^>A~jr(k4SG)QUQa@W7aMl35E9h&;M$8tt}UilJFIm@?0 zl}l8sU}7SEf^>^zV7_ zD3;jnH!wfI(G~8x=U6JHpIr-61|%YD4UMc-?XJ5)YQ03Bp;)vl~eotyM)cN;e|$3n0M zXRx(3P{D;zE+e}8A3!`)5VHg^8;FQR-X0*mSsfHHyUyZyky{|Du`S=Z~3p9QJwx zzM~z;7PNmK+W!}A*=5|1cUj*-*yrDjvPVg`ZS?g4b`o7!s8~N=1MOWfC7coe-M~Sv zsxwHAu4F(xG~S=&4DER0|2>FS6DWd>>rP)o7FLPpVrO8dYOmY=53n`r-r;MQ0-^D) z-L2AJ8!$Xw#-5t?JF?OFH?3c9VExLESiF2#p8^wNeWN;Q(u#H0J&Bbjr(sEKPQ#>> zY+6yzO7b-v==1N*9rbdq|Ak!lS#Qep=FjnZa_e`v>sFx29RCg!MdMh z74Pltu5Zb~;*V(wTz4JKEAACLII3w9ZCLKbJhj89b4pa5%B=d9>d8KTJFVM3%tIr1 z|LLyZjqw7XE=lDBw2Dkb$(f3!nZzx7fIsVq1!JWdn@^N1#l&!h^{@hW^ zp%v7Gt~uT$cimFp<@md;-Fs-V&xh$-NNH#ene0*U_B+{RIvIQ)T;yx0fM1q-J=UeD zL1x;*?z(GHj%|SdU+9eN+A9-W?m92S@5bKIT{jfUVHfPKzlqcvwUE4iE&F7=E2p6< zmfY*fZOBc*<_0?M$sP3#dmQb*%I%L-2V#kV0&IY__nVLw?z$r&00mYoh9X5y(|PQb#X; zWSqZs_nL71Tz_Zo;MVM`x>ow}us*>TkfQx%ZMQqezucSQzV=+! zt-FuAj=sd1TaPe7Ke_7*plFVNS<0BL{WIXLWqI%^j9irB^DoQF@pt+9Sd|G7uR08_ z{P(wT<%#f*J&tRC!9~(SZ;WE`AFIN`M=8Xe`eLAEksSW|Bc`%@_Fd`kTyeE zFggpDXh~m@5H8WiW|3>MkjTTeK#qT(^&Qo3fSH)tvx0-svW<`W8L0d5mv&vaZk!i8 zVZ^5YryT$H)<01<2Z5e}l_Dv4lk^L&@Ag|UHkG>|cm?xnU6csyqNAF!U;+gmG+TgN<)r2>U_P+=fG zbvG)p%znN=o!5i#@deTkCoY8puGYa#BCcObtu-7Eg_wOCHe$44yapCxQfOEwm1%OM zyDP!%I4I-&19ei4|10ZYxB({~$73EC=kvesYnb7|R9ZPYr(r1q{iobf`*g0UdMU^M zP0rvSeKIRtxdRCx)+~?nx7N2@ip8P^Sr-5j=tSaQ;sV-WpN}?uJZ^r<8TGS0Zt9L> zb``Yv+PdZo?){dmUQ* z&VC!nPN4ZF!f&7B>=Pq~{WgiUaM!&F9{KGHE(`f>)@S55I@^Tb4uyAYzmauezpVqy_rW23&cMn-n=`~o3tUIAS59xiH4Nz&3tOY4noF&HwOnN!YDe= zvg7Z1wDLRq@hx^r4?o^*_;Ekh0#^g-$9p3ESnw(N5t@@9U$DY{B)h_X%tHyqUj;cO z5TA=$@aG63;rOeeLU@dXtgq02A&*rPnC&sf;P^{$jK8Vqv)|cocRKs+0>f`F!(zl; z-FfP_g^_-H^Av{h();O9YY>#gsb!?9_20We|T+G(Uy7CxW_?_dk8#jd<)|D5SE&d+LTDa>T z2ao*yBA12yJ?tYRKKFba_BYuS_IEW(;H4>$hQANkCH|hwy-??EBR2)&j|Us2F+{>X z?4UyUkc2E3%@4K@+o=iLhm67V<4N$LIX^B$E5EZJpK$i$)rKEGg$F2Z7pouZBK>&N zhvY|G8`1oD|E{nf$*!;;Q&B?Wyc1k_Y@qnFKasG<=&1mo4QV~oM` zV;6Mkxjv6zjepniekD7h$9SK}Y>B^rz+&>-Y2Z=(<#1Uj{yICzZ*=ehzb*MF>^HJ5 z?6+>OG$Pq>zH?-lOnk=#b+Vh2es55#*uWTYRd znQ(t3X@8KA^(TsXyFU`Z3H1kKaDULf+MfM!58C>jw$44FE{vhkZ{ZWPz`0LdV*kA9U67|Oz?j`I#$zg%`p!m9t zNZ6ZMREX#%A*++dgYC@>YQm0g#^CwjD0tJH4+_!B@9f9>oc*}O@Z+2C0LAqz^=| zQA3634-&G5Qq0@^QB6wP{lOUAANjDcXMe0jTfcK0@5DnT4)ekN%$EK*gtc(j-2xu< z$2u+x^~ayNKVoD)*zsPtKghapf8?VC{+c5`UaH<4&b@>UD>*C>f3uWcP9*HjCMtwC zNyzG;@nCy%6*XadlQDQcI1t`6=Yt%y@;m$SR%buXHvG619-z3Mq<)+m>BmaM+2{@6 z(Y$)yyJ0_)U12|ZP(t%TGdU#?UoX*FK_u+47Al0tNXYsJMXc?y4FqO;j4?R=+R<*$ z_&c06{$1yTB6dQL`QRjGOZ?pci^*?CfJgCn3YUfAZ}vOnH+ohIew+MG*l%QA*l+D` zbNrnLX^i|SAT*jEfjqpZ++lAEceQZO71{YJdyR0Xzr_gDEFn}d7n@gdc_6+&Ab|gU zJ4m=cI;ar+K|= zk86h|Rvrm7T+g-eG>LEUJHAnybKGM-_l%ASw__oz~F~0brp+XOc`LE|nIF>Jr0rOyQpsY{byOlZi`FGup z$^+e-ezsnJqr2O`x#s60cioS8__F5bA?~_PB&aL{eyDF@Sa;nrF#VR`F;>+^3dUIO z!4Ir|1BWA>b!g{PX%6-|Trkd?&kyLl0Tj9q1w%5kF=79c7R|l)y6bMGdg#+mrWG+{ zU>DN#f`Kl!Eig@bcO{Ei?F7961Dsx0`c9S_=+^%3Yq+66`X`v8o}@OYo8U=DBVwgX_n<-ER;^IV;o<*S{}L;v3>KnINcr zf&N*(z=$m?sLh6$+acSXhub9-@3q?y&fN&-bAXCMs}I$!#BELt2Ynm~_XDg7Rz>a+ z7*Bw>5&(JCb9A#I;^u1&nu2~^#{CwHP7pG|u5kxmr*vSow|PI8>+HbPOo)C(-raya zz2MyzO5(00yo&`B8NT|aX&JYc5q|hyC~EycrJXc=7x4f=&_fhAda?soB%#A`>jKw^ z5akiQk{hr_K$OkHi~~~;&}|~B$)S?*nv_u+QlJy&KrLX^YBz(s(_Pme zc3Ckf3I0SUh7tBB(J7SLe=wg~|M&K%!VNBzRd5`5X!~TuG(f&?oVUPd* zq>zk%aIGR9kB;_xAR1vmL?i5{Yakl`EEi?}D^f-+N7}Ci5&i!K+mDjqM?LJ%qH}*8 z|EEy;H_U&j(9jgMsmSra!mz*cH`-qTE$s2n3d#6K(kkNd=xBc<$|L$8q7nAb70`%x17TMzqN4ExvpM*Ewgg+2aRAsPQjT17k_9qn&Jd4&BCjj*4t z!4Ur<7iIs8QbsLD+HV(_T%#VLxB{VEnUOl>OVqerh?=el3XT|ApvRD+VRO*+@mk|0=Rs?XRQsZ?HcV z8rtJOY(H_WA|8*9_UEx(#`uS5g#EmA!uV&oDEnU!`>Bmc`?Vm#{>RvUlmzcbD$@Qo z!~TuG(f$f(VUK@SNX9>sRuPX!NBbL59?}00jj*4$P8k0z7iItRVn4MUX}=ak*#8CF zkCNa=J?t;Wb0T*C=TQ1L^nWw7u*W|uB;y}RtBA*=qy23tkFX!25%%k4hR8+P-zxS~ z%aQim1?Ko)j()XbP!e2%RAm3JHSAyc8}09e7WVk(eLmYyT&rk1De7pyhg761dVBqY zXoUT|b;9^(xhVU$iT%_@r2SeD(f`k}{U`}O*~9)0!~Pe4qy4GS&>sI``-y86Vbt|v ze;(Uq*bmVN`}I;r7=3p zAphw)P$zq8FB_*BbYVx;ta&^TrQ=bM%2$3UY$U~uUjGy1Osl`r3mB2xLRICGZ~PW9 znb5)o}6y(^Kn?X>MaJ8<|gJPt{hz16^^7cP5i zC@J>g#7|5#uY#>hc-)E0P>_n}Et5#Fjr0<83C=nPa%?V6kLV(|Td!9{ZVOlCE8O#* z6LSs2a2$}O+zMc+6Wn!gkhv$IB)ADwaZHLWTKmhu9RFi1IcDoP{C@)XwG+RBZ|EE;ZHM0q4nxj958_iE@Q!9)7S1Jb zBq669Y0szON%60&OSxA>jor8Cb9_(IH+py1LcjQj_ax!qAalnH@->9muf^8TfeIeU zD_sv3jrpVpHE_y|Y-7VBv!w0n&s`c0AOd2~!t z%a0bi>rcf&RFFQn5lmx|jXYvaqedRkM)IkVI~*Gs64gl91b6+*IMWW&2RDLirRYXF zpD`NQOD#G#(h51lPpPIQ3#bwLphi+1ENL(sxuN$)=0rB)F)is&jnD@*LZ?2_mYiTV zGPw6f_O(PcGFdAExgR`L|f*1pk$z4dX=Ao~tU%p!(z|G(sQTh{HhN-?ZUCwZXwrJD+BKLXDV? zs-Z^cgBx+^@4HbsG(6T&i_SrHS!5%rrX@#HBlJOyq&irVX*QD8dn56YjWn8#JdUrS z1nGksp)({3C_Z22W8_Dy_Kk)m?^27@<-x7gjiA;0gwl5!DgP4X0o6>4D`t4`BqSPv zLj{c}z&GcB{mni0alZ(CMDuTx ze~7R7Yqb1H)#u$V>02QA0PW zp?7FQ*=*?k-Nj|$`>oNx5AlDR_tj2_?PGjD?*E0nCkihz-!K7RMjznXtosyv_3<41 zOan1zwjy)BXRo{HRY-UsF%I{j4BhCtiT^fF(DY? z$s=8|4)^(EZG9Z%Fa1yQ26m~)`fThx#twHM_G9>NVOW>+|585YKgs_m|KRsC_QQ7< zX#xzyfBiU(hxBC|uru`dgt+b!IjNQ7I3`%|Q>BDkN3z&!$4 z=x|shH$k|Gk=%j8JtmSnSXw(Ol3Oa=qa(R%g-bw&Z7Ik?htngu4~y)mNbXbXS@w)b z?hnGvh~%Cw2vOWj2%)ueBW1^mY)&LMS8yjravu}!gh=j-j$8snYbBAgZ-{JRB=_#;J3bPDgwWdgk=*IRofpZaEM(_6a?gy^fz*fWC6TfhJjUE5k=!4_ zodMxE@@PZEueZ!=?fqC1km3_YIH8(_G@eB$mEg z|NJKUI{iso=~pS-*X#uje;NO{f8qHU`ZB)z+FithXHf=y-im=rU;}P! z(Zsc_tmJ@y(F%o{Ptex}Kp&zXg#f)ze+uHx3hYjhzm*;n1ig_SB*Ztz?cd-y)mCM= zCKA&$5ud7wxM7-z8A=KK28Ysgr9+e^D@{}yuQZM+ern^l{RT&H7Z%j;T+HhW_2;$; zS+G58+XVid4Xg+glIX)rA1U4=bSxS9M^OWW*Emm5lv_fgM(i){Jlr}0|rL;-uTBXfO+myB|?NDkd?Nr*O z)Fm-^ZLCtd93wjtlqM-nQJShWLur;$pVB;~`ASzPZB)8SX_L~mN}H8#P}-ujRcV{j zcBLIkEv21GyOg@HJLdjV>QS1YG)ZZSQrfa}|0&H<>QkDhG+$}4Qu@6*s#l@3T4{~a z6-pbGu2R~hbgj~6r7cQZm9{JGP}-@qOKB`FlBs=<(j=uRN;8yZDa})wuatgYkM&nt zqjZH*`Y)+e-lUX{7bw3$X{*vUr5#EwrCmz#L++xd(gdX`O6dTGaI=*9l;$ffR$8I7 zTImXBrJYLg1M;j#tkMLfNlNKLoAk_3>QkDhv{)(qE+NU$ z=_yeobd}PzN}H9oC~Z~RuCzmGr_wH^^sE%&dXy$9O;MVmG)rlo(tM?5N-LDs zC|#j+mC`1q%}O^YZB^Q)v_q+-v`eWgR`pbxpfp8ks?sc_K2T#bf#*K4-8UHX8voP& zJh~jePZG=DUAOLjh%Q5o-_VlZ&pP?tBwXy$&n@-!`P=AMQ6kz4E_={i^BRK}M&)Nj z=8fM*p^JoEJpY?RI?!c9ApQ9Vu`{IKaO#JQ`ybd}`SF`b3BHDdd<{eX`3^K`7+vP0 z-*2kJbMBnD%T8=U0>9aSYrMoGu?qo>KMWK=Ujh}`xLC^ichV9{?PhhK>tkev9DIU8 zb|q`#6(kh04SPU>d{H)vPblOwl=bgKNzC7nB-o@V*x5E(nw^LZ!!APD(gh9KN2;bFE!xMOB=BPaPaY+^`{gubm1UDFgU5p#NFS+% zJ}-oew=h)b^!MQv6uqlv31gD9zhUp3Ye!y zGFN(OqXT|UG@mv^;7^I>7h^>Oe}>5?(<1eI`8aXQq1dX!6{v6#Dv)!Iq0KvYT--0X zDxnU1AC!N9i+%zq3aAu7s6EDRjzTo#z$7UgB89nlnso!#A&y&$<4F&2Q{tFVrOkur z)(zZ$6B61@4XVkta-FnCDiUBD0~VW|0OVsGk^f*LTS+10G({dF$Pa{(El1>C_dDra z4nWrVPhsS@a5Y5UdkqvS%?%^Fu*h}iMeF=`N8~L76?r8R>W#}4`BFhn3?nBvB3C*h zA8jLleryQ&ctsv4$ZtwT@^h*q@{{*EdE+7gvNy8A$j?72-q->PZ`>G0_BkStckID! ziHdv+66%d|MZQpwePQHcN91ltZzS5tUmO!cj#uOXg4`#JT85AIv0kKV`H2~caEdZmjIBxaaI`l zPDQ>=kdFu>CpjXgJL>$>k&3(;3H8Q!MIJ54ZTE%zoZ*PvA_7s~INnCyb3_Pv_e0{1 z&p_dg>%z!+j>wleB3}wX_J%Kv{AWcD2=cfva+xFY2uI{s;uZN0B-9%t75P*_-X~KT zjlmj6lyp>!E2O@85r@c@h{nIt< zM)GrqBl4Rf5EXTo1CYIu6GpC5g(+$Ni`m|JPy52Sx9p+`PT zVZcZ|0_h(+#^xv+IW~+uT9GpaS%aF8vmBA{a74b*tvb&_LUsNOD>gZ67p>fZ^s=zd z`Hsl>j>w-JqR5XSp~wM6_6zcHVdM%&jnLe>q5Xo{fa+yd8T1^2RpW69m$qlZxbL%Mtl8 zN95pvio5{{MZQRp7YXteVPx0-PV4YuN8~eYfokiO?G4p;Iw~J zWKS6R07Z@w9(@&bLCAXYqMRsLl`FC*F7f6y8V*BUeKxdd>}`dmMHC z5^==H8<9}tX^MQVAipCjk)InKkza7sd900mXc+nDdqw9TK%w)>F!EYQzhaeQ zooOqhI^U(pw+r&5Fmj6{@}C@$zwWQdn~+fC35q;ckYmHh?T*M@cRKapcpLffF!GmJ z*C?KYw7vz>pOuQ_=T1lDM;wuF>!&(jfQ0J&7e&5Nke7#%V-cD?V`HHs@;7}IneGxO z@+d{-wK|Y~S{OOW5%~m1{?_f8QH!>WNJ47IAq}<*|bzX=B zoEx_SaL^rykDvm%`!Z_4*p*~o^;{meKqpa<8~isdk5~r3bt&+6By#*85%wvna*C*2 zYHJj^&9JvSp+g`f@Pp7P@`KRypBK#k*MVQ3oJ2T*_|m^pLwMS2C;f&u4lLzZv91VD zX+vrviXk<*7pXBKHBzL~Bc*~~l*;d&0_io8d4**@MSG*E!G6Iby6Ji0KwRzZ+>*75 z^a+>K$x|?hJCySKo`JXq!MQfnmf}>=T}=D=VBifDyj6@x_K6(h(Z9&C@y-xDGC};H zc-!$jlZp4#YSz!^gm(*MZM@wOfX6-8*_czGe z`W+;A`$yx^!*nKIx5QO~6J94Ca9wthzo-jUIGCr07DCUKSGgtzDWFy3|uz}{_9a>2_XW7=CTc@7r&~c<(|0a&JY+ z1+RpRY42FUv;N{>??eNyLGZ4P#(QILB;HQxw^dGfO^~(iJwxzDM&q3vg||%bd`@`Z z?+N4Wh5+pSEJ`kT6=Y0%DWD+Nb(4d=IR@Tsf_G~)-do>9;yo(;w$=&nZphm9o-KG2 zqVa}A;hiIR`A&FUongG6Apkpmh>{D|LdLXrxA-|WN{;8hNe12nf_Gn(T<~ptLB+(Q z06@DN{_NntdmwAuJ45i!kH#Aog?GH*l{w-4#9y-+M-9duA^r9~b89rt&0j|PBVF*;I^h*V*7nEQf;S-= zZ#TZTWcv42@mszV-s6z9@qUH?^?#IHaC8*jBEgG|lH>kA*uZ;0@a~I}3*IW5sXA;7 zxgQP?ybU)x_-{63ZT)5l-ucmZU*c=1roC&#FJ(@68z5`r9VB@BN8^o+!W%7k2~K#2 z7E3*M2@ zc;ln+;sr0o3D0BTZHEBt-4-PmybV7KWA?|x(r$ae!QOe0we?#jc$Y-ueS;sFHSux< zZ-o=yM#$QDCkx(*(RdT0@PZanf%h&1VDDQ|a>3g_iPW!N@T}_{>@9<=tzU!S zT^o(J_v1*sL4vo+32zf*ZM-uCZ)7xHb`;*zBIk3$JKVtA4FTBuS(IGx&RvoEO&7eb z1_ygDfUK?GZGv}eG~Ra~MdJM+a%-LNS|DrVoh@<`qVdj-!doeF`A&F87^cnJpHK_a(*G~WO0jMR?|gb zIf@c^CSGZ}(jiKdl_n~UR~pCkH$M{(BYiLu|E7%|$Q;XG8@Q0aHZX_3HZX&~Ht?4X z*ox8D1{zv4QQJxh_kgF`gg)8=!;ycWRp|ee!C}bXRw48+)j}I;K=FlaNNpRNgt{PJ zAt^$#K(e-tTS5xln5(!*<#vj36gwpx1Tj9&B~p%U-|eFy8mMthBU zS$Q}iOu{~XhIu|nu1_z=NQnIZiJAN4|0jNl7z%xJgH~+xP@>Xgr9+gaE6rp|T}n$M zH4yiyCgMNQMB>MqNZzH1As-r()xMM&+07r)cdXlYmt|k(5G!aj$E!#R# z6EWG8KtL-^S2{##veHDQ@k-;E{^o%GzZb>YJ1;y${vGjuGoU~08PN85Fvs(qSn(p` z`A-_piBw|$KTuk+DV~)kD;=UVU1=s$isvJ#0>$$Ynuw3rMB?F^NIpyxLk>kExY&+o z`XVfi$^JYhtB#|wIHUWcMvO;^=mbPGo|l%)U8rV#a~0N0RtlB}eE+k~yF${K2k`4Cl1`!Y zDoLkOn!cq1dHm0{I`3LZXHmLY()dYS{7R>!^C(SIALR2XP17IJ#guN7bQz`FC0#-3 z4oO#2+T!$8HPoZXc1jjYBxk!MiwiE!x_A&@h4Vem#!9wHvmVK=)og-fY04zzB+1f5 zPT3U6wrDn0vaOoUkZhY~vn1QDS)XJ(G@B<`OSAcs?bIwy%Dx8vmx9zTEepuH$S`DS zbwD;&v$RMc>(OkDWD_*ILb6GkZIo<^W>-lzRkKZ!&Cu*x$!2M`S+YLOZjfxAW?Lki zuh~|~79+dYJ^f1jBf+~Wkj`oNdo>6q$8DH&mec=kd$>lcv`LjR7W?N4<+g)soqh!^ zEd$1Rt7-c61vYv!D4OvLK&hZ;V7%A*lw~~kFbhL8$4g%uo9j)YD)`r|FM@tdBXN8N zN^wh1YL;fr8;}3r3XOgtoD@jRf@n$*m2zaDDNTtEUM(@kUoQ0ANu#(0PF-H5>vf!SV7zoT;z!%Y6X|`TAw&T zn4$(0@{Fe)kSG4_dR7=Xo;uc^0lNrroV)N%uvszapAQ{gV?}u%wbD!Dm|M+)X0Ji< zf*r`N?aC-X-{5(zl-U1;|6mositN(4F~-pW^Th;;Z@R zfFb=JKxe&+DuvWX=nQy&wKoB^sO1eTogdT8bXGepFfFKF==E9eUB*VD9u_3xdg^JC z;nD;f3O}w)IBTgswAXNhx1dly1xn&HZ6eobg8mi!YHt#hur8KX*gQ{w8vst+`6B%y zKk9dD81;VkD+QoOGw)^4Oi{kv@PTac#BG4_duOcu)IZcl*wmZB(wD!5Z#)#!f>aT3^o(Z!nOqXe-z>vcjy)Oq3uFj}FALr<2c z-7_R8EPa!=g%0uXmE zQF!VlDyJg2BA>K{2dEB43HyjVfK+~56;+@2zu+w@e9T*|71OJQU-%6< zlHB8oe~DP`!nmgusuD5lF8C2q_!IecAA|sd&GkCP+)0@DL4DPpx^UKZ!sBS9An+u5 zNEWrb@R2X={8GcL{2xgm?rX}SJ1~8F;-<3-`I+w!6E;wn!9PvZg6(^DJH;!SUaL*- z61irz?&b=(g*t|ODInK-Tci+^4gAQxvzot?Lvk2co~NtDm!7!y&^k5u8AAErgg|}9 z-7Vcgl|9L)8D``srclnEpP8hZ?^4);A0S-t3_j2`t)zmxU@vJv10D-AFAr1)bfdR>kEAcEQ_(ttPjlkRU#QuHOO@GiKPl4y~DZ-IWYBi+cNjeA{R#dm*M3EeF1eUxc@(e1Y z?;-dicx)e~5P_r^g*^8#woD{UX;=+cVb4p5XIHXcR2mX3tSqn8BuW4+koUw4W?c(o z-o8BKE(k!J`-u_h>qu5`sewoyXrl^1D1`3`s8#ZqO~`%R(r9__(ZD+QyGg%1^qzY1YvI$CIIg0AQg&QRVk%}2Atb(67GPONV+&PTy(H%V8iwhjv zy)9%AuCLX-F^4IH#wt4c0Ip45HT|f&fEslK?FIFNmD_35G-|CA#X@182D5+@uk)@YLGmTf zbabV*MG%_E_=n0l4iay?)U;hT>vO5aLQEkAav7AkgoUsoG^46)-f4y@OdQMw5Tofm zagHsvft$v4f)r!DDNLLtY2IQ_=QQcb>d6jwwYNp9EfZ0i)7<&HUnR!V z)nYN=BqFQ5HPThvS&y}19bIKy@3qJ}k61UP^AfgBmL3bH@XA<- z?Qy|EHe|?~EP?*+6k{M%fa1a-0WN?T88Bpe!mF_mwa!_@-IG3y<#p}sL;!l?3z=1j3;6=RR4hn8 zlsVX^dQcT!?L-lZ3)7#!m|BGx*^u7P7E2Ii()%)_0OEz|`$QBMoFUyY>e^tEE?(&* zjA63UOW!KAjui!`MlbiYL8C*D6evJy%dFuppj{SvM`v9WLfsSsDqYByk|@?DG^pzq z;q0K=e3=}77VB3S^L-VYL^~qYPcNKVwNygv7ea*9F<(*z_-(be?Rm^w19wwx-WSFF zTLt2`O9GcJyynv^)Jd$+gxaRY6vniPD4aoGgoH$t-&(?ciy_5%ddVW?KE065t&H{? z^{uf@`WAjz$%;yw0MKpHn& zwzG_wM~Kf}z&Z*d`S9;l0si1A1rAhfabWyYS{iemBnsXX2ZsFCBHf6VSBV7F%O}5) zivz^^H3z;Js#8qLts&)DmsB_z8%<>RjKo$Kej)v+&AkBrmcmM$hNwh*70@LXgvx*h z4$byb)p}=v+RgPt(YQ*(#fZiYOG)X%m@=mJ;!dNbjyp|Ss33i-Oi*%WA=QBaAxTgC zxx%77KfKHBAp{Xb_EJux3R+eJkgCS}w8ER>Sz?W6RSIL$nMMaBsip(DPU@1;q~A2s z&-AAZLv|`YUPr|UhvFzD)ov9S911kNdCI|{UO}LZW$Z~3g&VtgP}^?&iE3}7CNnQu zB5oYS)OI7p;T(-I9IQ1G;?NKx`7nVh06}(Tj1?!W0xVLt4`~m-fjSS)#HwODvkUTo zU8T;<{P`jVE7%uStczIaUyEt9GZml-0AwCrkryuamf6*Ty_QsNm@l5qynsT`M z*Yq?Q@rn#b&?UJiGf&!+ORHFtB2WM|Ya7&L0eem=jFbv-pH+~e_BKc>ZLlpHL{iiw zsU{VV)ryBOrAs|?zE{gywAG(cIm)tDvh3k`YFQ&UZ(4SbcdZUSY42i|z;2H>dZdgh z+186?Go?aYoRekkwq+BjG}5whT5*I_bhfNRTcrbvD9bFe?5$F@?D2APtZA9-vBRER z%@Pilb@pOetyG9Rm1$I;b=j6JqS8pqF3^h8rJ}QCuKgq$f9YviEQ+jO=JJq?dw+4r zFga>n$Tu3M(x$aw$R*O0b{D2c+#|pdBBt7cxCgi<7IFHHGKyNkgkWLZY%XAfAhy~T zOMn<$7oV$(S?-4%idaSho-vynTW_D665%<-XyHG2+sP2w0vHY}J+)lB_UY{l}T z^xwIVfNlN%V2kCe{t2Qp>wmbUp+C+UIc?Yh33#VitCfgoXuFMz0hH224g=(3qKpi< zYql706>DJ_usqs;`78mDiYNn)jW8hJ7OPfG&X-~~V2Y&KfO9zA!+;vC)+C~fJb2%cwDbJaLbzBBb!O!~0!@3k(tX6cg%DtidpnBD8Rzz&d2witb< z9e8n1OEIhbPf439%YH|p54FYeAx2scV1|r}I7vfmPuu~VHfB-S1@vOA zwnRj)_tuEEAEJ(&5#3{-nT1!hGE}k}3&n^E)+cO)C;blL3^|rDdCb^{Ay7LO?XKg! zF^%feSr&>^0Mj({n^M!vlWnnTh>zqQX_7d_fgDX6RJFT6%-cCf&4W>7o+mSoVa&;UGt0ohwkQKH z;{w~j$8527HSkd>W&wJe5PM5Nl5C7;S1)3V@fvL2RoMp@Rx1-51H*kWC3+1pagmc1eA zNXt6HmR-)RVz29pg?2yWi)A@%8SQ6b6ivwmaU)0&mho*H+2w~ql76hgI-BZZIG@Zd z8kP+yV2){-n>nzIet`rqP*tu?ww92|wq-6`Onx5L6W1-pY}wC}jbpE16?jmd+elM!#Td zTJ}Y;Y1s+382x4hc`cb4G6@cnbfjfQG`=mBH+r*3yRoDlqOs77#&)tSv4#X;8EreT ziLa4yCecX0sB7JNo>+DXD`!}iyoNcZWiyxq%jicaOv?`C0=v(0Y_WW`>})CKKARxv zNXv|9++Qra$6HL=Eg!rv>mqiFGXZk%-mzQ7Fy|st#*Rl|FZ?SdHog$qv zgiA1zSa-MsXQO(QT8O7kY-0|QR;V+8VsQi9EA$8wnbju1(kW`zH-+Sv!t}eCMwr#k z2%gLjq)5#wOn+1IkyofOt;|Kk9n=aA8(XZvWYK>S7n%C&i4Hn8C#?S@7UN*Tj1YSO zDHfrBr-S}!QYrnz87l5UB{8>4^*@$H>`pICKSJ_R`o}UC`n%9D>Hm!N(z&AlgN$wJ zuZP~ypU$_{l{c`M=)cmN(o=sAA@f-{28C9-NGhcd>ZyMMBX}}rNm0oE=SeSE?d70mB~{G2sdwLO4KLfTS@w;;q39=lc7 zg?uV(UtqSXu5X`D4ur1FQMxvAfxQEH!4}(~x;`((tm_s@N9p>6RKa{M$Xl$-bH%eW zxx~=bzJ?ZmhIbJdbC&9vCTO@KiPFbjwn~n9#vwjuL#g~Tp4=SXK~I`?-A}}-WsmuS)Zr!4_4SE(u`+)v6kH4 zXqV6lI)OFWj3#CvWL4`2yST)&-V(YdwyzqwK_u}Xum$766fW_sPY{WFc<8b}+C*Ya zzDPXi6N$(8B#@eKwySgqsQgoBl&opeDlK*ub=~?7yNYF3>5{}_-dIufK~Fz1&LwnB zn^alnO|Y$H-@)TIw-X16KnBSmQQv6ei`P9*cQV7XCP~m9%mU@FbxG{p<4sZzRj>fU zAXS>V$D1W34;HH;O+weF+L9TzWS&aasAQu^;9S&}@QK9wJiBf_7{Qst5w`>D-~sL( z-1o57_-OnW#C$h}y}-9ZX2#5)%(-0rM+^D(9-Mr8GqCW0{>Kq@nxg4v=eeiG+{fvmF~dOJ*91?e>bPntvtFJcW*sYL#ocl)>xd$J zCA{^L{s6%E_v9v!Vf4f~8Cne=IT_eu8<@(fx55h8Wl3|%d^D5OzEk_^?9~|Y!<9+XDjKp+3g)_U`;Ou()00*UO8tQL#@KUi=i#3Mxe(SQC*|UeXp3`%lb58aX z^6mAmwZ8Se-@5L-*WLrn(o>qRlUq|P$lW1oE&bE8k;_CGL~c-!!`q0Q97t}UZH2e+ zjkGl4#FDdd(?ISJKiPn%y#{i7d4wc)*ntqp<;;)^^Z00TAHYsU?h;Pau00LR(z7W~ zCwI+CLGD38D!rh5mYQ>;3?es_sOCnw5k_(@j)L46KQXDf5gwsx&Vx{F&5iT;XmY1U zk!$AXcI|!GZs}>w)ydtmLXdk^kV@ZFHVe5bltJY7M)f;1OVpt3Oq1LQBRMZeL2inl zY{14nL(N5agd}&M8X=I2nkkq@Rz;J$5caB?8{p@5Esc}=YK~6sV38mJqP-0s0l^ zy9NZos6oZ8;`Kr022_M1_%uJaYa1XfJ>SpL34T~82$qUkOMkF*7J@^PU^r3jc}xio zDuP}?5QB;d!74?72p--m2u9UlwTjmX?nY%Og75NkyS5e5(sQ3vCzvJ)Hi()_ANR~c z@Q@@plBn-Bm=YXT1cQPgZJLd*!A?bh2p$Lvf>HgiOU3I1??+`Qf>udz5SXRsA%{*d z|6);tH;S4|pI$u+!BI(Y)U=6Gx1)Ja7=jBo)kH@GLEJ3GC`9cO%L1MVw+RMCYJPR7 zM$R!oPBqUeyeE#7Lns zwHJX|dS12bck*}TUiRP7}r zgeIzL4};G*kB^=j&WIw{!O!j5$FSYf^Vjora<^X~$h{>UZn}vMQQfG3-?}H^|TJnhny@vtWkY1Iqx&ZaU3-Jlcd@GLKN?Tyf-VJU*J-=8_q5Kj-ImZ6&0o zC;dFK0oQtt$SVbcToxjT+z(dHLe8TJa#M-OIZVm9kqx>rwIw2#8AHyC^szPPjwAQ) zs03AWFY|M|Ru5_Eah$7@(;;0x)Q<(Su$T$LhMm57`t zhFn7&x#~D_2T%!$+#E@+516HAy+f^){-f?peebaBG;LS zTtf`Gt~hdCapcBO35r|>Cu-O31%~Upr8>Dw^98xv5JAoIQ?rp9kmRh1$PJj1>s90i z6OrqUAvYLDZYYl2N3c_oTg{2uwI_jDdKxozaxHm++3Qy1YHqJ2N4NY;Yi`(- z+>j!7C=t26G318h$c5v`eJ+aJm-x9|`!j5}^j!A^o!r-R1-U;6Qt9gpXCW7sq{xjWA~zC4ZX}M}cpSMR*sE%87eBXai#fTQm+0j7=LmB1B)RLvU2J~4BW{H< zCdtuFThp4GA|oibtDF1rZ*hrh@S}a%?^s96c4(p%N6iVSaAcT#%NY@13oa zdp=u``+}&k^zU9YOU+G6a*jmgtlS7Axric{#-mNhCG!YHZYqwPEsorcs02msxBT3$ zZG^P+9LUhg{Vhw7yF}Dj`a>7aLM|B&rb(RcRGZeE!;~E3^+NMpB668AO}8cR=}jhsu8qsJenH5W7`=TPK26On6(A?J=G z*A+)@3U(@T7jmL@?H9l-J%2hwCs*qb$8`KHNHAr&w0L!%IhE2&; zD{_Ytk=q+XE*M8H97pbA*sE&ptNh%qE#Tx9+4P#b$1ccyC`hGW!*5O}AlD_yRVN}h zYD%tCksC`yZX||WZydStIC6g2tH|BO&+Xdzkd~e=d|oH_`1yj|>5|+n{N{85a)Xjw zLn3mMrsM_`xv50tA~EEK;>fXNGB|pk+lfk0MkKk;MC2T%X=+7)CAqFd zPy1;)xvFynxxJ#s(rvSmo08;u6Ojv=lABcIIuns=h#|+&17lYxU2){BQRFK5xn27m zY`66Ed{!s-<)wn$uLY^}mHf_of||3UR9b!wBqBFpN-miX7g&A`CL-4xLoO|j+)y03 zY}l)6?pl6s*QQ~+rRUqH>g4Xo6y*LSNTt{FyY30dWlC~`iO3C`lCvpthZ2$78$-?! zM=l&k?h4qe$bE;O+qE+}xqH)eau0q%kV}>1`uH991mxV3+)yHNqo(9siriQtaw9S1 zJaOd4x?63izD{{DnXG;lH~e5oTy#hmkE1S%{B3JyY?PzxAc7OQ+myP<4i&B zzXYlDjr>k~0&=60+-M?l1E%Cg6uH4f{aA$=I3_pGn}0B6rJ2p z&Jg5IkmPRQciIz>i%4=~iO3C`k{eg#4kaSDH-_9~9Jz2DxfWD{BKKo{Zr7GWT6&68 zb#gD*1i7W6#?tTPciIz>V;HebFH%QMNlhtIV~I$O#E?pc`o9$6+12g(u7L44R)g@q zV)Z+IZrAD{Ej??jI;$kfszOv%`mdK#R039MiC9hY!i{6Ul}}q(Z%y%Nld(U-Bh=V$ zldS4?!vwk6fwm~ePHhju?~0ZtY3%}L>Dg@2X`T0ZQCZiCN=kn(a~4_-b6VKxC7;9H z61B5AwL4SL;*a&CIN{Npuoe3-`H7QYLW}T>)G)zc4wzv-vIdfApR@&@*=GSb|QRu2x$>eo3-hq1u!Ba(8GJV zv>s05rKR#c+u{TMhiw89d$#d%)`4-6Cq!=~q>3%wfYmN-xi8y#Ad}~_?sExw*dz3W z=>79lvFDrijCXNu)&o@{dY@ZJ`Q=b-LGKj6VK0}~!-FD>&y)x|^xfV28bpc%dqoO; zKf2h(4hQe<6)E=7BYaq)-f>GkJVXFe+)7(B$X)cP7%B7@2M-JjK)pnex-TMt`^6Uo z-~qAk94BI%IZnj(YV4<(5?T*1jJwdj&no0$8LVm9sAM*fY;!J zzxH_ra5z)Q{TZS?!9M~x;NcS6@JWK&E{BM?H)C8Bwy#RYboYv+`woc|_h+bPF(iQf z8Iz*a!y^Ka8`sf@MflzfYPw`+SgBybJ%?!?Me(U>hk2^nVZLAAuRbM}jw@wWk#`?U z67EV9@<1||Xf!sNz$O#8M8tlz!(HEl&UdSm$E!q&16HNNB~?^Q6%9fj$W#g3GC@!# z=oIpBL|CbBO`qA#Ud3}*4|s%%eO)qVuL#SX^rLXzi6eO7T|J#14*rb1i_aVx~DkSc{VC?u$m zE`{_eWKbbP3K>?&A%%=6WK<#J3W+FWN+FD%Q;~bD;w1HOnnE%a;!ucNAs&TPDWqB< zL4|ZGq*oyW3K>$!UWFV|NLV4G3K>&KL?M$3VRV;=YBE`zV60V$O(712xD?`1h*u%i z3TaSCr$V|EGN6z_h3r+xutLHL8BxfXLdF#`sgNm!B-5gaSXjjg+K)mq72;BeTOnSB zR4JrEAwh+7DWq2+g9;f^$gn~VDP%+;qY4>UNJJr13ZVs}Xg@gd6x^PX$rl5uyJ<1P zSGKC#a ziEld553*#EApV7rlsM>@Nfxu0> zxvOD5eQCHmjgOdE$9cqvR;7PHGgT}Ukg$nD zEtl&1SJ3L>EUHG~$6t{7^y@Q-AL16lDOOqP?cy~t{w_afNrnzmfl$ARew-(@yH}J? zKcmAnS*qYE+%NKwCpXfA$7%?WJ~)3QMZ+o&i^bY9A1myK z@hq%;ikBjm9P9O;q>z^hVXnLCcJVeFIMPRbp>v#Y_?Lbd1P!0JceuwUn(plx4OAv? z7Vz4wd{qLkJ zxe6b*;5CdT55drbpWHw-SBpg4LaeGOFVw?SuDybeD#Am2oodhk>tct z!=h0BS@rHg3ZMk~!aNev&N|-Q;g=C&OSa$zt<+t6d9Kv%LtJj6m$q>AA_yasXyK?j zzJP*R`^9g9faHiM4~of76oc=URNbE;R!e9NV#QMRGNMwuW&h=$e%+tJn?5Z_g^F9` zZ+l>6DuCh8P)z%6(e8y?LBjQW2WHXP{W3eehy_(|$rs=ZL`zFq-# zyF@Whl53$FRSDN7i^yBkL?mIiX7Y0k3LuCcd`JZG4g^1`!u!>dl*qh^#zOjNFsSUM zBnXWYSNsG{>Rp2(6OFdF$lvFx`UMP+Ad+8U!W&gG*F%&GKk_2v|Pfg%$_DS+%`{-9O2HzmUR%6n^#{J={y- zZSU&gP6{9SlOArM@Soq-!&Ma4X2Ko{r@f`eyC{6_n|e5t!WX}xhtnv0`Gg)$rf^+E z4^O2beC_LcI6~ondrc3IQJ8+U9KXj%d`2id{Hh*4MB#`3OAqg*@N=)|;Xw*d{6P=* zQuye&9`2;DWhUG};WLlu@l_PgeOV8CDD1(nCrf)=6yAuROP1kG3b(wZhtnwhl^6AJ zGKFt>K@U&ivBt!nF+Cii@Xwyt!($YF;yFD$LgDde_3$AI|K%AyyqCf!%!CIieCluY z_+AR1_p~1Fq;TO=dbokYYe)5P6@~pz>R}IsgTK+kE(&jdLJwzB_-l{r;WP^0`D;C# zOyT{%(!*1D@-gw~V|qA3;TK2r@EC>9{iPlrq44rY^zb1HKf(KeX#W)cok;Kb$}i~0 zIX7New5jOIqN|GV{;vMp*_O|{8UMZ7{_Qr;u9Xf?!J{E9^5VkjX;1$JxLIQL6dVbq zY@8SYqTV0gXviP+d!Resa(TKx@brZ;GA%n#K?nEreeCI*^z^&aJl$bWAAXO>vh!XH zrBR60va>7}Nwe&H3j8#JJS!Hk6oJg-!f)}+uSaec zIYY^%eZQOd(lnKEJrtB6|CKU(6VHAF;!V`m3y-9bvDq^z8*RQ8vI*&2ttN!+OIyHXoPMQQ7m+R`F7L~BERj7=<(+N|-~E|=OUDoWdO zsm&U3L~Fw@%Z^R#|5(t$<%iL>B&m&}qO`qrBIUqs$H*&mrkLV4YsV%krMAp?Z3lQZ zeC97!+Z|F{X5^M=ZTLmov5EJNLjR6mxT3lu#>=8gPro)l-^SKec=~;5r~(j~Pj-}+ z?b@6?;OTEqE9-kbvXh(tWjFe%*VBKsYyfs%-j}0#@9Bi}9r5(N8A;_Pyxnm>mH4pi z7e(ueDogu5UROcdJv-ilJG9FwK}@L<;_>$?6yWVQY$MihqJ9S^y8LiZb5@-oMnBlVHEK6 zEzF2y@$x+V3o}BWMVaS<6S*(J-d9# z;6wc~*;7!J7J3nGi|n3H?t@YDGCci__yyZ*@awjnV9%NK{mo-p_3Q+`!>y0UeUXV) z1To0%L|KeQ`SUApjR2^FF8&+O^f`({0GwgZuBHq$BpR-0yvFw!_~7j6Yszp~cAklm zyR`3^hX%j*A{UZDJEkn;R*c}8mKzt)c)eq4j%6oZ;qsCF4NLcaKHe8+xPCcrE-T%& z%39uk1Kfj)13qTgQZxolS6M&4=;Y~poOnf~E}2DL+J-vi|FZt|QR(Jak!hUJuyQ-vJX|k6bQHXzmVMdbe|&26je0q zf1Ss(3!`@*X0jKYA4EO{u&lp{?sVXzZ>2jPv6dCQgR%cMjS>r2>%XsU>AsVE^_5>x zjYKtq`T>j#WlN`IqueDLrDfMvP@@X+mhHj=2G66#8CA&0eu>{iMBO|>QPt#JFGhY| zdBL*2anGEwP%7rZj)k6G7v-FUPyPAG@Esqa@-TK=ZXBX{b;n1jxgA8W`z6Y4>HY!1 zNYVMrd1vaBFL7B4&p5hMpN4ZTo{~7 zHgbaJbJ!ix*p@(B zdt+-0%dA~$i`8n&ayWAs<=foR$n*OBbmUdRd?bI&7QU8td9^{+2r1 zwE?oWotGM20yoE~CEA>p`dXtY3W_yDp~{3ct87Imc+IMnwpEQyA=E>RKU8wv00l%B zzO}i3sx%61M%b%$s`sdRKY9L#a9lP%lqZ*1{7Z0Bb= z&>L85do8=VrL~5&hqgAM1tZdCqm)@}S)0GEv7;Sn9rj#Xu7j=RVG*6pmif0eHlz1Y zye&J=!HPs!#OJVOfu_I~KY4~qD{$Bf91I;QQj zz7Az`C@ZffphGzv%61lH>rk$MYV$!$7L&)JoLv7*s(b;}*UUgJ4&@eP&lpj_p}ed* zr>+ZUWNTh+KD?@EI60P|@2{P~1OZo8eN|9j5DnpR) z*EvuZ3KJ}9^6H|}2^zJIXnlf5ZB1^So)_(hc+};(qAz~oe+2m*C`J*t- zCO_NZaOvq#i(r$VU64QH*=)`xAHI&lIGg;OK-P>GvpJjmTvzT)?P1?F>C4M1nDI`w zV3SuHh)O4T@%Xso(las-dsd`FZ%!Gn^`q!T>qY8*56

%5#X0O!799`~;J{-6WTn4 zW|E&~lBb*G!%gxGll+$^xyK~`l}WDEe4ea@ldgGim_w^;t4fMqf?1~3ypa4nEA?g_ z{m?K+@9<;szw;C?Qj}LmqF7fiKEsco`~YajI#hlj$;8^!T2!`KEd0Jv)T`GSA z%%SopP@aZ-totYG|Iw6Br+k;nA3=E<%CQcWA4qu`!m&1$|Na5wY3RmUxc=s0 zjs*?9!_QZE;Q0lkoTt>H*rCRk7RmVl6|_ha!3=Fgj~4nwtLZuF%2W)~FE{ZpJ$!C& z*8=A$xemwN=V??L9H@V{s-JZ`*FQ-0pFMbp7V6fXjh?Fw*si^Huqq8?PYBsyCSx0{ ze8HTH!Q)u|E3GEyHdKH~p--v?YvG*JA&+LkBT)_i&E1}q0l|O+Hul^LqifD}EI%@K z88q2$w4WmF$B44GW3C#nkjLPd-eMo?6>8xX)mrEWt?rvD7YbiNp%y;3w;>3JY2nEM znzd(XVGk)B3x!QeVS-5^v>oDgiQ<*zTKKSDB3!8omLWgk5-l7gTKF~|lZmq?&eS5e z)k8dS#>DA)p@TCDLkF;Gq~(VnB4sUn9dT)4&81Bk^634;9IbAMopm0p30mWn%-({! zFY+VqZ4f%DhUbMZ)U?RuX?Zm}256zT&kqkCmWS2mfYUXg_vnK0`?S!W<-77rKgx}) z?46SN#rcslH&VsCXFnUL;++@1wtPzHbJd~`Ev8O3S`0#Q;`kSwk?W~O_`JaR;d7$E zjPt{TqBYgY1CiF8wIP%)aPHeh(gV)ZccE<;N~)b1FP$Gbwpoiz{V{()Zym`89&ldT ze!zLz%h#qkPa%2)vTe`-TvR&X^gpYO?^(VNnWOV+whf5Qqu4g|?j#FtycQWU72WlP z-p>oq3@D4e7CDKXKf-wm+%iQg zh+Lbd!Q}kVw_11*lFyU>9TR(x%NzfBLFnM}ck{y6!1MxNUU-HU*6I5i55C^l_BJkP zFpZa)6K8DoV>z2R9fo4u)_m^6c%6@ihG&q$pW!dnD7>6>Vnv1G+QMFnw zO1)FBhJsGj?=&i2Ok#*S_B)j=m$fg*b!L1=MN6fq4MjcpgZ*R)(Gr7Hai-kg2+zR9 zJ0_(g9&laClTl379h0&tyJONh&wpKiE~F2qBN#g-c}e;=n$nO>B12P_rqTbG2k8HK z)%5@E-Bgamtv!;sp%a`WxxPyhPtqd{;J7E9@%9YHTZxBWJqtUllwFQ=4Ea za;xAVr>nvZ7o<%htcp>WIZHQswq&p_(A9fq36WT7hZQ z0ap&bkla5ABdmLDC9O zN}KpJU4PIfB;5x+XWb(x4Np$f#&2`h-mFwo)0H(@!w4cdEmse~*zTQ{o*y1^C`94H zwEWNqx#7ttX`wGsK5ZqHPwc%I_N0D7$Bal$y^)6C=3=$FCJR$30~0h#ivq2a z&bm~vlUpXnms+)|=a1i0^>?+zt$G=D?B2j8#meKyHN+{^cg+Ayy-^sWDbw8^=h~~V zwn3iNzKY}-&mo=j0@5h2QZeQDX0dP$_Nmc-DYB!*uniILYzBI_C?Vmn~J?l1H@PmPO}!$Rq6S0KF?y{Al~1g7c4Dn+XYC)j)_de(8qi^>;B)DLaMm4# zTF!?i7vs>am11}E=|I(NUg(9Y6&OQztGZeD5JYmq)iV5IPhlH|%?0mwdOPwg*x0b+kW~+`!n=l-n8G3y9wPFMXf2-#NSOdDHPp9X*qAM2b#=&NFnR(n3ks{uz6@ z%&)PAgtnnQ=RLz5&(Ic|7mX>7XsRlE9%Z|fE!d~LkEJ4+Tmp0{R4dFOT6hYMYw74_ zvKE3~(g={V5ba_gx?2l-lj#)e5^Oxxa}=gMFdgrCqxB;lKi|ah)8FUd8JU`_jqj!v zEZJH6B-X+F@Y3Y`@P!$9bVNT7Z6Be94it?4M?vVN0_S;ek!G3}!f~dcZl|-BmcRVa zP7NEw(5v|nXXInwksfV1(A!(rmXFN`)+k7wwY11M>vyWrS><+V;Z<%dT02d3R$1y) zdF$G$r)i;1+BeXmG*%tx7{3Zu!A#hikK=poGVtYxdZQCyfEM)Xg^SPq@M@$YM)ck`(0 z)ZxFtMOrujzhI?_zPO*esVh5c*Pwp2O1JTKb70%k@ zpa28vm%xzih?V1+Vstxt7j(2pb-EUM9_?TjPxj=8ui^HvxS*}>`~f}A+QU%2pza%I z-9gmCTwk$#fFt_cSF|5Z@bArMV{(W`7m!EOstU-5f9dY+%@1qjLkyby&`aXEs@Yl? zts|1k=(Olf;G_|fkD58;u?SkutGR|ewiC`P2>le>i8hS=AV$L<)Sw#hDz4Z`O!p^>-BLRS)Ne+V^fW>KBB%3r4i(t;X>k1LWr2U_pjdb3<*;$PVPm zVFO|>Aw~P!nqFsqXq7wLx%OgZTkim8Ej@%-P={fHI63QP!_fTD%8W_d2W7)sD}C@O zI=MJQ3$66#hkCRD(W*44FFyvZJhKX}Tmk>+>tM}KPAyd7_Bz-8m7HDk6ZlnpF;eQb zk|=bAwtdi9Xkw4^F}PTRw-B=TqhIZV?KQdX44n9M#{Q`eDj>Kn!%>x&AFjm6U7DO1 zo{Is#KY#oI&3WGIGSOH$f_k>n-Uc#-hoTqHkqFggW2*23r}R%UN( z1X|YlQ9m1Xr^oBUb+nTTVQhxJ&kubQJzR|@gaAumdhAw?%S7j6ht^N_s1U@iRk9$u z;ehkqOZeX_^R#|G!)y6|9BkoL^~T5)i8q3Xu`!JDmpkG zX6}j&KstWBq!FH?3Tw%H*t?TNsk%PQi2V!f(bJTJo{w%)xI6k05aUx{-?6x_{yZ6r zj26o2xf6#QbtH=1>FxmOj#_sYk>jHw9p$9MbR4L4_h6~OsZwOJi&PvK0rb&AweD^~ znk6`3eSbR+KkCp_tH`5y$|9`&bWjKvjt&U0zwcVMg@+yiN(*4=_|(M-(9+^NAw8FaZ&%|t9vRNhAA z2qo!7V^oQbYT8!a@p{=4`0g?k*GUDBwiVu1UuxDuf#d}tT$2f}MaNdLsr4_T^+ zU|GGAVs;~HYJKNX<%LgRIo5X>Rb5n$AwYW3-$i*;d9|(h4%}H4ctS=mc1RUm1vX3RsQ%-@r6{rB~s=4e56xeTk)yvh*8~ zZeeLpqV!KJ{egL%Gz=*IEFHkoBSgBCrAIPDvPdsw=~9*^iS#^{-jFEuC@BsoGOqkQ zuKaYiV;)y@W0r;h=|v}e%Hzt<w2DCREat&6m;NN5c0XUdyig1Q=LMhv=Nd3(WZgcJjW3NXKfLVcr@8rbF)&4 zA3IJnjvLd^z5iF^u@*P=Y~nEu;&?p%4xiBcrq?l0JPK7|JRVzd`6hncxceiH2mJ6f z_bwifv#BVOItS{Q$@7bN9y%mS9u=i6ZaUAVK-H?0b=G(#R-_$GQf;kMirUu2B~|6v zUM^a;i zO`JFP!<7ExWLbyvM(oR5jqMpuOkPI<%?DQv&JFe8=#JBS?4NCp?-!v-n|1gEh~se@ zu8eTjCP7GXI#CtIw zcu-rU?zf2*>ugqKdaN>HYm&)B`tfogdeMKJEbH5U6Q|?RoXvdt5clHaak>Wnp!xK7 z2q{hS&+5|&Pyqj=93sh_2qX z>OAJhK{$^gS~~w84rBN{CfEI=oXFrR8A^lKJWcb}avp7iJC&x1ZjQ*D;kck(Dx$5*fvkaULR{XWH^`3AJFBjJ%`d%dkiHaIj3T; z5M7Kw@p%-LtRr4J^#X5bzq(je>kg0?!dsNb@*^AEEy&|6f9A=!>X1x}VKw;-AKI6y zqgD_C_>us^E$%j|5xx>vESW7Yl1nH1I6a{PoJppU#52+P_?0J3te@^a8QVE^hItZP zM=j9KpUeX3t4xZ$C=yiGNdhkGqGa?2b$a!*Qb5oYHJ=^$-lGwLa|Y<;)x3ZU{GZ_* z?$=66rlTl8tUQdJwcR*Tjh=|&*r!P4)%=JnQ5)Q?XvDepUf2T(E*8a*!l)pZJL?u> zFG)&i@G-7Or9)>suVWz2AO9`dd+DEaaSq2-sHn5z1|-O_9u*h33k~q{MJd|!D~I7S z5c!O>qW6M>j^?DGZPlNZ!Qn-oiq{oYopo+6F^4=`&mwgkVs?04qe=q-Vo;4@^-@fr z&xR@;X{e0S(U+;INcjMKXQP+8?$|mC{}Hh>7Z+*vL~mEN+^Dp1&sQ6<2lveKos$4D z=k-o<2-ajDnJ^-zPMy(=%Hkr=A>5(-@v(g8c`*9DZ_(5bfc<8x4Z|t_nwUNVQ=uK zkySZf=hmO16VZvfHl`9hRDULxB37SR^W!P`n2Mx6 zX?t$Q0LO|P-Tus-u_ai^bpBQD^w&B9UK1|wFNVf)`qW<+p>lI7Vu+T6Z43$~o zA=B3mL(fuwuYeb0Ei%ZfMaFJZo49b&hxPRR2#?x)q7uF^gHhNE?k76QOG&4ys$2My z94)QnMobmDfEayLJlTU~#B^u)61v^B`USe~Xt@ugu6M=$Mc0aXeaBH?M3;UYb_CsC zS4SUbB$d)M+-Zf9^<4`OcB>%|8GVe^+_c1#aa1W`IoCq%xZdup{Q-CJwYnFbb^9q1 z$=QPAdbAfk)vr4z*z*kFC8*&mEvJi&Y#^p7-v@Cx38`6e7 z|A8N9P_>xtX;T?p$m8T6m%X01bX`mKKe9o60cIh>=9y=+2_l6SXkzX40+6F=!&@O_I*^IZQ>Q-qK53h2pOo8(lbL|BSyfW+MZkpt_-o ze%RT^SBn04g-1ne1d(fSK8vvK7;m1({ zL2%YRNREi)yfYIGyG;$_D?%%A#N~btGX;Vp{|jlj`afy70ZMw0*JFuL4X@+1qL>=q zME+Mj-s}!yZaCMT9{2GFIOAm>dz^I-)80cu?^oT~&!PV^I_rIoA-NZ!C+~CIPkxOH zJX8?B>ys?f7LxLLgtK-H-J|@n10i39lx|V8vM3n0=mFg#oB=uO)T}@VXsC18bMbvP z+SNgz$wXCKIF)}Er!(4sn6vh3ay+d)zvT$bngK`LLsp3+8dS6Nu2v30D>a)C{TpdQ zqG@U=9{u=GlWEsL&0-Cqj$&`Fn*S0vbkv%S<}c(pbWTU}r^TDEpquqa#@pUYV=!SR zMlmE3W@4iXa(pJXt1}90!63HI#2a6wi0Ef))cyEw^S7!f;q=Z~`#7#rMrWZU_5fXu zm8ntgTpNmy(9Avt7Fi8Ug9ET$^LY6_`YSQe1+mq@z5g&7*qvZthbpodxD~faqK}~@ zrfv~Q02@^Rzb3z{)#6ebK?zRWM5q1c<*YH$#u_=dp%_|ioQme`mU3)H&$P2~8g7|J zk0u*6r1U}7qHNqBxAD*9QCiV3h@ExE(1N3{w92#(_30K>`)9i&&x3y_=OuUuHZ?+O zXRfohgeKipD2~lS3j6PCuE91ulJnp+{tDa8_)ZvI5u_7WI+^K>RzO)@VXx(r5R7gr zq{)_!(M$(iobnup0Yf)bRS{I^d?n_lZ;d=Q#Zk|ybiyBV(f2CQK)W>XZS+WL0Haa%p)WyHUlDCv++ zRCM-Tq2g760+5haY|D3K03D~nG#){t4ytPVBQ(Q>2CEOY7SM{#`JQOh zcE8H)!}SP!jUqbApz07RA6e8z8UCipF4g}Ew~v@eDYlkQFmxt-*F-UW{Bpc+4Z?)) zoZvLiV7f(^@V%2-wHCy7{1ETj7B{VN=-nL#Q9$_xy5jnv$xpe83}=^AMtvk#{Xl(0 z^nws#PnQn5e1py>bW}>F6;qx&`3?C2>$EBY8>zY)Tl!c`L=HvF@!PDJ zD%{0n6lulE4R>vE(>fp?d-x^8V`3SVDyJEiT`HETBJvwq_6GS4{cKijxONjQGss$m zj0%aYP376Tql8VBfsJ%y=TkqyM)N-}g3H(FYO2B4A$(L!d|i}hw>?7+f!kCO=twp8 zwhF2Yv~ua}win}_bt%4FcR7)z8)QorSq0=^BBfZK8nQC-HCT0>!O|iD&{P*yhP!x% z&}c+MTCoMRi4Eh{_G2{FY2MPIKeq7;?DMf{#bvDcKK~zd?U2t$ZtTEy$Jiza_XR2^PK|z5Z_y5NK+?|T zbVa70>nUaJRC!-?s2U+mLV>Q)uL`>riCk5$QI~3#Z`|9Qa2P`C##NjH+o@ISq3b;* z&E@Z^c&Oj#7WS6Tx*51)6{G*84=v>0c=H>jo;ul5Lq)GQl>_-cz56w=Vn>DCs}Y?0pvhsmpHh>nS^8XVN^v_Xuax`ULz^a15<{$loM+ zpXe>5*#dc|4s^|FF>Da4e z$5iq|E*vh$iNkt}%Z=|JTA!c&-{!TNsmTLO&m;UF$h$0jiTUtUJbakqz_$g0I9B4h zO4mhrjFp6Q+mV^&I^ZmN4H_=~KEeOGf1sv^3$=)b`->N0l^JqNFc-AKBtP zRtqKT_K+zS{gQvDZ{jXsU3?FdxqXV;2wwy7oAihN5B0xTqHOP<|KIrw&lewxXGL&h z9e3Jy|C***))lz*OV0+YXH_DpohhJtt9`!@R#vlx|?@xJ2pGwo)QQYZoW#Ze!j2MCsKm zt%WHj?@V9@iw(nBnw7{vN@#6rqV#;0&PA1pP1nGh=m0DUUPsNr(Fu848$v7aprUKY z6O-wY#?!acQ^?LWHCW;yO`V*}4?{ZF;-MUpWIYQ#{V~YDsXBPn5l`%!LR1a#^b2P{H8}={d+tSz+WV#w@`ch4dWcN-Ch|Ag`80>Q#~$S}lp; zDQTz$>Db;-DV+|WR9TFNcBwZNs%KNxbHgjt zbHkPDx#5NCx#7FI;ca?K__iKN+}uf=kgV+za(UkOnJz`1@(?}mOA61(^TdCV=ZWu< z=ZSBV=ZSBo=ZT-!9|1pB@5xh>s3-CW_+ylTGloAZiJ@CmF&@e8g8VY-!H^H6EVW6M z$ur=0h&1VTC3WR6qGpt8B4(~34{=e}TD>Bk0k2`%@J)13Vq<$?jhYQdmjgJ7dzlVG!8 zi(so@n_#d`jKF2-zAtPm?7v9%og+tYJzlLLG_CT>AgFY4+zpN6Uqk# z>jfJG=|Vb{HwiWiwg|QgwhML$b_#Y0Mg_YCdjuUkXV)eR(q$KFkFJjsrVDxmvjx3^ znxIe6FIX&CE*KE377Pm33$_Th3bqNh3w8*03PuIH1$zV?xJyBH(-$ZRU4m(X>4F}? zY(cM}Cg>CN3lFV4!5%@pK$rU~ z=n_m9%n=KL$b_@0h;)TY_j$}cXV47gMApP2&>Zf3~pjS{6^a=U}iv3yGcEJw8PQfn0s9?8Xk6>~#_s1oeCYUamA?Ojz7W4{gf<8gNV6h;*Z%oBk zuv#!ESTEQh*d*92*do{}*e2L6*df>{*d-Vh>=x`1#EY>x&Vnw%G{JPi48d$cub?LA z6Z8uf3ziE81giyug7tz8f{lVrg3W?0f~|sWf*pdLf>FV4LHc=H@^`YJOE66^T`)t? zBbY7d71RWMf_}kb!E(WXV6|XSuwJlHut~64utl&{uuZUCutTs@uuCv1*e%#2=)hfe z)o($UV47gMphqxU&?~43`UL%g#e(!6JmRkw3<}l@HV8HfHVL)}whFchwhML$b_#Y0 zMg_YCdj#>ri`-8^mtdM;x*+|kGTG}9%ofxHeS&_$VnKSpAJq#8Rtp9N>jfJG8wHyL zn+010+XUMMI|Mrgy9A?x-GV)W_(5Club@kio+TzbGXymd81&HV6$M0V5?xeV25C*V3%N2uv@T4ke(u-c9I2Mf@y;3 zf*!$aL9d`D=o9n{77NmQB~?EKs|ACC^@8;4%BsJDO@hsWErP9r?SdVGoq}D0QNeD( z9zlmo`YY%XOcP8O%npCCOdN_H0u(t9&ie+8=rgM#&f4T6n=O@hsWErP9r zZG!EBoq}D0QNeD(9zlB8i|k1jbP1*jrVC~WdIYlty@EbLzaYI2RP|FZC|EDpDA**} zBG@X}F4!U1B^VX#5u~4lpmtn>X@c}Z0g`(Jy@HycU$9s(AXqI}FW4a1B-kw2D%d92 zA=oJx73>yt;1Mw8XTdbVbU}|`wxA~H6D$^__oxz2wO~-NL9kJ|32r}_1PdDe-TeYB6= z{LEo|QyFh;40UKVc(br^`(r^vZ0}$2$U*$|G!3y`mi)_!dDFYG=%z(Mguc+B-eFAd zEEzEzSE}jVTZbT1i40VFeR!ge@(V2aQKu%BpRDIq{qV?lW(>nO=Dg*3^zy$q@J3wR z$-^C~ArG88fNoPI-3J71I@1>5QIuwEZ+d;jeCMRsmywW&WYzyFvB7FRPYuRfx?xPb zrODFLx!h8lTh*tQT5w^^+7cd-v?ct7LAd`nZ2Ff#n0}Q(7_}ul_)D=k!NTUzaSQJj z!u3oz+8_-4ye}GbW(m$K>2@uhY_v2^S{lPG?K~~+i#8mr`}$%eEAVKDJNJRixaptf zurEFY!WUtK(2J{deF;HV89tIkK;X^+Qz` zEF=Dok?}773-{2d%iVly@c<8K8cz+jguk-2@N|Rl&q8m_^7iSrSQQQn9Uwq8BIFk%QhwXAQ z%a(BK8F3456T;sy;nq{)<0%`P&At|%U`tqF5S}N5lbCRYL70K7vwaC)=ka0b@;^_H zTljT0clj$I#*@b&Y_cV6vL(F2Alx8?O-vX&Io{jGsT={Yf9; zGU6ZRnwFMs%82`7sUN~?MCLy#nn)WQ?XHQL{AJ`LY} zrNl}-F%1dc@eh3-ufRaqQ=b9C2lt}|WQS~_Y-l&#BB%3^^xliTTG*hBohp>Adg5jz zP;uxoRHRzOc?HsPVlkiT%ee!J%{VO>LnM(bztOvMcqZjVrsGwck*rBl&6jOH?a0?p zU|t>;?~ViQP}4t-R^1sQ-T8{Lq1`A++Kwd6yDk+GJeomY1&i+nKmUbNjPC|p^p+E* z&1f{JPMrqCTOP6$yu`nRTYiFxsHGm;*k5kTT%Rt?vyc$qr3v$~%)HcKPP09pyKR}@ z$M2jdn;$?zn73xK%})a1<}(atk1g}SW5qiO-WaPhA7U`i7v^GS{y0rlByVW8%yW*j zW4-}rrpo5o#wqF%!h9$*uQ!;BZJDn+#*Vpbs4zc-gm|OH!`|2ogg0gy%+p$&L7B8|95lkPw@HJd17a0mA0?<5g$L&(*ff zL0jez@t!lq{8uD|`5s~Z6Em+im>X=FPqbyu)|n48m^ER}W#$P6bF(e;8LVLO#!YxZ zkFt3#5@Pe0qu3jJfbhoGJgCSUZMMvx*p9l7@ry%>`4J?9d7UsfF!MtObEhryUAD}> z)|n4Cn13zIXEXC6gSp$5`5KoBvBet=X<~B`5@K`LNcP4*f$+v@26Hm5U0RPHk*s5E zZT=L$&!oKZC=$ZFMwqW>=J!(Lqb}W+`Cm>uo6pgik2ILi6y^+OzRh6Hwq;(+3KnnN ziuau;n@f-on|Gec-uMR)-niIc_SrH|v}KOsDx+e490_5r7Un8uKGI+=w`Kmpb`|}N z&OF3mK3SMgVCHRHk;Ze-mU)vc^EzBnRW_F*AvV8o2799o2ya|xFgMyVSK2b~!8K*Y z`~(uhe7P_$VCL}#bBitW2wP^a&g?XpUBWz=nGf*7PTpv@W&X%^<^Kb8mCa>Hh|Q0k z&fa(!2yZ-KFn8H9ueW9X9P?E%KZS%aUnoQbKSY8l>(4q(_|#8 zjTJ1D^G%#VDdr7G2y>P&XEO5*1~Ux=YiA-^SKBh5p)-Gv z(2UfXf5bVkF#jD_(J6v2($(}x)>4DH$(DJZEprVBmCf}2QDI&t%$3Z1ror55%Y2e8 z^Em{XbgQ$GHYpF3=s-?BYGo~1J%#QC-`KZ6VPCA%+=HCnREzEqn!Q5uce1a`=7}sKz&2x|tnU z4OXy3@B>`rSIqQnXkq>USE0!p@6pxhNYCA^3%xi_YhMD~ab29dB zeP_33%N!XfHeZT_*gR60M=&lU=R|d!Z zoNdeeG%HyAJYHu`Mgnw0R)G#Jfbk|&paz!c7p{x>(n{Xy7ksJ(x!)GCoq`RxM+=je zUx7z&iPtUWrn9+IbZdmvdIMVh@Kgrff#-Ms^>*R@KYlD>)}hqf)ItEgV=T0LBK-*1 zA+aHN;a3C7$8q@>RsN|_PS0ag`SVAr`VEIseWRSNJjDv)&#gv=>`PL5djSdUyo1M4 z;=iu~z9Q!HDn7#=#kWB{x{^zm!iL<%e0Ny+&a&|RK+cS$c3b+V_`b&jy8K*iWXMI# zcY&3!4mxK0ZezYCJ3gO@uXm7Y_Xj{ie|O=5UNheq=JVO{-3wjazK57^la(*i!uRUo zs$GX2-;a2_Sm!HZzDulpYoTMd?+WH?vG_&#Z<>kE$$Upz`QF3h>Sn&fn6KE5uNk_! zea{@C`tcMX!GB{ce1FC~LwsF!de>J=<4>pI#B7o3`poN{kElGzJ1aQQVx_##|-vle)M|eq;nXiWV8tnKUgs#rF z&!O7g3rOhicnjYt%;&Y^8)V|Ui}~)b^4*LVq?qk{3IhfG?Y8to^>+?*b^9)2z6-2; zpWwybX1-a>*JQ`n0$rW2x0jab)E@u|{heUpJAlAK&u7PXsEO|(=G$cDy9F=7G23@D z^EvGJE`_dcUlH?NV&(e`@8~k~oxyx97QZO}JxuTTqTe~d@yN-1M_T!EEPOit=(ht?&JD{uc zox*%4TKRry;fpX|z>e=Lyd+8Id-W&P-Z z@@<3T(BBSAKU9C$Lsz%&Eap4I%9ml`D`CE%9p8by2H)-5Gb?qa?>tbA`p6ZsZ1U$>oJaK0Cew6W>G3x5>)a`Dr5GMCNnY@%3mM+JJQNm3mtQRuVTJpJHCrde9wHR+IKg^POnrTLT?)e`Q<+ z?D#G=@x9uk+I<<2(BFUJhhEHlpR=FS?fCuzUA@28G2con-)IY8i1|7!{ZRe=3Fm-1 z-&xFehLx`#I%fNR$$UXOzCshBH!)I=e6V8 z1YNzqYk1t>dceYWoQ3Z))*Fp(XMSUxzCZLHnx*siS!`Ef+%7u(KQdORm+xRdw8Z_O z%ITXkv0svoZqGM7Zyt-=ZRmadPm|tfUn@U+1YkdKdkv(ct~YRdUYqtx%{*(kz0o%9 zjW+A8;P#fq+mq`Xf7`{^FJ^Ihp|w0;%Exi}7;E{ice(!YTz-tT{BkM(_Ft;M2LK6i z|Lz^G|2CJuZY{5u^2fRS5o`JJQhpnk|IS)|ZzuDw;PPeG@+>Kz#pQ+8@)z*ZG8GRl zA7d>ql=9=b{1|Kbi*IrLZ!tizo*uA{Q@@nI&E>CK%RhUQ>p#xrk66pEl=9oS{CC#! zBq?9P<;$$)>)v4gSzKOdEk8}l$8q@>Yx%>kbN%DF{1|KbL@EDvKldMy5dX(_a{aft z{B>*jc~bs3mp@`HfAcl2e;b$o&RRZS%2#mtGHdyP4(UIa7h21&m-2C3KE_&}BIU<( z`7ze=wRkBqjh}D7;{F2?`cE%Srt-JB{B>*jM!aK~${*+QN37*zrTjK7|DCn``M-1h z6cmu0M{;$5_i}QF);j`T@@$c}>5~j9F-h|Za zhYfQ$>&D{BI0Rk@LP}5w0euHhULLgyt24bk3QvvYyEEt&Qb^_Ehwj&&fGgknTZ}Hm zp%t(Gab<0s+Sn;;i9bP^on?i(N>lX|CDhkBdXDRp7&Zb7V5cpIS*V%!Oq{CCd$?9cO%hb!Ju23(VDpfC=x}zJ{&(UVe z?{LIWiEt;?grufR5>KV!9uzqKoX&Vh2IKFF8N-bVU1z${3H+iFR5vv#Gw{AE7i1M~ zbT8$RW-+acagz(x5Pl8eAAJgqhg>wcV=}(KNRZ8--omtFvX^r7tMS?R<(|RAGmvxE zje@=w_WE%7-iu@SCB0pI+$9%x;Yf)Q16QU@$E(!W?!-lC$g})Pp79*gIn$9wIet40 z|FfxCnv%J47*R&uIfr^Sn zHc!Wh6s6{?B6+9SRFNi~r=+eN#)Rp32^VFJ(JNv)p2f1^w39>BhB78h$1}MoHCL~e zI2}_-Y(E`OkfOH#WID4@)fTBf7Czmz784?7|Ae0)vj zV>@;T`iuWwK-xMVTb0a}!)sDS3<^^!W4B%H=0u=G1OODOMz&cyG|e%UEp8--)v(&ZK8{ zXW&5j6DHV;c-QFa&ozAQMhoMC;97SBz7V2?C*eiD_%Sw4<7KI}ZhF-U2)he zr<0ssxq@^CrRlXRNP8$vuU3IYXB#C;&k1Sa z>zgF&;cT;HvpL%$SubZ>C983^O|m}DwoBH}*$&ATbGB2m<(%!3EIpnJGoq5M<}4i{ z$>tzudn8-WSzOmtr45{=+uNkv$XR@cMrE5gt7ZsFn^krIDYmHOL>1~*PODJ2aax7C zozv;0-@$1W>P}9pPSd{ zoz7_$>I{`$9TZP^IID*`o3nbT=|L(jyjl;n#@QyR>*K5*YCmW7P#1Gn4|O?b+oW!Q zvwEnjIje^{$XPwq^_=aJx(%GwL*2+(J=9H{)kEFPSv}M(oYh0!%2_?sZJgCZ-Okx` z83-Mm&5&#-XFZbb;%v5Lqn!0hwwtpWvIm@VE=tF;n)KIwIDrV?9e`}VbM}ziRrbDW zsnNqVe8}d9{~A>AM7cIIAsc;TA?=}NC*`6QEL*#1UH2jl zYv!JVMf^i7-qY1)3NsuPXzu{grS5cSOv#2u`+n!8U1axnUn+xNM)7>wBdWu>)Bg%m zH@Y*p?u)2Z;H7Ro5AEnoX??q@>H;f>xVcN+Y4PSEO~J3YfC9x+0ysd^`%clY|0Se9 zfUuw%32J$R`V|<}q=v0dbov6dM+93P^({if0XTfVYLTkU?m~V#wd{X|Ta2>~Igh)9 zmWY_Q-8Z^5-WpN65gJe2v|byX^(jqPq!XT&Lfz0vS6l{4&bWqu`UNSHB|3{?!%i+^ z8=|TxS~#f^H~`qd^VYAxBA7Rzv}fYjQ82SC|b%VZ9X6$%fUv zd|o3~r?KMj$3G`UTlYrz1V}2RONEQbG($y-Rvd*1>N^!$IVjG`N zDcV}~JHs3tSf9=6;BeLP+16#xqma&nYuy@GujA7%Du9sYy7Q*%Uw1enlj($KijOup zQ#_fw@GBMr&~yi_^4UYMg}LSLP^J5{(FvtIvG?v}7f%Lav(~<15GtTC*9;B+72tc{ zyaz#MZZT%}H<-@vAhVIye%Q6KQDG6yxK5Ze#g9V#Y{h=(oCCCA;2pZl%OT3T0S#bw zpVSDYjX_mu_69diLU`+4{B3b3t6?`Ay_$WgS|RvHozdb85W!DM*-y>XHGlz4k_YZ| z)2v>`sQwnD!KN7+lsi?A!Q)!54oT=Q z?X%2XZBy3zH+CqDceSob;JHN9oW?p?(OhqUUZ3^#cx7W%g!S^-}7%hX^OFljuDT zA+xL8+4%pTAlnAy!vlUk3z0{#U5I>qWca%%`ZN*Y3=9jblC3H;JxRj_6Y_@(%{$l3 zL$snZirF7Y?1!OqVIl}^qfZl${6V{Bvp)igKG7c@$iP$QQ)u-^F{I=VFKcD}1+B*Y z!Bg1e55Lk%^ap-=jire$*`j`+yI-%AqfXo_K?H+F3EdYUuYCU*dF7l};gxfX*em-W zLNA6+WwiB55S-){I)5;Gg`J-0m1|o^9DEh>t7o<@BU?acPL0c+V%~#0{^&iJx7{PP`2wa^k*^71}zH_CVxBI=3`C zv0k;6=tN#9%uXyOktQelmCTiOF$v1mQ+#C9b#IkA%k2~MnX7u$G{ zCOy_GH4+_s_+IbgW4__R9-Ypi5-D|2g*F~cM%DO8q{A^e(T9sOG!oO`Dd(E+UxX9q z&S57Gfrv(8*@yi*F&&)b#AJ&T{i>}*C#FFLKH1;Ubk0^1b|P(N$cY)OmGw4SjXTk! zgeE8QZYFU$Z&5#6Z{tT=#B@KFbCc_0A#&a-zrL#7@;vq7#G4Dzg(?m4uzxjx;&3fwi)3 zN2_rswkRQ-SUrGjN?G5=f;-jEX2EZ~CSr4^uZgY)T!TneHWm2EQB{*iWVfo#?K)Vk z)?Loj4@C90>ZPq7y{#Y%>N>bOR$g&&u`1w2GZ}pGq1uK5^72OP_{htPyU5FD?SPjb zp2c3C2N8Ms$=wQVy_^nC@^ZGt%YM~XqLR3Z`+V2M>nxn)-JRfcXYE7njGEA0*j-mQ|1xvNK$#-(VZqocPRpHx|_)iM|bMY z=_5L-H>Z#2cCK#k=pGct7macn&ToCe!}(9|k(a$Mz{?*^XD|N_A{x$n|EbW{%P#bT zysTNgtU+$wNF}R2o4uT&B;3_(q{++l!Y#C#bq!jNdpTVROL3Zk(kWW4W4D zbQing2PD^ezbfK(%UR8Ev5y7DST1IPF_yht-QL9k6vka#O)g%B%Lue$On@JqYySQm zTpTQ97kk*XL+f|-@8Wt8l8b#77q_W~5(jcnS!Q-|lag>(TaZ@kGHYd>iq_*UZd5{( zi|yD6Nz&ZjZ^u0VU){gG^Ja zE>+PvdpQg60v>6ongw^tr7En*TwPp@ODCLP-^z-(7%VlL^qM{v)YU7295B;F*uq+B zEcmwP+v9-eHyrXHRQC9s4?W39yS%%|_?Oi$YR z8OP@Kw<$J1{tdC&eIdu@W{4;@pS{(8Y>Gimv1#Dg;QFPyy!b#P=hsJB(U>s%FAT)3t7%$Ezh zm01#+k0>-QRRy6bHiae~LWE``z2lE!9iK_bO4}5kG#1#0r&txrKv!uFkB=)E;mKx! z5gv^NMtCx~dOSP<&aV%$q7j~Qy`~->zYE^)Hb19#{s=zcW2?A4Y3QQ}6 z6qrU}LSUMdwka?zEU*tuk1FKAbgDE5Cd!qJz;v*{2uv3XjKH*U^>|>C4=307*QY7O z+NdvR^pXm!6L+e+B3M@Ix>Zd}U|g(~7?=%i2Nqb0&A|^jHrsIr!MUcV6|p(;e2&di z5K(N7VYH1+2G}V!&55zeIz`13^M%?mhb0{q;O91V7zn69%u&(tqJRQH@0diZ8;ezb z&Y(v09SZ*SK2uGd(ohslr2%C3zKO32{}s5Em1Svek_ zjpZ!B-5Ndst*>T*5gtER2QAYzaejRZD;nWx)NAVVrd|mw;b~^A>2wpw-+=|6I)U%> zQEcXYz_B?U_dA?x@*hWRDm9MHDG;G!sVi`02v~p%8>2eZ?H$y2{k{#Xd`P*J?$+fr zvijT%jF(kz4+8QWnu04+>ROcnDg4XpxRr&=3a)kTHnq(8*STHF5B}+H9|fmfDMRdM z@jAI44N0ReY0?wTdZI;7wCjluJ<+Kr__PB&yg5dKw{S@CW&sH~)~(Z5)^++!UgzeK z$HX_25H6mbCmf!bm&rC{r{lD+$^X~`p+;h%7=iYm^yF7PhK)`6HR?8D4 zK?oTQlnIgO)$z?P?;x%WxNri=l^pNM!ZjNc1!y^@Wkn)h*Rg;YZb;L+vKTE= z$Zel`dscDmG5Yfm{dt`JJV1Y*q(3_ln23SK3~J&{?E>%Da122!>X+z+@Y+ zui=WoiXri4s1#*(2=cOSwBargJY1__9&!X>366I{q#8^Z&ej+cB{K!NEb^nm7=@tn8#k-Z%qL&i7@|$w}*RDxbI0aMl>~o zGAwcTpwtQ^(7J1kAx0J$V^|QAjIphp1_c*%tuoHFu=40;*B0}PF;W`MikQ54(t^mF zCnJcwc}9iZH4nWQffsCa_*t+_m@rN=PmU40nTK8ppv#lZ(^eiQ+w8>7oNROJ@5na2 zBe2aYv&1$(0E%q$)^GW_N89)ynv*Bm)k%r2Rcs|&;TbsWVQ#vsJYKj^C>3fV$WK}$ z6uyV2b2KE2ZRI`CD9p9F0tgcBn##{LV5$bzc}XH7h)J(mC%tq2gqNxfELmT`539TG zz;2jSay72@Y7B3WD(QesQVID}UL|=KZRWn(t^zgaa>?en zU^n;RiE+~XlGx@!M)I|i`=OD|-2!6;BWL)0y<`uUEc#H7QY3gb@Q=%orN=QR(6C0) z_u{n|-icv-5SC$WmEn|m|C?bYA(Mth!^;oL*_z=#Ie`n9w{aV{S7_`ZsZg+3A7u;- z+{fmVFi8VRiWtUolCej)c0pXG1TiTt-Eb`0k1QimnB$5fenOb?QJ6Kcwi+Bau@RZ% z5@W*dMqw$7j%}>qXF(J?g2*q{J#HsZt5n7Lq}J|H7$w^*z|jEN=4(61Hji$BZCZ{N z+mrxBQP}y=C%aq_qRBQ6dR%CmI5+789%LEVMPc^KJEC8x1%_#03=A{q8ph%KE3u8u zOp3`>CbClm2x$xThd5I8R3ge%VX$r)`No(aCY_?X21^Q&)gor=VT_nnz2819ZJY4|G4pcG<9Yfp)*FdKvi_h)>T!ERCOmdKsu~+5Pu_va0ANE~$#h0b9TtQcIp@F;x=>{PX|4D<*TrIXSF4glIj2XXaFv^HMXs`nW)!?S` zA)Q@1v3n*ZRzXw6YkxWnC7ySrDDe2ey*VX_P42tXF+t>`dPLZDYo3p4-sfgPgrdZCGeyz&0)-(@nIg~K_5&Nrv#dks+6ifN1Lrq&S?mlJp`q9Y-shlI?!h?MbiA!> zI@)MslUTvkaw67Xu+{Y&_o3WpC;*;A z^*30u-eA)yH}bYr!%mg!&{7HoWC~~M3qoq6`|e6ya#4fbnO>*Z@YH z*|{WIT{Z56E_hRRB{s^W_>)tl_`5b!%UFlxP(3#=Lo9Fd_xO*vXk6iM|gs(U{|b<#NfgarDF z4;+CV2;Qkr{R|HdtXUR{JFXH*z=#EjBqL@8{{qrj3YN?$h`F{1ayF$f!Q5(?xM7Bj zG3jv`(H9Yon`DB;hz%qAX(&8x7}=ML$r?pm8_n&4A-$t#o6JMl=*L(!vK=s!P4>j2 zVzLdtB9py&8wr5Ps8hL2Kup#L8q_#7i+3Zeed)6EF_VF~xdJ*Sv(c(fEJTLEjn@Ku z{2aC?d(aPWNN~}?3XV^(A8^WUVb8#*(Q$~tRcdlqR{eK{kuK)Cao|kt69(6SZ5n^7 zz5+9>PN&v|H9i3+<(25bOH;Ja&psa#X>KGMix3+o)#Z_wopVZ zM5|nApLW%gj=h3xDO_51_9CeZ-w_kh7z9C9+F*x;$Oeps3Wv~pnDuV@)e|TM2Wu_` z1yIOtKxYg+ECnphdE5|@HcZekV}@xqj3b3!J08S#z(_GGbXZ}83zIdPeONR){7cg4 z&SarRU#b?3t_O`Y`a0fg@Nh}rDD2VaW2#Zw5mDMAjf!UJ4srfKk-ktJ3Vk1{xR-vw z1=uw`<97Qb!8ZP60PMY8m4>yC4)#Ov1s-BPES%uOR0o4aE`Ae$y^VDO zKax6fBOBD0nJOB00_%<1gYkj-JX6V%B>z&AAEARhcnYn(*dR{eY@_jss7OsJ-)SZl z6M~0W(Oa;Jy`4bVSW5*>-A1K9QIm%;&GDXKBKlbIG-*;D>7Q8D3GBm_aPlaIhax&4 z!+W6c&c=Z|SVSG-i%#GfHY{p(qit*vq{rU(1&ySG;StxP+_h01&{iSa-2^a7EI8hW zjnSv0ps#+gTY665Vq+ZSVSwVO{#F{r!w67fO6f34DYp)a1OZwdk}BRar3$Y!fF^f` z@o-A&o~hyp06{9fj6F|hsC43rASDTQwn_{eK%SrU{la>mFr%OY?Qsi|DCm+|NWj@9Y4bhxM zr*H02Qx6Nl_Mt(nkQfxi|M;jW$?fS;Qx-ZP6*XaFPAV$L@Qc?@-vG^YP7}?1Su|31 z?$1~=dpv3yg-q%(9Wja)|s+?1XegXrd51q zrU>k$#{+OULVA1_FM^8KK7RxB_>D@@;~)9mkW+T3Jol(aA7qjq$(~g%iVPXKV@sl#wsYa`OLE5rUX%V1_psS6?ixMO#Y0zPiouQoNUNC7%7JC<}xHWECGh85W{S3 z7RtuBJQEH4gyo}L0o&+^6!-uqe^qCQ>)~?-QXd;u5x8+s5c$Kh9!998OSzVu)g(c1 zEj^(T^M7$jK$dYzBB|&&p1ph{R+SSamvE-+@qyOA(Jd!G1<~v$GH&k|PGs$q~b~p|@_;Lq-s`VV?Y|$LCO-6dve!7$c21 zLUp&#TPI9-p9(LM8u{&Wj%%2CVBh8fMVF$stLU66`ZxE9qWkf>rg-f+KY*eiJyaBZ zDNu0dvOnF$&pjzRaP~H)ZS+e|;G3L+nw}O1r&~}^U5`5KHm(h?N5D~6GN2|Zm=#fj z^#Mf|>Q9KOXVa?L3B1XMcF#N-y&G8!>h-DIHXz6x^rO8RS+Yuk2Yi}3h`JswIDv@u zp@(}4N|92g38jlRCqO%jKF}EYjG}NH0k=3%h$TJ}mIYQK^`Z^`vn&h+ifK8L@|09|6I2!4%X(S^a1fDAxBGAs5W7 zhYOzYO>x10|AaMHHea55a>0#h$RsV7PLB1!W$eCi8)~O;R!ngx^r+0wMw5)51%cdX z3{Ti=v!{gZl)t|+&V<6FvW#H%bX1lTl1088mH8nO(+;iIHac9EqcR_t5wIPi!p%j3 z$RCxJ3L+ot6D*&^s-iX4$KXGS3e<+8<)|#JihdGXds6hqJ4w-tz7IveI8_w=J)qF1 zDX(tj=Wa)3*G5)l>_|5R)(6AlQTKsZCr{23;KLFU4-PG1$i9U zaAw%U=?o1EOO4JcJ6RBRHz}s#*b(Px2#2(U1AZBa3*e|g0W$GfY%Dh8up(KGepj4^ zaijEWs`L}JCB`An$MJ*h0FV^nwEBOWWpuMAV71Y~1<)nVQAkS`Em#Oktb-&e2nESm z&U)J+uh(@vNRs|y>vc;6jLs$Q-5c~p#{Xu9kdKjx=Ufk23=xeGt59)n#dM(I@@5;UDc&$M!-P!I|u-`o zDIEP)NhfhHFc7R_NRybiK%siLSb}<^Qg6LR1WZJ}4HbC5CY*3zI3O`l1Yy@I3|_C1 zlMqbg43pDJev@MvIVGj!9FxbC{FIT0m7HdBM#(87Pk<~G?bV$|p;??M8%G`DgN1udssqQ}L4Wuv5ba>e5jNQEF*$Pr7IPprvST8Zt`*5#FkyD7#Ca>I;Tfp^CwDrT5wE69jI;w*(OJx%?3j{ZDDe~@;X zO!J0*NP+YGI#v(FvwC3Z1{88Dd=fziq7wP}`OrU}Lgn#FeWxIl3huGRHI&9Bls@tJ zse}Dij-R@@?9{!FU{x1Ju4bpQyJJ}~VcnlOo!7>c#jf9Js37So7@7W3L+^8q|ukg-dkZR6#@+X@!->%vajvHk_lh zZyU`=e9~yC(vBAz<`e1?$j}#h>{D_LlO69-CZYiyKtO9{xvp1%%ET)15foOhBdm23 zKcXSXkv3fbBtE+K>L?RgXeA}IP zC;)M%Q^c&dNpXFC=5vS>ouoNwz3hkq$;=dIse71*rec>y;q=C43a87y!_B7jp6M0F5T zm~u#I=mO3(C2elwtcuPHIV$A9*(8EJ%bBv4%aAX5UKUT5ptX+F2dROqOFl;b!!eyH zrwjW6oYI2C$Blm^HST{L5ir7fy2TuOf~Z0WxP++r%AfMo16^v|Mb=}}IJ>y19`ip0 z?!PxxVR3YU6qz~2aZ8(wr?Dv`U%KTs@}-0OxC{6KqahwRRs(}nz_-d`b{5o@@*YKD zH!mn0n<)ybL_uvYZ&noYyr6LAfkN)euZV}vK#Qc0t8e9}P|*@5HeqmF8IFiWKQYn6 zR@$0l9Y8_*1fp~kEZTF&2IH9T=P#2d)$cuY3j|Hq9e+D@28($BQ`Qjx{ap+%#lsdV z^!|I{7<}#8VXz}y9wR>=5hGnFh=@|hGM|LWg&)Bijr%Lp}`ogVXcE9s16~=+&g&m zODS3KfGbd+Q>+mF?h<^&CdijvB)cVhvQVCIDRIc*!*r}Zn#RcW+|~4=yTtRpc?)^o z^$Aiu)&j%oHc01MGW-4i;f(+Kk~rg!kSkaPdr^UWkbIRepX`mZi>FQe@7)oib%<2p zQRlPs`Q9b7=uHMH-8-s2TEsV%7Cr`K(?6lfMLQ^n(Swr2i1=X&*o8abUWt@C`0WgG^>eF*lt<|1J$;` zs?DRMU7`Z_a(BO=$=BI9rhefR_yw)T`D`(fCYOMJU=5BF9r(rl|QQTk!bw+us>fibTjZrNFUh6z|5`szAlEg1D}>gtqjR2Al;9j1#c zrrM08B*Ff-w+V_@&R#=ZnJ2%Pfdjr?>M z5jMZjJe8kga%!hivD14n$QwMx6nv~AD|W#*uY8I`E~JoIUmhiYCesWt7P(zEz`*Dp z5*cJKw&d1vNPtCY7Y_0uuqYIqwTzeu-3_`|ZjgI~)SLgv(TK3S+tBs4#x7Vs4_Ons zNyIXj1*isWS#8*wGvs7N0aiY-Sz+7?x}|Y9FzykWd%pyFVu8Dv_Xb|+PxCImp3J-c5;boYf^#=H zV&0QL!-&dmAL8eFduzC7^OmZ4E5y8Xv`XfE59WQ5okQ{zWjPH9+i5u9WX(yq@Hf}d ziW?WXOcxq0cl)@ini)pdJ2@k!4_BR|hWWUyJA{C}iqA*Qu?=TChO{ch)H|dcon1Uybe; zqf>swZ7hmZxi?qA_F9+~T_Y{RW}AazL^ARE@=`$_zFYKaoKWZqzE z4%MQFLm{s(pD+;`knVoI*Nz#Gc+DZykT@qbt`RX3lB(4yGRZ#cfd;L6Dvg(A!j3b2 zS#bubn0*_FO#O~R!CDz>18c?A`yx6hqSc3MGZ-9l5J?6 z)F!N6eU@D;B4*RUJZ^vnsZ!Y@LZUF0^D4TC{6-#yl3m)xS$L1ggm&~uk{6AY)zU)X zNO{)r6H79pVn7@&5QP0S^^%$^l0ML}3##DNg0|H}-@>T}?~*_;wlN-?<9$t1edTTZ z)MovDur0mnMh4%!xXhNcFo>tu@|Dd<&e9^arefZE#9H7p2=|C|VN%C061 zdR}>{6rec%-5l6Wb+V;ADcp6dnA-_l#Lq^|Dfqn+l$XpYuK0_nMA9YB07_wl4e}k6 zJQmJuq@mM@LAGMjtN+S-RAu`%CF5M5-}2XW7Hul^p8u=cYx-h=`VVgdE`{Ixg)Le73%sFkt;7{gLAnifK$g zlg}!C3WuTmcoF=sc9%y1P_t8yPGxNMr>7#Q-Z(gy6ImS-6As1lp4D$o<;hZq*4a4sPg^6ROJ_v7mnf)>#3s``1dMA>TCE2@9@>PW7Z}>l zXb(@_&J^trHh~6uq|$U;)2{fjxP3fV>lwb~Nu}#Q)}s{4oRDpIBCh zLdsrJ%~bwH>QTOwS&+2Qgwp~%@IG0(wY}V3hVVE!gYY5>B^>_P8bwBnWFzB4K@5a~ zm<$CmHVR^76vSUp80A5rFk%Hq3bcadLrFf!z|0vsPx;Q{*-A>uz*HF8dfG8#Cte=QW*6{v=iF8i^p&8+!=}Fg=Cxj1&gp>@j zpkW=$W_P@4p~19}Njakj@@x?m_zqK@I(as_>ovT{V}68OoMhrO2r@fV=EWj&HqF&= z?+Bw2Z&4Je_5|0CYwgpl2bA`RoMCdelEWs9zuSWnC012RJIrX^jE+ehdB0|834OLA z^3eX)kOqbw4>;a`1H*dru^jdUF#Mk822v-*JvJU#;%z8M-%*g>a?ntIpk-@u z6YkejEBVlAEIZ=6G)R6Y=B`m>%K@xRne@yK)6eDonssv5nsAOTvLa{ZOefe>cJ6gw^lLRf?#gh{R&!qVCvLU>R^xIsdg zPQ)mL5z6@x{w-@8A>2dGu6NG*G=w)XQ9~H!!qA4;(_v295>R*!6@(}5hO)LO^tgxg zT?Yk zb%V@@9t=|7G2h{ch8u9oHVO%ASS8_>B9ky4M4&UJSA^ioRtFk`?-CV0f_LLIZeB^y z8U!=IsHtd3RWwe*LE2KD5*@)tGBCKc)S1Hb1L|OtDRuZ>AH*kB$TQqSbSJ__9+pPj zt5#E96FR>f!hDnxHY}LAz^@#!N)!OGBO!x@wP0{nlKO1Ipp8;b@PBL$h+S;hI( zMAC^241Ws~W^|xrQL)>;;6|*sC@-}3QeFsjfQ#nwanb9R@*EXl5Ue=`wW&O#sH@7y zP|98KZ^;XX_7bmCcKI6SKwcm+FfIr3f(SugAh~Ea1G=^5Oq$v$9ybnaUWn~SwcV5Q z_s}E9LfFn;DC>~Uv2DPWe(_7EZUFv^5haq4grq_3VfJC&@$o90ftcnLH;7(95Ag2f#Z-|b{uvA zRxe81b;FOEgFLW3I8#cUsd;y2DyDfuUOJ8zx=AVfFMs|_mlg#ca&KBZMBi6ca9!A@ z$O=PZR`*IU);dO-;4Y%F>oXoROV&skD!BF=Gj!StDW(4gD&yCg@LiMdvqI2nv;R=< z{YJ_eN%Ii7D>-MucEqtxjac0x!#IZVkUWIk1clH9zw@V;kh3u{P+Hlqhdkz2ty~FN z{eR^sU;2kQ$_{?_=1e(|p8sDRWsGX7Uluybq+~;TgljYEA02uBkVOd26aGOP30riG zp(5uIT3N_TJE%><7!KGWD#q(X(^j)#$PCCX_hu*gjw7Ce{AI?8y9}o19>b`)+{9zs zCG?|7d>JM_miHv z<|t6)NE0GtJ8vm~;A}L3fozlY1y@cBKQ0bZ0k=*5iU#;14Adc3-6o3C z1A?Id@uCBwkX%L7Hd&7`Dk&(wK;tf#@NR%4aD_f;0yiO5D1KxTT>#Ba4sp$4P%7bQ ziVK*ec?zdfygqKA(VIdp0cRGRO~0pflcsd@8%j4%;y8gkXCvP2;rC1yanqP*9CC`x z+u{^`{Nm4ACEAmqa^RLLh^Z0F59W5$!Zvm& zTAkwXs_@w8XgC`g>kh&218qT@YXDDc|7 zxR>sJL&61Pr1gGXkgK5=qf%|V{tOp-Ak&-^s1!+hQb@+fvJwM_5p*s`@<6|6KoI)^ z#CreM!z!x#Ge03d#p3A$2G~Y6GxHFmz$o)STI>)bc<&ePfIM-KQo(9Yd9>NM*84Hn z17icn4JyXTE}IyQmpKt`CniDVO$b^(HiI{MtY8d6W-73K;IrwF5-a;j`szj%+^CGN;xnV9n{E{O{{?c5+k4>T1Fwp!ch=cLV;Za z(;08D?x%@u2mN`F{_s|hzjr~8Ssg58Sv9x?JN46bf$U6e9v7)s`;XIPpu zRh~GpXn>UM<#CpRxA0L)G!(X&VHoFl-=t*&>_;Iwo4;8E`weLoLqmaB(#$fbEcf$D z1GV`(O0rBF5?XIL9FzuUS-#PGD%K+;1ARxcNvX$a8knnM)jVkR(p%sMmkOpamaY^hZ75!yna06~wDDIMzw&wV8H^M?${91xe z7?57MB7#F=5g3jnjtHVl6Zvqmg^`65)seW@t;o299gf+gK${fzViE-|&Yd{8^@O#; z>T8(Vat`&zs2+Mk?|V1M+7HkRgyPRZBQz$Tn9?~0#mKx>6eGVpjZBHvXpoz*(75E~M!~J2Al#NdJ=w<*;nZ#BB?^D*5N;4P%7>e{BOqb2<8^iJLR%(d`!T{hsw0;20LTs@8I6dw^(1sgv0-iJmIURqg(P^6W=$CVLS zqwK8cj30ycu8}6>%><1~)a@wOhHe(Uy*vw{Xxt9s9Pf98V&RK!jj&+oQAA$MZ+j7c zg7*H|7;+*CSxy;>jUmb{WEl;C8KwWgIx%FNIi);jBM-7-N~PD{M+I$(2)!N`2Jd#E z%+__tgrYwftC=;sgK`h4*@C2oTS(^a{t_p1N~!!Ns(UBm6N84lYq5=N0!{ zjnaw86cZp1rA)WLd5*( z13WM9fLHXi##@SoxEo(w~^p-r=PPl2BGzC0v`8JXKaIQ=YVHX;ec} zkee0Mlw^<&u8(A1D*il0v#5?|Xu13|4lN6^^u zNYgNijWD8B{)L`nKnr-)Y&Z0sDPOd%Asa$qgVe?`k;DU?10b3u*vBwRyf@`47N$bM zQ4nDfukyiG83j1qr8V~ybUJO)^G`r@&58cEWj}wK6dPP=0{dxDq5{}*9vJB)3SvDJ zblSIf9l(gfP~g+b?^2DM)g5KHdPGqS*aa-ga=uaBCn6DUN z6UFZ4Oud59Sok$F0y4VEysbdH$*xp~I88*zEl4;OW<7MKhdYDA%D9RQOSMhqy4l6L zM(yAg3SZSk_d0~3ZXZEoB_N`<>q#*__s{E1G@_ebw5B|-%1X5IE5@5-UR-V}<;H0A zT6G6k#R03R4bmp8ok6X#McR?-)+Vg*+ei=*PO3VQEcc5k~M22QaMs*La$=pezVd`hY<>n`D>;%QpbjcN@CC$A_9lYJS5Iy_(RJV9R(oDV%k+sUibr%KylXq(HcxU z0Z85n%YGebX_r?+5W<}RHfaShD==bt6vQ)75HD(a5YdoB=5NfQ0APVPf+>ZvWf9&N z7Oy>i9_fy>z{*58j7Y(v1&NgGo;&n8Nu*D=6N3||lBZCCu=fk??v&DPzk>qvGvgkRW#|ON=3jX1E1$45#uV zQ4*ZfC>a&?hESH$PM5l_=;w_gZ45c3)LYvP%pgAKRNifJXmyADr?qc4IhqIY+XG5j zZ9xsi@sZ2`S2wvk!E6-`xe1w}XQii#PZe}!2I$2K8S{O4q zV=CtmW5D_o!zfjTFBwChG5D0?H3rOOV5m^^d!{AiKcM|U!~H4qyh>|2ye7csp;6#Z zJJW{{UnfX1lh_~mK+KH-8yIx1!~$^2$De*h#+Ag5{UbNcqU|*Ra-Iws1sNdZ{#eWW#!fV4(3KQXNh zX<8dDNNaPJl2A=+DYm+%wQ-KxlEk2gbq`Wfm9mV!9UaJsUaYdip$tJ-j%NV+qve884j3UnKcn6H4$;&R)JKhVd zksvqHqoU3>h8`2ur<9m6M3`Yv(en)LWAqTvGUsB!g6u)(Gko~NTQz;rLeVb9;Wdt# z1X!^E3aoJO^T`rRk`<54o~WP+0E;L@n&zV|e2R!jh}EqID<=hV%*1d(E*iC51ZkD$aWy9}U8+OdPTq9GV!zg$^#11`}9 z3Zh{YM4>1+qMvPcDR`Tj4Wu5H+=OrLz`TjwllwIupX%fg^!_eJ(f;gF)Er#6Xdf|gwYg#Guxk0I8*dOAP%6!szkVNWs<_7kiUX~~(ipQ4@6y=jCh zomq`a{Nt_$zRd?;=7U@?f#t-#V;t5_ov)p{nn*E>)kG5hgbH*=$?;Y*)d{@aMz!Dy z6yqq!y_$UL=+l7ODfRSdNtOjNV#oX8Vr~iAq+FnIt)IOy=Z45D1Munn(XAC23 z7clshGHR3wqXd<5yHQ4s5>d(%&D^Wr@*bl^nSz`l1;=}?^`jJVWiu_BZBP-7M(<#{ zph1r*eHPOx2{8hi?B)SAEB#QT3!*Ujbf8K>^1<}XJeGy1J3J81Cj`lWWnDt)2zw>t z5PJesAs9J>Df%>x9|Aps)o+d>Op$RqRw$(cr#}3l^$(0iX#$WYF+%w{bD$xgR;Tq1 zYVTp?@H2P|tsE|0K)Ix62K5E`yN?^h%ArRJ__T@?aNQb(+|3V53ON~U2%o?m^Z6-M zAgsP)5|Bbj<|nNj?#^oFNaa@!b+__R z-(*~pOT?;<_iAHsXI(M8W_T%qt11Pn<< z2aUna4#P@0#2A9y!ib{3WDGqXZF^KHUSo(bLrT%_EuwlbzmL&rpxvbI42^j|1)KNU2Y&HNRq%= z8jpt<_M!oyAeur!l!<~U8wK6aAO#t_SO_FJJ={Y=*bMzqLRi*731LwUs~0;LZWjq5 zD+OGikpkX>qLBOU4oL_{gN+ixbtm&vsGJa_J`#dRKtdpypO_FP5Ye=hNEal8S>Gn1 zA4>=hdwoe_94vG$O9{bqz-|d)f97=p@19AO+=PJd+hzh57b$inB>x^1C}8Cbqf}z5 z?qX)7brvJ+O_rpHC~(9gM;1P1xkcJS;vkxA5-OCo&iX+yLS$KD_?3K~ktrgGEPIHc zk{6j|3Jbha7qmAfXiX{;?CK3ln=Q10oIr-7oKS5PH~7_7UZ2VHu_(2ix5OCSoFMLj z-(lpPBy{MWVT@}dl`+K!iDf(_hH#6E%^zGL081%)I zQl+dnhEhiR6rC`JK4Yj*$|_^%W(L2a+YBw4GYIq^GYC!kShDiqG;fGHffWU!Ao@Z< z!&uKwIQI}cpAT3T;XR6bPO)1m5xr>Q80WEo-#s!A{UG2)9TfRI9u#D}D98v=pfPby z5gP#GW)LwJFk(*>dIlq&_l;NI(W5nV*+>Kr(DnE`6x43_0ow(=7RB+2rybLY1%Y4#rCAWme7et9BON(xnh;@D=B*S@dIiet&NjB)w zI?q!b{!#0P?xz0t&EWXN*v z;JwPwnml+hj&+8ivr=2qFv&T`C~i(6l@O)TC@JGfDrK%v#f z3L6k`6wJ7FS43lrEugpSoY3$UO57@Hz}z5o$d-hP6;$N)6D@n}wh^s=KtyNwT{LZ6 z7Vw*GT%8k9XhsSPXq62ri~#mgL&h0QTIC@t^l)JhH}9Uqp$284&2uRWo&SGn40w;6 z=K9D&DJe9Sm*yV(m1LePP!%Jt+<6>7K>}nop$Or1_I!iALbFYVvklIT`glc1*Vl2D zBd1?{TfK|Fz$4+4Jd;Bcc&UZO9P-LmKag^z2RU4h&h+b2yZ2@z*o6d;$1woSMSwbl zPDf&T9A+OT*7GaUIkatJ_zaCOLxyRV0!(HYJ=(%m%pz?(Zgu4PjZSZR)&@?iH){3t zcniU77(H9VLfM)bwnEYhyrrdqxO-#W(PF`Eb$V>U-N%jYb{*@5Q^ops%pvP{R#5+8 z{ft>ZEd^W{Kq2?X?cxBJqc%Cf)3f<0RQ3U>4<8T-pWp)#^?@vW0A{4)FPMLk+<(BS zc93ljd#Ab23+YTzj4wtfTLVFsMXT_BRHOMP%6y=VVbC`J;EXaHLD|KFH5oyt|yyInzyVb}^J>BF`Gh=3slr`gSgeFXm$C}Z_ z#2AF)Vy=*(QL8s@g;6oBy}U;=?lx(}n$i6WePvqy+pu@d7pvcOELpwv5YojbTm6}P z#Oed6O;-QQG5q`=TRo;$&vE37#j%3OQ9w6?Cblg}G??{!SRoqNeWo4B7toAcRf91l zX#g`h)CYwF75OB9tS$v?wnTF{0WwUf6ez#bMa^D&3x=Dg#yw>6g4UG=!$b_DF0j75 z$hdOS6z)@7!DDTzo#DSm>M(&Z6DV(n(VuR^#I4Y51$i-zIvE?5t~n=v1;O9HC076C zEVBBU<^R3a|2isGzZSL0>Tg8;cUF(9)yF>});rAFgWUN~iuDdw8e(0tJ&a9$KtbOv z0`T!$S09`gP=y>Lp9b7aSSo6gIUr|T-Da_2)8e?1l2#b8LbFvKGfabFqE-l+9KRG~ z3X2PwZjxd9V%$SkHz@`3!*Tq-tvn-D3f_stM8ck4jzo+!YFt6aG`&gj?_Mk0g+m9L z^Y6k7(Bien9>ku2G{SoOY?mYU`HzqhE&}&c_O^$Hn z^(WF&qKECv8x2Gywu@x+K}JG@x+0*j{KY=UC%Z{(o<$KhN1);)qc>Z<2{VAlFdbGX zvO=j9k|xw=)(RSF&`5fMR4^s?2}!KqAPi#t5o3x8mW+-Onaqe4hOD07FcntV-N$)xW$=Y<(SSQ~19b`cJmr^Kvh#Cid)4 z{F9UZFld(ahuEN)@+G}%(jT>Pj!5A@C;gOF%$m~1rC^Q)4SRV123N}oDWCLvjC;bk z(}syl!9B{v=kyKZCjGSd1s03Om9fUhtdO$8pw-by8=s7j(?@u(NluxgC0z_s8oP<> zXld)}C>M5H;C+bG0Sfhp@b`;#Ml{J+HNNq$%AR8AcEzq9(NTD^#^zVNZa zMIOcU2wR?Z^00V>%~6o}d3-vT-6;)uHiB^sqbEghMZ@Sx5n@TqMgD}vh?z`Jiy+kOn=w+( z3RyF>o+x2uV$yY$fD3q5xztEST-eRx`yDS9e_|$Ce4nrV_ZI(fL@a(MYEzu=BhUZw z;%-bW?tFs9(}fn71DM?{PRA;g+cT3a-p6SPQ7fx`-F;`+bL5Z)C|cChvW?FTuqlqR z3yle@ySc`3FIz^=hEO@eV27wP3z7Wl7`AH`lo(R?*8EBYw4_LtJw4VKQgya&({;lw zM_??zN9x0VRv59uuoPzVR(>{b<@pR|H;Wz_6^nie9FpL@%K&bsxmv+{5MZs1SB!!(=6*^0!a zzr&zwaQAaf_o0^ljzWid`;euq9>WY9CT?!uXQUA$#f&uQVkG1d(}o$BI^qmbA={4( z&~^{6SDOvnEOj^7$1OM57uM+~tczpzO@k;Tr3GM&Yfw6f@9ky`jyswSlab1Q!HkQZ z#5U>Ig`g0VDwtcP$|n83k)~&9IYwVii=W9{;9Yo}*!Q66WZ&9Swr>-^fg>xQu~n@6 zIgl}?sjUHiij}!qp{)x(8ts`v73oJ5Pwo=$%ucS1>VV};0)El-10@mmXSSVj%gV1-gHVAU5lF4tcitJ7^HbrU%> z^9dG9E=~|lFCx{_Z)xU_z+R4sneX(InSK05oXz~k9b)ES%l14q%67Ury5|19P=8J{#3y=aZGf+3 zo8u=DeY{d|5`+9KIkkb1ves}CNkJxt`ROD^6;3IfR(MR|jKW!kJ#7DyL=iuogm`61 zqEum@(km49D;!ifs&IqCF@>8I?oc?caJRxe3J)qgq;OKHD;!ifqHt8<28Ck^H!Iwsa9rVTg?kk4Q+P<>q{71r zk0?B|NVK0SC74|7yp|D@!pu!P_ zqY5`D98)nbUFdtMopl4=S8g zcv#^Pg+~=mDV$b#OyP{eS%q^7k1IT(u!j%QFn{n9^M}Hv3i}kUP&lY?MB%8y4GPB; zZdSNM;kd%x3il}7r|_V{LkcGq9#(in;ZcQC3XdtAQ8=gYxWXPjvcUNGiSa2c=SogO zj=Hc^Rk|ESAzl@ZX#J?d4GPOqh?9`h6XaW^%Xv#lqFdn}t>35ckitoYhZP=CcvRt( z!fA!a6wWA|RXC^cxWW?(dp^fYx{mFb za8%(2g<}dgE8L-QT;Xnodlc?dcu?UXg_8;oD?FlbO5wD^V+v;!&MKT!cwFHLh2`A> z#>;1q7%xAuepR?aVZXvbg(C__6>d;Crf{>u9SX-4?pC-*;X#Fm6izBUtni4!qY9@K zPAfd7a7N**!a0S<6`oMI==0>q@Lzr+UKOrTIH+($;Rc0c3U??RSGY&vK7|Jr9#S}| z@UX%o3XdwBR(MR|jKW!ka|(|uJfX0sSmTkO7>~lG3i}lHD;!ifqHt8<28Ck^H!Iws za9rVTg?kk4Q+QC}A%&9)4=X&P@TkIRg~t@mD4bO|r|`JK6AF7A9WOsIUWH2)_9f)qKKbZpD8S-8dz^D98`K#;Rc1974A^DTj3ss2NfPtcv#^Pg;NTr70xJ}Rd^iF z=uCXNQu5eFIu@h+HKFt(Ib>TW=O^$JhLP6WoYZl zqH6jrILF%zXxD)NiVuWF9d84{d*xg>La_H`7xoi;;!7^DOndDBlw`_T{uPXd(XJ=2*Kk|yKs`=SD$j>L4yDEqzm^D9Q&gS z#|hr&5f^SI_^)XfZXo!^2V6Kp@IcCi{RDq%y9@gW{_4+N*dh3iyIj~q@SR&-c>Jq? z*Z$Cjvjn%@?!sdPf9e(&PBDD53y%=|_y!kF5`5bYE<8x^aYHWLL-5zvyKtP~69!$l znc%&ya^VJouUPBC5rUJwF6<}x#w%RdNAQ*&7j_7)zs!X_1b_b$7aqsE$6e=K*Ca?!pZO zzufA=5rR{TUD!|Xf<-RuBlztzUDzQw(&WM(f-hORq^j;KPo0;RwMG zM_t%YaQR#p_7U7Y$Auk&e}AkCdkFR&T&V^G1KYNr5 zj}W}%NEc2L{6^4)2MIoZh70!)e9&|kjuZSytqV63++E|s4Fn&Y&xa9$cTRKZeuAH^ zbYUOCS-%TA1mAN6!_mthh$0K0aptV1S!d4r_AGiwe&B46XMVK*-_e1~e9?8s`lB;< zba`|Cy86S9q60_a_}+=me4*>}XY9%WQ+!}A&etK}{w33_Tzp`}GwbwOr_DNb)`C;# zN7uX_j3(ZT_IH(66!(4sr=ZdP52F3!(Sb;5G?9w-&n_=2?%jeJpaA0(_tsCwlot2C zj+5_#I=BNC{0528yZUj(#U=RKR*HsSW zdtJxNIOh$VR~qeqD;FC4@S}MHmqzBTJFQ{fz_&5Pr!eMyFhXE`z(NazdFQ(yepKK8 zk9qyi=XRkOO+2%D`@8{sd&j(WxY{spps5_Jq^^fSB?5SHYeH~8XXaOOKM~HZqIvz# z?mGLUk5KUv2$%!@GnM@+X1@g7bCmf)W_~NTGSB?nt}iq5Wni8Q=0(bUGBaNW=DEsT z$IKt)0(s^acKzYQk6=;U_=pa4N1_8UC%PupAU)lm>M6+ww2FCe9icI(-0M_IJkzy* zv>z|$qy3p(T`H~gCN^?Fg?Oc^cqylLRRhpA) zD3s=qv~3^ANQ*u$?O>HgqylOCskEZprwXMNk+cOWt>WX-p1ex*Mx+91zhd;ow5G)8mtaD~9hz@xFaiq_K02)|S3KL);`x588`gLa&4Mqo6mDcya zlI!JuUKBx`Hbe)`Q3p7Q+q{p}xPp@7QO+40BRp0+IvOu(dzw%r)w-+7Que|FkX!9_P z3Lc!UdaS^pO9tx?{UCZd{02=tj{>)GhE&~Il`5zjUAL$R`Mx7a)~Ua*p;dE%z7q9)!$2um8g+CBJua_0*v?6UC%f zRH`Vx^0Sn$*G%kH+)HotIJ3W6oY=!qXzx#X=B+!_Ab?t4{p;vVd`hOc_fFKQAGkzhy#QHH zK~{0^C8U^v)#$=2xo=4qmL*cfeU~wwl01wO?S~EqPK`#_A$#{@CVRT-z1+b-)(eY?f^{o zxkc3RHUEb3kh_boq&Lw3VYxLlyu>raU7Yw4p;4pzp}k9Cy19O`5t2+(d5nB!5Or00 z8%bXT=|96+Wo|D>M}DGcU57cp>apAlSE9ZC9n>>FIX1M7Yl$!)S@?UbMM4fNDEIIB z1A=5$@z3@y@9Qn^K@-%MU07?o9fqsj0laiLKz-y6`->BIbM;G$qW$s%PWAo&qOM2# z-^`u4p0qE&3jr^q(a1zsPF+J^; zWmRXZZ_d*8W$nwmeD$4+SGKIYz_XaJtEMgOTztgxmSyc8|1^Ig?!5Mut2$RK_f)hV z>YFUpSM9H=^$_1#t2>#$Wp!7_ij|*Gb^4^Ltt;Xetn56iqsue5p?(r&X=iKu@>T7g zxu?!^`&ifrcd`ndEJRu_3AeO;aeG_)d4)aN9i4A|cZ#)M-@X_!d}pofY+L1PS>EP5 zznyx!id!vgfxEN2l)~;TU(&jJR}3||8-}$moOGOT78*Y3xMO|CbuR6K9VY3+s=FO9 zL}B9>EL*;NFN;QQs2lU^6l5d1$^gsc6IpLyIb4iUF2^0de$TH;S(XyRYSfKccU6kkw;la zq9@Oq-QEg&l2Ziy0S$)voo6k_=uTO&x~p^fS+2-cj4lX=LWGH&w>-WYu5e7{aVu7$ zK~LK;p4H3oI|2Ug8h^`-s#-sls%xwKZCvs%uAVM9|Ki0<+J#y(qjiatTHAvGsn^;P z3`(gju%t>#?NxymsW&4qeTJ0UT9+s;Sktyx>Mg0Qn$D#ve|1}pl&Y#``lVFu4@kXg z$dGz9)#w&et7itPMP7}+s$JTsstL4esdjomnFQMFa1XGMt>Y6AZ1d@riF|1f2H z0geYyGkr!aJi>T+1T{1Kt@&{xw^Oq-S_*MIhMHjY^n!Xkh??NywgMcFqGo1bMt-bS zGK`r^{CUMy$v74Vs;b?-phWGq2HINlI2lJ6Q83R`aN8{q0bw%f+Lrt*%*|A89p@s9#w5^ z)y#a05<#_rD#`@fiy9tPEi6GkEe==1qpF?JGBZEY8Xi?`u$5xd>hY**XSM|j7^BC>W#a7n)1S{?@+uO)A> zS{_Hh-#QZ`H(nkGR8XC7qn5`JsP;jnop4w=ZwQ0xd7ucgh0avi4;wR$kz1S-NyZ zE5xr@?px9V`E7^$x`6In-nz0Ki!sbbT^;Q{l$Ta^buMc+wpE=MwxbdgSGBLiWaL}H zljSPuHD|yhB#Zf4J6e`6Z(r(L*0~BZRBOj)XQJQ z(b?MJ>s;lVdg1CreMe(BovSL3romMlx*JvX=R0H7>UjIg))h-3uzlsU)_5G2qQM-y zV)fECZj4md)y_kyJWI^CVx@1{ini5D+kLb;@GV)nVwrCVnG+CmFNX3-+lV}|uk@Av z&hM&O))Jq0()_L&ix#zZcUM(aRTqwVUhDj>swyaX<)W^YEuCGf=C#h5--17L=FAT) zn%`Bsw0+g8c_rOIUSJ`d2mmW6PdAJ#uyAhi9x@zIxS#;T607wB$<- zec`=NJ}tWb*&cny72h3}dS{0(S$pG+f7&Y%zWSnXee0RtOZB;2@vFmA2ci@h`sb zEa~im2tOn3`dlr~>}C4AI&$1qhkZ4+r91Na%(LHqynl^8zpwbd$X<_)pLy4V-;I1! zS$ykB3)kxNI>p}iTv}d#}5ACqt`@!z3ja}*-!iQIi&bowBGlnT~Dbz zd%l&r;d=V_L+Q7tJmUG$-yS=0af8C+`YckuipX7mEnmC(PhZyO%*e@)E(`s7?m>~* zoHzfS`sX3~JWlb)M1Jz)or6~l93GifzGLp*71jDYMe+5K!>;^4Pe1yPx59_-yl>Yz zzo^yrY9n7s?uGxp6aH}ez>F=4>%w!!55Do0r-GsN)139IzPK@5wcs0XU-!@nq2*`X zUcBPA=YzRTKl=L(HMfMnz4fBArq-Pv+PU%AoBwv~JHd4?T)p9n$Q6MDf|q|Wc=>JN zUq9FyUht`w(5x+g_{r**KRt87AD(*k{^lD4SM8TL%xEj;7!j7CD(@E zI%vP2T=(d;;cwjj^JflUcb&F7BXs-UZrFU#@F}5=Kb`y2KR?qJl5r9K+h>J(P7B?8 z(DjMG?;j2IS8hJM_OV3@$3mi~sMcGe{9Pd#&s>!=SLH7bi5|~TIV(c@+_z!>XP12| zR2R7N#L8?uRQ}OW;BQZ~g=*hfxb2NwP6_o4-TM8f=6oyEeRju0&HLwszF9eRaPaTf zh4$ZBz3IHqE)IS3#f!di$8+b0YImHr`7dQZ2;a8VzwVWjH-tCqbMc`)+m~ee!_DRU zZJ%hlJ-nEo*M)aocjh^nXKxE1aqd5V|JS!Rg(GXO`tE6^*My(F`47*eItRjIhm1C4 zj~ou)aMm^VJo=4W!!JDW*pruU>JPWgA3nOO>6Y-T)4x-D*rUVYE1r9&{F;)R!cVte zefGEaUK9R(b?JX?y*Uxyao^?VE<1cf*l8Ue*zb`I;opticy--Rz8`+D7epI_bd$EF*A{T`N(i6s`T@|7rQN&n-jY6kb~Fl zTQ@CqLM-#>?ZM+icmM3+H%sQ#ht@}zeWUBz=FkhTKi=Qq`F7|o|F_oO@UuYZtnQK0 zixO>GuSw;_lz*YtU#{()to6IJoufn2?x`W^?^!B$jQZct=j*yL(g6Hdc#qt zoEtiS-8r|k^)3$WxcB$%r~hJUXye=;%}#!;-&2`{XNRxM|IDF~pq17rcv+Rls?_Ay-dZ%gU4%w2ZfAkGuiQ^l>`z!qU1Dp3haq(^8bzgsM=EE1=5bj`qxITQf!q2l^ ze;D?E<(0QjZQKyv#(HfEeell|H9=e46;_T2Nil3wP zZdL!T`{Bag-n&KK%B`TfgoLy{PgRUHHM0)i+yqa#JroEp*yv&c0*#>oaL2=K*hgZSV57P2rs?@3@kCmT!1I9-6QG@2(zg-E>n+=sQ~f7H#KrrGHoPe^CAx z^*Qk7&aeNm>Us6AFQ1D`>#!J{Ylxyp{KR}u`6nB-+tz@ z(CTx4cKw=}t)V#zU$5;|>i8SJ_u2Pfs9q8}UfVxL$Mf9cfk&GggEOzt{z`@f z=YSQVqyJxf*8(0@b**|UUzCDe(XXvawWb1UMKk@^K5I`hXHI-@ zKfiwWUiW8MbN;jT+H0-7_B#7K_LkdEy4ioxMI#F)ZRh&VTV5XV_RDLuRsF+9cCNZc z>$sra)8BBDmcO9q#Wg7#v}ey*F|O}d3$>lT8K)n2pjLBlYj*59@k;GCvtGy_+rLpe zRFZn$DbeNHhP;#4F3#Jat$*kFH+r7EL)&)ilFGm6wjJxWpH`gomiv?2wBIw|yjAX#R=HPdcd;Ce+yBQI&-Y(Ace3Z%*~@2MdjENv z@1(5g)EmZn{_wY#BZrTj=()1wma{I(DfR4T{g(WET=jk3b3Hp)?~kUAePZ#{YHjH? zYpSnXQ=&ze)LmZCc(La**88%*jX8RpvrT)7ej#gxJo;(2u6rHDp5sO=FLH=#&&%A-jI?`aPQ5nZ>EZS^{pPwGlRs+q z{EhW_n&rI8=ilUd$)!fWtmb|_m-~4;`}^#k1EEnX=6GJ?`jdorO*okAxtaOTVg6^C ze?9lhdE76LetO4AOGlM?@+ZH!ZRd^}Ph+vKckX{Rd(xWrZBHtScphfCvpHUta$K#F z{@$R~jQwd|_xl^P#y3vvZQZ?2yM^)Ve^!CRM-IbCTm4?c}mg3hJ)7T)X;_bAK30S)jcq z?bGdx1am*2Yl@3e*Yoc za~}I^3%5Ik{jiw*bC~0JKHKvk+rOCYu3|ZB*x!>`UJlE-iscybbBFdh>sP?~e8l=` ze0-C~h?5y?|4-QNyV&k+Z1-rkJBj_PbHDjn&xcsgF4nVws7qqtrk>w5+3xs=<> zX8mheZY}r2EY{PV#|Gg;3SEcXECO*i{}3fq5x1=J9bRPLzF@xGM*aohtoZv^gM;14d53F-jY-Kv2i3s(kZqnY52AxpMZw`XeNHw zH1$VQ@p3+VNq>}90e6AYs$X$wf0S0sb~X1$(}xS;Y5@+~)7~EySS{HL+6Y>MPuysA zW*9UT-@W@5^+##-UiZfSs1NejgEoS00qp|q0j1UPy`Z!jejn&I&^}Q5Mn-JvkJ2jl zbkKBs2$KPt3F-pP2h9hq2K9l4L2E#1HF_9yJ!m&5twvuD+6%e`lvbVhfQl5f3pxf= z+|wU*fx19TKx;s2K)XRZL3=>EL3=@I75F~T9-{X{PtZP4TFosUfS&MII%pfK!*MLU;s!nHKm8;29S9M&M&C@F#$$Ti~w&PX%t)=Y8P90#AXx zpWc6|0QfEo{0iW`z|keKLjG9|d>e3lejh7@Z)Se8KesZ! z8Gi$K59FBfgTNoNz$q_m0sj41t49Bh2TuB!aSw2^_Y4z%6>##W8E*zo{bk0N0=J5X z+ku8P?sC_QPUk1GE-o$E)R{{%eM0{_`ux z5z^~y;2GdY%8C`ji-C`^z%K+&`V8jxfIkA9^tq85D0HN+OfGbcSz#-7WGqW5aAYpA z&vv+M=bSdeky+r#C~%AcOQ9pxiz^g-jK5!^ejfbrW5hAlzme+SU@LWGtV}6%WUjCm zJ6y|#6*%&i44>xk*(N8AaO4#@To7I8$N;M$uP`Pr1qwC>`=cAFfiIU=?C>Qov=nEk zC(ee5D#&~6{r>2krPE z$>_`_)X&Mw9Af~$2c*wZ@NEMhnWYNF`|SX_UyMex2$X)T9pOlwH4@ci96W*ZTX23V z`R&W~Ep~)$<84E$EBh@C*V6SbN25*D9^|b^E^&-mW`hrxq$JOm8Y2$rq!1Lk9`Nr2 z|1tu=pAg3-4p(x6BNGP4qBsE72Z2OW_4XnVQbs}vR_ir{Yx z>{^=wc?WP{C2t^x5U9zvo2>_DkzobK62$Dl-`Y@rbjn$f`^wjl+mmYR95sZZs7_@R z{ys-v`Yw*omvk<=ZemjA3d#!4rPyB_k+gdF8%cMMu-$tU9XvO}{=!IcXavsg8i{}4 zwkxR;N;H}@;oW3AHX=dg2U5lU6#J%B@i__Vx7)8jN_;pBKbH(Abo+4PSauWuRQou2 zagzJ9O7V`(zJHE*IK__N9}Tm=GDqA!e18%SwvV*$o+A#Aln1w^+uxoe_TztHQz;%e z-rhY&>^VLkzh4<`Upq%EIgx&Uc9Q++IpV>Sufp#q|IOY%L)>(lJz60SW!RU`5&Ope zBMSst{kCIqPSYqW63DJ(c3X_s#?B=CkZ8eBy~8*l+TQ z$IrGuT_(1kWB;s7yymn&JWKrPT>Ji6;@58bBUPe5%f6vpJU7AqL4~+sqW!sYacz$M zujQgE*M9SCu{GEJ@Emd7B>S&ti{+E;AI=o7PPRW^Ar4NlZ>$n)r`p%g5x+Rk{&uCf zO|zlhpKGLacfK8Z?#ZWiHxy7?9~4k4j~0^5t|HRvr6Ou;T`_6(UNK32#7jCan?`Nz zoJKm_KAp6EawgpUYz2wjS!su%-<9t?@SO+#FL=O}ZCKGa;oG-n@cer4Z)!Q2=Lg@u z7T>k-zrh1E#iMdRc15A0jvq4}KW#eh<>NG?n&@>IKd?+mmbDKWlCVTumTkMoN~)e2 zs4&D5c3FD)Jk6`AsPl*Vqaiw`T{NlS0%;V!S5&i{jtV|p6!|J#3S_8R?UcEB*VfsAH)Ces|I)0oag# zbSKllF#VY6FnQA_#Av2xGRhlruQ&?gz2+PcQXA8(~p@BXIKTC(`u?5EX|l? zc6q|F4cUTrxiuG?NRExy!RKtkCe%2M$1xg?9gG;iZ5ZupTns*I6T^fWPx1J0p~huA zo+{M%jmM9Q<*j&pgy`dZ7LSh<`Rw0#JWcp4@uP*xgYo8i{*A{^5c@3g(ZXt6+Qf;%_vYBaBIIuyWkb%l zgHPJ9frmLx>AVdao0OR1*TB`)V?YX7pCbMq9YBm@~)sd}MO;)#A<#B$U;5QnnRvza83*k8LK(8{h&lK*7kWB;h@ z&t}GJO!#jZuQuT?0hfNj|0RnGJ!7Fl;YYZNXLWrX%FiF*L=xgN-4ut1C7$SiYQxH| z;b{E2ZzyN{3@bNo~@ZjQI0#1rGW75H(atf^c*1il&gIQY$V z7kNquPSfI$|dq=?#D}5S)lONW% z#`CX`{E2z{X6Emcvo|5W&+R@rgnW8`O7ioWU(HjG!VfEbrU9pT2y#5Y99haGeu7Bf zGgcnsN+3%$aH&7bSN1Mpyo>F^p)B;Qn)rRpe-z`7Gj8_V>%gt_bYcRW!F30d8Nf+? zuYCC z|DnVY=f#G6dInDAAj=6~XB?|`9dJ0sLzv@1`Ttb>AU~utKbtKkGrnb`kvEzQabhOp zee4+Z?y`;X3{!sC1l&shgG1o-GRlg7HE`0i+vMk`fRjJ_c)p~@>2~Jt<^EOU`tOX( zmlCi^-A9kX50dXP#mP*@x0v$P0^rnc$s0y~=wkn@l(<8zXFng$_(ql^O!8j`Ze{O# zivM22|Mc#JiXAul>4WA!28!4RZY8G%xYf8=16;;`yCDJ1$?`bk=Id#SgX6@ce=g%) zrhX3qx6-EzIQeZo$A2cbdxOLsqKW;c#wqPKOnPp4%3zf5Lh7W z`s8DbcB@U}?p(%&DbMEur*^}48UB~=64CCfz^&~1g8BEg8hR>y#v&l4{(SwF@Akm* zIB+XDF9EmeFFQah{`tTu9va^=;?QVa2pu?$_a0LmE&xvYbhDnyKQ{~^|86Pg1Q9m* z?KhG?P4w`5shb<_A41L)C~u|z`2b0u^oSuqeLJz3adZAz#dwcN|0jUszl5@z`Fl-q zA}}y14!5ygU0m}7;FSM;JU@^1qr?-$i%#I_7W3X855d14IN954(*L(Z@V~61Wta)U_a#XSr5wz=NQ07#-~euhv?$C zLU+q@AU2~`vJ3HulAfz`mhid)JdLR;NYuEi9odR3ogqwqrV8EF> zF>j(ZlV0D{+NAs2+WZT3Y?6cRaq8Q!Tv!iuw6rWll|e^3I3sba`uwu2`iKB=PiW9v zJ6d>+E))XfYS3w+bvf;^qtD06;yk^g7ORJY!6RE{Y+6)|^~f&0GT0ofi@4h(rImSD zdTd&T49M%w#bWIy?61=nA$5M#5!BJVS9iO0xs+IM4F!U}#>kXZqI+ldDhp>lBQ)HpOzy-eP<#Tm!30E#Du81`@ zd)l;0ZAXz`j!aXvnb9#&Mfp52{W%?cTe&M0`m}@>yyPU_zr))7l(Ck|fry~iBEyCk2l3JagO^J+Vqngeqb%De!agg==ITB|Dmle3AHsX!h(N)bEVwkKv}KqHoL0W zO{P&2`KH?wOrpISTc%*%l5t^43L>(nNtr0VGM0&=8JQHNQNU zJII~Y-b5Ffx#0kIqwxAFbq?Hw4y5sYL>-7MKMSr5H&a-(w4g&Qda<->7F?sQj7WEM zT|^gBlCv7eSvj~QMEuz3q$1cJjKs$-DOy!2cdW2<7xhV445*kZC)8r=i$E|C=Swoo(k!{r3g^n^pude{4wrLWAQq`Oh$ZtQ963lB*dNS` zOI)@d7g}oUBqX&wOi9{$SGGL%193T0}u(5E>#nr9Z--heR%sP3Y(QA<^z~2FKGGd@%GIV zI8FGC?dT|tSY&b9sE#IhiRl(_IihGF4b@X3%F;zsdwUqu&w&AA+#%Cd-yFV>F^O){ zDkI426*G?{0Z^8Yo88Ne^1lA0U*3GcN*#Od)iox}uM#s@t{T2D1}UL6(r(;h#u5PE z_9mu#>l+8DKrQY%TfepnlthsmjLrIFYN(oL9s|N3Zql&}pxmArU3Fx!(b7RZGvu8_ zkf!W(7oG6HCBc!VBosgMZM`f$^eDCxBQADx6}z{Z+j<$MN4RHi?`WZbD=NY>7T&Q@ zFQQp3jj!;+fmp=8rIh|+oi*q&3Z1A-a3erm<;_W43i;Nbw$RX!t}r=IUhssoePK() zUke&(Giamwg$)*i&W6?wr+nCO4mMhpM~(jWM&S%BY(-6jM%s)sDo`XFALuyO7HsxY z1^yLojtHmJ%88%Oh7b-TcmgGy^kfuFAsGZZ45w&Izm%*$l`JrXB`^jep3oF z9+Mg})bC5`P?3a@3Xm(+^|v(DK}aY6SE$Hr-&^y)=OD7+HFR8|=j?bD8EapCpQmUEzmTJL zNtCLu-WTTsBiX9`*h?dRAg{i|1&b`kTP$^i?eFoEzKK=!)%Sji4&w?+f5oThT-2v; zY}K*)E>O{4Zi@7$KczpzBEYz+uf88tRDIX0+E?|J{q*{TpWPsU!zcAHT-*YOuKi+*Z)>suu=yjX}e=0uJcc0sK8x_s% znU7yaUA!`m)mPt#_I}O!dr_BKQthknEq8s*`fr=+tM_yJxPF((|7QI^M12}Ns(tlc zYRz85ew7DRzp45v4i}r+SKqJt-ZbiO!TG^O)mQXWoE&U_>^s+eM*Td4#6+liiYDRw z;QH$O#JsnRib_uSD>+rR?YH2o2+j_*43;{7b{js{QVdjFt}JJ?`LQZvUST CQe4vj literal 0 HcmV?d00001 diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike1.sc b/source/HOAUGens/sc/Classes/HOAEncEigenMike1.sc old mode 100644 new mode 100755 diff --git a/source/HOAUGens/sc/Classes/HOAEncEigenMike1.so b/source/HOAUGens/sc/Classes/HOAEncEigenMike1.so new file mode 100755 index 0000000000000000000000000000000000000000..329d38f07331d34f7d5c041d055fbb527b53428a GIT binary patch literal 69664 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